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