KGantt

kganttgraphicsscene.h
1 /*
2  * SPDX-FileCopyrightText: 2001-2015 Klaralvdalens Datakonsult AB. All rights reserved.
3  *
4  * This file is part of the KGantt library.
5  *
6  * SPDX-License-Identifier: GPL-2.0-or-later
7  */
8 
9 #ifndef KGANTTGRAPHICSSCENE_H
10 #define KGANTTGRAPHICSSCENE_H
11 
12 #include <QDateTime>
13 #include <QList>
14 #include <QGraphicsScene>
15 #include <QModelIndex>
16 
17 #include "kganttglobal.h"
18 
19 QT_BEGIN_NAMESPACE
22 class QItemSelection;
23 class QPrinter;
24 class QAbstractItemModel;
25 
26 
27 /*!\class KGantt::GraphicsScene
28  * \internal
29  */
31 QT_END_NAMESPACE
32 
33 namespace KGantt {
34  class AbstractGrid;
35  class AbstractRowController;
36  class GraphicsItem;
37  class Constraint;
38  class ConstraintModel;
39  class ConstraintGraphicsItem;
40  class ItemDelegate;
41  class PrintingContext;
42 
43  class KGANTT_EXPORT GraphicsScene : public QGraphicsScene {
44  Q_OBJECT
45  KGANTT_DECLARE_PRIVATE_BASE_POLYMORPHIC( GraphicsScene )
46  public:
47  explicit GraphicsScene( QObject* parent = nullptr );
48  ~GraphicsScene() override;
49 
50  //qreal dateTimeToSceneX( const QDateTime& dt ) const;
51  //QDateTime sceneXtoDateTime( qreal x ) const;
52 
53  static QModelIndex mainIndex( const QModelIndex& idx );
54 
55  /*! Returns the index pointing to the last column
56  * in the same row as idx. This can be thought of
57  * as in "inverse" of mainIndex()
58  */
59  static QModelIndex dataIndex( const QModelIndex& idx );
60 
61  QAbstractItemModel* model() const;
62  QAbstractProxyModel* summaryHandlingModel() const;
63  QModelIndex rootIndex() const;
64  ConstraintModel* constraintModel() const;
65  QItemSelectionModel* selectionModel() const;
66 
67  void insertItem( const QPersistentModelIndex&, GraphicsItem* );
68  void removeItem( const QModelIndex& );
70  GraphicsItem* findItem( const QModelIndex& ) const;
71  GraphicsItem* findItem( const QPersistentModelIndex& ) const;
72 
73  void updateItems();
74  void clearItems();
75  void deleteSubtree( const QModelIndex& );
76 
77  ConstraintGraphicsItem* findConstraintItem( const Constraint& ) const;
78  QList<ConstraintGraphicsItem*> findConstraintItems( const QModelIndex& idx ) const;
79 
80  void setItemDelegate( ItemDelegate* );
81  ItemDelegate* itemDelegate() const;
82 
83  void setRowController( AbstractRowController* rc );
84  AbstractRowController* rowController() const;
85 
86  /**
87  * Set the grid to @p grid.
88  * The current grid (if set) is deleted.
89  * If @p grid is nullptr, the scene reverts to use the default_grid
90  */
91  void setGrid( AbstractGrid* grid );
92  /**
93  * @return the grid set with setGrid().
94  * Note: Returns nullptr if no grid has been set.
95  */
96  AbstractGrid* grid() const;
97  /**
98  * @return the current grid.
99  */
100  const AbstractGrid *getGrid() const;
101  /**
102  * @return the grid set with setGrid()
103  * Note: Returns nullptr if no grid has been set.
104  * The scene reverts to use the default_grid.
105  */
106  AbstractGrid *takeGrid();
107 
108  bool isReadOnly() const;
109 
110  void updateRow( const QModelIndex& idx );
111 
112  /*! Creates a new item of type type.
113  */
114  GraphicsItem* createItem( ItemType type ) const;
115 
116  /* used by GraphicsItem */
117  void itemEntered( const QModelIndex& );
118  void itemPressed( const QModelIndex& idx, QGraphicsSceneMouseEvent *event );
119  void itemClicked( const QModelIndex& );
120  void itemDoubleClicked( const QModelIndex& );
121  void setDragSource( GraphicsItem* item );
122  GraphicsItem* dragSource() const;
123 
124  /* Printing */
125 
126  /*! Print the Gantt chart using \a printer. If \a drawRowLabels
127  * is true (the default), each row will have it's label printed
128  * on the left side. If \a drawColumnLabels is true (the
129  * default), each column will have it's label printed at the
130  * top side.
131  *
132  * This version of print() will print multiple pages.
133  */
134  void print( QPrinter* printer, bool drawRowLabels = true, bool drawColumnLabels = true );
135 
136  /*! Print part of the Gantt chart from \a start to \a end using \a printer.
137  * If \a drawRowLabels is true (the default), each row will have it's
138  * label printed on the left side. If \a drawColumnLabels is true (the
139  * default), each column will have it's label printed at the
140  * top side.
141  *
142  * This version of print() will print multiple pages.
143  *
144  * To print a certain range of a chart with a DateTimeGrid, use
145  * qreal DateTimeGrid::mapFromDateTime( const QDateTime& dt) const
146  * to figure out the values for \a start and \a end.
147  */
148  void print( QPrinter* printer, qreal start, qreal end, bool drawRowLabels = true, bool drawColumnLabels = true );
149 
150  /*! Render the GanttView inside the rectangle \a target using the painter \a painter.
151  * If \a drawRowLabels is true (the default), each row will have it's
152  * label printed on the left side. If \a drawColumnLabels is true (the
153  * default), each column will have it's label printed at the
154  * top side.
155  */
156  void print( QPainter* painter, const QRectF& target = QRectF(), bool drawRowLabels=true, bool drawColumnLabels = true );
157 
158  /*! Render the GanttView inside the rectangle \a target using the painter \a painter.
159  * If \a drawRowLabels is true (the default), each row will have it's
160  * label printed on the left side. If \a drawColumnLabels is true (the
161  * default), each column will have it's label printed at the
162  * top side.
163  *
164  * To print a certain range of a chart with a DateTimeGrid, use
165  * qreal DateTimeGrid::mapFromDateTime( const QDateTime& dt) const
166  * to figure out the values for \a start and \a end.
167  */
168  void print( QPainter* painter, qreal start, qreal end, const QRectF& target = QRectF(), bool drawRowLabels=true, bool drawColumnLabels = true );
169 
170  /*! Print the Gantt chart on the \a printer in accordance with the PrintingContext \a context
171  *
172  * \see PrintingContext
173  *
174  * \since 2.8.0
175  */
176  void printDiagram( QPrinter *printer, const PrintingContext &context );
177 
178  Q_SIGNALS:
179  void gridChanged();
180 
181  void clicked( const QModelIndex & index );
182  void qrealClicked( const QModelIndex & index );
183  void entered( const QModelIndex & index );
184  void pressed( const QModelIndex & index );
185 
186  protected:
187  /*reimp*/ void helpEvent( QGraphicsSceneHelpEvent *helpEvent ) override;
188  /*reimp*/ void drawBackground( QPainter* painter, const QRectF& rect ) override;
189  /*reimp*/ void drawForeground( QPainter* painter, const QRectF& rect ) override;
190 
191  public Q_SLOTS:
192  void setModel( QAbstractItemModel* );
193  void setSummaryHandlingModel( QAbstractProxyModel* );
194  void setConstraintModel( KGantt::ConstraintModel* );
195  void setRootIndex( const QModelIndex& idx );
196  void setSelectionModel( QItemSelectionModel* selectionmodel );
197  void setReadOnly( bool );
198 
199  private Q_SLOTS:
200  /* slots for ConstraintModel */
201  void slotConstraintAdded( const KGantt::Constraint& );
202  void slotConstraintRemoved( const KGantt::Constraint& );
203  void slotGridChanged();
204  void slotSelectionChanged(const QItemSelection &selected, const QItemSelection &deselected);
205  void selectionModelChanged(QAbstractItemModel *);
206 
207  private:
208  /*\internal
209  */
210  void doPrint( QPainter* painter, const QRectF& targetRect,
211  qreal start, qreal end,
212  QPrinter* printer, bool drawRowLabels, bool drawColumnLabels );
213 
214  void doPrintScene( QPrinter *printer, QPainter *painter, const QRectF& targetRect, const PrintingContext &context );
215 
216  void drawLabelsHeader( QPainter *painter, const QRectF &sourceRect, const QRectF &targetRect );
217  };
218 }
219 
220 #endif /* KGANTTGRAPHICSSCENE_H */
Abstract baseclass for row controllers. A row controller is used by the GraphicsView to nagivate the ...
A class used to represent a dependency.
PartitionTable::TableType type
void removeItem(QGraphicsItem *item)
Global namespace.
Abstract baseclass for grids. A grid is used to convert between QModelIndex&#39;es and gantt chart values...
The PrintingContext class provides options for printing the gantt chart.
Contains KGantt macros.
bool isReadOnly
Class used to render gantt items in a KGantt::GraphicsView.
This file is part of the KDE documentation.
Documentation copyright © 1996-2021 The KDE developers.
Generated on Sun Dec 5 2021 22:32:42 by doxygen 1.8.11 written by Dimitri van Heesch, © 1997-2006

KDE's Doxygen guidelines are available online.