diff options
Diffstat (limited to 'gtk2_ardour')
-rw-r--r-- | gtk2_ardour/ardour.menus.in | 2 | ||||
-rw-r--r-- | gtk2_ardour/editor.h | 3 | ||||
-rw-r--r-- | gtk2_ardour/editor_actions.cc | 2 | ||||
-rw-r--r-- | gtk2_ardour/editor_ops.cc | 12 | ||||
-rw-r--r-- | gtk2_ardour/editor_selection.cc | 3 | ||||
-rw-r--r-- | gtk2_ardour/route_time_axis.cc | 13 | ||||
-rw-r--r-- | gtk2_ardour/route_time_axis.h | 2 |
7 files changed, 26 insertions, 11 deletions
diff --git a/gtk2_ardour/ardour.menus.in b/gtk2_ardour/ardour.menus.in index 62d637058b..d59fcc8f38 100644 --- a/gtk2_ardour/ardour.menus.in +++ b/gtk2_ardour/ardour.menus.in @@ -228,7 +228,7 @@ <menuitem action='play-selected-regions'/> <menuitem action='export-region'/> <menuitem action='bounce-region'/> - <menuitem action='join-regions'/> + <menuitem action='combine-regions'/> <menuitem action='analyze-region'/> <menuitem action='toggle-region-lock'/> <menuitem action='toggle-region-lock-style'/> diff --git a/gtk2_ardour/editor.h b/gtk2_ardour/editor.h index 83d8b394c3..140235e890 100644 --- a/gtk2_ardour/editor.h +++ b/gtk2_ardour/editor.h @@ -1099,7 +1099,8 @@ class Editor : public PublicEditor, public PBD::ScopedConnectionList, public ARD void duplicate_some_regions (RegionSelection&, float times); void duplicate_selection (float times); void region_fill_selection (); - void join_regions (); + void combine_regions (); + void uncombine_regions (); void region_fill_track (); void audition_playlist_region_standalone (boost::shared_ptr<ARDOUR::Region>); diff --git a/gtk2_ardour/editor_actions.cc b/gtk2_ardour/editor_actions.cc index 0081a806aa..a45279b6bb 100644 --- a/gtk2_ardour/editor_actions.cc +++ b/gtk2_ardour/editor_actions.cc @@ -1372,7 +1372,7 @@ Editor::register_region_actions () reg_sens (_region_actions, "play-selected-regions", _("Play"), sigc::mem_fun(*this, &Editor::play_selected_region)); reg_sens (_region_actions, "bounce-region", _("Bounce"), sigc::mem_fun (*this, &Editor::bounce_region_selection)); - reg_sens (_region_actions, "join-regions", _("Join"), sigc::mem_fun (*this, &Editor::join_regions)); + reg_sens (_region_actions, "combine-regions", _("Combine"), sigc::mem_fun (*this, &Editor::combine_regions)); reg_sens (_region_actions, "analyze-region", _("Spectral Analysis..."), sigc::mem_fun (*this, &Editor::analyze_region_selection)); diff --git a/gtk2_ardour/editor_ops.cc b/gtk2_ardour/editor_ops.cc index 07e68faf3d..a6bba7d76c 100644 --- a/gtk2_ardour/editor_ops.cc +++ b/gtk2_ardour/editor_ops.cc @@ -6403,7 +6403,7 @@ Editor::toggle_region_mute () } void -Editor::join_regions () +Editor::combine_regions () { /* foreach track with selected regions, take all selected regions and join them into a new region containing the subregions (as a @@ -6413,6 +6413,10 @@ Editor::join_regions () typedef set<RouteTimeAxisView*> RTVS; RTVS tracks; + if (selection->regions.empty()) { + return; + } + for (RegionSelection::iterator i = selection->regions.begin(); i != selection->regions.end(); ++i) { RouteTimeAxisView* rtv = dynamic_cast<RouteTimeAxisView*>(&(*i)->get_time_axis_view()); @@ -6421,8 +6425,12 @@ Editor::join_regions () } } + begin_reversible_command (_("combine regions")); + for (RTVS::iterator i = tracks.begin(); i != tracks.end(); ++i) { - (*i)->join_regions (); + (*i)->combine_regions (); } + + commit_reversible_command (); } diff --git a/gtk2_ardour/editor_selection.cc b/gtk2_ardour/editor_selection.cc index 7998a4bfa6..3ec11ea410 100644 --- a/gtk2_ardour/editor_selection.cc +++ b/gtk2_ardour/editor_selection.cc @@ -957,7 +957,6 @@ Editor::sensitize_the_right_region_actions () if (!selection->time.empty()) { _region_actions->get_action("split-region")->set_sensitive (true); } - return; } else if (mouse_mode != MouseObject) { @@ -1063,9 +1062,11 @@ Editor::sensitize_the_right_region_actions () _region_actions->get_action("show-region-list-editor")->set_sensitive (false); _region_actions->get_action("show-region-properties")->set_sensitive (false); _region_actions->get_action("rename-region")->set_sensitive (false); + _region_actions->get_action("combine-regions")->set_sensitive (true); } else if (rs.size() == 1) { _region_actions->get_action("add-range-markers-from-region")->set_sensitive (false); _region_actions->get_action("close-region-gaps")->set_sensitive (false); + _region_actions->get_action("combine-regions")->set_sensitive (false); } if (!have_midi) { diff --git a/gtk2_ardour/route_time_axis.cc b/gtk2_ardour/route_time_axis.cc index 81dbefcd29..119f1814d3 100644 --- a/gtk2_ardour/route_time_axis.cc +++ b/gtk2_ardour/route_time_axis.cc @@ -2486,7 +2486,7 @@ void add_region_to_list (RegionView* rv, Playlist::RegionList* l, uint32_t* max_ } void -RouteTimeAxisView::join_regions () +RouteTimeAxisView::combine_regions () { assert (is_track()); @@ -2495,11 +2495,16 @@ RouteTimeAxisView::join_regions () } Playlist::RegionList selected_regions; + boost::shared_ptr<Playlist> playlist = track()->playlist(); uint32_t max_level = 0; _view->foreach_selected_regionview (sigc::bind (sigc::ptr_fun (add_region_to_list), &selected_regions, &max_level)); - uint32_t num_joined_regions = track()->playlist()->count_joined_regions(); - string name = string_compose (_("%1 combine-%2 (%3)"), track()->playlist()->name(), num_joined_regions+1, max_level+1); - track()->playlist()->join (selected_regions, name); + uint32_t num_joined_regions = playlist->count_joined_regions(); + string name = string_compose (_("%1 compound-%2 (%3)"), playlist->name(), num_joined_regions+1, max_level+1); + + + playlist->clear_changes (); + playlist->join (selected_regions, name); + _session->add_command (new StatefulDiffCommand (playlist)); } diff --git a/gtk2_ardour/route_time_axis.h b/gtk2_ardour/route_time_axis.h index d596de3df7..b06b56fc67 100644 --- a/gtk2_ardour/route_time_axis.h +++ b/gtk2_ardour/route_time_axis.h @@ -94,7 +94,7 @@ public: /* Editing operations */ void cut_copy_clear (Selection&, Editing::CutCopyOp); bool paste (ARDOUR::framepos_t, float times, Selection&, size_t nth); - void join_regions (); + void combine_regions (); void toggle_automation_track (const Evoral::Parameter& param); /* The editor calls these when mapping an operation across multiple tracks */ |