summaryrefslogtreecommitdiffabout
path: root/libkdepim/kdatepicker.cpp
Unidiff
Diffstat (limited to 'libkdepim/kdatepicker.cpp') (more/less context) (ignore whitespace changes)
-rw-r--r--libkdepim/kdatepicker.cpp8
1 files changed, 6 insertions, 2 deletions
diff --git a/libkdepim/kdatepicker.cpp b/libkdepim/kdatepicker.cpp
index 68ef943..28b65cf 100644
--- a/libkdepim/kdatepicker.cpp
+++ b/libkdepim/kdatepicker.cpp
@@ -1,299 +1,303 @@
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#include "kdatepicker.h" 21#include "kdatepicker.h"
22#include <kglobal.h> 22#include <kglobal.h>
23#include <kapplication.h> 23#include <kapplication.h>
24#include <klocale.h> 24#include <klocale.h>
25#include <kiconloader.h> 25#include <kiconloader.h>
26#include <qframe.h> 26#include <q3frame.h>
27#include <qpainter.h> 27#include <qpainter.h>
28#include <qdialog.h> 28#include <qdialog.h>
29#include <qtoolbutton.h> 29#include <qtoolbutton.h>
30#include <qfont.h> 30#include <qfont.h>
31#include <qapplication.h> 31#include <qapplication.h>
32#include <qlineedit.h> 32#include <qlineedit.h>
33#include <qvalidator.h> 33#include <qvalidator.h>
34//Added by qt3to4:
35#include <QResizeEvent>
36#include <QKeyEvent>
37#include <QDesktopWidget>
34#include <kdebug.h> 38#include <kdebug.h>
35#include <knotifyclient.h> 39#include <knotifyclient.h>
36#include <kglobalsettings.h> 40#include <kglobalsettings.h>
37#include "kdatetbl.h" 41#include "kdatetbl.h"
38#include "kdateedit.h" 42#include "kdateedit.h"
39//#include "kdatepicker.moc" 43//#include "kdatepicker.moc"
40 44
41 45
42KDatePicker::KDatePicker(QWidget *parent, QDate dt, const char *name) 46KDatePicker::KDatePicker(QWidget *parent, QDate dt, const char *name)
43 : QFrame(parent,name), 47 : Q3Frame(parent,name),
44 yearForward(new QToolButton(this)), 48 yearForward(new QToolButton(this)),
45 yearBackward(new QToolButton(this)), 49 yearBackward(new QToolButton(this)),
46 monthForward(new QToolButton(this)), 50 monthForward(new QToolButton(this)),
47 monthBackward(new QToolButton(this)), 51 monthBackward(new QToolButton(this)),
48 selectMonth(new QToolButton(this)), 52 selectMonth(new QToolButton(this)),
49 selectYear(new QToolButton(this)), 53 selectYear(new QToolButton(this)),
50 todayBut(new QToolButton(this)), 54 todayBut(new QToolButton(this)),
51 //line(new QLineEdit(this)), 55 //line(new QLineEdit(this)),
52 val(new KDateValidator(this)) 56 val(new KDateValidator(this))
53 //table(new KDateTable(this)), 57 //table(new KDateTable(this)),
54 //fontsize(1) 58 //fontsize(1)
55{ 59{
56 QFont fo = KGlobalSettings::generalFont(); 60 QFont fo = KGlobalSettings::generalFont();
57 int add = 2; 61 int add = 2;
58 if ( QApplication::desktop()->width() >= 480 && QApplication::desktop()->width() <= 640 ) 62 if ( QApplication::desktop()->width() >= 480 && QApplication::desktop()->width() <= 640 )
59 add += 4; 63 add += 4;
60 fo.setPointSize(fo.pointSize()+add ); 64 fo.setPointSize(fo.pointSize()+add );
61 setFont( fo ); 65 setFont( fo );
62 table = new KDateTable(this); 66 table = new KDateTable(this);
63 setFontSize(font().pointSize()); 67 setFontSize(font().pointSize());
64 //line->setValidator(val); 68 //line->setValidator(val);
65 lineDate = new KDateEdit( this, "dateediipicker", true ); 69 lineDate = new KDateEdit( this, "dateediipicker", true );
66 yearForward->setPixmap(SmallIcon("3rightarrowB")); 70 yearForward->setPixmap(SmallIcon("3rightarrowB"));
67 yearBackward->setPixmap(SmallIcon("3leftarrowB")); 71 yearBackward->setPixmap(SmallIcon("3leftarrowB"));
68 monthForward->setPixmap(SmallIcon("2rightarrowB")); 72 monthForward->setPixmap(SmallIcon("2rightarrowB"));
69 monthBackward->setPixmap(SmallIcon("2leftarrowB")); 73 monthBackward->setPixmap(SmallIcon("2leftarrowB"));
70 todayBut->setPixmap(SmallIcon("today")); 74 todayBut->setPixmap(SmallIcon("today"));
71 setDate(dt); // set button texts 75 setDate(dt); // set button texts
72 connect(table, SIGNAL(dateChanged(QDate)), SLOT(dateChangedSlot(QDate))); 76 connect(table, SIGNAL(dateChanged(QDate)), SLOT(dateChangedSlot(QDate)));
73 connect(table, SIGNAL(tableClicked()), SLOT(tableClickedSlot())); 77 connect(table, SIGNAL(tableClicked()), SLOT(tableClickedSlot()));
74 connect(monthForward, SIGNAL(clicked()), SLOT(monthForwardClicked())); 78 connect(monthForward, SIGNAL(clicked()), SLOT(monthForwardClicked()));
75 connect(monthBackward, SIGNAL(clicked()), SLOT(monthBackwardClicked())); 79 connect(monthBackward, SIGNAL(clicked()), SLOT(monthBackwardClicked()));
76 connect(yearForward, SIGNAL(clicked()), SLOT(yearForwardClicked())); 80 connect(yearForward, SIGNAL(clicked()), SLOT(yearForwardClicked()));
77 connect(yearBackward, SIGNAL(clicked()), SLOT(yearBackwardClicked())); 81 connect(yearBackward, SIGNAL(clicked()), SLOT(yearBackwardClicked()));
78 connect(selectMonth, SIGNAL(clicked()), SLOT(selectMonthClicked())); 82 connect(selectMonth, SIGNAL(clicked()), SLOT(selectMonthClicked()));
79 connect(selectYear, SIGNAL(clicked()), SLOT(selectYearClicked())); 83 connect(selectYear, SIGNAL(clicked()), SLOT(selectYearClicked()));
80 connect(todayBut, SIGNAL(clicked()), SLOT(goToday())); 84 connect(todayBut, SIGNAL(clicked()), SLOT(goToday()));
81 //connect(line, SIGNAL(returnPressed()), SLOT(lineEnterPressed())); 85 //connect(line, SIGNAL(returnPressed()), SLOT(lineEnterPressed()));
82 connect(lineDate, SIGNAL(dateChanged(QDate)), SLOT(slotSetDate(QDate))); 86 connect(lineDate, SIGNAL(dateChanged(QDate)), SLOT(slotSetDate(QDate)));
83 connect(lineDate, SIGNAL(returnPressed()), SLOT(lineEnterPressed())); 87 connect(lineDate, SIGNAL(returnPressed()), SLOT(lineEnterPressed()));
84 table->setFocus(); 88 table->setFocus();
85 89
86} 90}
87 91
88KDatePicker::~KDatePicker() 92KDatePicker::~KDatePicker()
89{ 93{
90} 94}
91 95
92void 96void
93KDatePicker::resizeEvent(QResizeEvent*) 97KDatePicker::resizeEvent(QResizeEvent*)
94{ 98{
95 QWidget *buttons[] = { 99 QWidget *buttons[] = {
96 yearBackward, 100 yearBackward,
97 monthBackward, 101 monthBackward,
98 selectMonth, 102 selectMonth,
99 selectYear, 103 selectYear,
100 monthForward, 104 monthForward,
101 yearForward }; 105 yearForward };
102 const int NoOfButtons=sizeof(buttons)/sizeof(buttons[0]); 106 const int NoOfButtons=sizeof(buttons)/sizeof(buttons[0]);
103 QSize sizes[NoOfButtons]; 107 QSize sizes[NoOfButtons];
104 int buttonHeight=0; 108 int buttonHeight=0;
105 int count; 109 int count;
106 int w; 110 int w;
107 int x=0; 111 int x=0;
108 // ----- calculate button row height: 112 // ----- calculate button row height:
109 for(count=0; count<NoOfButtons; ++count) { 113 for(count=0; count<NoOfButtons; ++count) {
110 int xS = buttons[count]->sizeHint().width(); 114 int xS = buttons[count]->sizeHint().width();
111 int yS = buttons[count]->sizeHint().height(); 115 int yS = buttons[count]->sizeHint().height();
112 if ( QApplication::desktop()->width() < 320 ) 116 if ( QApplication::desktop()->width() < 320 )
113 sizes[count]=QSize ( xS+4, yS ); 117 sizes[count]=QSize ( xS+4, yS );
114 else 118 else
115 sizes[count]=QSize ( xS+10, yS ); 119 sizes[count]=QSize ( xS+10, yS );
116 120
117 buttonHeight=QMAX(buttonHeight, sizes[count].height()); 121 buttonHeight=QMAX(buttonHeight, sizes[count].height());
118 } 122 }
119 buttonHeight += 10; 123 buttonHeight += 10;
120 // ----- calculate size of the month button: 124 // ----- calculate size of the month button:
121 w=0; 125 w=0;
122 for(count=0; count<NoOfButtons; ++count) { 126 for(count=0; count<NoOfButtons; ++count) {
123 if(buttons[count]!=selectMonth) 127 if(buttons[count]!=selectMonth)
124 { 128 {
125 w+=sizes[count].width(); 129 w+=sizes[count].width();
126 } else { 130 } else {
127 x=count; 131 x=count;
128 } 132 }
129 } 133 }
130 sizes[x].setWidth(width()-w); // stretch the month button 134 sizes[x].setWidth(width()-w); // stretch the month button
131 // ----- place the buttons: 135 // ----- place the buttons:
132 x=0; 136 x=0;
133 for(count=0; count<NoOfButtons; ++count) 137 for(count=0; count<NoOfButtons; ++count)
134 { 138 {
135 w=sizes[count].width(); 139 w=sizes[count].width();
136 buttons[count]->setGeometry(x, 0, w, buttonHeight); 140 buttons[count]->setGeometry(x, 0, w, buttonHeight);
137 x+=w; 141 x+=w;
138 } 142 }
139 // ----- place the line edit for direct input: 143 // ----- place the line edit for direct input:
140 sizes[0]=lineDate->sizeHint(); 144 sizes[0]=lineDate->sizeHint();
141 //line->setGeometry(0, height()-sizes[0].height(), width(), sizes[0].height()); 145 //line->setGeometry(0, height()-sizes[0].height(), width(), sizes[0].height());
142 int todaywid = todayBut->sizeHint().width(); 146 int todaywid = todayBut->sizeHint().width();
143todayBut->setGeometry(0, height()-sizes[0].height(),todaywid, sizes[0].height()); 147todayBut->setGeometry(0, height()-sizes[0].height(),todaywid, sizes[0].height());
144 lineDate->setGeometry(0+todaywid, height()-sizes[0].height(), width()-todaywid, sizes[0].height()); 148 lineDate->setGeometry(0+todaywid, height()-sizes[0].height(), width()-todaywid, sizes[0].height());
145 // ----- adjust the table: 149 // ----- adjust the table:
146 table->setGeometry(0, buttonHeight, width(), 150 table->setGeometry(0, buttonHeight, width(),
147 height()-buttonHeight-sizes[0].height()); 151 height()-buttonHeight-sizes[0].height());
148} 152}
149 153
150void 154void
151KDatePicker::dateChangedSlot(QDate date) 155KDatePicker::dateChangedSlot(QDate date)
152{ 156{
153 lineDate->setDate( date );//(KGlobal::locale()->formatDate(date, true)); 157 lineDate->setDate( date );//(KGlobal::locale()->formatDate(date, true));
154 //line->setText(KGlobal::locale()->formatDate(date, true)); 158 //line->setText(KGlobal::locale()->formatDate(date, true));
155 QString temp; 159 QString temp;
156 selectMonth->setText(KGlobal::locale()->monthName(date.month(), false)); 160 selectMonth->setText(KGlobal::locale()->monthName(date.month(), false));
157 temp.setNum(date.year()); 161 temp.setNum(date.year());
158 selectYear->setText(temp); 162 selectYear->setText(temp);
159 emit(dateChanged(date)); 163 emit(dateChanged(date));
160} 164}
161 165
162void 166void
163KDatePicker::tableClickedSlot() 167KDatePicker::tableClickedSlot()
164{ 168{
165 169
166 emit(dateSelected(table->getDate())); 170 emit(dateSelected(table->getDate()));
167 emit(tableClicked()); 171 emit(tableClicked());
168} 172}
169 173
170const QDate& 174const QDate&
171KDatePicker::getDate() const 175KDatePicker::getDate() const
172{ 176{
173 return table->getDate(); 177 return table->getDate();
174} 178}
175 179
176const QDate & 180const QDate &
177KDatePicker::date() const 181KDatePicker::date() const
178{ 182{
179 return table->getDate(); 183 return table->getDate();
180} 184}
181 185
182void KDatePicker::goToday() 186void KDatePicker::goToday()
183{ 187{
184 slotSetDate( QDate::currentDate() ); 188 slotSetDate( QDate::currentDate() );
185 189
186} 190}
187void KDatePicker::slotSetDate( QDate date ) 191void KDatePicker::slotSetDate( QDate date )
188{ 192{
189 193
190 if(date.isValid()) { 194 if(date.isValid()) {
191 QString temp; 195 QString temp;
192 // ----- 196 // -----
193 table->setDate(date); 197 table->setDate(date);
194 selectMonth->setText(KGlobal::locale()->monthName(date.month(), false)); 198 selectMonth->setText(KGlobal::locale()->monthName(date.month(), false));
195 temp.setNum(date.year()); 199 temp.setNum(date.year());
196 selectYear->setText(temp); 200 selectYear->setText(temp);
197 //line->setText(KGlobal::locale()->formatDate(date, true)); 201 //line->setText(KGlobal::locale()->formatDate(date, true));
198 lineDate->setDate( date ); 202 lineDate->setDate( date );
199 } 203 }
200 204
201} 205}
202bool 206bool
203KDatePicker::setDate(const QDate& date) 207KDatePicker::setDate(const QDate& date)
204{ 208{
205 table->setFocus(); 209 table->setFocus();
206 if(date.isValid()) { 210 if(date.isValid()) {
207 QString temp; 211 QString temp;
208 // ----- 212 // -----
209 table->setDate(date); 213 table->setDate(date);
210 selectMonth->setText(KGlobal::locale()->monthName(date.month(), false)); 214 selectMonth->setText(KGlobal::locale()->monthName(date.month(), false));
211 temp.setNum(date.year()); 215 temp.setNum(date.year());
212 selectYear->setText(temp); 216 selectYear->setText(temp);
213 //line->setText(KGlobal::locale()->formatDate(date, true)); 217 //line->setText(KGlobal::locale()->formatDate(date, true));
214 lineDate->setDate( date ); 218 lineDate->setDate( date );
215 return true; 219 return true;
216 } else { 220 } else {
217 221
218 return false; 222 return false;
219 } 223 }
220 224
221 225
222} 226}
223 227
224void 228void
225KDatePicker::monthForwardClicked() 229KDatePicker::monthForwardClicked()
226{ 230{
227 QDate temp=table->getDate(); 231 QDate temp=table->getDate();
228 int day=temp.day(); 232 int day=temp.day();
229 // ----- 233 // -----
230 if(temp.month()==12) { 234 if(temp.month()==12) {
231 temp.setYMD(temp.year()+1, 1, 1); 235 temp.setYMD(temp.year()+1, 1, 1);
232 } else { 236 } else {
233 temp.setYMD(temp.year(), temp.month()+1, 1); 237 temp.setYMD(temp.year(), temp.month()+1, 1);
234 } 238 }
235 if(temp.daysInMonth()<day) { 239 if(temp.daysInMonth()<day) {
236 temp.setYMD(temp.year(), temp.month(), temp.daysInMonth()); 240 temp.setYMD(temp.year(), temp.month(), temp.daysInMonth());
237 } else { 241 } else {
238 temp.setYMD(temp.year(), temp.month(), day); 242 temp.setYMD(temp.year(), temp.month(), day);
239 } 243 }
240 // assert(temp.isValid()); 244 // assert(temp.isValid());
241 setDate(temp); 245 setDate(temp);
242} 246}
243 247
244void 248void
245KDatePicker::monthBackwardClicked() 249KDatePicker::monthBackwardClicked()
246{ 250{
247 QDate temp=table->getDate(); 251 QDate temp=table->getDate();
248 int day=temp.day(); 252 int day=temp.day();
249 // ----- 253 // -----
250 if(temp.month()==1) 254 if(temp.month()==1)
251 { 255 {
252 temp.setYMD(temp.year()-1, 12, 1); 256 temp.setYMD(temp.year()-1, 12, 1);
253 } else { 257 } else {
254 temp.setYMD(temp.year(), temp.month()-1, 1); 258 temp.setYMD(temp.year(), temp.month()-1, 1);
255 } 259 }
256 if(temp.daysInMonth()<day) 260 if(temp.daysInMonth()<day)
257 { 261 {
258 temp.setYMD(temp.year(), temp.month(), temp.daysInMonth()); 262 temp.setYMD(temp.year(), temp.month(), temp.daysInMonth());
259 } else { 263 } else {
260 temp.setYMD(temp.year(), temp.month(), day); 264 temp.setYMD(temp.year(), temp.month(), day);
261 } 265 }
262 // assert(temp.isValid()); 266 // assert(temp.isValid());
263 setDate(temp); 267 setDate(temp);
264} 268}
265 269
266void 270void
267KDatePicker::yearForwardClicked() 271KDatePicker::yearForwardClicked()
268{ 272{
269 QDate temp=table->getDate(); 273 QDate temp=table->getDate();
270 int day=temp.day(); 274 int day=temp.day();
271 // ----- 275 // -----
272 temp.setYMD(temp.year()+1, temp.month(), 1); 276 temp.setYMD(temp.year()+1, temp.month(), 1);
273 if(temp.daysInMonth()<day) 277 if(temp.daysInMonth()<day)
274 { 278 {
275 temp.setYMD(temp.year(), temp.month(), temp.daysInMonth()); 279 temp.setYMD(temp.year(), temp.month(), temp.daysInMonth());
276 } else { 280 } else {
277 temp.setYMD(temp.year(), temp.month(), day); 281 temp.setYMD(temp.year(), temp.month(), day);
278 } 282 }
279 // assert(temp.isValid()); 283 // assert(temp.isValid());
280 setDate(temp); 284 setDate(temp);
281} 285}
282 286
283void 287void
284KDatePicker::yearBackwardClicked() 288KDatePicker::yearBackwardClicked()
285{ 289{
286 QDate temp=table->getDate(); 290 QDate temp=table->getDate();
287 int day=temp.day(); 291 int day=temp.day();
288 // ----- 292 // -----
289 temp.setYMD(temp.year()-1, temp.month(), 1); 293 temp.setYMD(temp.year()-1, temp.month(), 1);
290 if(temp.daysInMonth()<day) 294 if(temp.daysInMonth()<day)
291 { 295 {
292 temp.setYMD(temp.year(), temp.month(), temp.daysInMonth()); 296 temp.setYMD(temp.year(), temp.month(), temp.daysInMonth());
293 } else { 297 } else {
294 temp.setYMD(temp.year(), temp.month(), day); 298 temp.setYMD(temp.year(), temp.month(), day);
295 } 299 }
296 // assert(temp.isValid()); 300 // assert(temp.isValid());
297 setDate(temp); 301 setDate(temp);
298} 302}
299 303