diff options
-rw-r--r-- | gtk2_ardour/ardour.menus.in | 1 | ||||
-rw-r--r-- | gtk2_ardour/route_time_axis.cc | 4 | ||||
-rw-r--r-- | libs/ardour/ardour/playlist.h | 2 | ||||
-rw-r--r-- | libs/ardour/playlist.cc | 11 |
4 files changed, 13 insertions, 5 deletions
diff --git a/gtk2_ardour/ardour.menus.in b/gtk2_ardour/ardour.menus.in index d59fcc8f38..e6e4d1328f 100644 --- a/gtk2_ardour/ardour.menus.in +++ b/gtk2_ardour/ardour.menus.in @@ -588,6 +588,7 @@ <menuitem action='pitch-shift-region'/> <menuitem action='transpose-region'/> <menuitem action='naturalize-region'/> + <menuitem action='combine-regions'/> <menuitem action='split-region'/> <menuitem action='split-multichannel-region'/> <menuitem action='remove-region'/> diff --git a/gtk2_ardour/route_time_axis.cc b/gtk2_ardour/route_time_axis.cc index 119f1814d3..9f6a5e69ff 100644 --- a/gtk2_ardour/route_time_axis.cc +++ b/gtk2_ardour/route_time_axis.cc @@ -2500,9 +2500,7 @@ RouteTimeAxisView::combine_regions () _view->foreach_selected_regionview (sigc::bind (sigc::ptr_fun (add_region_to_list), &selected_regions, &max_level)); - 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); - + string name = string_compose (_("%1 compound-%2 (%3)"), playlist->name(), playlist->combine_ops()+1, max_level+1); playlist->clear_changes (); playlist->join (selected_regions, name); diff --git a/libs/ardour/ardour/playlist.h b/libs/ardour/ardour/playlist.h index 72155d9981..7411468fe8 100644 --- a/libs/ardour/ardour/playlist.h +++ b/libs/ardour/ardour/playlist.h @@ -229,6 +229,7 @@ public: } framepos_t find_next_top_layer_position (framepos_t) const; + uint32_t combine_ops() const { return _combine_ops; } protected: friend class Session; @@ -295,6 +296,7 @@ public: uint64_t layer_op_counter; framecnt_t freeze_length; bool auto_partition; + uint32_t _combine_ops; /** true if relayering should be done using region's current layers and their `pending explicit relayer' * flags; otherwise false if relayering should be done using the layer-model (most recently moved etc.) diff --git a/libs/ardour/playlist.cc b/libs/ardour/playlist.cc index 9ceb11fe51..d933594d3d 100644 --- a/libs/ardour/playlist.cc +++ b/libs/ardour/playlist.cc @@ -28,10 +28,10 @@ #include <boost/lexical_cast.hpp> +#include "pbd/convert.h" #include "pbd/failed_constructor.h" #include "pbd/stateful_diff_command.h" #include "pbd/xml++.h" -#include "pbd/stacktrace.h" #include "ardour/debug.h" #include "ardour/playlist.h" @@ -357,6 +357,7 @@ Playlist::init (bool hide) layer_op_counter = 0; freeze_length = 0; _explicit_relayering = false; + _combine_ops = 0; _session.history().BeginUndoRedo.connect_same_thread (*this, boost::bind (&Playlist::begin_undo, this)); _session.history().EndUndoRedo.connect_same_thread (*this, boost::bind (&Playlist::end_undo, this)); @@ -2277,6 +2278,8 @@ Playlist::set_state (const XMLNode& node, int version) _orig_diskstream_id = prop->value (); } else if (prop->name() == X_("frozen")) { _frozen = string_is_affirmative (prop->value()); + } else if (prop->name() == X_("combine-ops")) { + _combine_ops = atoi (prop->value()); } } @@ -2369,7 +2372,7 @@ XMLNode& Playlist::state (bool full_state) { XMLNode *node = new XMLNode (X_("Playlist")); - char buf[64] = ""; + char buf[64]; node->add_property (X_("id"), id().to_s()); node->add_property (X_("name"), _name); @@ -2383,6 +2386,9 @@ Playlist::state (bool full_state) RegionLock rlock (this, false); XMLNode* nested_node = 0; + snprintf (buf, sizeof (buf), "%u", _combine_ops); + node->add_property ("combine-ops", buf); + for (RegionList::iterator i = regions.begin(); i != regions.end(); ++i) { if ((*i)->max_source_level() > 0) { @@ -3208,6 +3214,7 @@ Playlist::join (const RegionList& r, const std::string& name) /* add the new region at the right location */ add_region (compound_region, earliest_position); + _combine_ops++; thaw (); } |