Engauge Digitizer 2
Loading...
Searching...
No Matches
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.
virtual ~TransformationStateContext ()
bool isGnuplot () const
 Flag for gnuplot debug files.
void resetOnLoad ()
 Reset, when loading a document after the first, to same state that first document was at when loaded.
void triggerStateTransition (bool isGnuplot, TransformationState transformationState, CmdMediator &cmdMediator, const Transformation &transformation, const QString &selectedGraphCurve)
 Trigger a state transition to be performed immediately.
void updateAxesChecker (CmdMediator &cmdMediator, const Transformation &transformation)
 Apply the new DocumentModelAxesChecker.

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}
#define ENGAUGE_ASSERT(cond)
Drop in replacement for Q_ASSERT.
bool isGnuplot() const
Flag for gnuplot debug files.

◆ ~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}
log4cpp::Category * mainCat
Definition Logger.cpp:14
#define LOG4CPP_INFO_S(logger)
Definition convenience.h:18

◆ 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}

◆ 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}

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