PIVX Core  5.6.99
P2P Digital Currency
proposalcard.cpp
Go to the documentation of this file.
1 // Copyright (c) 2021-2022 The PIVX Core developers
2 // Distributed under the MIT software license, see the accompanying
3 // file COPYING or https://www.opensource.org/licenses/mit-license.php.
4 
5 #include "proposalcard.h"
6 #include "ui_proposalcard.h"
7 
8 #include "qtutils.h"
9 
10 ProposalCard::ProposalCard(QWidget *parent) :
11  QWidget(parent),
12  ui(new Ui::ProposalCard)
13 {
14  ui->setupUi(this);
15  setStyleSheet(parent->styleSheet());
16  setCssProperty(ui->btnVote, "btn-primary");
17  setCssProperty(ui->card, "card-governance");
18  setCssProperty(ui->labelPropName, "card-title");
19  setCssProperty(ui->labelPropAmount, "card-amount");
20  setCssProperty(ui->labelPropMonths, "card-time");
21  setCssProperty(ui->labelStatus, "card-status-passing");
22  setCssProperty(ui->btnVote, "card-btn-vote");
23  setCssProperty(ui->btnLink, "btn-menu");
24  setCssProperty(ui->containerVotes, "card-progress-box");
25  ui->containerVotes->setContentsMargins(1,1,1,1);
26  ui->containerVotes->layout()->setMargin(0);
27  ui->votesBar->setMaximum(100);
28  ui->votesBar->setMinimum(0);
29  ui->votesBar->setTextVisible(false);
30  setCssProperty(ui->votesBar, "vote-progress");
31  ui->votesBar->setContentsMargins(0,0,0,0);
32 
33  connect(ui->btnVote, &QPushButton::clicked, [this](){ Q_EMIT voteClicked(proposalInfo); });
34  connect(ui->btnLink, &QPushButton::clicked, this, &ProposalCard::onCopyUrlClicked);
35 }
36 
37 void ProposalCard::setProposal(const ProposalInfo& _proposalInfo)
38 {
39  proposalInfo = _proposalInfo;
40  ui->labelPropName->setText(QString::fromStdString(proposalInfo.name));
41  ui->labelPropName->setToolTip(QString::fromStdString(proposalInfo.name));
42  ui->labelPropAmount->setText(GUIUtil::formatBalance(proposalInfo.amount));
43  ui->labelPropMonths->setText(proposalInfo.remainingPayments < 0 ? tr("Inactive proposal") :
44  proposalInfo.remainingPayments == 0 ? tr("Last month in course") :
45  tr("%1 of %2 months left").arg(proposalInfo.remainingPayments).arg(proposalInfo.totalPayments));
46  double totalVotes = _proposalInfo.votesYes + _proposalInfo.votesNo;
47  double percentageNo = (totalVotes == 0) ? 0 : (_proposalInfo.votesNo / totalVotes) * 100;
48  double percentageYes = (totalVotes == 0) ? 0 : (_proposalInfo.votesYes / totalVotes) * 100;
49  ui->labelNo->setText(QString::number(percentageNo) + "% " + tr("No"));
50  ui->labelYes->setText(tr("Yes") + " " + QString::number(percentageYes) + "%");
51 
52  QString cssClassStatus;
54  cssClassStatus = "card-status-no-votes";
55  setStatusAndVotes(tr("Waiting"), 50);
57  cssClassStatus = "card-status-no-votes";
58  setStatusAndVotes(tr("Finished"), 50);
59  } else if (totalVotes == 0) {
60  cssClassStatus = "card-status-no-votes";
61  setStatusAndVotes(tr("No Votes"), 50);
63  cssClassStatus = "card-status-not-passing";
64  setStatusAndVotes(tr("Not Passing"), (int)percentageNo);
66  cssClassStatus = "card-status-not-passing";
67  setStatusAndVotes(tr("Over Budget"), (int)percentageNo);
69  cssClassStatus = "card-status-passing";
70  setStatusAndVotes(tr("Passing"), (int)percentageNo);
71  }
72  setCssProperty(ui->labelStatus, cssClassStatus, true);
73 }
74 
75 void ProposalCard::setStatusAndVotes(const QString& msg, int value)
76 {
77  ui->labelStatus->setText(msg);
78  ui->votesBar->setValue(value);
79 }
80 
82 {
83  Q_EMIT onMenuClicked(this);
84 }
85 
87 {
88  delete ui;
89 }
ProposalInfo proposalInfo
Definition: proposalcard.h:42
~ProposalCard() override
void setProposal(const ProposalInfo &_proposalInfo)
void setStatusAndVotes(const QString &msg, int value)
void onCopyUrlClicked()
ProposalCard(QWidget *parent=nullptr)
Ui::ProposalCard * ui
Definition: proposalcard.h:41
void onMenuClicked(ProposalCard *card)
QString formatBalance(CAmount amount, int nDisplayUnit, bool isZpiv)
Definition: guiutil.cpp:119
void setCssProperty(std::initializer_list< QWidget * > args, const QString &value)
Definition: qtutils.cpp:334
int remainingPayments
Amount of times that the proposal was paid already.
int totalPayments
Amount of times that the proposal will be paid.
CAmount amount
Amount of PIV paid per month.
std::string name
Status status
Proposal state.