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:
parent
4f0b7070f9
commit
07a7f3d4a7
146
gui/tabs.cpp
146
gui/tabs.cpp
|
@ -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;
|
||||
|
|
Loading…
Reference in New Issue