summaryrefslogtreecommitdiffabout
path: root/korganizer
Unidiff
Diffstat (limited to 'korganizer') (more/less context) (ignore whitespace changes)
-rw-r--r--korganizer/kotodoview.cpp6
1 files changed, 6 insertions, 0 deletions
diff --git a/korganizer/kotodoview.cpp b/korganizer/kotodoview.cpp
index 22486ba..1fb480d 100644
--- a/korganizer/kotodoview.cpp
+++ b/korganizer/kotodoview.cpp
@@ -1,1212 +1,1218 @@
1/* 1/*
2 This file is part of KOrganizer. 2 This file is part of KOrganizer.
3 Copyright (c) 2000,2001 Cornelius Schumacher <schumacher@kde.org> 3 Copyright (c) 2000,2001 Cornelius Schumacher <schumacher@kde.org>
4 4
5 This program is free software; you can redistribute it and/or modify 5 This program is free software; you can redistribute it and/or modify
6 it under the terms of the GNU General Public License as published by 6 it under the terms of the GNU General Public License as published by
7 the Free Software Foundation; either version 2 of the License, or 7 the Free Software Foundation; either version 2 of the License, or
8 (at your option) any later version. 8 (at your option) any later version.
9 9
10 This program is distributed in the hope that it will be useful, 10 This program is distributed in the hope that it will be useful,
11 but WITHOUT ANY WARRANTY; without even the implied warranty of 11 but WITHOUT ANY WARRANTY; without even the implied warranty of
12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 GNU General Public License for more details. 13 GNU General Public License for more details.
14 14
15 You should have received a copy of the GNU General Public License 15 You should have received a copy of the GNU General Public License
16 along with this program; if not, write to the Free Software 16 along with this program; if not, write to the Free Software
17 Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. 17 Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
18 18
19 As a special exception, permission is given to link this program 19 As a special exception, permission is given to link this program
20 with any edition of Qt, and distribute the resulting executable, 20 with any edition of Qt, and distribute the resulting executable,
21 without including the source code for Qt in the source distribution. 21 without including the source code for Qt in the source distribution.
22*/ 22*/
23 23
24#include <qlayout.h> 24#include <qlayout.h>
25#include <qheader.h> 25#include <qheader.h>
26#include <qcursor.h> 26#include <qcursor.h>
27 27
28#include <qvbox.h> 28#include <qvbox.h>
29#include <kdebug.h> 29#include <kdebug.h>
30#include "koprefs.h" 30#include "koprefs.h"
31#include <klocale.h> 31#include <klocale.h>
32#include <kglobal.h> 32#include <kglobal.h>
33#include <kiconloader.h> 33#include <kiconloader.h>
34#include <kmessagebox.h> 34#include <kmessagebox.h>
35 35
36#include <libkcal/icaldrag.h> 36#include <libkcal/icaldrag.h>
37#include <libkcal/vcaldrag.h> 37#include <libkcal/vcaldrag.h>
38#include <libkcal/calfilter.h> 38#include <libkcal/calfilter.h>
39#include <libkcal/dndfactory.h> 39#include <libkcal/dndfactory.h>
40#include <libkcal/calendarresources.h> 40#include <libkcal/calendarresources.h>
41#include <libkcal/resourcecalendar.h> 41#include <libkcal/resourcecalendar.h>
42#include <kresources/resourceselectdialog.h> 42#include <kresources/resourceselectdialog.h>
43#ifndef DESKTOP_VERSION 43#ifndef DESKTOP_VERSION
44#include <qpe/qpeapplication.h> 44#include <qpe/qpeapplication.h>
45#else 45#else
46#include <qapplication.h> 46#include <qapplication.h>
47#endif 47#endif
48#ifndef KORG_NOPRINTER 48#ifndef KORG_NOPRINTER
49#include "calprinter.h" 49#include "calprinter.h"
50#endif 50#endif
51#include "docprefs.h" 51#include "docprefs.h"
52 52
53#include "kotodoview.h" 53#include "kotodoview.h"
54using namespace KOrg; 54using namespace KOrg;
55 55
56KOTodoListView::KOTodoListView(Calendar *calendar,QWidget *parent, 56KOTodoListView::KOTodoListView(Calendar *calendar,QWidget *parent,
57 const char *name) : 57 const char *name) :
58 KListView(parent,name) 58 KListView(parent,name)
59{ 59{
60 mName = QString ( name ); 60 mName = QString ( name );
61 mCalendar = calendar; 61 mCalendar = calendar;
62#ifndef DESKTOP_VERSION 62#ifndef DESKTOP_VERSION
63 QPEApplication::setStylusOperation(viewport(), QPEApplication::RightOnHold ); 63 QPEApplication::setStylusOperation(viewport(), QPEApplication::RightOnHold );
64#endif 64#endif
65 mOldCurrent = 0; 65 mOldCurrent = 0;
66 mMousePressed = false; 66 mMousePressed = false;
67 67
68 setAcceptDrops(true); 68 setAcceptDrops(true);
69 viewport()->setAcceptDrops(true); 69 viewport()->setAcceptDrops(true);
70 int size = 16; 70 int size = 16;
71 if (qApp->desktop()->width() < 300 ) 71 if (qApp->desktop()->width() < 300 )
72 size = 12; 72 size = 12;
73 setTreeStepSize( size + 6 ); 73 setTreeStepSize( size + 6 );
74 74
75} 75}
76 76
77void KOTodoListView::contentsDragEnterEvent(QDragEnterEvent *e) 77void KOTodoListView::contentsDragEnterEvent(QDragEnterEvent *e)
78{ 78{
79#ifndef KORG_NODND 79#ifndef KORG_NODND
80// kdDebug() << "KOTodoListView::contentsDragEnterEvent" << endl; 80// kdDebug() << "KOTodoListView::contentsDragEnterEvent" << endl;
81 if ( !ICalDrag::canDecode( e ) && !VCalDrag::canDecode( e ) && 81 if ( !ICalDrag::canDecode( e ) && !VCalDrag::canDecode( e ) &&
82 !QTextDrag::canDecode( e ) ) { 82 !QTextDrag::canDecode( e ) ) {
83 e->ignore(); 83 e->ignore();
84 return; 84 return;
85 } 85 }
86 86
87 mOldCurrent = currentItem(); 87 mOldCurrent = currentItem();
88#endif 88#endif
89} 89}
90 90
91 91
92void KOTodoListView::contentsDragMoveEvent(QDragMoveEvent *e) 92void KOTodoListView::contentsDragMoveEvent(QDragMoveEvent *e)
93{ 93{
94#ifndef KORG_NODND 94#ifndef KORG_NODND
95// kdDebug() << "KOTodoListView::contentsDragMoveEvent" << endl; 95// kdDebug() << "KOTodoListView::contentsDragMoveEvent" << endl;
96 96
97 if ( !ICalDrag::canDecode( e ) && !VCalDrag::canDecode( e ) && 97 if ( !ICalDrag::canDecode( e ) && !VCalDrag::canDecode( e ) &&
98 !QTextDrag::canDecode( e ) ) { 98 !QTextDrag::canDecode( e ) ) {
99 e->ignore(); 99 e->ignore();
100 return; 100 return;
101 } 101 }
102 102
103 e->accept(); 103 e->accept();
104#endif 104#endif
105} 105}
106 106
107void KOTodoListView::contentsDragLeaveEvent(QDragLeaveEvent *) 107void KOTodoListView::contentsDragLeaveEvent(QDragLeaveEvent *)
108{ 108{
109#ifndef KORG_NODND 109#ifndef KORG_NODND
110// kdDebug() << "KOTodoListView::contentsDragLeaveEvent" << endl; 110// kdDebug() << "KOTodoListView::contentsDragLeaveEvent" << endl;
111 111
112 setCurrentItem(mOldCurrent); 112 setCurrentItem(mOldCurrent);
113 setSelected(mOldCurrent,true); 113 setSelected(mOldCurrent,true);
114#endif 114#endif
115} 115}
116 116
117void KOTodoListView::contentsDropEvent(QDropEvent *e) 117void KOTodoListView::contentsDropEvent(QDropEvent *e)
118{ 118{
119#ifndef KORG_NODND 119#ifndef KORG_NODND
120// kdDebug() << "KOTodoListView::contentsDropEvent" << endl; 120// kdDebug() << "KOTodoListView::contentsDropEvent" << endl;
121 121
122 if ( !ICalDrag::canDecode( e ) && !VCalDrag::canDecode( e ) && 122 if ( !ICalDrag::canDecode( e ) && !VCalDrag::canDecode( e ) &&
123 !QTextDrag::canDecode( e ) ) { 123 !QTextDrag::canDecode( e ) ) {
124 e->ignore(); 124 e->ignore();
125 return; 125 return;
126 } 126 }
127 127
128 DndFactory factory( mCalendar ); 128 DndFactory factory( mCalendar );
129 Todo *todo = factory.createDropTodo(e); 129 Todo *todo = factory.createDropTodo(e);
130 130
131 if (todo) { 131 if (todo) {
132 e->acceptAction(); 132 e->acceptAction();
133 133
134 KOTodoViewItem *destination = 134 KOTodoViewItem *destination =
135 (KOTodoViewItem *)itemAt(contentsToViewport(e->pos())); 135 (KOTodoViewItem *)itemAt(contentsToViewport(e->pos()));
136 Todo *destinationEvent = 0; 136 Todo *destinationEvent = 0;
137 if (destination) destinationEvent = destination->todo(); 137 if (destination) destinationEvent = destination->todo();
138 138
139 Todo *existingTodo = mCalendar->todo(todo->uid()); 139 Todo *existingTodo = mCalendar->todo(todo->uid());
140 140
141 if(existingTodo) { 141 if(existingTodo) {
142// kdDebug() << "Drop existing Todo" << endl; 142// kdDebug() << "Drop existing Todo" << endl;
143 Incidence *to = destinationEvent; 143 Incidence *to = destinationEvent;
144 while(to) { 144 while(to) {
145 if (to->uid() == todo->uid()) { 145 if (to->uid() == todo->uid()) {
146 KMessageBox::sorry(this, 146 KMessageBox::sorry(this,
147 i18n("Cannot move To-Do to itself or a child of itself"), 147 i18n("Cannot move To-Do to itself or a child of itself"),
148 i18n("Drop To-Do")); 148 i18n("Drop To-Do"));
149 delete todo; 149 delete todo;
150 return; 150 return;
151 } 151 }
152 to = to->relatedTo(); 152 to = to->relatedTo();
153 } 153 }
154 existingTodo->setRelatedTo(destinationEvent); 154 existingTodo->setRelatedTo(destinationEvent);
155 emit todoDropped(todo); 155 emit todoDropped(todo);
156 delete todo; 156 delete todo;
157 } else { 157 } else {
158// kdDebug() << "Drop new Todo" << endl; 158// kdDebug() << "Drop new Todo" << endl;
159 todo->setRelatedTo(destinationEvent); 159 todo->setRelatedTo(destinationEvent);
160 mCalendar->addTodo(todo); 160 mCalendar->addTodo(todo);
161 161
162 emit todoDropped(todo); 162 emit todoDropped(todo);
163 } 163 }
164 } 164 }
165 else { 165 else {
166 QString text; 166 QString text;
167 if (QTextDrag::decode(e,text)) { 167 if (QTextDrag::decode(e,text)) {
168 //QListViewItem *qlvi = itemAt( contentsToViewport(e->pos()) ); 168 //QListViewItem *qlvi = itemAt( contentsToViewport(e->pos()) );
169 KOTodoViewItem *todoi = static_cast<KOTodoViewItem *>(itemAt( contentsToViewport(e->pos()) )); 169 KOTodoViewItem *todoi = static_cast<KOTodoViewItem *>(itemAt( contentsToViewport(e->pos()) ));
170 kdDebug() << "Dropped : " << text << endl; 170 kdDebug() << "Dropped : " << text << endl;
171 QStringList emails = QStringList::split(",",text); 171 QStringList emails = QStringList::split(",",text);
172 for(QStringList::ConstIterator it = emails.begin();it!=emails.end();++it) { 172 for(QStringList::ConstIterator it = emails.begin();it!=emails.end();++it) {
173 kdDebug() << " Email: " << (*it) << endl; 173 kdDebug() << " Email: " << (*it) << endl;
174 int pos = (*it).find("<"); 174 int pos = (*it).find("<");
175 QString name = (*it).left(pos); 175 QString name = (*it).left(pos);
176 QString email = (*it).mid(pos); 176 QString email = (*it).mid(pos);
177 if (!email.isEmpty() && todoi) { 177 if (!email.isEmpty() && todoi) {
178 todoi->todo()->addAttendee(new Attendee(name,email)); 178 todoi->todo()->addAttendee(new Attendee(name,email));
179 } 179 }
180 } 180 }
181 } 181 }
182 else { 182 else {
183 kdDebug() << "KOTodoListView::contentsDropEvent(): Todo from drop not decodable" << endl; 183 kdDebug() << "KOTodoListView::contentsDropEvent(): Todo from drop not decodable" << endl;
184 e->ignore(); 184 e->ignore();
185 } 185 }
186 } 186 }
187#endif 187#endif
188} 188}
189 189
190void KOTodoListView::contentsMousePressEvent(QMouseEvent* e) 190void KOTodoListView::contentsMousePressEvent(QMouseEvent* e)
191{ 191{
192 QListView::contentsMousePressEvent(e); 192 QListView::contentsMousePressEvent(e);
193#ifndef KORG_NODND 193#ifndef KORG_NODND
194 QPoint p(contentsToViewport(e->pos())); 194 QPoint p(contentsToViewport(e->pos()));
195 QListViewItem *i = itemAt(p); 195 QListViewItem *i = itemAt(p);
196 if (i) { 196 if (i) {
197 // if the user clicked into the root decoration of the item, don't 197 // if the user clicked into the root decoration of the item, don't
198 // try to start a drag! 198 // try to start a drag!
199 if (p.x() > header()->sectionPos(header()->mapToIndex(0)) + 199 if (p.x() > header()->sectionPos(header()->mapToIndex(0)) +
200 treeStepSize() * (i->depth() + (rootIsDecorated() ? 1 : 0)) + 200 treeStepSize() * (i->depth() + (rootIsDecorated() ? 1 : 0)) +
201 itemMargin() || 201 itemMargin() ||
202 p.x() < header()->sectionPos(header()->mapToIndex(0))) { 202 p.x() < header()->sectionPos(header()->mapToIndex(0))) {
203 if (e->button()==Qt::LeftButton) { 203 if (e->button()==Qt::LeftButton) {
204 mPressPos = e->pos(); 204 mPressPos = e->pos();
205 mMousePressed = true; 205 mMousePressed = true;
206 } 206 }
207 } 207 }
208 } 208 }
209#endif 209#endif
210} 210}
211 211
212void KOTodoListView::contentsMouseMoveEvent(QMouseEvent* e) 212void KOTodoListView::contentsMouseMoveEvent(QMouseEvent* e)
213{ 213{
214 214
215#ifndef KORG_NODND 215#ifndef KORG_NODND
216// kdDebug() << "KOTodoListView::contentsMouseMoveEvent()" << endl; 216// kdDebug() << "KOTodoListView::contentsMouseMoveEvent()" << endl;
217 QListView::contentsMouseMoveEvent(e); 217 QListView::contentsMouseMoveEvent(e);
218 if (mMousePressed && (mPressPos - e->pos()).manhattanLength() > 218 if (mMousePressed && (mPressPos - e->pos()).manhattanLength() >
219 QApplication::startDragDistance()) { 219 QApplication::startDragDistance()) {
220 mMousePressed = false; 220 mMousePressed = false;
221 QListViewItem *item = itemAt(contentsToViewport(mPressPos)); 221 QListViewItem *item = itemAt(contentsToViewport(mPressPos));
222 if (item) { 222 if (item) {
223// kdDebug() << "Start Drag for item " << item->text(0) << endl; 223// kdDebug() << "Start Drag for item " << item->text(0) << endl;
224 DndFactory factory( mCalendar ); 224 DndFactory factory( mCalendar );
225 ICalDrag *vd = factory.createDragTodo( 225 ICalDrag *vd = factory.createDragTodo(
226 ((KOTodoViewItem *)item)->todo(),viewport()); 226 ((KOTodoViewItem *)item)->todo(),viewport());
227 if (vd->drag()) { 227 if (vd->drag()) {
228 kdDebug() << "KOTodoListView::contentsMouseMoveEvent(): Delete drag source" << endl; 228 kdDebug() << "KOTodoListView::contentsMouseMoveEvent(): Delete drag source" << endl;
229 } 229 }
230/* 230/*
231 QString source = fullPath(item); 231 QString source = fullPath(item);
232 if ( QFile::exists(source) ) { 232 if ( QFile::exists(source) ) {
233 QUriDrag* ud = new QUriDrag(viewport()); 233 QUriDrag* ud = new QUriDrag(viewport());
234 ud->setFilenames( source ); 234 ud->setFilenames( source );
235 if ( ud->drag() ) 235 if ( ud->drag() )
236 QMessageBox::information( this, "Drag source", 236 QMessageBox::information( this, "Drag source",
237 QString("Delete ")+source, "Not implemented" ); 237 QString("Delete ")+source, "Not implemented" );
238*/ 238*/
239 } 239 }
240 } 240 }
241#endif 241#endif
242} 242}
243void KOTodoListView::keyPressEvent ( QKeyEvent * e ) 243void KOTodoListView::keyPressEvent ( QKeyEvent * e )
244{ 244{
245 245
246 QListViewItem* cn; 246 QListViewItem* cn;
247 if ( e->key() == Qt::Key_Return || e->key() == Qt::Key_Enter ) { 247 if ( e->key() == Qt::Key_Return || e->key() == Qt::Key_Enter ) {
248 cn = currentItem(); 248 cn = currentItem();
249 if ( cn ) { 249 if ( cn ) {
250 KOTodoViewItem* ci = (KOTodoViewItem*)( cn ); 250 KOTodoViewItem* ci = (KOTodoViewItem*)( cn );
251 if ( ci ){ 251 if ( ci ){
252 if ( e->state() == ShiftButton ) 252 if ( e->state() == ShiftButton )
253 ci->setOn( false ); 253 ci->setOn( false );
254 else 254 else
255 ci->setOn( true ); 255 ci->setOn( true );
256 cn = cn->nextSibling(); 256 cn = cn->nextSibling();
257 if ( cn ) { 257 if ( cn ) {
258 setCurrentItem ( cn ); 258 setCurrentItem ( cn );
259 ensureItemVisible ( cn ); 259 ensureItemVisible ( cn );
260 } 260 }
261 261
262 } 262 }
263 } 263 }
264 264
265 return; 265 return;
266 } 266 }
267 267
268 // qDebug("KOTodoListView::keyPressEvent "); 268 // qDebug("KOTodoListView::keyPressEvent ");
269 if ( e->state() == Qt::ControlButton || e->state() == Qt::ShiftButton || mName != "todolistsmall" ) { 269 if ( e->state() == Qt::ControlButton || e->state() == Qt::ShiftButton || mName != "todolistsmall" ) {
270 switch ( e->key() ) { 270 switch ( e->key() ) {
271 case Qt::Key_Down: 271 case Qt::Key_Down:
272 case Qt::Key_Up: 272 case Qt::Key_Up:
273 QListView::keyPressEvent ( e ); 273 QListView::keyPressEvent ( e );
274 break; 274 break;
275 case Qt::Key_Left: 275 case Qt::Key_Left:
276 case Qt::Key_Right: 276 case Qt::Key_Right:
277 QListView::keyPressEvent ( e ); 277 QListView::keyPressEvent ( e );
278 e->accept(); 278 e->accept();
279 return; 279 return;
280 break; 280 break;
281 default: 281 default:
282 e->ignore(); 282 e->ignore();
283 break; 283 break;
284 } 284 }
285 return; 285 return;
286 } 286 }
287 e->ignore(); 287 e->ignore();
288} 288}
289void KOTodoListView::contentsMouseReleaseEvent(QMouseEvent *e) 289void KOTodoListView::contentsMouseReleaseEvent(QMouseEvent *e)
290{ 290{
291 QListView::contentsMouseReleaseEvent(e); 291 QListView::contentsMouseReleaseEvent(e);
292 mMousePressed = false; 292 mMousePressed = false;
293} 293}
294 294
295void KOTodoListView::contentsMouseDoubleClickEvent(QMouseEvent *e) 295void KOTodoListView::contentsMouseDoubleClickEvent(QMouseEvent *e)
296{ 296{
297 if (!e) return; 297 if (!e) return;
298 298
299 QPoint vp = contentsToViewport(e->pos()); 299 QPoint vp = contentsToViewport(e->pos());
300 300
301 QListViewItem *item = itemAt(vp); 301 QListViewItem *item = itemAt(vp);
302 302
303 emit double_Clicked(item); 303 emit double_Clicked(item);
304 if (!item) return; 304 if (!item) return;
305 305
306 emit doubleClicked(item,vp,0); 306 emit doubleClicked(item,vp,0);
307} 307}
308 308
309///////////////////////////////////////////////////////////////////////////// 309/////////////////////////////////////////////////////////////////////////////
310 310
311KOQuickTodo::KOQuickTodo(QWidget *parent) : 311KOQuickTodo::KOQuickTodo(QWidget *parent) :
312 QLineEdit(parent) 312 QLineEdit(parent)
313{ 313{
314 setText(i18n("Click to add a new Todo")); 314 setText(i18n("Click to add a new Todo"));
315} 315}
316 316
317void KOQuickTodo::focusInEvent(QFocusEvent *ev) 317void KOQuickTodo::focusInEvent(QFocusEvent *ev)
318{ 318{
319 if ( text()==i18n("Click to add a new Todo") ) 319 if ( text()==i18n("Click to add a new Todo") )
320 setText(""); 320 setText("");
321 QLineEdit::focusInEvent(ev); 321 QLineEdit::focusInEvent(ev);
322} 322}
323 323
324void KOQuickTodo::focusOutEvent(QFocusEvent *ev) 324void KOQuickTodo::focusOutEvent(QFocusEvent *ev)
325{ 325{
326 setText(i18n("Click to add a new Todo")); 326 setText(i18n("Click to add a new Todo"));
327 QLineEdit::focusOutEvent(ev); 327 QLineEdit::focusOutEvent(ev);
328} 328}
329 329
330///////////////////////////////////////////////////////////////////////////// 330/////////////////////////////////////////////////////////////////////////////
331 331
332KOTodoView::KOTodoView(Calendar *calendar,QWidget* parent,const char* name) : 332KOTodoView::KOTodoView(Calendar *calendar,QWidget* parent,const char* name) :
333 KOrg::BaseView(calendar,parent,name) 333 KOrg::BaseView(calendar,parent,name)
334{ 334{
335 mNavigator = 0; 335 mNavigator = 0;
336 QBoxLayout *topLayout = new QVBoxLayout(this); 336 QBoxLayout *topLayout = new QVBoxLayout(this);
337 mName = QString ( name ); 337 mName = QString ( name );
338 mBlockUpdate = false; 338 mBlockUpdate = false;
339 mQuickAdd = new KOQuickTodo(this); 339 mQuickAdd = new KOQuickTodo(this);
340 topLayout->addWidget(mQuickAdd); 340 topLayout->addWidget(mQuickAdd);
341 341
342 if ( !KOPrefs::instance()->mEnableQuickTodo ) mQuickAdd->hide(); 342 if ( !KOPrefs::instance()->mEnableQuickTodo ) mQuickAdd->hide();
343 343
344 mTodoListView = new KOTodoListView(calendar,this, name ); 344 mTodoListView = new KOTodoListView(calendar,this, name );
345 topLayout->addWidget(mTodoListView); 345 topLayout->addWidget(mTodoListView);
346 //mTodoListView->header()->setMaximumHeight(30); 346 //mTodoListView->header()->setMaximumHeight(30);
347 mTodoListView->setRootIsDecorated(true); 347 mTodoListView->setRootIsDecorated(true);
348 mTodoListView->setAllColumnsShowFocus(true); 348 mTodoListView->setAllColumnsShowFocus(true);
349 349
350 mTodoListView->setShowSortIndicator(true); 350 mTodoListView->setShowSortIndicator(true);
351 351
352 mTodoListView->addColumn(i18n("Todo")); 352 mTodoListView->addColumn(i18n("Todo"));
353 mTodoListView->addColumn(i18n("Prio")); 353 mTodoListView->addColumn(i18n("Prio"));
354 mTodoListView->setColumnAlignment(1,AlignHCenter); 354 mTodoListView->setColumnAlignment(1,AlignHCenter);
355 mTodoListView->addColumn(i18n("Complete")); 355 mTodoListView->addColumn(i18n("Complete"));
356 mTodoListView->setColumnAlignment(2,AlignCenter); 356 mTodoListView->setColumnAlignment(2,AlignCenter);
357 357
358 mTodoListView->addColumn(i18n("Due Date")); 358 mTodoListView->addColumn(i18n("Due Date"));
359 mTodoListView->setColumnAlignment(3,AlignLeft); 359 mTodoListView->setColumnAlignment(3,AlignLeft);
360 mTodoListView->addColumn(i18n("Due Time")); 360 mTodoListView->addColumn(i18n("Due Time"));
361 mTodoListView->setColumnAlignment(4,AlignHCenter); 361 mTodoListView->setColumnAlignment(4,AlignHCenter);
362 362
363 mTodoListView->addColumn(i18n("Start Date")); 363 mTodoListView->addColumn(i18n("Start Date"));
364 mTodoListView->setColumnAlignment(5,AlignLeft); 364 mTodoListView->setColumnAlignment(5,AlignLeft);
365 mTodoListView->addColumn(i18n("Start Time")); 365 mTodoListView->addColumn(i18n("Start Time"));
366 mTodoListView->setColumnAlignment(6,AlignHCenter); 366 mTodoListView->setColumnAlignment(6,AlignHCenter);
367 367
368 mTodoListView->addColumn(i18n("Cancelled")); 368 mTodoListView->addColumn(i18n("Cancelled"));
369 mTodoListView->addColumn(i18n("Categories")); 369 mTodoListView->addColumn(i18n("Categories"));
370#if 0 370#if 0
371 mTodoListView->addColumn(i18n("Sort Id")); 371 mTodoListView->addColumn(i18n("Sort Id"));
372 mTodoListView->setColumnAlignment(4,AlignHCenter); 372 mTodoListView->setColumnAlignment(4,AlignHCenter);
373#endif 373#endif
374 374
375 mTodoListView->setMinimumHeight( 60 ); 375 mTodoListView->setMinimumHeight( 60 );
376 mTodoListView->setItemsRenameable( true ); 376 mTodoListView->setItemsRenameable( true );
377 mTodoListView->setRenameable( 0 ); 377 mTodoListView->setRenameable( 0 );
378 mTodoListView->setColumnWidth( 0, 120 ); 378 mTodoListView->setColumnWidth( 0, 120 );
379 mTodoListView->setColumnWidthMode(0, QListView::Manual); 379 mTodoListView->setColumnWidthMode(0, QListView::Manual);
380 mTodoListView->setColumnWidthMode(1, QListView::Manual); 380 mTodoListView->setColumnWidthMode(1, QListView::Manual);
381 mTodoListView->setColumnWidthMode(2, QListView::Manual); 381 mTodoListView->setColumnWidthMode(2, QListView::Manual);
382 mTodoListView->setColumnWidthMode(3, QListView::Manual); 382 mTodoListView->setColumnWidthMode(3, QListView::Manual);
383 mTodoListView->setColumnWidthMode(4, QListView::Manual); 383 mTodoListView->setColumnWidthMode(4, QListView::Manual);
384 mTodoListView->setColumnWidthMode(5, QListView::Manual); 384 mTodoListView->setColumnWidthMode(5, QListView::Manual);
385 mTodoListView->setColumnWidthMode(6, QListView::Manual); 385 mTodoListView->setColumnWidthMode(6, QListView::Manual);
386 mTodoListView->setColumnWidthMode(7, QListView::Manual); 386 mTodoListView->setColumnWidthMode(7, QListView::Manual);
387 mTodoListView->setColumnWidthMode(8, QListView::Manual); 387 mTodoListView->setColumnWidthMode(8, QListView::Manual);
388 388
389 389
390 mPriorityPopupMenu = new QPopupMenu(this); 390 mPriorityPopupMenu = new QPopupMenu(this);
391 for (int i = 1; i <= 5; i++) { 391 for (int i = 1; i <= 5; i++) {
392 QString label = QString ("%1").arg (i); 392 QString label = QString ("%1").arg (i);
393 mPriority[mPriorityPopupMenu->insertItem (label)] = i; 393 mPriority[mPriorityPopupMenu->insertItem (label)] = i;
394 } 394 }
395 connect (mPriorityPopupMenu, SIGNAL(activated (int)), SLOT (setNewPriority(int))); 395 connect (mPriorityPopupMenu, SIGNAL(activated (int)), SLOT (setNewPriority(int)));
396 396
397 mPercentageCompletedPopupMenu = new QPopupMenu(this); 397 mPercentageCompletedPopupMenu = new QPopupMenu(this);
398 for (int i = 0; i <= 100; i+=20) { 398 for (int i = 0; i <= 100; i+=20) {
399 QString label = QString ("%1 %").arg (i); 399 QString label = QString ("%1 %").arg (i);
400 mPercentage[mPercentageCompletedPopupMenu->insertItem (label)] = i; 400 mPercentage[mPercentageCompletedPopupMenu->insertItem (label)] = i;
401 } 401 }
402 connect (mPercentageCompletedPopupMenu, SIGNAL (activated (int)), SLOT (setNewPercentage (int))); 402 connect (mPercentageCompletedPopupMenu, SIGNAL (activated (int)), SLOT (setNewPercentage (int)));
403 403
404 404
405 405
406 mItemPopupMenu = new QPopupMenu(this); 406 mItemPopupMenu = new QPopupMenu(this);
407 mItemPopupMenu->insertItem(i18n("Show..."), this, 407 mItemPopupMenu->insertItem(i18n("Show..."), this,
408 SLOT (showTodo())); 408 SLOT (showTodo()));
409 mItemPopupMenu->insertItem(i18n("Edit..."), this, 409 mItemPopupMenu->insertItem(i18n("Edit..."), this,
410 SLOT (editTodo())); 410 SLOT (editTodo()));
411 mItemPopupMenu->insertItem( i18n("Delete"), this, 411 mItemPopupMenu->insertItem( i18n("Delete"), this,
412 SLOT (deleteTodo())); 412 SLOT (deleteTodo()));
413 mItemPopupMenu->insertItem( i18n("Clone..."), this, 413 mItemPopupMenu->insertItem( i18n("Clone..."), this,
414 SLOT (cloneTodo())); 414 SLOT (cloneTodo()));
415 mItemPopupMenu->insertItem( i18n("Move..."), this, 415 mItemPopupMenu->insertItem( i18n("Move..."), this,
416 SLOT (moveTodo())); 416 SLOT (moveTodo()));
417 mItemPopupMenu->insertItem( i18n("Beam..."), this, 417 mItemPopupMenu->insertItem( i18n("Beam..."), this,
418 SLOT (beamTodo())); 418 SLOT (beamTodo()));
419 mItemPopupMenu->insertItem( i18n("Toggle Cancel"), this, 419 mItemPopupMenu->insertItem( i18n("Toggle Cancel"), this,
420 SLOT (cancelTodo())); 420 SLOT (cancelTodo()));
421 mItemPopupMenu->insertSeparator(); 421 mItemPopupMenu->insertSeparator();
422 422
423 mItemPopupMenu->insertItem( i18n("New Todo..."), this, 423 mItemPopupMenu->insertItem( i18n("New Todo..."), this,
424 SLOT (newTodo())); 424 SLOT (newTodo()));
425 mItemPopupMenu->insertItem(i18n("New Sub-Todo..."), this, 425 mItemPopupMenu->insertItem(i18n("New Sub-Todo..."), this,
426 SLOT (newSubTodo())); 426 SLOT (newSubTodo()));
427 mItemPopupMenu->insertItem(i18n("Unparent Todo"), this, 427 mItemPopupMenu->insertItem(i18n("Unparent Todo"), this,
428 SLOT (unparentTodo()),0,21); 428 SLOT (unparentTodo()),0,21);
429 mItemPopupMenu->insertItem(i18n("Reparent Todo"), this, 429 mItemPopupMenu->insertItem(i18n("Reparent Todo"), this,
430 SLOT (reparentTodo()),0,22); 430 SLOT (reparentTodo()),0,22);
431 mItemPopupMenu->insertSeparator(); 431 mItemPopupMenu->insertSeparator();
432#if 0 432#if 0
433 mItemPopupMenu->insertItem(i18n("Delete completed To-Dos","Purge Completed"), 433 mItemPopupMenu->insertItem(i18n("Delete completed To-Dos","Purge Completed"),
434 this, SLOT( purgeCompleted() ) ); 434 this, SLOT( purgeCompleted() ) );
435 mItemPopupMenu->insertItem(i18n("toggle completed To-Dos","Show Completed"), 435 mItemPopupMenu->insertItem(i18n("toggle completed To-Dos","Show Completed"),
436 this, SLOT( toggleCompleted() ),0, 33 ); 436 this, SLOT( toggleCompleted() ),0, 33 );
437 mItemPopupMenu->insertItem(i18n("toggle quick todo","Show Quick Todo"), 437 mItemPopupMenu->insertItem(i18n("toggle quick todo","Show Quick Todo"),
438 this, SLOT( toggleQuickTodo() ),0, 34 ); 438 this, SLOT( toggleQuickTodo() ),0, 34 );
439 mItemPopupMenu->insertItem(i18n("toggle running todo","Hide not Running"), 439 mItemPopupMenu->insertItem(i18n("toggle running todo","Hide not Running"),
440 this, SLOT( toggleRunning() ),0, 35 ); 440 this, SLOT( toggleRunning() ),0, 35 );
441 441
442#endif 442#endif
443 mPopupMenu = new QPopupMenu(this); 443 mPopupMenu = new QPopupMenu(this);
444 mPopupMenu->insertItem(SmallIconSet("todo"), i18n("New Todo..."), this, 444 mPopupMenu->insertItem(SmallIconSet("todo"), i18n("New Todo..."), this,
445 SLOT (newTodo()),0,1); 445 SLOT (newTodo()),0,1);
446 mPopupMenu->insertItem(i18n("delete completed To-Dos","Purge Completed"), 446 mPopupMenu->insertItem(i18n("delete completed To-Dos","Purge Completed"),
447 this, SLOT(purgeCompleted()),0,2); 447 this, SLOT(purgeCompleted()),0,2);
448 mPopupMenu->insertItem(i18n("Show Completed"), 448 mPopupMenu->insertItem(i18n("Show Completed"),
449 this, SLOT( toggleCompleted() ),0,3 ); 449 this, SLOT( toggleCompleted() ),0,3 );
450 mPopupMenu->insertItem(i18n("toggle quick todo","Show Quick Todo"), 450 mPopupMenu->insertItem(i18n("toggle quick todo","Show Quick Todo"),
451 this, SLOT( toggleQuickTodo() ),0,4 ); 451 this, SLOT( toggleQuickTodo() ),0,4 );
452 mPopupMenu->insertItem(i18n("toggle running todo","Hide not Running"), 452 mPopupMenu->insertItem(i18n("toggle running todo","Hide not Running"),
453 this, SLOT( toggleRunning() ),0,5 ); 453 this, SLOT( toggleRunning() ),0,5 );
454 mPopupMenu->insertItem(i18n(" set all open","Display all opened"), 454 mPopupMenu->insertItem(i18n(" set all open","Display all opened"),
455 this, SLOT( setAllOpen() ),0,6 ); 455 this, SLOT( setAllOpen() ),0,6 );
456 mPopupMenu->insertItem(i18n(" set all close","Display all closed"), 456 mPopupMenu->insertItem(i18n(" set all close","Display all closed"),
457 this, SLOT( setAllClose() ),0,7 ); 457 this, SLOT( setAllClose() ),0,7 );
458 mPopupMenu->insertItem(i18n(" set all flat","Display all flat"), 458 mPopupMenu->insertItem(i18n(" set all flat","Display all flat"),
459 this, SLOT( setAllFlat() ),0,8 ); 459 this, SLOT( setAllFlat() ),0,8 );
460 mDocPrefs = new DocPrefs( name ); 460 mDocPrefs = new DocPrefs( name );
461 461
462 mItemPopupMenu->insertItem(i18n("Todo View"),mPopupMenu ); 462 mItemPopupMenu->insertItem(i18n("Todo View"),mPopupMenu );
463 mPopupMenu->setCheckable( true ); 463 mPopupMenu->setCheckable( true );
464 mItemPopupMenu->setCheckable( true ); 464 mItemPopupMenu->setCheckable( true );
465 465
466 466
467 mPopupMenu->setItemChecked( 3,KOPrefs::instance()->mShowCompletedTodo ); 467 mPopupMenu->setItemChecked( 3,KOPrefs::instance()->mShowCompletedTodo );
468 mItemPopupMenu->setItemChecked( 33 , KOPrefs::instance()->mShowCompletedTodo ); 468 mItemPopupMenu->setItemChecked( 33 , KOPrefs::instance()->mShowCompletedTodo );
469 469
470 mPopupMenu->setItemChecked(4,KOPrefs::instance()->mEnableQuickTodo); 470 mPopupMenu->setItemChecked(4,KOPrefs::instance()->mEnableQuickTodo);
471 mItemPopupMenu->setItemChecked( 34 , KOPrefs::instance()->mEnableQuickTodo ); 471 mItemPopupMenu->setItemChecked( 34 , KOPrefs::instance()->mEnableQuickTodo );
472 472
473 mPopupMenu->setItemChecked(5,KOPrefs::instance()->mHideNonStartedTodos); 473 mPopupMenu->setItemChecked(5,KOPrefs::instance()->mHideNonStartedTodos);
474 mItemPopupMenu->setItemChecked( 35 , KOPrefs::instance()->mHideNonStartedTodos ); 474 mItemPopupMenu->setItemChecked( 35 , KOPrefs::instance()->mHideNonStartedTodos );
475 475
476 476
477 // Double clicking conflicts with opening/closing the subtree 477 // Double clicking conflicts with opening/closing the subtree
478 connect( mTodoListView, SIGNAL( doubleClicked( QListViewItem *) ), 478 connect( mTodoListView, SIGNAL( doubleClicked( QListViewItem *) ),
479 SLOT( editItem( QListViewItem *) ) ); 479 SLOT( editItem( QListViewItem *) ) );
480 /* 480 /*
481 connect( mTodoListView, SIGNAL( rightButtonClicked ( QListViewItem *, 481 connect( mTodoListView, SIGNAL( rightButtonClicked ( QListViewItem *,
482 const QPoint &,int ) ), 482 const QPoint &,int ) ),
483 SLOT( popupMenu( QListViewItem *, const QPoint & ,int) ) ); 483 SLOT( popupMenu( QListViewItem *, const QPoint & ,int) ) );
484 */ 484 */
485 connect( mTodoListView, SIGNAL( contextRequest ( QListViewItem *, 485 connect( mTodoListView, SIGNAL( contextRequest ( QListViewItem *,
486 const QPoint &,int ) ), 486 const QPoint &,int ) ),
487 SLOT( popupMenu( QListViewItem *, const QPoint & ,int) ) ); 487 SLOT( popupMenu( QListViewItem *, const QPoint & ,int) ) );
488 connect( mTodoListView, SIGNAL( clicked( QListViewItem * ) ), 488 connect( mTodoListView, SIGNAL( clicked( QListViewItem * ) ),
489 SLOT( itemClicked( QListViewItem * ) ) ); 489 SLOT( itemClicked( QListViewItem * ) ) );
490 connect( mTodoListView, SIGNAL( double_Clicked( QListViewItem * ) ), 490 connect( mTodoListView, SIGNAL( double_Clicked( QListViewItem * ) ),
491 SLOT( itemDoubleClicked( QListViewItem * ) ) ); 491 SLOT( itemDoubleClicked( QListViewItem * ) ) );
492 connect( mTodoListView, SIGNAL( todoDropped( Todo * ) ), 492 connect( mTodoListView, SIGNAL( todoDropped( Todo * ) ),
493 SLOT( updateView() ) ); 493 SLOT( updateView() ) );
494 connect( mTodoListView, SIGNAL( expanded( QListViewItem * ) ), 494 connect( mTodoListView, SIGNAL( expanded( QListViewItem * ) ),
495 SLOT( itemStateChanged( QListViewItem * ) ) ); 495 SLOT( itemStateChanged( QListViewItem * ) ) );
496 connect( mTodoListView, SIGNAL( collapsed( QListViewItem * ) ), 496 connect( mTodoListView, SIGNAL( collapsed( QListViewItem * ) ),
497 SLOT( itemStateChanged( QListViewItem * ) ) ); 497 SLOT( itemStateChanged( QListViewItem * ) ) );
498 498
499#if 0 499#if 0
500 connect(mTodoListView,SIGNAL(selectionChanged(QListViewItem *)), 500 connect(mTodoListView,SIGNAL(selectionChanged(QListViewItem *)),
501 SLOT(selectionChanged(QListViewItem *))); 501 SLOT(selectionChanged(QListViewItem *)));
502 connect(mTodoListView,SIGNAL(clicked(QListViewItem *)), 502 connect(mTodoListView,SIGNAL(clicked(QListViewItem *)),
503 SLOT(selectionChanged(QListViewItem *))); 503 SLOT(selectionChanged(QListViewItem *)));
504 connect(mTodoListView,SIGNAL(pressed(QListViewItem *)), 504 connect(mTodoListView,SIGNAL(pressed(QListViewItem *)),
505 SLOT(selectionChanged(QListViewItem *))); 505 SLOT(selectionChanged(QListViewItem *)));
506#endif 506#endif
507 connect( mTodoListView, SIGNAL(selectionChanged() ), 507 connect( mTodoListView, SIGNAL(selectionChanged() ),
508 SLOT( processSelectionChange() ) ); 508 SLOT( processSelectionChange() ) );
509 connect( mQuickAdd, SIGNAL( returnPressed () ), 509 connect( mQuickAdd, SIGNAL( returnPressed () ),
510 SLOT( addQuickTodo() ) ); 510 SLOT( addQuickTodo() ) );
511 511
512} 512}
513 513
514KOTodoView::~KOTodoView() 514KOTodoView::~KOTodoView()
515{ 515{
516 delete mDocPrefs; 516 delete mDocPrefs;
517} 517}
518 518
519void KOTodoView::jumpToDate () 519void KOTodoView::jumpToDate ()
520{ 520{
521 // if (mActiveItem) { 521 // if (mActiveItem) {
522// mActiveItem->todo()); 522// mActiveItem->todo());
523// if ( mActiveItem->todo()->hasDueDate() ) 523// if ( mActiveItem->todo()->hasDueDate() )
524// emit mActiveItem->todo()jumpToTime( mTodo->dtDue().date() ); 524// emit mActiveItem->todo()jumpToTime( mTodo->dtDue().date() );
525} 525}
526 526
527void KOTodoView::updateView() 527void KOTodoView::updateView()
528{ 528{
529 pendingSubtodo = 0; 529 pendingSubtodo = 0;
530 if ( mBlockUpdate ) { 530 if ( mBlockUpdate ) {
531 //qDebug("blocked "); 531 //qDebug("blocked ");
532 return; 532 return;
533 } 533 }
534 if ( isFlatDisplay ) { 534 if ( isFlatDisplay ) {
535 setAllFlat(); 535 setAllFlat();
536 return; 536 return;
537 } 537 }
538 //qDebug("update "); 538 //qDebug("update ");
539// kdDebug() << "KOTodoView::updateView()" << endl; 539// kdDebug() << "KOTodoView::updateView()" << endl;
540 QFont fo = KOPrefs::instance()->mTodoViewFont; 540 QFont fo = KOPrefs::instance()->mTodoViewFont;
541 mTodoListView->clear(); 541 mTodoListView->clear();
542 if ( mName == "todolistsmall" ) { 542 if ( mName == "todolistsmall" ) {
543 if ( KOPrefs::instance()->mTodoViewUsesSmallFont ) { 543 if ( KOPrefs::instance()->mTodoViewUsesSmallFont ) {
544 int ps = fo.pointSize() -2; 544 int ps = fo.pointSize() -2;
545 if ( ps > 12 ) 545 if ( ps > 12 )
546 ps -= 2; 546 ps -= 2;
547 fo.setPointSize( ps ); 547 fo.setPointSize( ps );
548 } 548 }
549 } 549 }
550 550
551 mTodoListView->setFont( fo ); 551 mTodoListView->setFont( fo );
552 // QFontMetrics fm ( KOPrefs::instance()->mTodoViewFont ); 552 // QFontMetrics fm ( KOPrefs::instance()->mTodoViewFont );
553 //mTodoListView->header()->setMaximumHeight(fm.height()); 553 //mTodoListView->header()->setMaximumHeight(fm.height());
554 QPtrList<Todo> todoList = calendar()->todos(); 554 QPtrList<Todo> todoList = calendar()->todos();
555 555
556/* 556/*
557 kdDebug() << "KOTodoView::updateView(): Todo List:" << endl; 557 kdDebug() << "KOTodoView::updateView(): Todo List:" << endl;
558 Event *t; 558 Event *t;
559 for(t = todoList.first(); t; t = todoList.next()) { 559 for(t = todoList.first(); t; t = todoList.next()) {
560 kdDebug() << " " << t->getSummary() << endl; 560 kdDebug() << " " << t->getSummary() << endl;
561 561
562 if (t->getRelatedTo()) { 562 if (t->getRelatedTo()) {
563 kdDebug() << " (related to " << t->getRelatedTo()->getSummary() << ")" << endl; 563 kdDebug() << " (related to " << t->getRelatedTo()->getSummary() << ")" << endl;
564 } 564 }
565 565
566 QPtrList<Event> l = t->getRelations(); 566 QPtrList<Event> l = t->getRelations();
567 Event *c; 567 Event *c;
568 for(c=l.first();c;c=l.next()) { 568 for(c=l.first();c;c=l.next()) {
569 kdDebug() << " - relation: " << c->getSummary() << endl; 569 kdDebug() << " - relation: " << c->getSummary() << endl;
570 } 570 }
571 } 571 }
572*/ 572*/
573 573
574 // Put for each Event a KOTodoViewItem in the list view. Don't rely on a 574 // Put for each Event a KOTodoViewItem in the list view. Don't rely on a
575 // specific order of events. That means that we have to generate parent items 575 // specific order of events. That means that we have to generate parent items
576 // recursively for proper hierarchical display of Todos. 576 // recursively for proper hierarchical display of Todos.
577 mTodoMap.clear(); 577 mTodoMap.clear();
578 Todo *todo; 578 Todo *todo;
579 todo = todoList.first();// todo; todo = todoList.next()) { 579 todo = todoList.first();// todo; todo = todoList.next()) {
580 while ( todo ) { 580 while ( todo ) {
581 bool next = true; 581 bool next = true;
582 // qDebug("todo %s ", todo->summary().latin1()); 582 // qDebug("todo %s ", todo->summary().latin1());
583 Incidence *incidence = todo->relatedTo(); 583 Incidence *incidence = todo->relatedTo();
584 while ( incidence ) { 584 while ( incidence ) {
585 if ( incidence->type() == "Todo") { 585 if ( incidence->type() == "Todo") {
586 //qDebug("related %s ",incidence->summary().latin1() ); 586 //qDebug("related %s ",incidence->summary().latin1() );
587 if ( !(todoList.contains ( ((Todo* )incidence ) ) )) { 587 if ( !(todoList.contains ( ((Todo* )incidence ) ) )) {
588 //qDebug("related not found "); 588 //qDebug("related not found ");
589 todoList.remove( ); 589 todoList.remove( );
590 todo = todoList.current(); 590 todo = todoList.current();
591 next = false; 591 next = false;
592 incidence = 0; 592 incidence = 0;
593 593
594 } else { 594 } else {
595 //qDebug("related found "); 595 //qDebug("related found ");
596 incidence = incidence->relatedTo(); 596 incidence = incidence->relatedTo();
597 } 597 }
598 } else 598 } else
599 incidence = 0; 599 incidence = 0;
600 } 600 }
601 if ( next ) 601 if ( next )
602 todo = todoList.next(); 602 todo = todoList.next();
603 } 603 }
604// qDebug("again .... "); 604// qDebug("again .... ");
605// for(todo = todoList.first(); todo; todo = todoList.next()) { 605// for(todo = todoList.first(); todo; todo = todoList.next()) {
606 606
607// qDebug("yytodo %s ", todo->summary().latin1()); 607// qDebug("yytodo %s ", todo->summary().latin1());
608// } 608// }
609 //qDebug("for "); 609 //qDebug("for ");
610 for(todo = todoList.first(); todo; todo = todoList.next()) { 610 for(todo = todoList.first(); todo; todo = todoList.next()) {
611 if (!mTodoMap.contains(todo) && checkTodo( todo ) ) 611 if (!mTodoMap.contains(todo) && checkTodo( todo ) )
612 { 612 {
613 insertTodoItem(todo); 613 insertTodoItem(todo);
614 } 614 }
615 } 615 }
616 //qDebug("for end "); 616 //qDebug("for end ");
617 // Restore opened/closed state 617 // Restore opened/closed state
618 mTodoListView->blockSignals( true ); 618 mTodoListView->blockSignals( true );
619 if( mDocPrefs ) restoreItemState( mTodoListView->firstChild() ); 619 if( mDocPrefs ) restoreItemState( mTodoListView->firstChild() );
620 mTodoListView->blockSignals( false ); 620 mTodoListView->blockSignals( false );
621 mTodoListView->setFocus(); 621 mTodoListView->setFocus();
622 processSelectionChange(); 622 processSelectionChange();
623} 623}
624 624
625bool KOTodoView::checkTodo( Todo * todo ) 625bool KOTodoView::checkTodo( Todo * todo )
626{ 626{
627 627
628 if ( !KOPrefs::instance()->mShowCompletedTodo && todo->isCompleted() ) 628 if ( !KOPrefs::instance()->mShowCompletedTodo && todo->isCompleted() )
629 return false; 629 return false;
630 if ( KOPrefs::instance()->mHideNonStartedTodos && mNavigator ) { 630 if ( KOPrefs::instance()->mHideNonStartedTodos && mNavigator ) {
631 if ( todo->hasStartDate() ) 631 if ( todo->hasStartDate() )
632 if ( mNavigator->selectedDates().last() < todo->dtStart().date() ) 632 if ( mNavigator->selectedDates().last() < todo->dtStart().date() )
633 return false; 633 return false;
634 if ( todo->hasDueDate() ) 634 if ( todo->hasDueDate() )
635 if ( mNavigator->selectedDates().first() > todo->dtDue().date() ) 635 if ( mNavigator->selectedDates().first() > todo->dtDue().date() )
636 return false; 636 return false;
637 } 637 }
638 return true; 638 return true;
639} 639}
640 640
641void KOTodoView::restoreItemState( QListViewItem *item ) 641void KOTodoView::restoreItemState( QListViewItem *item )
642{ 642{
643 pendingSubtodo = 0; 643 pendingSubtodo = 0;
644 while( item ) { 644 while( item ) {
645 KOTodoViewItem *todoItem = (KOTodoViewItem *)item; 645 KOTodoViewItem *todoItem = (KOTodoViewItem *)item;
646 todoItem->setOpen( mDocPrefs->readBoolEntry( todoItem->todo()->uid() ) ); 646 todoItem->setOpen( mDocPrefs->readBoolEntry( todoItem->todo()->uid() ) );
647 if( item->childCount() > 0 ) restoreItemState( item->firstChild() ); 647 if( item->childCount() > 0 ) restoreItemState( item->firstChild() );
648 item = item->nextSibling(); 648 item = item->nextSibling();
649 } 649 }
650} 650}
651 651
652 652
653QMap<Todo *,KOTodoViewItem *>::ConstIterator 653QMap<Todo *,KOTodoViewItem *>::ConstIterator
654 KOTodoView::insertTodoItem(Todo *todo) 654 KOTodoView::insertTodoItem(Todo *todo)
655{ 655{
656 656
657// kdDebug() << "KOTodoView::insertTodoItem(): " << todo->getSummary() << endl; 657// kdDebug() << "KOTodoView::insertTodoItem(): " << todo->getSummary() << endl;
658 // TODO: Check, if dynmaic cast is necessary 658 // TODO: Check, if dynmaic cast is necessary
659 659
660 pendingSubtodo = 0; 660 pendingSubtodo = 0;
661 Incidence *incidence = todo->relatedTo(); 661 Incidence *incidence = todo->relatedTo();
662 if (incidence && incidence->type() == "Todo") { 662 if (incidence && incidence->type() == "Todo") {
663 Todo *relatedTodo = static_cast<Todo *>(incidence); 663 Todo *relatedTodo = static_cast<Todo *>(incidence);
664 664
665// kdDebug() << " has Related" << endl; 665// kdDebug() << " has Related" << endl;
666 QMap<Todo *,KOTodoViewItem *>::ConstIterator itemIterator; 666 QMap<Todo *,KOTodoViewItem *>::ConstIterator itemIterator;
667 itemIterator = mTodoMap.find(relatedTodo); 667 itemIterator = mTodoMap.find(relatedTodo);
668 if (itemIterator == mTodoMap.end()) { 668 if (itemIterator == mTodoMap.end()) {
669// kdDebug() << " related not yet in list" << endl; 669// kdDebug() << " related not yet in list" << endl;
670 itemIterator = insertTodoItem (relatedTodo); 670 itemIterator = insertTodoItem (relatedTodo);
671 } 671 }
672 // isn't this pretty stupid? We give one Todo to the KOTodoViewItem 672 // isn't this pretty stupid? We give one Todo to the KOTodoViewItem
673 // and one into the map. Sure finding is more easy but why? -zecke 673 // and one into the map. Sure finding is more easy but why? -zecke
674 KOTodoViewItem *todoItem = new KOTodoViewItem(*itemIterator,todo,this); 674 KOTodoViewItem *todoItem = new KOTodoViewItem(*itemIterator,todo,this);
675 return mTodoMap.insert(todo,todoItem); 675 return mTodoMap.insert(todo,todoItem);
676 } else { 676 } else {
677// kdDebug() << " no Related" << endl; 677// kdDebug() << " no Related" << endl;
678 // see above -zecke 678 // see above -zecke
679 KOTodoViewItem *todoItem = new KOTodoViewItem(mTodoListView,todo,this); 679 KOTodoViewItem *todoItem = new KOTodoViewItem(mTodoListView,todo,this);
680 return mTodoMap.insert(todo,todoItem); 680 return mTodoMap.insert(todo,todoItem);
681 } 681 }
682} 682}
683 683
684 684
685void KOTodoView::updateConfig() 685void KOTodoView::updateConfig()
686{ 686{
687 updateView(); 687 updateView();
688 mTodoListView->repaintContents(); 688 mTodoListView->repaintContents();
689} 689}
690 690
691QPtrList<Incidence> KOTodoView::selectedIncidences() 691QPtrList<Incidence> KOTodoView::selectedIncidences()
692{ 692{
693 QPtrList<Incidence> selected; 693 QPtrList<Incidence> selected;
694 694
695 KOTodoViewItem *item = (KOTodoViewItem *)(mTodoListView->selectedItem()); 695 KOTodoViewItem *item = (KOTodoViewItem *)(mTodoListView->selectedItem());
696// if (!item) item = mActiveItem; 696// if (!item) item = mActiveItem;
697 if (item) selected.append(item->todo()); 697 if (item) selected.append(item->todo());
698 698
699 return selected; 699 return selected;
700} 700}
701 701
702QPtrList<Todo> KOTodoView::selectedTodos() 702QPtrList<Todo> KOTodoView::selectedTodos()
703{ 703{
704 QPtrList<Todo> selected; 704 QPtrList<Todo> selected;
705 705
706 KOTodoViewItem *item = (KOTodoViewItem *)(mTodoListView->selectedItem()); 706 KOTodoViewItem *item = (KOTodoViewItem *)(mTodoListView->selectedItem());
707// if (!item) item = mActiveItem; 707// if (!item) item = mActiveItem;
708 if (item) selected.append(item->todo()); 708 if (item) selected.append(item->todo());
709 709
710 return selected; 710 return selected;
711} 711}
712 712
713void KOTodoView::changeEventDisplay(Event *, int) 713void KOTodoView::changeEventDisplay(Event *, int)
714{ 714{
715 updateView(); 715 updateView();
716} 716}
717 717
718void KOTodoView::showDates(const QDate &, const QDate &) 718void KOTodoView::showDates(const QDate &, const QDate &)
719{ 719{
720} 720}
721 721
722void KOTodoView::showEvents(QPtrList<Event>) 722void KOTodoView::showEvents(QPtrList<Event>)
723{ 723{
724 kdDebug() << "KOTodoView::selectEvents(): not yet implemented" << endl; 724 kdDebug() << "KOTodoView::selectEvents(): not yet implemented" << endl;
725} 725}
726 726
727void KOTodoView::printPreview(CalPrinter *calPrinter, const QDate &fd, 727void KOTodoView::printPreview(CalPrinter *calPrinter, const QDate &fd,
728 const QDate &td) 728 const QDate &td)
729{ 729{
730#ifndef KORG_NOPRINTER 730#ifndef KORG_NOPRINTER
731 calPrinter->preview(CalPrinter::Todolist, fd, td); 731 calPrinter->preview(CalPrinter::Todolist, fd, td);
732#endif 732#endif
733} 733}
734 734
735void KOTodoView::editItem(QListViewItem *item ) 735void KOTodoView::editItem(QListViewItem *item )
736{ 736{
737 // qDebug("editItem(QListViewItem *item ) "); 737 // qDebug("editItem(QListViewItem *item ) ");
738 emit editTodoSignal(((KOTodoViewItem *)item)->todo()); 738 emit editTodoSignal(((KOTodoViewItem *)item)->todo());
739} 739}
740 740
741void KOTodoView::showItem(QListViewItem *item,const QPoint &,int) 741void KOTodoView::showItem(QListViewItem *item,const QPoint &,int)
742{ 742{
743 emit showTodoSignal(((KOTodoViewItem *)item)->todo()); 743 emit showTodoSignal(((KOTodoViewItem *)item)->todo());
744} 744}
745 745
746void KOTodoView::popupMenu(QListViewItem *item,const QPoint &,int column) 746void KOTodoView::popupMenu(QListViewItem *item,const QPoint &,int column)
747{ 747{
748 pendingSubtodo = 0; 748 pendingSubtodo = 0;
749 mActiveItem = (KOTodoViewItem *)item; 749 mActiveItem = (KOTodoViewItem *)item;
750 if (item) { 750 if (item) {
751 switch (column){ 751 switch (column){
752 case 1: 752 case 1:
753 mPriorityPopupMenu->popup(QCursor::pos ()); break; 753 mPriorityPopupMenu->popup(QCursor::pos ()); break;
754 case 2: 754 case 2:
755 mPercentageCompletedPopupMenu->popup(QCursor::pos ()); break; 755 mPercentageCompletedPopupMenu->popup(QCursor::pos ()); break;
756 case 3: 756 case 3:
757 moveTodo(); 757 moveTodo();
758 break; 758 break;
759 case 8: 759 case 8:
760 getCategoryPopupMenu((KOTodoViewItem *)item)->popup(QCursor::pos ()); break; 760 getCategoryPopupMenu((KOTodoViewItem *)item)->popup(QCursor::pos ()); break;
761 default: 761 default:
762 mItemPopupMenu->popup(QCursor::pos()); 762 mItemPopupMenu->popup(QCursor::pos());
763 } 763 }
764 } else mPopupMenu->popup(QCursor::pos()); 764 } else mPopupMenu->popup(QCursor::pos());
765} 765}
766void KOTodoView::newTodo() 766void KOTodoView::newTodo()
767{ 767{
768 emit newTodoSignal(); 768 emit newTodoSignal();
769} 769}
770 770
771void KOTodoView::newSubTodo() 771void KOTodoView::newSubTodo()
772{ 772{
773 if (mActiveItem) { 773 if (mActiveItem) {
774 emit newSubTodoSignal(mActiveItem->todo()); 774 emit newSubTodoSignal(mActiveItem->todo());
775 } 775 }
776} 776}
777void KOTodoView::unparentTodo() 777void KOTodoView::unparentTodo()
778{ 778{
779 if (mActiveItem) { 779 if (mActiveItem) {
780 emit unparentTodoSignal(mActiveItem->todo()); 780 emit unparentTodoSignal(mActiveItem->todo());
781 } 781 }
782} 782}
783 783
784void KOTodoView::reparentTodo() 784void KOTodoView::reparentTodo()
785{ 785{
786 if (mActiveItem) { 786 if (mActiveItem) {
787 qDebug("KOTodoView::reparentTodo() "); 787 qDebug("KOTodoView::reparentTodo() ");
788 topLevelWidget()->setCaption(i18n("Click on new parent item")); 788 topLevelWidget()->setCaption(i18n("Click on new parent item"));
789 pendingSubtodo = mActiveItem; 789 pendingSubtodo = mActiveItem;
790 } 790 }
791} 791}
792void KOTodoView::editTodo() 792void KOTodoView::editTodo()
793{ 793{
794 if (mActiveItem) { 794 if (mActiveItem) {
795 emit editTodoSignal(mActiveItem->todo()); 795 emit editTodoSignal(mActiveItem->todo());
796 } 796 }
797} 797}
798void KOTodoView::cloneTodo() 798void KOTodoView::cloneTodo()
799{ 799{
800 if (mActiveItem) { 800 if (mActiveItem) {
801 emit cloneTodoSignal((Incidence*)mActiveItem->todo()); 801 emit cloneTodoSignal((Incidence*)mActiveItem->todo());
802 } 802 }
803} 803}
804void KOTodoView::cancelTodo() 804void KOTodoView::cancelTodo()
805{ 805{
806 if (mActiveItem) { 806 if (mActiveItem) {
807 emit cancelTodoSignal((Incidence*)mActiveItem->todo()); 807 emit cancelTodoSignal((Incidence*)mActiveItem->todo());
808 } 808 }
809} 809}
810void KOTodoView::moveTodo() 810void KOTodoView::moveTodo()
811{ 811{
812 if (mActiveItem) { 812 if (mActiveItem) {
813 emit moveTodoSignal((Incidence*)mActiveItem->todo()); 813 emit moveTodoSignal((Incidence*)mActiveItem->todo());
814 } 814 }
815} 815}
816void KOTodoView::beamTodo() 816void KOTodoView::beamTodo()
817{ 817{
818 if (mActiveItem) { 818 if (mActiveItem) {
819 emit beamTodoSignal((Incidence*)mActiveItem->todo()); 819 emit beamTodoSignal((Incidence*)mActiveItem->todo());
820 } 820 }
821} 821}
822 822
823 823
824void KOTodoView::showTodo() 824void KOTodoView::showTodo()
825{ 825{
826 if (mActiveItem) { 826 if (mActiveItem) {
827 emit showTodoSignal(mActiveItem->todo()); 827 emit showTodoSignal(mActiveItem->todo());
828 } 828 }
829} 829}
830 830
831void KOTodoView::deleteTodo() 831void KOTodoView::deleteTodo()
832{ 832{
833 if (mActiveItem) { 833 if (mActiveItem) {
834 emit deleteTodoSignal(mActiveItem->todo()); 834 emit deleteTodoSignal(mActiveItem->todo());
835 } 835 }
836} 836}
837 837
838void KOTodoView::setNewPriority(int index) 838void KOTodoView::setNewPriority(int index)
839{ 839{
840 if (mActiveItem && !mActiveItem->todo()->isReadOnly ()) { 840 if (mActiveItem && !mActiveItem->todo()->isReadOnly ()) {
841 mActiveItem->todo()->setPriority(mPriority[index]); 841 mActiveItem->todo()->setPriority(mPriority[index]);
842 mActiveItem->construct(); 842 mActiveItem->construct();
843 todoModified (mActiveItem->todo(), KOGlobals::PRIORITY_MODIFIED); 843 todoModified (mActiveItem->todo(), KOGlobals::PRIORITY_MODIFIED);
844 mActiveItem->todo()->setRevision( mActiveItem->todo()->revision()+1 ); 844 mActiveItem->todo()->setRevision( mActiveItem->todo()->revision()+1 );
845 } 845 }
846} 846}
847 847
848void KOTodoView::setNewPercentage(int index) 848void KOTodoView::setNewPercentage(int index)
849{ 849{
850 if (mActiveItem && !mActiveItem->todo()->isReadOnly ()) { 850 if (mActiveItem && !mActiveItem->todo()->isReadOnly ()) {
851 if (mPercentage[index] == 100) { 851 if (mPercentage[index] == 100) {
852 mActiveItem->todo()->setCompleted(QDateTime::currentDateTime()); 852 mActiveItem->todo()->setCompleted(QDateTime::currentDateTime());
853 } else { 853 } else {
854 mActiveItem->todo()->setCompleted(false); 854 mActiveItem->todo()->setCompleted(false);
855 } 855 }
856 mActiveItem->todo()->setPercentComplete(mPercentage[index]); 856 mActiveItem->todo()->setPercentComplete(mPercentage[index]);
857 mActiveItem->construct(); 857 mActiveItem->construct();
858 todoModified (mActiveItem->todo (), KOGlobals::COMPLETION_MODIFIED); 858 todoModified (mActiveItem->todo (), KOGlobals::COMPLETION_MODIFIED);
859 mActiveItem->todo()->setRevision( mActiveItem->todo()->revision()+1 ); 859 mActiveItem->todo()->setRevision( mActiveItem->todo()->revision()+1 );
860 } 860 }
861} 861}
862 862
863 863
864QPopupMenu * KOTodoView::getCategoryPopupMenu (KOTodoViewItem *todoItem) 864QPopupMenu * KOTodoView::getCategoryPopupMenu (KOTodoViewItem *todoItem)
865{ 865{
866 QPopupMenu* tempMenu = new QPopupMenu (this); 866 QPopupMenu* tempMenu = new QPopupMenu (this);
867 QStringList checkedCategories = todoItem->todo()->categories (); 867 QStringList checkedCategories = todoItem->todo()->categories ();
868 868
869 tempMenu->setCheckable (true); 869 tempMenu->setCheckable (true);
870 for (QStringList::Iterator it = KOPrefs::instance()->mCustomCategories.begin (); 870 for (QStringList::Iterator it = KOPrefs::instance()->mCustomCategories.begin ();
871 it != KOPrefs::instance()->mCustomCategories.end (); 871 it != KOPrefs::instance()->mCustomCategories.end ();
872 ++it) { 872 ++it) {
873 int index = tempMenu->insertItem (*it); 873 int index = tempMenu->insertItem (*it);
874 mCategory[index] = *it; 874 mCategory[index] = *it;
875 if (checkedCategories.find (*it) != checkedCategories.end ()) tempMenu->setItemChecked (index, true); 875 if (checkedCategories.find (*it) != checkedCategories.end ()) tempMenu->setItemChecked (index, true);
876 } 876 }
877 877
878 connect (tempMenu, SIGNAL (activated (int)), SLOT (changedCategories (int))); 878 connect (tempMenu, SIGNAL (activated (int)), SLOT (changedCategories (int)));
879 return tempMenu; 879 return tempMenu;
880 880
881 881
882} 882}
883void KOTodoView::changedCategories(int index) 883void KOTodoView::changedCategories(int index)
884{ 884{
885 if (mActiveItem && !mActiveItem->todo()->isReadOnly ()) { 885 if (mActiveItem && !mActiveItem->todo()->isReadOnly ()) {
886 QStringList categories = mActiveItem->todo()->categories (); 886 QStringList categories = mActiveItem->todo()->categories ();
887 if (categories.find (mCategory[index]) != categories.end ()) 887 if (categories.find (mCategory[index]) != categories.end ())
888 categories.remove (mCategory[index]); 888 categories.remove (mCategory[index]);
889 else 889 else
890 categories.insert (categories.end(), mCategory[index]); 890 categories.insert (categories.end(), mCategory[index]);
891 categories.sort (); 891 categories.sort ();
892 mActiveItem->todo()->setCategories (categories); 892 mActiveItem->todo()->setCategories (categories);
893 mActiveItem->construct(); 893 mActiveItem->construct();
894 mActiveItem->todo()->setRevision( mActiveItem->todo()->revision()+1 ); 894 mActiveItem->todo()->setRevision( mActiveItem->todo()->revision()+1 );
895 todoModified (mActiveItem->todo (), KOGlobals::CATEGORY_MODIFIED); 895 todoModified (mActiveItem->todo (), KOGlobals::CATEGORY_MODIFIED);
896 } 896 }
897} 897}
898void KOTodoView::itemDoubleClicked(QListViewItem *item) 898void KOTodoView::itemDoubleClicked(QListViewItem *item)
899{ 899{
900 if ( pendingSubtodo != 0 ) { 900 if ( pendingSubtodo != 0 ) {
901 topLevelWidget()->setCaption(i18n("Reparenting aborted!")); 901 topLevelWidget()->setCaption(i18n("Reparenting aborted!"));
902 } 902 }
903 pendingSubtodo = 0; 903 pendingSubtodo = 0;
904 if (!item) { 904 if (!item) {
905 newTodo(); 905 newTodo();
906 return; 906 return;
907 } 907 }
908 if ( KOPrefs::instance()->mEditOnDoubleClick ) 908 if ( KOPrefs::instance()->mEditOnDoubleClick )
909 editItem( item ); 909 editItem( item );
910 else 910 else
911 showItem( item , QPoint(), 0 ); 911 showItem( item , QPoint(), 0 );
912} 912}
913void KOTodoView::itemClicked(QListViewItem *item) 913void KOTodoView::itemClicked(QListViewItem *item)
914{ 914{
915 915
916 if (!item) { 916 if (!item) {
917 if ( pendingSubtodo != 0 ) { 917 if ( pendingSubtodo != 0 ) {
918 topLevelWidget()->setCaption(i18n("Reparenting aborted!")); 918 topLevelWidget()->setCaption(i18n("Reparenting aborted!"));
919 } 919 }
920 pendingSubtodo = 0; 920 pendingSubtodo = 0;
921 return; 921 return;
922 } 922 }
923 KOTodoViewItem *todoItem = (KOTodoViewItem *)item; 923 KOTodoViewItem *todoItem = (KOTodoViewItem *)item;
924 if ( pendingSubtodo != 0 ) { 924 if ( pendingSubtodo != 0 ) {
925 bool allowReparent = true; 925 bool allowReparent = true;
926 QListViewItem *par = item; 926 QListViewItem *par = item;
927 while ( par ) { 927 while ( par ) {
928 if ( par == pendingSubtodo ) { 928 if ( par == pendingSubtodo ) {
929 allowReparent = false; 929 allowReparent = false;
930 break; 930 break;
931 } 931 }
932 par = par->parent(); 932 par = par->parent();
933 } 933 }
934 if ( !allowReparent ) { 934 if ( !allowReparent ) {
935 topLevelWidget()->setCaption(i18n("Recursive reparenting not possible!")); 935 topLevelWidget()->setCaption(i18n("Recursive reparenting not possible!"));
936 qDebug("Recursive reparenting not possible "); 936 qDebug("Recursive reparenting not possible ");
937 pendingSubtodo = 0; 937 pendingSubtodo = 0;
938 } else { 938 } else {
939 Todo* newParent = todoItem->todo(); 939 Todo* newParent = todoItem->todo();
940 Todo* newSub = pendingSubtodo->todo(); 940 Todo* newSub = pendingSubtodo->todo();
941 pendingSubtodo = 0; 941 pendingSubtodo = 0;
942 emit reparentTodoSignal( newParent,newSub ); 942 emit reparentTodoSignal( newParent,newSub );
943 return; 943 return;
944 } 944 }
945 } 945 }
946 int completed = todoItem->todo()->isCompleted(); // Completed or not? 946 int completed = todoItem->todo()->isCompleted(); // Completed or not?
947 947
948 if (todoItem->isOn()) { 948 if (todoItem->isOn()) {
949 if (!completed) { 949 if (!completed) {
950 todoItem->todo()->setCompleted(QDateTime::currentDateTime()); 950 todoItem->todo()->setCompleted(QDateTime::currentDateTime());
951 } 951 }
952 } else { 952 } else {
953 if (completed) { 953 if (completed) {
954 todoItem->todo()->setCompleted(false); 954 todoItem->todo()->setCompleted(false);
955 } 955 }
956 } 956 }
957} 957}
958 958
959void KOTodoView::setDocumentId( const QString &id ) 959void KOTodoView::setDocumentId( const QString &id )
960{ 960{
961 kdDebug() << "KOTodoView::setDocumentId()" << endl; 961 kdDebug() << "KOTodoView::setDocumentId()" << endl;
962 962
963 mDocPrefs->setDoc( id ); 963 mDocPrefs->setDoc( id );
964} 964}
965 965
966void KOTodoView::itemStateChanged( QListViewItem *item ) 966void KOTodoView::itemStateChanged( QListViewItem *item )
967{ 967{
968 if (!item) return; 968 if (!item) return;
969 969
970 KOTodoViewItem *todoItem = (KOTodoViewItem *)item; 970 KOTodoViewItem *todoItem = (KOTodoViewItem *)item;
971 971
972// kdDebug() << "KOTodoView::itemStateChanged(): " << todoItem->todo()->summary() << endl; 972// kdDebug() << "KOTodoView::itemStateChanged(): " << todoItem->todo()->summary() << endl;
973 973
974 if( mDocPrefs ) mDocPrefs->writeEntry( todoItem->todo()->uid(), todoItem->isOpen() ); 974 if( mDocPrefs ) mDocPrefs->writeEntry( todoItem->todo()->uid(), todoItem->isOpen() );
975} 975}
976 976
977void KOTodoView::saveLayout(KConfig *config, const QString &group) const 977void KOTodoView::saveLayout(KConfig *config, const QString &group) const
978{ 978{
979 mTodoListView->saveLayout(config,group); 979 mTodoListView->saveLayout(config,group);
980} 980}
981 981
982void KOTodoView::restoreLayout(KConfig *config, const QString &group) 982void KOTodoView::restoreLayout(KConfig *config, const QString &group)
983{ 983{
984 mTodoListView->restoreLayout(config,group); 984 mTodoListView->restoreLayout(config,group);
985} 985}
986 986
987void KOTodoView::processSelectionChange() 987void KOTodoView::processSelectionChange()
988{ 988{
989// kdDebug() << "KOTodoView::processSelectionChange()" << endl; 989// kdDebug() << "KOTodoView::processSelectionChange()" << endl;
990 990
991 KOTodoViewItem *item = 991 KOTodoViewItem *item =
992 static_cast<KOTodoViewItem *>( mTodoListView->selectedItem() ); 992 static_cast<KOTodoViewItem *>( mTodoListView->selectedItem() );
993 993
994 if ( !item ) { 994 if ( !item ) {
995 emit incidenceSelected( 0 ); 995 emit incidenceSelected( 0 );
996 } else { 996 } else {
997 emit incidenceSelected( item->todo() ); 997 emit incidenceSelected( item->todo() );
998 } 998 }
999} 999}
1000 1000
1001void KOTodoView::modified(bool b) 1001void KOTodoView::modified(bool b)
1002{ 1002{
1003 emit isModified(b); 1003 emit isModified(b);
1004} 1004}
1005void KOTodoView::setTodoModified( Todo* todo ) 1005void KOTodoView::setTodoModified( Todo* todo )
1006{ 1006{
1007 todoModified( todo, KOGlobals::UNKNOWN_MODIFIED ); 1007 todoModified( todo, KOGlobals::UNKNOWN_MODIFIED );
1008} 1008}
1009void KOTodoView::clearSelection() 1009void KOTodoView::clearSelection()
1010{ 1010{
1011 mTodoListView->selectAll( false ); 1011 mTodoListView->selectAll( false );
1012} 1012}
1013void KOTodoView::setAllOpen() 1013void KOTodoView::setAllOpen()
1014{ 1014{
1015 if ( isFlatDisplay ) { 1015 if ( isFlatDisplay ) {
1016 isFlatDisplay = false; 1016 isFlatDisplay = false;
1017 mPopupMenu->setItemChecked( 8,false ); 1017 mPopupMenu->setItemChecked( 8,false );
1018 updateView(); 1018 updateView();
1019 } 1019 }
1020 setOpen(mTodoListView->firstChild(), true); 1020 setOpen(mTodoListView->firstChild(), true);
1021} 1021}
1022void KOTodoView::setAllClose() 1022void KOTodoView::setAllClose()
1023{ 1023{
1024 if ( isFlatDisplay ) { 1024 if ( isFlatDisplay ) {
1025 isFlatDisplay = false; 1025 isFlatDisplay = false;
1026 mPopupMenu->setItemChecked( 8,false ); 1026 mPopupMenu->setItemChecked( 8,false );
1027 updateView(); 1027 updateView();
1028 } 1028 }
1029 setOpen(mTodoListView->firstChild(), false); 1029 setOpen(mTodoListView->firstChild(), false);
1030} 1030}
1031void KOTodoView::setOpen( QListViewItem* item, bool setOpenI) 1031void KOTodoView::setOpen( QListViewItem* item, bool setOpenI)
1032{ 1032{
1033 1033
1034 while ( item ) { 1034 while ( item ) {
1035 setOpen( item->firstChild(), setOpenI ); 1035 setOpen( item->firstChild(), setOpenI );
1036 item->setOpen( setOpenI ); 1036 item->setOpen( setOpenI );
1037 item = item->nextSibling(); 1037 item = item->nextSibling();
1038 } 1038 }
1039} 1039}
1040 1040
1041void KOTodoView::setAllFlat() 1041void KOTodoView::setAllFlat()
1042{ 1042{
1043 if ( isFlatDisplay ) {
1044 isFlatDisplay = false;
1045 mPopupMenu->setItemChecked( 8,false );
1046 updateView();
1047 return;
1048 }
1043 pendingSubtodo = 0; 1049 pendingSubtodo = 0;
1044 if ( mBlockUpdate ) { 1050 if ( mBlockUpdate ) {
1045 return; 1051 return;
1046 } 1052 }
1047 mPopupMenu->setItemChecked( 8,true ); 1053 mPopupMenu->setItemChecked( 8,true );
1048 isFlatDisplay = true; 1054 isFlatDisplay = true;
1049 QPtrList<Todo> todoList = calendar()->todos(); 1055 QPtrList<Todo> todoList = calendar()->todos();
1050 mTodoMap.clear(); 1056 mTodoMap.clear();
1051 mTodoListView->clear(); 1057 mTodoListView->clear();
1052 Todo *todo; 1058 Todo *todo;
1053 for(todo = todoList.first(); todo; todo = todoList.next()) { 1059 for(todo = todoList.first(); todo; todo = todoList.next()) {
1054 KOTodoViewItem *todoItem = new KOTodoViewItem(mTodoListView,todo,this); 1060 KOTodoViewItem *todoItem = new KOTodoViewItem(mTodoListView,todo,this);
1055 mTodoMap.insert(todo,todoItem); 1061 mTodoMap.insert(todo,todoItem);
1056 } 1062 }
1057 mTodoListView->setFocus(); 1063 mTodoListView->setFocus();
1058 processSelectionChange(); 1064 processSelectionChange();
1059} 1065}
1060 1066
1061void KOTodoView::purgeCompleted() 1067void KOTodoView::purgeCompleted()
1062{ 1068{
1063 emit purgeCompletedSignal(); 1069 emit purgeCompletedSignal();
1064} 1070}
1065void KOTodoView::toggleQuickTodo() 1071void KOTodoView::toggleQuickTodo()
1066{ 1072{
1067 if ( mQuickAdd->isVisible() ) { 1073 if ( mQuickAdd->isVisible() ) {
1068 mQuickAdd->hide(); 1074 mQuickAdd->hide();
1069 KOPrefs::instance()->mEnableQuickTodo = false; 1075 KOPrefs::instance()->mEnableQuickTodo = false;
1070 } 1076 }
1071 else { 1077 else {
1072 mQuickAdd->show(); 1078 mQuickAdd->show();
1073 KOPrefs::instance()->mEnableQuickTodo = true; 1079 KOPrefs::instance()->mEnableQuickTodo = true;
1074 } 1080 }
1075 mPopupMenu->setItemChecked(4,KOPrefs::instance()->mEnableQuickTodo); 1081 mPopupMenu->setItemChecked(4,KOPrefs::instance()->mEnableQuickTodo);
1076 mItemPopupMenu->setItemChecked( 34 , KOPrefs::instance()->mEnableQuickTodo ); 1082 mItemPopupMenu->setItemChecked( 34 , KOPrefs::instance()->mEnableQuickTodo );
1077} 1083}
1078 1084
1079void KOTodoView::toggleRunning() 1085void KOTodoView::toggleRunning()
1080{ 1086{
1081 KOPrefs::instance()->mHideNonStartedTodos = !KOPrefs::instance()->mHideNonStartedTodos; 1087 KOPrefs::instance()->mHideNonStartedTodos = !KOPrefs::instance()->mHideNonStartedTodos;
1082 mPopupMenu->setItemChecked(5,KOPrefs::instance()->mHideNonStartedTodos); 1088 mPopupMenu->setItemChecked(5,KOPrefs::instance()->mHideNonStartedTodos);
1083 mItemPopupMenu->setItemChecked( 35 , KOPrefs::instance()->mHideNonStartedTodos ); 1089 mItemPopupMenu->setItemChecked( 35 , KOPrefs::instance()->mHideNonStartedTodos );
1084 updateView(); 1090 updateView();
1085} 1091}
1086 1092
1087void KOTodoView::toggleCompleted() 1093void KOTodoView::toggleCompleted()
1088{ 1094{
1089 KOPrefs::instance()->mShowCompletedTodo = !KOPrefs::instance()->mShowCompletedTodo; 1095 KOPrefs::instance()->mShowCompletedTodo = !KOPrefs::instance()->mShowCompletedTodo;
1090 mPopupMenu->setItemChecked( 3,KOPrefs::instance()->mShowCompletedTodo ); 1096 mPopupMenu->setItemChecked( 3,KOPrefs::instance()->mShowCompletedTodo );
1091 mItemPopupMenu->setItemChecked( 33 , KOPrefs::instance()->mShowCompletedTodo ); 1097 mItemPopupMenu->setItemChecked( 33 , KOPrefs::instance()->mShowCompletedTodo );
1092 updateView(); 1098 updateView();
1093} 1099}
1094 1100
1095void KOTodoView::addQuickTodo() 1101void KOTodoView::addQuickTodo()
1096{ 1102{
1097 Todo *todo = new Todo(); 1103 Todo *todo = new Todo();
1098 todo->setSummary(mQuickAdd->text()); 1104 todo->setSummary(mQuickAdd->text());
1099 todo->setOrganizer(KOPrefs::instance()->email()); 1105 todo->setOrganizer(KOPrefs::instance()->email());
1100 CalFilter * cf = mCalendar->filter(); 1106 CalFilter * cf = mCalendar->filter();
1101 if ( cf ) { 1107 if ( cf ) {
1102 if ( cf->isEnabled()&& cf->showCategories()) { 1108 if ( cf->isEnabled()&& cf->showCategories()) {
1103 todo->setCategories(cf->categoryList()); 1109 todo->setCategories(cf->categoryList());
1104 } 1110 }
1105 if ( cf->isEnabled() ) 1111 if ( cf->isEnabled() )
1106 todo->setSecrecy( cf->getSecrecy()); 1112 todo->setSecrecy( cf->getSecrecy());
1107 } 1113 }
1108 mCalendar->addTodo(todo); 1114 mCalendar->addTodo(todo);
1109 mQuickAdd->setText(""); 1115 mQuickAdd->setText("");
1110 todoModified (todo, KOGlobals::EVENTADDED ); 1116 todoModified (todo, KOGlobals::EVENTADDED );
1111 updateView(); 1117 updateView();
1112} 1118}
1113void KOTodoView::keyPressEvent ( QKeyEvent * e ) 1119void KOTodoView::keyPressEvent ( QKeyEvent * e )
1114{ 1120{
1115 // e->ignore(); 1121 // e->ignore();
1116 //return; 1122 //return;
1117 //qDebug("KOTodoView::keyPressEvent "); 1123 //qDebug("KOTodoView::keyPressEvent ");
1118 switch ( e->key() ) { 1124 switch ( e->key() ) {
1119 case Qt::Key_Down: 1125 case Qt::Key_Down:
1120 case Qt::Key_Up: 1126 case Qt::Key_Up:
1121 QWidget::keyPressEvent ( e ); 1127 QWidget::keyPressEvent ( e );
1122 break; 1128 break;
1123 1129
1124 case Qt::Key_Q: 1130 case Qt::Key_Q:
1125 toggleQuickTodo(); 1131 toggleQuickTodo();
1126 break; 1132 break;
1127 case Qt::Key_U: 1133 case Qt::Key_U:
1128 if ( e->state() == Qt::ControlButton|| e->state() == Qt::ShiftButton ) { 1134 if ( e->state() == Qt::ControlButton|| e->state() == Qt::ShiftButton ) {
1129 mActiveItem = (KOTodoViewItem*)mTodoListView->currentItem(); 1135 mActiveItem = (KOTodoViewItem*)mTodoListView->currentItem();
1130 unparentTodo(); 1136 unparentTodo();
1131 e->accept(); 1137 e->accept();
1132 } else 1138 } else
1133 e->ignore(); 1139 e->ignore();
1134 break; 1140 break;
1135 case Qt::Key_S: 1141 case Qt::Key_S:
1136 if ( e->state() == Qt::ControlButton ) { 1142 if ( e->state() == Qt::ControlButton ) {
1137 e->ignore(); 1143 e->ignore();
1138 break; 1144 break;
1139 } 1145 }
1140 if ( e->state() == Qt::ShiftButton ) { 1146 if ( e->state() == Qt::ShiftButton ) {
1141 mActiveItem = (KOTodoViewItem*)mTodoListView->currentItem(); 1147 mActiveItem = (KOTodoViewItem*)mTodoListView->currentItem();
1142 reparentTodo(); 1148 reparentTodo();
1143 e->accept(); 1149 e->accept();
1144 } else 1150 } else
1145 e->ignore(); 1151 e->ignore();
1146 break; 1152 break;
1147 case Qt::Key_P: 1153 case Qt::Key_P:
1148 if ( e->state() == Qt::ControlButton|| e->state() == Qt::ShiftButton ) { 1154 if ( e->state() == Qt::ControlButton|| e->state() == Qt::ShiftButton ) {
1149 mActiveItem = (KOTodoViewItem*)mTodoListView->currentItem(); 1155 mActiveItem = (KOTodoViewItem*)mTodoListView->currentItem();
1150 if ( pendingSubtodo ) 1156 if ( pendingSubtodo )
1151 itemClicked(mActiveItem); 1157 itemClicked(mActiveItem);
1152 e->accept(); 1158 e->accept();
1153 } else 1159 } else
1154 e->ignore(); 1160 e->ignore();
1155 break; 1161 break;
1156 case Qt::Key_Escape: 1162 case Qt::Key_Escape:
1157 if ( pendingSubtodo ) { 1163 if ( pendingSubtodo ) {
1158 itemClicked(0); 1164 itemClicked(0);
1159 e->accept(); 1165 e->accept();
1160 } else 1166 } else
1161 e->ignore(); 1167 e->ignore();
1162 break; 1168 break;
1163 default: 1169 default:
1164 e->ignore(); 1170 e->ignore();
1165 } 1171 }
1166 1172
1167 if ( true ) { 1173 if ( true ) {
1168 if ( e->key() == Qt::Key_I ) { 1174 if ( e->key() == Qt::Key_I ) {
1169 KOTodoViewItem*cn = (KOTodoViewItem*)mTodoListView->currentItem(); 1175 KOTodoViewItem*cn = (KOTodoViewItem*)mTodoListView->currentItem();
1170 if ( cn ) { 1176 if ( cn ) {
1171 mActiveItem = cn; 1177 mActiveItem = cn;
1172 KOTodoViewItem* ci = (KOTodoViewItem*)( cn ); 1178 KOTodoViewItem* ci = (KOTodoViewItem*)( cn );
1173 if ( ci ){ 1179 if ( ci ){
1174 showTodo(); 1180 showTodo();
1175 cn = (KOTodoViewItem*)cn->itemBelow(); 1181 cn = (KOTodoViewItem*)cn->itemBelow();
1176 if ( cn ) { 1182 if ( cn ) {
1177 mTodoListView->setCurrentItem ( cn ); 1183 mTodoListView->setCurrentItem ( cn );
1178 mTodoListView->ensureItemVisible ( cn ); 1184 mTodoListView->ensureItemVisible ( cn );
1179 } 1185 }
1180 1186
1181 } 1187 }
1182 } 1188 }
1183 e->accept(); 1189 e->accept();
1184 1190
1185 } 1191 }
1186 1192
1187 } 1193 }
1188 1194
1189} 1195}
1190void KOTodoView::updateTodo( Todo * t, int type ) 1196void KOTodoView::updateTodo( Todo * t, int type )
1191{ 1197{
1192 if ( mBlockUpdate) 1198 if ( mBlockUpdate)
1193 return; 1199 return;
1194 1200
1195 QMap<Todo *,KOTodoViewItem *>::ConstIterator itemIterator; 1201 QMap<Todo *,KOTodoViewItem *>::ConstIterator itemIterator;
1196 itemIterator = mTodoMap.find(t); 1202 itemIterator = mTodoMap.find(t);
1197 if (itemIterator != mTodoMap.end()) { 1203 if (itemIterator != mTodoMap.end()) {
1198 (*itemIterator)->construct(); 1204 (*itemIterator)->construct();
1199 } else { 1205 } else {
1200 if ( type == KOGlobals::EVENTADDED ) { 1206 if ( type == KOGlobals::EVENTADDED ) {
1201 insertTodoItem( t ); 1207 insertTodoItem( t );
1202 } 1208 }
1203 } 1209 }
1204 1210
1205} 1211}
1206 1212
1207void KOTodoView::todoModified(Todo * t , int p ) 1213void KOTodoView::todoModified(Todo * t , int p )
1208{ 1214{
1209 mBlockUpdate = true; 1215 mBlockUpdate = true;
1210 emit todoModifiedSignal ( t, p ); 1216 emit todoModifiedSignal ( t, p );
1211 mBlockUpdate = false; 1217 mBlockUpdate = false;
1212} 1218}