mirror of
https://github.com/Ardour/ardour.git
synced 2025-12-30 18:37:40 +01:00
rationalize all region selection for editor operations
git-svn-id: svn://localhost/ardour2/branches/2.0-ongoing@3013 d708f5d6-7413-0410-9779-e7cbd77b26cf
This commit is contained in:
parent
8f77a84552
commit
c2ac101a10
5 changed files with 331 additions and 234 deletions
|
|
@ -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;
|
||||
|
||||
nframes64_t where = get_preferred_edit_position();
|
||||
tmp_regions = get_regions_at (where, selection->tracks);
|
||||
return tmp_regions;
|
||||
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;
|
||||
}
|
||||
|
||||
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
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
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 tmp_regions;
|
||||
|
||||
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 ();
|
||||
|
|
|
|||
|
|
@ -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<Region> 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<Region> 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<Region> 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<Region> 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> 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<boost::shared_ptr<AudioRegion> >& n
|
|||
void
|
||||
Editor::split_multichannel_region ()
|
||||
{
|
||||
if (selection->regions.empty()) {
|
||||
RegionSelection rs;
|
||||
|
||||
get_regions_for_action (rs);
|
||||
|
||||
if (rs.empty()) {
|
||||
return;
|
||||
}
|
||||
|
||||
vector<boost::shared_ptr<AudioRegion> > v;
|
||||
|
||||
for (list<RegionView*>::iterator x = selection->regions.begin(); x != selection->regions.end(); ++x) {
|
||||
for (list<RegionView*>::iterator x = rs.begin(); x != rs.end(); ++x) {
|
||||
|
||||
AudioRegionView* arv = dynamic_cast<AudioRegionView*>(*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;
|
||||
|
||||
if (!session || selection->regions.empty()) {
|
||||
get_regions_for_action (rs);
|
||||
|
||||
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> 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;
|
||||
|
||||
for (RegionSelection::iterator x = selection->regions.begin(); x != selection->regions.end(); ++x) {
|
||||
get_regions_for_action (rs);
|
||||
rs.sort_by_position_and_track ();
|
||||
|
||||
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<AudioPlaylist> pl = boost::dynamic_pointer_cast<AudioPlaylist>((*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<AudioRegionView*>(*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<AudioRegionView*>(*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<AudioRegionView*>(*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<AudioRegionView*>(*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;
|
||||
RegionSelection rs;
|
||||
|
||||
get_regions_for_action (rs);
|
||||
|
||||
snap_to (pos);
|
||||
|
||||
if (selection->regions.empty()) {
|
||||
/* XXX get selection from region list */
|
||||
} else {
|
||||
sel = selection->regions;
|
||||
}
|
||||
|
||||
if (sel.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) {
|
||||
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<AudioRegionView*>(*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<AudioRegionView*>(*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<AudioRegionView*>(*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<AudioRegionView*>(*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<AudioRegionView*>(*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<AudioRegionView*>(*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<AudioRegionView*> (*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<AudioRegionView*> (*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<AudioRegionView*> (*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<AudioRegionView*> (*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<AudioRegionView*> (*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<AudioRegionView*> (*x);
|
||||
|
||||
if (!tmp) {
|
||||
|
|
@ -4658,20 +4792,17 @@ Editor::set_playhead_cursor ()
|
|||
void
|
||||
Editor::split ()
|
||||
{
|
||||
ensure_entered_region_selected ();
|
||||
RegionSelection rs;
|
||||
|
||||
get_regions_for_action (rs);
|
||||
|
||||
nframes64_t where = get_preferred_edit_position();
|
||||
|
||||
if (!selection->regions.empty()) {
|
||||
|
||||
split_regions_at (where, selection->regions);
|
||||
|
||||
} 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;
|
||||
|
||||
if (selection->regions.empty()) {
|
||||
info << _("cannot set loop: no region selected") << endmsg;
|
||||
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();
|
||||
}
|
||||
|
|
@ -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;
|
||||
|
||||
if (selection->regions.empty()) {
|
||||
info << _("cannot set punch: no region selected") << endmsg;
|
||||
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();
|
||||
}
|
||||
|
|
@ -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;
|
||||
|
||||
if (selection->regions.empty()) {
|
||||
get_regions_for_action (rs);
|
||||
|
||||
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;
|
||||
|
||||
if (selection->regions.empty()) {
|
||||
get_regions_for_action (rs);
|
||||
|
||||
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);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -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<Gtk::Paned*> (&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);
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue