{ "Unmodified", 0 },
-#ifdef GTKOSX
+#ifdef __APPLE__
/* Command = Meta
Option/Alt = Mod1
_copy_modifier_combo.signal_changed().connect (sigc::mem_fun(*this, &KeyboardOptions::copy_modifier_chosen));
Gtkmm2ext::UI::instance()->set_tip (_copy_modifier_combo,
(string_compose (_("<b>Recommended Setting: %1</b>%2"),
-#ifdef GTKOSX
+#ifdef __APPLE__
Keyboard::secondary_modifier_name (),
#else
Keyboard::primary_modifier_name (),
_constraint_modifier_combo.signal_changed().connect (sigc::mem_fun(*this, &KeyboardOptions::constraint_modifier_chosen));
Gtkmm2ext::UI::instance()->set_tip (_constraint_modifier_combo,
(string_compose (_("<b>Recommended Setting: %1</b>%2"),
-#ifdef GTKOSX
+#ifdef __APPLE__
Keyboard::primary_modifier_name (),
#else
Keyboard::secondary_modifier_name (),
/* 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();
/* 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 ());
, _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 << "<b>" << _("Video Server") << "</b>";
+ 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,
_("<b>When enabled</b> 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,
_("<b>When enabled</b> 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,
_("<b>When enabled</b> the video server is never launched automatically without confirmation"));
+ s.str (std::string ());
+ s << "<b>" << _("Video Monitor") << "</b>";
+ 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);
}
_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") {
_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());
}
}
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;
};
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 ();
/* TRANSPORT */
- add_option (_("Transport"), new OptionEditorHeading (S_("Playhead Behaviour")));
add_option (_("Transport"), new OptionEditorHeading (S_("Transport Options")));
BoolOption* tsf;
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<SyncSource> (
"sync-source",
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",
"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",
), PROGRAM_NAME));
- add_option (_("Transport"), _sync_genlock);
+ add_option (_("Transport/Sync"), _sync_genlock);
_sync_source_2997 = new BoolOption (
"timecode-source-2997",
"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",
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"),
(_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 */
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 (
add_option (_("Audio"), oac);
} // !mixbus
+ 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."));
+
+
add_option (_("Audio"), new OptionEditorHeading (_("Denormals")));
add_option (_("Audio"),
/* 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",
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"),
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"),
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"),
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)"),
_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<PFLPosition>* pp = new ComboOption<PFLPosition> (
"pfl-position",
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<AFLPosition>* pa = new ComboOption<AFLPosition> (
"afl-position",
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"),
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"),
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"),
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"),
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"),
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 */
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"),
));
-#ifndef GTKOSX
+#ifndef __APPLE__
/* font scaling does nothing with GDK/Quartz */
add_option (S_("Preferences|GUI"), new FontScalingOptions ());
#endif
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
}
}
void RCOptionEditor::edit_lxvst_path () {
Glib::RefPtr<Gdk::Window> win = get_parent_window ();
Gtkmm2ext::PathsDialog *pd = new Gtkmm2ext::PathsDialog (
- *this, _("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) {
void RCOptionEditor::edit_vst_path () {
Gtkmm2ext::PathsDialog *pd = new Gtkmm2ext::PathsDialog (
- *this, _("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) {
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) {