00001 #ifndef _XTQGANTTBARVIEWPORT_H_
00002 #define _XTQGANTTBARVIEWPORT_H_
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033 #include "KGanttItem.h"
00034
00035 #include <tqcursor.h>
00036 #include <tqtimer.h>
00037 #include <tqlabel.h>
00038
00039 #include <kpopupmenu.h>
00040 #include <ktoolbar.h>
00041
00042 #include <tqptrdict.h>
00043 #include <tqaction.h>
00044 #include <tqlineedit.h>
00045
00046 class xQGanttBarView;
00047
00048 #define sgn(n) (n < 0 ? -1 : 1)
00049
00050
00051
00052
00053
00054 class xTQTaskPosition
00056 {
00057
00058 public :
00059
00060 xTQTaskPosition(int nr, int x, int y, int w, int h, int hiSub,
00061 int tPx, int tPy, int d)
00062 : _nr(nr), _screenX(x), _screenY(y), _screenW(w), _screenH(h),
00063 _screenHS(hiSub), _textPosX(tPx), _textPosY(tPy), _depth(d)
00064 {
00065 _screenHandleX = _screenHandleY = _screenHandleW = _screenHandleH = 0;
00066 }
00067
00068 int _nr;
00069 int _screenX, _screenY, _screenW;
00070 int _screenH;
00071 int _screenHS;
00072 int _textPosX, _textPosY;
00073
00074 int _screenHandleX, _screenHandleY, _screenHandleW, _screenHandleH;
00075
00076 int _depth;
00077
00078 };
00079
00080
00081
00083
00087
00088 class KDE_EXPORT xQGanttBarViewPort : public TQFrame
00090 {
00091
00092 Q_OBJECT
00093 TQ_OBJECT
00094
00095 friend class xQGanttBarView;
00096 friend class KGantt;
00097
00098 public:
00099
00100 enum Mode {Init, Select, Zoom, Move};
00101
00102
00104
00107 xQGanttBarViewPort(KGanttItem* toplevelitem, xQGanttBarView* parent = 0,
00108 const char * name=0, WFlags f=0 );
00109
00110
00112
00115 ~xQGanttBarViewPort();
00116
00117
00118
00120
00123 void update(int x1, int y1, int x2, int y2);
00124
00125
00126
00127 TQPtrDict<xTQTaskPosition> _gItemList;
00128
00129
00131
00134 void addHoliday(int y, int m, int d);
00135
00136
00137
00139
00142 void removeHoliday(int y, int m, int d) {
00143 Q_UNUSED(y); Q_UNUSED(m); Q_UNUSED(d);
00144 }
00145
00146
00147
00148 KPopupMenu* menu() {
00149 return _menu;
00150 }
00151
00152
00153
00155
00158 KToolBar* toolbar(TQMainWindow* mw = 0);
00159
00160
00161
00162 void zoom(double sfactor, int wx, int wy);
00163
00164
00165 void zoom(double sfactor);
00166
00167
00168 void getSelectedItems(TQPtrList<KGanttItem>& list) {
00169 getSelectedItems(_toplevelitem, list);
00170 }
00171
00172
00173 signals:
00174
00175 void modeChanged(int);
00176 void scroll(int x, int y);
00177 void resized();
00178 void recalculated();
00179 void message(const TQString& msg);
00180
00181
00182 protected slots:
00183
00184 void setMode(int mode);
00185
00186 void setSelect();
00187 void setZoom();
00188 void setMove();
00189
00190 void zoomIn();
00191 void zoomOut();
00192 void zoomAll();
00193
00194 void popup(int index);
00195
00196 void selectAll();
00197 void unselectAll();
00198
00199 void deleteSelectedItems();
00200 void insertIntoSelectedItem();
00201
00202
00203
00204 private slots:
00205
00206 void toplevelitemChanged(KGanttItem* item, KGanttItem::Change c);
00207 void textEdited();
00208 void itemDestroyed(KGanttItem*);
00209
00210
00211
00212 private:
00213
00214 enum Position { Outside = 0, Handle = 1,
00215 North = 2, South = 4,
00216 West = 8, East = 16,
00217 Center = 32 };
00218
00220
00223 inline int screenX(int wx);
00224
00225
00227
00230 inline int screenY(int wy);
00231
00232
00234
00237 inline int worldX(int sx);
00238
00239
00241
00244 inline int worldY(int sy);
00245
00246
00247
00248 xQGanttBarView* _parent;
00249
00250 int _grid, _snapgrid;
00251 bool _drawGrid, _drawHeader;
00252
00253 Mode _mode;
00254
00255 int _marginX, _marginY;
00256 double _scaleX, _scaleY;
00257
00258 int _margin;
00259
00260
00261 TQCursor* _cursor_lupe;
00262
00263 TQLabel* _itemInfo;
00264 TQLineEdit* _itemTextEdit;
00265
00266
00267
00268 KGanttItem* _toplevelitem;
00269
00270 static KGanttItem* _currentItem;
00271
00272 KPopupMenu* _menu;
00273 KPopupMenu* _selectMenu;
00274
00275 KIconLoader* _iconloader;
00276
00277 KToolBar* _toolbar;
00278
00279 TQPoint* _startPoint, *_endPoint;
00280
00281 TQPtrList<TQDate> _holidays;
00282
00283 TQPtrList<KGanttItem> *_observedList;
00284
00285
00287
00288 void initMenu();
00289
00290 void drawGrid(TQPainter*, int x1, int y1, int x2, int y2);
00291 void drawHeader(TQPainter*, int x1, int y1, int x2, int y2);
00292 void drawItem(KGanttItem* item, TQPainter* p, const TQRect& rect );
00293
00294 void drawRelation(TQPainter*, KGanttRelation*);
00295
00296 void recalc(KGanttItem* item, int xPos, int yPos, int depth, int nr );
00297 void recalc();
00298
00299 void selectItem(KGanttItem*,bool);
00300
00301 void getSelectedItems(KGanttItem*, TQPtrList<KGanttItem>&);
00302
00303 void adjustSize();
00304
00305 void observeList(TQPtrList<KGanttItem>*);
00306
00307 Position check(KGanttItem** founditem, int x, int y);
00308
00309 void mousePressEvent(TQMouseEvent*);
00310 void mouseReleaseEvent(TQMouseEvent*);
00311
00312 void wheelEvent ( TQWheelEvent * ) {
00313 printf("wheelEvent\n");
00314 }
00315
00316 void mouseMoveEvent(TQMouseEvent*);
00317 void keyPressEvent(TQKeyEvent* e);
00318 void paintEvent(TQPaintEvent * e);
00319
00320
00321 TQPixmap closedIcon, openedIcon;
00322
00323 };
00324
00325
00326
00327
00328
00329
00330
00331 int xQGanttBarViewPort::screenX(int wx)
00333 {
00334 return (int) (0.5 + (wx + _marginX) * _scaleX);
00335 }
00336 int xQGanttBarViewPort::screenY(int wy)
00338 {
00339 return (int) (0.5 + (wy + _marginY) * _scaleY);
00340 }
00341 int xQGanttBarViewPort::worldX(int sx)
00343 {
00344 return (int) (0.5 + (sx/_scaleX - _marginX));
00345 }
00346 int xQGanttBarViewPort::worldY(int sy)
00348 {
00349 return (int) (0.5 + (sy/_scaleY - _marginY));
00350 }
00351
00352
00353 #endif