Master Core  v0.0.9 - 2abfd2849db8ba7a83957c64eb976b406713c123
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Pages
splashscreen.cpp
Go to the documentation of this file.
1 // Copyright (c) 2011-2014 The Bitcoin developers
2 // Distributed under the MIT/X11 software license, see the accompanying
3 // file COPYING or http://www.opensource.org/licenses/mit-license.php.
4 
5 #include "splashscreen.h"
6 
7 #include "clientversion.h"
8 #include "init.h"
9 #include "ui_interface.h"
10 #include "util.h"
11 #ifdef ENABLE_WALLET
12 #include "wallet.h"
13 #endif
14 #include <QMessageBox>
15 #include <QApplication>
16 #include <QPainter>
17 #include <boost/lexical_cast.hpp>
18 #include "mastercore_version.h"
19 
20 SplashScreen::SplashScreen(const QPixmap &pixmap, Qt::WindowFlags f, bool isTestNet) :
21  QSplashScreen(pixmap, f)
22 {
23  setAutoFillBackground(true);
24 
25  // set reference point, paddings
26  int paddingRight = 50;
27  int paddingTop = 50;
28  int titleVersionVSpace = 17;
29  int titleCopyrightVSpace = 40;
30  int titleCopyrightMSCVSpace = 17;
31 
32  float fontFactor = 1.0;
33 
34  // define text to place
35  string coreVersionStr = "Experimental UI 0.0." + boost::lexical_cast<string>((double)OMNICORE_VERSION_BASE/10) + OMNICORE_VERSION_TYPE;
36  QString titleText = tr("Master Core");
37  QString versionText = QString::fromStdString(coreVersionStr);
38  QString copyrightText = QChar(0xA9)+QString(" 2009-%1 ").arg(COPYRIGHT_YEAR) + QString(tr("The Bitcoin Core developers"));
39  QString copyrightMSC = QChar(0xA9)+QString(" 2013-%1 ").arg(COPYRIGHT_YEAR) + QString(tr("The Master Protocol developers"));
40  QString testnetAddText = QString(tr("[testnet]")); // define text to place as single text object
41 
42  QString font = "Arial";
43 
44  // load the bitmap for writing some text over it
45  QPixmap newPixmap;
46  if(isTestNet) {
47  newPixmap = QPixmap(":/images/splash_testnet");
48  }
49  else {
50  newPixmap = QPixmap(":/images/splash");
51  }
52 
53  QPainter pixPaint(&newPixmap);
54  pixPaint.setPen(QColor(100,100,100));
55 
56  // check font size and drawing with
57  pixPaint.setFont(QFont(font, 33*fontFactor));
58  QFontMetrics fm = pixPaint.fontMetrics();
59  int titleTextWidth = fm.width(titleText);
60  if(titleTextWidth > 160) {
61  // strange font rendering, Arial probably not found
62  fontFactor = 0.75;
63  }
64 
65  pixPaint.setFont(QFont(font, 33*fontFactor));
66  fm = pixPaint.fontMetrics();
67  titleTextWidth = fm.width(titleText);
68  pixPaint.drawText(newPixmap.width()-titleTextWidth-paddingRight,paddingTop,titleText);
69 
70  pixPaint.setFont(QFont(font, 15*fontFactor));
71 
72  // if the version string is to long, reduce size
73  fm = pixPaint.fontMetrics();
74  int versionTextWidth = fm.width(versionText);
75  if(versionTextWidth > titleTextWidth+paddingRight-10) {
76  pixPaint.setFont(QFont(font, 10*fontFactor));
77  titleVersionVSpace -= 5;
78  }
79  pixPaint.drawText(newPixmap.width()-titleTextWidth-paddingRight+2,paddingTop+titleVersionVSpace,versionText);
80 
81  // draw copyright stuff
82  pixPaint.setFont(QFont(font, 10*fontFactor));
83  pixPaint.drawText(newPixmap.width()-titleTextWidth-paddingRight+2,paddingTop+titleCopyrightVSpace,copyrightText);
84  pixPaint.drawText(newPixmap.width()-titleTextWidth-paddingRight+2,paddingTop+titleCopyrightVSpace+titleCopyrightMSCVSpace,copyrightMSC);
85 
86  // draw testnet string if testnet is on
87  if(isTestNet) {
88  QFont boldFont = QFont(font, 10*fontFactor);
89  boldFont.setWeight(QFont::Bold);
90  pixPaint.setFont(boldFont);
91  fm = pixPaint.fontMetrics();
92  int testnetAddTextWidth = fm.width(testnetAddText);
93  pixPaint.drawText(newPixmap.width()-testnetAddTextWidth-10,15,testnetAddText);
94  }
95 
96  pixPaint.end();
97 
98  this->setPixmap(newPixmap);
99 
101 }
102 
104 {
106 }
107 
109 {
110  finish(mainWin);
111 }
112 
113 static void InitMessage(SplashScreen *splash, const std::string &message)
114 {
115  QMetaObject::invokeMethod(splash, "showMessage",
116  Qt::QueuedConnection,
117  Q_ARG(QString, QString::fromStdString(message)),
118  Q_ARG(int, Qt::AlignBottom|Qt::AlignHCenter),
119  Q_ARG(QColor, QColor(55,55,55)));
120 }
121 
122 static void ShowProgress(SplashScreen *splash, const std::string &title, int nProgress)
123 {
124  InitMessage(splash, title + strprintf("%d", nProgress) + "%");
125 }
126 
127 #ifdef ENABLE_WALLET
128 static void ConnectWallet(SplashScreen *splash, CWallet* wallet)
129 {
130  wallet->ShowProgress.connect(boost::bind(ShowProgress, splash, _1, _2));
131 }
132 #endif
133 
135 {
136  // Connect signals to client
137  uiInterface.InitMessage.connect(boost::bind(InitMessage, this, _1));
138 #ifdef ENABLE_WALLET
139  uiInterface.LoadWallet.connect(boost::bind(ConnectWallet, this, _1));
140 #endif
141 }
142 
144 {
145  // Disconnect signals from client
146  uiInterface.InitMessage.disconnect(boost::bind(InitMessage, this, _1));
147 #ifdef ENABLE_WALLET
148  if(pwalletMain)
149  pwalletMain->ShowProgress.disconnect(boost::bind(ShowProgress, this, _1, _2));
150 #endif
151 }
CClientUIInterface uiInterface
Definition: util.cpp:100
#define COPYRIGHT_YEAR
void unsubscribeFromCoreSignals()
Disconnect core signals to splash screen.
#define OMNICORE_VERSION_TYPE
#define OMNICORE_VERSION_BASE
class for the splashscreen with information of the running client
Definition: splashscreen.h:12
static void ShowProgress(SplashScreen *splash, const std::string &title, int nProgress)
void subscribeToCoreSignals()
Connect core signals to splash screen.
SplashScreen(const QPixmap &pixmap, Qt::WindowFlags f, bool isTestNet)
#define strprintf
Definition: util.h:116
boost::signals2::signal< void(CWallet *wallet)> LoadWallet
A wallet has been loaded.
Definition: ui_interface.h:96
static void InitMessage(SplashScreen *splash, const std::string &message)
void slotFinish(QWidget *mainWin)
Slot to call finish() method as it's not defined as slot.
A CWallet is an extension of a keystore, which also maintains a set of transactions and balances...
Definition: wallet.h:100
boost::signals2::signal< void(const std::string &title, int nProgress)> ShowProgress
Show progress e.g.
Definition: wallet.h:398
boost::signals2::signal< void(const std::string &message)> InitMessage
Progress message during initialization.
Definition: ui_interface.h:78
CWallet * pwalletMain