X-Git-Url: https://main.carlh.net/gitweb/?a=blobdiff_plain;f=gtk2_ardour%2Feditor_markers.cc;h=6517d7de85f5a35578ddd8b24839dfb67e198f0b;hb=aad62fc6608ccbb6edd9c5cb94e2721edd890bec;hp=583040d71e20458dd84957617905cda3fdc55e59;hpb=b248526fe35a846af0f62985c18e62e3e8817f9c;p=ardour.git diff --git a/gtk2_ardour/editor_markers.cc b/gtk2_ardour/editor_markers.cc index 583040d71e..6517d7de85 100644 --- a/gtk2_ardour/editor_markers.cc +++ b/gtk2_ardour/editor_markers.cc @@ -23,7 +23,6 @@ #include #include -#include #include #include @@ -79,7 +78,7 @@ Editor::add_new_location (Location *location) if (location->is_mark()) { - if (location->is_cd_marker() && ruler_shown[ruler_time_cd_marker]) { + if (location->is_cd_marker() && ruler_cd_marker_action->get_active()) { lam->start = new Marker (*this, *cd_marker_group, color, location->name(), Marker::Mark, location->start()); } else { @@ -103,7 +102,7 @@ Editor::add_new_location (Location *location) } else { // range marker - if (location->is_cd_marker() && ruler_shown[ruler_time_cd_marker]) { + if (location->is_cd_marker() && ruler_cd_marker_action->get_active()) { lam->start = new Marker (*this, *cd_marker_group, color, location->name(), Marker::Start, location->start()); lam->end = new Marker (*this, *cd_marker_group, color, @@ -212,7 +211,7 @@ void Editor::update_cd_marker_display () void Editor::ensure_cd_marker_updated (LocationMarkers * lam, Location * location) { if (location->is_cd_marker() - && (ruler_shown[ruler_time_cd_marker] && lam->start->get_parent() != cd_marker_group)) + && (ruler_cd_marker_action->get_active() && lam->start->get_parent() != cd_marker_group)) { //cerr << "reparenting non-cd marker so it can be relocated: " << location->name() << endl; if (lam->start) { @@ -222,7 +221,7 @@ void Editor::ensure_cd_marker_updated (LocationMarkers * lam, Location * locatio lam->end->reparent (*cd_marker_group); } } - else if ( (!location->is_cd_marker() || !ruler_shown[ruler_time_cd_marker]) + else if ( (!location->is_cd_marker() || !ruler_cd_marker_action->get_active()) && (lam->start->get_parent() == cd_marker_group)) { //cerr << "reparenting non-cd marker so it can be relocated: " << location->name() << endl; @@ -328,7 +327,9 @@ Editor::refresh_location_display_internal (Locations::LocationList& locations) i = tmp; } - + + update_punch_range_view (false); + update_loop_range_view (false); } void @@ -373,8 +374,8 @@ Editor::LocationMarkers::set_name (const string& str) } void -Editor::LocationMarkers::set_position (nframes_t startf, - nframes_t endf) +Editor::LocationMarkers::set_position (nframes64_t startf, + nframes64_t endf) { start->set_position (startf); if (end) { end->set_position (endf); } @@ -388,7 +389,7 @@ Editor::LocationMarkers::set_color_rgba (uint32_t rgba) } void -Editor::mouse_add_new_marker (nframes_t where, bool is_cd, bool is_xrun) +Editor::mouse_add_new_marker (nframes64_t where, bool is_cd, bool is_xrun) { string markername, markerprefix; int flags = (is_cd ? Location::IsCDMarker|Location::IsMark : Location::IsMark); @@ -402,6 +403,9 @@ Editor::mouse_add_new_marker (nframes_t where, bool is_cd, bool is_xrun) if (session) { session->locations()->next_available_name(markername, markerprefix); + if (!is_xrun && !choose_new_marker_name(markername)) { + return; + } Location *location = new Location (where, where, markername, (Location::Flags) flags); session->begin_reversible_command (_("add marker")); XMLNode &before = session->locations()->get_state(); @@ -592,6 +596,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))); @@ -631,6 +637,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))); @@ -671,7 +681,7 @@ Editor::build_new_transport_marker_menu () items.push_back (MenuElem (_("Set Loop Range"), mem_fun(*this, &Editor::new_transport_marker_menu_set_loop))); items.push_back (MenuElem (_("Set Punch Range"), mem_fun(*this, &Editor::new_transport_marker_menu_set_punch))); - new_transport_marker_menu->signal_unmap_event().connect ( mem_fun(*this, &Editor::new_transport_marker_menu_popdown)); + new_transport_marker_menu->signal_unmap().connect ( mem_fun(*this, &Editor::new_transport_marker_menu_popdown)); } void @@ -806,6 +816,57 @@ Editor::marker_menu_set_playhead () } } +void +Editor::marker_menu_export_range () +{ + Marker* marker; + + if ((marker = reinterpret_cast (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_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 () { @@ -1013,15 +1074,12 @@ Editor::marker_menu_rename () dialog.set_prompt (_("New Name:")); - WindowTitle title(Glib::get_application_name()); if (loc->is_mark()) { - title += _("Rename Mark"); + dialog.set_title (_("Rename Mark")); } else { - title += _("Rename Range"); + dialog.set_title (_("Rename Range")); } - dialog.set_title(title.get_string()); - dialog.set_name ("MarkRenameWindow"); dialog.set_size_request (250, -1); dialog.set_position (Gtk::WIN_POS_MOUSE); @@ -1050,14 +1108,12 @@ Editor::marker_menu_rename () commit_reversible_command (); } -gint -Editor::new_transport_marker_menu_popdown (GdkEventAny *ev) +void +Editor::new_transport_marker_menu_popdown () { // hide rects transport_bar_drag_rect->hide(); range_marker_drag_rect->hide(); - - return FALSE; } void @@ -1108,51 +1164,22 @@ Editor::update_punch_range_view (bool visibility) Location* tpl; if ((Config->get_punch_in() || Config->get_punch_out()) && ((tpl = transport_punch_location()) != 0)) { - - double x1 = frame_to_pixel (tpl->start()); - double x2 = frame_to_pixel (tpl->end()); - guint track_canvas_width,track_canvas_height; - track_canvas.get_size(track_canvas_width,track_canvas_height); - - transport_punch_range_rect->property_x1() = x1; - transport_punch_range_rect->property_x2() = x2; - - transport_punch_range_rect->property_x1() = (Config->get_punch_in() ? x1 : 0); - transport_punch_range_rect->property_x2() = (Config->get_punch_out() ? x2 : track_canvas_width); + track_canvas->get_size(track_canvas_width,track_canvas_height); + if (Config->get_punch_in()) { + transport_punch_range_rect->property_x1() = frame_to_pixel (tpl->start()); + transport_punch_range_rect->property_x2() = (Config->get_punch_out() ? frame_to_pixel (tpl->end()) : frame_to_pixel (JACK_MAX_FRAMES)); + } else { + transport_punch_range_rect->property_x1() = 0; + transport_punch_range_rect->property_x2() = (Config->get_punch_out() ? frame_to_pixel (tpl->end()) : track_canvas_width); + } if (visibility) { transport_punch_range_rect->show(); } - } - else if (visibility) { + } else if (visibility) { transport_punch_range_rect->hide(); } - -// if (session->get_punch_in()) { -// double x = frame_to_pixel (transport_punch_location->start()); -// gnome_canvas_item_set (transport_punchin_line, "x1", x, "x2", x, NULL); - -// if (visibility) { -// gnome_canvas_item_show (transport_punchin_line); -// } -// } -// else if (visibility) { -// gnome_canvas_item_hide (transport_punchin_line); -// } - -// if (session->get_punch_out()) { -// double x = frame_to_pixel (transport_punch_location->end()); - -// gnome_canvas_item_set (transport_punchout_line, "x1", x, "x2", x, NULL); - -// if (visibility) { -// gnome_canvas_item_show (transport_punchout_line); -// } -// } -// else if (visibility) { -// gnome_canvas_item_hide (transport_punchout_line); -// } } void @@ -1183,7 +1210,7 @@ Editor::marker_selection_changed () } for (MarkerSelection::iterator x = selection->markers.begin(); x != selection->markers.end(); ++x) { - (*x)->add_line (cursor_group, vertical_adjustment.get_value(), canvas_height); + (*x)->add_line (cursor_group, 0, canvas_height); (*x)->show_line (); }