Consolidate two more engine-checks
[ardour.git] / gtk2_ardour / ardour_ui.h
1 /*
2     Copyright (C) 1999-2002 Paul Davis
3
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.
8
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.
13
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.
17
18 */
19
20 #ifndef __ardour_gui_h__
21 #define __ardour_gui_h__
22
23 #include <time.h>
24
25 /* need _BSD_SOURCE to get timersub macros */
26
27 #ifdef _BSD_SOURCE
28 #include <sys/time.h>
29 #else
30 #define _BSD_SOURCE
31 #include <sys/time.h>
32 #undef _BSD_SOURCE
33 #endif
34
35 #include <list>
36 #include <cmath>
37
38
39 #include "pbd/xml++.h"
40 #include <gtkmm/box.h>
41 #include <gtkmm/frame.h>
42 #include <gtkmm/label.h>
43 #include <gtkmm/table.h>
44 #include <gtkmm/fixed.h>
45 #include <gtkmm/drawingarea.h>
46 #include <gtkmm/eventbox.h>
47 #include <gtkmm/menu.h>
48 #include <gtkmm/menuitem.h>
49 #include <gtkmm/messagedialog.h>
50 #include <gtkmm/notebook.h>
51 #include <gtkmm/button.h>
52 #include <gtkmm/togglebutton.h>
53 #include <gtkmm/treeview.h>
54 #include <gtkmm/menubar.h>
55 #include <gtkmm/textbuffer.h>
56 #include <gtkmm/adjustment.h>
57
58 #include "gtkmm2ext/gtk_ui.h"
59 #include "gtkmm2ext/bindings.h"
60 #include "gtkmm2ext/visibility_tracker.h"
61
62 #include "ardour/ardour.h"
63 #include "ardour/types.h"
64 #include "ardour/utils.h"
65 #include "ardour/plugin.h"
66 #include "ardour/session_handle.h"
67 #include "ardour/system_exec.h"
68
69 #include "video_timeline.h"
70
71 #include "widgets/ardour_button.h"
72 #include "widgets/ardour_spacer.h"
73
74 #include "add_route_dialog.h"
75 #include "ardour_dialog.h"
76 #include "ardour_window.h"
77 #include "editing.h"
78 #include "enums.h"
79 #include "mini_timeline.h"
80 #include "shuttle_control.h"
81 #include "transport_control.h"
82 #include "transport_control_ui.h"
83 #include "visibility_group.h"
84 #include "window_manager.h"
85
86 #ifdef COMPILER_MSVC
87 #include "about.h"
88 #include "add_video_dialog.h"
89 #include "big_clock_window.h"
90 #include "big_transport_window.h"
91 #include "bundle_manager.h"
92 #include "engine_dialog.h"
93 #include "export_video_dialog.h"
94 #include "global_port_matrix.h"
95 #include "idleometer.h"
96 #include "keyeditor.h"
97 #include "location_ui.h"
98 #include "lua_script_manager.h"
99 #include "plugin_dspload_window.h"
100 #include "rc_option_editor.h"
101 #include "route_dialogs.h"
102 #include "route_params_ui.h"
103 #include "session_option_editor.h"
104 #include "speaker_dialog.h"
105 #include "transport_masters_dialog.h"
106 #else
107 class About;
108 class AddRouteDialog;
109 class AddVideoDialog;
110 class BigClockWindow;
111 class BigTransportWindow;
112 class BundleManager;
113 class EngineControl;
114 class ExportVideoDialog;
115 class KeyEditor;
116 class LocationUIWindow;
117 class LuaScriptManager;
118 class RCOptionEditor;
119 class RouteParams_UI;
120 class SessionOptionEditor;
121 class SpeakerDialog;
122 class GlobalPortMatrixWindow;
123 class IdleOMeter;
124 class PluginDSPLoadWindow;
125 class TransportMastersWindow;
126 #endif
127
128 class VideoTimeLine;
129 class ArdourKeyboard;
130 class AudioClock;
131 class ConnectionEditor;
132 class DuplicateRouteDialog;
133 class MainClock;
134 class Mixer_UI;
135 class PublicEditor;
136 class SaveAsDialog;
137 class SaveTemplateDialog;
138 class SessionDialog;
139 class SessionOptionEditorWindow;
140 class Splash;
141 class TimeInfoBox;
142 class Meterbridge;
143 class LuaWindow;
144 class MidiTracer;
145 class NSM_Client;
146 class LevelMeterHBox;
147 class GUIObjectState;
148
149 namespace ARDOUR {
150         class ControlProtocolInfo;
151         class IO;
152         class Port;
153         class Route;
154         class RouteGroup;
155         class Location;
156         class ProcessThread;
157 }
158
159 namespace Gtk {
160         class ProgressBar;
161 }
162
163 namespace ArdourWidgets {
164         class Prompter;
165         class Tabbable;
166 }
167
168 #define MAX_LUA_ACTION_SCRIPTS 12
169
170 class ARDOUR_UI : public Gtkmm2ext::UI, public ARDOUR::SessionHandlePtr, public TransportControlProvider
171 {
172 public:
173         ARDOUR_UI (int *argcp, char **argvp[], const char* localedir);
174         ~ARDOUR_UI();
175
176         bool run_startup (bool should_be_new, std::string load_template);
177
178         void show_splash ();
179         void hide_splash ();
180
181         void launch_chat ();
182         void launch_manual ();
183         void launch_reference ();
184         void launch_tracker ();
185         void launch_subscribe ();
186         void launch_cheat_sheet ();
187         void launch_website ();
188         void launch_website_dev ();
189         void launch_forums ();
190         void launch_howto_report ();
191         void show_about ();
192         void hide_about ();
193
194         void load_from_application_api (const std::string& path);
195         void finish();
196
197         int load_session (const std::string& path, const std::string& snapshot, std::string mix_template = std::string());
198         bool session_loaded;
199         bool session_load_in_progress;
200         int build_session (const std::string& path, const std::string& snapshot, ARDOUR::BusProfile*);
201         bool session_is_new() const { return _session_is_new; }
202
203         ARDOUR::Session* the_session() { return _session; }
204
205         bool get_smart_mode () const;
206
207         RCOptionEditor* get_rc_option_editor() { return rc_option_editor; }
208         void show_tabbable (ArdourWidgets::Tabbable*);
209
210         int get_session_parameters (bool quit_on_cancel, bool should_be_new = false, std::string load_template = "");
211         int  build_session_from_dialog (SessionDialog&, const std::string& session_name, const std::string& session_path);
212         bool ask_about_loading_existing_session (const std::string& session_path);
213
214         /// @return true if session was successfully unloaded.
215         int unload_session (bool hide_stuff = false);
216         void close_session();
217
218         int  save_state_canfail (std::string state_name = "", bool switch_to_it = false);
219         void save_state (const std::string & state_name = "", bool switch_to_it = false);
220
221         static ARDOUR_UI *instance () { return theArdourUI; }
222
223         /* signal emitted when escape key is pressed. All UI components that
224            need to respond to Escape in some way (e.g. break drag, clear
225            selection, etc) should connect to and handle this.
226         */
227         PBD::Signal0<void> Escape;
228
229         PublicEditor&     the_editor() { return *editor;}
230         Mixer_UI* the_mixer() { return mixer; }
231
232         void new_midi_tracer_window ();
233         void toggle_editing_space();
234         void toggle_mixer_space();
235         void toggle_mixer_list();
236         void toggle_monitor_section_visibility ();
237         void toggle_keep_tearoffs();
238
239         void toggle_vca_pane();
240 #ifdef MIXBUS
241         void toggle_mixbus_pane();
242 #endif
243
244         void reset_focus (Gtk::Widget*);
245
246         static PublicEditor* _instance;
247
248         /** Emitted frequently with the audible sample, false, and the edit point as
249          *  parameters respectively.
250          *
251          *  (either RapidScreenUpdate || SuperRapidScreenUpdate - user-config)
252          */
253         static sigc::signal<void, samplepos_t> Clock;
254
255         static void close_all_dialogs () { CloseAllDialogs(); }
256         static sigc::signal<void> CloseAllDialogs;
257
258         XMLNode* main_window_settings() const;
259         XMLNode* editor_settings() const;
260         XMLNode* preferences_settings() const;
261         XMLNode* mixer_settings () const;
262         XMLNode* keyboard_settings () const;
263         XMLNode* tearoff_settings (const char*) const;
264
265         void save_ardour_state ();
266         gboolean configure_handler (GdkEventConfigure* conf);
267
268         void halt_on_xrun_message ();
269         void xrun_handler (samplepos_t);
270         void create_xrun_marker (samplepos_t);
271
272         GUIObjectState* gui_object_state;
273
274         MainClock* primary_clock;
275         MainClock* secondary_clock;
276         void focus_on_clock ();
277         AudioClock*   big_clock;
278
279         VideoTimeLine *video_timeline;
280
281         void store_clock_modes ();
282         void restore_clock_modes ();
283         void reset_main_clocks ();
284
285         void synchronize_sync_source_and_video_pullup ();
286
287         void add_route ();
288         void add_route_dialog_response (int);
289
290         void add_routes_part_two ();
291         void add_routes_thread ();
292
293         void start_duplicate_routes ();
294
295         void add_video (Gtk::Window* float_window);
296         void remove_video ();
297         void start_video_server_menu (Gtk::Window* float_window);
298         bool start_video_server (Gtk::Window* float_window, bool popup_msg);
299         void stop_video_server (bool ask_confirm=false);
300         void flush_videotimeline_cache (bool localcacheonly=false);
301         void export_video (bool range = false);
302
303         void session_add_audio_route (bool, int32_t, int32_t, ARDOUR::TrackMode, ARDOUR::RouteGroup *,
304                                       uint32_t, std::string const &, bool, ARDOUR::PresentationInfo::order_t order);
305
306         void session_add_mixed_track (const ARDOUR::ChanCount&, const ARDOUR::ChanCount&, ARDOUR::RouteGroup*,
307                                       uint32_t, std::string const &, bool strict_io,
308                                       ARDOUR::PluginInfoPtr, ARDOUR::Plugin::PresetRecord* pset,
309                                       ARDOUR::PresentationInfo::order_t order);
310
311         void session_add_midi_bus (ARDOUR::RouteGroup*, uint32_t, std::string const &, bool strict_io,
312                                    ARDOUR::PluginInfoPtr, ARDOUR::Plugin::PresetRecord* pset,
313                                    ARDOUR::PresentationInfo::order_t order);
314
315         void session_add_midi_route (bool, ARDOUR::RouteGroup *, uint32_t, std::string const &, bool,
316                                      ARDOUR::PluginInfoPtr, ARDOUR::Plugin::PresetRecord*,
317                                      ARDOUR::PresentationInfo::order_t order);
318
319         void session_add_foldback_bus (uint32_t, std::string const &);
320
321         void display_insufficient_ports_message ();
322
323         void attach_to_engine ();
324         void post_engine ();
325
326         gint exit_on_main_window_close (GdkEventAny *);
327
328         void maximise_editing_space ();
329         void restore_editing_space ();
330
331         void show_ui_prefs ();
332
333         bool check_audioengine(Gtk::Window&);
334
335         void setup_profile ();
336         void setup_tooltips ();
337
338         void set_shuttle_fract (double);
339
340         void get_process_buffers ();
341         void drop_process_buffers ();
342
343         void reset_peak_display ();
344         void reset_route_peak_display (ARDOUR::Route*);
345         void reset_group_peak_display (ARDOUR::RouteGroup*);
346
347         const std::string& announce_string() const { return _announce_string; }
348
349         void hide_application ();
350
351         Gtk::Notebook& tabs();
352         Gtk::Window& main_window () { return _main_window; }
353
354         void setup_toplevel_window (Gtk::Window&, const std::string& name, void* owner);
355
356         /* called from a static C function */
357
358         GtkNotebook* tab_window_root_drop (GtkNotebook* src,
359                                            GtkWidget* w,
360                                            gint x,
361                                            gint y,
362                                            gpointer user_data);
363
364         bool tabbed_window_state_event_handler (GdkEventWindowState*, void* object);
365         bool key_event_handler (GdkEventKey*, Gtk::Window* window);
366
367         Gtkmm2ext::ActionMap global_actions;
368
369         ARDOUR::PresentationInfo::order_t translate_order (RouteDialogs::InsertAt);
370
371         std::map<std::string, std::string> route_setup_info (const std::string& script_path);
372
373 protected:
374         friend class PublicEditor;
375
376         void toggle_auto_play ();
377         void toggle_auto_input ();
378         void toggle_punch ();
379         void unset_dual_punch ();
380         bool ignore_dual_punch;
381         void toggle_punch_in ();
382         void toggle_punch_out ();
383         void toggle_session_monitoring_in ();
384         void toggle_session_monitoring_disk ();
385         void show_loop_punch_ruler_and_disallow_hide ();
386         void reenable_hide_loop_punch_ruler_if_appropriate ();
387         void toggle_auto_return ();
388         void toggle_click ();
389         void toggle_audio_midi_setup ();
390         void toggle_session_auto_loop ();
391         void toggle_rc_options_window ();
392         void toggle_session_options_window ();
393
394 private:
395
396         Gtk::Window   _main_window;
397         Gtkmm2ext::VisibilityTracker* main_window_visibility;
398         Gtk::VBox      main_vpacker;
399         Gtk::HBox      status_bar_hpacker;
400         Gtk::Notebook _tabs;
401         PublicEditor*  editor;
402         Mixer_UI*      mixer;
403         Gtk::Tooltips _tooltips;
404         NSM_Client*    nsm;
405         bool          _was_dirty;
406         bool          _mixer_on_top;
407         bool          _initial_verbose_plugin_scan;
408         bool           first_time_engine_run;
409
410         void hide_tabbable (ArdourWidgets::Tabbable*);
411         void detach_tabbable (ArdourWidgets::Tabbable*);
412         void attach_tabbable (ArdourWidgets::Tabbable*);
413         void button_change_tabbable_visibility (ArdourWidgets::Tabbable*);
414         void key_change_tabbable_visibility (ArdourWidgets::Tabbable*);
415         void toggle_editor_and_mixer ();
416
417         void tabbable_state_change (ArdourWidgets::Tabbable&);
418
419         void toggle_meterbridge ();
420         void toggle_luawindow ();
421
422         int  setup_windows ();
423         void setup_transport ();
424         void setup_clock ();
425
426         static ARDOUR_UI *theArdourUI;
427         SessionDialog *_session_dialog;
428
429         int starting ();
430
431         int  ask_about_saving_session (const std::vector<std::string>& actions);
432
433         void save_session_at_its_request (std::string);
434         /* periodic safety backup, to be precise */
435         gint autosave_session();
436         void update_autosave();
437         sigc::connection _autosave_connection;
438
439         void session_dirty_changed ();
440         void update_title ();
441
442         void map_transport_state ();
443         int32_t do_engine_start ();
444
445         void engine_halted (const char* reason, bool free_reason);
446         void engine_stopped ();
447         void engine_running ();
448
449         void use_config ();
450
451         void about_signal_response(int response);
452
453         Gtk::VBox    top_packer;
454
455         sigc::connection clock_signal_connection;
456         void         update_clocks ();
457         void         start_clocking ();
458         void         stop_clocking ();
459
460         void update_transport_clocks (samplepos_t pos);
461         void record_state_changed ();
462
463         std::list<MidiTracer*> _midi_tracer_windows;
464
465         /* Transport Control */
466
467         Gtk::Table               transport_table;
468         Gtk::Frame               transport_frame;
469         Gtk::HBox                transport_hbox;
470
471         ArdourWidgets::ArdourVSpacer* secondary_clock_spacer;
472         void repack_transport_hbox ();
473         void update_clock_visibility ();
474         void toggle_follow_edits ();
475
476         void set_transport_controllable_state (const XMLNode&);
477         XMLNode& get_transport_controllable_state ();
478
479         TransportControlUI transport_ctrl;
480
481         ArdourWidgets::ArdourButton punch_in_button;
482         ArdourWidgets::ArdourButton punch_out_button;
483         ArdourWidgets::ArdourButton layered_button;
484
485         ArdourWidgets::ArdourVSpacer recpunch_spacer;
486         ArdourWidgets::ArdourVSpacer monitoring_spacer;
487
488         ArdourWidgets::ArdourButton monitor_in_button;
489         ArdourWidgets::ArdourButton monitor_disk_button;
490         ArdourWidgets::ArdourButton auto_input_button;
491
492         Gtk::Label   punch_label;
493         Gtk::Label   layered_label;
494
495         Gtk::Label   punch_space;
496         Gtk::Label   mon_space;
497
498         void toggle_external_sync ();
499         void toggle_time_master ();
500         void toggle_video_sync ();
501
502         ShuttleControl     shuttle_box;
503         MiniTimeline       mini_timeline;
504         TimeInfoBox*       time_info_box;
505
506
507         ArdourWidgets::ArdourVSpacer      meterbox_spacer;
508         ArdourWidgets::ArdourVSpacer      meterbox_spacer2;
509
510         ArdourWidgets::ArdourButton auto_return_button;
511         ArdourWidgets::ArdourButton follow_edits_button;
512         ArdourWidgets::ArdourButton sync_button;
513
514         ArdourWidgets::ArdourButton auditioning_alert_button;
515         ArdourWidgets::ArdourButton solo_alert_button;
516         ArdourWidgets::ArdourButton feedback_alert_button;
517         ArdourWidgets::ArdourButton error_alert_button;
518
519         ArdourWidgets::ArdourButton action_script_call_btn[MAX_LUA_ACTION_SCRIPTS];
520         Gtk::Table action_script_table;
521
522         Gtk::VBox alert_box;
523         Gtk::Table editor_meter_table;
524         ArdourWidgets::ArdourButton editor_meter_peak_display;
525         LevelMeterHBox *            editor_meter;
526         float                       editor_meter_max_peak;
527         bool                        editor_meter_peak_button_release (GdkEventButton*);
528
529         bool editor_meter_button_press (GdkEventButton* ev);
530         void popup_editor_meter_menu (GdkEventButton* ev);
531         void add_editor_meter_type_item (Gtk::Menu_Helpers::MenuList&, Gtk::RadioMenuItem::Group&, std::string const &, ARDOUR::MeterType);
532         bool _suspend_editor_meter_callbacks;
533
534         void blink_handler (bool);
535         sigc::connection blink_connection;
536
537         void cancel_solo ();
538         void solo_blink (bool);
539         void sync_blink (bool);
540         void audition_blink (bool);
541         void feedback_blink (bool);
542         void error_blink (bool);
543
544         void set_flat_buttons();
545
546         void soloing_changed (bool);
547         void auditioning_changed (bool);
548         void _auditioning_changed (bool);
549
550         bool solo_alert_press (GdkEventButton* ev);
551         void audition_alert_clicked ();
552         bool error_alert_press (GdkEventButton *);
553
554         void layered_button_clicked ();
555
556         void big_clock_value_changed ();
557         void primary_clock_value_changed ();
558         void secondary_clock_value_changed ();
559
560         /* called by Blink signal */
561
562         void transport_rec_enable_blink (bool onoff);
563
564         Gtk::Menu*        session_popup_menu;
565
566         /* menu bar and associated stuff */
567
568         Gtk::MenuBar* menu_bar;
569         Gtk::EventBox menu_bar_base;
570         Gtk::HBox     menu_hbox;
571
572         void use_menubar_as_top_menubar ();
573         void build_menu_bar ();
574
575         Gtk::Label   wall_clock_label;
576         gint update_wall_clock ();
577
578         Gtk::Label  disk_space_label;
579         void update_disk_space ();
580         void format_disk_space_label (float);
581
582         Gtk::Label   timecode_format_label;
583         void update_timecode_format ();
584
585         Gtk::Label  dsp_load_label;
586         void update_cpu_load ();
587
588         Gtk::Label   peak_thread_work_label;
589         void update_peak_thread_work ();
590
591         Gtk::Label   sample_rate_label;
592         void update_sample_rate (ARDOUR::samplecnt_t);
593
594         Gtk::Label    format_label;
595         void update_format ();
596
597         void every_second ();
598         void every_point_one_seconds ();
599         void every_point_zero_something_seconds ();
600
601         sigc::connection second_connection;
602         sigc::connection point_one_second_connection;
603         sigc::connection point_zero_something_second_connection;
604         sigc::connection fps_connection;
605
606         void set_fps_timeout_connection ();
607
608         void open_session ();
609         void open_recent_session ();
610         void save_template_dialog_response (int response, SaveTemplateDialog* d);
611         void save_template ();
612         void manage_templates ();
613
614         void meta_session_setup (const std::string& script_path);
615         void meta_route_setup (const std::string& script_path);
616
617         void edit_metadata ();
618         void import_metadata ();
619
620         void set_transport_sensitivity (bool);
621
622         //stuff for ProTools-style numpad
623         void transport_numpad_event (int num);
624         void transport_numpad_decimal ();
625         bool _numpad_locate_happening;
626         int _pending_locate_num;
627         gint transport_numpad_timeout ();
628         sigc::connection _numpad_timeout_connection;
629
630         void transport_goto_nth_marker (int nth);
631         void transport_goto_zero ();
632         void transport_goto_start ();
633         void transport_goto_end ();
634         void transport_goto_wallclock ();
635         void transport_stop ();
636         void transport_record (bool roll);
637         void transport_roll ();
638         void transport_play_selection();
639         void transport_play_preroll();
640         void transport_rec_preroll();
641         void transport_rec_count_in();
642         void transport_forward (int option);
643         void transport_rewind (int option);
644         void transport_loop ();
645         void toggle_roll (bool with_abort, bool roll_out_of_bounded_mode);
646         bool trx_record_enable_all_tracks ();
647
648         bool _session_is_new;
649         void set_session (ARDOUR::Session *);
650         void connect_dependents_to_session (ARDOUR::Session *);
651         void we_have_dependents ();
652
653         void setup_session_options ();
654
655         guint32  last_key_press_time;
656
657         bool process_snapshot_session_prompter (ArdourWidgets::Prompter& prompter, bool switch_to_it);
658         void snapshot_session (bool switch_to_it);
659
660         void quick_snapshot_session (bool switch_to_it);  //does not promtp for name, just makes a timestamped file
661
662         SaveAsDialog* save_as_dialog;
663
664         bool save_as_progress_update (float fraction, int64_t cnt, int64_t total, Gtk::Label* label, Gtk::ProgressBar* bar);
665         void save_session_as ();
666         void archive_session ();
667         void rename_session ();
668
669         int         create_mixer ();
670         int         create_editor ();
671         int         create_meterbridge ();
672         int         create_luawindow ();
673         int         create_masters ();
674
675         Meterbridge  *meterbridge;
676         LuaWindow    *luawindow;
677
678         /* Dialogs that can be created via new<T> */
679
680         RCOptionEditor* rc_option_editor;
681         Gtk::HBox rc_option_editor_placeholder;
682
683         WM::Proxy<SpeakerDialog> speaker_config_window;
684         WM::Proxy<AddRouteDialog> add_route_dialog;
685         WM::Proxy<About> about;
686         WM::Proxy<LocationUIWindow> location_ui;
687         WM::Proxy<RouteParams_UI> route_params;
688         WM::Proxy<EngineControl> audio_midi_setup;
689         WM::Proxy<ExportVideoDialog> export_video_dialog;
690         WM::Proxy<LuaScriptManager> lua_script_window;
691         WM::Proxy<IdleOMeter> idleometer;
692         WM::Proxy<PluginDSPLoadWindow> plugin_dsp_load_window;
693         WM::Proxy<TransportMastersWindow> transport_masters_window;
694
695         /* Windows/Dialogs that require a creator method */
696
697         WM::ProxyWithConstructor<SessionOptionEditor> session_option_editor;
698         WM::ProxyWithConstructor<AddVideoDialog> add_video_dialog;
699         WM::ProxyWithConstructor<BundleManager> bundle_manager;
700         WM::ProxyWithConstructor<BigClockWindow> big_clock_window;
701         WM::ProxyWithConstructor<BigTransportWindow> big_transport_window;
702         WM::ProxyWithConstructor<GlobalPortMatrixWindow> audio_port_matrix;
703         WM::ProxyWithConstructor<GlobalPortMatrixWindow> midi_port_matrix;
704         WM::ProxyWithConstructor<KeyEditor> key_editor;
705
706         /* creator methods */
707
708         SessionOptionEditor*    create_session_option_editor ();
709         BundleManager*          create_bundle_manager ();
710         AddVideoDialog*         create_add_video_dialog ();
711         BigClockWindow*         create_big_clock_window();
712         BigTransportWindow*     create_big_transport_window();
713         GlobalPortMatrixWindow* create_global_port_matrix (ARDOUR::DataType);
714         KeyEditor*              create_key_editor ();
715
716         ARDOUR::SystemExec *video_server_process;
717
718         void handle_locations_change (ARDOUR::Location*);
719
720         /* Keyboard Handling */
721
722         ArdourKeyboard* keyboard;
723
724         /* Keymap handling */
725
726         void install_actions ();
727
728         void toggle_record_enable (uint16_t);
729
730         uint32_t rec_enabled_streams;
731         void count_recenabled_streams (ARDOUR::Route&);
732
733         Splash* splash;
734
735         void pop_back_splash (Gtk::Window&);
736
737         /* cleanup */
738
739         Gtk::MenuItem *cleanup_item;
740
741         void display_cleanup_results (ARDOUR::CleanupReport& rep, const gchar* list_title, const bool msg_delete);
742         void cleanup ();
743         void cleanup_peakfiles ();
744         void flush_trash ();
745
746         bool have_configure_timeout;
747         ARDOUR::microseconds_t last_configure_time;
748         gint configure_timeout ();
749
750         ARDOUR::microseconds_t last_peak_grab;
751         ARDOUR::microseconds_t last_shuttle_request;
752
753         bool have_disk_speed_dialog_displayed;
754         void disk_speed_dialog_gone (int ignored_response, Gtk::MessageDialog*);
755         void disk_overrun_handler ();
756         void disk_underrun_handler ();
757         void gui_idle_handler ();
758
759         void cancel_plugin_scan ();
760         void cancel_plugin_timeout ();
761         void plugin_scan_dialog (std::string type, std::string plugin, bool);
762         void plugin_scan_timeout (int);
763
764         void session_format_mismatch (std::string, std::string);
765
766         void session_dialog (std::string);
767         int pending_state_dialog ();
768         int sr_mismatch_dialog (ARDOUR::samplecnt_t, ARDOUR::samplecnt_t);
769         void sr_mismatch_message (ARDOUR::samplecnt_t, ARDOUR::samplecnt_t);
770
771         Gtk::MenuItem* jack_disconnect_item;
772         Gtk::MenuItem* jack_reconnect_item;
773         Gtk::Menu*     jack_bufsize_menu;
774
775         Glib::RefPtr<Gtk::ActionGroup> common_actions;
776
777         void editor_realized ();
778
779         std::vector<std::string> positional_sync_strings;
780
781         void toggle_use_mmc ();
782         void toggle_send_mmc ();
783         void toggle_send_mtc ();
784         void toggle_send_midi_clock ();
785
786         void toggle_use_osc ();
787
788         void parameter_changed (std::string);
789         void session_parameter_changed (std::string);
790
791         bool first_idle ();
792
793         void check_memory_locking ();
794
795         void audioengine_setup ();
796
797         void display_message (const char* prefix, gint prefix_len, Glib::RefPtr<Gtk::TextBuffer::Tag>, Glib::RefPtr<Gtk::TextBuffer::Tag>, const char* msg);
798         Gtk::Label status_bar_label;
799         bool status_bar_button_press (GdkEventButton*);
800
801         void loading_message (const std::string& msg);
802
803         PBD::ScopedConnectionList forever_connections;
804         PBD::ScopedConnection halt_connection;
805         PBD::ScopedConnection editor_meter_connection;
806
807         /* these are used only in response to a platform-specific "ShouldQuit" signal */
808         bool idle_finish ();
809         void queue_finish ();
810         void fontconfig_dialog ();
811
812         int missing_file (ARDOUR::Session*s, std::string str, ARDOUR::DataType type);
813         int ambiguous_file (std::string file, std::vector<std::string> hits);
814
815         bool click_button_clicked (GdkEventButton *);
816         bool sync_button_clicked (GdkEventButton *);
817
818         VisibilityGroup _status_bar_visibility;
819
820         /** A ProcessThread so that we have some thread-local buffers for use by
821          *  PluginEqGui::impulse_analysis ().
822          */
823         ARDOUR::ProcessThread* _process_thread;
824
825         void feedback_detected ();
826
827         ArdourWidgets::ArdourButton             midi_panic_button;
828         void                     midi_panic ();
829
830         void successful_graph_sort ();
831         bool _feedback_exists;
832
833         enum ArdourLogLevel {
834                 LogLevelNone = 0,
835                 LogLevelInfo,
836                 LogLevelWarning,
837                 LogLevelError
838         };
839
840         ArdourLogLevel _log_not_acknowledged;
841
842         void resize_text_widgets ();
843
844         bool xrun_button_release (GdkEventButton* ev);
845
846         std::string _announce_string;
847         void check_announcements ();
848
849         int do_audio_midi_setup (uint32_t);
850         void audioengine_became_silent ();
851
852         DuplicateRouteDialog* duplicate_routes_dialog;
853
854         void grab_focus_after_dialog ();
855
856         void tabs_switch (GtkNotebookPage*, guint page_number);
857         void tabs_page_added (Gtk::Widget*, guint);
858         void tabs_page_removed (Gtk::Widget*, guint);
859         ArdourWidgets::ArdourButton editor_visibility_button;
860         ArdourWidgets::ArdourButton mixer_visibility_button;
861         ArdourWidgets::ArdourButton prefs_visibility_button;
862
863         bool key_press_focus_accelerator_handler (Gtk::Window& window, GdkEventKey* ev, Gtkmm2ext::Bindings*);
864         bool try_gtk_accel_binding (GtkWindow* win, GdkEventKey* ev, bool translate, GdkModifierType modifier);
865
866         bool main_window_delete_event (GdkEventAny*);
867         bool idle_ask_about_quit ();
868
869         void load_bindings ();
870         bool tabbable_visibility_button_press (GdkEventButton* ev, std::string const& tabbable_name);
871
872         void step_up_through_tabs ();
873         void step_down_through_tabs ();
874
875         void escape ();
876         void close_current_dialog ();
877         void pre_release_dialog ();
878
879         bool bind_lua_action_script (GdkEventButton*, int);
880         void update_action_script_btn (int i, const std::string&);
881 };
882
883 #endif /* __ardour_gui_h__ */