00001
00002
00003
00004
00005
00006
00007 #include "CmdEditPointAxis.h"
00008 #include "Document.h"
00009 #include "DocumentSerialize.h"
00010 #include "EngaugeAssert.h"
00011 #include "Logger.h"
00012 #include "MainWindow.h"
00013 #include <QTextStream>
00014 #include "QtToString.h"
00015 #include <QXmlStreamReader>
00016 #include "Xml.h"
00017
00018 const QString CMD_DESCRIPTION ("Edit axis point");
00019
00020 CmdEditPointAxis::CmdEditPointAxis (MainWindow &mainWindow,
00021 Document &document,
00022 const QString &pointIdentifier,
00023 const QPointF &posGraphBefore,
00024 const QPointF &posGraphAfter,
00025 bool isXOnly) :
00026 CmdPointChangeBase (mainWindow,
00027 document,
00028 CMD_DESCRIPTION),
00029 m_pointIdentifier (pointIdentifier),
00030 m_posGraphBefore (posGraphBefore),
00031 m_posGraphAfter (posGraphAfter),
00032 m_isXOnly (isXOnly)
00033 {
00034 LOG4CPP_INFO_S ((*mainCat)) << "CmdEditPointAxis::CmdEditPointAxis point="
00035 << pointIdentifier.toLatin1 ().data ()
00036 << " posGraphBefore=" << QPointFToString (posGraphBefore).toLatin1 ().data ()
00037 << " posGraphAfter=" << QPointFToString (posGraphAfter).toLatin1 ().data ();
00038 }
00039
00040 CmdEditPointAxis::CmdEditPointAxis (MainWindow &mainWindow,
00041 Document &document,
00042 const QString &cmdDescription,
00043 QXmlStreamReader &reader) :
00044 CmdPointChangeBase (mainWindow,
00045 document,
00046 cmdDescription)
00047 {
00048 LOG4CPP_INFO_S ((*mainCat)) << "CmdEditPointAxis::CmdEditPointAxis";
00049
00050 QXmlStreamAttributes attributes = reader.attributes();
00051
00052 if (!attributes.hasAttribute(DOCUMENT_SERIALIZE_GRAPH_X_BEFORE) ||
00053 !attributes.hasAttribute(DOCUMENT_SERIALIZE_GRAPH_Y_BEFORE) ||
00054 !attributes.hasAttribute(DOCUMENT_SERIALIZE_GRAPH_X_AFTER) ||
00055 !attributes.hasAttribute(DOCUMENT_SERIALIZE_GRAPH_Y_AFTER) ||
00056 !attributes.hasAttribute(DOCUMENT_SERIALIZE_IDENTIFIER) ||
00057 !attributes.hasAttribute(DOCUMENT_SERIALIZE_POINT_IS_X_ONLY)) {
00058 xmlExitWithError (reader,
00059 QString ("%1 %2, %3, %4, %5, %6 %7 %8")
00060 .arg (QObject::tr ("Missing attribute(s)"))
00061 .arg (DOCUMENT_SERIALIZE_GRAPH_X_BEFORE)
00062 .arg (DOCUMENT_SERIALIZE_GRAPH_Y_BEFORE)
00063 .arg (DOCUMENT_SERIALIZE_GRAPH_X_AFTER)
00064 .arg (DOCUMENT_SERIALIZE_GRAPH_Y_AFTER)
00065 .arg (DOCUMENT_SERIALIZE_IDENTIFIER)
00066 .arg (QObject::tr ("and/or"))
00067 .arg (DOCUMENT_SERIALIZE_POINT_IS_X_ONLY));
00068 }
00069
00070
00071 QString isXOnlyValue = attributes.value(DOCUMENT_SERIALIZE_POINT_IS_X_ONLY).toString();
00072
00073 m_posGraphBefore.setX(attributes.value(DOCUMENT_SERIALIZE_GRAPH_X_BEFORE).toDouble());
00074 m_posGraphBefore.setY(attributes.value(DOCUMENT_SERIALIZE_GRAPH_Y_BEFORE).toDouble());
00075 m_posGraphAfter.setX(attributes.value(DOCUMENT_SERIALIZE_GRAPH_X_AFTER).toDouble());
00076 m_posGraphAfter.setY(attributes.value(DOCUMENT_SERIALIZE_GRAPH_Y_AFTER).toDouble());
00077 m_pointIdentifier = attributes.value(DOCUMENT_SERIALIZE_IDENTIFIER).toString();
00078 m_isXOnly = (isXOnlyValue == DOCUMENT_SERIALIZE_BOOL_TRUE);
00079 }
00080
00081 CmdEditPointAxis::~CmdEditPointAxis ()
00082 {
00083 }
00084
00085 void CmdEditPointAxis::cmdRedo ()
00086 {
00087 LOG4CPP_INFO_S ((*mainCat)) << "CmdEditPointAxis::cmdRedo";
00088
00089 saveOrCheckPreCommandDocumentStateHash (document ());
00090 saveDocumentState (document ());
00091 document().editPointAxis (m_posGraphAfter,
00092 m_pointIdentifier);
00093 document().updatePointOrdinals (mainWindow().transformation());
00094 mainWindow().updateAfterCommand();
00095 saveOrCheckPostCommandDocumentStateHash (document ());
00096 }
00097
00098 void CmdEditPointAxis::cmdUndo ()
00099 {
00100 LOG4CPP_INFO_S ((*mainCat)) << "CmdEditPointAxis::cmdUndo";
00101
00102 saveOrCheckPostCommandDocumentStateHash (document ());
00103 restoreDocumentState (document ());
00104 mainWindow().updateAfterCommand();
00105 saveOrCheckPreCommandDocumentStateHash (document ());
00106 }
00107
00108 void CmdEditPointAxis::saveXml (QXmlStreamWriter &writer) const
00109 {
00110 writer.writeStartElement(DOCUMENT_SERIALIZE_CMD);
00111 writer.writeAttribute(DOCUMENT_SERIALIZE_CMD_TYPE, DOCUMENT_SERIALIZE_CMD_EDIT_POINT_AXIS);
00112 writer.writeAttribute(DOCUMENT_SERIALIZE_CMD_DESCRIPTION, QUndoCommand::text ());
00113 writer.writeAttribute(DOCUMENT_SERIALIZE_IDENTIFIER, m_pointIdentifier);
00114 writer.writeAttribute(DOCUMENT_SERIALIZE_GRAPH_X_BEFORE, QString::number (m_posGraphBefore.x()));
00115 writer.writeAttribute(DOCUMENT_SERIALIZE_GRAPH_Y_BEFORE, QString::number (m_posGraphBefore.y()));
00116 writer.writeAttribute(DOCUMENT_SERIALIZE_GRAPH_X_AFTER, QString::number (m_posGraphAfter.x()));
00117 writer.writeAttribute(DOCUMENT_SERIALIZE_GRAPH_Y_AFTER, QString::number (m_posGraphAfter.y()));
00118 writer.writeAttribute(DOCUMENT_SERIALIZE_POINT_IS_X_ONLY, m_isXOnly ?
00119 DOCUMENT_SERIALIZE_BOOL_TRUE :
00120 DOCUMENT_SERIALIZE_BOOL_FALSE);
00121 writer.writeEndElement();
00122 }