Engauge Digitizer  2
 All Classes Files Functions Variables Enumerations Enumerator Friends Pages
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 QUndoCommand;
22 
24 class DigitizeStateContext : public QObject
25 {
26  Q_OBJECT;
27 
28 public:
31  QGraphicsView &view,
32  bool isGnuplot);
33  virtual ~DigitizeStateContext ();
34 
36  QString activeCurve () const;
37 
39  void appendNewCmd(CmdMediator *cmdMediator,
40  QUndoCommand *cmd);
41 
43  void handleContextMenuEvent (CmdMediator *cmdMediator,
44  const QString &pointIdentifier);
45 
47  void handleCurveChange (CmdMediator *cmdMediator);
48 
50  void handleKeyPress (CmdMediator *cmdMediator,
51  Qt::Key key,
52  bool atLeastOneSelectedItem);
53 
55  void handleLeave (CmdMediator *cmdMediator);
56 
58  void handleMouseMove (CmdMediator *cmdMediator,
59  QPointF pos);
60 
62  void handleMousePress (CmdMediator *cmdMediator,
63  QPointF pos);
64 
66  void handleMouseRelease (CmdMediator *cmdMediator,
67  QPointF pos);
68 
70  void handleSetOverrideCursor (CmdMediator *cmdMediator,
71  const QCursor &cursor);
72 
74  bool isGnuplot () const;
75 
78 
80  const MainWindow &mainWindow () const;
81 
83  void requestDelayedStateTransition (DigitizeState digitizeState);
84 
87  DigitizeState digitizeState);
88 
90  void resetOnLoad (CmdMediator *cmdMediator);
91 
93  void setCursor (CmdMediator *cmdMediator);
94 
96  void setDragMode (QGraphicsView::DragMode dragMode);
97 
99  void setImageIsLoaded (CmdMediator *cmdMediator,
100  bool imageIsLoaded);
101 
103  QString state() const;
104 
106  void updateModelDigitizeCurve (CmdMediator *cmdMediator,
107  const DocumentModelDigitizeCurve &modelDigitizeCurve);
108 
110  void updateModelSegments(const DocumentModelSegments &modelSegments);
111 
113  QGraphicsView &view();
114 
115 private:
117 
118  void completeRequestedStateTransitionIfExists (CmdMediator *cmdMediator);
119 
120  MainWindow &m_mainWindow;
121  QGraphicsView &m_view;
122  bool m_imageIsLoaded; // Cursor and dragging can be affected by whether or not image is loaded
123 
124  QVector<DigitizeStateAbstractBase*> m_states;
125  DigitizeState m_currentState;
126  DigitizeState m_requestedState; // Same as m_currentState until requestDelayedStateTransition is called
127 
128  bool m_isGnuplot;
129 };
130 
131 #endif // DIGITIZE_STATE_CONTEXT_H
void requestDelayedStateTransition(DigitizeState digitizeState)
Initiate state transition to be performed later, when DigitizeState is off the stack.
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.
QString activeCurve() const
Curve name for active Curve. This can include AXIS_CURVE_NAME, and empty string.
void setCursor(CmdMediator *cmdMediator)
Set cursor after asking state for the new cursor shape.
void handleCurveChange(CmdMediator *cmdMediator)
See DigitizeStateAbstractBase::handleCurveChange.
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.
Container for all DigitizeStateAbstractBase subclasses. This functions as the context class in a stan...
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.
QString state() const
State name for debugging.
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.
bool isGnuplot() const
Get method for gnuplot flag.
QGraphicsView & view()
QGraphicsView for use by DigitizeStateAbstractBase subclasses.
void handleMousePress(CmdMediator *cmdMediator, QPointF pos)
See DigitizeStateAbstractBase::handleMousePress.
void handleSetOverrideCursor(CmdMediator *cmdMediator, const QCursor &cursor)
See DigitizeStateAbstractBase::handleSetOverrideCursor.
void handleContextMenuEvent(CmdMediator *cmdMediator, const QString &pointIdentifier)
See DigitizeStateAbstractBase::handleContextMenuEvent.
Main window consisting of menu, graphics scene, status bar and optional toolbars as a Single Document...
Definition: MainWindow.h:77
void handleLeave(CmdMediator *cmdMediator)
See DigitizeStateAbstractBase::handleLeave.
void requestImmediateStateTransition(CmdMediator *cmdMediator, DigitizeState digitizeState)
Perform immediate state transition. Called from outside state machine.