summaryrefslogtreecommitdiffabout
Side-by-side diff
Diffstat (more/less context) (show whitespace changes)
-rw-r--r--korganizer/komonthview.cpp116
-rw-r--r--korganizer/komonthview.h13
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();