37 #include <boost/none.hpp>
39 #include <sigc++/bind.h>
50 #include <glibmm/miscutils.h>
51 #include <glibmm/uriutils.h>
52 #include <gtkmm/image.h>
53 #include <gdkmm/color.h>
54 #include <gdkmm/bitmap.h>
56 #include <gtkmm/menu.h>
57 #include <gtkmm/menuitem.h>
77 #include "ardour/utils.h"
79 #include "canvas/debug.h"
80 #include "canvas/text.h"
82 #include "control_protocol/control_protocol.h"
136 using namespace Glib;
212 #ifdef USE_RUBBERBAND
213 static const gchar *_rb_opt_strings[] = {
216 N_(
"Balanced multitimbral mixture"),
217 N_(
"Unpitched percussion with stable notes"),
218 N_(
"Crisp monophonic instrumental"),
219 N_(
"Unpitched solo percussion"),
220 N_(
"Resample without preserving pitch"),
225 #define COMBO_TRIANGLE_WIDTH 25 // ArdourButton _diameter (11) + 2 * arrow-padding (2*2) + 2 * text-padding (2*5)
242 int max_width_of_lhs = GTK_WIDGET(pane->gobj())->allocation.width - 35;
244 gint pos = pane->get_position ();
246 if (pos > max_width_of_lhs) {
247 pane->set_position (max_width_of_lhs);
252 : _join_object_range_state (JOIN_OBJECT_RANGE_NONE)
254 , _mouse_changed_selection (false)
256 , minsec_label (
_(
"Mins:Secs"))
257 , bbt_label (
_(
"Bars:Beats"))
258 , timecode_label (
_(
"Timecode"))
259 , samples_label (
_(
"Samples"))
260 , tempo_label (
_(
"Tempo"))
261 , meter_label (
_(
"Meter"))
262 , mark_label (
_(
"Location Markers"))
263 , range_mark_label (
_(
"Range Markers"))
264 , transport_mark_label (
_(
"Loop/Punch Ranges"))
265 , cd_mark_label (
_(
"CD Markers"))
266 , videotl_label (
_(
"Video Timeline"))
267 , edit_packer (4, 4, true)
273 , vertical_adjustment (0.0, 0.0, 10.0, 400.0)
274 , horizontal_adjustment (0.0, 0.0, 1e16)
275 , unused_adjustment (0.0, 0.0, 10.0, 400.0)
277 , controls_layout (unused_adjustment, vertical_adjustment)
281 , toolbar_selection_clock_table (2,3)
282 , _mouse_mode_tearoff (0)
283 , automation_mode_button (
_(
"mode"))
287 , _toolbar_viewport (*manage (new
Gtk::Adjustment (0, 0, 1e10)), *manage (new
Gtk::Adjustment (0, 0, 1e10)))
288 , selection_op_cmd_depth (0)
289 , selection_op_history_it (0)
293 , nudge_clock (new
AudioClock (
X_(
"nudge"), false,
X_(
"nudge"), true, false, true))
294 , meters_running(false)
295 , _pending_locate_request (false)
296 , _pending_initial_locate (false)
297 , _last_cut_copy_source_track (0)
299 , _region_selection_change_updates_region_list (true)
300 , _following_mixer_selection (false)
301 , _control_point_toggled_on_press (false)
302 , _stepping_axis_view (0)
336 #ifdef USE_RUBBERBAND
337 rb_opt_strings =
I18N (_rb_opt_strings);
426 minsec_label.set_size_request (-1, (
int)timebar_height);
445 tempo_label.set_size_request (-1, (
int)timebar_height);
452 meter_label.set_size_request (-1, (
int)timebar_height);
462 mark_label.set_size_request (-1, (
int)timebar_height);
515 HBox* h = manage (
new HBox);
524 controls_layout.add_events (Gdk::BUTTON_PRESS_MASK|Gdk::BUTTON_RELEASE_MASK|Gdk::ENTER_NOTIFY_MASK|Gdk::LEAVE_NOTIFY_MASK|Gdk::SCROLL_MASK);
535 ArdourCanvas::GtkCanvas* time_pad = manage (
new ArdourCanvas::GtkCanvas ());
537 ArdourCanvas::Line* pad_line_1 =
new ArdourCanvas::Line (time_pad->root());
538 pad_line_1->set (ArdourCanvas::Duple (0.0, 1.0), ArdourCanvas::Duple (100.0, 1.0));
539 pad_line_1->set_outline_color (0xFF0000FF);
593 Button* summary_arrows_left_left = manage (
new Button);
594 summary_arrows_left_left->add (*manage (
new Arrow (ARROW_LEFT, SHADOW_NONE)));
595 summary_arrows_left_left->signal_pressed().connect (sigc::hide_return (sigc::bind (sigc::mem_fun (*
this, &
Editor::scroll_press),
LEFT)));
598 Button* summary_arrows_left_right = manage (
new Button);
599 summary_arrows_left_right->add (*manage (
new Arrow (ARROW_RIGHT, SHADOW_NONE)));
600 summary_arrows_left_right->signal_pressed().connect (sigc::hide_return (sigc::bind (sigc::mem_fun (*
this, &
Editor::scroll_press),
RIGHT)));
603 VBox* summary_arrows_left = manage (
new VBox);
604 summary_arrows_left->pack_start (*summary_arrows_left_left);
605 summary_arrows_left->pack_start (*summary_arrows_left_right);
607 Button* summary_arrows_right_up = manage (
new Button);
608 summary_arrows_right_up->add (*manage (
new Arrow (ARROW_UP, SHADOW_NONE)));
609 summary_arrows_right_up->signal_pressed().connect (sigc::hide_return (sigc::bind (sigc::mem_fun (*
this, &
Editor::scroll_press),
UP)));
612 Button* summary_arrows_right_down = manage (
new Button);
613 summary_arrows_right_down->add (*manage (
new Arrow (ARROW_DOWN, SHADOW_NONE)));
614 summary_arrows_right_down->signal_pressed().connect (sigc::hide_return (sigc::bind (sigc::mem_fun (*
this, &
Editor::scroll_press),
DOWN)));
617 VBox* summary_arrows_right = manage (
new VBox);
618 summary_arrows_right->pack_start (*summary_arrows_right_up);
619 summary_arrows_right->pack_start (*summary_arrows_right_down);
621 Frame* summary_frame = manage (
new Frame);
622 summary_frame->set_shadow_type (Gtk::SHADOW_ETCHED_IN);
625 summary_frame->show ();
627 _summary_hbox.pack_start (*summary_arrows_left,
false,
false);
629 _summary_hbox.pack_start (*summary_arrows_right,
false,
false);
646 Glib::PropertyProxy<int> proxy =
edit_pane.property_position();
651 HBox *hbox = manage (
new HBox);
652 hbox->pack_start (
edit_pane,
true,
true);
659 set_name (
"EditorWindow");
707 list<Glib::RefPtr<Gdk::Pixbuf> > window_icons;
708 Glib::RefPtr<Gdk::Pixbuf> icon;
710 if ((icon = ::
get_icon (
"ardour_icon_16px")) != 0) {
711 window_icons.push_back (icon);
713 if ((icon = ::
get_icon (
"ardour_icon_22px")) != 0) {
714 window_icons.push_back (icon);
716 if ((icon = ::
get_icon (
"ardour_icon_32px")) != 0) {
717 window_icons.push_back (icon);
719 if ((icon = ::
get_icon (
"ardour_icon_48px")) != 0) {
720 window_icons.push_back (icon);
722 if (!window_icons.empty()) {
724 set_default_icon_list (window_icons);
728 title +=
_(
"Editor");
730 set_wmclass (
X_(
"ardour_editor"), PROGRAM_NAME);
733 add_events (Gdk::KEY_PRESS_MASK|Gdk::KEY_RELEASE_MASK);
751 ControlProtocol::CloseDialog.connect (*
this,
invalidator (*
this), Keyboard::close_current_dialog,
gui_context());
788 for (XMLNodeList::const_iterator i = node->
children().begin(); i != node->
children().end(); ++i) {
830 vpacker.pack_start (cont,
false,
false);
842 vpacker.pack_start (cont,
false,
false);
918 if (!is_visible ()) {
1145 Window::on_realize ();
1167 case GDK_BUTTON_PRESS:
1168 case GDK_BUTTON_RELEASE:
1169 case GDK_MOTION_NOTIFY:
1171 case GDK_KEY_RELEASE:
1175 case GDK_LEAVE_NOTIFY:
1176 switch (ev->crossing.detail) {
1177 case GDK_NOTIFY_UNKNOWN:
1178 case GDK_NOTIFY_INFERIOR:
1179 case GDK_NOTIFY_ANCESTOR:
1181 case GDK_NOTIFY_VIRTUAL:
1182 case GDK_NOTIFY_NONLINEAR:
1183 case GDK_NOTIFY_NONLINEAR_VIRTUAL:
1202 struct timeval now, delta;
1204 gettimeofday (&now, 0);
1208 if (delta.tv_sec > (time_t)
ARDOUR_UI::config()->get_lock_gui_after_seconds()) {
1287 title += Glib::get_application_name();
1297 SessionHandlePtr::set_session (t);
1346 set_state (*node, Stateful::loading_state_version);
1394 case SnapToRegionStart:
1395 case SnapToRegionEnd:
1396 case SnapToRegionSync:
1397 case SnapToRegionBoundary:
1417 if (a->get_name() ==
"RegionMenu") {
1434 using namespace Menu_Helpers;
1437 std::map<ARDOUR::FadeShape,Gtk::Image*>* images;
1449 _(
"Linear (for highly correlated material)"),
1451 sigc::bind (sigc::mem_fun (*
this, emf), FadeLinear)
1455 dynamic_cast<ImageMenuItem*
>(&items.back())->set_always_show_image ();
1459 _(
"Constant power"),
1461 sigc::bind (sigc::mem_fun (*
this, emf), FadeConstantPower)
1464 dynamic_cast<ImageMenuItem*
>(&items.back())->set_always_show_image ();
1470 sigc::bind (sigc::mem_fun (*
this, emf), FadeSymmetric)
1474 dynamic_cast<ImageMenuItem*
>(&items.back())->set_always_show_image ();
1480 sigc::bind (sigc::mem_fun (*
this, emf), FadeSlow)
1483 dynamic_cast<ImageMenuItem*
>(&items.back())->set_always_show_image ();
1489 sigc::bind (sigc::mem_fun (*
this, emf), FadeFast)
1492 dynamic_cast<ImageMenuItem*
>(&items.back())->set_always_show_image ();
1499 using namespace Menu_Helpers;
1514 items.push_back (SeparatorElem());
1524 using namespace Menu_Helpers;
1539 items.push_back (SeparatorElem());
1548 using namespace Menu_Helpers;
1549 Menu* (
Editor::*build_menu_function)();
1552 switch (item_type) {
1558 if (with_selection) {
1566 if (with_selection) {
1586 menu = (this->*build_menu_function)();
1587 menu->set_name (
"ArdourContextMenu");
1591 switch (item_type) {
1597 if (!with_selection) {
1630 using namespace Menu_Helpers;
1631 MenuList& edit_items = menu->items();
1633 edit_items.push_back (SeparatorElem());
1636 case AudioTrack::NoFreeze:
1640 case AudioTrack::Frozen:
1644 case AudioTrack::UnFrozen:
1662 menu->popup (button, time);
1668 using namespace Menu_Helpers;
1680 using namespace Menu_Helpers;
1692 using namespace Menu_Helpers;
1708 if ((tr = rtv->
track())) {
1757 using namespace Menu_Helpers;
1759 edit_items.clear ();
1771 using namespace Menu_Helpers;
1779 string::size_type pos = 0;
1780 string menu_item_name = (rs.size() == 1) ? rs.front()->region()->name() :
_(
"Selected Regions");
1786 while ((pos = menu_item_name.find (
"_", pos)) != string::npos) {
1787 menu_item_name.replace (pos, 1,
"__");
1802 act->set_sensitive (
false);
1804 act->set_sensitive (
true);
1811 edit_items.push_back (*manage (
_region_actions->get_action (
"choose-top-region-context-menu")->create_menu_item ()));
1813 edit_items.push_back (SeparatorElem());
1822 using namespace Menu_Helpers;
1827 edit_items.push_back (SeparatorElem());
1830 edit_items.push_back (SeparatorElem());
1833 edit_items.push_back (SeparatorElem());
1835 edit_items.push_back (
1837 _(
"Move Range Start to Previous Region Boundary"),
1842 edit_items.push_back (
1844 _(
"Move Range Start to Next Region Boundary"),
1849 edit_items.push_back (
1851 _(
"Move Range End to Previous Region Boundary"),
1856 edit_items.push_back (
1858 _(
"Move Range End to Next Region Boundary"),
1863 edit_items.push_back (SeparatorElem());
1867 edit_items.push_back (SeparatorElem());
1870 edit_items.push_back (SeparatorElem());
1875 edit_items.push_back (SeparatorElem());
1878 edit_items.push_back (SeparatorElem());
1881 edit_items.push_back (MenuElem (
_(
"Duplicate Range"), sigc::bind (sigc::mem_fun(*
this, &
Editor::duplicate_range),
false)));
1883 edit_items.push_back (SeparatorElem());
1885 edit_items.push_back (MenuElem (
_(
"Consolidate Range With Processing"), sigc::bind (sigc::mem_fun(*
this, &
Editor::bounce_range_selection),
true,
true)));
1887 edit_items.push_back (MenuElem (
_(
"Bounce Range to Region List With Processing"), sigc::bind (sigc::mem_fun(*
this, &
Editor::bounce_range_selection),
false,
true)));
1898 using namespace Menu_Helpers;
1902 Menu *play_menu = manage (
new Menu);
1903 MenuList& play_items = play_menu->items();
1904 play_menu->set_name (
"ArdourContextMenu");
1909 play_items.push_back (SeparatorElem());
1912 edit_items.push_back (MenuElem (
_(
"Play"), *play_menu));
1916 Menu *select_menu = manage (
new Menu);
1917 MenuList& select_items = select_menu->items();
1918 select_menu->set_name (
"ArdourContextMenu");
1924 select_items.push_back (SeparatorElem());
1928 select_items.push_back (SeparatorElem());
1937 edit_items.push_back (MenuElem (
_(
"Select"), *select_menu));
1941 Menu *cutnpaste_menu = manage (
new Menu);
1942 MenuList& cutnpaste_items = cutnpaste_menu->items();
1943 cutnpaste_menu->set_name (
"ArdourContextMenu");
1945 cutnpaste_items.push_back (MenuElem (
_(
"Cut"), sigc::mem_fun(*
this, &
Editor::cut)));
1946 cutnpaste_items.push_back (MenuElem (
_(
"Copy"), sigc::mem_fun(*
this, &
Editor::copy)));
1947 cutnpaste_items.push_back (MenuElem (
_(
"Paste"), sigc::bind (sigc::mem_fun(*
this, &
Editor::paste), 1.0
f,
true)));
1949 cutnpaste_items.push_back (SeparatorElem());
1954 edit_items.push_back (MenuElem (
_(
"Edit"), *cutnpaste_menu));
1958 edit_items.push_back (SeparatorElem());
1964 Menu *nudge_menu = manage (
new Menu());
1965 MenuList& nudge_items = nudge_menu->items();
1966 nudge_menu->set_name (
"ArdourContextMenu");
1968 edit_items.push_back (SeparatorElem());
1969 nudge_items.push_back (MenuElem (
_(
"Nudge Entire Track Later"), (sigc::bind (sigc::mem_fun(*
this, &
Editor::nudge_track),
false,
true))));
1970 nudge_items.push_back (MenuElem (
_(
"Nudge Track After Edit Point Later"), (sigc::bind (sigc::mem_fun(*
this, &
Editor::nudge_track),
true,
true))));
1971 nudge_items.push_back (MenuElem (
_(
"Nudge Entire Track Earlier"), (sigc::bind (sigc::mem_fun(*
this, &
Editor::nudge_track),
false,
false))));
1972 nudge_items.push_back (MenuElem (
_(
"Nudge Track After Edit Point Earlier"), (sigc::bind (sigc::mem_fun(*
this, &
Editor::nudge_track),
true,
false))));
1974 edit_items.push_back (MenuElem (
_(
"Nudge"), *nudge_menu));
1980 using namespace Menu_Helpers;
1984 Menu *play_menu = manage (
new Menu);
1985 MenuList& play_items = play_menu->items();
1986 play_menu->set_name (
"ArdourContextMenu");
1990 edit_items.push_back (MenuElem (
_(
"Play"), *play_menu));
1994 Menu *select_menu = manage (
new Menu);
1995 MenuList& select_items = select_menu->items();
1996 select_menu->set_name (
"ArdourContextMenu");
2002 select_items.push_back (SeparatorElem());
2008 edit_items.push_back (MenuElem (
_(
"Select"), *select_menu));
2012 Menu *cutnpaste_menu = manage (
new Menu);
2013 MenuList& cutnpaste_items = cutnpaste_menu->items();
2014 cutnpaste_menu->set_name (
"ArdourContextMenu");
2016 cutnpaste_items.push_back (MenuElem (
_(
"Cut"), sigc::mem_fun(*
this, &
Editor::cut)));
2017 cutnpaste_items.push_back (MenuElem (
_(
"Copy"), sigc::mem_fun(*
this, &
Editor::copy)));
2018 cutnpaste_items.push_back (MenuElem (
_(
"Paste"), sigc::bind (sigc::mem_fun(*
this, &
Editor::paste), 1.0
f,
true)));
2020 Menu *nudge_menu = manage (
new Menu());
2021 MenuList& nudge_items = nudge_menu->items();
2022 nudge_menu->set_name (
"ArdourContextMenu");
2024 edit_items.push_back (SeparatorElem());
2025 nudge_items.push_back (MenuElem (
_(
"Nudge Entire Track Later"), (sigc::bind (sigc::mem_fun(*
this, &
Editor::nudge_track),
false,
true))));
2026 nudge_items.push_back (MenuElem (
_(
"Nudge Track After Edit Point Later"), (sigc::bind (sigc::mem_fun(*
this, &
Editor::nudge_track),
true,
true))));
2027 nudge_items.push_back (MenuElem (
_(
"Nudge Entire Track Earlier"), (sigc::bind (sigc::mem_fun(*
this, &
Editor::nudge_track),
false,
false))));
2028 nudge_items.push_back (MenuElem (
_(
"Nudge Track After Edit Point Earlier"), (sigc::bind (sigc::mem_fun(*
this, &
Editor::nudge_track),
true,
false))));
2030 edit_items.push_back (MenuElem (
_(
"Nudge"), *nudge_menu));
2048 unsigned int snap_ind = (
unsigned int)st;
2072 case SnapToBeatDiv128:
2073 case SnapToBeatDiv64:
2074 case SnapToBeatDiv32:
2075 case SnapToBeatDiv28:
2076 case SnapToBeatDiv24:
2077 case SnapToBeatDiv20:
2078 case SnapToBeatDiv16:
2079 case SnapToBeatDiv14:
2080 case SnapToBeatDiv12:
2081 case SnapToBeatDiv10:
2082 case SnapToBeatDiv8:
2083 case SnapToBeatDiv7:
2084 case SnapToBeatDiv6:
2085 case SnapToBeatDiv5:
2086 case SnapToBeatDiv4:
2087 case SnapToBeatDiv3:
2088 case SnapToBeatDiv2: {
2089 ARDOUR::TempoMap::BBTPointList::const_iterator current_bbt_points_begin;
2090 ARDOUR::TempoMap::BBTPointList::const_iterator current_bbt_points_end;
2093 current_bbt_points_begin, current_bbt_points_end);
2095 current_bbt_points_begin, current_bbt_points_end);
2100 case SnapToRegionStart:
2101 case SnapToRegionEnd:
2102 case SnapToRegionSync:
2103 case SnapToRegionBoundary:
2143 if (ep == EditAtSelectedMarker)
2144 ep = EditAtPlayhead;
2153 if (!force && !changed) {
2157 const char* action=NULL;
2160 case EditAtPlayhead:
2161 action =
"edit-at-playhead";
2163 case EditAtSelectedMarker:
2164 action =
"edit-at-marker";
2167 action =
"edit-at-mouse";
2173 Glib::RefPtr<RadioAction>::cast_dynamic(act)->set_active (
true);
2177 bool in_track_canvas;
2180 in_track_canvas =
false;
2207 if ((prop = geometry->
property(
"x_size")) == 0) {
2208 prop = geometry->
property (
"x-size");
2213 if ((prop = geometry->
property(
"y_size")) == 0) {
2214 prop = geometry->
property (
"y-size");
2220 if ((prop = geometry->
property (
"x_pos")) == 0) {
2221 prop = geometry->
property (
"x-pos");
2227 if ((prop = geometry->
property (
"y_pos")) == 0) {
2228 prop = geometry->
property (
"y-pos");
2235 set_default_size (g.base_width, g.base_height);
2240 sscanf (prop->
value().c_str(),
"%" PRIi64, &pos);
2244 warning <<
_(
"Playhead position stored with a negative value - ignored (use zero instead)") <<
endmsg;
2251 if ((prop = node.
property (
"mixer-width"))) {
2255 if ((prop = node.
property (
"zoom-focus"))) {
2259 if ((prop = node.
property (
"zoom"))) {
2267 if ((prop = node.
property (
"visible-track-count"))) {
2271 if ((prop = node.
property (
"snap-to"))) {
2275 if ((prop = node.
property (
"snap-mode"))) {
2279 if ((prop = node.
property (
"internal-snap-to"))) {
2283 if ((prop = node.
property (
"internal-snap-mode"))) {
2287 if ((prop = node.
property (
"pre-internal-snap-to"))) {
2291 if ((prop = node.
property (
"pre-internal-snap-mode"))) {
2295 if ((prop = node.
property (
"mouse-mode"))) {
2302 if ((prop = node.
property (
"left-frame")) != 0) {
2304 if (sscanf (prop->
value().c_str(),
"%" PRId64, &pos) == 1) {
2312 if ((prop = node.
property (
"y-origin")) != 0) {
2316 if ((prop = node.
property (
"join-object-range"))) {
2320 RefPtr<ToggleAction> tact = RefPtr<ToggleAction>::cast_dynamic(act);
2321 tact->set_active (!yn);
2322 tact->set_active (yn);
2327 if ((prop = node.
property (
"edit-point"))) {
2331 if ((prop = node.
property (
"show-measures"))) {
2336 if ((prop = node.
property (
"follow-playhead"))) {
2341 if ((prop = node.
property (
"stationary-playhead"))) {
2346 if ((prop = node.
property (
"region-list-sort-type"))) {
2351 if ((prop = node.
property (
"show-editor-mixer"))) {
2356 Glib::RefPtr<ToggleAction> tact = Glib::RefPtr<ToggleAction>::cast_dynamic(act);
2361 tact->set_active (!yn);
2362 tact->set_active (yn);
2365 if ((prop = node.
property (
"show-editor-list"))) {
2370 Glib::RefPtr<ToggleAction> tact = Glib::RefPtr<ToggleAction>::cast_dynamic(act);
2375 tact->set_active (!yn);
2376 tact->set_active (yn);
2379 if ((prop = node.
property (
X_(
"editor-list-page")))) {
2383 if ((prop = node.
property (
X_(
"show-marker-lines")))) {
2386 Glib::RefPtr<ToggleAction> tact = Glib::RefPtr<ToggleAction>::cast_dynamic (act);
2389 tact->set_active (!yn);
2390 tact->set_active (yn);
2394 for (XMLNodeList::const_iterator i = children.begin(); i != children.end(); ++i) {
2399 if ((prop = node.
property (
"maximised"))) {
2403 Glib::RefPtr<ToggleAction> tact = Glib::RefPtr<ToggleAction>::cast_dynamic(act);
2404 bool fs = tact && tact->get_active();
2410 if ((prop = node.
property (
"nudge-clock-value"))) {
2412 sscanf (prop->
value().c_str(),
"%" PRId64, &
f);
2430 RefPtr<ToggleAction> tact = RefPtr<ToggleAction>::cast_dynamic(act);
2432 tact->set_active (!yn);
2433 tact->set_active (yn);
2439 RefPtr<ToggleAction> tact = RefPtr<ToggleAction>::cast_dynamic(act);
2440 if (tact->get_active() != yn) {
2441 tact->set_active (yn);
2448 RefPtr<ToggleAction> tact = RefPtr<ToggleAction>::cast_dynamic(act);
2449 if (tact->get_active() != yn) {
2450 tact->set_active (yn);
2464 id().
print (buf,
sizeof (buf));
2467 if (is_realized()) {
2468 Glib::RefPtr<Gdk::Window> win = get_window();
2470 int x, y, width, height;
2471 win->get_root_origin(x, y);
2472 win->get_size(width, height);
2476 snprintf(buf,
sizeof(buf),
"%d", width);
2478 snprintf(buf,
sizeof(buf),
"%d", height);
2480 snprintf(buf,
sizeof(buf),
"%d", x);
2482 snprintf(buf,
sizeof(buf),
"%d", y);
2484 snprintf(buf,
sizeof(buf),
"%d",gtk_paned_get_position (static_cast<Paned*>(&
edit_pane)->gobj()));
2485 geometry->
add_property(
"edit-horizontal-pane-pos",
string(buf));
2487 snprintf(buf,
sizeof(buf),
"%d",gtk_paned_get_position (static_cast<Paned*>(&
editor_summary_pane)->gobj()));
2488 geometry->
add_property(
"edit-vertical-pane-pos",
string(buf));
2526 Glib::RefPtr<ToggleAction> tact = Glib::RefPtr<ToggleAction>::cast_dynamic(act);
2527 node->
add_property (
X_(
"show-editor-mixer"), tact->get_active() ?
"yes" :
"no");
2532 Glib::RefPtr<ToggleAction> tact = Glib::RefPtr<ToggleAction>::cast_dynamic(act);
2533 node->
add_property (
X_(
"show-editor-list"), tact->get_active() ?
"yes" :
"no");
2536 snprintf (buf,
sizeof (buf),
"%d",
_the_notebook.get_current_page ());
2564 std::pair<TimeAxisView *, double>
2567 if (!trackview_relative_offset) {
2577 std::pair<TimeAxisView*, double>
const r = (*iter)->covers_y_position (y);
2599 if (Keyboard::modifier_state_contains (event->button.state, Keyboard::snap_modifier())) {
2627 case SnapToTimecodeFrame:
2638 case SnapToTimecodeSeconds:
2645 (start % one_timecode_second == 0)) {
2647 }
else if (((direction == 0) && (start % one_timecode_second > one_timecode_second / 2)) || direction > 0) {
2648 start = (
framepos_t) ceil ((
double) start / one_timecode_second) * one_timecode_second;
2650 start = (
framepos_t) floor ((
double) start / one_timecode_second) * one_timecode_second;
2660 case SnapToTimecodeMinutes:
2667 (start % one_timecode_minute == 0)) {
2669 }
else if (((direction == 0) && (start % one_timecode_minute > one_timecode_minute / 2)) || direction > 0) {
2670 start = (
framepos_t) ceil ((
double) start / one_timecode_minute) * one_timecode_minute;
2672 start = (
framepos_t) floor ((
double) start / one_timecode_minute) * one_timecode_minute;
2681 fatal <<
"Editor::smpte_snap_to_internal() called with non-timecode snap type!" <<
endmsg;
2696 case SnapToTimecodeFrame:
2697 case SnapToTimecodeSeconds:
2698 case SnapToTimecodeMinutes:
2703 start % (one_second/75) == 0) {
2705 }
else if (((direction == 0) && (start % (one_second/75) > (one_second/75) / 2)) || (direction > 0)) {
2706 start = (
framepos_t) ceil ((
double) start / (one_second / 75)) * (one_second / 75);
2708 start = (
framepos_t) floor ((
double) start / (one_second / 75)) * (one_second / 75);
2714 start % one_second == 0) {
2716 }
else if (((direction == 0) && (start % one_second > one_second / 2)) || (direction > 0)) {
2717 start = (
framepos_t) ceil ((
double) start / one_second) * one_second;
2719 start = (
framepos_t) floor ((
double) start / one_second) * one_second;
2725 start % one_minute == 0) {
2727 }
else if (((direction == 0) && (start % one_minute > one_minute / 2)) || (direction > 0)) {
2728 start = (
framepos_t) ceil ((
double) start / one_minute) * one_minute;
2730 start = (
framepos_t) floor ((
double) start / one_minute) * one_minute;
2742 case SnapToBeatDiv128:
2745 case SnapToBeatDiv64:
2748 case SnapToBeatDiv32:
2751 case SnapToBeatDiv28:
2754 case SnapToBeatDiv24:
2757 case SnapToBeatDiv20:
2760 case SnapToBeatDiv16:
2763 case SnapToBeatDiv14:
2766 case SnapToBeatDiv12:
2769 case SnapToBeatDiv10:
2772 case SnapToBeatDiv8:
2775 case SnapToBeatDiv7:
2778 case SnapToBeatDiv6:
2781 case SnapToBeatDiv5:
2784 case SnapToBeatDiv4:
2787 case SnapToBeatDiv3:
2790 case SnapToBeatDiv2:
2810 if ((start - before) < (after - start)) {
2819 case SnapToRegionStart:
2820 case SnapToRegionEnd:
2821 case SnapToRegionSync:
2822 case SnapToRegionBoundary:
2828 if (direction > 0) {
2842 if (start > (p + n) / 2) {
2857 if (presnap > start) {
2862 }
else if (presnap < start) {
2879 HBox* mode_box = manage(
new HBox);
2880 mode_box->set_border_width (2);
2881 mode_box->set_spacing(2);
2883 HBox* mouse_mode_box = manage (
new HBox);
2884 HBox* mouse_mode_hbox = manage (
new HBox);
2885 VBox* mouse_mode_vbox = manage (
new VBox);
2886 Alignment* mouse_mode_align = manage (
new Alignment);
2888 Glib::RefPtr<SizeGroup> mouse_mode_size_group = SizeGroup::create (SIZE_GROUP_VERTICAL);
2918 mouse_mode_hbox->set_spacing (2);
2938 mouse_mode_vbox->pack_start (*mouse_mode_hbox);
2940 mouse_mode_align->add (*mouse_mode_vbox);
2941 mouse_mode_align->set (0.5, 1.0, 0.0, 0.0);
2943 mouse_mode_box->pack_start (*mouse_mode_align,
false,
false);
2950 mode_box->pack_start (*mouse_mode_box,
false,
false);
3071 HBox *nudge_box = manage (
new HBox);
3072 nudge_box->set_spacing (2);
3073 nudge_box->set_border_width (2);
3080 nudge_box->pack_start (*
nudge_clock,
false,
false);
3085 HBox* hbox = manage (
new HBox);
3086 hbox->set_spacing(2);
3115 hbox->pack_start (
snap_box,
false,
false);
3117 hbox->pack_start (*nudge_box,
false,
false);
3122 hbox->pack_start (
panic_box,
false,
false);
3141 using namespace Menu_Helpers;
3154 using namespace Menu_Helpers;
3167 using namespace Menu_Helpers;
3179 using namespace Menu_Helpers;
3247 vector<string>& paths,
3248 const RefPtr<Gdk::DragContext>& ,
3251 const SelectionData& data,
3259 vector<string> uris = data.get_uris();
3267 if (data.get_target() !=
"text/plain") {
3277 string txt = data.get_text();
3281 p = (
char *) malloc (txt.length() + 1);
3282 txt.copy (p, txt.length(), 0);
3283 p[txt.length()] =
'\0';
3289 while (g_ascii_isspace (*p))
3293 while (*q && (*q !=
'\n') && (*q !=
'\r')) {
3300 while (q > p && g_ascii_isspace (*q))
3305 uris.push_back (
string (p, q - p + 1));
3309 p = strchr (p,
'\n');
3321 for (vector<string>::iterator i = uris.begin(); i != uris.end(); ++i) {
3322 if ((*i).substr (0,7) ==
"file://") {
3323 paths.push_back (Glib::filename_from_uri (*i));
3388 list<XMLNode *>::iterator e_it = it;
3391 for ( ; it != e_it; ++it) {
3486 if (
before.size() == 1) {
3494 cerr <<
"Please call begin_reversible_command() before commit_reversible_command()." << endl;
3510 label =
S_(
"Command|Undo");
3541 Label label (
_(
"Number of duplications:"));
3542 Adjustment adjustment (1.0, 1.0, 1000000.0, 1.0, 5.0);
3543 SpinButton spinner (adjustment, 0.0, 1);
3546 win.get_vbox()->set_spacing (12);
3547 win.get_vbox()->pack_start (hbox);
3548 hbox.set_border_width (6);
3549 hbox.pack_start (label, PACK_EXPAND_PADDING, 12);
3555 hbox.pack_start (spinner, PACK_EXPAND_PADDING, 12);
3556 spinner.signal_activate().connect (sigc::bind (sigc::mem_fun (win, &ArdourDialog::response), RESPONSE_ACCEPT));
3557 spinner.grab_focus();
3563 win.add_button (Stock::CANCEL, RESPONSE_CANCEL);
3564 win.add_button (
_(
"Duplicate"), RESPONSE_ACCEPT);
3565 win.set_default_response (RESPONSE_ACCEPT);
3567 spinner.grab_focus ();
3569 switch (win.run ()) {
3570 case RESPONSE_ACCEPT:
3576 times = adjustment.get_value();
3596 Config->set_edit_mode (m);
3602 switch (
Config->get_edit_mode()) {
3623 Config->set_edit_mode ( m );
3631 ract->set_active ();
3641 ract->set_active (
true);
3649 with_marker =
false;
3655 case EditAtPlayhead:
3662 case EditAtSelectedMarker:
3677 using namespace Menu_Helpers;
3694 ract->set_active ();
3701 using namespace Menu_Helpers;
3776 std::ostringstream s;
3782 if ((*i)->marked_for_display()) {
3815 if (Keyboard::is_context_menu_event (ev)) {
3817 }
else if (ev->button == 1) {
3829 if (ev->button != 3) {
3858 case ZoomFocusRight:
3861 case ZoomFocusCenter:
3864 case ZoomFocusPlayhead:
3867 case ZoomFocusMouse:
3879 win.set_transient_for (*
this);
3903 if (which == static_cast<Paned*> (&
edit_pane)) {
3905 if (done & Horizontal) {
3909 if (geometry && (prop = geometry->
property (
"notebook-shrunk"))) {
3913 if (!geometry || (prop = geometry->
property (
"edit-horizontal-pane-pos")) == 0) {
3915 pos = (int) floor (alloc.get_width() * 0.90f);
3916 snprintf (buf,
sizeof(buf),
"%d", pos);
3921 if (GTK_WIDGET(
edit_pane.gobj())->allocation.width > pos) {
3925 done = (Pane) (done | Horizontal);
3929 if (done & Vertical) {
3933 if (!geometry || (prop = geometry->
property (
"edit-vertical-pane-pos")) == 0) {
3935 pos = (int) floor (alloc.get_height() * 0.90f);
3936 snprintf (buf,
sizeof(buf),
"%d", pos);
3946 done = (Pane) (done | Vertical);
3979 ARDOUR::TempoMap::BBTPointList::const_iterator begin;
3980 ARDOUR::TempoMap::BBTPointList::const_iterator end;
3995 RefPtr<ToggleAction> tact = RefPtr<ToggleAction>::cast_dynamic(act);
4020 RefPtr<ToggleAction> tact = RefPtr<ToggleAction>::cast_dynamic(act);
4047 if (paste_count == 0) {
4058 offset = offset_pos - pos;
4067 case SnapToBeatDiv128:
return 128;
4068 case SnapToBeatDiv64:
return 64;
4069 case SnapToBeatDiv32:
return 32;
4070 case SnapToBeatDiv28:
return 28;
4071 case SnapToBeatDiv24:
return 24;
4072 case SnapToBeatDiv20:
return 20;
4073 case SnapToBeatDiv16:
return 16;
4074 case SnapToBeatDiv14:
return 14;
4075 case SnapToBeatDiv12:
return 12;
4076 case SnapToBeatDiv10:
return 10;
4077 case SnapToBeatDiv8:
return 8;
4078 case SnapToBeatDiv7:
return 7;
4079 case SnapToBeatDiv6:
return 6;
4080 case SnapToBeatDiv5:
return 5;
4081 case SnapToBeatDiv4:
return 4;
4082 case SnapToBeatDiv3:
return 3;
4083 case SnapToBeatDiv2:
return 2;
4131 "If it is kept, its audio files will not be cleaned.\n"
4132 "If it is deleted, audio files used by it alone will be cleaned."),
4135 dialog.set_position (WIN_POS_CENTER);
4136 dialog.get_vbox()->pack_start (label);
4140 dialog.add_button (
_(
"Delete Playlist"), RESPONSE_ACCEPT);
4141 dialog.add_button (
_(
"Keep Playlist"), RESPONSE_REJECT);
4142 dialog.add_button (
_(
"Cancel"), RESPONSE_CANCEL);
4144 switch (dialog.run ()) {
4145 case RESPONSE_ACCEPT:
4150 case RESPONSE_REJECT:
4166 if ((*a)->region()->covers (where)) {
4285 vector<boost::shared_ptr<ARDOUR::Playlist> > playlists;
4301 vector<boost::shared_ptr<ARDOUR::Playlist> > playlists;
4316 vector<boost::shared_ptr<ARDOUR::Playlist> > playlists;
4349 return Gtk::Window::on_key_release_event (ev);
4489 (*i)->clear_property_cache();
4490 (*i)->reset_visual_state ();
4515 if (spp * lots_of_pixels > three_days) {
4535 ArdourCanvas::GtkCanvasViewport* c;
4539 c->canvas()->zoomed ();
4620 ARDOUR::TempoMap::BBTPointList::const_iterator current_bbt_points_begin;
4621 ARDOUR::TempoMap::BBTPointList::const_iterator current_bbt_points_end;
4624 current_bbt_points_begin, current_bbt_points_end);
4626 current_bbt_points_begin, current_bbt_points_end);
4674 if (ep == EditAtSelectedMarker)
4675 ep = EditAtPlayhead;
4677 if (from_outside_canvas && (ep == EditAtMouse)) {
4678 ep = EditAtPlayhead;
4679 }
else if (from_context_menu && (ep == EditAtMouse)) {
4689 ep = EditAtSelectedMarker;
4693 ep = EditAtPlayhead;
4697 case EditAtPlayhead:
4709 case EditAtSelectedMarker:
4715 where = loc->
start();
4758 tll->
set (start, end);
4785 tpl->
set (start, end);
4809 for (TrackViewList::const_iterator t = tracks->begin(); t != tracks->end(); ++t) {
4822 for (RegionList::iterator i = regions->begin(); i != regions->end(); ++i) {
4844 for (TrackViewList::const_iterator t = tracks->begin(); t != tracks->end(); ++t) {
4855 for (RegionList::iterator i = regions->begin(); i != regions->end(); ++i) {
4891 if ( regions.empty() ) {
4894 if (!tracks.empty()) {
4928 if ( regions.empty() ) {
4931 if (!tracks.empty()) {
4965 if ((rtav = dynamic_cast<RouteTimeAxisView*> (*i)) != 0) {
4967 std::vector<boost::shared_ptr<Region> > results;
4970 if ((tr = rtav->
track()) == 0) {
4975 if ((pl = (tr->
playlist())) != 0) {
4980 regions.push_back (rv);
4995 if ((mtav = dynamic_cast<MidiTimeAxisView*> (*i)) != 0) {
5010 if ((tatv = dynamic_cast<RouteTimeAxisView*> (*i)) != 0) {
5013 vector<boost::shared_ptr<Region> > results;
5017 if ((tr = tatv->
track()) == 0) {
5022 if ((pl = (tr->
playlist())) != 0) {
5023 if (src_comparison) {
5032 regions.push_back (marv);
5055 MessageDialog* dialog = 0;
5058 dialog =
new MessageDialog (
5060 string_compose (
_(
"Please wait while %1 loads visual data."), PROGRAM_NAME),
5088 return ((
Editor*)arg)->idle_resize ();
5106 int32_t min_resulting = INT32_MAX;
5119 if (min_resulting < 0) {
5172 if (rv->
region ()->
id () == (*pr)) {
5181 list<pair<PBD::ID const, list<boost::shared_ptr<Evoral::Note<Evoral::Beats> > > > >::iterator rnote;
5183 if (rv->
region()->
id () == (*rnote).first) {
5203 TrackViewList::const_iterator j =
track_views.begin ();
5206 if (rtv && rtv->
route() == r) {
5221 for (RouteList::const_iterator i = r->begin(); i != r->end(); ++i) {
5254 list<RouteTimeAxisView*> new_views;
5258 for (RouteList::iterator x = routes.begin(); x != routes.end(); ++x) {
5277 new_views.push_back (rtv);
5279 new_selection.push_back (rtv);
5287 if (new_views.size() > 0) {
5292 if (!from_scratch) {
5324 for (TimeAxisView::Children::const_iterator i = c.begin(); i != c.end(); ++i) {
5332 TrackViewList::iterator i;
5343 route = rtav->
route ();
5374 if (apply_to_selection) {
5377 TrackSelection::iterator j = i;
5422 if((v = dynamic_cast<RouteTimeAxisView*>(*i)) != 0) {
5635 if ((rtv = dynamic_cast<RouteTimeAxisView*>(*i)) != 0) {
5689 if (target <= 0.0) {
5693 target = (target * 0.15) + (current * 0.85);
5769 title +=
_(
"Editor");
5773 SessionHandlePtr::session_going_away ();
5863 return *manage (a->create_menu_item ());
5869 EventBox* b = manage (
new EventBox);
5871 Label* l = manage (
new Label (name));
5881 if (ev->type == GDK_BUTTON_PRESS || ev->type == GDK_2BUTTON_PRESS) {
5885 if (ev->type == GDK_2BUTTON_PRESS) {
5911 using namespace Menu_Helpers;
5919 items.back().set_sensitive (
false);
5928 using namespace Menu_Helpers;
5945 items.push_back(MenuElem(
_(
"Delete"),
5947 items.push_back(MenuElem(
_(
"Edit..."),
5949 items.push_back(MenuElem(
_(
"Legatize"),
5951 items.push_back(MenuElem(
_(
"Quantize..."),
5953 items.push_back(MenuElem(
_(
"Remove Overlap"),
5955 items.push_back(MenuElem(
_(
"Transform..."),
5970 if (parameter ==
"icon-set") {
5976 }
else if (parameter ==
"draggable-playhead") {
void get_regions_corresponding_to(boost::shared_ptr< ARDOUR::Region > region, std::vector< RegionView * > ®ions, bool src_comparison)
ARDOUR::Location * transport_punch_location()
Gtk::EventBox time_bars_event_box
RegionView * find_view(boost::shared_ptr< const ARDOUR::Region >)
framepos_t audible_frame() const
bool transport_rolling() const
bool relay_key_press(GdkEventKey *ev, Gtk::Window *win)
static PBD::Signal1< void, TimeAxisView * > CatchDeletion
void set_visible(bool yn, bool force=false)
std::pair< TimeAxisView *, double > trackview_by_y_position(double, bool trackview_relative_offset=true) const
SelectionMemento * _selection_memento
sigc::signal< void > Hidden
void reset_y_origin(double)
bool _all_region_actions_sensitized
void center_screen(framepos_t)
double timecode_frames_per_second() const
void region_view_removed()
ArdourCanvas::Item * get_canvas_group()
void add_selection_context_items(Gtk::Menu_Helpers::MenuList &)
std::list< XMLNode * > before
LIBPBD_API Transmitter fatal
ArdourCanvas::Color color(const std::string &, bool *failed=0) const
void map_transport_state()
void editor_list_button_toggled()
LIBGTKMM2EXT_API Gtk::Widget * get_widget(const char *name)
bool scroll_up_one_track(bool skip_child_views=false)
void hide_region_from_region_list()
void update_loop_range_view()
Gtk::Menu _control_point_context_menu
void set_route(boost::shared_ptr< ARDOUR::Route >)
void copy_playlists(TimeAxisView *v)
void set_session_extents_from_selection()
std::list< PBD::ID > pending
int atoi(const string &s)
static PBD::Signal1< void, RegionView * > RegionViewGoingAway
void commit_reversible_selection_op()
void scroll_tracks_up_line()
int32_t _pending_resize_amount
RulerDialog * ruler_dialog
boost::shared_ptr< Region > region_by_id(const PBD::ID &) const
framecnt_t get_paste_offset(framepos_t pos, unsigned paste_count, framecnt_t duration)
void mapped_use_copy_playlist(RouteTimeAxisView &, uint32_t, std::vector< boost::shared_ptr< ARDOUR::Playlist > > const &)
PBD::Signal0< void > Changed
void build_edit_point_menu()
void nudge_track(bool use_edit_point, bool forwards)
void set(framepos_t, bool force=false, ARDOUR::framecnt_t offset=0)
void reset_sort_type(Editing::RegionListSortType, bool)
VisualChange pending_visual_change
void redisplay_tempo(bool immediate_redraw)
ArdourCanvas::GtkCanvasViewport * get_track_canvas() const
TimeAxisView * current_stepping_trackview
void begin_reversible_command(const std::string &cmd_name)
PBD::Signal0< void > TransportStateChange
void cycle_edit_point(bool with_marker)
PlaylistSelector * _playlist_selector
XMLNode * editor_settings() const
Width editor_mixer_strip_width
Gtk::Menu xfade_in_context_menu
void set_follow_playhead(bool yn, bool catch_up=true)
void add_new_location(ARDOUR::Location *)
sigc::connection super_rapid_connect(const sigc::slot< void > &slot)
ArdourButton mouse_content_button
Location * auto_loop_location() const
Gtk::Menu * editor_ruler_menu
TimeAxisView * clicked_axisview
void set_session(ARDOUR::Session *)
void use_new_playlist(bool prompt, std::vector< boost::shared_ptr< ARDOUR::Playlist > > const &)
void build_snap_type_menu()
const std::string & value() const
PBD::Signal1< void, const PropertyChange & > PropertyChanged
static void setup_sizes()
LIBGTKMM2EXT_API void set_size_request_to_display_given_text(Gtk::Widget &w, const gchar *text, gint hpadding, gint vpadding)
void set_session(ARDOUR::Session *s)
uint32_t redo_depth() const
bool canvas_scroll_event(GdkEventScroll *event, bool from_canvas)
boost::shared_ptr< RegionList > regions_touched(framepos_t start, framepos_t end)
PBD::Signal1< void, Location * > added
void abort_reversible_command()
Editing::SnapType internal_snap_type
void begin_reversible_command(std::string cmd_name)
void set_snap_to(Editing::SnapType)
void duplicate_some_regions(RegionSelection &, float times)
int set_state(const XMLNode &, int version)
void restore_editing_space()
static PublicEditor * _instance
Singleton instance, set up by Editor::Editor()
ArdourDropdown visible_tracks_selector
void control_vertical_zoom_in_all()
double transport_speed() const
void update_video_timeline(bool flush=false)
Glib::RefPtr< Gtk::Action > redo_action
EditorSnapshots * _snapshots
friend class EditorRoutes
sigc::connection control_scroll_connection
EditorRouteGroups * _route_groups
sigc::signal< void, RegionView * > RegionViewAdded
void popup_xfade_in_context_menu(int, int, ArdourCanvas::Item *, ItemType)
void remove_control_point(ArdourCanvas::Item *)
void new_region_from_selection()
Gtk::ToggleButton editor_list_button
ArdourButton zoom_out_full_button
GdkEvent context_click_event
SoundFileOmega * sfbrowser
void set_selected_mixer_strip(TimeAxisView &)
void tav_zoom_smooth(bool coarser, bool force_all)
void ui_parameter_changed(std::string)
void show_rhythm_ferret()
void start_lock_event_timing()
Editing::SnapType _snap_type
framepos_t position() const
framepos_t leftmost_frame
void set_name(const std::string &str)
framecnt_t samples_per_pixel
shared_ptr< T > dynamic_pointer_cast(shared_ptr< U > const &r)
static ARDOUR_UI * instance()
void add_region_context_items(Gtk::Menu_Helpers::MenuList &, boost::shared_ptr< ARDOUR::Track >)
TimeAxisView * entered_track
framecnt_t get_nudge_distance(framepos_t pos, framecnt_t &next)
void compute_fixed_ruler_scale()
gint exit_on_main_window_close(GdkEventAny *)
ArdourButton mouse_select_button
framepos_t canvas_event_sample(GdkEvent const *, double *px=0, double *py=0) const
void detach_tearoff(Gtk::Box *b, Gtk::Window *w)
ArdourCanvas::Item * marker_menu_item
double horizontal_position() const
bool covers(framepos_t frame) const
bool key_press_focus_accelerator_handler(Gtk::Window &window, GdkEventKey *ev)
void scroll_tracks_down_line()
Lists of selected things.
ArdourDropdown zoom_focus_selector
void queue_visual_videotimeline_update()
void maybe_add_mixer_strip_width(XMLNode &)
void get_regionviews_by_id(PBD::ID const id, RegionSelection ®ions) const
std::vector< boost::shared_ptr< TimeAxisView > > Children
void add_command(Command *const cmd)
void ensure_float(Gtk::Window &)
void track_selection_changed()
void session_going_away()
bool control_layout_scroll(GdkEventScroll *ev)
void reset_x_origin_to_follow_playhead()
void align_regions_relative(ARDOUR::RegionPoint point)
PBD::Signal0< void > Located
AnalysisWindow * analysis_window
static const gchar * _edit_mode_strings[]
LIBGTKMM2EXT_API Glib::RefPtr< Gtk::Action > get_action(const char *group, const char *name)
void export_video(bool range=false)
bool show_editor_mixer_when_tracks_arrive
void show_editor_list(bool yn)
RouteTimeAxisView * clicked_routeview
ControlPoint * clicked_control_point
static const gchar * _snap_type_strings[]
bool deferred_control_scroll(framepos_t)
void set_punch_from_selection()
void snap_to_internal(framepos_t &first, ARDOUR::RoundMode direction=ARDOUR::RoundNearest, bool for_mark=false)
void get_region_list_equivalent_regions(boost::shared_ptr< Region >, std::vector< boost::shared_ptr< Region > > &)
void temporal_zoom(framecnt_t samples_per_pixel)
void quantize_regions(const RegionSelection &rs)
std::string next_undo() const
ArdourCanvas::Pixbuf * logo_item
ARDOUR::framepos_t end_frame()
void get_regions_at(RegionSelection &, framepos_t where, const TrackViewList &ts) const
void build_underlay_menu(Gtk::Menu *)
bool _dragging_edit_point
Gtk::Adjustment vertical_adjustment
void start_updating_meters()
bool is_auditioning() const
int set_state(const XMLNode &, int version)
void set(std::list< Selectable * > const &)
LIBGTKMM2EXT_API void do_action(const char *group, const char *name)
sigc::signal< void > MarkersChanged
void resume_route_redisplay()
void analyze_range_selection()
virtual void set_session(ARDOUR::Session *)
LIBPBD_API Transmitter warning
const XMLNodeList & children(const std::string &str=std::string()) const
Glib::RefPtr< Gtk::RadioAction > snap_mode_action(Editing::SnapMode)
ArdourButton mouse_timefx_button
void override_visible_track_count()
void get_regions_after(RegionSelection &, framepos_t where, const TrackViewList &ts) const
std::list< std::pair< PBD::ID const, std::list< boost::shared_ptr< Evoral::Note< Evoral::Beats > > > > > pending_midi_note_selection
Gtk::EventBox toolbar_base
sigc::signal< void > TimeChanged
bool is_auditioner() const
std::ostream & endmsg(std::ostream &ostr)
void insert_region_list_selection(float times)
void control_select(uint32_t rid, Selection::Operation)
SessionConfiguration config
void parameter_changed(std::string)
Glib::RefPtr< Gtk::Action > selection_undo_action
void temporal_zoom_step(bool coarser)
Gtk::Menu * new_transport_marker_menu
StreamView * view() const
void set_session(ARDOUR::Session *)
void set_entered_track(TimeAxisView *)
boost::shared_ptr< ARDOUR::AudioRegion > audio_region() const
void select_all_selectables_using_edit(bool)
void update_all_enter_cursors()
void edit_notes(MidiRegionView *)
void set_entered_regionview(RegionView *)
void action_pre_activated(Glib::RefPtr< Gtk::Action > const &)
void control_step_tracks_down()
void select_range_between()
Evoral::Beats get_grid_type_as_beats(bool &success, framepos_t position)
LIBARDOUR_API PBD::PropertyDescriptor< framepos_t > start
void marks_either_side(framepos_t const, framepos_t &, framepos_t &) const
bool save(const std::string &path)
ArdourCanvas::GtkCanvasViewport * _track_canvas_viewport
VerboseCursor * _verbose_cursor
void request_locate(framepos_t frame, bool with_roll=false)
void popup_note_context_menu(ArdourCanvas::Item *, GdkEvent *)
uint32_t current_height() const
EditorCursor * playhead_cursor
static AudioEngine * instance()
framecnt_t frame_rate() const
void hide_track_in_display(TimeAxisView &)
void set_context(const std::string &, ARDOUR::Session *, TimeAxisView *, boost::shared_ptr< ARDOUR::Playlist >, ARDOUR::framepos_t)
void map_parameters(boost::function< void(std::string)> &)
bool mouse_frame(framepos_t &, bool &in_track_canvas) const
Gtk::Menu * build_track_context_menu()
ArdourDropdown zoom_preset_selector
#define ENSURE_GUI_THREAD(obj, method,...)
Gtk::Menu * tempo_or_meter_marker_menu
ArdourDropdown edit_mode_selector
void parameter_changed(std::string)
bool fade_in_active() const
ArdourDropdown edit_point_selector
GUIObjectState * gui_object_state
bool audio_region_selection_covers(framepos_t where)
RegionSelection get_regions_from_selection_and_entered()
void fit_route_group(ARDOUR::RouteGroup *)
framepos_t round_to_bar(framepos_t frame, RoundMode dir)
void reset_canvas_action_sensitivity(bool)
void set_session(ARDOUR::Session *)
void set_can_be_torn_off(bool)
PBD::Signal1< void, framepos_t > PositionChanged
bool generic_event_handler(GdkEvent *)
void show_editor_mixer(bool yn)
void timeaxisview_deleted(TimeAxisView *)
void update_tearoff_visibility()
ArdourCanvas::Container * _trackview_group
Gtk::Label timecode_label
const Meter & meter_at(framepos_t) const
#define COMBO_TRIANGLE_WIDTH
void add_notebook_page(std::string const &, Gtk::Widget &)
std::map< ARDOUR::FadeShape, Gtk::Image * > _xfade_in_images
ArdourButton mouse_draw_button
PlaylistSelector & playlist_selector() const
std::list< XMLNode * > XMLNodeList
bool _follow_playhead
true if the editor should follow the playhead, otherwise false
void center_screen_internal(framepos_t, float)
Editing::SnapMode pre_internal_snap_mode
gint just_hide_it(GdkEventAny *, Gtk::Window *)
const std::string & get_string()
framepos_t get_preferred_edit_position(Editing::EditIgnoreOption=Editing::EDIT_IGNORE_NONE, bool use_context_click=false, bool from_outside_canvas=false)
double frames_per_timecode_frame() const
void set_session(ARDOUR::Session *)
void session_state_saved(std::string)
void reattach_tearoff(Gtk::Box *b, Gtk::Window *w, int32_t n)
framecnt_t samples_per_pixel
std::string next_redo() const
Gtk::Menu fade_context_menu
void build_track_count_menu()
Editing::ZoomFocus zoom_focus
void build_snap_mode_menu()
EditorLocations * _locations
uint32_t undo_depth() const
void edit_point_selection_done(Editing::EditPoint)
void add(std::list< Selectable * > const &)
framecnt_t sample_rate() const
LIBGTKMM2EXT_API void set_sensitive(std::vector< Glib::RefPtr< Gtk::Action > > &actions, bool)
void set_auto_loop_location(Location *)
void update_region_layering_order_editor()
void bounce_range_selection(bool replace, bool enable_processing)
void duplicate_selection(float times)
Gtk::HBox & editor_transport_box()
ARDOUR::InterThreadInfo * current_interthread_info
void location_changed(ARDOUR::Location *)
void sensitize_all_region_actions(bool)
MidiRegionView & region_view() const
friend class EditorRouteGroups
TimeFXDialog * current_timefx
LIBGTKMM2EXT_API uint64_t Keyboard
void toggle(std::list< Selectable * > const &)
void marker_selection_changed()
void maximise_editing_space()
framepos_t current_frame() const
void location_gone(ARDOUR::Location *)
void idle_resize(int32_t)
void catch_vanishing_regionview(RegionView *)
void set_edit_point_preference(Editing::EditPoint ep, bool force=false)
bool track_canvas_map_handler(GdkEventAny *)
void set_fade_in_shape(ARDOUR::FadeShape)
ArdourDropdown snap_mode_selector
std::vector< std::string > snap_type_strings
vector< string > internationalize(const char *package_name, const char **array)
void toggle_follow_playhead()
void routes_added(std::list< RouteTimeAxisView * > const &)
void hide_a_region(boost::shared_ptr< ARDOUR::Region >)
gboolean configure_handler(GdkEventConfigure *conf)
int convert_drop_to_paths(std::vector< std::string > &paths, const Glib::RefPtr< Gdk::DragContext > &context, gint x, gint y, const Gtk::SelectionData &data, guint info, guint time)
XMLProperty * property(const char *)
LIBARDOUR_API RCConfiguration * Config
ArdourButton smart_mode_button
void build_zoom_focus_menu()
sigc::signal< void > Attach
int set(framepos_t start, framepos_t end, bool allow_bbt_recompute=true)
void point_selection_changed()
#define string_2_enum(str, e)
void clear_marker_display()
void control_view(uint32_t)
boost::shared_ptr< ARDOUR::Region > region() const
void set_fade_out_active(bool)
void edit_mode_selection_done(ARDOUR::EditMode m)
framecnt_t samples_per_pixel
Glib::RefPtr< Gtk::RadioAction > zoom_focus_action(Editing::ZoomFocus)
void reset_zoom(framecnt_t)
void set_position(framepos_t)
void set_selection_from_loop()
bool _ignore_region_action
PBD::Signal1< void, Location * > removed
std::vector< std::string > zoom_focus_strings
void play_from_edit_point()
void timecode_snap_to_internal(framepos_t &first, ARDOUR::RoundMode direction=ARDOUR::RoundNearest, bool for_mark=false)
ARDOUR::Location * temp_location
ArdourButton zoom_in_button
VisualState(bool with_tracks)
void begin_reversible_selection_op(std::string cmd_name)
void move_range_selection_start_or_end_to_region_boundary(bool, bool)
void routes_added(std::list< RouteTimeAxisView * > routes)
void set_background_dirty()
Editing::MouseMode current_mouse_mode() const
uint32_t location_marker_color
bool string_is_affirmative(const std::string &str)
MixerStrip * current_mixer_strip
void analyze_region_selection()
boost::shared_ptr< RegionList > regions_at(framepos_t frame)
void region_fill_selection()
bool fade_out_active() const
int playlist_deletion_dialog(boost::shared_ptr< ARDOUR::Playlist >)
size_t push_canvas_cursor(Gdk::Cursor *)
void use_visual_state(VisualState &)
Round down only if necessary.
ArdourButton zoom_out_button
Glib::RefPtr< Gtk::Action > undo_action
framepos_t transport_frame() const
void set_selection_from_punch()
Gtk::Menu xfade_out_context_menu
bool have_pending_keyboard_selection
Editing::EditPoint _edit_point
ArdourButton tav_expand_button
void change_region_layering_order(bool from_context_menu)
sigc::connection super_rapid_screen_update_connection
ArdourButton nudge_backward_button
const PBD::ID & id() const
void set_zoom_focus(Editing::ZoomFocus)
std::vector< Gdk::Cursor * > _cursor_stack
bool _stationary_playhead
true if we scroll the tracks rather than the playhead
void effective_gain_display()
LIBGTKMM2EXT_API uint64_t Bindings
void add_dstream_context_items(Gtk::Menu_Helpers::MenuList &)
void print(char *buf, uint32_t bufsize) const
void visual_changer(const VisualChange &)
static gboolean _idle_resize(gpointer)
boost::shared_ptr< ARDOUR::Track > track() const
void legatize_regions(const RegionSelection &rs, bool shrink_only)
bool set_id(const XMLNode &)
PBD::Signal0< void > DirtyChanged
void scroll_forward(float pages=0.8f)
void popup_xfade_out_context_menu(int, int, ArdourCanvas::Item *, ItemType)
friend class RhythmFerret
void set_session(ARDOUR::Session *)
LIBGTKMM2EXT_API void uncheck_toggleaction(std::string)
RegionLayeringOrderEditor * layering_order_editor
void goto_visual_state(uint32_t)
bool deletion_in_progress() const
framepos_t last_update_frame
RegionSelection get_regions_from_selection_and_mouse(framepos_t)
bool on_key_press_event(GdkEventKey *)
bool internal_editing() const
void commit_reversible_command(Command *cmd=0)
sigc::signal< void > Realized
const char * enum2str(SnapType m)
bool nudge_backward_release(GdkEventButton *)
Glib::RefPtr< Gtk::ToggleAction > smart_mode_action
void select_all_objects(Selection::Operation op)
VisualState * current_visual_state(bool with_tracks=true)
static Keyboard & the_keyboard()
void update_marker_labels()
boost::shared_ptr< Playlist > playlist()
bool _pending_initial_locate
void snap_to_with_modifier(framepos_t &first, GdkEvent const *ev, ARDOUR::RoundMode direction=ARDOUR::RoundNearest, bool for_mark=false)
ArdourButton mouse_cut_button
void set_samples_per_pixel(framecnt_t)
XMLNode & get_state(void)
std::vector< std::string > snap_mode_strings
void tempo_map_changed(const PBD::PropertyChange &)
void route_removed(TimeAxisView *)
std::list< XMLNode * > selection_op_history
void select_all_selectables_between(bool within)
uint32_t bbt_beat_subdivision
PBD::Signal0< void > SnapChanged
void mapover_tracks(sigc::slot< void, RouteTimeAxisView &, uint32_t > sl, TimeAxisView *, PBD::PropertyID) const
#define DEBUG_TRACE(bits, str)
std::map< ARDOUR::FadeShape, Gtk::Image * > _xfade_out_images
void get_per_region_note_selection(std::list< std::pair< PBD::ID, std::set< boost::shared_ptr< Evoral::Note< Evoral::Beats > > > > > &)
void play_selected_region()
PBD::Signal1< void, bool > StepEditStatusChange
sigc::signal< void, framepos_t > UpdateAllTransportClocks
void control_step_tracks_up()
bool _maximised
true if we are in fullscreen mode
void add_transport_frame(Gtk::Container &)
sigc::signal< void > Detach
std::vector< ARDOUR::framepos_t > region_boundary_cache
void add_external_audio_action(Editing::ImportMode)
void fit_tracks(TrackViewList &)
void crop_region_to_selection()
Gtkmm2ext::TearOff * _mouse_mode_tearoff
bool lock_timeout_callback()
void prepare_for_cleanup()
friend class EditorGroupTabs
void set_cursor_set(const std::string &name)
void sort_track_selection(TrackViewList &)
LIBARDOUR_API XMLNode * find_named_node(const XMLNode &node, std::string name)
void access_action(std::string, std::string)
bool can_remove_control_point(ArdourCanvas::Item *)
PBD::ScopedConnectionList _session_connections
std::map< ARDOUR::FadeShape, Gtk::Image * > _fade_in_images
void set_horizontal_position(double)
Gtk::Window & tearoff_window()
static const gchar * _snap_mode_strings[]
int32_t _visible_track_count
XMLNode * button_settings() const
void pane_allocation_handler(Gtk::Allocation &, Gtk::Paned *)
bool autoscroll_vertical_allowed
Gtk::MenuItem * region_edit_menu_split_item
LIBARDOUR_API PBD::PropertyDescriptor< bool > regions
void set_state(const XMLNode &)
bool no_ruler_shown_update
PBD::Signal1< void, std::string > ParameterChanged
void select_all_in_track(Selection::Operation op)
double trackviews_height() const
void popup_track_context_menu(int, int, ItemType, bool)
sigc::connection _scroll_connection
Gtk::Menu track_region_context_menu
LIBARDOUR_API RuntimeProfile * Profile
void foreach_time_axis_view(sigc::slot< void, TimeAxisView & >)
void control_vertical_zoom_out_selected()
void reattach_all_tearoffs()
ArdourCanvas::GtkCanvas * _track_canvas
Gtk::Menu * build_track_region_context_menu()
double _visible_canvas_width
Gtk::Menu * range_marker_menu
void set_tip(Gtk::Widget &w, const gchar *tip)
void mapped_use_new_playlist(RouteTimeAxisView &, uint32_t, std::vector< boost::shared_ptr< ARDOUR::Playlist > > const &)
LIBGTKMM2EXT_API Glib::RefPtr< Gtk::UIManager > ui_manager
bool show_gain_after_trim
void super_rapid_screen_update()
TimeAxisView * _stepping_axis_view
void snap_mode_selection_done(Editing::SnapMode)
static void setup_sizes(const double timebar_height)
void set_loop_range(framepos_t start, framepos_t end, std::string cmd)
void update_fixed_rulers()
int idle_visual_changer()
void compute_bbt_ruler_scale(framepos_t lower, framepos_t upper, ARDOUR::TempoMap::BBTPointList::const_iterator current_bbt_points_begin, ARDOUR::TempoMap::BBTPointList::const_iterator current_bbt_points_end)
double _visible_canvas_height
height of the visible area of the track canvas
void map_parameters(boost::function< void(std::string)> &)
XMLProperty * add_property(const char *name, const std::string &value)
static const gchar * _zoom_focus_strings[]
void update_tempo_based_rulers(ARDOUR::TempoMap::BBTPointList::const_iterator &begin, ARDOUR::TempoMap::BBTPointList::const_iterator &end)
void set_snap_mode(Editing::SnapMode)
ArdourDropdown snap_type_selector
void add_routes(ARDOUR::RouteList &)
void new_playlists(TimeAxisView *v)
void set_auto_punch_location(Location *)
Gtk::MenuItem & action_menu_item(std::string const &)
Editing::SnapMode snap_mode() const
void add(Location *, bool make_current=false)
double get_y_origin() const
void audition_region(boost::shared_ptr< Region >)
framepos_t requested_return_frame() const
GUIObjectState * gui_state
void compute_current_bbt_points(framepos_t left, framepos_t right, ARDOUR::TempoMap::BBTPointList::const_iterator &begin, ARDOUR::TempoMap::BBTPointList::const_iterator &end)
Gtk::Label transport_mark_label
ArdourButton mouse_move_button
void time_selection_changed()
boost::shared_ptr< Route > route_by_remote_id(uint32_t id)
Gtk::VBox edit_controls_vbox
framepos_t round_to_beat_subdivision(framepos_t fr, int sub_num, RoundMode dir)
void zoom_vertical_modifier_released()
bool transport_stopped() const
Gtk::Menu * build_track_bus_context_menu()
sigc::signal< void > Visible
std::string snap_name() const
void add_location_from_selection()
static const gchar * _edit_point_strings[]
void zoom_focus_selection_done(Editing::ZoomFocus f)
ARDOUR::framepos_t start()
Editing::RegionListSortType sort_type() const
void add_child_nocopy(XMLNode &)
framepos_t pixel_to_sample(double pixel) const
ARDOUR::framepos_t length()
static const int32_t default_width
Editing::SnapType snap_type() const
XMLNode & get_state(void)
void set_stationary_playhead(bool yn)
bool load(const std::string &path)
bool scroll_down_one_track(bool skip_child_views=false)
Editing::ZoomFocus zoom_focus
MouseMode str2mousemode(const string &str)
void add_toplevel_menu(Gtk::Container &)
static int _idle_visual_changer(void *arg)
void set_fade_out_shape(ARDOUR::FadeShape)
framepos_t leftmost_frame
uint32_t n_channels() const
RouteTimeAxisView * get_route_view_by_route_id(const PBD::ID &id) const
uint32_t selection_op_cmd_depth
Gtkmm2ext::TearOff * _zoom_tearoff
Glib::RefPtr< Gtk::RadioAction > snap_type_action(Editing::SnapType)
void abort_reversible_command()
void map_position_change(framepos_t)
bool have_item(ArdourCanvas::Item *) const
framecnt_t current_page_samples() const
void begin_selection_op_history()
Gtk::Viewport _toolbar_viewport
PBD::Signal1< void, std::string > StateSaved
void toggle_stationary_playhead()
bool _ignore_follow_edits
void popup_control_point_context_menu(ArdourCanvas::Item *, GdkEvent *)
std::vector< std::string > edit_mode_strings
Editing::SnapMode internal_snap_mode
void tie_vertical_scrolling()
sigc::signal< void > PointsChanged
void region_view_added(RegionView *)
LIBARDOUR_API PBD::PropertyDescriptor< framepos_t > position
void duplicate_range(bool with_dialog)
ARDOUR::Location * find_location_from_marker(Marker *, bool &is_start) const
boost::shared_ptr< RouteList > route_list()
static UIConfiguration * config()
bool get_small_screen() const
void set_loop_from_selection(bool play)
friend class EditorSummary
void add_instant_xml(XMLNode &, bool write_to_config=true)
The instant xml file is written to the session directory.
std::vector< std::string > edit_point_strings
bool edit_controls_button_release(GdkEventButton *)
TrackViewList axis_views_from_routes(boost::shared_ptr< ARDOUR::RouteList >) const
Gtk::Menu * build_track_selection_context_menu()
XMLNode & get_state() const
void get_per_region_note_selection(std::list< std::pair< PBD::ID, std::set< boost::shared_ptr< Evoral::Note< Evoral::Beats > > > > > &) const
std::vector< Glib::RefPtr< Gtk::Action > > edit_point_in_region_sensitive_actions
uint32_t location_cd_marker_color
LIBARDOUR_API PBD::PropertyDescriptor< bool > select
ARDOUR::Location * transport_loop_location()
double divisions_per_bar() const
boost::shared_ptr< IO > input() const
void control_vertical_zoom_out_all()
void build_edit_mode_menu()
void remove_metric_marks()
std::list< TimeAxisView * > views() const
bool button_release_can_deselect
Gtk::HBox status_bar_hpacker
Gtkmm2ext::TearOff * _tools_tearoff
sigc::connection editor_regions_selection_changed_connection
void set_edit_mode(ARDOUR::EditMode)
framepos_t last_paste_pos
bool scroll_press(Direction)
bool contains(TimeAxisView const *) const
sigc::signal< void > ZoomChanged
void get_source_equivalent_regions(boost::shared_ptr< Region >, std::vector< boost::shared_ptr< Region > > &)
void set_session(ARDOUR::Session *)
EditorGroupTabs * _group_tabs
Editing::SnapType pre_internal_snap_type
Gtk::MenuItem * _popup_region_menu_item
framepos_t current_duration(framepos_t position=0) const
uint32_t selection_op_history_it
void set_session(ARDOUR::Session *)
TrackViewList track_views
RegionSelection get_regions_from_selection_and_edit_point()
TimeAxisView * _pending_resize_view
sigc::signal< void, std::string > ParameterChanged
void show_a_region(boost::shared_ptr< ARDOUR::Region >)
Gtkmm2ext::Bindings * button_bindings
boost::shared_ptr< SessionPlaylists > playlists
void set_fade_in_active(bool)
void start_step_editing()
void consider_auditioning(boost::shared_ptr< ARDOUR::Region >)
bool nudge_forward_release(GdkEventButton *)
LIBEVORAL_API uint64_t Beats
void temporal_zoom_session()
RouteTimeAxisView * axis_view_from_route(boost::shared_ptr< ARDOUR::Route >) const
bool ruler_label_button_release(GdkEventButton *)
boost::shared_ptr< ARDOUR::AudioRegion > last_audition_region
void paste(float times, bool from_context_menu=false)
void reset_x_origin(framepos_t)
framepos_t round_to_beat(framepos_t frame, RoundMode dir)
void selection_mapover(sigc::slot< void, boost::shared_ptr< ARDOUR::Region > >)
void step_edit_status_change(bool)
void draw_metric_marks(const ARDOUR::Metrics &metrics)
static const framepos_t max_framepos
Round up only if necessary.
Gtk::Layout controls_layout
void snap_type_selection_done(Editing::SnapType)
sigc::signal< void > TracksChanged
virtual void set_session(ARDOUR::Session *)
void region_selection_changed()
std::list< VisualState * > undo_visual_stack
void set_session(ARDOUR::Session *)
void draw_measures(ARDOUR::TempoMap::BBTPointList::const_iterator &begin, ARDOUR::TempoMap::BBTPointList::const_iterator &end)
Gtk::MenuItem * region_edit_menu_split_multichannel_item
Gtk::Label range_mark_label
void set_session(ARDOUR::Session *)
bool _last_region_menu_was_main
std::string get_icon_path(const char *, std::string icon_set=std::string(), bool is_image=true)
bool mouse_select_button_release(GdkEventButton *)
void invert_selection_in_track()
void refresh_location_display()
Gtk::VPaned editor_summary_pane
static uint32_t preset_height(Height)
void add_to_idle_resize(TimeAxisView *, int32_t)
sigc::signal0< void > ZoomVerticalModifierReleased
void restore_ruler_visibility()
void select_notes(std::list< boost::shared_ptr< NoteType > >)
void commit_reversible_command()
friend class EditorRegions
struct timeval last_event_time
void set_punch_range(framepos_t start, framepos_t end, std::string cmd)
bool notebook_tab_clicked(GdkEventButton *, Gtk::Widget *)
boost::shared_ptr< ARDOUR::AudioTrack > audio_track() const
void sensitize_the_right_region_actions()
void clear_playlists(TimeAxisView *v)
void set_selection_from_region()
XMLNode & get_state() const
ArdourButton tav_shrink_button
void audition_region_from_region_list()
Gtk::Menu _note_context_menu
void separate_region_from_selection()
void select_all_selectables_using_time_selection()
#define timersub(a, b, result)
sigc::signal< void > RegionsChanged
void set_show_measures(bool yn)
ArdourButton mouse_audition_button
void set_mouse_mode(Editing::MouseMode, bool force=true)
void add_bus_context_items(Gtk::Menu_Helpers::MenuList &)
void control_scroll(float)
std::list< VisualState * > redo_visual_stack
void set_visible_track_count(int32_t)
Editing::SnapMode _snap_mode
uint32_t location_range_color
boost::optional< int > pre_notebook_shrink_pane_width
void build_region_boundary_cache()
Glib::RefPtr< Gdk::Pixbuf > get_icon(const char *cname)
void select_all_selectables_using_cursor(EditorCursor *, bool)
void register_with_memento_command_factory(PBD::ID, PBD::StatefulDestructible *)
void add_instant_xml(XMLNode &)
Gtk::Notebook _the_notebook
std::list< boost::shared_ptr< Route > > RouteList
RegionView * entered_regionview
void set_overlays_dirty()
uint32_t location_punch_color
void set_loop_from_region(bool play)
Gtk::Menu * transport_marker_menu
void set_zoom_preset(int64_t)
void suspend_route_redisplay()
RhythmFerret * rhythm_ferret
void use_copy_playlist(bool prompt, std::vector< boost::shared_ptr< ARDOUR::Playlist > > const &)
void hide_track_in_display(TimeAxisView *tv, bool apply_to_selection=false)
static double timebar_height
void add_route(Gtk::Window *float_window)
void set_hidden(bool yn, void *src)
double snap_threshold
Snap threshold in pixels.
ARDOUR::Session * _session
void show_region_in_region_list()
void apply_with_metrics(T &obj, void(T::*method)(const Metrics &))
boost::shared_ptr< ARDOUR::Route > route() const
bool sync_track_view_list_and_routes()
void AddMenuElem(Gtk::Menu_Helpers::MenuElem e)
Glib::RefPtr< Gtk::ActionGroup > editor_actions
void map_parameters(boost::function< void(std::string)> &)
void scroll_backward(float pages=0.8f)
uint32_t location_loop_color
bool get_smart_mode() const
PBD::Signal0< void > changed
void fill_xfade_menu(Gtk::Menu_Helpers::MenuList &items, bool start)
std::map< ARDOUR::FadeShape, Gtk::Image * > _fade_out_images
std::string string_compose(const std::string &fmt, const T1 &o1)
Glib::RefPtr< Gtk::Action > selection_redo_action
void transform_regions(const RegionSelection &rs)
uint32_t count_regions_at(framepos_t) const
void ensure_visual_change_idle_handler()
static const int32_t default_height
double atof(const string &s)
void control_vertical_zoom_in_selected()
void temporal_zoom_selection(bool both_axes=false)
unsigned get_grid_beat_divisions(framepos_t position)
Gtk::Menu track_selection_context_menu
Gtk::Dialog * lock_dialog
void mapped_clear_playlist(RouteTimeAxisView &, uint32_t)
void align_regions(ARDOUR::RegionPoint)
Gtk::Menu track_context_menu
Children get_child_list()
static void pane_size_watcher(Paned *pane)
ArdourButton nudge_forward_button
Editing::MouseMode mouse_mode
RegionView * clicked_regionview
void reposition_and_zoom(framepos_t, double)
bool on_key_release_event(GdkEventKey *)
sigc::connection step_edit_connection
void edit_control_point(ArdourCanvas::Item *)
PBD::Signal1< void, RouteList & > RouteAdded
sigc::signal< void > RegionViewRemoved
bool autoscroll_horizontal_allowed
Glib::RefPtr< Gtk::ActionGroup > _region_actions
void snap_to(framepos_t &first, ARDOUR::RoundMode direction=ARDOUR::RoundNearest, bool for_mark=false)
int set_state(XMLNode const &, int)
bool _pending_locate_request
Location * auto_punch_location() const
boost::optional< framepos_t > _control_scroll_target