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 TimeInfoBox* time_info_box;
259 VideoTimeLine *video_timeline;
261 void store_clock_modes ();
262 void restore_clock_modes ();
263 void reset_main_clocks ();
265 void synchronize_sync_source_and_video_pullup ();
268 void add_route_dialog_finished (int);
270 void add_routes_part_two ();
271 void add_routes_thread ();
273 void start_duplicate_routes ();
275 void add_lua_script ();
276 void remove_lua_script ();
278 void add_video (Gtk::Window* float_window);
279 void remove_video ();
280 void start_video_server_menu (Gtk::Window* float_window);
281 bool start_video_server (Gtk::Window* float_window, bool popup_msg);
282 void stop_video_server (bool ask_confirm=false);
283 void flush_videotimeline_cache (bool localcacheonly=false);
284 void export_video (bool range = false);
286 void session_add_vca (std::string const &, uint32_t);
288 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);
289 void session_add_audio_track (
291 int32_t output_channels,
292 ARDOUR::TrackMode mode,
293 ARDOUR::RouteGroup* route_group,
295 std::string const & name_template,
297 ARDOUR::PresentationInfo::order_t order
299 session_add_audio_route (true, input_channels, output_channels, mode, route_group, how_many, name_template, strict_io, order);
302 void session_add_audio_bus (
304 int32_t output_channels,
305 ARDOUR::RouteGroup* route_group,
307 std::string const & name_template,
309 ARDOUR::PresentationInfo::order_t order
311 session_add_audio_route (false, input_channels, output_channels, ARDOUR::Normal, route_group, how_many, name_template, strict_io, order);
314 void session_add_midi_track (
315 ARDOUR::RouteGroup* route_group,
317 std::string const & name_template,
319 ARDOUR::PluginInfoPtr instrument,
320 ARDOUR::Plugin::PresetRecord* preset,
321 ARDOUR::PresentationInfo::order_t order
323 session_add_midi_route (true, route_group, how_many, name_template, strict_io, instrument, preset, order);
326 void session_add_mixed_track (const ARDOUR::ChanCount&, const ARDOUR::ChanCount&, ARDOUR::RouteGroup*, uint32_t, std::string const &, bool,
327 ARDOUR::PluginInfoPtr, ARDOUR::Plugin::PresetRecord* pset,
328 ARDOUR::PresentationInfo::order_t order);
329 void session_add_midi_bus (ARDOUR::RouteGroup*, uint32_t, std::string const &, bool, ARDOUR::PluginInfoPtr, ARDOUR::Plugin::PresetRecord* pset,
330 ARDOUR::PresentationInfo::order_t order);
331 void session_add_midi_route (bool, ARDOUR::RouteGroup *, uint32_t, std::string const &, bool,
332 ARDOUR::PluginInfoPtr, ARDOUR::Plugin::PresetRecord*,
333 ARDOUR::PresentationInfo::order_t order);
334 void display_insufficient_ports_message ();
336 void attach_to_engine ();
339 gint exit_on_main_window_close (GdkEventAny *);
341 void maximise_editing_space ();
342 void restore_editing_space ();
344 void show_ui_prefs ();
346 bool check_audioengine(Gtk::Window&);
348 void setup_profile ();
349 void setup_tooltips ();
351 void set_shuttle_fract (double);
353 void get_process_buffers ();
354 void drop_process_buffers ();
356 void reset_peak_display ();
357 void reset_route_peak_display (ARDOUR::Route*);
358 void reset_group_peak_display (ARDOUR::RouteGroup*);
360 const std::string& announce_string() const { return _announce_string; }
362 void hide_application ();
364 Gtk::Notebook& tabs();
365 Gtk::Window& main_window () { return _main_window; }
367 void setup_toplevel_window (Gtk::Window&, const std::string& name, void* owner);
369 /* called from a static C function */
371 GtkNotebook* tab_window_root_drop (GtkNotebook* src,
377 bool tabbed_window_state_event_handler (GdkEventWindowState*, void* object);
378 bool key_event_handler (GdkEventKey*, Gtk::Window* window);
380 Gtkmm2ext::ActionMap global_actions;
382 ARDOUR::PresentationInfo::order_t translate_order (RouteDialogs::InsertAt);
385 friend class PublicEditor;
387 void toggle_auto_play ();
388 void toggle_auto_input ();
389 void toggle_punch ();
390 void unset_dual_punch ();
391 bool ignore_dual_punch;
392 void toggle_punch_in ();
393 void toggle_punch_out ();
394 void show_loop_punch_ruler_and_disallow_hide ();
395 void reenable_hide_loop_punch_ruler_if_appropriate ();
396 void toggle_auto_return ();
397 void toggle_click ();
398 void toggle_audio_midi_setup ();
399 void toggle_session_auto_loop ();
400 void toggle_rc_options_window ();
401 void toggle_session_options_window ();
404 Gtk::Window _main_window;
405 Gtkmm2ext::VisibilityTracker* main_window_visibility;
406 Gtk::VBox main_vpacker;
407 Gtk::HBox status_bar_hpacker;
409 PublicEditor* editor;
411 Gtk::Tooltips _tooltips;
415 bool _initial_verbose_plugin_scan;
416 bool first_time_engine_run;
418 void show_tabbable (Gtkmm2ext::Tabbable*);
419 void hide_tabbable (Gtkmm2ext::Tabbable*);
420 void detach_tabbable (Gtkmm2ext::Tabbable*);
421 void attach_tabbable (Gtkmm2ext::Tabbable*);
422 void button_change_tabbable_visibility (Gtkmm2ext::Tabbable*);
423 void key_change_tabbable_visibility (Gtkmm2ext::Tabbable*);
424 void toggle_editor_and_mixer ();
426 void tabbable_state_change (Gtkmm2ext::Tabbable&);
428 void toggle_meterbridge ();
429 void toggle_luawindow ();
431 int setup_windows ();
432 void setup_transport ();
435 bool transport_expose (GdkEventExpose*);
437 static ARDOUR_UI *theArdourUI;
438 SessionDialog *_session_dialog;
442 int ask_about_saving_session (const std::vector<std::string>& actions);
444 void save_session_at_its_request (std::string);
445 /* periodic safety backup, to be precise */
446 gint autosave_session();
447 void update_autosave();
448 sigc::connection _autosave_connection;
450 void session_dirty_changed ();
451 void update_title ();
453 void map_transport_state ();
454 int32_t do_engine_start ();
456 void engine_halted (const char* reason, bool free_reason);
457 void engine_stopped ();
458 void engine_running ();
462 void about_signal_response(int response);
464 Gtk::VBox top_packer;
466 sigc::connection clock_signal_connection;
467 void update_clocks ();
468 void start_clocking ();
469 void stop_clocking ();
471 void update_transport_clocks (framepos_t pos);
472 void record_state_changed ();
474 std::list<MidiTracer*> _midi_tracer_windows;
476 /* Transport Control */
478 Gtk::Table transport_table;
479 Gtk::Frame transport_frame;
480 Gtk::HBox transport_hbox;
482 struct TransportControllable : public PBD::Controllable {
493 TransportControllable (std::string name, ARDOUR_UI&, ToggleType);
494 void set_value (double, PBD::Controllable::GroupControlDisposition group_override);
495 double get_value (void) const;
501 boost::shared_ptr<TransportControllable> roll_controllable;
502 boost::shared_ptr<TransportControllable> stop_controllable;
503 boost::shared_ptr<TransportControllable> goto_start_controllable;
504 boost::shared_ptr<TransportControllable> goto_end_controllable;
505 boost::shared_ptr<TransportControllable> auto_loop_controllable;
506 boost::shared_ptr<TransportControllable> play_selection_controllable;
507 boost::shared_ptr<TransportControllable> rec_controllable;
509 void toggle_follow_edits ();
511 void set_transport_controllable_state (const XMLNode&);
512 XMLNode& get_transport_controllable_state ();
514 ArdourButton roll_button;
515 ArdourButton stop_button;
516 ArdourButton goto_start_button;
517 ArdourButton goto_end_button;
518 ArdourButton auto_loop_button;
519 ArdourButton play_selection_button;
520 ArdourButton rec_button;
521 ArdourButton punch_in_button;
522 ArdourButton punch_out_button;
523 ArdourButton layered_button;
525 Gtk::Label punch_label;
526 Gtk::Label layered_label;
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 void audition_alert_clicked ();
573 bool error_alert_press (GdkEventButton *);
575 void big_clock_value_changed ();
576 void primary_clock_value_changed ();
577 void secondary_clock_value_changed ();
579 /* called by Blink signal */
581 void transport_rec_enable_blink (bool onoff);
583 Gtk::Menu* session_popup_menu;
585 /* menu bar and associated stuff */
587 Gtk::MenuBar* menu_bar;
588 Gtk::EventBox menu_bar_base;
591 void use_menubar_as_top_menubar ();
592 void build_menu_bar ();
594 Gtk::Label wall_clock_label;
595 gint update_wall_clock ();
597 Gtk::Label disk_space_label;
598 void update_disk_space ();
600 Gtk::Label timecode_format_label;
601 void update_timecode_format ();
603 Gtk::Label cpu_load_label;
604 void update_cpu_load ();
606 Gtk::Label xrun_label;
607 void update_xrun_count ();
609 Gtk::Label peak_thread_work_label;
610 void update_peak_thread_work ();
612 Gtk::Label buffer_load_label;
613 void update_buffer_load ();
615 Gtk::Label sample_rate_label;
616 void update_sample_rate (ARDOUR::framecnt_t);
618 Gtk::Label format_label;
619 void update_format ();
621 void every_second ();
622 void every_point_one_seconds ();
623 void every_point_zero_something_seconds ();
625 sigc::connection second_connection;
626 sigc::connection point_one_second_connection;
627 sigc::connection point_zero_something_second_connection;
628 sigc::connection fps_connection;
630 void set_fps_timeout_connection ();
632 void open_session ();
633 void open_recent_session ();
634 bool process_save_template_prompter (ArdourPrompter& prompter);
635 void save_template ();
637 void edit_metadata ();
638 void import_metadata ();
640 void set_transport_sensitivity (bool);
642 //stuff for ProTools-style numpad
643 void transport_numpad_event (int num);
644 void transport_numpad_decimal ();
645 bool _numpad_locate_happening;
646 int _pending_locate_num;
647 gint transport_numpad_timeout ();
648 sigc::connection _numpad_timeout_connection;
650 void transport_goto_nth_marker (int nth);
651 void transport_goto_zero ();
652 void transport_goto_start ();
653 void transport_goto_end ();
654 void transport_goto_wallclock ();
655 void transport_stop ();
656 void transport_record (bool roll);
657 void transport_roll ();
658 void transport_play_selection();
659 void transport_play_preroll();
660 void transport_forward (int option);
661 void transport_rewind (int option);
662 void transport_loop ();
663 void toggle_roll (bool with_abort, bool roll_out_of_bounded_mode);
664 bool trx_record_enable_all_tracks ();
666 bool _session_is_new;
667 void set_session (ARDOUR::Session *);
668 void connect_dependents_to_session (ARDOUR::Session *);
669 void we_have_dependents ();
671 void setup_session_options ();
673 guint32 last_key_press_time;
675 bool process_snapshot_session_prompter (ArdourPrompter& prompter, bool switch_to_it);
676 void snapshot_session (bool switch_to_it);
678 void quick_snapshot_session (bool switch_to_it); //does not promtp for name, just makes a timestamped file
680 SaveAsDialog* save_as_dialog;
682 bool save_as_progress_update (float fraction, int64_t cnt, int64_t total, Gtk::Label* label, Gtk::ProgressBar* bar);
683 void save_session_as ();
684 void archive_session ();
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 close_current_dialog ();
893 void pre_release_dialog ();
896 #endif /* __ardour_gui_h__ */