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 fMinimizeToTray = settings.value("fMinimizeToTray", false).toBool();
47 fMinimizeOnClose = settings.value("fMinimizeOnClose", false).toBool();
48 fCoinControlFeatures = settings.value("fCoinControlFeatures", false).toBool();
49 nTransactionFee = settings.value("nTransactionFee").toLongLong();
50 language = settings.value("language", "").toString();
52 // These are shared with core Bitcoin; we want
53 // command-line options to override the GUI settings:
54 if (settings.contains("fUseUPnP"))
55 SoftSetBoolArg("-upnp", settings.value("fUseUPnP").toBool());
56 if (settings.contains("addrProxy") && settings.value("fUseProxy").toBool())
57 SoftSetArg("-proxy", settings.value("addrProxy").toString().toStdString());
58 if (settings.contains("nSocksVersion") && settings.value("fUseProxy").toBool())
59 SoftSetArg("-socks", settings.value("nSocksVersion").toString().toStdString());
60 if (settings.contains("detachDB"))
61 SoftSetBoolArg("-detachdb", settings.value("detachDB").toBool());
62 if (!language.isEmpty())
63 SoftSetArg("-lang", language.toStdString());
66 bool OptionsModel::Upgrade()
70 if (settings.contains("bImportFinished"))
71 return false; // Already upgraded
73 settings.setValue("bImportFinished", true);
75 // Move settings from old wallet.dat (if any):
76 CWalletDB walletdb(strWalletFileName);
78 QList<QString> intOptions;
79 intOptions << "nDisplayUnit" << "nTransactionFee";
80 foreach(QString key, intOptions)
83 if (walletdb.ReadSetting(key.toStdString(), value))
85 settings.setValue(key, value);
86 walletdb.EraseSetting(key.toStdString());
89 QList<QString> boolOptions;
90 boolOptions << "bDisplayAddresses" << "fMinimizeToTray" << "fMinimizeOnClose" << "fUseProxy" << "fUseUPnP";
91 foreach(QString key, boolOptions)
94 if (walletdb.ReadSetting(key.toStdString(), value))
96 settings.setValue(key, value);
97 walletdb.EraseSetting(key.toStdString());
102 CAddress addrProxyAddress;
103 if (walletdb.ReadSetting("addrProxy", addrProxyAddress))
105 settings.setValue("addrProxy", addrProxyAddress.ToStringIPPort().c_str());
106 walletdb.EraseSetting("addrProxy");
109 catch (std::ios_base::failure &e)
111 // 0.6.0rc1 saved this as a CService, which causes failure when parsing as a CAddress
113 if (walletdb.ReadSetting("addrProxy", addrProxy))
115 settings.setValue("addrProxy", addrProxy.ToStringIPPort().c_str());
116 walletdb.EraseSetting("addrProxy");
119 ApplyProxySettings();
126 int OptionsModel::rowCount(const QModelIndex & parent) const
128 return OptionIDRowCount;
131 QVariant OptionsModel::data(const QModelIndex & index, int role) const
133 if(role == Qt::EditRole)
139 return QVariant(GUIUtil::GetStartOnSystemStartup());
141 return QVariant(fMinimizeToTray);
143 return settings.value("fUseUPnP", GetBoolArg("-upnp", true));
144 case MinimizeOnClose:
145 return QVariant(fMinimizeOnClose);
147 return settings.value("fUseProxy", false);
150 if (GetProxy(NET_IPV4, proxy))
151 return QVariant(QString::fromStdString(proxy.first.ToStringIP()));
153 return QVariant(QString::fromStdString("127.0.0.1"));
157 if (GetProxy(NET_IPV4, proxy))
158 return QVariant(proxy.first.GetPort());
160 return QVariant(9050);
162 case ProxySocksVersion:
163 return settings.value("nSocksVersion", 5);
165 return QVariant(nTransactionFee);
167 return QVariant(nDisplayUnit);
168 case DisplayAddresses:
169 return QVariant(bDisplayAddresses);
170 case DetachDatabases:
171 return QVariant(bitdb.GetDetach());
173 return settings.value("language", "");
174 case CoinControlFeatures:
175 return QVariant(fCoinControlFeatures);
183 bool OptionsModel::setData(const QModelIndex & index, const QVariant & value, int role)
185 bool successful = true; /* set to false on parse error */
186 if(role == Qt::EditRole)
192 successful = GUIUtil::SetStartOnSystemStartup(value.toBool());
195 fMinimizeToTray = value.toBool();
196 settings.setValue("fMinimizeToTray", fMinimizeToTray);
199 fUseUPnP = value.toBool();
200 settings.setValue("fUseUPnP", fUseUPnP);
203 case MinimizeOnClose:
204 fMinimizeOnClose = value.toBool();
205 settings.setValue("fMinimizeOnClose", fMinimizeOnClose);
208 settings.setValue("fUseProxy", value.toBool());
209 ApplyProxySettings();
213 proxy.first = CService("127.0.0.1", 9050);
214 GetProxy(NET_IPV4, proxy);
216 CNetAddr addr(value.toString().toStdString());
217 proxy.first.SetIP(addr);
218 settings.setValue("addrProxy", proxy.first.ToStringIPPort().c_str());
219 successful = ApplyProxySettings();
224 proxy.first = CService("127.0.0.1", 9050);
225 GetProxy(NET_IPV4, proxy);
227 proxy.first.SetPort(value.toInt());
228 settings.setValue("addrProxy", proxy.first.ToStringIPPort().c_str());
229 successful = ApplyProxySettings();
232 case ProxySocksVersion: {
235 GetProxy(NET_IPV4, proxy);
237 proxy.second = value.toInt();
238 settings.setValue("nSocksVersion", proxy.second);
239 successful = ApplyProxySettings();
243 nTransactionFee = value.toLongLong();
244 settings.setValue("nTransactionFee", nTransactionFee);
245 emit transactionFeeChanged(nTransactionFee);
248 nDisplayUnit = value.toInt();
249 settings.setValue("nDisplayUnit", nDisplayUnit);
250 emit displayUnitChanged(nDisplayUnit);
252 case DisplayAddresses:
253 bDisplayAddresses = value.toBool();
254 settings.setValue("bDisplayAddresses", bDisplayAddresses);
256 case DetachDatabases: {
257 bool fDetachDB = value.toBool();
258 bitdb.SetDetach(fDetachDB);
259 settings.setValue("detachDB", fDetachDB);
263 settings.setValue("language", value);
265 case CoinControlFeatures: {
266 fCoinControlFeatures = value.toBool();
267 settings.setValue("fCoinControlFeatures", fCoinControlFeatures);
268 emit coinControlFeaturesChanged(fCoinControlFeatures);
275 emit dataChanged(index, index);
280 qint64 OptionsModel::getTransactionFee()
282 return nTransactionFee;
285 bool OptionsModel::getCoinControlFeatures()
287 return fCoinControlFeatures;
290 bool OptionsModel::getMinimizeToTray()
292 return fMinimizeToTray;
295 bool OptionsModel::getMinimizeOnClose()
297 return fMinimizeOnClose;
300 int OptionsModel::getDisplayUnit()
305 bool OptionsModel::getDisplayAddresses()
307 return bDisplayAddresses;