summaryrefslogtreecommitdiffstats
path: root/src/ui/widget/spinbutton.cpp
diff options
context:
space:
mode:
authorJohan B. C. Engelen <jbc.engelen@swissonline.ch>2011-04-08 23:19:48 +0000
committerJohan Engelen <goejendaagh@zonnet.nl>2011-04-08 23:19:48 +0000
commitcba60dd473848d5e980894dd4a48fdeb9890a8ac (patch)
tree6834f9cadac45da02893f2769acbe3537e45b28c /src/ui/widget/spinbutton.cpp
parentallow other than numeric characters in guideline dialog (diff)
downloadinkscape-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/spinbutton.cpp')
-rw-r--r--src/ui/widget/spinbutton.cpp60
1 files changed, 60 insertions, 0 deletions
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 :