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/widget | |
| 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/widget')
| -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 |
3 files changed, 119 insertions, 0 deletions
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 : |
