-rw-r--r-- | korganizer/komonthview.cpp | 116 | ||||
-rw-r--r-- | korganizer/komonthview.h | 13 |
2 files changed, 122 insertions, 7 deletions
diff --git a/korganizer/komonthview.cpp b/korganizer/komonthview.cpp index cba85fa..9b0389d 100644 --- a/korganizer/komonthview.cpp +++ b/korganizer/komonthview.cpp @@ -141,8 +141,9 @@ void KNoScrollListBox::focusOutEvent ( QFocusEvent * e ) } QListBox::focusOutEvent ( e ); setVScrollBarMode(QScrollView::AlwaysOff); setHScrollBarMode(QScrollView::AlwaysOff); + emit highligtIncidence( 0, (MonthViewCell*)this, 0 ); } QString KNoScrollListBox::getWhatsThisText(QPoint p) { @@ -279,8 +280,9 @@ void KNoScrollListBox::mousePressEvent(QMouseEvent *e) MonthViewItem::MonthViewItem( Incidence *incidence, QDate qd, const QString & s) : QListBoxItem() { + mDisplayHightlighted = false; mblockRepaint = true; setText( s ); mMultiday = 0; mIncidence = incidence; @@ -293,8 +295,9 @@ MonthViewItem::MonthViewItem( Incidence *incidence, QDate qd, const QString & s) isWeekItem = KOPrefs::instance()->mMonthViewWeek; } void MonthViewItem::recycle( Incidence *incidence, QDate qd, const QString & s) { + mDisplayHightlighted = false; setText( s ); mMultiday = 0; mIncidence = incidence; mDate = qd; @@ -303,9 +306,31 @@ void MonthViewItem::recycle( Incidence *incidence, QDate qd, const QString & s) mReply = false; mInfo = false; mdayPos = 0; } +bool MonthViewItem::setHighlightedFalse() +{ + if ( !mDisplayHightlighted ) + return false; + mDisplayHightlighted = false; + return true; +} +bool MonthViewItem::setHighlighted( Incidence * inc ) +{ + if ( inc == mIncidence ) { + if ( mDisplayHightlighted ) + return false; + mDisplayHightlighted = true; + return true; + } else { + if ( !mDisplayHightlighted ) + return false; + mDisplayHightlighted = false; + return true; + } + return false; +} void MonthViewItem::paint(QPainter *p) { if ( mblockRepaint ) { return; @@ -316,10 +341,12 @@ void MonthViewItem::paint(QPainter *p) bool sel = selected(); #endif int heihei = height( listBox () ); int x = 1; - if (KOPrefs::instance()->mMonthViewUsesCategoryColor) + if (KOPrefs::instance()->mMonthViewUsesCategoryColor || mDisplayHightlighted ) { + if ( mDisplayHightlighted ) + sel = true; p->setBackgroundColor( palette().color( QPalette::Normal, \ sel ? QColorGroup::Highlight : QColorGroup::Background ) ); p->eraseRect( 0, 0, listBox()->maxItemWidth(), heihei ); } @@ -599,8 +626,9 @@ void MonthViewCell::setHoliday( const QString &holiday ) } void MonthViewCell::startUpdateCell() { + mdayCount = 0; setFocusPolicy(NoFocus); if ( !mMonthView->isUpdatePossible() ) return; @@ -1082,14 +1110,41 @@ void MonthViewCell::contextMenu( QListBoxItem *item ) } void MonthViewCell::selection( QListBoxItem *item ) { - if ( !item ) return; - + if ( !item ) { + emit highligtIncidence( 0 , this, 0 ); + return; + } + MonthViewItem * it = (static_cast<MonthViewItem *>( item )); + emit highligtIncidence( it->incidence(), this, it->multiDay() ); mMonthView->setSelectedCell( this ); } +void MonthViewCell::deHightLight() +{ + MonthViewItem *mitem = (MonthViewItem*) firstItem (); + while ( mitem ) { + if ( mitem->setHighlightedFalse() ) + updateItem ( mitem ); + mitem = (MonthViewItem *)mitem->next(); + } +} +// returns true if no inc found +bool MonthViewCell::doHightLight( Incidence * inc ) +{ + MonthViewItem *mitem = (MonthViewItem*) firstItem (); + while ( mitem ) { + if ( mitem->incidence() == inc ) { + if ( mitem->setHighlighted( inc ) ) + updateItem ( mitem ); + return false; + } + mitem = (MonthViewItem *)mitem->next(); + } + return true; +} // ******************************************************************************* // ******************************************************************************* // ******************************************************************************* @@ -1199,8 +1254,10 @@ KOMonthView::KOMonthView(Calendar *calendar, QWidget *parent, const char *name) connect( cell, SIGNAL( nextCell() ), SLOT( nextCell() ) ); connect( cell, SIGNAL( prevCell() ), SLOT( prevCell() ) ); + connect( cell, SIGNAL( highligtIncidence( Incidence * , MonthViewCell *, int ) ), + SLOT( incidenceHighlighted( Incidence *, MonthViewCell *, int ) )); } } mCellsW.resize( mDaysPerWeek ); for( col = 0; col < mDaysPerWeek; ++col ) { @@ -1216,8 +1273,10 @@ KOMonthView::KOMonthView(Calendar *calendar, QWidget *parent, const char *name) connect( cell, SIGNAL( nextCell() ), SLOT( nextCell() ) ); connect( cell, SIGNAL( prevCell() ), SLOT( prevCell() ) ); + connect( cell, SIGNAL( highligtIncidence( Incidence * , MonthViewCell *, int ) ), + SLOT( incidenceHighlighted( Incidence *, MonthViewCell *, int ) )); cell->updateConfig(KOPrefs::instance()->mMonthViewUsesBigFont ); } //connect( mWeekLabels[mNumWeeks], SIGNAL( clicked() ), SLOT( switchView() ) ); @@ -1287,8 +1346,59 @@ KOMonthView::~KOMonthView() { delete mContextMenu; } +void KOMonthView::incidenceHighlighted( Incidence * inc , MonthViewCell* mc, int mday ) +{ + //qDebug("KOMonthView::incidenceHighlighted %d %d %d", inc, mc, mday ); + static Incidence * lastInc = 0; + static MonthViewCell * lastCell = 0; + + if ( lastInc == inc && lastCell == mc ) + return; + lastInc = inc; + lastCell = mc; + //qDebug("KOMonthView::incidenceHighlighted %d %d %d", inc, mc, mday ); + + bool weekview = false; + int index = 0; + for (uint i = 0; i < mCellsW.count(); ++i) { + if ( mCellsW[i] == mc ) { + weekview = true; + index = i; + break; + } + } + QPtrVector<MonthViewCell> *cells; + if ( weekview ) + cells = &mCellsW; + else { + for (uint i = 0; i < mCells.count(); ++i) { + if ( mCells[i] == mc ) { + index = i; + break; + } + } + cells = &mCells; + } + for (uint i = 0; i < (*cells).count(); ++i) { + (*cells)[i]->deHightLight(); + } + if ( ! inc ) + return; + if ( mday > 1 && index > 0 ) + for (int i = index-1; i >= 0; --i) { + //qDebug("index %d iii %d ", index, i); + if ( (*cells)[(uint)i]->doHightLight(inc) ) + break; + } + if ( mday < 3 && mday > 0 && index < (*cells).count()-1) + for (uint i = index+1; i < (*cells).count(); ++i) { + if ( (*cells)[i]->doHightLight(inc) ) + break; + } + +} void KOMonthView::selectInternalWeekNum ( int n ) { switchView(); if ( !KOPrefs::instance()->mMonthViewWeek ) diff --git a/korganizer/komonthview.h b/korganizer/komonthview.h index 65b5e77..159af16 100644 --- a/korganizer/komonthview.h +++ b/korganizer/komonthview.h @@ -43,8 +43,9 @@ class QToolTipGroup; #endif class KNOWhatsThis; +class MonthViewCell; class KOWeekButton : public QPushButton { Q_OBJECT public: @@ -84,8 +85,9 @@ class KNoScrollListBox: public QListBox void shiftUp(); void rightClick(); void nextCell(); void prevCell(); + void highligtIncidence( Incidence * , MonthViewCell*, int ); protected slots: void oneDown(); void keyPressEvent(QKeyEvent *); @@ -109,16 +111,17 @@ class MonthViewItem: public QListBoxItem void setAlarm(bool on) { mAlarm = on; } void setReply(bool on) { mReply = on; } void setMoreInfo(bool on) { mInfo = on; } void setMultiDay(int type) { mMultiday = type; } + int multiDay() { return mMultiday; } void setMultiDayPos(int type) { mdayPos = type; } int gettMultiDayPos() { return mdayPos; } void setBlockRepaint(bool on) { mblockRepaint = on; } - + bool setHighlighted( Incidence * ); void setPalette(const QPalette &p) { mPalette = p; } QPalette palette() const { return mPalette; } - + bool setHighlightedFalse(); Incidence *incidence() const { return mIncidence; } QDate incidenceDate() { return mDate; } protected: @@ -134,8 +137,9 @@ class MonthViewItem: public QListBoxItem bool mRecur; bool mAlarm; bool mReply; bool mInfo; + bool mDisplayHightlighted; QPalette mPalette; QDate mDate; @@ -174,9 +178,10 @@ class MonthViewCell : public KNoScrollListBox Incidence *selectedIncidence(); QDate selectedIncidenceDate(); QPushButton * dateLabel() { return mLabel; } - + void deHightLight(); + bool doHightLight( Incidence *); void deselect(); void select(); #ifdef DESKTOP_VERSION static QToolTipGroup *toolTipGroup(); @@ -191,9 +196,8 @@ class MonthViewCell : public KNoScrollListBox void resizeEvent( QResizeEvent * ); public slots: void showDay(); - protected slots: void defaultAction( QListBoxItem * ); void contextMenu( QListBoxItem * ); void selection( QListBoxItem * ); @@ -257,8 +261,9 @@ class KOMonthView: public KOEventView bool skipResize; NavigatorBar* navigatorBar() { return mNavigatorBar ;} void clearList(); public slots: + void incidenceHighlighted( Incidence *, MonthViewCell*, int ); void nextCell(); void prevCell(); virtual void updateView(); virtual void updateConfig(); |