diff --git a/libqf/libqfcore/src/core/utils.cpp b/libqf/libqfcore/src/core/utils.cpp index bd93b6c4c..63e9014f6 100644 --- a/libqf/libqfcore/src/core/utils.cpp +++ b/libqf/libqfcore/src/core/utils.cpp @@ -5,6 +5,7 @@ #include #include #include +#include namespace qf::core { @@ -266,4 +267,22 @@ QStringList Utils::parseProgramAndArgumentsList(const QString &command_line) return args; } +QVariant Utils::jsonToQVariant(const QString &json) +{ + QJsonParseError error; + auto doc = QJsonDocument::fromJson(json.toUtf8(), &error); + if (error.error != QJsonParseError::NoError) { + qfError() << json << "Json parse error:" << error.errorString(); + return {}; + } + return doc.toVariant(); +} + +QString Utils::qvariantToJson(const QVariant &v, bool compact) +{ + auto doc = QJsonDocument::fromVariant(v); + auto ba = doc.toJson(compact? QJsonDocument::Compact: QJsonDocument::Indented); + return QString::fromUtf8(ba); +} + } diff --git a/libqf/libqfcore/src/core/utils.h b/libqf/libqfcore/src/core/utils.h index 8c460f129..7290b23bb 100644 --- a/libqf/libqfcore/src/core/utils.h +++ b/libqf/libqfcore/src/core/utils.h @@ -210,6 +210,9 @@ class QFCORE_DECL_EXPORT Utils } static QStringList parseProgramAndArgumentsList(const QString &command_line); + + static QVariant jsonToQVariant(const QString &json); + static QString qvariantToJson(const QVariant &v, bool compact = true); }; }} diff --git a/quickevent/app/quickevent/plugins/Classes/src/drawing/ganttitem.cpp b/quickevent/app/quickevent/plugins/Classes/src/drawing/ganttitem.cpp index 68f3d1f59..5afc179f2 100644 --- a/quickevent/app/quickevent/plugins/Classes/src/drawing/ganttitem.cpp +++ b/quickevent/app/quickevent/plugins/Classes/src/drawing/ganttitem.cpp @@ -28,7 +28,7 @@ GanttItem::GanttItem(QGraphicsItem *parent) int GanttItem::startSlotItemIndex(const StartSlotItem *it) const { - return m_startSlotItems.indexOf((StartSlotItem *)it); + return m_startSlotItems.indexOf(it); } StartSlotItem *GanttItem::startSlotItemAt(int ix, bool throw_ex) @@ -65,7 +65,7 @@ void GanttItem::load(int stage_id) qfLogFuncFrame(); Event::StageData stage_data = getPlugin()->stageData(stage_id); DrawingConfig dc(stage_data.drawingConfig()); - QVariantList stsllst = dc.startSlots(); + QVariantList start_slot_list = dc.startSlots(); qfs::Query q(qfs::Connection::forName()); qf::core::sql::QueryBuilder qb1; @@ -104,7 +104,7 @@ void GanttItem::load(int stage_id) if(slot_ix > curr_slot_ix) { slot_item = addStartSlotItem(); curr_slot_ix = slot_ix; - StartSlotData sd(stsllst.value(slot_ix).toMap()); + StartSlotData sd(start_slot_list.value(slot_ix).toMap()); slot_item->setData(sd); } } @@ -114,8 +114,13 @@ void GanttItem::load(int stage_id) slot_item = addStartSlotItem(); } } - auto *class_it = slot_item->addClassItem(); - class_it->setData(cd); + if (slot_item) { + auto *class_it = slot_item->addClassItem(); + class_it->setData(cd); + } + else { + QF_EXCEPTION("internal error"); + } } updateGeometry(); checkClassClash(); @@ -134,8 +139,7 @@ void GanttItem::save(int stage_id) start_slots << sd; } dc.setStartSlots(start_slots); - QJsonDocument jsd = QJsonDocument::fromVariant(dc); - QString dc_str = QString::fromUtf8(jsd.toJson(QJsonDocument::Compact)); + auto dc_str = qf::core::Utils::qvariantToJson(dc); QString qs = "UPDATE stages SET drawingConfig=:drawingConfig WHERE id=:id"; qfs::Query q(qfs::Connection::forName()); diff --git a/quickevent/app/quickevent/plugins/Event/src/eventplugin.cpp b/quickevent/app/quickevent/plugins/Event/src/eventplugin.cpp index 1e19eedf1..d482d0243 100644 --- a/quickevent/app/quickevent/plugins/Event/src/eventplugin.cpp +++ b/quickevent/app/quickevent/plugins/Event/src/eventplugin.cpp @@ -245,7 +245,14 @@ StageData EventPlugin::stageData(int stage_id) doc.load(stage_id); StageData data; for (const auto &[k, v] : doc.values().asKeyValueRange()) { - data[k.toLower()] = v; + auto key = k.toLower(); + if (key == "drawingconfig" && v.userType() == qMetaTypeId()) { + // convert json to variantmap + data[key] = qf::core::Utils::jsonToQVariant(v.toString()); + } + else { + data[key] = v; + } } m_stageCache[stage_id] = StageData(data); } diff --git a/quickevent/app/quickevent/plugins/Event/src/stage.h b/quickevent/app/quickevent/plugins/Event/src/stage.h index 7aac6aea0..f52c79399 100644 --- a/quickevent/app/quickevent/plugins/Event/src/stage.h +++ b/quickevent/app/quickevent/plugins/Event/src/stage.h @@ -14,9 +14,7 @@ class StageData : public QVariantMap private: typedef QVariantMap Super; - // QF_VARIANTMAP_KEY_FIELD(int, id, i, setI, d) QF_VARIANTMAP_KEY_FIELD(bool, useallmaps, is, set, UseAllMaps) - //QF_VARIANTMAP_KEY_FIELD(QDateTime, startdatetime, s, setS, tartDateTime) QF_VARIANTMAP_KEY_FIELD(QVariantMap, drawingconfig, d, setD, rawingConfig) QF_VARIANTMAP_KEY_FIELD(QString, qxapitoken, qx, setQx, ApiToken) public: diff --git a/quickevent/app/quickevent/src/application.cpp b/quickevent/app/quickevent/src/application.cpp index f2b3f3435..5cfb5b7b1 100644 --- a/quickevent/app/quickevent/src/application.cpp +++ b/quickevent/app/quickevent/src/application.cpp @@ -68,8 +68,3 @@ Application *Application::instance(bool must_exist) return ret; } -QString Application::versionString() const -{ - return QCoreApplication::applicationVersion(); -} - diff --git a/quickevent/app/quickevent/src/application.h b/quickevent/app/quickevent/src/application.h index 811f32456..8fbeab0bb 100644 --- a/quickevent/app/quickevent/src/application.h +++ b/quickevent/app/quickevent/src/application.h @@ -21,8 +21,6 @@ class Application : public qf::qmlwidgets::framework::Application AppCliOptions* cliOptions() {return m_cliOptions;} - Q_INVOKABLE QString versionString() const; - Q_SIGNAL void newLogEntry(const qf::core::LogEntryMap &le); void emitNewLogEntry(const qf::core::LogEntryMap &le) { emit newLogEntry(le); } private: diff --git a/quickevent/app/quickevent/src/appversion.h b/quickevent/app/quickevent/src/appversion.h index 2f3fd2d2b..d4474fcb4 100644 --- a/quickevent/app/quickevent/src/appversion.h +++ b/quickevent/app/quickevent/src/appversion.h @@ -1,4 +1,4 @@ #pragma once -#define APP_VERSION "3.4.2" +#define APP_VERSION "3.4.3"