diff --git a/QScadaBoard/qscadaboard.cpp b/QScadaBoard/qscadaboard.cpp index 04a47f5..382a6d4 100644 --- a/QScadaBoard/qscadaboard.cpp +++ b/QScadaBoard/qscadaboard.cpp @@ -2,7 +2,6 @@ #include "qscadaboardinfo.h" #include "../QScadaObject/qscadaobjectinfo.h" #include "../QScadaObject/qscadaobjectqml.h" -#include "../QScadaWidgets/qledindicator.h" #include #include @@ -53,16 +52,8 @@ void QScadaBoard::initBoard(QScadaBoardInfo *boardInfo) QScadaObject *QScadaBoard::initNewObject(QScadaObjectInfo *info) { - QScadaObject *rObject; + QScadaObject *rObject = new QScadaObjectQML(info, this); - switch(info->type()){ - case QScadaObjectTypeWidget: - rObject = new QLedIndicator(info, this); - break; - case QScadaObjectTypeQML: - rObject = new QScadaObjectQML(info, this); - break; - } rObject->setIsEditable(mEditable); connect(rObject, SIGNAL(objectDoubleClicked(QScadaObject*)), this , SIGNAL(objectDoubleClicked(QScadaObject*))); connect(rObject, SIGNAL(objectSelected(int)), this , SLOT(newObjectSelected(int))); @@ -223,7 +214,6 @@ void QScadaBoard::resetGridPixmap() mUpdateGridPixmap = true; } -#include void QScadaBoard::orderObject(QScadaObject *o) { bool lIsNew = false; @@ -299,11 +289,21 @@ void QScadaBoard::updateObjectWithId(int id) } } -void QScadaBoard::updateStatusWithId(int id, QScadaObjectStatus status) +void QScadaBoard::updateValue(int id, QVariant value) { for (QScadaObject *object : *mObjects) { if (id == object->info()->id()) { - object->setStatus(status); + object->updateValue(value); + object->update(); + } + } +} + +void QScadaBoard::setPropertyWithId(int id, QString property, QVariant value) +{ + for (QScadaObject *object : *mObjects) { + if (id == object->info()->id()) { + object->setProperty(property.toLocal8Bit().data(), value); object->update(); } } @@ -311,13 +311,11 @@ void QScadaBoard::updateStatusWithId(int id, QScadaObjectStatus status) bool QScadaBoard::showGrid() const { - qDebug() << __FUNCTION__; return mShowGrid; } void QScadaBoard::setShowGrid(bool showGrid) { - qDebug() << __FUNCTION__; mShowGrid = showGrid; repaint(); @@ -325,13 +323,11 @@ void QScadaBoard::setShowGrid(bool showGrid) bool QScadaBoard::editable() const { - qDebug() << __FUNCTION__; return mEditable; } void QScadaBoard::setEditable(bool editable) { - qDebug() << __FUNCTION__; mEditable = editable; for (QScadaObject *object : *mObjects) { diff --git a/QScadaBoard/qscadaboard.h b/QScadaBoard/qscadaboard.h index 51a1f0a..1a04273 100644 --- a/QScadaBoard/qscadaboard.h +++ b/QScadaBoard/qscadaboard.h @@ -39,7 +39,9 @@ public: void deleteObjectWithId(int); void deleteObject(QScadaObject*); void updateObjectWithId(int); - void updateStatusWithId(int, QScadaObjectStatus); + + void updateValue(int id, QVariant value); + void setPropertyWithId(int id, QString property, QVariant value); QList *objects() const; diff --git a/QScadaBoard/qscadaboardcontroller.cpp b/QScadaBoard/qscadaboardcontroller.cpp index d606ba5..c0efed7 100644 --- a/QScadaBoard/qscadaboardcontroller.cpp +++ b/QScadaBoard/qscadaboardcontroller.cpp @@ -168,17 +168,6 @@ void QScadaBoardController::updateSavedObject(QScadaObjectInfo *info) } } -void QScadaBoardController::updateStatus() -{ - qDebug() << __FUNCTION__; - - int lNumber = 3; - int lRandomValue = qrand() % lNumber; - mBoard->updateStatusWithId(0, (QScadaObjectStatus)lRandomValue); - lRandomValue = qrand() % lNumber; - mBoard->updateStatusWithId(1, (QScadaObjectStatus)lRandomValue); -} - void QScadaBoardController::objectDoubleClickedHandler(QScadaObject *o) { emit objectDoubleClicked(o); @@ -206,26 +195,6 @@ QList QScadaBoardController::getBoardListForDeviceIp(QString ip) return rList; } -void QScadaBoardController::updateStatus(QString id, int objectId, QScadaObjectStatus status) -{ - qDebug() << __FUNCTION__; - - QScadaBoard *lBoard = mBoardManager->getBoardForDeviceWithIp(id); - - for (QScadaObject *object :*lBoard->objects()) { - if (object->info()->id() == objectId) { - object->setStatus(status); - } - } -} - -void QScadaBoardController::updateStatus(QStringList device, QList objectId, QList status) -{ - for (int i=0; i< device.count(); i++) { - updateStatus(device.at(i), objectId.at(i), status.at(i)); - } -} - void QScadaBoardController::setEditingMode(bool editing) { mBoard->setEditable(editing); diff --git a/QScadaBoard/qscadaboardcontroller.h b/QScadaBoard/qscadaboardcontroller.h index 9960f79..c45fb16 100644 --- a/QScadaBoard/qscadaboardcontroller.h +++ b/QScadaBoard/qscadaboardcontroller.h @@ -30,9 +30,6 @@ public: QList getBoardList(); QList getBoardListForDeviceIp(QString); - void updateStatus(QString device, int objectId, QScadaObjectStatus status); - void updateStatus(QStringList device, QList objectId, QList status); - void setEditingMode(bool); signals: @@ -47,7 +44,6 @@ private slots: void updateObjectInfoDialog(QScadaObject *); void deleteObject(QScadaObjectInfo *); void updateSavedObject(QScadaObjectInfo *); - void updateStatus(); void objectDoubleClickedHandler(QScadaObject*); protected: diff --git a/QScadaEntity/qscadaconnecteddeviceinfo.cpp b/QScadaEntity/qscadaconnecteddeviceinfo.cpp index 09b2ec8..f302475 100644 --- a/QScadaEntity/qscadaconnecteddeviceinfo.cpp +++ b/QScadaEntity/qscadaconnecteddeviceinfo.cpp @@ -82,7 +82,6 @@ void QConnectedDeviceInfo::initFromXml(const QByteArray &xmlData) { QScadaDeviceConfig *lDeviceConfig = nullptr; QScadaBoardInfo *lBoard = nullptr; QScadaObjectInfo *lObjectInfo = nullptr; - QScadaObjectInfoAxis lAxis; while (!lXmlStreamReader.atEnd() && !lXmlStreamReader.hasError()) { QXmlStreamReader::TokenType tokenType = lXmlStreamReader.readNext(); @@ -156,19 +155,6 @@ void QConnectedDeviceInfo::initFromXml(const QByteArray &xmlData) { lXmlStreamReader.readElementText().toInt()); lObjectInfo->setGeometry(lRect); - } else if (lXmlStreamReader.name() == tag_axis_enabled) { - lObjectInfo->setAxiesEnabled((bool)lXmlStreamReader.readElementText().toInt());//----------------- - } else if (lXmlStreamReader.name() == tag_axis_position) { - lObjectInfo->setAxisPosition((QScadaObjectAxisPosition)lXmlStreamReader.readElementText().toInt());//new - } else if (lXmlStreamReader.name() == tag_axis_x) { - lAxis.setX((QScadaObjectInfoAxisDirrection)lXmlStreamReader.readElementText().toInt());//----------- - lObjectInfo->setAxis(lAxis); - } else if (lXmlStreamReader.name() == tag_axis_y) { - lAxis.setY((QScadaObjectInfoAxisDirrection)lXmlStreamReader.readElementText().toInt()); - lObjectInfo->setAxis(lAxis); - } else if (lXmlStreamReader.name() == tag_axis_z) { - lAxis.setZ((QScadaObjectInfoAxisDirrection)lXmlStreamReader.readElementText().toInt()); - lObjectInfo->setAxis(lAxis); } else if (lXmlStreamReader.name() == order_level) { lObjectInfo->setOrderLevel(lXmlStreamReader.readElementText().toInt()); } @@ -243,11 +229,6 @@ QString QConnectedDeviceInfo::XMLFromDeviceInfo(QList deviceLi rDevices += i.formTagValue(tag_geometry_y, QString::number(object->info()->geometry().y()), true, 4); rDevices += i.formTagValue(tag_geometry_width, QString::number(object->info()->geometry().width()), true, 4); rDevices += i.formTagValue(tag_geometry_height, QString::number(object->info()->geometry().height()), true, 4); - rDevices += i.formTagValue(tag_axis_enabled, QString::number(object->info()->axiesEnabled()), true, 4); - rDevices += i.formTagValue(tag_axis_position, QString::number(object->info()->axisPosition()), true, 4); - rDevices += i.formTagValue(tag_axis_x, QString::number(object->info()->axis().getX()), true, 4); - rDevices += i.formTagValue(tag_axis_y, QString::number(object->info()->axis().getY()), true, 4); - rDevices += i.formTagValue(tag_axis_z, QString::number(object->info()->axis().getZ()), true, 4); rDevices += i.formTagValue(order_level, QString::number(object->info()->orderLevel()), true, 4); rDevices += i.formTag(tag_object, true, true, 3);//"\t\t\t\n"; } diff --git a/QScadaObject/qscadaobject.cpp b/QScadaObject/qscadaobject.cpp index 14465b6..c0ed94c 100644 --- a/QScadaObject/qscadaobject.cpp +++ b/QScadaObject/qscadaobject.cpp @@ -13,8 +13,7 @@ QScadaObject::QScadaObject(QWidget *parent) : QWidget(parent), mInfo{new QScadaObjectInfo(this)}, - mEffect{new QGraphicsDropShadowEffect}, - mStatus{QObjectStatusNone} + mEffect{new QGraphicsDropShadowEffect} { this->initUI(); } @@ -22,8 +21,7 @@ QScadaObject::QScadaObject(QWidget *parent) : QScadaObject::QScadaObject(QScadaObjectInfo *info, QWidget *parent): QWidget(parent), mInfo{new QScadaObjectInfo(info)}, - mEffect{new QGraphicsDropShadowEffect}, - mStatus{QObjectStatusNone} + mEffect{new QGraphicsDropShadowEffect} { this->initUI(); } @@ -120,7 +118,6 @@ void QScadaObject::mouseDoubleClickEvent(QMouseEvent *e) void QScadaObject::paintEvent(QPaintEvent *e) { QPainter lPainter(this); - QPixmap lMarkerPixmap(info()->imageName(mStatus)); QPixmap lBackgroundPixmap(info()->backGroundImage()); QPen lLinepen(Qt::black); lLinepen.setCapStyle(Qt::RoundCap); @@ -155,26 +152,6 @@ void QScadaObject::paintEvent(QPaintEvent *e) QWidget::paintEvent(e); } -qreal QScadaObject::value() const -{ - return mValue; -} - -void QScadaObject::setValue(const qreal &value) -{ - mValue = value; -} - -QScadaObjectStatus QScadaObject::status() const -{ - return mStatus; -} - -void QScadaObject::setStatus(const QScadaObjectStatus &status) -{ - mStatus = status; -} - bool QScadaObject::isEditable() const { return mIsEditable; diff --git a/QScadaObject/qscadaobject.h b/QScadaObject/qscadaobject.h index c0b416a..76c8890 100644 --- a/QScadaObject/qscadaobject.h +++ b/QScadaObject/qscadaobject.h @@ -31,12 +31,8 @@ public: void setIsEditable(bool isEditable); virtual void update(); - - QScadaObjectStatus status() const; - void setStatus(const QScadaObjectStatus &status); - - qreal value() const; - void setValue(const qreal &value); + virtual void setProperty(char*, QVariant) = 0; + virtual void updateValue(QVariant) = 0; private: QScadaObjectAction action() const; @@ -72,10 +68,6 @@ private: QScadaObjectInfo *mInfo; QGraphicsDropShadowEffect* mEffect; bool mSelected; - - qreal mValue; - - QScadaObjectStatus mStatus;// default is VObjectStatusNone }; #endif // VOBJECT_H diff --git a/QScadaObject/qscadaobjectinfo.cpp b/QScadaObject/qscadaobjectinfo.cpp index 468f5a7..80418cd 100644 --- a/QScadaObject/qscadaobjectinfo.cpp +++ b/QScadaObject/qscadaobjectinfo.cpp @@ -6,8 +6,6 @@ QScadaObjectInfo::QScadaObjectInfo(QObject *parent) : QObject(parent), mIsDynamic{false}, mTitle{"Noname"}, - mAxiesEnabled{false}, - mAxisPosition{QObjectAxisPositionLeft}, mOrderLevel{0}, mShowBackgroundImage{false}, mShowBackground{true}, @@ -24,10 +22,7 @@ QScadaObjectInfo::QScadaObjectInfo(QScadaObjectInfo *o): mGeometry{o->geometry()}, mId{o->id()}, mTitle{o->title()}, - mAxiesEnabled{o->axiesEnabled()}, - mAxisPosition{o->axisPosition()}, mOrderLevel{o->orderLevel()}, - mImageName{o->infoImage()}, mBackGroundImage{o->backGroundImage()}, mShowBackgroundImage{o->showBackgroundImage()}, mShowBackground{o->showBackground()}, @@ -59,26 +54,6 @@ void QScadaObjectInfo::setTitle(const QString &title) mTitle = title; } -QScadaObjectInfoAxis QScadaObjectInfo::axis() -{ - return mAxis; -} - -void QScadaObjectInfo::setAxis(const QScadaObjectInfoAxis &axis) -{ - mAxis = axis; -} - -bool QScadaObjectInfo::axiesEnabled() const -{ - return mAxiesEnabled; -} - -void QScadaObjectInfo::setAxiesEnabled(bool axiesEnabled) -{ - mAxiesEnabled = axiesEnabled; -} - QRect QScadaObjectInfo::geometry() const { return mGeometry; @@ -102,21 +77,6 @@ void QScadaObjectInfo::setIsDynamic(bool isDynamic) emit dynamicStatusChanged(this); } -QScadaObjectInfoImage QScadaObjectInfo::infoImage() -{ - return mImageName; -} - -QString QScadaObjectInfo::imageName(QScadaObjectStatus status) -{ - return mImageName.getImageNameForStatus(status); -} - -void QScadaObjectInfo::setImageName(QString imageName, QScadaObjectStatus status) -{ - mImageName.setImageNameForState(imageName, status); -} - bool QScadaObjectInfo::showBackground() const { return mShowBackground; @@ -137,16 +97,6 @@ void QScadaObjectInfo::setShowMarkers(bool showMarkers) mShowMarkers = showMarkers; } -QScadaObjectAxisPosition QScadaObjectInfo::axisPosition() const -{ - return mAxisPosition; -} - -void QScadaObjectInfo::setAxisPosition(const QScadaObjectAxisPosition &axisPosition) -{ - mAxisPosition = axisPosition; -} - QString QScadaObjectInfo::backGroundImage() const { return mBackGroundImage; @@ -230,44 +180,12 @@ void QScadaObjectInfo::setTo(const qreal &to) mTo = to; } -//implementations for VObjectInfoImage - -QString QScadaObjectInfoImage::getImageNameForStatus(QScadaObjectStatus status) +QMLInfo QScadaObjectInfo::qMLInfo() const { - QString rValue; - - switch(status) { - case QObjectStatusNone: - rValue = normal; - break; - case QObjectStatusGreen: - rValue = green; - break; - case QObjectStatusYellow: - rValue = yellow; - break; - case QObjectStatusRed: - rValue = red; - break; - } - - return rValue; + return mQMLInfo; } -void QScadaObjectInfoImage::setImageNameForState(QString name, QScadaObjectStatus status) +void QScadaObjectInfo::setQMLInfo(const QMLInfo &qMLInfo) { - switch(status) { - case QObjectStatusNone: - normal = name; - break; - case QObjectStatusGreen: - green = name; - break; - case QObjectStatusYellow: - yellow = name; - break; - case QObjectStatusRed: - red = name; - break; - } + mQMLInfo = qMLInfo; } diff --git a/QScadaObject/qscadaobjectinfo.h b/QScadaObject/qscadaobjectinfo.h index 4e5d85e..6962e97 100644 --- a/QScadaObject/qscadaobjectinfo.h +++ b/QScadaObject/qscadaobjectinfo.h @@ -1,7 +1,7 @@ #ifndef VOBJECTINFO_H #define VOBJECTINFO_H -#include "qscadaobjectinfoaxis.h" +#include "../qscadaconfig.h" #include #include @@ -14,29 +14,6 @@ typedef enum { QObjectActionResize } QScadaObjectAction; -typedef enum { - QObjectStatusNone, - QObjectStatusRed, - QObjectStatusYellow, - QObjectStatusGreen -} QScadaObjectStatus; - - -typedef enum { - QObjectAxisPositionLeft, - QObjectAxisPositionRight -} QScadaObjectAxisPosition; - -struct QScadaObjectInfoImage { - QString normal = ":/com/indeema/QSimpleScada/resources/green_marker.png"; - QString green = ":/com/indeema/QSimpleScada/resources/green_marker.png"; - QString yellow = ":/com/indeema/QSimpleScada/resources/yellow_marker.png"; - QString red = ":/com/indeema/QSimpleScada/resources/red_marker.png"; - - QString getImageNameForStatus(QScadaObjectStatus); - void setImageNameForState(QString, QScadaObjectStatus); -}; - typedef enum { QScadaObjectTypeWidget, QScadaObjectTypeQML @@ -46,7 +23,7 @@ class QScadaObjectInfo : public QObject { Q_OBJECT public: - explicit QScadaObjectInfo(QObject *parent = 0); + explicit QScadaObjectInfo(QObject *parent = nullptr); QScadaObjectInfo(QScadaObjectInfo*); int id() const; @@ -55,31 +32,18 @@ public: QString title() const; void setTitle(const QString &title); - QScadaObjectInfoAxis axis(); - void setAxis(const QScadaObjectInfoAxis &axis); - - bool axiesEnabled() const; - void setAxiesEnabled(bool axiesEnabled); - QRect geometry() const; void setGeometry(const QRect &geometry); bool isDynamic() const; void setIsDynamic(bool isDynamic); - QScadaObjectInfoImage infoImage(); - QString imageName(QScadaObjectStatus); - void setImageName(QString imageName, QScadaObjectStatus); - bool showBackground() const; void setShowBackground(bool showBackground); bool showMarkers() const; void setShowMarkers(bool showMarkers); - QScadaObjectAxisPosition axisPosition() const; - void setAxisPosition(const QScadaObjectAxisPosition &axisPosition); - QString backGroundImage() const; void setBackGroundImage(const QString &backGroundImage); @@ -103,6 +67,9 @@ public: qreal to() const; void setTo(const qreal &to); + QMLInfo qMLInfo() const; + void setQMLInfo(const QMLInfo &qMLInfo); + signals: void infoChanged(QScadaObjectInfo *info); void geometryChanged(QScadaObjectInfo *info); @@ -113,12 +80,8 @@ private: QRect mGeometry; int mId; QString mTitle; - QScadaObjectInfoAxis mAxis; - bool mAxiesEnabled; - QScadaObjectAxisPosition mAxisPosition; int mOrderLevel; - QScadaObjectInfoImage mImageName; QString mBackGroundImage; bool mShowBackgroundImage; bool mShowBackground; @@ -127,6 +90,8 @@ private: qreal mFrom; qreal mTo; + QMLInfo mQMLInfo; + QString mUIResourcePath; QScadaObjectType mType; }; diff --git a/QScadaObject/qscadaobjectinfoaxis.cpp b/QScadaObject/qscadaobjectinfoaxis.cpp deleted file mode 100644 index 0bb4979..0000000 --- a/QScadaObject/qscadaobjectinfoaxis.cpp +++ /dev/null @@ -1,119 +0,0 @@ -#include "qscadaobjectinfoaxis.h" - -QScadaObjectInfoAxis::QScadaObjectInfoAxis() -{ - mX = VObjectInfoAxisDirrectionUpside; - mY = VObjectInfoAxisDirrectionAside; - mZ = VObjectInfoAxisDirrectionInside; -} - -QString QScadaObjectInfoAxis::stringFromAxis(QScadaObjectInfoAxisDirrection dirr) -{ - switch (dirr) { - case VObjectInfoAxisDirrectionUpside: - return AXIS_UP; - case VObjectInfoAxisDirrectionAside: - return AXIS_ASIDE; - case VObjectInfoAxisDirrectionInside: - return AXIS_INSIDE; - case VObjectInfoAxisDirrectionUndefined: - return AXIS_UNDEFINED; - } -} - -QScadaObjectInfoAxisDirrection QScadaObjectInfoAxis::axisFromString(QString string) -{ - if (string == QString(AXIS_UP)) { - return VObjectInfoAxisDirrectionUpside; - } else if (string == AXIS_ASIDE) { - return VObjectInfoAxisDirrectionAside; - } else if (string == AXIS_INSIDE) { - return VObjectInfoAxisDirrectionInside; - } else { - return VObjectInfoAxisDirrectionUndefined; - } -} - -QString QScadaObjectInfoAxis::upsideAxisString() -{ - if (getX() == VObjectInfoAxisDirrectionUpside) { - return ZXIS_X; - } else if (getY() == VObjectInfoAxisDirrectionUpside) { - return ZXIS_Y; - } else if (getZ() == VObjectInfoAxisDirrectionUpside) { - return ZXIS_Z; - } else { - return ZXIS_UNDEFINED; - } -} - -QString QScadaObjectInfoAxis::asideAxisString() -{ - if (getX() == VObjectInfoAxisDirrectionAside) { - return ZXIS_X; - } else if (getY() == VObjectInfoAxisDirrectionAside) { - return ZXIS_Y; - } else if (getZ() == VObjectInfoAxisDirrectionAside) { - return ZXIS_Z; - } else { - return ZXIS_UNDEFINED; - } -} - -QString QScadaObjectInfoAxis::insideAxisString() -{ - if (getX() == VObjectInfoAxisDirrectionInside) { - return ZXIS_X; - } else if (getY() == VObjectInfoAxisDirrectionInside) { - return ZXIS_Y; - } else if (getZ() == VObjectInfoAxisDirrectionInside) { - return ZXIS_Z; - } else { - return ZXIS_UNDEFINED; - } -} - -QString QScadaObjectInfoAxis::getStringX() -{ - return stringFromAxis(getX()); -} - -QScadaObjectInfoAxisDirrection QScadaObjectInfoAxis::getX() const -{ - return mX; -} - -void QScadaObjectInfoAxis::setX(const QScadaObjectInfoAxisDirrection &value) -{ - mX = value; -} - -QString QScadaObjectInfoAxis::getStringY() -{ - return stringFromAxis(getY()); -} - -QScadaObjectInfoAxisDirrection QScadaObjectInfoAxis::getY() const -{ - return mY; -} - -void QScadaObjectInfoAxis::setY(const QScadaObjectInfoAxisDirrection &value) -{ - mY = value; -} - -QString QScadaObjectInfoAxis::getStringZ() -{ - return stringFromAxis(getZ()); -} - -QScadaObjectInfoAxisDirrection QScadaObjectInfoAxis::getZ() const -{ - return mZ; -} - -void QScadaObjectInfoAxis::setZ(const QScadaObjectInfoAxisDirrection &value) -{ - mZ = value; -} diff --git a/QScadaObject/qscadaobjectinfoaxis.h b/QScadaObject/qscadaobjectinfoaxis.h deleted file mode 100644 index 3f2aaf0..0000000 --- a/QScadaObject/qscadaobjectinfoaxis.h +++ /dev/null @@ -1,54 +0,0 @@ -#ifndef VOBJECTINFOAXIS_H -#define VOBJECTINFOAXIS_H - -#include - -#define AXIS_UP "Upside" -#define AXIS_ASIDE "Aside" -#define AXIS_INSIDE "Inside" -#define AXIS_UNDEFINED "UNDEFINED" - -#define ZXIS_X "x" -#define ZXIS_Y "y" -#define ZXIS_Z "z" -#define ZXIS_UNDEFINED "-1" - -typedef enum { - VObjectInfoAxisDirrectionUndefined, - VObjectInfoAxisDirrectionUpside, - VObjectInfoAxisDirrectionAside, - VObjectInfoAxisDirrectionInside -} QScadaObjectInfoAxisDirrection; - -class QScadaObjectInfoAxis -{ -public: - explicit QScadaObjectInfoAxis(); - - QString stringFromAxis(QScadaObjectInfoAxisDirrection dirr); - - QScadaObjectInfoAxisDirrection axisFromString(QString string); - - QString upsideAxisString(); - QString asideAxisString(); - QString insideAxisString(); - - QString getStringX(); - QScadaObjectInfoAxisDirrection getX() const; - void setX(const QScadaObjectInfoAxisDirrection &value); - - QString getStringY(); - QScadaObjectInfoAxisDirrection getY() const; - void setY(const QScadaObjectInfoAxisDirrection &value); - - QString getStringZ(); - QScadaObjectInfoAxisDirrection getZ() const; - void setZ(const QScadaObjectInfoAxisDirrection &value); - -private: - QScadaObjectInfoAxisDirrection mX; - QScadaObjectInfoAxisDirrection mY; - QScadaObjectInfoAxisDirrection mZ; -}; - -#endif // VOBJECTINFOAXIS_H diff --git a/QScadaObject/qscadaobjectinfodialog.cpp b/QScadaObject/qscadaobjectinfodialog.cpp index 43f4d7f..53e4f49 100644 --- a/QScadaObject/qscadaobjectinfodialog.cpp +++ b/QScadaObject/qscadaobjectinfodialog.cpp @@ -11,8 +11,6 @@ QScadaObjectInfoDialog::QScadaObjectInfoDialog(QWidget *parent) : mLatestObject{nullptr} { ui->setupUi(this); - - initAxiesList(); } QScadaObjectInfoDialog::~QScadaObjectInfoDialog() @@ -39,23 +37,12 @@ void QScadaObjectInfoDialog::updateWithObjectInfo(QScadaObjectInfo *info) mMarkerImage = mLatestObject->backGroundImage(); - //axies - QScadaObjectInfoAxis lAxis = mLatestObject->axis(); - enableAxis(info->axiesEnabled()); - ui->comboBoxAxisPosition->setCurrentText(info->axisPosition() == QObjectAxisPositionLeft? "Left" : "Right"); - ui->comboBoxX->setCurrentText(lAxis.getStringX()); - ui->comboBoxY->setCurrentText(lAxis.getStringY()); - ui->comboBoxZ->setCurrentText(lAxis.getStringZ()); - //geometry geometryUpdated(mLatestObject); } else { //clear title ui->lineEditName->clear(); - //clear axies - enableAxis(false); - //geometry ui->spinBoxX->clear(); ui->spinBoxY->clear(); @@ -64,33 +51,6 @@ void QScadaObjectInfoDialog::updateWithObjectInfo(QScadaObjectInfo *info) } } -void QScadaObjectInfoDialog::enableAxis(bool enable) -{ - ui->checkBoxAxis->setChecked(enable); - - ui->comboBoxAxisPosition->setEnabled(enable); - - ui->comboBoxX->setEnabled(enable); - ui->comboBoxY->setEnabled(enable); - ui->comboBoxZ->setEnabled(enable); -} - -void QScadaObjectInfoDialog::initAxiesList() -{ - ui->comboBoxX->clear(); - ui->comboBoxY->clear(); - ui->comboBoxZ->clear(); - - QStringList lList; - lList.append(AXIS_UP); - lList.append(AXIS_ASIDE); - lList.append(AXIS_INSIDE); - - ui->comboBoxX->addItems(lList); - ui->comboBoxY->addItems(lList); - ui->comboBoxZ->addItems(lList); -} - void QScadaObjectInfoDialog::geometryUpdated(QScadaObjectInfo *info) { ui->spinBoxX->setValue(info->geometry().x()); @@ -119,14 +79,6 @@ void QScadaObjectInfoDialog::on_pushButton_2_pressed() mLatestObject->setShowBackgroundImage(ui->checkBoxShowBackGroundImage->isChecked()); //axies - mLatestObject->setAxiesEnabled(ui->checkBoxAxis->isChecked());//status - mLatestObject->setAxisPosition(ui->comboBoxAxisPosition->currentText() == "Left" ? QObjectAxisPositionLeft : QObjectAxisPositionRight); - QScadaObjectInfoAxis lAxis; - lAxis.setX(lAxis.axisFromString(ui->comboBoxX->currentText())); - lAxis.setY(lAxis.axisFromString(ui->comboBoxY->currentText())); - lAxis.setZ(lAxis.axisFromString(ui->comboBoxZ->currentText())); - mLatestObject->setAxis(lAxis); - if (!mMarkerImage.isEmpty()) { mLatestObject->setBackGroundImage(mMarkerImage); } @@ -158,8 +110,6 @@ void QScadaObjectInfoDialog::on_checkBoxAxis_stateChanged(int arg1) break; } } - - enableAxis(lEnabled); } void QScadaObjectInfoDialog::on_pushButton_3_clicked() diff --git a/QScadaObject/qscadaobjectinfodialog.h b/QScadaObject/qscadaobjectinfodialog.h index 454559a..698f1a6 100644 --- a/QScadaObject/qscadaobjectinfodialog.h +++ b/QScadaObject/qscadaobjectinfodialog.h @@ -14,16 +14,12 @@ class QScadaObjectInfoDialog : public QWidget Q_OBJECT public: - explicit QScadaObjectInfoDialog(QWidget *parent = 0); + explicit QScadaObjectInfoDialog(QWidget *parent = nullptr); ~QScadaObjectInfoDialog(); public slots: void updateWithObjectInfo(QScadaObjectInfo *info); -private: - void enableAxis(bool); - void initAxiesList(); - private slots: void geometryUpdated(QScadaObjectInfo*); void on_pushButton_2_pressed(); diff --git a/QScadaObject/qscadaobjectqml.cpp b/QScadaObject/qscadaobjectqml.cpp index 2ec4f5d..60b1f46 100644 --- a/QScadaObject/qscadaobjectqml.cpp +++ b/QScadaObject/qscadaobjectqml.cpp @@ -10,34 +10,29 @@ const char *QScadaObjectQML::tagFrom = "from"; const char *QScadaObjectQML::tagTo = "to"; const char *QScadaObjectQML::tagValue = "value"; - -QScadaObjectQML::QScadaObjectQML(QScadaObjectInfo *info, QWidget *parent) : QScadaObject(info, parent) +QScadaObjectQML::QScadaObjectQML(QScadaObjectInfo *info, QWidget *parent) : + QScadaObject(info, parent), + mQMLObject{nullptr} { - - QQuickWidget *lQmlWidget = new QQuickWidget(); - lQmlWidget->setClearColor(Qt::transparent); - lQmlWidget->setSource(QUrl::fromLocalFile(info->uiResourcePath())); - lQmlWidget->show(); - - mQMLObject = static_cast(lQmlWidget->rootObject()); - - QVBoxLayout *lLayout = new QVBoxLayout(this); - lLayout->setContentsMargins(0, 0, 0, 0); - lLayout->addWidget(lQmlWidget); - - this->updateQMLGeometry(); + initFromQML(info); } -qreal QScadaObjectQML::value() const +void QScadaObjectQML::setProperty(QString key, QVariant value) { - return QScadaObject::value(); + setProperty(key.toLocal8Bit().data(), value); } -void QScadaObjectQML::setValue(const qreal &value) +void QScadaObjectQML::setProperty(char *key, QVariant value) { - QScadaObject::setValue(value); + mQMLObject->setProperty(key, value); +} - mQMLObject->setProperty(QScadaObjectQML::tagValue, QVariant(value)); +void QScadaObjectQML::updateValue(QVariant value) +{ + QVariant rReturn; + QMetaObject::invokeMethod(mQMLObject, "update", + Q_RETURN_ARG(QVariant, rReturn), + Q_ARG(QVariant, value)); } void QScadaObjectQML::update() @@ -76,7 +71,31 @@ void QScadaObjectQML::setTo(qreal to) mQMLObject->setProperty(QScadaObjectQML::tagTo, QVariant(to)); } +void QScadaObjectQML::initFromQML(QScadaObjectInfo *info) +{ + QQuickWidget *lQmlWidget = new QQuickWidget(); + lQmlWidget->setClearColor(Qt::transparent); + lQmlWidget->setSource(QUrl::fromLocalFile(info->uiResourcePath())); + lQmlWidget->show(); + + mQMLObject = static_cast(lQmlWidget->rootObject()); + + QVBoxLayout *lLayout = new QVBoxLayout(this); + lLayout->setContentsMargins(0, 0, 0, 0); + lLayout->addWidget(lQmlWidget); + + this->updateQMLGeometry(); + + mMetaData = mQMLObject->property("metaData").toStringList(); + qDebug() << mMetaData; +} + void QScadaObjectQML::dynamicStatusChanged(QScadaObjectInfo *) { } + +QStringList QScadaObjectQML::metaData() const +{ + return mMetaData; +} diff --git a/QScadaObject/qscadaobjectqml.h b/QScadaObject/qscadaobjectqml.h index f17489b..204a0d0 100644 --- a/QScadaObject/qscadaobjectqml.h +++ b/QScadaObject/qscadaobjectqml.h @@ -16,14 +16,17 @@ public: explicit QScadaObjectQML(QScadaObjectInfo *,QWidget *parent = nullptr); - qreal value() const; - void setValue(const qreal &value); + void setProperty(QString, QVariant); + void setProperty(char*, QVariant); + void updateValue(QVariant); void update(); QQuickItem *QMLObject() const; void setQMLObject(QQuickItem *qMLObject); + QStringList metaData() const; + private: void resize(int, int); void updateQMLGeometry(); @@ -32,10 +35,12 @@ private: void setTo(qreal); protected slots: + void initFromQML(QScadaObjectInfo *info); void dynamicStatusChanged(QScadaObjectInfo*); private: QQuickItem *mQMLObject; + QStringList mMetaData; }; #endif // QSCADAOBJECTQML_H diff --git a/QScadaWidgets/qledindicator.cpp b/QScadaWidgets/qledindicator.cpp deleted file mode 100644 index 30536d8..0000000 --- a/QScadaWidgets/qledindicator.cpp +++ /dev/null @@ -1,134 +0,0 @@ -#include "qledindicator.h" - -#include - -QLedIndicator::QLedIndicator(QScadaObjectInfo *info, QWidget *parent): QScadaObject(info, parent) -{ - -} - -void QLedIndicator::update() -{ - QScadaObject::update(); -} - -void QLedIndicator::paintEvent(QPaintEvent *e) -{ - QScadaObject::paintEvent(e); - - QPainter lPainter(this); - QPixmap lMarkerPixmap(info()->imageName(this->status())); - QPixmap lBackgroundPixmap(info()->backGroundImage()); - QPen lLinepen(Qt::black); - lLinepen.setCapStyle(Qt::RoundCap); - lPainter.setRenderHint(QPainter::Antialiasing,true); - lPainter.setPen(lLinepen); - - //draw object title - lPainter.drawText(QPoint(10, 20), this->info()->title()); - int lX; - int lY; - - if (info()->axiesEnabled()) { - //draw axies - - switch(info()->axisPosition()) { - case QObjectAxisPositionLeft: - lX = 12; - break; - case QObjectAxisPositionRight: - lX = geometry().width() - 30; - break; - } - lY = geometry().height() - 10; - int lWidth = 10; - int lInner = 4; - - lPainter.drawEllipse(lX-lInner/2, - lY-lInner/2, - lInner, - lInner); - lPainter.drawText(QPoint(lX - 10, geometry().height()-2), info()->axis().insideAxisString());//inside position - - lPainter.drawLine(lX, lY, - lX, lY -lWidth); - lPainter.drawLine(lX, lY -lWidth-1, - lX-3, lY -lWidth+3); - lPainter.drawLine(lX, lY -lWidth-1, - lX+3, lY -lWidth+3); - lPainter.drawText(QPoint(lX - 3, lY -lWidth-3), info()->axis().upsideAxisString());//up possibtion - - lPainter.drawLine(lX, lY, - lX + lWidth, lY); - lPainter.drawLine(lX + lWidth+1, lY, - lX + lWidth-3, lY-3); - lPainter.drawLine(lX + lWidth+1, lY, - lX + lWidth-3, lY+3); - lPainter.drawText(QPoint(lX + lWidth + 3, lY+3), info()->axis().asideAxisString());//aside position - } - - if (info()->showMarkers()) { - QSize lSize = lMarkerPixmap.size(); - lPainter.drawPixmap(QRect((width() - lSize.width()) /2, - (height() - lSize.height()) / 2, - lSize.width(), - lSize.height()), - lMarkerPixmap); - } - - if (info()->showBackgroundImage()) { - lPainter.drawPixmap(QRect(0, - 0, - width(), - height()), - lBackgroundPixmap.scaled(width(), height(), - Qt::KeepAspectRatioByExpanding)); - } - - if (info()->isDynamic()) { - switch(this->status()) { - case QObjectStatusNone: - lLinepen.setColor(Qt::darkGray); - break; - case QObjectStatusRed: - lLinepen.setColor(QColor(171, 27, 227, 255)); - break; - case QObjectStatusYellow: - lLinepen.setColor(QColor(228, 221, 29, 255)); - break; - case QObjectStatusGreen: - lLinepen.setColor(QColor(14, 121, 7, 255)); - break; - } - } else { - lLinepen.setColor(Qt::black); - } - - QWidget::paintEvent(e); -} - -void QLedIndicator::dynamicStatusChanged(QScadaObjectInfo*) -{ - if (info()->isDynamic() && info()->type() == QScadaObjectTypeWidget) { - switch(status()) { - case QObjectStatusNone: - setPalette(QPalette(Qt::lightGray)); - break; - case QObjectStatusRed: - setPalette(QPalette(Qt::red)); - break; - case QObjectStatusYellow: - setPalette(QPalette(Qt::yellow)); - break; - case QObjectStatusGreen: - setPalette(QPalette(Qt::green)); - break; - } - } else { - setPalette(QPalette(Qt::white)); - } - - if (!info()->showBackground()) { - setPalette(QPalette(Qt::transparent)); - } -} diff --git a/QScadaWidgets/qledindicator.h b/QScadaWidgets/qledindicator.h deleted file mode 100644 index 05f2c43..0000000 --- a/QScadaWidgets/qledindicator.h +++ /dev/null @@ -1,21 +0,0 @@ -#ifndef QLEDINDICATOR_H -#define QLEDINDICATOR_H - -#include "../QScadaObject/qscadaobject.h" -#include "../QScadaObject/qscadaobjectinfo.h" - -class QLedIndicator : public QScadaObject -{ -public: - explicit QLedIndicator(QScadaObjectInfo *, QWidget *parent = nullptr); - - void update(); - -protected: - void paintEvent(QPaintEvent *e); - -protected slots: - void dynamicStatusChanged(QScadaObjectInfo*); -}; - -#endif // QLEDINDICATOR_H diff --git a/QScadaWidgets/qwaterlevel.cpp b/QScadaWidgets/qwaterlevel.cpp deleted file mode 100644 index 266eeb2..0000000 --- a/QScadaWidgets/qwaterlevel.cpp +++ /dev/null @@ -1,6 +0,0 @@ -#include "qwaterlevel.h" - -QWaterLevel::QWaterLevel(QScadaObjectInfo *info, QWidget *parent) : QScadaObjectQML(info, parent) -{ - -} diff --git a/QScadaWidgets/qwaterlevel.h b/QScadaWidgets/qwaterlevel.h deleted file mode 100644 index f4c621f..0000000 --- a/QScadaWidgets/qwaterlevel.h +++ /dev/null @@ -1,12 +0,0 @@ -#ifndef QWATERLEVEL_H -#define QWATERLEVEL_H - -#include "../QScadaObject/qscadaobjectqml.h" - -class QWaterLevel : public QScadaObjectQML -{ -public: - explicit QWaterLevel(QScadaObjectInfo *, QWidget *parent = nullptr); -}; - -#endif // QWATERLEVEL_H diff --git a/com_indeema_QSimpleScada.pri b/com_indeema_QSimpleScada.pri index 9f696eb..cb48c41 100644 --- a/com_indeema_QSimpleScada.pri +++ b/com_indeema_QSimpleScada.pri @@ -8,22 +8,18 @@ SOURCES += \ $$PWD/QScadaObject/qscadaobject.cpp \ $$PWD/QScadaObject/qscadaobjectinfo.cpp \ $$PWD/QScadaObject/qscadaobjectinfodialog.cpp \ - $$PWD/QScadaObject/qscadaobjectinfoaxis.cpp \ $$PWD/QScadaBoard/qscadaboard.cpp \ $$PWD/QScadaBoard/qscadaboardcontroller.cpp \ $$PWD/QScadaBoard/qscadaboardmanager.cpp \ $$PWD/QScadaEntity/qscadaconnecteddeviceinfo.cpp \ $$PWD/QScadaEntity/qscadabaseprefentity.cpp \ $$PWD/QScadaDevice/qscadadeviceinfo.cpp \ - $$PWD/QScadaObject/qscadaobjectqml.cpp \ - $$PWD/QScadaWidgets/qledindicator.cpp \ - $$PWD/QScadaWidgets/qwaterlevel.cpp + $$PWD/QScadaObject/qscadaobjectqml.cpp HEADERS += \ $$PWD/QScadaObject/qscadaobject.h \ $$PWD/QScadaObject/qscadaobjectinfo.h \ $$PWD/QScadaObject/qscadaobjectinfodialog.h \ - $$PWD/QScadaObject/qscadaobjectinfoaxis.h \ $$PWD/QScadaBoard/qscadaboard.h \ $$PWD/QScadaBoard/qscadaboardcontroller.h \ $$PWD/QScadaBoard/qscadaboardmanager.h \ @@ -32,8 +28,6 @@ HEADERS += \ $$PWD/QScadaEntity/qscadabaseprefentity.h \ $$PWD/QScadaDevice/qscadadeviceinfo.h \ $$PWD/QScadaObject/qscadaobjectqml.h \ - $$PWD/QScadaWidgets/qledindicator.h \ - $$PWD/QScadaWidgets/qwaterlevel.h \ $$PWD/qscadaconfig.h FORMS += $$PWD/QScadaObject/qscadaobjectinfodialog.ui diff --git a/qscadaconfig.h b/qscadaconfig.h index 6fa4088..4d9f7e7 100644 --- a/qscadaconfig.h +++ b/qscadaconfig.h @@ -8,10 +8,20 @@ #define DEFAULT_QML_PATH ":/com/indeema/eeiot/EEIoT/" +struct QMLInfo { + QString groupTitle = ""; + QString groupPath = ""; +}; + struct QMLWidgetsConfig { - QString title = ""; + QMLInfo info; bool isValid = false; + QStringList widgets() { + return mQMLWidgets; + } + + QMLWidgetsConfig(){} QMLWidgetsConfig(QString path){ if (!path.isEmpty()) { QDir directory(path); @@ -19,25 +29,19 @@ struct QMLWidgetsConfig { // Load all files with the *.PNG extension // (you can modify this to suit your needs. QStringList lQMLList = directory.entryList(QStringList("*.qml")); - for (QString file : lQMLList) { - qDebug() << file; - } if (lQMLList.count() > 0) { mQMLWidgets = lQMLList; + info.groupPath = path; + QString lTmpTitle = path.split('/').last(); //let secure from having / at end or not having if (lTmpTitle.isEmpty()) { - title = path.split('/').at(path.split('/').count()-2); + info.groupTitle = path.split('/').at(path.split('/').count()-2); } else { - title = lTmpTitle; + info.groupTitle = lTmpTitle; } } - -// QDirIterator it("path", QDirIterator::Subdirectories); -// while (it.hasNext()) { -// qDebug() << it.next(); -// } } } @@ -66,12 +70,37 @@ class QMLConfig } void appendQMLPath(QString path) { - mQMLPaths.append(path); - mQMLWidgets.append(QMLWidgetsConfig(path)); + QMLWidgetsConfig lConf = QMLWidgetsConfig(path); + + if (lConf.isValid) { + //check if QML group is unique. + //if it's already in list, it will be replaced with new + for (int i=0; i < mQMLWidgets.count(); i++) { + QMLWidgetsConfig tmpConf = mQMLWidgets.at(i); + if (tmpConf.info.groupTitle == lConf.info.groupTitle) { + mQMLWidgets.removeAt(i); + } + } + mQMLWidgets.append(lConf); + } } + QMLWidgetsConfig qmlWidgetConfForGroup(QString qmlGroupTitle) { + QMLWidgetsConfig rConf; + + for (QMLWidgetsConfig tmpConf : mQMLWidgets) { + if (qmlGroupTitle == tmpConf.info.groupTitle) { + rConf = tmpConf; + } + } + + return rConf; + } + + QList QMLWidgets(){ + return mQMLWidgets; + } private: - QStringList mQMLPaths; QList mQMLWidgets; };