Implemented dynamic QML widget update for any UI

This commit is contained in:
vshevchyk
2019-07-19 12:24:28 +03:00
parent 77265af614
commit 35081a7ef3
21 changed files with 122 additions and 679 deletions
+13 -17
View File
@@ -2,7 +2,6 @@
#include "qscadaboardinfo.h"
#include "../QScadaObject/qscadaobjectinfo.h"
#include "../QScadaObject/qscadaobjectqml.h"
#include "../QScadaWidgets/qledindicator.h"
#include <QApplication>
#include <QPainter>
@@ -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 <QDebug>
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) {
+3 -1
View File
@@ -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<QScadaObject *> *objects() const;
-31
View File
@@ -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<QScadaBoard *> 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<int> objectId, QList<QScadaObjectStatus> 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);
-4
View File
@@ -30,9 +30,6 @@ public:
QList<QScadaBoard*> getBoardList();
QList<QScadaBoard*> getBoardListForDeviceIp(QString);
void updateStatus(QString device, int objectId, QScadaObjectStatus status);
void updateStatus(QStringList device, QList<int> objectId, QList<QScadaObjectStatus> 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:
@@ -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<QScadaDeviceInfo> 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</object>\n";
}
+2 -25
View File
@@ -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;
+2 -10
View File
@@ -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
+4 -86
View File
@@ -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;
}
+7 -42
View File
@@ -1,7 +1,7 @@
#ifndef VOBJECTINFO_H
#define VOBJECTINFO_H
#include "qscadaobjectinfoaxis.h"
#include "../qscadaconfig.h"
#include <QObject>
#include <QColor>
@@ -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;
};
-119
View File
@@ -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;
}
-54
View File
@@ -1,54 +0,0 @@
#ifndef VOBJECTINFOAXIS_H
#define VOBJECTINFOAXIS_H
#include <QString>
#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
-50
View File
@@ -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()
+1 -5
View File
@@ -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();
+39 -20
View File
@@ -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<QQuickItem*>(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<QQuickItem*>(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;
}
+7 -2
View File
@@ -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
-134
View File
@@ -1,134 +0,0 @@
#include "qledindicator.h"
#include <QPainter>
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));
}
}
-21
View File
@@ -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
-6
View File
@@ -1,6 +0,0 @@
#include "qwaterlevel.h"
QWaterLevel::QWaterLevel(QScadaObjectInfo *info, QWidget *parent) : QScadaObjectQML(info, parent)
{
}
-12
View File
@@ -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
+1 -7
View File
@@ -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
+43 -14
View File
@@ -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<QMLWidgetsConfig> QMLWidgets(){
return mQMLWidgets;
}
private:
QStringList mQMLPaths;
QList<QMLWidgetsConfig> mQMLWidgets;
};