PRCYCoin  2.0.0.7rc1
P2P Digital Currency
splashscreen.cpp
Go to the documentation of this file.
1 // Copyright (c) 2011-2014 The Bitcoin developers
2 // Copyright (c) 2014-2015 The Dash developers
3 // Copyright (c) 2015-2018 The PIVX developers
4 // Copyright (c) 2018-2020 The DAPS Project developers
5 // Distributed under the MIT/X11 software license, see the accompanying
6 // file COPYING or http://www.opensource.org/licenses/mit-license.php.
7 
8 #include "splashscreen.h"
9 
10 #include "clientversion.h"
11 #include "init.h"
12 #include "networkstyle.h"
13 #include "guiinterface.h"
14 #include "util.h"
15 #include "version.h"
16 
17 #ifdef ENABLE_WALLET
18 #include "wallet/wallet.h"
19 #endif
20 
21 #include <QApplication>
22 #include <QCloseEvent>
23 #include <QDesktopWidget>
24 #include <QPainter>
25 
26 SplashScreen::SplashScreen(Qt::WindowFlags f, const NetworkStyle* networkStyle) : QWidget(0, f), curAlignment(0)
27 {
28  // set reference point, paddings
29  int paddingLeft = 14;
30  int paddingTop = 420;
31  int titleVersionVSpace = 17;
32  int titleCopyrightVSpace = 48;
33 
34  float fontFactor = 1.0;
35 
36  // define text to place
37  QString titleText = tr("PRivaCY Coin Wallet");
38  fLiteMode = GetBoolArg("-litemode", false);
39  if (fLiteMode) {
40  titleText = tr("PRivaCY Coin Lite Mode Wallet");
41  }
42  QString versionText = QString(tr("Version %1")).arg(QString::fromStdString(FormatFullVersion()));
43  QString copyrightTextBtc = QChar(0xA9) + QString(" 2009-%1 ").arg(COPYRIGHT_YEAR) + QString(tr("The Bitcoin Core developers"));
44  QString copyrightTextDash = QChar(0xA9) + QString(" 2014-%1 ").arg(COPYRIGHT_YEAR) + QString(tr("The Dash Core developers"));
45  QString copyrightTextPivx = QChar(0xA9) + QString(" 2015-%1 ").arg(COPYRIGHT_YEAR) + QString(tr("The PIVX Core developers"));
46  QString copyrightTextDAPS = QChar(0xA9) + QString(" 2018-%1 ").arg(COPYRIGHT_YEAR) + QString(tr("The DAPS Project developers"));
47  QString copyrightTextPRCY = QChar(0xA9) + QString(" 2020-%1 ").arg(COPYRIGHT_YEAR) + QString(tr("The PRivaCY Coin developers"));
48  QString titleAddText = networkStyle->getTitleAddText();
49 
50  QString font = QApplication::font().toString();
51 
52  // load the bitmap for writing some text over it
53  pixmap = networkStyle->getSplashImage();
54 
55  QPainter pixPaint(&pixmap);
56  pixPaint.setPen(QColor(200, 200, 200));
57 
58  // check font size and drawing with
59  pixPaint.setFont(QFont(font, 28 * fontFactor));
60  QFontMetrics fm = pixPaint.fontMetrics();
61  int titleTextWidth = fm.width(titleText);
62  if (titleTextWidth > 160) {
63  // strange font rendering, Arial probably not found
64  fontFactor = 0.75;
65  }
66 
67  pixPaint.setFont(QFont(font, 28 * fontFactor));
68  fm = pixPaint.fontMetrics();
69  pixPaint.drawText(paddingLeft, paddingTop, titleText);
70 
71  pixPaint.setFont(QFont(font, 14 * fontFactor));
72  pixPaint.drawText(paddingLeft, paddingTop + titleVersionVSpace, versionText);
73 
74  // draw copyright stuff
75  pixPaint.setFont(QFont(font, 11 * fontFactor));
76  pixPaint.drawText(paddingLeft, paddingTop + titleCopyrightVSpace, copyrightTextBtc);
77  pixPaint.drawText(paddingLeft, paddingTop + titleCopyrightVSpace + 12, copyrightTextDash);
78  pixPaint.drawText(paddingLeft, paddingTop + titleCopyrightVSpace + 24, copyrightTextPivx);
79  pixPaint.drawText(paddingLeft, paddingTop + titleCopyrightVSpace + 36, copyrightTextDAPS);
80  pixPaint.drawText(paddingLeft, paddingTop + titleCopyrightVSpace + 48, copyrightTextPRCY);
81 
82  // draw additional text if special network
83  if (!titleAddText.isEmpty()) {
84  QFont boldFont = QFont(font, 10 * fontFactor);
85  boldFont.setWeight(QFont::Bold);
86  pixPaint.setFont(boldFont);
87  fm = pixPaint.fontMetrics();
88  int titleAddTextWidth = fm.width(titleAddText);
89  pixPaint.drawText(pixmap.width() - titleAddTextWidth - 10, pixmap.height() - 25, titleAddText);
90  }
91 
92  pixPaint.end();
93 
94  // Set window title
95  setWindowTitle(titleText + " " + titleAddText);
96 
97  // Resize window and move to center of desktop, disallow resizing
98  QRect r(QPoint(), pixmap.size());
99  resize(r.size());
100  setFixedSize(r.size());
101  move(QApplication::desktop()->screenGeometry().center() - r.center());
102 
104 }
105 
107 {
109 }
110 
111 void SplashScreen::slotFinish(QWidget* mainWin)
112 {
113  Q_UNUSED(mainWin);
114  hide();
115 }
116 
117 static void InitMessage(SplashScreen* splash, const std::string& message)
118 {
119  QMetaObject::invokeMethod(splash, "showMessage",
120  Qt::QueuedConnection,
121  Q_ARG(QString, QString::fromStdString(message)),
122  Q_ARG(int, Qt::AlignBottom | Qt::AlignHCenter),
123  Q_ARG(QColor, QColor(100, 100, 100)));
124 }
125 
126 static void ShowProgress(SplashScreen* splash, const std::string& title, int nProgress)
127 {
128  InitMessage(splash, title + strprintf("%d", nProgress) + "%");
129 }
130 
131 #ifdef ENABLE_WALLET
132 static void ConnectWallet(SplashScreen* splash, CWallet* wallet)
133 {
134  wallet->ShowProgress.connect(boost::bind(ShowProgress, splash, _1, _2));
135 }
136 #endif
137 
139 {
140  // Connect signals to client
141  uiInterface.InitMessage.connect(boost::bind(InitMessage, this, _1));
142  uiInterface.ShowProgress.connect(boost::bind(ShowProgress, this, _1, _2));
143 #ifdef ENABLE_WALLET
144  uiInterface.LoadWallet.connect(boost::bind(ConnectWallet, this, _1));
145 #endif
146 }
147 
149 {
150  // Disconnect signals from client
151  uiInterface.InitMessage.disconnect(boost::bind(InitMessage, this, _1));
152  uiInterface.ShowProgress.disconnect(boost::bind(ShowProgress, this, _1, _2));
153 #ifdef ENABLE_WALLET
154  if (pwalletMain)
155  pwalletMain->ShowProgress.disconnect(boost::bind(ShowProgress, this, _1, _2));
156 #endif
157 }
158 
159 void SplashScreen::showMessage(const QString& message, int alignment, const QColor& color)
160 {
161  curMessage = message;
162  curAlignment = alignment;
163  curColor = color;
164  update();
165 }
166 
167 void SplashScreen::paintEvent(QPaintEvent* event)
168 {
169  QPainter painter(this);
170  painter.drawPixmap(0, 0, pixmap);
171  QRect r = rect().adjusted(5, 5, -5, -5);
172  painter.setPen(curColor);
173  painter.drawText(r, curAlignment, curMessage);
174 }
175 
176 void SplashScreen::closeEvent(QCloseEvent* event)
177 {
178  StartShutdown(); // allows an "emergency" shutdown during startup
179  event->ignore();
180 }
SplashScreen::curAlignment
int curAlignment
Definition: splashscreen.h:46
NetworkStyle::getSplashImage
const QPixmap & getSplashImage() const
Definition: networkstyle.h:22
COPYRIGHT_YEAR
#define COPYRIGHT_YEAR
Definition: prcycoin-config.h:27
StartShutdown
void StartShutdown()
Definition: init.cpp:131
uiInterface
CClientUIInterface uiInterface
Definition: init.cpp:101
wallet.h
NetworkStyle
Definition: networkstyle.h:13
clientversion.h
guiinterface.h
version.h
r
void const uint64_t uint64_t * r
Definition: field_5x52_asm_impl.h:10
CClientUIInterface::InitMessage
boost::signals2::signal< void(const std::string &message)> InitMessage
Progress message during initialization.
Definition: guiinterface.h:83
SplashScreen::unsubscribeFromCoreSignals
void unsubscribeFromCoreSignals()
Disconnect core signals to splash screen.
Definition: splashscreen.cpp:148
SplashScreen::~SplashScreen
~SplashScreen()
Definition: splashscreen.cpp:106
init.h
fLiteMode
bool fLiteMode
Definition: util.cpp:100
SplashScreen::subscribeToCoreSignals
void subscribeToCoreSignals()
Connect core signals to splash screen.
Definition: splashscreen.cpp:138
GetBoolArg
bool GetBoolArg(const std::string &strArg, bool fDefault)
Return boolean argument or default value.
Definition: util.cpp:255
CWallet::ShowProgress
boost::signals2::signal< void(const std::string &title, int nProgress)> ShowProgress
Show progress e.g.
Definition: wallet.h:610
SplashScreen::curMessage
QString curMessage
Definition: splashscreen.h:44
SplashScreen::showMessage
void showMessage(const QString &message, int alignment, const QColor &color)
Show message and progress.
Definition: splashscreen.cpp:159
SplashScreen::pixmap
QPixmap pixmap
Definition: splashscreen.h:43
NetworkStyle::getTitleAddText
const QString & getTitleAddText() const
Definition: networkstyle.h:21
titleAddText
const char * titleAddText
Definition: networkstyle.cpp:15
strprintf
#define strprintf
Definition: tinyformat.h:1056
SplashScreen
Class for the splashscreen with information of the running client.
Definition: splashscreen.h:18
CClientUIInterface::LoadWallet
boost::signals2::signal< void(CWallet *wallet)> LoadWallet
A wallet has been loaded.
Definition: guiinterface.h:98
splashscreen.h
networkstyle.h
CWallet
A CWallet is an extension of a keystore, which also maintains a set of transactions and balances,...
Definition: wallet.h:243
SplashScreen::SplashScreen
SplashScreen(Qt::WindowFlags f, const NetworkStyle *networkStyle)
Definition: splashscreen.cpp:26
SplashScreen::slotFinish
void slotFinish(QWidget *mainWin)
Slot to call finish() method as it's not defined as slot.
Definition: splashscreen.cpp:111
SplashScreen::curColor
QColor curColor
Definition: splashscreen.h:45
SplashScreen::closeEvent
void closeEvent(QCloseEvent *event)
Definition: splashscreen.cpp:176
FormatFullVersion
std::string FormatFullVersion()
Definition: clientversion.cpp:80
CClientUIInterface::ShowProgress
boost::signals2::signal< void(const std::string &title, int nProgress)> ShowProgress
Show progress e.g.
Definition: guiinterface.h:101
SplashScreen::paintEvent
void paintEvent(QPaintEvent *event)
Definition: splashscreen.cpp:167
pwalletMain
CWallet * pwalletMain
Definition: wallet.cpp:49