00001
00002
00003
00004
00005
00006
00007 #include "CmdAddPointAxis.h"
00008 #include "CmdMediator.h"
00009 #include "CursorFactory.h"
00010 #include "DigitizeStateAxis.h"
00011 #include "DigitizeStateContext.h"
00012 #include "DlgEditPoint.h"
00013 #include "Document.h"
00014 #include "GraphicsScene.h"
00015 #include "GraphicsView.h"
00016 #include "Logger.h"
00017 #include "MainWindow.h"
00018 #include "PointStyle.h"
00019 #include <QCursor>
00020 #include <QImage>
00021 #include <QMessageBox>
00022 #include <QTimer>
00023
00024 DigitizeStateAxis::DigitizeStateAxis (DigitizeStateContext &context) :
00025 DigitizeStateAbstractBase (context)
00026 {
00027 }
00028
00029 DigitizeStateAxis::~DigitizeStateAxis ()
00030 {
00031 }
00032
00033 QString DigitizeStateAxis::activeCurve () const
00034 {
00035 return AXIS_CURVE_NAME;
00036 }
00037
00038 void DigitizeStateAxis::begin (CmdMediator *cmdMediator,
00039 DigitizeState )
00040 {
00041 LOG4CPP_INFO_S ((*mainCat)) << "DigitizeStateAxis::begin";
00042
00043 setCursor(cmdMediator);
00044 context().setDragMode(QGraphicsView::NoDrag);
00045 context().mainWindow().updateViewsOfSettings(activeCurve ());
00046 }
00047
00048 void DigitizeStateAxis::createTemporaryPoint (CmdMediator *cmdMediator,
00049 const QPointF &posScreen)
00050 {
00051 LOG4CPP_DEBUG_S ((*mainCat)) << "DigitizeStateAxis::createTemporaryPoint";
00052
00053
00054 const Curve &curveAxes = cmdMediator->curveAxes();
00055 PointStyle pointStyleAxes = curveAxes.curveStyle().pointStyle();
00056 GraphicsPoint *point = context().mainWindow().scene().createPoint(Point::temporaryPointIdentifier (),
00057 pointStyleAxes,
00058 posScreen);
00059
00060 context().mainWindow().scene().addTemporaryPoint (Point::temporaryPointIdentifier(),
00061 point);
00062 }
00063
00064 QCursor DigitizeStateAxis::cursor(CmdMediator *cmdMediator) const
00065 {
00066 LOG4CPP_DEBUG_S ((*mainCat)) << "DigitizeStateAxis::cursor";
00067
00068 CursorFactory cursorFactory;
00069 QCursor cursor = cursorFactory.generate (cmdMediator->document().modelDigitizeCurve());
00070
00071 return cursor;
00072 }
00073
00074 void DigitizeStateAxis::end ()
00075 {
00076 LOG4CPP_INFO_S ((*mainCat)) << "DigitizeStateAxis::end";
00077 }
00078
00079 void DigitizeStateAxis::handleCurveChange(CmdMediator * )
00080 {
00081 LOG4CPP_INFO_S ((*mainCat)) << "DigitizeStateAxis::handleCurveChange";
00082 }
00083
00084 void DigitizeStateAxis::handleKeyPress (CmdMediator * ,
00085 Qt::Key key,
00086 bool )
00087 {
00088 LOG4CPP_INFO_S ((*mainCat)) << "DigitizeStateAxis::handleKeyPress"
00089 << " key=" << QKeySequence (key).toString ().toLatin1 ().data ();
00090 }
00091
00092 void DigitizeStateAxis::handleMouseMove (CmdMediator * ,
00093 QPointF )
00094 {
00095
00096 }
00097
00098 void DigitizeStateAxis::handleMousePress (CmdMediator * ,
00099 QPointF )
00100 {
00101 LOG4CPP_INFO_S ((*mainCat)) << "DigitizeStateAxis::handleMousePress";
00102 }
00103
00104 void DigitizeStateAxis::handleMouseRelease (CmdMediator *cmdMediator,
00105 QPointF posScreen)
00106 {
00107 LOG4CPP_INFO_S ((*mainCat)) << "DigitizeStateAxis::handleMouseRelease";
00108
00109 if (context().mainWindow().transformIsDefined()) {
00110
00111 QMessageBox::warning (0,
00112 QObject::tr ("Engauge Digitizer"),
00113 QObject::tr ("Three axis points have been defined, and no more are needed or allowed."));
00114
00115 } else {
00116
00117 createTemporaryPoint (cmdMediator,
00118 posScreen);
00119
00120
00121 DlgEditPoint *dlg = new DlgEditPoint (context ().mainWindow (),
00122 *this,
00123 cmdMediator->document().modelCoords(),
00124 context().mainWindow().modelMainWindow(),
00125 cursor (cmdMediator),
00126 context().mainWindow().transformation(),
00127 cmdMediator->document().documentAxesPointsRequired());
00128 int rtn = dlg->exec ();
00129
00130 bool isXOnly;
00131 QPointF posGraph = dlg->posGraph (isXOnly);
00132 delete dlg;
00133
00134
00135 context().mainWindow().scene().removePoint(Point::temporaryPointIdentifier ());
00136
00137 if (rtn == QDialog::Accepted) {
00138
00139
00140
00141 bool isError;
00142 QString errorMessage;
00143 int nextOrdinal = cmdMediator->document().nextOrdinalForCurve(AXIS_CURVE_NAME);
00144
00145 cmdMediator->document().checkAddPointAxis(posScreen,
00146 posGraph,
00147 isError,
00148 errorMessage,
00149 isXOnly);
00150
00151 if (isError) {
00152
00153 QMessageBox::warning (0,
00154 QObject::tr ("Engauge Digitizer"),
00155 errorMessage);
00156
00157 } else {
00158
00159
00160 Document &document = cmdMediator->document ();
00161 QUndoCommand *cmd = new CmdAddPointAxis (context ().mainWindow(),
00162 document,
00163 posScreen,
00164 posGraph,
00165 nextOrdinal,
00166 isXOnly);
00167 context().appendNewCmd(cmdMediator,
00168 cmd);
00169 }
00170 }
00171 }
00172 }
00173
00174 QString DigitizeStateAxis::state() const
00175 {
00176 return "DigitizeStateAxis";
00177 }
00178
00179 void DigitizeStateAxis::updateModelDigitizeCurve (CmdMediator *cmdMediator,
00180 const DocumentModelDigitizeCurve & )
00181 {
00182 LOG4CPP_INFO_S ((*mainCat)) << "DigitizeStateAxis::updateModelDigitizeCurve";
00183
00184 setCursor(cmdMediator);
00185 }
00186
00187 void DigitizeStateAxis::updateModelSegments(const DocumentModelSegments & )
00188 {
00189 LOG4CPP_INFO_S ((*mainCat)) << "DigitizeStateAxis::updateModelSegments";
00190 }