gui: update tab reordering

Signed-off-by: Anna Schumaker <schumaker.anna@gmail.com>
This commit is contained in:
Anna Schumaker 2014-02-23 19:29:23 -05:00 committed by Anna Schumaker
parent 587eacfdd4
commit eb5a65069a
1 changed files with 31 additions and 4 deletions

View File

@ -37,6 +37,7 @@ public:
void tab_set_size(); void tab_set_size();
void queue_set_number(unsigned int); void queue_set_number(unsigned int);
void on_tab_reordered(); void on_tab_reordered();
void on_move_queue(int);
/** /**
* GTK-MM Callbacks * GTK-MM Callbacks
@ -44,7 +45,7 @@ public:
void on_close_clicked(); void on_close_clicked();
}; };
static std::map<Playqueue *, QueueTab *> queue_mapping; static std::map<Gtk::Widget *, QueueTab *> queue_mapping;
QueueTab :: QueueTab(Playqueue *pq, unsigned int num) QueueTab :: QueueTab(Playqueue *pq, unsigned int num)
@ -80,15 +81,16 @@ QueueTab :: QueueTab(Playqueue *pq, unsigned int num)
tab_widget = &q_vbox; tab_widget = &q_vbox;
tab_finish_init(); tab_finish_init();
queue_mapping[pq] = this; queue_mapping[tab_widget] = this;
get_widget<Gtk::Notebook>("o_notebook")->insert_page(q_vbox, q_tab_box, num); get_widget<Gtk::Notebook>("o_notebook")->insert_page(q_vbox, q_tab_box, num);
get_widget<Gtk::Notebook>("o_notebook")->set_tab_reorderable(q_vbox);
q_vbox.show_all(); q_vbox.show_all();
} }
QueueTab :: ~QueueTab() QueueTab :: ~QueueTab()
{ {
queue_mapping.erase(tab_pq); queue_mapping.erase(tab_widget);
tab_unmap(); tab_unmap();
} }
@ -124,6 +126,11 @@ void QueueTab :: on_tab_reordered()
queue_set_number(tab_page_num()); 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() static void renumber_queues()
{ {
std::map<Playqueue *, QueueTab *>::iterator it; std::map<Gtk::Widget *, QueueTab *>::iterator it;
for (it = queue_mapping.begin(); it != queue_mapping.end(); it++) for (it = queue_mapping.begin(); it != queue_mapping.end(); it++)
it->second->on_tab_reordered(); 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<Gtk::Notebook>("o_notebook");
if ((unsigned int)num >= deck :: size()) {
notebook->reorder_child(*page, deck::size() - 1);
return;
}
std::map<Gtk::Widget *, QueueTab *>::iterator it;
it = queue_mapping.find(page);
if (it != queue_mapping.end()) {
it->second->on_move_queue(num);
renumber_queues();
}
}
void init_queue_tabs() void init_queue_tabs()
{ {
struct Callbacks *cb = get_callbacks(); struct Callbacks *cb = get_callbacks();
cb->on_pq_created = on_pq_created; cb->on_pq_created = on_pq_created;
cb->on_pq_removed = on_pq_removed; cb->on_pq_removed = on_pq_removed;
Gtk::Notebook *notebook = get_widget<Gtk::Notebook>("o_notebook");
notebook->signal_page_reordered().connect(sigc::ptr_fun(on_page_reordered));
} }