26 changed files with 375 additions and 40 deletions
			
			
		@ -0,0 +1,7 @@ | 
				
			|||
import QtQuick 2.10 | 
				
			|||
import QtQuick.Controls 2.3 | 
				
			|||
 | 
				
			|||
CheckBox { | 
				
			|||
	id: _edit | 
				
			|||
	property alias inputValue: _edit.checked | 
				
			|||
} | 
				
			|||
@ -0,0 +1,38 @@ | 
				
			|||
import QtQuick 2.10 | 
				
			|||
import QtQuick.Controls 2.3 | 
				
			|||
 | 
				
			|||
SpinBox { | 
				
			|||
	id: _edit | 
				
			|||
	property alias inputValue: _edit.dValue | 
				
			|||
	editable: true | 
				
			|||
 | 
				
			|||
	//double spinbox code | 
				
			|||
	property int decimals: 2 | 
				
			|||
	property double dFrom: 0.0 | 
				
			|||
	property double dTo: 100.0 | 
				
			|||
	property double dValue: 0.0 | 
				
			|||
	property double dStepSize: 0.1 | 
				
			|||
 | 
				
			|||
	readonly property int factor: Math.pow(10, _edit.decimals) | 
				
			|||
 | 
				
			|||
	stepSize: _edit.dStepSize * _edit.factor | 
				
			|||
	from: _edit.dFrom * _edit.factor | 
				
			|||
	to: _edit.dTo * _edit.factor | 
				
			|||
	value: _edit.dValue * _edit.factor | 
				
			|||
 | 
				
			|||
	validator: DoubleValidator { | 
				
			|||
		bottom: _edit.dFrom | 
				
			|||
		top: _edit.dTo | 
				
			|||
	} | 
				
			|||
 | 
				
			|||
	textFromValue: function(value, locale) { | 
				
			|||
		return Number(value / _edit.factor).toLocaleString(locale, 'f', _edit.decimals); | 
				
			|||
	} | 
				
			|||
 | 
				
			|||
	valueFromText: function(text, locale) { | 
				
			|||
		return Number.fromLocaleString(locale, text) * _edit.factor; | 
				
			|||
	} | 
				
			|||
 | 
				
			|||
	onDValueChanged: _edit.value = _edit.dValue * _edit.factor | 
				
			|||
	onValueChanged: _edit.dValue = _edit.value / _edit.factor | 
				
			|||
} | 
				
			|||
@ -0,0 +1,10 @@ | 
				
			|||
import QtQuick 2.10 | 
				
			|||
import QtQuick.Controls 2.3 | 
				
			|||
 | 
				
			|||
ComboBox { | 
				
			|||
	id: _edit | 
				
			|||
	property alias inputValue: _edit.currentText | 
				
			|||
 | 
				
			|||
	model: Qt.fontFamilies() | 
				
			|||
	editable: false | 
				
			|||
} | 
				
			|||
@ -0,0 +1,19 @@ | 
				
			|||
import QtQuick 2.10 | 
				
			|||
import QtQuick.Controls 2.3 | 
				
			|||
 | 
				
			|||
ComboBox { | 
				
			|||
	id: _edit | 
				
			|||
	property alias inputValue: _edit.currentValue | 
				
			|||
	property var currentValue: getCurrentValue() | 
				
			|||
	property alias listElements: _edit.model | 
				
			|||
 | 
				
			|||
	textRole: "name" | 
				
			|||
 | 
				
			|||
	function getCurrentValue() { | 
				
			|||
		var value = _edit.model[_edit.currentIndex].value; | 
				
			|||
		if(typeof value !== "undefined") | 
				
			|||
			return value; | 
				
			|||
		else | 
				
			|||
			return _edit.displayText; | 
				
			|||
	} | 
				
			|||
} | 
				
			|||
@ -0,0 +1,8 @@ | 
				
			|||
import QtQuick 2.10 | 
				
			|||
import QtQuick.Controls 2.3 | 
				
			|||
 | 
				
			|||
SpinBox { | 
				
			|||
	id: _edit | 
				
			|||
	property alias inputValue: _edit.value | 
				
			|||
	editable: true | 
				
			|||
} | 
				
			|||
@ -0,0 +1,30 @@ | 
				
			|||
import QtQuick 2.10 | 
				
			|||
import QtQuick.Controls 2.3 | 
				
			|||
 | 
				
			|||
TextField { | 
				
			|||
	id: _edit | 
				
			|||
	property alias inputValue: _edit.text | 
				
			|||
	property string regexp: "" | 
				
			|||
	property string patternOptions | 
				
			|||
 | 
				
			|||
	selectByMouse: true | 
				
			|||
	validator: regexp != "" ? _validator.createObject(_edit) : null | 
				
			|||
 | 
				
			|||
	Component { | 
				
			|||
		id: _validator | 
				
			|||
		RegExpValidator { | 
				
			|||
			regExp: new RegExp(_edit.regexp, optionsAsString(_edit.patternOptions)) | 
				
			|||
 | 
				
			|||
			function optionsAsString(options) { | 
				
			|||
				var resStr; | 
				
			|||
				if((options & 0x0001) != 0) //QRegularExpression::CaseInsensitiveOption | 
				
			|||
					resStr += "i"; | 
				
			|||
				if((options & 0x0004) != 0) //QRegularExpression::MultilineOption | 
				
			|||
					resStr += "m"; | 
				
			|||
				if((options & 0x0040) != 0) //QRegularExpression::UseUnicodePropertiesOption | 
				
			|||
					resStr += "u"; | 
				
			|||
				return resStr; | 
				
			|||
			} | 
				
			|||
		} | 
				
			|||
	} | 
				
			|||
} | 
				
			|||
@ -0,0 +1,77 @@ | 
				
			|||
#include "inputviewfactory.h" | 
				
			|||
#include "inputviewfactory_p.h" | 
				
			|||
 | 
				
			|||
#include <QtCore/QMetaType> | 
				
			|||
 | 
				
			|||
#include <QtMvvmCore/private/qtmvvm_logging_p.h> | 
				
			|||
using namespace QtMvvm; | 
				
			|||
 | 
				
			|||
static void initResources() | 
				
			|||
{ | 
				
			|||
#ifdef QT_STATIC | 
				
			|||
	Q_INIT_RESOURCE(qtmvvmquick_module); | 
				
			|||
#endif | 
				
			|||
} | 
				
			|||
 | 
				
			|||
InputViewFactory::InputViewFactory() : | 
				
			|||
	QObject(nullptr), | 
				
			|||
	d(new InputViewFactoryPrivate()) | 
				
			|||
{ | 
				
			|||
	initResources(); | 
				
			|||
} | 
				
			|||
 | 
				
			|||
InputViewFactory::~InputViewFactory() {} | 
				
			|||
 | 
				
			|||
//int InputViewFactory::metaTypeId(const QByteArray &type, const QVariantMap &properties)
 | 
				
			|||
//{
 | 
				
			|||
//	if(type == "string")
 | 
				
			|||
//		return QMetaType::QString;
 | 
				
			|||
//	else if(type == "list")
 | 
				
			|||
//		return metaTypeId(properties.value(QStringLiteral("_list_data"), QByteArray("string")).toByteArray(), properties);
 | 
				
			|||
//	else
 | 
				
			|||
//		return QMetaType::type(type);
 | 
				
			|||
//}
 | 
				
			|||
 | 
				
			|||
QUrl InputViewFactory::getInputUrl(const QByteArray &type, const QVariantMap &viewProperties) | 
				
			|||
{ | 
				
			|||
	Q_UNUSED(viewProperties) | 
				
			|||
	if(d->simpleViews.contains(type)) | 
				
			|||
		return d->simpleViews.value(type); | 
				
			|||
	else if(type == QMetaType::typeName(QMetaType::Bool)) | 
				
			|||
		return QStringLiteral("qrc:/de/skycoder42/qtmvvm/quick/inputs/CheckBox.qml"); | 
				
			|||
	else if(type == QMetaType::typeName(QMetaType::QString) || type == "string") | 
				
			|||
		return QStringLiteral("qrc:/de/skycoder42/qtmvvm/quick/inputs/TextField.qml"); | 
				
			|||
	else if(type == QMetaType::typeName(QMetaType::Int)) | 
				
			|||
		return QStringLiteral("qrc:/de/skycoder42/qtmvvm/quick/inputs/SpinBox.qml"); | 
				
			|||
	else if(type == QMetaType::typeName(QMetaType::Double)) | 
				
			|||
		return QStringLiteral("qrc:/de/skycoder42/qtmvvm/quick/inputs/DoubleSpinBox.qml"); | 
				
			|||
//	else if(type == QMetaType::typeName(QMetaType::QDate))
 | 
				
			|||
//		return QUrl();
 | 
				
			|||
//	else if(type == QMetaType::typeName(QMetaType::QTime))
 | 
				
			|||
//		return QUrl();
 | 
				
			|||
//	else if(type == QMetaType::typeName(QMetaType::QDateTime) || type == "date")
 | 
				
			|||
//		return QUrl();
 | 
				
			|||
	else if(type == QMetaType::typeName(QMetaType::QFont)) | 
				
			|||
		return QStringLiteral("qrc:/de/skycoder42/qtmvvm/quick/inputs/FontEdit.qml"); | 
				
			|||
//	else if(type == QMetaType::typeName(QMetaType::QUrl) || type == "url")
 | 
				
			|||
//		return QStringLiteral("qrc:/de/skycoder42/qtmvvm/quick/inputs/UrlField.qml");
 | 
				
			|||
	else if(type == "selection" || type == "list") | 
				
			|||
		return QStringLiteral("qrc:/de/skycoder42/qtmvvm/quick/inputs/ListEdit.qml"); | 
				
			|||
	else { | 
				
			|||
		logCritical() << "Failed to find any input view for input type:" << type; | 
				
			|||
		return QUrl(); | 
				
			|||
	} | 
				
			|||
} | 
				
			|||
 | 
				
			|||
bool InputViewFactory::addSimpleView(const QByteArray &type, const QUrl &qmlFileUrl) | 
				
			|||
{ | 
				
			|||
	d->simpleViews.insert(type, qmlFileUrl); | 
				
			|||
	return true; | 
				
			|||
} | 
				
			|||
 | 
				
			|||
// ------------- Private Implementation -------------
 | 
				
			|||
 | 
				
			|||
InputViewFactoryPrivate::InputViewFactoryPrivate() : | 
				
			|||
	simpleViews() | 
				
			|||
{} | 
				
			|||
 | 
				
			|||
@ -0,0 +1,41 @@ | 
				
			|||
#ifndef QTMVVM_INPUTVIEWFACTORY_H | 
				
			|||
#define QTMVVM_INPUTVIEWFACTORY_H | 
				
			|||
 | 
				
			|||
#include <QtCore/qurl.h> | 
				
			|||
#include <QtCore/qvariant.h> | 
				
			|||
#include <QtCore/qscopedpointer.h> | 
				
			|||
#include <QtCore/qobject.h> | 
				
			|||
 | 
				
			|||
#include "QtMvvmQuick/qtmvvmquick_global.h" | 
				
			|||
 | 
				
			|||
namespace QtMvvm { | 
				
			|||
 | 
				
			|||
class InputViewFactoryPrivate; | 
				
			|||
class Q_MVVMQUICK_EXPORT InputViewFactory : public QObject | 
				
			|||
{ | 
				
			|||
	Q_OBJECT | 
				
			|||
 | 
				
			|||
public: | 
				
			|||
	InputViewFactory(); | 
				
			|||
	virtual ~InputViewFactory(); | 
				
			|||
 | 
				
			|||
	//virtual int metaTypeId(const QByteArray &type, const QVariantMap &properties);
 | 
				
			|||
	Q_INVOKABLE virtual QUrl getInputUrl(const QByteArray &type, const QVariantMap &viewProperties); | 
				
			|||
 | 
				
			|||
	Q_INVOKABLE virtual bool addSimpleView(const QByteArray &type, const QUrl &qmlFileUrl); | 
				
			|||
	template <typename T> | 
				
			|||
	bool addSimpleView(const QUrl &qmlFileUrl); | 
				
			|||
 | 
				
			|||
private: | 
				
			|||
	QScopedPointer<InputViewFactoryPrivate> d; | 
				
			|||
}; | 
				
			|||
 | 
				
			|||
template<typename T> | 
				
			|||
bool InputViewFactory::addSimpleView(const QUrl &qmlFileUrl) | 
				
			|||
{ | 
				
			|||
	return addSimpleView(QMetaType::typeName(qMetaTypeId<T>()), qmlFileUrl); | 
				
			|||
} | 
				
			|||
 | 
				
			|||
} | 
				
			|||
 | 
				
			|||
#endif // QTMVVM_INPUTVIEWFACTORY_H
 | 
				
			|||
@ -0,0 +1,10 @@ | 
				
			|||
<RCC> | 
				
			|||
    <qresource prefix="/de/skycoder42/qtmvvm/quick/inputs"> | 
				
			|||
        <file>ListEdit.qml</file> | 
				
			|||
        <file>TextField.qml</file> | 
				
			|||
        <file>SpinBox.qml</file> | 
				
			|||
        <file>CheckBox.qml</file> | 
				
			|||
        <file>DoubleSpinBox.qml</file> | 
				
			|||
        <file>FontEdit.qml</file> | 
				
			|||
    </qresource> | 
				
			|||
</RCC> | 
				
			|||
@ -0,0 +1,19 @@ | 
				
			|||
#ifndef QTMVVM_INPUTWIDGETFACTORY_P_H | 
				
			|||
#define QTMVVM_INPUTWIDGETFACTORY_P_H | 
				
			|||
 | 
				
			|||
#include "qtmvvmwidgets_global.h" | 
				
			|||
#include "inputwidgetfactory.h" | 
				
			|||
 | 
				
			|||
namespace QtMvvm { | 
				
			|||
 | 
				
			|||
class InputWidgetFactoryPrivate | 
				
			|||
{ | 
				
			|||
public: | 
				
			|||
	InputWidgetFactoryPrivate(); | 
				
			|||
 | 
				
			|||
	QHash<QByteArray, std::function<QWidget*(QWidget*)>> simpleWidgets; | 
				
			|||
}; | 
				
			|||
 | 
				
			|||
} | 
				
			|||
 | 
				
			|||
#endif // QTMVVM_INPUTWIDGETFACTORY_P_H
 | 
				
			|||
					Loading…
					
					
				
		Reference in new issue