-rw-r--r-- | korganizer/kodaymatrix.cpp | 100 |
1 files changed, 69 insertions, 31 deletions
diff --git a/korganizer/kodaymatrix.cpp b/korganizer/kodaymatrix.cpp index fc00828..060b4c4 100644 --- a/korganizer/kodaymatrix.cpp +++ b/korganizer/kodaymatrix.cpp | |||
@@ -105,13 +105,19 @@ KODayMatrix::KODayMatrix(QWidget *parent, Calendar* calendar, QDate date, const | |||
105 | mSelectedDaysColor = QColor("white"); | 105 | mSelectedDaysColor = QColor("white"); |
106 | mTodayMarginWidth = 2; | 106 | mTodayMarginWidth = 2; |
107 | mSelEnd = mSelStart = NOSELECTION; | 107 | mSelEnd = mSelStart = NOSELECTION; |
108 | 108 | ||
109 | setAcceptDrops(true); | 109 | setAcceptDrops(true); |
110 | //setFont( QFont("Arial", 10) ); | 110 | //setFont( QFont("Arial", 10) ); |
111 | updateView(date); | 111 | |
112 | mUpdateTimer = new QTimer( this ); | ||
113 | connect (mUpdateTimer ,SIGNAL(timeout()), this, SLOT ( updateViewTimed() )); | ||
114 | mRepaintTimer = new QTimer( this ); | ||
115 | connect (mRepaintTimer ,SIGNAL(timeout()), this, SLOT ( repaintViewTimed() )); | ||
116 | mDayChanged = false; | ||
117 | updateView(); | ||
112 | } | 118 | } |
113 | 119 | ||
114 | QColor KODayMatrix::getShadedColor(QColor color) | 120 | QColor KODayMatrix::getShadedColor(QColor color) |
115 | { | 121 | { |
116 | QColor shaded; | 122 | QColor shaded; |
117 | int h=0; | 123 | int h=0; |
@@ -199,45 +205,30 @@ void KODayMatrix::recalculateToday() | |||
199 | } | 205 | } |
200 | 206 | ||
201 | void KODayMatrix::updateView() | 207 | void KODayMatrix::updateView() |
202 | { | 208 | { |
203 | updateView(startdate); | 209 | updateView(startdate); |
204 | } | 210 | } |
205 | 211 | void KODayMatrix::repaintViewTimed() | |
206 | void KODayMatrix::updateView(QDate actdate) | ||
207 | { | 212 | { |
208 | 213 | qDebug("KODayMatrix::repaintViewTimed "); | |
209 | // kdDebug() << "KODayMatrix::updateView() " << actdate.toString() << endl; | 214 | mRepaintTimer->stop(); |
210 | 215 | repaint(false); | |
211 | //flag to indicate if the starting day of the matrix has changed by this call | ||
212 | bool daychanged = false; | ||
213 | // if a new startdate is to be set then apply Cornelius's calculation | ||
214 | // of the first day to be shown | ||
215 | if (actdate != startdate) { | ||
216 | // reset index of selection according to shift of starting date from startdate to actdate | ||
217 | if (mSelStart != NOSELECTION) { | ||
218 | int tmp = actdate.daysTo(startdate); | ||
219 | //kdDebug() << "Shift of Selection1: " << mSelStart << " - " << mSelEnd << " -> " << tmp << "(" << offset << ")" << endl; | ||
220 | // shift selection if new one would be visible at least partly ! | ||
221 | |||
222 | if (mSelStart+tmp < NUMDAYS && mSelEnd+tmp >= 0) { | ||
223 | // nested if is required for next X display pushed from a different month - correction required | ||
224 | // otherwise, for month forward and backward, it must be avoided | ||
225 | if( mSelStart > NUMDAYS || mSelStart < 0 ) | ||
226 | mSelStart = mSelStart + tmp; | ||
227 | if( mSelEnd > NUMDAYS || mSelEnd < 0 ) | ||
228 | mSelEnd = mSelEnd + tmp; | ||
229 | } | ||
230 | } | 216 | } |
217 | void KODayMatrix::updateViewTimed() | ||
218 | { | ||
231 | 219 | ||
232 | startdate = actdate; | 220 | mUpdateTimer->stop(); |
233 | daychanged = true; | 221 | //QDate actdate = mPendingNewDate; |
234 | } | 222 | |
223 | static int iii = 0; | ||
224 | qDebug("KODayMatrix::updateView(QDate actdate) %d", ++iii ); | ||
235 | 225 | ||
236 | if (daychanged) { | 226 | if (mDayChanged) { |
237 | recalculateToday(); | 227 | recalculateToday(); |
228 | mDayChanged = false; | ||
238 | } | 229 | } |
239 | 230 | ||
240 | for(int i = 0; i < NUMDAYS; i++) { | 231 | for(int i = 0; i < NUMDAYS; i++) { |
241 | 232 | ||
242 | // if events are set for the day then remember to draw it bold | 233 | // if events are set for the day then remember to draw it bold |
243 | QPtrList<Event> eventlist = mCalendar->events(days[i]); | 234 | QPtrList<Event> eventlist = mCalendar->events(days[i]); |
@@ -266,27 +257,74 @@ void KODayMatrix::updateView(QDate actdate) | |||
266 | mHolidays[i] = holiStr; | 257 | mHolidays[i] = holiStr; |
267 | 258 | ||
268 | } else { | 259 | } else { |
269 | mHolidays[i] = QString::null; | 260 | mHolidays[i] = QString::null; |
270 | } | 261 | } |
271 | } | 262 | } |
263 | repaint(false); | ||
264 | } | ||
265 | void KODayMatrix::updateView(QDate actdate) | ||
266 | { | ||
267 | |||
268 | //flag to indicate if the starting day of the matrix has changed by this call | ||
269 | //mDayChanged = false; | ||
270 | // if a new startdate is to be set then apply Cornelius's calculation | ||
271 | // of the first day to be shown | ||
272 | if (actdate != startdate) { | ||
273 | // reset index of selection according to shift of starting date from startdate to actdate | ||
274 | if (mSelStart != NOSELECTION) { | ||
275 | int tmp = actdate.daysTo(startdate); | ||
276 | //kdDebug() << "Shift of Selection1: " << mSelStart << " - " << mSelEnd << " -> " << tmp << "(" << offset << ")" << endl; | ||
277 | // shift selection if new one would be visible at least partly ! | ||
278 | |||
279 | if (mSelStart+tmp < NUMDAYS && mSelEnd+tmp >= 0) { | ||
280 | // nested if is required for next X display pushed from a different month - correction required | ||
281 | // otherwise, for month forward and backward, it must be avoided | ||
282 | if( mSelStart > NUMDAYS || mSelStart < 0 ) | ||
283 | mSelStart = mSelStart + tmp; | ||
284 | if( mSelEnd > NUMDAYS || mSelEnd < 0 ) | ||
285 | mSelEnd = mSelEnd + tmp; | ||
286 | } | ||
287 | } | ||
288 | |||
289 | startdate = actdate; | ||
290 | mDayChanged = true; | ||
291 | } | ||
292 | qDebug("restart Timer %d", mDayChanged ); | ||
293 | static int iii = 0; | ||
294 | if ( iii < 5 ) { | ||
295 | ++iii; | ||
296 | updateViewTimed(); | ||
297 | } else { | ||
298 | if ( !isVisible() ) { | ||
299 | mUpdateTimer->start( 2000 ); | ||
300 | } else { | ||
301 | if ( mDayChanged ) { | ||
302 | mUpdateTimer->start( 250 ); | ||
303 | } else { | ||
304 | mRepaintTimer->start( 250 ); | ||
305 | mUpdateTimer->start( 2000 ); | ||
306 | } | ||
307 | } | ||
308 | } | ||
309 | |||
272 | } | 310 | } |
273 | 311 | ||
274 | const QDate& KODayMatrix::getDate(int offset) | 312 | const QDate& KODayMatrix::getDate(int offset) |
275 | { | 313 | { |
276 | if (offset < 0 || offset > NUMDAYS-1) { | 314 | if (offset < 0 || offset > NUMDAYS-1) { |
277 | kdDebug() << "Wrong offset (" << offset << ") in KODayMatrix::getDate(int)" << endl; | 315 | qDebug("Wrong offset2 "); |
278 | return days[0]; | 316 | return days[0]; |
279 | } | 317 | } |
280 | return days[offset]; | 318 | return days[offset]; |
281 | } | 319 | } |
282 | 320 | ||
283 | QString KODayMatrix::getHolidayLabel(int offset) | 321 | QString KODayMatrix::getHolidayLabel(int offset) |
284 | { | 322 | { |
285 | if (offset < 0 || offset > NUMDAYS-1) { | 323 | if (offset < 0 || offset > NUMDAYS-1) { |
286 | kdDebug() << "Wrong offset (" << offset << ") in KODayMatrix::getHolidayLabel(int)" << endl; | 324 | qDebug("Wrong offset1 "); |
287 | return 0; | 325 | return 0; |
288 | } | 326 | } |
289 | return mHolidays[offset]; | 327 | return mHolidays[offset]; |
290 | } | 328 | } |
291 | 329 | ||
292 | int KODayMatrix::getDayIndexFrom(int x, int y) | 330 | int KODayMatrix::getDayIndexFrom(int x, int y) |