00001
00002
00003
00004
00005
00006
00007 #include "CmdSettingsPointMatch.h"
00008 #include "Document.h"
00009 #include "DocumentSerialize.h"
00010 #include "Logger.h"
00011 #include "MainWindow.h"
00012 #include <QXmlStreamReader>
00013 #include "Xml.h"
00014
00015 const QString CMD_DESCRIPTION ("Point Match settings");
00016
00017 CmdSettingsPointMatch::CmdSettingsPointMatch(MainWindow &mainWindow,
00018 Document &document,
00019 const DocumentModelPointMatch &modelPointMatchBefore,
00020 const DocumentModelPointMatch &modelPointMatchAfter) :
00021 CmdAbstract(mainWindow,
00022 document,
00023 CMD_DESCRIPTION),
00024 m_modelPointMatchBefore (modelPointMatchBefore),
00025 m_modelPointMatchAfter (modelPointMatchAfter)
00026 {
00027 LOG4CPP_INFO_S ((*mainCat)) << "CmdSettingsPointMatch::CmdSettingsPointMatch";
00028 }
00029
00030 CmdSettingsPointMatch::CmdSettingsPointMatch (MainWindow &mainWindow,
00031 Document &document,
00032 const QString &cmdDescription,
00033 QXmlStreamReader &reader) :
00034 CmdAbstract (mainWindow,
00035 document,
00036 cmdDescription)
00037 {
00038 LOG4CPP_INFO_S ((*mainCat)) << "CmdSettingsPointMatch::CmdSettingsPointMatch";
00039
00040 bool success = true;
00041
00042
00043 bool isBefore = true;
00044 while ((reader.tokenType() != QXmlStreamReader::EndElement) ||
00045 (reader.name() != DOCUMENT_SERIALIZE_CMD)){
00046 loadNextFromReader(reader);
00047 if (reader.atEnd()) {
00048 xmlExitWithError (reader,
00049 QString ("%1 %2")
00050 .arg (QObject::tr ("Reached end of file before finding end element for"))
00051 .arg (DOCUMENT_SERIALIZE_CMD));
00052 success = false;
00053 break;
00054 }
00055
00056 if ((reader.tokenType() == QXmlStreamReader::StartElement) &&
00057 (reader.name() == DOCUMENT_SERIALIZE_POINT_MATCH)) {
00058
00059 if (isBefore) {
00060
00061 m_modelPointMatchBefore.loadXml (reader);
00062 isBefore = false;
00063
00064 } else {
00065
00066 m_modelPointMatchAfter.loadXml (reader);
00067
00068 }
00069 }
00070 }
00071
00072 if (!success) {
00073 reader.raiseError ("Cannot read point match settings");
00074 }
00075 }
00076
00077 CmdSettingsPointMatch::~CmdSettingsPointMatch ()
00078 {
00079 }
00080
00081 void CmdSettingsPointMatch::cmdRedo ()
00082 {
00083 LOG4CPP_INFO_S ((*mainCat)) << "CmdSettingsPointMatch::cmdRedo";
00084
00085 saveOrCheckPreCommandDocumentStateHash (document ());
00086 mainWindow().updateSettingsPointMatch(m_modelPointMatchAfter);
00087 mainWindow().updateAfterCommand();
00088 saveOrCheckPostCommandDocumentStateHash (document ());
00089 }
00090
00091 void CmdSettingsPointMatch::cmdUndo ()
00092 {
00093 LOG4CPP_INFO_S ((*mainCat)) << "CmdSettingsPointMatch::cmdUndo";
00094
00095 saveOrCheckPostCommandDocumentStateHash (document ());
00096 mainWindow().updateSettingsPointMatch(m_modelPointMatchBefore);
00097 mainWindow().updateAfterCommand();
00098 saveOrCheckPreCommandDocumentStateHash (document ());
00099 }
00100
00101 void CmdSettingsPointMatch::saveXml (QXmlStreamWriter &writer) const
00102 {
00103 writer.writeStartElement(DOCUMENT_SERIALIZE_CMD);
00104 writer.writeAttribute(DOCUMENT_SERIALIZE_CMD_TYPE, DOCUMENT_SERIALIZE_CMD_SETTINGS_POINT_MATCH);
00105 writer.writeAttribute(DOCUMENT_SERIALIZE_CMD_DESCRIPTION, QUndoCommand::text ());
00106 m_modelPointMatchBefore.saveXml (writer);
00107 m_modelPointMatchAfter.saveXml(writer);
00108 writer.writeEndElement();
00109 }