Engauge Digitizer 2
Loading...
Searching...
No Matches
TransformationStateContext.cpp
1/******************************************************************************************************
2 * (C) 2014 markummitchell@github.com. This file is part of Engauge Digitizer, which is released *
3 * under GNU General Public License version 2 (GPLv2) or (at your option) any later version. See file *
4 * LICENSE or go to gnu.org/licenses for details. Distribution requires prior written permission. *
5 ******************************************************************************************************/
6
7#include "CmdMediator.h"
8#include "EngaugeAssert.h"
9#include "Logger.h"
10#include <QGraphicsScene>
11#include <QImage>
12#include "TransformationStateAbstractBase.h"
13#include "TransformationStateContext.h"
14#include "TransformationStateDefined.h"
15#include "TransformationStateUndefined.h"
16
18 bool isGnuplot) :
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}
27
28TransformationStateContext::~TransformationStateContext()
29{
30}
31
33{
34 return m_isGnuplot;
35}
36
38{
39 LOG4CPP_INFO_S ((*mainCat)) << "TransformationStateContext::resetOnLoad";
40
41 m_currentState = NUM_TRANSFORMATION_STATES;
42}
43
44void TransformationStateContext::triggerStateTransition (TransformationState transformationState,
45 CmdMediator &cmdMediator,
46 const Transformation &transformation,
47 const QString &selectedGraphCurve)
48{
49 LOG4CPP_INFO_S ((*mainCat)) << "TransformationStateContext::triggerStateTransition";
50
51 // Transition if we are not already at the requested state
52 if (transformationState != m_currentState) {
53
54 // End the current state if there is one
55 if (m_currentState != NUM_TRANSFORMATION_STATES) {
56 m_states[m_currentState]->end(cmdMediator,
57 transformation);
58 }
59
60 m_currentState = transformationState;
61
62 // Start the requested state
63 m_states[m_currentState]->begin(cmdMediator,
64 transformation,
65 selectedGraphCurve);
66 }
67}
68
70 const Transformation &transformation)
71{
72 LOG4CPP_INFO_S ((*mainCat)) << "TransformationStateContext::updateAxesChecker";
73
74 // Skip if there is no image so the state has not yet been set yet
75 if (m_currentState < NUM_TRANSFORMATION_STATES) {
76
77 m_states[m_currentState]->updateAxesChecker (cmdMediator,
78 transformation);
79
80 }
81}
Command queue stack.
Definition CmdMediator.h:24
void triggerStateTransition(TransformationState transformationState, CmdMediator &cmdMediator, const Transformation &transformation, const QString &selectedGraphCurve)
Trigger a state transition to be performed immediately.
TransformationStateContext(QGraphicsScene &scene, bool isGnuplot)
Single constructor.
void resetOnLoad()
Reset, when loading a document after the first, to same state that first document was at when loaded.
bool isGnuplot() const
Flag for gnuplot debug files.
void updateAxesChecker(CmdMediator &cmdMediator, const Transformation &transformation)
Apply the new DocumentModelAxesChecker.
Class to show transformation since transformation is defined.
Class to not show transformation since transformation is undefined.
Affine transformation between screen and graph coordinates, based on digitized axis points.