X-Git-Url: https://main.carlh.net/gitweb/?a=blobdiff_plain;f=gtk2_ardour%2Fardour_ui.h;h=d08dd9aeef71da04e164823573a69abd71aa08ac;hb=5a047fcd153b1df80f693b5a1749069c3a472659;hp=5aa08797fb710694832642aa5be1fdb21bb57884;hpb=ba0ae4818a887f39d5feac7446b09055b93fc08f;p=ardour.git diff --git a/gtk2_ardour/ardour_ui.h b/gtk2_ardour/ardour_ui.h index 5aa08797fb..d08dd9aeef 100644 --- a/gtk2_ardour/ardour_ui.h +++ b/gtk2_ardour/ardour_ui.h @@ -38,7 +38,6 @@ #include "pbd/xml++.h" #include "pbd/controllable.h" -#include "pbd/system_exec.h" #include #include #include @@ -64,25 +63,26 @@ #include "ardour/utils.h" #include "ardour/plugin.h" #include "ardour/session_handle.h" +#include "ardour/system_exec.h" #include "video_timeline.h" -#include "about.h" +#include "add_route_dialog.h" #include "ardour_button.h" #include "ardour_dialog.h" #include "ardour_window.h" #include "editing.h" -#include "engine_dialog.h" -#include "meterbridge.h" -#include "ui_config.h" #include "enums.h" #include "visibility_group.h" #include "window_manager.h" -#include "add_route_dialog.h" +#ifdef COMPILER_MSVC +#include "about.h" #include "add_video_dialog.h" #include "big_clock_window.h" #include "bundle_manager.h" +#include "engine_dialog.h" +#include "export_video_dialog.h" #include "global_port_matrix.h" #include "keyeditor.h" #include "location_ui.h" @@ -90,32 +90,45 @@ #include "route_params_ui.h" #include "session_option_editor.h" #include "speaker_dialog.h" -#include "theme_manager.h" +#else +class About; +class AddRouteDialog; +class AddVideoDialog; +class BigClockWindow; +class BundleManager; +class EngineControl; +class ExportVideoDialog; +class KeyEditor; +class LocationUIWindow; +class RCOptionEditor; +class RouteParams_UI; +class SessionOptionEditor; +class SpeakerDialog; +class GlobalPortMatrixWindow; +#endif class VideoTimeLine; class ArdourKeyboard; class AudioClock; class ButtonJoiner; class ConnectionEditor; +class DuplicateRouteDialog; class MainClock; class Mixer_UI; +class ArdourPrompter; class PublicEditor; -class RCOptionEditor; -class RouteParams_UI; +class SaveAsDialog; class SessionDialog; class SessionOptionEditor; class ShuttleControl; class Splash; class TimeInfoBox; +class Meterbridge; class MidiTracer; class NSM_Client; class LevelMeterHBox; class GUIObjectState; -namespace Gtkmm2ext { - class TearOff; -} - namespace ARDOUR { class ControlProtocolInfo; class IO; @@ -126,10 +139,18 @@ namespace ARDOUR { class ProcessThread; } +namespace Gtkmm2ext { + class TearOff; +} + +namespace Gtk { + class ProgressBar; +} + class ARDOUR_UI : public Gtkmm2ext::UI, public ARDOUR::SessionHandlePtr { - public: - ARDOUR_UI (int *argcp, char **argvp[], const char* localedir); + public: + ARDOUR_UI (int *argcp, char **argvp[], const char* localedir); ~ARDOUR_UI(); bool run_startup (bool should_be_new, std::string load_template); @@ -140,10 +161,17 @@ class ARDOUR_UI : public Gtkmm2ext::UI, public ARDOUR::SessionHandlePtr void launch_chat (); void launch_manual (); void launch_reference (); + void launch_tracker (); + void launch_subscribe (); + void launch_cheat_sheet (); + void launch_website (); + void launch_website_dev (); + void launch_forums (); + void launch_howto_report (); void show_about (); void hide_about (); - void idle_load (const std::string& path); + void load_from_application_api (const std::string& path); void finish(); int load_session (const std::string& path, const std::string& snapshot, std::string mix_template = std::string()); @@ -154,7 +182,7 @@ class ARDOUR_UI : public Gtkmm2ext::UI, public ARDOUR::SessionHandlePtr ARDOUR::Session* the_session() { return _session; } bool get_smart_mode () const; - + int get_session_parameters (bool quit_on_cancel, bool should_be_new = false, std::string load_template = ""); int build_session_from_dialog (SessionDialog&, const std::string& session_name, const std::string& session_path); bool ask_about_loading_existing_session (const std::string& session_path); @@ -167,27 +195,18 @@ class ARDOUR_UI : public Gtkmm2ext::UI, public ARDOUR::SessionHandlePtr void save_state (const std::string & state_name = "", bool switch_to_it = false); static ARDOUR_UI *instance () { return theArdourUI; } - static UIConfiguration *config () { return ui_config; } - PublicEditor& the_editor(){return *editor;} + PublicEditor& the_editor() { return *editor;} Mixer_UI* the_mixer() { return mixer; } void new_midi_tracer_window (); void toggle_editing_space(); + void toggle_mixer_space(); + void toggle_mixer_list(); + void toggle_monitor_section_visibility (); void toggle_keep_tearoffs(); - Gtk::Tooltips& tooltips() { return _tooltips; } - - Gtk::HBox& editor_transport_box() { return _editor_transport_box; } - static PublicEditor* _instance; - static sigc::signal Blink; - - /** point_zero_one_seconds -- 10Hz ^= 100ms */ - static sigc::signal RapidScreenUpdate; - - /** point_zero_something_seconds -- currently 25Hz ^= 40ms */ - static sigc::signal SuperRapidScreenUpdate; /** Emitted frequently with the audible frame, false, and the edit point as * parameters respectively. @@ -232,12 +251,15 @@ class ARDOUR_UI : public Gtkmm2ext::UI, public ARDOUR::SessionHandlePtr void add_routes_part_two (); void add_routes_thread (); + void start_duplicate_routes (); + void add_video (Gtk::Window* float_window); void remove_video (); void start_video_server_menu (Gtk::Window* float_window); bool start_video_server (Gtk::Window* float_window, bool popup_msg); void stop_video_server (bool ask_confirm=false); void flush_videotimeline_cache (bool localcacheonly=false); + void export_video (bool range = false); void session_add_audio_track ( int input_channels, @@ -276,6 +298,10 @@ class ARDOUR_UI : public Gtkmm2ext::UI, public ARDOUR::SessionHandlePtr void maximise_editing_space (); void restore_editing_space (); + void show_ui_prefs (); + + bool check_audioengine(Gtk::Window&); + void update_tearoff_visibility (); void setup_profile (); @@ -292,8 +318,7 @@ class ARDOUR_UI : public Gtkmm2ext::UI, public ARDOUR::SessionHandlePtr const std::string& announce_string() const { return _announce_string; } - int disconnect_from_engine (); - int reconnect_to_engine (); + void hide_application (); protected: friend class PublicEditor; @@ -315,10 +340,12 @@ class ARDOUR_UI : public Gtkmm2ext::UI, public ARDOUR::SessionHandlePtr void toggle_session_options_window (); private: - Gtk::Tooltips _tooltips; - NSM_Client *nsm; + PublicEditor* editor; + Mixer_UI* mixer; + NSM_Client* nsm; bool _was_dirty; bool _mixer_on_top; + bool _initial_verbose_plugin_scan; bool first_time_engine_run; void goto_editor_window (); @@ -332,11 +359,13 @@ class ARDOUR_UI : public Gtkmm2ext::UI, public ARDOUR::SessionHandlePtr void setup_clock (); static ARDOUR_UI *theArdourUI; + SessionDialog *_session_dialog; int starting (); int ask_about_saving_session (const std::vector& actions); + void save_session_at_its_request (std::string); /* periodic safety backup, to be precise */ gint autosave_session(); void update_autosave(); @@ -351,13 +380,6 @@ class ARDOUR_UI : public Gtkmm2ext::UI, public ARDOUR::SessionHandlePtr void use_config (); - static gint _blink (void *); - void blink (); - gint blink_timeout_tag; - bool blink_on; - void start_blinking (); - void stop_blinking (); - void about_signal_response(int response); Gtk::VBox top_packer; @@ -374,15 +396,15 @@ class ARDOUR_UI : public Gtkmm2ext::UI, public ARDOUR::SessionHandlePtr std::list _midi_tracer_windows; - /* Transport Control */ - void detach_tearoff (Gtk::Box* parent, Gtk::Widget* contents); void reattach_tearoff (Gtk::Box* parent, Gtk::Widget* contents, int32_t order); + void reattach_all_tearoffs (); + + /* Transport Control */ Gtkmm2ext::TearOff* transport_tearoff; Gtk::Frame transport_frame; Gtk::HBox transport_tearoff_hbox; - Gtk::HBox _editor_transport_box; Gtk::HBox transport_hbox; Gtk::Fixed transport_base; Gtk::Fixed transport_button_base; @@ -408,7 +430,7 @@ class ARDOUR_UI : public Gtkmm2ext::UI, public ARDOUR::SessionHandlePtr }; TransportControllable (std::string name, ARDOUR_UI&, ToggleType); - void set_value (double); + void set_value (double, PBD::Controllable::GroupControlDisposition group_override); double get_value (void) const; ARDOUR_UI& ui; @@ -423,7 +445,7 @@ class ARDOUR_UI : public Gtkmm2ext::UI, public ARDOUR::SessionHandlePtr boost::shared_ptr play_selection_controllable; boost::shared_ptr rec_controllable; - void toggle_always_play_range (); + void toggle_follow_edits (); void set_transport_controllable_state (const XMLNode&); XMLNode& get_transport_controllable_state (); @@ -451,6 +473,7 @@ class ARDOUR_UI : public Gtkmm2ext::UI, public ARDOUR::SessionHandlePtr ArdourButton auditioning_alert_button; ArdourButton solo_alert_button; ArdourButton feedback_alert_button; + ArdourButton error_alert_button; Gtk::VBox alert_box; Gtk::VBox meter_box; @@ -459,18 +482,26 @@ class ARDOUR_UI : public Gtkmm2ext::UI, public ARDOUR::SessionHandlePtr ArdourButton editor_meter_peak_display; bool editor_meter_peak_button_release (GdkEventButton*); + void blink_handler (bool); + sigc::connection blink_connection; + + void cancel_solo (); void solo_blink (bool); void sync_blink (bool); void audition_blink (bool); void feedback_blink (bool); + void error_blink (bool); + + void set_flat_buttons(); void soloing_changed (bool); void auditioning_changed (bool); void _auditioning_changed (bool); - + bool solo_alert_press (GdkEventButton* ev); bool audition_alert_press (GdkEventButton* ev); bool feedback_alert_press (GdkEventButton *); + bool error_alert_press (GdkEventButton *); void big_clock_value_changed (); void primary_clock_value_changed (); @@ -482,34 +513,6 @@ class ARDOUR_UI : public Gtkmm2ext::UI, public ARDOUR::SessionHandlePtr Gtk::Menu* session_popup_menu; - struct RecentSessionModelColumns : public Gtk::TreeModel::ColumnRecord { - RecentSessionModelColumns() { - add (visible_name); - add (tip); - add (fullpath); - } - Gtk::TreeModelColumn visible_name; - Gtk::TreeModelColumn tip; - Gtk::TreeModelColumn fullpath; - }; - - RecentSessionModelColumns recent_session_columns; - Gtk::TreeView recent_session_display; - Glib::RefPtr recent_session_model; - - ArdourDialog* session_selector_window; - Gtk::FileChooserDialog* open_session_selector; - - void build_session_selector(); - void redisplay_recent_sessions(); - void recent_session_row_activated (const Gtk::TreePath& path, Gtk::TreeViewColumn* col); - - struct RecentSessionsSorter { - bool operator() (std::pair a, std::pair b) const { - return cmp_nocase(a.first, b.first) == -1; - } - }; - /* menu bar and associated stuff */ Gtk::MenuBar* menu_bar; @@ -531,6 +534,12 @@ class ARDOUR_UI : public Gtkmm2ext::UI, public ARDOUR::SessionHandlePtr Gtk::Label cpu_load_label; void update_cpu_load (); + Gtk::Label xrun_label; + void update_xrun_count (); + + Gtk::Label peak_thread_work_label; + void update_peak_thread_work (); + Gtk::Label buffer_load_label; void update_buffer_load (); @@ -539,17 +548,21 @@ class ARDOUR_UI : public Gtkmm2ext::UI, public ARDOUR::SessionHandlePtr Gtk::Label format_label; void update_format (); - - gint every_second (); - gint every_point_one_seconds (); - gint every_point_zero_something_seconds (); + + void every_second (); + void every_point_one_seconds (); + void every_point_zero_something_seconds (); sigc::connection second_connection; sigc::connection point_one_second_connection; sigc::connection point_zero_something_second_connection; + sigc::connection fps_connection; + + void set_fps_timeout_connection (); void open_session (); void open_recent_session (); + bool process_save_template_prompter (ArdourPrompter& prompter); void save_template (); void edit_metadata (); @@ -560,6 +573,15 @@ class ARDOUR_UI : public Gtkmm2ext::UI, public ARDOUR::SessionHandlePtr void set_transport_sensitivity (bool); + //stuff for ProTools-style numpad + void transport_numpad_event (int num); + void transport_numpad_decimal (); + bool _numpad_locate_happening; + int _pending_locate_num; + gint transport_numpad_timeout (); + sigc::connection _numpad_timeout_connection; + + void transport_goto_nth_marker (int nth); void transport_goto_zero (); void transport_goto_start (); void transport_goto_end (); @@ -568,11 +590,12 @@ class ARDOUR_UI : public Gtkmm2ext::UI, public ARDOUR::SessionHandlePtr void transport_record (bool roll); void transport_roll (); void transport_play_selection(); - void transport_play_preroll(); + void transport_play_preroll(); void transport_forward (int option); void transport_rewind (int option); void transport_loop (); void toggle_roll (bool with_abort, bool roll_out_of_bounded_mode); + bool trx_record_enable_all_tracks (); bool _session_is_new; void set_session (ARDOUR::Session *); @@ -583,14 +606,17 @@ class ARDOUR_UI : public Gtkmm2ext::UI, public ARDOUR::SessionHandlePtr guint32 last_key_press_time; + bool process_snapshot_session_prompter (ArdourPrompter& prompter, bool switch_to_it); void snapshot_session (bool switch_to_it); + + SaveAsDialog* save_as_dialog; + + bool save_as_progress_update (float fraction, int64_t cnt, int64_t total, Gtk::Label* label, Gtk::ProgressBar* bar); + void save_session_as (); void rename_session (); - void setup_order_hint (); + void setup_order_hint (AddRouteDialog::InsertAt); - Mixer_UI *mixer; int create_mixer (); - - PublicEditor *editor; int create_editor (); Meterbridge *meterbridge; @@ -598,7 +624,6 @@ class ARDOUR_UI : public Gtkmm2ext::UI, public ARDOUR::SessionHandlePtr /* Dialogs that can be created via new */ WM::Proxy speaker_config_window; - WM::Proxy theme_manager; WM::Proxy key_editor; WM::Proxy rc_option_editor; WM::Proxy add_route_dialog; @@ -606,6 +631,7 @@ class ARDOUR_UI : public Gtkmm2ext::UI, public ARDOUR::SessionHandlePtr WM::Proxy location_ui; WM::Proxy route_params; WM::Proxy audio_midi_setup; + WM::Proxy export_video_dialog; /* Windows/Dialogs that require a creator method */ @@ -621,12 +647,10 @@ class ARDOUR_UI : public Gtkmm2ext::UI, public ARDOUR::SessionHandlePtr SessionOptionEditor* create_session_option_editor (); BundleManager* create_bundle_manager (); AddVideoDialog* create_add_video_dialog (); - BigClockWindow* create_big_clock_window(); + BigClockWindow* create_big_clock_window(); GlobalPortMatrixWindow* create_global_port_matrix (ARDOUR::DataType); - static UIConfiguration *ui_config; - - PBD::SystemExec *video_server_process; + ARDOUR::SystemExec *video_server_process; void handle_locations_change (ARDOUR::Location*); @@ -653,6 +677,7 @@ class ARDOUR_UI : public Gtkmm2ext::UI, public ARDOUR::SessionHandlePtr void display_cleanup_results (ARDOUR::CleanupReport& rep, const gchar* list_title, const bool msg_delete); void cleanup (); + void cleanup_peakfiles (); void flush_trash (); bool have_configure_timeout; @@ -704,7 +729,6 @@ class ARDOUR_UI : public Gtkmm2ext::UI, public ARDOUR::SessionHandlePtr void check_memory_locking (); - bool check_audioengine(); void audioengine_setup (); void display_message (const char *prefix, gint prefix_len, @@ -712,12 +736,11 @@ class ARDOUR_UI : public Gtkmm2ext::UI, public ARDOUR::SessionHandlePtr const char *msg); Gtk::Label status_bar_label; bool status_bar_button_press (GdkEventButton*); - Gtk::ToggleButton error_log_button; void loading_message (const std::string& msg); PBD::ScopedConnectionList forever_connections; - PBD::ScopedConnection halt_connection; + PBD::ScopedConnection halt_connection; void step_edit_status_change (bool); @@ -750,13 +773,26 @@ class ARDOUR_UI : public Gtkmm2ext::UI, public ARDOUR::SessionHandlePtr void successful_graph_sort (); bool _feedback_exists; + enum ArdourLogLevel { + LogLevelNone = 0, + LogLevelInfo, + LogLevelWarning, + LogLevelError + }; + + ArdourLogLevel _log_not_acknowledged; + void resize_text_widgets (); + bool xrun_button_release (GdkEventButton* ev); + std::string _announce_string; void check_announcements (); int do_audio_midi_setup (uint32_t); + void audioengine_became_silent (); + + DuplicateRouteDialog* duplicate_routes_dialog; }; #endif /* __ardour_gui_h__ */ -