summaryrefslogtreecommitdiffabout
Side-by-side diff
Diffstat (more/less context) (show whitespace changes)
-rw-r--r--korganizer/datenavigatorcontainer.cpp71
-rw-r--r--korganizer/datenavigatorcontainer.h2
-rw-r--r--korganizer/kdatenavigator.h3
-rw-r--r--korganizer/kodaymatrix.cpp16
-rw-r--r--korganizer/kodaymatrix.h2
5 files changed, 76 insertions, 18 deletions
diff --git a/korganizer/datenavigatorcontainer.cpp b/korganizer/datenavigatorcontainer.cpp
index 18756f0..bb27bce 100644
--- a/korganizer/datenavigatorcontainer.cpp
+++ b/korganizer/datenavigatorcontainer.cpp
@@ -47,4 +47,6 @@ DateNavigatorContainer::DateNavigatorContainer( QWidget *parent,
connectNavigatorView( mNavigatorView );
//setSizePolicy( QSizePolicy (QSizePolicy::Expanding,QSizePolicy::Expanding) );
+ mDisplayedEndDate = QDate::currentDate();
+ mLastDisplayedDN = 0;
}
@@ -81,6 +83,6 @@ void DateNavigatorContainer::setCalendar( Calendar *cal )
mCalendar = cal;
mNavigatorView->setCalendar( cal );
- KDateNavigator *n;
- for( n = mExtraViews.first(); n; n = mExtraViews.next() ) {
+ for( uint i = 0; i < mLastDisplayedDN; ++i ) {
+ KDateNavigator *n = mExtraViews.at( i );
n->setCalendar( cal );
}
@@ -90,6 +92,6 @@ void DateNavigatorContainer::updateDayMatrix()
{
mNavigatorView->updateDayMatrix();
- KDateNavigator *n;
- for( n = mExtraViews.first(); n; n = mExtraViews.next() ) {
+ for( uint i = 0; i < mLastDisplayedDN; ++i ) {
+ KDateNavigator *n = mExtraViews.at( i );
n->updateDayMatrix();
}
@@ -111,6 +113,6 @@ void DateNavigatorContainer::updateView()
{
mNavigatorView->updateView();
- KDateNavigator *n;
- for( n = mExtraViews.first(); n; n = mExtraViews.next() ) {
+ for( uint i = 0; i < mLastDisplayedDN; ++i ) {
+ KDateNavigator *n = mExtraViews.at( i );
n->updateView();
}
@@ -120,6 +122,6 @@ void DateNavigatorContainer::updateConfig()
{
mNavigatorView->updateConfig();
- KDateNavigator *n;
- for( n = mExtraViews.first(); n; n = mExtraViews.next() ) {
+ for( uint i = 0; i < mLastDisplayedDN; ++i ) {
+ KDateNavigator *n = mExtraViews.at( i );
n->updateConfig();
}
@@ -128,11 +130,47 @@ void DateNavigatorContainer::updateConfig()
void DateNavigatorContainer::selectDates( const DateList &dateList )
{
+ if ( !mLastDisplayedDN ) {
+ mNavigatorView->selectDates( dateList );
+ return;
+ }
+ QDate fDate = dateList.first();
+ QDate lDate = dateList.last();
+ if ( mLastDisplayedDN <= 2 ) {
+ mNavigatorView->selectDates( dateList );
+ KDateNavigator *view = mExtraViews.at( 0 );
+ QDate bDate = fDate.addDays( fDate.daysInMonth () - fDate.day() +1 );
+ view->setBaseDate( bDate, false );
+ view->dayMatrix()->setSelectedDaysFrom(fDate , lDate);
+ if ( mLastDisplayedDN == 2 ) {
+ view = mExtraViews.at( 1 );
+ bDate = bDate.addDays( bDate.daysInMonth () - bDate.day() +1 );
+ view->setBaseDate( bDate, false );
+ view->dayMatrix()->setSelectedDaysFrom(fDate , lDate);
+ }
+ return;
+ }
+ KDateNavigator *view = mExtraViews.at( 0 );
+ QDate date = view->baseDate();
+
+ QDate curEnd = date.addDays( (mLastDisplayedDN)*30 +7);
+ //qDebug("End %s %s ",lDate.toString().latin1(),curEnd.toString().latin1() );
+ if ( lDate < curEnd && date.addDays( -30 ) < fDate) {
+ mNavigatorView->dayMatrix()->setSelectedDaysFrom( fDate , lDate );
+ mNavigatorView->dayMatrix()->repaint( false );
+ for( uint i = 0; i < mLastDisplayedDN; ++i ) {
+ KDateNavigator *n = mExtraViews.at( i );
+ if ( n->dayMatrix()->setSelectedDaysFrom( fDate , lDate ) ) {
+ n->dayMatrix()->repaint( false );
+ }
+ }
+ return;
+ }
mNavigatorView->selectDates( dateList );
setBaseDates();
- if ( mExtraViews.count() ) {
+ if ( mLastDisplayedDN ) {
KDateNavigator *view = mExtraViews.at( 0 );
view->dayMatrix()->setSelectedDaysFrom(*(dateList.begin()), *(--dateList.end()));
view->dayMatrix()->repaint( false );
- if ( mExtraViews.count() > 1 ) {
+ if ( mLastDisplayedDN > 1 ) {
KDateNavigator *view = mExtraViews.at( 1 );
view->dayMatrix()->setSelectedDaysFrom(*(dateList.begin()), *(--dateList.end()));
@@ -149,7 +187,7 @@ void DateNavigatorContainer::setBaseDates()
}
QDate baseDate = dateList.first();
- KDateNavigator *n;
bool doRepaint = false; // skip first repaint
- for( n = mExtraViews.first(); n; n = mExtraViews.next() ) {
+ for( uint i = 0; i < mLastDisplayedDN; ++i ) {
+ KDateNavigator *n = mExtraViews.at( i );
baseDate = baseDate.addDays( baseDate.daysInMonth () - baseDate.day() +1 );
n->setBaseDate( baseDate, doRepaint );
@@ -212,4 +250,6 @@ void DateNavigatorContainer::resizeEvent( QResizeEvent * e )
}
+ mLastDisplayedDN = horizontalCount*verticalCount-1;
+ bool setBaseD = false;
while ( count > ( mExtraViews.count() + 1 ) ) {
KDateNavigator *n = new KDateNavigator( this );
@@ -217,5 +257,5 @@ void DateNavigatorContainer::resizeEvent( QResizeEvent * e )
mExtraViews.append( n );
n->setCalendar( mCalendar );
- setBaseDates();
+ setBaseD = true;
connectNavigatorView( n );
n->show();
@@ -229,4 +269,6 @@ void DateNavigatorContainer::resizeEvent( QResizeEvent * e )
++iii;
}
+ if ( setBaseD )
+ setBaseDates();
if ( fontchange ) {
//mNavigatorView->changeFont( fo );
@@ -239,4 +281,5 @@ void DateNavigatorContainer::resizeEvent( QResizeEvent * e )
mHorizontalCount = horizontalCount;
mVerticalCount = verticalCount;
+
}
//qDebug("COUNT %d ", mExtraViews.count());
@@ -250,5 +293,5 @@ void DateNavigatorContainer::resizeEvent( QResizeEvent * e )
mNavigatorView->setGeometry(0,
0, width, height );
- for( uint i = 0; i < mExtraViews.count(); ++i ) {
+ for( uint i = 0; i < mLastDisplayedDN; ++i ) {
int x = ( i + 1 ) % horizontalCount;
int y = ( i + 1 ) / horizontalCount;
diff --git a/korganizer/datenavigatorcontainer.h b/korganizer/datenavigatorcontainer.h
index affa8e1..f45af20 100644
--- a/korganizer/datenavigatorcontainer.h
+++ b/korganizer/datenavigatorcontainer.h
@@ -78,4 +78,6 @@ class DateNavigatorContainer: public QWidget
private:
+ int mLastDisplayedDN;
+ QDate mDisplayedEndDate;
KDateNavigator *mNavigatorView;
diff --git a/korganizer/kdatenavigator.h b/korganizer/kdatenavigator.h
index 10bc1be..93bbceb 100644
--- a/korganizer/kdatenavigator.h
+++ b/korganizer/kdatenavigator.h
@@ -62,4 +62,7 @@ class KDateNavigator: public QFrame
void setCalendar( Calendar * );
void setBaseDate( const QDate & , bool doRepaint = true );
+
+ QDate baseDate() const { return m_MthYr;}
+
KCal::DateList selectedDates() const { return mSelectedDates; }
NavigatorBar *navigatorBar() const { return mNavigatorBar; }
diff --git a/korganizer/kodaymatrix.cpp b/korganizer/kodaymatrix.cpp
index a2e0ae0..3ee1fa7 100644
--- a/korganizer/kodaymatrix.cpp
+++ b/korganizer/kodaymatrix.cpp
@@ -285,13 +285,20 @@ void KODayMatrix::addSelectedDaysTo(DateList& selDays)
}
-void KODayMatrix::setSelectedDaysFrom(const QDate& start, const QDate& end)
+bool KODayMatrix::setSelectedDaysFrom(const QDate& start, const QDate& end)
{
+ bool noSel = (mSelEnd == NOSELECTION && mSelStart == NOSELECTION );
mSelStart = startdate.daysTo(start);
if ( mSelStart < 0 )
mSelStart = 0;
mSelEnd = startdate.daysTo(end);
- //qDebug("SELECTION %d %d ", mSelStart ,mSelEnd );
- if ( mSelEnd < 0 )
+ if ( mSelEnd > NUMDAYS-1 )
+ mSelEnd = NUMDAYS-1;
+ if ( mSelEnd < 0 || mSelStart > NUMDAYS-1 ) {
clearSelection();
+ if ( noSel )
+ return false;
+ }
+
+ return true;
}
void KODayMatrix::clearSelection()
@@ -700,4 +707,6 @@ void KODayMatrix::paintEvent(QPaintEvent * pevent)
if ( endMo == 1 && mo == 12 )
endMo = 12;
+ if ( mo == 12 && startMo == 1 )
+ startMo = 13;
if ( (startMo > mo || endMo < mo) ) {
skip = true;
@@ -713,4 +722,5 @@ void KODayMatrix::paintEvent(QPaintEvent * pevent)
}
}
+ //qDebug("SKIP %d ", skip);
if ( ! skip ) {
row = mSelStartT/7;
diff --git a/korganizer/kodaymatrix.h b/korganizer/kodaymatrix.h
index 10f4b05..2a1959c 100644
--- a/korganizer/kodaymatrix.h
+++ b/korganizer/kodaymatrix.h
@@ -155,5 +155,5 @@ public:
* repaint. (?)
*/
- void setSelectedDaysFrom(const QDate& start, const QDate& end);
+ bool setSelectedDaysFrom(const QDate& start, const QDate& end);
void clearSelection();