aboutsummaryrefslogtreecommitdiff
path: root/src/qt/bitcoin.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/qt/bitcoin.cpp')
-rw-r--r--src/qt/bitcoin.cpp185
1 files changed, 185 insertions, 0 deletions
diff --git a/src/qt/bitcoin.cpp b/src/qt/bitcoin.cpp
new file mode 100644
index 0000000000..cdd69e31a5
--- /dev/null
+++ b/src/qt/bitcoin.cpp
@@ -0,0 +1,185 @@
+/*
+ * W.J. van der Laan 2011
+ */
+#include "bitcoingui.h"
+#include "clientmodel.h"
+#include "walletmodel.h"
+#include "optionsmodel.h"
+#include "qtwin.h"
+
+#include "headers.h"
+#include "init.h"
+
+#include <QApplication>
+#include <QMessageBox>
+#include <QThread>
+#include <QLocale>
+#include <QTranslator>
+#include <QSplashScreen>
+
+// Need a global reference for the notifications to find the GUI
+BitcoinGUI *guiref;
+QSplashScreen *splashref;
+
+int MyMessageBox(const std::string& message, const std::string& caption, int style, wxWindow* parent, int x, int y)
+{
+ // Message from main thread
+ if(guiref)
+ {
+ guiref->error(QString::fromStdString(caption),
+ QString::fromStdString(message));
+ }
+ else
+ {
+ QMessageBox::critical(0, QString::fromStdString(caption),
+ QString::fromStdString(message),
+ QMessageBox::Ok, QMessageBox::Ok);
+ }
+ return 4;
+}
+
+int ThreadSafeMessageBox(const std::string& message, const std::string& caption, int style, wxWindow* parent, int x, int y)
+{
+ // Message from network thread
+ if(guiref)
+ {
+ QMetaObject::invokeMethod(guiref, "error", Qt::QueuedConnection,
+ Q_ARG(QString, QString::fromStdString(caption)),
+ Q_ARG(QString, QString::fromStdString(message)));
+ }
+ else
+ {
+ printf("%s: %s\n", caption.c_str(), message.c_str());
+ fprintf(stderr, "%s: %s\n", caption.c_str(), message.c_str());
+ }
+ return 4;
+}
+
+bool ThreadSafeAskFee(int64 nFeeRequired, const std::string& strCaption, wxWindow* parent)
+{
+ if(!guiref)
+ return false;
+ if(nFeeRequired < MIN_TX_FEE || nFeeRequired <= nTransactionFee || fDaemon)
+ return true;
+ bool payFee = false;
+
+ // Call slot on GUI thread.
+ // If called from another thread, use a blocking QueuedConnection.
+ Qt::ConnectionType connectionType = Qt::DirectConnection;
+ if(QThread::currentThread() != QCoreApplication::instance()->thread())
+ {
+ connectionType = Qt::BlockingQueuedConnection;
+ }
+
+ QMetaObject::invokeMethod(guiref, "askFee", connectionType,
+ Q_ARG(qint64, nFeeRequired),
+ Q_ARG(bool*, &payFee));
+
+ return payFee;
+}
+
+void CalledSetStatusBar(const std::string& strText, int nField)
+{
+ // Only used for built-in mining, which is disabled, simple ignore
+}
+
+void UIThreadCall(boost::function0<void> fn)
+{
+ // Only used for built-in mining, which is disabled, simple ignore
+}
+
+void MainFrameRepaint()
+{
+}
+
+void InitMessage(const std::string &message)
+{
+ if(splashref)
+ {
+ splashref->showMessage(QString::fromStdString(message), Qt::AlignBottom|Qt::AlignHCenter, QColor(255,255,200));
+ QApplication::instance()->processEvents();
+ }
+}
+
+/*
+ Translate string to current locale using Qt.
+ */
+std::string _(const char* psz)
+{
+ return QCoreApplication::translate("bitcoin-core", psz).toStdString();
+}
+
+int main(int argc, char *argv[])
+{
+ Q_INIT_RESOURCE(bitcoin);
+ QApplication app(argc, argv);
+
+ // Load language file for system locale
+ QString locale = QLocale::system().name();
+ QTranslator translator;
+ translator.load("bitcoin_"+locale);
+ app.installTranslator(&translator);
+
+ QSplashScreen splash(QPixmap(":/images/splash"), Qt::WindowStaysOnTopHint);
+ splash.show();
+ splash.setAutoFillBackground(true);
+ splashref = &splash;
+
+ app.processEvents();
+
+ app.setQuitOnLastWindowClosed(false);
+
+ try
+ {
+ if(AppInit2(argc, argv))
+ {
+ {
+ // Put this in a block, so that BitcoinGUI is cleaned up properly before
+ // calling Shutdown().
+ BitcoinGUI window;
+ splash.finish(&window);
+ OptionsModel optionsModel(pwalletMain);
+ ClientModel clientModel(&optionsModel);
+ WalletModel walletModel(pwalletMain, &optionsModel);
+
+ guiref = &window;
+ window.setClientModel(&clientModel);
+ window.setWalletModel(&walletModel);
+
+ if (QtWin::isCompositionEnabled())
+ {
+#ifdef Q_WS_WIN32
+ // Windows-specific customization
+ window.setAttribute(Qt::WA_TranslucentBackground);
+ window.setAttribute(Qt::WA_NoSystemBackground, false);
+ QPalette pal = window.palette();
+ QColor bg = pal.window().color();
+ bg.setAlpha(0);
+ pal.setColor(QPalette::Window, bg);
+ window.setPalette(pal);
+ window.ensurePolished();
+ window.setAttribute(Qt::WA_StyledBackground, false);
+#endif
+ QtWin::extendFrameIntoClientArea(&window);
+ window.setContentsMargins(0, 0, 0, 0);
+ }
+
+ window.show();
+
+ app.exec();
+
+ guiref = 0;
+ }
+ Shutdown(NULL);
+ }
+ else
+ {
+ return 1;
+ }
+ } catch (std::exception& e) {
+ PrintException(&e, "Runaway exception");
+ } catch (...) {
+ PrintException(NULL, "Runaway exception");
+ }
+ return 0;
+}