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_params_ui.h"
95 #include "session_option_editor.h"
96 #include "speaker_dialog.h"
100 class AddVideoDialog;
101 class BigClockWindow;
104 class ExportVideoDialog;
106 class LocationUIWindow;
107 class LuaScriptManager;
108 class RCOptionEditor;
109 class RouteParams_UI;
110 class SessionOptionEditor;
112 class GlobalPortMatrixWindow;
116 class ArdourKeyboard;
119 class ConnectionEditor;
120 class DuplicateRouteDialog;
123 class ArdourPrompter;
127 class SessionOptionEditorWindow;
128 class ShuttleControl;
135 class LevelMeterHBox;
136 class GUIObjectState;
139 class ControlProtocolInfo;
152 namespace Gtkmm2ext {
156 class ARDOUR_UI : public Gtkmm2ext::UI, public ARDOUR::SessionHandlePtr
159 ARDOUR_UI (int *argcp, char **argvp[], const char* localedir);
162 bool run_startup (bool should_be_new, std::string load_template);
168 void launch_manual ();
169 void launch_reference ();
170 void launch_tracker ();
171 void launch_subscribe ();
172 void launch_cheat_sheet ();
173 void launch_website ();
174 void launch_website_dev ();
175 void launch_forums ();
176 void launch_howto_report ();
180 void load_from_application_api (const std::string& path);
183 int load_session (const std::string& path, const std::string& snapshot, std::string mix_template = std::string());
185 int build_session (const std::string& path, const std::string& snapshot, ARDOUR::BusProfile&);
186 bool session_is_new() const { return _session_is_new; }
188 ARDOUR::Session* the_session() { return _session; }
190 bool get_smart_mode () const;
192 int get_session_parameters (bool quit_on_cancel, bool should_be_new = false, std::string load_template = "");
193 int build_session_from_dialog (SessionDialog&, const std::string& session_name, const std::string& session_path);
194 bool ask_about_loading_existing_session (const std::string& session_path);
196 /// @return true if session was successfully unloaded.
197 int unload_session (bool hide_stuff = false);
198 void close_session();
200 int save_state_canfail (std::string state_name = "", bool switch_to_it = false);
201 void save_state (const std::string & state_name = "", bool switch_to_it = false);
203 static ARDOUR_UI *instance () { return theArdourUI; }
205 /* signal emitted when escape key is pressed. All UI components that
206 need to respond to Escape in some way (e.g. break drag, clear
207 selection, etc) should connect to and handle this.
209 PBD::Signal0<void> Escape;
211 PublicEditor& the_editor() { return *editor;}
212 Mixer_UI* the_mixer() { return mixer; }
214 void new_midi_tracer_window ();
215 void toggle_editing_space();
216 void toggle_mixer_space();
217 void toggle_mixer_list();
218 void toggle_monitor_section_visibility ();
219 void toggle_keep_tearoffs();
221 static PublicEditor* _instance;
223 /** Emitted frequently with the audible frame, false, and the edit point as
224 * parameters respectively.
226 * (either RapidScreenUpdate || SuperRapidScreenUpdate - user-config)
228 static sigc::signal<void, framepos_t, bool, framepos_t> Clock;
230 static void close_all_dialogs () { CloseAllDialogs(); }
231 static sigc::signal<void> CloseAllDialogs;
233 XMLNode* main_window_settings() const;
234 XMLNode* editor_settings() const;
235 XMLNode* preferences_settings() const;
236 XMLNode* mixer_settings () const;
237 XMLNode* keyboard_settings () const;
238 XMLNode* tearoff_settings (const char*) const;
240 void save_ardour_state ();
241 gboolean configure_handler (GdkEventConfigure* conf);
243 void halt_on_xrun_message ();
244 void xrun_handler (framepos_t);
245 void create_xrun_marker (framepos_t);
247 GUIObjectState* gui_object_state;
249 MainClock* primary_clock;
250 MainClock* secondary_clock;
251 void focus_on_clock ();
252 AudioClock* big_clock;
254 TimeInfoBox* time_info_box;
256 VideoTimeLine *video_timeline;
258 void store_clock_modes ();
259 void restore_clock_modes ();
260 void reset_main_clocks ();
262 void synchronize_sync_source_and_video_pullup ();
265 void add_route_dialog_finished (int);
267 void add_routes_part_two ();
268 void add_routes_thread ();
270 void start_duplicate_routes ();
272 void add_lua_script ();
273 void remove_lua_script ();
275 void add_video (Gtk::Window* float_window);
276 void remove_video ();
277 void start_video_server_menu (Gtk::Window* float_window);
278 bool start_video_server (Gtk::Window* float_window, bool popup_msg);
279 void stop_video_server (bool ask_confirm=false);
280 void flush_videotimeline_cache (bool localcacheonly=false);
281 void export_video (bool range = false);
283 void session_add_vca (std::string const &, uint32_t);
285 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);
286 void session_add_audio_track (
288 int32_t output_channels,
289 ARDOUR::TrackMode mode,
290 ARDOUR::RouteGroup* route_group,
292 std::string const & name_template,
294 ARDOUR::PresentationInfo::order_t order
296 session_add_audio_route (true, input_channels, output_channels, mode, route_group, how_many, name_template, strict_io, order);
299 void session_add_audio_bus (
301 int32_t output_channels,
302 ARDOUR::RouteGroup* route_group,
304 std::string const & name_template,
306 ARDOUR::PresentationInfo::order_t order
308 session_add_audio_route (false, input_channels, output_channels, ARDOUR::Normal, route_group, how_many, name_template, strict_io, order);
311 void session_add_midi_track (
312 ARDOUR::RouteGroup* route_group,
314 std::string const & name_template,
316 ARDOUR::PluginInfoPtr instrument,
317 ARDOUR::Plugin::PresetRecord* preset,
318 ARDOUR::PresentationInfo::order_t order
320 session_add_midi_route (true, route_group, how_many, name_template, strict_io, instrument, preset, order);
323 void session_add_mixed_track (const ARDOUR::ChanCount&, const ARDOUR::ChanCount&, ARDOUR::RouteGroup*, uint32_t, std::string const &, bool,
324 ARDOUR::PluginInfoPtr, ARDOUR::Plugin::PresetRecord* pset,
325 ARDOUR::PresentationInfo::order_t order);
326 void session_add_midi_bus (ARDOUR::RouteGroup*, uint32_t, std::string const &, bool, ARDOUR::PluginInfoPtr, ARDOUR::Plugin::PresetRecord* pset,
327 ARDOUR::PresentationInfo::order_t order);
328 void session_add_midi_route (bool, ARDOUR::RouteGroup *, uint32_t, std::string const &, bool,
329 ARDOUR::PluginInfoPtr, ARDOUR::Plugin::PresetRecord*,
330 ARDOUR::PresentationInfo::order_t order);
331 void display_insufficient_ports_message ();
333 void attach_to_engine ();
336 gint exit_on_main_window_close (GdkEventAny *);
338 void maximise_editing_space ();
339 void restore_editing_space ();
341 void show_ui_prefs ();
343 bool check_audioengine(Gtk::Window&);
345 void setup_profile ();
346 void setup_tooltips ();
348 void set_shuttle_fract (double);
350 void get_process_buffers ();
351 void drop_process_buffers ();
353 void reset_peak_display ();
354 void reset_route_peak_display (ARDOUR::Route*);
355 void reset_group_peak_display (ARDOUR::RouteGroup*);
357 const std::string& announce_string() const { return _announce_string; }
359 void hide_application ();
361 Gtk::Notebook& tabs();
362 Gtk::Window& main_window () { return _main_window; }
364 void setup_toplevel_window (Gtk::Window&, const std::string& name, void* owner);
366 /* called from a static C function */
368 GtkNotebook* tab_window_root_drop (GtkNotebook* src,
374 bool tabbed_window_state_event_handler (GdkEventWindowState*, void* object);
375 bool key_event_handler (GdkEventKey*, Gtk::Window* window);
377 Gtkmm2ext::ActionMap global_actions;
380 friend class PublicEditor;
382 void toggle_auto_play ();
383 void toggle_auto_input ();
384 void toggle_punch ();
385 void unset_dual_punch ();
386 bool ignore_dual_punch;
387 void toggle_punch_in ();
388 void toggle_punch_out ();
389 void show_loop_punch_ruler_and_disallow_hide ();
390 void reenable_hide_loop_punch_ruler_if_appropriate ();
391 void toggle_auto_return ();
392 void toggle_click ();
393 void toggle_audio_midi_setup ();
394 void toggle_session_auto_loop ();
395 void toggle_rc_options_window ();
396 void toggle_session_options_window ();
399 Gtk::Window _main_window;
400 Gtkmm2ext::VisibilityTracker* main_window_visibility;
401 Gtk::VBox main_vpacker;
402 Gtk::HBox status_bar_hpacker;
404 PublicEditor* editor;
406 Gtk::Tooltips _tooltips;
410 bool _initial_verbose_plugin_scan;
411 bool first_time_engine_run;
413 void show_tabbable (Gtkmm2ext::Tabbable*);
414 void hide_tabbable (Gtkmm2ext::Tabbable*);
415 void detach_tabbable (Gtkmm2ext::Tabbable*);
416 void attach_tabbable (Gtkmm2ext::Tabbable*);
417 void button_change_tabbable_visibility (Gtkmm2ext::Tabbable*);
418 void key_change_tabbable_visibility (Gtkmm2ext::Tabbable*);
419 void toggle_editor_and_mixer ();
421 void tabbable_state_change (Gtkmm2ext::Tabbable&);
423 void toggle_meterbridge ();
424 void toggle_luawindow ();
426 int setup_windows ();
427 void setup_transport ();
430 static ARDOUR_UI *theArdourUI;
431 SessionDialog *_session_dialog;
435 int ask_about_saving_session (const std::vector<std::string>& actions);
437 void save_session_at_its_request (std::string);
438 /* periodic safety backup, to be precise */
439 gint autosave_session();
440 void update_autosave();
441 sigc::connection _autosave_connection;
443 void session_dirty_changed ();
444 void update_title ();
446 void map_transport_state ();
447 int32_t do_engine_start ();
449 void engine_halted (const char* reason, bool free_reason);
450 void engine_stopped ();
451 void engine_running ();
455 void about_signal_response(int response);
457 Gtk::VBox top_packer;
459 sigc::connection clock_signal_connection;
460 void update_clocks ();
461 void start_clocking ();
462 void stop_clocking ();
464 void update_transport_clocks (framepos_t pos);
465 void record_state_changed ();
467 std::list<MidiTracer*> _midi_tracer_windows;
469 /* Transport Control */
471 Gtk::Frame transport_frame;
472 Gtk::HBox transport_hbox;
473 Gtk::Fixed transport_base;
474 Gtk::Fixed transport_button_base;
475 Gtk::Frame transport_button_frame;
476 Gtk::HBox transport_button_hbox;
477 Gtk::VBox transport_button_vbox;
478 Gtk::HBox transport_option_button_hbox;
479 Gtk::VBox transport_option_button_vbox;
480 Gtk::HBox transport_clock_hbox;
481 Gtk::VBox transport_clock_vbox;
482 Gtk::HBox primary_clock_hbox;
483 Gtk::HBox secondary_clock_hbox;
485 struct TransportControllable : public PBD::Controllable {
496 TransportControllable (std::string name, ARDOUR_UI&, ToggleType);
497 void set_value (double, PBD::Controllable::GroupControlDisposition group_override);
498 double get_value (void) const;
504 boost::shared_ptr<TransportControllable> roll_controllable;
505 boost::shared_ptr<TransportControllable> stop_controllable;
506 boost::shared_ptr<TransportControllable> goto_start_controllable;
507 boost::shared_ptr<TransportControllable> goto_end_controllable;
508 boost::shared_ptr<TransportControllable> auto_loop_controllable;
509 boost::shared_ptr<TransportControllable> play_selection_controllable;
510 boost::shared_ptr<TransportControllable> rec_controllable;
512 void toggle_follow_edits ();
514 void set_transport_controllable_state (const XMLNode&);
515 XMLNode& get_transport_controllable_state ();
517 ArdourButton roll_button;
518 ArdourButton stop_button;
519 ArdourButton goto_start_button;
520 ArdourButton goto_end_button;
521 ArdourButton auto_loop_button;
522 ArdourButton play_selection_button;
523 ArdourButton rec_button;
525 void toggle_external_sync ();
526 void toggle_time_master ();
527 void toggle_video_sync ();
529 ShuttleControl* shuttle_box;
531 ArdourButton auto_return_button;
532 ArdourButton follow_edits_button;
533 ArdourButton auto_input_button;
534 ArdourButton click_button;
535 ArdourButton sync_button;
537 ArdourButton auditioning_alert_button;
538 ArdourButton solo_alert_button;
539 ArdourButton feedback_alert_button;
540 ArdourButton error_alert_button;
542 ArdourButton action_script_call_btn[10];
543 Gtk::Table action_script_table;
547 LevelMeterHBox * editor_meter;
548 float editor_meter_max_peak;
549 ArdourButton editor_meter_peak_display;
550 bool editor_meter_peak_button_release (GdkEventButton*);
552 void blink_handler (bool);
553 sigc::connection blink_connection;
556 void solo_blink (bool);
557 void sync_blink (bool);
558 void audition_blink (bool);
559 void feedback_blink (bool);
560 void error_blink (bool);
562 void set_flat_buttons();
564 void soloing_changed (bool);
565 void auditioning_changed (bool);
566 void _auditioning_changed (bool);
568 bool solo_alert_press (GdkEventButton* ev);
569 bool audition_alert_press (GdkEventButton* ev);
570 bool feedback_alert_press (GdkEventButton *);
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 rename_session ();
683 ARDOUR::PresentationInfo::order_t translate_order (AddRouteDialog::InsertAt);
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 pre_release_dialog ();
893 #endif /* __ardour_gui_h__ */