Engauge Digitizer  2
DigitizeStateContext.h
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 
10 #include "DigitizeStateAbstractBase.h"
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
void requestDelayedStateTransition(DigitizeState digitizeState)
Initiate state transition to be performed later, when DigitizeState is off the stack.
void updateAfterPointAddition()
Update the graphics attributes.
void resetOnLoad(CmdMediator *cmdMediator)
Resetting makes re-initializes for documents after the first.
void setDragMode(QGraphicsView::DragMode dragMode)
Set QGraphicsView drag mode (in m_view). Called from DigitizeStateAbstractBase subclasses.
void updateModelDigitizeCurve(CmdMediator *cmdMediator, const DocumentModelDigitizeCurve &modelDigitizeCurve)
Update the digitize curve settings.
void handleContextMenuEventAxis(CmdMediator *cmdMediator, const QString &pointIdentifier)
See DigitizeStateAbstractBase::handleContextMenuEventAxis.
void setCursor(CmdMediator *cmdMediator)
Set cursor after asking state for the new cursor shape.
void handleCurveChange(CmdMediator *cmdMediator)
See DigitizeStateAbstractBase::handleCurveChange.
void handleContextMenuEventGraph(CmdMediator *cmdMediator, const QStringList &pointIdentifiers)
See DigitizeStateAbstractBase::handleContextMenuEventGraph.
QString state() const
State name for debugging.
bool isGnuplot() const
Get method for gnuplot flag.
QString activeCurve() const
Curve name for active Curve. This can include AXIS_CURVE_NAME, and empty string.
void handleKeyPress(CmdMediator *cmdMediator, Qt::Key key, bool atLeastOneSelectedItem)
See DigitizeStateAbstractBase::handleKeyPress.
MainWindow & mainWindow()
Reference to the MainWindow, without const.
void setImageIsLoaded(CmdMediator *cmdMediator, bool imageIsLoaded)
Set the image so QGraphicsView cursor and drag mode are accessible.
Model for DlgSettingsDigitizeCurve and CmdSettingsDigitizeCurve.
Affine transformation between screen and graph coordinates, based on digitized axis points...
Container for all DigitizeStateAbstractBase subclasses. This functions as the context class in a stan...
Model for DlgSettingsMainWindow.
void appendNewCmd(CmdMediator *cmdMediator, QUndoCommand *cmd)
Append just-created QUndoCommand to command stack. This is called from DigitizeStateAbstractBase subc...
void updateModelSegments(const DocumentModelSegments &modelSegments)
Update the segments given the new settings.
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...
void handleMouseMove(CmdMediator *cmdMediator, QPointF pos)
See DigitizeStateAbstractBase::handleMouseMove.
void handleMouseRelease(CmdMediator *cmdMediator, QPointF pos)
See DigitizeStateAbstractBase::handleMouseRelease.
Command queue stack.
Definition: CmdMediator.h:23
Model for DlgSettingsSegments and CmdSettingsSegments.
QGraphicsView & view()
QGraphicsView for use by DigitizeStateAbstractBase subclasses.
void handleMousePress(CmdMediator *cmdMediator, QPointF pos)
See DigitizeStateAbstractBase::handleMousePress.
Main window consisting of menu, graphics scene, status bar and optional toolbars as a Single Document...
Definition: MainWindow.h:89
void requestImmediateStateTransition(CmdMediator *cmdMediator, DigitizeState digitizeState)
Perform immediate state transition. Called from outside state machine.