00001
00002
00003
00004
00005
00006
00007 #include "CmdAddPointGraph.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 graph point");
00018
00019 CmdAddPointGraph::CmdAddPointGraph (MainWindow &mainWindow,
00020 Document &document,
00021 const QString &curveName,
00022 const QPointF &posScreen,
00023 double ordinal) :
00024 CmdPointChangeBase (mainWindow,
00025 document,
00026 CMD_DESCRIPTION),
00027 m_curveName (curveName),
00028 m_posScreen (posScreen),
00029 m_ordinal (ordinal)
00030 {
00031 LOG4CPP_INFO_S ((*mainCat)) << "CmdAddPointGraph::CmdAddPointGraph"
00032 << " posScreen=" << QPointFToString (posScreen).toLatin1 ().data ()
00033 << " ordinal=" << m_ordinal;
00034 }
00035
00036 CmdAddPointGraph::CmdAddPointGraph (MainWindow &mainWindow,
00037 Document &document,
00038 const QString &cmdDescription,
00039 QXmlStreamReader &reader) :
00040 CmdPointChangeBase (mainWindow,
00041 document,
00042 cmdDescription)
00043 {
00044 LOG4CPP_INFO_S ((*mainCat)) << "CmdAddPointGraph::CmdAddPointGraph";
00045
00046 QXmlStreamAttributes attributes = reader.attributes();
00047
00048 if (!attributes.hasAttribute(DOCUMENT_SERIALIZE_SCREEN_X) ||
00049 !attributes.hasAttribute(DOCUMENT_SERIALIZE_SCREEN_Y) ||
00050 !attributes.hasAttribute(DOCUMENT_SERIALIZE_CURVE_NAME) ||
00051 !attributes.hasAttribute(DOCUMENT_SERIALIZE_ORDINAL) ||
00052 !attributes.hasAttribute(DOCUMENT_SERIALIZE_IDENTIFIER)) {
00053 xmlExitWithError (reader,
00054 QString ("Missing attribute(s) %1, %2, %3, %4 and/or %5")
00055 .arg (DOCUMENT_SERIALIZE_SCREEN_X)
00056 .arg (DOCUMENT_SERIALIZE_SCREEN_Y)
00057 .arg (DOCUMENT_SERIALIZE_CURVE_NAME)
00058 .arg (DOCUMENT_SERIALIZE_ORDINAL)
00059 .arg (DOCUMENT_SERIALIZE_IDENTIFIER));
00060 }
00061
00062 m_posScreen.setX(attributes.value(DOCUMENT_SERIALIZE_SCREEN_X).toDouble());
00063 m_posScreen.setY(attributes.value(DOCUMENT_SERIALIZE_SCREEN_Y).toDouble());
00064 m_curveName = attributes.value(DOCUMENT_SERIALIZE_CURVE_NAME).toString();
00065 m_identifierAdded = attributes.value(DOCUMENT_SERIALIZE_IDENTIFIER).toString();
00066 m_ordinal = attributes.value(DOCUMENT_SERIALIZE_ORDINAL).toDouble();
00067 }
00068
00069 CmdAddPointGraph::~CmdAddPointGraph ()
00070 {
00071 }
00072
00073 void CmdAddPointGraph::cmdRedo ()
00074 {
00075 LOG4CPP_INFO_S ((*mainCat)) << "CmdAddPointGraph::cmdRedo";
00076
00077 saveOrCheckPreCommandDocumentStateHash (document ());
00078 saveDocumentState (document ());
00079 document().addPointGraphWithGeneratedIdentifier (m_curveName,
00080 m_posScreen,
00081 m_identifierAdded,
00082 m_ordinal);
00083 document().updatePointOrdinals (mainWindow().transformation());
00084 mainWindow().updateAfterCommand();
00085 saveOrCheckPostCommandDocumentStateHash (document ());
00086 }
00087
00088 void CmdAddPointGraph::cmdUndo ()
00089 {
00090 LOG4CPP_INFO_S ((*mainCat)) << "CmdAddPointGraph::cmdUndo";
00091
00092 saveOrCheckPostCommandDocumentStateHash (document ());
00093 restoreDocumentState (document ());
00094 mainWindow().updateAfterCommand();
00095 saveOrCheckPreCommandDocumentStateHash (document ());
00096 }
00097
00098 void CmdAddPointGraph::saveXml (QXmlStreamWriter &writer) const
00099 {
00100 writer.writeStartElement(DOCUMENT_SERIALIZE_CMD);
00101 writer.writeAttribute(DOCUMENT_SERIALIZE_CMD_TYPE, DOCUMENT_SERIALIZE_CMD_ADD_POINT_GRAPH);
00102 writer.writeAttribute(DOCUMENT_SERIALIZE_CMD_DESCRIPTION, QUndoCommand::text ());
00103 writer.writeAttribute(DOCUMENT_SERIALIZE_CURVE_NAME, m_curveName);
00104 writer.writeAttribute(DOCUMENT_SERIALIZE_SCREEN_X, QString::number (m_posScreen.x()));
00105 writer.writeAttribute(DOCUMENT_SERIALIZE_SCREEN_Y, QString::number (m_posScreen.y()));
00106 writer.writeAttribute(DOCUMENT_SERIALIZE_IDENTIFIER, m_identifierAdded);
00107 writer.writeAttribute(DOCUMENT_SERIALIZE_ORDINAL, QString::number (m_ordinal));
00108 writer.writeEndElement();
00109 }