summaryrefslogtreecommitdiffabout
path: root/korganizer/koagendaitem.cpp
Unidiff
Diffstat (limited to 'korganizer/koagendaitem.cpp') (more/less context) (show whitespace changes)
-rw-r--r--korganizer/koagendaitem.cpp8
1 files changed, 8 insertions, 0 deletions
diff --git a/korganizer/koagendaitem.cpp b/korganizer/koagendaitem.cpp
index ee9f39a..a05c60e 100644
--- a/korganizer/koagendaitem.cpp
+++ b/korganizer/koagendaitem.cpp
@@ -1,196 +1,204 @@
1/* 1/*
2 This file is part of KOrganizer. 2 This file is part of KOrganizer.
3 Copyright (c) 2000,2001 Cornelius Schumacher <schumacher@kde.org> 3 Copyright (c) 2000,2001 Cornelius Schumacher <schumacher@kde.org>
4 4
5 This program is free software; you can redistribute it and/or modify 5 This program is free software; you can redistribute it and/or modify
6 it under the terms of the GNU General Public License as published by 6 it under the terms of the GNU General Public License as published by
7 the Free Software Foundation; either version 2 of the License, or 7 the Free Software Foundation; either version 2 of the License, or
8 (at your option) any later version. 8 (at your option) any later version.
9 9
10 This program is distributed in the hope that it will be useful, 10 This program is distributed in the hope that it will be useful,
11 but WITHOUT ANY WARRANTY; without even the implied warranty of 11 but WITHOUT ANY WARRANTY; without even the implied warranty of
12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 GNU General Public License for more details. 13 GNU General Public License for more details.
14 14
15 You should have received a copy of the GNU General Public License 15 You should have received a copy of the GNU General Public License
16 along with this program; if not, write to the Free Software 16 along with this program; if not, write to the Free Software
17 Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. 17 Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
18*/ 18*/
19 19
20#include <qlabel.h> 20#include <qlabel.h>
21#include <qlayout.h> 21#include <qlayout.h>
22#include <qhbox.h> 22#include <qhbox.h>
23#include <qvbox.h> 23#include <qvbox.h>
24#include <qtooltip.h> 24#include <qtooltip.h>
25#include <qwhatsthis.h> 25#include <qwhatsthis.h>
26#include <qdragobject.h> 26#include <qdragobject.h>
27#include <qdrawutil.h> 27#include <qdrawutil.h>
28#include <qpainter.h> 28#include <qpainter.h>
29 29
30#include <kiconloader.h> 30#include <kiconloader.h>
31#include <kdebug.h> 31#include <kdebug.h>
32#include <kglobal.h> 32#include <kglobal.h>
33#include <klocale.h> 33#include <klocale.h>
34#ifndef DESKTOP_VERSION 34#ifndef DESKTOP_VERSION
35#include <qpe/qpeapplication.h> 35#include <qpe/qpeapplication.h>
36#define AGENDA_ICON_SIZE 5 36#define AGENDA_ICON_SIZE 5
37#else 37#else
38#define AGENDA_ICON_SIZE 7 38#define AGENDA_ICON_SIZE 7
39#endif 39#endif
40#include <libkcal/icaldrag.h> 40#include <libkcal/icaldrag.h>
41#include <libkcal/vcaldrag.h> 41#include <libkcal/vcaldrag.h>
42#include <libkcal/kincidenceformatter.h> 42#include <libkcal/kincidenceformatter.h>
43extern int globalFlagBlockAgenda; 43extern int globalFlagBlockAgenda;
44extern int globalFlagBlockAgendaItemPaint; 44extern int globalFlagBlockAgendaItemPaint;
45extern int globalFlagBlockAgendaItemUpdate; 45extern int globalFlagBlockAgendaItemUpdate;
46 46
47#include "koprefs.h" 47#include "koprefs.h"
48 48
49#include "koagendaitem.h" 49#include "koagendaitem.h"
50//#include "koagendaitem.moc" 50//#include "koagendaitem.moc"
51 51
52 52
53//-------------------------------------------------------------------------- 53//--------------------------------------------------------------------------
54 54
55QToolTipGroup *KOAgendaItem::mToolTipGroup = 0; 55QToolTipGroup *KOAgendaItem::mToolTipGroup = 0;
56 56
57//-------------------------------------------------------------------------- 57//--------------------------------------------------------------------------
58 58
59KOAgendaItem::KOAgendaItem(Incidence *incidence, QDate qd, QWidget *parent,bool allday, 59KOAgendaItem::KOAgendaItem(Incidence *incidence, QDate qd, QWidget *parent,bool allday,
60 const char *name,WFlags) : 60 const char *name,WFlags) :
61 QWidget(parent, name), mIncidence(incidence), mDate(qd) 61 QWidget(parent, name), mIncidence(incidence), mDate(qd)
62{ 62{
63#ifndef DESKTOP_VERSION 63#ifndef DESKTOP_VERSION
64 QPEApplication::setStylusOperation( this, QPEApplication::RightOnHold ); 64 QPEApplication::setStylusOperation( this, QPEApplication::RightOnHold );
65#endif 65#endif
66 int wflags = getWFlags() |WRepaintNoErase;// WResizeNoErase 66 int wflags = getWFlags() |WRepaintNoErase;// WResizeNoErase
67 setWFlags ( wflags); 67 setWFlags ( wflags);
68 mAllDay = allday; 68 mAllDay = allday;
69 init ( incidence, qd ); 69 init ( incidence, qd );
70 setMouseTracking(true); 70 setMouseTracking(true);
71 //setAcceptDrops(true); 71 //setAcceptDrops(true);
72 xPaintCoord = -1; 72 xPaintCoord = -1;
73 yPaintCoord = -1; 73 yPaintCoord = -1;
74} 74}
75 75
76void KOAgendaItem::init ( Incidence *incidence, QDate qd ) 76void KOAgendaItem::init ( Incidence *incidence, QDate qd )
77{ 77{
78 mIncidence = incidence; 78 mIncidence = incidence;
79 mDate = qd; 79 mDate = qd;
80 mFirstMultiItem = 0; 80 mFirstMultiItem = 0;
81 mNextMultiItem = 0; 81 mNextMultiItem = 0;
82 mLastMultiItem = 0; 82 mLastMultiItem = 0;
83 computeText(); 83 computeText();
84 84
85 if ( (incidence->type() == "Todo") && 85 if ( (incidence->type() == "Todo") &&
86 ( !((static_cast<Todo*>(incidence))->isCompleted()) && 86 ( !((static_cast<Todo*>(incidence))->isCompleted()) &&
87 ((static_cast<Todo*>(incidence))->dtDue().date() <= QDate::currentDate()) ) ) { 87 ((static_cast<Todo*>(incidence))->dtDue().date() <= QDate::currentDate()) ) ) {
88 if ( (static_cast<Todo*>(incidence))->dtDue() < QDateTime::currentDateTime().date()) 88 if ( (static_cast<Todo*>(incidence))->dtDue() < QDateTime::currentDateTime().date())
89 mBackgroundColor = KOPrefs::instance()->mTodoOverdueColor ; 89 mBackgroundColor = KOPrefs::instance()->mTodoOverdueColor ;
90 else 90 else
91 mBackgroundColor = KOPrefs::instance()->mTodoDueTodayColor; 91 mBackgroundColor = KOPrefs::instance()->mTodoDueTodayColor;
92 } 92 }
93 else { 93 else {
94 QStringList categories = mIncidence->categories(); 94 QStringList categories = mIncidence->categories();
95 QString cat = categories.first(); 95 QString cat = categories.first();
96 if (cat.isEmpty()) { 96 if (cat.isEmpty()) {
97 if ( (incidence->type() == "Todo") &&((static_cast<Todo*>(incidence))->isCompleted()) )
98 mBackgroundColor =KOPrefs::instance()->mTodoDoneColor;
99 else
97 mBackgroundColor =KOPrefs::instance()->mEventColor; 100 mBackgroundColor =KOPrefs::instance()->mEventColor;
98 } else { 101 } else {
99 mBackgroundColor = *KOPrefs::instance()->categoryColor(cat); 102 mBackgroundColor = *KOPrefs::instance()->categoryColor(cat);
103 if ( (incidence->type() == "Todo") &&((static_cast<Todo*>(incidence))->isCompleted()) ) {
104 if ( mBackgroundColor == KOPrefs::instance()->mEventColor )
105 mBackgroundColor =KOPrefs::instance()->mTodoDoneColor;
106 }
100 } 107 }
108
101 } 109 }
102 mColorGroup = QColorGroup( mBackgroundColor.light(), 110 mColorGroup = QColorGroup( mBackgroundColor.light(),
103 mBackgroundColor.dark(),mBackgroundColor.light(), 111 mBackgroundColor.dark(),mBackgroundColor.light(),
104 mBackgroundColor.dark(),mBackgroundColor, black, mBackgroundColor) ; 112 mBackgroundColor.dark(),mBackgroundColor, black, mBackgroundColor) ;
105 setBackgroundColor( mBackgroundColor ); 113 setBackgroundColor( mBackgroundColor );
106 114
107 setCellXY(0,0,1); 115 setCellXY(0,0,1);
108 setCellXWidth(0); 116 setCellXWidth(0);
109 setSubCell(0); 117 setSubCell(0);
110 setSubCells(1); 118 setSubCells(1);
111 setMultiItem(0,0,0); 119 setMultiItem(0,0,0);
112 startMove(); 120 startMove();
113 mSelected = true; 121 mSelected = true;
114 select(false); 122 select(false);
115 QFontMetrics fontinf(KOPrefs::instance()->mAgendaViewFont); 123 QFontMetrics fontinf(KOPrefs::instance()->mAgendaViewFont);
116 mFontPixelSize = fontinf.height();; 124 mFontPixelSize = fontinf.height();;
117 hide(); 125 hide();
118 xPaintCoord = -1; 126 xPaintCoord = -1;
119 yPaintCoord = -1; 127 yPaintCoord = -1;
120} 128}
121 129
122 130
123KOAgendaItem::~KOAgendaItem() 131KOAgendaItem::~KOAgendaItem()
124{ 132{
125 // qDebug("deleteKOAgendaItem::~KOAgendaItem( "); 133 // qDebug("deleteKOAgendaItem::~KOAgendaItem( ");
126 134
127} 135}
128 136
129void KOAgendaItem::recreateIncidence() 137void KOAgendaItem::recreateIncidence()
130{ 138{
131#if 0 139#if 0
132 Incidence* newInc = mIncidence->clone(); 140 Incidence* newInc = mIncidence->clone();
133 newInc->recreate(); 141 newInc->recreate();
134 if ( mIncidence->doesRecur() ) { 142 if ( mIncidence->doesRecur() ) {
135 mIncidence->addExDate( mDate ); 143 mIncidence->addExDate( mDate );
136 newInc->recurrence()->unsetRecurs(); 144 newInc->recurrence()->unsetRecurs();
137 int len = mIncidence->dtStart().secsTo( ((Event*)mIncidence)->dtEnd()); 145 int len = mIncidence->dtStart().secsTo( ((Event*)mIncidence)->dtEnd());
138 QTime tim = mIncidence->dtStart().time(); 146 QTime tim = mIncidence->dtStart().time();
139 newInc->setDtStart( QDateTime(mDate, tim) ); 147 newInc->setDtStart( QDateTime(mDate, tim) );
140 ((Event*)newInc)->setDtEnd( newInc->dtStart().addSecs( len ) ); 148 ((Event*)newInc)->setDtEnd( newInc->dtStart().addSecs( len ) );
141 } 149 }
142#endif 150#endif
143 mIncidence = mIncidence->recreateCloneException( mDate ); 151 mIncidence = mIncidence->recreateCloneException( mDate );
144} 152}
145bool KOAgendaItem::updateIcons(QPainter * p, bool horLayout) 153bool KOAgendaItem::updateIcons(QPainter * p, bool horLayout)
146{ 154{
147 int size = AGENDA_ICON_SIZE; 155 int size = AGENDA_ICON_SIZE;
148 156
149 int yOff = 0; 157 int yOff = 0;
150 int xOff = 0; 158 int xOff = 0;
151 int x = pos().x() +3; 159 int x = pos().x() +3;
152 int y; 160 int y;
153 if ( mAllDay ) 161 if ( mAllDay )
154 y = pos().y()+3; 162 y = pos().y()+3;
155 else 163 else
156 y = mCellYTop * ( height() / cellHeight() ) +3; 164 y = mCellYTop * ( height() / cellHeight() ) +3;
157 if (mIncidence->cancelled()) { 165 if (mIncidence->cancelled()) {
158 int xpos = xOff*( 1 +AGENDA_ICON_SIZE )+x; 166 int xpos = xOff*( 1 +AGENDA_ICON_SIZE )+x;
159 int ypos = yOff*( 1 +AGENDA_ICON_SIZE)+y; 167 int ypos = yOff*( 1 +AGENDA_ICON_SIZE)+y;
160 p->drawLine( xpos, ypos, xpos+AGENDA_ICON_SIZE-1, ypos+AGENDA_ICON_SIZE-1 ); 168 p->drawLine( xpos, ypos, xpos+AGENDA_ICON_SIZE-1, ypos+AGENDA_ICON_SIZE-1 );
161 p->drawLine( xpos, ypos+AGENDA_ICON_SIZE-1, xpos+AGENDA_ICON_SIZE-1, ypos ); 169 p->drawLine( xpos, ypos+AGENDA_ICON_SIZE-1, xpos+AGENDA_ICON_SIZE-1, ypos );
162 if ( horLayout ) 170 if ( horLayout )
163 ++xOff; 171 ++xOff;
164 else 172 else
165 ++yOff; 173 ++yOff;
166 } 174 }
167 if (mIncidence->isAlarmEnabled()) { 175 if (mIncidence->isAlarmEnabled()) {
168 p->fillRect ( xOff*( 1 +AGENDA_ICON_SIZE )+x, yOff*( 1 +AGENDA_ICON_SIZE)+y, AGENDA_ICON_SIZE, AGENDA_ICON_SIZE, red ); 176 p->fillRect ( xOff*( 1 +AGENDA_ICON_SIZE )+x, yOff*( 1 +AGENDA_ICON_SIZE)+y, AGENDA_ICON_SIZE, AGENDA_ICON_SIZE, red );
169 if ( horLayout ) 177 if ( horLayout )
170 ++xOff; 178 ++xOff;
171 else 179 else
172 ++yOff; 180 ++yOff;
173 } 181 }
174 if (mIncidence->recurrence()->doesRecur()) { 182 if (mIncidence->recurrence()->doesRecur()) {
175 p->fillRect ( xOff*( 1 +AGENDA_ICON_SIZE )+x, yOff*( 1 +AGENDA_ICON_SIZE)+y, AGENDA_ICON_SIZE, AGENDA_ICON_SIZE, blue ); 183 p->fillRect ( xOff*( 1 +AGENDA_ICON_SIZE )+x, yOff*( 1 +AGENDA_ICON_SIZE)+y, AGENDA_ICON_SIZE, AGENDA_ICON_SIZE, blue );
176 if ( horLayout ) 184 if ( horLayout )
177 ++xOff; 185 ++xOff;
178 else 186 else
179 ++yOff; 187 ++yOff;
180 } 188 }
181 if (mIncidence->description().length() > 0) { 189 if (mIncidence->description().length() > 0) {
182 p->fillRect ( xOff*( 1 +AGENDA_ICON_SIZE )+x, yOff*( 1 +AGENDA_ICON_SIZE)+y, AGENDA_ICON_SIZE, AGENDA_ICON_SIZE, darkGreen ); 190 p->fillRect ( xOff*( 1 +AGENDA_ICON_SIZE )+x, yOff*( 1 +AGENDA_ICON_SIZE)+y, AGENDA_ICON_SIZE, AGENDA_ICON_SIZE, darkGreen );
183 if ( horLayout ) 191 if ( horLayout )
184 ++xOff; 192 ++xOff;
185 else 193 else
186 ++yOff; 194 ++yOff;
187 } 195 }
188 if (mIncidence->isReadOnly()) { 196 if (mIncidence->isReadOnly()) {
189 p->fillRect ( xOff*( 1 +AGENDA_ICON_SIZE )+x, yOff*( 1 +AGENDA_ICON_SIZE)+y, AGENDA_ICON_SIZE, AGENDA_ICON_SIZE, white ); 197 p->fillRect ( xOff*( 1 +AGENDA_ICON_SIZE )+x, yOff*( 1 +AGENDA_ICON_SIZE)+y, AGENDA_ICON_SIZE, AGENDA_ICON_SIZE, white );
190 if ( horLayout ) 198 if ( horLayout )
191 ++xOff; 199 ++xOff;
192 else 200 else
193 ++yOff; 201 ++yOff;
194 } 202 }
195 203
196 if (mIncidence->attendeeCount()>0) { 204 if (mIncidence->attendeeCount()>0) {