00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023 #ifndef KOAGENDA_H
00024 #define KOAGENDA_H
00025
00026 #include <qscrollview.h>
00027 #include <qlabel.h>
00028 #include <qtimer.h>
00029 #include <qmemarray.h>
00030 #include <qguardedptr.h>
00031
00032 #include "koagendaitem.h"
00033
00034 class QPopupMenu;
00035 class QTime;
00036 class KConfig;
00037 class QFrame;
00038 class KOAgenda;
00039
00040 using namespace KCal;
00041 namespace KCal {
00042 class Event;
00043 class Todo;
00044 class Calendar;
00045 }
00046
00047 class MarcusBains : public QFrame {
00048 Q_OBJECT
00049 public:
00050 MarcusBains( KOAgenda *agenda = 0, const char *name = 0 );
00051 virtual ~MarcusBains();
00052
00053 public slots:
00054 void updateLocation( bool recalculate = false );
00055
00056 private:
00057 int todayColumn();
00058 QTimer *minutes;
00059 QLabel *mTimeBox;
00060 KOAgenda *agenda;
00061 QTime oldTime;
00062 int oldToday;
00063 };
00064
00065
00066 class KOAgenda : public QScrollView
00067 {
00068 Q_OBJECT
00069 public:
00070 KOAgenda ( int columns, int rows, int columnSize, QWidget *parent=0,
00071 const char *name = 0, WFlags f = 0 );
00072 KOAgenda ( int columns, QWidget *parent = 0,
00073 const char *name = 0, WFlags f = 0 );
00074 virtual ~KOAgenda();
00075
00076 Incidence *selectedIncidence() const;
00077 QDate selectedIncidenceDate() const;
00078
00079 virtual bool eventFilter ( QObject *, QEvent * );
00080
00081 void contentsToGrid ( int x, int y, int &gx, int &gy );
00082 void gridToContents ( int gx, int gy, int &x, int &y );
00083
00084 int timeToY ( const QTime &time );
00085 QTime gyToTime ( int y );
00086
00087 void setStartHour( int startHour );
00088
00089 KOAgendaItem *insertItem ( Incidence *event, QDate qd, int X, int YTop,
00090 int YBottom );
00091 KOAgendaItem *insertAllDayItem ( Incidence *event, QDate qd, int XBegin,
00092 int XEnd );
00093 void insertMultiItem ( Event *event, QDate qd, int XBegin, int XEnd,
00094 int YTop, int YBottom );
00095
00100 void removeEvent( Event *event );
00101
00102 void changeColumns( int columns );
00103
00104 int columns() { return mColumns; }
00105 int rows() { return mRows; }
00106
00107 double gridSpacingX() const { return mGridSpacingX; }
00108 double gridSpacingY() const { return mGridSpacingY; }
00109
00110
00111
00112 void clear();
00113
00114 void clearSelection();
00115
00117 virtual int minimumWidth() const;
00119 void updateConfig();
00120
00121 void checkScrollBoundaries();
00122
00123 void setHolidayMask( QMemArray<bool> * );
00124
00125 void setDateList( const DateList &selectedDates );
00126 DateList dateList() const;
00127
00128 void setTypeAheadReceiver( QObject * );
00129 QObject *typeAheadReceiver() const;
00130 void finishTypeAhead();
00131
00132 void setCalendar( Calendar*cal ) { mCalendar=cal; }
00133
00134 public slots:
00135 void scrollUp();
00136 void scrollDown();
00137
00138 void popupAlarm();
00139
00140 void checkScrollBoundaries( int );
00141
00143 void deselectItem();
00149 void selectItem( KOAgendaItem * );
00150 bool removeAgendaItem( KOAgendaItem *item );
00151 void showAgendaItem( KOAgendaItem *item );
00152
00153 signals:
00154 void newEventSignal();
00155 void newEventSignal( int gx, int gy );
00156 void newEventSignal( int gxStart, int gyStart, int gxEnd, int gyEnd );
00157 void newTimeSpanSignal( int gxStart, int gyStart, int gxEnd, int gyEnd );
00158 void newStartSelectSignal();
00159
00160 void showIncidenceSignal( Incidence * );
00161 void editIncidenceSignal( Incidence * );
00162 void deleteIncidenceSignal( Incidence * );
00163 void showIncidencePopupSignal( Incidence * );
00164 void showNewEventPopupSignal();
00165
00166 void itemModified( KOAgendaItem *item );
00167 void incidenceSelected( Incidence * );
00168
00169 void lowerYChanged( int );
00170 void upperYChanged( int );
00171
00172 void startDragSignal(Incidence *);
00173 void droppedToDo( Todo*todo, int gx, int gy, bool allDay );
00174
00175 protected:
00176 void drawContents( QPainter *p, int cx, int cy, int cw, int ch );
00177 virtual void resizeEvent ( QResizeEvent * );
00178
00180 virtual bool eventFilter_mouse ( QObject *, QMouseEvent * );
00182 virtual bool eventFilter_key ( QObject *, QKeyEvent * );
00183
00185 virtual bool eventFilter_drag( QObject *, QDropEvent * );
00186
00188 void startSelectAction( const QPoint &viewportPos );
00189
00191 void performSelectAction( const QPoint &viewportPos );
00192
00194 void endSelectAction( const QPoint &viewportPos );
00195
00197 void startItemAction(const QPoint& viewportPos);
00198
00200 void performItemAction(const QPoint& viewportPos);
00201
00203 void endItemAction();
00204
00206 void setNoActionCursor( KOAgendaItem *moveItem, const QPoint &viewportPos );
00207
00209 double calcSubCellWidth( KOAgendaItem *item );
00211 void placeAgendaItem( KOAgendaItem *item, double subCellWidth );
00213 void placeSubCells( KOAgendaItem *placeItem );
00214
00218 void keyPressEvent( QKeyEvent * );
00219
00220 void calculateWorkingHours();
00221
00222 virtual void contentsMousePressEvent ( QMouseEvent * );
00223
00224 void emitNewEventForSelection();
00225
00226 protected slots:
00228 void deleteItemsToDelete();
00229
00230 private:
00231 void init();
00232 void marcus_bains();
00233 bool mAllDayMode;
00234
00235
00236 Calendar *mCalendar;
00237
00238
00239
00240
00241 double mGridSpacingX;
00242 double mGridSpacingY;
00243 double mDesiredGridSpacingY;
00244
00245
00246 int mResizeBorderWidth;
00247
00248
00249 int mScrollBorderWidth;
00250 int mScrollDelay;
00251 int mScrollOffset;
00252
00253 QTimer mScrollUpTimer;
00254 QTimer mScrollDownTimer;
00255
00256
00257 int mColumns;
00258 int mRows;
00259
00260
00261 int mStartCellX;
00262 int mStartCellY;
00263 int mCurrentCellX;
00264 int mCurrentCellY;
00265
00266
00267 bool mWorkingHoursEnable;
00268 int mWorkingHoursYTop;
00269 int mWorkingHoursYBottom;
00270
00271
00272 QPoint mSelectionStartPoint;
00273 int mSelectionCellX;
00274 int mSelectionYTop;
00275 int mSelectionHeight;
00276
00277
00278 DateList mSelectedDates;
00279
00280
00281 QGuardedPtr<KOAgendaItem> mClickedItem;
00282
00283
00284 QGuardedPtr<KOAgendaItem> mActionItem;
00285
00286
00287 QGuardedPtr<KOAgendaItem> mSelectedItem;
00288
00289
00290 MarcusBains *mMarcusBains;
00291
00292 enum MouseActionType { NOP, MOVE, SELECT,
00293 RESIZETOP, RESIZEBOTTOM, RESIZELEFT, RESIZERIGHT };
00294
00295 MouseActionType mActionType;
00296
00297 bool mItemMoved;
00298
00299
00300 QPtrList<KOAgendaItem> mItems;
00301 QPtrList<KOAgendaItem> mItemsToDelete;
00302
00303 QPopupMenu *mItemPopup;
00304
00305 int mOldLowerScrollValue;
00306 int mOldUpperScrollValue;
00307
00308 QMemArray<bool> *mHolidayMask;
00309
00310 bool mTypeAhead;
00311 QObject *mTypeAheadReceiver;
00312 QPtrList<QEvent> mTypeAheadEvents;
00313
00314 bool mReturnPressed;
00315 };
00316
00317 #endif // KOAGENDA_H