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