summaryrefslogtreecommitdiffabout
Unidiff
Diffstat (more/less context) (ignore whitespace changes)
-rw-r--r--korganizer/koagendaview.cpp24
-rw-r--r--korganizer/kodaymatrix.cpp6
-rw-r--r--microkde/KDGanttMinimizeSplitter.cpp13
3 files changed, 33 insertions, 10 deletions
diff --git a/korganizer/koagendaview.cpp b/korganizer/koagendaview.cpp
index 1627dba..2b05d37 100644
--- a/korganizer/koagendaview.cpp
+++ b/korganizer/koagendaview.cpp
@@ -1,409 +1,416 @@
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 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 <qhbox.h> 24#include <qhbox.h>
25#include <qvbox.h> 25#include <qvbox.h>
26#include <qlabel.h> 26#include <qlabel.h>
27#include <qframe.h> 27#include <qframe.h>
28#include <qlayout.h> 28#include <qlayout.h>
29#ifndef KORG_NOSPLITTER 29#ifndef KORG_NOSPLITTER
30#include <qsplitter.h> 30#include <qsplitter.h>
31#endif 31#endif
32#include <qfont.h> 32#include <qfont.h>
33#include <qfontmetrics.h> 33#include <qfontmetrics.h>
34#include <qpopupmenu.h> 34#include <qpopupmenu.h>
35#include <qtooltip.h> 35#include <qtooltip.h>
36#include <qpainter.h> 36#include <qpainter.h>
37#include <qpushbutton.h> 37#include <qpushbutton.h>
38#include <qapplication.h> 38#include <qapplication.h>
39 39
40#include <kapplication.h> 40#include <kapplication.h>
41#include <KDGanttMinimizeSplitter.h> 41#include <KDGanttMinimizeSplitter.h>
42#include <kdebug.h> 42#include <kdebug.h>
43#include <kstandarddirs.h> 43#include <kstandarddirs.h>
44#include <kiconloader.h> 44#include <kiconloader.h>
45#include <klocale.h> 45#include <klocale.h>
46#include <kconfig.h> 46#include <kconfig.h>
47#include <kglobal.h> 47#include <kglobal.h>
48#include "calendarview.h" 48#include "calendarview.h"
49#include "koviewmanager.h" 49#include "koviewmanager.h"
50 50
51#include <libkcal/calendar.h> 51#include <libkcal/calendar.h>
52#include <libkcal/icaldrag.h> 52#include <libkcal/icaldrag.h>
53#include <libkcal/dndfactory.h> 53#include <libkcal/dndfactory.h>
54 54
55#include <kcalendarsystem.h> 55#include <kcalendarsystem.h>
56 56
57#include "koglobals.h" 57#include "koglobals.h"
58#ifndef KORG_NOPLUGINS 58#ifndef KORG_NOPLUGINS
59#include "kocore.h" 59#include "kocore.h"
60#endif 60#endif
61#include "koprefs.h" 61#include "koprefs.h"
62#include "koagenda.h" 62#include "koagenda.h"
63#include "koagendaitem.h" 63#include "koagendaitem.h"
64#ifndef KORG_NOPRINTER 64#ifndef KORG_NOPRINTER
65#include "calprinter.h" 65#include "calprinter.h"
66#endif 66#endif
67 67
68#include "koagendaview.h" 68#include "koagendaview.h"
69//#include "koagendaview.moc" 69//#include "koagendaview.moc"
70 70
71//extern bool globalFlagBlockPainting; 71//extern bool globalFlagBlockPainting;
72extern int globalFlagBlockAgenda; 72extern int globalFlagBlockAgenda;
73extern int globalFlagBlockStartup; 73extern int globalFlagBlockStartup;
74extern int globalFlagBlockAgendaItemPaint; 74extern int globalFlagBlockAgendaItemPaint;
75extern int globalFlagBlockAgendaItemUpdate; 75extern int globalFlagBlockAgendaItemUpdate;
76extern int globalFlagBlockLabel; 76extern int globalFlagBlockLabel;
77using namespace KOrg; 77using namespace KOrg;
78 78
79 79
80 80
81TimeLabels::TimeLabels(int rows,QWidget *parent,const char *name,WFlags f) : 81TimeLabels::TimeLabels(int rows,QWidget *parent,const char *name,WFlags f) :
82 QScrollView(parent,name,f) 82 QScrollView(parent,name,f)
83{ 83{
84 myPix.resize( 1, 1 ); 84 myPix.resize( 1, 1 );
85 mRows = rows; 85 mRows = rows;
86 86
87 mRedrawNeeded = true; 87 mRedrawNeeded = true;
88 setMinimumHeight( 20 ); 88 setMinimumHeight( 20 );
89 mCellHeight = KOPrefs::instance()->mHourSize*4; 89 mCellHeight = KOPrefs::instance()->mHourSize*4;
90 90
91 enableClipper(true); 91 enableClipper(true);
92 92
93 setHScrollBarMode(AlwaysOff); 93 setHScrollBarMode(AlwaysOff);
94 setVScrollBarMode(AlwaysOff); 94 setVScrollBarMode(AlwaysOff);
95 95
96 resizeContents(50,mRows * mCellHeight); 96 resizeContents(50,mRows * mCellHeight);
97 97
98 viewport()->setBackgroundMode( PaletteBackground ); 98 viewport()->setBackgroundMode( PaletteBackground );
99} 99}
100 100
101void TimeLabels::setCellHeight(int height) 101void TimeLabels::setCellHeight(int height)
102{ 102{
103 mCellHeight = height; 103 mCellHeight = height;
104} 104}
105 105
106/* 106/*
107 Optimization so that only the "dirty" portion of the scroll view 107 Optimization so that only the "dirty" portion of the scroll view
108 is redrawn. Unfortunately, this is not called by default paintEvent() method. 108 is redrawn. Unfortunately, this is not called by default paintEvent() method.
109*/ 109*/
110void TimeLabels::drawContents(QPainter *p,int cx, int cy, int cw, int ch) 110void TimeLabels::drawContents(QPainter *p,int cx, int cy, int cw, int ch)
111{ 111{
112 112
113 // if ( globalFlagBlockAgenda ) 113 // if ( globalFlagBlockAgenda )
114 // return; 114 // return;
115 // bug: the parameters cx, cy, cw, ch are the areas that need to be 115 // bug: the parameters cx, cy, cw, ch are the areas that need to be
116 // redrawn, not the area of the widget. unfortunately, this 116 // redrawn, not the area of the widget. unfortunately, this
117 // code assumes the latter... 117 // code assumes the latter...
118 118
119 // now, for a workaround... 119 // now, for a workaround...
120 // these two assignments fix the weird redraw bug 120 // these two assignments fix the weird redraw bug
121 mRedrawNeeded = true; 121 mRedrawNeeded = true;
122 if ( mRedrawNeeded ) { 122 if ( mRedrawNeeded ) {
123 cx = contentsX() + frameWidth()*2; 123 cx = contentsX() + frameWidth()*2;
124 cw = contentsWidth() ; 124 cw = contentsWidth() ;
125 // end of workaround 125 // end of workaround
126 126
127 int cell = ((int)(cy/mCellHeight)); 127 int cell = ((int)(cy/mCellHeight));
128 int y = cell * mCellHeight; 128 int y = cell * mCellHeight;
129 QFontMetrics fm = fontMetrics(); 129 QFontMetrics fm = fontMetrics();
130 QString hour; 130 QString hour;
131 QString suffix; 131 QString suffix;
132 int timeHeight = fm.ascent(); 132 int timeHeight = fm.ascent();
133 QFont nFont = p->font(); 133 QFont nFont = p->font();
134 134
135 if (!KGlobal::locale()->use12Clock()) 135 if (!KGlobal::locale()->use12Clock()) {
136 suffix = "00"; 136 if ( QApplication::desktop()->width() <= 320 )
137 suffix = "";
138 else
139 suffix = "00";
140 }
137 141
138 if ( timeHeight > mCellHeight ) { 142 if ( timeHeight > mCellHeight ) {
139 timeHeight = mCellHeight-1; 143 timeHeight = mCellHeight-1;
140 int pointS = nFont.pointSize(); 144 int pointS = nFont.pointSize();
141 while ( pointS > 4 ) { 145 while ( pointS > 4 ) {
142 nFont.setPointSize( pointS ); 146 nFont.setPointSize( pointS );
143 fm = QFontMetrics( nFont ); 147 fm = QFontMetrics( nFont );
144 if ( fm.ascent() < mCellHeight ) 148 if ( fm.ascent() < mCellHeight )
145 break; 149 break;
146 -- pointS; 150 -- pointS;
147 } 151 }
148 fm = QFontMetrics( nFont ); 152 fm = QFontMetrics( nFont );
149 timeHeight = fm.ascent(); 153 timeHeight = fm.ascent();
150 } 154 }
151 //timeHeight -= (timeHeight/4-2); 155 //timeHeight -= (timeHeight/4-2);
152 QFont sFont = nFont; 156 QFont sFont = nFont;
153 sFont.setPointSize( sFont.pointSize()/2 ); 157 sFont.setPointSize( sFont.pointSize()/2 );
154 QFontMetrics fmS( sFont ); 158 QFontMetrics fmS( sFont );
155 int sHei = fmS.ascent() ; 159 int sHei = fmS.ascent() ;
156 //sHei -= (sHei/4-2); 160 //sHei -= (sHei/4-2);
157 int startW = this->width() - frameWidth()-2; 161 int startW = this->width() - frameWidth()-2;
158 int tw2 = fmS.width(suffix); 162 int tw2 = fmS.width(suffix);
159 while (y < cy + ch) { 163 while (y < cy + ch) {
160 p->drawLine(cx,y,cw,y); 164 p->drawLine(cx,y,cw,y);
161 hour.setNum(cell); 165 hour.setNum(cell);
162
163 // handle 24h and am/pm time formats 166 // handle 24h and am/pm time formats
164 if (KGlobal::locale()->use12Clock()) { 167 if (KGlobal::locale()->use12Clock()) {
165 if (cell > 11) suffix = "pm"; 168 if (cell > 11) suffix = "pm";
166 else 169 else
167 suffix = "am"; 170 suffix = "am";
168 if (cell == 0) hour.setNum(12); 171 if (cell == 0) hour.setNum(12);
169 if (cell > 12) hour.setNum(cell - 12); 172 if (cell > 12) hour.setNum(cell - 12);
170 tw2 = fmS.width(suffix); 173 tw2 = fmS.width(suffix);
171 } 174 }
172 175
173 // center and draw the time label 176 // center and draw the time label
174 int timeWidth = fm.width(hour); 177 int timeWidth = fm.width(hour);
175 int offset = startW - timeWidth - tw2 ; 178 int offset = startW - timeWidth - tw2 ;
176 p->setFont( nFont ); 179 p->setFont( nFont );
177 p->drawText( offset, y+ timeHeight, hour); 180 p->drawText( offset, y+ timeHeight, hour);
178 p->setFont( sFont ); 181 p->setFont( sFont );
179 offset = startW - tw2+1; 182 offset = startW - tw2+1;
180 p->drawText( offset, y+ sHei, suffix); 183 p->drawText( offset, y+ sHei, suffix);
181 184
182 // increment indices 185 // increment indices
183 y += mCellHeight; 186 y += mCellHeight;
184 cell++; 187 cell++;
185 } 188 }
186 } else { 189 } else {
187 //qDebug("NO redraw "); 190 //qDebug("NO redraw ");
188 } 191 }
189 // double buffer not yet implemented 192 // double buffer not yet implemented
190 //bitBlt (this, 0, 0, &myPix, 0 ,0,width(), height() ,CopyROP); 193 //bitBlt (this, 0, 0, &myPix, 0 ,0,width(), height() ,CopyROP);
191 //mRedrawNeeded = false; 194 //mRedrawNeeded = false;
192} 195}
193 196
194/** 197/**
195 Calculates the minimum width. 198 Calculates the minimum width.
196*/ 199*/
197int TimeLabels::minimumWidth() const 200int TimeLabels::minimumWidth() const
198{ 201{
199 return mMiniWidth; 202 return mMiniWidth;
200} 203}
201 204
202/** updates widget's internal state */ 205/** updates widget's internal state */
203void TimeLabels::updateConfig() 206void TimeLabels::updateConfig()
204{ 207{
205 mRedrawNeeded = true; 208 mRedrawNeeded = true;
206 // set the font 209 // set the font
207 // config->setGroup("Fonts"); 210 // config->setGroup("Fonts");
208 // QFont font = config->readFontEntry("TimeBar Font"); 211 // QFont font = config->readFontEntry("TimeBar Font");
209 setFont(KOPrefs::instance()->mTimeBarFont); 212 setFont(KOPrefs::instance()->mTimeBarFont);
210 QString test = "20"; 213 QString test = "20";
211 if (KGlobal::locale()->use12Clock()) 214 if (KGlobal::locale()->use12Clock())
212 test = "12"; 215 test = "12";
213 mMiniWidth = fontMetrics().width(test); 216 mMiniWidth = fontMetrics().width(test);
214 if (KGlobal::locale()->use12Clock()) 217 if (KGlobal::locale()->use12Clock())
215 test = "pm"; 218 test = "pm";
216 else 219 else {
217 test = "00"; 220 if ( QApplication::desktop()->width() <= 320 )
221 test = "";
222 else
223 test = "00";
224 }
218 QFont sFont = font(); 225 QFont sFont = font();
219 sFont.setPointSize( sFont.pointSize()/2 ); 226 sFont.setPointSize( sFont.pointSize()/2 );
220 QFontMetrics fmS( sFont ); 227 QFontMetrics fmS( sFont );
221 mMiniWidth += fmS.width( test ) + frameWidth()*2 +4 ; 228 mMiniWidth += fmS.width( test ) + frameWidth()*2 +4 ;
222 // update geometry restrictions based on new settings 229 // update geometry restrictions based on new settings
223 setFixedWidth( mMiniWidth ); 230 setFixedWidth( mMiniWidth );
224 231
225 // update HourSize 232 // update HourSize
226 mCellHeight = KOPrefs::instance()->mHourSize*4; 233 mCellHeight = KOPrefs::instance()->mHourSize*4;
227 resizeContents(50,mRows * mCellHeight); 234 resizeContents(50,mRows * mCellHeight);
228} 235}
229 236
230/** update time label positions */ 237/** update time label positions */
231void TimeLabels::positionChanged() 238void TimeLabels::positionChanged()
232{ 239{
233 int adjustment = mAgenda->contentsY(); 240 int adjustment = mAgenda->contentsY();
234 setContentsPos(0, adjustment); 241 setContentsPos(0, adjustment);
235} 242}
236 243
237/** */ 244/** */
238void TimeLabels::setAgenda(KOAgenda* agenda) 245void TimeLabels::setAgenda(KOAgenda* agenda)
239{ 246{
240 mAgenda = agenda; 247 mAgenda = agenda;
241} 248}
242 249
243void TimeLabels::contentsMousePressEvent ( QMouseEvent * e) 250void TimeLabels::contentsMousePressEvent ( QMouseEvent * e)
244{ 251{
245 mMouseDownY = e->pos().y(); 252 mMouseDownY = e->pos().y();
246 mOrgCap = topLevelWidget()->caption(); 253 mOrgCap = topLevelWidget()->caption();
247} 254}
248 255
249void TimeLabels::contentsMouseMoveEvent ( QMouseEvent * e ) 256void TimeLabels::contentsMouseMoveEvent ( QMouseEvent * e )
250{ 257{
251 int diff = mMouseDownY - e->pos().y(); 258 int diff = mMouseDownY - e->pos().y();
252 if ( diff < 10 && diff > -10 ) 259 if ( diff < 10 && diff > -10 )
253 return; 260 return;
254 int tSize = KOPrefs::instance()->mHourSize + (diff/10) ; 261 int tSize = KOPrefs::instance()->mHourSize + (diff/10) ;
255 if ( tSize < 4 ) 262 if ( tSize < 4 )
256 tSize = 4; 263 tSize = 4;
257 if ( tSize > 22 ) 264 if ( tSize > 22 )
258 tSize = 22; 265 tSize = 22;
259 tSize = (tSize-2)/2; 266 tSize = (tSize-2)/2;
260 topLevelWidget()->setCaption(i18n("New Agendasize: %1").arg(tSize)); 267 topLevelWidget()->setCaption(i18n("New Agendasize: %1").arg(tSize));
261 268
262} 269}
263void TimeLabels::contentsMouseReleaseEvent ( QMouseEvent * e ) 270void TimeLabels::contentsMouseReleaseEvent ( QMouseEvent * e )
264{ 271{
265 topLevelWidget()->setCaption( mOrgCap ); 272 topLevelWidget()->setCaption( mOrgCap );
266 int diff = mMouseDownY - e->pos().y(); 273 int diff = mMouseDownY - e->pos().y();
267 if ( diff < 10 && diff > -10 ) 274 if ( diff < 10 && diff > -10 )
268 return; 275 return;
269 int tSize = KOPrefs::instance()->mHourSize + (diff/10); 276 int tSize = KOPrefs::instance()->mHourSize + (diff/10);
270 if ( tSize < 4 ) 277 if ( tSize < 4 )
271 tSize = 4; 278 tSize = 4;
272 if ( tSize > 22 ) 279 if ( tSize > 22 )
273 tSize = 22; 280 tSize = 22;
274 tSize = (tSize/2)*2; 281 tSize = (tSize/2)*2;
275 if ( tSize == KOPrefs::instance()->mHourSize ) 282 if ( tSize == KOPrefs::instance()->mHourSize )
276 return; 283 return;
277 KOPrefs::instance()->mHourSize = tSize; 284 KOPrefs::instance()->mHourSize = tSize;
278 emit scaleChanged(); 285 emit scaleChanged();
279} 286}
280 287
281/** This is called in response to repaint() */ 288/** This is called in response to repaint() */
282void TimeLabels::paintEvent(QPaintEvent*) 289void TimeLabels::paintEvent(QPaintEvent*)
283{ 290{
284 291
285 // kdDebug() << "paintevent..." << endl; 292 // kdDebug() << "paintevent..." << endl;
286 // this is another hack! 293 // this is another hack!
287 // QPainter painter(this); 294 // QPainter painter(this);
288 //QString c 295 //QString c
289 repaintContents(contentsX(), contentsY(), visibleWidth(), visibleHeight()); 296 repaintContents(contentsX(), contentsY(), visibleWidth(), visibleHeight());
290} 297}
291 298
292//////////////////////////////////////////////////////////////////////////// 299////////////////////////////////////////////////////////////////////////////
293 300
294EventIndicator::EventIndicator(Location loc,QWidget *parent,const char *name) 301EventIndicator::EventIndicator(Location loc,QWidget *parent,const char *name)
295 : QFrame(parent,name) 302 : QFrame(parent,name)
296{ 303{
297 mColumns = 1; 304 mColumns = 1;
298 mTopBox = 0; 305 mTopBox = 0;
299 mLocation = loc; 306 mLocation = loc;
300 mTopLayout = 0; 307 mTopLayout = 0;
301 mPaintWidget = 0; 308 mPaintWidget = 0;
302 mXOffset = 0; 309 mXOffset = 0;
303 if (mLocation == Top) mPixmap = SmallIcon("1uparrow"); 310 if (mLocation == Top) mPixmap = SmallIcon("1uparrow");
304 else mPixmap = SmallIcon("1downarrow"); 311 else mPixmap = SmallIcon("1downarrow");
305 mEnabled.resize(mColumns); 312 mEnabled.resize(mColumns);
306 mEnabled.fill( false ); 313 mEnabled.fill( false );
307 setMinimumHeight(mPixmap.height()); 314 setMinimumHeight(mPixmap.height());
308} 315}
309 316
310EventIndicator::~EventIndicator() 317EventIndicator::~EventIndicator()
311{ 318{
312} 319}
313 320
314void EventIndicator::drawContents(QPainter *p) 321void EventIndicator::drawContents(QPainter *p)
315{ 322{
316 323
317 // kdDebug() << "======== top: " << contentsRect().top() << " bottom " << // contentsRect().bottom() << " left " << contentsRect().left() << " right " << contentsRect().right() << endl; 324 // kdDebug() << "======== top: " << contentsRect().top() << " bottom " << // contentsRect().bottom() << " left " << contentsRect().left() << " right " << contentsRect().right() << endl;
318 KDGanttSplitterHandle* han = 0; 325 KDGanttSplitterHandle* han = 0;
319 if ( mPaintWidget ) 326 if ( mPaintWidget )
320 han = mPaintWidget->firstHandle(); 327 han = mPaintWidget->firstHandle();
321 if ( ! han ) { 328 if ( ! han ) {
322 int i; 329 int i;
323 for(i=0;i<mColumns;++i) { 330 for(i=0;i<mColumns;++i) {
324 if (mEnabled[i]) { 331 if (mEnabled[i]) {
325 int cellWidth = contentsRect().right()/mColumns; 332 int cellWidth = contentsRect().right()/mColumns;
326 int xOffset = KOGlobals::self()->reverseLayout() ? 333 int xOffset = KOGlobals::self()->reverseLayout() ?
327 (mColumns - 1 - i)*cellWidth + (cellWidth -mPixmap.width())/2 : 334 (mColumns - 1 - i)*cellWidth + (cellWidth -mPixmap.width())/2 :
328 i*cellWidth + (cellWidth -mPixmap.width()) /2; 335 i*cellWidth + (cellWidth -mPixmap.width()) /2;
329 p->drawPixmap(QPoint(1+xOffset,0),mPixmap); 336 p->drawPixmap(QPoint(1+xOffset,0),mPixmap);
330 } 337 }
331 } 338 }
332 } else { 339 } else {
333 han->repaint(); 340 han->repaint();
334 //mPaintWidget->setBackgroundColor( red ); 341 //mPaintWidget->setBackgroundColor( red );
335 342
336 QPainter pa( han ); 343 QPainter pa( han );
337 int i; 344 int i;
338 bool setColor = false; 345 bool setColor = false;
339 for(i=0;i<mColumns;++i) { 346 for(i=0;i<mColumns;++i) {
340 if (mEnabled[i]) { 347 if (mEnabled[i]) {
341 setColor = true; 348 setColor = true;
342 349
343 int cellWidth = contentsRect().right()/mColumns; 350 int cellWidth = contentsRect().right()/mColumns;
344 int xOffset = KOGlobals::self()->reverseLayout() ? 351 int xOffset = KOGlobals::self()->reverseLayout() ?
345 (mColumns - 1 - i)*cellWidth + cellWidth/2 -mPixmap.width()/2 : 352 (mColumns - 1 - i)*cellWidth + cellWidth/2 -mPixmap.width()/2 :
346 i*cellWidth + cellWidth/2 -mPixmap.width()/2; 353 i*cellWidth + cellWidth/2 -mPixmap.width()/2;
347 pa.drawPixmap(QPoint(mXOffset + xOffset,0),mPixmap); 354 pa.drawPixmap(QPoint(mXOffset + xOffset,0),mPixmap);
348 //qDebug("222draw pix %d ",xOffset ); 355 //qDebug("222draw pix %d ",xOffset );
349 356
350 } 357 }
351 358
352 } 359 }
353 pa.end(); 360 pa.end();
354 361
355 } 362 }
356} 363}
357 364
358void EventIndicator::setXOffset( int x ) 365void EventIndicator::setXOffset( int x )
359{ 366{
360 mXOffset = x; 367 mXOffset = x;
361} 368}
362void EventIndicator::setPaintWidget( KDGanttMinimizeSplitter * w ) 369void EventIndicator::setPaintWidget( KDGanttMinimizeSplitter * w )
363{ 370{
364 mPaintWidget = w; 371 mPaintWidget = w;
365 setMaximumHeight(0); 372 setMaximumHeight(0);
366 setMinimumHeight(0); 373 setMinimumHeight(0);
367} 374}
368void EventIndicator::changeColumns(int columns) 375void EventIndicator::changeColumns(int columns)
369{ 376{
370 mColumns = columns; 377 mColumns = columns;
371 mEnabled.resize(mColumns); 378 mEnabled.resize(mColumns);
372 379
373 update(); 380 update();
374} 381}
375 382
376void EventIndicator::enableColumn(int column, bool enable) 383void EventIndicator::enableColumn(int column, bool enable)
377{ 384{
378 mEnabled[column] = enable; 385 mEnabled[column] = enable;
379} 386}
380 387
381 388
382//////////////////////////////////////////////////////////////////////////// 389////////////////////////////////////////////////////////////////////////////
383//////////////////////////////////////////////////////////////////////////// 390////////////////////////////////////////////////////////////////////////////
384//////////////////////////////////////////////////////////////////////////// 391////////////////////////////////////////////////////////////////////////////
385 392
386KOAgendaView::KOAgendaView(Calendar *cal,QWidget *parent,const char *name) : 393KOAgendaView::KOAgendaView(Calendar *cal,QWidget *parent,const char *name) :
387 KOEventView (cal,parent,name) 394 KOEventView (cal,parent,name)
388{ 395{
389 mBlockUpdating = true; 396 mBlockUpdating = true;
390 mStartHour = 8; 397 mStartHour = 8;
391 mSelectedDates.append(QDate::currentDate()); 398 mSelectedDates.append(QDate::currentDate());
392 399
393 mLayoutDayLabels = 0; 400 mLayoutDayLabels = 0;
394 mDayLabelsFrame = 0; 401 mDayLabelsFrame = 0;
395 mDayLabels = 0; 402 mDayLabels = 0;
396 bool isRTL = KOGlobals::self()->reverseLayout(); 403 bool isRTL = KOGlobals::self()->reverseLayout();
397 QPixmap expandPix; 404 QPixmap expandPix;
398 if ( KOPrefs::instance()->mVerticalScreen ) { 405 if ( KOPrefs::instance()->mVerticalScreen ) {
399 expandPix = SmallIcon( "1updownarrow" ); 406 expandPix = SmallIcon( "1updownarrow" );
400 } else { 407 } else {
401 expandPix = SmallIcon("1leftrightarrow" ); 408 expandPix = SmallIcon("1leftrightarrow" );
402 } 409 }
403 410
404 QBoxLayout *topLayout = new QVBoxLayout(this); 411 QBoxLayout *topLayout = new QVBoxLayout(this);
405 412
406 // Create day name labels for agenda columns 413 // Create day name labels for agenda columns
407 // Create agenda splitter 414 // Create agenda splitter
408 415
409 mSplitterAgenda = new KDGanttMinimizeSplitter( Qt::Vertical, this); 416 mSplitterAgenda = new KDGanttMinimizeSplitter( Qt::Vertical, this);
@@ -536,501 +543,504 @@ KOAgendaView::KOAgendaView(Calendar *cal,QWidget *parent,const char *name) :
536 connect(mAgenda,SIGNAL(deleteIncidenceSignal(Incidence *)), 543 connect(mAgenda,SIGNAL(deleteIncidenceSignal(Incidence *)),
537 SIGNAL(deleteIncidenceSignal(Incidence *))); 544 SIGNAL(deleteIncidenceSignal(Incidence *)));
538 connect(mAllDayAgenda,SIGNAL(deleteIncidenceSignal(Incidence *)), 545 connect(mAllDayAgenda,SIGNAL(deleteIncidenceSignal(Incidence *)),
539 SIGNAL(deleteIncidenceSignal(Incidence *))); 546 SIGNAL(deleteIncidenceSignal(Incidence *)));
540 547
541 connect(mAgenda,SIGNAL(itemModified(KOAgendaItem *, int )), 548 connect(mAgenda,SIGNAL(itemModified(KOAgendaItem *, int )),
542 SLOT(updateEventDates(KOAgendaItem *, int ))); 549 SLOT(updateEventDates(KOAgendaItem *, int )));
543 connect(mAllDayAgenda,SIGNAL(itemModified(KOAgendaItem *, int )), 550 connect(mAllDayAgenda,SIGNAL(itemModified(KOAgendaItem *, int )),
544 SLOT(updateEventDates(KOAgendaItem *, int))); 551 SLOT(updateEventDates(KOAgendaItem *, int)));
545 552
546 // event indicator update 553 // event indicator update
547 connect(mAgenda,SIGNAL(lowerYChanged(int)), 554 connect(mAgenda,SIGNAL(lowerYChanged(int)),
548 SLOT(updateEventIndicatorTop(int))); 555 SLOT(updateEventIndicatorTop(int)));
549 connect(mAgenda,SIGNAL(upperYChanged(int)), 556 connect(mAgenda,SIGNAL(upperYChanged(int)),
550 SLOT(updateEventIndicatorBottom(int))); 557 SLOT(updateEventIndicatorBottom(int)));
551 // drag signals 558 // drag signals
552 /* 559 /*
553 connect(mAgenda,SIGNAL(startDragSignal(Event *)), 560 connect(mAgenda,SIGNAL(startDragSignal(Event *)),
554 SLOT(startDrag(Event *))); 561 SLOT(startDrag(Event *)));
555 connect(mAllDayAgenda,SIGNAL(startDragSignal(Event *)), 562 connect(mAllDayAgenda,SIGNAL(startDragSignal(Event *)),
556 SLOT(startDrag(Event *))); 563 SLOT(startDrag(Event *)));
557 */ 564 */
558 // synchronize selections 565 // synchronize selections
559 connect( mAgenda, SIGNAL( incidenceSelected( Incidence * ) ), 566 connect( mAgenda, SIGNAL( incidenceSelected( Incidence * ) ),
560 mAllDayAgenda, SLOT( deselectItem() ) ); 567 mAllDayAgenda, SLOT( deselectItem() ) );
561 connect( mAllDayAgenda, SIGNAL( incidenceSelected( Incidence * ) ), 568 connect( mAllDayAgenda, SIGNAL( incidenceSelected( Incidence * ) ),
562 mAgenda, SLOT( deselectItem() ) ); 569 mAgenda, SLOT( deselectItem() ) );
563 connect( mAgenda, SIGNAL( incidenceSelected( Incidence * ) ), 570 connect( mAgenda, SIGNAL( incidenceSelected( Incidence * ) ),
564 SIGNAL( incidenceSelected( Incidence * ) ) ); 571 SIGNAL( incidenceSelected( Incidence * ) ) );
565 connect( mAllDayAgenda, SIGNAL( incidenceSelected( Incidence * ) ), 572 connect( mAllDayAgenda, SIGNAL( incidenceSelected( Incidence * ) ),
566 SIGNAL( incidenceSelected( Incidence * ) ) ); 573 SIGNAL( incidenceSelected( Incidence * ) ) );
567 connect( mAgenda, SIGNAL( resizedSignal() ), 574 connect( mAgenda, SIGNAL( resizedSignal() ),
568 SLOT( updateConfig( ) ) ); 575 SLOT( updateConfig( ) ) );
569 connect( mAgenda, SIGNAL( addToCalSignal(Incidence *, Incidence *) ), 576 connect( mAgenda, SIGNAL( addToCalSignal(Incidence *, Incidence *) ),
570 SLOT( addToCalSlot(Incidence *, Incidence * ) ) ); 577 SLOT( addToCalSlot(Incidence *, Incidence * ) ) );
571 connect( mAllDayAgenda, SIGNAL( addToCalSignal(Incidence * ,Incidence *) ), 578 connect( mAllDayAgenda, SIGNAL( addToCalSignal(Incidence * ,Incidence *) ),
572 SLOT( addToCalSlot(Incidence * , Incidence *) ) ); 579 SLOT( addToCalSlot(Incidence * , Incidence *) ) );
573 // connect( mAgenda, SIGNAL( cloneIncidenceSignal(Incidence *) ), SIGNAL( cloneIncidenceSignal(Incidence *) ) ); 580 // connect( mAgenda, SIGNAL( cloneIncidenceSignal(Incidence *) ), SIGNAL( cloneIncidenceSignal(Incidence *) ) );
574 //connect( mAllDayAgenda, SIGNAL( cloneIncidenceSignal(Incidence *) ), SIGNAL( cloneIncidenceSignal(Incidence *) ) ); 581 //connect( mAllDayAgenda, SIGNAL( cloneIncidenceSignal(Incidence *) ), SIGNAL( cloneIncidenceSignal(Incidence *) ) );
575 582
576 583
577} 584}
578 585
579void KOAgendaView::toggleAllDay() 586void KOAgendaView::toggleAllDay()
580{ 587{
581 if ( mSplitterAgenda->firstHandle() ) 588 if ( mSplitterAgenda->firstHandle() )
582 mSplitterAgenda->firstHandle()->toggle(); 589 mSplitterAgenda->firstHandle()->toggle();
583} 590}
584void KOAgendaView::addToCalSlot(Incidence * inc, Incidence * incOld ) 591void KOAgendaView::addToCalSlot(Incidence * inc, Incidence * incOld )
585{ 592{
586 calendar()->addIncidence( inc ); 593 calendar()->addIncidence( inc );
587 594
588 if ( incOld ) { 595 if ( incOld ) {
589 if ( incOld->type() == "Todo" ) 596 if ( incOld->type() == "Todo" )
590 emit todoMoved((Todo*)incOld, KOGlobals::EVENTEDITED ); 597 emit todoMoved((Todo*)incOld, KOGlobals::EVENTEDITED );
591 else 598 else
592 emit incidenceChanged(incOld, KOGlobals::EVENTEDITED); 599 emit incidenceChanged(incOld, KOGlobals::EVENTEDITED);
593 } 600 }
594 601
595} 602}
596 603
597KOAgendaView::~KOAgendaView() 604KOAgendaView::~KOAgendaView()
598{ 605{
599 delete mAgendaPopup; 606 delete mAgendaPopup;
600 delete mAllDayAgendaPopup; 607 delete mAllDayAgendaPopup;
601 delete KOAgendaItem::paintPix(); 608 delete KOAgendaItem::paintPix();
602 delete KOAgendaItem::paintPixSel(); 609 delete KOAgendaItem::paintPixSel();
603} 610}
604void KOAgendaView::resizeEvent( QResizeEvent* e ) 611void KOAgendaView::resizeEvent( QResizeEvent* e )
605{ 612{
606 //qDebug("KOAgendaView::resizeEvent( QResizeEvent* e ) %d ", e->size().width()); 613 //qDebug("KOAgendaView::resizeEvent( QResizeEvent* e ) %d ", e->size().width());
607 bool uc = false; 614 bool uc = false;
608 int ow = e->oldSize().width(); 615 int ow = e->oldSize().width();
609 int oh = e->oldSize().height(); 616 int oh = e->oldSize().height();
610 int w = e->size().width(); 617 int w = e->size().width();
611 int h = e->size().height(); 618 int h = e->size().height();
612 if ( (ow > oh && w< h ) || (ow < oh && w > h ) ) { 619 if ( (ow > oh && w< h ) || (ow < oh && w > h ) ) {
613 if ( ! mBlockUpdating && !globalFlagBlockStartup && !globalFlagBlockAgenda ) 620 if ( ! mBlockUpdating && !globalFlagBlockStartup && !globalFlagBlockAgenda )
614 uc = true; 621 uc = true;
615 //qDebug("view changed %d %d %d %d ", ow, oh , w , h); 622 //qDebug("view changed %d %d %d %d ", ow, oh , w , h);
616 } 623 }
617 mUpcomingWidth = e->size().width() ; 624 mUpcomingWidth = e->size().width() ;
618 if ( mBlockUpdating || uc ) { 625 if ( mBlockUpdating || uc ) {
619 mBlockUpdating = false; 626 mBlockUpdating = false;
620 //mAgenda->setMinimumSize(800 , 600 ); 627 //mAgenda->setMinimumSize(800 , 600 );
621 //qDebug("mAgenda->resize+++++++++++++++ "); 628 //qDebug("mAgenda->resize+++++++++++++++ ");
622 updateConfig(); 629 updateConfig();
623 //qDebug("KOAgendaView::Updating now possible "); 630 //qDebug("KOAgendaView::Updating now possible ");
624 } else 631 } else
625 createDayLabels(); 632 createDayLabels();
626 //qDebug("resizeEvent end "); 633 //qDebug("resizeEvent end ");
627 634
628} 635}
629void KOAgendaView::slotDaylabelClicked( int num ) 636void KOAgendaView::slotDaylabelClicked( int num )
630{ 637{
631 638
632 QDate firstDate = mSelectedDates.first(); 639 QDate firstDate = mSelectedDates.first();
633 if ( num == -1 ) 640 if ( num == -1 )
634 emit showDateView( 6, firstDate ); 641 emit showDateView( 6, firstDate );
635 else if (num >= 0 ) { 642 else if (num >= 0 ) {
636 if ( mSelectedDates.count() == 1) 643 if ( mSelectedDates.count() == 1)
637 emit showDateView( 9, firstDate.addDays( num ) ); 644 emit showDateView( 9, firstDate.addDays( num ) );
638 else 645 else
639 emit showDateView( 3, firstDate.addDays( num ) ); 646 emit showDateView( 3, firstDate.addDays( num ) );
640 } 647 }
641 else 648 else
642 showDateView( 10, firstDate.addDays(1) ); 649 showDateView( 10, firstDate.addDays(1) );
643} 650}
644 651
645KOAgendaButton* KOAgendaView::getNewDaylabel() 652KOAgendaButton* KOAgendaView::getNewDaylabel()
646{ 653{
647 654
648 KOAgendaButton * dayLabel = new KOAgendaButton(mDayLabels); 655 KOAgendaButton * dayLabel = new KOAgendaButton(mDayLabels);
649 connect( dayLabel, SIGNAL( numClicked(int) ), this, SLOT ( slotDaylabelClicked(int) ) ); 656 connect( dayLabel, SIGNAL( numClicked(int) ), this, SLOT ( slotDaylabelClicked(int) ) );
650 mDayLabelsList.append( dayLabel ); 657 mDayLabelsList.append( dayLabel );
651 mLayoutDayLabels->addWidget(dayLabel); 658 mLayoutDayLabels->addWidget(dayLabel);
652 return dayLabel ; 659 return dayLabel ;
653} 660}
654 661
655void KOAgendaView::createDayLabels() 662void KOAgendaView::createDayLabels()
656{ 663{
657 664
658 if ( mBlockUpdating || globalFlagBlockLabel == 1) { 665 if ( mBlockUpdating || globalFlagBlockLabel == 1) {
659 // qDebug(" KOAgendaView::createDayLabels() blocked "); 666 // qDebug(" KOAgendaView::createDayLabels() blocked ");
660 return; 667 return;
661 668
662 } 669 }
663 int newHight; 670 int newHight;
664 671
665 // ### Before deleting and recreating we could check if mSelectedDates changed... 672 // ### Before deleting and recreating we could check if mSelectedDates changed...
666 // It would remove some flickering and gain speed (since this is called by 673 // It would remove some flickering and gain speed (since this is called by
667 // each updateView() call) 674 // each updateView() call)
668 675
669 int maxWid = mUpcomingWidth - mTimeLabels->width()- mAgenda->verticalScrollBar()->width() - mAgenda->frameWidth()*2; 676 int maxWid = mUpcomingWidth - mTimeLabels->width()- mAgenda->verticalScrollBar()->width() - mAgenda->frameWidth()*2;
670 mDayLabelsFrame->setMaximumWidth( mUpcomingWidth ); 677 mDayLabelsFrame->setMaximumWidth( mUpcomingWidth );
671 if ( maxWid < 0 ) 678 if ( maxWid < 0 )
672 maxWid = 20; 679 maxWid = 20;
673 680
674 QFont dlf = KOPrefs::instance()->mTimeLabelsFont; 681 QFont dlf = KOPrefs::instance()->mTimeLabelsFont;
675 QFontMetrics fm ( dlf ); 682 QFontMetrics fm ( dlf );
676 int selCount = mSelectedDates.count(); 683 int selCount = mSelectedDates.count();
677 QString dayTest = "Mon 20"; 684 QString dayTest = "Mon 20";
678 //QString dayTest = "Mon 20"; 685 //QString dayTest = "Mon 20";
679 int wid = fm.width( dayTest ); 686 int wid = fm.width( dayTest );
680 //maxWid -= ( selCount * 3 ); //working for QLabels 687 //maxWid -= ( selCount * 3 ); //working for QLabels
681 maxWid -= ( selCount * 3 ); //working for QPushButton 688 maxWid -= ( selCount * 3 ); //working for QPushButton
682 if ( maxWid < 0 ) 689 if ( maxWid < 0 )
683 maxWid = 20; 690 maxWid = 20;
684 int needWid = wid * selCount; 691 int needWid = wid * selCount;
685 //qDebug("++++++++Needed : %d MaxWidth: %d", needWid, maxWid ); 692 //qDebug("++++++++Needed : %d MaxWidth: %d", needWid, maxWid );
686 //if ( needWid > maxWid ) 693 //if ( needWid > maxWid )
687 // qDebug("DAYLABELS TOOOOOOO BIG "); 694 // qDebug("DAYLABELS TOOOOOOO BIG ");
688 while ( needWid > maxWid ) { 695 while ( needWid > maxWid ) {
689 dayTest = dayTest.left( dayTest.length() - 1 ); 696 dayTest = dayTest.left( dayTest.length() - 1 );
690 wid = fm.width( dayTest ); 697 wid = fm.width( dayTest );
691 needWid = wid * selCount; 698 needWid = wid * selCount;
692 } 699 }
693 int maxLen = dayTest.length(); 700 int maxLen = dayTest.length();
694 int fontPoint = dlf.pointSize(); 701 int fontPoint = dlf.pointSize();
695 if ( maxLen < 2 ) { 702 if ( maxLen < 2 ) {
696 int fontPoint = dlf.pointSize(); 703 int fontPoint = dlf.pointSize();
697 while ( fontPoint > 4 ) { 704 while ( fontPoint > 4 ) {
698 --fontPoint; 705 --fontPoint;
699 dlf.setPointSize( fontPoint ); 706 dlf.setPointSize( fontPoint );
700 QFontMetrics f( dlf ); 707 QFontMetrics f( dlf );
701 wid = f.width( "30" ); 708 wid = f.width( "30" );
702 needWid = wid * selCount; 709 needWid = wid * selCount;
703 if ( needWid < maxWid ) 710 if ( needWid < maxWid )
704 break; 711 break;
705 } 712 }
706 maxLen = 2; 713 maxLen = 2;
707 } 714 }
708 //qDebug("Max len %d ", dayTest.length() ); 715 //qDebug("Max len %d ", dayTest.length() );
709 716
710 QFontMetrics tempF( dlf ); 717 QFontMetrics tempF( dlf );
711 newHight = tempF.height(); 718 newHight = tempF.height();
712 mDayLabels->setFont( dlf ); 719 mDayLabels->setFont( dlf );
713 // mLayoutDayLabels = new QHBoxLayout(mDayLabels);; 720 // mLayoutDayLabels = new QHBoxLayout(mDayLabels);;
714 // mLayoutDayLabels->addSpacing(mTimeLabels->width()); 721 // mLayoutDayLabels->addSpacing(mTimeLabels->width());
715 //mLayoutDayLabels->addSpacing( 2 ); 722 //mLayoutDayLabels->addSpacing( 2 );
716 // QFont lFont = dlf; 723 // QFont lFont = dlf;
717 bool appendLabels = false; 724 bool appendLabels = false;
718 KOAgendaButton *dayLabel; 725 KOAgendaButton *dayLabel;
719 dayLabel = mDayLabelsList.first(); 726 dayLabel = mDayLabelsList.first();
720 if ( !dayLabel ) { 727 if ( !dayLabel ) {
721 appendLabels = true; 728 appendLabels = true;
722 dayLabel = getNewDaylabel(); 729 dayLabel = getNewDaylabel();
723 } 730 }
724 dayLabel->setFixedWidth( mTimeLabels->width()+mAgenda->frameWidth() ); 731 dayLabel->setFixedWidth( mTimeLabels->width()+mAgenda->frameWidth() );
725 dayLabel->setFont( dlf ); 732 dayLabel->setFont( dlf );
726 dayLabel->setNum( -1 ); 733 dayLabel->setNum( -1 );
727 //dayLabel->setAlignment(QLabel::AlignHCenter); 734 //dayLabel->setAlignment(QLabel::AlignHCenter);
728 dayLabel->setText( KOGlobals::self()->calendarSystem()->monthName( mSelectedDates.first(), true ) ); 735 if ( QApplication::desktop()->width() <= 320 )
736 dayLabel->setText( KOGlobals::self()->calendarSystem()->monthName( mSelectedDates.first(), true ).left(2) );
737 else
738 dayLabel->setText( KOGlobals::self()->calendarSystem()->monthName( mSelectedDates.first(), true ) );
729 dayLabel->show(); 739 dayLabel->show();
730 DateList::ConstIterator dit; 740 DateList::ConstIterator dit;
731 bool oneday = (mSelectedDates.first() == mSelectedDates.last() ); 741 bool oneday = (mSelectedDates.first() == mSelectedDates.last() );
732 int counter = -1; 742 int counter = -1;
733 for( dit = mSelectedDates.begin(); dit != mSelectedDates.end(); ++dit ) { 743 for( dit = mSelectedDates.begin(); dit != mSelectedDates.end(); ++dit ) {
734 ++counter; 744 ++counter;
735 QDate date = *dit; 745 QDate date = *dit;
736 // QBoxLayout *dayLayout = new QVBoxLayout(mLayoutDayLabels); 746 // QBoxLayout *dayLayout = new QVBoxLayout(mLayoutDayLabels);
737 if ( ! appendLabels ) { 747 if ( ! appendLabels ) {
738 dayLabel = mDayLabelsList.next(); 748 dayLabel = mDayLabelsList.next();
739 if ( !dayLabel ) 749 if ( !dayLabel )
740 appendLabels = true; 750 appendLabels = true;
741 } 751 }
742 if ( appendLabels ) { 752 if ( appendLabels ) {
743 dayLabel = getNewDaylabel(); 753 dayLabel = getNewDaylabel();
744 } 754 }
745 dayLabel->setMinimumWidth( 1 ); 755 dayLabel->setMinimumWidth( 1 );
746 dayLabel->setMaximumWidth( 10240 ); 756 dayLabel->setMaximumWidth( 10240 );
747 dayLabel->setFont( dlf ); 757 dayLabel->setFont( dlf );
748 dayLabel->show(); 758 dayLabel->show();
749 dayLabel->setAutoRepeat( false ); 759 dayLabel->setAutoRepeat( false );
750 dayLabel->setNum( counter ); 760 dayLabel->setNum( counter );
751 QString str; 761 QString str;
752 int dW = KOGlobals::self()->calendarSystem()->dayOfWeek(date); 762 int dW = KOGlobals::self()->calendarSystem()->dayOfWeek(date);
753 QString dayName = KOGlobals::self()->calendarSystem()->weekDayName( dW, true ); 763 QString dayName = KOGlobals::self()->calendarSystem()->weekDayName( dW, true );
754 switch ( maxLen ) { 764 switch ( maxLen ) {
755 case 2: 765 case 2:
756 str = QString::number( date.day() ); 766 str = QString::number( date.day() );
757 break; 767 break;
758 768
759 case 3: 769 case 3:
760 str = dayName.left( 1 ) +QString::number( date.day()); 770 str = dayName.left( 1 ) +QString::number( date.day());
761 771
762 break; 772 break;
763 case 4: 773 case 4:
764 str = dayName.left( 1 ) + " " +QString::number( date.day()); 774 str = dayName.left( 1 ) + " " +QString::number( date.day());
765 775
766 break; 776 break;
767 case 5: 777 case 5:
768 str = dayName.left( 2 ) + " " +QString::number( date.day()); 778 str = dayName.left( 2 ) + " " +QString::number( date.day());
769 779
770 break; 780 break;
771 case 6: 781 case 6:
772 str = dayName.left( 3 ) + " " +QString::number( date.day()); 782 str = dayName.left( 3 ) + " " +QString::number( date.day());
773 break; 783 break;
774 784
775 default: 785 default:
776 break; 786 break;
777 } 787 }
778 if ( oneday ) { 788 if ( oneday ) {
779 QString addString; 789 QString addString;
780 if ( mSelectedDates.first() == QDateTime::currentDateTime().date() ) 790 if ( mSelectedDates.first() == QDateTime::currentDateTime().date() )
781 addString = i18n("Today"); 791 addString = i18n("Today");
782 else if ( mSelectedDates.first() == QDateTime::currentDateTime().date().addDays(1) ) 792 else if ( mSelectedDates.first() == QDateTime::currentDateTime().date().addDays(1) )
783 addString = i18n("Tomorrow"); 793 addString = i18n("Tomorrow");
784 else if ( mSelectedDates.first() == QDateTime::currentDateTime().date().addDays(-1) ) 794 else if ( mSelectedDates.first() == QDateTime::currentDateTime().date().addDays(-1) )
785 addString = i18n("Yesterday"); 795 addString = i18n("Yesterday");
786 else if ( mSelectedDates.first() == QDateTime::currentDateTime().date().addDays(-2) ) 796 else if ( mSelectedDates.first() == QDateTime::currentDateTime().date().addDays(-2) )
787 addString = i18n("Day before yesterday"); 797 addString = i18n("Day before yesterday");
788 else if ( mSelectedDates.first() == QDateTime::currentDateTime().date().addDays(2) ) 798 else if ( mSelectedDates.first() == QDateTime::currentDateTime().date().addDays(2) )
789 addString = i18n("Day after tomorrow"); 799 addString = i18n("Day after tomorrow");
790 if ( !addString.isEmpty() ) { 800 if ( !addString.isEmpty() ) {
791 str = addString+", " + str; 801 str = addString+", " + str;
792 } else { 802 } else {
793 str = KGlobal::locale()->formatDate( date, KOPrefs::instance()->mShortDateInViewer); 803 str = KGlobal::locale()->formatDate( date, KOPrefs::instance()->mShortDateInViewer);
794 } 804 }
795 } 805 }
796 dayLabel->setText(str); 806 dayLabel->setText(str);
797 //dayLabel->setAlignment(QLabel::AlignHCenter); 807 //dayLabel->setAlignment(QLabel::AlignHCenter);
798 if (date == QDate::currentDate()) { 808 if (date == QDate::currentDate()) {
799 QFont bFont = dlf; 809 QFont bFont = dlf;
800 bFont.setBold( true ); 810 bFont.setBold( true );
801 dayLabel->setFont(bFont); 811 dayLabel->setFont(bFont);
802 } 812 }
803 //dayLayout->addWidget(dayLabel); 813 //dayLayout->addWidget(dayLabel);
804 814
805#ifndef KORG_NOPLUGINS 815#ifndef KORG_NOPLUGINS
806 CalendarDecoration::List cds = KOCore::self()->calendarDecorations(); 816 CalendarDecoration::List cds = KOCore::self()->calendarDecorations();
807 CalendarDecoration *it; 817 CalendarDecoration *it;
808 for(it = cds.first(); it; it = cds.next()) { 818 for(it = cds.first(); it; it = cds.next()) {
809 QString text = it->shortText( date ); 819 QString text = it->shortText( date );
810 if ( !text.isEmpty() ) { 820 if ( !text.isEmpty() ) {
811 QLabel *label = new QLabel(text,mDayLabels); 821 QLabel *label = new QLabel(text,mDayLabels);
812 label->setAlignment(AlignCenter); 822 label->setAlignment(AlignCenter);
813 dayLayout->addWidget(label); 823 dayLayout->addWidget(label);
814 } 824 }
815 } 825 }
816 826
817 for(it = cds.first(); it; it = cds.next()) { 827 for(it = cds.first(); it; it = cds.next()) {
818 QWidget *wid = it->smallWidget(mDayLabels,date); 828 QWidget *wid = it->smallWidget(mDayLabels,date);
819 if ( wid ) { 829 if ( wid ) {
820 // wid->setHeight(20); 830 // wid->setHeight(20);
821 dayLayout->addWidget(wid); 831 dayLayout->addWidget(wid);
822 } 832 }
823 } 833 }
824#endif 834#endif
825 } 835 }
826 if ( ! appendLabels ) { 836 if ( ! appendLabels ) {
827 dayLabel = mDayLabelsList.next(); 837 dayLabel = mDayLabelsList.next();
828 if ( !dayLabel ) 838 if ( !dayLabel )
829 appendLabels = true; 839 appendLabels = true;
830 } 840 }
831 if ( appendLabels ) { 841 if ( appendLabels ) {
832 dayLabel = getNewDaylabel(); 842 dayLabel = getNewDaylabel();
833 } 843 }
834 //dayLabel->hide();//test only 844 //dayLabel->hide();//test only
835 qDebug("fremwidd %d ", mAgenda->frameWidth());
836 int offset = (mAgenda->width() - mAgenda->verticalScrollBar()->width()- (mAgenda->frameWidth()*2) ) % mSelectedDates.count() ; 845 int offset = (mAgenda->width() - mAgenda->verticalScrollBar()->width()- (mAgenda->frameWidth()*2) ) % mSelectedDates.count() ;
837 if ( offset < 0 ) offset = 0; 846 if ( offset < 0 ) offset = 0;
838 //qDebug("mLayoutDayLabels->addSpacing %d ", mAgenda->verticalScrollBar()->width()+offset+2 ); 847 //qDebug("mLayoutDayLabels->addSpacing %d ", mAgenda->verticalScrollBar()->width()+offset+2 );
839 dayLabel->setText(">");//QString::number ( mSelectedDates.first().month() ) ); 848 dayLabel->setText(">");//QString::number ( mSelectedDates.first().month() ) );
840 dayLabel->setFont( dlf ); 849 dayLabel->setFont( dlf );
841 dayLabel->setAutoRepeat( true ); 850 dayLabel->setAutoRepeat( true );
842 dayLabel->show(); 851 dayLabel->show();
843 dayLabel->setNum( -2 ); 852 dayLabel->setNum( -2 );
844 dayLabel->setFixedWidth( mAgenda->verticalScrollBar()->width()+ offset ); 853 dayLabel->setFixedWidth( mAgenda->verticalScrollBar()->width()+ offset );
854
845 //qDebug("setToFixed %d ", mAgenda->verticalScrollBar()->width()+ offset+2); 855 //qDebug("setToFixed %d ", mAgenda->verticalScrollBar()->width()+ offset+2);
846 //mLayoutDayLabels->addSpacing(mAgenda->verticalScrollBar()->width()+ offset+2); 856 //mLayoutDayLabels->addSpacing(mAgenda->verticalScrollBar()->width()+ offset+2);
847 if ( !appendLabels ) { 857 if ( !appendLabels ) {
848 dayLabel = mDayLabelsList.next(); 858 dayLabel = mDayLabelsList.next();
849 while ( dayLabel ) { 859 while ( dayLabel ) {
850 //qDebug("!dayLabel %d",dayLabel ); 860 //qDebug("!dayLabel %d",dayLabel );
851 dayLabel->hide(); 861 dayLabel->hide();
852 dayLabel = mDayLabelsList.next(); 862 dayLabel = mDayLabelsList.next();
853 } 863 }
854 } 864 }
855 865
856 mDayLabelsFrame->setFixedHeight( newHight + 4 ); 866 mDayLabelsFrame->setFixedHeight( newHight + 4 );
857} 867}
858 868
859int KOAgendaView::maxDatesHint() 869int KOAgendaView::maxDatesHint()
860{ 870{
861 // Not sure about the max number of events, so return 0 for now. 871 // Not sure about the max number of events, so return 0 for now.
862 return 0; 872 return 0;
863} 873}
864 874
865int KOAgendaView::currentDateCount() 875int KOAgendaView::currentDateCount()
866{ 876{
867 return mSelectedDates.count(); 877 return mSelectedDates.count();
868} 878}
869 879
870QPtrList<Incidence> KOAgendaView::selectedIncidences() 880QPtrList<Incidence> KOAgendaView::selectedIncidences()
871{ 881{
872 QPtrList<Incidence> selected; 882 QPtrList<Incidence> selected;
873 Incidence *incidence; 883 Incidence *incidence;
874 884
875 incidence = mAgenda->selectedIncidence(); 885 incidence = mAgenda->selectedIncidence();
876 if (incidence) selected.append(incidence); 886 if (incidence) selected.append(incidence);
877 887
878 incidence = mAllDayAgenda->selectedIncidence(); 888 incidence = mAllDayAgenda->selectedIncidence();
879 if (incidence) selected.append(incidence); 889 if (incidence) selected.append(incidence);
880 890
881 return selected; 891 return selected;
882} 892}
883 893
884DateList KOAgendaView::selectedDates() 894DateList KOAgendaView::selectedDates()
885{ 895{
886 DateList selected; 896 DateList selected;
887 QDate qd; 897 QDate qd;
888 898
889 qd = mAgenda->selectedIncidenceDate(); 899 qd = mAgenda->selectedIncidenceDate();
890 if (qd.isValid()) selected.append(qd); 900 if (qd.isValid()) selected.append(qd);
891 901
892 qd = mAllDayAgenda->selectedIncidenceDate(); 902 qd = mAllDayAgenda->selectedIncidenceDate();
893 if (qd.isValid()) selected.append(qd); 903 if (qd.isValid()) selected.append(qd);
894 904
895 return selected; 905 return selected;
896} 906}
897 907
898 908
899void KOAgendaView::updateView() 909void KOAgendaView::updateView()
900{ 910{
901 if ( mBlockUpdating ) 911 if ( mBlockUpdating )
902 return; 912 return;
903 // kdDebug() << "KOAgendaView::updateView()" << endl; 913 // kdDebug() << "KOAgendaView::updateView()" << endl;
904 fillAgenda(); 914 fillAgenda();
905 915
906} 916}
907 917
908 918
909/* 919/*
910 Update configuration settings for the agenda view. This method is not 920 Update configuration settings for the agenda view. This method is not
911 complete. 921 complete.
912*/ 922*/
913void KOAgendaView::updateConfig() 923void KOAgendaView::updateConfig()
914{ 924{
915 if ( mBlockUpdating ) 925 if ( mBlockUpdating )
916 return; 926 return;
917 if ( mAgenda->height() > 96 * KOPrefs::instance()->mHourSize ) { 927 if ( mAgenda->height() > 96 * KOPrefs::instance()->mHourSize ) {
918 int old = KOPrefs::instance()->mHourSize; 928 int old = KOPrefs::instance()->mHourSize;
919 KOPrefs::instance()->mHourSize = mAgenda->height()/96 +1; 929 KOPrefs::instance()->mHourSize = mAgenda->height()/96 +1;
920 qDebug("KOPrefs::instance()->mHourSize adjusted %d to %d ", old,KOPrefs::instance()->mHourSize ); 930 qDebug("KOPrefs::instance()->mHourSize adjusted %d to %d ", old,KOPrefs::instance()->mHourSize );
921 } 931 }
922 932
923 933
924 // update config for children 934 // update config for children
925 mTimeLabels->updateConfig(); 935 mTimeLabels->updateConfig();
926 mAgenda->storePosition(); 936 mAgenda->storePosition();
927 mAgenda->updateConfig(); 937 mAgenda->updateConfig();
928 mAllDayAgenda->updateConfig(); 938 mAllDayAgenda->updateConfig();
929 // widget synchronization 939 // widget synchronization
930 //TODO: find a better way, maybe signal/slot 940 //TODO: find a better way, maybe signal/slot
931 mTimeLabels->positionChanged(); 941 mTimeLabels->positionChanged();
932 942
933 // for some reason, this needs to be called explicitly 943 // for some reason, this needs to be called explicitly
934 mTimeLabels->repaint(); 944 mTimeLabels->repaint();
935 945
936 mDummyAllDayLeft->setFixedWidth(mTimeLabels->width()); 946 mDummyAllDayLeft->setFixedWidth(mTimeLabels->width());
937 947
938 // ToolTips displaying summary of events 948 // ToolTips displaying summary of events
939 KOAgendaItem::toolTipGroup()->setEnabled(KOPrefs::instance() 949 KOAgendaItem::toolTipGroup()->setEnabled(KOPrefs::instance()
940 ->mEnableToolTips); 950 ->mEnableToolTips);
941 951
942 //setHolidayMasks(); 952 //setHolidayMasks();
943 953
944 //createDayLabels(); called by via updateView(); 954 //createDayLabels(); called by via updateView();
945 mEventIndicatorTop->setXOffset(mTimeLabels->width() + mAgenda->frameWidth()); 955 mEventIndicatorTop->setXOffset(mTimeLabels->width() + mAgenda->frameWidth());
946 updateView(); 956 updateView();
947 mAgenda->restorePosition(); 957 mAgenda->restorePosition();
948} 958}
949 959
950 960
951void KOAgendaView::updateEventDates(KOAgendaItem *item, int type) 961void KOAgendaView::updateEventDates(KOAgendaItem *item, int type)
952{ 962{
953 // kdDebug() << "KOAgendaView::updateEventDates(): " << item->text() << endl; 963 // kdDebug() << "KOAgendaView::updateEventDates(): " << item->text() << endl;
954 //qDebug("KOAgendaView::updateEventDates "); 964 //qDebug("KOAgendaView::updateEventDates ");
955 QDateTime startDt,endDt; 965 QDateTime startDt,endDt;
956 QDate startDate; 966 QDate startDate;
957 int lenInSecs; 967 int lenInSecs;
958 // if ( type == KOAgenda::RESIZETOP ) 968 // if ( type == KOAgenda::RESIZETOP )
959 // qDebug("RESIZETOP "); 969 // qDebug("RESIZETOP ");
960 // if ( type == KOAgenda::RESIZEBOTTOM ) 970 // if ( type == KOAgenda::RESIZEBOTTOM )
961 // qDebug("RESIZEBOTTOM "); 971 // qDebug("RESIZEBOTTOM ");
962 // if ( type == KOAgenda::MOVE ) 972 // if ( type == KOAgenda::MOVE )
963 // qDebug("MOVE "); 973 // qDebug("MOVE ");
964 if ( item->incidence()->type() == "Event" ) { 974 if ( item->incidence()->type() == "Event" ) {
965 startDt =item->incidence()->dtStart(); 975 startDt =item->incidence()->dtStart();
966 endDt = item->incidence()->dtEnd(); 976 endDt = item->incidence()->dtEnd();
967 lenInSecs = startDt.secsTo( endDt ); 977 lenInSecs = startDt.secsTo( endDt );
968 } 978 }
969 979
970 // emit incidenceItemChanged( item->incidence(), KOGlobals::EVENTEDITED ); 980 // emit incidenceItemChanged( item->incidence(), KOGlobals::EVENTEDITED );
971 981
972 if ( item->incidence()->type()=="Todo" && item->mLastMoveXPos > 0 ) { 982 if ( item->incidence()->type()=="Todo" && item->mLastMoveXPos > 0 ) {
973 startDate = mSelectedDates[item->mLastMoveXPos]; 983 startDate = mSelectedDates[item->mLastMoveXPos];
974 } else { 984 } else {
975 if (item->cellX() < 0) { 985 if (item->cellX() < 0) {
976 startDate = (mSelectedDates.first()).addDays(item->cellX()); 986 startDate = (mSelectedDates.first()).addDays(item->cellX());
977 } else { 987 } else {
978 startDate = mSelectedDates[item->cellX()]; 988 startDate = mSelectedDates[item->cellX()];
979 } 989 }
980 } 990 }
981 startDt.setDate(startDate); 991 startDt.setDate(startDate);
982 992
983 if (item->incidence()->doesFloat()) { 993 if (item->incidence()->doesFloat()) {
984 endDt.setDate(startDate.addDays(item->cellWidth() - 1)); 994 endDt.setDate(startDate.addDays(item->cellWidth() - 1));
985 } else { 995 } else {
986 if ( type == KOAgenda::RESIZETOP || type == KOAgenda::MOVE ) 996 if ( type == KOAgenda::RESIZETOP || type == KOAgenda::MOVE )
987 startDt.setTime(mAgenda->gyToTime(item->cellYTop())); 997 startDt.setTime(mAgenda->gyToTime(item->cellYTop()));
988 if ( item->incidence()->type() == "Event" ) { 998 if ( item->incidence()->type() == "Event" ) {
989 if ( type == KOAgenda::MOVE ) { 999 if ( type == KOAgenda::MOVE ) {
990 endDt = startDt.addSecs(lenInSecs); 1000 endDt = startDt.addSecs(lenInSecs);
991 1001
992 } else if ( type == KOAgenda::RESIZEBOTTOM ) { 1002 } else if ( type == KOAgenda::RESIZEBOTTOM ) {
993 if (item->lastMultiItem()) { 1003 if (item->lastMultiItem()) {
994 endDt.setTime(mAgenda->gyToTime(item->lastMultiItem()->cellYBottom()+1)); 1004 endDt.setTime(mAgenda->gyToTime(item->lastMultiItem()->cellYBottom()+1));
995 endDt.setDate(startDate. 1005 endDt.setDate(startDate.
996 addDays(item->lastMultiItem()->cellX() - item->cellX())); 1006 addDays(item->lastMultiItem()->cellX() - item->cellX()));
997 } else { 1007 } else {
998 endDt.setTime(mAgenda->gyToTime(item->cellYBottom()+1)); 1008 endDt.setTime(mAgenda->gyToTime(item->cellYBottom()+1));
999 endDt.setDate(startDate); 1009 endDt.setDate(startDate);
1000 } 1010 }
1001 } 1011 }
1002 } else { 1012 } else {
1003 // todo 1013 // todo
1004 if (item->lastMultiItem()) { 1014 if (item->lastMultiItem()) {
1005 endDt.setTime(mAgenda->gyToTime(item->lastMultiItem()->cellYBottom()+1)); 1015 endDt.setTime(mAgenda->gyToTime(item->lastMultiItem()->cellYBottom()+1));
1006 endDt.setDate(startDate. 1016 endDt.setDate(startDate.
1007 addDays(item->lastMultiItem()->cellX() - item->cellX())); 1017 addDays(item->lastMultiItem()->cellX() - item->cellX()));
1008 } else { 1018 } else {
1009 //qDebug("tem->cellYBottom() %d",item->cellYBottom() ); 1019 //qDebug("tem->cellYBottom() %d",item->cellYBottom() );
1010 if ( item->cellYBottom() > 0 ) 1020 if ( item->cellYBottom() > 0 )
1011 endDt.setTime(mAgenda->gyToTime(item->cellYBottom()+1)); 1021 endDt.setTime(mAgenda->gyToTime(item->cellYBottom()+1));
1012 else 1022 else
1013 endDt.setTime((static_cast<Todo*>(item->incidence()))->dtDue().time()); 1023 endDt.setTime((static_cast<Todo*>(item->incidence()))->dtDue().time());
1014 endDt.setDate(startDate); 1024 endDt.setDate(startDate);
1015 } 1025 }
1016 } 1026 }
1017 } 1027 }
1018 if ( item->incidence()->type() == "Event" ) { 1028 if ( item->incidence()->type() == "Event" ) {
1019 item->incidence()->setDtStart(startDt); 1029 item->incidence()->setDtStart(startDt);
1020 (static_cast<Event*>(item->incidence()))->setDtEnd(endDt); 1030 (static_cast<Event*>(item->incidence()))->setDtEnd(endDt);
1021 } else if ( item->incidence()->type() == "Todo" ) { 1031 } else if ( item->incidence()->type() == "Todo" ) {
1022 Todo* to = static_cast<Todo*>(item->incidence()); 1032 Todo* to = static_cast<Todo*>(item->incidence());
1023 1033
1024 to->setDtDue(endDt); 1034 to->setDtDue(endDt);
1025 if ( to->hasStartDate() ) { 1035 if ( to->hasStartDate() ) {
1026 if (to->dtStart() >= to->dtDue() ) 1036 if (to->dtStart() >= to->dtDue() )
1027 to->setDtStart(to->dtDue().addDays( -2 )); 1037 to->setDtStart(to->dtDue().addDays( -2 ));
1028 } 1038 }
1029 1039
1030 } 1040 }
1031 //qDebug("KOAgendaView::updateEventDates stsart %s end %s ", startDt.toString().latin1(), endDt.toString().latin1() ); 1041 //qDebug("KOAgendaView::updateEventDates stsart %s end %s ", startDt.toString().latin1(), endDt.toString().latin1() );
1032 item->incidence()->setRevision(item->incidence()->revision()+1); 1042 item->incidence()->setRevision(item->incidence()->revision()+1);
1033 item->setItemDate(startDt.date()); 1043 item->setItemDate(startDt.date());
1034 //item->updateItem(); 1044 //item->updateItem();
1035 if ( item->incidence()->type() == "Todo" ) { 1045 if ( item->incidence()->type() == "Todo" ) {
1036 emit todoMoved((Todo*)item->incidence(), KOGlobals::EVENTEDITED ); 1046 emit todoMoved((Todo*)item->incidence(), KOGlobals::EVENTEDITED );
diff --git a/korganizer/kodaymatrix.cpp b/korganizer/kodaymatrix.cpp
index 5b5703f..b8a0f09 100644
--- a/korganizer/kodaymatrix.cpp
+++ b/korganizer/kodaymatrix.cpp
@@ -604,367 +604,371 @@ void KODayMatrix::dragMoveEvent(QDragMoveEvent *e)
604#ifndef KORG_NODND 604#ifndef KORG_NODND
605 if ( !ICalDrag::canDecode( e ) && !VCalDrag::canDecode( e ) ) { 605 if ( !ICalDrag::canDecode( e ) && !VCalDrag::canDecode( e ) ) {
606 e->ignore(); 606 e->ignore();
607 return; 607 return;
608 } 608 }
609 609
610 e->accept(); 610 e->accept();
611#endif 611#endif
612} 612}
613 613
614void KODayMatrix::dragLeaveEvent(QDragLeaveEvent */*dl*/) 614void KODayMatrix::dragLeaveEvent(QDragLeaveEvent */*dl*/)
615{ 615{
616#ifndef KORG_NODND 616#ifndef KORG_NODND
617// setPalette(oldPalette); 617// setPalette(oldPalette);
618// update(); 618// update();
619#endif 619#endif
620} 620}
621 621
622void KODayMatrix::dropEvent(QDropEvent *e) 622void KODayMatrix::dropEvent(QDropEvent *e)
623{ 623{
624#ifndef KORG_NODND 624#ifndef KORG_NODND
625// kdDebug() << "KODayMatrix::dropEvent(e) begin" << endl; 625// kdDebug() << "KODayMatrix::dropEvent(e) begin" << endl;
626 626
627 if (!mCalendar || !ICalDrag::canDecode( e ) && !VCalDrag::canDecode( e ) ) { 627 if (!mCalendar || !ICalDrag::canDecode( e ) && !VCalDrag::canDecode( e ) ) {
628 e->ignore(); 628 e->ignore();
629 return; 629 return;
630 } 630 }
631 631
632 DndFactory factory( mCalendar ); 632 DndFactory factory( mCalendar );
633 Event *event = factory.createDrop(e); 633 Event *event = factory.createDrop(e);
634 634
635 if (event) { 635 if (event) {
636 e->acceptAction(); 636 e->acceptAction();
637 637
638 Event *existingEvent = mCalendar->event(event->uid()); 638 Event *existingEvent = mCalendar->event(event->uid());
639 639
640 if(existingEvent) { 640 if(existingEvent) {
641 // uniquify event 641 // uniquify event
642 event->recreate(); 642 event->recreate();
643/* 643/*
644 KMessageBox::sorry(this, 644 KMessageBox::sorry(this,
645 i18n("Event already exists in this calendar."), 645 i18n("Event already exists in this calendar."),
646 i18n("Drop Event")); 646 i18n("Drop Event"));
647 delete event; 647 delete event;
648 return; 648 return;
649*/ 649*/
650 } 650 }
651// kdDebug() << "Drop new Event" << endl; 651// kdDebug() << "Drop new Event" << endl;
652 // Adjust date 652 // Adjust date
653 QDateTime start = event->dtStart(); 653 QDateTime start = event->dtStart();
654 QDateTime end = event->dtEnd(); 654 QDateTime end = event->dtEnd();
655 int duration = start.daysTo(end); 655 int duration = start.daysTo(end);
656 int idx = getDayIndexFrom(e->pos().x(), e->pos().y()); 656 int idx = getDayIndexFrom(e->pos().x(), e->pos().y());
657 657
658 start.setDate(days[idx]); 658 start.setDate(days[idx]);
659 end.setDate(days[idx].addDays(duration)); 659 end.setDate(days[idx].addDays(duration));
660 660
661 event->setDtStart(start); 661 event->setDtStart(start);
662 event->setDtEnd(end); 662 event->setDtEnd(end);
663 mCalendar->addEvent(event); 663 mCalendar->addEvent(event);
664 664
665 emit eventDropped(event); 665 emit eventDropped(event);
666 } else { 666 } else {
667// kdDebug() << "KODayMatrix::dropEvent(): Event from drop not decodable" << endl; 667// kdDebug() << "KODayMatrix::dropEvent(): Event from drop not decodable" << endl;
668 e->ignore(); 668 e->ignore();
669 } 669 }
670#endif 670#endif
671} 671}
672 672
673// ---------------------------------------------------------------------------- 673// ----------------------------------------------------------------------------
674// P A I N T E V E N T H A N D L I N G 674// P A I N T E V E N T H A N D L I N G
675// ---------------------------------------------------------------------------- 675// ----------------------------------------------------------------------------
676 676
677void KODayMatrix::paintEvent(QPaintEvent * pevent) 677void KODayMatrix::paintEvent(QPaintEvent * pevent)
678{ 678{
679 679
680 if ( width() <= 0 || height() <= 0 ) 680 if ( width() <= 0 || height() <= 0 )
681 return; 681 return;
682 if ( mPendingUpdateBeforeRepaint ) { 682 if ( mPendingUpdateBeforeRepaint ) {
683 updateViewTimed(); 683 updateViewTimed();
684 mPendingUpdateBeforeRepaint = false; 684 mPendingUpdateBeforeRepaint = false;
685 } 685 }
686 if ( myPix.width() != width() || myPix.height()!=height() ) { 686 if ( myPix.width() != width() || myPix.height()!=height() ) {
687 myPix.resize(size() ); 687 myPix.resize(size() );
688 mRedrawNeeded = true; 688 mRedrawNeeded = true;
689 } 689 }
690 690
691 if ( mRedrawNeeded ) { 691 if ( mRedrawNeeded ) {
692 //qDebug("REDRAW "); 692 //qDebug("REDRAW ");
693 QPainter p(&myPix); 693 QPainter p(&myPix);
694 p.setFont(font()); 694 p.setFont(font());
695 695
696 696
697 int dheight = daysize.height(); 697 int dheight = daysize.height();
698 int dwidth = daysize.width(); 698 int dwidth = daysize.width();
699 int row,col; 699 int row,col;
700 int selw, selh; 700 int selw, selh;
701 int xyOff = frameWidth(); 701 int xyOff = frameWidth();
702 int colModulo = (width()-2) % 7; 702 int colModulo = (width()-2) % 7;
703 int rowModulo = (height()-2) % 6; 703 int rowModulo = (height()-2) % 6;
704 //qDebug("col %d row %d ",colModulo,rowModulo ); 704 //qDebug("col %d row %d ",colModulo,rowModulo );
705 705
706 bool isRTL = KOGlobals::self()->reverseLayout(); 706 bool isRTL = KOGlobals::self()->reverseLayout();
707 707
708 // draw background and topleft frame 708 // draw background and topleft frame
709 p.fillRect(0,0,width(),height(), mDefaultBackColor); 709 p.fillRect(0,0,width(),height(), mDefaultBackColor);
710 p.setPen(mDefaultTextColor); 710 p.setPen(mDefaultTextColor);
711 p.drawRect(0, 0, width(), height()); 711 p.drawRect(0, 0, width(), height());
712 int mSelStartT = mSelStart; 712 int mSelStartT = mSelStart;
713 int mSelEndT = mSelEnd; 713 int mSelEndT = mSelEnd;
714 if ( mSelEndT >= NUMDAYS ) 714 if ( mSelEndT >= NUMDAYS )
715 mSelEndT = NUMDAYS-1; 715 mSelEndT = NUMDAYS-1;
716 // draw selected days with highlighted background color 716 // draw selected days with highlighted background color
717 if (mSelStart != NOSELECTION) { 717 if (mSelStart != NOSELECTION) {
718 bool skip = false; 718 bool skip = false;
719 if ( ! mouseDown ) { 719 if ( ! mouseDown ) {
720 int mo = days[20].month(); 720 int mo = days[20].month();
721 //qDebug("-- %d %d ", mSelStartT, mSelEndT); 721 //qDebug("-- %d %d ", mSelStartT, mSelEndT);
722 //qDebug("%d %d %d - d %d", mo, days[mSelStartT].month() , days[mSelEndT].month(), days[mSelEndT].day() ); 722 //qDebug("%d %d %d - d %d", mo, days[mSelStartT].month() , days[mSelEndT].month(), days[mSelEndT].day() );
723 int startMo = days[mSelStartT].month(); 723 int startMo = days[mSelStartT].month();
724 int endMo = days[mSelEndT].month(); 724 int endMo = days[mSelEndT].month();
725 if ( startMo == 12 && mo == 1 && endMo <= 2 ) 725 if ( startMo == 12 && mo == 1 && endMo <= 2 )
726 startMo = 1; 726 startMo = 1;
727 if ( endMo == 1 && mo == 12 ) 727 if ( endMo == 1 && mo == 12 )
728 endMo = 12; 728 endMo = 12;
729 if ( mo == 12 && startMo == 1 ) 729 if ( mo == 12 && startMo == 1 )
730 startMo = 13; 730 startMo = 13;
731 if ( (startMo > mo || endMo < mo) ) { 731 if ( (startMo > mo || endMo < mo) ) {
732 skip = true; 732 skip = true;
733 } else { 733 } else {
734 if ( days[mSelStartT].month() != mo ) { 734 if ( days[mSelStartT].month() != mo ) {
735 int add = days[mSelStartT].daysInMonth ()-days[mSelStartT].day(); 735 int add = days[mSelStartT].daysInMonth ()-days[mSelStartT].day();
736 mSelStartT += add +1; 736 mSelStartT += add +1;
737 } 737 }
738 if ( days[mSelEndT].month() != mo ) { 738 if ( days[mSelEndT].month() != mo ) {
739 int sub = days[mSelEndT].day(); 739 int sub = days[mSelEndT].day();
740 mSelEndT -= sub ; 740 mSelEndT -= sub ;
741 } 741 }
742 } 742 }
743 } 743 }
744 //qDebug("SKIP %d ", skip); 744 //qDebug("SKIP %d ", skip);
745 if ( ! skip ) { 745 if ( ! skip ) {
746 row = mSelStartT/7; 746 row = mSelStartT/7;
747 col = mSelStartT -row*7; 747 col = mSelStartT -row*7;
748 QColor selcol = KOPrefs::instance()->mHighlightColor; 748 QColor selcol = KOPrefs::instance()->mHighlightColor;
749 int addCol = 0; 749 int addCol = 0;
750 int addRow = 0; 750 int addRow = 0;
751 int addRow2 = 0; 751 int addRow2 = 0;
752 int addCol2 = 0; 752 int addCol2 = 0;
753 if (row == mSelEndT/7) { 753 if (row == mSelEndT/7) {
754 if ( rowModulo ) { 754 if ( rowModulo ) {
755 if ( row >= 6 - rowModulo ) 755 if ( row >= 6 - rowModulo )
756 addRow = row - 5 + rowModulo; 756 addRow = row - 5 + rowModulo;
757 } 757 }
758 if ( colModulo ) { 758 if ( colModulo ) {
759 int colt1 = mSelEndT%7; 759 int colt1 = mSelEndT%7;
760 //qDebug("colt1 %d ", colt1 ); 760 //qDebug("colt1 %d ", colt1 );
761 if ( colt1 >= 7 - colModulo ) 761 if ( colt1 >= 7 - colModulo )
762 addCol = colt1 - 7 + colModulo+1; 762 addCol = colt1 - 7 + colModulo+1;
763 int colt = mSelStartT%7; 763 int colt = mSelStartT%7;
764 if ( colt >= 7 - colModulo ) 764 if ( colt >= 7 - colModulo )
765 addCol2 = colt - 7 + colModulo; 765 addCol2 = colt - 7 + colModulo;
766 addCol -= addCol2; 766 addCol -= addCol2;
767 //qDebug("COL %d %d %d %d ",col , colt1 ,addCol ,addCol2 ); 767 //qDebug("COL %d %d %d %d ",col , colt1 ,addCol ,addCol2 );
768 } 768 }
769 // Single row selection 769 // Single row selection
770 if ( row == 0) 770 if ( row == 0)
771 addRow = 1; 771 addRow = 1;
772 p.fillRect(isRTL ? (7 - (mSelEndT-mSelStartT+1) - col)*dwidth : col*dwidth+1+addCol2, 772 p.fillRect(isRTL ? (7 - (mSelEndT-mSelStartT+1) - col)*dwidth : col*dwidth+1+addCol2,
773 row*dheight+addRow, (mSelEndT-mSelStartT+1)*dwidth+addCol, dheight+1, selcol); 773 row*dheight+addRow, (mSelEndT-mSelStartT+1)*dwidth+addCol, dheight+1, selcol);
774 } else { 774 } else {
775 // draw first row to the right 775 // draw first row to the right
776 if ( colModulo ) { 776 if ( colModulo ) {
777 if ( col >= 7 - colModulo ) 777 if ( col >= 7 - colModulo )
778 addCol2 = col - 7 + colModulo; 778 addCol2 = col - 7 + colModulo;
779 } 779 }
780 if ( rowModulo ) { 780 if ( rowModulo ) {
781 if ( row >= 6 - rowModulo ) 781 if ( row >= 6 - rowModulo )
782 addRow = row - 5 + rowModulo; 782 addRow = row - 5 + rowModulo;
783 } 783 }
784 if ( row == 0) 784 if ( row == 0)
785 addRow = 1; 785 addRow = 1;
786 int drawWid = width()-(col*dwidth+1+addCol2)-1; 786 int drawWid = width()-(col*dwidth+1+addCol2)-1;
787 p.fillRect(isRTL ? 0 : col*dwidth+1+addCol2, row*dheight+addRow, drawWid, 787 p.fillRect(isRTL ? 0 : col*dwidth+1+addCol2, row*dheight+addRow, drawWid,
788 dheight+1, selcol); 788 dheight+1, selcol);
789 // draw full block till last line 789 // draw full block till last line
790 selh = mSelEndT/7-row; 790 selh = mSelEndT/7-row;
791 addRow = 0; 791 addRow = 0;
792 if ( rowModulo ) { 792 if ( rowModulo ) {
793 if ( mSelEndT/7 >= 6 - rowModulo ) 793 if ( mSelEndT/7 >= 6 - rowModulo )
794 addRow = mSelEndT/7 - 5 + rowModulo; 794 addRow = mSelEndT/7 - 5 + rowModulo;
795 } 795 }
796 //qDebug("%d %d %d ",selh, row, addRow );
797 int addrow2 = addRow-selh+1;
798 if ( addrow2 < 0 )
799 addrow2 = 0;
796 if (selh > 1) { 800 if (selh > 1) {
797 p.fillRect(1, (row+1)*dheight, 7*dwidth+colModulo, (selh-1)*dheight+addRow,selcol); 801 p.fillRect(1, (row+1)*dheight+addrow2, 7*dwidth+colModulo, (selh-1)*dheight+addRow,selcol);
798 } 802 }
799 // draw last block from left to mSelEndT 803 // draw last block from left to mSelEndT
800 selw = mSelEndT-7*(mSelEndT/7)+1; 804 selw = mSelEndT-7*(mSelEndT/7)+1;
801 //qDebug("esl %d ",selw ); 805 //qDebug("esl %d ",selw );
802 int add = 0; 806 int add = 0;
803 if ( colModulo ) { 807 if ( colModulo ) {
804 add = 7 - colModulo; 808 add = 7 - colModulo;
805 if ( selw > add ) 809 if ( selw > add )
806 add = selw - add; 810 add = selw - add;
807 else 811 else
808 add = 0; 812 add = 0;
809 } 813 }
810 //qDebug("add %d ", add); 814 //qDebug("add %d ", add);
811 p.fillRect(isRTL ? (7-selw)*dwidth : 1, (row+selh)*dheight+addRow, 815 p.fillRect(isRTL ? (7-selw)*dwidth : 1, (row+selh)*dheight+addRow,
812 selw*dwidth+add, dheight+1, selcol); 816 selw*dwidth+add, dheight+1, selcol);
813 } 817 }
814 } 818 }
815 } 819 }
816 820
817 // iterate over all days in the matrix and draw the day label in appropriate colors 821 // iterate over all days in the matrix and draw the day label in appropriate colors
818 QColor actcol = mDefaultTextColorShaded; 822 QColor actcol = mDefaultTextColorShaded;
819 p.setPen(actcol); 823 p.setPen(actcol);
820 QPen tmppen; 824 QPen tmppen;
821 for(int i = 0; i < NUMDAYS; i++) { 825 for(int i = 0; i < NUMDAYS; i++) {
822 row = i/7; 826 row = i/7;
823 col = isRTL ? 6-(i-row*7) : i-row*7; 827 col = isRTL ? 6-(i-row*7) : i-row*7;
824 828
825 // if it is the first day of a month switch color from normal to shaded and vice versa 829 // if it is the first day of a month switch color from normal to shaded and vice versa
826 if ( KOGlobals::self()->calendarSystem()->day( days[i] ) == 1) { 830 if ( KOGlobals::self()->calendarSystem()->day( days[i] ) == 1) {
827 if (actcol == mDefaultTextColorShaded) { 831 if (actcol == mDefaultTextColorShaded) {
828 actcol = mDefaultTextColor; 832 actcol = mDefaultTextColor;
829 } else { 833 } else {
830 actcol = mDefaultTextColorShaded; 834 actcol = mDefaultTextColorShaded;
831 } 835 }
832 p.setPen(actcol); 836 p.setPen(actcol);
833 } 837 }
834 if (actcol == mDefaultTextColorShaded) { 838 if (actcol == mDefaultTextColorShaded) {
835 if ( ! mouseDown ) { 839 if ( ! mouseDown ) {
836 continue; 840 continue;
837 } 841 }
838 } 842 }
839 //Reset pen color after selected days block 843 //Reset pen color after selected days block
840 if (i == mSelEndT+1) { 844 if (i == mSelEndT+1) {
841 p.setPen(actcol); 845 p.setPen(actcol);
842 } 846 }
843 847
844 // if today then draw rectangle around day 848 // if today then draw rectangle around day
845 if (today == i) { 849 if (today == i) {
846 tmppen = p.pen(); 850 tmppen = p.pen();
847 QPen mTodayPen(p.pen()); 851 QPen mTodayPen(p.pen());
848 if ( daysize.width() < 20 ) 852 if ( daysize.width() < 20 )
849 mTodayPen.setWidth(1); 853 mTodayPen.setWidth(1);
850 else 854 else
851 mTodayPen.setWidth(mTodayMarginWidth); 855 mTodayPen.setWidth(mTodayMarginWidth);
852 //draw red rectangle for holidays 856 //draw red rectangle for holidays
853 if (!mHolidays[i].isNull()) { 857 if (!mHolidays[i].isNull()) {
854 if (actcol == mDefaultTextColor) { 858 if (actcol == mDefaultTextColor) {
855 mTodayPen.setColor(KOPrefs::instance()->mHolidayColor); 859 mTodayPen.setColor(KOPrefs::instance()->mHolidayColor);
856 } else { 860 } else {
857 mTodayPen.setColor(mHolidayColorShaded); 861 mTodayPen.setColor(mHolidayColorShaded);
858 } 862 }
859 } 863 }
860 //draw gray rectangle for today if in selection 864 //draw gray rectangle for today if in selection
861 if (i >= mSelStartT && i <= mSelEndT) { 865 if (i >= mSelStartT && i <= mSelEndT) {
862 QColor grey("grey"); 866 QColor grey("grey");
863 mTodayPen.setColor(grey); 867 mTodayPen.setColor(grey);
864 } 868 }
865 p.setPen(mTodayPen); 869 p.setPen(mTodayPen);
866 870
867 871
868 int addCol = 0; 872 int addCol = 0;
869 int addRow = 0; 873 int addRow = 0;
870 if (rowModulo) { 874 if (rowModulo) {
871 if ( row >= 6 - rowModulo ) 875 if ( row >= 6 - rowModulo )
872 addRow = row - 5 + rowModulo; 876 addRow = row - 5 + rowModulo;
873 } 877 }
874 if ( colModulo ) { 878 if ( colModulo ) {
875 if ( col >= 7 - colModulo ) 879 if ( col >= 7 - colModulo )
876 addCol = col - 6 + colModulo-1; 880 addCol = col - 6 + colModulo-1;
877 } 881 }
878 882
879 addCol += 1; 883 addCol += 1;
880 if ( row == 0 ) 884 if ( row == 0 )
881 addRow = 1; 885 addRow = 1;
882 p.drawRect(col*dwidth+addCol, row*dheight+addRow, dwidth+1, dheight+1); 886 p.drawRect(col*dwidth+addCol, row*dheight+addRow, dwidth+1, dheight+1);
883 p.setPen(tmppen); 887 p.setPen(tmppen);
884 } 888 }
885 889
886 // if any events are on that day then draw it using a bold font 890 // if any events are on that day then draw it using a bold font
887 if ( eDays.testBit(i) ) { 891 if ( eDays.testBit(i) ) {
888 QFont myFont = font(); 892 QFont myFont = font();
889 myFont.setBold(true); 893 myFont.setBold(true);
890 p.setFont(myFont); 894 p.setFont(myFont);
891 } 895 }
892 896
893 // if it is a holiday then use the default holiday color 897 // if it is a holiday then use the default holiday color
894 if ( !mHolidays[i].isNull()) { 898 if ( !mHolidays[i].isNull()) {
895 if ( bDays.testBit(i) ) { 899 if ( bDays.testBit(i) ) {
896 if ( hDays.testBit(i) ) 900 if ( hDays.testBit(i) )
897 p.setPen(QColor(Qt::green)); 901 p.setPen(QColor(Qt::green));
898 else 902 else
899 p.setPen(QColor(Qt::green).dark()); 903 p.setPen(QColor(Qt::green).dark());
900 } else { 904 } else {
901 if (actcol == mDefaultTextColor ) { 905 if (actcol == mDefaultTextColor ) {
902 p.setPen(KOPrefs::instance()->mHolidayColor); 906 p.setPen(KOPrefs::instance()->mHolidayColor);
903 } else { 907 } else {
904 p.setPen(mHolidayColorShaded); 908 p.setPen(mHolidayColorShaded);
905 } 909 }
906 } 910 }
907 } 911 }
908 912
909 // draw selected days with special color 913 // draw selected days with special color
910 // DO NOT specially highlight holidays in selection ! 914 // DO NOT specially highlight holidays in selection !
911 if (i >= mSelStartT && i <= mSelEndT) { 915 if (i >= mSelStartT && i <= mSelEndT) {
912 ;//p.setPen(mSelectedDaysColor); 916 ;//p.setPen(mSelectedDaysColor);
913 } 917 }
914 918
915 int addCol = 0; 919 int addCol = 0;
916 int addRow = 0; 920 int addRow = 0;
917 if ( colModulo ) { 921 if ( colModulo ) {
918 if ( col >= 7 - colModulo ) 922 if ( col >= 7 - colModulo )
919 addCol = col - 7 + colModulo; 923 addCol = col - 7 + colModulo;
920 } 924 }
921 if ( rowModulo ) { 925 if ( rowModulo ) {
922 if ( row >= 6 - rowModulo ) 926 if ( row >= 6 - rowModulo )
923 addRow = row - 5 + rowModulo; 927 addRow = row - 5 + rowModulo;
924 } 928 }
925 //qDebug("add %d %d -- %d %d ", col, addCol, row, addRow); 929 //qDebug("add %d %d -- %d %d ", col, addCol, row, addRow);
926 ++addCol;//++addCol; 930 ++addCol;//++addCol;
927 if ( row == 0) 931 if ( row == 0)
928 addRow = 1; 932 addRow = 1;
929 p.drawText(col*dwidth+addCol, row*dheight+addRow, dwidth, dheight, 933 p.drawText(col*dwidth+addCol, row*dheight+addRow, dwidth, dheight,
930 Qt::AlignHCenter | Qt::AlignVCenter, daylbls[i]); 934 Qt::AlignHCenter | Qt::AlignVCenter, daylbls[i]);
931 935
932 // reset color to actual color 936 // reset color to actual color
933 if (!mHolidays[i].isNull()) { 937 if (!mHolidays[i].isNull()) {
934 p.setPen(actcol); 938 p.setPen(actcol);
935 } 939 }
936 // reset bold font to plain font 940 // reset bold font to plain font
937 if ( eDays.testBit(i)) { 941 if ( eDays.testBit(i)) {
938 QFont myFont = font(); 942 QFont myFont = font();
939 myFont.setBold(false); 943 myFont.setBold(false);
940 p.setFont(myFont); 944 p.setFont(myFont);
941 } 945 }
942 } 946 }
943 } else { 947 } else {
944 //qDebug("NO redraw "); 948 //qDebug("NO redraw ");
945 } 949 }
946 bitBlt (this, 0, 0, &myPix, 0 ,0,width(), height() ,CopyROP); 950 bitBlt (this, 0, 0, &myPix, 0 ,0,width(), height() ,CopyROP);
947 mRedrawNeeded = false; 951 mRedrawNeeded = false;
948} 952}
949 953
950// ---------------------------------------------------------------------------- 954// ----------------------------------------------------------------------------
951// R E SI Z E E V E N T H A N D L I N G 955// R E SI Z E E V E N T H A N D L I N G
952// ---------------------------------------------------------------------------- 956// ----------------------------------------------------------------------------
953 957
954void KODayMatrix::resizeEvent(QResizeEvent *) 958void KODayMatrix::resizeEvent(QResizeEvent *)
955{ 959{
956 QRect sz = frameRect(); 960 QRect sz = frameRect();
957 daysize.setHeight(sz.height()*7 / NUMDAYS); 961 daysize.setHeight(sz.height()*7 / NUMDAYS);
958 daysize.setWidth(sz.width() / 7); 962 daysize.setWidth(sz.width() / 7);
959} 963}
960 964
961QSize KODayMatrix::sizeHint() const 965QSize KODayMatrix::sizeHint() const
962{ 966{
963 967
964 QFontMetrics fm ( font() ); 968 QFontMetrics fm ( font() );
965 int wid = fm.width( "30") *7+3; 969 int wid = fm.width( "30") *7+3;
966 int hei = fm.height() * 6+3; 970 int hei = fm.height() * 6+3;
967 //qDebug("KODayMatrix::sizeHint()********************* %d %d", wid , hei); 971 //qDebug("KODayMatrix::sizeHint()********************* %d %d", wid , hei);
968 return QSize ( wid, hei ); 972 return QSize ( wid, hei );
969 973
970} 974}
diff --git a/microkde/KDGanttMinimizeSplitter.cpp b/microkde/KDGanttMinimizeSplitter.cpp
index 6cb1f31..253175e 100644
--- a/microkde/KDGanttMinimizeSplitter.cpp
+++ b/microkde/KDGanttMinimizeSplitter.cpp
@@ -82,397 +82,406 @@ KDGanttSplitterHandle::KDGanttSplitterHandle( Qt::Orientation o,
82 setMouseTracking( true ); 82 setMouseTracking( true );
83 mMouseDown = false; 83 mMouseDown = false;
84 //setMaximumHeight( 5 ); // test only 84 //setMaximumHeight( 5 ); // test only
85} 85}
86 86
87QSize KDGanttSplitterHandle::sizeHint() const 87QSize KDGanttSplitterHandle::sizeHint() const
88{ 88{
89 return mSizeHint; 89 return mSizeHint;
90} 90}
91 91
92void KDGanttSplitterHandle::setOrientation( Qt::Orientation o ) 92void KDGanttSplitterHandle::setOrientation( Qt::Orientation o )
93{ 93{
94 orient = o; 94 orient = o;
95#ifndef QT_NO_CURSOR 95#ifndef QT_NO_CURSOR
96 if ( o == KDGanttMinimizeSplitter::Horizontal ) 96 if ( o == KDGanttMinimizeSplitter::Horizontal )
97 setCursor( splitHCursor ); 97 setCursor( splitHCursor );
98 else 98 else
99 setCursor( splitVCursor ); 99 setCursor( splitVCursor );
100#endif 100#endif
101} 101}
102 102
103 103
104void KDGanttSplitterHandle::mouseMoveEvent( QMouseEvent *e ) 104void KDGanttSplitterHandle::mouseMoveEvent( QMouseEvent *e )
105{ 105{
106 updateCursor( e->pos() ); 106 updateCursor( e->pos() );
107 if ( !(e->state()&LeftButton) ) 107 if ( !(e->state()&LeftButton) )
108 return; 108 return;
109 109
110 if ( _activeButton != 0) 110 if ( _activeButton != 0)
111 return; 111 return;
112 112
113 QCOORD pos = s->pick(parentWidget()->mapFromGlobal(e->globalPos())) 113 QCOORD pos = s->pick(parentWidget()->mapFromGlobal(e->globalPos()))
114 - mouseOffset; 114 - mouseOffset;
115 if ( opaque() ) { 115 if ( opaque() ) {
116 s->moveSplitter( pos, id() ); 116 s->moveSplitter( pos, id() );
117 } else { 117 } else {
118 int min = pos; int max = pos; 118 int min = pos; int max = pos;
119 s->getRange( id(), &min, &max ); 119 s->getRange( id(), &min, &max );
120 s->setRubberband( QMAX( min, QMIN(max, pos ))); 120 s->setRubberband( QMAX( min, QMIN(max, pos )));
121 } 121 }
122 _collapsed = false; 122 _collapsed = false;
123} 123}
124 124
125void KDGanttSplitterHandle::mousePressEvent( QMouseEvent *e ) 125void KDGanttSplitterHandle::mousePressEvent( QMouseEvent *e )
126{ 126{
127 if ( e->button() == LeftButton ) { 127 if ( e->button() == LeftButton ) {
128 _activeButton = onButton( e->pos() ); 128 _activeButton = onButton( e->pos() );
129 mouseOffset = s->pick(e->pos()); 129 mouseOffset = s->pick(e->pos());
130 mMouseDown = true; 130 mMouseDown = true;
131 repaint(); 131 repaint();
132 updateCursor( e->pos() ); 132 updateCursor( e->pos() );
133 } 133 }
134} 134}
135 135
136void KDGanttSplitterHandle::updateCursor( const QPoint& p) 136void KDGanttSplitterHandle::updateCursor( const QPoint& p)
137{ 137{
138 if ( onButton( p ) != 0 ) { 138 if ( onButton( p ) != 0 ) {
139 setCursor( arrowCursor ); 139 setCursor( arrowCursor );
140 } 140 }
141 else { 141 else {
142 if ( orient == KDGanttMinimizeSplitter::Horizontal ) 142 if ( orient == KDGanttMinimizeSplitter::Horizontal )
143 setCursor( splitHCursor ); 143 setCursor( splitHCursor );
144 else 144 else
145 setCursor( splitVCursor ); 145 setCursor( splitVCursor );
146 } 146 }
147} 147}
148void KDGanttSplitterHandle::toggle() 148void KDGanttSplitterHandle::toggle()
149{ 149{
150 int pos; 150 int pos;
151 int min, max; 151 int min, max;
152 if ( !_collapsed ) { 152 if ( !_collapsed ) {
153 s->expandPos( id(), &min, &max ); 153 s->expandPos( id(), &min, &max );
154 if ( s->minimizeDirection() == KDGanttMinimizeSplitter::Left 154 if ( s->minimizeDirection() == KDGanttMinimizeSplitter::Left
155 || s->minimizeDirection() == KDGanttMinimizeSplitter::Up ) { 155 || s->minimizeDirection() == KDGanttMinimizeSplitter::Up ) {
156 pos = min; 156 pos = min;
157 } 157 }
158 else { 158 else {
159 pos = max; 159 pos = max;
160 } 160 }
161 161
162 _origPos = s->pick(mapToParent( QPoint( 0,0 ) )); 162 _origPos = s->pick(mapToParent( QPoint( 0,0 ) ));
163 s->moveSplitter( pos, id() ); 163 s->moveSplitter( pos, id() );
164 _collapsed = true; 164 _collapsed = true;
165 } 165 }
166 else { 166 else {
167 s->moveSplitter( _origPos, id() ); 167 s->moveSplitter( _origPos, id() );
168 _collapsed = false; 168 _collapsed = false;
169 } 169 }
170 repaint(); 170 repaint();
171} 171}
172 172
173void KDGanttSplitterHandle::mouseReleaseEvent( QMouseEvent *e ) 173void KDGanttSplitterHandle::mouseReleaseEvent( QMouseEvent *e )
174{ 174{
175 mMouseDown = false; 175 mMouseDown = false;
176 if ( _activeButton != 0 ) { 176 if ( _activeButton != 0 ) {
177 if ( onButton( e->pos() ) == _activeButton ) 177 if ( onButton( e->pos() ) == _activeButton )
178 { 178 {
179 toggle(); 179 toggle();
180 } 180 }
181 _activeButton = 0; 181 _activeButton = 0;
182 updateCursor( e->pos() ); 182 updateCursor( e->pos() );
183 } 183 }
184 else { 184 else {
185 if ( !opaque() && e->button() == LeftButton ) { 185 if ( !opaque() && e->button() == LeftButton ) {
186 QCOORD pos = s->pick(parentWidget()->mapFromGlobal(e->globalPos())) 186 QCOORD pos = s->pick(parentWidget()->mapFromGlobal(e->globalPos()))
187 - mouseOffset; 187 - mouseOffset;
188 s->setRubberband( -1 ); 188 s->setRubberband( -1 );
189 s->moveSplitter( pos, id() ); 189 s->moveSplitter( pos, id() );
190 } 190 }
191 } 191 }
192 if ( s->rubberBand() ) 192 if ( s->rubberBand() )
193 s->rubberBand()->hide(); 193 s->rubberBand()->hide();
194 repaint(); 194 repaint();
195} 195}
196 196
197int KDGanttSplitterHandle::onButton( const QPoint& p ) 197int KDGanttSplitterHandle::onButton( const QPoint& p )
198{ 198{
199 QValueList<QPointArray> list = buttonRegions(); 199 QValueList<QPointArray> list = buttonRegions();
200 int index = 1; 200 int index = 1;
201 int add = 12; 201 int add = 12;
202 for( QValueList<QPointArray>::Iterator it = list.begin(); it != list.end(); ++it ) { 202 for( QValueList<QPointArray>::Iterator it = list.begin(); it != list.end(); ++it ) {
203 QRect rect = (*it).boundingRect(); 203 QRect rect = (*it).boundingRect();
204 rect.setLeft( rect.left()- add ); 204 rect.setLeft( rect.left()- add );
205 rect.setRight( rect.right() + add); 205 rect.setRight( rect.right() + add);
206 rect.setTop( rect.top()- add ); 206 rect.setTop( rect.top()- add );
207 rect.setBottom( rect.bottom() + add); 207 rect.setBottom( rect.bottom() + add);
208 if ( rect.contains( p ) ) { 208 if ( rect.contains( p ) ) {
209 return index; 209 return index;
210 } 210 }
211 index++; 211 index++;
212 } 212 }
213 return 0; 213 return 0;
214} 214}
215 215
216 216
217QValueList<QPointArray> KDGanttSplitterHandle::buttonRegions() 217QValueList<QPointArray> KDGanttSplitterHandle::buttonRegions()
218{ 218{
219 QValueList<QPointArray> list; 219 QValueList<QPointArray> list;
220 220
221 int sw = 8; 221 int sw = 8;
222 int yyy = 1; 222 int yyy = 1;
223 int xxx = 1; 223 int xxx = 1;
224 int voffset[] = { (int) -sw*3, (int) sw*3 }; 224 int voffset[] = { (int) -sw*3, (int) sw*3 };
225 for ( int i = 0; i < 2; i++ ) { 225 for ( int i = 0; i < 2; i++ ) {
226 QPointArray arr; 226 QPointArray arr;
227 if ( !_collapsed && s->minimizeDirection() == KDGanttMinimizeSplitter::Right || 227 if ( !_collapsed && s->minimizeDirection() == KDGanttMinimizeSplitter::Right ||
228 _collapsed && s->minimizeDirection() == KDGanttMinimizeSplitter::Left) { 228 _collapsed && s->minimizeDirection() == KDGanttMinimizeSplitter::Left) {
229 int mid = height()/2 + voffset[i]; 229 int mid = height()/2 + voffset[i];
230 arr.setPoints( 3, 230 arr.setPoints( 3,
231 1-xxx, mid - sw + 4, 231 1-xxx, mid - sw + 4,
232 sw-3-xxx, mid, 232 sw-3-xxx, mid,
233 1-xxx, mid + sw -4); 233 1-xxx, mid + sw -4);
234 } 234 }
235 else if ( !_collapsed && s->minimizeDirection() == KDGanttMinimizeSplitter::Left || 235 else if ( !_collapsed && s->minimizeDirection() == KDGanttMinimizeSplitter::Left ||
236 _collapsed && s->minimizeDirection() == KDGanttMinimizeSplitter::Right ) { 236 _collapsed && s->minimizeDirection() == KDGanttMinimizeSplitter::Right ) {
237 int mid = height()/2 + voffset[i]; 237 int mid = height()/2 + voffset[i];
238 arr.setPoints( 3, 238 arr.setPoints( 3,
239 sw-4, mid - sw + 4, 239 sw-4, mid - sw + 4,
240 0, mid, 240 0, mid,
241 sw-4, mid + sw - 4); 241 sw-4, mid + sw - 4);
242 } 242 }
243 else if ( !_collapsed && s->minimizeDirection() == KDGanttMinimizeSplitter::Up || 243 else if ( !_collapsed && s->minimizeDirection() == KDGanttMinimizeSplitter::Up ||
244 _collapsed && s->minimizeDirection() == KDGanttMinimizeSplitter::Down) { 244 _collapsed && s->minimizeDirection() == KDGanttMinimizeSplitter::Down) {
245 int mid = width()/2 + voffset[i]; 245 int mid = width()/2 + voffset[i];
246 arr.setPoints( 3, 246 arr.setPoints( 3,
247 mid - sw + 4, sw-4, 247 mid - sw + 4, sw-4,
248 mid, 0, 248 mid, 0,
249 mid + sw - 4, sw-4 ); 249 mid + sw - 4, sw-4 );
250 } 250 }
251 else if ( !_collapsed && s->minimizeDirection() == KDGanttMinimizeSplitter::Down || 251 else if ( !_collapsed && s->minimizeDirection() == KDGanttMinimizeSplitter::Down ||
252 _collapsed && s->minimizeDirection() == KDGanttMinimizeSplitter::Up ) { 252 _collapsed && s->minimizeDirection() == KDGanttMinimizeSplitter::Up ) {
253 int mid = width()/2 + voffset[i]; 253 int mid = width()/2 + voffset[i];
254 arr.setPoints( 3, 254 arr.setPoints( 3,
255 mid - sw + 4, 1-yyy, 255 mid - sw + 4, 1-yyy,
256 mid, sw-3-yyy, 256 mid, sw-3-yyy,
257 mid + sw -4, 1-yyy); 257 mid + sw -4, 1-yyy);
258 } 258 }
259 list.append( arr ); 259 list.append( arr );
260 } 260 }
261 return list; 261 return list;
262} 262}
263 263
264void KDGanttSplitterHandle::paintEvent( QPaintEvent * ) 264void KDGanttSplitterHandle::paintEvent( QPaintEvent * )
265{ 265{
266 QPixmap buffer( size() ); 266 QPixmap buffer( size() );
267 QPainter p( &buffer ); 267 QPainter p( &buffer );
268 268
269 //LR 269 //LR
270 // Draw the splitter rectangle 270 // Draw the splitter rectangle
271 p.setBrush( colorGroup().background() ); 271 p.setBrush( colorGroup().background() );
272 p.setPen( colorGroup().foreground() ); 272 p.setPen( colorGroup().foreground() );
273 //p.drawRect( rect() ); 273 //p.drawRect( rect() );
274 buffer.fill( colorGroup().background() ); 274#ifndef DESKTOP_VERSION
275 if ( mMouseDown )
276 buffer.fill( QColor( 242,27,255 ) );
277 else
278#endif
279 buffer.fill( colorGroup().background() );
275 //buffer.fill( backgroundColor() ); 280 //buffer.fill( backgroundColor() );
276 // parentWidget()->style().drawPrimitive( QStyle::PE_Panel, &p, rect(), parentWidget()->colorGroup()); 281 // parentWidget()->style().drawPrimitive( QStyle::PE_Panel, &p, rect(), parentWidget()->colorGroup());
277 282
278 int sw = 8; // Hardcoded, given I didn't use styles anymore, I didn't like to use their size 283 int sw = 8; // Hardcoded, given I didn't use styles anymore, I didn't like to use their size
279 284
280 // arrow color 285 // arrow color
281 QColor col; 286 QColor col;
282 if ( _activeButton ) 287 if ( _activeButton )
283 col = colorGroup().background().dark( 250 ); 288 col = colorGroup().background().dark( 250 );
284 else { 289 else {
285 if ( mMouseDown ) 290 if ( mMouseDown )
286 col = Qt::white; 291#ifndef DESKTOP_VERSION
292 col = QColor( 178,18,188);//QColor( 242,27,255 );//Qt::white;
293#else
294 col = Qt::white;
295#endif
287 else 296 else
288 col = colorGroup().background().dark( 150 ); 297 col = colorGroup().background().dark( 150 );
289 } 298 }
290 //QColor col = backgroundColor().dark( 130 ); 299 //QColor col = backgroundColor().dark( 130 );
291 p.setBrush( col ); 300 p.setBrush( col );
292 p.setPen( col ); 301 p.setPen( col );
293 302
294 QValueList<QPointArray> list = buttonRegions(); 303 QValueList<QPointArray> list = buttonRegions();
295 int index = 1; 304 int index = 1;
296 if ( mUseOffset ) 305 if ( mUseOffset )
297 p.translate( 0, 1 ); 306 p.translate( 0, 1 );
298 for ( QValueList<QPointArray>::Iterator it = list.begin(); it != list.end(); ++it ) { 307 for ( QValueList<QPointArray>::Iterator it = list.begin(); it != list.end(); ++it ) {
299 if ( index == _activeButton ) { 308 if ( index == _activeButton ) {
300 309
301 /* 310 /*
302 if ( ! _collapsed ) { 311 if ( ! _collapsed ) {
303 p.save(); 312 p.save();
304 // p.translate( parentWidget()->style().pixelMetric( QStyle::PM_ButtonShiftHorizontal ), 313 // p.translate( parentWidget()->style().pixelMetric( QStyle::PM_ButtonShiftHorizontal ),
305 // parentWidget()->style().pixelMetric( QStyle::PM_ButtonShiftVertical ) ); 314 // parentWidget()->style().pixelMetric( QStyle::PM_ButtonShiftVertical ) );
306 p.translate( -1, 0 ); 315 p.translate( -1, 0 );
307 p.drawPolygon( *it, true ); 316 p.drawPolygon( *it, true );
308 p.restore(); } else 317 p.restore(); } else
309 */ 318 */
310 p.drawPolygon( *it, true ); 319 p.drawPolygon( *it, true );
311 320
312 } 321 }
313 else { 322 else {
314 /* 323 /*
315 if ( ! _collapsed ) { 324 if ( ! _collapsed ) {
316 p.save(); 325 p.save();
317 p.translate( -1, 0 ); 326 p.translate( -1, 0 );
318 p.drawPolygon( *it, true ); 327 p.drawPolygon( *it, true );
319 p.restore(); 328 p.restore();
320 } else 329 } else
321 */ 330 */
322 p.drawPolygon( *it, true ); 331 p.drawPolygon( *it, true );
323 332
324 } 333 }
325 index++; 334 index++;
326 } 335 }
327 336
328 // Draw the lines between the arrows 337 // Draw the lines between the arrows
329 if ( s->minimizeDirection() == KDGanttMinimizeSplitter::Left || 338 if ( s->minimizeDirection() == KDGanttMinimizeSplitter::Left ||
330 s->minimizeDirection() == KDGanttMinimizeSplitter::Right ) { 339 s->minimizeDirection() == KDGanttMinimizeSplitter::Right ) {
331 int mid = height()/2; 340 int mid = height()/2;
332 p.drawLine ( 1, mid - sw, 1, mid + sw ); 341 p.drawLine ( 1, mid - sw, 1, mid + sw );
333 p.drawLine ( 3, mid - sw, 3, mid + sw ); 342 p.drawLine ( 3, mid - sw, 3, mid + sw );
334 } 343 }
335 else if ( s->minimizeDirection() == KDGanttMinimizeSplitter::Up || 344 else if ( s->minimizeDirection() == KDGanttMinimizeSplitter::Up ||
336 s->minimizeDirection() == KDGanttMinimizeSplitter::Down ) { 345 s->minimizeDirection() == KDGanttMinimizeSplitter::Down ) {
337 int mid = width()/2; 346 int mid = width()/2;
338 p.drawLine( mid -sw, 1, mid +sw, 1 ); 347 p.drawLine( mid -sw, 1, mid +sw, 1 );
339 p.drawLine( mid -sw, 3, mid +sw, 3 ); 348 p.drawLine( mid -sw, 3, mid +sw, 3 );
340 } 349 }
341 bitBlt( this, 0, 0, &buffer ); 350 bitBlt( this, 0, 0, &buffer );
342 351
343} 352}
344#endif 353#endif
345 354
346class QSplitterLayoutStruct 355class QSplitterLayoutStruct
347{ 356{
348public: 357public:
349 KDGanttMinimizeSplitter::ResizeMode mode; 358 KDGanttMinimizeSplitter::ResizeMode mode;
350 QCOORD sizer; 359 QCOORD sizer;
351 bool isSplitter; 360 bool isSplitter;
352 QWidget *wid; 361 QWidget *wid;
353}; 362};
354 363
355class QSplitterData 364class QSplitterData
356{ 365{
357public: 366public:
358 QSplitterData() : opaque( FALSE ), firstShow( TRUE ) {} 367 QSplitterData() : opaque( FALSE ), firstShow( TRUE ) {}
359 368
360 QPtrList<QSplitterLayoutStruct> list; 369 QPtrList<QSplitterLayoutStruct> list;
361 bool opaque; 370 bool opaque;
362 bool firstShow; 371 bool firstShow;
363}; 372};
364 373
365void kdganttGeomCalc( QMemArray<QLayoutStruct> &chain, int start, int count, int pos, 374void kdganttGeomCalc( QMemArray<QLayoutStruct> &chain, int start, int count, int pos,
366 int space, int spacer ); 375 int space, int spacer );
367#endif // DOXYGEN_SKIP_INTERNAL 376#endif // DOXYGEN_SKIP_INTERNAL
368 377
369 378
370/*! 379/*!
371 \class KDGanttMinimizeSplitter KDGanttMinimizeSplitter.h 380 \class KDGanttMinimizeSplitter KDGanttMinimizeSplitter.h
372 \brief The KDGanttMinimizeSplitter class implements a splitter 381 \brief The KDGanttMinimizeSplitter class implements a splitter
373 widget with minimize buttons. 382 widget with minimize buttons.
374 383
375 This class (and its documentation) is largely a copy of Qt's 384 This class (and its documentation) is largely a copy of Qt's
376 QSplitter; the copying was necessary because QSplitter is not 385 QSplitter; the copying was necessary because QSplitter is not
377 extensible at all. QSplitter and its documentation are licensed 386 extensible at all. QSplitter and its documentation are licensed
378 according to the GPL and the Qt Professional License (if you hold 387 according to the GPL and the Qt Professional License (if you hold
379 such a license) and are (C) Trolltech AS. 388 such a license) and are (C) Trolltech AS.
380 389
381 A splitter lets the user control the size of child widgets by 390 A splitter lets the user control the size of child widgets by
382 dragging the boundary between the children. Any number of widgets 391 dragging the boundary between the children. Any number of widgets
383 may be controlled. 392 may be controlled.
384 393
385 To show a QListBox, a QListView and a QTextEdit side by side: 394 To show a QListBox, a QListView and a QTextEdit side by side:
386 395
387 \code 396 \code
388 KDGanttMinimizeSplitter *split = new KDGanttMinimizeSplitter( parent ); 397 KDGanttMinimizeSplitter *split = new KDGanttMinimizeSplitter( parent );
389 QListBox *lb = new QListBox( split ); 398 QListBox *lb = new QListBox( split );
390 QListView *lv = new QListView( split ); 399 QListView *lv = new QListView( split );
391 QTextEdit *ed = new QTextEdit( split ); 400 QTextEdit *ed = new QTextEdit( split );
392 \endcode 401 \endcode
393 402
394 In KDGanttMinimizeSplitter, the boundary can be either horizontal or 403 In KDGanttMinimizeSplitter, the boundary can be either horizontal or
395 vertical. The default is horizontal (the children are side by side) 404 vertical. The default is horizontal (the children are side by side)
396 but you can use setOrientation( QSplitter::Vertical ) to set it to 405 but you can use setOrientation( QSplitter::Vertical ) to set it to
397 vertical. 406 vertical.
398 407
399 Use setResizeMode() to specify 408 Use setResizeMode() to specify
400 that a widget should keep its size when the splitter is resized. 409 that a widget should keep its size when the splitter is resized.
401 410
402 Although KDGanttMinimizeSplitter normally resizes the children only 411 Although KDGanttMinimizeSplitter normally resizes the children only
403 at the end of a resize operation, if you call setOpaqueResize( TRUE 412 at the end of a resize operation, if you call setOpaqueResize( TRUE
404 ) the widgets are resized as often as possible. 413 ) the widgets are resized as often as possible.
405 414
406 The initial distribution of size between the widgets is determined 415 The initial distribution of size between the widgets is determined
407 by the initial size of each widget. You can also use setSizes() to 416 by the initial size of each widget. You can also use setSizes() to
408 set the sizes of all the widgets. The function sizes() returns the 417 set the sizes of all the widgets. The function sizes() returns the
409 sizes set by the user. 418 sizes set by the user.
410 419
411 If you hide() a child, its space will be distributed among the other 420 If you hide() a child, its space will be distributed among the other
412 children. It will be reinstated when you show() it again. It is also 421 children. It will be reinstated when you show() it again. It is also
413 possible to reorder the widgets within the splitter using 422 possible to reorder the widgets within the splitter using
414 moveToFirst() and moveToLast(). 423 moveToFirst() and moveToLast().
415*/ 424*/
416 425
417 426
418 427
419static QSize minSize( const QWidget* /*w*/ ) 428static QSize minSize( const QWidget* /*w*/ )
420{ 429{
421 return QSize(0,0); 430 return QSize(0,0);
422} 431}
423 432
424// This is the original version of minSize 433// This is the original version of minSize
425static QSize minSizeHint( const QWidget* w ) 434static QSize minSizeHint( const QWidget* w )
426{ 435{
427 QSize min = w->minimumSize(); 436 QSize min = w->minimumSize();
428 QSize s; 437 QSize s;
429 if ( min.height() <= 0 || min.width() <= 0 ) 438 if ( min.height() <= 0 || min.width() <= 0 )
430 s = w->minimumSizeHint(); 439 s = w->minimumSizeHint();
431 if ( min.height() > 0 ) 440 if ( min.height() > 0 )
432 s.setHeight( min.height() ); 441 s.setHeight( min.height() );
433 if ( min.width() > 0 ) 442 if ( min.width() > 0 )
434 s.setWidth( min.width() ); 443 s.setWidth( min.width() );
435 return s.expandedTo(QSize(0,0)); 444 return s.expandedTo(QSize(0,0));
436} 445}
437 446
438 447
439/*! 448/*!
440 Constructs a horizontal splitter with the \a parent and \a 449 Constructs a horizontal splitter with the \a parent and \a
441 name arguments being passed on to the QFrame constructor. 450 name arguments being passed on to the QFrame constructor.
442*/ 451*/
443KDGanttMinimizeSplitter::KDGanttMinimizeSplitter( QWidget *parent, const char *name ) 452KDGanttMinimizeSplitter::KDGanttMinimizeSplitter( QWidget *parent, const char *name )
444 :QFrame(parent,name,WPaintUnclipped) 453 :QFrame(parent,name,WPaintUnclipped)
445{ 454{
446 mRubberBand = 0; 455 mRubberBand = 0;
447 mFirstHandle = 0; 456 mFirstHandle = 0;
448#if QT_VERSION >= 232 457#if QT_VERSION >= 232
449 orient = Horizontal; 458 orient = Horizontal;
450 init(); 459 init();
451#endif 460#endif
452} 461}
453 462
454/*! 463/*!
455 Constructs a splitter with orientation \a o with the \a parent 464 Constructs a splitter with orientation \a o with the \a parent
456 and \a name arguments being passed on to the QFrame constructor. 465 and \a name arguments being passed on to the QFrame constructor.
457*/ 466*/
458KDGanttMinimizeSplitter::KDGanttMinimizeSplitter( Orientation o, QWidget *parent, const char *name ) 467KDGanttMinimizeSplitter::KDGanttMinimizeSplitter( Orientation o, QWidget *parent, const char *name )
459 :QFrame(parent,name,WPaintUnclipped) 468 :QFrame(parent,name,WPaintUnclipped)
460{ 469{
461 470
462 mRubberBand = 0; 471 mRubberBand = 0;
463 mFirstHandle = 0; 472 mFirstHandle = 0;
464#if QT_VERSION >= 232 473#if QT_VERSION >= 232
465 orient = o; 474 orient = o;
466 init(); 475 init();
467#endif 476#endif
468} 477}
469 478
470/*! 479/*!
471 Destroys the splitter and any children. 480 Destroys the splitter and any children.
472*/ 481*/
473KDGanttMinimizeSplitter::~KDGanttMinimizeSplitter() 482KDGanttMinimizeSplitter::~KDGanttMinimizeSplitter()
474{ 483{
475#if QT_VERSION >= 232 484#if QT_VERSION >= 232
476 data->list.setAutoDelete( TRUE ); 485 data->list.setAutoDelete( TRUE );
477 delete data; 486 delete data;
478#endif 487#endif