summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMiikka Heikkinen <miikka.heikkinen@digia.com>2014-09-18 13:49:23 +0300
committerMiikka Heikkinen <miikka.heikkinen@digia.com>2014-09-19 09:14:13 +0300
commit98e0c04fe78da9735c2943524bd36648b2654f98 (patch)
tree3c711ff622e0fb43b358982fb815065e12d49af0
parent0c11550bed204807b8b366fd07862a5da9cd2251 (diff)
Added possibility to change graph's locale
Locale affects how axis labels are formatted. Default locale is still the "C". Task-number: QTRD-3229 Change-Id: I6126ce676906f4bbc91ae0abd18775bc1d564118 Reviewed-by: Mika Salmela <mika.salmela@digia.com> Reviewed-by: Tomi Korpipää <tomi.korpipaa@digia.com>
-rw-r--r--src/datavisualization/axis/qvalue3daxis.cpp24
-rw-r--r--src/datavisualization/axis/qvalue3daxisformatter.cpp40
-rw-r--r--src/datavisualization/axis/qvalue3daxisformatter.h4
-rw-r--r--src/datavisualization/axis/qvalue3daxisformatter_p.h8
-rw-r--r--src/datavisualization/data/qbar3dseries.cpp21
-rw-r--r--src/datavisualization/doc/src/qtdatavisualization-qml-abstractdeclarative.qdoc10
-rw-r--r--src/datavisualization/engine/abstract3dcontroller.cpp27
-rw-r--r--src/datavisualization/engine/abstract3dcontroller_p.h6
-rw-r--r--src/datavisualization/engine/abstract3drenderer_p.h2
-rw-r--r--src/datavisualization/engine/qabstract3dgraph.cpp21
-rw-r--r--src/datavisualization/engine/qabstract3dgraph.h6
-rw-r--r--src/datavisualization/utils/utils.cpp85
-rw-r--r--src/datavisualization/utils/utils_p.h10
-rw-r--r--src/datavisualizationqml2/abstractdeclarative.cpp16
-rw-r--r--src/datavisualizationqml2/abstractdeclarative_p.h5
15 files changed, 238 insertions, 47 deletions
diff --git a/src/datavisualization/axis/qvalue3daxis.cpp b/src/datavisualization/axis/qvalue3daxis.cpp
index 8207174f..3b9c9e3d 100644
--- a/src/datavisualization/axis/qvalue3daxis.cpp
+++ b/src/datavisualization/axis/qvalue3daxis.cpp
@@ -18,6 +18,7 @@
#include "qvalue3daxis_p.h"
#include "qvalue3daxisformatter_p.h"
+#include "abstract3dcontroller_p.h"
QT_BEGIN_NAMESPACE_DATAVISUALIZATION
@@ -68,8 +69,16 @@ QT_BEGIN_NAMESPACE_DATAVISUALIZATION
/*!
* \qmlproperty string ValueAxis3D::labelFormat
*
- * Defines the label format to be used for the labels on this axis. Supported specifiers are:
+ * Defines the label format to be used for the labels on this axis. How the format is interpreted
+ * depends on the axis formatter and the locale in use. Using the default formatter and default
+ * locale (\c{"C"}), the formatting uses QString::sprintf(). Supported specifiers are:
* \c {d, i, o, x, X, f, F, e, E, g, G, c}. See QString::sprintf() for additional details.
+ * For other locales, the default formatter uses reduced set of printf format specifiers:
+ * \c {d, i, f, F, e, E, g, G}. In these cases, the only supported modifier is the precision
+ * modifier for the floating point and exponential formats. The decimal point and other locale
+ * dependent formatting is done according to the graph locale.
+ *
+ * \sa AbstractGraph3D::locale
*/
/*!
@@ -164,12 +173,20 @@ int QValue3DAxis::subSegmentCount() const
/*!
* \property QValue3DAxis::labelFormat
*
- * Defines the label \a format to be used for the labels on this axis. Supported specifiers are:
+ * Defines the label format to be used for the labels on this axis. How the format is interpreted
+ * depends on the axis formatter and the locale in use. Using the default formatter and default
+ * locale (\c{"C"}), the formatting uses QString::sprintf(). Supported specifiers are:
* \c {d, i, o, x, X, f, F, e, E, g, G, c}. See QString::sprintf() for additional details.
+ * For other locales, the default formatter uses reduced set of printf format specifiers:
+ * \c {d, i, f, F, e, E, g, G}. In these cases, the only supported modifier is the precision
+ * modifier for the floating point and exponential formats. The decimal point and other locale
+ * dependent formatting is done according to the graph locale.
*
* Usage example:
*
* \c {axis->setLabelFormat("%.2f mm");}
+ *
+ * \sa formatter, QAbstract3DGraph::locale
*/
void QValue3DAxis::setLabelFormat(const QString &format)
{
@@ -201,6 +218,9 @@ void QValue3DAxis::setFormatter(QValue3DAxisFormatter *formatter)
dptr()->m_formatter = formatter;
formatter->setParent(this);
formatter->d_ptr->setAxis(this);
+ Abstract3DController *controller = qobject_cast<Abstract3DController *>(parent());
+ if (controller)
+ formatter->setLocale(controller->locale());
emit formatterChanged(formatter);
emit dptr()->formatterDirty();
}
diff --git a/src/datavisualization/axis/qvalue3daxisformatter.cpp b/src/datavisualization/axis/qvalue3daxisformatter.cpp
index 56ca3b0f..f6b705a9 100644
--- a/src/datavisualization/axis/qvalue3daxisformatter.cpp
+++ b/src/datavisualization/axis/qvalue3daxisformatter.cpp
@@ -270,6 +270,28 @@ QStringList &QValue3DAxisFormatter::labelStrings() const
return d_ptr->m_labelStrings;
}
+/*!
+ * Sets the \a locale that this formatter uses.
+ * The graph automatically sets the formatter's locale to a graph's locale whenever the parent axis
+ * is set as an active axis of the graph, the axis formatter is set to an axis attached to
+ * the graph, or the graph's locale changes.
+ *
+ * \sa locale(), QAbstract3DGraph::locale
+ */
+void QValue3DAxisFormatter::setLocale(const QLocale &locale)
+{
+ d_ptr->m_cLocaleInUse = (locale == QLocale::c());
+ d_ptr->m_locale = locale;
+ markDirty(true);
+}
+/*!
+ * \return the current locale this formatter is using.
+ */
+QLocale QValue3DAxisFormatter::locale() const
+{
+ return d_ptr->m_locale;
+}
+
// QValue3DAxisFormatterPrivate
QValue3DAxisFormatterPrivate::QValue3DAxisFormatterPrivate(QValue3DAxisFormatter *q)
: QObject(0),
@@ -281,7 +303,10 @@ QValue3DAxisFormatterPrivate::QValue3DAxisFormatterPrivate(QValue3DAxisFormatter
m_axis(0),
m_preparsedParamType(Utils::ParamTypeUnknown),
m_allowNegatives(true),
- m_allowZero(true)
+ m_allowZero(true),
+ m_formatPrecision(6), // 6 and 'g' are defaults in Qt API for format precision and spec
+ m_formatSpec('g'),
+ m_cLocaleInUse(true)
{
}
@@ -363,12 +388,19 @@ QString QValue3DAxisFormatterPrivate::stringForValue(qreal value, const QString
{
if (m_previousLabelFormat.compare(format)) {
// Format string different than the previous one used, reparse it
- m_previousLabelFormat = format;
- m_preparsedParamType = Utils::findFormatParamType(format);
m_labelFormatArray = format.toUtf8();
+ m_previousLabelFormat = format;
+ m_preparsedParamType = Utils::preParseFormat(format, m_formatPreStr, m_formatPostStr,
+ m_formatPrecision, m_formatSpec);
}
- return Utils::formatLabel(m_labelFormatArray, m_preparsedParamType, value);
+ if (m_cLocaleInUse) {
+ return Utils::formatLabelSprintf(m_labelFormatArray, m_preparsedParamType, value);
+ } else {
+ return Utils::formatLabelLocalized(m_preparsedParamType, value, m_locale, m_formatPreStr,
+ m_formatPostStr, m_formatPrecision, m_formatSpec,
+ m_labelFormatArray);
+ }
}
float QValue3DAxisFormatterPrivate::positionAt(float value) const
diff --git a/src/datavisualization/axis/qvalue3daxisformatter.h b/src/datavisualization/axis/qvalue3daxisformatter.h
index c7b0bac5..82e49f21 100644
--- a/src/datavisualization/axis/qvalue3daxisformatter.h
+++ b/src/datavisualization/axis/qvalue3daxisformatter.h
@@ -24,6 +24,7 @@
#include <QtCore/QScopedPointer>
#include <QtCore/QVector>
#include <QtCore/QStringList>
+#include <QtCore/QLocale>
QT_BEGIN_NAMESPACE_DATAVISUALIZATION
@@ -60,6 +61,9 @@ protected:
QVector<float> &labelPositions() const;
QStringList &labelStrings() const;
+ void setLocale(const QLocale &locale);
+ QLocale locale() const;
+
QScopedPointer<QValue3DAxisFormatterPrivate> d_ptr;
private:
diff --git a/src/datavisualization/axis/qvalue3daxisformatter_p.h b/src/datavisualization/axis/qvalue3daxisformatter_p.h
index 2d1dc920..9571d001 100644
--- a/src/datavisualization/axis/qvalue3daxisformatter_p.h
+++ b/src/datavisualization/axis/qvalue3daxisformatter_p.h
@@ -32,6 +32,7 @@
#include "datavisualizationglobal_p.h"
#include "qvalue3daxisformatter.h"
#include "utils_p.h"
+#include <QtCore/QLocale>
QT_BEGIN_NAMESPACE_DATAVISUALIZATION
@@ -83,6 +84,13 @@ protected:
bool m_allowNegatives;
bool m_allowZero;
+ QLocale m_locale;
+ QString m_formatPreStr;
+ QString m_formatPostStr;
+ int m_formatPrecision;
+ char m_formatSpec;
+ bool m_cLocaleInUse;
+
friend class QValue3DAxisFormatter;
};
diff --git a/src/datavisualization/data/qbar3dseries.cpp b/src/datavisualization/data/qbar3dseries.cpp
index 19c3bf79..0aa60b66 100644
--- a/src/datavisualization/data/qbar3dseries.cpp
+++ b/src/datavisualization/data/qbar3dseries.cpp
@@ -43,26 +43,27 @@ QT_BEGIN_NAMESPACE_DATAVISUALIZATION
* \row
* \li @valueTitle \li Title from value axis
* \row
- * \li @rowIdx \li Visible row index
+ * \li @rowIdx \li Visible row index. Localized using graph locale.
* \row
- * \li @colIdx \li Visible Column index
+ * \li @colIdx \li Visible Column index. Localized using graph locale.
* \row
* \li @rowLabel \li Label from row axis
* \row
* \li @colLabel \li Label from column axis
* \row
- * \li @valueLabel \li Item value formatted using the same format the value axis attached to the graph uses,
- * see \l{QValue3DAxis::setLabelFormat()} for more information.
+ * \li @valueLabel \li Item value formatted using the same format the value axis attached to
+ * the graph uses. See \l{QValue3DAxis::labelFormat} for more information.
* \row
* \li @seriesName \li Name of the series
* \row
- * \li %<format spec> \li Item value in specified format.
+ * \li %<format spec> \li Item value in specified format. Formatted using the same rules as
+ * \l{QValue3DAxis::labelFormat}.
* \endtable
*
* For example:
* \snippet doc_src_qtdatavisualization.cpp 1
*
- * \sa {Qt Data Visualization Data Handling}
+ * \sa {Qt Data Visualization Data Handling}, QAbstract3DGraph::locale
*/
/*!
@@ -334,6 +335,10 @@ void QBar3DSeriesPrivate::createItemLabel()
return;
}
+ QLocale locale(QLocale::c());
+ if (m_controller)
+ locale = m_controller->locale();
+
QCategory3DAxis *categoryAxisZ = static_cast<QCategory3DAxis *>(m_controller->axisZ());
QCategory3DAxis *categoryAxisX = static_cast<QCategory3DAxis *>(m_controller->axisX());
QValue3DAxis *valueAxis = static_cast<QValue3DAxis *>(m_controller->axisY());
@@ -344,13 +349,13 @@ void QBar3DSeriesPrivate::createItemLabel()
int selBarPosRow = m_selectedBar.x();
int selBarPosCol = m_selectedBar.y();
- m_itemLabel.replace(rowIndexTag, QString::number(selBarPosRow));
+ m_itemLabel.replace(rowIndexTag, locale.toString(selBarPosRow));
if (categoryAxisZ->labels().size() > selBarPosRow)
m_itemLabel.replace(rowLabelTag, categoryAxisZ->labels().at(selBarPosRow));
else
m_itemLabel.replace(rowLabelTag, QString());
m_itemLabel.replace(rowTitleTag, categoryAxisZ->title());
- m_itemLabel.replace(colIndexTag, QString::number(selBarPosCol));
+ m_itemLabel.replace(colIndexTag, locale.toString(selBarPosCol));
if (categoryAxisX->labels().size() > selBarPosCol)
m_itemLabel.replace(colLabelTag, categoryAxisX->labels().at(selBarPosCol));
else
diff --git a/src/datavisualization/doc/src/qtdatavisualization-qml-abstractdeclarative.qdoc b/src/datavisualization/doc/src/qtdatavisualization-qml-abstractdeclarative.qdoc
index b1d74dd6..5f06d404 100644
--- a/src/datavisualization/doc/src/qtdatavisualization-qml-abstractdeclarative.qdoc
+++ b/src/datavisualization/doc/src/qtdatavisualization-qml-abstractdeclarative.qdoc
@@ -375,3 +375,13 @@
*
* \sa reflection
*/
+
+/*!
+ * \qmlproperty locale AbstractGraph3D::locale
+ * \since QtDataVisualization 1.2
+ *
+ * Sets the locale used for formatting various numeric labels.
+ * Defaults to \c{"C"} locale.
+ *
+ * \sa ValueAxis3D::labelFormat
+ */
diff --git a/src/datavisualization/engine/abstract3dcontroller.cpp b/src/datavisualization/engine/abstract3dcontroller.cpp
index feb028cc..e2f8c1ad 100644
--- a/src/datavisualization/engine/abstract3dcontroller.cpp
+++ b/src/datavisualization/engine/abstract3dcontroller.cpp
@@ -42,6 +42,7 @@ Abstract3DController::Abstract3DController(QRect initialViewport, Q3DScene *scen
m_optimizationHints(QAbstract3DGraph::OptimizationDefault),
m_reflectionEnabled(false),
m_reflectivity(0.5),
+ m_locale(QLocale::c()),
m_scene(scene),
m_activeInputHandler(0),
m_axisX(0),
@@ -1415,6 +1416,8 @@ void Abstract3DController::setAxisHelper(QAbstract3DAxis::AxisOrientation orient
handleAxisLabelFormatChangedBySender(valueAxis);
handleAxisReversedChangedBySender(valueAxis);
handleAxisFormatterDirtyBySender(valueAxis->dptr());
+
+ valueAxis->formatter()->setLocale(m_locale);
}
}
@@ -1632,4 +1635,28 @@ float Abstract3DController::radialLabelOffset() const
return m_radialLabelOffset;
}
+void Abstract3DController::setLocale(const QLocale &locale)
+{
+ if (m_locale != locale) {
+ m_locale = locale;
+
+ // Value axis formatters need to be updated
+ QValue3DAxis *axis = qobject_cast<QValue3DAxis *>(m_axisX);
+ if (axis)
+ axis->formatter()->setLocale(m_locale);
+ axis = qobject_cast<QValue3DAxis *>(m_axisY);
+ if (axis)
+ axis->formatter()->setLocale(m_locale);
+ axis = qobject_cast<QValue3DAxis *>(m_axisZ);
+ if (axis)
+ axis->formatter()->setLocale(m_locale);
+ emit localeChanged(m_locale);
+ }
+}
+
+QLocale Abstract3DController::locale() const
+{
+ return m_locale;
+}
+
QT_END_NAMESPACE_DATAVISUALIZATION
diff --git a/src/datavisualization/engine/abstract3dcontroller_p.h b/src/datavisualization/engine/abstract3dcontroller_p.h
index 3397fc62..03061a13 100644
--- a/src/datavisualization/engine/abstract3dcontroller_p.h
+++ b/src/datavisualization/engine/abstract3dcontroller_p.h
@@ -38,6 +38,7 @@
#include "qcustom3ditem.h"
#include <QtGui/QLinearGradient>
#include <QtCore/QTime>
+#include <QtCore/QLocale>
class QOpenGLFramebufferObject;
@@ -171,6 +172,7 @@ private:
QAbstract3DGraph::OptimizationHints m_optimizationHints;
bool m_reflectionEnabled;
qreal m_reflectivity;
+ QLocale m_locale;
protected:
Q3DScene *m_scene;
@@ -297,6 +299,9 @@ public:
void setRadialLabelOffset(float offset);
float radialLabelOffset() const;
+ void setLocale(const QLocale &locale);
+ QLocale locale() const;
+
void emitNeedRender();
virtual void clearSelection() = 0;
@@ -378,6 +383,7 @@ signals:
void radialLabelOffsetChanged(float offset);
void reflectionChanged(bool enabled);
void reflectivityChanged(qreal reflectivity);
+ void localeChanged(const QLocale &locale);
protected:
virtual QAbstract3DAxis *createDefaultAxis(QAbstract3DAxis::AxisOrientation orientation);
diff --git a/src/datavisualization/engine/abstract3drenderer_p.h b/src/datavisualization/engine/abstract3drenderer_p.h
index b31cfbd3..2072314b 100644
--- a/src/datavisualization/engine/abstract3drenderer_p.h
+++ b/src/datavisualization/engine/abstract3drenderer_p.h
@@ -287,6 +287,8 @@ protected:
bool m_reflectionEnabled;
qreal m_reflectivity;
+ QLocale m_locale;
+
private:
friend class Abstract3DController;
};
diff --git a/src/datavisualization/engine/qabstract3dgraph.cpp b/src/datavisualization/engine/qabstract3dgraph.cpp
index d906666c..8ced09fe 100644
--- a/src/datavisualization/engine/qabstract3dgraph.cpp
+++ b/src/datavisualization/engine/qabstract3dgraph.cpp
@@ -767,6 +767,25 @@ qreal QAbstract3DGraph::reflectivity() const
}
/*!
+ * \property QAbstract3DGraph::locale
+ * \since QtDataVisualization 1.2
+ *
+ * Sets the locale used for formatting various numeric labels.
+ * Defaults to \c{"C"} locale.
+ *
+ * \sa QValue3DAxis::labelFormat
+ */
+void QAbstract3DGraph::setLocale(const QLocale &locale)
+{
+ d_ptr->m_visualController->setLocale(locale);
+}
+
+QLocale QAbstract3DGraph::locale() const
+{
+ return d_ptr->m_visualController->locale();
+}
+
+/*!
* \internal
*/
bool QAbstract3DGraph::event(QEvent *event)
@@ -927,6 +946,8 @@ void QAbstract3DGraphPrivate::setVisualController(Abstract3DController *controll
&QAbstract3DGraph::reflectionChanged);
QObject::connect(m_visualController, &Abstract3DController::reflectivityChanged, q_ptr,
&QAbstract3DGraph::reflectivityChanged);
+ QObject::connect(m_visualController, &Abstract3DController::localeChanged, q_ptr,
+ &QAbstract3DGraph::localeChanged);
}
void QAbstract3DGraphPrivate::handleDevicePixelRatioChange()
diff --git a/src/datavisualization/engine/qabstract3dgraph.h b/src/datavisualization/engine/qabstract3dgraph.h
index e19a3e8e..2d76f780 100644
--- a/src/datavisualization/engine/qabstract3dgraph.h
+++ b/src/datavisualization/engine/qabstract3dgraph.h
@@ -25,6 +25,7 @@
#include <QtDataVisualization/qabstract3dinputhandler.h>
#include <QtGui/QWindow>
#include <QtGui/QOpenGLFunctions>
+#include <QtCore/QLocale>
QT_BEGIN_NAMESPACE_DATAVISUALIZATION
@@ -55,6 +56,7 @@ class QT_DATAVISUALIZATION_EXPORT QAbstract3DGraph : public QWindow, protected Q
Q_PROPERTY(qreal horizontalAspectRatio READ horizontalAspectRatio WRITE setHorizontalAspectRatio NOTIFY horizontalAspectRatioChanged)
Q_PROPERTY(bool reflection READ isReflection WRITE setReflection NOTIFY reflectionChanged)
Q_PROPERTY(qreal reflectivity READ reflectivity WRITE setReflectivity NOTIFY reflectivityChanged)
+ Q_PROPERTY(QLocale locale READ locale WRITE setLocale NOTIFY localeChanged)
protected:
explicit QAbstract3DGraph(QAbstract3DGraphPrivate *d, const QSurfaceFormat *format,
@@ -170,6 +172,9 @@ public:
void setReflectivity(qreal reflectivity);
qreal reflectivity() const;
+ void setLocale(const QLocale &locale);
+ QLocale locale() const;
+
protected:
bool event(QEvent *event);
void resizeEvent(QResizeEvent *event);
@@ -198,6 +203,7 @@ signals:
void horizontalAspectRatioChanged(qreal ratio);
void reflectionChanged(bool enabled);
void reflectivityChanged(qreal reflectivity);
+ void localeChanged(const QLocale &locale);
private:
Q_DISABLE_COPY(QAbstract3DGraph)
diff --git a/src/datavisualization/utils/utils.cpp b/src/datavisualization/utils/utils.cpp
index d7b8dae8..b2bae478 100644
--- a/src/datavisualization/utils/utils.cpp
+++ b/src/datavisualization/utils/utils.cpp
@@ -152,46 +152,54 @@ QImage Utils::getGradientImage(QLinearGradient &gradient)
return image;
}
-Utils::ParamType Utils::mapFormatCharToParamType(const QChar &formatChar)
+Utils::ParamType Utils::preParseFormat(const QString &format, QString &preStr, QString &postStr,
+ int &precision, char &formatSpec)
{
- ParamType retVal = ParamTypeUnknown;
- if (formatChar == QLatin1Char('d')
- || formatChar == QLatin1Char('i')
- || formatChar == QLatin1Char('c')) {
- retVal = ParamTypeInt;
- } else if (formatChar == QLatin1Char('u')
- || formatChar == QLatin1Char('o')
- || formatChar == QLatin1Char('x')
- || formatChar == QLatin1Char('X')) {
- retVal = ParamTypeUInt;
- } else if (formatChar == QLatin1Char('f')
- || formatChar == QLatin1Char('F')
- || formatChar == QLatin1Char('e')
- || formatChar == QLatin1Char('E')
- || formatChar == QLatin1Char('g')
- || formatChar == QLatin1Char('G')) {
- retVal = ParamTypeReal;
+ static QRegExp formatMatcher(QStringLiteral("^([^%]*)%([\\-\\+#\\s\\d\\.lhjztL]*)([dicuoxfegXFEG])(.*)$"));
+ static QRegExp precisionMatcher(QStringLiteral("\\.(\\d+)"));
+
+ Utils::ParamType retVal;
+
+ if (formatMatcher.indexIn(format, 0) != -1) {
+ preStr = formatMatcher.cap(1);
+ // Six and 'g' are defaults in Qt API
+ precision = 6;
+ if (!formatMatcher.cap(2).isEmpty()) {
+ if (precisionMatcher.indexIn(formatMatcher.cap(2), 0) != -1)
+ precision = precisionMatcher.cap(1).toInt();
+ }
+ if (formatMatcher.cap(3).isEmpty())
+ formatSpec = 'g';
+ else
+ formatSpec = formatMatcher.cap(3).at(0).toLatin1();
+ postStr = formatMatcher.cap(4);
+ retVal = mapFormatCharToParamType(formatSpec);
+ } else {
+ retVal = ParamTypeUnknown;
+ // The out parameters are irrelevant in unknown case
}
return retVal;
}
-Utils::ParamType Utils::findFormatParamType(const QString &format)
+Utils::ParamType Utils::mapFormatCharToParamType(char formatSpec)
{
- static QRegExp formatMatcher(QStringLiteral("%[\\-\\+#\\s\\d\\.lhjztL]*([dicuoxfegXFEG])"));
-
- if (formatMatcher.indexIn(format, 0) != -1) {
- QString capStr = formatMatcher.cap(1);
- if (capStr.isEmpty())
- return ParamTypeUnknown;
- else
- return mapFormatCharToParamType(capStr.at(0));
+ ParamType retVal = ParamTypeUnknown;
+ if (formatSpec == 'd' || formatSpec == 'i' || formatSpec == 'c') {
+ retVal = ParamTypeInt;
+ } else if (formatSpec == 'u' || formatSpec == 'o'
+ || formatSpec == 'x'|| formatSpec == 'X') {
+ retVal = ParamTypeUInt;
+ } else if (formatSpec == 'f' || formatSpec == 'F'
+ || formatSpec == 'e' || formatSpec == 'E'
+ || formatSpec == 'g' || formatSpec == 'G') {
+ retVal = ParamTypeReal;
}
- return ParamTypeUnknown;
+ return retVal;
}
-QString Utils::formatLabel(const QByteArray &format, ParamType paramType, qreal value)
+QString Utils::formatLabelSprintf(const QByteArray &format, Utils::ParamType paramType, qreal value)
{
switch (paramType) {
case ParamTypeInt:
@@ -201,7 +209,24 @@ QString Utils::formatLabel(const QByteArray &format, ParamType paramType, qreal
case ParamTypeReal:
return QString().sprintf(format, value);
default:
- return QString::fromUtf8(format); // To detect errors
+ // Return format string to detect errors. Bars selection label logic also depends on this.
+ return QString::fromUtf8(format);
+ }
+}
+
+QString Utils::formatLabelLocalized(Utils::ParamType paramType, qreal value,
+ const QLocale &locale, const QString &preStr, const QString &postStr,
+ int precision, char formatSpec, const QByteArray &format)
+{
+ switch (paramType) {
+ case ParamTypeInt:
+ case ParamTypeUInt:
+ return preStr + locale.toString(qint64(value)) + postStr;
+ case ParamTypeReal:
+ return preStr + locale.toString(value, formatSpec, precision) + postStr;
+ default:
+ // Return format string to detect errors. Bars selection label logic also depends on this.
+ return QString::fromUtf8(format);
}
}
diff --git a/src/datavisualization/utils/utils_p.h b/src/datavisualization/utils/utils_p.h
index 55707fdb..805c41a7 100644
--- a/src/datavisualization/utils/utils_p.h
+++ b/src/datavisualization/utils/utils_p.h
@@ -59,15 +59,19 @@ public:
static QVector4D getSelection(QPoint mousepos, int height);
static QImage getGradientImage(QLinearGradient &gradient);
- static ParamType findFormatParamType(const QString &format);
- static QString formatLabel(const QByteArray &format, ParamType paramType, qreal value);
+ static ParamType preParseFormat(const QString &format, QString &preStr, QString &postStr,
+ int &precision, char &formatSpec);
+ static QString formatLabelSprintf(const QByteArray &format, ParamType paramType, qreal value);
+ static QString formatLabelLocalized(ParamType paramType, qreal value,
+ const QLocale &locale, const QString &preStr, const QString &postStr,
+ int precision, char formatSpec, const QByteArray &format);
static QString defaultLabelFormat();
static float wrapValue(float value, float min, float max);
static QQuaternion calculateRotation(const QVector3D &xyzRotations);
private:
- static ParamType mapFormatCharToParamType(const QChar &formatChar);
+ static ParamType mapFormatCharToParamType(char formatSpec);
};
QT_END_NAMESPACE_DATAVISUALIZATION
diff --git a/src/datavisualizationqml2/abstractdeclarative.cpp b/src/datavisualizationqml2/abstractdeclarative.cpp
index b062f78c..fdfa55d8 100644
--- a/src/datavisualizationqml2/abstractdeclarative.cpp
+++ b/src/datavisualizationqml2/abstractdeclarative.cpp
@@ -335,6 +335,12 @@ void AbstractDeclarative::setSharedController(Abstract3DController *controller)
&AbstractDeclarative::radialLabelOffsetChanged);
QObject::connect(m_controller.data(), &Abstract3DController::horizontalAspectRatioChanged, this,
&AbstractDeclarative::horizontalAspectRatioChanged);
+ QObject::connect(m_controller.data(), &Abstract3DController::reflectionChanged, this,
+ &AbstractDeclarative::reflectionChanged);
+ QObject::connect(m_controller.data(), &Abstract3DController::reflectivityChanged, this,
+ &AbstractDeclarative::reflectivityChanged);
+ QObject::connect(m_controller.data(), &Abstract3DController::localeChanged, this,
+ &AbstractDeclarative::localeChanged);
}
void AbstractDeclarative::activateOpenGLContext(QQuickWindow *window)
@@ -780,6 +786,16 @@ qreal AbstractDeclarative::reflectivity() const
return m_controller->reflectivity();
}
+void AbstractDeclarative::setLocale(const QLocale &locale)
+{
+ m_controller->setLocale(locale);
+}
+
+QLocale AbstractDeclarative::locale() const
+{
+ return m_controller->locale();
+}
+
void AbstractDeclarative::windowDestroyed(QObject *obj)
{
// Remove destroyed window from window lists
diff --git a/src/datavisualizationqml2/abstractdeclarative_p.h b/src/datavisualizationqml2/abstractdeclarative_p.h
index f4bc41b7..52a5956b 100644
--- a/src/datavisualizationqml2/abstractdeclarative_p.h
+++ b/src/datavisualizationqml2/abstractdeclarative_p.h
@@ -77,6 +77,7 @@ class AbstractDeclarative : public QQuickItem
Q_PROPERTY(qreal horizontalAspectRatio READ horizontalAspectRatio WRITE setHorizontalAspectRatio NOTIFY horizontalAspectRatioChanged REVISION 2)
Q_PROPERTY(bool reflection READ isReflection WRITE setReflection NOTIFY reflectionChanged REVISION 2)
Q_PROPERTY(qreal reflectivity READ reflectivity WRITE setReflectivity NOTIFY reflectivityChanged REVISION 2)
+ Q_PROPERTY(QLocale locale READ locale WRITE setLocale NOTIFY localeChanged REVISION 2)
public:
enum SelectionFlag {
@@ -213,6 +214,9 @@ public:
void setReflectivity(qreal reflectivity);
qreal reflectivity() const;
+ void setLocale(const QLocale &locale);
+ QLocale locale() const;
+
public slots:
virtual void handleAxisXChanged(QAbstract3DAxis *axis) = 0;
virtual void handleAxisYChanged(QAbstract3DAxis *axis) = 0;
@@ -255,6 +259,7 @@ signals:
Q_REVISION(2) void horizontalAspectRatioChanged(qreal ratio);
Q_REVISION(2) void reflectionChanged(bool enabled);
Q_REVISION(2) void reflectivityChanged(qreal reflectivity);
+ Q_REVISION(2) void localeChanged(const QLocale &locale);
private:
QPointer<Abstract3DController> m_controller;