Engauge Digitizer  2
DigitizeStateCurve.cpp
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 #include "CmdAddPointGraph.h"
8 #include "CmdMediator.h"
9 #include "CursorFactory.h"
10 #include "DigitizeStateContext.h"
11 #include "DigitizeStateCurve.h"
12 #include "Logger.h"
13 #include "MainWindow.h"
14 #include "OrdinalGenerator.h"
15 #include <QCursor>
16 #include <QGraphicsScene>
17 #include <QImage>
18 #include <QSize>
19 #include "Transformation.h"
20 
23 {
24 }
25 
27 {
28 }
29 
30 QString DigitizeStateCurve::activeCurve () const
31 {
33 }
34 
35 void DigitizeStateCurve::begin (CmdMediator *cmdMediator,
36  DigitizeState /* previousState */)
37 {
38  LOG4CPP_INFO_S ((*mainCat)) << "DigitizeStateCurve::begin";
39 
40  setCursor(cmdMediator);
41  context().setDragMode(QGraphicsView::NoDrag);
43 }
44 
45 bool DigitizeStateCurve::canPaste (const Transformation &transformation,
46  const QSize &size) const
47 {
48  return canPasteProtected (transformation,
49  size);
50 }
51 
52 QCursor DigitizeStateCurve::cursor(CmdMediator *cmdMediator) const
53 {
54  LOG4CPP_DEBUG_S ((*mainCat)) << "DigitizeStateCurve::cursor";
55 
56  CursorFactory cursorFactory;
57  QCursor cursor = cursorFactory.generate (cmdMediator->document().modelDigitizeCurve());
58 
59  return cursor;
60 }
61 
63 {
64  LOG4CPP_INFO_S ((*mainCat)) << "DigitizeStateCurve::end";
65 }
66 
68  const QString &pointIdentifier)
69 {
70  LOG4CPP_INFO_S ((*mainCat)) << "DigitizeStateCurve::handleContextMenuEventAxis "
71  << " point=" << pointIdentifier.toLatin1 ().data ();
72 }
73 
75  const QStringList &pointIdentifiers)
76 {
77  LOG4CPP_INFO_S ((*mainCat)) << "DigitizeStateCurve ::handleContextMenuEventGraph "
78  << "points=" << pointIdentifiers.join(",").toLatin1 ().data ();
79 }
80 
81 void DigitizeStateCurve::handleCurveChange(CmdMediator * /* cmdMediator */)
82 {
83  LOG4CPP_INFO_S ((*mainCat)) << "DigitizeStateCurve::handleCurveChange";
84 }
85 
86 void DigitizeStateCurve::handleKeyPress (CmdMediator * /* cmdMediator */,
87  Qt::Key key,
88  bool /* atLeastOneSelectedItem */)
89 {
90  LOG4CPP_INFO_S ((*mainCat)) << "DigitizeStateCurve::handleKeyPress"
91  << " key=" << QKeySequence (key).toString ().toLatin1 ().data ();
92 }
93 
94 void DigitizeStateCurve::handleMouseMove (CmdMediator * /* cmdMediator */,
95  QPointF /* posScreen */)
96 {
97 // LOG4CPP_DEBUG_S ((*mainCat)) << "DigitizeStateCurve::handleMouseMove";
98 }
99 
100 void DigitizeStateCurve::handleMousePress (CmdMediator * /* cmdMediator */,
101  QPointF /* posScreen */)
102 {
103  LOG4CPP_INFO_S ((*mainCat)) << "DigitizeStateCurve::handleMousePress";
104 }
105 
107  QPointF posScreen)
108 {
109  LOG4CPP_INFO_S ((*mainCat)) << "DigitizeStateCurve::handleMouseRelease";
110 
111  // Create command to add point
112  OrdinalGenerator ordinalGenerator;
113  Document &document = cmdMediator->document ();
114  const Transformation &transformation = context ().mainWindow ().transformation();
115  QUndoCommand *cmd = new CmdAddPointGraph (context ().mainWindow(),
116  document,
117  context ().mainWindow().selectedGraphCurve(),
118  posScreen,
119  ordinalGenerator.generateCurvePointOrdinal(document,
120  transformation,
121  posScreen,
122  activeCurve ()));
123  context().appendNewCmd(cmdMediator,
124  cmd);
125 }
126 
127 QString DigitizeStateCurve::state() const
128 {
129  return "DigitizeStateCurve";
130 }
131 
133 {
134  LOG4CPP_INFO_S ((*mainCat)) << "DigitizeStateCurve::updateAfterPointAddition";
135 }
136 
138  const DocumentModelDigitizeCurve & /*modelDigitizeCurve */)
139 {
140  LOG4CPP_INFO_S ((*mainCat)) << "DigitizeStateCurve::updateModelDigitizeCurve";
141 
142  setCursor(cmdMediator);
143 }
144 
145 void DigitizeStateCurve::updateModelSegments(const DocumentModelSegments & /* modelSegments */)
146 {
147  LOG4CPP_INFO_S ((*mainCat)) << "DigitizeStateCurve::updateModelSegments";
148 }
DigitizeStateCurve::handleKeyPress
virtual void handleKeyPress(CmdMediator *cmdMediator, Qt::Key key, bool atLeastOneSelectedItem)
Handle a key press that was intercepted earlier.
Definition: DigitizeStateCurve.cpp:85
DigitizeStateContext::setDragMode
void setDragMode(QGraphicsView::DragMode dragMode)
Set QGraphicsView drag mode (in m_view). Called from DigitizeStateAbstractBase subclasses.
Definition: DigitizeStateContext.cpp:211
DigitizeStateCurve::updateModelDigitizeCurve
virtual void updateModelDigitizeCurve(CmdMediator *cmdMediator, const DocumentModelDigitizeCurve &modelDigitizeCurve)
Update the digitize curve settings.
Definition: DigitizeStateCurve.cpp:136
DigitizeStateContext
Container for all DigitizeStateAbstractBase subclasses. This functions as the context class in a stan...
Definition: DigitizeStateContext.h:26
DigitizeStateAbstractBase::context
DigitizeStateContext & context()
Reference to the DigitizeStateContext that contains all the DigitizeStateAbstractBase subclasses,...
Definition: DigitizeStateAbstractBase.cpp:41
DigitizeStateCurve::updateAfterPointAddition
virtual void updateAfterPointAddition()
Update graphics attributes after possible new points. This is useful for highlight opacity.
Definition: DigitizeStateCurve.cpp:131
CursorFactory.h
DigitizeStateCurve::~DigitizeStateCurve
virtual ~DigitizeStateCurve()
Definition: DigitizeStateCurve.cpp:25
DigitizeStateContext::mainWindow
MainWindow & mainWindow()
Reference to the MainWindow, without const.
Definition: DigitizeStateContext.cpp:168
DigitizeStateCurve::handleMouseMove
virtual void handleMouseMove(CmdMediator *cmdMediator, QPointF posScreen)
Handle a mouse move. This is part of an experiment to see if augmenting the cursor in Point Match mod...
Definition: DigitizeStateCurve.cpp:93
CmdMediator.h
MainWindow::selectedGraphCurve
QString selectedGraphCurve() const
Curve name that is currently selected in m_cmbCurve.
Definition: MainWindow.cpp:1478
DigitizeStateCurve::handleCurveChange
virtual void handleCurveChange(CmdMediator *cmdMediator)
Handle the selection of a new curve. At a minimum, DigitizeStateSegment will generate a new set of Se...
Definition: DigitizeStateCurve.cpp:80
DigitizeStateCurve::begin
virtual void begin(CmdMediator *cmdMediator, DigitizeState previousState)
Method that is called at the exact moment a state is entered.
Definition: DigitizeStateCurve.cpp:34
CursorFactory
Create standard cross cursor, or custom cursor, according to settings.
Definition: CursorFactory.h:14
Document
Storage of one imported image and the data attached to that image.
Definition: Document.h:40
Transformation
Affine transformation between screen and graph coordinates, based on digitized axis points.
Definition: Transformation.h:30
DigitizeStateContext.h
DigitizeStateCurve::handleContextMenuEventAxis
virtual void handleContextMenuEventAxis(CmdMediator *cmdMediator, const QString &pointIdentifier)
Handle a right click, on an axis point, that was intercepted earlier.
Definition: DigitizeStateCurve.cpp:66
CmdAddPointGraph
Command for adding one graph point.
Definition: CmdAddPointGraph.h:16
Document::modelDigitizeCurve
DocumentModelDigitizeCurve modelDigitizeCurve() const
Get method for DocumentModelDigitizeCurve.
Definition: Document.cpp:709
CursorFactory::generate
QCursor generate(const DocumentModelDigitizeCurve &modelDigitizeCurve) const
Factory method to generate standard or custom cursor.
Definition: CursorFactory.cpp:18
DigitizeStateCurve.h
DigitizeStateCurve::handleContextMenuEventGraph
virtual void handleContextMenuEventGraph(CmdMediator *cmdMediator, const QStringList &pointIdentifiers)
Handle a right click, on a graph point, that was intercepted earlier.
Definition: DigitizeStateCurve.cpp:73
DigitizeStateContext::appendNewCmd
void appendNewCmd(CmdMediator *cmdMediator, QUndoCommand *cmd)
Append just-created QUndoCommand to command stack. This is called from DigitizeStateAbstractBase subc...
Definition: DigitizeStateContext.cpp:64
Transformation.h
DigitizeStateCurve::handleMouseRelease
virtual void handleMouseRelease(CmdMediator *cmdMediator, QPointF posScreen)
Handle a mouse release that was intercepted earlier.
Definition: DigitizeStateCurve.cpp:105
Logger.h
CmdMediator::document
Document & document()
Provide the Document to commands, primarily for undo/redo processing.
Definition: CmdMediator.cpp:72
DigitizeState
DigitizeState
Set of possible states of Digitize toolbar.
Definition: DigitizeStateAbstractBase.h:23
DigitizeStateCurve::end
virtual void end()
Method that is called at the exact moment a state is exited. Typically called just before begin for t...
Definition: DigitizeStateCurve.cpp:61
DigitizeStateCurve::handleMousePress
virtual void handleMousePress(CmdMediator *cmdMediator, QPointF posScreen)
Handle a mouse press that was intercepted earlier.
Definition: DigitizeStateCurve.cpp:99
DigitizeStateCurve::activeCurve
virtual QString activeCurve() const
Name of the active Curve. This can include AXIS_CURVE_NAME.
Definition: DigitizeStateCurve.cpp:29
LOG4CPP_INFO_S
#define LOG4CPP_INFO_S(logger)
Definition: convenience.h:18
OrdinalGenerator::generateCurvePointOrdinal
double generateCurvePointOrdinal(const Document &document, const Transformation &transformation, const QPointF &posScreen, const QString &curveName)
Select ordinal so new point curve passes smoothly through existing points.
Definition: OrdinalGenerator.cpp:34
MainWindow::transformation
Transformation transformation() const
Return read-only copy of transformation.
Definition: MainWindow.cpp:3230
DocumentModelSegments
Model for DlgSettingsSegments and CmdSettingsSegments.
Definition: DocumentModelSegments.h:16
DigitizeStateAbstractBase::setCursor
void setCursor(CmdMediator *cmdMediator)
Update the cursor according to the current state.
Definition: DigitizeStateAbstractBase.cpp:51
DigitizeStateCurve::canPaste
virtual bool canPaste(const Transformation &transformation, const QSize &viewSize) const
Return true if there is good data in the clipboard for pasting, and that is compatible with the curre...
Definition: DigitizeStateCurve.cpp:44
mainCat
log4cpp::Category * mainCat
Definition: Logger.cpp:14
MainWindow.h
DigitizeStateAbstractBase::canPasteProtected
bool canPasteProtected(const Transformation &transformation, const QSize &viewSize) const
Protected version of canPaste method. Some, but not all, leaf classes use this method.
Definition: DigitizeStateAbstractBase.cpp:32
DocumentModelDigitizeCurve
Model for DlgSettingsDigitizeCurve and CmdSettingsDigitizeCurve.
Definition: DocumentModelDigitizeCurve.h:17
CmdMediator
Command queue stack.
Definition: CmdMediator.h:22
DigitizeStateCurve::cursor
virtual QCursor cursor(CmdMediator *cmdMediator) const
Returns the state-specific cursor shape.
Definition: DigitizeStateCurve.cpp:51
LOG4CPP_DEBUG_S
#define LOG4CPP_DEBUG_S(logger)
Definition: convenience.h:20
DigitizeStateCurve::state
virtual QString state() const
State name for debugging.
Definition: DigitizeStateCurve.cpp:126
DigitizeStateCurve::DigitizeStateCurve
DigitizeStateCurve(DigitizeStateContext &context)
Single constructor.
Definition: DigitizeStateCurve.cpp:20
OrdinalGenerator
Utility class for generating ordinal numbers.
Definition: OrdinalGenerator.h:17
DigitizeStateAbstractBase
Base class for all digitizing states. This serves as an interface to DigitizeStateContext.
Definition: DigitizeStateAbstractBase.h:36
CmdAddPointGraph.h
OrdinalGenerator.h
DigitizeStateCurve::updateModelSegments
virtual void updateModelSegments(const DocumentModelSegments &modelSegments)
Update the segments given the new settings.
Definition: DigitizeStateCurve.cpp:144
MainWindow::updateViewsOfSettings
void updateViewsOfSettings(const QString &activeCurve)
Update curve-specific view of settings. Private version gets active curve name from DigitizeStateCont...
Definition: MainWindow.cpp:3797