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