start-range and finish-range should graphically show the range being created. also...
[ardour.git] / gtk2_ardour / editor_keys.cc
index a31711a4d07e439df0edb60a9f76fad45e1792b3..2900e28c2a48a5fc1235aebc4a1a45f0b4ed86d2 100644 (file)
 #include <cmath>
 #include <string>
 
+#include <gtkmm/treeview.h>
+
 #include "pbd/error.h"
 
 #include "ardour/session.h"
-#include "ardour/region.h"
-#include <gtkmm/treeview.h>
 
 #include "ardour_ui.h"
 #include "editor.h"
-#include "time_axis_view.h"
 #include "region_view.h"
 #include "selection.h"
+#include "time_axis_view.h"
 
 #include "i18n.h"
 
 using namespace ARDOUR;
 using namespace PBD;
-using namespace sigc;
+using namespace Editing;
 
 void
 Editor::keyboard_selection_finish (bool add)
 {
-       if (session && have_pending_keyboard_selection) {
+       if (_session) {
+
+               framepos_t start = selection->time.start();
+               framepos_t end;
+               
+               if ((_edit_point == EditAtPlayhead) && _session->transport_rolling()) {
+                       end = _session->audible_frame();
+               } else {
+                       end = get_preferred_edit_position();
+               }
+
+               //snap the selection start/end
+               snap_to(start);
+               
+               //if no tracks are selected and we're working from the keyboard, enable all tracks (_something_ has to be selected for any range selection)
+               if ( (_edit_point == EditAtPlayhead) && selection->tracks.empty() )
+                       select_all_tracks();
+
+               selection->set (start, end);
+
+               //if session is playing a range, cancel that
+//             if (_session->get_play_range())
+//                     _session->request_cancel_play_range();
+
+       }
+}
+
+void
+Editor::keyboard_selection_begin ()
+{
+       if (_session) {
 
-               nframes64_t end;
+               framepos_t start;
+               framepos_t end = selection->time.end_frame();  //0 if no current selection
+
+               if ((_edit_point == EditAtPlayhead) && _session->transport_rolling()) {
+                       start = _session->audible_frame();
+               } else {
+                       start = get_preferred_edit_position();
+               }
+               
+               //snap the selection start/end
+               snap_to(start);
+               
+               //if there's not already a sensible selection endpoint, go "forever"
+               if ( start > end ) {
+                       end = max_framepos;
+               }
+               
+               //if no tracks are selected and we're working from the keyboard, enable all tracks (_something_ has to be selected for any range selection)
+               if ( selection->tracks.empty() )
+                       select_all_tracks();
+                                       
+               selection->set (start, end);
+
+               //if session is playing a range, cancel that
+               if (_session->get_play_range())
+                       _session->request_transport_speed ( 1.0 );
+
+               //if join playhead, locate to the newly selected start
+//             if ( !_session->transport_rolling() && Config->get_join_play_range() )
+//                     _session->request_cancel_play_range();
+       }
+}
+
+/*
+void
+Editor::keyboard_selection_finish (bool add)
+{
+       if (_session && have_pending_keyboard_selection) {
+
+               framepos_t end;
                bool ignored;
 
-               if (session->transport_rolling()) {
-                       end = session->audible_frame();
+               if (_session->transport_rolling()) {
+                       end = _session->audible_frame();
                } else {
                        if (!mouse_frame (end, ignored)) {
                                return;
@@ -58,7 +127,7 @@ Editor::keyboard_selection_finish (bool add)
                if (add) {
                        selection->add (pending_keyboard_selection_start, end);
                } else {
-                       selection->set (0, pending_keyboard_selection_start, end);
+                       selection->set (pending_keyboard_selection_start, end);
                }
 
                have_pending_keyboard_selection = false;
@@ -68,13 +137,13 @@ Editor::keyboard_selection_finish (bool add)
 void
 Editor::keyboard_selection_begin ()
 {
-       if (session) {
-               if (session->transport_rolling()) {
-                       pending_keyboard_selection_start = session->audible_frame();
+       if (_session) {
+               if (_session->transport_rolling()) {
+                       pending_keyboard_selection_start = _session->audible_frame();
                        have_pending_keyboard_selection = true;
                } else {
                        bool ignored;
-                       nframes64_t where; // XXX fix me
+                       framepos_t where; // XXX fix me
 
                        if (mouse_frame (where, ignored)) {
                                pending_keyboard_selection_start = where;
@@ -83,25 +152,10 @@ Editor::keyboard_selection_begin ()
 
                }
        }
-}
+}*/
 
 void
 Editor::keyboard_paste ()
 {
-       ensure_entered_track_selected (true);
        paste (1);
 }
-
-void
-Editor::keyboard_insert_region_list_selection ()
-{
-       insert_region_list_selection (1);
-}
-
-int
-Editor::get_prefix (float& /*val*/, bool& was_floating)
-{
-       was_floating = false;
-       return 1;
-}
-