Full support for other units, add configuration option for default unit (used when...
[novacoin.git] / src / qt / optionsmodel.cpp
1 #include "optionsmodel.h"
2 #include "bitcoinunits.h"
3
4 #include "headers.h"
5
6 #include <QDebug>
7
8 OptionsModel::OptionsModel(CWallet *wallet, QObject *parent) :
9     QAbstractListModel(parent),
10     wallet(wallet),
11     nDisplayUnit(BitcoinUnits::BTC)
12 {
13     // Read our specific settings from the wallet db
14     CWalletDB walletdb(wallet->strWalletFile);
15     walletdb.ReadSetting("nDisplayUnit", nDisplayUnit);
16 }
17
18 int OptionsModel::rowCount(const QModelIndex & parent) const
19 {
20     return OptionIDRowCount;
21 }
22
23 QVariant OptionsModel::data(const QModelIndex & index, int role) const
24 {
25     if(role == Qt::EditRole)
26     {
27         switch(index.row())
28         {
29         case StartAtStartup:
30             return QVariant();
31         case MinimizeToTray:
32             return QVariant(fMinimizeToTray);
33         case MapPortUPnP:
34             return QVariant(fUseUPnP);
35         case MinimizeOnClose:
36             return QVariant(fMinimizeOnClose);
37         case ConnectSOCKS4:
38             return QVariant(fUseProxy);
39         case ProxyIP:
40             return QVariant(QString::fromStdString(addrProxy.ToStringIP()));
41         case ProxyPort:
42             return QVariant(QString::fromStdString(addrProxy.ToStringPort()));
43         case Fee:
44             return QVariant(nTransactionFee);
45         case DisplayUnit:
46             return QVariant(nDisplayUnit);
47         default:
48             return QVariant();
49         }
50     }
51     return QVariant();
52 }
53
54 bool OptionsModel::setData(const QModelIndex & index, const QVariant & value, int role)
55 {
56     bool successful = true; /* set to false on parse error */
57     if(role == Qt::EditRole)
58     {
59         CWalletDB walletdb(wallet->strWalletFile);
60         switch(index.row())
61         {
62         case StartAtStartup:
63             successful = false; /*TODO*/
64             break;
65         case MinimizeToTray:
66             fMinimizeToTray = value.toBool();
67             walletdb.WriteSetting("fMinimizeToTray", fMinimizeToTray);
68             break;
69         case MapPortUPnP:
70             fUseUPnP = value.toBool();
71             walletdb.WriteSetting("fUseUPnP", fUseUPnP);
72 #ifdef USE_UPNP
73             MapPort(fUseUPnP);
74 #endif
75             break;
76         case MinimizeOnClose:
77             fMinimizeOnClose = value.toBool();
78             walletdb.WriteSetting("fMinimizeOnClose", fMinimizeOnClose);
79             break;
80         case ConnectSOCKS4:
81             fUseProxy = value.toBool();
82             walletdb.WriteSetting("fUseProxy", fUseProxy);
83             break;
84         case ProxyIP:
85             {
86                 // Use CAddress to parse and check IP
87                 CAddress addr(value.toString().toStdString() + ":1");
88                 if (addr.ip != INADDR_NONE)
89                 {
90                     addrProxy.ip = addr.ip;
91                     walletdb.WriteSetting("addrProxy", addrProxy);
92                 }
93                 else
94                 {
95                     successful = false;
96                 }
97             }
98             break;
99         case ProxyPort:
100             {
101                 int nPort = atoi(value.toString().toAscii().data());
102                 if (nPort > 0 && nPort < USHRT_MAX)
103                 {
104                     addrProxy.port = htons(nPort);
105                     walletdb.WriteSetting("addrProxy", addrProxy);
106                 }
107                 else
108                 {
109                     successful = false;
110                 }
111             }
112             break;
113         case Fee: {
114             nTransactionFee = value.toLongLong();
115             walletdb.WriteSetting("nTransactionFee", nTransactionFee);
116             }
117             break;
118         case DisplayUnit: {
119             int unit = value.toInt();
120             nDisplayUnit = unit;
121             walletdb.WriteSetting("nDisplayUnit", nDisplayUnit);
122             emit displayUnitChanged(unit);
123             }
124         default:
125             break;
126         }
127     }
128     emit dataChanged(index, index);
129
130     return successful;
131 }
132
133 qint64 OptionsModel::getTransactionFee()
134 {
135     return nTransactionFee;
136 }
137
138 bool OptionsModel::getMinimizeToTray()
139 {
140     return fMinimizeToTray;
141 }
142
143 bool OptionsModel::getMinimizeOnClose()
144 {
145     return fMinimizeOnClose;
146 }
147
148 int OptionsModel::getDisplayUnit()
149 {
150     return nDisplayUnit;
151 }