From 03bd02f8e8db8c0e0857e6c01b7d1bf2b3ee6625 Mon Sep 17 00:00:00 2001 From: Ben Loftis Date: Thu, 23 May 2024 07:33:32 -0500 Subject: [PATCH] L: rough-cut of rc_options dialog (remove lots of stuff!) --- gtk2_ardour/livetrax_rc_option_editor.cc | 2538 ---------------------- 1 file changed, 2538 deletions(-) diff --git a/gtk2_ardour/livetrax_rc_option_editor.cc b/gtk2_ardour/livetrax_rc_option_editor.cc index 4aec00824d..7b67ab7745 100644 --- a/gtk2_ardour/livetrax_rc_option_editor.cc +++ b/gtk2_ardour/livetrax_rc_option_editor.cc @@ -92,178 +92,6 @@ using namespace ARDOUR; using namespace ARDOUR_UI_UTILS; using namespace ArdourWidgets; -class ClickOptions : public OptionEditorMiniPage -{ -public: - ClickOptions (RCConfiguration* c) - : _rc_config (c) - , _click_browse_button (_("Browse...")) - , _click_emphasis_browse_button (_("Browse...")) - { - // TODO get rid of GTK -> use OptionEditor Widgets - Table* t = &table; - Label* l; - int row = 0; - - 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, 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, 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, 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, row, row + 1, FILL); - ++row; - - l = manage (left_aligned_label (_("Emphasis audio file:"))); - 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, row, row + 1, FILL); - ++row; - - _click_fader = new FaderOption ( - "click-gain", - _("Gain level"), - sigc::mem_fun (*_rc_config, &RCConfiguration::get_click_gain), - sigc::mem_fun (*_rc_config, &RCConfiguration::set_click_gain) - ); - - _click_fader->add_to_page (this); - _click_fader->set_state_from_config (); - - _click_path_entry.signal_activate().connect (sigc::mem_fun (*this, &ClickOptions::click_changed)); - _click_emphasis_path_entry.signal_activate().connect (sigc::mem_fun (*this, &ClickOptions::click_emphasis_changed)); - - 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 (_rc_config->get_use_click_emphasis ()); - - } else { - _use_default_click_check_button.set_active (false); - _use_emphasis_on_click_check_button.set_active (false); - } - } - - void parameter_changed (string const & p) - { - if (p == "click-sound") { - _click_path_entry.set_text (_rc_config->get_click_sound()); - } else if (p == "click-emphasis-sound") { - _click_emphasis_path_entry.set_text (_rc_config->get_click_emphasis_sound()); - } else if (p == "use-click-emphasis") { - bool x = _rc_config->get_use_click_emphasis (); - _use_emphasis_on_click_check_button.set_active (x); - } else if (p == "click-gain") { - _click_fader->set_state_from_config (); - } - } - - void set_state_from_config () - { - parameter_changed ("click-sound"); - parameter_changed ("click-emphasis-sound"); - parameter_changed ("use-click-emphasis"); - } - -private: - - void click_browse_clicked () - { - SoundFileChooser sfdb (_("Choose Click")); - - sfdb.show_all (); - sfdb.present (); - - if (sfdb.run () == RESPONSE_OK) { - click_chosen (sfdb.get_filename()); - } - } - - void click_chosen (string const & path) - { - _click_path_entry.set_text (path); - _rc_config->set_click_sound (path); - } - - void click_changed () - { - click_chosen (_click_path_entry.get_text ()); - } - - void click_emphasis_browse_clicked () - { - SoundFileChooser sfdb (_("Choose Click Emphasis")); - - sfdb.show_all (); - sfdb.present (); - - if (sfdb.run () == RESPONSE_OK) { - click_emphasis_chosen (sfdb.get_filename()); - } - } - - void click_emphasis_chosen (string const & path) - { - _click_emphasis_path_entry.set_text (path); - _rc_config->set_click_emphasis_sound (path); - } - - void click_emphasis_changed () - { - click_emphasis_chosen (_click_emphasis_path_entry.get_text ()); - } - - void use_default_click_toggled () - { - if (_use_default_click_check_button.get_active ()) { - _rc_config->set_click_sound (""); - _rc_config->set_click_emphasis_sound (""); - _click_path_entry.set_sensitive (false); - _click_emphasis_path_entry.set_sensitive (false); - _click_browse_button.set_sensitive (false); - _click_emphasis_browse_button.set_sensitive (false); - } else { - _click_path_entry.set_sensitive (true); - _click_emphasis_path_entry.set_sensitive (true); - _click_browse_button.set_sensitive (true); - _click_emphasis_browse_button.set_sensitive (true); - } - } - - void use_emphasis_on_click_toggled () - { - if (_use_emphasis_on_click_check_button.get_active ()) { - _rc_config->set_use_click_emphasis(true); - } else { - _rc_config->set_use_click_emphasis(false); - } - } - - RCConfiguration* _rc_config; - CheckButton _use_default_click_check_button; - CheckButton _use_emphasis_on_click_check_button; - Entry _click_path_entry; - Entry _click_emphasis_path_entry; - Button _click_browse_button; - Button _click_emphasis_browse_button; - FaderOption* _click_fader; -}; - class UndoOptions : public OptionEditorComponent { public: @@ -414,695 +242,6 @@ static const struct { { 0, 0 } }; - -class KeyboardOptions : public OptionEditorMiniPage -{ -public: - KeyboardOptions () - : _delete_button_adjustment (3, 1, 12) - , _delete_button_spin (_delete_button_adjustment) - , _edit_button_adjustment (3, 1, 5) - , _edit_button_spin (_edit_button_adjustment) - , _insert_note_button_adjustment (3, 1, 5) - , _insert_note_button_spin (_insert_note_button_adjustment) - { - // TODO get rid of GTK -> use OptionEditor Widgets - - const std::string restart_msg = _("\nChanges to this setting will only persist after your project has been saved."); - /* internationalize and prepare for use with combos */ - - vector dumb; - for (int i = 0; modifiers[i].name; ++i) { - dumb.push_back (S_(modifiers[i].name)); - } - - set_popdown_strings (_edit_modifier_combo, dumb); - _edit_modifier_combo.signal_changed().connect (sigc::mem_fun(*this, &KeyboardOptions::edit_modifier_chosen)); - Gtkmm2ext::UI::instance()->set_tip (_edit_modifier_combo, - (string_compose (_("Recommended Setting: %1 + button 3 (right mouse button)%2"), Keyboard::primary_modifier_name (), restart_msg))); - - Table* t = &table; - - int row = 0; - int col = 0; - - Label* l = manage (left_aligned_label (_("Select Keyboard layout:"))); - l->set_name ("OptionsLabel"); - - vector strs; - - for (map::iterator bf = Keyboard::binding_files.begin(); bf != Keyboard::binding_files.end(); ++bf) { - strs.push_back (bf->first); - } - - set_popdown_strings (_keyboard_layout_selector, strs); - _keyboard_layout_selector.set_active_text (Keyboard::current_binding_name()); - _keyboard_layout_selector.signal_changed().connect (sigc::mem_fun (*this, &KeyboardOptions::bindings_changed)); - - t->attach (*l, col + 1, col + 2, row, row + 1, FILL, FILL); - t->attach (_keyboard_layout_selector, col + 2, col + 3, row, row + 1, FILL | EXPAND, FILL); - - ++row; - col = 0; - - l = manage (left_aligned_label (string_compose ("%1", _("When Clicking:")))); - l->set_name ("OptionEditorHeading"); - l->set_use_markup (true); - t->attach (*l, col, col + 2, row, row + 1, FILL | EXPAND, FILL); - - ++row; - col = 1; - - l = manage (left_aligned_label (_("Edit using:"))); - l->set_name ("OptionsLabel"); - - t->attach (*l, col, col + 1, row, row + 1, FILL, FILL); - t->attach (_edit_modifier_combo, col + 1, col + 2, row, row + 1, FILL | EXPAND, FILL); - - l = manage (new Label (_("+ button"))); - l->set_name ("OptionsLabel"); - - t->attach (*l, col + 3, col + 4, row, row + 1, FILL, FILL); - t->attach (_edit_button_spin, col + 4, col + 5, row, row + 1, SHRINK , FILL); - - _edit_button_spin.set_name ("OptionsEntry"); - _edit_button_adjustment.signal_value_changed().connect (sigc::mem_fun(*this, &KeyboardOptions::edit_button_changed)); - - ++row; - col = 1; - - set_popdown_strings (_delete_modifier_combo, dumb); - _delete_modifier_combo.signal_changed().connect (sigc::mem_fun(*this, &KeyboardOptions::delete_modifier_chosen)); - Gtkmm2ext::UI::instance()->set_tip (_delete_modifier_combo, - (string_compose (_("Recommended Setting: %1 + button 3 (right mouse button)%2"), Keyboard::tertiary_modifier_name (), restart_msg))); - - l = manage (left_aligned_label (_("Delete using:"))); - l->set_name ("OptionsLabel"); - - t->attach (*l, col, col + 1, row, row + 1, FILL, FILL); - t->attach (_delete_modifier_combo, col + 1, col + 2, row, row + 1, FILL | EXPAND, FILL); - - l = manage (new Label (_("+ button"))); - l->set_name ("OptionsLabel"); - - t->attach (*l, col + 3, col + 4, row, row + 1, FILL, FILL); - t->attach (_delete_button_spin, col + 4, col + 5, row, row + 1, SHRINK, FILL); - - _delete_button_spin.set_name ("OptionsEntry"); - _delete_button_adjustment.signal_value_changed().connect (sigc::mem_fun(*this, &KeyboardOptions::delete_button_changed)); - - ++row; - col = 1; - - set_popdown_strings (_insert_note_modifier_combo, dumb); - _insert_note_modifier_combo.signal_changed().connect (sigc::mem_fun(*this, &KeyboardOptions::insert_note_modifier_chosen)); - Gtkmm2ext::UI::instance()->set_tip (_insert_note_modifier_combo, - (string_compose (_("Recommended Setting: %1 + button 1 (left mouse button)%2"), Keyboard::primary_modifier_name (), restart_msg))); - - l = manage (left_aligned_label (_("Insert note using:"))); - l->set_name ("OptionsLabel"); - - t->attach (*l, col, col + 1, row, row + 1, FILL, FILL); - t->attach (_insert_note_modifier_combo, col + 1, col + 2, row, row + 1, FILL | EXPAND, FILL); - - l = manage (new Label (_("+ button"))); - l->set_name ("OptionsLabel"); - - t->attach (*l, col + 3, col + 4, row, row + 1, FILL, FILL); - t->attach (_insert_note_button_spin, col + 4, col + 5, row, row + 1, SHRINK, FILL); - - _insert_note_button_spin.set_name ("OptionsEntry"); - _insert_note_button_adjustment.signal_value_changed().connect (sigc::mem_fun(*this, &KeyboardOptions::insert_note_button_changed)); - - ++row; - - l = manage (left_aligned_label (string_compose ("%1", _("When Beginning a Drag:")))); - l->set_name ("OptionEditorHeading"); - l->set_use_markup (true); - t->attach (*l, 0, 2, row, row + 1, FILL | EXPAND, FILL); - - ++row; - col = 1; - - /* copy modifier */ - set_popdown_strings (_copy_modifier_combo, dumb); - _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 __APPLE__ - Keyboard::secondary_modifier_name (), -#else - Keyboard::primary_modifier_name (), -#endif - restart_msg))); - - l = manage (left_aligned_label (_("Copy items using:"))); - l->set_name ("OptionsLabel"); - - t->attach (*l, col, col + 1, row, row + 1, FILL, FILL); - t->attach (_copy_modifier_combo, col + 1, col + 2, row, row + 1, FILL | EXPAND, FILL); - - ++row; - col = 1; - - /* slip_contents */ - set_popdown_strings (_slip_contents_combo, dumb); - _slip_contents_combo.signal_changed().connect (sigc::mem_fun(*this, &KeyboardOptions::slip_contents_modifier_chosen)); - Gtkmm2ext::UI::instance()->set_tip (_slip_contents_combo, - (string_compose (_("Recommended Setting: %1-%2%3"), Keyboard::primary_modifier_name (), Keyboard::tertiary_modifier_name (), restart_msg))); - - l = manage (left_aligned_label (_("Slip Contents using:"))); - l->set_name ("OptionsLabel"); - - t->attach (*l, col, col + 1, row, row + 1, FILL, FILL); - t->attach (_slip_contents_combo, col + 1, col + 2, row, row + 1, FILL | EXPAND, FILL); - - ++row; - col = 1; - - /* constraint modifier */ - set_popdown_strings (_constraint_modifier_combo, dumb); - _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 __APPLE__ - Keyboard::primary_modifier_name (), -#else - Keyboard::tertiary_modifier_name (), -#endif - restart_msg))); - - l = manage (left_aligned_label (_("Constrain drag using:"))); - l->set_name ("OptionsLabel"); - - t->attach (*l, col, col + 1, row, row + 1, FILL, FILL); - t->attach (_constraint_modifier_combo, col + 1, col + 2, row, row + 1, FILL | EXPAND, FILL); - - ++row; - col = 1; - - /* push points */ - set_popdown_strings (_push_points_combo, dumb); - _push_points_combo.signal_changed().connect (sigc::mem_fun(*this, &KeyboardOptions::push_points_modifier_chosen)); - - std::string mod_str = string_compose (X_("%1-%2"), Keyboard::primary_modifier_name (), Keyboard::level4_modifier_name ()); - Gtkmm2ext::UI::instance()->set_tip (_push_points_combo, - (string_compose (_("Recommended Setting: %1%2"), mod_str, restart_msg))); - - l = manage (left_aligned_label (_("Push points using:"))); - l->set_name ("OptionsLabel"); - - t->attach (*l, col, col + 1, row, row + 1, FILL, FILL); - t->attach (_push_points_combo, col + 1, col + 2, row, row + 1, FILL | EXPAND, FILL); - - ++row; - - l = manage (left_aligned_label (string_compose ("%1", _("When Beginning a Trim:")))); - l->set_name ("OptionEditorHeading"); - l->set_use_markup (true); - t->attach (*l, 0, 2, row, row + 1, FILL | EXPAND, FILL); - - ++row; - col = 1; - - /* anchored trim */ - set_popdown_strings (_trim_anchored_combo, dumb); - _trim_anchored_combo.signal_changed().connect (sigc::mem_fun(*this, &KeyboardOptions::trim_anchored_modifier_chosen)); - - mod_str = string_compose (X_("%1-%2"), Keyboard::primary_modifier_name (), Keyboard::tertiary_modifier_name ()); - Gtkmm2ext::UI::instance()->set_tip (_trim_anchored_combo, - (string_compose (_("Recommended Setting: %1%2"), mod_str, restart_msg))); - - l = manage (left_aligned_label (_("Anchored trim using:"))); - l->set_name ("OptionsLabel"); - - t->attach (*l, col, col + 1, row, row + 1, FILL, FILL); - ++col; - t->attach (_trim_anchored_combo, col, col + 1, row, row + 1, FILL | EXPAND, FILL); - - ++row; - col = 1; - - /* jump trim disabled for now - set_popdown_strings (_trim_jump_combo, dumb); - _trim_jump_combo.signal_changed().connect (sigc::mem_fun(*this, &KeyboardOptions::trim_jump_modifier_chosen)); - - l = manage (left_aligned_label (_("Jump after trim using:"))); - l->set_name ("OptionsLabel"); - - t->attach (*l, col, col + 1, row, row + 1, FILL, FILL); - ++col; - t->attach (_trim_jump_combo, col, col + 1, row, row + 1, FILL | EXPAND, FILL); - - ++row; - col = 1; - */ - - /* note resize relative */ - set_popdown_strings (_note_size_relative_combo, dumb); - _note_size_relative_combo.signal_changed().connect (sigc::mem_fun(*this, &KeyboardOptions::note_size_relative_modifier_chosen)); - Gtkmm2ext::UI::instance()->set_tip (_note_size_relative_combo, - (string_compose (_("Recommended Setting: %1%2"), Keyboard::tertiary_modifier_name (), restart_msg))); // XXX 2ndary - - l = manage (left_aligned_label (_("Resize notes relatively using:"))); - l->set_name ("OptionsLabel"); - - t->attach (*l, col, col + 1, row, row + 1, FILL, FILL); - ++col; - t->attach (_note_size_relative_combo, col, col + 1, row, row + 1, FILL | EXPAND, FILL); - - ++row; - - l = manage (left_aligned_label (string_compose ("%1", _("While Dragging:")))); - l->set_name ("OptionEditorHeading"); - l->set_use_markup (true); - t->attach (*l, 0, 2, row, row + 1, FILL | EXPAND, FILL); - - ++row; - col = 1; - - /* ignore snap */ - set_popdown_strings (_snap_modifier_combo, dumb); - _snap_modifier_combo.signal_changed().connect (sigc::mem_fun(*this, &KeyboardOptions::snap_modifier_chosen)); -#ifdef __APPLE__ - mod_str = string_compose (X_("%1-%2"), Keyboard::level4_modifier_name (), Keyboard::tertiary_modifier_name ()); -#else - mod_str = Keyboard::secondary_modifier_name(); -#endif - Gtkmm2ext::UI::instance()->set_tip (_snap_modifier_combo, - (string_compose (_("Recommended Setting: %1%2"), mod_str, restart_msg))); - - l = manage (left_aligned_label (_("Ignore snap using:"))); - l->set_name ("OptionsLabel"); - - t->attach (*l, col, col + 1, row, row + 1, FILL, FILL); - t->attach (_snap_modifier_combo, col + 1, col + 2, row, row + 1, FILL | EXPAND, FILL); - - ++row; - col = 1; - - /* 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 __APPLE__ - mod_str = Keyboard::level4_modifier_name (); -#else - mod_str = string_compose (X_("%1-%2"), Keyboard::secondary_modifier_name (), Keyboard::level4_modifier_name ()); -#endif - Gtkmm2ext::UI::instance()->set_tip (_snap_delta_combo, - (string_compose (_("Recommended Setting: %1%2"), mod_str, restart_msg))); - - l = manage (left_aligned_label (_("Snap relatively using:"))); - l->set_name ("OptionsLabel"); - - t->attach (*l, col, col + 1, row, row + 1, FILL, FILL); - t->attach (_snap_delta_combo, col + 1, col + 2, row, row + 1, FILL | EXPAND, FILL); - - ++row; - - l = manage (left_aligned_label (string_compose ("%1", _("While Trimming:")))); - l->set_name ("OptionEditorHeading"); - l->set_use_markup (true); - t->attach (*l, 0, 2, row, row + 1, FILL | EXPAND, FILL); - - ++row; - col = 1; - - /* trim_overlap */ - set_popdown_strings (_trim_overlap_combo, dumb); - _trim_overlap_combo.signal_changed().connect (sigc::mem_fun(*this, &KeyboardOptions::trim_overlap_modifier_chosen)); - - Gtkmm2ext::UI::instance()->set_tip (_trim_overlap_combo, - (string_compose (_("Recommended Setting: %1%2"), Keyboard::tertiary_modifier_name (), restart_msg))); - - l = manage (left_aligned_label (_("Resize overlapped regions using:"))); - l->set_name ("OptionsLabel"); - - t->attach (*l, col, col + 1, row, row + 1, FILL, FILL); - t->attach (_trim_overlap_combo, col + 1, col + 2, row, row + 1, FILL | EXPAND, FILL); - - ++row; - - l = manage (left_aligned_label (string_compose ("%1", _("While Dragging Control Points:")))); - l->set_name ("OptionEditorHeading"); - l->set_use_markup (true); - t->attach (*l, 0, 2, row, row + 1, FILL | EXPAND, FILL); - - ++row; - col = 1; - - /* fine adjust */ - set_popdown_strings (_fine_adjust_combo, dumb); - _fine_adjust_combo.signal_changed().connect (sigc::mem_fun(*this, &KeyboardOptions::fine_adjust_modifier_chosen)); - - mod_str = string_compose (X_("%1-%2"), Keyboard::primary_modifier_name (), Keyboard::secondary_modifier_name ()); // XXX just 2ndary ?! - Gtkmm2ext::UI::instance()->set_tip (_fine_adjust_combo, - (string_compose (_("Recommended Setting: %1%2"), mod_str, restart_msg))); - - l = manage (left_aligned_label (_("Fine adjust using:"))); - l->set_name ("OptionsLabel"); - - t->attach (*l, col, col + 1, row, row + 1, FILL, FILL); - t->attach (_fine_adjust_combo, col + 1, col + 2, row, row + 1, FILL | EXPAND, FILL); - - OptionEditorHeading* h = new OptionEditorHeading (_("Reset")); - h->add_to_page (this); - - RcActionButton* rb = new RcActionButton (_("Reset to recommended defaults"), - sigc::mem_fun (*this, &KeyboardOptions::reset_to_defaults)); - rb->add_to_page (this); - - set_state_from_config (); - } - - void parameter_changed (string const &) - { - /* XXX: these aren't really config options... */ - } - - void set_state_from_config () - { - _delete_button_adjustment.set_value (Keyboard::delete_button()); - _insert_note_button_adjustment.set_value (Keyboard::insert_note_button()); - _edit_button_adjustment.set_value (Keyboard::edit_button()); - - for (int x = 0; modifiers[x].name; ++x) { - if (modifiers[x].modifier == (guint) ArdourKeyboard::trim_overlap_modifier ()) { - _trim_overlap_combo.set_active_text (S_(modifiers[x].name)); - } - if (modifiers[x].modifier == Keyboard::delete_modifier ()) { - _delete_modifier_combo.set_active_text (S_(modifiers[x].name)); - } - if (modifiers[x].modifier == Keyboard::edit_modifier ()) { - _edit_modifier_combo.set_active_text (S_(modifiers[x].name)); - } - if (modifiers[x].modifier == Keyboard::insert_note_modifier ()) { - _insert_note_modifier_combo.set_active_text (S_(modifiers[x].name)); - } - if (modifiers[x].modifier == (guint) Keyboard::CopyModifier) { - _copy_modifier_combo.set_active_text (S_(modifiers[x].name)); - } - if (modifiers[x].modifier == (guint) ArdourKeyboard::constraint_modifier ()) { - _constraint_modifier_combo.set_active_text (S_(modifiers[x].name)); - } - if (modifiers[x].modifier == (guint) ArdourKeyboard::push_points_modifier ()) { - _push_points_combo.set_active_text (S_(modifiers[x].name)); - } - if (modifiers[x].modifier == (guint) ArdourKeyboard::slip_contents_modifier ()) { - _slip_contents_combo.set_active_text (S_(modifiers[x].name)); - } - if (modifiers[x].modifier == (guint) ArdourKeyboard::trim_anchored_modifier ()) { - _trim_anchored_combo.set_active_text (S_(modifiers[x].name)); - } -#if 0 - if (modifiers[x].modifier == (guint) Keyboard::trim_jump_modifier ()) { - _trim_jump_combo.set_active_text (S_(modifiers[x].name)); - } -#endif - if (modifiers[x].modifier == (guint) ArdourKeyboard::note_size_relative_modifier ()) { - _note_size_relative_combo.set_active_text (S_(modifiers[x].name)); - } - if (modifiers[x].modifier == (guint) Keyboard::snap_modifier ()) { - _snap_modifier_combo.set_active_text (S_(modifiers[x].name)); - } - if (modifiers[x].modifier == (guint) Keyboard::snap_delta_modifier ()) { - _snap_delta_combo.set_active_text (S_(modifiers[x].name)); - } - if (modifiers[x].modifier == (guint) ArdourKeyboard::fine_adjust_modifier ()) { - _fine_adjust_combo.set_active_text (S_(modifiers[x].name)); - } - } - } - - void add_to_page (OptionEditorPage* p) - { - int const n = p->table.property_n_rows(); - p->table.resize (n + 1, 3); - p->table.attach (box, 1, 3, n, n + 1, FILL | EXPAND, SHRINK, 0, 0); - } - -private: - - void bindings_changed () - { - string const txt = _keyboard_layout_selector.get_active_text(); - - /* XXX: config...? for all this keyboard stuff */ - - for (map::iterator i = Keyboard::binding_files.begin(); i != Keyboard::binding_files.end(); ++i) { - if (txt == i->first) { - if (Keyboard::load_keybindings (i->second)) { - Keyboard::save_keybindings (); - } - } - } - } - - void edit_modifier_chosen () - { - string const txt = _edit_modifier_combo.get_active_text(); - - for (int i = 0; modifiers[i].name; ++i) { - if (txt == S_(modifiers[i].name)) { - Keyboard::set_edit_modifier (modifiers[i].modifier); - break; - } - } - } - - void delete_modifier_chosen () - { - string const txt = _delete_modifier_combo.get_active_text(); - - for (int i = 0; modifiers[i].name; ++i) { - if (txt == S_(modifiers[i].name)) { - Keyboard::set_delete_modifier (modifiers[i].modifier); - break; - } - } - } - - void copy_modifier_chosen () - { - string const txt = _copy_modifier_combo.get_active_text(); - - for (int i = 0; modifiers[i].name; ++i) { - if (txt == S_(modifiers[i].name)) { - Keyboard::set_copy_modifier (modifiers[i].modifier); - break; - } - } - } - - void insert_note_modifier_chosen () - { - string const txt = _insert_note_modifier_combo.get_active_text(); - - for (int i = 0; modifiers[i].name; ++i) { - if (txt == S_(modifiers[i].name)) { - Keyboard::set_insert_note_modifier (modifiers[i].modifier); - break; - } - } - } - - void snap_modifier_chosen () - { - string const txt = _snap_modifier_combo.get_active_text(); - - for (int i = 0; modifiers[i].name; ++i) { - if (txt == S_(modifiers[i].name)) { - Keyboard::set_snap_modifier (modifiers[i].modifier); - break; - } - } - } - - void snap_delta_modifier_chosen () - { - string const txt = _snap_delta_combo.get_active_text(); - - for (int i = 0; modifiers[i].name; ++i) { - if (txt == S_(modifiers[i].name)) { - Keyboard::set_snap_delta_modifier (modifiers[i].modifier); - break; - } - } - } - - void constraint_modifier_chosen () - { - string const txt = _constraint_modifier_combo.get_active_text(); - - for (int i = 0; modifiers[i].name; ++i) { - if (txt == S_(modifiers[i].name)) { - ArdourKeyboard::set_constraint_modifier (modifiers[i].modifier); - break; - } - } - } - - void slip_contents_modifier_chosen () - { - string const txt = _slip_contents_combo.get_active_text(); - - for (int i = 0; modifiers[i].name; ++i) { - if (txt == S_(modifiers[i].name)) { - ArdourKeyboard::set_slip_contents_modifier (modifiers[i].modifier); - break; - } - } - } - - void trim_overlap_modifier_chosen () - { - string const txt = _trim_overlap_combo.get_active_text(); - - for (int i = 0; modifiers[i].name; ++i) { - if (txt == S_(modifiers[i].name)) { - ArdourKeyboard::set_trim_overlap_modifier (modifiers[i].modifier); - break; - } - } - } - - void trim_anchored_modifier_chosen () - { - string const txt = _trim_anchored_combo.get_active_text(); - - for (int i = 0; modifiers[i].name; ++i) { - if (txt == S_(modifiers[i].name)) { - ArdourKeyboard::set_trim_anchored_modifier (modifiers[i].modifier); - break; - } - } - } - - void fine_adjust_modifier_chosen () - { - string const txt = _fine_adjust_combo.get_active_text(); - - for (int i = 0; modifiers[i].name; ++i) { - if (txt == S_(modifiers[i].name)) { - ArdourKeyboard::set_fine_adjust_modifier (modifiers[i].modifier); - break; - } - } - } - - void push_points_modifier_chosen () - { - string const txt = _push_points_combo.get_active_text(); - - for (int i = 0; modifiers[i].name; ++i) { - if (txt == S_(modifiers[i].name)) { - ArdourKeyboard::set_push_points_modifier (modifiers[i].modifier); - break; - } - } - } - - void note_size_relative_modifier_chosen () - { - string const txt = _note_size_relative_combo.get_active_text(); - - for (int i = 0; modifiers[i].name; ++i) { - if (txt == S_(modifiers[i].name)) { - ArdourKeyboard::set_note_size_relative_modifier (modifiers[i].modifier); - break; - } - } - } - - void delete_button_changed () - { - Keyboard::set_delete_button (_delete_button_spin.get_value_as_int()); - } - - void edit_button_changed () - { - Keyboard::set_edit_button (_edit_button_spin.get_value_as_int()); - } - - void insert_note_button_changed () - { - Keyboard::set_insert_note_button (_insert_note_button_spin.get_value_as_int()); - } - - void reset_to_defaults () - { - /* when clicking*/ - Keyboard::set_edit_modifier (Keyboard::PrimaryModifier); - Keyboard::set_edit_button (3); - Keyboard::set_delete_modifier (Keyboard::TertiaryModifier); - Keyboard::set_delete_button (3); - Keyboard::set_insert_note_modifier (Keyboard::PrimaryModifier); - Keyboard::set_insert_note_button (1); - - /* when beginning a drag */ -#ifdef __APPLE__ - Keyboard::set_copy_modifier (Keyboard::SecondaryModifier); -#else - Keyboard::set_copy_modifier (Keyboard::PrimaryModifier); -#endif - -#ifdef __APPLE__ - ArdourKeyboard::set_constraint_modifier (Keyboard::PrimaryModifier); -#else - ArdourKeyboard::set_constraint_modifier (Keyboard::TertiaryModifier); -#endif - ArdourKeyboard::set_push_points_modifier (Keyboard::PrimaryModifier | Keyboard::Level4Modifier); - - /* when beginning a trim */ - ArdourKeyboard::set_slip_contents_modifier (Keyboard::PrimaryModifier | Keyboard::TertiaryModifier); - ArdourKeyboard::set_trim_anchored_modifier (Keyboard::PrimaryModifier | Keyboard::TertiaryModifier); - ArdourKeyboard::set_note_size_relative_modifier (Keyboard::TertiaryModifier); // XXX better: 2ndary - - /* while dragging */ -#ifdef __APPLE__ - Keyboard::set_snap_modifier (Keyboard::TertiaryModifier); -#else - Keyboard::set_snap_modifier (Keyboard::SecondaryModifier); -#endif -#ifdef __APPLE__ - Keyboard::set_snap_delta_modifier (Keyboard::Level4Modifier); -#else - Keyboard::set_snap_delta_modifier (Keyboard::SecondaryModifier | Keyboard::Level4Modifier); -#endif - - /* while trimming */ - ArdourKeyboard::set_trim_overlap_modifier (Keyboard::TertiaryModifier); - - /* while dragging ctrl points */ - ArdourKeyboard::set_fine_adjust_modifier (/*Keyboard::PrimaryModifier | */Keyboard::SecondaryModifier); // XXX - - set_state_from_config (); - } - - ComboBoxText _keyboard_layout_selector; - ComboBoxText _edit_modifier_combo; - ComboBoxText _delete_modifier_combo; - ComboBoxText _copy_modifier_combo; - ComboBoxText _insert_note_modifier_combo; - ComboBoxText _snap_modifier_combo; - ComboBoxText _snap_delta_combo; - ComboBoxText _constraint_modifier_combo; - ComboBoxText _slip_contents_combo; - ComboBoxText _trim_overlap_combo; - ComboBoxText _trim_anchored_combo; - ComboBoxText _trim_jump_combo; - ComboBoxText _fine_adjust_combo; - ComboBoxText _push_points_combo; - ComboBoxText _note_size_relative_combo; - Adjustment _delete_button_adjustment; - SpinButton _delete_button_spin; - Adjustment _edit_button_adjustment; - SpinButton _edit_button_spin; - Adjustment _insert_note_button_adjustment; - SpinButton _insert_note_button_spin; - -}; - class FontScalingOptions : public HSliderOption { public: @@ -1142,30 +281,6 @@ class FontScalingOptions : public HSliderOption } }; -class PluginScanTimeOutSliderOption : public HSliderOption -{ -public: - PluginScanTimeOutSliderOption (RCConfiguration* c) - : HSliderOption ("vst-scan-timeout", _("Scan Time Out"), - sigc::mem_fun (*c, &RCConfiguration::get_plugin_scan_timeout), - sigc::mem_fun (*c, &RCConfiguration::set_plugin_scan_timeout), - 1, 900, 50, 50) - { - _label->set_alignment (1.0, 0.5); // match buttons below - _hscale.set_digits (0); - _hscale.set_draw_value(false); - _hscale.add_mark ( 10, Gtk::POS_TOP, _("1 sec")); - _hscale.add_mark (150, Gtk::POS_TOP, _("15 sec")); - _hscale.add_mark (300, Gtk::POS_TOP, _("30 sec")); - _hscale.add_mark (450, Gtk::POS_TOP, _("45 sec")); - _hscale.add_mark (600, Gtk::POS_TOP, _("1 min")); - _hscale.add_mark (900, Gtk::POS_TOP, _("1'30\"")); - - Gtkmm2ext::UI::instance()->set_tip(_hscale, - _("Specify the default timeout for plugin instantiation. Plugins that require more time to load will be ignored. A value of 0 disables the timeout.")); - } -}; - class ClipLevelOptions : public HSliderOption { public: @@ -1518,65 +633,6 @@ public: }; -class TriggerPortSelectOption : public PortSelectOption -{ -public: - TriggerPortSelectOption (RCConfiguration* c, SessionHandlePtr* shp) - : PortSelectOption (c, shp, - _("TriggerBoxes will be connected to this port when it is set."), - X_("default-trigger-input-port"), - _("Default trigger input:"), - ARDOUR::DataType::MIDI, - ARDOUR::PortFlags (ARDOUR::IsOutput|ARDOUR::IsTerminal)) { - /* cannot call from parent due to the method being pure virtual */ - update_port_combo (); - } - - void port_changed () - { - if (_ignore_change) { - return; - } - TreeModel::iterator active = _combo.get_active (); - string new_port = (*active)[_port_columns.full_name]; - _rc_config->set_default_trigger_input_port (new_port); - /* everything that needs it will pick up the new port via ParameterChanged */ - } - - void update_selection () - { - int n; - Gtk::TreeModel::Children children = _store->children(); - Gtk::TreeModel::Children::iterator i = children.begin(); - ++i; /* skip "Disconnected" */ - - std::string const& pn = _rc_config->get_default_trigger_input_port (); - std::shared_ptr port; - - PBD::Unwinder uw (_ignore_change, true); - - /* try match preference with available port-names */ - for (n = 1; i != children.end(); ++i, ++n) { - string port_name = (*i)[_port_columns.full_name]; - if (port_name == pn) { - _combo.set_active (n); - return; - } - } - - if (pn.empty ()) { - _combo.set_active (0); /* disconnected */ - } else { - /* The port is currently not available, retain preference */ - TreeModel::Row row = *_store->append (); - row[_port_columns.full_name] = pn; - row[_port_columns.short_name] = (pn).substr ((pn).find (':') + 1); - _combo.set_active (n); - } - } - -}; - class ControlSurfacesOptions : public OptionEditorMiniPage { public: @@ -1767,166 +823,6 @@ class ControlSurfacesOptions : public OptionEditorMiniPage Gtk::Button* edit_button; }; -class VideoTimelineOptions : public OptionEditorMiniPage -{ - public: - VideoTimelineOptions (RCConfiguration* c) - : _rc_config (c) - , _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 = &table; - int n = table.property_n_rows(); - - t->attach (_show_video_server_dialog_button, 1, 4, n, n + 1); - _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")); - ++n; - - 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 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:"))); - l->set_alignment (0, 0.5); - t->attach (*l, 1, 2, n, n + 1, FILL); - t->attach (_video_server_url_entry, 2, 4, n, n + 1, 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")); - ++n; - - l = manage (new Label (_("Video Folder:"))); - l->set_alignment (0, 0.5); - 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 unavailable. It is used for the local video-monitor and file-browsing when opening/adding a video file.")); - ++n; - - l = manage (new Label ("")); - t->attach (*l, 0, 4, n, n + 1, EXPAND | FILL); - ++n; - - l = manage (new Label (string_compose ("%1", _("Video Monitor")))); - l->set_use_markup (true); - l->set_alignment (0, 0.5); - t->attach (*l, 0, 4, n, n + 1, EXPAND | FILL); - ++n; - - 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, n, n + 1, FILL); - ++n; - - t->attach (_custom_xjadeo_path, 2, 3, n, n + 1, EXPAND|FILL); - 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, n, n + 1, 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)); - } - - void server_url_changed () - { - _rc_config->set_video_server_url (_video_server_url_entry.get_text()); - } - - void server_docroot_changed () - { - _rc_config->set_video_server_docroot (_video_server_docroot_entry.get_text()); - } - - void show_video_server_dialog_toggled () - { - bool const x = _show_video_server_dialog_button.get_active (); - _rc_config->set_show_video_server_dialog (x); - } - - void video_advanced_setup_toggled () - { - bool const x = _video_advanced_setup_button.get_active (); - _rc_config->set_video_advanced_setup(x); - } - - void custom_xjadeo_path_changed () - { - _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 (_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) { - 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) - )) { - _rc_config->set_xjadeo_binary (filename); - } - } - } - - void parameter_changed (string const & p) - { - if (p == "video-server-url") { - _video_server_url_entry.set_text (_rc_config->get_video_server_url()); - } else if (p == "video-server-docroot") { - _video_server_docroot_entry.set_text (_rc_config->get_video_server_docroot()); - } else if (p == "show-video-server-dialog") { - bool const x = _rc_config->get_show_video_server_dialog(); - _show_video_server_dialog_button.set_active (x); - } else if (p == "video-advanced-setup") { - bool const x = _rc_config->get_video_advanced_setup(); - _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 (_rc_config->get_xjadeo_binary()); - } - } - - void set_state_from_config () - { - parameter_changed ("video-server-url"); - parameter_changed ("video-server-docroot"); - parameter_changed ("video-monitor-setup-dialog"); - 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_server_dialog_button; - CheckButton _video_advanced_setup_button; - Button _xjadeo_browse_button; -}; - class ColumVisibilityOption : public Option { public: @@ -1993,370 +889,6 @@ class ColumVisibilityOption : public Option sigc::slot _set; }; - -/** A class which allows control of visibility of some editor components using - * a VisibilityGroup. The caller should pass in a `dummy' VisibilityGroup - * which has the correct members, but with null widget pointers. This - * class allows the user to set visibility of the members, the details - * of which are stored in a configuration variable which can be watched - * by parts of the editor that actually contain the widgets whose visibility - * is being controlled. - */ - -class VisibilityOption : public Option -{ -public: - /** @param name User-visible name for this group. - * @param g `Dummy' VisibilityGroup (as described above). - * @param get Method to get the value of the appropriate configuration variable. - * @param set Method to set the value of the appropriate configuration variable. - */ - VisibilityOption (string name, VisibilityGroup* g, sigc::slot get, sigc::slot set) - : Option (g->get_state_name(), name) - , _heading (name) - , _visibility_group (g) - , _get (get) - , _set (set) - { - /* Watch for changes made by the user to our members */ - _visibility_group->VisibilityChanged.connect_same_thread ( - _visibility_group_connection, sigc::bind (&VisibilityOption::changed, this) - ); - } - - void set_state_from_config () - { - /* Set our state from the current configuration */ - _visibility_group->set_state (_get ()); - } - - void add_to_page (OptionEditorPage* p) - { - _heading.add_to_page (p); - add_widget_to_page (p, _visibility_group->list_view ()); - } - - Gtk::Widget& tip_widget() { return *_visibility_group->list_view (); } - -private: - void changed () - { - /* The user has changed something, so reflect this change - in the RCConfiguration. - */ - _set (_visibility_group->get_state_value ()); - } - - OptionEditorHeading _heading; - VisibilityGroup* _visibility_group; - sigc::slot _get; - sigc::slot _set; - PBD::ScopedConnection _visibility_group_connection; -}; - - -class MidiPortOptions : public OptionEditorMiniPage, public sigc::trackable -{ - public: - MidiPortOptions() - : input_heading (_("MIDI Inputs")) - , output_heading (_("MIDI Outputs")) - , no_input_label (_("No MIDI Input (capture) devices found."), Gtk::ALIGN_START) - , no_output_label (_("No MIDI Output (playback) devices found."), Gtk::ALIGN_START) - { - setup_midi_port_view (midi_output_view, false); - setup_midi_port_view (midi_input_view, true); - - input_heading.add_to_page (this); - - input_scroller.add (midi_input_view); - input_scroller.set_policy (POLICY_NEVER, POLICY_AUTOMATIC); - input_scroller.set_size_request (-1, 180); - input_scroller.show (); - - int n = table.property_n_rows(); - table.attach (input_scroller, 0, 3, n, n + 1, FILL | EXPAND); - table.attach (no_input_label, 1, 3, n + 1, n + 2, FILL | EXPAND); - - output_heading.add_to_page (this); - - output_scroller.add (midi_output_view); - output_scroller.set_policy (POLICY_NEVER, POLICY_AUTOMATIC); - output_scroller.set_size_request (-1, 180); - output_scroller.show (); - - n = table.property_n_rows(); - table.attach (output_scroller, 0, 3, n, n + 1, FILL | EXPAND); - table.attach (no_output_label, 1, 3, n + 1, n + 2, FILL | EXPAND); - - midi_output_view.show (); - midi_input_view.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_map () { - refill (); - - AudioEngine::instance()->PortRegisteredOrUnregistered.connect (connections, - invalidator (*this), - boost::bind (&MidiPortOptions::refill, this), - gui_context()); - AudioEngine::instance()->MidiPortInfoChanged.connect (connections, - invalidator (*this), - boost::bind (&MidiPortOptions::refill, this), - gui_context()); - AudioEngine::instance()->MidiSelectionPortsChanged.connect (connections, - invalidator (*this), - boost::bind (&MidiPortOptions::refill, this), - gui_context()); - } - - void on_unmap () { - connections.drop_connections (); - } - - void refill () { - if (refill_midi_ports (true, midi_input_view)) { - no_input_label.hide (); - input_scroller.show (); - } else { - no_input_label.show (); - input_scroller.hide (); - } - if (refill_midi_ports (false, midi_output_view)) { - no_output_label.hide (); - output_scroller.show (); - } else { - no_output_label.show (); - output_scroller.hide (); - } - } - - private: - PBD::ScopedConnectionList connections; - - /* MIDI port management */ - struct MidiPortColumns : public Gtk::TreeModel::ColumnRecord { - - MidiPortColumns () { - add (pretty_name); - add (music_data); - add (control_data); - add (selection); - add (fullname); - add (shortname); - add (filler); - } - - Gtk::TreeModelColumn pretty_name; - Gtk::TreeModelColumn music_data; - Gtk::TreeModelColumn control_data; - Gtk::TreeModelColumn selection; - Gtk::TreeModelColumn fullname; - Gtk::TreeModelColumn shortname; - Gtk::TreeModelColumn filler; - }; - - MidiPortColumns midi_port_columns; - Gtk::TreeView midi_input_view; - Gtk::TreeView midi_output_view; - - Gtk::ScrolledWindow input_scroller; - Gtk::ScrolledWindow output_scroller; - OptionEditorHeading input_heading; - OptionEditorHeading output_heading; - - Gtk::Label no_input_label; - Gtk::Label no_output_label; - - void setup_midi_port_view (Gtk::TreeView&, bool with_selection); - bool refill_midi_ports (bool for_input, Gtk::TreeView&); - void pretty_name_edit (std::string const & path, std::string const & new_text, Gtk::TreeView*); - void midi_music_column_toggled (std::string const & path, Gtk::TreeView*); - void midi_control_column_toggled (std::string const & path, Gtk::TreeView*); - void midi_selection_column_toggled (std::string const & path, Gtk::TreeView*); -}; - -void -MidiPortOptions::setup_midi_port_view (Gtk::TreeView& view, bool with_selection) -{ - int pretty_name_column; - int music_column; - int control_column; - int selection_column = 0; - TreeViewColumn* col; - Gtk::Label* l; - - 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); - l = manage (new Label (_("Music Data"))); - set_tooltip (*l, string_compose (_("If ticked, %1 will consider this port to be a source of music performance data."), PROGRAM_NAME)); - col->set_widget (*l); - l->show (); - music_column = view.append_column (*col) - 1; - - col = manage (new TreeViewColumn ("", midi_port_columns.control_data)); - col->set_alignment (ALIGN_CENTER); - l = manage (new Label (_("Control Data"))); - set_tooltip (*l, string_compose (_("If ticked, %1 will consider this port to be a source of control data."), PROGRAM_NAME)); - col->set_widget (*l); - l->show (); - control_column = view.append_column (*col) - 1; - - if (with_selection) { - col = manage (new TreeViewColumn (_("Follow Selection"), midi_port_columns.selection)); - selection_column = view.append_column (*col) - 1; - l = manage (new Label (_("Follow Selection"))); - set_tooltip (*l, string_compose (_("If ticked, and \"MIDI input follows selection\" is enabled,\n%1 will automatically connect the first selected MIDI track to this port.\n"), PROGRAM_NAME)); - col->set_widget (*l); - l->show (); - } - - /* filler column so that the last real column doesn't expand */ - view.append_column ("", midi_port_columns.filler); - - CellRendererText* pretty_name_cell = dynamic_cast (view.get_column_cell_renderer (pretty_name_column)); - pretty_name_cell->property_editable() = true; - pretty_name_cell->signal_edited().connect (sigc::bind (sigc::mem_fun (*this, &MidiPortOptions::pretty_name_edit), &view)); - - CellRendererToggle* toggle_cell; - - toggle_cell = dynamic_cast (view.get_column_cell_renderer (music_column)); - toggle_cell->property_activatable() = true; - toggle_cell->signal_toggled().connect (sigc::bind (sigc::mem_fun (*this, &MidiPortOptions::midi_music_column_toggled), &view)); - - toggle_cell = dynamic_cast (view.get_column_cell_renderer (control_column)); - toggle_cell->property_activatable() = true; - toggle_cell->signal_toggled().connect (sigc::bind (sigc::mem_fun (*this, &MidiPortOptions::midi_control_column_toggled), &view)); - - if (with_selection) { - toggle_cell = dynamic_cast (view.get_column_cell_renderer (selection_column)); - toggle_cell->property_activatable() = true; - toggle_cell->signal_toggled().connect (sigc::bind (sigc::mem_fun (*this, &MidiPortOptions::midi_selection_column_toggled), &view)); - } - - 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); -} - -bool -MidiPortOptions::refill_midi_ports (bool for_input, Gtk::TreeView& view) -{ - using namespace ARDOUR; - - std::vector ports; - AudioEngine::instance()->get_configurable_midi_ports (ports, for_input); - - if (ports.empty()) { - view.hide (); - return false; - } - - view.unset_model (); - - Glib::RefPtr model = Gtk::ListStore::create (midi_port_columns); - - for (vector::const_iterator s = ports.begin(); s != ports.end(); ++s) { - - TreeModel::Row row = *(model->append()); - MidiPortFlags flags = AudioEngine::instance()->midi_port_metadata (*s); - std::string pn = AudioEngine::instance()->get_pretty_name_by_name (*s); - - row[midi_port_columns.music_data] = flags & MidiPortMusic; - row[midi_port_columns.control_data] = flags & MidiPortControl; - row[midi_port_columns.selection] = flags & MidiPortSelection; - row[midi_port_columns.fullname] = *s; - row[midi_port_columns.shortname] = AudioEngine::instance()->short_port_name_from_port_name (*s); - row[midi_port_columns.pretty_name] = pn.empty () ? row[midi_port_columns.shortname] : pn; - } - - view.set_model (model); - view.show (); - - return true; -} - -void -MidiPortOptions::midi_music_column_toggled (string const & path, TreeView* view) -{ - TreeIter iter = view->get_model()->get_iter (path); - - if (!iter) { - return; - } - - bool new_value = ! bool ((*iter)[midi_port_columns.music_data]); - - /* don't reset model - wait for MidiPortInfoChanged signal */ - - if (new_value) { - 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.fullname], MidiPortMusic); - } -} - -void -MidiPortOptions::midi_control_column_toggled (string const & path, TreeView* view) -{ - TreeIter iter = view->get_model()->get_iter (path); - - if (!iter) { - return; - } - - bool new_value = ! bool ((*iter)[midi_port_columns.control_data]); - - /* don't reset model - wait for MidiPortInfoChanged signal */ - - if (new_value) { - 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.fullname], MidiPortControl); - } -} - -void -MidiPortOptions::midi_selection_column_toggled (string const & path, TreeView* view) -{ - TreeIter iter = view->get_model()->get_iter (path); - - if (!iter) { - return; - } - - bool new_value = ! bool ((*iter)[midi_port_columns.selection]); - - /* don't reset model - wait for MidiSelectionPortsChanged signal */ - - if (new_value) { - 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.fullname], MidiPortSelection); - } -} - -void -MidiPortOptions::pretty_name_edit (std::string const & path, string const & new_text, Gtk::TreeView* view) -{ - TreeIter iter = view->get_model()->get_iter (path); - - if (!iter) { - return; - } - - AudioEngine::instance()->set_port_pretty_name ((*iter)[midi_port_columns.fullname], new_text); -} - RCOptionEditor::RCOptionEditor () : OptionEditorWindow (Config, _("Preferences")) , _rc_config (Config) @@ -2476,14 +1008,6 @@ RCOptionEditor::RCOptionEditor () sigc::mem_fun (UIConfiguration::instance(), &UIConfiguration::set_save_export_analysis_image) )); - add_option (_("General"), - new BoolOption ( - "save-export-mixer-screenshot", - _("Save Mixer screenshot after export"), - sigc::mem_fun (UIConfiguration::instance(), &UIConfiguration::get_save_export_mixer_screenshot), - sigc::mem_fun (UIConfiguration::instance(), &UIConfiguration::set_save_export_mixer_screenshot) - )); - #if defined PHONE_HOME && !defined MIXBUS add_option (_("General"), new OptionEditorHeading (_("New Version Check"))); bo = new BoolOption ( @@ -2533,27 +1057,6 @@ RCOptionEditor::RCOptionEditor () add_option (_("Appearance"), new OptionEditorHeading (_("Theme"))); - add_option (_("Appearance"), new BoolOption ( - "use-route-color-widely", - _("Color faders with track/bus colors"), - sigc::mem_fun (UIConfiguration::instance(), &UIConfiguration::get_use_route_color_widely), - sigc::mem_fun (UIConfiguration::instance(), &UIConfiguration::set_use_route_color_widely) - )); - - add_option (_("Appearance"), new BoolOption ( - "flat-buttons", - _("Draw \"flat\" buttons"), - sigc::mem_fun (UIConfiguration::instance(), &UIConfiguration::get_flat_buttons), - sigc::mem_fun (UIConfiguration::instance(), &UIConfiguration::set_flat_buttons) - )); - - add_option (_("Appearance"), 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"), new BoolOption ( "meter-style-led", _("LED meter style"), @@ -2561,21 +1064,6 @@ RCOptionEditor::RCOptionEditor () sigc::mem_fun (UIConfiguration::instance(), &UIConfiguration::set_meter_style_led) )); - if (!Profile->get_mixbus()) { - vector icon_sets = ::get_icon_sets (); - if (icon_sets.size() > 1) { - ComboOption* io = new ComboOption ( - "icon-set", _("Icon Set"), - sigc::mem_fun (UIConfiguration::instance(), &UIConfiguration::get_icon_set), - sigc::mem_fun (UIConfiguration::instance(), &UIConfiguration::set_icon_set) - ); - for (vector::const_iterator i = icon_sets.begin (); i != icon_sets.end (); ++i) { - io->add (*i, *i); - } - add_option (_("Appearance"), io); - } - } - add_option (_("Appearance"), new OptionEditorHeading (_("Graphical User Interface"))); add_option (_("Appearance"), @@ -2649,13 +1137,6 @@ RCOptionEditor::RCOptionEditor () add_option (_("Appearance/Editor"), new OptionEditorHeading (_("General"))); - add_option (_("Appearance/Editor"), - new BoolOption ( - "show-name-highlight", - _("Use name highlight bars in region displays (requires a restart)"), - sigc::mem_fun (UIConfiguration::instance(), &UIConfiguration::get_show_name_highlight), - sigc::mem_fun (UIConfiguration::instance(), &UIConfiguration::set_show_name_highlight) - )); add_option (_("Appearance/Editor"), new BoolOption ( @@ -2673,39 +1154,6 @@ RCOptionEditor::RCOptionEditor () sigc::mem_fun (UIConfiguration::instance(), &UIConfiguration::set_show_region_name) )); - add_option (_("Appearance/Editor"), - new BoolOption ( - "show-selection-marker", - _("Show Selection Marker"), - sigc::mem_fun (UIConfiguration::instance(), &UIConfiguration::get_show_selection_marker), - sigc::mem_fun (UIConfiguration::instance(), &UIConfiguration::set_show_selection_marker) - )); - - - HSliderOption *gui_hs; - - if (!Profile->get_mixbus()) { - gui_hs = new HSliderOption( - "waveform-gradient-depth", - _("Waveforms color gradient depth"), - sigc::mem_fun (UIConfiguration::instance(), &UIConfiguration::get_waveform_gradient_depth), - sigc::mem_fun (UIConfiguration::instance(), &UIConfiguration::set_waveform_gradient_depth), - 0, 1.0, 0.05 - ); - gui_hs->scale().set_update_policy (Gtk::UPDATE_DELAYED); - add_option (_("Appearance/Editor"), gui_hs); - } - - gui_hs = new HSliderOption( - "timeline-item-gradient-depth", - _("Timeline item gradient depth"), - sigc::mem_fun (UIConfiguration::instance(), &UIConfiguration::get_timeline_item_gradient_depth), - sigc::mem_fun (UIConfiguration::instance(), &UIConfiguration::set_timeline_item_gradient_depth), - 0, 1.0, 0.05 - ); - gui_hs->scale().set_update_policy (Gtk::UPDATE_DELAYED); - add_option (_("Appearance/Editor"), gui_hs); - ComboOption* emode = new ComboOption ( "time-axis-name-ellipsize-mode", _("Track name ellipsize mode"), @@ -2719,17 +1167,6 @@ RCOptionEditor::RCOptionEditor () Gtkmm2ext::UI::instance()->set_tip (emode->tip_widget(), _("Choose which part of long track names are hidden in the editor's track headers")); add_option (_("Appearance/Editor"), emode); - ComboOption* gap = new ComboOption ( - "vertical-region-gap", - _("Add a visual gap below Audio Regions"), - sigc::mem_fun (UIConfiguration::instance(), &UIConfiguration::get_vertical_region_gap), - sigc::mem_fun (UIConfiguration::instance(), &UIConfiguration::set_vertical_region_gap) - ); - gap->add (0, _("None")); - gap->add (2, _("Small")); - gap->add (4, _("Large")); - add_option (_("Appearance/Editor"), gap); - add_option (_("Appearance/Editor"), new OptionEditorHeading (_("Editor Meters"))); add_option (_("Appearance/Editor"), @@ -2740,61 +1177,6 @@ RCOptionEditor::RCOptionEditor () sigc::mem_fun (UIConfiguration::instance(), &UIConfiguration::set_show_track_meters) )); - add_option (_("Appearance/Editor"), - new BoolOption ( - "editor-stereo-only-meters", - _("Limit track header meters to stereo"), - sigc::mem_fun (UIConfiguration::instance(), &UIConfiguration::get_editor_stereo_only_meters), - sigc::mem_fun (UIConfiguration::instance(), &UIConfiguration::set_editor_stereo_only_meters) - )); - - add_option (_("Appearance/Editor"), new OptionEditorHeading (_("MIDI Editing"))); - - add_option (_("Appearance/Editor"), - new BoolOption ( - "display-first-midi-bank-as-zero", - _("Display first MIDI bank/program as 0"), - sigc::mem_fun (*_rc_config, &RCConfiguration::get_first_midi_bank_is_zero), - sigc::mem_fun (*_rc_config, &RCConfiguration::set_first_midi_bank_is_zero) - )); - - add_option (_("Appearance/Editor"), - new BoolOption ( - "never-display-periodic-midi", - _("Don't display periodic (MTC, MMC) SysEx messages in MIDI Regions"), - sigc::mem_fun (UIConfiguration::instance(), &UIConfiguration::get_never_display_periodic_midi), - 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) - )); - - ComboOption* nnd = new ComboOption ( - "note-name-display", - _("Display note names in MIDI track headers"), - sigc::mem_fun (UIConfiguration::instance(), &UIConfiguration::get_note_name_display), - sigc::mem_fun (UIConfiguration::instance(), &UIConfiguration::set_note_name_display) - ); - nnd->add (Editing::Always, _("Always")); - nnd->add (Editing::WithMIDNAM, _("When Available")); - nnd->add (Editing::Never, _("Never")); - - add_option (_("Appearance/Editor"), nnd); - add_option (_("Appearance/Editor"), new OptionEditorBlank ()); add_option (_("Appearance/Waveform"), new OptionEditorHeading (_("Editor Waveforms"))); @@ -2852,32 +1234,6 @@ RCOptionEditor::RCOptionEditor () add_option (_("Appearance/Waveform"), wfsh); add_option (_("Appearance/Waveform"), new OptionEditorBlank ()); - /* The names of these controls must be the same as those given in MixerStrip - for the actual widgets being controlled. - */ - _mixer_strip_visibility.add (0, X_("Input"), _("Input")); - _mixer_strip_visibility.add (0, X_("PhaseInvert"), _("Phase Invert")); - _mixer_strip_visibility.add (0, X_("RecMon"), _("Record & Monitor")); - _mixer_strip_visibility.add (0, X_("SoloIsoLock"), _("Solo Iso / Lock")); - _mixer_strip_visibility.add (0, X_("Output"), _("Output")); - _mixer_strip_visibility.add (0, X_("Comments"), _("Comments")); - _mixer_strip_visibility.add (0, X_("VCA"), _("VCA Assigns")); - _mixer_strip_visibility.add (0, X_("TriggerGrid"), _("Trigger Grid")); - _mixer_strip_visibility.add (0, X_("TriggerMaster"), _("Trigger Masters")); - -#ifndef MIXBUS - add_option (_("Appearance/Mixer"), - new VisibilityOption ( - _("Mixer Strip"), - &_mixer_strip_visibility, - sigc::mem_fun (UIConfiguration::instance(), &UIConfiguration::get_mixer_strip_visibility), - sigc::mem_fun (UIConfiguration::instance(), &UIConfiguration::set_mixer_strip_visibility) - ) - ); -#else - add_option (_("Appearance/Mixer"), new OptionEditorHeading (_("Mixer Strip"))); -#endif - #ifndef MIXBUS add_option (_("Appearance/Mixer"), new BoolOption ( @@ -2888,96 +1244,10 @@ RCOptionEditor::RCOptionEditor () )); #endif - 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"))); - add_option (_("Appearance/Toolbar"), - new BoolOption ( - "show-toolbar-recpunch", - _("Display Record/Punch Options"), - sigc::mem_fun (UIConfiguration::instance(), &UIConfiguration::get_show_toolbar_recpunch), - sigc::mem_fun (UIConfiguration::instance(), &UIConfiguration::set_show_toolbar_recpunch) - )); - - add_option (_("Appearance/Toolbar"), - new BoolOption ( - "show-toolbar-latency", - _("Display Latency Compensation"), - sigc::mem_fun (UIConfiguration::instance(), &UIConfiguration::get_show_toolbar_latency), - sigc::mem_fun (UIConfiguration::instance(), &UIConfiguration::set_show_toolbar_latency) - )); - - if (!ARDOUR::Profile->get_small_screen()) { - add_option (_("Appearance/Toolbar"), - new BoolOption ( - "show-secondary-clock", - _("Display Secondary Clock"), - sigc::mem_fun (UIConfiguration::instance(), &UIConfiguration::get_show_secondary_clock), - sigc::mem_fun (UIConfiguration::instance(), &UIConfiguration::set_show_secondary_clock) - )); - } - - add_option (_("Appearance/Toolbar"), - new BoolOption ( - "show-toolbar-selclock", - _("Display Selection Clock"), - sigc::mem_fun (UIConfiguration::instance(), &UIConfiguration::get_show_toolbar_selclock), - sigc::mem_fun (UIConfiguration::instance(), &UIConfiguration::set_show_toolbar_selclock) - )); - - add_option (_("Appearance/Toolbar"), - new BoolOption ( - "show-toolbar-monitor-info", - _("Display Monitor Section Info"), - sigc::mem_fun (UIConfiguration::instance(), &UIConfiguration::get_show_toolbar_monitor_info), - sigc::mem_fun (UIConfiguration::instance(), &UIConfiguration::set_show_toolbar_monitor_info) - )); - - add_option (_("Appearance/Toolbar"), - new BoolOption ( - "show-toolbar-cuectrl", - _("Display Cue Rec/Play Controls"), - sigc::mem_fun (UIConfiguration::instance(), &UIConfiguration::get_show_toolbar_cuectrl), - sigc::mem_fun (UIConfiguration::instance(), &UIConfiguration::set_show_toolbar_cuectrl) - )); - - add_option (_("Appearance/Toolbar"), - new BoolOption ( - "show-mini-timeline", - _("Display Navigation Timeline"), - sigc::mem_fun (UIConfiguration::instance(), &UIConfiguration::get_show_mini_timeline), - sigc::mem_fun (UIConfiguration::instance(), &UIConfiguration::set_show_mini_timeline) - )); - - add_option (_("Appearance/Toolbar"), - new BoolOption ( - "show-editor-meter", - _("Display Master Level Meter"), - sigc::mem_fun (UIConfiguration::instance(), &UIConfiguration::get_show_editor_meter), - sigc::mem_fun (UIConfiguration::instance(), &UIConfiguration::set_show_editor_meter) - )); - - add_option (_("Appearance/Toolbar"), - new ColumVisibilityOption ( - "action-table-columns", _("Display Action-Buttons"), MAX_LUA_ACTION_BUTTONS / 2, - sigc::mem_fun (UIConfiguration::instance(), &UIConfiguration::get_action_table_columns), - sigc::mem_fun (UIConfiguration::instance(), &UIConfiguration::set_action_table_columns) - ) - ); add_option (_("Appearance/Toolbar"), new OptionEditorBlank ()); /* size and scale */ @@ -2995,43 +1265,6 @@ RCOptionEditor::RCOptionEditor () add_option (_("Appearance/Colors"), new ColorThemeManager); add_option (_("Appearance/Colors"), new OptionEditorBlank ()); - bo = new BoolOption ( - "use-palette-for-new-route", - _("Use color-palette to assign color for new Tracks"), - sigc::mem_fun (UIConfiguration::instance(), &UIConfiguration::get_use_palette_for_new_track), - sigc::mem_fun (UIConfiguration::instance(), &UIConfiguration::set_use_palette_for_new_track) - ); - Gtkmm2ext::UI::instance()->set_tip (bo->tip_widget (), - _("When enabled new Tracks are assigned a color from the stripable-color-palette in round-robin fashion.\n" - "When disabled all new Tracks will use the FIRST color from the stripable-color-palette." - )); - add_option (_("Appearance/Colors"), bo); - - bo = new BoolOption ( - "use-palette-for-new-route", - _("Use color-palette to assign color for new Busses"), - sigc::mem_fun (UIConfiguration::instance(), &UIConfiguration::get_use_palette_for_new_bus), - sigc::mem_fun (UIConfiguration::instance(), &UIConfiguration::set_use_palette_for_new_bus) - ); - Gtkmm2ext::UI::instance()->set_tip (bo->tip_widget (), - _("When enabled new Buses are assigned a color from the stripable-color-palette in round-robin fashion.\n" - "When disabled all new Buses will use the FIRST color from the stripable-color-palette." - )); - add_option (_("Appearance/Colors"), bo); - - - bo = new BoolOption ( - "use-palette-for-new-vca", - _("Use color-palette to assign color for new VCA"), - sigc::mem_fun (UIConfiguration::instance(), &UIConfiguration::get_use_palette_for_new_vca), - sigc::mem_fun (UIConfiguration::instance(), &UIConfiguration::set_use_palette_for_new_vca) - ); - Gtkmm2ext::UI::instance()->set_tip (bo->tip_widget (), - _("When enabled newly created VCAs are assigned a color from the stripable-color-palette in round-robin fashion.\n" - "When disabled all new VCAs will have a neutral color from the theme." - )); - add_option (_("Appearance/Colors"), bo); - /* Quirks */ OptionEditorHeading* quirks_head = new OptionEditorHeading (_("Various Workarounds for Windowing Systems")); @@ -3087,18 +1320,6 @@ These settings will only take effect after %1 is restarted.\n\ add_option (_("Appearance/Quirks"), bo); #endif - if (!Profile->get_mixbus()) { - bo = new BoolOption ( - "floating-monitor-section", - _("Float detached monitor-section window"), - sigc::mem_fun (UIConfiguration::instance(), &UIConfiguration::get_floating_monitor_section), - sigc::mem_fun (UIConfiguration::instance(), &UIConfiguration::set_floating_monitor_section) - ); - Gtkmm2ext::UI::instance()->set_tip (bo->tip_widget (), - _("When detaching the monitoring section, mark it as \"Utility\" window to stay in front.")); - add_option (_("Appearance/Quirks"), bo); - } - #if !(defined PLATFORM_WINDOWS || defined __APPLE__) bo = new BoolOption ( "allow-to-resize-engine-dialog", @@ -3187,97 +1408,9 @@ These settings will only take effect after %1 is restarted.\n\ parameter_changed ("enable-translation"); #endif // ENABLE_NLS - add_option (_("Appearance/Regions"), new OptionEditorHeading (_("Region Information"))); - - add_option (_("Appearance/Regions"), - new BoolOption ( - "show-region-xrun-markers", - _("Show xrun markers in regions"), - sigc::mem_fun (UIConfiguration::instance(), &UIConfiguration::get_show_region_xrun_markers), - sigc::mem_fun (UIConfiguration::instance(), &UIConfiguration::set_show_region_xrun_markers) - )); - - add_option (_("Appearance/Regions"), - new BoolOption ( - "show-region-cue-markers", - _("Show cue markers in regions"), - sigc::mem_fun (UIConfiguration::instance(), &UIConfiguration::get_show_region_cue_markers), - sigc::mem_fun (UIConfiguration::instance(), &UIConfiguration::set_show_region_cue_markers) - )); - - add_option (_("Appearance/Regions"), - new BoolComboOption ( - "show-region-gain-envelopes", - _("Show gain envelopes in audio regions"), - _("in all modes"), - _("only in Draw and Internal Edit modes"), - sigc::mem_fun (UIConfiguration::instance(), &UIConfiguration::get_show_region_gain), - sigc::mem_fun (UIConfiguration::instance(), &UIConfiguration::set_show_region_gain) - )); - - - /* EDITOR *******************************************************************/ - add_option (_("Editor"), new OptionEditorHeading (_("Scroll and Zoom Behaviors"))); - - if (!Profile->get_mixbus()) { - - add_option (_("Editor"), - new BoolOption ( - "use-mouse-position-as-zoom-focus-on-scroll", - _("Zoom to mouse position when zooming with 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"), - new BoolOption ( - "use-time-rulers-to-zoom-with-vertical-drag", - _("Zoom with vertical drag in rulers"), - sigc::mem_fun (UIConfiguration::instance(), &UIConfiguration::get_use_time_rulers_to_zoom_with_vertical_drag), - sigc::mem_fun (UIConfiguration::instance(), &UIConfiguration::set_use_time_rulers_to_zoom_with_vertical_drag) - )); - - add_option (_("Editor"), - new BoolOption ( - "use-double-click-to-zoom-to-selection", - _("Double click zooms to selection"), - sigc::mem_fun (UIConfiguration::instance(), &UIConfiguration::get_use_double_click_to_zoom_to_selection), - sigc::mem_fun (UIConfiguration::instance(), &UIConfiguration::set_use_double_click_to_zoom_to_selection) - )); - - add_option (_("Editor"), - new BoolOption ( - "update-editor-during-summary-drag", - _("Update editor window during drags of the summary"), - sigc::mem_fun (UIConfiguration::instance(), &UIConfiguration::get_update_editor_during_summary_drag), - sigc::mem_fun (UIConfiguration::instance(), &UIConfiguration::set_update_editor_during_summary_drag) - )); - - add_option (_("Editor"), - new BoolOption ( - "autoscroll-editor", - _("Auto-scroll editor window when dragging near its edges"), - sigc::mem_fun (UIConfiguration::instance(), &UIConfiguration::get_autoscroll_editor), - sigc::mem_fun (UIConfiguration::instance(), &UIConfiguration::set_autoscroll_editor) - )); - - ComboOption* dps = new ComboOption ( - "draggable-playhead-speed", - _("Auto-scroll speed when dragging playhead"), - 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); - // XXX Long label, pushes other ComboBoxes to the right ComboOption* eet = new ComboOption ( "extra-ui-extents-time", @@ -3295,82 +1428,6 @@ These settings will only take effect after %1 is restarted.\n\ add_option (_("Editor"), new OptionEditorHeading (_("Editor Behavior"))); - add_option (_("Editor"), - new BoolOption ( - "automation-follows-regions", - _("Move relevant automation when audio regions are moved"), - sigc::mem_fun (*_rc_config, &RCConfiguration::get_automation_follows_regions), - sigc::mem_fun (*_rc_config, &RCConfiguration::set_automation_follows_regions) - )); - - bo = new BoolOption ( - "new-automation-points-on-lane", - _("Ignore Y-axis 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 new points drawn in any automation lane will be placed on the existing line, regardless of mouse y-axis position.")); - - bo = new BoolOption ( - "automation-edit-cancels-auto-hide", - _("Automation edit cancels auto hide"), - sigc::mem_fun (UIConfiguration::instance(), &UIConfiguration::get_automation_edit_cancels_auto_hide), - sigc::mem_fun (UIConfiguration::instance(), &UIConfiguration::set_automation_edit_cancels_auto_hide) - ); - add_option (_("Editor"), bo); - Gtkmm2ext::UI::instance()->set_tip (bo->tip_widget(), - _("When enabled automatically displayed automation lanes remain visible if events are added to the lane.\n" - "When disabled, spilled automation lanes are unconditionally hidden when a different control is touched.\n" - "This setting only has effect if 'Show Automation Lane on Touch' is used.") - ); - - ComboOption* fadeshape = new ComboOption ( - "default-fade-shape", - _("Default fade shape"), - sigc::mem_fun (*_rc_config, - &RCConfiguration::get_default_fade_shape), - sigc::mem_fun (*_rc_config, - &RCConfiguration::set_default_fade_shape) - ); - - fadeshape->add (FadeLinear, - _("Linear (for highly correlated material)")); - fadeshape->add (FadeConstantPower, _("Constant power")); - fadeshape->add (FadeSymmetric, _("Symmetric")); - fadeshape->add (FadeSlow, _("Slow")); - fadeshape->add (FadeFast, _("Fast")); - - add_option (_("Editor"), fadeshape); - -#if 1 // XXX wide ComboBox - ComboOption *eqv = new ComboOption ( - "region-equivalency", - _("Regions in edit groups are edited together"), - sigc::mem_fun (*_rc_config, &RCConfiguration::get_region_equivalence), - sigc::mem_fun (*_rc_config, &RCConfiguration::set_region_equivalence) - ); - - eqv->add (Overlap, _("whenever they overlap in time")); - eqv->add (Enclosed, _("if either encloses the other")); - eqv->add (Exact, _("if they have identical length, position and origin")); - eqv->add (LayerTime, _("if they have identical length, position and layer")); - - add_option (_("Editor"), eqv); -#endif - - ComboOption* lm = new ComboOption ( - "layer-model", - _("Layering model"), - sigc::mem_fun (*_rc_config, &RCConfiguration::get_layer_model), - sigc::mem_fun (*_rc_config, &RCConfiguration::set_layer_model) - ); - - lm->add (LaterHigher, _("later is higher")); - lm->add (Manual, _("manual layering")); - add_option (_("Editor"), lm); - add_option (_("Editor"), new OptionEditorHeading (_("Split/Separate"))); ComboOption *rras = new ComboOption ( @@ -3406,239 +1463,6 @@ These settings will only take effect after %1 is restarted.\n\ add_option (_("Editor"), rsas); #endif - 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 SpinOption ( - "ruler-granularity", - _("Approximate Grid/Ruler granularity (pixels)"), - sigc::mem_fun (UIConfiguration::instance(), &UIConfiguration::get_ruler_granularity), - sigc::mem_fun (UIConfiguration::instance(), &UIConfiguration::set_ruler_granularity), - 1, 100, - 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 ( - "show-grid-rulers", - _("Grid mode selection may change ruler visibility"), - sigc::mem_fun (UIConfiguration::instance(), &UIConfiguration::get_show_grids_ruler), - sigc::mem_fun (UIConfiguration::instance(), &UIConfiguration::set_show_grids_ruler) - )); - - // TODO toggle sensitivity of rulers-follow-grid when show-grid-rulers changes - 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 (_("Snap Target Mode:"))); - - ComboOption *stm = new ComboOption ( - "snap-target", - _("When the Grid is enabled, snap to"), - sigc::mem_fun (UIConfiguration::instance(), &UIConfiguration::get_snap_target), - sigc::mem_fun (UIConfiguration::instance(), &UIConfiguration::set_snap_target)); - - stm->add(SnapTargetGrid, _("Grid")); - stm->add(SnapTargetOther, _("Snap Targets")); - stm->add(SnapTargetBoth, _("Both the Grid and Snap Targets")); - add_option (_("Editor/Snap"), stm); - - add_option (_("Editor/Snap"), new OptionEditorHeading (_("Snap Targets:"))); - - 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-playhead", - _("Playhead"), - sigc::mem_fun (UIConfiguration::instance(), &UIConfiguration::get_snap_to_playhead), - sigc::mem_fun (UIConfiguration::instance(), &UIConfiguration::set_snap_to_playhead) - )); - - 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/Modifiers"), new OptionEditorHeading (_("Keyboard Modifiers"))); - add_option (_("Editor/Modifiers"), new KeyboardOptions); - add_option (_("Editor/Modifiers"), new OptionEditorBlank ()); - - - /* MIDI *********************************************************************/ - - add_option (_("MIDI"), new OptionEditorHeading (_("Session"))); - - bo = new BoolOption ( - "allow-non-quarter-pulse", - _("Allow non quarter-note pulse"), - sigc::mem_fun (UIConfiguration::instance(), &UIConfiguration::get_allow_non_quarter_pulse), - sigc::mem_fun (UIConfiguration::instance(), &UIConfiguration::set_allow_non_quarter_pulse) - ); - Gtkmm2ext::UI::instance()->set_tip (bo->tip_widget(), - string_compose (_("When enabled %1 will allow tempo to be expressed in divisions per minute\n" - "When disabled %1 will only allow tempo to be expressed in quarter notes per minute"), - PROGRAM_NAME)); - add_option (_("MIDI"), bo); - - add_option (_("MIDI"), - new SpinOption ( - "initial-program-change", - _("Initial program change"), - sigc::mem_fun (*_rc_config, &RCConfiguration::get_initial_program_change), - sigc::mem_fun (*_rc_config, &RCConfiguration::set_initial_program_change), - -1, 65536, 1, 10 - )); - - add_option (_("MIDI"), new OptionEditorHeading (_("Editing"))); - - add_option (_("MIDI"), - new BoolOption ( - "select-last-drawn-note-only", - _("When drawing new notes, select only the last drawn note"), - sigc::mem_fun (UIConfiguration::instance(), &UIConfiguration::get_select_last_drawn_note_only), - sigc::mem_fun (UIConfiguration::instance(), &UIConfiguration::set_select_last_drawn_note_only) - )); - - add_option (_("MIDI"), - new BoolOption ( - "scroll_velocity_editing", - _("Scroll wheel use when editing MIDI adjusts selected note velocity"), - sigc::mem_fun (UIConfiguration::instance(), &UIConfiguration::get_scroll_velocity_editing), - sigc::mem_fun (UIConfiguration::instance(), &UIConfiguration::set_scroll_velocity_editing) - )); - - add_option (_("MIDI"), new OptionEditorHeading (_("Audition"))); - - add_option (_("MIDI"), - new BoolOption ( - "sound-midi-notes", - _("Sound MIDI notes as they are selected in the editor"), - sigc::mem_fun (UIConfiguration::instance(), &UIConfiguration::get_sound_midi_notes), - sigc::mem_fun (UIConfiguration::instance(), &UIConfiguration::set_sound_midi_notes) - )); - - add_option (_("MIDI"), new OptionEditorHeading (_("Virtual Keyboard"))); - - ComboOption* vkeybdlayout = new ComboOption ( - "vkeybd-layout", - _("Virtual Keyboard Layout"), - sigc::mem_fun (UIConfiguration::instance(), &UIConfiguration::get_vkeybd_layout), - sigc::mem_fun (UIConfiguration::instance(), &UIConfiguration::set_vkeybd_layout) - ); - - vkeybdlayout->add ("None", _("Mouse-only (no keyboard)")); - vkeybdlayout->add ("QWERTY", _("QWERTY")); - vkeybdlayout->add ("QWERTZ", _("QWERTZ")); - vkeybdlayout->add ("AZERTY", _("AZERTY")); - vkeybdlayout->add ("DVORAK", _("DVORAK")); - vkeybdlayout->add ("QWERTY Single", _("QWERTY Single")); - vkeybdlayout->add ("QWERTZ Single", _("QWERTZ Single")); - - add_option (_("MIDI"), vkeybdlayout); - - add_option (_("MIDI"), new OptionEditorHeading (_("Default Visible Note Range"))); - - const std::string legal_midi_name_chars = S_("legal characters for MIDI note names|ABCDEFG#1234567890"); - - mrl_option = new EntryOption ("lower-midi-note", _("Default lower visible MIDI note"), - sigc::mem_fun (*this, &RCOptionEditor::get_default_lower_midi_note), - sigc::mem_fun (*this, &RCOptionEditor::set_default_lower_midi_note)); - mrl_option->set_valid_chars (legal_midi_name_chars); - - mru_option = new EntryOption ("lower-midi-note", _("Default upper visible MIDI note"), - sigc::mem_fun (*this, &RCOptionEditor::get_default_upper_midi_note), - sigc::mem_fun (*this, &RCOptionEditor::set_default_upper_midi_note)); - mru_option->set_valid_chars (legal_midi_name_chars); - - SpinOption* mnh_option = new SpinOption ("max-note-height", _("Maximum note height"), - sigc::mem_fun (UIConfiguration::instance(), &UIConfiguration::get_max_note_height), - sigc::mem_fun (UIConfiguration::instance(), &UIConfiguration::set_max_note_height), - 10, 40, 1, 5); - add_option (_("MIDI"), mrl_option); - add_option (_("MIDI"), mru_option); - add_option (_("MIDI"), mnh_option); - - /* MIDI PORTs */ - add_option (_("MIDI"), new OptionEditorHeading (_("MIDI Port Options"))); - - add_option (_("MIDI"), - new BoolOption ( - "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) - )); - - add_option (_("MIDI/MIDI Port Config"), new OptionEditorBlank ()); - add_option (_("MIDI/MIDI Port Config"), new MidiPortOptions ()); - - add_option (_("MIDI"), new OptionEditorBlank ()); - /* TRANSPORT & SYNC *********************************************************/ add_option (_("Transport"), new OptionEditorHeading (_("General"))); @@ -3677,16 +1501,6 @@ These settings will only take effect after %1 is restarted.\n\ Gtkmm2ext::UI::instance()->set_tip (bo->tip_widget(), _("When enabled master record will remain engaged when the transport transitions to stop.\nWhen disabled master record will be disabled when the transport transitions to stop.")); - bo = new BoolOption ( - "reset-default-speed-on-stop", - _("Reset default speed on stop"), - sigc::mem_fun (*_rc_config, &RCConfiguration::get_reset_default_speed_on_stop), - sigc::mem_fun (*_rc_config, &RCConfiguration::set_reset_default_speed_on_stop) - ); - add_option (_("Transport"), bo); - Gtkmm2ext::UI::instance()->set_tip (bo->tip_widget(), - _("When enabled, stopping the transport will reset the default speed to normal.\nWhen disabled any current default speed will remain in effect across transport stops.")); - bo = new BoolOption ( "disable-disarm-during-roll", _("Disable per-track record disarm while rolling"), @@ -3696,64 +1510,6 @@ These settings will only take effect after %1 is restarted.\n\ Gtkmm2ext::UI::instance()->set_tip (bo->tip_widget(), _("When enabled this will prevent you from accidentally stopping specific tracks recording during a take.")); add_option (_("Transport"), bo); - bo = new BoolOption ( - "quieten_at_speed", - _("12dB gain reduction during fast-forward and fast-rewind"), - sigc::mem_fun (*_rc_config, &RCConfiguration::get_quieten_at_speed), - sigc::mem_fun (*_rc_config, &RCConfiguration::set_quieten_at_speed) - ); - Gtkmm2ext::UI::instance()->set_tip (bo->tip_widget(), - _("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); - - - bo = new BoolOption ( - "rewind-ffwd-like-tape-decks", - _("Rewind/Fast-forward buttons change direction immediately"), - sigc::mem_fun (*_rc_config, &RCConfiguration::get_rewind_ffwd_like_tape_decks), - sigc::mem_fun (*_rc_config, &RCConfiguration::set_rewind_ffwd_like_tape_decks) - ); - Gtkmm2ext::UI::instance()->set_tip (bo->tip_widget(), - _("When enabled rewind/ffwd controls will immediately change playback direction when appropriate.\n\n" - "When disabled rewind/ffwd controls will gradually speed up/slow down playback")); - add_option (_("Transport"), bo); - - - bo = new BoolOption ( - "auto-return-after-rewind-ffwd", - _("Allow auto-return after rewind/ffwd operations"), - sigc::mem_fun (*_rc_config, &RCConfiguration::get_auto_return_after_rewind_ffwd), - sigc::mem_fun (*_rc_config, &RCConfiguration::set_auto_return_after_rewind_ffwd) - ); - Gtkmm2ext::UI::instance()->set_tip (bo->tip_widget(), - _("When enabled if auto-return is enabled, the playhead will auto-return after rewind/ffwd operations\n\n" - "When disabled the playhead will never auto-return after rewind/ffwd operations") - ); - add_option (_("Transport"), bo); - - - ComboOption* psc = new ComboOption ( - "preroll-seconds", - _("Preroll"), - sigc::mem_fun (*_rc_config, &RCConfiguration::get_preroll_seconds), - sigc::mem_fun (*_rc_config, &RCConfiguration::set_preroll_seconds) - ); - Gtkmm2ext::UI::instance()->set_tip (psc->tip_widget(), - (_("The amount of preroll to apply when Play with Preroll or Record with Prerollis initiated.\n\n" - "If Follow Edits is enabled, the preroll is applied to the playhead position when a region is selected or trimmed."))); - psc->add (-4.0, _("4 Bars")); - psc->add (-2.0, _("2 Bars")); - psc->add (-1.0, _("1 Bar")); - psc->add (0.0, _("0 (no pre-roll)")); - psc->add (0.1, _("0.1 second")); - psc->add (0.25, _("0.25 second")); - psc->add (0.5, _("0.5 second")); - psc->add (1.0, _("1.0 second")); - psc->add (2.0, _("2.0 seconds")); - add_option (_("Transport"), psc); - - add_option (_("Transport"), new OptionEditorHeading (_("Looping"))); bo = new BoolOption ( @@ -3955,16 +1711,6 @@ These settings will only take effect after %1 is restarted.\n\ add_option (_("Transport"), new OptionEditorHeading (_("Plugins"))); - bo = new BoolOption ( - "plugins-stop-with-transport", - _("Silence plugins when the transport is stopped"), - sigc::mem_fun (*_rc_config, &RCConfiguration::get_plugins_stop_with_transport), - sigc::mem_fun (*_rc_config, &RCConfiguration::set_plugins_stop_with_transport) - ); - add_option (_("Transport"), bo); - Gtkmm2ext::UI::instance()->set_tip (bo->tip_widget(), - _("When enabled plugins will be reset at transport stop. When disabled plugins will be left unchanged at transport stop.\n\nThis mostly affects plugins with a \"tail\" like Reverbs.")); - /* MONITORING, SOLO) ********************************************************/ add_option (_("Monitoring"), new OptionEditorHeading (_("Monitoring"))); @@ -4041,52 +1787,9 @@ These settings will only take effect after %1 is restarted.\n\ sigc::mem_fun (*_rc_config, &RCConfiguration::set_solo_mute_gain) )); - _listen_position = new ComboOption ( - "listen-position", - _("Listen Position"), - sigc::mem_fun (*_rc_config, &RCConfiguration::get_listen_position), - sigc::mem_fun (*_rc_config, &RCConfiguration::set_listen_position) - ); - - _listen_position->add (AfterFaderListen, _("after-fader (AFL)")); - _listen_position->add (PreFaderListen, _("pre-fader (PFL)")); - - add_option (_("Monitoring"), _listen_position); - - ComboOption* pp = new ComboOption ( - "pfl-position", - _("PFL signals come from"), - sigc::mem_fun (*_rc_config, &RCConfiguration::get_pfl_position), - sigc::mem_fun (*_rc_config, &RCConfiguration::set_pfl_position) - ); - - pp->add (PFLFromBeforeProcessors, _("before pre-fader processors")); - pp->add (PFLFromAfterProcessors, _("pre-fader but after pre-fader processors")); - - add_option (_("Monitoring"), pp); - - ComboOption* pa = new ComboOption ( - "afl-position", - _("AFL signals come from"), - sigc::mem_fun (*_rc_config, &RCConfiguration::get_afl_position), - sigc::mem_fun (*_rc_config, &RCConfiguration::set_afl_position) - ); - - pa->add (AFLFromBeforeProcessors, _("immediately post-fader")); - pa->add (AFLFromAfterProcessors, _("after post-fader processors (before pan)")); - - add_option (_("Monitoring"), pa); - /* SIGNAL FLOW **************************************************************/ add_option (_("Signal Flow"), new OptionEditorHeading (_("Master"))); - add_option (_("Signal Flow"), - new BoolOption ( - "use-master-volume", - _("Enable master-bus output gain control"), - sigc::mem_fun (*_rc_config, &RCConfiguration::get_use_master_volume), - sigc::mem_fun (*_rc_config, &RCConfiguration::set_use_master_volume) - )); ComboOption* zitaq = new ComboOption ( "port-resampler-quality", @@ -4123,131 +1826,8 @@ These settings will only take effect after %1 is restarted.\n\ add_option (_("Signal Flow"), new OptionEditorHeading (_("Default Track / Bus Muting Options"))); - add_option (_("Signal Flow"), - new BoolOption ( - "mute-affects-pre-fader", - _("Mute affects pre-fader sends"), - sigc::mem_fun (*_rc_config, &RCConfiguration::get_mute_affects_pre_fader), - sigc::mem_fun (*_rc_config, &RCConfiguration::set_mute_affects_pre_fader) - )); - - add_option (_("Signal Flow"), - new BoolOption ( - "mute-affects-post-fader", - _("Mute affects post-fader sends"), - sigc::mem_fun (*_rc_config, &RCConfiguration::get_mute_affects_post_fader), - sigc::mem_fun (*_rc_config, &RCConfiguration::set_mute_affects_post_fader) - )); - - add_option (_("Signal Flow"), - new BoolOption ( - "mute-affects-control-outs", - _("Mute affects control outputs"), - sigc::mem_fun (*_rc_config, &RCConfiguration::get_mute_affects_control_outs), - sigc::mem_fun (*_rc_config, &RCConfiguration::set_mute_affects_control_outs) - )); - - add_option (_("Signal Flow"), - new BoolOption ( - "mute-affects-main-outs", - _("Mute affects main outputs"), - sigc::mem_fun (*_rc_config, &RCConfiguration::get_mute_affects_main_outs), - sigc::mem_fun (*_rc_config, &RCConfiguration::set_mute_affects_main_outs) - )); - - - add_option (_("Signal Flow"), new OptionEditorHeading (_("Send Routing"))); - add_option (_("Signal Flow"), - new BoolOption ( - "link-send-and-route-panner", - _("Link panners of Aux and External Sends with main panner by default"), - sigc::mem_fun (*_rc_config, &RCConfiguration::get_link_send_and_route_panner), - sigc::mem_fun (*_rc_config, &RCConfiguration::set_link_send_and_route_panner) - )); - add_option (_("Signal Flow"), new OptionEditorHeading (_("Audio Regions"))); - add_option (_("Signal Flow"), - new BoolOption ( - "replicate-missing-region-channels", - _("Replicate missing region channels"), - sigc::mem_fun (*_rc_config, &RCConfiguration::get_replicate_missing_region_channels), - sigc::mem_fun (*_rc_config, &RCConfiguration::set_replicate_missing_region_channels) - )); - - if (!Profile->get_mixbus()) { - - add_option (_("Signal Flow"), new OptionEditorHeading (_("Track and Bus Connections"))); - - bo = new BoolOption ( - "auto-connect-standard-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 connected to the hardware playback ports, " - "otherwise the master-bus output is directly used for playback.")); - - ComboOption* iac = new ComboOption ( - "input-auto-connect", - _("Connect track inputs"), - sigc::mem_fun (*_rc_config, &RCConfiguration::get_input_auto_connect), - sigc::mem_fun (*_rc_config, &RCConfiguration::set_input_auto_connect) - ); - - iac->add (AutoConnectPhysical, _("automatically to physical inputs")); - iac->add (ManualConnect, _("manually")); - - add_option (_("Signal Flow"), iac); - - ComboOption* oac = new ComboOption ( - "output-auto-connect", - _("Connect track and bus outputs"), - sigc::mem_fun (*_rc_config, &RCConfiguration::get_output_auto_connect), - sigc::mem_fun (*_rc_config, &RCConfiguration::set_output_auto_connect) - ); - - oac->add (AutoConnectPhysical, _("automatically to physical outputs")); - oac->add (AutoConnectMaster, _("automatically to master bus")); - oac->add (ManualConnect, _("manually")); - - add_option (_("Signal Flow"), 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 (_("Signal Flow"), 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 - - /* 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 ()); - /* CONTROL SURFACES *********************************************************/ add_option (_("Control Surfaces"), new OptionEditorHeading (_("Control Surfaces"))); @@ -4501,59 +2081,6 @@ These settings will only take effect after %1 is restarted.\n\ #endif - - add_option (_("Performance"), new OptionEditorHeading (_("CPU/FPU Denormals"))); - - add_option (_("Performance"), - new BoolOption ( - "denormal-protection", - _("Use DC bias to protect against denormals"), - sigc::mem_fun (*_rc_config, &RCConfiguration::get_denormal_protection), - sigc::mem_fun (*_rc_config, &RCConfiguration::set_denormal_protection) - )); - - ComboOption* dm = new ComboOption ( - "denormal-model", - _("Processor handling"), - sigc::mem_fun (*_rc_config, &RCConfiguration::get_denormal_model), - sigc::mem_fun (*_rc_config, &RCConfiguration::set_denormal_model) - ); - - int dmsize = 1; - dm->add (DenormalNone, _("no processor handling")); - - FPU* fpu = FPU::instance(); - - if (fpu->has_flush_to_zero()) { - ++dmsize; - dm->add (DenormalFTZ, _("use FlushToZero")); - } else if (_rc_config->get_denormal_model() == DenormalFTZ) { - _rc_config->set_denormal_model(DenormalNone); - } - - if (fpu->has_denormals_are_zero()) { - ++dmsize; - dm->add (DenormalDAZ, _("use DenormalsAreZero")); - } else if (_rc_config->get_denormal_model() == DenormalDAZ) { - _rc_config->set_denormal_model(DenormalNone); - } - - if (fpu->has_flush_to_zero() && fpu->has_denormals_are_zero()) { - ++dmsize; - dm->add (DenormalFTZDAZ, _("use FlushToZero and DenormalsAreZero")); - } else if (_rc_config->get_denormal_model() == DenormalFTZDAZ) { - _rc_config->set_denormal_model(DenormalNone); - } - - if (dmsize == 1) { - dm->set_sensitive(false); - } - - dm->set_note (_("Changes may not be effective until audio-engine restart.")); - - add_option (_("Performance"), dm); - - add_option (_("Performance"), new OptionEditorHeading (_("Disk I/O Buffering"))); //ToDo: this changed, needs translation. disambiguated from soundcard i/o buffering add_option (_("Performance"), new BufferingOptions (_rc_config)); @@ -4575,70 +2102,6 @@ These settings will only take effect after %1 is restarted.\n\ add_option (_("Performance"), new OptionEditorHeading (_("Automation"))); - add_option (_("Performance"), - new SpinOption ( - "automation-thinning-factor", - _("Thinning factor (larger value => less data)"), - sigc::mem_fun (*_rc_config, &RCConfiguration::get_automation_thinning_factor), - sigc::mem_fun (*_rc_config, &RCConfiguration::set_automation_thinning_factor), - 0, 1000, 1, 20 - )); - - add_option (_("Performance"), - new SpinOption ( - "automation-interval-msecs", - _("Automation sampling interval (milliseconds)"), - sigc::mem_fun (*_rc_config, &RCConfiguration::get_automation_interval_msecs), - sigc::mem_fun (*_rc_config, &RCConfiguration::set_automation_interval_msecs), - 1, 1000, 1, 20 - )); - - add_option (_("Performance"), new OptionEditorHeading (_("Automatables"))); - - 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 (_("Performance"), 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.")); - - /* VIDEO Timeline */ - add_option (_("Video"), new OptionEditorHeading (_("Video Server"))); - add_option (_("Video"), new VideoTimelineOptions (_rc_config)); - - /* trigger launcing */ - - add_option (_("Triggering"), new OptionEditorHeading (_("Triggering"))); - - TriggerPortSelectOption* dtip = new TriggerPortSelectOption (_rc_config, this); - - set_tooltip (dtip->tip_widget(), _("If set, this identifies the input MIDI port that will be automatically connected to trigger boxes.\n\n" - "It is intended to be connected to a NxN pad device (such as the Ableton Push 2 or Novation Launchpad)\n" - "or a regular MIDI device capable of sending sequential note numbers (like a typical keyboard)")); - add_option (_("Triggering"), dtip); - - add_option (_("Triggering"), new OptionEditorHeading (_("Clip Library"))); - - add_option (_("Triggering"), new DirectoryOption ( - X_("clip-library-dir"), - _("User writable Clip Library:"), - sigc::mem_fun (*_rc_config, &RCConfiguration::get_clip_library_dir), - sigc::mem_fun (*_rc_config, &RCConfiguration::set_clip_library_dir) - )); - - add_option (_("Triggering"), - new RcActionButton (_("Reset Clip Library Dir"), - sigc::mem_fun (*this, &RCOptionEditor::reset_clip_library_dir))); - /* END OF SECTIONS/OPTIONS etc */ Widget::show_all (); @@ -4653,7 +2116,6 @@ These settings will only take effect after %1 is restarted.\n\ #endif // XMLNode* node = ARDOUR_UI::instance()->preferences_settings(); - set_current_page (_("General")); /* Connect metadata */