-rw-r--r-- | korganizer/calendarview.cpp | 31 | ||||
-rw-r--r-- | korganizer/calendarview.h | 4 | ||||
-rw-r--r-- | korganizer/koeventviewer.cpp | 80 | ||||
-rw-r--r-- | korganizer/koeventviewer.h | 1 | ||||
-rw-r--r-- | korganizer/main.cpp | 32 |
5 files changed, 93 insertions, 55 deletions
diff --git a/korganizer/calendarview.cpp b/korganizer/calendarview.cpp index bf98ad4..c3c3d47 100644 --- a/korganizer/calendarview.cpp +++ b/korganizer/calendarview.cpp | |||
@@ -74,923 +74,948 @@ | |||
74 | #include <libkcal/calfilter.h> | 74 | #include <libkcal/calfilter.h> |
75 | #include <libkcal/attendee.h> | 75 | #include <libkcal/attendee.h> |
76 | #include <libkcal/dndfactory.h> | 76 | #include <libkcal/dndfactory.h> |
77 | #include <libkcal/freebusy.h> | 77 | #include <libkcal/freebusy.h> |
78 | #include <libkcal/filestorage.h> | 78 | #include <libkcal/filestorage.h> |
79 | #include <libkcal/calendarresources.h> | 79 | #include <libkcal/calendarresources.h> |
80 | #include <libkcal/qtopiaformat.h> | 80 | #include <libkcal/qtopiaformat.h> |
81 | #include "../kalarmd/alarmdialog.h" | 81 | #include "../kalarmd/alarmdialog.h" |
82 | 82 | ||
83 | #ifndef DESKTOP_VERSION | 83 | #ifndef DESKTOP_VERSION |
84 | #include <libkcal/sharpformat.h> | 84 | #include <libkcal/sharpformat.h> |
85 | #endif | 85 | #endif |
86 | #ifndef KORG_NOMAIL | 86 | #ifndef KORG_NOMAIL |
87 | #include "komailclient.h" | 87 | #include "komailclient.h" |
88 | #endif | 88 | #endif |
89 | #ifndef KORG_NOPRINTER | 89 | #ifndef KORG_NOPRINTER |
90 | #include "calprinter.h" | 90 | #include "calprinter.h" |
91 | #endif | 91 | #endif |
92 | #ifndef KORG_NOPLUGINS | 92 | #ifndef KORG_NOPLUGINS |
93 | #include "kocore.h" | 93 | #include "kocore.h" |
94 | #endif | 94 | #endif |
95 | #include "koeventeditor.h" | 95 | #include "koeventeditor.h" |
96 | #include "kotodoeditor.h" | 96 | #include "kotodoeditor.h" |
97 | #include "koprefs.h" | 97 | #include "koprefs.h" |
98 | #include "koeventviewerdialog.h" | 98 | #include "koeventviewerdialog.h" |
99 | #include "publishdialog.h" | 99 | #include "publishdialog.h" |
100 | #include "kofilterview.h" | 100 | #include "kofilterview.h" |
101 | #include "koglobals.h" | 101 | #include "koglobals.h" |
102 | #include "koviewmanager.h" | 102 | #include "koviewmanager.h" |
103 | #include "koagendaview.h" | 103 | #include "koagendaview.h" |
104 | #include "kodialogmanager.h" | 104 | #include "kodialogmanager.h" |
105 | #include "outgoingdialog.h" | 105 | #include "outgoingdialog.h" |
106 | #include "incomingdialog.h" | 106 | #include "incomingdialog.h" |
107 | #include "statusdialog.h" | 107 | #include "statusdialog.h" |
108 | #include "kdatenavigator.h" | 108 | #include "kdatenavigator.h" |
109 | #include "kotodoview.h" | 109 | #include "kotodoview.h" |
110 | #include "datenavigator.h" | 110 | #include "datenavigator.h" |
111 | #include "resourceview.h" | 111 | #include "resourceview.h" |
112 | #include "navigatorbar.h" | 112 | #include "navigatorbar.h" |
113 | #include "searchdialog.h" | 113 | #include "searchdialog.h" |
114 | #include "mainwindow.h" | 114 | #include "mainwindow.h" |
115 | 115 | ||
116 | #include "calendarview.h" | 116 | #include "calendarview.h" |
117 | #ifndef DESKTOP_VERSION | 117 | #ifndef DESKTOP_VERSION |
118 | #include <qtopia/alarmserver.h> | 118 | #include <qtopia/alarmserver.h> |
119 | #endif | 119 | #endif |
120 | #ifndef _WIN32_ | 120 | #ifndef _WIN32_ |
121 | #include <stdlib.h> | 121 | #include <stdlib.h> |
122 | #include <stdio.h> | 122 | #include <stdio.h> |
123 | #include <unistd.h> | 123 | #include <unistd.h> |
124 | #else | 124 | #else |
125 | #include <qprocess.h> | 125 | #include <qprocess.h> |
126 | #endif | 126 | #endif |
127 | using namespace KOrg; | 127 | using namespace KOrg; |
128 | using namespace KCal; | 128 | using namespace KCal; |
129 | extern int globalFlagBlockAgenda; | 129 | extern int globalFlagBlockAgenda; |
130 | extern int globalFlagBlockStartup; | 130 | extern int globalFlagBlockStartup; |
131 | 131 | ||
132 | #define SYNC_MODE_NORMAL 0 | 132 | #define SYNC_MODE_NORMAL 0 |
133 | #define SYNC_MODE_SHARP 1 | 133 | #define SYNC_MODE_SHARP 1 |
134 | #define SYNC_MODE_QTOPIA 2 | 134 | #define SYNC_MODE_QTOPIA 2 |
135 | 135 | ||
136 | class KOBeamPrefs : public QDialog | 136 | class KOBeamPrefs : public QDialog |
137 | { | 137 | { |
138 | public: | 138 | public: |
139 | KOBeamPrefs( QWidget *parent=0, const char *name=0 ) : | 139 | KOBeamPrefs( QWidget *parent=0, const char *name=0 ) : |
140 | QDialog( parent, name, true ) | 140 | QDialog( parent, name, true ) |
141 | { | 141 | { |
142 | setCaption( i18n("Beam Options") ); | 142 | setCaption( i18n("Beam Options") ); |
143 | QVBoxLayout* lay = new QVBoxLayout( this ); | 143 | QVBoxLayout* lay = new QVBoxLayout( this ); |
144 | lay->setSpacing( 3 ); | 144 | lay->setSpacing( 3 ); |
145 | lay->setMargin( 3 ); | 145 | lay->setMargin( 3 ); |
146 | QButtonGroup* format = new QButtonGroup( 1, Horizontal, i18n("File format"), this ); | 146 | QButtonGroup* format = new QButtonGroup( 1, Horizontal, i18n("File format"), this ); |
147 | lay->addWidget( format ); | 147 | lay->addWidget( format ); |
148 | format->setExclusive ( true ) ; | 148 | format->setExclusive ( true ) ; |
149 | QButtonGroup* time = new QButtonGroup(1, Horizontal, i18n("Time format"), this ); | 149 | QButtonGroup* time = new QButtonGroup(1, Horizontal, i18n("Time format"), this ); |
150 | lay->addWidget( time ); time->setExclusive ( true ) ; | 150 | lay->addWidget( time ); time->setExclusive ( true ) ; |
151 | vcal = new QRadioButton(" vCalendar ", format ); | 151 | vcal = new QRadioButton(" vCalendar ", format ); |
152 | ical = new QRadioButton(" iCalendar ", format ); | 152 | ical = new QRadioButton(" iCalendar ", format ); |
153 | vcal->setChecked( true ); | 153 | vcal->setChecked( true ); |
154 | tz = new QRadioButton(i18n(" With timezone "), time ); | 154 | tz = new QRadioButton(i18n(" With timezone "), time ); |
155 | local = new QRadioButton(i18n(" Local time "), time ); | 155 | local = new QRadioButton(i18n(" Local time "), time ); |
156 | tz->setChecked( true ); | 156 | tz->setChecked( true ); |
157 | QPushButton * ok = new QPushButton( i18n("Beam via IR!"), this ); | 157 | QPushButton * ok = new QPushButton( i18n("Beam via IR!"), this ); |
158 | lay->addWidget( ok ); | 158 | lay->addWidget( ok ); |
159 | QPushButton * cancel = new QPushButton( i18n("Cancel"), this ); | 159 | QPushButton * cancel = new QPushButton( i18n("Cancel"), this ); |
160 | lay->addWidget( cancel ); | 160 | lay->addWidget( cancel ); |
161 | connect ( ok,SIGNAL(clicked() ),this , SLOT ( accept() ) ); | 161 | connect ( ok,SIGNAL(clicked() ),this , SLOT ( accept() ) ); |
162 | connect (cancel, SIGNAL(clicked() ), this, SLOT ( reject()) ); | 162 | connect (cancel, SIGNAL(clicked() ), this, SLOT ( reject()) ); |
163 | resize( 200, 200 ); | 163 | resize( 200, 200 ); |
164 | } | 164 | } |
165 | 165 | ||
166 | bool beamVcal() { return vcal->isChecked(); } | 166 | bool beamVcal() { return vcal->isChecked(); } |
167 | bool beamLocal() { return local->isChecked(); } | 167 | bool beamLocal() { return local->isChecked(); } |
168 | private: | 168 | private: |
169 | QRadioButton* vcal, *ical, *local, *tz; | 169 | QRadioButton* vcal, *ical, *local, *tz; |
170 | }; | 170 | }; |
171 | class KOCatPrefs : public QDialog | 171 | class KOCatPrefs : public QDialog |
172 | { | 172 | { |
173 | public: | 173 | public: |
174 | KOCatPrefs( QWidget *parent=0, const char *name=0 ) : | 174 | KOCatPrefs( QWidget *parent=0, const char *name=0 ) : |
175 | QDialog( parent, name, true ) | 175 | QDialog( parent, name, true ) |
176 | { | 176 | { |
177 | setCaption( i18n("Manage new Categories") ); | 177 | setCaption( i18n("Manage new Categories") ); |
178 | QVBoxLayout* lay = new QVBoxLayout( this ); | 178 | QVBoxLayout* lay = new QVBoxLayout( this ); |
179 | lay->setSpacing( 3 ); | 179 | lay->setSpacing( 3 ); |
180 | lay->setMargin( 3 ); | 180 | lay->setMargin( 3 ); |
181 | QLabel * lab = new QLabel( i18n("After importing/loading/syncing\nthere may be new categories in\nevents or todos\nwhich are not in the category list.\nPlease choose what to do:\n "), this ); | 181 | QLabel * lab = new QLabel( i18n("After importing/loading/syncing\nthere may be new categories in\nevents or todos\nwhich are not in the category list.\nPlease choose what to do:\n "), this ); |
182 | lay->addWidget( lab ); | 182 | lay->addWidget( lab ); |
183 | QButtonGroup* format = new QButtonGroup( 1, Horizontal, i18n("New categories not in list:"), this ); | 183 | QButtonGroup* format = new QButtonGroup( 1, Horizontal, i18n("New categories not in list:"), this ); |
184 | lay->addWidget( format ); | 184 | lay->addWidget( format ); |
185 | format->setExclusive ( true ) ; | 185 | format->setExclusive ( true ) ; |
186 | addCatBut = new QRadioButton(i18n("Add to category list"), format ); | 186 | addCatBut = new QRadioButton(i18n("Add to category list"), format ); |
187 | new QRadioButton(i18n("Remove from Events/Todos"), format ); | 187 | new QRadioButton(i18n("Remove from Events/Todos"), format ); |
188 | addCatBut->setChecked( true ); | 188 | addCatBut->setChecked( true ); |
189 | QPushButton * ok = new QPushButton( i18n("OK"), this ); | 189 | QPushButton * ok = new QPushButton( i18n("OK"), this ); |
190 | lay->addWidget( ok ); | 190 | lay->addWidget( ok ); |
191 | QPushButton * cancel = new QPushButton( i18n("Cancel"), this ); | 191 | QPushButton * cancel = new QPushButton( i18n("Cancel"), this ); |
192 | lay->addWidget( cancel ); | 192 | lay->addWidget( cancel ); |
193 | connect ( ok,SIGNAL(clicked() ),this , SLOT ( accept() ) ); | 193 | connect ( ok,SIGNAL(clicked() ),this , SLOT ( accept() ) ); |
194 | connect (cancel, SIGNAL(clicked() ), this, SLOT ( reject()) ); | 194 | connect (cancel, SIGNAL(clicked() ), this, SLOT ( reject()) ); |
195 | resize( 200, 200 ); | 195 | resize( 200, 200 ); |
196 | } | 196 | } |
197 | 197 | ||
198 | bool addCat() { return addCatBut->isChecked(); } | 198 | bool addCat() { return addCatBut->isChecked(); } |
199 | private: | 199 | private: |
200 | QRadioButton* addCatBut; | 200 | QRadioButton* addCatBut; |
201 | }; | 201 | }; |
202 | 202 | ||
203 | 203 | ||
204 | 204 | ||
205 | CalendarView::CalendarView( CalendarResources *calendar, | 205 | CalendarView::CalendarView( CalendarResources *calendar, |
206 | QWidget *parent, const char *name ) | 206 | QWidget *parent, const char *name ) |
207 | : CalendarViewBase( parent, name ), | 207 | : CalendarViewBase( parent, name ), |
208 | mCalendar( calendar ), | 208 | mCalendar( calendar ), |
209 | mResourceManager( calendar->resourceManager() ) | 209 | mResourceManager( calendar->resourceManager() ) |
210 | { | 210 | { |
211 | 211 | ||
212 | mEventEditor = 0; | 212 | mEventEditor = 0; |
213 | mTodoEditor = 0; | 213 | mTodoEditor = 0; |
214 | 214 | ||
215 | init(); | 215 | init(); |
216 | } | 216 | } |
217 | 217 | ||
218 | CalendarView::CalendarView( Calendar *calendar, | 218 | CalendarView::CalendarView( Calendar *calendar, |
219 | QWidget *parent, const char *name ) | 219 | QWidget *parent, const char *name ) |
220 | : CalendarViewBase( parent, name ), | 220 | : CalendarViewBase( parent, name ), |
221 | mCalendar( calendar ), | 221 | mCalendar( calendar ), |
222 | mResourceManager( 0 ) | 222 | mResourceManager( 0 ) |
223 | { | 223 | { |
224 | 224 | ||
225 | mEventEditor = 0; | 225 | mEventEditor = 0; |
226 | mTodoEditor = 0; | 226 | mTodoEditor = 0; |
227 | init();} | 227 | init();} |
228 | 228 | ||
229 | void CalendarView::init() | 229 | void CalendarView::init() |
230 | { | 230 | { |
231 | beamDialog = new KOBeamPrefs(); | 231 | beamDialog = new KOBeamPrefs(); |
232 | mDatePickerMode = 0; | 232 | mDatePickerMode = 0; |
233 | mCurrentSyncDevice = ""; | 233 | mCurrentSyncDevice = ""; |
234 | writeLocale(); | 234 | writeLocale(); |
235 | mViewManager = new KOViewManager( this ); | 235 | mViewManager = new KOViewManager( this ); |
236 | mDialogManager = new KODialogManager( this ); | 236 | mDialogManager = new KODialogManager( this ); |
237 | mEventViewerDialog = 0; | 237 | mEventViewerDialog = 0; |
238 | mModified = false; | 238 | mModified = false; |
239 | mReadOnly = false; | 239 | mReadOnly = false; |
240 | mSelectedIncidence = 0; | 240 | mSelectedIncidence = 0; |
241 | mSyncProfiles.setAutoDelete(true); | 241 | mSyncProfiles.setAutoDelete(true); |
242 | mCalPrinter = 0; | 242 | mCalPrinter = 0; |
243 | mFilters.setAutoDelete(true); | 243 | mFilters.setAutoDelete(true); |
244 | 244 | ||
245 | mCalendar->registerObserver( this ); | 245 | mCalendar->registerObserver( this ); |
246 | // TODO: Make sure that view is updated, when calendar is changed. | 246 | // TODO: Make sure that view is updated, when calendar is changed. |
247 | 247 | ||
248 | mStorage = new FileStorage( mCalendar ); | 248 | mStorage = new FileStorage( mCalendar ); |
249 | mNavigator = new DateNavigator( this, "datevav", mViewManager ); | 249 | mNavigator = new DateNavigator( this, "datevav", mViewManager ); |
250 | 250 | ||
251 | QBoxLayout *topLayout = (QBoxLayout*)layout(); | 251 | QBoxLayout *topLayout = (QBoxLayout*)layout(); |
252 | #ifndef KORG_NOSPLITTER | 252 | #ifndef KORG_NOSPLITTER |
253 | // create the main layout frames. | 253 | // create the main layout frames. |
254 | mPanner = new QSplitter(QSplitter::Horizontal,this,"CalendarView::Panner"); | 254 | mPanner = new QSplitter(QSplitter::Horizontal,this,"CalendarView::Panner"); |
255 | topLayout->addWidget(mPanner); | 255 | topLayout->addWidget(mPanner); |
256 | 256 | ||
257 | mLeftSplitter = new QSplitter(QSplitter::Vertical,mPanner, | 257 | mLeftSplitter = new QSplitter(QSplitter::Vertical,mPanner, |
258 | "CalendarView::LeftFrame"); | 258 | "CalendarView::LeftFrame"); |
259 | mPanner->setResizeMode(mLeftSplitter,QSplitter::KeepSize); | 259 | mPanner->setResizeMode(mLeftSplitter,QSplitter::KeepSize); |
260 | 260 | ||
261 | mDateNavigator = new KDateNavigator(mLeftSplitter, mCalendar, TRUE, | 261 | mDateNavigator = new KDateNavigator(mLeftSplitter, mCalendar, TRUE, |
262 | "CalendarView::DateNavigator", QDate::currentDate() ); | 262 | "CalendarView::DateNavigator", QDate::currentDate() ); |
263 | mLeftSplitter->setResizeMode(mDateNavigator,QSplitter::KeepSize); | 263 | mLeftSplitter->setResizeMode(mDateNavigator,QSplitter::KeepSize); |
264 | mTodoList = new KOTodoView(mCalendar, mLeftSplitter, "todolist_small2"); | 264 | mTodoList = new KOTodoView(mCalendar, mLeftSplitter, "todolist_small2"); |
265 | mFilterView = new KOFilterView(&mFilters,mLeftSplitter,"CalendarView::FilterView"); | 265 | mFilterView = new KOFilterView(&mFilters,mLeftSplitter,"CalendarView::FilterView"); |
266 | 266 | ||
267 | #ifdef KORG_NORESOURCEVIEW | 267 | #ifdef KORG_NORESOURCEVIEW |
268 | mResourceView = 0; | 268 | mResourceView = 0; |
269 | #else | 269 | #else |
270 | if ( mResourceManager ) { | 270 | if ( mResourceManager ) { |
271 | mResourceView = new ResourceView( mResourceManager, mLeftSplitter ); | 271 | mResourceView = new ResourceView( mResourceManager, mLeftSplitter ); |
272 | mResourceView->updateView(); | 272 | mResourceView->updateView(); |
273 | connect( mResourceView, SIGNAL( resourcesChanged() ), | 273 | connect( mResourceView, SIGNAL( resourcesChanged() ), |
274 | SLOT( updateView() ) ); | 274 | SLOT( updateView() ) ); |
275 | } else { | 275 | } else { |
276 | mResourceView = 0; | 276 | mResourceView = 0; |
277 | } | 277 | } |
278 | #endif | 278 | #endif |
279 | QWidget *rightBox = new QWidget( mPanner ); | 279 | QWidget *rightBox = new QWidget( mPanner ); |
280 | QBoxLayout *rightLayout = new QVBoxLayout( rightBox ); | 280 | QBoxLayout *rightLayout = new QVBoxLayout( rightBox ); |
281 | 281 | ||
282 | mNavigatorBar = new NavigatorBar( QDate::currentDate(), rightBox, "useBigPixmaps" ); | 282 | mNavigatorBar = new NavigatorBar( QDate::currentDate(), rightBox, "useBigPixmaps" ); |
283 | rightLayout->addWidget( mNavigatorBar ); | 283 | rightLayout->addWidget( mNavigatorBar ); |
284 | 284 | ||
285 | mRightFrame = new QWidgetStack( rightBox ); | 285 | mRightFrame = new QWidgetStack( rightBox ); |
286 | rightLayout->addWidget( mRightFrame, 1 ); | 286 | rightLayout->addWidget( mRightFrame, 1 ); |
287 | 287 | ||
288 | mLeftFrame = mLeftSplitter; | 288 | mLeftFrame = mLeftSplitter; |
289 | #else | 289 | #else |
290 | QWidget *mainBox = new QWidget( this ); | 290 | QWidget *mainBox = new QWidget( this ); |
291 | QWidget *leftFrame = new QWidget( mainBox ); | 291 | QWidget *leftFrame = new QWidget( mainBox ); |
292 | 292 | ||
293 | QBoxLayout * mainBoxLayout; | 293 | QBoxLayout * mainBoxLayout; |
294 | QBoxLayout * leftFrameLayout; | 294 | QBoxLayout * leftFrameLayout; |
295 | if ( KOPrefs::instance()->mVerticalScreen ) { | 295 | if ( KOPrefs::instance()->mVerticalScreen ) { |
296 | mainBoxLayout = new QVBoxLayout(mainBox); | 296 | mainBoxLayout = new QVBoxLayout(mainBox); |
297 | leftFrameLayout = new QHBoxLayout(leftFrame ); | 297 | leftFrameLayout = new QHBoxLayout(leftFrame ); |
298 | } else { | 298 | } else { |
299 | mainBoxLayout = new QHBoxLayout(mainBox); | 299 | mainBoxLayout = new QHBoxLayout(mainBox); |
300 | leftFrameLayout = new QVBoxLayout(leftFrame ); | 300 | leftFrameLayout = new QVBoxLayout(leftFrame ); |
301 | } | 301 | } |
302 | topLayout->addWidget( mainBox ); | 302 | topLayout->addWidget( mainBox ); |
303 | mainBoxLayout->addWidget (leftFrame); | 303 | mainBoxLayout->addWidget (leftFrame); |
304 | mDateNavigator = new KDateNavigator(leftFrame, mCalendar, TRUE, | 304 | mDateNavigator = new KDateNavigator(leftFrame, mCalendar, TRUE, |
305 | "CalendarView::DateNavigator", QDate::currentDate()); | 305 | "CalendarView::DateNavigator", QDate::currentDate()); |
306 | // mDateNavigator->blockSignals( true ); | 306 | // mDateNavigator->blockSignals( true ); |
307 | leftFrameLayout->addWidget( mDateNavigator ); | 307 | leftFrameLayout->addWidget( mDateNavigator ); |
308 | mFilterView = new KOFilterView(&mFilters,leftFrame,"CalendarView::FilterView"); | 308 | mFilterView = new KOFilterView(&mFilters,leftFrame,"CalendarView::FilterView"); |
309 | mTodoList = new KOTodoView(mCalendar, leftFrame, "todolist"); | 309 | mTodoList = new KOTodoView(mCalendar, leftFrame, "todolist"); |
310 | 310 | ||
311 | if ( QApplication::desktop()->width() < 480 ) { | 311 | if ( QApplication::desktop()->width() < 480 ) { |
312 | leftFrameLayout->addWidget(mFilterView); | 312 | leftFrameLayout->addWidget(mFilterView); |
313 | leftFrameLayout->addWidget(mTodoList, 2 ); | 313 | leftFrameLayout->addWidget(mTodoList, 2 ); |
314 | 314 | ||
315 | } else { | 315 | } else { |
316 | leftFrameLayout->addWidget(mTodoList,2 ); | 316 | leftFrameLayout->addWidget(mTodoList,2 ); |
317 | leftFrameLayout->addWidget(mFilterView ); | 317 | leftFrameLayout->addWidget(mFilterView ); |
318 | } | 318 | } |
319 | mFilterView->hide(); | 319 | mFilterView->hide(); |
320 | QWidget *rightBox = new QWidget( mainBox ); | 320 | QWidget *rightBox = new QWidget( mainBox ); |
321 | mainBoxLayout->addWidget ( rightBox, 10 ); | 321 | mainBoxLayout->addWidget ( rightBox, 10 ); |
322 | QBoxLayout *rightLayout = new QVBoxLayout( rightBox ); | 322 | QBoxLayout *rightLayout = new QVBoxLayout( rightBox ); |
323 | mNavigatorBar = new NavigatorBar( QDate::currentDate(), rightBox, "useBigPixmaps" ); | 323 | mNavigatorBar = new NavigatorBar( QDate::currentDate(), rightBox, "useBigPixmaps" ); |
324 | mRightFrame = new QWidgetStack( rightBox ); | 324 | mRightFrame = new QWidgetStack( rightBox ); |
325 | rightLayout->addWidget( mNavigatorBar ); | 325 | rightLayout->addWidget( mNavigatorBar ); |
326 | rightLayout->addWidget( mRightFrame, 10 ); | 326 | rightLayout->addWidget( mRightFrame, 10 ); |
327 | 327 | ||
328 | mLeftFrame = leftFrame; | 328 | mLeftFrame = leftFrame; |
329 | if ( KOPrefs::instance()->mVerticalScreen ) { | 329 | if ( KOPrefs::instance()->mVerticalScreen ) { |
330 | mTodoList->setFixedHeight( mDateNavigator->sizeHint().height() ); | 330 | mTodoList->setFixedHeight( mDateNavigator->sizeHint().height() ); |
331 | leftFrame->setFixedHeight( mDateNavigator->sizeHint().height() ); | 331 | leftFrame->setFixedHeight( mDateNavigator->sizeHint().height() ); |
332 | } else { | 332 | } else { |
333 | mTodoList->setFixedWidth( mDateNavigator->sizeHint().width() ); | 333 | mTodoList->setFixedWidth( mDateNavigator->sizeHint().width() ); |
334 | leftFrame->setFixedWidth( mDateNavigator->sizeHint().width() ); | 334 | leftFrame->setFixedWidth( mDateNavigator->sizeHint().width() ); |
335 | } | 335 | } |
336 | 336 | ||
337 | //qDebug("Calendarview Size %d %d ", width(), height()); | 337 | //qDebug("Calendarview Size %d %d ", width(), height()); |
338 | #endif | 338 | #endif |
339 | 339 | ||
340 | connect( mNavigator, SIGNAL( datesSelected( const KCal::DateList & ) ), | 340 | connect( mNavigator, SIGNAL( datesSelected( const KCal::DateList & ) ), |
341 | SLOT( showDates( const KCal::DateList & ) ) ); | 341 | SLOT( showDates( const KCal::DateList & ) ) ); |
342 | connect( mNavigator, SIGNAL( datesSelected( const KCal::DateList & ) ), | 342 | connect( mNavigator, SIGNAL( datesSelected( const KCal::DateList & ) ), |
343 | mDateNavigator, SLOT( selectDates( const KCal::DateList & ) ) ); | 343 | mDateNavigator, SLOT( selectDates( const KCal::DateList & ) ) ); |
344 | 344 | ||
345 | connect( mNavigatorBar, SIGNAL( goPrevYear() ), | 345 | connect( mNavigatorBar, SIGNAL( goPrevYear() ), |
346 | mNavigator, SLOT( selectPreviousYear() ) ); | 346 | mNavigator, SLOT( selectPreviousYear() ) ); |
347 | connect( mNavigatorBar, SIGNAL( goNextYear() ), | 347 | connect( mNavigatorBar, SIGNAL( goNextYear() ), |
348 | mNavigator, SLOT( selectNextYear() ) ); | 348 | mNavigator, SLOT( selectNextYear() ) ); |
349 | connect( mNavigatorBar, SIGNAL( goPrevMonth() ), | 349 | connect( mNavigatorBar, SIGNAL( goPrevMonth() ), |
350 | mNavigator, SLOT( selectPreviousMonth() ) ); | 350 | mNavigator, SLOT( selectPreviousMonth() ) ); |
351 | connect( mNavigatorBar, SIGNAL( goNextMonth() ), | 351 | connect( mNavigatorBar, SIGNAL( goNextMonth() ), |
352 | mNavigator, SLOT( selectNextMonth() ) ); | 352 | mNavigator, SLOT( selectNextMonth() ) ); |
353 | 353 | ||
354 | connect( mNavigator, SIGNAL( datesSelected( const KCal::DateList & ) ), | 354 | connect( mNavigator, SIGNAL( datesSelected( const KCal::DateList & ) ), |
355 | mNavigatorBar, SLOT( selectDates( const KCal::DateList & ) ) ); | 355 | mNavigatorBar, SLOT( selectDates( const KCal::DateList & ) ) ); |
356 | 356 | ||
357 | connect( mDateNavigator, SIGNAL( weekClicked( const QDate & ) ), | 357 | connect( mDateNavigator, SIGNAL( weekClicked( const QDate & ) ), |
358 | mNavigator, SLOT( selectWeek( const QDate & ) ) ); | 358 | mNavigator, SLOT( selectWeek( const QDate & ) ) ); |
359 | 359 | ||
360 | connect( mDateNavigator, SIGNAL( goPrevYear() ), | 360 | connect( mDateNavigator, SIGNAL( goPrevYear() ), |
361 | mNavigator, SLOT( selectPreviousYear() ) ); | 361 | mNavigator, SLOT( selectPreviousYear() ) ); |
362 | connect( mDateNavigator, SIGNAL( goNextYear() ), | 362 | connect( mDateNavigator, SIGNAL( goNextYear() ), |
363 | mNavigator, SLOT( selectNextYear() ) ); | 363 | mNavigator, SLOT( selectNextYear() ) ); |
364 | connect( mDateNavigator, SIGNAL( goPrevMonth() ), | 364 | connect( mDateNavigator, SIGNAL( goPrevMonth() ), |
365 | mNavigator, SLOT( selectPreviousMonth() ) ); | 365 | mNavigator, SLOT( selectPreviousMonth() ) ); |
366 | connect( mDateNavigator, SIGNAL( goNextMonth() ), | 366 | connect( mDateNavigator, SIGNAL( goNextMonth() ), |
367 | mNavigator, SLOT( selectNextMonth() ) ); | 367 | mNavigator, SLOT( selectNextMonth() ) ); |
368 | 368 | ||
369 | connect( mDateNavigator, SIGNAL( goPrevious() ), | 369 | connect( mDateNavigator, SIGNAL( goPrevious() ), |
370 | mNavigator, SLOT( selectPrevious() ) ); | 370 | mNavigator, SLOT( selectPrevious() ) ); |
371 | connect( mDateNavigator, SIGNAL( goNext() ), | 371 | connect( mDateNavigator, SIGNAL( goNext() ), |
372 | mNavigator, SLOT( selectNext() ) ); | 372 | mNavigator, SLOT( selectNext() ) ); |
373 | connect( mDateNavigator, SIGNAL( monthSelected ( int ) ), | 373 | connect( mDateNavigator, SIGNAL( monthSelected ( int ) ), |
374 | mNavigator, SLOT( slotMonthSelect( int ) ) ); | 374 | mNavigator, SLOT( slotMonthSelect( int ) ) ); |
375 | connect( mNavigatorBar, SIGNAL( monthSelected ( int ) ), | 375 | connect( mNavigatorBar, SIGNAL( monthSelected ( int ) ), |
376 | mNavigator, SLOT( slotMonthSelect( int ) ) ); | 376 | mNavigator, SLOT( slotMonthSelect( int ) ) ); |
377 | 377 | ||
378 | connect( mDateNavigator, SIGNAL( datesSelected( const KCal::DateList & ) ), | 378 | connect( mDateNavigator, SIGNAL( datesSelected( const KCal::DateList & ) ), |
379 | mNavigator, SLOT( selectDates( const KCal::DateList & ) ) ); | 379 | mNavigator, SLOT( selectDates( const KCal::DateList & ) ) ); |
380 | 380 | ||
381 | connect( mDateNavigator, SIGNAL( eventDropped( Event * ) ), | 381 | connect( mDateNavigator, SIGNAL( eventDropped( Event * ) ), |
382 | SLOT( eventAdded( Event *) ) ); | 382 | SLOT( eventAdded( Event *) ) ); |
383 | 383 | ||
384 | connect(mDateNavigator,SIGNAL(dayPassed(QDate)),SLOT(updateView())); | 384 | connect(mDateNavigator,SIGNAL(dayPassed(QDate)),SLOT(updateView())); |
385 | 385 | ||
386 | connect( this, SIGNAL( configChanged() ), | 386 | connect( this, SIGNAL( configChanged() ), |
387 | mDateNavigator, SLOT( updateConfig() ) ); | 387 | mDateNavigator, SLOT( updateConfig() ) ); |
388 | 388 | ||
389 | connect( mTodoList, SIGNAL( newTodoSignal() ), | 389 | connect( mTodoList, SIGNAL( newTodoSignal() ), |
390 | SLOT( newTodo() ) ); | 390 | SLOT( newTodo() ) ); |
391 | connect( mTodoList, SIGNAL( newSubTodoSignal( Todo *) ), | 391 | connect( mTodoList, SIGNAL( newSubTodoSignal( Todo *) ), |
392 | SLOT( newSubTodo( Todo * ) ) ); | 392 | SLOT( newSubTodo( Todo * ) ) ); |
393 | connect( mTodoList, SIGNAL( editTodoSignal( Todo * ) ), | 393 | connect( mTodoList, SIGNAL( editTodoSignal( Todo * ) ), |
394 | SLOT( editTodo( Todo * ) ) ); | 394 | SLOT( editTodo( Todo * ) ) ); |
395 | connect( mTodoList, SIGNAL( showTodoSignal( Todo * ) ), | 395 | connect( mTodoList, SIGNAL( showTodoSignal( Todo * ) ), |
396 | SLOT( showTodo( Todo *) ) ); | 396 | SLOT( showTodo( Todo *) ) ); |
397 | connect( mTodoList, SIGNAL( deleteTodoSignal( Todo *) ), | 397 | connect( mTodoList, SIGNAL( deleteTodoSignal( Todo *) ), |
398 | SLOT( deleteTodo( Todo *) ) ); | 398 | SLOT( deleteTodo( Todo *) ) ); |
399 | connect( this, SIGNAL( configChanged()), mTodoList, SLOT( updateConfig() ) ); | 399 | connect( this, SIGNAL( configChanged()), mTodoList, SLOT( updateConfig() ) ); |
400 | connect( mTodoList, SIGNAL( purgeCompletedSignal() ), | 400 | connect( mTodoList, SIGNAL( purgeCompletedSignal() ), |
401 | SLOT( purgeCompleted() ) ); | 401 | SLOT( purgeCompleted() ) ); |
402 | connect( mTodoList, SIGNAL( todoModifiedSignal( Todo *, int ) ), | 402 | connect( mTodoList, SIGNAL( todoModifiedSignal( Todo *, int ) ), |
403 | SIGNAL( todoModified( Todo *, int ) ) ); | 403 | SIGNAL( todoModified( Todo *, int ) ) ); |
404 | 404 | ||
405 | connect( mTodoList, SIGNAL( cloneTodoSignal( Incidence * ) ), | 405 | connect( mTodoList, SIGNAL( cloneTodoSignal( Incidence * ) ), |
406 | this, SLOT ( cloneIncidence( Incidence * ) ) ); | 406 | this, SLOT ( cloneIncidence( Incidence * ) ) ); |
407 | connect( mTodoList, SIGNAL( cancelTodoSignal( Incidence * ) ), | 407 | connect( mTodoList, SIGNAL( cancelTodoSignal( Incidence * ) ), |
408 | this, SLOT (cancelIncidence( Incidence * ) ) ); | 408 | this, SLOT (cancelIncidence( Incidence * ) ) ); |
409 | 409 | ||
410 | connect( mTodoList, SIGNAL( moveTodoSignal( Incidence * ) ), | 410 | connect( mTodoList, SIGNAL( moveTodoSignal( Incidence * ) ), |
411 | this, SLOT ( moveIncidence( Incidence * ) ) ); | 411 | this, SLOT ( moveIncidence( Incidence * ) ) ); |
412 | connect( mTodoList, SIGNAL( beamTodoSignal( Incidence * ) ), | 412 | connect( mTodoList, SIGNAL( beamTodoSignal( Incidence * ) ), |
413 | this, SLOT ( beamIncidence( Incidence * ) ) ); | 413 | this, SLOT ( beamIncidence( Incidence * ) ) ); |
414 | 414 | ||
415 | connect( mTodoList, SIGNAL( unparentTodoSignal( Todo * ) ), | 415 | connect( mTodoList, SIGNAL( unparentTodoSignal( Todo * ) ), |
416 | this, SLOT ( todo_unsub( Todo * ) ) ); | 416 | this, SLOT ( todo_unsub( Todo * ) ) ); |
417 | 417 | ||
418 | connect( this, SIGNAL( todoModified( Todo *, int )), mTodoList, | 418 | connect( this, SIGNAL( todoModified( Todo *, int )), mTodoList, |
419 | SLOT( updateTodo( Todo *, int ) ) ); | 419 | SLOT( updateTodo( Todo *, int ) ) ); |
420 | connect( this, SIGNAL( todoModified( Todo *, int )), this, | 420 | connect( this, SIGNAL( todoModified( Todo *, int )), this, |
421 | SLOT( changeTodoDisplay( Todo *, int ) ) ); | 421 | SLOT( changeTodoDisplay( Todo *, int ) ) ); |
422 | 422 | ||
423 | 423 | ||
424 | connect( mFilterView, SIGNAL( filterChanged() ), SLOT( updateFilter() ) ); | 424 | connect( mFilterView, SIGNAL( filterChanged() ), SLOT( updateFilter() ) ); |
425 | connect( mFilterView, SIGNAL( editFilters() ), SLOT( editFilters() ) ); | 425 | connect( mFilterView, SIGNAL( editFilters() ), SLOT( editFilters() ) ); |
426 | connect( mCalendar, SIGNAL( addAlarm(const QDateTime &, const QString & ) ), SLOT( addAlarm(const QDateTime &, const QString & ) ) ); | 426 | connect( mCalendar, SIGNAL( addAlarm(const QDateTime &, const QString & ) ), SLOT( addAlarm(const QDateTime &, const QString & ) ) ); |
427 | connect( mCalendar, SIGNAL( removeAlarm(const QDateTime &, const QString & ) ), SLOT( removeAlarm(const QDateTime &, const QString & ) ) ); | 427 | connect( mCalendar, SIGNAL( removeAlarm(const QDateTime &, const QString & ) ), SLOT( removeAlarm(const QDateTime &, const QString & ) ) ); |
428 | 428 | ||
429 | 429 | ||
430 | 430 | ||
431 | 431 | ||
432 | 432 | ||
433 | connect(QApplication::clipboard(),SIGNAL(dataChanged()), | 433 | connect(QApplication::clipboard(),SIGNAL(dataChanged()), |
434 | SLOT(checkClipboard())); | 434 | SLOT(checkClipboard())); |
435 | connect( mTodoList,SIGNAL( incidenceSelected( Incidence * ) ), | 435 | connect( mTodoList,SIGNAL( incidenceSelected( Incidence * ) ), |
436 | SLOT( processTodoListSelection( Incidence * ) ) ); | 436 | SLOT( processTodoListSelection( Incidence * ) ) ); |
437 | connect(mTodoList,SIGNAL(isModified(bool)),SLOT(setModified(bool))); | 437 | connect(mTodoList,SIGNAL(isModified(bool)),SLOT(setModified(bool))); |
438 | 438 | ||
439 | // kdDebug() << "CalendarView::CalendarView() done" << endl; | 439 | // kdDebug() << "CalendarView::CalendarView() done" << endl; |
440 | 440 | ||
441 | mDateFrame = new QVBox(0,0,WType_Popup); | 441 | mDateFrame = new QVBox(0,0,WType_Popup); |
442 | //mDateFrame->setFrameStyle(QFrame::PopupPanel | QFrame::Raised); | 442 | //mDateFrame->setFrameStyle(QFrame::PopupPanel | QFrame::Raised); |
443 | mDateFrame->setFrameStyle( QFrame::WinPanel |QFrame::Raised ); | 443 | mDateFrame->setFrameStyle( QFrame::WinPanel |QFrame::Raised ); |
444 | mDateFrame->setLineWidth(3); | 444 | mDateFrame->setLineWidth(3); |
445 | mDateFrame->hide(); | 445 | mDateFrame->hide(); |
446 | mDateFrame->setCaption( i18n( "Pick a date to display")); | 446 | mDateFrame->setCaption( i18n( "Pick a date to display")); |
447 | mDatePicker = new KDatePicker ( mDateFrame , QDate::currentDate() ); | 447 | mDatePicker = new KDatePicker ( mDateFrame , QDate::currentDate() ); |
448 | 448 | ||
449 | connect(mDatePicker,SIGNAL(dateSelected(QDate)),SLOT(slotSelectPickerDate(QDate))); | 449 | connect(mDatePicker,SIGNAL(dateSelected(QDate)),SLOT(slotSelectPickerDate(QDate))); |
450 | 450 | ||
451 | mEventEditor = mDialogManager->getEventEditor(); | 451 | mEventEditor = mDialogManager->getEventEditor(); |
452 | mTodoEditor = mDialogManager->getTodoEditor(); | 452 | mTodoEditor = mDialogManager->getTodoEditor(); |
453 | 453 | ||
454 | mFlagEditDescription = false; | 454 | mFlagEditDescription = false; |
455 | 455 | ||
456 | mSuspendTimer = new QTimer( this ); | 456 | mSuspendTimer = new QTimer( this ); |
457 | mAlarmTimer = new QTimer( this ); | 457 | mAlarmTimer = new QTimer( this ); |
458 | mRecheckAlarmTimer = new QTimer( this ); | ||
459 | connect( mRecheckAlarmTimer, SIGNAL( timeout () ), SLOT( recheckTimerAlarm() ) ); | ||
458 | connect( mSuspendTimer, SIGNAL( timeout () ), SLOT( suspendAlarm() ) ); | 460 | connect( mSuspendTimer, SIGNAL( timeout () ), SLOT( suspendAlarm() ) ); |
459 | connect( mAlarmTimer, SIGNAL( timeout () ), SLOT( timerAlarm() ) ); | 461 | connect( mAlarmTimer, SIGNAL( timeout () ), SLOT( timerAlarm() ) ); |
460 | mAlarmDialog = new AlarmDialog( this ); | 462 | mAlarmDialog = new AlarmDialog( this ); |
461 | connect( mAlarmDialog, SIGNAL( addAlarm(const QDateTime &, const QString & ) ), SLOT( addSuspendAlarm(const QDateTime &, const QString & ) ) ); | 463 | connect( mAlarmDialog, SIGNAL( addAlarm(const QDateTime &, const QString & ) ), SLOT( addSuspendAlarm(const QDateTime &, const QString & ) ) ); |
462 | mAlarmDialog->setServerNotification( false ); | 464 | mAlarmDialog->setServerNotification( false ); |
463 | mAlarmDialog->setSuspendTime( KOPrefs::instance()->mAlarmSuspendTime ); | 465 | mAlarmDialog->setSuspendTime( KOPrefs::instance()->mAlarmSuspendTime ); |
464 | } | 466 | } |
465 | 467 | ||
466 | 468 | ||
467 | CalendarView::~CalendarView() | 469 | CalendarView::~CalendarView() |
468 | { | 470 | { |
469 | // kdDebug() << "~CalendarView()" << endl; | 471 | // kdDebug() << "~CalendarView()" << endl; |
470 | //qDebug("CalendarView::~CalendarView() "); | 472 | //qDebug("CalendarView::~CalendarView() "); |
471 | delete mDialogManager; | 473 | delete mDialogManager; |
472 | delete mViewManager; | 474 | delete mViewManager; |
473 | delete mStorage; | 475 | delete mStorage; |
474 | delete mDateFrame ; | 476 | delete mDateFrame ; |
475 | delete beamDialog; | 477 | delete beamDialog; |
476 | //kdDebug() << "~CalendarView() done" << endl; | 478 | //kdDebug() << "~CalendarView() done" << endl; |
477 | } | 479 | } |
478 | void CalendarView::timerAlarm() | 480 | void CalendarView::timerAlarm() |
479 | { | 481 | { |
480 | //qDebug("CalendarView::timerAlarm() "); | 482 | //qDebug("CalendarView::timerAlarm() "); |
481 | computeAlarm(mAlarmNotification ); | 483 | computeAlarm(mAlarmNotification ); |
482 | } | 484 | } |
483 | 485 | ||
484 | void CalendarView::suspendAlarm() | 486 | void CalendarView::suspendAlarm() |
485 | { | 487 | { |
486 | //qDebug(" CalendarView::suspendAlarm() "); | 488 | //qDebug(" CalendarView::suspendAlarm() "); |
487 | computeAlarm(mSuspendAlarmNotification ); | 489 | computeAlarm(mSuspendAlarmNotification ); |
488 | 490 | ||
489 | } | 491 | } |
490 | 492 | ||
491 | void CalendarView::startAlarm( QString mess , QString filename) | 493 | void CalendarView::startAlarm( QString mess , QString filename) |
492 | { | 494 | { |
493 | mAlarmDialog->eventNotification( mess, KOPrefs::instance()->mAlarmPlayBeeps, filename, true,KOPrefs::instance()->mAlarmBeepInterval ,KOPrefs::instance()->mAlarmSuspendCount ); | 495 | mAlarmDialog->eventNotification( mess, KOPrefs::instance()->mAlarmPlayBeeps, filename, true,KOPrefs::instance()->mAlarmBeepInterval ,KOPrefs::instance()->mAlarmSuspendCount ); |
496 | QTimer::singleShot( 3000, this, SLOT( checkNextTimerAlarm() ) ); | ||
494 | 497 | ||
495 | } | 498 | } |
496 | 499 | ||
500 | void CalendarView::checkNextTimerAlarm() | ||
501 | { | ||
502 | mCalendar->checkAlarmForIncidence( 0, true ); | ||
503 | } | ||
497 | 504 | ||
498 | void CalendarView::computeAlarm( QString msg ) | 505 | void CalendarView::computeAlarm( QString msg ) |
499 | { | 506 | { |
500 | 507 | ||
501 | QString mess = msg; | 508 | QString mess = msg; |
502 | QString mAlarmMessage = mess.mid( 9 ); | 509 | QString mAlarmMessage = mess.mid( 9 ); |
503 | QString filename = MainWindow::resourcePath(); | 510 | QString filename = MainWindow::resourcePath(); |
504 | filename += "koalarm.wav"; | 511 | filename += "koalarm.wav"; |
505 | QString tempfilename; | 512 | QString tempfilename; |
506 | if ( mess.left( 13 ) == "suspend_alarm") { | 513 | if ( mess.left( 13 ) == "suspend_alarm") { |
507 | bool error = false; | 514 | bool error = false; |
508 | int len = mess.mid( 13 ).find("+++"); | 515 | int len = mess.mid( 13 ).find("+++"); |
509 | if ( len < 2 ) | 516 | if ( len < 2 ) |
510 | error = true; | 517 | error = true; |
511 | else { | 518 | else { |
512 | tempfilename = mess.mid( 13, len ); | 519 | tempfilename = mess.mid( 13, len ); |
513 | if ( !QFile::exists( tempfilename ) ) | 520 | if ( !QFile::exists( tempfilename ) ) |
514 | error = true; | 521 | error = true; |
515 | } | 522 | } |
516 | if ( ! error ) { | 523 | if ( ! error ) { |
517 | filename = tempfilename; | 524 | filename = tempfilename; |
518 | } | 525 | } |
519 | mAlarmMessage = mess.mid( 13+len+3 ); | 526 | mAlarmMessage = mess.mid( 13+len+3 ); |
520 | //qDebug("suspend file %s ",tempfilename.latin1() ); | 527 | //qDebug("suspend file %s ",tempfilename.latin1() ); |
521 | startAlarm( mAlarmMessage, filename); | 528 | startAlarm( mAlarmMessage, filename); |
522 | return; | 529 | return; |
523 | } | 530 | } |
524 | if ( mess.left( 11 ) == "timer_alarm") { | 531 | if ( mess.left( 11 ) == "timer_alarm") { |
525 | //mTimerTime = 0; | 532 | //mTimerTime = 0; |
526 | startAlarm( mess.mid( 11 ), filename ); | 533 | startAlarm( mess.mid( 11 ), filename ); |
527 | return; | 534 | return; |
528 | } | 535 | } |
529 | if ( mess.left( 10 ) == "proc_alarm") { | 536 | if ( mess.left( 10 ) == "proc_alarm") { |
530 | bool error = false; | 537 | bool error = false; |
531 | int len = mess.mid( 10 ).find("+++"); | 538 | int len = mess.mid( 10 ).find("+++"); |
532 | if ( len < 2 ) | 539 | if ( len < 2 ) |
533 | error = true; | 540 | error = true; |
534 | else { | 541 | else { |
535 | tempfilename = mess.mid( 10, len ); | 542 | tempfilename = mess.mid( 10, len ); |
536 | if ( !QFile::exists( tempfilename ) ) | 543 | if ( !QFile::exists( tempfilename ) ) |
537 | error = true; | 544 | error = true; |
538 | } | 545 | } |
539 | if ( error ) { | 546 | if ( error ) { |
540 | mAlarmMessage = "Procedure Alarm\nError - File not found\n"; | 547 | mAlarmMessage = "Procedure Alarm\nError - File not found\n"; |
541 | mAlarmMessage += mess.mid( 10+len+3+9 ); | 548 | mAlarmMessage += mess.mid( 10+len+3+9 ); |
542 | } else { | 549 | } else { |
543 | //QCopEnvelope e("QPE/Application/kopi", "-writeFileSilent"); | 550 | //QCopEnvelope e("QPE/Application/kopi", "-writeFileSilent"); |
544 | //qDebug("-----system command %s ",tempfilename.latin1() ); | 551 | //qDebug("-----system command %s ",tempfilename.latin1() ); |
545 | #ifndef _WIN32_ | 552 | #ifndef _WIN32_ |
546 | if ( vfork () == 0 ) { | 553 | if ( vfork () == 0 ) { |
547 | execl ( tempfilename.latin1(), 0 ); | 554 | execl ( tempfilename.latin1(), 0 ); |
548 | return; | 555 | return; |
549 | } | 556 | } |
550 | #else | 557 | #else |
551 | QProcess* p = new QProcess(); | 558 | QProcess* p = new QProcess(); |
552 | p->addArgument( tempfilename.latin1() ); | 559 | p->addArgument( tempfilename.latin1() ); |
553 | p->start(); | 560 | p->start(); |
554 | return; | 561 | return; |
555 | #endif | 562 | #endif |
556 | 563 | ||
557 | return; | 564 | return; |
558 | } | 565 | } |
559 | 566 | ||
560 | //qDebug("+++++++system command %s ",tempfilename.latin1() ); | 567 | //qDebug("+++++++system command %s ",tempfilename.latin1() ); |
561 | } | 568 | } |
562 | if ( mess.left( 11 ) == "audio_alarm") { | 569 | if ( mess.left( 11 ) == "audio_alarm") { |
563 | bool error = false; | 570 | bool error = false; |
564 | int len = mess.mid( 11 ).find("+++"); | 571 | int len = mess.mid( 11 ).find("+++"); |
565 | if ( len < 2 ) | 572 | if ( len < 2 ) |
566 | error = true; | 573 | error = true; |
567 | else { | 574 | else { |
568 | tempfilename = mess.mid( 11, len ); | 575 | tempfilename = mess.mid( 11, len ); |
569 | if ( !QFile::exists( tempfilename ) ) | 576 | if ( !QFile::exists( tempfilename ) ) |
570 | error = true; | 577 | error = true; |
571 | } | 578 | } |
572 | if ( ! error ) { | 579 | if ( ! error ) { |
573 | filename = tempfilename; | 580 | filename = tempfilename; |
574 | } | 581 | } |
575 | mAlarmMessage = mess.mid( 11+len+3+9 ); | 582 | mAlarmMessage = mess.mid( 11+len+3+9 ); |
576 | //qDebug("audio file command %s ",tempfilename.latin1() ); | 583 | //qDebug("audio file command %s ",tempfilename.latin1() ); |
577 | } | 584 | } |
578 | if ( mess.left( 9 ) == "cal_alarm") { | 585 | if ( mess.left( 9 ) == "cal_alarm") { |
579 | mAlarmMessage = mess.mid( 9 ) ; | 586 | mAlarmMessage = mess.mid( 9 ) ; |
580 | } | 587 | } |
581 | 588 | ||
582 | startAlarm( mAlarmMessage, filename ); | 589 | startAlarm( mAlarmMessage, filename ); |
583 | 590 | ||
584 | 591 | ||
585 | } | 592 | } |
586 | 593 | ||
587 | void CalendarView::addSuspendAlarm(const QDateTime &qdt, const QString ¬i ) | 594 | void CalendarView::addSuspendAlarm(const QDateTime &qdt, const QString ¬i ) |
588 | { | 595 | { |
589 | //qDebug("+++++addSUSPENDAlarm %s %s ", qdt.toString().latin1() , noti.latin1() ); | 596 | //qDebug("+++++addSUSPENDAlarm %s %s ", qdt.toString().latin1() , noti.latin1() ); |
590 | 597 | ||
591 | mSuspendAlarmNotification = noti; | 598 | mSuspendAlarmNotification = noti; |
592 | int ms = QDateTime::currentDateTime().secsTo( qdt )*1000; | 599 | int ms = QDateTime::currentDateTime().secsTo( qdt )*1000; |
593 | //qDebug("Suspend Alarm timer started with secs: %d ", ms/1000); | 600 | //qDebug("Suspend Alarm timer started with secs: %d ", ms/1000); |
594 | mSuspendTimer->start( ms , true ); | 601 | mSuspendTimer->start( ms , true ); |
595 | 602 | ||
596 | } | 603 | } |
597 | 604 | ||
598 | void CalendarView::addAlarm(const QDateTime &qdt, const QString ¬i ) | 605 | void CalendarView::addAlarm(const QDateTime &qdt, const QString ¬i ) |
599 | { | 606 | { |
600 | //qDebug("+++++addAlarm %s %s ", qdt.toString().latin1() , noti.latin1() ); | 607 | //qDebug("+++++addAlarm %s %s ", qdt.toString().latin1() , noti.latin1() ); |
601 | if ( ! KOPrefs::instance()->mUseInternalAlarmNotification ) { | 608 | if ( ! KOPrefs::instance()->mUseInternalAlarmNotification ) { |
602 | #ifndef DESKTOP_VERSION | 609 | #ifndef DESKTOP_VERSION |
603 | AlarmServer::addAlarm ( qdt,"koalarm", noti.latin1() ); | 610 | AlarmServer::addAlarm ( qdt,"koalarm", noti.latin1() ); |
604 | #endif | 611 | #endif |
605 | return; | 612 | return; |
606 | } | 613 | } |
614 | int maxSec; | ||
615 | //maxSec = 5; //testing only | ||
616 | maxSec = 86400+3600; // one day+1hour | ||
607 | mAlarmNotification = noti; | 617 | mAlarmNotification = noti; |
608 | int ms = QDateTime::currentDateTime().secsTo( qdt )*1000; | 618 | int sec = QDateTime::currentDateTime().secsTo( qdt ); |
609 | //qDebug("Alarm timer started with secs: %d ", ms/1000); | 619 | if ( sec > maxSec ) { |
610 | mAlarmTimer->start( ms , true ); | 620 | mRecheckAlarmTimer->start( maxSec * 1000 ); |
621 | // qDebug("recheck Alarm timer started with secs: %d next alarm in sec:%d", maxSec,sec ); | ||
622 | return; | ||
623 | } else { | ||
624 | mRecheckAlarmTimer->stop(); | ||
625 | } | ||
626 | //qDebug("Alarm timer started with secs: %d ", sec); | ||
627 | mAlarmTimer->start( sec *1000 , true ); | ||
611 | 628 | ||
612 | } | 629 | } |
630 | // called by mRecheckAlarmTimer to get next alarm | ||
631 | // we need this, because a QTimer has only a max range of 25 days | ||
632 | void CalendarView::recheckTimerAlarm() | ||
633 | { | ||
634 | mAlarmTimer->stop(); | ||
635 | mRecheckAlarmTimer->stop(); | ||
636 | mCalendar->checkAlarmForIncidence( 0, true ); | ||
637 | } | ||
613 | void CalendarView::removeAlarm(const QDateTime &qdt, const QString ¬i ) | 638 | void CalendarView::removeAlarm(const QDateTime &qdt, const QString ¬i ) |
614 | { | 639 | { |
615 | //qDebug("-----removeAlarm %s %s ", qdt.toString().latin1() , noti.latin1() ); | 640 | //qDebug("-----removeAlarm %s %s ", qdt.toString().latin1() , noti.latin1() ); |
616 | if ( ! KOPrefs::instance()->mUseInternalAlarmNotification ) { | 641 | if ( ! KOPrefs::instance()->mUseInternalAlarmNotification ) { |
617 | #ifndef DESKTOP_VERSION | 642 | #ifndef DESKTOP_VERSION |
618 | AlarmServer::deleteAlarm (qdt ,"koalarm" ,noti.latin1() ); | 643 | AlarmServer::deleteAlarm (qdt ,"koalarm" ,noti.latin1() ); |
619 | #endif | 644 | #endif |
620 | return; | 645 | return; |
621 | } | 646 | } |
622 | mAlarmTimer->stop(); | 647 | mAlarmTimer->stop(); |
623 | } | 648 | } |
624 | void CalendarView::selectWeekNum ( int num ) | 649 | void CalendarView::selectWeekNum ( int num ) |
625 | { | 650 | { |
626 | dateNavigator()->selectWeek( num ); | 651 | dateNavigator()->selectWeek( num ); |
627 | mViewManager->showWeekView(); | 652 | mViewManager->showWeekView(); |
628 | } | 653 | } |
629 | KOViewManager *CalendarView::viewManager() | 654 | KOViewManager *CalendarView::viewManager() |
630 | { | 655 | { |
631 | return mViewManager; | 656 | return mViewManager; |
632 | } | 657 | } |
633 | 658 | ||
634 | KODialogManager *CalendarView::dialogManager() | 659 | KODialogManager *CalendarView::dialogManager() |
635 | { | 660 | { |
636 | return mDialogManager; | 661 | return mDialogManager; |
637 | } | 662 | } |
638 | 663 | ||
639 | QDate CalendarView::startDate() | 664 | QDate CalendarView::startDate() |
640 | { | 665 | { |
641 | DateList dates = mNavigator->selectedDates(); | 666 | DateList dates = mNavigator->selectedDates(); |
642 | 667 | ||
643 | return dates.first(); | 668 | return dates.first(); |
644 | } | 669 | } |
645 | 670 | ||
646 | QDate CalendarView::endDate() | 671 | QDate CalendarView::endDate() |
647 | { | 672 | { |
648 | DateList dates = mNavigator->selectedDates(); | 673 | DateList dates = mNavigator->selectedDates(); |
649 | 674 | ||
650 | return dates.last(); | 675 | return dates.last(); |
651 | } | 676 | } |
652 | 677 | ||
653 | 678 | ||
654 | void CalendarView::createPrinter() | 679 | void CalendarView::createPrinter() |
655 | { | 680 | { |
656 | #ifndef KORG_NOPRINTER | 681 | #ifndef KORG_NOPRINTER |
657 | if (!mCalPrinter) { | 682 | if (!mCalPrinter) { |
658 | mCalPrinter = new CalPrinter(this, mCalendar); | 683 | mCalPrinter = new CalPrinter(this, mCalendar); |
659 | connect(this, SIGNAL(configChanged()), mCalPrinter, SLOT(updateConfig())); | 684 | connect(this, SIGNAL(configChanged()), mCalPrinter, SLOT(updateConfig())); |
660 | } | 685 | } |
661 | #endif | 686 | #endif |
662 | } | 687 | } |
663 | 688 | ||
664 | void CalendarView::confSync() | 689 | void CalendarView::confSync() |
665 | { | 690 | { |
666 | static KOSyncPrefsDialog* sp = 0; | 691 | static KOSyncPrefsDialog* sp = 0; |
667 | if ( ! sp ) { | 692 | if ( ! sp ) { |
668 | sp = new KOSyncPrefsDialog( this, "syncprefs", true ); | 693 | sp = new KOSyncPrefsDialog( this, "syncprefs", true ); |
669 | } | 694 | } |
670 | sp->usrReadConfig(); | 695 | sp->usrReadConfig(); |
671 | #ifndef DESKTOP_VERSION | 696 | #ifndef DESKTOP_VERSION |
672 | sp->showMaximized(); | 697 | sp->showMaximized(); |
673 | #else | 698 | #else |
674 | sp->show(); | 699 | sp->show(); |
675 | #endif | 700 | #endif |
676 | sp->exec(); | 701 | sp->exec(); |
677 | 702 | ||
678 | } | 703 | } |
679 | 704 | ||
680 | 705 | ||
681 | //KOPrefs::instance()->mWriteBackFile | 706 | //KOPrefs::instance()->mWriteBackFile |
682 | //KOPrefs::instance()->mWriteBackExistingOnly | 707 | //KOPrefs::instance()->mWriteBackExistingOnly |
683 | 708 | ||
684 | // 0 syncPrefsGroup->addRadio(i18n("Take local entry on conflict")); | 709 | // 0 syncPrefsGroup->addRadio(i18n("Take local entry on conflict")); |
685 | // 1 syncPrefsGroup->addRadio(i18n("Take remote entry on conflict")); | 710 | // 1 syncPrefsGroup->addRadio(i18n("Take remote entry on conflict")); |
686 | // 2 syncPrefsGroup->addRadio(i18n("Take newest entry on conflict")); | 711 | // 2 syncPrefsGroup->addRadio(i18n("Take newest entry on conflict")); |
687 | // 3 syncPrefsGroup->addRadio(i18n("Ask for every entry on conflict")); | 712 | // 3 syncPrefsGroup->addRadio(i18n("Ask for every entry on conflict")); |
688 | // 4 syncPrefsGroup->addRadio(i18n("Force take local entry always")); | 713 | // 4 syncPrefsGroup->addRadio(i18n("Force take local entry always")); |
689 | // 5 syncPrefsGroup->addRadio(i18n("Force take remote entry always")); | 714 | // 5 syncPrefsGroup->addRadio(i18n("Force take remote entry always")); |
690 | 715 | ||
691 | int CalendarView::takeEvent( Incidence* local, Incidence* remote, int mode , bool full ) | 716 | int CalendarView::takeEvent( Incidence* local, Incidence* remote, int mode , bool full ) |
692 | { | 717 | { |
693 | 718 | ||
694 | //void setZaurusId(int id); | 719 | //void setZaurusId(int id); |
695 | // int zaurusId() const; | 720 | // int zaurusId() const; |
696 | // void setZaurusUid(int id); | 721 | // void setZaurusUid(int id); |
697 | // int zaurusUid() const; | 722 | // int zaurusUid() const; |
698 | // void setZaurusStat(int id); | 723 | // void setZaurusStat(int id); |
699 | // int zaurusStat() const; | 724 | // int zaurusStat() const; |
700 | // 0 equal | 725 | // 0 equal |
701 | // 1 take local | 726 | // 1 take local |
702 | // 2 take remote | 727 | // 2 take remote |
703 | // 3 cancel | 728 | // 3 cancel |
704 | QDateTime lastSync = mLastCalendarSync; | 729 | QDateTime lastSync = mLastCalendarSync; |
705 | if ( mGlobalSyncMode == SYNC_MODE_SHARP ) { | 730 | if ( mGlobalSyncMode == SYNC_MODE_SHARP ) { |
706 | bool remCh, locCh; | 731 | bool remCh, locCh; |
707 | remCh = ( remote->zaurusUid() != local->zaurusUid() ); | 732 | remCh = ( remote->zaurusUid() != local->zaurusUid() ); |
708 | locCh = ( local->zaurusStat() != local->revision() ); | 733 | locCh = ( local->zaurusStat() != local->revision() ); |
709 | //qDebug("locCh %d remCh %d locuid %d remuid %d", locCh, remCh,local->zaurusUid(), remote->zaurusUid() ); | 734 | //qDebug("locCh %d remCh %d locuid %d remuid %d", locCh, remCh,local->zaurusUid(), remote->zaurusUid() ); |
710 | if ( !remCh && ! locCh ) { | 735 | if ( !remCh && ! locCh ) { |
711 | //qDebug("both not changed "); | 736 | //qDebug("both not changed "); |
712 | lastSync = local->lastModified().addDays(1); | 737 | lastSync = local->lastModified().addDays(1); |
713 | } else { | 738 | } else { |
714 | if ( locCh ) { | 739 | if ( locCh ) { |
715 | //qDebug("loc changed %d %d", local->zaurusStat(), local->revision() ); | 740 | //qDebug("loc changed %d %d", local->zaurusStat(), local->revision() ); |
716 | lastSync = local->lastModified().addDays( -1 ); | 741 | lastSync = local->lastModified().addDays( -1 ); |
717 | if ( !remCh ) | 742 | if ( !remCh ) |
718 | remote->setLastModified( lastSync.addDays( -1 ) ); | 743 | remote->setLastModified( lastSync.addDays( -1 ) ); |
719 | } else { | 744 | } else { |
720 | //qDebug(" not loc changed "); | 745 | //qDebug(" not loc changed "); |
721 | lastSync = local->lastModified().addDays( 1 ); | 746 | lastSync = local->lastModified().addDays( 1 ); |
722 | if ( remCh ) | 747 | if ( remCh ) |
723 | remote->setLastModified( lastSync.addDays( 1 ) ); | 748 | remote->setLastModified( lastSync.addDays( 1 ) ); |
724 | 749 | ||
725 | } | 750 | } |
726 | } | 751 | } |
727 | full = true; | 752 | full = true; |
728 | if ( mode < 3 ) | 753 | if ( mode < 3 ) |
729 | mode = 3; | 754 | mode = 3; |
730 | } else { | 755 | } else { |
731 | if ( local->lastModified() == remote->lastModified() ) | 756 | if ( local->lastModified() == remote->lastModified() ) |
732 | if ( local->revision() == remote->revision() ) | 757 | if ( local->revision() == remote->revision() ) |
733 | return 0; | 758 | return 0; |
734 | 759 | ||
735 | } | 760 | } |
736 | // qDebug(" %d %d conflict on %s %s ", mode, full, local->summary().latin1(), remote->summary().latin1() ); | 761 | // qDebug(" %d %d conflict on %s %s ", mode, full, local->summary().latin1(), remote->summary().latin1() ); |
737 | 762 | ||
738 | //qDebug("%s %d %s %d", local->lastModified().toString().latin1() , local->revision(), remote->lastModified().toString().latin1(), remote->revision()); | 763 | //qDebug("%s %d %s %d", local->lastModified().toString().latin1() , local->revision(), remote->lastModified().toString().latin1(), remote->revision()); |
739 | //qDebug("%d %d %d %d ", local->lastModified().time().second(), local->lastModified().time().msec(), remote->lastModified().time().second(), remote->lastModified().time().msec() ); | 764 | //qDebug("%d %d %d %d ", local->lastModified().time().second(), local->lastModified().time().msec(), remote->lastModified().time().second(), remote->lastModified().time().msec() ); |
740 | //full = true; //debug only | 765 | //full = true; //debug only |
741 | if ( full ) { | 766 | if ( full ) { |
742 | bool equ = false; | 767 | bool equ = false; |
743 | if ( local->type() == "Event" ) { | 768 | if ( local->type() == "Event" ) { |
744 | equ = (*((Event*) local) == *((Event*) remote)); | 769 | equ = (*((Event*) local) == *((Event*) remote)); |
745 | } | 770 | } |
746 | else if ( local->type() =="Todo" ) | 771 | else if ( local->type() =="Todo" ) |
747 | equ = (*((Todo*) local) == (*(Todo*) remote)); | 772 | equ = (*((Todo*) local) == (*(Todo*) remote)); |
748 | else if ( local->type() =="Journal" ) | 773 | else if ( local->type() =="Journal" ) |
749 | equ = (*((Journal*) local) == *((Journal*) remote)); | 774 | equ = (*((Journal*) local) == *((Journal*) remote)); |
750 | if ( equ ) { | 775 | if ( equ ) { |
751 | //qDebug("equal "); | 776 | //qDebug("equal "); |
752 | if ( mGlobalSyncMode == SYNC_MODE_SHARP ) { | 777 | if ( mGlobalSyncMode == SYNC_MODE_SHARP ) { |
753 | local->setZaurusUid( remote->zaurusUid() ); | 778 | local->setZaurusUid( remote->zaurusUid() ); |
754 | } | 779 | } |
755 | if ( mode < 4 ) | 780 | if ( mode < 4 ) |
756 | return 0; | 781 | return 0; |
757 | 782 | ||
758 | }//else //debug only | 783 | }//else //debug only |
759 | //qDebug("not equal %s %s ", local->summary().latin1(), remote->summary().latin1()); | 784 | //qDebug("not equal %s %s ", local->summary().latin1(), remote->summary().latin1()); |
760 | } | 785 | } |
761 | int result; | 786 | int result; |
762 | bool localIsNew; | 787 | bool localIsNew; |
763 | if ( full && mode < 2 ) | 788 | if ( full && mode < 2 ) |
764 | mode = 3; | 789 | mode = 3; |
765 | 790 | ||
766 | switch( mode ) { | 791 | switch( mode ) { |
767 | case 0: | 792 | case 0: |
768 | if ( lastSync > remote->lastModified() ) | 793 | if ( lastSync > remote->lastModified() ) |
769 | return 1; | 794 | return 1; |
770 | if ( lastSync > local->lastModified() ) | 795 | if ( lastSync > local->lastModified() ) |
771 | return 2; | 796 | return 2; |
772 | return 1; | 797 | return 1; |
773 | break; | 798 | break; |
774 | case 1: | 799 | case 1: |
775 | if ( lastSync > remote->lastModified() ) | 800 | if ( lastSync > remote->lastModified() ) |
776 | return 1; | 801 | return 1; |
777 | if ( lastSync > local->lastModified() ) | 802 | if ( lastSync > local->lastModified() ) |
778 | return 2; | 803 | return 2; |
779 | return 2; | 804 | return 2; |
780 | break; | 805 | break; |
781 | case 2: | 806 | case 2: |
782 | if ( local->lastModified() > remote->lastModified() ) | 807 | if ( local->lastModified() > remote->lastModified() ) |
783 | return 1; | 808 | return 1; |
784 | else | 809 | else |
785 | return 2; | 810 | return 2; |
786 | break; | 811 | break; |
787 | case 3: | 812 | case 3: |
788 | //qDebug("lsy %s --- lo %s --- re %s ", lastSync.toString().latin1(), local->lastModified().toString().latin1(), remote->lastModified().toString().latin1() ); | 813 | //qDebug("lsy %s --- lo %s --- re %s ", lastSync.toString().latin1(), local->lastModified().toString().latin1(), remote->lastModified().toString().latin1() ); |
789 | if ( lastSync > remote->lastModified() ) | 814 | if ( lastSync > remote->lastModified() ) |
790 | return 1; | 815 | return 1; |
791 | if ( lastSync > local->lastModified() ) | 816 | if ( lastSync > local->lastModified() ) |
792 | return 2; | 817 | return 2; |
793 | //qDebug("lsy %s --- lo %s --- re %s ", lastSync.toString().latin1(), local->lastModified().toString().latin1(), remote->lastModified().toString().latin1() ); | 818 | //qDebug("lsy %s --- lo %s --- re %s ", lastSync.toString().latin1(), local->lastModified().toString().latin1(), remote->lastModified().toString().latin1() ); |
794 | localIsNew = local->lastModified() > remote->lastModified(); | 819 | localIsNew = local->lastModified() > remote->lastModified(); |
795 | if ( localIsNew ) | 820 | if ( localIsNew ) |
796 | getEventViewerDialog()->setColorMode( 1 ); | 821 | getEventViewerDialog()->setColorMode( 1 ); |
797 | else | 822 | else |
798 | getEventViewerDialog()->setColorMode( 2 ); | 823 | getEventViewerDialog()->setColorMode( 2 ); |
799 | getEventViewerDialog()->setIncidence(local); | 824 | getEventViewerDialog()->setIncidence(local); |
800 | if ( localIsNew ) | 825 | if ( localIsNew ) |
801 | getEventViewerDialog()->setColorMode( 2 ); | 826 | getEventViewerDialog()->setColorMode( 2 ); |
802 | else | 827 | else |
803 | getEventViewerDialog()->setColorMode( 1 ); | 828 | getEventViewerDialog()->setColorMode( 1 ); |
804 | getEventViewerDialog()->addIncidence(remote); | 829 | getEventViewerDialog()->addIncidence(remote); |
805 | getEventViewerDialog()->setColorMode( 0 ); | 830 | getEventViewerDialog()->setColorMode( 0 ); |
806 | //qDebug("local %d remote %d ",local->relatedTo(),remote->relatedTo() ); | 831 | //qDebug("local %d remote %d ",local->relatedTo(),remote->relatedTo() ); |
807 | getEventViewerDialog()->setCaption( mCurrentSyncDevice +i18n(" : Conflict! Please choose entry!")); | 832 | getEventViewerDialog()->setCaption( mCurrentSyncDevice +i18n(" : Conflict! Please choose entry!")); |
808 | getEventViewerDialog()->showMe(); | 833 | getEventViewerDialog()->showMe(); |
809 | result = getEventViewerDialog()->executeS( localIsNew ); | 834 | result = getEventViewerDialog()->executeS( localIsNew ); |
810 | return result; | 835 | return result; |
811 | 836 | ||
812 | break; | 837 | break; |
813 | case 4: | 838 | case 4: |
814 | return 1; | 839 | return 1; |
815 | break; | 840 | break; |
816 | case 5: | 841 | case 5: |
817 | return 2; | 842 | return 2; |
818 | break; | 843 | break; |
819 | 844 | ||
820 | default: | 845 | default: |
821 | break; | 846 | break; |
822 | } | 847 | } |
823 | return 0; | 848 | return 0; |
824 | } | 849 | } |
825 | Event* CalendarView::getLastSyncEvent() | 850 | Event* CalendarView::getLastSyncEvent() |
826 | { | 851 | { |
827 | Event* lse; | 852 | Event* lse; |
828 | //qDebug("CurrentSyncDevice %s ",mCurrentSyncDevice .latin1() ); | 853 | //qDebug("CurrentSyncDevice %s ",mCurrentSyncDevice .latin1() ); |
829 | lse = mCalendar->event( "last-syncEvent-device-"+mCurrentSyncDevice ); | 854 | lse = mCalendar->event( "last-syncEvent-device-"+mCurrentSyncDevice ); |
830 | if (!lse) { | 855 | if (!lse) { |
831 | lse = new Event(); | 856 | lse = new Event(); |
832 | lse->setUid( "last-syncEvent-device-"+mCurrentSyncDevice ); | 857 | lse->setUid( "last-syncEvent-device-"+mCurrentSyncDevice ); |
833 | lse->setSummary(mCurrentSyncDevice + i18n(" - sync event")); | 858 | lse->setSummary(mCurrentSyncDevice + i18n(" - sync event")); |
834 | lse->setDtStart( mLastCalendarSync ); | 859 | lse->setDtStart( mLastCalendarSync ); |
835 | lse->setDtEnd( mLastCalendarSync.addSecs( 7200 ) ); | 860 | lse->setDtEnd( mLastCalendarSync.addSecs( 7200 ) ); |
836 | lse->setCategories( i18n("SyncEvent") ); | 861 | lse->setCategories( i18n("SyncEvent") ); |
837 | lse->setReadOnly( true ); | 862 | lse->setReadOnly( true ); |
838 | mCalendar->addEvent( lse ); | 863 | mCalendar->addEvent( lse ); |
839 | } | 864 | } |
840 | 865 | ||
841 | return lse; | 866 | return lse; |
842 | 867 | ||
843 | } | 868 | } |
844 | void CalendarView::checkSharpEvent( Event* lastSync, Incidence* toDelete ) | 869 | void CalendarView::checkSharpEvent( Event* lastSync, Incidence* toDelete ) |
845 | { | 870 | { |
846 | if ( ! lastSync ) | 871 | if ( ! lastSync ) |
847 | return; | 872 | return; |
848 | if ( toDelete->zaurusId() < 0 ) | 873 | if ( toDelete->zaurusId() < 0 ) |
849 | return; | 874 | return; |
850 | if ( toDelete->type() == "Journal" ) | 875 | if ( toDelete->type() == "Journal" ) |
851 | return; | 876 | return; |
852 | QString des = lastSync->description(); | 877 | QString des = lastSync->description(); |
853 | QString pref = "e"; | 878 | QString pref = "e"; |
854 | if ( toDelete->type() == "Todo" ) | 879 | if ( toDelete->type() == "Todo" ) |
855 | pref = "t"; | 880 | pref = "t"; |
856 | des += pref+ QString::number ( toDelete->zaurusId() ) + ","; | 881 | des += pref+ QString::number ( toDelete->zaurusId() ) + ","; |
857 | lastSync->setReadOnly( false ); | 882 | lastSync->setReadOnly( false ); |
858 | lastSync->setDescription( des ); | 883 | lastSync->setDescription( des ); |
859 | lastSync->setReadOnly( true ); | 884 | lastSync->setReadOnly( true ); |
860 | 885 | ||
861 | } | 886 | } |
862 | bool CalendarView::synchronizeCalendar( Calendar* local, Calendar* remote, int mode ) | 887 | bool CalendarView::synchronizeCalendar( Calendar* local, Calendar* remote, int mode ) |
863 | { | 888 | { |
864 | bool syncOK = true; | 889 | bool syncOK = true; |
865 | int addedEvent = 0; | 890 | int addedEvent = 0; |
866 | int addedEventR = 0; | 891 | int addedEventR = 0; |
867 | int deletedEventR = 0; | 892 | int deletedEventR = 0; |
868 | int deletedEventL = 0; | 893 | int deletedEventL = 0; |
869 | int changedLocal = 0; | 894 | int changedLocal = 0; |
870 | int changedRemote = 0; | 895 | int changedRemote = 0; |
871 | //QPtrList<Event> el = local->rawEvents(); | 896 | //QPtrList<Event> el = local->rawEvents(); |
872 | Event* eventR; | 897 | Event* eventR; |
873 | QString uid; | 898 | QString uid; |
874 | int take; | 899 | int take; |
875 | Event* eventL; | 900 | Event* eventL; |
876 | Event* eventRSync; | 901 | Event* eventRSync; |
877 | Event* eventLSync; | 902 | Event* eventLSync; |
878 | Event* eventRSyncSharp = remote->event( "last-syncEvent-device-Sharp-DTM"); | 903 | Event* eventRSyncSharp = remote->event( "last-syncEvent-device-Sharp-DTM"); |
879 | Event* eventLSyncSharp = local->event( "last-syncEvent-device-Sharp-DTM"); | 904 | Event* eventLSyncSharp = local->event( "last-syncEvent-device-Sharp-DTM"); |
880 | bool fullDateRange = false; | 905 | bool fullDateRange = false; |
881 | mLastCalendarSync = QDateTime::currentDateTime(); | 906 | mLastCalendarSync = QDateTime::currentDateTime(); |
882 | QDateTime modifiedCalendar = mLastCalendarSync;; | 907 | QDateTime modifiedCalendar = mLastCalendarSync;; |
883 | eventR = remote->event("last-syncEvent-device-"+mCurrentSyncName ); | 908 | eventR = remote->event("last-syncEvent-device-"+mCurrentSyncName ); |
884 | if ( eventR ) { | 909 | if ( eventR ) { |
885 | eventRSync = (Event*) eventR->clone(); | 910 | eventRSync = (Event*) eventR->clone(); |
886 | remote->deleteEvent(eventR ); | 911 | remote->deleteEvent(eventR ); |
887 | 912 | ||
888 | } else { | 913 | } else { |
889 | fullDateRange = true; | 914 | fullDateRange = true; |
890 | eventRSync = new Event(); | 915 | eventRSync = new Event(); |
891 | eventRSync->setSummary(mCurrentSyncName + i18n(" - sync event")); | 916 | eventRSync->setSummary(mCurrentSyncName + i18n(" - sync event")); |
892 | eventRSync->setUid("last-syncEvent-device-"+mCurrentSyncName ); | 917 | eventRSync->setUid("last-syncEvent-device-"+mCurrentSyncName ); |
893 | eventRSync->setDtStart( mLastCalendarSync ); | 918 | eventRSync->setDtStart( mLastCalendarSync ); |
894 | eventRSync->setDtEnd( mLastCalendarSync.addSecs( 7200 ) ); | 919 | eventRSync->setDtEnd( mLastCalendarSync.addSecs( 7200 ) ); |
895 | eventRSync->setCategories( i18n("SyncEvent") ); | 920 | eventRSync->setCategories( i18n("SyncEvent") ); |
896 | } | 921 | } |
897 | eventLSync = getLastSyncEvent(); | 922 | eventLSync = getLastSyncEvent(); |
898 | if ( eventLSync->dtStart() == mLastCalendarSync ) | 923 | if ( eventLSync->dtStart() == mLastCalendarSync ) |
899 | fullDateRange = true; | 924 | fullDateRange = true; |
900 | 925 | ||
901 | if ( ! fullDateRange ) { | 926 | if ( ! fullDateRange ) { |
902 | if ( eventLSync->dtStart() != eventRSync->dtStart() ) { | 927 | if ( eventLSync->dtStart() != eventRSync->dtStart() ) { |
903 | 928 | ||
904 | // qDebug("set fulldate to true %s %s" ,eventLSync->dtStart().toString().latin1(), eventRSync->dtStart().toString().latin1() ); | 929 | // qDebug("set fulldate to true %s %s" ,eventLSync->dtStart().toString().latin1(), eventRSync->dtStart().toString().latin1() ); |
905 | //qDebug("%d %d %d %d ", eventLSync->dtStart().time().second(), eventLSync->dtStart().time().msec() , eventRSync->dtStart().time().second(), eventRSync->dtStart().time().msec()); | 930 | //qDebug("%d %d %d %d ", eventLSync->dtStart().time().second(), eventLSync->dtStart().time().msec() , eventRSync->dtStart().time().second(), eventRSync->dtStart().time().msec()); |
906 | fullDateRange = true; | 931 | fullDateRange = true; |
907 | } | 932 | } |
908 | } | 933 | } |
909 | if ( fullDateRange ) | 934 | if ( fullDateRange ) |
910 | mLastCalendarSync = QDateTime::currentDateTime().addDays( -100*365); | 935 | mLastCalendarSync = QDateTime::currentDateTime().addDays( -100*365); |
911 | else | 936 | else |
912 | mLastCalendarSync = eventLSync->dtStart(); | 937 | mLastCalendarSync = eventLSync->dtStart(); |
913 | // for resyncing if own file has changed | 938 | // for resyncing if own file has changed |
914 | if ( mCurrentSyncDevice == "deleteaftersync" ) { | 939 | if ( mCurrentSyncDevice == "deleteaftersync" ) { |
915 | mLastCalendarSync = loadedFileVersion; | 940 | mLastCalendarSync = loadedFileVersion; |
916 | qDebug("setting mLastCalendarSync "); | 941 | qDebug("setting mLastCalendarSync "); |
917 | } | 942 | } |
918 | //qDebug("*************************** "); | 943 | //qDebug("*************************** "); |
919 | qDebug("mLastCalendarSync %s ",mLastCalendarSync.toString().latin1() ); | 944 | qDebug("mLastCalendarSync %s ",mLastCalendarSync.toString().latin1() ); |
920 | QPtrList<Incidence> er = remote->rawIncidences(); | 945 | QPtrList<Incidence> er = remote->rawIncidences(); |
921 | Incidence* inR = er.first(); | 946 | Incidence* inR = er.first(); |
922 | Incidence* inL; | 947 | Incidence* inL; |
923 | QProgressBar bar( er.count(),0 ); | 948 | QProgressBar bar( er.count(),0 ); |
924 | bar.setCaption (i18n("Syncing - close to abort!") ); | 949 | bar.setCaption (i18n("Syncing - close to abort!") ); |
925 | 950 | ||
926 | int w = 300; | 951 | int w = 300; |
927 | if ( QApplication::desktop()->width() < 320 ) | 952 | if ( QApplication::desktop()->width() < 320 ) |
928 | w = 220; | 953 | w = 220; |
929 | int h = bar.sizeHint().height() ; | 954 | int h = bar.sizeHint().height() ; |
930 | int dw = QApplication::desktop()->width(); | 955 | int dw = QApplication::desktop()->width(); |
931 | int dh = QApplication::desktop()->height(); | 956 | int dh = QApplication::desktop()->height(); |
932 | bar.setGeometry( (dw-w)/2, (dh - h )/2 ,w,h ); | 957 | bar.setGeometry( (dw-w)/2, (dh - h )/2 ,w,h ); |
933 | bar.show(); | 958 | bar.show(); |
934 | int modulo = (er.count()/10)+1; | 959 | int modulo = (er.count()/10)+1; |
935 | int incCounter = 0; | 960 | int incCounter = 0; |
936 | while ( inR ) { | 961 | while ( inR ) { |
937 | if ( ! bar.isVisible() ) | 962 | if ( ! bar.isVisible() ) |
938 | return false; | 963 | return false; |
939 | if ( incCounter % modulo == 0 ) | 964 | if ( incCounter % modulo == 0 ) |
940 | bar.setProgress( incCounter ); | 965 | bar.setProgress( incCounter ); |
941 | ++incCounter; | 966 | ++incCounter; |
942 | uid = inR->uid(); | 967 | uid = inR->uid(); |
943 | bool skipIncidence = false; | 968 | bool skipIncidence = false; |
944 | if ( uid.left(21) == QString("last-syncEvent-device") ) | 969 | if ( uid.left(21) == QString("last-syncEvent-device") ) |
945 | skipIncidence = true; | 970 | skipIncidence = true; |
946 | 971 | ||
947 | qApp->processEvents(); | 972 | qApp->processEvents(); |
948 | if ( !skipIncidence ) { | 973 | if ( !skipIncidence ) { |
949 | inL = local->incidence( uid ); | 974 | inL = local->incidence( uid ); |
950 | if ( inL ) { // maybe conflict - same uid in both calendars | 975 | if ( inL ) { // maybe conflict - same uid in both calendars |
951 | int maxrev = inL->revision(); | 976 | int maxrev = inL->revision(); |
952 | if ( maxrev < inR->revision() ) | 977 | if ( maxrev < inR->revision() ) |
953 | maxrev = inR->revision(); | 978 | maxrev = inR->revision(); |
954 | if ( (take = takeEvent( inL, inR, mode, fullDateRange )) > 0 ) { | 979 | if ( (take = takeEvent( inL, inR, mode, fullDateRange )) > 0 ) { |
955 | //qDebug("take %d %s ", take, inL->summary().latin1()); | 980 | //qDebug("take %d %s ", take, inL->summary().latin1()); |
956 | if ( take == 3 ) | 981 | if ( take == 3 ) |
957 | return false; | 982 | return false; |
958 | if ( take == 1 ) {// take local | 983 | if ( take == 1 ) {// take local |
959 | inL->setZaurusUid( inR->zaurusUid() ); | 984 | inL->setZaurusUid( inR->zaurusUid() ); |
960 | remote->deleteIncidence( inR ); | 985 | remote->deleteIncidence( inR ); |
961 | if ( inL->revision() < maxrev ) | 986 | if ( inL->revision() < maxrev ) |
962 | inL->setRevision( maxrev ); | 987 | inL->setRevision( maxrev ); |
963 | remote->addIncidence( inL->clone() ); | 988 | remote->addIncidence( inL->clone() ); |
964 | ++changedRemote; | 989 | ++changedRemote; |
965 | } else { | 990 | } else { |
966 | if ( inR->revision() < maxrev ) | 991 | if ( inR->revision() < maxrev ) |
967 | inR->setRevision( maxrev ); | 992 | inR->setRevision( maxrev ); |
968 | local->deleteIncidence( inL ); | 993 | local->deleteIncidence( inL ); |
969 | local->addIncidence( inR->clone() ); | 994 | local->addIncidence( inR->clone() ); |
970 | ++changedLocal; | 995 | ++changedLocal; |
971 | } | 996 | } |
972 | } | 997 | } |
973 | } else { // no conflict | 998 | } else { // no conflict |
974 | if ( mGlobalSyncMode == SYNC_MODE_SHARP ) { | 999 | if ( mGlobalSyncMode == SYNC_MODE_SHARP ) { |
975 | QString des = eventLSync->description(); | 1000 | QString des = eventLSync->description(); |
976 | QString pref = "e"; | 1001 | QString pref = "e"; |
977 | if ( inR->type() == "Todo" ) | 1002 | if ( inR->type() == "Todo" ) |
978 | pref = "t"; | 1003 | pref = "t"; |
979 | if ( des.find(pref+QString::number( inR->zaurusId() ) +"," ) >= 0 && mode != 5) { // delete it | 1004 | if ( des.find(pref+QString::number( inR->zaurusId() ) +"," ) >= 0 && mode != 5) { // delete it |
980 | inR->setZaurusStat( -3 ); | 1005 | inR->setZaurusStat( -3 ); |
981 | //remote->deleteIncidence( inR ); | 1006 | //remote->deleteIncidence( inR ); |
982 | ++deletedEventR; | 1007 | ++deletedEventR; |
983 | } else { | 1008 | } else { |
984 | inR->setLastModified( modifiedCalendar ); | 1009 | inR->setLastModified( modifiedCalendar ); |
985 | local->addIncidence( inR->clone() ); | 1010 | local->addIncidence( inR->clone() ); |
986 | ++addedEvent; | 1011 | ++addedEvent; |
987 | } | 1012 | } |
988 | } else { | 1013 | } else { |
989 | if ( inR->lastModified() > mLastCalendarSync || mode == 5 ) { | 1014 | if ( inR->lastModified() > mLastCalendarSync || mode == 5 ) { |
990 | inR->setLastModified( modifiedCalendar ); | 1015 | inR->setLastModified( modifiedCalendar ); |
991 | local->addIncidence( inR->clone() ); | 1016 | local->addIncidence( inR->clone() ); |
992 | ++addedEvent; | 1017 | ++addedEvent; |
993 | } else { | 1018 | } else { |
994 | checkSharpEvent(eventRSyncSharp, inR); | 1019 | checkSharpEvent(eventRSyncSharp, inR); |
995 | remote->deleteIncidence( inR ); | 1020 | remote->deleteIncidence( inR ); |
996 | ++deletedEventR; | 1021 | ++deletedEventR; |
diff --git a/korganizer/calendarview.h b/korganizer/calendarview.h index e7aa351..fda02f7 100644 --- a/korganizer/calendarview.h +++ b/korganizer/calendarview.h | |||
@@ -1,586 +1,588 @@ | |||
1 | /* | 1 | /* |
2 | This file is part of KOrganizer. | 2 | This file is part of KOrganizer. |
3 | Copyright (c) 2000, 2001 | 3 | Copyright (c) 2000, 2001 |
4 | Cornelius Schumacher <schumacher@kde.org> | 4 | Cornelius Schumacher <schumacher@kde.org> |
5 | 5 | ||
6 | This program is free software; you can redistribute it and/or modify | 6 | This program is free software; you can redistribute it and/or modify |
7 | it under the terms of the GNU General Public License as published by | 7 | it under the terms of the GNU General Public License as published by |
8 | the Free Software Foundation; either version 2 of the License, or | 8 | the Free Software Foundation; either version 2 of the License, or |
9 | (at your option) any later version. | 9 | (at your option) any later version. |
10 | 10 | ||
11 | This program is distributed in the hope that it will be useful, | 11 | This program is distributed in the hope that it will be useful, |
12 | but WITHOUT ANY WARRANTY; without even the implied warranty of | 12 | but WITHOUT ANY WARRANTY; without even the implied warranty of |
13 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | 13 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
14 | GNU General Public License for more details. | 14 | GNU General Public License for more details. |
15 | 15 | ||
16 | You should have received a copy of the GNU General Public License | 16 | You should have received a copy of the GNU General Public License |
17 | along with this program; if not, write to the Free Software | 17 | along with this program; if not, write to the Free Software |
18 | Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. | 18 | Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. |
19 | 19 | ||
20 | As a special exception, permission is given to link this program | 20 | As a special exception, permission is given to link this program |
21 | with any edition of Qt, and distribute the resulting executable, | 21 | with any edition of Qt, and distribute the resulting executable, |
22 | without including the source code for Qt in the source distribution. | 22 | without including the source code for Qt in the source distribution. |
23 | */ | 23 | */ |
24 | #ifndef CALENDARVIEW_H | 24 | #ifndef CALENDARVIEW_H |
25 | #define CALENDARVIEW_H | 25 | #define CALENDARVIEW_H |
26 | 26 | ||
27 | #include <qframe.h> | 27 | #include <qframe.h> |
28 | #include <qlayout.h> | 28 | #include <qlayout.h> |
29 | #include <qwidget.h> | 29 | #include <qwidget.h> |
30 | #include <qptrlist.h> | 30 | #include <qptrlist.h> |
31 | #include <qvbox.h> | 31 | #include <qvbox.h> |
32 | #include <qmap.h> | 32 | #include <qmap.h> |
33 | #ifndef DESKTOP_VERSION | 33 | #ifndef DESKTOP_VERSION |
34 | #include <qtopia/ir.h> | 34 | #include <qtopia/ir.h> |
35 | #else | 35 | #else |
36 | #define Ir char | 36 | #define Ir char |
37 | #endif | 37 | #endif |
38 | #include <libkcal/calendar.h> | 38 | #include <libkcal/calendar.h> |
39 | #include <libkcal/scheduler.h> | 39 | #include <libkcal/scheduler.h> |
40 | #include <libkcal/calendarresources.h> | 40 | #include <libkcal/calendarresources.h> |
41 | #include <libkcal/resourcecalendar.h> | 41 | #include <libkcal/resourcecalendar.h> |
42 | 42 | ||
43 | #include <korganizer/calendarviewbase.h> | 43 | #include <korganizer/calendarviewbase.h> |
44 | 44 | ||
45 | class QWidgetStack; | 45 | class QWidgetStack; |
46 | class QSplitter; | 46 | class QSplitter; |
47 | 47 | ||
48 | class CalPrinter; | 48 | class CalPrinter; |
49 | class KOFilterView; | 49 | class KOFilterView; |
50 | class KOViewManager; | 50 | class KOViewManager; |
51 | class KODialogManager; | 51 | class KODialogManager; |
52 | class KOTodoView; | 52 | class KOTodoView; |
53 | class KDateNavigator; | 53 | class KDateNavigator; |
54 | class DateNavigator; | 54 | class DateNavigator; |
55 | class KOIncidenceEditor; | 55 | class KOIncidenceEditor; |
56 | class KDatePicker; | 56 | class KDatePicker; |
57 | class ResourceView; | 57 | class ResourceView; |
58 | class NavigatorBar; | 58 | class NavigatorBar; |
59 | class KOEventEditor; | 59 | class KOEventEditor; |
60 | class KOTodoEditor ; | 60 | class KOTodoEditor ; |
61 | class KOEventViewerDialog; | 61 | class KOEventViewerDialog; |
62 | class KOBeamPrefs; | 62 | class KOBeamPrefs; |
63 | class KSyncProfile; | 63 | class KSyncProfile; |
64 | class AlarmDialog; | 64 | class AlarmDialog; |
65 | class KCal::Attendee; | 65 | class KCal::Attendee; |
66 | 66 | ||
67 | namespace KCal { class FileStorage; } | 67 | namespace KCal { class FileStorage; } |
68 | 68 | ||
69 | using namespace KCal; | 69 | using namespace KCal; |
70 | 70 | ||
71 | /** | 71 | /** |
72 | This is the main calendar widget. It provides the different vies on t he | 72 | This is the main calendar widget. It provides the different vies on t he |
73 | calendar data as well as the date navigator. It also handles synchronisation | 73 | calendar data as well as the date navigator. It also handles synchronisation |
74 | of the different views and controls the different dialogs like preferences, | 74 | of the different views and controls the different dialogs like preferences, |
75 | event editor, search dialog etc. | 75 | event editor, search dialog etc. |
76 | 76 | ||
77 | @short main calendar view widget | 77 | @short main calendar view widget |
78 | @author Cornelius Schumacher | 78 | @author Cornelius Schumacher |
79 | */ | 79 | */ |
80 | class CalendarView : public KOrg::CalendarViewBase, public KCal::Calendar::Observer | 80 | class CalendarView : public KOrg::CalendarViewBase, public KCal::Calendar::Observer |
81 | { | 81 | { |
82 | Q_OBJECT | 82 | Q_OBJECT |
83 | public: | 83 | public: |
84 | /** | 84 | /** |
85 | Constructs a new calendar view widget. | 85 | Constructs a new calendar view widget. |
86 | 86 | ||
87 | @param calendar calendar document | 87 | @param calendar calendar document |
88 | @param parent parent window | 88 | @param parent parent window |
89 | @param name Qt internal widget object name | 89 | @param name Qt internal widget object name |
90 | */ | 90 | */ |
91 | CalendarView( CalendarResources *calendar, QWidget *parent = 0, | 91 | CalendarView( CalendarResources *calendar, QWidget *parent = 0, |
92 | const char *name = 0 ); | 92 | const char *name = 0 ); |
93 | CalendarView( Calendar *calendar, QWidget *parent = 0, | 93 | CalendarView( Calendar *calendar, QWidget *parent = 0, |
94 | const char *name = 0 ); | 94 | const char *name = 0 ); |
95 | virtual ~CalendarView(); | 95 | virtual ~CalendarView(); |
96 | 96 | ||
97 | Calendar *calendar() { return mCalendar; } | 97 | Calendar *calendar() { return mCalendar; } |
98 | 98 | ||
99 | KOViewManager *viewManager(); | 99 | KOViewManager *viewManager(); |
100 | KODialogManager *dialogManager(); | 100 | KODialogManager *dialogManager(); |
101 | 101 | ||
102 | QDate startDate(); | 102 | QDate startDate(); |
103 | QDate endDate(); | 103 | QDate endDate(); |
104 | 104 | ||
105 | QWidgetStack *viewStack(); | 105 | QWidgetStack *viewStack(); |
106 | QWidget *leftFrame(); | 106 | QWidget *leftFrame(); |
107 | NavigatorBar *navigatorBar(); | 107 | NavigatorBar *navigatorBar(); |
108 | 108 | ||
109 | DateNavigator *dateNavigator(); | 109 | DateNavigator *dateNavigator(); |
110 | KDateNavigator *dateNavigatorWidget(); | 110 | KDateNavigator *dateNavigatorWidget(); |
111 | 111 | ||
112 | void addView(KOrg::BaseView *); | 112 | void addView(KOrg::BaseView *); |
113 | void showView(KOrg::BaseView *); | 113 | void showView(KOrg::BaseView *); |
114 | KOEventViewerDialog* getEventViewerDialog(); | 114 | KOEventViewerDialog* getEventViewerDialog(); |
115 | Incidence *currentSelection(); | 115 | Incidence *currentSelection(); |
116 | 116 | ||
117 | signals: | 117 | signals: |
118 | /** This todo has been modified */ | 118 | /** This todo has been modified */ |
119 | void todoModified(Todo *, int); | 119 | void todoModified(Todo *, int); |
120 | 120 | ||
121 | /** when change is made to options dialog, the topwidget will catch this | 121 | /** when change is made to options dialog, the topwidget will catch this |
122 | * and emit this signal which notifies all widgets which have registered | 122 | * and emit this signal which notifies all widgets which have registered |
123 | * for notification to update their settings. */ | 123 | * for notification to update their settings. */ |
124 | void configChanged(); | 124 | void configChanged(); |
125 | /** emitted when the topwidget is closing down, so that any attached | 125 | /** emitted when the topwidget is closing down, so that any attached |
126 | child windows can also close. */ | 126 | child windows can also close. */ |
127 | void closingDown(); | 127 | void closingDown(); |
128 | /** emitted right before we die */ | 128 | /** emitted right before we die */ |
129 | void closed(QWidget *); | 129 | void closed(QWidget *); |
130 | 130 | ||
131 | /** Emitted when state of modified flag changes */ | 131 | /** Emitted when state of modified flag changes */ |
132 | void modifiedChanged(bool); | 132 | void modifiedChanged(bool); |
133 | void signalmodified(); | 133 | void signalmodified(); |
134 | 134 | ||
135 | /** Emitted when state of read-only flag changes */ | 135 | /** Emitted when state of read-only flag changes */ |
136 | void readOnlyChanged(bool); | 136 | void readOnlyChanged(bool); |
137 | 137 | ||
138 | /** Emitted when the unit of navigation changes */ | 138 | /** Emitted when the unit of navigation changes */ |
139 | void changeNavStringPrev(const QString &); | 139 | void changeNavStringPrev(const QString &); |
140 | void changeNavStringNext(const QString &); | 140 | void changeNavStringNext(const QString &); |
141 | 141 | ||
142 | /** Emitted when state of events selection has changed and user is organizer*/ | 142 | /** Emitted when state of events selection has changed and user is organizer*/ |
143 | void organizerEventsSelected(bool); | 143 | void organizerEventsSelected(bool); |
144 | /** Emitted when state of events selection has changed and user is attendee*/ | 144 | /** Emitted when state of events selection has changed and user is attendee*/ |
145 | void groupEventsSelected(bool); | 145 | void groupEventsSelected(bool); |
146 | /** | 146 | /** |
147 | Emitted when an incidence gets selected. If the selection is cleared the | 147 | Emitted when an incidence gets selected. If the selection is cleared the |
148 | signal is emitted with 0 as argument. | 148 | signal is emitted with 0 as argument. |
149 | */ | 149 | */ |
150 | void incidenceSelected( Incidence * ); | 150 | void incidenceSelected( Incidence * ); |
151 | /** Emitted, when a todoitem is selected or deselected. */ | 151 | /** Emitted, when a todoitem is selected or deselected. */ |
152 | void todoSelected( bool ); | 152 | void todoSelected( bool ); |
153 | 153 | ||
154 | /** | 154 | /** |
155 | Emitted, when clipboard content changes. Parameter indicates if paste | 155 | Emitted, when clipboard content changes. Parameter indicates if paste |
156 | is possible or not. | 156 | is possible or not. |
157 | */ | 157 | */ |
158 | void pasteEnabled(bool); | 158 | void pasteEnabled(bool); |
159 | 159 | ||
160 | /** Emitted, when the number of incoming messages has changed. */ | 160 | /** Emitted, when the number of incoming messages has changed. */ |
161 | void numIncomingChanged(int); | 161 | void numIncomingChanged(int); |
162 | 162 | ||
163 | /** Emitted, when the number of outgoing messages has changed. */ | 163 | /** Emitted, when the number of outgoing messages has changed. */ |
164 | void numOutgoingChanged(int); | 164 | void numOutgoingChanged(int); |
165 | 165 | ||
166 | /** Send status message, which can e.g. be displayed in the status bar. */ | 166 | /** Send status message, which can e.g. be displayed in the status bar. */ |
167 | void statusMessage(const QString &); | 167 | void statusMessage(const QString &); |
168 | 168 | ||
169 | void calendarViewExpanded( bool ); | 169 | void calendarViewExpanded( bool ); |
170 | void updateSearchDialog(); | 170 | void updateSearchDialog(); |
171 | 171 | ||
172 | 172 | ||
173 | public slots: | 173 | public slots: |
174 | 174 | void recheckTimerAlarm(); | |
175 | void checkNextTimerAlarm(); | ||
175 | void addAlarm(const QDateTime &qdt, const QString ¬i ); | 176 | void addAlarm(const QDateTime &qdt, const QString ¬i ); |
176 | void addSuspendAlarm(const QDateTime &qdt, const QString ¬i ); | 177 | void addSuspendAlarm(const QDateTime &qdt, const QString ¬i ); |
177 | void removeAlarm(const QDateTime &qdt, const QString ¬i ); | 178 | void removeAlarm(const QDateTime &qdt, const QString ¬i ); |
178 | 179 | ||
179 | /** options dialog made a changed to the configuration. we catch this | 180 | /** options dialog made a changed to the configuration. we catch this |
180 | * and notify all widgets which need to update their configuration. */ | 181 | * and notify all widgets which need to update their configuration. */ |
181 | void updateConfig(); | 182 | void updateConfig(); |
182 | 183 | ||
183 | /** | 184 | /** |
184 | Load calendar from file \a filename. If \a merge is true, load | 185 | Load calendar from file \a filename. If \a merge is true, load |
185 | calendar into existing one, if it is false, clear calendar, before | 186 | calendar into existing one, if it is false, clear calendar, before |
186 | loading. Return true, if calendar could be successfully loaded. | 187 | loading. Return true, if calendar could be successfully loaded. |
187 | */ | 188 | */ |
188 | bool openCalendar(QString filename, bool merge=false); | 189 | bool openCalendar(QString filename, bool merge=false); |
189 | bool syncCalendar(QString filename,int mode = 0 ); | 190 | bool syncCalendar(QString filename,int mode = 0 ); |
190 | 191 | ||
191 | /** | 192 | /** |
192 | Save calendar data to file. Return true if calendar could be | 193 | Save calendar data to file. Return true if calendar could be |
193 | successfully saved. | 194 | successfully saved. |
194 | */ | 195 | */ |
195 | bool saveCalendar(QString filename); | 196 | bool saveCalendar(QString filename); |
196 | 197 | ||
197 | /** | 198 | /** |
198 | Close calendar. Clear calendar data and reset views to display an empty | 199 | Close calendar. Clear calendar data and reset views to display an empty |
199 | calendar. | 200 | calendar. |
200 | */ | 201 | */ |
201 | void closeCalendar(); | 202 | void closeCalendar(); |
202 | 203 | ||
203 | /** Archive old events of calendar */ | 204 | /** Archive old events of calendar */ |
204 | void archiveCalendar(); | 205 | void archiveCalendar(); |
205 | 206 | ||
206 | void showIncidence(); | 207 | void showIncidence(); |
207 | void editIncidence(); | 208 | void editIncidence(); |
208 | void editIncidenceDescription(); | 209 | void editIncidenceDescription(); |
209 | void deleteIncidence(); | 210 | void deleteIncidence(); |
210 | 211 | ||
211 | /** create an editeventwin with supplied date/time, and if bool is true, | 212 | /** create an editeventwin with supplied date/time, and if bool is true, |
212 | * make the event take all day. */ | 213 | * make the event take all day. */ |
213 | void newEvent(QDateTime, QDateTime, bool allDay = false); | 214 | void newEvent(QDateTime, QDateTime, bool allDay = false); |
214 | void newEvent(QDateTime fh); | 215 | void newEvent(QDateTime fh); |
215 | void newEvent(QDate dt); | 216 | void newEvent(QDate dt); |
216 | /** create new event without having a date hint. Takes current date as | 217 | /** create new event without having a date hint. Takes current date as |
217 | default hint. */ | 218 | default hint. */ |
218 | void newEvent(); | 219 | void newEvent(); |
219 | void newFloatingEvent(); | 220 | void newFloatingEvent(); |
220 | 221 | ||
221 | /** Create a read-only viewer dialog for the supplied incidence. It calls the correct showXXX method*/ | 222 | /** Create a read-only viewer dialog for the supplied incidence. It calls the correct showXXX method*/ |
222 | void showIncidence(Incidence *); | 223 | void showIncidence(Incidence *); |
223 | /** Create an editor for the supplied incidence. It calls the correct editXXX method*/ | 224 | /** Create an editor for the supplied incidence. It calls the correct editXXX method*/ |
224 | void editIncidence(Incidence *); | 225 | void editIncidence(Incidence *); |
225 | /** Delete the supplied incidence. It calls the correct deleteXXX method*/ | 226 | /** Delete the supplied incidence. It calls the correct deleteXXX method*/ |
226 | void deleteIncidence(Incidence *); | 227 | void deleteIncidence(Incidence *); |
227 | void cloneIncidence(Incidence *); | 228 | void cloneIncidence(Incidence *); |
228 | void cancelIncidence(Incidence *); | 229 | void cancelIncidence(Incidence *); |
229 | /** Create an editor for the supplied event. */ | 230 | /** Create an editor for the supplied event. */ |
230 | void editEvent(Event *); | 231 | void editEvent(Event *); |
231 | /** Delete the supplied event. */ | 232 | /** Delete the supplied event. */ |
232 | void deleteEvent(Event *); | 233 | void deleteEvent(Event *); |
233 | /** Delete the event with the given unique ID. Returns false, if event wasn't | 234 | /** Delete the event with the given unique ID. Returns false, if event wasn't |
234 | found. */ | 235 | found. */ |
235 | bool deleteEvent(const QString &uid); | 236 | bool deleteEvent(const QString &uid); |
236 | /** Create a read-only viewer dialog for the supplied event. */ | 237 | /** Create a read-only viewer dialog for the supplied event. */ |
237 | void showEvent(Event *); | 238 | void showEvent(Event *); |
238 | 239 | ||
239 | void editJournal(Journal *); | 240 | void editJournal(Journal *); |
240 | void showJournal(Journal *); | 241 | void showJournal(Journal *); |
241 | void deleteJournal(Journal *); | 242 | void deleteJournal(Journal *); |
242 | /** Create an editor dialog for a todo */ | 243 | /** Create an editor dialog for a todo */ |
243 | void editTodo(Todo *); | 244 | void editTodo(Todo *); |
244 | /** Create a read-only viewer dialog for the supplied todo */ | 245 | /** Create a read-only viewer dialog for the supplied todo */ |
245 | void showTodo(Todo *); | 246 | void showTodo(Todo *); |
246 | /** create new todo */ | 247 | /** create new todo */ |
247 | void newTodo(); | 248 | void newTodo(); |
248 | /** create new todo with a parent todo */ | 249 | /** create new todo with a parent todo */ |
249 | void newSubTodo(); | 250 | void newSubTodo(); |
250 | /** create new todo with a parent todo */ | 251 | /** create new todo with a parent todo */ |
251 | void newSubTodo(Todo *); | 252 | void newSubTodo(Todo *); |
252 | /** Delete todo */ | 253 | /** Delete todo */ |
253 | void deleteTodo(Todo *); | 254 | void deleteTodo(Todo *); |
254 | 255 | ||
255 | 256 | ||
256 | /** Check if clipboard contains vCalendar event. The signal pasteEnabled() is | 257 | /** Check if clipboard contains vCalendar event. The signal pasteEnabled() is |
257 | * emitted as result. */ | 258 | * emitted as result. */ |
258 | void checkClipboard(); | 259 | void checkClipboard(); |
259 | 260 | ||
260 | /** using the KConfig associated with the kapp variable, read in the | 261 | /** using the KConfig associated with the kapp variable, read in the |
261 | * settings from the config file. | 262 | * settings from the config file. |
262 | */ | 263 | */ |
263 | void readSettings(); | 264 | void readSettings(); |
264 | 265 | ||
265 | /** write current state to config file. */ | 266 | /** write current state to config file. */ |
266 | void writeSettings(); | 267 | void writeSettings(); |
267 | 268 | ||
268 | /** read settings for calendar filters */ | 269 | /** read settings for calendar filters */ |
269 | void readFilterSettings(KConfig *config); | 270 | void readFilterSettings(KConfig *config); |
270 | 271 | ||
271 | /** write settings for calendar filters */ | 272 | /** write settings for calendar filters */ |
272 | void writeFilterSettings(KConfig *config); | 273 | void writeFilterSettings(KConfig *config); |
273 | 274 | ||
274 | /** passes on the message that an event has changed to the currently | 275 | /** passes on the message that an event has changed to the currently |
275 | * activated view so that it can make appropriate display changes. */ | 276 | * activated view so that it can make appropriate display changes. */ |
276 | void changeEventDisplay(Event *, int); | 277 | void changeEventDisplay(Event *, int); |
277 | void changeIncidenceDisplay(Incidence *, int); | 278 | void changeIncidenceDisplay(Incidence *, int); |
278 | void changeTodoDisplay(Todo *, int); | 279 | void changeTodoDisplay(Todo *, int); |
279 | 280 | ||
280 | void eventAdded(Event *); | 281 | void eventAdded(Event *); |
281 | void eventChanged(Event *); | 282 | void eventChanged(Event *); |
282 | void eventToBeDeleted(Event *); | 283 | void eventToBeDeleted(Event *); |
283 | void eventDeleted(); | 284 | void eventDeleted(); |
284 | 285 | ||
285 | void todoAdded(Todo *); | 286 | void todoAdded(Todo *); |
286 | void todoChanged(Todo *); | 287 | void todoChanged(Todo *); |
287 | void todoToBeDeleted(Todo *); | 288 | void todoToBeDeleted(Todo *); |
288 | void todoDeleted(); | 289 | void todoDeleted(); |
289 | 290 | ||
290 | void updateView(const QDate &start, const QDate &end); | 291 | void updateView(const QDate &start, const QDate &end); |
291 | void updateView(); | 292 | void updateView(); |
292 | 293 | ||
293 | /** Full update of visible todo views */ | 294 | /** Full update of visible todo views */ |
294 | void updateTodoViews(); | 295 | void updateTodoViews(); |
295 | 296 | ||
296 | void updateUnmanagedViews(); | 297 | void updateUnmanagedViews(); |
297 | 298 | ||
298 | /** cut the current appointment to the clipboard */ | 299 | /** cut the current appointment to the clipboard */ |
299 | void edit_cut(); | 300 | void edit_cut(); |
300 | 301 | ||
301 | /** copy the current appointment(s) to the clipboard */ | 302 | /** copy the current appointment(s) to the clipboard */ |
302 | void edit_copy(); | 303 | void edit_copy(); |
303 | 304 | ||
304 | /** paste the current vobject(s) in the clipboard buffer into calendar */ | 305 | /** paste the current vobject(s) in the clipboard buffer into calendar */ |
305 | void edit_paste(); | 306 | void edit_paste(); |
306 | 307 | ||
307 | /** edit viewing and configuration options. */ | 308 | /** edit viewing and configuration options. */ |
308 | void edit_options(); | 309 | void edit_options(); |
309 | void edit_sync_options(); | 310 | void edit_sync_options(); |
310 | /** | 311 | /** |
311 | Functions for printing, previewing a print, and setting up printing | 312 | Functions for printing, previewing a print, and setting up printing |
312 | parameters. | 313 | parameters. |
313 | */ | 314 | */ |
314 | void print(); | 315 | void print(); |
315 | void printSetup(); | 316 | void printSetup(); |
316 | void printPreview(); | 317 | void printPreview(); |
317 | 318 | ||
318 | /** Export as iCalendar file */ | 319 | /** Export as iCalendar file */ |
319 | void exportICalendar(); | 320 | void exportICalendar(); |
320 | 321 | ||
321 | /** Export as vCalendar file */ | 322 | /** Export as vCalendar file */ |
322 | bool exportVCalendar( QString fn); | 323 | bool exportVCalendar( QString fn); |
323 | 324 | ||
324 | /** pop up a dialog to show an existing appointment. */ | 325 | /** pop up a dialog to show an existing appointment. */ |
325 | void appointment_show(); | 326 | void appointment_show(); |
326 | /** | 327 | /** |
327 | * pop up an Appointment Dialog to edit an existing appointment.Get | 328 | * pop up an Appointment Dialog to edit an existing appointment.Get |
328 | * information on the appointment from the list of unique IDs that is | 329 | * information on the appointment from the list of unique IDs that is |
329 | * currently in the View, called currIds. | 330 | * currently in the View, called currIds. |
330 | */ | 331 | */ |
331 | void appointment_edit(); | 332 | void appointment_edit(); |
332 | /** | 333 | /** |
333 | * pop up dialog confirming deletion of currently selected event in the | 334 | * pop up dialog confirming deletion of currently selected event in the |
334 | * View. | 335 | * View. |
335 | */ | 336 | */ |
336 | void appointment_delete(); | 337 | void appointment_delete(); |
337 | 338 | ||
338 | /** mails the currently selected event to a particular user as a vCalendar | 339 | /** mails the currently selected event to a particular user as a vCalendar |
339 | attachment. */ | 340 | attachment. */ |
340 | void action_mail(); | 341 | void action_mail(); |
341 | 342 | ||
342 | /* frees a subtodo from it's relation */ | 343 | /* frees a subtodo from it's relation */ |
343 | void todo_unsub( Todo * ); | 344 | void todo_unsub( Todo * ); |
344 | 345 | ||
345 | /** Take ownership of selected event. */ | 346 | /** Take ownership of selected event. */ |
346 | void takeOverEvent(); | 347 | void takeOverEvent(); |
347 | 348 | ||
348 | /** Take ownership of all events in calendar. */ | 349 | /** Take ownership of all events in calendar. */ |
349 | void takeOverCalendar(); | 350 | void takeOverCalendar(); |
350 | 351 | ||
351 | /** query whether or not the calendar is "dirty". */ | 352 | /** query whether or not the calendar is "dirty". */ |
352 | bool isModified(); | 353 | bool isModified(); |
353 | /** set the state of calendar. Modified means "dirty", i.e. needing a save. */ | 354 | /** set the state of calendar. Modified means "dirty", i.e. needing a save. */ |
354 | void setModified(bool modified=true); | 355 | void setModified(bool modified=true); |
355 | 356 | ||
356 | /** query if the calendar is read-only. */ | 357 | /** query if the calendar is read-only. */ |
357 | bool isReadOnly(); | 358 | bool isReadOnly(); |
358 | /** set state of calendar to read-only */ | 359 | /** set state of calendar to read-only */ |
359 | void setReadOnly(bool readOnly=true); | 360 | void setReadOnly(bool readOnly=true); |
360 | 361 | ||
361 | void eventUpdated(Incidence *); | 362 | void eventUpdated(Incidence *); |
362 | 363 | ||
363 | /* iTIP scheduling actions */ | 364 | /* iTIP scheduling actions */ |
364 | void schedule_publish(Incidence *incidence = 0); | 365 | void schedule_publish(Incidence *incidence = 0); |
365 | void schedule_request(Incidence *incidence = 0); | 366 | void schedule_request(Incidence *incidence = 0); |
366 | void schedule_refresh(Incidence *incidence = 0); | 367 | void schedule_refresh(Incidence *incidence = 0); |
367 | void schedule_cancel(Incidence *incidence = 0); | 368 | void schedule_cancel(Incidence *incidence = 0); |
368 | void schedule_add(Incidence *incidence = 0); | 369 | void schedule_add(Incidence *incidence = 0); |
369 | void schedule_reply(Incidence *incidence = 0); | 370 | void schedule_reply(Incidence *incidence = 0); |
370 | void schedule_counter(Incidence *incidence = 0); | 371 | void schedule_counter(Incidence *incidence = 0); |
371 | void schedule_declinecounter(Incidence *incidence = 0); | 372 | void schedule_declinecounter(Incidence *incidence = 0); |
372 | void schedule_publish_freebusy(int daysToPublish = 30); | 373 | void schedule_publish_freebusy(int daysToPublish = 30); |
373 | 374 | ||
374 | void openAddressbook(); | 375 | void openAddressbook(); |
375 | 376 | ||
376 | void editFilters(); | 377 | void editFilters(); |
377 | void toggleFilerEnabled(); | 378 | void toggleFilerEnabled(); |
378 | 379 | ||
379 | void toggleFilter(); | 380 | void toggleFilter(); |
380 | void showFilter(bool visible); | 381 | void showFilter(bool visible); |
381 | void updateFilter(); | 382 | void updateFilter(); |
382 | void filterEdited(); | 383 | void filterEdited(); |
383 | void selectFilter( int ); | 384 | void selectFilter( int ); |
384 | 385 | ||
385 | void showIntro(); | 386 | void showIntro(); |
386 | 387 | ||
387 | /** Move the curdatepient view date to today */ | 388 | /** Move the curdatepient view date to today */ |
388 | void goToday(); | 389 | void goToday(); |
389 | 390 | ||
390 | /** Move to the next date(s) in the current view */ | 391 | /** Move to the next date(s) in the current view */ |
391 | void goNext(); | 392 | void goNext(); |
392 | 393 | ||
393 | /** Move to the previous date(s) in the current view */ | 394 | /** Move to the previous date(s) in the current view */ |
394 | void goPrevious(); | 395 | void goPrevious(); |
395 | /** Move to the next date(s) in the current view */ | 396 | /** Move to the next date(s) in the current view */ |
396 | void goNextMonth(); | 397 | void goNextMonth(); |
397 | 398 | ||
398 | /** Move to the previous date(s) in the current view */ | 399 | /** Move to the previous date(s) in the current view */ |
399 | void goPreviousMonth(); | 400 | void goPreviousMonth(); |
400 | 401 | ||
401 | void toggleExpand(); | 402 | void toggleExpand(); |
402 | void toggleDateNavigatorWidget(); | 403 | void toggleDateNavigatorWidget(); |
403 | void toggleAllDaySize(); | 404 | void toggleAllDaySize(); |
404 | void dialogClosing(Incidence *); | 405 | void dialogClosing(Incidence *); |
405 | 406 | ||
406 | /** Look for new messages in the inbox */ | 407 | /** Look for new messages in the inbox */ |
407 | void lookForIncomingMessages(); | 408 | void lookForIncomingMessages(); |
408 | /** Look for new messages in the outbox */ | 409 | /** Look for new messages in the outbox */ |
409 | void lookForOutgoingMessages(); | 410 | void lookForOutgoingMessages(); |
410 | 411 | ||
411 | void processMainViewSelection( Incidence * ); | 412 | void processMainViewSelection( Incidence * ); |
412 | void processTodoListSelection( Incidence * ); | 413 | void processTodoListSelection( Incidence * ); |
413 | 414 | ||
414 | void processIncidenceSelection( Incidence * ); | 415 | void processIncidenceSelection( Incidence * ); |
415 | 416 | ||
416 | void purgeCompleted(); | 417 | void purgeCompleted(); |
417 | bool removeCompletedSubTodos( Todo* ); | 418 | bool removeCompletedSubTodos( Todo* ); |
418 | void slotCalendarChanged(); | 419 | void slotCalendarChanged(); |
419 | bool importBday(); | 420 | bool importBday(); |
420 | bool addAnniversary( QDate data, QString name, KCal::Attendee* a , bool birthday ); | 421 | bool addAnniversary( QDate data, QString name, KCal::Attendee* a , bool birthday ); |
421 | bool importQtopia( const QString &categoriesFile, | 422 | bool importQtopia( const QString &categoriesFile, |
422 | const QString &datebookFile, | 423 | const QString &datebookFile, |
423 | const QString &tasklistFile ); | 424 | const QString &tasklistFile ); |
424 | void syncSharp( ); | 425 | void syncSharp( ); |
425 | void slotSelectPickerDate( QDate ) ; | 426 | void slotSelectPickerDate( QDate ) ; |
426 | void showDatePicker( ) ; | 427 | void showDatePicker( ) ; |
427 | void moveIncidence(Incidence *) ; | 428 | void moveIncidence(Incidence *) ; |
428 | void beamIncidence(Incidence *) ; | 429 | void beamIncidence(Incidence *) ; |
429 | void beamCalendar() ; | 430 | void beamCalendar() ; |
430 | void beamFilteredCalendar() ; | 431 | void beamFilteredCalendar() ; |
431 | void beamIncidenceList(QPtrList<Incidence>) ; | 432 | void beamIncidenceList(QPtrList<Incidence>) ; |
432 | void manageCategories(); | 433 | void manageCategories(); |
433 | int addCategories(); | 434 | int addCategories(); |
434 | void removeCategories(); | 435 | void removeCategories(); |
435 | void setSyncDevice( QString ); | 436 | void setSyncDevice( QString ); |
436 | void setSyncName( QString ); | 437 | void setSyncName( QString ); |
437 | protected slots: | 438 | protected slots: |
438 | void timerAlarm(); | 439 | void timerAlarm(); |
439 | void suspendAlarm(); | 440 | void suspendAlarm(); |
440 | void beamDone( Ir *ir ); | 441 | void beamDone( Ir *ir ); |
441 | /** Select a view or adapt the current view to display the specified dates. */ | 442 | /** Select a view or adapt the current view to display the specified dates. */ |
442 | void showDates( const KCal::DateList & ); | 443 | void showDates( const KCal::DateList & ); |
443 | void selectWeekNum ( int ); | 444 | void selectWeekNum ( int ); |
444 | 445 | ||
445 | public: | 446 | public: |
446 | // show a standard warning | 447 | // show a standard warning |
447 | // returns KMsgBox::yesNoCancel() | 448 | // returns KMsgBox::yesNoCancel() |
448 | int msgCalModified(); | 449 | int msgCalModified(); |
449 | void confSync(); | 450 | void confSync(); |
450 | void setLoadedFileVersion(QDateTime); | 451 | void setLoadedFileVersion(QDateTime); |
451 | bool checkFileVersion(QString fn); | 452 | bool checkFileVersion(QString fn); |
452 | bool checkFileChanged(QString fn); | 453 | bool checkFileChanged(QString fn); |
453 | Event* getLastSyncEvent(); | 454 | Event* getLastSyncEvent(); |
454 | /** Adapt navigation units correpsonding to step size of navigation of the | 455 | /** Adapt navigation units correpsonding to step size of navigation of the |
455 | * current view. | 456 | * current view. |
456 | */ | 457 | */ |
457 | void adaptNavigationUnits(); | 458 | void adaptNavigationUnits(); |
458 | bool synchronizeCalendar( Calendar* local, Calendar* remote, int mode ); | 459 | bool synchronizeCalendar( Calendar* local, Calendar* remote, int mode ); |
459 | int takeEvent( Incidence* local, Incidence* remote, int mode, bool full = false ); | 460 | int takeEvent( Incidence* local, Incidence* remote, int mode, bool full = false ); |
460 | //Attendee* getYourAttendee(Event *event); | 461 | //Attendee* getYourAttendee(Event *event); |
461 | protected: | 462 | protected: |
462 | void schedule(Scheduler::Method, Incidence *incidence = 0); | 463 | void schedule(Scheduler::Method, Incidence *incidence = 0); |
463 | 464 | ||
464 | // returns KMsgBox::OKCandel() | 465 | // returns KMsgBox::OKCandel() |
465 | int msgItemDelete(); | 466 | int msgItemDelete(); |
466 | void showEventEditor(); | 467 | void showEventEditor(); |
467 | void showTodoEditor(); | 468 | void showTodoEditor(); |
468 | void writeLocale(); | 469 | void writeLocale(); |
469 | Todo *selectedTodo(); | 470 | Todo *selectedTodo(); |
470 | 471 | ||
471 | private: | 472 | private: |
472 | AlarmDialog * mAlarmDialog; | 473 | AlarmDialog * mAlarmDialog; |
473 | QString mAlarmNotification; | 474 | QString mAlarmNotification; |
474 | QString mSuspendAlarmNotification; | 475 | QString mSuspendAlarmNotification; |
475 | QTimer* mSuspendTimer; | 476 | QTimer* mSuspendTimer; |
476 | QTimer* mAlarmTimer; | 477 | QTimer* mAlarmTimer; |
478 | QTimer* mRecheckAlarmTimer; | ||
477 | void computeAlarm( QString ); | 479 | void computeAlarm( QString ); |
478 | void startAlarm( QString, QString ); | 480 | void startAlarm( QString, QString ); |
479 | void setSyncEventsReadOnly(); | 481 | void setSyncEventsReadOnly(); |
480 | 482 | ||
481 | QDateTime loadedFileVersion; | 483 | QDateTime loadedFileVersion; |
482 | void checkSharpEvent( Event* lastSync, Incidence* toDelete ); | 484 | void checkSharpEvent( Event* lastSync, Incidence* toDelete ); |
483 | QPtrList<KSyncProfile> mSyncProfiles; | 485 | QPtrList<KSyncProfile> mSyncProfiles; |
484 | QStringList mSyncProfileNames; | 486 | QStringList mSyncProfileNames; |
485 | void checkZaurusId( int id, bool todo = false ); | 487 | void checkZaurusId( int id, bool todo = false ); |
486 | int mGlobalSyncMode; | 488 | int mGlobalSyncMode; |
487 | QString mCurrentSyncDevice; | 489 | QString mCurrentSyncDevice; |
488 | QString mCurrentSyncName; | 490 | QString mCurrentSyncName; |
489 | KOBeamPrefs* beamDialog; | 491 | KOBeamPrefs* beamDialog; |
490 | void init(); | 492 | void init(); |
491 | int mDatePickerMode; | 493 | int mDatePickerMode; |
492 | bool mFlagEditDescription; | 494 | bool mFlagEditDescription; |
493 | QDateTime mLastCalendarSync; | 495 | QDateTime mLastCalendarSync; |
494 | void createPrinter(); | 496 | void createPrinter(); |
495 | 497 | ||
496 | void calendarModified( bool, Calendar * ); | 498 | void calendarModified( bool, Calendar * ); |
497 | 499 | ||
498 | CalPrinter *mCalPrinter; | 500 | CalPrinter *mCalPrinter; |
499 | 501 | ||
500 | QSplitter *mPanner; | 502 | QSplitter *mPanner; |
501 | QSplitter *mLeftSplitter; | 503 | QSplitter *mLeftSplitter; |
502 | QWidget *mLeftFrame; | 504 | QWidget *mLeftFrame; |
503 | QWidgetStack *mRightFrame; | 505 | QWidgetStack *mRightFrame; |
504 | 506 | ||
505 | KDatePicker* mDatePicker; | 507 | KDatePicker* mDatePicker; |
506 | QVBox* mDateFrame; | 508 | QVBox* mDateFrame; |
507 | NavigatorBar *mNavigatorBar; | 509 | NavigatorBar *mNavigatorBar; |
508 | 510 | ||
509 | KDateNavigator *mDateNavigator; // widget showing small month view. | 511 | KDateNavigator *mDateNavigator; // widget showing small month view. |
510 | 512 | ||
511 | KOFilterView *mFilterView; | 513 | KOFilterView *mFilterView; |
512 | 514 | ||
513 | ResourceView *mResourceView; | 515 | ResourceView *mResourceView; |
514 | 516 | ||
515 | // calendar object for this viewing instance | 517 | // calendar object for this viewing instance |
516 | Calendar *mCalendar; | 518 | Calendar *mCalendar; |
517 | 519 | ||
518 | CalendarResourceManager *mResourceManager; | 520 | CalendarResourceManager *mResourceManager; |
519 | 521 | ||
520 | FileStorage *mStorage; | 522 | FileStorage *mStorage; |
521 | 523 | ||
522 | DateNavigator *mNavigator; | 524 | DateNavigator *mNavigator; |
523 | 525 | ||
524 | KOViewManager *mViewManager; | 526 | KOViewManager *mViewManager; |
525 | KODialogManager *mDialogManager; | 527 | KODialogManager *mDialogManager; |
526 | 528 | ||
527 | // Calendar filters | 529 | // Calendar filters |
528 | QPtrList<CalFilter> mFilters; | 530 | QPtrList<CalFilter> mFilters; |
529 | 531 | ||
530 | // various housekeeping variables. | 532 | // various housekeeping variables. |
531 | bool mModified; // flag indicating if calendar is modified | 533 | bool mModified; // flag indicating if calendar is modified |
532 | bool mReadOnly; // flag indicating if calendar is read-only | 534 | bool mReadOnly; // flag indicating if calendar is read-only |
533 | QDate mSaveSingleDate; | 535 | QDate mSaveSingleDate; |
534 | 536 | ||
535 | Incidence *mSelectedIncidence; | 537 | Incidence *mSelectedIncidence; |
536 | Incidence *mMoveIncidence; | 538 | Incidence *mMoveIncidence; |
537 | 539 | ||
538 | KOTodoView *mTodoList; | 540 | KOTodoView *mTodoList; |
539 | KOEventEditor * mEventEditor; | 541 | KOEventEditor * mEventEditor; |
540 | KOTodoEditor * mTodoEditor; | 542 | KOTodoEditor * mTodoEditor; |
541 | KOEventViewerDialog * mEventViewerDialog; | 543 | KOEventViewerDialog * mEventViewerDialog; |
542 | void keyPressEvent ( QKeyEvent *e) ; | 544 | void keyPressEvent ( QKeyEvent *e) ; |
543 | //QMap<Incidence*,KOIncidenceEditor*> mDialogList; | 545 | //QMap<Incidence*,KOIncidenceEditor*> mDialogList; |
544 | }; | 546 | }; |
545 | 547 | ||
546 | 548 | ||
547 | class CalendarViewVisitor : public Incidence::Visitor | 549 | class CalendarViewVisitor : public Incidence::Visitor |
548 | { | 550 | { |
549 | public: | 551 | public: |
550 | CalendarViewVisitor() : mView( 0 ) {} | 552 | CalendarViewVisitor() : mView( 0 ) {} |
551 | 553 | ||
552 | bool act( Incidence *incidence, CalendarView *view ) | 554 | bool act( Incidence *incidence, CalendarView *view ) |
553 | { | 555 | { |
554 | mView = view; | 556 | mView = view; |
555 | return incidence->accept( *this ); | 557 | return incidence->accept( *this ); |
556 | } | 558 | } |
557 | 559 | ||
558 | protected: | 560 | protected: |
559 | CalendarView *mView; | 561 | CalendarView *mView; |
560 | }; | 562 | }; |
561 | 563 | ||
562 | class ShowIncidenceVisitor : public CalendarViewVisitor | 564 | class ShowIncidenceVisitor : public CalendarViewVisitor |
563 | { | 565 | { |
564 | protected: | 566 | protected: |
565 | bool visit( Event *event ) { mView->showEvent( event ); return true; } | 567 | bool visit( Event *event ) { mView->showEvent( event ); return true; } |
566 | bool visit( Todo *todo ) { mView->showTodo( todo ); return true; } | 568 | bool visit( Todo *todo ) { mView->showTodo( todo ); return true; } |
567 | bool visit( Journal * j ) { mView->showJournal( j );return true; } | 569 | bool visit( Journal * j ) { mView->showJournal( j );return true; } |
568 | }; | 570 | }; |
569 | 571 | ||
570 | class EditIncidenceVisitor : public CalendarViewVisitor | 572 | class EditIncidenceVisitor : public CalendarViewVisitor |
571 | { | 573 | { |
572 | protected: | 574 | protected: |
573 | bool visit( Event *event ) { mView->editEvent( event ); return true; } | 575 | bool visit( Event *event ) { mView->editEvent( event ); return true; } |
574 | bool visit( Todo *todo ) { mView->editTodo( todo ); return true; } | 576 | bool visit( Todo *todo ) { mView->editTodo( todo ); return true; } |
575 | bool visit( Journal *j ) { mView->editJournal( j); return true; } | 577 | bool visit( Journal *j ) { mView->editJournal( j); return true; } |
576 | }; | 578 | }; |
577 | 579 | ||
578 | class DeleteIncidenceVisitor : public CalendarViewVisitor | 580 | class DeleteIncidenceVisitor : public CalendarViewVisitor |
579 | { | 581 | { |
580 | protected: | 582 | protected: |
581 | bool visit( Event *event ) { mView->deleteEvent( event ); return true; } | 583 | bool visit( Event *event ) { mView->deleteEvent( event ); return true; } |
582 | bool visit( Todo *todo ) { mView->deleteTodo( todo ); return true; } | 584 | bool visit( Todo *todo ) { mView->deleteTodo( todo ); return true; } |
583 | bool visit( Journal * j) {mView->deleteJournal( j ); return true; } | 585 | bool visit( Journal * j) {mView->deleteJournal( j ); return true; } |
584 | }; | 586 | }; |
585 | 587 | ||
586 | #endif | 588 | #endif |
diff --git a/korganizer/koeventviewer.cpp b/korganizer/koeventviewer.cpp index bac66d3..1f69700 100644 --- a/korganizer/koeventviewer.cpp +++ b/korganizer/koeventviewer.cpp | |||
@@ -1,509 +1,541 @@ | |||
1 | /* | 1 | /* |
2 | This file is part of KOrganizer. | 2 | This file is part of KOrganizer. |
3 | Copyright (c) 2001 Cornelius Schumacher <schumacher@kde.org> | 3 | Copyright (c) 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 <qcstring.h> | 20 | #include <qcstring.h> |
21 | #include <qwhatsthis.h> | 21 | #include <qwhatsthis.h> |
22 | #include <qdialog.h> | 22 | #include <qdialog.h> |
23 | #include <qapplication.h> | 23 | #include <qapplication.h> |
24 | #include <qlabel.h> | 24 | #include <qlabel.h> |
25 | #include <qlayout.h> | 25 | #include <qlayout.h> |
26 | 26 | ||
27 | #include <klocale.h> | 27 | #include <klocale.h> |
28 | #include <kapplication.h> | 28 | #include <kapplication.h> |
29 | #include <libkcal/event.h> | 29 | #include <libkcal/event.h> |
30 | #include <libkcal/todo.h> | 30 | #include <libkcal/todo.h> |
31 | #include <kdebug.h> | 31 | #include <kdebug.h> |
32 | #include <kiconloader.h> | 32 | #include <kiconloader.h> |
33 | #include <krun.h> | 33 | #include <krun.h> |
34 | #include <kglobal.h> | 34 | #include <kglobal.h> |
35 | #include <kprocess.h> | 35 | #include <kprocess.h> |
36 | #include "koprefs.h" | 36 | #include "koprefs.h" |
37 | 37 | ||
38 | #include <libkdepim/addresseeview.h> | 38 | #include <libkdepim/addresseeview.h> |
39 | #include <kabc/stdaddressbook.h> | 39 | #include <kabc/stdaddressbook.h> |
40 | 40 | ||
41 | #ifndef KORG_NODCOP | 41 | #ifndef KORG_NODCOP |
42 | #include <dcopclient.h> | 42 | #include <dcopclient.h> |
43 | #include "korganizer.h" | 43 | #include "korganizer.h" |
44 | #include "koprefs.h" | 44 | #include "koprefs.h" |
45 | #include "actionmanager.h" | 45 | #include "actionmanager.h" |
46 | #endif | 46 | #endif |
47 | 47 | ||
48 | #include "koeventviewer.h" | 48 | #include "koeventviewer.h" |
49 | #ifndef KORG_NOKABC | 49 | #ifndef KORG_NOKABC |
50 | #include <kabc/stdaddressbook.h> | 50 | #include <kabc/stdaddressbook.h> |
51 | #define size count | 51 | #define size count |
52 | #endif | 52 | #endif |
53 | #ifndef DESKTOP_VERSION | ||
54 | #include <qtopia/qcopenvelope_qws.h> | ||
55 | #endif | ||
56 | |||
53 | KOEventViewer::KOEventViewer(QWidget *parent,const char *name) | 57 | KOEventViewer::KOEventViewer(QWidget *parent,const char *name) |
54 | : QTextBrowser(parent,name) | 58 | : QTextBrowser(parent,name) |
55 | { | 59 | { |
56 | mSyncMode = false; | 60 | mSyncMode = false; |
57 | mColorMode = 0; | 61 | mColorMode = 0; |
58 | } | 62 | } |
59 | 63 | ||
60 | KOEventViewer::~KOEventViewer() | 64 | KOEventViewer::~KOEventViewer() |
61 | { | 65 | { |
62 | } | 66 | } |
63 | 67 | ||
64 | void KOEventViewer::setSource(const QString& n) | 68 | void KOEventViewer::setSource(const QString& n) |
65 | { | 69 | { |
66 | KABC::StdAddressBook* AddressBook = KABC::StdAddressBook::self( true ); | 70 | |
67 | KABC::AddressBook::Iterator it; | 71 | if ( n.left(3) == "uid" ) { |
68 | for( it = AddressBook->begin(); it != AddressBook->end(); ++it ) { | 72 | KABC::StdAddressBook* AddressBook = KABC::StdAddressBook::self( true ); |
69 | // LR I do not understand, why the uid string is different on zaurus and desktop | 73 | KABC::AddressBook::Iterator it; |
74 | for( it = AddressBook->begin(); it != AddressBook->end(); ++it ) { | ||
75 | // LR I do not understand, why the uid string is different on zaurus and desktop | ||
70 | #ifdef DESKTOP_VERSION | 76 | #ifdef DESKTOP_VERSION |
71 | QString uid = "uid://"+(*it).uid(); | 77 | QString uid = "uid://"+(*it).uid(); |
72 | #else | 78 | #else |
73 | QString uid = "uid:"+(*it).uid(); | 79 | QString uid = "uid:"+(*it).uid(); |
74 | #endif | 80 | #endif |
75 | //qDebug("for *%s* +%s+ ", n.latin1(), uid.latin1()); | 81 | //qDebug("for *%s* +%s+ ", n.latin1(), uid.latin1()); |
76 | if (n == uid ) { | 82 | if (n == uid ) { |
77 | //qDebug("found %s ",(*it).mobileHomePhone().latin1() ); | 83 | //qDebug("found %s ",(*it).mobileHomePhone().latin1() ); |
78 | QDialog dia( this,"dia123", true ); | 84 | QDialog dia( this,"dia123", true ); |
79 | dia.setCaption( i18n("Details of attendee") ); | 85 | dia.setCaption( i18n("Details of attendee") ); |
80 | QVBoxLayout lay ( &dia ); | 86 | QVBoxLayout lay ( &dia ); |
81 | KPIM::AddresseeView av ( &dia ); | 87 | KPIM::AddresseeView av ( &dia ); |
82 | av.setAddressee( (*it) ); | 88 | av.setAddressee( (*it) ); |
83 | lay.addWidget( &av ); | 89 | lay.addWidget( &av ); |
84 | if ( QApplication::desktop()->width() < 480 ) | 90 | if ( QApplication::desktop()->width() < 480 ) |
85 | dia.resize( 220, 240); | 91 | dia.resize( 220, 240); |
86 | else { | 92 | else { |
87 | dia.resize( 400,400); | 93 | dia.resize( 400,400); |
88 | 94 | ||
95 | } | ||
96 | dia.exec(); | ||
97 | break; | ||
98 | } | ||
89 | } | 99 | } |
90 | dia.exec(); | 100 | return; |
91 | break; | 101 | } |
92 | } | 102 | if ( n.left(6) == "mailto" ) { |
93 | } | 103 | // qDebug("KOEventViewer::setSource %s ", n.mid(7).latin1()); |
104 | #ifndef DESKTOP_VERSION | ||
105 | QCopEnvelope e("QPE/Application/kmpi", "newMail(QString)" ); | ||
106 | e << n.mid(7); | ||
107 | #endif | ||
108 | |||
109 | } | ||
94 | 110 | ||
95 | 111 | ||
96 | #ifndef KORG_NODCOP | 112 | #ifndef KORG_NODCOP |
97 | kdDebug() << "KOEventViewer::setSource(): " << n << endl; | 113 | kdDebug() << "KOEventViewer::setSource(): " << n << endl; |
98 | QString tmpStr; | 114 | QString tmpStr; |
99 | if (n.startsWith("mailto:")) { | 115 | if (n.startsWith("mailto:")) { |
100 | KApplication::kApplication()->invokeMailer(n.mid(7),QString::null); | 116 | KApplication::kApplication()->invokeMailer(n.mid(7),QString::null); |
101 | //emit showIncidence(n); | 117 | //emit showIncidence(n); |
102 | return; | 118 | return; |
103 | } else if (n.startsWith("uid:")) { | 119 | } else if (n.startsWith("uid:")) { |
104 | DCOPClient *client = KApplication::kApplication()->dcopClient(); | 120 | DCOPClient *client = KApplication::kApplication()->dcopClient(); |
105 | const QByteArray noParamData; | 121 | const QByteArray noParamData; |
106 | const QByteArray paramData; | 122 | const QByteArray paramData; |
107 | QByteArray replyData; | 123 | QByteArray replyData; |
108 | QCString replyTypeStr; | 124 | QCString replyTypeStr; |
109 | #define PING_ABBROWSER (client->call("kaddressbook", "KAddressBookIface", "interfaces()", noParamData, replyTypeStr, replyData)) | 125 | #define PING_ABBROWSER (client->call("kaddressbook", "KAddressBookIface", "interfaces()", noParamData, replyTypeStr, replyData)) |
110 | bool foundAbbrowser = PING_ABBROWSER; | 126 | bool foundAbbrowser = PING_ABBROWSER; |
111 | 127 | ||
112 | if (foundAbbrowser) { | 128 | if (foundAbbrowser) { |
113 | //KAddressbook is already running, so just DCOP to it to bring up the contact editor | 129 | //KAddressbook is already running, so just DCOP to it to bring up the contact editor |
114 | //client->send("kaddressbook","KAddressBookIface", | 130 | //client->send("kaddressbook","KAddressBookIface", |
115 | QDataStream arg(paramData, IO_WriteOnly); | 131 | QDataStream arg(paramData, IO_WriteOnly); |
116 | arg << n.mid(6); | 132 | arg << n.mid(6); |
117 | client->send("kaddressbook", "KAddressBookIface", "showContactEditor( QString )", paramData); | 133 | client->send("kaddressbook", "KAddressBookIface", "showContactEditor( QString )", paramData); |
118 | return; | 134 | return; |
119 | } else { | 135 | } else { |
120 | /* | 136 | /* |
121 | KaddressBook is not already running. Pass it the UID of the contact via the command line while starting it - its neater. | 137 | KaddressBook is not already running. Pass it the UID of the contact via the command line while starting it - its neater. |
122 | We start it without its main interface | 138 | We start it without its main interface |
123 | */ | 139 | */ |
124 | KIconLoader* iconLoader = new KIconLoader(); | 140 | KIconLoader* iconLoader = new KIconLoader(); |
125 | QString iconPath = iconLoader->iconPath("go",KIcon::Small); | 141 | QString iconPath = iconLoader->iconPath("go",KIcon::Small); |
126 | ActionManager::setStartedKAddressBook(true); | 142 | ActionManager::setStartedKAddressBook(true); |
127 | tmpStr = "kaddressbook --editor-only --uid "; | 143 | tmpStr = "kaddressbook --editor-only --uid "; |
128 | tmpStr += KProcess::quote(n.mid(6)); | 144 | tmpStr += KProcess::quote(n.mid(6)); |
129 | KRun::runCommand(tmpStr,"KAddressBook",iconPath); | 145 | KRun::runCommand(tmpStr,"KAddressBook",iconPath); |
130 | return; | 146 | return; |
131 | } | 147 | } |
132 | } else { | 148 | } else { |
133 | //QTextBrowser::setSource(n); | 149 | //QTextBrowser::setSource(n); |
134 | } | 150 | } |
135 | #endif | 151 | #endif |
136 | } | 152 | } |
137 | 153 | ||
138 | void KOEventViewer::addTag(const QString & tag,const QString & text) | 154 | void KOEventViewer::addTag(const QString & tag,const QString & text) |
139 | { | 155 | { |
140 | int number=text.contains("\n"); | 156 | int number=text.contains("\n"); |
141 | QString str = "<" + tag + ">"; | 157 | QString str = "<" + tag + ">"; |
142 | QString tmpText=text; | 158 | QString tmpText=text; |
143 | QString tmpStr=str; | 159 | QString tmpStr=str; |
144 | if(number !=-1) | 160 | if(number !=-1) |
145 | { | 161 | { |
146 | if (number > 0) { | 162 | if (number > 0) { |
147 | int pos=0; | 163 | int pos=0; |
148 | QString tmp; | 164 | QString tmp; |
149 | for(int i=0;i<=number;i++) { | 165 | for(int i=0;i<=number;i++) { |
150 | pos=tmpText.find("\n"); | 166 | pos=tmpText.find("\n"); |
151 | tmp=tmpText.left(pos); | 167 | tmp=tmpText.left(pos); |
152 | tmpText=tmpText.right(tmpText.length()-pos-1); | 168 | tmpText=tmpText.right(tmpText.length()-pos-1); |
153 | tmpStr+=tmp+"<br>"; | 169 | tmpStr+=tmp+"<br>"; |
154 | } | 170 | } |
155 | } | 171 | } |
156 | else tmpStr += tmpText; | 172 | else tmpStr += tmpText; |
157 | tmpStr+="</" + tag + ">"; | 173 | tmpStr+="</" + tag + ">"; |
158 | mText.append(tmpStr); | 174 | mText.append(tmpStr); |
159 | } | 175 | } |
160 | else | 176 | else |
161 | { | 177 | { |
162 | str += text + "</" + tag + ">"; | 178 | str += text + "</" + tag + ">"; |
163 | mText.append(str); | 179 | mText.append(str); |
164 | } | 180 | } |
165 | } | 181 | } |
166 | 182 | ||
167 | void KOEventViewer::setColorMode( int m ) | 183 | void KOEventViewer::setColorMode( int m ) |
168 | { | 184 | { |
169 | mColorMode = m; | 185 | mColorMode = m; |
170 | } | 186 | } |
171 | void KOEventViewer::appendEvent(Event *event, int mode ) | 187 | void KOEventViewer::appendEvent(Event *event, int mode ) |
172 | { | 188 | { |
189 | mMailSubject = ""; | ||
173 | mCurrentIncidence = event; | 190 | mCurrentIncidence = event; |
174 | bool shortDate = KOPrefs::instance()->mShortDateInViewer; | 191 | bool shortDate = KOPrefs::instance()->mShortDateInViewer; |
175 | topLevelWidget()->setCaption(i18n("Event Viewer")); | 192 | topLevelWidget()->setCaption(i18n("Event Viewer")); |
176 | if ( mode == 0 ) { | 193 | if ( mode == 0 ) { |
177 | addTag("h2",event->summary()); | 194 | addTag("h2",event->summary()); |
178 | } | 195 | } |
179 | else { | 196 | else { |
180 | if ( mColorMode == 1 ) { | 197 | if ( mColorMode == 1 ) { |
181 | mText +="<font color=\"#00A000\">"; | 198 | mText +="<font color=\"#00A000\">"; |
182 | } | 199 | } |
183 | if ( mColorMode == 2 ) { | 200 | if ( mColorMode == 2 ) { |
184 | mText +="<font color=\"#C00000\">"; | 201 | mText +="<font color=\"#C00000\">"; |
185 | } | 202 | } |
186 | // mText +="<font color=\"#F00000\">" + i18n("O-due!") + "</font>"; | 203 | // mText +="<font color=\"#F00000\">" + i18n("O-due!") + "</font>"; |
187 | if ( mode == 1 ) { | 204 | if ( mode == 1 ) { |
188 | addTag("h2",i18n( "Local: " ) +event->summary()); | 205 | addTag("h2",i18n( "Local: " ) +event->summary()); |
189 | } else { | 206 | } else { |
190 | addTag("h2",i18n( "Remote: " ) +event->summary()); | 207 | addTag("h2",i18n( "Remote: " ) +event->summary()); |
191 | } | 208 | } |
192 | addTag("h3",i18n( "Last modified: " ) + KGlobal::locale()->formatDateTime(event->lastModified(),shortDate, true ) ); | 209 | addTag("h3",i18n( "Last modified: " ) + KGlobal::locale()->formatDateTime(event->lastModified(),shortDate, true ) ); |
193 | if ( mColorMode ) | 210 | if ( mColorMode ) |
194 | mText += "</font>"; | 211 | mText += "</font>"; |
195 | } | 212 | } |
213 | mMailSubject += i18n( "Meeting " )+ event->summary(); | ||
196 | if (event->cancelled ()) { | 214 | if (event->cancelled ()) { |
197 | mText +="<font color=\"#B00000\">"; | 215 | mText +="<font color=\"#B00000\">"; |
198 | addTag("i",i18n("This event has been cancelled!")); | 216 | addTag("i",i18n("This event has been cancelled!")); |
199 | mText.append("<br>"); | 217 | mText.append("<br>"); |
200 | mText += "</font>"; | 218 | mText += "</font>"; |
219 | mMailSubject += i18n("(cancelled)"); | ||
201 | } | 220 | } |
202 | if (!event->location().isEmpty()) { | 221 | if (!event->location().isEmpty()) { |
203 | addTag("b",i18n("Location: ")); | 222 | addTag("b",i18n("Location: ")); |
204 | mText.append(event->location()+"<br>"); | 223 | mText.append(event->location()+"<br>"); |
224 | mMailSubject += i18n(" at ") + event->location(); | ||
205 | } | 225 | } |
206 | if (event->doesFloat()) { | 226 | if (event->doesFloat()) { |
207 | if (event->isMultiDay()) { | 227 | if (event->isMultiDay()) { |
208 | mText.append(i18n("<p><b>From:</b> %1 </p><p><b>To:</b> %2</p>") | 228 | mText.append(i18n("<p><b>From:</b> %1 </p><p><b>To:</b> %2</p>") |
209 | .arg(event->dtStartDateStr(shortDate)) | 229 | .arg(event->dtStartDateStr(shortDate)) |
210 | .arg(event->dtEndDateStr(shortDate))); | 230 | .arg(event->dtEndDateStr(shortDate))); |
211 | } else { | 231 | } else { |
212 | mText.append(i18n("<p><b>On:</b> %1</p>").arg(event->dtStartDateStr( shortDate ))); | 232 | mText.append(i18n("<p><b>On:</b> %1</p>").arg(event->dtStartDateStr( shortDate ))); |
213 | } | 233 | } |
214 | } else { | 234 | } else { |
215 | if (event->isMultiDay()) { | 235 | if (event->isMultiDay()) { |
216 | mText.append(i18n("<p><b>From:</b> %1</p> ") | 236 | mText.append(i18n("<p><b>From:</b> %1</p> ") |
217 | .arg(event->dtStartStr( shortDate))); | 237 | .arg(event->dtStartStr( shortDate))); |
218 | mText.append(i18n("<p><b>To:</b> %1</p>") | 238 | mText.append(i18n("<p><b>To:</b> %1</p>") |
219 | .arg(event->dtEndStr(shortDate))); | 239 | .arg(event->dtEndStr(shortDate))); |
220 | } else { | 240 | } else { |
221 | mText.append(i18n("<p><b>On:</b> %1</p> ") | 241 | mText.append(i18n("<p><b>On:</b> %1</p> ") |
222 | .arg(event->dtStartDateStr( shortDate ))); | 242 | .arg(event->dtStartDateStr( shortDate ))); |
223 | mText.append(i18n("<p><b>From:</b> %1 <b>To:</b> %2</p>") | 243 | mText.append(i18n("<p><b>From:</b> %1 <b>To:</b> %2</p>") |
224 | .arg(event->dtStartTimeStr()) | 244 | .arg(event->dtStartTimeStr()) |
225 | .arg(event->dtEndTimeStr())); | 245 | .arg(event->dtEndTimeStr())); |
226 | } | 246 | } |
227 | } | 247 | } |
228 | 248 | ||
229 | if (event->recurrence()->doesRecur()) { | 249 | if (event->recurrence()->doesRecur()) { |
230 | 250 | ||
231 | QString recurText = event->recurrence()->recurrenceText(); | 251 | QString recurText = event->recurrence()->recurrenceText(); |
232 | addTag("p","<em>" + i18n("This is a %1 recurring event.").arg(recurText ) + "</em>"); | 252 | addTag("p","<em>" + i18n("This is a %1 recurring event.").arg(recurText ) + "</em>"); |
233 | bool last; | 253 | bool last; |
234 | QDate start = QDate::currentDate(); | 254 | QDate start = QDate::currentDate(); |
235 | QDate next; | 255 | QDate next; |
236 | next = event->recurrence()->getPreviousDate( start , &last ); | 256 | next = event->recurrence()->getPreviousDate( start , &last ); |
237 | if ( !last ) { | 257 | if ( !last ) { |
238 | next = event->recurrence()->getNextDate( start.addDays( - 1 ) ); | 258 | next = event->recurrence()->getNextDate( start.addDays( - 1 ) ); |
239 | addTag("p",i18n("<b>Next recurrence is on:</b>") ); | 259 | addTag("p",i18n("<b>Next recurrence is on:</b>") ); |
240 | addTag("p", KGlobal::locale()->formatDate( next, shortDate )); | 260 | addTag("p", KGlobal::locale()->formatDate( next, shortDate )); |
261 | QDateTime nextdt = QDateTime( next, event->dtStart().time()); | ||
262 | mMailSubject += i18n(" - " )+ KGlobal::locale()->formatDateTime( nextdt, true ); | ||
263 | |||
241 | } else { | 264 | } else { |
242 | addTag("p",i18n("<b>Last recurrence was on:</b>") ); | 265 | addTag("p",i18n("<b>Last recurrence was on:</b>") ); |
243 | addTag("p", KGlobal::locale()->formatDate( next, shortDate )); | 266 | addTag("p", KGlobal::locale()->formatDate( next, shortDate )); |
244 | } | 267 | } |
268 | } else { | ||
269 | mMailSubject += i18n(" - " )+event->dtStartStr( true ); | ||
270 | |||
245 | } | 271 | } |
246 | 272 | ||
247 | 273 | ||
248 | if (event->isAlarmEnabled()) { | 274 | if (event->isAlarmEnabled()) { |
249 | Alarm *alarm =event->alarms().first() ; | 275 | Alarm *alarm =event->alarms().first() ; |
250 | QDateTime t = alarm->time(); | 276 | QDateTime t = alarm->time(); |
251 | int min = t.secsTo( event->dtStart() )/60; | 277 | int min = t.secsTo( event->dtStart() )/60; |
252 | QString s =i18n("( %1 min before )").arg( min ); | 278 | QString s =i18n("( %1 min before )").arg( min ); |
253 | addTag("p",i18n("<b>Alarm on: ") + s +" </b>"); | 279 | addTag("p",i18n("<b>Alarm on: ") + s +" </b>"); |
254 | addTag("p", KGlobal::locale()->formatDateTime( t, shortDate )); | 280 | addTag("p", KGlobal::locale()->formatDateTime( t, shortDate )); |
255 | //addTag("p",s); | 281 | //addTag("p",s); |
256 | } | 282 | } |
257 | 283 | ||
258 | addTag("b",i18n("Access: ")); | 284 | addTag("b",i18n("Access: ")); |
259 | mText.append(event->secrecyStr()+"<br>"); | 285 | mText.append(event->secrecyStr()+"<br>"); |
260 | if (!event->description().isEmpty()) { | 286 | if (!event->description().isEmpty()) { |
261 | addTag("p",i18n("<b>Details: </b>")); | 287 | addTag("p",i18n("<b>Details: </b>")); |
262 | addTag("p",event->description()); | 288 | addTag("p",event->description()); |
263 | } | 289 | } |
264 | 290 | ||
265 | formatCategories(event); | 291 | formatCategories(event); |
266 | 292 | ||
267 | formatReadOnly(event); | 293 | formatReadOnly(event); |
268 | formatAttendees(event); | 294 | formatAttendees(event); |
269 | 295 | ||
270 | setText(mText); | 296 | setText(mText); |
271 | //QWhatsThis::add(this,mText); | 297 | //QWhatsThis::add(this,mText); |
272 | 298 | ||
273 | } | 299 | } |
274 | 300 | ||
275 | void KOEventViewer::appendTodo(Todo *event, int mode ) | 301 | void KOEventViewer::appendTodo(Todo *event, int mode ) |
276 | { | 302 | { |
303 | mMailSubject = ""; | ||
277 | mCurrentIncidence = event; | 304 | mCurrentIncidence = event; |
278 | topLevelWidget()->setCaption(i18n("Todo Viewer")); | 305 | topLevelWidget()->setCaption(i18n("Todo Viewer")); |
279 | bool shortDate = KOPrefs::instance()->mShortDateInViewer; | 306 | bool shortDate = KOPrefs::instance()->mShortDateInViewer; |
280 | if (mode == 0 ) | 307 | if (mode == 0 ) |
281 | addTag("h2",event->summary()); | 308 | addTag("h2",event->summary()); |
282 | else { | 309 | else { |
283 | if ( mColorMode == 1 ) { | 310 | if ( mColorMode == 1 ) { |
284 | mText +="<font color=\"#00A000\">"; | 311 | mText +="<font color=\"#00A000\">"; |
285 | } | 312 | } |
286 | if ( mColorMode == 2 ) { | 313 | if ( mColorMode == 2 ) { |
287 | mText +="<font color=\"#B00000\">"; | 314 | mText +="<font color=\"#B00000\">"; |
288 | } | 315 | } |
289 | if ( mode == 1 ) { | 316 | if ( mode == 1 ) { |
290 | addTag("h2",i18n( "Local: " ) +event->summary()); | 317 | addTag("h2",i18n( "Local: " ) +event->summary()); |
291 | } else { | 318 | } else { |
292 | addTag("h2",i18n( "Remote: " ) +event->summary()); | 319 | addTag("h2",i18n( "Remote: " ) +event->summary()); |
293 | } | 320 | } |
294 | addTag("h3",i18n( "Last modified: " ) + KGlobal::locale()->formatDateTime(event->lastModified(),shortDate, true ) ); | 321 | addTag("h3",i18n( "Last modified: " ) + KGlobal::locale()->formatDateTime(event->lastModified(),shortDate, true ) ); |
295 | if ( mColorMode ) | 322 | if ( mColorMode ) |
296 | mText += "</font>"; | 323 | mText += "</font>"; |
297 | } | 324 | } |
325 | mMailSubject += i18n( "Todo " )+ event->summary(); | ||
298 | if (event->cancelled ()) { | 326 | if (event->cancelled ()) { |
299 | mText +="<font color=\"#B00000\">"; | 327 | mText +="<font color=\"#B00000\">"; |
300 | addTag("i",i18n("This todo has been cancelled!")); | 328 | addTag("i",i18n("This todo has been cancelled!")); |
301 | mText.append("<br>"); | 329 | mText.append("<br>"); |
302 | mText += "</font>"; | 330 | mText += "</font>"; |
331 | mMailSubject += i18n("(cancelled)"); | ||
303 | } | 332 | } |
304 | 333 | ||
305 | if (!event->location().isEmpty()) { | 334 | if (!event->location().isEmpty()) { |
306 | addTag("b",i18n("Location: ")); | 335 | addTag("b",i18n("Location: ")); |
307 | mText.append(event->location()+"<br>"); | 336 | mText.append(event->location()+"<br>"); |
337 | mMailSubject += i18n(" at ") + event->location(); | ||
308 | } | 338 | } |
309 | if (event->hasDueDate()) { | 339 | if (event->hasDueDate()) { |
310 | mText.append(i18n("<p><b>Due on:</b> %1</p>").arg(event->dtDueStr(KOPrefs::instance()->mShortDateInViewer))); | 340 | mText.append(i18n("<p><b>Due on:</b> %1</p>").arg(event->dtDueStr(KOPrefs::instance()->mShortDateInViewer))); |
341 | mMailSubject += i18n(" - " )+event->dtDueStr( true ); | ||
311 | } | 342 | } |
312 | addTag("b",i18n("Access: ")); | 343 | addTag("b",i18n("Access: ")); |
313 | mText.append(event->secrecyStr()+"<br>"); | 344 | mText.append(event->secrecyStr()+"<br>"); |
314 | if (!event->description().isEmpty()) { | 345 | if (!event->description().isEmpty()) { |
315 | addTag("p",i18n("<b>Details: </b>")); | 346 | addTag("p",i18n("<b>Details: </b>")); |
316 | addTag("p",event->description()); | 347 | addTag("p",event->description()); |
317 | } | 348 | } |
318 | 349 | ||
319 | formatCategories(event); | 350 | formatCategories(event); |
320 | 351 | ||
321 | mText.append(i18n("<p><b>Priority:</b> %2</p>") | 352 | mText.append(i18n("<p><b>Priority:</b> %2</p>") |
322 | .arg(QString::number(event->priority()))); | 353 | .arg(QString::number(event->priority()))); |
323 | 354 | ||
324 | mText.append(i18n("<p><i>%1 % completed</i></p>") | 355 | mText.append(i18n("<p><i>%1 % completed</i></p>") |
325 | .arg(event->percentComplete())); | 356 | .arg(event->percentComplete())); |
326 | 357 | ||
327 | formatReadOnly(event); | 358 | formatReadOnly(event); |
328 | formatAttendees(event); | 359 | formatAttendees(event); |
329 | 360 | ||
330 | setText(mText); | 361 | setText(mText); |
331 | } | 362 | } |
332 | 363 | ||
333 | void KOEventViewer::formatCategories(Incidence *event) | 364 | void KOEventViewer::formatCategories(Incidence *event) |
334 | { | 365 | { |
335 | if (!event->categoriesStr().isEmpty()) { | 366 | if (!event->categoriesStr().isEmpty()) { |
336 | if (event->categories().count() == 1) { | 367 | if (event->categories().count() == 1) { |
337 | addTag("h3",i18n("Category")); | 368 | addTag("h3",i18n("Category")); |
338 | } else { | 369 | } else { |
339 | addTag("h3",i18n("Categories")); | 370 | addTag("h3",i18n("Categories")); |
340 | } | 371 | } |
341 | addTag("p",event->categoriesStr()); | 372 | addTag("p",event->categoriesStr()); |
342 | } | 373 | } |
343 | } | 374 | } |
344 | void KOEventViewer::formatAttendees(Incidence *event) | 375 | void KOEventViewer::formatAttendees(Incidence *event) |
345 | { | 376 | { |
346 | QPtrList<Attendee> attendees = event->attendees(); | 377 | QPtrList<Attendee> attendees = event->attendees(); |
347 | if (attendees.count()) { | 378 | if (attendees.count()) { |
348 | 379 | ||
349 | 380 | ||
350 | QString iconPath = KGlobal::iconLoader()->iconPath("mailappt",KIcon::Small); | 381 | QString iconPath = KGlobal::iconLoader()->iconPath("mailappt",KIcon::Small); |
351 | addTag("h3",i18n("Organizer")); | 382 | addTag("h3",i18n("Organizer")); |
352 | mText.append("<ul><li>"); | 383 | mText.append("<ul><li>"); |
353 | #ifndef KORG_NOKABC | 384 | #ifndef KORG_NOKABC |
354 | 385 | ||
355 | KABC::AddressBook *add_book = KABC::StdAddressBook::self(); | 386 | KABC::AddressBook *add_book = KABC::StdAddressBook::self(); |
356 | KABC::Addressee::List addressList; | 387 | KABC::Addressee::List addressList; |
357 | addressList = add_book->findByEmail(event->organizer()); | 388 | addressList = add_book->findByEmail(event->organizer()); |
358 | KABC::Addressee o = addressList.first(); | 389 | KABC::Addressee o = addressList.first(); |
359 | if (!o.isEmpty() && addressList.size()<2) { | 390 | if (!o.isEmpty() && addressList.size()<2) { |
360 | mText += "<a href=\"uid:" + o.uid() + "\">"; | 391 | mText += "<a href=\"uid:" + o.uid() + "\">"; |
361 | mText += o.formattedName(); | 392 | mText += o.formattedName(); |
362 | mText += "</a>\n"; | 393 | mText += "</a>\n"; |
363 | } else { | 394 | } else { |
364 | mText.append(event->organizer()); | 395 | mText.append(event->organizer()); |
365 | } | 396 | } |
366 | #else | 397 | #else |
367 | mText.append(event->organizer()); | 398 | mText.append(event->organizer()); |
368 | #endif | 399 | #endif |
369 | 400 | ||
370 | if (iconPath) { | 401 | if (iconPath) { |
371 | mText += " <a href=\"mailto:" + event->organizer() + "\">"; | 402 | mText += " <a href=\"mailto:" + event->organizer() + "\">"; |
372 | mText += "<IMG src=\"" + iconPath + "\">"; | 403 | mText += "<IMG src=\"" + iconPath + "\">"; |
373 | mText += "</a>\n"; | 404 | mText += "</a>\n"; |
374 | } | 405 | } |
375 | mText.append("</li></ul>"); | 406 | mText.append("</li></ul>"); |
376 | 407 | ||
377 | addTag("h3",i18n("Attendees")); | 408 | addTag("h3",i18n("Attendees")); |
378 | Attendee *a; | 409 | Attendee *a; |
379 | mText.append("<ul>"); | 410 | mText.append("<ul>"); |
380 | for(a=attendees.first();a;a=attendees.next()) { | 411 | for(a=attendees.first();a;a=attendees.next()) { |
381 | #ifndef KORG_NOKABC | 412 | #ifndef KORG_NOKABC |
382 | if (a->name().isEmpty()) { | 413 | if (a->name().isEmpty()) { |
383 | addressList = add_book->findByEmail(a->email()); | 414 | addressList = add_book->findByEmail(a->email()); |
384 | KABC::Addressee o = addressList.first(); | 415 | KABC::Addressee o = addressList.first(); |
385 | if (!o.isEmpty() && addressList.size()<2) { | 416 | if (!o.isEmpty() && addressList.size()<2) { |
386 | mText += "<a href=\"uid:" + o.uid() + "\">"; | 417 | mText += "<a href=\"uid:" + o.uid() + "\">"; |
387 | mText += o.formattedName(); | 418 | mText += o.formattedName(); |
388 | mText += "</a>\n"; | 419 | mText += "</a>\n"; |
389 | } else { | 420 | } else { |
390 | mText += "<li>"; | 421 | mText += "<li>"; |
391 | mText.append(a->email()); | 422 | mText.append(a->email()); |
392 | mText += "\n"; | 423 | mText += "\n"; |
393 | } | 424 | } |
394 | } else { | 425 | } else { |
395 | mText += "<li><a href=\"uid:" + a->uid() + "\">"; | 426 | mText += "<li><a href=\"uid:" + a->uid() + "\">"; |
396 | if (!a->name().isEmpty()) mText += a->name(); | 427 | if (!a->name().isEmpty()) mText += a->name(); |
397 | else mText += a->email(); | 428 | else mText += a->email(); |
398 | mText += "</a>\n"; | 429 | mText += "</a>\n"; |
399 | } | 430 | } |
400 | #else | 431 | #else |
401 | //qDebug("nokabc "); | 432 | //qDebug("nokabc "); |
402 | mText += "<li><a href=\"uid:" + a->uid() + "\">"; | 433 | mText += "<li><a href=\"uid:" + a->uid() + "\">"; |
403 | if (!a->name().isEmpty()) mText += a->name(); | 434 | if (!a->name().isEmpty()) mText += a->name(); |
404 | else mText += a->email(); | 435 | else mText += a->email(); |
405 | mText += "</a>\n"; | 436 | mText += "</a>\n"; |
406 | #endif | 437 | #endif |
407 | 438 | ||
439 | |||
408 | if (!a->email().isEmpty()) { | 440 | if (!a->email().isEmpty()) { |
409 | if (iconPath) { | 441 | if (iconPath) { |
410 | mText += "<a href=\"mailto:" + a->name() +" "+ "<" + a->email() + ">" + "\">"; | 442 | mText += "<a href=\"mailto:" + a->name() +" <" + a->email() + ">:" + mMailSubject + "\">"; |
411 | mText += "<IMG src=\"" + iconPath + "\">"; | 443 | mText += "<IMG src=\"" + iconPath + "\">"; |
412 | mText += "</a>\n"; | 444 | mText += "</a>\n"; |
413 | } | 445 | } |
414 | } | 446 | } |
415 | if (a->status() != Attendee::NeedsAction ) | 447 | if (a->status() != Attendee::NeedsAction ) |
416 | mText +="[" + a->statusStr() + "] "; | 448 | mText +="[" + a->statusStr() + "] "; |
417 | if (a->role() == Attendee::Chair ) | 449 | if (a->role() == Attendee::Chair ) |
418 | mText +="(" + a->roleStr().left(1) + ".)"; | 450 | mText +="(" + a->roleStr().left(1) + ".)"; |
419 | } | 451 | } |
420 | mText.append("</li></ul>"); | 452 | mText.append("</li></ul>"); |
421 | } | 453 | } |
422 | 454 | ||
423 | } | 455 | } |
424 | void KOEventViewer::appendJournal(Journal *jour, int mode ) | 456 | void KOEventViewer::appendJournal(Journal *jour, int mode ) |
425 | { | 457 | { |
426 | bool shortDate = KOPrefs::instance()->mShortDateInViewer; | 458 | bool shortDate = KOPrefs::instance()->mShortDateInViewer; |
427 | if (mode == 0 ) | 459 | if (mode == 0 ) |
428 | addTag("h2",i18n("Journal from: ")); | 460 | addTag("h2",i18n("Journal from: ")); |
429 | else { | 461 | else { |
430 | if ( mode == 1 ) { | 462 | if ( mode == 1 ) { |
431 | addTag("h2",i18n( "Local: " ) +i18n("Journal from: ")); | 463 | addTag("h2",i18n( "Local: " ) +i18n("Journal from: ")); |
432 | } else { | 464 | } else { |
433 | addTag("h2",i18n( "Remote: " ) +i18n("Journal from: ")); | 465 | addTag("h2",i18n( "Remote: " ) +i18n("Journal from: ")); |
434 | } | 466 | } |
435 | addTag("h3",i18n( "Last modified " ) + KGlobal::locale()->formatDateTime(jour->lastModified(),shortDate ) ); | 467 | addTag("h3",i18n( "Last modified " ) + KGlobal::locale()->formatDateTime(jour->lastModified(),shortDate ) ); |
436 | } | 468 | } |
437 | topLevelWidget()->setCaption("Journal Viewer"); | 469 | topLevelWidget()->setCaption("Journal Viewer"); |
438 | mText.append(i18n("<h3> %1 </h3> ").arg(jour->dtStartDateStr(KOPrefs::instance()->mShortDateInViewer))); | 470 | mText.append(i18n("<h3> %1 </h3> ").arg(jour->dtStartDateStr(KOPrefs::instance()->mShortDateInViewer))); |
439 | if (!jour->description().isEmpty()) { | 471 | if (!jour->description().isEmpty()) { |
440 | addTag("p",jour->description()); | 472 | addTag("p",jour->description()); |
441 | } | 473 | } |
442 | setText(mText); | 474 | setText(mText); |
443 | } | 475 | } |
444 | 476 | ||
445 | void KOEventViewer::formatReadOnly(Incidence *event) | 477 | void KOEventViewer::formatReadOnly(Incidence *event) |
446 | { | 478 | { |
447 | if (event->isReadOnly()) { | 479 | if (event->isReadOnly()) { |
448 | addTag("p","<em>(" + i18n("read-only") + ")</em>"); | 480 | addTag("p","<em>(" + i18n("read-only") + ")</em>"); |
449 | } | 481 | } |
450 | } | 482 | } |
451 | void KOEventViewer::setSyncMode( bool b ) | 483 | void KOEventViewer::setSyncMode( bool b ) |
452 | { | 484 | { |
453 | mSyncMode = b; | 485 | mSyncMode = b; |
454 | } | 486 | } |
455 | 487 | ||
456 | 488 | ||
457 | void KOEventViewer::setTodo(Todo *event, bool clearV ) | 489 | void KOEventViewer::setTodo(Todo *event, bool clearV ) |
458 | { | 490 | { |
459 | if ( clearV ) | 491 | if ( clearV ) |
460 | clearEvents(); | 492 | clearEvents(); |
461 | if ( mSyncMode ) { | 493 | if ( mSyncMode ) { |
462 | if ( clearV ) | 494 | if ( clearV ) |
463 | appendTodo(event,1 ); | 495 | appendTodo(event,1 ); |
464 | else | 496 | else |
465 | appendTodo(event,2); | 497 | appendTodo(event,2); |
466 | } else | 498 | } else |
467 | appendTodo(event); | 499 | appendTodo(event); |
468 | } | 500 | } |
469 | void KOEventViewer::setJournal(Journal *event, bool clearV ) | 501 | void KOEventViewer::setJournal(Journal *event, bool clearV ) |
470 | { | 502 | { |
471 | if ( clearV ) | 503 | if ( clearV ) |
472 | clearEvents(); | 504 | clearEvents(); |
473 | if ( mSyncMode ) { | 505 | if ( mSyncMode ) { |
474 | if ( clearV ) | 506 | if ( clearV ) |
475 | appendJournal(event, 1); | 507 | appendJournal(event, 1); |
476 | else | 508 | else |
477 | appendJournal(event, 2); | 509 | appendJournal(event, 2); |
478 | } else | 510 | } else |
479 | appendJournal(event); | 511 | appendJournal(event); |
480 | } | 512 | } |
481 | 513 | ||
482 | void KOEventViewer::setEvent(Event *event) | 514 | void KOEventViewer::setEvent(Event *event) |
483 | { | 515 | { |
484 | clearEvents(); | 516 | clearEvents(); |
485 | if ( mSyncMode ) | 517 | if ( mSyncMode ) |
486 | appendEvent(event, 1); | 518 | appendEvent(event, 1); |
487 | else | 519 | else |
488 | appendEvent(event); | 520 | appendEvent(event); |
489 | } | 521 | } |
490 | 522 | ||
491 | void KOEventViewer::addEvent(Event *event) | 523 | void KOEventViewer::addEvent(Event *event) |
492 | { | 524 | { |
493 | if ( mSyncMode ) | 525 | if ( mSyncMode ) |
494 | appendEvent(event, 2); | 526 | appendEvent(event, 2); |
495 | else | 527 | else |
496 | appendEvent(event); | 528 | appendEvent(event); |
497 | } | 529 | } |
498 | 530 | ||
499 | void KOEventViewer::clearEvents(bool now) | 531 | void KOEventViewer::clearEvents(bool now) |
500 | { | 532 | { |
501 | mText = ""; | 533 | mText = ""; |
502 | if (now) setText(mText); | 534 | if (now) setText(mText); |
503 | } | 535 | } |
504 | 536 | ||
505 | void KOEventViewer::addText(QString text) | 537 | void KOEventViewer::addText(QString text) |
506 | { | 538 | { |
507 | mText.append(text); | 539 | mText.append(text); |
508 | setText(mText); | 540 | setText(mText); |
509 | } | 541 | } |
diff --git a/korganizer/koeventviewer.h b/korganizer/koeventviewer.h index 74f1135..0cd3f33 100644 --- a/korganizer/koeventviewer.h +++ b/korganizer/koeventviewer.h | |||
@@ -1,73 +1,74 @@ | |||
1 | /* | 1 | /* |
2 | This file is part of KOrganizer. | 2 | This file is part of KOrganizer. |
3 | Copyright (c) 2001 Cornelius Schumacher <schumacher@kde.org> | 3 | Copyright (c) 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 | #ifndef KOEVENTVIEWER_H | 19 | #ifndef KOEVENTVIEWER_H |
20 | #define KOEVENTVIEWER_H | 20 | #define KOEVENTVIEWER_H |
21 | // | 21 | // |
22 | // Viewer widget for events. | 22 | // Viewer widget for events. |
23 | // | 23 | // |
24 | 24 | ||
25 | #include <qtextbrowser.h> | 25 | #include <qtextbrowser.h> |
26 | 26 | ||
27 | #include <libkcal/event.h> | 27 | #include <libkcal/event.h> |
28 | #include <libkcal/journal.h> | 28 | #include <libkcal/journal.h> |
29 | 29 | ||
30 | 30 | ||
31 | using namespace KCal; | 31 | using namespace KCal; |
32 | 32 | ||
33 | class KOEventViewer : public QTextBrowser { | 33 | class KOEventViewer : public QTextBrowser { |
34 | Q_OBJECT | 34 | Q_OBJECT |
35 | public: | 35 | public: |
36 | KOEventViewer(QWidget *parent=0,const char *name=0); | 36 | KOEventViewer(QWidget *parent=0,const char *name=0); |
37 | virtual ~KOEventViewer(); | 37 | virtual ~KOEventViewer(); |
38 | 38 | ||
39 | void setSource(const QString &); | 39 | void setSource(const QString &); |
40 | void setEvent(Event *event); | 40 | void setEvent(Event *event); |
41 | void addEvent(Event *event); | 41 | void addEvent(Event *event); |
42 | void setTodo(Todo *event, bool clearV = true ); | 42 | void setTodo(Todo *event, bool clearV = true ); |
43 | void setJournal(Journal *jour, bool clearV = true ); | 43 | void setJournal(Journal *jour, bool clearV = true ); |
44 | 44 | ||
45 | void appendEvent(Event *event, int mode = 0 ); | 45 | void appendEvent(Event *event, int mode = 0 ); |
46 | void appendTodo(Todo *event, int mode = 0 ); | 46 | void appendTodo(Todo *event, int mode = 0 ); |
47 | void appendJournal(Journal *jour, int mode = 0 ); | 47 | void appendJournal(Journal *jour, int mode = 0 ); |
48 | 48 | ||
49 | void clearEvents(bool now=false); | 49 | void clearEvents(bool now=false); |
50 | 50 | ||
51 | void addText(QString text); | 51 | void addText(QString text); |
52 | void setSyncMode( bool ); | 52 | void setSyncMode( bool ); |
53 | void setColorMode( int ); | 53 | void setColorMode( int ); |
54 | 54 | ||
55 | protected: | 55 | protected: |
56 | int mColorMode; | 56 | int mColorMode; |
57 | void addTag(const QString & tag,const QString & text); | 57 | void addTag(const QString & tag,const QString & text); |
58 | 58 | ||
59 | void formatCategories(Incidence *event); | 59 | void formatCategories(Incidence *event); |
60 | void formatAttendees(Incidence *event); | 60 | void formatAttendees(Incidence *event); |
61 | void formatReadOnly(Incidence *event); | 61 | void formatReadOnly(Incidence *event); |
62 | 62 | ||
63 | private: | 63 | private: |
64 | QTextBrowser *mEventTextView; | 64 | QTextBrowser *mEventTextView; |
65 | bool mSyncMode; | 65 | bool mSyncMode; |
66 | 66 | ||
67 | QString mText; | 67 | QString mText; |
68 | QString mMailSubject; | ||
68 | Incidence* mCurrentIncidence; | 69 | Incidence* mCurrentIncidence; |
69 | signals: | 70 | signals: |
70 | void launchaddressbook(QString uid); | 71 | void launchaddressbook(QString uid); |
71 | }; | 72 | }; |
72 | 73 | ||
73 | #endif | 74 | #endif |
diff --git a/korganizer/main.cpp b/korganizer/main.cpp index a357988..69ef294 100644 --- a/korganizer/main.cpp +++ b/korganizer/main.cpp | |||
@@ -1,109 +1,87 @@ | |||
1 | 1 | ||
2 | 2 | ||
3 | #ifndef DESKTOP_VERSION | 3 | #ifndef DESKTOP_VERSION |
4 | #include <qpe/qpeapplication.h> | 4 | #include <qpe/qpeapplication.h> |
5 | #include <qpe/global.h> | 5 | #include <qpe/global.h> |
6 | #include <stdlib.h> | 6 | #include <stdlib.h> |
7 | #else | 7 | #else |
8 | #include <qapplication.h> | 8 | #include <qapplication.h> |
9 | #include <qstring.h> | 9 | #include <qstring.h> |
10 | #include <qwindowsstyle.h> | 10 | #include <qwindowsstyle.h> |
11 | #include <qplatinumstyle.h> | 11 | #include <qplatinumstyle.h> |
12 | #include <qsgistyle.h> | 12 | #include <qsgistyle.h> |
13 | #endif | 13 | #endif |
14 | 14 | ||
15 | #include <qdir.h> | 15 | #include <qdir.h> |
16 | #include <kstandarddirs.h> | 16 | #include <kstandarddirs.h> |
17 | #include <kglobal.h> | 17 | #include <kglobal.h> |
18 | #include <stdio.h> | 18 | #include <stdio.h> |
19 | #include "mainwindow.h" | 19 | #include "mainwindow.h" |
20 | 20 | ||
21 | int main( int argc, char **argv ) | 21 | int main( int argc, char **argv ) |
22 | { | 22 | { |
23 | #ifndef DESKTOP_VERSION | 23 | #ifndef DESKTOP_VERSION |
24 | QPEApplication a( argc, argv ); | 24 | QPEApplication a( argc, argv ); |
25 | a.setKeepRunning (); | 25 | a.setKeepRunning (); |
26 | #else | 26 | #else |
27 | QApplication a( argc, argv ); | 27 | QApplication a( argc, argv ); |
28 | QApplication::setStyle( new QPlatinumStyle ()); | 28 | QApplication::setStyle( new QPlatinumStyle ()); |
29 | #endif | 29 | #endif |
30 | bool exitHelp = false; | 30 | bool exitHelp = false; |
31 | if ( argc > 1 ) { | 31 | if ( argc > 1 ) { |
32 | QString command = argv[1]; | 32 | QString command = argv[1]; |
33 | if ( command == "-help" ){ | 33 | if ( command == "-help" ){ |
34 | printf("KO/Pi command line commands:\n"); | 34 | printf("KO/Pi command line commands:\n"); |
35 | printf(" no command: Start KO/Pi in usual way\n"); | 35 | printf(" no command: Start KO/Pi in usual way\n"); |
36 | printf(" -help: This output\n"); | 36 | printf(" -help: This output\n"); |
37 | printf("Next Option: Open or Show after start:\n"); | 37 | printf("Next Option: Open or Show after start:\n"); |
38 | printf(" -newTodo: New Todo dialog\n"); | 38 | printf(" -newTodo: New Todo dialog\n"); |
39 | printf(" -newEvent: New Event dialog\n"); | 39 | printf(" -newEvent: New Event dialog\n"); |
40 | printf(" -showList: List view\n"); | 40 | printf(" -showList: List view\n"); |
41 | printf(" -showDay: Day view\n"); | 41 | printf(" -showDay: Day view\n"); |
42 | printf(" -showWWeek: Work Week view\n"); | 42 | printf(" -showWWeek: Work Week view\n"); |
43 | printf(" -showWeek: Week view\n"); | 43 | printf(" -showWeek: Week view\n"); |
44 | printf(" -showTodo: Todo view\n"); | 44 | printf(" -showTodo: Todo view\n"); |
45 | printf(" -showJournal: Journal view\n"); | 45 | printf(" -showJournal: Journal view\n"); |
46 | printf(" -showKO: Next Days view\n"); | 46 | printf(" -showKO: Next Days view\n"); |
47 | printf(" -showWNext: What's Next view\n"); | 47 | printf(" -showWNext: What's Next view\n"); |
48 | printf(" -showNextXView: Next X View\n"); | 48 | printf(" -showNextXView: Next X View\n"); |
49 | printf(" -new[Y] and -show[X] may be used togehther\n"); | 49 | printf(" -new[Y] and -show[X] may be used togehther\n"); |
50 | printf(" KO/Pi is exiting now. Bye!\n"); | 50 | printf(" KO/Pi is exiting now. Bye!\n"); |
51 | exitHelp = true; | 51 | exitHelp = true; |
52 | } | 52 | } |
53 | } | 53 | } |
54 | if ( ! exitHelp ) { | 54 | if ( ! exitHelp ) { |
55 | KGlobal::setAppName( "korganizer" ); | 55 | KGlobal::setAppName( "korganizer" ); |
56 | 56 | QString fileName ; | |
57 | |||
58 | QString fileName ; | ||
59 | #ifndef DESKTOP_VERSION | 57 | #ifndef DESKTOP_VERSION |
60 | QString appdir = QDir::homeDirPath() + "/kdepim/apps/" + KGlobal::getAppName(); | ||
61 | KStandardDirs::setAppDir( appdir ); | ||
62 | |||
63 | fileName = getenv("QPEDIR"); | 58 | fileName = getenv("QPEDIR"); |
64 | KGlobal::iconLoader()->setIconPath( fileName +"/pics/kdepim/korganizer/"); | 59 | KGlobal::iconLoader()->setIconPath( fileName +"/pics/kdepim/korganizer/"); |
65 | #else | 60 | #else |
66 | 61 | fileName = qApp->applicationDirPath () + "/kdepim/korganizer/"; | |
67 | #ifndef _WIN32_ | 62 | KGlobal::iconLoader()->setIconPath(QDir::convertSeparators(fileName)); |
68 | fileName = qApp->applicationDirPath () + "/kdepim/korganizer/"; | ||
69 | #else | ||
70 | fileName = qApp->applicationDirPath () + "\\kdepim\\korganizer\\"; | ||
71 | #endif | ||
72 | |||
73 | KGlobal::iconLoader()->setIconPath(fileName); | ||
74 | |||
75 | QString appdir = QDir::homeDirPath(); | ||
76 | //appdir = "C:\\"; | ||
77 | if ( appdir.right(1) == "\\" || appdir.right(1) == "/" ) | ||
78 | appdir += "korganizer"; | ||
79 | else | ||
80 | appdir += "/korganizer"; | ||
81 | KStandardDirs::setAppDir( QDir::convertSeparators( appdir )); | ||
82 | // qDebug(" %s ",KStandardDirs::appDir().latin1() ); | ||
83 | #endif | 63 | #endif |
84 | QDir app_dir; | 64 | KStandardDirs::setAppDir( QDir::convertSeparators(locateLocal("data", "korganizer"))); |
85 | if ( !app_dir.exists(KStandardDirs::appDir()) ) | 65 | MainWindow m; |
86 | app_dir.mkdir (KStandardDirs::appDir()); | ||
87 | MainWindow m; | ||
88 | #ifndef DESKTOP_VERSION | 66 | #ifndef DESKTOP_VERSION |
89 | QObject::connect( &a, SIGNAL (appMessage ( const QCString &, const QByteArray & )),&m, SLOT(recieve( const QCString&, const QByteArray& ))); | 67 | QObject::connect( &a, SIGNAL (appMessage ( const QCString &, const QByteArray & )),&m, SLOT(recieve( const QCString&, const QByteArray& ))); |
90 | a.showMainWidget(&m ); | 68 | a.showMainWidget(&m ); |
91 | #else | 69 | #else |
92 | a.setMainWidget(&m ); | 70 | a.setMainWidget(&m ); |
93 | m.show(); | 71 | m.show(); |
94 | //m.resize( 800, 600 ); | 72 | //m.resize( 800, 600 ); |
95 | QObject::connect(&a, SIGNAL(lastWindowClosed()), &a, SLOT(quit())); | 73 | QObject::connect(&a, SIGNAL(lastWindowClosed()), &a, SLOT(quit())); |
96 | #endif | 74 | #endif |
97 | if ( argc > 1 ) { | 75 | if ( argc > 1 ) { |
98 | QCString command = argv[1]; | 76 | QCString command = argv[1]; |
99 | if ( argc > 2 ) | 77 | if ( argc > 2 ) |
100 | command += argv[2]; | 78 | command += argv[2]; |
101 | qApp->processEvents(); | 79 | qApp->processEvents(); |
102 | m.recieve(command, QByteArray() ); | 80 | m.recieve(command, QByteArray() ); |
103 | 81 | ||
104 | } | 82 | } |
105 | a.exec(); | 83 | a.exec(); |
106 | 84 | ||
107 | } | 85 | } |
108 | qDebug("KO: Bye! "); | 86 | qDebug("KO: Bye! "); |
109 | } | 87 | } |