Engauge Digitizer  2
Public Member Functions | List of all members
TransformationStateContext Class Reference

Context class for transformation state machine. More...

#include <TransformationStateContext.h>

Collaboration diagram for TransformationStateContext:
Collaboration graph

Public Member Functions

 TransformationStateContext (QGraphicsScene &scene, bool isGnuplot)
 Single constructor. More...
 
virtual ~TransformationStateContext ()
 
bool isGnuplot () const
 Flag for gnuplot debug files. More...
 
void resetOnLoad ()
 Reset, when loading a document after the first, to same state that first document was at when loaded. More...
 
void triggerStateTransition (bool isGnuplot, TransformationState transformationState, CmdMediator &cmdMediator, const Transformation &transformation, const QString &selectedGraphCurve)
 Trigger a state transition to be performed immediately. More...
 
void updateAxesChecker (CmdMediator &cmdMediator, const Transformation &transformation)
 Apply the new DocumentModelAxesChecker. More...
 

Detailed Description

Context class for transformation state machine.

This removes some tricky state processing from MainWindow. Unlike typical state machines, the transitions are driven directly from the outside rather than indirectly by events that are processed by the states (this has triggerStateTransition rather than requestStateTransition)

Definition at line 21 of file TransformationStateContext.h.

Constructor & Destructor Documentation

◆ TransformationStateContext()

TransformationStateContext::TransformationStateContext ( QGraphicsScene &  scene,
bool  isGnuplot 
)

Single constructor.

Definition at line 17 of file TransformationStateContext.cpp.

18  :
19  m_isGnuplot (isGnuplot)
20 {
21  m_states.insert (TRANSFORMATION_STATE_DEFINED , new TransformationStateDefined (*this, scene));
22  m_states.insert (TRANSFORMATION_STATE_UNDEFINED, new TransformationStateUndefined (*this, scene));
23  ENGAUGE_ASSERT (m_states.size () == NUM_TRANSFORMATION_STATES);
24 
25  m_currentState = NUM_TRANSFORMATION_STATES; // Value that forces a transition right away
26 }
Class to show transformation since transformation is defined.
bool isGnuplot() const
Flag for gnuplot debug files.
Class to not show transformation since transformation is undefined.
#define ENGAUGE_ASSERT(cond)
Drop in replacement for Q_ASSERT if defined(QT_NO_DEBUG) && !defined(QT_FORCE_ASSERTS) define ENGAUGE...
Definition: EngaugeAssert.h:20

◆ ~TransformationStateContext()

TransformationStateContext::~TransformationStateContext ( )
virtual

Definition at line 28 of file TransformationStateContext.cpp.

29 {
30  qDeleteAll (m_states);
31 }

Member Function Documentation

◆ isGnuplot()

bool TransformationStateContext::isGnuplot ( ) const

Flag for gnuplot debug files.

Definition at line 33 of file TransformationStateContext.cpp.

34 {
35  return m_isGnuplot;
36 }

◆ resetOnLoad()

void TransformationStateContext::resetOnLoad ( )

Reset, when loading a document after the first, to same state that first document was at when loaded.

Definition at line 38 of file TransformationStateContext.cpp.

39 {
40  LOG4CPP_INFO_S ((*mainCat)) << "TransformationStateContext::resetOnLoad";
41 
42  m_currentState = NUM_TRANSFORMATION_STATES;
43 }
#define LOG4CPP_INFO_S(logger)
Definition: convenience.h:18
log4cpp::Category * mainCat
Definition: Logger.cpp:14

◆ triggerStateTransition()

void TransformationStateContext::triggerStateTransition ( bool  isGnuplot,
TransformationState  transformationState,
CmdMediator cmdMediator,
const Transformation transformation,
const QString &  selectedGraphCurve 
)

Trigger a state transition to be performed immediately.

Definition at line 45 of file TransformationStateContext.cpp.

50 {
51  LOG4CPP_INFO_S ((*mainCat)) << "TransformationStateContext::triggerStateTransition";
52 
53  // Transition even if we are already at the requested state (transformationState == m_currentState) to
54  // allow self-transitions. Those allow clean refreshing of the axis checker
55 
56  // End the current state if there is one
57  if (m_currentState != NUM_TRANSFORMATION_STATES) {
58  m_states[m_currentState]->end(cmdMediator,
59  transformation);
60  }
61 
62  m_currentState = transformationState;
63 
64  // Start the requested state
65  m_states[m_currentState]->begin(isGnuplot,
66  cmdMediator,
67  transformation,
68  selectedGraphCurve);
69 }
#define LOG4CPP_INFO_S(logger)
Definition: convenience.h:18
bool isGnuplot() const
Flag for gnuplot debug files.
log4cpp::Category * mainCat
Definition: Logger.cpp:14

◆ updateAxesChecker()

void TransformationStateContext::updateAxesChecker ( CmdMediator cmdMediator,
const Transformation transformation 
)

Apply the new DocumentModelAxesChecker.

Definition at line 71 of file TransformationStateContext.cpp.

73 {
74  LOG4CPP_INFO_S ((*mainCat)) << "TransformationStateContext::updateAxesChecker";
75 
76  // Skip if there is no image so the state has not yet been set yet
77  if (m_currentState < NUM_TRANSFORMATION_STATES) {
78 
79  m_states[m_currentState]->updateAxesChecker (cmdMediator,
80  transformation);
81 
82  }
83 }
#define LOG4CPP_INFO_S(logger)
Definition: convenience.h:18
log4cpp::Category * mainCat
Definition: Logger.cpp:14

The documentation for this class was generated from the following files: