Engauge Digitizer 2
Loading...
Searching...
No Matches
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
17class CmdAbstractBase;
20class MainWindow;
21class MainWindowModel;
22class QSize;
23class QUndoCommand;
24class Transformation;
25
27class DigitizeStateContext : public QObject
28{
29 Q_OBJECT;
30
31public:
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 bool guidelinesAreSelectable () const;
51
53 void handleContextMenuEventAxis (CmdMediator *cmdMediator,
54 const QString &pointIdentifier);
55
58 const QStringList &pointIdentifiers);
59
61 void handleCurveChange (CmdMediator *cmdMediator);
62
64 void handleKeyPress (CmdMediator *cmdMediator,
65 Qt::Key key,
66 bool atLeastOneSelectedItem);
67
69 void handleMouseMove (CmdMediator *cmdMediator,
70 QPointF pos);
71
73 void handleMousePress (CmdMediator *cmdMediator,
74 QPointF pos);
75
77 void handleMouseRelease (CmdMediator *cmdMediator,
78 QPointF pos);
79
81 bool isGnuplot () const;
82
85
87 const MainWindow &mainWindow () const;
88
91
94 DigitizeState digitizeState);
95
97 void resetOnLoad (CmdMediator *cmdMediator);
98
100 void setCursor (CmdMediator *cmdMediator);
101
103 void setDragMode (QGraphicsView::DragMode dragMode);
104
106 void setImageIsLoaded (CmdMediator *cmdMediator,
107 bool imageIsLoaded);
108
110 QString state() const;
111
114
116 void updateModelDigitizeCurve (CmdMediator *cmdMediator,
117 const DocumentModelDigitizeCurve &modelDigitizeCurve);
118
120 void updateModelSegments(const DocumentModelSegments &modelSegments);
121
123 QGraphicsView &view();
124
125private:
127
128 void completeRequestedStateTransitionIfExists (CmdMediator *cmdMediator);
129
131 friend class MainWindow;
132 DigitizeState digitizeState () const;
133
134 MainWindow &m_mainWindow;
135 QGraphicsView &m_view;
136 bool m_imageIsLoaded; // Cursor and dragging can be affected by whether or not image is loaded
137
138 QVector<DigitizeStateAbstractBase*> m_states;
139 DigitizeState m_currentState;
140 DigitizeState m_requestedState; // Same as m_currentState until requestDelayedStateTransition is called
141
142 bool m_isGnuplot;
143};
144
145#endif // DIGITIZE_STATE_CONTEXT_H
DigitizeState
Set of possible states of Digitize toolbar.
Command queue stack.
Definition CmdMediator.h:24
QString state() const
State name for debugging.
bool isGnuplot() const
Get method for gnuplot flag.
void resetOnLoad(CmdMediator *cmdMediator)
Resetting makes re-initializes for documents after the first.
void handleMouseRelease(CmdMediator *cmdMediator, QPointF pos)
See DigitizeStateAbstractBase::handleMouseRelease.
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...
DigitizeStateContext(MainWindow &mainWindow, QGraphicsView &view, bool isGnuplot)
Single constructor.
void handleMouseMove(CmdMediator *cmdMediator, QPointF pos)
See DigitizeStateAbstractBase::handleMouseMove.
void requestImmediateStateTransition(CmdMediator *cmdMediator, DigitizeState digitizeState)
Perform immediate state transition. Called from outside state machine.
void updateModelDigitizeCurve(CmdMediator *cmdMediator, const DocumentModelDigitizeCurve &modelDigitizeCurve)
Update the digitize curve settings.
void handleContextMenuEventGraph(CmdMediator *cmdMediator, const QStringList &pointIdentifiers)
See DigitizeStateAbstractBase::handleContextMenuEventGraph.
void setDragMode(QGraphicsView::DragMode dragMode)
Set QGraphicsView drag mode (in m_view). Called from DigitizeStateAbstractBase subclasses.
void handleMousePress(CmdMediator *cmdMediator, QPointF pos)
See DigitizeStateAbstractBase::handleMousePress.
void appendNewCmd(CmdMediator *cmdMediator, QUndoCommand *cmd)
Append just-created QUndoCommand to command stack. This is called from DigitizeStateAbstractBase subc...
void setCursor(CmdMediator *cmdMediator)
Set cursor after asking state for the new cursor shape.
void setImageIsLoaded(CmdMediator *cmdMediator, bool imageIsLoaded)
Set the image so QGraphicsView cursor and drag mode are accessible.
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.
void updateModelSegments(const DocumentModelSegments &modelSegments)
Update the segments given the new settings.
bool guidelinesAreSelectable() const
Enable/disable guidelines according to state.
void requestDelayedStateTransition(DigitizeState digitizeState)
Initiate state transition to be performed later, when DigitizeState is off the stack.
void updateAfterPointAddition()
Update the graphics attributes.
QGraphicsView & view()
QGraphicsView for use by DigitizeStateAbstractBase subclasses.
void handleCurveChange(CmdMediator *cmdMediator)
See DigitizeStateAbstractBase::handleCurveChange.
MainWindow & mainWindow()
Reference to the MainWindow, without const.
void handleContextMenuEventAxis(CmdMediator *cmdMediator, const QString &pointIdentifier)
See DigitizeStateAbstractBase::handleContextMenuEventAxis.
friend class MainWindow
For CmdAbstract constructor only, via MainWindow, we offer the state to friend class MainWindow.
Model for DlgSettingsDigitizeCurve and CmdSettingsDigitizeCurve.
Model for DlgSettingsSegments and CmdSettingsSegments.
Model for DlgSettingsMainWindow.
Main window consisting of menu, graphics scene, status bar and optional toolbars as a Single Document...
Definition MainWindow.h:95
Affine transformation between screen and graph coordinates, based on digitized axis points.