X-Git-Url: https://main.carlh.net/gitweb/?a=blobdiff_plain;f=gtk2_ardour%2Fmixer_ui.cc;h=16f3089825b6e7bd4dbfc8b3370181d87e547b3e;hb=9649a94053eda177086ac2930c7d172db3a2af11;hp=6f9750a32b71d14fc2e78d6a17d0aa53965fa33e;hpb=7a29763ba71cd9f1ed01ec50aeef80c2756739d3;p=ardour.git diff --git a/gtk2_ardour/mixer_ui.cc b/gtk2_ardour/mixer_ui.cc index 6f9750a32b..16f3089825 100644 --- a/gtk2_ardour/mixer_ui.cc +++ b/gtk2_ardour/mixer_ui.cc @@ -66,7 +66,7 @@ Mixer_UI::Mixer_UI () session = 0; _strip_width = Config->get_default_narrow_ms() ? Narrow : Wide; track_menu = 0; - mix_group_context_menu = 0; + route_group_context_menu = 0; no_track_list_redisplay = false; in_group_row_change = false; _visible = false; @@ -120,14 +120,11 @@ Mixer_UI::Mixer_UI () group_model = ListStore::create (group_columns); group_display.set_model (group_model); group_display.append_column (_("Group"), group_columns.text); - group_display.append_column (_("Active"), group_columns.active); group_display.append_column (_("Show"), group_columns.visible); group_display.get_column (0)->set_data (X_("colnum"), GUINT_TO_POINTER(0)); group_display.get_column (1)->set_data (X_("colnum"), GUINT_TO_POINTER(1)); - group_display.get_column (2)->set_data (X_("colnum"), GUINT_TO_POINTER(2)); group_display.get_column (0)->set_expand(true); group_display.get_column (1)->set_expand(false); - group_display.get_column (2)->set_expand(false); group_display.set_name ("MixerGroupList"); group_display.get_selection()->set_mode (Gtk::SELECTION_SINGLE); group_display.set_reorderable (true); @@ -138,7 +135,7 @@ Mixer_UI::Mixer_UI () CellRendererText* name_cell = dynamic_cast(group_display.get_column_cell_renderer (0)); name_cell->property_editable() = true; - name_cell->signal_edited().connect (mem_fun (*this, &Mixer_UI::mix_group_name_edit)); + name_cell->signal_edited().connect (mem_fun (*this, &Mixer_UI::route_group_name_edit)); /* use checkbox for the active column */ @@ -146,44 +143,38 @@ Mixer_UI::Mixer_UI () active_cell->property_activatable() = true; active_cell->property_radio() = false; - /* use checkbox for the visible column */ - - active_cell = dynamic_cast(group_display.get_column_cell_renderer (2)); - active_cell->property_activatable() = true; - active_cell->property_radio() = false; - - group_model->signal_row_changed().connect (mem_fun (*this, &Mixer_UI::mix_group_row_change)); + group_model->signal_row_changed().connect (mem_fun (*this, &Mixer_UI::route_group_row_change)); group_display.signal_button_press_event().connect (mem_fun (*this, &Mixer_UI::group_display_button_press), false); group_display_scroller.add (group_display); group_display_scroller.set_policy (Gtk::POLICY_NEVER, Gtk::POLICY_AUTOMATIC); - HBox* mix_group_display_button_box = manage (new HBox()); + HBox* route_group_display_button_box = manage (new HBox()); - Button* mix_group_add_button = manage (new Button ()); - Button* mix_group_remove_button = manage (new Button ()); + Button* route_group_add_button = manage (new Button ()); + Button* route_group_remove_button = manage (new Button ()); Widget* w; w = manage (new Image (Stock::ADD, ICON_SIZE_BUTTON)); w->show(); - mix_group_add_button->add (*w); + route_group_add_button->add (*w); w = manage (new Image (Stock::REMOVE, ICON_SIZE_BUTTON)); w->show(); - mix_group_remove_button->add (*w); + route_group_remove_button->add (*w); - mix_group_display_button_box->set_homogeneous (true); + route_group_display_button_box->set_homogeneous (true); - mix_group_add_button->signal_clicked().connect (mem_fun (*this, &Mixer_UI::new_mix_group)); - mix_group_remove_button->signal_clicked().connect (mem_fun (*this, &Mixer_UI::remove_selected_mix_group)); + route_group_add_button->signal_clicked().connect (mem_fun (*this, &Mixer_UI::new_route_group)); + route_group_remove_button->signal_clicked().connect (mem_fun (*this, &Mixer_UI::remove_selected_route_group)); - mix_group_display_button_box->add (*mix_group_remove_button); - mix_group_display_button_box->add (*mix_group_add_button); + route_group_display_button_box->add (*route_group_remove_button); + route_group_display_button_box->add (*route_group_add_button); group_display_vbox.pack_start (group_display_scroller, true, true); - group_display_vbox.pack_start (*mix_group_display_button_box, false, false); + group_display_vbox.pack_start (*route_group_display_button_box, false, false); track_display_frame.set_name("BaseFrame"); track_display_frame.set_shadow_type (Gtk::SHADOW_IN); @@ -235,9 +226,9 @@ Mixer_UI::Mixer_UI () _selection.RoutesChanged.connect (mem_fun(*this, &Mixer_UI::follow_strip_selection)); - mix_group_display_button_box->show(); - mix_group_add_button->show(); - mix_group_remove_button->show(); + route_group_display_button_box->show(); + route_group_add_button->show(); + route_group_remove_button->show(); global_hpacker.show(); global_vpacker.show(); @@ -347,9 +338,7 @@ Mixer_UI::add_strip (RouteList& routes) route->NameChanged.connect (bind (mem_fun(*this, &Mixer_UI::strip_name_changed), strip)); strip->GoingAway.connect (bind (mem_fun(*this, &Mixer_UI::remove_strip), strip)); -#ifdef GTKOSX - strip->WidthChanged.connect (mem_fun(*this, &Mixer_UI::queue_draw_all_strips)); -#endif + strip->WidthChanged.connect (mem_fun(*this, &Mixer_UI::strip_width_changed)); strip->signal_button_release_event().connect (bind (mem_fun(*this, &Mixer_UI::strip_button_release_event), strip)); } @@ -385,27 +374,14 @@ Mixer_UI::remove_strip (MixerStrip* strip) strip_redisplay_does_not_sync_order_keys = false; } -const char* -Mixer_UI::get_order_key() -{ - return X_("signal"); -#if 0 - if (Config->get_sync_all_route_ordering()) { - return X_("editor"); - } else { - return X_("signal"); - } -#endif -} - void -Mixer_UI::sync_order_keys (const char *src) +Mixer_UI::sync_order_keys (string const & src) { vector neworder; TreeModel::Children rows = track_model->children(); TreeModel::Children::iterator ri; - if ((strcmp (src, get_order_key()) == 0) || !session || (session->state_of_the_state() & Session::Loading) || rows.empty()) { + if (src == N_("signal") || !session || (session->state_of_the_state() & Session::Loading) || rows.empty()) { return; } @@ -419,8 +395,9 @@ Mixer_UI::sync_order_keys (const char *src) for (order = 0, ri = rows.begin(); ri != rows.end(); ++ri, ++order) { boost::shared_ptr route = (*ri)[track_columns.route]; int old_key = order; - int new_key = route->order_key (get_order_key()); + int new_key = route->order_key (N_("signal")); + assert (new_key < neworder.size()); neworder[new_key] = old_key; if (new_key != old_key) { @@ -485,11 +462,11 @@ Mixer_UI::connect_to_session (Session* sess) session->GoingAway.connect (mem_fun(*this, &Mixer_UI::disconnect_from_session)); session->RouteAdded.connect (mem_fun(*this, &Mixer_UI::add_strip)); - session->mix_group_added.connect (mem_fun(*this, &Mixer_UI::add_mix_group)); - session->mix_group_removed.connect (mem_fun(*this, &Mixer_UI::mix_groups_changed)); + session->route_group_added.connect (mem_fun(*this, &Mixer_UI::add_route_group)); + session->route_group_removed.connect (mem_fun(*this, &Mixer_UI::route_groups_changed)); session->config.ParameterChanged.connect (mem_fun (*this, &Mixer_UI::parameter_changed)); - mix_groups_changed (); + route_groups_changed (); _plugin_selector->set_session (session); @@ -497,7 +474,7 @@ Mixer_UI::connect_to_session (Session* sess) show_window(); } - _group_tabs->set_session (sess); + _group_tabs->connect_to_session (sess); start_updating (); } @@ -682,7 +659,7 @@ Mixer_UI::hide_all_audiotracks () } void -Mixer_UI::track_list_reorder (const TreeModel::Path& path, const TreeModel::iterator& iter, int* new_order) +Mixer_UI::track_list_reorder (const TreeModel::Path&, const TreeModel::iterator&, int* /*new_order*/) { strip_redisplay_does_not_sync_order_keys = true; session->set_remote_control_ids(); @@ -691,7 +668,7 @@ Mixer_UI::track_list_reorder (const TreeModel::Path& path, const TreeModel::iter } void -Mixer_UI::track_list_change (const Gtk::TreeModel::Path& path,const Gtk::TreeModel::iterator& iter) +Mixer_UI::track_list_change (const Gtk::TreeModel::Path&, const Gtk::TreeModel::iterator&) { // never reset order keys because of a property change strip_redisplay_does_not_reset_order_keys = true; @@ -701,7 +678,7 @@ Mixer_UI::track_list_change (const Gtk::TreeModel::Path& path,const Gtk::TreeMod } void -Mixer_UI::track_list_delete (const Gtk::TreeModel::Path& path) +Mixer_UI::track_list_delete (const Gtk::TreeModel::Path&) { /* this could require an order sync */ session->set_remote_control_ids(); @@ -734,7 +711,7 @@ Mixer_UI::redisplay_track_list () strip->route()->set_order_key (N_("signal"), order); if (!strip_redisplay_does_not_reset_order_keys) { - strip->route()->set_order_key (get_order_key(), order); + strip->route()->set_order_key (N_("signal"), order); } if (strip->packed()) { @@ -772,7 +749,7 @@ Mixer_UI::redisplay_track_list () } if (!strip_redisplay_does_not_reset_order_keys && !strip_redisplay_does_not_sync_order_keys) { - session->sync_order_keys (get_order_key()); + session->sync_order_keys (N_("signal")); } // Rebind all of the midi controls automatically @@ -783,10 +760,12 @@ Mixer_UI::redisplay_track_list () _group_tabs->set_dirty (); } -#ifdef GTKOSX void -Mixer_UI::queue_draw_all_strips () +Mixer_UI::strip_width_changed () { + _group_tabs->set_dirty (); + +#ifdef GTKOSX TreeModel::Children rows = track_model->children(); TreeModel::Children::iterator i; long order; @@ -804,8 +783,9 @@ Mixer_UI::queue_draw_all_strips () strip->queue_draw(); } } -} #endif + +} void Mixer_UI::set_auto_rebinding( bool val ) @@ -892,7 +872,7 @@ Mixer_UI::auto_rebind_midi_controls () struct SignalOrderRouteSorter { bool operator() (boost::shared_ptr a, boost::shared_ptr b) { /* use of ">" forces the correct sort order */ - return a->order_key (Mixer_UI::get_order_key()) < b->order_key (Mixer_UI::get_order_key()); + return a->order_key (N_("signal")) < b->order_key (N_("signal")); } }; @@ -1013,18 +993,18 @@ Mixer_UI::strip_name_changed (MixerStrip* mx) void -Mixer_UI::build_mix_group_context_menu () +Mixer_UI::build_route_group_context_menu () { using namespace Gtk::Menu_Helpers; - mix_group_context_menu = new Menu; - mix_group_context_menu->set_name ("ArdourContextMenu"); - MenuList& items = mix_group_context_menu->items(); + route_group_context_menu = new Menu; + route_group_context_menu->set_name ("ArdourContextMenu"); + MenuList& items = route_group_context_menu->items(); - items.push_back (MenuElem (_("Activate All"), mem_fun(*this, &Mixer_UI::activate_all_mix_groups))); - items.push_back (MenuElem (_("Disable All"), mem_fun(*this, &Mixer_UI::disable_all_mix_groups))); + items.push_back (MenuElem (_("Activate All"), mem_fun(*this, &Mixer_UI::activate_all_route_groups))); + items.push_back (MenuElem (_("Disable All"), mem_fun(*this, &Mixer_UI::disable_all_route_groups))); items.push_back (SeparatorElem()); - items.push_back (MenuElem (_("Add group"), mem_fun(*this, &Mixer_UI::new_mix_group))); + items.push_back (MenuElem (_("Add group"), mem_fun(*this, &Mixer_UI::new_route_group))); } @@ -1032,10 +1012,10 @@ bool Mixer_UI::group_display_button_press (GdkEventButton* ev) { if (Keyboard::is_context_menu_event (ev)) { - if (mix_group_context_menu == 0) { - build_mix_group_context_menu (); + if (route_group_context_menu == 0) { + build_route_group_context_menu (); } - mix_group_context_menu->popup (1, ev->time); + route_group_context_menu->popup (1, ev->time); return true; } @@ -1056,7 +1036,7 @@ Mixer_UI::group_display_button_press (GdkEventButton* ev) if (Keyboard::is_edit_event (ev)) { if ((iter = group_model->get_iter (path))) { if ((group = (*iter)[group_columns.group]) != 0) { - // edit_mix_group (group); + // edit_route_group (group); #ifdef GTKOSX group_display.queue_draw(); #endif @@ -1068,17 +1048,6 @@ Mixer_UI::group_display_button_press (GdkEventButton* ev) break; case 1: - if ((iter = group_model->get_iter (path))) { - bool active = (*iter)[group_columns.active]; - (*iter)[group_columns.active] = !active; -#ifdef GTKOSX - group_display.queue_draw(); -#endif - return true; - } - break; - - case 2: if ((iter = group_model->get_iter (path))) { bool visible = (*iter)[group_columns.visible]; (*iter)[group_columns.visible] = !visible; @@ -1097,27 +1066,21 @@ Mixer_UI::group_display_button_press (GdkEventButton* ev) } void -Mixer_UI::activate_all_mix_groups () +Mixer_UI::activate_all_route_groups () { - Gtk::TreeModel::Children children = group_model->children(); - for(Gtk::TreeModel::Children::iterator iter = children.begin(); iter != children.end(); ++iter) { - (*iter)[group_columns.active] = true; - } + session->foreach_route_group (bind (mem_fun (*this, &Mixer_UI::set_route_group_activation), true)); } void -Mixer_UI::disable_all_mix_groups () +Mixer_UI::disable_all_route_groups () { - Gtk::TreeModel::Children children = group_model->children(); - for(Gtk::TreeModel::Children::iterator iter = children.begin(); iter != children.end(); ++iter) { - (*iter)[group_columns.active] = false; - } + session->foreach_route_group (bind (mem_fun (*this, &Mixer_UI::set_route_group_activation), false)); } void -Mixer_UI::mix_groups_changed () +Mixer_UI::route_groups_changed () { - ENSURE_GUI_THREAD (mem_fun (*this, &Mixer_UI::mix_groups_changed)); + ENSURE_GUI_THREAD (mem_fun (*this, &Mixer_UI::route_groups_changed)); /* just rebuild the while thing */ @@ -1126,23 +1089,22 @@ Mixer_UI::mix_groups_changed () { TreeModel::Row row; row = *(group_model->append()); - row[group_columns.active] = false; row[group_columns.visible] = true; row[group_columns.text] = (_("-all-")); row[group_columns.group] = 0; } - session->foreach_mix_group (mem_fun (*this, &Mixer_UI::add_mix_group)); + session->foreach_route_group (mem_fun (*this, &Mixer_UI::add_route_group)); } void -Mixer_UI::new_mix_group () +Mixer_UI::new_route_group () { - session->add_mix_group (new RouteGroup (*session, "")); + session->add_route_group (new RouteGroup (*session, "", RouteGroup::Active, (RouteGroup::Property) (RouteGroup::Gain |RouteGroup::Mute | RouteGroup::Solo))); } void -Mixer_UI::remove_selected_mix_group () +Mixer_UI::remove_selected_route_group () { Glib::RefPtr selection = group_display.get_selection(); TreeView::Selection::ListHandle_Path rows = selection->get_selected_rows (); @@ -1161,7 +1123,7 @@ Mixer_UI::remove_selected_mix_group () RouteGroup* rg = (*iter)[group_columns.group]; if (rg) { - session->remove_mix_group (*rg); + session->remove_route_group (*rg); } } } @@ -1180,8 +1142,8 @@ Mixer_UI::group_flags_changed (void* src, RouteGroup* group) */ for (list::iterator i = strips.begin(); i != strips.end(); ++i) { - if ((*i)->mix_group() == group) { - (*i)->mix_group_changed(0); + if ((*i)->route_group() == group) { + (*i)->route_group_changed(0); } } @@ -1194,7 +1156,6 @@ Mixer_UI::group_flags_changed (void* src, RouteGroup* group) for (i = rows.begin(); i != rows.end(); ++i) { if ((*i)[group_columns.group] == group) { (*i)[group_columns.visible] = !group->is_hidden (); - (*i)[group_columns.active] = group->is_active (); (*i)[group_columns.text] = group->name (); break; } @@ -1206,7 +1167,7 @@ Mixer_UI::group_flags_changed (void* src, RouteGroup* group) } void -Mixer_UI::mix_group_name_edit (const Glib::ustring& path, const Glib::ustring& new_text) +Mixer_UI::route_group_name_edit (const Glib::ustring& path, const Glib::ustring& new_text) { RouteGroup* group; TreeIter iter; @@ -1224,7 +1185,7 @@ Mixer_UI::mix_group_name_edit (const Glib::ustring& path, const Glib::ustring& n } void -Mixer_UI::mix_group_row_change (const Gtk::TreeModel::Path& path,const Gtk::TreeModel::iterator& iter) +Mixer_UI::route_group_row_change (const Gtk::TreeModel::Path&, const Gtk::TreeModel::iterator& iter) { RouteGroup* group; @@ -1238,21 +1199,18 @@ Mixer_UI::mix_group_row_change (const Gtk::TreeModel::Path& path,const Gtk::Tree if ((*iter)[group_columns.visible]) { for (list::iterator i = strips.begin(); i != strips.end(); ++i) { - if ((*i)->mix_group() == group) { + if ((*i)->route_group() == group) { show_strip (*i); } } } else { for (list::iterator i = strips.begin(); i != strips.end(); ++i) { - if ((*i)->mix_group() == group) { + if ((*i)->route_group() == group) { hide_strip (*i); } } } - bool active = (*iter)[group_columns.active]; - group->set_active (active, this); - Glib::ustring name = (*iter)[group_columns.text]; if (name != group->name()) { @@ -1262,15 +1220,14 @@ Mixer_UI::mix_group_row_change (const Gtk::TreeModel::Path& path,const Gtk::Tree } void -Mixer_UI::add_mix_group (RouteGroup* group) +Mixer_UI::add_route_group (RouteGroup* group) { - ENSURE_GUI_THREAD(bind (mem_fun(*this, &Mixer_UI::add_mix_group), group)); + ENSURE_GUI_THREAD(bind (mem_fun(*this, &Mixer_UI::add_route_group), group)); bool focus = false; in_group_row_change = true; TreeModel::Row row = *(group_model->append()); - row[group_columns.active] = group->is_active(); row[group_columns.visible] = true; row[group_columns.group] = group; if (!group->name().empty()) { @@ -1434,7 +1391,7 @@ Mixer_UI::get_state (void) void -Mixer_UI::pane_allocation_handler (Allocation& alloc, Gtk::Paned* which) +Mixer_UI::pane_allocation_handler (Allocation&, Gtk::Paned* which) { int pos; XMLProperty* prop = 0; @@ -1506,6 +1463,13 @@ Mixer_UI::on_key_press_event (GdkEventKey* ev) return key_press_focus_accelerator_handler (*this, ev); } +bool +Mixer_UI::on_key_release_event (GdkEventKey* ev) +{ + return Gtk::Window::on_key_release_event (ev); + // return key_press_focus_accelerator_handler (*this, ev); +} + void Mixer_UI::parameter_changed (string const & p) { @@ -1519,3 +1483,9 @@ Mixer_UI::parameter_changed (string const & p) } } +void +Mixer_UI::set_route_group_activation (RouteGroup* g, bool a) +{ + g->set_active (a, this); +} +