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