summaryrefslogtreecommitdiffabout
Side-by-side diff
Diffstat (more/less context) (ignore whitespace changes)
-rw-r--r--bin/kdepim/WhatsNew.txt2
-rw-r--r--korganizer/komonthview.cpp207
-rw-r--r--korganizer/komonthview.h10
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
@@ -10,6 +10,8 @@ the popup menu: Set alarm for selected...
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 ************
KO/Pi:
diff --git a/korganizer/komonthview.cpp b/korganizer/komonthview.cpp
index 9c1e4c3..daa37fd 100644
--- a/korganizer/komonthview.cpp
+++ b/korganizer/komonthview.cpp
@@ -23,6 +23,7 @@
#include <qkeycode.h>
#include <qhbox.h>
#include <qvbox.h>
+#include <qwidgetstack.h>
#include <qpushbutton.h>
#include <qtooltip.h>
#include <qpainter.h>
@@ -268,8 +269,8 @@ int MonthViewItem::width(const QListBox *lb) const
}
-MonthViewCell::MonthViewCell( KOMonthView *parent)
- : QWidget( parent ),
+MonthViewCell::MonthViewCell( KOMonthView *parent,QWidget* par )
+ : QWidget( par ),
mMonthView( parent )
{
@@ -766,6 +767,20 @@ KOMonthView::KOMonthView(Calendar *calendar, QWidget *parent, const char *name)
mDaysPerWeek( 7 ), mNumWeeks( 6 ), mNumCells( mDaysPerWeek * mNumWeeks ),
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;
if ( mShowWeekView )
@@ -773,10 +788,8 @@ KOMonthView::KOMonthView(Calendar *calendar, QWidget *parent, const char *name)
updatePossible = false;
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 ) {
bfont.setPointSize( bfont.pointSize() - 2 );
@@ -785,18 +798,25 @@ KOMonthView::KOMonthView(Calendar *calendar, QWidget *parent, const char *name)
int i;
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);
label->setLineWidth(1);
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 )) );
label->setFlat(true);
@@ -806,13 +826,28 @@ KOMonthView::KOMonthView(Calendar *calendar, QWidget *parent, const char *name)
//label->setAlignment(AlignCenter);
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 );
connect( cell, SIGNAL( defaultAction( Incidence * ) ),
@@ -823,12 +858,34 @@ KOMonthView::KOMonthView(Calendar *calendar, QWidget *parent, const char *name)
SIGNAL( showDaySignal( QDate ) ) );
}
}
+ 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() ) );
mContextMenu = eventPopup();
// 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 );
}
@@ -842,19 +899,27 @@ void KOMonthView::selectDateWeekNum ( int )
}
void KOMonthView::selectInternalWeekNum ( int n )
{
- emit selectWeekNum ( n );
switchView();
+ emit selectWeekNum ( n );
}
void KOMonthView::switchView()
{
+
if ( selectedCell( ) )
selectedCell()->deselect();
mShowWeekView = !mShowWeekView;
KOPrefs::instance()->mMonthViewWeek = mShowWeekView;
//emit showNavigator( !mShowWeekView );
- computeLayout();
- updateConfig();
+ if ( clPending ) {
+ computeLayout();
+ updateConfig();
+ }
+ if ( mShowWeekView )
+ mWidStack->raiseWidget( mWeekView );
+ else
+ mWidStack->raiseWidget( mMonthView );
+ clPending = false;
}
int KOMonthView::maxDatesHint()
@@ -906,7 +971,7 @@ void KOMonthView::updateConfig()
if ( mShowWeekView ) {
mWeekStartsMonday = true;
- }
+ }
QFontMetrics fontmetric(mDayLabels[0]->font());
mWidthLongDayLabel = 0;
@@ -936,24 +1001,61 @@ void KOMonthView::updateConfig()
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));
}
}
+
}
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;
@@ -965,19 +1067,19 @@ 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
// first week that contains a thursday. Thus we must subtract off 4,
@@ -987,7 +1089,7 @@ void KOMonthView::showDates(const QDate &start, const QDate &)
wno = dayOfYear / 7 + 1;
else
wno =dayOfYear / 7;
- mWeekLabels[i]->setWeekNum( wno );
+ (*weekLabels)[i]->setWeekNum( wno );
date = date.addDays( 7 );
}
updateView();
@@ -1012,13 +1114,19 @@ void KOMonthView::updateView()
return;
//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();
}
QPtrList<Event> events = calendar()->events();
@@ -1047,7 +1155,7 @@ void KOMonthView::updateView()
int iii;
//qDebug("found %s %d %d ",event->summary().latin1(), st, end );
for ( iii = st;iii<= end;++iii)
- mCells[iii]->insertEvent( event );
+ (*cells)[iii]->insertEvent( event );
}
}
} else {
@@ -1077,7 +1185,7 @@ void KOMonthView::updateView()
if ( end > timeSpan ) end = timeSpan;
int iii;
for ( iii = st;iii<= end;++iii)
- mCells[iii]->insertEvent( event );
+ (*cells)[iii]->insertEvent( event );
}
}
}
@@ -1090,30 +1198,30 @@ void KOMonthView::updateView()
if ( todo->hasDueDate() ) {
int day = mStartDate.daysTo( todo->dtDue().date() );
if ( day >= 0 && day < timeSpan + 1) {
- mCells[day]->insertTodo( todo );
+ (*cells)[day]->insertTodo( todo );
}
}
}
for( i = 0; i < timeSpan+1; ++i ) {
- mCells[i]->finishUpdateCell();
+ (*cells)[i]->finishUpdateCell();
}
processSelectionChange();
- mCells[0]->setFocus();
+ (*cells)[0]->setFocus();
#else
// old code
//qDebug("+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ ");
int i;
- for( i = 0; i < mCells.count(); ++i ) {
- mCells[i]->updateCell();
+ for( i = 0; i < (*cells).count(); ++i ) {
+ (*cells)[i]->updateCell();
}
//qDebug("KOMonthView::updateView() ");
processSelectionChange();
// qDebug("---------------------------------------------------------------------+ ");
- mCells[0]->setFocus();
+ (*cells)[0]->setFocus();
#endif
//qDebug("update time %d ", ti.elapsed());
@@ -1122,7 +1230,11 @@ void KOMonthView::updateView()
void KOMonthView::resizeEvent(QResizeEvent * e)
{
computeLayout();
- mCells[0]->setFocus();
+ clPending = true;
+ if ( mShowWeekView )
+ mCellsW[0]->setFocus();
+ else
+ mCells[0]->setFocus();
}
void KOMonthView::computeLayoutWeek()
{
@@ -1156,7 +1268,7 @@ 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;
int rowModulo = (hei- (5- daysToShow )*dayLabelHei) % daysToShow-1;
@@ -1177,20 +1289,20 @@ void KOMonthView::computeLayoutWeek()
++w;
}
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;
}
x= 0;
y= dayLabelHei;
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;
}
@@ -1203,17 +1315,17 @@ 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 {
if ( ((i-1) % daysToShow) >= daysToShow-colModulo ) {
++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 );
x += w;
@@ -1224,14 +1336,11 @@ 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;
updatePossible = true;
@@ -1300,7 +1409,6 @@ void KOMonthView::computeLayout()
w = colWid;
h = cellHei ;
for ( i = 0; i < mCells.count(); ++i) {
- mCells[i]->show();
w = colWid;
if ( ((i) % 7) >= 7-colModulo ) {
++w;
@@ -1331,7 +1439,6 @@ void KOMonthView::computeLayout()
y= dayLabelHei;
h = cellHei ;
for ( i = 0; i < 6; i++) {
- mWeekLabels[i]->show();
if ( i == (6-rowModulo))
++h;
mWeekLabels[i]->setGeometry( 0,y,weeklabelwid,h);
diff --git a/korganizer/komonthview.h b/korganizer/komonthview.h
index 1ed200b..b89b2bc 100644
--- a/korganizer/komonthview.h
+++ b/korganizer/komonthview.h
@@ -25,6 +25,7 @@
#include <qdatetime.h>
#include <qlistbox.h>
#include <qpoint.h>
+#include <qwidgetstack.h>
#include <qlayout.h>
#include <qintdict.h>
#include <qpushbutton.h>
@@ -125,7 +126,7 @@ class MonthViewCell : public QWidget
{
Q_OBJECT
public:
- MonthViewCell( KOMonthView * );
+ MonthViewCell(KOMonthView *,QWidget* );
void setDate( const QDate & );
QDate date() const;
@@ -256,6 +257,10 @@ class KOMonthView: public KOEventView
void updateDayLabels();
private:
+ bool clPending;
+ QWidgetStack * mWidStack;
+ QWidget* mMonthView;
+ QWidget* mWeekView;
bool mShowWeekView;
bool updatePossible;
int mDaysPerWeek;
@@ -269,6 +274,9 @@ class KOMonthView: public KOEventView
QPtrVector<MonthViewCell> mCells;
QPtrVector<QLabel> mDayLabels;
QPtrVector<KOWeekButton> mWeekLabels;
+ QPtrVector<MonthViewCell> mCellsW;
+ QPtrVector<QLabel> mDayLabelsW;
+ QPtrVector<KOWeekButton> mWeekLabelsW;
bool mShortDayLabels;
int mWidthLongDayLabel;