gui/include/clientmodel.h \
gui/include/guiutil.h \
gui/include/transactionrecord.h \
- gui/include/guiconstants.h
+ gui/include/guiconstants.h \
+ gui/include/optionsmodel.h
SOURCES += gui/src/bitcoin.cpp gui/src/bitcoingui.cpp \
gui/src/transactiontablemodel.cpp \
gui/src/addresstablemodel.cpp \
json/src/json_spirit_reader.cpp \
gui/src/clientmodel.cpp \
gui/src/guiutil.cpp \
- gui/src/transactionrecord.cpp
+ gui/src/transactionrecord.cpp \
+ gui/src/optionsmodel.cpp
RESOURCES += \
gui/bitcoin.qrc
#define CLIENTMODEL_H
#include <QObject>
+class OptionsModel;
class ClientModel : public QObject
{
MiscError
};
+ OptionsModel *getOptionsModel();
+
qint64 getBalance();
QString getAddress();
int getNumConnections();
qint64 getTransactionFee();
StatusCode sendCoins(const QString &payTo, qint64 payAmount);
+private:
+ OptionsModel *options_model;
signals:
void balanceChanged(qint64 balance);
#include <QWidget>
+QT_BEGIN_NAMESPACE
+class QDataWidgetMapper;
+class QCheckBox;
+class QLineEdit;
+QT_END_NAMESPACE
+
+class OptionsModel;
+
class MainOptionsPage : public QWidget
{
Q_OBJECT
public:
- explicit MainOptionsPage(QWidget *parent = 0);
+ explicit MainOptionsPage(QWidget *parent=0);
+
+ void setMapper(QDataWidgetMapper *mapper);
+private:
+ QCheckBox *bitcoin_at_startup;
+ QCheckBox *minimize_to_tray;
+ QCheckBox *map_port_upnp;
+ QCheckBox *minimize_on_close;
+ QCheckBox *connect_socks4;
+ QLineEdit *proxy_ip;
+ QLineEdit *proxy_port;
+ QLineEdit *fee_edit;
signals:
class QStackedWidget;
class QListWidget;
class QListWidgetItem;
+class QDataWidgetMapper;
QT_END_NAMESPACE
+class OptionsModel;
+class MainOptionsPage;
class OptionsDialog : public QDialog
{
Q_OBJECT
public:
- explicit OptionsDialog(QWidget *parent = 0);
+ explicit OptionsDialog(QWidget *parent=0);
+
+ void setModel(OptionsModel *model);
signals:
private:
QListWidget *contents_widget;
QStackedWidget *pages_widget;
+ MainOptionsPage *main_options_page;
+ OptionsModel *model;
+ QDataWidgetMapper *mapper;
void setupMainPage();
};
--- /dev/null
+#ifndef OPTIONSMODEL_H
+#define OPTIONSMODEL_H
+
+#include <QAbstractListModel>
+
+class OptionsModel : public QAbstractListModel
+{
+ Q_OBJECT
+public:
+ explicit OptionsModel(QObject *parent = 0);
+
+ enum OptionID {
+ StartAtStartup,
+ MinimizeToTray,
+ MapPortUPnP,
+ MinimizeOnClose,
+ ConnectSOCKS4,
+ ProxyIP,
+ ProxyPort,
+ Fee,
+ OptionIDRowCount
+ };
+
+ int rowCount(const QModelIndex & parent = QModelIndex()) const;
+ QVariant data(const QModelIndex & index, int role = Qt::DisplayRole) const;
+ bool setData(const QModelIndex & index, const QVariant & value, int role = Qt::EditRole);
+
+signals:
+
+public slots:
+
+};
+
+#endif // OPTIONSMODEL_H
void BitcoinGUI::optionsClicked()
{
OptionsDialog dlg;
+ dlg.setModel(model->getOptionsModel());
dlg.exec();
}
#include "clientmodel.h"
#include "main.h"
#include "guiconstants.h"
+#include "optionsmodel.h"
#include <QTimer>
ClientModel::ClientModel(QObject *parent) :
- QObject(parent)
+ QObject(parent), options_model(0)
{
/* Until we build signal notifications into the bitcoin core,
simply update everything using a timer.
QTimer *timer = new QTimer(this);
connect(timer, SIGNAL(timeout()), this, SLOT(update()));
timer->start(MODEL_UPDATE_DELAY);
+
+ options_model = new OptionsModel(this);
}
qint64 ClientModel::getBalance()
return OK;
}
+OptionsModel *ClientModel::getOptionsModel()
+{
+ return options_model;
+}
#include "mainoptionspage.h"
+#include "optionsmodel.h"
#include <QHBoxLayout>
#include <QVBoxLayout>
#include <QCheckBox>
#include <QLabel>
#include <QLineEdit>
+#include <QDataWidgetMapper>
+#include <QDebug>
MainOptionsPage::MainOptionsPage(QWidget *parent):
QWidget(parent)
{
QVBoxLayout *layout = new QVBoxLayout();
- QCheckBox *bitcoin_at_startup = new QCheckBox(tr("&Start Bitcoin on window system startup"));
+ bitcoin_at_startup = new QCheckBox(tr("&Start Bitcoin on window system startup"));
layout->addWidget(bitcoin_at_startup);
- QCheckBox *minimize_to_tray = new QCheckBox(tr("&Minimize to the tray instead of the taskbar"));
+ minimize_to_tray = new QCheckBox(tr("&Minimize to the tray instead of the taskbar"));
layout->addWidget(minimize_to_tray);
- QCheckBox *map_port_upnp = new QCheckBox(tr("Map port using &UPnP"));
+ map_port_upnp = new QCheckBox(tr("Map port using &UPnP"));
layout->addWidget(map_port_upnp);
- QCheckBox *minimize_on_close = new QCheckBox(tr("M&inimize on close"));
+ minimize_on_close = new QCheckBox(tr("M&inimize on close"));
layout->addWidget(minimize_on_close);
- QCheckBox *connect_socks4 = new QCheckBox(tr("&Connect through socks4 proxy:"));
+ connect_socks4 = new QCheckBox(tr("&Connect through socks4 proxy:"));
layout->addWidget(connect_socks4);
QHBoxLayout *proxy_hbox = new QHBoxLayout();
proxy_hbox->addSpacing(18);
QLabel *proxy_ip_label = new QLabel(tr("Proxy &IP: "));
proxy_hbox->addWidget(proxy_ip_label);
- QLineEdit *proxy_ip = new QLineEdit();
+ proxy_ip = new QLineEdit();
proxy_ip->setMaximumWidth(140);
proxy_ip_label->setBuddy(proxy_ip);
proxy_hbox->addWidget(proxy_ip);
QLabel *proxy_port_label = new QLabel(tr("&Port: "));
proxy_hbox->addWidget(proxy_port_label);
- QLineEdit *proxy_port = new QLineEdit();
+ proxy_port = new QLineEdit();
proxy_port->setMaximumWidth(55);
proxy_port_label->setBuddy(proxy_port);
proxy_hbox->addWidget(proxy_port);
fee_hbox->addSpacing(18);
QLabel *fee_label = new QLabel(tr("Pay transaction &fee"));
fee_hbox->addWidget(fee_label);
- QLineEdit *fee_edit = new QLineEdit();
+ fee_edit = new QLineEdit();
fee_edit->setMaximumWidth(70);
fee_label->setBuddy(fee_edit);
fee_hbox->addWidget(fee_edit);
layout->addLayout(fee_hbox);
-
layout->addStretch(1); /* Extra space at bottom */
setLayout(layout);
}
+void MainOptionsPage::setMapper(QDataWidgetMapper *mapper)
+{
+ /* Map model to widgets */
+ mapper->addMapping(bitcoin_at_startup, OptionsModel::StartAtStartup);
+ mapper->addMapping(minimize_to_tray, OptionsModel::MinimizeToTray);
+ mapper->addMapping(map_port_upnp, OptionsModel::MapPortUPnP);
+ mapper->addMapping(minimize_on_close, OptionsModel::MinimizeOnClose);
+ mapper->addMapping(connect_socks4, OptionsModel::ConnectSOCKS4);
+ mapper->addMapping(proxy_ip, OptionsModel::ProxyIP);
+ mapper->addMapping(proxy_port, OptionsModel::ProxyPort);
+ mapper->addMapping(fee_edit, OptionsModel::Fee);
+}
+
#include "optionsdialog.h"
+#include "optionsmodel.h"
#include "mainoptionspage.h"
#include <QHBoxLayout>
#include <QPushButton>
#include <QListWidget>
#include <QStackedWidget>
+#include <QDataWidgetMapper>
-OptionsDialog::OptionsDialog(QWidget *parent) :
- QDialog(parent), contents_widget(0), pages_widget(0)
+OptionsDialog::OptionsDialog(QWidget *parent):
+ QDialog(parent), contents_widget(0), pages_widget(0),
+ main_options_page(0), model(0)
{
contents_widget = new QListWidget();
contents_widget->setMaximumWidth(128);
QListWidgetItem *item_main = new QListWidgetItem(tr("Main"));
contents_widget->addItem(item_main);
- pages_widget->addWidget(new MainOptionsPage(this));
+ main_options_page = new MainOptionsPage(this);
+ pages_widget->addWidget(main_options_page);
contents_widget->setCurrentRow(0);
layout->addLayout(buttons);
-
setLayout(layout);
setWindowTitle(tr("Options"));
+ mapper = new QDataWidgetMapper();
+ mapper->setSubmitPolicy(QDataWidgetMapper::ManualSubmit);
+ mapper->setOrientation(Qt::Vertical);
+}
+
+void OptionsDialog::setModel(OptionsModel *model)
+{
+ this->model = model;
+
+ mapper->setModel(model);
+ main_options_page->setMapper(mapper);
+ mapper->toFirst();
}
void OptionsDialog::changePage(QListWidgetItem *current, QListWidgetItem *previous)
--- /dev/null
+#include "optionsmodel.h"
+#include "main.h"
+
+#include <QDebug>
+
+OptionsModel::OptionsModel(QObject *parent) :
+ QAbstractListModel(parent)
+{
+}
+
+int OptionsModel::rowCount(const QModelIndex & parent) const
+{
+ return OptionIDRowCount;
+}
+
+QVariant OptionsModel::data(const QModelIndex & index, int role) const
+{
+ qDebug() << "OptionsModel::data" << " " << index.row() << " " << role;
+ if(role == Qt::EditRole)
+ {
+ /* Delegate to specific column handlers */
+ switch(index.row())
+ {
+ case StartAtStartup:
+ return QVariant();
+ case MinimizeToTray:
+ return QVariant(fMinimizeToTray);
+ case MapPortUPnP:
+ return QVariant(fUseUPnP);
+ case MinimizeOnClose:
+ return QVariant(fMinimizeOnClose);
+ case ConnectSOCKS4:
+ return QVariant(fUseProxy);
+ case ProxyIP:
+ return QVariant(QString::fromStdString(addrProxy.ToStringIP()));
+ case ProxyPort:
+ return QVariant(QString::fromStdString(addrProxy.ToStringPort()));
+ case Fee:
+ return QVariant(QString::fromStdString(FormatMoney(nTransactionFee)));
+ default:
+ return QVariant();
+ }
+ }
+ return QVariant();
+}
+
+bool OptionsModel::setData(const QModelIndex & index, const QVariant & value, int role)
+{
+ qDebug() << "OptionsModel::setData" << " " << index.row() << "=" << value;
+ emit dataChanged(index, index);
+ return true;
+}
QMessageBox::Ok, QMessageBox::Ok);
ui->payAmount->setFocus();
break;
+ case ClientModel::OK:
+ accept();
+ break;
}
- /* TODO: send command to core, once this succeeds do accept() */
- //accept();
}
void SendCoinsDialog::on_pasteButton_clicked()