summaryrefslogtreecommitdiff
authorzecke <zecke>2002-11-15 10:31:59 (UTC)
committer zecke <zecke>2002-11-15 10:31:59 (UTC)
commit5fac1f8271dc037d8d3a3a765bccc44c4734e544 (patch) (unidiff)
tree206a64d41f94217962dcf5ec7055225e8a0c2481
parent39f256de174af80fd8ba2560e8586dda99d06b7d (diff)
downloadopie-5fac1f8271dc037d8d3a3a765bccc44c4734e544.zip
opie-5fac1f8271dc037d8d3a3a765bccc44c4734e544.tar.gz
opie-5fac1f8271dc037d8d3a3a765bccc44c4734e544.tar.bz2
Fix #423 dealing with strike through and DueDate...
Diffstat (more/less context) (ignore whitespace changes)
-rw-r--r--core/pim/todo/tableview.cpp20
1 files changed, 15 insertions, 5 deletions
diff --git a/core/pim/todo/tableview.cpp b/core/pim/todo/tableview.cpp
index 743deb7..ded2dbd 100644
--- a/core/pim/todo/tableview.cpp
+++ b/core/pim/todo/tableview.cpp
@@ -1,51 +1,51 @@
1/* 1/*
2               =. This file is part of the OPIE Project 2               =. This file is part of the OPIE Project
3             .=l. Copyright (c) 2002 <> 3             .=l. Copyright (c) 2002 <zecke>
4           .>+-= 4           .>+-=
5 _;:,     .>    :=|. This program is free software; you can 5 _;:,     .>    :=|. This program is free software; you can
6.> <`_,   >  .   <= redistribute it and/or modify it under 6.> <`_,   >  .   <= redistribute it and/or modify it under
7:`=1 )Y*s>-.--   : the terms of the GNU General Public 7:`=1 )Y*s>-.--   : the terms of the GNU General Public
8.="- .-=="i,     .._ License as published by the Free Software 8.="- .-=="i,     .._ License as published by the Free Software
9 - .   .-<_>     .<> Foundation; either version 2 of the License, 9 - .   .-<_>     .<> Foundation; either version 2 of the License,
10     ._= =}       : or (at your option) any later version. 10     ._= =}       : or (at your option) any later version.
11    .%`+i>       _;_. 11    .%`+i>       _;_.
12    .i_,=:_.      -<s. This program is distributed in the hope that 12    .i_,=:_.      -<s. This program is distributed in the hope that
13     +  .  -:.       = it will be useful, but WITHOUT ANY WARRANTY; 13     +  .  -:.       = it will be useful, but WITHOUT ANY WARRANTY;
14    : ..    .:,     . . . without even the implied warranty of 14    : ..    .:,     . . . without even the implied warranty of
15    =_        +     =;=|` MERCHANTABILITY or FITNESS FOR A 15    =_        +     =;=|` MERCHANTABILITY or FITNESS FOR A
16  _.=:.       :    :=>`: PARTICULAR PURPOSE. See the GNU 16  _.=:.       :    :=>`: PARTICULAR PURPOSE. See the GNU
17..}^=.=       =       ; Library General Public License for more 17..}^=.=       =       ; Library General Public License for more
18++=   -.     .`     .: details. 18++=   -.     .`     .: details.
19 :     =  ...= . :.=- 19 :     =  ...= . :.=-
20 -.   .:....=;==+<; You should have received a copy of the GNU 20 -.   .:....=;==+<; You should have received a copy of the GNU
21  -_. . .   )=.  = Library General Public License along with 21  -_. . .   )=.  = Library General Public License along with
22    --        :-=` this library; see the file COPYING.LIB. 22    --        :-=` this library; see the file COPYING.LIB.
23 If not, write to the Free Software Foundation, 23 If not, write to the Free Software Foundation,
24 Inc., 59 Temple Place - Suite 330, 24 Inc., 59 Temple Place - Suite 330,
25 Boston, MA 02111-1307, USA. 25 Boston, MA 02111-1307, USA.
26 26
27*/ 27*/
28#include <stdlib.h> 28#include <stdlib.h>
29#include <cmath> 29#include <cmath>
30 30
31#include <qlineedit.h> 31#include <qlineedit.h>
32#include <qtimer.h> 32#include <qtimer.h>
33#include <qpoint.h> 33#include <qpoint.h>
34#include <qpopupmenu.h> 34#include <qpopupmenu.h>
35 35
36#include <qpe/config.h> 36#include <qpe/config.h>
37 37
38#include "mainwindow.h" 38#include "mainwindow.h"
39//#include "tableitems.h" 39//#include "tableitems.h"
40#include "tableview.h" 40#include "tableview.h"
41 41
42using namespace Todo; 42using namespace Todo;
43 43
44namespace { 44namespace {
45 static const int BoxSize = 14; 45 static const int BoxSize = 14;
46 static const int RowHeight = 20; 46 static const int RowHeight = 20;
47} 47}
48 48
49 49
50void TableView::initConfig() { 50void TableView::initConfig() {
51 Config config( "todo" ); 51 Config config( "todo" );
@@ -225,96 +225,97 @@ void TableView::clear() {
225 setNumRows(0); 225 setNumRows(0);
226} 226}
227void TableView::slotClicked(int row, int col, int, 227void TableView::slotClicked(int row, int col, int,
228 const QPoint& point) { 228 const QPoint& point) {
229 if ( !cellGeometry(row, col ).contains(point ) ) 229 if ( !cellGeometry(row, col ).contains(point ) )
230 return; 230 return;
231 231
232 int ui= sorted().uidAt( row ); 232 int ui= sorted().uidAt( row );
233 233
234 234
235 switch( col ) { 235 switch( col ) {
236 case 0:{ 236 case 0:{
237 int x = point.x() -columnPos( col ); 237 int x = point.x() -columnPos( col );
238 int y = point.y() -rowPos( row ); 238 int y = point.y() -rowPos( row );
239 int w = columnWidth( col ); 239 int w = columnWidth( col );
240 int h = rowHeight( row ); 240 int h = rowHeight( row );
241 if ( x >= ( w - BoxSize ) / 2 && 241 if ( x >= ( w - BoxSize ) / 2 &&
242 x <= ( w - BoxSize ) / 2 + BoxSize && 242 x <= ( w - BoxSize ) / 2 + BoxSize &&
243 y >= ( h - BoxSize ) / 2 && 243 y >= ( h - BoxSize ) / 2 &&
244 y <= ( h - BoxSize ) / 2 + BoxSize ) { 244 y <= ( h - BoxSize ) / 2 + BoxSize ) {
245 OTodo todo = sorted()[row]; 245 OTodo todo = sorted()[row];
246 todo.setCompleted( !todo.isCompleted() ); 246 todo.setCompleted( !todo.isCompleted() );
247 TodoView::update( todo.uid(), todo ); 247 TodoView::update( todo.uid(), todo );
248 updateView(); 248 updateView();
249 } 249 }
250 } 250 }
251 break; 251 break;
252 252
253 case 1: 253 case 1:
254 break; 254 break;
255 255
256 case 2: { 256 case 2: {
257 m_menuTimer->stop(); 257 m_menuTimer->stop();
258 showTodo( ui ); 258 showTodo( ui );
259 break; 259 break;
260 } 260 }
261 case 3: { 261 case 3: {
262 m_menuTimer->stop(); 262 m_menuTimer->stop();
263 TodoView::edit( ui ); 263 TodoView::edit( ui );
264 break; 264 break;
265 } 265 }
266 } 266 }
267 267
268 268
269} 269}
270void TableView::slotPressed(int row, int col, int, 270void TableView::slotPressed(int row, int col, int,
271 const QPoint& point) { 271 const QPoint& point) {
272 272
273 qWarning("pressed row %d col %d x:%d+y:%d", row,col,point.x(),point.y() );
273 m_prevP = point; 274 m_prevP = point;
274 /* TextColumn column */ 275 /* TextColumn column */
275 if ( col == 2 && cellGeometry( row, col ).contains( point ) ) 276 if ( col == 2 && cellGeometry( row, col ).contains( point ) )
276 m_menuTimer->start( 750, TRUE ); 277 m_menuTimer->start( 750, TRUE );
277} 278}
278void TableView::slotValueChanged( int, int ) { 279void TableView::slotValueChanged( int, int ) {
279 qWarning("Value Changed"); 280 qWarning("Value Changed");
280} 281}
281void TableView::slotCurrentChanged(int, int ) { 282void TableView::slotCurrentChanged(int, int ) {
282 m_menuTimer->stop(); 283 m_menuTimer->stop();
283} 284}
284QWidget* TableView::widget() { 285QWidget* TableView::widget() {
285 return this; 286 return this;
286} 287}
287/* 288/*
288 * We need to overwrite sortColumn 289 * We need to overwrite sortColumn
289 * because we want to sort whole row 290 * because we want to sort whole row
290 * based 291 * based
291 * We event want to set the setOrder 292 * We event want to set the setOrder
292 * to a sort() and update() 293 * to a sort() and update()
293 */ 294 */
294void TableView::sortColumn( int col, bool asc, bool ) { 295void TableView::sortColumn( int col, bool asc, bool ) {
295 qWarning("bool %d", asc ); 296 qWarning("bool %d", asc );
296 setSortOrder( col ); 297 setSortOrder( col );
297 setAscending( asc ); 298 setAscending( asc );
298 updateView(); 299 updateView();
299} 300}
300void TableView::viewportPaintEvent( QPaintEvent* e) { 301void TableView::viewportPaintEvent( QPaintEvent* e) {
301 if (m_enablePaint ) 302 if (m_enablePaint )
302 QTable::viewportPaintEvent( e ); 303 QTable::viewportPaintEvent( e );
303} 304}
304/* 305/*
305 * This segment is copyrighted by TT 306 * This segment is copyrighted by TT
306 * it was taken from their todolist 307 * it was taken from their todolist
307 * application this code is GPL 308 * application this code is GPL
308 */ 309 */
309void TableView::paintCell(QPainter* p, int row, int col, const QRect& cr, bool ) { 310void TableView::paintCell(QPainter* p, int row, int col, const QRect& cr, bool ) {
310 const QColorGroup &cg = colorGroup(); 311 const QColorGroup &cg = colorGroup();
311 312
312 p->save(); 313 p->save();
313 314
314 OTodo task = sorted()[row]; 315 OTodo task = sorted()[row];
315 316
316 p->fillRect( 0, 0, cr.width(), cr.height(), cg.brush( QColorGroup::Base ) ); 317 p->fillRect( 0, 0, cr.width(), cr.height(), cg.brush( QColorGroup::Base ) );
317 318
318 QPen op = p->pen(); 319 QPen op = p->pen();
319 p->setPen(cg.mid()); 320 p->setPen(cg.mid());
320 p->drawLine( 0, cr.height() - 1, cr.width() - 1, cr.height() - 1 ); 321 p->drawLine( 0, cr.height() - 1, cr.width() - 1, cr.height() - 1 );
@@ -451,67 +452,76 @@ void TableView::setCellContentFromEditor(int row, int col ) {
451 } 452 }
452} 453}
453void TableView::slotPriority() { 454void TableView::slotPriority() {
454 setCellContentFromEditor( currentRow(), currentColumn() ); 455 setCellContentFromEditor( currentRow(), currentColumn() );
455} 456}
456/* 457/*
457 * We'll use the TimerEvent to read ahead or to keep the cahce always 458 * We'll use the TimerEvent to read ahead or to keep the cahce always
458 * filled enough. 459 * filled enough.
459 * We will try to read ahead 4 items in both ways 460 * We will try to read ahead 4 items in both ways
460 * up and down. On odd or even we will currentRow()+-4 or +-9 461 * up and down. On odd or even we will currentRow()+-4 or +-9
461 * 462 *
462 */ 463 */
463void TableView::timerEvent( QTimerEvent* ev ) { 464void TableView::timerEvent( QTimerEvent* ev ) {
464 qWarning("sorted %d", sorted().count() ); 465 qWarning("sorted %d", sorted().count() );
465 if (sorted().count() == 0 ) 466 if (sorted().count() == 0 )
466 return; 467 return;
467 468
468 int row = currentRow(); 469 int row = currentRow();
469 if ( m_row ) { 470 if ( m_row ) {
470 int ro = row-4; 471 int ro = row-4;
471 if (ro < 0 ) ro = 0; 472 if (ro < 0 ) ro = 0;
472 sorted()[ro]; 473 sorted()[ro];
473 474
474 ro = row+4; 475 ro = row+4;
475 sorted()[ro]; 476 sorted()[ro];
476 } else { 477 } else {
477 int ro = row + 8; 478 int ro = row + 8;
478 sorted()[ro]; 479 sorted()[ro];
479 480
480 ro = row-8; 481 ro = row-8;
481 if (ro < 0 ) ro = 0; 482 if (ro < 0 ) ro = 0;
482 sorted()[ro]; 483 sorted()[ro];
483 } 484 }
484 485
485 m_row = !m_row; 486 m_row = !m_row;
486} 487}
487 488
488// We want a strike through completed ;) 489// We want a strike through completed ;)
489// durchstreichen to complete 490// durchstreichen to complete
490/* 491/*
491 * MouseTracking is off this mean we only receive 492 * MouseTracking is off this mean we only receive
492 * these events if the mouse button is pressed 493 * these events if the mouse button is pressed
493 * We've the previous point saved 494 * We've the previous point saved
494 * We check if the previous and current Point are 495 * We check if the previous and current Point are
495 * in the same row. 496 * in the same row.
496 * Then we check if they're some pixel horizontal away 497 * Then we check if they're some pixel horizontal away
497 * if the distance between the two points is greater than 498 * if the distance between the two points is greater than
498 * 8 we mark the underlying todo as completed and do a repaint 499 * 8 we mark the underlying todo as completed and do a repaint
500 *
501 * BUG: When clicking on the Due column and it's scrollable
502 * the todo is marked as completed...
503 * REASON: QTable is doing auto scrolling which leads to a move
504 * in the x coordinate and this way it's able to pass the
505 * m_completeStrokeWidth criteria
506 * WORKAROUND: strike through needs to strike through the same
507 * row and two columns!
499 */ 508 */
500void TableView::contentsMouseReleaseEvent( QMouseEvent* e) { 509void TableView::contentsMouseReleaseEvent( QMouseEvent* e) {
501 int row = rowAt(m_prevP.y()); 510 int row = rowAt(m_prevP.y());
502 if ( row == rowAt( e->y() ) && row != -1 ) { 511 int colOld = columnAt(m_prevP.x() );
503 if ( ::abs( m_prevP.x() - e->x() ) >= m_completeStrokeWidth ) { 512 int colNew = columnAt(e->x() );
504 qWarning("current row %d", row ); 513 qWarning("colNew: %d colOld: %d", colNew, colOld );
514 if ( row == rowAt( e->y() ) && row != -1 &&
515 colOld != colNew ) {
505 OTodo todo = sorted()[row]; 516 OTodo todo = sorted()[row];
506 todo.setCompleted( !todo.isCompleted() ); 517 todo.setCompleted( !todo.isCompleted() );
507 TodoView::update( todo.uid(), todo ); 518 TodoView::update( todo.uid(), todo );
508 updateView(); 519 updateView();
509 return; 520 return;
510 }
511 } 521 }
512 QTable::contentsMouseReleaseEvent( e ); 522 QTable::contentsMouseReleaseEvent( e );
513} 523}
514void TableView::contentsMouseMoveEvent( QMouseEvent* e ) { 524void TableView::contentsMouseMoveEvent( QMouseEvent* e ) {
515 m_menuTimer->stop(); 525 m_menuTimer->stop();
516 QTable::contentsMouseMoveEvent( e ); 526 QTable::contentsMouseMoveEvent( e );
517} 527}