File indexing completed on 2024-05-12 04:20:41
0001 /* 0002 * SPDX-FileCopyrightText: 2001-2015 Klaralvdalens Datakonsult AB. All rights reserved. 0003 * 0004 * This file is part of the KGantt library. 0005 * 0006 * SPDX-License-Identifier: GPL-2.0-or-later 0007 */ 0008 0009 #ifndef KGANTTGRAPHICSITEM_H 0010 #define KGANTTGRAPHICSITEM_H 0011 0012 #include "kganttglobal.h" 0013 #include "kganttstyleoptionganttitem.h" 0014 0015 #include <QGraphicsItem> 0016 #include <QDateTime> 0017 #include <QPersistentModelIndex> 0018 0019 QT_BEGIN_NAMESPACE 0020 class QGraphicsLineItem; 0021 QT_END_NAMESPACE 0022 0023 namespace KGantt { 0024 class GraphicsScene; 0025 class ConstraintGraphicsItem; 0026 0027 /* Can we fit every kind of item into one gfxitem class? */ 0028 0029 /*!\class KGantt::GraphicsItem 0030 * \internal 0031 */ 0032 class KGANTT_EXPORT GraphicsItem : public QGraphicsItem { 0033 public: 0034 enum { Type = UserType + 42 }; 0035 0036 explicit GraphicsItem( QGraphicsItem* parent = nullptr, GraphicsScene* scene = nullptr ); 0037 explicit GraphicsItem( const QModelIndex& idx, QGraphicsItem* parent = nullptr, GraphicsScene* scene = nullptr ); 0038 ~GraphicsItem() override; 0039 0040 /*reimp*/int type() const override; 0041 /*reimp (non-virtual)*/ GraphicsScene* scene() const; 0042 0043 void updateItem( const Span& rowgeometry, const QPersistentModelIndex& idx ); 0044 0045 //virtual ItemType itemType() const = 0; 0046 0047 //qreal dateTimeToSceneX( const QDateTime& dt ) const; 0048 //QDateTime sceneXtoDateTime( qreal x ) const; 0049 0050 QRectF rect() const { return m_rect; } 0051 void setRect( const QRectF& r ); 0052 void setBoundingRect( const QRectF& r ); 0053 0054 virtual QString ganttToolTip() const; 0055 0056 const QPersistentModelIndex& index() const { return m_index; } 0057 void setIndex( const QPersistentModelIndex& idx ); 0058 0059 bool isEditable() const; 0060 bool isUpdating() const { return m_isupdating; } 0061 0062 void addStartConstraint( ConstraintGraphicsItem* ); 0063 void addEndConstraint( ConstraintGraphicsItem* ); 0064 void removeStartConstraint( ConstraintGraphicsItem* ); 0065 void removeEndConstraint( ConstraintGraphicsItem* ); 0066 QList<ConstraintGraphicsItem*> startConstraints() const { return m_startConstraints; } 0067 QList<ConstraintGraphicsItem*> endConstraints() const { return m_endConstraints; } 0068 0069 /*reimp*/ QRectF boundingRect() const override; 0070 /*reimp*/ void paint( QPainter* painter, const QStyleOptionGraphicsItem* option, 0071 QWidget* widget = nullptr ) override; 0072 0073 /*reimp*/ QVariant itemChange( GraphicsItemChange, const QVariant& value ) override; 0074 protected: 0075 /*reimp*/ void focusInEvent( QFocusEvent* event ) override; 0076 /*reimp*/ void hoverMoveEvent( QGraphicsSceneHoverEvent* ) override; 0077 /*reimp*/ void hoverLeaveEvent( QGraphicsSceneHoverEvent* ) override; 0078 /*reimp*/ void mousePressEvent( QGraphicsSceneMouseEvent* ) override; 0079 /*reimp*/ void mouseReleaseEvent( QGraphicsSceneMouseEvent* ) override; 0080 /*reimp*/ void mouseDoubleClickEvent( QGraphicsSceneMouseEvent* ) override; 0081 /*reimp*/ void mouseMoveEvent( QGraphicsSceneMouseEvent* ) override; 0082 0083 private: 0084 void init(); 0085 0086 QPointF startConnector( int relationType ) const; 0087 QPointF endConnector( int relationType ) const; 0088 void updateConstraintItems(); 0089 StyleOptionGanttItem getStyleOption() const; 0090 void updateModel(); 0091 void updateItemFromMouse( const QPointF& scenepos ); 0092 void constraintsChanged(); 0093 0094 QRectF m_rect; 0095 QRectF m_boundingrect; 0096 QPersistentModelIndex m_index; 0097 bool m_isupdating; 0098 int m_istate; 0099 QPointF m_presspos; 0100 QPointF m_pressscenepos; 0101 QGraphicsLineItem* m_dragline; 0102 GraphicsItem* m_dragtarget; 0103 QList<ConstraintGraphicsItem*> m_startConstraints; 0104 QList<ConstraintGraphicsItem*> m_endConstraints; 0105 }; 0106 } 0107 0108 #endif /* KGANTTGRAPHICSITEM_H */ 0109