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
@@ -43,12 +43,14 @@ DateNavigatorContainer::DateNavigatorContainer( QWidget *parent,
mExtraViews.setAutoDelete( true );
mNavigatorView = new KDateNavigator( this, name );
connectNavigatorView( mNavigatorView );
//setSizePolicy( QSizePolicy (QSizePolicy::Expanding,QSizePolicy::Expanding) );
+ mDisplayedEndDate = QDate::currentDate();
+ mLastDisplayedDN = 0;
}
DateNavigatorContainer::~DateNavigatorContainer()
{
}
@@ -77,23 +79,23 @@ void DateNavigatorContainer::connectNavigatorView( KDateNavigator *v )
}
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 );
}
}
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();
}
}
void DateNavigatorContainer::updateToday()
{
@@ -107,36 +109,72 @@ void DateNavigatorContainer::updateToday()
#endif
}
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();
}
}
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();
}
}
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()));
view->dayMatrix()->repaint( false );
}
}
}
@@ -145,15 +183,15 @@ void DateNavigatorContainer::setBaseDates()
{
KCal::DateList dateList = mNavigatorView->selectedDates();
if ( dateList.isEmpty() ) {
kdError() << "DateNavigatorContainer::selectDates() empty list." << endl;
}
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 );
doRepaint = true;
}
}
@@ -208,51 +246,56 @@ void DateNavigatorContainer::resizeEvent( QResizeEvent * e )
fo = KOPrefs::instance()->mDateNavigatorFont;
mNavigatorView->changeFont( fo );
mNavigatorView->unsetFontChanged();
}
}
+ mLastDisplayedDN = horizontalCount*verticalCount-1;
+ bool setBaseD = false;
while ( count > ( mExtraViews.count() + 1 ) ) {
KDateNavigator *n = new KDateNavigator( this );
n->setMonthSignalOffset ( mExtraViews.count()+1 );
mExtraViews.append( n );
n->setCalendar( mCalendar );
- setBaseDates();
+ setBaseD = true;
connectNavigatorView( n );
n->show();
}
int iii = 0;
while ( iii < ( mExtraViews.count() ) ) {
if ( iii < count-1 )
mExtraViews.at( iii )->show();
else
mExtraViews.at( iii )->hide();
++iii;
}
+ if ( setBaseD )
+ setBaseDates();
if ( fontchange ) {
//mNavigatorView->changeFont( fo );
uint i;
for( i = 0; i < mExtraViews.count(); ++i ) {
KDateNavigator *view = mExtraViews.at( i );
view->changeFont( fo );
}
}
mHorizontalCount = horizontalCount;
mVerticalCount = verticalCount;
+
}
//qDebug("COUNT %d ", mExtraViews.count());
int height = size().height() / verticalCount;
int width = size().width() / horizontalCount;
NavigatorBar *bar = mNavigatorView->navigatorBar();
if ( horizontalCount > 1 ) bar->showButtons( true, false );
else bar->showButtons( true, true );
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;
KDateNavigator *view = mExtraViews.at( i );
bar = view->navigatorBar();
if ( y > 0 ) bar->showButtons( false, false );
diff --git a/korganizer/datenavigatorcontainer.h b/korganizer/datenavigatorcontainer.h
index affa8e1..f45af20 100644
--- a/korganizer/datenavigatorcontainer.h
+++ b/korganizer/datenavigatorcontainer.h
@@ -74,12 +74,14 @@ class DateNavigatorContainer: public QWidget
void resizeEvent( QResizeEvent * );
void setBaseDates();
void connectNavigatorView( KDateNavigator *v );
private:
+ int mLastDisplayedDN;
+ QDate mDisplayedEndDate;
KDateNavigator *mNavigatorView;
KCal::Calendar *mCalendar;
QPtrList<KDateNavigator> mExtraViews;
diff --git a/korganizer/kdatenavigator.h b/korganizer/kdatenavigator.h
index 10bc1be..93bbceb 100644
--- a/korganizer/kdatenavigator.h
+++ b/korganizer/kdatenavigator.h
@@ -58,12 +58,15 @@ class KDateNavigator: public QFrame
enum RolloverType { None, FollowDay, FollowMonth } ;
void enableRollover( RolloverType );
void setShowWeekNums( bool enabled );
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; }
void setMonthSignalOffset ( int off ) { mMonthSignalOffset = off%12;}
QSize yourSizeHint()const { return mySizeHint; };
QSize yourFullSizeHint() const { return myFullSizeHint;};
QFont yourFontHint( QSize , bool * b);
diff --git a/korganizer/kodaymatrix.cpp b/korganizer/kodaymatrix.cpp
index a2e0ae0..3ee1fa7 100644
--- a/korganizer/kodaymatrix.cpp
+++ b/korganizer/kodaymatrix.cpp
@@ -281,21 +281,28 @@ void KODayMatrix::addSelectedDaysTo(DateList& selDays)
for (int i = i0; i <= mSelEnd; i++) {
selDays.append(days[i]);
}
}
}
-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()
{
mSelEnd = mSelStart = NOSELECTION;
}
@@ -696,12 +703,14 @@ void KODayMatrix::paintEvent(QPaintEvent * pevent)
int startMo = days[mSelStartT].month();
int endMo = days[mSelEndT].month();
if ( startMo == 12 && mo == 1 && endMo <= 2 )
startMo = 1;
if ( endMo == 1 && mo == 12 )
endMo = 12;
+ if ( mo == 12 && startMo == 1 )
+ startMo = 13;
if ( (startMo > mo || endMo < mo) ) {
skip = true;
} else {
if ( days[mSelStartT].month() != mo ) {
int add = days[mSelStartT].daysInMonth ()-days[mSelStartT].day();
mSelStartT += add +1;
@@ -709,12 +718,13 @@ void KODayMatrix::paintEvent(QPaintEvent * pevent)
if ( days[mSelEndT].month() != mo ) {
int sub = days[mSelEndT].day();
mSelEndT -= sub ;
}
}
}
+ //qDebug("SKIP %d ", skip);
if ( ! skip ) {
row = mSelStartT/7;
col = mSelStartT -row*7;
QColor selcol = KOPrefs::instance()->mHighlightColor;
int addCol = 0;
int addRow = 0;
diff --git a/korganizer/kodaymatrix.h b/korganizer/kodaymatrix.h
index 10f4b05..2a1959c 100644
--- a/korganizer/kodaymatrix.h
+++ b/korganizer/kodaymatrix.h
@@ -151,13 +151,13 @@ public:
void addSelectedDaysTo(DateList&);
/** sets the actual to be displayed selection in the day matrix starting from
* start and ending with end. Theview must be manually updated by calling
* repaint. (?)
*/
- void setSelectedDaysFrom(const QDate& start, const QDate& end);
+ bool setSelectedDaysFrom(const QDate& start, const QDate& end);
void clearSelection();
/** Is today visible in the view? Keep this in sync with
* the values today (below) can take.
*/
bool isTodayVisible() const { return today>=0; } ;