apply/merge/redo carl & colin's patches for making range markers from the region...
authorPaul Davis <paul@linuxaudiosystems.com>
Fri, 5 Dec 2008 10:31:26 +0000 (10:31 +0000)
committerPaul Davis <paul@linuxaudiosystems.com>
Fri, 5 Dec 2008 10:31:26 +0000 (10:31 +0000)
git-svn-id: svn://localhost/ardour2/branches/2.0-ongoing@4291 d708f5d6-7413-0410-9779-e7cbd77b26cf

gtk2_ardour/ardour.menus.in
gtk2_ardour/editor.cc
gtk2_ardour/editor.h
gtk2_ardour/editor_actions.cc
gtk2_ardour/editor_ops.cc

index 542ba5d388cc9c1aebb35a559ea3231c390dd3d4..3f00dbcb2f15865db36dba20e2585ed0e0357c2b 100644 (file)
              <menuitem action='duplicate-region'/>
              <menuitem action='multi-duplicate-region'/>
              <menuitem action='region-fill-track'/>
+             <separator/>
+             <menuitem action='loop-region'/>
+             <menuitem action='set-punch-from-region'/>
+             <menuitem action='add-range-marker-from-region'/>
+             <menuitem action='add-range-markers-from-region'/>
        </menu>
 
         <menu action='TrackMenu'>
index fb58fc4a39abd9652dd566e03e182e68e8ef3a8e..eee60e033b4b8000167774164fc3c00e3464041b 100644 (file)
@@ -1962,7 +1962,12 @@ Editor::add_region_context_items (AudioStreamView* sv, boost::shared_ptr<Region>
 
        /* range related stuff */
 
-       items.push_back (MenuElem (_("Add Range Markers"), mem_fun (*this, &Editor::add_location_from_audio_region)));
+       items.push_back (MenuElem (_("Add Single Range"), mem_fun (*this, &Editor::add_location_from_audio_region)));
+       items.push_back (MenuElem (_("Add Range Markers"), mem_fun (*this, &Editor::add_locations_from_audio_region)));
+       if (selection->regions.size() < 2) {
+               items.back().set_sensitive (false);
+       }
+
        items.push_back (MenuElem (_("Set Range Selection"), mem_fun (*this, &Editor::set_selection_from_audio_region)));
        items.push_back (SeparatorElem());
                         
index a7a275ff489926d6519ebab156e83331aaad39c3..983f39d17004102b2ebaacf13f95399fe9b91dea 100644 (file)
@@ -1261,6 +1261,7 @@ class Editor : public PublicEditor
 
        void add_location_mark (nframes64_t where);
        void add_location_from_audio_region ();
+       void add_locations_from_audio_region ();
        void add_location_from_selection ();
        void set_loop_from_selection (bool play);
        void set_punch_from_selection ();
index 0312422e33a2626494d9afe25ab83ae162c153f7..0776b91373cd2a3cfb3497173bbc65d44eb40f78 100644 (file)
@@ -379,6 +379,7 @@ Editor::register_actions ()
        ActionManager::region_selection_sensitive_actions.push_back (act);
        act = ActionManager::register_action (editor_actions, "loop-region", _("Loop Region"), bind (mem_fun(*this, &Editor::set_loop_from_region), true));
        ActionManager::session_sensitive_actions.push_back (act);
+       ActionManager::region_selection_sensitive_actions.push_back (act);
        act = ActionManager::register_action (editor_actions, "set-punch-from-edit-range", _("Set Punch From Edit Range"), mem_fun(*this, &Editor::set_punch_from_edit_range));
        ActionManager::session_sensitive_actions.push_back (act);
        act = ActionManager::register_action (editor_actions, "set-punch-from-region", _("Set Punch From Region"), mem_fun(*this, &Editor::set_punch_from_region));
@@ -389,6 +390,12 @@ Editor::register_actions ()
        act = ActionManager::register_action (editor_actions, "toggle-opaque-region", _("Toggle Opaque"), mem_fun(*this, &Editor::toggle_region_opaque));
        ActionManager::session_sensitive_actions.push_back (act);
        ActionManager::region_selection_sensitive_actions.push_back (act);
+       act = ActionManager::register_action (editor_actions, "add-range-marker-from-region", _("Add 1 Range Marker"), mem_fun(*this, &Editor::add_location_from_audio_region));
+       ActionManager::session_sensitive_actions.push_back (act);
+       ActionManager::region_selection_sensitive_actions.push_back (act);
+       act = ActionManager::register_action (editor_actions, "add-range-markers-from-region", _("Add Range Marker(s)"), mem_fun(*this, &Editor::add_locations_from_audio_region));
+       ActionManager::session_sensitive_actions.push_back (act);
+       ActionManager::region_selection_sensitive_actions.push_back (act);
        
        act = ActionManager::register_action (editor_actions, "set-fade-in-length", _("Set Fade In Length"), bind (mem_fun(*this, &Editor::set_fade_length), true));
        ActionManager::session_sensitive_actions.push_back (act);
index 6b867500ae26418dfc3238a521e2ef4291a15a97..bc934ead1d3cc029649f5b2aadb52651b58ac943 100644 (file)
@@ -1991,7 +1991,7 @@ Editor::add_location_from_playhead_cursor ()
 }
 
 void
-Editor::add_location_from_audio_region ()
+Editor::add_locations_from_audio_region ()
 {
        RegionSelection rs; 
 
@@ -2001,15 +2001,61 @@ Editor::add_location_from_audio_region ()
                return;
        }
 
-       RegionView* rv = *(rs.begin());
-       boost::shared_ptr<Region> region = rv->region();
+       session->begin_reversible_command (rs.size () > 1 ? _("add markers") : _("add marker"));
+       XMLNode &before = session->locations()->get_state();
        
-       Location *location = new Location (region->position(), region->last_frame(), region->name(), Location::IsRangeMarker);
+       cerr << "Add locations\n";
+
+       for (RegionSelection::iterator i = rs.begin (); i != rs.end (); ++i) {
+               
+               boost::shared_ptr<Region> region = (*i)->region ();
+       
+               Location *location = new Location (region->position(), region->last_frame(), region->name(), Location::IsRangeMarker);
+               
+               session->locations()->add (location, true);
+       }
+
+       XMLNode &after = session->locations()->get_state();
+       session->add_command (new MementoCommand<Locations>(*(session->locations()), &before, &after));
+       session->commit_reversible_command ();
+}
+
+void
+Editor::add_location_from_audio_region ()
+{
+       RegionSelection rs; 
+
+       get_regions_for_action (rs);
+
+       if (rs.empty()) {
+               return;
+       }
+
        session->begin_reversible_command (_("add marker"));
-        XMLNode &before = session->locations()->get_state();
+       XMLNode &before = session->locations()->get_state();
+
+       string markername;
+
+       if (rs.size() > 1) {            // more than one region selected
+               session->locations()->next_available_name(markername, "regions");
+       } else {
+               RegionView* rv = *(rs.begin());
+               boost::shared_ptr<Region> region = rv->region();
+               markername = region->name();
+       }
+               
+       if (!choose_new_marker_name(markername)) {
+               return;
+       }
+
+       cerr << "Add location\n";
+
+       // single range spanning all selected 
+       Location *location = new Location (rs.start(), rs.end_frame(), markername, Location::IsRangeMarker);
        session->locations()->add (location, true);
-        XMLNode &after = session->locations()->get_state();
-       session->add_command(new MementoCommand<Locations>(*(session->locations()), &before, &after));
+
+       XMLNode &after = session->locations()->get_state();
+       session->add_command (new MementoCommand<Locations>(*(session->locations()), &before, &after));
        session->commit_reversible_command ();
 }