#ifndef TITAN_PCBCAM_CORE_H
#define TITAN_PCBCAM_CORE_H
#include "../titanpcbcamglobal.h"
#include <QObject>
#include <QVariant>
#include <QString>
#include "./abstractdataio.h"
#include "./config.h"


class PcbCamCorePrivate;
class TITAN_PCBCAM_EXPORT PcbCamCore : public QObject
{
    Q_OBJECT
public:
    static PcbCamCore *instance();
    void setConfig(const PcbCamConfig &iConf);
    PcbCamConfig &config();

    void setDataIo(PcbCamAbstractDataIo *iDataIo);
    PcbCamAbstractDataIo *dataIo();


signals:
    void messageNotified(const QString &iMessage, const QString &iType, const QString &iCategory, const QVariant &iUserData) const;

public slots:
    void notifyMessage(const QString &iMessage, const QString &iType = "INFO", const QString &iCategory = "", const QVariant &iUserData = QVariant());

private:
    PcbCamCore();
    ~PcbCamCore();

protected:
    const QScopedPointer<PcbCamCorePrivate> d_ptr;

private:
    Q_DECLARE_PRIVATE(PcbCamCore)
    Q_DISABLE_COPY(PcbCamCore)

};


#endif // TITAN_PCBCAM_CORE_H
