00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025 #ifndef CALENDARVIEW_H
00026 #define CALENDARVIEW_H
00027
00028 #include <qwidget.h>
00029 #include <qptrlist.h>
00030 #include <qmap.h>
00031 #include <kfile.h>
00032 #include <korganizer/koeventviewer.h>
00033 #include <libkcal/scheduler.h>
00034 #include <kdepimmacros.h>
00035
00036 #include <korganizer/calendarviewbase.h>
00037
00038 class QWidgetStack;
00039 class QSplitter;
00040
00041 class KOViewManager;
00042 class KODialogManager;
00043 class KOTodoView;
00044 class KOEventEditor;
00045 class DateNavigatorContainer;
00046 class DateNavigator;
00047 class KOIncidenceEditor;
00048 class ResourceView;
00049 class NavigatorBar;
00050 class DateChecker;
00051
00052 namespace KOrg { class History; class IncidenceChangerBase; }
00053 class HTMLExportSettings;
00054
00055 using namespace KOrg;
00056 using namespace KCal;
00057
00058 class CalendarViewExtension : public QWidget
00059 {
00060 public:
00061 CalendarViewExtension( QWidget *parent, const char *name = 0 )
00062 : QWidget( parent, name ) {}
00063
00064 class Factory
00065 {
00066 public:
00067 virtual CalendarViewExtension *create( QWidget *parent ) = 0;
00068 };
00069 };
00070
00080 class KDE_EXPORT CalendarView : public KOrg::CalendarViewBase, public Calendar::Observer
00081 {
00082 Q_OBJECT
00083 public:
00090 CalendarView( QWidget *parent = 0, const char *name = 0 );
00091 virtual ~CalendarView();
00092
00093
00094 class CalendarViewVisitor : public IncidenceBase::Visitor
00095 {
00096 public:
00097 CalendarViewVisitor() : mView( 0 ) {}
00098 bool act( IncidenceBase *incidence, CalendarView *view )
00099 {
00100 mView = view;
00101 return incidence->accept( *this );
00102 }
00103 protected:
00104 CalendarView *mView;
00105 };
00106
00107 class CanDeleteIncidenceVisitor : public CalendarViewVisitor
00108 {
00109 protected:
00110 bool visit( Event *event ) { return mView->deleteEvent( event ); }
00111 bool visit( Todo *todo ) { return mView->deleteTodo( todo ); }
00112 bool visit( Journal *journal ) { return mView->deleteJournal( journal ); }
00113 };
00114
00115
00116 void setCalendar( Calendar * );
00117 Calendar *calendar();
00118
00119 KOrg::History *history() const { return mHistory; }
00120
00121 KOViewManager *viewManager() const { return mViewManager; }
00122 KODialogManager *dialogManager() const { return mDialogManager; }
00123
00124 QWidgetStack *viewStack() const { return mRightFrame; }
00125 QWidget *leftFrame() const { return mLeftFrame; }
00126 NavigatorBar *navigatorBar() const { return mNavigatorBar; }
00127 DateNavigator *dateNavigator() const { return mNavigator; }
00128
00129 KOIncidenceEditor *editorDialog( Incidence* ) const;
00130 IncidenceChangerBase *incidenceChanger() const { return mChanger; }
00131
00132 QDate startDate();
00133 QDate endDate();
00134
00135
00136 void addView( KOrg::BaseView * );
00137 void showView( KOrg::BaseView * );
00138
00143 void addExtension( CalendarViewExtension::Factory * );
00144
00146 Incidence *currentSelection();
00149 Incidence *selectedIncidence();
00151 QString currentFilterName() const;
00152
00153 signals:
00157 void configChanged();
00160 void categoriesChanged();
00163 void closingDown();
00165 void closed( QWidget * );
00166
00168 void modifiedChanged( bool );
00169
00171 void readOnlyChanged( bool );
00172
00174 void changeNavStringPrev( const QString & );
00175 void changeNavStringNext( const QString & );
00176
00178 void organizerEventsSelected( bool );
00180 void groupEventsSelected( bool );
00185 void incidenceSelected( Incidence * );
00188 void todoSelected( bool );
00189 void subtodoSelected( bool );
00190
00193 void dayPassed( const QDate & );
00199 void cancelAttendees( Incidence * );
00200
00201
00206 void pasteEnabled( bool );
00208 void statusMessage( const QString & );
00209
00210 void calendarViewExpanded( bool );
00211
00213 void autoArchivingSettingsModified();
00214
00215 void newIncidenceChanger( IncidenceChangerBase* );
00216 void exportHTML( HTMLExportSettings* );
00217
00218 void newFilterListSignal( const QStringList & );
00219 void selectFilterSignal( int );
00220 void filterChanged();
00221
00222 public slots:
00225 void updateConfig( const QCString& );
00228 void updateCategories();
00229
00230
00236 bool openCalendar( const QString &filename, bool merge = false );
00237
00242 bool saveCalendar( const QString &filename );
00243
00248 void closeCalendar();
00249
00251 void archiveCalendar();
00252
00253 void showIncidence();
00254 void editIncidence();
00255 bool editIncidence( const QString& uid );
00256 void deleteIncidence();
00257
00266 bool addIncidence( const QString &ical );
00267
00268 void connectIncidenceEditor( KOIncidenceEditor * );
00269
00272 void newEvent();
00275 void newEvent( const QDate &startDt );
00276 void newEvent( const QDateTime &startDt );
00277 void newEvent( const QDateTime &startDt, const QDateTime &EndDt, bool allDay = false );
00282 void newEvent( const QString &summary, const QString &description = QString::null,
00283 const QStringList &attachment = QStringList(), const QStringList &attendees = QStringList(),
00284 const QStringList &attachmentMimetypes = QStringList(), bool inlineAttachment = false );
00285 void newFloatingEvent();
00286
00288 void showIncidence( Incidence * );
00290 bool editIncidence( Incidence *incidence, bool isCounter = false );
00296 void deleteIncidence( Incidence *, bool force = false );
00300 void cutIncidence( Incidence * );
00304 void copyIncidence( Incidence *);
00308 void pasteIncidence();
00309
00311 void deleteSubTodosIncidence ( Todo *todo );
00317 void deleteTodoIncidence ( Todo *todo, bool force = false );
00319 bool deleteEvent( Event * ) { return true; }
00321 bool deleteTodo( Todo * ) {return true; }
00323 bool deleteJournal( Journal * ) { return true; }
00330 bool deleteIncidence( const QString &uid, bool force = false );
00331
00333 void newTodo();
00335 void newTodo( const QDate &date );
00337 void newSubTodo();
00339 void newSubTodo( Todo * );
00340
00341 void newTodo( const QString &summary, const QString &description = QString::null,
00342 const QStringList &attachments = QStringList(), const QStringList &attendees = QStringList(),
00343 const QStringList &attachmentMimetypes = QStringList(),
00344 bool inlineAttachment = false, bool createTask = false );
00345
00346 void newJournal();
00347 void newJournal( const QDate &date );
00348 void newJournal( const QString &text, const QDate &date = QDate() );
00349
00350 void toggleAlarm( Incidence * );
00351 void dissociateOccurrence( Incidence *, const QDate & );
00352 void dissociateFutureOccurrence( Incidence *, const QDate & );
00353
00354
00359 void checkClipboard();
00360
00367 void readSettings();
00368
00370 void writeSettings();
00371
00373 void readFilterSettings( KConfig *config );
00374
00376 void writeFilterSettings( KConfig *config );
00377
00380 void changeIncidenceDisplay( Incidence *, int );
00381
00382 void incidenceAdded( Incidence * );
00383 void incidenceChanged( Incidence *oldEvent, Incidence *newEvent );
00384 void incidenceChanged( Incidence *oldEvent, Incidence *newEvent, int what );
00385 void incidenceToBeDeleted( Incidence *incidence );
00386 void incidenceDeleted( Incidence * );
00387 void startMultiModify( const QString &text );
00388 void endMultiModify();
00389
00390 void editCanceled( Incidence * );
00391
00392 void updateView( const QDate &start, const QDate &end );
00393 void updateView();
00394
00395 void updateUnmanagedViews();
00396
00398 void edit_cut();
00399
00401 void edit_copy();
00402
00404 void edit_paste();
00405
00407 void edit_options();
00408
00413 void print();
00414
00416 void exportWeb();
00417
00419 void exportICalendar();
00420
00422 void exportVCalendar();
00423
00425 void appointment_show();
00431 void appointment_edit();
00436 void appointment_delete();
00437
00438
00439 void todo_unsub();
00440
00441 bool todo_unsub( Todo *todo );
00443 bool makeSubTodosIndependents ( );
00445 bool makeSubTodosIndependents ( Todo *todo );
00446
00448 void takeOverEvent();
00449
00451 void takeOverCalendar();
00452
00454 bool isModified();
00456 void setModified( bool modified = true );
00457
00459 bool isReadOnly();
00461 void setReadOnly( bool readOnly = true );
00462
00463 void eventUpdated( Incidence * );
00464
00465
00466 void schedule_publish( Incidence *incidence = 0 );
00467 void schedule_request( Incidence *incidence = 0 );
00468 void schedule_refresh( Incidence *incidence = 0 );
00469 void schedule_cancel( Incidence *incidence = 0 );
00470 void schedule_add( Incidence *incidence = 0 );
00471 void schedule_reply( Incidence *incidence = 0 );
00472 void schedule_counter( Incidence *incidence = 0 );
00473 void schedule_declinecounter( Incidence *incidence = 0 );
00474 void schedule_forward( Incidence *incidence = 0 );
00475 void mailFreeBusy( int daysToPublish = 30 );
00476 void uploadFreeBusy();
00477
00478 void openAddressbook();
00479
00480 void editFilters();
00481
00482 void updateFilter();
00483
00484 void showIntro();
00485
00486 void showDateNavigator( bool );
00487 void showTodoView( bool );
00488 void showEventViewer( bool );
00489
00491 void goDate( const QDate& date );
00492
00494 void showDate( const QDate &date );
00495
00497 void goToday();
00498
00500 void goNext();
00501
00503 void goPrevious();
00504
00505 void toggleExpand();
00506 void showLeftFrame( bool show = true );
00507
00508 void dialogClosing( Incidence * );
00509
00510 void processMainViewSelection( Incidence * );
00511 void processTodoListSelection( Incidence * );
00512
00513 void processIncidenceSelection( Incidence * );
00514
00515 void purgeCompleted();
00516
00517 void slotAutoArchivingSettingsModified() { emit autoArchivingSettingsModified(); }
00518
00519 void showErrorMessage( const QString & );
00520 void schedule( Scheduler::Method, Incidence *incidence );
00521 void addIncidenceOn( Incidence *, const QDate & );
00522 void moveIncidenceTo( Incidence *, const QDate & );
00523 void filterActivated( int filterNum );
00524
00525 void resourcesChanged();
00526
00527 protected slots:
00529 void showDates( const KCal::DateList & );
00530
00531 public:
00532
00533
00534 int msgCalModified();
00535
00539 void adaptNavigationUnits();
00540
00541
00542
00543 protected:
00544 void setIncidenceChanger( IncidenceChangerBase *changer );
00545
00546
00547 int msgItemDelete( Incidence *incidence );
00548
00549 Todo *selectedTodo();
00550
00551 void warningChangeFailed( Incidence * );
00552 void checkForFilteredChange( Incidence *incidence );
00556 void dateTimesForNewEvent( QDateTime &startDt, QDateTime &endDt, bool &allDay );
00557 KOEventEditor *newEventEditor( const QDateTime &startDtParam = QDateTime(),
00558 const QDateTime &endDtParam = QDateTime() , bool allDayParam = false );
00559
00560 private:
00561 void init();
00562
00563 void calendarModified( bool, Calendar * );
00564
00565
00566
00567 bool purgeCompletedSubTodos( Todo* todo, bool ¬AllPurged );
00568
00569 KOrg::History *mHistory;
00570
00571 QSplitter *mPanner;
00572 QSplitter *mLeftSplitter;
00573 QWidget *mLeftFrame;
00574 QWidgetStack *mRightFrame;
00575
00576 NavigatorBar *mNavigatorBar;
00577
00578 DateNavigatorContainer *mDateNavigator;
00579
00580
00581 QPtrList<CalendarViewExtension> mExtensions;
00582
00583 Calendar *mCalendar;
00584
00585 DateNavigator *mNavigator;
00586 DateChecker *mDateChecker;
00587
00588 KOEventViewer *mEventViewer;
00589 KOViewManager *mViewManager;
00590 KODialogManager *mDialogManager;
00591
00592
00593 QPtrList<CalFilter> mFilters;
00594 CalFilter *mCurrentFilter;
00595
00596
00597 bool mModified;
00598 bool mReadOnly;
00599 QDate mSaveSingleDate;
00600
00601 Incidence *mSelectedIncidence;
00602
00603 KOTodoView *mTodoList;
00604 QMap<Incidence*,KOIncidenceEditor*> mDialogList;
00605
00606 KOrg::IncidenceChangerBase *mChanger;
00607 };
00608
00609
00610
00611
00612 #endif