summaryrefslogtreecommitdiffabout
authorzautrix <zautrix>2005-03-20 00:09:33 (UTC)
committer zautrix <zautrix>2005-03-20 00:09:33 (UTC)
commit0ef9fe870982bd005806d7f51898a740cd52fec8 (patch) (side-by-side diff)
tree891d95449e3f23159c50d7a38f03006bedfb41be
parent84c18843bbd1203878367572d3a6800a0586c7f1 (diff)
downloadkdepimpi-0ef9fe870982bd005806d7f51898a740cd52fec8.zip
kdepimpi-0ef9fe870982bd005806d7f51898a740cd52fec8.tar.gz
kdepimpi-0ef9fe870982bd005806d7f51898a740cd52fec8.tar.bz2
cooooooool
Diffstat (more/less context) (ignore whitespace changes)
-rw-r--r--korganizer/kodaymatrix.cpp118
-rw-r--r--korganizer/kodaymatrix.h5
2 files changed, 111 insertions, 12 deletions
diff --git a/korganizer/kodaymatrix.cpp b/korganizer/kodaymatrix.cpp
index 17a8546..1cde616 100644
--- a/korganizer/kodaymatrix.cpp
+++ b/korganizer/kodaymatrix.cpp
@@ -25,8 +25,9 @@
#include <qevent.h>
#include <qpainter.h>
#include <qptrlist.h>
#include <qtimer.h>
+#include <qwhatsthis.h>
#include <kglobal.h>
#include <kdebug.h>
#include <klocale.h>
@@ -57,8 +58,21 @@ DynamicTip::DynamicTip( QWidget * parent )
{
matrix = (KODayMatrix*)parent;
}
+class KODaymatrixWhatsThis :public QWhatsThis
+{
+public:
+ KODaymatrixWhatsThis( KODayMatrix* view ) : QWhatsThis( view ),_view (view) { };
+
+protected:
+ virtual QString text( const QPoint& p )
+ {
+ return _view->getWhatsThisText( p ) ;
+ }
+private:
+ KODayMatrix * _view;
+};
void DynamicTip::maybeTip( const QPoint &pos )
{
//calculate which cell of the matrix the mouse is in
@@ -94,12 +108,13 @@ KODayMatrix::KODayMatrix( QWidget *parent, const char *name )
KODayMatrix::KODayMatrix(QWidget *parent, Calendar* calendar, QDate date, const char *name) :
QFrame(parent, name)
#endif
{
-
+ new KODaymatrixWhatsThis(this);
mPendingUpdateBeforeRepaint = false;
-
+ mouseDown = false;
// initialize dynamic arrays
+ bDays.resize ( NUMDAYS );
days = new QDate[NUMDAYS];
daylbls = new QString[NUMDAYS];
events = new int[NUMDAYS];
mToolTip = new DynamicTip(this);
@@ -122,8 +137,67 @@ KODayMatrix::KODayMatrix(QWidget *parent, Calendar* calendar, QDate date, const
connect (mRepaintTimer ,SIGNAL(timeout()), this, SLOT ( repaintViewTimed() ));
mDayChanged = false;
updateView();
}
+QString KODayMatrix::getWhatsThisText( QPoint p )
+{
+
+ int tmp = getDayIndexFrom(p.x(), p.y());
+ if ( tmp < 0 || tmp > NUMDAYS-1 || !mCalendar )
+ return QString();
+ QDate mDate = days[tmp];
+ QPtrList<Event> eventlist = mCalendar->events(mDate);
+ Event *event;
+ QStringList mToolTip;
+ for(event=eventlist.first();event != 0;event=eventlist.next()) {
+ QString mToolTipText;
+ QString text;
+ int multiday = 0;// 1 = start, 2 = midddle, 3 = end day
+ if (event->isMultiDay()) {
+ QString prefix = "<->";multiday = 2;
+ QString time;
+ if ( event->doesRecur() ) {
+ if ( event->recursOn( mDate) ) {
+ prefix ="->" ;multiday = 1;
+ }
+ else {
+ int days = event->dtStart().date().daysTo ( event->dtEnd().date() );
+ if ( event->recursOn( mDate.addDays( -days)) ) {
+ prefix ="<-" ;multiday = 3;
+ }
+ }
+ } else {
+ if (mDate == event->dtStart().date()) {
+ prefix ="->" ;multiday = 1;
+ } else if (mDate == event->dtEnd().date()) {
+ prefix ="<-" ;multiday = 3;
+ }
+ }
+ if ( !event->doesFloat() ) {
+ if ( mDate == event->dtStart().date () )
+ time = KGlobal::locale()->formatTime(event->dtStart().time())+" ";
+ else if ( mDate == event->dtEnd().date () )
+ time = KGlobal::locale()->formatTime(event->dtEnd().time())+" ";
+
+ }
+ text = time + event->summary();
+ mToolTipText += prefix + text;
+ } else {
+ if (event->doesFloat()) {
+ text = event->summary();
+ mToolTipText += text;
+ }
+ else {
+ text = KGlobal::locale()->formatTime(event->dtStart().time());
+ text += " " + event->summary();
+ mToolTipText += KGlobal::locale()->formatTime(event->dtStart().time()) +"-"+KGlobal::locale()->formatTime(event->dtEnd().time())+" " + event->summary();
+ }
+ }
+ mToolTip.append( mToolTipText );
+ }
+ mToolTip.sort();
+ return "<b>"+KGlobal::locale()->formatDate(days[tmp]) + "</b><br>" + mToolTip.join("<br>");
+}
void KODayMatrix::setCalendar( Calendar *cal )
{
mCalendar = cal;
@@ -245,8 +319,9 @@ void KODayMatrix::updateViewTimed()
QPtrList<Event> eventlist = mCalendar->events(days[i]);
Event *event;
int numEvents = eventlist.count();
QString holiStr = "";
+ bDays.clearBit(i);
for(event=eventlist.first();event != 0;event=eventlist.next()) {
ushort recurType = event->recurrence()->doesRecur();
if ((recurType == Recurrence::rDaily && !KOPrefs::instance()->mDailyRecur) ||
(recurType == Recurrence::rWeekly && !KOPrefs::instance()->mWeeklyRecur)) {
@@ -256,8 +331,14 @@ void KODayMatrix::updateViewTimed()
if ( !holiStr.isEmpty() )
holiStr += "\n";
holiStr += event->summary();
}
+ if ( event->categories().contains( i18n("Birthday") ) || event->categories().contains( "Birthday" )) {
+ if ( !holiStr.isEmpty() )
+ holiStr += "\n";
+ holiStr += event->summary();
+ bDays.setBit(i);
+ }
}
events[i] = numEvents;
//if it is a holy day then draw it red. Sundays are consider holidays, too
if ( (KOGlobals::self()->calendarSystem()->dayOfWeek(days[i]) == KOGlobals::self()->calendarSystem()->weekDayOfPray()) ||
@@ -306,13 +387,13 @@ void KODayMatrix::updateView(QDate actdate)
if ( !isVisible() ) {
mPendingUpdateBeforeRepaint = true;
} else {
#ifdef DESKTOP_VERSION
- //mRepaintTimer->start( 250 );
- mUpdateTimer->start( 250 );
+ //mRepaintTimer->start( 150 );
+ mUpdateTimer->start( 150 );
#else
mRepaintTimer->start( 350 );
- mUpdateTimer->start( 2000 );
+ mUpdateTimer->start( 1200 );
#endif
}
}
void KODayMatrix::updateEvents()
@@ -367,16 +448,24 @@ int KODayMatrix::getDayIndexFrom(int x, int y)
// ----------------------------------------------------------------------------
void KODayMatrix::mousePressEvent (QMouseEvent* e)
{
+
+ if ( e->button() == LeftButton )
+ mouseDown = true;
mSelStart = getDayIndexFrom(e->x(), e->y());
if (mSelStart > NUMDAYS-1) mSelStart=NUMDAYS-1;
mSelInit = mSelStart;
}
void KODayMatrix::mouseReleaseEvent (QMouseEvent* e)
{
-
+ if ( e->button() == LeftButton )
+ if ( ! mouseDown ) {
+ return;
+ }
+ else
+ mouseDown = false;
int tmp = getDayIndexFrom(e->x(), e->y());
if (tmp > NUMDAYS-1) tmp=NUMDAYS-1;
if (mSelInit > tmp) {
@@ -405,9 +494,12 @@ void KODayMatrix::mouseReleaseEvent (QMouseEvent* e)
}
void KODayMatrix::mouseMoveEvent (QMouseEvent* e)
-{
+{
+ if ( ! mouseDown ) {
+ return;
+ }
int tmp = getDayIndexFrom(e->x(), e->y());
if (tmp > NUMDAYS-1) tmp=NUMDAYS-1;
if (mSelInit > tmp) {
@@ -629,19 +721,23 @@ void KODayMatrix::paintEvent(QPaintEvent * pevent)
}
// if it is a holiday then use the default holiday color
if (!mHolidays[i].isNull()) {
- if (actcol == mDefaultTextColor) {
- p.setPen(KOPrefs::instance()->mHolidayColor);
+ if ( bDays.testBit(i) ) {
+ p.setPen(Qt::green);
} else {
- p.setPen(mHolidayColorShaded);
+ if (actcol == mDefaultTextColor) {
+ p.setPen(KOPrefs::instance()->mHolidayColor);
+ } else {
+ p.setPen(mHolidayColorShaded);
+ }
}
}
// draw selected days with special color
// DO NOT specially highlight holidays in selection !
if (i >= mSelStart && i <= mSelEnd) {
- p.setPen(mSelectedDaysColor);
+ ;//p.setPen(mSelectedDaysColor);
}
p.drawText(col*dwidth, row*dheight, dwidth, dheight,
Qt::AlignHCenter | Qt::AlignVCenter, daylbls[i]);
diff --git a/korganizer/kodaymatrix.h b/korganizer/kodaymatrix.h
index ba4853f..c049942 100644
--- a/korganizer/kodaymatrix.h
+++ b/korganizer/kodaymatrix.h
@@ -31,9 +31,9 @@
#include <qpen.h>
#include <qdatetime.h>
#include <qtooltip.h>
#include <qpixmap.h>
-
+#include <qbitarray.h>
#include <qmap.h>
class QDragEnterEvent;
class QDragMoveEvent;
@@ -168,8 +168,9 @@ public:
* top left (0) to bottom right (41).
*/
bool isBeginningOfMonth() const { return today<=8; } ;
bool isEndOfMonth() const { return today>=27; } ;
+ QString getWhatsThisText( QPoint ) ;
public slots:
/** Recalculates all the flags of the days in the matrix like holidays or events
* on a day (Actually calls above method with the actual startdate).
@@ -223,8 +224,10 @@ protected:
void resizeEvent(QResizeEvent *);
private:
+ bool mouseDown;
+ QBitArray bDays;
QPixmap myPix;
QTimer* mUpdateTimer;
QTimer* mRepaintTimer;
bool mDayChanged;