00001
00002
00003
00004
00005
00006
00007 #include "CmdMediator.h"
00008 #include "DigitizeStateAxis.h"
00009 #include "DigitizeStateColorPicker.h"
00010 #include "DigitizeStateContext.h"
00011 #include "DigitizeStateCurve.h"
00012 #include "DigitizeStateEmpty.h"
00013 #include "DigitizeStatePointMatch.h"
00014 #include "DigitizeStateSegment.h"
00015 #include "DigitizeStateSelect.h"
00016 #include "DocumentModelSegments.h"
00017 #include "EngaugeAssert.h"
00018 #include "GraphicsScene.h"
00019 #include "GraphicsView.h"
00020 #include "Logger.h"
00021 #include "MainWindow.h"
00022 #include <QCursor>
00023 #include <QGraphicsScene>
00024 #include <QGraphicsView>
00025 #include "QtToString.h"
00026
00027 DigitizeStateContext::DigitizeStateContext(MainWindow &mainWindow,
00028 QGraphicsView &view,
00029 bool isGnuplot) :
00030 m_mainWindow (mainWindow),
00031 m_view (view),
00032 m_imageIsLoaded (false),
00033 m_isGnuplot (isGnuplot)
00034 {
00035
00036 m_states.insert (DIGITIZE_STATE_AXIS , new DigitizeStateAxis (*this));
00037 m_states.insert (DIGITIZE_STATE_COLOR_PICKER, new DigitizeStateColorPicker (*this));
00038 m_states.insert (DIGITIZE_STATE_CURVE , new DigitizeStateCurve (*this));
00039 m_states.insert (DIGITIZE_STATE_EMPTY , new DigitizeStateEmpty (*this));
00040 m_states.insert (DIGITIZE_STATE_POINT_MATCH , new DigitizeStatePointMatch (*this));
00041 m_states.insert (DIGITIZE_STATE_SEGMENT , new DigitizeStateSegment (*this));
00042 m_states.insert (DIGITIZE_STATE_SELECT , new DigitizeStateSelect (*this));
00043 ENGAUGE_ASSERT (m_states.size () == NUM_DIGITIZE_STATES);
00044
00045 m_currentState = NUM_DIGITIZE_STATES;
00046 requestImmediateStateTransition (mainWindow.cmdMediator(),
00047 DIGITIZE_STATE_EMPTY);
00048 }
00049
00050 DigitizeStateContext::~DigitizeStateContext()
00051 {
00052 }
00053
00054 QString DigitizeStateContext::activeCurve () const
00055 {
00056 return m_states [m_currentState]->activeCurve ();
00057 }
00058
00059 void DigitizeStateContext::appendNewCmd(CmdMediator *cmdMediator,
00060 QUndoCommand *cmd)
00061 {
00062 LOG4CPP_INFO_S ((*mainCat)) << "DigitizeStateContext::appendNewCmd";
00063
00064 cmdMediator->push (cmd);
00065 }
00066
00067 void DigitizeStateContext::completeRequestedStateTransitionIfExists (CmdMediator *cmdMediator)
00068 {
00069 if (m_currentState != m_requestedState) {
00070
00071
00072
00073 if (m_currentState != NUM_DIGITIZE_STATES) {
00074
00075
00076 m_states [m_currentState]->end ();
00077 }
00078
00079
00080 DigitizeState previousState = m_currentState;
00081 m_currentState = m_requestedState;
00082 m_states [m_requestedState]->begin (cmdMediator,
00083 previousState);
00084
00085
00086
00087 mainWindow().updateDigitizeStateIfSoftwareTriggered (m_requestedState);
00088 }
00089 }
00090
00091 void DigitizeStateContext::handleContextMenuEventAxis (CmdMediator *cmdMediator,
00092 const QString &pointIdentifier)
00093 {
00094 m_states [m_currentState]->handleContextMenuEventAxis (cmdMediator,
00095 pointIdentifier);
00096 }
00097
00098 void DigitizeStateContext::handleContextMenuEventGraph (CmdMediator *cmdMediator,
00099 const QStringList &pointIdentifiers)
00100 {
00101 m_states [m_currentState]->handleContextMenuEventGraph (cmdMediator,
00102 pointIdentifiers);
00103 }
00104
00105 void DigitizeStateContext::handleCurveChange (CmdMediator *cmdMediator)
00106 {
00107 m_states [m_currentState]->handleCurveChange(cmdMediator);
00108 }
00109
00110 void DigitizeStateContext::handleKeyPress (CmdMediator *cmdMediator,
00111 Qt::Key key,
00112 bool atLeastOneSelectedItem)
00113 {
00114 m_states [m_currentState]->handleKeyPress (cmdMediator,
00115 key,
00116 atLeastOneSelectedItem);
00117
00118 completeRequestedStateTransitionIfExists(cmdMediator);
00119
00120 }
00121
00122 void DigitizeStateContext::handleMouseMove (CmdMediator *cmdMediator,
00123 QPointF pos)
00124 {
00125 m_states [m_currentState]->handleMouseMove (cmdMediator,
00126 pos);
00127
00128 completeRequestedStateTransitionIfExists(cmdMediator);
00129
00130 }
00131
00132 void DigitizeStateContext::handleMousePress (CmdMediator *cmdMediator,
00133 QPointF pos)
00134 {
00135 m_states [m_currentState]->handleMousePress (cmdMediator,
00136 pos);
00137
00138 completeRequestedStateTransitionIfExists(cmdMediator);
00139
00140 }
00141
00142 void DigitizeStateContext::handleMouseRelease (CmdMediator *cmdMediator,
00143 QPointF pos)
00144 {
00145 m_states [m_currentState]->handleMouseRelease (cmdMediator,
00146 pos);
00147
00148 completeRequestedStateTransitionIfExists(cmdMediator);
00149 }
00150
00151 bool DigitizeStateContext::isGnuplot () const
00152 {
00153 return m_isGnuplot;
00154 }
00155
00156 MainWindow &DigitizeStateContext::mainWindow ()
00157 {
00158 return m_mainWindow;
00159 }
00160
00161 const MainWindow &DigitizeStateContext::mainWindow () const
00162 {
00163 return m_mainWindow;
00164 }
00165
00166 void DigitizeStateContext::requestDelayedStateTransition (DigitizeState digitizeState)
00167 {
00168 m_requestedState = digitizeState;
00169 }
00170
00171 void DigitizeStateContext::requestImmediateStateTransition (CmdMediator *cmdMediator,
00172 DigitizeState digitizeState)
00173 {
00174 m_requestedState = digitizeState;
00175 completeRequestedStateTransitionIfExists(cmdMediator);
00176 }
00177
00178 void DigitizeStateContext::resetOnLoad (CmdMediator *cmdMediator)
00179 {
00180 LOG4CPP_INFO_S ((*mainCat)) << "DigitizeStateContext::resetOnLoad";
00181
00182
00183
00184 if (m_currentState != DIGITIZE_STATE_EMPTY) {
00185 m_requestedState = DIGITIZE_STATE_EMPTY;
00186 completeRequestedStateTransitionIfExists(cmdMediator);
00187 }
00188 }
00189
00190 void DigitizeStateContext::setCursor (CmdMediator *cmdMediator)
00191 {
00192 LOG4CPP_INFO_S ((*mainCat)) << "DigitizeStateContext::setCursor";
00193
00194 ENGAUGE_ASSERT(m_currentState < m_states.count());
00195
00196 m_states [m_currentState]->setCursor (cmdMediator);
00197 }
00198
00199 void DigitizeStateContext::setDragMode (QGraphicsView::DragMode dragMode)
00200 {
00201 LOG4CPP_DEBUG_S ((*mainCat)) << "DigitizeStateContext::setDragMode";
00202
00203 if (m_imageIsLoaded) {
00204 m_view.setDragMode (dragMode);
00205 }
00206 }
00207
00208 void DigitizeStateContext::setImageIsLoaded(CmdMediator *cmdMediator,
00209 bool imageIsLoaded)
00210 {
00211 LOG4CPP_INFO_S ((*mainCat)) << "DigitizeStateContext::setImageIsLoaded";
00212
00213 m_imageIsLoaded = imageIsLoaded;
00214 setCursor (cmdMediator);
00215 }
00216
00217 QString DigitizeStateContext::state() const
00218 {
00219 ENGAUGE_ASSERT (m_currentState != NUM_DIGITIZE_STATES);
00220
00221 return m_states [m_currentState]->state();
00222 }
00223
00224 void DigitizeStateContext::updateAfterPointAddition ()
00225 {
00226 ENGAUGE_ASSERT (m_currentState != NUM_DIGITIZE_STATES);
00227
00228 m_states [m_currentState]->updateAfterPointAddition ();
00229 }
00230
00231 void DigitizeStateContext::updateModelDigitizeCurve (CmdMediator *cmdMediator,
00232 const DocumentModelDigitizeCurve &modelDigitizeCurve)
00233 {
00234 LOG4CPP_INFO_S ((*mainCat)) << "DigitizeStateContext::updateModelDigitizeCurve";
00235
00236 ENGAUGE_ASSERT(m_currentState < m_states.count());
00237
00238 m_states [m_currentState]->updateModelDigitizeCurve (cmdMediator,
00239 modelDigitizeCurve);
00240 }
00241
00242 void DigitizeStateContext::updateModelSegments(const DocumentModelSegments &modelSegments)
00243 {
00244 LOG4CPP_INFO_S ((*mainCat)) << "DigitizeStateContext::updateModelSegments";
00245
00246 ENGAUGE_ASSERT(m_currentState < m_states.count());
00247
00248 m_states [m_currentState]->updateModelSegments (modelSegments);
00249 }
00250
00251 QGraphicsView &DigitizeStateContext::view()
00252 {
00253 return m_view;
00254 }