00001
00002
00003
00004
00005
00006
00007 #include "CmdAddPointsGraph.h"
00008 #include "DigitizeStateContext.h"
00009 #include "DigitizeStateSegment.h"
00010 #include "EngaugeAssert.h"
00011 #include "Logger.h"
00012 #include "MainWindow.h"
00013 #include "OrdinalGenerator.h"
00014 #include <QGraphicsPixmapItem>
00015 #include <QGraphicsScene>
00016 #include <QImage>
00017 #include "Segment.h"
00018 #include "SegmentFactory.h"
00019
00020 DigitizeStateSegment::DigitizeStateSegment (DigitizeStateContext &context) :
00021 DigitizeStateAbstractBase (context)
00022 {
00023 }
00024
00025 DigitizeStateSegment::~DigitizeStateSegment ()
00026 {
00027 }
00028
00029 QString DigitizeStateSegment::activeCurve () const
00030 {
00031 return context().mainWindow().selectedGraphCurve();
00032 }
00033
00034 void DigitizeStateSegment::begin (CmdMediator *cmdMediator,
00035 DigitizeState )
00036 {
00037 LOG4CPP_INFO_S ((*mainCat)) << "DigitizeStateSegment::begin";
00038
00039 m_cmdMediator = cmdMediator;
00040
00041 setCursor(cmdMediator);
00042 context().setDragMode(QGraphicsView::NoDrag);
00043 context().mainWindow().updateViewsOfSettings(activeCurve ());
00044
00045 handleCurveChange(cmdMediator);
00046 }
00047
00048 QCursor DigitizeStateSegment::cursor(CmdMediator * ) const
00049 {
00050 LOG4CPP_DEBUG_S ((*mainCat)) << "DigitizeStateSegment::cursor";
00051
00052 return QCursor (Qt::ArrowCursor);
00053 }
00054
00055 void DigitizeStateSegment::end ()
00056 {
00057 LOG4CPP_INFO_S ((*mainCat)) << "DigitizeStateSegment::end";
00058
00059 GraphicsScene &scene = context().mainWindow().scene();
00060 SegmentFactory segmentFactory ((QGraphicsScene &) scene,
00061 context().isGnuplot());
00062
00063 segmentFactory.clearSegments(m_segments);
00064 }
00065
00066 void DigitizeStateSegment::handleContextMenuEventAxis (CmdMediator * ,
00067 const QString &pointIdentifier)
00068 {
00069 LOG4CPP_INFO_S ((*mainCat)) << "DigitizeStateSegment::handleContextMenuEventAxis "
00070 << " point=" << pointIdentifier.toLatin1 ().data ();
00071 }
00072
00073 void DigitizeStateSegment::handleContextMenuEventGraph (CmdMediator * ,
00074 const QStringList &pointIdentifiers)
00075 {
00076 LOG4CPP_INFO_S ((*mainCat)) << "DigitizeStateSegment ::handleContextMenuEventGraph "
00077 << "points=" << pointIdentifiers.join(",").toLatin1 ().data ();
00078 }
00079
00080 void DigitizeStateSegment::handleCurveChange(CmdMediator *cmdMediator)
00081 {
00082 LOG4CPP_INFO_S ((*mainCat)) << "DigitizeStateSegment::handleCurveChange";
00083
00084 QImage img = context().mainWindow().imageFiltered();
00085
00086 GraphicsScene &scene = context().mainWindow().scene();
00087 SegmentFactory segmentFactory ((QGraphicsScene &) scene,
00088 context().isGnuplot());
00089
00090 segmentFactory.clearSegments (m_segments);
00091
00092
00093 segmentFactory.makeSegments (img,
00094 cmdMediator->document().modelSegments(),
00095 m_segments);
00096
00097
00098 QList<Segment*>::iterator itr;
00099 for (itr = m_segments.begin(); itr != m_segments.end(); itr++) {
00100 Segment *segment = *itr;
00101
00102 LOG4CPP_INFO_S ((*mainCat)) << "DigitizeStateSegment::handleCurveChange"
00103 << " lines=" << segment->lineCount();
00104
00105 connect (segment, SIGNAL (signalMouseClickOnSegment (QPointF)), this, SLOT (slotMouseClickOnSegment (QPointF)));
00106 }
00107 }
00108
00109 void DigitizeStateSegment::handleKeyPress (CmdMediator * ,
00110 Qt::Key key,
00111 bool )
00112 {
00113 LOG4CPP_INFO_S ((*mainCat)) << "DigitizeStateSegment::handleKeyPress"
00114 << " key=" << QKeySequence (key).toString ().toLatin1 ().data ();
00115 }
00116
00117 void DigitizeStateSegment::handleMouseMove (CmdMediator * ,
00118 QPointF )
00119 {
00120
00121 }
00122
00123 void DigitizeStateSegment::handleMousePress (CmdMediator * ,
00124 QPointF )
00125 {
00126 LOG4CPP_INFO_S ((*mainCat)) << "DigitizeStateSegment::handleMousePress";
00127 }
00128
00129 void DigitizeStateSegment::handleMouseRelease (CmdMediator * ,
00130 QPointF )
00131 {
00132 LOG4CPP_INFO_S ((*mainCat)) << "DigitizeStateSegment::handleMouseRelease";
00133 }
00134
00135 Segment *DigitizeStateSegment::segmentFromSegmentStart (const QPointF &posSegmentStart) const
00136 {
00137 LOG4CPP_INFO_S ((*mainCat)) << "DigitizeStateSegment::segmentFromSegmentStart"
00138 << " segments=" << m_segments.count();
00139
00140 QList<Segment*>::const_iterator itr;
00141 for (itr = m_segments.begin(); itr != m_segments.end(); itr++) {
00142 Segment *segment = *itr;
00143
00144 if (segment->firstPoint() == posSegmentStart) {
00145
00146 return segment;
00147 }
00148 }
00149
00150 LOG4CPP_ERROR_S ((*mainCat)) << "DigitizeStateSegment::segmentFromSegmentStart";
00151 ENGAUGE_ASSERT (false);
00152 return 0;
00153 }
00154
00155 void DigitizeStateSegment::slotMouseClickOnSegment(QPointF posSegmentStart)
00156 {
00157 LOG4CPP_INFO_S ((*mainCat)) << "DigitizeStateSegment::slotMouseClickOnSegment";
00158
00159 Segment *segment = segmentFromSegmentStart (posSegmentStart);
00160
00161
00162 QList<Segment*> segments;
00163 segments.push_back (segment);
00164
00165
00166 GraphicsScene &scene = context().mainWindow().scene();
00167 SegmentFactory segmentFactory ((QGraphicsScene &) scene,
00168 context().isGnuplot());
00169
00170 QList<QPoint> points = segmentFactory.fillPoints (m_cmdMediator->document().modelSegments(),
00171 segments);
00172
00173
00174 OrdinalGenerator ordinalGenerator;
00175 Document &document = m_cmdMediator->document ();
00176 const Transformation &transformation = context ().mainWindow ().transformation();
00177 QList<double> ordinals;
00178 QList<QPoint>::iterator itr;
00179 for (itr = points.begin(); itr != points.end(); itr++) {
00180
00181 QPoint point = *itr;
00182 ordinals << ordinalGenerator.generateCurvePointOrdinal(document,
00183 transformation,
00184 point,
00185 activeCurve ());
00186 }
00187
00188
00189 QUndoCommand *cmd = new CmdAddPointsGraph (context ().mainWindow(),
00190 document,
00191 context ().mainWindow().selectedGraphCurve(),
00192 points,
00193 ordinals);
00194 context().appendNewCmd(m_cmdMediator,
00195 cmd);
00196 }
00197
00198 QString DigitizeStateSegment::state() const
00199 {
00200 return "DigitizeStateSegment";
00201 }
00202
00203 void DigitizeStateSegment::updateAfterPointAddition ()
00204 {
00205 LOG4CPP_INFO_S ((*mainCat)) << "DigitizeStateSegment::updateAfterPointAddition";
00206 }
00207
00208 void DigitizeStateSegment::updateModelDigitizeCurve (CmdMediator * ,
00209 const DocumentModelDigitizeCurve & )
00210 {
00211 LOG4CPP_INFO_S ((*mainCat)) << "DigitizeStateSegment::updateModelDigitizeCurve";
00212 }
00213
00214 void DigitizeStateSegment::updateModelSegments(const DocumentModelSegments &modelSegments)
00215 {
00216 LOG4CPP_INFO_S ((*mainCat)) << "DigitizeStateSegment::updateModelSegments";
00217
00218 QList<Segment*>::const_iterator itr;
00219 for (itr = m_segments.begin(); itr != m_segments.end(); itr++) {
00220 Segment *segment = *itr;
00221
00222 segment->updateModelSegment (modelSegments);
00223 }
00224 }