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 \
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 \
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
SetStartOnSystemStartup(true);
#endif
+#if 0
#ifndef GUI
while (1)
Sleep(5000);
#endif
+#endif
return true;
}
/* Forward declarations */
class TransactionTableModel;
+class ClientModel;
QT_BEGIN_NAMESPACE
class QLabel;
Q_OBJECT
public:
explicit BitcoinGUI(QWidget *parent = 0);
+ void setModel(ClientModel *model);
/* Transaction table tab indices */
enum {
} TabIndex;
private:
TransactionTableModel *transaction_model;
+ ClientModel *model;
QLineEdit *address;
QLabel *labelBalance;
--- /dev/null
+#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
* W.J. van der Laan 2011
*/
#include "bitcoingui.h"
+#include "clientmodel.h"
#include "util.h"
+#include "init.h"
#include <QApplication>
{
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");
+ }
}
#include "sendcoinsdialog.h"
#include "optionsdialog.h"
#include "aboutdialog.h"
+#include "clientmodel.h"
#include <QApplication>
#include <QMainWindow>
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);
--- /dev/null
+#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());
+}