00001
00002
00003
00004
00005
00006
00007 #include "CmdPaste.h"
00008 #include "DataKey.h"
00009 #include "Document.h"
00010 #include "DocumentSerialize.h"
00011 #include "EngaugeAssert.h"
00012 #include "Logger.h"
00013 #include "MainWindow.h"
00014 #include "MimePoints.h"
00015 #include <QApplication>
00016 #include <QClipboard>
00017 #include <QGraphicsItem>
00018 #include <QTextStream>
00019 #include "QtToString.h"
00020 #include <QXmlStreamReader>
00021
00022 const QString CMD_DESCRIPTION ("Paste");
00023
00024 CmdPaste::CmdPaste(MainWindow &mainWindow,
00025 Document &document,
00026 const QStringList &selectedPointIdentifiers) :
00027 CmdPointChangeBase (mainWindow,
00028 document,
00029 CMD_DESCRIPTION)
00030 {
00031 QStringList selected;
00032 QStringList::const_iterator itr;
00033 for (itr = selectedPointIdentifiers.begin (); itr != selectedPointIdentifiers.end (); itr++) {
00034
00035 QString selectedPointIdentifier = *itr;
00036
00037 selected << selectedPointIdentifier;
00038 m_copiedPoints.setKeyValue (selectedPointIdentifier, true);
00039 }
00040
00041 LOG4CPP_INFO_S ((*mainCat)) << "CmdPaste::CmdPaste"
00042 << " selected=" << selected.join (", ").toLatin1 ().data () << ")";
00043 }
00044
00045 CmdPaste::CmdPaste (MainWindow &mainWindow,
00046 Document &document,
00047 const QString &cmdDescription,
00048 QXmlStreamReader &reader) :
00049 CmdPointChangeBase (mainWindow,
00050 document,
00051 cmdDescription)
00052 {
00053 LOG4CPP_INFO_S ((*mainCat)) << "CmdPaste::CmdPaste";
00054
00055 m_copiedPoints.loadXml (reader);
00056 }
00057
00058 CmdPaste::~CmdPaste ()
00059 {
00060 }
00061
00062 void CmdPaste::cmdRedo ()
00063 {
00064 LOG4CPP_INFO_S ((*mainCat)) << "CmdPaste::cmdRedo"
00065 << " pasting=" << m_copiedPoints.count ();
00066
00067 saveOrCheckPreCommandDocumentStateHash (document ());
00068 saveDocumentState (document ());
00069 QClipboard *clipboard = QApplication::clipboard();
00070 clipboard->setMimeData (&m_mimePoints, QClipboard::Clipboard);
00071 document().updatePointOrdinals (mainWindow().transformation());
00072 mainWindow().updateAfterCommand();
00073 resetSelection(m_copiedPoints);
00074 saveOrCheckPostCommandDocumentStateHash (document ());
00075 }
00076
00077 void CmdPaste::cmdUndo ()
00078 {
00079 LOG4CPP_INFO_S ((*mainCat)) << "CmdPaste::cmdUndo"
00080 << " pasting=" << m_copiedPoints.count ();
00081
00082 saveOrCheckPostCommandDocumentStateHash (document ());
00083 restoreDocumentState (document ());
00084 mainWindow().updateAfterCommand();
00085 resetSelection(m_copiedPoints);
00086 saveOrCheckPreCommandDocumentStateHash (document ());
00087 }
00088
00089 void CmdPaste::saveXml (QXmlStreamWriter &writer) const
00090 {
00091 writer.writeStartElement(DOCUMENT_SERIALIZE_CMD);
00092 writer.writeAttribute(DOCUMENT_SERIALIZE_CMD_TYPE, DOCUMENT_SERIALIZE_CMD_PASTE);
00093 writer.writeAttribute(DOCUMENT_SERIALIZE_CMD_DESCRIPTION, QUndoCommand::text ());
00094 m_copiedPoints.saveXml (writer);
00095 writer.writeEndElement();
00096 }