diff --git a/src/interface/node.cpp b/src/interface/node.cpp index 4e3fa6ceb9..877c5f57a8 100644 --- a/src/interface/node.cpp +++ b/src/interface/node.cpp @@ -7,6 +7,9 @@ #include #include #include +#include +#include +#include #include #include #include @@ -24,6 +27,8 @@ class NodeImpl : public Node gArgs.ParseParameters(argc, argv); } void readConfigFile(const std::string& conf_path) override { gArgs.ReadConfigFile(conf_path); } + bool softSetArg(const std::string& arg, const std::string& value) override { return gArgs.SoftSetArg(arg, value); } + bool softSetBoolArg(const std::string& arg, bool value) override { return gArgs.SoftSetBoolArg(arg, value); } void selectParams(const std::string& network) override { SelectParams(network); } void initLogging() override { InitLogging(); } void initParameterInteraction() override { InitParameterInteraction(); } @@ -40,6 +45,16 @@ class NodeImpl : public Node Shutdown(); } void startShutdown() override { StartShutdown(); } + void mapPort(bool use_upnp) override + { + if (use_upnp) { + StartMapPort(); + } else { + InterruptMapPort(); + StopMapPort(); + } + } + bool getProxy(Network net, proxyType& proxy_info) override { return GetProxy(net, proxy_info); } std::unique_ptr handleInitMessage(InitMessageFn fn) override { return MakeHandler(::uiInterface.InitMessage.connect(fn)); diff --git a/src/interface/node.h b/src/interface/node.h index b69ef160a3..368bade28b 100644 --- a/src/interface/node.h +++ b/src/interface/node.h @@ -5,10 +5,14 @@ #ifndef BITCOIN_INTERFACE_NODE_H #define BITCOIN_INTERFACE_NODE_H +#include // For Network + #include #include #include +class proxyType; + namespace interface { class Handler; @@ -22,6 +26,12 @@ public: //! Set command line arguments. virtual void parseParameters(int argc, const char* const argv[]) = 0; + //! Set a command line argument if it doesn't already have a value + virtual bool softSetArg(const std::string& arg, const std::string& value) = 0; + + //! Set a command line boolean argument if it doesn't already have a value + virtual bool softSetBoolArg(const std::string& arg, bool value) = 0; + //! Load settings from configuration file. virtual void readConfigFile(const std::string& conf_path) = 0; @@ -49,6 +59,12 @@ public: //! Start shutdown. virtual void startShutdown() = 0; + //! Map port. + virtual void mapPort(bool use_upnp) = 0; + + //! Get proxy. + virtual bool getProxy(Network net, proxyType& proxy_info) = 0; + //! Register handler for init messages. using InitMessageFn = std::function; virtual std::unique_ptr handleInitMessage(InitMessageFn fn) = 0; diff --git a/src/qt/addressbookpage.cpp b/src/qt/addressbookpage.cpp index b5764ed263..f96de33033 100644 --- a/src/qt/addressbookpage.cpp +++ b/src/qt/addressbookpage.cpp @@ -241,9 +241,7 @@ void AddressBookPage::on_showAddressQRCode_clicked() QString strAddress = entries.at(0).data(Qt::EditRole).toString(); QRDialog* dialog = new QRDialog(this); - OptionsModel *model = new OptionsModel(nullptr, false); - dialog->setModel(model); dialog->setAttribute(Qt::WA_DeleteOnClose); dialog->setInfo(tr("QR code"), "dash:"+strAddress, "", strAddress); dialog->show(); diff --git a/src/qt/dash.cpp b/src/qt/dash.cpp index b7f61b9186..1fc259a0ee 100644 --- a/src/qt/dash.cpp +++ b/src/qt/dash.cpp @@ -353,7 +353,7 @@ void BitcoinApplication::createPaymentServer() void BitcoinApplication::createOptionsModel(bool resetSettings) { - optionsModel = new OptionsModel(nullptr, resetSettings); + optionsModel = new OptionsModel(m_node, nullptr, resetSettings); } void BitcoinApplication::createWindow(const NetworkStyle *networkStyle) diff --git a/src/qt/optionsmodel.cpp b/src/qt/optionsmodel.cpp index b28a640535..e1954e9b59 100644 --- a/src/qt/optionsmodel.cpp +++ b/src/qt/optionsmodel.cpp @@ -12,16 +12,13 @@ #include #include -#include +#include #include // For DEFAULT_SCRIPTCHECK_THREADS #include #include #include // for -dbcache defaults #ifdef ENABLE_WALLET -#include -#include - #include #endif @@ -33,8 +30,8 @@ const char *DEFAULT_GUI_PROXY_HOST = "127.0.0.1"; static const QString GetDefaultProxyAddress(); -OptionsModel::OptionsModel(QObject *parent, bool resetSettings) : - QAbstractListModel(parent) +OptionsModel::OptionsModel(interface::Node& node, QObject *parent, bool resetSettings) : + QAbstractListModel(parent), m_node(node) { Init(resetSettings); } @@ -91,17 +88,17 @@ void OptionsModel::Init(bool resetSettings) if (!settings.contains("fontScale")) settings.setValue("fontScale", GUIUtil::getFontScaleDefault()); - if (!gArgs.SoftSetArg("-font-scale", settings.value("fontScale").toString().toStdString())) + if (!m_node.softSetArg("-font-scale", settings.value("fontScale").toString().toStdString())) addOverriddenOption("-font-scale"); if (!settings.contains("fontWeightNormal")) settings.setValue("fontWeightNormal", GUIUtil::weightToArg(GUIUtil::getFontWeightNormalDefault())); - if (!gArgs.SoftSetArg("-font-weight-normal", settings.value("fontWeightNormal").toString().toStdString())) + if (!m_node.softSetArg("-font-weight-normal", settings.value("fontWeightNormal").toString().toStdString())) addOverriddenOption("-font-weight-normal"); if (!settings.contains("fontWeightBold")) settings.setValue("fontWeightBold", GUIUtil::weightToArg(GUIUtil::getFontWeightBoldDefault())); - if (!gArgs.SoftSetArg("-font-weight-bold", settings.value("fontWeightBold").toString().toStdString())) + if (!m_node.softSetArg("-font-weight-bold", settings.value("fontWeightBold").toString().toStdString())) addOverriddenOption("-font-weight-bold"); #ifdef ENABLE_WALLET @@ -136,31 +133,31 @@ void OptionsModel::Init(bool resetSettings) // // If setting doesn't exist create it with defaults. // - // If gArgs.SoftSetArg() or gArgs.SoftSetBoolArg() return false we were overridden + // If m_node.softSetArg() or m_node.softSetBoolArg() return false we were overridden // by command-line and show this in the UI. // Main if (!settings.contains("nDatabaseCache")) settings.setValue("nDatabaseCache", (qint64)nDefaultDbCache); - if (!gArgs.SoftSetArg("-dbcache", settings.value("nDatabaseCache").toString().toStdString())) + if (!m_node.softSetArg("-dbcache", settings.value("nDatabaseCache").toString().toStdString())) addOverriddenOption("-dbcache"); if (!settings.contains("nThreadsScriptVerif")) settings.setValue("nThreadsScriptVerif", DEFAULT_SCRIPTCHECK_THREADS); - if (!gArgs.SoftSetArg("-par", settings.value("nThreadsScriptVerif").toString().toStdString())) + if (!m_node.softSetArg("-par", settings.value("nThreadsScriptVerif").toString().toStdString())) addOverriddenOption("-par"); // Wallet #ifdef ENABLE_WALLET if (!settings.contains("bSpendZeroConfChange")) settings.setValue("bSpendZeroConfChange", true); - if (!gArgs.SoftSetBoolArg("-spendzeroconfchange", settings.value("bSpendZeroConfChange").toBool())) + if (!m_node.softSetBoolArg("-spendzeroconfchange", settings.value("bSpendZeroConfChange").toBool())) addOverriddenOption("-spendzeroconfchange"); // PrivateSend if (!settings.contains("nPrivateSendRounds")) settings.setValue("nPrivateSendRounds", DEFAULT_PRIVATESEND_ROUNDS); - if (!gArgs.SoftSetArg("-privatesendrounds", settings.value("nPrivateSendRounds").toString().toStdString())) + if (!m_node.softSetArg("-privatesendrounds", settings.value("nPrivateSendRounds").toString().toStdString())) addOverriddenOption("-privatesendrounds"); CPrivateSendClientOptions::SetRounds(settings.value("nPrivateSendRounds").toInt()); @@ -171,13 +168,13 @@ void OptionsModel::Init(bool resetSettings) else settings.setValue("nPrivateSendAmount", settings.value("nAnonymizeDashAmount").toInt()); } - if (!gArgs.SoftSetArg("-privatesendamount", settings.value("nPrivateSendAmount").toString().toStdString())) + if (!m_node.softSetArg("-privatesendamount", settings.value("nPrivateSendAmount").toString().toStdString())) addOverriddenOption("-privatesendamount"); CPrivateSendClientOptions::SetAmount(settings.value("nPrivateSendAmount").toInt()); if (!settings.contains("fPrivateSendMultiSession")) settings.setValue("fPrivateSendMultiSession", DEFAULT_PRIVATESEND_MULTISESSION); - if (!gArgs.SoftSetBoolArg("-privatesendmultisession", settings.value("fPrivateSendMultiSession").toBool())) + if (!m_node.softSetBoolArg("-privatesendmultisession", settings.value("fPrivateSendMultiSession").toBool())) addOverriddenOption("-privatesendmultisession"); CPrivateSendClientOptions::SetMultiSessionEnabled(settings.value("fPrivateSendMultiSession").toBool()); #endif @@ -185,12 +182,12 @@ void OptionsModel::Init(bool resetSettings) // Network if (!settings.contains("fUseUPnP")) settings.setValue("fUseUPnP", DEFAULT_UPNP); - if (!gArgs.SoftSetBoolArg("-upnp", settings.value("fUseUPnP").toBool())) + if (!m_node.softSetBoolArg("-upnp", settings.value("fUseUPnP").toBool())) addOverriddenOption("-upnp"); if (!settings.contains("fListen")) settings.setValue("fListen", DEFAULT_LISTEN); - if (!gArgs.SoftSetBoolArg("-listen", settings.value("fListen").toBool())) + if (!m_node.softSetBoolArg("-listen", settings.value("fListen").toBool())) addOverriddenOption("-listen"); if (!settings.contains("fUseProxy")) @@ -198,7 +195,7 @@ void OptionsModel::Init(bool resetSettings) if (!settings.contains("addrProxy")) settings.setValue("addrProxy", GetDefaultProxyAddress()); // Only try to set -proxy, if user has enabled fUseProxy - if (settings.value("fUseProxy").toBool() && !gArgs.SoftSetArg("-proxy", settings.value("addrProxy").toString().toStdString())) + if (settings.value("fUseProxy").toBool() && !m_node.softSetArg("-proxy", settings.value("addrProxy").toString().toStdString())) addOverriddenOption("-proxy"); else if(!settings.value("fUseProxy").toBool() && !gArgs.GetArg("-proxy", "").empty()) addOverriddenOption("-proxy"); @@ -208,7 +205,7 @@ void OptionsModel::Init(bool resetSettings) if (!settings.contains("addrSeparateProxyTor")) settings.setValue("addrSeparateProxyTor", GetDefaultProxyAddress()); // Only try to set -onion, if user has enabled fUseSeparateProxyTor - if (settings.value("fUseSeparateProxyTor").toBool() && !gArgs.SoftSetArg("-onion", settings.value("addrSeparateProxyTor").toString().toStdString())) + if (settings.value("fUseSeparateProxyTor").toBool() && !m_node.softSetArg("-onion", settings.value("addrSeparateProxyTor").toString().toStdString())) addOverriddenOption("-onion"); else if(!settings.value("fUseSeparateProxyTor").toBool() && !gArgs.GetArg("-onion", "").empty()) addOverriddenOption("-onion"); @@ -216,7 +213,7 @@ void OptionsModel::Init(bool resetSettings) // Display if (!settings.contains("language")) settings.setValue("language", ""); - if (!gArgs.SoftSetArg("-lang", settings.value("language").toString().toStdString())) + if (!m_node.softSetArg("-lang", settings.value("language").toString().toStdString())) addOverriddenOption("-lang"); language = settings.value("language").toString(); @@ -418,12 +415,7 @@ bool OptionsModel::setData(const QModelIndex & index, const QVariant & value, in break; case MapPortUPnP: // core option - can be changed on-the-fly settings.setValue("fUseUPnP", value.toBool()); - if (value.toBool()) { - StartMapPort(); - } else { - InterruptMapPort(); - StopMapPort(); - } + m_node.mapPort(value.toBool()); break; case MinimizeOnClose: fMinimizeOnClose = value.toBool(); @@ -642,7 +634,7 @@ bool OptionsModel::getProxySettings(QNetworkProxy& proxy) const // Directly query current base proxy, because // GUI settings can be overridden with -proxy. proxyType curProxy; - if (GetProxy(NET_IPV4, curProxy)) { + if (m_node.getProxy(NET_IPV4, curProxy)) { proxy.setType(QNetworkProxy::Socks5Proxy); proxy.setHostName(QString::fromStdString(curProxy.proxy.ToStringIP())); proxy.setPort(curProxy.proxy.GetPort()); diff --git a/src/qt/optionsmodel.h b/src/qt/optionsmodel.h index 27bd7fc32c..30629611af 100644 --- a/src/qt/optionsmodel.h +++ b/src/qt/optionsmodel.h @@ -9,6 +9,10 @@ #include +namespace interface { +class Node; +} + QT_BEGIN_NAMESPACE class QNetworkProxy; QT_END_NAMESPACE @@ -27,7 +31,7 @@ class OptionsModel : public QAbstractListModel Q_OBJECT public: - explicit OptionsModel(QObject *parent = 0, bool resetSettings = false); + explicit OptionsModel(interface::Node& node, QObject *parent = 0, bool resetSettings = false); enum OptionID { StartAtStartup, // bool @@ -93,6 +97,7 @@ public: bool resetSettingsOnShutdown{false}; private: + interface::Node& m_node; /* Qt-only settings */ bool fHideTrayIcon; bool fMinimizeToTray; diff --git a/src/qt/qrdialog.cpp b/src/qt/qrdialog.cpp index badfc9ed79..ab913db782 100644 --- a/src/qt/qrdialog.cpp +++ b/src/qt/qrdialog.cpp @@ -8,7 +8,6 @@ #include #include #include -#include #include #include @@ -91,8 +90,7 @@ void QRGeneralImageWidget::contextMenuEvent(QContextMenuEvent *event) QRDialog::QRDialog(QWidget *parent) : QDialog(parent), - ui(new Ui::QRDialog), - model(0) + ui(new Ui::QRDialog) { ui->setupUi(this); @@ -113,17 +111,6 @@ QRDialog::~QRDialog() delete ui; } -void QRDialog::setModel(OptionsModel *model) -{ - this->model = model; - - if (model) - connect(model, SIGNAL(displayUnitChanged(int)), this, SLOT(update())); - - // update the display unit if necessary - update(); -} - void QRDialog::setInfo(QString strWindowtitle, QString strQRCode, QString strTextInfo, QString strQRCodeTitle) { this->strWindowtitle = strWindowtitle; @@ -135,9 +122,6 @@ void QRDialog::setInfo(QString strWindowtitle, QString strQRCode, QString strTex void QRDialog::update() { - if(!model) - return; - setWindowTitle(strWindowtitle); ui->button_saveImage->setEnabled(false); if (strTextInfo.isEmpty()) { @@ -183,4 +167,4 @@ void QRDialog::update() ui->button_saveImage->setEnabled(true); } #endif -} \ No newline at end of file +} diff --git a/src/qt/qrdialog.h b/src/qt/qrdialog.h index 7174f2a551..46d9cbcb1a 100644 --- a/src/qt/qrdialog.h +++ b/src/qt/qrdialog.h @@ -11,8 +11,6 @@ #include #include -class OptionsModel; - namespace Ui { class QRDialog; } @@ -52,7 +50,6 @@ public: explicit QRDialog(QWidget *parent = 0); ~QRDialog(); - void setModel(OptionsModel *model); void setInfo(QString strWindowtitle, QString strQRCode, QString strTextInfo, QString strQRCodeTitle); private Q_SLOTS: @@ -60,7 +57,6 @@ private Q_SLOTS: private: Ui::QRDialog *ui; - OptionsModel *model; QString strWindowtitle; QString strQRCode; QString strTextInfo; diff --git a/src/qt/test/paymentservertests.cpp b/src/qt/test/paymentservertests.cpp index 1864604372..286c368fed 100644 --- a/src/qt/test/paymentservertests.cpp +++ b/src/qt/test/paymentservertests.cpp @@ -8,6 +8,7 @@ #include #include +#include #include #include