add new per-session MIDI-region-copy-is-fork: if set, all MIDI region copies will...
authorPaul Davis <paul@linuxaudiosystems.com>
Thu, 13 Oct 2011 17:57:33 +0000 (17:57 +0000)
committerPaul Davis <paul@linuxaudiosystems.com>
Thu, 13 Oct 2011 17:57:33 +0000 (17:57 +0000)
git-svn-id: svn://localhost/ardour2/branches/3.0@10207 d708f5d6-7413-0410-9779-e7cbd77b26cf

gtk2_ardour/session_option_editor.cc
libs/ardour/ardour/midi_region.h
libs/ardour/ardour/session_configuration_vars.h
libs/ardour/midi_region.cc
libs/ardour/region_factory.cc

index bd5f359297ce26c416bad9579dd3de27699e1888..73f81e64fa81676e137850ea91a3cfac5909e07b 100644 (file)
@@ -260,6 +260,15 @@ SessionOptionEditor::SessionOptionEditor (Session* s)
 
        add_option (_("Misc"), lm);
 
+       add_option (_("Misc"), new OptionEditorHeading (_("MIDI Options")));
+
+        add_option (_("Misc"), new BoolOption (
+                           "midi-copy-is-fork",
+                           _("MIDI region copies are independent"),
+                           sigc::mem_fun (*_session_config, &SessionConfiguration::get_midi_copy_is_fork),
+                           sigc::mem_fun (*_session_config, &SessionConfiguration::set_midi_copy_is_fork)
+                           ));
+
        add_option (_("Misc"), new OptionEditorHeading (_("MIDI Note Overlaps")));
 
        ComboOption<InsertMergePolicy>* li = new ComboOption<InsertMergePolicy> (
index dc3f199b5bd03b0d6eb23aafcf827b29f1a5a3d8..50352cc7601cce19c108475441d2c6062df869cd 100644 (file)
@@ -63,7 +63,7 @@ class MidiRegion : public Region
 
        ~MidiRegion();
 
-       boost::shared_ptr<MidiRegion> clone ();
+       boost::shared_ptr<MidiRegion> clone () const;
 
        boost::shared_ptr<MidiSource> midi_source (uint32_t n=0) const;
 
index acefc9250638cf2390a0910c517bc2a9b2b86ad9..6a9d4a81e647bcb64ecf652a4ea9265f9a7b7f40 100644 (file)
@@ -62,3 +62,4 @@ CONFIG_VARIABLE (InsertMergePolicy, insert_merge_policy, "insert-merge-policy",
 CONFIG_VARIABLE (framecnt_t, timecode_offset, "timecode-offset", 0)
 CONFIG_VARIABLE (bool, timecode_offset_negative, "timecode-offset-negative", true)
 CONFIG_VARIABLE (bool, glue_new_markers_to_bars_and_beats, "glue-new-markers-to-bars-and-beats", false)
+CONFIG_VARIABLE (bool, midi_copy_is_fork, "midi-copy-is-fork", false)
index ba926211a3fa2f5512cbd80c201443558bee4aa2..f67617da621aba0570a402909dcce7245c99e4d3 100644 (file)
@@ -118,7 +118,7 @@ MidiRegion::~MidiRegion ()
 /** Create a new MidiRegion that has its own version of some/all of the Source used by another.
  */
 boost::shared_ptr<MidiRegion>
-MidiRegion::clone ()
+MidiRegion::clone () const
 {
        BeatsFramesConverter bfc (_session.tempo_map(), _position);
        Evoral::MusicalTime const bbegin = bfc.from (_start);
index 3ca33cac0119905a2c755b52fabfbc55039c2a69..fb195dba4cd70f6ffd44f12ef41d9ce8b851d161 100644 (file)
@@ -58,7 +58,11 @@ RegionFactory::create (boost::shared_ptr<const Region> region, bool announce)
 
        } else if ((mr = boost::dynamic_pointer_cast<const MidiRegion>(region)) != 0) {
 
-               ret = boost::shared_ptr<Region> (new MidiRegion (mr, 0));
+               if (mr->session().config.get_midi_copy_is_fork()) {
+                       ret = mr->clone ();
+               } else {
+                       ret = boost::shared_ptr<Region> (new MidiRegion (mr, 0));
+               }
 
        } else {
                fatal << _("programming error: RegionFactory::create() called with unknown Region type")