lam->start = new Marker (*this, *marker_group, color, location->name(), Marker::Mark, location->start());
group = marker_group;
}
-
+
lam->end = 0;
} else if (location->is_auto_loop()) {
-
+
// transport marker
lam->start = new Marker (*this, *transport_marker_group, color,
location->name(), Marker::LoopStart, location->start());
group = transport_marker_group;
} else if (location->is_auto_punch()) {
-
+
// transport marker
lam->start = new Marker (*this, *transport_marker_group, color,
location->name(), Marker::PunchIn, location->start());
lam->end = new Marker (*this, *transport_marker_group, color,
location->name(), Marker::PunchOut, location->end());
group = transport_marker_group;
-
+
} else if (location->is_session_range()) {
// session range
lam->start = new Marker (*this, *marker_group, color, _("start"), Marker::SessionStart, location->start());
lam->end = new Marker (*this, *marker_group, color, _("end"), Marker::SessionEnd, location->end());
group = marker_group;
-
+
} else {
// range marker
if (location->is_cd_marker() && ruler_cd_marker_action->get_active()) {
{
/* Get a time-ordered list of markers from the last time anything changed */
std::list<Marker*>& sorted = _sorted_marker_lists[m->get_parent()];
-
+
list<Marker*>::iterator i = find (sorted.begin(), sorted.end(), m);
list<Marker*>::iterator prev = sorted.end ();
if (prev != sorted.end()) {
/* Update just the available space between the previous marker and this one */
-
+
double const p = frame_to_pixel (m->position() - (*prev)->position());
if (m->label_on_left()) {
} else {
(*prev)->set_right_label_limit (p);
}
-
+
if ((*prev)->label_on_left ()) {
m->set_left_label_limit (p);
} else {
if (next != sorted.end()) {
/* Update just the available space between this marker and the next */
-
+
double const p = frame_to_pixel ((*next)->position() - m->position());
if ((*next)->label_on_left()) {
}
/* We sort the list of markers and then set up the space available between each one */
-
+
sorted.sort (MarkerComparator ());
list<Marker*>::iterator i = sorted.begin ();
list<Marker*>::iterator prev = sorted.end ();
list<Marker*>::iterator next = i;
++next;
-
+
while (i != sorted.end()) {
if (prev != sorted.end()) {
double const p = frame_to_pixel ((*i)->position() - (*prev)->position());
-
+
if ((*prev)->label_on_left()) {
(*i)->set_left_label_limit (p);
} else {
(*i)->set_left_label_limit (p / 2);
}
-
+
}
if (next != sorted.end()) {
if (start->type() != Marker::SessionStart) {
start->set_name (str);
}
-
+
if (end && end->type() != Marker::SessionEnd) {
end->set_name (str);
}
Editor::tempo_or_meter_marker_context_menu (GdkEventButton* ev, ArdourCanvas::Item* item)
{
marker_menu_item = item;
-
+
MeterMarker* mm;
TempoMarker* tm;
dynamic_cast_marker_object (marker_menu_item->get_data ("marker"), &mm, &tm);
} else {
return;
}
-
+
delete tempo_or_meter_marker_menu;
build_tempo_or_meter_marker_menu (can_remove);
tempo_or_meter_marker_menu->popup (1, ev->time);
if (loc == transport_loop_location() || loc == transport_punch_location() || loc->is_session_range ()) {
if (transport_marker_menu == 0) {
- build_range_marker_menu (true);
+ build_range_marker_menu (loc == transport_loop_location() || loc == transport_punch_location(), loc->is_session_range());
}
-
+
marker_menu_item = item;
transport_marker_menu->popup (1, ev->time);
} else if (loc->is_mark()) {
-
+
delete marker_menu;
build_marker_menu (loc);
#endif
marker_menu_item = item;
marker_menu->popup (1, ev->time);
-
+
} else if (loc->is_range_marker()) {
if (range_marker_menu == 0) {
- build_range_marker_menu (false);
+ build_range_marker_menu (false, false);
}
marker_menu_item = item;
range_marker_menu->popup (1, ev->time);
}
-void
-Editor::transport_marker_context_menu (GdkEventButton* ev, ArdourCanvas::Item*)
-{
- if (transport_marker_menu == 0) {
- build_range_marker_menu (true);
- }
-
- transport_marker_menu->popup (1, ev->time);
-}
-
void
Editor::build_marker_menu (Location* loc)
{
items.push_back (MenuElem (_("Create Range to Next Marker"), sigc::mem_fun(*this, &Editor::marker_menu_range_to_next)));
items.push_back (MenuElem (_("Hide"), sigc::mem_fun(*this, &Editor::marker_menu_hide)));
- items.push_back (MenuElem (_("Rename"), sigc::mem_fun(*this, &Editor::marker_menu_rename)));
+ items.push_back (MenuElem (_("Rename..."), sigc::mem_fun(*this, &Editor::marker_menu_rename)));
items.push_back (CheckMenuElem (_("Lock")));
CheckMenuItem* lock_item = static_cast<CheckMenuItem*> (&items.back());
glue_item->set_active ();
}
glue_item->signal_activate().connect (sigc::mem_fun (*this, &Editor::toggle_marker_menu_glue));
-
+
items.push_back (SeparatorElem());
items.push_back (MenuElem (_("Remove"), sigc::mem_fun(*this, &Editor::marker_menu_remove)));
}
void
-Editor::build_range_marker_menu (bool loop_or_punch_or_session)
+Editor::build_range_marker_menu (bool loop_or_punch, bool session)
{
using namespace Menu_Helpers;
+ bool const loop_or_punch_or_session = loop_or_punch | session;
+
Menu *markerMenu = new Menu;
if (loop_or_punch_or_session) {
transport_marker_menu = markerMenu;
}
items.push_back (SeparatorElem());
- items.push_back (MenuElem (_("Export Range"), sigc::mem_fun(*this, &Editor::export_range)));
+ items.push_back (MenuElem (_("Export Range..."), sigc::mem_fun(*this, &Editor::export_range)));
items.push_back (SeparatorElem());
if (!loop_or_punch_or_session) {
items.push_back (MenuElem (_("Hide Range"), sigc::mem_fun(*this, &Editor::marker_menu_hide)));
- items.push_back (MenuElem (_("Rename Range"), sigc::mem_fun(*this, &Editor::marker_menu_rename)));
+ items.push_back (MenuElem (_("Rename Range..."), sigc::mem_fun(*this, &Editor::marker_menu_rename)));
+ }
+
+ if (!session) {
items.push_back (MenuElem (_("Remove Range"), sigc::mem_fun(*this, &Editor::marker_menu_remove)));
- items.push_back (SeparatorElem());
}
+ if (loop_or_punch_or_session) {
+ items.push_back (SeparatorElem());
+ }
+
items.push_back (MenuElem (_("Separate Regions in Range"), sigc::mem_fun(*this, &Editor::marker_menu_separate_regions_using_location)));
items.push_back (MenuElem (_("Select All in Range"), sigc::mem_fun(*this, &Editor::marker_menu_select_all_selectables_using_range)));
if (!Profile->get_sae()) {
Editor::toggle_marker_lines ()
{
_show_marker_lines = !_show_marker_lines;
-
+
for (LocationMarkerMap::iterator i = location_markers.begin(); i != location_markers.end(); ++i) {
i->second->set_show_lines (_show_marker_lines);
}
i->second.remove (m);
}
}
+
+Marker *
+Editor::find_marker_from_location_id (PBD::ID const & id, bool is_start) const
+{
+ for (LocationMarkerMap::const_iterator i = location_markers.begin(); i != location_markers.end(); ++i) {
+ if (i->first->id() == id) {
+ return is_start ? i->second->start : i->second->end;
+ }
+ }
+
+ return 0;
+}