26#include <QAbstractItemModel>
27#include <QAbstractProxyModel>
28#include <QGraphicsLineItem>
29#include <QGraphicsSceneMouseEvent>
30#include <QItemSelectionModel>
84void GraphicsItem::init()
110 <<
", ends="<<m_endConstraints.size() <<
", starts="<<m_startConstraints.size();
155 qDebug() <<
"gotcha";
161 updateConstraintItems();
202 return m_boundingrect;
205QPointF GraphicsItem::startConnector(
int relationType)
const
207 switch (relationType) {
217QPointF GraphicsItem::endConnector(
int relationType)
const
219 switch (relationType) {
229void GraphicsItem::constraintsChanged()
241 m_startConstraints << item;
243 constraintsChanged();
249 m_endConstraints << item;
251 constraintsChanged();
257 m_startConstraints.removeAll(item);
258 constraintsChanged();
264 m_endConstraints.removeAll(item);
265 constraintsChanged();
268void GraphicsItem::updateConstraintItems()
287 Updater updater(&m_isupdating);
303 if (maxh < rowGeometry.
length()) {
305 const Qt::Alignment align = getStyleOption().displayAlignment;
354void GraphicsItem::updateModel()
369 it1 != m_startConstraints.end();
371 constraints.
push_back((*it1)->proxyConstraint());
373 it2 != m_endConstraints.end();
375 constraints.
push_back((*it2)->proxyConstraint());
435 m_presspos =
event->pos();
436 m_pressscenepos =
event->scenePos();
443 BASE::mousePressEvent(event);
454 if (!m_presspos.
isNull()) {
458 m_dragline =
nullptr;
459 if (
scene()->dragSource()) {
466 QRectF itemRect = other->rect().
adjusted(-other->rect().height() / 2.0, 0, 0, 0);
467 if (other->mapToScene(itemRect).boundingRect().contains(event->
scenePos())) {
470 view->addConstraint(
scene()->summaryHandlingModel()->mapToSource(
scene()->dragSource()->
index()),
471 scene()->summaryHandlingModel()->mapToSource(other->index()), event->
modifiers());
475 if (other &&
scene()->dragSource() != other && other->mapToScene(other->rect()).boundingRect().contains(event->
scenePos())) {
478 view->addConstraint(
scene()->summaryHandlingModel()->mapToSource(
scene()->dragSource()->
index()),
479 scene()->summaryHandlingModel()->mapToSource(other->index()), event->
modifiers());
488 updateItemFromMouse(event->
scenePos());
503 BASE::mouseReleaseEvent(event);
514 BASE::mouseDoubleClickEvent(event);
517void GraphicsItem::updateItemFromMouse(
const QPointF &scenepos)
520 const QPointF p = scenepos - m_presspos;
528 const qreal brr = br.
right();
529 const qreal rr = r.
right();
530 const qreal delta =
pos().
x() - p.
x();
537 const qreal rr = r.
right();
553 if (m_presspos.isNull())
562 if (qAbs(m_pressscenepos.
x() - event->
scenePos().
x()) < 10.
563 && qAbs(m_pressscenepos.
y() - event->
scenePos().
y()) > 5.) {
573 updateItemFromMouse(event->
scenePos());
virtual Span mapToChart(const QModelIndex &idx) const =0
Implement this to map from the data in the model to the location of the corresponding item in the vie...
virtual bool mapFromChart(const Span &span, const QModelIndex &idx, const QList< Constraint > &constraints=QList< Constraint >()) const =0
Implement this to update the model data based on the location of the item.
virtual int maximumItemHeight() const =0
void setStart(const QPointF &start)
const Constraint & constraint() const
void setEnd(const QPointF &end)
The ConstraintModel keeps track of the interdependencies between gantt items in a View.
RelationType relationType() const
This is unused for now.
int type() const override
void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget=nullptr) override
QRectF boundingRect() const override
void removeStartConstraint(ConstraintGraphicsItem *)
GraphicsItem(QGraphicsItem *parent=nullptr, GraphicsScene *scene=nullptr)
void addEndConstraint(ConstraintGraphicsItem *)
void mousePressEvent(QGraphicsSceneMouseEvent *) override
void updateItem(const Span &rowgeometry, const QPersistentModelIndex &idx)
void hoverMoveEvent(QGraphicsSceneHoverEvent *) override
void mouseReleaseEvent(QGraphicsSceneMouseEvent *) override
virtual QString ganttToolTip() const
void mouseDoubleClickEvent(QGraphicsSceneMouseEvent *) override
void removeEndConstraint(ConstraintGraphicsItem *)
void mouseMoveEvent(QGraphicsSceneMouseEvent *) override
void focusInEvent(QFocusEvent *event) override
void setIndex(const QPersistentModelIndex &idx)
const QPersistentModelIndex & index() const
GraphicsScene * scene() const
void setRect(const QRectF &r)
void addStartConstraint(ConstraintGraphicsItem *)
void setBoundingRect(const QRectF &r)
void hoverLeaveEvent(QGraphicsSceneHoverEvent *) override
QVariant itemChange(GraphicsItemChange, const QVariant &value) override
void itemDoubleClicked(const QModelIndex &)
AbstractRowController * rowController() const
ItemDelegate * itemDelegate() const
void itemClicked(const QModelIndex &)
ConstraintModel * constraintModel() const
void itemEntered(const QModelIndex &)
void updateRow(const QModelIndex &idx)
void itemPressed(const QModelIndex &)
AbstractGrid * grid() const
QItemSelectionModel * selectionModel() const
void setDragSource(GraphicsItem *item)
virtual QString toolTip(const QModelIndex &idx) const
virtual Span itemBoundingSpan(const StyleOptionGanttItem &opt, const QModelIndex &idx) const
virtual InteractionState interactionStateFor(const QPointF &pos, const StyleOptionGanttItem &opt, const QModelIndex &idx) const
InteractionState
This enum is used for communication between the view and the delegate about user interaction with gan...
virtual void paintGanttItem(QPainter *p, const StyleOptionGanttItem &opt, const QModelIndex &idx)
Paints the gantt item idx using painter and opt.
A class representing a start point and a length.
QStyleOption subclass for gantt items.
Position
This enum is used to describe where the Qt::DisplayRole (the label) should be located relative to the...
QRectF boundingRect
Contains the bounding rectangle for the item.
AbstractGrid * grid
Contains a pointer to the AbstractGrid used by the view.
QString text
Contains a string printed to the item.
QRectF itemRect
Contains the "active" item rectangle that corresponds to the values from the model.
virtual QVariant data(const QModelIndex &index, int role) const const=0
virtual Qt::ItemFlags flags(const QModelIndex &index) const const
void setHandlesChildEvents(bool enabled)
QGraphicsItem::GraphicsItemFlags flags() const const
bool hasFocus() const const
bool isEnabled() const const
bool isSelected() const const
virtual QVariant itemChange(QGraphicsItem::GraphicsItemChange change, const QVariant &value)
QPointF mapToScene(const QPointF &point) const const
QPointF pos() const const
void prepareGeometryChange()
QGraphicsScene * scene() const const
QPointF scenePos() const const
void setAcceptHoverEvents(bool enabled)
void setCacheMode(QGraphicsItem::CacheMode mode, const QSize &logicalCacheSize)
void setCursor(const QCursor &cursor)
void setFlags(QGraphicsItem::GraphicsItemFlags flags)
void setPos(const QPointF &pos)
void update(const QRectF &rect)
QLineF line() const const
void setLine(const QLineF &line)
void setPen(const QPen &pen)
void addItem(QGraphicsItem *item)
void update(qreal x, qreal y, qreal w, qreal h)
QPointF pos() const const
Qt::KeyboardModifiers modifiers() const const
QPointF pos() const const
QPointF scenePos() const const
virtual void select(const QModelIndex &index, QItemSelectionModel::SelectionFlags command)
virtual void setCurrentIndex(const QModelIndex &index, QItemSelectionModel::SelectionFlags command)
void push_back(const T &value)
QVariant data(int role) const const
bool isValid() const const
const QAbstractItemModel * model() const const
bool isNull() const const
QRectF adjusted(qreal dx1, qreal dy1, qreal dx2, qreal dy2) const const
qreal height() const const
qreal right() const const
void setHeight(qreal height)
void setWidth(qreal width)
qreal width() const const
QVariant fromValue(const T &value)
bool isValid() const const
bool toBool() const const
int toInt(bool *ok) const const
QPointF toPointF() const const
QString toString() const const