'libs/ardour' - Compiler specific includes and includes
[ardour.git] / gtk2_ardour / editor_canvas.cc
index 8c9970275d97290622b5b7de80d45b9196f54a25..1a6dc863e182e86a9cc791e5b4dde58fe25c511e 100644 (file)
@@ -29,6 +29,7 @@
 
 #include "ardour/profile.h"
 #include "ardour/rc_configuration.h"
+#include "ardour/smf_source.h"
 
 #include "ardour_ui.h"
 #include "editor.h"
 #include "waveview.h"
 #include "simplerect.h"
 #include "simpleline.h"
-#include "imageframe.h"
 #include "waveview_p.h"
 #include "simplerect_p.h"
 #include "simpleline_p.h"
-#include "imageframe_p.h"
 #include "canvas_impl.h"
 #include "canvas-noevent-text.h"
 #include "editing.h"
@@ -88,14 +87,12 @@ static void ardour_canvas_type_init()
        Glib::wrap_register(gnome_canvas_simpleline_get_type(), &Gnome::Canvas::SimpleLine_Class::wrap_new);
        Glib::wrap_register(gnome_canvas_simplerect_get_type(), &Gnome::Canvas::SimpleRect_Class::wrap_new);
        Glib::wrap_register(gnome_canvas_waveview_get_type(), &Gnome::Canvas::WaveView_Class::wrap_new);
-       // Glib::wrap_register(gnome_canvas_imageframe_get_type(), &Gnome::Canvas::ImageFrame_Class::wrap_new);
 
        // Register the gtkmm gtypes:
 
        (void) Gnome::Canvas::WaveView::get_type();
        (void) Gnome::Canvas::SimpleLine::get_type();
        (void) Gnome::Canvas::SimpleRect::get_type();
-       (void) Gnome::Canvas::ImageFrame::get_type();
 }
 
 void
@@ -187,7 +184,6 @@ Editor::initialize_canvas ()
        cd_marker_bar->property_outline_pixels() = 1;
        cd_marker_bar->property_outline_what() = 0x8;
 
-#ifdef WITH_VIDEOTIMELINE
        videotl_bar_group = new ArdourCanvas::Group (*track_canvas->root ());
        if (Profile->get_sae()) {
                videotl_bar = new ArdourCanvas::SimpleRect (*videotl_bar_group, 0.0, 0.0, phys_width, (timebar_height * videotl_bar_height - 1));
@@ -198,7 +194,6 @@ Editor::initialize_canvas ()
        }
        videotl_bar->property_outline_what() = (0x1 | 0x8);
        ARDOUR_UI::instance()->video_timeline = new VideoTimeLine(this, videotl_bar_group, (timebar_height * videotl_bar_height));
-#endif
 
        timebar_group =  new ArdourCanvas::Group (*track_canvas->root(), 0.0, 0.0);
        cursor_group = new ArdourCanvas::Group (*track_canvas->root(), 0.0, 0.0);
@@ -209,9 +204,7 @@ Editor::initialize_canvas ()
        transport_marker_group = new ArdourCanvas::Group (*timebar_group, 0.0, timebar_height * 2.0);
        marker_group = new ArdourCanvas::Group (*timebar_group, 0.0, timebar_height);
        cd_marker_group = new ArdourCanvas::Group (*timebar_group, 0.0, 0.0);
-#ifdef WITH_VIDEOTIMELINE
        videotl_group = new ArdourCanvas::Group (*timebar_group, 0.0, 0.0);
-#endif
 
        cd_marker_bar_drag_rect = new ArdourCanvas::SimpleRect (*cd_marker_group, 0.0, 0.0, 100, timebar_height);
        cd_marker_bar_drag_rect->property_outline_pixels() = 0;
@@ -256,10 +249,7 @@ Editor::initialize_canvas ()
        meter_bar->signal_event().connect (sigc::bind (sigc::mem_fun (*this, &Editor::canvas_meter_bar_event), meter_bar));
        marker_bar->signal_event().connect (sigc::bind (sigc::mem_fun (*this, &Editor::canvas_marker_bar_event), marker_bar));
        cd_marker_bar->signal_event().connect (sigc::bind (sigc::mem_fun (*this, &Editor::canvas_cd_marker_bar_event), cd_marker_bar));
-#ifdef WITH_VIDEOTIMELINE
        videotl_bar_group->signal_event().connect (sigc::bind (sigc::mem_fun (*this, &Editor::canvas_videotl_bar_event), videotl_bar));
-       //videotl_bar->signal_event().connect (sigc::bind (sigc::mem_fun (*this, &Editor::canvas_videotl_bar_event), videotl_bar));
-#endif
        range_marker_bar->signal_event().connect (sigc::bind (sigc::mem_fun (*this, &Editor::canvas_range_marker_bar_event), range_marker_bar));
        transport_marker_bar->signal_event().connect (sigc::bind (sigc::mem_fun (*this, &Editor::canvas_transport_marker_bar_event), transport_marker_bar));
 
@@ -422,6 +412,23 @@ void
 Editor::drop_paths_part_two (const vector<string>& paths, framepos_t frame, double ypos, bool copy)
 {
        RouteTimeAxisView* tv;
+       
+       /* MIDI files must always be imported, because we consider them
+        * writable. So split paths into two vectors, and follow the import
+        * path on the MIDI part.
+        */
+
+       vector<string> midi_paths;
+       vector<string> audio_paths;
+
+       for (vector<string>::const_iterator i = paths.begin(); i != paths.end(); ++i) {
+               if (SMFSource::safe_midi_file_extension (*i)) {
+                       midi_paths.push_back (*i);
+               } else {
+                       audio_paths.push_back (*i);
+               }
+       }
+
 
        std::pair<TimeAxisView*, int> const tvp = trackview_by_y_position (ypos);
        if (tvp.first == 0) {
@@ -430,24 +437,28 @@ Editor::drop_paths_part_two (const vector<string>& paths, framepos_t frame, doub
 
                frame = 0;
 
+               do_import (midi_paths, Editing::ImportDistinctFiles, ImportAsTrack, SrcBest, frame);
+               
                if (Profile->get_sae() || Config->get_only_copy_imported_files() || copy) {
-                       do_import (paths, Editing::ImportDistinctFiles, Editing::ImportAsTrack, SrcBest, frame);
+                       do_import (audio_paths, Editing::ImportDistinctFiles, Editing::ImportAsTrack, SrcBest, frame);
                } else {
-                       do_embed (paths, Editing::ImportDistinctFiles, ImportAsTrack, frame);
+                       do_embed (audio_paths, Editing::ImportDistinctFiles, ImportAsTrack, frame);
                }
 
        } else if ((tv = dynamic_cast<RouteTimeAxisView*> (tvp.first)) != 0) {
 
-               /* check that its an audio track, not a bus */
+               /* check that its a track, not a bus */
 
                if (tv->track()) {
                        /* select the track, then embed/import */
                        selection->set (tv);
 
+                       do_import (midi_paths, Editing::ImportSerializeFiles, ImportToTrack, SrcBest, frame);
+
                        if (Profile->get_sae() || Config->get_only_copy_imported_files() || copy) {
-                               do_import (paths, Editing::ImportSerializeFiles, Editing::ImportToTrack, SrcBest, frame);
+                               do_import (audio_paths, Editing::ImportSerializeFiles, Editing::ImportToTrack, SrcBest, frame);
                        } else {
-                               do_embed (paths, Editing::ImportSerializeFiles, ImportToTrack, frame);
+                               do_embed (audio_paths, Editing::ImportSerializeFiles, ImportToTrack, frame);
                        }
                }
        }
@@ -821,9 +832,7 @@ Editor::set_horizontal_position (double p)
                _summary->set_overlays_dirty ();
        }
 
-#ifdef WITH_VIDEOTIMELINE
        update_video_timeline();
-#endif
 
        HorizontalPositionChanged (); /* EMIT SIGNAL */
 
@@ -874,10 +883,8 @@ Editor::color_handler()
        cd_marker_bar->property_fill_color_rgba() = ARDOUR_UI::config()->canvasvar_CDMarkerBar.get();
        cd_marker_bar->property_outline_color_rgba() = ARDOUR_UI::config()->canvasvar_MarkerBarSeparator.get();
 
-#ifdef WITH_VIDEOTIMELINE
        videotl_bar->property_fill_color_rgba() = ARDOUR_UI::config()->canvasvar_VideoBar.get();
        videotl_bar->property_outline_color_rgba() = ARDOUR_UI::config()->canvasvar_MarkerBarSeparator.get();
-#endif
 
        range_marker_bar->property_fill_color_rgba() = ARDOUR_UI::config()->canvasvar_RangeMarkerBar.get();
        range_marker_bar->property_outline_color_rgba() = ARDOUR_UI::config()->canvasvar_MarkerBarSeparator.get();