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