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 
37 namespace 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 
53 namespace 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;
77 
78  void clearActiveSubstate();
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:
98  statechartmodel::SignalType signalType);
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>>;
133  QString instanceName;
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
armarx::StateItem::viewAll
void viewAll()
Definition: StateItem.cpp:447
armarx::StateItem::dragEnterEvent
void dragEnterEvent(QGraphicsSceneDragDropEvent *event) override
Definition: StateItem.cpp:920
armarx::StateItem::StateItem
StateItem(statechartmodel::StateInstancePtr state, QGraphicsItem *parent=0)
Definition: StateItem.cpp:50
armarx::StateItem::getInstanceName
QString getInstanceName() const
Definition: StateItem.cpp:761
armarx::StateItem::state
statechartmodel::StateInstancePtr state
Definition: StateItem.h:130
armarx::StateItem::setActiveSubstate
void setActiveSubstate(const QString &substateName)
Definition: StateItem.cpp:690
armarx::StateItem::getLevelOfDetail
LevelOfDetail getLevelOfDetail(float levelOfDetail) const override
Definition: StateItem.cpp:1069
armarx::StateItem::getStateInstance
statechartmodel::StateInstancePtr getStateInstance() const
Definition: StateItem.h:66
armarx::StateItem::itemBoundingBoxChanged
void itemBoundingBoxChanged(float oldSize, float size) override
Definition: StateItem.cpp:815
armarx::statechartmodel::TransitionPtr
std::shared_ptr< Transition > TransitionPtr
Definition: Transition.h:90
armarx::StateItem::subWidget
QWidget * subWidget
Definition: StateItem.h:128
armarx::StateItem::setActiveState
void setActiveState(bool active)
Definition: StateItem.cpp:777
armarx::StateItem::notifyTransitionsChanged
void notifyTransitionsChanged(statechartmodel::StateInstancePtr transition, statechartmodel::SignalType signalType)
Definition: StateItem.cpp:393
armarx::StateItem::getInstanceLevel
int getInstanceLevel() const
Definition: StateItem.cpp:646
armarx::MorphingItem
Definition: MorphingItem.h:39
armarx::StateItem::maxShownSubstateLevel
int maxShownSubstateLevel
Definition: StateItem.h:136
armarx::StateItem::~StateItem
~StateItem() override
Definition: StateItem.cpp:75
armarx::StateItem::hasAncestor
bool hasAncestor(statechartmodel::StatePtr state) const
Definition: StateItem.cpp:1033
armarx::StateItem::setRimColor
void setRimColor()
Definition: StateItem.cpp:590
armarx::statechartmodel::StateInstancePtr
std::shared_ptr< StateInstance > StateInstancePtr
Definition: StateInstance.h:146
armarx::StateItem::instanceName
QString instanceName
Definition: StateItem.h:133
armarx::StateItem::clearActiveSubstate
void clearActiveSubstate()
Definition: StateItem.cpp:701
armarx::StateItem::stateScene
StateScene * stateScene
Definition: StateItem.h:129
armarx::StateItem::transitionContextMenuRequested
void transitionContextMenuRequested(statechartmodel::TransitionCPtr transition, statechartmodel::StatePtr state, QPoint mouseScreenPos, QPointF mouseItemPos)
armarx::StateItem::setMaxShownSubstateLevel
void setMaxShownSubstateLevel(int value)
Definition: StateItem.cpp:676
armarx::StateItem::getFullStatePath
QString getFullStatePath() const
Definition: StateItem.cpp:711
armarx::StateItem::getMaxShownSubstateLevel
int getMaxShownSubstateLevel() const
Definition: StateItem.cpp:670
armarx::StateItem::itemChange
QVariant itemChange(GraphicsItemChange change, const QVariant &value) override
Definition: StateItem.cpp:845
armarx::StateItem::dropEvent
void dropEvent(QGraphicsSceneDragDropEvent *event) override
Definition: StateItem.cpp:946
armarx::StateItem::setStateColor
void setStateColor()
Definition: StateItem.cpp:533
armarx::StateItem::removeChildren
void removeChildren()
Definition: StateItem.cpp:623
armarx::StateItem::stateItemMoved
void stateItemMoved(QPointF newPosition)
cxxopts::value
std::shared_ptr< Value > value()
Definition: cxxopts.hpp:855
armarx::StateItem::stateItemBoundingBoxChanged
void stateItemBoundingBoxChanged(float newSquareBoundingBoxSize)
armarx::StateItem::TransitionMap
QMap< statechartmodel::TransitionCPtr, QPointer< TransitionItem > > TransitionMap
Definition: StateItem.h:134
MorphingItem.h
armarx::StateItem::subStates
StateInstanceItemMap subStates
Definition: StateItem.h:132
armarx::statechartmodel
Definition: XmlWriter.h:36
KITProsthesis::ProsthesisState::State
State
Definition: KITProstheticHandInterface.ice:32
armarx::StateItem::transitions
TransitionMap transitions
Definition: StateItem.h:135
armarx::StateItem::adjustPosition
QPointF adjustPosition(QPointF &newPos) override
Definition: StateItem.cpp:659
armarx::StateItem::forwardTransitionContextMenuRequested
void forwardTransitionContextMenuRequested(statechartmodel::TransitionCPtr transition, QPoint mouseScreenPos, QPointF mouseItemPos)
Definition: StateItem.cpp:410
armarx::StateItem::getTransitionItems
QVector< TransitionItem * > getTransitionItems() const
Definition: StateItem.cpp:746
armarx::StateItem::setup
void setup(QGraphicsItem *parent)
Definition: StateItem.cpp:465
armarx::StateItem::paint
void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget) override
Definition: StateItem.cpp:81
armarx::StateItem::notifyStateChanged
void notifyStateChanged(statechartmodel::SignalType signalType)
Definition: StateItem.cpp:207
armarx::StateItem::itemResizing
bool itemResizing(const QRectF &oldSize, QRectF &proposedSize) override
Definition: StateItem.cpp:784
option
#define option(type, fn)
armarx::StateItem::notifyTransitionChanged
void notifyTransitionChanged(statechartmodel::TransitionCPtr transition, statechartmodel::SignalType signalType)
Definition: StateItem.cpp:319
RoundRectItem
Definition: RoundRectItem.h:32
armarx::StateItem::stateContextMenuRequested
void stateContextMenuRequested(statechartmodel::StateInstancePtr stateInstace, QPoint mouseScreenPos, QPointF mouseItemPos)
armarx::statechartmodel::SignalType
SignalType
The SignalType enum.
Definition: SignalType.h:33
armarx::StateItem::itemMoved
void itemMoved(const QPointF &oldPos, const QPointF &newPos) override
Definition: StateItem.cpp:804
armarx::StateItem::transitionMoved
void transitionMoved(statechartmodel::TransitionCPtr transition, QPointF dropPoint)
Definition: StateItem.cpp:419
armarx::statechartmodel::TransitionCPtr
std::shared_ptr< const Transition > TransitionCPtr
Definition: Transition.h:91
armarx::StateItem::dragMoveEvent
void dragMoveEvent(QGraphicsSceneDragDropEvent *event) override
Definition: StateItem.cpp:940
armarx::statechartmodel::StatePtr
std::shared_ptr< State > StatePtr
Definition: State.h:48
armarx::StateItem
Definition: StateItem.h:58
armarx::StateItem::updateToolTip
void updateToolTip()
Definition: StateItem.cpp:604
armarx::LevelOfDetail
LevelOfDetail
Definition: MorphingItem.h:33
armarx::StateItem::active
bool active
Definition: StateItem.h:137
Logging.h
RoundRectItem.h
armarx::StateItem::hasDescendant
bool hasDescendant(statechartmodel::StatePtr state) const
Definition: StateItem.cpp:1059
armarx::StateScene
Definition: StateScene.h:52
armarx::StateItem::setInstanceName
void setInstanceName(const QString &value)
Definition: StateItem.cpp:767
armarx::StateItem::StateInstanceItemMap
QMap< statechartmodel::StateInstancePtr, QPointer< StateItem > > StateInstanceItemMap
Definition: StateItem.h:131
armarx::StateItem::adjustSize
void adjustSize()
Definition: StateItem.cpp:453
armarx
This file offers overloads of toIce() and fromIce() functions for STL container types.
Definition: ArmarXTimeserver.cpp:27
armarx::StateItem::connectSlots
void connectSlots()
Definition: StateItem.cpp:470
armarx::StateItem::getParentStateItem
StateItem * getParentStateItem() const
Definition: StateItem.cpp:724
armarx::StateItem::notifySubstateChanged
void notifySubstateChanged(statechartmodel::StateInstancePtr substate, statechartmodel::SignalType signalType)
Definition: StateItem.cpp:224
armarx::StateItem::contextMenuEvent
void contextMenuEvent(QGraphicsSceneContextMenuEvent *event) override
Definition: StateItem.cpp:826
armarx::StateItem::getSubstateItems
QVector< StateItem * > getSubstateItems() const
Definition: StateItem.cpp:731
armarx::StateItem::itemResized
void itemResized(const QRectF &oldSize, const QRectF &newSize) override
Definition: StateItem.cpp:795
armarx::StateItem::initialCreation
void initialCreation()
Definition: StateItem.cpp:507
armarx::StateItem::stateItemResized
void stateItemResized(QSizeF newSize)