Skip to content
Snippets Groups Projects
Select Git revision
  • 33c13a0fc08bb901ce534debd55db5fbaf02d7d4
  • master default protected
  • develop protected
  • conda
  • 3.6.0
  • 3.5.0
  • 3.4.2
  • 3.4.1
  • 3.4.0
  • 3.4.0-rc2
  • 3.4.0-rc
  • 3.3.1
  • 3.3.1-rc
  • 3.3.0
  • 3.3.0-rc2
  • 3.3.0-rc
  • 3.2.1
  • 3.2.1-rc
  • 3.2.0
  • 3.2.0-rc
  • 3.1.1
  • 3.1.1-rc2
  • 3.1.1-rc
  • 3.1.0
24 results

wrap_modelling.cc

Blame
  • state.cc 1.84 KiB
    #include <cassert>
    #include "transition.hh"
    #include "state.hh"
    #include "state_machine.hh"
    
    namespace ost { namespace gui {
    
    State::State():
      QObject(),
      mouse_event_transitions_(),
      key_event_transitions_(),
      automatic_transitions_()
    {
    }
    void State::addTransition(SignalTransition* transition)
    {
      transition->setParent(this);
    }
    void State::addTransition(MouseEventTransition* transition)
    {
      transition->setParent(this);
      mouse_event_transitions_.append(transition);
    }
    void State::addTransition(KeyEventTransition* transition)
    {
      transition->setParent(this);
      key_event_transitions_.append(transition);
    }
    void State::addTransition(AutomaticTransition* transition)
    {
      transition->setParent(this);
      automatic_transitions_.append(transition);
    }
    bool State::isActive()
    {
      return parent() && dynamic_cast<StateMachine*>(parent())->isActive(this);
    }
    void State::setActive()
    {
      assert(parent());
      dynamic_cast<StateMachine*>(parent())->setActive(this);
    }
    
    bool State::checkEvent(QKeyEvent* event)
    {
      for(QList<KeyEventTransition*>::iterator it=key_event_transitions_.begin();it!=key_event_transitions_.end();++it){
        std::pair<bool,bool> pair=(*it)->checkEvent(event);
        if(pair.first){
          return pair.second;
        }
      }
      return false;
    }
    
    bool State::checkAutomaticTransitions()
    {
      for(QList<AutomaticTransition*>::iterator it=automatic_transitions_.begin();it!=automatic_transitions_.end();++it){
        if((*it)->checkTransition()){
          return true;
        }
      }
      return false;
    }
    
    bool State::checkEvent(QMouseEvent* event)
    {
      for(QList<MouseEventTransition*>::iterator it=mouse_event_transitions_.begin();it!=mouse_event_transitions_.end();++it){
        std::pair<bool,bool> pair=(*it)->checkEvent(event);
        if(pair.first){
          return pair.second;
        }
      }
      return false;
    }
    void State::onEntry()
    {
      emit entered();
    }
    void State::onExit()
    {
      emit exited();
    }
    
    }}//ns