diff options
author | Paul Davis <paul@linuxaudiosystems.com> | 2009-12-10 20:51:35 +0000 |
---|---|---|
committer | Paul Davis <paul@linuxaudiosystems.com> | 2009-12-10 20:51:35 +0000 |
commit | 6ab765e8fab08b186aa77e3ac01c33e0dbfc1ba1 (patch) | |
tree | 13194e8d83857558ebd20e720139d0b7bf699a9b /gtk2_ardour | |
parent | 2f350c491e3bc22fe79bdec0ee67b773b0fd2009 (diff) |
add solo isolate indicator in editor route list
git-svn-id: svn://localhost/ardour2/branches/3.0@6343 d708f5d6-7413-0410-9779-e7cbd77b26cf
Diffstat (limited to 'gtk2_ardour')
-rwxr-xr-x | gtk2_ardour/ardbg | 2 | ||||
-rw-r--r-- | gtk2_ardour/editor_routes.cc | 51 | ||||
-rw-r--r-- | gtk2_ardour/editor_routes.h | 4 | ||||
-rw-r--r-- | gtk2_ardour/icons/solo-isolated.png | bin | 0 -> 392 bytes | |||
-rw-r--r-- | gtk2_ardour/route_ui.cc | 55 | ||||
-rw-r--r-- | gtk2_ardour/route_ui.h | 2 |
6 files changed, 98 insertions, 16 deletions
diff --git a/gtk2_ardour/ardbg b/gtk2_ardour/ardbg index 11617af1f4..c3e8e1ffc6 100755 --- a/gtk2_ardour/ardbg +++ b/gtk2_ardour/ardbg @@ -2,4 +2,4 @@ . `dirname "$0"`/../build/default/gtk2_ardour/ardev_common_waf.sh LD_LIBRARY_PATH=/usr/local/lib:$LD_LIBRARY_PATH export ARDOUR_INSIDE_GDB=1 -exec gdb --args $TOP/$EXECUTABLE "$@" +exec gdb $TOP/$EXECUTABLE $@ diff --git a/gtk2_ardour/editor_routes.cc b/gtk2_ardour/editor_routes.cc index 9cd5231d41..d0720b04fb 100644 --- a/gtk2_ardour/editor_routes.cc +++ b/gtk2_ardour/editor_routes.cc @@ -105,18 +105,24 @@ EditorRoutes::EditorRoutes (Editor* e) solo_state_column->add_attribute(solo_col_renderer->property_state(), _columns.solo_state); + // Solo isolate toggle + CellRendererPixbufMulti* solo_iso_renderer = manage (new CellRendererPixbufMulti()); + + solo_iso_renderer->set_pixbuf (0, ::get_icon("act-disabled")); + solo_iso_renderer->set_pixbuf (1, ::get_icon("solo-isolated")); + solo_iso_renderer->signal_changed().connect (mem_fun (*this, &EditorRoutes::on_tv_solo_isolate_toggled)); + + TreeViewColumn* solo_isolate_state_column = manage (new TreeViewColumn("I", *solo_iso_renderer)); + + solo_isolate_state_column->add_attribute(solo_iso_renderer->property_state(), _columns.solo_isolate_state); + _display.append_column (*rec_state_column); _display.append_column (*mute_state_column); _display.append_column (*solo_state_column); + _display.append_column (*solo_isolate_state_column); _display.append_column (_("Show"), _columns.visible); _display.append_column (_("Name"), _columns.text); - _display.get_column (0)->set_data (X_("colnum"), GUINT_TO_POINTER(0)); - _display.get_column (1)->set_data (X_("colnum"), GUINT_TO_POINTER(1)); - _display.get_column (2)->set_data (X_("colnum"), GUINT_TO_POINTER(2)); - _display.get_column (3)->set_data (X_("colnum"), GUINT_TO_POINTER(3)); - _display.get_column (4)->set_data (X_("colnum"), GUINT_TO_POINTER(4)); - _display.set_headers_visible (true); _display.set_name ("TrackListDisplay"); _display.get_selection()->set_mode (SELECTION_SINGLE); @@ -125,17 +131,17 @@ EditorRoutes::EditorRoutes (Editor* e) _display.set_size_request (100, -1); _display.add_object_drag (_columns.route.index(), "routes"); - CellRendererText* name_cell = dynamic_cast<CellRendererText*> (_display.get_column_cell_renderer (4)); + CellRendererText* name_cell = dynamic_cast<CellRendererText*> (_display.get_column_cell_renderer (5)); assert (name_cell); - TreeViewColumn* name_column = _display.get_column (4); + TreeViewColumn* name_column = _display.get_column (5); assert (name_column); name_column->add_attribute (name_cell->property_editable(), _columns.name_editable); name_cell->property_editable() = true; name_cell->signal_edited().connect (mem_fun (*this, &EditorRoutes::name_edit)); - CellRendererToggle* visible_cell = dynamic_cast<CellRendererToggle*> (_display.get_column_cell_renderer (3)); + CellRendererToggle* visible_cell = dynamic_cast<CellRendererToggle*> (_display.get_column_cell_renderer (4)); visible_cell->property_activatable() = true; visible_cell->property_radio() = false; @@ -209,6 +215,20 @@ EditorRoutes::on_tv_solo_enable_toggled (Glib::ustring const & path_string) } void +EditorRoutes::on_tv_solo_isolate_toggled (Glib::ustring const & path_string) +{ + // Get the model row that has been toggled. + Gtk::TreeModel::Row row = *_model->get_iter (Gtk::TreeModel::Path (path_string)); + + TimeAxisView *tv = row[_columns.tv]; + AudioTimeAxisView *atv = dynamic_cast<AudioTimeAxisView*> (tv); + + if (atv != 0) { + atv->route()->set_solo_isolated (!atv->route()->solo_isolated(), this); + } +} + +void EditorRoutes::build_menu () { using namespace Menu_Helpers; @@ -372,6 +392,7 @@ EditorRoutes::routes_added (list<RouteTimeAxisView*> routes) (*x)->route()->mute_changed.connect (mem_fun (*this, &EditorRoutes::update_mute_display)); (*x)->route()->solo_changed.connect (mem_fun (*this, &EditorRoutes::update_solo_display)); + (*x)->route()->solo_isolated_changed.connect (mem_fun (*this, &EditorRoutes::update_solo_isolate_display)); } update_rec_display (); @@ -903,6 +924,18 @@ EditorRoutes::update_solo_display (void* /*src*/) } } +void +EditorRoutes::update_solo_isolate_display (void* /*src*/) +{ + TreeModel::Children rows = _model->children(); + TreeModel::Children::iterator i; + + for (i = rows.begin(); i != rows.end(); ++i) { + boost::shared_ptr<Route> route = (*i)[_columns.route]; + (*i)[_columns.solo_isolate_state] = RouteUI::solo_isolate_visual_state (route) > 0 ? 1 : 0; + } +} + list<TimeAxisView*> EditorRoutes::views () const { diff --git a/gtk2_ardour/editor_routes.h b/gtk2_ardour/editor_routes.h index 5b1c42785a..756796dbda 100644 --- a/gtk2_ardour/editor_routes.h +++ b/gtk2_ardour/editor_routes.h @@ -55,6 +55,7 @@ private: void on_tv_rec_enable_toggled (Glib::ustring const &); void on_tv_mute_enable_toggled (Glib::ustring const &); void on_tv_solo_enable_toggled (Glib::ustring const &); + void on_tv_solo_isolate_toggled (Glib::ustring const &); void build_menu (); void show_menu (); void route_deleted (Gtk::TreeModel::Path const &); @@ -67,6 +68,7 @@ private: void update_rec_display (); void update_mute_display (void* /*src*/); void update_solo_display (void* /*src*/); + void update_solo_isolate_display (void* /*src*/); void set_all_tracks_visibility (bool); void set_all_audio_visibility (int, bool); void show_all_routes (); @@ -93,6 +95,7 @@ private: add (rec_enabled); add (mute_state); add (solo_state); + add (solo_isolate_state); add (is_track); add (tv); add (route); @@ -104,6 +107,7 @@ private: Gtk::TreeModelColumn<bool> rec_enabled; Gtk::TreeModelColumn<uint32_t> mute_state; Gtk::TreeModelColumn<uint32_t> solo_state; + Gtk::TreeModelColumn<uint32_t> solo_isolate_state; Gtk::TreeModelColumn<bool> is_track; Gtk::TreeModelColumn<TimeAxisView*> tv; Gtk::TreeModelColumn<boost::shared_ptr<ARDOUR::Route> > route; diff --git a/gtk2_ardour/icons/solo-isolated.png b/gtk2_ardour/icons/solo-isolated.png Binary files differnew file mode 100644 index 0000000000..b8e2965990 --- /dev/null +++ b/gtk2_ardour/icons/solo-isolated.png diff --git a/gtk2_ardour/route_ui.cc b/gtk2_ardour/route_ui.cc index f233314188..79f76ee7de 100644 --- a/gtk2_ardour/route_ui.cc +++ b/gtk2_ardour/route_ui.cc @@ -668,6 +668,10 @@ RouteUI::listen_changed(void* /*src*/) int RouteUI::solo_visual_state (boost::shared_ptr<Route> r) { + if (r->is_master() || r->is_control()) { + return 0; + } + if (Config->get_solo_control_is_listen_control()) { if (r->listening()) { @@ -676,25 +680,60 @@ RouteUI::solo_visual_state (boost::shared_ptr<Route> r) return 0; } + } + + if (r->soloed()) { + return 1; } else { + return 0; + } +} - if (r->solo_isolated()) { - return 2; - } else if (r->soloed()) { +int +RouteUI::solo_visual_state_with_isolate (boost::shared_ptr<Route> r) +{ + if (r->is_master() || r->is_control()) { + return 0; + } + + if (Config->get_solo_control_is_listen_control()) { + + if (r->listening()) { return 1; } else { return 0; } + + } + + if (r->solo_isolated()) { + return 2; + } else if (r->soloed()) { + return 1; + } else { + return 0; } +} - return 0; +int +RouteUI::solo_isolate_visual_state (boost::shared_ptr<Route> r) +{ + if (r->is_master() || r->is_control()) { + return 0; + } + + if (r->solo_isolated()) { + return 1; + } else { + return 0; + } } void RouteUI::update_solo_display () { bool x; - + if (Config->get_solo_control_is_listen_control()) { if (solo_button->get_active() != (x = _route->listening())) { @@ -713,7 +752,7 @@ RouteUI::update_solo_display () } - solo_button->set_visual_state (solo_visual_state (_route)); + solo_button->set_visual_state (solo_visual_state_with_isolate (_route)); } void @@ -731,6 +770,10 @@ RouteUI::mute_changed(void* /*src*/) int RouteUI::mute_visual_state (Session& s, boost::shared_ptr<Route> r) { + if (r->is_master() || r->is_control()) { + return 0; + } + if (Config->get_show_solo_mutes()) { if (r->muted ()) { diff --git a/gtk2_ardour/route_ui.h b/gtk2_ardour/route_ui.h index c38a4aac6d..21d335ef79 100644 --- a/gtk2_ardour/route_ui.h +++ b/gtk2_ardour/route_ui.h @@ -192,6 +192,8 @@ class RouteUI : public virtual AxisView void open_remote_control_id_dialog (); static int solo_visual_state (boost::shared_ptr<ARDOUR::Route>); + static int solo_visual_state_with_isolate (boost::shared_ptr<ARDOUR::Route>); + static int solo_isolate_visual_state (boost::shared_ptr<ARDOUR::Route>); static int mute_visual_state (ARDOUR::Session &, boost::shared_ptr<ARDOUR::Route>); protected: |