Give internal edit mode its own cursor. Deselect everything when entering internal...
authorCarl Hetherington <carl@carlh.net>
Fri, 9 Jul 2010 00:57:22 +0000 (00:57 +0000)
committerCarl Hetherington <carl@carlh.net>
Fri, 9 Jul 2010 00:57:22 +0000 (00:57 +0000)
git-svn-id: svn://localhost/ardour2/branches/3.0@7396 d708f5d6-7413-0410-9779-e7cbd77b26cf

gtk2_ardour/editor.cc
gtk2_ardour/editor.h
gtk2_ardour/editor_mouse.cc

index e11029589d3ac623b423005dec7ab0ff6ea72c39..d1260011ef34cf9a3dbae34bd400787673dbb68f 100644 (file)
@@ -215,6 +215,7 @@ Gdk::Cursor* Editor::right_side_trim_cursor = 0;
 Gdk::Cursor* Editor::fade_in_cursor = 0;
 Gdk::Cursor* Editor::fade_out_cursor = 0;
 Gdk::Cursor* Editor::grabber_cursor = 0;
+Gdk::Cursor* Editor::grabber_note_cursor = 0;
 Gdk::Cursor* Editor::grabber_edit_point_cursor = 0;
 Gdk::Cursor* Editor::zoom_cursor = 0;
 Gdk::Cursor* Editor::time_fx_cursor = 0;
@@ -1237,6 +1238,11 @@ Editor::build_cursors ()
 
        grabber_cursor = new Gdk::Cursor (HAND2);
 
+       {
+               Glib::RefPtr<Gdk::Pixbuf> grabber_note_pixbuf (::get_icon ("grabber_note"));
+               grabber_note_cursor = new Gdk::Cursor (Gdk::Display::get_default(), grabber_note_pixbuf, 5, 10);
+       }
+
        {
                Glib::RefPtr<Gdk::Pixbuf> grabber_edit_point_pixbuf (::get_icon ("grabber_edit_point"));
                grabber_edit_point_cursor = new Gdk::Cursor (Gdk::Display::get_default(), grabber_edit_point_pixbuf, 5, 17);
@@ -1505,7 +1511,10 @@ Editor::build_track_region_context_menu (nframes64_t frame)
                boost::shared_ptr<Track> tr;
                boost::shared_ptr<Playlist> pl;
 
-               if ((tr = rtv->track()) && ((pl = tr->playlist()))) {
+               /* Don't offer a region submenu if we are in internal edit mode, as we don't select regions in this
+                  mode and so offering region context is somewhat confusing.
+               */
+               if ((tr = rtv->track()) && ((pl = tr->playlist())) && !internal_editing()) {
                        Playlist::RegionList* regions = pl->regions_at ((nframes64_t) floor ( (double)frame * tr->speed()));
 
                        if (selection->regions.size() > 1) {
index 44e7289f6de4010ada37a1c68b5d9c2c9e8d6111..57d648be4c2b3c137e5e16728829205bd4c95013 100644 (file)
@@ -464,6 +464,7 @@ class Editor : public PublicEditor, public PBD::ScopedConnectionList, public ARD
        static Gdk::Cursor* fade_out_cursor;
        static Gdk::Cursor* selector_cursor;
        static Gdk::Cursor* grabber_cursor;
+       static Gdk::Cursor* grabber_note_cursor;
        static Gdk::Cursor* grabber_edit_point_cursor;
        static Gdk::Cursor* zoom_cursor;
        static Gdk::Cursor* time_fx_cursor;
index 68d92300281d80ea762ea34c693daa832191014f..378a8ecf3221662184187bd3210a6b49a063d11f 100644 (file)
@@ -177,7 +177,7 @@ Editor::which_grabber_cursor ()
                        break;
 
                case MouseObject:
-                       c = grabber_cursor;
+                       c = grabber_note_cursor;
                        break;
 
                case MouseTimeFX:
@@ -427,6 +427,10 @@ Editor::button_selection (ArdourCanvas::Item* /*item*/, GdkEvent* event, ItemTyp
           region alignment.
 
           note: not dbl-click or triple-click
+
+          Also note that there is no region selection in internal edit mode, otherwise
+          for operations operating on the selection (e.g. cut) it is not obvious whether
+          to cut notes or regions.
        */
 
        if (((mouse_mode != MouseObject) &&
@@ -435,8 +439,8 @@ Editor::button_selection (ArdourCanvas::Item* /*item*/, GdkEvent* event, ItemTyp
             (mouse_mode != MouseTimeFX || item_type != RegionItem) &&
             (mouse_mode != MouseGain) &&
             (mouse_mode != MouseRange)) ||
-
-           ((event->type != GDK_BUTTON_PRESS && event->type != GDK_BUTTON_RELEASE) || event->button.button > 3)) {
+           ((event->type != GDK_BUTTON_PRESS && event->type != GDK_BUTTON_RELEASE) || event->button.button > 3) ||
+           internal_editing()) {
 
                return;
        }
@@ -460,7 +464,7 @@ Editor::button_selection (ArdourCanvas::Item* /*item*/, GdkEvent* event, ItemTyp
 
        switch (item_type) {
        case RegionItem:
-               if (mouse_mode != MouseRange || internal_editing() || _join_object_range_state == JOIN_OBJECT_RANGE_OBJECT) {
+               if (mouse_mode != MouseRange || _join_object_range_state == JOIN_OBJECT_RANGE_OBJECT) {
                        set_selected_regionview_from_click (press, op, true);
                } else if (event->type == GDK_BUTTON_PRESS) {
                        selection->clear_tracks ();
@@ -469,14 +473,13 @@ Editor::button_selection (ArdourCanvas::Item* /*item*/, GdkEvent* event, ItemTyp
                if (_join_object_range_state == JOIN_OBJECT_RANGE_OBJECT && !selection->regions.empty()) {
                        clicked_selection = select_range_around_region (selection->regions.front());
                }
-                       
                break;
 
        case RegionViewNameHighlight:
        case RegionViewName:
         case LeftFrameHandle:
         case RightFrameHandle:
-               if (mouse_mode != MouseRange || internal_editing() || _join_object_range_state == JOIN_OBJECT_RANGE_OBJECT) {
+               if (mouse_mode != MouseRange || _join_object_range_state == JOIN_OBJECT_RANGE_OBJECT) {
                        set_selected_regionview_from_click (press, op, true);
                } else if (event->type == GDK_BUTTON_PRESS) {
                        set_selected_track_as_side_effect ();
@@ -2662,9 +2665,10 @@ Editor::set_internal_edit (bool yn)
                        }
                }
 
-               for (TrackSelection::iterator i = selection->tracks.begin(); i != selection->tracks.end(); ++i) {
-                       (*i)->hide_selection ();
-               }
+               /* deselect everything to avoid confusion when e.g. we can't now cut a previously selected
+                  region because cut means "cut note" rather than "cut region".
+               */
+               selection->clear ();
 
                start_step_editing ();
                 set_canvas_cursor ();