diff --git a/mkspecs/features/qsettingsgenerator.prf b/mkspecs/features/qsettingsgenerator.prf
new file mode 100644
index 0000000..67bbd2a
--- /dev/null
+++ b/mkspecs/features/qsettingsgenerator.prf
@@ -0,0 +1,58 @@
+isEmpty(QMAKE_QSETTINGSGENERATOR): qtPrepareTool(QMAKE_QSETTINGSGENERATOR, qsettingsgenerator)
+
+isEmpty(QSETTINGSGENERATOR_DIR): QSETTINGSGENERATOR_DIR = .
+isEmpty(MOC_DIR): MOC_DIR = .
+isEmpty(QSETTINGSTRANSLATOR_DIR): QSETTINGSTRANSLATOR_DIR = $$_PRO_FILE_PWD_/.ts-dummy
+
+!ReleaseBuild:!DebugBuild: {
+ qsettingstranslator_c.name = qsettingsgenerator --translate ${QMAKE_FILE_IN}
+ qsettingstranslator_c.input = SETTINGS_TRANSLATIONS #TODO compability
+ qsettingstranslator_c.variable_out = CPP_DUMMIES
+ qsettingstranslator_c.commands = $$QMAKE_QSETTINGSGENERATOR --translate --in ${QMAKE_FILE_IN} --impl ${QMAKE_FILE_OUT}
+ qsettingstranslator_c.output = $$QSETTINGSTRANSLATOR_DIR/${QMAKE_FILE_BASE}.tsdummy$${first(QMAKE_EXT_CPP)}
+ qsettingstranslator_c.CONFIG += no_link
+ qsettingstranslator_c.depends += $$QMAKE_QSETTINGSGENERATOR_EXE
+
+ QMAKE_EXTRA_COMPILERS += qsettingstranslator_c
+
+ qtmvvm_tsgen_target.target = qtmvvm-tsgen
+ qtmvvm_tsgen_target.depends += compiler_qsettingstranslator_c_make_all
+ qtmvvm_tsgen_target.commands += @echo $$shell_quote(>>> Remember to add the line \"_never_true_condition: SOURCES += $${LITERAL_DOLLAR}$${LITERAL_DOLLAR}$${LITERAL_DOLLAR}$${LITERAL_DOLLAR}files($${LITERAL_DOLLAR}$${LITERAL_DOLLAR}$${LITERAL_DOLLAR}$${LITERAL_DOLLAR}PWD/.ts-dummy/*)\" to your pro file)
+ QMAKE_EXTRA_TARGETS += qtmvvm_tsgen_target
+} else {
+ qtmvvm_tsgen_target.target = qtmvvm-tsgen
+ QMAKE_EXTRA_TARGETS += qtmvvm_tsgen_target
+}
+
+{
+ qsettingsgenerator_c.name = qsettingsgenerator ${QMAKE_FILE_IN}.h
+ qsettingsgenerator_c.input = SETTINGS_DEFINITIONS
+ qsettingsgenerator_c.variable_out = QSETTINGSGENERATOR_HEADERS
+ qsettingsgenerator_c.commands = $$QMAKE_QSETTINGSGENERATOR --in ${QMAKE_FILE_IN} --header ${QMAKE_FILE_OUT} --impl $$QSETTINGSGENERATOR_DIR/${QMAKE_FILE_BASE}$${first(QMAKE_EXT_CPP)}
+ qsettingsgenerator_c.output = $$QSETTINGSGENERATOR_DIR/${QMAKE_FILE_BASE}$${first(QMAKE_EXT_H)}
+ qsettingsgenerator_c.CONFIG += target_predeps
+ qsettingsgenerator_c.depends += $$QMAKE_QSETTINGSGENERATOR_EXE
+ QMAKE_EXTRA_COMPILERS += qsettingsgenerator_c
+
+ qsettingsgenerator_m.name = qsettingsgenerator moc ${QMAKE_FILE_IN}
+ qsettingsgenerator_m.input = QSETTINGSGENERATOR_HEADERS
+ qsettingsgenerator_m.variable_out = GENERATED_SOURCES
+ qsettingsgenerator_m.commands = ${QMAKE_FUNC_mocCmdBase} ${QMAKE_FILE_IN} -o ${QMAKE_FILE_OUT}
+ qsettingsgenerator_m.output = $$MOC_DIR/$${QMAKE_H_MOD_MOC}${QMAKE_FILE_BASE}$${first(QMAKE_EXT_CPP)}
+ qsettingsgenerator_m.CONFIG += target_predeps
+ qsettingsgenerator_m.depends += $$QMAKE_QSETTINGSGENERATOR_EXE $$WIN_INCLUDETEMP $$moc_predefs.output
+ qsettingsgenerator_m.dependency_type = TYPE_C
+ QMAKE_EXTRA_COMPILERS += qsettingsgenerator_m
+
+ qsettingsgenerator_s.name = qsettingsgenerator src ${QMAKE_FILE_IN}.cpp
+ qsettingsgenerator_s.input = QSETTINGSGENERATOR_HEADERS
+ qsettingsgenerator_s.variable_out = GENERATED_SOURCES
+ qsettingsgenerator_s.commands = $$escape_expand(\\n) # force creation of rule
+ qsettingsgenerator_s.output = $$QSETTINGSGENERATOR_DIR/${QMAKE_FILE_BASE}$${first(QMAKE_EXT_CPP)}
+ qsettingsgenerator_s.CONFIG += target_predeps
+ QMAKE_EXTRA_COMPILERS += qsettingsgenerator_s
+}
+
+INCLUDEPATH += $$absolute_path($$QSETTINGSGENERATOR_DIR, $$OUT_PWD)
+QMAKE_DIR_REPLACE += QSETTINGSGENERATOR_DIR
+QMAKE_DIR_REPLACE_SANE += QSETTINGSGENERATOR_DIR
diff --git a/mkspecs/features/qsettingstranslator.prf b/mkspecs/features/qsettingstranslator.prf
deleted file mode 100644
index f8523a9..0000000
--- a/mkspecs/features/qsettingstranslator.prf
+++ /dev/null
@@ -1,25 +0,0 @@
-isEmpty(QMAKE_QSETTINGSTRANSLATOR): qtPrepareTool(QMAKE_QSETTINGSTRANSLATOR, qsettingstranslator.py)
-isEmpty(QSETTINGSTRANSLATOR_DIR): QSETTINGSTRANSLATOR_DIR = $$_PRO_FILE_PWD_/.ts-dummy
-
-!ReleaseBuild:!DebugBuild: {
- qsettingstranslator_c.name = QSETTINGSTRANSLATOR of ${QMAKE_FILE_IN}
- qsettingstranslator_c.input = QTMVVM_TS_SETTINGS
- qsettingstranslator_c.variable_out = CPP_DUMMIES
- qsettingstranslator_c.commands = $$QMAKE_QSETTINGSTRANSLATOR ${QMAKE_FILE_IN} ${QMAKE_FILE_OUT}
- qsettingstranslator_c.output = $$QSETTINGSTRANSLATOR_DIR/${QMAKE_FILE_BASE}.tsdummy$${first(QMAKE_EXT_CPP)}
- qsettingstranslator_c.CONFIG += no_link
- qsettingstranslator_c.depends += $$QMAKE_QSETTINGSTRANSLATOR
-
- QMAKE_EXTRA_COMPILERS += qsettingstranslator_c
-
- qtmvvm_tsgen_target.target = qtmvvm-tsgen
- qtmvvm_tsgen_target.depends += compiler_qsettingstranslator_c_make_all
- qtmvvm_tsgen_target.commands += @echo $$shell_quote(>>> Remember to add the line \"_never_true_condition: SOURCES += $${LITERAL_DOLLAR}$${LITERAL_DOLLAR}$${LITERAL_DOLLAR}$${LITERAL_DOLLAR}files($${LITERAL_DOLLAR}$${LITERAL_DOLLAR}$${LITERAL_DOLLAR}$${LITERAL_DOLLAR}PWD/.ts-dummy/*)\" to your pro file)
- QMAKE_EXTRA_TARGETS += qtmvvm_tsgen_target
-} else {
- qtmvvm_tsgen_target.target = qtmvvm-tsgen
- QMAKE_EXTRA_TARGETS += qtmvvm_tsgen_target
-}
-
-QMAKE_DIR_REPLACE += QSETTINGSTRANSLATOR_DIR
-QMAKE_DIR_REPLACE_SANE += QSETTINGSTRANSLATOR_DIR
diff --git a/src/mvvmcore/mvvmcore.pro b/src/mvvmcore/mvvmcore.pro
index 945f2a2..1ebaf5f 100644
--- a/src/mvvmcore/mvvmcore.pro
+++ b/src/mvvmcore/mvvmcore.pro
@@ -1,7 +1,7 @@
TARGET = QtMvvmCore
QT = core gui
-MODULE_CONFIG += qsettingstranslator
+MODULE_CONFIG += qsettingsgenerator
HEADERS += \
viewmodel.h \
@@ -44,23 +44,18 @@ TRANSLATIONS += \
translations/qtmvvmcore_de.ts \
translations/qtmvvmcore_template.ts
-DISTFILES += $$TRANSLATIONS \
- settings.xsd
+DISTFILES += $$TRANSLATIONS
load(qt_module)
qpmx_ts_target.path = $$[QT_INSTALL_TRANSLATIONS]
qpmx_ts_target.depends += lrelease
-FEATURES += ../../mkspecs/features/qsettingstranslator.prf
+FEATURES += ../../mkspecs/features/qsettingsgenerator.prf
features.files = $$FEATURES
features.path = $$[QT_HOST_DATA]/mkspecs/features/
-SCRIPTS += ../../bin/qsettingstranslator.py
-scripts.files = $$SCRIPTS
-scripts.path = $$[QT_INSTALL_BINS]
-
-INSTALLS += qpmx_ts_target features scripts
+INSTALLS += qpmx_ts_target features
win32 {
QMAKE_TARGET_PRODUCT = "$$TARGET"
diff --git a/tests/auto/mvvmcore/mvvmcore.pro b/tests/auto/mvvmcore/mvvmcore.pro
index 9671085..bc3a8df 100644
--- a/tests/auto/mvvmcore/mvvmcore.pro
+++ b/tests/auto/mvvmcore/mvvmcore.pro
@@ -1 +1,4 @@
TEMPLATE = subdirs
+
+SUBDIRS += \
+ settingsgenerator
diff --git a/tests/auto/mvvmcore/settingsgenerator/settings.xml b/tests/auto/mvvmcore/settingsgenerator/settings.xml
new file mode 100644
index 0000000..d5c7acd
--- /dev/null
+++ b/tests/auto/mvvmcore/settingsgenerator/settings.xml
@@ -0,0 +1,3 @@
+
+
+
diff --git a/tests/auto/mvvmcore/settingsgenerator/settingsgenerator.pro b/tests/auto/mvvmcore/settingsgenerator/settingsgenerator.pro
new file mode 100644
index 0000000..cb51453
--- /dev/null
+++ b/tests/auto/mvvmcore/settingsgenerator/settingsgenerator.pro
@@ -0,0 +1,14 @@
+TEMPLATE = app
+
+QT += testlib mvvmcore
+QT -= gui
+CONFIG += console
+CONFIG -= app_bundle
+
+TARGET = tst_settingsgenerator
+
+SOURCES += \
+ tst_settingsgenerator.cpp
+
+SETTINGS_DEFINITIONS += \
+ settings.xml
diff --git a/tests/auto/mvvmcore/settingsgenerator/tst_settingsgenerator.cpp b/tests/auto/mvvmcore/settingsgenerator/tst_settingsgenerator.cpp
new file mode 100644
index 0000000..7739a21
--- /dev/null
+++ b/tests/auto/mvvmcore/settingsgenerator/tst_settingsgenerator.cpp
@@ -0,0 +1,35 @@
+#include
+#include
+#include
+
+class SettingsGeneratorTest : public QObject
+{
+ Q_OBJECT
+
+public:
+ SettingsGeneratorTest();
+
+private Q_SLOTS:
+ void testSettingsGeneration_data();
+ void testSettingsGeneration();
+};
+
+SettingsGeneratorTest::SettingsGeneratorTest()
+{
+}
+
+void SettingsGeneratorTest::testSettingsGeneration_data()
+{
+ QTest::addColumn("data");
+ QTest::newRow("0") << QString();
+}
+
+void SettingsGeneratorTest::testSettingsGeneration()
+{
+ QFETCH(QString, data);
+ QVERIFY2(true, "Failure");
+}
+
+QTEST_MAIN(SettingsGeneratorTest)
+
+#include "tst_settingsgenerator.moc"
diff --git a/tools/settingsgenerator/qpmx.json b/tools/settingsgenerator/qpmx.json
index 8de0c3d..972924c 100644
--- a/tools/settingsgenerator/qpmx.json
+++ b/tools/settingsgenerator/qpmx.json
@@ -3,7 +3,7 @@
{
"package": "de.skycoder42.qxmlcodegen",
"provider": "qpm",
- "version": "1.1.0"
+ "version": "1.1.2"
}
],
"license": {
diff --git a/tools/settingsgenerator/settingsgenerator.cpp b/tools/settingsgenerator/settingsgenerator.cpp
index f1c418f..65bc96f 100644
--- a/tools/settingsgenerator/settingsgenerator.cpp
+++ b/tools/settingsgenerator/settingsgenerator.cpp
@@ -14,8 +14,10 @@ SettingsGenerator::SettingsGenerator(const QString &hdrPath, const QString &srcP
void SettingsGenerator::process(const QString &inPath)
{
- // TODO add xml patterns...
+ // read settings and adjust defaults
auto settings = readDocument(inPath);
+ if(!settings.name)
+ settings.name = QFileInfo{_hdrFile.fileName()}.baseName();
if(!_hdrFile.open(QIODevice::WriteOnly | QIODevice::Text))
throw FileException{_hdrFile};
@@ -231,7 +233,12 @@ void SettingsGenerator::writeHeader(const SettingsType &settings)
<< "#define " << incGuard << "\n\n";
// write the includes
- for(const auto &inc : settings.includes) {
+ auto includes = QList {
+ {false, QStringLiteral("QtCore/QObject")},
+ {false, QStringLiteral("QtMvvmCore/ISettingsAccessor")},
+ {false, QStringLiteral("QtMvvmCore/SettingsEntry")}
+ } + settings.includes;
+ for(const auto &inc : includes) {
if(inc.local)
_hdr << "#include \"" << inc.includePath << "\"\n";
else
@@ -240,21 +247,20 @@ void SettingsGenerator::writeHeader(const SettingsType &settings)
_hdr << "\n";
// create the class
- auto name = settings.name.value_or(QFileInfo{_hdrFile.fileName()}.baseName());
- _hdr << "class " << QString{settings.prefix ? settings.prefix.value() + QLatin1Char(' ') + name : name} << " : public QObject\n"
+ _hdr << "class " << QString{settings.prefix ? settings.prefix.value() + QLatin1Char(' ') + settings.name.value() : settings.name.value()} << " : public QObject\n"
<< "{\n"
<< "\tQ_OBJECT\n\n"
- << "\tQ_PROPERTY(ISettingsAccessor *accessor READ accessor CONSTANT FINAL)\n\n"
+ << "\tQ_PROPERTY(QtMvvm::ISettingsAccessor *accessor READ accessor CONSTANT FINAL)\n\n"
<< "public:\n"
- << "\tQ_INVOKABLE explicit " << name << "(QObject *parent = nullptr);\n"
- << "\texplicit " << name << "(QObject *parent, ISettingsAccessor *accessor);\n\n"
- << "\tstatic " << name << " *instance();\n\n"
- << "\tISettingsAccessor *accessor() const;\n\n";
+ << "\tQ_INVOKABLE explicit " << settings.name.value() << "(QObject *parent = nullptr);\n"
+ << "\texplicit " << settings.name.value() << "(QtMvvm::ISettingsAccessor *accessor, QObject *parent);\n\n"
+ << "\tstatic " << settings.name.value() << " *instance();\n\n"
+ << "\tQtMvvm::ISettingsAccessor *accessor() const;\n\n";
writeNodeElements(settings);
_hdr << "\nprivate:\n"
- << "\tISettingsAccessor *_accessor;\n"
+ << "\tQtMvvm::ISettingsAccessor *_accessor;\n"
<< "};\n\n"
<< "#endif //" << incGuard << '\n';
}
@@ -287,5 +293,24 @@ void SettingsGenerator::writeEntry(const EntryType &entry, int intendent)
void SettingsGenerator::writeSource(const SettingsType &settings)
{
+ _src << "#include \"" << _hdrFile.fileName() << "\"\n\n";
+ _src << settings.name.value() << "::" << settings.name.value() << "(QObject *parent) : \n"
+ << "\t" << settings.name.value() << "{nullptr, parent}\n"
+ << "{}\n\n";
+
+ _src << settings.name.value() << "::" << settings.name.value() << "(QtMvvm::ISettingsAccessor *accessor, QObject *parent) : \n"
+ << "\tQObject{parent},\n"
+ << "\t_accessor{accessor}\n"
+ << "{}\n\n";
+
+ _src << settings.name.value() << " *" << settings.name.value() << "::instance()\n"
+ << "{\n"
+ << "\treturn nullptr;\n"
+ << "}\n\n";
+
+ _src << "QtMvvm::ISettingsAccessor *" << settings.name.value() << "::accessor() const\n"
+ << "{\n"
+ << "\treturn _accessor;\n"
+ << "}\n\n";
}