optionsdialog.h raw

   1  // Copyright (c) 2011-2022 The Limenka 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  #ifndef LIMENKA_QT_OPTIONSDIALOG_H
   6  #define LIMENKA_QT_OPTIONSDIALOG_H
   7  
   8  #include <QDialog>
   9  #include <QScrollArea>
  10  #include <QValidator>
  11  
  12  class LimenkaAmountField;
  13  class ClientModel;
  14  class OptionsModel;
  15  class QValidatedLineEdit;
  16  
  17  QT_BEGIN_NAMESPACE
  18  class QBoxLayout;
  19  class QCheckBox;
  20  class QDataWidgetMapper;
  21  class QDoubleSpinBox;
  22  class QEvent;
  23  class QRadioButton;
  24  class QSpinBox;
  25  class QString;
  26  class QValueComboBox;
  27  class QWidget;
  28  QT_END_NAMESPACE
  29  
  30  struct CreateOptionUIOpts;
  31  
  32  /** QScrollArea, but returning reasonable size hints.
  33   */
  34  class ModScrollArea : public QScrollArea {
  35      Q_OBJECT
  36  
  37  public:
  38      ModScrollArea();
  39      static ModScrollArea *fromWidget(QWidget *parent, QWidget *o);
  40  
  41      QSize minimumSizeHint() const override;
  42      QSize sizeHint() const override;
  43  };
  44  
  45  namespace Ui {
  46  class OptionsDialog;
  47  }
  48  
  49  /** Proxy address widget validator, checks for a valid proxy address.
  50   */
  51  class ProxyAddressValidator : public QValidator
  52  {
  53      Q_OBJECT
  54  
  55  public:
  56      explicit ProxyAddressValidator(QObject *parent);
  57  
  58      State validate(QString &input, int &pos) const override;
  59  };
  60  
  61  /** Preferences dialog. */
  62  class OptionsDialog : public QDialog
  63  {
  64      Q_OBJECT
  65  
  66  public:
  67      explicit OptionsDialog(QWidget *parent, bool enableWallet);
  68      ~OptionsDialog();
  69  
  70      enum Tab {
  71          TAB_MAIN,
  72          TAB_NETWORK,
  73      };
  74  
  75      void setClientModel(ClientModel* client_model);
  76      void setModel(OptionsModel *model);
  77      void setMapper();
  78      void setCurrentTab(OptionsDialog::Tab tab);
  79  
  80  private Q_SLOTS:
  81      void updateThemeColors();
  82  
  83      /* set OK button state (enabled / disabled) */
  84      void setOkButtonState(bool fState);
  85      void on_resetButton_clicked();
  86      void on_openLimenkaConfButton_clicked();
  87      void on_okButton_clicked();
  88      void on_cancelButton_clicked();
  89  
  90      void on_showTrayIcon_stateChanged(int state);
  91  
  92      void togglePruneWarning(bool enabled);
  93      void showRestartWarning(bool fPersistent = false);
  94      void clearStatusLabel();
  95      void updateProxyValidationState();
  96      /* query the networks, for which the default proxy is used */
  97      void updateDefaultProxyNets();
  98      void checkLineEdit();
  99  
 100      void incrementalrelayfee_changed();
 101      void blockmaxsize_changed(int);
 102      void blockmaxsize_increase(int);
 103      void blockmaxweight_changed(int);
 104  
 105  Q_SIGNALS:
 106      void proxyIpChecks(QValidatedLineEdit *pUiProxyIp, uint16_t nProxyPort);
 107      void quitOnReset();
 108  
 109  protected:
 110      void changeEvent(QEvent *e) override;
 111  
 112  private:
 113      Ui::OptionsDialog *ui;
 114      ClientModel* m_client_model{nullptr};
 115      OptionsModel* model{nullptr};
 116      QDataWidgetMapper* mapper{nullptr};
 117  
 118      QWidget *prevwidget{nullptr};
 119      void FixTabOrder(QWidget *);
 120      void CreateOptionUI(QBoxLayout *, const QString& text, const std::vector<QWidget *>&, const CreateOptionUIOpts&);
 121      void CreateOptionUI(QBoxLayout *, const QString& text, const std::vector<QWidget *>&);
 122      void CreateOptionUI(QBoxLayout *, QWidget *, const QString& text, QBoxLayout *horizontalLayout = nullptr);
 123  
 124      QCheckBox *walletrbf;
 125  
 126      QCheckBox *upnp;
 127      QSpinBox *blockreconstructionextratxn;
 128      QDoubleSpinBox *blockreconstructionextratxnsize;
 129  
 130      QValueComboBox *mempoolreplacement;
 131      QValueComboBox *mempooltruc;
 132      QSpinBox *maxorphantx;
 133      LimenkaAmountField *incrementalrelayfee;
 134      QSpinBox *maxmempool;
 135      QSpinBox *mempoolexpiry;
 136  
 137      QCheckBox *rejectunknownscripts;
 138      QCheckBox *rejectunknownwitness;
 139      QCheckBox *rejectparasites;
 140      QCheckBox *rejecttokens;
 141      QCheckBox *subdustfeepenalty;
 142      QCheckBox *rejectspkreuse;
 143      LimenkaAmountField *minrelaytxfee;
 144      LimenkaAmountField *minrelaycoinblocks;
 145      QSpinBox *minrelaymaturity;
 146      QSpinBox *bytespersigop, *bytespersigopstrict;
 147      QSpinBox *limitancestorcount;
 148      QSpinBox *limitancestorsize;
 149      QSpinBox *limitdescendantcount;
 150      QSpinBox *limitdescendantsize;
 151      QCheckBox *rejectbarepubkey;
 152      QCheckBox *rejectbaremultisig;
 153      QValueComboBox *permitephemeral;
 154      QCheckBox *rejectbareanchor;
 155      QCheckBox *rejectbaredatacarrier;
 156      QSpinBox *maxscriptsize;
 157      QSpinBox *maxtxlegacysigops;
 158      QSpinBox *datacarriersize;
 159      QDoubleSpinBox *datacarriercost;
 160      QCheckBox *rejectnonstddatacarrier;
 161      LimenkaAmountField *dustrelayfee;
 162      QCheckBox *dustdynamic_enable;
 163      QDoubleSpinBox *dustdynamic_multiplier;
 164      QRadioButton *dustdynamic_target;
 165      QSpinBox *dustdynamic_target_blocks;
 166      QRadioButton *dustdynamic_mempool;
 167      QSpinBox *dustdynamic_mempool_kvB;
 168  
 169      LimenkaAmountField *blockmintxfee;
 170      QSpinBox *blockmaxsize, *blockprioritysize, *blockmaxweight;
 171  };
 172  
 173  #endif // LIMENKA_QT_OPTIONSDIALOG_H
 174