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/editor_routes.cc | |
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/editor_routes.cc')
-rw-r--r-- | gtk2_ardour/editor_routes.cc | 51 |
1 files changed, 42 insertions, 9 deletions
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 { |