summaryrefslogtreecommitdiff
Unidiff
Diffstat (more/less context) (ignore whitespace changes)
-rw-r--r--core/pim/todo/mainwindow.cpp3
-rw-r--r--core/pim/todo/tableitems.cpp4
-rw-r--r--core/pim/todo/tableview.cpp233
-rw-r--r--core/pim/todo/tableview.h44
-rw-r--r--core/pim/todo/todoview.h2
5 files changed, 126 insertions, 160 deletions
diff --git a/core/pim/todo/mainwindow.cpp b/core/pim/todo/mainwindow.cpp
index 47c0160..7e7d2f7 100644
--- a/core/pim/todo/mainwindow.cpp
+++ b/core/pim/todo/mainwindow.cpp
@@ -468,33 +468,34 @@ void MainWindow::slotDeleteAll() {
468 468
469 m_todoMgr.removeAll(); 469 m_todoMgr.removeAll();
470 currentView()->clear(); 470 currentView()->clear();
471 471
472 raiseCurrentView(); 472 raiseCurrentView();
473} 473}
474void MainWindow::slotDeleteCompleted() { 474void MainWindow::slotDeleteCompleted() {
475 if(m_syncing) { 475 if(m_syncing) {
476 QMessageBox::warning(this, tr("Todo"), 476 QMessageBox::warning(this, tr("Todo"),
477 tr("Can not edit data, currently syncing")); 477 tr("Can not edit data, currently syncing"));
478 return; 478 return;
479 } 479 }
480 480
481 if ( !QPEMessageBox::confirmDelete( this, tr( "Todo" ), tr("all completed tasks?") ) ) 481 if ( !QPEMessageBox::confirmDelete( this, tr( "Todo" ), tr("all completed tasks?") ) )
482 return; 482 return;
483 483
484 m_todoMgr.remove( currentView()->completed() ); 484 // FIXME
485 //m_todoMgr.remove( currentView()->completed() );
485 currentView()->updateView( ); 486 currentView()->updateView( );
486} 487}
487void MainWindow::slotFind() { 488void MainWindow::slotFind() {
488 489
489} 490}
490void MainWindow::slotEdit() { 491void MainWindow::slotEdit() {
491 slotEdit( currentView()->current() ); 492 slotEdit( currentView()->current() );
492} 493}
493/* 494/*
494 * set the category 495 * set the category
495 */ 496 */
496void MainWindow::setCategory( int c) { 497void MainWindow::setCategory( int c) {
497 if ( c <= 0 ) return; 498 if ( c <= 0 ) return;
498 499
499 qWarning("Iterating over cats %d", c ); 500 qWarning("Iterating over cats %d", c );
500 for ( unsigned int i = 1; i < m_catMenu->count(); i++ ) 501 for ( unsigned int i = 1; i < m_catMenu->count(); i++ )
diff --git a/core/pim/todo/tableitems.cpp b/core/pim/todo/tableitems.cpp
index ebfefc8..86fe07d 100644
--- a/core/pim/todo/tableitems.cpp
+++ b/core/pim/todo/tableitems.cpp
@@ -35,33 +35,33 @@ using namespace Todo;
35CheckItem::CheckItem( QTable* t, 35CheckItem::CheckItem( QTable* t,
36 const QString& sortKey, 36 const QString& sortKey,
37 int uid, 37 int uid,
38 const QArray<int>& lis) 38 const QArray<int>& lis)
39 : OCheckItem(t, sortKey), m_uid(uid ), m_cat( lis ) 39 : OCheckItem(t, sortKey), m_uid(uid ), m_cat( lis )
40{ 40{
41} 41}
42CheckItem::~CheckItem() { 42CheckItem::~CheckItem() {
43} 43}
44void CheckItem::setChecked( bool b ) { 44void CheckItem::setChecked( bool b ) {
45 OCheckItem::setChecked(b); 45 OCheckItem::setChecked(b);
46} 46}
47void CheckItem::toggle() { 47void CheckItem::toggle() {
48 TableView* view = static_cast<TableView*>( table() ); 48 TableView* view = static_cast<TableView*>( table() );
49 OTodo ev = view->find( view->current() ); 49 OTodo ev = view->find( view->current() );
50 ev.setCompleted(!isChecked() ); 50 ev.setCompleted(!isChecked() );
51 view->updateFromTable( ev ); 51 //view->updateFromTable( ev );
52 52
53 OCheckItem::toggle(); 53 OCheckItem::toggle();
54 table()->updateCell( row(), col() ); 54 table()->updateCell( row(), col() );
55} 55}
56int CheckItem::uid() const { 56int CheckItem::uid() const {
57 return m_uid; 57 return m_uid;
58} 58}
59QArray<int> CheckItem::cats() { 59QArray<int> CheckItem::cats() {
60 return m_cat; 60 return m_cat;
61} 61}
62 62
63/* ComboItem */ 63/* ComboItem */
64ComboItem::ComboItem( QTable* t, EditType et ) 64ComboItem::ComboItem( QTable* t, EditType et )
65 : QTableItem( t, et, "3" ), m_cb(0) 65 : QTableItem( t, et, "3" ), m_cb(0)
66{ 66{
67 setReplaceable( FALSE ); 67 setReplaceable( FALSE );
@@ -81,33 +81,33 @@ QWidget* ComboItem::createEditor()const {
81 m_cb->insertItem( "4" ); 81 m_cb->insertItem( "4" );
82 m_cb->insertItem( "5" ); 82 m_cb->insertItem( "5" );
83 m_cb->setCurrentItem( txt.toInt() - 1 ); 83 m_cb->setCurrentItem( txt.toInt() - 1 );
84 84
85 return m_cb; 85 return m_cb;
86} 86}
87void ComboItem::setContentFromEditor( QWidget* w) { 87void ComboItem::setContentFromEditor( QWidget* w) {
88 TableView* view = static_cast<TableView*>( table() ); 88 TableView* view = static_cast<TableView*>( table() );
89 OTodo ev = view->find( view->current() ); 89 OTodo ev = view->find( view->current() );
90 90
91 if ( w->inherits( "QComboBox" ) ) 91 if ( w->inherits( "QComboBox" ) )
92 setText( ( (QComboBox*)w )->currentText() ); 92 setText( ( (QComboBox*)w )->currentText() );
93 else 93 else
94 QTableItem::setContentFromEditor( w ); 94 QTableItem::setContentFromEditor( w );
95 95
96 ev.setPriority( text().toInt() ); 96 ev.setPriority( text().toInt() );
97 view->updateFromTable( ev ); 97 //view->updateFromTable( ev );
98} 98}
99void ComboItem::setText( const QString& s ) { 99void ComboItem::setText( const QString& s ) {
100 if ( m_cb ) 100 if ( m_cb )
101 m_cb->setCurrentItem( s.toInt()-1 ); 101 m_cb->setCurrentItem( s.toInt()-1 );
102 102
103 QTableItem::setText( s ); 103 QTableItem::setText( s );
104} 104}
105QString ComboItem::text()const { 105QString ComboItem::text()const {
106 if ( m_cb) 106 if ( m_cb)
107 return m_cb->currentText(); 107 return m_cb->currentText();
108 108
109 return QTableItem::text(); 109 return QTableItem::text();
110} 110}
111 111
112/* TodoTextItem */ 112/* TodoTextItem */
113TodoTextItem::~TodoTextItem() { 113TodoTextItem::~TodoTextItem() {
diff --git a/core/pim/todo/tableview.cpp b/core/pim/todo/tableview.cpp
index eaaf1bc..5594b13 100644
--- a/core/pim/todo/tableview.cpp
+++ b/core/pim/todo/tableview.cpp
@@ -23,32 +23,37 @@
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 28
29#include <qtimer.h> 29#include <qtimer.h>
30#include <qpoint.h> 30#include <qpoint.h>
31#include <qpopupmenu.h> 31#include <qpopupmenu.h>
32 32
33#include "mainwindow.h" 33#include "mainwindow.h"
34//#include "tableitems.h" 34//#include "tableitems.h"
35#include "tableview.h" 35#include "tableview.h"
36 36
37using namespace Todo; 37using namespace Todo;
38 38
39namespace {
40 static const int BoxSize = 14;
41 static const int RowHeight = 20;
42}
43
39 44
40TableView::TableView( MainWindow* window, QWidget* wid ) 45TableView::TableView( MainWindow* window, QWidget* wid )
41 : QTable( wid ), TodoView( window ) { 46 : QTable( wid ), TodoView( window ) {
42 setUpdatesEnabled( false ); 47 setUpdatesEnabled( false );
43 viewport()->setUpdatesEnabled( false ); 48 viewport()->setUpdatesEnabled( false );
44 m_enablePaint = false; 49 m_enablePaint = false;
45 setNumRows(0); 50 setNumRows(0);
46 setNumCols(4); 51 setNumCols(4);
47 52
48 setSorting( TRUE ); 53 setSorting( TRUE );
49 setSelectionMode( NoSelection ); 54 setSelectionMode( NoSelection );
50 setColumnStretchable( 2, TRUE ); 55 setColumnStretchable( 2, TRUE );
51 setColumnWidth(0, 20 ); 56 setColumnWidth(0, 20 );
52 setColumnWidth(1, 35 ); 57 setColumnWidth(1, 35 );
53 58
54 setLeftMargin( 0 ); 59 setLeftMargin( 0 );
@@ -87,282 +92,268 @@ TableView::TableView( MainWindow* window, QWidget* wid )
87} 92}
88/* a new day has started 93/* a new day has started
89 * update the day 94 * update the day
90 */ 95 */
91void TableView::newDay() { 96void TableView::newDay() {
92 clear(); 97 clear();
93 updateView(); 98 updateView();
94} 99}
95TableView::~TableView() { 100TableView::~TableView() {
96 101
97} 102}
98void TableView::slotShowMenu() { 103void TableView::slotShowMenu() {
99 QPopupMenu *menu = todoWindow()->contextMenu( current() ); 104 QPopupMenu *menu = todoWindow()->contextMenu( current() );
100 menu->exec(QCursor::pos() ); 105 menu->exec(QCursor::pos() );
101 delete menu; 106 delete menu;
102} 107}
103OTodo TableView::find(int uid ) {
104 OTodo ev = TodoView::event( uid );
105 return ev;
106}
107void TableView::updateFromTable( const OTodo& ev, CheckItem* item ) {
108 TodoView::update( ev.uid(), ev );
109
110 /* update the other columns */
111 /* if completed or not we need to update
112 * the table
113 *
114 * We've two cases
115 * either item or !item
116 * this makes cases more easy
117 */
118 if ( !item ) {
119 item = m_cache[ev.uid()];
120 }
121 DueTextItem *due = dueItem( item->row() );
122 due->setCompleted( ev.isCompleted() );
123}
124QString TableView::type() const { 108QString TableView::type() const {
125 return QString::fromLatin1( tr("Table View") ); 109 return QString::fromLatin1( tr("Table View") );
126} 110}
127int TableView::current() { 111int TableView::current() {
128 int cur = 0; 112 int cur = 0;
129 CheckItem* i = checkItem( currentRow() ); 113 // FIXME
130 if (i )
131 cur = i->uid();
132
133 return cur; 114 return cur;
134} 115}
135QString TableView::currentRepresentation() { 116QString TableView::currentRepresentation() {
136 return text( currentRow(), 2); 117 return text( currentRow(), 2);
137} 118}
138/* show overdue */ 119/* show overdue */
139void TableView::showOverDue( bool ) { 120void TableView::showOverDue( bool ) {
140 clear(); 121 clear();
141 updateView(); 122 updateView();
142} 123}
143 124
144void TableView::updateView( ) { 125void TableView::updateView( ) {
145 setSortOrder( 0 ); 126 setSortOrder( 0 );
146 setAscending( true ); 127 setAscending( true );
147 sort(); 128 sort();
148 OTodoAccess::List::Iterator it, end; 129 OTodoAccess::List::Iterator it, end;
149 it = sorted().begin(); 130 it = sorted().begin();
150 end = sorted().end(); 131 end = sorted().end();
132
151 qWarning("setTodos"); 133 qWarning("setTodos");
152 QTime time; 134 QTime time;
153 time.start(); 135 time.start();
154 m_enablePaint = false; 136 m_enablePaint = false;
155 setUpdatesEnabled( false ); 137 setUpdatesEnabled( false );
156 viewport()->setUpdatesEnabled( false ); 138 viewport()->setUpdatesEnabled( false );
157 clear(); 139
158 QString currentCat = todoWindow()->currentCategory();
159 bool showCompleted = todoWindow()->showCompleted();
160 bool showOverDue = todoWindow()->showOverDue();
161 qWarning( "Current Category:" + todoWindow()->currentCategory() );
162 int id = todoWindow()->currentCatId();
163 QTime t; 140 QTime t;
164 t.start(); 141 t.start();
165 setNumRows( it.count() ); 142 setNumRows( it.count() );
166 uint i = 0;
167 for (; it != end; ++it ) {
168 OTodo todo = (*it);
169 /* test if the categories match */
170 if ( !currentCat.isEmpty() &&
171 !todo.categories().contains( id ) ) {
172 continue;
173 }
174 /* the item is completed but we shouldn't show it */
175 if ( !showCompleted && todo.isCompleted() ) {
176 qWarning("isCompleted ");
177 continue;
178 }
179 /* the item is not overdue but we should only show overdue */
180 if ( showOverDue && !todo.isOverdue() ) {
181 continue;
182 }
183 /* now it's fine to add it */
184 insertTodo( todo, i );
185 i++;
186 }
187 setNumRows( i );
188 int elc = time.elapsed(); 143 int elc = time.elapsed();
189 qWarning("Adding took %d", elc/1000 ); 144 qWarning("Adding took %d", elc/1000 );
190 setUpdatesEnabled( true ); 145 setUpdatesEnabled( true );
191 viewport()->setUpdatesEnabled( true ); 146 viewport()->setUpdatesEnabled( true );
192 viewport()->update(); 147 viewport()->update();
148
193 m_enablePaint = true; 149 m_enablePaint = true;
194 int el = time.elapsed(); 150 int el = time.elapsed();
195 qWarning("adding took %d", el/1000 ); 151 qWarning("adding took %d", el/1000 );
196} 152}
197void TableView::setTodo( int uid, const OTodo& ev ) { 153void TableView::setTodo( int, const OTodo&) {
198 QMap<int, CheckItem*>::Iterator it = m_cache.find( uid ); 154 sort();
199
200 if ( it != m_cache.end() ) {
201 int row = it.data()->row();
202
203 /* update checked */
204 CheckItem* check = checkItem(row );
205 if (check)
206 check->setChecked( ev.isCompleted() );
207
208 /* update the text */
209 QString sum = ev.summary();
210 setText(row, 2, sum.isEmpty() ?
211 ev.description().left(40).simplifyWhiteSpace() :
212 sum );
213
214 /* update priority */
215 setText(row, 1, QString::number( ev.priority() ) );
216 155
217 /* update DueDate */ 156 /* repaint */
218 DueTextItem *due = dueItem( row ); 157 QTable::update();
219 due->setToDoEvent( ev );
220 }
221} 158}
222void TableView::addEvent( const OTodo& ev) { 159void TableView::addEvent( const OTodo&) {
223 int row= numRows(); 160 sort();
224 setNumRows( row + 1 ); 161
225 insertTodo( ev, row ); 162 QTable::update();
226} 163}
227/* 164/*
228 * find the event 165 * find the event
229 * and then replace the complete row 166 * and then replace the complete row
230 */ 167 */
231void TableView::replaceEvent( const OTodo& ev) { 168void TableView::replaceEvent( const OTodo& ev) {
232 setTodo( ev.uid(), ev ); 169 addEvent( ev );
233} 170}
234/* 171/*
235 * re aligning table can be slow too 172 * re aligning table can be slow too
236 * FIXME: look what performs better 173 * FIXME: look what performs better
237 * either this or the old align table 174 * either this or the old align table
238 */ 175 */
239void TableView::removeEvent( int ) { 176void TableView::removeEvent( int ) {
240 clear();
241 updateView(); 177 updateView();
242} 178}
243void TableView::setShowCompleted( bool b) { 179void TableView::setShowCompleted( bool b) {
244 qWarning("Show Completed %d" + b ); 180 qWarning("Show Completed %d" + b );
245 updateView(); 181 updateView();
246} 182}
247void TableView::setShowDeadline( bool b) { 183void TableView::setShowDeadline( bool b) {
248 qWarning("Show DeadLine %d" + b ); 184 qWarning("Show DeadLine %d" + b );
249 if (b) 185 if (b)
250 showColumn(3 ); 186 showColumn(3 );
251 else 187 else
252 hideColumn(3 ); 188 hideColumn(3 );
253} 189}
254void TableView::setShowCategory( const QString& ) { 190void TableView::setShowCategory( const QString& ) {
255 qWarning("setShowCategory"); 191 qWarning("setShowCategory");
256 updateView(); 192 updateView();
257} 193}
258void TableView::clear() { 194void TableView::clear() {
259 m_cache.clear(); 195 setNumRows(0);
260 int rows = numRows();
261 for (int r = 0; r < rows; r++ ) {
262 for (int c = 0; c < numCols(); c++ ) {
263 if ( cellWidget(r, c) )
264 clearCellWidget(r, c );
265 clearCell(r, c);
266 }
267 }
268 setNumRows( 0);
269}
270QArray<int> TableView::completed() {
271 int row = numRows();
272 QArray<int> ids( row );
273
274 int j=0;
275 for (int i = 0; i < row; i++ ) {
276 CheckItem* item = checkItem(i );
277 if (item->isChecked() ) {
278 ids[j] = item->uid();
279 j++;
280 }
281 }
282 ids.resize( j );
283 return ids;
284} 196}
285void TableView::slotClicked(int row, int col, int, 197void TableView::slotClicked(int row, int col, int,
286 const QPoint& point) { 198 const QPoint& point) {
287 if ( !cellGeometry(row, col ).contains(point ) ) 199 if ( !cellGeometry(row, col ).contains(point ) )
288 return; 200 return;
201 int ui=0; // FIXME = uid(row);
289 202
290 203
291 switch( col ) { 204 switch( col ) {
292 case 0: { 205 case 0: {
293 CheckItem* item = checkItem( row ); 206 // FIXME
207 CheckItem* item = 0l;
294 /* 208 /*
295 * let's see if we centered clicked 209 * let's see if we centered clicked
296 */ 210 */
297 if ( item ) { 211 if ( item ) {
298 int x = point.x() -columnPos( col ); 212 int x = point.x() -columnPos( col );
299 int y = point.y() -rowPos( row ); 213 int y = point.y() -rowPos( row );
300 int w = columnWidth( col ); 214 int w = columnWidth( col );
301 int h = rowHeight( row ); 215 int h = rowHeight( row );
302 if ( x >= ( w - OCheckItem::BoxSize ) / 2 && 216 if ( x >= ( w - OCheckItem::BoxSize ) / 2 &&
303 x <= ( w - OCheckItem::BoxSize ) / 2 + OCheckItem::BoxSize && 217 x <= ( w - OCheckItem::BoxSize ) / 2 + OCheckItem::BoxSize &&
304 y >= ( h - OCheckItem::BoxSize ) / 2 && 218 y >= ( h - OCheckItem::BoxSize ) / 2 &&
305 y <= ( h - OCheckItem::BoxSize ) / 2 + OCheckItem::BoxSize ) 219 y <= ( h - OCheckItem::BoxSize ) / 2 + OCheckItem::BoxSize )
306 item->toggle(); 220 item->toggle();
307 } 221 }
308 } 222 }
309 break; 223 break;
310 224
311 case 1: 225 case 1:
312 break; 226 break;
313 227
314 case 2: { 228 case 2: {
315 m_menuTimer->stop(); 229 m_menuTimer->stop();
316 showTodo( checkItem(row)->uid() ); 230 showTodo( ui );
317 break; 231 break;
318 } 232 }
319 case 3: { 233 case 3: {
320 m_menuTimer->stop(); 234 m_menuTimer->stop();
321 TodoView::edit( checkItem(row)->uid() ); 235 TodoView::edit( ui );
322 break; 236 break;
323 } 237 }
324 } 238 }
325 239
326 240
327} 241}
328void TableView::slotPressed(int row, int col, int, 242void TableView::slotPressed(int row, int col, int,
329 const QPoint& point) { 243 const QPoint& point) {
330 244
331 /* TextColumn column */ 245 /* TextColumn column */
332 if ( col == 2 && cellGeometry( row, col ).contains( point ) ) 246 if ( col == 2 && cellGeometry( row, col ).contains( point ) )
333 m_menuTimer->start( 750, TRUE ); 247 m_menuTimer->start( 750, TRUE );
334} 248}
335void TableView::slotValueChanged( int, int ) { 249void TableView::slotValueChanged( int, int ) {
336 qWarning("Value Changed"); 250 qWarning("Value Changed");
337} 251}
338void TableView::slotCurrentChanged(int, int ) { 252void TableView::slotCurrentChanged(int, int ) {
339 m_menuTimer->stop(); 253 m_menuTimer->stop();
340} 254}
341/*
342 * hardcode to column 0
343 */
344CheckItem* TableView::checkItem( int row ) {
345 CheckItem *i = static_cast<CheckItem*>( item( row, 0 ) );
346 return i;
347}
348DueTextItem* TableView::dueItem( int row ) {
349 DueTextItem* i = static_cast<DueTextItem*> ( item(row, 3 ) );
350 return i;
351}
352QWidget* TableView::widget() { 255QWidget* TableView::widget() {
353 return this; 256 return this;
354} 257}
355/* 258/*
356 * We need to overwrite sortColumn 259 * We need to overwrite sortColumn
357 * because we want to sort whole row 260 * because we want to sort whole row
358 * based 261 * based
262 * We event want to set the setOrder
263 * to a sort() and update()
359 */ 264 */
360void TableView::sortColumn( int row, bool asc, bool ) { 265void TableView::sortColumn( int row, bool asc, bool ) {
361 QTable::sortColumn( row, asc, TRUE ); 266 QTable::sortColumn( row, asc, TRUE );
362 267
363} 268}
364void TableView::viewportPaintEvent( QPaintEvent* e) { 269void TableView::viewportPaintEvent( QPaintEvent* e) {
365 qWarning("Paint event" ); 270 qWarning("Paint event" );
366 if (m_enablePaint ) 271 if (m_enablePaint )
367 QTable::viewportPaintEvent( e ); 272 QTable::viewportPaintEvent( e );
368} 273}
274/*
275 * This segment is copyrighted by TT
276 * it was taken from their todolist
277 * application this code is GPL
278 */
279void TableView::paintCell(QPainter* p, int row, int col, const QRect& cr, bool ) {
280 const QColorGroup &cg = colorGroup();
281
282 p->save();
283
284 OTodo task = sorted()[row];
285
286 p->fillRect( 0, 0, cr.width(), cr.height(), cg.brush( QColorGroup::Base ) );
287
288 QPen op = p->pen();
289 p->setPen(cg.mid());
290 p->drawLine( 0, cr.height() - 1, cr.width() - 1, cr.height() - 1 );
291 p->drawLine( cr.width() - 1, 0, cr.width() - 1, cr.height() - 1 );
292 p->setPen(op);
293
294 QFont f = p->font();
295 QFontMetrics fm(f);
296
297 switch(col) {
298 case 0:
299 {
300 // completed field
301 int marg = ( cr.width() - BoxSize ) / 2;
302 int x = 0;
303 int y = ( cr.height() - BoxSize ) / 2;
304 p->setPen( QPen( cg.text() ) );
305 p->drawRect( x + marg, y, BoxSize, BoxSize );
306 p->drawRect( x + marg+1, y+1, BoxSize-2, BoxSize-2 );
307 p->setPen( darkGreen );
308 x += 1;
309 y += 1;
310 if ( task.isCompleted() ) {
311 QPointArray a( 9*2 );
312 int i, xx, yy;
313 xx = x+2+marg;
314 yy = y+4;
315 for ( i=0; i<4; i++ ) {
316 a.setPoint( 2*i, xx, yy );
317 a.setPoint( 2*i+1, xx, yy+2 );
318 xx++; yy++;
319 }
320 yy -= 2;
321 for ( i=4; i<9; i++ ) {
322 a.setPoint( 2*i, xx, yy );
323 a.setPoint( 2*i+1, xx, yy+2 );
324 xx++; yy--;
325 }
326 p->drawLineSegments( a );
327 }
328 }
329 break;
330 case 1:
331 // priority field
332 {
333 QString text = QString::number(task.priority());
334 p->drawText(2,2 + fm.ascent(), text);
335 }
336 break;
337 case 2:
338 // description field
339 {
340 QString text = task.summary().isEmpty() ?
341 task.description() :
342 task.summary();
343 p->drawText(2,2 + fm.ascent(), text);
344 }
345 break;
346 case 3:
347 {
348 QString text;
349 if (task.hasDueDate()) {
350 text = "HAS";
351 } else {
352 text = tr("None");
353 }
354 p->drawText(2,2 + fm.ascent(), text);
355 }
356 break;
357 }
358 p->restore();
359}
diff --git a/core/pim/todo/tableview.h b/core/pim/todo/tableview.h
index 1fa21b2..b608204 100644
--- a/core/pim/todo/tableview.h
+++ b/core/pim/todo/tableview.h
@@ -33,87 +33,61 @@
33#include <qmap.h> 33#include <qmap.h>
34 34
35#include "tableitems.h" 35#include "tableitems.h"
36#include "todoview.h" 36#include "todoview.h"
37 37
38class QTimer; 38class QTimer;
39 39
40namespace Todo { 40namespace Todo {
41 class CheckItem; 41 class CheckItem;
42 class DueTextItem; 42 class DueTextItem;
43 class TableView : public QTable, public TodoView { 43 class TableView : public QTable, public TodoView {
44 Q_OBJECT 44 Q_OBJECT
45 public: 45 public:
46 TableView( MainWindow*, QWidget* parent ); 46 TableView( MainWindow*, QWidget* parent );
47 ~TableView(); 47 ~TableView();
48 48
49 void updateFromTable( const OTodo&, CheckItem* = 0 );
50 OTodo find(int uid);
51 49
52 QString type()const; 50 QString type()const;
53 int current(); 51 int current();
54 QString currentRepresentation(); 52 QString currentRepresentation();
55 53
54 void clear();
56 void showOverDue( bool ); 55 void showOverDue( bool );
57 void updateView(); 56 void updateView();
58 void setTodo( int uid, const OTodo& ); 57 void setTodo( int uid, const OTodo& );
59 void addEvent( const OTodo& event ); 58 void addEvent( const OTodo& event );
60 void replaceEvent( const OTodo& ); 59 void replaceEvent( const OTodo& );
61 void removeEvent( int uid ); 60 void removeEvent( int uid );
62 void setShowCompleted( bool ); 61 void setShowCompleted( bool );
63 void setShowDeadline( bool ); 62 void setShowDeadline( bool );
64 63
65 void setShowCategory(const QString& =QString::null ); 64 void setShowCategory(const QString& =QString::null );
66 void clear();
67 void newDay(); 65 void newDay();
68 QArray<int> completed();
69 QWidget* widget(); 66 QWidget* widget();
70 void sortColumn(int, bool, bool ); 67 void sortColumn(int, bool, bool );
68
69 /*
70 * we do our drawing ourselves
71 * because we don't want to have
72 * 40.000 QTableItems for 10.000
73 * OTodos where we only show 10 at a time!
74 */
75 void paintCell(QPainter* p, int row, int col, const QRect&, bool );
71 private: 76 private:
72 /* reimplented for internal reasons */ 77 /* reimplented for internal reasons */
73 void viewportPaintEvent( QPaintEvent* ); 78 void viewportPaintEvent( QPaintEvent* );
74 inline void insertTodo( const OTodo&, int row );
75 CheckItem* checkItem( int row );
76 DueTextItem* dueItem( int row );
77 QTimer *m_menuTimer; 79 QTimer *m_menuTimer;
78 QMap<int, CheckItem*> m_cache;
79 bool m_enablePaint:1; 80 bool m_enablePaint:1;
80 81
81private slots: 82private slots:
82 void slotShowMenu(); 83 void slotShowMenu();
83 void slotClicked(int, int, int, 84 void slotClicked(int, int, int,
84 const QPoint& ); 85 const QPoint& );
85 void slotPressed(int, int, int, 86 void slotPressed(int, int, int,
86 const QPoint& ); 87 const QPoint& );
87 void slotValueChanged(int, int); 88 void slotValueChanged(int, int);
88 void slotCurrentChanged(int, int ); 89 void slotCurrentChanged(int, int );
89 }; 90 };
90 inline void TableView::insertTodo( const OTodo& event, int row ) {
91
92
93 QString sortKey = (char) ( (event.isCompleted() ? 'a' : 'A' )
94 + event.priority() )
95 + Qtopia::buildSortKey( event.description() );
96 CheckItem *chk = new CheckItem( this, sortKey, event.uid(), event.categories() );
97 chk->setChecked( event.isCompleted() );
98
99 ComboItem *cmb = new ComboItem(this, QTableItem::WhenCurrent );
100 cmb->setText( QString::number( event.priority() ) );
101
102 QString sum = event.summary();
103 QTableItem* ti = new TodoTextItem( this, sum.isEmpty() ?
104 event.description().left(40).simplifyWhiteSpace() :
105 sum );
106 ti->setReplaceable( FALSE );
107
108 DueTextItem *due = new DueTextItem(this, event );
109
110 setItem( row, 0, chk );
111 setItem( row, 1, cmb );
112 setItem( row, 2, ti );
113 setItem( row, 3, due );
114
115 m_cache.insert( event.uid(), chk );
116 }
117}; 91};
118 92
119#endif 93#endif
diff --git a/core/pim/todo/todoview.h b/core/pim/todo/todoview.h
index 81ace3a..9408ef1 100644
--- a/core/pim/todo/todoview.h
+++ b/core/pim/todo/todoview.h
@@ -89,33 +89,33 @@ namespace Todo {
89 virtual int current() = 0; 89 virtual int current() = 0;
90 virtual QString currentRepresentation() = 0; 90 virtual QString currentRepresentation() = 0;
91 virtual void showOverDue( bool ) = 0; 91 virtual void showOverDue( bool ) = 0;
92 92
93 /* 93 /*
94 * update the view 94 * update the view
95 */ 95 */
96 virtual void updateView() = 0; 96 virtual void updateView() = 0;
97 97
98 virtual void addEvent( const OTodo& ) = 0; 98 virtual void addEvent( const OTodo& ) = 0;
99 virtual void replaceEvent( const OTodo& ) = 0; 99 virtual void replaceEvent( const OTodo& ) = 0;
100 virtual void removeEvent( int uid ) = 0; 100 virtual void removeEvent( int uid ) = 0;
101 virtual void setShowCompleted( bool ) = 0; 101 virtual void setShowCompleted( bool ) = 0;
102 virtual void setShowDeadline( bool ) = 0; 102 virtual void setShowDeadline( bool ) = 0;
103 virtual void setShowCategory( const QString& = QString::null ) = 0; 103 virtual void setShowCategory( const QString& = QString::null ) = 0;
104 virtual void clear() = 0; 104 virtual void clear() = 0;
105 virtual QArray<int> completed() = 0; 105/* virtual QArray<int> completed() = 0; */
106 virtual void newDay() = 0; 106 virtual void newDay() = 0;
107 107
108 virtual void connectShow( QObject*, const char* ) = 0; 108 virtual void connectShow( QObject*, const char* ) = 0;
109 virtual void connectEdit( QObject*, const char* ) = 0; 109 virtual void connectEdit( QObject*, const char* ) = 0;
110 virtual void connectUpdateSmall( QObject*, const char* ) = 0; 110 virtual void connectUpdateSmall( QObject*, const char* ) = 0;
111 virtual void connectUpdateBig( QObject*, const char* ) = 0; 111 virtual void connectUpdateBig( QObject*, const char* ) = 0;
112 virtual void connectUpdateView( QObject*, const char*) = 0; 112 virtual void connectUpdateView( QObject*, const char*) = 0;
113 virtual void connectRemove( QObject*, const char* ) = 0; 113 virtual void connectRemove( QObject*, const char* ) = 0;
114 114
115 }; 115 };
116 116
117 /** 117 /**
118 * A base class for all TodoView which are showing 118 * A base class for all TodoView which are showing
119 * a list of todos. 119 * a list of todos.
120 * Either in a QTable, QListView or any other QWidget 120 * Either in a QTable, QListView or any other QWidget
121 * derived class 121 * derived class