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|https://bchain.info/NVC/tx/%s");
52 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();
53 fMinimizeToTray = settings.value("fMinimizeToTray", false).toBool();
54 fMinimizeOnClose = settings.value("fMinimizeOnClose", false).toBool();
55 fCoinControlFeatures = settings.value("fCoinControlFeatures", false).toBool();
56 nTransactionFee = settings.value("nTransactionFee").toLongLong();
57 language = settings.value("language", "").toString();
59 // These are shared with core Bitcoin; we want
60 // command-line options to override the GUI settings:
61 if (settings.contains("fUseUPnP"))
62 SoftSetBoolArg("-upnp", settings.value("fUseUPnP").toBool());
63 if (settings.contains("addrProxy") && settings.value("fUseProxy").toBool())
64 SoftSetArg("-proxy", settings.value("addrProxy").toString().toStdString());
65 if (settings.contains("nSocksVersion") && settings.value("fUseProxy").toBool())
66 SoftSetArg("-socks", settings.value("nSocksVersion").toString().toStdString());
67 if (settings.contains("detachDB"))
68 SoftSetBoolArg("-detachdb", settings.value("detachDB").toBool());
69 if (!language.isEmpty())
70 SoftSetArg("-lang", language.toStdString());
73 bool OptionsModel::Upgrade()
77 if (settings.contains("bImportFinished"))
78 return false; // Already upgraded
80 settings.setValue("bImportFinished", true);
82 // Move settings from old wallet.dat (if any):
83 CWalletDB walletdb(strWalletFileName);
85 QList<QString> intOptions;
86 intOptions << "nDisplayUnit" << "nTransactionFee";
87 foreach(QString key, intOptions)
90 if (walletdb.ReadSetting(key.toStdString(), value))
92 settings.setValue(key, value);
93 walletdb.EraseSetting(key.toStdString());
96 QList<QString> boolOptions;
97 boolOptions << "bDisplayAddresses" << "fMinimizeToTray" << "fMinimizeOnClose" << "fUseProxy" << "fUseUPnP";
98 foreach(QString key, boolOptions)
101 if (walletdb.ReadSetting(key.toStdString(), value))
103 settings.setValue(key, value);
104 walletdb.EraseSetting(key.toStdString());
109 CAddress addrProxyAddress;
110 if (walletdb.ReadSetting("addrProxy", addrProxyAddress))
112 settings.setValue("addrProxy", addrProxyAddress.ToStringIPPort().c_str());
113 walletdb.EraseSetting("addrProxy");
116 catch (std::ios_base::failure &e)
118 // 0.6.0rc1 saved this as a CService, which causes failure when parsing as a CAddress
120 if (walletdb.ReadSetting("addrProxy", addrProxy))
122 settings.setValue("addrProxy", addrProxy.ToStringIPPort().c_str());
123 walletdb.EraseSetting("addrProxy");
126 ApplyProxySettings();
133 int OptionsModel::rowCount(const QModelIndex & parent) const
135 return OptionIDRowCount;
138 QVariant OptionsModel::data(const QModelIndex & index, int role) const
140 if(role == Qt::EditRole)
146 return QVariant(GUIUtil::GetStartOnSystemStartup());
148 return QVariant(fMinimizeToTray);
150 return settings.value("fUseUPnP", GetBoolArg("-upnp", true));
151 case MinimizeOnClose:
152 return QVariant(fMinimizeOnClose);
154 return settings.value("fUseProxy", false);
157 if (GetProxy(NET_IPV4, proxy))
158 return QVariant(QString::fromStdString(proxy.first.ToStringIP()));
160 return QVariant(QString::fromStdString("127.0.0.1"));
164 if (GetProxy(NET_IPV4, proxy))
165 return QVariant(proxy.first.GetPort());
167 return QVariant(9050);
169 case ProxySocksVersion:
170 return settings.value("nSocksVersion", 5);
172 return QVariant(static_cast<qlonglong>(nTransactionFee));
174 return QVariant(nDisplayUnit);
175 case DisplayAddresses:
176 return QVariant(bDisplayAddresses);
177 case ThirdPartyTxUrls:
178 return QVariant(strThirdPartyTxUrls);
179 case DetachDatabases:
180 return QVariant(bitdb.GetDetach());
182 return settings.value("language", "");
183 case CoinControlFeatures:
184 return QVariant(fCoinControlFeatures);
192 bool OptionsModel::setData(const QModelIndex & index, const QVariant & value, int role)
194 bool successful = true; /* set to false on parse error */
195 if(role == Qt::EditRole)
201 successful = GUIUtil::SetStartOnSystemStartup(value.toBool());
204 fMinimizeToTray = value.toBool();
205 settings.setValue("fMinimizeToTray", fMinimizeToTray);
208 fUseUPnP = value.toBool();
209 settings.setValue("fUseUPnP", fUseUPnP);
212 case MinimizeOnClose:
213 fMinimizeOnClose = value.toBool();
214 settings.setValue("fMinimizeOnClose", fMinimizeOnClose);
217 settings.setValue("fUseProxy", value.toBool());
218 ApplyProxySettings();
222 proxy.first = CService("127.0.0.1", 9050);
223 GetProxy(NET_IPV4, proxy);
225 CNetAddr addr(value.toString().toStdString());
226 proxy.first.SetIP(addr);
227 settings.setValue("addrProxy", proxy.first.ToStringIPPort().c_str());
228 successful = ApplyProxySettings();
233 proxy.first = CService("127.0.0.1", 9050);
234 GetProxy(NET_IPV4, proxy);
236 proxy.first.SetPort(value.toInt());
237 settings.setValue("addrProxy", proxy.first.ToStringIPPort().c_str());
238 successful = ApplyProxySettings();
241 case ProxySocksVersion: {
244 GetProxy(NET_IPV4, proxy);
246 proxy.second = value.toInt();
247 settings.setValue("nSocksVersion", proxy.second);
248 successful = ApplyProxySettings();
252 nTransactionFee = value.toLongLong();
253 settings.setValue("nTransactionFee", static_cast<qlonglong>(nTransactionFee));
254 emit transactionFeeChanged(nTransactionFee);
257 nDisplayUnit = value.toInt();
258 settings.setValue("nDisplayUnit", nDisplayUnit);
259 emit displayUnitChanged(nDisplayUnit);
261 case DisplayAddresses:
262 bDisplayAddresses = value.toBool();
263 settings.setValue("bDisplayAddresses", bDisplayAddresses);
265 case DetachDatabases: {
266 bool fDetachDB = value.toBool();
267 bitdb.SetDetach(fDetachDB);
268 settings.setValue("detachDB", fDetachDB);
271 case ThirdPartyTxUrls:
272 if (strThirdPartyTxUrls != value.toString()) {
273 strThirdPartyTxUrls = value.toString();
274 settings.setValue("strThirdPartyTxUrls", strThirdPartyTxUrls);
278 settings.setValue("language", value);
280 case CoinControlFeatures: {
281 fCoinControlFeatures = value.toBool();
282 settings.setValue("fCoinControlFeatures", fCoinControlFeatures);
283 emit coinControlFeaturesChanged(fCoinControlFeatures);
290 emit dataChanged(index, index);
295 qint64 OptionsModel::getTransactionFee()
297 return nTransactionFee;
300 bool OptionsModel::getCoinControlFeatures()
302 return fCoinControlFeatures;
305 bool OptionsModel::getMinimizeToTray()
307 return fMinimizeToTray;
310 bool OptionsModel::getMinimizeOnClose()
312 return fMinimizeOnClose;
315 int OptionsModel::getDisplayUnit()
320 bool OptionsModel::getDisplayAddresses()
322 return bDisplayAddresses;