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