Diffstat (limited to 'korganizer/datenavigatorcontainer.cpp') (more/less context) (ignore whitespace changes)
-rw-r--r-- | korganizer/datenavigatorcontainer.cpp | 114 |
1 files changed, 91 insertions, 23 deletions
diff --git a/korganizer/datenavigatorcontainer.cpp b/korganizer/datenavigatorcontainer.cpp index bb27bce..6de7c45 100644 --- a/korganizer/datenavigatorcontainer.cpp +++ b/korganizer/datenavigatorcontainer.cpp | |||
@@ -45,9 +45,8 @@ DateNavigatorContainer::DateNavigatorContainer( QWidget *parent, | |||
45 | mNavigatorView = new KDateNavigator( this, name ); | 45 | mNavigatorView = new KDateNavigator( this, name ); |
46 | 46 | ||
47 | connectNavigatorView( mNavigatorView ); | 47 | connectNavigatorView( mNavigatorView ); |
48 | //setSizePolicy( QSizePolicy (QSizePolicy::Expanding,QSizePolicy::Expanding) ); | 48 | //setSizePolicy( QSizePolicy (QSizePolicy::Expanding,QSizePolicy::Expanding) ); |
49 | mDisplayedEndDate = QDate::currentDate(); | ||
50 | mLastDisplayedDN = 0; | 49 | mLastDisplayedDN = 0; |
51 | } | 50 | } |
52 | 51 | ||
53 | DateNavigatorContainer::~DateNavigatorContainer() | 52 | DateNavigatorContainer::~DateNavigatorContainer() |
@@ -74,11 +73,60 @@ void DateNavigatorContainer::connectNavigatorView( KDateNavigator *v ) | |||
74 | connect( v, SIGNAL( goPrevMonth() ), SIGNAL( goPrevMonth() ) ); | 73 | connect( v, SIGNAL( goPrevMonth() ), SIGNAL( goPrevMonth() ) ); |
75 | connect( v, SIGNAL( goNextYear() ), SIGNAL( goNextYear() ) ); | 74 | connect( v, SIGNAL( goNextYear() ), SIGNAL( goNextYear() ) ); |
76 | connect( v, SIGNAL( goPrevYear() ), SIGNAL( goPrevYear() ) ); | 75 | connect( v, SIGNAL( goPrevYear() ), SIGNAL( goPrevYear() ) ); |
77 | 76 | ||
78 | connect( v, SIGNAL( monthSelected( int ) ), SIGNAL( monthSelected( int ) ) ); | 77 | connect( v, SIGNAL( monthSelected( int ) ), SLOT( slotMonthSelected( int ) ) ); |
79 | } | 78 | } |
80 | 79 | ||
80 | void DateNavigatorContainer::slotMonthSelected( int month ) | ||
81 | { | ||
82 | //qDebug("slotMonthSelected %d ", month); | ||
83 | QDate baseDate = mNavigatorView->baseDate(); | ||
84 | if ( baseDate.month() == month ) | ||
85 | return; | ||
86 | //qDebug("month %d %d ",baseDate.month(),month); | ||
87 | QDate date = QDate ( baseDate.year(), baseDate.month() , 15 ); | ||
88 | date = date.addDays( -(baseDate.month()-month ) *30 ); | ||
89 | QDate newBase = QDate ( date.year(), date.month() , baseDate.day() ); | ||
90 | |||
91 | #if 0 | ||
92 | mFirstSelectedDate = dateList.first() ; | ||
93 | mSelectedDateCount = dateList.count() ; | ||
94 | |||
95 | KDateNavigator *view = mExtraViews.at( 0 ); | ||
96 | QDate date = view->baseDate(); | ||
97 | |||
98 | QDate curEnd = date.addDays( (mLastDisplayedDN)*30 +7); | ||
99 | //qDebug("End %s %s ",lDate.toString().latin1(),curEnd.toString().latin1() ); | ||
100 | if ( lDate < curEnd && date.addDays( -30 ) < fDate) { | ||
101 | mNavigatorView->dayMatrix()->setSelectedDaysFrom( fDate , lDate ); | ||
102 | mNavigatorView->dayMatrix()->repaint( false ); | ||
103 | for( uint i = 0; i < mLastDisplayedDN; ++i ) { | ||
104 | KDateNavigator *n = mExtraViews.at( i ); | ||
105 | if ( n->dayMatrix()->setSelectedDaysFrom( fDate , lDate ) ) { | ||
106 | n->dayMatrix()->repaint( false ); | ||
107 | } | ||
108 | } | ||
109 | return; | ||
110 | } | ||
111 | #endif | ||
112 | //qDebug("NEW BASE %s", newBase.toString().latin1()); | ||
113 | mNavigatorView->setBaseDate( newBase ); | ||
114 | QDate last = lastAvailableDate(); | ||
115 | QDate first = firstAvailableDate(); | ||
116 | |||
117 | QDate selFirst = mFirstSelectedDate; | ||
118 | QDate selLast = selFirst.addDays( mSelectedDateCount-1 ); | ||
119 | if ( selFirst >= first && selLast <= last ) { | ||
120 | setBaseDates(); | ||
121 | updateDayMatrixDates(); | ||
122 | } | ||
123 | else { | ||
124 | setBaseDates(); | ||
125 | updateDayMatrixDates(); | ||
126 | emit monthSelected( month ); | ||
127 | } | ||
128 | } | ||
81 | void DateNavigatorContainer::setCalendar( Calendar *cal ) | 129 | void DateNavigatorContainer::setCalendar( Calendar *cal ) |
82 | { | 130 | { |
83 | mCalendar = cal; | 131 | mCalendar = cal; |
84 | mNavigatorView->setCalendar( cal ); | 132 | mNavigatorView->setCalendar( cal ); |
@@ -86,8 +134,22 @@ void DateNavigatorContainer::setCalendar( Calendar *cal ) | |||
86 | KDateNavigator *n = mExtraViews.at( i ); | 134 | KDateNavigator *n = mExtraViews.at( i ); |
87 | n->setCalendar( cal ); | 135 | n->setCalendar( cal ); |
88 | } | 136 | } |
89 | } | 137 | } |
138 | void DateNavigatorContainer::updateDayMatrixDates() | ||
139 | { | ||
140 | |||
141 | QDate fDate = mFirstSelectedDate; | ||
142 | QDate lDate = fDate.addDays( mSelectedDateCount - 1 ); | ||
143 | mNavigatorView->dayMatrix()->setSelectedDaysFrom( fDate , lDate ); | ||
144 | mNavigatorView->dayMatrix()->repaint( false ); | ||
145 | for( uint i = 0; i < mLastDisplayedDN; ++i ) { | ||
146 | KDateNavigator *n = mExtraViews.at( i ); | ||
147 | if ( n->dayMatrix()->setSelectedDaysFrom( fDate , lDate ) ) { | ||
148 | n->dayMatrix()->repaint( false ); | ||
149 | } | ||
150 | } | ||
151 | } | ||
90 | 152 | ||
91 | void DateNavigatorContainer::updateDayMatrix() | 153 | void DateNavigatorContainer::updateDayMatrix() |
92 | { | 154 | { |
93 | mNavigatorView->updateDayMatrix(); | 155 | mNavigatorView->updateDayMatrix(); |
@@ -125,11 +187,32 @@ void DateNavigatorContainer::updateConfig() | |||
125 | KDateNavigator *n = mExtraViews.at( i ); | 187 | KDateNavigator *n = mExtraViews.at( i ); |
126 | n->updateConfig(); | 188 | n->updateConfig(); |
127 | } | 189 | } |
128 | } | 190 | } |
129 | 191 | QDate DateNavigatorContainer::lastAvailableDate() const | |
192 | { | ||
193 | QDate date = mNavigatorView->baseDate(); | ||
194 | QDate last = QDate ( date.year(), date.month(), date.daysInMonth() ); | ||
195 | int iii = mLastDisplayedDN; | ||
196 | if ( mLastDisplayedDN ) | ||
197 | last = last.addDays( 1); | ||
198 | while ( iii ) { | ||
199 | last = last.addDays( last.daysInMonth ()); | ||
200 | //qDebug("DATE %s ", last.toString().latin1() ); | ||
201 | --iii; | ||
202 | } | ||
203 | if ( mLastDisplayedDN ) | ||
204 | last = last.addDays( -1); | ||
205 | return last; | ||
206 | } | ||
207 | QDate DateNavigatorContainer::firstAvailableDate() const | ||
208 | { | ||
209 | return QDate ( mNavigatorView->baseDate().year(), mNavigatorView->baseDate().month(), 1 ); | ||
210 | } | ||
130 | void DateNavigatorContainer::selectDates( const DateList &dateList ) | 211 | void DateNavigatorContainer::selectDates( const DateList &dateList ) |
131 | { | 212 | { |
213 | mFirstSelectedDate = dateList.first() ; | ||
214 | mSelectedDateCount = dateList.count() ; | ||
132 | if ( !mLastDisplayedDN ) { | 215 | if ( !mLastDisplayedDN ) { |
133 | mNavigatorView->selectDates( dateList ); | 216 | mNavigatorView->selectDates( dateList ); |
134 | return; | 217 | return; |
135 | } | 218 | } |
@@ -148,22 +231,12 @@ void DateNavigatorContainer::selectDates( const DateList &dateList ) | |||
148 | view->dayMatrix()->setSelectedDaysFrom(fDate , lDate); | 231 | view->dayMatrix()->setSelectedDaysFrom(fDate , lDate); |
149 | } | 232 | } |
150 | return; | 233 | return; |
151 | } | 234 | } |
152 | KDateNavigator *view = mExtraViews.at( 0 ); | 235 | //qDebug("%s %s ", lastAvailableDate().toString().latin1(), firstAvailableDate().toString().latin1() ); |
153 | QDate date = view->baseDate(); | ||
154 | |||
155 | QDate curEnd = date.addDays( (mLastDisplayedDN)*30 +7); | ||
156 | //qDebug("End %s %s ",lDate.toString().latin1(),curEnd.toString().latin1() ); | 236 | //qDebug("End %s %s ",lDate.toString().latin1(),curEnd.toString().latin1() ); |
157 | if ( lDate < curEnd && date.addDays( -30 ) < fDate) { | 237 | if ( lDate <= lastAvailableDate() && firstAvailableDate() <= fDate) { |
158 | mNavigatorView->dayMatrix()->setSelectedDaysFrom( fDate , lDate ); | 238 | updateDayMatrixDates(); |
159 | mNavigatorView->dayMatrix()->repaint( false ); | ||
160 | for( uint i = 0; i < mLastDisplayedDN; ++i ) { | ||
161 | KDateNavigator *n = mExtraViews.at( i ); | ||
162 | if ( n->dayMatrix()->setSelectedDaysFrom( fDate , lDate ) ) { | ||
163 | n->dayMatrix()->repaint( false ); | ||
164 | } | ||
165 | } | ||
166 | return; | 239 | return; |
167 | } | 240 | } |
168 | mNavigatorView->selectDates( dateList ); | 241 | mNavigatorView->selectDates( dateList ); |
169 | setBaseDates(); | 242 | setBaseDates(); |
@@ -180,19 +253,14 @@ void DateNavigatorContainer::selectDates( const DateList &dateList ) | |||
180 | } | 253 | } |
181 | 254 | ||
182 | void DateNavigatorContainer::setBaseDates() | 255 | void DateNavigatorContainer::setBaseDates() |
183 | { | 256 | { |
184 | KCal::DateList dateList = mNavigatorView->selectedDates(); | 257 | QDate baseDate = mNavigatorView->baseDate(); |
185 | if ( dateList.isEmpty() ) { | 258 | bool doRepaint = true; |
186 | kdError() << "DateNavigatorContainer::selectDates() empty list." << endl; | ||
187 | } | ||
188 | QDate baseDate = dateList.first(); | ||
189 | bool doRepaint = false; // skip first repaint | ||
190 | for( uint i = 0; i < mLastDisplayedDN; ++i ) { | 259 | for( uint i = 0; i < mLastDisplayedDN; ++i ) { |
191 | KDateNavigator *n = mExtraViews.at( i ); | 260 | KDateNavigator *n = mExtraViews.at( i ); |
192 | baseDate = baseDate.addDays( baseDate.daysInMonth () - baseDate.day() +1 ); | 261 | baseDate = baseDate.addDays( baseDate.daysInMonth () - baseDate.day() +1 ); |
193 | n->setBaseDate( baseDate, doRepaint ); | 262 | n->setBaseDate( baseDate, doRepaint ); |
194 | doRepaint = true; | ||
195 | } | 263 | } |
196 | } | 264 | } |
197 | 265 | ||
198 | void DateNavigatorContainer::resizeEvent( QResizeEvent * e ) | 266 | void DateNavigatorContainer::resizeEvent( QResizeEvent * e ) |