summaryrefslogtreecommitdiff
path: root/gtk2_ardour
diff options
context:
space:
mode:
authorPaul Davis <paul@linuxaudiosystems.com>2009-12-10 20:51:35 +0000
committerPaul Davis <paul@linuxaudiosystems.com>2009-12-10 20:51:35 +0000
commit6ab765e8fab08b186aa77e3ac01c33e0dbfc1ba1 (patch)
tree13194e8d83857558ebd20e720139d0b7bf699a9b /gtk2_ardour
parent2f350c491e3bc22fe79bdec0ee67b773b0fd2009 (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-xgtk2_ardour/ardbg2
-rw-r--r--gtk2_ardour/editor_routes.cc51
-rw-r--r--gtk2_ardour/editor_routes.h4
-rw-r--r--gtk2_ardour/icons/solo-isolated.pngbin0 -> 392 bytes
-rw-r--r--gtk2_ardour/route_ui.cc55
-rw-r--r--gtk2_ardour/route_ui.h2
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
new file mode 100644
index 0000000000..b8e2965990
--- /dev/null
+++ b/gtk2_ardour/icons/solo-isolated.png
Binary files differ
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: