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
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035
00036 #ifndef KDGANTTVIEWSUBWIDGETS_H
00037 #define KDGANTTVIEWSUBWIDGETS_H
00038
00039
00040 #include <tqwidget.h>
00041 #include <tqlistview.h>
00042 #include <tqsplitter.h>
00043 #include <tqevent.h>
00044 #include <tqvaluelist.h>
00045 #include <tqcanvas.h>
00046 #include <tqwhatsthis.h>
00047 #include <tqpopupmenu.h>
00048 #include <tqtooltip.h>
00049 #include <tqtimer.h>
00050 #include <tqgroupbox.h>
00051 #include <tqvgroupbox.h>
00052 #include <tqlayout.h>
00053 #include <tqlabel.h>
00054 #include <tqbrush.h>
00055 #include <tqvbox.h>
00056 #include <tqdockwindow.h>
00057 #include <tqtimer.h>
00058
00059 #include "KDGanttView.h"
00060 #include "KDGanttViewTaskLink.h"
00061 #include "KDGanttViewTaskLinkGroup.h"
00062 #include "KDGanttViewSummaryItem.h"
00063 #include "KDGanttSemiSizingControl.h"
00064 #include "KDGanttViewItemDrag.h"
00065
00066 #define Type_is_KDGanttGridItem 1
00067 #define Type_is_KDGanttViewItem 2
00068 #define Type_is_KDGanttTaskLink 3
00069
00070 class KDIntervalColorRectangle;
00071 class KDCanvasWhatsThis;
00072 class KDToolTip;
00073 class KDCanvasRectangle;
00074 class KDTimeHeaderToolTip;
00075
00076 class KDTimeHeaderWidget : public TQWidget
00077 {
00078 Q_OBJECT
00079
00080
00081 public:
00082 typedef KDGanttView::Scale Scale;
00083 typedef KDGanttView::YearFormat YearFormat;
00084 typedef KDGanttView::HourFormat HourFormat;
00085 struct DateTimeColor {
00086 TQDateTime datetime;
00087 TQDateTime end;
00088 TQColor color;
00089 Scale minScaleView;
00090 Scale maxScaleView;
00091
00092 KDCanvasRectangle* canvasRect;
00093 };
00094 typedef TQValueList<DateTimeColor> ColumnColorList;
00095 typedef TQValueList<KDIntervalColorRectangle *> IntervalColorList;
00096
00097
00098
00099
00100
00101
00102 KDTimeHeaderWidget (TQWidget* parent,KDGanttView* gant);
00103 ~KDTimeHeaderWidget();
00104
00105 TQString getToolTipText(TQPoint p);
00106 void zoomToFit();
00107 void zoom(double, bool absolute = true);
00108 void zoomToSelection( TQDateTime startTime, TQDateTime endTime);
00109 double zoomFactor();
00110 void setAutoScaleMinorTickCount( int count );
00111 int autoScaleMinorTickCount();
00112 void setHorizonStart( const TQDateTime& start );
00113 TQDateTime horizonStart() const;
00114 void setHorizonEnd( const TQDateTime& start );
00115 TQDateTime horizonEnd() const;
00116
00117 void setMaximumScale( Scale );
00118 KDTimeHeaderWidget::Scale maximumScale() const;
00119 void setMinimumScale( Scale );
00120 KDTimeHeaderWidget::Scale minimumScale() const;
00121 KDTimeHeaderWidget::Scale scale() const;
00122 void setMajorScaleCount( int count );
00123 int majorScaleCount() const;
00124 void setMinorScaleCount( int count );
00125 int minorScaleCount() const;
00126 void setMinimumColumnWidth( int width );
00127 int minimumColumnWidth() const;
00128 void setYearFormat( YearFormat format );
00129 KDTimeHeaderWidget::YearFormat yearFormat() const;
00130 void setHourFormat( HourFormat format );
00131 KDTimeHeaderWidget::HourFormat hourFormat() const;
00132 void setShowMajorTicks( bool );
00133 bool showMajorTicks() const;
00134 void setShowMinorTicks( bool );
00135 void setScale( Scale unit);
00136 bool showMinorTicks() const;
00137 void setColumnBackgroundColor( const TQDateTime& column,
00138 const TQColor& color,
00139 Scale mini = KDGanttView::Minute ,
00140 Scale maxi = KDGanttView::Month);
00141 #if 0
00142
00143 void setIntervalBackgroundColor( const TQDateTime& start,
00144 const TQDateTime& end,
00145 const TQColor& color,
00146 Scale mini = KDGanttView::Minute ,
00147 Scale maxi = KDGanttView::Month);
00148 bool changeBackgroundInterval( const TQDateTime& oldstart,
00149 const TQDateTime& oldend,
00150 const TQDateTime& newstart,
00151 const TQDateTime& newend );
00152 bool deleteBackgroundInterval( const TQDateTime& start,
00153 const TQDateTime& end );
00154 #endif
00155 void addIntervalBackgroundColor( KDIntervalColorRectangle* newItem );
00156 void clearBackgroundColor();
00157 TQColor columnBackgroundColor( const TQDateTime& column ) const;
00158 void setWeekendBackgroundColor( const TQColor& color );
00159 TQColor weekendBackgroundColor() const;
00160 void setWeekdayBackgroundColor( const TQColor& color, int weekday );
00161 TQColor weekdayBackgroundColor(int weekday) const;
00162 void setWeekendDays( int start, int end );
00163 void weekendDays( int& start, int& end ) const;
00164 void computeTicks(bool doNotComputeRealScale = false);
00165 void paintEvent(TQPaintEvent *);
00166 int getCoordX(TQDate);
00167 int getCoordX(TQDateTime);
00168 TQDateTime getDateTimeForIndex(int coordX, bool local = true );
00169 void setShowPopupMenu( bool show, bool showZoom, bool showScale,bool showTime,
00170 bool showYear,bool showGrid, bool showPrint);
00171 bool registerStartTime();
00172 bool registerEndTime();
00173 bool showPopupMenu() const;
00174 ColumnColorList columnBackgroundColorList() const {
00175 return ccList;
00176 }
00177 TQColor weekdayColor[8];
00178 void repaintMe(int left, int wid, TQPainter *p = 0);
00179
00180 void centerDateTime( const TQDateTime& center );
00181
00182 public slots:
00183 void setSettings(int);
00184 void checkWidth( int );
00185 void addTickRight( int num = 1 );
00186 void addTickLeft( int num = 1 );
00187 void preparePopupMenu();
00188 signals:
00189 void sizeChanged( int );
00190
00191 private:
00192 friend class KDTimeTableWidget;
00193 friend class KDGanttViewItem;
00194 friend class KDGanttView;
00195 friend class KDGanttCanvasView;
00196 virtual void mousePressEvent ( TQMouseEvent * e );
00197 virtual void mouseReleaseEvent ( TQMouseEvent * e );
00198 virtual void mouseDoubleClickEvent ( TQMouseEvent * e );
00199 virtual void mouseMoveEvent ( TQMouseEvent * e );
00200 double secsFromTo( TQDateTime begin, TQDateTime end );
00201 void updateTimeTable();
00202 void computeIntervals( int height );
00203 bool getColumnColor(TQColor& col,int coordLow, int coordHigh);
00204 void moveTimeLineTo(int x);
00205
00206 void resizeEvent ( TQResizeEvent * ) ;
00207 TQValueList<int> majorTicks;
00208 TQValueList<TQString> minorText;
00209 TQValueList<TQString> majorText;
00210 TQDateTime myHorizonStart, myHorizonEnd, myRealEnd,myRealStart;
00211 TQDateTime myCenterDateTime;
00212 void saveCenterDateTime();
00213 Scale myScale,myRealScale,myMaxScale,myMinScale;
00214 YearFormat myYearFormat;
00215 HourFormat myHourFormat;
00216 int myMinimumColumWidth;
00217 bool flagShowMajorTicks, flagShowMinorTicks, flagShowPopupMenu;
00218 bool flagShowZoom, flagShowScale ,flagShowTime ,flagShowYear;
00219 bool flagShowGrid ,flagShowPrint;
00220 bool flagStartTimeSet,flagEndTimeSet;
00221 TQColor myWeekendBackgroundColor;
00222 int myWeekendDaysStart, myWeekendDaysEnd;
00223 ColumnColorList ccList;
00224 IntervalColorList icList;
00225 int myMinorScaleCount,myMajorScaleCount;
00226 int myRealMinorScaleCount,myRealMajorScaleCount;
00227 bool flagDoNotRecomputeAfterChange,flagDoNotRepaintAfterChange;
00228 TQString getYear(TQDate);
00229 TQString getHour(TQTime);
00230 TQDateTime getEvenTimeDate(TQDateTime ,Scale);
00231 void computeRealScale(TQDateTime start);
00232 int myGridMinorWidth;
00233 int myMajorGridHeight;
00234 TQPopupMenu * myPopupMenu, *scalePopupMenu, *timePopupMenu;
00235 TQPopupMenu * yearPopupMenu, *gridPopupMenu;
00236 KDGanttView* myGanttView;
00237 double myZoomFactor;
00238 int myAutoScaleMinorTickcount;
00239 bool flagZoomToFit;
00240 int mySizeHint;
00241 int myMinimumWidth;
00242 int getTickTime();
00243 KDTimeHeaderToolTip* myToolTip;
00244 bool mouseDown;
00245 int beginMouseDown;
00246 int endMouseDown;
00247 bool autoComputeTimeLine;
00248 TQPixmap paintPix;
00249 };
00250
00251
00252 class KDListView ;
00253
00254 class KDTimeTableWidget : public TQCanvas
00255 {
00256 Q_OBJECT
00257
00258
00259 public:
00260 KDTimeTableWidget (TQWidget* parent,KDGanttView* my);
00261
00262 void setBlockUpdating( bool block = true );
00263 bool blockUpdating();
00264 void inc_blockUpdating();
00265 void dec_blockUpdating();
00266 void setShowTaskLinks( bool show );
00267 bool showTaskLinks();
00268 TQPtrList<KDGanttViewTaskLink>taskLinks();
00269 void clearTaskLinks();
00270 void updateMyContent();
00271 void removeItemFromTasklinks( KDGanttViewItem * );
00272 void setHorBackgroundLines( int count, TQBrush brush );
00273 int horBackgroundLines( TQBrush& brush );
00274
00275 void setNoInformationBrush( const TQBrush& brush );
00276 TQBrush noInformationBrush() const;
00277
00278 int getCoordX( TQDateTime dt );
00279
00280 signals:
00281 void heightComputed( int );
00282
00283 public slots:
00284 void expandItem(TQListViewItem * );
00285 void collapseItem(TQListViewItem * );
00286 void highlightItem(TQListViewItem * );
00287 void resetWidth( int );
00288 void checkHeight( int );
00289 private:
00290 friend class KDGanttViewTaskLink;
00291 friend class KDTimeHeaderWidget;
00292 friend class KDGanttView;
00293 friend class KDGanttViewTaskItem;
00294 KDGanttView* myGanttView;
00295
00296 bool taskLinksVisible;
00297
00298 TQPtrList<KDGanttViewTaskLink> myTaskLinkList;
00299
00300 TQPtrList<KDCanvasLine> verGridList;
00301 TQPtrList<KDCanvasLine> horGridList;
00302 TQPtrList<KDCanvasRectangle> horDenseList;
00303 TQPtrList<KDCanvasRectangle> showNoInfoList;
00304 int denseLineCount;
00305 TQBrush denseLineBrush, noInfoLineBrush;
00306 TQPtrList<KDCanvasRectangle> columnColorList;
00307
00308 int computeHeight();
00309 void computeVerticalGrid();
00310 void computeHorizontalGrid();
00311 void computeDenseLines();
00312 void computeShowNoInformation();
00313 void computeTaskLinks();
00314 void computeMinorGrid();
00315 void computeMajorGrid();
00316
00317 void showMajorGrid();
00318 void showMinorGrid();
00319 void hideGrid();
00320
00321 TQPen gridPen;
00322 int maximumComputedGridHeight;
00323 int minimumHeight;
00324 int int_blockUpdating;
00325 bool flag_blockUpdating;
00326 int pendingHeight;
00327 int pendingWidth;
00328
00329 };
00330
00331 class KDLegendWidget : public KDGanttSemiSizingControl
00332 {
00333 Q_OBJECT
00334
00335
00336 public:
00337 KDLegendWidget ( TQWidget* parent, KDGanttMinimizeSplitter* legendParent );
00338 void showMe(bool);
00339 bool isShown();
00340 void addLegendItem( KDGanttViewItem::Shape shape, const TQColor& shapeColor, const TQString& text );
00341 void clearLegend();
00342 void setFont( TQFont );
00343 void drawToPainter( TQPainter *p );
00344 void setAsDoctwindow( bool dockwin );
00345 bool asDoctwindow();
00346 TQDockWindow* dockwindow();
00347 TQSize legendSize();
00348 TQSize legendSizeHint();
00349 private:
00350 TQGroupBox * myLegend;
00351 TQLabel* myLabel;
00352 TQScrollView * scroll;
00353 TQDockWindow* dock;
00354 KDGanttMinimizeSplitter* myLegendParent;
00355 };
00356
00357 class KDGanttView;
00358 class KDListView : public TQListView
00359 {
00360 Q_OBJECT
00361
00362
00363 public:
00364 KDListView (TQWidget* parent,KDGanttView* gv );
00365 KDGanttView* myGanttView;
00366 void drawToPainter( TQPainter *p, bool drawHeader=false );
00367 void setCalendarMode( bool mode );
00368 bool calendarMode() { return _calendarMode; };
00369 TQString getWhatsThisText(TQPoint p);
00370 void setOpen ( TQListViewItem * item, bool open );
00371 void dragEnterEvent ( TQDragEnterEvent * );
00372 void dragMoveEvent ( TQDragMoveEvent * );
00373 void dragLeaveEvent ( TQDragLeaveEvent * );
00374 void dropEvent ( TQDropEvent * );
00375 TQDragObject * dragObject ();
00376 void startDrag ();
00377 void paintemptyarea ( TQPainter * p, const TQRect & rect ){ TQListView::paintEmptyArea( p, rect );};
00378
00379 public:
00380 class DrawableItem {
00381 public:
00382 DrawableItem(int level, int ypos, TQListViewItem *item ) { y = ypos; l = level; i = item; };
00383 int y;
00384 int l;
00385 TQListViewItem * i;
00386 };
00387 protected:
00388 void drawAllContents(TQPainter * p, int cx, int cy, int cw, int ch);
00389 int buildDrawables(TQPtrList<KDListView::DrawableItem> &lst, int level, int ypos, TQListViewItem *item, int ymin, int ymax) const;
00390
00391 private slots:
00392 void dragItem( TQListViewItem * );
00393 private:
00394 void resizeEvent ( TQResizeEvent * ) ;
00395 void contentsMouseDoubleClickEvent ( TQMouseEvent * e );
00396 bool _calendarMode;
00397
00398
00399
00400 };
00401
00402
00403 class KDCanvasText : public TQCanvasText
00404 {
00405 public:
00406 KDCanvasText( KDTimeTableWidget* canvas, void* parentItem, int type );
00407 int myParentType;
00408 void* myParentItem;
00409 };
00410
00411
00412 class KDCanvasLine : public TQCanvasLine
00413 {
00414 public:
00415 KDCanvasLine( KDTimeTableWidget* canvas, void* parentItem, int type );
00416 int myParentType;
00417 void* myParentItem;
00418 };
00419
00420
00421 class KDCanvasPolygonItem: public TQCanvasPolygonalItem
00422 {
00423 public:
00424 KDCanvasPolygonItem( KDTimeTableWidget* canvas, void* parentItem,
00425 int type );
00426 int myParentType;
00427 void* myParentItem;
00428 };
00429
00430
00431 class KDCanvasPolygon: public TQCanvasPolygon
00432 {
00433 public:
00434 KDCanvasPolygon( KDTimeTableWidget* canvas, void* parentItem, int type );
00435 int myParentType;
00436 void* myParentItem;
00437 };
00438
00439
00440 class KDCanvasEllipse: public TQCanvasEllipse
00441 {
00442 public:
00443 KDCanvasEllipse( KDTimeTableWidget* canvas, void* parentItem, int type );
00444 int myParentType;
00445 void* myParentItem;
00446 };
00447
00448
00449 class KDCanvasRectangle: public TQCanvasRectangle
00450 {
00451 public:
00452 KDCanvasRectangle( KDTimeTableWidget* canvas, void* parentItem, int type );
00453 int myParentType;
00454 void* myParentItem;
00455 };
00456
00457
00458
00459 class KDIntervalColorRectangle: public KDCanvasRectangle
00460 {
00461 public:
00462 KDIntervalColorRectangle( KDGanttView* view );
00463
00464 void setDateTimes( const TQDateTime& start,
00465 const TQDateTime& end );
00466 TQDateTime start() const { return mStart; }
00467 TQDateTime end() const { return mEnd; }
00468
00469 void setColor( const TQColor& color );
00470
00471 enum HitTest { Start, Middle, End };
00472 HitTest hitTest( KDTimeHeaderWidget* timeHeader, const TQPoint& pos ) const;
00473
00474 void layout( KDTimeHeaderWidget* timeHeader, int height );
00475
00476 static const int RTTI = 0x0c58;
00477 int rtti() const { return RTTI; }
00478
00479 private:
00480 TQColor mColor;
00481 TQDateTime mStart;
00482 TQDateTime mEnd;
00483 };
00484
00485 class KDCanvasToolTip;
00486
00487 class KDGanttCanvasView : public TQCanvasView
00488 {
00489 Q_OBJECT
00490
00491
00492 public:
00493 KDGanttCanvasView(KDGanttView* sender, TQCanvas* canvas = 0, TQWidget* parent = 0, const char* name = 0 );
00494 ~KDGanttCanvasView();
00495 TQString getToolTipText(TQPoint p);
00496 TQString getWhatsThisText(TQPoint p);
00497 void drawToPainter ( TQPainter * p );
00498 void resetCutPaste( KDGanttViewItem* );
00499 void setShowPopupMenu( bool show );
00500 bool showPopupMenu();
00501 void cutItem ( KDGanttViewItem* );
00502 void insertItemAsRoot( KDGanttViewItem* );
00503 void insertItemAsChild( KDGanttViewItem* , KDGanttViewItem* );
00504 void insertItemAfter( KDGanttViewItem* , KDGanttViewItem* );
00505 protected:
00506 friend class KDGanttView;
00507 friend class KDListView;
00508 virtual void contentsMousePressEvent ( TQMouseEvent * ) ;
00509 virtual void contentsMouseReleaseEvent ( TQMouseEvent * );
00510 virtual void contentsMouseDoubleClickEvent ( TQMouseEvent * );
00511 virtual void contentsMouseMoveEvent ( TQMouseEvent * ) ;
00512 virtual void viewportPaintEvent ( TQPaintEvent * pe );
00513 void resizeEvent ( TQResizeEvent * ) ;
00514 void set_MouseTracking(bool on);
00515 int getType(TQCanvasItem*);
00516 KDGanttViewItem* getItem(TQCanvasItem*);
00517 KDGanttViewTaskLink* getLink(TQCanvasItem*);
00518 int getItemArea(KDGanttViewItem *item, int x);
00519 int getLinkType(int from, int to);
00520
00521 KDGanttView* mySignalSender;
00522 KDGanttViewItem* currentItem, *lastClickedItem, *cuttedItem;
00523 TQCanvasRectangle* movingItem;
00524 KDGanttViewTaskItem* movingGVItem;
00525 TQPoint movingStart;
00526 TQDateTime movingStartDate;
00527 enum MovingOperation { Moving, ResizingLeft, ResizingRight };
00528 MovingOperation movingOperation;
00529 KDGanttViewTaskLink* currentLink;
00530 KDCanvasWhatsThis* myWhatsThis;
00531 TQPopupMenu* onItem;
00532 bool _showItemAddPopupMenu;
00533 int myMyContentsHeight;
00534 KDGanttViewItem *fromItem;
00535 bool linkItemsEnabled;
00536 TQCanvasLine *linkLine;
00537 int fromArea;
00538 bool autoScrollEnabled;
00539 bool mouseDown;
00540
00541 signals:
00542 void heightResized( int );
00543 void widthResized( int );
00544
00545 public slots:
00546 void set_Mouse_Tracking(bool on);
00547 void moveMyContent( int, int );
00548 void setMyContentsHeight( int );
00549 void updateHorScrollBar();
00550 private slots:
00551 void cutItem();
00552 void pasteItem( int );
00553 void newRootItem( int );
00554 void newChildItem( int );
00555 void slotScrollTimer();
00556 void myUpdateScrollBars();
00557
00558 private:
00559 MovingOperation gvItemHitTest( KDGanttViewItem *item, KDTimeHeaderWidget* timeHeader, const TQPoint &pos );
00560 private:
00561 KDCanvasToolTip* myToolTip;
00562 TQTimer *myScrollTimer;
00563 TQPoint mousePos;
00564 TQTimer scrollBarTimer;
00565 };
00566
00567 class KDTimeHeaderToolTip :public TQToolTip
00568 {
00569
00570 public:
00571 KDTimeHeaderToolTip( TQWidget *wid, KDTimeHeaderWidget* header ) : TQToolTip( wid ), _wid(wid),_header (header) {
00572
00573 };
00574
00575 protected:
00576 virtual void maybeTip( const TQPoint& p)
00577 {
00578 static bool ishidden = true;
00579 if (TQToolTip::isGloballyEnabled () ) {
00580 if (ishidden) {
00581 tip( TQRect( p.x(),p.y(),5,5), _header->getToolTipText(p));
00582 }
00583 else
00584 hide();
00585 ishidden = !ishidden;
00586 }
00587 }
00588 private:
00589 TQWidget* _wid;
00590 KDTimeHeaderWidget * _header;
00591 };
00592
00593 class KDCanvasToolTip :public TQToolTip
00594 {
00595
00596 public:
00597 KDCanvasToolTip( TQWidget *wid, KDGanttCanvasView* canview ) : TQToolTip( wid ), _wid(wid),_canview (canview) {
00598
00599 };
00600
00601 protected:
00602 virtual void maybeTip( const TQPoint& p)
00603 {
00604 static bool ishidden = true;
00605 if (TQToolTip::isGloballyEnabled () ) {
00606 if (ishidden) {
00607 tip( TQRect( p.x()-2,p.y()-2,5,5), _canview->getToolTipText(p));
00608 }
00609 else
00610 hide();
00611 ishidden = !ishidden;
00612 }
00613 }
00614 private:
00615 TQWidget* _wid;
00616 KDGanttCanvasView * _canview;
00617 };
00618
00619 class KDCanvasWhatsThis :public TQWhatsThis
00620 {
00621 public:
00622 KDCanvasWhatsThis( TQWidget *wid, KDGanttCanvasView* canview ) : TQWhatsThis( wid ), _wid(wid),_canview (canview) { };
00623
00624 protected:
00625 virtual TQString text( const TQPoint& p)
00626 {
00627 return _canview->getWhatsThisText(p) ;
00628 }
00629 private:
00630 TQWidget* _wid;
00631 KDGanttCanvasView * _canview;
00632 };
00633
00634 class KDListViewWhatsThis :public TQWhatsThis
00635 {
00636 public:
00637 KDListViewWhatsThis( TQWidget *wid, KDListView* view ) : TQWhatsThis( wid ), _wid(wid),_view (view) { };
00638
00639 protected:
00640 virtual TQString text( const TQPoint& p)
00641 {
00642 return _view->getWhatsThisText(p) ;
00643 }
00644 private:
00645 TQWidget* _wid;
00646 KDListView * _view;
00647 };
00648
00649
00650
00651 #endif