/src/qt/smartproposal.cpp

https://github.com/SmartCash/Core-Smart · C++ · 142 lines · 107 code · 35 blank · 0 comment · 13 complexity · a6ccb7b96c954141223a5f105acd5f17 MD5 · raw file

  1. #include "smartproposal.h"
  2. #include "ui_smartproposal.h"
  3. #include "amount.h"
  4. #include "bitcoinunits.h"
  5. #include "math.h"
  6. #include <QDesktopServices>
  7. SmartProposalWidget::SmartProposalWidget(SmartProposal * proposal, QWidget *parent) :
  8. QFrame(parent),
  9. ui(new Ui::SmartProposalWidget)
  10. {
  11. ui->setupUi(this);
  12. voteSelection.addButton(ui->disabledButton, 0);
  13. voteSelection.addButton(ui->yesButton, 1);
  14. voteSelection.addButton(ui->noButton, 2);
  15. voteSelection.addButton(ui->abstainButton, 3);
  16. this->proposal = *proposal;
  17. QDateTime deadline = QDateTime::fromString(proposal->getVotingDeadline(), Qt::ISODate);
  18. deadline.setTimeSpec(Qt::UTC);
  19. QDateTime created = QDateTime::fromString(proposal->getCreatedDate(), Qt::ISODate);
  20. deadline.setTimeSpec(Qt::UTC);
  21. QDateTime current = QDateTime::currentDateTimeUtc();
  22. time_t deadlineSec = deadline.toTime_t();
  23. time_t createdSec = created.toTime_t();
  24. time_t currentSec = current.toTime_t();
  25. time_t totalSec = deadlineSec - createdSec;
  26. time_t remainingSec = deadlineSec - currentSec;
  27. int votingProgress = 100 - (double(remainingSec) / double(totalSec) * 100);
  28. ui->deadlineLabel->setText(deadline.toString(Qt::SystemLocaleLongDate));
  29. ui->deadlineProgress->setValue(votingProgress);
  30. QString proposalTitle = QString("#%1 - %2").arg(proposal->getProposalId()).arg(proposal->getTitle());
  31. ui->titleLabel->setText(proposalTitle);
  32. CAmount yes = proposal->getVoteYes() * COIN;
  33. CAmount no = proposal->getVoteNo() * COIN;
  34. CAmount abstain = proposal->getVoteAbstain() * COIN;
  35. QString smartString = QString::number(std::round(proposal->getAmountSmart()),'f',0);
  36. QString usdString = QString::number(std::round(proposal->getAmountUSD()),'f',0);
  37. QString yesString = QString::number(std::round(int(yes / COIN + ( double(yes % COIN) / COIN ))),'f',0);
  38. QString noString = QString::number(std::round(int(no / COIN + ( double(no % COIN) / COIN ))),'f',0);
  39. QString abstainString = QString::number(std::round(int(abstain / COIN + ( double(abstain % COIN) / COIN ))), 'f',0);
  40. AddThousandsSpaces(smartString);
  41. AddThousandsSpaces(usdString);
  42. AddThousandsSpaces(yesString);
  43. AddThousandsSpaces(noString);
  44. AddThousandsSpaces(abstainString);
  45. ui->amountSmartLabel->setText(QString("%1 USD").arg(usdString));
  46. ui->amountUSDLabel->setText(QString("%1 SMART").arg(smartString));
  47. ui->yesLabel->setText(QString("Yes %1\% ( %2 SMART )").arg(QString::number(proposal->getPercentYes(), 'f',2)).arg(yesString));
  48. ui->noLabel->setText(QString("No %1\% ( %2 SMART )").arg(QString::number(proposal->getPercentNo(), 'f',2)).arg(noString));
  49. ui->abstainLabel->setText(QString("Abstain %1\% ( %2 SMART )").arg(QString::number(proposal->getPercentAbstain(), 'f',2)).arg(abstainString));
  50. ui->progressYes->setValue( (int)proposal->getPercentYes() );
  51. ui->progressNo->setValue( (int)proposal->getPercentNo() );
  52. ui->progressAbstain->setValue( (int)proposal->getPercentAbstain() );
  53. int yesVoted = std::round(proposal->getVotedAmount(SmartHiveVoting::Yes));
  54. int noVoted = std::round(proposal->getVotedAmount(SmartHiveVoting::No));
  55. int abstainVoted = std::round(proposal->getVotedAmount(SmartHiveVoting::Abstain));
  56. int invalidVotes = std::round(proposal->getVotedAmount(SmartHiveVoting::Disabled));
  57. QString votedString = "";
  58. if( yesVoted ){
  59. QString yesString = QString::number(yesVoted,'f',0);
  60. AddThousandsSpaces(yesString);
  61. votedString += "YES - " + yesString + "\n";
  62. }
  63. if( noVoted ){
  64. QString noString = QString::number(noVoted,'f',0);
  65. AddThousandsSpaces(noString);
  66. votedString += "NO - " + noString + "\n";
  67. }
  68. if( abstainVoted ){
  69. QString abstainString = QString::number(abstainVoted,'f',0);
  70. AddThousandsSpaces(abstainString);
  71. votedString += "ABSTAIN - " + abstainString + "\n";
  72. }
  73. if( invalidVotes ){
  74. QString invalidString = QString::number(invalidVotes,'f',0);
  75. AddThousandsSpaces(invalidString);
  76. votedString += "INVALID - " + invalidString + "\n";
  77. }
  78. if( votedString != "" ){
  79. ui->votedLabel->setText(votedString);
  80. }
  81. connect(ui->viewProposalButton, SIGNAL(clicked()),this, SLOT(viewProposal()));
  82. connect(ui->disabledButton, SIGNAL(clicked()), this, SLOT(voteButtonClicked()));
  83. connect(ui->yesButton, SIGNAL(clicked()), this, SLOT(voteButtonClicked()));
  84. connect(ui->noButton, SIGNAL(clicked()), this, SLOT(voteButtonClicked()));
  85. connect(ui->abstainButton, SIGNAL(clicked()), this, SLOT(voteButtonClicked()));
  86. }
  87. void SmartProposalWidget::viewProposal(){
  88. QDesktopServices::openUrl(QUrl("https://vote.smartcash.cc/Proposal/Details/" + proposal.getUrl()));
  89. }
  90. void SmartProposalWidget::voteButtonClicked(){
  91. voteChanged();
  92. }
  93. SmartProposalWidget::~SmartProposalWidget()
  94. {
  95. delete ui;
  96. }
  97. SmartHiveVoting::Type SmartProposalWidget::getVoteType()
  98. {
  99. if( voteSelection.checkedId() == 1) return SmartHiveVoting::Yes;
  100. if( voteSelection.checkedId() == 2) return SmartHiveVoting::No;
  101. if( voteSelection.checkedId() == 3) return SmartHiveVoting::Abstain;
  102. return SmartHiveVoting::Disabled;
  103. }
  104. bool SmartProposalWidget::voted()
  105. {
  106. return ui->votedLabel->text() != "Nothing";
  107. }