From 13278f266c80595f3131aabc906eb7cda3908516 Mon Sep 17 00:00:00 2001
From: alexandr <alexandrmruchok@gmail.com>
Date: Tue, 13 Oct 2020 09:37:41 +0300
Subject: [PATCH] [+] DapNetwork [+] DapNetworksList

---
 chain/wallet/DapNetwork.cpp             | 108 ++++++++++++++++++++++++
 chain/wallet/DapNetwork.h               |  74 ++++++++++++++++
 chain/wallet/libdap-qt-chain-wallet.pri |   7 +-
 chain/wallet/models/DapNetworksList.cpp |  17 ++++
 chain/wallet/models/DapNetworksList.h   |  20 +++++
 5 files changed, 225 insertions(+), 1 deletion(-)
 create mode 100644 chain/wallet/DapNetwork.cpp
 create mode 100644 chain/wallet/DapNetwork.h
 create mode 100644 chain/wallet/models/DapNetworksList.cpp
 create mode 100644 chain/wallet/models/DapNetworksList.h

diff --git a/chain/wallet/DapNetwork.cpp b/chain/wallet/DapNetwork.cpp
new file mode 100644
index 00000000..eb11868a
--- /dev/null
+++ b/chain/wallet/DapNetwork.cpp
@@ -0,0 +1,108 @@
+#include "DapNetwork.h"
+
+DapNetwork::DapNetwork(QObject * a_parent /*= nullptr*/)
+    :QObject(a_parent)
+{
+}
+
+int DapNetwork::linksCount() const
+{
+    return m_linksCount;
+}
+
+void DapNetwork::setLinksCount(int a_linksCount)
+{
+    m_linksCount = a_linksCount;
+}
+
+int DapNetwork::activeLinksCount() const
+{
+    return m_activeLinksCount;
+}
+
+void DapNetwork::setActiveLinksCount(int a_count)
+{
+    if (m_activeLinksCount == a_count)
+        return;
+
+    m_activeLinksCount = a_count;
+    emit this->activeLinksCountChanged(a_count);
+}
+
+QString DapNetwork::nodeAddress() const
+{
+    return m_nodeAddress;
+}
+
+void DapNetwork::setNodeAddress(const QString &a_nodeAddress)
+{
+    if (m_nodeAddress == a_nodeAddress)
+        return;
+
+    m_nodeAddress = a_nodeAddress;
+    emit this->nodeAddressChanged(a_nodeAddress);
+}
+
+QString DapNetwork::name() const
+{
+    return m_name;
+}
+
+DapNetwork::State DapNetwork::state() const
+{
+    return m_state;
+}
+
+QString DapNetwork::stateString() const
+{
+    return DapNetwork::stateToString(m_state);
+}
+
+void DapNetwork::setName(const QString &a_name)
+{
+    if (m_name == a_name)
+        return;
+
+    m_name = a_name;
+    emit this->nameChanged(a_name);
+}
+
+void DapNetwork::setState(DapNetwork::State a_state)
+{
+    if (m_state == a_state)
+        return;
+    m_state = a_state;
+
+    emit this->stateChanged(DapNetwork::stateToString(a_state));
+}
+
+DapNetwork::State DapNetwork::targetState() const
+{
+    return m_targetState;
+}
+
+QString DapNetwork::targetStateString() const
+{
+    return DapNetwork::stateToString(m_targetState);
+}
+
+void DapNetwork::setTargetState(DapNetwork::State a_targetState)
+{
+    if (m_targetState == a_targetState)
+        return;
+    m_targetState = a_targetState;
+
+    emit this->targetStateChanged(DapNetwork::stateToString(a_targetState));
+//    emit this->targetStateChanged(a_targetState);
+}
+
+QString DapNetwork::stateToString(DapNetwork::State a_state)
+{
+    switch (a_state)
+    {
+        case State::Online: return "Online";
+        case State::Offline: return "Offline";
+        default: return {};
+    }
+}
+
diff --git a/chain/wallet/DapNetwork.h b/chain/wallet/DapNetwork.h
new file mode 100644
index 00000000..8736babc
--- /dev/null
+++ b/chain/wallet/DapNetwork.h
@@ -0,0 +1,74 @@
+#ifndef DAPNETWORK_H
+#define DAPNETWORK_H
+
+#include <QObject>
+
+class DapNetwork: public QObject
+{
+    Q_OBJECT
+public:
+
+    enum State
+    {
+        Online,
+        Offline
+        //...
+    };
+
+    Q_INVOKABLE explicit DapNetwork(QObject * a_parent = nullptr);
+
+    Q_PROPERTY(QString name READ name WRITE setName NOTIFY nameChanged)
+    Q_PROPERTY(QString state READ stateString NOTIFY stateChanged)
+    Q_PROPERTY(QString targetState READ targetStateString NOTIFY targetStateChanged)
+    Q_PROPERTY(int activeLinksCount READ activeLinksCount WRITE setActiveLinksCount NOTIFY activeLinksCountChanged)
+    Q_PROPERTY(int linksCount READ linksCount WRITE setLinksCount NOTIFY linksCountChanged)
+    Q_PROPERTY(QString nodeAddress READ nodeAddress WRITE setNodeAddress NOTIFY nodeAddressChanged)
+
+
+    int linksCount() const;
+    void setLinksCount(int a_linksCount);
+
+    int activeLinksCount() const;
+    void setActiveLinksCount(int a_count);
+
+    QString nodeAddress() const;
+    void setNodeAddress(const QString &a_nodeAddress);
+
+    QString name() const;
+    void setName(const QString &a_name);
+
+    State state() const;
+    QString stateString() const;
+    void setState(State a_state);
+
+    State targetState() const;
+    QString targetStateString() const;
+    void setTargetState(State a_targetState);
+
+signals:
+    void nameChanged(const QString& a_name);
+
+    QString stateChanged(const QString& a_state);
+
+    QString targetStateChanged(const QString& a_targetState);
+
+    void activeLinksCountChanged(int a_count);
+    void linksCountChanged(int a_count);
+    void nodeAddressChanged(const QString& a_nodeAddress);
+
+private:
+    static QString stateToString(State a_state);
+
+
+    QString m_name;
+    State m_state;
+    State m_targetState;
+
+    int m_linksCount{};
+    int m_activeLinksCount{};
+    QString m_nodeAddress;
+};
+
+Q_DECLARE_METATYPE(DapNetwork::State)
+
+#endif // DAPNETWORK_H
diff --git a/chain/wallet/libdap-qt-chain-wallet.pri b/chain/wallet/libdap-qt-chain-wallet.pri
index a0549715..ca70759c 100644
--- a/chain/wallet/libdap-qt-chain-wallet.pri
+++ b/chain/wallet/libdap-qt-chain-wallet.pri
@@ -1,6 +1,7 @@
 QT += core
 
-INCLUDEPATH += $$PWD $$PWD/../
+INCLUDEPATH += $$PWD $$PWD/../ \
+    $$PWD/models
 
 
 include (dapRPCProtocol/DapRPCProtocol.pri)
@@ -16,6 +17,7 @@ HEADERS += \
     $$PWD/DapChainConvertor.h \
     $$PWD/DapHistoryType.h \
     $$PWD/DapLogMessage.h \
+    $$PWD/DapNetwork.h \
     $$PWD/DapNodeType.h \
     $$PWD/DapWallet.h \
     $$PWD/DapWalletHistoryEvent.h \
@@ -42,6 +44,7 @@ HEADERS += \
     $$PWD/handlers/DapRunCmdCommand.h \
     $$PWD/handlers/DapSaveHistoryExecutedCmdCommand.h \
     $$PWD/handlers/DapUpdateLogsCommand.h \
+    $$PWD/models/DapNetworksList.h \
     $$PWD/models/DapWalletModel.h \
     $$PWD/serviceClient/DapServiceClient.h \
     $$PWD/serviceClient/DapServiceClientNativeAbstract.h \
@@ -54,6 +57,7 @@ SOURCES += \
     $$PWD/DapChainConvertor.cpp \
     $$PWD/DapHistoryType.cpp \
     $$PWD/DapLogMessage.cpp \
+    $$PWD/DapNetwork.cpp \
     $$PWD/DapWallet.cpp \
     $$PWD/DapWalletHistoryEvent.cpp \
     $$PWD/DapWalletToken.cpp \
@@ -78,6 +82,7 @@ SOURCES += \
     $$PWD/handlers/DapRunCmdCommand.cpp \
     $$PWD/handlers/DapSaveHistoryExecutedCmdCommand.cpp \
     $$PWD/handlers/DapUpdateLogsCommand.cpp \
+    $$PWD/models/DapNetworksList.cpp \
     $$PWD/models/DapWalletModel.cpp \
     $$PWD/serviceClient/DapServiceClient.cpp \
     $$PWD/serviceClient/DapServiceClientNativeAbstract.cpp \
diff --git a/chain/wallet/models/DapNetworksList.cpp b/chain/wallet/models/DapNetworksList.cpp
new file mode 100644
index 00000000..8509b88b
--- /dev/null
+++ b/chain/wallet/models/DapNetworksList.cpp
@@ -0,0 +1,17 @@
+#include "DapNetworksList.h"
+
+DapNetworksList::DapNetworksList(QObject *a_parrent /*= nullptr*/)
+    :QObject(a_parrent)
+{
+
+}
+
+QList<QObject *> DapNetworksList::model()
+{
+    QList<QObject*> listModel;
+    for (DapNetwork* curNetwork: m_networks)
+    {
+        listModel.append(curNetwork);
+    }
+    return listModel;
+}
diff --git a/chain/wallet/models/DapNetworksList.h b/chain/wallet/models/DapNetworksList.h
new file mode 100644
index 00000000..bde64472
--- /dev/null
+++ b/chain/wallet/models/DapNetworksList.h
@@ -0,0 +1,20 @@
+#ifndef DAPNETWORKSLIST_H
+#define DAPNETWORKSLIST_H
+
+#include <QAbstractListModel>
+#include <DapNetwork.h>
+
+class DapNetworksList: public QObject
+{
+    Q_OBJECT
+public:
+
+    DapNetworksList(QObject *a_parrent = nullptr);
+
+    QList<QObject*> model();
+
+private:
+    QList<DapNetwork*> m_networks;
+};
+
+#endif // DAPNETWORKSMODEL_H
-- 
GitLab