From eb5a65069a04416d9eabfe8cb27e7fb6538bc6cd Mon Sep 17 00:00:00 2001 From: Anna Schumaker Date: Sun, 23 Feb 2014 19:29:23 -0500 Subject: [PATCH] gui: update tab reordering Signed-off-by: Anna Schumaker --- gui/queue.cpp | 35 +++++++++++++++++++++++++++++++---- 1 file changed, 31 insertions(+), 4 deletions(-) diff --git a/gui/queue.cpp b/gui/queue.cpp index 21dc10fb..7132edd2 100644 --- a/gui/queue.cpp +++ b/gui/queue.cpp @@ -37,6 +37,7 @@ public: void tab_set_size(); void queue_set_number(unsigned int); void on_tab_reordered(); + void on_move_queue(int); /** * GTK-MM Callbacks @@ -44,7 +45,7 @@ public: void on_close_clicked(); }; -static std::map queue_mapping; +static std::map queue_mapping; QueueTab :: QueueTab(Playqueue *pq, unsigned int num) @@ -80,15 +81,16 @@ QueueTab :: QueueTab(Playqueue *pq, unsigned int num) tab_widget = &q_vbox; tab_finish_init(); - queue_mapping[pq] = this; + queue_mapping[tab_widget] = this; get_widget("o_notebook")->insert_page(q_vbox, q_tab_box, num); + get_widget("o_notebook")->set_tab_reorderable(q_vbox); q_vbox.show_all(); } QueueTab :: ~QueueTab() { - queue_mapping.erase(tab_pq); + queue_mapping.erase(tab_widget); tab_unmap(); } @@ -124,6 +126,11 @@ void QueueTab :: on_tab_reordered() queue_set_number(tab_page_num()); } +void QueueTab :: on_move_queue(int num) +{ + deck :: move(tab_pq, num); +} + /** @@ -146,7 +153,7 @@ void QueueTab :: on_close_clicked() */ static void renumber_queues() { - std::map::iterator it; + std::map::iterator it; for (it = queue_mapping.begin(); it != queue_mapping.end(); it++) it->second->on_tab_reordered(); } @@ -166,9 +173,29 @@ static void on_pq_removed(Playqueue *pq) } } +static void on_page_reordered(Gtk::Widget *page, int num) +{ + Gtk::Notebook *notebook = get_widget("o_notebook"); + + if ((unsigned int)num >= deck :: size()) { + notebook->reorder_child(*page, deck::size() - 1); + return; + } + + std::map::iterator it; + it = queue_mapping.find(page); + if (it != queue_mapping.end()) { + it->second->on_move_queue(num); + renumber_queues(); + } +} + void init_queue_tabs() { struct Callbacks *cb = get_callbacks(); cb->on_pq_created = on_pq_created; cb->on_pq_removed = on_pq_removed; + + Gtk::Notebook *notebook = get_widget("o_notebook"); + notebook->signal_page_reordered().connect(sigc::ptr_fun(on_page_reordered)); }