Skip to content
Snippets Groups Projects
Select Git revision
  • bd0800a5cfa24bae8576ac19410a5d0a36edc6b5
  • main default protected
  • review_milestone_2
3 results

find_representative_transcripts.py

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