gui: Create a custom Gtk::TreeView for queues
The QueueView doesn't contain too much in terms of code, but the corresponding QueueView.ui file lets me remove a lot of unnecessary stuff from temporary queue creation! Signed-off-by: Anna Schumaker <Anna@OcarinaProject.net>
This commit is contained in:
parent
6dfb3c31e2
commit
1e29ba8cc6
|
@ -2,6 +2,7 @@
|
||||||
*.sw*
|
*.sw*
|
||||||
*.out
|
*.out
|
||||||
*.glade~
|
*.glade~
|
||||||
|
*.ui~
|
||||||
share/ocarina/#*
|
share/ocarina/#*
|
||||||
bin/
|
bin/
|
||||||
.sconsign.dblite
|
.sconsign.dblite
|
||||||
|
|
|
@ -4,10 +4,10 @@
|
||||||
#include <core/deck.h>
|
#include <core/deck.h>
|
||||||
#include <core/string.h>
|
#include <core/string.h>
|
||||||
#include <gui/tabs.h>
|
#include <gui/tabs.h>
|
||||||
|
#include <gui/queue/view.h>
|
||||||
|
|
||||||
|
|
||||||
static void renumber_queues();
|
static void renumber_queues();
|
||||||
static unsigned int q_col_width[] = { 20, 300, 60, 100, 100, 45, 100, 60, 1 };
|
|
||||||
|
|
||||||
static class QueueColumns : public Gtk::TreeModelColumnRecord {
|
static class QueueColumns : public Gtk::TreeModelColumnRecord {
|
||||||
public:
|
public:
|
||||||
|
@ -33,6 +33,8 @@ public:
|
||||||
|
|
||||||
class QueueTab : public Tab {
|
class QueueTab : public Tab {
|
||||||
private:
|
private:
|
||||||
|
Glib::RefPtr<Gtk::Builder> builder;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Queue tab widgets
|
* Queue tab widgets
|
||||||
*/
|
*/
|
||||||
|
@ -58,7 +60,7 @@ private:
|
||||||
|
|
||||||
/* Treeview widgets */
|
/* Treeview widgets */
|
||||||
Gtk::ScrolledWindow q_window;
|
Gtk::ScrolledWindow q_window;
|
||||||
Gtk::TreeView q_treeview;
|
QueueView *q_treeview;
|
||||||
|
|
||||||
|
|
||||||
public:
|
public:
|
||||||
|
@ -92,6 +94,9 @@ static std::map<Gtk::Widget *, QueueTab *> queue_mapping;
|
||||||
QueueTab :: QueueTab(Queue *pq, unsigned int num)
|
QueueTab :: QueueTab(Queue *pq, unsigned int num)
|
||||||
: Tab(pq)
|
: Tab(pq)
|
||||||
{
|
{
|
||||||
|
builder = Gtk::Builder::create();
|
||||||
|
builder->add_from_file(gui :: share_file("QueueView.ui"));
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Create our tab widget
|
* Create our tab widget
|
||||||
*/
|
*/
|
||||||
|
@ -131,12 +136,12 @@ QueueTab :: QueueTab(Queue *pq, unsigned int num)
|
||||||
/*
|
/*
|
||||||
* And the treeview with scrolled window
|
* And the treeview with scrolled window
|
||||||
*/
|
*/
|
||||||
|
builder->get_widget_derived("QueueView", q_treeview);
|
||||||
q_window.set_shadow_type(Gtk::SHADOW_IN);
|
q_window.set_shadow_type(Gtk::SHADOW_IN);
|
||||||
q_window.set_margin_left(5);
|
q_window.set_margin_left(5);
|
||||||
q_window.set_margin_right(5);
|
q_window.set_margin_right(5);
|
||||||
q_window.set_margin_bottom(5);
|
q_window.set_margin_bottom(5);
|
||||||
q_window.add(q_treeview);
|
q_window.add(*q_treeview);
|
||||||
setup_treeview();
|
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -158,7 +163,7 @@ QueueTab :: QueueTab(Queue *pq, unsigned int num)
|
||||||
tab_repeat = &q_repeat;
|
tab_repeat = &q_repeat;
|
||||||
tab_search = &q_search;
|
tab_search = &q_search;
|
||||||
tab_size = &q_tab_size;
|
tab_size = &q_tab_size;
|
||||||
tab_treeview = &q_treeview;
|
tab_treeview = q_treeview;
|
||||||
tab_widget = &q_vbox;
|
tab_widget = &q_vbox;
|
||||||
|
|
||||||
tab_finish_init();
|
tab_finish_init();
|
||||||
|
@ -192,33 +197,6 @@ void QueueTab :: on_track_removed(unsigned int row)
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
|
|
||||||
void QueueTab :: setup_treeview()
|
|
||||||
{
|
|
||||||
q_treeview.append_column("#", queue_cols.q_col_track);
|
|
||||||
q_treeview.append_column("Title", queue_cols.q_col_title);
|
|
||||||
q_treeview.append_column("Length", queue_cols.q_col_length);
|
|
||||||
q_treeview.append_column("Artist", queue_cols.q_col_artist);
|
|
||||||
q_treeview.append_column("Album", queue_cols.q_col_album);
|
|
||||||
q_treeview.append_column("Year", queue_cols.q_col_year);
|
|
||||||
q_treeview.append_column("Genre", queue_cols.q_col_genre);
|
|
||||||
q_treeview.append_column("Count", queue_cols.q_col_count);
|
|
||||||
q_treeview.append_column("Played", queue_cols.q_col_played);
|
|
||||||
|
|
||||||
q_treeview.set_tooltip_column(9);
|
|
||||||
q_treeview.set_enable_search(false);
|
|
||||||
q_treeview.get_selection()->set_mode(Gtk::SELECTION_MULTIPLE);
|
|
||||||
q_treeview.set_rubber_banding();
|
|
||||||
|
|
||||||
std::vector<Gtk::TreeViewColumn *> columns = q_treeview.get_columns();
|
|
||||||
for (unsigned int i = 0; i < columns.size(); i++) {
|
|
||||||
columns[i]->set_resizable();
|
|
||||||
columns[i]->set_fixed_width(q_col_width[i]);
|
|
||||||
columns[i]->set_sizing(Gtk::TREE_VIEW_COLUMN_FIXED);
|
|
||||||
columns[i]->set_clickable();
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
void QueueTab :: on_post_init()
|
void QueueTab :: on_post_init()
|
||||||
{
|
{
|
||||||
tab_init_random();
|
tab_init_random();
|
||||||
|
@ -284,7 +262,7 @@ void QueueTab :: queue_set_sensitive(bool sensitive)
|
||||||
{
|
{
|
||||||
q_tab_number.set_sensitive(sensitive);
|
q_tab_number.set_sensitive(sensitive);
|
||||||
q_tab_size.set_sensitive(sensitive);
|
q_tab_size.set_sensitive(sensitive);
|
||||||
q_treeview.set_sensitive(sensitive);
|
q_treeview->set_sensitive(sensitive);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,14 @@
|
||||||
|
/*
|
||||||
|
* Copyright 2015 (c) Anna Schumaker.
|
||||||
|
*/
|
||||||
|
#include <gui/queue/view.h>
|
||||||
|
|
||||||
|
QueueView :: QueueView(BaseObjectType *cobject,
|
||||||
|
const Glib::RefPtr<Gtk::Builder> builder)
|
||||||
|
: Gtk::TreeView(cobject), _builder(builder)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
QueueView :: ~QueueView()
|
||||||
|
{
|
||||||
|
}
|
|
@ -0,0 +1,18 @@
|
||||||
|
/*
|
||||||
|
* Copyright 2015 (c) Anna Schumaker.
|
||||||
|
*/
|
||||||
|
#ifndef OCARINA_GUI_QUEUE_VIEW_H
|
||||||
|
#define OCARINA_GUI_QUEUE_VIEW_H
|
||||||
|
|
||||||
|
#include <gtkmm.h>
|
||||||
|
|
||||||
|
class QueueView : public Gtk::TreeView {
|
||||||
|
private:
|
||||||
|
Glib::RefPtr<Gtk::Builder> _builder;
|
||||||
|
|
||||||
|
public:
|
||||||
|
QueueView(BaseObjectType *, const Glib::RefPtr<Gtk::Builder>);
|
||||||
|
~QueueView();
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif /* OCARINA_GUI_QUEUE_VIEW_H */
|
|
@ -0,0 +1,152 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<!-- Generated with glade 3.18.3 -->
|
||||||
|
<interface>
|
||||||
|
<requires lib="gtk+" version="3.12"/>
|
||||||
|
<object class="GtkTreeView" id="QueueView">
|
||||||
|
<property name="visible">True</property>
|
||||||
|
<property name="can_focus">True</property>
|
||||||
|
<property name="enable_search">False</property>
|
||||||
|
<property name="rubber_banding">True</property>
|
||||||
|
<property name="tooltip_column">9</property>
|
||||||
|
<child internal-child="selection">
|
||||||
|
<object class="GtkTreeSelection" id="treeview-selection1">
|
||||||
|
<property name="mode">multiple</property>
|
||||||
|
</object>
|
||||||
|
</child>
|
||||||
|
<child>
|
||||||
|
<object class="GtkTreeViewColumn" id="treeviewcolumn1">
|
||||||
|
<property name="resizable">True</property>
|
||||||
|
<property name="sizing">fixed</property>
|
||||||
|
<property name="fixed_width">20</property>
|
||||||
|
<property name="title" translatable="yes">#</property>
|
||||||
|
<property name="clickable">True</property>
|
||||||
|
<child>
|
||||||
|
<object class="GtkCellRendererText" id="cellrenderertext1"/>
|
||||||
|
<attributes>
|
||||||
|
<attribute name="text">0</attribute>
|
||||||
|
</attributes>
|
||||||
|
</child>
|
||||||
|
</object>
|
||||||
|
</child>
|
||||||
|
<child>
|
||||||
|
<object class="GtkTreeViewColumn" id="treeviewcolumn2">
|
||||||
|
<property name="resizable">True</property>
|
||||||
|
<property name="sizing">fixed</property>
|
||||||
|
<property name="fixed_width">300</property>
|
||||||
|
<property name="title" translatable="yes">Title</property>
|
||||||
|
<property name="clickable">True</property>
|
||||||
|
<child>
|
||||||
|
<object class="GtkCellRendererText" id="cellrenderertext2"/>
|
||||||
|
<attributes>
|
||||||
|
<attribute name="text">1</attribute>
|
||||||
|
</attributes>
|
||||||
|
</child>
|
||||||
|
</object>
|
||||||
|
</child>
|
||||||
|
<child>
|
||||||
|
<object class="GtkTreeViewColumn" id="treeviewcolumn3">
|
||||||
|
<property name="resizable">True</property>
|
||||||
|
<property name="sizing">fixed</property>
|
||||||
|
<property name="fixed_width">60</property>
|
||||||
|
<property name="title" translatable="yes">Length</property>
|
||||||
|
<property name="clickable">True</property>
|
||||||
|
<child>
|
||||||
|
<object class="GtkCellRendererText" id="cellrenderertext3"/>
|
||||||
|
<attributes>
|
||||||
|
<attribute name="text">2</attribute>
|
||||||
|
</attributes>
|
||||||
|
</child>
|
||||||
|
</object>
|
||||||
|
</child>
|
||||||
|
<child>
|
||||||
|
<object class="GtkTreeViewColumn" id="treeviewcolumn4">
|
||||||
|
<property name="resizable">True</property>
|
||||||
|
<property name="sizing">fixed</property>
|
||||||
|
<property name="fixed_width">100</property>
|
||||||
|
<property name="title" translatable="yes">Artist</property>
|
||||||
|
<property name="clickable">True</property>
|
||||||
|
<child>
|
||||||
|
<object class="GtkCellRendererText" id="cellrenderertext4"/>
|
||||||
|
<attributes>
|
||||||
|
<attribute name="text">3</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">100</property>
|
||||||
|
<property name="title" translatable="yes">Album</property>
|
||||||
|
<property name="clickable">True</property>
|
||||||
|
<child>
|
||||||
|
<object class="GtkCellRendererText" id="cellrenderertext5"/>
|
||||||
|
<attributes>
|
||||||
|
<attribute name="text">4</attribute>
|
||||||
|
</attributes>
|
||||||
|
</child>
|
||||||
|
</object>
|
||||||
|
</child>
|
||||||
|
<child>
|
||||||
|
<object class="GtkTreeViewColumn" id="treeviewcolumn6">
|
||||||
|
<property name="resizable">True</property>
|
||||||
|
<property name="sizing">fixed</property>
|
||||||
|
<property name="fixed_width">45</property>
|
||||||
|
<property name="title" translatable="yes">Year</property>
|
||||||
|
<property name="clickable">True</property>
|
||||||
|
<child>
|
||||||
|
<object class="GtkCellRendererText" id="cellrenderertext6"/>
|
||||||
|
<attributes>
|
||||||
|
<attribute name="text">5</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">100</property>
|
||||||
|
<property name="title" translatable="yes">Genre</property>
|
||||||
|
<property name="clickable">True</property>
|
||||||
|
<child>
|
||||||
|
<object class="GtkCellRendererText" id="cellrenderertext7"/>
|
||||||
|
<attributes>
|
||||||
|
<attribute name="text">6</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">60</property>
|
||||||
|
<property name="title" translatable="yes">Count</property>
|
||||||
|
<property name="clickable">True</property>
|
||||||
|
<child>
|
||||||
|
<object class="GtkCellRendererText" id="cellrenderertext8"/>
|
||||||
|
<attributes>
|
||||||
|
<attribute name="text">7</attribute>
|
||||||
|
</attributes>
|
||||||
|
</child>
|
||||||
|
</object>
|
||||||
|
</child>
|
||||||
|
<child>
|
||||||
|
<object class="GtkTreeViewColumn" id="treeviewcolumn9">
|
||||||
|
<property name="resizable">True</property>
|
||||||
|
<property name="sizing">fixed</property>
|
||||||
|
<property name="fixed_width">1</property>
|
||||||
|
<property name="title" translatable="yes">Played</property>
|
||||||
|
<property name="clickable">True</property>
|
||||||
|
<child>
|
||||||
|
<object class="GtkCellRendererText" id="cellrenderertext9"/>
|
||||||
|
<attributes>
|
||||||
|
<attribute name="text">8</attribute>
|
||||||
|
</attributes>
|
||||||
|
</child>
|
||||||
|
</object>
|
||||||
|
</child>
|
||||||
|
</object>
|
||||||
|
</interface>
|
Loading…
Reference in New Issue