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 {
} 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,
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) {
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;
i = tmp;
}
-
+
+ update_punch_range_view (false);
+ update_loop_range_view (false);
}
void
}
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); }
}
void
-Editor::mouse_add_new_marker (nframes_t where, bool is_cd)
+Editor::mouse_add_new_marker (nframes64_t where, bool is_cd, bool is_xrun)
{
- string markername;
+ string markername, markerprefix;
int flags = (is_cd ? Location::IsCDMarker|Location::IsMark : Location::IsMark);
-
+
+ if (is_xrun) {
+ markerprefix = "xrun";
+ flags = Location::IsMark;
+ } else {
+ markerprefix = "mark";
+ }
+
if (session) {
- session->locations()->next_available_name(markername,"mark");
+ 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();
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)));
items.push_back (MenuElem (_("Set Range from Range Selection"), mem_fun(*this, &Editor::marker_menu_set_from_selection)));
}
+ items.push_back (SeparatorElem());
+ items.push_back (MenuElem (_("Export Range"), mem_fun(*this, &Editor::export_range)));
items.push_back (SeparatorElem());
- if (! loop_or_punch) {
+ 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)));
items.push_back (MenuElem (_("Remove Range"), mem_fun(*this, &Editor::marker_menu_remove)));
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
}
}
+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 ()
{
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
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
Editor::marker_selection_changed ()
{
+ if (session && session->deletion_in_progress()) {
+ return;
+ }
+
for (LocationMarkerMap::iterator i = location_markers.begin(); i != location_markers.end(); ++i) {
LocationMarkers* lam = i->second;
}
for (MarkerSelection::iterator x = selection->markers.begin(); x != selection->markers.end(); ++x) {
- (*x)->add_line (cursor_group, canvas_height);
+ (*x)->add_line (cursor_group, 0, canvas_height);
(*x)->show_line ();
}