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;
130 class SaveTemplateDialog;
132 class SessionOptionEditorWindow;
139 class LevelMeterHBox;
140 class GUIObjectState;
143 class ControlProtocolInfo;
156 namespace ArdourWidgets {
161 class ARDOUR_UI : public Gtkmm2ext::UI, public ARDOUR::SessionHandlePtr
164 ARDOUR_UI (int *argcp, char **argvp[], const char* localedir);
167 bool run_startup (bool should_be_new, std::string load_template);
173 void launch_manual ();
174 void launch_reference ();
175 void launch_tracker ();
176 void launch_subscribe ();
177 void launch_cheat_sheet ();
178 void launch_website ();
179 void launch_website_dev ();
180 void launch_forums ();
181 void launch_howto_report ();
185 void load_from_application_api (const std::string& path);
188 int load_session (const std::string& path, const std::string& snapshot, std::string mix_template = std::string());
190 bool session_load_in_progress;
191 int build_session (const std::string& path, const std::string& snapshot, ARDOUR::BusProfile*);
192 bool session_is_new() const { return _session_is_new; }
194 ARDOUR::Session* the_session() { return _session; }
196 bool get_smart_mode () const;
198 int get_session_parameters (bool quit_on_cancel, bool should_be_new = false, std::string load_template = "");
199 int build_session_from_dialog (SessionDialog&, const std::string& session_name, const std::string& session_path);
200 bool ask_about_loading_existing_session (const std::string& session_path);
202 /// @return true if session was successfully unloaded.
203 int unload_session (bool hide_stuff = false);
204 void close_session();
206 int save_state_canfail (std::string state_name = "", bool switch_to_it = false);
207 void save_state (const std::string & state_name = "", bool switch_to_it = false);
209 static ARDOUR_UI *instance () { return theArdourUI; }
211 /* signal emitted when escape key is pressed. All UI components that
212 need to respond to Escape in some way (e.g. break drag, clear
213 selection, etc) should connect to and handle this.
215 PBD::Signal0<void> Escape;
217 PublicEditor& the_editor() { return *editor;}
218 Mixer_UI* the_mixer() { return mixer; }
220 void new_midi_tracer_window ();
221 void toggle_editing_space();
222 void toggle_mixer_space();
223 void toggle_mixer_list();
224 void toggle_monitor_section_visibility ();
225 void toggle_keep_tearoffs();
227 void reset_focus (Gtk::Widget*);
229 static PublicEditor* _instance;
231 /** Emitted frequently with the audible frame, false, and the edit point as
232 * parameters respectively.
234 * (either RapidScreenUpdate || SuperRapidScreenUpdate - user-config)
236 static sigc::signal<void, framepos_t, bool, framepos_t> Clock;
238 static void close_all_dialogs () { CloseAllDialogs(); }
239 static sigc::signal<void> CloseAllDialogs;
241 XMLNode* main_window_settings() const;
242 XMLNode* editor_settings() const;
243 XMLNode* preferences_settings() const;
244 XMLNode* mixer_settings () const;
245 XMLNode* keyboard_settings () const;
246 XMLNode* tearoff_settings (const char*) const;
248 void save_ardour_state ();
249 gboolean configure_handler (GdkEventConfigure* conf);
251 void halt_on_xrun_message ();
252 void xrun_handler (framepos_t);
253 void create_xrun_marker (framepos_t);
255 GUIObjectState* gui_object_state;
257 MainClock* primary_clock;
258 MainClock* secondary_clock;
259 void focus_on_clock ();
260 AudioClock* big_clock;
262 VideoTimeLine *video_timeline;
264 void store_clock_modes ();
265 void restore_clock_modes ();
266 void reset_main_clocks ();
268 void synchronize_sync_source_and_video_pullup ();
271 void add_route_dialog_response (int);
273 void add_routes_part_two ();
274 void add_routes_thread ();
276 void start_duplicate_routes ();
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_audio_route (bool, int32_t, int32_t, ARDOUR::TrackMode, ARDOUR::RouteGroup *, uint32_t, std::string const &, bool, ARDOUR::PresentationInfo::order_t order);
288 void session_add_mixed_track (const ARDOUR::ChanCount&, const ARDOUR::ChanCount&, ARDOUR::RouteGroup*,
289 uint32_t, std::string const &, bool strict_io,
290 ARDOUR::PluginInfoPtr, ARDOUR::Plugin::PresetRecord* pset,
291 ARDOUR::PresentationInfo::order_t order);
293 void session_add_midi_bus (ARDOUR::RouteGroup*, uint32_t, std::string const &, bool strict_io,
294 ARDOUR::PluginInfoPtr, ARDOUR::Plugin::PresetRecord* pset,
295 ARDOUR::PresentationInfo::order_t order);
297 void session_add_midi_route (bool, ARDOUR::RouteGroup *, uint32_t, std::string const &, bool,
298 ARDOUR::PluginInfoPtr, ARDOUR::Plugin::PresetRecord*,
299 ARDOUR::PresentationInfo::order_t order);
301 void display_insufficient_ports_message ();
303 void attach_to_engine ();
306 gint exit_on_main_window_close (GdkEventAny *);
308 void maximise_editing_space ();
309 void restore_editing_space ();
311 void show_ui_prefs ();
313 bool check_audioengine(Gtk::Window&);
315 void setup_profile ();
316 void setup_tooltips ();
318 void set_shuttle_fract (double);
320 void get_process_buffers ();
321 void drop_process_buffers ();
323 void reset_peak_display ();
324 void reset_route_peak_display (ARDOUR::Route*);
325 void reset_group_peak_display (ARDOUR::RouteGroup*);
327 const std::string& announce_string() const { return _announce_string; }
329 void hide_application ();
331 Gtk::Notebook& tabs();
332 Gtk::Window& main_window () { return _main_window; }
334 void setup_toplevel_window (Gtk::Window&, const std::string& name, void* owner);
336 /* called from a static C function */
338 GtkNotebook* tab_window_root_drop (GtkNotebook* src,
344 bool tabbed_window_state_event_handler (GdkEventWindowState*, void* object);
345 bool key_event_handler (GdkEventKey*, Gtk::Window* window);
347 Gtkmm2ext::ActionMap global_actions;
349 ARDOUR::PresentationInfo::order_t translate_order (RouteDialogs::InsertAt);
351 std::map<std::string, std::string> route_setup_info (const std::string& script_path);
354 friend class PublicEditor;
356 void toggle_auto_play ();
357 void toggle_auto_input ();
358 void toggle_punch ();
359 void unset_dual_punch ();
360 bool ignore_dual_punch;
361 void toggle_punch_in ();
362 void toggle_punch_out ();
363 void toggle_session_monitoring_in ();
364 void toggle_session_monitoring_disk ();
365 void show_loop_punch_ruler_and_disallow_hide ();
366 void reenable_hide_loop_punch_ruler_if_appropriate ();
367 void toggle_auto_return ();
368 void toggle_click ();
369 void toggle_audio_midi_setup ();
370 void toggle_session_auto_loop ();
371 void toggle_rc_options_window ();
372 void toggle_session_options_window ();
375 Gtk::Window _main_window;
376 Gtkmm2ext::VisibilityTracker* main_window_visibility;
377 Gtk::VBox main_vpacker;
378 Gtk::HBox status_bar_hpacker;
380 PublicEditor* editor;
382 Gtk::Tooltips _tooltips;
386 bool _initial_verbose_plugin_scan;
387 bool first_time_engine_run;
389 void show_tabbable (ArdourWidgets::Tabbable*);
390 void hide_tabbable (ArdourWidgets::Tabbable*);
391 void detach_tabbable (ArdourWidgets::Tabbable*);
392 void attach_tabbable (ArdourWidgets::Tabbable*);
393 void button_change_tabbable_visibility (ArdourWidgets::Tabbable*);
394 void key_change_tabbable_visibility (ArdourWidgets::Tabbable*);
395 void toggle_editor_and_mixer ();
397 void tabbable_state_change (ArdourWidgets::Tabbable&);
399 void toggle_meterbridge ();
400 void toggle_luawindow ();
402 int setup_windows ();
403 void setup_transport ();
406 static ARDOUR_UI *theArdourUI;
407 SessionDialog *_session_dialog;
411 int ask_about_saving_session (const std::vector<std::string>& actions);
413 void save_session_at_its_request (std::string);
414 /* periodic safety backup, to be precise */
415 gint autosave_session();
416 void update_autosave();
417 sigc::connection _autosave_connection;
419 void session_dirty_changed ();
420 void update_title ();
422 void map_transport_state ();
423 int32_t do_engine_start ();
425 void engine_halted (const char* reason, bool free_reason);
426 void engine_stopped ();
427 void engine_running ();
431 void about_signal_response(int response);
433 Gtk::VBox top_packer;
435 sigc::connection clock_signal_connection;
436 void update_clocks ();
437 void start_clocking ();
438 void stop_clocking ();
440 void update_transport_clocks (framepos_t pos);
441 void record_state_changed ();
443 std::list<MidiTracer*> _midi_tracer_windows;
445 /* Transport Control */
447 Gtk::Table transport_table;
448 Gtk::Frame transport_frame;
449 Gtk::HBox transport_hbox;
451 ArdourWidgets::ArdourVSpacer* secondary_clock_spacer;
452 void repack_transport_hbox ();
453 void update_clock_visibility ();
455 struct TransportControllable : public PBD::Controllable {
466 TransportControllable (std::string name, ARDOUR_UI&, ToggleType);
467 void set_value (double, PBD::Controllable::GroupControlDisposition group_override);
468 double get_value (void) const;
474 boost::shared_ptr<TransportControllable> roll_controllable;
475 boost::shared_ptr<TransportControllable> stop_controllable;
476 boost::shared_ptr<TransportControllable> goto_start_controllable;
477 boost::shared_ptr<TransportControllable> goto_end_controllable;
478 boost::shared_ptr<TransportControllable> auto_loop_controllable;
479 boost::shared_ptr<TransportControllable> play_selection_controllable;
480 boost::shared_ptr<TransportControllable> rec_controllable;
482 void toggle_follow_edits ();
484 void set_transport_controllable_state (const XMLNode&);
485 XMLNode& get_transport_controllable_state ();
487 ArdourWidgets::ArdourButton roll_button;
488 ArdourWidgets::ArdourButton stop_button;
489 ArdourWidgets::ArdourButton goto_start_button;
490 ArdourWidgets::ArdourButton goto_end_button;
491 ArdourWidgets::ArdourButton auto_loop_button;
492 ArdourWidgets::ArdourButton play_selection_button;
493 ArdourWidgets::ArdourButton rec_button;
494 ArdourWidgets::ArdourButton punch_in_button;
495 ArdourWidgets::ArdourButton punch_out_button;
496 ArdourWidgets::ArdourButton layered_button;
498 ArdourWidgets::ArdourVSpacer recpunch_spacer;
499 ArdourWidgets::ArdourVSpacer monitoring_spacer;
501 ArdourWidgets::ArdourButton monitor_in_button;
502 ArdourWidgets::ArdourButton monitor_disk_button;
503 ArdourWidgets::ArdourButton auto_input_button;
505 Gtk::Label punch_label;
506 Gtk::Label layered_label;
508 Gtk::Label punch_space;
509 Gtk::Label mon_space;
511 void toggle_external_sync ();
512 void toggle_time_master ();
513 void toggle_video_sync ();
515 ShuttleControl shuttle_box;
516 MiniTimeline mini_timeline;
517 TimeInfoBox *time_info_box;
519 ArdourWidgets::ArdourButton auto_return_button;
520 ArdourWidgets::ArdourButton follow_edits_button;
521 ArdourWidgets::ArdourButton click_button;
522 ArdourWidgets::ArdourButton sync_button;
524 ArdourWidgets::ArdourButton auditioning_alert_button;
525 ArdourWidgets::ArdourButton solo_alert_button;
526 ArdourWidgets::ArdourButton feedback_alert_button;
527 ArdourWidgets::ArdourButton error_alert_button;
529 ArdourWidgets::ArdourButton action_script_call_btn[10];
530 Gtk::Table action_script_table;
534 ArdourWidgets::ArdourButton editor_meter_peak_display;
535 LevelMeterHBox * editor_meter;
536 float editor_meter_max_peak;
537 bool editor_meter_peak_button_release (GdkEventButton*);
539 bool editor_meter_button_press (GdkEventButton* ev);
540 void popup_editor_meter_menu (GdkEventButton* ev);
541 void add_editor_meter_type_item (Gtk::Menu_Helpers::MenuList&, Gtk::RadioMenuItem::Group&, std::string const &, ARDOUR::MeterType);
542 bool _suspend_editor_meter_callbacks;
544 void blink_handler (bool);
545 sigc::connection blink_connection;
548 void solo_blink (bool);
549 void sync_blink (bool);
550 void audition_blink (bool);
551 void feedback_blink (bool);
552 void error_blink (bool);
554 void set_flat_buttons();
556 void soloing_changed (bool);
557 void auditioning_changed (bool);
558 void _auditioning_changed (bool);
560 bool solo_alert_press (GdkEventButton* ev);
561 void audition_alert_clicked ();
562 bool error_alert_press (GdkEventButton *);
564 void layered_button_clicked ();
566 void big_clock_value_changed ();
567 void primary_clock_value_changed ();
568 void secondary_clock_value_changed ();
570 /* called by Blink signal */
572 void transport_rec_enable_blink (bool onoff);
574 Gtk::Menu* session_popup_menu;
576 /* menu bar and associated stuff */
578 Gtk::MenuBar* menu_bar;
579 Gtk::EventBox menu_bar_base;
582 void use_menubar_as_top_menubar ();
583 void build_menu_bar ();
585 Gtk::Label wall_clock_label;
586 gint update_wall_clock ();
588 Gtk::Label disk_space_label;
589 void update_disk_space ();
591 Gtk::Label timecode_format_label;
592 void update_timecode_format ();
594 Gtk::Label cpu_load_label;
595 void update_cpu_load ();
597 Gtk::Label xrun_label;
598 void update_xrun_count ();
600 Gtk::Label peak_thread_work_label;
601 void update_peak_thread_work ();
603 Gtk::Label buffer_load_label;
604 void update_buffer_load ();
606 Gtk::Label sample_rate_label;
607 void update_sample_rate (ARDOUR::framecnt_t);
609 Gtk::Label format_label;
610 void update_format ();
612 void every_second ();
613 void every_point_one_seconds ();
614 void every_point_zero_something_seconds ();
616 sigc::connection second_connection;
617 sigc::connection point_one_second_connection;
618 sigc::connection point_zero_something_second_connection;
619 sigc::connection fps_connection;
621 void set_fps_timeout_connection ();
623 void open_session ();
624 void open_recent_session ();
625 void save_template_dialog_response (int response, SaveTemplateDialog* d);
626 void save_template ();
627 void manage_templates ();
629 void meta_session_setup (const std::string& script_path);
630 void meta_route_setup (const std::string& script_path);
632 void edit_metadata ();
633 void import_metadata ();
635 void set_loop_sensitivity ();
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_rec_preroll();
657 void transport_rec_count_in();
658 void transport_forward (int option);
659 void transport_rewind (int option);
660 void transport_loop ();
661 void toggle_roll (bool with_abort, bool roll_out_of_bounded_mode);
662 bool trx_record_enable_all_tracks ();
664 bool _session_is_new;
665 void set_session (ARDOUR::Session *);
666 void connect_dependents_to_session (ARDOUR::Session *);
667 void we_have_dependents ();
669 void setup_session_options ();
671 guint32 last_key_press_time;
673 bool process_snapshot_session_prompter (ArdourWidgets::Prompter& prompter, bool switch_to_it);
674 void snapshot_session (bool switch_to_it);
676 void quick_snapshot_session (bool switch_to_it); //does not promtp for name, just makes a timestamped file
678 SaveAsDialog* save_as_dialog;
680 bool save_as_progress_update (float fraction, int64_t cnt, int64_t total, Gtk::Label* label, Gtk::ProgressBar* bar);
681 void save_session_as ();
682 void archive_session ();
683 void rename_session ();
686 int create_editor ();
687 int create_meterbridge ();
688 int create_luawindow ();
689 int create_masters ();
691 Meterbridge *meterbridge;
692 LuaWindow *luawindow;
694 /* Dialogs that can be created via new<T> */
696 RCOptionEditor* rc_option_editor;
697 Gtk::HBox rc_option_editor_placeholder;
699 WM::Proxy<SpeakerDialog> speaker_config_window;
700 WM::Proxy<AddRouteDialog> add_route_dialog;
701 WM::Proxy<About> about;
702 WM::Proxy<LocationUIWindow> location_ui;
703 WM::Proxy<RouteParams_UI> route_params;
704 WM::Proxy<EngineControl> audio_midi_setup;
705 WM::Proxy<ExportVideoDialog> export_video_dialog;
706 WM::Proxy<LuaScriptManager> lua_script_window;
707 WM::Proxy<IdleOMeter> idleometer;
709 /* Windows/Dialogs that require a creator method */
711 WM::ProxyWithConstructor<SessionOptionEditor> session_option_editor;
712 WM::ProxyWithConstructor<AddVideoDialog> add_video_dialog;
713 WM::ProxyWithConstructor<BundleManager> bundle_manager;
714 WM::ProxyWithConstructor<BigClockWindow> big_clock_window;
715 WM::ProxyWithConstructor<GlobalPortMatrixWindow> audio_port_matrix;
716 WM::ProxyWithConstructor<GlobalPortMatrixWindow> midi_port_matrix;
717 WM::ProxyWithConstructor<KeyEditor> key_editor;
719 /* creator methods */
721 SessionOptionEditor* create_session_option_editor ();
722 BundleManager* create_bundle_manager ();
723 AddVideoDialog* create_add_video_dialog ();
724 BigClockWindow* create_big_clock_window();
725 GlobalPortMatrixWindow* create_global_port_matrix (ARDOUR::DataType);
726 KeyEditor* create_key_editor ();
728 ARDOUR::SystemExec *video_server_process;
730 void handle_locations_change (ARDOUR::Location*);
732 /* Keyboard Handling */
734 ArdourKeyboard* keyboard;
736 /* Keymap handling */
738 void install_actions ();
740 void toggle_record_enable (uint16_t);
742 uint32_t rec_enabled_streams;
743 void count_recenabled_streams (ARDOUR::Route&);
747 void pop_back_splash (Gtk::Window&);
751 Gtk::MenuItem *cleanup_item;
753 void display_cleanup_results (ARDOUR::CleanupReport& rep, const gchar* list_title, const bool msg_delete);
755 void cleanup_peakfiles ();
758 bool have_configure_timeout;
759 ARDOUR::microseconds_t last_configure_time;
760 gint configure_timeout ();
762 ARDOUR::microseconds_t last_peak_grab;
763 ARDOUR::microseconds_t last_shuttle_request;
765 bool have_disk_speed_dialog_displayed;
766 void disk_speed_dialog_gone (int ignored_response, Gtk::MessageDialog*);
767 void disk_overrun_handler ();
768 void disk_underrun_handler ();
769 void gui_idle_handler ();
771 void cancel_plugin_scan ();
772 void cancel_plugin_timeout ();
773 void plugin_scan_dialog (std::string type, std::string plugin, bool);
774 void plugin_scan_timeout (int);
776 void session_format_mismatch (std::string, std::string);
778 void session_dialog (std::string);
779 int pending_state_dialog ();
780 int sr_mismatch_dialog (ARDOUR::framecnt_t, ARDOUR::framecnt_t);
781 void sr_mismatch_message (ARDOUR::framecnt_t, ARDOUR::framecnt_t);
783 Gtk::MenuItem* jack_disconnect_item;
784 Gtk::MenuItem* jack_reconnect_item;
785 Gtk::Menu* jack_bufsize_menu;
787 Glib::RefPtr<Gtk::ActionGroup> common_actions;
789 void editor_realized ();
791 std::vector<std::string> positional_sync_strings;
793 void toggle_use_mmc ();
794 void toggle_send_mmc ();
795 void toggle_send_mtc ();
796 void toggle_send_midi_clock ();
798 void toggle_use_osc ();
800 void parameter_changed (std::string);
801 void session_parameter_changed (std::string);
805 void check_memory_locking ();
807 void audioengine_setup ();
809 void display_message (const char *prefix, gint prefix_len,
810 Glib::RefPtr<Gtk::TextBuffer::Tag> ptag, Glib::RefPtr<Gtk::TextBuffer::Tag> mtag,
812 Gtk::Label status_bar_label;
813 bool status_bar_button_press (GdkEventButton*);
815 void loading_message (const std::string& msg);
817 PBD::ScopedConnectionList forever_connections;
818 PBD::ScopedConnection halt_connection;
819 PBD::ScopedConnection editor_meter_connection;
821 void step_edit_status_change (bool);
823 /* these are used only in response to a platform-specific "ShouldQuit" signal */
825 void queue_finish ();
826 void fontconfig_dialog ();
828 int missing_file (ARDOUR::Session*s, std::string str, ARDOUR::DataType type);
829 int ambiguous_file (std::string file, std::vector<std::string> hits);
831 bool click_button_clicked (GdkEventButton *);
832 bool click_button_scroll (GdkEventScroll *);
833 bool sync_button_clicked (GdkEventButton *);
835 VisibilityGroup _status_bar_visibility;
837 /** A ProcessThread so that we have some thread-local buffers for use by
838 * PluginEqGui::impulse_analysis ().
840 ARDOUR::ProcessThread* _process_thread;
842 void feedback_detected ();
844 ArdourWidgets::ArdourButton midi_panic_button;
847 void successful_graph_sort ();
848 bool _feedback_exists;
850 enum ArdourLogLevel {
857 ArdourLogLevel _log_not_acknowledged;
859 void resize_text_widgets ();
861 bool xrun_button_release (GdkEventButton* ev);
863 std::string _announce_string;
864 void check_announcements ();
866 int do_audio_midi_setup (uint32_t);
867 void audioengine_became_silent ();
869 DuplicateRouteDialog* duplicate_routes_dialog;
871 void grab_focus_after_dialog ();
873 void tabs_switch (GtkNotebookPage*, guint page_number);
874 void tabs_page_added (Gtk::Widget*, guint);
875 void tabs_page_removed (Gtk::Widget*, guint);
876 ArdourWidgets::ArdourButton editor_visibility_button;
877 ArdourWidgets::ArdourButton mixer_visibility_button;
878 ArdourWidgets::ArdourButton prefs_visibility_button;
880 bool key_press_focus_accelerator_handler (Gtk::Window& window, GdkEventKey* ev, Gtkmm2ext::Bindings*);
881 bool try_gtk_accel_binding (GtkWindow* win, GdkEventKey* ev, bool translate, GdkModifierType modifier);
883 bool main_window_delete_event (GdkEventAny*);
884 bool idle_ask_about_quit ();
886 void load_bindings ();
887 bool tabbable_visibility_button_press (GdkEventButton* ev, std::string const& tabbable_name);
889 void step_up_through_tabs ();
890 void step_down_through_tabs ();
893 void close_current_dialog ();
894 void pre_release_dialog ();
896 bool bind_lua_action_script (GdkEventButton*, int);
897 void update_action_script_btn (int i, const std::string&);
900 #endif /* __ardour_gui_h__ */