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 int nSocksVersion(settings.value("nSocksVersion", 5).toInt());
20 if (!settings.value("fUseProxy", false).toBool()) {
21 addrProxy = CService();
25 if (nSocksVersion && !addrProxy.IsValid())
28 if (!IsLimited(NET_IPV4))
29 SetProxy(NET_IPV4, addrProxy, nSocksVersion);
30 if (nSocksVersion > 4) {
32 if (!IsLimited(NET_IPV6))
33 SetProxy(NET_IPV6, addrProxy, nSocksVersion);
37 SetNameProxy(addrProxy, nSocksVersion);
42 bool static ApplyTorSettings()
45 CService addrTor(settings.value("addrTor", "127.0.0.1:9050").toString().toStdString());
46 if (!settings.value("fUseTor", false).toBool()) {
50 if (!addrTor.IsValid())
53 SetProxy(NET_TOR, addrTor, 5);
54 SetReachable(NET_TOR);
59 void OptionsModel::Init()
63 // These are Qt-only settings:
64 nDisplayUnit = settings.value("nDisplayUnit", BitcoinUnits::BTC).toInt();
65 bDisplayAddresses = settings.value("bDisplayAddresses", false).toBool();
66 if (!settings.contains("strThirdPartyTxUrls")) {
68 settings.setValue("strThirdPartyTxUrls", "");
70 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");
72 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();
73 fMinimizeToTray = settings.value("fMinimizeToTray", false).toBool();
74 fMinimizeOnClose = settings.value("fMinimizeOnClose", false).toBool();
75 fCoinControlFeatures = settings.value("fCoinControlFeatures", false).toBool();
76 nTransactionFee = settings.value("nTransactionFee").toLongLong();
77 language = settings.value("language", "").toString();
79 // These are shared with core Bitcoin; we want
80 // command-line options to override the GUI settings:
81 if (settings.contains("fUseUPnP"))
82 SoftSetBoolArg("-upnp", settings.value("fUseUPnP").toBool());
83 if ( !(settings.value("fTorOnly").toBool() && settings.contains("addrTor")) ) {
84 if (settings.contains("addrProxy") && settings.value("fUseProxy").toBool())
85 SoftSetArg("-proxy", settings.value("addrProxy").toString().toStdString());
86 if (settings.contains("nSocksVersion") && settings.value("fUseProxy").toBool())
87 SoftSetArg("-socks", settings.value("nSocksVersion").toString().toStdString());
90 if (settings.contains("addrTor") && settings.value("fUseTor").toBool()) {
91 SoftSetArg("-tor", settings.value("addrTor").toString().toStdString());
92 if (settings.value("fTorOnly").toBool())
93 SoftSetArg("-onlynet", "tor");
95 if (settings.value("TorName").toString().length() == 22) {
96 std::string strTorName = settings.value("TorName").toString().toStdString();
98 CService addrTorName(strTorName, GetListenPort());
99 if (addrTorName.IsValid())
100 SoftSetArg("-torname", strTorName);
104 if (settings.contains("detachDB"))
105 SoftSetBoolArg("-detachdb", settings.value("detachDB").toBool());
106 if (!language.isEmpty())
107 SoftSetArg("-lang", language.toStdString());
110 int OptionsModel::rowCount(const QModelIndex & parent) const
112 return OptionIDRowCount;
115 QVariant OptionsModel::data(const QModelIndex & index, int role) const
117 if(role == Qt::EditRole)
123 return QVariant(GUIUtil::GetStartOnSystemStartup());
125 return QVariant(fMinimizeToTray);
127 return settings.value("fUseUPnP", GetBoolArg("-upnp", true));
128 case MinimizeOnClose:
129 return QVariant(fMinimizeOnClose);
131 return settings.value("fUseProxy", false);
134 if (GetProxy(NET_IPV4, proxy))
135 return QVariant(QString::fromStdString(proxy.first.ToStringIP()));
137 return QVariant(QString::fromStdString("127.0.0.1"));
141 if (GetProxy(NET_IPV4, proxy))
142 return QVariant(proxy.first.GetPort());
144 return QVariant(9050);
146 case ProxySocksVersion:
147 return settings.value("nSocksVersion", 5);
149 return settings.value("fUseTor", false);
152 if (GetProxy(NET_TOR, proxy))
153 return QVariant(QString::fromStdString(proxy.first.ToStringIP()));
155 return QVariant(QString::fromStdString("127.0.0.1"));
159 if (GetProxy(NET_TOR, proxy))
160 return QVariant(proxy.first.GetPort());
162 return QVariant(9050);
165 return settings.value("fTorOnly", false);
167 return settings.value("TorName", "");
169 return QVariant(static_cast<qlonglong>(nTransactionFee));
171 return QVariant(nDisplayUnit);
172 case DisplayAddresses:
173 return QVariant(bDisplayAddresses);
174 case ThirdPartyTxUrls:
175 return QVariant(strThirdPartyTxUrls);
176 case DetachDatabases:
177 return QVariant(bitdb.GetDetach());
179 return settings.value("language", "");
180 case CoinControlFeatures:
181 return QVariant(fCoinControlFeatures);
189 bool OptionsModel::setData(const QModelIndex & index, const QVariant & value, int role)
191 bool successful = true; /* set to false on parse error */
192 if(role == Qt::EditRole)
198 successful = GUIUtil::SetStartOnSystemStartup(value.toBool());
201 fMinimizeToTray = value.toBool();
202 settings.setValue("fMinimizeToTray", fMinimizeToTray);
205 fUseUPnP = value.toBool();
206 settings.setValue("fUseUPnP", fUseUPnP);
209 case MinimizeOnClose:
210 fMinimizeOnClose = value.toBool();
211 settings.setValue("fMinimizeOnClose", fMinimizeOnClose);
214 settings.setValue("fUseProxy", value.toBool());
215 ApplyProxySettings();
219 proxy.first = CService("127.0.0.1", 9050);
220 GetProxy(NET_IPV4, proxy);
222 CNetAddr addr(value.toString().toStdString());
223 proxy.first.SetIP(addr);
224 settings.setValue("addrProxy", proxy.first.ToStringIPPort().c_str());
225 successful = ApplyProxySettings();
230 proxy.first = CService("127.0.0.1", 9050);
231 GetProxy(NET_IPV4, proxy);
233 proxy.first.SetPort(value.toInt());
234 settings.setValue("addrProxy", proxy.first.ToStringIPPort().c_str());
235 successful = ApplyProxySettings();
238 case ProxySocksVersion: {
241 GetProxy(NET_IPV4, proxy);
243 proxy.second = value.toInt();
244 settings.setValue("nSocksVersion", proxy.second);
245 successful = ApplyProxySettings();
249 settings.setValue("fUseTor", value.toBool());
255 proxy.first = CService("127.0.0.1", 9050);
256 GetProxy(NET_TOR, proxy);
258 CNetAddr addr(value.toString().toStdString());
259 proxy.first.SetIP(addr);
260 settings.setValue("addrTor", proxy.first.ToStringIPPort().c_str());
261 successful = ApplyTorSettings();
266 proxy.first = CService("127.0.0.1", 9050);
267 GetProxy(NET_TOR, proxy);
269 proxy.first.SetPort(value.toInt());
270 settings.setValue("addrTor", proxy.first.ToStringIPPort().c_str());
271 successful = ApplyTorSettings();
275 settings.setValue("fTorOnly", value.toBool());
279 settings.setValue("TorName", value.toString());
283 nTransactionFee = value.toLongLong();
284 settings.setValue("nTransactionFee", static_cast<qlonglong>(nTransactionFee));
285 emit transactionFeeChanged(nTransactionFee);
288 nDisplayUnit = value.toInt();
289 settings.setValue("nDisplayUnit", nDisplayUnit);
290 emit displayUnitChanged(nDisplayUnit);
292 case DisplayAddresses:
293 bDisplayAddresses = value.toBool();
294 settings.setValue("bDisplayAddresses", bDisplayAddresses);
296 case DetachDatabases: {
297 bool fDetachDB = value.toBool();
298 bitdb.SetDetach(fDetachDB);
299 settings.setValue("detachDB", fDetachDB);
302 case ThirdPartyTxUrls:
303 if (strThirdPartyTxUrls != value.toString()) {
304 strThirdPartyTxUrls = value.toString();
305 settings.setValue("strThirdPartyTxUrls", strThirdPartyTxUrls);
309 settings.setValue("language", value);
311 case CoinControlFeatures: {
312 fCoinControlFeatures = value.toBool();
313 settings.setValue("fCoinControlFeatures", fCoinControlFeatures);
314 emit coinControlFeaturesChanged(fCoinControlFeatures);
321 emit dataChanged(index, index);
326 qint64 OptionsModel::getTransactionFee()
328 return nTransactionFee;
331 bool OptionsModel::getCoinControlFeatures()
333 return fCoinControlFeatures;
336 bool OptionsModel::getMinimizeToTray()
338 return fMinimizeToTray;
341 bool OptionsModel::getMinimizeOnClose()
343 return fMinimizeOnClose;
346 int OptionsModel::getDisplayUnit()
351 bool OptionsModel::getDisplayAddresses()
353 return bDisplayAddresses;