summaryrefslogtreecommitdiff
authorzecke <zecke>2002-10-19 00:10:15 (UTC)
committer zecke <zecke>2002-10-19 00:10:15 (UTC)
commite869be9990c0db11288bd196778cadd0ad6976a9 (patch) (unidiff)
treeee3474f8e5498466896e830bbeee68d618f7aff2
parent549472ef07703ef27dc5f58a37e8f16c714fb2a1 (diff)
downloadopie-e869be9990c0db11288bd196778cadd0ad6976a9.zip
opie-e869be9990c0db11288bd196778cadd0ad6976a9.tar.gz
opie-e869be9990c0db11288bd196778cadd0ad6976a9.tar.bz2
MainWindow setReadAhead added
Tableview we now try to read ahead in timerEvent.. the TodoView interface needs an update on this matter too... besides that I'm quite happy with the speed and go on to implement new features
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
@@ -616,64 +616,68 @@ bool MainWindow::showCompleted()const {
616bool MainWindow::showDeadline()const { 616bool MainWindow::showDeadline()const {
617 return m_deadline; 617 return m_deadline;
618} 618}
619QString MainWindow::currentCategory()const { 619QString MainWindow::currentCategory()const {
620 return m_curCat; 620 return m_curCat;
621} 621}
622int MainWindow::currentCatId() { 622int MainWindow::currentCatId() {
623 return m_todoMgr.catId( m_curCat ); 623 return m_todoMgr.catId( m_curCat );
624} 624}
625ViewBase* MainWindow::currentView() { 625ViewBase* MainWindow::currentView() {
626 return m_curView; 626 return m_curView;
627} 627}
628void MainWindow::raiseCurrentView() { 628void MainWindow::raiseCurrentView() {
629 m_stack->raiseWidget( m_curView->widget() ); 629 m_stack->raiseWidget( m_curView->widget() );
630} 630}
631void MainWindow::slotShowDue(bool ov) { 631void MainWindow::slotShowDue(bool ov) {
632 m_overdue = ov; 632 m_overdue = ov;
633 currentView()->showOverDue( ov ); 633 currentView()->showOverDue( ov );
634 raiseCurrentView(); 634 raiseCurrentView();
635} 635}
636void MainWindow::slotShow( int uid ) { 636void MainWindow::slotShow( int uid ) {
637 qWarning("slotShow"); 637 qWarning("slotShow");
638 currentShow()->slotShow( event( uid ) ); 638 currentShow()->slotShow( event( uid ) );
639 m_stack->raiseWidget( currentShow()->widget() ); 639 m_stack->raiseWidget( currentShow()->widget() );
640} 640}
641void MainWindow::slotEdit( int uid ) { 641void MainWindow::slotEdit( int uid ) {
642 if(m_syncing) { 642 if(m_syncing) {
643 QMessageBox::warning(this, tr("Todo"), 643 QMessageBox::warning(this, tr("Todo"),
644 tr("Can not edit data, currently syncing")); 644 tr("Can not edit data, currently syncing"));
645 return; 645 return;
646 } 646 }
647 647
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
@@ -26,128 +26,129 @@
26 26
27*/ 27*/
28 28
29#ifndef TODO_MAIN_WINDOW_H 29#ifndef TODO_MAIN_WINDOW_H
30#define TODO_MAIN_WINDOW_H 30#define TODO_MAIN_WINDOW_H
31 31
32#include <qlist.h> 32#include <qlist.h>
33#include <qmainwindow.h> 33#include <qmainwindow.h>
34 34
35#include <opie/otodoaccess.h> 35#include <opie/otodoaccess.h>
36#include <opie/otodo.h> 36#include <opie/otodo.h>
37 37
38#include "smalltodo.h" 38#include "smalltodo.h"
39#include "todoview.h" 39#include "todoview.h"
40#include "todomanager.h" 40#include "todomanager.h"
41 41
42class QPopupMenu; 42class QPopupMenu;
43class QMenuBar; 43class QMenuBar;
44class QToolBar; 44class QToolBar;
45class QAction; 45class QAction;
46class QWidgetStack; 46class QWidgetStack;
47class Ir; 47class Ir;
48 48
49 49
50namespace Todo { 50namespace Todo {
51 typedef TodoView View; 51 typedef TodoView View;
52 class TemplateManager; 52 class TemplateManager;
53 class Editor; 53 class Editor;
54 class TodoShow; 54 class TodoShow;
55 class TemplateEditor; 55 class TemplateEditor;
56 56
57 class MainWindow : public QMainWindow { 57 class MainWindow : public QMainWindow {
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,
122 *m_completedAction, 123 *m_completedAction,
123 *m_showDeadLineAction, 124 *m_showDeadLineAction,
124 *m_deleteAllAction, 125 *m_deleteAllAction,
125 *m_deleteCompleteAction, 126 *m_deleteCompleteAction,
126 *m_duplicateAction, 127 *m_duplicateAction,
127 *m_showOverDueAction, 128 *m_showOverDueAction,
128 *m_effectiveAction; 129 *m_effectiveAction;
129 QWidgetStack *m_stack; 130 QWidgetStack *m_stack;
130 QPopupMenu* m_catMenu, 131 QPopupMenu* m_catMenu,
131 *m_edit, 132 *m_edit,
132 *m_options, 133 *m_options,
133 *m_view, 134 *m_view,
134 *m_template; 135 *m_template;
135 136
136 bool m_syncing:1; 137 bool m_syncing:1;
137 bool m_deadline:1; 138 bool m_deadline:1;
138 bool m_completed:1; 139 bool m_completed:1;
139 bool m_overdue:1; 140 bool m_overdue:1;
140 TodoManager m_todoMgr; 141 TodoManager m_todoMgr;
141 QString m_curCat; 142 QString m_curCat;
142 QList<ViewBase> m_views; 143 QList<ViewBase> m_views;
143 uint m_counter; 144 uint m_counter;
144 TemplateManager* m_tempManager; 145 TemplateManager* m_tempManager;
145 146
146 private slots: 147 private slots:
147 void slotShow(int); 148 void slotShow(int);
148 void slotEdit(int); 149 void slotEdit(int);
149private slots: 150private slots:
150 void slotUpdate3( QWidget* ); 151 void slotUpdate3( QWidget* );
151 void slotNewFromTemplate(int id ); 152 void slotNewFromTemplate(int id );
152 void slotNew(); 153 void slotNew();
153 void slotDuplicate(); 154 void slotDuplicate();
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
@@ -65,163 +65,171 @@ TableView::TableView( MainWindow* window, QWidget* wid )
65 65
66 setColumnStretchable(3, FALSE ); 66 setColumnStretchable(3, FALSE );
67 setColumnWidth(3, 20 ); 67 setColumnWidth(3, 20 );
68 horizontalHeader()->setLabel(3, tr("Deadline") ); 68 horizontalHeader()->setLabel(3, tr("Deadline") );
69 69
70 if ( todoWindow()->showDeadline() ) 70 if ( todoWindow()->showDeadline() )
71 showColumn( 3); 71 showColumn( 3);
72 else 72 else
73 hideColumn(3 ); 73 hideColumn(3 );
74 74
75 connect((QTable*)this, SIGNAL( clicked( int, int, int, const QPoint& ) ), 75 connect((QTable*)this, SIGNAL( clicked( int, int, int, const QPoint& ) ),
76 this, SLOT( slotClicked(int, int, int, const QPoint& ) ) ); 76 this, SLOT( slotClicked(int, int, int, const QPoint& ) ) );
77 connect((QTable*)this, SIGNAL( pressed( int, int, int, const QPoint& ) ), 77 connect((QTable*)this, SIGNAL( pressed( int, int, int, const QPoint& ) ),
78 this, SLOT( slotPressed(int, int, int, const QPoint& ) ) ); 78 this, SLOT( slotPressed(int, int, int, const QPoint& ) ) );
79 connect((QTable*)this, SIGNAL(valueChanged(int, int) ), 79 connect((QTable*)this, SIGNAL(valueChanged(int, int) ),
80 this, SLOT( slotValueChanged(int, int) ) ); 80 this, SLOT( slotValueChanged(int, int) ) );
81 connect((QTable*)this, SIGNAL(currentChanged(int, int) ), 81 connect((QTable*)this, SIGNAL(currentChanged(int, int) ),
82 this, SLOT( slotCurrentChanged(int, int) ) ); 82 this, SLOT( slotCurrentChanged(int, int) ) );
83 83
84 m_menuTimer = new QTimer( this ); 84 m_menuTimer = new QTimer( this );
85 connect( m_menuTimer, SIGNAL(timeout()), 85 connect( m_menuTimer, SIGNAL(timeout()),
86 this, SLOT(slotShowMenu()) ); 86 this, SLOT(slotShowMenu()) );
87 87
88 m_enablePaint = true; 88 m_enablePaint = true;
89 setUpdatesEnabled( true ); 89 setUpdatesEnabled( true );
90 viewport()->setUpdatesEnabled( true ); 90 viewport()->setUpdatesEnabled( true );
91 viewport()->update(); 91 viewport()->update();
92 setSortOrder( 0 ); 92 setSortOrder( 0 );
93 setAscending( TRUE ); 93 setAscending( TRUE );
94 m_first = true; 94 m_first = true;
95} 95}
96/* a new day has started 96/* a new day has started
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
196 m_oleCat = str; 204 m_oleCat = str;
197 m_first = false; 205 m_first = false;
198 206
199} 207}
200void TableView::clear() { 208void TableView::clear() {
201 setNumRows(0); 209 setNumRows(0);
202} 210}
203void TableView::slotClicked(int row, int col, int, 211void TableView::slotClicked(int row, int col, int,
204 const QPoint& point) { 212 const QPoint& point) {
205 if ( !cellGeometry(row, col ).contains(point ) ) 213 if ( !cellGeometry(row, col ).contains(point ) )
206 return; 214 return;
207 215
208 int ui= sorted().uidAt( row ); 216 int ui= sorted().uidAt( row );
209 217
210 218
211 switch( col ) { 219 switch( col ) {
212 case 0:{ 220 case 0:{
213 int x = point.x() -columnPos( col ); 221 int x = point.x() -columnPos( col );
214 int y = point.y() -rowPos( row ); 222 int y = point.y() -rowPos( row );
215 int w = columnWidth( col ); 223 int w = columnWidth( col );
216 int h = rowHeight( row ); 224 int h = rowHeight( row );
217 if ( x >= ( w - BoxSize ) / 2 && 225 if ( x >= ( w - BoxSize ) / 2 &&
218 x <= ( w - BoxSize ) / 2 + BoxSize && 226 x <= ( w - BoxSize ) / 2 + BoxSize &&
219 y >= ( h - BoxSize ) / 2 && 227 y >= ( h - BoxSize ) / 2 &&
220 y <= ( h - BoxSize ) / 2 + BoxSize ) { 228 y <= ( h - BoxSize ) / 2 + BoxSize ) {
221 OTodo todo = sorted()[row]; 229 OTodo todo = sorted()[row];
222 todo.setCompleted( !todo.isCompleted() ); 230 todo.setCompleted( !todo.isCompleted() );
223 TodoView::update( todo.uid(), todo ); 231 TodoView::update( todo.uid(), todo );
224 updateView(); 232 updateView();
225 } 233 }
226 } 234 }
227 break; 235 break;
@@ -292,109 +300,151 @@ void TableView::paintCell(QPainter* p, int row, int col, const QRect& cr, bool
292 p->fillRect( 0, 0, cr.width(), cr.height(), cg.brush( QColorGroup::Base ) ); 300 p->fillRect( 0, 0, cr.width(), cr.height(), cg.brush( QColorGroup::Base ) );
293 301
294 QPen op = p->pen(); 302 QPen op = p->pen();
295 p->setPen(cg.mid()); 303 p->setPen(cg.mid());
296 p->drawLine( 0, cr.height() - 1, cr.width() - 1, cr.height() - 1 ); 304 p->drawLine( 0, cr.height() - 1, cr.width() - 1, cr.height() - 1 );
297 p->drawLine( cr.width() - 1, 0, cr.width() - 1, cr.height() - 1 ); 305 p->drawLine( cr.width() - 1, 0, cr.width() - 1, cr.height() - 1 );
298 p->setPen(op); 306 p->setPen(op);
299 307
300 QFont f = p->font(); 308 QFont f = p->font();
301 QFontMetrics fm(f); 309 QFontMetrics fm(f);
302 310
303 switch(col) { 311 switch(col) {
304 case 0: 312 case 0:
305 { 313 {
306 // completed field 314 // completed field
307 int marg = ( cr.width() - BoxSize ) / 2; 315 int marg = ( cr.width() - BoxSize ) / 2;
308 int x = 0; 316 int x = 0;
309 int y = ( cr.height() - BoxSize ) / 2; 317 int y = ( cr.height() - BoxSize ) / 2;
310 p->setPen( QPen( cg.text() ) ); 318 p->setPen( QPen( cg.text() ) );
311 p->drawRect( x + marg, y, BoxSize, BoxSize ); 319 p->drawRect( x + marg, y, BoxSize, BoxSize );
312 p->drawRect( x + marg+1, y+1, BoxSize-2, BoxSize-2 ); 320 p->drawRect( x + marg+1, y+1, BoxSize-2, BoxSize-2 );
313 p->setPen( darkGreen ); 321 p->setPen( darkGreen );
314 x += 1; 322 x += 1;
315 y += 1; 323 y += 1;
316 if ( task.isCompleted() ) { 324 if ( task.isCompleted() ) {
317 QPointArray a( 9*2 ); 325 QPointArray a( 9*2 );
318 int i, xx, yy; 326 int i, xx, yy;
319 xx = x+2+marg; 327 xx = x+2+marg;
320 yy = y+4; 328 yy = y+4;
321 for ( i=0; i<4; i++ ) { 329 for ( i=0; i<4; i++ ) {
322 a.setPoint( 2*i, xx, yy ); 330 a.setPoint( 2*i, xx, yy );
323 a.setPoint( 2*i+1, xx, yy+2 ); 331 a.setPoint( 2*i+1, xx, yy+2 );
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
@@ -21,80 +21,83 @@
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 28
29#ifndef OPIE_TABLE_VIEW_H 29#ifndef OPIE_TABLE_VIEW_H
30#define OPIE_TABLE_VIEW_H 30#define OPIE_TABLE_VIEW_H
31 31
32#include <qtable.h> 32#include <qtable.h>
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 49
50 QString type()const; 50 QString type()const;
51 int current(); 51 int current();
52 QString currentRepresentation(); 52 QString currentRepresentation();
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