Skip to content
Snippets Groups Projects
Commit b55a155d authored by Evgenii Tagiltsev's avatar Evgenii Tagiltsev
Browse files

[*] changed model-view property, optimized code

parent d3f3a008
No related branches found
No related tags found
1 merge request!5Features 2379
...@@ -10,33 +10,35 @@ ...@@ -10,33 +10,35 @@
#define DEFAULT_NODE_SIZE 50 #define DEFAULT_NODE_SIZE 50
#define DEFAULT_WIDTH_LINE 3 #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); 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) //void DapChainNodeNetworkExplorer::mousePressEvent(QMouseEvent* event)
{ //{
QQuickPaintedItem::mousePressEvent(event); // QQuickPaintedItem::mousePressEvent(event);
for(auto Node = m_nodeMap.constBegin(); Node != m_nodeMap.constEnd(); Node++) // for(auto Node = m_nodeMap.constBegin(); Node != m_nodeMap.constEnd(); Node++)
{ // {
if(Node.value().isFocus) // if(Node.value().isFocus)
{ // {
const DapNodeData* nodeData = &Node.value(); // const DapNodeData* nodeData = &Node.value();
QString textToolTip = DESCRIPTION_NODE // QString textToolTip = DESCRIPTION_NODE
.arg(Node.key()) // .arg(Node.key())
.arg(nodeData->Alias) // .arg(nodeData->Alias)
.arg(nodeData->AddressIpv4.toString()); // .arg(nodeData->AddressIpv4.toString());
emit selectNode("Node description", textToolTip); // emit selectNode("Node description", textToolTip);
return; // return;
} // }
} // }
} //}
void DapChainNodeNetworkExplorer::wheelEvent(QWheelEvent* event) void DapChainNodeNetworkExplorer::wheelEvent(QWheelEvent* event)
{ {
...@@ -78,6 +80,7 @@ void DapChainNodeNetworkExplorer::hoverMoveEvent(QHoverEvent* event) ...@@ -78,6 +80,7 @@ void DapChainNodeNetworkExplorer::hoverMoveEvent(QHoverEvent* event)
void DapChainNodeNetworkExplorer::paint(QPainter* painter) void DapChainNodeNetworkExplorer::paint(QPainter* painter)
{ {
if(m_model == nullptr) return;
QString address; QString address;
const DapNodeData* activatedNode = nullptr; const DapNodeData* activatedNode = nullptr;
...@@ -85,27 +88,27 @@ void DapChainNodeNetworkExplorer::paint(QPainter* painter) ...@@ -85,27 +88,27 @@ void DapChainNodeNetworkExplorer::paint(QPainter* painter)
painter->setPen(pen); painter->setPen(pen);
painter->setBrush(QBrush("#FFFFFF")); 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(); const DapNodeData* nodeData = &node.value();
for(int i = 0; i < NodeData->Link.count(); i++) for(int i = 0; i < nodeData->Link.count(); i++)
painter->drawLine(NodeData->Rect.center(), NodeData->Link.at(i)->Rect.center()); painter->drawLine(nodeData->Rect.center(), nodeData->Link.at(i)->Rect.center());
if(NodeData->isFocus) if(nodeData->isFocus)
{ {
address = Node.key(); address = node.key();
activatedNode = NodeData; activatedNode = nodeData;
continue; continue;
} }
painter->drawEllipse(NodeData->Rect); painter->drawEllipse(nodeData->Rect);
} }
if(activatedNode != nullptr) if(activatedNode != nullptr)
{ {
QPen penActivated(QBrush(m_colorActivated), m_widthLine); QPen penActivated(QBrush(m_colorActivated), m_widthLine);
QPen penWhite(QBrush("#FFFFFF"), 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->setPen(penActivated);
painter->drawEllipse(activatedNode->Rect); painter->drawEllipse(activatedNode->Rect);
...@@ -114,17 +117,18 @@ void DapChainNodeNetworkExplorer::paint(QPainter* painter) ...@@ -114,17 +117,18 @@ void DapChainNodeNetworkExplorer::paint(QPainter* painter)
painter->drawRect(rect); painter->drawRect(rect);
painter->setPen(pen); painter->setPen(pen);
painter->drawText(rect, DESCRIPTION_NODE painter->drawText(rect, activatedNode->Alias);
.arg(address) // painter->drawText(rect, DESCRIPTION_NODE
.arg(activatedNode->Alias) // .arg(address)
.arg(activatedNode->AddressIpv4.toString())); // .arg(activatedNode->Alias)
// .arg(activatedNode->AddressIpv4.toString()));
} }
} }
QVariant DapChainNodeNetworkExplorer::getData() const //QVariant DapChainNodeNetworkExplorer::getData() const
{ //{
return m_data; // return m_data;
} //}
QColor DapChainNodeNetworkExplorer::getColorNormal() const QColor DapChainNodeNetworkExplorer::getColorNormal() const
{ {
...@@ -146,45 +150,50 @@ int DapChainNodeNetworkExplorer::getSizeNode() const ...@@ -146,45 +150,50 @@ int DapChainNodeNetworkExplorer::getSizeNode() const
return m_sizeNode; return m_sizeNode;
} }
void DapChainNodeNetworkExplorer::setData(const QVariant& AData) DapChainNodeNetworkModel* DapChainNodeNetworkExplorer::getModel() const
{ {
if (m_data == AData) return; return m_model;
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::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) void DapChainNodeNetworkExplorer::setColorNormal(const QColor& AColorNormal)
{ {
if (m_colorNormal == AColorNormal) if (m_colorNormal == AColorNormal)
...@@ -214,3 +223,48 @@ void DapChainNodeNetworkExplorer::setSizeNode(const int sizeNode) ...@@ -214,3 +223,48 @@ void DapChainNodeNetworkExplorer::setSizeNode(const int sizeNode)
m_sizeNode = sizeNode; m_sizeNode = sizeNode;
emit sizeNodeChanged(m_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();
}
...@@ -7,6 +7,8 @@ ...@@ -7,6 +7,8 @@
#include <QVariant> #include <QVariant>
#include <QToolTip> #include <QToolTip>
#include "DapChainNodeNetworkModel.h"
//#include "DapChainNode.h" //#include "DapChainNode.h"
//#include "DapNetworkType.h" //#include "DapNetworkType.h"
...@@ -44,14 +46,17 @@ struct DapNodeData { ...@@ -44,14 +46,17 @@ struct DapNodeData {
class DapChainNodeNetworkExplorer : public QQuickPaintedItem class DapChainNodeNetworkExplorer : public QQuickPaintedItem
{ {
Q_OBJECT 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 colorNormal READ getColorNormal WRITE setColorNormal NOTIFY colorNormalChanged)
Q_PROPERTY(QColor colorActivated READ getColorActivated WRITE setColorActivated NOTIFY colorActivatedChanged) Q_PROPERTY(QColor colorActivated READ getColorActivated WRITE setColorActivated NOTIFY colorActivatedChanged)
Q_PROPERTY(int widthLine READ getWidthLine WRITE setWidthLine NOTIFY widthLineChanged) Q_PROPERTY(int widthLine READ getWidthLine WRITE setWidthLine NOTIFY widthLineChanged)
Q_PROPERTY(int sizeNode READ getSizeNode WRITE setSizeNode NOTIFY sizeNodeChanged) Q_PROPERTY(int sizeNode READ getSizeNode WRITE setSizeNode NOTIFY sizeNodeChanged)
Q_PROPERTY(DapChainNodeNetworkModel* model READ getModel WRITE setModel NOTIFY modelChanged)
private: private:
QVariant m_data; // QVariant m_data;
DapChainNodeNetworkModel* m_model;
QMap<QString /*Address*/, DapNodeData /*Data*/> m_nodeMap; QMap<QString /*Address*/, DapNodeData /*Data*/> m_nodeMap;
QColor m_colorNormal; QColor m_colorNormal;
...@@ -59,35 +64,42 @@ private: ...@@ -59,35 +64,42 @@ private:
int m_widthLine; int m_widthLine;
int m_sizeNode; int m_sizeNode;
protected: protected:
void mousePressEvent(QMouseEvent* event); // void mousePressEvent(QMouseEvent* event);
void wheelEvent(QWheelEvent* event); void wheelEvent(QWheelEvent* event);
void hoverMoveEvent(QHoverEvent* event); void hoverMoveEvent(QHoverEvent* event);
public: public:
explicit DapChainNodeNetworkExplorer(QQuickItem *parent = nullptr); explicit DapChainNodeNetworkExplorer(QQuickItem *parent = nullptr);
void paint(QPainter* painter); void paint(QPainter* painter);
QVariant getData() const;
QColor getColorNormal() const; QColor getColorNormal() const;
QColor getColorActivated() const; QColor getColorActivated() const;
int getWidthLine() const; int getWidthLine() const;
int getSizeNode() const; int getSizeNode() const;
DapChainNodeNetworkModel* getModel() const;
public slots: public slots:
void setData(const QVariant& AData);
void setColorNormal(const QColor& AColorNormal); void setColorNormal(const QColor& AColorNormal);
void setColorActivated(const QColor& AColorActivated); void setColorActivated(const QColor& AColorActivated);
void setWidthLine(const int widthLine); void setWidthLine(const int widthLine);
void setSizeNode(const int sizeNode); void setSizeNode(const int sizeNode);
void setModel(DapChainNodeNetworkModel* aModel);
private slots:
void proccessCreateGraph();
signals: signals:
void selectNode(QString title, QString text);
void dataChanged(QVariant data); void dataChanged(QVariant data);
void colorNormalChanged(QColor colorNormal); void colorNormalChanged(QColor colorNormal);
void colorActivatedChanged(QColor colorActivated); void colorActivatedChanged(QColor colorActivated);
void widthLineChanged(int widthLine); void widthLineChanged(int widthLine);
void sizeNodeChanged(int sizeNode); void sizeNodeChanged(int sizeNode);
void testChanged(QObject* test); void modelChanged(DapChainNodeNetworkModel* model);
void selectNode(QString address, QString alias, QString ipv4);
}; };
#endif // DAPCHAINNODENETWORKEXPLORER_H #endif // DAPCHAINNODENETWORKEXPLORER_H
#ifndef DAPNETWORKEXPLORERCONTROLLER_H #ifndef DAPCHAINNODENETWORKMODEL_H
#define DAPNETWORKEXPLORERCONTROLLER_H #define DAPCHAINNODENETWORKMODEL_H
#include <QObject> #include <QObject>
#include <QHostAddress> #include <QHostAddress>
#include <QVariant> #include <QVariant>
//#include "DapChainNode.h"
#include "DapChainNodeNetworkExplorer.h"
class DapChainNodeNetworkModel : public QObject class DapChainNodeNetworkModel : public QObject
{ {
...@@ -28,4 +26,4 @@ signals: ...@@ -28,4 +26,4 @@ signals:
void dataChanged(QVariant data); void dataChanged(QVariant data);
}; };
#endif // DAPNETWORKEXPLORERCONTROLLER_H #endif // DAPCHAINNODENETWORKMODEL_H
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment