Add 'Select tracks/busses' & 'Deselect all' buttons to stem export
authorColin Fletcher <colin.m.fletcher@googlemail.com>
Fri, 5 Jun 2015 22:08:38 +0000 (23:08 +0100)
committerColin Fletcher <colin.m.fletcher@googlemail.com>
Mon, 8 Jun 2015 10:17:55 +0000 (11:17 +0100)
Add buttons to to select all tracks, select all busses and deselect all to
the stem export channel selector.

gtk2_ardour/export_channel_selector.cc
gtk2_ardour/export_channel_selector.h

index 5fa4a0d395beaf367246a1b0b3bb67c512fabad0..159c69eafe6ec7f6b0e896edee89558870a1d99f 100644 (file)
@@ -541,12 +541,18 @@ TrackExportChannelSelector::TrackExportChannelSelector (ARDOUR::Session * sessio
   : ExportChannelSelector(session, manager)
   , region_contents_button(source_group, _("Export region contents"))
   , track_output_button(source_group, _("Export track output"))
+  , select_tracks_button (_("Select all tracks"))
+  , select_busses_button (_("Select all busses"))
+  , select_none_button (_("Deselect all"))
 {
        pack_start(main_layout);
 
        // Options
        options_box.pack_start(region_contents_button);
        options_box.pack_start(track_output_button);
+       options_box.pack_start (select_tracks_button);
+       options_box.pack_start (select_busses_button);
+       options_box.pack_start (select_none_button);
        main_layout.pack_start(options_box, false, false);
 
        // Track scroller
@@ -578,6 +584,10 @@ TrackExportChannelSelector::TrackExportChannelSelector (ARDOUR::Session * sessio
        column->pack_start (*text_renderer, false);
        column->add_attribute (text_renderer->property_text(), track_cols.label);
 
+       select_tracks_button.signal_clicked().connect (sigc::mem_fun (*this, &TrackExportChannelSelector::select_tracks));
+       select_busses_button.signal_clicked().connect (sigc::mem_fun (*this, &TrackExportChannelSelector::select_busses));
+       select_none_button.signal_clicked().connect (sigc::mem_fun (*this, &TrackExportChannelSelector::select_none));
+
        fill_list();
 
        show_all_children ();
@@ -590,6 +600,41 @@ TrackExportChannelSelector::sync_with_manager ()
        update_config();
 }
 
+void
+TrackExportChannelSelector::select_tracks ()
+{
+       for (Gtk::ListStore::Children::iterator it = track_list->children().begin(); it != track_list->children().end(); ++it) {
+               Gtk::TreeModel::Row row = *it;
+               boost::shared_ptr<Route> route = row[track_cols.route];
+               if (boost::dynamic_pointer_cast<Track> (route)) {
+                       // it's a track
+                       row[track_cols.selected] = true;
+               }
+       }
+}
+
+void
+TrackExportChannelSelector::select_busses ()
+{
+       for (Gtk::ListStore::Children::iterator it = track_list->children().begin(); it != track_list->children().end(); ++it) {
+               Gtk::TreeModel::Row row = *it;
+               boost::shared_ptr<Route> route = row[track_cols.route];
+               if (!boost::dynamic_pointer_cast<Track> (route)) {
+                       // it's not a track, must be a bus
+                       row[track_cols.selected] = true;
+               }
+       }
+}
+
+void
+TrackExportChannelSelector::select_none ()
+{
+       for (Gtk::ListStore::Children::iterator it = track_list->children().begin(); it != track_list->children().end(); ++it) {
+               Gtk::TreeModel::Row row = *it;
+               row[track_cols.selected] = false;
+       }
+}
+
 void
 TrackExportChannelSelector::fill_list()
 {
index 2ed47b59d872021d8b5b6de2b56fd920c5027aa9..aa9999a9b61099aadfd9141e9fcaff1bf372b281 100644 (file)
@@ -266,6 +266,12 @@ class TrackExportChannelSelector : public ExportChannelSelector
        Gtk::RadioButton::Group      source_group;
        Gtk::RadioButton             region_contents_button;
        Gtk::RadioButton             track_output_button;
+       Gtk::Button                  select_tracks_button;
+       Gtk::Button                  select_busses_button;
+       Gtk::Button                  select_none_button;
+       void select_tracks ();
+       void select_busses ();
+       void select_none ();
 };
 
 #endif /* __export_channel_selector_h__ */