fix display of preferences window when detached.
[ardour.git] / gtk2_ardour / rc_option_editor.cc
index 57a1973188244652cb06a52a5fd47feb606c89c4..63aaf0d597aa8da1c7f2a05cd40aa285bb30f11b 100644 (file)
@@ -66,7 +66,7 @@
 #include "keyboard.h"
 #include "theme_manager.h"
 #include "ui_config.h"
-#include "i18n.h"
+#include "pbd/i18n.h"
 
 using namespace std;
 using namespace Gtk;
@@ -339,6 +339,7 @@ static const struct {
        { "Option", GDK_MOD1_MASK },
        { "Command-Shift", GDK_MOD2_MASK|GDK_SHIFT_MASK },
        { "Command-Option", GDK_MOD2_MASK|GDK_MOD1_MASK },
+       { "Command-Control", GDK_MOD2_MASK|GDK_CONTROL_MASK },
        { "Command-Option-Control", GDK_MOD2_MASK|GDK_MOD1_MASK|GDK_CONTROL_MASK },
        { "Option-Control", GDK_MOD1_MASK|GDK_CONTROL_MASK },
        { "Option-Shift", GDK_MOD1_MASK|GDK_SHIFT_MASK },
@@ -351,6 +352,7 @@ static const struct {
        { "Alt", GDK_MOD1_MASK },
        { "Control-Shift", GDK_CONTROL_MASK|GDK_SHIFT_MASK },
        { "Control-Alt", GDK_CONTROL_MASK|GDK_MOD1_MASK },
+       { "Control-Windows", GDK_CONTROL_MASK|GDK_MOD4_MASK },
        { "Control-Shift-Alt", GDK_CONTROL_MASK|GDK_SHIFT_MASK|GDK_MOD1_MASK },
        { "Alt-Windows", GDK_MOD1_MASK|GDK_MOD4_MASK },
        { "Alt-Shift", GDK_MOD1_MASK|GDK_SHIFT_MASK },
@@ -541,12 +543,13 @@ public:
                /* constraint modifier */
                set_popdown_strings (_constraint_modifier_combo, dumb);
                _constraint_modifier_combo.signal_changed().connect (sigc::mem_fun(*this, &KeyboardOptions::constraint_modifier_chosen));
+               std::string mod_str = string_compose (X_("%1-%2"), Keyboard::primary_modifier_name (), Keyboard::level4_modifier_name ());
                Gtkmm2ext::UI::instance()->set_tip (_constraint_modifier_combo,
                                                    (string_compose (_("<b>Recommended Setting: %1</b>%2"),
 #ifdef __APPLE__
                                                                     Keyboard::primary_modifier_name (),
 #else
-                                                                    Keyboard::secondary_modifier_name (),
+                                                                    Keyboard::tertiary_modifier_name (),
 #endif
                                                                     restart_msg)));
                for (int x = 0; modifiers[x].name; ++x) {
@@ -562,6 +565,29 @@ public:
                t->attach (*l, col, col + 1, row, row + 1, FILL | EXPAND, 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));
+
+               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 (_("<b>Recommended Setting: %1</b>%2"), mod_str, restart_msg)));
+               for (int x = 0; modifiers[x].name; ++x) {
+                       if (modifiers[x].modifier == (guint) ArdourKeyboard::push_points_modifier ()) {
+                               _push_points_combo.set_active_text (S_(modifiers[x].name));
+                               break;
+                       }
+               }
+
+               l = manage (left_aligned_label (_("Push points using:")));
+               l->set_name ("OptionsLabel");
+
+               t->attach (*l, col, col + 1, row, row + 1, FILL | EXPAND, FILL);
+               t->attach (_push_points_combo, col + 1, col + 2, row, row + 1, FILL | EXPAND, FILL);
+
                ++row;
 
                l = manage (left_aligned_label (_("When Beginning a Trim:")));
@@ -595,8 +621,10 @@ public:
                /* 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 (_("<b>Recommended Setting: %1</b>%2"), Keyboard::tertiary_modifier_name (), restart_msg)));
+                                                   (string_compose (_("<b>Recommended Setting: %1</b>%2"), mod_str, restart_msg)));
                for (int x = 0; modifiers[x].name; ++x) {
                        if (modifiers[x].modifier == (guint) ArdourKeyboard::trim_anchored_modifier ()) {
                                _trim_anchored_combo.set_active_text (S_(modifiers[x].name));
@@ -640,7 +668,7 @@ public:
                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 (_("<b>Recommended Setting: %1</b>%2"), Keyboard::primary_modifier_name (), restart_msg)));
+                                                   (string_compose (_("<b>Recommended Setting: %1</b>%2"), Keyboard::tertiary_modifier_name (), restart_msg)));
                for (int x = 0; modifiers[x].name; ++x) {
                        if (modifiers[x].modifier == (guint) ArdourKeyboard::note_size_relative_modifier ()) {
                                _note_size_relative_combo.set_active_text (S_(modifiers[x].name));
@@ -668,9 +696,9 @@ public:
                set_popdown_strings (_snap_modifier_combo, dumb);
                _snap_modifier_combo.signal_changed().connect (sigc::mem_fun(*this, &KeyboardOptions::snap_modifier_chosen));
 #ifdef __APPLE__
-               std::string mod_str = string_compose (X_("%1-%2"), Keyboard::level4_modifier_name (), Keyboard::tertiary_modifier_name ());
+               mod_str = string_compose (X_("%1-%2"), Keyboard::level4_modifier_name (), Keyboard::tertiary_modifier_name ());
 #else
-               std::string mod_str = Keyboard::secondary_modifier_name();
+               mod_str = Keyboard::secondary_modifier_name();
 #endif
                Gtkmm2ext::UI::instance()->set_tip (_snap_modifier_combo,
                                                    (string_compose (_("<b>Recommended Setting: %1</b>%2"), mod_str, restart_msg)));
@@ -754,7 +782,7 @@ public:
                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::secondary_modifier_name (), Keyboard::tertiary_modifier_name ());
+               mod_str = string_compose (X_("%1-%2"), Keyboard::primary_modifier_name (), Keyboard::secondary_modifier_name ());
                Gtkmm2ext::UI::instance()->set_tip (_fine_adjust_combo,
                                                    (string_compose (_("<b>Recommended Setting: %1</b>%2"), mod_str, restart_msg)));
                for (int x = 0; modifiers[x].name; ++x) {
@@ -770,28 +798,6 @@ public:
                t->attach (*l, col, col + 1, row, row + 1, FILL | EXPAND, FILL);
                t->attach (_fine_adjust_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));
-
-               Gtkmm2ext::UI::instance()->set_tip (_push_points_combo,
-                                                   (string_compose (_("<b>Recommended Setting: %1</b>%2"), Keyboard::primary_modifier_name (), restart_msg)));
-               for (int x = 0; modifiers[x].name; ++x) {
-                       if (modifiers[x].modifier == (guint) ArdourKeyboard::push_points_modifier ()) {
-                               _push_points_combo.set_active_text (S_(modifiers[x].name));
-                               break;
-                       }
-               }
-
-               l = manage (left_aligned_label (_("Push points using:")));
-               l->set_name ("OptionsLabel");
-
-               t->attach (*l, col, col + 1, row, row + 1, FILL | EXPAND, FILL);
-               t->attach (_push_points_combo, col + 1, col + 2, row, row + 1, FILL | EXPAND, FILL);
-
                _box->pack_start (*t, false, false);
        }
 
@@ -827,7 +833,7 @@ private:
                string const txt = _edit_modifier_combo.get_active_text();
 
                for (int i = 0; modifiers[i].name; ++i) {
-                       if (txt == _(modifiers[i].name)) {
+                       if (txt == S_(modifiers[i].name)) {
                                Keyboard::set_edit_modifier (modifiers[i].modifier);
                                break;
                        }
@@ -839,7 +845,7 @@ private:
                string const txt = _delete_modifier_combo.get_active_text();
 
                for (int i = 0; modifiers[i].name; ++i) {
-                       if (txt == _(modifiers[i].name)) {
+                       if (txt == S_(modifiers[i].name)) {
                                Keyboard::set_delete_modifier (modifiers[i].modifier);
                                break;
                        }
@@ -851,7 +857,7 @@ private:
                string const txt = _copy_modifier_combo.get_active_text();
 
                for (int i = 0; modifiers[i].name; ++i) {
-                       if (txt == _(modifiers[i].name)) {
+                       if (txt == S_(modifiers[i].name)) {
                                Keyboard::set_copy_modifier (modifiers[i].modifier);
                                break;
                        }
@@ -863,7 +869,7 @@ private:
                string const txt = _insert_note_modifier_combo.get_active_text();
 
                for (int i = 0; modifiers[i].name; ++i) {
-                       if (txt == _(modifiers[i].name)) {
+                       if (txt == S_(modifiers[i].name)) {
                                Keyboard::set_insert_note_modifier (modifiers[i].modifier);
                                break;
                        }
@@ -875,7 +881,7 @@ private:
                string const txt = _snap_modifier_combo.get_active_text();
 
                for (int i = 0; modifiers[i].name; ++i) {
-                       if (txt == _(modifiers[i].name)) {
+                       if (txt == S_(modifiers[i].name)) {
                                Keyboard::set_snap_modifier (modifiers[i].modifier);
                                break;
                        }
@@ -887,7 +893,7 @@ private:
                string const txt = _snap_delta_combo.get_active_text();
 
                for (int i = 0; modifiers[i].name; ++i) {
-                       if (txt == _(modifiers[i].name)) {
+                       if (txt == S_(modifiers[i].name)) {
                                Keyboard::set_snap_delta_modifier (modifiers[i].modifier);
                                break;
                        }
@@ -899,7 +905,7 @@ private:
                string const txt = _constraint_modifier_combo.get_active_text();
 
                for (int i = 0; modifiers[i].name; ++i) {
-                       if (txt == _(modifiers[i].name)) {
+                       if (txt == S_(modifiers[i].name)) {
                                ArdourKeyboard::set_constraint_modifier (modifiers[i].modifier);
                                break;
                        }
@@ -911,7 +917,7 @@ private:
                string const txt = _trim_contents_combo.get_active_text();
 
                for (int i = 0; modifiers[i].name; ++i) {
-                       if (txt == _(modifiers[i].name)) {
+                       if (txt == S_(modifiers[i].name)) {
                                ArdourKeyboard::set_trim_contents_modifier (modifiers[i].modifier);
                                break;
                        }
@@ -923,7 +929,7 @@ private:
                string const txt = _trim_overlap_combo.get_active_text();
 
                for (int i = 0; modifiers[i].name; ++i) {
-                       if (txt == _(modifiers[i].name)) {
+                       if (txt == S_(modifiers[i].name)) {
                                ArdourKeyboard::set_trim_overlap_modifier (modifiers[i].modifier);
                                break;
                        }
@@ -935,7 +941,7 @@ private:
                string const txt = _trim_anchored_combo.get_active_text();
 
                for (int i = 0; modifiers[i].name; ++i) {
-                       if (txt == _(modifiers[i].name)) {
+                       if (txt == S_(modifiers[i].name)) {
                                ArdourKeyboard::set_trim_anchored_modifier (modifiers[i].modifier);
                                break;
                        }
@@ -947,7 +953,7 @@ private:
                string const txt = _fine_adjust_combo.get_active_text();
 
                for (int i = 0; modifiers[i].name; ++i) {
-                       if (txt == _(modifiers[i].name)) {
+                       if (txt == S_(modifiers[i].name)) {
                                ArdourKeyboard::set_fine_adjust_modifier (modifiers[i].modifier);
                                break;
                        }
@@ -959,7 +965,7 @@ private:
                string const txt = _push_points_combo.get_active_text();
 
                for (int i = 0; modifiers[i].name; ++i) {
-                       if (txt == _(modifiers[i].name)) {
+                       if (txt == S_(modifiers[i].name)) {
                                ArdourKeyboard::set_push_points_modifier (modifiers[i].modifier);
                                break;
                        }
@@ -971,7 +977,7 @@ private:
                string const txt = _note_size_relative_combo.get_active_text();
 
                for (int i = 0; modifiers[i].name; ++i) {
-                       if (txt == _(modifiers[i].name)) {
+                       if (txt == S_(modifiers[i].name)) {
                                ArdourKeyboard::set_note_size_relative_modifier (modifiers[i].modifier);
                                break;
                        }
@@ -1362,7 +1368,7 @@ public:
                edit_box->set_spacing(3);
                _box->pack_start (*edit_box, false, false);
                edit_box->show ();
-               
+
                Label* label = manage (new Label);
                label->set_text (_("Click to edit the settings for selected protocol ( it must be ENABLED first ):"));
                edit_box->pack_start (*label, false, false);
@@ -1432,7 +1438,7 @@ private:
                else
                        edit_button->set_sensitive (false);
        }
-       
+
        void view_changed (TreeModel::Path const &, TreeModel::iterator const & i)
        {
                TreeModel::Row r = *i;
@@ -1854,7 +1860,6 @@ RCOptionEditor::RCOptionEditor ()
         , _rc_config (Config)
        , _mixer_strip_visibility ("mixer-element-visibility")
 {
-
        UIConfiguration::instance().ParameterChanged.connect (sigc::mem_fun (*this, &RCOptionEditor::parameter_changed));
 
        /* MISC */
@@ -2185,7 +2190,7 @@ RCOptionEditor::RCOptionEditor ()
 
        Gtkmm2ext::UI::instance()->set_tip
                (_ltc_volume_slider->tip_widget(),
-                _("Specify the Peak Volume of the generated LTC signal in dbFS. A good value is  0dBu ^= -18dbFS in an EBU calibrated system"));
+                _("Specify the Peak Volume of the generated LTC signal in dBFS. A good value is  0dBu ^= -18dBFS in an EBU calibrated system"));
 
        add_option (_("Transport/Sync"), _ltc_volume_slider);
 
@@ -2337,7 +2342,7 @@ if (!Profile->get_mixbus()) {
        rsas->add(ExistingNewlyCreatedBoth, _("existing selection and newly-created regions"));
 
        add_option (_("Editor"), rsas);
-       
+
        add_option (_("Editor/Waveforms"), new OptionEditorHeading (_("Waveforms")));
 
 if (!Profile->get_mixbus()) {
@@ -2879,6 +2884,9 @@ if (!ARDOUR::Profile->get_mixbus()) {
 
 #if (defined WINDOWS_VST_SUPPORT || defined LXVST_SUPPORT)
        add_option (_("Plugins/VST"), new OptionEditorHeading (_("VST")));
+       add_option (_("Plugins/VST"),
+                       new RcActionButton (_("Scan for Plugins"),
+                               sigc::mem_fun (*this, &RCOptionEditor::plugin_scan_refresh)));
 
        bo = new BoolOption (
                        "discover-vst-on-start",
@@ -2944,7 +2952,11 @@ if (!ARDOUR::Profile->get_mixbus()) {
 #endif
 
 #ifdef AUDIOUNIT_SUPPORT
+
        add_option (_("Plugins/Audio Unit"), new OptionEditorHeading (_("Audio Unit")));
+       add_option (_("Plugins/Audio Unit"),
+                       new RcActionButton (_("Scan for Plugins"),
+                               sigc::mem_fun (*this, &RCOptionEditor::plugin_scan_refresh)));
 
        bo = new BoolOption (
                        "discover-audio-units",
@@ -3296,7 +3308,7 @@ if (!ARDOUR::Profile->get_mixbus()) {
 
        Gtkmm2ext::UI::instance()->set_tip
                (mpks->tip_widget(),
-                _("Specify the audio signal level in dbFS at and above which the meter-peak indicator will flash red."));
+                _("Specify the audio signal level in dBFS at and above which the meter-peak indicator will flash red."));
 
        add_option (S_("Preferences|Metering"), mpks);
 
@@ -3347,6 +3359,15 @@ if (!ARDOUR::Profile->get_mixbus()) {
        parameter_changed ("send-ltc");
        parameter_changed ("sync-source");
        parameter_changed ("use-monitor-bus");
+       parameter_changed ("open-gui-after-adding-plugin");
+
+       XMLNode* node = ARDOUR_UI::instance()->preferences_settings();
+       if (node) {
+               /* gcc4 complains about ambiguity with Gtk::Widget::set_state
+                  (Gtk::StateType) here !!!
+               */
+               Tabbable::set_state (*node, Stateful::loading_state_version);
+       }
 }
 
 void
@@ -3385,7 +3406,7 @@ RCOptionEditor::parameter_changed (string const & p)
                _ltc_send_continuously->set_sensitive (s);
                _ltc_volume_slider->set_sensitive (s);
        } else if (p == "open-gui-after-adding-plugin" || p == "show-inline-display-by-default") {
-#ifdef LV2_SUPPORT
+#if (defined LV2_SUPPORT && defined LV2_EXTENDED)
                _plugin_prefer_inline->set_sensitive (UIConfiguration::instance().get_open_gui_after_adding_plugin() && UIConfiguration::instance().get_show_inline_display_by_default());
 #endif
        }
@@ -3481,3 +3502,11 @@ RCOptionEditor::use_own_window (bool and_fill_it)
 
        return win;
 }
+
+XMLNode&
+RCOptionEditor::get_state ()
+{
+       XMLNode* node = new XMLNode (X_("Preferences"));
+       node->add_child_nocopy (Tabbable::get_state());
+       return *node;
+}