PIVX Core  5.6.99
P2P Digital Currency
settingswidget.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 
6 #include "qt/settings/forms/ui_settingswidget.h"
7 
8 #include "clientmodel.h"
9 #include "defaultdialog.h"
10 #include "optionsmodel.h"
11 #include "qtutils.h"
12 #include "utilitydialog.h"
13 #include <QDataWidgetMapper>
14 #include <QScrollBar>
15 
17  PWidget(parent),
18  ui(new Ui::SettingsWidget)
19 {
20  ui->setupUi(this);
21 
22  this->setStyleSheet(parent->styleSheet());
23 
24  /* Containers */
25  setCssProperty(ui->scrollArea, "container");
26  setCssProperty(ui->left, "container");
27  ui->left->setContentsMargins(0,20,0,20);
28  setCssProperty(ui->right, "container-right");
29  ui->right->setContentsMargins(20,10,20,20);
30 
31  ui->verticalLayout->setAlignment(Qt::AlignTop);
32 
33  /* Light Font */
34  QFont fontLight;
35  fontLight.setWeight(QFont::Light);
36 
37  /* Title */
38  setCssProperty(ui->labelTitle, "text-title-screen");
39  ui->labelTitle->setFont(fontLight);
40 
41  setCssProperty(ui->pushButtonFile, "btn-settings-check");
42  setCssProperty(ui->pushButtonFile2, "btn-settings-options");
43  setCssProperty(ui->pushButtonExportCsv, "btn-settings-options");
44 
45  setCssProperty(ui->pushButtonConfiguration, "btn-settings-check");
46  setCssProperty(ui->pushButtonConfiguration3, "btn-settings-options");
47  setCssProperty(ui->pushButtonConfiguration4, "btn-settings-options");
48 
49  setCssProperty(ui->pushButtonOptions, "btn-settings-check");
50  setCssProperty(ui->pushButtonOptions1, "btn-settings-options");
51  setCssProperty(ui->pushButtonOptions2, "btn-settings-options");
52  setCssProperty(ui->pushButtonOptions5, "btn-settings-options");
53 
54  setCssProperty(ui->pushButtonTools, "btn-settings-check");
55  setCssProperty(ui->pushButtonTools1, "btn-settings-options");
56  setCssProperty(ui->pushButtonTools2, "btn-settings-options");
57  setCssProperty(ui->pushButtonTools5, "btn-settings-options");
58 
59  setCssProperty(ui->pushButtonHelp, "btn-settings-check");
60  setCssProperty(ui->pushButtonHelp1, "btn-settings-options");
61  setCssProperty(ui->pushButtonHelp2, "btn-settings-options");
62 
63  options = {
64  ui->pushButtonFile2,
65  ui->pushButtonExportCsv,
66  ui->pushButtonOptions1,
67  ui->pushButtonOptions2,
68  ui->pushButtonOptions5,
69  ui->pushButtonConfiguration3,
70  ui->pushButtonConfiguration4,
71  ui->pushButtonHelp2,
72  ui->pushButtonTools1,
73  ui->pushButtonTools2,
74  ui->pushButtonTools5,
75  };
76 
77  menus.insert(ui->pushButtonFile, ui->fileButtonsWidget);
78  menus.insert(ui->pushButtonConfiguration, ui->configurationButtonsWidget);
79  menus.insert(ui->pushButtonOptions, ui->optionsButtonsWidget);
80  menus.insert(ui->pushButtonTools, ui->toolsButtonsWidget);
81  menus.insert(ui->pushButtonHelp, ui->helpButtonsWidget);
82 
93 
94  ui->stackedWidgetContainer->addWidget(settingsBackupWallet);
95  ui->stackedWidgetContainer->addWidget(settingsExportCsvWidget);
96  ui->stackedWidgetContainer->addWidget(settingsBitToolWidget);
97  ui->stackedWidgetContainer->addWidget(settingsSingMessageWidgets);
98  ui->stackedWidgetContainer->addWidget(settingsWalletRepairWidget);
99  ui->stackedWidgetContainer->addWidget(settingsWalletOptionsWidget);
100  ui->stackedWidgetContainer->addWidget(settingsMainOptionsWidget);
101  ui->stackedWidgetContainer->addWidget(settingsDisplayOptionsWidget);
102  ui->stackedWidgetContainer->addWidget(settingsInformationWidget);
103  ui->stackedWidgetContainer->addWidget(settingsConsoleWidget);
104  ui->stackedWidgetContainer->setCurrentWidget(settingsBackupWallet);
105 
106  // File Section
107  connect(ui->pushButtonFile, &QPushButton::clicked, this, &SettingsWidget::onFileClicked);
108  connect(ui->pushButtonFile2, &QPushButton::clicked, this, &SettingsWidget::onBackupWalletClicked);
109  connect(ui->pushButtonExportCsv, &QPushButton::clicked, this, &SettingsWidget::onExportCSVClicked);
110 
111  // Options
112  connect(ui->pushButtonOptions, &QPushButton::clicked, this, &SettingsWidget::onOptionsClicked);
113  connect(ui->pushButtonOptions1, &QPushButton::clicked, this, &SettingsWidget::onMainOptionsClicked);
114  connect(ui->pushButtonOptions2, &QPushButton::clicked, this, &SettingsWidget::onWalletOptionsClicked);
115  connect(ui->pushButtonOptions5, &QPushButton::clicked, this, &SettingsWidget::onDisplayOptionsClicked);
116 
117  // Configuration
118  connect(ui->pushButtonConfiguration, &QPushButton::clicked, this, &SettingsWidget::onConfigurationClicked);
119  connect(ui->pushButtonConfiguration3, &QPushButton::clicked, this, &SettingsWidget::onBipToolClicked);
120  connect(ui->pushButtonConfiguration4, &QPushButton::clicked, this, &SettingsWidget::onSignMessageClicked);
121 
122  // Tools
123  connect(ui->pushButtonTools, &QPushButton::clicked, this, &SettingsWidget::onToolsClicked);
124  connect(ui->pushButtonTools1, &QPushButton::clicked, this, &SettingsWidget::onInformationClicked);
125  connect(ui->pushButtonTools2, &QPushButton::clicked, this, &SettingsWidget::onDebugConsoleClicked);
126  ui->pushButtonTools2->setShortcut(QKeySequence(SHORT_KEY + Qt::Key_C));
127  connect(ui->pushButtonTools5, &QPushButton::clicked, this, &SettingsWidget::onWalletRepairClicked);
128 
129  // Help
130  connect(ui->pushButtonHelp, &QPushButton::clicked, this, &SettingsWidget::onHelpClicked);
131  connect(ui->pushButtonHelp1, &QPushButton::clicked, [this](){window->openFAQ();});
132  connect(ui->pushButtonHelp2, &QPushButton::clicked, this, &SettingsWidget::onAboutClicked);
133 
134  // Get restart command-line parameters and handle restart
135  connect(settingsWalletRepairWidget, &SettingsWalletRepairWidget::handleRestart, [this](QStringList arg){Q_EMIT handleRestart(arg);});
136 
147 
150 
153 
156 
158 
159  /* Widget-to-option mapper */
160  mapper = new QDataWidgetMapper(this);
161  mapper->setSubmitPolicy(QDataWidgetMapper::ManualSubmit);
162  mapper->setOrientation(Qt::Vertical);
163 
164  // scroll area
165  ui->scrollArea->setWidgetResizable(true);
166  QSizePolicy scrollAreaPolicy = ui->scrollArea->sizePolicy();
167  scrollAreaPolicy.setVerticalStretch(1);
168  ui->scrollArea->setSizePolicy(scrollAreaPolicy);
169  QSizePolicy scrollVertPolicy = ui->scrollAreaWidgetContents->sizePolicy();
170  scrollVertPolicy.setVerticalStretch(1);
171  ui->scrollAreaWidgetContents->setSizePolicy(scrollVertPolicy);
172 
173  ui->pushButtonFile->setChecked(true);
174  onFileClicked();
175  ui->pushButtonFile2->setChecked(true);
176 }
177 
179 {
180  if (clientModel) {
183 
184  OptionsModel *optionsModel = this->clientModel->getOptionsModel();
185  if (optionsModel) {
189 
190  mapper->setModel(optionsModel);
191  setMapper();
192  mapper->toFirst();
193  }
194  }
195 }
196 
198 {
206 }
207 
209 {
210  if (walletModel) {
211  // confirmation dialog
212  if (!ask(tr("Confirm options reset"), tr("Client restart required to activate changes.") + "<br><br>" + tr("Client will be shutdown, do you want to proceed?")))
213  return;
214 
215  /* reset all options and close GUI */
216  this->clientModel->getOptionsModel()->Reset();
217  QApplication::quit();
218  }
219 }
220 
222 {
223  // Save settings that are stored inside the wallet only
225  return;
226  }
227 
228  // Save port mapping settings
230 
231  if (mapper->submit()) {
232  OptionsModel* optionsModel = this->clientModel->getOptionsModel();
233  if (optionsModel->isRestartRequired()) {
234  bool fAcceptRestart = openStandardDialog(tr("Restart required"), tr("Your wallet needs to be restarted to apply the changes\n"), tr("Restart Now"), tr("Restart Later"));
235 
236  if (fAcceptRestart) {
237  // Get command-line arguments and remove the application name
238  QStringList args = QApplication::arguments();
239  args.removeFirst();
240 
241  // Remove existing repair-options
242  args.removeAll(SALVAGEWALLET);
243  args.removeAll(RESCAN);
244  args.removeAll(ZAPTXES1);
245  args.removeAll(ZAPTXES2);
246  args.removeAll(UPGRADEWALLET);
247  args.removeAll(REINDEX);
248 
249  Q_EMIT handleRestart(args);
250  } else {
251  inform(tr("Options will be applied on next wallet restart"));
252  }
253  } else {
254  inform(tr("Options stored"));
255  }
256  } else {
257  inform(tr("Options store failed"));
258  }
259 }
260 
261 void SettingsWidget::selectMenu(QPushButton* btn)
262 {
263  QWidget* subMenuSelected = menus[btn];
264  if (btn->isChecked()) {
265  QMapIterator<QPushButton*, QWidget*> it(menus);
266  while (it.hasNext()) {
267  it.next();
268  QWidget* value = it.value();
269  QPushButton* key = it.key();
270  value->setVisible(value == subMenuSelected);
271  if (key != btn) key->setChecked(false);
272  }
273  } else {
274  subMenuSelected->setVisible(false);
275  }
276 }
277 
279 {
280  selectMenu(ui->pushButtonFile);
281 }
282 
284 {
285  ui->stackedWidgetContainer->setCurrentWidget(settingsBackupWallet);
286  selectOption(ui->pushButtonFile2);
287 }
288 
290 {
291  ui->stackedWidgetContainer->setCurrentWidget(settingsSingMessageWidgets);
292  selectOption(ui->pushButtonConfiguration4);
293 }
294 
296 {
297  selectMenu(ui->pushButtonConfiguration);
298 }
299 
301 {
302  ui->stackedWidgetContainer->setCurrentWidget(settingsBitToolWidget);
303  selectOption(ui->pushButtonConfiguration3);
304 }
305 
307 {
308  ui->stackedWidgetContainer->setCurrentWidget(settingsExportCsvWidget);
309  selectOption(ui->pushButtonExportCsv);
310 }
311 
313 {
314  selectMenu(ui->pushButtonOptions);
315 }
316 
318 {
319  ui->stackedWidgetContainer->setCurrentWidget(settingsMainOptionsWidget);
320  selectOption(ui->pushButtonOptions1);
321 }
322 
324 {
325  ui->stackedWidgetContainer->setCurrentWidget(settingsWalletOptionsWidget);
326  selectOption(ui->pushButtonOptions2);
327 }
328 
330 {
331  ui->stackedWidgetContainer->setCurrentWidget(settingsDisplayOptionsWidget);
332  selectOption(ui->pushButtonOptions5);
333 }
334 
335 
337 {
338  selectMenu(ui->pushButtonTools);
339 }
340 
342 {
343  ui->stackedWidgetContainer->setCurrentWidget(settingsInformationWidget);
344  selectOption(ui->pushButtonTools1);
345 }
346 
348 {
349  ui->pushButtonTools->setChecked(true);
350  onToolsClicked();
351  ui->pushButtonTools2->setChecked(true);
353 }
354 
356 {
357  ui->pushButtonTools->setChecked(true);
358  onToolsClicked();
359  ui->pushButtonTools1->setChecked(true);
361 }
362 
364 {
365  ui->stackedWidgetContainer->setCurrentWidget(settingsConsoleWidget);
366  selectOption(ui->pushButtonTools2);
367 }
368 
370 {
371  ui->stackedWidgetContainer->setCurrentWidget(settingsWalletRepairWidget);
372  selectOption(ui->pushButtonTools5);
373 }
374 
375 
377 {
378  selectMenu(ui->pushButtonHelp);
379 }
380 
382 {
383  if (!clientModel)
384  return;
385 
386  HelpMessageDialog dlg(this, true);
387  dlg.exec();
388 
389 }
390 
392 {
394 }
395 
396 void SettingsWidget::selectOption(QPushButton* option)
397 {
398  for (QPushButton* wid : options) {
399  if (wid) wid->setChecked(wid == option);
400  }
401 }
402 
404 {
405  if (clientModel) {
406  if (!ask(tr("Discard Unsaved Changes"), tr("You are just about to discard all of your unsaved options.\n\nAre you sure?\n")))
407  return;
409  }
411 }
412 
414 {
418 }
419 
420 bool SettingsWidget::openStandardDialog(const QString& title, const QString& body, const QString& okBtn, const QString& cancelBtn)
421 {
422  showHideOp(true);
423  DefaultDialog *confirmDialog = new DefaultDialog(window);
424  confirmDialog->setText(title, body, okBtn, cancelBtn);
425  confirmDialog->adjustSize();
426  openDialogWithOpaqueBackground(confirmDialog, window);
427  confirmDialog->deleteLater();
428  return confirmDialog->isOk;
429 }
430 
432 {
433  delete ui;
434 }
OptionsModel * getOptionsModel()
void setText(const QString &title="", const QString &message="", const QString &okBtnText="", const QString &cancelBtnText="")
"Help message" dialog box
Definition: utilitydialog.h:22
Interface from Qt to configuration data structure for PIVX client.
Definition: optionsmodel.h:22
bool isRestartRequired()
void refreshDataView()
PIVX GUI main class.
Definition: pivxgui.h:46
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
ClientModel * clientModel
Definition: pwidget.h:60
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)
bool ask(const QString &title, const QString &message)
Definition: pwidget.cpp:55
void setMapper(QDataWidgetMapper *mapper)
void setMapper(QDataWidgetMapper *mapper)
void setMapper(QDataWidgetMapper *mapper)
void handleRestart(QStringList args)
Get restart command-line parameters and handle restart.
QMap< QPushButton *, QWidget * > menus
void onInformationClicked()
void onSignMessageClicked()
SettingsMainOptionsWidget * settingsMainOptionsWidget
void onBackupWalletClicked()
SettingsBitToolWidget * settingsBitToolWidget
void handleRestart(QStringList args)
Get restart command-line parameters and handle restart.
void loadClientModel() override
SettingsWalletOptionsWidget * settingsWalletOptionsWidget
QList< QPushButton * > options
SettingsConsoleWidget * settingsConsoleWidget
bool openStandardDialog(const QString &title="", const QString &body="", const QString &okBtn="OK", const QString &cancelBtn="")
Ui::SettingsWidget * ui
SettingsInformationWidget * settingsInformationWidget
void onDisplayOptionsClicked()
SettingsSignMessageWidgets * settingsSingMessageWidgets
void selectOption(QPushButton *option)
void loadWalletModel() override
void onConfigurationClicked()
QDataWidgetMapper * mapper
SettingsDisplayOptionsWidget * settingsDisplayOptionsWidget
void onDebugConsoleClicked()
void onWalletOptionsClicked()
SettingsExportCSV * settingsExportCsvWidget
void onMainOptionsClicked()
void onSaveOptionsClicked()
SettingsWalletRepairWidget * settingsWalletRepairWidget
void onWalletRepairClicked()
SettingsWidget(PIVXGUI *parent)
SettingsBackupWallet * settingsBackupWallet
void selectMenu(QPushButton *btn)
@ REINDEX
Definition: logging.h:51
Qt::Modifier SHORT_KEY
Definition: qtutils.cpp:19
bool openDialogWithOpaqueBackground(QDialog *widget, PIVXGUI *gui, double posX)
Definition: qtutils.cpp:76
void setCssProperty(std::initializer_list< QWidget * > args, const QString &value)
Definition: qtutils.cpp:334
const QString ZAPTXES1("-zapwallettxes=1")
const QString ZAPTXES2("-zapwallettxes=2")
const QString UPGRADEWALLET("-upgradewallet")
const QString SALVAGEWALLET("-salvagewallet")
const QString RESCAN("-rescan")