X-Git-Url: https://git.tokkee.org/?a=blobdiff_plain;f=src%2Fui%2Fwidget%2Fpreferences-widget.cpp;h=6c5473caa062ca39e0e64f0e0257cde57170c024;hb=fd5c8954a92eac9af9af21d2a3665e9c673203a2;hp=cc389c611be684fdc817d433e22f0da9cf56a9a2;hpb=6b15695578f07a3f72c4c9475c1a261a3021472a;p=inkscape.git diff --git a/src/ui/widget/preferences-widget.cpp b/src/ui/widget/preferences-widget.cpp index cc389c611..6c5473caa 100644 --- a/src/ui/widget/preferences-widget.cpp +++ b/src/ui/widget/preferences-widget.cpp @@ -3,11 +3,12 @@ * * Authors: * Marco Scholten + * Bruno Dilly * - * Copyright (C) 2004, 2006 Authors + * Copyright (C) 2004, 2006, 2007 Authors * * Released under GNU GPL. Read the file 'COPYING' for more information. - */ + */ #ifdef HAVE_CONFIG_H # include @@ -46,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 @@ -85,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); @@ -99,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); @@ -112,16 +113,21 @@ 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); } } -void PrefCheckButton::init(const Glib::ustring& label, const std::string& prefs_path, const std::string& attr, +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, bool default_value) { _prefs_path = prefs_path; @@ -133,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); } @@ -158,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; @@ -167,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); } @@ -181,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; @@ -198,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); @@ -212,10 +219,10 @@ 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(3); + this->set_digits(4); else this->set_digits(2); @@ -224,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); @@ -256,9 +263,113 @@ 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()]); - std::cout << "combo set: " << _prefs_path << " " << _attr << " " << _values[this->get_active_row_number()] << std::endl; + } +} + +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) +{ + _prefs_path = prefs_path; + _attr = attr; + this->set_invisible_char('*'); + this->set_visibility(visibility); + this->set_text(prefs_get_string_attribute(_prefs_path.c_str(), _attr.c_str())); +} + +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()); + } +} + +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()); } }