summaryrefslogtreecommitdiffabout
path: root/microkde
authorzautrix <zautrix>2005-01-22 10:18:16 (UTC)
committer zautrix <zautrix>2005-01-22 10:18:16 (UTC)
commit6946f6ab0ee6eeafee0c8ff5d33fffc0826c7452 (patch) (unidiff)
tree006248579ca44ad2e0c1a67db55b1a8013180ed7 /microkde
parentb715b109b70b8cd24a2d9da1d4863c44d79fb2a4 (diff)
downloadkdepimpi-6946f6ab0ee6eeafee0c8ff5d33fffc0826c7452.zip
kdepimpi-6946f6ab0ee6eeafee0c8ff5d33fffc0826c7452.tar.gz
kdepimpi-6946f6ab0ee6eeafee0c8ff5d33fffc0826c7452.tar.bz2
some small fixes
Diffstat (limited to 'microkde') (more/less context) (ignore whitespace changes)
-rw-r--r--microkde/kdatetbl.cpp5
1 files changed, 4 insertions, 1 deletions
diff --git a/microkde/kdatetbl.cpp b/microkde/kdatetbl.cpp
index 146291b..508ce31 100644
--- a/microkde/kdatetbl.cpp
+++ b/microkde/kdatetbl.cpp
@@ -1,747 +1,750 @@
1/* -*- C++ -*- 1/* -*- C++ -*-
2 This file is part of the KDE libraries 2 This file is part of the KDE libraries
3 Copyright (C) 1997 Tim D. Gilman (tdgilman@best.org) 3 Copyright (C) 1997 Tim D. Gilman (tdgilman@best.org)
4 (C) 1998-2001 Mirko Boehm (mirko@kde.org) 4 (C) 1998-2001 Mirko Boehm (mirko@kde.org)
5 This library is free software; you can redistribute it and/or 5 This library is free software; you can redistribute it and/or
6 modify it under the terms of the GNU Library General Public 6 modify it under the terms of the GNU Library General Public
7 License as published by the Free Software Foundation; either 7 License as published by the Free Software Foundation; either
8 version 2 of the License, or (at your option) any later version. 8 version 2 of the License, or (at your option) any later version.
9 9
10 This library is distributed in the hope that it will be useful, 10 This library 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 GNU 12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
13 Library General Public License for more details. 13 Library General Public License for more details.
14 14
15 You should have received a copy of the GNU Library General Public License 15 You should have received a copy of the GNU Library General Public License
16 along with this library; see the file COPYING.LIB. If not, write to 16 along with this library; see the file COPYING.LIB. If not, write to
17 the Free Software Foundation, Inc., 59 Temple Place - Suite 330, 17 the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
18 Boston, MA 02111-1307, USA. 18 Boston, MA 02111-1307, USA.
19*/ 19*/
20 20
21/////////////////// KDateTable widget class ////////////////////// 21/////////////////// KDateTable widget class //////////////////////
22// 22//
23// Copyright (C) 1997 Tim D. Gilman 23// Copyright (C) 1997 Tim D. Gilman
24// (C) 1998-2001 Mirko Boehm 24// (C) 1998-2001 Mirko Boehm
25// Written using Qt (http://www.troll.no) for the 25// Written using Qt (http://www.troll.no) for the
26// KDE project (http://www.kde.org) 26// KDE project (http://www.kde.org)
27// 27//
28// This is a support class for the KDatePicker class. It just 28// This is a support class for the KDatePicker class. It just
29// draws the calender table without titles, but could theoretically 29// draws the calender table without titles, but could theoretically
30// be used as a standalone. 30// be used as a standalone.
31// 31//
32// When a date is selected by the user, it emits a signal: 32// When a date is selected by the user, it emits a signal:
33// dateSelected(QDate) 33// dateSelected(QDate)
34 34
35#include <kglobal.h> 35#include <kglobal.h>
36#include <kglobalsettings.h> 36#include <kglobalsettings.h>
37#include <kapplication.h> 37#include <kapplication.h>
38#include <klocale.h> 38#include <klocale.h>
39#include <kdebug.h> 39#include <kdebug.h>
40#include <knotifyclient.h> 40#include <knotifyclient.h>
41#include "kdatetbl.h" 41#include "kdatetbl.h"
42#include <qdatetime.h> 42#include <qdatetime.h>
43#include <qstring.h> 43#include <qstring.h>
44#include <qpen.h> 44#include <qpen.h>
45#include <qpainter.h> 45#include <qpainter.h>
46#include <qdialog.h> 46#include <qdialog.h>
47#include <assert.h> 47#include <assert.h>
48#include <qapplication.h> 48#include <qapplication.h>
49 49
50KDateValidator::KDateValidator(QWidget* parent, const char* name) 50KDateValidator::KDateValidator(QWidget* parent, const char* name)
51 : QValidator(parent, name) 51 : QValidator(parent, name)
52{ 52{
53} 53}
54 54
55QValidator::State 55QValidator::State
56KDateValidator::validate(QString& text, int&) const 56KDateValidator::validate(QString& text, int&) const
57{ 57{
58 QDate temp; 58 QDate temp;
59 // ----- everything is tested in date(): 59 // ----- everything is tested in date():
60 return date(text, temp); 60 return date(text, temp);
61} 61}
62 62
63QValidator::State 63QValidator::State
64KDateValidator::date(const QString& text, QDate& d) const 64KDateValidator::date(const QString& text, QDate& d) const
65{ 65{
66 QDate tmp = KGlobal::locale()->readDate(text); 66 QDate tmp = KGlobal::locale()->readDate(text);
67 if (!tmp.isNull()) 67 if (!tmp.isNull())
68 { 68 {
69 d = tmp; 69 d = tmp;
70 return Acceptable; 70 return Acceptable;
71 } else 71 } else
72 return Valid; 72 return Valid;
73} 73}
74 74
75void 75void
76KDateValidator::fixup( QString& ) const 76KDateValidator::fixup( QString& ) const
77{ 77{
78 78
79} 79}
80 80
81KDateTable::KDateTable(QWidget *parent, QDate date_, const char* name, WFlags f) 81KDateTable::KDateTable(QWidget *parent, QDate date_, const char* name, WFlags f)
82 : QGridView(parent, name, f) 82 : QGridView(parent, name, f)
83{ 83{
84 setFontSize(10); 84 setFontSize(10);
85 if(!date_.isValid()) 85 if(!date_.isValid())
86 { 86 {
87 date_=QDate::currentDate(); 87 date_=QDate::currentDate();
88 } 88 }
89 setFocusPolicy( QWidget::StrongFocus ); 89 setFocusPolicy( QWidget::StrongFocus );
90 setNumRows(7); // 6 weeks max + headline 90 setNumRows(7); // 6 weeks max + headline
91 setNumCols(7); // 7 days a week 91 setNumCols(7); // 7 days a week
92 setHScrollBarMode(AlwaysOff); 92 setHScrollBarMode(AlwaysOff);
93 setVScrollBarMode(AlwaysOff); 93 setVScrollBarMode(AlwaysOff);
94 viewport()->setBackgroundColor(QColor(220,245,255)); 94 viewport()->setBackgroundColor(QColor(220,245,255));
95#if 0 95#if 0
96 viewport()->setEraseColor(lightGray); 96 viewport()->setEraseColor(lightGray);
97#endif 97#endif
98 mMarkCurrent = false; 98 mMarkCurrent = false;
99 setDate(date_); // this initializes firstday, numdays, numDaysPrevMonth 99 setDate(date_); // this initializes firstday, numdays, numDaysPrevMonth
100} 100}
101 101
102void 102void
103KDateTable::paintCell(QPainter *painter, int row, int col) 103KDateTable::paintCell(QPainter *painter, int row, int col)
104{ 104{
105 QRect rect; 105 QRect rect;
106 QString text; 106 QString text;
107 QPen pen; 107 QPen pen;
108 int w=cellWidth(); 108 int w=cellWidth();
109 int h=cellHeight(); 109 int h=cellHeight();
110 int pos; 110 int pos;
111 QBrush brushBlue(blue); 111 QBrush brushBlue(blue);
112 QBrush brushLightblue(QColor(220,245,255)); 112 QBrush brushLightblue(QColor(220,245,255));
113 QFont font=KGlobalSettings::generalFont(); 113 QFont font=KGlobalSettings::generalFont();
114 // ----- 114 // -----
115 font.setPointSize(fontsize); 115 font.setPointSize(fontsize);
116 if(row==0) 116 if(row==0)
117 { // we are drawing the headline 117 { // we are drawing the headline
118 font.setBold(true); 118 font.setBold(true);
119 painter->setFont(font); 119 painter->setFont(font);
120 bool normalday = true; 120 bool normalday = true;
121 QString daystr; 121 QString daystr;
122 if (KGlobal::locale()->weekStartsMonday()) 122 if (KGlobal::locale()->weekStartsMonday())
123 { 123 {
124 daystr = KGlobal::locale()->weekDayName(col+1, true); 124 daystr = KGlobal::locale()->weekDayName(col+1, true);
125 if (col == 5 || col == 6) 125 if (col == 5 || col == 6)
126 normalday = false; 126 normalday = false;
127 } else { 127 } else {
128 daystr = KGlobal::locale()->weekDayName(col==0? 7 : col, true); 128 daystr = KGlobal::locale()->weekDayName(col==0? 7 : col, true);
129 if (col == 0 || col == 6) 129 if (col == 0 || col == 6)
130 normalday = false; 130 normalday = false;
131 } 131 }
132 if (!normalday) 132 if (!normalday)
133 { 133 {
134 painter->setPen(QColor(220,245,255)); 134 painter->setPen(QColor(220,245,255));
135 painter->setBrush(brushLightblue); 135 painter->setBrush(brushLightblue);
136 painter->drawRect(0, 0, w, h); 136 painter->drawRect(0, 0, w, h);
137 painter->setPen(blue); 137 painter->setPen(blue);
138 } else { 138 } else {
139 painter->setPen(blue); 139 painter->setPen(blue);
140 painter->setBrush(brushBlue); 140 painter->setBrush(brushBlue);
141 painter->drawRect(0, 0, w, h); 141 painter->drawRect(0, 0, w, h);
142 painter->setPen(white); 142 painter->setPen(white);
143 } 143 }
144 painter->drawText(0, 0, w, h-1, AlignCenter, 144 painter->drawText(0, 0, w, h-1, AlignCenter,
145 daystr, -1, &rect); 145 daystr, -1, &rect);
146 painter->setPen(black); 146 painter->setPen(black);
147 painter->moveTo(0, h-1); 147 painter->moveTo(0, h-1);
148 painter->lineTo(w-1, h-1); 148 painter->lineTo(w-1, h-1);
149 // ----- draw the weekday: 149 // ----- draw the weekday:
150 } else { 150 } else {
151 painter->setFont(font); 151 painter->setFont(font);
152 pos=7*(row-1)+col; 152 pos=7*(row-1)+col;
153 if (KGlobal::locale()->weekStartsMonday()) 153 if (KGlobal::locale()->weekStartsMonday())
154 pos++; 154 pos++;
155 if(pos<firstday || (firstday+numdays<=pos)) 155 if(pos<firstday || (firstday+numdays<=pos))
156 { // we are either 156 { // we are either
157 // ° painting a day of the previous month or 157 // ° painting a day of the previous month or
158 // ° painting a day of the following month 158 // ° painting a day of the following month
159 if(pos<firstday) 159 if(pos<firstday)
160 { // previous month 160 { // previous month
161 text.setNum(numDaysPrevMonth+pos-firstday+1); 161 text.setNum(numDaysPrevMonth+pos-firstday+1);
162 } else { // following month 162 } else { // following month
163 text.setNum(pos-firstday-numdays+1); 163 text.setNum(pos-firstday-numdays+1);
164 } 164 }
165 painter->setPen(gray); 165 painter->setPen(gray);
166 } else { // paint a day of the current month 166 } else { // paint a day of the current month
167 text.setNum(pos-firstday+1); 167 text.setNum(pos-firstday+1);
168 painter->setPen(black); 168 painter->setPen(black);
169 } 169 }
170 170
171 pen=painter->pen(); 171 pen=painter->pen();
172 if(firstday+date.day()-1==pos) 172 if(firstday+date.day()-1==pos)
173 { 173 {
174 if(mMarkCurrent && firstday+QDate::currentDate().day()-1==pos) 174 if(mMarkCurrent && firstday+QDate::currentDate().day()-1==pos)
175 painter->setPen(green); 175 painter->setPen(green);
176 else 176 else
177 painter->setPen(red); 177 painter->setPen(red);
178 if(hasFocus()) 178 if(hasFocus())
179 { 179 {
180 painter->setBrush(darkRed); 180 painter->setBrush(darkRed);
181 pen=white; 181 pen=white;
182 } else { 182 } else {
183 painter->setBrush(darkGray); 183 painter->setBrush(darkGray);
184 pen=white; 184 pen=white;
185 } 185 }
186 } else { 186 } else {
187 if(mMarkCurrent && firstday+QDate::currentDate().day()-1==pos) 187 if(mMarkCurrent && firstday+QDate::currentDate().day()-1==pos)
188 { 188 {
189 painter->setPen(green); 189 painter->setPen(green);
190 painter->setBrush(darkGreen); 190 painter->setBrush(darkGreen);
191 pen=white; 191 pen=white;
192 } else { 192 } else {
193 painter->setBrush(QColor(220,245,255)); 193 painter->setBrush(QColor(220,245,255));
194 painter->setPen(QColor(220,245,255)); 194 painter->setPen(QColor(220,245,255));
195 } 195 }
196 } 196 }
197 painter->drawRect(0, 0, w, h); 197 painter->drawRect(0, 0, w, h);
198 painter->setPen(pen); 198 painter->setPen(pen);
199 painter->drawText(0, 0, w, h, AlignCenter, text, -1, &rect); 199 painter->drawText(0, 0, w, h, AlignCenter, text, -1, &rect);
200 } 200 }
201 if(rect.width()>maxCell.width()) maxCell.setWidth(rect.width()); 201 if(rect.width()>maxCell.width()) maxCell.setWidth(rect.width());
202 if(rect.height()>maxCell.height()) maxCell.setHeight(rect.height()); 202 if(rect.height()>maxCell.height()) maxCell.setHeight(rect.height());
203} 203}
204 204
205void 205void
206KDateTable::keyPressEvent( QKeyEvent *e ) 206KDateTable::keyPressEvent( QKeyEvent *e )
207{ 207{
208 /* 208 /*
209 // not working properly 209 // not working properly
210 if ( e->key() == Qt::Key_Prior ) { 210 if ( e->key() == Qt::Key_Prior ) {
211 if ( date.month() == 1 ) { 211 if ( date.month() == 1 ) {
212 KNotifyClient::beep(); 212 KNotifyClient::beep();
213 return; 213 return;
214 } 214 }
215 int day = date.day(); 215 int day = date.day();
216 if ( day > 27 ) 216 if ( day > 27 )
217 while ( !QDate::isValid( date.year(), date.month()-1, day ) ) 217 while ( !QDate::isValid( date.year(), date.month()-1, day ) )
218 day--; 218 day--;
219 setDate(QDate(date.year(), date.month()-1, day)); 219 setDate(QDate(date.year(), date.month()-1, day));
220 return; 220 return;
221 } 221 }
222 if ( e->key() == Qt::Key_Next ) { 222 if ( e->key() == Qt::Key_Next ) {
223 if ( date.month() == 12 ) { 223 if ( date.month() == 12 ) {
224 KNotifyClient::beep(); 224 KNotifyClient::beep();
225 return; 225 return;
226 } 226 }
227 int day = date.day(); 227 int day = date.day();
228 if ( day > 27 ) 228 if ( day > 27 )
229 while ( !QDate::isValid( date.year(), date.month()+1, day ) ) 229 while ( !QDate::isValid( date.year(), date.month()+1, day ) )
230 day--; 230 day--;
231 setDate(QDate(date.year(), date.month()+1, day)); 231 setDate(QDate(date.year(), date.month()+1, day));
232 return; 232 return;
233 } 233 }
234 */ 234 */
235 int dayoff = KGlobal::locale()->weekStartsMonday() ? 1 : 0; 235 int dayoff = KGlobal::locale()->weekStartsMonday() ? 1 : 0;
236 236
237 int temp=firstday+date.day()-dayoff; 237 int temp=firstday+date.day()-dayoff;
238 int pos = temp; 238 int pos = temp;
239 bool irgnore = true; 239 bool irgnore = true;
240 if ( e->state() != Qt::ControlButton ) { 240 if ( e->state() != Qt::ControlButton ) {
241 if ( e->key() == Qt::Key_Up ) { 241 if ( e->key() == Qt::Key_Up ) {
242 pos -= 7; 242 pos -= 7;
243 irgnore = false; 243 irgnore = false;
244 } 244 }
245 if ( e->key() == Qt::Key_Down ) { 245 if ( e->key() == Qt::Key_Down ) {
246 pos += 7; 246 pos += 7;
247 irgnore = false; 247 irgnore = false;
248 } 248 }
249 if ( e->key() == Qt::Key_Left ) { 249 if ( e->key() == Qt::Key_Left ) {
250 pos--; 250 pos--;
251 irgnore = false; 251 irgnore = false;
252 } 252 }
253 if ( e->key() == Qt::Key_Right ) { 253 if ( e->key() == Qt::Key_Right ) {
254 pos++; 254 pos++;
255 irgnore = false; 255 irgnore = false;
256 } 256 }
257 } 257 }
258 if ( irgnore ) 258 if ( irgnore )
259 e->ignore(); 259 e->ignore();
260 260
261 if(pos+dayoff<=firstday) 261 if(pos+dayoff<=firstday)
262 { // this day is in the previous month 262 { // this day is in the previous month
263 KNotifyClient::beep(); 263 KNotifyClient::beep();
264 return; 264 return;
265 } 265 }
266 if(firstday+numdays<pos+dayoff) 266 if(firstday+numdays<pos+dayoff)
267 { // this date is in the next month 267 { // this date is in the next month
268 KNotifyClient::beep(i18n( "Month not long enough" )); 268 KNotifyClient::beep(i18n( "Month not long enough" ));
269 return; 269 return;
270 } 270 }
271 271
272 if ( pos == temp ) 272 if ( pos == temp )
273 return; 273 return;
274 274
275 setDate(QDate(date.year(), date.month(), pos-firstday+dayoff)); 275 setDate(QDate(date.year(), date.month(), pos-firstday+dayoff));
276 updateCell(temp/7+1, temp%7); // Update the previously selected cell 276 updateCell(temp/7+1, temp%7); // Update the previously selected cell
277 updateCell(pos/7+1, pos%7); // Update the selected cell 277 updateCell(pos/7+1, pos%7); // Update the selected cell
278 assert(QDate(date.year(), date.month(), pos-firstday+dayoff).isValid()); 278 assert(QDate(date.year(), date.month(), pos-firstday+dayoff).isValid());
279 279
280 280
281} 281}
282 282
283void 283void
284KDateTable::viewportResizeEvent(QResizeEvent * e) 284KDateTable::viewportResizeEvent(QResizeEvent * e)
285{ 285{
286 QGridView::viewportResizeEvent(e); 286 QGridView::viewportResizeEvent(e);
287 287
288 setCellWidth(viewport()->width()/7); 288 setCellWidth(viewport()->width()/7);
289 setCellHeight(viewport()->height()/7); 289 setCellHeight(viewport()->height()/7);
290} 290}
291 291
292void 292void
293KDateTable::setFontSize(int size) 293KDateTable::setFontSize(int size)
294{ 294{
295 int count; 295 int count;
296 QRect rect; 296 QRect rect;
297 // ----- store rectangles: 297 // ----- store rectangles:
298 fontsize=size; 298 fontsize=size;
299 QFont font = KGlobalSettings::generalFont(); 299 QFont font = KGlobalSettings::generalFont();
300 font.setPointSize(fontsize); 300 font.setPointSize(fontsize);
301 font.setBold( true ); 301 font.setBold( true );
302 QFontMetrics metrics(font); 302 QFontMetrics metrics(font);
303 303
304 // ----- find largest day name: 304 // ----- find largest day name:
305 maxCell.setWidth(0); 305 maxCell.setWidth(0);
306 maxCell.setHeight(0); 306 maxCell.setHeight(0);
307 for(count=0; count<7; ++count) 307 for(count=0; count<7; ++count)
308 { 308 {
309 rect=metrics.boundingRect(KGlobal::locale()->weekDayName(count+1, true)); 309 rect=metrics.boundingRect(KGlobal::locale()->weekDayName(count+1, true));
310 maxCell.setWidth(QMAX(maxCell.width(), rect.width())); 310 maxCell.setWidth(QMAX(maxCell.width(), rect.width()));
311 maxCell.setHeight(QMAX(maxCell.height(), rect.height())); 311 maxCell.setHeight(QMAX(maxCell.height(), rect.height()));
312 } 312 }
313 // ----- compare with a real wide number and add some space: 313 // ----- compare with a real wide number and add some space:
314 rect=metrics.boundingRect(QString::fromLatin1("88")); 314 rect=metrics.boundingRect(QString::fromLatin1("88"));
315 maxCell.setWidth(QMAX(maxCell.width()+2, rect.width())); 315 maxCell.setWidth(QMAX(maxCell.width()+2, rect.width()));
316 maxCell.setHeight(QMAX(maxCell.height()+4, rect.height())); 316 maxCell.setHeight(QMAX(maxCell.height()+4, rect.height()));
317 if ( maxCell.width() * 1000 / maxCell.height() > 1900 ) 317 if ( maxCell.width() * 1000 / maxCell.height() > 1900 )
318 maxCell.setHeight(maxCell.width() * 1000 / 1900 ); 318 maxCell.setHeight(maxCell.width() * 1000 / 1900 );
319} 319}
320 320
321void 321void
322KDateTable::contentsMousePressEvent(QMouseEvent *e) 322KDateTable::contentsMousePressEvent(QMouseEvent *e)
323{ 323{
324 if(e->type()!=QEvent::MouseButtonPress) 324 if(e->type()!=QEvent::MouseButtonPress)
325 { // the KDatePicker only reacts on mouse press events: 325 { // the KDatePicker only reacts on mouse press events:
326 return; 326 return;
327 } 327 }
328 if(!isEnabled()) 328 if(!isEnabled())
329 { 329 {
330 KNotifyClient::beep(); 330 KNotifyClient::beep();
331 return; 331 return;
332 } 332 }
333 333
334 int dayoff = KGlobal::locale()->weekStartsMonday() ? 1 : 0; 334 int dayoff = KGlobal::locale()->weekStartsMonday() ? 1 : 0;
335 // ----- 335 // -----
336 int row, col, pos, temp; 336 int row, col, pos, temp;
337 QPoint mouseCoord; 337 QPoint mouseCoord;
338 // ----- 338 // -----
339 mouseCoord = e->pos(); 339 mouseCoord = e->pos();
340 row=rowAt(mouseCoord.y()); 340 row=rowAt(mouseCoord.y());
341 col=columnAt(mouseCoord.x()); 341 col=columnAt(mouseCoord.x());
342 if(row<0 || col<0) 342 if(row<0 || col<0)
343 { // the user clicked on the frame of the table 343 { // the user clicked on the frame of the table
344 return; 344 return;
345 } 345 }
346 pos=7*(row-1)+col+1; 346 pos=7*(row-1)+col+1;
347#if 0
347 if(pos+dayoff<=firstday) 348 if(pos+dayoff<=firstday)
348 { // this day is in the previous month 349 { // this day is in the previous month
349 KNotifyClient::beep(); 350 KNotifyClient::beep();
350 return; 351 return;
351 } 352 }
352 if(firstday+numdays<pos+dayoff) 353 if(firstday+numdays<pos+dayoff)
353 { // this date is in the next month 354 { // this date is in the next month
354 KNotifyClient::beep(); 355 KNotifyClient::beep();
355 return; 356 return;
356 } 357 }
358#endif
357 temp=firstday+date.day()-dayoff-1; 359 temp=firstday+date.day()-dayoff-1;
358 setDate(QDate(date.year(), date.month(), pos-firstday+dayoff)); 360 QDate da = QDate(date.year(), date.month(),1);
361 setDate(da.addDays( pos-firstday+dayoff-1));
359 updateCell(temp/7+1, temp%7); // Update the previously selected cell 362 updateCell(temp/7+1, temp%7); // Update the previously selected cell
360 updateCell(row, col); // Update the selected cell 363 updateCell(row, col); // Update the selected cell
361 // assert(QDate(date.year(), date.month(), pos-firstday+dayoff).isValid()); 364 // assert(QDate(date.year(), date.month(), pos-firstday+dayoff).isValid());
362 emit(tableClicked()); 365 emit(tableClicked());
363} 366}
364 367
365bool 368bool
366KDateTable::setDate(const QDate& date_) 369KDateTable::setDate(const QDate& date_)
367{ 370{
368 bool changed=false; 371 bool changed=false;
369 QDate temp; 372 QDate temp;
370 mMarkCurrent = false; 373 mMarkCurrent = false;
371 // ----- 374 // -----
372 if(!date_.isValid()) 375 if(!date_.isValid())
373 { 376 {
374 kdDebug() << "KDateTable::setDate: refusing to set invalid date." << endl; 377 kdDebug() << "KDateTable::setDate: refusing to set invalid date." << endl;
375 return false; 378 return false;
376 } 379 }
377 if(date!=date_) 380 if(date!=date_)
378 { 381 {
379 date=date_; 382 date=date_;
380 changed=true; 383 changed=true;
381 } 384 }
382 mMarkCurrent = ( date.month() == QDate::currentDate().month() && date.year() == QDate::currentDate().year() ); 385 mMarkCurrent = ( date.month() == QDate::currentDate().month() && date.year() == QDate::currentDate().year() );
383 temp.setYMD(date.year(), date.month(), 1); 386 temp.setYMD(date.year(), date.month(), 1);
384 firstday=temp.dayOfWeek(); 387 firstday=temp.dayOfWeek();
385 if(firstday==1) firstday=8; 388 if(firstday==1) firstday=8;
386 numdays=date.daysInMonth(); 389 numdays=date.daysInMonth();
387 if(date.month()==1) 390 if(date.month()==1)
388 { // set to december of previous year 391 { // set to december of previous year
389 temp.setYMD(date.year()-1, 12, 1); 392 temp.setYMD(date.year()-1, 12, 1);
390 } else { // set to previous month 393 } else { // set to previous month
391 temp.setYMD(date.year(), date.month()-1, 1); 394 temp.setYMD(date.year(), date.month()-1, 1);
392 } 395 }
393 numDaysPrevMonth=temp.daysInMonth(); 396 numDaysPrevMonth=temp.daysInMonth();
394 if(changed) 397 if(changed)
395 { 398 {
396 repaintContents(false); 399 repaintContents(false);
397 } 400 }
398 emit(dateChanged(date)); 401 emit(dateChanged(date));
399 return true; 402 return true;
400} 403}
401 404
402const QDate& 405const QDate&
403KDateTable::getDate() const 406KDateTable::getDate() const
404{ 407{
405 return date; 408 return date;
406} 409}
407 410
408void KDateTable::focusInEvent( QFocusEvent *e ) 411void KDateTable::focusInEvent( QFocusEvent *e )
409{ 412{
410 repaintContents(false); 413 repaintContents(false);
411 QGridView::focusInEvent( e ); 414 QGridView::focusInEvent( e );
412} 415}
413 416
414void KDateTable::focusOutEvent( QFocusEvent *e ) 417void KDateTable::focusOutEvent( QFocusEvent *e )
415{ 418{
416 repaintContents(false); 419 repaintContents(false);
417 QGridView::focusOutEvent( e ); 420 QGridView::focusOutEvent( e );
418} 421}
419 422
420QSize 423QSize
421KDateTable::sizeHint() const 424KDateTable::sizeHint() const
422{ 425{
423 if(maxCell.height()>0 && maxCell.width()>0) 426 if(maxCell.height()>0 && maxCell.width()>0)
424 { 427 {
425 return QSize((maxCell.width()+2)*numCols()+2*frameWidth(), 428 return QSize((maxCell.width()+2)*numCols()+2*frameWidth(),
426 (maxCell.height()+4)*numRows()+2*frameWidth()); 429 (maxCell.height()+4)*numRows()+2*frameWidth());
427 } else { 430 } else {
428 return QSize(-1, -1); 431 return QSize(-1, -1);
429 } 432 }
430} 433}
431 434
432KDateInternalMonthPicker::KDateInternalMonthPicker 435KDateInternalMonthPicker::KDateInternalMonthPicker
433(int fontsize, QWidget* parent, const char* name) 436(int fontsize, QWidget* parent, const char* name)
434 : QGridView(parent, name), 437 : QGridView(parent, name),
435 result(0) // invalid 438 result(0) // invalid
436{ 439{
437 QRect rect; 440 QRect rect;
438 QFont font; 441 QFont font;
439 // ----- 442 // -----
440 activeCol = -1; 443 activeCol = -1;
441 activeRow = -1; 444 activeRow = -1;
442 font=KGlobalSettings::generalFont(); 445 font=KGlobalSettings::generalFont();
443 font.setPointSize(fontsize); 446 font.setPointSize(fontsize);
444 setFont(font); 447 setFont(font);
445 setHScrollBarMode(AlwaysOff); 448 setHScrollBarMode(AlwaysOff);
446 setVScrollBarMode(AlwaysOff); 449 setVScrollBarMode(AlwaysOff);
447 setFrameStyle(QFrame::NoFrame); 450 setFrameStyle(QFrame::NoFrame);
448 setNumRows(4); 451 setNumRows(4);
449 setNumCols(3); 452 setNumCols(3);
450 // enable to find drawing failures: 453 // enable to find drawing failures:
451 // setTableFlags(Tbl_clipCellPainting); 454 // setTableFlags(Tbl_clipCellPainting);
452#if 0 455#if 0
453 viewport()->setEraseColor(lightGray); // for consistency with the datepicker 456 viewport()->setEraseColor(lightGray); // for consistency with the datepicker
454#endif 457#endif
455 // ----- find the preferred size 458 // ----- find the preferred size
456 // (this is slow, possibly, but unfortunatly it is needed here): 459 // (this is slow, possibly, but unfortunatly it is needed here):
457 QFontMetrics metrics(font); 460 QFontMetrics metrics(font);
458 for(int i=1; i <= 12; ++i) 461 for(int i=1; i <= 12; ++i)
459 { 462 {
460 rect=metrics.boundingRect(KGlobal::locale()->monthName(i, false)); 463 rect=metrics.boundingRect(KGlobal::locale()->monthName(i, false));
461 if(max.width()<rect.width()) max.setWidth(rect.width()); 464 if(max.width()<rect.width()) max.setWidth(rect.width());
462 if(max.height()<rect.height()) max.setHeight(rect.height()); 465 if(max.height()<rect.height()) max.setHeight(rect.height());
463 } 466 }
464 467
465} 468}
466 469
467QSize 470QSize
468KDateInternalMonthPicker::sizeHint() const 471KDateInternalMonthPicker::sizeHint() const
469{ 472{
470 return QSize((max.width()+6)*numCols()+2*frameWidth(), 473 return QSize((max.width()+6)*numCols()+2*frameWidth(),
471 (max.height()+6)*numRows()+2*frameWidth()); 474 (max.height()+6)*numRows()+2*frameWidth());
472} 475}
473 476
474int 477int
475KDateInternalMonthPicker::getResult() const 478KDateInternalMonthPicker::getResult() const
476{ 479{
477 return result; 480 return result;
478} 481}
479 482
480void 483void
481KDateInternalMonthPicker::setupPainter(QPainter *p) 484KDateInternalMonthPicker::setupPainter(QPainter *p)
482{ 485{
483 p->setPen(black); 486 p->setPen(black);
484} 487}
485 488
486void 489void
487KDateInternalMonthPicker::viewportResizeEvent(QResizeEvent*) 490KDateInternalMonthPicker::viewportResizeEvent(QResizeEvent*)
488{ 491{
489 setCellWidth(width()/3); 492 setCellWidth(width()/3);
490 setCellHeight(height()/4); 493 setCellHeight(height()/4);
491} 494}
492 495
493void 496void
494KDateInternalMonthPicker::paintCell(QPainter* painter, int row, int col) 497KDateInternalMonthPicker::paintCell(QPainter* painter, int row, int col)
495{ 498{
496 int index; 499 int index;
497 QString text; 500 QString text;
498 // ----- find the number of the cell: 501 // ----- find the number of the cell:
499 index=3*row+col+1; 502 index=3*row+col+1;
500 text=KGlobal::locale()->monthName(index, false); 503 text=KGlobal::locale()->monthName(index, false);
501 painter->drawText(0, 0, cellWidth(), cellHeight(), AlignCenter, text); 504 painter->drawText(0, 0, cellWidth(), cellHeight(), AlignCenter, text);
502 if ( activeCol == col && activeRow == row ) 505 if ( activeCol == col && activeRow == row )
503 painter->drawRect( 0, 0, cellWidth(), cellHeight() ); 506 painter->drawRect( 0, 0, cellWidth(), cellHeight() );
504} 507}
505 508
506void 509void
507KDateInternalMonthPicker::contentsMousePressEvent(QMouseEvent *e) 510KDateInternalMonthPicker::contentsMousePressEvent(QMouseEvent *e)
508{ 511{
509 if(!isEnabled() || e->button() != LeftButton) 512 if(!isEnabled() || e->button() != LeftButton)
510 { 513 {
511 KNotifyClient::beep(); 514 KNotifyClient::beep();
512 return; 515 return;
513 } 516 }
514 // ----- 517 // -----
515 int row, col; 518 int row, col;
516 QPoint mouseCoord; 519 QPoint mouseCoord;
517 // ----- 520 // -----
518 mouseCoord = e->pos(); 521 mouseCoord = e->pos();
519 row=rowAt(mouseCoord.y()); 522 row=rowAt(mouseCoord.y());
520 col=columnAt(mouseCoord.x()); 523 col=columnAt(mouseCoord.x());
521 524
522 if(row<0 || col<0) 525 if(row<0 || col<0)
523 { // the user clicked on the frame of the table 526 { // the user clicked on the frame of the table
524 activeCol = -1; 527 activeCol = -1;
525 activeRow = -1; 528 activeRow = -1;
526 } else { 529 } else {
527 activeCol = col; 530 activeCol = col;
528 activeRow = row; 531 activeRow = row;
529 updateCell( row, col /*, false */ ); 532 updateCell( row, col /*, false */ );
530 } 533 }
531} 534}
532 535
533void 536void
534KDateInternalMonthPicker::contentsMouseMoveEvent(QMouseEvent *e) 537KDateInternalMonthPicker::contentsMouseMoveEvent(QMouseEvent *e)
535{ 538{
536 if (e->state() & LeftButton) 539 if (e->state() & LeftButton)
537 { 540 {
538 int row, col; 541 int row, col;
539 QPoint mouseCoord; 542 QPoint mouseCoord;
540 // ----- 543 // -----
541 mouseCoord = e->pos(); 544 mouseCoord = e->pos();
542 row=rowAt(mouseCoord.y()); 545 row=rowAt(mouseCoord.y());
543 col=columnAt(mouseCoord.x()); 546 col=columnAt(mouseCoord.x());
544 int tmpRow = -1, tmpCol = -1; 547 int tmpRow = -1, tmpCol = -1;
545 if(row<0 || col<0) 548 if(row<0 || col<0)
546 { // the user clicked on the frame of the table 549 { // the user clicked on the frame of the table
547 if ( activeCol > -1 ) 550 if ( activeCol > -1 )
548 { 551 {
549 tmpRow = activeRow; 552 tmpRow = activeRow;
550 tmpCol = activeCol; 553 tmpCol = activeCol;
551 } 554 }
552 activeCol = -1; 555 activeCol = -1;
553 activeRow = -1; 556 activeRow = -1;
554 } else { 557 } else {
555 bool differentCell = (activeRow != row || activeCol != col); 558 bool differentCell = (activeRow != row || activeCol != col);
556 if ( activeCol > -1 && differentCell) 559 if ( activeCol > -1 && differentCell)
557 { 560 {
558 tmpRow = activeRow; 561 tmpRow = activeRow;
559 tmpCol = activeCol; 562 tmpCol = activeCol;
560 } 563 }
561 if ( differentCell) 564 if ( differentCell)
562 { 565 {
563 activeRow = row; 566 activeRow = row;
564 activeCol = col; 567 activeCol = col;
565 updateCell( row, col /*, false */ ); // mark the new active cell 568 updateCell( row, col /*, false */ ); // mark the new active cell
566 } 569 }
567 } 570 }
568 if ( tmpRow > -1 ) // repaint the former active cell 571 if ( tmpRow > -1 ) // repaint the former active cell
569 updateCell( tmpRow, tmpCol /*, true */ ); 572 updateCell( tmpRow, tmpCol /*, true */ );
570 } 573 }
571} 574}
572 575
573void 576void
574KDateInternalMonthPicker::contentsMouseReleaseEvent(QMouseEvent *e) 577KDateInternalMonthPicker::contentsMouseReleaseEvent(QMouseEvent *e)
575{ 578{
576 if(!isEnabled()) 579 if(!isEnabled())
577 { 580 {
578 return; 581 return;
579 } 582 }
580 // ----- 583 // -----
581 int row, col, pos; 584 int row, col, pos;
582 QPoint mouseCoord; 585 QPoint mouseCoord;
583 // ----- 586 // -----
584 mouseCoord = e->pos(); 587 mouseCoord = e->pos();
585 row=rowAt(mouseCoord.y()); 588 row=rowAt(mouseCoord.y());
586 col=columnAt(mouseCoord.x()); 589 col=columnAt(mouseCoord.x());
587 if(row<0 || col<0) 590 if(row<0 || col<0)
588 { // the user clicked on the frame of the table 591 { // the user clicked on the frame of the table
589 emit(closeMe(0)); 592 emit(closeMe(0));
590 } 593 }
591 pos=3*row+col+1; 594 pos=3*row+col+1;
592 result=pos; 595 result=pos;
593 emit(closeMe(1)); 596 emit(closeMe(1));
594} 597}
595 598
596 599
597 600
598KDateInternalYearSelector::KDateInternalYearSelector 601KDateInternalYearSelector::KDateInternalYearSelector
599(int fontsize, QWidget* parent, const char* name) 602(int fontsize, QWidget* parent, const char* name)
600 : QLineEdit(parent, name), 603 : QLineEdit(parent, name),
601 val(new QIntValidator(this)), 604 val(new QIntValidator(this)),
602 result(0) 605 result(0)
603{ 606{
604 QFont font; 607 QFont font;
605 // ----- 608 // -----
606 font=KGlobalSettings::generalFont(); 609 font=KGlobalSettings::generalFont();
607 font.setPointSize(fontsize); 610 font.setPointSize(fontsize);
608 setFont(font); 611 setFont(font);
609#if 0 612#if 0
610 setFrameStyle(QFrame::NoFrame); 613 setFrameStyle(QFrame::NoFrame);
611#endif 614#endif
612 // we have to respect the limits of QDate here, I fear: 615 // we have to respect the limits of QDate here, I fear:
613 val->setRange(0, 8000); 616 val->setRange(0, 8000);
614 setValidator(val); 617 setValidator(val);
615 connect(this, SIGNAL(returnPressed()), SLOT(yearEnteredSlot())); 618 connect(this, SIGNAL(returnPressed()), SLOT(yearEnteredSlot()));
616} 619}
617 620
618void 621void
619KDateInternalYearSelector::yearEnteredSlot() 622KDateInternalYearSelector::yearEnteredSlot()
620{ 623{
621 bool ok; 624 bool ok;
622 int year; 625 int year;
623 QDate date; 626 QDate date;
624 // ----- check if this is a valid year: 627 // ----- check if this is a valid year:
625 year=text().toInt(&ok); 628 year=text().toInt(&ok);
626 if(!ok) 629 if(!ok)
627 { 630 {
628 KNotifyClient::beep(); 631 KNotifyClient::beep();
629 return; 632 return;
630 } 633 }
631 date.setYMD(year, 1, 1); 634 date.setYMD(year, 1, 1);
632 if(!date.isValid()) 635 if(!date.isValid())
633 { 636 {
634 KNotifyClient::beep(); 637 KNotifyClient::beep();
635 return; 638 return;
636 } 639 }
637 result=year; 640 result=year;
638 emit(closeMe(1)); 641 emit(closeMe(1));
639} 642}
640 643
641int 644int
642KDateInternalYearSelector::getYear() 645KDateInternalYearSelector::getYear()
643{ 646{
644 return result; 647 return result;
645} 648}
646 649
647void 650void
648KDateInternalYearSelector::setYear(int year) 651KDateInternalYearSelector::setYear(int year)
649{ 652{
650 QString temp; 653 QString temp;
651 // ----- 654 // -----
652 temp.setNum(year); 655 temp.setNum(year);
653 setText(temp); 656 setText(temp);
654} 657}
655 658
656KPopupFrame::KPopupFrame(QWidget* parent, const char* name) 659KPopupFrame::KPopupFrame(QWidget* parent, const char* name)
657 : QFrame(parent, name, WType_Popup), 660 : QFrame(parent, name, WType_Popup),
658 result(0), // rejected 661 result(0), // rejected
659 main(0) 662 main(0)
660{ 663{
661 setFrameStyle(QFrame::Box|QFrame::Raised); 664 setFrameStyle(QFrame::Box|QFrame::Raised);
662 setMidLineWidth(2); 665 setMidLineWidth(2);
663} 666}
664 667
665void 668void
666KPopupFrame::keyPressEvent(QKeyEvent* e) 669KPopupFrame::keyPressEvent(QKeyEvent* e)
667{ 670{
668 if(e->key()==Key_Escape) 671 if(e->key()==Key_Escape)
669 { 672 {
670 result=0; // rejected 673 result=0; // rejected
671 qApp->exit_loop(); 674 qApp->exit_loop();
672 } 675 }
673} 676}
674 677
675void 678void
676KPopupFrame::close(int r) 679KPopupFrame::close(int r)
677{ 680{
678 result=r; 681 result=r;
679 qApp->exit_loop(); 682 qApp->exit_loop();
680} 683}
681 684
682void 685void
683KPopupFrame::setMainWidget(QWidget* m) 686KPopupFrame::setMainWidget(QWidget* m)
684{ 687{
685 main=m; 688 main=m;
686 if(main!=0) 689 if(main!=0)
687 { 690 {
688 resize(main->width()+2*frameWidth(), main->height()+2*frameWidth()); 691 resize(main->width()+2*frameWidth(), main->height()+2*frameWidth());
689 } 692 }
690} 693}
691 694
692void 695void
693KPopupFrame::resizeEvent(QResizeEvent*) 696KPopupFrame::resizeEvent(QResizeEvent*)
694{ 697{
695 if(main!=0) 698 if(main!=0)
696 { 699 {
697 main->setGeometry(frameWidth(), frameWidth(), 700 main->setGeometry(frameWidth(), frameWidth(),
698 width()-2*frameWidth(), height()-2*frameWidth()); 701 width()-2*frameWidth(), height()-2*frameWidth());
699 } 702 }
700} 703}
701 704
702void 705void
703KPopupFrame::popup(const QPoint &pos) 706KPopupFrame::popup(const QPoint &pos)
704{ 707{
705 // Make sure the whole popup is visible. 708 // Make sure the whole popup is visible.
706 QRect d = QApplication::desktop()->frameGeometry(); 709 QRect d = QApplication::desktop()->frameGeometry();
707 int x = pos.x(); 710 int x = pos.x();
708 int y = pos.y(); 711 int y = pos.y();
709 int w = width(); 712 int w = width();
710 int h = height(); 713 int h = height();
711 if (x+w > d.x()+d.width()) 714 if (x+w > d.x()+d.width())
712 x = d.width() - w; 715 x = d.width() - w;
713 if (y+h > d.y()+d.height()) 716 if (y+h > d.y()+d.height())
714 y = d.height() - h; 717 y = d.height() - h;
715 if (x < d.x()) 718 if (x < d.x())
716 x = 0; 719 x = 0;
717 if (y < d.y()) 720 if (y < d.y())
718 y = 0; 721 y = 0;
719 722
720 // Pop the thingy up. 723 // Pop the thingy up.
721 move(x, y); 724 move(x, y);
722 show(); 725 show();
723} 726}
724 727
725int 728int
726KPopupFrame::exec(QPoint pos) 729KPopupFrame::exec(QPoint pos)
727{ 730{
728 popup(pos); 731 popup(pos);
729 repaint(); 732 repaint();
730 qApp->enter_loop(); 733 qApp->enter_loop();
731 hide(); 734 hide();
732 return result; 735 return result;
733} 736}
734 737
735int 738int
736KPopupFrame::exec(int x, int y) 739KPopupFrame::exec(int x, int y)
737{ 740{
738 return exec(QPoint(x, y)); 741 return exec(QPoint(x, y));
739} 742}
740 743
741void KPopupFrame::virtual_hook( int, void* ) 744void KPopupFrame::virtual_hook( int, void* )
742{ /*BASE::virtual_hook( id, data );*/ } 745{ /*BASE::virtual_hook( id, data );*/ }
743 746
744void KDateTable::virtual_hook( int, void* ) 747void KDateTable::virtual_hook( int, void* )
745{ /*BASE::virtual_hook( id, data );*/ } 748{ /*BASE::virtual_hook( id, data );*/ }
746 749
747//#include "kdatetbl.moc" 750//#include "kdatetbl.moc"