State.h
Go to the documentation of this file.
1 /*
2 * This file is part of ArmarX.
3 *
4 * ArmarX is free software; you can redistribute it and/or modify
5 * it under the terms of the GNU General Public License version 2 as
6 * published by the Free Software Foundation.
7 *
8 * ArmarX is distributed in the hope that it will be useful, but
9 * WITHOUT ANY WARRANTY; without even the implied warranty of
10 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11 * GNU General Public License for more details.
12 *
13 * You should have received a copy of the GNU General Public License
14 * along with this program. If not, see <http://www.gnu.org/licenses/>.
15 *
16 * @package ArmarX::
17 * @author Mirko Waechter ( mirko.waechter at kit dot edu)
18 * @date 2014
19 * @copyright http://www.gnu.org/licenses/gpl-2.0.txt
20 * GNU General Public License
21 */
22 
23 #pragma once
24 
25 #include <memory>
26 
27 #include <QMap>
28 #include <QMetaType>
29 #include <QObject>
30 
32 #include <ArmarXCore/interface/statechart/StatechartIce.h>
33 
35 
36 #include "Event.h"
37 #include "SignalType.h"
38 #include "StateParameter.h"
39 #include "Transition.h"
40 #include "stateinstance/EndState.h"
42 
44 {
45 
46  class State;
47  class DynamicRemoteStateClass;
48  using StatePtr = std::shared_ptr<State>;
49  using DynamicRemoteStateClassPtr = std::shared_ptr<DynamicRemoteStateClass>;
50  using TransitionList = QList<TransitionPtr>;
51  using CTransitionList = QList<TransitionCPtr>;
52  using StateInstanceMap = QMap<QString, StateInstancePtr>;
53 
54  class State : public QObject, public Logging, public std::enable_shared_from_this<State>
55  {
56  Q_OBJECT
57  public:
58  const QRectF margin;
59 
60  explicit State(const QString& uuid = "");
61  ~State() override;
62  /**
63  * Annotates the State object created by parseXml() before with references to other states.
64  */
65  void addReferences(const QMap<QString, armarx::statechartmodel::StatePtr>& uuidStateMap);
66 
67  QString
68  getStateName() const
69  {
70  return stateName;
71  }
72 
73  QString
74  getUUID() const
75  {
76  return UUID;
77  }
78 
79  const QString&
81  {
82  return description;
83  }
84 
85  const QList<QString>
86  getProxies() const
87  {
88  return proxies;
89  }
90 
91  // QString getPath() const { return filePath;}
92  const StateParameterMap&
94  {
95  return inputParameters;
96  }
97 
98  const StateParameterMap&
100  {
101  return localParameters;
102  }
103 
105 
106  const StateParameterMap&
108  {
109  return outputParameters;
110  }
111 
112  CTransitionList getTransitions(bool withStartTransition = false) const;
113 
114  const StateInstanceMap&
115  getSubstates() const
116  {
117  return substates;
118  }
119 
120  const StateInstancePtr&
122  {
123  return activeSubstate;
124  }
125 
128 
129  const EventList&
131  {
132  return outgoingTransitions;
133  }
134 
135  EventList getAllEvents() const;
136 
137  QSizeF
138  getSize() const
139  {
140  return size;
141  }
142 
143  virtual eStateType
144  getType() const
145  {
146  return eNormalState;
147  }
148 
149  bool
150  getDirty() const
151  {
152  return dirty;
153  }
154 
157  TransitionPtr findTransition(const QString& eventName,
158  const QString& transitionSourceName,
159  const QString& transitionDestinationName) const;
160  bool hasDescendant(statechartmodel::StatePtr state) const;
161 
162  static QString StateTypeToString(eStateType type);
163  void connectToSubclasses();
164 
165  bool isEditable() const;
166  signals:
167  /*
168  * @brief stateChanged
169  * name changed,
170  * parameters changed,
171  * promoted to endstate
172  * start substate changed
173  * @param state
174  * @param signalType
175  */
176  void stateChanged(statechartmodel::SignalType signalType);
177 
178  /*
179  * @brief substateChanged
180  * substate added
181  * substate removed
182  * substate moved
183  * substate resized
184  * substate instance name renamed
185  * substate
186  * @param substate
187  * @param signalType
188  */
190  statechartmodel::SignalType signalType);
191 
192  /*
193  * @brief transitionChanged
194  * transition added
195  * transition removed
196  * transition event changed
197  * mapping changed,
198  * target/source state changed
199  * support point changed/added/removed
200  * @param transition
201  * @param signalType
202  */
204  statechartmodel::SignalType signalType);
205  void outgoingTransitionChanged(const QString& eventName,
206  statechartmodel::StatePtr stateClass,
207  statechartmodel::SignalType signalType);
208 
209  void resized();
210  void dirtyStatusChanged(bool newStatus);
211 
212  /**
213  * @brief stateDeleted Signals that the destructor of this state was called.
214  */
215  void stateDeleted();
216 
217  public slots:
218  void setStateName(const QString& newName);
219  void setDescription(const QString& newDescription);
220  void setSize(const QSizeF& newSize);
221  void setSubstateAreaSize(const QSizeF& newSize);
222 
223  void setEditable(bool editable);
224 
225  // Substate slots
228  QString instanceName = "",
229  const QPointF& pos = QPointF());
230  StateInstancePtr addRemoteSubstate(StatePtr newRemoteSubstate,
231  const QString& remoteStateOffererName,
232  QString instanceName = "",
233  const QPointF& pos = QPointF());
235  addDynamicRemoteSubstate(StatePtr state, QString instanceName, const QPointF& pos);
236  StateInstancePtr addEndSubstate(const QString& endstateName,
237  const QString& eventName,
238  const QPointF& pos = QPointF());
239 
240  bool renameSubstate(QString oldName, QString newName);
241  bool removeSubstate(StateInstancePtr substate);
242  bool removeSubstate(QString stateInstanceName);
243  StateInstancePtr replaceSubstate(QString stateInstanceName, StateInstancePtr newInstance);
244  void replaceSubstates(StateInstanceMap newSubstateList);
245 
246  void setActiveSubstate(StateInstancePtr newActiveState);
247  void clearActiveSubstates();
248  void setStartState(StateInstancePtr newStartState);
249  void setStartStateInputMapping(const ParameterMappingList& newStartStateInputMapping);
250 
251  // Parameter slots
252  void setInputParameters(const StateParameterMap& newInputParameters);
253  void setLocalParameters(const StateParameterMap& newLocalParameters);
254  void setOutputParameters(const StateParameterMap& newOutputParameters);
255 
256  // Transition slots
257  void addTransition(TransitionPtr newTransition);
258  void setTransitionMapping(TransitionCPtr transition,
259  const ParameterMappingList& mappingToNextStateInput,
260  const ParameterMappingList& mappingToParentLocal,
261  const ParameterMappingList& mappingToParentOutput);
263  const SupportPoints& points,
264  const QPointPtr& labelCenterPosition = QPointPtr(),
265  const FloatPtr& labelFontPointSize = FloatPtr());
266  void setTransitionActivated(TransitionCPtr transition);
267  void setTransitionUserCodeEnabled(TransitionCPtr transition, bool enabled = true);
268  void addDetachedTransition(const QString& eventName, StateInstancePtr sourceState);
270  StateInstancePtr newDest,
271  QPointList newSupportPoints = QPointList());
272  void detachTransitionDestination(TransitionCPtr transition, QPointF floatingEndPoint);
274  void bendTransition(TransitionCPtr transition, int u, int v);
275  void replaceTransitions(TransitionList newTransitionList);
276  void addSupportPoint(TransitionCPtr transition, QPointF supportPoint);
277 
278  bool removeTransition(TransitionPtr transition);
279 
280 
281  void setOutgoingEvents(const EventList& outgoingEvents);
282  void updateTransition(const QString& eventName,
283  statechartmodel::StatePtr stateClass,
284  statechartmodel::SignalType signalType);
285 
286  private slots:
287  void setDirty(statechartmodel::SignalType signalType);
288  void setDirty(statechartmodel::StateInstancePtr substate,
289  statechartmodel::SignalType signalType);
290  void setDirty(statechartmodel::TransitionCPtr transition,
291  statechartmodel::SignalType signalType);
292  void setDirty(bool dirty);
293 
294  protected:
295  QList<StateInstancePtr> getInstances(statechartmodel::StatePtr stateClass) const;
297  TransitionPtr getTransition(const QString& eventName,
298  StateInstancePtr sourceInstance) const;
299  bool checkTransition(TransitionPtr transition) const;
300  bool checkSubstate(StatePtr newState) const;
302  QString stateName;
303  QString description;
304 
305  QList<QString> proxies;
306 
310 
313 
314  TransitionList transitions; /* Transition to start state has sourceState == 0 */
315  // QString filePath;?
316  QString UUID;
317  QString cppClassName;
318 
319  QSizeF size;
320  bool dirty;
321  bool editable;
322 
323  private:
324  bool active;
325 
326  void addDetachedTransitions(StateInstancePtr instance);
327  QPointF calcDetachedTransitionLastControlPoint(StateInstancePtr instance) const;
328  QPointF calcDetachedTransitionEndPoint(StateInstancePtr instance,
329  const QPointF& lastControlPoint) const;
330  friend class StateInstance;
331  };
332 } // namespace armarx::statechartmodel
333 Q_DECLARE_METATYPE(armarx::statechartmodel::StatePtr)
EndState.h
armarx::statechartmodel::State::activeSubstate
StateInstancePtr activeSubstate
Definition: State.h:312
armarx::statechartmodel::DynamicRemoteStateClassPtr
std::shared_ptr< DynamicRemoteStateClass > DynamicRemoteStateClassPtr
Definition: DynamicRemoteStateClass.h:40
armarx::statechartmodel::State::stateDeleted
void stateDeleted()
stateDeleted Signals that the destructor of this state was called.
armarx::statechartmodel::StateInstance
Definition: StateInstance.h:43
armarx::statechartmodel::State::State
State(const QString &uuid="")
Definition: State.cpp:38
armarx::statechartmodel::State::addRemoteSubstate
StateInstancePtr addRemoteSubstate(StatePtr newRemoteSubstate, const QString &remoteStateOffererName, QString instanceName="", const QPointF &pos=QPointF())
Definition: State.cpp:319
armarx::QPointList
QList< QPointF > QPointList
Definition: Transition.h:38
armarx::statechartmodel::State::editable
bool editable
Definition: State.h:321
armarx::statechartmodel::State::transitionChanged
void transitionChanged(statechartmodel::TransitionCPtr transition, statechartmodel::SignalType signalType)
armarx::statechartmodel::State::replaceSubstate
StateInstancePtr replaceSubstate(QString stateInstanceName, StateInstancePtr newInstance)
Definition: State.cpp:607
armarx::statechartmodel::State::description
QString description
Definition: State.h:303
armarx::statechartmodel::State::bendTransition
void bendTransition(TransitionCPtr transition, int u, int v)
Definition: State.cpp:1381
armarx::statechartmodel::State::setTransitionMapping
void setTransitionMapping(TransitionCPtr transition, const ParameterMappingList &mappingToNextStateInput, const ParameterMappingList &mappingToParentLocal, const ParameterMappingList &mappingToParentOutput)
Definition: State.cpp:754
armarx::statechartmodel::State::getStartState
StateInstancePtr getStartState() const
Definition: State.cpp:136
armarx::statechartmodel::State::setStartState
void setStartState(StateInstancePtr newStartState)
Definition: State.cpp:452
armarx::statechartmodel::State::getDirty
bool getDirty() const
Definition: State.h:150
armarx::statechartmodel::State::setSize
void setSize(const QSizeF &newSize)
Definition: State.cpp:244
armarx::statechartmodel::State::clearActiveSubstates
void clearActiveSubstates()
Definition: State.cpp:679
armarx::statechartmodel::State::addReferences
void addReferences(const QMap< QString, armarx::statechartmodel::StatePtr > &uuidStateMap)
Annotates the State object created by parseXml() before with references to other states.
Definition: State.cpp:70
armarx::statechartmodel::State::localParameters
StateParameterMap localParameters
Definition: State.h:308
armarx::statechartmodel::TransitionPtr
std::shared_ptr< Transition > TransitionPtr
Definition: Transition.h:90
armarx::FloatPtr
std::shared_ptr< float > FloatPtr
Definition: Transition.h:39
SignalType.h
armarx::statechartmodel::State::getInputParameters
const StateParameterMap & getInputParameters() const
Definition: State.h:93
armarx::statechartmodel::State::addEndSubstate
StateInstancePtr addEndSubstate(const QString &endstateName, const QString &eventName, const QPointF &pos=QPointF())
Definition: State.cpp:408
armarx::statechartmodel::EventList
QList< EventPtr > EventList
Definition: XmlWriter.h:47
armarx::statechartmodel::State::resized
void resized()
armarx::statechartmodel::State::getOutputParameters
const StateParameterMap & getOutputParameters() const
Definition: State.h:107
armarx::statechartmodel::State::addDetachedTransition
void addDetachedTransition(const QString &eventName, StateInstancePtr sourceState)
Definition: State.cpp:835
armarx::statechartmodel::State::dirty
bool dirty
Definition: State.h:320
armarx::statechartmodel::State::StateTypeToString
static QString StateTypeToString(eStateType type)
Definition: State.cpp:1294
armarx::statechartmodel::State::updateTransitionDestination
void updateTransitionDestination(TransitionCPtr transition, StateInstancePtr newDest, QPointList newSupportPoints=QPointList())
Definition: State.cpp:854
armarx::statechartmodel::State::updateTransition
void updateTransition(const QString &eventName, statechartmodel::StatePtr stateClass, statechartmodel::SignalType signalType)
Definition: State.cpp:1057
armarx::statechartmodel::State::getOutgoingEvents
const EventList & getOutgoingEvents() const
Definition: State.h:130
armarx::statechartmodel::State::removeTransition
bool removeTransition(TransitionPtr transition)
Definition: State.cpp:1166
armarx::statechartmodel::State::checkTransition
bool checkTransition(TransitionPtr transition) const
Definition: State.cpp:1184
armarx::statechartmodel::State::getTransition
TransitionPtr getTransition(const QString &eventName, StateInstancePtr sourceInstance) const
Definition: State.cpp:1153
armarx::statechartmodel::State::setLocalParameters
void setLocalParameters(const StateParameterMap &newLocalParameters)
Definition: State.cpp:715
armarx::statechartmodel::State::getTransitions
CTransitionList getTransitions(bool withStartTransition=false) const
Definition: State.cpp:108
armarx::statechartmodel::State::transitions
TransitionList transitions
Definition: State.h:314
armarx::statechartmodel::State::margin
const QRectF margin
Definition: State.h:58
armarx::statechartmodel::State::getDescription
const QString & getDescription() const
Definition: State.h:80
armarx::statechartmodel::StateInstancePtr
std::shared_ptr< StateInstance > StateInstancePtr
Definition: StateInstance.h:146
armarx::statechartmodel::State::getInputAndLocalParameters
const StateParameterMap getInputAndLocalParameters() const
Definition: State.cpp:95
armarx::QPointPtr
std::shared_ptr< QPointF > QPointPtr
Definition: Transition.h:40
armarx::statechartmodel::State::hasDescendant
bool hasDescendant(statechartmodel::StatePtr state) const
Definition: State.cpp:1261
armarx::statechartmodel::StateInstanceMap
QMap< QString, StateInstancePtr > StateInstanceMap
Definition: State.h:52
armarx::statechartmodel::State::checkSubstate
bool checkSubstate(StatePtr newState) const
Definition: State.cpp:1218
armarx::statechartmodel::State::outputParameters
StateParameterMap outputParameters
Definition: State.h:309
armarx::statechartmodel::State::detachTransitionDestination
void detachTransitionDestination(TransitionCPtr transition, QPointF floatingEndPoint)
Definition: State.cpp:899
armarx::statechartmodel::State::setStateName
void setStateName(const QString &newName)
Definition: State.cpp:122
armarx::statechartmodel::State::setDescription
void setDescription(const QString &newDescription)
Definition: State.cpp:230
armarx::statechartmodel::State::renameSubstate
bool renameSubstate(QString oldName, QString newName)
Definition: State.cpp:499
armarx::statechartmodel::State::dirtyStatusChanged
void dirtyStatusChanged(bool newStatus)
armarx::statechartmodel::State::outgoingTransitionChanged
void outgoingTransitionChanged(const QString &eventName, statechartmodel::StatePtr stateClass, statechartmodel::SignalType signalType)
armarx::statechartmodel::StateParameterMap
QMap< QString, StateParameterPtr > StateParameterMap
Definition: StateParameter.h:46
armarx::statechartmodel
Definition: XmlWriter.h:36
armarx::statechartmodel::State::getInstances
QList< StateInstancePtr > getInstances(statechartmodel::StatePtr stateClass) const
Definition: State.cpp:1137
KITProsthesis::ProsthesisState::State
State
Definition: KITProstheticHandInterface.ice:32
StateParameter.h
armarx::statechartmodel::State::removeSubstate
bool removeSubstate(StateInstancePtr substate)
Definition: State.cpp:535
enabled
std::atomic< bool > * enabled
Definition: RemoteGuiWidgetController.cpp:75
armarx::statechartmodel::State
Definition: State.h:54
armarx::statechartmodel::State::addDynamicRemoteSubstate
StateInstancePtr addDynamicRemoteSubstate(StatePtr state, QString instanceName, const QPointF &pos)
Definition: State.cpp:363
armarx::statechartmodel::State::getStartTransition
TransitionCPtr getStartTransition() const
Definition: State.cpp:178
armarx::statechartmodel::State::getProxies
const QList< QString > getProxies() const
Definition: State.h:86
armarx::statechartmodel::State::size
QSizeF size
Definition: State.h:319
armarx::statechartmodel::State::findTransition
TransitionPtr findTransition(TransitionCPtr t) const
Definition: State.cpp:1230
armarx::statechartmodel::State::setTransitionActivated
void setTransitionActivated(TransitionCPtr transition)
Definition: State.cpp:813
armarx::statechartmodel::State::setActiveSubstate
void setActiveSubstate(StateInstancePtr newActiveState)
Definition: State.cpp:655
armarx::statechartmodel::State::getSubstates
const StateInstanceMap & getSubstates() const
Definition: State.h:115
armarx::statechartmodel::State::addTransition
void addTransition(TransitionPtr newTransition)
Definition: State.cpp:742
armarx::statechartmodel::State::getActiveSubstate
const StateInstancePtr & getActiveSubstate() const
Definition: State.h:121
armarx::statechartmodel::State::setOutputParameters
void setOutputParameters(const StateParameterMap &newOutputParameters)
Definition: State.cpp:734
armarx::statechartmodel::State::outgoingTransitions
EventList outgoingTransitions
Definition: State.h:301
armarx::statechartmodel::State::getAllEvents
EventList getAllEvents() const
Definition: State.cpp:150
StateInstance.h
armarx::statechartmodel::CTransitionList
QList< TransitionCPtr > CTransitionList
Definition: State.h:51
armarx::statechartmodel::State::getType
virtual eStateType getType() const
Definition: State.h:144
Transition.h
ExpressionException.h
armarx::statechartmodel::TransitionList
QList< TransitionPtr > TransitionList
Definition: State.h:50
armarx::statechartmodel::State::getStateName
QString getStateName() const
Definition: State.h:68
Event.h
armarx::ctrlutil::v
double v(double t, double v0, double a0, double j)
Definition: CtrlUtil.h:39
armarx::statechartmodel::State::setOutgoingEvents
void setOutgoingEvents(const EventList &outgoingEvents)
Definition: State.cpp:988
armarx::statechartmodel::State::replaceTransitions
void replaceTransitions(TransitionList newTransitionList)
Definition: State.cpp:931
armarx::statechartmodel::State::getLocalParameters
const StateParameterMap & getLocalParameters() const
Definition: State.h:99
armarx::Logging
Base Class for all Logging classes.
Definition: Logging.h:239
ArmarXWidgetController.h
armarx::statechartmodel::State::addSubstate
StateInstancePtr addSubstate(StateInstancePtr stateInstance)
Definition: State.cpp:427
armarx::statechartmodel::State::getStartStateInputMapping
ParameterMappingList getStartStateInputMapping() const
Definition: State.cpp:143
armarx::statechartmodel::State::proxies
QList< QString > proxies
Definition: State.h:305
armarx::statechartmodel::State::UUID
QString UUID
Definition: State.h:316
armarx::statechartmodel::SignalType
SignalType
The SignalType enum.
Definition: SignalType.h:33
armarx::statechartmodel::State::connectToSubclasses
void connectToSubclasses()
Definition: State.cpp:206
armarx::statechartmodel::TransitionCPtr
std::shared_ptr< const Transition > TransitionCPtr
Definition: Transition.h:91
armarx::statechartmodel::State::setTransitionSupportPoints
void setTransitionSupportPoints(statechartmodel::TransitionCPtr transition, const SupportPoints &points, const QPointPtr &labelCenterPosition=QPointPtr(), const FloatPtr &labelFontPointSize=FloatPtr())
Definition: State.cpp:775
armarx::statechartmodel::State::cppClassName
QString cppClassName
Definition: State.h:317
armarx::statechartmodel::ParameterMappingList
QList< ParameterMappingPtr > ParameterMappingList
Definition: XmlWriter.h:49
armarx::statechartmodel::StatePtr
std::shared_ptr< State > StatePtr
Definition: State.h:48
armarx::statechartmodel::State::stateName
QString stateName
Definition: State.h:302
armarx::statechartmodel::State::setEditable
void setEditable(bool editable)
Definition: State.cpp:269
armarx::statechartmodel::State::inputParameters
StateParameterMap inputParameters
Definition: State.h:307
armarx::statechartmodel::State::addSupportPoint
void addSupportPoint(TransitionCPtr transition, QPointF supportPoint)
Definition: State.cpp:950
armarx::statechartmodel::State::stateChanged
void stateChanged(statechartmodel::SignalType signalType)
armarx::statechartmodel::State::setStartStateInputMapping
void setStartStateInputMapping(const ParameterMappingList &newStartStateInputMapping)
Definition: State.cpp:477
armarx::statechartmodel::State::~State
~State() override
Definition: State.cpp:64
armarx::statechartmodel::State::setTransitionUserCodeEnabled
void setTransitionUserCodeEnabled(TransitionCPtr transition, bool enabled=true)
Definition: State.cpp:819
armarx::SupportPoints
Definition: Transition.h:42
armarx::statechartmodel::State::isEditable
bool isEditable() const
Definition: State.cpp:224
armarx::statechartmodel::State::substateChanged
void substateChanged(statechartmodel::StateInstancePtr substate, statechartmodel::SignalType signalType)
armarx::statechartmodel::State::replaceSubstates
void replaceSubstates(StateInstanceMap newSubstateList)
Definition: State.cpp:627
armarx::statechartmodel::State::setInputParameters
void setInputParameters(const StateParameterMap &newInputParameters)
Definition: State.cpp:696
armarx::statechartmodel::State::substates
StateInstanceMap substates
Definition: State.h:311
armarx::statechartmodel::State::getUUID
QString getUUID() const
Definition: State.h:74
armarx::statechartmodel::State::getSize
QSizeF getSize() const
Definition: State.h:138
armarx::statechartmodel::State::setSubstateAreaSize
void setSubstateAreaSize(const QSizeF &newSize)
Definition: State.cpp:261