tweak label alignment
[ardour.git] / gtk2_ardour / editor_mouse.cc
index c838f16f44544e76d268fb2f182c8d456bc173a1..b2ee2777cfea9845f34853fa41a7eef478f76f88 100644 (file)
@@ -627,7 +627,7 @@ Editor::button_selection (ArdourCanvas::Item* /*item*/, GdkEvent* event, ItemTyp
 
        switch (item_type) {
        case RegionItem:
-               if (!get_smart_mode() || (_join_object_range_state == JOIN_OBJECT_RANGE_OBJECT)) {
+               if (!get_smart_mode() || (_join_object_range_state != JOIN_OBJECT_RANGE_RANGE)) {
                        if (press) {
                                if (mouse_mode != MouseRange) {
                                        set_selected_regionview_from_click (press, op);
@@ -708,7 +708,7 @@ Editor::button_press_handler_1 (ArdourCanvas::Item* item, GdkEvent* event, ItemT
 
        switch (item_type) {
        case PlayheadCursorItem:
-               _drags->set (new CursorDrag (this, item, true), event);
+               _drags->set (new CursorDrag (this, *playhead_cursor, true), event);
                return true;
 
        case MarkerItem:
@@ -766,7 +766,7 @@ Editor::button_press_handler_1 (ArdourCanvas::Item* item, GdkEvent* event, ItemT
        case TempoBarItem:
        case MeterBarItem:
                if (!Keyboard::modifier_state_equals (event->button.state, Keyboard::PrimaryModifier)) {
-                       _drags->set (new CursorDrag (this, &playhead_cursor->track_canvas_item (), false), event);
+                       _drags->set (new CursorDrag (this, *playhead_cursor, false), event);
                }
                return true;
                break;
@@ -774,7 +774,7 @@ Editor::button_press_handler_1 (ArdourCanvas::Item* item, GdkEvent* event, ItemT
 
        case RangeMarkerBarItem:
                if (!Keyboard::modifier_state_equals (event->button.state, Keyboard::PrimaryModifier)) {
-                       _drags->set (new CursorDrag (this, &playhead_cursor->track_canvas_item (), false), event);
+                       _drags->set (new CursorDrag (this, *playhead_cursor, false), event);
                } else {
                        _drags->set (new RangeMarkerBarDrag (this, item, RangeMarkerBarDrag::CreateRangeMarker), event);
                }
@@ -783,7 +783,7 @@ Editor::button_press_handler_1 (ArdourCanvas::Item* item, GdkEvent* event, ItemT
 
        case CdMarkerBarItem:
                if (!Keyboard::modifier_state_equals (event->button.state, Keyboard::PrimaryModifier)) {
-                       _drags->set (new CursorDrag (this, &playhead_cursor->track_canvas_item (), false), event);
+                       _drags->set (new CursorDrag (this, *playhead_cursor, false), event);
                } else {
                        _drags->set (new RangeMarkerBarDrag (this, item, RangeMarkerBarDrag::CreateCDMarker), event);
                }
@@ -792,7 +792,7 @@ Editor::button_press_handler_1 (ArdourCanvas::Item* item, GdkEvent* event, ItemT
 
        case TransportMarkerBarItem:
                if (!Keyboard::modifier_state_equals (event->button.state, Keyboard::PrimaryModifier)) {
-                       _drags->set (new CursorDrag (this, &playhead_cursor->track_canvas_item (), false), event);
+                       _drags->set (new CursorDrag (this, *playhead_cursor, false), event);
                } else {
                        _drags->set (new RangeMarkerBarDrag (this, item, RangeMarkerBarDrag::CreateTransportMarker), event);
                }
@@ -882,8 +882,7 @@ Editor::button_press_handler_1 (ArdourCanvas::Item* item, GdkEvent* event, ItemT
 
                case RegionViewNameHighlight:
                        if (!clicked_regionview->region()->locked()) {
-                               RegionSelection s = get_equivalent_regions (selection->regions, Properties::select.property_id);
-                               _drags->set (new TrimDrag (this, item, clicked_regionview, s.by_layer()), event);
+                               _drags->set (new TrimDrag (this, item, clicked_regionview, selection->regions.by_layer()), event);
                                return true;
                        }
                        break;
@@ -958,15 +957,13 @@ Editor::button_press_handler_1 (ArdourCanvas::Item* item, GdkEvent* event, ItemT
                        switch (item_type) {
                        case FadeInHandleItem:
                        {
-                               RegionSelection s = get_equivalent_regions (selection->regions, Properties::select.property_id);
-                               _drags->set (new FadeInDrag (this, item, reinterpret_cast<RegionView*> (item->get_data("regionview")), s), event, _cursors->fade_in);
+                               _drags->set (new FadeInDrag (this, item, reinterpret_cast<RegionView*> (item->get_data("regionview")), selection->regions), event, _cursors->fade_in);
                                return true;
                        }
 
                        case FadeOutHandleItem:
                        {
-                               RegionSelection s = get_equivalent_regions (selection->regions, Properties::select.property_id);
-                               _drags->set (new FadeOutDrag (this, item, reinterpret_cast<RegionView*> (item->get_data("regionview")), s), event, _cursors->fade_out);
+                               _drags->set (new FadeOutDrag (this, item, reinterpret_cast<RegionView*> (item->get_data("regionview")), selection->regions), event, _cursors->fade_out);
                                return true;
                        }
 
@@ -974,8 +971,7 @@ Editor::button_press_handler_1 (ArdourCanvas::Item* item, GdkEvent* event, ItemT
                        case EndCrossFadeItem:
                                /* we might allow user to grab inside the fade to trim a region with preserve_fade_anchor.  for not this is not fully implemented */ 
 //                             if (!clicked_regionview->region()->locked()) {
-//                                     RegionSelection s = get_equivalent_regions (selection->regions, Properties::edit.property_id);
-//                                     _drags->set (new TrimDrag (this, item, clicked_regionview, s.by_layer(), true), event);
+//                                     _drags->set (new TrimDrag (this, item, clicked_regionview, selection->regions.by_layer(), true), event);
 //                                     return true;
 //                             }
                                break;
@@ -1001,10 +997,6 @@ Editor::button_press_handler_1 (ArdourCanvas::Item* item, GdkEvent* event, ItemT
                                }
 
                                if (internal_editing ()) {
-                                       if (event->type == GDK_2BUTTON_PRESS && event->button.button == 1) {
-                                               Glib::RefPtr<Action> act = ActionManager::get_action (X_("MouseMode"), X_("toggle-internal-edit"));
-                                               act->activate ();
-                                       }
                                        break;
                                }
 
@@ -1030,8 +1022,7 @@ Editor::button_press_handler_1 (ArdourCanvas::Item* item, GdkEvent* event, ItemT
                        case LeftFrameHandle:
                         case RightFrameHandle:
                                if (!clicked_regionview->region()->locked()) {
-                                       RegionSelection s = get_equivalent_regions (selection->regions, Properties::select.property_id);
-                                       _drags->set (new TrimDrag (this, item, clicked_regionview, s.by_layer()), event);
+                                       _drags->set (new TrimDrag (this, item, clicked_regionview, selection->regions.by_layer()), event);
                                        return true;
                                }
                                break;
@@ -1039,8 +1030,7 @@ Editor::button_press_handler_1 (ArdourCanvas::Item* item, GdkEvent* event, ItemT
                        case RegionViewName:
                        {
                                /* rename happens on edit clicks */
-                               RegionSelection s = get_equivalent_regions (selection->regions, Properties::select.property_id);
-                               _drags->set (new TrimDrag (this, clicked_regionview->get_name_highlight(), clicked_regionview, s.by_layer()), event);
+                               _drags->set (new TrimDrag (this, clicked_regionview->get_name_highlight(), clicked_regionview, selection->regions.by_layer()), event);
                                return true;
                                break;
                        }
@@ -1140,31 +1130,6 @@ Editor::button_press_handler_1 (ArdourCanvas::Item* item, GdkEvent* event, ItemT
                                break;
                        }
 
-#ifdef WITH_CMT
-                       case ImageFrameHandleStartItem:
-                               imageframe_start_handle_op(item, event) ;
-                               return(true) ;
-                               break ;
-                       case ImageFrameHandleEndItem:
-                               imageframe_end_handle_op(item, event) ;
-                               return(true) ;
-                               break ;
-                       case MarkerViewHandleStartItem:
-                               markerview_item_start_handle_op(item, event) ;
-                               return(true) ;
-                               break ;
-                       case MarkerViewHandleEndItem:
-                               markerview_item_end_handle_op(item, event) ;
-                               return(true) ;
-                               break ;
-                       case MarkerViewItem:
-                               start_markerview_grab(item, event) ;
-                               break ;
-                       case ImageFrameItem:
-                               start_imageframe_grab(item, event) ;
-                               break ;
-#endif
-
                        case MarkerBarItem:
 
                                break;
@@ -1328,6 +1293,11 @@ Editor::button_press_handler_2 (ArdourCanvas::Item* item, GdkEvent* event, ItemT
 bool
 Editor::button_press_handler (ArdourCanvas::Item* item, GdkEvent* event, ItemType item_type)
 {
+       if (event->type == GDK_2BUTTON_PRESS) {
+               _drags->mark_double_click ();
+               return false;
+       }
+
        if (event->type != GDK_BUTTON_PRESS) {
                return false;
        }
@@ -1343,7 +1313,7 @@ Editor::button_press_handler (ArdourCanvas::Item* item, GdkEvent* event, ItemTyp
                pointer_window = canvas_window->get_pointer (x, y, mask);
 
                if (pointer_window == _track_canvas->get_window()) {
-                       _track_canvas_viewport->window_to_canvas (x, y, wx, wy);
+                       _track_canvas->window_to_canvas (x, y, wx, wy);
                }
        }
 
@@ -1406,7 +1376,7 @@ Editor::button_press_handler (ArdourCanvas::Item* item, GdkEvent* event, ItemTyp
 
        //not rolling, range mode click + join_play_range :  locate the PH here
        if ( !_drags->active () && !_session->transport_rolling() && ( effective_mouse_mode() == MouseRange ) && Config->get_always_play_range() ) {
-               framepos_t where = canvas_event_frame (event, 0, 0);
+               framepos_t where = canvas_event_frame (event);
                snap_to(where);
                _session->request_locate (where, false);
        }
@@ -1455,7 +1425,7 @@ Editor::button_release_dispatch (GdkEventButton* ev)
 bool
 Editor::button_release_handler (ArdourCanvas::Item* item, GdkEvent* event, ItemType item_type)
 {
-       framepos_t where = canvas_event_frame (event, 0, 0);
+       framepos_t where = canvas_event_frame (event);
        AutomationTimeAxisView* atv = 0;
 
         if (pre_press_cursor) {
@@ -1482,7 +1452,7 @@ Editor::button_release_handler (ArdourCanvas::Item* item, GdkEvent* event, ItemT
                were_dragging = true;
        }
 
-    update_region_layering_order_editor ();
+       update_region_layering_order_editor ();
 
        /* edit events get handled here */
 
@@ -1510,14 +1480,6 @@ Editor::button_release_handler (ArdourCanvas::Item* item, GdkEvent* event, ItemT
                        edit_control_point (item);
                        break;
 
-               case NoteItem:
-               {
-                       NoteBase* e = reinterpret_cast<NoteBase*> (item->get_data ("notebase"));
-                       assert (e);
-                       edit_notes (e->region_view().selection ());
-                       break;
-               }
-
                default:
                        break;
                }
@@ -1601,21 +1563,6 @@ Editor::button_release_handler (ArdourCanvas::Item* item, GdkEvent* event, ItemT
                                popup_control_point_context_menu (item, event);
                                break;
 
-#ifdef WITH_CMT
-                       case ImageFrameItem:
-                               popup_imageframe_edit_menu(1, event->button.time, item, true) ;
-                               break ;
-                       case ImageFrameTimeAxisItem:
-                               popup_imageframe_edit_menu(1, event->button.time, item, false) ;
-                               break ;
-                       case MarkerViewItem:
-                               popup_marker_time_axis_edit_menu(1, event->button.time, item, true) ;
-                               break ;
-                       case MarkerTimeAxisItem:
-                               popup_marker_time_axis_edit_menu(1, event->button.time, item, false) ;
-                               break ;
-#endif
-
                        default:
                                break;
                        }
@@ -1860,7 +1807,7 @@ Editor::enter_handler (ArdourCanvas::Item* item, GdkEvent* event, ItemType item_
                if (mouse_mode == MouseGain) {
                        ArdourCanvas::Line *line = dynamic_cast<ArdourCanvas::Line *> (item);
                        if (line) {
-                               line->set_outline_color (ARDOUR_UI::config()->canvasvar_EnteredGainLine.get());
+                               line->set_outline_color (ARDOUR_UI::config()->get_canvasvar_EnteredGainLine());
                        }
                        if (is_drawable()) {
                                set_canvas_cursor (_cursors->fader);
@@ -1872,7 +1819,7 @@ Editor::enter_handler (ArdourCanvas::Item* item, GdkEvent* event, ItemType item_
                if (mouse_mode == MouseGain || mouse_mode == MouseObject) {
                        ArdourCanvas::Line *line = dynamic_cast<ArdourCanvas::Line *> (item);
                        if (line) {
-                               line->set_outline_color (ARDOUR_UI::config()->canvasvar_EnteredAutomationLine.get());
+                               line->set_outline_color (ARDOUR_UI::config()->get_canvasvar_EnteredAutomationLine());
                        }
                        if (is_drawable()) {
                                set_canvas_cursor (_cursors->fader);
@@ -1895,19 +1842,11 @@ Editor::enter_handler (ArdourCanvas::Item* item, GdkEvent* event, ItemType item_
                 break;
 
        case StartSelectionTrimItem:
-#ifdef WITH_CMT
-       case ImageFrameHandleStartItem:
-       case MarkerViewHandleStartItem:
-#endif
                if (is_drawable()) {
                        set_canvas_cursor (_cursors->left_side_trim);
                }
                break;
        case EndSelectionTrimItem:
-#ifdef WITH_CMT
-       case ImageFrameHandleEndItem:
-       case MarkerViewHandleEndItem:
-#endif
                if (is_drawable()) {
                        set_canvas_cursor (_cursors->right_side_trim);
                }
@@ -1980,7 +1919,7 @@ Editor::enter_handler (ArdourCanvas::Item* item, GdkEvent* event, ItemType item_
                        break;
                }
                entered_marker = marker;
-               marker->set_color_rgba (ARDOUR_UI::config()->canvasvar_EnteredMarker.get());
+               marker->set_color_rgba (ARDOUR_UI::config()->get_canvasvar_EnteredMarker());
                // fall through
        case MeterMarkerItem:
        case TempoMarkerItem:
@@ -2082,13 +2021,6 @@ Editor::leave_handler (ArdourCanvas::Item* item, GdkEvent*, ItemType item_type)
        case EndSelectionTrimItem:
        case PlayheadCursorItem:
 
-#ifdef WITH_CMT
-       case ImageFrameHandleStartItem:
-       case ImageFrameHandleEndItem:
-       case MarkerViewHandleStartItem:
-       case MarkerViewHandleEndItem:
-#endif
-
                _over_region_trim_target = false;
 
                if (is_drawable()) {
@@ -2172,7 +2104,7 @@ Editor::leave_handler (ArdourCanvas::Item* item, GdkEvent*, ItemType item_type)
        case FeatureLineItem:
                {
                        ArdourCanvas::Line *line = dynamic_cast<ArdourCanvas::Line *> (item);
-                       line->set_outline_color (ARDOUR_UI::config()->canvasvar_ZeroLine.get());
+                       line->set_outline_color (ARDOUR_UI::config()->get_canvasvar_ZeroLine());
                }
                break;
 
@@ -2376,7 +2308,6 @@ Editor::edit_control_point (ArdourCanvas::Item* item)
        }
 
        ControlPointDialog d (p);
-       d.set_position (Gtk::WIN_POS_MOUSE);
        ensure_float (d);
 
        if (d.run () != RESPONSE_ACCEPT) {
@@ -2387,19 +2318,33 @@ Editor::edit_control_point (ArdourCanvas::Item* item)
 }
 
 void
-Editor::edit_notes (MidiRegionView::Selection const & s)
+Editor::edit_notes (TimeAxisViewItem& tavi)
 {
+       MidiRegionView* mrv = dynamic_cast<MidiRegionView*>(&tavi);
+
+       if (!mrv) {
+               return;
+       }
+
+       MidiRegionView::Selection const & s = mrv->selection();
+
        if (s.empty ()) {
                return;
        }
        
-       EditNoteDialog d (&(*s.begin())->region_view(), s);
-       d.set_position (Gtk::WIN_POS_MOUSE);
-       ensure_float (d);
+       EditNoteDialog* d = new EditNoteDialog (&(*s.begin())->region_view(), s);
+        d->show_all ();
+       ensure_float (*d);
 
-       d.run ();
+        d->signal_response().connect (sigc::bind (sigc::mem_fun (*this, &Editor::note_edit_done), d));
 }
 
+void
+Editor::note_edit_done (int r, EditNoteDialog* d)
+{
+        d->done (r);
+        delete d;
+}
 
 void
 Editor::visible_order_range (int* low, int* high) const
@@ -2677,8 +2622,7 @@ Editor::add_region_drag (ArdourCanvas::Item* item, GdkEvent*, RegionView* region
        if (Config->get_edit_mode() == Splice) {
                _drags->add (new RegionSpliceDrag (this, item, region_view, selection->regions.by_layer()));
        } else {
-               RegionSelection s = get_equivalent_regions (selection->regions, ARDOUR::Properties::select.property_id);
-               _drags->add (new RegionMoveDrag (this, item, region_view, s.by_layer(), false, false));
+               _drags->add (new RegionMoveDrag (this, item, region_view, selection->regions.by_layer(), false, false));
        }
 }
 
@@ -2693,8 +2637,7 @@ Editor::add_region_copy_drag (ArdourCanvas::Item* item, GdkEvent*, RegionView* r
 
        _region_motion_group->raise_to_top ();
 
-       RegionSelection s = get_equivalent_regions (selection->regions, ARDOUR::Properties::select.property_id);
-       _drags->add (new RegionMoveDrag (this, item, region_view, s.by_layer(), false, true));
+       _drags->add (new RegionMoveDrag (this, item, region_view, selection->regions.by_layer(), false, true));
 }
 
 void
@@ -2710,8 +2653,7 @@ Editor::add_region_brush_drag (ArdourCanvas::Item* item, GdkEvent*, RegionView*
                return;
        }
 
-       RegionSelection s = get_equivalent_regions (selection->regions, ARDOUR::Properties::select.property_id);
-       _drags->add (new RegionMoveDrag (this, item, region_view, s.by_layer(), true, false));
+       _drags->add (new RegionMoveDrag (this, item, region_view, selection->regions.by_layer(), true, false));
 
        begin_reversible_command (Operations::drag_region_brush);
 }
@@ -2942,5 +2884,5 @@ Editor::get_pointer_position (double& x, double& y) const
 {
        int px, py;
        _track_canvas->get_pointer (px, py);
-       _track_canvas_viewport->window_to_canvas (px, py, x, y);
+       _track_canvas->window_to_canvas (px, py, x, y);
 }