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 ();
265 void add_routes_part_two ();
266 void add_routes_thread ();
268 void start_duplicate_routes ();
270 void add_lua_script ();
271 void remove_lua_script ();
273 void add_video (Gtk::Window* float_window);
274 void remove_video ();
275 void start_video_server_menu (Gtk::Window* float_window);
276 bool start_video_server (Gtk::Window* float_window, bool popup_msg);
277 void stop_video_server (bool ask_confirm=false);
278 void flush_videotimeline_cache (bool localcacheonly=false);
279 void export_video (bool range = false);
281 void session_add_vca (std::string const &, uint32_t);
283 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);
284 void session_add_audio_track (
286 int32_t output_channels,
287 ARDOUR::TrackMode mode,
288 ARDOUR::RouteGroup* route_group,
290 std::string const & name_template,
292 ARDOUR::PresentationInfo::order_t order
294 session_add_audio_route (true, input_channels, output_channels, mode, route_group, how_many, name_template, strict_io, order);
297 void session_add_audio_bus (
299 int32_t output_channels,
300 ARDOUR::RouteGroup* route_group,
302 std::string const & name_template,
304 ARDOUR::PresentationInfo::order_t order
306 session_add_audio_route (false, input_channels, output_channels, ARDOUR::Normal, route_group, how_many, name_template, strict_io, order);
309 void session_add_midi_track (
310 ARDOUR::RouteGroup* route_group,
312 std::string const & name_template,
314 ARDOUR::PluginInfoPtr instrument,
315 ARDOUR::Plugin::PresetRecord* preset,
316 ARDOUR::PresentationInfo::order_t order
318 session_add_midi_route (true, route_group, how_many, name_template, strict_io, instrument, preset, order);
321 void session_add_mixed_track (const ARDOUR::ChanCount&, const ARDOUR::ChanCount&, ARDOUR::RouteGroup*, uint32_t, std::string const &, bool,
322 ARDOUR::PluginInfoPtr, ARDOUR::Plugin::PresetRecord* pset,
323 ARDOUR::PresentationInfo::order_t order);
324 void session_add_midi_bus (ARDOUR::RouteGroup*, uint32_t, std::string const &, bool, ARDOUR::PluginInfoPtr, ARDOUR::Plugin::PresetRecord* pset,
325 ARDOUR::PresentationInfo::order_t order);
326 void session_add_midi_route (bool, ARDOUR::RouteGroup *, uint32_t, std::string const &, bool,
327 ARDOUR::PluginInfoPtr, ARDOUR::Plugin::PresetRecord*,
328 ARDOUR::PresentationInfo::order_t order);
329 void display_insufficient_ports_message ();
331 void attach_to_engine ();
334 gint exit_on_main_window_close (GdkEventAny *);
336 void maximise_editing_space ();
337 void restore_editing_space ();
339 void show_ui_prefs ();
341 bool check_audioengine(Gtk::Window&);
343 void setup_profile ();
344 void setup_tooltips ();
346 void set_shuttle_fract (double);
348 void get_process_buffers ();
349 void drop_process_buffers ();
351 void reset_peak_display ();
352 void reset_route_peak_display (ARDOUR::Route*);
353 void reset_group_peak_display (ARDOUR::RouteGroup*);
355 const std::string& announce_string() const { return _announce_string; }
357 void hide_application ();
359 Gtk::Notebook& tabs();
360 Gtk::Window& main_window () { return _main_window; }
362 void setup_toplevel_window (Gtk::Window&, const std::string& name, void* owner);
364 /* called from a static C function */
366 GtkNotebook* tab_window_root_drop (GtkNotebook* src,
372 bool tabbed_window_state_event_handler (GdkEventWindowState*, void* object);
373 bool key_event_handler (GdkEventKey*, Gtk::Window* window);
375 Gtkmm2ext::ActionMap global_actions;
378 friend class PublicEditor;
380 void toggle_auto_play ();
381 void toggle_auto_input ();
382 void toggle_punch ();
383 void unset_dual_punch ();
384 bool ignore_dual_punch;
385 void toggle_punch_in ();
386 void toggle_punch_out ();
387 void show_loop_punch_ruler_and_disallow_hide ();
388 void reenable_hide_loop_punch_ruler_if_appropriate ();
389 void toggle_auto_return ();
390 void toggle_click ();
391 void toggle_audio_midi_setup ();
392 void toggle_session_auto_loop ();
393 void toggle_rc_options_window ();
394 void toggle_session_options_window ();
397 Gtk::Window _main_window;
398 Gtkmm2ext::VisibilityTracker* main_window_visibility;
399 Gtk::VBox main_vpacker;
400 Gtk::HBox status_bar_hpacker;
402 PublicEditor* editor;
404 Gtk::Tooltips _tooltips;
408 bool _initial_verbose_plugin_scan;
409 bool first_time_engine_run;
411 void show_tabbable (Gtkmm2ext::Tabbable*);
412 void hide_tabbable (Gtkmm2ext::Tabbable*);
413 void detach_tabbable (Gtkmm2ext::Tabbable*);
414 void attach_tabbable (Gtkmm2ext::Tabbable*);
415 void button_change_tabbable_visibility (Gtkmm2ext::Tabbable*);
416 void key_change_tabbable_visibility (Gtkmm2ext::Tabbable*);
417 void toggle_editor_and_mixer ();
419 void tabbable_state_change (Gtkmm2ext::Tabbable&);
421 void toggle_meterbridge ();
422 void toggle_luawindow ();
424 int setup_windows ();
425 void setup_transport ();
428 static ARDOUR_UI *theArdourUI;
429 SessionDialog *_session_dialog;
433 int ask_about_saving_session (const std::vector<std::string>& actions);
435 void save_session_at_its_request (std::string);
436 /* periodic safety backup, to be precise */
437 gint autosave_session();
438 void update_autosave();
439 sigc::connection _autosave_connection;
441 void session_dirty_changed ();
442 void update_title ();
444 void map_transport_state ();
445 int32_t do_engine_start ();
447 void engine_halted (const char* reason, bool free_reason);
448 void engine_stopped ();
449 void engine_running ();
453 void about_signal_response(int response);
455 Gtk::VBox top_packer;
457 sigc::connection clock_signal_connection;
458 void update_clocks ();
459 void start_clocking ();
460 void stop_clocking ();
462 void update_transport_clocks (framepos_t pos);
463 void record_state_changed ();
465 std::list<MidiTracer*> _midi_tracer_windows;
467 /* Transport Control */
469 Gtk::Frame transport_frame;
470 Gtk::HBox transport_hbox;
471 Gtk::Fixed transport_base;
472 Gtk::Fixed transport_button_base;
473 Gtk::Frame transport_button_frame;
474 Gtk::HBox transport_button_hbox;
475 Gtk::VBox transport_button_vbox;
476 Gtk::HBox transport_option_button_hbox;
477 Gtk::VBox transport_option_button_vbox;
478 Gtk::HBox transport_clock_hbox;
479 Gtk::VBox transport_clock_vbox;
480 Gtk::HBox primary_clock_hbox;
481 Gtk::HBox secondary_clock_hbox;
483 struct TransportControllable : public PBD::Controllable {
494 TransportControllable (std::string name, ARDOUR_UI&, ToggleType);
495 void set_value (double, PBD::Controllable::GroupControlDisposition group_override);
496 double get_value (void) const;
502 boost::shared_ptr<TransportControllable> roll_controllable;
503 boost::shared_ptr<TransportControllable> stop_controllable;
504 boost::shared_ptr<TransportControllable> goto_start_controllable;
505 boost::shared_ptr<TransportControllable> goto_end_controllable;
506 boost::shared_ptr<TransportControllable> auto_loop_controllable;
507 boost::shared_ptr<TransportControllable> play_selection_controllable;
508 boost::shared_ptr<TransportControllable> rec_controllable;
510 void toggle_follow_edits ();
512 void set_transport_controllable_state (const XMLNode&);
513 XMLNode& get_transport_controllable_state ();
515 ArdourButton roll_button;
516 ArdourButton stop_button;
517 ArdourButton goto_start_button;
518 ArdourButton goto_end_button;
519 ArdourButton auto_loop_button;
520 ArdourButton play_selection_button;
521 ArdourButton rec_button;
523 void toggle_external_sync ();
524 void toggle_time_master ();
525 void toggle_video_sync ();
527 ShuttleControl* shuttle_box;
529 ArdourButton auto_return_button;
530 ArdourButton follow_edits_button;
531 ArdourButton auto_input_button;
532 ArdourButton click_button;
533 ArdourButton sync_button;
535 ArdourButton auditioning_alert_button;
536 ArdourButton solo_alert_button;
537 ArdourButton feedback_alert_button;
538 ArdourButton error_alert_button;
540 ArdourButton action_script_call_btn[10];
541 Gtk::Table action_script_table;
545 LevelMeterHBox * editor_meter;
546 float editor_meter_max_peak;
547 ArdourButton editor_meter_peak_display;
548 bool editor_meter_peak_button_release (GdkEventButton*);
550 void blink_handler (bool);
551 sigc::connection blink_connection;
554 void solo_blink (bool);
555 void sync_blink (bool);
556 void audition_blink (bool);
557 void feedback_blink (bool);
558 void error_blink (bool);
560 void set_flat_buttons();
562 void soloing_changed (bool);
563 void auditioning_changed (bool);
564 void _auditioning_changed (bool);
566 bool solo_alert_press (GdkEventButton* ev);
567 bool audition_alert_press (GdkEventButton* ev);
568 bool feedback_alert_press (GdkEventButton *);
569 bool error_alert_press (GdkEventButton *);
571 void big_clock_value_changed ();
572 void primary_clock_value_changed ();
573 void secondary_clock_value_changed ();
575 /* called by Blink signal */
577 void transport_rec_enable_blink (bool onoff);
579 Gtk::Menu* session_popup_menu;
581 /* menu bar and associated stuff */
583 Gtk::MenuBar* menu_bar;
584 Gtk::EventBox menu_bar_base;
587 void use_menubar_as_top_menubar ();
588 void build_menu_bar ();
590 Gtk::Label wall_clock_label;
591 gint update_wall_clock ();
593 Gtk::Label disk_space_label;
594 void update_disk_space ();
596 Gtk::Label timecode_format_label;
597 void update_timecode_format ();
599 Gtk::Label cpu_load_label;
600 void update_cpu_load ();
602 Gtk::Label xrun_label;
603 void update_xrun_count ();
605 Gtk::Label peak_thread_work_label;
606 void update_peak_thread_work ();
608 Gtk::Label buffer_load_label;
609 void update_buffer_load ();
611 Gtk::Label sample_rate_label;
612 void update_sample_rate (ARDOUR::framecnt_t);
614 Gtk::Label format_label;
615 void update_format ();
617 void every_second ();
618 void every_point_one_seconds ();
619 void every_point_zero_something_seconds ();
621 sigc::connection second_connection;
622 sigc::connection point_one_second_connection;
623 sigc::connection point_zero_something_second_connection;
624 sigc::connection fps_connection;
626 void set_fps_timeout_connection ();
628 void open_session ();
629 void open_recent_session ();
630 bool process_save_template_prompter (ArdourPrompter& prompter);
631 void save_template ();
633 void edit_metadata ();
634 void import_metadata ();
636 void set_transport_sensitivity (bool);
638 //stuff for ProTools-style numpad
639 void transport_numpad_event (int num);
640 void transport_numpad_decimal ();
641 bool _numpad_locate_happening;
642 int _pending_locate_num;
643 gint transport_numpad_timeout ();
644 sigc::connection _numpad_timeout_connection;
646 void transport_goto_nth_marker (int nth);
647 void transport_goto_zero ();
648 void transport_goto_start ();
649 void transport_goto_end ();
650 void transport_goto_wallclock ();
651 void transport_stop ();
652 void transport_record (bool roll);
653 void transport_roll ();
654 void transport_play_selection();
655 void transport_play_preroll();
656 void transport_forward (int option);
657 void transport_rewind (int option);
658 void transport_loop ();
659 void toggle_roll (bool with_abort, bool roll_out_of_bounded_mode);
660 bool trx_record_enable_all_tracks ();
662 bool _session_is_new;
663 void set_session (ARDOUR::Session *);
664 void connect_dependents_to_session (ARDOUR::Session *);
665 void we_have_dependents ();
667 void setup_session_options ();
669 guint32 last_key_press_time;
671 bool process_snapshot_session_prompter (ArdourPrompter& prompter, bool switch_to_it);
672 void snapshot_session (bool switch_to_it);
674 void quick_snapshot_session (bool switch_to_it); //does not promtp for name, just makes a timestamped file
676 SaveAsDialog* save_as_dialog;
678 bool save_as_progress_update (float fraction, int64_t cnt, int64_t total, Gtk::Label* label, Gtk::ProgressBar* bar);
679 void save_session_as ();
680 void rename_session ();
681 ARDOUR::PresentationInfo::order_t translate_order (AddRouteDialog::InsertAt);
684 int create_editor ();
685 int create_meterbridge ();
686 int create_luawindow ();
687 int create_masters ();
689 Meterbridge *meterbridge;
690 LuaWindow *luawindow;
692 /* Dialogs that can be created via new<T> */
694 RCOptionEditor* rc_option_editor;
695 Gtk::HBox rc_option_editor_placeholder;
697 WM::Proxy<SpeakerDialog> speaker_config_window;
698 WM::Proxy<AddRouteDialog> add_route_dialog;
699 WM::Proxy<About> about;
700 WM::Proxy<LocationUIWindow> location_ui;
701 WM::Proxy<RouteParams_UI> route_params;
702 WM::Proxy<EngineControl> audio_midi_setup;
703 WM::Proxy<ExportVideoDialog> export_video_dialog;
704 WM::Proxy<LuaScriptManager> lua_script_window;
706 /* Windows/Dialogs that require a creator method */
708 WM::ProxyWithConstructor<SessionOptionEditor> session_option_editor;
709 WM::ProxyWithConstructor<AddVideoDialog> add_video_dialog;
710 WM::ProxyWithConstructor<BundleManager> bundle_manager;
711 WM::ProxyWithConstructor<BigClockWindow> big_clock_window;
712 WM::ProxyWithConstructor<GlobalPortMatrixWindow> audio_port_matrix;
713 WM::ProxyWithConstructor<GlobalPortMatrixWindow> midi_port_matrix;
714 WM::ProxyWithConstructor<KeyEditor> key_editor;
716 /* creator methods */
718 SessionOptionEditor* create_session_option_editor ();
719 BundleManager* create_bundle_manager ();
720 AddVideoDialog* create_add_video_dialog ();
721 BigClockWindow* create_big_clock_window();
722 GlobalPortMatrixWindow* create_global_port_matrix (ARDOUR::DataType);
723 KeyEditor* create_key_editor ();
725 ARDOUR::SystemExec *video_server_process;
727 void handle_locations_change (ARDOUR::Location*);
729 /* Keyboard Handling */
731 ArdourKeyboard* keyboard;
733 /* Keymap handling */
735 void install_actions ();
737 void toggle_record_enable (uint16_t);
739 uint32_t rec_enabled_streams;
740 void count_recenabled_streams (ARDOUR::Route&);
744 void pop_back_splash (Gtk::Window&);
748 Gtk::MenuItem *cleanup_item;
750 void display_cleanup_results (ARDOUR::CleanupReport& rep, const gchar* list_title, const bool msg_delete);
752 void cleanup_peakfiles ();
755 bool have_configure_timeout;
756 ARDOUR::microseconds_t last_configure_time;
757 gint configure_timeout ();
759 ARDOUR::microseconds_t last_peak_grab;
760 ARDOUR::microseconds_t last_shuttle_request;
762 bool have_disk_speed_dialog_displayed;
763 void disk_speed_dialog_gone (int ignored_response, Gtk::MessageDialog*);
764 void disk_overrun_handler ();
765 void disk_underrun_handler ();
766 void gui_idle_handler ();
768 void cancel_plugin_scan ();
769 void cancel_plugin_timeout ();
770 void plugin_scan_dialog (std::string type, std::string plugin, bool);
771 void plugin_scan_timeout (int);
773 void session_format_mismatch (std::string, std::string);
775 void session_dialog (std::string);
776 int pending_state_dialog ();
777 int sr_mismatch_dialog (ARDOUR::framecnt_t, ARDOUR::framecnt_t);
778 void sr_mismatch_message (ARDOUR::framecnt_t, ARDOUR::framecnt_t);
780 Gtk::MenuItem* jack_disconnect_item;
781 Gtk::MenuItem* jack_reconnect_item;
782 Gtk::Menu* jack_bufsize_menu;
784 Glib::RefPtr<Gtk::ActionGroup> common_actions;
786 void editor_realized ();
788 std::vector<std::string> positional_sync_strings;
790 void toggle_send_midi_feedback ();
791 void toggle_use_mmc ();
792 void toggle_send_mmc ();
793 void toggle_send_mtc ();
794 void toggle_send_midi_clock ();
796 void toggle_use_osc ();
798 void parameter_changed (std::string);
799 void session_parameter_changed (std::string);
803 void check_memory_locking ();
805 void audioengine_setup ();
807 void display_message (const char *prefix, gint prefix_len,
808 Glib::RefPtr<Gtk::TextBuffer::Tag> ptag, Glib::RefPtr<Gtk::TextBuffer::Tag> mtag,
810 Gtk::Label status_bar_label;
811 bool status_bar_button_press (GdkEventButton*);
813 void loading_message (const std::string& msg);
815 PBD::ScopedConnectionList forever_connections;
816 PBD::ScopedConnection halt_connection;
818 void step_edit_status_change (bool);
820 /* these are used only in response to a platform-specific "ShouldQuit" signal */
822 void queue_finish ();
823 void fontconfig_dialog ();
825 int missing_file (ARDOUR::Session*s, std::string str, ARDOUR::DataType type);
826 int ambiguous_file (std::string file, std::vector<std::string> hits);
828 bool click_button_clicked (GdkEventButton *);
830 VisibilityGroup _status_bar_visibility;
832 /** A ProcessThread so that we have some thread-local buffers for use by
833 * PluginEqGui::impulse_analysis ().
835 ARDOUR::ProcessThread* _process_thread;
837 void feedback_detected ();
839 ArdourButton midi_panic_button;
842 void successful_graph_sort ();
843 bool _feedback_exists;
845 enum ArdourLogLevel {
852 ArdourLogLevel _log_not_acknowledged;
854 void resize_text_widgets ();
856 bool xrun_button_release (GdkEventButton* ev);
858 std::string _announce_string;
859 void check_announcements ();
861 int do_audio_midi_setup (uint32_t);
862 void audioengine_became_silent ();
864 DuplicateRouteDialog* duplicate_routes_dialog;
866 void grab_focus_after_dialog ();
868 void tabs_switch (GtkNotebookPage*, guint page_number);
869 void tabs_page_added (Gtk::Widget*, guint);
870 void tabs_page_removed (Gtk::Widget*, guint);
871 ArdourButton editor_visibility_button;
872 ArdourButton mixer_visibility_button;
873 ArdourButton prefs_visibility_button;
875 bool key_press_focus_accelerator_handler (Gtk::Window& window, GdkEventKey* ev, Gtkmm2ext::Bindings*);
876 bool try_gtk_accel_binding (GtkWindow* win, GdkEventKey* ev, bool translate, GdkModifierType modifier);
878 bool main_window_delete_event (GdkEventAny*);
879 bool idle_ask_about_quit ();
881 void load_bindings ();
882 bool tabbable_visibility_button_press (GdkEventButton* ev, std::string const& tabbable_name);
884 void step_up_through_tabs ();
885 void step_down_through_tabs ();
890 #endif /* __ardour_gui_h__ */