#include "optionsmodel.h"
-#include "main.h"
-#include "net.h"
+#include "bitcoinunits.h"
+#include <QSettings>
-#include <QDebug>
+#include "init.h"
+#include "db.h"
OptionsModel::OptionsModel(QObject *parent) :
QAbstractListModel(parent)
{
+ Init();
}
+void OptionsModel::Init()
+{
+ QSettings settings;
+
+ // These are QT-only settings:
+ nDisplayUnit = settings.value("nDisplayUnit", BitcoinUnits::BTC).toInt();
+ bDisplayAddresses = settings.value("bDisplayAddresses", false).toBool();
+ fMinimizeToTray = settings.value("fMinimizeToTray", false).toBool();
+ fMinimizeOnClose = settings.value("fMinimizeOnClose", false).toBool();
+ nTransactionFee = settings.value("nTransactionFee").toLongLong();
+
+ // These are shared with core bitcoin; we want
+ // command-line options to override the GUI settings:
+ if (settings.contains("fUseUPnP"))
+ SoftSetBoolArg("-upnp", settings.value("fUseUPnP").toBool());
+ if (settings.contains("addrProxy") && settings.value("fUseProxy").toBool())
+ SoftSetArg("-proxy", settings.value("addrProxy").toString().toStdString());
+}
+
+bool OptionsModel::Upgrade()
+{
+ QSettings settings;
+
+ if (settings.contains("bImportFinished"))
+ return false; // Already upgraded
+
+ settings.setValue("bImportFinished", true);
+
+ // Move settings from old wallet.dat (if any):
+ CWalletDB walletdb("wallet.dat");
+
+ QList<QString> intOptions;
+ intOptions << "nDisplayUnit" << "nTransactionFee";
+ foreach(QString key, intOptions)
+ {
+ int value = 0;
+ if (walletdb.ReadSetting(key.toStdString(), value))
+ {
+ settings.setValue(key, value);
+ walletdb.EraseSetting(key.toStdString());
+ }
+ }
+ QList<QString> boolOptions;
+ boolOptions << "bDisplayAddresses" << "fMinimizeToTray" << "fMinimizeOnClose" << "fUseProxy" << "fUseUPnP";
+ foreach(QString key, boolOptions)
+ {
+ bool value = false;
+ if (walletdb.ReadSetting(key.toStdString(), value))
+ {
+ settings.setValue(key, value);
+ walletdb.EraseSetting(key.toStdString());
+ }
+ }
+ try
+ {
+ CAddress addrProxyAddress;
+ if (walletdb.ReadSetting("addrProxy", addrProxyAddress))
+ {
+ addrProxy = addrProxyAddress;
+ settings.setValue("addrProxy", addrProxy.ToStringIPPort().c_str());
+ walletdb.EraseSetting("addrProxy");
+ }
+ }
+ catch (std::ios_base::failure &e)
+ {
+ // 0.6.0rc1 saved this as a CService, which causes failure when parsing as a CAddress
+ if (walletdb.ReadSetting("addrProxy", addrProxy))
+ {
+ settings.setValue("addrProxy", addrProxy.ToStringIPPort().c_str());
+ walletdb.EraseSetting("addrProxy");
+ }
+ }
+ Init();
+
+ return true;
+}
+
+
int OptionsModel::rowCount(const QModelIndex & parent) const
{
return OptionIDRowCount;
{
if(role == Qt::EditRole)
{
+ QSettings settings;
switch(index.row())
{
case StartAtStartup:
- return QVariant();
+ return QVariant(GetStartOnSystemStartup());
case MinimizeToTray:
return QVariant(fMinimizeToTray);
case MapPortUPnP:
- return QVariant(fUseUPnP);
+ return settings.value("fUseUPnP", GetBoolArg("-upnp", true));
case MinimizeOnClose:
return QVariant(fMinimizeOnClose);
case ConnectSOCKS4:
- return QVariant(fUseProxy);
+ return settings.value("fUseProxy", false);
case ProxyIP:
return QVariant(QString::fromStdString(addrProxy.ToStringIP()));
case ProxyPort:
- return QVariant(QString::fromStdString(addrProxy.ToStringPort()));
+ return QVariant(addrProxy.GetPort());
case Fee:
- return QVariant(QString::fromStdString(FormatMoney(nTransactionFee)));
+ return QVariant(nTransactionFee);
+ case DisplayUnit:
+ return QVariant(nDisplayUnit);
+ case DisplayAddresses:
+ return QVariant(bDisplayAddresses);
default:
return QVariant();
}
bool successful = true; /* set to false on parse error */
if(role == Qt::EditRole)
{
- CWalletDB walletdb;
+ QSettings settings;
switch(index.row())
{
case StartAtStartup:
- successful = false; /*TODO*/
+ successful = SetStartOnSystemStartup(value.toBool());
break;
case MinimizeToTray:
fMinimizeToTray = value.toBool();
- walletdb.WriteSetting("fMinimizeToTray", fMinimizeToTray);
+ settings.setValue("fMinimizeToTray", fMinimizeToTray);
break;
case MapPortUPnP:
- fUseUPnP = value.toBool();
- walletdb.WriteSetting("fUseUPnP", fUseUPnP);
-#ifdef USE_UPNP
- MapPort(fUseUPnP);
-#endif
+ {
+ bool bUseUPnP = value.toBool();
+ settings.setValue("fUseUPnP", bUseUPnP);
+ MapPort(bUseUPnP);
+ }
break;
case MinimizeOnClose:
fMinimizeOnClose = value.toBool();
- walletdb.WriteSetting("fMinimizeOnClose", fMinimizeOnClose);
+ settings.setValue("fMinimizeOnClose", fMinimizeOnClose);
break;
case ConnectSOCKS4:
fUseProxy = value.toBool();
- walletdb.WriteSetting("fUseProxy", fUseProxy);
+ settings.setValue("fUseProxy", fUseProxy);
break;
case ProxyIP:
{
// Use CAddress to parse and check IP
- CAddress addr(value.toString().toStdString() + ":1");
- if (addr.ip != INADDR_NONE)
+ CNetAddr addr(value.toString().toStdString());
+ if (addr.IsValid())
{
- addrProxy.ip = addr.ip;
- walletdb.WriteSetting("addrProxy", addrProxy);
+ addrProxy.SetIP(addr);
+ settings.setValue("addrProxy", addrProxy.ToStringIPPort().c_str());
}
else
{
case ProxyPort:
{
int nPort = atoi(value.toString().toAscii().data());
- if (nPort > 0 && nPort < USHRT_MAX)
+ if (nPort > 0 && nPort < std::numeric_limits<unsigned short>::max())
{
- addrProxy.port = htons(nPort);
- walletdb.WriteSetting("addrProxy", addrProxy);
+ addrProxy.SetPort(nPort);
+ settings.setValue("addrProxy", addrProxy.ToStringIPPort().c_str());
}
else
{
}
break;
case Fee: {
- int64 retval;
- if(ParseMoney(value.toString().toStdString(), retval))
- {
- nTransactionFee = retval;
- walletdb.WriteSetting("nTransactionFee", nTransactionFee);
- }
- else
- {
- successful = false; // Parse error
- }
+ nTransactionFee = value.toLongLong();
+ settings.setValue("nTransactionFee", nTransactionFee);
}
break;
+ case DisplayUnit: {
+ int unit = value.toInt();
+ nDisplayUnit = unit;
+ settings.setValue("nDisplayUnit", nDisplayUnit);
+ emit displayUnitChanged(unit);
+ }
+ case DisplayAddresses: {
+ bDisplayAddresses = value.toBool();
+ settings.setValue("bDisplayAddresses", bDisplayAddresses);
+ }
default:
break;
}
{
return fMinimizeOnClose;
}
+
+int OptionsModel::getDisplayUnit()
+{
+ return nDisplayUnit;
+}
+
+bool OptionsModel::getDisplayAddresses()
+{
+ return bDisplayAddresses;
+}