1 #include "optionsmodel.h"
2 #include "bitcoinunits.h"
8 OptionsModel::OptionsModel(QObject *parent) :
9 QAbstractListModel(parent)
14 void OptionsModel::Init()
18 // These are QT-only settings:
19 nDisplayUnit = settings.value("nDisplayUnit", BitcoinUnits::BTC).toInt();
20 bDisplayAddresses = settings.value("bDisplayAddresses", false).toBool();
21 fMinimizeToTray = settings.value("fMinimizeToTray", false).toBool();
22 fMinimizeOnClose = settings.value("fMinimizeOnClose", false).toBool();
23 nTransactionFee = settings.value("nTransactionFee").toLongLong();
25 // These are shared with core bitcoin; we want
26 // command-line options to override the GUI settings:
27 if (settings.contains("fUseUPnP"))
28 SoftSetBoolArg("-upnp", settings.value("fUseUPnP").toBool());
29 if (settings.contains("addrProxy") && settings.value("fUseProxy").toBool())
30 SoftSetArg("-proxy", settings.value("addrProxy").toString().toStdString());
31 if (settings.contains("detachDB"))
32 SoftSetBoolArg("-detachdb", settings.value("detachDB").toBool());
35 bool OptionsModel::Upgrade()
39 if (settings.contains("bImportFinished"))
40 return false; // Already upgraded
42 settings.setValue("bImportFinished", true);
44 // Move settings from old wallet.dat (if any):
45 CWalletDB walletdb("wallet.dat");
47 QList<QString> intOptions;
48 intOptions << "nDisplayUnit" << "nTransactionFee";
49 foreach(QString key, intOptions)
52 if (walletdb.ReadSetting(key.toStdString(), value))
54 settings.setValue(key, value);
55 walletdb.EraseSetting(key.toStdString());
58 QList<QString> boolOptions;
59 boolOptions << "bDisplayAddresses" << "fMinimizeToTray" << "fMinimizeOnClose" << "fUseProxy" << "fUseUPnP";
60 foreach(QString key, boolOptions)
63 if (walletdb.ReadSetting(key.toStdString(), value))
65 settings.setValue(key, value);
66 walletdb.EraseSetting(key.toStdString());
71 CAddress addrProxyAddress;
72 if (walletdb.ReadSetting("addrProxy", addrProxyAddress))
74 addrProxy = addrProxyAddress;
75 settings.setValue("addrProxy", addrProxy.ToStringIPPort().c_str());
76 walletdb.EraseSetting("addrProxy");
79 catch (std::ios_base::failure &e)
81 // 0.6.0rc1 saved this as a CService, which causes failure when parsing as a CAddress
82 if (walletdb.ReadSetting("addrProxy", addrProxy))
84 settings.setValue("addrProxy", addrProxy.ToStringIPPort().c_str());
85 walletdb.EraseSetting("addrProxy");
94 int OptionsModel::rowCount(const QModelIndex & parent) const
96 return OptionIDRowCount;
99 QVariant OptionsModel::data(const QModelIndex & index, int role) const
101 if(role == Qt::EditRole)
107 return QVariant(GetStartOnSystemStartup());
109 return QVariant(fMinimizeToTray);
111 return settings.value("fUseUPnP", GetBoolArg("-upnp", true));
112 case MinimizeOnClose:
113 return QVariant(fMinimizeOnClose);
115 return settings.value("fUseProxy", false);
117 return QVariant(QString::fromStdString(addrProxy.ToStringIP()));
119 return QVariant(addrProxy.GetPort());
121 return QVariant(nTransactionFee);
123 return QVariant(nDisplayUnit);
124 case DisplayAddresses:
125 return QVariant(bDisplayAddresses);
126 case DetachDatabases:
127 return QVariant(fDetachDB);
135 bool OptionsModel::setData(const QModelIndex & index, const QVariant & value, int role)
137 bool successful = true; /* set to false on parse error */
138 if(role == Qt::EditRole)
144 successful = SetStartOnSystemStartup(value.toBool());
147 fMinimizeToTray = value.toBool();
148 settings.setValue("fMinimizeToTray", fMinimizeToTray);
152 bool bUseUPnP = value.toBool();
153 settings.setValue("fUseUPnP", bUseUPnP);
157 case MinimizeOnClose:
158 fMinimizeOnClose = value.toBool();
159 settings.setValue("fMinimizeOnClose", fMinimizeOnClose);
162 fUseProxy = value.toBool();
163 settings.setValue("fUseProxy", fUseProxy);
167 // Use CAddress to parse and check IP
168 CNetAddr addr(value.toString().toStdString());
171 addrProxy.SetIP(addr);
172 settings.setValue("addrProxy", addrProxy.ToStringIPPort().c_str());
182 int nPort = atoi(value.toString().toAscii().data());
183 if (nPort > 0 && nPort < std::numeric_limits<unsigned short>::max())
185 addrProxy.SetPort(nPort);
186 settings.setValue("addrProxy", addrProxy.ToStringIPPort().c_str());
195 nTransactionFee = value.toLongLong();
196 settings.setValue("nTransactionFee", nTransactionFee);
200 int unit = value.toInt();
202 settings.setValue("nDisplayUnit", nDisplayUnit);
203 emit displayUnitChanged(unit);
206 case DisplayAddresses: {
207 bDisplayAddresses = value.toBool();
208 settings.setValue("bDisplayAddresses", bDisplayAddresses);
211 case DetachDatabases: {
212 fDetachDB = value.toBool();
213 settings.setValue("detachDB", fDetachDB);
220 emit dataChanged(index, index);
225 qint64 OptionsModel::getTransactionFee()
227 return nTransactionFee;
230 bool OptionsModel::getMinimizeToTray()
232 return fMinimizeToTray;
235 bool OptionsModel::getMinimizeOnClose()
237 return fMinimizeOnClose;
240 int OptionsModel::getDisplayUnit()
245 bool OptionsModel::getDisplayAddresses()
247 return bDisplayAddresses;