00001
00002
00003
00004
00005
00006
00007 #ifndef DIGITIZE_STATE_CONTEXT_H
00008 #define DIGITIZE_STATE_CONTEXT_H
00009
00010 #include "DigitizeStateAbstractBase.h"
00011 #include "PointStyle.h"
00012 #include <QCursor>
00013 #include <QGraphicsView>
00014 #include <QObject>
00015 #include <QVector>
00016
00017 class CmdAbstractBase;
00018 class DocumentModelDigitizeCurve;
00019 class DocumentModelSegments;
00020 class MainWindow;
00021 class MainWindowModel;
00022 class QSize;
00023 class QUndoCommand;
00024 class Transformation;
00025
00027 class DigitizeStateContext : public QObject
00028 {
00029 Q_OBJECT;
00030
00031 public:
00033 DigitizeStateContext(MainWindow &mainWindow,
00034 QGraphicsView &view,
00035 bool isGnuplot);
00036 virtual ~DigitizeStateContext ();
00037
00039 QString activeCurve () const;
00040
00042 void appendNewCmd(CmdMediator *cmdMediator,
00043 QUndoCommand *cmd);
00044
00046 bool canPaste (const Transformation &transformation,
00047 const QSize &viewSize) const;
00048
00050 void handleContextMenuEventAxis (CmdMediator *cmdMediator,
00051 const QString &pointIdentifier);
00052
00054 void handleContextMenuEventGraph (CmdMediator *cmdMediator,
00055 const QStringList &pointIdentifiers);
00056
00058 void handleCurveChange (CmdMediator *cmdMediator);
00059
00061 void handleKeyPress (CmdMediator *cmdMediator,
00062 Qt::Key key,
00063 bool atLeastOneSelectedItem);
00064
00066 void handleMouseMove (CmdMediator *cmdMediator,
00067 QPointF pos);
00068
00070 void handleMousePress (CmdMediator *cmdMediator,
00071 QPointF pos);
00072
00074 void handleMouseRelease (CmdMediator *cmdMediator,
00075 QPointF pos);
00076
00078 bool isGnuplot () const;
00079
00081 MainWindow &mainWindow ();
00082
00084 const MainWindow &mainWindow () const;
00085
00087 void requestDelayedStateTransition (DigitizeState digitizeState);
00088
00090 void requestImmediateStateTransition (CmdMediator *cmdMediator,
00091 DigitizeState digitizeState);
00092
00094 void resetOnLoad (CmdMediator *cmdMediator);
00095
00097 void setCursor (CmdMediator *cmdMediator);
00098
00100 void setDragMode (QGraphicsView::DragMode dragMode);
00101
00103 void setImageIsLoaded (CmdMediator *cmdMediator,
00104 bool imageIsLoaded);
00105
00107 QString state() const;
00108
00110 void updateAfterPointAddition ();
00111
00113 void updateModelDigitizeCurve (CmdMediator *cmdMediator,
00114 const DocumentModelDigitizeCurve &modelDigitizeCurve);
00115
00117 void updateModelSegments(const DocumentModelSegments &modelSegments);
00118
00120 QGraphicsView &view();
00121
00122 private:
00123 DigitizeStateContext();
00124
00125 void completeRequestedStateTransitionIfExists (CmdMediator *cmdMediator);
00126
00127 MainWindow &m_mainWindow;
00128 QGraphicsView &m_view;
00129 bool m_imageIsLoaded;
00130
00131 QVector<DigitizeStateAbstractBase*> m_states;
00132 DigitizeState m_currentState;
00133 DigitizeState m_requestedState;
00134
00135 bool m_isGnuplot;
00136 };
00137
00138 #endif // DIGITIZE_STATE_CONTEXT_H