summaryrefslogtreecommitdiff
Unidiff
Diffstat (more/less context) (ignore whitespace changes)
-rw-r--r--noncore/apps/checkbook/checkbook.cpp18
-rw-r--r--noncore/apps/checkbook/mainwindow.cpp6
2 files changed, 17 insertions, 7 deletions
diff --git a/noncore/apps/checkbook/checkbook.cpp b/noncore/apps/checkbook/checkbook.cpp
index 706d970..44d3764 100644
--- a/noncore/apps/checkbook/checkbook.cpp
+++ b/noncore/apps/checkbook/checkbook.cpp
@@ -1,786 +1,794 @@
1/* 1/*
2                This file is part of the OPIE Project 2                This file is part of the OPIE Project
3 =. 3 =.
4             .=l. Copyright (c) 2002 Dan Williams <drw@handhelds.org> 4             .=l. Copyright (c) 2002 Dan Williams <drw@handhelds.org>
5           .>+-= 5           .>+-=
6 _;:,     .>    :=|. This file is free software; you can 6 _;:,     .>    :=|. This file is free software; you can
7.> <`_,   >  .   <= redistribute it and/or modify it under 7.> <`_,   >  .   <= redistribute it and/or modify it under
8:`=1 )Y*s>-.--   : the terms of the GNU General Public 8:`=1 )Y*s>-.--   : the terms of the GNU General Public
9.="- .-=="i,     .._ License as published by the Free Software 9.="- .-=="i,     .._ License as published by the Free Software
10 - .   .-<_>     .<> Foundation; either version 2 of the License, 10 - .   .-<_>     .<> Foundation; either version 2 of the License,
11     ._= =}       : or (at your option) any later version. 11     ._= =}       : or (at your option) any later version.
12    .%`+i>       _;_. 12    .%`+i>       _;_.
13    .i_,=:_.      -<s. This file is distributed in the hope that 13    .i_,=:_.      -<s. This file is distributed in the hope that
14     +  .  -:.       = it will be useful, but WITHOUT ANY WARRANTY; 14     +  .  -:.       = it will be useful, but WITHOUT ANY WARRANTY;
15    : ..    .:,     . . . without even the implied warranty of 15    : ..    .:,     . . . without even the implied warranty of
16    =_        +     =;=|` MERCHANTABILITY or FITNESS FOR A 16    =_        +     =;=|` MERCHANTABILITY or FITNESS FOR A
17  _.=:.       :    :=>`: PARTICULAR PURPOSE. See the GNU General 17  _.=:.       :    :=>`: PARTICULAR PURPOSE. See the GNU General
18..}^=.=       =       ; Public License for more details. 18..}^=.=       =       ; Public License for more details.
19++=   -.     .`     .: 19++=   -.     .`     .:
20 :     =  ...= . :.=- You should have received a copy of the GNU 20 :     =  ...= . :.=- You should have received a copy of the GNU
21 -.   .:....=;==+<; General Public License along with this file; 21 -.   .:....=;==+<; General Public License along with this file;
22  -_. . .   )=.  = see the file COPYING. If not, write to the 22  -_. . .   )=.  = see the file COPYING. If not, write to the
23    --        :-=` Free Software Foundation, Inc., 23    --        :-=` Free Software Foundation, Inc.,
24 59 Temple Place - Suite 330, 24 59 Temple Place - Suite 330,
25 Boston, MA 02111-1307, USA. 25 Boston, MA 02111-1307, USA.
26 26
27*/ 27*/
28 28
29#include "checkbook.h" 29#include "checkbook.h"
30#include "cbinfo.h" 30#include "cbinfo.h"
31#include "transaction.h" 31#include "transaction.h"
32#include "traninfo.h" 32#include "traninfo.h"
33#include "graph.h" 33#include "graph.h"
34#include "graphinfo.h" 34#include "graphinfo.h"
35#include "password.h" 35#include "password.h"
36#include "cfg.h" 36#include "cfg.h"
37 37
38#include <qpe/qpeapplication.h> 38#include <qpe/qpeapplication.h>
39#include <qpe/qpemessagebox.h> 39#include <qpe/qpemessagebox.h>
40#include <qpe/resource.h> 40#include <qpe/resource.h>
41 41
42#include <qcheckbox.h> 42#include <qcheckbox.h>
43#include <qcombobox.h> 43#include <qcombobox.h>
44#include <qlabel.h> 44#include <qlabel.h>
45#include <qlayout.h> 45#include <qlayout.h>
46#include <qlineedit.h> 46#include <qlineedit.h>
47#include <qmultilineedit.h> 47#include <qmultilineedit.h>
48#include <qpushbutton.h> 48#include <qpushbutton.h>
49#include <qwhatsthis.h> 49#include <qwhatsthis.h>
50#include <qpopupmenu.h> 50#include <qpopupmenu.h>
51 51
52#define COL_ID 0 52#define COL_ID 0
53#define COL_SORTDATE 1 53#define COL_SORTDATE 1
54#define COL_NUM 2 54#define COL_NUM 2
55#define COL_DATE 3 55#define COL_DATE 3
56#define COL_DESC 4 56#define COL_DESC 4
57#define COL_AMOUNT 5 57#define COL_AMOUNT 5
58#define COL_BAL 6 58#define COL_BAL 6
59 59
60// --- Checkbook -------------------------------------------------------------- 60// --- Checkbook --------------------------------------------------------------
61using namespace Opie::Ui; 61using namespace Opie::Ui;
62Checkbook::Checkbook( QWidget *parent, CBInfo *i, Cfg *cfg ) 62Checkbook::Checkbook( QWidget *parent, CBInfo *i, Cfg *cfg )
63 : QDialog( parent, 0, TRUE, WStyle_ContextHelp ) 63 : QDialog( parent, 0, TRUE, WStyle_ContextHelp )
64{ 64{
65 info = i; 65 info = i;
66 _pCfg=cfg; 66 _pCfg=cfg;
67 67
68 // Title bar 68 // Title bar
69 if ( info->name() != "" ) 69 if ( info->name() != "" )
70 { 70 {
71 QString tempstr = info->name(); 71 QString tempstr = info->name();
72 tempstr.append( " - " ); 72 tempstr.append( " - " );
73 tempstr.append( tr( "Checkbook" ) ); 73 tempstr.append( tr( "Checkbook" ) );
74 setCaption( tempstr ); 74 setCaption( tempstr );
75 } 75 }
76 else 76 else
77 { 77 {
78 setCaption( tr( "New checkbook" ) ); 78 setCaption( tr( "New checkbook" ) );
79 } 79 }
80 80
81 81
82 // Setup layout to make everything pretty 82 // Setup layout to make everything pretty
83 QVBoxLayout *layout = new QVBoxLayout( this ); 83 QVBoxLayout *layout = new QVBoxLayout( this );
84 layout->setMargin( 2 ); 84 layout->setMargin( 2 );
85 layout->setSpacing( 4 ); 85 layout->setSpacing( 4 );
86 86
87 // Setup tabs for all info 87 // Setup tabs for all info
88 mainWidget = new OTabWidget( this ); 88 mainWidget = new OTabWidget( this );
89 layout->addWidget( mainWidget ); 89 layout->addWidget( mainWidget );
90 mainWidget->addTab( initInfo(), "checkbook/infotab", tr( "Info" ) ); 90 mainWidget->addTab( initInfo(), "checkbook/infotab", tr( "Info" ) );
91 mainWidget->addTab( initTransactions(), "checkbook/trantab", tr( "Transactions" ) ); 91 mainWidget->addTab( initTransactions(), "checkbook/trantab", tr( "Transactions" ) );
92 mainWidget->addTab( initCharts(), "checkbook/charttab", tr( "Charts" ) ); 92 mainWidget->addTab( initCharts(), "checkbook/charttab", tr( "Charts" ) );
93 if( _pCfg->isShowLastTab() ) 93 if( _pCfg->isShowLastTab() )
94 mainWidget->setCurrentTab( info->getLastTab() ); 94 mainWidget->setCurrentTab( info->getLastTab() );
95 else 95 else
96 mainWidget->setCurrentTab( tr( "Info" ) ); 96 mainWidget->setCurrentTab( tr( "Info" ) );
97 connect( mainWidget, SIGNAL( currentChanged(QWidget*) ), this, SLOT( slotTab(QWidget*) ) ); 97 connect( mainWidget, SIGNAL( currentChanged(QWidget*) ), this, SLOT( slotTab(QWidget*) ) );
98 98
99 // Load checkbook information 99 // Load checkbook information
100 loadCheckbook(); 100 loadCheckbook();
101} 101}
102 102
103Checkbook::~Checkbook() 103Checkbook::~Checkbook()
104{ 104{
105} 105}
106 106
107// --- initInfo --------------------------------------------------------------- 107// --- initInfo ---------------------------------------------------------------
108QWidget *Checkbook::initInfo() 108QWidget *Checkbook::initInfo()
109{ 109{
110 QWidget *control = new QWidget( mainWidget, tr("Info") ); 110 QWidget *control = new QWidget( mainWidget, tr("Info") );
111 111
112 QVBoxLayout *vb = new QVBoxLayout( control ); 112 QVBoxLayout *vb = new QVBoxLayout( control );
113 113
114 QScrollView *sv = new QScrollView( control ); 114 QScrollView *sv = new QScrollView( control );
115 vb->addWidget( sv, 0, 0 ); 115 vb->addWidget( sv, 0, 0 );
116 sv->setResizePolicy( QScrollView::AutoOneFit ); 116 sv->setResizePolicy( QScrollView::AutoOneFit );
117 sv->setFrameStyle( QFrame::NoFrame ); 117 sv->setFrameStyle( QFrame::NoFrame );
118 118
119 QWidget *container = new QWidget( sv->viewport() ); 119 QWidget *container = new QWidget( sv->viewport() );
120 sv->addChild( container ); 120 sv->addChild( container );
121 121
122 QGridLayout *layout = new QGridLayout( container ); 122 QGridLayout *layout = new QGridLayout( container );
123 layout->setSpacing( 2 ); 123 layout->setSpacing( 2 );
124 layout->setMargin( 4 ); 124 layout->setMargin( 4 );
125 125
126 // Password protection 126 // Password protection
127 passwordCB = new QCheckBox( tr( "Password protect" ), container ); 127 passwordCB = new QCheckBox( tr( "Password protect" ), container );
128 QWhatsThis::add( passwordCB, tr( "Click here to enable/disable password protection of this checkbook." ) ); 128 QWhatsThis::add( passwordCB, tr( "Click here to enable/disable password protection of this checkbook." ) );
129 connect( passwordCB, SIGNAL( clicked() ), this, SLOT( slotPasswordClicked() ) ); 129 connect( passwordCB, SIGNAL( clicked() ), this, SLOT( slotPasswordClicked() ) );
130 layout->addMultiCellWidget( passwordCB, 0, 0, 0, 1 ); 130 layout->addMultiCellWidget( passwordCB, 0, 0, 0, 1 );
131 131
132 // Account name 132 // Account name
133 QLabel *label = new QLabel( tr( "Name:" ), container ); 133 QLabel *label = new QLabel( tr( "Name:" ), container );
134 QWhatsThis::add( label, tr( "Enter name of checkbook here." ) ); 134 QWhatsThis::add( label, tr( "Enter name of checkbook here." ) );
135 layout->addWidget( label, 1, 0 ); 135 layout->addWidget( label, 1, 0 );
136 nameEdit = new QLineEdit( container ); 136 nameEdit = new QLineEdit( container );
137 QWhatsThis::add( nameEdit, tr( "Enter name of checkbook here." ) ); 137 QWhatsThis::add( nameEdit, tr( "Enter name of checkbook here." ) );
138 connect( nameEdit, SIGNAL( textChanged(const QString&) ), 138 connect( nameEdit, SIGNAL( textChanged(const QString&) ),
139 this, SLOT( slotNameChanged(const QString&) ) ); 139 this, SLOT( slotNameChanged(const QString&) ) );
140 layout->addWidget( nameEdit, 1, 1 ); 140 layout->addWidget( nameEdit, 1, 1 );
141 141
142 // Type of account 142 // Type of account
143 label = new QLabel( tr( "Type:" ), container ); 143 label = new QLabel( tr( "Type:" ), container );
144 QWhatsThis::add( label, tr( "Select type of checkbook here." ) ); 144 QWhatsThis::add( label, tr( "Select type of checkbook here." ) );
145 layout->addWidget( label, 2, 0 ); 145 layout->addWidget( label, 2, 0 );
146 typeList = new QComboBox( container ); 146 typeList = new QComboBox( container );
147 QWhatsThis::add( typeList, tr( "Select type of checkbook here." ) ); 147 QWhatsThis::add( typeList, tr( "Select type of checkbook here." ) );
148 typeList->insertStringList( _pCfg->getAccountTypes() ); 148 typeList->insertStringList( _pCfg->getAccountTypes() );
149 layout->addWidget( typeList, 2, 1 ); 149 layout->addWidget( typeList, 2, 1 );
150 150
151 // Bank/institution name 151 // Bank/institution name
152 label = new QLabel( tr( "Bank:" ), container ); 152 label = new QLabel( tr( "Bank:" ), container );
153 QWhatsThis::add( label, tr( "Enter name of the bank for this checkbook here." ) ); 153 QWhatsThis::add( label, tr( "Enter name of the bank for this checkbook here." ) );
154 layout->addWidget( label, 3, 0 ); 154 layout->addWidget( label, 3, 0 );
155 bankEdit = new QLineEdit( container ); 155 bankEdit = new QLineEdit( container );
156 QWhatsThis::add( bankEdit, tr( "Enter name of the bank for this checkbook here." ) ); 156 QWhatsThis::add( bankEdit, tr( "Enter name of the bank for this checkbook here." ) );
157 layout->addWidget( bankEdit, 3, 1 ); 157 layout->addWidget( bankEdit, 3, 1 );
158 158
159 // Account number 159 // Account number
160 label = new QLabel( tr( "Account number:" ), container ); 160 label = new QLabel( tr( "Account number:" ), container );
161 QWhatsThis::add( label, tr( "Enter account number for this checkbook here." ) ); 161 QWhatsThis::add( label, tr( "Enter account number for this checkbook here." ) );
162 layout->addWidget( label, 4, 0 ); 162 layout->addWidget( label, 4, 0 );
163 acctNumEdit = new QLineEdit( container ); 163 acctNumEdit = new QLineEdit( container );
164 QWhatsThis::add( acctNumEdit, tr( "Enter account number for this checkbook here." ) ); 164 QWhatsThis::add( acctNumEdit, tr( "Enter account number for this checkbook here." ) );
165 layout->addWidget( acctNumEdit, 4, 1 ); 165 layout->addWidget( acctNumEdit, 4, 1 );
166 166
167 // PIN number 167 // PIN number
168 label = new QLabel( tr( "PIN number:" ), container ); 168 label = new QLabel( tr( "PIN number:" ), container );
169 QWhatsThis::add( label, tr( "Enter PIN number for this checkbook here." ) ); 169 QWhatsThis::add( label, tr( "Enter PIN number for this checkbook here." ) );
170 layout->addWidget( label, 5, 0 ); 170 layout->addWidget( label, 5, 0 );
171 pinNumEdit = new QLineEdit( container ); 171 pinNumEdit = new QLineEdit( container );
172 QWhatsThis::add( pinNumEdit, tr( "Enter PIN number for this checkbook here." ) ); 172 QWhatsThis::add( pinNumEdit, tr( "Enter PIN number for this checkbook here." ) );
173 layout->addWidget( pinNumEdit, 5, 1 ); 173 layout->addWidget( pinNumEdit, 5, 1 );
174 174
175 // Starting balance 175 // Starting balance
176 label = new QLabel( tr( "Starting balance:" ), container ); 176 label = new QLabel( tr( "Starting balance:" ), container );
177 QWhatsThis::add( label, tr( "Enter the initial balance for this checkbook here." ) ); 177 QWhatsThis::add( label, tr( "Enter the initial balance for this checkbook here." ) );
178 layout->addWidget( label, 6, 0 ); 178 layout->addWidget( label, 6, 0 );
179 balanceEdit = new QLineEdit( container ); 179 balanceEdit = new QLineEdit( container );
180 QWhatsThis::add( balanceEdit, tr( "Enter the initial balance for this checkbook here." ) ); 180 QWhatsThis::add( balanceEdit, tr( "Enter the initial balance for this checkbook here." ) );
181 connect( balanceEdit, SIGNAL( textChanged(const QString&) ), 181 connect( balanceEdit, SIGNAL( textChanged(const QString&) ),
182 this, SLOT( slotStartingBalanceChanged(const QString&) ) ); 182 this, SLOT( slotStartingBalanceChanged(const QString&) ) );
183 layout->addWidget( balanceEdit, 6, 1 ); 183 layout->addWidget( balanceEdit, 6, 1 );
184 184
185 // Notes 185 // Notes
186 label = new QLabel( tr( "Notes:" ), container ); 186 label = new QLabel( tr( "Notes:" ), container );
187 QWhatsThis::add( label, tr( "Enter any additional information for this checkbook here." ) ); 187 QWhatsThis::add( label, tr( "Enter any additional information for this checkbook here." ) );
188 layout->addWidget( label, 7, 0 ); 188 layout->addWidget( label, 7, 0 );
189 notesEdit = new QMultiLineEdit( container ); 189 notesEdit = new QMultiLineEdit( container );
190 QWhatsThis::add( notesEdit, tr( "Enter any additional information for this checkbook here." ) ); 190 QWhatsThis::add( notesEdit, tr( "Enter any additional information for this checkbook here." ) );
191 notesEdit->setMinimumHeight( 25 ); 191 notesEdit->setMinimumHeight( 25 );
192 notesEdit->setMaximumHeight( 65 ); 192 notesEdit->setMaximumHeight( 65 );
193 layout->addMultiCellWidget( notesEdit, 8, 8, 0, 1 ); 193 layout->addMultiCellWidget( notesEdit, 8, 8, 0, 1 );
194 194
195 return control; 195 return control;
196} 196}
197 197
198 198
199// --- initTransactions ------------------------------------------------------- 199// --- initTransactions -------------------------------------------------------
200QWidget *Checkbook::initTransactions() 200QWidget *Checkbook::initTransactions()
201{ 201{
202 QWidget *control = new QWidget( mainWidget, tr("Transactions") ); 202 QWidget *control = new QWidget( mainWidget, tr("Transactions") );
203 203
204 QGridLayout *layout = new QGridLayout( control ); 204 QGridLayout *layout = new QGridLayout( control );
205 layout->setSpacing( 2 ); 205 layout->setSpacing( 2 );
206 layout->setMargin( 4 ); 206 layout->setMargin( 4 );
207 207
208 // Sort selector 208 // Sort selector
209 QLabel *label = new QLabel( tr( "Sort by:" ), control ); 209 QLabel *label = new QLabel( tr( "Sort by:" ), control );
210 QWhatsThis::add( label, tr( "Select checkbook sorting here." ) ); 210 QWhatsThis::add( label, tr( "Select checkbook sorting here." ) );
211 layout->addMultiCellWidget( label, 0, 0, 0, 1 ); 211 layout->addMultiCellWidget( label, 0, 0, 0, 1 );
212 _cbSortType=new QComboBox( control ); 212 _cbSortType=new QComboBox( control );
213 _cbSortType->insertItem( tr("Entry Order") ); 213 _cbSortType->insertItem( tr("Entry Order") );
214 _cbSortType->insertItem( tr("Date") ); 214 _cbSortType->insertItem( tr("Date") );
215 _cbSortType->insertItem( tr("Number") ); 215 _cbSortType->insertItem( tr("Number") );
216 layout->addMultiCellWidget( _cbSortType, 0, 0, 1, 2 ); 216 layout->addMultiCellWidget( _cbSortType, 0, 0, 1, 2 );
217 connect( _cbSortType, SIGNAL( activated(const QString&) ), this, SLOT( slotSortChanged(const QString&) ) ); 217 connect( _cbSortType, SIGNAL( activated(const QString&) ), this, SLOT( slotSortChanged(const QString&) ) );
218 218
219 // Table 219 // Table
220 tranTable = new QListView( control ); 220 tranTable = new QListView( control );
221 QFont fnt(QPEApplication::font()); 221 QFont fnt(QPEApplication::font());
222 fnt.setPointSize( fnt.pointSize()-1 ); 222 fnt.setPointSize( fnt.pointSize()-1 );
223 tranTable->setFont( fnt ); 223 tranTable->setFont( fnt );
224 QWhatsThis::add( tranTable, tr( "This is a listing of all transactions entered for this checkbook.\n\nTo sort entries by a specific field, click on the column name." ) ); 224 QWhatsThis::add( tranTable, tr( "This is a listing of all transactions entered for this checkbook.\n\nTo sort entries by a specific field, click on the column name." ) );
225 tranTable->addColumn( tr( "Id" ) ); 225 tranTable->addColumn( tr( "Id" ) );
226 tranTable->setColumnWidthMode( COL_ID, QListView::Manual ); 226 tranTable->setColumnWidthMode( COL_ID, QListView::Manual );
227 tranTable->setColumnWidth( COL_ID, 0); 227 tranTable->setColumnWidth( COL_ID, 0);
228 tranTable->addColumn( tr( "SortDate" ) ); 228 tranTable->addColumn( tr( "SortDate" ) );
229 tranTable->setColumnWidthMode( COL_SORTDATE, QListView::Manual ); 229 tranTable->setColumnWidthMode( COL_SORTDATE, QListView::Manual );
230 tranTable->setColumnWidth( COL_SORTDATE, 0); 230 tranTable->setColumnWidth( COL_SORTDATE, 0);
231 tranTable->addColumn( tr( "Num" ) ); 231 tranTable->addColumn( tr( "Num" ) );
232 tranTable->addColumn( tr( "Date" ) ); 232 tranTable->addColumn( tr( "Date" ) );
233 //tranTable->addColumn( tr( "Cleared" ) ); 233 //tranTable->addColumn( tr( "Cleared" ) );
234 tranTable->addColumn( tr( "Description" ) ); 234 tranTable->addColumn( tr( "Description" ) );
235 int column = tranTable->addColumn( tr( "Amount" ) ); 235 int column = tranTable->addColumn( tr( "Amount" ) );
236 tranTable->setColumnAlignment( column, Qt::AlignRight ); 236 tranTable->setColumnAlignment( column, Qt::AlignRight );
237 column=tranTable->addColumn( tr("Balance") ); 237 column=tranTable->addColumn( tr("Balance") );
238 tranTable->setColumnAlignment( column, Qt::AlignRight ); 238 tranTable->setColumnAlignment( column, Qt::AlignRight );
239 tranTable->setAllColumnsShowFocus( TRUE ); 239 tranTable->setAllColumnsShowFocus( TRUE );
240 tranTable->setSorting( -1 ); 240 tranTable->setSorting( -1 );
241 layout->addMultiCellWidget( tranTable, 1, 1, 0, 2 ); 241 layout->addMultiCellWidget( tranTable, 1, 1, 0, 2 );
242 QPEApplication::setStylusOperation( tranTable->viewport(), QPEApplication::RightOnHold ); 242 QPEApplication::setStylusOperation( tranTable->viewport(), QPEApplication::RightOnHold );
243 connect( tranTable, SIGNAL( rightButtonPressed(QListViewItem*,const QPoint&,int) ), 243 connect( tranTable, SIGNAL( rightButtonPressed(QListViewItem*,const QPoint&,int) ),
244 this, SLOT( slotMenuTran(QListViewItem*,const QPoint&) ) ); 244 this, SLOT( slotMenuTran(QListViewItem*,const QPoint&) ) );
245 connect( tranTable, SIGNAL( doubleClicked(QListViewItem*) ), 245 connect( tranTable, SIGNAL( doubleClicked(QListViewItem*) ),
246 this, SLOT( slotEditTran() ) ); 246 this, SLOT( slotEditTran() ) );
247 _sortCol=COL_ID; 247 _sortCol=COL_ID;
248 248
249 // Buttons 249 // Buttons
250 QPushButton *btn = new QPushButton( Resource::loadPixmap( "new" ), tr( "New" ), control ); 250 QPushButton *btn = new QPushButton( Resource::loadPixmap( "new" ), tr( "New" ), control );
251 QWhatsThis::add( btn, tr( "Click here to add a new transaction." ) ); 251 QWhatsThis::add( btn, tr( "Click here to add a new transaction." ) );
252 connect( btn, SIGNAL( clicked() ), this, SLOT( slotNewTran() ) ); 252 connect( btn, SIGNAL( clicked() ), this, SLOT( slotNewTran() ) );
253 layout->addWidget( btn, 2, 0 ); 253 layout->addWidget( btn, 2, 0 );
254 254
255 btn = new QPushButton( Resource::loadPixmap( "edit" ), tr( "Edit" ), control ); 255 btn = new QPushButton( Resource::loadPixmap( "edit" ), tr( "Edit" ), control );
256 QWhatsThis::add( btn, tr( "Select a transaction and then click here to edit it." ) ); 256 QWhatsThis::add( btn, tr( "Select a transaction and then click here to edit it." ) );
257 connect( btn, SIGNAL( clicked() ), this, SLOT( slotEditTran() ) ); 257 connect( btn, SIGNAL( clicked() ), this, SLOT( slotEditTran() ) );
258 layout->addWidget( btn, 2, 1 ); 258 layout->addWidget( btn, 2, 1 );
259 259
260 btn = new QPushButton( Resource::loadPixmap( "trash" ), tr( "Delete" ), control ); 260 btn = new QPushButton( Resource::loadPixmap( "trash" ), tr( "Delete" ), control );
261 QWhatsThis::add( btn, tr( "Select a checkbook and then click here to delete it." ) ); 261 QWhatsThis::add( btn, tr( "Select a checkbook and then click here to delete it." ) );
262 connect( btn, SIGNAL( clicked() ), this, SLOT( slotDeleteTran() ) ); 262 connect( btn, SIGNAL( clicked() ), this, SLOT( slotDeleteTran() ) );
263 layout->addWidget( btn, 2, 2 ); 263 layout->addWidget( btn, 2, 2 );
264 264
265 return( control ); 265 return( control );
266} 266}
267 267
268 268
269// --- initCharts ------------------------------------------------------------- 269// --- initCharts -------------------------------------------------------------
270QWidget *Checkbook::initCharts() 270QWidget *Checkbook::initCharts()
271{ 271{
272 graphInfo = 0x0; 272 graphInfo = 0x0;
273 273
274 QWidget *control = new QWidget( mainWidget, tr("Charts") ); 274 QWidget *control = new QWidget( mainWidget, tr("Charts") );
275 275
276 QGridLayout *layout = new QGridLayout( control ); 276 QGridLayout *layout = new QGridLayout( control );
277 layout->setSpacing( 2 ); 277 layout->setSpacing( 2 );
278 layout->setMargin( 4 ); 278 layout->setMargin( 4 );
279 279
280 graphWidget = new Graph( control ); 280 graphWidget = new Graph( control );
281 QWhatsThis::add( graphWidget, tr( "Select the desired chart below and then click on the Draw button." ) ); 281 QWhatsThis::add( graphWidget, tr( "Select the desired chart below and then click on the Draw button." ) );
282 layout->addMultiCellWidget( graphWidget, 0, 0, 0, 2 ); 282 layout->addMultiCellWidget( graphWidget, 0, 0, 0, 2 );
283 283
284 graphList = new QComboBox( control ); 284 graphList = new QComboBox( control );
285 QWhatsThis::add( graphList, tr( "Click here to select the desired chart type." ) ); 285 QWhatsThis::add( graphList, tr( "Click here to select the desired chart type." ) );
286 graphList->insertItem( tr( "Account balance" ) ); 286 graphList->insertItem( tr( "Account balance" ) );
287 graphList->insertItem( tr( "Withdrawals by category" ) ); 287 graphList->insertItem( tr( "Withdrawals by category" ) );
288 graphList->insertItem( tr( "Deposits by category" ) ); 288 graphList->insertItem( tr( "Deposits by category" ) );
289 289
290 layout->addMultiCellWidget( graphList, 1, 1, 0, 1 ); 290 layout->addMultiCellWidget( graphList, 1, 1, 0, 1 );
291 291
292 QPushButton *btn = new QPushButton( Resource::loadPixmap( "checkbook/drawbtn" ), tr( "Draw" ), control ); 292 QPushButton *btn = new QPushButton( Resource::loadPixmap( "checkbook/drawbtn" ), tr( "Draw" ), control );
293 QWhatsThis::add( btn, tr( "Click here to draw the selected chart." ) ); 293 QWhatsThis::add( btn, tr( "Click here to draw the selected chart." ) );
294 connect( btn, SIGNAL( clicked() ), this, SLOT( slotDrawGraph() ) ); 294 connect( btn, SIGNAL( clicked() ), this, SLOT( slotDrawGraph() ) );
295 layout->addWidget( btn, 1, 2 ); 295 layout->addWidget( btn, 1, 2 );
296 296
297 return control; 297 return control;
298} 298}
299 299
300// --- loadCheckbook ---------------------------------------------------------- 300// --- loadCheckbook ----------------------------------------------------------
301void Checkbook::loadCheckbook() 301void Checkbook::loadCheckbook()
302{ 302{
303 if ( !info ) 303 if ( !info )
304 { 304 {
305 return; 305 return;
306 } 306 }
307 307
308 tranList = info->transactions(); 308 tranList = info->transactions();
309 309
310 passwordCB->setChecked( !info->password().isNull() ); 310 passwordCB->setChecked( !info->password().isNull() );
311 nameEdit->setText( info->name() ); 311 nameEdit->setText( info->name() );
312 QString temptext = info->type(); 312 QString temptext = info->type();
313 int i = typeList->count(); 313 int i = typeList->count();
314 while ( i > 0 ) 314 while ( i > 0 )
315 { 315 {
316 i--; 316 i--;
317 typeList->setCurrentItem( i ); 317 typeList->setCurrentItem( i );
318 if ( typeList->currentText() == temptext ) 318 if ( typeList->currentText() == temptext )
319 { 319 {
320 break; 320 break;
321 } 321 }
322 } 322 }
323 if( i<=0 ) { 323 if( i<=0 ) {
324 typeList->insertItem( temptext, 0 ); 324 typeList->insertItem( temptext, 0 );
325 typeList->setCurrentItem(0); 325 typeList->setCurrentItem(0);
326 } 326 }
327 bankEdit->setText( info->bank() ); 327 bankEdit->setText( info->bank() );
328 acctNumEdit->setText( info->account() ); 328 acctNumEdit->setText( info->account() );
329 pinNumEdit->setText( info->pin() ); 329 pinNumEdit->setText( info->pin() );
330 temptext.setNum( info->startingBalance(), 'f', 2 ); 330 temptext.setNum( info->startingBalance(), 'f', 2 );
331 balanceEdit->setText( temptext ); 331 balanceEdit->setText( temptext );
332 notesEdit->setText( info->notes() ); 332 notesEdit->setText( info->notes() );
333 333
334 // Load transactions 334 // Load transactions
335 float amount; 335 float amount;
336 QString stramount; 336 QString stramount;
337 QString symbol = _pCfg->getCurrencySymbol();
337 for ( TranInfo *tran = tranList->first(); tran; tran = tranList->next() ) 338 for ( TranInfo *tran = tranList->first(); tran; tran = tranList->next() )
338 { 339 {
339 amount = tran->amount(); 340 amount = tran->amount();
340 if ( tran->withdrawal() ) 341 if ( tran->withdrawal() )
341 { 342 {
342 amount *= -1; 343 amount *= -1;
343 } 344 }
344 stramount.sprintf( "%s%.2f", _pCfg->getCurrencySymbol().latin1(), amount ); 345 stramount.sprintf( "%.2f", amount );
346 stramount.prepend( symbol );
345 ( void ) new CBListItem( tran, tranTable, tran->getIdStr(), tran->datestr(false), tran->number(), tran->datestr(true), tran->desc(), stramount ); 347 ( void ) new CBListItem( tran, tranTable, tran->getIdStr(), tran->datestr(false), tran->number(), tran->datestr(true), tran->desc(), stramount );
346 } 348 }
347 349
348 // set sort order 350 // set sort order
349 bool bOk=false; 351 bool bOk=false;
350 for(int i=0; i<_cbSortType->count(); i++) { 352 for(int i=0; i<_cbSortType->count(); i++) {
351 if( _cbSortType->text(i)==info->getSortOrder() ) { 353 if( _cbSortType->text(i)==info->getSortOrder() ) {
352 _cbSortType->setCurrentItem(i); 354 _cbSortType->setCurrentItem(i);
353 slotSortChanged( info->getSortOrder() ); 355 slotSortChanged( info->getSortOrder() );
354 bOk=true; 356 bOk=true;
355 break; 357 break;
356 } 358 }
357 } 359 }
358 if( !bOk ) { 360 if( !bOk ) {
359 _cbSortType->setCurrentItem(0); 361 _cbSortType->setCurrentItem(0);
360 slotSortChanged( _cbSortType->currentText() ); 362 slotSortChanged( _cbSortType->currentText() );
361 } 363 }
362 364
363 // calc running balance 365 // calc running balance
364 adjustBalance(); 366 adjustBalance();
365} 367}
366 368
367 369
368// --- adjustBalance ---------------------------------------------------------- 370// --- adjustBalance ----------------------------------------------------------
369void Checkbook::adjustBalance() 371void Checkbook::adjustBalance()
370{ 372{
371 // update running balance in register 373 // update running balance in register
372 QString sRunning; 374 QString sRunning;
375 QString symbol = _pCfg->getCurrencySymbol();
373 float bal=info->startingBalance(); 376 float bal=info->startingBalance();
377
374 for(CBListItem *item=(CBListItem *)tranTable->firstChild(); item; item=(CBListItem *)item->nextSibling() ) { 378 for(CBListItem *item=(CBListItem *)tranTable->firstChild(); item; item=(CBListItem *)item->nextSibling() ) {
375 TranInfo *tran=item->getTranInfo(); 379 TranInfo *tran=item->getTranInfo();
376 bal=bal + (tran->withdrawal() ? -1 : 1)*tran->amount() - tran->fee(); 380 bal=bal + (tran->withdrawal() ? -1 : 1)*tran->amount() - tran->fee();
377 sRunning.sprintf( "%s%.2f", _pCfg->getCurrencySymbol().latin1(), bal ); 381 sRunning.sprintf( "%.2f", bal );
382 sRunning.prepend(symbol);
378 item->setText( COL_BAL, sRunning); 383 item->setText( COL_BAL, sRunning);
379 } 384 }
380} 385}
381 386
382// --- resort ----------------------------------------------------------------- 387// --- resort -----------------------------------------------------------------
383void Checkbook::resort() 388void Checkbook::resort()
384{ 389{
385 tranTable->setSorting(_sortCol); 390 tranTable->setSorting(_sortCol);
386 tranTable->sort(); 391 tranTable->sort();
387 tranTable->setSorting(-1); 392 tranTable->setSorting(-1);
388} 393}
389 394
390 395
391// --- accept ----------------------------------------------------------------- 396// --- accept -----------------------------------------------------------------
392void Checkbook::accept() 397void Checkbook::accept()
393{ 398{
394 info->setName( nameEdit->text() ); 399 info->setName( nameEdit->text() );
395 info->setType( typeList->currentText() ); 400 info->setType( typeList->currentText() );
396 info->setBank( bankEdit->text() ); 401 info->setBank( bankEdit->text() );
397 info->setAccount( acctNumEdit->text() ); 402 info->setAccount( acctNumEdit->text() );
398 info->setPin( pinNumEdit->text() ); 403 info->setPin( pinNumEdit->text() );
399 bool ok; 404 bool ok;
400 info->setStartingBalance( balanceEdit->text().toFloat( &ok ) ); 405 info->setStartingBalance( balanceEdit->text().toFloat( &ok ) );
401 info->setNotes( notesEdit->text() ); 406 info->setNotes( notesEdit->text() );
402 407
403 QDialog::accept(); 408 QDialog::accept();
404} 409}
405 410
406// --- slotPasswordClicked ---------------------------------------------------- 411// --- slotPasswordClicked ----------------------------------------------------
407void Checkbook::slotPasswordClicked() 412void Checkbook::slotPasswordClicked()
408{ 413{
409 if ( info->password().isNull() && passwordCB->isChecked() ) 414 if ( info->password().isNull() && passwordCB->isChecked() )
410 { 415 {
411 Password *pw = new Password( this, tr( "Enter password" ), tr( "Please enter your password:" ) ); 416 Password *pw = new Password( this, tr( "Enter password" ), tr( "Please enter your password:" ) );
412 if ( pw->exec() != QDialog::Accepted ) 417 if ( pw->exec() != QDialog::Accepted )
413 { 418 {
414 passwordCB->setChecked( FALSE ); 419 passwordCB->setChecked( FALSE );
415 delete pw; 420 delete pw;
416 return; 421 return;
417 } 422 }
418 info->setPassword( pw->password ); 423 info->setPassword( pw->password );
419 delete pw; 424 delete pw;
420 425
421 pw = new Password( this, tr( "Confirm password" ), tr( "Please confirm your password:" ) ); 426 pw = new Password( this, tr( "Confirm password" ), tr( "Please confirm your password:" ) );
422 if ( pw->exec() != QDialog::Accepted || pw->password != info->password() ) 427 if ( pw->exec() != QDialog::Accepted || pw->password != info->password() )
423 { 428 {
424 passwordCB->setChecked( FALSE ); 429 passwordCB->setChecked( FALSE );
425 info->setPassword( QString::null ); 430 info->setPassword( QString::null );
426 } 431 }
427 432
428 delete pw; 433 delete pw;
429 } 434 }
430 else if ( !info->password().isNull() && !passwordCB->isChecked() ) 435 else if ( !info->password().isNull() && !passwordCB->isChecked() )
431 { 436 {
432 Password *pw = new Password( this, tr( "Enter password" ), 437 Password *pw = new Password( this, tr( "Enter password" ),
433 tr( "Please enter your password to confirm removal of password protection:" ) ); 438 tr( "Please enter your password to confirm removal of password protection:" ) );
434 if ( pw->exec() == QDialog::Accepted && pw->password == info->password() ) 439 if ( pw->exec() == QDialog::Accepted && pw->password == info->password() )
435 { 440 {
436 info->setPassword( QString::null ); 441 info->setPassword( QString::null );
437 delete pw; 442 delete pw;
438 return; 443 return;
439 } 444 }
440 else 445 else
441 { 446 {
442 passwordCB->setChecked( TRUE ); 447 passwordCB->setChecked( TRUE );
443 } 448 }
444 449
445 delete pw; 450 delete pw;
446 } 451 }
447} 452}
448 453
449void Checkbook::slotNameChanged( const QString &newname ) 454void Checkbook::slotNameChanged( const QString &newname )
450{ 455{
451 info->setName( newname ); 456 info->setName( newname );
452 457
453 // TODO - need filedir 458 // TODO - need filedir
454// QString namestr = filedir; 459// QString namestr = filedir;
455// namestr.append( newname ); 460// namestr.append( newname );
456// namestr.append( ".qcb" ); 461// namestr.append( ".qcb" );
457// info->setFilename( namestr ); 462// info->setFilename( namestr );
458 463
459 QString namestr = newname; 464 QString namestr = newname;
460 namestr.append( " - " ); 465 namestr.append( " - " );
461 namestr.append( tr( "Checkbook" ) ); 466 namestr.append( tr( "Checkbook" ) );
462 setCaption( namestr ); 467 setCaption( namestr );
463} 468}
464 469
465 470
466// ---slotStartingBalanceChanged ---------------------------------------------- 471// ---slotStartingBalanceChanged ----------------------------------------------
467void Checkbook::slotStartingBalanceChanged( const QString &newbalance ) 472void Checkbook::slotStartingBalanceChanged( const QString &newbalance )
468{ 473{
469 bool ok; 474 bool ok;
470 info->setStartingBalance( newbalance.toFloat( &ok ) ); 475 info->setStartingBalance( newbalance.toFloat( &ok ) );
471 adjustBalance(); 476 adjustBalance();
472} 477}
473 478
474 479
475// --- slotNewTran ------------------------------------------------------------ 480// --- slotNewTran ------------------------------------------------------------
476void Checkbook::slotNewTran() 481void Checkbook::slotNewTran()
477{ 482{
478 TranInfo *traninfo = new TranInfo( info->getNextNumber() ); 483 TranInfo *traninfo = new TranInfo( info->getNextNumber() );
479 if( !_dLastNew.isNull() ) 484 if( !_dLastNew.isNull() )
480 traninfo->setDate(_dLastNew); 485 traninfo->setDate(_dLastNew);
481 486
482 Transaction *currtran = new Transaction( this, true, info->name(), 487 Transaction *currtran = new Transaction( this, true, info->name(),
483 traninfo, 488 traninfo,
484 _pCfg ); 489 _pCfg );
490 QString symbol = _pCfg->getCurrencySymbol();
485 if ( QPEApplication::execDialog( currtran ) == QDialog::Accepted ) 491 if ( QPEApplication::execDialog( currtran ) == QDialog::Accepted )
486 { 492 {
487 // Add to transaction list 493 // Add to transaction list
488 info->addTransaction( traninfo ); 494 info->addTransaction( traninfo );
489 495
490 // Add to transaction table 496 // Add to transaction table
491 float amount; 497 float amount;
492 QString stramount; 498 QString stramount;
493 amount = (traninfo->withdrawal() ? -1 : 1)*traninfo->amount(); 499 amount = (traninfo->withdrawal() ? -1 : 1)*traninfo->amount();
494 stramount.sprintf( "%s%.2f", _pCfg->getCurrencySymbol().latin1(), amount ); 500 stramount.sprintf( "%.2f", amount );
501 stramount.prepend(symbol);
495 ( void ) new CBListItem( traninfo, tranTable, traninfo->getIdStr(), traninfo->datestr(false), 502 ( void ) new CBListItem( traninfo, tranTable, traninfo->getIdStr(), traninfo->datestr(false),
496 traninfo->number(), traninfo->datestr(true), traninfo->desc(), 503 traninfo->number(), traninfo->datestr(true), traninfo->desc(),
497 stramount ); 504 stramount );
498 resort(); 505 resort();
499 adjustBalance(); 506 adjustBalance();
500 507
501 // save last date 508 // save last date
502 _dLastNew = traninfo->date(); 509 _dLastNew = traninfo->date();
503 510
504 // save description in list of payees, if not in there 511 // save description in list of payees, if not in there
505 QStringList *pLst=&_pCfg->getPayees(); 512 QStringList *pLst=&_pCfg->getPayees();
506 if( _pCfg->getSavePayees() && pLst->contains(traninfo->desc())==0 ) { 513 if( _pCfg->getSavePayees() && pLst->contains(traninfo->desc())==0 ) {
507 pLst->append( traninfo->desc() ); 514 pLst->append( traninfo->desc() );
508 pLst->sort(); 515 pLst->sort();
509 _pCfg->setDirty(true); 516 _pCfg->setDirty(true);
510 } 517 }
511 } 518 }
512 else 519 else
513 { 520 {
514 delete traninfo; 521 delete traninfo;
515 } 522 }
516} 523}
517 524
518 525
519// --- slotEditTran ----------------------------------------------------------- 526// --- slotEditTran -----------------------------------------------------------
520void Checkbook::slotEditTran() 527void Checkbook::slotEditTran()
521{ 528{
522 QListViewItem *curritem = tranTable->currentItem(); 529 QListViewItem *curritem = tranTable->currentItem();
523 if ( !curritem ) 530 if ( !curritem )
524 return; 531 return;
525 532
526 TranInfo *traninfo=info->findTransaction( curritem->text(COL_ID) ); 533 TranInfo *traninfo=info->findTransaction( curritem->text(COL_ID) );
527 534
528 Transaction *currtran = new Transaction( this, false, info->name(), 535 Transaction *currtran = new Transaction( this, false, info->name(),
529 traninfo, 536 traninfo,
530 _pCfg ); 537 _pCfg );
531 if ( QPEApplication::execDialog( currtran ) == QDialog::Accepted ) 538 if ( QPEApplication::execDialog( currtran ) == QDialog::Accepted )
532 { 539 {
533 curritem->setText( COL_NUM, traninfo->number() ); 540 curritem->setText( COL_NUM, traninfo->number() );
534 curritem->setText( COL_SORTDATE, traninfo->datestr(false) ); 541 curritem->setText( COL_SORTDATE, traninfo->datestr(false) );
535 curritem->setText( COL_DATE, traninfo->datestr(true) ); 542 curritem->setText( COL_DATE, traninfo->datestr(true) );
536 curritem->setText( COL_DESC, traninfo->desc() ); 543 curritem->setText( COL_DESC, traninfo->desc() );
537 544
538 float amount = traninfo->amount(); 545 float amount = traninfo->amount();
539 if ( traninfo->withdrawal() ) 546 if ( traninfo->withdrawal() )
540 { 547 {
541 amount *= -1; 548 amount *= -1;
542 } 549 }
543 QString stramount; 550 QString stramount;
544 stramount.sprintf( "%s%.2f", _pCfg->getCurrencySymbol().latin1(), amount ); 551 stramount.sprintf( "%.2f", amount );
552 stramount.prepend( _pCfg->getCurrencySymbol() );
545 curritem->setText( COL_AMOUNT, stramount ); 553 curritem->setText( COL_AMOUNT, stramount );
546 resort(); 554 resort();
547 adjustBalance(); 555 adjustBalance();
548 556
549 // save description in list of payees, if not in there 557 // save description in list of payees, if not in there
550 QStringList *pLst=&_pCfg->getPayees(); 558 QStringList *pLst=&_pCfg->getPayees();
551 if( _pCfg->getSavePayees() && pLst->contains(traninfo->desc())==0 ) { 559 if( _pCfg->getSavePayees() && pLst->contains(traninfo->desc())==0 ) {
552 pLst->append( traninfo->desc() ); 560 pLst->append( traninfo->desc() );
553 pLst->sort(); 561 pLst->sort();
554 _pCfg->setDirty(true); 562 _pCfg->setDirty(true);
555 } 563 }
556 } 564 }
557 565
558 delete currtran; 566 delete currtran;
559} 567}
560 568
561// --- slotMenuTran ----------------------------------------------------------- 569// --- slotMenuTran -----------------------------------------------------------
562void Checkbook::slotMenuTran(QListViewItem *item, const QPoint &pnt) 570void Checkbook::slotMenuTran(QListViewItem *item, const QPoint &pnt)
563{ 571{
564 // active item? 572 // active item?
565 if( !item ) 573 if( !item )
566 return; 574 return;
567 575
568 // Display menu 576 // Display menu
569 QPopupMenu m; 577 QPopupMenu m;
570 m.insertItem( QWidget::tr( "Edit" ), 1 ); 578 m.insertItem( QWidget::tr( "Edit" ), 1 );
571 m.insertItem( QWidget::tr( "New" ), 2 ); 579 m.insertItem( QWidget::tr( "New" ), 2 );
572 m.insertItem( QWidget::tr( "Delete" ), 3 ); 580 m.insertItem( QWidget::tr( "Delete" ), 3 );
573 int r = m.exec( pnt ); 581 int r = m.exec( pnt );
574 switch(r) { 582 switch(r) {
575 case 1: 583 case 1:
576 slotEditTran(); 584 slotEditTran();
577 break; 585 break;
578 case 2: 586 case 2:
579 slotNewTran(); 587 slotNewTran();
580 break; 588 break;
581 case 3: 589 case 3:
582 slotDeleteTran(); 590 slotDeleteTran();
583 break; 591 break;
584 } 592 }
585} 593}
586 594
587 595
588// --- slotDeleteTran --------------------------------------------------------- 596// --- slotDeleteTran ---------------------------------------------------------
589void Checkbook::slotDeleteTran() 597void Checkbook::slotDeleteTran()
590{ 598{
591 QListViewItem *curritem = tranTable->currentItem(); 599 QListViewItem *curritem = tranTable->currentItem();
592 if ( !curritem ) 600 if ( !curritem )
593 return; 601 return;
594 602
595 TranInfo *traninfo = info->findTransaction( curritem->text(COL_ID) ); 603 TranInfo *traninfo = info->findTransaction( curritem->text(COL_ID) );
596 604
597 if ( QPEMessageBox::confirmDelete ( this, tr( "Delete transaction" ), traninfo->desc() ) ) 605 if ( QPEMessageBox::confirmDelete ( this, tr( "Delete transaction" ), traninfo->desc() ) )
598 { 606 {
599 info->removeTransaction( traninfo ); 607 info->removeTransaction( traninfo );
600 delete curritem; 608 delete curritem;
601 adjustBalance(); 609 adjustBalance();
602 } 610 }
603} 611}
604 612
605void Checkbook::slotDrawGraph() 613void Checkbook::slotDrawGraph()
606{ 614{
607 if ( graphInfo ) 615 if ( graphInfo )
608 { 616 {
609 delete graphInfo; 617 delete graphInfo;
610 } 618 }
611 619
612 switch ( graphList->currentItem() ) 620 switch ( graphList->currentItem() )
613 { 621 {
614 case 0 : drawBalanceChart(); 622 case 0 : drawBalanceChart();
615 break; 623 break;
616 case 1 : drawCategoryChart( TRUE ); 624 case 1 : drawCategoryChart( TRUE );
617 break; 625 break;
618 case 2 : drawCategoryChart( FALSE ); 626 case 2 : drawCategoryChart( FALSE );
619 break; 627 break;
620 }; 628 };
621 629
622 graphWidget->setGraphInfo( graphInfo ); 630 graphWidget->setGraphInfo( graphInfo );
623 graphWidget->drawGraph( TRUE ); 631 graphWidget->drawGraph( TRUE );
624} 632}
625 633
626void Checkbook::drawBalanceChart() 634void Checkbook::drawBalanceChart()
627{ 635{
628 DataPointList *list = new DataPointList(); 636 DataPointList *list = new DataPointList();
629 637
630 float balance = info->startingBalance(); 638 float balance = info->startingBalance();
631 float amount; 639 float amount;
632 QString label; 640 QString label;
633 int i = 0; 641 int i = 0;
634 int count = tranList->count(); 642 int count = tranList->count();
635 643
636 for ( TranInfo *tran = tranList->first(); tran; tran = tranList->next() ) 644 for ( TranInfo *tran = tranList->first(); tran; tran = tranList->next() )
637 { 645 {
638 i++; 646 i++;
639 balance -= tran->fee(); 647 balance -= tran->fee();
640 amount = tran->amount(); 648 amount = tran->amount();
641 if ( tran->withdrawal() ) 649 if ( tran->withdrawal() )
642 { 650 {
643 amount *= -1; 651 amount *= -1;
644 } 652 }
645 balance += amount; 653 balance += amount;
646 if ( i == 1 || i == count / 2 || i == count ) 654 if ( i == 1 || i == count / 2 || i == count )
647 { 655 {
648 label = tran->datestr(true); 656 label = tran->datestr(true);
649 } 657 }
650 else 658 else
651 { 659 {
652 label = ""; 660 label = "";
653 } 661 }
654 list->append( new DataPointInfo( label, balance ) ); 662 list->append( new DataPointInfo( label, balance ) );
655 } 663 }
656 664
657 graphInfo = new GraphInfo( GraphInfo::BarChart, list ); 665 graphInfo = new GraphInfo( GraphInfo::BarChart, list );
658} 666}
659 667
660void Checkbook::drawCategoryChart( bool withdrawals ) 668void Checkbook::drawCategoryChart( bool withdrawals )
661{ 669{
662 DataPointList *list = new DataPointList(); 670 DataPointList *list = new DataPointList();
663 671
664 TranInfo *tran = tranList->first(); 672 TranInfo *tran = tranList->first();
665 if ( tran && tran->withdrawal() == withdrawals ) 673 if ( tran && tran->withdrawal() == withdrawals )
666 { 674 {
667 list->append( new DataPointInfo( tran->category(), tran->amount() ) ); 675 list->append( new DataPointInfo( tran->category(), tran->amount() ) );
668 } 676 }
669 tran = tranList->next(); 677 tran = tranList->next();
670 678
671 DataPointInfo *cat; 679 DataPointInfo *cat;
672 for ( ; tran; tran = tranList->next() ) 680 for ( ; tran; tran = tranList->next() )
673 { 681 {
674 if ( tran->withdrawal() == withdrawals ) 682 if ( tran->withdrawal() == withdrawals )
675 { 683 {
676 // Find category in list 684 // Find category in list
677 for ( cat = list->first(); cat; cat = list->next() ) 685 for ( cat = list->first(); cat; cat = list->next() )
678 { 686 {
679 if ( cat->label() == tran->category() ) 687 if ( cat->label() == tran->category() )
680 { 688 {
681 break; 689 break;
682 } 690 }
683 } 691 }
684 if ( cat && cat->label() == tran->category() ) 692 if ( cat && cat->label() == tran->category() )
685 { // Found category, add to transaction to category total 693 { // Found category, add to transaction to category total
686 cat->addToValue( tran->amount() ); 694 cat->addToValue( tran->amount() );
687 } 695 }
688 else 696 else
689 { // Didn't find category, add category to list 697 { // Didn't find category, add category to list
690 list->append( new DataPointInfo( tran->category(), tran->amount() ) ); 698 list->append( new DataPointInfo( tran->category(), tran->amount() ) );
691 } 699 }
692 } 700 }
693 } 701 }
694 702
695 graphInfo = new GraphInfo( GraphInfo::PieChart, list ); 703 graphInfo = new GraphInfo( GraphInfo::PieChart, list );
696} 704}
697 705
698CBListItem::CBListItem( TranInfo *pTran, QListView *parent, QString label1, QString label2, 706CBListItem::CBListItem( TranInfo *pTran, QListView *parent, QString label1, QString label2,
699 QString label3, QString label4, QString label5, QString label6, QString label7, 707 QString label3, QString label4, QString label5, QString label6, QString label7,
700 QString label8 ) 708 QString label8 )
701 : QListViewItem( parent, label1, label2, label3, label4, label5, label6, label7, label8 ) 709 : QListViewItem( parent, label1, label2, label3, label4, label5, label6, label7, label8 )
702{ 710{
703 _pTran=pTran; 711 _pTran=pTran;
704 m_known = FALSE; 712 m_known = FALSE;
705 owner = parent; 713 owner = parent;
706} 714}
707 715
708void CBListItem::paintCell( QPainter *p, const QColorGroup &cg, int column, int width, int align ) 716void CBListItem::paintCell( QPainter *p, const QColorGroup &cg, int column, int width, int align )
709{ 717{
710 QColorGroup _cg = cg; 718 QColorGroup _cg = cg;
711 const QPixmap *pm = listView()->viewport()->backgroundPixmap(); 719 const QPixmap *pm = listView()->viewport()->backgroundPixmap();
712 if ( pm && !pm->isNull() ) 720 if ( pm && !pm->isNull() )
713 { 721 {
714 _cg.setBrush( QColorGroup::Base, QBrush( cg.base(), *pm ) ); 722 _cg.setBrush( QColorGroup::Base, QBrush( cg.base(), *pm ) );
715 p->setBrushOrigin( -listView()->contentsX(), -listView()->contentsY() ); 723 p->setBrushOrigin( -listView()->contentsX(), -listView()->contentsY() );
716 } 724 }
717 else if ( isAltBackground() ) 725 else if ( isAltBackground() )
718 _cg.setColor(QColorGroup::Base, cg.background() ); 726 _cg.setColor(QColorGroup::Base, cg.background() );
719 727
720 QListViewItem::paintCell(p, _cg, column, width, align); 728 QListViewItem::paintCell(p, _cg, column, width, align);
721} 729}
722 730
723// --- CBListItem::isAltBackground -------------------------------------------- 731// --- CBListItem::isAltBackground --------------------------------------------
724bool CBListItem::isAltBackground() 732bool CBListItem::isAltBackground()
725{ 733{
726 QListView *lv = static_cast<QListView *>( listView() ); 734 QListView *lv = static_cast<QListView *>( listView() );
727 if ( lv ) 735 if ( lv )
728 { 736 {
729 CBListItem *above = 0; 737 CBListItem *above = 0;
730 above = (CBListItem *)( itemAbove() ); 738 above = (CBListItem *)( itemAbove() );
731 m_known = above ? above->m_known : true; 739 m_known = above ? above->m_known : true;
732 if ( m_known ) 740 if ( m_known )
733 { 741 {
734 m_odd = above ? !above->m_odd : false; 742 m_odd = above ? !above->m_odd : false;
735 } 743 }
736 else 744 else
737 { 745 {
738 CBListItem *item; 746 CBListItem *item;
739 bool previous = true; 747 bool previous = true;
740 if ( parent() ) 748 if ( parent() )
741 { 749 {
742 item = (CBListItem *)( parent() ); 750 item = (CBListItem *)( parent() );
743 if ( item ) 751 if ( item )
744 previous = item->m_odd; 752 previous = item->m_odd;
745 item = (CBListItem *)( parent()->firstChild() ); 753 item = (CBListItem *)( parent()->firstChild() );
746 } 754 }
747 else 755 else
748 { 756 {
749 item = (CBListItem *)( lv->firstChild() ); 757 item = (CBListItem *)( lv->firstChild() );
750 } 758 }
751 759
752 while(item) 760 while(item)
753 { 761 {
754 item->m_odd = previous = !previous; 762 item->m_odd = previous = !previous;
755 item->m_known = true; 763 item->m_known = true;
756 item = (CBListItem *)( item->nextSibling() ); 764 item = (CBListItem *)( item->nextSibling() );
757 } 765 }
758 } 766 }
759 return m_odd; 767 return m_odd;
760 } 768 }
761 return false; 769 return false;
762} 770}
763 771
764 772
765// --- slotTab ---------------------------------------------------------------- 773// --- slotTab ----------------------------------------------------------------
766void Checkbook::slotTab(QWidget *tab) 774void Checkbook::slotTab(QWidget *tab)
767{ 775{
768 if( !tab || !info ) return; 776 if( !tab || !info ) return;
769 info->setLastTab( tab->name() ); 777 info->setLastTab( tab->name() );
770} 778}
771 779
772 780
773// --- slotSortChanged --------------------------------------------------------- 781// --- slotSortChanged ---------------------------------------------------------
774void Checkbook::slotSortChanged( const QString &selc ) 782void Checkbook::slotSortChanged( const QString &selc )
775{ 783{
776 if( selc==tr("Entry Order") ) { 784 if( selc==tr("Entry Order") ) {
777 _sortCol=COL_ID; 785 _sortCol=COL_ID;
778 } else if( selc==tr("Number") ) { 786 } else if( selc==tr("Number") ) {
779 _sortCol=COL_NUM; 787 _sortCol=COL_NUM;
780 } else if( selc==tr("Date") ) { 788 } else if( selc==tr("Date") ) {
781 _sortCol=COL_SORTDATE; 789 _sortCol=COL_SORTDATE;
782 } 790 }
783 info->setSortOrder( selc ); 791 info->setSortOrder( selc );
784 resort(); 792 resort();
785} 793}
786 794
diff --git a/noncore/apps/checkbook/mainwindow.cpp b/noncore/apps/checkbook/mainwindow.cpp
index ce15e3e..c7ffa7c 100644
--- a/noncore/apps/checkbook/mainwindow.cpp
+++ b/noncore/apps/checkbook/mainwindow.cpp
@@ -1,358 +1,360 @@
1/* 1/*
2                This file is part of the OPIE Project 2                This file is part of the OPIE Project
3 =. 3 =.
4             .=l. Copyright (c) 2002 Dan Williams <drw@handhelds.org> 4             .=l. Copyright (c) 2002 Dan Williams <drw@handhelds.org>
5           .>+-= 5           .>+-=
6 _;:,     .>    :=|. This file is free software; you can 6 _;:,     .>    :=|. This file is free software; you can
7.> <`_,   >  .   <= redistribute it and/or modify it under 7.> <`_,   >  .   <= redistribute it and/or modify it under
8:`=1 )Y*s>-.--   : the terms of the GNU General Public 8:`=1 )Y*s>-.--   : the terms of the GNU General Public
9.="- .-=="i,     .._ License as published by the Free Software 9.="- .-=="i,     .._ License as published by the Free Software
10 - .   .-<_>     .<> Foundation; either version 2 of the License, 10 - .   .-<_>     .<> Foundation; either version 2 of the License,
11     ._= =}       : or (at your option) any later version. 11     ._= =}       : or (at your option) any later version.
12    .%`+i>       _;_. 12    .%`+i>       _;_.
13    .i_,=:_.      -<s. This file is distributed in the hope that 13    .i_,=:_.      -<s. This file is distributed in the hope that
14     +  .  -:.       = it will be useful, but WITHOUT ANY WARRANTY; 14     +  .  -:.       = it will be useful, but WITHOUT ANY WARRANTY;
15    : ..    .:,     . . . without even the implied warranty of 15    : ..    .:,     . . . without even the implied warranty of
16    =_        +     =;=|` MERCHANTABILITY or FITNESS FOR A 16    =_        +     =;=|` MERCHANTABILITY or FITNESS FOR A
17  _.=:.       :    :=>`: PARTICULAR PURPOSE. See the GNU General 17  _.=:.       :    :=>`: PARTICULAR PURPOSE. See the GNU General
18..}^=.=       =       ; Public License for more details. 18..}^=.=       =       ; Public License for more details.
19++=   -.     .`     .: 19++=   -.     .`     .:
20 :     =  ...= . :.=- You should have received a copy of the GNU 20 :     =  ...= . :.=- You should have received a copy of the GNU
21 -.   .:....=;==+<; General Public License along with this file; 21 -.   .:....=;==+<; General Public License along with this file;
22  -_. . .   )=.  = see the file COPYING. If not, write to the 22  -_. . .   )=.  = see the file COPYING. If not, write to the
23    --        :-=` Free Software Foundation, Inc., 23    --        :-=` Free Software Foundation, Inc.,
24 59 Temple Place - Suite 330, 24 59 Temple Place - Suite 330,
25 Boston, MA 02111-1307, USA. 25 Boston, MA 02111-1307, USA.
26 26
27*/ 27*/
28 28
29#include "mainwindow.h" 29#include "mainwindow.h"
30#include "cbinfo.h" 30#include "cbinfo.h"
31#include "configuration.h" 31#include "configuration.h"
32#include "password.h" 32#include "password.h"
33#include "checkbook.h" 33#include "checkbook.h"
34 34
35#include <qpe/config.h> 35#include <qpe/config.h>
36#include <qpe/qpeapplication.h> 36#include <qpe/qpeapplication.h>
37#include <qpe/qpemessagebox.h> 37#include <qpe/qpemessagebox.h>
38#include <qtoolbar.h> 38#include <qtoolbar.h>
39#include <qpe/resource.h> 39#include <qpe/resource.h>
40 40
41#include <qmenubar.h> 41#include <qmenubar.h>
42#include <qaction.h> 42#include <qaction.h>
43#include <qdir.h> 43#include <qdir.h>
44#include <qwhatsthis.h> 44#include <qwhatsthis.h>
45 45
46 46
47MainWindow::MainWindow( QWidget* parent, const char* name, WFlags /*fl*/ ) 47MainWindow::MainWindow( QWidget* parent, const char* name, WFlags /*fl*/ )
48 : QMainWindow( parent, name, WStyle_ContextHelp ) 48 : QMainWindow( parent, name, WStyle_ContextHelp )
49{ 49{
50 setCaption( tr( "Checkbook" ) ); 50 setCaption( tr( "Checkbook" ) );
51 51
52 cbDir = Global::applicationFileName( "checkbook", "" ); 52 cbDir = Global::applicationFileName( "checkbook", "" );
53 lockIcon = Resource::loadPixmap( "locked" ); 53 lockIcon = Resource::loadPixmap( "locked" );
54 54
55 // Load configuration options 55 // Load configuration options
56 Config config( "checkbook" ); 56 Config config( "checkbook" );
57 _cfg.readConfig( config ); 57 _cfg.readConfig( config );
58 58
59 59
60 // Build menu and tool bars 60 // Build menu and tool bars
61 setToolBarsMovable( FALSE ); 61 setToolBarsMovable( FALSE );
62 62
63 QToolBar *bar = new QToolBar( this ); 63 QToolBar *bar = new QToolBar( this );
64 bar->setHorizontalStretchable( TRUE ); 64 bar->setHorizontalStretchable( TRUE );
65 QMenuBar *mb = new QMenuBar( bar ); 65 QMenuBar *mb = new QMenuBar( bar );
66 mb->setMargin( 0 ); 66 mb->setMargin( 0 );
67 QPopupMenu *popup = new QPopupMenu( this ); 67 QPopupMenu *popup = new QPopupMenu( this );
68 68
69 bar = new QToolBar( this ); 69 bar = new QToolBar( this );
70 QAction *a = new QAction( tr( "New" ), Resource::loadPixmap( "new" ), QString::null, 0, this, 0 ); 70 QAction *a = new QAction( tr( "New" ), Resource::loadPixmap( "new" ), QString::null, 0, this, 0 );
71 a->setWhatsThis( tr( "Click here to create a new checkbook.\n\nYou also can select New from the Checkbook menu." ) ); 71 a->setWhatsThis( tr( "Click here to create a new checkbook.\n\nYou also can select New from the Checkbook menu." ) );
72 connect( a, SIGNAL( activated() ), this, SLOT( slotNew() ) ); 72 connect( a, SIGNAL( activated() ), this, SLOT( slotNew() ) );
73 a->addTo( popup ); 73 a->addTo( popup );
74 a->addTo( bar ); 74 a->addTo( bar );
75 75
76 actionOpen = new QAction( tr( "Edit" ), Resource::loadPixmap( "edit" ), QString::null, 76 actionOpen = new QAction( tr( "Edit" ), Resource::loadPixmap( "edit" ), QString::null,
77 0, this, 0 ); 77 0, this, 0 );
78 actionOpen->setWhatsThis( tr( "Select a checkbook and then click here to edit it.\n\nYou also can select Edit from the Checkbook menu, or click and hold on a checkbook name." ) ); 78 actionOpen->setWhatsThis( tr( "Select a checkbook and then click here to edit it.\n\nYou also can select Edit from the Checkbook menu, or click and hold on a checkbook name." ) );
79 connect( actionOpen, SIGNAL( activated() ), this, SLOT( slotEdit() ) ); 79 connect( actionOpen, SIGNAL( activated() ), this, SLOT( slotEdit() ) );
80 actionOpen->addTo( popup ); 80 actionOpen->addTo( popup );
81 actionOpen->addTo( bar ); 81 actionOpen->addTo( bar );
82 82
83 actionDelete = new QAction( tr( "Delete" ), Resource::loadPixmap( "trash" ), QString::null, 83 actionDelete = new QAction( tr( "Delete" ), Resource::loadPixmap( "trash" ), QString::null,
84 0, this, 0 ); 84 0, this, 0 );
85 actionDelete->setWhatsThis( tr( "Select a checkbook and then click here delete it.\n\nYou also can select Delete from the Checkbook menu." ) ); 85 actionDelete->setWhatsThis( tr( "Select a checkbook and then click here delete it.\n\nYou also can select Delete from the Checkbook menu." ) );
86 connect( actionDelete, SIGNAL( activated() ), this, SLOT( slotDelete() ) ); 86 connect( actionDelete, SIGNAL( activated() ), this, SLOT( slotDelete() ) );
87 actionDelete->addTo( popup ); 87 actionDelete->addTo( popup );
88 actionDelete->addTo( bar ); 88 actionDelete->addTo( bar );
89 89
90 popup->insertSeparator(); 90 popup->insertSeparator();
91 91
92 a = new QAction( tr( "Configure" ), Resource::loadPixmap( "SettingsIcon" ), QString::null, 0, this, 0 ); 92 a = new QAction( tr( "Configure" ), Resource::loadPixmap( "SettingsIcon" ), QString::null, 0, this, 0 );
93 a->setWhatsThis( tr( "Click here to configure this app." ) ); 93 a->setWhatsThis( tr( "Click here to configure this app." ) );
94 connect( a, SIGNAL( activated() ), this, SLOT( slotConfigure() ) ); 94 connect( a, SIGNAL( activated() ), this, SLOT( slotConfigure() ) );
95 a->addTo( popup ); 95 a->addTo( popup );
96 a->addTo( bar ); 96 a->addTo( bar );
97 97
98 mb->insertItem( tr( "Checkbook" ), popup ); 98 mb->insertItem( tr( "Checkbook" ), popup );
99 99
100 // Load Checkbook selection list 100 // Load Checkbook selection list
101 checkbooks = new CBInfoList(); 101 checkbooks = new CBInfoList();
102 102
103 QDir checkdir( cbDir ); 103 QDir checkdir( cbDir );
104 if (checkdir.exists() == true) 104 if (checkdir.exists() == true)
105 { 105 {
106 QStringList cblist = checkdir.entryList( "*.qcb", QDir::Files|QDir::Readable|QDir::Writable, 106 QStringList cblist = checkdir.entryList( "*.qcb", QDir::Files|QDir::Readable|QDir::Writable,
107 QDir::Time ); 107 QDir::Time );
108 CBInfo *cb = 0x0; 108 CBInfo *cb = 0x0;
109 QString filename; 109 QString filename;
110 110
111 for ( QStringList::Iterator it = cblist.begin(); it != cblist.end(); it++ ) 111 for ( QStringList::Iterator it = cblist.begin(); it != cblist.end(); it++ )
112 { 112 {
113 filename = cbDir; 113 filename = cbDir;
114 filename.append( (*it) ); 114 filename.append( (*it) );
115 115
116 cb = new CBInfo( (*it).remove( (*it).find('.'), (*it).length() ), filename ); 116 cb = new CBInfo( (*it).remove( (*it).find('.'), (*it).length() ), filename );
117 checkbooks->inSort( cb ); 117 checkbooks->inSort( cb );
118 } 118 }
119 } 119 }
120 120
121 // Build Checkbook selection list control 121 // Build Checkbook selection list control
122 cbList = 0x0; 122 cbList = 0x0;
123 buildList(); 123 buildList();
124 124
125 // open last book? 125 // open last book?
126 if( _cfg.isOpenLastBook() ) { 126 if( _cfg.isOpenLastBook() ) {
127 this->show(); 127 this->show();
128 this->showMaximized(); 128 this->showMaximized();
129 QListViewItem *itm=cbList->firstChild(); 129 QListViewItem *itm=cbList->firstChild();
130 while( itm ) { 130 while( itm ) {
131 if( itm->text(posName)==_cfg.getLastBook() ) { 131 if( itm->text(posName)==_cfg.getLastBook() ) {
132 openBook( itm ); 132 openBook( itm );
133 break; 133 break;
134 } 134 }
135 itm=itm->nextSibling(); 135 itm=itm->nextSibling();
136 } 136 }
137 } 137 }
138} 138}
139 139
140 140
141// --- ~MainWindow ------------------------------------------------------------ 141// --- ~MainWindow ------------------------------------------------------------
142MainWindow::~MainWindow() 142MainWindow::~MainWindow()
143{ 143{
144 writeConfig(); 144 writeConfig();
145} 145}
146 146
147 147
148// --- buildList -------------------------------------------------------------- 148// --- buildList --------------------------------------------------------------
149void MainWindow::buildList() 149void MainWindow::buildList()
150{ 150{
151 if ( cbList ) 151 if ( cbList )
152 delete cbList; 152 delete cbList;
153 153
154 cbList = new QListView( this ); 154 cbList = new QListView( this );
155 QWhatsThis::add( cbList, tr( "This is a listing of all checkbooks currently available." ) ); 155 QWhatsThis::add( cbList, tr( "This is a listing of all checkbooks currently available." ) );
156 156
157 if ( _cfg.getShowLocks() ) 157 if ( _cfg.getShowLocks() )
158 { 158 {
159 cbList->addColumn( Resource::loadIconSet( "locked" ), "", 24 ); 159 cbList->addColumn( Resource::loadIconSet( "locked" ), "", 24 );
160 posName = 1; 160 posName = 1;
161 } 161 }
162 else 162 else
163 { 163 {
164 posName = 0; 164 posName = 0;
165 } 165 }
166 cbList->addColumn( tr( "Checkbook Name" ) ); 166 cbList->addColumn( tr( "Checkbook Name" ) );
167 if ( _cfg.getShowBalances() ) 167 if ( _cfg.getShowBalances() )
168 { 168 {
169 int colnum = cbList->addColumn( tr( "Balance" ) ); 169 int colnum = cbList->addColumn( tr( "Balance" ) );
170 cbList->setColumnAlignment( colnum, Qt::AlignRight ); 170 cbList->setColumnAlignment( colnum, Qt::AlignRight );
171 } 171 }
172 cbList->setAllColumnsShowFocus( TRUE ); 172 cbList->setAllColumnsShowFocus( TRUE );
173 cbList->setSorting( posName ); 173 cbList->setSorting( posName );
174 QPEApplication::setStylusOperation( cbList->viewport(), QPEApplication::RightOnHold ); 174 QPEApplication::setStylusOperation( cbList->viewport(), QPEApplication::RightOnHold );
175 connect( cbList, SIGNAL( rightButtonPressed(QListViewItem*,const QPoint&,int) ), 175 connect( cbList, SIGNAL( rightButtonPressed(QListViewItem*,const QPoint&,int) ),
176 this, SLOT( slotEdit() ) ); 176 this, SLOT( slotEdit() ) );
177 setCentralWidget( cbList ); 177 setCentralWidget( cbList );
178 178
179 for ( CBInfo *cb = checkbooks->first(); cb; cb = checkbooks->next() ) 179 for ( CBInfo *cb = checkbooks->first(); cb; cb = checkbooks->next() )
180 { 180 {
181 addCheckbook( cb ); 181 addCheckbook( cb );
182 } 182 }
183} 183}
184 184
185void MainWindow::addCheckbook( CBInfo *cb ) 185void MainWindow::addCheckbook( CBInfo *cb )
186{ 186{
187 QListViewItem *lvi = new QListViewItem( cbList ); 187 QListViewItem *lvi = new QListViewItem( cbList );
188 if ( _cfg.getShowLocks() && !cb->password().isNull() ) 188 if ( _cfg.getShowLocks() && !cb->password().isNull() )
189 { 189 {
190 lvi->setPixmap( 0, lockIcon ); 190 lvi->setPixmap( 0, lockIcon );
191 } 191 }
192 lvi->setText( posName, cb->name() ); 192 lvi->setText( posName, cb->name() );
193 if ( _cfg.getShowBalances() ) 193 if ( _cfg.getShowBalances() )
194 { 194 {
195 QString balance; 195 QString balance;
196 balance.sprintf( "%s%.2f", _cfg.getCurrencySymbol().latin1(), cb->balance() ); 196 balance.sprintf( "%.2f", cb->balance() );
197 balance.prepend( _cfg.getCurrencySymbol() );
197 lvi->setText( posName + 1, balance ); 198 lvi->setText( posName + 1, balance );
198 } 199 }
199} 200}
200 201
201void MainWindow::buildFilename( const QString &name ) 202void MainWindow::buildFilename( const QString &name )
202{ 203{
203 tempFilename = cbDir; 204 tempFilename = cbDir;
204 tempFilename.append( name ); 205 tempFilename.append( name );
205 tempFilename.append( ".qcb" ); 206 tempFilename.append( ".qcb" );
206} 207}
207 208
208void MainWindow::slotNew() 209void MainWindow::slotNew()
209{ 210{
210 CBInfo *cb = new CBInfo(); 211 CBInfo *cb = new CBInfo();
211 212
212 Checkbook *currcb = new Checkbook( this, cb, &_cfg ); 213 Checkbook *currcb = new Checkbook( this, cb, &_cfg );
213 if ( QPEApplication::execDialog( currcb ) == QDialog::Accepted ) 214 if ( QPEApplication::execDialog( currcb ) == QDialog::Accepted )
214 { 215 {
215 // Save new checkbook 216 // Save new checkbook
216 buildFilename( cb->name() ); 217 buildFilename( cb->name() );
217 _cfg.setLastBook( cb->name() ); 218 _cfg.setLastBook( cb->name() );
218 cb->setFilename( tempFilename ); 219 cb->setFilename( tempFilename );
219 cb->write(); 220 cb->write();
220 221
221 // Add to listbox 222 // Add to listbox
222 checkbooks->inSort( cb ); 223 checkbooks->inSort( cb );
223 addCheckbook( cb ); 224 addCheckbook( cb );
224 } 225 }
225 delete currcb; 226 delete currcb;
226} 227}
227 228
228// --- slotEdit --------------------------------------------------------------- 229// --- slotEdit ---------------------------------------------------------------
229void MainWindow::slotEdit() 230void MainWindow::slotEdit()
230{ 231{
231 // get name and open it 232 // get name and open it
232 QListViewItem *curritem = cbList->currentItem(); 233 QListViewItem *curritem = cbList->currentItem();
233 if ( !curritem ) 234 if ( !curritem )
234 return; 235 return;
235 openBook( curritem ); 236 openBook( curritem );
236} 237}
237 238
238 239
239// --- openBook --------------------------------------------------------------- 240// --- openBook ---------------------------------------------------------------
240void MainWindow::openBook(QListViewItem *curritem) 241void MainWindow::openBook(QListViewItem *curritem)
241{ 242{
242 // find book in List 243 // find book in List
243 QString currname=curritem->text(posName); 244 QString currname=curritem->text(posName);
244 CBInfo *cb = checkbooks->first(); 245 CBInfo *cb = checkbooks->first();
245 while ( cb ) { 246 while ( cb ) {
246 if ( cb->name() == currname ) 247 if ( cb->name() == currname )
247 break; 248 break;
248 cb = checkbooks->next(); 249 cb = checkbooks->next();
249 } 250 }
250 if ( !cb ) return; 251 if ( !cb ) return;
251 252
252 // 253 //
253 buildFilename( currname ); 254 buildFilename( currname );
254 float currbalance = cb->balance(); 255 float currbalance = cb->balance();
255 bool currlock = !cb->password().isNull(); 256 bool currlock = !cb->password().isNull();
256 257
257 if ( currlock ) 258 if ( currlock )
258 { 259 {
259 Password *pw = new Password( this, tr( "Enter password" ), tr( "Please enter your password:" ) ); 260 Password *pw = new Password( this, tr( "Enter password" ), tr( "Please enter your password:" ) );
260 if ( pw->exec() != QDialog::Accepted || pw->password != cb->password() ) 261 if ( pw->exec() != QDialog::Accepted || pw->password != cb->password() )
261 { 262 {
262 delete pw; 263 delete pw;
263 return; 264 return;
264 } 265 }
265 delete pw; 266 delete pw;
266 } 267 }
267 268
268 _cfg.setLastBook( currname ); 269 _cfg.setLastBook( currname );
269 Checkbook *currcb = new Checkbook( this, cb, &_cfg ); 270 Checkbook *currcb = new Checkbook( this, cb, &_cfg );
270 if ( QPEApplication::execDialog( currcb ) == QDialog::Accepted ) 271 if ( QPEApplication::execDialog( currcb ) == QDialog::Accepted )
271 { 272 {
272 QString newname = cb->name(); 273 QString newname = cb->name();
273 if ( currname != newname ) 274 if ( currname != newname )
274 { 275 {
275 // Update name if changed 276 // Update name if changed
276 if( curritem ) { 277 if( curritem ) {
277 curritem->setText( posName, newname ); 278 curritem->setText( posName, newname );
278 cbList->sort(); 279 cbList->sort();
279 } 280 }
280 _cfg.setLastBook( newname ); 281 _cfg.setLastBook( newname );
281 282
282 // Remove old file 283 // Remove old file
283 QFile f( tempFilename ); 284 QFile f( tempFilename );
284 if ( f.exists() ) 285 if ( f.exists() )
285 f.remove(); 286 f.remove();
286 287
287 // Get new filename 288 // Get new filename
288 buildFilename( newname ); 289 buildFilename( newname );
289 cb->setFilename( tempFilename ); 290 cb->setFilename( tempFilename );
290 } 291 }
291 292
292 cb->write(); 293 cb->write();
293 294
294 // Update lock if changed 295 // Update lock if changed
295 if ( _cfg.getShowLocks() && !cb->password().isNull() != currlock ) 296 if ( _cfg.getShowLocks() && !cb->password().isNull() != currlock )
296 { 297 {
297 if ( !cb->password().isNull() ) 298 if ( !cb->password().isNull() )
298 curritem->setPixmap( 0, lockIcon ); 299 curritem->setPixmap( 0, lockIcon );
299 else 300 else
300 curritem->setPixmap( 0, nullIcon ); 301 curritem->setPixmap( 0, nullIcon );
301 } 302 }
302 303
303 // Update balance if changed 304 // Update balance if changed
304 if ( _cfg.getShowBalances() && cb->balance() != currbalance ) 305 if ( _cfg.getShowBalances() && cb->balance() != currbalance )
305 { 306 {
306 QString tempstr; 307 QString tempstr;
307 tempstr.sprintf( "%s%.2f", _cfg.getCurrencySymbol().latin1(), cb->balance() ); 308 tempstr.sprintf( "%.2f", cb->balance() );
309 tempstr.prepend( _cfg.getCurrencySymbol() );
308 curritem->setText( posName + 1, tempstr ); 310 curritem->setText( posName + 1, tempstr );
309 } 311 }
310 312
311 // write config, if needed 313 // write config, if needed
312 if( _cfg.isDirty() ) { 314 if( _cfg.isDirty() ) {
313 Config config("checkbook"); 315 Config config("checkbook");
314 _cfg.writeConfig( config ); 316 _cfg.writeConfig( config );
315 } 317 }
316 } 318 }
317 delete currcb; 319 delete currcb;
318} 320}
319 321
320// --- slotDelete ------------------------------------------------------------- 322// --- slotDelete -------------------------------------------------------------
321void MainWindow::slotDelete() 323void MainWindow::slotDelete()
322{ 324{
323 QString currname = cbList->currentItem()->text( posName ); 325 QString currname = cbList->currentItem()->text( posName );
324 326
325 if ( QPEMessageBox::confirmDelete ( this, tr( "Delete checkbook" ), currname ) ) 327 if ( QPEMessageBox::confirmDelete ( this, tr( "Delete checkbook" ), currname ) )
326 { 328 {
327 buildFilename( currname ); 329 buildFilename( currname );
328 QFile f( tempFilename ); 330 QFile f( tempFilename );
329 if ( f.exists() ) 331 if ( f.exists() )
330 { 332 {
331 f.remove(); 333 f.remove();
332 } 334 }
333 335
334 delete cbList->currentItem(); 336 delete cbList->currentItem();
335 } 337 }
336} 338}
337 339
338// --- slotConfigure ---------------------------------------------------------- 340// --- slotConfigure ----------------------------------------------------------
339void MainWindow::slotConfigure() 341void MainWindow::slotConfigure()
340{ 342{
341 Configuration *cfgdlg = new Configuration( this, _cfg ); 343 Configuration *cfgdlg = new Configuration( this, _cfg );
342 if ( QPEApplication::execDialog( cfgdlg ) == QDialog::Accepted ) 344 if ( QPEApplication::execDialog( cfgdlg ) == QDialog::Accepted )
343 { 345 {
344 // read data from config dialog & save it 346 // read data from config dialog & save it
345 cfgdlg->saveConfig( _cfg ); 347 cfgdlg->saveConfig( _cfg );
346 writeConfig(); 348 writeConfig();
347 buildList(); 349 buildList();
348 } 350 }
349 delete cfgdlg; 351 delete cfgdlg;
350} 352}
351 353
352 354
353// --- writeConfig -------------------------------------------------------------- 355// --- writeConfig --------------------------------------------------------------
354void MainWindow::writeConfig() 356void MainWindow::writeConfig()
355{ 357{
356 Config config("checkbook"); 358 Config config("checkbook");
357 _cfg.writeConfig( config ); 359 _cfg.writeConfig( config );
358} 360}