2 * Copyright (C) 2005-2019 Paul Davis <paul@linuxaudiosystems.com>
3 * Copyright (C) 2005 Karsten Wiese <fzuuzf@googlemail.com>
4 * Copyright (C) 2005 Taybin Rutkin <taybin@taybin.com>
5 * Copyright (C) 2006-2007 Doug McLain <doug@nostar.net>
6 * Copyright (C) 2006-2011 David Robillard <d@drobilla.net>
7 * Copyright (C) 2007-2012 Carl Hetherington <carl@carlh.net>
8 * Copyright (C) 2007-2015 Tim Mayberry <mojofunk@gmail.com>
9 * Copyright (C) 2008 Hans Baier <hansfbaier@googlemail.com>
10 * Copyright (C) 2012-2015 Colin Fletcher <colin.m.fletcher@googlemail.com>
11 * Copyright (C) 2013-2015 Nick Mainsbridge <mainsbridge@gmail.com>
12 * Copyright (C) 2013-2016 John Emmas <john@creativepost.co.uk>
13 * Copyright (C) 2013-2019 Robin Gareus <robin@gareus.org>
14 * Copyright (C) 2014-2018 Ben Loftis <ben@harrisonconsoles.com>
15 * Copyright (C) 2017 Johannes Mueller <github@johannes-mueller.org>
16 * Copyright (C) 2018 Len Ovens <len@ovenwerks.net>
18 * This program is free software; you can redistribute it and/or modify
19 * it under the terms of the GNU General Public License as published by
20 * the Free Software Foundation; either version 2 of the License, or
21 * (at your option) any later version.
23 * This program is distributed in the hope that it will be useful,
24 * but WITHOUT ANY WARRANTY; without even the implied warranty of
25 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
26 * GNU General Public License for more details.
28 * You should have received a copy of the GNU General Public License along
29 * with this program; if not, write to the Free Software Foundation, Inc.,
30 * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
33 #ifndef __ardour_gui_h__
34 #define __ardour_gui_h__
38 /* need _BSD_SOURCE to get timersub macros */
52 #include "pbd/xml++.h"
53 #include <gtkmm/box.h>
54 #include <gtkmm/frame.h>
55 #include <gtkmm/label.h>
56 #include <gtkmm/table.h>
57 #include <gtkmm/fixed.h>
58 #include <gtkmm/drawingarea.h>
59 #include <gtkmm/eventbox.h>
60 #include <gtkmm/menu.h>
61 #include <gtkmm/menuitem.h>
62 #include <gtkmm/messagedialog.h>
63 #include <gtkmm/notebook.h>
64 #include <gtkmm/button.h>
65 #include <gtkmm/togglebutton.h>
66 #include <gtkmm/treeview.h>
67 #include <gtkmm/menubar.h>
68 #include <gtkmm/textbuffer.h>
69 #include <gtkmm/adjustment.h>
71 #include "gtkmm2ext/gtk_ui.h"
72 #include "gtkmm2ext/bindings.h"
73 #include "gtkmm2ext/visibility_tracker.h"
75 #include "ardour/ardour.h"
76 #include "ardour/types.h"
77 #include "ardour/utils.h"
78 #include "ardour/plugin.h"
79 #include "ardour/session_handle.h"
80 #include "ardour/system_exec.h"
82 #include "video_timeline.h"
84 #include "widgets/ardour_button.h"
85 #include "widgets/ardour_spacer.h"
87 #include "add_route_dialog.h"
88 #include "ardour_dialog.h"
89 #include "ardour_window.h"
92 #include "mini_timeline.h"
93 #include "shuttle_control.h"
94 #include "transport_control.h"
95 #include "transport_control_ui.h"
96 #include "visibility_group.h"
97 #include "window_manager.h"
101 #include "add_video_dialog.h"
102 #include "big_clock_window.h"
103 #include "big_transport_window.h"
104 #include "bundle_manager.h"
105 #include "engine_dialog.h"
106 #include "export_video_dialog.h"
107 #include "global_port_matrix.h"
108 #include "idleometer.h"
109 #include "keyeditor.h"
110 #include "location_ui.h"
111 #include "lua_script_manager.h"
112 #include "plugin_dspload_window.h"
113 #include "rc_option_editor.h"
114 #include "route_dialogs.h"
115 #include "route_params_ui.h"
116 #include "session_option_editor.h"
117 #include "speaker_dialog.h"
118 #include "transport_masters_dialog.h"
121 class AddRouteDialog;
122 class AddVideoDialog;
123 class BigClockWindow;
124 class BigTransportWindow;
127 class ExportVideoDialog;
129 class LocationUIWindow;
130 class LuaScriptManager;
131 class RCOptionEditor;
132 class RouteParams_UI;
133 class SessionOptionEditor;
135 class GlobalPortMatrixWindow;
137 class PluginDSPLoadWindow;
138 class TransportMastersWindow;
142 class ArdourKeyboard;
144 class ConnectionEditor;
145 class DuplicateRouteDialog;
150 class SaveTemplateDialog;
152 class SessionOptionEditorWindow;
159 class LevelMeterHBox;
160 class GUIObjectState;
163 class ControlProtocolInfo;
176 namespace ArdourWidgets {
181 #define MAX_LUA_ACTION_SCRIPTS 12
183 class ARDOUR_UI : public Gtkmm2ext::UI, public ARDOUR::SessionHandlePtr, public TransportControlProvider
186 ARDOUR_UI (int *argcp, char **argvp[], const char* localedir);
189 bool run_startup (bool should_be_new, std::string load_template);
195 void launch_manual ();
196 void launch_reference ();
197 void launch_tracker ();
198 void launch_subscribe ();
199 void launch_cheat_sheet ();
200 void launch_website ();
201 void launch_website_dev ();
202 void launch_forums ();
203 void launch_howto_report ();
207 void load_from_application_api (const std::string& path);
210 int load_session (const std::string& path, const std::string& snapshot, std::string mix_template = std::string());
211 bool session_load_in_progress;
212 int build_session (const std::string& path, const std::string& snapshot, ARDOUR::BusProfile*);
213 bool session_is_new() const { return _session_is_new; }
215 ARDOUR::Session* the_session() { return _session; }
217 bool get_smart_mode () const;
219 RCOptionEditor* get_rc_option_editor() { return rc_option_editor; }
220 void show_tabbable (ArdourWidgets::Tabbable*);
222 int get_session_parameters (bool quit_on_cancel, bool should_be_new = false, std::string load_template = "");
223 int build_session_from_dialog (SessionDialog&, const std::string& session_name, const std::string& session_path);
224 bool ask_about_loading_existing_session (const std::string& session_path);
226 /// @return true if session was successfully unloaded.
227 int unload_session (bool hide_stuff = false);
228 void close_session();
230 int save_state_canfail (std::string state_name = "", bool switch_to_it = false);
231 void save_state (const std::string & state_name = "", bool switch_to_it = false);
233 static ARDOUR_UI *instance () { return theArdourUI; }
235 /* signal emitted when escape key is pressed. All UI components that
236 need to respond to Escape in some way (e.g. break drag, clear
237 selection, etc) should connect to and handle this.
239 PBD::Signal0<void> Escape;
241 PublicEditor& the_editor() { return *editor;}
242 Mixer_UI* the_mixer() { return mixer; }
244 Gtk::Menu* shared_popup_menu ();
246 void new_midi_tracer_window ();
247 void toggle_editing_space();
248 void toggle_mixer_space();
249 void toggle_keep_tearoffs();
251 void reset_focus (Gtk::Widget*);
253 static PublicEditor* _instance;
255 /** Emitted frequently with the audible sample, false, and the edit point as
256 * parameters respectively.
258 * (either RapidScreenUpdate || SuperRapidScreenUpdate - user-config)
260 static sigc::signal<void, samplepos_t> Clock;
262 static void close_all_dialogs () { CloseAllDialogs(); }
263 static sigc::signal<void> CloseAllDialogs;
265 XMLNode* main_window_settings() const;
266 XMLNode* editor_settings() const;
267 XMLNode* preferences_settings() const;
268 XMLNode* mixer_settings () const;
269 XMLNode* keyboard_settings () const;
270 XMLNode* tearoff_settings (const char*) const;
272 void save_ardour_state ();
273 gboolean configure_handler (GdkEventConfigure* conf);
275 void halt_on_xrun_message ();
276 void xrun_handler (samplepos_t);
277 void create_xrun_marker (samplepos_t);
279 GUIObjectState* gui_object_state;
281 MainClock* primary_clock;
282 MainClock* secondary_clock;
283 void focus_on_clock ();
284 AudioClock* big_clock;
286 VideoTimeLine *video_timeline;
288 void store_clock_modes ();
289 void restore_clock_modes ();
290 void reset_main_clocks ();
292 void synchronize_sync_source_and_video_pullup ();
295 void add_route_dialog_response (int);
297 void add_routes_part_two ();
298 void add_routes_thread ();
300 void start_duplicate_routes ();
302 void add_video (Gtk::Window* float_window);
303 void remove_video ();
304 void start_video_server_menu (Gtk::Window* float_window);
305 bool start_video_server (Gtk::Window* float_window, bool popup_msg);
306 void stop_video_server (bool ask_confirm=false);
307 void flush_videotimeline_cache (bool localcacheonly=false);
308 void export_video (bool range = false);
310 void session_add_audio_route (bool, int32_t, int32_t, ARDOUR::TrackMode, ARDOUR::RouteGroup *,
311 uint32_t, std::string const &, bool, ARDOUR::PresentationInfo::order_t order);
313 void session_add_mixed_track (const ARDOUR::ChanCount&, const ARDOUR::ChanCount&, ARDOUR::RouteGroup*,
314 uint32_t, std::string const &, bool strict_io,
315 ARDOUR::PluginInfoPtr, ARDOUR::Plugin::PresetRecord* pset,
316 ARDOUR::PresentationInfo::order_t order);
318 void session_add_midi_bus (ARDOUR::RouteGroup*, uint32_t, std::string const &, bool strict_io,
319 ARDOUR::PluginInfoPtr, ARDOUR::Plugin::PresetRecord* pset,
320 ARDOUR::PresentationInfo::order_t order);
322 void session_add_midi_route (bool, ARDOUR::RouteGroup *, uint32_t, std::string const &, bool,
323 ARDOUR::PluginInfoPtr, ARDOUR::Plugin::PresetRecord*,
324 ARDOUR::PresentationInfo::order_t order);
326 void session_add_foldback_bus (int32_t, uint32_t, std::string const &);
328 void display_insufficient_ports_message ();
330 void attach_to_engine ();
333 gint exit_on_main_window_close (GdkEventAny *);
335 void maximise_editing_space ();
336 void restore_editing_space ();
338 void show_ui_prefs ();
340 bool check_audioengine(Gtk::Window&);
342 void setup_profile ();
343 void setup_tooltips ();
345 void set_shuttle_fract (double);
347 void get_process_buffers ();
348 void drop_process_buffers ();
350 void reset_peak_display ();
351 void reset_route_peak_display (ARDOUR::Route*);
352 void reset_group_peak_display (ARDOUR::RouteGroup*);
354 const std::string& announce_string() const { return _announce_string; }
356 void hide_application ();
358 Gtk::Notebook& tabs();
359 Gtk::Window& main_window () { return _main_window; }
361 void setup_toplevel_window (Gtk::Window&, const std::string& name, void* owner);
363 /* called from a static C function */
365 GtkNotebook* tab_window_root_drop (GtkNotebook* src,
371 bool tabbed_window_state_event_handler (GdkEventWindowState*, void* object);
372 bool key_event_handler (GdkEventKey*, Gtk::Window* window);
374 ARDOUR::PresentationInfo::order_t translate_order (RouteDialogs::InsertAt);
376 std::map<std::string, std::string> route_setup_info (const std::string& script_path);
379 friend class PublicEditor;
381 void toggle_use_monitor_section ();
382 void monitor_dim_all ();
383 void monitor_cut_all ();
384 void monitor_mono ();
386 void toggle_auto_play ();
387 void toggle_auto_input ();
388 void toggle_punch ();
389 void unset_dual_punch ();
390 bool ignore_dual_punch;
391 void toggle_punch_in ();
392 void toggle_punch_out ();
393 void toggle_session_monitoring_in ();
394 void toggle_session_monitoring_disk ();
395 void show_loop_punch_ruler_and_disallow_hide ();
396 void reenable_hide_loop_punch_ruler_if_appropriate ();
397 void toggle_auto_return ();
398 void toggle_click ();
399 void toggle_audio_midi_setup ();
400 void toggle_session_auto_loop ();
401 void toggle_rc_options_window ();
402 void toggle_session_options_window ();
406 Gtk::Window _main_window;
407 Gtkmm2ext::VisibilityTracker* main_window_visibility;
408 Gtk::VBox main_vpacker;
409 Gtk::HBox status_bar_hpacker;
411 PublicEditor* editor;
413 Gtk::Tooltips _tooltips;
417 bool _initial_verbose_plugin_scan;
419 Gtk::Menu* _shared_popup_menu;
421 void hide_tabbable (ArdourWidgets::Tabbable*);
422 void detach_tabbable (ArdourWidgets::Tabbable*);
423 void attach_tabbable (ArdourWidgets::Tabbable*);
424 void button_change_tabbable_visibility (ArdourWidgets::Tabbable*);
425 void key_change_tabbable_visibility (ArdourWidgets::Tabbable*);
426 void toggle_editor_and_mixer ();
428 void tabbable_state_change (ArdourWidgets::Tabbable&);
430 void toggle_meterbridge ();
431 void toggle_luawindow ();
433 int setup_windows ();
434 void setup_transport ();
437 static ARDOUR_UI *theArdourUI;
438 SessionDialog *_session_dialog;
442 int ask_about_saving_session (const std::vector<std::string>& actions);
444 void save_session_at_its_request (std::string);
445 /* periodic safety backup, to be precise */
446 gint autosave_session();
447 void update_autosave();
448 sigc::connection _autosave_connection;
450 void session_dirty_changed ();
451 void update_title ();
453 void map_transport_state ();
454 int32_t do_engine_start ();
456 void engine_halted (const char* reason, bool free_reason);
457 void engine_stopped ();
458 void engine_running (uint32_t cnt);
462 void about_signal_response(int response);
464 Gtk::VBox top_packer;
466 sigc::connection clock_signal_connection;
467 void update_clocks ();
468 void start_clocking ();
469 void stop_clocking ();
471 void update_transport_clocks (samplepos_t pos);
472 void record_state_changed ();
474 std::list<MidiTracer*> _midi_tracer_windows;
476 /* Transport Control */
478 Gtk::Table transport_table;
479 Gtk::Frame transport_frame;
480 Gtk::HBox transport_hbox;
482 ArdourWidgets::ArdourVSpacer* secondary_clock_spacer;
483 void repack_transport_hbox ();
484 void update_clock_visibility ();
485 void toggle_follow_edits ();
487 void set_transport_controllable_state (const XMLNode&);
488 XMLNode& get_transport_controllable_state ();
490 TransportControlUI transport_ctrl;
492 ArdourWidgets::ArdourButton punch_in_button;
493 ArdourWidgets::ArdourButton punch_out_button;
494 ArdourWidgets::ArdourButton layered_button;
496 ArdourWidgets::ArdourVSpacer recpunch_spacer;
497 ArdourWidgets::ArdourVSpacer monitoring_spacer;
499 ArdourWidgets::ArdourButton monitor_in_button;
500 ArdourWidgets::ArdourButton monitor_disk_button;
501 ArdourWidgets::ArdourButton auto_input_button;
503 Gtk::Label punch_label;
504 Gtk::Label layered_label;
506 Gtk::Label punch_space;
507 Gtk::Label mon_space;
509 void toggle_external_sync ();
510 void toggle_time_master ();
511 void toggle_video_sync ();
513 ShuttleControl shuttle_box;
514 MiniTimeline mini_timeline;
515 TimeInfoBox* time_info_box;
518 ArdourWidgets::ArdourVSpacer meterbox_spacer;
519 ArdourWidgets::ArdourVSpacer meterbox_spacer2;
521 ArdourWidgets::ArdourButton auto_return_button;
522 ArdourWidgets::ArdourButton follow_edits_button;
523 ArdourWidgets::ArdourButton sync_button;
525 ArdourWidgets::ArdourButton auditioning_alert_button;
526 ArdourWidgets::ArdourButton solo_alert_button;
527 ArdourWidgets::ArdourButton feedback_alert_button;
528 ArdourWidgets::ArdourButton error_alert_button;
530 ArdourWidgets::ArdourButton action_script_call_btn[MAX_LUA_ACTION_SCRIPTS];
531 Gtk::Table action_script_table;
534 Gtk::Table editor_meter_table;
535 ArdourWidgets::ArdourButton editor_meter_peak_display;
536 LevelMeterHBox * editor_meter;
537 float editor_meter_max_peak;
538 bool editor_meter_peak_button_release (GdkEventButton*);
540 void blink_handler (bool);
541 sigc::connection blink_connection;
544 void solo_blink (bool);
545 void sync_blink (bool);
546 void audition_blink (bool);
547 void feedback_blink (bool);
548 void error_blink (bool);
550 void set_flat_buttons();
552 void soloing_changed (bool);
553 void auditioning_changed (bool);
554 void _auditioning_changed (bool);
556 bool solo_alert_press (GdkEventButton* ev);
557 void audition_alert_clicked ();
558 bool error_alert_press (GdkEventButton *);
560 void layered_button_clicked ();
562 void big_clock_value_changed ();
563 void primary_clock_value_changed ();
564 void secondary_clock_value_changed ();
566 /* called by Blink signal */
568 void transport_rec_enable_blink (bool onoff);
570 /* menu bar and associated stuff */
572 Gtk::MenuBar* menu_bar;
573 Gtk::EventBox menu_bar_base;
576 void use_menubar_as_top_menubar ();
577 void build_menu_bar ();
579 Gtk::Label wall_clock_label;
580 gint update_wall_clock ();
582 Gtk::Label disk_space_label;
583 void update_disk_space ();
584 void format_disk_space_label (float);
586 Gtk::Label timecode_format_label;
587 void update_timecode_format ();
589 Gtk::Label dsp_load_label;
590 void update_cpu_load ();
592 Gtk::Label peak_thread_work_label;
593 void update_peak_thread_work ();
595 Gtk::Label sample_rate_label;
596 void update_sample_rate (ARDOUR::samplecnt_t);
598 Gtk::Label format_label;
599 void update_format ();
601 void every_second ();
602 void every_point_one_seconds ();
603 void every_point_zero_something_seconds ();
605 sigc::connection second_connection;
606 sigc::connection point_one_second_connection;
607 sigc::connection point_zero_something_second_connection;
608 sigc::connection fps_connection;
610 void set_fps_timeout_connection ();
612 void open_session ();
613 void open_recent_session ();
614 void save_template_dialog_response (int response, SaveTemplateDialog* d);
615 void save_template ();
616 void manage_templates ();
618 void meta_session_setup (const std::string& script_path);
619 void meta_route_setup (const std::string& script_path);
621 void edit_metadata ();
622 void import_metadata ();
624 void set_transport_sensitivity (bool);
626 //stuff for ProTools-style numpad
627 void transport_numpad_event (int num);
628 void transport_numpad_decimal ();
629 bool _numpad_locate_happening;
630 int _pending_locate_num;
631 gint transport_numpad_timeout ();
632 sigc::connection _numpad_timeout_connection;
634 void transport_goto_nth_marker (int nth);
635 void transport_goto_zero ();
636 void transport_goto_start ();
637 void transport_goto_end ();
638 void transport_goto_wallclock ();
639 void transport_stop ();
640 void transport_record (bool roll);
641 void transport_roll ();
642 void transport_play_selection();
643 void transport_play_preroll();
644 void transport_rec_preroll();
645 void transport_rec_count_in();
646 void transport_forward (int option);
647 void transport_rewind (int option);
648 void transport_loop ();
649 void toggle_roll (bool with_abort, bool roll_out_of_bounded_mode);
650 bool trx_record_enable_all_tracks ();
652 bool _session_is_new;
653 void set_session (ARDOUR::Session *);
654 void connect_dependents_to_session (ARDOUR::Session *);
655 void we_have_dependents ();
657 void setup_session_options ();
659 guint32 last_key_press_time;
661 bool process_snapshot_session_prompter (ArdourWidgets::Prompter& prompter, bool switch_to_it);
662 void snapshot_session (bool switch_to_it);
664 void quick_snapshot_session (bool switch_to_it); //does not promtp for name, just makes a timestamped file
666 SaveAsDialog* save_as_dialog;
668 bool save_as_progress_update (float fraction, int64_t cnt, int64_t total, Gtk::Label* label, Gtk::ProgressBar* bar);
669 void save_session_as ();
670 void archive_session ();
671 void rename_session ();
674 int create_editor ();
675 int create_meterbridge ();
676 int create_luawindow ();
677 int create_masters ();
679 Meterbridge *meterbridge;
680 LuaWindow *luawindow;
682 /* Dialogs that can be created via new<T> */
684 RCOptionEditor* rc_option_editor;
685 Gtk::HBox rc_option_editor_placeholder;
687 WM::Proxy<SpeakerDialog> speaker_config_window;
688 WM::Proxy<AddRouteDialog> add_route_dialog;
689 WM::Proxy<About> about;
690 WM::Proxy<LocationUIWindow> location_ui;
691 WM::Proxy<RouteParams_UI> route_params;
692 WM::Proxy<EngineControl> audio_midi_setup;
693 WM::Proxy<ExportVideoDialog> export_video_dialog;
694 WM::Proxy<LuaScriptManager> lua_script_window;
695 WM::Proxy<IdleOMeter> idleometer;
696 WM::Proxy<PluginDSPLoadWindow> plugin_dsp_load_window;
697 WM::Proxy<TransportMastersWindow> transport_masters_window;
699 /* Windows/Dialogs that require a creator method */
701 WM::ProxyWithConstructor<SessionOptionEditor> session_option_editor;
702 WM::ProxyWithConstructor<AddVideoDialog> add_video_dialog;
703 WM::ProxyWithConstructor<BundleManager> bundle_manager;
704 WM::ProxyWithConstructor<BigClockWindow> big_clock_window;
705 WM::ProxyWithConstructor<BigTransportWindow> big_transport_window;
706 WM::ProxyWithConstructor<GlobalPortMatrixWindow> audio_port_matrix;
707 WM::ProxyWithConstructor<GlobalPortMatrixWindow> midi_port_matrix;
708 WM::ProxyWithConstructor<KeyEditor> key_editor;
710 /* creator methods */
712 SessionOptionEditor* create_session_option_editor ();
713 BundleManager* create_bundle_manager ();
714 AddVideoDialog* create_add_video_dialog ();
715 BigClockWindow* create_big_clock_window();
716 BigTransportWindow* create_big_transport_window();
717 GlobalPortMatrixWindow* create_global_port_matrix (ARDOUR::DataType);
718 KeyEditor* create_key_editor ();
720 ARDOUR::SystemExec *video_server_process;
722 void handle_locations_change (ARDOUR::Location*);
724 /* Keyboard Handling */
726 ArdourKeyboard* keyboard;
728 /* Keymap handling */
730 void install_actions ();
731 void install_dependent_actions ();
733 void toggle_record_enable (uint16_t);
735 uint32_t rec_enabled_streams;
736 void count_recenabled_streams (ARDOUR::Route&);
740 void pop_back_splash (Gtk::Window&);
744 Gtk::MenuItem *cleanup_item;
746 void display_cleanup_results (ARDOUR::CleanupReport& rep, const gchar* list_title, const bool msg_delete);
748 void cleanup_peakfiles ();
751 bool have_configure_timeout;
752 ARDOUR::microseconds_t last_configure_time;
753 gint configure_timeout ();
755 ARDOUR::microseconds_t last_peak_grab;
756 ARDOUR::microseconds_t last_shuttle_request;
758 bool have_disk_speed_dialog_displayed;
759 void disk_speed_dialog_gone (int ignored_response, Gtk::MessageDialog*);
760 void disk_overrun_handler ();
761 void disk_underrun_handler ();
762 void gui_idle_handler ();
764 void cancel_plugin_scan ();
765 void cancel_plugin_timeout ();
766 void plugin_scan_dialog (std::string type, std::string plugin, bool);
767 void plugin_scan_timeout (int);
769 void session_format_mismatch (std::string, std::string);
771 void session_dialog (std::string);
772 int pending_state_dialog ();
773 int sr_mismatch_dialog (ARDOUR::samplecnt_t, ARDOUR::samplecnt_t);
774 void sr_mismatch_message (ARDOUR::samplecnt_t, ARDOUR::samplecnt_t);
776 Gtk::MenuItem* jack_disconnect_item;
777 Gtk::MenuItem* jack_reconnect_item;
778 Gtk::Menu* jack_bufsize_menu;
780 Glib::RefPtr<Gtk::ActionGroup> common_actions;
782 void editor_realized ();
784 std::vector<std::string> positional_sync_strings;
786 void toggle_use_mmc ();
787 void toggle_send_mmc ();
788 void toggle_send_mtc ();
789 void toggle_send_midi_clock ();
791 void toggle_use_osc ();
793 void parameter_changed (std::string);
794 void session_parameter_changed (std::string);
798 void check_memory_locking ();
800 void audioengine_setup ();
802 void display_message (const char* prefix, gint prefix_len, Glib::RefPtr<Gtk::TextBuffer::Tag>, Glib::RefPtr<Gtk::TextBuffer::Tag>, const char* msg);
803 Gtk::Label status_bar_label;
804 bool status_bar_button_press (GdkEventButton*);
806 void loading_message (const std::string& msg);
808 PBD::ScopedConnectionList forever_connections;
809 PBD::ScopedConnection halt_connection;
810 PBD::ScopedConnection editor_meter_connection;
812 /* these are used only in response to a platform-specific "ShouldQuit" signal */
814 void queue_finish ();
815 void fontconfig_dialog ();
817 int missing_file (ARDOUR::Session*s, std::string str, ARDOUR::DataType type);
818 int ambiguous_file (std::string file, std::vector<std::string> hits);
820 bool click_button_clicked (GdkEventButton *);
821 bool sync_button_clicked (GdkEventButton *);
823 VisibilityGroup _status_bar_visibility;
825 /** A ProcessThread so that we have some thread-local buffers for use by
826 * PluginEqGui::impulse_analysis ().
828 ARDOUR::ProcessThread* _process_thread;
830 void feedback_detected ();
832 ArdourWidgets::ArdourButton midi_panic_button;
835 void successful_graph_sort ();
836 bool _feedback_exists;
838 enum ArdourLogLevel {
845 ArdourLogLevel _log_not_acknowledged;
847 void on_theme_changed ();
849 bool xrun_button_release (GdkEventButton* ev);
851 std::string _announce_string;
852 void check_announcements ();
854 int do_audio_midi_setup (uint32_t);
855 void audioengine_became_silent ();
857 DuplicateRouteDialog* duplicate_routes_dialog;
859 void grab_focus_after_dialog ();
861 void tabs_switch (GtkNotebookPage*, guint page_number);
862 void tabs_page_added (Gtk::Widget*, guint);
863 void tabs_page_removed (Gtk::Widget*, guint);
864 ArdourWidgets::ArdourButton editor_visibility_button;
865 ArdourWidgets::ArdourButton mixer_visibility_button;
866 ArdourWidgets::ArdourButton prefs_visibility_button;
868 bool key_press_focus_accelerator_handler (Gtk::Window& window, GdkEventKey* ev, Gtkmm2ext::Bindings*);
869 bool try_gtk_accel_binding (GtkWindow* win, GdkEventKey* ev, bool translate, GdkModifierType modifier);
871 bool main_window_delete_event (GdkEventAny*);
872 bool idle_ask_about_quit ();
874 bool tabbable_visibility_button_press (GdkEventButton* ev, std::string const& tabbable_name);
876 void step_up_through_tabs ();
877 void step_down_through_tabs ();
880 void close_current_dialog ();
881 void pre_release_dialog ();
883 bool bind_lua_action_script (GdkEventButton*, int);
884 void update_action_script_btn (int i, const std::string&);
887 #endif /* __ardour_gui_h__ */