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 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<Playqueue *, QueueTab *> queue_mapping;
static std::map<Gtk::Widget *, QueueTab *> 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<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();
}
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<Playqueue *, QueueTab *>::iterator it;
std::map<Gtk::Widget *, QueueTab *>::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<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()
{
struct Callbacks *cb = get_callbacks();
cb->on_pq_created = on_pq_created;
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));
}