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())
27 if (!IsLimited(NET_IPV4))
28 SetProxy(NET_IPV4, addrProxy, nSocksVersion);
29 if (nSocksVersion > 4) {
31 if (!IsLimited(NET_IPV6))
32 SetProxy(NET_IPV6, addrProxy, nSocksVersion);
34 SetNameProxy(addrProxy, nSocksVersion);
39 void OptionsModel::Init()
43 // These are Qt-only settings:
44 nDisplayUnit = settings.value("nDisplayUnit", BitcoinUnits::BTC).toInt();
45 bDisplayAddresses = settings.value("bDisplayAddresses", false).toBool();
46 if (!settings.contains("strThirdPartyTxUrls"))
48 settings.setValue("strThirdPartyTxUrls", "");
50 settings.setValue("strThirdPartyTxUrls", "https://bitinfocharts.com/novacoin/tx/%s|https://coinplorer.com/NVC/Transactions/%s|https://explorer.novaco.in/tx/%s");
51 strThirdPartyTxUrls = settings.value("strThirdPartyTxUrls", "https://bitinfocharts.com/novacoin/tx/%s|https://coinplorer.com/NVC/Transactions/%s|https://explorer.novaco.in/tx/%s").toString();
52 fMinimizeToTray = settings.value("fMinimizeToTray", false).toBool();
53 fMinimizeOnClose = settings.value("fMinimizeOnClose", false).toBool();
54 fCoinControlFeatures = settings.value("fCoinControlFeatures", false).toBool();
55 nTransactionFee = settings.value("nTransactionFee").toLongLong();
56 language = settings.value("language", "").toString();
58 // These are shared with core Bitcoin; we want
59 // command-line options to override the GUI settings:
60 if (settings.contains("fUseUPnP"))
61 SoftSetBoolArg("-upnp", settings.value("fUseUPnP").toBool());
62 if (settings.contains("addrProxy") && settings.value("fUseProxy").toBool())
63 SoftSetArg("-proxy", settings.value("addrProxy").toString().toStdString());
64 if (settings.contains("nSocksVersion") && settings.value("fUseProxy").toBool())
65 SoftSetArg("-socks", settings.value("nSocksVersion").toString().toStdString());
66 if (settings.contains("detachDB"))
67 SoftSetBoolArg("-detachdb", settings.value("detachDB").toBool());
68 if (!language.isEmpty())
69 SoftSetArg("-lang", language.toStdString());
72 bool OptionsModel::Upgrade()
76 if (settings.contains("bImportFinished"))
77 return false; // Already upgraded
79 settings.setValue("bImportFinished", true);
81 // Move settings from old wallet.dat (if any):
82 CWalletDB walletdb(strWalletFileName);
84 QList<QString> intOptions;
85 intOptions << "nDisplayUnit" << "nTransactionFee";
86 foreach(QString key, intOptions)
89 if (walletdb.ReadSetting(key.toStdString(), value))
91 settings.setValue(key, value);
92 walletdb.EraseSetting(key.toStdString());
95 QList<QString> boolOptions;
96 boolOptions << "bDisplayAddresses" << "fMinimizeToTray" << "fMinimizeOnClose" << "fUseProxy" << "fUseUPnP";
97 foreach(QString key, boolOptions)
100 if (walletdb.ReadSetting(key.toStdString(), value))
102 settings.setValue(key, value);
103 walletdb.EraseSetting(key.toStdString());
108 CAddress addrProxyAddress;
109 if (walletdb.ReadSetting("addrProxy", addrProxyAddress))
111 settings.setValue("addrProxy", addrProxyAddress.ToStringIPPort().c_str());
112 walletdb.EraseSetting("addrProxy");
115 catch (std::ios_base::failure &e)
117 // 0.6.0rc1 saved this as a CService, which causes failure when parsing as a CAddress
119 if (walletdb.ReadSetting("addrProxy", addrProxy))
121 settings.setValue("addrProxy", addrProxy.ToStringIPPort().c_str());
122 walletdb.EraseSetting("addrProxy");
125 ApplyProxySettings();
132 int OptionsModel::rowCount(const QModelIndex & parent) const
134 return OptionIDRowCount;
137 QVariant OptionsModel::data(const QModelIndex & index, int role) const
139 if(role == Qt::EditRole)
145 return QVariant(GUIUtil::GetStartOnSystemStartup());
147 return QVariant(fMinimizeToTray);
149 return settings.value("fUseUPnP", GetBoolArg("-upnp", true));
150 case MinimizeOnClose:
151 return QVariant(fMinimizeOnClose);
153 return settings.value("fUseProxy", false);
156 if (GetProxy(NET_IPV4, proxy))
157 return QVariant(QString::fromStdString(proxy.first.ToStringIP()));
159 return QVariant(QString::fromStdString("127.0.0.1"));
163 if (GetProxy(NET_IPV4, proxy))
164 return QVariant(proxy.first.GetPort());
166 return QVariant(9050);
168 case ProxySocksVersion:
169 return settings.value("nSocksVersion", 5);
171 return QVariant(nTransactionFee);
173 return QVariant(nDisplayUnit);
174 case DisplayAddresses:
175 return QVariant(bDisplayAddresses);
176 case ThirdPartyTxUrls:
177 return QVariant(strThirdPartyTxUrls);
178 case DetachDatabases:
179 return QVariant(bitdb.GetDetach());
181 return settings.value("language", "");
182 case CoinControlFeatures:
183 return QVariant(fCoinControlFeatures);
191 bool OptionsModel::setData(const QModelIndex & index, const QVariant & value, int role)
193 bool successful = true; /* set to false on parse error */
194 if(role == Qt::EditRole)
200 successful = GUIUtil::SetStartOnSystemStartup(value.toBool());
203 fMinimizeToTray = value.toBool();
204 settings.setValue("fMinimizeToTray", fMinimizeToTray);
207 fUseUPnP = value.toBool();
208 settings.setValue("fUseUPnP", fUseUPnP);
211 case MinimizeOnClose:
212 fMinimizeOnClose = value.toBool();
213 settings.setValue("fMinimizeOnClose", fMinimizeOnClose);
216 settings.setValue("fUseProxy", value.toBool());
217 ApplyProxySettings();
221 proxy.first = CService("127.0.0.1", 9050);
222 GetProxy(NET_IPV4, proxy);
224 CNetAddr addr(value.toString().toStdString());
225 proxy.first.SetIP(addr);
226 settings.setValue("addrProxy", proxy.first.ToStringIPPort().c_str());
227 successful = ApplyProxySettings();
232 proxy.first = CService("127.0.0.1", 9050);
233 GetProxy(NET_IPV4, proxy);
235 proxy.first.SetPort(value.toInt());
236 settings.setValue("addrProxy", proxy.first.ToStringIPPort().c_str());
237 successful = ApplyProxySettings();
240 case ProxySocksVersion: {
243 GetProxy(NET_IPV4, proxy);
245 proxy.second = value.toInt();
246 settings.setValue("nSocksVersion", proxy.second);
247 successful = ApplyProxySettings();
251 nTransactionFee = value.toLongLong();
252 settings.setValue("nTransactionFee", nTransactionFee);
253 emit transactionFeeChanged(nTransactionFee);
256 nDisplayUnit = value.toInt();
257 settings.setValue("nDisplayUnit", nDisplayUnit);
258 emit displayUnitChanged(nDisplayUnit);
260 case DisplayAddresses:
261 bDisplayAddresses = value.toBool();
262 settings.setValue("bDisplayAddresses", bDisplayAddresses);
264 case DetachDatabases: {
265 bool fDetachDB = value.toBool();
266 bitdb.SetDetach(fDetachDB);
267 settings.setValue("detachDB", fDetachDB);
270 case ThirdPartyTxUrls:
271 if (strThirdPartyTxUrls != value.toString()) {
272 strThirdPartyTxUrls = value.toString();
273 settings.setValue("strThirdPartyTxUrls", strThirdPartyTxUrls);
277 settings.setValue("language", value);
279 case CoinControlFeatures: {
280 fCoinControlFeatures = value.toBool();
281 settings.setValue("fCoinControlFeatures", fCoinControlFeatures);
282 emit coinControlFeaturesChanged(fCoinControlFeatures);
289 emit dataChanged(index, index);
294 qint64 OptionsModel::getTransactionFee()
296 return nTransactionFee;
299 bool OptionsModel::getCoinControlFeatures()
301 return fCoinControlFeatures;
304 bool OptionsModel::getMinimizeToTray()
306 return fMinimizeToTray;
309 bool OptionsModel::getMinimizeOnClose()
311 return fMinimizeOnClose;
314 int OptionsModel::getDisplayUnit()
319 bool OptionsModel::getDisplayAddresses()
321 return bDisplayAddresses;