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 nTransactionFee = settings.value("nTransactionFee").toLongLong();
49 language = settings.value("language", "").toString();
51 // These are shared with core Bitcoin; we want
52 // command-line options to override the GUI settings:
53 if (settings.contains("fUseUPnP"))
54 SoftSetBoolArg("-upnp", settings.value("fUseUPnP").toBool());
55 if (settings.contains("addrProxy") && settings.value("fUseProxy").toBool())
56 SoftSetArg("-proxy", settings.value("addrProxy").toString().toStdString());
57 if (settings.contains("nSocksVersion") && settings.value("fUseProxy").toBool())
58 SoftSetArg("-socks", settings.value("nSocksVersion").toString().toStdString());
59 if (settings.contains("detachDB"))
60 SoftSetBoolArg("-detachdb", settings.value("detachDB").toBool());
61 if (!language.isEmpty())
62 SoftSetArg("-lang", language.toStdString());
65 bool OptionsModel::Upgrade()
69 if (settings.contains("bImportFinished"))
70 return false; // Already upgraded
72 settings.setValue("bImportFinished", true);
74 // Move settings from old wallet.dat (if any):
75 CWalletDB walletdb("wallet.dat");
77 QList<QString> intOptions;
78 intOptions << "nDisplayUnit" << "nTransactionFee";
79 foreach(QString key, intOptions)
82 if (walletdb.ReadSetting(key.toStdString(), value))
84 settings.setValue(key, value);
85 walletdb.EraseSetting(key.toStdString());
88 QList<QString> boolOptions;
89 boolOptions << "bDisplayAddresses" << "fMinimizeToTray" << "fMinimizeOnClose" << "fUseProxy" << "fUseUPnP";
90 foreach(QString key, boolOptions)
93 if (walletdb.ReadSetting(key.toStdString(), value))
95 settings.setValue(key, value);
96 walletdb.EraseSetting(key.toStdString());
101 CAddress addrProxyAddress;
102 if (walletdb.ReadSetting("addrProxy", addrProxyAddress))
104 settings.setValue("addrProxy", addrProxyAddress.ToStringIPPort().c_str());
105 walletdb.EraseSetting("addrProxy");
108 catch (std::ios_base::failure &e)
110 // 0.6.0rc1 saved this as a CService, which causes failure when parsing as a CAddress
112 if (walletdb.ReadSetting("addrProxy", addrProxy))
114 settings.setValue("addrProxy", addrProxy.ToStringIPPort().c_str());
115 walletdb.EraseSetting("addrProxy");
118 ApplyProxySettings();
125 int OptionsModel::rowCount(const QModelIndex & parent) const
127 return OptionIDRowCount;
130 QVariant OptionsModel::data(const QModelIndex & index, int role) const
132 if(role == Qt::EditRole)
138 return QVariant(GUIUtil::GetStartOnSystemStartup());
140 return QVariant(fMinimizeToTray);
142 return settings.value("fUseUPnP", GetBoolArg("-upnp", true));
143 case MinimizeOnClose:
144 return QVariant(fMinimizeOnClose);
146 return settings.value("fUseProxy", false);
149 if (GetProxy(NET_IPV4, proxy))
150 return QVariant(QString::fromStdString(proxy.first.ToStringIP()));
152 return QVariant(QString::fromStdString("127.0.0.1"));
156 if (GetProxy(NET_IPV4, proxy))
157 return QVariant(proxy.first.GetPort());
159 return QVariant(9050);
161 case ProxySocksVersion:
162 return settings.value("nSocksVersion", 5);
164 return QVariant(nTransactionFee);
166 return QVariant(nDisplayUnit);
167 case DisplayAddresses:
168 return QVariant(bDisplayAddresses);
169 case DetachDatabases:
170 return QVariant(bitdb.GetDetach());
172 return settings.value("language", "");
180 bool OptionsModel::setData(const QModelIndex & index, const QVariant & value, int role)
182 bool successful = true; /* set to false on parse error */
183 if(role == Qt::EditRole)
189 successful = GUIUtil::SetStartOnSystemStartup(value.toBool());
192 fMinimizeToTray = value.toBool();
193 settings.setValue("fMinimizeToTray", fMinimizeToTray);
196 fUseUPnP = value.toBool();
197 settings.setValue("fUseUPnP", fUseUPnP);
200 case MinimizeOnClose:
201 fMinimizeOnClose = value.toBool();
202 settings.setValue("fMinimizeOnClose", fMinimizeOnClose);
205 settings.setValue("fUseProxy", value.toBool());
206 ApplyProxySettings();
210 proxy.first = CService("127.0.0.1", 9050);
211 GetProxy(NET_IPV4, proxy);
213 CNetAddr addr(value.toString().toStdString());
214 proxy.first.SetIP(addr);
215 settings.setValue("addrProxy", proxy.first.ToStringIPPort().c_str());
216 successful = ApplyProxySettings();
221 proxy.first = CService("127.0.0.1", 9050);
222 GetProxy(NET_IPV4, proxy);
224 proxy.first.SetPort(value.toInt());
225 settings.setValue("addrProxy", proxy.first.ToStringIPPort().c_str());
226 successful = ApplyProxySettings();
229 case ProxySocksVersion: {
232 GetProxy(NET_IPV4, proxy);
234 proxy.second = value.toInt();
235 settings.setValue("nSocksVersion", proxy.second);
236 successful = ApplyProxySettings();
240 nTransactionFee = value.toLongLong();
241 settings.setValue("nTransactionFee", nTransactionFee);
244 nDisplayUnit = value.toInt();
245 settings.setValue("nDisplayUnit", nDisplayUnit);
246 emit displayUnitChanged(nDisplayUnit);
248 case DisplayAddresses:
249 bDisplayAddresses = value.toBool();
250 settings.setValue("bDisplayAddresses", bDisplayAddresses);
252 case DetachDatabases: {
253 bool fDetachDB = value.toBool();
254 bitdb.SetDetach(fDetachDB);
255 settings.setValue("detachDB", fDetachDB);
259 settings.setValue("language", value);
265 emit dataChanged(index, index);
270 qint64 OptionsModel::getTransactionFee()
272 return nTransactionFee;
275 bool OptionsModel::getMinimizeToTray()
277 return fMinimizeToTray;
280 bool OptionsModel::getMinimizeOnClose()
282 return fMinimizeOnClose;
285 int OptionsModel::getDisplayUnit()
290 bool OptionsModel::getDisplayAddresses()
292 return bDisplayAddresses;