Code

Changed preference to use file chooser button
authorjoncruz <joncruz@users.sourceforge.net>
Wed, 26 Sep 2007 07:44:18 +0000 (07:44 +0000)
committerjoncruz <joncruz@users.sourceforge.net>
Wed, 26 Sep 2007 07:44:18 +0000 (07:44 +0000)
src/color-profile.cpp
src/ui/dialog/inkscape-preferences.cpp
src/ui/dialog/inkscape-preferences.h
src/ui/widget/preferences-widget.cpp
src/ui/widget/preferences-widget.h

index 5c5303e08355a8e515e541a0a453d289da598122..46bd1b803f972363c47ed81271d7333d1d6eb4cc 100644 (file)
@@ -378,7 +378,7 @@ cmsHPROFILE Inkscape::colorprofile_get_system_profile_handle()
     long long int which = prefs_get_int_attribute_limited( "options.displayprofile", "enable", 0, 0, 1 );
     gchar const * uri = prefs_get_string_attribute("options.displayprofile", "uri");
 
-    if ( which && uri ) {
+    if ( which && uri && *uri ) {
         if ( lastURI != std::string(uri) ) {
             if ( theOne ) {
                 cmsCloseProfile( theOne );
index 7ee381bffbef91c7e85ff2769d0d4f1c8c7b6529..a5c071dc3518e4ce0357faa7738dc8f74c9f3c51 100644 (file)
@@ -650,11 +650,14 @@ void InkscapePreferences::initPageMisc()
     _misc_cms_display.init( _("Enable display calibration"), "options.displayprofile", "enable", false);
     _page_misc.add_line( false, "", _misc_cms_display, "",
                            _("Enables application of the display using an ICC profile."), true);
-    _misc_cms_display_profile.init("options.displayprofile", "uri", true);
+    _misc_cms_display_profile.init("options.displayprofile", "uri");
     _page_misc.add_line( false, _("Display profile:"), _misc_cms_display_profile, "",
             _("The ICC profile to use to calibrate display output."), true);
 #if ENABLE_LCMS
     _misc_cms_display.signal_toggled().connect( sigc::ptr_fun(forceUpdates) );
+
+    _misc_cms_display_profile.signal_selection_changed().connect( sigc::ptr_fun(forceUpdates) );
+
 #else
     // disable it, but leave it visible
     _misc_cms_display.set_sensitive( false );
index 03ed72f638a40ef04c8627feef49e104931628ae..1f53115cada6aee6fa6d7708d64a5a5ccbec8c5b 100644 (file)
@@ -163,7 +163,7 @@ protected:
     PrefCombo       _misc_overs_bitmap;
 
     PrefCheckButton _misc_cms_display;
-    PrefEntry       _misc_cms_display_profile;
+    PrefFileButton  _misc_cms_display_profile;
 
     PrefEntryButtonHBox _importexport_ocal_url;
     PrefEntry       _importexport_ocal_username;
index 4de42f36f41e126453242ae29c1ffa56d41e3519..243fe029dfa4137e31debf5b8df99f9b68ca6932 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,7 +263,7 @@ 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()]);
     }
 }
@@ -306,6 +307,19 @@ void PrefEntryButtonHBox::onRelatedButtonClickedCallback()
 }
 
 
+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)
index b48672d39b128be5c191f23e0cb0afa825fd8331..72f010f13e8a48d893b8da07ae6e5c96f8f2de25 100644 (file)
@@ -23,6 +23,7 @@
 #include <gtkmm/radiobutton.h>
 #include <gtkmm/box.h>
 #include <gtkmm/frame.h>
+#include <gtkmm/filechooserbutton.h>
 #include <sigc++/sigc++.h>
 //#include <glibmm/i18n.h>
 
@@ -33,7 +34,7 @@ namespace Widget {
 class PrefCheckButton : public Gtk::CheckButton
 {
 public:
-    void init(const Glib::ustring& label, const std::string& prefs_path, const std::string& attr, 
+    void init(const Glib::ustring& label, const std::string& prefs_path, const std::string& attr,
               bool default_value);
 protected:
     std::string _prefs_path;
@@ -45,9 +46,9 @@ protected:
 class PrefRadioButton : public Gtk::RadioButton
 {
 public:
-    void init(const Glib::ustring& label, const std::string& prefs_path, const std::string& attr, 
+    void init(const Glib::ustring& label, const std::string& prefs_path, const std::string& attr,
               int int_value, bool default_value, PrefRadioButton* group_member);
-    void init(const Glib::ustring& label, const std::string& prefs_path, const std::string& attr, 
+    void 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);
     sigc::signal<void, bool> changed_signal;
 protected:
@@ -68,7 +69,7 @@ class PrefSpinButton : public Gtk::SpinButton
 {
 public:
     void 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);
 protected:
     std::string _prefs_path;
@@ -116,6 +117,17 @@ protected:
     void onRelatedButtonClickedCallback();
 };
 
+class PrefFileButton : public Gtk::FileChooserButton
+{
+public:
+    void init(const std::string& prefs_path, const std::string& attr);
+
+protected:
+    std::string _prefs_path;
+    std::string _attr;
+    void onFileChanged();
+};
+
 class DialogPage : public Gtk::Table
 {
 public:
@@ -134,7 +146,7 @@ protected:
 
 #endif //INKSCAPE_UI_WIDGET_INKSCAPE_PREFERENCES_H
 
-/* 
+/*
   Local Variables:
   mode:c++
   c-file-style:"stroustrup"