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/messagedialog.h>
51 #include <gtkmm/notebook.h>
52 #include <gtkmm/button.h>
53 #include <gtkmm/togglebutton.h>
54 #include <gtkmm/treeview.h>
55 #include <gtkmm/menubar.h>
56 #include <gtkmm/textbuffer.h>
57 #include <gtkmm/adjustment.h>
59 #include "gtkmm2ext/gtk_ui.h"
60 #include "gtkmm2ext/bindings.h"
61 #include "gtkmm2ext/visibility_tracker.h"
63 #include "ardour/ardour.h"
64 #include "ardour/types.h"
65 #include "ardour/utils.h"
66 #include "ardour/plugin.h"
67 #include "ardour/session_handle.h"
68 #include "ardour/system_exec.h"
70 #include "video_timeline.h"
72 #include "widgets/ardour_button.h"
73 #include "widgets/ardour_spacer.h"
75 #include "add_route_dialog.h"
76 #include "ardour_dialog.h"
77 #include "ardour_window.h"
80 #include "mini_timeline.h"
81 #include "shuttle_control.h"
82 #include "visibility_group.h"
83 #include "window_manager.h"
87 #include "add_video_dialog.h"
88 #include "big_clock_window.h"
89 #include "bundle_manager.h"
90 #include "engine_dialog.h"
91 #include "export_video_dialog.h"
92 #include "global_port_matrix.h"
93 #include "idleometer.h"
94 #include "keyeditor.h"
95 #include "location_ui.h"
96 #include "lua_script_manager.h"
97 #include "rc_option_editor.h"
98 #include "route_dialogs.h"
99 #include "route_params_ui.h"
100 #include "session_option_editor.h"
101 #include "speaker_dialog.h"
104 class AddRouteDialog;
105 class AddVideoDialog;
106 class BigClockWindow;
109 class ExportVideoDialog;
111 class LocationUIWindow;
112 class LuaScriptManager;
113 class RCOptionEditor;
114 class RouteParams_UI;
115 class SessionOptionEditor;
117 class GlobalPortMatrixWindow;
122 class ArdourKeyboard;
124 class ConnectionEditor;
125 class DuplicateRouteDialog;
131 class SessionOptionEditorWindow;
138 class LevelMeterHBox;
139 class GUIObjectState;
142 class ControlProtocolInfo;
155 namespace ArdourWidgets {
160 class ARDOUR_UI : public Gtkmm2ext::UI, public ARDOUR::SessionHandlePtr
163 ARDOUR_UI (int *argcp, char **argvp[], const char* localedir);
166 bool run_startup (bool should_be_new, std::string load_template);
172 void launch_manual ();
173 void launch_reference ();
174 void launch_tracker ();
175 void launch_subscribe ();
176 void launch_cheat_sheet ();
177 void launch_website ();
178 void launch_website_dev ();
179 void launch_forums ();
180 void launch_howto_report ();
184 void load_from_application_api (const std::string& path);
187 int load_session (const std::string& path, const std::string& snapshot, std::string mix_template = std::string());
189 bool session_load_in_progress;
190 int build_session (const std::string& path, const std::string& snapshot, ARDOUR::BusProfile*);
191 bool session_is_new() const { return _session_is_new; }
193 ARDOUR::Session* the_session() { return _session; }
195 bool get_smart_mode () const;
197 int get_session_parameters (bool quit_on_cancel, bool should_be_new = false, std::string load_template = "");
198 int build_session_from_dialog (SessionDialog&, const std::string& session_name, const std::string& session_path);
199 bool ask_about_loading_existing_session (const std::string& session_path);
201 /// @return true if session was successfully unloaded.
202 int unload_session (bool hide_stuff = false);
203 void close_session();
205 int save_state_canfail (std::string state_name = "", bool switch_to_it = false);
206 void save_state (const std::string & state_name = "", bool switch_to_it = false);
208 static ARDOUR_UI *instance () { return theArdourUI; }
210 /* signal emitted when escape key is pressed. All UI components that
211 need to respond to Escape in some way (e.g. break drag, clear
212 selection, etc) should connect to and handle this.
214 PBD::Signal0<void> Escape;
216 PublicEditor& the_editor() { return *editor;}
217 Mixer_UI* the_mixer() { return mixer; }
219 void new_midi_tracer_window ();
220 void toggle_editing_space();
221 void toggle_mixer_space();
222 void toggle_mixer_list();
223 void toggle_monitor_section_visibility ();
224 void toggle_keep_tearoffs();
226 void reset_focus (Gtk::Widget*);
228 static PublicEditor* _instance;
230 /** Emitted frequently with the audible frame, false, and the edit point as
231 * parameters respectively.
233 * (either RapidScreenUpdate || SuperRapidScreenUpdate - user-config)
235 static sigc::signal<void, framepos_t, bool, framepos_t> Clock;
237 static void close_all_dialogs () { CloseAllDialogs(); }
238 static sigc::signal<void> CloseAllDialogs;
240 XMLNode* main_window_settings() const;
241 XMLNode* editor_settings() const;
242 XMLNode* preferences_settings() const;
243 XMLNode* mixer_settings () const;
244 XMLNode* keyboard_settings () const;
245 XMLNode* tearoff_settings (const char*) const;
247 void save_ardour_state ();
248 gboolean configure_handler (GdkEventConfigure* conf);
250 void halt_on_xrun_message ();
251 void xrun_handler (framepos_t);
252 void create_xrun_marker (framepos_t);
254 GUIObjectState* gui_object_state;
256 MainClock* primary_clock;
257 MainClock* secondary_clock;
258 void focus_on_clock ();
259 AudioClock* big_clock;
261 VideoTimeLine *video_timeline;
263 void store_clock_modes ();
264 void restore_clock_modes ();
265 void reset_main_clocks ();
267 void synchronize_sync_source_and_video_pullup ();
270 void add_route_dialog_response (int);
272 void add_routes_part_two ();
273 void add_routes_thread ();
275 void start_duplicate_routes ();
277 void add_video (Gtk::Window* float_window);
278 void remove_video ();
279 void start_video_server_menu (Gtk::Window* float_window);
280 bool start_video_server (Gtk::Window* float_window, bool popup_msg);
281 void stop_video_server (bool ask_confirm=false);
282 void flush_videotimeline_cache (bool localcacheonly=false);
283 void export_video (bool range = false);
285 void session_add_audio_route (bool, int32_t, int32_t, ARDOUR::TrackMode, ARDOUR::RouteGroup *, uint32_t, std::string const &, bool, ARDOUR::PresentationInfo::order_t order);
287 void session_add_mixed_track (const ARDOUR::ChanCount&, const ARDOUR::ChanCount&, ARDOUR::RouteGroup*,
288 uint32_t, std::string const &, bool strict_io,
289 ARDOUR::PluginInfoPtr, ARDOUR::Plugin::PresetRecord* pset,
290 ARDOUR::PresentationInfo::order_t order);
292 void session_add_midi_bus (ARDOUR::RouteGroup*, uint32_t, std::string const &, bool strict_io,
293 ARDOUR::PluginInfoPtr, ARDOUR::Plugin::PresetRecord* pset,
294 ARDOUR::PresentationInfo::order_t order);
296 void session_add_midi_route (bool, ARDOUR::RouteGroup *, uint32_t, std::string const &, bool,
297 ARDOUR::PluginInfoPtr, ARDOUR::Plugin::PresetRecord*,
298 ARDOUR::PresentationInfo::order_t order);
300 void display_insufficient_ports_message ();
302 void attach_to_engine ();
305 gint exit_on_main_window_close (GdkEventAny *);
307 void maximise_editing_space ();
308 void restore_editing_space ();
310 void show_ui_prefs ();
312 bool check_audioengine(Gtk::Window&);
314 void setup_profile ();
315 void setup_tooltips ();
317 void set_shuttle_fract (double);
319 void get_process_buffers ();
320 void drop_process_buffers ();
322 void reset_peak_display ();
323 void reset_route_peak_display (ARDOUR::Route*);
324 void reset_group_peak_display (ARDOUR::RouteGroup*);
326 const std::string& announce_string() const { return _announce_string; }
328 void hide_application ();
330 Gtk::Notebook& tabs();
331 Gtk::Window& main_window () { return _main_window; }
333 void setup_toplevel_window (Gtk::Window&, const std::string& name, void* owner);
335 /* called from a static C function */
337 GtkNotebook* tab_window_root_drop (GtkNotebook* src,
343 bool tabbed_window_state_event_handler (GdkEventWindowState*, void* object);
344 bool key_event_handler (GdkEventKey*, Gtk::Window* window);
346 Gtkmm2ext::ActionMap global_actions;
348 ARDOUR::PresentationInfo::order_t translate_order (RouteDialogs::InsertAt);
351 friend class PublicEditor;
353 void toggle_auto_play ();
354 void toggle_auto_input ();
355 void toggle_punch ();
356 void unset_dual_punch ();
357 bool ignore_dual_punch;
358 void toggle_punch_in ();
359 void toggle_punch_out ();
360 void toggle_session_monitoring_in ();
361 void toggle_session_monitoring_disk ();
362 void show_loop_punch_ruler_and_disallow_hide ();
363 void reenable_hide_loop_punch_ruler_if_appropriate ();
364 void toggle_auto_return ();
365 void toggle_click ();
366 void toggle_audio_midi_setup ();
367 void toggle_session_auto_loop ();
368 void toggle_rc_options_window ();
369 void toggle_session_options_window ();
372 Gtk::Window _main_window;
373 Gtkmm2ext::VisibilityTracker* main_window_visibility;
374 Gtk::VBox main_vpacker;
375 Gtk::HBox status_bar_hpacker;
377 PublicEditor* editor;
379 Gtk::Tooltips _tooltips;
383 bool _initial_verbose_plugin_scan;
384 bool first_time_engine_run;
386 void show_tabbable (ArdourWidgets::Tabbable*);
387 void hide_tabbable (ArdourWidgets::Tabbable*);
388 void detach_tabbable (ArdourWidgets::Tabbable*);
389 void attach_tabbable (ArdourWidgets::Tabbable*);
390 void button_change_tabbable_visibility (ArdourWidgets::Tabbable*);
391 void key_change_tabbable_visibility (ArdourWidgets::Tabbable*);
392 void toggle_editor_and_mixer ();
394 void tabbable_state_change (ArdourWidgets::Tabbable&);
396 void toggle_meterbridge ();
397 void toggle_luawindow ();
399 int setup_windows ();
400 void setup_transport ();
403 static ARDOUR_UI *theArdourUI;
404 SessionDialog *_session_dialog;
408 int ask_about_saving_session (const std::vector<std::string>& actions);
410 void save_session_at_its_request (std::string);
411 /* periodic safety backup, to be precise */
412 gint autosave_session();
413 void update_autosave();
414 sigc::connection _autosave_connection;
416 void session_dirty_changed ();
417 void update_title ();
419 void map_transport_state ();
420 int32_t do_engine_start ();
422 void engine_halted (const char* reason, bool free_reason);
423 void engine_stopped ();
424 void engine_running ();
428 void about_signal_response(int response);
430 Gtk::VBox top_packer;
432 sigc::connection clock_signal_connection;
433 void update_clocks ();
434 void start_clocking ();
435 void stop_clocking ();
437 void update_transport_clocks (framepos_t pos);
438 void record_state_changed ();
440 std::list<MidiTracer*> _midi_tracer_windows;
442 /* Transport Control */
444 Gtk::Table transport_table;
445 Gtk::Frame transport_frame;
446 Gtk::HBox transport_hbox;
448 ArdourWidgets::ArdourVSpacer* secondary_clock_spacer;
449 void repack_transport_hbox ();
450 void update_clock_visibility ();
452 struct TransportControllable : public PBD::Controllable {
463 TransportControllable (std::string name, ARDOUR_UI&, ToggleType);
464 void set_value (double, PBD::Controllable::GroupControlDisposition group_override);
465 double get_value (void) const;
471 boost::shared_ptr<TransportControllable> roll_controllable;
472 boost::shared_ptr<TransportControllable> stop_controllable;
473 boost::shared_ptr<TransportControllable> goto_start_controllable;
474 boost::shared_ptr<TransportControllable> goto_end_controllable;
475 boost::shared_ptr<TransportControllable> auto_loop_controllable;
476 boost::shared_ptr<TransportControllable> play_selection_controllable;
477 boost::shared_ptr<TransportControllable> rec_controllable;
479 void toggle_follow_edits ();
481 void set_transport_controllable_state (const XMLNode&);
482 XMLNode& get_transport_controllable_state ();
484 ArdourWidgets::ArdourButton roll_button;
485 ArdourWidgets::ArdourButton stop_button;
486 ArdourWidgets::ArdourButton goto_start_button;
487 ArdourWidgets::ArdourButton goto_end_button;
488 ArdourWidgets::ArdourButton auto_loop_button;
489 ArdourWidgets::ArdourButton play_selection_button;
490 ArdourWidgets::ArdourButton rec_button;
491 ArdourWidgets::ArdourButton punch_in_button;
492 ArdourWidgets::ArdourButton punch_out_button;
493 ArdourWidgets::ArdourButton layered_button;
495 ArdourWidgets::ArdourVSpacer recpunch_spacer;
496 ArdourWidgets::ArdourVSpacer monitoring_spacer;
498 ArdourWidgets::ArdourButton monitor_in_button;
499 ArdourWidgets::ArdourButton monitor_disk_button;
500 ArdourWidgets::ArdourButton auto_input_button;
502 Gtk::Label punch_label;
503 Gtk::Label layered_label;
505 Gtk::Label punch_space;
506 Gtk::Label mon_space;
508 void toggle_external_sync ();
509 void toggle_time_master ();
510 void toggle_video_sync ();
512 ShuttleControl shuttle_box;
513 MiniTimeline mini_timeline;
514 TimeInfoBox *time_info_box;
516 ArdourWidgets::ArdourButton auto_return_button;
517 ArdourWidgets::ArdourButton follow_edits_button;
518 ArdourWidgets::ArdourButton click_button;
519 ArdourWidgets::ArdourButton sync_button;
521 ArdourWidgets::ArdourButton auditioning_alert_button;
522 ArdourWidgets::ArdourButton solo_alert_button;
523 ArdourWidgets::ArdourButton feedback_alert_button;
524 ArdourWidgets::ArdourButton error_alert_button;
526 ArdourWidgets::ArdourButton action_script_call_btn[10];
527 Gtk::Table action_script_table;
531 ArdourWidgets::ArdourButton editor_meter_peak_display;
532 LevelMeterHBox * editor_meter;
533 float editor_meter_max_peak;
534 bool editor_meter_peak_button_release (GdkEventButton*);
536 bool editor_meter_button_press (GdkEventButton* ev);
537 void popup_editor_meter_menu (GdkEventButton* ev);
538 void add_editor_meter_type_item (Gtk::Menu_Helpers::MenuList&, Gtk::RadioMenuItem::Group&, std::string const &, ARDOUR::MeterType);
539 bool _suspend_editor_meter_callbacks;
541 void blink_handler (bool);
542 sigc::connection blink_connection;
545 void solo_blink (bool);
546 void sync_blink (bool);
547 void audition_blink (bool);
548 void feedback_blink (bool);
549 void error_blink (bool);
551 void set_flat_buttons();
553 void soloing_changed (bool);
554 void auditioning_changed (bool);
555 void _auditioning_changed (bool);
557 bool solo_alert_press (GdkEventButton* ev);
558 void audition_alert_clicked ();
559 bool error_alert_press (GdkEventButton *);
561 void layered_button_clicked ();
563 void big_clock_value_changed ();
564 void primary_clock_value_changed ();
565 void secondary_clock_value_changed ();
567 /* called by Blink signal */
569 void transport_rec_enable_blink (bool onoff);
571 Gtk::Menu* session_popup_menu;
573 /* menu bar and associated stuff */
575 Gtk::MenuBar* menu_bar;
576 Gtk::EventBox menu_bar_base;
579 void use_menubar_as_top_menubar ();
580 void build_menu_bar ();
582 Gtk::Label wall_clock_label;
583 gint update_wall_clock ();
585 Gtk::Label disk_space_label;
586 void update_disk_space ();
588 Gtk::Label timecode_format_label;
589 void update_timecode_format ();
591 Gtk::Label cpu_load_label;
592 void update_cpu_load ();
594 Gtk::Label xrun_label;
595 void update_xrun_count ();
597 Gtk::Label peak_thread_work_label;
598 void update_peak_thread_work ();
600 Gtk::Label buffer_load_label;
601 void update_buffer_load ();
603 Gtk::Label sample_rate_label;
604 void update_sample_rate (ARDOUR::framecnt_t);
606 Gtk::Label format_label;
607 void update_format ();
609 void every_second ();
610 void every_point_one_seconds ();
611 void every_point_zero_something_seconds ();
613 sigc::connection second_connection;
614 sigc::connection point_one_second_connection;
615 sigc::connection point_zero_something_second_connection;
616 sigc::connection fps_connection;
618 void set_fps_timeout_connection ();
620 void open_session ();
621 void open_recent_session ();
622 bool process_save_template_prompter (ArdourWidgets::Prompter& prompter);
623 void save_template ();
624 void manage_templates ();
626 void meta_session_setup (const std::string& script_path);
628 void edit_metadata ();
629 void import_metadata ();
631 void set_loop_sensitivity ();
632 void set_transport_sensitivity (bool);
634 //stuff for ProTools-style numpad
635 void transport_numpad_event (int num);
636 void transport_numpad_decimal ();
637 bool _numpad_locate_happening;
638 int _pending_locate_num;
639 gint transport_numpad_timeout ();
640 sigc::connection _numpad_timeout_connection;
642 void transport_goto_nth_marker (int nth);
643 void transport_goto_zero ();
644 void transport_goto_start ();
645 void transport_goto_end ();
646 void transport_goto_wallclock ();
647 void transport_stop ();
648 void transport_record (bool roll);
649 void transport_roll ();
650 void transport_play_selection();
651 void transport_play_preroll();
652 void transport_rec_preroll();
653 void transport_rec_count_in();
654 void transport_forward (int option);
655 void transport_rewind (int option);
656 void transport_loop ();
657 void toggle_roll (bool with_abort, bool roll_out_of_bounded_mode);
658 bool trx_record_enable_all_tracks ();
660 bool _session_is_new;
661 void set_session (ARDOUR::Session *);
662 void connect_dependents_to_session (ARDOUR::Session *);
663 void we_have_dependents ();
665 void setup_session_options ();
667 guint32 last_key_press_time;
669 bool process_snapshot_session_prompter (ArdourWidgets::Prompter& prompter, bool switch_to_it);
670 void snapshot_session (bool switch_to_it);
672 void quick_snapshot_session (bool switch_to_it); //does not promtp for name, just makes a timestamped file
674 SaveAsDialog* save_as_dialog;
676 bool save_as_progress_update (float fraction, int64_t cnt, int64_t total, Gtk::Label* label, Gtk::ProgressBar* bar);
677 void save_session_as ();
678 void archive_session ();
679 void rename_session ();
682 int create_editor ();
683 int create_meterbridge ();
684 int create_luawindow ();
685 int create_masters ();
687 Meterbridge *meterbridge;
688 LuaWindow *luawindow;
690 /* Dialogs that can be created via new<T> */
692 RCOptionEditor* rc_option_editor;
693 Gtk::HBox rc_option_editor_placeholder;
695 WM::Proxy<SpeakerDialog> speaker_config_window;
696 WM::Proxy<AddRouteDialog> add_route_dialog;
697 WM::Proxy<About> about;
698 WM::Proxy<LocationUIWindow> location_ui;
699 WM::Proxy<RouteParams_UI> route_params;
700 WM::Proxy<EngineControl> audio_midi_setup;
701 WM::Proxy<ExportVideoDialog> export_video_dialog;
702 WM::Proxy<LuaScriptManager> lua_script_window;
703 WM::Proxy<IdleOMeter> idleometer;
705 /* Windows/Dialogs that require a creator method */
707 WM::ProxyWithConstructor<SessionOptionEditor> session_option_editor;
708 WM::ProxyWithConstructor<AddVideoDialog> add_video_dialog;
709 WM::ProxyWithConstructor<BundleManager> bundle_manager;
710 WM::ProxyWithConstructor<BigClockWindow> big_clock_window;
711 WM::ProxyWithConstructor<GlobalPortMatrixWindow> audio_port_matrix;
712 WM::ProxyWithConstructor<GlobalPortMatrixWindow> midi_port_matrix;
713 WM::ProxyWithConstructor<KeyEditor> key_editor;
715 /* creator methods */
717 SessionOptionEditor* create_session_option_editor ();
718 BundleManager* create_bundle_manager ();
719 AddVideoDialog* create_add_video_dialog ();
720 BigClockWindow* create_big_clock_window();
721 GlobalPortMatrixWindow* create_global_port_matrix (ARDOUR::DataType);
722 KeyEditor* create_key_editor ();
724 ARDOUR::SystemExec *video_server_process;
726 void handle_locations_change (ARDOUR::Location*);
728 /* Keyboard Handling */
730 ArdourKeyboard* keyboard;
732 /* Keymap handling */
734 void install_actions ();
736 void toggle_record_enable (uint16_t);
738 uint32_t rec_enabled_streams;
739 void count_recenabled_streams (ARDOUR::Route&);
743 void pop_back_splash (Gtk::Window&);
747 Gtk::MenuItem *cleanup_item;
749 void display_cleanup_results (ARDOUR::CleanupReport& rep, const gchar* list_title, const bool msg_delete);
751 void cleanup_peakfiles ();
754 bool have_configure_timeout;
755 ARDOUR::microseconds_t last_configure_time;
756 gint configure_timeout ();
758 ARDOUR::microseconds_t last_peak_grab;
759 ARDOUR::microseconds_t last_shuttle_request;
761 bool have_disk_speed_dialog_displayed;
762 void disk_speed_dialog_gone (int ignored_response, Gtk::MessageDialog*);
763 void disk_overrun_handler ();
764 void disk_underrun_handler ();
765 void gui_idle_handler ();
767 void cancel_plugin_scan ();
768 void cancel_plugin_timeout ();
769 void plugin_scan_dialog (std::string type, std::string plugin, bool);
770 void plugin_scan_timeout (int);
772 void session_format_mismatch (std::string, std::string);
774 void session_dialog (std::string);
775 int pending_state_dialog ();
776 int sr_mismatch_dialog (ARDOUR::framecnt_t, ARDOUR::framecnt_t);
777 void sr_mismatch_message (ARDOUR::framecnt_t, ARDOUR::framecnt_t);
779 Gtk::MenuItem* jack_disconnect_item;
780 Gtk::MenuItem* jack_reconnect_item;
781 Gtk::Menu* jack_bufsize_menu;
783 Glib::RefPtr<Gtk::ActionGroup> common_actions;
785 void editor_realized ();
787 std::vector<std::string> positional_sync_strings;
789 void toggle_use_mmc ();
790 void toggle_send_mmc ();
791 void toggle_send_mtc ();
792 void toggle_send_midi_clock ();
794 void toggle_use_osc ();
796 void parameter_changed (std::string);
797 void session_parameter_changed (std::string);
801 void check_memory_locking ();
803 void audioengine_setup ();
805 void display_message (const char *prefix, gint prefix_len,
806 Glib::RefPtr<Gtk::TextBuffer::Tag> ptag, Glib::RefPtr<Gtk::TextBuffer::Tag> mtag,
808 Gtk::Label status_bar_label;
809 bool status_bar_button_press (GdkEventButton*);
811 void loading_message (const std::string& msg);
813 PBD::ScopedConnectionList forever_connections;
814 PBD::ScopedConnection halt_connection;
815 PBD::ScopedConnection editor_meter_connection;
817 void step_edit_status_change (bool);
819 /* these are used only in response to a platform-specific "ShouldQuit" signal */
821 void queue_finish ();
822 void fontconfig_dialog ();
824 int missing_file (ARDOUR::Session*s, std::string str, ARDOUR::DataType type);
825 int ambiguous_file (std::string file, std::vector<std::string> hits);
827 bool click_button_clicked (GdkEventButton *);
828 bool click_button_scroll (GdkEventScroll *);
829 bool sync_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 ArdourWidgets::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 ArdourWidgets::ArdourButton editor_visibility_button;
873 ArdourWidgets::ArdourButton mixer_visibility_button;
874 ArdourWidgets::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 close_current_dialog ();
890 void pre_release_dialog ();
892 bool bind_lua_action_script (GdkEventButton*, int);
893 void update_action_script_btn (int i, const std::string&);
896 #endif /* __ardour_gui_h__ */