apply/merge/redo carl & colin's patches for making range markers from the region...
[ardour.git] / gtk2_ardour / editor_ops.cc
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 ();
 }