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/button.h>
51 #include <gtkmm/togglebutton.h>
52 #include <gtkmm/treeview.h>
53 #include <gtkmm/menubar.h>
54 #include <gtkmm/textbuffer.h>
55 #include <gtkmm/adjustment.h>
57 #include "gtkmm2ext/gtk_ui.h"
58 #include "gtkmm2ext/click_box.h"
59 #include "gtkmm2ext/stateful_button.h"
60 #include "gtkmm2ext/bindable_button.h"
61 #include "gtkmm2ext/bindings.h"
62 #include "gtkmm2ext/visibility_tracker.h"
64 #include "ardour/ardour.h"
65 #include "ardour/types.h"
66 #include "ardour/utils.h"
67 #include "ardour/plugin.h"
68 #include "ardour/session_handle.h"
69 #include "ardour/system_exec.h"
71 #include "video_timeline.h"
73 #include "widgets/ardour_button.h"
74 #include "widgets/ardour_spacer.h"
76 #include "add_route_dialog.h"
77 #include "ardour_dialog.h"
78 #include "ardour_window.h"
81 #include "mini_timeline.h"
82 #include "shuttle_control.h"
83 #include "visibility_group.h"
84 #include "window_manager.h"
88 #include "add_video_dialog.h"
89 #include "big_clock_window.h"
90 #include "bundle_manager.h"
91 #include "engine_dialog.h"
92 #include "export_video_dialog.h"
93 #include "global_port_matrix.h"
94 #include "idleometer.h"
95 #include "keyeditor.h"
96 #include "location_ui.h"
97 #include "lua_script_manager.h"
98 #include "rc_option_editor.h"
99 #include "route_dialogs.h"
100 #include "route_params_ui.h"
101 #include "session_option_editor.h"
102 #include "speaker_dialog.h"
105 class AddRouteDialog;
106 class AddVideoDialog;
107 class BigClockWindow;
110 class ExportVideoDialog;
112 class LocationUIWindow;
113 class LuaScriptManager;
114 class RCOptionEditor;
115 class RouteParams_UI;
116 class SessionOptionEditor;
118 class GlobalPortMatrixWindow;
123 class ArdourKeyboard;
125 class ConnectionEditor;
126 class DuplicateRouteDialog;
129 class ArdourPrompter;
133 class SessionOptionEditorWindow;
140 class LevelMeterHBox;
141 class GUIObjectState;
144 class ControlProtocolInfo;
157 namespace Gtkmm2ext {
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_vca (std::string const &, uint32_t);
288 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);
289 void session_add_audio_track (
291 int32_t output_channels,
292 ARDOUR::TrackMode mode,
293 ARDOUR::RouteGroup* route_group,
295 std::string const & name_template,
297 ARDOUR::PresentationInfo::order_t order
299 session_add_audio_route (true, input_channels, output_channels, mode, route_group, how_many, name_template, strict_io, order);
302 void session_add_audio_bus (
304 int32_t output_channels,
305 ARDOUR::RouteGroup* route_group,
307 std::string const & name_template,
309 ARDOUR::PresentationInfo::order_t order
311 session_add_audio_route (false, input_channels, output_channels, ARDOUR::Normal, route_group, how_many, name_template, strict_io, order);
314 void session_add_midi_track (
315 ARDOUR::RouteGroup* route_group,
317 std::string const & name_template,
319 ARDOUR::PluginInfoPtr instrument,
320 ARDOUR::Plugin::PresetRecord* preset,
321 ARDOUR::PresentationInfo::order_t order
323 session_add_midi_route (true, route_group, how_many, name_template, strict_io, instrument, preset, order);
326 void session_add_mixed_track (const ARDOUR::ChanCount&, const ARDOUR::ChanCount&, ARDOUR::RouteGroup*, uint32_t, std::string const &, bool,
327 ARDOUR::PluginInfoPtr, ARDOUR::Plugin::PresetRecord* pset,
328 ARDOUR::PresentationInfo::order_t order);
329 void session_add_midi_bus (ARDOUR::RouteGroup*, uint32_t, std::string const &, bool, ARDOUR::PluginInfoPtr, ARDOUR::Plugin::PresetRecord* pset,
330 ARDOUR::PresentationInfo::order_t order);
331 void session_add_midi_route (bool, ARDOUR::RouteGroup *, uint32_t, std::string const &, bool,
332 ARDOUR::PluginInfoPtr, ARDOUR::Plugin::PresetRecord*,
333 ARDOUR::PresentationInfo::order_t order);
334 void display_insufficient_ports_message ();
336 void attach_to_engine ();
339 gint exit_on_main_window_close (GdkEventAny *);
341 void maximise_editing_space ();
342 void restore_editing_space ();
344 void show_ui_prefs ();
346 bool check_audioengine(Gtk::Window&);
348 void setup_profile ();
349 void setup_tooltips ();
351 void set_shuttle_fract (double);
353 void get_process_buffers ();
354 void drop_process_buffers ();
356 void reset_peak_display ();
357 void reset_route_peak_display (ARDOUR::Route*);
358 void reset_group_peak_display (ARDOUR::RouteGroup*);
360 const std::string& announce_string() const { return _announce_string; }
362 void hide_application ();
364 Gtk::Notebook& tabs();
365 Gtk::Window& main_window () { return _main_window; }
367 void setup_toplevel_window (Gtk::Window&, const std::string& name, void* owner);
369 /* called from a static C function */
371 GtkNotebook* tab_window_root_drop (GtkNotebook* src,
377 bool tabbed_window_state_event_handler (GdkEventWindowState*, void* object);
378 bool key_event_handler (GdkEventKey*, Gtk::Window* window);
380 Gtkmm2ext::ActionMap global_actions;
382 ARDOUR::PresentationInfo::order_t translate_order (RouteDialogs::InsertAt);
385 friend class PublicEditor;
387 void toggle_auto_play ();
388 void toggle_auto_input ();
389 void toggle_punch ();
390 void unset_dual_punch ();
391 bool ignore_dual_punch;
392 void toggle_punch_in ();
393 void toggle_punch_out ();
394 void toggle_session_monitoring_in ();
395 void toggle_session_monitoring_disk ();
396 void show_loop_punch_ruler_and_disallow_hide ();
397 void reenable_hide_loop_punch_ruler_if_appropriate ();
398 void toggle_auto_return ();
399 void toggle_click ();
400 void toggle_audio_midi_setup ();
401 void toggle_session_auto_loop ();
402 void toggle_rc_options_window ();
403 void toggle_session_options_window ();
406 Gtk::Window _main_window;
407 Gtkmm2ext::VisibilityTracker* main_window_visibility;
408 Gtk::VBox main_vpacker;
409 Gtk::HBox status_bar_hpacker;
411 PublicEditor* editor;
413 Gtk::Tooltips _tooltips;
417 bool _initial_verbose_plugin_scan;
418 bool first_time_engine_run;
420 void show_tabbable (Gtkmm2ext::Tabbable*);
421 void hide_tabbable (Gtkmm2ext::Tabbable*);
422 void detach_tabbable (Gtkmm2ext::Tabbable*);
423 void attach_tabbable (Gtkmm2ext::Tabbable*);
424 void button_change_tabbable_visibility (Gtkmm2ext::Tabbable*);
425 void key_change_tabbable_visibility (Gtkmm2ext::Tabbable*);
426 void toggle_editor_and_mixer ();
428 void tabbable_state_change (Gtkmm2ext::Tabbable&);
430 void toggle_meterbridge ();
431 void toggle_luawindow ();
433 int setup_windows ();
434 void setup_transport ();
437 static ARDOUR_UI *theArdourUI;
438 SessionDialog *_session_dialog;
442 int ask_about_saving_session (const std::vector<std::string>& actions);
444 void save_session_at_its_request (std::string);
445 /* periodic safety backup, to be precise */
446 gint autosave_session();
447 void update_autosave();
448 sigc::connection _autosave_connection;
450 void session_dirty_changed ();
451 void update_title ();
453 void map_transport_state ();
454 int32_t do_engine_start ();
456 void engine_halted (const char* reason, bool free_reason);
457 void engine_stopped ();
458 void engine_running ();
462 void about_signal_response(int response);
464 Gtk::VBox top_packer;
466 sigc::connection clock_signal_connection;
467 void update_clocks ();
468 void start_clocking ();
469 void stop_clocking ();
471 void update_transport_clocks (framepos_t pos);
472 void record_state_changed ();
474 std::list<MidiTracer*> _midi_tracer_windows;
476 /* Transport Control */
478 Gtk::Table transport_table;
479 Gtk::Frame transport_frame;
480 Gtk::HBox transport_hbox;
482 ArdourWidgets::ArdourVSpacer* secondary_clock_spacer;
483 void repack_transport_hbox ();
484 void update_clock_visibility ();
486 struct TransportControllable : public PBD::Controllable {
497 TransportControllable (std::string name, ARDOUR_UI&, ToggleType);
498 void set_value (double, PBD::Controllable::GroupControlDisposition group_override);
499 double get_value (void) const;
505 boost::shared_ptr<TransportControllable> roll_controllable;
506 boost::shared_ptr<TransportControllable> stop_controllable;
507 boost::shared_ptr<TransportControllable> goto_start_controllable;
508 boost::shared_ptr<TransportControllable> goto_end_controllable;
509 boost::shared_ptr<TransportControllable> auto_loop_controllable;
510 boost::shared_ptr<TransportControllable> play_selection_controllable;
511 boost::shared_ptr<TransportControllable> rec_controllable;
513 void toggle_follow_edits ();
515 void set_transport_controllable_state (const XMLNode&);
516 XMLNode& get_transport_controllable_state ();
518 ArdourWidgets::ArdourButton roll_button;
519 ArdourWidgets::ArdourButton stop_button;
520 ArdourWidgets::ArdourButton goto_start_button;
521 ArdourWidgets::ArdourButton goto_end_button;
522 ArdourWidgets::ArdourButton auto_loop_button;
523 ArdourWidgets::ArdourButton play_selection_button;
524 ArdourWidgets::ArdourButton rec_button;
525 ArdourWidgets::ArdourButton punch_in_button;
526 ArdourWidgets::ArdourButton punch_out_button;
527 ArdourWidgets::ArdourButton layered_button;
529 ArdourWidgets::ArdourVSpacer recpunch_spacer;
530 ArdourWidgets::ArdourVSpacer monitoring_spacer;
532 ArdourWidgets::ArdourButton monitor_in_button;
533 ArdourWidgets::ArdourButton monitor_disk_button;
534 ArdourWidgets::ArdourButton auto_input_button;
536 Gtk::Label punch_label;
537 Gtk::Label layered_label;
539 Gtk::Label punch_space;
540 Gtk::Label mon_space;
542 void toggle_external_sync ();
543 void toggle_time_master ();
544 void toggle_video_sync ();
546 ShuttleControl shuttle_box;
547 MiniTimeline mini_timeline;
548 TimeInfoBox *time_info_box;
550 ArdourWidgets::ArdourButton auto_return_button;
551 ArdourWidgets::ArdourButton follow_edits_button;
552 ArdourWidgets::ArdourButton click_button;
553 ArdourWidgets::ArdourButton sync_button;
555 ArdourWidgets::ArdourButton auditioning_alert_button;
556 ArdourWidgets::ArdourButton solo_alert_button;
557 ArdourWidgets::ArdourButton feedback_alert_button;
558 ArdourWidgets::ArdourButton error_alert_button;
560 ArdourWidgets::ArdourButton action_script_call_btn[10];
561 Gtk::Table action_script_table;
565 ArdourWidgets::ArdourButton editor_meter_peak_display;
566 LevelMeterHBox * editor_meter;
567 float editor_meter_max_peak;
568 bool editor_meter_peak_button_release (GdkEventButton*);
570 bool editor_meter_button_press (GdkEventButton* ev);
571 void popup_editor_meter_menu (GdkEventButton* ev);
572 void add_editor_meter_type_item (Gtk::Menu_Helpers::MenuList&, Gtk::RadioMenuItem::Group&, std::string const &, ARDOUR::MeterType);
573 bool _suspend_editor_meter_callbacks;
575 void blink_handler (bool);
576 sigc::connection blink_connection;
579 void solo_blink (bool);
580 void sync_blink (bool);
581 void audition_blink (bool);
582 void feedback_blink (bool);
583 void error_blink (bool);
585 void set_flat_buttons();
587 void soloing_changed (bool);
588 void auditioning_changed (bool);
589 void _auditioning_changed (bool);
591 bool solo_alert_press (GdkEventButton* ev);
592 void audition_alert_clicked ();
593 bool error_alert_press (GdkEventButton *);
595 void layered_button_clicked ();
597 void big_clock_value_changed ();
598 void primary_clock_value_changed ();
599 void secondary_clock_value_changed ();
601 /* called by Blink signal */
603 void transport_rec_enable_blink (bool onoff);
605 Gtk::Menu* session_popup_menu;
607 /* menu bar and associated stuff */
609 Gtk::MenuBar* menu_bar;
610 Gtk::EventBox menu_bar_base;
613 void use_menubar_as_top_menubar ();
614 void build_menu_bar ();
616 Gtk::Label wall_clock_label;
617 gint update_wall_clock ();
619 Gtk::Label disk_space_label;
620 void update_disk_space ();
622 Gtk::Label timecode_format_label;
623 void update_timecode_format ();
625 Gtk::Label cpu_load_label;
626 void update_cpu_load ();
628 Gtk::Label xrun_label;
629 void update_xrun_count ();
631 Gtk::Label peak_thread_work_label;
632 void update_peak_thread_work ();
634 Gtk::Label buffer_load_label;
635 void update_buffer_load ();
637 Gtk::Label sample_rate_label;
638 void update_sample_rate (ARDOUR::framecnt_t);
640 Gtk::Label format_label;
641 void update_format ();
643 void every_second ();
644 void every_point_one_seconds ();
645 void every_point_zero_something_seconds ();
647 sigc::connection second_connection;
648 sigc::connection point_one_second_connection;
649 sigc::connection point_zero_something_second_connection;
650 sigc::connection fps_connection;
652 void set_fps_timeout_connection ();
654 void open_session ();
655 void open_recent_session ();
656 bool process_save_template_prompter (ArdourPrompter& prompter);
657 void save_template ();
658 void manage_templates ();
660 void edit_metadata ();
661 void import_metadata ();
663 void set_loop_sensitivity ();
664 void set_transport_sensitivity (bool);
666 //stuff for ProTools-style numpad
667 void transport_numpad_event (int num);
668 void transport_numpad_decimal ();
669 bool _numpad_locate_happening;
670 int _pending_locate_num;
671 gint transport_numpad_timeout ();
672 sigc::connection _numpad_timeout_connection;
674 void transport_goto_nth_marker (int nth);
675 void transport_goto_zero ();
676 void transport_goto_start ();
677 void transport_goto_end ();
678 void transport_goto_wallclock ();
679 void transport_stop ();
680 void transport_record (bool roll);
681 void transport_roll ();
682 void transport_play_selection();
683 void transport_play_preroll();
684 void transport_rec_preroll();
685 void transport_rec_count_in();
686 void transport_forward (int option);
687 void transport_rewind (int option);
688 void transport_loop ();
689 void toggle_roll (bool with_abort, bool roll_out_of_bounded_mode);
690 bool trx_record_enable_all_tracks ();
692 bool _session_is_new;
693 void set_session (ARDOUR::Session *);
694 void connect_dependents_to_session (ARDOUR::Session *);
695 void we_have_dependents ();
697 void setup_session_options ();
699 guint32 last_key_press_time;
701 bool process_snapshot_session_prompter (ArdourPrompter& prompter, bool switch_to_it);
702 void snapshot_session (bool switch_to_it);
704 void quick_snapshot_session (bool switch_to_it); //does not promtp for name, just makes a timestamped file
706 SaveAsDialog* save_as_dialog;
708 bool save_as_progress_update (float fraction, int64_t cnt, int64_t total, Gtk::Label* label, Gtk::ProgressBar* bar);
709 void save_session_as ();
710 void archive_session ();
711 void rename_session ();
714 int create_editor ();
715 int create_meterbridge ();
716 int create_luawindow ();
717 int create_masters ();
719 Meterbridge *meterbridge;
720 LuaWindow *luawindow;
722 /* Dialogs that can be created via new<T> */
724 RCOptionEditor* rc_option_editor;
725 Gtk::HBox rc_option_editor_placeholder;
727 WM::Proxy<SpeakerDialog> speaker_config_window;
728 WM::Proxy<AddRouteDialog> add_route_dialog;
729 WM::Proxy<About> about;
730 WM::Proxy<LocationUIWindow> location_ui;
731 WM::Proxy<RouteParams_UI> route_params;
732 WM::Proxy<EngineControl> audio_midi_setup;
733 WM::Proxy<ExportVideoDialog> export_video_dialog;
734 WM::Proxy<LuaScriptManager> lua_script_window;
735 WM::Proxy<IdleOMeter> idleometer;
737 /* Windows/Dialogs that require a creator method */
739 WM::ProxyWithConstructor<SessionOptionEditor> session_option_editor;
740 WM::ProxyWithConstructor<AddVideoDialog> add_video_dialog;
741 WM::ProxyWithConstructor<BundleManager> bundle_manager;
742 WM::ProxyWithConstructor<BigClockWindow> big_clock_window;
743 WM::ProxyWithConstructor<GlobalPortMatrixWindow> audio_port_matrix;
744 WM::ProxyWithConstructor<GlobalPortMatrixWindow> midi_port_matrix;
745 WM::ProxyWithConstructor<KeyEditor> key_editor;
747 /* creator methods */
749 SessionOptionEditor* create_session_option_editor ();
750 BundleManager* create_bundle_manager ();
751 AddVideoDialog* create_add_video_dialog ();
752 BigClockWindow* create_big_clock_window();
753 GlobalPortMatrixWindow* create_global_port_matrix (ARDOUR::DataType);
754 KeyEditor* create_key_editor ();
756 ARDOUR::SystemExec *video_server_process;
758 void handle_locations_change (ARDOUR::Location*);
760 /* Keyboard Handling */
762 ArdourKeyboard* keyboard;
764 /* Keymap handling */
766 void install_actions ();
768 void toggle_record_enable (uint16_t);
770 uint32_t rec_enabled_streams;
771 void count_recenabled_streams (ARDOUR::Route&);
775 void pop_back_splash (Gtk::Window&);
779 Gtk::MenuItem *cleanup_item;
781 void display_cleanup_results (ARDOUR::CleanupReport& rep, const gchar* list_title, const bool msg_delete);
783 void cleanup_peakfiles ();
786 bool have_configure_timeout;
787 ARDOUR::microseconds_t last_configure_time;
788 gint configure_timeout ();
790 ARDOUR::microseconds_t last_peak_grab;
791 ARDOUR::microseconds_t last_shuttle_request;
793 bool have_disk_speed_dialog_displayed;
794 void disk_speed_dialog_gone (int ignored_response, Gtk::MessageDialog*);
795 void disk_overrun_handler ();
796 void disk_underrun_handler ();
797 void gui_idle_handler ();
799 void cancel_plugin_scan ();
800 void cancel_plugin_timeout ();
801 void plugin_scan_dialog (std::string type, std::string plugin, bool);
802 void plugin_scan_timeout (int);
804 void session_format_mismatch (std::string, std::string);
806 void session_dialog (std::string);
807 int pending_state_dialog ();
808 int sr_mismatch_dialog (ARDOUR::framecnt_t, ARDOUR::framecnt_t);
809 void sr_mismatch_message (ARDOUR::framecnt_t, ARDOUR::framecnt_t);
811 Gtk::MenuItem* jack_disconnect_item;
812 Gtk::MenuItem* jack_reconnect_item;
813 Gtk::Menu* jack_bufsize_menu;
815 Glib::RefPtr<Gtk::ActionGroup> common_actions;
817 void editor_realized ();
819 std::vector<std::string> positional_sync_strings;
821 void toggle_use_mmc ();
822 void toggle_send_mmc ();
823 void toggle_send_mtc ();
824 void toggle_send_midi_clock ();
826 void toggle_use_osc ();
828 void parameter_changed (std::string);
829 void session_parameter_changed (std::string);
833 void check_memory_locking ();
835 void audioengine_setup ();
837 void display_message (const char *prefix, gint prefix_len,
838 Glib::RefPtr<Gtk::TextBuffer::Tag> ptag, Glib::RefPtr<Gtk::TextBuffer::Tag> mtag,
840 Gtk::Label status_bar_label;
841 bool status_bar_button_press (GdkEventButton*);
843 void loading_message (const std::string& msg);
845 PBD::ScopedConnectionList forever_connections;
846 PBD::ScopedConnection halt_connection;
847 PBD::ScopedConnection editor_meter_connection;
849 void step_edit_status_change (bool);
851 /* these are used only in response to a platform-specific "ShouldQuit" signal */
853 void queue_finish ();
854 void fontconfig_dialog ();
856 int missing_file (ARDOUR::Session*s, std::string str, ARDOUR::DataType type);
857 int ambiguous_file (std::string file, std::vector<std::string> hits);
859 bool click_button_clicked (GdkEventButton *);
860 bool click_button_scroll (GdkEventScroll *);
861 bool sync_button_clicked (GdkEventButton *);
863 VisibilityGroup _status_bar_visibility;
865 /** A ProcessThread so that we have some thread-local buffers for use by
866 * PluginEqGui::impulse_analysis ().
868 ARDOUR::ProcessThread* _process_thread;
870 void feedback_detected ();
872 ArdourWidgets::ArdourButton midi_panic_button;
875 void successful_graph_sort ();
876 bool _feedback_exists;
878 enum ArdourLogLevel {
885 ArdourLogLevel _log_not_acknowledged;
887 void resize_text_widgets ();
889 bool xrun_button_release (GdkEventButton* ev);
891 std::string _announce_string;
892 void check_announcements ();
894 int do_audio_midi_setup (uint32_t);
895 void audioengine_became_silent ();
897 DuplicateRouteDialog* duplicate_routes_dialog;
899 void grab_focus_after_dialog ();
901 void tabs_switch (GtkNotebookPage*, guint page_number);
902 void tabs_page_added (Gtk::Widget*, guint);
903 void tabs_page_removed (Gtk::Widget*, guint);
904 ArdourWidgets::ArdourButton editor_visibility_button;
905 ArdourWidgets::ArdourButton mixer_visibility_button;
906 ArdourWidgets::ArdourButton prefs_visibility_button;
908 bool key_press_focus_accelerator_handler (Gtk::Window& window, GdkEventKey* ev, Gtkmm2ext::Bindings*);
909 bool try_gtk_accel_binding (GtkWindow* win, GdkEventKey* ev, bool translate, GdkModifierType modifier);
911 bool main_window_delete_event (GdkEventAny*);
912 bool idle_ask_about_quit ();
914 void load_bindings ();
915 bool tabbable_visibility_button_press (GdkEventButton* ev, std::string const& tabbable_name);
917 void step_up_through_tabs ();
918 void step_down_through_tabs ();
921 void close_current_dialog ();
922 void pre_release_dialog ();
924 bool bind_lua_action_script (GdkEventButton*, int);
925 void update_action_script_btn (int i, const std::string&);
928 #endif /* __ardour_gui_h__ */