diff options
author | Alessandro Portale <alessandro.portale@qt.io> | 2016-09-15 17:55:28 +0200 |
---|---|---|
committer | Alessandro Portale <alessandro.portale@qt.io> | 2016-09-16 12:39:49 +0000 |
commit | 4ea332b0620c773abbd1dcf1689ec6c7253069ca (patch) | |
tree | f9c4e5c806dfc87aaebe4de041eb99357de96fd8 /src/plugins/scxmleditor/plugin_interface/connectableitem.h | |
parent | 1a9919a20811cea6bf2fc77639f668c3a595883a (diff) | |
download | qt-creator-4ea332b0620c773abbd1dcf1689ec6c7253069ca.tar.gz |
ScxmlEditor: Initial import
Change-Id: I4701b77ebd4e2520f2616c42206ac17be3a12b60
Reviewed-by: Tobias Hunger <tobias.hunger@qt.io>
Reviewed-by: Ulf Hermann <ulf.hermann@qt.io>
Diffstat (limited to 'src/plugins/scxmleditor/plugin_interface/connectableitem.h')
-rw-r--r-- | src/plugins/scxmleditor/plugin_interface/connectableitem.h | 146 |
1 files changed, 146 insertions, 0 deletions
diff --git a/src/plugins/scxmleditor/plugin_interface/connectableitem.h b/src/plugins/scxmleditor/plugin_interface/connectableitem.h new file mode 100644 index 0000000000..93217ddfa0 --- /dev/null +++ b/src/plugins/scxmleditor/plugin_interface/connectableitem.h @@ -0,0 +1,146 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of Qt Creator. +** +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 as published by the Free Software +** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-3.0.html. +** +****************************************************************************/ + +#pragma once + +#include "baseitem.h" +#include "transitionitem.h" + +#include <QPen> + +QT_FORWARD_DECLARE_CLASS(QGraphicsSceneMouseEvent) + +namespace ScxmlEditor { + +namespace PluginInterface { + +class CornerGrabberItem; +class HighlightItem; +class QuickTransitionItem; + +/** + * @brief The ConnectableItem class is the base class for all draggable state-items. + */ +class ConnectableItem : public BaseItem +{ + Q_OBJECT + +public: + explicit ConnectableItem(const QPointF &pos, BaseItem *parent = nullptr); + ~ConnectableItem() override; + + QVariant itemChange(GraphicsItemChange change, const QVariant &value) override; + void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget) override; + bool sceneEventFilter(QGraphicsItem *watched, QEvent *event) override; + + void addOutputTransition(TransitionItem *transition); + void addInputTransition(TransitionItem *transition); + void removeOutputTransition(TransitionItem *transition); + void removeInputTransition(TransitionItem *transition); + QVector<TransitionItem*> outputTransitions() const; + QVector<TransitionItem*> inputTransitions() const; + + void setMinimumWidth(int width); + void setMinimumHeight(int height); + int minHeight() const + { + return m_minimumHeight; + } + + int minWidth() const + { + return m_minimumWidth; + } + + void finalizeCreation() override; + void init(ScxmlTag *tag, BaseItem *parentItem = nullptr, bool initChildren = true, bool blockUpdates = false) override; + + void updateUIProperties() override; + void updateAttributes() override; + void updateEditorInfo(bool allChildren = false) override; + void moveStateBy(qreal dx, qreal dy) override; + void setHighlight(bool hl) override; + + int transitionCount() const; + int outputTransitionCount() const; + int inputTransitionCount() const; + bool hasInputTransitions(const ConnectableItem *parentItem, bool checkChildren = false) const; + bool hasOutputTransitions(const ConnectableItem *parentItem, bool checkChildren = false) const; + QPointF getInternalPosition(const TransitionItem *transition, TransitionItem::TransitionTargetType type) const; + + void updateOutputTransitions(); + void updateInputTransitions(); + void updateTransitions(bool allChildren = false); + void updateTransitionAttributes(bool allChildren = false); + + void addOverlappingItem(ConnectableItem *item); + void removeOverlappingItem(ConnectableItem *item); + void checkOverlapping() override; + + // Parent change + virtual void releaseFromParent(); + virtual void connectToParent(BaseItem *parentItem); + + qreal getOpacity(); + +protected: + void readUISpecifiedProperties(const ScxmlTag *tag) override; + void addTransitions(const ScxmlTag *tag); + void mousePressEvent(QGraphicsSceneMouseEvent *event) override; + void mouseMoveEvent(QGraphicsSceneMouseEvent *event) override; + void mouseReleaseEvent(QGraphicsSceneMouseEvent *event) override; + + virtual bool canStartTransition(ItemType type) const; + virtual void transitionCountChanged(); + virtual void transitionsChanged(); + +private: + void updateCornerPositions(); + void createCorners(); + void removeCorners(); + void updateShadowClipRegion(); + + QVector<TransitionItem*> m_outputTransitions; + QVector<TransitionItem*> m_inputTransitions; + QVector<CornerGrabberItem*> m_corners; + QVector<QuickTransitionItem*> m_quickTransitions; + HighlightItem *m_highlighItem = nullptr; + TransitionItem *m_newTransition = nullptr; + QPen m_selectedPen; + QBrush m_releasedFromParentBrush; + int m_minimumWidth = 120; + int m_minimumHeight = 100; + bool m_releasedFromParent = false; + int m_releasedIndex = -1; + QGraphicsItem *m_releasedParent = nullptr; + QPointF m_newTransitionStartedPoint; + QPainterPath m_shadowClipPath; + QPointF m_moveStartPoint; + bool m_moveMacroStarted = false; + QVector<ConnectableItem*> m_overlappedItems; +}; + +} // namespace PluginInterface +} // namespace ScxmlEditor |