00001
00002
00003
00004
00005
00006
00007 #include "CallbackAxesCheckerFromAxesPoints.h"
00008 #include "Checker.h"
00009 #include "CmdMediator.h"
00010 #include "Document.h"
00011 #include "EnumsToQt.h"
00012 #include "FilterImage.h"
00013 #include "GridClassifier.h"
00014 #include "Logger.h"
00015 #include <QGraphicsScene>
00016 #include <QImage>
00017 #include <QTimer>
00018 #include "Transformation.h"
00019 #include "TransformationStateContext.h"
00020 #include "TransformationStateDefined.h"
00021
00022 const int SECONDS_TO_MILLISECONDS = 1000.0;
00023
00024 TransformationStateDefined::TransformationStateDefined(TransformationStateContext &context,
00025 QGraphicsScene &scene) :
00026 TransformationStateAbstractBase (context),
00027 m_axesChecker (new Checker (scene)),
00028 m_timer (new QTimer)
00029 {
00030 m_timer->setSingleShot (true);
00031 connect (m_timer, SIGNAL (timeout()), this, SLOT (slotTimeout()));
00032 }
00033
00034 void TransformationStateDefined::begin(CmdMediator &cmdMediator,
00035 const Transformation &transformation,
00036 const QString &selectedGraphCurve)
00037 {
00038 LOG4CPP_INFO_S ((*mainCat)) << "TransformationStateDefined::begin";
00039
00040 if (!cmdMediator.document().modelGridDisplay().stable()) {
00041
00042
00043 initializeModelGridDisplay (cmdMediator,
00044 transformation);
00045
00046 }
00047
00048 if (!cmdMediator.document().modelGridRemoval().stable()) {
00049
00050
00051 initializeModelGridRemoval (cmdMediator,
00052 transformation,
00053 selectedGraphCurve);
00054
00055 }
00056
00057 updateAxesChecker (cmdMediator,
00058 transformation);
00059 }
00060
00061 void TransformationStateDefined::end(CmdMediator & ,
00062 const Transformation & )
00063 {
00064 LOG4CPP_INFO_S ((*mainCat)) << "TransformationStateDefined::end";
00065
00066 m_axesChecker->setVisible (false);
00067 }
00068
00069 void TransformationStateDefined::initializeModelGridDisplay (CmdMediator &cmdMediator,
00070 const Transformation &transformation)
00071 {
00072 cmdMediator.document().initializeGridDisplay (transformation);
00073 }
00074
00075 void TransformationStateDefined::initializeModelGridRemoval (CmdMediator &cmdMediator,
00076 const Transformation &transformation,
00077 const QString &selectedGraphCurve)
00078 {
00079 LOG4CPP_INFO_S ((*mainCat)) << "TransformationStateDefined::initializeModelGridRemoval";
00080
00081
00082 FilterImage filterImage;
00083 QPixmap pixmapFiltered = filterImage.filter (cmdMediator.document().pixmap().toImage(),
00084 transformation,
00085 selectedGraphCurve,
00086 cmdMediator.document().modelColorFilter(),
00087 cmdMediator.document().modelGridRemoval());
00088
00089
00090 int countX, countY;
00091 double startX, startY, stepX, stepY;
00092 GridClassifier gridClassifier;
00093 gridClassifier.classify (context().isGnuplot(),
00094 pixmapFiltered,
00095 transformation,
00096 countX,
00097 startX,
00098 stepX,
00099 countY,
00100 startY,
00101 stepY);
00102 DocumentModelGridRemoval modelGridRemoval (startX,
00103 startY,
00104 stepX,
00105 stepY,
00106 countX,
00107 countY);
00108 cmdMediator.document().setModelGridRemoval (modelGridRemoval);
00109 }
00110
00111 void TransformationStateDefined::slotTimeout()
00112 {
00113 LOG4CPP_INFO_S ((*mainCat)) << "TransformationStateDefined::slotTimeout";
00114
00115 m_axesChecker->setVisible (false);
00116 }
00117
00118 void TransformationStateDefined::startTimer (const DocumentModelAxesChecker &modelAxesChecker)
00119 {
00120 LOG4CPP_INFO_S ((*mainCat)) << "TransformationStateDefined::startTimer";
00121
00122 m_axesChecker->setVisible (modelAxesChecker.checkerMode () != CHECKER_MODE_NEVER);
00123
00124 if (modelAxesChecker.checkerMode () == CHECKER_MODE_N_SECONDS) {
00125
00126
00127 int milliseconds = modelAxesChecker.checkerSeconds() * SECONDS_TO_MILLISECONDS;
00128 m_timer->start (milliseconds);
00129 }
00130 }
00131
00132 void TransformationStateDefined::updateAxesChecker (CmdMediator &cmdMediator,
00133 const Transformation &transformation)
00134 {
00135 CallbackAxesCheckerFromAxesPoints ftor;
00136 Functor2wRet<const QString &, const Point&, CallbackSearchReturn> ftorWithCallback = functor_ret (ftor,
00137 &CallbackAxesCheckerFromAxesPoints::callback);
00138 cmdMediator.iterateThroughCurvePointsAxes (ftorWithCallback);
00139
00140 m_axesChecker->prepareForDisplay (ftor.points(),
00141 cmdMediator.document().modelCurveStyles().pointRadius(AXIS_CURVE_NAME),
00142 cmdMediator.document().modelAxesChecker(),
00143 cmdMediator.document().modelCoords(),
00144 transformation,
00145 cmdMediator.document().documentAxesPointsRequired());
00146 m_axesChecker->setVisible (true);
00147 startTimer (cmdMediator.document().modelAxesChecker());
00148 }