PIVX Core  5.6.99
P2P Digital Currency
pwidget.cpp
Go to the documentation of this file.
1 // Copyright (c) 2019-2021 The PIVX Core developers
2 // Distributed under the MIT software license, see the accompanying
3 // file COPYING or http://www.opensource.org/licenses/mit-license.php.
4 
5 #include "pwidget.h"
6 #include "loadingdialog.h"
7 #include "qtutils.h"
8 
9 #include <QRunnable>
10 #include <QThreadPool>
11 
12 PWidget::PWidget(PIVXGUI* _window, QWidget *parent) : QWidget((parent) ? parent : _window), window(_window) { init(); }
13 PWidget::PWidget(PWidget* parent) : QWidget(parent), window(parent->getWindow()) { init(); }
14 
16 {
17  if (window)
19 }
20 
22 {
23  this->clientModel = model;
25 }
26 
28 {
29  this->walletModel = model;
31 }
32 
33 void PWidget::onChangeTheme(bool isLightTheme, QString& theme)
34 {
35  this->setStyleSheet(theme);
36  changeTheme(isLightTheme, theme);
37  updateStyle(this);
38 }
39 
40 void PWidget::showHideOp(bool show)
41 {
42  Q_EMIT showHide(show);
43 }
44 
45 void PWidget::inform(const QString& message)
46 {
48 }
49 
50 void PWidget::warn(const QString& title, const QString& message)
51 {
53 }
54 
55 bool PWidget::ask(const QString& title, const QString& message)
56 {
57  bool ret = false;
59  return ret;
60 }
61 
62 void PWidget::showDialog(QDialog *dlg, int xDiv, int yDiv)
63 {
64  Q_EMIT execDialog(dlg, xDiv, yDiv);
65 }
66 
67 void PWidget::emitMessage(const QString& title, const QString& body, unsigned int style, bool* ret)
68 {
69  Q_EMIT message(title, body, style, ret);
70 }
71 
72 class WorkerTask : public QRunnable
73 {
74 public:
75  explicit WorkerTask(QPointer<Worker> worker) {
76  this->worker = worker;
77  }
78 
80  if (!worker.isNull()) worker.clear();
81  }
82 
83  void run() override {
84  if (!worker.isNull()) {
85  Worker* _worker = worker.data();
86  _worker->process();
87  _worker->clean();
88  }
89  }
90 
91  QPointer<Worker> worker;
92 };
93 
94 bool PWidget::execute(int type, std::unique_ptr<WalletModel::UnlockContext> pctx)
95 {
96  if (task.isNull()) {
97  Worker* worker = (!pctx) ? new Worker(this, type) : new WalletWorker(this, type, std::move(pctx));
98  connect(worker, &Worker::error, this, &PWidget::errorString);
99 
100  WorkerTask* workerTask = new WorkerTask(QPointer<Worker>(worker));
101  workerTask->setAutoDelete(false);
102  task = QSharedPointer<WorkerTask>(workerTask);
103  } else if (pctx){
104  if (task->worker.isNull() || !task->worker.data()) // Must never happen
105  throw std::runtime_error("Worker task null");
106 
107  // Update context
108  if (dynamic_cast<WalletWorker*>(task->worker.data()) != nullptr) {
109  WalletWorker* _worker = static_cast<WalletWorker*>(task->worker.data());
110  _worker->setContext(std::move(pctx));
111  }
112  // Update type
113  task->worker->setType(type);
114  }
115  QThreadPool::globalInstance()->start(task.data());
116  return true;
117 }
118 
119 void PWidget::errorString(QString error, int type)
120 {
121  onError(error, type);
122 }
123 
124 
128 
129 
130 void PWidget::loadClientModel() { /* override*/ }
131 void PWidget::loadWalletModel() { /* override*/ }
132 void PWidget::changeTheme(bool isLightTheme, QString& theme) { /* override*/ }
133 void PWidget::run(int type) { /* override*/ }
134 void PWidget::onError(QString error, int type) { /* override*/ }
@ BTN_MASK
Mask of all available buttons in CClientUIInterface::MessageBoxFlags This needs to be updated,...
Definition: guiinterface.h:62
@ MSG_INFORMATION
Predefined combinations for certain default usage cases.
Definition: guiinterface.h:77
@ MODAL
Force blocking, modal message box dialog (not just OS notification)
Definition: guiinterface.h:71
Model for PIVX network client.
Definition: clientmodel.h:50
PIVX GUI main class.
Definition: pivxgui.h:46
void themeChanged(bool isLightTheme, QString &theme)
QSharedPointer< WorkerTask > task
Definition: pwidget.h:73
void setClientModel(ClientModel *model)
Definition: pwidget.cpp:21
PIVXGUI * window
Definition: pwidget.h:59
void inform(const QString &message)
Definition: pwidget.cpp:45
WalletModel * walletModel
Definition: pwidget.h:61
void setWalletModel(WalletModel *model)
Definition: pwidget.cpp:27
void showDialog(QDialog *dialog, int xDiv=3, int yDiv=5)
Definition: pwidget.cpp:62
PWidget(PIVXGUI *_window=nullptr, QWidget *parent=nullptr)
Definition: pwidget.cpp:12
void onError(QString error, int type) override
Definition: pwidget.cpp:134
void warn(const QString &title, const QString &message)
Definition: pwidget.cpp:50
ClientModel * clientModel
Definition: pwidget.h:60
bool execute(int type, std::unique_ptr< WalletModel::UnlockContext > pctx=nullptr)
Definition: pwidget.cpp:94
void run(int type) override
Definition: pwidget.cpp:133
bool execDialog(QDialog *dialog, int xDiv=3, int yDiv=5)
void showHideOp(bool show)
Definition: pwidget.cpp:40
void message(const QString &title, const QString &body, unsigned int style, bool *ret=nullptr)
void showHide(bool show)
void init()
Definition: pwidget.cpp:15
virtual void loadWalletModel()
Definition: pwidget.cpp:131
void errorString(QString, int)
Definition: pwidget.cpp:119
void onChangeTheme(bool isLightTheme, QString &theme)
Definition: pwidget.cpp:33
bool ask(const QString &title, const QString &message)
Definition: pwidget.cpp:55
virtual void loadClientModel()
Definition: pwidget.cpp:130
virtual void changeTheme(bool isLightTheme, QString &theme)
Definition: pwidget.cpp:132
void emitMessage(const QString &title, const QString &message, unsigned int style, bool *ret=nullptr)
Definition: pwidget.cpp:67
Interface to PIVX wallet from Qt view code.
Definition: walletmodel.h:109
void setContext(std::unique_ptr< WalletModel::UnlockContext > _pctx)
Definition: loadingdialog.h:54
virtual void clean()
Definition: loadingdialog.h:27
void error(QString err, int type)
void process()
QPointer< Worker > worker
Definition: pwidget.cpp:91
WorkerTask(QPointer< Worker > worker)
Definition: pwidget.cpp:75
~WorkerTask()
Definition: pwidget.cpp:79
void run() override
Definition: pwidget.cpp:83
bool isLightTheme()
Definition: qtutils.cpp:210
void updateStyle(QWidget *widget)
Definition: qtutils.cpp:225
bool error(const char *fmt, const Args &... args)
Definition: system.h:77