gui: Split apart tab and tab label

I made a new tab label class to make it easier to have a few labels with
different layouts.

Signed-off-by: Anna Schumaker <schumaker.anna@gmail.com>
This commit is contained in:
Anna Schumaker 2014-01-24 20:01:19 -05:00 committed by Anna Schumaker
parent 9e68f8213b
commit 7d10ebe5c3
2 changed files with 70 additions and 36 deletions

View File

@ -52,6 +52,8 @@
<object class="GtkFileChooserWidget" id="o_collection_chooser"> <object class="GtkFileChooserWidget" id="o_collection_chooser">
<property name="visible">True</property> <property name="visible">True</property>
<property name="can_focus">False</property> <property name="can_focus">False</property>
<property name="margin_left">5</property>
<property name="margin_right">5</property>
<property name="action">select-folder</property> <property name="action">select-folder</property>
<property name="create_folders">False</property> <property name="create_folders">False</property>
<property name="preview_widget_active">False</property> <property name="preview_widget_active">False</property>

View File

@ -10,8 +10,8 @@
#include <sstream> #include <sstream>
#include <string> #include <string>
class OcarinaTab; class OcarinaPage;
static std::map<Playqueue *, OcarinaTab *> tab_map; static std::map<Playqueue *, OcarinaPage *> tab_map;
static class QueueColumns : public Gtk::TreeModelColumnRecord { static class QueueColumns : public Gtk::TreeModelColumnRecord {
public: public:
@ -33,18 +33,60 @@ public:
static unsigned int q_col_width[] = { 20, 300, 60, 100, 100, 45, 100, 60, 1 }; static unsigned int q_col_width[] = { 20, 300, 60, 100, 100, 45, 100, 60, 1 };
/* /*
* Tab class definition * Tab class definition
*/ */
class OcarinaTab { class OcarinaTab {
public:
Gtk::Label name_label;
Gtk::Label size_label;
Gtk::Image tab_icon;
Gtk::HBox box;
Gtk::VBox inner_box;
OcarinaTab(const std::string &, const std::string &);
~OcarinaTab();
void set_size(unsigned int);
};
OcarinaTab::OcarinaTab(const std::string &name, const std::string &icon)
: name_label("<big>" + name + "</big>", 1, 0.5),
size_label("0", 0.5, 0.5)
{
tab_icon.set_from_icon_name(icon, Gtk::ICON_SIZE_MENU);
name_label.set_use_markup();
name_label.set_margin_right(1);
box.set_spacing(5);
inner_box.pack_start(name_label);
inner_box.pack_start(size_label);
box.pack_start(tab_icon);
box.pack_start(inner_box);
box.show_all();
}
OcarinaTab::~OcarinaTab() {}
void OcarinaTab::set_size(unsigned int size)
{
std::stringstream ss;
ss << size;
size_label.set_text(ss.str());
}
/*
* Ocarina class definition
*/
class OcarinaPage {
private: private:
Glib::RefPtr<PlayqueueModel> model; Glib::RefPtr<PlayqueueModel> model;
Gtk::Notebook *notebook; Gtk::Notebook *notebook;
/* Tab widgets */ OcarinaTab tab;
Gtk::VBox tab_box;
Gtk::Label tab_name;
Gtk::Label tab_size;
/* Page widgets */ /* Page widgets */
Gtk::VBox page_box; Gtk::VBox page_box;
@ -59,8 +101,8 @@ private:
void set_tab_size(); void set_tab_size();
public: public:
OcarinaTab(const std::string &, Playqueue *); OcarinaPage(const std::string &, const std::string &, Playqueue *);
~OcarinaTab(); ~OcarinaPage();
bool is_current_tab(); bool is_current_tab();
bool is_current_tab(unsigned int); bool is_current_tab(unsigned int);
@ -70,22 +112,14 @@ public:
}; };
OcarinaTab::OcarinaTab(const std::string &text, Playqueue *pq) OcarinaPage::OcarinaPage(const std::string &name, const std::string &icon,
: tab_name("<big>" + text + "</big>", 1, 0.5), Playqueue *pq)
tab_size("0", 1, 0.5) : tab(name, icon)
{ {
get_builder()->get_widget("o_notebook", notebook); get_builder()->get_widget("o_notebook", notebook);
model = Glib::RefPtr<PlayqueueModel>(new PlayqueueModel(pq)); model = Glib::RefPtr<PlayqueueModel>(new PlayqueueModel(pq));
/* Make tab label */
tab_name.set_use_markup();
tab_box.pack_start(tab_name);
tab_box.pack_start(tab_size);
tab_box.show_all();
set_tab_size();
/* Make page content */ /* Make page content */
page_random.set_image_from_icon_name("media-playlist-shuffle"); page_random.set_image_from_icon_name("media-playlist-shuffle");
page_random.set_active(pq->get_flags() & PQ_RANDOM); page_random.set_active(pq->get_flags() & PQ_RANDOM);
@ -115,17 +149,17 @@ OcarinaTab::OcarinaTab(const std::string &text, Playqueue *pq)
/* Add to notebook */ /* Add to notebook */
notebook->prepend_page(page_box, tab_box); notebook->prepend_page(page_box, tab.box);
tab_map[pq] = this; tab_map[pq] = this;
}; };
OcarinaTab::~OcarinaTab() OcarinaPage::~OcarinaPage()
{ {
notebook->remove_page(page_box); notebook->remove_page(page_box);
tab_map.erase(model->queue); tab_map.erase(model->queue);
} }
void OcarinaTab::setup_columns() void OcarinaPage::setup_columns()
{ {
std::vector<Gtk::TreeViewColumn *> columns = page_view.get_columns(); std::vector<Gtk::TreeViewColumn *> columns = page_view.get_columns();
for (unsigned int i = 0; i < columns.size(); i++) { for (unsigned int i = 0; i < columns.size(); i++) {
@ -135,24 +169,22 @@ void OcarinaTab::setup_columns()
} }
} }
bool OcarinaTab::is_current_tab() bool OcarinaPage::is_current_tab()
{ {
return notebook->page_num(page_box) == notebook->get_current_page(); return notebook->page_num(page_box) == notebook->get_current_page();
} }
bool OcarinaTab::is_current_tab(unsigned int tab) bool OcarinaPage::is_current_tab(unsigned int tab)
{ {
return notebook->page_num(page_box) == (int)tab; return notebook->page_num(page_box) == (int)tab;
} }
void OcarinaTab::set_tab_size() void OcarinaPage::set_tab_size()
{ {
std::stringstream ss; tab.set_size(model->queue->size());
ss << model->queue->size();
tab_size.set_text(ss.str());
} }
void OcarinaTab::on_row_inserted(unsigned int row) void OcarinaPage::on_row_inserted(unsigned int row)
{ {
model->on_row_inserted(row); model->on_row_inserted(row);
set_tab_size(); set_tab_size();
@ -160,7 +192,7 @@ void OcarinaTab::on_row_inserted(unsigned int row)
on_runtime_changed(); on_runtime_changed();
} }
void OcarinaTab::on_row_deleted(unsigned int row) void OcarinaPage::on_row_deleted(unsigned int row)
{ {
model->on_row_deleted(row); model->on_row_deleted(row);
set_tab_size(); set_tab_size();
@ -168,7 +200,7 @@ void OcarinaTab::on_row_deleted(unsigned int row)
on_runtime_changed(); on_runtime_changed();
} }
void OcarinaTab::on_runtime_changed() void OcarinaPage::on_runtime_changed()
{ {
Gtk::Label *label; Gtk::Label *label;
get_builder()->get_widget("o_queue_time", label); get_builder()->get_widget("o_queue_time", label);
@ -183,7 +215,7 @@ void OcarinaTab::on_runtime_changed()
*/ */
static void on_track_added(Playqueue *pq, unsigned int row) static void on_track_added(Playqueue *pq, unsigned int row)
{ {
std::map<Playqueue *, OcarinaTab *>::iterator it; std::map<Playqueue *, OcarinaPage *>::iterator it;
it = tab_map.find(pq); it = tab_map.find(pq);
if (it != tab_map.end()) if (it != tab_map.end())
it->second->on_row_inserted(row); it->second->on_row_inserted(row);
@ -191,7 +223,7 @@ static void on_track_added(Playqueue *pq, unsigned int row)
static void on_track_deleted(Playqueue *pq, unsigned int row) static void on_track_deleted(Playqueue *pq, unsigned int row)
{ {
std::map<Playqueue *, OcarinaTab *>::iterator it; std::map<Playqueue *, OcarinaPage *>::iterator it;
it = tab_map.find(pq); it = tab_map.find(pq);
if (it != tab_map.end()) if (it != tab_map.end())
it->second->on_row_deleted(row); it->second->on_row_deleted(row);
@ -200,7 +232,7 @@ static void on_track_deleted(Playqueue *pq, unsigned int row)
static void on_switch_page(Gtk::Widget *page, unsigned int num) static void on_switch_page(Gtk::Widget *page, unsigned int num)
{ {
Gtk::Label *label; Gtk::Label *label;
std::map<Playqueue *, OcarinaTab *>::iterator it; std::map<Playqueue *, OcarinaPage *>::iterator it;
get_builder()->get_widget("o_queue_time", label); get_builder()->get_widget("o_queue_time", label);
for (it = tab_map.begin(); it != tab_map.end(); it++) { for (it = tab_map.begin(); it != tab_map.end(); it++) {
@ -219,7 +251,7 @@ void init_tabs()
Gtk::Notebook *notebook; Gtk::Notebook *notebook;
get_builder()->get_widget("o_notebook", notebook); get_builder()->get_widget("o_notebook", notebook);
new OcarinaTab("Collection", deck::get_library_pq()); new OcarinaPage("Collection", "media-optical", deck::get_library_pq());
get_callbacks()->on_queue_track_add = on_track_added; get_callbacks()->on_queue_track_add = on_track_added;
get_callbacks()->on_queue_track_del = on_track_deleted; get_callbacks()->on_queue_track_del = on_track_deleted;
@ -228,7 +260,7 @@ void init_tabs()
void cleanup_tabs() void cleanup_tabs()
{ {
std::map<Playqueue *, OcarinaTab *>::iterator it; std::map<Playqueue *, OcarinaPage *>::iterator it;
for (it = tab_map.begin(); it != tab_map.end(); it++) for (it = tab_map.begin(); it != tab_map.end(); it++)
delete it->second; delete it->second;
} }