From c2ac101a10a2f87b1d01f3906ed7ef76214a7fa6 Mon Sep 17 00:00:00 2001 From: Paul Davis Date: Tue, 5 Feb 2008 21:09:22 +0000 Subject: rationalize all region selection for editor operations git-svn-id: svn://localhost/ardour2/branches/2.0-ongoing@3013 d708f5d6-7413-0410-9779-e7cbd77b26cf --- gtk2_ardour/editor.cc | 72 ++++--- gtk2_ardour/editor.h | 19 +- gtk2_ardour/editor_ops.cc | 447 +++++++++++++++++++++++++--------------- gtk2_ardour/editor_selection.cc | 23 --- gtk2_ardour/mixer_ui.cc | 4 - 5 files changed, 331 insertions(+), 234 deletions(-) diff --git a/gtk2_ardour/editor.cc b/gtk2_ardour/editor.cc index f332effad8..210e585d7e 100644 --- a/gtk2_ardour/editor.cc +++ b/gtk2_ardour/editor.cc @@ -3080,12 +3080,12 @@ Editor::duplicate_dialog (bool with_dialog) } } + RegionSelection rs; + get_regions_for_action (rs); if (mouse_mode != MouseRange) { - ensure_entered_region_selected (true); - - if (selection->regions.empty()) { + if (rs.empty()) { return; } } @@ -3136,7 +3136,7 @@ Editor::duplicate_dialog (bool with_dialog) if (mouse_mode == MouseRange) { duplicate_selection (times); } else { - duplicate_some_regions (selection->regions, times); + duplicate_some_regions (rs, times); } } @@ -4268,10 +4268,9 @@ Editor::set_punch_range (nframes_t start, nframes_t end, string cmd) commit_reversible_command (); } -RegionSelection -Editor::get_regions_at (nframes64_t where, const TrackSelection& ts) const +void +Editor::get_regions_at (RegionSelection& rs, nframes64_t where, const TrackSelection& ts) const { - RegionSelection rs; const TrackSelection* tracks; if (ts.empty()) { @@ -4305,15 +4304,11 @@ Editor::get_regions_at (nframes64_t where, const TrackSelection& ts) const } } } - - return rs; } - -RegionSelection -Editor::get_regions_after (nframes64_t where, const TrackSelection& ts) const +void +Editor::get_regions_after (RegionSelection& rs, nframes64_t where, const TrackSelection& ts) const { - RegionSelection rs; const TrackSelection* tracks; if (ts.empty()) { @@ -4347,20 +4342,51 @@ Editor::get_regions_after (nframes64_t where, const TrackSelection& ts) const } } } - - return rs; } -RegionSelection& -Editor::get_regions_for_action () +void +Editor::get_regions_for_action (RegionSelection& rs, bool allow_entered) { - if (!selection->regions.empty()) { - return selection->regions; - } + bool use_regions_at = true; + + if (selection->regions.empty()) { + + if (selection->tracks.empty()) { + + /* no regions or tracks selected, but entered regionview is valid + and we're in object mode - just use entered regionview + */ + + if (entered_regionview && (mouse_mode == Editing::MouseObject)) { + rs.add (entered_regionview); + return; + } + } + } else { + use_regions_at = false; + } - nframes64_t where = get_preferred_edit_position(); - tmp_regions = get_regions_at (where, selection->tracks); - return tmp_regions; + rs = selection->regions; + + /* consider adding the entered regionview */ + + if (allow_entered && entered_regionview && (mouse_mode == Editing::MouseObject)) { + if (!selection->selected (entered_regionview)) { + rs.add (entered_regionview); + } + } + + if (use_regions_at) { + + /* nothing selected, so get all regions at the edit point across + all selected tracks + */ + + if (!selection->tracks.empty()) { + nframes64_t where = get_preferred_edit_position(); + get_regions_at (rs, where, selection->tracks); + } + } } void diff --git a/gtk2_ardour/editor.h b/gtk2_ardour/editor.h index 48b9cef25d..128b9b244e 100644 --- a/gtk2_ardour/editor.h +++ b/gtk2_ardour/editor.h @@ -2009,18 +2009,7 @@ public: TimeAxisView* entered_track; RegionView* entered_regionview; - class ExclusiveRegionSelection { - public: - ExclusiveRegionSelection (Editor&, RegionView*); - ~ExclusiveRegionSelection (); - - private: - Editor& editor; - RegionView* regionview; - bool remove; - }; - void ensure_entered_region_selected (bool op_acts_on_objects = false); void ensure_entered_track_selected (bool op_acts_on_objects = false); bool clear_entered_track; gint left_track_canvas (GdkEventCrossing*); @@ -2065,12 +2054,10 @@ public: bool get_edit_op_range (nframes64_t& start, nframes64_t& end) const; - RegionSelection get_regions_at (nframes64_t where, const TrackSelection& ts) const; - RegionSelection get_regions_after (nframes64_t where, const TrackSelection& ts) const; - - RegionSelection tmp_regions; + void get_regions_at (RegionSelection&, nframes64_t where, const TrackSelection& ts) const; + void get_regions_after (RegionSelection&, nframes64_t where, const TrackSelection& ts) const; - RegionSelection& get_regions_for_action (); + void get_regions_for_action (RegionSelection&, bool allowed_entered_regionview = true); sigc::connection fast_screen_update_connection; gint start_updating (); diff --git a/gtk2_ardour/editor_ops.cc b/gtk2_ardour/editor_ops.cc index 74611e0346..9dbe211f8c 100644 --- a/gtk2_ardour/editor_ops.cc +++ b/gtk2_ardour/editor_ops.cc @@ -107,6 +107,9 @@ Editor::split_region () void Editor::split_region_at (nframes_t where) { + RegionSelection rs; + + get_regions_for_action (rs); split_regions_at (where, selection->regions); } @@ -361,14 +364,17 @@ Editor::nudge_forward (bool next, bool force_playhead) { nframes_t distance; nframes_t next_distance; + RegionSelection rs; + + get_regions_for_action (rs); if (!session) return; - if (!force_playhead && !selection->regions.empty()) { + if (!force_playhead && !rs.empty()) { begin_reversible_command (_("nudge regions forward")); - for (RegionSelection::iterator i = selection->regions.begin(); i != selection->regions.end(); ++i) { + for (RegionSelection::iterator i = rs.begin(); i != rs.end(); ++i) { boost::shared_ptr r ((*i)->region()); distance = get_nudge_distance (r->position(), next_distance); @@ -434,14 +440,17 @@ Editor::nudge_backward (bool next, bool force_playhead) { nframes_t distance; nframes_t next_distance; + RegionSelection rs; + + get_regions_for_action (rs); if (!session) return; - if (!force_playhead && !selection->regions.empty()) { + if (!force_playhead && !rs.empty()) { begin_reversible_command (_("nudge regions backward")); - for (RegionSelection::iterator i = selection->regions.begin(); i != selection->regions.end(); ++i) { + for (RegionSelection::iterator i = rs.begin(); i != rs.end(); ++i) { boost::shared_ptr r ((*i)->region()); distance = get_nudge_distance (r->position(), next_distance); @@ -517,16 +526,19 @@ void Editor::nudge_forward_capture_offset () { nframes_t distance; + RegionSelection rs; + + get_regions_for_action (rs); if (!session) return; - if (!selection->regions.empty()) { + if (!rs.empty()) { begin_reversible_command (_("nudge forward")); distance = session->worst_output_latency(); - for (RegionSelection::iterator i = selection->regions.begin(); i != selection->regions.end(); ++i) { + for (RegionSelection::iterator i = rs.begin(); i != rs.end(); ++i) { boost::shared_ptr r ((*i)->region()); XMLNode &before = r->playlist()->get_state(); @@ -544,16 +556,19 @@ void Editor::nudge_backward_capture_offset () { nframes_t distance; + RegionSelection rs; + + get_regions_for_action (rs); if (!session) return; - if (!selection->regions.empty()) { + if (!rs.empty()) { begin_reversible_command (_("nudge forward")); distance = session->worst_output_latency(); - for (RegionSelection::iterator i = selection->regions.begin(); i != selection->regions.end(); ++i) { + for (RegionSelection::iterator i = rs.begin(); i != rs.end(); ++i) { boost::shared_ptr r ((*i)->region()); XMLNode &before = r->playlist()->get_state(); @@ -928,10 +943,14 @@ void Editor::cursor_to_selection_start (Cursor *cursor) { nframes_t pos = 0; + RegionSelection rs; + + get_regions_for_action (rs); + switch (mouse_mode) { case MouseObject: - if (!selection->regions.empty()) { - pos = selection->regions.start(); + if (!rs.empty()) { + pos = rs.start(); } break; @@ -956,11 +975,14 @@ void Editor::cursor_to_selection_end (Cursor *cursor) { nframes_t pos = 0; + RegionSelection rs; + + get_regions_for_action (rs); switch (mouse_mode) { case MouseObject: - if (!selection->regions.empty()) { - pos = selection->regions.end_frame(); + if (!rs.empty()) { + pos = rs.end_frame(); } break; @@ -1141,10 +1163,14 @@ Editor::selected_marker_to_selection_start () return; } + RegionSelection rs; + + get_regions_for_action (rs); + switch (mouse_mode) { case MouseObject: - if (!selection->regions.empty()) { - pos = selection->regions.start(); + if (!rs.empty()) { + pos = rs.start(); } break; @@ -1176,10 +1202,14 @@ Editor::selected_marker_to_selection_end () return; } + RegionSelection rs; + + get_regions_for_action (rs); + switch (mouse_mode) { case MouseObject: - if (!selection->regions.empty()) { - pos = selection->regions.end_frame(); + if (!rs.empty()) { + pos = rs.end_frame(); } break; @@ -1661,14 +1691,15 @@ Editor::temporal_zoom_region () nframes64_t start = max_frames; nframes64_t end = 0; + RegionSelection rs; - ensure_entered_region_selected (true); + get_regions_for_action (rs); - if (selection->regions.empty()) { + if (rs.empty()) { return; } - for (RegionSelection::iterator i = selection->regions.begin(); i != selection->regions.end(); ++i) { + for (RegionSelection::iterator i = rs.begin(); i != rs.end(); ++i) { if ((*i)->region()->position() < start) { start = (*i)->region()->position(); } @@ -1858,11 +1889,15 @@ Editor::add_location_from_playhead_cursor () void Editor::add_location_from_audio_region () { - if (selection->regions.empty()) { + RegionSelection rs; + + get_regions_for_action (rs); + + if (rs.empty()) { return; } - RegionView* rv = *(selection->regions.begin()); + RegionView* rv = *(rs.begin()); boost::shared_ptr region = rv->region(); Location *location = new Location (region->position(), region->last_frame(), region->name(), Location::IsRangeMarker); @@ -2264,8 +2299,12 @@ Editor::play_selection () void Editor::loop_selected_region () { - if (!selection->regions.empty()) { - RegionView *rv = *(selection->regions.begin()); + RegionSelection rs; + + get_regions_for_action (rs); + + if (!rs.empty()) { + RegionView *rv = *(rs.begin()); Location* tll; if ((tll = transport_loop_location()) != 0) { @@ -2346,7 +2385,11 @@ Editor::edit_region () void Editor::rename_region() { - if (selection->regions.empty()) { + RegionSelection rs; + + get_regions_for_action (rs); + + if (rs.empty()) { return; } @@ -2371,7 +2414,7 @@ Editor::rename_region() d.set_size_request (300, -1); d.set_position (Gtk::WIN_POS_MOUSE); - entry.set_text (selection->regions.front()->region()->name()); + entry.set_text (rs.front()->region()->name()); entry.select_region (0, -1); entry.signal_activate().connect (bind (mem_fun (d, &Dialog::response), RESPONSE_OK)); @@ -2388,7 +2431,7 @@ Editor::rename_region() std::string str = entry.get_text(); strip_whitespace_edges (str); if (!str.empty()) { - selection->regions.front()->region()->set_name (str); + rs.front()->region()->set_name (str); redisplay_regions (); } } @@ -2428,14 +2471,15 @@ Editor::play_selected_region () { nframes64_t start = max_frames; nframes64_t end = 0; + RegionSelection rs; - ExclusiveRegionSelection esr (*this, entered_regionview); - - if (selection->regions.empty()) { + get_regions_for_action (rs); + + if (rs.empty()) { return; } - for (RegionSelection::iterator i = selection->regions.begin(); i != selection->regions.end(); ++i) { + for (RegionSelection::iterator i = rs.begin(); i != rs.end(); ++i) { if ((*i)->region()->position() < start) { start = (*i)->region()->position(); } @@ -2566,13 +2610,17 @@ Editor::create_region_from_selection (vector >& n void Editor::split_multichannel_region () { - if (selection->regions.empty()) { + RegionSelection rs; + + get_regions_for_action (rs); + + if (rs.empty()) { return; } vector > v; - for (list::iterator x = selection->regions.begin(); x != selection->regions.end(); ++x) { + for (list::iterator x = rs.begin(); x != rs.end(); ++x) { AudioRegionView* arv = dynamic_cast(*x); @@ -2614,7 +2662,11 @@ Editor::separate_regions_between (const TimeSelection& ts) /* use tracks with selected regions */ - for (RegionSelection::iterator i = selection->regions.begin(); i != selection->regions.end(); ++i) { + RegionSelection rs; + + get_regions_for_action (rs); + + for (RegionSelection::iterator i = rs.begin(); i != rs.end(); ++i) { TimeAxisView* tv = &(*i)->get_time_axis_view(); if (find (tmptracks.begin(), tmptracks.end(), tv) == tmptracks.end()) { @@ -2726,10 +2778,6 @@ Editor::separate_region_from_selection () TimeSelection ts; ts.push_back (ar); - /* force track selection */ - - ensure_entered_region_selected (); - separate_regions_between (ts); } } @@ -2753,8 +2801,6 @@ Editor::separate_regions_using_location (Location& loc) void Editor::crop_region_to_selection () { - ensure_entered_region_selected (true); - if (!selection->time.empty()) { crop_region_to (selection->time.start(), selection->time.end_frame()); @@ -2852,8 +2898,11 @@ void Editor::region_fill_track () { nframes_t end; + RegionSelection rs; + + get_regions_for_action (rs); - if (!session || selection->regions.empty()) { + if (!session || rs.empty()) { return; } @@ -2861,7 +2910,7 @@ Editor::region_fill_track () begin_reversible_command (_("region fill")); - for (RegionSelection::iterator i = selection->regions.begin(); i != selection->regions.end(); ++i) { + for (RegionSelection::iterator i = rs.begin(); i != rs.end(); ++i) { boost::shared_ptr region ((*i)->region()); @@ -2943,8 +2992,9 @@ void Editor::set_region_sync_from_edit_point () { nframes64_t where = get_preferred_edit_position (); - ensure_entered_region_selected (true); - set_sync_point (where, selection->regions); + RegionSelection rs; + get_regions_for_action (rs); + set_sync_point (where, rs); } void @@ -2993,11 +3043,16 @@ Editor::remove_region_sync () void Editor::naturalize () { - if (selection->regions.empty()) { + RegionSelection rs; + + get_regions_for_action (rs); + + if (rs.empty()) { return; } + begin_reversible_command (_("naturalize")); - for (RegionSelection::iterator i = selection->regions.begin(); i != selection->regions.end(); ++i) { + for (RegionSelection::iterator i = rs.begin(); i != rs.end(); ++i) { XMLNode &before = (*i)->region()->get_state(); (*i)->region()->move_to_natural_position (this); XMLNode &after = (*i)->region()->get_state(); @@ -3009,16 +3064,17 @@ Editor::naturalize () void Editor::align (RegionPoint what) { - ensure_entered_region_selected (); + RegionSelection rs; + get_regions_for_action (rs); nframes64_t where = get_preferred_edit_position(); - if (!selection->regions.empty()) { - align_selection (what, where, selection->regions); + if (!rs.empty()) { + align_selection (what, where, rs); } else { RegionSelection rs; - rs = get_regions_at (where, selection->tracks); + get_regions_at (rs, where, selection->tracks); align_selection (what, where, rs); } } @@ -3027,15 +3083,13 @@ void Editor::align_relative (RegionPoint what) { nframes64_t where = get_preferred_edit_position(); + RegionSelection rs; - if (!selection->regions.empty()) { - align_selection_relative (what, where, selection->regions); - } else { + get_regions_for_action (rs); - RegionSelection rs; - rs = get_regions_at (where, selection->tracks); + if (!rs.empty()) { align_selection_relative (what, where, rs); - } + } } struct RegionSortByTime { @@ -3205,9 +3259,9 @@ Editor::trim_region_to_punch () void Editor::trim_region_to_location (const Location& loc, const char* str) { - ExclusiveRegionSelection ers (*this, entered_regionview); + RegionSelection rs; - RegionSelection& rs (get_regions_for_action ()); + get_regions_for_action (rs); begin_reversible_command (str); @@ -3256,9 +3310,10 @@ Editor::trim_region_to_location (const Location& loc, const char* str) void Editor::trim_region_to_edit_point () { - ExclusiveRegionSelection ers (*this, entered_regionview); + RegionSelection rs; + + get_regions_for_action (rs); - RegionSelection& rs (get_regions_for_action ()); nframes64_t where = get_preferred_edit_position(); begin_reversible_command (_("trim region start to edit point")); @@ -3300,9 +3355,10 @@ Editor::trim_region_to_edit_point () void Editor::trim_region_from_edit_point () { - ExclusiveRegionSelection ers (*this, entered_regionview); + RegionSelection rs; + + get_regions_for_action (rs); - RegionSelection& rs (get_regions_for_action ()); nframes64_t where = get_preferred_edit_position(); begin_reversible_command (_("trim region end to edit point")); @@ -3513,13 +3569,17 @@ Editor::cut_copy (CutCopyOp op) return; } + RegionSelection rs; + + get_regions_for_action (rs); + switch (current_mouse_mode()) { case MouseObject: - if (!selection->regions.empty() || !selection->points.empty()) { + if (!rs.empty() || !selection->points.empty()) { begin_reversible_command (opname + _(" objects")); - if (!selection->regions.empty()) { + if (!rs.empty()) { cut_copy_regions (op); if (op == Cut) { @@ -3615,9 +3675,12 @@ Editor::cut_copy_regions (CutCopyOp op) /* get ordering correct before we cut/copy */ - selection->regions.sort_by_position_and_track (); + RegionSelection rs; + + get_regions_for_action (rs); + rs.sort_by_position_and_track (); - for (RegionSelection::iterator x = selection->regions.begin(); x != selection->regions.end(); ++x) { + for (RegionSelection::iterator x = rs.begin(); x != rs.end(); ++x) { first_position = min ((*x)->region()->position(), first_position); @@ -3652,7 +3715,7 @@ Editor::cut_copy_regions (CutCopyOp op) } } - for (RegionSelection::iterator x = selection->regions.begin(); x != selection->regions.end(); ) { + for (RegionSelection::iterator x = rs.begin(); x != rs.end(); ) { boost::shared_ptr pl = boost::dynamic_pointer_cast((*x)->region()->playlist()); @@ -4055,11 +4118,15 @@ Editor::remove_last_capture () void Editor::normalize_region () { + RegionSelection rs; + + get_regions_for_action (rs); + if (!session) { return; } - if (selection->regions.empty()) { + if (rs.empty()) { return; } @@ -4068,7 +4135,7 @@ Editor::normalize_region () track_canvas.get_window()->set_cursor (*wait_cursor); gdk_flush (); - for (RegionSelection::iterator r = selection->regions.begin(); r != selection->regions.end(); ++r) { + for (RegionSelection::iterator r = rs.begin(); r != rs.end(); ++r) { AudioRegionView* const arv = dynamic_cast(*r); if (!arv) continue; @@ -4089,15 +4156,17 @@ Editor::denormalize_region () return; } - ExclusiveRegionSelection (*this, entered_regionview); + RegionSelection rs; - if (selection->regions.empty()) { + get_regions_for_action (rs); + + if (rs.empty()) { return; } begin_reversible_command ("denormalize"); - for (RegionSelection::iterator r = selection->regions.begin(); r != selection->regions.end(); ++r) { + for (RegionSelection::iterator r = rs.begin(); r != rs.end(); ++r) { AudioRegionView* const arv = dynamic_cast(*r); if (!arv) continue; @@ -4116,15 +4185,17 @@ Editor::adjust_region_scale_amplitude (bool up) return; } - ExclusiveRegionSelection esr (*this, entered_regionview); + RegionSelection rs; - if (selection->regions.empty()) { + get_regions_for_action (rs); + + if (rs.empty()) { return; } begin_reversible_command ("denormalize"); - for (RegionSelection::iterator r = selection->regions.begin(); r != selection->regions.end(); ++r) { + for (RegionSelection::iterator r = rs.begin(); r != rs.end(); ++r) { AudioRegionView* const arv = dynamic_cast(*r); if (!arv) continue; @@ -4174,7 +4245,11 @@ Editor::reverse_region () void Editor::apply_filter (AudioFilter& filter, string command) { - if (selection->regions.empty()) { + RegionSelection rs; + + get_regions_for_action (rs); + + if (rs.empty()) { return; } @@ -4183,7 +4258,7 @@ Editor::apply_filter (AudioFilter& filter, string command) track_canvas.get_window()->set_cursor (*wait_cursor); gdk_flush (); - for (RegionSelection::iterator r = selection->regions.begin(); r != selection->regions.end(); ) { + for (RegionSelection::iterator r = rs.begin(); r != rs.end(); ) { AudioRegionView* const arv = dynamic_cast(*r); if (!arv) continue; @@ -4209,7 +4284,7 @@ Editor::apply_filter (AudioFilter& filter, string command) } commit_reversible_command (); - selection->regions.clear (); + rs.clear (); out: track_canvas.get_window()->set_cursor (*current_canvas_cursor); @@ -4257,19 +4332,17 @@ void Editor::brush (nframes_t pos) { RegionSelection sel; - snap_to (pos); + RegionSelection rs; - if (selection->regions.empty()) { - /* XXX get selection from region list */ - } else { - sel = selection->regions; - } + get_regions_for_action (rs); - if (sel.empty()) { + snap_to (pos); + + if (rs.empty()) { return; } - for (RegionSelection::iterator i = selection->regions.begin(); i != selection->regions.end(); ++i) { + for (RegionSelection::iterator i = rs.begin(); i != rs.end(); ++i) { mouse_brush_insert_region ((*i), pos); } } @@ -4277,13 +4350,17 @@ Editor::brush (nframes_t pos) void Editor::reset_region_gain_envelopes () { - if (!session || selection->regions.empty()) { + RegionSelection rs; + + get_regions_for_action (rs); + + if (!session || rs.empty()) { return; } session->begin_reversible_command (_("reset region gain")); - for (RegionSelection::iterator i = selection->regions.begin(); i != selection->regions.end(); ++i) { + for (RegionSelection::iterator i = rs.begin(); i != rs.end(); ++i) { AudioRegionView* const arv = dynamic_cast(*i); if (arv) { AutomationList& alist (arv->audio_region()->envelope()); @@ -4300,7 +4377,11 @@ Editor::reset_region_gain_envelopes () void Editor::toggle_gain_envelope_visibility () { - for (RegionSelection::iterator i = selection->regions.begin(); i != selection->regions.end(); ++i) { + RegionSelection rs; + + get_regions_for_action (rs); + + for (RegionSelection::iterator i = rs.begin(); i != rs.end(); ++i) { AudioRegionView* const arv = dynamic_cast(*i); if (arv) { arv->set_envelope_visible (!arv->envelope_visible()); @@ -4311,7 +4392,11 @@ Editor::toggle_gain_envelope_visibility () void Editor::toggle_gain_envelope_active () { - for (RegionSelection::iterator i = selection->regions.begin(); i != selection->regions.end(); ++i) { + RegionSelection rs; + + get_regions_for_action (rs); + + for (RegionSelection::iterator i = rs.begin(); i != rs.end(); ++i) { AudioRegionView* const arv = dynamic_cast(*i); if (arv) { arv->audio_region()->set_envelope_active (!arv->audio_region()->envelope_active()); @@ -4322,7 +4407,11 @@ Editor::toggle_gain_envelope_active () void Editor::toggle_region_lock () { - for (RegionSelection::iterator i = selection->regions.begin(); i != selection->regions.end(); ++i) { + RegionSelection rs; + + get_regions_for_action (rs); + + for (RegionSelection::iterator i = rs.begin(); i != rs.end(); ++i) { AudioRegionView* const arv = dynamic_cast(*i); if (arv) { arv->audio_region()->set_locked (!arv->audio_region()->locked()); @@ -4333,7 +4422,11 @@ Editor::toggle_region_lock () void Editor::set_region_lock_style (Region::PositionLockStyle ps) { - for (RegionSelection::iterator i = selection->regions.begin(); i != selection->regions.end(); ++i) { + RegionSelection rs; + + get_regions_for_action (rs); + + for (RegionSelection::iterator i = rs.begin(); i != rs.end(); ++i) { (*i)->region()->set_position_lock_style (ps); } } @@ -4342,7 +4435,11 @@ Editor::set_region_lock_style (Region::PositionLockStyle ps) void Editor::toggle_region_mute () { - for (RegionSelection::iterator i = selection->regions.begin(); i != selection->regions.end(); ++i) { + RegionSelection rs; + + get_regions_for_action (rs); + + for (RegionSelection::iterator i = rs.begin(); i != rs.end(); ++i) { AudioRegionView* const arv = dynamic_cast(*i); if (arv) { arv->audio_region()->set_muted (!arv->audio_region()->muted()); @@ -4353,7 +4450,11 @@ Editor::toggle_region_mute () void Editor::toggle_region_opaque () { - for (RegionSelection::iterator i = selection->regions.begin(); i != selection->regions.end(); ++i) { + RegionSelection rs; + + get_regions_for_action (rs); + + for (RegionSelection::iterator i = rs.begin(); i != rs.end(); ++i) { AudioRegionView* const arv = dynamic_cast(*i); if (arv) { arv->audio_region()->set_opaque (!arv->audio_region()->opaque()); @@ -4364,14 +4465,16 @@ Editor::toggle_region_opaque () void Editor::set_fade_length (bool in) { - ExclusiveRegionSelection esr (*this, entered_regionview); + RegionSelection rs; + + get_regions_for_action (rs); /* we need a region to measure the offset from the start */ RegionView* rv; - if (!selection->regions.empty()) { - rv = selection->regions.front(); + if (!rs.empty()) { + rv = rs.front(); } else if (entered_regionview) { rv = entered_regionview; } else { @@ -4405,8 +4508,6 @@ Editor::set_fade_length (bool in) begin_reversible_command (cmd); - RegionSelection& rs (get_regions_for_action()); - for (RegionSelection::iterator x = rs.begin(); x != rs.end(); ++x) { AudioRegionView* tmp = dynamic_cast (*x); @@ -4442,9 +4543,11 @@ Editor::set_fade_length (bool in) void Editor::toggle_fade_active (bool in) { - ensure_entered_region_selected (true); + RegionSelection rs; - if (selection->regions.empty()) { + get_regions_for_action (rs); + + if (rs.empty()) { return; } @@ -4454,7 +4557,7 @@ Editor::toggle_fade_active (bool in) begin_reversible_command (cmd); - for (RegionSelection::iterator x = selection->regions.begin(); x != selection->regions.end(); ++x) { + for (RegionSelection::iterator x = rs.begin(); x != rs.end(); ++x) { AudioRegionView* tmp = dynamic_cast (*x); if (!tmp) { @@ -4490,10 +4593,17 @@ Editor::toggle_fade_active (bool in) void Editor::set_fade_in_shape (AudioRegion::FadeShape shape) { + RegionSelection rs; + + get_regions_for_action (rs); + + if (rs.empty()) { + return; + } begin_reversible_command (_("set fade in shape")); - for (RegionSelection::iterator x = selection->regions.begin(); x != selection->regions.end(); ++x) { + for (RegionSelection::iterator x = rs.begin(); x != rs.end(); ++x) { AudioRegionView* tmp = dynamic_cast (*x); if (!tmp) { @@ -4516,9 +4626,17 @@ Editor::set_fade_in_shape (AudioRegion::FadeShape shape) void Editor::set_fade_out_shape (AudioRegion::FadeShape shape) { + RegionSelection rs; + + get_regions_for_action (rs); + + if (rs.empty()) { + return; + } + begin_reversible_command (_("set fade out shape")); - for (RegionSelection::iterator x = selection->regions.begin(); x != selection->regions.end(); ++x) { + for (RegionSelection::iterator x = rs.begin(); x != rs.end(); ++x) { AudioRegionView* tmp = dynamic_cast (*x); if (!tmp) { @@ -4540,9 +4658,17 @@ Editor::set_fade_out_shape (AudioRegion::FadeShape shape) void Editor::set_fade_in_active (bool yn) { + RegionSelection rs; + + get_regions_for_action (rs); + + if (rs.empty()) { + return; + } + begin_reversible_command (_("set fade in active")); - for (RegionSelection::iterator x = selection->regions.begin(); x != selection->regions.end(); ++x) { + for (RegionSelection::iterator x = rs.begin(); x != rs.end(); ++x) { AudioRegionView* tmp = dynamic_cast (*x); if (!tmp) { @@ -4566,9 +4692,17 @@ Editor::set_fade_in_active (bool yn) void Editor::set_fade_out_active (bool yn) { + RegionSelection rs; + + get_regions_for_action (rs); + + if (rs.empty()) { + return; + } + begin_reversible_command (_("set fade out active")); - for (RegionSelection::iterator x = selection->regions.begin(); x != selection->regions.end(); ++x) { + for (RegionSelection::iterator x = rs.begin(); x != rs.end(); ++x) { AudioRegionView* tmp = dynamic_cast (*x); if (!tmp) { @@ -4658,20 +4792,17 @@ Editor::set_playhead_cursor () void Editor::split () { - ensure_entered_region_selected (); + RegionSelection rs; - nframes64_t where = get_preferred_edit_position(); + get_regions_for_action (rs); - if (!selection->regions.empty()) { - - split_regions_at (where, selection->regions); + nframes64_t where = get_preferred_edit_position(); - } else { - - RegionSelection rs; - rs = get_regions_at (where, selection->tracks); - split_regions_at (where, rs); + if (rs.empty()) { + return; } + + split_regions_at (where, rs); } void @@ -4692,36 +4823,6 @@ Editor::ensure_entered_track_selected (bool op_really_wants_one_track_if_none_ar } } -void -Editor::ensure_entered_region_selected (bool op_really_wants_one_region_if_none_are_selected) -{ - if (!entered_regionview || mouse_mode != MouseObject) { - return; - } - - - /* heuristic: - - - if there is no existing selection, don't change it. the operation will thus apply to "all" - - - if there is an existing selection, but the entered regionview isn't in it, add it. this - avoids key-mouse ops on unselected regions from interfering with an existing selection, - but also means that the operation will apply to the pointed-at region. - */ - - if (!selection->regions.empty()) { - if (!selection->selected (entered_regionview)) { - selection->add (entered_regionview); - } - } else { - /* there is no selection, but this operation requires/prefers selected objects */ - - if (op_really_wants_one_region_if_none_are_selected) { - selection->set (entered_regionview, false); - } - } -} - void Editor::trim_region_front () { @@ -4737,10 +4838,10 @@ Editor::trim_region_back () void Editor::trim_region (bool front) { - ExclusiveRegionSelection ers (*this, entered_regionview); - nframes64_t where = get_preferred_edit_position(); - RegionSelection& rs = get_regions_for_action (); + RegionSelection rs; + + get_regions_for_action (rs); if (rs.empty()) { return; @@ -4864,14 +4965,15 @@ Editor::set_loop_from_region (bool play) nframes64_t start = max_frames; nframes64_t end = 0; - ExclusiveRegionSelection esr (*this, entered_regionview); + RegionSelection rs; + + get_regions_for_action (rs); - if (selection->regions.empty()) { - info << _("cannot set loop: no region selected") << endmsg; + if (rs.empty()) { return; } - for (RegionSelection::iterator i = selection->regions.begin(); i != selection->regions.end(); ++i) { + for (RegionSelection::iterator i = rs.begin(); i != rs.end(); ++i) { if ((*i)->region()->position() < start) { start = (*i)->region()->position(); } @@ -4924,14 +5026,15 @@ Editor::set_punch_from_region () nframes64_t start = max_frames; nframes64_t end = 0; - ExclusiveRegionSelection esr (*this, entered_regionview); + RegionSelection rs; + + get_regions_for_action (rs); - if (selection->regions.empty()) { - info << _("cannot set punch: no region selected") << endmsg; + if (rs.empty()) { return; } - for (RegionSelection::iterator i = selection->regions.begin(); i != selection->regions.end(); ++i) { + for (RegionSelection::iterator i = rs.begin(); i != rs.end(); ++i) { if ((*i)->region()->position() < start) { start = (*i)->region()->position(); } @@ -4946,13 +5049,15 @@ Editor::set_punch_from_region () void Editor::pitch_shift_regions () { - ensure_entered_region_selected (true); + RegionSelection rs; + + get_regions_for_action (rs); - if (selection->regions.empty()) { + if (rs.empty()) { return; } - pitch_shift (selection->regions, 1.2); + pitch_shift (rs, 1.2); } void @@ -4962,13 +5067,15 @@ Editor::use_region_as_bar () return; } - ExclusiveRegionSelection esr (*this, entered_regionview); + RegionSelection rs; + + get_regions_for_action (rs); - if (selection->regions.empty()) { + if (rs.empty()) { return; } - RegionView* rv = selection->regions.front(); + RegionView* rv = rs.front(); define_one_bar (rv->region()->position(), rv->region()->last_frame() + 1); } @@ -5072,15 +5179,17 @@ Editor::split_region_at_transients () return; } - ExclusiveRegionSelection esr (*this, entered_regionview); + RegionSelection rs; + + get_regions_for_action (rs); - if (selection->regions.empty()) { + if (rs.empty()) { return; } session->begin_reversible_command (_("split regions")); - for (RegionSelection::iterator i = selection->regions.begin(); i != selection->regions.end(); ) { + for (RegionSelection::iterator i = rs.begin(); i != rs.end(); ) { RegionSelection::iterator tmp; @@ -5219,13 +5328,15 @@ Editor::tab_to_transient (bool forward) } else { - ExclusiveRegionSelection esr (*this, entered_regionview); + RegionSelection rs; + + get_regions_for_action (rs); - if (selection->regions.empty()) { + if (rs.empty()) { return; } - for (RegionSelection::iterator r = selection->regions.begin(); r != selection->regions.end(); ++r) { + for (RegionSelection::iterator r = rs.begin(); r != rs.end(); ++r) { (*r)->region()->get_transients (positions); } } diff --git a/gtk2_ardour/editor_selection.cc b/gtk2_ardour/editor_selection.cc index d68212fe32..224d282a55 100644 --- a/gtk2_ardour/editor_selection.cc +++ b/gtk2_ardour/editor_selection.cc @@ -1328,27 +1328,4 @@ Editor::deselect_all () selection->clear (); } -Editor::ExclusiveRegionSelection::ExclusiveRegionSelection (Editor& ed, RegionView* rv) - : editor (ed), - regionview (rv) -{ - - if (!rv || ed.current_mouse_mode() != Editing::MouseObject) { - return; - } - - if (ed.get_selection().regions.empty() && !ed.get_selection().selected (rv)) { - ed.get_selection().set (rv, false); - remove = true; - } else { - remove = false; - } -} - -Editor::ExclusiveRegionSelection::~ExclusiveRegionSelection () -{ - if (remove && regionview) { - editor.get_selection().remove (regionview); - } -} diff --git a/gtk2_ardour/mixer_ui.cc b/gtk2_ardour/mixer_ui.cc index 44638cdb89..be9f9f74f4 100644 --- a/gtk2_ardour/mixer_ui.cc +++ b/gtk2_ardour/mixer_ui.cc @@ -202,10 +202,6 @@ Mixer_UI::Mixer_UI () list_hpane.signal_size_allocate().connect (bind (mem_fun(*this, &Mixer_UI::pane_allocation_handler), static_cast (&list_hpane))); - - rhs_pane1.set_data ("collapse-direction", (gpointer) 0); - list_hpane.set_data ("collapse-direction", (gpointer) 1); - global_vpacker.pack_start (list_hpane, true, true); add (global_vpacker); -- cgit v1.2.3