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());
33 bool OptionsModel::Upgrade()
37 if (settings.contains("bImportFinished"))
38 return false; // Already upgraded
40 settings.setValue("bImportFinished", true);
42 // Move settings from old wallet.dat (if any):
43 CWalletDB walletdb("wallet.dat");
45 QList<QString> intOptions;
46 intOptions << "nDisplayUnit" << "nTransactionFee";
47 foreach(QString key, intOptions)
50 if (walletdb.ReadSetting(key.toStdString(), value))
52 settings.setValue(key, value);
53 walletdb.EraseSetting(key.toStdString());
56 QList<QString> boolOptions;
57 boolOptions << "bDisplayAddresses" << "fMinimizeToTray" << "fMinimizeOnClose" << "fUseProxy" << "fUseUPnP";
58 foreach(QString key, boolOptions)
61 if (walletdb.ReadSetting(key.toStdString(), value))
63 settings.setValue(key, value);
64 walletdb.EraseSetting(key.toStdString());
69 CAddress addrProxyAddress;
70 if (walletdb.ReadSetting("addrProxy", addrProxyAddress))
72 addrProxy = addrProxyAddress;
73 settings.setValue("addrProxy", addrProxy.ToStringIPPort().c_str());
74 walletdb.EraseSetting("addrProxy");
77 catch (std::ios_base::failure &e)
79 // 0.6.0rc1 saved this as a CService, which causes failure when parsing as a CAddress
80 if (walletdb.ReadSetting("addrProxy", addrProxy))
82 settings.setValue("addrProxy", addrProxy.ToStringIPPort().c_str());
83 walletdb.EraseSetting("addrProxy");
92 int OptionsModel::rowCount(const QModelIndex & parent) const
94 return OptionIDRowCount;
97 QVariant OptionsModel::data(const QModelIndex & index, int role) const
99 if(role == Qt::EditRole)
105 return QVariant(GetStartOnSystemStartup());
107 return QVariant(fMinimizeToTray);
109 return settings.value("fUseUPnP", GetBoolArg("-upnp", true));
110 case MinimizeOnClose:
111 return QVariant(fMinimizeOnClose);
113 return settings.value("fUseProxy", false);
115 return QVariant(QString::fromStdString(addrProxy.ToStringIP()));
117 return QVariant(addrProxy.GetPort());
119 return QVariant(nTransactionFee);
121 return QVariant(nDisplayUnit);
122 case DisplayAddresses:
123 return QVariant(bDisplayAddresses);
131 bool OptionsModel::setData(const QModelIndex & index, const QVariant & value, int role)
133 bool successful = true; /* set to false on parse error */
134 if(role == Qt::EditRole)
140 successful = SetStartOnSystemStartup(value.toBool());
143 fMinimizeToTray = value.toBool();
144 settings.setValue("fMinimizeToTray", fMinimizeToTray);
148 bool bUseUPnP = value.toBool();
149 settings.setValue("fUseUPnP", bUseUPnP);
153 case MinimizeOnClose:
154 fMinimizeOnClose = value.toBool();
155 settings.setValue("fMinimizeOnClose", fMinimizeOnClose);
158 fUseProxy = value.toBool();
159 settings.setValue("fUseProxy", fUseProxy);
163 // Use CAddress to parse and check IP
164 CNetAddr addr(value.toString().toStdString());
167 addrProxy.SetIP(addr);
168 settings.setValue("addrProxy", addrProxy.ToStringIPPort().c_str());
178 int nPort = atoi(value.toString().toAscii().data());
179 if (nPort > 0 && nPort < std::numeric_limits<unsigned short>::max())
181 addrProxy.SetPort(nPort);
182 settings.setValue("addrProxy", addrProxy.ToStringIPPort().c_str());
191 nTransactionFee = value.toLongLong();
192 settings.setValue("nTransactionFee", nTransactionFee);
196 int unit = value.toInt();
198 settings.setValue("nDisplayUnit", nDisplayUnit);
199 emit displayUnitChanged(unit);
201 case DisplayAddresses: {
202 bDisplayAddresses = value.toBool();
203 settings.setValue("bDisplayAddresses", bDisplayAddresses);
209 emit dataChanged(index, index);
214 qint64 OptionsModel::getTransactionFee()
216 return nTransactionFee;
219 bool OptionsModel::getMinimizeToTray()
221 return fMinimizeToTray;
224 bool OptionsModel::getMinimizeOnClose()
226 return fMinimizeOnClose;
229 int OptionsModel::getDisplayUnit()
234 bool OptionsModel::getDisplayAddresses()
236 return bDisplayAddresses;