X-Git-Url: https://main.carlh.net/gitweb/?a=blobdiff_plain;f=gtk2_ardour%2Frc_option_editor.cc;h=ec3dd466f431bb9f65b20c7f0669cffb08fba75d;hb=430b2c44d15e20015d8cab53904cc7684371d407;hp=df2c7ed2274e9a992f0ae954eba8296ac122c16e;hpb=780cd2fabcf15e666fa219fc94720c8c67da204b;p=ardour.git diff --git a/gtk2_ardour/rc_option_editor.cc b/gtk2_ardour/rc_option_editor.cc index df2c7ed227..ec3dd466f4 100644 --- a/gtk2_ardour/rc_option_editor.cc +++ b/gtk2_ardour/rc_option_editor.cc @@ -38,6 +38,8 @@ #include "ardour/control_protocol_manager.h" #include "control_protocol/control_protocol.h" +#include "ardour_window.h" +#include "ardour_dialog.h" #include "gui_thread.h" #include "midi_tracer.h" #include "rc_option_editor.h" @@ -56,7 +58,7 @@ using namespace ARDOUR; class ClickOptions : public OptionEditorBox { public: - ClickOptions (RCConfiguration* c, ArdourDialog* p) + ClickOptions (RCConfiguration* c, Gtk::Window* p) : _rc_config (c), _parent (p) { @@ -149,7 +151,7 @@ private: } RCConfiguration* _rc_config; - ArdourDialog* _parent; + Gtk::Window* _parent; Entry _click_path_entry; Entry _click_emphasis_path_entry; }; @@ -259,7 +261,7 @@ static const struct { /* Command = Meta Option/Alt = Mod1 */ - { "Shift", GDK_SHIFT_MASK }, + { "Key|Shift", GDK_SHIFT_MASK }, { "Command", GDK_META_MASK }, { "Control", GDK_CONTROL_MASK }, { "Option", GDK_MOD1_MASK }, @@ -269,7 +271,7 @@ static const struct { { "Shift-Command-Option", GDK_MOD5_MASK|GDK_SHIFT_MASK|GDK_META_MASK }, #else - { "Shift", GDK_SHIFT_MASK }, + { "Key|Shift", GDK_SHIFT_MASK }, { "Control", GDK_CONTROL_MASK }, { "Alt (Mod1)", GDK_MOD1_MASK }, { "Control-Shift", GDK_CONTROL_MASK|GDK_SHIFT_MASK }, @@ -300,7 +302,7 @@ public: vector dumb; for (int i = 0; modifiers[i].name; ++i) { - dumb.push_back (_(modifiers[i].name)); + dumb.push_back (S_(modifiers[i].name)); } set_popdown_strings (_edit_modifier_combo, dumb); @@ -308,7 +310,7 @@ public: for (int x = 0; modifiers[x].name; ++x) { if (modifiers[x].modifier == Keyboard::edit_modifier ()) { - _edit_modifier_combo.set_active_text (_(modifiers[x].name)); + _edit_modifier_combo.set_active_text (S_(modifiers[x].name)); break; } } @@ -338,7 +340,7 @@ public: for (int x = 0; modifiers[x].name; ++x) { if (modifiers[x].modifier == Keyboard::delete_modifier ()) { - _delete_modifier_combo.set_active_text (_(modifiers[x].name)); + _delete_modifier_combo.set_active_text (S_(modifiers[x].name)); break; } } @@ -366,7 +368,7 @@ public: for (int x = 0; modifiers[x].name; ++x) { if (modifiers[x].modifier == Keyboard::insert_note_modifier ()) { - _insert_note_modifier_combo.set_active_text (_(modifiers[x].name)); + _insert_note_modifier_combo.set_active_text (S_(modifiers[x].name)); break; } } @@ -394,7 +396,7 @@ public: for (int x = 0; modifiers[x].name; ++x) { if (modifiers[x].modifier == (guint) Keyboard::snap_modifier ()) { - _snap_modifier_combo.set_active_text (_(modifiers[x].name)); + _snap_modifier_combo.set_active_text (S_(modifiers[x].name)); break; } } @@ -657,7 +659,7 @@ private: class ControlSurfacesOptions : public OptionEditorBox { public: - ControlSurfacesOptions (ArdourDialog& parent) + ControlSurfacesOptions (Gtk::Window& parent) : _parent (parent) { _store = ListStore::create (_model); @@ -754,8 +756,8 @@ private: Box* box = (Box*) cpi->protocol->get_gui (); if (box) { string title = row[_model.name]; - ArdourDialog* win = new ArdourDialog (_parent, title); - win->get_vbox()->pack_start (*box, false, false); + ArdourWindow* win = new ArdourWindow (_parent, title); + win->add (*box); box->show (); win->present (); row[_model.editor] = win; @@ -790,10 +792,69 @@ private: Gtk::Window& _parent; }; +/** A class which allows control of visibility of some editor components usign + * 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 ()); + } + +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; +}; + RCOptionEditor::RCOptionEditor () : OptionEditor (Config, string_compose (_("%1 Preferences"), PROGRAM_NAME)) , _rc_config (Config) + , _mixer_strip_visibility ("mixer-strip-visibility") { /* MISC */ @@ -819,50 +880,10 @@ RCOptionEditor::RCOptionEditor () add_option (_("Misc"), procs); } - add_option (_("Misc"), new OptionEditorHeading (_("Metering"))); - - ComboOption* mht = new ComboOption ( - "meter-hold", - _("Meter hold time"), - sigc::mem_fun (*_rc_config, &RCConfiguration::get_meter_hold), - sigc::mem_fun (*_rc_config, &RCConfiguration::set_meter_hold) - ); - - mht->add (MeterHoldOff, _("off")); - mht->add (MeterHoldShort, _("short")); - mht->add (MeterHoldMedium, _("medium")); - mht->add (MeterHoldLong, _("long")); - - add_option (_("Misc"), mht); - - ComboOption* mfo = new ComboOption ( - "meter-falloff", - _("Meter fall-off"), - sigc::mem_fun (*_rc_config, &RCConfiguration::get_meter_falloff), - sigc::mem_fun (*_rc_config, &RCConfiguration::set_meter_falloff) - ); - - mfo->add (METER_FALLOFF_OFF, _("off")); - mfo->add (METER_FALLOFF_SLOWEST, _("slowest")); - mfo->add (METER_FALLOFF_SLOW, _("slow")); - mfo->add (METER_FALLOFF_MEDIUM, _("medium")); - mfo->add (METER_FALLOFF_FAST, _("fast")); - mfo->add (METER_FALLOFF_FASTER, _("faster")); - mfo->add (METER_FALLOFF_FASTEST, _("fastest")); - - add_option (_("Misc"), mfo); - - add_option (_("Misc"), new OptionEditorHeading (_("Undo"))); + add_option (_("Misc"), new OptionEditorHeading (S_("Options|Undo"))); add_option (_("Misc"), new UndoOptions (_rc_config)); - add_option (_("Misc"), new OptionEditorHeading (_("Misc"))); - -#ifndef GTKOSX - /* font scaling does nothing with GDK/Quartz */ - add_option (_("Misc"), new FontScalingOptions (_rc_config)); -#endif - add_option (_("Misc"), new BoolOption ( "verify-remove-last-capture", @@ -879,13 +900,7 @@ RCOptionEditor::RCOptionEditor () sigc::mem_fun (*_rc_config, &RCConfiguration::set_periodic_safety_backups) )); - add_option (_("Misc"), - new BoolOption ( - "sync-all-route-ordering", - _("Synchronise editor and mixer track order"), - sigc::mem_fun (*_rc_config, &RCConfiguration::get_sync_all_route_ordering), - sigc::mem_fun (*_rc_config, &RCConfiguration::set_sync_all_route_ordering) - )); + add_option (_("Misc"), new OptionEditorHeading (_("Misc"))); add_option (_("Misc"), new BoolOption ( @@ -895,21 +910,12 @@ RCOptionEditor::RCOptionEditor () sigc::mem_fun (*_rc_config, &RCConfiguration::set_only_copy_imported_files) )); - add_option (_("Misc"), - new BoolOption ( - "default-narrow_ms", - _("Use narrow mixer strips"), - sigc::mem_fun (*_rc_config, &RCConfiguration::get_default_narrow_ms), - sigc::mem_fun (*_rc_config, &RCConfiguration::set_default_narrow_ms) - )); - - add_option (_("Misc"), - new BoolOption ( - "name-new-markers", - _("Name new markers"), - sigc::mem_fun (*_rc_config, &RCConfiguration::get_name_new_markers), - sigc::mem_fun (*_rc_config, &RCConfiguration::set_name_new_markers) - )); + add_option (_("Misc"), new DirectoryOption ( + X_("default-session-parent-dir"), + _("Default folder for new sessions:"), + sigc::mem_fun (*_rc_config, &RCConfiguration::get_default_session_parent_dir), + sigc::mem_fun (*_rc_config, &RCConfiguration::set_default_session_parent_dir) + )); add_option (_("Misc"), new OptionEditorHeading (_("Click"))); @@ -1087,6 +1093,38 @@ RCOptionEditor::RCOptionEditor () sigc::mem_fun (*_rc_config, &RCConfiguration::set_color_regions_using_track_color) )); + add_option (_("Editor"), + new BoolOption ( + "update-editor-during-summary-drag", + _("Update editor window during drags of the summary"), + sigc::mem_fun (*_rc_config, &RCConfiguration::get_update_editor_during_summary_drag), + sigc::mem_fun (*_rc_config, &RCConfiguration::set_update_editor_during_summary_drag) + )); + + add_option (_("Editor"), + new BoolOption ( + "sync-all-route-ordering", + _("Synchronise editor and mixer track order"), + sigc::mem_fun (*_rc_config, &RCConfiguration::get_sync_all_route_ordering), + sigc::mem_fun (*_rc_config, &RCConfiguration::set_sync_all_route_ordering) + )); + + add_option (_("Editor"), + new BoolOption ( + "link-editor-and-mixer-selection", + _("Synchronise editor and mixer selection"), + sigc::mem_fun (*_rc_config, &RCConfiguration::get_link_editor_and_mixer_selection), + sigc::mem_fun (*_rc_config, &RCConfiguration::set_link_editor_and_mixer_selection) + )); + + add_option (_("Editor"), + new BoolOption ( + "name-new-markers", + _("Name new markers"), + sigc::mem_fun (*_rc_config, &RCConfiguration::get_name_new_markers), + sigc::mem_fun (*_rc_config, &RCConfiguration::set_name_new_markers) + )); + /* AUDIO */ add_option (_("Audio"), new OptionEditorHeading (_("Buffering"))); @@ -1110,8 +1148,6 @@ RCOptionEditor::RCOptionEditor () sigc::mem_fun (*_rc_config, &RCConfiguration::set_monitoring_model) ); - add_option (_("Audio"), mm); - #ifndef __APPLE__ /* no JACK monitoring on CoreAudio */ if (AudioEngine::instance()->can_request_hardware_monitoring()) { @@ -1121,6 +1157,8 @@ RCOptionEditor::RCOptionEditor () mm->add (SoftwareMonitoring, _("ardour")); mm->add (ExternalMonitoring, _("audio hardware")); + add_option (_("Audio"), mm); + add_option (_("Audio"), new BoolOption ( "tape-machine-mode", @@ -1194,7 +1232,7 @@ RCOptionEditor::RCOptionEditor () } if (fpu.has_flush_to_zero() && fpu.has_denormals_are_zero()) { - dm->add (DenormalFTZDAZ, _("use FlushToZero and DenormalsAreZerO")); + dm->add (DenormalFTZDAZ, _("use FlushToZero and DenormalsAreZero")); } add_option (_("Audio"), dm); @@ -1291,8 +1329,8 @@ RCOptionEditor::RCOptionEditor () sigc::mem_fun (*_rc_config, &RCConfiguration::set_afl_position) ); - pa->add (AFLFromBeforeProcessors, _("post-fader but before post-fader processors")); - pa->add (AFLFromAfterProcessors, _("after post-fader processors")); + pa->add (AFLFromBeforeProcessors, _("immediately post-fader")); + pa->add (AFLFromAfterProcessors, _("after post-fader processors (before pan)")); add_option (_("Solo / mute"), pa); @@ -1440,9 +1478,31 @@ RCOptionEditor::RCOptionEditor () sigc::mem_fun (*_rc_config, &RCConfiguration::set_first_midi_bank_is_zero) )); - /* CONTROL SURFACES */ + add_option (_("MIDI"), + new BoolOption ( + "never-display-periodic-midi", + _("Never display periodic MIDI messages (MTC, MIDI Clock)"), + sigc::mem_fun (*_rc_config, &RCConfiguration::get_never_display_periodic_midi), + sigc::mem_fun (*_rc_config, &RCConfiguration::set_never_display_periodic_midi) + )); + + add_option (_("MIDI"), + new BoolOption ( + "sound-midi-notes", + _("Sound MIDI notes as they are selected"), + sigc::mem_fun (*_rc_config, &RCConfiguration::get_sound_midi_notes), + sigc::mem_fun (*_rc_config, &RCConfiguration::set_sound_midi_notes) + )); + + /* USER INTERACTION */ + + add_option (_("User interaction"), new OptionEditorHeading (_("Keyboard"))); + + add_option (_("User interaction"), new KeyboardOptions); - add_option (_("Control surfaces"), new ControlSurfacesOptions (*this)); + add_option (_("User interaction"), new OptionEditorHeading (_("Control surfaces"))); + + add_option (_("User interaction"), new ControlSurfacesOptions (*this)); ComboOption* rm = new ComboOption ( "remote-model", @@ -1455,11 +1515,83 @@ RCOptionEditor::RCOptionEditor () rm->add (MixerOrdered, _("follows order of mixer")); rm->add (EditorOrdered, _("follows order of editor")); - add_option (_("Control surfaces"), rm); + add_option (_("User interaction"), rm); + + /* INTERFACE */ - /* KEYBOARD */ + add_option (S_("Visual|Interface"), + new BoolOption ( + "widget_prelight", + _("Graphically indicate mouse pointer hovering over various widgets"), + sigc::mem_fun (*_rc_config, &RCConfiguration::get_widget_prelight), + sigc::mem_fun (*_rc_config, &RCConfiguration::set_widget_prelight) + )); + +#ifndef GTKOSX + /* font scaling does nothing with GDK/Quartz */ + add_option (S_("Visual|Interface"), new FontScalingOptions (_rc_config)); +#endif + + /* 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_("PhaseInvert"), _("Phase Invert")); + _mixer_strip_visibility.add (0, X_("SoloSafe"), _("Solo Safe")); + _mixer_strip_visibility.add (0, X_("SoloIsolated"), _("Solo Isolated")); + _mixer_strip_visibility.add (0, X_("Comments"), _("Comments")); + _mixer_strip_visibility.add (0, X_("Group"), _("Group")); + _mixer_strip_visibility.add (0, X_("MeterPoint"), _("Meter Point")); + + add_option ( + S_("Visual|Interface"), + new VisibilityOption ( + _("Mixer Strip"), + &_mixer_strip_visibility, + sigc::mem_fun (*_rc_config, &RCConfiguration::get_mixer_strip_visibility), + sigc::mem_fun (*_rc_config, &RCConfiguration::set_mixer_strip_visibility) + ) + ); + + add_option (S_("Visual|Interface"), + new BoolOption ( + "default-narrow_ms", + _("Use narrow mixer strips by default"), + sigc::mem_fun (*_rc_config, &RCConfiguration::get_default_narrow_ms), + sigc::mem_fun (*_rc_config, &RCConfiguration::set_default_narrow_ms) + )); + + add_option (S_("Visual|Interface"), new OptionEditorHeading (_("Metering"))); + + ComboOption* mht = new ComboOption ( + "meter-hold", + _("Meter hold time"), + sigc::mem_fun (*_rc_config, &RCConfiguration::get_meter_hold), + sigc::mem_fun (*_rc_config, &RCConfiguration::set_meter_hold) + ); + + mht->add (MeterHoldOff, _("off")); + mht->add (MeterHoldShort, _("short")); + mht->add (MeterHoldMedium, _("medium")); + mht->add (MeterHoldLong, _("long")); + + add_option (S_("Visual|Interface"), mht); + + ComboOption* mfo = new ComboOption ( + "meter-falloff", + _("Meter fall-off"), + sigc::mem_fun (*_rc_config, &RCConfiguration::get_meter_falloff), + sigc::mem_fun (*_rc_config, &RCConfiguration::set_meter_falloff) + ); + + mfo->add (METER_FALLOFF_OFF, _("off")); + mfo->add (METER_FALLOFF_SLOWEST, _("slowest")); + mfo->add (METER_FALLOFF_SLOW, _("slow")); + mfo->add (METER_FALLOFF_MEDIUM, _("medium")); + mfo->add (METER_FALLOFF_FAST, _("fast")); + mfo->add (METER_FALLOFF_FASTER, _("faster")); + mfo->add (METER_FALLOFF_FASTEST, _("fastest")); - add_option (_("Keyboard"), new KeyboardOptions); + add_option (S_("Visual|Interface"), mfo); } void