diff --git a/examples/mvvmcore/SampleCore/settings.xml b/examples/mvvmcore/SampleCore/settings.xml
index 8a034c5..bb5ea60 100644
--- a/examples/mvvmcore/SampleCore/settings.xml
+++ b/examples/mvvmcore/SampleCore/settings.xml
@@ -100,6 +100,14 @@
default="42">
Is set to %n unit(s)
+
+ 0
+ 100
+ %1 %
+
inputAliases.contains(type))
url = getInputUrl(d->inputAliases.value(type), viewProperties);
else if(d->simpleInputs.contains(type))
@@ -112,6 +113,8 @@ InputViewFactoryPrivate::InputViewFactoryPrivate() :
{"string", QStringLiteral("qrc:/qtmvvm/inputs/TextField.qml")},
{QMetaType::typeName(QMetaType::Int), QStringLiteral("qrc:/qtmvvm/inputs/SpinBox.qml")},
{QMetaType::typeName(QMetaType::Double), QStringLiteral("qrc:/qtmvvm/inputs/DoubleSpinBox.qml")},
+ {"number", QStringLiteral("qrc:/qtmvvm/inputs/DoubleSpinBox.qml")},
+ {"range", QStringLiteral("qrc:/qtmvvm/inputs/Slider.qml")},
// {QMetaType::typeName(QMetaType::QDate), QStringLiteral("qrc:/qtmvvm/inputs/.qml")},
// {QMetaType::typeName(QMetaType::QTime), QStringLiteral("qrc:/qtmvvm/inputs/.qml")},
// {QMetaType::typeName(QMetaType::QDateTime), QStringLiteral("qrc:/qtmvvm/inputs/.qml")},
@@ -124,13 +127,17 @@ InputViewFactoryPrivate::InputViewFactoryPrivate() :
},
simpleDelegates{
{QMetaType::typeName(QMetaType::Bool), QStringLiteral("qrc:/qtmvvm/delegates/BoolDelegate.qml")},
- {"switch", QStringLiteral("qrc:/qtmvvm/inputs/SwitchDelegate.qml")}
+ {"switch", QStringLiteral("qrc:/qtmvvm/delegates/SwitchDelegate.qml")},
+ {"range", QStringLiteral("qrc:/qtmvvm/delegates/RangeDelegate.qml")}
},
formatters{
- {QMetaType::typeName(QMetaType::Int), QSharedPointer::create()},
- {QMetaType::typeName(QMetaType::Double), QSharedPointer>::create()},
+ {QMetaType::typeName(QMetaType::Int), QSharedPointer::create()}
}
{
+ auto dblFormatter = QSharedPointer>::create();
+ formatters.insert(QMetaType::typeName(QMetaType::Double), dblFormatter);
+ formatters.insert("number", dblFormatter);
+
auto listFormatter = QSharedPointer::create();
formatters.insert("selection", listFormatter);
formatters.insert("list", listFormatter);
diff --git a/src/mvvmquick/mvvmquick.pro b/src/mvvmquick/mvvmquick.pro
index 29d5c06..1837aad 100644
--- a/src/mvvmquick/mvvmquick.pro
+++ b/src/mvvmquick/mvvmquick.pro
@@ -8,7 +8,7 @@ HEADERS += \
quickpresenter_p.h \
inputviewfactory.h \
inputviewfactory_p.h \
- formatters_p.h
+ formatters_p.h
SOURCES += \
quickpresenter.cpp \
diff --git a/src/mvvmquick/qtmvvmquick_module.qrc b/src/mvvmquick/qtmvvmquick_module.qrc
index bb7821f..deda855 100644
--- a/src/mvvmquick/qtmvvmquick_module.qrc
+++ b/src/mvvmquick/qtmvvmquick_module.qrc
@@ -9,12 +9,14 @@
UrlField.qml
Switch.qml
RadioListEdit.qml
+ Slider.qml
BoolDelegate.qml
MsgDelegate.qml
SwitchDelegate.qml
ListDelegate.qml
+ RangeDelegate.qml
SettingsView.qml
diff --git a/src/mvvmwidgets/inputwidgetfactory.cpp b/src/mvvmwidgets/inputwidgetfactory.cpp
index 33da596..b511ee3 100644
--- a/src/mvvmwidgets/inputwidgetfactory.cpp
+++ b/src/mvvmwidgets/inputwidgetfactory.cpp
@@ -8,9 +8,11 @@
#include
#include
#include
+#include
#include "fontcombobox_p.h"
#include "selectcombobox_p.h"
+#include "tooltipslider_p.h"
#include
@@ -27,12 +29,13 @@ InputWidgetFactory::~InputWidgetFactory() = default;
QWidget *InputWidgetFactory::createInput(const QByteArray &type, QWidget *parent, const QVariantMap &viewProperties)
{
+ //TODO document all types
QWidget *widget = nullptr;
if(d->aliases.contains(type))
return createInput(d->aliases.value(type), parent, viewProperties);
if(d->simpleWidgets.contains(type))
widget = d->simpleWidgets.value(type)(parent);
- else if(type == QMetaType::typeName(QMetaType::Bool))
+ else if(type == QMetaType::typeName(QMetaType::Bool) || type == "switch") //TODO add extra widget
widget = new QCheckBox(parent);
else if(type == QMetaType::typeName(QMetaType::QString) || type == "string") {
auto edit = new QLineEdit(parent);
@@ -49,6 +52,8 @@ QWidget *InputWidgetFactory::createInput(const QByteArray &type, QWidget *parent
widget = new QSpinBox(parent);
else if(type == QMetaType::typeName(QMetaType::Double) || type == "number")
widget = new QDoubleSpinBox(parent);
+ else if(type == "range")
+ widget = new ToolTipSlider(parent);
else if(type == QMetaType::typeName(QMetaType::QDate))
widget = new QDateEdit(parent);
else if(type == QMetaType::typeName(QMetaType::QTime))
diff --git a/src/mvvmwidgets/mvvmwidgets.pro b/src/mvvmwidgets/mvvmwidgets.pro
index f7bedb1..371db97 100644
--- a/src/mvvmwidgets/mvvmwidgets.pro
+++ b/src/mvvmwidgets/mvvmwidgets.pro
@@ -12,14 +12,16 @@ HEADERS += \
inputwidgetfactory.h \
inputwidgetfactory_p.h \
settingsdialog_p.h \
- settingsdialog.h
+ settingsdialog.h \
+ tooltipslider_p.h
SOURCES += \
widgetspresenter.cpp \
fontcombobox.cpp \
selectcombobox.cpp \
inputwidgetfactory.cpp \
- settingsdialog.cpp
+ settingsdialog.cpp \
+ tooltipslider.cpp
FORMS += \
settingsdialog.ui
diff --git a/src/mvvmwidgets/tooltipslider.cpp b/src/mvvmwidgets/tooltipslider.cpp
new file mode 100644
index 0000000..3d95886
--- /dev/null
+++ b/src/mvvmwidgets/tooltipslider.cpp
@@ -0,0 +1,22 @@
+#include "tooltipslider_p.h"
+#include
+#include
+using namespace QtMvvm;
+
+ToolTipSlider::ToolTipSlider(QWidget *parent) :
+ QSlider{Qt::Horizontal, parent}
+{
+ setTracking(false);
+ connect(this, &ToolTipSlider::sliderMoved,
+ this, &ToolTipSlider::onMoved);
+}
+
+void ToolTipSlider::onMoved(int position)
+{
+ auto format = property("valueFormat").toString();
+ if(format.isEmpty())
+ format = QStringLiteral("%L1");
+ auto mPos = mapToGlobal({0,0});
+ mPos.setX(QCursor::pos().x());
+ QToolTip::showText(mPos, format.arg(position), this);
+}
diff --git a/src/mvvmwidgets/tooltipslider_p.h b/src/mvvmwidgets/tooltipslider_p.h
new file mode 100644
index 0000000..5bf39ef
--- /dev/null
+++ b/src/mvvmwidgets/tooltipslider_p.h
@@ -0,0 +1,23 @@
+#ifndef QTMVVM_TOOLTIPSLIDER_P_H
+#define QTMVVM_TOOLTIPSLIDER_P_H
+
+#include
+
+#include "qtmvvmwidgets_global.h"
+
+namespace QtMvvm {
+
+class ToolTipSlider : public QSlider
+{
+ Q_OBJECT
+
+public:
+ explicit ToolTipSlider(QWidget *parent = nullptr);
+
+private Q_SLOTS:
+ void onMoved(int position);
+};
+
+}
+
+#endif // QTMVVM_TOOLTIPSLIDER_P_H