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
130 MainWindow &m_mainWindow;
131 QGraphicsView &m_view;
132 bool m_imageIsLoaded; // Cursor and dragging can be affected by whether or not image is loaded
133
134 QVector<DigitizeStateAbstractBase*> m_states;
135 DigitizeState m_currentState;
136 DigitizeState m_requestedState; // Same as m_currentState until requestDelayedStateTransition is called
137
138 bool m_isGnuplot;
139};
140
141#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.
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:96
Affine transformation between screen and graph coordinates, based on digitized axis points.