Engauge Digitizer  2
GraphicsLinesForCurves.cpp
1 #include "Curve.h"
2 #include "CurveStyles.h"
3 #include "DataKey.h"
4 #include "EngaugeAssert.h"
5 #include "GraphicsLinesForCurve.h"
6 #include "GraphicsLinesForCurves.h"
7 #include "GraphicsPoint.h"
8 #include "GraphicsPointAbstractBase.h"
9 #include "GraphicsScene.h"
10 #include <iostream>
11 #include "Logger.h"
12 #include "Point.h"
13 #include <QGraphicsItem>
14 #include <QTextStream>
15 #include "QtToString.h"
16 #include "Transformation.h"
17 
19 {
20 }
21 
22 void GraphicsLinesForCurves::addPoint (const QString &curveName,
23  const QString &pointIdentifier,
24  double ordinal,
25  GraphicsPoint &point)
26 {
27  LOG4CPP_INFO_S ((*mainCat)) << "GraphicsLinesForCurves::addPoint"
28  << " curve=" << curveName.toLatin1().data()
29  << " identifier=" << pointIdentifier.toLatin1().data()
30  << " ordinal=" << ordinal
31  << " pos=" << QPointFToString (point.pos()).toLatin1().data();
32 
33  m_graphicsLinesForCurve [curveName]->addPoint (pointIdentifier,
34  ordinal,
35  point);
36 }
37 
39  const QStringList &curveNames)
40 {
41  LOG4CPP_INFO_S ((*mainCat)) << "GraphicsLinesForCurves::addRemoveCurves"
42  << " curveCount=" << m_graphicsLinesForCurve.count();
43 
44  // Add new curves
45  QStringList::const_iterator itrC;
46  for (itrC = curveNames.begin (); itrC != curveNames.end (); itrC++) {
47 
48  QString curveName = *itrC;
49 
50  if (!m_graphicsLinesForCurve.contains (curveName)) {
51 
52  GraphicsLinesForCurve *item = new GraphicsLinesForCurve(curveName);
53  scene.addItem (item);
54 
55  m_graphicsLinesForCurve [curveName] = item;
56  }
57  }
58 
59  // Remove expired curves
60  GraphicsLinesContainer::const_iterator itrG, itrGNext;
61  for (itrG = m_graphicsLinesForCurve.begin (); itrG != m_graphicsLinesForCurve.end (); itrG = itrGNext) {
62 
63  const QString curveName = itrG.key ();
64  GraphicsLinesForCurve *graphicsLines = itrG.value();
65 
66  itrGNext = itrG;
67  itrGNext++;
68 
69  if (!curveNames.contains (curveName)) {
70 
71  delete graphicsLines;
72  m_graphicsLinesForCurve.remove (curveName);
73  }
74  }
75 }
76 
78 {
79  LOG4CPP_INFO_S ((*mainCat)) << "GraphicsLinesForCurves::lineMembershipPurge";
80 
81  GraphicsLinesContainer::const_iterator itr;
82  for (itr = m_graphicsLinesForCurve.begin (); itr != m_graphicsLinesForCurve.end (); itr++) {
83 
84  const QString curveName = itr.key ();
85  GraphicsLinesForCurve *graphicsLines = itr.value();
86 
87  graphicsLines->lineMembershipPurge (curveStyles.lineStyle (curveName));
88  }
89 }
90 
92 {
93  LOG4CPP_INFO_S ((*mainCat)) << "GraphicsLinesForCurves::lineMembershipReset";
94 
95  GraphicsLinesContainer::const_iterator itr;
96  for (itr = m_graphicsLinesForCurve.begin (); itr != m_graphicsLinesForCurve.end (); itr++) {
97 
98  GraphicsLinesForCurve *graphicsLines = itr.value();
99 
100  graphicsLines->lineMembershipReset ();
101  }
102 }
103 
105 {
106  QString text;
107  QTextStream str (&text);
108 
109  printStream ("", str);
110  std::cerr << text.toLatin1().data();
111 }
112 
113 void GraphicsLinesForCurves::printStream (QString indentation,
114  QTextStream &str) const
115 {
116  str << indentation << "GraphicsLinesForCurves\n";
117 
118  indentation += INDENTATION_DELTA;
119 
120  GraphicsLinesContainer::const_iterator itr;
121  for (itr = m_graphicsLinesForCurve.begin (); itr != m_graphicsLinesForCurve.end (); itr++) {
122 
123  const GraphicsLinesForCurve *graphicsLines = itr.value();
124 
125  graphicsLines->printStream (indentation,
126  str);
127  }
128 }
129 
130 void GraphicsLinesForCurves::removePoint(const QString &identifier)
131 {
132  LOG4CPP_INFO_S ((*mainCat)) << "GraphicsLinesForCurves::removePoint"
133  << " point=" << identifier.toLatin1().data ()
134  << " curveCount=" << m_graphicsLinesForCurve.count();
135 
136  QString curveName = Point::curveNameFromPointIdentifier(identifier);
137 
138  ENGAUGE_ASSERT (m_graphicsLinesForCurve.contains (curveName));
139  double ordinal = m_graphicsLinesForCurve [curveName]->identifierToOrdinal (identifier);
140  m_graphicsLinesForCurve [curveName]->removePoint(ordinal);
141 }
142 
144 {
145  LOG4CPP_INFO_S ((*mainCat)) << "GraphicsLinesForCurves::removeTemporaryPointIfExists";
146 
148 
149  ENGAUGE_ASSERT (m_graphicsLinesForCurve.contains (curveName));
150  m_graphicsLinesForCurve [curveName]->removeTemporaryPointIfExists ();
151 }
152 
154 {
155  LOG4CPP_INFO_S ((*mainCat)) << "GraphicsLinesForCurves::resetOnLoad";
156 
157  GraphicsLinesContainer::iterator itr;
158  for (itr = m_graphicsLinesForCurve.begin(); itr != m_graphicsLinesForCurve.end(); itr++) {
159  GraphicsLinesForCurve *curve = itr.value();
160  delete curve;
161  }
162 
163  m_graphicsLinesForCurve.clear();
164 }
165 
167  const CurveStyles &curveStyles,
168  const QString &curveName,
169  const Point &point)
170 {
171  LOG4CPP_DEBUG_S ((*mainCat)) << "GraphicsLinesForCurves::updateAfterCommand"
172  << " point=" << point.identifier().toLatin1().data()
173  << " curveCount=" << m_graphicsLinesForCurve.count();
174 
175  ENGAUGE_ASSERT (m_graphicsLinesForCurve.contains (curveName));
176  m_graphicsLinesForCurve [curveName]->updateAfterCommand (scene,
177  curveStyles.pointStyle(curveName),
178  point);
179 }
180 
182 {
183  LOG4CPP_INFO_S ((*mainCat)) << "GraphicsLinesForCurves::updateCurveStyles";
184 
185  GraphicsLinesContainer::const_iterator itr;
186  for (itr = m_graphicsLinesForCurve.begin (); itr != m_graphicsLinesForCurve.end (); itr++) {
187 
188  QString curveName = itr.key();
189 
190  m_graphicsLinesForCurve [curveName]->updateCurveStyle (modelCurveStyles.curveStyle (curveName));
191  }
192 }
193 
195 {
196  LOG4CPP_INFO_S ((*mainCat)) << "GraphicsLinesForCurves::updateGraphicsLinesToMatchGraphicsPoints";
197 
198  GraphicsLinesContainer::const_iterator itr;
199  for (itr = m_graphicsLinesForCurve.begin (); itr != m_graphicsLinesForCurve.end (); itr++) {
200 
201  QString curveName = itr.key();
202 
203  // This is where we add lines for non-axes curves
204  if (curveName != AXIS_CURVE_NAME) {
205 
206  m_graphicsLinesForCurve [curveName]->updateGraphicsLinesToMatchGraphicsPoints(curveStyles.lineStyle (curveName));
207  }
208  }
209 }
210 
212  const Transformation &transformation)
213 {
214  LOG4CPP_INFO_S ((*mainCat)) << "GraphicsLinesForCurves::updatePointOrdinalsAfterDrag";
215 
216  GraphicsLinesContainer::const_iterator itr;
217  for (itr = m_graphicsLinesForCurve.begin (); itr != m_graphicsLinesForCurve.end (); itr++) {
218 
219  QString curveName = itr.key();
220  GraphicsLinesForCurve *graphicsLines = itr.value();
221 
222  graphicsLines->updatePointOrdinalsAfterDrag (curveStyles.lineStyle (curveName),
223  transformation);
224  }
225 }
void lineMembershipPurge(const CurveStyles &curveStyles)
Mark the end of addPoint calls. Remove stale lines, insert missing lines, and draw the graphics lines...
void removePoint(const QString &identifier)
Remove the specified point. The act of deleting it will automatically remove it from the GraphicsScen...
static QString curveNameFromPointIdentifier(const QString &pointIdentifier)
Parse the curve name from the specified point identifier. This does the opposite of uniqueIdentifierG...
Definition: Point.cpp:202
void lineMembershipReset()
Mark points as unwanted. Afterwards, lineMembershipPurge gets called.
const PointStyle pointStyle(const QString &curveName) const
Get method for copying one point style. Cannot return just a reference or else there is a warning abo...
void print() const
Debugging method for printing directly from symbolic debugger.
GraphicsLinesForCurves()
Single constructor.
Model for DlgSettingsCurveProperties and CmdSettingsCurveProperties.
Definition: CurveStyles.h:16
void addPoint(const QString &curveName, const QString &pointIdentifier, double ordinal, GraphicsPoint &point)
Add new point.
void lineMembershipReset()
Mark points as unwanted. Afterwards, lineMembershipPurge gets called.
void removeTemporaryPointIfExists()
Remove temporary point if it exists.
Class that represents one digitized point. The screen-to-graph coordinate transformation is always ex...
Definition: Point.h:17
static QString temporaryPointIdentifier()
Point identifier for temporary point that is used by DigitzeStateAxis.
Definition: Point.cpp:442
QString identifier() const
Unique identifier for a specific Point.
Definition: Point.cpp:218
void updatePointOrdinalsAfterDrag(const CurveStyles &curveStyles, const Transformation &transformation)
See GraphicsScene::updateOrdinalsAfterDrag.
void updatePointOrdinalsAfterDrag(const LineStyle &lineStyle, const Transformation &transformation)
See GraphicsScene::updateOrdinalsAfterDrag. Pretty much the same steps as Curve::updatePointOrdinals...
const LineStyle lineStyle(const QString &curveName) const
Get method for copying one line style in one step.
Definition: CurveStyles.cpp:90
This class stores the GraphicsLine objects for one Curve.
void updateGraphicsLinesToMatchGraphicsPoints(const CurveStyles &curveStyles)
Calls to moveLinesWithDraggedPoint have finished so update the lines correspondingly.
Affine transformation between screen and graph coordinates, based on digitized axis points...
void printStream(QString indentation, QTextStream &str) const
Debugging method that supports print method of this class and printStream method of some other class(...
void updateAfterCommand(GraphicsScene &scene, const CurveStyles &curveStyles, const QString &curveName, const Point &point)
Update the GraphicsScene with the specified Point from the Document. If it does not exist yet in the ...
void printStream(QString indentation, QTextStream &str) const
Debugging method that supports print method of this class and printStream method of some other class(...
Graphics item for drawing a circular or polygonal Point.
Definition: GraphicsPoint.h:33
CurveStyle curveStyle(const QString &curveName) const
CurveStyle in specified curve.
Definition: CurveStyles.cpp:72
void updateCurveStyles(const CurveStyles &modelCurveStyles)
Update the curve style for every curve.
QPointF pos() const
Proxy method for QGraphicsItem::pos.
Add point and line handling to generic QGraphicsScene.
Definition: GraphicsScene.h:25
void resetOnLoad()
Reset, when loading a document after the first, to same state that first document was at when loaded...
void lineMembershipPurge(const LineStyle &lineStyle)
Mark the end of addPoint calls. Remove stale lines, insert missing lines, and draw the graphics lines...
void addRemoveCurves(GraphicsScene &scene, const QStringList &curveNames)
Add new curves and remove expired curves to match the specified list.