aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorWladimir J. van der Laan <laanwj@gmail.com>2011-05-22 17:19:43 +0200
committerWladimir J. van der Laan <laanwj@gmail.com>2011-05-22 17:19:43 +0200
commit18cab09a959bc3f62e5112be5cb5ad61f871d963 (patch)
treef3f328a7cfe1a58bb5f488a79ecbf49cfd94ac65
parentad88e7626ba5ac2274d7ec9c218537ec7df0ad50 (diff)
downloadbitcoin-18cab09a959bc3f62e5112be5cb5ad61f871d963.tar.xz
core initialisation, client model binding
-rw-r--r--bitcoin.pro8
-rw-r--r--core/src/init.cpp2
-rw-r--r--gui/include/bitcoingui.h3
-rw-r--r--gui/include/clientmodel.h31
-rw-r--r--gui/src/bitcoin.cpp34
-rw-r--r--gui/src/bitcoingui.cpp21
-rw-r--r--gui/src/clientmodel.cpp58
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());
+}