summaryrefslogtreecommitdiff
path: root/gtk2_ardour/editor_edit_groups.cc
diff options
context:
space:
mode:
Diffstat (limited to 'gtk2_ardour/editor_edit_groups.cc')
-rw-r--r--gtk2_ardour/editor_edit_groups.cc174
1 files changed, 169 insertions, 5 deletions
diff --git a/gtk2_ardour/editor_edit_groups.cc b/gtk2_ardour/editor_edit_groups.cc
index 54547b5a0d..6eac473c7e 100644
--- a/gtk2_ardour/editor_edit_groups.cc
+++ b/gtk2_ardour/editor_edit_groups.cc
@@ -106,7 +106,7 @@ Editor::set_route_group_activation (RouteGroup* g, bool a)
void
Editor::new_route_group ()
{
- RouteGroup* g = new RouteGroup (*session, "", RouteGroup::Active);
+ RouteGroup* g = new RouteGroup (*session, "", RouteGroup::Active, (RouteGroup::Property) (RouteGroup::Mute | RouteGroup::Solo | RouteGroup::Edit));
RouteGroupDialog d (g, Gtk::Stock::NEW);
int const r = d.do_run ();
@@ -121,7 +121,7 @@ Editor::new_route_group ()
void
Editor::new_route_group_from_selection ()
{
- RouteGroup* g = new RouteGroup (*session, "", RouteGroup::Active);
+ RouteGroup* g = new RouteGroup (*session, "", RouteGroup::Active, (RouteGroup::Property) (RouteGroup::Mute | RouteGroup::Solo | RouteGroup::Edit | RouteGroup::Select));
RouteGroupDialog d (g, Gtk::Stock::NEW);
int const r = d.do_run ();
@@ -144,7 +144,7 @@ Editor::new_route_group_from_selection ()
void
Editor::new_route_group_from_rec_enabled ()
{
- RouteGroup* g = new RouteGroup (*session, "", RouteGroup::Active);
+ RouteGroup* g = new RouteGroup (*session, "", RouteGroup::Active, (RouteGroup::Property) (RouteGroup::Mute | RouteGroup::Solo | RouteGroup::Edit | RouteGroup::RecEnable));
RouteGroupDialog d (g, Gtk::Stock::NEW);
int const r = d.do_run ();
@@ -167,7 +167,7 @@ Editor::new_route_group_from_rec_enabled ()
void
Editor::new_route_group_from_soloed ()
{
- RouteGroup* g = new RouteGroup (*session, "", RouteGroup::Active);
+ RouteGroup* g = new RouteGroup (*session, "", RouteGroup::Active, (RouteGroup::Property) (RouteGroup::Mute | RouteGroup::Solo | RouteGroup::Edit));
RouteGroupDialog d (g, Gtk::Stock::NEW);
int const r = d.do_run ();
@@ -273,6 +273,72 @@ Editor::route_group_list_button_press_event (GdkEventButton* ev)
case 1:
if ((iter = group_model->get_iter (path))) {
+ bool gain = (*iter)[group_columns.gain];
+ (*iter)[group_columns.gain] = !gain;
+#ifdef GTKOSX
+ route_group_display.queue_draw();
+#endif
+ return true;
+ }
+ break;
+
+ case 2:
+ if ((iter = group_model->get_iter (path))) {
+ bool record = (*iter)[group_columns.record];
+ (*iter)[group_columns.record] = !record;
+#ifdef GTKOSX
+ route_group_display.queue_draw();
+#endif
+ return true;
+ }
+ break;
+
+ case 3:
+ if ((iter = group_model->get_iter (path))) {
+ bool mute = (*iter)[group_columns.mute];
+ (*iter)[group_columns.mute] = !mute;
+#ifdef GTKOSX
+ route_group_display.queue_draw();
+#endif
+ return true;
+ }
+ break;
+
+ case 4:
+ if ((iter = group_model->get_iter (path))) {
+ bool solo = (*iter)[group_columns.solo];
+ (*iter)[group_columns.solo] = !solo;
+#ifdef GTKOSX
+ route_group_display.queue_draw();
+#endif
+ return true;
+ }
+ break;
+
+ case 5:
+ if ((iter = group_model->get_iter (path))) {
+ bool select = (*iter)[group_columns.select];
+ (*iter)[group_columns.select] = !select;
+#ifdef GTKOSX
+ route_group_display.queue_draw();
+#endif
+ return true;
+ }
+ break;
+
+ case 6:
+ if ((iter = group_model->get_iter (path))) {
+ bool edits = (*iter)[group_columns.edits];
+ (*iter)[group_columns.edits] = !edits;
+#ifdef GTKOSX
+ route_group_display.queue_draw();
+#endif
+ return true;
+ }
+ break;
+
+ case 7:
+ if ((iter = group_model->get_iter (path))) {
bool visible = (*iter)[group_columns.is_visible];
(*iter)[group_columns.is_visible] = !visible;
#ifdef GTKOSX
@@ -316,6 +382,90 @@ Editor::route_group_row_change (const Gtk::TreeModel::Path& path,const Gtk::Tree
}
}
+ if ((*iter)[group_columns.gain]) {
+ for (TrackViewList::iterator j = track_views.begin(); j != track_views.end(); ++j) {
+ if ((*j)->route_group() == group) {
+ group->set_property (RouteGroup::Gain, true);
+ }
+ }
+ } else {
+ for (TrackViewList::iterator j = track_views.begin(); j != track_views.end(); ++j) {
+ if ((*j)->route_group() == group) {
+ group->set_property (RouteGroup::Gain, false);
+ }
+ }
+ }
+
+ if ((*iter)[group_columns.record]) {
+ for (TrackViewList::iterator j = track_views.begin(); j != track_views.end(); ++j) {
+ if ((*j)->route_group() == group) {
+ group->set_property (RouteGroup::RecEnable, true);
+ }
+ }
+ } else {
+ for (TrackViewList::iterator j = track_views.begin(); j != track_views.end(); ++j) {
+ if ((*j)->route_group() == group) {
+ group->set_property (RouteGroup::RecEnable, false);
+ }
+ }
+ }
+
+ if ((*iter)[group_columns.mute]) {
+ for (TrackViewList::iterator j = track_views.begin(); j != track_views.end(); ++j) {
+ if ((*j)->route_group() == group) {
+ group->set_property (RouteGroup::Mute, true);
+ }
+ }
+ } else {
+ for (TrackViewList::iterator j = track_views.begin(); j != track_views.end(); ++j) {
+ if ((*j)->route_group() == group) {
+ group->set_property (RouteGroup::Mute, false);
+ }
+ }
+ }
+
+ if ((*iter)[group_columns.solo]) {
+ for (TrackViewList::iterator j = track_views.begin(); j != track_views.end(); ++j) {
+ if ((*j)->route_group() == group) {
+ group->set_property (RouteGroup::Solo, true);
+ }
+ }
+ } else {
+ for (TrackViewList::iterator j = track_views.begin(); j != track_views.end(); ++j) {
+ if ((*j)->route_group() == group) {
+ group->set_property (RouteGroup::Solo, false);
+ }
+ }
+ }
+
+ if ((*iter)[group_columns.select]) {
+ for (TrackViewList::iterator j = track_views.begin(); j != track_views.end(); ++j) {
+ if ((*j)->route_group() == group) {
+ group->set_property (RouteGroup::Select, true);
+ }
+ }
+ } else {
+ for (TrackViewList::iterator j = track_views.begin(); j != track_views.end(); ++j) {
+ if ((*j)->route_group() == group) {
+ group->set_property (RouteGroup::Select, false);
+ }
+ }
+ }
+
+ if ((*iter)[group_columns.edits]) {
+ for (TrackViewList::iterator j = track_views.begin(); j != track_views.end(); ++j) {
+ if ((*j)->route_group() == group) {
+ group->set_property (RouteGroup::Edit, true);
+ }
+ }
+ } else {
+ for (TrackViewList::iterator j = track_views.begin(); j != track_views.end(); ++j) {
+ if ((*j)->route_group() == group) {
+ group->set_property (RouteGroup::Edit, false);
+ }
+ }
+ }
+
string name = (*iter)[group_columns.text];
if (name != group->name()) {
@@ -330,7 +480,14 @@ Editor::add_route_group (RouteGroup* group)
bool focus = false;
TreeModel::Row row = *(group_model->append());
+
row[group_columns.is_visible] = !group->is_hidden();
+ row[group_columns.gain] = group->property(RouteGroup::Gain);
+ row[group_columns.record] = group->property(RouteGroup::RecEnable);
+ row[group_columns.mute] = group->property(RouteGroup::Mute);
+ row[group_columns.solo] = group->property(RouteGroup::Solo);
+ row[group_columns.select] = group->property(RouteGroup::Select);
+ row[group_columns.edits] = group->property(RouteGroup::Edit);
in_route_group_row_change = true;
@@ -345,7 +502,7 @@ Editor::add_route_group (RouteGroup* group)
group->FlagsChanged.connect (bind (mem_fun(*this, &Editor::group_flags_changed), group));
- if (focus) {
+ if (focus) {
TreeViewColumn* col = route_group_display.get_column (0);
CellRendererText* name_cell = dynamic_cast<CellRendererText*>(route_group_display.get_column_cell_renderer (0));
route_group_display.set_cursor (group_model->get_path (row), *col, *name_cell, true);
@@ -384,10 +541,17 @@ Editor::group_flags_changed (void* src, RouteGroup* group)
in_route_group_row_change = true;
Gtk::TreeModel::Children children = group_model->children();
+
for(Gtk::TreeModel::Children::iterator iter = children.begin(); iter != children.end(); ++iter) {
if (group == (*iter)[group_columns.routegroup]) {
(*iter)[group_columns.is_visible] = !group->is_hidden();
(*iter)[group_columns.text] = group->name();
+ (*iter)[group_columns.gain] = group->property(RouteGroup::Gain);
+ (*iter)[group_columns.record] = group->property(RouteGroup::RecEnable);
+ (*iter)[group_columns.mute] = group->property(RouteGroup::Mute);
+ (*iter)[group_columns.solo] = group->property(RouteGroup::Solo);
+ (*iter)[group_columns.select] = group->property(RouteGroup::Select);
+ (*iter)[group_columns.edits] = group->property(RouteGroup::Edit);
}
}