Code

copyedit
[inkscape.git] / src / ui / widget / preferences-widget.cpp
index e1671e5b1064f85fd6ca873590db669d8c2d54b2..6c5473caa062ca39e0e64f0e0257cde57170c024 100644 (file)
@@ -8,7 +8,7 @@
  * Copyright (C) 2004, 2006, 2007 Authors
  *
  * Released under GNU GPL.  Read the file 'COPYING' for more information.
- */ 
+ */
 
 #ifdef HAVE_CONFIG_H
 # include <config.h>
@@ -47,11 +47,11 @@ DialogPage::DialogPage()
 
 void DialogPage::add_line(bool indent, const Glib::ustring label, Gtk::Widget& widget, const Glib::ustring suffix, const Glib::ustring& tip, bool expand_widget)
 {
-    int start_col; 
+    int start_col;
     int row = this->property_n_rows();
     Gtk::Widget* w;
     if (expand_widget)
-    {   
+    {
         w = &widget;
     }
     else
@@ -86,7 +86,7 @@ void DialogPage::add_line(bool indent, const Glib::ustring label, Gtk::Widget& w
         alignment->set_padding(0, 0, 12, 0);
         alignment->add(*w);
         this->attach(*alignment, start_col, 2, row, row + 1, Gtk::FILL | Gtk::EXPAND, Gtk::AttachOptions(),  0, 0);
-    } 
+    }
     else
     {
         this->attach(*w, start_col, 2, row, row + 1, Gtk::FILL | Gtk::EXPAND, Gtk::AttachOptions(),  0, 0);
@@ -100,7 +100,7 @@ void DialogPage::add_line(bool indent, const Glib::ustring label, Gtk::Widget& w
         else
             ((Gtk::HBox*)w)->pack_start(*suffix_widget,false,false);
     }
-    
+
     if (tip != "")
     {
         _tooltips.set_tip (widget, tip);
@@ -113,11 +113,11 @@ void DialogPage::add_group_header(Glib::ustring name)
     int row = this->property_n_rows();
     if (name != "")
     {
-        Gtk::Label* label_widget = Gtk::manage(new Gtk::Label(Glib::ustring(/*"<span size='large'>*/"<b>") + name + 
+        Gtk::Label* label_widget = Gtk::manage(new Gtk::Label(Glib::ustring(/*"<span size='large'>*/"<b>") + name +
                                                Glib::ustring("</b>"/*</span>"*/) , Gtk::ALIGN_LEFT , Gtk::ALIGN_CENTER, true));
         label_widget->set_use_markup(true);
         this->attach(*label_widget , 0, 4, row, row + 1, Gtk::FILL, Gtk::AttachOptions(), 0, 0);
-        if (row != 1) 
+        if (row != 1)
             this->set_row_spacing(row - 1, 18);
     }
 }
@@ -127,7 +127,7 @@ void DialogPage::set_tip(Gtk::Widget& widget, const Glib::ustring& tip)
     _tooltips.set_tip (widget, tip);
 }
 
-void PrefCheckButton::init(const Glib::ustring& label, const std::string& prefs_path, const std::string& attr, 
+void PrefCheckButton::init(const Glib::ustring& label, const std::string& prefs_path, const std::string& attr,
                            bool default_value)
 {
     _prefs_path = prefs_path;
@@ -139,21 +139,22 @@ void PrefCheckButton::init(const Glib::ustring& label, const std::string& prefs_
 void PrefCheckButton::on_toggled()
 {
     if (this->is_visible()) //only take action if the user toggled it
-    {    
+    {
         prefs_set_int_attribute (_prefs_path.c_str(), _attr.c_str(), (int) this->get_active());
     }
 }
 
-void PrefRadioButton::init(const Glib::ustring& label, const std::string& prefs_path, const std::string& attr, 
+void PrefRadioButton::init(const Glib::ustring& label, const std::string& prefs_path, const std::string& attr,
                            const std::string& string_value, bool default_value, PrefRadioButton* group_member)
 {
+    (void)default_value;
     _value_type = VAL_STRING;
     _prefs_path = prefs_path;
     _attr = attr;
     _string_value = string_value;
     this->set_label(label);
     if (group_member)
-    {   
+    {
         Gtk::RadioButtonGroup rbg = group_member->get_group();
         this->set_group(rbg);
     }
@@ -164,7 +165,7 @@ void PrefRadioButton::init(const Glib::ustring& label, const std::string& prefs_
         this->set_active( false );
 }
 
-void PrefRadioButton::init(const Glib::ustring& label, const std::string& prefs_path, const std::string& attr, 
+void PrefRadioButton::init(const Glib::ustring& label, const std::string& prefs_path, const std::string& attr,
                            int int_value, bool default_value, PrefRadioButton* group_member)
 {
     _value_type = VAL_INT;
@@ -173,7 +174,7 @@ void PrefRadioButton::init(const Glib::ustring& label, const std::string& prefs_
     _int_value = int_value;
     this->set_label(label);
     if (group_member)
-    {   
+    {
         Gtk::RadioButtonGroup rbg = group_member->get_group();
         this->set_group(rbg);
     }
@@ -187,16 +188,16 @@ void PrefRadioButton::on_toggled()
 {
     this->changed_signal.emit(this->get_active());
     if (this->is_visible() && this->get_active() ) //only take action if toggled by user (to active)
-    {    
+    {
         if ( _value_type == VAL_STRING )
-               prefs_set_string_attribute ( _prefs_path.c_str(), _attr.c_str(), _string_value.c_str());
+            prefs_set_string_attribute ( _prefs_path.c_str(), _attr.c_str(), _string_value.c_str());
         else if ( _value_type == VAL_INT )
-               prefs_set_int_attribute ( _prefs_path.c_str(), _attr.c_str(), _int_value);
+            prefs_set_int_attribute ( _prefs_path.c_str(), _attr.c_str(), _int_value);
     }
 }
 
 void PrefSpinButton::init(const std::string& prefs_path, const std::string& attr,
-              double lower, double upper, double step_increment, double page_increment, 
+              double lower, double upper, double step_increment, double page_increment,
               double default_value, bool is_int, bool is_percent)
 {
     _prefs_path = prefs_path;
@@ -204,7 +205,7 @@ void PrefSpinButton::init(const std::string& prefs_path, const std::string& attr
     _is_int = is_int;
     _is_percent = is_percent;
 
-    double value; 
+    double value;
     if (is_int)
         if (is_percent)
             value = 100 * prefs_get_double_attribute_limited (prefs_path.c_str(), attr.c_str(), default_value, lower/100.0, upper/100.0);
@@ -218,7 +219,7 @@ void PrefSpinButton::init(const std::string& prefs_path, const std::string& attr
     this->set_numeric();
     this->set_value (value);
     this->set_width_chars(6);
-    if (is_int) 
+    if (is_int)
         this->set_digits(0);
     else if (step_increment < 0.1)
         this->set_digits(4);
@@ -230,7 +231,7 @@ void PrefSpinButton::init(const std::string& prefs_path, const std::string& attr
 void PrefSpinButton::on_value_changed()
 {
     if (this->is_visible()) //only take action if user changed value
-    {    
+    {
         if (_is_int)
             if (_is_percent)
                 prefs_set_double_attribute(_prefs_path.c_str(), _attr.c_str(), this->get_value()/100.0);
@@ -262,11 +263,64 @@ void PrefCombo::init(const std::string& prefs_path, const std::string& attr,
 void PrefCombo::on_changed()
 {
     if (this->is_visible()) //only take action if user changed value
-    {    
+    {
         prefs_set_int_attribute (_prefs_path.c_str(), _attr.c_str(), _values[this->get_active_row_number()]);
     }
 }
 
+void PrefEntryButtonHBox::init(const std::string& prefs_path, const std::string& attr,
+            bool visibility, gchar* default_string)
+{
+    _prefs_path = prefs_path;
+    _attr = attr;
+    _default_string = default_string;
+    relatedEntry = new Gtk::Entry();
+    relatedButton = new Gtk::Button(_("Reset"));
+    relatedEntry->set_invisible_char('*');
+    relatedEntry->set_visibility(visibility);
+    relatedEntry->set_text(prefs_get_string_attribute(_prefs_path.c_str(), _attr.c_str()));
+    this->pack_start(*relatedEntry);
+    this->pack_start(*relatedButton);
+    relatedButton->signal_clicked().connect(
+            sigc::mem_fun(*this, &PrefEntryButtonHBox::onRelatedButtonClickedCallback));
+    relatedEntry->signal_changed().connect(
+            sigc::mem_fun(*this, &PrefEntryButtonHBox::onRelatedEntryChangedCallback));
+}
+
+void PrefEntryButtonHBox::onRelatedEntryChangedCallback()
+{
+    if (this->is_visible()) //only take action if user changed value
+    {
+        prefs_set_string_attribute(_prefs_path.c_str(), _attr.c_str(),
+        relatedEntry->get_text().c_str());
+    }
+}
+
+void PrefEntryButtonHBox::onRelatedButtonClickedCallback()
+{
+    if (this->is_visible()) //only take action if user changed value
+    {
+        prefs_set_string_attribute(_prefs_path.c_str(), _attr.c_str(),
+        _default_string);
+        relatedEntry->set_text(_default_string);
+    }
+}
+
+
+void PrefFileButton::init(const std::string& prefs_path, const std::string& attr)
+{
+    _prefs_path = prefs_path;
+    _attr = attr;
+    select_filename(Glib::filename_from_utf8(prefs_get_string_attribute(_prefs_path.c_str(), _attr.c_str())));
+
+    signal_selection_changed().connect(sigc::mem_fun(*this, &PrefFileButton::onFileChanged));
+}
+
+void PrefFileButton::onFileChanged()
+{
+    prefs_set_string_attribute(_prefs_path.c_str(), _attr.c_str(), Glib::filename_to_utf8(get_filename()).c_str());
+}
+
 void PrefEntry::init(const std::string& prefs_path, const std::string& attr,
             bool visibility)
 {
@@ -285,6 +339,40 @@ void PrefEntry::on_changed()
     }
 }
 
+void PrefColorPicker::init(const Glib::ustring& label, const std::string& prefs_path, const std::string& attr,
+                           guint32 default_rgba)
+{
+    _prefs_path = prefs_path;
+    _attr = attr;
+    _title = label;
+    this->setRgba32( prefs_get_int_attribute (_prefs_path.c_str(), _attr.c_str(), (int)default_rgba) );
+}
+
+void PrefColorPicker::on_changed (guint32 rgba)
+{
+    if (this->is_visible()) //only take action if the user toggled it
+    {
+        prefs_set_int_attribute (_prefs_path.c_str(), _attr.c_str(), (int) rgba);
+    }
+}
+
+void PrefUnit::init(const std::string& prefs_path, const std::string& attr)
+{
+    _prefs_path = prefs_path;
+    _attr = attr;
+    setUnitType(UNIT_TYPE_LINEAR);
+    gchar const * prefval = prefs_get_string_attribute(_prefs_path.c_str(), _attr.c_str());
+    setUnit(prefval);
+}
+
+void PrefUnit::on_changed()
+{
+    if (this->is_visible()) //only take action if user changed value
+    {
+        prefs_set_string_attribute(_prefs_path.c_str(), _attr.c_str(), getUnitAbbr().c_str());
+    }
+}
+
 } // namespace Widget
 } // namespace UI
 } // namespace Inkscape