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