diff --git a/KelvinDashboardGUI/DapChainNodeNetworkExplorer.cpp b/KelvinDashboardGUI/DapChainNodeNetworkExplorer.cpp index 4507c117a2399cd972a42a67ab0df7a47da8fa44..0bda4628683fd6f893406fd2711661df7a76d9ed 100644 --- a/KelvinDashboardGUI/DapChainNodeNetworkExplorer.cpp +++ b/KelvinDashboardGUI/DapChainNodeNetworkExplorer.cpp @@ -10,33 +10,35 @@ #define DEFAULT_NODE_SIZE 50 #define DEFAULT_WIDTH_LINE 3 -DapChainNodeNetworkExplorer::DapChainNodeNetworkExplorer(QQuickItem *parent) : QQuickPaintedItem(parent) +DapChainNodeNetworkExplorer::DapChainNodeNetworkExplorer(QQuickItem *parent) : + QQuickPaintedItem(parent), + m_model(nullptr), + m_colorNormal(DEFAULT_NODE_COLOR), + m_colorActivated(DEFAULT_NODE_COLOR_HOVER), + m_widthLine(DEFAULT_WIDTH_LINE), + m_sizeNode(DEFAULT_NODE_SIZE) { - setAcceptedMouseButtons(Qt::LeftButton); +// setAcceptedMouseButtons(Qt::LeftButton); setAcceptHoverEvents(true); - m_colorNormal = DEFAULT_NODE_COLOR; - m_colorActivated = DEFAULT_NODE_COLOR_HOVER; - m_sizeNode = DEFAULT_NODE_SIZE; - m_widthLine = DEFAULT_WIDTH_LINE; } -void DapChainNodeNetworkExplorer::mousePressEvent(QMouseEvent* event) -{ - QQuickPaintedItem::mousePressEvent(event); - for(auto Node = m_nodeMap.constBegin(); Node != m_nodeMap.constEnd(); Node++) - { - if(Node.value().isFocus) - { - const DapNodeData* nodeData = &Node.value(); - QString textToolTip = DESCRIPTION_NODE - .arg(Node.key()) - .arg(nodeData->Alias) - .arg(nodeData->AddressIpv4.toString()); - emit selectNode("Node description", textToolTip); - return; - } - } -} +//void DapChainNodeNetworkExplorer::mousePressEvent(QMouseEvent* event) +//{ +// QQuickPaintedItem::mousePressEvent(event); +// for(auto Node = m_nodeMap.constBegin(); Node != m_nodeMap.constEnd(); Node++) +// { +// if(Node.value().isFocus) +// { +// const DapNodeData* nodeData = &Node.value(); +// QString textToolTip = DESCRIPTION_NODE +// .arg(Node.key()) +// .arg(nodeData->Alias) +// .arg(nodeData->AddressIpv4.toString()); +// emit selectNode("Node description", textToolTip); +// return; +// } +// } +//} void DapChainNodeNetworkExplorer::wheelEvent(QWheelEvent* event) { @@ -78,6 +80,7 @@ void DapChainNodeNetworkExplorer::hoverMoveEvent(QHoverEvent* event) void DapChainNodeNetworkExplorer::paint(QPainter* painter) { + if(m_model == nullptr) return; QString address; const DapNodeData* activatedNode = nullptr; @@ -85,27 +88,27 @@ void DapChainNodeNetworkExplorer::paint(QPainter* painter) painter->setPen(pen); painter->setBrush(QBrush("#FFFFFF")); - for(auto Node = m_nodeMap.constBegin(); Node != m_nodeMap.constEnd(); Node++) + for(auto node = m_nodeMap.constBegin(); node != m_nodeMap.constEnd(); node++) { - const DapNodeData* NodeData = &Node.value(); - for(int i = 0; i < NodeData->Link.count(); i++) - painter->drawLine(NodeData->Rect.center(), NodeData->Link.at(i)->Rect.center()); + const DapNodeData* nodeData = &node.value(); + for(int i = 0; i < nodeData->Link.count(); i++) + painter->drawLine(nodeData->Rect.center(), nodeData->Link.at(i)->Rect.center()); - if(NodeData->isFocus) + if(nodeData->isFocus) { - address = Node.key(); - activatedNode = NodeData; + address = node.key(); + activatedNode = nodeData; continue; } - painter->drawEllipse(NodeData->Rect); + painter->drawEllipse(nodeData->Rect); } if(activatedNode != nullptr) { QPen penActivated(QBrush(m_colorActivated), m_widthLine); QPen penWhite(QBrush("#FFFFFF"), m_widthLine); - QRect rect(activatedNode->Rect.center(), QSize(200, 50)); + QRect rect(activatedNode->Rect.center(), QSize(200, 15)); painter->setPen(penActivated); painter->drawEllipse(activatedNode->Rect); @@ -114,17 +117,18 @@ void DapChainNodeNetworkExplorer::paint(QPainter* painter) painter->drawRect(rect); painter->setPen(pen); - painter->drawText(rect, DESCRIPTION_NODE - .arg(address) - .arg(activatedNode->Alias) - .arg(activatedNode->AddressIpv4.toString())); + painter->drawText(rect, activatedNode->Alias); +// painter->drawText(rect, DESCRIPTION_NODE +// .arg(address) +// .arg(activatedNode->Alias) +// .arg(activatedNode->AddressIpv4.toString())); } } -QVariant DapChainNodeNetworkExplorer::getData() const -{ - return m_data; -} +//QVariant DapChainNodeNetworkExplorer::getData() const +//{ +// return m_data; +//} QColor DapChainNodeNetworkExplorer::getColorNormal() const { @@ -146,45 +150,50 @@ int DapChainNodeNetworkExplorer::getSizeNode() const return m_sizeNode; } -void DapChainNodeNetworkExplorer::setData(const QVariant& AData) +DapChainNodeNetworkModel* DapChainNodeNetworkExplorer::getModel() const { - if (m_data == AData) return; - m_data = AData; - m_nodeMap.clear(); - emit dataChanged(m_data); - - QMap<QString, QVariant> dataMap = m_data.toMap(); - - int pointX = m_sizeNode; - int heightConten = dataMap.count() * m_sizeNode; - - QList<QString> addressList = dataMap.keys(); - foreach(auto address, addressList) - m_nodeMap[address] = DapNodeData(); - - for(auto node = m_nodeMap.begin(); node != m_nodeMap.end(); node++) - { - DapNodeData* nodeData = &node.value(); - QStringList nodeDataList = dataMap[node.key()].toStringList(); - nodeData->Cell = nodeDataList.at(0).toUInt(); - nodeData->AddressIpv4 = QHostAddress(nodeDataList.at(1)); - nodeData->Alias = nodeDataList.at(2); - - if(nodeDataList.at(3).toUInt() > 0) - { - for(int i = 4; i < nodeDataList.count(); i++) - nodeData->Link.append(&m_nodeMap[nodeDataList.at(i)]); - } - - int posY = (qrand() % ((heightConten + 1) - m_sizeNode) + m_sizeNode); - nodeData->Rect = QRect(pointX, posY, m_sizeNode, m_sizeNode); - pointX += m_sizeNode * 2; - } - - setSize(QSize(pointX + m_sizeNode * 2, heightConten + m_sizeNode * 2)); - update(); + return m_model; } +//void DapChainNodeNetworkExplorer::setData(const QVariant& AData) +//{ +// if (m_data == AData) return; +// m_data = AData; +// m_nodeMap.clear(); +// emit dataChanged(m_data); + +// QMap<QString, QVariant> dataMap = m_data.toMap(); + +// int pointX = m_sizeNode; +// int heightConten = dataMap.count() * m_sizeNode; + +// QList<QString> addressList = dataMap.keys(); +// foreach(auto address, addressList) +// m_nodeMap[address] = DapNodeData(); + +// for(auto node = m_nodeMap.begin(); node != m_nodeMap.end(); node++) +// { +// DapNodeData* nodeData = &node.value(); +// QStringList nodeDataList = dataMap[node.key()].toStringList(); +// nodeData->Cell = nodeDataList.at(0).toUInt(); +// nodeData->AddressIpv4 = QHostAddress(nodeDataList.at(1)); +// nodeData->Alias = nodeDataList.at(2); + +// if(nodeDataList.at(3).toUInt() > 0) +// { +// for(int i = 4; i < nodeDataList.count(); i++) +// nodeData->Link.append(&m_nodeMap[nodeDataList.at(i)]); +// } + +// int posY = (qrand() % ((heightConten + 1) - m_sizeNode) + m_sizeNode); +// nodeData->Rect = QRect(pointX, posY, m_sizeNode, m_sizeNode); +// pointX += m_sizeNode * 2; +// } + +// setSize(QSize(pointX + m_sizeNode * 2, heightConten + m_sizeNode * 2)); +// update(); +//} + void DapChainNodeNetworkExplorer::setColorNormal(const QColor& AColorNormal) { if (m_colorNormal == AColorNormal) @@ -214,3 +223,48 @@ void DapChainNodeNetworkExplorer::setSizeNode(const int sizeNode) m_sizeNode = sizeNode; emit sizeNodeChanged(m_sizeNode); } + +void DapChainNodeNetworkExplorer::setModel(DapChainNodeNetworkModel* aModel) +{ + if (m_model == aModel) return; + m_model = aModel; + connect(m_model, SIGNAL(dataChanged(QVariant)), this, SLOT(proccessCreateGraph())); + proccessCreateGraph(); + emit modelChanged(m_model); +} + +void DapChainNodeNetworkExplorer::proccessCreateGraph() +{ + if(m_model == nullptr) return; + QVariant m_data = m_model->getData(); + + QMap<QString, QVariant> dataMap = m_data.toMap(); + int pointX = m_sizeNode; + int heightConten = dataMap.count() * m_sizeNode; + + QList<QString> addressList = dataMap.keys(); + foreach(auto address, addressList) + m_nodeMap[address] = DapNodeData(); + + for(auto node = m_nodeMap.begin(); node != m_nodeMap.end(); node++) + { + DapNodeData* nodeData = &node.value(); + QStringList nodeDataList = dataMap[node.key()].toStringList(); + nodeData->Cell = nodeDataList.at(0).toUInt(); + nodeData->AddressIpv4 = QHostAddress(nodeDataList.at(1)); + nodeData->Alias = nodeDataList.at(2); + + if(nodeDataList.at(3).toUInt() > 0) + { + for(int i = 4; i < nodeDataList.count(); i++) + nodeData->Link.append(&m_nodeMap[nodeDataList.at(i)]); + } + + int posY = (qrand() % ((heightConten + 1) - m_sizeNode) + m_sizeNode); + nodeData->Rect = QRect(pointX, posY, m_sizeNode, m_sizeNode); + pointX += m_sizeNode * 2; + } + + setSize(QSize(pointX + m_sizeNode * 2, heightConten + m_sizeNode * 2)); + update(); +} diff --git a/KelvinDashboardGUI/DapChainNodeNetworkExplorer.h b/KelvinDashboardGUI/DapChainNodeNetworkExplorer.h index 0bd7cd92ce91738534d53ad1f724f8245ba58911..481358c586228cea2628ab6adcfd2d5fbcf7eb11 100644 --- a/KelvinDashboardGUI/DapChainNodeNetworkExplorer.h +++ b/KelvinDashboardGUI/DapChainNodeNetworkExplorer.h @@ -7,6 +7,8 @@ #include <QVariant> #include <QToolTip> +#include "DapChainNodeNetworkModel.h" + //#include "DapChainNode.h" //#include "DapNetworkType.h" @@ -44,14 +46,17 @@ struct DapNodeData { class DapChainNodeNetworkExplorer : public QQuickPaintedItem { Q_OBJECT - Q_PROPERTY(QVariant data READ getData WRITE setData NOTIFY dataChanged) +// Q_PROPERTY(QVariant data READ getData WRITE setData NOTIFY dataChanged) Q_PROPERTY(QColor colorNormal READ getColorNormal WRITE setColorNormal NOTIFY colorNormalChanged) Q_PROPERTY(QColor colorActivated READ getColorActivated WRITE setColorActivated NOTIFY colorActivatedChanged) Q_PROPERTY(int widthLine READ getWidthLine WRITE setWidthLine NOTIFY widthLineChanged) Q_PROPERTY(int sizeNode READ getSizeNode WRITE setSizeNode NOTIFY sizeNodeChanged) + Q_PROPERTY(DapChainNodeNetworkModel* model READ getModel WRITE setModel NOTIFY modelChanged) + private: - QVariant m_data; +// QVariant m_data; + DapChainNodeNetworkModel* m_model; QMap<QString /*Address*/, DapNodeData /*Data*/> m_nodeMap; QColor m_colorNormal; @@ -59,35 +64,42 @@ private: int m_widthLine; int m_sizeNode; + protected: - void mousePressEvent(QMouseEvent* event); +// void mousePressEvent(QMouseEvent* event); void wheelEvent(QWheelEvent* event); void hoverMoveEvent(QHoverEvent* event); public: explicit DapChainNodeNetworkExplorer(QQuickItem *parent = nullptr); void paint(QPainter* painter); - QVariant getData() const; QColor getColorNormal() const; QColor getColorActivated() const; int getWidthLine() const; int getSizeNode() const; + DapChainNodeNetworkModel* getModel() const; + public slots: - void setData(const QVariant& AData); void setColorNormal(const QColor& AColorNormal); void setColorActivated(const QColor& AColorActivated); void setWidthLine(const int widthLine); void setSizeNode(const int sizeNode); + void setModel(DapChainNodeNetworkModel* aModel); + +private slots: + void proccessCreateGraph(); + signals: - void selectNode(QString title, QString text); void dataChanged(QVariant data); void colorNormalChanged(QColor colorNormal); void colorActivatedChanged(QColor colorActivated); void widthLineChanged(int widthLine); void sizeNodeChanged(int sizeNode); - void testChanged(QObject* test); + void modelChanged(DapChainNodeNetworkModel* model); + + void selectNode(QString address, QString alias, QString ipv4); }; #endif // DAPCHAINNODENETWORKEXPLORER_H diff --git a/KelvinDashboardGUI/DapChainNodeNetworkModel.h b/KelvinDashboardGUI/DapChainNodeNetworkModel.h index 892a3d0059f1ddc185f96c612e752964dfabd318..52eb5bf9064f5353c0a891b2f4d4072e19011e1c 100644 --- a/KelvinDashboardGUI/DapChainNodeNetworkModel.h +++ b/KelvinDashboardGUI/DapChainNodeNetworkModel.h @@ -1,11 +1,9 @@ -#ifndef DAPNETWORKEXPLORERCONTROLLER_H -#define DAPNETWORKEXPLORERCONTROLLER_H +#ifndef DAPCHAINNODENETWORKMODEL_H +#define DAPCHAINNODENETWORKMODEL_H #include <QObject> #include <QHostAddress> #include <QVariant> -//#include "DapChainNode.h" -#include "DapChainNodeNetworkExplorer.h" class DapChainNodeNetworkModel : public QObject { @@ -28,4 +26,4 @@ signals: void dataChanged(QVariant data); }; -#endif // DAPNETWORKEXPLORERCONTROLLER_H +#endif // DAPCHAINNODENETWORKMODEL_H