Engauge Digitizer 2
Loading...
Searching...
No Matches
Public Member Functions | List of all members
DigitizeStateContext Class Reference

Container for all DigitizeStateAbstractBase subclasses. This functions as the context class in a standard state machine implementation. More...

#include <DigitizeStateContext.h>

Inheritance diagram for DigitizeStateContext:
Inheritance graph
Collaboration diagram for DigitizeStateContext:
Collaboration graph

Public Member Functions

 DigitizeStateContext (MainWindow &mainWindow, QGraphicsView &view, bool isGnuplot)
 Single constructor.
 
virtual ~DigitizeStateContext ()
 
QString activeCurve () const
 Curve name for active Curve. This can include AXIS_CURVE_NAME, and empty string.
 
void appendNewCmd (CmdMediator *cmdMediator, QUndoCommand *cmd)
 Append just-created QUndoCommand to command stack. This is called from DigitizeStateAbstractBase subclasses.
 
bool canPaste (const Transformation &transformation, const QSize &viewSize) const
 Return true if there is good data in the clipboard for pasting, and that operation is compatible with the current state.
 
bool guidelinesAreSelectable () const
 Enable/disable guidelines according to state.
 
void handleContextMenuEventAxis (CmdMediator *cmdMediator, const QString &pointIdentifier)
 See DigitizeStateAbstractBase::handleContextMenuEventAxis.
 
void handleContextMenuEventGraph (CmdMediator *cmdMediator, const QStringList &pointIdentifiers)
 See DigitizeStateAbstractBase::handleContextMenuEventGraph.
 
void handleCurveChange (CmdMediator *cmdMediator)
 See DigitizeStateAbstractBase::handleCurveChange.
 
void handleKeyPress (CmdMediator *cmdMediator, Qt::Key key, bool atLeastOneSelectedItem)
 See DigitizeStateAbstractBase::handleKeyPress.
 
void handleMouseMove (CmdMediator *cmdMediator, QPointF pos)
 See DigitizeStateAbstractBase::handleMouseMove.
 
void handleMousePress (CmdMediator *cmdMediator, QPointF pos)
 See DigitizeStateAbstractBase::handleMousePress.
 
void handleMouseRelease (CmdMediator *cmdMediator, QPointF pos)
 See DigitizeStateAbstractBase::handleMouseRelease.
 
bool isGnuplot () const
 Get method for gnuplot flag.
 
MainWindowmainWindow ()
 Reference to the MainWindow, without const.
 
const MainWindowmainWindow () const
 Reference to the MainWindow, with const.
 
void requestDelayedStateTransition (DigitizeState digitizeState)
 Initiate state transition to be performed later, when DigitizeState is off the stack.
 
void requestImmediateStateTransition (CmdMediator *cmdMediator, DigitizeState digitizeState)
 Perform immediate state transition. Called from outside state machine.
 
void resetOnLoad (CmdMediator *cmdMediator)
 Resetting makes re-initializes for documents after the first.
 
void setCursor (CmdMediator *cmdMediator)
 Set cursor after asking state for the new cursor shape.
 
void setDragMode (QGraphicsView::DragMode dragMode)
 Set QGraphicsView drag mode (in m_view). Called from DigitizeStateAbstractBase subclasses.
 
void setImageIsLoaded (CmdMediator *cmdMediator, bool imageIsLoaded)
 Set the image so QGraphicsView cursor and drag mode are accessible.
 
QString state () const
 State name for debugging.
 
void updateAfterPointAddition ()
 Update the graphics attributes.
 
void updateModelDigitizeCurve (CmdMediator *cmdMediator, const DocumentModelDigitizeCurve &modelDigitizeCurve)
 Update the digitize curve settings.
 
void updateModelSegments (const DocumentModelSegments &modelSegments)
 Update the segments given the new settings.
 
QGraphicsView & view ()
 QGraphicsView for use by DigitizeStateAbstractBase subclasses.
 

Detailed Description

Container for all DigitizeStateAbstractBase subclasses. This functions as the context class in a standard state machine implementation.

Definition at line 27 of file DigitizeStateContext.h.

Constructor & Destructor Documentation

◆ DigitizeStateContext()

DigitizeStateContext::DigitizeStateContext ( MainWindow & mainWindow,
QGraphicsView & view,
bool isGnuplot )

Single constructor.

Definition at line 30 of file DigitizeStateContext.cpp.

32 :
33 m_mainWindow (mainWindow),
34 m_view (view),
35 m_imageIsLoaded (false),
36 m_isGnuplot (isGnuplot)
37{
38 // These states follow the same order as the DigitizeState enumeration
39 m_states.insert (DIGITIZE_STATE_AXIS , new DigitizeStateAxis (*this));
40 m_states.insert (DIGITIZE_STATE_COLOR_PICKER, new DigitizeStateColorPicker (*this));
41 m_states.insert (DIGITIZE_STATE_CURVE , new DigitizeStateCurve (*this));
42 m_states.insert (DIGITIZE_STATE_EMPTY , new DigitizeStateEmpty (*this));
43 m_states.insert (DIGITIZE_STATE_POINT_MATCH , new DigitizeStatePointMatch (*this));
44 m_states.insert (DIGITIZE_STATE_SEGMENT , new DigitizeStateSegment (*this));
45 m_states.insert (DIGITIZE_STATE_SELECT , new DigitizeStateSelect (*this));
46 m_states.insert (DIGITIZE_STATE_SCALE , new DigitizeStateScale (*this)); // Out of order since added later
47 ENGAUGE_ASSERT (m_states.size () == NUM_DIGITIZE_STATES);
48
49 m_currentState = NUM_DIGITIZE_STATES; // Value that forces a transition right away
52}
@ DIGITIZE_STATE_POINT_MATCH
@ DIGITIZE_STATE_SELECT
@ DIGITIZE_STATE_COLOR_PICKER
@ DIGITIZE_STATE_SEGMENT
#define ENGAUGE_ASSERT(cond)
Drop in replacement for Q_ASSERT.
Digitizing state for digitizing one axis point at a time.
Digitizing state for selecting a color for DigitizeStateSegment.
bool isGnuplot() const
Get method for gnuplot flag.
void requestImmediateStateTransition(CmdMediator *cmdMediator, DigitizeState digitizeState)
Perform immediate state transition. Called from outside state machine.
QGraphicsView & view()
QGraphicsView for use by DigitizeStateAbstractBase subclasses.
MainWindow & mainWindow()
Reference to the MainWindow, without const.
Digitizing state for creating Curve Points, one at a time.
Digitizing state before a Document has been created. In this state, the cursor is Qt::ArrowCursor.
Digitizing state for matching Curve Points, one at a time.
Digitizing state for creating the scale bar.
Digitizing state for creating multiple Points along a highlighted segment.
Digitizing state for selecting one or more Points in the Document.
CmdMediator * cmdMediator()
Accessor for commands to process the Document.

◆ ~DigitizeStateContext()

DigitizeStateContext::~DigitizeStateContext ( )
virtual

Definition at line 54 of file DigitizeStateContext.cpp.

55{
56 qDeleteAll (m_states);
57}
const int INNER_RADIUS_MIN

Member Function Documentation

◆ activeCurve()

QString DigitizeStateContext::activeCurve ( ) const

Curve name for active Curve. This can include AXIS_CURVE_NAME, and empty string.

Definition at line 59 of file DigitizeStateContext.cpp.

60{
61 return m_states [m_currentState]->activeCurve ();
62}

◆ appendNewCmd()

void DigitizeStateContext::appendNewCmd ( CmdMediator * cmdMediator,
QUndoCommand * cmd )

Append just-created QUndoCommand to command stack. This is called from DigitizeStateAbstractBase subclasses.

Definition at line 64 of file DigitizeStateContext.cpp.

66{
67 LOG4CPP_INFO_S ((*mainCat)) << "DigitizeStateContext::appendNewCmd";
68
69 cmdMediator->push (cmd);
70}
log4cpp::Category * mainCat
Definition Logger.cpp:14
#define LOG4CPP_INFO_S(logger)
Definition convenience.h:18

◆ canPaste()

bool DigitizeStateContext::canPaste ( const Transformation & transformation,
const QSize & viewSize ) const

Return true if there is good data in the clipboard for pasting, and that operation is compatible with the current state.

Definition at line 72 of file DigitizeStateContext.cpp.

74{
75 return m_states [m_currentState]->canPaste (transformation,
76 size);
77}

◆ guidelinesAreSelectable()

bool DigitizeStateContext::guidelinesAreSelectable ( ) const

Enable/disable guidelines according to state.

Definition at line 103 of file DigitizeStateContext.cpp.

104{
105 return m_states [m_currentState]->guidelinesAreSelectable();
106}

◆ handleContextMenuEventAxis()

void DigitizeStateContext::handleContextMenuEventAxis ( CmdMediator * cmdMediator,
const QString & pointIdentifier )

See DigitizeStateAbstractBase::handleContextMenuEventAxis.

Definition at line 108 of file DigitizeStateContext.cpp.

110{
111 m_states [m_currentState]->handleContextMenuEventAxis (cmdMediator,
113}

◆ handleContextMenuEventGraph()

void DigitizeStateContext::handleContextMenuEventGraph ( CmdMediator * cmdMediator,
const QStringList & pointIdentifiers )

See DigitizeStateAbstractBase::handleContextMenuEventGraph.

Definition at line 115 of file DigitizeStateContext.cpp.

117{
118 m_states [m_currentState]->handleContextMenuEventGraph (cmdMediator,
120}

◆ handleCurveChange()

void DigitizeStateContext::handleCurveChange ( CmdMediator * cmdMediator)

See DigitizeStateAbstractBase::handleCurveChange.

Definition at line 122 of file DigitizeStateContext.cpp.

123{
124 m_states [m_currentState]->handleCurveChange(cmdMediator);
125}

◆ handleKeyPress()

void DigitizeStateContext::handleKeyPress ( CmdMediator * cmdMediator,
Qt::Key key,
bool atLeastOneSelectedItem )

See DigitizeStateAbstractBase::handleKeyPress.

Definition at line 127 of file DigitizeStateContext.cpp.

130{
131 m_states [m_currentState]->handleKeyPress (cmdMediator,
132 key,
134
135 completeRequestedStateTransitionIfExists(cmdMediator);
136
137}

◆ handleMouseMove()

void DigitizeStateContext::handleMouseMove ( CmdMediator * cmdMediator,
QPointF pos )

See DigitizeStateAbstractBase::handleMouseMove.

Definition at line 139 of file DigitizeStateContext.cpp.

141{
142 m_states [m_currentState]->handleMouseMove (cmdMediator,
143 pos);
144
145 completeRequestedStateTransitionIfExists(cmdMediator);
146
147}

◆ handleMousePress()

void DigitizeStateContext::handleMousePress ( CmdMediator * cmdMediator,
QPointF pos )

See DigitizeStateAbstractBase::handleMousePress.

Definition at line 149 of file DigitizeStateContext.cpp.

151{
152 m_states [m_currentState]->handleMousePress (cmdMediator,
153 pos);
154
155 completeRequestedStateTransitionIfExists(cmdMediator);
156
157}

◆ handleMouseRelease()

void DigitizeStateContext::handleMouseRelease ( CmdMediator * cmdMediator,
QPointF pos )

See DigitizeStateAbstractBase::handleMouseRelease.

Definition at line 159 of file DigitizeStateContext.cpp.

161{
162 m_states [m_currentState]->handleMouseRelease (cmdMediator,
163 pos);
164
165 completeRequestedStateTransitionIfExists(cmdMediator);
166}

◆ isGnuplot()

bool DigitizeStateContext::isGnuplot ( ) const

Get method for gnuplot flag.

Definition at line 168 of file DigitizeStateContext.cpp.

169{
170 return m_isGnuplot;
171}

◆ mainWindow() [1/2]

MainWindow & DigitizeStateContext::mainWindow ( )

Reference to the MainWindow, without const.

Definition at line 173 of file DigitizeStateContext.cpp.

174{
175 return m_mainWindow;
176}

◆ mainWindow() [2/2]

const MainWindow & DigitizeStateContext::mainWindow ( ) const

Reference to the MainWindow, with const.

Definition at line 178 of file DigitizeStateContext.cpp.

179{
180 return m_mainWindow;
181}

◆ requestDelayedStateTransition()

void DigitizeStateContext::requestDelayedStateTransition ( DigitizeState digitizeState)

Initiate state transition to be performed later, when DigitizeState is off the stack.

Definition at line 183 of file DigitizeStateContext.cpp.

184{
185 m_requestedState = digitizeState;
186}

◆ requestImmediateStateTransition()

void DigitizeStateContext::requestImmediateStateTransition ( CmdMediator * cmdMediator,
DigitizeState digitizeState )

Perform immediate state transition. Called from outside state machine.

Definition at line 188 of file DigitizeStateContext.cpp.

190{
191 m_requestedState = digitizeState;
192 completeRequestedStateTransitionIfExists(cmdMediator);
193}

◆ resetOnLoad()

void DigitizeStateContext::resetOnLoad ( CmdMediator * cmdMediator)

Resetting makes re-initializes for documents after the first.

Definition at line 195 of file DigitizeStateContext.cpp.

196{
197 LOG4CPP_INFO_S ((*mainCat)) << "DigitizeStateContext::resetOnLoad";
198
199 // Reset current state. At this point, the current state is DIGITIZE_STATE_EMPTY when opening the first document
200 // so for consistency we always reset it so succeeding documents work the same way
201 if (m_currentState != DIGITIZE_STATE_EMPTY) {
202 m_requestedState = DIGITIZE_STATE_EMPTY;
203 completeRequestedStateTransitionIfExists(cmdMediator);
204 }
205}

◆ setCursor()

void DigitizeStateContext::setCursor ( CmdMediator * cmdMediator)

Set cursor after asking state for the new cursor shape.

Definition at line 207 of file DigitizeStateContext.cpp.

208{
209 LOG4CPP_INFO_S ((*mainCat)) << "DigitizeStateContext::setCursor";
210
211 ENGAUGE_ASSERT(m_currentState < m_states.count());
212
213 m_states [m_currentState]->setCursor (cmdMediator);
214}

◆ setDragMode()

void DigitizeStateContext::setDragMode ( QGraphicsView::DragMode dragMode)

Set QGraphicsView drag mode (in m_view). Called from DigitizeStateAbstractBase subclasses.

Definition at line 216 of file DigitizeStateContext.cpp.

217{
218 LOG4CPP_DEBUG_S ((*mainCat)) << "DigitizeStateContext::setDragMode";
219
220 if (m_imageIsLoaded) {
221 m_view.setDragMode (dragMode);
222 }
223}
#define LOG4CPP_DEBUG_S(logger)
Definition convenience.h:20

◆ setImageIsLoaded()

void DigitizeStateContext::setImageIsLoaded ( CmdMediator * cmdMediator,
bool imageIsLoaded )

Set the image so QGraphicsView cursor and drag mode are accessible.

Definition at line 225 of file DigitizeStateContext.cpp.

227{
228 LOG4CPP_INFO_S ((*mainCat)) << "DigitizeStateContext::setImageIsLoaded";
229
230 m_imageIsLoaded = imageIsLoaded;
231 setCursor (cmdMediator);
232}
void setCursor(CmdMediator *cmdMediator)
Set cursor after asking state for the new cursor shape.

◆ state()

QString DigitizeStateContext::state ( ) const

State name for debugging.

Definition at line 234 of file DigitizeStateContext.cpp.

235{
236 ENGAUGE_ASSERT (m_currentState != NUM_DIGITIZE_STATES);
237
238 return m_states [m_currentState]->state();
239}

◆ updateAfterPointAddition()

void DigitizeStateContext::updateAfterPointAddition ( )

Update the graphics attributes.

Definition at line 241 of file DigitizeStateContext.cpp.

242{
243 ENGAUGE_ASSERT (m_currentState != NUM_DIGITIZE_STATES);
244
245 m_states [m_currentState]->updateAfterPointAddition ();
246}

◆ updateModelDigitizeCurve()

void DigitizeStateContext::updateModelDigitizeCurve ( CmdMediator * cmdMediator,
const DocumentModelDigitizeCurve & modelDigitizeCurve )

Update the digitize curve settings.

Definition at line 248 of file DigitizeStateContext.cpp.

250{
251 LOG4CPP_INFO_S ((*mainCat)) << "DigitizeStateContext::updateModelDigitizeCurve";
252
253 ENGAUGE_ASSERT(m_currentState < m_states.count());
254
255 m_states [m_currentState]->updateModelDigitizeCurve (cmdMediator,
256 modelDigitizeCurve);
257}

◆ updateModelSegments()

void DigitizeStateContext::updateModelSegments ( const DocumentModelSegments & modelSegments)

Update the segments given the new settings.

Definition at line 259 of file DigitizeStateContext.cpp.

260{
261 LOG4CPP_INFO_S ((*mainCat)) << "DigitizeStateContext::updateModelSegments";
262
263 ENGAUGE_ASSERT(m_currentState < m_states.count());
264
265 m_states [m_currentState]->updateModelSegments (modelSegments);
266}

◆ view()

QGraphicsView & DigitizeStateContext::view ( )

QGraphicsView for use by DigitizeStateAbstractBase subclasses.

Definition at line 268 of file DigitizeStateContext.cpp.

269{
270 return m_view;
271}

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