summaryrefslogtreecommitdiff
path: root/noncore/apps/checkbook/checkbook.cpp
Unidiff
Diffstat (limited to 'noncore/apps/checkbook/checkbook.cpp') (more/less context) (show whitespace changes)
-rw-r--r--noncore/apps/checkbook/checkbook.cpp122
1 files changed, 103 insertions, 19 deletions
diff --git a/noncore/apps/checkbook/checkbook.cpp b/noncore/apps/checkbook/checkbook.cpp
index 20b42b5..77c1f57 100644
--- a/noncore/apps/checkbook/checkbook.cpp
+++ b/noncore/apps/checkbook/checkbook.cpp
@@ -223,51 +223,48 @@ QWidget *Checkbook::initTransactions()
223 layout->addWidget( btn, 2, 1 ); 223 layout->addWidget( btn, 2, 1 );
224 224
225 btn = new QPushButton( Resource::loadPixmap( "trash" ), tr( "Delete" ), control ); 225 btn = new QPushButton( Resource::loadPixmap( "trash" ), tr( "Delete" ), control );
226 QWhatsThis::add( btn, tr( "Select a checkbook and then click here to delete it." ) ); 226 QWhatsThis::add( btn, tr( "Select a checkbook and then click here to delete it." ) );
227 connect( btn, SIGNAL( clicked() ), this, SLOT( slotDeleteTran() ) ); 227 connect( btn, SIGNAL( clicked() ), this, SLOT( slotDeleteTran() ) );
228 layout->addWidget( btn, 2, 2 ); 228 layout->addWidget( btn, 2, 2 );
229 229
230 return( control ); 230 return( control );
231} 231}
232 232
233QWidget *Checkbook::initCharts() 233QWidget *Checkbook::initCharts()
234{ 234{
235 graphInfo = 0x0;
236
235 QWidget *control = new QWidget( mainWidget ); 237 QWidget *control = new QWidget( mainWidget );
236 238
237 QGridLayout *layout = new QGridLayout( control ); 239 QGridLayout *layout = new QGridLayout( control );
238 layout->setSpacing( 2 ); 240 layout->setSpacing( 2 );
239 layout->setMargin( 4 ); 241 layout->setMargin( 4 );
240 242
241/* 243 graphWidget = new Graph( control );
242 QLabel *label = new QLabel( control ); 244 QWhatsThis::add( graphWidget, tr( "Select the desired chart below and then click on the Draw button." ) );
243 label->setText( tr( "Graph type:" ) ); 245 layout->addMultiCellWidget( graphWidget, 0, 0, 0, 2 );
244 layout->addWidget( label, 0, 0 ); 246
245 graphList = new QComboBox( control ); 247 graphList = new QComboBox( control );
246 graphList->insertItem( tr( "By category" ) ); 248 QWhatsThis::add( graphList, tr( "Click here to select the desired chart type." ) );
247 graphList->insertItem( tr( "..." ) ); 249 graphList->insertItem( tr( "Account balance" ) );
248 graphList->insertItem( tr( "..." ) ); 250 graphList->insertItem( tr( "Withdrawals by category" ) );
249 layout->addWidget( graphList, 0, 1 ); 251 graphList->insertItem( tr( "Deposits by category" ) );
250*/
251 252
252 GraphInfo* info = new GraphInfo( GraphInfo::BarChart, 0x0, tr( "Graph Title" ), 253 layout->addMultiCellWidget( graphList, 1, 1, 0, 1 );
253 tr( "X-Axis" ), tr( "Y-Axis" ) );
254 graphWidget = new Graph( control, info );
255 QWhatsThis::add( graphWidget, tr( "Charting is not implemented yet." ) );
256 layout->addMultiCellWidget( graphWidget, 0, 0, 0, 1 );
257 254
258 QPushButton *btn = new QPushButton( Resource::loadPixmap( "checkbook/drawbtn" ), tr( "Draw" ), control ); 255 QPushButton *btn = new QPushButton( Resource::loadPixmap( "checkbook/drawbtn" ), tr( "Draw" ), control );
259 QWhatsThis::add( btn, tr( "Click here to draw the chart." ) ); 256 QWhatsThis::add( btn, tr( "Click here to draw the selected chart." ) );
260 connect( btn, SIGNAL( clicked() ), this, SLOT( slotDrawGraph() ) ); 257 connect( btn, SIGNAL( clicked() ), this, SLOT( slotDrawGraph() ) );
261 layout->addWidget( btn, 1, 1 ); 258 layout->addWidget( btn, 1, 2 );
262 259
263 return control; 260 return control;
264} 261}
265 262
266void Checkbook::loadCheckbook() 263void Checkbook::loadCheckbook()
267{ 264{
268 transactions.clear(); 265 transactions.clear();
269 266
270 Config config(filename, Config::File); 267 Config config(filename, Config::File);
271 268
272 // Load info 269 // Load info
273 config.setGroup( "Account" ); 270 config.setGroup( "Account" );
@@ -358,30 +355,28 @@ void Checkbook::accept()
358 Config *config = new Config(filename, Config::File); 355 Config *config = new Config(filename, Config::File);
359 356
360 // Save info 357 // Save info
361 config->setGroup( "Account" ); 358 config->setGroup( "Account" );
362 config->writeEntry( "Type", typeList->currentText() ); 359 config->writeEntry( "Type", typeList->currentText() );
363 config->writeEntry( "Bank", bankEdit->text() ); 360 config->writeEntry( "Bank", bankEdit->text() );
364 config->writeEntryCrypt( "Number", acctNumEdit->text() ); 361 config->writeEntryCrypt( "Number", acctNumEdit->text() );
365 config->writeEntryCrypt( "PINNumber", pinNumEdit->text() ); 362 config->writeEntryCrypt( "PINNumber", pinNumEdit->text() );
366 config->writeEntry( "Balance", balanceEdit->text() ); 363 config->writeEntry( "Balance", balanceEdit->text() );
367 config->writeEntry( "Notes", notesEdit->text() ); 364 config->writeEntry( "Notes", notesEdit->text() );
368 365
369 // Save transactions 366 // Save transactions
370 TranInfo *tran = transactions.first();
371 int i = 1; 367 int i = 1;
372 while ( tran ) 368 for ( TranInfo *tran = transactions.first(); tran; tran = transactions.next() )
373 { 369 {
374 tran->write( config, i ); 370 tran->write( config, i );
375 tran = transactions.next();
376 i++; 371 i++;
377 } 372 }
378 config->write(); 373 config->write();
379 374
380 QDialog::accept(); 375 QDialog::accept();
381} 376}
382 377
383void Checkbook::slotNameChanged( const QString &newname ) 378void Checkbook::slotNameChanged( const QString &newname )
384{ 379{
385 name = newname; 380 name = newname;
386 filename = filedir; 381 filename = filedir;
387 filename.append( newname ); 382 filename.append( newname );
@@ -500,13 +495,102 @@ void Checkbook::slotDeleteTran()
500 } 495 }
501 496
502 transactions.remove( traninfo ); 497 transactions.remove( traninfo );
503 delete traninfo; 498 delete traninfo;
504 delete curritem; 499 delete curritem;
505 500
506 adjustBalance( amount * -1 ); 501 adjustBalance( amount * -1 );
507 } 502 }
508} 503}
509 504
510void Checkbook::slotDrawGraph() 505void Checkbook::slotDrawGraph()
511{ 506{
507 if ( graphInfo )
508 {
509 delete graphInfo;
510 }
511
512 switch ( graphList->currentItem() )
513 {
514 case 0 : drawBalanceChart();
515 break;
516 case 1 : drawCategoryChart( TRUE );
517 break;
518 case 2 : drawCategoryChart( FALSE );
519 break;
520 };
521
522 graphWidget->setGraphInfo( graphInfo );
523 graphWidget->drawGraph( TRUE );
524}
525
526void Checkbook::drawBalanceChart()
527{
528 DataPointList *list = new DataPointList();
529
530 float balance = startBalance;
531 float amount;
532 QString label;
533 int i = 0;
534 int count = transactions.count();
535
536 for ( TranInfo *tran = transactions.first(); tran; tran = transactions.next() )
537 {
538 i++;
539 balance -= tran->fee();
540 amount = tran->amount();
541 if ( tran->withdrawal() )
542 {
543 amount *= -1;
544 }
545 balance += amount;
546 if ( i == 1 || i == count / 2 || i == count )
547 {
548 label = tran->datestr();
549 }
550 else
551 {
552 label = "";
553 }
554 list->append( new DataPointInfo( label, balance ) );
555 }
556
557 graphInfo = new GraphInfo( GraphInfo::BarChart, list );
558}
559
560void Checkbook::drawCategoryChart( bool withdrawals )
561{
562 DataPointList *list = new DataPointList();
563
564 TranInfo *tran = transactions.first();
565 if ( tran->withdrawal() == withdrawals )
566 {
567 list->append( new DataPointInfo( tran->category(), tran->amount() ) );
568 }
569 tran = transactions.next();
570
571 DataPointInfo *cat;
572 for ( ; tran; tran = transactions.next() )
573 {
574 if ( tran->withdrawal() == withdrawals )
575 {
576 // Find category in list
577 for ( cat = list->first(); cat; cat = list->next() )
578 {
579 if ( cat->label() == tran->category() )
580 {
581 break;
582 }
583 }
584 if ( cat && cat->label() == tran->category() )
585 { // Found category, add to transaction to category total
586 cat->addToValue( tran->amount() );
587 }
588 else
589 { // Didn't find category, add category to list
590 list->append( new DataPointInfo( tran->category(), tran->amount() ) );
591 }
592 }
593 }
594
595 graphInfo = new GraphInfo( GraphInfo::PieChart, list );
512} 596}