make shift-click (extend) selection operation on track headers etc. work
git-svn-id: svn://localhost/ardour2/trunk@1233 d708f5d6-7413-0410-9779-e7cbd77b26cf
This commit is contained in:
parent
4bbfb6bffd
commit
58c34fe805
@ -121,6 +121,7 @@
|
|||||||
; (gtk_accel_path "<Actions>/Editor/EditSelectRegionOptions" "")
|
; (gtk_accel_path "<Actions>/Editor/EditSelectRegionOptions" "")
|
||||||
(gtk_accel_path "<Actions>/Editor/crop" "c")
|
(gtk_accel_path "<Actions>/Editor/crop" "c")
|
||||||
; (gtk_accel_path "<Actions>/redirectmenu/newsend" "")
|
; (gtk_accel_path "<Actions>/redirectmenu/newsend" "")
|
||||||
|
; (gtk_accel_path "<Actions>/Editor/ToggleGeneric MIDISurfaceSubMenu" "")
|
||||||
; (gtk_accel_path "<Actions>/Editor/MeterFalloff" "")
|
; (gtk_accel_path "<Actions>/Editor/MeterFalloff" "")
|
||||||
; (gtk_accel_path "<Actions>/RegionList/rlRemove" "")
|
; (gtk_accel_path "<Actions>/RegionList/rlRemove" "")
|
||||||
(gtk_accel_path "<Actions>/Transport/GotoStart" "Home")
|
(gtk_accel_path "<Actions>/Transport/GotoStart" "Home")
|
||||||
@ -276,6 +277,7 @@
|
|||||||
; (gtk_accel_path "<Actions>/Editor/Subframes80" "")
|
; (gtk_accel_path "<Actions>/Editor/Subframes80" "")
|
||||||
; (gtk_accel_path "<Actions>/options/FileHeaderFormatCAF" "")
|
; (gtk_accel_path "<Actions>/options/FileHeaderFormatCAF" "")
|
||||||
(gtk_accel_path "<Actions>/Common/ToggleLocations" "<Alt>l")
|
(gtk_accel_path "<Actions>/Common/ToggleLocations" "<Alt>l")
|
||||||
|
; (gtk_accel_path "<Actions>/Editor/ToggleGeneric MIDISurface" "")
|
||||||
(gtk_accel_path "<Actions>/Editor/editor-delete" "Delete")
|
(gtk_accel_path "<Actions>/Editor/editor-delete" "Delete")
|
||||||
; (gtk_accel_path "<Actions>/JACK/JACKLatency256" "")
|
; (gtk_accel_path "<Actions>/JACK/JACKLatency256" "")
|
||||||
(gtk_accel_path "<Actions>/Editor/select-all-between-cursors" "u")
|
(gtk_accel_path "<Actions>/Editor/select-all-between-cursors" "u")
|
||||||
@ -298,6 +300,7 @@
|
|||||||
; (gtk_accel_path "<Actions>/Snap/snap-to-region-sync" "")
|
; (gtk_accel_path "<Actions>/Snap/snap-to-region-sync" "")
|
||||||
(gtk_accel_path "<Actions>/Editor/edit-cursor-to-previous-region-sync" "apostrophe")
|
(gtk_accel_path "<Actions>/Editor/edit-cursor-to-previous-region-sync" "apostrophe")
|
||||||
; (gtk_accel_path "<Actions>/redirectmenu/clear" "")
|
; (gtk_accel_path "<Actions>/redirectmenu/clear" "")
|
||||||
|
; (gtk_accel_path "<Actions>/Editor/ToggleGeneric MIDISurfaceFeedback" "")
|
||||||
; (gtk_accel_path "<Actions>/Editor/PullupPlus4Minus1" "")
|
; (gtk_accel_path "<Actions>/Editor/PullupPlus4Minus1" "")
|
||||||
; (gtk_accel_path "<Actions>/JACK/JACKLatency512" "")
|
; (gtk_accel_path "<Actions>/JACK/JACKLatency512" "")
|
||||||
(gtk_accel_path "<Actions>/Editor/edit-cursor-to-next-region-end" "<Control>bracketright")
|
(gtk_accel_path "<Actions>/Editor/edit-cursor-to-next-region-end" "<Control>bracketright")
|
||||||
|
@ -2861,6 +2861,114 @@ Editor::commit_reversible_command ()
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
struct TrackViewByPositionSorter
|
||||||
|
{
|
||||||
|
bool operator() (const TimeAxisView* a, const TimeAxisView *b) {
|
||||||
|
return a->y_position < b->y_position;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
bool
|
||||||
|
Editor::extend_selection_to_track (TimeAxisView& view)
|
||||||
|
{
|
||||||
|
if (selection->tracks.empty()) {
|
||||||
|
|
||||||
|
if (!selection->selected (&view)) {
|
||||||
|
selection->set (&view);
|
||||||
|
return true;
|
||||||
|
} else {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/* something is already selected, so figure out which range of things to add */
|
||||||
|
|
||||||
|
TrackViewList to_be_added;
|
||||||
|
TrackViewList sorted = track_views;
|
||||||
|
TrackViewByPositionSorter cmp;
|
||||||
|
bool passed_clicked = false;
|
||||||
|
bool forwards;
|
||||||
|
|
||||||
|
sorted.sort (cmp);
|
||||||
|
|
||||||
|
if (!selection->selected (&view)) {
|
||||||
|
to_be_added.push_back (&view);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* figure out if we should go forward or backwards */
|
||||||
|
|
||||||
|
for (TrackViewList::iterator i = sorted.begin(); i != sorted.end(); ++i) {
|
||||||
|
|
||||||
|
if ((*i) == &view) {
|
||||||
|
passed_clicked = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (selection->selected (*i)) {
|
||||||
|
if (passed_clicked) {
|
||||||
|
forwards = true;
|
||||||
|
} else {
|
||||||
|
forwards = false;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
passed_clicked = false;
|
||||||
|
|
||||||
|
if (forwards) {
|
||||||
|
|
||||||
|
for (TrackViewList::iterator i = sorted.begin(); i != sorted.end(); ++i) {
|
||||||
|
|
||||||
|
if ((*i) == &view) {
|
||||||
|
passed_clicked = true;
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (passed_clicked) {
|
||||||
|
if ((*i)->hidden()) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
if (selection->selected (*i)) {
|
||||||
|
break;
|
||||||
|
} else if (!(*i)->hidden()) {
|
||||||
|
to_be_added.push_back (*i);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
} else {
|
||||||
|
|
||||||
|
for (TrackViewList::reverse_iterator r = sorted.rbegin(); r != sorted.rend(); ++r) {
|
||||||
|
|
||||||
|
if ((*r) == &view) {
|
||||||
|
passed_clicked = true;
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (passed_clicked) {
|
||||||
|
|
||||||
|
if ((*r)->hidden()) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (selection->selected (*r)) {
|
||||||
|
break;
|
||||||
|
} else if (!(*r)->hidden()) {
|
||||||
|
to_be_added.push_back (*r);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!to_be_added.empty()) {
|
||||||
|
selection->add (to_be_added);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
bool
|
bool
|
||||||
Editor::set_selected_track (TimeAxisView& view, Selection::Operation op, bool no_remove)
|
Editor::set_selected_track (TimeAxisView& view, Selection::Operation op, bool no_remove)
|
||||||
{
|
{
|
||||||
@ -2889,13 +2997,14 @@ Editor::set_selected_track (TimeAxisView& view, Selection::Operation op, bool no
|
|||||||
case Selection::Set:
|
case Selection::Set:
|
||||||
if (selection->selected (&view) && selection->tracks.size() == 1) {
|
if (selection->selected (&view) && selection->tracks.size() == 1) {
|
||||||
/* no commit necessary */
|
/* no commit necessary */
|
||||||
|
} else {
|
||||||
|
selection->set (&view);
|
||||||
|
commit = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
selection->set (&view);
|
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case Selection::Extend:
|
case Selection::Extend:
|
||||||
/* not defined yet */
|
commit = extend_selection_to_track (view);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -217,6 +217,8 @@ class Editor : public PublicEditor
|
|||||||
Selection& get_selection() const { return *selection; }
|
Selection& get_selection() const { return *selection; }
|
||||||
Selection& get_cut_buffer() const { return *cut_buffer; }
|
Selection& get_cut_buffer() const { return *cut_buffer; }
|
||||||
|
|
||||||
|
bool extend_selection_to_track (TimeAxisView&);
|
||||||
|
|
||||||
void play_selection ();
|
void play_selection ();
|
||||||
void select_all_in_track (Selection::Operation op);
|
void select_all_in_track (Selection::Operation op);
|
||||||
void select_all (Selection::Operation op);
|
void select_all (Selection::Operation op);
|
||||||
|
@ -316,6 +316,7 @@ Editor::button_selection (ArdourCanvas::Item* item, GdkEvent* event, ItemType it
|
|||||||
|
|
||||||
switch (item_type) {
|
switch (item_type) {
|
||||||
case RegionItem:
|
case RegionItem:
|
||||||
|
/* XXX make tying track/region selection optional */
|
||||||
c1 = set_selected_track_from_click (op, true);
|
c1 = set_selected_track_from_click (op, true);
|
||||||
c2 = set_selected_regionview_from_click (press, op, true);
|
c2 = set_selected_regionview_from_click (press, op, true);
|
||||||
commit = (c1 || c2);
|
commit = (c1 || c2);
|
||||||
@ -323,6 +324,7 @@ Editor::button_selection (ArdourCanvas::Item* item, GdkEvent* event, ItemType it
|
|||||||
|
|
||||||
case RegionViewNameHighlight:
|
case RegionViewNameHighlight:
|
||||||
case RegionViewName:
|
case RegionViewName:
|
||||||
|
/* XXX make tying track/region selection optional */
|
||||||
c1 = set_selected_track_from_click (op, true);
|
c1 = set_selected_track_from_click (op, true);
|
||||||
c2 = set_selected_regionview_from_click (press, op, true);
|
c2 = set_selected_regionview_from_click (press, op, true);
|
||||||
commit = (c1 || c2);
|
commit = (c1 || c2);
|
||||||
@ -331,6 +333,7 @@ Editor::button_selection (ArdourCanvas::Item* item, GdkEvent* event, ItemType it
|
|||||||
case GainAutomationControlPointItem:
|
case GainAutomationControlPointItem:
|
||||||
case PanAutomationControlPointItem:
|
case PanAutomationControlPointItem:
|
||||||
case RedirectAutomationControlPointItem:
|
case RedirectAutomationControlPointItem:
|
||||||
|
/* XXX make tying track/region selection optional */
|
||||||
c1 = set_selected_track_from_click (op, true);
|
c1 = set_selected_track_from_click (op, true);
|
||||||
c2 = set_selected_control_point_from_click (op, false);
|
c2 = set_selected_control_point_from_click (op, false);
|
||||||
commit = (c1 || c2);
|
commit = (c1 || c2);
|
||||||
|
@ -93,6 +93,7 @@ class PublicEditor : public Gtk::Window, public PBD::StatefulThingWithGoingAway
|
|||||||
virtual gulong frame_to_pixel (nframes_t frame) = 0;
|
virtual gulong frame_to_pixel (nframes_t frame) = 0;
|
||||||
virtual Selection& get_selection() const = 0;
|
virtual Selection& get_selection() const = 0;
|
||||||
virtual Selection& get_cut_buffer() const = 0;
|
virtual Selection& get_cut_buffer() const = 0;
|
||||||
|
virtual bool extend_selection_to_track (TimeAxisView&) = 0;
|
||||||
virtual void play_selection () = 0;
|
virtual void play_selection () = 0;
|
||||||
virtual void set_show_measures (bool yn) = 0;
|
virtual void set_show_measures (bool yn) = 0;
|
||||||
virtual bool show_measures () const = 0;
|
virtual bool show_measures () const = 0;
|
||||||
|
@ -1012,7 +1012,13 @@ RouteTimeAxisView::selection_click (GdkEventButton* ev)
|
|||||||
break;
|
break;
|
||||||
|
|
||||||
case Selection::Extend:
|
case Selection::Extend:
|
||||||
/* not defined yet */
|
if (tracks->size() > 1) {
|
||||||
|
/* add each one, do not "extend" */
|
||||||
|
editor.get_selection().add (*tracks);
|
||||||
|
} else {
|
||||||
|
/* extend to the single track */
|
||||||
|
editor.extend_selection_to_track (*tracks->front());
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case Selection::Add:
|
case Selection::Add:
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
#ifndef __ardour_svn_revision_h__
|
#ifndef __ardour_svn_revision_h__
|
||||||
#define __ardour_svn_revision_h__
|
#define __ardour_svn_revision_h__
|
||||||
static const char* ardour_svn_revision = "1180";
|
static const char* ardour_svn_revision = "1232";
|
||||||
#endif
|
#endif
|
||||||
|
Loading…
Reference in New Issue
Block a user