diff options
Diffstat (limited to 'kdgantt/KDGanttView.h')
-rw-r--r-- | kdgantt/KDGanttView.h | 502 |
1 files changed, 502 insertions, 0 deletions
diff --git a/kdgantt/KDGanttView.h b/kdgantt/KDGanttView.h new file mode 100644 index 000000000..c0c9bbba9 --- /dev/null +++ b/kdgantt/KDGanttView.h @@ -0,0 +1,502 @@ +/* -*- Mode: C++ -*- + $Id$ + KDChart - a multi-platform charting engine +*/ + +/**************************************************************************** + ** Copyright (C) 2001-2004 Klarälvdalens Datakonsult AB. All rights reserved. + ** + ** This file is part of the KDGantt library. + ** + ** This file may be distributed and/or modified under the terms of the + ** GNU General Public License version 2 as published by the Free Software + ** Foundation and appearing in the file LICENSE.GPL included in the + ** packaging of this file. + ** + ** Licensees holding valid commercial KDGantt licenses may use this file in + ** accordance with the KDGantt Commercial License Agreement provided with + ** the Software. + ** + ** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE + ** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + ** + ** See http://www.klaralvdalens-datakonsult.se/Public/products/ for + ** information about KDGantt Commercial License Agreements. + ** + ** Contact info@klaralvdalens-datakonsult.se if any conditions of this + ** licensing are not clear to you. + ** + ** As a special exception, permission is given to link this program + ** with any edition of Qt, and distribute the resulting executable, + ** without including the source code for Qt in the source distribution. + ** + **********************************************************************/ + +#ifndef KDGANTTVIEW_H +#define KDGANTTVIEW_H + +#include <qptrlist.h> +#include <qwidget.h> +#include <qlistview.h> +#include <qsplitter.h> +#include <qlayout.h> +#include <qfont.h> +#include <qdom.h> +#include <qvbox.h> + + +#include "KDGanttViewItem.h" +#include "KDGanttViewTaskLinkGroup.h" +#include "KDGanttMinimizeSplitter.h" +#include "KDGanttViewItemDrag.h" + +class KDIntervalColorRectangle; +class KDGanttViewTaskLink; +class QPrinter; +class QIODevice; +class itemAttributeDialog; +class KDListView; +class KDGanttViewItem; +class KDGanttViewEventItem; +class KDGanttViewTaskItem; +class KDGanttViewSummaryItem; +class KDTimeTableWidget; +class KDTimeHeaderWidget; +class KDLegendWidget; +class KDGanttCanvasView; +class KDGanttViewTaskLink; +class KDGanttMinimizeSplitter; + +class KDGanttView : public KDGanttMinimizeSplitter +{ + Q_OBJECT + + Q_PROPERTY( bool showLegend READ showLegend WRITE setShowLegend ) + Q_PROPERTY( bool showListView READ showListView WRITE setShowListView ) + Q_PROPERTY( bool showTaskLinks READ showTaskLinks WRITE setShowTaskLinks ) + Q_PROPERTY( bool editorEnabled READ editorEnabled WRITE setEditorEnabled ) + Q_PROPERTY( QDateTime horizonStart READ horizonStart WRITE setHorizonStart ) + Q_PROPERTY( QDateTime horizonEnd READ horizonEnd WRITE setHorizonEnd ) + Q_PROPERTY( Scale scale READ scale WRITE setScale ) + Q_PROPERTY( YearFormat yearFormat READ yearFormat WRITE setYearFormat ) + Q_PROPERTY( HourFormat hourFormat READ hourFormat WRITE setHourFormat ) + Q_PROPERTY( bool showMinorTicks READ showMinorTicks WRITE setShowMinorTicks ) + Q_PROPERTY( bool showMajorTicks READ showMajorTicks WRITE setShowMajorTicks ) + Q_PROPERTY( bool editable READ editable WRITE setEditable ) + Q_PROPERTY( QColor textColor READ textColor WRITE setTextColor ) + Q_PROPERTY( int majorScaleCount READ majorScaleCount WRITE setMajorScaleCount ) + Q_PROPERTY( int minorScaleCount READ minorScaleCount WRITE setMinorScaleCount ) + Q_PROPERTY( int autoScaleMinorTickCount READ autoScaleMinorTickCount WRITE setAutoScaleMinorTickCount ) + Q_PROPERTY( Scale maximumScale READ maximumScale WRITE setMaximumScale ) + Q_PROPERTY( Scale minimumScale READ minimumScale WRITE setMinimumScale ) + Q_PROPERTY( int minimumColumnWidth READ minimumColumnWidth WRITE setMinimumColumnWidth ) + Q_PROPERTY( int ganttMaximumWidth READ ganttMaximumWidth WRITE setGanttMaximumWidth ) + Q_PROPERTY( QColor weekendBackgroundColor READ weekendBackgroundColor WRITE setWeekendBackgroundColor ) + Q_PROPERTY( QColor ganttViewBackgroundColor READ gvBackgroundColor WRITE setGvBackgroundColor ) + Q_PROPERTY( QColor listViewBackgroundColor READ lvBackgroundColor WRITE setLvBackgroundColor ) + Q_PROPERTY( QColor timeHeaderBackgroundColor READ timeHeaderBackgroundColor WRITE setTimeHeaderBackgroundColor ) + Q_PROPERTY( QColor legendHeaderBackgroundColor READ legendHeaderBackgroundColor WRITE setLegendHeaderBackgroundColor ) + Q_PROPERTY( double zoomFactor READ zoomFactor ) + Q_PROPERTY( bool showHeaderPopupMenu READ showHeaderPopupMenu WRITE setShowHeaderPopupMenu ) + Q_PROPERTY( bool showTimeTablePopupMenu READ showTimeTablePopupMenu WRITE setShowTimeTablePopupMenu ) + Q_PROPERTY( bool headerVisible READ headerVisible WRITE setHeaderVisible ) + Q_PROPERTY( bool showLegendButton READ showLegendButton WRITE setShowLegendButton ) + Q_PROPERTY( bool legendIsDockwindow READ legendIsDockwindow WRITE setLegendIsDockwindow ) + Q_PROPERTY( bool displayEmptyTasksAsLine READ displayEmptyTasksAsLine WRITE setDisplayEmptyTasksAsLine ) + Q_PROPERTY( QBrush noInformationBrush READ noInformationBrush WRITE setNoInformationBrush ) + Q_PROPERTY( bool dragEnabled READ dragEnabled WRITE setDragEnabled ) + Q_PROPERTY( bool dropEnabled READ dropEnabled WRITE setDropEnabled ) + Q_PROPERTY( bool calendarMode READ calendarMode WRITE setCalendarMode ) + + Q_ENUMS( Scale ) + Q_ENUMS( YearFormat ) + Q_ENUMS( HourFormat ) + +public: + enum Scale { Minute, Hour, Day, Week, Month, Auto }; + enum YearFormat { FourDigit, TwoDigit, TwoDigitApostrophe, NoDate }; + enum HourFormat { Hour_24, Hour_12, Hour_24_FourDigit }; + enum RepaintMode { No, Medium, Always }; + + KDGanttView( QWidget* parent = 0, const char* name = 0 ); + ~KDGanttView(); + + virtual void show(); + virtual bool close ( bool alsoDelete ); + void setRepaintMode( RepaintMode mode ); + void setUpdateEnabled( bool enable); + bool getUpdateEnabled( )const; + + void setGanttMaximumWidth( int w ); + int ganttMaximumWidth() const; + void setShowLegend( bool show ); + bool showLegend() const; + void setLegendIsDockwindow( bool dock ); + bool legendIsDockwindow( ) const; + QDockWindow* legendDockwindow( ) const; + void setShowListView( bool show ); + bool showListView() const; + void setEditorEnabled( bool enable ); + bool editorEnabled() const; + void setListViewWidth( int ); + int listViewWidth(); + void setEditable( bool editable ); + bool editable() const; + void setCalendarMode( bool mode ); + bool calendarMode() const; + void setDisplaySubitemsAsGroup( bool show ); + bool displaySubitemsAsGroup() const; + void setDisplayEmptyTasksAsLine( bool show ); + bool displayEmptyTasksAsLine() const; + + void setHorBackgroundLines( int count = 2, + QBrush brush = + QBrush( QColor ( 200,200,200 ), + Qt::Dense6Pattern )); + int horBackgroundLines( QBrush& brush ); + bool saveProject( QIODevice* ); + bool loadProject( QIODevice* ); + void print( QPrinter* printer = 0 , + bool printListView = true, bool printTimeLine = true, + bool printLegend = false ); + QSize drawContents( QPainter* p = 0, + bool drawListView = true, bool drawTimeLine = true, + bool drawLegend = false ); + void setZoomFactor( double factor, bool absolute ); + double zoomFactor() const; + void zoomToFit(); + void ensureVisible( KDGanttViewItem* ); + void center( KDGanttViewItem* ); + void centerTimeline( const QDateTime& center ); + void centerTimelineAfterShow( const QDateTime& center ); + void setTimelineToStart(); + void setTimelineToEnd(); + void addTicksLeft( int num = 1 ); + void addTicksRight( int num = 1 ); + void setShowTaskLinks( bool show ); + bool showTaskLinks() const; + + void setFont(const QFont& f); + void setShowHeaderPopupMenu( bool show = true, + bool showZoom = true, + bool showScale = true, + bool showTime = true, + bool showYear = true, + bool showGrid = true, + bool showPrint = false); + bool showHeaderPopupMenu() const; + void setShowTimeTablePopupMenu( bool ); + bool showTimeTablePopupMenu() const; + void setShapes( KDGanttViewItem::Type type, + KDGanttViewItem::Shape start, + KDGanttViewItem::Shape middle, + KDGanttViewItem::Shape end, + bool overwriteExisting = true ); + bool shapes( KDGanttViewItem::Type type, + KDGanttViewItem::Shape& start, + KDGanttViewItem::Shape& middle, + KDGanttViewItem::Shape& end ) const; + void setColors( KDGanttViewItem::Type type, + const QColor& start, const QColor& middle, + const QColor& end, + bool overwriteExisting = true ); + bool colors( KDGanttViewItem::Type type, + QColor& start, QColor& middle, QColor& end ) const; + void setDefaultColor( KDGanttViewItem::Type type, + const QColor&, + bool overwriteExisting = true ); + QColor defaultColor( KDGanttViewItem::Type type ) const; + void setHighlightColors( KDGanttViewItem::Type type, + const QColor& start, const QColor& middle, + const QColor& end, + bool overwriteExisting = true ); + bool highlightColors( KDGanttViewItem::Type type, + QColor& start, QColor& middle, QColor& end ) const; + void setDefaultHighlightColor( KDGanttViewItem::Type type, + const QColor&, + bool overwriteExisting = true ); + QColor defaultHighlightColor( KDGanttViewItem::Type type ) const; + void setTextColor( const QColor& color ); + QColor textColor() const; + + void setNoInformationBrush( const QBrush& brush ); + QBrush noInformationBrush() const; + + // Link-related stuff + QPtrList<KDGanttViewTaskLink> taskLinks() const; + QPtrList<KDGanttViewTaskLinkGroup> taskLinkGroups() const; + + // Legend-related stuff + void addLegendItem( KDGanttViewItem::Shape shape, const QColor& shapeColor, const QString& text ); + void clearLegend(); + // Header-related stuff + void setHorizonStart( const QDateTime& start ); + QDateTime horizonStart() const; + void setHorizonEnd( const QDateTime& start ); + QDateTime horizonEnd() const; + void setScale( Scale ); + Scale scale() const; + void setMaximumScale( Scale ); + Scale maximumScale() const; + void setMinimumScale( Scale ); + Scale minimumScale() const; + void setAutoScaleMinorTickCount( int count ); + int autoScaleMinorTickCount() const; + void setMajorScaleCount( int count ); + int majorScaleCount() const; + void setMinorScaleCount( int count ); + int minorScaleCount() const; + void setMinimumColumnWidth( int width ); + int minimumColumnWidth() const; + void setYearFormat( YearFormat format ); + YearFormat yearFormat() const; + void setHourFormat( HourFormat format ); + HourFormat hourFormat() const; + void setShowMajorTicks( bool ); + bool showMajorTicks() const; + void setShowMinorTicks( bool ); + bool showMinorTicks() const; + void setColumnBackgroundColor( const QDateTime& column, + const QColor& color, + Scale mini = KDGanttView::Minute , + Scale maxi = KDGanttView::Month); +#if 0 + // This API has been replaced with KDIntervalColorRectangle and addIntervalBackgroundColor + void setIntervalBackgroundColor( const QDateTime& start, + const QDateTime& end, + const QColor& color, + Scale mini = KDGanttView::Minute , + Scale maxi = KDGanttView::Month); + bool changeBackgroundInterval( const QDateTime& oldstart, + const QDateTime& oldend, + const QDateTime& newstart, + const QDateTime& newend ); + bool deleteBackgroundInterval( const QDateTime& start, + const QDateTime& end ); +#endif + void addIntervalBackgroundColor( KDIntervalColorRectangle* newItem ); + void clearBackgroundColor(); + QColor columnBackgroundColor( const QDateTime& column ) const; + void setWeekendBackgroundColor( const QColor& color ); + QColor weekendBackgroundColor() const; + void setWeekdayBackgroundColor( const QColor& color, int weekday ); + QColor weekdayBackgroundColor(int weekday) const; + + + void setPaletteBackgroundColor(const QColor& col); + void setGvBackgroundColor ( const QColor & ); + void setLvBackgroundColor ( const QColor & ); + void setTimeHeaderBackgroundColor ( const QColor & ); + void setLegendHeaderBackgroundColor ( const QColor & ); + QColor gvBackgroundColor () const ; + QColor lvBackgroundColor () const ; + QColor timeHeaderBackgroundColor () const ; + QColor legendHeaderBackgroundColor () const ; + void addUserdefinedLegendHeaderWidget( QWidget * w ); + + void setWeekendDays( int start, int end ); + void weekendDays( int& start, int& end ) const; + + static QPixmap getPixmap( KDGanttViewItem::Shape shape, const QColor& shapeColor,const QColor& backgroundColor, int itemSize); + + void setHeaderVisible( bool ); + bool headerVisible() const; + + void setShowLegendButton( bool show ); + bool showLegendButton() const; + + // Pass-through methods from QListView + virtual int addColumn( const QString& label, int width = -1 ); + virtual int addColumn( const QIconSet& iconset, const QString& label, + int width = -1 ); + virtual void removeColumn( int index ); + KDGanttViewItem* selectedItem() const; + void setSelected( KDGanttViewItem*, bool ); + KDGanttViewItem* firstChild() const; + KDGanttViewItem* lastItem() const; + int childCount() const; + void clear(); + + void setDragEnabled( bool b ); + void setDropEnabled( bool b ); + void setDragDropEnabled( bool b ); + bool dragEnabled() const; + bool dropEnabled() const; + bool isDragEnabled() const; + bool isDropEnabled() const; + + virtual bool lvDropEvent ( QDropEvent *e, KDGanttViewItem*, KDGanttViewItem*); + virtual void lvStartDrag (KDGanttViewItem*); + virtual bool lvDragMoveEvent (QDragMoveEvent * e,KDGanttViewItem*, KDGanttViewItem*); + virtual void lvDragEnterEvent (QDragEnterEvent * e ); + virtual QSize sizeHint() const; + KDGanttViewItem* getItemByName( const QString& name ) const; + QDateTime getDateTimeForCoordX(int coordX, bool global = true ) const; + KDGanttViewItem* getItemByListViewPos( const QPoint& pos ) const; + KDGanttViewItem* getItemByGanttViewPos( const QPoint& pos ) const; + KDGanttViewItem* getItemAt( const QPoint& pos , bool global = true ) const; + + // setting the vertical scrollbars of the listview and the timetable + // default values: always off for the listview, always on for the timetable + void setLvVScrollBarMode( QScrollView::ScrollBarMode ); + void setGvVScrollBarMode( QScrollView::ScrollBarMode ); + + void setLinkItemsEnabled(bool on); + bool isLinkItemsEnabled() const; + + KDTimeTableWidget * timeTableWidget() { return myTimeTable; } + KDTimeHeaderWidget * timeHeaderWidget() { return myTimeHeader; } + + void setFixedHorizon( bool f ) { mFixedHorizon = f; } + +public slots: + void editItem( KDGanttViewItem* ); + void zoomToSelection( const QDateTime& start, const QDateTime& end); + +signals: + void timeIntervallSelected( const QDateTime& start, const QDateTime& end); + void timeIntervalSelected( const QDateTime& start, const QDateTime& end); + void rescaling( KDGanttView::Scale ); + void intervalColorRectangleMoved( const QDateTime& start, const QDateTime& end ); + + // the following signals are emitted if an item is clicked in the + // listview (inclusive) or in the ganttview + void itemLeftClicked( KDGanttViewItem* ); + void itemMidClicked( KDGanttViewItem* ); + void itemRightClicked( KDGanttViewItem* ); + void itemDoubleClicked( KDGanttViewItem* ); + + // The following signal is emitted when two items shall be linked + void linkItems( KDGanttViewItem* from, KDGanttViewItem* to, int linkType ); + + // the following signals are emitted if an item is clicked in the + // listview (exlusive) or in the ganttview + // gv... means item in ganttview clicked + + void gvCurrentChanged( KDGanttViewItem* ); + void gvItemLeftClicked( KDGanttViewItem* ); + void gvItemMidClicked( KDGanttViewItem* ); + void gvItemRightClicked( KDGanttViewItem* ); + // the point is the global position!! + void gvMouseButtonClicked ( int button, KDGanttViewItem* item, const QPoint & pos); + void gvItemDoubleClicked( KDGanttViewItem* ); + // the point is the global position!! + void gvContextMenuRequested ( KDGanttViewItem * item, const QPoint & pos ); + void gvItemMoved( KDGanttViewItem* ); + + // lv... means item in listview clicked + void lvCurrentChanged( KDGanttViewItem* ); + void lvItemRenamed( KDGanttViewItem* , int col, const QString & text ); + void lvMouseButtonPressed( int button, KDGanttViewItem * item, const QPoint & pos, int c ); + void lvItemLeftClicked( KDGanttViewItem* ); + void lvItemMidClicked( KDGanttViewItem* ); + void lvItemRightClicked( KDGanttViewItem* ); + void lvContextMenuRequested ( KDGanttViewItem * item, const QPoint & pos, int col ); + void lvMouseButtonClicked ( int button, KDGanttViewItem* item, const QPoint & pos, int c ); + void lvItemDoubleClicked( KDGanttViewItem* ); + void lvSelectionChanged( KDGanttViewItem* ); + + void itemConfigured( KDGanttViewItem* ); + + void taskLinkLeftClicked( KDGanttViewTaskLink* ); + void taskLinkMidClicked( KDGanttViewTaskLink* ); + void taskLinkRightClicked( KDGanttViewTaskLink* ); + void taskLinkDoubleClicked( KDGanttViewTaskLink* ); + + void dateTimeDoubleClicked (const QDateTime& ); + + void dropped ( QDropEvent * e, KDGanttViewItem* droppedItem, KDGanttViewItem* itemBelowMouse); +private slots: + void forceRepaint( int val = 0 ); + void slotSelectionChanged( QListViewItem* item ); + void slotCurrentChanged ( QListViewItem * item ); + void slotItemRenamed ( QListViewItem * item, int col, const QString & text ); + void slotMouseButtonPressed ( int button, QListViewItem * item, const QPoint & pos, int c ); + void slotmouseButtonClicked ( int button, QListViewItem * item, const QPoint & pos, int c ); + void slotcontextMenuRequested ( QListViewItem * item, const QPoint & pos, int col ); + void slotHeaderSizeChanged(); + void addTickRight(); + void addTickLeft(); + void enableAdding( int ); + void slot_lvDropped(QDropEvent* e, KDGanttViewItem* droppedItem, KDGanttViewItem* itemBelowMouse ); +private: + struct legendItem { + KDGanttViewItem::Shape shape; + QColor color; + QString text; + }; + bool loadXML( const QDomDocument& doc ); + QDomDocument saveXML( bool withPI = true ) const; + + void emptySpaceDoubleClicked( QMouseEvent* e ); + + static QString scaleToString( Scale scale ); + static QString yearFormatToString( YearFormat format ); + static QString hourFormatToString( HourFormat format ); + static Scale stringToScale( const QString& string ); + static YearFormat stringToYearFormat( const QString& string ); + static HourFormat stringToHourFormat( const QString& string ); + + // PENDING(lutz) Review these + friend class KDGanttCanvasView; + friend class KDGanttViewEventItem; + friend class KDGanttViewItem; + friend class KDGanttViewTaskItem; + friend class KDGanttViewSummaryItem; + friend class KDGanttViewTaskLink; + friend class KDGanttViewCalendarItem; + friend class KDTimeTableWidget; + friend class KDTimeHeaderWidget; + friend class KDListView; + friend class KDGanttViewTaskLinkGroup; + friend class KDLegendWidget; + + KDListView * myListView; + KDGanttCanvasView *myCanvasView; + KDTimeHeaderWidget * myTimeHeader; + KDTimeTableWidget * myTimeTable; + KDLegendWidget * myLegend; + itemAttributeDialog* myItemAttributeDialog; + QVBox * leftWidget, * rightWidget; + QHBox * spacerLeft; + QScrollView* myTimeHeaderScroll; + QHBox* myTimeHeaderContainer ; + QWidget* timeHeaderSpacerWidget; + QWidget *spacerRight; + + bool listViewIsVisible; + bool chartIsEditable; + bool editorIsEnabled; + bool _displaySubitemsAsGroup; + bool _displayEmptyTasksAsLine; + bool _showLegendButton; + bool _showHeader; + bool _enableAdding; + bool fCenterTimeLineAfterShow; + bool fDragEnabled; + bool fDropEnabled; + bool closingBlocked; + QDateTime dtCenterTimeLineAfterShow; + KDGanttViewItem::Shape myDefaultShape [9]; + QColor myColor[9],myColorHL[9]; + bool undefinedShape[3],undefinedColor[3],undefinedColorHL[3]; + QColor myTextColor; + QColor myDefaultColor[3],myDefaultColorHL[3]; + QPtrList<KDGanttViewTaskLinkGroup> myTaskLinkGroupList; + QPtrList<legendItem> *myLegendItems; + void addTaskLinkGroup(KDGanttViewTaskLinkGroup*); + void removeTaskLinkGroup(KDGanttViewTaskLinkGroup*); + int getIndex( KDGanttViewItem::Type ) const; + void notifyEditdialog( KDGanttViewItem * ); + void initDefaults(); + KDGanttViewItem* myCurrentItem; + KDGanttMinimizeSplitter *mySplitter; + bool mFixedHorizon; +protected: + virtual QDragObject * dragObject (); + virtual void startDrag (); +}; + + + +#endif |