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 "DlgEditPointAxis.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 bool DigitizeStateAxis::canPaste (const Transformation & ,
00049 const QSize & ) const
00050 {
00051 return false;
00052 }
00053
00054 void DigitizeStateAxis::createTemporaryPoint (CmdMediator *cmdMediator,
00055 const QPointF &posScreen)
00056 {
00057 LOG4CPP_DEBUG_S ((*mainCat)) << "DigitizeStateAxis::createTemporaryPoint";
00058
00059 GeometryWindow *NULL_GEOMETRY_WINDOW = 0;
00060
00061
00062 const Curve &curveAxes = cmdMediator->curveAxes();
00063 PointStyle pointStyleAxes = curveAxes.curveStyle().pointStyle();
00064 GraphicsPoint *point = context().mainWindow().scene().createPoint(Point::temporaryPointIdentifier (),
00065 pointStyleAxes,
00066 posScreen,
00067 NULL_GEOMETRY_WINDOW);
00068
00069 context().mainWindow().scene().addTemporaryPoint (Point::temporaryPointIdentifier(),
00070 point);
00071 }
00072
00073 QCursor DigitizeStateAxis::cursor(CmdMediator *cmdMediator) const
00074 {
00075 LOG4CPP_DEBUG_S ((*mainCat)) << "DigitizeStateAxis::cursor";
00076
00077 CursorFactory cursorFactory;
00078 QCursor cursor = cursorFactory.generate (cmdMediator->document().modelDigitizeCurve());
00079
00080 return cursor;
00081 }
00082
00083 void DigitizeStateAxis::end ()
00084 {
00085 LOG4CPP_INFO_S ((*mainCat)) << "DigitizeStateAxis::end";
00086 }
00087
00088 void DigitizeStateAxis::handleContextMenuEventAxis (CmdMediator * ,
00089 const QString &pointIdentifier)
00090 {
00091 LOG4CPP_INFO_S ((*mainCat)) << "DigitizeStateAxis::handleContextMenuEventAxis "
00092 << " point=" << pointIdentifier.toLatin1 ().data ();
00093 }
00094
00095 void DigitizeStateAxis::handleContextMenuEventGraph (CmdMediator * ,
00096 const QStringList &pointIdentifiers)
00097 {
00098 LOG4CPP_INFO_S ((*mainCat)) << "DigitizeStateAxis::handleContextMenuEventGraph "
00099 << "points=" << pointIdentifiers.join(",").toLatin1 ().data ();
00100 }
00101
00102 void DigitizeStateAxis::handleCurveChange(CmdMediator * )
00103 {
00104 LOG4CPP_INFO_S ((*mainCat)) << "DigitizeStateAxis::handleCurveChange";
00105 }
00106
00107 void DigitizeStateAxis::handleKeyPress (CmdMediator * ,
00108 Qt::Key key,
00109 bool )
00110 {
00111 LOG4CPP_INFO_S ((*mainCat)) << "DigitizeStateAxis::handleKeyPress"
00112 << " key=" << QKeySequence (key).toString ().toLatin1 ().data ();
00113 }
00114
00115 void DigitizeStateAxis::handleMouseMove (CmdMediator * ,
00116 QPointF )
00117 {
00118
00119 }
00120
00121 void DigitizeStateAxis::handleMousePress (CmdMediator * ,
00122 QPointF )
00123 {
00124 LOG4CPP_INFO_S ((*mainCat)) << "DigitizeStateAxis::handleMousePress";
00125 }
00126
00127 void DigitizeStateAxis::handleMouseRelease (CmdMediator *cmdMediator,
00128 QPointF posScreen)
00129 {
00130 LOG4CPP_INFO_S ((*mainCat)) << "DigitizeStateAxis::handleMouseRelease";
00131
00132 if (context().mainWindow().transformIsDefined()) {
00133
00134 QMessageBox::warning (0,
00135 QObject::tr ("Engauge Digitizer"),
00136 QObject::tr ("Three axis points have been defined, and no more are needed or allowed."));
00137
00138 } else {
00139
00140 createTemporaryPoint (cmdMediator,
00141 posScreen);
00142
00143
00144 DlgEditPointAxis *dlg = new DlgEditPointAxis (context ().mainWindow (),
00145 cmdMediator->document().modelCoords(),
00146 cmdMediator->document().modelGeneral(),
00147 context().mainWindow().modelMainWindow(),
00148 context().mainWindow().transformation(),
00149 cmdMediator->document().documentAxesPointsRequired());
00150 int rtn = dlg->exec ();
00151
00152 bool isXOnly;
00153 QPointF posGraph = dlg->posGraph (isXOnly);
00154 delete dlg;
00155
00156
00157 context().mainWindow().scene().removePoint(Point::temporaryPointIdentifier ());
00158
00159 if (rtn == QDialog::Accepted) {
00160
00161
00162
00163 bool isError;
00164 QString errorMessage;
00165 int nextOrdinal = cmdMediator->document().nextOrdinalForCurve(AXIS_CURVE_NAME);
00166
00167 cmdMediator->document().checkAddPointAxis(posScreen,
00168 posGraph,
00169 isError,
00170 errorMessage,
00171 isXOnly);
00172
00173 if (isError) {
00174
00175 QMessageBox::warning (0,
00176 QObject::tr ("Engauge Digitizer"),
00177 errorMessage);
00178
00179 } else {
00180
00181
00182 Document &document = cmdMediator->document ();
00183 QUndoCommand *cmd = new CmdAddPointAxis (context ().mainWindow(),
00184 document,
00185 posScreen,
00186 posGraph,
00187 nextOrdinal,
00188 isXOnly);
00189 context().appendNewCmd(cmdMediator,
00190 cmd);
00191 }
00192 }
00193 }
00194 }
00195
00196 QString DigitizeStateAxis::state() const
00197 {
00198 return "DigitizeStateAxis";
00199 }
00200
00201 void DigitizeStateAxis::updateAfterPointAddition ()
00202 {
00203 LOG4CPP_INFO_S ((*mainCat)) << "DigitizeStateAxis::updateAfterPointAddition";
00204 }
00205
00206 void DigitizeStateAxis::updateModelDigitizeCurve (CmdMediator *cmdMediator,
00207 const DocumentModelDigitizeCurve & )
00208 {
00209 LOG4CPP_INFO_S ((*mainCat)) << "DigitizeStateAxis::updateModelDigitizeCurve";
00210
00211 setCursor(cmdMediator);
00212 }
00213
00214 void DigitizeStateAxis::updateModelSegments(const DocumentModelSegments & )
00215 {
00216 LOG4CPP_INFO_S ((*mainCat)) << "DigitizeStateAxis::updateModelSegments";
00217 }