Engauge Digitizer  2
DigitizeStateAbstractBase.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_ABSTRACT_BASE_H
8 #define DIGITIZE_STATE_ABSTRACT_BASE_H
9 
10 #include "PointStyle.h"
11 #include <QCursor>
12 #include <QPointF>
13 
14 class CmdMediator;
18 class QGraphicsScene;
19 class QImage;
20 class QTimer;
21 
23 enum DigitizeState {
24  DIGITIZE_STATE_AXIS,
25  DIGITIZE_STATE_COLOR_PICKER,
26  DIGITIZE_STATE_CURVE,
27  DIGITIZE_STATE_EMPTY,
28  DIGITIZE_STATE_POINT_MATCH,
29  DIGITIZE_STATE_SEGMENT,
30  DIGITIZE_STATE_SELECT,
31  NUM_DIGITIZE_STATES
32 };
33 
36 {
37 public:
40  virtual ~DigitizeStateAbstractBase ();
41 
43  virtual QString activeCurve () const = 0;
44 
47  virtual void begin(CmdMediator *cmdMediator,
48  DigitizeState previousState) = 0;
49 
52 
54  const DigitizeStateContext &context() const;
55 
57  virtual void end() = 0;
58 
60  void handleContextMenuEvent (CmdMediator *cmdMediator,
61  const QString &pointIdentifier);
62 
64  virtual void handleCurveChange (CmdMediator *cmdMediator) = 0;
65 
67  virtual void handleKeyPress (CmdMediator *cmdMediator,
68  Qt::Key key,
69  bool atLeastOneSelectedItem) = 0;
70 
72  virtual void handleLeave (CmdMediator *cmdMediator);
73 
75  virtual void handleMouseMove (CmdMediator *cmdMediator,
76  QPointF posScreen) = 0;
77 
79  virtual void handleMousePress (CmdMediator *cmdMediator,
80  QPointF pos) = 0;
81 
83  virtual void handleMouseRelease (CmdMediator *cmdMediator,
84  QPointF pos) = 0;
85 
87  void handleSetOverrideCursor (CmdMediator *cmdMediator,
88  const QCursor &cursor);
89 
91  void removeOverrideCursor ();
92 
94  void setCursor(CmdMediator *cmdMediator);
95 
97  virtual QString state() const = 0;
98 
100  virtual void updateModelDigitizeCurve (CmdMediator *cmdMediator,
101  const DocumentModelDigitizeCurve &modelDigitizeCurve) = 0;
102 
104  virtual void updateModelSegments(const DocumentModelSegments &modelSegments) = 0;
105 
106 protected:
108  virtual QCursor cursor (CmdMediator *cmdMediator) const = 0;
109 
110 private:
112 
113  DigitizeStateContext &m_context;
114 
115  bool m_isOverrideCursor; // Checking QApplication::overrideCursor()==0 is unreliable so this tracks the override cursor state
116 };
117 
118 #endif // DIGITIZE_STATE_ABSTRACT_BASE_H
virtual void handleMousePress(CmdMediator *cmdMediator, QPointF pos)=0
Handle a mouse press that was intercepted earlier.
virtual void handleKeyPress(CmdMediator *cmdMediator, Qt::Key key, bool atLeastOneSelectedItem)=0
Handle a key press that was intercepted earlier.
virtual QCursor cursor(CmdMediator *cmdMediator) const =0
Returns the state-specific cursor shape.
virtual QString activeCurve() const =0
Name of the active Curve. This can include AXIS_CURVE_NAME.
virtual void handleMouseRelease(CmdMediator *cmdMediator, QPointF pos)=0
Handle a mouse release that was intercepted earlier.
DigitizeStateContext & context()
Reference to the DigitizeStateContext that contains all the DigitizeStateAbstractBase subclasses...
virtual void end()=0
Method that is called at the exact moment a state is exited. Typically called just before begin for t...
Model for DlgSettingsDigitizeCurve and CmdSettingsDigitizeCurve.
void setCursor(CmdMediator *cmdMediator)
Update the cursor according to the current state.
Container for all DigitizeStateAbstractBase subclasses. This functions as the context class in a stan...
void handleContextMenuEvent(CmdMediator *cmdMediator, const QString &pointIdentifier)
Handle a right click that was intercepted earlier. This is done in the superclass since it works the ...
virtual void updateModelSegments(const DocumentModelSegments &modelSegments)=0
Update the segments given the new settings.
virtual void handleMouseMove(CmdMediator *cmdMediator, QPointF posScreen)=0
Handle a mouse move. This is part of an experiment to see if augmenting the cursor in Point Match mod...
Command queue stack.
Definition: CmdMediator.h:23
virtual void updateModelDigitizeCurve(CmdMediator *cmdMediator, const DocumentModelDigitizeCurve &modelDigitizeCurve)=0
Update the digitize curve settings.
virtual void handleLeave(CmdMediator *cmdMediator)
Handle leave in case an override cursor is in effect from last QDialog, by resetting the override cur...
Model for DlgSettingsSegments and CmdSettingsSegments.
void removeOverrideCursor()
Remove the override cursor if it is in use. This is called after a leave event, and prior to displayi...
virtual void handleCurveChange(CmdMediator *cmdMediator)=0
Handle the selection of a new curve. At a minimum, DigitizeStateSegment will generate a new set of Se...
Base class for all digitizing states. This serves as an interface to DigitizeStateContext.
void handleSetOverrideCursor(CmdMediator *cmdMediator, const QCursor &cursor)
Handle the command to set the override cursor.
virtual QString state() const =0
State name for debugging.
virtual void begin(CmdMediator *cmdMediator, DigitizeState previousState)=0
Method that is called at the exact moment a state is entered.