summaryrefslogtreecommitdiffstats
path: root/src/ui
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
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')
-rw-r--r--src/ui/dialog/guides.cpp6
-rw-r--r--src/ui/dialog/guides.h7
-rw-r--r--src/ui/widget/Makefile_insert2
-rw-r--r--src/ui/widget/spinbutton.cpp60
-rw-r--r--src/ui/widget/spinbutton.h57
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 :