initial implementation of "make range to next marker" and "export range" context...
authorPaul Davis <paul@linuxaudiosystems.com>
Tue, 17 Jun 2008 21:47:40 +0000 (21:47 +0000)
committerPaul Davis <paul@linuxaudiosystems.com>
Tue, 17 Jun 2008 21:47:40 +0000 (21:47 +0000)
git-svn-id: svn://localhost/ardour2/branches/2.0-ongoing@3470 d708f5d6-7413-0410-9779-e7cbd77b26cf

gtk2_ardour/editor.h
gtk2_ardour/editor_markers.cc

index 4b0faa005590e4152f5917776563248f533f6d80..0099bb3fc5831908993a8654a932fd81b237ee0e 100644 (file)
@@ -1454,6 +1454,8 @@ public:
        void marker_menu_set_playhead ();
        void marker_menu_set_from_playhead ();
        void marker_menu_set_from_selection ();
+       void marker_menu_range_to_next ();
+       void marker_menu_export_range ();
        void new_transport_marker_menu_set_loop ();
        void new_transport_marker_menu_set_punch ();
        void update_loop_range_view (bool visibility=false);
index b905e3a6a91fa011ebd3783d7195fb908a9e633e..d3e9548b8f9caef7d5753ab88b5c8af44c6b83e6 100644 (file)
@@ -597,6 +597,8 @@ Editor::build_marker_menu (bool start_or_end)
 
        items.push_back (SeparatorElem());
 
+       items.push_back (MenuElem (_("Create range to next marker"), mem_fun(*this, &Editor::marker_menu_range_to_next)));
+
        items.push_back (MenuElem (_("Hide"), mem_fun(*this, &Editor::marker_menu_hide)));
        if (start_or_end) return;
        items.push_back (MenuElem (_("Rename"), mem_fun(*this, &Editor::marker_menu_rename)));
@@ -636,6 +638,10 @@ Editor::build_range_marker_menu (bool loop_or_punch)
 
        items.push_back (SeparatorElem());
 
+       items.push_back (MenuElem (_("Export Range"), mem_fun(*this, &Editor::marker_menu_export_range)));
+
+       items.push_back (SeparatorElem());
+
        if (!loop_or_punch) {
                items.push_back (MenuElem (_("Hide Range"), mem_fun(*this, &Editor::marker_menu_hide)));
                items.push_back (MenuElem (_("Rename Range"), mem_fun(*this, &Editor::marker_menu_rename)));
@@ -811,6 +817,57 @@ Editor::marker_menu_set_playhead ()
        }
 }
 
+void
+Editor::marker_menu_export_range ()
+{
+       Marker* marker;
+
+       if ((marker = reinterpret_cast<Marker *> (marker_menu_item->get_data ("marker"))) == 0) {
+               fatal << _("programming error: marker canvas item has no marker object pointer!") << endmsg;
+               /*NOTREACHED*/
+       }
+
+       Location* l;
+       bool is_start;
+
+       if ((l = find_location_from_marker (marker, is_start)) != 0) {
+               if (l->is_range_marker()) {
+                       export_range (l->start(), l->end());
+               }
+       }
+}
+
+void
+Editor::marker_menu_range_to_next ()
+{
+       Marker* marker;
+       if (!session) {
+               return;
+       }
+
+       if ((marker = reinterpret_cast<Marker *> (marker_menu_item->get_data ("marker"))) == 0) {
+               fatal << _("programming error: marker canvas item has no marker object pointer!") << endmsg;
+               /*NOTREACHED*/
+       }
+
+       Location* l;
+       bool is_start;
+
+       if ((l = find_location_from_marker (marker, is_start)) == 0) {
+               return;
+       }
+               
+       nframes_t end = session->locations()->first_mark_after (marker->position());
+
+       if (end != max_frames) {
+               string range_name = l->name();
+               range_name += "-range";
+
+               Location* newrange = new Location (marker->position(), end, range_name, Location::IsRangeMarker);
+               session->locations()->add (newrange);
+       }
+}
+
 void
 Editor::marker_menu_set_from_playhead ()
 {