summaryrefslogtreecommitdiffabout
path: root/libkdepim/kdateedit.cpp
authorzautrix <zautrix>2005-04-14 17:48:58 (UTC)
committer zautrix <zautrix>2005-04-14 17:48:58 (UTC)
commitbbdca90c599aaea557d31552c6bc33fc15e397cd (patch) (unidiff)
treee41b5eb16239664d2217e5436db61610099b60ef /libkdepim/kdateedit.cpp
parent5ea16ef9058a21016402dd5affc0a7f82857e606 (diff)
downloadkdepimpi-bbdca90c599aaea557d31552c6bc33fc15e397cd.zip
kdepimpi-bbdca90c599aaea557d31552c6bc33fc15e397cd.tar.gz
kdepimpi-bbdca90c599aaea557d31552c6bc33fc15e397cd.tar.bz2
today added
Diffstat (limited to 'libkdepim/kdateedit.cpp') (more/less context) (ignore whitespace changes)
-rw-r--r--libkdepim/kdateedit.cpp9
1 files changed, 9 insertions, 0 deletions
diff --git a/libkdepim/kdateedit.cpp b/libkdepim/kdateedit.cpp
index 3d9e690..bf38479 100644
--- a/libkdepim/kdateedit.cpp
+++ b/libkdepim/kdateedit.cpp
@@ -1,230 +1,239 @@
1/* 1/*
2 This file is part of libkdepim. 2 This file is part of libkdepim.
3 3
4 Copyright (c) 2002 Cornelius Schumacher <schumacher@kde.org> 4 Copyright (c) 2002 Cornelius Schumacher <schumacher@kde.org>
5 5
6 This program is free software; you can redistribute it and/or modify 6 This program is free software; you can redistribute it and/or modify
7 it under the terms of the GNU General Public License as published by 7 it under the terms of the GNU General Public License as published by
8 the Free Software Foundation; either version 2 of the License, or 8 the Free Software Foundation; either version 2 of the License, or
9 (at your option) any later version. 9 (at your option) any later version.
10 10
11 This program is distributed in the hope that it will be useful, 11 This program is distributed in the hope that it will be useful,
12 but WITHOUT ANY WARRANTY; without even the implied warranty of 12 but WITHOUT ANY WARRANTY; without even the implied warranty of
13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 GNU General Public License for more details. 14 GNU General Public License for more details.
15 15
16 You should have received a copy of the GNU General Public License 16 You should have received a copy of the GNU General Public License
17 along with this program; if not, write to the Free Software 17 along with this program; if not, write to the Free Software
18 Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. 18 Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
19 19
20 As a special exception, permission is given to link this program 20 As a special exception, permission is given to link this program
21 with any edition of Qt, and distribute the resulting executable, 21 with any edition of Qt, and distribute the resulting executable,
22 without including the source code for Qt in the source distribution. 22 without including the source code for Qt in the source distribution.
23*/ 23*/
24 24
25#include <qapplication.h> 25#include <qapplication.h>
26#include <qevent.h> 26#include <qevent.h>
27#include <qlineedit.h> 27#include <qlineedit.h>
28#include <qpixmap.h> 28#include <qpixmap.h>
29#include <qpushbutton.h> 29#include <qpushbutton.h>
30 30
31#include <kdatepicker.h> 31#include <kdatepicker.h>
32#include <kdebug.h> 32#include <kdebug.h>
33#include <kglobal.h> 33#include <kglobal.h>
34#include <kiconloader.h> 34#include <kiconloader.h>
35#include <klocale.h> 35#include <klocale.h>
36#include <kmessagebox.h> 36#include <kmessagebox.h>
37#include <knotifyclient.h> 37#include <knotifyclient.h>
38#include <qpalette.h> 38#include <qpalette.h>
39 39
40#include "kdateedit.h" 40#include "kdateedit.h"
41//#include "kdateedit.moc" 41//#include "kdateedit.moc"
42 42
43KDateEdit::KDateEdit(QWidget *parent, const char *name, bool withoutDP ) 43KDateEdit::KDateEdit(QWidget *parent, const char *name, bool withoutDP )
44 : QHBox(parent, name) 44 : QHBox(parent, name)
45{ 45{
46 dateFormShort = true; 46 dateFormShort = true;
47 withoutDp = withoutDP; 47 withoutDp = withoutDP;
48 mDateEdit = new QLineEdit(this); 48 mDateEdit = new QLineEdit(this);
49 mDateEdit->setText(KGlobal::locale()->formatDate(QDate::currentDate(),dateFormShort)); 49 mDateEdit->setText(KGlobal::locale()->formatDate(QDate::currentDate(),dateFormShort));
50 setFocusProxy(mDateEdit); 50 setFocusProxy(mDateEdit);
51 mDateEdit->installEventFilter(this); 51 mDateEdit->installEventFilter(this);
52 52
53 // Highlight Background and Textcolor 53 // Highlight Background and Textcolor
54 QPalette palette = QWidget::palette(); 54 QPalette palette = QWidget::palette();
55 unsigned char red, green, blue; 55 unsigned char red, green, blue;
56 red = palette.color( QPalette::Normal , QColorGroup::Background ).red() - 10; 56 red = palette.color( QPalette::Normal , QColorGroup::Background ).red() - 10;
57 green = palette.color( QPalette::Normal , QColorGroup::Background ).green() - 10; 57 green = palette.color( QPalette::Normal , QColorGroup::Background ).green() - 10;
58 blue = palette.color( QPalette::Normal , QColorGroup::Background ).blue() - 10; 58 blue = palette.color( QPalette::Normal , QColorGroup::Background ).blue() - 10;
59 palette.setColor( QColorGroup::Highlight, QColor(red,green,blue) ); 59 palette.setColor( QColorGroup::Highlight, QColor(red,green,blue) );
60 palette.setColor( QColorGroup::HighlightedText, palette.color( QPalette::Normal , QColorGroup::Foreground ) ); 60 palette.setColor( QColorGroup::HighlightedText, palette.color( QPalette::Normal , QColorGroup::Foreground ) );
61 mDateEdit->setPalette( palette ); 61 mDateEdit->setPalette( palette );
62 62
63 if ( withoutDP ) { 63 if ( withoutDP ) {
64 mDateFrame = 0; 64 mDateFrame = 0;
65 mDateButton = 0; 65 mDateButton = 0;
66 mDatePicker = 0; 66 mDatePicker = 0;
67 } else { 67 } else {
68 QPixmap pixmap = SmallIcon("smallcal"); 68 QPixmap pixmap = SmallIcon("smallcal");
69 mDateButton = new QPushButton(this); 69 mDateButton = new QPushButton(this);
70 mDateButton->setPixmap(pixmap); 70 mDateButton->setPixmap(pixmap);
71 QPixmap pixmap2 = SmallIcon("today_small");
72 QPushButton* nowButton = new QPushButton(this);
73 nowButton->setPixmap(pixmap2);
71 74
72 mDateFrame = new QVBox(0,0,WType_Popup); 75 mDateFrame = new QVBox(0,0,WType_Popup);
73 // mDateFrame->setFrameStyle(QFrame::PopupPanel | QFrame::Raised); 76 // mDateFrame->setFrameStyle(QFrame::PopupPanel | QFrame::Raised);
74 mDateFrame->setFrameStyle( QFrame::WinPanel |QFrame::Raised ); 77 mDateFrame->setFrameStyle( QFrame::WinPanel |QFrame::Raised );
75 mDateFrame->setLineWidth(3); 78 mDateFrame->setLineWidth(3);
76 mDateFrame->hide(); 79 mDateFrame->hide();
77 80
78 mDatePicker = new KDatePicker(mDateFrame,QDate::currentDate()); 81 mDatePicker = new KDatePicker(mDateFrame,QDate::currentDate());
79 connect(mDatePicker,SIGNAL(dateEntered(QDate)),SLOT(setDate(QDate))); 82 connect(mDatePicker,SIGNAL(dateEntered(QDate)),SLOT(setDate(QDate)));
80 connect(mDatePicker,SIGNAL(dateEntered(QDate)),SIGNAL(dateChanged(QDate))); 83 connect(mDatePicker,SIGNAL(dateEntered(QDate)),SIGNAL(dateChanged(QDate)));
81 connect(mDatePicker,SIGNAL(dateSelected(QDate)),SLOT(setDate(QDate))); 84 connect(mDatePicker,SIGNAL(dateSelected(QDate)),SLOT(setDate(QDate)));
82 connect(mDatePicker,SIGNAL(dateSelected(QDate)),SIGNAL(dateChanged(QDate))); 85 connect(mDatePicker,SIGNAL(dateSelected(QDate)),SIGNAL(dateChanged(QDate)));
83 connect(mDatePicker,SIGNAL(dateSelected(QDate)),mDateFrame,SLOT(hide())); 86 connect(mDatePicker,SIGNAL(dateSelected(QDate)),mDateFrame,SLOT(hide()));
84 connect(mDateButton,SIGNAL(clicked()),SLOT(toggleDatePicker())); 87 connect(mDateButton,SIGNAL(clicked()),SLOT(toggleDatePicker()));
88 connect(nowButton,SIGNAL(clicked()),SLOT(goToNow()));
85 mDateButton->setFocusPolicy( QWidget::NoFocus ); 89 mDateButton->setFocusPolicy( QWidget::NoFocus );
86 mDateButton->setAutoDefault( false ); 90 mDateButton->setAutoDefault( false );
87 //mDateFrame->resize( 400, 300 ); 91 //mDateFrame->resize( 400, 300 );
88 92
89 } 93 }
90 connect(mDateEdit,SIGNAL(returnPressed()),SLOT(lineEnterPressed())); 94 connect(mDateEdit,SIGNAL(returnPressed()),SLOT(lineEnterPressed()));
91 connect(mDateEdit,SIGNAL(textChanged(const QString &)), 95 connect(mDateEdit,SIGNAL(textChanged(const QString &)),
92 SLOT(textChanged(const QString &))); 96 SLOT(textChanged(const QString &)));
93 97
94 // Create the keyword list. This will be used to match against when the user 98 // Create the keyword list. This will be used to match against when the user
95 // enters information. 99 // enters information.
96 mKeywordMap[i18n("tomorrow")] = 1; 100 mKeywordMap[i18n("tomorrow")] = 1;
97 mKeywordMap[i18n("today")] = 0; 101 mKeywordMap[i18n("today")] = 0;
98 mKeywordMap[i18n("yesterday")] = -1; 102 mKeywordMap[i18n("yesterday")] = -1;
99 103
100 /* 104 /*
101 * This loop uses some math tricks to figure out the offset in days 105 * This loop uses some math tricks to figure out the offset in days
102 * to the next date the given day of the week occurs. There 106 * to the next date the given day of the week occurs. There
103 * are two cases, that the new day is >= the current day, which means 107 * are two cases, that the new day is >= the current day, which means
104 * the new day has not occured yet or that the new day < the current day, 108 * the new day has not occured yet or that the new day < the current day,
105 * which means the new day is already passed (so we need to find the 109 * which means the new day is already passed (so we need to find the
106 * day in the next week). 110 * day in the next week).
107 */ 111 */
108 QString dayName; 112 QString dayName;
109 int currentDay = QDate::currentDate().dayOfWeek(); 113 int currentDay = QDate::currentDate().dayOfWeek();
110 for (int i = 1; i <= 7; ++i) 114 for (int i = 1; i <= 7; ++i)
111 { 115 {
112 dayName = KGlobal::locale()->weekDayName(i).lower(); 116 dayName = KGlobal::locale()->weekDayName(i).lower();
113 if (i >= currentDay) 117 if (i >= currentDay)
114 mKeywordMap[dayName] = i - currentDay; 118 mKeywordMap[dayName] = i - currentDay;
115 else 119 else
116 mKeywordMap[dayName] = 7 - currentDay + i; 120 mKeywordMap[dayName] = 7 - currentDay + i;
117 } 121 }
118 122
119 mTextChanged = false; 123 mTextChanged = false;
120 mHandleInvalid = false; 124 mHandleInvalid = false;
121 // QWidget::setTabOrder( mDateEdit, mDateButton ); 125 // QWidget::setTabOrder( mDateEdit, mDateButton );
122} 126}
123 127
124KDateEdit::~KDateEdit() 128KDateEdit::~KDateEdit()
125{ 129{
126 delete mDateFrame; 130 delete mDateFrame;
127} 131}
128void KDateEdit::clear() 132void KDateEdit::clear()
129{ 133{
130 bool b = mDateEdit->signalsBlocked(); 134 bool b = mDateEdit->signalsBlocked();
131 mDateEdit->blockSignals(true); 135 mDateEdit->blockSignals(true);
132 mDateEdit->setText(""); 136 mDateEdit->setText("");
133 mDateEdit->blockSignals(b); 137 mDateEdit->blockSignals(b);
134} 138}
139void KDateEdit::goToNow()
140{
141 setDate(QDate::currentDate() );
142 emit setTimeTo( QTime::currentTime() );
143}
135void KDateEdit::setDate(QDate newDate) 144void KDateEdit::setDate(QDate newDate)
136{ 145{
137 if (!newDate.isValid() && !mHandleInvalid) 146 if (!newDate.isValid() && !mHandleInvalid)
138 return; 147 return;
139 if ( readDate() == newDate ) 148 if ( readDate() == newDate )
140 return; 149 return;
141 QString dateString = ""; 150 QString dateString = "";
142 if(newDate.isValid()) 151 if(newDate.isValid())
143 dateString = KGlobal::locale()->formatDate( newDate, dateFormShort ); 152 dateString = KGlobal::locale()->formatDate( newDate, dateFormShort );
144 153
145 mTextChanged = false; 154 mTextChanged = false;
146 155
147 // We do not want to generate a signal here, since we explicity setting 156 // We do not want to generate a signal here, since we explicity setting
148 // the date 157 // the date
149 bool b = mDateEdit->signalsBlocked(); 158 bool b = mDateEdit->signalsBlocked();
150 mDateEdit->blockSignals(true); 159 mDateEdit->blockSignals(true);
151 mDateEdit->setText(dateString); 160 mDateEdit->setText(dateString);
152 mDateEdit->blockSignals(b); 161 mDateEdit->blockSignals(b);
153} 162}
154 163
155void KDateEdit::setDate( QDate date,int *cpos,const int key ,const bool dateFormShort) 164void KDateEdit::setDate( QDate date,int *cpos,const int key ,const bool dateFormShort)
156{ 165{
157 QString dateForm = dateFormShort ? 166 QString dateForm = dateFormShort ?
158 KGlobal::locale()->dateFormatShort() : 167 KGlobal::locale()->dateFormatShort() :
159 KGlobal::locale()->dateFormat(); 168 KGlobal::locale()->dateFormat();
160 169
161 int begin = dateForm.find("%"); 170 int begin = dateForm.find("%");
162 int space = 0; 171 int space = 0;
163 int allStrLength = 0; 172 int allStrLength = 0;
164 int strLength = 0; 173 int strLength = 0;
165 int repeat = 0; 174 int repeat = 0;
166 175
167 // witch? Day, Month or Year switch? 176 // witch? Day, Month or Year switch?
168 while(1){ 177 while(1){
169 switch ( dateForm.at(begin + 1).latin1() ) 178 switch ( dateForm.at(begin + 1).latin1() )
170 { 179 {
171 case 'd':// 16 (month day) 180 case 'd':// 16 (month day)
172 strLength = 2; //Ok 181 strLength = 2; //Ok
173 break; 182 break;
174 case 'm':// 01 (month) 183 case 'm':// 01 (month)
175 strLength = 2; //Ok 184 strLength = 2; //Ok
176 break; 185 break;
177 case 'a':// Mon (Weekday) 186 case 'a':// Mon (Weekday)
178 strLength = KGlobal::locale()->weekDayName(date.dayOfWeek(), true).length(); 187 strLength = KGlobal::locale()->weekDayName(date.dayOfWeek(), true).length();
179 break; 188 break;
180 case 'A':// Monday (Weekday) 189 case 'A':// Monday (Weekday)
181 strLength = KGlobal::locale()->weekDayName(date.dayOfWeek(), false).length(); 190 strLength = KGlobal::locale()->weekDayName(date.dayOfWeek(), false).length();
182 break; 191 break;
183 case 'b':// Jan (monthName) 192 case 'b':// Jan (monthName)
184 strLength = KGlobal::locale()->monthName(date.month(), true).length(); 193 strLength = KGlobal::locale()->monthName(date.month(), true).length();
185 break; 194 break;
186 case 'B':// January (monthName) 195 case 'B':// January (monthName)
187 strLength = KGlobal::locale()->monthName(date.month(), false).length(); 196 strLength = KGlobal::locale()->monthName(date.month(), false).length();
188 break; 197 break;
189 case 'y':// 04 (year short) 198 case 'y':// 04 (year short)
190 strLength = 2; //Ok 199 strLength = 2; //Ok
191 break; 200 break;
192 case 'Y':// 2004 (year) 201 case 'Y':// 2004 (year)
193 strLength = 4; //Ok 202 strLength = 4; //Ok
194 break; 203 break;
195 default: 204 default:
196 break; 205 break;
197 } 206 }
198 space = begin - (repeat++ * 2); 207 space = begin - (repeat++ * 2);
199 // all select? then dayswitch 208 // all select? then dayswitch
200 if( (mDateEdit->text().length() == mDateEdit->markedText().length() ) && 209 if( (mDateEdit->text().length() == mDateEdit->markedText().length() ) &&
201 ( (dateForm.at(begin + 1).latin1() == 'd') || 210 ( (dateForm.at(begin + 1).latin1() == 'd') ||
202 (dateForm.at(begin + 1).latin1() == 'a') || 211 (dateForm.at(begin + 1).latin1() == 'a') ||
203 (dateForm.at(begin + 1).latin1() == 'A') ) ) { 212 (dateForm.at(begin + 1).latin1() == 'A') ) ) {
204 break; 213 break;
205 } 214 }
206 // mDateEdit-StringPos == CursorPosition(cpos) then break and set date 215 // mDateEdit-StringPos == CursorPosition(cpos) then break and set date
207 if( ( (space + allStrLength) <= *cpos && *cpos <= (space + allStrLength + strLength) ) || *cpos < begin ) { 216 if( ( (space + allStrLength) <= *cpos && *cpos <= (space + allStrLength + strLength) ) || *cpos < begin ) {
208 break; 217 break;
209 } 218 }
210 allStrLength += strLength; 219 allStrLength += strLength;
211 begin = dateForm.find("%", begin +1); 220 begin = dateForm.find("%", begin +1);
212 } 221 }
213 222
214 // set date 223 // set date
215 switch ( dateForm.at(begin + 1).latin1() ) { 224 switch ( dateForm.at(begin + 1).latin1() ) {
216 case 'd': 225 case 'd':
217 case 'a': 226 case 'a':
218 case 'A': 227 case 'A':
219 if(key == Key_Up) { 228 if(key == Key_Up) {
220 setDate( date.addDays( 1 ) ); 229 setDate( date.addDays( 1 ) );
221 } 230 }
222 else if(key == Key_Down) { 231 else if(key == Key_Down) {
223 setDate( date.addDays( -1 ) ); 232 setDate( date.addDays( -1 ) );
224 } 233 }
225 maxDay = readDate().day(); 234 maxDay = readDate().day();
226 break; 235 break;
227 case 'm': 236 case 'm':
228 case 'b': 237 case 'b':
229 case 'B': 238 case 'B':
230 if(key == Key_Up) { 239 if(key == Key_Up) {