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 static PublicEditor* _instance;
224 /** Emitted frequently with the audible frame, false, and the edit point as
225 * parameters respectively.
227 * (either RapidScreenUpdate || SuperRapidScreenUpdate - user-config)
229 static sigc::signal<void, framepos_t, bool, framepos_t> Clock;
231 static void close_all_dialogs () { CloseAllDialogs(); }
232 static sigc::signal<void> CloseAllDialogs;
234 XMLNode* main_window_settings() const;
235 XMLNode* editor_settings() const;
236 XMLNode* preferences_settings() const;
237 XMLNode* mixer_settings () const;
238 XMLNode* keyboard_settings () const;
239 XMLNode* tearoff_settings (const char*) const;
241 void save_ardour_state ();
242 gboolean configure_handler (GdkEventConfigure* conf);
244 void halt_on_xrun_message ();
245 void xrun_handler (framepos_t);
246 void create_xrun_marker (framepos_t);
248 GUIObjectState* gui_object_state;
250 MainClock* primary_clock;
251 MainClock* secondary_clock;
252 void focus_on_clock ();
253 AudioClock* big_clock;
255 TimeInfoBox* time_info_box;
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 static ARDOUR_UI *theArdourUI;
434 SessionDialog *_session_dialog;
438 int ask_about_saving_session (const std::vector<std::string>& actions);
440 void save_session_at_its_request (std::string);
441 /* periodic safety backup, to be precise */
442 gint autosave_session();
443 void update_autosave();
444 sigc::connection _autosave_connection;
446 void session_dirty_changed ();
447 void update_title ();
449 void map_transport_state ();
450 int32_t do_engine_start ();
452 void engine_halted (const char* reason, bool free_reason);
453 void engine_stopped ();
454 void engine_running ();
458 void about_signal_response(int response);
460 Gtk::VBox top_packer;
462 sigc::connection clock_signal_connection;
463 void update_clocks ();
464 void start_clocking ();
465 void stop_clocking ();
467 void update_transport_clocks (framepos_t pos);
468 void record_state_changed ();
470 std::list<MidiTracer*> _midi_tracer_windows;
472 /* Transport Control */
474 Gtk::Frame transport_frame;
475 Gtk::HBox transport_hbox;
476 Gtk::Fixed transport_base;
477 Gtk::Fixed transport_button_base;
478 Gtk::Frame transport_button_frame;
479 Gtk::HBox transport_button_hbox;
480 Gtk::VBox transport_button_vbox;
481 Gtk::HBox transport_option_button_hbox;
482 Gtk::VBox transport_option_button_vbox;
483 Gtk::HBox transport_clock_hbox;
484 Gtk::VBox transport_clock_vbox;
485 Gtk::HBox primary_clock_hbox;
486 Gtk::HBox secondary_clock_hbox;
488 struct TransportControllable : public PBD::Controllable {
499 TransportControllable (std::string name, ARDOUR_UI&, ToggleType);
500 void set_value (double, PBD::Controllable::GroupControlDisposition group_override);
501 double get_value (void) const;
507 boost::shared_ptr<TransportControllable> roll_controllable;
508 boost::shared_ptr<TransportControllable> stop_controllable;
509 boost::shared_ptr<TransportControllable> goto_start_controllable;
510 boost::shared_ptr<TransportControllable> goto_end_controllable;
511 boost::shared_ptr<TransportControllable> auto_loop_controllable;
512 boost::shared_ptr<TransportControllable> play_selection_controllable;
513 boost::shared_ptr<TransportControllable> rec_controllable;
515 void toggle_follow_edits ();
517 void set_transport_controllable_state (const XMLNode&);
518 XMLNode& get_transport_controllable_state ();
520 ArdourButton roll_button;
521 ArdourButton stop_button;
522 ArdourButton goto_start_button;
523 ArdourButton goto_end_button;
524 ArdourButton auto_loop_button;
525 ArdourButton play_selection_button;
526 ArdourButton rec_button;
528 void toggle_external_sync ();
529 void toggle_time_master ();
530 void toggle_video_sync ();
532 ShuttleControl* shuttle_box;
534 ArdourButton auto_return_button;
535 ArdourButton follow_edits_button;
536 ArdourButton auto_input_button;
537 ArdourButton click_button;
538 ArdourButton sync_button;
540 ArdourButton auditioning_alert_button;
541 ArdourButton solo_alert_button;
542 ArdourButton feedback_alert_button;
543 ArdourButton error_alert_button;
545 ArdourButton action_script_call_btn[10];
546 Gtk::Table action_script_table;
550 LevelMeterHBox * editor_meter;
551 float editor_meter_max_peak;
552 ArdourButton editor_meter_peak_display;
553 bool editor_meter_peak_button_release (GdkEventButton*);
555 void blink_handler (bool);
556 sigc::connection blink_connection;
559 void solo_blink (bool);
560 void sync_blink (bool);
561 void audition_blink (bool);
562 void feedback_blink (bool);
563 void error_blink (bool);
565 void set_flat_buttons();
567 void soloing_changed (bool);
568 void auditioning_changed (bool);
569 void _auditioning_changed (bool);
571 bool solo_alert_press (GdkEventButton* ev);
572 bool audition_alert_press (GdkEventButton* ev);
573 bool feedback_alert_press (GdkEventButton *);
574 bool error_alert_press (GdkEventButton *);
576 void big_clock_value_changed ();
577 void primary_clock_value_changed ();
578 void secondary_clock_value_changed ();
580 /* called by Blink signal */
582 void transport_rec_enable_blink (bool onoff);
584 Gtk::Menu* session_popup_menu;
586 /* menu bar and associated stuff */
588 Gtk::MenuBar* menu_bar;
589 Gtk::EventBox menu_bar_base;
592 void use_menubar_as_top_menubar ();
593 void build_menu_bar ();
595 Gtk::Label wall_clock_label;
596 gint update_wall_clock ();
598 Gtk::Label disk_space_label;
599 void update_disk_space ();
601 Gtk::Label timecode_format_label;
602 void update_timecode_format ();
604 Gtk::Label cpu_load_label;
605 void update_cpu_load ();
607 Gtk::Label xrun_label;
608 void update_xrun_count ();
610 Gtk::Label peak_thread_work_label;
611 void update_peak_thread_work ();
613 Gtk::Label buffer_load_label;
614 void update_buffer_load ();
616 Gtk::Label sample_rate_label;
617 void update_sample_rate (ARDOUR::framecnt_t);
619 Gtk::Label format_label;
620 void update_format ();
622 void every_second ();
623 void every_point_one_seconds ();
624 void every_point_zero_something_seconds ();
626 sigc::connection second_connection;
627 sigc::connection point_one_second_connection;
628 sigc::connection point_zero_something_second_connection;
629 sigc::connection fps_connection;
631 void set_fps_timeout_connection ();
633 void open_session ();
634 void open_recent_session ();
635 bool process_save_template_prompter (ArdourPrompter& prompter);
636 void save_template ();
638 void edit_metadata ();
639 void import_metadata ();
641 void set_transport_sensitivity (bool);
643 //stuff for ProTools-style numpad
644 void transport_numpad_event (int num);
645 void transport_numpad_decimal ();
646 bool _numpad_locate_happening;
647 int _pending_locate_num;
648 gint transport_numpad_timeout ();
649 sigc::connection _numpad_timeout_connection;
651 void transport_goto_nth_marker (int nth);
652 void transport_goto_zero ();
653 void transport_goto_start ();
654 void transport_goto_end ();
655 void transport_goto_wallclock ();
656 void transport_stop ();
657 void transport_record (bool roll);
658 void transport_roll ();
659 void transport_play_selection();
660 void transport_play_preroll();
661 void transport_forward (int option);
662 void transport_rewind (int option);
663 void transport_loop ();
664 void toggle_roll (bool with_abort, bool roll_out_of_bounded_mode);
665 bool trx_record_enable_all_tracks ();
667 bool _session_is_new;
668 void set_session (ARDOUR::Session *);
669 void connect_dependents_to_session (ARDOUR::Session *);
670 void we_have_dependents ();
672 void setup_session_options ();
674 guint32 last_key_press_time;
676 bool process_snapshot_session_prompter (ArdourPrompter& prompter, bool switch_to_it);
677 void snapshot_session (bool switch_to_it);
679 void quick_snapshot_session (bool switch_to_it); //does not promtp for name, just makes a timestamped file
681 SaveAsDialog* save_as_dialog;
683 bool save_as_progress_update (float fraction, int64_t cnt, int64_t total, Gtk::Label* label, Gtk::ProgressBar* bar);
684 void save_session_as ();
685 void rename_session ();
688 int create_editor ();
689 int create_meterbridge ();
690 int create_luawindow ();
691 int create_masters ();
693 Meterbridge *meterbridge;
694 LuaWindow *luawindow;
696 /* Dialogs that can be created via new<T> */
698 RCOptionEditor* rc_option_editor;
699 Gtk::HBox rc_option_editor_placeholder;
701 WM::Proxy<SpeakerDialog> speaker_config_window;
702 WM::Proxy<AddRouteDialog> add_route_dialog;
703 WM::Proxy<About> about;
704 WM::Proxy<LocationUIWindow> location_ui;
705 WM::Proxy<RouteParams_UI> route_params;
706 WM::Proxy<EngineControl> audio_midi_setup;
707 WM::Proxy<ExportVideoDialog> export_video_dialog;
708 WM::Proxy<LuaScriptManager> lua_script_window;
710 /* Windows/Dialogs that require a creator method */
712 WM::ProxyWithConstructor<SessionOptionEditor> session_option_editor;
713 WM::ProxyWithConstructor<AddVideoDialog> add_video_dialog;
714 WM::ProxyWithConstructor<BundleManager> bundle_manager;
715 WM::ProxyWithConstructor<BigClockWindow> big_clock_window;
716 WM::ProxyWithConstructor<GlobalPortMatrixWindow> audio_port_matrix;
717 WM::ProxyWithConstructor<GlobalPortMatrixWindow> midi_port_matrix;
718 WM::ProxyWithConstructor<KeyEditor> key_editor;
720 /* creator methods */
722 SessionOptionEditor* create_session_option_editor ();
723 BundleManager* create_bundle_manager ();
724 AddVideoDialog* create_add_video_dialog ();
725 BigClockWindow* create_big_clock_window();
726 GlobalPortMatrixWindow* create_global_port_matrix (ARDOUR::DataType);
727 KeyEditor* create_key_editor ();
729 ARDOUR::SystemExec *video_server_process;
731 void handle_locations_change (ARDOUR::Location*);
733 /* Keyboard Handling */
735 ArdourKeyboard* keyboard;
737 /* Keymap handling */
739 void install_actions ();
741 void toggle_record_enable (uint16_t);
743 uint32_t rec_enabled_streams;
744 void count_recenabled_streams (ARDOUR::Route&);
748 void pop_back_splash (Gtk::Window&);
752 Gtk::MenuItem *cleanup_item;
754 void display_cleanup_results (ARDOUR::CleanupReport& rep, const gchar* list_title, const bool msg_delete);
756 void cleanup_peakfiles ();
759 bool have_configure_timeout;
760 ARDOUR::microseconds_t last_configure_time;
761 gint configure_timeout ();
763 ARDOUR::microseconds_t last_peak_grab;
764 ARDOUR::microseconds_t last_shuttle_request;
766 bool have_disk_speed_dialog_displayed;
767 void disk_speed_dialog_gone (int ignored_response, Gtk::MessageDialog*);
768 void disk_overrun_handler ();
769 void disk_underrun_handler ();
770 void gui_idle_handler ();
772 void cancel_plugin_scan ();
773 void cancel_plugin_timeout ();
774 void plugin_scan_dialog (std::string type, std::string plugin, bool);
775 void plugin_scan_timeout (int);
777 void session_format_mismatch (std::string, std::string);
779 void session_dialog (std::string);
780 int pending_state_dialog ();
781 int sr_mismatch_dialog (ARDOUR::framecnt_t, ARDOUR::framecnt_t);
782 void sr_mismatch_message (ARDOUR::framecnt_t, ARDOUR::framecnt_t);
784 Gtk::MenuItem* jack_disconnect_item;
785 Gtk::MenuItem* jack_reconnect_item;
786 Gtk::Menu* jack_bufsize_menu;
788 Glib::RefPtr<Gtk::ActionGroup> common_actions;
790 void editor_realized ();
792 std::vector<std::string> positional_sync_strings;
794 void toggle_send_midi_feedback ();
795 void toggle_use_mmc ();
796 void toggle_send_mmc ();
797 void toggle_send_mtc ();
798 void toggle_send_midi_clock ();
800 void toggle_use_osc ();
802 void parameter_changed (std::string);
803 void session_parameter_changed (std::string);
807 void check_memory_locking ();
809 void audioengine_setup ();
811 void display_message (const char *prefix, gint prefix_len,
812 Glib::RefPtr<Gtk::TextBuffer::Tag> ptag, Glib::RefPtr<Gtk::TextBuffer::Tag> mtag,
814 Gtk::Label status_bar_label;
815 bool status_bar_button_press (GdkEventButton*);
817 void loading_message (const std::string& msg);
819 PBD::ScopedConnectionList forever_connections;
820 PBD::ScopedConnection halt_connection;
822 void step_edit_status_change (bool);
824 /* these are used only in response to a platform-specific "ShouldQuit" signal */
826 void queue_finish ();
827 void fontconfig_dialog ();
829 int missing_file (ARDOUR::Session*s, std::string str, ARDOUR::DataType type);
830 int ambiguous_file (std::string file, std::vector<std::string> hits);
832 bool click_button_clicked (GdkEventButton *);
834 VisibilityGroup _status_bar_visibility;
836 /** A ProcessThread so that we have some thread-local buffers for use by
837 * PluginEqGui::impulse_analysis ().
839 ARDOUR::ProcessThread* _process_thread;
841 void feedback_detected ();
843 ArdourButton midi_panic_button;
846 void successful_graph_sort ();
847 bool _feedback_exists;
849 enum ArdourLogLevel {
856 ArdourLogLevel _log_not_acknowledged;
858 void resize_text_widgets ();
860 bool xrun_button_release (GdkEventButton* ev);
862 std::string _announce_string;
863 void check_announcements ();
865 int do_audio_midi_setup (uint32_t);
866 void audioengine_became_silent ();
868 DuplicateRouteDialog* duplicate_routes_dialog;
870 void grab_focus_after_dialog ();
872 void tabs_switch (GtkNotebookPage*, guint page_number);
873 void tabs_page_added (Gtk::Widget*, guint);
874 void tabs_page_removed (Gtk::Widget*, guint);
875 ArdourButton editor_visibility_button;
876 ArdourButton mixer_visibility_button;
877 ArdourButton prefs_visibility_button;
879 bool key_press_focus_accelerator_handler (Gtk::Window& window, GdkEventKey* ev, Gtkmm2ext::Bindings*);
880 bool try_gtk_accel_binding (GtkWindow* win, GdkEventKey* ev, bool translate, GdkModifierType modifier);
882 bool main_window_delete_event (GdkEventAny*);
883 bool idle_ask_about_quit ();
885 void load_bindings ();
886 bool tabbable_visibility_button_press (GdkEventButton* ev, std::string const& tabbable_name);
888 void step_up_through_tabs ();
889 void step_down_through_tabs ();
892 void pre_release_dialog ();
895 #endif /* __ardour_gui_h__ */