";
+ strHTML += "" + tr("Hash") + ": " + GUIUtil::HtmlEscape(hash) + "
";
+ strHTML += "" + tr("Proposal Name") + ": " + GUIUtil::HtmlEscape(name) + "
";
+ strHTML += "" + tr("Proposal Url") + ": " + GUIUtil::HtmlEscape(url) + "
";
+ strHTML += "" + tr("Payment Amount") + ": " + GUIUtil::HtmlEscape(amount) + "
";
+ strHTML += "" + tr("Funding Votes") +":" + "
Yes: " + GUIUtil::HtmlEscape(FundingYes) + "" + "
No: " + GUIUtil::HtmlEscape(FundingNo) + "" + "
Abstain: " + GUIUtil::HtmlEscape(FundingAbstain) + "" + "
Absolute Yes: " + GUIUtil::HtmlEscape(FundingAbYes) + "
";
+ strHTML += "" + tr("Valid Votes") +":" + "
Yes: " + GUIUtil::HtmlEscape(ValidYes) + "" + "
No: " + GUIUtil::HtmlEscape(ValidNo) + "" + "
Abstain: " + GUIUtil::HtmlEscape(ValidAbstain) + "" + "
Absolute Yes: " + GUIUtil::HtmlEscape(ValidAbYes) + "
";
+ strHTML += "" + tr("Delete Votes") +":" + "
Yes: " + GUIUtil::HtmlEscape(DeleteYes) + "" + "
No: " + GUIUtil::HtmlEscape(DeleteNo) + "" + "
Abstain: " + GUIUtil::HtmlEscape(DeleteAbstain) + "" + "
Absolute Yes: " + GUIUtil::HtmlEscape(DeleteAbYes) + "
";
+ strHTML += "" + tr("Endorse Votes") +":" + "
Yes: " + GUIUtil::HtmlEscape(EndorseYes) + "" + "
No: " + GUIUtil::HtmlEscape(EndorseNo) + "" + "
Abstain: " + GUIUtil::HtmlEscape(EndorseAbstain) + "" + "
Absolute Yes: " + GUIUtil::HtmlEscape(EndorseAbYes) + "
";
+ strHTML += "" + tr("Raw Information (Hex)") + ": " + GUIUtil::HtmlEscape(dataHex) + "
";
+ strHTML += "" + tr("Raw Information (String)") + ": " + GUIUtil::HtmlEscape(dataString) + "
";
+ //strHTML += "" + tr("Sentinel") + ": " + (mn.lastPing.nSentinelVersion > DEFAULT_SENTINEL_VERSION ? GUIUtil::HtmlEscape(SafeIntVersionToString(mn.lastPing.nSentinelVersion)) : tr("Unknown")) + "
";
+ //strHTML += "" + tr("Status") + ": " + GUIUtil::HtmlEscape(CMasternode::StateToString(mn.nActiveState)) + "
";
+ //strHTML += "" + tr("Payee") + ": " + GUIUtil::HtmlEscape(CBitcoinAddress(mn.pubKeyCollateralAddress.GetID()).ToString()) + "
";
+ //strHTML += "" + tr("Active") + ": " + GUIUtil::HtmlEscape(DurationToDHMS(mn.lastPing.sigTime - mn.sigTime)) + "
";
+ //strHTML += "" + tr("Last Seen") + ": " + GUIUtil::HtmlEscape(DateTimeStrFormat("%Y-%m-%d %H:%M", mn.lastPing.sigTime + GetOffsetFromUtc())) + "
";
+ // Open Governance dialog
+ GovernanceDialog *dialog = new GovernanceDialog(this);
+ dialog->setAttribute(Qt::WA_DeleteOnClose);
+ dialog->setModel(walletModel->getOptionsModel());
+ dialog->setInfo(strWindowtitle, strWindowtitle,strHTML, "");
+ dialog->show();
+}
+
+std::string getValue(std::string str,std::string key, bool format)
+{
+ std::string s_pattern = "\"" + key + "\"";
+ int beg = str.find(s_pattern);
+ int f_comma = str.find("\"", beg+s_pattern.size());
+ int s_comma = str.find("\"", f_comma+1);
+ std::string s2 = str.substr(f_comma+1, s_comma-f_comma-1);
+ return s2;
+}
+
+
+
+std::string getNumericValue(std::string str, std::string key)
+{
+ std::string s_pattern = "\"" + key + "\"";
+ int beg = str.find(s_pattern);
+ int f_comma = str.find(":", beg+s_pattern.size());
+ int s_comma = str.find(",", f_comma+1);
+ std::string s2 = str.substr(f_comma+1, s_comma-f_comma-1);
+ return s2;
+}
diff --git a/src/qt/governancelist.h b/src/qt/governancelist.h
new file mode 100644
index 000000000000..e640eedeaa23
--- /dev/null
+++ b/src/qt/governancelist.h
@@ -0,0 +1,77 @@
+#ifndef GOVERNANCELIST_H
+#define GOVERNANCELIST_H
+
+#include "primitives/transaction.h"
+#include "platformstyle.h"
+#include "sync.h"
+#include "util.h"
+#include
+
+#include
+#include
+#include
+
+#define GOBJECT_UPDATE_SECONDS 15
+#define GOBJECT_COOLDOWN_SECONDS 3
+
+namespace Ui {
+ class GovernanceList;
+}
+class ClientModel;
+class WalletModel;
+
+QT_BEGIN_NAMESPACE
+class QModelIndex;
+QT_END_NAMESPACE
+
+std::string getValue(std::string, std::string, bool);
+std::string getNumericValue(std::string str, std::string key);
+
+/** Governance Manager page widget */
+class GovernanceList : public QWidget
+{
+ Q_OBJECT
+
+public:
+ explicit GovernanceList(const PlatformStyle *platformStyle, QWidget *parent = 0);
+ ~GovernanceList();
+ void setClientModel(ClientModel *clientModel);
+ void setWalletModel(WalletModel *walletModel);
+ void ShowGovernanceObject(uint256 gobjectSingle);
+ void Vote(uint256 nHash, vote_outcome_enum_t eVoteOutcome);
+
+
+private:
+ QMenu *contextMenu;
+ int64_t nTimeFilterUpdated;
+ bool fFilterUpdated;
+
+public Q_SLOTS:
+ void updateGobjects();
+
+
+Q_SIGNALS:
+ void doubleClicked(const QModelIndex&);
+
+private:
+ QTimer *timer;
+ Ui::GovernanceList *ui;
+ ClientModel *clientModel;
+ WalletModel *walletModel;
+
+ // Protects tableWidgetMasternodes
+ CCriticalSection cs_gobjlist;
+
+ QString strCurrentFilter;
+
+private Q_SLOTS:
+ void showContextMenu(const QPoint &);
+ void on_filterLineEdit_textChanged(const QString &strFilterIn);
+ void on_GovernanceButton_clicked();
+ void on_UpdateButton_clicked();
+ void on_voteYesButton_clicked();
+ void on_voteNoButton_clicked();
+ void on_voteAbstainButton_clicked();
+
+};
+#endif // GOVERNANCELIST_H
diff --git a/src/qt/res/icons/governance.png b/src/qt/res/icons/governance.png
new file mode 100755
index 000000000000..d057a9f21933
Binary files /dev/null and b/src/qt/res/icons/governance.png differ
diff --git a/src/qt/walletframe.cpp b/src/qt/walletframe.cpp
index 0eca28ddebf7..1664d928c341 100644
--- a/src/qt/walletframe.cpp
+++ b/src/qt/walletframe.cpp
@@ -129,6 +129,13 @@ void WalletFrame::gotoMasternodePage()
i.value()->gotoMasternodePage();
}
+void WalletFrame::gotoGovernancePage()
+{
+ QMap::const_iterator i;
+ for (i = mapWalletViews.constBegin(); i != mapWalletViews.constEnd(); ++i)
+ i.value()->gotoGovernancePage();
+}
+
void WalletFrame::gotoReceiveCoinsPage()
{
QMap::const_iterator i;
diff --git a/src/qt/walletframe.h b/src/qt/walletframe.h
index 432c19d94d9c..84eb2b9da9ff 100644
--- a/src/qt/walletframe.h
+++ b/src/qt/walletframe.h
@@ -68,6 +68,8 @@ public Q_SLOTS:
void gotoHistoryPage();
/** Switch to masternode page */
void gotoMasternodePage();
+ /** Switch to governance page */
+ void gotoGovernancePage();
/** Switch to receive coins page */
void gotoReceiveCoinsPage();
/** Switch to send coins page */
diff --git a/src/qt/walletview.cpp b/src/qt/walletview.cpp
index 39178cbc028b..bcff6763d565 100644
--- a/src/qt/walletview.cpp
+++ b/src/qt/walletview.cpp
@@ -81,6 +81,8 @@ WalletView::WalletView(const PlatformStyle *_platformStyle, QWidget *parent):
addWidget(receiveCoinsPage);
addWidget(sendCoinsPage);
addWidget(masternodeListPage);
+ governanceListPage = new GovernanceList(platformStyle);
+ addWidget(governanceListPage);
// Clicking on a transaction on the overview pre-selects the transaction on the transaction history page
connect(overviewPage, SIGNAL(transactionClicked(QModelIndex)), transactionView, SLOT(focusTransaction(QModelIndex)));
@@ -134,6 +136,7 @@ void WalletView::setClientModel(ClientModel *_clientModel)
overviewPage->setClientModel(_clientModel);
sendCoinsPage->setClientModel(_clientModel);
masternodeListPage->setClientModel(_clientModel);
+ governanceListPage->setClientModel(_clientModel);
}
void WalletView::setWalletModel(WalletModel *_walletModel)
@@ -144,6 +147,7 @@ void WalletView::setWalletModel(WalletModel *_walletModel)
transactionView->setModel(_walletModel);
overviewPage->setWalletModel(_walletModel);
masternodeListPage->setWalletModel(_walletModel);
+ governanceListPage->setWalletModel(_walletModel);
receiveCoinsPage->setModel(_walletModel);
sendCoinsPage->setModel(_walletModel);
usedReceivingAddressesPage->setModel(_walletModel->getAddressTableModel());
@@ -222,6 +226,11 @@ void WalletView::gotoReceiveCoinsPage()
setCurrentWidget(receiveCoinsPage);
}
+void WalletView::gotoGovernancePage()
+{
+ setCurrentWidget(governanceListPage);
+}
+
void WalletView::gotoSendCoinsPage(QString addr)
{
setCurrentWidget(sendCoinsPage);
diff --git a/src/qt/walletview.h b/src/qt/walletview.h
index 2fa9435052fa..fe5733f3d4cb 100644
--- a/src/qt/walletview.h
+++ b/src/qt/walletview.h
@@ -7,11 +7,13 @@
#include "amount.h"
#include "masternodelist.h"
+#include "governancelist.h"
#include
class BitcoinGUI;
class ClientModel;
+class GovernancePage;
class OverviewPage;
class PlatformStyle;
class ReceiveCoinsDialog;
@@ -67,6 +69,7 @@ class WalletView : public QStackedWidget
AddressBookPage *usedSendingAddressesPage;
AddressBookPage *usedReceivingAddressesPage;
MasternodeList *masternodeListPage;
+ GovernanceList *governanceListPage;
TransactionView *transactionView;
@@ -83,6 +86,8 @@ public Q_SLOTS:
void gotoMasternodePage();
/** Switch to receive coins page */
void gotoReceiveCoinsPage();
+ /** Switch to governance page */
+ void gotoGovernancePage();
/** Switch to send coins page */
void gotoSendCoinsPage(QString addr = "");