diff --git a/gui/ocarina6.glade b/gui/ocarina6.glade index e4c3d087..49699015 100644 --- a/gui/ocarina6.glade +++ b/gui/ocarina6.glade @@ -7,6 +7,126 @@ 1 10 + + True + False + gtk-new + 1 + + + True + False + gtk-add + 1 + + + True + False + + + New Playqueue + True + False + image12 + False + + + + + Add to Playqueue + True + False + image13 + False + + + True + False + + + True + False + Playqueue 0 + True + + + + + True + False + Playqueue 1 + True + + + + + True + False + Playqueue 2 + True + + + + + True + False + Playqueue 3 + True + + + + + True + False + Playqueue 4 + True + + + + + True + False + Playqueue 5 + True + + + + + True + False + Playqueue 6 + True + + + + + True + False + Playqueue 7 + True + + + + + True + False + Playqueue 8 + True + + + + + True + False + Playqueue 9 + True + + + + + + + diff --git a/gui/tabs.cpp b/gui/tabs.cpp index b57d00c7..93a6f7aa 100644 --- a/gui/tabs.cpp +++ b/gui/tabs.cpp @@ -63,6 +63,75 @@ static void dec_sort_timeout() } } +static Gtk::MenuItem *get_menu_widget(const std::string &name) +{ + Gtk::MenuItem *widget; + get_builder()->get_widget(name, widget); + return widget; +} + +static void prepare_rc_menu() +{ + unsigned int size = deck::size(); + + /* Set widgets visible */ + switch (size) { + case 10: + get_menu_widget("o_pq_9")->show(); + case 9: + get_menu_widget("o_pq_8")->show(); + case 8: + get_menu_widget("o_pq_7")->show(); + case 7: + get_menu_widget("o_pq_6")->show(); + case 6: + get_menu_widget("o_pq_5")->show(); + case 5: + get_menu_widget("o_pq_4")->show(); + case 4: + get_menu_widget("o_pq_3")->show(); + case 3: + get_menu_widget("o_pq_2")->show(); + case 2: + get_menu_widget("o_pq_1")->show(); + case 1: + get_menu_widget("o_pq_0")->show(); + get_menu_widget("o_add_to_pq")->show(); + default: + if (size != 10) + get_menu_widget("o_new_pq")->show(); + break; + } + + /* Set widgets invisible */ + switch (size) { + case 0: + get_menu_widget("o_add_to_pq")->hide(); + get_menu_widget("o_pq_0")->hide(); + case 1: + get_menu_widget("o_pq_1")->hide(); + case 2: + get_menu_widget("o_pq_2")->hide(); + case 3: + get_menu_widget("o_pq_3")->hide(); + case 4: + get_menu_widget("o_pq_4")->hide(); + case 5: + get_menu_widget("o_pq_5")->hide(); + case 6: + get_menu_widget("o_pq_6")->hide(); + case 7: + get_menu_widget("o_pq_7")->hide(); + case 8: + get_menu_widget("o_pq_8")->hide(); + case 9: + get_menu_widget("o_pq_9")->hide(); + break; + case 10: + get_menu_widget("o_new_pq")->hide(); + }; +} + /* @@ -259,8 +328,11 @@ public: bool on_entry_key_released(GdkEventKey *); bool on_filter_visible(const Gtk::TreeIter &); void on_page_renumbered(); + bool on_add_to_pq(unsigned int); bool on_view_key_pressed(GdkEventKey *); void on_sidebar_cursor_changed(); + bool on_sidebar_clicked(GdkEventButton *); + bool on_view_button_pressed(GdkEventButton *); }; @@ -363,6 +435,8 @@ void OcarinaPage::setup_sidebar() sb_view.get_selection()->set_mode(Gtk::SELECTION_BROWSE); sb_view.signal_cursor_changed().connect(sigc::mem_fun(*this, &OcarinaPage::on_sidebar_cursor_changed)); + sb_view.signal_button_press_event().connect(sigc::mem_fun(*this, + &OcarinaPage::on_sidebar_clicked), false); row = *(sb_store->append()); row[sb_cols.sb_col_name] = "Favorites"; @@ -397,6 +471,8 @@ void OcarinaPage::setup_treeview() &OcarinaPage::on_row_activated)); page_view.signal_key_press_event().connect(sigc::mem_fun(*this, &OcarinaPage::on_view_key_pressed)); + page_view.signal_button_press_event().connect(sigc::mem_fun(*this, + &OcarinaPage::on_view_button_pressed), false); page_view.set_model(filter); page_view.set_rules_hint(); @@ -572,6 +648,25 @@ void OcarinaPage::on_page_renumbered() tab->set_number(notebook->page_num(*this)); } +bool OcarinaPage::on_add_to_pq(unsigned int n) +{ + if (n >= deck :: size()) + return true; + + Glib::RefPtr sel = page_view.get_selection(); + if (sel->count_selected_rows() == 0) + return true; + + Playqueue *pq = deck :: get(n); + std::vector::iterator it; + std::vector rows = sel->get_selected_rows(); + for (it = rows.begin(); it != rows.end(); it++) { + unsigned int track_id = model->path_to_id(filter->convert_path_to_child_path(*it)); + pq->add(track_id); + } + return true; +} + bool OcarinaPage::on_view_key_pressed(GdkEventKey *event) { std::string key = gdk_keyval_name(event->keyval); @@ -583,21 +678,7 @@ bool OcarinaPage::on_view_key_pressed(GdkEventKey *event) if (key >= "0" && key <= "9") { unsigned int n = atoi(key.c_str()); - if (n >= deck :: size()) - return true; - - Glib::RefPtr sel = page_view.get_selection(); - if (sel->count_selected_rows() == 0) - return true; - - Playqueue *pq = deck :: get(n); - std::vector::iterator it; - std::vector rows = sel->get_selected_rows(); - for (it = rows.begin(); it != rows.end(); it++) { - unsigned int track_id = model->path_to_id(filter->convert_path_to_child_path(*it)); - pq->add(track_id); - } - return true; + return on_add_to_pq(n); } return false; } @@ -612,6 +693,25 @@ void OcarinaPage::on_sidebar_cursor_changed() playlist :: select(row[sb_cols.sb_col_name]); } +bool OcarinaPage::on_sidebar_clicked(GdkEventButton *button) +{ + if (button->button != 3) + return false; + return true; +} + +bool OcarinaPage::on_view_button_pressed(GdkEventButton *button) +{ + Gtk::Menu *menu; + get_builder()->get_widget("o_rc_menu", menu); + + if (button->button != 3) + return false; + prepare_rc_menu(); + menu->popup(button->button, button->time); + return true; +} + /* @@ -712,6 +812,29 @@ void queue_selected(bool random) } } +static void on_new_queue() +{ + queue_selected(false); +} + +static void on_add_to_queue(unsigned int num) +{ + std::map::iterator it; + for (it = tab_map.begin(); it != tab_map.end(); it++) { + if (it->second->is_current_tab()) { + it->second->on_add_to_pq(num); + return; + } + } +} + +static void init_menu_item(const std::string &name, unsigned int num) +{ + Gtk::MenuItem *menu = get_menu_widget(name); + menu->signal_activate().connect(sigc::bind ( + sigc::ptr_fun(on_add_to_queue), num)); +} + void init_tabs() { Gtk::Notebook *notebook; @@ -720,12 +843,25 @@ void init_tabs() new OcarinaPage("Playlist\nManager", "emblem-documents", playlist::get_pq()); 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; get_callbacks()->on_queue_track_del = on_track_deleted; get_callbacks()->on_queue_track_changed = on_track_changed; + get_menu_widget("o_new_pq")->signal_activate().connect(sigc::ptr_fun(on_new_queue)); + init_menu_item("o_pq_0", 0); + init_menu_item("o_pq_1", 1); + init_menu_item("o_pq_2", 2); + init_menu_item("o_pq_3", 3); + init_menu_item("o_pq_4", 4); + init_menu_item("o_pq_5", 5); + init_menu_item("o_pq_6", 6); + init_menu_item("o_pq_7", 7); + init_menu_item("o_pq_8", 8); + init_menu_item("o_pq_9", 9); + notebook->signal_switch_page().connect(sigc::ptr_fun(on_switch_page)); notebook->signal_page_reordered().connect(sigc::ptr_fun(on_page_reordered)); notebook->set_current_page(0);