void TutorialStateContext::createStates ()
{
  LOG4CPP_INFO_S ((*mainCat)) << "TutorialStateContext::createStates";

  // These states follow the same order as the TutorialState enumeration
  m_states.insert (TUTORIAL_STATE_AXIS_POINTS            , new TutorialStateAxisPoints            (*this));
  m_states.insert (TUTORIAL_STATE_CHECKLIST_WIZARD_LINES , new TutorialStateChecklistWizardLines  (*this));
  m_states.insert (TUTORIAL_STATE_CHECKLIST_WIZARD_POINTS, new TutorialStateChecklistWizardPoints (*this));
  m_states.insert (TUTORIAL_STATE_COLOR_FILTER           , new TutorialStateColorFilter           (*this));
  m_states.insert (TUTORIAL_STATE_CURVE_SELECTION        , new TutorialStateCurveSelection        (*this));
  m_states.insert (TUTORIAL_STATE_CURVE_TYPE             , new TutorialStateCurveType             (*this));
  m_states.insert (TUTORIAL_STATE_INTRODUCTION           , new TutorialStateIntroduction          (*this));
  m_states.insert (TUTORIAL_STATE_POINT_MATCH            , new TutorialStatePointMatch            (*this));
  m_states.insert (TUTORIAL_STATE_SEGMENT_FILL           , new TutorialStateSegmentFill           (*this));
  ENGAUGE_ASSERT (m_states.size () == NUM_TUTORIAL_STATES);

  m_currentState = NUM_TUTORIAL_STATES; // Value that forces a transition right away;
  requestImmediateStateTransition (TUTORIAL_STATE_INTRODUCTION);
  completeRequestedStateTransitionIfExists ();
}
DigitizeStateContext::DigitizeStateContext(MainWindow &mainWindow,
                                           QGraphicsView &view) :
  m_mainWindow (mainWindow),
  m_view (view),
  m_imageIsLoaded (false),
  m_cmdMediator (0)
{
  // These states follow the same order as the DigitizeState enumeration
  m_states.insert (DIGITIZE_STATE_AXIS        , new DigitizeStateAxis        (*this));
  m_states.insert (DIGITIZE_STATE_COLOR_PICKER, new DigitizeStateColorPicker (*this));
  m_states.insert (DIGITIZE_STATE_CURVE       , new DigitizeStateCurve       (*this));
  m_states.insert (DIGITIZE_STATE_EMPTY       , new DigitizeStateEmpty       (*this));
  m_states.insert (DIGITIZE_STATE_POINT_MATCH , new DigitizeStatePointMatch  (*this));
  m_states.insert (DIGITIZE_STATE_SCALE       , new DigitizeStateScale       (*this));
  m_states.insert (DIGITIZE_STATE_SEGMENT     , new DigitizeStateSegment     (*this));
  m_states.insert (DIGITIZE_STATE_SELECT      , new DigitizeStateSelect      (*this));
  ENGAUGE_ASSERT (m_states.size () == NUM_DIGITIZE_STATES);

  m_currentState = NUM_DIGITIZE_STATES; // Value that forces a transition right away
  requestImmediateStateTransition (DIGITIZE_STATE_EMPTY);
}