2 Copyright (C) 1999-2002 Paul Davis
4 This program is free software; you can redistribute it and/or modify
5 it under the terms of the GNU General Public License as published by
6 the Free Software Foundation; either version 2 of the License, or
7 (at your option) any later version.
9 This program is distributed in the hope that it will be useful,
10 but WITHOUT ANY WARRANTY; without even the implied warranty of
11 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 GNU General Public License for more details.
14 You should have received a copy of the GNU General Public License
15 along with this program; if not, write to the Free Software
16 Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
20 #ifndef __ardour_gui_h__
21 #define __ardour_gui_h__
25 /* need _BSD_SOURCE to get timersub macros */
39 #include "pbd/xml++.h"
40 #include <gtkmm/box.h>
41 #include <gtkmm/frame.h>
42 #include <gtkmm/label.h>
43 #include <gtkmm/table.h>
44 #include <gtkmm/fixed.h>
45 #include <gtkmm/drawingarea.h>
46 #include <gtkmm/eventbox.h>
47 #include <gtkmm/menu.h>
48 #include <gtkmm/menuitem.h>
49 #include <gtkmm/messagedialog.h>
50 #include <gtkmm/notebook.h>
51 #include <gtkmm/button.h>
52 #include <gtkmm/togglebutton.h>
53 #include <gtkmm/treeview.h>
54 #include <gtkmm/menubar.h>
55 #include <gtkmm/textbuffer.h>
56 #include <gtkmm/adjustment.h>
58 #include "gtkmm2ext/gtk_ui.h"
59 #include "gtkmm2ext/bindings.h"
60 #include "gtkmm2ext/visibility_tracker.h"
62 #include "ardour/ardour.h"
63 #include "ardour/types.h"
64 #include "ardour/utils.h"
65 #include "ardour/plugin.h"
66 #include "ardour/session_handle.h"
67 #include "ardour/system_exec.h"
69 #include "video_timeline.h"
71 #include "widgets/ardour_button.h"
72 #include "widgets/ardour_spacer.h"
74 #include "add_route_dialog.h"
75 #include "ardour_dialog.h"
76 #include "ardour_window.h"
79 #include "mini_timeline.h"
80 #include "shuttle_control.h"
81 #include "transport_control.h"
82 #include "transport_control_ui.h"
83 #include "visibility_group.h"
84 #include "window_manager.h"
88 #include "add_video_dialog.h"
89 #include "big_clock_window.h"
90 #include "big_transport_window.h"
91 #include "bundle_manager.h"
92 #include "engine_dialog.h"
93 #include "export_video_dialog.h"
94 #include "global_port_matrix.h"
95 #include "idleometer.h"
96 #include "keyeditor.h"
97 #include "location_ui.h"
98 #include "lua_script_manager.h"
99 #include "rc_option_editor.h"
100 #include "route_dialogs.h"
101 #include "route_params_ui.h"
102 #include "session_option_editor.h"
103 #include "speaker_dialog.h"
106 class AddRouteDialog;
107 class AddVideoDialog;
108 class BigClockWindow;
109 class BigTransportWindow;
112 class ExportVideoDialog;
114 class LocationUIWindow;
115 class LuaScriptManager;
116 class RCOptionEditor;
117 class RouteParams_UI;
118 class SessionOptionEditor;
120 class GlobalPortMatrixWindow;
125 class ArdourKeyboard;
127 class ConnectionEditor;
128 class DuplicateRouteDialog;
133 class SaveTemplateDialog;
135 class SessionOptionEditorWindow;
142 class LevelMeterHBox;
143 class GUIObjectState;
146 class ControlProtocolInfo;
159 namespace ArdourWidgets {
164 class ARDOUR_UI : public Gtkmm2ext::UI, public ARDOUR::SessionHandlePtr, public TransportControlProvider
167 ARDOUR_UI (int *argcp, char **argvp[], const char* localedir);
170 bool run_startup (bool should_be_new, std::string load_template);
176 void launch_manual ();
177 void launch_reference ();
178 void launch_tracker ();
179 void launch_subscribe ();
180 void launch_cheat_sheet ();
181 void launch_website ();
182 void launch_website_dev ();
183 void launch_forums ();
184 void launch_howto_report ();
188 void load_from_application_api (const std::string& path);
191 int load_session (const std::string& path, const std::string& snapshot, std::string mix_template = std::string());
193 bool session_load_in_progress;
194 int build_session (const std::string& path, const std::string& snapshot, ARDOUR::BusProfile*);
195 bool session_is_new() const { return _session_is_new; }
197 ARDOUR::Session* the_session() { return _session; }
199 bool get_smart_mode () const;
201 RCOptionEditor* get_rc_option_editor() { return rc_option_editor; }
202 void show_tabbable (ArdourWidgets::Tabbable*);
204 int get_session_parameters (bool quit_on_cancel, bool should_be_new = false, std::string load_template = "");
205 int build_session_from_dialog (SessionDialog&, const std::string& session_name, const std::string& session_path);
206 bool ask_about_loading_existing_session (const std::string& session_path);
208 /// @return true if session was successfully unloaded.
209 int unload_session (bool hide_stuff = false);
210 void close_session();
212 int save_state_canfail (std::string state_name = "", bool switch_to_it = false);
213 void save_state (const std::string & state_name = "", bool switch_to_it = false);
215 static ARDOUR_UI *instance () { return theArdourUI; }
217 /* signal emitted when escape key is pressed. All UI components that
218 need to respond to Escape in some way (e.g. break drag, clear
219 selection, etc) should connect to and handle this.
221 PBD::Signal0<void> Escape;
223 PublicEditor& the_editor() { return *editor;}
224 Mixer_UI* the_mixer() { return mixer; }
226 void new_midi_tracer_window ();
227 void toggle_editing_space();
228 void toggle_mixer_space();
229 void toggle_mixer_list();
230 void toggle_monitor_section_visibility ();
231 void toggle_keep_tearoffs();
233 void reset_focus (Gtk::Widget*);
235 static PublicEditor* _instance;
237 /** Emitted frequently with the audible sample, false, and the edit point as
238 * parameters respectively.
240 * (either RapidScreenUpdate || SuperRapidScreenUpdate - user-config)
242 static sigc::signal<void, samplepos_t> Clock;
244 static void close_all_dialogs () { CloseAllDialogs(); }
245 static sigc::signal<void> CloseAllDialogs;
247 XMLNode* main_window_settings() const;
248 XMLNode* editor_settings() const;
249 XMLNode* preferences_settings() const;
250 XMLNode* mixer_settings () const;
251 XMLNode* keyboard_settings () const;
252 XMLNode* tearoff_settings (const char*) const;
254 void save_ardour_state ();
255 gboolean configure_handler (GdkEventConfigure* conf);
257 void halt_on_xrun_message ();
258 void xrun_handler (samplepos_t);
259 void create_xrun_marker (samplepos_t);
261 GUIObjectState* gui_object_state;
263 MainClock* primary_clock;
264 MainClock* secondary_clock;
265 void focus_on_clock ();
266 AudioClock* big_clock;
268 VideoTimeLine *video_timeline;
270 void store_clock_modes ();
271 void restore_clock_modes ();
272 void reset_main_clocks ();
274 void synchronize_sync_source_and_video_pullup ();
277 void add_route_dialog_response (int);
279 void add_routes_part_two ();
280 void add_routes_thread ();
282 void start_duplicate_routes ();
284 void add_video (Gtk::Window* float_window);
285 void remove_video ();
286 void start_video_server_menu (Gtk::Window* float_window);
287 bool start_video_server (Gtk::Window* float_window, bool popup_msg);
288 void stop_video_server (bool ask_confirm=false);
289 void flush_videotimeline_cache (bool localcacheonly=false);
290 void export_video (bool range = false);
292 void session_add_audio_route (bool, int32_t, int32_t, ARDOUR::TrackMode, ARDOUR::RouteGroup *, uint32_t, std::string const &, bool, ARDOUR::PresentationInfo::order_t order);
294 void session_add_mixed_track (const ARDOUR::ChanCount&, const ARDOUR::ChanCount&, ARDOUR::RouteGroup*,
295 uint32_t, std::string const &, bool strict_io,
296 ARDOUR::PluginInfoPtr, ARDOUR::Plugin::PresetRecord* pset,
297 ARDOUR::PresentationInfo::order_t order);
299 void session_add_midi_bus (ARDOUR::RouteGroup*, uint32_t, std::string const &, bool strict_io,
300 ARDOUR::PluginInfoPtr, ARDOUR::Plugin::PresetRecord* pset,
301 ARDOUR::PresentationInfo::order_t order);
303 void session_add_midi_route (bool, ARDOUR::RouteGroup *, uint32_t, std::string const &, bool,
304 ARDOUR::PluginInfoPtr, ARDOUR::Plugin::PresetRecord*,
305 ARDOUR::PresentationInfo::order_t order);
307 void display_insufficient_ports_message ();
309 void attach_to_engine ();
312 gint exit_on_main_window_close (GdkEventAny *);
314 void maximise_editing_space ();
315 void restore_editing_space ();
317 void show_ui_prefs ();
319 bool check_audioengine(Gtk::Window&);
321 void setup_profile ();
322 void setup_tooltips ();
324 void set_shuttle_fract (double);
326 void get_process_buffers ();
327 void drop_process_buffers ();
329 void reset_peak_display ();
330 void reset_route_peak_display (ARDOUR::Route*);
331 void reset_group_peak_display (ARDOUR::RouteGroup*);
333 const std::string& announce_string() const { return _announce_string; }
335 void hide_application ();
337 Gtk::Notebook& tabs();
338 Gtk::Window& main_window () { return _main_window; }
340 void setup_toplevel_window (Gtk::Window&, const std::string& name, void* owner);
342 /* called from a static C function */
344 GtkNotebook* tab_window_root_drop (GtkNotebook* src,
350 bool tabbed_window_state_event_handler (GdkEventWindowState*, void* object);
351 bool key_event_handler (GdkEventKey*, Gtk::Window* window);
353 Gtkmm2ext::ActionMap global_actions;
355 ARDOUR::PresentationInfo::order_t translate_order (RouteDialogs::InsertAt);
357 std::map<std::string, std::string> route_setup_info (const std::string& script_path);
360 friend class PublicEditor;
362 void toggle_auto_play ();
363 void toggle_auto_input ();
364 void toggle_punch ();
365 void unset_dual_punch ();
366 bool ignore_dual_punch;
367 void toggle_punch_in ();
368 void toggle_punch_out ();
369 void toggle_session_monitoring_in ();
370 void toggle_session_monitoring_disk ();
371 void show_loop_punch_ruler_and_disallow_hide ();
372 void reenable_hide_loop_punch_ruler_if_appropriate ();
373 void toggle_auto_return ();
374 void toggle_click ();
375 void toggle_audio_midi_setup ();
376 void toggle_session_auto_loop ();
377 void toggle_rc_options_window ();
378 void toggle_session_options_window ();
382 Gtk::Window _main_window;
383 Gtkmm2ext::VisibilityTracker* main_window_visibility;
384 Gtk::VBox main_vpacker;
385 Gtk::HBox status_bar_hpacker;
387 PublicEditor* editor;
389 Gtk::Tooltips _tooltips;
393 bool _initial_verbose_plugin_scan;
394 bool first_time_engine_run;
396 void hide_tabbable (ArdourWidgets::Tabbable*);
397 void detach_tabbable (ArdourWidgets::Tabbable*);
398 void attach_tabbable (ArdourWidgets::Tabbable*);
399 void button_change_tabbable_visibility (ArdourWidgets::Tabbable*);
400 void key_change_tabbable_visibility (ArdourWidgets::Tabbable*);
401 void toggle_editor_and_mixer ();
403 void tabbable_state_change (ArdourWidgets::Tabbable&);
405 void toggle_meterbridge ();
406 void toggle_luawindow ();
408 int setup_windows ();
409 void setup_transport ();
412 static ARDOUR_UI *theArdourUI;
413 SessionDialog *_session_dialog;
417 int ask_about_saving_session (const std::vector<std::string>& actions);
419 void save_session_at_its_request (std::string);
420 /* periodic safety backup, to be precise */
421 gint autosave_session();
422 void update_autosave();
423 sigc::connection _autosave_connection;
425 void session_dirty_changed ();
426 void update_title ();
428 void map_transport_state ();
429 int32_t do_engine_start ();
431 void engine_halted (const char* reason, bool free_reason);
432 void engine_stopped ();
433 void engine_running ();
437 void about_signal_response(int response);
439 Gtk::VBox top_packer;
441 sigc::connection clock_signal_connection;
442 void update_clocks ();
443 void start_clocking ();
444 void stop_clocking ();
446 void update_transport_clocks (samplepos_t pos);
447 void record_state_changed ();
449 std::list<MidiTracer*> _midi_tracer_windows;
451 /* Transport Control */
453 Gtk::Table transport_table;
454 Gtk::Frame transport_frame;
455 Gtk::HBox transport_hbox;
457 ArdourWidgets::ArdourVSpacer* secondary_clock_spacer;
458 void repack_transport_hbox ();
459 void update_clock_visibility ();
460 void toggle_follow_edits ();
462 void set_transport_controllable_state (const XMLNode&);
463 XMLNode& get_transport_controllable_state ();
465 TransportControlUI transport_ctrl;
467 ArdourWidgets::ArdourButton punch_in_button;
468 ArdourWidgets::ArdourButton punch_out_button;
469 ArdourWidgets::ArdourButton layered_button;
471 ArdourWidgets::ArdourVSpacer recpunch_spacer;
472 ArdourWidgets::ArdourVSpacer monitoring_spacer;
474 ArdourWidgets::ArdourButton monitor_in_button;
475 ArdourWidgets::ArdourButton monitor_disk_button;
476 ArdourWidgets::ArdourButton auto_input_button;
478 Gtk::Label punch_label;
479 Gtk::Label layered_label;
481 Gtk::Label punch_space;
482 Gtk::Label mon_space;
484 void toggle_external_sync ();
485 void toggle_time_master ();
486 void toggle_video_sync ();
488 ShuttleControl shuttle_box;
489 MiniTimeline mini_timeline;
490 TimeInfoBox* time_info_box;
493 ArdourWidgets::ArdourVSpacer meterbox_spacer;
494 ArdourWidgets::ArdourVSpacer meterbox_spacer2;
496 ArdourWidgets::ArdourButton auto_return_button;
497 ArdourWidgets::ArdourButton follow_edits_button;
498 ArdourWidgets::ArdourButton sync_button;
500 ArdourWidgets::ArdourButton auditioning_alert_button;
501 ArdourWidgets::ArdourButton solo_alert_button;
502 ArdourWidgets::ArdourButton feedback_alert_button;
503 ArdourWidgets::ArdourButton error_alert_button;
505 ArdourWidgets::ArdourButton action_script_call_btn[10];
506 Gtk::Table action_script_table;
509 Gtk::Table editor_meter_table;
510 ArdourWidgets::ArdourButton editor_meter_peak_display;
511 LevelMeterHBox * editor_meter;
512 float editor_meter_max_peak;
513 bool editor_meter_peak_button_release (GdkEventButton*);
515 bool editor_meter_button_press (GdkEventButton* ev);
516 void popup_editor_meter_menu (GdkEventButton* ev);
517 void add_editor_meter_type_item (Gtk::Menu_Helpers::MenuList&, Gtk::RadioMenuItem::Group&, std::string const &, ARDOUR::MeterType);
518 bool _suspend_editor_meter_callbacks;
520 void blink_handler (bool);
521 sigc::connection blink_connection;
524 void solo_blink (bool);
525 void sync_blink (bool);
526 void audition_blink (bool);
527 void feedback_blink (bool);
528 void error_blink (bool);
530 void set_flat_buttons();
532 void soloing_changed (bool);
533 void auditioning_changed (bool);
534 void _auditioning_changed (bool);
536 bool solo_alert_press (GdkEventButton* ev);
537 void audition_alert_clicked ();
538 bool error_alert_press (GdkEventButton *);
540 void layered_button_clicked ();
542 void big_clock_value_changed ();
543 void primary_clock_value_changed ();
544 void secondary_clock_value_changed ();
546 /* called by Blink signal */
548 void transport_rec_enable_blink (bool onoff);
550 Gtk::Menu* session_popup_menu;
552 /* menu bar and associated stuff */
554 Gtk::MenuBar* menu_bar;
555 Gtk::EventBox menu_bar_base;
558 void use_menubar_as_top_menubar ();
559 void build_menu_bar ();
561 Gtk::Label wall_clock_label;
562 gint update_wall_clock ();
564 Gtk::Label disk_space_label;
565 void update_disk_space ();
566 void format_disk_space_label (float);
568 Gtk::Label timecode_format_label;
569 void update_timecode_format ();
571 Gtk::Label dsp_load_label;
572 void update_cpu_load ();
574 Gtk::Label peak_thread_work_label;
575 void update_peak_thread_work ();
577 Gtk::Label sample_rate_label;
578 void update_sample_rate (ARDOUR::samplecnt_t);
580 Gtk::Label format_label;
581 void update_format ();
583 void every_second ();
584 void every_point_one_seconds ();
585 void every_point_zero_something_seconds ();
587 sigc::connection second_connection;
588 sigc::connection point_one_second_connection;
589 sigc::connection point_zero_something_second_connection;
590 sigc::connection fps_connection;
592 void set_fps_timeout_connection ();
594 void open_session ();
595 void open_recent_session ();
596 void save_template_dialog_response (int response, SaveTemplateDialog* d);
597 void save_template ();
598 void manage_templates ();
600 void meta_session_setup (const std::string& script_path);
601 void meta_route_setup (const std::string& script_path);
603 void edit_metadata ();
604 void import_metadata ();
606 void set_transport_sensitivity (bool);
608 //stuff for ProTools-style numpad
609 void transport_numpad_event (int num);
610 void transport_numpad_decimal ();
611 bool _numpad_locate_happening;
612 int _pending_locate_num;
613 gint transport_numpad_timeout ();
614 sigc::connection _numpad_timeout_connection;
616 void transport_goto_nth_marker (int nth);
617 void transport_goto_zero ();
618 void transport_goto_start ();
619 void transport_goto_end ();
620 void transport_goto_wallclock ();
621 void transport_stop ();
622 void transport_record (bool roll);
623 void transport_roll ();
624 void transport_play_selection();
625 void transport_play_preroll();
626 void transport_rec_preroll();
627 void transport_rec_count_in();
628 void transport_forward (int option);
629 void transport_rewind (int option);
630 void transport_loop ();
631 void toggle_roll (bool with_abort, bool roll_out_of_bounded_mode);
632 bool trx_record_enable_all_tracks ();
634 bool _session_is_new;
635 void set_session (ARDOUR::Session *);
636 void connect_dependents_to_session (ARDOUR::Session *);
637 void we_have_dependents ();
639 void setup_session_options ();
641 guint32 last_key_press_time;
643 bool process_snapshot_session_prompter (ArdourWidgets::Prompter& prompter, bool switch_to_it);
644 void snapshot_session (bool switch_to_it);
646 void quick_snapshot_session (bool switch_to_it); //does not promtp for name, just makes a timestamped file
648 SaveAsDialog* save_as_dialog;
650 bool save_as_progress_update (float fraction, int64_t cnt, int64_t total, Gtk::Label* label, Gtk::ProgressBar* bar);
651 void save_session_as ();
652 void archive_session ();
653 void rename_session ();
656 int create_editor ();
657 int create_meterbridge ();
658 int create_luawindow ();
659 int create_masters ();
661 Meterbridge *meterbridge;
662 LuaWindow *luawindow;
664 /* Dialogs that can be created via new<T> */
666 RCOptionEditor* rc_option_editor;
667 Gtk::HBox rc_option_editor_placeholder;
669 WM::Proxy<SpeakerDialog> speaker_config_window;
670 WM::Proxy<AddRouteDialog> add_route_dialog;
671 WM::Proxy<About> about;
672 WM::Proxy<LocationUIWindow> location_ui;
673 WM::Proxy<RouteParams_UI> route_params;
674 WM::Proxy<EngineControl> audio_midi_setup;
675 WM::Proxy<ExportVideoDialog> export_video_dialog;
676 WM::Proxy<LuaScriptManager> lua_script_window;
677 WM::Proxy<IdleOMeter> idleometer;
679 /* Windows/Dialogs that require a creator method */
681 WM::ProxyWithConstructor<SessionOptionEditor> session_option_editor;
682 WM::ProxyWithConstructor<AddVideoDialog> add_video_dialog;
683 WM::ProxyWithConstructor<BundleManager> bundle_manager;
684 WM::ProxyWithConstructor<BigClockWindow> big_clock_window;
685 WM::ProxyWithConstructor<BigTransportWindow> big_transport_window;
686 WM::ProxyWithConstructor<GlobalPortMatrixWindow> audio_port_matrix;
687 WM::ProxyWithConstructor<GlobalPortMatrixWindow> midi_port_matrix;
688 WM::ProxyWithConstructor<KeyEditor> key_editor;
690 /* creator methods */
692 SessionOptionEditor* create_session_option_editor ();
693 BundleManager* create_bundle_manager ();
694 AddVideoDialog* create_add_video_dialog ();
695 BigClockWindow* create_big_clock_window();
696 BigTransportWindow* create_big_transport_window();
697 GlobalPortMatrixWindow* create_global_port_matrix (ARDOUR::DataType);
698 KeyEditor* create_key_editor ();
700 ARDOUR::SystemExec *video_server_process;
702 void handle_locations_change (ARDOUR::Location*);
704 /* Keyboard Handling */
706 ArdourKeyboard* keyboard;
708 /* Keymap handling */
710 void install_actions ();
712 void toggle_record_enable (uint16_t);
714 uint32_t rec_enabled_streams;
715 void count_recenabled_streams (ARDOUR::Route&);
719 void pop_back_splash (Gtk::Window&);
723 Gtk::MenuItem *cleanup_item;
725 void display_cleanup_results (ARDOUR::CleanupReport& rep, const gchar* list_title, const bool msg_delete);
727 void cleanup_peakfiles ();
730 bool have_configure_timeout;
731 ARDOUR::microseconds_t last_configure_time;
732 gint configure_timeout ();
734 ARDOUR::microseconds_t last_peak_grab;
735 ARDOUR::microseconds_t last_shuttle_request;
737 bool have_disk_speed_dialog_displayed;
738 void disk_speed_dialog_gone (int ignored_response, Gtk::MessageDialog*);
739 void disk_overrun_handler ();
740 void disk_underrun_handler ();
741 void gui_idle_handler ();
743 void cancel_plugin_scan ();
744 void cancel_plugin_timeout ();
745 void plugin_scan_dialog (std::string type, std::string plugin, bool);
746 void plugin_scan_timeout (int);
748 void session_format_mismatch (std::string, std::string);
750 void session_dialog (std::string);
751 int pending_state_dialog ();
752 int sr_mismatch_dialog (ARDOUR::samplecnt_t, ARDOUR::samplecnt_t);
753 void sr_mismatch_message (ARDOUR::samplecnt_t, ARDOUR::samplecnt_t);
755 Gtk::MenuItem* jack_disconnect_item;
756 Gtk::MenuItem* jack_reconnect_item;
757 Gtk::Menu* jack_bufsize_menu;
759 Glib::RefPtr<Gtk::ActionGroup> common_actions;
761 void editor_realized ();
763 std::vector<std::string> positional_sync_strings;
765 void toggle_use_mmc ();
766 void toggle_send_mmc ();
767 void toggle_send_mtc ();
768 void toggle_send_midi_clock ();
770 void toggle_use_osc ();
772 void parameter_changed (std::string);
773 void session_parameter_changed (std::string);
777 void check_memory_locking ();
779 void audioengine_setup ();
781 void display_message (const char* prefix, gint prefix_len, Glib::RefPtr<Gtk::TextBuffer::Tag>, Glib::RefPtr<Gtk::TextBuffer::Tag>, const char* msg);
782 Gtk::Label status_bar_label;
783 bool status_bar_button_press (GdkEventButton*);
785 void loading_message (const std::string& msg);
787 PBD::ScopedConnectionList forever_connections;
788 PBD::ScopedConnection halt_connection;
789 PBD::ScopedConnection editor_meter_connection;
791 /* these are used only in response to a platform-specific "ShouldQuit" signal */
793 void queue_finish ();
794 void fontconfig_dialog ();
796 int missing_file (ARDOUR::Session*s, std::string str, ARDOUR::DataType type);
797 int ambiguous_file (std::string file, std::vector<std::string> hits);
799 bool click_button_clicked (GdkEventButton *);
800 bool sync_button_clicked (GdkEventButton *);
802 VisibilityGroup _status_bar_visibility;
804 /** A ProcessThread so that we have some thread-local buffers for use by
805 * PluginEqGui::impulse_analysis ().
807 ARDOUR::ProcessThread* _process_thread;
809 void feedback_detected ();
811 ArdourWidgets::ArdourButton midi_panic_button;
814 void successful_graph_sort ();
815 bool _feedback_exists;
817 enum ArdourLogLevel {
824 ArdourLogLevel _log_not_acknowledged;
826 void resize_text_widgets ();
828 bool xrun_button_release (GdkEventButton* ev);
830 std::string _announce_string;
831 void check_announcements ();
833 int do_audio_midi_setup (uint32_t);
834 void audioengine_became_silent ();
836 DuplicateRouteDialog* duplicate_routes_dialog;
838 void grab_focus_after_dialog ();
840 void tabs_switch (GtkNotebookPage*, guint page_number);
841 void tabs_page_added (Gtk::Widget*, guint);
842 void tabs_page_removed (Gtk::Widget*, guint);
843 ArdourWidgets::ArdourButton editor_visibility_button;
844 ArdourWidgets::ArdourButton mixer_visibility_button;
845 ArdourWidgets::ArdourButton prefs_visibility_button;
847 bool key_press_focus_accelerator_handler (Gtk::Window& window, GdkEventKey* ev, Gtkmm2ext::Bindings*);
848 bool try_gtk_accel_binding (GtkWindow* win, GdkEventKey* ev, bool translate, GdkModifierType modifier);
850 bool main_window_delete_event (GdkEventAny*);
851 bool idle_ask_about_quit ();
853 void load_bindings ();
854 bool tabbable_visibility_button_press (GdkEventButton* ev, std::string const& tabbable_name);
856 void step_up_through_tabs ();
857 void step_down_through_tabs ();
860 void close_current_dialog ();
861 void pre_release_dialog ();
863 bool bind_lua_action_script (GdkEventButton*, int);
864 void update_action_script_btn (int i, const std::string&);
867 #endif /* __ardour_gui_h__ */