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 "pbd/controllable.h"
41 #include <gtkmm/box.h>
42 #include <gtkmm/frame.h>
43 #include <gtkmm/label.h>
44 #include <gtkmm/table.h>
45 #include <gtkmm/fixed.h>
46 #include <gtkmm/drawingarea.h>
47 #include <gtkmm/eventbox.h>
48 #include <gtkmm/menu.h>
49 #include <gtkmm/menuitem.h>
50 #include <gtkmm/button.h>
51 #include <gtkmm/togglebutton.h>
52 #include <gtkmm/treeview.h>
53 #include <gtkmm/menubar.h>
54 #include <gtkmm/textbuffer.h>
55 #include <gtkmm/adjustment.h>
57 #include "gtkmm2ext/gtk_ui.h"
58 #include "gtkmm2ext/click_box.h"
59 #include "gtkmm2ext/stateful_button.h"
60 #include "gtkmm2ext/bindable_button.h"
61 #include "gtkmm2ext/bindings.h"
62 #include "gtkmm2ext/visibility_tracker.h"
64 #include "ardour/ardour.h"
65 #include "ardour/types.h"
66 #include "ardour/utils.h"
67 #include "ardour/plugin.h"
68 #include "ardour/session_handle.h"
69 #include "ardour/system_exec.h"
71 #include "video_timeline.h"
73 #include "add_route_dialog.h"
74 #include "ardour_button.h"
75 #include "ardour_dialog.h"
76 #include "ardour_window.h"
79 #include "visibility_group.h"
80 #include "window_manager.h"
84 #include "add_video_dialog.h"
85 #include "big_clock_window.h"
86 #include "bundle_manager.h"
87 #include "engine_dialog.h"
88 #include "export_video_dialog.h"
89 #include "global_port_matrix.h"
90 #include "keyeditor.h"
91 #include "location_ui.h"
92 #include "lua_script_manager.h"
93 #include "rc_option_editor.h"
94 #include "route_dialogs.h"
95 #include "route_params_ui.h"
96 #include "session_option_editor.h"
97 #include "speaker_dialog.h"
100 class AddRouteDialog;
101 class AddVideoDialog;
102 class BigClockWindow;
105 class ExportVideoDialog;
107 class LocationUIWindow;
108 class LuaScriptManager;
109 class RCOptionEditor;
110 class RouteParams_UI;
111 class SessionOptionEditor;
113 class GlobalPortMatrixWindow;
117 class ArdourKeyboard;
120 class ConnectionEditor;
121 class DuplicateRouteDialog;
124 class ArdourPrompter;
128 class SessionOptionEditorWindow;
129 class ShuttleControl;
136 class LevelMeterHBox;
137 class GUIObjectState;
140 class ControlProtocolInfo;
153 namespace Gtkmm2ext {
157 class ARDOUR_UI : public Gtkmm2ext::UI, public ARDOUR::SessionHandlePtr
160 ARDOUR_UI (int *argcp, char **argvp[], const char* localedir);
163 bool run_startup (bool should_be_new, std::string load_template);
169 void launch_manual ();
170 void launch_reference ();
171 void launch_tracker ();
172 void launch_subscribe ();
173 void launch_cheat_sheet ();
174 void launch_website ();
175 void launch_website_dev ();
176 void launch_forums ();
177 void launch_howto_report ();
181 void load_from_application_api (const std::string& path);
184 int load_session (const std::string& path, const std::string& snapshot, std::string mix_template = std::string());
186 int build_session (const std::string& path, const std::string& snapshot, ARDOUR::BusProfile&);
187 bool session_is_new() const { return _session_is_new; }
189 ARDOUR::Session* the_session() { return _session; }
191 bool get_smart_mode () const;
193 int get_session_parameters (bool quit_on_cancel, bool should_be_new = false, std::string load_template = "");
194 int build_session_from_dialog (SessionDialog&, const std::string& session_name, const std::string& session_path);
195 bool ask_about_loading_existing_session (const std::string& session_path);
197 /// @return true if session was successfully unloaded.
198 int unload_session (bool hide_stuff = false);
199 void close_session();
201 int save_state_canfail (std::string state_name = "", bool switch_to_it = false);
202 void save_state (const std::string & state_name = "", bool switch_to_it = false);
204 static ARDOUR_UI *instance () { return theArdourUI; }
206 /* signal emitted when escape key is pressed. All UI components that
207 need to respond to Escape in some way (e.g. break drag, clear
208 selection, etc) should connect to and handle this.
210 PBD::Signal0<void> Escape;
212 PublicEditor& the_editor() { return *editor;}
213 Mixer_UI* the_mixer() { return mixer; }
215 void new_midi_tracer_window ();
216 void toggle_editing_space();
217 void toggle_mixer_space();
218 void toggle_mixer_list();
219 void toggle_monitor_section_visibility ();
220 void toggle_keep_tearoffs();
222 void reset_focus (Gtk::Widget*);
224 static PublicEditor* _instance;
226 /** Emitted frequently with the audible frame, false, and the edit point as
227 * parameters respectively.
229 * (either RapidScreenUpdate || SuperRapidScreenUpdate - user-config)
231 static sigc::signal<void, framepos_t, bool, framepos_t> Clock;
233 static void close_all_dialogs () { CloseAllDialogs(); }
234 static sigc::signal<void> CloseAllDialogs;
236 XMLNode* main_window_settings() const;
237 XMLNode* editor_settings() const;
238 XMLNode* preferences_settings() const;
239 XMLNode* mixer_settings () const;
240 XMLNode* keyboard_settings () const;
241 XMLNode* tearoff_settings (const char*) const;
243 void save_ardour_state ();
244 gboolean configure_handler (GdkEventConfigure* conf);
246 void halt_on_xrun_message ();
247 void xrun_handler (framepos_t);
248 void create_xrun_marker (framepos_t);
250 GUIObjectState* gui_object_state;
252 MainClock* primary_clock;
253 MainClock* secondary_clock;
254 void focus_on_clock ();
255 AudioClock* big_clock;
257 VideoTimeLine *video_timeline;
259 void store_clock_modes ();
260 void restore_clock_modes ();
261 void reset_main_clocks ();
263 void synchronize_sync_source_and_video_pullup ();
266 void add_route_dialog_finished (int);
268 void add_routes_part_two ();
269 void add_routes_thread ();
271 void start_duplicate_routes ();
273 void add_lua_script ();
274 void remove_lua_script ();
276 void add_video (Gtk::Window* float_window);
277 void remove_video ();
278 void start_video_server_menu (Gtk::Window* float_window);
279 bool start_video_server (Gtk::Window* float_window, bool popup_msg);
280 void stop_video_server (bool ask_confirm=false);
281 void flush_videotimeline_cache (bool localcacheonly=false);
282 void export_video (bool range = false);
284 void session_add_vca (std::string const &, uint32_t);
286 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);
287 void session_add_audio_track (
289 int32_t output_channels,
290 ARDOUR::TrackMode mode,
291 ARDOUR::RouteGroup* route_group,
293 std::string const & name_template,
295 ARDOUR::PresentationInfo::order_t order
297 session_add_audio_route (true, input_channels, output_channels, mode, route_group, how_many, name_template, strict_io, order);
300 void session_add_audio_bus (
302 int32_t output_channels,
303 ARDOUR::RouteGroup* route_group,
305 std::string const & name_template,
307 ARDOUR::PresentationInfo::order_t order
309 session_add_audio_route (false, input_channels, output_channels, ARDOUR::Normal, route_group, how_many, name_template, strict_io, order);
312 void session_add_midi_track (
313 ARDOUR::RouteGroup* route_group,
315 std::string const & name_template,
317 ARDOUR::PluginInfoPtr instrument,
318 ARDOUR::Plugin::PresetRecord* preset,
319 ARDOUR::PresentationInfo::order_t order
321 session_add_midi_route (true, route_group, how_many, name_template, strict_io, instrument, preset, order);
324 void session_add_mixed_track (const ARDOUR::ChanCount&, const ARDOUR::ChanCount&, ARDOUR::RouteGroup*, uint32_t, std::string const &, bool,
325 ARDOUR::PluginInfoPtr, ARDOUR::Plugin::PresetRecord* pset,
326 ARDOUR::PresentationInfo::order_t order);
327 void session_add_midi_bus (ARDOUR::RouteGroup*, uint32_t, std::string const &, bool, ARDOUR::PluginInfoPtr, ARDOUR::Plugin::PresetRecord* pset,
328 ARDOUR::PresentationInfo::order_t order);
329 void session_add_midi_route (bool, ARDOUR::RouteGroup *, uint32_t, std::string const &, bool,
330 ARDOUR::PluginInfoPtr, ARDOUR::Plugin::PresetRecord*,
331 ARDOUR::PresentationInfo::order_t order);
332 void display_insufficient_ports_message ();
334 void attach_to_engine ();
337 gint exit_on_main_window_close (GdkEventAny *);
339 void maximise_editing_space ();
340 void restore_editing_space ();
342 void show_ui_prefs ();
344 bool check_audioengine(Gtk::Window&);
346 void setup_profile ();
347 void setup_tooltips ();
349 void set_shuttle_fract (double);
351 void get_process_buffers ();
352 void drop_process_buffers ();
354 void reset_peak_display ();
355 void reset_route_peak_display (ARDOUR::Route*);
356 void reset_group_peak_display (ARDOUR::RouteGroup*);
358 const std::string& announce_string() const { return _announce_string; }
360 void hide_application ();
362 Gtk::Notebook& tabs();
363 Gtk::Window& main_window () { return _main_window; }
365 void setup_toplevel_window (Gtk::Window&, const std::string& name, void* owner);
367 /* called from a static C function */
369 GtkNotebook* tab_window_root_drop (GtkNotebook* src,
375 bool tabbed_window_state_event_handler (GdkEventWindowState*, void* object);
376 bool key_event_handler (GdkEventKey*, Gtk::Window* window);
378 Gtkmm2ext::ActionMap global_actions;
380 ARDOUR::PresentationInfo::order_t translate_order (RouteDialogs::InsertAt);
383 friend class PublicEditor;
385 void toggle_auto_play ();
386 void toggle_auto_input ();
387 void toggle_punch ();
388 void unset_dual_punch ();
389 bool ignore_dual_punch;
390 void toggle_punch_in ();
391 void toggle_punch_out ();
392 void show_loop_punch_ruler_and_disallow_hide ();
393 void reenable_hide_loop_punch_ruler_if_appropriate ();
394 void toggle_auto_return ();
395 void toggle_click ();
396 void toggle_audio_midi_setup ();
397 void toggle_session_auto_loop ();
398 void toggle_rc_options_window ();
399 void toggle_session_options_window ();
402 Gtk::Window _main_window;
403 Gtkmm2ext::VisibilityTracker* main_window_visibility;
404 Gtk::VBox main_vpacker;
405 Gtk::HBox status_bar_hpacker;
407 PublicEditor* editor;
409 Gtk::Tooltips _tooltips;
413 bool _initial_verbose_plugin_scan;
414 bool first_time_engine_run;
416 void show_tabbable (Gtkmm2ext::Tabbable*);
417 void hide_tabbable (Gtkmm2ext::Tabbable*);
418 void detach_tabbable (Gtkmm2ext::Tabbable*);
419 void attach_tabbable (Gtkmm2ext::Tabbable*);
420 void button_change_tabbable_visibility (Gtkmm2ext::Tabbable*);
421 void key_change_tabbable_visibility (Gtkmm2ext::Tabbable*);
422 void toggle_editor_and_mixer ();
424 void tabbable_state_change (Gtkmm2ext::Tabbable&);
426 void toggle_meterbridge ();
427 void toggle_luawindow ();
429 int setup_windows ();
430 void setup_transport ();
433 bool transport_expose (GdkEventExpose*);
435 static ARDOUR_UI *theArdourUI;
436 SessionDialog *_session_dialog;
440 int ask_about_saving_session (const std::vector<std::string>& actions);
442 void save_session_at_its_request (std::string);
443 /* periodic safety backup, to be precise */
444 gint autosave_session();
445 void update_autosave();
446 sigc::connection _autosave_connection;
448 void session_dirty_changed ();
449 void update_title ();
451 void map_transport_state ();
452 int32_t do_engine_start ();
454 void engine_halted (const char* reason, bool free_reason);
455 void engine_stopped ();
456 void engine_running ();
460 void about_signal_response(int response);
462 Gtk::VBox top_packer;
464 sigc::connection clock_signal_connection;
465 void update_clocks ();
466 void start_clocking ();
467 void stop_clocking ();
469 void update_transport_clocks (framepos_t pos);
470 void record_state_changed ();
472 std::list<MidiTracer*> _midi_tracer_windows;
474 /* Transport Control */
476 Gtk::Table transport_table;
477 Gtk::Frame transport_frame;
478 Gtk::HBox transport_hbox;
480 struct TransportControllable : public PBD::Controllable {
491 TransportControllable (std::string name, ARDOUR_UI&, ToggleType);
492 void set_value (double, PBD::Controllable::GroupControlDisposition group_override);
493 double get_value (void) const;
499 boost::shared_ptr<TransportControllable> roll_controllable;
500 boost::shared_ptr<TransportControllable> stop_controllable;
501 boost::shared_ptr<TransportControllable> goto_start_controllable;
502 boost::shared_ptr<TransportControllable> goto_end_controllable;
503 boost::shared_ptr<TransportControllable> auto_loop_controllable;
504 boost::shared_ptr<TransportControllable> play_selection_controllable;
505 boost::shared_ptr<TransportControllable> rec_controllable;
507 void toggle_follow_edits ();
509 void set_transport_controllable_state (const XMLNode&);
510 XMLNode& get_transport_controllable_state ();
512 ArdourButton roll_button;
513 ArdourButton stop_button;
514 ArdourButton goto_start_button;
515 ArdourButton goto_end_button;
516 ArdourButton auto_loop_button;
517 ArdourButton play_selection_button;
518 ArdourButton rec_button;
519 ArdourButton punch_in_button;
520 ArdourButton punch_out_button;
521 ArdourButton layered_button;
523 Gtk::Label punch_label;
524 Gtk::Label layered_label;
526 void toggle_external_sync ();
527 void toggle_time_master ();
528 void toggle_video_sync ();
530 ShuttleControl* shuttle_box;
532 ArdourButton auto_return_button;
533 ArdourButton follow_edits_button;
534 ArdourButton auto_input_button;
535 ArdourButton click_button;
536 ArdourButton sync_button;
538 ArdourButton auditioning_alert_button;
539 ArdourButton solo_alert_button;
540 ArdourButton feedback_alert_button;
541 ArdourButton error_alert_button;
543 ArdourButton action_script_call_btn[10];
544 Gtk::Table action_script_table;
548 LevelMeterHBox * editor_meter;
549 float editor_meter_max_peak;
550 ArdourButton editor_meter_peak_display;
551 bool editor_meter_peak_button_release (GdkEventButton*);
553 void blink_handler (bool);
554 sigc::connection blink_connection;
557 void solo_blink (bool);
558 void sync_blink (bool);
559 void audition_blink (bool);
560 void feedback_blink (bool);
561 void error_blink (bool);
563 void set_flat_buttons();
565 void soloing_changed (bool);
566 void auditioning_changed (bool);
567 void _auditioning_changed (bool);
569 bool solo_alert_press (GdkEventButton* ev);
570 void audition_alert_clicked ();
571 bool error_alert_press (GdkEventButton *);
573 void big_clock_value_changed ();
574 void primary_clock_value_changed ();
575 void secondary_clock_value_changed ();
577 /* called by Blink signal */
579 void transport_rec_enable_blink (bool onoff);
581 Gtk::Menu* session_popup_menu;
583 /* menu bar and associated stuff */
585 Gtk::MenuBar* menu_bar;
586 Gtk::EventBox menu_bar_base;
589 void use_menubar_as_top_menubar ();
590 void build_menu_bar ();
592 Gtk::Label wall_clock_label;
593 gint update_wall_clock ();
595 Gtk::Label disk_space_label;
596 void update_disk_space ();
598 Gtk::Label timecode_format_label;
599 void update_timecode_format ();
601 Gtk::Label cpu_load_label;
602 void update_cpu_load ();
604 Gtk::Label xrun_label;
605 void update_xrun_count ();
607 Gtk::Label peak_thread_work_label;
608 void update_peak_thread_work ();
610 Gtk::Label buffer_load_label;
611 void update_buffer_load ();
613 Gtk::Label sample_rate_label;
614 void update_sample_rate (ARDOUR::framecnt_t);
616 Gtk::Label format_label;
617 void update_format ();
619 void every_second ();
620 void every_point_one_seconds ();
621 void every_point_zero_something_seconds ();
623 sigc::connection second_connection;
624 sigc::connection point_one_second_connection;
625 sigc::connection point_zero_something_second_connection;
626 sigc::connection fps_connection;
628 void set_fps_timeout_connection ();
630 void open_session ();
631 void open_recent_session ();
632 bool process_save_template_prompter (ArdourPrompter& prompter);
633 void save_template ();
635 void edit_metadata ();
636 void import_metadata ();
638 void set_transport_sensitivity (bool);
640 //stuff for ProTools-style numpad
641 void transport_numpad_event (int num);
642 void transport_numpad_decimal ();
643 bool _numpad_locate_happening;
644 int _pending_locate_num;
645 gint transport_numpad_timeout ();
646 sigc::connection _numpad_timeout_connection;
648 void transport_goto_nth_marker (int nth);
649 void transport_goto_zero ();
650 void transport_goto_start ();
651 void transport_goto_end ();
652 void transport_goto_wallclock ();
653 void transport_stop ();
654 void transport_record (bool roll);
655 void transport_roll ();
656 void transport_play_selection();
657 void transport_play_preroll();
658 void transport_forward (int option);
659 void transport_rewind (int option);
660 void transport_loop ();
661 void toggle_roll (bool with_abort, bool roll_out_of_bounded_mode);
662 bool trx_record_enable_all_tracks ();
664 bool _session_is_new;
665 void set_session (ARDOUR::Session *);
666 void connect_dependents_to_session (ARDOUR::Session *);
667 void we_have_dependents ();
669 void setup_session_options ();
671 guint32 last_key_press_time;
673 bool process_snapshot_session_prompter (ArdourPrompter& prompter, bool switch_to_it);
674 void snapshot_session (bool switch_to_it);
676 void quick_snapshot_session (bool switch_to_it); //does not promtp for name, just makes a timestamped file
678 SaveAsDialog* save_as_dialog;
680 bool save_as_progress_update (float fraction, int64_t cnt, int64_t total, Gtk::Label* label, Gtk::ProgressBar* bar);
681 void save_session_as ();
682 void archive_session ();
683 void rename_session ();
686 int create_editor ();
687 int create_meterbridge ();
688 int create_luawindow ();
689 int create_masters ();
691 Meterbridge *meterbridge;
692 LuaWindow *luawindow;
694 /* Dialogs that can be created via new<T> */
696 RCOptionEditor* rc_option_editor;
697 Gtk::HBox rc_option_editor_placeholder;
699 WM::Proxy<SpeakerDialog> speaker_config_window;
700 WM::Proxy<AddRouteDialog> add_route_dialog;
701 WM::Proxy<About> about;
702 WM::Proxy<LocationUIWindow> location_ui;
703 WM::Proxy<RouteParams_UI> route_params;
704 WM::Proxy<EngineControl> audio_midi_setup;
705 WM::Proxy<ExportVideoDialog> export_video_dialog;
706 WM::Proxy<LuaScriptManager> lua_script_window;
708 /* Windows/Dialogs that require a creator method */
710 WM::ProxyWithConstructor<SessionOptionEditor> session_option_editor;
711 WM::ProxyWithConstructor<AddVideoDialog> add_video_dialog;
712 WM::ProxyWithConstructor<BundleManager> bundle_manager;
713 WM::ProxyWithConstructor<BigClockWindow> big_clock_window;
714 WM::ProxyWithConstructor<GlobalPortMatrixWindow> audio_port_matrix;
715 WM::ProxyWithConstructor<GlobalPortMatrixWindow> midi_port_matrix;
716 WM::ProxyWithConstructor<KeyEditor> key_editor;
718 /* creator methods */
720 SessionOptionEditor* create_session_option_editor ();
721 BundleManager* create_bundle_manager ();
722 AddVideoDialog* create_add_video_dialog ();
723 BigClockWindow* create_big_clock_window();
724 GlobalPortMatrixWindow* create_global_port_matrix (ARDOUR::DataType);
725 KeyEditor* create_key_editor ();
727 ARDOUR::SystemExec *video_server_process;
729 void handle_locations_change (ARDOUR::Location*);
731 /* Keyboard Handling */
733 ArdourKeyboard* keyboard;
735 /* Keymap handling */
737 void install_actions ();
739 void toggle_record_enable (uint16_t);
741 uint32_t rec_enabled_streams;
742 void count_recenabled_streams (ARDOUR::Route&);
746 void pop_back_splash (Gtk::Window&);
750 Gtk::MenuItem *cleanup_item;
752 void display_cleanup_results (ARDOUR::CleanupReport& rep, const gchar* list_title, const bool msg_delete);
754 void cleanup_peakfiles ();
757 bool have_configure_timeout;
758 ARDOUR::microseconds_t last_configure_time;
759 gint configure_timeout ();
761 ARDOUR::microseconds_t last_peak_grab;
762 ARDOUR::microseconds_t last_shuttle_request;
764 bool have_disk_speed_dialog_displayed;
765 void disk_speed_dialog_gone (int ignored_response, Gtk::MessageDialog*);
766 void disk_overrun_handler ();
767 void disk_underrun_handler ();
768 void gui_idle_handler ();
770 void cancel_plugin_scan ();
771 void cancel_plugin_timeout ();
772 void plugin_scan_dialog (std::string type, std::string plugin, bool);
773 void plugin_scan_timeout (int);
775 void session_format_mismatch (std::string, std::string);
777 void session_dialog (std::string);
778 int pending_state_dialog ();
779 int sr_mismatch_dialog (ARDOUR::framecnt_t, ARDOUR::framecnt_t);
780 void sr_mismatch_message (ARDOUR::framecnt_t, ARDOUR::framecnt_t);
782 Gtk::MenuItem* jack_disconnect_item;
783 Gtk::MenuItem* jack_reconnect_item;
784 Gtk::Menu* jack_bufsize_menu;
786 Glib::RefPtr<Gtk::ActionGroup> common_actions;
788 void editor_realized ();
790 std::vector<std::string> positional_sync_strings;
792 void toggle_send_midi_feedback ();
793 void toggle_use_mmc ();
794 void toggle_send_mmc ();
795 void toggle_send_mtc ();
796 void toggle_send_midi_clock ();
798 void toggle_use_osc ();
800 void parameter_changed (std::string);
801 void session_parameter_changed (std::string);
805 void check_memory_locking ();
807 void audioengine_setup ();
809 void display_message (const char *prefix, gint prefix_len,
810 Glib::RefPtr<Gtk::TextBuffer::Tag> ptag, Glib::RefPtr<Gtk::TextBuffer::Tag> mtag,
812 Gtk::Label status_bar_label;
813 bool status_bar_button_press (GdkEventButton*);
815 void loading_message (const std::string& msg);
817 PBD::ScopedConnectionList forever_connections;
818 PBD::ScopedConnection halt_connection;
820 void step_edit_status_change (bool);
822 /* these are used only in response to a platform-specific "ShouldQuit" signal */
824 void queue_finish ();
825 void fontconfig_dialog ();
827 int missing_file (ARDOUR::Session*s, std::string str, ARDOUR::DataType type);
828 int ambiguous_file (std::string file, std::vector<std::string> hits);
830 bool click_button_clicked (GdkEventButton *);
832 VisibilityGroup _status_bar_visibility;
834 /** A ProcessThread so that we have some thread-local buffers for use by
835 * PluginEqGui::impulse_analysis ().
837 ARDOUR::ProcessThread* _process_thread;
839 void feedback_detected ();
841 ArdourButton midi_panic_button;
844 void successful_graph_sort ();
845 bool _feedback_exists;
847 enum ArdourLogLevel {
854 ArdourLogLevel _log_not_acknowledged;
856 void resize_text_widgets ();
858 bool xrun_button_release (GdkEventButton* ev);
860 std::string _announce_string;
861 void check_announcements ();
863 int do_audio_midi_setup (uint32_t);
864 void audioengine_became_silent ();
866 DuplicateRouteDialog* duplicate_routes_dialog;
868 void grab_focus_after_dialog ();
870 void tabs_switch (GtkNotebookPage*, guint page_number);
871 void tabs_page_added (Gtk::Widget*, guint);
872 void tabs_page_removed (Gtk::Widget*, guint);
873 ArdourButton editor_visibility_button;
874 ArdourButton mixer_visibility_button;
875 ArdourButton prefs_visibility_button;
877 bool key_press_focus_accelerator_handler (Gtk::Window& window, GdkEventKey* ev, Gtkmm2ext::Bindings*);
878 bool try_gtk_accel_binding (GtkWindow* win, GdkEventKey* ev, bool translate, GdkModifierType modifier);
880 bool main_window_delete_event (GdkEventAny*);
881 bool idle_ask_about_quit ();
883 void load_bindings ();
884 bool tabbable_visibility_button_press (GdkEventButton* ev, std::string const& tabbable_name);
886 void step_up_through_tabs ();
887 void step_down_through_tabs ();
890 void close_current_dialog ();
891 void pre_release_dialog ();
894 #endif /* __ardour_gui_h__ */