X-Git-Url: https://main.carlh.net/gitweb/?a=blobdiff_plain;f=gtk2_ardour%2Frc_option_editor.cc;h=756252f34837ed925d580398ad94f66f9f863a56;hb=fb74b9e015f1e071992dbad727745e9defab34ae;hp=61013dbce52e61973b14950df469aed266c9334d;hpb=aaf441d18fc6df23ca781ae18708757ff58527e1;p=ardour.git diff --git a/gtk2_ardour/rc_option_editor.cc b/gtk2_ardour/rc_option_editor.cc index 61013dbce5..756252f348 100644 --- a/gtk2_ardour/rc_option_editor.cc +++ b/gtk2_ardour/rc_option_editor.cc @@ -33,11 +33,9 @@ #include #include -#include -#include -#include -#include -#include +#include "gtkmm2ext/utils.h" +#include "gtkmm2ext/gtk_ui.h" +#include "gtkmm2ext/window_title.h" #include "pbd/fpu.h" #include "pbd/cpus.h" @@ -45,15 +43,20 @@ #include "ardour/audio_backend.h" #include "ardour/audioengine.h" -#include "ardour/profile.h" -#include "ardour/dB.h" -#include "ardour/rc_configuration.h" #include "ardour/control_protocol_manager.h" +#include "ardour/dB.h" #include "ardour/port_manager.h" #include "ardour/plugin_manager.h" +#include "ardour/profile.h" +#include "ardour/rc_configuration.h" +#include "ardour/transport_master_manager.h" + #include "control_protocol/control_protocol.h" -#include "canvas/wave_view.h" +#include "waveview/wave_view.h" + +#include "widgets/paths_dialog.h" +#include "widgets/tooltips.h" #include "ardour_dialog.h" #include "ardour_ui.h" @@ -65,7 +68,7 @@ #include "midi_tracer.h" #include "rc_option_editor.h" #include "sfdb_ui.h" -#include "tooltips.h" +#include "transport_masters_dialog.h" #include "ui_config.h" #include "utils.h" @@ -75,6 +78,7 @@ using namespace Gtkmm2ext; using namespace PBD; using namespace ARDOUR; using namespace ARDOUR_UI_UTILS; +using namespace ArdourWidgets; class ClickOptions : public OptionEditorMiniPage { @@ -86,32 +90,38 @@ public: { // TODO get rid of GTK -> use OptionEditor Widgets Table* t = &table; + Label* l; + int row = 0; - Label* l = manage (left_aligned_label (_("Emphasis on first beat"))); + l = manage (left_aligned_label (_("Emphasis on first beat"))); _use_emphasis_on_click_check_button.add (*l); - t->attach (_use_emphasis_on_click_check_button, 1, 3, 0, 1, FILL); + t->attach (_use_emphasis_on_click_check_button, 1, 3, row, row + 1, FILL); _use_emphasis_on_click_check_button.signal_toggled().connect ( sigc::mem_fun (*this, &ClickOptions::use_emphasis_on_click_toggled)); + ++row; l = manage (left_aligned_label (_("Use built-in default sounds"))); _use_default_click_check_button.add (*l); - t->attach (_use_default_click_check_button, 1, 3, 1, 2, FILL); + t->attach (_use_default_click_check_button, 1, 3, row, row + 1, FILL); _use_default_click_check_button.signal_toggled().connect ( sigc::mem_fun (*this, &ClickOptions::use_default_click_toggled)); + ++row; l = manage (left_aligned_label (_("Audio file:"))); - t->attach (*l, 1, 2, 2, 3, FILL); - t->attach (_click_path_entry, 2, 3, 2, 3, FILL); + t->attach (*l, 1, 2, row, row + 1, FILL); + t->attach (_click_path_entry, 2, 3, row, row + 1, FILL); _click_browse_button.signal_clicked ().connect ( sigc::mem_fun (*this, &ClickOptions::click_browse_clicked)); - t->attach (_click_browse_button, 3, 4, 2, 3, FILL); + t->attach (_click_browse_button, 3, 4, row, row + 1, FILL); + ++row; l = manage (left_aligned_label (_("Emphasis audio file:"))); - t->attach (*l, 1, 2, 3, 4, FILL); - t->attach (_click_emphasis_path_entry, 2, 3, 3, 4, FILL); + t->attach (*l, 1, 2, row, row + 1, FILL); + t->attach (_click_emphasis_path_entry, 2, 3, row, row + 1, FILL); _click_emphasis_browse_button.signal_clicked ().connect ( sigc::mem_fun (*this, &ClickOptions::click_emphasis_browse_clicked)); - t->attach (_click_emphasis_browse_button, 3, 4, 3, 4, FILL); + t->attach (_click_emphasis_browse_button, 3, 4, row, row + 1, FILL); + ++row; _click_fader = new FaderOption ( "click-gain", @@ -129,7 +139,7 @@ public: if (_rc_config->get_click_sound ().empty() && _rc_config->get_click_emphasis_sound().empty()) { _use_default_click_check_button.set_active (true); - _use_emphasis_on_click_check_button.set_active (true); + _use_emphasis_on_click_check_button.set_active (_rc_config->get_use_click_emphasis ()); } else { _use_default_click_check_button.set_active (false); @@ -1191,7 +1201,7 @@ private: { UIConfiguration::instance().set_waveform_clip_level (_clip_level_adjustment.get_value()); /* XXX: should be triggered from the parameter changed signal */ - ArdourCanvas::WaveView::set_clip_level (_clip_level_adjustment.get_value()); + ArdourWaveView::WaveView::set_clip_level (_clip_level_adjustment.get_value()); } Adjustment _clip_level_adjustment; @@ -1368,7 +1378,7 @@ class ControlSurfacesOptions : public OptionEditorMiniPage if (!(*i)->mandatory) { TreeModel::Row r = *_store->append (); r[_model.name] = (*i)->name; - r[_model.enabled] = ((*i)->protocol || (*i)->requested); + r[_model.enabled] = 0 != (*i)->protocol; r[_model.protocol_info] = *i; } } @@ -1385,8 +1395,9 @@ class ControlSurfacesOptions : public OptionEditorMiniPage if ((*x)[_model.protocol_info] == cpi) { _ignore_view_change++; - (*x)[_model.enabled] = (cpi->protocol || cpi->requested); + (*x)[_model.enabled] = 0 != cpi->protocol; _ignore_view_change--; + selection_changed (); // update sensitivity break; } } @@ -1396,10 +1407,12 @@ class ControlSurfacesOptions : public OptionEditorMiniPage { //enable the Edit button when a row is selected for editing TreeModel::Row row = *(_view.get_selection()->get_selected()); - if (row && row[_model.enabled]) - edit_button->set_sensitive (true); - else + if (row && row[_model.enabled]) { + ControlProtocolInfo* cpi = row[_model.protocol_info]; + edit_button->set_sensitive (cpi && cpi->protocol && cpi->protocol->has_editor ()); + } else { edit_button->set_sensitive (false); + } } void view_changed (TreeModel::Path const &, TreeModel::iterator const & i) @@ -1462,7 +1475,7 @@ class ControlSurfacesOptions : public OptionEditorMiniPage * tear_down_gui() hides an deletes the Window if it exists. */ ArdourWindow* win = new ArdourWindow (*((Gtk::Window*) _view.get_toplevel()), title.get_string()); - win->set_title ("Control Protocol Options"); + win->set_title (_("Control Protocol Settings")); win->add (*box); box->show (); win->present (); @@ -1529,7 +1542,7 @@ class VideoTimelineOptions : public OptionEditorMiniPage t->attach (_video_advanced_setup_button, 1, 4, n, n + 1, FILL); _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.")); + _("When enabled you can specify a custom video-server URL and docroot. - Do not enable this option unless you know what you are doing.")); ++n; Label* l = manage (new Label (_("Video Server URL:"))); @@ -1545,7 +1558,7 @@ class VideoTimelineOptions : public OptionEditorMiniPage t->attach (*l, 1, 2, n, n + 1, FILL); t->attach (_video_server_docroot_entry, 2, 4, n, n + 1); 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.")); + _("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 unavailable. It is used for the local video-monitor and file-browsing when opening/adding a video file.")); ++n; l = manage (new Label ("")); @@ -1581,9 +1594,6 @@ class VideoTimelineOptions : public OptionEditorMiniPage _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)); } void server_url_changed () @@ -1616,13 +1626,13 @@ class VideoTimelineOptions : public OptionEditorMiniPage void custom_xjadeo_path_changed () { - UIConfiguration::instance().set_xjadeo_binary (_custom_xjadeo_path.get_text()); + _rc_config->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.set_filename (_rc_config->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) { @@ -1633,7 +1643,7 @@ class VideoTimelineOptions : public OptionEditorMiniPage #endif Glib::file_test (filename, Glib::FILE_TEST_EXISTS|Glib::FILE_TEST_IS_EXECUTABLE) )) { - UIConfiguration::instance().set_xjadeo_binary (filename); + _rc_config->set_xjadeo_binary (filename); } } } @@ -1656,7 +1666,7 @@ class VideoTimelineOptions : public OptionEditorMiniPage _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()); + _custom_xjadeo_path.set_text (_rc_config->get_xjadeo_binary()); } } @@ -1813,7 +1823,7 @@ private: class MidiPortOptions : public OptionEditorMiniPage, public sigc::trackable { public: - MidiPortOptions() { + MidiPortOptions() : refill_id (-1) { setup_midi_port_view (midi_output_view, false); setup_midi_port_view (midi_input_view, true); @@ -1843,13 +1853,15 @@ class MidiPortOptions : public OptionEditorMiniPage, public sigc::trackable midi_output_view.show (); midi_input_view.show (); - table.signal_show().connect (sigc::mem_fun (*this, &MidiPortOptions::on_show)); + table.signal_map().connect (sigc::mem_fun (*this, &MidiPortOptions::on_map)); + table.signal_unmap().connect (sigc::mem_fun (*this, &MidiPortOptions::on_unmap)); } void parameter_changed (string const&) {} void set_state_from_config() {} - void on_show () { + void on_map () { + refill (); AudioEngine::instance()->PortRegisteredOrUnregistered.connect (connections, @@ -1866,6 +1878,10 @@ class MidiPortOptions : public OptionEditorMiniPage, public sigc::trackable gui_context()); } + void on_unmap () { + connections.drop_connections (); + } + void refill () { if (refill_midi_ports (true, midi_input_view)) { @@ -1878,6 +1894,8 @@ class MidiPortOptions : public OptionEditorMiniPage, public sigc::trackable } else { output_label.hide (); } + + refill_id = -1; } private: @@ -1891,7 +1909,8 @@ class MidiPortOptions : public OptionEditorMiniPage, public sigc::trackable add (music_data); add (control_data); add (selection); - add (name); + add (fullname); + add (shortname); add (filler); } @@ -1899,7 +1918,8 @@ class MidiPortOptions : public OptionEditorMiniPage, public sigc::trackable Gtk::TreeModelColumn music_data; Gtk::TreeModelColumn control_data; Gtk::TreeModelColumn selection; - Gtk::TreeModelColumn name; + Gtk::TreeModelColumn fullname; + Gtk::TreeModelColumn shortname; Gtk::TreeModelColumn filler; }; @@ -1908,6 +1928,7 @@ class MidiPortOptions : public OptionEditorMiniPage, public sigc::trackable Gtk::TreeView midi_output_view; Gtk::Label input_label; Gtk::Label output_label; + int refill_id; void setup_midi_port_view (Gtk::TreeView&, bool with_selection); bool refill_midi_ports (bool for_input, Gtk::TreeView&); @@ -1927,7 +1948,7 @@ MidiPortOptions::setup_midi_port_view (Gtk::TreeView& view, bool with_selection) TreeViewColumn* col; Gtk::Label* l; - pretty_name_column = view.append_column_editable (_("Name (click to edit)"), midi_port_columns.pretty_name) - 1; + pretty_name_column = view.append_column_editable (_("Name (click twice to edit)"), midi_port_columns.pretty_name) - 1; col = manage (new TreeViewColumn ("", midi_port_columns.music_data)); col->set_alignment (ALIGN_CENTER); @@ -1977,8 +1998,8 @@ MidiPortOptions::setup_midi_port_view (Gtk::TreeView& view, bool with_selection) toggle_cell->signal_toggled().connect (sigc::bind (sigc::mem_fun (*this, &MidiPortOptions::midi_selection_column_toggled), &view)); } - view.get_selection()->set_mode (SELECTION_NONE); - view.set_tooltip_column (4); /* port "real" name */ + view.get_selection()->set_mode (SELECTION_SINGLE); + view.set_tooltip_column (5); /* port short name */ view.get_column(0)->set_resizable (true); view.get_column(0)->set_expand (true); } @@ -2007,8 +2028,7 @@ MidiPortOptions::refill_midi_ports (bool for_input, Gtk::TreeView& view) PortManager::MidiPortInformation mpi (AudioEngine::instance()->midi_port_information (*s)); - if (mpi.pretty_name.empty()) { - /* vanished since get_known_midi_ports() */ + if (!mpi.exists) { continue; } @@ -2022,7 +2042,8 @@ MidiPortOptions::refill_midi_ports (bool for_input, Gtk::TreeView& view) row[midi_port_columns.music_data] = mpi.properties & MidiPortMusic; row[midi_port_columns.control_data] = mpi.properties & MidiPortControl; row[midi_port_columns.selection] = mpi.properties & MidiPortSelection; - row[midi_port_columns.name] = *s; + row[midi_port_columns.fullname] = *s; + row[midi_port_columns.shortname] = AudioEngine::instance()->short_port_name_from_port_name (*s); } view.set_model (model); @@ -2044,9 +2065,9 @@ MidiPortOptions::midi_music_column_toggled (string const & path, TreeView* view) /* don't reset model - wait for MidiPortInfoChanged signal */ if (new_value) { - ARDOUR::AudioEngine::instance()->add_midi_port_flags ((*iter)[midi_port_columns.name], MidiPortMusic); + ARDOUR::AudioEngine::instance()->add_midi_port_flags ((*iter)[midi_port_columns.fullname], MidiPortMusic); } else { - ARDOUR::AudioEngine::instance()->remove_midi_port_flags ((*iter)[midi_port_columns.name], MidiPortMusic); + ARDOUR::AudioEngine::instance()->remove_midi_port_flags ((*iter)[midi_port_columns.fullname], MidiPortMusic); } } @@ -2064,9 +2085,9 @@ MidiPortOptions::midi_control_column_toggled (string const & path, TreeView* vie /* don't reset model - wait for MidiPortInfoChanged signal */ if (new_value) { - ARDOUR::AudioEngine::instance()->add_midi_port_flags ((*iter)[midi_port_columns.name], MidiPortControl); + ARDOUR::AudioEngine::instance()->add_midi_port_flags ((*iter)[midi_port_columns.fullname], MidiPortControl); } else { - ARDOUR::AudioEngine::instance()->remove_midi_port_flags ((*iter)[midi_port_columns.name], MidiPortControl); + ARDOUR::AudioEngine::instance()->remove_midi_port_flags ((*iter)[midi_port_columns.fullname], MidiPortControl); } } @@ -2084,9 +2105,9 @@ MidiPortOptions::midi_selection_column_toggled (string const & path, TreeView* v /* don't reset model - wait for MidiSelectionPortsChanged signal */ if (new_value) { - ARDOUR::AudioEngine::instance()->add_midi_port_flags ((*iter)[midi_port_columns.name], MidiPortSelection); + ARDOUR::AudioEngine::instance()->add_midi_port_flags ((*iter)[midi_port_columns.fullname], MidiPortSelection); } else { - ARDOUR::AudioEngine::instance()->remove_midi_port_flags ((*iter)[midi_port_columns.name], MidiPortSelection); + ARDOUR::AudioEngine::instance()->remove_midi_port_flags ((*iter)[midi_port_columns.fullname], MidiPortSelection); } } @@ -2099,14 +2120,7 @@ MidiPortOptions::pretty_name_edit (std::string const & path, string const & new_ return; } - boost::shared_ptr backend = ARDOUR::AudioEngine::instance()->current_backend(); - if (backend) { - ARDOUR::PortEngine::PortHandle ph = backend->get_port_by_name ((*iter)[midi_port_columns.name]); - if (ph) { - backend->set_port_property (ph, "http://jackaudio.org/metadata/pretty-name", new_text, ""); - (*iter)[midi_port_columns.pretty_name] = new_text; - } - } + AudioEngine::instance()->set_port_pretty_name ((*iter)[midi_port_columns.fullname], new_text); } /*============*/ @@ -2114,7 +2128,11 @@ MidiPortOptions::pretty_name_edit (std::string const & path, string const & new_ RCOptionEditor::RCOptionEditor () : OptionEditorContainer (Config, string_compose (_("%1 Preferences"), PROGRAM_NAME)) - , Tabbable (*this, _("Preferences")) /* pack self-as-vbox into tabbable */ + , Tabbable (*this, _("Preferences") +#ifdef MIXBUS + , false // detached by default (first start, no instant.xml) +#endif + ) /* pack self-as-vbox into tabbable */ , _rc_config (Config) , _mixer_strip_visibility ("mixer-element-visibility") { @@ -2124,7 +2142,6 @@ RCOptionEditor::RCOptionEditor () uint32_t hwcpus = hardware_concurrency (); BoolOption* bo; - BoolComboOption* bco; if (hwcpus > 1) { add_option (_("General"), new OptionEditorHeading (_("DSP CPU Utilization"))); @@ -2163,50 +2180,14 @@ RCOptionEditor::RCOptionEditor () _("Increasing the cache size uses more memory to store waveform images, which can improve graphical performance.")); add_option (_("General"), sics); - add_option (_("General"), new OptionEditorHeading (S_("Options|Undo"))); - - add_option (_("General"), new UndoOptions (_rc_config)); - - add_option (_("General"), - new BoolOption ( - "verify-remove-last-capture", - _("Verify removal of last capture"), - sigc::mem_fun (*_rc_config, &RCConfiguration::get_verify_remove_last_capture), - sigc::mem_fun (*_rc_config, &RCConfiguration::set_verify_remove_last_capture) - )); - - add_option (_("General"), new OptionEditorHeading (_("Session Management"))); + add_option (_("General"), new OptionEditorHeading (_("Engine"))); add_option (_("General"), new BoolOption ( - "periodic-safety-backups", - _("Make periodic backups of the session file"), - sigc::mem_fun (*_rc_config, &RCConfiguration::get_periodic_safety_backups), - sigc::mem_fun (*_rc_config, &RCConfiguration::set_periodic_safety_backups) - )); - - add_option (_("General"), - new BoolOption ( - "only-copy-imported-files", - _("Always copy imported files"), - sigc::mem_fun (UIConfiguration::instance(), &UIConfiguration::get_only_copy_imported_files), - sigc::mem_fun (UIConfiguration::instance(), &UIConfiguration::set_only_copy_imported_files) - )); - - add_option (_("General"), new DirectoryOption ( - X_("default-session-parent-dir"), - _("Default folder for new sessions:"), - sigc::mem_fun (*_rc_config, &RCConfiguration::get_default_session_parent_dir), - sigc::mem_fun (*_rc_config, &RCConfiguration::set_default_session_parent_dir) - )); - - add_option (_("General"), - new SpinOption ( - "max-recent-sessions", - _("Maximum number of recent sessions"), - sigc::mem_fun (*_rc_config, &RCConfiguration::get_max_recent_sessions), - sigc::mem_fun (*_rc_config, &RCConfiguration::set_max_recent_sessions), - 0, 1000, 1, 20 + "try-autostart-engine", + _("Try to auto-launch audio/midi engine"), + sigc::mem_fun (*_rc_config, &RCConfiguration::get_try_autostart_engine), + sigc::mem_fun (*_rc_config, &RCConfiguration::set_try_autostart_engine) )); add_option (_("General"), new OptionEditorHeading (_("Automation"))); @@ -2260,7 +2241,54 @@ RCOptionEditor::RCOptionEditor () add_option (_("General"), slts); } // !mixbus -#ifdef ENABLE_NLS + add_option (_("General/Session"), new OptionEditorHeading (S_("Options|Undo"))); + + add_option (_("General/Session"), new UndoOptions (_rc_config)); + + add_option (_("General/Session"), + new BoolOption ( + "verify-remove-last-capture", + _("Verify removal of last capture"), + sigc::mem_fun (*_rc_config, &RCConfiguration::get_verify_remove_last_capture), + sigc::mem_fun (*_rc_config, &RCConfiguration::set_verify_remove_last_capture) + )); + + add_option (_("General/Session"), new OptionEditorHeading (_("Session Management"))); + + add_option (_("General/Session"), + new BoolOption ( + "periodic-safety-backups", + _("Make periodic backups of the session file"), + sigc::mem_fun (*_rc_config, &RCConfiguration::get_periodic_safety_backups), + sigc::mem_fun (*_rc_config, &RCConfiguration::set_periodic_safety_backups) + )); + + add_option (_("General/Session"), + new BoolOption ( + "only-copy-imported-files", + _("Always copy imported files"), + sigc::mem_fun (UIConfiguration::instance(), &UIConfiguration::get_only_copy_imported_files), + sigc::mem_fun (UIConfiguration::instance(), &UIConfiguration::set_only_copy_imported_files) + )); + + add_option (_("General/Session"), new DirectoryOption ( + X_("default-session-parent-dir"), + _("Default folder for new sessions:"), + sigc::mem_fun (*_rc_config, &RCConfiguration::get_default_session_parent_dir), + sigc::mem_fun (*_rc_config, &RCConfiguration::set_default_session_parent_dir) + )); + + add_option (_("General/Session"), + new SpinOption ( + "max-recent-sessions", + _("Maximum number of recent sessions"), + sigc::mem_fun (*_rc_config, &RCConfiguration::get_max_recent_sessions), + sigc::mem_fun (*_rc_config, &RCConfiguration::set_max_recent_sessions), + 0, 1000, 1, 20 + )); + + +#if ENABLE_NLS add_option (_("General/Translation"), new OptionEditorHeading (_("Internationalization"))); @@ -2275,19 +2303,6 @@ RCOptionEditor::RCOptionEditor () add_option (_("General/Translation"), bo); - _l10n = new ComboOption ( - "locale-mode", - _("Localization"), - sigc::mem_fun (UIConfiguration::instance(), &UIConfiguration::get_locale_mode), - sigc::mem_fun (UIConfiguration::instance(), &UIConfiguration::set_locale_mode) - ); - - _l10n->add (ARDOUR::SET_LC_ALL, _("Set complete locale")); - _l10n->add (ARDOUR::SET_LC_MESSAGES, _("Enable only message translation")); - _l10n->add (ARDOUR::SET_LC_MESSAGES_AND_LC_NUMERIC, _("Translate messages and format numeric format")); - _l10n->set_note (_("This setting is provided for plugin compatibility. e.g. some plugins on some systems expect the decimal point to be a dot.")); - - add_option (_("General/Translation"), _l10n); parameter_changed ("enable-translation"); #endif // ENABLE_NLS @@ -2296,14 +2311,6 @@ RCOptionEditor::RCOptionEditor () add_option (_("Editor"), new OptionEditorHeading (_("General"))); - add_option (_("Editor"), - new BoolOption ( - "rubberbanding-snaps-to-grid", - _("Snap rubberband to grid"), - sigc::mem_fun (UIConfiguration::instance(), &UIConfiguration::get_rubberbanding_snaps_to_grid), - sigc::mem_fun (UIConfiguration::instance(), &UIConfiguration::set_rubberbanding_snaps_to_grid) - )); - bo = new BoolOption ( "name-new-markers", _("Prompt for new marker names"), @@ -2322,6 +2329,33 @@ RCOptionEditor::RCOptionEditor () sigc::mem_fun (UIConfiguration::instance(), &UIConfiguration::set_draggable_playhead) )); + ComboOption* dps = new ComboOption ( + "draggable-playhead-speed", + _("Playhead dragging speed (%)"), + sigc::mem_fun (UIConfiguration::instance(), &UIConfiguration::get_draggable_playhead_speed), + sigc::mem_fun (UIConfiguration::instance(), &UIConfiguration::set_draggable_playhead_speed) + ); + dps->add (0.05, _("5%")); + dps->add (0.1, _("10%")); + dps->add (0.25, _("25%")); + dps->add (0.5, _("50%")); + dps->add (1.0, _("100%")); + add_option (_("Editor"), dps); + + ComboOption* eet = new ComboOption ( + "extra-ui-extents-time", + _("Limit zooming & summary view to X minutes beyond session extents"), + sigc::mem_fun (UIConfiguration::instance(), &UIConfiguration::get_extra_ui_extents_time), + sigc::mem_fun (UIConfiguration::instance(), &UIConfiguration::set_extra_ui_extents_time) + ); + eet->add (1, _("1 minute")); + eet->add (2, _("2 minutes")); + eet->add (20, _("20 minutes")); + eet->add (60, _("1 hour")); + eet->add (60*2, _("2 hours")); + eet->add (60*24, _("24 hours")); + add_option (_("Editor"), eet); + if (!Profile->get_mixbus()) { add_option (_("Editor"), @@ -2385,6 +2419,16 @@ RCOptionEditor::RCOptionEditor () sigc::mem_fun (*_rc_config, &RCConfiguration::set_automation_follows_regions) )); + bo = new BoolOption ( + "new-automation-points-on-lane", + _("Ignore Y-axis click position when adding new automation-points"), + sigc::mem_fun (UIConfiguration::instance(), &UIConfiguration::get_new_automation_points_on_lane), + sigc::mem_fun (UIConfiguration::instance(), &UIConfiguration::set_new_automation_points_on_lane) + ); + add_option (_("Editor"), bo); + Gtkmm2ext::UI::instance()->set_tip (bo->tip_widget(), + _("When enabled The new points drawn in any automation lane will be placed on the existing line, regardless of mouse y-axis position.")); + ComboOption* fadeshape = new ComboOption ( "default-fade-shape", _("Default fade shape"), @@ -2403,16 +2447,19 @@ RCOptionEditor::RCOptionEditor () add_option (_("Editor"), fadeshape); - bco = new BoolComboOption ( - "use-overlap-equivalency", - _("Regions in edit groups are edited together"), - _("whenever they overlap in time"), - _("only if they have identical length and position"), - sigc::mem_fun (*_rc_config, &RCConfiguration::get_use_overlap_equivalency), - sigc::mem_fun (*_rc_config, &RCConfiguration::set_use_overlap_equivalency) + ComboOption *eqv = new ComboOption ( + "region-equivalency", + _("Regions in active edit groups are edited together"), + sigc::mem_fun (*_rc_config, &RCConfiguration::get_region_equivalence), + sigc::mem_fun (*_rc_config, &RCConfiguration::set_region_equivalence) ); - add_option (_("Editor"), bco); + eqv->add (Overlap, _("whenever they overlap in time")); + eqv->add (Enclosed, _("if either encloses the other")); + eqv->add (Exact, _("only if they have identical length, position and origin")); + eqv->add (LayerTime, _("only if they have identical length, position and layer")); + + add_option (_("Editor"), eqv); ComboOption* lm = new ComboOption ( "layer-model", @@ -2425,24 +2472,124 @@ RCOptionEditor::RCOptionEditor () lm->add (Manual, _("manual layering")); add_option (_("Editor"), lm); + add_option (_("Editor"), new OptionEditorHeading (_("Split/Separate"))); + + ComboOption *rras = new ComboOption ( + "range-selection-after-separate", + _("After a Separate operation, in Range mode"), + sigc::mem_fun (*_rc_config, &RCConfiguration::get_range_selection_after_split), + sigc::mem_fun (*_rc_config, &RCConfiguration::set_range_selection_after_split)); + + rras->add(ClearSel, _("Clear the Range Selection")); + rras->add(PreserveSel, _("Preserve the Range Selection")); + rras->add(ForceSel, _("Force-Select the regions under the range. (this might cause a tool change)")); + add_option (_("Editor"), rras); + ComboOption *rsas = new ComboOption ( "region-selection-after-split", - _("After splitting selected regions, select"), + _("After a Split operation, in Object mode"), sigc::mem_fun (*_rc_config, &RCConfiguration::get_region_selection_after_split), sigc::mem_fun (*_rc_config, &RCConfiguration::set_region_selection_after_split)); // TODO: decide which of these modes are really useful - rsas->add(None, _("no regions")); - // rsas->add(NewlyCreatedLeft, _("newly-created regions before the split")); - // rsas->add(NewlyCreatedRight, _("newly-created regions after the split")); - rsas->add(NewlyCreatedBoth, _("newly-created regions")); + rsas->add(None, _("Clear the Selected Regions")); + rsas->add(NewlyCreatedLeft, _("Select only the newly-created regions BEFORE the split point")); + rsas->add(NewlyCreatedRight, _("Select only the newly-created regions AFTER the split point")); + rsas->add(NewlyCreatedBoth, _("Select the newly-created regions")); // rsas->add(Existing, _("unmodified regions in the existing selection")); // rsas->add(ExistingNewlyCreatedLeft, _("existing selection and newly-created regions before the split")); // rsas->add(ExistingNewlyCreatedRight, _("existing selection and newly-created regions after the split")); - rsas->add(ExistingNewlyCreatedBoth, _("existing selection and newly-created regions")); + rsas->add(ExistingNewlyCreatedBoth, _("Preserve the existing selection, AND select all newly-created regions")); add_option (_("Editor"), rsas); + add_option (_("Editor/Snap"), new OptionEditorHeading (_("General Snap options:"))); + + add_option (_("Editor/Snap"), + new SpinOption ( + "snap-threshold", + _("Snap Threshold (pixels)"), + sigc::mem_fun (UIConfiguration::instance(), &UIConfiguration::get_snap_threshold), + sigc::mem_fun (UIConfiguration::instance(), &UIConfiguration::set_snap_threshold), + 10, 200, + 1, 10 + )); + + add_option (_("Editor/Snap"), + new BoolOption ( + "show-snapped-cursor", + _("Show \"snapped cursor\""), + sigc::mem_fun (UIConfiguration::instance(), &UIConfiguration::get_show_snapped_cursor), + sigc::mem_fun (UIConfiguration::instance(), &UIConfiguration::set_show_snapped_cursor) + )); + + add_option (_("Editor/Snap"), + new BoolOption ( + "rubberbanding-snaps-to-grid", + _("Snap rubberband selection to grid"), + sigc::mem_fun (UIConfiguration::instance(), &UIConfiguration::get_rubberbanding_snaps_to_grid), + sigc::mem_fun (UIConfiguration::instance(), &UIConfiguration::set_rubberbanding_snaps_to_grid) + )); + + add_option (_("Editor/Snap"), + new BoolOption ( + "grid-follows-internal", + _("Grid switches to alternate selection for Internal Edit tools"), + sigc::mem_fun (UIConfiguration::instance(), &UIConfiguration::get_grid_follows_internal), + sigc::mem_fun (UIConfiguration::instance(), &UIConfiguration::set_grid_follows_internal) + )); + + add_option (_("Editor/Snap"), + new BoolOption ( + "rulers-follow-grid", + _("Rulers automatically change to follow the Grid mode selection"), + sigc::mem_fun (UIConfiguration::instance(), &UIConfiguration::get_rulers_follow_grid), + sigc::mem_fun (UIConfiguration::instance(), &UIConfiguration::set_rulers_follow_grid) + )); + + add_option (_("Editor/Snap"), new OptionEditorHeading (_("When \"Snap\" is enabled, snap to:"))); + + + add_option (_("Editor/Snap"), + new BoolOption ( + "snap-to-marks", + _("Markers"), + sigc::mem_fun (UIConfiguration::instance(), &UIConfiguration::get_snap_to_marks), + sigc::mem_fun (UIConfiguration::instance(), &UIConfiguration::set_snap_to_marks) + )); + + add_option (_("Editor/Snap"), + new BoolOption ( + "snap-to-region-sync", + _("Region Sync Points"), + sigc::mem_fun (UIConfiguration::instance(), &UIConfiguration::get_snap_to_region_sync), + sigc::mem_fun (UIConfiguration::instance(), &UIConfiguration::set_snap_to_region_sync) + )); + + add_option (_("Editor/Snap"), + new BoolOption ( + "snap-to-region-start", + _("Region Starts"), + sigc::mem_fun (UIConfiguration::instance(), &UIConfiguration::get_snap_to_region_start), + sigc::mem_fun (UIConfiguration::instance(), &UIConfiguration::set_snap_to_region_start) + )); + + add_option (_("Editor/Snap"), + new BoolOption ( + "snap-to-region-end", + _("Region Ends"), + sigc::mem_fun (UIConfiguration::instance(), &UIConfiguration::get_snap_to_region_end), + sigc::mem_fun (UIConfiguration::instance(), &UIConfiguration::set_snap_to_region_end) + )); + + add_option (_("Editor/Snap"), + new BoolOption ( + "snap-to-grid", + _("Grid"), + sigc::mem_fun (UIConfiguration::instance(), &UIConfiguration::get_snap_to_grid), + sigc::mem_fun (UIConfiguration::instance(), &UIConfiguration::set_snap_to_grid) + )); + add_option (_("Editor/Modifiers"), new OptionEditorHeading (_("Keyboard Modifiers"))); add_option (_("Editor/Modifiers"), new KeyboardOptions); add_option (_("Editor/Modifiers"), new OptionEditorBlank ()); @@ -2528,7 +2675,7 @@ RCOptionEditor::RCOptionEditor () add_option (_("Mixer"), pa); - add_option (_("Mixer"), new OptionEditorHeading (_("Default track / bus muting options"))); + add_option (_("Mixer"), new OptionEditorHeading (_("Default Track / Bus Muting Options"))); add_option (_("Mixer"), new BoolOption ( @@ -2611,13 +2758,17 @@ RCOptionEditor::RCOptionEditor () add_option (_("Signal Flow"), new OptionEditorHeading (_("Track and Bus Connections"))); - add_option (_("Signal Flow"), - new BoolOption ( + bo = new BoolOption ( "auto-connect-standard-busses", - _("Auto-connect master/monitor busses"), + _("Auto-connect main output (master or monitor) bus to physical ports"), sigc::mem_fun (*_rc_config, &RCConfiguration::get_auto_connect_standard_busses), sigc::mem_fun (*_rc_config, &RCConfiguration::set_auto_connect_standard_busses) - )); + ); + add_option (_("Signal Flow"), bo); + Gtkmm2ext::UI::instance()->set_tip (bo->tip_widget(), + _("When enabled the main output bus is auto-connected to the first N physical ports. " + "If the session has a monitor-section, the monitor-bus output is conneced the the hardware playback ports, " + "otherwise the master-bus output is directly used for playback.")); ComboOption* iac = new ComboOption ( "input-auto-connect", @@ -2646,7 +2797,7 @@ RCOptionEditor::RCOptionEditor () bo = new BoolOption ( "strict-io", - _("Use 'Strict-I/O' for new tracks or Busses"), + _("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) ); @@ -2766,37 +2917,24 @@ RCOptionEditor::RCOptionEditor () sigc::mem_fun (UIConfiguration::instance(), &UIConfiguration::set_sound_midi_notes) )); - ComboOption* audition_synth = new ComboOption ( - "midi-audition-synth-uri", - _("MIDI Audition Synth (LV2)"), - sigc::mem_fun (*_rc_config, &RCConfiguration::get_midi_audition_synth_uri), - sigc::mem_fun (*_rc_config, &RCConfiguration::set_midi_audition_synth_uri) - ); - - audition_synth->add(X_(""), _("None")); - PluginInfoList all_plugs; - PluginManager& manager (PluginManager::instance()); -#ifdef LV2_SUPPORT - all_plugs.insert (all_plugs.end(), manager.lv2_plugin_info().begin(), manager.lv2_plugin_info().end()); - - for (PluginInfoList::const_iterator i = all_plugs.begin(); i != all_plugs.end(); ++i) { - if (manager.get_status (*i) == PluginManager::Hidden) continue; - if (!(*i)->is_instrument()) continue; - if ((*i)->type != ARDOUR::LV2) continue; - if ((*i)->name.length() > 46) { - audition_synth->add((*i)->unique_id, (*i)->name.substr (0, 44) + "..."); - } else { - audition_synth->add((*i)->unique_id, (*i)->name); - } - } -#endif - - add_option (_("MIDI"), audition_synth); - /* Click */ add_option (_("Metronome"), new OptionEditorHeading (_("Metronome"))); add_option (_("Metronome"), new ClickOptions (_rc_config)); + add_option (_("Metronome"), new OptionEditorHeading (_("Options"))); + + bo = new BoolOption ( + "click-record-only", + _("Enable metronome only while recording"), + sigc::mem_fun (*_rc_config, &RCConfiguration::get_click_record_only), + sigc::mem_fun (*_rc_config, &RCConfiguration::set_click_record_only) + ); + + Gtkmm2ext::UI::instance()->set_tip (bo->tip_widget(), + string_compose (_("When enabled the metronome will remain silent if %1 is not recording."), PROGRAM_NAME)); + add_option (_("Metronome"), bo); + add_option (_("Metronome"), new OptionEditorBlank ()); + /* Meters */ @@ -2879,6 +3017,24 @@ RCOptionEditor::RCOptionEditor () add_option (S_("Preferences|Metering"), mvu); + HSliderOption *mpks = new HSliderOption("meter-peak", + _("Peak indicator threshold [dBFS]"), + sigc::mem_fun (UIConfiguration::instance(), &UIConfiguration::get_meter_peak), + sigc::mem_fun (UIConfiguration::instance(), &UIConfiguration::set_meter_peak), + -10, 0, .1, .1 + ); + + Gtkmm2ext::UI::instance()->set_tip ( + mpks->tip_widget(), + _("Specify the audio signal level in dBFS at and above which the meter-peak indicator will flash red.")); + + add_option (S_("Preferences|Metering"), mpks); + + OptionEditorHeading* default_meter_head = new OptionEditorHeading (_("Default Meter Types")); + default_meter_head->set_note (_("These settings apply to newly created tracks and busses. For the Master bus, this will be when a new session is created.")); + + add_option (S_("Preferences|Metering"), default_meter_head); + ComboOption* mtm = new ComboOption ( "meter-type-master", _("Default Meter Type for Master Bus"), @@ -2899,7 +3055,7 @@ RCOptionEditor::RCOptionEditor () ComboOption* mtb = new ComboOption ( "meter-type-bus", - _("Default Meter Type for Busses"), + _("Default meter type for busses"), sigc::mem_fun (*_rc_config, &RCConfiguration::get_meter_type_bus), sigc::mem_fun (*_rc_config, &RCConfiguration::set_meter_type_bus) ); @@ -2916,7 +3072,7 @@ RCOptionEditor::RCOptionEditor () ComboOption* mtt = new ComboOption ( "meter-type-track", - _("Default Meter Type for Tracks"), + _("Default meter type for tracks"), sigc::mem_fun (*_rc_config, &RCConfiguration::get_meter_type_track), sigc::mem_fun (*_rc_config, &RCConfiguration::set_meter_type_track) ); @@ -2925,19 +3081,6 @@ RCOptionEditor::RCOptionEditor () add_option (S_("Preferences|Metering"), mtt); - HSliderOption *mpks = new HSliderOption("meter-peak", - _("Peak threshold [dBFS]"), - sigc::mem_fun (UIConfiguration::instance(), &UIConfiguration::get_meter_peak), - sigc::mem_fun (UIConfiguration::instance(), &UIConfiguration::set_meter_peak), - -10, 0, .1, .1 - ); - - Gtkmm2ext::UI::instance()->set_tip ( - mpks->tip_widget(), - _("Specify the audio signal level in dBFS at and above which the meter-peak indicator will flash red.")); - - add_option (S_("Preferences|Metering"), mpks); - add_option (S_("Preferences|Metering"), new OptionEditorHeading (_("Post Export Analysis"))); add_option (S_("Preferences|Metering"), @@ -2991,7 +3134,7 @@ RCOptionEditor::RCOptionEditor () sigc::mem_fun (*_rc_config, &RCConfiguration::set_quieten_at_speed) ); Gtkmm2ext::UI::instance()->set_tip (bo->tip_widget(), - _("When enabled rhis will reduce the unpleasant increase in perceived volume " + _("When enabled this will reduce the unpleasant increase in perceived volume " "that occurs when fast-forwarding or rewinding through some kinds of audio")); add_option (_("Transport"), bo); @@ -3065,16 +3208,9 @@ RCOptionEditor::RCOptionEditor () /* SYNC */ - add_option (_("Sync"), new OptionEditorHeading (_("External Syncronization"))); - - _sync_source = new ComboOption ( - "sync-source", - _("External timecode source"), - sigc::mem_fun (*_rc_config, &RCConfiguration::get_sync_source), - sigc::mem_fun (*_rc_config, &RCConfiguration::set_sync_source) - ); + add_option (_("Sync"), new OptionEditorHeading (_("Transport Masters"))); - add_option (_("Sync"), _sync_source); + add_option (_("Sync"), new WidgetOption (X_("foo"), X_("Transport Masters"), _transport_masters_widget)); _sync_framerate = new BoolOption ( "timecode-sync-frame-rate", @@ -3092,64 +3228,6 @@ RCOptionEditor::RCOptionEditor () add_option (_("Sync"), _sync_framerate); - _sync_genlock = new BoolOption ( - "timecode-source-is-synced", - _("Sync-lock timecode to clock (disable drift compensation)"), - sigc::mem_fun (*_rc_config, &RCConfiguration::get_timecode_source_is_synced), - sigc::mem_fun (*_rc_config, &RCConfiguration::set_timecode_source_is_synced) - ); - Gtkmm2ext::UI::instance()->set_tip - (_sync_genlock->tip_widget(), - string_compose (_("When enabled %1 will never varispeed when slaved to external timecode. " - "Sync Lock indicates that the selected external timecode source shares clock-sync " - "(Black & Burst, Wordclock, etc) with the audio interface. " - "This option disables drift compensation. The transport speed is fixed at 1.0. " - "Vari-speed LTC will be ignored and cause drift." - "\n\n" - "When disabled %1 will compensate for potential drift, regardless if the " - "timecode sources shares clock sync." - ), PROGRAM_NAME)); - - - add_option (_("Sync"), _sync_genlock); - - _sync_source_2997 = new BoolOption ( - "timecode-source-2997", - _("Lock to 29.9700 fps instead of 30000/1001"), - sigc::mem_fun (*_rc_config, &RCConfiguration::get_timecode_source_2997), - sigc::mem_fun (*_rc_config, &RCConfiguration::set_timecode_source_2997) - ); - Gtkmm2ext::UI::instance()->set_tip - (_sync_source_2997->tip_widget(), - _("When enabled the external timecode source is assumed to use 29.97 fps instead of 30000/1001.\n" - "SMPTE 12M-1999 specifies 29.97df as 30000/1001. The spec further mentions that " - "drop-frame timecode has an accumulated error of -86ms over a 24-hour period.\n" - "Drop-frame timecode would compensate exactly for a NTSC color frame rate of 30 * 0.9990 (ie 29.970000). " - "That is not the actual rate. However, some vendors use that rate - despite it being against the specs - " - "because the variant of using exactly 29.97 fps has zero timecode drift.\n" - )); - - add_option (_("Sync"), _sync_source_2997); - - add_option (_("Sync/LTC"), new OptionEditorHeading (_("Linear Timecode (LTC) Reader"))); - - _ltc_port = new ComboStringOption ( - "ltc-source-port", - _("LTC incoming port"), - sigc::mem_fun (*_rc_config, &RCConfiguration::get_ltc_source_port), - sigc::mem_fun (*_rc_config, &RCConfiguration::set_ltc_source_port) - ); - - vector physical_inputs; - physical_inputs.push_back (_("None")); - AudioEngine::instance()->get_physical_inputs (DataType::AUDIO, physical_inputs); - _ltc_port->set_popdown_strings (physical_inputs); - - populate_sync_options (); - AudioEngine::instance()->Running.connect (engine_started_connection, MISSING_INVALIDATOR, boost::bind (&RCOptionEditor::populate_sync_options, this), gui_context()); - - add_option (_("Sync/LTC"), _ltc_port); - add_option (_("Sync/LTC"), new OptionEditorHeading (_("Linear Timecode (LTC) Generator"))); add_option (_("Sync/LTC"), @@ -3183,7 +3261,6 @@ RCOptionEditor::RCOptionEditor () add_option (_("Sync/LTC"), _ltc_volume_slider); - add_option (_("Sync/MIDI"), new OptionEditorHeading (_("MIDI Beat Clock (Mclk) Generator"))); add_option (_("Sync/MIDI"), @@ -3237,7 +3314,7 @@ RCOptionEditor::RCOptionEditor () _("Inbound MMC device ID"), sigc::mem_fun (*_rc_config, &RCConfiguration::get_mmc_receive_device_id), sigc::mem_fun (*_rc_config, &RCConfiguration::set_mmc_receive_device_id), - 0, 128, 1, 10 + 0, 127, 1, 10 )); add_option (_("Sync/MIDI"), @@ -3246,7 +3323,7 @@ RCOptionEditor::RCOptionEditor () _("Outbound MMC device ID"), sigc::mem_fun (*_rc_config, &RCConfiguration::get_mmc_send_device_id), sigc::mem_fun (*_rc_config, &RCConfiguration::set_mmc_send_device_id), - 0, 128, 1, 10 + 0, 127, 1, 10 )); @@ -3260,7 +3337,7 @@ RCOptionEditor::RCOptionEditor () add_option (_("MIDI Ports"), new BoolOption ( - "get-midi-input-follows-selection", + "midi-input-follows-selection", _("MIDI input follows MIDI track selection"), sigc::mem_fun (*_rc_config, &RCConfiguration::get_midi_input_follows_selection), sigc::mem_fun (*_rc_config, &RCConfiguration::set_midi_input_follows_selection) @@ -3313,6 +3390,23 @@ RCOptionEditor::RCOptionEditor () Gtkmm2ext::UI::instance()->set_tip (bo->tip_widget(), _("When enabled plugins will be activated when they are added to tracks/busses. When disabled plugins will be left inactive when they are added to tracks/busses")); + ComboOption* lna = new ComboOption ( + "limit-n-automatables", + _("Limit automatable parameters per plugin"), + sigc::mem_fun (*_rc_config, &RCConfiguration::get_limit_n_automatables), + sigc::mem_fun (*_rc_config, &RCConfiguration::set_limit_n_automatables) + ); + lna->add (0, _("Unlimited")); + lna->add (64, _("64 parameters")); + lna->add (128, _("128 parameters")); + lna->add (256, _("256 parameters")); + lna->add (512, _("512 parameters")); + lna->add (999, _("999 parameters")); + add_option (_("Plugins"), lna); + Gtkmm2ext::UI::instance()->set_tip (lna->tip_widget(), + _("Some Plugins expose an unreasonable amount of control-inputs. This option limits the number of parameters that can are listed as automatable without restricting the number of total controls.\n\nThis reduces lag in the GUI and shortens excessively long drop-down lists for plugins with a large number of control ports.\n\nNote: This only affects newly added plugins and is applied to plugin on session-reload. Already automated parameters are retained.")); + + #if (defined WINDOWS_VST_SUPPORT || defined MACVST_SUPPORT || defined LXVST_SUPPORT) add_option (_("Plugins/VST"), new OptionEditorHeading (_("VST"))); #if 0 @@ -3542,6 +3636,14 @@ RCOptionEditor::RCOptionEditor () sigc::mem_fun (UIConfiguration::instance(), &UIConfiguration::set_blink_rec_arm) )); + add_option (_("Appearance"), + new BoolOption ( + "blink-alert-indicators", + _("Blink Alert Indicators"), + sigc::mem_fun (UIConfiguration::instance(), &UIConfiguration::get_blink_alert_indicators), + sigc::mem_fun (UIConfiguration::instance(), &UIConfiguration::set_blink_alert_indicators) + )); + #ifndef __APPLE__ /* font scaling does nothing with GDK/Quartz */ @@ -3654,6 +3756,23 @@ RCOptionEditor::RCOptionEditor () sigc::mem_fun (UIConfiguration::instance(), &UIConfiguration::set_never_display_periodic_midi) )); + + add_option (_("Appearance/Editor"), + new BoolOption ( + "use-note-bars-for-velocity", + _("Show velocity horizontally inside notes"), + sigc::mem_fun (UIConfiguration::instance(), &UIConfiguration::get_use_note_bars_for_velocity), + sigc::mem_fun (UIConfiguration::instance(), &UIConfiguration::set_use_note_bars_for_velocity) + )); + + add_option (_("Appearance/Editor"), + new BoolOption ( + "use-note-color-for-velocity", + _("Use colors to show note velocity"), + sigc::mem_fun (UIConfiguration::instance(), &UIConfiguration::get_use_note_color_for_velocity), + sigc::mem_fun (UIConfiguration::instance(), &UIConfiguration::set_use_note_color_for_velocity) + )); + add_option (_("Appearance/Editor"), new OptionEditorBlank ()); /* The names of these controls must be the same as those given in MixerStrip @@ -3679,11 +3798,24 @@ RCOptionEditor::RCOptionEditor () add_option (_("Appearance/Mixer"), new BoolOption ( "default-narrow_ms", - _("Use narrow strips in the mixer by default"), + _("Use narrow strips in the mixer for new strips by default"), sigc::mem_fun (UIConfiguration::instance(), &UIConfiguration::get_default_narrow_ms), sigc::mem_fun (UIConfiguration::instance(), &UIConfiguration::set_default_narrow_ms) )); + ComboOption* mic = new ComboOption ( + "max-inline-controls", + _("Limit inline-mixer-strip controls per plugin"), + sigc::mem_fun (UIConfiguration::instance(), &UIConfiguration::get_max_inline_controls), + sigc::mem_fun (UIConfiguration::instance(), &UIConfiguration::set_max_inline_controls) + ); + mic->add (0, _("Unlimited")); + mic->add (16, _("16 parameters")); + mic->add (32, _("32 parameters")); + mic->add (64, _("64 parameters")); + mic->add (128, _("128 parameters")); + add_option (_("Appearance/Mixer"), mic); + add_option (_("Appearance/Mixer"), new OptionEditorBlank ()); add_option (_("Appearance/Toolbar"), new OptionEditorHeading (_("Main Transport Toolbar Items"))); @@ -3740,7 +3872,7 @@ RCOptionEditor::RCOptionEditor () add_option (_("Appearance/Toolbar"), new ColumVisibilityOption ( - "action-table-columns", _("Lua Action Script Button Visibility"), 4, + "action-table-columns", _("Display Action-Buttons"), 4, sigc::mem_fun (UIConfiguration::instance(), &UIConfiguration::get_action_table_columns), sigc::mem_fun (UIConfiguration::instance(), &UIConfiguration::set_action_table_columns) ) @@ -3748,14 +3880,6 @@ RCOptionEditor::RCOptionEditor () add_option (_("Appearance/Toolbar"), new OptionEditorBlank ()); - OptionEditorHeading* quirks_head = new OptionEditorHeading (_("Various Workarounds for Windowing Systems")); - - quirks_head->set_note (string_compose (_("Rules for closing, minimizing, maximizing, and stay-on-top can vary\n\ -with each version of your OS, and the preferences that you've set in your OS.\n\n\ -You can adjust the options, below, to change how %1's windows and dialogs behave.\n\n\ -These settings will only take effect after %1 is restarted.\n\ - "), PROGRAM_NAME)); - /* and now the theme manager */ add_option (_("Appearance/Theme"), new OptionEditorHeading (_("Theme"))); @@ -3767,6 +3891,13 @@ These settings will only take effect after %1 is restarted.\n\ sigc::mem_fun (UIConfiguration::instance(), &UIConfiguration::set_flat_buttons) )); + add_option (_("Appearance/Theme"), new BoolOption ( + "boxy-buttons", + _("Draw \"boxy\" buttons"), + sigc::mem_fun (UIConfiguration::instance(), &UIConfiguration::get_boxy_buttons), + sigc::mem_fun (UIConfiguration::instance(), &UIConfiguration::set_boxy_buttons) + )); + add_option (_("Appearance/Theme"), new BoolOption ( "meter-style-led", _("LED meter style"), @@ -3814,6 +3945,14 @@ These settings will only take effect after %1 is restarted.\n\ /* Quirks */ + OptionEditorHeading* quirks_head = new OptionEditorHeading (_("Various Workarounds for Windowing Systems")); + + quirks_head->set_note (string_compose (_("Rules for closing, minimizing, maximizing, and stay-on-top can vary \ +with each version of your OS, and the preferences that you've set in your OS.\n\n\ +You can adjust the options, below, to change how %1's windows and dialogs behave.\n\n\ +These settings will only take effect after %1 is restarted.\n\ + "), PROGRAM_NAME)); + add_option (_("Appearance/Quirks"), quirks_head); bo = new BoolOption ( @@ -3871,7 +4010,6 @@ These settings will only take effect after %1 is restarted.\n\ //trigger some parameter-changed messages which affect widget-visibility or -sensitivity parameter_changed ("send-ltc"); parameter_changed ("sync-source"); - parameter_changed ("use-monitor-bus"); parameter_changed ("open-gui-after-adding-plugin"); XMLNode* node = ARDOUR_UI::instance()->preferences_settings(); @@ -3885,6 +4023,13 @@ These settings will only take effect after %1 is restarted.\n\ set_current_page (_("General")); } +void +RCOptionEditor::set_session (Session *s) +{ + SessionHandlePtr::set_session (s); + _transport_masters_widget.set_session (s); +} + void RCOptionEditor::parameter_changed (string const & p) { @@ -3894,27 +4039,16 @@ RCOptionEditor::parameter_changed (string const & p) bool const s = Config->get_use_monitor_bus (); if (!s) { /* we can't use this if we don't have a monitor bus */ - Config->set_solo_control_is_listen_control (false); + Config->set_solo_control_is_listen_control (false); // XXX } _solo_control_is_listen_control->set_sensitive (s); _listen_position->set_sensitive (s); } else if (p == "sync-source") { - _sync_source->set_sensitive (true); - if (_session) { - _sync_source->set_sensitive (!_session->config.get_external_sync()); - } - switch(Config->get_sync_source()) { - case ARDOUR::MTC: - case ARDOUR::LTC: - _sync_genlock->set_sensitive (true); + boost::shared_ptr tm (TransportMasterManager::instance().current()); + if (boost::dynamic_pointer_cast (tm)) { _sync_framerate->set_sensitive (true); - _sync_source_2997->set_sensitive (true); - break; - default: - _sync_genlock->set_sensitive (false); + } else { _sync_framerate->set_sensitive (false); - _sync_source_2997->set_sensitive (false); - break; } } else if (p == "send-ltc") { bool const s = Config->get_send_ltc (); @@ -3923,10 +4057,6 @@ RCOptionEditor::parameter_changed (string const & p) } else if (p == "open-gui-after-adding-plugin" || p == "show-inline-display-by-default") { #if (defined LV2_SUPPORT && defined LV2_EXTENDED) _plugin_prefer_inline->set_sensitive (UIConfiguration::instance().get_open_gui_after_adding_plugin() && UIConfiguration::instance().get_show_inline_display_by_default()); -#endif -#ifdef ENABLE_NLS - } else if (p == "enable-translation") { - _l10n->set_sensitive (ARDOUR::translations_are_enabled ()); #endif } } @@ -3953,7 +4083,7 @@ void RCOptionEditor::clear_au_blacklist () { void RCOptionEditor::edit_lxvst_path () { Glib::RefPtr win = get_parent_window (); - Gtkmm2ext::PathsDialog *pd = new Gtkmm2ext::PathsDialog ( + PathsDialog *pd = new PathsDialog ( *current_toplevel(), _("Set Linux VST Search Path"), _rc_config->get_plugin_path_lxvst(), PluginManager::instance().get_default_lxvst_path() @@ -3962,12 +4092,20 @@ void RCOptionEditor::edit_lxvst_path () { pd->hide(); if (r == RESPONSE_ACCEPT) { _rc_config->set_plugin_path_lxvst(pd->get_serialized_paths()); + + MessageDialog msg (_("Re-scan Plugins now?"), + false /*no markup*/, Gtk::MESSAGE_QUESTION, Gtk::BUTTONS_YES_NO, true /*modal*/); + msg.set_default_response (Gtk::RESPONSE_YES); + if (msg.run() == Gtk::RESPONSE_YES) { + msg.hide (); + plugin_scan_refresh (); + } } delete pd; } void RCOptionEditor::edit_vst_path () { - Gtkmm2ext::PathsDialog *pd = new Gtkmm2ext::PathsDialog ( + PathsDialog *pd = new PathsDialog ( *current_toplevel(), _("Set Windows VST Search Path"), _rc_config->get_plugin_path_vst(), PluginManager::instance().get_default_windows_vst_path() @@ -3976,31 +4114,15 @@ void RCOptionEditor::edit_vst_path () { pd->hide(); if (r == RESPONSE_ACCEPT) { _rc_config->set_plugin_path_vst(pd->get_serialized_paths()); - } - delete pd; -} - - -void -RCOptionEditor::populate_sync_options () -{ - vector sync_opts = ARDOUR::get_available_sync_options (); - - _sync_source->clear (); - - for (vector::iterator i = sync_opts.begin(); i != sync_opts.end(); ++i) { - _sync_source->add (*i, sync_source_to_string (*i)); - } - - if (sync_opts.empty()) { - _sync_source->set_sensitive(false); - } else { - if (std::find(sync_opts.begin(), sync_opts.end(), _rc_config->get_sync_source()) == sync_opts.end()) { - _rc_config->set_sync_source(sync_opts.front()); + MessageDialog msg (_("Re-scan Plugins now?"), + false /*no markup*/, Gtk::MESSAGE_QUESTION, Gtk::BUTTONS_YES_NO, true /*modal*/); + msg.set_default_response (Gtk::RESPONSE_YES); + if (msg.run() == Gtk::RESPONSE_YES) { + msg.hide (); + plugin_scan_refresh (); } } - - parameter_changed ("sync-source"); + delete pd; } Gtk::Window*