Skip to content

Commit

Permalink
Implementation of EditSideStakeDialog
Browse files Browse the repository at this point in the history
  • Loading branch information
jamescowens committed Oct 8, 2023
1 parent b51ce44 commit bf4d620
Show file tree
Hide file tree
Showing 6 changed files with 415 additions and 0 deletions.
4 changes: 4 additions & 0 deletions src/Makefile.qt.include
Original file line number Diff line number Diff line change
Expand Up @@ -82,6 +82,7 @@ QT_FORMS_UI = \
qt/forms/consolidateunspentwizardsendpage.ui \
qt/forms/diagnosticsdialog.ui \
qt/forms/editaddressdialog.ui \
qt/forms/editsidestakedialog.ui \
qt/forms/favoritespage.ui \
qt/forms/intro.ui \
qt/forms/mrcrequestpage.ui \
Expand Down Expand Up @@ -143,6 +144,7 @@ QT_MOC_CPP = \
qt/moc_csvmodelwriter.cpp \
qt/moc_diagnosticsdialog.cpp \
qt/moc_editaddressdialog.cpp \
qt/moc_editsidestakedialog.cpp \
qt/moc_favoritespage.cpp \
qt/moc_guiutil.cpp \
qt/moc_intro.cpp \
Expand Down Expand Up @@ -250,6 +252,7 @@ GRIDCOINRESEARCH_QT_H = \
qt/decoration.h \
qt/diagnosticsdialog.h \
qt/editaddressdialog.h \
qt/editsidestakedialog.h \
qt/favoritespage.h \
qt/guiconstants.h \
qt/guiutil.h \
Expand Down Expand Up @@ -342,6 +345,7 @@ GRIDCOINRESEARCH_QT_CPP = \
qt/decoration.cpp \
qt/diagnosticsdialog.cpp \
qt/editaddressdialog.cpp \
qt/editsidestakedialog.cpp \
qt/favoritespage.cpp \
qt/guiutil.cpp \
qt/intro.cpp \
Expand Down
1 change: 1 addition & 0 deletions src/qt/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,7 @@ add_library(gridcoinqt STATIC
decoration.cpp
diagnosticsdialog.cpp
editaddressdialog.cpp
editsidestakedialog.cpp
favoritespage.cpp
guiutil.cpp
intro.cpp
Expand Down
137 changes: 137 additions & 0 deletions src/qt/editsidestakedialog.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,137 @@
// Copyright (c) 2014-2023 The Gridcoin developers
// Distributed under the MIT/X11 software license, see the accompanying
// file COPYING or https://opensource.org/licenses/mit-license.php.

#include "editsidestakedialog.h"
#include "ui_editsidestakedialog.h"
#include "optionsmodel.h"
#include "sidestaketablemodel.h"
#include "guiutil.h"
#include "qt/decoration.h"

#include <QDataWidgetMapper>
#include <QMessageBox>

EditSideStakeDialog::EditSideStakeDialog(Mode mode, QWidget* parent)
: QDialog(parent)
, ui(new Ui::EditSideStakeDialog)
, mapper(nullptr)
, mode(mode)
, model(nullptr)
{
ui->setupUi(this);

resize(GRC::ScaleSize(this, width(), height()));

GUIUtil::setupAddressWidget(ui->addressLineEdit, this);

switch (mode)
{
case NewSideStake:
setWindowTitle(tr("New SideStake"));
break;
case EditSideStake:
setWindowTitle(tr("Edit SideStake"));
ui->addressLineEdit->setEnabled(false);
break;
}

mapper = new QDataWidgetMapper(this);
mapper->setSubmitPolicy(QDataWidgetMapper::ManualSubmit);
}

EditSideStakeDialog::~EditSideStakeDialog()
{
delete ui;
}

void EditSideStakeDialog::setModel(OptionsModel *model)
{
this->model = model;
if (!model) {
return;
}

mapper->setModel(model);
mapper->addMapping(ui->addressLineEdit, SideStakeTableModel::Address);
mapper->addMapping(ui->allocationLineEdit, SideStakeTableModel::Allocation);
mapper->addMapping(ui->descriptionLineEdit, SideStakeTableModel::Description);
}

void EditSideStakeDialog::loadRow(int row)
{
mapper->setCurrentIndex(row);
}

bool EditSideStakeDialog::saveCurrentRow()
{
if (!model) {
return false;
}

switch (mode)
{
case NewSideStake:
address = model->getSideStakeTableModel()->addRow(ui->addressLineEdit->text(),
ui->allocationLineEdit->text(),
ui->descriptionLineEdit->text());
break;
case EditSideStake:
if (mapper->submit()) {
address = ui->addressLineEdit->text();
}
break;
}
return !address.isEmpty();
}

void EditSideStakeDialog::accept()
{
if (!model) {
return;
}

if (!saveCurrentRow())
{
switch(model->getSideStakeTableModel()->getEditStatus())
{
case SideStakeTableModel::OK:
// Failed with unknown reason. Just reject.
break;
case SideStakeTableModel::NO_CHANGES:
// No changes were made during edit operation. Just reject.
break;
case SideStakeTableModel::INVALID_ADDRESS:
QMessageBox::warning(this, windowTitle(),
tr("The entered address \"%1\" is not "
"a valid Gridcoin address.").arg(ui->addressLineEdit->text()),
QMessageBox::Ok, QMessageBox::Ok);
break;
case SideStakeTableModel::DUPLICATE_ADDRESS:
QMessageBox::warning(this, windowTitle(),
tr("The entered address \"%1\" is already "
"in the address book.").arg(ui->addressLineEdit->text()),
QMessageBox::Ok, QMessageBox::Ok);
break;
case SideStakeTableModel::INVALID_ALLOCATION:
QMessageBox::warning(this, windowTitle(),
tr("The entered allocation is not valid.").arg(ui->allocationLineEdit->text()),
QMessageBox::Ok, QMessageBox::Ok);

}
return;
}

QDialog::accept();
}

QString EditSideStakeDialog::getAddress() const
{
return address;
}

void EditSideStakeDialog::setAddress(const QString &address)
{
this->address = address;
ui->addressLineEdit->setText(address);
}
53 changes: 53 additions & 0 deletions src/qt/editsidestakedialog.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,53 @@
// Copyright (c) 2014-2023 The Gridcoin developers
// Distributed under the MIT/X11 software license, see the accompanying
// file COPYING or https://opensource.org/licenses/mit-license.php.

#ifndef BITCOIN_QT_EDITSIDESTAKEDIALOG_H
#define BITCOIN_QT_EDITSIDESTAKEDIALOG_H

#include <QDialog>

QT_BEGIN_NAMESPACE
class QDataWidgetMapper;
QT_END_NAMESPACE

namespace Ui {
class EditSideStakeDialog;
}
class OptionsModel;

/** Dialog for editing an address and associated information.
*/
class EditSideStakeDialog : public QDialog
{
Q_OBJECT

public:
enum Mode {
NewSideStake,
EditSideStake
};

explicit EditSideStakeDialog(Mode mode, QWidget* parent = nullptr);
~EditSideStakeDialog();

void setModel(OptionsModel *model);
void loadRow(int row);

QString getAddress() const;
void setAddress(const QString &address);

public slots:
void accept();

private:
bool saveCurrentRow();

Ui::EditSideStakeDialog *ui;
QDataWidgetMapper *mapper;
Mode mode;
OptionsModel *model;

QString address;
};
#endif // BITCOIN_QT_EDITSIDESTAKEDIALOG_H
Loading

0 comments on commit bf4d620

Please sign in to comment.