StateItem.h
Go to the documentation of this file.
1/*
2 * This file is part of ArmarX.
3 *
4 * Copyright (C) 2011-2016, High Performance Humanoid Technologies (H2T), Karlsruhe Institute of Technology (KIT), all rights reserved.
5 *
6 * ArmarX is free software; you can redistribute it and/or modify
7 * it under the terms of the GNU General Public License version 2 as
8 * published by the Free Software Foundation.
9 *
10 * ArmarX is distributed in the hope that it will be useful, but
11 * WITHOUT ANY WARRANTY; without even the implied warranty of
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 * GNU General Public License for more details.
14 *
15 * You should have received a copy of the GNU General Public License
16 * along with this program. If not, see <http://www.gnu.org/licenses/>.
17 *
18 * @package
19 * @author
20 * @date
21 * @copyright http://www.gnu.org/licenses/gpl-2.0.txt
22 * GNU General Public License
23 */
24#pragma once
25
26#include <memory>
27
28#include <QGraphicsWidget>
29#include <QPointer>
30
32
33#include "../model/SignalType.h"
34#include "MorphingItem.h"
35#include "RoundRectItem.h"
36
37namespace armarx
38{
39 class StateScene;
40}
41
43{
44 class State;
45 using StatePtr = std::shared_ptr<State>;
46 class Transition;
47 using TransitionPtr = std::shared_ptr<Transition>;
48 using TransitionCPtr = std::shared_ptr<const Transition>;
49 class StateInstance;
50 using StateInstancePtr = std::shared_ptr<StateInstance>;
51} // namespace armarx::statechartmodel
52
53namespace armarx
54{
55 class StateItem;
56 class TransitionItem;
57
58 class StateItem : public RoundRectItem, public MorphingItem
59 {
60 Q_OBJECT
61 public:
62 explicit StateItem(statechartmodel::StateInstancePtr state, QGraphicsItem* parent = 0);
63 ~StateItem() override;
64
67 {
68 return state;
69 }
70
71 QString getInstanceName() const;
72
75 int getMaxShownSubstateLevel() const;
76 void setMaxShownSubstateLevel(int value);
77
80
81 QString getFullStatePath() const;
82 QVector<StateItem*> getSubstateItems() const;
83 QVector<TransitionItem*> getTransitionItems() const;
84 signals:
85 void stateItemResized(QSizeF newSize);
86 void stateItemMoved(QPointF newPosition);
87 void stateItemBoundingBoxChanged(float newSquareBoundingBoxSize);
89 QPoint mouseScreenPos,
90 QPointF mouseItemPos);
93 QPoint mouseScreenPos,
94 QPointF mouseItemPos);
95 public slots:
100 statechartmodel::SignalType signalType);
102 statechartmodel::SignalType signalType);
103
105 QPoint mouseScreenPos,
106 QPointF mouseItemPos);
107 void transitionMoved(statechartmodel::TransitionCPtr transition, QPointF dropPoint);
108 void viewAll();
109 void adjustSize();
110 void setInstanceName(const QString& value);
111 void setActiveState(bool active);
112 void setActiveSubstate(const QString& substateName);
113
114
115 protected:
116 void setup(QGraphicsItem* parent);
117 void connectSlots();
118 void initialCreation();
119 void setStateColor();
120 void setRimColor();
121 void updateToolTip();
122 void removeChildren();
123 int getInstanceLevel() const;
124 QPointF adjustPosition(QPointF& newPos) override;
125
126 // Ui_StateWidget ui;
127 // QGraphicsProxyWidget* prx;
128 QWidget* subWidget;
131 using StateInstanceItemMap = QMap<statechartmodel::StateInstancePtr, QPointer<StateItem>>;
134 using TransitionMap = QMap<statechartmodel::TransitionCPtr, QPointer<TransitionItem>>;
137 bool active = false;
138
139
140 // RoundRectItem interface
141 protected:
142 bool itemResizing(const QRectF& oldSize, QRectF& proposedSize) override;
143 void itemResized(const QRectF& oldSize, const QRectF& newSize) override;
144 void itemMoved(const QPointF& oldPos, const QPointF& newPos) override;
145 void itemBoundingBoxChanged(float oldSize, float size) override;
146
147 void
148 paint(QPainter* painter, const QStyleOptionGraphicsItem* option, QWidget* widget) override;
149
150 // QGraphicsItem interface
151 protected:
152 void contextMenuEvent(QGraphicsSceneContextMenuEvent* event) override;
153
154 // QGraphicsItem interface
155 protected:
156 QVariant itemChange(GraphicsItemChange change, const QVariant& value) override;
157
158 // QGraphicsItem interface
159 protected:
160 void dragEnterEvent(QGraphicsSceneDragDropEvent* event) override;
161 void dragMoveEvent(QGraphicsSceneDragDropEvent* event) override;
162 void dropEvent(QGraphicsSceneDragDropEvent* event) override;
163
164 // MorphingItem interface
165 public:
166 LevelOfDetail getLevelOfDetail(float levelOfDetail) const override;
167 };
168
169} // namespace armarx
#define option(type, fn)
RoundRectItem(const QRectF &bounds, const QColor &color, QGraphicsItem *parent=0)
MorphingItem(QGraphicsItem *derivedItem)
void stateItemBoundingBoxChanged(float newSquareBoundingBoxSize)
void transitionMoved(statechartmodel::TransitionCPtr transition, QPointF dropPoint)
void notifyStateChanged(statechartmodel::SignalType signalType)
void itemResized(const QRectF &oldSize, const QRectF &newSize) override
void dragMoveEvent(QGraphicsSceneDragDropEvent *event) override
QPointF adjustPosition(QPointF &newPos) override
QString getInstanceName() const
bool hasDescendant(statechartmodel::StatePtr state) const
void setActiveState(bool active)
QString getFullStatePath() const
void contextMenuEvent(QGraphicsSceneContextMenuEvent *event) override
QString instanceName
Definition StateItem.h:133
LevelOfDetail getLevelOfDetail(float levelOfDetail) const override
void notifyTransitionChanged(statechartmodel::TransitionCPtr transition, statechartmodel::SignalType signalType)
QWidget * subWidget
Definition StateItem.h:128
void transitionContextMenuRequested(statechartmodel::TransitionCPtr transition, statechartmodel::StatePtr state, QPoint mouseScreenPos, QPointF mouseItemPos)
TransitionMap transitions
Definition StateItem.h:135
bool hasAncestor(statechartmodel::StatePtr state) const
QMap< statechartmodel::StateInstancePtr, QPointer< StateItem > > StateInstanceItemMap
Definition StateItem.h:131
int getMaxShownSubstateLevel() const
void forwardTransitionContextMenuRequested(statechartmodel::TransitionCPtr transition, QPoint mouseScreenPos, QPointF mouseItemPos)
QVector< StateItem * > getSubstateItems() const
statechartmodel::StateInstancePtr getStateInstance() const
Definition StateItem.h:66
QVector< TransitionItem * > getTransitionItems() const
void notifySubstateChanged(statechartmodel::StateInstancePtr substate, statechartmodel::SignalType signalType)
void dragEnterEvent(QGraphicsSceneDragDropEvent *event) override
void stateItemResized(QSizeF newSize)
void setInstanceName(const QString &value)
void itemBoundingBoxChanged(float oldSize, float size) override
void itemMoved(const QPointF &oldPos, const QPointF &newPos) override
StateItem * getParentStateItem() const
void setup(QGraphicsItem *parent)
void stateItemMoved(QPointF newPosition)
void clearActiveSubstate()
int getInstanceLevel() const
void stateContextMenuRequested(statechartmodel::StateInstancePtr stateInstace, QPoint mouseScreenPos, QPointF mouseItemPos)
statechartmodel::StateInstancePtr state
Definition StateItem.h:130
void dropEvent(QGraphicsSceneDragDropEvent *event) override
~StateItem() override
Definition StateItem.cpp:75
void setMaxShownSubstateLevel(int value)
QVariant itemChange(GraphicsItemChange change, const QVariant &value) override
QMap< statechartmodel::TransitionCPtr, QPointer< TransitionItem > > TransitionMap
Definition StateItem.h:134
void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget) override
Definition StateItem.cpp:81
StateItem(statechartmodel::StateInstancePtr state, QGraphicsItem *parent=0)
Definition StateItem.cpp:50
bool itemResizing(const QRectF &oldSize, QRectF &proposedSize) override
StateInstanceItemMap subStates
Definition StateItem.h:132
void notifyTransitionsChanged(statechartmodel::StateInstancePtr transition, statechartmodel::SignalType signalType)
StateScene * stateScene
Definition StateItem.h:129
void setActiveSubstate(const QString &substateName)
std::shared_ptr< State > StatePtr
Definition State.h:48
std::shared_ptr< StateInstance > StateInstancePtr
std::shared_ptr< const Transition > TransitionCPtr
Definition Transition.h:91
SignalType
The SignalType enum.
Definition SignalType.h:34
std::shared_ptr< Transition > TransitionPtr
Definition Transition.h:90
This file offers overloads of toIce() and fromIce() functions for STL container types.