00001
00002
00003
00004
00005
00006
00007 #include "Curve.h"
00008 #include "CurveStyles.h"
00009 #include "DataKey.h"
00010 #include "EngaugeAssert.h"
00011 #include "GraphicsLinesForCurve.h"
00012 #include "GraphicsLinesForCurves.h"
00013 #include "GraphicsPoint.h"
00014 #include "GraphicsPointAbstractBase.h"
00015 #include "GraphicsScene.h"
00016 #include <iostream>
00017 #include "Logger.h"
00018 #include "Point.h"
00019 #include <QGraphicsItem>
00020 #include <QTextStream>
00021 #include "QtToString.h"
00022 #include "Transformation.h"
00023
00024 GraphicsLinesForCurves::GraphicsLinesForCurves()
00025 {
00026 }
00027
00028 void GraphicsLinesForCurves::addPoint (const QString &curveName,
00029 const QString &pointIdentifier,
00030 double ordinal,
00031 GraphicsPoint &point)
00032 {
00033 LOG4CPP_INFO_S ((*mainCat)) << "GraphicsLinesForCurves::addPoint"
00034 << " curve=" << curveName.toLatin1().data()
00035 << " identifier=" << pointIdentifier.toLatin1().data()
00036 << " ordinal=" << ordinal
00037 << " pos=" << QPointFToString (point.pos()).toLatin1().data();
00038
00039 m_graphicsLinesForCurve [curveName]->addPoint (pointIdentifier,
00040 ordinal,
00041 point);
00042 }
00043
00044 void GraphicsLinesForCurves::addRemoveCurves (GraphicsScene &scene,
00045 const QStringList &curveNames)
00046 {
00047 LOG4CPP_INFO_S ((*mainCat)) << "GraphicsLinesForCurves::addRemoveCurves"
00048 << " curveCount=" << m_graphicsLinesForCurve.count();
00049
00050
00051 QStringList::const_iterator itrC;
00052 for (itrC = curveNames.begin (); itrC != curveNames.end (); itrC++) {
00053
00054 QString curveName = *itrC;
00055
00056 if (!m_graphicsLinesForCurve.contains (curveName)) {
00057
00058 GraphicsLinesForCurve *item = new GraphicsLinesForCurve(curveName);
00059 scene.addItem (item);
00060
00061 m_graphicsLinesForCurve [curveName] = item;
00062 }
00063 }
00064
00065
00066 GraphicsLinesContainer::const_iterator itrG, itrGNext;
00067 for (itrG = m_graphicsLinesForCurve.begin (); itrG != m_graphicsLinesForCurve.end (); itrG = itrGNext) {
00068
00069 const QString curveName = itrG.key ();
00070 GraphicsLinesForCurve *graphicsLines = itrG.value();
00071
00072 itrGNext = itrG;
00073 itrGNext++;
00074
00075 if (!curveNames.contains (curveName)) {
00076
00077 delete graphicsLines;
00078 m_graphicsLinesForCurve.remove (curveName);
00079 }
00080 }
00081 }
00082
00083 void GraphicsLinesForCurves::lineMembershipPurge(const CurveStyles &curveStyles)
00084 {
00085 LOG4CPP_INFO_S ((*mainCat)) << "GraphicsLinesForCurves::lineMembershipPurge";
00086
00087 GraphicsLinesContainer::const_iterator itr;
00088 for (itr = m_graphicsLinesForCurve.begin (); itr != m_graphicsLinesForCurve.end (); itr++) {
00089
00090 const QString curveName = itr.key ();
00091 GraphicsLinesForCurve *graphicsLines = itr.value();
00092
00093 graphicsLines->lineMembershipPurge (curveStyles.lineStyle (curveName));
00094 }
00095 }
00096
00097 void GraphicsLinesForCurves::lineMembershipReset()
00098 {
00099 LOG4CPP_INFO_S ((*mainCat)) << "GraphicsLinesForCurves::lineMembershipReset";
00100
00101 GraphicsLinesContainer::const_iterator itr;
00102 for (itr = m_graphicsLinesForCurve.begin (); itr != m_graphicsLinesForCurve.end (); itr++) {
00103
00104 GraphicsLinesForCurve *graphicsLines = itr.value();
00105
00106 graphicsLines->lineMembershipReset ();
00107 }
00108 }
00109
00110 void GraphicsLinesForCurves::print () const
00111 {
00112 QString text;
00113 QTextStream str (&text);
00114
00115 printStream ("", str);
00116 std::cerr << text.toLatin1().data();
00117 }
00118
00119 void GraphicsLinesForCurves::printStream (QString indentation,
00120 QTextStream &str) const
00121 {
00122 str << indentation << "GraphicsLinesForCurves\n";
00123
00124 indentation += INDENTATION_DELTA;
00125
00126 GraphicsLinesContainer::const_iterator itr;
00127 for (itr = m_graphicsLinesForCurve.begin (); itr != m_graphicsLinesForCurve.end (); itr++) {
00128
00129 const GraphicsLinesForCurve *graphicsLines = itr.value();
00130
00131 graphicsLines->printStream (indentation,
00132 str);
00133 }
00134 }
00135
00136 void GraphicsLinesForCurves::removePoint(const QString &identifier)
00137 {
00138 LOG4CPP_INFO_S ((*mainCat)) << "GraphicsLinesForCurves::removePoint"
00139 << " point=" << identifier.toLatin1().data ()
00140 << " curveCount=" << m_graphicsLinesForCurve.count();
00141
00142 QString curveName = Point::curveNameFromPointIdentifier(identifier);
00143
00144 ENGAUGE_ASSERT (m_graphicsLinesForCurve.contains (curveName));
00145 double ordinal = m_graphicsLinesForCurve [curveName]->identifierToOrdinal (identifier);
00146 m_graphicsLinesForCurve [curveName]->removePoint(ordinal);
00147 }
00148
00149 void GraphicsLinesForCurves::removeTemporaryPointIfExists()
00150 {
00151 LOG4CPP_INFO_S ((*mainCat)) << "GraphicsLinesForCurves::removeTemporaryPointIfExists";
00152
00153 QString curveName = Point::curveNameFromPointIdentifier(Point::temporaryPointIdentifier());
00154
00155 ENGAUGE_ASSERT (m_graphicsLinesForCurve.contains (curveName));
00156 m_graphicsLinesForCurve [curveName]->removeTemporaryPointIfExists ();
00157 }
00158
00159 void GraphicsLinesForCurves::resetOnLoad()
00160 {
00161 LOG4CPP_INFO_S ((*mainCat)) << "GraphicsLinesForCurves::resetOnLoad";
00162
00163 GraphicsLinesContainer::iterator itr;
00164 for (itr = m_graphicsLinesForCurve.begin(); itr != m_graphicsLinesForCurve.end(); itr++) {
00165 GraphicsLinesForCurve *curve = itr.value();
00166 delete curve;
00167 }
00168
00169 m_graphicsLinesForCurve.clear();
00170 }
00171
00172 void GraphicsLinesForCurves::updateAfterCommand (GraphicsScene &scene,
00173 const CurveStyles &curveStyles,
00174 const QString &curveName,
00175 const Point &point)
00176 {
00177 LOG4CPP_DEBUG_S ((*mainCat)) << "GraphicsLinesForCurves::updateAfterCommand"
00178 << " point=" << point.identifier().toLatin1().data()
00179 << " curveCount=" << m_graphicsLinesForCurve.count();
00180
00181 ENGAUGE_ASSERT (m_graphicsLinesForCurve.contains (curveName));
00182 m_graphicsLinesForCurve [curveName]->updateAfterCommand (scene,
00183 curveStyles.pointStyle(curveName),
00184 point);
00185 }
00186
00187 void GraphicsLinesForCurves::updateCurveStyles (const CurveStyles &modelCurveStyles)
00188 {
00189 LOG4CPP_INFO_S ((*mainCat)) << "GraphicsLinesForCurves::updateCurveStyles";
00190
00191 GraphicsLinesContainer::const_iterator itr;
00192 for (itr = m_graphicsLinesForCurve.begin (); itr != m_graphicsLinesForCurve.end (); itr++) {
00193
00194 QString curveName = itr.key();
00195
00196 m_graphicsLinesForCurve [curveName]->updateCurveStyle (modelCurveStyles.curveStyle (curveName));
00197 }
00198 }
00199
00200 void GraphicsLinesForCurves::updateGraphicsLinesToMatchGraphicsPoints (const CurveStyles &curveStyles)
00201 {
00202 LOG4CPP_INFO_S ((*mainCat)) << "GraphicsLinesForCurves::updateGraphicsLinesToMatchGraphicsPoints";
00203
00204 GraphicsLinesContainer::const_iterator itr;
00205 for (itr = m_graphicsLinesForCurve.begin (); itr != m_graphicsLinesForCurve.end (); itr++) {
00206
00207 QString curveName = itr.key();
00208
00209
00210 if (curveName != AXIS_CURVE_NAME) {
00211
00212 m_graphicsLinesForCurve [curveName]->updateGraphicsLinesToMatchGraphicsPoints(curveStyles.lineStyle (curveName));
00213 }
00214 }
00215 }
00216
00217 void GraphicsLinesForCurves::updatePointOrdinalsAfterDrag (const CurveStyles &curveStyles,
00218 const Transformation &transformation)
00219 {
00220 LOG4CPP_INFO_S ((*mainCat)) << "GraphicsLinesForCurves::updatePointOrdinalsAfterDrag";
00221
00222 GraphicsLinesContainer::const_iterator itr;
00223 for (itr = m_graphicsLinesForCurve.begin (); itr != m_graphicsLinesForCurve.end (); itr++) {
00224
00225 QString curveName = itr.key();
00226 GraphicsLinesForCurve *graphicsLines = itr.value();
00227
00228 graphicsLines->updatePointOrdinalsAfterDrag (curveStyles.lineStyle (curveName),
00229 transformation);
00230 }
00231 }