summaryrefslogtreecommitdiffabout
authorzautrix <zautrix>2005-04-01 23:20:35 (UTC)
committer zautrix <zautrix>2005-04-01 23:20:35 (UTC)
commit7aefe488d1fe0c34cf29460f48a9a97d632f615e (patch) (unidiff)
tree74428992c61546dfab1f4e966b9910f8cb5e8bde
parent02bdd5a73feb7bd2431c5492c7bbf663f28efbd8 (diff)
downloadkdepimpi-7aefe488d1fe0c34cf29460f48a9a97d632f615e.zip
kdepimpi-7aefe488d1fe0c34cf29460f48a9a97d632f615e.tar.gz
kdepimpi-7aefe488d1fe0c34cf29460f48a9a97d632f615e.tar.bz2
nf
Diffstat (more/less context) (ignore whitespace changes)
-rw-r--r--korganizer/koagenda.cpp3
1 files changed, 2 insertions, 1 deletions
diff --git a/korganizer/koagenda.cpp b/korganizer/koagenda.cpp
index 9720f43..deadfc9 100644
--- a/korganizer/koagenda.cpp
+++ b/korganizer/koagenda.cpp
@@ -1,1282 +1,1283 @@
1/* 1/*
2 This file is part of KOrganizer. 2 This file is part of KOrganizer.
3 Copyright (c) 2001 Cornelius Schumacher <schumacher@kde.org> 3 Copyright (c) 2001 Cornelius Schumacher <schumacher@kde.org>
4 4
5 Marcus Bains line. 5 Marcus Bains line.
6 Copyright (c) 2001 Ali Rahimi 6 Copyright (c) 2001 Ali Rahimi
7 7
8 This program is free software; you can redistribute it and/or modify 8 This program is free software; you can redistribute it and/or modify
9 it under the terms of the GNU General Public License as published by 9 it under the terms of the GNU General Public License as published by
10 the Free Software Foundation; either version 2 of the License, or 10 the Free Software Foundation; either version 2 of the License, or
11 (at your option) any later version. 11 (at your option) any later version.
12 12
13 This program is distributed in the hope that it will be useful, 13 This program is distributed in the hope that it will be useful,
14 but WITHOUT ANY WARRANTY; without even the implied warranty of 14 but WITHOUT ANY WARRANTY; without even the implied warranty of
15 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 15 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16 GNU General Public License for more details. 16 GNU General Public License for more details.
17 17
18 You should have received a copy of the GNU General Public License 18 You should have received a copy of the GNU General Public License
19 along with this program; if not, write to the Free Software 19 along with this program; if not, write to the Free Software
20 Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. 20 Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
21 21
22 As a special exception, permission is given to link this program 22 As a special exception, permission is given to link this program
23 with any edition of Qt, and distribute the resulting executable, 23 with any edition of Qt, and distribute the resulting executable,
24 without including the source code for Qt in the source distribution. 24 without including the source code for Qt in the source distribution.
25*/ 25*/
26 26
27#ifndef _WIN32_ 27#ifndef _WIN32_
28#define protected public 28#define protected public
29#include <qwidget.h> 29#include <qwidget.h>
30#undef protected 30#undef protected
31#endif 31#endif
32#include <qintdict.h> 32#include <qintdict.h>
33#include <qdatetime.h> 33#include <qdatetime.h>
34#include <qapplication.h> 34#include <qapplication.h>
35#include <qpopupmenu.h> 35#include <qpopupmenu.h>
36#include <qcursor.h> 36#include <qcursor.h>
37#include <qpainter.h> 37#include <qpainter.h>
38 38
39#include <kdebug.h> 39#include <kdebug.h>
40#include <klocale.h> 40#include <klocale.h>
41#include <kiconloader.h> 41#include <kiconloader.h>
42#include <kglobal.h> 42#include <kglobal.h>
43 43
44#include "koagendaitem.h" 44#include "koagendaitem.h"
45#include "koprefs.h" 45#include "koprefs.h"
46#include "koglobals.h" 46#include "koglobals.h"
47 47
48#include "koagenda.h" 48#include "koagenda.h"
49 49
50#include <libkcal/event.h> 50#include <libkcal/event.h>
51#include <libkcal/todo.h> 51#include <libkcal/todo.h>
52 52
53#ifndef DESKTOP_VERSION 53#ifndef DESKTOP_VERSION
54#include <qpe/qpeapplication.h> 54#include <qpe/qpeapplication.h>
55#endif 55#endif
56 56
57//extern bool globalFlagBlockPainting; 57//extern bool globalFlagBlockPainting;
58extern int globalFlagBlockAgenda; 58extern int globalFlagBlockAgenda;
59extern int globalFlagBlockAgendaItemPaint; 59extern int globalFlagBlockAgendaItemPaint;
60extern int globalFlagBlockAgendaItemUpdate; 60extern int globalFlagBlockAgendaItemUpdate;
61extern int globalFlagBlockStartup; 61extern int globalFlagBlockStartup;
62 62
63//////////////////////////////////////////////////////////////////////////// 63////////////////////////////////////////////////////////////////////////////
64MarcusBains::MarcusBains(KOAgenda *_agenda,const char *name) 64MarcusBains::MarcusBains(KOAgenda *_agenda,const char *name)
65 : QFrame(_agenda->viewport(),name), agenda(_agenda) 65 : QFrame(_agenda->viewport(),name), agenda(_agenda)
66{ 66{
67 setLineWidth(0); 67 setLineWidth(0);
68 setMargin(0); 68 setMargin(0);
69 setBackgroundColor(Qt::red); 69 setBackgroundColor(Qt::red);
70 minutes = new QTimer(this); 70 minutes = new QTimer(this);
71 connect(minutes, SIGNAL(timeout()), this, SLOT(updateLoc())); 71 connect(minutes, SIGNAL(timeout()), this, SLOT(updateLoc()));
72 minutes->start(0, true); 72 minutes->start(0, true);
73 mTimeBox = new QLabel(this); 73 mTimeBox = new QLabel(this);
74 mTimeBox->setAlignment(Qt::AlignRight | Qt::AlignBottom); 74 mTimeBox->setAlignment(Qt::AlignRight | Qt::AlignBottom);
75 QPalette pal = mTimeBox->palette(); 75 QPalette pal = mTimeBox->palette();
76 pal.setColor(QColorGroup::Foreground, Qt::red); 76 pal.setColor(QColorGroup::Foreground, Qt::red);
77 mTimeBox->setPalette(pal); 77 mTimeBox->setPalette(pal);
78 //mTimeBox->setAutoMask(true); 78 //mTimeBox->setAutoMask(true);
79 79
80 agenda->addChild(mTimeBox); 80 agenda->addChild(mTimeBox);
81 81
82 oldToday = -1; 82 oldToday = -1;
83} 83}
84 84
85MarcusBains::~MarcusBains() 85MarcusBains::~MarcusBains()
86{ 86{
87 delete minutes; 87 delete minutes;
88} 88}
89 89
90int MarcusBains::todayColumn() 90int MarcusBains::todayColumn()
91{ 91{
92 QDate currentDate = QDate::currentDate(); 92 QDate currentDate = QDate::currentDate();
93 93
94 DateList dateList = agenda->dateList(); 94 DateList dateList = agenda->dateList();
95 DateList::ConstIterator it; 95 DateList::ConstIterator it;
96 int col = 0; 96 int col = 0;
97 for(it = dateList.begin(); it != dateList.end(); ++it) { 97 for(it = dateList.begin(); it != dateList.end(); ++it) {
98 if((*it) == currentDate) 98 if((*it) == currentDate)
99 return KOGlobals::self()->reverseLayout() ? 99 return KOGlobals::self()->reverseLayout() ?
100 agenda->columns() - 1 - col : col; 100 agenda->columns() - 1 - col : col;
101 ++col; 101 ++col;
102 } 102 }
103 103
104 return -1; 104 return -1;
105} 105}
106void MarcusBains::updateLoc() 106void MarcusBains::updateLoc()
107{ 107{
108 updateLocation(); 108 updateLocation();
109} 109}
110void MarcusBains::updateLocation(bool recalculate) 110void MarcusBains::updateLocation(bool recalculate)
111{ 111{
112 112
113 QTime tim = QTime::currentTime(); 113 QTime tim = QTime::currentTime();
114 //qDebug(" MarcusBains::updateLocation %s ", tim.toString().latin1()); 114 //qDebug(" MarcusBains::updateLocation %s ", tim.toString().latin1());
115 if((tim.hour() == 0) && (oldTime.hour()==23)) 115 if((tim.hour() == 0) && (oldTime.hour()==23))
116 recalculate = true; 116 recalculate = true;
117 117
118 int mins = tim.hour()*60 + tim.minute(); 118 int mins = tim.hour()*60 + tim.minute();
119 int minutesPerCell = 24 * 60 / agenda->rows(); 119 int minutesPerCell = 24 * 60 / agenda->rows();
120 int y = mins*agenda->gridSpacingY()/minutesPerCell; 120 int y = mins*agenda->gridSpacingY()/minutesPerCell;
121 int today = recalculate ? todayColumn() : oldToday; 121 int today = recalculate ? todayColumn() : oldToday;
122 int x = agenda->gridSpacingX()*today; 122 int x = agenda->gridSpacingX()*today;
123 bool disabled = !(KOPrefs::instance()->mMarcusBainsEnabled); 123 bool disabled = !(KOPrefs::instance()->mMarcusBainsEnabled);
124 124
125 oldTime = tim; 125 oldTime = tim;
126 oldToday = today; 126 oldToday = today;
127 127
128 if(disabled || (today<0)) { 128 if(disabled || (today<0)) {
129 hide(); mTimeBox->hide(); 129 hide(); mTimeBox->hide();
130 return; 130 return;
131 } else { 131 } else {
132 show(); mTimeBox->show(); 132 show(); mTimeBox->show();
133 } 133 }
134 134
135 if(recalculate) 135 if(recalculate)
136 setFixedSize(agenda->gridSpacingX(),1); 136 setFixedSize(agenda->gridSpacingX(),1);
137 agenda->moveChild(this, x, y); 137 agenda->moveChild(this, x, y);
138 raise(); 138 raise();
139 139
140 if(recalculate) 140 if(recalculate)
141 //mTimeBox->setFont(QFont("helvetica",10)); 141 //mTimeBox->setFont(QFont("helvetica",10));
142 mTimeBox->setFont(KOPrefs::instance()->mMarcusBainsFont); 142 mTimeBox->setFont(KOPrefs::instance()->mMarcusBainsFont);
143 143
144 mTimeBox->setText(KGlobal::locale()->formatTime(tim, KOPrefs::instance()->mMarcusBainsShowSeconds)); 144 mTimeBox->setText(KGlobal::locale()->formatTime(tim, KOPrefs::instance()->mMarcusBainsShowSeconds));
145 mTimeBox->adjustSize(); 145 mTimeBox->adjustSize();
146 // the -2 below is there because there is a bug in this program 146 // the -2 below is there because there is a bug in this program
147 // somewhere, where the last column of this widget is a few pixels 147 // somewhere, where the last column of this widget is a few pixels
148 // narrower than the other columns. 148 // narrower than the other columns.
149 int offs = (today==agenda->columns()-1) ? -4 : 0; 149 int offs = (today==agenda->columns()-1) ? -4 : 0;
150 agenda->moveChild(mTimeBox, 150 agenda->moveChild(mTimeBox,
151 x+agenda->gridSpacingX()-mTimeBox->width()+offs-1, 151 x+agenda->gridSpacingX()-mTimeBox->width()+offs-1,
152 y-mTimeBox->height()); 152 y-mTimeBox->height());
153 153
154 mTimeBox->raise(); 154 mTimeBox->raise();
155 //mTimeBox->setAutoMask(true); 155 //mTimeBox->setAutoMask(true);
156 minutes->start(5000,true); 156 minutes->start(5000,true);
157} 157}
158 158
159 159
160//////////////////////////////////////////////////////////////////////////// 160////////////////////////////////////////////////////////////////////////////
161 161
162 162
163/* 163/*
164 Create an agenda widget with rows rows and columns columns. 164 Create an agenda widget with rows rows and columns columns.
165*/ 165*/
166KOAgenda::KOAgenda(int columns,int rows,int rowSize,QWidget *parent, 166KOAgenda::KOAgenda(int columns,int rows,int rowSize,QWidget *parent,
167 const char *name,WFlags f) : 167 const char *name,WFlags f) :
168 QScrollView(parent,name,f) 168 QScrollView(parent,name,f)
169{ 169{
170 170
171 171
172 mColumns = columns; 172 mColumns = columns;
173 mRows = rows; 173 mRows = rows;
174 mGridSpacingY = rowSize; 174 mGridSpacingY = rowSize;
175 mAllDayMode = false; 175 mAllDayMode = false;
176#ifndef DESKTOP_VERSION 176#ifndef DESKTOP_VERSION
177 //QPEApplication::setStylusOperation( viewport(), QPEApplication::RightOnHold ); 177 //QPEApplication::setStylusOperation( viewport(), QPEApplication::RightOnHold );
178#endif 178#endif
179 mHolidayMask = 0; 179 mHolidayMask = 0;
180 init(); 180 init();
181} 181}
182 182
183/* 183/*
184 Create an agenda widget with columns columns and one row. This is used for 184 Create an agenda widget with columns columns and one row. This is used for
185 all-day events. 185 all-day events.
186*/ 186*/
187KOAgenda::KOAgenda(int columns,QWidget *parent,const char *name,WFlags f) : 187KOAgenda::KOAgenda(int columns,QWidget *parent,const char *name,WFlags f) :
188 QScrollView(parent,name,f) 188 QScrollView(parent,name,f)
189{ 189{
190 blockResize = false; 190 blockResize = false;
191 mColumns = columns; 191 mColumns = columns;
192 mRows = 1; 192 mRows = 1;
193 //qDebug("aaaaaaaaaaaaaaaaaaldays %d ", KOPrefs::instance()->mAllDaySize); 193 //qDebug("aaaaaaaaaaaaaaaaaaldays %d ", KOPrefs::instance()->mAllDaySize);
194 mGridSpacingY = KOPrefs::instance()->mAllDaySize; 194 mGridSpacingY = KOPrefs::instance()->mAllDaySize;
195 mAllDayMode = true; 195 mAllDayMode = true;
196#ifndef DESKTOP_VERSION 196#ifndef DESKTOP_VERSION
197 //QPEApplication::setStylusOperation( viewport(), QPEApplication::RightOnHold ); 197 //QPEApplication::setStylusOperation( viewport(), QPEApplication::RightOnHold );
198#endif 198#endif
199 mHolidayMask = 0; 199 mHolidayMask = 0;
200 init(); 200 init();
201} 201}
202 202
203 203
204KOAgenda::~KOAgenda() 204KOAgenda::~KOAgenda()
205{ 205{
206 if(mMarcusBains) delete mMarcusBains; 206 if(mMarcusBains) delete mMarcusBains;
207 207
208} 208}
209 209
210Incidence *KOAgenda::selectedIncidence() const 210Incidence *KOAgenda::selectedIncidence() const
211{ 211{
212 return (mSelectedItem ? mSelectedItem->incidence() : 0); 212 return (mSelectedItem ? mSelectedItem->incidence() : 0);
213} 213}
214 214
215 215
216QDate KOAgenda::selectedIncidenceDate() const 216QDate KOAgenda::selectedIncidenceDate() const
217{ 217{
218 return (mSelectedItem ? mSelectedItem->itemDate() : QDate()); 218 return (mSelectedItem ? mSelectedItem->itemDate() : QDate());
219} 219}
220 220
221 221
222void KOAgenda::init() 222void KOAgenda::init()
223{ 223{
224 mPopupTimer = new QTimer(this); 224 mPopupTimer = new QTimer(this);
225 connect(mPopupTimer , SIGNAL(timeout()), this, SLOT(popupMenu())); 225 connect(mPopupTimer , SIGNAL(timeout()), this, SLOT(popupMenu()));
226 226
227 mNewItemPopup = new QPopupMenu( this ); 227 mNewItemPopup = new QPopupMenu( this );
228 connect ( mNewItemPopup, SIGNAL (activated ( int ) ), this, SLOT ( newItem(int)) ); 228 connect ( mNewItemPopup, SIGNAL (activated ( int ) ), this, SLOT ( newItem(int)) );
229 QString pathString = ""; 229 QString pathString = "";
230 if ( !KOPrefs::instance()->mToolBarMiniIcons ) { 230 if ( !KOPrefs::instance()->mToolBarMiniIcons ) {
231 if ( QApplication::desktop()->width() < 480 ) 231 if ( QApplication::desktop()->width() < 480 )
232 pathString += "icons16/"; 232 pathString += "icons16/";
233 } else 233 } else
234 pathString += "iconsmini/"; 234 pathString += "iconsmini/";
235 235
236 mNewItemPopup->insertItem ( SmallIcon( pathString +"newevent" ), i18n("New Event..."), 1 ); 236 mNewItemPopup->insertItem ( SmallIcon( pathString +"newevent" ), i18n("New Event..."), 1 );
237 mNewItemPopup->insertItem ( SmallIcon( pathString +"newtodo" ), i18n("New Todo..."),2 ); 237 mNewItemPopup->insertItem ( SmallIcon( pathString +"newtodo" ), i18n("New Todo..."),2 );
238 mNewItemPopup->insertSeparator ( ); 238 mNewItemPopup->insertSeparator ( );
239 mNewItemPopup->insertItem ( SmallIcon( pathString +"day" ), i18n("Day view"),3 ); 239 mNewItemPopup->insertItem ( SmallIcon( pathString +"day" ), i18n("Day view"),3 );
240 mNewItemPopup->insertItem ( SmallIcon( pathString +"xdays" ), i18n("Next days"),8 ); 240 mNewItemPopup->insertItem ( SmallIcon( pathString +"xdays" ), i18n("Next days"),8 );
241 mNewItemPopup->insertItem ( SmallIcon( pathString +"week" ), i18n("Next week"),4 ); 241 mNewItemPopup->insertItem ( SmallIcon( pathString +"week" ), i18n("Next week"),4 );
242 mNewItemPopup->insertItem ( SmallIcon( pathString +"week" ), i18n("Next two weeks"),5 ); 242 mNewItemPopup->insertItem ( SmallIcon( pathString +"week" ), i18n("Next two weeks"),5 );
243 mNewItemPopup->insertItem ( SmallIcon( pathString +"month" ), i18n("This month"),6 ); 243 mNewItemPopup->insertItem ( SmallIcon( pathString +"month" ), i18n("This month"),6 );
244 mNewItemPopup->insertItem ( SmallIcon( pathString +"journal" ), i18n("Journal view"),7 ); 244 mNewItemPopup->insertItem ( SmallIcon( pathString +"journal" ), i18n("Journal view"),7 );
245#ifndef _WIN32_ 245#ifndef _WIN32_
246 int wflags = viewport()-> getWFlags() |WRepaintNoErase;//WResizeNoErase 246 int wflags = viewport()-> getWFlags() |WRepaintNoErase;//WResizeNoErase
247 viewport()->setWFlags ( wflags); 247 viewport()->setWFlags ( wflags);
248#endif 248#endif
249 mGridSpacingX = 80; 249 mGridSpacingX = 80;
250 mResizeBorderWidth = 8; 250 mResizeBorderWidth = 8;
251 mScrollBorderWidth = 8; 251 mScrollBorderWidth = 8;
252 mScrollDelay = 30; 252 mScrollDelay = 30;
253 mScrollOffset = 10; 253 mScrollOffset = 10;
254 mPaintPixmap.resize( 20,20); 254 mPaintPixmap.resize( 20,20);
255 //enableClipper(true); 255 //enableClipper(true);
256 256
257 // Grab key strokes for keyboard navigation of agenda. Seems to have no 257 // Grab key strokes for keyboard navigation of agenda. Seems to have no
258 // effect. Has to be fixed. 258 // effect. Has to be fixed.
259 setFocusPolicy(WheelFocus); 259 setFocusPolicy(WheelFocus);
260 260
261 connect(&mScrollUpTimer,SIGNAL(timeout()),SLOT(scrollUp())); 261 connect(&mScrollUpTimer,SIGNAL(timeout()),SLOT(scrollUp()));
262 connect(&mScrollDownTimer,SIGNAL(timeout()),SLOT(scrollDown())); 262 connect(&mScrollDownTimer,SIGNAL(timeout()),SLOT(scrollDown()));
263 connect(&mResizeTimer,SIGNAL(timeout()),SLOT(finishResize())); 263 connect(&mResizeTimer,SIGNAL(timeout()),SLOT(finishResize()));
264 264
265 mStartCellX = 0; 265 mStartCellX = 0;
266 mStartCellY = 0; 266 mStartCellY = 0;
267 mCurrentCellX = 0; 267 mCurrentCellX = 0;
268 mCurrentCellY = 0; 268 mCurrentCellY = 0;
269 269
270 mSelectionCellX = 0; 270 mSelectionCellX = 0;
271 mSelectionYTop = 0; 271 mSelectionYTop = 0;
272 mSelectionHeight = 0; 272 mSelectionHeight = 0;
273 273
274 mOldLowerScrollValue = -1; 274 mOldLowerScrollValue = -1;
275 mOldUpperScrollValue = -1; 275 mOldUpperScrollValue = -1;
276 276
277 mClickedItem = 0; 277 mClickedItem = 0;
278 278
279 mActionItem = 0; 279 mActionItem = 0;
280 mActionType = NOP; 280 mActionType = NOP;
281 mItemMoved = false; 281 mItemMoved = false;
282 282
283 mSelectedItem = 0; 283 mSelectedItem = 0;
284 284
285 // mItems.setAutoDelete(true); 285 // mItems.setAutoDelete(true);
286 286
287 resizeContents( mGridSpacingX * mColumns + 1 , mGridSpacingY * mRows + 1 ); 287 resizeContents( mGridSpacingX * mColumns + 1 , mGridSpacingY * mRows + 1 );
288 288
289 viewport()->update(); 289 viewport()->update();
290 290
291 setMinimumSize(30, 1); 291 setMinimumSize(30, 1);
292// setMaximumHeight(mGridSpacingY * mRows + 5); 292// setMaximumHeight(mGridSpacingY * mRows + 5);
293 293
294 // Disable horizontal scrollbar. This is a hack. The geometry should be 294 // Disable horizontal scrollbar. This is a hack. The geometry should be
295 // controlled in a way that the contents horizontally always fits. Then it is 295 // controlled in a way that the contents horizontally always fits. Then it is
296 // not necessary to turn off the scrollbar. 296 // not necessary to turn off the scrollbar.
297 setHScrollBarMode(AlwaysOff); 297 setHScrollBarMode(AlwaysOff);
298 if ( ! mAllDayMode ) 298 if ( ! mAllDayMode )
299 setVScrollBarMode(AlwaysOn); 299 setVScrollBarMode(AlwaysOn);
300 else 300 else
301 setVScrollBarMode(AlwaysOff); 301 setVScrollBarMode(AlwaysOff);
302 302
303 setStartHour(KOPrefs::instance()->mDayBegins); 303 setStartHour(KOPrefs::instance()->mDayBegins);
304 304
305 calculateWorkingHours(); 305 calculateWorkingHours();
306 306
307 connect(verticalScrollBar(),SIGNAL(valueChanged(int)), 307 connect(verticalScrollBar(),SIGNAL(valueChanged(int)),
308 SLOT(checkScrollBoundaries(int))); 308 SLOT(checkScrollBoundaries(int)));
309 309
310 // Create the Marcus Bains line. 310 // Create the Marcus Bains line.
311 if(mAllDayMode) 311 if(mAllDayMode)
312 mMarcusBains = 0; 312 mMarcusBains = 0;
313 else { 313 else {
314 mMarcusBains = new MarcusBains(this); 314 mMarcusBains = new MarcusBains(this);
315 addChild(mMarcusBains); 315 addChild(mMarcusBains);
316 } 316 }
317 mPopupKind = 0; 317 mPopupKind = 0;
318 mPopupItem = 0; 318 mPopupItem = 0;
319} 319}
320 320
321void KOAgenda::clear() 321void KOAgenda::clear()
322{ 322{
323 KOAgendaItem *item; 323 KOAgendaItem *item;
324 for ( item=mItems.first(); item != 0; item=mItems.next() ) { 324 for ( item=mItems.first(); item != 0; item=mItems.next() ) {
325 mUnusedItems.append( item ); 325 mUnusedItems.append( item );
326 //item->hide(); 326 //item->hide();
327 } 327 }
328 mItems.clear(); 328 mItems.clear();
329 mSelectedItem = 0; 329 mSelectedItem = 0;
330 clearSelection(); 330 clearSelection();
331} 331}
332 332
333void KOAgenda::clearSelection() 333void KOAgenda::clearSelection()
334{ 334{
335 mSelectionCellX = 0; 335 mSelectionCellX = 0;
336 mSelectionYTop = 0; 336 mSelectionYTop = 0;
337 mSelectionHeight = 0; 337 mSelectionHeight = 0;
338} 338}
339 339
340void KOAgenda::marcus_bains() 340void KOAgenda::marcus_bains()
341{ 341{
342 if(mMarcusBains) mMarcusBains->updateLocation(true); 342 if(mMarcusBains) mMarcusBains->updateLocation(true);
343} 343}
344 344
345 345
346void KOAgenda::changeColumns(int columns) 346void KOAgenda::changeColumns(int columns)
347{ 347{
348 if (columns == 0) { 348 if (columns == 0) {
349 qDebug("KOAgenda::changeColumns() called with argument 0 "); 349 qDebug("KOAgenda::changeColumns() called with argument 0 ");
350 return; 350 return;
351 } 351 }
352 clear(); 352 clear();
353 mColumns = columns; 353 mColumns = columns;
354 computeSizes(); 354 computeSizes();
355} 355}
356 356
357/* 357/*
358 This is the eventFilter function, which gets all events from the KOAgendaItems 358 This is the eventFilter function, which gets all events from the KOAgendaItems
359 contained in the agenda. It has to handle moving and resizing for all items. 359 contained in the agenda. It has to handle moving and resizing for all items.
360*/ 360*/
361bool KOAgenda::eventFilter ( QObject *object, QEvent *event ) 361bool KOAgenda::eventFilter ( QObject *object, QEvent *event )
362{ 362{
363 // kdDebug() << "KOAgenda::eventFilter" << endl; 363 // kdDebug() << "KOAgenda::eventFilter" << endl;
364 switch(event->type()) { 364 switch(event->type()) {
365 case QEvent::MouseButtonPress: 365 case QEvent::MouseButtonPress:
366 case QEvent::MouseButtonDblClick: 366 case QEvent::MouseButtonDblClick:
367 case QEvent::MouseButtonRelease: 367 case QEvent::MouseButtonRelease:
368 case QEvent::MouseMove: 368 case QEvent::MouseMove:
369 return eventFilter_mouse(object, static_cast<QMouseEvent *>(event)); 369 return eventFilter_mouse(object, static_cast<QMouseEvent *>(event));
370 370
371 case (QEvent::Leave): 371 case (QEvent::Leave):
372 if (!mActionItem) 372 if (!mActionItem)
373 setCursor(arrowCursor); 373 setCursor(arrowCursor);
374 return true; 374 return true;
375 375
376 default: 376 default:
377 return QScrollView::eventFilter(object,event); 377 return QScrollView::eventFilter(object,event);
378 } 378 }
379} 379}
380void KOAgenda::popupMenu() 380void KOAgenda::popupMenu()
381{ 381{
382 mPopupTimer->stop(); 382 mPopupTimer->stop();
383 if ( mPopupKind == 1 ) { 383 if ( mPopupKind == 1 ) {
384 if (mActionItem ) { 384 if (mActionItem ) {
385 endItemAction(); 385 endItemAction();
386 } 386 }
387 mLeftMouseDown = false; // no more leftMouse computation 387 mLeftMouseDown = false; // no more leftMouse computation
388 if (mPopupItem) { 388 if (mPopupItem) {
389 selectItem(mPopupItem); 389 selectItem(mPopupItem);
390 emit showIncidencePopupSignal(mPopupItem->incidence()); 390 emit showIncidencePopupSignal(mPopupItem->incidence());
391 391
392 } 392 }
393 } else if ( mPopupKind == 2 ) { 393 } else if ( mPopupKind == 2 ) {
394 if ( mLeftMouseDown ) { // we have a simulated right click - clear left mouse action 394 if ( mLeftMouseDown ) { // we have a simulated right click - clear left mouse action
395 endSelectAction( false ); // do not emit new event signal 395 endSelectAction( false ); // do not emit new event signal
396 mLeftMouseDown = false; // no more leftMouse computation 396 mLeftMouseDown = false; // no more leftMouse computation
397 } 397 }
398 mNewItemPopup->popup( mPopupPos); 398 mNewItemPopup->popup( mPopupPos);
399 } 399 }
400 mLeftMouseDown = false; 400 mLeftMouseDown = false;
401 mPopupItem = 0; 401 mPopupItem = 0;
402 mPopupKind = 0; 402 mPopupKind = 0;
403} 403}
404 404
405bool KOAgenda::eventFilter_mouse(QObject *object, QMouseEvent *me) 405bool KOAgenda::eventFilter_mouse(QObject *object, QMouseEvent *me)
406{ 406{
407 //qDebug("KOAgenda::eventFilter_mous "); 407 //qDebug("KOAgenda::eventFilter_mous ");
408 QPoint viewportPos; 408 QPoint viewportPos;
409 if (object != viewport()) { 409 if (object != viewport()) {
410 viewportPos = ((QWidget *)object)->mapToParent(me->pos()); 410 viewportPos = ((QWidget *)object)->mapToParent(me->pos());
411 } else { 411 } else {
412 viewportPos = me->pos(); 412 viewportPos = me->pos();
413 } 413 }
414 static int startX = 0; 414 static int startX = 0;
415 static int startY = 0; 415 static int startY = 0;
416 static int blockmoveDist = ( QApplication::desktop()->width() < 480 ? 15 : 20 ); 416 static int blockmoveDist = ( QApplication::desktop()->width() < 480 ? 15 : 20 );
417 static bool blockMoving = true; 417 static bool blockMoving = true;
418 switch (me->type()) { 418 switch (me->type()) {
419 case QEvent::MouseButtonPress: 419 case QEvent::MouseButtonPress:
420 if (me->button() == LeftButton) { 420 if (me->button() == LeftButton) {
421 mPopupTimer->start( 600 ); 421 mPopupTimer->start( 600 );
422 mLeftMouseDown = true; 422 mLeftMouseDown = true;
423 } 423 }
424 blockMoving = true; 424 blockMoving = true;
425 startX = viewportPos.x(); 425 startX = viewportPos.x();
426 startY = viewportPos.y(); 426 startY = viewportPos.y();
427 if (object != viewport()) { 427 if (object != viewport()) {
428 mPopupItem = (KOAgendaItem *)object; 428 mPopupItem = (KOAgendaItem *)object;
429 mPopupKind = 1; 429 mPopupKind = 1;
430 if (me->button() == RightButton) { 430 if (me->button() == RightButton) {
431 popupMenu(); 431 popupMenu();
432 } else if (me->button() == LeftButton) { 432 } else if (me->button() == LeftButton) {
433 mActionItem = (KOAgendaItem *)object; 433 mActionItem = (KOAgendaItem *)object;
434 if (mActionItem) { 434 if (mActionItem) {
435 if ( mSelectionHeight > 0 ) { 435 if ( mSelectionHeight > 0 ) {
436 int selectionCellX = mSelectionCellX * mGridSpacingX; 436 int selectionCellX = mSelectionCellX * mGridSpacingX;
437 int selectionYTop = mSelectionYTop; 437 int selectionYTop = mSelectionYTop;
438 int gridSpacingX = mGridSpacingX; 438 int gridSpacingX = mGridSpacingX;
439 int selectionHeight = mSelectionHeight; 439 int selectionHeight = mSelectionHeight;
440 clearSelection(); 440 clearSelection();
441 repaintContents( selectionCellX, selectionYTop, 441 repaintContents( selectionCellX, selectionYTop,
442 gridSpacingX, selectionHeight,false ); 442 gridSpacingX, selectionHeight,false );
443 } 443 }
444 selectItem(mActionItem); 444 selectItem(mActionItem);
445 Incidence *incidence = mActionItem->incidence(); 445 Incidence *incidence = mActionItem->incidence();
446 if ( incidence->isReadOnly() /*|| incidence->recurrence()->doesRecur() */) { 446 if ( incidence->isReadOnly() /*|| incidence->recurrence()->doesRecur() */) {
447 mActionItem = 0; 447 mActionItem = 0;
448 } else { 448 } else {
449 startItemAction(viewportPos); 449 startItemAction(viewportPos);
450 } 450 }
451 } 451 }
452 } 452 }
453 } else { // ---------- viewport() 453 } else { // ---------- viewport()
454 mPopupItem = 0; 454 mPopupItem = 0;
455 mPopupKind = 2; 455 mPopupKind = 2;
456 selectItem(0); 456 selectItem(0);
457 mActionItem = 0; 457 mActionItem = 0;
458 mPopupPos = viewport()->mapToGlobal( me->pos() ); 458 mPopupPos = viewport()->mapToGlobal( me->pos() );
459 if (me->button() == RightButton) { 459 if (me->button() == RightButton) {
460 int x,y; 460 int x,y;
461 viewportToContents(viewportPos.x(),viewportPos.y(),x,y); 461 viewportToContents(viewportPos.x(),viewportPos.y(),x,y);
462 int gx,gy; 462 int gx,gy;
463 contentsToGrid(x,y,gx,gy); 463 contentsToGrid(x,y,gx,gy);
464 mCurrentCellX = gx; 464 mCurrentCellX = gx;
465 mCurrentCellY = gy; 465 mCurrentCellY = gy;
466 mStartCellX = gx; 466 mStartCellX = gx;
467 mStartCellY = gy; 467 mStartCellY = gy;
468 popupMenu(); 468 popupMenu();
469 } else if (me->button() == LeftButton) { 469 } else if (me->button() == LeftButton) {
470 setCursor(arrowCursor); 470 setCursor(arrowCursor);
471 startSelectAction(viewportPos); 471 startSelectAction(viewportPos);
472 } 472 }
473 } 473 }
474 break; 474 break;
475 475
476 case QEvent::MouseButtonRelease: 476 case QEvent::MouseButtonRelease:
477 if (me->button() == LeftButton ) { 477 if (me->button() == LeftButton ) {
478 mPopupTimer->stop(); 478 mPopupTimer->stop();
479 } 479 }
480 if (object != viewport()) { 480 if (object != viewport()) {
481 if (me->button() == LeftButton && mLeftMouseDown) { 481 if (me->button() == LeftButton && mLeftMouseDown) {
482 if (mActionItem) { 482 if (mActionItem) {
483 QPoint clipperPos = clipper()->mapFromGlobal(viewport()->mapToGlobal(viewportPos)); 483 QPoint clipperPos = clipper()->mapFromGlobal(viewport()->mapToGlobal(viewportPos));
484 //qDebug(" %d %d %d ",clipperPos.y(),visibleHeight() , 9 ); 484 //qDebug(" %d %d %d ",clipperPos.y(),visibleHeight() , 9 );
485 if ( mActionType == MOVE && (clipperPos.y() > visibleHeight()-2 ||clipperPos.y() < 0 ) ) { 485 if ( mActionType == MOVE && (clipperPos.y() > visibleHeight()-2 ||clipperPos.y() < 0 ) ) {
486 mScrollUpTimer.stop(); 486 mScrollUpTimer.stop();
487 mScrollDownTimer.stop(); 487 mScrollDownTimer.stop();
488 mActionItem->resetMove(); 488 mActionItem->resetMove();
489 placeSubCells( mActionItem ); 489 placeSubCells( mActionItem );
490 // emit startDragSignal( mActionItem->incidence() ); 490 // emit startDragSignal( mActionItem->incidence() );
491 setCursor( arrowCursor ); 491 setCursor( arrowCursor );
492 mActionItem = 0; 492 mActionItem = 0;
493 mActionType = NOP; 493 mActionType = NOP;
494 mItemMoved = 0; 494 mItemMoved = 0;
495 mLeftMouseDown = false; 495 mLeftMouseDown = false;
496 return true; 496 return true;
497 } 497 }
498 endItemAction(); 498 endItemAction();
499 } 499 }
500 } 500 }
501 501
502 } else { // ---------- viewport() 502 } else { // ---------- viewport()
503 if (me->button() == LeftButton && mLeftMouseDown ) { //left click 503 if (me->button() == LeftButton && mLeftMouseDown ) { //left click
504 endSelectAction( true ); // emit new event signal 504 endSelectAction( true ); // emit new event signal
505 } 505 }
506 } 506 }
507 if (me->button() == LeftButton) 507 if (me->button() == LeftButton)
508 mLeftMouseDown = false; 508 mLeftMouseDown = false;
509 509
510 break; 510 break;
511 511
512 case QEvent::MouseMove: 512 case QEvent::MouseMove:
513 //qDebug("mm ");
513 if ( !mLeftMouseDown ) 514 if ( !mLeftMouseDown )
514 return true; 515 return false;
515 if ( blockMoving ) { 516 if ( blockMoving ) {
516 int dX, dY; 517 int dX, dY;
517 dX = startX - viewportPos.x(); 518 dX = startX - viewportPos.x();
518 if ( dX < 0 ) 519 if ( dX < 0 )
519 dX = -dX; 520 dX = -dX;
520 dY = viewportPos.y() - startY; 521 dY = viewportPos.y() - startY;
521 if ( dY < 0 ) 522 if ( dY < 0 )
522 dY = -dY; 523 dY = -dY;
523 //qDebug("%d %d %d ", dX, dY , blockmoveDist ); 524 //qDebug("%d %d %d ", dX, dY , blockmoveDist );
524 if ( dX > blockmoveDist || dY > blockmoveDist ) { 525 if ( dX > blockmoveDist || dY > blockmoveDist ) {
525 blockMoving = false; 526 blockMoving = false;
526 } 527 }
527 } 528 }
528 if ( ! blockMoving ) 529 if ( ! blockMoving )
529 mPopupTimer->stop(); 530 mPopupTimer->stop();
530 if (object != viewport()) { 531 if (object != viewport()) {
531 KOAgendaItem *moveItem = (KOAgendaItem *)object; 532 KOAgendaItem *moveItem = (KOAgendaItem *)object;
532 if (!moveItem->incidence()->isReadOnly() ) { 533 if (!moveItem->incidence()->isReadOnly() ) {
533 if (!mActionItem) 534 if (!mActionItem)
534 setNoActionCursor(moveItem,viewportPos); 535 setNoActionCursor(moveItem,viewportPos);
535 else { 536 else {
536 if ( !blockMoving ) 537 if ( !blockMoving )
537 performItemAction(viewportPos); 538 performItemAction(viewportPos);
538 } 539 }
539 } 540 }
540 } else { // ---------- viewport() 541 } else { // ---------- viewport()
541 mPopupPos = viewport()->mapToGlobal( me->pos() ); 542 mPopupPos = viewport()->mapToGlobal( me->pos() );
542 if ( mActionType == SELECT ) { 543 if ( mActionType == SELECT ) {
543 performSelectAction( viewportPos ); 544 performSelectAction( viewportPos );
544 } 545 }
545 } 546 }
546 break; 547 break;
547 548
548 case QEvent::MouseButtonDblClick: 549 case QEvent::MouseButtonDblClick:
549 mPopupTimer->stop(); 550 mPopupTimer->stop();
550 if (object == viewport()) { 551 if (object == viewport()) {
551 selectItem(0); 552 selectItem(0);
552 int x,y; 553 int x,y;
553 viewportToContents(viewportPos.x(),viewportPos.y(),x,y); 554 viewportToContents(viewportPos.x(),viewportPos.y(),x,y);
554 int gx,gy; 555 int gx,gy;
555 contentsToGrid(x,y,gx,gy); 556 contentsToGrid(x,y,gx,gy);
556 emit newEventSignal(gx,gy); 557 emit newEventSignal(gx,gy);
557 } else { 558 } else {
558 KOAgendaItem *doubleClickedItem = (KOAgendaItem *)object; 559 KOAgendaItem *doubleClickedItem = (KOAgendaItem *)object;
559 selectItem(doubleClickedItem); 560 selectItem(doubleClickedItem);
560 if ( KOPrefs::instance()->mEditOnDoubleClick ) 561 if ( KOPrefs::instance()->mEditOnDoubleClick )
561 emit editIncidenceSignal(doubleClickedItem->incidence()); 562 emit editIncidenceSignal(doubleClickedItem->incidence());
562 else 563 else
563 emit showIncidenceSignal(doubleClickedItem->incidence()); 564 emit showIncidenceSignal(doubleClickedItem->incidence());
564 } 565 }
565 break; 566 break;
566 567
567 default: 568 default:
568 break; 569 break;
569 } 570 }
570 return true; 571 return true;
571#if 0 572#if 0
572 //qDebug("KOAgenda::eventFilter_mous "); 573 //qDebug("KOAgenda::eventFilter_mous ");
573 QPoint viewportPos; 574 QPoint viewportPos;
574 if (object != viewport()) { 575 if (object != viewport()) {
575 viewportPos = ((QWidget *)object)->mapToParent(me->pos()); 576 viewportPos = ((QWidget *)object)->mapToParent(me->pos());
576 } else { 577 } else {
577 viewportPos = me->pos(); 578 viewportPos = me->pos();
578 } 579 }
579 static int startX = 0; 580 static int startX = 0;
580 static int startY = 0; 581 static int startY = 0;
581 static int blockmoveDist = ( QApplication::desktop()->width() < 480 ? 15 : 20 ); 582 static int blockmoveDist = ( QApplication::desktop()->width() < 480 ? 15 : 20 );
582 static bool blockMoving = true; 583 static bool blockMoving = true;
583 static bool leftMouseDown = false; 584 static bool leftMouseDown = false;
584 bool rightButtonPressed = false; 585 bool rightButtonPressed = false;
585 switch (me->type()) { 586 switch (me->type()) {
586 case QEvent::MouseButtonPress: 587 case QEvent::MouseButtonPress:
587 if (me->button() == LeftButton) { 588 if (me->button() == LeftButton) {
588 leftMouseDown = true; 589 leftMouseDown = true;
589 } 590 }
590 else if (me->button() == RightButton) { 591 else if (me->button() == RightButton) {
591 leftMouseDown = false; 592 leftMouseDown = false;
592 } 593 }
593 blockMoving = true; 594 blockMoving = true;
594 startX = viewportPos.x(); 595 startX = viewportPos.x();
595 startY = viewportPos.y(); 596 startY = viewportPos.y();
596 if (object != viewport()) { // item clicked ************** 597 if (object != viewport()) { // item clicked **************
597 if (me->button() == RightButton) { 598 if (me->button() == RightButton) {
598 leftMouseDown = false; 599 leftMouseDown = false;
599 mClickedItem = (KOAgendaItem *)object; 600 mClickedItem = (KOAgendaItem *)object;
600 if (mActionItem ) { 601 if (mActionItem ) {
601 endItemAction(); 602 endItemAction();
602 } 603 }
603 if (mClickedItem) { 604 if (mClickedItem) {
604 selectItem(mClickedItem); 605 selectItem(mClickedItem);
605 emit showIncidencePopupSignal(mClickedItem->incidence()); 606 emit showIncidencePopupSignal(mClickedItem->incidence());
606 } 607 }
607 return true; 608 return true;
608 } else if (me->button() == LeftButton) { 609 } else if (me->button() == LeftButton) {
609 mActionItem = (KOAgendaItem *)object; 610 mActionItem = (KOAgendaItem *)object;
610 if (mActionItem) { 611 if (mActionItem) {
611 if ( mSelectionHeight > 0 ) { 612 if ( mSelectionHeight > 0 ) {
612 int selectionCellX = mSelectionCellX * mGridSpacingX; 613 int selectionCellX = mSelectionCellX * mGridSpacingX;
613 int selectionYTop = mSelectionYTop; 614 int selectionYTop = mSelectionYTop;
614 int gridSpacingX = mGridSpacingX; 615 int gridSpacingX = mGridSpacingX;
615 int selectionHeight = mSelectionHeight; 616 int selectionHeight = mSelectionHeight;
616 clearSelection(); 617 clearSelection();
617 repaintContents( selectionCellX, selectionYTop, 618 repaintContents( selectionCellX, selectionYTop,
618 gridSpacingX, selectionHeight,false ); 619 gridSpacingX, selectionHeight,false );
619 } 620 }
620 selectItem(mActionItem); 621 selectItem(mActionItem);
621 Incidence *incidence = mActionItem->incidence(); 622 Incidence *incidence = mActionItem->incidence();
622 if ( incidence->isReadOnly() /*|| incidence->recurrence()->doesRecur() */) { 623 if ( incidence->isReadOnly() /*|| incidence->recurrence()->doesRecur() */) {
623 mActionItem = 0; 624 mActionItem = 0;
624 } else { 625 } else {
625 startItemAction(viewportPos); 626 startItemAction(viewportPos);
626 } 627 }
627 } 628 }
628 } 629 }
629 } else { // ---------- viewport() 630 } else { // ---------- viewport()
630 selectItem(0); 631 selectItem(0);
631 mActionItem = 0; 632 mActionItem = 0;
632 if (me->button() == LeftButton ) { 633 if (me->button() == LeftButton ) {
633 setCursor(arrowCursor); 634 setCursor(arrowCursor);
634 startSelectAction(viewportPos); 635 startSelectAction(viewportPos);
635 } else if (me->button() == RightButton ) { 636 } else if (me->button() == RightButton ) {
636 setCursor(arrowCursor); 637 setCursor(arrowCursor);
637 if ( leftMouseDown ) { // we have a simulated right click - clear left mouse action 638 if ( leftMouseDown ) { // we have a simulated right click - clear left mouse action
638 endSelectAction( false ); // do not emit new event signal 639 endSelectAction( false ); // do not emit new event signal
639 leftMouseDown = false; // no more leftMouse computation 640 leftMouseDown = false; // no more leftMouse computation
640 } 641 }
641 int x,y; 642 int x,y;
642 viewportToContents(viewportPos.x(),viewportPos.y(),x,y); 643 viewportToContents(viewportPos.x(),viewportPos.y(),x,y);
643 int gx,gy; 644 int gx,gy;
644 contentsToGrid(x,y,gx,gy); 645 contentsToGrid(x,y,gx,gy);
645 mCurrentCellX = gx; 646 mCurrentCellX = gx;
646 mCurrentCellY = gy; 647 mCurrentCellY = gy;
647 mStartCellX = gx; 648 mStartCellX = gx;
648 mStartCellY = gy; 649 mStartCellY = gy;
649 mNewItemPopup->popup( viewport()->mapToGlobal( me->pos() ) ); 650 mNewItemPopup->popup( viewport()->mapToGlobal( me->pos() ) );
650 } 651 }
651 } 652 }
652 break; 653 break;
653 654
654 case QEvent::MouseButtonRelease: 655 case QEvent::MouseButtonRelease:
655 656
656 if (object != viewport()) { 657 if (object != viewport()) {
657 if (me->button() == LeftButton && leftMouseDown) { 658 if (me->button() == LeftButton && leftMouseDown) {
658 if (mActionItem) { 659 if (mActionItem) {
659 QPoint clipperPos = clipper()->mapFromGlobal(viewport()->mapToGlobal(viewportPos)); 660 QPoint clipperPos = clipper()->mapFromGlobal(viewport()->mapToGlobal(viewportPos));
660 //qDebug(" %d %d %d ",clipperPos.y(),visibleHeight() , 9 ); 661 //qDebug(" %d %d %d ",clipperPos.y(),visibleHeight() , 9 );
661 if ( mActionType == MOVE && (clipperPos.y() > visibleHeight()-2 ||clipperPos.y() < 0 ) ) { 662 if ( mActionType == MOVE && (clipperPos.y() > visibleHeight()-2 ||clipperPos.y() < 0 ) ) {
662 mScrollUpTimer.stop(); 663 mScrollUpTimer.stop();
663 mScrollDownTimer.stop(); 664 mScrollDownTimer.stop();
664 mActionItem->resetMove(); 665 mActionItem->resetMove();
665 placeSubCells( mActionItem ); 666 placeSubCells( mActionItem );
666 // emit startDragSignal( mActionItem->incidence() ); 667 // emit startDragSignal( mActionItem->incidence() );
667 setCursor( arrowCursor ); 668 setCursor( arrowCursor );
668 mActionItem = 0; 669 mActionItem = 0;
669 mActionType = NOP; 670 mActionType = NOP;
670 mItemMoved = 0; 671 mItemMoved = 0;
671 leftMouseDown = false; 672 leftMouseDown = false;
672 return true; 673 return true;
673 } 674 }
674 endItemAction(); 675 endItemAction();
675 } 676 }
676 } 677 }
677 678
678 } else { // ---------- viewport() 679 } else { // ---------- viewport()
679 if (me->button() == LeftButton && leftMouseDown ) { //left click 680 if (me->button() == LeftButton && leftMouseDown ) { //left click
680 endSelectAction( true ); // emit new event signal 681 endSelectAction( true ); // emit new event signal
681 } 682 }
682 } 683 }
683 if (me->button() == LeftButton) 684 if (me->button() == LeftButton)
684 leftMouseDown = false; 685 leftMouseDown = false;
685 686
686 break; 687 break;
687 688
688 case QEvent::MouseMove: 689 case QEvent::MouseMove:
689 if ( !leftMouseDown ) 690 if ( !leftMouseDown )
690 return true; 691 return true;
691 if ( blockMoving ) { 692 if ( blockMoving ) {
692 int dX, dY; 693 int dX, dY;
693 dX = startX - viewportPos.x(); 694 dX = startX - viewportPos.x();
694 if ( dX < 0 ) 695 if ( dX < 0 )
695 dX = -dX; 696 dX = -dX;
696 dY = viewportPos.y() - startY; 697 dY = viewportPos.y() - startY;
697 if ( dY < 0 ) 698 if ( dY < 0 )
698 dY = -dY; 699 dY = -dY;
699 //qDebug("%d %d %d ", dX, dY , blockmoveDist ); 700 //qDebug("%d %d %d ", dX, dY , blockmoveDist );
700 if ( dX > blockmoveDist || dY > blockmoveDist ) { 701 if ( dX > blockmoveDist || dY > blockmoveDist ) {
701 blockMoving = false; 702 blockMoving = false;
702 } 703 }
703 } 704 }
704 if (object != viewport()) { 705 if (object != viewport()) {
705 KOAgendaItem *moveItem = (KOAgendaItem *)object; 706 KOAgendaItem *moveItem = (KOAgendaItem *)object;
706 if (!moveItem->incidence()->isReadOnly() ) { 707 if (!moveItem->incidence()->isReadOnly() ) {
707 if (!mActionItem) 708 if (!mActionItem)
708 setNoActionCursor(moveItem,viewportPos); 709 setNoActionCursor(moveItem,viewportPos);
709 else { 710 else {
710 if ( !blockMoving ) 711 if ( !blockMoving )
711 performItemAction(viewportPos); 712 performItemAction(viewportPos);
712 } 713 }
713 } 714 }
714 } else { // ---------- viewport() 715 } else { // ---------- viewport()
715 if ( mActionType == SELECT ) { 716 if ( mActionType == SELECT ) {
716 performSelectAction( viewportPos ); 717 performSelectAction( viewportPos );
717 } 718 }
718 } 719 }
719 break; 720 break;
720 721
721 case QEvent::MouseButtonDblClick: 722 case QEvent::MouseButtonDblClick:
722 blockMoving = false; 723 blockMoving = false;
723 leftMouseDown = false; 724 leftMouseDown = false;
724 if (object == viewport()) { 725 if (object == viewport()) {
725 selectItem(0); 726 selectItem(0);
726 int x,y; 727 int x,y;
727 viewportToContents(viewportPos.x(),viewportPos.y(),x,y); 728 viewportToContents(viewportPos.x(),viewportPos.y(),x,y);
728 int gx,gy; 729 int gx,gy;
729 contentsToGrid(x,y,gx,gy); 730 contentsToGrid(x,y,gx,gy);
730 emit newEventSignal(gx,gy); 731 emit newEventSignal(gx,gy);
731 } else { 732 } else {
732 KOAgendaItem *doubleClickedItem = (KOAgendaItem *)object; 733 KOAgendaItem *doubleClickedItem = (KOAgendaItem *)object;
733 selectItem(doubleClickedItem); 734 selectItem(doubleClickedItem);
734 if ( KOPrefs::instance()->mEditOnDoubleClick ) 735 if ( KOPrefs::instance()->mEditOnDoubleClick )
735 emit editIncidenceSignal(doubleClickedItem->incidence()); 736 emit editIncidenceSignal(doubleClickedItem->incidence());
736 else 737 else
737 emit showIncidenceSignal(doubleClickedItem->incidence()); 738 emit showIncidenceSignal(doubleClickedItem->incidence());
738 } 739 }
739 break; 740 break;
740 741
741 default: 742 default:
742 break; 743 break;
743 } 744 }
744 return true; 745 return true;
745#endif 746#endif
746} 747}
747 748
748void KOAgenda::newItem( int item ) 749void KOAgenda::newItem( int item )
749{ 750{
750 if ( item == 1 ) { //new event 751 if ( item == 1 ) { //new event
751 newEventSignal(mStartCellX ,mStartCellY ); 752 newEventSignal(mStartCellX ,mStartCellY );
752 } else 753 } else
753 if ( item == 2 ) { //new event 754 if ( item == 2 ) { //new event
754 newTodoSignal(mStartCellX ,mStartCellY ); 755 newTodoSignal(mStartCellX ,mStartCellY );
755 } else 756 } else
756 { 757 {
757 emit showDateView( item, mStartCellX ); 758 emit showDateView( item, mStartCellX );
758 // 3Day view 759 // 3Day view
759 // 4Week view 760 // 4Week view
760 // 5Month view 761 // 5Month view
761 // 6Journal view 762 // 6Journal view
762 } 763 }
763} 764}
764void KOAgenda::startSelectAction(QPoint viewportPos) 765void KOAgenda::startSelectAction(QPoint viewportPos)
765{ 766{
766 //emit newStartSelectSignal(); 767 //emit newStartSelectSignal();
767 768
768 mActionType = SELECT; 769 mActionType = SELECT;
769 770
770 int x,y; 771 int x,y;
771 viewportToContents(viewportPos.x(),viewportPos.y(),x,y); 772 viewportToContents(viewportPos.x(),viewportPos.y(),x,y);
772 int gx,gy; 773 int gx,gy;
773 contentsToGrid(x,y,gx,gy); 774 contentsToGrid(x,y,gx,gy);
774 775
775 mStartCellX = gx; 776 mStartCellX = gx;
776 mStartCellY = gy; 777 mStartCellY = gy;
777 mCurrentCellX = gx; 778 mCurrentCellX = gx;
778 mCurrentCellY = gy; 779 mCurrentCellY = gy;
779 780
780 // Store coordinates of old selection 781 // Store coordinates of old selection
781 int selectionX = mSelectionCellX * mGridSpacingX; 782 int selectionX = mSelectionCellX * mGridSpacingX;
782 int selectionYTop = mSelectionYTop; 783 int selectionYTop = mSelectionYTop;
783 int selectionHeight = mSelectionHeight; 784 int selectionHeight = mSelectionHeight;
784 785
785 // Store new selection 786 // Store new selection
786 mSelectionCellX = gx; 787 mSelectionCellX = gx;
787 mSelectionYTop = gy * mGridSpacingY; 788 mSelectionYTop = gy * mGridSpacingY;
788 mSelectionHeight = mGridSpacingY; 789 mSelectionHeight = mGridSpacingY;
789 790
790 // Clear old selection 791 // Clear old selection
791 repaintContents( selectionX, selectionYTop, 792 repaintContents( selectionX, selectionYTop,
792 mGridSpacingX, selectionHeight,false ); 793 mGridSpacingX, selectionHeight,false );
793 794
794 // Paint new selection 795 // Paint new selection
795 // repaintContents( mSelectionCellX * mGridSpacingX, mSelectionYTop, 796 // repaintContents( mSelectionCellX * mGridSpacingX, mSelectionYTop,
796 // mGridSpacingX, mSelectionHeight ); 797 // mGridSpacingX, mSelectionHeight );
797} 798}
798 799
799void KOAgenda::performSelectAction(QPoint viewportPos) 800void KOAgenda::performSelectAction(QPoint viewportPos)
800{ 801{
801 int x,y; 802 int x,y;
802 viewportToContents(viewportPos.x(),viewportPos.y(),x,y); 803 viewportToContents(viewportPos.x(),viewportPos.y(),x,y);
803 int gx,gy; 804 int gx,gy;
804 contentsToGrid(x,y,gx,gy); 805 contentsToGrid(x,y,gx,gy);
805 806
806 QPoint clipperPos = clipper()-> 807 QPoint clipperPos = clipper()->
807 mapFromGlobal(viewport()->mapToGlobal(viewportPos)); 808 mapFromGlobal(viewport()->mapToGlobal(viewportPos));
808 809
809 // Scroll if cursor was moved to upper or lower end of agenda. 810 // Scroll if cursor was moved to upper or lower end of agenda.
810 if (clipperPos.y() < mScrollBorderWidth) { 811 if (clipperPos.y() < mScrollBorderWidth) {
811 mScrollUpTimer.start(mScrollDelay); 812 mScrollUpTimer.start(mScrollDelay);
812 } else if (visibleHeight() - clipperPos.y() < 813 } else if (visibleHeight() - clipperPos.y() <
813 mScrollBorderWidth) { 814 mScrollBorderWidth) {
814 mScrollDownTimer.start(mScrollDelay); 815 mScrollDownTimer.start(mScrollDelay);
815 } else { 816 } else {
816 mScrollUpTimer.stop(); 817 mScrollUpTimer.stop();
817 mScrollDownTimer.stop(); 818 mScrollDownTimer.stop();
818 } 819 }
819 820
820 if ( gy > mCurrentCellY ) { 821 if ( gy > mCurrentCellY ) {
821 mSelectionHeight = ( gy + 1 ) * mGridSpacingY - mSelectionYTop; 822 mSelectionHeight = ( gy + 1 ) * mGridSpacingY - mSelectionYTop;
822 823
823#if 0 824#if 0
824 // FIXME: Repaint only the newly selected region 825 // FIXME: Repaint only the newly selected region
825 repaintContents( mSelectionCellX * mGridSpacingX, 826 repaintContents( mSelectionCellX * mGridSpacingX,
826 mCurrentCellY + mGridSpacingY, 827 mCurrentCellY + mGridSpacingY,
827 mGridSpacingX, 828 mGridSpacingX,
828 mSelectionHeight - ( gy - mCurrentCellY - 1 ) * mGridSpacingY ); 829 mSelectionHeight - ( gy - mCurrentCellY - 1 ) * mGridSpacingY );
829#else 830#else
830 repaintContents( (KOGlobals::self()->reverseLayout() ? 831 repaintContents( (KOGlobals::self()->reverseLayout() ?
831 mColumns - 1 - mSelectionCellX : mSelectionCellX) * 832 mColumns - 1 - mSelectionCellX : mSelectionCellX) *
832 mGridSpacingX, mSelectionYTop, 833 mGridSpacingX, mSelectionYTop,
833 mGridSpacingX, mSelectionHeight , false); 834 mGridSpacingX, mSelectionHeight , false);
834#endif 835#endif
835 836
836 mCurrentCellY = gy; 837 mCurrentCellY = gy;
837 } else if ( gy < mCurrentCellY ) { 838 } else if ( gy < mCurrentCellY ) {
838 if ( gy >= mStartCellY ) { 839 if ( gy >= mStartCellY ) {
839 int selectionHeight = mSelectionHeight; 840 int selectionHeight = mSelectionHeight;
840 mSelectionHeight = ( gy + 1 ) * mGridSpacingY - mSelectionYTop; 841 mSelectionHeight = ( gy + 1 ) * mGridSpacingY - mSelectionYTop;
841 842
842 repaintContents( (KOGlobals::self()->reverseLayout() ? 843 repaintContents( (KOGlobals::self()->reverseLayout() ?
843 mColumns - 1 - mSelectionCellX : mSelectionCellX) * 844 mColumns - 1 - mSelectionCellX : mSelectionCellX) *
844 mGridSpacingX, mSelectionYTop, 845 mGridSpacingX, mSelectionYTop,
845 mGridSpacingX, selectionHeight,false ); 846 mGridSpacingX, selectionHeight,false );
846 847
847 mCurrentCellY = gy; 848 mCurrentCellY = gy;
848 } else { 849 } else {
849 } 850 }
850 } 851 }
851} 852}
852 853
853void KOAgenda::endSelectAction( bool emitNewEvent ) 854void KOAgenda::endSelectAction( bool emitNewEvent )
854{ 855{
855 mActionType = NOP; 856 mActionType = NOP;
856 mScrollUpTimer.stop(); 857 mScrollUpTimer.stop();
857 mScrollDownTimer.stop(); 858 mScrollDownTimer.stop();
858 859
859 emit newTimeSpanSignal(mStartCellX,mStartCellY,mCurrentCellX,mCurrentCellY); 860 emit newTimeSpanSignal(mStartCellX,mStartCellY,mCurrentCellX,mCurrentCellY);
860 if ( emitNewEvent && mStartCellY < mCurrentCellY ) { 861 if ( emitNewEvent && mStartCellY < mCurrentCellY ) {
861 qDebug("ew event signal "); 862 qDebug("ew event signal ");
862 emit newEventSignal(mStartCellX,mStartCellY,mCurrentCellX,mCurrentCellY); 863 emit newEventSignal(mStartCellX,mStartCellY,mCurrentCellX,mCurrentCellY);
863 } 864 }
864} 865}
865 866
866void KOAgenda::startItemAction(QPoint viewportPos) 867void KOAgenda::startItemAction(QPoint viewportPos)
867{ 868{
868 int x,y; 869 int x,y;
869 viewportToContents(viewportPos.x(),viewportPos.y(),x,y); 870 viewportToContents(viewportPos.x(),viewportPos.y(),x,y);
870 int gx,gy; 871 int gx,gy;
871 contentsToGrid(x,y,gx,gy); 872 contentsToGrid(x,y,gx,gy);
872 873
873 mStartCellX = gx; 874 mStartCellX = gx;
874 mStartCellY = gy; 875 mStartCellY = gy;
875 mCurrentCellX = gx; 876 mCurrentCellX = gx;
876 mCurrentCellY = gy; 877 mCurrentCellY = gy;
877 878
878 if (mAllDayMode) { 879 if (mAllDayMode) {
879 int gridDistanceX = (x - gx * mGridSpacingX); 880 int gridDistanceX = (x - gx * mGridSpacingX);
880 if (gridDistanceX < mResizeBorderWidth && 881 if (gridDistanceX < mResizeBorderWidth &&
881 mActionItem->cellX() == mCurrentCellX) { 882 mActionItem->cellX() == mCurrentCellX) {
882 mActionType = RESIZELEFT; 883 mActionType = RESIZELEFT;
883 setCursor(sizeHorCursor); 884 setCursor(sizeHorCursor);
884 } else if ((mGridSpacingX - gridDistanceX) < mResizeBorderWidth && 885 } else if ((mGridSpacingX - gridDistanceX) < mResizeBorderWidth &&
885 mActionItem->cellXWidth() == mCurrentCellX) { 886 mActionItem->cellXWidth() == mCurrentCellX) {
886 mActionType = RESIZERIGHT; 887 mActionType = RESIZERIGHT;
887 setCursor(sizeHorCursor); 888 setCursor(sizeHorCursor);
888 } else { 889 } else {
889 mActionType = MOVE; 890 mActionType = MOVE;
890 mActionItem->startMove(); 891 mActionItem->startMove();
891 setCursor(sizeAllCursor); 892 setCursor(sizeAllCursor);
892 } 893 }
893 } else { 894 } else {
894 int gridDistanceY = (y - gy * mGridSpacingY); 895 int gridDistanceY = (y - gy * mGridSpacingY);
895 bool allowResize = ( mActionItem->incidence()->type() != "Todo" ); 896 bool allowResize = ( mActionItem->incidence()->type() != "Todo" );
896 if (allowResize && gridDistanceY < mResizeBorderWidth && 897 if (allowResize && gridDistanceY < mResizeBorderWidth &&
897 mActionItem->cellYTop() == mCurrentCellY && 898 mActionItem->cellYTop() == mCurrentCellY &&
898 !mActionItem->firstMultiItem()) { 899 !mActionItem->firstMultiItem()) {
899 mActionType = RESIZETOP; 900 mActionType = RESIZETOP;
900 setCursor(sizeVerCursor); 901 setCursor(sizeVerCursor);
901 } else if (allowResize &&(mGridSpacingY - gridDistanceY) < mResizeBorderWidth && 902 } else if (allowResize &&(mGridSpacingY - gridDistanceY) < mResizeBorderWidth &&
902 mActionItem->cellYBottom() == mCurrentCellY && 903 mActionItem->cellYBottom() == mCurrentCellY &&
903 !mActionItem->lastMultiItem()) { 904 !mActionItem->lastMultiItem()) {
904 mActionType = RESIZEBOTTOM; 905 mActionType = RESIZEBOTTOM;
905 setCursor(sizeVerCursor); 906 setCursor(sizeVerCursor);
906 } else { 907 } else {
907 mActionType = MOVE; 908 mActionType = MOVE;
908 mActionItem->startMove(); 909 mActionItem->startMove();
909 setCursor(sizeAllCursor); 910 setCursor(sizeAllCursor);
910 } 911 }
911 } 912 }
912} 913}
913 914
914void KOAgenda::performItemAction(QPoint viewportPos) 915void KOAgenda::performItemAction(QPoint viewportPos)
915{ 916{
916// kdDebug() << "viewportPos: " << viewportPos.x() << "," << viewportPos.y() << endl; 917// kdDebug() << "viewportPos: " << viewportPos.x() << "," << viewportPos.y() << endl;
917// QPoint point = viewport()->mapToGlobal(viewportPos); 918// QPoint point = viewport()->mapToGlobal(viewportPos);
918// kdDebug() << "Global: " << point.x() << "," << point.y() << endl; 919// kdDebug() << "Global: " << point.x() << "," << point.y() << endl;
919// point = clipper()->mapFromGlobal(point); 920// point = clipper()->mapFromGlobal(point);
920// kdDebug() << "clipper: " << point.x() << "," << point.y() << endl; 921// kdDebug() << "clipper: " << point.x() << "," << point.y() << endl;
921// kdDebug() << "visible height: " << visibleHeight() << endl; 922// kdDebug() << "visible height: " << visibleHeight() << endl;
922 int x,y; 923 int x,y;
923 viewportToContents(viewportPos.x(),viewportPos.y(),x,y); 924 viewportToContents(viewportPos.x(),viewportPos.y(),x,y);
924// kdDebug() << "contents: " << x << "," << y << "\n" << endl; 925// kdDebug() << "contents: " << x << "," << y << "\n" << endl;
925 int gx,gy; 926 int gx,gy;
926 contentsToGrid(x,y,gx,gy); 927 contentsToGrid(x,y,gx,gy);
927 QPoint clipperPos = clipper()-> 928 QPoint clipperPos = clipper()->
928 mapFromGlobal(viewport()->mapToGlobal(viewportPos)); 929 mapFromGlobal(viewport()->mapToGlobal(viewportPos));
929 930
930 // Cursor left active agenda area. 931 // Cursor left active agenda area.
931 // This starts a drag. 932 // This starts a drag.
932 if ( /*clipperPos.y() < 0 || clipperPos.y() > visibleHeight() ||*/ 933 if ( /*clipperPos.y() < 0 || clipperPos.y() > visibleHeight() ||*/
933 clipperPos.x() < 0 || clipperPos.x() > visibleWidth() ) { 934 clipperPos.x() < 0 || clipperPos.x() > visibleWidth() ) {
934 if ( mActionType == MOVE ) { 935 if ( mActionType == MOVE ) {
935 mScrollUpTimer.stop(); 936 mScrollUpTimer.stop();
936 mScrollDownTimer.stop(); 937 mScrollDownTimer.stop();
937 mActionItem->resetMove(); 938 mActionItem->resetMove();
938 placeSubCells( mActionItem ); 939 placeSubCells( mActionItem );
939 // emit startDragSignal( mActionItem->incidence() ); 940 // emit startDragSignal( mActionItem->incidence() );
940 setCursor( arrowCursor ); 941 setCursor( arrowCursor );
941 mActionItem = 0; 942 mActionItem = 0;
942 mActionType = NOP; 943 mActionType = NOP;
943 mItemMoved = 0; 944 mItemMoved = 0;
944 return; 945 return;
945 } 946 }
946 } else { 947 } else {
947 switch ( mActionType ) { 948 switch ( mActionType ) {
948 case MOVE: 949 case MOVE:
949 setCursor( sizeAllCursor ); 950 setCursor( sizeAllCursor );
950 break; 951 break;
951 case RESIZETOP: 952 case RESIZETOP:
952 case RESIZEBOTTOM: 953 case RESIZEBOTTOM:
953 setCursor( sizeVerCursor ); 954 setCursor( sizeVerCursor );
954 break; 955 break;
955 case RESIZELEFT: 956 case RESIZELEFT:
956 case RESIZERIGHT: 957 case RESIZERIGHT:
957 setCursor( sizeHorCursor ); 958 setCursor( sizeHorCursor );
958 break; 959 break;
959 default: 960 default:
960 setCursor( arrowCursor ); 961 setCursor( arrowCursor );
961 } 962 }
962 } 963 }
963 964
964 // Scroll if item was moved to upper or lower end of agenda. 965 // Scroll if item was moved to upper or lower end of agenda.
965 if (clipperPos.y() < mScrollBorderWidth) { 966 if (clipperPos.y() < mScrollBorderWidth) {
966 mScrollUpTimer.start(mScrollDelay); 967 mScrollUpTimer.start(mScrollDelay);
967 } else if (visibleHeight() - clipperPos.y() < 968 } else if (visibleHeight() - clipperPos.y() <
968 mScrollBorderWidth) { 969 mScrollBorderWidth) {
969 mScrollDownTimer.start(mScrollDelay); 970 mScrollDownTimer.start(mScrollDelay);
970 } else { 971 } else {
971 mScrollUpTimer.stop(); 972 mScrollUpTimer.stop();
972 mScrollDownTimer.stop(); 973 mScrollDownTimer.stop();
973 } 974 }
974 975
975 // Move or resize item if necessary 976 // Move or resize item if necessary
976 if (mCurrentCellX != gx || mCurrentCellY != gy) { 977 if (mCurrentCellX != gx || mCurrentCellY != gy) {
977 mItemMoved = true; 978 mItemMoved = true;
978 mActionItem->raise(); 979 mActionItem->raise();
979 if (mActionType == MOVE) { 980 if (mActionType == MOVE) {
980 // Move all items belonging to a multi item 981 // Move all items belonging to a multi item
981 KOAgendaItem *moveItem = mActionItem->firstMultiItem(); 982 KOAgendaItem *moveItem = mActionItem->firstMultiItem();
982 bool isMultiItem = (moveItem || mActionItem->lastMultiItem()); 983 bool isMultiItem = (moveItem || mActionItem->lastMultiItem());
983 if (!moveItem) moveItem = mActionItem; 984 if (!moveItem) moveItem = mActionItem;
984 while (moveItem) { 985 while (moveItem) {
985 int dy; 986 int dy;
986 if (isMultiItem) dy = 0; 987 if (isMultiItem) dy = 0;
987 else dy = gy - mCurrentCellY; 988 else dy = gy - mCurrentCellY;
988 moveItem->moveRelative(gx - mCurrentCellX,dy); 989 moveItem->moveRelative(gx - mCurrentCellX,dy);
989 int x,y; 990 int x,y;
990 gridToContents(moveItem->cellX(),moveItem->cellYTop(),x,y); 991 gridToContents(moveItem->cellX(),moveItem->cellYTop(),x,y);
991 moveItem->resize(mGridSpacingX * moveItem->cellWidth(), 992 moveItem->resize(mGridSpacingX * moveItem->cellWidth(),
992 mGridSpacingY * moveItem->cellHeight()); 993 mGridSpacingY * moveItem->cellHeight());
993 moveChild(moveItem,x,y); 994 moveChild(moveItem,x,y);
994 moveItem = moveItem->nextMultiItem(); 995 moveItem = moveItem->nextMultiItem();
995 } 996 }
996 } else if (mActionType == RESIZETOP) { 997 } else if (mActionType == RESIZETOP) {
997 if (mCurrentCellY <= mActionItem->cellYBottom()) { 998 if (mCurrentCellY <= mActionItem->cellYBottom()) {
998 mActionItem->expandTop(gy - mCurrentCellY); 999 mActionItem->expandTop(gy - mCurrentCellY);
999 mActionItem->resize(mActionItem->width(), 1000 mActionItem->resize(mActionItem->width(),
1000 mGridSpacingY * mActionItem->cellHeight()); 1001 mGridSpacingY * mActionItem->cellHeight());
1001 int x,y; 1002 int x,y;
1002 gridToContents(mCurrentCellX,mActionItem->cellYTop(),x,y); 1003 gridToContents(mCurrentCellX,mActionItem->cellYTop(),x,y);
1003 //moveChild(mActionItem,childX(mActionItem),y); 1004 //moveChild(mActionItem,childX(mActionItem),y);
1004 QScrollView::moveChild( mActionItem,childX(mActionItem),y ); 1005 QScrollView::moveChild( mActionItem,childX(mActionItem),y );
1005 } 1006 }
1006 } else if (mActionType == RESIZEBOTTOM) { 1007 } else if (mActionType == RESIZEBOTTOM) {
1007 if (mCurrentCellY >= mActionItem->cellYTop()) { 1008 if (mCurrentCellY >= mActionItem->cellYTop()) {
1008 mActionItem->expandBottom(gy - mCurrentCellY); 1009 mActionItem->expandBottom(gy - mCurrentCellY);
1009 mActionItem->resize(mActionItem->width(), 1010 mActionItem->resize(mActionItem->width(),
1010 mGridSpacingY * mActionItem->cellHeight()); 1011 mGridSpacingY * mActionItem->cellHeight());
1011 } 1012 }
1012 } else if (mActionType == RESIZELEFT) { 1013 } else if (mActionType == RESIZELEFT) {
1013 if (mCurrentCellX <= mActionItem->cellXWidth()) { 1014 if (mCurrentCellX <= mActionItem->cellXWidth()) {
1014 mActionItem->expandLeft(gx - mCurrentCellX); 1015 mActionItem->expandLeft(gx - mCurrentCellX);
1015 mActionItem->resize(mGridSpacingX * mActionItem->cellWidth(), 1016 mActionItem->resize(mGridSpacingX * mActionItem->cellWidth(),
1016 mActionItem->height()); 1017 mActionItem->height());
1017 int x,y; 1018 int x,y;
1018 gridToContents(mActionItem->cellX(),mActionItem->cellYTop(),x,y); 1019 gridToContents(mActionItem->cellX(),mActionItem->cellYTop(),x,y);
1019 moveChild(mActionItem,x,childY(mActionItem)); 1020 moveChild(mActionItem,x,childY(mActionItem));
1020 } 1021 }
1021 } else if (mActionType == RESIZERIGHT) { 1022 } else if (mActionType == RESIZERIGHT) {
1022 if (mCurrentCellX >= mActionItem->cellX()) { 1023 if (mCurrentCellX >= mActionItem->cellX()) {
1023 mActionItem->expandRight(gx - mCurrentCellX); 1024 mActionItem->expandRight(gx - mCurrentCellX);
1024 mActionItem->resize(mGridSpacingX * mActionItem->cellWidth(), 1025 mActionItem->resize(mGridSpacingX * mActionItem->cellWidth(),
1025 mActionItem->height()); 1026 mActionItem->height());
1026 } 1027 }
1027 } 1028 }
1028 mCurrentCellX = gx; 1029 mCurrentCellX = gx;
1029 mCurrentCellY = gy; 1030 mCurrentCellY = gy;
1030 } 1031 }
1031} 1032}
1032 1033
1033void KOAgenda::endItemAction() 1034void KOAgenda::endItemAction()
1034{ 1035{
1035 1036
1036 if ( mItemMoved ) { 1037 if ( mItemMoved ) {
1037 KOAgendaItem *placeItem = mActionItem->firstMultiItem(); 1038 KOAgendaItem *placeItem = mActionItem->firstMultiItem();
1038 if ( !placeItem ) { 1039 if ( !placeItem ) {
1039 placeItem = mActionItem; 1040 placeItem = mActionItem;
1040 } 1041 }
1041 if ( placeItem->incidence()->recurrence()->doesRecur() ) { 1042 if ( placeItem->incidence()->recurrence()->doesRecur() ) {
1042 Incidence* oldInc = placeItem->incidence(); 1043 Incidence* oldInc = placeItem->incidence();
1043 placeItem->recreateIncidence(); 1044 placeItem->recreateIncidence();
1044 emit addToCalSignal(placeItem->incidence(), oldInc ); 1045 emit addToCalSignal(placeItem->incidence(), oldInc );
1045 } 1046 }
1046 int type = mActionType; 1047 int type = mActionType;
1047 if ( mAllDayMode ) 1048 if ( mAllDayMode )
1048 type = -1; 1049 type = -1;
1049 KOAgendaItem *modifiedItem = placeItem; 1050 KOAgendaItem *modifiedItem = placeItem;
1050 //emit itemModified( placeItem, mActionType /*KOGlobals::EVENTEDITED */); 1051 //emit itemModified( placeItem, mActionType /*KOGlobals::EVENTEDITED */);
1051 QPtrList<KOAgendaItem> oldconflictItems ;//= placeItem->conflictItems(); 1052 QPtrList<KOAgendaItem> oldconflictItems ;//= placeItem->conflictItems();
1052 KOAgendaItem *item; 1053 KOAgendaItem *item;
1053 1054
1054 if ( placeItem->incidence()->type() == "Todo" ) { 1055 if ( placeItem->incidence()->type() == "Todo" ) {
1055 mSelectedItem = 0; 1056 mSelectedItem = 0;
1056 //qDebug("todo %d %d %d ", mCurrentCellX, modifiedItem->cellX() ,modifiedItem->cellXWidth()); 1057 //qDebug("todo %d %d %d ", mCurrentCellX, modifiedItem->cellX() ,modifiedItem->cellXWidth());
1057 modifiedItem->mLastMoveXPos = mCurrentCellX; 1058 modifiedItem->mLastMoveXPos = mCurrentCellX;
1058 emit itemModified( modifiedItem, mActionType ); 1059 emit itemModified( modifiedItem, mActionType );
1059 } 1060 }
1060 else { 1061 else {
1061#if 0 1062#if 0
1062 for ( item=oldconflictItems.first(); item != 0; 1063 for ( item=oldconflictItems.first(); item != 0;
1063 item=oldconflictItems.next() ) { 1064 item=oldconflictItems.next() ) {
1064 placeSubCells(item); 1065 placeSubCells(item);
1065 } 1066 }
1066 while ( placeItem ) { 1067 while ( placeItem ) {
1067 //qDebug("placeItem %s ", placeItem->incidence()->summary().latin1()); 1068 //qDebug("placeItem %s ", placeItem->incidence()->summary().latin1());
1068 placeSubCells( placeItem ); 1069 placeSubCells( placeItem );
1069 placeItem = placeItem->nextMultiItem(); 1070 placeItem = placeItem->nextMultiItem();
1070 } 1071 }
1071#endif 1072#endif
1072 1073
1073 globalFlagBlockAgendaItemPaint = 1; 1074 globalFlagBlockAgendaItemPaint = 1;
1074 for ( item=oldconflictItems.first(); item != 0; 1075 for ( item=oldconflictItems.first(); item != 0;
1075 item=oldconflictItems.next() ) { 1076 item=oldconflictItems.next() ) {
1076 placeSubCells(item); 1077 placeSubCells(item);
1077 } 1078 }
1078 while ( placeItem ) { 1079 while ( placeItem ) {
1079 //qDebug("placeItem %s ", placeItem->incidence()->summary().latin1()); 1080 //qDebug("placeItem %s ", placeItem->incidence()->summary().latin1());
1080 oldconflictItems = placeItem->conflictItems(); 1081 oldconflictItems = placeItem->conflictItems();
1081 for ( item=oldconflictItems.first(); item != 0; 1082 for ( item=oldconflictItems.first(); item != 0;
1082 item=oldconflictItems.next() ) { 1083 item=oldconflictItems.next() ) {
1083 placeSubCells(item); 1084 placeSubCells(item);
1084 } 1085 }
1085 placeSubCells( placeItem ); 1086 placeSubCells( placeItem );
1086 placeItem = placeItem->nextMultiItem(); 1087 placeItem = placeItem->nextMultiItem();
1087 } 1088 }
1088 globalFlagBlockAgendaItemPaint = 0; 1089 globalFlagBlockAgendaItemPaint = 0;
1089 for ( item=oldconflictItems.first(); item != 0; 1090 for ( item=oldconflictItems.first(); item != 0;
1090 item=oldconflictItems.next() ) { 1091 item=oldconflictItems.next() ) {
1091 globalFlagBlockAgendaItemUpdate = 0; 1092 globalFlagBlockAgendaItemUpdate = 0;
1092 item->repaintMe(); 1093 item->repaintMe();
1093 globalFlagBlockAgendaItemUpdate = 1; 1094 globalFlagBlockAgendaItemUpdate = 1;
1094 item->repaint( false ); 1095 item->repaint( false );
1095 } 1096 }
1096 placeItem = modifiedItem; 1097 placeItem = modifiedItem;
1097 1098
1098 while ( placeItem ) { 1099 while ( placeItem ) {
1099 //qDebug("placeItem %s ", placeItem->incidence()->summary().latin1()); 1100 //qDebug("placeItem %s ", placeItem->incidence()->summary().latin1());
1100 globalFlagBlockAgendaItemUpdate = 0; 1101 globalFlagBlockAgendaItemUpdate = 0;
1101 placeItem->repaintMe(); 1102 placeItem->repaintMe();
1102 globalFlagBlockAgendaItemUpdate = 1; 1103 globalFlagBlockAgendaItemUpdate = 1;
1103 placeItem->repaint(false); 1104 placeItem->repaint(false);
1104 placeItem = placeItem->nextMultiItem(); 1105 placeItem = placeItem->nextMultiItem();
1105 } 1106 }
1106 emit itemModified( modifiedItem, mActionType ); 1107 emit itemModified( modifiedItem, mActionType );
1107 1108
1108 1109
1109 placeItem = modifiedItem; 1110 placeItem = modifiedItem;
1110 while ( placeItem ) { 1111 while ( placeItem ) {
1111 oldconflictItems = placeItem->conflictItems(); 1112 oldconflictItems = placeItem->conflictItems();
1112 for ( item=oldconflictItems.first(); item != 0; 1113 for ( item=oldconflictItems.first(); item != 0;
1113 item=oldconflictItems.next() ) { 1114 item=oldconflictItems.next() ) {
1114 placeSubCells(item); 1115 placeSubCells(item);
1115 } 1116 }
1116 placeSubCells( placeItem ); 1117 placeSubCells( placeItem );
1117 placeItem = placeItem->nextMultiItem(); 1118 placeItem = placeItem->nextMultiItem();
1118 1119
1119 } 1120 }
1120 placeItem = modifiedItem; 1121 placeItem = modifiedItem;
1121 while ( placeItem ) { 1122 while ( placeItem ) {
1122 oldconflictItems = placeItem->conflictItems(); 1123 oldconflictItems = placeItem->conflictItems();
1123 for ( item=oldconflictItems.first(); item != 0; 1124 for ( item=oldconflictItems.first(); item != 0;
1124 item=oldconflictItems.next() ) { 1125 item=oldconflictItems.next() ) {
1125 globalFlagBlockAgendaItemUpdate = 0; 1126 globalFlagBlockAgendaItemUpdate = 0;
1126 item->repaintMe(); 1127 item->repaintMe();
1127 globalFlagBlockAgendaItemUpdate = 1; 1128 globalFlagBlockAgendaItemUpdate = 1;
1128 item->repaint(false); 1129 item->repaint(false);
1129 } 1130 }
1130 placeItem = placeItem->nextMultiItem(); 1131 placeItem = placeItem->nextMultiItem();
1131 } 1132 }
1132 /* 1133 /*
1133 1134
1134 oldconflictItems = modifiedItem->conflictItems(); 1135 oldconflictItems = modifiedItem->conflictItems();
1135 for ( item=oldconflictItems.first(); item != 0; 1136 for ( item=oldconflictItems.first(); item != 0;
1136 item=oldconflictItems.next() ) { 1137 item=oldconflictItems.next() ) {
1137 globalFlagBlockAgendaItemUpdate = 0; 1138 globalFlagBlockAgendaItemUpdate = 0;
1138 item->paintMe(false); 1139 item->paintMe(false);
1139 globalFlagBlockAgendaItemUpdate = 1; 1140 globalFlagBlockAgendaItemUpdate = 1;
1140 item->repaint(false); 1141 item->repaint(false);
1141 } 1142 }
1142 */ 1143 */
1143 1144
1144 1145
1145 } 1146 }
1146 1147
1147 } 1148 }
1148 1149
1149 mScrollUpTimer.stop(); 1150 mScrollUpTimer.stop();
1150 mScrollDownTimer.stop(); 1151 mScrollDownTimer.stop();
1151 setCursor( arrowCursor ); 1152 setCursor( arrowCursor );
1152 mActionItem = 0; 1153 mActionItem = 0;
1153 mActionType = NOP; 1154 mActionType = NOP;
1154 mItemMoved = 0; 1155 mItemMoved = 0;
1155 1156
1156} 1157}
1157 1158
1158void KOAgenda::setNoActionCursor(KOAgendaItem *moveItem,QPoint viewportPos) 1159void KOAgenda::setNoActionCursor(KOAgendaItem *moveItem,QPoint viewportPos)
1159{ 1160{
1160// kdDebug() << "viewportPos: " << viewportPos.x() << "," << viewportPos.y() << endl; 1161// kdDebug() << "viewportPos: " << viewportPos.x() << "," << viewportPos.y() << endl;
1161// QPoint point = viewport()->mapToGlobal(viewportPos); 1162// QPoint point = viewport()->mapToGlobal(viewportPos);
1162// kdDebug() << "Global: " << point.x() << "," << point.y() << endl; 1163// kdDebug() << "Global: " << point.x() << "," << point.y() << endl;
1163// point = clipper()->mapFromGlobal(point); 1164// point = clipper()->mapFromGlobal(point);
1164// kdDebug() << "clipper: " << point.x() << "," << point.y() << endl; 1165// kdDebug() << "clipper: " << point.x() << "," << point.y() << endl;
1165 1166
1166 int x,y; 1167 int x,y;
1167 viewportToContents(viewportPos.x(),viewportPos.y(),x,y); 1168 viewportToContents(viewportPos.x(),viewportPos.y(),x,y);
1168// kdDebug() << "contents: " << x << "," << y << "\n" << endl; 1169// kdDebug() << "contents: " << x << "," << y << "\n" << endl;
1169 int gx,gy; 1170 int gx,gy;
1170 contentsToGrid(x,y,gx,gy); 1171 contentsToGrid(x,y,gx,gy);
1171 1172
1172 // Change cursor to resize cursor if appropriate 1173 // Change cursor to resize cursor if appropriate
1173 if (mAllDayMode) { 1174 if (mAllDayMode) {
1174 int gridDistanceX = (x - gx * mGridSpacingX); 1175 int gridDistanceX = (x - gx * mGridSpacingX);
1175 if (gridDistanceX < mResizeBorderWidth && 1176 if (gridDistanceX < mResizeBorderWidth &&
1176 moveItem->cellX() == gx) { 1177 moveItem->cellX() == gx) {
1177 setCursor(sizeHorCursor); 1178 setCursor(sizeHorCursor);
1178 } else if ((mGridSpacingX - gridDistanceX) < mResizeBorderWidth && 1179 } else if ((mGridSpacingX - gridDistanceX) < mResizeBorderWidth &&
1179 moveItem->cellXWidth() == gx) { 1180 moveItem->cellXWidth() == gx) {
1180 setCursor(sizeHorCursor); 1181 setCursor(sizeHorCursor);
1181 } else { 1182 } else {
1182 setCursor(arrowCursor); 1183 setCursor(arrowCursor);
1183 } 1184 }
1184 } else { 1185 } else {
1185 int gridDistanceY = (y - gy * mGridSpacingY); 1186 int gridDistanceY = (y - gy * mGridSpacingY);
1186 if (gridDistanceY < mResizeBorderWidth && 1187 if (gridDistanceY < mResizeBorderWidth &&
1187 moveItem->cellYTop() == gy && 1188 moveItem->cellYTop() == gy &&
1188 !moveItem->firstMultiItem()) { 1189 !moveItem->firstMultiItem()) {
1189 setCursor(sizeVerCursor); 1190 setCursor(sizeVerCursor);
1190 } else if ((mGridSpacingY - gridDistanceY) < mResizeBorderWidth && 1191 } else if ((mGridSpacingY - gridDistanceY) < mResizeBorderWidth &&
1191 moveItem->cellYBottom() == gy && 1192 moveItem->cellYBottom() == gy &&
1192 !moveItem->lastMultiItem()) { 1193 !moveItem->lastMultiItem()) {
1193 setCursor(sizeVerCursor); 1194 setCursor(sizeVerCursor);
1194 } else { 1195 } else {
1195 setCursor(arrowCursor); 1196 setCursor(arrowCursor);
1196 } 1197 }
1197 } 1198 }
1198} 1199}
1199 1200
1200 1201
1201/* 1202/*
1202 Place item in cell and take care that multiple items using the same cell do 1203 Place item in cell and take care that multiple items using the same cell do
1203 not overlap. This method is not yet optimal. It doesn´t use the maximum space 1204 not overlap. This method is not yet optimal. It doesn´t use the maximum space
1204 it can get in all cases. 1205 it can get in all cases.
1205 At the moment the method has a bug: When an item is placed only the sub cell 1206 At the moment the method has a bug: When an item is placed only the sub cell
1206 widths of the items are changed, which are within the Y region the item to 1207 widths of the items are changed, which are within the Y region the item to
1207 place spans. When the sub cell width change of one of this items affects a 1208 place spans. When the sub cell width change of one of this items affects a
1208 cell, where other items are, which do not overlap in Y with the item to place, 1209 cell, where other items are, which do not overlap in Y with the item to place,
1209 the display gets corrupted, although the corruption looks quite nice. 1210 the display gets corrupted, although the corruption looks quite nice.
1210*/ 1211*/
1211void KOAgenda::placeSubCells(KOAgendaItem *placeItem) 1212void KOAgenda::placeSubCells(KOAgendaItem *placeItem)
1212{ 1213{
1213 1214
1214 QPtrList<KOAgendaItem> conflictItems; 1215 QPtrList<KOAgendaItem> conflictItems;
1215 int maxSubCells = 0; 1216 int maxSubCells = 0;
1216 QIntDict<KOAgendaItem> subCellDict(5); 1217 QIntDict<KOAgendaItem> subCellDict(5);
1217 1218
1218 KOAgendaItem *item; 1219 KOAgendaItem *item;
1219 for ( item=mItems.first(); item != 0; item=mItems.next() ) { 1220 for ( item=mItems.first(); item != 0; item=mItems.next() ) {
1220 if (item != placeItem) { 1221 if (item != placeItem) {
1221 if (placeItem->cellX() <= item->cellXWidth() && 1222 if (placeItem->cellX() <= item->cellXWidth() &&
1222 placeItem->cellXWidth() >= item->cellX()) { 1223 placeItem->cellXWidth() >= item->cellX()) {
1223 if ((placeItem->cellYTop() <= item->cellYBottom()) && 1224 if ((placeItem->cellYTop() <= item->cellYBottom()) &&
1224 (placeItem->cellYBottom() >= item->cellYTop())) { 1225 (placeItem->cellYBottom() >= item->cellYTop())) {
1225 conflictItems.append(item); 1226 conflictItems.append(item);
1226 if (item->subCells() > maxSubCells) 1227 if (item->subCells() > maxSubCells)
1227 maxSubCells = item->subCells(); 1228 maxSubCells = item->subCells();
1228 subCellDict.insert(item->subCell(),item); 1229 subCellDict.insert(item->subCell(),item);
1229 } 1230 }
1230 } 1231 }
1231 } 1232 }
1232 } 1233 }
1233 1234
1234 if (conflictItems.count() > 0) { 1235 if (conflictItems.count() > 0) {
1235 // Look for unused sub cell and insert item 1236 // Look for unused sub cell and insert item
1236 int i; 1237 int i;
1237 for(i=0;i<maxSubCells;++i) { 1238 for(i=0;i<maxSubCells;++i) {
1238 if (!subCellDict.find(i)) { 1239 if (!subCellDict.find(i)) {
1239 placeItem->setSubCell(i); 1240 placeItem->setSubCell(i);
1240 break; 1241 break;
1241 } 1242 }
1242 } 1243 }
1243 if (i == maxSubCells) { 1244 if (i == maxSubCells) {
1244 placeItem->setSubCell(maxSubCells); 1245 placeItem->setSubCell(maxSubCells);
1245 maxSubCells++; // add new item to number of sub cells 1246 maxSubCells++; // add new item to number of sub cells
1246 } 1247 }
1247 1248
1248 // Prepare for sub cell geometry adjustment 1249 // Prepare for sub cell geometry adjustment
1249 int newSubCellWidth; 1250 int newSubCellWidth;
1250 if (mAllDayMode) newSubCellWidth = mGridSpacingY / maxSubCells; 1251 if (mAllDayMode) newSubCellWidth = mGridSpacingY / maxSubCells;
1251 else newSubCellWidth = mGridSpacingX / maxSubCells; 1252 else newSubCellWidth = mGridSpacingX / maxSubCells;
1252 conflictItems.append(placeItem); 1253 conflictItems.append(placeItem);
1253 1254
1254 1255
1255 // Adjust sub cell geometry of all direct conflict items 1256 // Adjust sub cell geometry of all direct conflict items
1256 for ( item=conflictItems.first(); item != 0; 1257 for ( item=conflictItems.first(); item != 0;
1257 item=conflictItems.next() ) { 1258 item=conflictItems.next() ) {
1258 item->setSubCells(maxSubCells); 1259 item->setSubCells(maxSubCells);
1259 if (mAllDayMode) { 1260 if (mAllDayMode) {
1260 item->resize(item->cellWidth() * mGridSpacingX, newSubCellWidth); 1261 item->resize(item->cellWidth() * mGridSpacingX, newSubCellWidth);
1261 } else { 1262 } else {
1262 item->resize(newSubCellWidth, item->cellHeight() * mGridSpacingY); 1263 item->resize(newSubCellWidth, item->cellHeight() * mGridSpacingY);
1263 } 1264 }
1264 int x,y; 1265 int x,y;
1265 gridToContents(item->cellX(),item->cellYTop(),x,y); 1266 gridToContents(item->cellX(),item->cellYTop(),x,y);
1266 if (mAllDayMode) { 1267 if (mAllDayMode) {
1267 y += item->subCell() * newSubCellWidth; 1268 y += item->subCell() * newSubCellWidth;
1268 } else { 1269 } else {
1269 x += item->subCell() * newSubCellWidth; 1270 x += item->subCell() * newSubCellWidth;
1270 } 1271 }
1271 moveChild(item,x,y); 1272 moveChild(item,x,y);
1272 // qDebug("moveChild %s %d %d ", item->incidence()->summary().latin1() ,x,y); 1273 // qDebug("moveChild %s %d %d ", item->incidence()->summary().latin1() ,x,y);
1273 //item->updateItem(); 1274 //item->updateItem();
1274 } 1275 }
1275 // Adjust sub cell geometry of all conflict items of all conflict items 1276 // Adjust sub cell geometry of all conflict items of all conflict items
1276 for ( item=conflictItems.first(); item != 0; 1277 for ( item=conflictItems.first(); item != 0;
1277 item=conflictItems.next() ) { 1278 item=conflictItems.next() ) {
1278 if ( placeItem != item ) { 1279 if ( placeItem != item ) {
1279 KOAgendaItem *item2; 1280 KOAgendaItem *item2;
1280 QPtrList<KOAgendaItem> conflictItems2 = item->conflictItems(); 1281 QPtrList<KOAgendaItem> conflictItems2 = item->conflictItems();
1281 for ( item2=conflictItems2.first(); item2 != 0; 1282 for ( item2=conflictItems2.first(); item2 != 0;
1282 item2=conflictItems2.next() ) { 1283 item2=conflictItems2.next() ) {