00001
00002
00003
00004
00005
00006
00007 #include "CmdEditPointAxis.h"
00008 #include "CmdMediator.h"
00009 #include "DigitizeStateAbstractBase.h"
00010 #include "DigitizeStateContext.h"
00011 #include "DlgEditPoint.h"
00012 #include "Document.h"
00013 #include "Logger.h"
00014 #include "MainWindow.h"
00015 #include <QApplication>
00016 #include <QGraphicsScene>
00017 #include <QImage>
00018 #include <QMessageBox>
00019 #include <QTimer>
00020 #include "QtToString.h"
00021 #include "Version.h"
00022
00023 DigitizeStateAbstractBase::DigitizeStateAbstractBase(DigitizeStateContext &context) :
00024 m_context (context),
00025 m_isOverrideCursor (false)
00026 {
00027 }
00028
00029 DigitizeStateAbstractBase::~DigitizeStateAbstractBase()
00030 {
00031 }
00032
00033 DigitizeStateContext &DigitizeStateAbstractBase::context()
00034 {
00035 return m_context;
00036 }
00037
00038 const DigitizeStateContext &DigitizeStateAbstractBase::context() const
00039 {
00040 return m_context;
00041 }
00042
00043 void DigitizeStateAbstractBase::handleContextMenuEvent (CmdMediator *cmdMediator,
00044 const QString &pointIdentifier)
00045 {
00046 LOG4CPP_INFO_S ((*mainCat)) << "DigitizeStateAbstractBase::handleContextMenuEvent point=" << pointIdentifier.toLatin1 ().data ();
00047
00048 QPointF posScreen = cmdMediator->document().positionScreen (pointIdentifier);
00049 QPointF posGraphBefore = cmdMediator->document().positionGraph (pointIdentifier);
00050 bool isXOnly = cmdMediator->document().isXOnly (pointIdentifier);
00051
00052
00053 double x = posGraphBefore.x();
00054 double y = posGraphBefore.y();
00055
00056 DlgEditPoint *dlg = new DlgEditPoint(context().mainWindow(),
00057 *this,
00058 cmdMediator->document().modelCoords(),
00059 context().mainWindow().modelMainWindow(),
00060 cursor (cmdMediator),
00061 context().mainWindow().transformation(),
00062 cmdMediator->document().documentAxesPointsRequired(),
00063 isXOnly,
00064 &x,
00065 &y);
00066 int rtn = dlg->exec ();
00067
00068 QPointF posGraphAfter = dlg->posGraph (isXOnly);
00069 delete dlg;
00070
00071 if (rtn == QDialog::Accepted) {
00072
00073
00074
00075 bool isError;
00076 QString errorMessage;
00077
00078 context().mainWindow().cmdMediator()->document().checkEditPointAxis(pointIdentifier,
00079 posScreen,
00080 posGraphAfter,
00081 isError,
00082 errorMessage);
00083
00084 if (isError) {
00085
00086 QMessageBox::warning (0,
00087 engaugeWindowTitle(),
00088 errorMessage);
00089
00090 } else {
00091
00092
00093 CmdEditPointAxis *cmd = new CmdEditPointAxis (context().mainWindow(),
00094 cmdMediator->document(),
00095 pointIdentifier,
00096 posGraphBefore,
00097 posGraphAfter,
00098 isXOnly);
00099 context().appendNewCmd(cmdMediator,
00100 cmd);
00101 }
00102 }
00103 }
00104
00105 void DigitizeStateAbstractBase::handleLeave (CmdMediator * )
00106 {
00107 LOG4CPP_DEBUG_S ((*mainCat)) << "DigitizeStateAbstractBase::handleLeave";
00108
00109 removeOverrideCursor ();
00110 }
00111
00112 void DigitizeStateAbstractBase::handleSetOverrideCursor (CmdMediator * ,
00113 const QCursor &cursor)
00114 {
00115 removeOverrideCursor ();
00116
00117 LOG4CPP_INFO_S ((*mainCat)) << "DigitizeStateAbstractBase::handleSetOverrideCursor setOverrideCursor="
00118 << QtCursorToString (cursor.shape ()).toLatin1 ().data ();
00119
00120 QApplication::setOverrideCursor (cursor);
00121 m_isOverrideCursor = true;
00122 }
00123
00124 void DigitizeStateAbstractBase::removeOverrideCursor ()
00125 {
00126 if (m_isOverrideCursor) {
00127
00128 LOG4CPP_INFO_S ((*mainCat)) << "DigitizeStateAbstractBase::handleLeave restoreOverrideCursor="
00129 << QtCursorToString (QApplication::overrideCursor ()->shape ()).toLatin1 ().data ();
00130
00131
00132 QApplication::restoreOverrideCursor ();
00133
00134 m_isOverrideCursor = false;
00135 }
00136 }
00137
00138 void DigitizeStateAbstractBase::setCursor(CmdMediator *cmdMediator)
00139 {
00140 LOG4CPP_DEBUG_S ((*mainCat)) << "DigitizeStateAbstractBase::setCursor";
00141
00142 removeOverrideCursor ();
00143 context().view().setCursor (cursor (cmdMediator));
00144 }