summaryrefslogtreecommitdiffstats
path: root/kdgantt/KDGanttView.h
diff options
context:
space:
mode:
Diffstat (limited to 'kdgantt/KDGanttView.h')
-rw-r--r--kdgantt/KDGanttView.h502
1 files changed, 502 insertions, 0 deletions
diff --git a/kdgantt/KDGanttView.h b/kdgantt/KDGanttView.h
new file mode 100644
index 00000000..c0c9bbba
--- /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