1 #include "optionsmodel.h"
2 #include "bitcoinunits.h"
9 OptionsModel::OptionsModel(QObject *parent) :
10 QAbstractListModel(parent)
15 bool static ApplyProxySettings()
18 CService addrProxy(settings.value("addrProxy", "127.0.0.1:9050").toString().toStdString());
19 if (!settings.value("fUseProxy", false).toBool()) {
20 addrProxy = CService();
23 if (!addrProxy.IsValid())
26 if (!IsLimited(NET_IPV4))
27 SetProxy(NET_IPV4, addrProxy);
29 if (!IsLimited(NET_IPV6))
30 SetProxy(NET_IPV6, addrProxy);
33 SetNameProxy(addrProxy);
38 bool static ApplyTorSettings()
41 CService addrTor(settings.value("addrTor", "127.0.0.1:9050").toString().toStdString());
42 if (!settings.value("fUseTor", false).toBool()) {
46 if (!addrTor.IsValid())
49 SetProxy(NET_TOR, addrTor);
50 SetReachable(NET_TOR);
55 void OptionsModel::Init()
59 // These are Qt-only settings:
60 nDisplayUnit = settings.value("nDisplayUnit", BitcoinUnits::BTC).toInt();
61 bDisplayAddresses = settings.value("bDisplayAddresses", false).toBool();
62 if (!settings.contains("strThirdPartyTxUrls")) {
64 settings.setValue("strThirdPartyTxUrls", "");
66 settings.setValue("strThirdPartyTxUrls", "https://bitinfocharts.com/novacoin/tx/%s|https://coinplorer.com/NVC/Transactions/%s|https://explorer.novaco.in/tx/%s|https://bchain.info/NVC/tx/%s");
68 strThirdPartyTxUrls = settings.value("strThirdPartyTxUrls", "https://bitinfocharts.com/novacoin/tx/%s|https://coinplorer.com/NVC/Transactions/%s|https://explorer.novaco.in/tx/%s|https://bchain.info/NVC/tx/%s").toString();
69 fMinimizeToTray = settings.value("fMinimizeToTray", false).toBool();
70 fMinimizeOnClose = settings.value("fMinimizeOnClose", false).toBool();
71 fCoinControlFeatures = settings.value("fCoinControlFeatures", false).toBool();
72 nTransactionFee = settings.value("nTransactionFee").toLongLong();
73 language = settings.value("language", "").toString();
75 // These are shared with core Bitcoin; we want
76 // command-line options to override the GUI settings:
77 if ( !(settings.value("fTorOnly").toBool() && settings.contains("addrTor")) ) {
78 if (settings.contains("addrProxy") && settings.value("fUseProxy").toBool())
79 SoftSetArg("-proxy", settings.value("addrProxy").toString().toStdString());
80 if (settings.contains("nSocksVersion") && settings.value("fUseProxy").toBool())
81 SoftSetArg("-socks", settings.value("nSocksVersion").toString().toStdString());
84 if (settings.contains("addrTor") && settings.value("fUseTor").toBool()) {
85 SoftSetArg("-tor", settings.value("addrTor").toString().toStdString());
86 if (settings.value("fTorOnly").toBool())
87 SoftSetArg("-onlynet", "tor");
89 if (settings.value("TorName").toString().length() == 22) {
90 std::string strTorName = settings.value("TorName").toString().toStdString();
92 CService addrTorName(strTorName, GetListenPort());
93 if (addrTorName.IsValid())
94 SoftSetArg("-torname", strTorName);
98 if (!fTestNet && settings.contains("externalSeeder") && settings.value("externalSeeder").toString() != "") {
99 SoftSetArg("-peercollector", settings.value("externalSeeder").toString().toStdString());
102 if (settings.contains("detachDB"))
103 SoftSetBoolArg("-detachdb", settings.value("detachDB").toBool());
104 if (!language.isEmpty())
105 SoftSetArg("-lang", language.toStdString());
108 int OptionsModel::rowCount(const QModelIndex & parent) const
110 return OptionIDRowCount;
113 QVariant OptionsModel::data(const QModelIndex & index, int role) const
115 if(role == Qt::EditRole)
121 return QVariant(GUIUtil::GetStartOnSystemStartup());
123 return QVariant(fMinimizeToTray);
124 case MinimizeOnClose:
125 return QVariant(fMinimizeOnClose);
127 return settings.value("fUseProxy", false);
130 if (GetProxy(NET_IPV4, proxy))
131 return QVariant(QString::fromStdString(proxy.ToStringIP()));
133 return QVariant(QString::fromStdString("127.0.0.1"));
137 if (GetProxy(NET_IPV4, proxy))
138 return QVariant(proxy.GetPort());
140 return QVariant(nSocksDefault);
143 return settings.value("fUseTor", false);
146 if (GetProxy(NET_TOR, proxy))
147 return QVariant(QString::fromStdString(proxy.ToStringIP()));
149 return QVariant(QString::fromStdString("127.0.0.1"));
153 if (GetProxy(NET_TOR, proxy))
154 return QVariant(proxy.GetPort());
156 return QVariant(nSocksDefault);
159 return settings.value("fTorOnly", false);
161 return settings.value("TorName", "");
163 return settings.value("externalSeeder", "");
165 return QVariant(static_cast<qlonglong>(nTransactionFee));
167 return QVariant(nDisplayUnit);
168 case DisplayAddresses:
169 return QVariant(bDisplayAddresses);
170 case ThirdPartyTxUrls:
171 return QVariant(strThirdPartyTxUrls);
172 case DetachDatabases:
173 return QVariant(bitdb.GetDetach());
175 return settings.value("language", "");
176 case CoinControlFeatures:
177 return QVariant(fCoinControlFeatures);
185 bool OptionsModel::setData(const QModelIndex & index, const QVariant & value, int role)
187 bool successful = true; /* set to false on parse error */
188 if(role == Qt::EditRole)
194 successful = GUIUtil::SetStartOnSystemStartup(value.toBool());
197 fMinimizeToTray = value.toBool();
198 settings.setValue("fMinimizeToTray", fMinimizeToTray);
200 case MinimizeOnClose:
201 fMinimizeOnClose = value.toBool();
202 settings.setValue("fMinimizeOnClose", fMinimizeOnClose);
205 settings.setValue("fUseProxy", value.toBool());
206 ApplyProxySettings();
210 proxy = CService("127.0.0.1", nSocksDefault);
211 GetProxy(NET_IPV4, proxy);
213 CNetAddr addr(value.toString().toStdString());
215 settings.setValue("addrProxy", proxy.ToStringIPPort().c_str());
216 successful = ApplyProxySettings();
221 proxy = CService("127.0.0.1", nSocksDefault);
222 GetProxy(NET_IPV4, proxy);
224 proxy.SetupPort(value.toInt());
225 settings.setValue("addrProxy", proxy.ToStringIPPort().c_str());
226 successful = ApplyProxySettings();
230 settings.setValue("fUseTor", value.toBool());
236 proxy = CService("127.0.0.1", nSocksDefault);
237 GetProxy(NET_TOR, proxy);
239 CNetAddr addr(value.toString().toStdString());
241 settings.setValue("addrTor", proxy.ToStringIPPort().c_str());
242 successful = ApplyTorSettings();
247 proxy = CService("127.0.0.1", nSocksDefault);
248 GetProxy(NET_TOR, proxy);
250 proxy.SetupPort((uint16_t)value.toUInt());
251 settings.setValue("addrTor", proxy.ToStringIPPort().c_str());
252 successful = ApplyTorSettings();
256 settings.setValue("fTorOnly", value.toBool());
260 settings.setValue("TorName", value.toString());
264 settings.setValue("externalSeeder", value.toString());
267 nTransactionFee = value.toLongLong();
268 settings.setValue("nTransactionFee", static_cast<qlonglong>(nTransactionFee));
269 emit transactionFeeChanged(nTransactionFee);
272 nDisplayUnit = value.toInt();
273 settings.setValue("nDisplayUnit", nDisplayUnit);
274 emit displayUnitChanged(nDisplayUnit);
276 case DisplayAddresses:
277 bDisplayAddresses = value.toBool();
278 settings.setValue("bDisplayAddresses", bDisplayAddresses);
280 case DetachDatabases: {
281 bool fDetachDB = value.toBool();
282 bitdb.SetDetach(fDetachDB);
283 settings.setValue("detachDB", fDetachDB);
286 case ThirdPartyTxUrls:
287 if (strThirdPartyTxUrls != value.toString()) {
288 strThirdPartyTxUrls = value.toString();
289 settings.setValue("strThirdPartyTxUrls", strThirdPartyTxUrls);
293 settings.setValue("language", value);
295 case CoinControlFeatures: {
296 fCoinControlFeatures = value.toBool();
297 settings.setValue("fCoinControlFeatures", fCoinControlFeatures);
298 emit coinControlFeaturesChanged(fCoinControlFeatures);
305 emit dataChanged(index, index);
310 qint64 OptionsModel::getTransactionFee()
312 return nTransactionFee;
315 bool OptionsModel::getCoinControlFeatures()
317 return fCoinControlFeatures;
320 bool OptionsModel::getMinimizeToTray()
322 return fMinimizeToTray;
325 bool OptionsModel::getMinimizeOnClose()
327 return fMinimizeOnClose;
330 int OptionsModel::getDisplayUnit()
335 bool OptionsModel::getDisplayAddresses()
337 return bDisplayAddresses;