diff options
author | Wladimir J. van der Laan <laanwj@gmail.com> | 2011-05-22 17:19:43 +0200 |
---|---|---|
committer | Wladimir J. van der Laan <laanwj@gmail.com> | 2011-05-22 17:19:43 +0200 |
commit | 18cab09a959bc3f62e5112be5cb5ad61f871d963 (patch) | |
tree | f3f328a7cfe1a58bb5f488a79ecbf49cfd94ac65 | |
parent | ad88e7626ba5ac2274d7ec9c218537ec7df0ad50 (diff) | |
download | bitcoin-18cab09a959bc3f62e5112be5cb5ad61f871d963.tar.xz |
core initialisation, client model binding
-rw-r--r-- | bitcoin.pro | 8 | ||||
-rw-r--r-- | core/src/init.cpp | 2 | ||||
-rw-r--r-- | gui/include/bitcoingui.h | 3 | ||||
-rw-r--r-- | gui/include/clientmodel.h | 31 | ||||
-rw-r--r-- | gui/src/bitcoin.cpp | 34 | ||||
-rw-r--r-- | gui/src/bitcoingui.cpp | 21 | ||||
-rw-r--r-- | gui/src/clientmodel.cpp | 58 |
7 files changed, 144 insertions, 13 deletions
diff --git a/bitcoin.pro b/bitcoin.pro index e87169e898..f323182308 100644 --- a/bitcoin.pro +++ b/bitcoin.pro @@ -4,6 +4,7 @@ DEPENDPATH += . INCLUDEPATH += gui/include core/include cryptopp/include json/include unix:LIBS += -lssl -lboost_system -lboost_filesystem -lboost_program_options -lboost_thread -ldb_cxx macx:DEFINES += __WXMAC_OSX__ MSG_NOSIGNAL=0 +# WINDOWS defines, -DSSL, look at build system # Input HEADERS += gui/include/bitcoingui.h \ @@ -51,7 +52,9 @@ HEADERS += gui/include/bitcoingui.h \ json/include/json/json_spirit_reader.h \ json/include/json/json_spirit_error_position.h \ json/include/json/json_spirit.h \ - core/include/rpc.h + core/include/rpc.h \ + gui/src/clientmodel.h \ + gui/include/clientmodel.h SOURCES += gui/src/bitcoin.cpp gui/src/bitcoingui.cpp \ gui/src/transactiontablemodel.cpp \ gui/src/addresstablemodel.cpp \ @@ -74,7 +77,8 @@ SOURCES += gui/src/bitcoin.cpp gui/src/bitcoingui.cpp \ core/src/db.cpp \ json/src/json_spirit_writer.cpp \ json/src/json_spirit_value.cpp \ - json/src/json_spirit_reader.cpp + json/src/json_spirit_reader.cpp \ + gui/src/clientmodel.cpp RESOURCES += \ gui/bitcoin.qrc diff --git a/core/src/init.cpp b/core/src/init.cpp index 3126d3489e..5528c430f9 100644 --- a/core/src/init.cpp +++ b/core/src/init.cpp @@ -513,10 +513,12 @@ bool AppInit2(int argc, char* argv[]) SetStartOnSystemStartup(true); #endif +#if 0 #ifndef GUI while (1) Sleep(5000); #endif +#endif return true; } diff --git a/gui/include/bitcoingui.h b/gui/include/bitcoingui.h index 9142b6b84b..3b722fcca4 100644 --- a/gui/include/bitcoingui.h +++ b/gui/include/bitcoingui.h @@ -6,6 +6,7 @@ /* Forward declarations */ class TransactionTableModel; +class ClientModel; QT_BEGIN_NAMESPACE class QLabel; @@ -17,6 +18,7 @@ class BitcoinGUI : public QMainWindow Q_OBJECT public: explicit BitcoinGUI(QWidget *parent = 0); + void setModel(ClientModel *model); /* Transaction table tab indices */ enum { @@ -27,6 +29,7 @@ public: } TabIndex; private: TransactionTableModel *transaction_model; + ClientModel *model; QLineEdit *address; QLabel *labelBalance; diff --git a/gui/include/clientmodel.h b/gui/include/clientmodel.h new file mode 100644 index 0000000000..fb1a5edebc --- /dev/null +++ b/gui/include/clientmodel.h @@ -0,0 +1,31 @@ +#ifndef CLIENTMODEL_H +#define CLIENTMODEL_H + +#include <QObject> + +class ClientModel : public QObject +{ + Q_OBJECT +public: + explicit ClientModel(QObject *parent = 0); + + double getBalance(); + QString getAddress(); + int getNumConnections(); + int getNumBlocks(); + int getNumTransactions(); + +signals: + void balanceChanged(double balance); + void addressChanged(const QString &address); + void numConnectionsChanged(int count); + void numBlocksChanged(int count); + void numTransactionsChanged(int count); + +public slots: + +private slots: + void update(); +}; + +#endif // CLIENTMODEL_H diff --git a/gui/src/bitcoin.cpp b/gui/src/bitcoin.cpp index a5f4a05a07..c843cc406e 100644 --- a/gui/src/bitcoin.cpp +++ b/gui/src/bitcoin.cpp @@ -2,7 +2,9 @@ * W.J. van der Laan 2011 */ #include "bitcoingui.h" +#include "clientmodel.h" #include "util.h" +#include "init.h" #include <QApplication> @@ -10,19 +12,29 @@ int main(int argc, char *argv[]) { QApplication app(argc, argv); - /* Testing on testnet */ - fTestNet = true; + try { + if(AppInit2(argc, argv)) + { + ClientModel model; + BitcoinGUI window; + window.setModel(&model); - BitcoinGUI window; - window.setBalance(1234.567890); - window.setNumConnections(4); - window.setNumTransactions(4); - window.setNumBlocks(33); - window.setAddress("123456789"); + window.show(); - window.show(); + /* Depending on settings: QApplication::setQuitOnLastWindowClosed(false); */ + int retval = app.exec(); - /* Depending on settings: QApplication::setQuitOnLastWindowClosed(false); */ + Shutdown(NULL); - return app.exec(); + return retval; + } + else + { + return 1; + } + } catch (std::exception& e) { + PrintException(&e, "Runaway exception"); + } catch (...) { + PrintException(NULL, "Runaway exception"); + } } diff --git a/gui/src/bitcoingui.cpp b/gui/src/bitcoingui.cpp index e7cd34aaa6..5546a0ecfb 100644 --- a/gui/src/bitcoingui.cpp +++ b/gui/src/bitcoingui.cpp @@ -9,6 +9,7 @@ #include "sendcoinsdialog.h" #include "optionsdialog.h" #include "aboutdialog.h" +#include "clientmodel.h" #include <QApplication> #include <QMainWindow> @@ -139,6 +140,26 @@ void BitcoinGUI::createActions() connect(about, SIGNAL(triggered()), this, SLOT(aboutClicked())); } +void BitcoinGUI::setModel(ClientModel *model) +{ + this->model = model; + + setBalance(model->getBalance()); + connect(model, SIGNAL(balanceChanged(double)), this, SLOT(setBalance(double))); + + setNumConnections(model->getNumConnections()); + connect(model, SIGNAL(numConnectionsChanged(int)), this, SLOT(setNumConnections(int))); + + setNumTransactions(model->getNumTransactions()); + connect(model, SIGNAL(numTransactionsChanged(int)), this, SLOT(setNumTransactions(int))); + + setNumBlocks(model->getNumBlocks()); + connect(model, SIGNAL(numBlocksChanged(int)), this, SLOT(setNumBlocks(int))); + + setAddress(model->getAddress()); + connect(model, SIGNAL(addressChanged(QString)), this, SLOT(setAddress(QString))); +} + void BitcoinGUI::createTrayIcon() { QMenu *trayIconMenu = new QMenu(this); diff --git a/gui/src/clientmodel.cpp b/gui/src/clientmodel.cpp new file mode 100644 index 0000000000..0f191023b7 --- /dev/null +++ b/gui/src/clientmodel.cpp @@ -0,0 +1,58 @@ +#include "clientmodel.h" +#include "main.h" + +#include <QTimer> + +/* milliseconds between model updates */ +const int MODEL_UPDATE_DELAY = 250; + +ClientModel::ClientModel(QObject *parent) : + QObject(parent) +{ + /* 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); +} + +double ClientModel::getBalance() +{ + return GetBalance(); +} + +QString ClientModel::getAddress() +{ + std::vector<unsigned char> vchPubKey; + if (CWalletDB("r").ReadDefaultKey(vchPubKey)) + { + return QString::fromStdString(PubKeyToAddress(vchPubKey)); + } else { + return QString(); + } +} + +int ClientModel::getNumConnections() +{ + return vNodes.size(); +} + +int ClientModel::getNumBlocks() +{ + return nBestHeight; +} + +int ClientModel::getNumTransactions() +{ + return 0; +} + +void ClientModel::update() +{ + emit balanceChanged(getBalance()); + emit addressChanged(getAddress()); + emit numConnectionsChanged(getNumConnections()); + emit numBlocksChanged(getNumBlocks()); + emit numTransactionsChanged(getNumTransactions()); +} |