diff options
| author | Johan B. C. Engelen <jbc.engelen@swissonline.ch> | 2011-04-08 23:19:48 +0000 |
|---|---|---|
| committer | Johan Engelen <goejendaagh@zonnet.nl> | 2011-04-08 23:19:48 +0000 |
| commit | cba60dd473848d5e980894dd4a48fdeb9890a8ac (patch) | |
| tree | 6834f9cadac45da02893f2769acbe3537e45b28c /src/ui | |
| parent | allow other than numeric characters in guideline dialog (diff) | |
| download | inkscape-cba60dd473848d5e980894dd4a48fdeb9890a8ac.tar.gz inkscape-cba60dd473848d5e980894dd4a48fdeb9890a8ac.zip | |
add a subclassed spinbutton class. this numeric entry box accepts both ',' and '.' as the decimal point when in numeric mode.
(bzr r10150)
Diffstat (limited to 'src/ui')
| -rw-r--r-- | src/ui/dialog/guides.cpp | 6 | ||||
| -rw-r--r-- | src/ui/dialog/guides.h | 7 | ||||
| -rw-r--r-- | src/ui/widget/Makefile_insert | 2 | ||||
| -rw-r--r-- | src/ui/widget/spinbutton.cpp | 60 | ||||
| -rw-r--r-- | src/ui/widget/spinbutton.h | 57 |
5 files changed, 126 insertions, 6 deletions
diff --git a/src/ui/dialog/guides.cpp b/src/ui/dialog/guides.cpp index b0b4705b1..1ac1e5d82 100644 --- a/src/ui/dialog/guides.cpp +++ b/src/ui/dialog/guides.cpp @@ -194,9 +194,9 @@ void GuidelinePropertiesDialog::_setup() { sp_unit_selector_add_adjustment(SP_UNIT_SELECTOR(unit_selector), GTK_ADJUSTMENT(_adjustment_x.gobj())); sp_unit_selector_add_adjustment(SP_UNIT_SELECTOR(unit_selector), GTK_ADJUSTMENT(_adjustment_y.gobj())); _spin_button_x.configure(_adjustment_x, 1.0 , 3); - // _spin_button_x.set_numeric(); // not setting numeric enables writing '.' instead of ',' for decimal + _spin_button_x.set_numeric(); _spin_button_y.configure(_adjustment_y, 1.0 , 3); - //_spin_button_y.set_numeric(); // not setting numeric enables writing '.' instead of ',' for decimal + _spin_button_y.set_numeric(); _layout_table.attach(_label_X, 1, 2, 4, 5, Gtk::EXPAND | Gtk::FILL, Gtk::FILL); _layout_table.attach(_spin_button_x, @@ -213,7 +213,7 @@ void GuidelinePropertiesDialog::_setup() { // angle spinbutton _spin_angle.configure(_adj_angle, 5.0 , 3); - //_spin_angle.set_numeric(); // not setting numeric enables writing '.' instead of ',' for decimal + _spin_angle.set_numeric(); _spin_angle.show(); _layout_table.attach(_label_degrees, 1, 2, 8, 9, Gtk::EXPAND | Gtk::FILL, Gtk::FILL); diff --git a/src/ui/dialog/guides.h b/src/ui/dialog/guides.h index 5c74d3618..8485c78a7 100644 --- a/src/ui/dialog/guides.h +++ b/src/ui/dialog/guides.h @@ -21,6 +21,7 @@ #include <gtkmm/stock.h> #include <gtkmm/adjustment.h> #include "ui/widget/button.h" +#include "ui/widget/spinbutton.h" #include <2geom/point.h> namespace Inkscape { @@ -62,12 +63,12 @@ private: Inkscape::UI::Widget::CheckButton _relative_toggle; static bool _relative_toggle_status; // remember the status of the _relative_toggle_status button across instances Gtk::Adjustment _adjustment_x; - Gtk::SpinButton _spin_button_x; + Inkscape::UI::Widget::SpinButton _spin_button_x; Gtk::Adjustment _adjustment_y; - Gtk::SpinButton _spin_button_y; + Inkscape::UI::Widget::SpinButton _spin_button_y; Gtk::Adjustment _adj_angle; - Gtk::SpinButton _spin_angle; + Inkscape::UI::Widget::SpinButton _spin_angle; Gtk::Widget *_unit_selector; bool _mode; diff --git a/src/ui/widget/Makefile_insert b/src/ui/widget/Makefile_insert index b6069631b..bd23b6782 100644 --- a/src/ui/widget/Makefile_insert +++ b/src/ui/widget/Makefile_insert @@ -66,6 +66,8 @@ ink_common_sources += \ ui/widget/scalar.h \ ui/widget/selected-style.h \ ui/widget/selected-style.cpp \ + ui/widget/spinbutton.h \ + ui/widget/spinbutton.cpp \ ui/widget/spin-slider.h \ ui/widget/spin-slider.cpp \ ui/widget/style-subject.h \ diff --git a/src/ui/widget/spinbutton.cpp b/src/ui/widget/spinbutton.cpp new file mode 100644 index 000000000..55c2d877f --- /dev/null +++ b/src/ui/widget/spinbutton.cpp @@ -0,0 +1,60 @@ +/** + * \brief SpinButton widget, that allows entry of both '.' and ',' for the decimal, even when in numeric mode. + */ +/* + * Author: + * Johan B. C. Engelen + * + * Copyright (C) 2011 Author + * + * Released under GNU GPL. Read the file 'COPYING' for more information. + */ + +#ifdef HAVE_CONFIG_H +# include <config.h> +#endif + +#include "spinbutton.h" + +#include <locale.h> + +namespace Inkscape { +namespace UI { +namespace Widget { + +void +SpinButton::on_insert_text(const Glib::ustring& text, int* position) +{ + Glib::ustring newtext = text; + + // if in numeric mode: replace '.' or ',' with the locale's decimal point + if (get_numeric()) { + size_t found = newtext.find('.'); + if (found != Glib::ustring::npos) { + newtext.replace(found, 1, localeconv()->decimal_point); + } else { + found = newtext.find(','); + if (found != Glib::ustring::npos) { + newtext.replace(found, 1, localeconv()->decimal_point); + } + } + } + + // call parent function with replaced text: + Gtk::SpinButton::on_insert_text(newtext, position); +} + +} // namespace Widget +} // namespace UI +} // namespace Inkscape + +/* + Local Variables: + mode:c++ + c-file-style:"stroustrup" + c-file-offsets:((innamespace . 0)(inline-open . 0)) + indent-tabs-mode:nil + fill-column:99 + End: +*/ +// vim: filetype=c++:expandtab:shiftwidth=4:tabstop=8:softtabstop=4 : diff --git a/src/ui/widget/spinbutton.h b/src/ui/widget/spinbutton.h new file mode 100644 index 000000000..d9b382b08 --- /dev/null +++ b/src/ui/widget/spinbutton.h @@ -0,0 +1,57 @@ +/** + * \brief SpinButton widget, that allows entry of both '.' and ',' for the decimal, even when in numeric mode. + */ +/* + * Author: + * Johan B. C. Engelen + * + * Copyright (C) 2011 Author + * + * Released under GNU GPL. Read the file 'COPYING' for more information. + */ + +#ifndef INKSCAPE_UI_WIDGET_SPINBUTTON_H +#define INKSCAPE_UI_WIDGET_SPINBUTTON_H + +#include <gtkmm/spinbutton.h> + +namespace Inkscape { +namespace UI { +namespace Widget { + +/** + * SpinButton widget, that allows entry of both '.' and ',' for the decimal, even when in numeric mode. + */ +class SpinButton : public Gtk::SpinButton +{ +public: + SpinButton() : Gtk::SpinButton() {}; + /// @todo perhaps more constructors should be added here + + virtual ~SpinButton() {}; + +protected: + virtual void on_insert_text(const Glib::ustring& text, int* position); + +private: + // noncopyable + SpinButton(const SpinButton&); + SpinButton& operator=(const SpinButton&); +}; + +} // namespace Widget +} // namespace UI +} // namespace Inkscape + +#endif // INKSCAPE_UI_WIDGET_SPINBUTTON_H + +/* + Local Variables: + mode:c++ + c-file-style:"stroustrup" + c-file-offsets:((innamespace . 0)(inline-open . 0)) + indent-tabs-mode:nil + fill-column:99 + End: +*/ +// vim: filetype=c++:expandtab:shiftwidth=4:tabstop=8:softtabstop=4 : |
