Engauge Digitizer  2
DigitizeStateContext.h
Go to the documentation of this file.
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 #ifndef DIGITIZE_STATE_CONTEXT_H
8 #define DIGITIZE_STATE_CONTEXT_H
9 
11 #include "PointStyle.h"
12 #include <QCursor>
13 #include <QGraphicsView>
14 #include <QObject>
15 #include <QVector>
16 
17 class CmdAbstractBase;
20 class MainWindow;
21 class MainWindowModel;
22 class QSize;
23 class QUndoCommand;
24 class Transformation;
25 
27 class DigitizeStateContext : public QObject
28 {
29  Q_OBJECT;
30 
31 public:
34  QGraphicsView &view,
35  bool isGnuplot);
36  virtual ~DigitizeStateContext ();
37 
39  QString activeCurve () const;
40 
42  void appendNewCmd(CmdMediator *cmdMediator,
43  QUndoCommand *cmd);
44 
46  bool canPaste (const Transformation &transformation,
47  const QSize &viewSize) const;
48 
50  void handleContextMenuEventAxis (CmdMediator *cmdMediator,
51  const QString &pointIdentifier);
52 
54  void handleContextMenuEventGraph (CmdMediator *cmdMediator,
55  const QStringList &pointIdentifiers);
56 
58  void handleCurveChange (CmdMediator *cmdMediator);
59 
61  void handleKeyPress (CmdMediator *cmdMediator,
62  Qt::Key key,
63  bool atLeastOneSelectedItem);
64 
66  void handleMouseMove (CmdMediator *cmdMediator,
67  QPointF pos);
68 
70  void handleMousePress (CmdMediator *cmdMediator,
71  QPointF pos);
72 
74  void handleMouseRelease (CmdMediator *cmdMediator,
75  QPointF pos);
76 
78  bool isGnuplot () const;
79 
82 
84  const MainWindow &mainWindow () const;
85 
87  void requestDelayedStateTransition (DigitizeState digitizeState);
88 
91  DigitizeState digitizeState);
92 
94  void resetOnLoad (CmdMediator *cmdMediator);
95 
97  void setCursor (CmdMediator *cmdMediator);
98 
100  void setDragMode (QGraphicsView::DragMode dragMode);
101 
103  void setImageIsLoaded (CmdMediator *cmdMediator,
104  bool imageIsLoaded);
105 
107  QString state() const;
108 
110  void updateAfterPointAddition ();
111 
113  void updateModelDigitizeCurve (CmdMediator *cmdMediator,
114  const DocumentModelDigitizeCurve &modelDigitizeCurve);
115 
117  void updateModelSegments(const DocumentModelSegments &modelSegments);
118 
120  QGraphicsView &view();
121 
122 private:
124 
125  void completeRequestedStateTransitionIfExists (CmdMediator *cmdMediator);
126 
127  MainWindow &m_mainWindow;
128  QGraphicsView &m_view;
129  bool m_imageIsLoaded; // Cursor and dragging can be affected by whether or not image is loaded
130 
131  QVector<DigitizeStateAbstractBase*> m_states;
132  DigitizeState m_currentState;
133  DigitizeState m_requestedState; // Same as m_currentState until requestDelayedStateTransition is called
134 
135  bool m_isGnuplot;
136 };
137 
138 #endif // DIGITIZE_STATE_CONTEXT_H
DigitizeStateContext::updateModelDigitizeCurve
void updateModelDigitizeCurve(CmdMediator *cmdMediator, const DocumentModelDigitizeCurve &modelDigitizeCurve)
Update the digitize curve settings.
Definition: DigitizeStateContext.cpp:243
DigitizeStateContext::updateAfterPointAddition
void updateAfterPointAddition()
Update the graphics attributes.
Definition: DigitizeStateContext.cpp:236
DigitizeStateContext::~DigitizeStateContext
virtual ~DigitizeStateContext()
Definition: DigitizeStateContext.cpp:54
DigitizeStateContext::handleContextMenuEventAxis
void handleContextMenuEventAxis(CmdMediator *cmdMediator, const QString &pointIdentifier)
See DigitizeStateAbstractBase::handleContextMenuEventAxis.
Definition: DigitizeStateContext.cpp:103
DigitizeStateContext::isGnuplot
bool isGnuplot() const
Get method for gnuplot flag.
Definition: DigitizeStateContext.cpp:163
DigitizeStateContext::setDragMode
void setDragMode(QGraphicsView::DragMode dragMode)
Set QGraphicsView drag mode (in m_view). Called from DigitizeStateAbstractBase subclasses.
Definition: DigitizeStateContext.cpp:211
DigitizeStateContext
Container for all DigitizeStateAbstractBase subclasses. This functions as the context class in a stan...
Definition: DigitizeStateContext.h:26
DigitizeStateContext::activeCurve
QString activeCurve() const
Curve name for active Curve. This can include AXIS_CURVE_NAME, and empty string.
Definition: DigitizeStateContext.cpp:59
PointStyle.h
DigitizeStateContext::mainWindow
MainWindow & mainWindow()
Reference to the MainWindow, without const.
Definition: DigitizeStateContext.cpp:168
Transformation
Affine transformation between screen and graph coordinates, based on digitized axis points.
Definition: Transformation.h:30
DigitizeStateContext::state
QString state() const
State name for debugging.
Definition: DigitizeStateContext.cpp:229
DigitizeStateContext::canPaste
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...
Definition: DigitizeStateContext.cpp:72
DigitizeStateAbstractBase.h
MainWindowModel
Model for DlgSettingsMainWindow.
Definition: MainWindowModel.h:29
DigitizeStateContext::setCursor
void setCursor(CmdMediator *cmdMediator)
Set cursor after asking state for the new cursor shape.
Definition: DigitizeStateContext.cpp:202
DigitizeStateContext::appendNewCmd
void appendNewCmd(CmdMediator *cmdMediator, QUndoCommand *cmd)
Append just-created QUndoCommand to command stack. This is called from DigitizeStateAbstractBase subc...
Definition: DigitizeStateContext.cpp:64
DigitizeStateContext::updateModelSegments
void updateModelSegments(const DocumentModelSegments &modelSegments)
Update the segments given the new settings.
Definition: DigitizeStateContext.cpp:254
DigitizeStateContext::handleCurveChange
void handleCurveChange(CmdMediator *cmdMediator)
See DigitizeStateAbstractBase::handleCurveChange.
Definition: DigitizeStateContext.cpp:117
MainWindow
Main window consisting of menu, graphics scene, status bar and optional toolbars as a Single Document...
Definition: MainWindow.h:90
DigitizeStateContext::handleMouseRelease
void handleMouseRelease(CmdMediator *cmdMediator, QPointF pos)
See DigitizeStateAbstractBase::handleMouseRelease.
Definition: DigitizeStateContext.cpp:154
DigitizeState
DigitizeState
Set of possible states of Digitize toolbar.
Definition: DigitizeStateAbstractBase.h:23
DigitizeStateContext::handleKeyPress
void handleKeyPress(CmdMediator *cmdMediator, Qt::Key key, bool atLeastOneSelectedItem)
See DigitizeStateAbstractBase::handleKeyPress.
Definition: DigitizeStateContext.cpp:122
DigitizeStateContext::resetOnLoad
void resetOnLoad(CmdMediator *cmdMediator)
Resetting makes re-initializes for documents after the first.
Definition: DigitizeStateContext.cpp:190
DocumentModelSegments
Model for DlgSettingsSegments and CmdSettingsSegments.
Definition: DocumentModelSegments.h:16
DigitizeStateContext::setImageIsLoaded
void setImageIsLoaded(CmdMediator *cmdMediator, bool imageIsLoaded)
Set the image so QGraphicsView cursor and drag mode are accessible.
Definition: DigitizeStateContext.cpp:220
DigitizeStateContext::handleContextMenuEventGraph
void handleContextMenuEventGraph(CmdMediator *cmdMediator, const QStringList &pointIdentifiers)
See DigitizeStateAbstractBase::handleContextMenuEventGraph.
Definition: DigitizeStateContext.cpp:110
DocumentModelDigitizeCurve
Model for DlgSettingsDigitizeCurve and CmdSettingsDigitizeCurve.
Definition: DocumentModelDigitizeCurve.h:17
CmdMediator
Command queue stack.
Definition: CmdMediator.h:22
DigitizeStateContext::handleMouseMove
void handleMouseMove(CmdMediator *cmdMediator, QPointF pos)
See DigitizeStateAbstractBase::handleMouseMove.
Definition: DigitizeStateContext.cpp:134
DigitizeStateContext::requestDelayedStateTransition
void requestDelayedStateTransition(DigitizeState digitizeState)
Initiate state transition to be performed later, when DigitizeState is off the stack.
Definition: DigitizeStateContext.cpp:178
DigitizeStateContext::view
QGraphicsView & view()
QGraphicsView for use by DigitizeStateAbstractBase subclasses.
Definition: DigitizeStateContext.cpp:263
DigitizeStateContext::requestImmediateStateTransition
void requestImmediateStateTransition(CmdMediator *cmdMediator, DigitizeState digitizeState)
Perform immediate state transition. Called from outside state machine.
Definition: DigitizeStateContext.cpp:183
DigitizeStateContext::handleMousePress
void handleMousePress(CmdMediator *cmdMediator, QPointF pos)
See DigitizeStateAbstractBase::handleMousePress.
Definition: DigitizeStateContext.cpp:144