From 97be413bcf13bf31976d69595b2dfb5a7f1a5518 Mon Sep 17 00:00:00 2001 From: Anna Schumaker Date: Fri, 24 Jan 2014 23:01:02 -0500 Subject: [PATCH] gui: Add a second-stage init function for tabs This gives them a chance to check playqueue flags after the queues are loaded. Signed-off-by: Anna Schumaker --- gui/main.cpp | 5 ++++- gui/tabs.cpp | 22 +++++++++++++++++++--- include/ocarina.h | 1 + 3 files changed, 24 insertions(+), 4 deletions(-) diff --git a/gui/main.cpp b/gui/main.cpp index 7892e818..12e53640 100644 --- a/gui/main.cpp +++ b/gui/main.cpp @@ -7,10 +7,13 @@ Gtk::Window *ocarina_init(int *argc, char ***argv) { + Gtk::Window *window = connect_wires(); audio::init(argc, argv); deck::init(); library::init(); - return connect_wires(); + + init_tabs2(); + return window; } #ifndef CONFIG_TEST diff --git a/gui/tabs.cpp b/gui/tabs.cpp index 1a212db8..056b2f24 100644 --- a/gui/tabs.cpp +++ b/gui/tabs.cpp @@ -85,6 +85,7 @@ void OcarinaTab::set_size(unsigned int size) */ class OcarinaPage : public Gtk::VBox { private: + unsigned int init_flags; Glib::RefPtr model; Gtk::Notebook *notebook; @@ -107,6 +108,7 @@ public: Playqueue *, unsigned int); ~OcarinaPage(); bool is_current_tab(); + void check_pq_flags(); void on_row_inserted(unsigned int); void on_row_deleted(unsigned int); @@ -117,7 +119,7 @@ public: OcarinaPage::OcarinaPage(const std::string &name, const std::string &icon, Playqueue *pq, unsigned int flags) - : tab(name, icon) + : init_flags(flags), tab(name, icon) { get_builder()->get_widget("o_notebook", notebook); model = Glib::RefPtr(new PlayqueueModel(pq)); @@ -131,9 +133,7 @@ OcarinaPage::OcarinaPage(const std::string &name, const std::string &icon, /* Make buttons */ if (flags & PQ_RANDOM) { page_random.set_image_from_icon_name("media-playlist-shuffle"); - page_random.set_active((pq->get_flags() & PQ_RANDOM) != 0); page_toolbar.pack_start(page_random, false, false); - page_random.signal_toggled().connect(sigc::mem_fun(*this, &OcarinaPage::on_random_toggled)); } @@ -187,6 +187,15 @@ bool OcarinaPage::is_current_tab() return notebook->page_num(*this) == notebook->get_current_page(); } +void OcarinaPage::check_pq_flags() +{ + if (init_flags & PQ_RANDOM) { + page_random.set_active(model->queue->get_flags() & PQ_RANDOM); + page_random.signal_toggled().connect(sigc::mem_fun(*this, + &OcarinaPage::on_random_toggled)); + } +} + void OcarinaPage::set_tab_size() { tab.set_size(model->queue->size()); @@ -275,6 +284,13 @@ void init_tabs() notebook->signal_switch_page().connect(sigc::ptr_fun(on_switch_page)); } +void init_tabs2() +{ + std::map::iterator it; + for (it = tab_map.begin(); it != tab_map.end(); it++) + it->second->check_pq_flags(); +} + void cleanup_tabs() { std::map::iterator it; diff --git a/include/ocarina.h b/include/ocarina.h index 5c0c7def..f6382969 100644 --- a/include/ocarina.h +++ b/include/ocarina.h @@ -45,6 +45,7 @@ public: /* tabs.cpp */ void init_tabs(); +void init_tabs2(); void cleanup_tabs(); /* wires.cpp */