ocarina: Programmatically create tabs

Dynamic playlists are going to need to run the same code to generate
playlist tabs as the static tabs.  Since I don't know how to use
GtkBuilder fragments, instead I write the code for generating each page.

Signed-off-by: Bryan Schumaker <bjschuma@gmail.com>
This commit is contained in:
Bryan Schumaker 2012-09-02 10:32:56 -04:00
parent 10cdc5248a
commit 370f6a6832
4 changed files with 97 additions and 718 deletions

View File

@ -36,7 +36,8 @@ string run_chooser(const string &);
/* playlist.cpp */
void update_playlist(notify_t, libsaria::PlaylistNotification *);
void init_playlist(struct PlaylistWidgets *widgets);
void setup_widgets(struct PlaylistWidgets *, libsaria::Playlist *);
GtkWidget *make_playlist_page(struct PlaylistWidgets *);
/* status.cpp */
bool update_idle_bar(int);

View File

@ -2,6 +2,19 @@
#include <libsaria/track.h>
#include <ocarina/ocarina.h>
static GType types[] = {
G_TYPE_POINTER, // libsaria::Track *
G_TYPE_UINT, // Track number
G_TYPE_STRING, // Title
G_TYPE_STRING, // Length
G_TYPE_STRING, // Artist
G_TYPE_STRING, // Album
G_TYPE_UINT, // Year
G_TYPE_UINT, // Count
G_TYPE_STRING, // Last played
G_TYPE_STRING, // Filepath
};
static string formatted(string str)
{
char *escaped = g_markup_escape_text(str.c_str(), -1);
@ -119,12 +132,66 @@ static void track_selected(GtkWidget *treeview, GtkTreePath *path,
track->load(true);
}
void init_playlist(struct PlaylistWidgets *widgets)
void setup_widgets(struct PlaylistWidgets *widgets, libsaria::Playlist *playlist)
{
unsigned int num_columns = sizeof(types) / sizeof(GType);
widgets->playlist = playlist;
widgets->liststore = gtk_list_store_newv(num_columns, types);
widgets->treeview = GTK_TREE_VIEW(gtk_tree_view_new());
widgets->filter = gtk_tree_model_filter_new(
GTK_TREE_MODEL(widgets->liststore), NULL);
widgets->label = GTK_LABEL(gtk_label_new("0"));
widgets->entry = GTK_ENTRY(gtk_entry_new());
gtk_tree_view_set_model(widgets->treeview, widgets->filter);
gtk_tree_view_set_rules_hint(widgets->treeview, TRUE);
gtk_tree_view_set_enable_search(widgets->treeview, FALSE);
gtk_tree_view_set_tooltip_column(widgets->treeview, 9);
gtk_tree_model_filter_set_visible_func(GTK_TREE_MODEL_FILTER(widgets->filter),
is_visible, widgets->playlist, NULL);
g_signal_connect(widgets->treeview, "row-activated", G_CALLBACK(track_selected), NULL);
g_signal_connect(widgets->entry, "changed", G_CALLBACK(do_filter), widgets->playlist);
}
static void add_column(GtkTreeView *treeview, const string &title, int index,
GtkTreeViewColumnSizing sizing, unsigned int fixed_width)
{
GtkCellRenderer *cell = gtk_cell_renderer_text_new();
GtkTreeViewColumn *column = gtk_tree_view_column_new_with_attributes(
title.c_str(), cell, "text", index, NULL);
gtk_tree_view_column_set_resizable(column, TRUE);
gtk_tree_view_column_set_sizing(column, sizing);
gtk_tree_view_column_set_fixed_width(column, fixed_width);
gtk_tree_view_column_set_min_width(column, 1);
gtk_tree_view_column_set_max_width(column, 700);
gtk_tree_view_append_column(treeview, column);
}
GtkWidget *make_playlist_page(struct PlaylistWidgets *widgets)
{
GtkWidget *box = gtk_vbox_new(FALSE, 0);
GtkWidget *window = gtk_scrolled_window_new(NULL, NULL);
gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(window),
GTK_POLICY_AUTOMATIC,
GTK_POLICY_AUTOMATIC);
gtk_box_pack_start(GTK_BOX(box), GTK_WIDGET(widgets->entry), FALSE, FALSE, 0);
gtk_box_pack_start(GTK_BOX(box), window, TRUE, TRUE, 0);
gtk_container_add(GTK_CONTAINER(window), GTK_WIDGET(widgets->treeview));
add_column(widgets->treeview, "#", 1, GTK_TREE_VIEW_COLUMN_FIXED, 20);
add_column(widgets->treeview, "Title", 2, GTK_TREE_VIEW_COLUMN_FIXED, 300);
add_column(widgets->treeview, "Length", 3, GTK_TREE_VIEW_COLUMN_GROW_ONLY, 1);
add_column(widgets->treeview, "Artist", 4, GTK_TREE_VIEW_COLUMN_FIXED, 125);
add_column(widgets->treeview, "Album", 5, GTK_TREE_VIEW_COLUMN_FIXED, 125);
add_column(widgets->treeview, "Year", 6, GTK_TREE_VIEW_COLUMN_GROW_ONLY, 1);
add_column(widgets->treeview, "Count", 7, GTK_TREE_VIEW_COLUMN_GROW_ONLY, 1);
add_column(widgets->treeview, "Played", 8, GTK_TREE_VIEW_COLUMN_GROW_ONLY, 1);
gtk_widget_show_all(box);
return box;
}

View File

@ -127,38 +127,41 @@ static void init_tab_action()
box, GTK_PACK_END);
}
static void init_static_tab(struct PlaylistWidgets *widgets,
libsaria::Playlist *playlist,
const string &list_name,
const string &view_name,
const string &label_name,
const string &entry_name)
static void add_page(GtkWidget *page, GtkWidget *label, int index)
{
widgets->playlist = playlist;
widgets->liststore = GTK_LIST_STORE(get_object(list_name));
widgets->treeview = GTK_TREE_VIEW(get_widget(view_name));
widgets->filter = gtk_tree_model_filter_new(
GTK_TREE_MODEL(widgets->liststore), NULL);
widgets->label = GTK_LABEL(get_widget(label_name));
widgets->entry = GTK_ENTRY(get_widget(entry_name));
gtk_notebook_insert_page(GTK_NOTEBOOK(get_widget("PlaylistTabs")),
page, label, index);
}
init_playlist(widgets);
connect_signal(entry_name, "focus-in-event", G_CALLBACK(on_focus_change), NULL);
static GtkWidget *make_tab_label(const string &name, struct PlaylistWidgets *widgets)
{
GtkWidget *box = gtk_vbox_new(FALSE, 0);
GtkWidget *label = gtk_label_new(name.c_str());
gtk_misc_set_alignment(GTK_MISC(label), 1.0, 0.0);
gtk_misc_set_alignment(GTK_MISC(widgets->label), 1.0, 0.0);
gtk_box_pack_start(GTK_BOX(box), label, FALSE, FALSE, 0);
gtk_box_pack_start(GTK_BOX(box), GTK_WIDGET(widgets->label), FALSE, FALSE, 0);
gtk_widget_show_all(box);
return box;
}
static void add_static_page(const string &name, struct PlaylistWidgets *widgets,
libsaria::Playlist *playlist)
{
setup_widgets(widgets, playlist);
g_signal_connect(widgets->entry, "focus-in-event", G_CALLBACK(on_focus_change), NULL);
add_page(make_playlist_page(widgets), make_tab_label(name, widgets), -1);
}
void init_tabs()
{
init_tab_action();
init_static_tab(&library_widgets, libsaria::library::get_playlist(),
"LibraryPlist", "LibraryPlistView",
"LibrarySize", "LibraryEntry");
init_static_tab(&recent_widgets, libsaria::deck::get_recent_plist(),
"RecentPlist", "RecentView",
"RecentSize", "RecentEntry");
init_static_tab(&banned_widgets, libsaria::ban::get_banned_plist(),
"BannedPlist", "BannedView",
"BannedSize", "BannedEntry");
add_static_page("Library", &library_widgets, libsaria::library::get_playlist());
add_static_page("Recent", &recent_widgets, libsaria::deck::get_recent_plist());
add_static_page("Banned", &banned_widgets, libsaria::ban::get_banned_plist());
connect_signal("PlaylistTabs", "switch-page", G_CALLBACK(on_switch_page), NULL);
}

View File

@ -2,30 +2,6 @@
<interface>
<!-- interface-requires gtk+ 3.0 -->
<!-- interface-naming-policy toplevel-contextual -->
<object class="GtkListStore" id="BannedPlist">
<columns>
<!-- column-name Pointer -->
<column type="gpointer"/>
<!-- column-name # -->
<column type="guint"/>
<!-- column-name Title -->
<column type="gchararray"/>
<!-- column-name Length -->
<column type="gchararray"/>
<!-- column-name Artist -->
<column type="gchararray"/>
<!-- column-name Album -->
<column type="gchararray"/>
<!-- column-name Year -->
<column type="guint"/>
<!-- column-name Count -->
<column type="guint"/>
<!-- column-name Last -->
<column type="gchararray"/>
<!-- column-name Filepath -->
<column type="gchararray"/>
</columns>
</object>
<object class="GtkAction" id="action1"/>
<object class="GtkFileChooserDialog" id="DirectoryChooser">
<property name="can_focus">False</property>
@ -169,30 +145,6 @@
<column type="guint"/>
</columns>
</object>
<object class="GtkListStore" id="LibraryPlist">
<columns>
<!-- column-name Pointer -->
<column type="gpointer"/>
<!-- column-name # -->
<column type="guint"/>
<!-- column-name Title -->
<column type="gchararray"/>
<!-- column-name Length -->
<column type="gchararray"/>
<!-- column-name Artist -->
<column type="gchararray"/>
<!-- column-name Album -->
<column type="gchararray"/>
<!-- column-name Year -->
<column type="guint"/>
<!-- column-name Count -->
<column type="guint"/>
<!-- column-name Last -->
<column type="gchararray"/>
<!-- column-name Filepath -->
<column type="gchararray"/>
</columns>
</object>
<object class="GtkAdjustment" id="PauseAdjustment">
<property name="upper">256</property>
<property name="step_increment">1</property>
@ -216,626 +168,6 @@
<property name="tab_border">0</property>
<property name="tab_hborder">0</property>
<property name="tab_vborder">0</property>
<child>
<object class="GtkVBox" id="vbox6">
<property name="visible">True</property>
<property name="can_focus">False</property>
<child>
<object class="GtkEntry" id="LibraryEntry">
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="invisible_char"></property>
<property name="primary_icon_activatable">False</property>
<property name="secondary_icon_activatable">False</property>
<property name="primary_icon_sensitive">True</property>
<property name="secondary_icon_sensitive">True</property>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">False</property>
<property name="position">0</property>
</packing>
</child>
<child>
<object class="GtkScrolledWindow" id="scrolledwindow3">
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="hscrollbar_policy">automatic</property>
<property name="vscrollbar_policy">automatic</property>
<child>
<object class="GtkTreeView" id="LibraryPlistView">
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="model">LibraryPlist</property>
<property name="rules_hint">True</property>
<property name="enable_search">False</property>
<property name="tooltip_column">9</property>
<child>
<object class="GtkTreeViewColumn" id="treeviewcolumn4">
<property name="resizable">True</property>
<property name="sizing">fixed</property>
<property name="fixed_width">20</property>
<property name="min_width">2</property>
<property name="max_width">700</property>
<property name="title" translatable="yes">#</property>
<child>
<object class="GtkCellRendererText" id="cellrenderertext3"/>
<attributes>
<attribute name="text">1</attribute>
</attributes>
</child>
</object>
</child>
<child>
<object class="GtkTreeViewColumn" id="treeviewcolumn5">
<property name="resizable">True</property>
<property name="sizing">fixed</property>
<property name="fixed_width">300</property>
<property name="min_width">2</property>
<property name="max_width">700</property>
<property name="title" translatable="yes">Title</property>
<child>
<object class="GtkCellRendererText" id="cellrenderertext4"/>
<attributes>
<attribute name="text">2</attribute>
</attributes>
</child>
</object>
</child>
<child>
<object class="GtkTreeViewColumn" id="treeviewcolumn6">
<property name="resizable">True</property>
<property name="min_width">2</property>
<property name="max_width">700</property>
<property name="title" translatable="yes">Length</property>
<child>
<object class="GtkCellRendererText" id="cellrenderertext5"/>
<attributes>
<attribute name="text">3</attribute>
</attributes>
</child>
</object>
</child>
<child>
<object class="GtkTreeViewColumn" id="treeviewcolumn7">
<property name="resizable">True</property>
<property name="sizing">fixed</property>
<property name="fixed_width">125</property>
<property name="min_width">2</property>
<property name="max_width">700</property>
<property name="title" translatable="yes">Artist</property>
<child>
<object class="GtkCellRendererText" id="cellrenderertext6"/>
<attributes>
<attribute name="text">4</attribute>
</attributes>
</child>
</object>
</child>
<child>
<object class="GtkTreeViewColumn" id="treeviewcolumn8">
<property name="resizable">True</property>
<property name="sizing">fixed</property>
<property name="fixed_width">125</property>
<property name="min_width">2</property>
<property name="max_width">700</property>
<property name="title" translatable="yes">Album</property>
<child>
<object class="GtkCellRendererText" id="cellrenderertext7"/>
<attributes>
<attribute name="text">5</attribute>
</attributes>
</child>
</object>
</child>
<child>
<object class="GtkTreeViewColumn" id="treeviewcolumn9">
<property name="resizable">True</property>
<property name="min_width">2</property>
<property name="max_width">700</property>
<property name="title" translatable="yes">Year</property>
<child>
<object class="GtkCellRendererText" id="cellrenderertext8"/>
<attributes>
<attribute name="text">6</attribute>
</attributes>
</child>
</object>
</child>
<child>
<object class="GtkTreeViewColumn" id="treeviewcolumn10">
<property name="resizable">True</property>
<property name="min_width">2</property>
<property name="max_width">700</property>
<property name="title" translatable="yes">Count</property>
<child>
<object class="GtkCellRendererText" id="cellrenderertext9"/>
<attributes>
<attribute name="text">7</attribute>
</attributes>
</child>
</object>
</child>
<child>
<object class="GtkTreeViewColumn" id="treeviewcolumn11">
<property name="resizable">True</property>
<property name="min_width">2</property>
<property name="max_width">700</property>
<property name="title" translatable="yes">Played</property>
<child>
<object class="GtkCellRendererText" id="cellrenderertext10"/>
<attributes>
<attribute name="text">8</attribute>
</attributes>
</child>
</object>
</child>
</object>
</child>
</object>
<packing>
<property name="expand">True</property>
<property name="fill">True</property>
<property name="position">1</property>
</packing>
</child>
</object>
</child>
<child type="tab">
<object class="GtkVBox" id="vbox7">
<property name="visible">True</property>
<property name="can_focus">False</property>
<child>
<object class="GtkLabel" id="label4">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="xalign">1</property>
<property name="yalign">0</property>
<property name="label" translatable="yes">Library</property>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">False</property>
<property name="position">0</property>
</packing>
</child>
<child>
<object class="GtkLabel" id="LibrarySize">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="xalign">1</property>
<property name="yalign">0</property>
<property name="label" translatable="yes">0</property>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">False</property>
<property name="position">1</property>
</packing>
</child>
</object>
<packing>
<property name="tab_fill">False</property>
</packing>
</child>
<child>
<object class="GtkVBox" id="vbox9">
<property name="visible">True</property>
<property name="can_focus">False</property>
<child>
<object class="GtkEntry" id="RecentEntry">
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="invisible_char"></property>
<property name="invisible_char_set">True</property>
<property name="primary_icon_activatable">False</property>
<property name="secondary_icon_activatable">False</property>
<property name="primary_icon_sensitive">True</property>
<property name="secondary_icon_sensitive">True</property>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">False</property>
<property name="position">0</property>
</packing>
</child>
<child>
<object class="GtkScrolledWindow" id="scrolledwindow4">
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="hscrollbar_policy">automatic</property>
<property name="vscrollbar_policy">automatic</property>
<child>
<object class="GtkTreeView" id="RecentView">
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="model">RecentPlist</property>
<property name="headers_clickable">False</property>
<property name="rules_hint">True</property>
<property name="enable_search">False</property>
<property name="search_column">1</property>
<property name="tooltip_column">9</property>
<child>
<object class="GtkTreeViewColumn" id="treeviewcolumn12">
<property name="resizable">True</property>
<property name="sizing">fixed</property>
<property name="fixed_width">20</property>
<property name="min_width">2</property>
<property name="max_width">700</property>
<property name="title" translatable="yes">#</property>
<child>
<object class="GtkCellRendererText" id="cellrenderertext11"/>
<attributes>
<attribute name="text">1</attribute>
</attributes>
</child>
</object>
</child>
<child>
<object class="GtkTreeViewColumn" id="treeviewcolumn13">
<property name="resizable">True</property>
<property name="sizing">fixed</property>
<property name="fixed_width">300</property>
<property name="min_width">2</property>
<property name="max_width">700</property>
<property name="title" translatable="yes">Title</property>
<child>
<object class="GtkCellRendererText" id="cellrenderertext12"/>
<attributes>
<attribute name="text">2</attribute>
</attributes>
</child>
</object>
</child>
<child>
<object class="GtkTreeViewColumn" id="treeviewcolumn14">
<property name="resizable">True</property>
<property name="min_width">2</property>
<property name="max_width">700</property>
<property name="title" translatable="yes">Length</property>
<child>
<object class="GtkCellRendererText" id="cellrenderertext13"/>
<attributes>
<attribute name="text">3</attribute>
</attributes>
</child>
</object>
</child>
<child>
<object class="GtkTreeViewColumn" id="treeviewcolumn15">
<property name="resizable">True</property>
<property name="sizing">fixed</property>
<property name="fixed_width">125</property>
<property name="min_width">2</property>
<property name="max_width">700</property>
<property name="title" translatable="yes">Artist</property>
<child>
<object class="GtkCellRendererText" id="cellrenderertext14"/>
<attributes>
<attribute name="text">4</attribute>
</attributes>
</child>
</object>
</child>
<child>
<object class="GtkTreeViewColumn" id="treeviewcolumn16">
<property name="resizable">True</property>
<property name="sizing">fixed</property>
<property name="fixed_width">125</property>
<property name="min_width">2</property>
<property name="max_width">700</property>
<property name="title" translatable="yes">Album</property>
<child>
<object class="GtkCellRendererText" id="cellrenderertext15"/>
<attributes>
<attribute name="text">5</attribute>
</attributes>
</child>
</object>
</child>
<child>
<object class="GtkTreeViewColumn" id="treeviewcolumn17">
<property name="resizable">True</property>
<property name="min_width">2</property>
<property name="max_width">700</property>
<property name="title" translatable="yes">Year</property>
<child>
<object class="GtkCellRendererText" id="cellrenderertext16"/>
<attributes>
<attribute name="text">6</attribute>
</attributes>
</child>
</object>
</child>
<child>
<object class="GtkTreeViewColumn" id="treeviewcolumn18">
<property name="resizable">True</property>
<property name="min_width">2</property>
<property name="max_width">700</property>
<property name="title" translatable="yes">Count</property>
<child>
<object class="GtkCellRendererText" id="cellrenderertext17"/>
<attributes>
<attribute name="text">7</attribute>
</attributes>
</child>
</object>
</child>
<child>
<object class="GtkTreeViewColumn" id="treeviewcolumn19">
<property name="resizable">True</property>
<property name="min_width">2</property>
<property name="max_width">700</property>
<property name="title" translatable="yes">Played</property>
<child>
<object class="GtkCellRendererText" id="cellrenderertext18"/>
<attributes>
<attribute name="text">8</attribute>
</attributes>
</child>
</object>
</child>
</object>
</child>
</object>
<packing>
<property name="expand">True</property>
<property name="fill">True</property>
<property name="position">1</property>
</packing>
</child>
</object>
<packing>
<property name="position">1</property>
</packing>
</child>
<child type="tab">
<object class="GtkVBox" id="vbox8">
<property name="visible">True</property>
<property name="can_focus">False</property>
<child>
<object class="GtkLabel" id="label6">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="xalign">1</property>
<property name="yalign">0</property>
<property name="label" translatable="yes">Recent</property>
</object>
<packing>
<property name="expand">True</property>
<property name="fill">True</property>
<property name="position">0</property>
</packing>
</child>
<child>
<object class="GtkLabel" id="RecentSize">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="xalign">1</property>
<property name="yalign">0</property>
<property name="label" translatable="yes">0</property>
</object>
<packing>
<property name="expand">True</property>
<property name="fill">True</property>
<property name="position">1</property>
</packing>
</child>
</object>
<packing>
<property name="position">1</property>
<property name="tab_fill">False</property>
</packing>
</child>
<child>
<object class="GtkVBox" id="vbox11">
<property name="visible">True</property>
<property name="can_focus">False</property>
<child>
<object class="GtkEntry" id="BannedEntry">
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="invisible_char"></property>
<property name="invisible_char_set">True</property>
<property name="primary_icon_activatable">False</property>
<property name="secondary_icon_activatable">False</property>
<property name="primary_icon_sensitive">True</property>
<property name="secondary_icon_sensitive">True</property>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">False</property>
<property name="position">0</property>
</packing>
</child>
<child>
<object class="GtkScrolledWindow" id="scrolledwindow5">
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="hscrollbar_policy">automatic</property>
<property name="vscrollbar_policy">automatic</property>
<child>
<object class="GtkTreeView" id="BannedView">
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="model">BannedPlist</property>
<property name="headers_clickable">False</property>
<property name="rules_hint">True</property>
<property name="enable_search">False</property>
<property name="search_column">1</property>
<property name="tooltip_column">9</property>
<child>
<object class="GtkTreeViewColumn" id="treeviewcolumn20">
<property name="resizable">True</property>
<property name="sizing">fixed</property>
<property name="fixed_width">20</property>
<property name="min_width">2</property>
<property name="max_width">700</property>
<property name="title" translatable="yes">#</property>
<child>
<object class="GtkCellRendererText" id="cellrenderertext19"/>
<attributes>
<attribute name="text">1</attribute>
</attributes>
</child>
</object>
</child>
<child>
<object class="GtkTreeViewColumn" id="treeviewcolumn21">
<property name="resizable">True</property>
<property name="sizing">fixed</property>
<property name="fixed_width">300</property>
<property name="min_width">2</property>
<property name="max_width">700</property>
<property name="title" translatable="yes">Title</property>
<child>
<object class="GtkCellRendererText" id="cellrenderertext20"/>
<attributes>
<attribute name="text">2</attribute>
</attributes>
</child>
</object>
</child>
<child>
<object class="GtkTreeViewColumn" id="treeviewcolumn22">
<property name="resizable">True</property>
<property name="min_width">2</property>
<property name="max_width">700</property>
<property name="title" translatable="yes">Length</property>
<child>
<object class="GtkCellRendererText" id="cellrenderertext21"/>
<attributes>
<attribute name="text">3</attribute>
</attributes>
</child>
</object>
</child>
<child>
<object class="GtkTreeViewColumn" id="treeviewcolumn23">
<property name="resizable">True</property>
<property name="sizing">fixed</property>
<property name="fixed_width">125</property>
<property name="min_width">2</property>
<property name="max_width">700</property>
<property name="title" translatable="yes">Artist</property>
<child>
<object class="GtkCellRendererText" id="cellrenderertext22"/>
<attributes>
<attribute name="text">4</attribute>
</attributes>
</child>
</object>
</child>
<child>
<object class="GtkTreeViewColumn" id="treeviewcolumn24">
<property name="resizable">True</property>
<property name="sizing">fixed</property>
<property name="fixed_width">125</property>
<property name="min_width">2</property>
<property name="max_width">700</property>
<property name="title" translatable="yes">Album</property>
<child>
<object class="GtkCellRendererText" id="cellrenderertext23"/>
<attributes>
<attribute name="text">5</attribute>
</attributes>
</child>
</object>
</child>
<child>
<object class="GtkTreeViewColumn" id="treeviewcolumn25">
<property name="resizable">True</property>
<property name="min_width">2</property>
<property name="max_width">700</property>
<property name="title" translatable="yes">Year</property>
<child>
<object class="GtkCellRendererText" id="cellrenderertext24"/>
<attributes>
<attribute name="text">6</attribute>
</attributes>
</child>
</object>
</child>
<child>
<object class="GtkTreeViewColumn" id="treeviewcolumn26">
<property name="resizable">True</property>
<property name="min_width">2</property>
<property name="max_width">700</property>
<property name="title" translatable="yes">Count</property>
<child>
<object class="GtkCellRendererText" id="cellrenderertext25"/>
<attributes>
<attribute name="text">7</attribute>
</attributes>
</child>
</object>
</child>
<child>
<object class="GtkTreeViewColumn" id="treeviewcolumn27">
<property name="resizable">True</property>
<property name="min_width">2</property>
<property name="max_width">700</property>
<property name="title" translatable="yes">Played</property>
<child>
<object class="GtkCellRendererText" id="cellrenderertext26"/>
<attributes>
<attribute name="text">8</attribute>
</attributes>
</child>
</object>
</child>
</object>
</child>
</object>
<packing>
<property name="expand">True</property>
<property name="fill">True</property>
<property name="position">1</property>
</packing>
</child>
</object>
<packing>
<property name="position">2</property>
</packing>
</child>
<child type="tab">
<object class="GtkVBox" id="vbox10">
<property name="visible">True</property>
<property name="can_focus">False</property>
<child>
<object class="GtkLabel" id="label7">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="xalign">1</property>
<property name="yalign">0</property>
<property name="label" translatable="yes">Banned</property>
</object>
<packing>
<property name="expand">True</property>
<property name="fill">True</property>
<property name="position">0</property>
</packing>
</child>
<child>
<object class="GtkLabel" id="BannedSize">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="xalign">1</property>
<property name="yalign">0</property>
<property name="label" translatable="yes">0</property>
</object>
<packing>
<property name="expand">True</property>
<property name="fill">True</property>
<property name="position">1</property>
</packing>
</child>
</object>
<packing>
<property name="position">2</property>
<property name="tab_fill">False</property>
</packing>
</child>
</object>
<packing>
<property name="expand">True</property>
@ -1391,28 +723,4 @@
</object>
</child>
</object>
<object class="GtkListStore" id="RecentPlist">
<columns>
<!-- column-name Pointer -->
<column type="gpointer"/>
<!-- column-name # -->
<column type="guint"/>
<!-- column-name Title -->
<column type="gchararray"/>
<!-- column-name Length -->
<column type="gchararray"/>
<!-- column-name Artist -->
<column type="gchararray"/>
<!-- column-name Album -->
<column type="gchararray"/>
<!-- column-name Year -->
<column type="guint"/>
<!-- column-name Count -->
<column type="guint"/>
<!-- column-name Last -->
<column type="gchararray"/>
<!-- column-name Filepath -->
<column type="gchararray"/>
</columns>
</object>
</interface>