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 "plugin_dspload_window.h"
100 #include "rc_option_editor.h"
101 #include "route_dialogs.h"
102 #include "route_params_ui.h"
103 #include "session_option_editor.h"
104 #include "speaker_dialog.h"
105 #include "transport_masters_dialog.h"
108 class AddRouteDialog;
109 class AddVideoDialog;
110 class BigClockWindow;
111 class BigTransportWindow;
114 class ExportVideoDialog;
116 class LocationUIWindow;
117 class LuaScriptManager;
118 class RCOptionEditor;
119 class RouteParams_UI;
120 class SessionOptionEditor;
122 class GlobalPortMatrixWindow;
124 class PluginDSPLoadWindow;
125 class TransportMastersWindow;
129 class ArdourKeyboard;
131 class ConnectionEditor;
132 class DuplicateRouteDialog;
137 class SaveTemplateDialog;
139 class SessionOptionEditorWindow;
146 class LevelMeterHBox;
147 class GUIObjectState;
150 class ControlProtocolInfo;
163 namespace ArdourWidgets {
168 #define MAX_LUA_ACTION_SCRIPTS 12
170 class ARDOUR_UI : public Gtkmm2ext::UI, public ARDOUR::SessionHandlePtr, public TransportControlProvider, public Gtkmm2ext::ActionMapOwner
173 ARDOUR_UI (int *argcp, char **argvp[], const char* localedir);
176 bool run_startup (bool should_be_new, std::string load_template);
182 void launch_manual ();
183 void launch_reference ();
184 void launch_tracker ();
185 void launch_subscribe ();
186 void launch_cheat_sheet ();
187 void launch_website ();
188 void launch_website_dev ();
189 void launch_forums ();
190 void launch_howto_report ();
194 void load_from_application_api (const std::string& path);
197 int load_session (const std::string& path, const std::string& snapshot, std::string mix_template = std::string());
198 bool session_load_in_progress;
199 int build_session (const std::string& path, const std::string& snapshot, ARDOUR::BusProfile*);
200 bool session_is_new() const { return _session_is_new; }
202 ARDOUR::Session* the_session() { return _session; }
204 bool get_smart_mode () const;
206 RCOptionEditor* get_rc_option_editor() { return rc_option_editor; }
207 void show_tabbable (ArdourWidgets::Tabbable*);
209 int get_session_parameters (bool quit_on_cancel, bool should_be_new = false, std::string load_template = "");
210 int build_session_from_dialog (SessionDialog&, const std::string& session_name, const std::string& session_path);
211 bool ask_about_loading_existing_session (const std::string& session_path);
213 /// @return true if session was successfully unloaded.
214 int unload_session (bool hide_stuff = false);
215 void close_session();
217 int save_state_canfail (std::string state_name = "", bool switch_to_it = false);
218 void save_state (const std::string & state_name = "", bool switch_to_it = false);
220 static ARDOUR_UI *instance () { return theArdourUI; }
222 /* signal emitted when escape key is pressed. All UI components that
223 need to respond to Escape in some way (e.g. break drag, clear
224 selection, etc) should connect to and handle this.
226 PBD::Signal0<void> Escape;
228 PublicEditor& the_editor() { return *editor;}
229 Mixer_UI* the_mixer() { return mixer; }
231 void new_midi_tracer_window ();
232 void toggle_editing_space();
233 void toggle_mixer_space();
234 void toggle_keep_tearoffs();
236 void reset_focus (Gtk::Widget*);
238 static PublicEditor* _instance;
240 /** Emitted frequently with the audible sample, false, and the edit point as
241 * parameters respectively.
243 * (either RapidScreenUpdate || SuperRapidScreenUpdate - user-config)
245 static sigc::signal<void, samplepos_t> Clock;
247 static void close_all_dialogs () { CloseAllDialogs(); }
248 static sigc::signal<void> CloseAllDialogs;
250 XMLNode* main_window_settings() const;
251 XMLNode* editor_settings() const;
252 XMLNode* preferences_settings() const;
253 XMLNode* mixer_settings () const;
254 XMLNode* keyboard_settings () const;
255 XMLNode* tearoff_settings (const char*) const;
257 void save_ardour_state ();
258 gboolean configure_handler (GdkEventConfigure* conf);
260 void halt_on_xrun_message ();
261 void xrun_handler (samplepos_t);
262 void create_xrun_marker (samplepos_t);
264 GUIObjectState* gui_object_state;
266 MainClock* primary_clock;
267 MainClock* secondary_clock;
268 void focus_on_clock ();
269 AudioClock* big_clock;
271 VideoTimeLine *video_timeline;
273 void store_clock_modes ();
274 void restore_clock_modes ();
275 void reset_main_clocks ();
277 void synchronize_sync_source_and_video_pullup ();
280 void add_route_dialog_response (int);
282 void add_routes_part_two ();
283 void add_routes_thread ();
285 void start_duplicate_routes ();
287 void add_video (Gtk::Window* float_window);
288 void remove_video ();
289 void start_video_server_menu (Gtk::Window* float_window);
290 bool start_video_server (Gtk::Window* float_window, bool popup_msg);
291 void stop_video_server (bool ask_confirm=false);
292 void flush_videotimeline_cache (bool localcacheonly=false);
293 void export_video (bool range = false);
295 void session_add_audio_route (bool, int32_t, int32_t, ARDOUR::TrackMode, ARDOUR::RouteGroup *,
296 uint32_t, std::string const &, bool, ARDOUR::PresentationInfo::order_t order);
298 void session_add_mixed_track (const ARDOUR::ChanCount&, const ARDOUR::ChanCount&, ARDOUR::RouteGroup*,
299 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_bus (ARDOUR::RouteGroup*, uint32_t, std::string const &, bool strict_io,
304 ARDOUR::PluginInfoPtr, ARDOUR::Plugin::PresetRecord* pset,
305 ARDOUR::PresentationInfo::order_t order);
307 void session_add_midi_route (bool, ARDOUR::RouteGroup *, uint32_t, std::string const &, bool,
308 ARDOUR::PluginInfoPtr, ARDOUR::Plugin::PresetRecord*,
309 ARDOUR::PresentationInfo::order_t order);
311 void session_add_foldback_bus (uint32_t, std::string const &);
313 void display_insufficient_ports_message ();
315 void attach_to_engine ();
318 gint exit_on_main_window_close (GdkEventAny *);
320 void maximise_editing_space ();
321 void restore_editing_space ();
323 void show_ui_prefs ();
325 bool check_audioengine(Gtk::Window&);
327 void setup_profile ();
328 void setup_tooltips ();
330 void set_shuttle_fract (double);
332 void get_process_buffers ();
333 void drop_process_buffers ();
335 void reset_peak_display ();
336 void reset_route_peak_display (ARDOUR::Route*);
337 void reset_group_peak_display (ARDOUR::RouteGroup*);
339 const std::string& announce_string() const { return _announce_string; }
341 void hide_application ();
343 Gtk::Notebook& tabs();
344 Gtk::Window& main_window () { return _main_window; }
346 void setup_toplevel_window (Gtk::Window&, const std::string& name, void* owner);
348 /* called from a static C function */
350 GtkNotebook* tab_window_root_drop (GtkNotebook* src,
356 bool tabbed_window_state_event_handler (GdkEventWindowState*, void* object);
357 bool key_event_handler (GdkEventKey*, Gtk::Window* window);
359 ARDOUR::PresentationInfo::order_t translate_order (RouteDialogs::InsertAt);
361 std::map<std::string, std::string> route_setup_info (const std::string& script_path);
364 friend class PublicEditor;
366 void toggle_use_monitor_section ();
367 void monitor_dim_all ();
368 void monitor_cut_all ();
369 void monitor_mono ();
371 void toggle_auto_play ();
372 void toggle_auto_input ();
373 void toggle_punch ();
374 void unset_dual_punch ();
375 bool ignore_dual_punch;
376 void toggle_punch_in ();
377 void toggle_punch_out ();
378 void toggle_session_monitoring_in ();
379 void toggle_session_monitoring_disk ();
380 void show_loop_punch_ruler_and_disallow_hide ();
381 void reenable_hide_loop_punch_ruler_if_appropriate ();
382 void toggle_auto_return ();
383 void toggle_click ();
384 void toggle_audio_midi_setup ();
385 void toggle_session_auto_loop ();
386 void toggle_rc_options_window ();
387 void toggle_session_options_window ();
391 Gtk::Window _main_window;
392 Gtkmm2ext::VisibilityTracker* main_window_visibility;
393 Gtk::VBox main_vpacker;
394 Gtk::HBox status_bar_hpacker;
396 PublicEditor* editor;
398 Gtk::Tooltips _tooltips;
402 bool _initial_verbose_plugin_scan;
403 bool first_time_engine_run;
405 void hide_tabbable (ArdourWidgets::Tabbable*);
406 void detach_tabbable (ArdourWidgets::Tabbable*);
407 void attach_tabbable (ArdourWidgets::Tabbable*);
408 void button_change_tabbable_visibility (ArdourWidgets::Tabbable*);
409 void key_change_tabbable_visibility (ArdourWidgets::Tabbable*);
410 void toggle_editor_and_mixer ();
412 void tabbable_state_change (ArdourWidgets::Tabbable&);
414 void toggle_meterbridge ();
415 void toggle_luawindow ();
417 int setup_windows ();
418 void setup_transport ();
421 static ARDOUR_UI *theArdourUI;
422 SessionDialog *_session_dialog;
426 int ask_about_saving_session (const std::vector<std::string>& actions);
428 void save_session_at_its_request (std::string);
429 /* periodic safety backup, to be precise */
430 gint autosave_session();
431 void update_autosave();
432 sigc::connection _autosave_connection;
434 void session_dirty_changed ();
435 void update_title ();
437 void map_transport_state ();
438 int32_t do_engine_start ();
440 void engine_halted (const char* reason, bool free_reason);
441 void engine_stopped ();
442 void engine_running ();
446 void about_signal_response(int response);
448 Gtk::VBox top_packer;
450 sigc::connection clock_signal_connection;
451 void update_clocks ();
452 void start_clocking ();
453 void stop_clocking ();
455 void update_transport_clocks (samplepos_t pos);
456 void record_state_changed ();
458 std::list<MidiTracer*> _midi_tracer_windows;
460 /* Transport Control */
462 Gtk::Table transport_table;
463 Gtk::Frame transport_frame;
464 Gtk::HBox transport_hbox;
466 ArdourWidgets::ArdourVSpacer* secondary_clock_spacer;
467 void repack_transport_hbox ();
468 void update_clock_visibility ();
469 void toggle_follow_edits ();
471 void set_transport_controllable_state (const XMLNode&);
472 XMLNode& get_transport_controllable_state ();
474 TransportControlUI transport_ctrl;
476 ArdourWidgets::ArdourButton punch_in_button;
477 ArdourWidgets::ArdourButton punch_out_button;
478 ArdourWidgets::ArdourButton layered_button;
480 ArdourWidgets::ArdourVSpacer recpunch_spacer;
481 ArdourWidgets::ArdourVSpacer monitoring_spacer;
483 ArdourWidgets::ArdourButton monitor_in_button;
484 ArdourWidgets::ArdourButton monitor_disk_button;
485 ArdourWidgets::ArdourButton auto_input_button;
487 Gtk::Label punch_label;
488 Gtk::Label layered_label;
490 Gtk::Label punch_space;
491 Gtk::Label mon_space;
493 void toggle_external_sync ();
494 void toggle_time_master ();
495 void toggle_video_sync ();
497 ShuttleControl shuttle_box;
498 MiniTimeline mini_timeline;
499 TimeInfoBox* time_info_box;
502 ArdourWidgets::ArdourVSpacer meterbox_spacer;
503 ArdourWidgets::ArdourVSpacer meterbox_spacer2;
505 ArdourWidgets::ArdourButton auto_return_button;
506 ArdourWidgets::ArdourButton follow_edits_button;
507 ArdourWidgets::ArdourButton sync_button;
509 ArdourWidgets::ArdourButton auditioning_alert_button;
510 ArdourWidgets::ArdourButton solo_alert_button;
511 ArdourWidgets::ArdourButton feedback_alert_button;
512 ArdourWidgets::ArdourButton error_alert_button;
514 ArdourWidgets::ArdourButton action_script_call_btn[MAX_LUA_ACTION_SCRIPTS];
515 Gtk::Table action_script_table;
518 Gtk::Table editor_meter_table;
519 ArdourWidgets::ArdourButton editor_meter_peak_display;
520 LevelMeterHBox * editor_meter;
521 float editor_meter_max_peak;
522 bool editor_meter_peak_button_release (GdkEventButton*);
524 bool editor_meter_button_press (GdkEventButton* ev);
525 void popup_editor_meter_menu (GdkEventButton* ev);
526 void add_editor_meter_type_item (Gtk::Menu_Helpers::MenuList&, Gtk::RadioMenuItem::Group&, std::string const &, ARDOUR::MeterType);
527 bool _suspend_editor_meter_callbacks;
529 void blink_handler (bool);
530 sigc::connection blink_connection;
533 void solo_blink (bool);
534 void sync_blink (bool);
535 void audition_blink (bool);
536 void feedback_blink (bool);
537 void error_blink (bool);
539 void set_flat_buttons();
541 void soloing_changed (bool);
542 void auditioning_changed (bool);
543 void _auditioning_changed (bool);
545 bool solo_alert_press (GdkEventButton* ev);
546 void audition_alert_clicked ();
547 bool error_alert_press (GdkEventButton *);
549 void layered_button_clicked ();
551 void big_clock_value_changed ();
552 void primary_clock_value_changed ();
553 void secondary_clock_value_changed ();
555 /* called by Blink signal */
557 void transport_rec_enable_blink (bool onoff);
559 Gtk::Menu* session_popup_menu;
561 /* menu bar and associated stuff */
563 Gtk::MenuBar* menu_bar;
564 Gtk::EventBox menu_bar_base;
567 void use_menubar_as_top_menubar ();
568 void build_menu_bar ();
570 Gtk::Label wall_clock_label;
571 gint update_wall_clock ();
573 Gtk::Label disk_space_label;
574 void update_disk_space ();
575 void format_disk_space_label (float);
577 Gtk::Label timecode_format_label;
578 void update_timecode_format ();
580 Gtk::Label dsp_load_label;
581 void update_cpu_load ();
583 Gtk::Label peak_thread_work_label;
584 void update_peak_thread_work ();
586 Gtk::Label sample_rate_label;
587 void update_sample_rate (ARDOUR::samplecnt_t);
589 Gtk::Label format_label;
590 void update_format ();
592 void every_second ();
593 void every_point_one_seconds ();
594 void every_point_zero_something_seconds ();
596 sigc::connection second_connection;
597 sigc::connection point_one_second_connection;
598 sigc::connection point_zero_something_second_connection;
599 sigc::connection fps_connection;
601 void set_fps_timeout_connection ();
603 void open_session ();
604 void open_recent_session ();
605 void save_template_dialog_response (int response, SaveTemplateDialog* d);
606 void save_template ();
607 void manage_templates ();
609 void meta_session_setup (const std::string& script_path);
610 void meta_route_setup (const std::string& script_path);
612 void edit_metadata ();
613 void import_metadata ();
615 void set_transport_sensitivity (bool);
617 //stuff for ProTools-style numpad
618 void transport_numpad_event (int num);
619 void transport_numpad_decimal ();
620 bool _numpad_locate_happening;
621 int _pending_locate_num;
622 gint transport_numpad_timeout ();
623 sigc::connection _numpad_timeout_connection;
625 void transport_goto_nth_marker (int nth);
626 void transport_goto_zero ();
627 void transport_goto_start ();
628 void transport_goto_end ();
629 void transport_goto_wallclock ();
630 void transport_stop ();
631 void transport_record (bool roll);
632 void transport_roll ();
633 void transport_play_selection();
634 void transport_play_preroll();
635 void transport_rec_preroll();
636 void transport_rec_count_in();
637 void transport_forward (int option);
638 void transport_rewind (int option);
639 void transport_loop ();
640 void toggle_roll (bool with_abort, bool roll_out_of_bounded_mode);
641 bool trx_record_enable_all_tracks ();
643 bool _session_is_new;
644 void set_session (ARDOUR::Session *);
645 void connect_dependents_to_session (ARDOUR::Session *);
646 void we_have_dependents ();
648 void setup_session_options ();
650 guint32 last_key_press_time;
652 bool process_snapshot_session_prompter (ArdourWidgets::Prompter& prompter, bool switch_to_it);
653 void snapshot_session (bool switch_to_it);
655 void quick_snapshot_session (bool switch_to_it); //does not promtp for name, just makes a timestamped file
657 SaveAsDialog* save_as_dialog;
659 bool save_as_progress_update (float fraction, int64_t cnt, int64_t total, Gtk::Label* label, Gtk::ProgressBar* bar);
660 void save_session_as ();
661 void archive_session ();
662 void rename_session ();
665 int create_editor ();
666 int create_meterbridge ();
667 int create_luawindow ();
668 int create_masters ();
670 Meterbridge *meterbridge;
671 LuaWindow *luawindow;
673 /* Dialogs that can be created via new<T> */
675 RCOptionEditor* rc_option_editor;
676 Gtk::HBox rc_option_editor_placeholder;
678 WM::Proxy<SpeakerDialog> speaker_config_window;
679 WM::Proxy<AddRouteDialog> add_route_dialog;
680 WM::Proxy<About> about;
681 WM::Proxy<LocationUIWindow> location_ui;
682 WM::Proxy<RouteParams_UI> route_params;
683 WM::Proxy<EngineControl> audio_midi_setup;
684 WM::Proxy<ExportVideoDialog> export_video_dialog;
685 WM::Proxy<LuaScriptManager> lua_script_window;
686 WM::Proxy<IdleOMeter> idleometer;
687 WM::Proxy<PluginDSPLoadWindow> plugin_dsp_load_window;
688 WM::Proxy<TransportMastersWindow> transport_masters_window;
690 /* Windows/Dialogs that require a creator method */
692 WM::ProxyWithConstructor<SessionOptionEditor> session_option_editor;
693 WM::ProxyWithConstructor<AddVideoDialog> add_video_dialog;
694 WM::ProxyWithConstructor<BundleManager> bundle_manager;
695 WM::ProxyWithConstructor<BigClockWindow> big_clock_window;
696 WM::ProxyWithConstructor<BigTransportWindow> big_transport_window;
697 WM::ProxyWithConstructor<GlobalPortMatrixWindow> audio_port_matrix;
698 WM::ProxyWithConstructor<GlobalPortMatrixWindow> midi_port_matrix;
699 WM::ProxyWithConstructor<KeyEditor> key_editor;
701 /* creator methods */
703 SessionOptionEditor* create_session_option_editor ();
704 BundleManager* create_bundle_manager ();
705 AddVideoDialog* create_add_video_dialog ();
706 BigClockWindow* create_big_clock_window();
707 BigTransportWindow* create_big_transport_window();
708 GlobalPortMatrixWindow* create_global_port_matrix (ARDOUR::DataType);
709 KeyEditor* create_key_editor ();
711 ARDOUR::SystemExec *video_server_process;
713 void handle_locations_change (ARDOUR::Location*);
715 /* Keyboard Handling */
717 ArdourKeyboard* keyboard;
719 /* Keymap handling */
721 void install_actions ();
723 void toggle_record_enable (uint16_t);
725 uint32_t rec_enabled_streams;
726 void count_recenabled_streams (ARDOUR::Route&);
730 void pop_back_splash (Gtk::Window&);
734 Gtk::MenuItem *cleanup_item;
736 void display_cleanup_results (ARDOUR::CleanupReport& rep, const gchar* list_title, const bool msg_delete);
738 void cleanup_peakfiles ();
741 bool have_configure_timeout;
742 ARDOUR::microseconds_t last_configure_time;
743 gint configure_timeout ();
745 ARDOUR::microseconds_t last_peak_grab;
746 ARDOUR::microseconds_t last_shuttle_request;
748 bool have_disk_speed_dialog_displayed;
749 void disk_speed_dialog_gone (int ignored_response, Gtk::MessageDialog*);
750 void disk_overrun_handler ();
751 void disk_underrun_handler ();
752 void gui_idle_handler ();
754 void cancel_plugin_scan ();
755 void cancel_plugin_timeout ();
756 void plugin_scan_dialog (std::string type, std::string plugin, bool);
757 void plugin_scan_timeout (int);
759 void session_format_mismatch (std::string, std::string);
761 void session_dialog (std::string);
762 int pending_state_dialog ();
763 int sr_mismatch_dialog (ARDOUR::samplecnt_t, ARDOUR::samplecnt_t);
764 void sr_mismatch_message (ARDOUR::samplecnt_t, ARDOUR::samplecnt_t);
766 Gtk::MenuItem* jack_disconnect_item;
767 Gtk::MenuItem* jack_reconnect_item;
768 Gtk::Menu* jack_bufsize_menu;
770 Glib::RefPtr<Gtk::ActionGroup> common_actions;
772 void editor_realized ();
774 std::vector<std::string> positional_sync_strings;
776 void toggle_use_mmc ();
777 void toggle_send_mmc ();
778 void toggle_send_mtc ();
779 void toggle_send_midi_clock ();
781 void toggle_use_osc ();
783 void parameter_changed (std::string);
784 void session_parameter_changed (std::string);
788 void check_memory_locking ();
790 void audioengine_setup ();
792 void display_message (const char* prefix, gint prefix_len, Glib::RefPtr<Gtk::TextBuffer::Tag>, Glib::RefPtr<Gtk::TextBuffer::Tag>, const char* msg);
793 Gtk::Label status_bar_label;
794 bool status_bar_button_press (GdkEventButton*);
796 void loading_message (const std::string& msg);
798 PBD::ScopedConnectionList forever_connections;
799 PBD::ScopedConnection halt_connection;
800 PBD::ScopedConnection editor_meter_connection;
802 /* these are used only in response to a platform-specific "ShouldQuit" signal */
804 void queue_finish ();
805 void fontconfig_dialog ();
807 int missing_file (ARDOUR::Session*s, std::string str, ARDOUR::DataType type);
808 int ambiguous_file (std::string file, std::vector<std::string> hits);
810 bool click_button_clicked (GdkEventButton *);
811 bool sync_button_clicked (GdkEventButton *);
813 VisibilityGroup _status_bar_visibility;
815 /** A ProcessThread so that we have some thread-local buffers for use by
816 * PluginEqGui::impulse_analysis ().
818 ARDOUR::ProcessThread* _process_thread;
820 void feedback_detected ();
822 ArdourWidgets::ArdourButton midi_panic_button;
825 void successful_graph_sort ();
826 bool _feedback_exists;
828 enum ArdourLogLevel {
835 ArdourLogLevel _log_not_acknowledged;
837 void resize_text_widgets ();
839 bool xrun_button_release (GdkEventButton* ev);
841 std::string _announce_string;
842 void check_announcements ();
844 int do_audio_midi_setup (uint32_t);
845 void audioengine_became_silent ();
847 DuplicateRouteDialog* duplicate_routes_dialog;
849 void grab_focus_after_dialog ();
851 void tabs_switch (GtkNotebookPage*, guint page_number);
852 void tabs_page_added (Gtk::Widget*, guint);
853 void tabs_page_removed (Gtk::Widget*, guint);
854 ArdourWidgets::ArdourButton editor_visibility_button;
855 ArdourWidgets::ArdourButton mixer_visibility_button;
856 ArdourWidgets::ArdourButton prefs_visibility_button;
858 bool key_press_focus_accelerator_handler (Gtk::Window& window, GdkEventKey* ev, Gtkmm2ext::Bindings*);
859 bool try_gtk_accel_binding (GtkWindow* win, GdkEventKey* ev, bool translate, GdkModifierType modifier);
861 bool main_window_delete_event (GdkEventAny*);
862 bool idle_ask_about_quit ();
864 void load_bindings ();
865 bool tabbable_visibility_button_press (GdkEventButton* ev, std::string const& tabbable_name);
867 void step_up_through_tabs ();
868 void step_down_through_tabs ();
871 void close_current_dialog ();
872 void pre_release_dialog ();
874 bool bind_lua_action_script (GdkEventButton*, int);
875 void update_action_script_btn (int i, const std::string&);
878 #endif /* __ardour_gui_h__ */