X-Git-Url: https://main.carlh.net/gitweb/?a=blobdiff_plain;ds=inline;f=gtk2_ardour%2Fardour_ui.h;h=1052ee23a6aac5f3b31ed3da325a510de24debc9;hb=e5888d398350b26ba2cdc634cc9791e90b4fc6b6;hp=7b4ffb9f0e52a12bd9c0deb9efea0026c1b54547;hpb=a0cb61d4111fad95d3b29ebf6f07c3b12f084456;p=ardour.git diff --git a/gtk2_ardour/ardour_ui.h b/gtk2_ardour/ardour_ui.h index 7b4ffb9f0e..1052ee23a6 100644 --- a/gtk2_ardour/ardour_ui.h +++ b/gtk2_ardour/ardour_ui.h @@ -35,7 +35,6 @@ #include #include -#include #include "pbd/xml++.h" #include "pbd/controllable.h" @@ -65,22 +64,31 @@ #include "ardour/plugin.h" #include "ardour/session_handle.h" -#include "ardour_dialog.h" +#include "video_timeline.h" + #include "ardour_button.h" +#include "ardour_dialog.h" +#include "ardour_window.h" #include "editing.h" +#include "meterbridge.h" +#include "nsm.h" #include "ui_config.h" -#include "window_proxy.h" #include "enums.h" #include "visibility_group.h" +#include "window_manager.h" class About; class AddRouteDialog; -class ArdourStartup; +class AddVideoDialog; +class VideoTimeLine; +class SystemExec; class ArdourKeyboard; class AudioClock; +class BigClockWindow; class BundleManager; class ButtonJoiner; class ConnectionEditor; +class EngineControl; class KeyEditor; class LocationUIWindow; class MainClock; @@ -88,6 +96,7 @@ class Mixer_UI; class PublicEditor; class RCOptionEditor; class RouteParams_UI; +class SessionDialog; class SessionOptionEditor; class ShuttleControl; class Splash; @@ -95,7 +104,7 @@ class SpeakerDialog; class ThemeManager; class TimeInfoBox; class MidiTracer; -class WindowProxyBase; +class LevelMeterHBox; class GlobalPortMatrixWindow; class GUIObjectState; @@ -116,7 +125,7 @@ namespace ARDOUR { class ARDOUR_UI : public Gtkmm2ext::UI, public ARDOUR::SessionHandlePtr { public: - ARDOUR_UI (int *argcp, char **argvp[]); + ARDOUR_UI (int *argcp, char **argvp[], const char* localedir); ~ARDOUR_UI(); bool run_startup (bool should_be_new, std::string load_template); @@ -140,8 +149,10 @@ 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_nsd (const std::string& session_name, const std::string& session_path); + 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); /// @return true if session was successfully unloaded. @@ -157,14 +168,7 @@ class ARDOUR_UI : public Gtkmm2ext::UI, public ARDOUR::SessionHandlePtr PublicEditor& the_editor(){return *editor;} Mixer_UI* the_mixer() { return mixer; } - void toggle_key_editor (); - void toggle_location_window (); - void toggle_theme_manager (); - void toggle_bundle_manager (); - void toggle_big_clock_window (); - void toggle_speaker_config_window (); void new_midi_tracer_window (); - void toggle_route_params_window (); void toggle_editing_space(); void toggle_keep_tearoffs(); @@ -174,13 +178,23 @@ class ARDOUR_UI : public Gtkmm2ext::UI, public ARDOUR::SessionHandlePtr 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. + * + * (either RapidScreenUpdate || SuperRapidScreenUpdate - user-config) */ static sigc::signal Clock; + static void close_all_dialogs () { CloseAllDialogs(); } + static sigc::signal CloseAllDialogs; + XMLNode* editor_settings() const; XMLNode* mixer_settings () const; XMLNode* keyboard_settings () const; @@ -198,9 +212,12 @@ class ARDOUR_UI : public Gtkmm2ext::UI, public ARDOUR::SessionHandlePtr MainClock* primary_clock; MainClock* secondary_clock; void focus_on_clock (); + AudioClock* big_clock; TimeInfoBox* time_info_box; + VideoTimeLine *video_timeline; + void store_clock_modes (); void restore_clock_modes (); void reset_main_clocks (); @@ -208,6 +225,15 @@ class ARDOUR_UI : public Gtkmm2ext::UI, public ARDOUR::SessionHandlePtr void synchronize_sync_source_and_video_pullup (); void add_route (Gtk::Window* float_window); + void add_routes_part_two (); + void add_routes_thread (); + + 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 session_add_audio_track ( int input_channels, @@ -231,11 +257,14 @@ class ARDOUR_UI : public Gtkmm2ext::UI, public ARDOUR::SessionHandlePtr session_add_midi_route (true, route_group, how_many, name_template, instrument); } + void session_add_mixed_track (const ARDOUR::ChanCount& input, const ARDOUR::ChanCount& output, ARDOUR::RouteGroup* route_group, uint32_t how_many, std::string const & name_template, + ARDOUR::PluginInfoPtr instrument); + /*void session_add_midi_bus () { session_add_midi_route (false); }*/ - int create_engine (); + void attach_to_engine (); void post_engine (); gint exit_on_main_window_close (GdkEventAny *); @@ -250,14 +279,18 @@ class ARDOUR_UI : public Gtkmm2ext::UI, public ARDOUR::SessionHandlePtr void set_shuttle_fract (double); - void add_window_proxy (WindowProxyBase *); - void remove_window_proxy (WindowProxyBase *); - void get_process_buffers (); void drop_process_buffers (); - void goto_editor_window (); - + void reset_peak_display (); + void reset_route_peak_display (ARDOUR::Route*); + void reset_group_peak_display (ARDOUR::RouteGroup*); + + const std::string& announce_string() const { return _announce_string; } + + int disconnect_from_engine (); + int reconnect_to_engine (); + protected: friend class PublicEditor; @@ -272,20 +305,23 @@ class ARDOUR_UI : public Gtkmm2ext::UI, public ARDOUR::SessionHandlePtr void reenable_hide_loop_punch_ruler_if_appropriate (); void toggle_auto_return (); void toggle_click (); - + void toggle_audio_midi_setup (); void toggle_session_auto_loop (); - void toggle_rc_options_window (); void toggle_session_options_window (); private: - ArdourStartup* _startup; - ARDOUR::AudioEngine *engine; - Gtk::Tooltips _tooltips; + Gtk::Tooltips _tooltips; + NSM_Client *nsm; + bool _was_dirty; + bool _mixer_on_top; + bool first_time_engine_run; - void goto_mixer_window (); - void toggle_mixer_window (); - void toggle_mixer_on_top (); + void goto_editor_window (); + void goto_mixer_window (); + void toggle_mixer_window (); + void toggle_meterbridge (); + void toggle_editor_mixer (); int setup_windows (); void setup_transport (); @@ -293,8 +329,7 @@ class ARDOUR_UI : public Gtkmm2ext::UI, public ARDOUR::SessionHandlePtr static ARDOUR_UI *theArdourUI; - void startup (); - void shutdown (); + int starting (); int ask_about_saving_session (const std::vector& actions); @@ -328,27 +363,8 @@ class ARDOUR_UI : public Gtkmm2ext::UI, public ARDOUR::SessionHandlePtr void start_clocking (); void stop_clocking (); - void manage_window (Gtk::Window&); - - AudioClock* big_clock; - ActionWindowProxy* big_clock_window; - int original_big_clock_width; - int original_big_clock_height; - double original_big_clock_font_size; - - void big_clock_size_allocate (Gtk::Allocation&); - bool idle_big_clock_text_resizer (int width, int height); - void big_clock_realized (); - bool big_clock_resize_in_progress; - int big_clock_height; - void big_clock_catch_focus (); - void big_clock_reset_aspect_ratio (); - - void float_big_clock (Gtk::Window* parent); bool main_window_state_event_handler (GdkEventWindowState*, bool window_was_editor); - ActionWindowProxy* speaker_config_window; - void update_transport_clocks (framepos_t pos); void record_state_changed (); @@ -416,8 +432,6 @@ class ARDOUR_UI : public Gtkmm2ext::UI, public ARDOUR::SessionHandlePtr ArdourButton play_selection_button; ArdourButton rec_button; - ButtonJoiner* transport_joiner; - void toggle_external_sync (); void toggle_time_master (); void toggle_video_sync (); @@ -425,7 +439,7 @@ class ARDOUR_UI : public Gtkmm2ext::UI, public ARDOUR::SessionHandlePtr ShuttleControl* shuttle_box; ArdourButton auto_return_button; - ArdourButton auto_play_button; + ArdourButton follow_edits_button; ArdourButton auto_input_button; ArdourButton click_button; ArdourButton sync_button; @@ -435,6 +449,11 @@ class ARDOUR_UI : public Gtkmm2ext::UI, public ARDOUR::SessionHandlePtr ArdourButton feedback_alert_button; Gtk::VBox alert_box; + Gtk::VBox meter_box; + LevelMeterHBox * editor_meter; + float editor_meter_max_peak; + ArdourButton editor_meter_peak_display; + bool editor_meter_peak_button_release (GdkEventButton*); void solo_blink (bool); void sync_blink (bool); @@ -444,7 +463,7 @@ class ARDOUR_UI : public Gtkmm2ext::UI, public ARDOUR::SessionHandlePtr 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 *); @@ -462,9 +481,11 @@ class ARDOUR_UI : public Gtkmm2ext::UI, public ARDOUR::SessionHandlePtr struct RecentSessionModelColumns : public Gtk::TreeModel::ColumnRecord { RecentSessionModelColumns() { add (visible_name); + add (tip); add (fullpath); } Gtk::TreeModelColumn visible_name; + Gtk::TreeModelColumn tip; Gtk::TreeModelColumn fullpath; }; @@ -500,6 +521,9 @@ class ARDOUR_UI : public Gtkmm2ext::UI, public ARDOUR::SessionHandlePtr Gtk::Label disk_space_label; void update_disk_space (); + Gtk::Label timecode_format_label; + void update_timecode_format (); + Gtk::Label cpu_load_label; void update_cpu_load (); @@ -514,12 +538,11 @@ class ARDOUR_UI : public Gtkmm2ext::UI, public ARDOUR::SessionHandlePtr gint every_second (); gint every_point_one_seconds (); - gint every_point_zero_one_seconds (); + gint every_point_zero_something_seconds (); sigc::connection second_connection; sigc::connection point_one_second_connection; - sigc::connection point_oh_five_second_connection; - sigc::connection point_zero_one_second_connection; + sigc::connection point_zero_something_second_connection; void open_session (); void open_recent_session (); @@ -541,6 +564,7 @@ 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_forward (int option); void transport_rewind (int option); void transport_loop (); @@ -564,35 +588,42 @@ class ARDOUR_UI : public Gtkmm2ext::UI, public ARDOUR::SessionHandlePtr PublicEditor *editor; int create_editor (); - RouteParams_UI *route_params; - int create_route_params (); - - BundleManager *bundle_manager; - void create_bundle_manager (); - - ActionWindowProxy* location_ui; - int create_location_ui (); - void handle_locations_change (ARDOUR::Location*); - - ActionWindowProxy* _global_port_matrix[ARDOUR::DataType::num_types]; - void toggle_global_port_matrix (ARDOUR::DataType); + Meterbridge *meterbridge; + int create_meterbridge (); + /* 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; + WM::Proxy about; + WM::Proxy location_ui; + WM::Proxy route_params; + WM::Proxy audio_midi_setup; + + /* Windows/Dialogs that require a creator method */ + + WM::ProxyWithConstructor session_option_editor; + WM::ProxyWithConstructor add_video_dialog; + WM::ProxyWithConstructor bundle_manager; + WM::ProxyWithConstructor big_clock_window; + WM::ProxyWithConstructor audio_port_matrix; + WM::ProxyWithConstructor midi_port_matrix; + + /* creator methods */ + + SessionOptionEditor* create_session_option_editor (); + BundleManager* create_bundle_manager (); + AddVideoDialog* create_add_video_dialog (); + BigClockWindow* create_big_clock_window(); + GlobalPortMatrixWindow* create_global_port_matrix (ARDOUR::DataType); static UIConfiguration *ui_config; - ThemeManager *theme_manager; - - /* Key bindings editor */ - - KeyEditor *key_editor; - /* RC Options window */ + SystemExec *video_server_process; - RCOptionEditor *rc_option_editor; - - SessionOptionEditor *session_option_editor; - - /* route dialog */ - - AddRouteDialog *add_route_dialog; + void handle_locations_change (ARDOUR::Location*); /* Keyboard Handling */ @@ -607,16 +638,15 @@ class ARDOUR_UI : public Gtkmm2ext::UI, public ARDOUR::SessionHandlePtr uint32_t rec_enabled_streams; void count_recenabled_streams (ARDOUR::Route&); - About* about; Splash* splash; + void pop_back_splash (Gtk::Window&); /* cleanup */ Gtk::MenuItem *cleanup_item; - void display_cleanup_results (ARDOUR::CleanupReport& rep, const gchar* list_title, - const std::string& plural_msg, const std::string& singular_msg); + void display_cleanup_results (ARDOUR::CleanupReport& rep, const gchar* list_title, const bool msg_delete); void cleanup (); void flush_trash (); @@ -632,14 +662,12 @@ class ARDOUR_UI : public Gtkmm2ext::UI, public ARDOUR::SessionHandlePtr void disk_overrun_handler (); void disk_underrun_handler (); + void session_format_mismatch (std::string, std::string); + void session_dialog (std::string); int pending_state_dialog (); int sr_mismatch_dialog (ARDOUR::framecnt_t, ARDOUR::framecnt_t); - void disconnect_from_jack (); - void reconnect_to_jack (); - void set_jack_buffer_size (ARDOUR::pframes_t); - Gtk::MenuItem* jack_disconnect_item; Gtk::MenuItem* jack_reconnect_item; Gtk::Menu* jack_bufsize_menu; @@ -678,9 +706,8 @@ class ARDOUR_UI : public Gtkmm2ext::UI, public ARDOUR::SessionHandlePtr void loading_message (const std::string& msg); - void toggle_translations (); - PBD::ScopedConnectionList forever_connections; + PBD::ScopedConnection halt_connection; void step_edit_status_change (bool); @@ -693,8 +720,6 @@ class ARDOUR_UI : public Gtkmm2ext::UI, public ARDOUR::SessionHandlePtr void queue_finish (); void fontconfig_dialog (); - std::list _window_proxies; - int missing_file (ARDOUR::Session*s, std::string str, ARDOUR::DataType type); int ambiguous_file (std::string file, std::string path, std::vector hits); @@ -716,6 +741,11 @@ class ARDOUR_UI : public Gtkmm2ext::UI, public ARDOUR::SessionHandlePtr bool _feedback_exists; void resize_text_widgets (); + + std::string _announce_string; + void check_announcements (); + + int do_audio_midi_setup (uint32_t); }; #endif /* __ardour_gui_h__ */