X-Git-Url: https://git.tokkee.org/?a=blobdiff_plain;f=src%2Fui%2Fwidget%2Fpreferences-widget.cpp;h=6c5473caa062ca39e0e64f0e0257cde57170c024;hb=fd5c8954a92eac9af9af21d2a3665e9c673203a2;hp=a6302aa9dd0a2e812cfbccc9c0a7f6beb5463d76;hpb=1c8797563cc134190fe424f8fdb6b2f8ed7d9275;p=inkscape.git diff --git a/src/ui/widget/preferences-widget.cpp b/src/ui/widget/preferences-widget.cpp index a6302aa9d..6c5473caa 100644 --- a/src/ui/widget/preferences-widget.cpp +++ b/src/ui/widget/preferences-widget.cpp @@ -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 @@ -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(/*"*/"") + name + + Gtk::Label* label_widget = Gtk::manage(new Gtk::Label(Glib::ustring(/*"*/"") + name + Glib::ustring(""/*"*/) , 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) { @@ -277,13 +331,46 @@ void PrefEntry::init(const std::string& prefs_path, const std::string& attr, this->set_text(prefs_get_string_attribute(_prefs_path.c_str(), _attr.c_str())); } -void PrefEntry::on_activate() +void PrefEntry::on_changed() { if (this->is_visible()) //only take action if user changed value { prefs_set_string_attribute(_prefs_path.c_str(), _attr.c_str(), this->get_text().c_str()); } - return; +} + +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