Fix horizontal positioning of PC flags.
[ardour.git] / gtk2_ardour / editor.cc
index 9740c8857c89335ede480af7f0c2d6a14b0d8eb6..0932a046e08f492e78456a4bf5a634bdeb5a9268 100644 (file)
 #include <gtkmm2ext/window_title.h>
 #include <gtkmm2ext/choice.h>
 
-#include <ardour/audio_track.h>
 #include <ardour/audio_diskstream.h>
-#include <ardour/plugin_manager.h>
-#include <ardour/location.h>
+#include <ardour/audio_track.h>
 #include <ardour/audioplaylist.h>
 #include <ardour/audioregion.h>
+#include <ardour/location.h>
 #include <ardour/midi_region.h>
-#include <ardour/session_route.h>
+#include <ardour/plugin_manager.h>
+#include <ardour/profile.h>
+#include <ardour/route_group.h>
 #include <ardour/session_directory.h>
+#include <ardour/session_route.h>
 #include <ardour/session_state_utils.h>
 #include <ardour/tempo.h>
 #include <ardour/utils.h>
-#include <ardour/profile.h>
 
 #include <control_protocol/control_protocol.h>
 
@@ -87,6 +88,8 @@
 #include "actions.h"
 #include "tempo_lines.h"
 #include "analysis_window.h"
+#include "bundle_manager.h"
+#include "global_port_matrix.h"
 
 #include "i18n.h"
 
@@ -347,6 +350,10 @@ Editor::Editor ()
        select_new_marker = false;
        zoomed_to_region = false;
        rhythm_ferret = 0;
+       _bundle_manager = 0;
+        for (ARDOUR::DataType::iterator i = ARDOUR::DataType::begin(); i != ARDOUR::DataType::end(); ++i) {
+               _global_port_matrix[*i] = 0;
+       }
        allow_vertical_scroll = false;
        no_save_visual = false;
        need_resize_line = false;
@@ -446,7 +453,7 @@ Editor::Editor ()
 
        selection->TimeChanged.connect (mem_fun(*this, &Editor::time_selection_changed));
        selection->TracksChanged.connect (mem_fun(*this, &Editor::track_selection_changed));
-       selection->RegionsChanged.connect (mem_fun(*this, &Editor::region_selection_changed));
+       editor_regions_selection_changed_connection = selection->RegionsChanged.connect (mem_fun(*this, &Editor::region_selection_changed));
        selection->PointsChanged.connect (mem_fun(*this, &Editor::point_selection_changed));
        selection->MarkersChanged.connect (mem_fun(*this, &Editor::marker_selection_changed));
 
@@ -667,7 +674,7 @@ Editor::Editor ()
        region_list_display.append_column (_("Used"), region_list_columns.used);
        region_list_display.append_column (_("Path"), region_list_columns.path);
        region_list_display.set_headers_visible (true);
-       region_list_display.set_grid_lines (TREE_VIEW_GRID_LINES_BOTH);
+       //region_list_display.set_grid_lines (TREE_VIEW_GRID_LINES_BOTH);
        
        CellRendererText* region_name_cell = dynamic_cast<CellRendererText*>(region_list_display.get_column_cell_renderer (0));
        region_name_cell->property_editable() = true;
@@ -701,7 +708,7 @@ Editor::Editor ()
        region_list_display.signal_key_release_event().connect (mem_fun(*this, &Editor::region_list_display_key_release));
        region_list_display.signal_button_press_event().connect (mem_fun(*this, &Editor::region_list_display_button_press), false);
        region_list_display.signal_button_release_event().connect (mem_fun(*this, &Editor::region_list_display_button_release));
-       region_list_display.get_selection()->signal_changed().connect (mem_fun(*this, &Editor::region_list_selection_changed));
+       region_list_change_connection = region_list_display.get_selection()->signal_changed().connect (mem_fun(*this, &Editor::region_list_selection_changed));
        // region_list_display.signal_popup_menu().connect (bind (mem_fun (*this, &Editor::show_region_list_display_context_menu), 1, 0));
        
        //ARDOUR_UI::instance()->secondary_clock.mode_changed.connect (mem_fun(*this, &Editor::redisplay_regions));
@@ -2722,19 +2729,23 @@ Editor::get_state ()
 
 
 
-TimeAxisView *
+/** @param y y offset from the top of all trackviews.
+ *  @return pair: TimeAxisView that y is over, layer index.
+ *  TimeAxisView may be 0.  Layer index is the layer number if the TimeAxisView is valid and is
+ *  in stacked region display mode, otherwise 0.
+ */
+std::pair<TimeAxisView *, layer_t>
 Editor::trackview_by_y_position (double y)
 {
        for (TrackViewList::iterator iter = track_views.begin(); iter != track_views.end(); ++iter) {
 
-               TimeAxisView *tv;
-
-               if ((tv = (*iter)->covers_y_position (y)) != 0) {
-                       return tv;
+               std::pair<TimeAxisView*, int> const r = (*iter)->covers_y_position (y);
+               if (r.first) {
+                       return r;
                }
        }
 
-       return 0;
+       return std::make_pair ( (TimeAxisView *) 0, 0);
 }
 
 void
@@ -3248,11 +3259,6 @@ Editor::midi_panic_button_pressed ()
        }
 }
 
-void Editor::midi_sound_notes_toggled ()
-{
-       cerr << "toggle sound notes" << endl;
-}
-
 void
 Editor::setup_midi_toolbar ()
 {
@@ -3317,8 +3323,6 @@ Editor::setup_midi_toolbar ()
        midi_sound_notes.set_relief(Gtk::RELIEF_NONE);
        ARDOUR_UI::instance()->tooltips().set_tip (midi_sound_notes, _("Sound Notes"));
        midi_sound_notes.unset_flags (CAN_FOCUS);
-       midi_sound_notes.signal_toggled().connect (mem_fun(*this,
-                               &Editor::midi_sound_notes_toggled));
        
        /* Panic */
        
@@ -3529,7 +3533,7 @@ Editor::restore_state (State *state)
 
        *selection = *state->selection;
        time_selection_changed ();
-       region_selection_changed ();   
+       region_selection_changed ();
 
        /* XXX other selection change handlers? */
 }
@@ -4831,7 +4835,7 @@ Editor::idle_visual_changer ()
 
 struct EditorOrderTimeAxisSorter {
     bool operator() (const TimeAxisView* a, const TimeAxisView* b) const {
-           return a->order < b->order;
+           return a->order () < b->order ();
     }
 };
        
@@ -5130,6 +5134,26 @@ Editor::show_rhythm_ferret ()
        rhythm_ferret->present ();
 }
 
+void
+Editor::show_bundle_manager ()
+{
+       if (_bundle_manager == 0) {
+               _bundle_manager = new BundleManager (*session);
+       }
+
+       _bundle_manager->show ();
+}
+
+void
+Editor::show_global_port_matrix (ARDOUR::DataType t)
+{
+       if (_global_port_matrix[t] == 0) {
+               _global_port_matrix[t] = new GlobalPortMatrixWindow (*session, t);
+       }
+
+       _global_port_matrix[t]->show ();
+}
+
 void
 Editor::first_idle ()
 {