42 lines
1.1 KiB
C++
42 lines
1.1 KiB
C++
#pragma once
|
|
|
|
#include "sketchlib_global.h"
|
|
|
|
#include <QObject>
|
|
#include <QHash>
|
|
|
|
class QIODevice;
|
|
class QByteArray;
|
|
class QJsonDocument;
|
|
class QJsonObject;
|
|
|
|
class BaseContainer;
|
|
|
|
class SKETCHLIB_EXPORT ContainerFactory
|
|
{
|
|
static QHash<QString, QMetaObject> m_metaObjects;
|
|
|
|
public:
|
|
static BaseContainer* createContainer(const QString &path, QObject *parent = Q_NULLPTR);
|
|
|
|
static BaseContainer* createContainer(QIODevice &device, QObject *parent = Q_NULLPTR);
|
|
|
|
static BaseContainer* createContainer(const QByteArray &content, QObject *parent = Q_NULLPTR);
|
|
|
|
static BaseContainer* createContainer(const QJsonDocument &jsonDocument, QObject *parent = Q_NULLPTR);
|
|
|
|
static BaseContainer* createContainer(const QJsonObject &jsonObj, QObject *parent = Q_NULLPTR);
|
|
|
|
template<typename T1, typename T2>
|
|
static T1* createContainer(const T2 &arg, QObject *parent = Q_NULLPTR)
|
|
{
|
|
auto container = createContainer(arg, parent);
|
|
auto castedContainer = qobject_cast<T1*>(container);
|
|
|
|
if(!castedContainer)
|
|
throw QStringLiteral("not expected type");
|
|
|
|
return castedContainer;
|
|
}
|
|
};
|