distinguish global peak-reset button from meters:
[ardour.git] / gtk2_ardour / option_editor.cc
index da4594e6da953fb9787387cc06205c1b765c8f2d..36ff825c1b90c7c52b6f57391bd2fdaa0c8ec196 100644 (file)
@@ -16,6 +16,7 @@
     Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 
 */
+#include <algorithm>
 
 #include <gtkmm/box.h>
 #include <gtkmm/alignment.h>
@@ -29,7 +30,6 @@
 
 #include "option_editor.h"
 #include "gui_thread.h"
-#include "utils.h"
 #include "i18n.h"
 
 using namespace std;
@@ -113,7 +113,10 @@ BoolOption::BoolOption (string const & i, string const & n, sigc::slot<bool> g,
          _get (g),
          _set (s)
 {
-       _button = manage (new CheckButton (n));
+       _button = manage (new CheckButton);
+       _label = manage (new Label);
+       _label->set_markup (n);
+       _button->add (*_label);
        _button->set_active (_get ());
        _button->signal_toggled().connect (sigc::mem_fun (*this, &BoolOption::toggled));
 }
@@ -144,6 +147,8 @@ EntryOption::EntryOption (string const & i, string const & n, sigc::slot<string>
        _label = manage (left_aligned_label (n + ":"));
        _entry = manage (new Entry);
        _entry->signal_activate().connect (sigc::mem_fun (*this, &EntryOption::activated));
+       _entry->signal_focus_out_event().connect (sigc::mem_fun (*this, &EntryOption::focus_out));
+       _entry->signal_insert_text().connect (sigc::mem_fun (*this, &EntryOption::filter_text));
 }
 
 void
@@ -158,12 +163,37 @@ EntryOption::set_state_from_config ()
        _entry->set_text (_get ());
 }
 
+void
+EntryOption::set_sensitive (bool s)
+{
+       _entry->set_sensitive (s);
+}
+
+void
+EntryOption::filter_text (const Glib::ustring&, int*)
+{
+       std::string text = _entry->get_text ();
+       for (size_t i = 0; i < _invalid.length(); ++i) {
+               text.erase (std::remove(text.begin(), text.end(), _invalid.at(i)), text.end());
+       }
+       if (text != _entry->get_text ()) {
+               _entry->set_text (text);
+       }
+}
+
 void
 EntryOption::activated ()
 {
        _set (_entry->get_text ());
 }
 
+bool
+EntryOption::focus_out (GdkEventFocus*)
+{
+       _set (_entry->get_text ());
+       return true;
+}
+
 /** Construct a BoolComboOption.
  *  @param i id
  *  @param n User-visible name.
@@ -224,23 +254,10 @@ FaderOption::FaderOption (string const & i, string const & n, sigc::slot<gain_t>
        , _get (g)
        , _set (s)
 {
-       _pix = ::get_icon (X_("fader_belt_h"));
-       if (_pix == 0) {
-               throw failed_constructor ();
-       }
-
-       _pix_desensitised = ::get_icon (X_("fader_belt_h_desensitised"));
-       if (_pix_desensitised == 0) {
-               throw failed_constructor ();
-       }
-       
-       _db_slider = manage (new HSliderController (_pix,
-                                                   _pix_desensitised,
-                                                   &_db_adjustment,
-                                                   115,
-                                                   false));
+       _db_slider = manage (new HSliderController (&_db_adjustment, 115, 18, false));
 
        _label.set_text (n + ":");
+       _label.set_alignment (0, 0.5);
        _label.set_name (X_("OptionsLabel"));
 
        _fader_centering_box.pack_start (*_db_slider, true, false);
@@ -287,7 +304,7 @@ FaderOption::add_to_page (OptionEditorPage* p)
 
 ClockOption::ClockOption (string const & i, string const & n, sigc::slot<std::string> g, sigc::slot<bool, std::string> s)
        : Option (i, n)
-       , _clock (X_("timecode-offset"), false, X_(""), true, false, true, false)
+       , _clock (X_("timecode-offset"), true, X_(""), true, false, true, false)
        , _get (g)
        , _set (s)
 {
@@ -353,7 +370,7 @@ OptionEditor::OptionEditor (Configuration* c, std::string const & t)
        using namespace Notebook_Helpers;
 
        set_default_size (300, 300);
-       set_wmclass (X_("ardour_preferences"), PROGRAM_NAME);
+       // set_wmclass (X_("ardour_preferences"), PROGRAM_NAME);
 
        set_name ("Preferences");
        add_events (Gdk::KEY_PRESS_MASK | Gdk::KEY_RELEASE_MASK);
@@ -450,7 +467,10 @@ DirectoryOption::set_state_from_config ()
 void
 DirectoryOption::add_to_page (OptionEditorPage* p)
 {
-       add_widgets_to_page (p, manage (new Label (_name)), &_file_chooser);
+       Gtk::Label *label = manage (new Label (_name));
+       label->set_alignment (0, 0.5);
+       label->set_name (X_("OptionsLabel"));
+       add_widgets_to_page (p, label, &_file_chooser);
 }
 
 void