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::marker_menu_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)));
}
}
+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 ()
{
double x2 = frame_to_pixel (tpl->end());
guint track_canvas_width,track_canvas_height;
- track_canvas.get_size(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;
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, full_canvas_height);
+ (*x)->add_line (cursor_group, 0, canvas_height);
(*x)->show_line ();
}