The attached patch (for trunk only) introduces number localization, something 
I wanted for a long time (I wasn't aware it was so easy).

So you can now, in German localization, enter 1,2 instead of 1.2 (the latter 
is still possible, but the numbers will be displayed in the local form).

Objections?

Jürgen
Index: src/frontends/qt4/qt_helpers.cpp
===================================================================
--- src/frontends/qt4/qt_helpers.cpp	(Revision 28165)
+++ src/frontends/qt4/qt_helpers.cpp	(Arbeitskopie)
@@ -39,6 +39,7 @@
 #include <QCheckBox>
 #include <QComboBox>
 #include <QLineEdit>
+#include <QLocale>
 #include <QPalette>
 #include <QSet>
 
@@ -78,7 +79,7 @@
 
 	Length::UNIT const unit = combo->currentLengthItem();
 
-	return Length(length.toDouble(), unit).asString();
+	return Length(length.trimmed().toDouble(), unit).asString();
 }
 
 
@@ -101,7 +102,7 @@
 		}
 	}
 
-	return Length(length.toDouble(), unit);
+	return Length(length.trimmed().toDouble(), unit);
 }
 
 
@@ -109,7 +110,8 @@
                      Length const & len, Length::UNIT /*defaultUnit*/)
 {
 	combo->setCurrentItem(len.unit());
-	input->setText(QString::number(Length(len).value()));
+	QLocale loc;
+	input->setText(loc.toString(Length(len).value()));
 }
 
 
Index: src/frontends/qt4/GuiPrefs.cpp
===================================================================
--- src/frontends/qt4/GuiPrefs.cpp	(Revision 28164)
+++ src/frontends/qt4/GuiPrefs.cpp	(Arbeitskopie)
@@ -34,6 +34,7 @@
 #include "paper.h"
 #include "Session.h"
 
+#include "support/convert.h"
 #include "support/debug.h"
 #include "support/FileName.h"
 #include "support/filetools.h"
@@ -55,6 +56,7 @@
 #include <QFontDatabase>
 #include <QHeaderView>
 #include <QLineEdit>
+#include <QLocale>
 #include <QMessageBox>
 #include <QPixmapCache>
 #include <QPushButton>
@@ -667,16 +669,26 @@
 
 	rc.zoom = screenZoomSB->value();
 	rc.dpi = screenDpiSB->value();
-	rc.font_sizes[FONT_SIZE_TINY] = fromqstr(screenTinyED->text());
-	rc.font_sizes[FONT_SIZE_SCRIPT] = fromqstr(screenSmallestED->text());
-	rc.font_sizes[FONT_SIZE_FOOTNOTE] = fromqstr(screenSmallerED->text());
-	rc.font_sizes[FONT_SIZE_SMALL] = fromqstr(screenSmallED->text());
-	rc.font_sizes[FONT_SIZE_NORMAL] = fromqstr(screenNormalED->text());
-	rc.font_sizes[FONT_SIZE_LARGE] = fromqstr(screenLargeED->text());
-	rc.font_sizes[FONT_SIZE_LARGER] = fromqstr(screenLargerED->text());
-	rc.font_sizes[FONT_SIZE_LARGEST] = fromqstr(screenLargestED->text());
-	rc.font_sizes[FONT_SIZE_HUGE] = fromqstr(screenHugeED->text());
-	rc.font_sizes[FONT_SIZE_HUGER] = fromqstr(screenHugerED->text());
+	rc.font_sizes[FONT_SIZE_TINY] = 
+		convert<string>(screenTinyED->text().trimmed().toDouble());
+	rc.font_sizes[FONT_SIZE_SCRIPT] = 
+		convert<string>(screenSmallestED->text().trimmed().toDouble());
+	rc.font_sizes[FONT_SIZE_FOOTNOTE] = 
+		convert<string>(screenSmallerED->text().trimmed().toDouble());
+	rc.font_sizes[FONT_SIZE_SMALL] = 
+		convert<string>(screenSmallED->text().trimmed().toDouble());
+	rc.font_sizes[FONT_SIZE_NORMAL] = 
+		convert<string>(screenNormalED->text().trimmed().toDouble());
+	rc.font_sizes[FONT_SIZE_LARGE] = 
+		convert<string>(screenLargeED->text().trimmed().toDouble());
+	rc.font_sizes[FONT_SIZE_LARGER] = 
+		convert<string>(screenLargerED->text().trimmed().toDouble());
+	rc.font_sizes[FONT_SIZE_LARGEST] = 
+		convert<string>(screenLargestED->text().trimmed().toDouble());
+	rc.font_sizes[FONT_SIZE_HUGE] = 
+		convert<string>(screenHugeED->text().trimmed().toDouble());
+	rc.font_sizes[FONT_SIZE_HUGER] = 
+		convert<string>(screenHugerED->text().trimmed().toDouble());
 	rc.use_pixmap_cache = pixmapCacheCB->isChecked();
 
 	if (rc.font_sizes != oldrc.font_sizes
@@ -709,16 +721,17 @@
 
 	screenZoomSB->setValue(rc.zoom);
 	screenDpiSB->setValue(rc.dpi);
-	screenTinyED->setText(toqstr(rc.font_sizes[FONT_SIZE_TINY]));
-	screenSmallestED->setText(toqstr(rc.font_sizes[FONT_SIZE_SCRIPT]));
-	screenSmallerED->setText(toqstr(rc.font_sizes[FONT_SIZE_FOOTNOTE]));
-	screenSmallED->setText(toqstr(rc.font_sizes[FONT_SIZE_SMALL]));
-	screenNormalED->setText(toqstr(rc.font_sizes[FONT_SIZE_NORMAL]));
-	screenLargeED->setText(toqstr(rc.font_sizes[FONT_SIZE_LARGE]));
-	screenLargerED->setText(toqstr(rc.font_sizes[FONT_SIZE_LARGER]));
-	screenLargestED->setText(toqstr(rc.font_sizes[FONT_SIZE_LARGEST]));
-	screenHugeED->setText(toqstr(rc.font_sizes[FONT_SIZE_HUGE]));
-	screenHugerED->setText(toqstr(rc.font_sizes[FONT_SIZE_HUGER]));
+	QLocale loc;
+	screenTinyED->setText(loc.toString(convert<double>(rc.font_sizes[FONT_SIZE_TINY])));
+	screenSmallestED->setText(loc.toString(convert<double>(rc.font_sizes[FONT_SIZE_SCRIPT])));
+	screenSmallerED->setText(loc.toString(convert<double>(rc.font_sizes[FONT_SIZE_FOOTNOTE])));
+	screenSmallED->setText(loc.toString(convert<double>(rc.font_sizes[FONT_SIZE_SMALL])));
+	screenNormalED->setText(loc.toString(convert<double>(rc.font_sizes[FONT_SIZE_NORMAL])));
+	screenLargeED->setText(loc.toString(convert<double>(rc.font_sizes[FONT_SIZE_LARGE])));
+	screenLargerED->setText(loc.toString(convert<double>(rc.font_sizes[FONT_SIZE_LARGER])));
+	screenLargestED->setText(loc.toString(convert<double>(rc.font_sizes[FONT_SIZE_LARGEST])));
+	screenHugeED->setText(loc.toString(convert<double>(rc.font_sizes[FONT_SIZE_HUGE])));
+	screenHugerED->setText(loc.toString(convert<double>(rc.font_sizes[FONT_SIZE_HUGER])));
 
 	pixmapCacheCB->setChecked(rc.use_pixmap_cache);
 #if defined(Q_WS_X11)
Index: src/frontends/qt4/Validator.cpp
===================================================================
--- src/frontends/qt4/Validator.cpp	(Revision 28165)
+++ src/frontends/qt4/Validator.cpp	(Arbeitskopie)
@@ -24,6 +24,7 @@
 #include "support/lstrings.h"
 
 #include <QLineEdit>
+#include <QLocale>
 #include <QWidget>
 
 using namespace std;
@@ -39,10 +40,13 @@
 
 QValidator::State LengthValidator::validate(QString & qtext, int &) const
 {
-	string const text = fromqstr(qtext);
-	if (text.empty() || support::isStrDbl(text))
+	bool ok;
+	double d = qtext.trimmed().toDouble(&ok);
+	if (qtext.isEmpty() || ok)
 		return QValidator::Acceptable;
 
+	string const text = fromqstr(qtext);
+
 	if (glue_length_) {
 		GlueLength gl;
 		return (isValidGlueLength(text, &gl)) ?

Reply via email to