30 #include "canvas/canvas.h"
31 #include "canvas/item.h"
32 #include "canvas/rectangle.h"
54 for (LocationMarkerMap::iterator i = location_markers.begin(); i != location_markers.end(); ++i) {
58 location_markers.clear ();
59 _sorted_marker_lists.clear ();
67 ArdourCanvas::Container* group = add_new_location_internal (location);
70 update_marker_labels (group);
73 update_punch_range_view ();
77 update_loop_range_view ();
85 ArdourCanvas::Container*
92 ArdourCanvas::Container* group = 0;
95 color = location_cd_marker_color;
96 }
else if (location->
is_mark()) {
97 color = location_marker_color;
99 color = location_loop_color;
101 color = location_punch_color;
103 color = location_range_color;
108 if (location->
is_cd_marker() && ruler_cd_marker_action->get_active()) {
110 group = cd_marker_group;
113 group = marker_group;
121 lam->
start =
new Marker (*
this, *transport_marker_group, color,
123 lam->
end =
new Marker (*
this, *transport_marker_group, color,
125 group = transport_marker_group;
130 lam->
start =
new Marker (*
this, *transport_marker_group, color,
132 lam->
end =
new Marker (*
this, *transport_marker_group, color,
134 group = transport_marker_group;
141 group = marker_group;
145 if (location->
is_cd_marker() && ruler_cd_marker_action->get_active()) {
146 lam->
start =
new Marker (*
this, *cd_marker_group, color,
148 lam->
end =
new Marker (*
this, *cd_marker_group, color,
150 group = cd_marker_group;
152 lam->
start =
new Marker (*
this, *range_marker_group, color,
154 lam->
end =
new Marker (*
this, *range_marker_group, color,
156 group = range_marker_group;
169 pair<Location*,LocationMarkers*> newpair;
171 newpair.first = location;
172 newpair.second = lam;
174 location_markers.insert (newpair);
176 if (select_new_marker && location->
is_mark()) {
177 selection->set (lam->
start);
178 select_new_marker =
false;
187 _sorted_marker_lists[group].push_back (lam->
start);
189 _sorted_marker_lists[group].push_back (lam->
end);
211 update_loop_range_view ();
213 update_punch_range_view ();
216 check_marker_label (lam->
start);
218 check_marker_label (lam->
end);
230 std::list<Marker*>& sorted = _sorted_marker_lists[m->
get_parent()];
232 list<Marker*>::iterator i = find (sorted.begin(), sorted.end(), m);
234 list<Marker*>::iterator prev = sorted.end ();
235 list<Marker*>::iterator next = i;
239 if (i != sorted.begin()) {
244 if ((*prev)->position() > m->
position()) {
254 if (next != sorted.end() && (*next)->position() < m->
position()) {
262 if (prev != sorted.end()) {
266 double const p = sample_to_pixel (m->
position() - (*prev)->position());
269 (*prev)->set_right_label_limit (p / 2);
271 (*prev)->set_right_label_limit (p);
274 if ((*prev)->label_on_left ()) {
281 if (next != sorted.end()) {
285 double const p = sample_to_pixel ((*next)->position() - m->
position());
287 if ((*next)->label_on_left()) {
294 (*next)->set_left_label_limit (p);
296 (*next)->set_left_label_limit (p / 2);
311 for (std::map<ArdourCanvas::Container *, std::list<Marker *> >::iterator i = _sorted_marker_lists.begin(); i != _sorted_marker_lists.end(); ++i) {
312 update_marker_labels (i->first);
320 list<Marker*>& sorted = _sorted_marker_lists[group];
322 if (sorted.empty()) {
330 list<Marker*>::iterator i = sorted.begin ();
332 list<Marker*>::iterator prev = sorted.end ();
333 list<Marker*>::iterator next = i;
335 if (next != sorted.end()) {
339 while (i != sorted.end()) {
341 if (prev != sorted.end()) {
342 double const p = sample_to_pixel ((*i)->position() - (*prev)->position());
344 if ((*prev)->label_on_left()) {
345 (*i)->set_left_label_limit (p);
347 (*i)->set_left_label_limit (p / 2);
352 if (next != sorted.end()) {
353 double const p = sample_to_pixel ((*next)->position() - (*i)->position());
355 if ((*next)->label_on_left()) {
356 (*i)->set_right_label_limit (p / 2);
358 (*i)->set_right_label_limit (p);
382 ensure_cd_marker_updated (lam, location);
386 }
else if (location->
is_mark()) {
405 for (LocationMarkerMap::iterator i = location_markers.begin(); i != location_markers.end(); ++i) {
409 ensure_cd_marker_updated (lam, location);
416 && (ruler_cd_marker_action->get_active() && lam->
start->
get_parent() != cd_marker_group))
426 else if ( (!location->
is_cd_marker() || !ruler_cd_marker_action->get_active())
458 LocationMarkerMap::const_iterator i;
460 for (i = location_markers.begin(); i != location_markers.end(); ++i) {
461 if ((*i).first == location) {
472 LocationMarkerMap::const_iterator i;
474 for (i = location_markers.begin(); i != location_markers.end(); ++i) {
476 if (lm->
start == marker) {
479 }
else if (lm->
end == marker) {
493 for (LocationMarkerMap::iterator i = location_markers.begin(); i != location_markers.end(); ++i) {
494 i->second->valid =
false;
499 for (Locations::LocationList::const_iterator i = locations.begin(); i != locations.end(); ++i) {
501 LocationMarkerMap::iterator x;
503 if ((x = location_markers.find (*i)) != location_markers.end()) {
504 x->second->valid =
true;
508 add_new_location_internal (*i);
513 for (LocationMarkerMap::iterator i = location_markers.begin(); i != location_markers.end(); ) {
515 LocationMarkerMap::iterator tmp;
520 if (!i->second->valid) {
522 remove_sorted_marker (i->second->start);
523 if (i->second->end) {
524 remove_sorted_marker (i->second->end);
528 location_markers.erase (i);
535 update_punch_range_view ();
536 update_loop_range_view ();
548 update_marker_labels ();
572 start->canvas_height_set (h);
574 end->canvas_height_set (h);
584 start->set_name (str);
596 start->set_position (startf);
598 end->set_position (endf);
605 start->set_color_rgba (rgba);
607 end->set_color_rgba (rgba);
614 start->set_show_line (s);
616 end->set_show_line (s);
623 start->set_selected (s);
625 end->set_selected (s);
632 start->setup_line ();
642 int flags = (is_cd ? Location::IsCDMarker|Location::IsMark : Location::IsMark);
645 _session->locations()->next_available_name(markername,
_(
"mark"));
646 if (!choose_new_marker_name(markername)) {
650 begin_reversible_command (
_(
"add marker"));
652 XMLNode &before = _session->locations()->get_state();
653 _session->locations()->add (location,
true);
654 XMLNode &after = _session->locations()->get_state();
662 selection->set (lam->
start);
665 commit_reversible_command ();
680 framepos_t const end = where + current_page_samples() / 8;
682 set_loop_range (where, end,
_(
"set loop range"));
696 framepos_t const end = where + current_page_samples() / 8;
698 set_punch_range (where, end,
_(
"set punch range"));
712 framepos_t const end = where + current_page_samples() / 8;
715 _session->locations()->next_available_name (name,
_(
"range"));
716 Location* loc =
new Location (*_session, where, end, name, Location::IsRangeMarker);
718 begin_reversible_command (
_(
"new range marker"));
719 XMLNode& before = _session->locations()->get_state ();
720 _session->locations()->add (loc,
true);
721 XMLNode& after = _session->locations()->get_state ();
723 commit_reversible_command ();
732 if ((marker = static_cast<Marker*> (item.get_data (
"marker"))) == 0) {
733 fatal <<
_(
"programming error: marker canvas item has no marker object pointer!") <<
endmsg;
737 if (entered_marker == marker) {
738 entered_marker = NULL;
741 Location* loc = find_location_from_marker (marker, is_start);
743 if (_session && loc) {
751 begin_reversible_command (
_(
"remove marker"));
752 XMLNode &before = _session->locations()->get_state();
753 _session->locations()->remove (loc);
754 XMLNode &after = _session->locations()->get_state();
756 commit_reversible_command ();
765 LocationMarkerMap::iterator i;
767 if (location == transport_loop_location()) {
768 update_loop_range_view ();
771 if (location == transport_punch_location()) {
772 update_punch_range_view ();
775 for (i = location_markers.begin(); i != location_markers.end(); ++i) {
776 if (i->first == location) {
778 remove_sorted_marker (i->second->start);
779 if (i->second->end) {
780 remove_sorted_marker (i->second->end);
784 location_markers.erase (i);
794 marker_menu_item = item;
798 dynamic_cast_marker_object (marker_menu_item->get_data (
"marker"), &mm, &tm);
800 bool can_remove =
false;
810 delete tempo_or_meter_marker_menu;
811 build_tempo_or_meter_marker_menu (can_remove);
812 tempo_or_meter_marker_menu->popup (1, ev->time);
819 if ((marker = reinterpret_cast<Marker *> (item->get_data(
"marker"))) == 0) {
820 fatal <<
_(
"programming error: marker canvas item has no marker object pointer!") <<
endmsg;
825 Location * loc = find_location_from_marker (marker, is_start);
827 if (loc == transport_loop_location() || loc == transport_punch_location() || loc->
is_session_range ()) {
829 if (transport_marker_menu == 0) {
830 build_range_marker_menu (loc == transport_loop_location() || loc == transport_punch_location(), loc->
is_session_range());
833 marker_menu_item = item;
834 transport_marker_menu->popup (1, ev->time);
839 build_marker_menu (loc);
843 if (children.size() >= 3) {
844 MenuItem * loopitem = &children[2];
847 loopitem->set_sensitive(
false);
850 loopitem->set_sensitive(
true);
855 marker_menu_item = item;
856 marker_menu->popup (1, ev->time);
859 if (range_marker_menu == 0) {
860 build_range_marker_menu (
false,
false);
862 marker_menu_item = item;
863 range_marker_menu->popup (1, ev->time);
870 if (new_transport_marker_menu == 0) {
871 build_new_transport_marker_menu ();
874 new_transport_marker_menu->popup (1, ev->time);
881 using namespace Menu_Helpers;
883 marker_menu =
new Menu;
884 MenuList& items = marker_menu->items();
885 marker_menu->set_name (
"ArdourContextMenu");
891 items.push_back (SeparatorElem());
898 items.push_back (CheckMenuElem (
_(
"Lock")));
899 Gtk::CheckMenuItem* lock_item =
static_cast<Gtk::CheckMenuItem*
> (&items.back());
901 lock_item->set_active ();
905 items.push_back (CheckMenuElem (
_(
"Glue to Bars and Beats")));
906 Gtk::CheckMenuItem* glue_item =
static_cast<Gtk::CheckMenuItem*
> (&items.back());
908 glue_item->set_active ();
912 items.push_back (SeparatorElem());
920 using namespace Menu_Helpers;
922 bool const loop_or_punch_or_session = loop_or_punch | session;
924 Menu *markerMenu =
new Menu;
925 if (loop_or_punch_or_session) {
926 transport_marker_menu = markerMenu;
928 range_marker_menu = markerMenu;
930 MenuList& items = markerMenu->items();
931 markerMenu->set_name (
"ArdourContextMenu");
945 items.push_back (SeparatorElem());
947 items.push_back (SeparatorElem());
949 if (!loop_or_punch_or_session) {
958 if (!loop_or_punch_or_session || !session) {
959 items.push_back (SeparatorElem());
972 using namespace Menu_Helpers;
974 tempo_or_meter_marker_menu =
new Menu;
975 MenuList& items = tempo_or_meter_marker_menu->items();
976 tempo_or_meter_marker_menu->set_name (
"ArdourContextMenu");
981 items.back().set_sensitive (can_remove);
987 using namespace Menu_Helpers;
989 new_transport_marker_menu =
new Menu;
990 MenuList& items = new_transport_marker_menu->items();
991 new_transport_marker_menu->set_name (
"ArdourContextMenu");
1004 if ((marker = reinterpret_cast<Marker *> (marker_menu_item->get_data (
"marker"))) == 0) {
1005 fatal <<
_(
"programming error: marker canvas item has no marker object pointer!") <<
endmsg;
1012 if ((l = find_location_from_marker (marker, is_start)) != 0) {
1022 if ((marker = reinterpret_cast<Marker *> (marker_menu_item->get_data (
"marker"))) == 0) {
1023 fatal <<
_(
"programming error: marker canvas item has no marker object pointer!") <<
endmsg;
1030 if (((l = find_location_from_marker (marker, is_start)) != 0) && (l->
end() > l->
start())) {
1031 set_selection_from_range (*l);
1040 if ((marker = reinterpret_cast<Marker *> (marker_menu_item->get_data (
"marker"))) == 0) {
1041 fatal <<
_(
"programming error: marker canvas item has no marker object pointer!") <<
endmsg;
1048 if (((l = find_location_from_marker (marker, is_start)) != 0) && (l->
end() > l->
start())) {
1059 if ((marker = reinterpret_cast<Marker *> (marker_menu_item->get_data (
"marker"))) == 0) {
1060 fatal <<
_(
"programming error: marker canvas item has no marker object pointer!") <<
endmsg;
1067 if (((l = find_location_from_marker (marker, is_start)) != 0) && (l->
end() > l->
start())) {
1068 separate_regions_using_location (*l);
1078 if ((marker = reinterpret_cast<Marker *> (marker_menu_item->get_data (
"marker"))) == 0) {
1079 fatal <<
_(
"programming error: marker canvas item has no marker object pointer!") <<
endmsg;
1086 if ((l = find_location_from_marker (marker, is_start)) != 0) {
1089 _session->request_locate (l->
start(),
true);
1095 _session->request_locate (l->
start(),
true);
1097 _session->request_locate (l->
end(),
true);
1108 if ((marker = reinterpret_cast<Marker *> (marker_menu_item->get_data (
"marker"))) == 0) {
1109 fatal <<
_(
"programming error: marker canvas item has no marker object pointer!") <<
endmsg;
1116 if ((l = find_location_from_marker (marker, is_start)) != 0) {
1119 _session->request_locate (l->
start(),
false);
1123 _session->request_locate (l->
start(),
false);
1125 _session->request_locate (l->
end(),
false);
1139 if ((marker = reinterpret_cast<Marker *> (marker_menu_item->get_data (
"marker"))) == 0) {
1140 fatal <<
_(
"programming error: marker canvas item has no marker object pointer!") <<
endmsg;
1147 if ((l = find_location_from_marker (marker, is_start)) == 0) {
1153 _session->locations()->marks_either_side (marker->
position(),
start, end);
1156 string range_name = l->
name();
1157 range_name +=
"-range";
1160 _session->locations()->add (newrange);
1169 if ((marker = reinterpret_cast<Marker *> (marker_menu_item->get_data (
"marker"))) == 0) {
1170 fatal <<
_(
"programming error: marker canvas item has no marker object pointer!") <<
endmsg;
1177 if ((l = find_location_from_marker (marker, is_start)) != 0) {
1180 l->
set_start (_session->audible_frame ());
1184 l->
set_start (_session->audible_frame ());
1186 l->
set_end (_session->audible_frame ());
1197 if ((marker = reinterpret_cast<Marker *> (marker_menu_item->get_data (
"marker"))) == 0) {
1198 fatal <<
_(
"programming error: marker canvas item has no marker object pointer!") <<
endmsg;
1205 if ((l = find_location_from_marker (marker, is_start)) != 0) {
1213 if (!selection->time.empty()) {
1214 l->
set (selection->time.start(), selection->time.end_frame());
1215 }
else if (!selection->regions.empty()) {
1216 l->
set (selection->regions.start(), selection->regions.end_frame());
1228 if ((marker = reinterpret_cast<Marker *> (marker_menu_item->get_data (
"marker"))) == 0) {
1229 fatal <<
_(
"programming error: marker canvas item has no marker object pointer!") <<
endmsg;
1236 if ((l = find_location_from_marker (marker, is_start)) != 0) {
1239 _session->request_locate (l->
start(),
true);
1242 _session->request_bounded_roll (l->
start(), l->
end());
1253 if ((marker = reinterpret_cast<Marker *> (marker_menu_item->get_data (
"marker"))) == 0) {
1254 fatal <<
_(
"programming error: marker canvas item has no marker object pointer!") <<
endmsg;
1261 if ((l = find_location_from_marker (marker, is_start)) != 0) {
1263 if ((l2 = transport_loop_location()) != 0) {
1267 _session->request_locate (l2->
start(),
true);
1268 _session->request_play_loop(
true);
1277 Marker* marker =
reinterpret_cast<Marker *
> (marker_menu_item->get_data (
"marker"));
1281 Location* l = find_location_from_marker (marker, is_start);
1297 temporal_zoom_by_frame (a, b);
1305 fatal <<
_(
"programming error: marker canvas item has no marker object pointer!") <<
endmsg;
1318 dynamic_cast_marker_object (marker_menu_item->get_data (
"marker"), &mm, &tm);
1321 edit_meter_section (&mm->
meter());
1323 edit_tempo_section (&tm->
tempo());
1332 dynamic_cast_marker_object (marker_menu_item->get_data (
"marker"), &mm, &tm);
1335 remove_meter_marker (marker_menu_item);
1337 remove_tempo_marker (marker_menu_item);
1339 remove_marker (*marker_menu_item, (GdkEvent*) 0);
1348 if ((marker = reinterpret_cast<Marker *> (marker_menu_item->get_data (
"marker"))) == 0) {
1349 fatal <<
_(
"programming error: marker canvas item has no marker object pointer!") <<
endmsg;
1356 loc = find_location_from_marker (marker, ignored);
1374 if ((marker = reinterpret_cast<Marker *> (marker_menu_item->get_data (
"marker"))) == 0) {
1375 fatal <<
_(
"programming error: marker canvas item has no marker object pointer!") <<
endmsg;
1380 rename_marker (marker);
1389 loc = find_location_from_marker (marker, is_start);
1394 if (loc == transport_loop_location() || loc == transport_punch_location() || loc->
is_session_range())
1403 dialog.set_title (
_(
"Rename Mark"));
1405 dialog.set_title (
_(
"Rename Range"));
1408 dialog.set_name (
"MarkRenameWindow");
1409 dialog.set_size_request (250, -1);
1410 dialog.set_position (Gtk::WIN_POS_MOUSE);
1412 dialog.add_button (
_(
"Rename"), RESPONSE_ACCEPT);
1413 dialog.set_response_sensitive (Gtk::RESPONSE_ACCEPT,
false);
1418 switch (dialog.run ()) {
1419 case RESPONSE_ACCEPT:
1425 begin_reversible_command (
_(
"rename marker") );
1426 XMLNode &before = _session->locations()->get_state();
1430 _session->set_dirty ();
1432 XMLNode &after = _session->locations()->get_state();
1434 commit_reversible_command ();
1441 transport_bar_drag_rect->hide();
1449 set_loop_range (temp_location->start(), temp_location->end(),
_(
"set loop range"));
1455 set_punch_range (temp_location->start(), temp_location->end(),
_(
"set punch range"));
1461 if (_session == 0) {
1467 if (_session->get_play_loop() && ((tll = transport_loop_location()) != 0)) {
1469 double x1 = sample_to_pixel (tll->
start());
1470 double x2 = sample_to_pixel (tll->
end());
1472 transport_loop_range_rect->set_x0 (x1);
1473 transport_loop_range_rect->set_x1 (x2);
1475 transport_loop_range_rect->show();
1478 transport_loop_range_rect->hide();
1485 if (_session == 0) {
1491 if ((_session->config.get_punch_in() || _session->config.get_punch_out()) && ((tpl = transport_punch_location()) != 0)) {
1496 if (_session->config.get_punch_in()) {
1497 pixel_start = sample_to_pixel (tpl->
start());
1501 if (_session->config.get_punch_out()) {
1502 pixel_end = sample_to_pixel (tpl->
end());
1507 transport_punch_range_rect->set_x0 (pixel_start);
1508 transport_punch_range_rect->set_x1 (pixel_end);
1509 transport_punch_range_rect->show();
1513 transport_punch_range_rect->hide();
1520 if (_session && _session->deletion_in_progress()) {
1524 for (LocationMarkerMap::iterator i = location_markers.begin(); i != location_markers.end(); ++i) {
1525 i->second->set_selected (
false);
1528 for (MarkerSelection::iterator x = selection->markers.begin(); x != selection->markers.end(); ++x) {
1529 (*x)->set_selected (
true);
1552 for (Locations::LocationList::iterator i = ordered.begin(); n >= 0 && i != ordered.end(); ++i) {
1553 if ((*i)->is_mark() && !(*i)->is_hidden() && !(*i)->is_session_range()) {
1555 _session->request_locate ((*i)->start(), _session->transport_rolling());
1568 if ((marker = reinterpret_cast<Marker *> (marker_menu_item->get_data (
"marker"))) == 0) {
1569 fatal <<
_(
"programming error: marker canvas item has no marker object pointer!") <<
endmsg;
1576 loc = find_location_from_marker (marker, ignored);
1593 _show_marker_lines = !_show_marker_lines;
1595 for (LocationMarkerMap::iterator i = location_markers.begin(); i != location_markers.end(); ++i) {
1596 i->second->set_show_lines (_show_marker_lines);
1603 for (std::map<ArdourCanvas::Container *, std::list<Marker *> >::iterator i = _sorted_marker_lists.begin(); i != _sorted_marker_lists.end(); ++i) {
1604 i->second.remove (m);
1611 for (LocationMarkerMap::const_iterator i = location_markers.begin(); i != location_markers.end(); ++i) {
1612 if (i->first->id() == id) {
1613 return is_start ? i->second->start : i->second->end;
void marker_menu_separate_regions_using_location()
void marker_menu_range_to_next()
LIBPBD_API Transmitter fatal
void canvas_height_set(double)
void update_loop_range_view()
void marker_context_menu(GdkEventButton *, ArdourCanvas::Item *)
void remove_sorted_marker(Marker *)
void marker_menu_select_using_range()
void set_left_label_limit(double)
void add_new_location(ARDOUR::Location *)
std::list< Location * > LocationList
void toggle_marker_menu_glue()
framepos_t position() const
void tempo_or_meter_marker_context_menu(GdkEventButton *, ArdourCanvas::Item *)
void set_name(const std::string &str)
void mouse_add_new_marker(framepos_t where, bool is_cd=false)
ARDOUR::TempoSection & tempo() const
void toggle_marker_lines()
void update_cd_marker_display()
std::ostream & endmsg(std::ostream &ostr)
bool is_cd_marker() const
LIBARDOUR_API PBD::PropertyDescriptor< framepos_t > start
#define ENSURE_GUI_THREAD(obj, method,...)
bool is_session_range() const
void set_initial_text(std::string txt)
ArdourCanvas::Container * add_new_location_internal(ARDOUR::Location *)
void new_transport_marker_context_menu(GdkEventButton *, ArdourCanvas::Item *)
void reparent(ArdourCanvas::Container &parent)
void new_transport_marker_menu_set_punch()
void set_color_rgba(uint32_t)
PositionLockStyle position_lock_style() const
void location_changed(ARDOUR::Location *)
void marker_selection_changed()
void location_gone(ARDOUR::Location *)
void mouse_add_new_punch(framepos_t)
void marker_menu_set_playhead()
void marker_menu_rename()
int set(framepos_t start, framepos_t end, bool allow_bbt_recompute=true)
void clear_marker_display()
void dynamic_cast_marker_object(void *, MeterMarker **, TempoMarker **) const
void set_prompt(std::string prompt)
void marker_menu_select_all_selectables_using_range()
bool is_auto_punch() const
void set_right_label_limit(double)
void mouse_add_new_range(framepos_t)
PBD::Signal0< void > FlagsChanged
void new_transport_marker_menu_set_loop()
void marker_menu_loop_range()
bool label_on_left() const
ARDOUR::MeterSection & meter() const
void build_range_marker_menu(bool, bool)
void marker_menu_play_from()
void update_marker_labels()
Marker * find_marker_from_location_id(PBD::ID const &, bool) const
gint really_remove_marker(ARDOUR::Location *loc)
void marker_menu_set_from_playhead()
void update_punch_range_view()
void ensure_cd_marker_updated(LocationMarkers *lam, ARDOUR::Location *location)
LIBARDOUR_API RuntimeProfile * Profile
void get_result(std::string &str, bool strip=true)
void marker_menu_zoom_to_range()
void set_name(const std::string &)
int set_start(framepos_t s, bool force=false, bool allow_bbt_recompute=true)
LocationMarkers * find_location_markers(ARDOUR::Location *) const
void set_position(framepos_t start, framepos_t end=0)
void rename_marker(Marker *marker)
ArdourCanvas::Container * get_parent()
const std::string & name() const
ARDOUR::Location * find_location_from_marker(Marker *, bool &is_start) const
framecnt_t length() const
void set_show_lines(bool)
void goto_nth_marker(int nth)
static const framepos_t max_framepos
void refresh_location_display_internal(const ARDOUR::Locations::LocationList &)
bool is_range_marker() const
static PBD::Signal1< void, Location * > name_changed
void remove_marker(ArdourCanvas::Item &, GdkEvent *)
void refresh_location_display()
void toggle_marker_menu_lock()
void location_flags_changed(ARDOUR::Location *)
bool is_auto_loop() const
void marker_menu_set_from_selection(bool force_regions)
void check_marker_label(Marker *)
void set_hidden(bool yn, void *src)
void build_tempo_or_meter_marker_menu(bool)
void mouse_add_new_loop(framepos_t)
int set_end(framepos_t e, bool force=false, bool allow_bbt_recompute=true)
void marker_menu_remove()
void build_new_transport_marker_menu()
void set_position_lock_style(PositionLockStyle ps)
void marker_menu_play_range()
void new_transport_marker_menu_popdown()
void build_marker_menu(ARDOUR::Location *)
LIBARDOUR_API PBD::PropertyDescriptor< bool > color