Brought back visual indication of delete dragging.
[ardour.git] / gtk2_ardour / editor.cc
index 61250c1289126010153f80a1969669c58326f7e5..bb7ae142ecc8b76022294d96c94e14f5cc520dfb 100644 (file)
@@ -152,6 +152,7 @@ Gdk::Cursor* Editor::zoom_cursor = 0;
 Gdk::Cursor* Editor::time_fx_cursor = 0;
 Gdk::Cursor* Editor::fader_cursor = 0;
 Gdk::Cursor* Editor::speaker_cursor = 0;
+Gdk::Cursor* Editor::note_cursor = 0;
 Gdk::Cursor* Editor::wait_cursor = 0;
 Gdk::Cursor* Editor::timebar_cursor = 0;
 
@@ -198,6 +199,9 @@ Editor::Editor ()
          vertical_adjustment (0.0, 0.0, 10.0, 400.0),
          horizontal_adjustment (0.0, 0.0, 20.0, 1200.0),
 
+         tempo_lines(0),
+         marker_tempo_lines(0),
+
          /* tool bar related */
 
          edit_cursor_clock (X_("editcursor"), false, X_("EditCursorClock"), true),
@@ -312,11 +316,11 @@ Editor::Editor ()
        _dragging_playhead = false;
        _dragging_hscrollbar = false;
 
-       location_marker_color = Config->canvasvar_LocationMarker.get();
-       location_range_color = Config->canvasvar_LocationRange.get();
-       location_cd_marker_color = Config->canvasvar_LocationCDMarker.get();
-       location_loop_color = Config->canvasvar_LocationLoop.get();
-       location_punch_color = Config->canvasvar_LocationPunch.get();
+       location_marker_color = ARDOUR_UI::config()->canvasvar_LocationMarker.get();
+       location_range_color = ARDOUR_UI::config()->canvasvar_LocationRange.get();
+       location_cd_marker_color = ARDOUR_UI::config()->canvasvar_LocationCDMarker.get();
+       location_loop_color = ARDOUR_UI::config()->canvasvar_LocationLoop.get();
+       location_punch_color = ARDOUR_UI::config()->canvasvar_LocationPunch.get();
 
        range_marker_drag_rect = 0;
        marker_drag_line = 0;
@@ -367,13 +371,20 @@ Editor::Editor ()
 
        edit_cursor_clock.ValueChanged.connect (mem_fun(*this, &Editor::edit_cursor_clock_changed));
        
+       ArdourCanvas::Canvas* time_pad = manage(new ArdourCanvas::Canvas());
+       ArdourCanvas::SimpleLine* pad_line_1 = manage(new ArdourCanvas::SimpleLine(*time_pad->root(),
+                       0.0, 1.0, 100.0, 1.0));
+       pad_line_1->property_color_rgba() = 0xFF0000FF;
+       pad_line_1->show();
+       time_pad->show();
+
        time_canvas_vbox.pack_start (*_ruler_separator, false, false);
        time_canvas_vbox.pack_start (*minsec_ruler, false, false);
        time_canvas_vbox.pack_start (*smpte_ruler, false, false);
        time_canvas_vbox.pack_start (*frames_ruler, false, false);
        time_canvas_vbox.pack_start (*bbt_ruler, false, false);
        time_canvas_vbox.pack_start (time_canvas, true, true);
-       time_canvas_vbox.set_size_request (-1, (int)(timebar_height * visible_timebars) + 2);
+       time_canvas_vbox.set_size_request (-1, (int)(timebar_height * visible_timebars) + 5);
 
        bbt_label.set_name ("EditorTimeButton");
        bbt_label.set_size_request (-1, (int)timebar_height);
@@ -421,13 +432,15 @@ Editor::Editor ()
        time_button_vbox.pack_start (mark_label, false, false);
 
        time_button_event_box.add (time_button_vbox);
+       time_button_event_box.set_name ("TimebarLabelBase");
+       time_button_frame.set_shadow_type (Gtk::SHADOW_NONE);
        
        time_button_event_box.set_events (Gdk::BUTTON_PRESS_MASK|Gdk::BUTTON_RELEASE_MASK);
-       time_button_event_box.set_name ("TimebarLabelBase");
        time_button_event_box.signal_button_release_event().connect (mem_fun(*this, &Editor::ruler_label_button_release));
 
-       time_button_frame.add(time_button_event_box);
-       time_button_frame.property_shadow_type() = Gtk::SHADOW_OUT;
+       time_button_frame.add (time_button_event_box);
+       time_button_frame.set_name ("TimebarLabelBase");
+       time_button_frame.set_shadow_type (Gtk::SHADOW_ETCHED_OUT);
 
        /* these enable us to have a dedicated window (for cursor setting, etc.) 
           for the canvas areas.
@@ -446,7 +459,7 @@ Editor::Editor ()
        
        edit_packer.attach (edit_vscrollbar,         3, 4, 1, 2,    FILL,        FILL|EXPAND, 0, 0);
 
-       edit_packer.attach (time_button_frame,       0, 2, 0, 1,    FILL,        FILL, 0, 0);
+       edit_packer.attach (time_button_frame,       0, 2, 0, 1,    FILL,        SHRINK, 0, 0);
        edit_packer.attach (time_canvas_event_box,   2, 4, 0, 1,    FILL|EXPAND, FILL, 0, 0);
 
        edit_packer.attach (controls_layout,         1, 2, 1, 2,    FILL,        FILL|EXPAND, 0, 0);
@@ -810,8 +823,7 @@ Editor::set_entered_track (TimeAxisView* tav)
 void
 Editor::show_window ()
 {
-       show_all ();
-       present ();
+       show_all_children ();
        
        /* re-hide editor list if necessary */
        editor_list_button_toggled ();
@@ -826,6 +838,8 @@ Editor::show_window ()
                tv = (static_cast<TimeAxisView*>(*i));
                tv->reset_height ();
        }
+
+       present ();
 }
 
 void
@@ -1153,7 +1167,7 @@ Editor::connect_to_session (Session *t)
 
        if (ARDOUR_UI::instance()->session_is_new ()) {
 
-               TreeModel::Children rows = route_display_model->children();
+               TreeModel::Children rows = route_display_model->children();
                TreeModel::Children::iterator i;
        
                no_route_list_redisplay = true;
@@ -1163,7 +1177,7 @@ Editor::connect_to_session (Session *t)
                        RouteTimeAxisView *rtv;
                        
                        if ((rtv = dynamic_cast<RouteTimeAxisView*>(tv)) != 0) {
-                               if (rtv->route()->master()) {
+                               if (rtv->route()->is_master()) {
                                        route_list_display.get_selection()->unselect (i);
                                }
                        }
@@ -1173,9 +1187,9 @@ Editor::connect_to_session (Session *t)
                redisplay_route_list ();
        }
 
-        /* register for undo history */
+       /* register for undo history */
 
-        session->register_with_memento_command_factory(_id, this);
+       session->register_with_memento_command_factory(_id, this);
 }
 
 void
@@ -1210,7 +1224,7 @@ Editor::build_cursors ()
                mask = Bitmap::create (speaker_cursor_mask_bits, speaker_cursor_width, speaker_cursor_height);
                speaker_cursor = new Gdk::Cursor (source, mask, ffg, fbg, speaker_cursor_x_hot, speaker_cursor_y_hot);
        }
-
+       
        grabber_cursor = new Gdk::Cursor (HAND2);
        cross_hair_cursor = new Gdk::Cursor (CROSSHAIR);
        trimmer_cursor =  new Gdk::Cursor (SB_H_DOUBLE_ARROW);
@@ -1218,6 +1232,7 @@ Editor::build_cursors ()
        time_fx_cursor = new Gdk::Cursor (SIZING);
        wait_cursor = new Gdk::Cursor  (WATCH);
        timebar_cursor = new Gdk::Cursor(LEFT_PTR);
+       note_cursor = new Gdk::Cursor (PENCIL);
 }
 
 /** Pop up a context menu for when the user clicks on a fade in or fade out */
@@ -2322,6 +2337,9 @@ Editor::setup_toolbar ()
        mouse_mode_buttons.push_back (&mouse_timefx_button);
        mouse_audition_button.add (*(manage (new Image (::get_icon("tool_audition")))));
        mouse_audition_button.set_relief(Gtk::RELIEF_NONE);
+       mouse_note_button.add (*(manage (new Image (::get_icon("tool_note")))));
+       mouse_note_button.set_relief(Gtk::RELIEF_NONE);
+       mouse_mode_buttons.push_back (&mouse_note_button);
        mouse_mode_buttons.push_back (&mouse_audition_button);
        
        mouse_mode_button_set = new GroupedButtons (mouse_mode_buttons);
@@ -2336,6 +2354,7 @@ Editor::setup_toolbar ()
        mouse_mode_button_box.pack_start(mouse_gain_button, true, true);
        mouse_mode_button_box.pack_start(mouse_timefx_button, true, true);
        mouse_mode_button_box.pack_start(mouse_audition_button, true, true);
+       mouse_mode_button_box.pack_start(mouse_note_button, true, true);
        mouse_mode_button_box.set_homogeneous(true);
 
        vector<string> edit_mode_strings;
@@ -2368,6 +2387,7 @@ Editor::setup_toolbar ()
        mouse_zoom_button.set_name ("MouseModeButton");
        mouse_timefx_button.set_name ("MouseModeButton");
        mouse_audition_button.set_name ("MouseModeButton");
+       mouse_note_button.set_name ("MouseModeButton");
 
        ARDOUR_UI::instance()->tooltips().set_tip (mouse_move_button, _("Select/Move Objects"));
        ARDOUR_UI::instance()->tooltips().set_tip (mouse_select_button, _("Select/Move Ranges"));
@@ -2375,6 +2395,7 @@ Editor::setup_toolbar ()
        ARDOUR_UI::instance()->tooltips().set_tip (mouse_zoom_button, _("Select Zoom Range"));
        ARDOUR_UI::instance()->tooltips().set_tip (mouse_timefx_button, _("Stretch/Shrink Regions"));
        ARDOUR_UI::instance()->tooltips().set_tip (mouse_audition_button, _("Listen to Specific Regions"));
+       ARDOUR_UI::instance()->tooltips().set_tip (mouse_note_button, _("Edit MIDI Notes"));
 
        mouse_move_button.unset_flags (CAN_FOCUS);
        mouse_select_button.unset_flags (CAN_FOCUS);
@@ -2382,6 +2403,7 @@ Editor::setup_toolbar ()
        mouse_zoom_button.unset_flags (CAN_FOCUS);
        mouse_timefx_button.unset_flags (CAN_FOCUS);
        mouse_audition_button.unset_flags (CAN_FOCUS);
+       mouse_note_button.unset_flags (CAN_FOCUS);
 
        mouse_select_button.signal_toggled().connect (bind (mem_fun(*this, &Editor::mouse_mode_toggled), Editing::MouseRange));
        mouse_select_button.signal_button_release_event().connect (mem_fun(*this, &Editor::mouse_select_button_release));
@@ -2391,6 +2413,7 @@ Editor::setup_toolbar ()
        mouse_zoom_button.signal_toggled().connect (bind (mem_fun(*this, &Editor::mouse_mode_toggled), Editing::MouseZoom));
        mouse_timefx_button.signal_toggled().connect (bind (mem_fun(*this, &Editor::mouse_mode_toggled), Editing::MouseTimeFX));
        mouse_audition_button.signal_toggled().connect (bind (mem_fun(*this, &Editor::mouse_mode_toggled), Editing::MouseAudition));
+       mouse_note_button.signal_toggled().connect (bind (mem_fun(*this, &Editor::mouse_mode_toggled), Editing::MouseNote));
 
        // mouse_move_button.set_active (true);
        
@@ -2754,15 +2777,15 @@ Editor::duplicate_dialog (bool dup_region)
 void
 Editor::show_verbose_canvas_cursor ()
 {
-        verbose_canvas_cursor->raise_to_top();
-        verbose_canvas_cursor->show();
+       verbose_canvas_cursor->raise_to_top();
+       verbose_canvas_cursor->show();
        verbose_cursor_visible = true;
 }
 
 void
 Editor::hide_verbose_canvas_cursor ()
 {
-        verbose_canvas_cursor->hide();
+       verbose_canvas_cursor->hide();
        verbose_cursor_visible = false;
 }