gui: Clean up tabs

Create various helper functions to call during construction
Create multiple tab label classes to use for each type of tab.

Signed-off-by: Anna Schumaker <schumaker.anna@gmail.com>
This commit is contained in:
Anna Schumaker 2014-01-31 21:09:31 -05:00 committed by Anna Schumaker
parent 4f0b7070f9
commit 07a7f3d4a7
1 changed files with 96 additions and 50 deletions

View File

@ -58,59 +58,84 @@ static void dec_sort_timeout()
* Tab class definition
*/
class OcarinaTab : public Gtk::HBox {
public:
OcarinaTab();
~OcarinaTab();
virtual void set_size(unsigned int) = 0;
};
OcarinaTab::OcarinaTab() {}
OcarinaTab::~OcarinaTab() {}
class PresetTab : public OcarinaTab {
public:
Gtk::Label name_label;
Gtk::Label size_label;
Gtk::Image tab_icon;
Gtk::VBox inner_box;
bool big_size;
Gtk::VBox box;
OcarinaTab(const std::string &, const std::string &);
~OcarinaTab();
PresetTab(const std::string &, const std::string &);
~PresetTab();
void set_size(unsigned int);
};
OcarinaTab::OcarinaTab(const std::string &name, const std::string &icon)
: name_label("<big>" + name + "</big>", 0.5, 0.5),
size_label("0", 0.5, 0.5), big_size(false)
PresetTab::PresetTab(const std::string &name, const std::string &icon)
: name_label("<big>" + name + "</big>", 0.5, 0.5),
size_label("0", 0.5, 0.5)
{
tab_icon.set_from_icon_name(icon, Gtk::ICON_SIZE_MENU);
tab_icon.set_alignment(0, 0.5);
name_label.set_use_markup();
name_label.set_margin_right(1);
set_spacing(5);
inner_box.pack_start(name_label);
inner_box.pack_start(size_label);
box.pack_start(name_label);
box.pack_start(size_label);
pack_start(tab_icon);
pack_start(inner_box);
pack_start(box);
show_all();
if (name == "" && icon == "") {
name_label.hide();
tab_icon.hide();
big_size = true;
}
}
OcarinaTab::~OcarinaTab() {}
PresetTab::~PresetTab() {}
void OcarinaTab::set_size(unsigned int size)
void PresetTab::set_size(unsigned int size)
{
std::stringstream ss;
if (big_size == true) {
ss << "<span size='x-large'>" << size << "</span>";
size_label.set_markup(ss.str());
} else {
ss << size;
size_label.set_text(ss.str());
}
ss << size;
size_label.set_text(ss.str());
}
class PQTab : public OcarinaTab {
public:
Gtk::Label size_label;
PQTab();
~PQTab();
void set_size(unsigned int);
};
PQTab::PQTab() : size_label("0", 0.5, 0.5)
{
pack_start(size_label);
show_all();
}
PQTab::~PQTab() {}
void PQTab::set_size(unsigned int size)
{
std::stringstream ss;
ss << "<span size='x-large'>" << size << "</span>";
size_label.set_markup(ss.str());
}
/*
* Ocarina class definition
*/
@ -129,6 +154,9 @@ private:
Gtk::ScrolledWindow page_scroll;
Gtk::TreeView page_view;
void setup_common(Playqueue *, unsigned int);
void setup_toolbar();
void setup_treeview();
void setup_columns();
void set_tab_size();
@ -136,7 +164,8 @@ public:
Gtk::ToggleButton page_random;
OcarinaPage(const std::string &, const std::string &,
Playqueue *, unsigned int, unsigned int);
Playqueue *, unsigned int);
OcarinaPage(Playqueue *, unsigned int, unsigned int);
~OcarinaPage();
bool is_current_tab();
void check_pq_flags();
@ -154,30 +183,62 @@ public:
OcarinaPage::OcarinaPage(const std::string &name, const std::string &icon,
Playqueue *pq, unsigned int flags, unsigned int pg)
Playqueue *pq, unsigned int flags)
: init_flags(flags)
{
tab = new PresetTab(name, icon);
setup_common(pq, 0);
}
OcarinaPage::OcarinaPage(Playqueue *pq, unsigned int flags, unsigned int pg)
{
tab = new PQTab();
setup_common(pq, pg);
}
OcarinaPage::~OcarinaPage()
{
notebook->remove_page(*this);
tab_map.erase(model->queue);
}
void OcarinaPage::setup_common(Playqueue *pq, unsigned int pg)
{
get_builder()->get_widget("o_notebook", notebook);
model = Glib::RefPtr<PlayqueueModel>(new PlayqueueModel(pq));
tab = new OcarinaTab(name, icon);
setup_toolbar();
setup_treeview();
show_all();
/* Add to notebook */
notebook->insert_page(*this, *tab, pg);
tab_map[pq] = this;
set_tab_size();
}
void OcarinaPage::setup_toolbar()
{
page_toolbar.set_spacing(5);
page_toolbar.pack_start(page_entry);
page_entry.set_margin_top(5);
page_entry.set_margin_bottom(5);
/* Make buttons */
if (flags & PQ_RANDOM) {
if (init_flags & PQ_RANDOM) {
page_random.set_image_from_icon_name("media-playlist-shuffle");
page_toolbar.pack_start(page_random, false, false);
}
if (flags & PQ_REPEAT) {
if (init_flags & PQ_REPEAT) {
page_repeat.set_image_from_icon_name("media-playlist-repeat");
page_toolbar.pack_start(page_repeat, false, false);
}
pack_start(page_toolbar, false, false);
}
void OcarinaPage::setup_treeview()
{
/* Make page content */
page_view.append_column("#", queue_cols.q_col_track);
page_view.append_column("Title", queue_cols.q_col_title);
@ -198,26 +259,11 @@ OcarinaPage::OcarinaPage(const std::string &name, const std::string &icon,
page_view.get_selection()->set_mode(Gtk::SELECTION_MULTIPLE);
page_view.set_rubber_banding();
page_scroll.add(page_view);
setup_columns();
//page_toolbar.pack_start(page_repeat, false, false);
pack_start(page_toolbar, false, false);
pack_start(page_scroll);
show_all();
/* Add to notebook */
notebook->insert_page(*this, *tab, pg);
tab_map[pq] = this;
set_tab_size();
};
OcarinaPage::~OcarinaPage()
{
notebook->remove_page(*this);
tab_map.erase(model->queue);
}
void OcarinaPage::setup_columns()
{
std::vector<Gtk::TreeViewColumn *> columns = page_view.get_columns();
@ -393,7 +439,7 @@ static void on_switch_page(Gtk::Widget *page, int num)
static void on_pq_created(Playqueue *pq, unsigned int num)
{
OcarinaPage *page = new OcarinaPage("", "", pq, PQ_RANDOM | PQ_REPEAT, num);
OcarinaPage *page = new OcarinaPage(pq, PQ_RANDOM | PQ_REPEAT, num);
page->check_pq_flags();
}
@ -421,8 +467,8 @@ void init_tabs()
Gtk::Notebook *notebook;
get_builder()->get_widget("o_notebook", notebook);
new OcarinaPage("History", "document-open-recent", audio::get_recent_pq(), 0, 0);
new OcarinaPage("Collection", "media-optical", deck::get_library_pq(), PQ_RANDOM, 0);
new OcarinaPage("History", "document-open-recent", audio::get_recent_pq(), 0);
new OcarinaPage("Collection", "media-optical", deck::get_library_pq(), PQ_RANDOM);
get_callbacks()->on_pq_created = on_pq_created;
get_callbacks()->on_pq_removed = on_pq_removed;
get_callbacks()->on_queue_track_add = on_track_added;