summaryrefslogtreecommitdiffabout
path: root/korganizer/komonthview.cpp
Unidiff
Diffstat (limited to 'korganizer/komonthview.cpp') (more/less context) (ignore whitespace changes)
-rw-r--r--korganizer/komonthview.cpp146
1 files changed, 86 insertions, 60 deletions
diff --git a/korganizer/komonthview.cpp b/korganizer/komonthview.cpp
index e66ddce..4dfb9df 100644
--- a/korganizer/komonthview.cpp
+++ b/korganizer/komonthview.cpp
@@ -87,52 +87,56 @@ KNoScrollListBox::KNoScrollListBox(QWidget *parent,const char *name)
87 setVScrollBarMode(QScrollView::AlwaysOff); 87 setVScrollBarMode(QScrollView::AlwaysOff);
88 setHScrollBarMode(QScrollView::AlwaysOff); 88 setHScrollBarMode(QScrollView::AlwaysOff);
89} 89}
90KNoScrollListBox::~KNoScrollListBox() 90KNoScrollListBox::~KNoScrollListBox()
91{ 91{
92 92
93} 93}
94 94
95 95
96void KNoScrollListBox::focusInEvent ( QFocusEvent * e ) 96void KNoScrollListBox::focusInEvent ( QFocusEvent * e )
97{ 97{
98 QListBox::focusInEvent ( e ); 98 QListBox::focusInEvent ( e );
99 QListBoxItem * i = item ( 0 ); 99 if ( count() ){
100 if ( i && resetOnFocusIn ) { 100 int ci = currentItem();
101 setCurrentItem( i ); 101 if ( ci < 0 ) ci = 0;
102 setSelected ( 0, true ); 102
103 } 103 setCurrentItem( ci );
104 resetOnFocusIn = true; 104 setSelected ( ci, true );
105 105 emit highlighted( item ( ci ) );
106 if ( KOPrefs::instance()->mEnableMonthScroll || KOPrefs::instance()->mMonthViewWeek ) { 106
107 QListBoxItem *fi = firstItem (); 107 resetOnFocusIn = true;
108 if (fi ) { 108
109 int ihei = fi->height( this ); 109 if ( KOPrefs::instance()->mEnableMonthScroll || KOPrefs::instance()->mMonthViewWeek ) {
110 int hei = numRows () * ihei; 110 QListBoxItem *fi = firstItem ();
111 if ( hei < height() - horizontalScrollBar()->height () ) { 111 if (fi ) {
112 setVScrollBarMode(QScrollView::AlwaysOff); 112 int ihei = fi->height( this );
113 } 113 int hei = numRows () * ihei;
114 else 114 if ( hei < height() - horizontalScrollBar()->height () ) {
115 setVScrollBarMode(QScrollView::AlwaysOff);
116 }
117 else
118 setVScrollBarMode(QScrollView::Auto);
119 if ( ihei *3 > height() ) {
120 setHScrollBarMode(QScrollView::AlwaysOff);
121 }
122 else {
123 setHScrollBarMode(QScrollView::Auto);
124 }
125 } else {
115 setVScrollBarMode(QScrollView::Auto); 126 setVScrollBarMode(QScrollView::Auto);
116 if ( ihei *3 > height() ) {
117 setHScrollBarMode(QScrollView::AlwaysOff);
118 }
119 else {
120 setHScrollBarMode(QScrollView::Auto); 127 setHScrollBarMode(QScrollView::Auto);
121 } 128 }
122 } else { 129 }
123 setVScrollBarMode(QScrollView::Auto); 130 }
124 setHScrollBarMode(QScrollView::Auto);
125 }
126 }
127} 131}
128void KNoScrollListBox::focusOutEvent ( QFocusEvent * e ) 132void KNoScrollListBox::focusOutEvent ( QFocusEvent * e )
129{ 133{
130 int i = currentItem (); 134 int i = currentItem ();
131 if ( i >= 0 ) { 135 if ( i >= 0 ) {
132 setSelected ( i, false ); 136 setSelected ( i, false );
133 } 137 }
134 QListBox::focusOutEvent ( e ); 138 QListBox::focusOutEvent ( e );
135 setVScrollBarMode(QScrollView::AlwaysOff); 139 setVScrollBarMode(QScrollView::AlwaysOff);
136 setHScrollBarMode(QScrollView::AlwaysOff); 140 setHScrollBarMode(QScrollView::AlwaysOff);
137} 141}
138 142
@@ -163,47 +167,55 @@ void KNoScrollListBox::keyPressEvent(QKeyEvent *e)
163 if (e->state() == Qt::ControlButton|| e->state() == Qt::ShiftButton ) 167 if (e->state() == Qt::ControlButton|| e->state() == Qt::ShiftButton )
164 { 168 {
165 e->ignore(); 169 e->ignore();
166 return; 170 return;
167 } 171 }
168 scrollBy(-10,0); 172 scrollBy(-10,0);
169 break; 173 break;
170 case Key_Up: 174 case Key_Up:
171 if( e->state() == Qt::ControlButton|| e->state() == Qt::ShiftButton) { 175 if( e->state() == Qt::ControlButton|| e->state() == Qt::ShiftButton) {
172 e->ignore(); 176 e->ignore();
173 break; 177 break;
174 } 178 }
175 if ( count() ) { 179 if ( count() ) {
176 setCurrentItem((currentItem()+count()-1)%count()); 180 if ( currentItem() == 0 ) {
177 if(!itemVisible(currentItem())) { 181 emit prevCell();
178 if((unsigned int) currentItem() == (count()-1)) { 182 } else {
179 setTopItem(currentItem()-numItemsVisible()+1); 183 setCurrentItem((currentItem()+count()-1)%count());
180 } else { 184 if(!itemVisible(currentItem())) {
181 setTopItem(topItem()-1); 185 if((unsigned int) currentItem() == (count()-1)) {
186 setTopItem(currentItem()-numItemsVisible()+1);
187 } else {
188 setTopItem(topItem()-1);
189 }
182 } 190 }
183 } 191 }
184 } 192 }
185 break; 193 break;
186 case Key_Down: 194 case Key_Down:
187 if(e->state() == Qt::ControlButton|| e->state() == Qt::ShiftButton) { 195 if(e->state() == Qt::ControlButton|| e->state() == Qt::ShiftButton) {
188 e->ignore(); 196 e->ignore();
189 break; 197 break;
190 } 198 }
191 if ( count () ) { 199 if ( count () ) {
192 setCurrentItem((currentItem()+1)%count()); 200 if ( currentItem()+1 == count () ) {
193 if(!itemVisible(currentItem())) { 201 emit nextCell();
194 if(currentItem() == 0) { 202 } else {
195 setTopItem(0); 203 setCurrentItem((currentItem()+1)%count());
196 } else { 204 if(!itemVisible(currentItem())) {
197 setTopItem(topItem()+1); 205 if(currentItem() == 0) {
206 setTopItem(0);
207 } else {
208 setTopItem(topItem()+1);
209 }
198 } 210 }
199 } 211 }
200 } 212 }
201 break; 213 break;
202 case Key_I: 214 case Key_I:
203 QTimer::singleShot( 1, this, SLOT ( oneDown() ) ); 215 QTimer::singleShot( 1, this, SLOT ( oneDown() ) );
204 e->ignore(); 216 e->ignore();
205 break; 217 break;
206 case Key_Return: 218 case Key_Return:
207 case Key_Enter: 219 case Key_Enter:
208 { 220 {
209 if ( currentItem() >= 0 ) { 221 if ( currentItem() >= 0 ) {
@@ -216,32 +228,36 @@ void KNoScrollListBox::keyPressEvent(QKeyEvent *e)
216 break; 228 break;
217 case Key_Shift: 229 case Key_Shift:
218 emit shiftDown(); 230 emit shiftDown();
219 break; 231 break;
220 default: 232 default:
221 e->ignore(); 233 e->ignore();
222 break; 234 break;
223 } 235 }
224} 236}
225 237
226void KNoScrollListBox::oneDown() 238void KNoScrollListBox::oneDown()
227{ 239{
228 if ( count () ) { 240 if ( count () ) {
229 resetOnFocusIn = false; 241 if ( currentItem()+1 == count () ) {
230 setCurrentItem((currentItem()+1)%count()); 242 emit nextCell();
231 if(!itemVisible(currentItem())) { 243 } else {
232 if(currentItem() == 0) { 244 resetOnFocusIn = false;
233 setTopItem(0); 245 setCurrentItem((currentItem()+1)%count());
234 } else { 246 if(!itemVisible(currentItem())) {
235 setTopItem(topItem()+1); 247 if(currentItem() == 0) {
248 setTopItem(0);
249 } else {
250 setTopItem(topItem()+1);
251 }
236 } 252 }
237 } 253 }
238 } 254 }
239} 255}
240void KNoScrollListBox::keyReleaseEvent(QKeyEvent *e) 256void KNoScrollListBox::keyReleaseEvent(QKeyEvent *e)
241{ 257{
242 switch(e->key()) { 258 switch(e->key()) {
243 case Key_Shift: 259 case Key_Shift:
244 emit shiftUp(); 260 emit shiftUp();
245 break; 261 break;
246 default: 262 default:
247 break; 263 break;
@@ -464,28 +480,29 @@ MonthViewCell::MonthViewCell( KOMonthView *parent,QWidget* par )
464 480
465 enableScrollBars( false ); 481 enableScrollBars( false );
466 updateConfig(); 482 updateConfig();
467 //connect( mLabel, SIGNAL( clicked( )), SLOT( newEvent() )); 483 //connect( mLabel, SIGNAL( clicked( )), SLOT( newEvent() ));
468 connect( mLabel, SIGNAL( clicked( )), SLOT( showDay() )); 484 connect( mLabel, SIGNAL( clicked( )), SLOT( showDay() ));
469 connect( this , SIGNAL( doubleClicked( QListBoxItem *) ), 485 connect( this , SIGNAL( doubleClicked( QListBoxItem *) ),
470 SLOT( defaultAction( QListBoxItem * ) ) ); 486 SLOT( defaultAction( QListBoxItem * ) ) );
471 connect( this, SIGNAL( rightButtonPressed( QListBoxItem *, 487 connect( this, SIGNAL( rightButtonPressed( QListBoxItem *,
472 const QPoint &) ), 488 const QPoint &) ),
473 SLOT( contextMenu( QListBoxItem * ) ) ); 489 SLOT( contextMenu( QListBoxItem * ) ) );
474 connect( this, SIGNAL( highlighted( QListBoxItem *) ), 490 connect( this, SIGNAL( highlighted( QListBoxItem *) ),
475 SLOT( selection( QListBoxItem * ) ) ); 491 SLOT( selection( QListBoxItem * ) ) );
476 connect( this, SIGNAL( clicked( QListBoxItem * ) ), 492
477 SLOT( cellClicked( QListBoxItem * ) ) ); 493 /*
478 connect( this, SIGNAL( clicked( QListBoxItem * ) ), 494 connect( this, SIGNAL( clicked( QListBoxItem * ) ),
479 SLOT( selection( QListBoxItem * ) ) ); 495 SLOT( selection( QListBoxItem * ) ) );
496 */
480} 497}
481#ifdef DESKTOP_VERSION 498#ifdef DESKTOP_VERSION
482QToolTipGroup *MonthViewCell::toolTipGroup() 499QToolTipGroup *MonthViewCell::toolTipGroup()
483{ 500{
484 if (!mToolTipGroup) mToolTipGroup = new QToolTipGroup(0); 501 if (!mToolTipGroup) mToolTipGroup = new QToolTipGroup(0);
485 return mToolTipGroup; 502 return mToolTipGroup;
486} 503}
487#endif 504#endif
488 505
489void MonthViewCell::setDate( const QDate &date ) 506void MonthViewCell::setDate( const QDate &date )
490{ 507{
491 // kdDebug() << "MonthViewCell::setDate(): " << date.toString() << endl; 508 // kdDebug() << "MonthViewCell::setDate(): " << date.toString() << endl;
@@ -980,61 +997,53 @@ void MonthViewCell::resizeEvent ( QResizeEvent * e )
980 size = width() - mLabel->width() -lineWidth()-1; 997 size = width() - mLabel->width() -lineWidth()-1;
981 if ( size > 0 ) 998 if ( size > 0 )
982 horizontalScrollBar()->setMaximumWidth( size ); 999 horizontalScrollBar()->setMaximumWidth( size );
983 mLabel->move( width()-lineWidth() - mLabel->width(), height()-lineWidth() - mLabel->height() ); 1000 mLabel->move( width()-lineWidth() - mLabel->width(), height()-lineWidth() - mLabel->height() );
984 //mLabel->setMaximumWidth( width() - mItemList->lineWidth()*2); 1001 //mLabel->setMaximumWidth( width() - mItemList->lineWidth()*2);
985 // mItemList->resize ( width(), height () ); 1002 // mItemList->resize ( width(), height () );
986 if ( e ) 1003 if ( e )
987 KNoScrollListBox::resizeEvent ( e ); 1004 KNoScrollListBox::resizeEvent ( e );
988} 1005}
989 1006
990void MonthViewCell::defaultAction( QListBoxItem *item ) 1007void MonthViewCell::defaultAction( QListBoxItem *item )
991{ 1008{
1009
992 if ( !item ) { 1010 if ( !item ) {
993 QDateTime dt( date(), QTime( KOPrefs::instance()->mStartTime, 0 ) ); 1011 QDateTime dt( date(), QTime( KOPrefs::instance()->mStartTime, 0 ) );
994 emit newEventSignal( dt ); 1012 emit newEventSignal( dt );
995 return; 1013 return;
996 } 1014 }
997 1015
998 MonthViewItem *eventItem = static_cast<MonthViewItem *>( item ); 1016 MonthViewItem *eventItem = static_cast<MonthViewItem *>( item );
999 Incidence *incidence = eventItem->incidence(); 1017 Incidence *incidence = eventItem->incidence();
1000 if ( incidence ) mMonthView->defaultAction( incidence ); 1018 if ( incidence ) mMonthView->defaultAction( incidence );
1001} 1019}
1002void MonthViewCell::showDay() 1020void MonthViewCell::showDay()
1003{ 1021{
1004 emit showDaySignal( date() ); 1022 emit showDaySignal( date() );
1005} 1023}
1006void MonthViewCell::newEvent() 1024void MonthViewCell::newEvent()
1007{ 1025{
1008 QDateTime dt( date(), QTime( KOPrefs::instance()->mStartTime, 0 ) ); 1026 QDateTime dt( date(), QTime( KOPrefs::instance()->mStartTime, 0 ) );
1009 emit newEventSignal( dt ); 1027 emit newEventSignal( dt );
1010} 1028}
1011void MonthViewCell::cellClicked( QListBoxItem *item ) 1029void MonthViewCell::cellClicked( QListBoxItem *item )
1012{ 1030{
1031 qDebug("CELL ");
1013 if ( item == 0 ) { 1032 if ( item == 0 ) {
1014 QDateTime dt( date(), QTime( KOPrefs::instance()->mStartTime, 0 ) ); 1033 QDateTime dt( date(), QTime( KOPrefs::instance()->mStartTime, 0 ) );
1015 emit newEventSignal( dt ); 1034 emit newEventSignal( dt );
1016 return; 1035 return;
1017 } 1036 }
1018 /* 1037
1019 if ( lastClicked )
1020 if ( ! item ) {
1021 if ( lastClicked->listBox() != item->listBox() )
1022 lastClicked->listBox()->clearSelection();
1023 }
1024 */
1025
1026 mMonthView->setSelectedCell( this );
1027 if( KOPrefs::instance()->mEnableMonthScroll || KOPrefs::instance()->mMonthViewWeek ) enableScrollBars( true );
1028 select();
1029} 1038}
1030 1039
1031void MonthViewCell::contextMenu( QListBoxItem *item ) 1040void MonthViewCell::contextMenu( QListBoxItem *item )
1032{ 1041{
1033 if ( !item ) return; 1042 if ( !item ) return;
1034 1043
1035 MonthViewItem *eventItem = static_cast<MonthViewItem *>( item ); 1044 MonthViewItem *eventItem = static_cast<MonthViewItem *>( item );
1036 Incidence *incidence = eventItem->incidence(); 1045 Incidence *incidence = eventItem->incidence();
1037 if ( incidence ) mMonthView->showContextMenu( incidence ); 1046 if ( incidence ) mMonthView->showContextMenu( incidence );
1038} 1047}
1039 1048
1040void MonthViewCell::selection( QListBoxItem *item ) 1049void MonthViewCell::selection( QListBoxItem *item )
@@ -1142,37 +1151,45 @@ KOMonthView::KOMonthView(Calendar *calendar, QWidget *parent, const char *name)
1142 mCells.resize( mNumCells ); 1151 mCells.resize( mNumCells );
1143 for( row = 0; row < mNumWeeks; ++row ) { 1152 for( row = 0; row < mNumWeeks; ++row ) {
1144 for( col = 0; col < mDaysPerWeek; ++col ) { 1153 for( col = 0; col < mDaysPerWeek; ++col ) {
1145 MonthViewCell *cell = new MonthViewCell( this, mMonthView ); 1154 MonthViewCell *cell = new MonthViewCell( this, mMonthView );
1146 mCells.insert( row * mDaysPerWeek + col, cell ); 1155 mCells.insert( row * mDaysPerWeek + col, cell );
1147 1156
1148 connect( cell, SIGNAL( defaultAction( Incidence * ) ), 1157 connect( cell, SIGNAL( defaultAction( Incidence * ) ),
1149 SLOT( defaultAction( Incidence * ) ) ); 1158 SLOT( defaultAction( Incidence * ) ) );
1150 connect( cell, SIGNAL( newEventSignal( QDateTime ) ), 1159 connect( cell, SIGNAL( newEventSignal( QDateTime ) ),
1151 SIGNAL( newEventSignal( QDateTime ) ) ); 1160 SIGNAL( newEventSignal( QDateTime ) ) );
1152 connect( cell, SIGNAL( showDaySignal( QDate ) ), 1161 connect( cell, SIGNAL( showDaySignal( QDate ) ),
1153 SIGNAL( showDaySignal( QDate ) ) ); 1162 SIGNAL( showDaySignal( QDate ) ) );
1163 connect( cell, SIGNAL( nextCell() ),
1164 SLOT( nextCell() ) );
1165 connect( cell, SIGNAL( prevCell() ),
1166 SLOT( prevCell() ) );
1154 } 1167 }
1155 } 1168 }
1156 mCellsW.resize( mDaysPerWeek ); 1169 mCellsW.resize( mDaysPerWeek );
1157 for( col = 0; col < mDaysPerWeek; ++col ) { 1170 for( col = 0; col < mDaysPerWeek; ++col ) {
1158 MonthViewCell *cell = new MonthViewCell( this, mWeekView ); 1171 MonthViewCell *cell = new MonthViewCell( this, mWeekView );
1159 mCellsW.insert( col, cell ); 1172 mCellsW.insert( col, cell );
1160 1173
1161 connect( cell, SIGNAL( defaultAction( Incidence * ) ), 1174 connect( cell, SIGNAL( defaultAction( Incidence * ) ),
1162 SLOT( defaultAction( Incidence * ) ) ); 1175 SLOT( defaultAction( Incidence * ) ) );
1163 connect( cell, SIGNAL( newEventSignal( QDateTime ) ), 1176 connect( cell, SIGNAL( newEventSignal( QDateTime ) ),
1164 SIGNAL( newEventSignal( QDateTime ) ) ); 1177 SIGNAL( newEventSignal( QDateTime ) ) );
1165 connect( cell, SIGNAL( showDaySignal( QDate ) ), 1178 connect( cell, SIGNAL( showDaySignal( QDate ) ),
1166 SIGNAL( showDaySignal( QDate ) ) ); 1179 SIGNAL( showDaySignal( QDate ) ) );
1180 connect( cell, SIGNAL( nextCell() ),
1181 SLOT( nextCell() ) );
1182 connect( cell, SIGNAL( prevCell() ),
1183 SLOT( prevCell() ) );
1167 cell->updateConfig(KOPrefs::instance()->mMonthViewUsesBigFont ); 1184 cell->updateConfig(KOPrefs::instance()->mMonthViewUsesBigFont );
1168 } 1185 }
1169 1186
1170 //connect( mWeekLabels[mNumWeeks], SIGNAL( clicked() ), SLOT( switchView() ) ); 1187 //connect( mWeekLabels[mNumWeeks], SIGNAL( clicked() ), SLOT( switchView() ) );
1171 mContextMenu = eventPopup(); 1188 mContextMenu = eventPopup();
1172 // updateConfig(); //useless here... 1189 // updateConfig(); //useless here...
1173 // ... but we need mWidthLongDayLabel computed 1190 // ... but we need mWidthLongDayLabel computed
1174 QFontMetrics fontmetric(mDayLabels[0]->font()); 1191 QFontMetrics fontmetric(mDayLabels[0]->font());
1175 mWidthLongDayLabel = 0; 1192 mWidthLongDayLabel = 0;
1176 for (int i = 0; i < 7; i++) { 1193 for (int i = 0; i < 7; i++) {
1177 int width = fontmetric.width(KOGlobals::self()->calendarSystem()->weekDayName(i+1)); 1194 int width = fontmetric.width(KOGlobals::self()->calendarSystem()->weekDayName(i+1));
1178 if ( width > mWidthLongDayLabel ) mWidthLongDayLabel = width; 1195 if ( width > mWidthLongDayLabel ) mWidthLongDayLabel = width;
@@ -1965,12 +1982,21 @@ void KOMonthView::keyPressEvent ( QKeyEvent * e )
1965 if ( mSelectedCell ) { 1982 if ( mSelectedCell ) {
1966 mSelectedCell->showDay(); 1983 mSelectedCell->showDay();
1967 e->accept(); 1984 e->accept();
1968 } else { 1985 } else {
1969 e->ignore(); 1986 e->ignore();
1970 } 1987 }
1971 break; 1988 break;
1972 default: 1989 default:
1973 e->ignore(); 1990 e->ignore();
1974 break; 1991 break;
1975 } 1992 }
1976} 1993}
1994
1995void KOMonthView::nextCell()
1996{
1997 bool res = focusNextPrevChild ( true );
1998}
1999void KOMonthView::prevCell()
2000{
2001 focusNextPrevChild ( false );
2002}