-rw-r--r-- | bin/kdepim/WhatsNew.txt | 2 | ||||
-rw-r--r-- | korganizer/komonthview.cpp | 207 | ||||
-rw-r--r-- | korganizer/komonthview.h | 10 |
3 files changed, 168 insertions, 51 deletions
diff --git a/bin/kdepim/WhatsNew.txt b/bin/kdepim/WhatsNew.txt index e24ee43..3ba0841 100644 --- a/bin/kdepim/WhatsNew.txt +++ b/bin/kdepim/WhatsNew.txt @@ -11,4 +11,6 @@ Added to the event/todo viewer the option to send an email to all attendees or all selected (with RSVP) attendees. +Made the week-month mode changing in month view faster. + ********** VERSION 2.0.2 ************ diff --git a/korganizer/komonthview.cpp b/korganizer/komonthview.cpp index 9c1e4c3..daa37fd 100644 --- a/korganizer/komonthview.cpp +++ b/korganizer/komonthview.cpp @@ -24,4 +24,5 @@ #include <qhbox.h> #include <qvbox.h> +#include <qwidgetstack.h> #include <qpushbutton.h> #include <qtooltip.h> @@ -269,6 +270,6 @@ int MonthViewItem::width(const QListBox *lb) const -MonthViewCell::MonthViewCell( KOMonthView *parent) - : QWidget( parent ), +MonthViewCell::MonthViewCell( KOMonthView *parent,QWidget* par ) + : QWidget( par ), mMonthView( parent ) { @@ -767,4 +768,18 @@ KOMonthView::KOMonthView(Calendar *calendar, QWidget *parent, const char *name) mShortDayLabels( false ), mWidthLongDayLabel( 0 ), mSelectedCell( 0 ) { + + clPending = true; + mWidStack = new QWidgetStack( this ); + QHBoxLayout* hb = new QHBoxLayout( this ); + mMonthView = new QWidget( mWidStack ); + mWeekView = new QWidget( mWidStack ); +#if QT_VERSION >= 0x030000 + mWidStack->addWidget(mMonthView ); + mWidStack->addWidget(mWeekView ); +#else + mWidStack->addWidget( mMonthView, 1 ); + mWidStack->addWidget( mWeekView , 1 ); +#endif + hb->addWidget( mWidStack ); mWeekStartsMonday = KGlobal::locale()->weekStartsMonday(); mShowWeekView = KOPrefs::instance()->mMonthViewWeek; @@ -774,8 +789,6 @@ KOMonthView::KOMonthView(Calendar *calendar, QWidget *parent, const char *name) mCells.setAutoDelete( true ); mShowSatSunComp = KOPrefs::instance()->mMonthViewSatSunTog ; - // mDayLayout = new QGridLayout( this ); - // create the day of the week labels (Sun, Mon, etc) and add them to - // the layout. mDayLabels.resize( mDaysPerWeek ); + mDayLabelsW.resize( mDaysPerWeek ); QFont bfont = font(); if ( QApplication::desktop()->width() < 650 ) { @@ -786,5 +799,5 @@ KOMonthView::KOMonthView(Calendar *calendar, QWidget *parent, const char *name) for( i = 0; i < mDaysPerWeek; i++ ) { - QLabel *label = new QLabel( this ); + QLabel *label = new QLabel( mMonthView ); label->setFont(bfont); label->setFrameStyle(QFrame::Panel|QFrame::Raised); @@ -792,10 +805,17 @@ KOMonthView::KOMonthView(Calendar *calendar, QWidget *parent, const char *name) label->setAlignment(AlignCenter); mDayLabels.insert( i, label ); + label = new QLabel( mWeekView ); + label->setFont(bfont); + label->setFrameStyle(QFrame::Panel|QFrame::Raised); + label->setLineWidth(1); + label->setAlignment(AlignCenter); + mDayLabelsW.insert( i, label ); } bfont.setBold( false ); mWeekLabels.resize( mNumWeeks+1 ); + mWeekLabelsW.resize( 2 ); for( i = 0; i < mNumWeeks+1; i++ ) { - KOWeekButton *label = new KOWeekButton( this ); + KOWeekButton *label = new KOWeekButton( mMonthView ); label->setFont(bfont); connect( label, SIGNAL( selectWeekNum ( int )),this, SLOT( selectInternalWeekNum ( int )) ); @@ -807,11 +827,26 @@ KOMonthView::KOMonthView(Calendar *calendar, QWidget *parent, const char *name) mWeekLabels.insert( i, label ); } - mWeekLabels[mNumWeeks]->setText( i18n("")); + mWeekLabels[mNumWeeks]->setText( i18n("W")); QWhatsThis::add(mWeekLabels[mNumWeeks],i18n("Click on this to\nselect week number")); + + for( i = 0; i < 1+1; i++ ) { + KOWeekButton *label = new KOWeekButton( mWeekView ); + label->setFont(bfont); + connect( label, SIGNAL( selectWeekNum ( int )),this, SLOT( selectInternalWeekNum ( int )) ); + label->setFlat(true); + QWhatsThis::add(label,i18n("Click on the week number to\nshow week zoomed")); + //label->setFrameStyle(QFrame::Panel|QFrame::Raised); + //label->setLineWidth(1); + //label->setAlignment(AlignCenter); + mWeekLabelsW.insert( i, label ); + } + mWeekLabelsW[1]->setText( i18n("W")); + + int row, col; mCells.resize( mNumCells ); for( row = 0; row < mNumWeeks; ++row ) { for( col = 0; col < mDaysPerWeek; ++col ) { - MonthViewCell *cell = new MonthViewCell( this ); + MonthViewCell *cell = new MonthViewCell( this, mMonthView ); mCells.insert( row * mDaysPerWeek + col, cell ); @@ -824,4 +859,16 @@ KOMonthView::KOMonthView(Calendar *calendar, QWidget *parent, const char *name) } } + mCellsW.resize( mDaysPerWeek ); + for( col = 0; col < mDaysPerWeek; ++col ) { + MonthViewCell *cell = new MonthViewCell( this, mWeekView ); + mCellsW.insert( col, cell ); + + connect( cell, SIGNAL( defaultAction( Incidence * ) ), + SLOT( defaultAction( Incidence * ) ) ); + connect( cell, SIGNAL( newEventSignal( QDateTime ) ), + SIGNAL( newEventSignal( QDateTime ) ) ); + connect( cell, SIGNAL( showDaySignal( QDate ) ), + SIGNAL( showDaySignal( QDate ) ) ); + } //connect( mWeekLabels[mNumWeeks], SIGNAL( clicked() ), SLOT( switchView() ) ); @@ -829,5 +876,15 @@ KOMonthView::KOMonthView(Calendar *calendar, QWidget *parent, const char *name) // updateConfig(); //useless here - mWeekLabels[mNumWeeks]->setText( i18n("W")); + //mWeekLabels[mNumWeeks]->setText( i18n("W")); +#if 0 + mWidStack = new QWidgetStack( this ); + mMonthView = new QWidget( mWidStack ); + mWeekView = new QWidget( mWidStack ); +#endif + if ( mShowWeekView ) + mWidStack->raiseWidget( mWeekView ); + else + mWidStack->raiseWidget( mMonthView ); + emit incidenceSelected( 0 ); } @@ -843,10 +900,11 @@ void KOMonthView::selectDateWeekNum ( int ) void KOMonthView::selectInternalWeekNum ( int n ) { - emit selectWeekNum ( n ); switchView(); + emit selectWeekNum ( n ); } void KOMonthView::switchView() { + if ( selectedCell( ) ) selectedCell()->deselect(); @@ -854,6 +912,13 @@ void KOMonthView::switchView() KOPrefs::instance()->mMonthViewWeek = mShowWeekView; //emit showNavigator( !mShowWeekView ); - computeLayout(); - updateConfig(); + if ( clPending ) { + computeLayout(); + updateConfig(); + } + if ( mShowWeekView ) + mWidStack->raiseWidget( mWeekView ); + else + mWidStack->raiseWidget( mMonthView ); + clPending = false; } @@ -907,5 +972,5 @@ void KOMonthView::updateConfig() if ( mShowWeekView ) { mWeekStartsMonday = true; - } + } QFontMetrics fontmetric(mDayLabels[0]->font()); mWidthLongDayLabel = 0; @@ -937,16 +1002,39 @@ void KOMonthView::updateDayLabels() { + QPtrVector<QLabel> *mDayLabelsT; +#if 0 + if (mShowWeekView ) + mDayLabelsT = &mDayLabelsW; + else + mDayLabelsT = &mDayLabels; +#endif + + mDayLabelsT = &mDayLabelsW; + for (int i = 0; i < 7; i++) { + if (mWeekStartsMonday) { + bool show = mShortDayLabels; + if ( i > 4 && mShowSatSunComp && mWidthLongDayLabel > (*mDayLabelsT)[i]->width() ) + show = true; + (*mDayLabelsT)[i]->setText(KOGlobals::self()->calendarSystem()->weekDayName(i+1,show)); + } else { + if (i==0) (*mDayLabelsT)[i]->setText(KOGlobals::self()->calendarSystem()->weekDayName(7,mShortDayLabels)); + else (*mDayLabelsT)[i]->setText(KOGlobals::self()->calendarSystem()->weekDayName(i,mShortDayLabels)); + + } + } + mDayLabelsT = &mDayLabels; for (int i = 0; i < 7; i++) { if (mWeekStartsMonday) { bool show = mShortDayLabels; - if ( i > 4 && mShowSatSunComp && mWidthLongDayLabel > mDayLabels[i]->width() ) + if ( i > 4 && mShowSatSunComp && mWidthLongDayLabel > (*mDayLabelsT)[i]->width() ) show = true; - mDayLabels[i]->setText(KOGlobals::self()->calendarSystem()->weekDayName(i+1,show)); + (*mDayLabelsT)[i]->setText(KOGlobals::self()->calendarSystem()->weekDayName(i+1,show)); } else { - if (i==0) mDayLabels[i]->setText(KOGlobals::self()->calendarSystem()->weekDayName(7,mShortDayLabels)); - else mDayLabels[i]->setText(KOGlobals::self()->calendarSystem()->weekDayName(i,mShortDayLabels)); + if (i==0) (*mDayLabelsT)[i]->setText(KOGlobals::self()->calendarSystem()->weekDayName(7,mShortDayLabels)); + else (*mDayLabelsT)[i]->setText(KOGlobals::self()->calendarSystem()->weekDayName(i,mShortDayLabels)); } } + } @@ -955,4 +1043,18 @@ void KOMonthView::showDates(const QDate &start, const QDate &) // kdDebug() << "KOMonthView::showDates(): " << start.toString() << endl; + QPtrVector<MonthViewCell> *cells; + QPtrVector<QLabel> *dayLabels; + QPtrVector<KOWeekButton> *weekLabels; + int weekNum = 6; + if ( mShowWeekView ) { + weekNum = 1; + cells = &mCellsW; + dayLabels = &mDayLabelsW; + weekLabels = &mWeekLabelsW; + } else { + cells = &mCells; + dayLabels = &mDayLabels; + weekLabels = &mWeekLabels; + } mStartDate = start; @@ -966,17 +1068,17 @@ void KOMonthView::showDates(const QDate &start, const QDate &) bool primary = false; uint i; - for( i = 0; i < mCells.size(); ++i ) { + for( i = 0; i < (*cells).size(); ++i ) { QDate date = mStartDate.addDays( i ); - mCells[i]->setDate( date ); + (*cells)[i]->setDate( date ); #ifndef KORG_NOPLUGINS // add holiday, if present QString hstring(KOCore::self()->holiday(date)); - mCells[i]->setHoliday( hstring ); + (*cells)[i]->setHoliday( hstring ); #endif } QDate date = mStartDate.addDays( mWeekStartsMonday ? 3 : 4 ); - for( i = 0; i < 6; ++i ) { + for( i = 0; i < weekNum; ++i ) { int wno; // remember, according to ISO 8601, the first week of the year is the @@ -988,5 +1090,5 @@ void KOMonthView::showDates(const QDate &start, const QDate &) else wno =dayOfYear / 7; - mWeekLabels[i]->setWeekNum( wno ); + (*weekLabels)[i]->setWeekNum( wno ); date = date.addDays( 7 ); } @@ -1013,11 +1115,17 @@ void KOMonthView::updateView() //QTime ti; //ti.start(); + QPtrVector<MonthViewCell> *cells; + if ( mShowWeekView ) { + cells = &mCellsW; + } else { + cells = &mCells; + } #if 1 int i; - int timeSpan = mCells.size()-1; + int timeSpan = (*cells).size()-1; if ( KOPrefs::instance()->mMonthViewWeek ) timeSpan = 6; for( i = 0; i < timeSpan + 1; ++i ) { - mCells[i]->startUpdateCell(); + (*cells)[i]->startUpdateCell(); } @@ -1048,5 +1156,5 @@ void KOMonthView::updateView() //qDebug("found %s %d %d ",event->summary().latin1(), st, end ); for ( iii = st;iii<= end;++iii) - mCells[iii]->insertEvent( event ); + (*cells)[iii]->insertEvent( event ); } } @@ -1078,5 +1186,5 @@ void KOMonthView::updateView() int iii; for ( iii = st;iii<= end;++iii) - mCells[iii]->insertEvent( event ); + (*cells)[iii]->insertEvent( event ); } } @@ -1091,5 +1199,5 @@ void KOMonthView::updateView() int day = mStartDate.daysTo( todo->dtDue().date() ); if ( day >= 0 && day < timeSpan + 1) { - mCells[day]->insertTodo( todo ); + (*cells)[day]->insertTodo( todo ); } } @@ -1097,8 +1205,8 @@ void KOMonthView::updateView() for( i = 0; i < timeSpan+1; ++i ) { - mCells[i]->finishUpdateCell(); + (*cells)[i]->finishUpdateCell(); } processSelectionChange(); - mCells[0]->setFocus(); + (*cells)[0]->setFocus(); @@ -1107,6 +1215,6 @@ void KOMonthView::updateView() //qDebug("+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ "); int i; - for( i = 0; i < mCells.count(); ++i ) { - mCells[i]->updateCell(); + for( i = 0; i < (*cells).count(); ++i ) { + (*cells)[i]->updateCell(); } @@ -1114,5 +1222,5 @@ void KOMonthView::updateView() processSelectionChange(); // qDebug("---------------------------------------------------------------------+ "); - mCells[0]->setFocus(); + (*cells)[0]->setFocus(); #endif @@ -1123,5 +1231,9 @@ void KOMonthView::resizeEvent(QResizeEvent * e) { computeLayout(); - mCells[0]->setFocus(); + clPending = true; + if ( mShowWeekView ) + mCellsW[0]->setFocus(); + else + mCells[0]->setFocus(); } void KOMonthView::computeLayoutWeek() @@ -1157,5 +1269,5 @@ void KOMonthView::computeLayoutWeek() int colWid = wid / daysToShow; int lastCol = wid - ( colWid*6 ); - int dayLabelHei = mDayLabels[0]->sizeHint().height(); + int dayLabelHei = mDayLabelsW[0]->sizeHint().height(); int cellHei = (hei - (5- daysToShow )*dayLabelHei) /(5- daysToShow ); int colModulo = wid % daysToShow; @@ -1178,9 +1290,9 @@ void KOMonthView::computeLayoutWeek() } if ( i >= 5 ) { - mDayLabels[i]->setGeometry( x+weeklabelwid,y,w/2+w%2,h); + mDayLabelsW[i]->setGeometry( x+weeklabelwid,y,w/2+w%2,h); x -= (w/2 ); } else - mDayLabels[i]->setGeometry( x+weeklabelwid,y,w,h); + mDayLabelsW[i]->setGeometry( x+weeklabelwid,y,w,h); x += w; } @@ -1189,7 +1301,7 @@ void KOMonthView::computeLayoutWeek() w = colWid; h = cellHei; - for ( i = 0; i < mCells.count(); ++i) { + for ( i = 0; i < mCellsW.count(); ++i) { if ( i > 6 ) { - mCells[i]->hide(); + mCellsW[i]->hide(); continue; } @@ -1204,5 +1316,5 @@ void KOMonthView::computeLayoutWeek() if ( i >= 5 ) { if ( i ==5 ) { - mCells[i]->setGeometry ( x+weeklabelwid,y,w,h/2 ); + mCellsW[i]->setGeometry ( x+weeklabelwid,y,w,h/2 ); x -= w ;y += h/2; } else { @@ -1210,9 +1322,9 @@ void KOMonthView::computeLayoutWeek() ++w; } - mCells[i]->setGeometry ( x+weeklabelwid,y,w,h-h/2 ); + mCellsW[i]->setGeometry ( x+weeklabelwid,y,w,h-h/2 ); y -= h/2; } } else - mCells[i]->setGeometry ( x+weeklabelwid,y,w,h ); + mCellsW[i]->setGeometry ( x+weeklabelwid,y,w,h ); @@ -1225,12 +1337,9 @@ void KOMonthView::computeLayoutWeek() y= dayLabelHei; h = cellHei ; - mWeekLabels[0]->setGeometry( 0,y,weeklabelwid,hei-dayLabelHei); - for ( i = 1; i < 6; i++) { - mWeekLabels[i]->hide(); - } - mWeekLabels[6]->setGeometry( 0,0,weeklabelwid,dayLabelHei); + mWeekLabelsW[0]->setGeometry( 0,y,weeklabelwid,hei-dayLabelHei); + mWeekLabelsW[1]->setGeometry( 0,0,weeklabelwid,dayLabelHei); // qDebug("RRRRRRRRRRRRR %d %d old %d %d", e->size().width(),e->size().height() , e->oldSize().width(),e->oldSize().height()); //qDebug("parent %d %d ", topLevelWidget()->size().width(), topLevelWidget()->size().height()); - mShortDayLabels = mDayLabels[0]->width() < mWidthLongDayLabel ; + mShortDayLabels = mDayLabelsW[0]->width() < mWidthLongDayLabel ; updateDayLabels(); bool forceUpdate = !updatePossible; @@ -1301,5 +1410,4 @@ void KOMonthView::computeLayout() h = cellHei ; for ( i = 0; i < mCells.count(); ++i) { - mCells[i]->show(); w = colWid; if ( ((i) % 7) >= 7-colModulo ) { @@ -1332,5 +1440,4 @@ void KOMonthView::computeLayout() h = cellHei ; for ( i = 0; i < 6; i++) { - mWeekLabels[i]->show(); if ( i == (6-rowModulo)) ++h; diff --git a/korganizer/komonthview.h b/korganizer/komonthview.h index 1ed200b..b89b2bc 100644 --- a/korganizer/komonthview.h +++ b/korganizer/komonthview.h @@ -26,4 +26,5 @@ #include <qlistbox.h> #include <qpoint.h> +#include <qwidgetstack.h> #include <qlayout.h> #include <qintdict.h> @@ -126,5 +127,5 @@ class MonthViewCell : public QWidget Q_OBJECT public: - MonthViewCell( KOMonthView * ); + MonthViewCell(KOMonthView *,QWidget* ); void setDate( const QDate & ); @@ -257,4 +258,8 @@ class KOMonthView: public KOEventView private: + bool clPending; + QWidgetStack * mWidStack; + QWidget* mMonthView; + QWidget* mWeekView; bool mShowWeekView; bool updatePossible; @@ -270,4 +275,7 @@ class KOMonthView: public KOEventView QPtrVector<QLabel> mDayLabels; QPtrVector<KOWeekButton> mWeekLabels; + QPtrVector<MonthViewCell> mCellsW; + QPtrVector<QLabel> mDayLabelsW; + QPtrVector<KOWeekButton> mWeekLabelsW; bool mShortDayLabels; |