summaryrefslogtreecommitdiff
Unidiff
Diffstat (more/less context) (ignore whitespace changes)
-rw-r--r--core/pim/todo/mainwindow.cpp4
-rw-r--r--core/pim/todo/mainwindow.h1
-rw-r--r--core/pim/todo/tableview.cpp54
-rw-r--r--core/pim/todo/tableview.h3
4 files changed, 60 insertions, 2 deletions
diff --git a/core/pim/todo/mainwindow.cpp b/core/pim/todo/mainwindow.cpp
index 2994915..a6d657c 100644
--- a/core/pim/todo/mainwindow.cpp
+++ b/core/pim/todo/mainwindow.cpp
@@ -648,32 +648,36 @@ void MainWindow::slotEdit( int uid ) {
648 OTodo todo = m_todoMgr.event( uid ); 648 OTodo todo = m_todoMgr.event( uid );
649 649
650 todo = currentEditor()->edit(this, todo ); 650 todo = currentEditor()->edit(this, todo );
651 651
652 /* if completed */ 652 /* if completed */
653 if ( currentEditor()->accepted() ) { 653 if ( currentEditor()->accepted() ) {
654 qWarning("Replacing now" ); 654 qWarning("Replacing now" );
655 m_todoMgr.update( todo.uid(), todo ); 655 m_todoMgr.update( todo.uid(), todo );
656 currentView()->replaceEvent( todo ); 656 currentView()->replaceEvent( todo );
657 /* a Category might have changed */ 657 /* a Category might have changed */
658 populateCategories(); 658 populateCategories();
659 } 659 }
660 660
661 raiseCurrentView(); 661 raiseCurrentView();
662} 662}
663/* 663/*
664void MainWindow::slotUpdate1( int uid, const SmallTodo& ev) { 664void MainWindow::slotUpdate1( int uid, const SmallTodo& ev) {
665 m_todoMgr.update( uid, ev ); 665 m_todoMgr.update( uid, ev );
666} 666}
667*/ 667*/
668void MainWindow::updateTodo( const OTodo& ev) { 668void MainWindow::updateTodo( const OTodo& ev) {
669 m_todoMgr.update( ev.uid() , ev ); 669 m_todoMgr.update( ev.uid() , ev );
670} 670}
671/* The view changed it's configuration 671/* The view changed it's configuration
672 * update the view menu 672 * update the view menu
673 */ 673 */
674void MainWindow::slotUpdate3( QWidget* ) { 674void MainWindow::slotUpdate3( QWidget* ) {
675 675
676} 676}
677void MainWindow::updateList() { 677void MainWindow::updateList() {
678 m_todoMgr.updateList(); 678 m_todoMgr.updateList();
679} 679}
680void MainWindow::setReadAhead( uint count ) {
681 if (m_todoMgr.todoDB() )
682 m_todoMgr.todoDB()->setReadAhead( count );
683}
diff --git a/core/pim/todo/mainwindow.h b/core/pim/todo/mainwindow.h
index 8d0c29f..5a18e64 100644
--- a/core/pim/todo/mainwindow.h
+++ b/core/pim/todo/mainwindow.h
@@ -58,64 +58,65 @@ namespace Todo {
58 Q_OBJECT 58 Q_OBJECT
59 public: 59 public:
60 MainWindow( QWidget *parent = 0, 60 MainWindow( QWidget *parent = 0,
61 const char* name = 0 ); 61 const char* name = 0 );
62 ~MainWindow(); 62 ~MainWindow();
63 63
64 /** return a context menu for an OTodo */ 64 /** return a context menu for an OTodo */
65 QPopupMenu* contextMenu(int uid ); 65 QPopupMenu* contextMenu(int uid );
66 QPopupMenu* options(); 66 QPopupMenu* options();
67 QPopupMenu* edit(); 67 QPopupMenu* edit();
68 QPopupMenu* view(); 68 QPopupMenu* view();
69 QToolBar* toolbar(); 69 QToolBar* toolbar();
70 70
71 71
72 void updateList(); 72 void updateList();
73 OTodoAccess::List list()const; 73 OTodoAccess::List list()const;
74 OTodoAccess::List sorted( bool asc, int sortOrder ); 74 OTodoAccess::List sorted( bool asc, int sortOrder );
75 OTodoAccess::List sorted( bool asc, int sortOrder, int addFilter ); 75 OTodoAccess::List sorted( bool asc, int sortOrder, int addFilter );
76 76
77 OTodo event(int uid ); 77 OTodo event(int uid );
78 78
79 bool isSyncing()const; 79 bool isSyncing()const;
80 bool showCompleted()const; 80 bool showCompleted()const;
81 bool showDeadline()const; 81 bool showDeadline()const;
82 bool showOverDue()const; 82 bool showOverDue()const;
83 QString currentCategory()const; 83 QString currentCategory()const;
84 int currentCatId(); 84 int currentCatId();
85 TemplateManager* templateManager(); 85 TemplateManager* templateManager();
86 86
87 void updateTodo( const OTodo& ); 87 void updateTodo( const OTodo& );
88 void populateTemplates(); 88 void populateTemplates();
89 Editor* currentEditor(); 89 Editor* currentEditor();
90 void setReadAhead(uint count );
90private slots: 91private slots:
91 void populateCategories(); 92 void populateCategories();
92 void slotReload(); 93 void slotReload();
93 void slotFlush(); 94 void slotFlush();
94 95
95 protected: 96 protected:
96 void closeEvent( QCloseEvent* e ); 97 void closeEvent( QCloseEvent* e );
97 98
98 private: 99 private:
99 void receiveFile( const QString& filename ); 100 void receiveFile( const QString& filename );
100 void connectBase( ViewBase* ); 101 void connectBase( ViewBase* );
101 void initUI(); 102 void initUI();
102 void initActions(); 103 void initActions();
103 void initConfig(); 104 void initConfig();
104 void initViews(); 105 void initViews();
105 void initEditor(); 106 void initEditor();
106 void initShow(); 107 void initShow();
107 void initTemplate(); 108 void initTemplate();
108 void raiseCurrentView(); 109 void raiseCurrentView();
109 ViewBase* currentView(); 110 ViewBase* currentView();
110 ViewBase* m_curView; 111 ViewBase* m_curView;
111 Editor* m_curEdit; 112 Editor* m_curEdit;
112 TodoShow* currentShow(); 113 TodoShow* currentShow();
113 TodoShow* m_curShow; 114 TodoShow* m_curShow;
114 TemplateEditor* currentTemplateEditor(); 115 TemplateEditor* currentTemplateEditor();
115 TemplateEditor* m_curTempEd; 116 TemplateEditor* m_curTempEd;
116 117
117 QMenuBar* m_bar; 118 QMenuBar* m_bar;
118 QToolBar* m_tool; 119 QToolBar* m_tool;
119 QAction* m_editAction, 120 QAction* m_editAction,
120 *m_deleteAction, 121 *m_deleteAction,
121 *m_findAction, 122 *m_findAction,
diff --git a/core/pim/todo/tableview.cpp b/core/pim/todo/tableview.cpp
index 5d82eb2..f4b898f 100644
--- a/core/pim/todo/tableview.cpp
+++ b/core/pim/todo/tableview.cpp
@@ -97,99 +97,107 @@ TableView::TableView( MainWindow* window, QWidget* wid )
97 * update the day 97 * update the day
98 */ 98 */
99void TableView::newDay() { 99void TableView::newDay() {
100 clear(); 100 clear();
101 updateView(); 101 updateView();
102} 102}
103TableView::~TableView() { 103TableView::~TableView() {
104 104
105} 105}
106void TableView::slotShowMenu() { 106void TableView::slotShowMenu() {
107 QPopupMenu *menu = todoWindow()->contextMenu( current() ); 107 QPopupMenu *menu = todoWindow()->contextMenu( current() );
108 menu->exec(QCursor::pos() ); 108 menu->exec(QCursor::pos() );
109 delete menu; 109 delete menu;
110} 110}
111QString TableView::type() const { 111QString TableView::type() const {
112 return QString::fromLatin1( tr("Table View") ); 112 return QString::fromLatin1( tr("Table View") );
113} 113}
114int TableView::current() { 114int TableView::current() {
115 int uid = sorted().uidAt(currentRow() ); 115 int uid = sorted().uidAt(currentRow() );
116 qWarning("uid %d", uid ); 116 qWarning("uid %d", uid );
117 return uid; 117 return uid;
118} 118}
119QString TableView::currentRepresentation() { 119QString TableView::currentRepresentation() {
120 return text( currentRow(), 2); 120 return text( currentRow(), 2);
121} 121}
122/* show overdue */ 122/* show overdue */
123void TableView::showOverDue( bool ) { 123void TableView::showOverDue( bool ) {
124 clear(); 124 clear();
125 updateView(); 125 updateView();
126} 126}
127 127
128void TableView::updateView( ) { 128void TableView::updateView( ) {
129 m_row = false;
130 startTimer( 2000 );
131 /* FIXME we want one page to be read!
132 *
133 * Calculate that screensize
134 */
135 todoWindow()->setReadAhead( 4 );
129 sort(); 136 sort();
130 OTodoAccess::List::Iterator it, end; 137 OTodoAccess::List::Iterator it, end;
131 it = sorted().begin(); 138 it = sorted().begin();
132 end = sorted().end(); 139 end = sorted().end();
133 140
134 qWarning("setTodos"); 141 qWarning("setTodos");
135 QTime time; 142 QTime time;
136 time.start(); 143 time.start();
137 m_enablePaint = false; 144 m_enablePaint = false;
138 setUpdatesEnabled( false ); 145 setUpdatesEnabled( false );
139 viewport()->setUpdatesEnabled( false ); 146 viewport()->setUpdatesEnabled( false );
140 147
141 QTime t; 148 QTime t;
142 t.start(); 149 t.start();
143 setNumRows( it.count() ); 150 setNumRows( it.count() );
144 int elc = time.elapsed(); 151 int elc = time.elapsed();
145 qWarning("Adding took %d", elc/1000 ); 152 qWarning("Adding took %d", elc/1000 );
146 setUpdatesEnabled( true ); 153 setUpdatesEnabled( true );
147 viewport()->setUpdatesEnabled( true ); 154 viewport()->setUpdatesEnabled( true );
148 viewport()->update(); 155 viewport()->update();
149 156
150 m_enablePaint = true; 157 m_enablePaint = true;
151 int el = time.elapsed(); 158 int el = time.elapsed();
152 qWarning("adding took %d", el/1000 ); 159 qWarning("adding took %d", el/1000 );
153} 160}
154void TableView::setTodo( int, const OTodo&) { 161void TableView::setTodo( int, const OTodo&) {
155 sort(); 162 sort();
156 163
157 /* repaint */ 164 /* repaint */
158 QTable::update(); 165 QTable::update();
159} 166}
160void TableView::addEvent( const OTodo&) { 167void TableView::addEvent( const OTodo&) {
161 sort(); 168 sort();
162 169
163 QTable::update(); 170 /* fix problems of not showing the 'Haken' */
171 QTable::repaint();
164} 172}
165/* 173/*
166 * find the event 174 * find the event
167 * and then replace the complete row 175 * and then replace the complete row
168 */ 176 */
169void TableView::replaceEvent( const OTodo& ev) { 177void TableView::replaceEvent( const OTodo& ev) {
170 addEvent( ev ); 178 addEvent( ev );
171} 179}
172/* 180/*
173 * re aligning table can be slow too 181 * re aligning table can be slow too
174 * FIXME: look what performs better 182 * FIXME: look what performs better
175 * either this or the old align table 183 * either this or the old align table
176 */ 184 */
177void TableView::removeEvent( int ) { 185void TableView::removeEvent( int ) {
178 updateView(); 186 updateView();
179} 187}
180void TableView::setShowCompleted( bool b) { 188void TableView::setShowCompleted( bool b) {
181 qWarning("Show Completed %d" + b ); 189 qWarning("Show Completed %d" + b );
182 updateView(); 190 updateView();
183} 191}
184void TableView::setShowDeadline( bool b) { 192void TableView::setShowDeadline( bool b) {
185 qWarning("Show DeadLine %d" + b ); 193 qWarning("Show DeadLine %d" + b );
186 if (b) 194 if (b)
187 showColumn(3 ); 195 showColumn(3 );
188 else 196 else
189 hideColumn(3 ); 197 hideColumn(3 );
190} 198}
191void TableView::setShowCategory( const QString& str) { 199void TableView::setShowCategory( const QString& str) {
192 qWarning("setShowCategory"); 200 qWarning("setShowCategory");
193 if ( str != m_oleCat || m_first ) 201 if ( str != m_oleCat || m_first )
194 updateView(); 202 updateView();
195 203
@@ -324,77 +332,119 @@ void TableView::paintCell(QPainter* p, int row, int col, const QRect& cr, bool
324 xx++; yy++; 332 xx++; yy++;
325 } 333 }
326 yy -= 2; 334 yy -= 2;
327 for ( i=4; i<9; i++ ) { 335 for ( i=4; i<9; i++ ) {
328 a.setPoint( 2*i, xx, yy ); 336 a.setPoint( 2*i, xx, yy );
329 a.setPoint( 2*i+1, xx, yy+2 ); 337 a.setPoint( 2*i+1, xx, yy+2 );
330 xx++; yy--; 338 xx++; yy--;
331 } 339 }
332 p->drawLineSegments( a ); 340 p->drawLineSegments( a );
333 } 341 }
334 } 342 }
335 break; 343 break;
336 case 1: 344 case 1:
337 // priority field 345 // priority field
338 { 346 {
339 QString text = QString::number(task.priority()); 347 QString text = QString::number(task.priority());
340 p->drawText(2,2 + fm.ascent(), text); 348 p->drawText(2,2 + fm.ascent(), text);
341 } 349 }
342 break; 350 break;
343 case 2: 351 case 2:
344 // description field 352 // description field
345 { 353 {
346 QString text = task.summary().isEmpty() ? 354 QString text = task.summary().isEmpty() ?
347 task.description() : 355 task.description() :
348 task.summary(); 356 task.summary();
349 p->drawText(2,2 + fm.ascent(), text); 357 p->drawText(2,2 + fm.ascent(), text);
350 } 358 }
351 break; 359 break;
352 case 3: 360 case 3:
353 { 361 {
354 QString text; 362 QString text;
355 if (task.hasDueDate()) { 363 if (task.hasDueDate()) {
356 text = "HAS"; 364 int off = QDate::currentDate().daysTo( task.dueDate() );
365 text = QString::number(off) + tr(" day(s)");
366 /*
367 * set color if not completed
368 */
369 if (!task.isCompleted() ) {
370 QColor color = Qt::black;
371 if ( off < 0 )
372 color = Qt::red;
373 else if ( off == 0 )
374 color = Qt::yellow;
375 else if ( off > 0 )
376 color = Qt::green;
377 p->setPen(color );
378 }
357 } else { 379 } else {
358 text = tr("None"); 380 text = tr("None");
359 } 381 }
360 p->drawText(2,2 + fm.ascent(), text); 382 p->drawText(2,2 + fm.ascent(), text);
361 } 383 }
362 break; 384 break;
363 } 385 }
364 p->restore(); 386 p->restore();
365} 387}
366QWidget* TableView::createEditor(int row, int col, bool )const { 388QWidget* TableView::createEditor(int row, int col, bool )const {
367 switch( col ) { 389 switch( col ) {
368 case 1: { 390 case 1: {
369 /* the priority stuff */ 391 /* the priority stuff */
370 QComboBox* combo = new QComboBox( viewport() ); 392 QComboBox* combo = new QComboBox( viewport() );
371 combo->insertItem( "1" ); 393 combo->insertItem( "1" );
372 combo->insertItem( "2" ); 394 combo->insertItem( "2" );
373 combo->insertItem( "3" ); 395 combo->insertItem( "3" );
374 combo->insertItem( "4" ); 396 combo->insertItem( "4" );
375 combo->insertItem( "5" ); 397 combo->insertItem( "5" );
376 combo->setCurrentItem( sorted()[row].priority()-1 ); 398 combo->setCurrentItem( sorted()[row].priority()-1 );
377 return combo; 399 return combo;
378 } 400 }
379 case 0: 401 case 0:
380 default: 402 default:
381 return 0l; 403 return 0l;
382 } 404 }
383} 405}
384void TableView::setCellContentFromEditor(int row, int col ) { 406void TableView::setCellContentFromEditor(int row, int col ) {
385 if ( col == 1 ) { 407 if ( col == 1 ) {
386 QWidget* wid = cellWidget(row, 1 ); 408 QWidget* wid = cellWidget(row, 1 );
387 if ( wid->inherits("QComboBox") ) { 409 if ( wid->inherits("QComboBox") ) {
388 int pri = ((QComboBox*)wid)->currentItem() + 1; 410 int pri = ((QComboBox*)wid)->currentItem() + 1;
389 OTodo todo = sorted()[row]; 411 OTodo todo = sorted()[row];
390 if ( todo.priority() != pri ) { 412 if ( todo.priority() != pri ) {
391 todo.setPriority( pri ); 413 todo.setPriority( pri );
392 TodoView::update( todo.uid(), todo ); 414 TodoView::update( todo.uid(), todo );
393 updateView(); 415 updateView();
394 } 416 }
395 } 417 }
396 } 418 }
397} 419}
398void TableView::slotPriority() { 420void TableView::slotPriority() {
399 setCellContentFromEditor( currentRow(), currentColumn() ); 421 setCellContentFromEditor( currentRow(), currentColumn() );
400} 422}
423/*
424 * We'll use the TimerEvent to read ahead or to keep the cahce always
425 * filled enough.
426 * We will try to read ahead 4 items in both ways
427 * up and down. On odd or even we will currentRow()+-4 or +-9
428 *
429 */
430void TableView::timerEvent( QTimerEvent* ev ) {
431 int row = currentRow();
432 qWarning("TimerEvent %d", row);
433 if ( m_row ) {
434 int ro = row-4;
435 if (ro < 0 ) ro = 0;
436 sorted()[ro];
437
438 ro = row+4;
439 sorted()[ro];
440 } else {
441 int ro = row + 8;
442 sorted()[ro];
443
444 ro = row-8;
445 if (ro < 0 ) ro = 0;
446 sorted()[ro];
447 }
448
449 m_row = !m_row;
450}
diff --git a/core/pim/todo/tableview.h b/core/pim/todo/tableview.h
index bf41aea..fe65ca9 100644
--- a/core/pim/todo/tableview.h
+++ b/core/pim/todo/tableview.h
@@ -53,48 +53,51 @@ namespace Todo {
53 53
54 void clear(); 54 void clear();
55 void showOverDue( bool ); 55 void showOverDue( bool );
56 void updateView(); 56 void updateView();
57 void setTodo( int uid, const OTodo& ); 57 void setTodo( int uid, const OTodo& );
58 void addEvent( const OTodo& event ); 58 void addEvent( const OTodo& event );
59 void replaceEvent( const OTodo& ); 59 void replaceEvent( const OTodo& );
60 void removeEvent( int uid ); 60 void removeEvent( int uid );
61 void setShowCompleted( bool ); 61 void setShowCompleted( bool );
62 void setShowDeadline( bool ); 62 void setShowDeadline( bool );
63 63
64 void setShowCategory(const QString& =QString::null ); 64 void setShowCategory(const QString& =QString::null );
65 void newDay(); 65 void newDay();
66 QWidget* widget(); 66 QWidget* widget();
67 void sortColumn(int, bool, bool ); 67 void sortColumn(int, bool, bool );
68 68
69 /* 69 /*
70 * we do our drawing ourselves 70 * we do our drawing ourselves
71 * because we don't want to have 71 * because we don't want to have
72 * 40.000 QTableItems for 10.000 72 * 40.000 QTableItems for 10.000
73 * OTodos where we only show 10 at a time! 73 * OTodos where we only show 10 at a time!
74 */ 74 */
75 void paintCell(QPainter* p, int row, int col, const QRect&, bool ); 75 void paintCell(QPainter* p, int row, int col, const QRect&, bool );
76 private: 76 private:
77 /* reimplented for internal reasons */ 77 /* reimplented for internal reasons */
78 void viewportPaintEvent( QPaintEvent* ); 78 void viewportPaintEvent( QPaintEvent* );
79 QTimer *m_menuTimer; 79 QTimer *m_menuTimer;
80 bool m_enablePaint:1; 80 bool m_enablePaint:1;
81 QString m_oleCat; 81 QString m_oleCat;
82 bool m_first : 1; 82 bool m_first : 1;
83 83
84 protected: 84 protected:
85 void timerEvent( QTimerEvent* e );
85 QWidget* createEditor(int row, int col, bool initFromCell )const; 86 QWidget* createEditor(int row, int col, bool initFromCell )const;
86 void setCellContentFromEditor( int row, int col ); 87 void setCellContentFromEditor( int row, int col );
87 88
88private slots: 89private slots:
89 void slotShowMenu(); 90 void slotShowMenu();
90 void slotClicked(int, int, int, 91 void slotClicked(int, int, int,
91 const QPoint& ); 92 const QPoint& );
92 void slotPressed(int, int, int, 93 void slotPressed(int, int, int,
93 const QPoint& ); 94 const QPoint& );
94 void slotValueChanged(int, int); 95 void slotValueChanged(int, int);
95 void slotCurrentChanged(int, int ); 96 void slotCurrentChanged(int, int );
96 void slotPriority(); 97 void slotPriority();
98 private:
99 bool m_row : 1;
97 }; 100 };
98}; 101};
99 102
100#endif 103#endif