X-Git-Url: https://git.carlh.net/gitweb/?a=blobdiff_plain;f=gtk2_ardour%2Frc_option_editor.cc;h=3d5badf57b8408d08d5e273b519302be2b797a21;hb=d3acba6be4a93ab757703816de1a6f12cf457a0e;hp=c712b6a864f24cd3a100d6483235675f05acc91b;hpb=990cbf3f409ce1e4c1ef560659b009adfe611ce3;p=ardour.git diff --git a/gtk2_ardour/rc_option_editor.cc b/gtk2_ardour/rc_option_editor.cc index c712b6a864..3d5badf57b 100644 --- a/gtk2_ardour/rc_option_editor.cc +++ b/gtk2_ardour/rc_option_editor.cc @@ -54,6 +54,7 @@ #include "ardour_window.h" #include "ardour_dialog.h" +#include "ardour_ui.h" #include "gui_thread.h" #include "meter_patterns.h" #include "midi_tracer.h" @@ -76,7 +77,7 @@ using namespace ARDOUR_UI_UTILS; class ClickOptions : public OptionEditorBox { public: - ClickOptions (RCConfiguration* c, Gtk::Window* p) + ClickOptions (RCConfiguration* c) : _rc_config (c) , _click_browse_button (_("Browse...")) , _click_emphasis_browse_button (_("Browse...")) @@ -326,7 +327,7 @@ static const struct { { "Unmodified", 0 }, -#ifdef GTKOSX +#ifdef __APPLE__ /* Command = Meta Option/Alt = Mod1 @@ -514,7 +515,7 @@ public: _copy_modifier_combo.signal_changed().connect (sigc::mem_fun(*this, &KeyboardOptions::copy_modifier_chosen)); Gtkmm2ext::UI::instance()->set_tip (_copy_modifier_combo, (string_compose (_("Recommended Setting: %1%2"), -#ifdef GTKOSX +#ifdef __APPLE__ Keyboard::secondary_modifier_name (), #else Keyboard::primary_modifier_name (), @@ -541,7 +542,7 @@ public: _constraint_modifier_combo.signal_changed().connect (sigc::mem_fun(*this, &KeyboardOptions::constraint_modifier_chosen)); Gtkmm2ext::UI::instance()->set_tip (_constraint_modifier_combo, (string_compose (_("Recommended Setting: %1%2"), -#ifdef GTKOSX +#ifdef __APPLE__ Keyboard::primary_modifier_name (), #else Keyboard::secondary_modifier_name (), @@ -665,7 +666,7 @@ public: /* ignore snap */ set_popdown_strings (_snap_modifier_combo, dumb); _snap_modifier_combo.signal_changed().connect (sigc::mem_fun(*this, &KeyboardOptions::snap_modifier_chosen)); -#ifdef GTKOSX +#ifdef __APPLE__ Glib::ustring mod_str = string_compose (X_("%1-%2"), Keyboard::level4_modifier_name (), Keyboard::tertiary_modifier_name ()); #else Glib::ustring mod_str = Keyboard::secondary_modifier_name(); @@ -691,7 +692,7 @@ public: /* snap delta */ set_popdown_strings (_snap_delta_combo, dumb); _snap_delta_combo.signal_changed().connect (sigc::mem_fun(*this, &KeyboardOptions::snap_delta_modifier_chosen)); -#ifdef GTKOSX +#ifdef __APPLE__ mod_str = Keyboard::level4_modifier_name (); #else mod_str = string_compose (X_("%1-%2"), Keyboard::secondary_modifier_name (), Keyboard::level4_modifier_name ()); @@ -1053,7 +1054,7 @@ public: _box->pack_start (*h, false, false); - set_note (_("Adjusting the scale require an application restart to re-layout.")); + set_note (_("Adjusting the scale requires an application restart to re-layout.")); _dpi_adjustment.signal_value_changed().connect (sigc::mem_fun (*this, &FontScalingOptions::dpi_changed)); } @@ -1343,9 +1344,8 @@ private: class ControlSurfacesOptions : public OptionEditorBox { public: - ControlSurfacesOptions (Gtk::Window& parent) - : _parent (parent) - , _ignore_view_change (0) + ControlSurfacesOptions () + : _ignore_view_change (0) { _store = ListStore::create (_model); _view.set_model (_store); @@ -1496,7 +1496,8 @@ private: * or re-initializing a surface. * tear_down_gui() hides an deletes the Window if it exists. */ - ArdourWindow* win = new ArdourWindow (_parent, title.get_string()); + ArdourWindow* win = new ArdourWindow (*((Gtk::Window*) _view.get_toplevel()), title.get_string()); + win->set_title ("Control Protocol Options"); win->add (*box); box->show (); win->present (); @@ -1532,7 +1533,6 @@ private: Glib::RefPtr _store; ControlSurfacesModelColumns _model; TreeView _view; - Gtk::Window& _parent; PBD::ScopedConnection protocol_status_connection; uint32_t _ignore_view_change; Gtk::Button* edit_button; @@ -1546,45 +1546,78 @@ public: , _show_video_export_info_button (_("Show Video Export Info before export")) , _show_video_server_dialog_button (_("Show Video Server Startup Dialog")) , _video_advanced_setup_button (_("Advanced Setup (remote video server)")) + , _xjadeo_browse_button (_("Browse...")) { - Table* t = manage (new Table (2, 6)); + Table* t = manage (new Table (8, 4)); t->set_spacings (4); - t->attach (_video_advanced_setup_button, 0, 2, 0, 1); + std::stringstream s; + s << "" << _("Video Server") << ""; + Label* l = manage (new Label (s.str())); + l->set_use_markup (true); + l->set_alignment (0, 0.5); + t->attach (*l, 0, 4, 0, 1, EXPAND | FILL, FILL | EXPAND, 0, 8); + + t->attach (_video_advanced_setup_button, 1, 4, 1, 2); _video_advanced_setup_button.signal_toggled().connect (sigc::mem_fun (*this, &VideoTimelineOptions::video_advanced_setup_toggled)); Gtkmm2ext::UI::instance()->set_tip (_video_advanced_setup_button, _("When enabled you can speficify a custom video-server URL and docroot. - Do not enable this option unless you know what you are doing.")); - Label* l = manage (new Label (_("Video Server URL:"))); + l = manage (new Label (_("Video Server URL:"))); l->set_alignment (0, 0.5); - t->attach (*l, 0, 1, 1, 2, FILL); - t->attach (_video_server_url_entry, 1, 2, 1, 2, FILL); + t->attach (*l, 1, 2, 2, 3, FILL); + t->attach (_video_server_url_entry, 2, 4, 2, 3, FILL); Gtkmm2ext::UI::instance()->set_tip (_video_server_url_entry, _("Base URL of the video-server including http prefix. This is usually 'http://hostname.example.org:1554/' and defaults to 'http://localhost:1554/' when the video-server is running locally")); l = manage (new Label (_("Video Folder:"))); l->set_alignment (0, 0.5); - t->attach (*l, 0, 1, 2, 3, FILL); - t->attach (_video_server_docroot_entry, 1, 2, 2, 3); + t->attach (*l, 1, 2, 3, 4, FILL); + t->attach (_video_server_docroot_entry, 2, 4, 3, 4); Gtkmm2ext::UI::instance()->set_tip (_video_server_docroot_entry, _("Local path to the video-server document-root. Only files below this directory will be accessible by the video-server. If the server run on a remote host, it should point to a network mounted folder of the server's docroot or be left empty if it is unvailable. It is used for the local video-monitor and file-browsing when opening/adding a video file.")); - /* small vspace y=3..4 */ - - t->attach (_show_video_export_info_button, 0, 2, 4, 5); + t->attach (_show_video_export_info_button, 1, 4, 4, 5); _show_video_export_info_button.signal_toggled().connect (sigc::mem_fun (*this, &VideoTimelineOptions::show_video_export_info_toggled)); Gtkmm2ext::UI::instance()->set_tip (_show_video_export_info_button, _("When enabled an information window with details is displayed before the video-export dialog.")); - t->attach (_show_video_server_dialog_button, 0, 2, 5, 6); + t->attach (_show_video_server_dialog_button, 1, 4, 5, 6); _show_video_server_dialog_button.signal_toggled().connect (sigc::mem_fun (*this, &VideoTimelineOptions::show_video_server_dialog_toggled)); Gtkmm2ext::UI::instance()->set_tip (_show_video_server_dialog_button, _("When enabled the video server is never launched automatically without confirmation")); + s.str (std::string ()); + s << "" << _("Video Monitor") << ""; + l = manage (new Label (s.str())); + l->set_use_markup (true); + l->set_alignment (0, 0.5); + t->attach (*l, 0, 4, 6, 7, EXPAND | FILL, FILL | EXPAND, 0, 8); + + l = manage (new Label (string_compose (_("Custom Path to Video Monitor (%1) - leave empty for default:"), +#ifdef __APPLE__ + "Jadeo.app" +#elif defined PLATFORM_WINDOWS + "xjadeo.exe" +#else + "xjadeo" +#endif + ))); + l->set_alignment (0, 0.5); + t->attach (*l, 1, 4, 7, 8, FILL); + t->attach (_custom_xjadeo_path, 2, 3, 8, 9); + Gtkmm2ext::UI::instance()->set_tip (_custom_xjadeo_path, _("Set a custom path to the Video Monitor Executable, changing this requires a restart.")); + t->attach (_xjadeo_browse_button, 3, 4, 8, 9, FILL); + _video_server_url_entry.signal_changed().connect (sigc::mem_fun(*this, &VideoTimelineOptions::server_url_changed)); _video_server_url_entry.signal_activate().connect (sigc::mem_fun(*this, &VideoTimelineOptions::server_url_changed)); _video_server_docroot_entry.signal_changed().connect (sigc::mem_fun(*this, &VideoTimelineOptions::server_docroot_changed)); _video_server_docroot_entry.signal_activate().connect (sigc::mem_fun(*this, &VideoTimelineOptions::server_docroot_changed)); + _custom_xjadeo_path.signal_changed().connect (sigc::mem_fun (*this, &VideoTimelineOptions::custom_xjadeo_path_changed)); + _xjadeo_browse_button.signal_clicked ().connect (sigc::mem_fun (*this, &VideoTimelineOptions::xjadeo_browse_clicked)); + + // xjadeo-path is a UIConfig parameter + UIConfiguration::instance().ParameterChanged.connect (sigc::mem_fun (*this, &VideoTimelineOptions::parameter_changed)); _box->pack_start (*t,true,true); } @@ -1617,6 +1650,30 @@ public: _rc_config->set_video_advanced_setup(x); } + void custom_xjadeo_path_changed () + { + UIConfiguration::instance().set_xjadeo_binary (_custom_xjadeo_path.get_text()); + } + + void xjadeo_browse_clicked () + { + Gtk::FileChooserDialog dialog(_("Set Video Monitor Executable"), Gtk::FILE_CHOOSER_ACTION_OPEN); + dialog.set_filename (UIConfiguration::instance().get_xjadeo_binary()); + dialog.add_button(Gtk::Stock::CANCEL, Gtk::RESPONSE_CANCEL); + dialog.add_button(Gtk::Stock::OK, Gtk::RESPONSE_OK); + if (dialog.run () == Gtk::RESPONSE_OK) { + const std::string& filename = dialog.get_filename(); + if (!filename.empty() && ( +#ifdef __APPLE__ + Glib::file_test (filename + "/Contents/MacOS/xjadeo", Glib::FILE_TEST_EXISTS|Glib::FILE_TEST_IS_EXECUTABLE) || +#endif + Glib::file_test (filename, Glib::FILE_TEST_EXISTS|Glib::FILE_TEST_IS_EXECUTABLE) + )) { + UIConfiguration::instance().set_xjadeo_binary (filename); + } + } + } + void parameter_changed (string const & p) { if (p == "video-server-url") { @@ -1634,6 +1691,8 @@ public: _video_advanced_setup_button.set_active(x); _video_server_docroot_entry.set_sensitive(x); _video_server_url_entry.set_sensitive(x); + } else if (p == "xjadeo-binary") { + _custom_xjadeo_path.set_text (UIConfiguration::instance().get_xjadeo_binary()); } } @@ -1645,15 +1704,18 @@ public: parameter_changed ("show-video-export-info"); parameter_changed ("show-video-server-dialog"); parameter_changed ("video-advanced-setup"); + parameter_changed ("xjadeo-binary"); } private: RCConfiguration* _rc_config; Entry _video_server_url_entry; Entry _video_server_docroot_entry; + Entry _custom_xjadeo_path; CheckButton _show_video_export_info_button; CheckButton _show_video_server_dialog_button; CheckButton _video_advanced_setup_button; + Button _xjadeo_browse_button; }; @@ -1720,10 +1782,14 @@ private: RCOptionEditor::RCOptionEditor () - : OptionEditor (Config, string_compose (_("%1 Preferences"), PROGRAM_NAME)) + : OptionEditorContainer (Config, string_compose (_("%1 Preferences"), PROGRAM_NAME)) + , Tabbable (*this, _("Preferences")) /* pack self-as-vbox into tabbable */ , _rc_config (Config) , _mixer_strip_visibility ("mixer-element-visibility") { + + UIConfiguration::instance().ParameterChanged.connect (sigc::mem_fun (*this, &RCOptionEditor::parameter_changed)); + /* MISC */ uint32_t hwcpus = hardware_concurrency (); @@ -1800,7 +1866,7 @@ RCOptionEditor::RCOptionEditor () add_option (_("Misc"), new OptionEditorHeading (_("Click"))); - add_option (_("Misc"), new ClickOptions (_rc_config, this)); + add_option (_("Misc"), new ClickOptions (_rc_config)); add_option (_("Misc"), new FaderOption ( @@ -1937,8 +2003,8 @@ RCOptionEditor::RCOptionEditor () psc->add (1.0, _("1.0 second")); psc->add (2.0, _("2.0 seconds")); add_option (_("Transport"), psc); - - add_option (_("Transport"), new OptionEditorHeading (S_("Sync/Slave"))); + + add_option (_("Transport/Sync"), new OptionEditorHeading (S_("Synchronization and Slave Options"))); _sync_source = new ComboOption ( "sync-source", @@ -1947,7 +2013,7 @@ RCOptionEditor::RCOptionEditor () sigc::mem_fun (*_rc_config, &RCConfiguration::set_sync_source) ); - add_option (_("Transport"), _sync_source); + add_option (_("Transport/Sync"), _sync_source); _sync_framerate = new BoolOption ( "timecode-sync-frame-rate", @@ -1963,7 +2029,7 @@ RCOptionEditor::RCOptionEditor () "Instead the frame rate indication in the main clock will flash red and %1 will convert between the external " "timecode standard and the session standard."), PROGRAM_NAME)); - add_option (_("Transport"), _sync_framerate); + add_option (_("Transport/Sync"), _sync_framerate); _sync_genlock = new BoolOption ( "timecode-source-is-synced", @@ -1984,7 +2050,7 @@ RCOptionEditor::RCOptionEditor () ), PROGRAM_NAME)); - add_option (_("Transport"), _sync_genlock); + add_option (_("Transport/Sync"), _sync_genlock); _sync_source_2997 = new BoolOption ( "timecode-source-2997", @@ -2002,9 +2068,9 @@ RCOptionEditor::RCOptionEditor () "because the variant of using exactly 29.97 fps has zero timecode drift.\n" )); - add_option (_("Transport"), _sync_source_2997); + add_option (_("Transport/Sync"), _sync_source_2997); - add_option (_("Transport"), new OptionEditorHeading (S_("LTC Reader"))); + add_option (_("Transport/Sync"), new OptionEditorHeading (S_("LTC Reader"))); _ltc_port = new ComboStringOption ( "ltc-source-port", @@ -2021,12 +2087,12 @@ RCOptionEditor::RCOptionEditor () populate_sync_options (); AudioEngine::instance()->Running.connect (engine_started_connection, MISSING_INVALIDATOR, boost::bind (&RCOptionEditor::populate_sync_options, this), gui_context()); - add_option (_("Transport"), _ltc_port); + add_option (_("Transport/Sync"), _ltc_port); // TODO; rather disable this button than not compile it.. - add_option (_("Transport"), new OptionEditorHeading (S_("LTC Generator"))); + add_option (_("Transport/Sync"), new OptionEditorHeading (S_("LTC Generator"))); - add_option (_("Transport"), + add_option (_("Transport/Sync"), new BoolOption ( "send-ltc", _("Enable LTC generator"), @@ -2054,7 +2120,7 @@ RCOptionEditor::RCOptionEditor () (_ltc_volume_slider->tip_widget(), _("Specify the Peak Volume of the generated LTC signal in dbFS. A good value is 0dBu ^= -18dbFS in an EBU calibrated system")); - add_option (_("Transport"), _ltc_volume_slider); + add_option (_("Transport/Sync"), _ltc_volume_slider); /* EDITOR */ @@ -2108,6 +2174,14 @@ if (!Profile->get_mixbus()) { sigc::mem_fun (UIConfiguration::instance(), &UIConfiguration::get_show_zoom_tools), sigc::mem_fun (UIConfiguration::instance(), &UIConfiguration::set_show_zoom_tools) )); + + add_option (_("Editor"), + new BoolOption ( + "use-mouse-position-as-zoom-focus-on-scroll", + _("Always use mouse cursor position as zoom focus when zooming using mouse scroll wheel"), + sigc::mem_fun (UIConfiguration::instance(), &UIConfiguration::get_use_mouse_position_as_zoom_focus_on_scroll), + sigc::mem_fun (UIConfiguration::instance(), &UIConfiguration::set_use_mouse_position_as_zoom_focus_on_scroll) + )); } // !mixbus add_option (_("Editor"), @@ -2286,8 +2360,8 @@ if (!Profile->get_mixbus()) { sigc::mem_fun (*_rc_config, &RCConfiguration::set_tape_machine_mode) )); -if (!Profile->get_mixbus()) { add_option (_("Audio"), new OptionEditorHeading (_("Connection of tracks and busses"))); +if (!Profile->get_mixbus()) { add_option (_("Audio"), new BoolOption ( @@ -2321,6 +2395,18 @@ if (!Profile->get_mixbus()) { oac->add (ManualConnect, _("manually")); add_option (_("Audio"), oac); + + bo = new BoolOption ( + "strict-io", + _("Use 'Strict-I/O' for new tracks or Busses"), + sigc::mem_fun (*_rc_config, &RCConfiguration::get_strict_io), + sigc::mem_fun (*_rc_config, &RCConfiguration::set_strict_io) + ); + + add_option (_("Audio"), bo); + Gtkmm2ext::UI::instance()->set_tip (bo->tip_widget(), + _("With strict-i/o enabled, Effect Processors will not modify the number of channels on a track. The number of output channels will always match the number of input channels.")); + } // !mixbus add_option (_("Audio"), new OptionEditorHeading (_("Denormals"))); @@ -2410,7 +2496,7 @@ if (!Profile->get_mixbus()) { /* SOLO AND MUTE */ - add_option (_("Solo / mute"), new OptionEditorHeading (_("Solo"))); + add_option (_("Solo & mute"), new OptionEditorHeading (_("Solo"))); _solo_control_is_listen_control = new BoolOption ( "solo-control-is-listen-control", @@ -2419,9 +2505,9 @@ if (!Profile->get_mixbus()) { sigc::mem_fun (*_rc_config, &RCConfiguration::set_solo_control_is_listen_control) ); - add_option (_("Solo / mute"), _solo_control_is_listen_control); + add_option (_("Solo & mute"), _solo_control_is_listen_control); - add_option (_("Solo / mute"), + add_option (_("Solo & mute"), new BoolOption ( "exclusive-solo", _("Exclusive solo"), @@ -2429,7 +2515,7 @@ if (!Profile->get_mixbus()) { sigc::mem_fun (*_rc_config, &RCConfiguration::set_exclusive_solo) )); - add_option (_("Solo / mute"), + add_option (_("Solo & mute"), new BoolOption ( "show-solo-mutes", _("Show solo muting"), @@ -2437,7 +2523,7 @@ if (!Profile->get_mixbus()) { sigc::mem_fun (*_rc_config, &RCConfiguration::set_show_solo_mutes) )); - add_option (_("Solo / mute"), + add_option (_("Solo & mute"), new BoolOption ( "solo-mute-override", _("Soloing overrides muting"), @@ -2445,7 +2531,7 @@ if (!Profile->get_mixbus()) { sigc::mem_fun (*_rc_config, &RCConfiguration::set_solo_mute_override) )); - add_option (_("Solo / mute"), + add_option (_("Solo & mute"), new FaderOption ( "solo-mute-gain", _("Solo-in-place mute cut (dB)"), @@ -2463,7 +2549,7 @@ if (!Profile->get_mixbus()) { _listen_position->add (AfterFaderListen, _("after-fader (AFL)")); _listen_position->add (PreFaderListen, _("pre-fader (PFL)")); - add_option (_("Solo / mute"), _listen_position); + add_option (_("Solo & mute"), _listen_position); ComboOption* pp = new ComboOption ( "pfl-position", @@ -2475,7 +2561,7 @@ if (!Profile->get_mixbus()) { pp->add (PFLFromBeforeProcessors, _("before pre-fader processors")); pp->add (PFLFromAfterProcessors, _("pre-fader but after pre-fader processors")); - add_option (_("Solo / mute"), pp); + add_option (_("Solo & mute"), pp); ComboOption* pa = new ComboOption ( "afl-position", @@ -2487,11 +2573,11 @@ if (!Profile->get_mixbus()) { pa->add (AFLFromBeforeProcessors, _("immediately post-fader")); pa->add (AFLFromAfterProcessors, _("after post-fader processors (before pan)")); - add_option (_("Solo / mute"), pa); + add_option (_("Solo & mute"), pa); - add_option (_("Solo / mute"), new OptionEditorHeading (_("Default track / bus muting options"))); + add_option (_("Solo & mute"), new OptionEditorHeading (_("Default track / bus muting options"))); - add_option (_("Solo / mute"), + add_option (_("Solo & mute"), new BoolOption ( "mute-affects-pre-fader", _("Mute affects pre-fader sends"), @@ -2499,7 +2585,7 @@ if (!Profile->get_mixbus()) { sigc::mem_fun (*_rc_config, &RCConfiguration::set_mute_affects_pre_fader) )); - add_option (_("Solo / mute"), + add_option (_("Solo & mute"), new BoolOption ( "mute-affects-post-fader", _("Mute affects post-fader sends"), @@ -2507,7 +2593,7 @@ if (!Profile->get_mixbus()) { sigc::mem_fun (*_rc_config, &RCConfiguration::set_mute_affects_post_fader) )); - add_option (_("Solo / mute"), + add_option (_("Solo & mute"), new BoolOption ( "mute-affects-control-outs", _("Mute affects control outputs"), @@ -2515,7 +2601,7 @@ if (!Profile->get_mixbus()) { sigc::mem_fun (*_rc_config, &RCConfiguration::set_mute_affects_control_outs) )); - add_option (_("Solo / mute"), + add_option (_("Solo & mute"), new BoolOption ( "mute-affects-main-outs", _("Mute affects main outputs"), @@ -2523,9 +2609,9 @@ if (!Profile->get_mixbus()) { sigc::mem_fun (*_rc_config, &RCConfiguration::set_mute_affects_main_outs) )); - add_option (_("Solo / mute"), new OptionEditorHeading (_("Send Routing"))); + add_option (_("Solo & mute"), new OptionEditorHeading (_("Send Routing"))); - add_option (_("Solo / mute"), + add_option (_("Solo & mute"), new BoolOption ( "link-send-and-route-panner", _("Link panners of Aux and External Sends with main panner by default"), @@ -2702,7 +2788,7 @@ if (!Profile->get_mixbus()) { /* Control Surfaces */ - add_option (_("Control Surfaces"), new ControlSurfacesOptions (*this)); + add_option (_("Control Surfaces"), new ControlSurfacesOptions); ComboOption* rm = new ComboOption ( "remote-model", @@ -2834,9 +2920,27 @@ if (!Profile->get_mixbus()) { new BoolOption ( "open-gui-after-adding-plugin", _("Automatically open the plugin GUI when adding a new plugin"), - sigc::mem_fun (*_rc_config, &RCConfiguration::get_open_gui_after_adding_plugin), - sigc::mem_fun (*_rc_config, &RCConfiguration::set_open_gui_after_adding_plugin) + sigc::mem_fun (UIConfiguration::instance(), &UIConfiguration::get_open_gui_after_adding_plugin), + sigc::mem_fun (UIConfiguration::instance(), &UIConfiguration::set_open_gui_after_adding_plugin) )); + +#ifdef LV2_SUPPORT + add_option (_("Plugins"), + new BoolOption ( + "show-inline-display-by-default", + _("Show Plugin Inline Display on Mixerstrip by default"), + sigc::mem_fun (UIConfiguration::instance(), &UIConfiguration::get_show_inline_display_by_default), + sigc::mem_fun (UIConfiguration::instance(), &UIConfiguration::set_show_inline_display_by_default) + )); + + _plugin_prefer_inline = new BoolOption ( + "prefer-inline-over-gui", + _("Don't automatically open the plugin GUI when the plugin has an inline display mode"), + sigc::mem_fun (UIConfiguration::instance(), &UIConfiguration::get_prefer_inline_over_gui), + sigc::mem_fun (UIConfiguration::instance(), &UIConfiguration::set_prefer_inline_over_gui) + ); + add_option (_("Plugins"), _plugin_prefer_inline); +#endif #endif /* INTERFACE */ @@ -2892,7 +2996,7 @@ if (!Profile->get_mixbus()) { sigc::mem_fun (UIConfiguration::instance(), &UIConfiguration::set_show_name_highlight) )); - add_option (S_("GUI"), + add_option (S_("Preferences|GUI"), new BoolOption ( "super-rapid-clock-update", _("Update transport clock display at FPS instead of every 100ms"), @@ -2901,7 +3005,7 @@ if (!Profile->get_mixbus()) { )); -#ifndef GTKOSX +#ifndef __APPLE__ /* font scaling does nothing with GDK/Quartz */ add_option (S_("Preferences|GUI"), new FontScalingOptions ()); #endif @@ -3161,6 +3265,10 @@ RCOptionEditor::parameter_changed (string const & p) bool const s = Config->get_send_ltc (); _ltc_send_continuously->set_sensitive (s); _ltc_volume_slider->set_sensitive (s); + } else if (p == "open-gui-after-adding-plugin" || p == "show-inline-display-by-default") { +#ifdef LV2_SUPPORT + _plugin_prefer_inline->set_sensitive (UIConfiguration::instance().get_open_gui_after_adding_plugin() && UIConfiguration::instance().get_show_inline_display_by_default()); +#endif } } @@ -3189,11 +3297,12 @@ void RCOptionEditor::clear_au_blacklist () { } void RCOptionEditor::edit_lxvst_path () { + Glib::RefPtr win = get_parent_window (); Gtkmm2ext::PathsDialog *pd = new Gtkmm2ext::PathsDialog ( - _("Set Linux VST Search Path"), - _rc_config->get_plugin_path_lxvst(), - PluginManager::instance().get_default_lxvst_path() - ); + *current_toplevel(), _("Set Linux VST Search Path"), + _rc_config->get_plugin_path_lxvst(), + PluginManager::instance().get_default_lxvst_path() + ); ResponseType r = (ResponseType) pd->run (); pd->hide(); if (r == RESPONSE_ACCEPT) { @@ -3204,10 +3313,10 @@ void RCOptionEditor::edit_lxvst_path () { void RCOptionEditor::edit_vst_path () { Gtkmm2ext::PathsDialog *pd = new Gtkmm2ext::PathsDialog ( - _("Set Windows VST Search Path"), - _rc_config->get_plugin_path_vst(), - PluginManager::instance().get_default_windows_vst_path() - ); + *current_toplevel(), _("Set Windows VST Search Path"), + _rc_config->get_plugin_path_vst(), + PluginManager::instance().get_default_windows_vst_path() + ); ResponseType r = (ResponseType) pd->run (); pd->hide(); if (r == RESPONSE_ACCEPT) { @@ -3238,3 +3347,18 @@ RCOptionEditor::populate_sync_options () parameter_changed ("sync-source"); } + +Gtk::Window* +RCOptionEditor::use_own_window (bool and_fill_it) +{ + bool new_window = !own_window(); + + Gtk::Window* win = Tabbable::use_own_window (and_fill_it); + + if (win && new_window) { + win->set_name ("PreferencesWindow"); + ARDOUR_UI::instance()->setup_toplevel_window (*win, _("Preferences"), this); + } + + return win; +}