author | zecke <zecke> | 2002-11-15 10:31:59 (UTC) |
---|---|---|
committer | zecke <zecke> | 2002-11-15 10:31:59 (UTC) |
commit | 5fac1f8271dc037d8d3a3a765bccc44c4734e544 (patch) (unidiff) | |
tree | 206a64d41f94217962dcf5ec7055225e8a0c2481 | |
parent | 39f256de174af80fd8ba2560e8586dda99d06b7d (diff) | |
download | opie-5fac1f8271dc037d8d3a3a765bccc44c4734e544.zip opie-5fac1f8271dc037d8d3a3a765bccc44c4734e544.tar.gz opie-5fac1f8271dc037d8d3a3a765bccc44c4734e544.tar.bz2 |
Fix #423 dealing with strike through and DueDate...
-rw-r--r-- | core/pim/todo/tableview.cpp | 20 |
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 | ||
42 | using namespace Todo; | 42 | using namespace Todo; |
43 | 43 | ||
44 | namespace { | 44 | namespace { |
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 | ||
50 | void TableView::initConfig() { | 50 | void 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 | } |
227 | void TableView::slotClicked(int row, int col, int, | 227 | void 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 | } |
270 | void TableView::slotPressed(int row, int col, int, | 270 | void 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 | } |
278 | void TableView::slotValueChanged( int, int ) { | 279 | void TableView::slotValueChanged( int, int ) { |
279 | qWarning("Value Changed"); | 280 | qWarning("Value Changed"); |
280 | } | 281 | } |
281 | void TableView::slotCurrentChanged(int, int ) { | 282 | void TableView::slotCurrentChanged(int, int ) { |
282 | m_menuTimer->stop(); | 283 | m_menuTimer->stop(); |
283 | } | 284 | } |
284 | QWidget* TableView::widget() { | 285 | QWidget* 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 | */ |
294 | void TableView::sortColumn( int col, bool asc, bool ) { | 295 | void 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 | } |
300 | void TableView::viewportPaintEvent( QPaintEvent* e) { | 301 | void 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 | */ |
309 | void TableView::paintCell(QPainter* p, int row, int col, const QRect& cr, bool ) { | 310 | void 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 | } |
453 | void TableView::slotPriority() { | 454 | void 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 | */ |
463 | void TableView::timerEvent( QTimerEvent* ev ) { | 464 | void 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 | */ |
500 | void TableView::contentsMouseReleaseEvent( QMouseEvent* e) { | 509 | void 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 | } |
514 | void TableView::contentsMouseMoveEvent( QMouseEvent* e ) { | 524 | void TableView::contentsMouseMoveEvent( QMouseEvent* e ) { |
515 | m_menuTimer->stop(); | 525 | m_menuTimer->stop(); |
516 | QTable::contentsMouseMoveEvent( e ); | 526 | QTable::contentsMouseMoveEvent( e ); |
517 | } | 527 | } |