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);
350 std::map<std::string, std::string> route_setup_info (const std::string& script_path);
353 friend class PublicEditor;
355 void toggle_auto_play ();
356 void toggle_auto_input ();
357 void toggle_punch ();
358 void unset_dual_punch ();
359 bool ignore_dual_punch;
360 void toggle_punch_in ();
361 void toggle_punch_out ();
362 void toggle_session_monitoring_in ();
363 void toggle_session_monitoring_disk ();
364 void show_loop_punch_ruler_and_disallow_hide ();
365 void reenable_hide_loop_punch_ruler_if_appropriate ();
366 void toggle_auto_return ();
367 void toggle_click ();
368 void toggle_audio_midi_setup ();
369 void toggle_session_auto_loop ();
370 void toggle_rc_options_window ();
371 void toggle_session_options_window ();
374 Gtk::Window _main_window;
375 Gtkmm2ext::VisibilityTracker* main_window_visibility;
376 Gtk::VBox main_vpacker;
377 Gtk::HBox status_bar_hpacker;
379 PublicEditor* editor;
381 Gtk::Tooltips _tooltips;
385 bool _initial_verbose_plugin_scan;
386 bool first_time_engine_run;
388 void show_tabbable (ArdourWidgets::Tabbable*);
389 void hide_tabbable (ArdourWidgets::Tabbable*);
390 void detach_tabbable (ArdourWidgets::Tabbable*);
391 void attach_tabbable (ArdourWidgets::Tabbable*);
392 void button_change_tabbable_visibility (ArdourWidgets::Tabbable*);
393 void key_change_tabbable_visibility (ArdourWidgets::Tabbable*);
394 void toggle_editor_and_mixer ();
396 void tabbable_state_change (ArdourWidgets::Tabbable&);
398 void toggle_meterbridge ();
399 void toggle_luawindow ();
401 int setup_windows ();
402 void setup_transport ();
405 static ARDOUR_UI *theArdourUI;
406 SessionDialog *_session_dialog;
410 int ask_about_saving_session (const std::vector<std::string>& actions);
412 void save_session_at_its_request (std::string);
413 /* periodic safety backup, to be precise */
414 gint autosave_session();
415 void update_autosave();
416 sigc::connection _autosave_connection;
418 void session_dirty_changed ();
419 void update_title ();
421 void map_transport_state ();
422 int32_t do_engine_start ();
424 void engine_halted (const char* reason, bool free_reason);
425 void engine_stopped ();
426 void engine_running ();
430 void about_signal_response(int response);
432 Gtk::VBox top_packer;
434 sigc::connection clock_signal_connection;
435 void update_clocks ();
436 void start_clocking ();
437 void stop_clocking ();
439 void update_transport_clocks (framepos_t pos);
440 void record_state_changed ();
442 std::list<MidiTracer*> _midi_tracer_windows;
444 /* Transport Control */
446 Gtk::Table transport_table;
447 Gtk::Frame transport_frame;
448 Gtk::HBox transport_hbox;
450 ArdourWidgets::ArdourVSpacer* secondary_clock_spacer;
451 void repack_transport_hbox ();
452 void update_clock_visibility ();
454 struct TransportControllable : public PBD::Controllable {
465 TransportControllable (std::string name, ARDOUR_UI&, ToggleType);
466 void set_value (double, PBD::Controllable::GroupControlDisposition group_override);
467 double get_value (void) const;
473 boost::shared_ptr<TransportControllable> roll_controllable;
474 boost::shared_ptr<TransportControllable> stop_controllable;
475 boost::shared_ptr<TransportControllable> goto_start_controllable;
476 boost::shared_ptr<TransportControllable> goto_end_controllable;
477 boost::shared_ptr<TransportControllable> auto_loop_controllable;
478 boost::shared_ptr<TransportControllable> play_selection_controllable;
479 boost::shared_ptr<TransportControllable> rec_controllable;
481 void toggle_follow_edits ();
483 void set_transport_controllable_state (const XMLNode&);
484 XMLNode& get_transport_controllable_state ();
486 ArdourWidgets::ArdourButton roll_button;
487 ArdourWidgets::ArdourButton stop_button;
488 ArdourWidgets::ArdourButton goto_start_button;
489 ArdourWidgets::ArdourButton goto_end_button;
490 ArdourWidgets::ArdourButton auto_loop_button;
491 ArdourWidgets::ArdourButton play_selection_button;
492 ArdourWidgets::ArdourButton rec_button;
493 ArdourWidgets::ArdourButton punch_in_button;
494 ArdourWidgets::ArdourButton punch_out_button;
495 ArdourWidgets::ArdourButton layered_button;
497 ArdourWidgets::ArdourVSpacer recpunch_spacer;
498 ArdourWidgets::ArdourVSpacer monitoring_spacer;
500 ArdourWidgets::ArdourButton monitor_in_button;
501 ArdourWidgets::ArdourButton monitor_disk_button;
502 ArdourWidgets::ArdourButton auto_input_button;
504 Gtk::Label punch_label;
505 Gtk::Label layered_label;
507 Gtk::Label punch_space;
508 Gtk::Label mon_space;
510 void toggle_external_sync ();
511 void toggle_time_master ();
512 void toggle_video_sync ();
514 ShuttleControl shuttle_box;
515 MiniTimeline mini_timeline;
516 TimeInfoBox *time_info_box;
518 ArdourWidgets::ArdourButton auto_return_button;
519 ArdourWidgets::ArdourButton follow_edits_button;
520 ArdourWidgets::ArdourButton click_button;
521 ArdourWidgets::ArdourButton sync_button;
523 ArdourWidgets::ArdourButton auditioning_alert_button;
524 ArdourWidgets::ArdourButton solo_alert_button;
525 ArdourWidgets::ArdourButton feedback_alert_button;
526 ArdourWidgets::ArdourButton error_alert_button;
528 ArdourWidgets::ArdourButton action_script_call_btn[10];
529 Gtk::Table action_script_table;
533 ArdourWidgets::ArdourButton editor_meter_peak_display;
534 LevelMeterHBox * editor_meter;
535 float editor_meter_max_peak;
536 bool editor_meter_peak_button_release (GdkEventButton*);
538 bool editor_meter_button_press (GdkEventButton* ev);
539 void popup_editor_meter_menu (GdkEventButton* ev);
540 void add_editor_meter_type_item (Gtk::Menu_Helpers::MenuList&, Gtk::RadioMenuItem::Group&, std::string const &, ARDOUR::MeterType);
541 bool _suspend_editor_meter_callbacks;
543 void blink_handler (bool);
544 sigc::connection blink_connection;
547 void solo_blink (bool);
548 void sync_blink (bool);
549 void audition_blink (bool);
550 void feedback_blink (bool);
551 void error_blink (bool);
553 void set_flat_buttons();
555 void soloing_changed (bool);
556 void auditioning_changed (bool);
557 void _auditioning_changed (bool);
559 bool solo_alert_press (GdkEventButton* ev);
560 void audition_alert_clicked ();
561 bool error_alert_press (GdkEventButton *);
563 void layered_button_clicked ();
565 void big_clock_value_changed ();
566 void primary_clock_value_changed ();
567 void secondary_clock_value_changed ();
569 /* called by Blink signal */
571 void transport_rec_enable_blink (bool onoff);
573 Gtk::Menu* session_popup_menu;
575 /* menu bar and associated stuff */
577 Gtk::MenuBar* menu_bar;
578 Gtk::EventBox menu_bar_base;
581 void use_menubar_as_top_menubar ();
582 void build_menu_bar ();
584 Gtk::Label wall_clock_label;
585 gint update_wall_clock ();
587 Gtk::Label disk_space_label;
588 void update_disk_space ();
590 Gtk::Label timecode_format_label;
591 void update_timecode_format ();
593 Gtk::Label cpu_load_label;
594 void update_cpu_load ();
596 Gtk::Label xrun_label;
597 void update_xrun_count ();
599 Gtk::Label peak_thread_work_label;
600 void update_peak_thread_work ();
602 Gtk::Label buffer_load_label;
603 void update_buffer_load ();
605 Gtk::Label sample_rate_label;
606 void update_sample_rate (ARDOUR::framecnt_t);
608 Gtk::Label format_label;
609 void update_format ();
611 void every_second ();
612 void every_point_one_seconds ();
613 void every_point_zero_something_seconds ();
615 sigc::connection second_connection;
616 sigc::connection point_one_second_connection;
617 sigc::connection point_zero_something_second_connection;
618 sigc::connection fps_connection;
620 void set_fps_timeout_connection ();
622 void open_session ();
623 void open_recent_session ();
624 bool process_save_template_prompter (ArdourWidgets::Prompter& prompter);
625 void save_template ();
626 void manage_templates ();
628 void meta_session_setup (const std::string& script_path);
629 void meta_route_setup (const std::string& script_path);
631 void edit_metadata ();
632 void import_metadata ();
634 void set_loop_sensitivity ();
635 void set_transport_sensitivity (bool);
637 //stuff for ProTools-style numpad
638 void transport_numpad_event (int num);
639 void transport_numpad_decimal ();
640 bool _numpad_locate_happening;
641 int _pending_locate_num;
642 gint transport_numpad_timeout ();
643 sigc::connection _numpad_timeout_connection;
645 void transport_goto_nth_marker (int nth);
646 void transport_goto_zero ();
647 void transport_goto_start ();
648 void transport_goto_end ();
649 void transport_goto_wallclock ();
650 void transport_stop ();
651 void transport_record (bool roll);
652 void transport_roll ();
653 void transport_play_selection();
654 void transport_play_preroll();
655 void transport_rec_preroll();
656 void transport_rec_count_in();
657 void transport_forward (int option);
658 void transport_rewind (int option);
659 void transport_loop ();
660 void toggle_roll (bool with_abort, bool roll_out_of_bounded_mode);
661 bool trx_record_enable_all_tracks ();
663 bool _session_is_new;
664 void set_session (ARDOUR::Session *);
665 void connect_dependents_to_session (ARDOUR::Session *);
666 void we_have_dependents ();
668 void setup_session_options ();
670 guint32 last_key_press_time;
672 bool process_snapshot_session_prompter (ArdourWidgets::Prompter& prompter, bool switch_to_it);
673 void snapshot_session (bool switch_to_it);
675 void quick_snapshot_session (bool switch_to_it); //does not promtp for name, just makes a timestamped file
677 SaveAsDialog* save_as_dialog;
679 bool save_as_progress_update (float fraction, int64_t cnt, int64_t total, Gtk::Label* label, Gtk::ProgressBar* bar);
680 void save_session_as ();
681 void archive_session ();
682 void rename_session ();
685 int create_editor ();
686 int create_meterbridge ();
687 int create_luawindow ();
688 int create_masters ();
690 Meterbridge *meterbridge;
691 LuaWindow *luawindow;
693 /* Dialogs that can be created via new<T> */
695 RCOptionEditor* rc_option_editor;
696 Gtk::HBox rc_option_editor_placeholder;
698 WM::Proxy<SpeakerDialog> speaker_config_window;
699 WM::Proxy<AddRouteDialog> add_route_dialog;
700 WM::Proxy<About> about;
701 WM::Proxy<LocationUIWindow> location_ui;
702 WM::Proxy<RouteParams_UI> route_params;
703 WM::Proxy<EngineControl> audio_midi_setup;
704 WM::Proxy<ExportVideoDialog> export_video_dialog;
705 WM::Proxy<LuaScriptManager> lua_script_window;
706 WM::Proxy<IdleOMeter> idleometer;
708 /* Windows/Dialogs that require a creator method */
710 WM::ProxyWithConstructor<SessionOptionEditor> session_option_editor;
711 WM::ProxyWithConstructor<AddVideoDialog> add_video_dialog;
712 WM::ProxyWithConstructor<BundleManager> bundle_manager;
713 WM::ProxyWithConstructor<BigClockWindow> big_clock_window;
714 WM::ProxyWithConstructor<GlobalPortMatrixWindow> audio_port_matrix;
715 WM::ProxyWithConstructor<GlobalPortMatrixWindow> midi_port_matrix;
716 WM::ProxyWithConstructor<KeyEditor> key_editor;
718 /* creator methods */
720 SessionOptionEditor* create_session_option_editor ();
721 BundleManager* create_bundle_manager ();
722 AddVideoDialog* create_add_video_dialog ();
723 BigClockWindow* create_big_clock_window();
724 GlobalPortMatrixWindow* create_global_port_matrix (ARDOUR::DataType);
725 KeyEditor* create_key_editor ();
727 ARDOUR::SystemExec *video_server_process;
729 void handle_locations_change (ARDOUR::Location*);
731 /* Keyboard Handling */
733 ArdourKeyboard* keyboard;
735 /* Keymap handling */
737 void install_actions ();
739 void toggle_record_enable (uint16_t);
741 uint32_t rec_enabled_streams;
742 void count_recenabled_streams (ARDOUR::Route&);
746 void pop_back_splash (Gtk::Window&);
750 Gtk::MenuItem *cleanup_item;
752 void display_cleanup_results (ARDOUR::CleanupReport& rep, const gchar* list_title, const bool msg_delete);
754 void cleanup_peakfiles ();
757 bool have_configure_timeout;
758 ARDOUR::microseconds_t last_configure_time;
759 gint configure_timeout ();
761 ARDOUR::microseconds_t last_peak_grab;
762 ARDOUR::microseconds_t last_shuttle_request;
764 bool have_disk_speed_dialog_displayed;
765 void disk_speed_dialog_gone (int ignored_response, Gtk::MessageDialog*);
766 void disk_overrun_handler ();
767 void disk_underrun_handler ();
768 void gui_idle_handler ();
770 void cancel_plugin_scan ();
771 void cancel_plugin_timeout ();
772 void plugin_scan_dialog (std::string type, std::string plugin, bool);
773 void plugin_scan_timeout (int);
775 void session_format_mismatch (std::string, std::string);
777 void session_dialog (std::string);
778 int pending_state_dialog ();
779 int sr_mismatch_dialog (ARDOUR::framecnt_t, ARDOUR::framecnt_t);
780 void sr_mismatch_message (ARDOUR::framecnt_t, ARDOUR::framecnt_t);
782 Gtk::MenuItem* jack_disconnect_item;
783 Gtk::MenuItem* jack_reconnect_item;
784 Gtk::Menu* jack_bufsize_menu;
786 Glib::RefPtr<Gtk::ActionGroup> common_actions;
788 void editor_realized ();
790 std::vector<std::string> positional_sync_strings;
792 void toggle_use_mmc ();
793 void toggle_send_mmc ();
794 void toggle_send_mtc ();
795 void toggle_send_midi_clock ();
797 void toggle_use_osc ();
799 void parameter_changed (std::string);
800 void session_parameter_changed (std::string);
804 void check_memory_locking ();
806 void audioengine_setup ();
808 void display_message (const char *prefix, gint prefix_len,
809 Glib::RefPtr<Gtk::TextBuffer::Tag> ptag, Glib::RefPtr<Gtk::TextBuffer::Tag> mtag,
811 Gtk::Label status_bar_label;
812 bool status_bar_button_press (GdkEventButton*);
814 void loading_message (const std::string& msg);
816 PBD::ScopedConnectionList forever_connections;
817 PBD::ScopedConnection halt_connection;
818 PBD::ScopedConnection editor_meter_connection;
820 void step_edit_status_change (bool);
822 /* these are used only in response to a platform-specific "ShouldQuit" signal */
824 void queue_finish ();
825 void fontconfig_dialog ();
827 int missing_file (ARDOUR::Session*s, std::string str, ARDOUR::DataType type);
828 int ambiguous_file (std::string file, std::vector<std::string> hits);
830 bool click_button_clicked (GdkEventButton *);
831 bool click_button_scroll (GdkEventScroll *);
832 bool sync_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 ArdourWidgets::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 ArdourWidgets::ArdourButton editor_visibility_button;
876 ArdourWidgets::ArdourButton mixer_visibility_button;
877 ArdourWidgets::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 ();
895 bool bind_lua_action_script (GdkEventButton*, int);
896 void update_action_script_btn (int i, const std::string&);
899 #endif /* __ardour_gui_h__ */