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* mixer_settings () const;
236 XMLNode* keyboard_settings () const;
237 XMLNode* tearoff_settings (const char*) const;
239 void save_ardour_state ();
240 gboolean configure_handler (GdkEventConfigure* conf);
242 void halt_on_xrun_message ();
243 void xrun_handler (framepos_t);
244 void create_xrun_marker (framepos_t);
246 GUIObjectState* gui_object_state;
248 MainClock* primary_clock;
249 MainClock* secondary_clock;
250 void focus_on_clock ();
251 AudioClock* big_clock;
253 TimeInfoBox* time_info_box;
255 VideoTimeLine *video_timeline;
257 void store_clock_modes ();
258 void restore_clock_modes ();
259 void reset_main_clocks ();
261 void synchronize_sync_source_and_video_pullup ();
264 void add_route_dialog_finished (int);
266 void add_routes_part_two ();
267 void add_routes_thread ();
269 void start_duplicate_routes ();
271 void add_lua_script ();
272 void remove_lua_script ();
274 void add_video (Gtk::Window* float_window);
275 void remove_video ();
276 void start_video_server_menu (Gtk::Window* float_window);
277 bool start_video_server (Gtk::Window* float_window, bool popup_msg);
278 void stop_video_server (bool ask_confirm=false);
279 void flush_videotimeline_cache (bool localcacheonly=false);
280 void export_video (bool range = false);
282 void session_add_vca (std::string const &, uint32_t);
284 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);
285 void session_add_audio_track (
287 int32_t output_channels,
288 ARDOUR::TrackMode mode,
289 ARDOUR::RouteGroup* route_group,
291 std::string const & name_template,
293 ARDOUR::PresentationInfo::order_t order
295 session_add_audio_route (true, input_channels, output_channels, mode, route_group, how_many, name_template, strict_io, order);
298 void session_add_audio_bus (
300 int32_t output_channels,
301 ARDOUR::RouteGroup* route_group,
303 std::string const & name_template,
305 ARDOUR::PresentationInfo::order_t order
307 session_add_audio_route (false, input_channels, output_channels, ARDOUR::Normal, route_group, how_many, name_template, strict_io, order);
310 void session_add_midi_track (
311 ARDOUR::RouteGroup* route_group,
313 std::string const & name_template,
315 ARDOUR::PluginInfoPtr instrument,
316 ARDOUR::Plugin::PresetRecord* preset,
317 ARDOUR::PresentationInfo::order_t order
319 session_add_midi_route (true, route_group, how_many, name_template, strict_io, instrument, preset, order);
322 void session_add_mixed_track (const ARDOUR::ChanCount&, const ARDOUR::ChanCount&, ARDOUR::RouteGroup*, uint32_t, std::string const &, bool,
323 ARDOUR::PluginInfoPtr, ARDOUR::Plugin::PresetRecord* pset,
324 ARDOUR::PresentationInfo::order_t order);
325 void session_add_midi_bus (ARDOUR::RouteGroup*, uint32_t, std::string const &, bool, ARDOUR::PluginInfoPtr, ARDOUR::Plugin::PresetRecord* pset,
326 ARDOUR::PresentationInfo::order_t order);
327 void session_add_midi_route (bool, ARDOUR::RouteGroup *, uint32_t, std::string const &, bool,
328 ARDOUR::PluginInfoPtr, ARDOUR::Plugin::PresetRecord*,
329 ARDOUR::PresentationInfo::order_t order);
330 void display_insufficient_ports_message ();
332 void attach_to_engine ();
335 gint exit_on_main_window_close (GdkEventAny *);
337 void maximise_editing_space ();
338 void restore_editing_space ();
340 void show_ui_prefs ();
342 bool check_audioengine(Gtk::Window&);
344 void setup_profile ();
345 void setup_tooltips ();
347 void set_shuttle_fract (double);
349 void get_process_buffers ();
350 void drop_process_buffers ();
352 void reset_peak_display ();
353 void reset_route_peak_display (ARDOUR::Route*);
354 void reset_group_peak_display (ARDOUR::RouteGroup*);
356 const std::string& announce_string() const { return _announce_string; }
358 void hide_application ();
360 Gtk::Notebook& tabs();
361 Gtk::Window& main_window () { return _main_window; }
363 void setup_toplevel_window (Gtk::Window&, const std::string& name, void* owner);
365 /* called from a static C function */
367 GtkNotebook* tab_window_root_drop (GtkNotebook* src,
373 bool tabbed_window_state_event_handler (GdkEventWindowState*, void* object);
374 bool key_event_handler (GdkEventKey*, Gtk::Window* window);
376 Gtkmm2ext::ActionMap global_actions;
379 friend class PublicEditor;
381 void toggle_auto_play ();
382 void toggle_auto_input ();
383 void toggle_punch ();
384 void unset_dual_punch ();
385 bool ignore_dual_punch;
386 void toggle_punch_in ();
387 void toggle_punch_out ();
388 void show_loop_punch_ruler_and_disallow_hide ();
389 void reenable_hide_loop_punch_ruler_if_appropriate ();
390 void toggle_auto_return ();
391 void toggle_click ();
392 void toggle_audio_midi_setup ();
393 void toggle_session_auto_loop ();
394 void toggle_rc_options_window ();
395 void toggle_session_options_window ();
398 Gtk::Window _main_window;
399 Gtkmm2ext::VisibilityTracker* main_window_visibility;
400 Gtk::VBox main_vpacker;
401 Gtk::HBox status_bar_hpacker;
403 PublicEditor* editor;
405 Gtk::Tooltips _tooltips;
409 bool _initial_verbose_plugin_scan;
410 bool first_time_engine_run;
412 void show_tabbable (Gtkmm2ext::Tabbable*);
413 void hide_tabbable (Gtkmm2ext::Tabbable*);
414 void detach_tabbable (Gtkmm2ext::Tabbable*);
415 void attach_tabbable (Gtkmm2ext::Tabbable*);
416 void button_change_tabbable_visibility (Gtkmm2ext::Tabbable*);
417 void key_change_tabbable_visibility (Gtkmm2ext::Tabbable*);
418 void toggle_editor_and_mixer ();
420 void tabbable_state_change (Gtkmm2ext::Tabbable&);
422 void toggle_meterbridge ();
423 void toggle_luawindow ();
425 int setup_windows ();
426 void setup_transport ();
429 static ARDOUR_UI *theArdourUI;
430 SessionDialog *_session_dialog;
434 int ask_about_saving_session (const std::vector<std::string>& actions);
436 void save_session_at_its_request (std::string);
437 /* periodic safety backup, to be precise */
438 gint autosave_session();
439 void update_autosave();
440 sigc::connection _autosave_connection;
442 void session_dirty_changed ();
443 void update_title ();
445 void map_transport_state ();
446 int32_t do_engine_start ();
448 void engine_halted (const char* reason, bool free_reason);
449 void engine_stopped ();
450 void engine_running ();
454 void about_signal_response(int response);
456 Gtk::VBox top_packer;
458 sigc::connection clock_signal_connection;
459 void update_clocks ();
460 void start_clocking ();
461 void stop_clocking ();
463 void update_transport_clocks (framepos_t pos);
464 void record_state_changed ();
466 std::list<MidiTracer*> _midi_tracer_windows;
468 /* Transport Control */
470 Gtk::Frame transport_frame;
471 Gtk::HBox transport_hbox;
472 Gtk::Fixed transport_base;
473 Gtk::Fixed transport_button_base;
474 Gtk::Frame transport_button_frame;
475 Gtk::HBox transport_button_hbox;
476 Gtk::VBox transport_button_vbox;
477 Gtk::HBox transport_option_button_hbox;
478 Gtk::VBox transport_option_button_vbox;
479 Gtk::HBox transport_clock_hbox;
480 Gtk::VBox transport_clock_vbox;
481 Gtk::HBox primary_clock_hbox;
482 Gtk::HBox secondary_clock_hbox;
484 struct TransportControllable : public PBD::Controllable {
495 TransportControllable (std::string name, ARDOUR_UI&, ToggleType);
496 void set_value (double, PBD::Controllable::GroupControlDisposition group_override);
497 double get_value (void) const;
503 boost::shared_ptr<TransportControllable> roll_controllable;
504 boost::shared_ptr<TransportControllable> stop_controllable;
505 boost::shared_ptr<TransportControllable> goto_start_controllable;
506 boost::shared_ptr<TransportControllable> goto_end_controllable;
507 boost::shared_ptr<TransportControllable> auto_loop_controllable;
508 boost::shared_ptr<TransportControllable> play_selection_controllable;
509 boost::shared_ptr<TransportControllable> rec_controllable;
511 void toggle_follow_edits ();
513 void set_transport_controllable_state (const XMLNode&);
514 XMLNode& get_transport_controllable_state ();
516 ArdourButton roll_button;
517 ArdourButton stop_button;
518 ArdourButton goto_start_button;
519 ArdourButton goto_end_button;
520 ArdourButton auto_loop_button;
521 ArdourButton play_selection_button;
522 ArdourButton rec_button;
524 void toggle_external_sync ();
525 void toggle_time_master ();
526 void toggle_video_sync ();
528 ShuttleControl* shuttle_box;
530 ArdourButton auto_return_button;
531 ArdourButton follow_edits_button;
532 ArdourButton auto_input_button;
533 ArdourButton click_button;
534 ArdourButton sync_button;
536 ArdourButton auditioning_alert_button;
537 ArdourButton solo_alert_button;
538 ArdourButton feedback_alert_button;
539 ArdourButton error_alert_button;
541 ArdourButton action_script_call_btn[10];
542 Gtk::Table action_script_table;
546 LevelMeterHBox * editor_meter;
547 float editor_meter_max_peak;
548 ArdourButton editor_meter_peak_display;
549 bool editor_meter_peak_button_release (GdkEventButton*);
551 void blink_handler (bool);
552 sigc::connection blink_connection;
555 void solo_blink (bool);
556 void sync_blink (bool);
557 void audition_blink (bool);
558 void feedback_blink (bool);
559 void error_blink (bool);
561 void set_flat_buttons();
563 void soloing_changed (bool);
564 void auditioning_changed (bool);
565 void _auditioning_changed (bool);
567 bool solo_alert_press (GdkEventButton* ev);
568 bool audition_alert_press (GdkEventButton* ev);
569 bool feedback_alert_press (GdkEventButton *);
570 bool error_alert_press (GdkEventButton *);
572 void big_clock_value_changed ();
573 void primary_clock_value_changed ();
574 void secondary_clock_value_changed ();
576 /* called by Blink signal */
578 void transport_rec_enable_blink (bool onoff);
580 Gtk::Menu* session_popup_menu;
582 /* menu bar and associated stuff */
584 Gtk::MenuBar* menu_bar;
585 Gtk::EventBox menu_bar_base;
588 void use_menubar_as_top_menubar ();
589 void build_menu_bar ();
591 Gtk::Label wall_clock_label;
592 gint update_wall_clock ();
594 Gtk::Label disk_space_label;
595 void update_disk_space ();
597 Gtk::Label timecode_format_label;
598 void update_timecode_format ();
600 Gtk::Label cpu_load_label;
601 void update_cpu_load ();
603 Gtk::Label xrun_label;
604 void update_xrun_count ();
606 Gtk::Label peak_thread_work_label;
607 void update_peak_thread_work ();
609 Gtk::Label buffer_load_label;
610 void update_buffer_load ();
612 Gtk::Label sample_rate_label;
613 void update_sample_rate (ARDOUR::framecnt_t);
615 Gtk::Label format_label;
616 void update_format ();
618 void every_second ();
619 void every_point_one_seconds ();
620 void every_point_zero_something_seconds ();
622 sigc::connection second_connection;
623 sigc::connection point_one_second_connection;
624 sigc::connection point_zero_something_second_connection;
625 sigc::connection fps_connection;
627 void set_fps_timeout_connection ();
629 void open_session ();
630 void open_recent_session ();
631 bool process_save_template_prompter (ArdourPrompter& prompter);
632 void save_template ();
634 void edit_metadata ();
635 void import_metadata ();
637 void set_transport_sensitivity (bool);
639 //stuff for ProTools-style numpad
640 void transport_numpad_event (int num);
641 void transport_numpad_decimal ();
642 bool _numpad_locate_happening;
643 int _pending_locate_num;
644 gint transport_numpad_timeout ();
645 sigc::connection _numpad_timeout_connection;
647 void transport_goto_nth_marker (int nth);
648 void transport_goto_zero ();
649 void transport_goto_start ();
650 void transport_goto_end ();
651 void transport_goto_wallclock ();
652 void transport_stop ();
653 void transport_record (bool roll);
654 void transport_roll ();
655 void transport_play_selection();
656 void transport_play_preroll();
657 void transport_forward (int option);
658 void transport_rewind (int option);
659 void transport_loop ();
660 void toggle_roll (bool with_abort, bool roll_out_of_bounded_mode);
661 bool trx_record_enable_all_tracks ();
663 bool _session_is_new;
664 void set_session (ARDOUR::Session *);
665 void connect_dependents_to_session (ARDOUR::Session *);
666 void we_have_dependents ();
668 void setup_session_options ();
670 guint32 last_key_press_time;
672 bool process_snapshot_session_prompter (ArdourPrompter& prompter, bool switch_to_it);
673 void snapshot_session (bool switch_to_it);
675 void quick_snapshot_session (bool switch_to_it); //does not promtp for name, just makes a timestamped file
677 SaveAsDialog* save_as_dialog;
679 bool save_as_progress_update (float fraction, int64_t cnt, int64_t total, Gtk::Label* label, Gtk::ProgressBar* bar);
680 void save_session_as ();
681 void rename_session ();
682 ARDOUR::PresentationInfo::order_t translate_order (AddRouteDialog::InsertAt);
685 int create_editor ();
686 int create_meterbridge ();
687 int create_luawindow ();
688 int create_masters ();
690 Meterbridge *meterbridge;
691 LuaWindow *luawindow;
693 /* Dialogs that can be created via new<T> */
695 RCOptionEditor* rc_option_editor;
696 Gtk::HBox rc_option_editor_placeholder;
698 WM::Proxy<SpeakerDialog> speaker_config_window;
699 WM::Proxy<AddRouteDialog> add_route_dialog;
700 WM::Proxy<About> about;
701 WM::Proxy<LocationUIWindow> location_ui;
702 WM::Proxy<RouteParams_UI> route_params;
703 WM::Proxy<EngineControl> audio_midi_setup;
704 WM::Proxy<ExportVideoDialog> export_video_dialog;
705 WM::Proxy<LuaScriptManager> lua_script_window;
707 /* Windows/Dialogs that require a creator method */
709 WM::ProxyWithConstructor<SessionOptionEditor> session_option_editor;
710 WM::ProxyWithConstructor<AddVideoDialog> add_video_dialog;
711 WM::ProxyWithConstructor<BundleManager> bundle_manager;
712 WM::ProxyWithConstructor<BigClockWindow> big_clock_window;
713 WM::ProxyWithConstructor<GlobalPortMatrixWindow> audio_port_matrix;
714 WM::ProxyWithConstructor<GlobalPortMatrixWindow> midi_port_matrix;
715 WM::ProxyWithConstructor<KeyEditor> key_editor;
717 /* creator methods */
719 SessionOptionEditor* create_session_option_editor ();
720 BundleManager* create_bundle_manager ();
721 AddVideoDialog* create_add_video_dialog ();
722 BigClockWindow* create_big_clock_window();
723 GlobalPortMatrixWindow* create_global_port_matrix (ARDOUR::DataType);
724 KeyEditor* create_key_editor ();
726 ARDOUR::SystemExec *video_server_process;
728 void handle_locations_change (ARDOUR::Location*);
730 /* Keyboard Handling */
732 ArdourKeyboard* keyboard;
734 /* Keymap handling */
736 void install_actions ();
738 void toggle_record_enable (uint16_t);
740 uint32_t rec_enabled_streams;
741 void count_recenabled_streams (ARDOUR::Route&);
745 void pop_back_splash (Gtk::Window&);
749 Gtk::MenuItem *cleanup_item;
751 void display_cleanup_results (ARDOUR::CleanupReport& rep, const gchar* list_title, const bool msg_delete);
753 void cleanup_peakfiles ();
756 bool have_configure_timeout;
757 ARDOUR::microseconds_t last_configure_time;
758 gint configure_timeout ();
760 ARDOUR::microseconds_t last_peak_grab;
761 ARDOUR::microseconds_t last_shuttle_request;
763 bool have_disk_speed_dialog_displayed;
764 void disk_speed_dialog_gone (int ignored_response, Gtk::MessageDialog*);
765 void disk_overrun_handler ();
766 void disk_underrun_handler ();
767 void gui_idle_handler ();
769 void cancel_plugin_scan ();
770 void cancel_plugin_timeout ();
771 void plugin_scan_dialog (std::string type, std::string plugin, bool);
772 void plugin_scan_timeout (int);
774 void session_format_mismatch (std::string, std::string);
776 void session_dialog (std::string);
777 int pending_state_dialog ();
778 int sr_mismatch_dialog (ARDOUR::framecnt_t, ARDOUR::framecnt_t);
779 void sr_mismatch_message (ARDOUR::framecnt_t, ARDOUR::framecnt_t);
781 Gtk::MenuItem* jack_disconnect_item;
782 Gtk::MenuItem* jack_reconnect_item;
783 Gtk::Menu* jack_bufsize_menu;
785 Glib::RefPtr<Gtk::ActionGroup> common_actions;
787 void editor_realized ();
789 std::vector<std::string> positional_sync_strings;
791 void toggle_send_midi_feedback ();
792 void toggle_use_mmc ();
793 void toggle_send_mmc ();
794 void toggle_send_mtc ();
795 void toggle_send_midi_clock ();
797 void toggle_use_osc ();
799 void parameter_changed (std::string);
800 void session_parameter_changed (std::string);
804 void check_memory_locking ();
806 void audioengine_setup ();
808 void display_message (const char *prefix, gint prefix_len,
809 Glib::RefPtr<Gtk::TextBuffer::Tag> ptag, Glib::RefPtr<Gtk::TextBuffer::Tag> mtag,
811 Gtk::Label status_bar_label;
812 bool status_bar_button_press (GdkEventButton*);
814 void loading_message (const std::string& msg);
816 PBD::ScopedConnectionList forever_connections;
817 PBD::ScopedConnection halt_connection;
819 void step_edit_status_change (bool);
821 /* these are used only in response to a platform-specific "ShouldQuit" signal */
823 void queue_finish ();
824 void fontconfig_dialog ();
826 int missing_file (ARDOUR::Session*s, std::string str, ARDOUR::DataType type);
827 int ambiguous_file (std::string file, std::vector<std::string> hits);
829 bool click_button_clicked (GdkEventButton *);
831 VisibilityGroup _status_bar_visibility;
833 /** A ProcessThread so that we have some thread-local buffers for use by
834 * PluginEqGui::impulse_analysis ().
836 ARDOUR::ProcessThread* _process_thread;
838 void feedback_detected ();
840 ArdourButton midi_panic_button;
843 void successful_graph_sort ();
844 bool _feedback_exists;
846 enum ArdourLogLevel {
853 ArdourLogLevel _log_not_acknowledged;
855 void resize_text_widgets ();
857 bool xrun_button_release (GdkEventButton* ev);
859 std::string _announce_string;
860 void check_announcements ();
862 int do_audio_midi_setup (uint32_t);
863 void audioengine_became_silent ();
865 DuplicateRouteDialog* duplicate_routes_dialog;
867 void grab_focus_after_dialog ();
869 void tabs_switch (GtkNotebookPage*, guint page_number);
870 void tabs_page_added (Gtk::Widget*, guint);
871 void tabs_page_removed (Gtk::Widget*, guint);
872 ArdourButton editor_visibility_button;
873 ArdourButton mixer_visibility_button;
874 ArdourButton prefs_visibility_button;
876 bool key_press_focus_accelerator_handler (Gtk::Window& window, GdkEventKey* ev, Gtkmm2ext::Bindings*);
877 bool try_gtk_accel_binding (GtkWindow* win, GdkEventKey* ev, bool translate, GdkModifierType modifier);
879 bool main_window_delete_event (GdkEventAny*);
880 bool idle_ask_about_quit ();
882 void load_bindings ();
883 bool tabbable_visibility_button_press (GdkEventButton* ev, std::string const& tabbable_name);
885 void step_up_through_tabs ();
886 void step_down_through_tabs ();
889 void pre_release_dialog ();
892 #endif /* __ardour_gui_h__ */