diff --git a/KelvinDashboardGUI/DapChainWalletsModel.cpp b/KelvinDashboardGUI/DapChainWalletsModel.cpp old mode 100644 new mode 100755 index 7d46e1686e74e08ca61b3014e0ed6131cfbe9583..77cc88c4edb4c67f7ced3a33b1ac2ffc3ac4ca46 --- a/KelvinDashboardGUI/DapChainWalletsModel.cpp +++ b/KelvinDashboardGUI/DapChainWalletsModel.cpp @@ -24,6 +24,7 @@ QVariant DapChainWalletsModel::data(const QModelIndex &index, int role) const case NameWalletRole: return m_dapChainWallets.at(index.row())->getName(); case AddressWalletRole: return m_dapChainWallets.at(index.row())->getAddress(); case BalanceWalletRole: return m_dapChainWallets.at(index.row())->getBalance(); + case TokensWalletRole: return m_dapChainWallets.at(index.row())->getTokens(); default: return QVariant(); } @@ -36,7 +37,8 @@ QHash<int, QByteArray> DapChainWalletsModel::roleNames() const { IconWalletRole, "iconPath" }, { NameWalletRole, "name" }, { AddressWalletRole, "address" }, - { BalanceWalletRole, "balance" } + { BalanceWalletRole, "balance" }, + { TokensWalletRole, "tokens" } }; return roles; @@ -45,25 +47,25 @@ QHash<int, QByteArray> DapChainWalletsModel::roleNames() const QVariantMap DapChainWalletsModel::get(int row) const { const DapChainWallet *wallet = m_dapChainWallets.value(row); - return { {"iconPath", wallet->getIconPath()}, {"name", wallet->getName()}, {"address", wallet->getAddress()}, {"balance", wallet->getBalance()} }; + return { {"iconPath", wallet->getIconPath()}, {"name", wallet->getName()}, {"address", wallet->getAddress()}, {"balance", wallet->getBalance()}, {"tokens", wallet->getTokens()} }; } void DapChainWalletsModel::append(const DapChainWallet &arWallet) { - this->append(arWallet.getIconPath(), arWallet.getName(), arWallet.getAddress(), arWallet.getBalance()); + this->append(arWallet.getIconPath(), arWallet.getName(), arWallet.getAddress(), arWallet.getBalance(), arWallet.getTokens()); } -void DapChainWalletsModel::append(const QString& asIconPath, const QString &asName, const QString &asAddress, const QString& aBalance) +void DapChainWalletsModel::append(const QString& asIconPath, const QString &asName, const QString &asAddress, const QStringList& aBalance, const QStringList& aTokens) { int row = 0; while (row < m_dapChainWallets.count()) ++row; beginInsertRows(QModelIndex(), row, row); - m_dapChainWallets.insert(row, new DapChainWallet(asIconPath, asName, asAddress, aBalance)); + m_dapChainWallets.insert(row, new DapChainWallet(asIconPath, asName, asAddress, aBalance, aTokens)); endInsertRows(); } -void DapChainWalletsModel::set(int row, const QString& asIconPath, const QString &asName, const QString &asAddresss, const QString& aBalance) +void DapChainWalletsModel::set(int row, const QString& asIconPath, const QString &asName, const QString &asAddresss, const QStringList& aBalance, const QStringList& aTokens) { if (row < 0 || row >= m_dapChainWallets.count()) return; @@ -73,6 +75,7 @@ void DapChainWalletsModel::set(int row, const QString& asIconPath, const QString wallet->setName(asName); wallet->setAddress(asAddresss); wallet->setBalance(aBalance); + wallet->setTokens(aTokens); dataChanged(index(row, 0), index(row, 0), { IconWalletRole, NameWalletRole, AddressWalletRole, BalanceWalletRole }); } diff --git a/KelvinDashboardGUI/DapChainWalletsModel.h b/KelvinDashboardGUI/DapChainWalletsModel.h old mode 100644 new mode 100755 index 5c8afb5eeb039cc9bfc5f8ef25fd68645937d9f6..fe59c4adac99aab061f815949863c5dee46e25d5 --- a/KelvinDashboardGUI/DapChainWalletsModel.h +++ b/KelvinDashboardGUI/DapChainWalletsModel.h @@ -16,7 +16,8 @@ enum DapChainWalletRole { IconWalletRole = Qt::DisplayRole, NameWalletRole = Qt::UserRole, AddressWalletRole, - BalanceWalletRole + BalanceWalletRole, + TokensWalletRole }; class DapChainWalletsModel : public QAbstractListModel @@ -37,8 +38,8 @@ public: Q_INVOKABLE QVariantMap get(int row) const; Q_INVOKABLE void append(const DapChainWallet &arWallet); - Q_INVOKABLE void append(const QString& asIconPath, const QString &asName, const QString &asAddress, const QString &aBalance); - Q_INVOKABLE void set(int row, const QString& asIconPath, const QString &asName, const QString &asAddresss, const QString &aBalance); + Q_INVOKABLE void append(const QString& asIconPath, const QString &asName, const QString &asAddress, const QStringList &aBalance, const QStringList &aTokens); + Q_INVOKABLE void set(int row, const QString& asIconPath, const QString &asName, const QString &asAddresss, const QStringList &aBalance, const QStringList &aTokens); Q_INVOKABLE void remove(int row); Q_INVOKABLE void clear(); diff --git a/KelvinDashboardGUI/DapCommandController.cpp b/KelvinDashboardGUI/DapCommandController.cpp old mode 100644 new mode 100755 index 06792c1e4d2ab6ccb5e6db1aec14b809afc041af..182ccb63f44fcb6f334de99f4c1b898ea1655423 --- a/KelvinDashboardGUI/DapCommandController.cpp +++ b/KelvinDashboardGUI/DapCommandController.cpp @@ -67,6 +67,19 @@ void DapCommandController::processAddWallet() emit sigWalletAdded(name, address); } +void DapCommandController::processSendToken() +{ + qInfo() << "processSendToken()"; + DapRpcServiceReply *reply = static_cast<DapRpcServiceReply *>(sender()); + if (!reply) { + qWarning() << "Invalid response received"; + return; + } + emit sigCommandResult(reply->response().result()); + auto answer = reply->response().result().toVariant().toString(); + emit onTokenSended(answer); +} + void DapCommandController::processGetWallets() { qInfo() << "processGetWallets()"; @@ -90,8 +103,26 @@ void DapCommandController::processGetWalletInfo() emit sigCommandResult(reply->response().result()); QString name = reply->response().result().toVariant().toStringList().at(0); QString address = reply->response().result().toVariant().toStringList().at(1); - QString balance = reply->response().result().toVariant().toStringList().at(2); - emit sigWalletInfoChanged(name, address, balance); + QStringList temp = reply->response().result().toVariant().toStringList(); + QStringList tokens; + QStringList balance; + for(int x{2}; x < temp.count(); x++) + { + if(x%2) + { + tokens.append(temp[x]); + qDebug() << "TOKKEN " << temp[x]; + } + else + { + QString s; + s.setNum(x*10); + balance.append(temp[x] + s); + qDebug() << "BALANCE " << temp[x]; + } + } + + emit sigWalletInfoChanged(name, address, balance, tokens); } /// Show or hide GUI client by clicking on the tray icon. @@ -125,6 +156,13 @@ void DapCommandController::addWallet(const QString &asWalletName) connect(reply, SIGNAL(finished()), this, SLOT(processAddWallet())); } +void DapCommandController::sendToken(const QString &asSendWallet, const QString &asAddressReceiver, const QString &asToken, const double &aAmount) +{ + qInfo() << QString("sendToken(%1, %2, %3, %4)").arg(asSendWallet).arg(asAddressReceiver).arg(asToken).arg(aAmount); + DapRpcServiceReply *reply = m_DAPRpcSocket->invokeRemoteMethod("RPCServer.sendToken", asSendWallet, asAddressReceiver, asToken, aAmount); + connect(reply, SIGNAL(finished()), this, SLOT(processSendToken())); +} + void DapCommandController::getWallets() { DapRpcServiceReply *reply = m_DAPRpcSocket->invokeRemoteMethod("RPCServer.getWallets"); diff --git a/KelvinDashboardGUI/DapCommandController.h b/KelvinDashboardGUI/DapCommandController.h old mode 100644 new mode 100755 index d8e79a61c737e0cd0df80fc4e8544ffb17f203cd..be2a4e33a71a189880adeb0df554a78e5d37f0f5 --- a/KelvinDashboardGUI/DapCommandController.h +++ b/KelvinDashboardGUI/DapCommandController.h @@ -27,6 +27,7 @@ signals: void sigNodeLogsReceived(const QStringList& aNodeLogs); void sigWalletAdded(const QString& asWalletName, const QString& asWalletAddress); + void onTokenSended(const QString& asAnswer); void sigWalletsReceived(const QMap<QString, QVariant>& aWallets); /// The signal is emitted when the main application window is activated. @@ -34,7 +35,7 @@ signals: void onClientClose(); - void sigWalletInfoChanged(const QString& asWalletName, const QString& asWalletAddress, const QString& aBalance); + void sigWalletInfoChanged(const QString& asWalletName, const QString& asWalletAddress, const QStringList& aBalance, const QStringList& aTokens); public: /// Overloaded constructor. @@ -52,7 +53,7 @@ private slots: void processGetNodeLogs(); void processAddWallet(); - + void processSendToken(); void processGetWallets(); void processGetWalletInfo(); @@ -70,6 +71,7 @@ public slots: void getNodeLogs(int aiTimeStamp, int aiRowCount); void addWallet(const QString& asWalletName); + void sendToken(const QString &asSendWallet, const QString& asAddressReceiver, const QString& asToken, const double& aAmount); void getWallets(); diff --git a/KelvinDashboardGUI/DapServiceController.cpp b/KelvinDashboardGUI/DapServiceController.cpp old mode 100644 new mode 100755 index 91c330c05b116d85f9353d60ee5cda9498f3b8b0..cbbd01794dab29b7b2aed082e3140f3c94ff788b --- a/KelvinDashboardGUI/DapServiceController.cpp +++ b/KelvinDashboardGUI/DapServiceController.cpp @@ -44,7 +44,9 @@ void DapServiceController::init(DapServiceClient *apDapServiceClient) connect(m_pDapCommandController, SIGNAL(sigWalletsReceived(QMap<QString,QVariant>)), SLOT(processGetWallets(QMap<QString,QVariant>))); - connect(m_pDapCommandController, SIGNAL(sigWalletInfoChanged(QString,QString,QString)), SLOT(processGetWalletInfo(QString,QString,QString))); + connect(m_pDapCommandController, SIGNAL(sigWalletInfoChanged(QString,QString, QStringList, QStringList)), SLOT(processGetWalletInfo(QString,QString, QStringList, QStringList))); + + connect(m_pDapCommandController, SIGNAL(onTokenSended(QString)), SLOT(processSendToken(QString))); } QString DapServiceController::getBrand() const @@ -118,6 +120,12 @@ void DapServiceController::addWallet(const QString &asWalletName) m_pDapCommandController->addWallet(asWalletName); } +void DapServiceController::sendToken(const QString &asSendWallet, const QString &asAddressReceiver, const QString &asToken, const double &aAmount) +{ + qInfo() << QString("sendToken(%1, %2, %3, %4)").arg(asSendWallet).arg(asAddressReceiver).arg(asToken).arg(aAmount); + m_pDapCommandController->sendToken(asSendWallet, asAddressReceiver, asToken, aAmount); +} + void DapServiceController::getWalletInfo(const QString &asWalletName) { qInfo() << QString("getWalletInfo(%1)").arg(asWalletName); @@ -126,26 +134,34 @@ void DapServiceController::getWalletInfo(const QString &asWalletName) void DapServiceController::processAddWallet(const QString& asWalletName, const QString& asWalletAddress) { - qInfo() << QString("processAddWallet(%1, %2)").arg(asWalletName).arg(asWalletAddress);; + qInfo() << QString("processAddWallet(%1, %2)").arg(asWalletName).arg(asWalletAddress); DapChainWallet wallet("", asWalletName, asWalletAddress); DapChainWalletsModel::getInstance().append(wallet); } +void DapServiceController::processSendToken(const QString &asAnswer) +{ + qInfo() << QString("processSendToken(%1)").arg(asAnswer); +} + void DapServiceController::processGetWallets(const QMap<QString, QVariant> &aWallets) { qInfo() << QString("processGetWallets()") << aWallets.size(); for(QString w : aWallets.keys()) { - DapChainWallet wallet("", w, aWallets.value(w).toString()); getWalletInfo(w); } } -void DapServiceController::processGetWalletInfo(const QString &asWalletName, const QString &asWalletAddress, const QString &aBalance) +void DapServiceController::processGetWalletInfo(const QString &asWalletName, const QString &asWalletAddress, const QStringList& aBalance, const QStringList &aTokens) { - qInfo() << QString("processGetWalletInfo(%1, %2, %3)").arg(asWalletName).arg(asWalletAddress).arg(aBalance); - DapChainWallet wallet("", asWalletName, asWalletAddress, aBalance); + qInfo() << QString("processGetWalletInfo(%1, %2)").arg(asWalletName).arg(asWalletAddress); + DapChainWallet wallet("", asWalletName, asWalletAddress, aBalance, aTokens); DapChainWalletsModel::getInstance().append(wallet); + + for (QString s : aBalance) { + qDebug() << s; + } } /// Get an instance of a class. diff --git a/KelvinDashboardGUI/DapServiceController.h b/KelvinDashboardGUI/DapServiceController.h old mode 100644 new mode 100755 index 1edafae669200fbab9c6f7fc3bd1fe23e4f5e362..eaacfd33697666434add3e956a91bd90cc42af0f --- a/KelvinDashboardGUI/DapServiceController.h +++ b/KelvinDashboardGUI/DapServiceController.h @@ -67,6 +67,7 @@ public: void setLogModel(const DapLogModel &dapLogModel); Q_INVOKABLE void addWallet(const QString& asWalletName); + Q_INVOKABLE void sendToken(const QString &asSendWallet, const QString& asAddressReceiver, const QString& asToken, const double& aAmount); void getWalletInfo(const QString& asWalletName); @@ -87,9 +88,11 @@ private slots: void processAddWallet(const QString& asWalletName, const QString& asWalletAddress); + void processSendToken(const QString& asAnswer); + void processGetWallets(const QMap<QString, QVariant>& aWallets); - void processGetWalletInfo(const QString& asWalletName, const QString& asWalletAddress, const QString& aBalance); + void processGetWalletInfo(const QString& asWalletName, const QString& asWalletAddress, const QStringList &aBalance, const QStringList& aTokens); public slots: /// Show or hide GUI client by clicking on the tray icon. diff --git a/KelvinDashboardGUI/DapUiQmlScreenDialogSendToken.qml b/KelvinDashboardGUI/DapUiQmlScreenDialogSendToken.qml new file mode 100755 index 0000000000000000000000000000000000000000..a1079ba42359fe9314bc5ff9cc35e9ed5d567bb4 --- /dev/null +++ b/KelvinDashboardGUI/DapUiQmlScreenDialogSendToken.qml @@ -0,0 +1,150 @@ +import QtQuick 2.9 +import QtQuick.Controls 1.4 +import QtQuick.Controls 2.4 +//import QtQuick.Controls 2.5 +import KelvinDashboard 1.0 + +Dialog { + id: dialogSendToken + focus: true + modal: true + title: qsTr("Send token...") + + width: parent.width/1.5 + height: 200 + + x: parent.width / 2 - width / 2 + y: parent.height / 2 - height / 2 + + function show() { + dialogSendToken.open(); + } + + contentItem: + + Rectangle + { + anchors.fill: parent + +// TextField +// { +// background: Rectangle { +// radius: 2 +// border.color: "gray" +// border.width: 1 +// } + +// id: textFieldNameWallet +// selectByMouse: true +// height: 35 +// anchors.bottom: buttonOk.top +// anchors.bottomMargin: 20 +// anchors.right: parent.right +// anchors.rightMargin: 10 +// anchors.left: parent.left +// anchors.leftMargin: 10 +// font.pixelSize: 20 +// clip: true + + +// } + + ComboBox { + id: comboBoxAddressWallet + anchors.bottom: spinBoxAmount.top + anchors.bottomMargin: 20 + anchors.right: parent.right + anchors.rightMargin: 10 + anchors.left: parent.left + anchors.leftMargin: 10 + editable: true + textRole: "text" + onAccepted: { + if (find(currentText) === -1) { + model.append({text: editText}) +// currentIndex = find(editText) +// fnameField.insert(currentIndex) + + } + } + } + + SpinBox { + id: spinBoxAmount + anchors.bottom: buttonOk.top + anchors.bottomMargin: 20 + anchors.right: parent.right + anchors.rightMargin: 10 + editable: true + } + + Button + { + id: buttonCancel + text: qsTr("Cancel") + anchors.right: buttonOk.left + anchors.rightMargin: 10 + anchors.bottom: parent.bottom + anchors.bottomMargin: 10 + + contentItem: Text { + text: buttonCancel.text + font: buttonCancel.font + opacity: enabled ? 1.0 : 0.3 + color: buttonCancel.down ? "#353841" : "white" + horizontalAlignment: Text.AlignHCenter + verticalAlignment: Text.AlignVCenter + elide: Text.ElideRight + } + + background: Rectangle { + implicitWidth: 100 + implicitHeight: 30 + opacity: enabled ? 1 : 0.3 + color: buttonCancel.down ? "white" : "#353841" + radius: 4 + } + + onClicked: + { + textFieldNameWallet.clear() + close() + } + } + + Button + { + id: buttonOk + text: "OK" + anchors.right: parent.right + anchors.rightMargin: 10 + anchors.bottom: parent.bottom + anchors.bottomMargin: 10 + contentItem: Text { + text: buttonOk.text + font: buttonOk.font + opacity: enabled ? 1.0 : 0.3 + color: buttonOk.down ? "#353841" : "white" + horizontalAlignment: Text.AlignHCenter + verticalAlignment: Text.AlignVCenter + elide: Text.ElideRight + } + + background: Rectangle { + implicitWidth: 100 + implicitHeight: 30 + opacity: enabled ? 1 : 0.3 + color: buttonOk.down ? "white" : "#353841" + radius: 4 + } + + onClicked: + { +// dapServiceController.addWallet(textFieldNameWallet.text) + console.log(comboBoxAddressWallet.displayText) + close() + } + } + } + +} diff --git a/KelvinDashboardGUI/DapUiQmlWidgetChainWallet.qml b/KelvinDashboardGUI/DapUiQmlWidgetChainWallet.qml old mode 100644 new mode 100755 index 018ef4719b6e7358c1295751519021688828cee2..2dcbae1667e94fb3e86ccee2c7cace90dde0293f --- a/KelvinDashboardGUI/DapUiQmlWidgetChainWallet.qml +++ b/KelvinDashboardGUI/DapUiQmlWidgetChainWallet.qml @@ -25,11 +25,25 @@ DapUiQmlWidgetChainWalletForm { } listViewWallet.onCurrentItemChanged: + { + listViewTokens.model = listViewWallet.model.get(listViewWallet.currentIndex).tokens +// console.log("Заголовок " + listViewWallet.model.get(listViewWallet.currentIndex).address) console.log(listViewWallet.currentIndex) + + + } + + listViewTokens.onCurrentItemChanged: + { + textBalance.text = listViewWallet.model.get(listViewWallet.currentIndex).balance[listViewTokens.currentIndex] + } - save.onClicked: { + buttonSaveWallet.onClicked: { dialogAddWallet.show() -} + } + buttonSendToken.onClicked: { + dialogSendToken.show() + } } diff --git a/KelvinDashboardGUI/DapUiQmlWidgetChainWalletForm.ui.qml b/KelvinDashboardGUI/DapUiQmlWidgetChainWalletForm.ui.qml old mode 100644 new mode 100755 index 6d5dd626dad1ab09bd4a0155a94a948bbc655c50..68061588903e16cbf1c4d5000e017295476786b1 --- a/KelvinDashboardGUI/DapUiQmlWidgetChainWalletForm.ui.qml +++ b/KelvinDashboardGUI/DapUiQmlWidgetChainWalletForm.ui.qml @@ -1,6 +1,8 @@ import QtQuick 2.11 import QtGraphicalEffects 1.0 import QtQuick.Controls 2.2 +import QtQuick.Controls.Styles 1.4 +import KelvinDashboard 1.0 Page { id: dapUiQmlWidgetChainWallet @@ -8,11 +10,17 @@ Page { title: qsTr("Wallet") property alias listViewWallet: listViewWallet - property alias save: save + property alias buttonSaveWallet: buttonSaveWallet property alias dialogAddWallet: dialogAddWallet + property alias buttonSendToken: buttonSendToken + property alias dialogSendToken: dialogSendToken + property alias addressWallet: addressWallet + property alias listViewTokens: listViewTokens + property alias textBalance: textBalance Rectangle { + id: rectanglePanel anchors.left: parent.left anchors.top: parent.top anchors.bottom: parent.bottom @@ -25,6 +33,7 @@ Page { model: dapChainWalletsModel delegate: Item { + id: delegateWallet width: parent.width height: 100 @@ -33,44 +42,17 @@ Page { anchors.centerIn: parent spacing: 5 - Text { + Label { id: nameWallet anchors.horizontalCenter: parent.horizontalCenter text: qsTr(name) font.pixelSize: 14 color: "#BBBEBF" font.family: "Roboto" + width: delegateWallet.width + elide: Text.ElideRight + leftPadding: 5 } - - Text { - id: lableBalance - anchors.horizontalCenter: parent.horizontalCenter - text: qsTr(balance) - font.pixelSize: 18 - color: "#BBBEBF" - font.family: "Roboto" - } - - Text { - id: lableCurrency - anchors.horizontalCenter: parent.horizontalCenter - text: "Dollars" - font.pixelSize: 14 - color: "#BBBEBF" - font.weight: Font.Light - font.family: "Roboto" - } - -// TextEdit { -// id: addressWallet -// text: address -// width: parent.width -// font.pixelSize: 16 -// wrapMode: Text.Wrap -// selectByMouse: true -// // clip: true -// // elide: Text.ElideRight -// } } MouseArea { @@ -83,27 +65,126 @@ Page { } } + Rectangle + { + anchors.left: rectanglePanel.right + anchors.right: parent.right + anchors.top: parent.top + anchors.bottom: parent.bottom + + TextEdit { + id: addressWallet + font.pixelSize: 16 + wrapMode: Text.Wrap + selectByMouse: true + color: "black" + anchors.top: parent.top + anchors.horizontalCenter: parent.horizontalCenter + } + + ListView { + id: listViewTokens + orientation: ListView.Horizontal + anchors.top: addressWallet.bottom + anchors.left: parent.left + anchors.bottom: parent.bottom + width: parent.width*2/3 + delegate: Item { + width: 200; height: 50 + Text { id: nameField; text: modelData } + MouseArea { + anchors.fill: parent + onClicked: listViewTokens.currentIndex = index + } + } + + focus: true + } + + Text + { + id: textBalance + anchors.top: addressWallet.bottom + anchors.left: listViewTokens.right + anchors.bottom: parent.bottom + anchors.right: parent.right + + font.pixelSize: 70 + font.bold: true + } + } DapUiQmlScreenDialogAddWallet { id: dialogAddWallet } + DapUiQmlScreenDialogSendToken { + id: dialogSendToken + } RoundButton { - id: deleteWallet - text: qsTr("-") + id: buttonDeleteWallet highlighted: true anchors.margins: 10 - anchors.right: parent.right - anchors.bottom: save.top + anchors.left: parent.left + anchors.bottom: buttonSaveWallet.top + height: 40 + width: 40 + contentItem: Text { + text: qsTr("-") + color: "#121B28" + horizontalAlignment: Text.AlignHCenter + verticalAlignment: Text.AlignVCenter + elide: Text.ElideRight + + } + background: Rectangle { + color: "white" + border.color: "#121B28" + radius: 20 + } } RoundButton { - id: save - text: qsTr("+") + id: buttonSaveWallet + contentItem: Text { + text: qsTr("+") + color: "#121B28" + horizontalAlignment: Text.AlignHCenter + verticalAlignment: Text.AlignVCenter + elide: Text.ElideRight + + } + background: Rectangle { + id: inSave + color: "white" + border.color: "#121B28" + radius: 20 + } + + highlighted: true + anchors.margins: 10 + anchors.left: parent.left + anchors.bottom: parent.bottom + height: 40 + width: 40 + } + + RoundButton { + id: buttonSendToken + text: qsTr("->") highlighted: true anchors.margins: 10 anchors.right: parent.right anchors.bottom: parent.bottom } + + RoundButton { + id: buttonAddToken + text: qsTr("+") + highlighted: true + anchors.margins: 10 + anchors.right: parent.right + anchors.bottom: buttonSendToken.top + } } diff --git a/KelvinDashboardGUI/qml.qrc b/KelvinDashboardGUI/qml.qrc index ce09fd17cca72a53bd5d1760905f3ffa3b2aecbc..9de95561440b9170571e89abd20950df93bde74f 100755 --- a/KelvinDashboardGUI/qml.qrc +++ b/KelvinDashboardGUI/qml.qrc @@ -33,5 +33,6 @@ <file>Resources/Icons/dialog-warning.png</file> <file>DapUiQmlWidgetChainNodeLogs.qml</file> <file>DapUiQmlWidgetChainNodeLogsForm.ui.qml</file> + <file>DapUiQmlScreenDialogSendToken.qml</file> </qresource> </RCC> diff --git a/KelvinDashboardService/DapChainLogHandler.cpp b/KelvinDashboardService/DapChainLogHandler.cpp old mode 100644 new mode 100755 index de6211b918f1dd4ffebc454eb9782fbe5a3e9aa0..645053a420ccd3650f38e9be06e55b98f6b76a64 --- a/KelvinDashboardService/DapChainLogHandler.cpp +++ b/KelvinDashboardService/DapChainLogHandler.cpp @@ -26,7 +26,7 @@ QStringList DapChainLogHandler::request(int aiTimeStamp, int aiRowCount) { QByteArray result; QProcess process; - process.start(QString("%1 print_log ts_after %2 limit %3").arg("/home/andrey/Project/build-kelvin-node/kelvin-node-cli").arg(aiTimeStamp).arg(aiRowCount)); + process.start(QString("%1 print_log ts_after %2 limit %3").arg("/opt/kelvin-node/bin/kelvin-node-cli").arg(aiTimeStamp).arg(aiRowCount)); process.waitForFinished(-1); result = process.readAll(); diff --git a/KelvinDashboardService/DapChainWalletHandler.cpp b/KelvinDashboardService/DapChainWalletHandler.cpp old mode 100644 new mode 100755 index 1277f6a6d81549bb119ab17b18332615ba512787..c26e00b4fb8cf405e816a23fc0ed3bddb4a873c4 --- a/KelvinDashboardService/DapChainWalletHandler.cpp +++ b/KelvinDashboardService/DapChainWalletHandler.cpp @@ -1,4 +1,5 @@ #include "DapChainWalletHandler.h" +#include <QDebug> DapChainWalletHandler::DapChainWalletHandler(QObject *parent) : QObject(parent) { @@ -16,7 +17,7 @@ QStringList DapChainWalletHandler::createWallet(const QString &asNameWallet) { QByteArray result; QProcess process; - process.start(QString("%1 wallet new -w %2").arg("/home/andrey/Project/build-kelvin-node/kelvin-node-cli").arg(asNameWallet)); + process.start(QString("%1 wallet new -w %2").arg("/opt/kelvin-node/bin/kelvin-node-cli").arg(asNameWallet)); process.waitForFinished(-1); result = process.readAll(); QStringList list; @@ -29,10 +30,12 @@ QMap<QString, QVariant> DapChainWalletHandler::getWallets() { QMap<QString, QVariant> map; QProcess process; - process.start(QString("%1 wallet list").arg("/home/andrey/Project/build-kelvin-node/kelvin-node-cli")); + process.start(QString("%1 wallet list").arg("/opt/kelvin-node/bin/kelvin-node-cli")); process.waitForFinished(-1); - QString str = QString::fromLatin1(process.readAll()).remove(" "); - QRegExp rx( ":\\b([a-zA-Z0-9]+)\\n" ); + QString str = QString::fromLatin1(process.readAll()); + qDebug() << "ZDES`" << str; + QRegExp rx(":{1,1}([\\s\\w\\W]+)(\\n|\\r){1,1}" ); + rx.setMinimal(true); int pos = 0; int x {0}; QString tempName; @@ -57,27 +60,45 @@ QMap<QString, QVariant> DapChainWalletHandler::getWallets() QStringList DapChainWalletHandler::getWalletInfo(const QString &asNameWallet) { QProcess process; - process.start(QString("%1 wallet info -w %2 -net kelvin-testnet").arg("/home/andrey/Project/build-kelvin-node/kelvin-node-cli").arg(asNameWallet)); + process.start(QString("%1 wallet info -w %2 -net private").arg("/opt/kelvin-node/bin/kelvin-node-cli").arg(asNameWallet)); process.waitForFinished(-1); QStringList list; - QString str = QString::fromLatin1(process.readAll()).remove(" "); - QRegExp rx( "(\\\\n|:)([A-Z0-9]{1,1}[\\w\\S]+)\\\\n" ); + QString str = QString::fromLatin1(process.readAll()).replace("\\", "\\\\"); + + QRegExp rx("[(:\\)\\t]{1,1}([^\\\\\\n\\t]+)[\\\\(|\\n|\\r]{1,1}"); rx.setMinimal(true); - int pos = 0; - list = str.split(":"); - QStringList res; - for(QString s : list) + + int pos{0}; + while((pos = rx.indexIn(str, pos)) != -1) { - qDebug() << s; - if(!s.contains(":")) - res.append(s.remove(s.indexOf('\n'), s.size())); + list.append(rx.cap(1)); + pos += rx.matchedLength(); } -qDebug() << str; -// while ((pos = rx.indexIn(str, pos)) != -1) -// { -// list.append(rx.cap(2)); -// pos += rx.matchedLength(); -// } qDebug() << list; - return res; + return list; +} + +QString DapChainWalletHandler::sendToken(const QString &asSendWallet, const QString &asAddressReceiver, const QString &asToken, const double &aAmount) +{ + QString answer; + qInfo() << QString("sendToken(%1, %2, %3, %4)").arg(asSendWallet).arg(asAddressReceiver).arg(asToken).arg(aAmount); + QProcess processCreate; + processCreate.start(QString("%1 tx_create -net private -chain gdb -from_wallet %2 -to_addr %3 -token %4 -value %5") + .arg("/opt/kelvin-node/bin/kelvin-node-cli") + .arg(asSendWallet) + .arg(asAddressReceiver) + .arg(asToken) + .arg(aAmount)); + processCreate.waitForFinished(-1); + QString resultCreate = QString::fromLatin1(processCreate.readAll()); + qDebug() << resultCreate; + if(!(resultCreate.isEmpty() || resultCreate.isNull())) + { + QProcess processMempool; + processMempool.start(QString("%1 mempool_proc -net private -chain gdb").arg("/opt/kelvin-node/bin/kelvin-node-cli")); + processMempool.waitForFinished(-1); + answer = QString::fromLatin1(processMempool.readAll()); + qDebug() << answer; + } + return answer; } diff --git a/KelvinDashboardService/DapChainWalletHandler.h b/KelvinDashboardService/DapChainWalletHandler.h old mode 100644 new mode 100755 index 53aba37636fbf46179534a4d715f2b86b7696f56..74bf44a656ab52e62f2ebb3f1b5e1fabd5d1805f --- a/KelvinDashboardService/DapChainWalletHandler.h +++ b/KelvinDashboardService/DapChainWalletHandler.h @@ -22,6 +22,7 @@ public slots: QStringList createWallet(const QString& asNameWallet); QMap<QString, QVariant> getWallets(); QStringList getWalletInfo(const QString& asNameWallet); + QString sendToken(const QString &asSendWallet, const QString& asAddressReceiver, const QString& asToken, const double& aAmount); }; #endif // DAPCHAINWALLETHANDLER_H diff --git a/libKelvinDashboardCommon/DapChainWallet.cpp b/libKelvinDashboardCommon/DapChainWallet.cpp old mode 100644 new mode 100755 index e3e8ce891fcbc9c2cdad2fa03e59f0a2823726b7..1ef76c80b4b531e11736d85201cd5c9438970e20 --- a/libKelvinDashboardCommon/DapChainWallet.cpp +++ b/libKelvinDashboardCommon/DapChainWallet.cpp @@ -1,13 +1,13 @@ #include "DapChainWallet.h" -DapChainWallet::DapChainWallet(const QString &asIconPath, const QString &asName, const QString &asAddresss, const QString &aBalance, QObject *parent) - : QObject(parent), m_sIconPath(asIconPath), m_sName(asName), m_sAddress(asAddresss), m_balance(aBalance) +DapChainWallet::DapChainWallet(const QString &asIconPath, const QString &asName, const QString &asAddresss, const QStringList &aBalance, const QStringList &aTokens, QObject *parent) + : QObject(parent), m_sIconPath(asIconPath), m_sName(asName), m_sAddress(asAddresss), m_balance(aBalance), m_tokens(aTokens) { } DapChainWallet::DapChainWallet(const QString &asIconPath, const QString &asName, const QString &asAddresss, QObject *parent) - : DapChainWallet(asIconPath, asName, asAddresss, 0, parent) + : DapChainWallet(asIconPath, asName, asAddresss, QStringList(), QStringList(), parent) { } @@ -48,14 +48,26 @@ void DapChainWallet::setAddress(const QString &asAddress) emit addressChanged(m_sAddress); } -QString DapChainWallet::getBalance() const +QStringList DapChainWallet::getBalance() const { return m_balance; } -void DapChainWallet::setBalance(const QString &aBalance) +void DapChainWallet::setBalance(const QStringList &aBalance) { m_balance = aBalance; emit balanceChanged(m_balance); } + +QStringList DapChainWallet::getTokens() const +{ + return m_tokens; +} + +void DapChainWallet::setTokens(const QStringList &aTokens) +{ + m_tokens = aTokens; + + emit tokensChanged(m_tokens); +} diff --git a/libKelvinDashboardCommon/DapChainWallet.h b/libKelvinDashboardCommon/DapChainWallet.h old mode 100644 new mode 100755 index 152a7c1b065a8bee13a6d4d9183b47329a347478..1537b883d8c6dd5cbffcc236379f799c354bf22d --- a/libKelvinDashboardCommon/DapChainWallet.h +++ b/libKelvinDashboardCommon/DapChainWallet.h @@ -11,18 +11,20 @@ class DapChainWallet : public QObject QString m_sIconPath; QString m_sName; QString m_sAddress; - QString m_balance; + QStringList m_balance; + QStringList m_tokens; public: DapChainWallet(QObject *parent = nullptr) { Q_UNUSED(parent)} - DapChainWallet(const QString& asIconPath, const QString &asName, const QString &asAddresss, const QString &aBalance, QObject * parent = nullptr); + DapChainWallet(const QString& asIconPath, const QString &asName, const QString &asAddresss, const QStringList &aBalance, const QStringList& aTokens, QObject * parent = nullptr); DapChainWallet(const QString& asIconPath, const QString &asName, const QString &asAddresss, QObject * parent = nullptr); Q_PROPERTY(QString iconPath MEMBER m_sIconPath READ getIconPath WRITE setIconPath NOTIFY iconPathChanged) Q_PROPERTY(QString name MEMBER m_sName READ getName WRITE setName NOTIFY nameChanged) Q_PROPERTY(QString address MEMBER m_sAddress READ getAddress WRITE setAddress NOTIFY addressChanged) - Q_PROPERTY(QString balance MEMBER m_balance READ getBalance WRITE setBalance NOTIFY balanceChanged) + Q_PROPERTY(QStringList balance MEMBER m_balance READ getBalance WRITE setBalance NOTIFY balanceChanged) + Q_PROPERTY(QStringList tokens MEMBER m_tokens READ getTokens WRITE setTokens NOTIFY tokensChanged) QString getName() const; void setName(const QString &asName); @@ -32,14 +34,18 @@ public: QString getIconPath() const; void setIconPath(const QString &asIconPath); - QString getBalance() const; - void setBalance(const QString& aBalance); + QStringList getBalance() const; + void setBalance(const QStringList& aBalance); + + QStringList getTokens() const; + void setTokens(const QStringList& aTokens); signals: void iconPathChanged(const QString& asIconPath); void nameChanged(const QString& asName); void addressChanged(const QString& asAddress); - void balanceChanged(const QString& aBalance); + void balanceChanged(const QStringList& aBalance); + void tokensChanged(const QStringList& aTokens); };