-rw-r--r-- | core/pim/todo/mainwindow.cpp | 3 | ||||
-rw-r--r-- | core/pim/todo/tableitems.cpp | 4 | ||||
-rw-r--r-- | core/pim/todo/tableview.cpp | 233 | ||||
-rw-r--r-- | core/pim/todo/tableview.h | 44 | ||||
-rw-r--r-- | core/pim/todo/todoview.h | 2 |
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 | } |
474 | void MainWindow::slotDeleteCompleted() { | 474 | void 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 | } |
487 | void MainWindow::slotFind() { | 488 | void MainWindow::slotFind() { |
488 | 489 | ||
489 | } | 490 | } |
490 | void MainWindow::slotEdit() { | 491 | void MainWindow::slotEdit() { |
491 | slotEdit( currentView()->current() ); | 492 | slotEdit( currentView()->current() ); |
492 | } | 493 | } |
493 | /* | 494 | /* |
494 | * set the category | 495 | * set the category |
495 | */ | 496 | */ |
496 | void MainWindow::setCategory( int c) { | 497 | void 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; | |||
35 | CheckItem::CheckItem( QTable* t, | 35 | CheckItem::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 | } |
42 | CheckItem::~CheckItem() { | 42 | CheckItem::~CheckItem() { |
43 | } | 43 | } |
44 | void CheckItem::setChecked( bool b ) { | 44 | void CheckItem::setChecked( bool b ) { |
45 | OCheckItem::setChecked(b); | 45 | OCheckItem::setChecked(b); |
46 | } | 46 | } |
47 | void CheckItem::toggle() { | 47 | void 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 | } |
56 | int CheckItem::uid() const { | 56 | int CheckItem::uid() const { |
57 | return m_uid; | 57 | return m_uid; |
58 | } | 58 | } |
59 | QArray<int> CheckItem::cats() { | 59 | QArray<int> CheckItem::cats() { |
60 | return m_cat; | 60 | return m_cat; |
61 | } | 61 | } |
62 | 62 | ||
63 | /* ComboItem */ | 63 | /* ComboItem */ |
64 | ComboItem::ComboItem( QTable* t, EditType et ) | 64 | ComboItem::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 | } |
87 | void ComboItem::setContentFromEditor( QWidget* w) { | 87 | void 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 | } |
99 | void ComboItem::setText( const QString& s ) { | 99 | void 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 | } |
105 | QString ComboItem::text()const { | 105 | QString 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 */ |
113 | TodoTextItem::~TodoTextItem() { | 113 | TodoTextItem::~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 | ||
37 | using namespace Todo; | 37 | using namespace Todo; |
38 | 38 | ||
39 | namespace { | ||
40 | static const int BoxSize = 14; | ||
41 | static const int RowHeight = 20; | ||
42 | } | ||
43 | |||
39 | 44 | ||
40 | TableView::TableView( MainWindow* window, QWidget* wid ) | 45 | TableView::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 | */ |
91 | void TableView::newDay() { | 96 | void TableView::newDay() { |
92 | clear(); | 97 | clear(); |
93 | updateView(); | 98 | updateView(); |
94 | } | 99 | } |
95 | TableView::~TableView() { | 100 | TableView::~TableView() { |
96 | 101 | ||
97 | } | 102 | } |
98 | void TableView::slotShowMenu() { | 103 | void 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 | } |
103 | OTodo TableView::find(int uid ) { | ||
104 | OTodo ev = TodoView::event( uid ); | ||
105 | return ev; | ||
106 | } | ||
107 | void 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 | } | ||
124 | QString TableView::type() const { | 108 | QString TableView::type() const { |
125 | return QString::fromLatin1( tr("Table View") ); | 109 | return QString::fromLatin1( tr("Table View") ); |
126 | } | 110 | } |
127 | int TableView::current() { | 111 | int 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 | } |
135 | QString TableView::currentRepresentation() { | 116 | QString TableView::currentRepresentation() { |
136 | return text( currentRow(), 2); | 117 | return text( currentRow(), 2); |
137 | } | 118 | } |
138 | /* show overdue */ | 119 | /* show overdue */ |
139 | void TableView::showOverDue( bool ) { | 120 | void TableView::showOverDue( bool ) { |
140 | clear(); | 121 | clear(); |
141 | updateView(); | 122 | updateView(); |
142 | } | 123 | } |
143 | 124 | ||
144 | void TableView::updateView( ) { | 125 | void 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 | } |
197 | void TableView::setTodo( int uid, const OTodo& ev ) { | 153 | void 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 | } |
222 | void TableView::addEvent( const OTodo& ev) { | 159 | void 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 | */ |
231 | void TableView::replaceEvent( const OTodo& ev) { | 168 | void 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 | */ |
239 | void TableView::removeEvent( int ) { | 176 | void TableView::removeEvent( int ) { |
240 | clear(); | ||
241 | updateView(); | 177 | updateView(); |
242 | } | 178 | } |
243 | void TableView::setShowCompleted( bool b) { | 179 | void TableView::setShowCompleted( bool b) { |
244 | qWarning("Show Completed %d" + b ); | 180 | qWarning("Show Completed %d" + b ); |
245 | updateView(); | 181 | updateView(); |
246 | } | 182 | } |
247 | void TableView::setShowDeadline( bool b) { | 183 | void 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 | } |
254 | void TableView::setShowCategory( const QString& ) { | 190 | void TableView::setShowCategory( const QString& ) { |
255 | qWarning("setShowCategory"); | 191 | qWarning("setShowCategory"); |
256 | updateView(); | 192 | updateView(); |
257 | } | 193 | } |
258 | void TableView::clear() { | 194 | void 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 | } | ||
270 | QArray<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 | } |
285 | void TableView::slotClicked(int row, int col, int, | 197 | void 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 | } |
328 | void TableView::slotPressed(int row, int col, int, | 242 | void 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 | } |
335 | void TableView::slotValueChanged( int, int ) { | 249 | void TableView::slotValueChanged( int, int ) { |
336 | qWarning("Value Changed"); | 250 | qWarning("Value Changed"); |
337 | } | 251 | } |
338 | void TableView::slotCurrentChanged(int, int ) { | 252 | void TableView::slotCurrentChanged(int, int ) { |
339 | m_menuTimer->stop(); | 253 | m_menuTimer->stop(); |
340 | } | 254 | } |
341 | /* | ||
342 | * hardcode to column 0 | ||
343 | */ | ||
344 | CheckItem* TableView::checkItem( int row ) { | ||
345 | CheckItem *i = static_cast<CheckItem*>( item( row, 0 ) ); | ||
346 | return i; | ||
347 | } | ||
348 | DueTextItem* TableView::dueItem( int row ) { | ||
349 | DueTextItem* i = static_cast<DueTextItem*> ( item(row, 3 ) ); | ||
350 | return i; | ||
351 | } | ||
352 | QWidget* TableView::widget() { | 255 | QWidget* 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 | */ |
360 | void TableView::sortColumn( int row, bool asc, bool ) { | 265 | void TableView::sortColumn( int row, bool asc, bool ) { |
361 | QTable::sortColumn( row, asc, TRUE ); | 266 | QTable::sortColumn( row, asc, TRUE ); |
362 | 267 | ||
363 | } | 268 | } |
364 | void TableView::viewportPaintEvent( QPaintEvent* e) { | 269 | void 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 | */ | ||
279 | void 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 | ||
38 | class QTimer; | 38 | class QTimer; |
39 | 39 | ||
40 | namespace Todo { | 40 | namespace 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 | ||
81 | private slots: | 82 | private 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 |