Engauge Digitizer  2
 All Classes Files Functions Variables Enumerations Enumerator Friends Pages
CmdPaste.cpp
1 /******************************************************************************************************
2  * (C) 2014 markummitchell@github.com. This file is part of Engauge Digitizer, which is released *
3  * under GNU General Public License version 2 (GPLv2) or (at your option) any later version. See file *
4  * LICENSE or go to gnu.org/licenses for details. Distribution requires prior written permission. *
5  ******************************************************************************************************/
6 
7 #include "CmdPaste.h"
8 #include "DataKey.h"
9 #include "Document.h"
10 #include "DocumentSerialize.h"
11 #include "EngaugeAssert.h"
12 #include "Logger.h"
13 #include "MainWindow.h"
14 #include "MimePoints.h"
15 #include <QApplication>
16 #include <QClipboard>
17 #include <QGraphicsItem>
18 #include <QTextStream>
19 #include "QtToString.h"
20 #include <QXmlStreamReader>
21 
22 const QString CMD_DESCRIPTION ("Paste");
23 
25  Document &document,
26  const QStringList &selectedPointIdentifiers) :
27  CmdPointChangeBase (mainWindow,
28  document,
29  CMD_DESCRIPTION)
30 {
31  QStringList selected;
32  QStringList::const_iterator itr;
33  for (itr = selectedPointIdentifiers.begin (); itr != selectedPointIdentifiers.end (); itr++) {
34 
35  QString selectedPointIdentifier = *itr;
36 
37  selected << selectedPointIdentifier;
38  m_copiedPoints.setKeyValue (selectedPointIdentifier, true);
39  }
40 
41  LOG4CPP_INFO_S ((*mainCat)) << "CmdPaste::CmdPaste"
42  << " selected=" << selected.join (", ").toLatin1 ().data () << ")";
43 }
44 
46  Document &document,
47  const QString &cmdDescription,
48  QXmlStreamReader &reader) :
49  CmdPointChangeBase (mainWindow,
50  document,
51  cmdDescription)
52 {
53  LOG4CPP_INFO_S ((*mainCat)) << "CmdPaste::CmdPaste";
54 
55  m_copiedPoints.loadXml (reader);
56 }
57 
58 CmdPaste::~CmdPaste ()
59 {
60 }
61 
63 {
64  LOG4CPP_INFO_S ((*mainCat)) << "CmdPaste::cmdRedo"
65  << " pasting=" << m_copiedPoints.count ();
66 
69  QClipboard *clipboard = QApplication::clipboard();
70  clipboard->setMimeData (&m_mimePoints, QClipboard::Clipboard);
71  document().updatePointOrdinals (mainWindow().transformation());
73  resetSelection(m_copiedPoints);
75 }
76 
78 {
79  LOG4CPP_INFO_S ((*mainCat)) << "CmdPaste::cmdUndo"
80  << " pasting=" << m_copiedPoints.count ();
81 
85  resetSelection(m_copiedPoints);
87 }
88 
89 void CmdPaste::saveXml (QXmlStreamWriter &writer) const
90 {
91  writer.writeStartElement(DOCUMENT_SERIALIZE_CMD);
92  writer.writeAttribute(DOCUMENT_SERIALIZE_CMD_TYPE, DOCUMENT_SERIALIZE_CMD_PASTE);
93  writer.writeAttribute(DOCUMENT_SERIALIZE_CMD_DESCRIPTION, QUndoCommand::text ());
94  m_copiedPoints.saveXml (writer);
95  writer.writeEndElement();
96 }
virtual void cmdUndo()
Undo method that is called when QUndoStack is moved one command backward.
Definition: CmdPaste.cpp:77
void saveXml(QXmlStreamWriter &writer) const
Serialize table to xml.
void setKeyValue(const QString &pointIdentifier, bool value)
Set key/value pair.
virtual void saveXml(QXmlStreamWriter &writer) const
Save commands as xml for later uploading.
Definition: CmdPaste.cpp:89
void saveOrCheckPostCommandDocumentStateHash(const Document &document)
Save, when called the first time, a hash value representing the state of the Document.
void saveOrCheckPreCommandDocumentStateHash(const Document &document)
Save, when called the first time, a hash value representing the state of the Document.
Base class for CmdBase leaf subclasses that involve point additions, deletions and/or modifications...
MainWindow & mainWindow()
Return the MainWindow so it can be updated by this command as a last step.
Definition: CmdAbstract.cpp:45
void updateAfterCommand()
See GraphicsScene::updateAfterCommand.
Storage of one imported image and the data attached to that image.
Definition: Document.h:41
void loadXml(QXmlStreamReader &reader)
Load from serialized xml.
int count() const
Number of entries.
CmdPaste(MainWindow &mainWindow, Document &document, const QStringList &selectedPointIdentifiers)
Constructor for normal creation.
Definition: CmdPaste.cpp:24
void restoreDocumentState(Document &document) const
Restore the document previously saved by saveDocumentState.
Document & document()
Return the Document that this command will modify during redo and undo.
Definition: CmdAbstract.cpp:35
void resetSelection(const PointIdentifiers &pointIdentifiersToSelect)
Since the set of selected points has probably changed, changed that set back to the specified set...
Definition: CmdAbstract.cpp:81
virtual void cmdRedo()
Redo method that is called when QUndoStack is moved one command forward.
Definition: CmdPaste.cpp:62
Main window consisting of menu, graphics scene, status bar and optional toolbars as a Single Document...
Definition: MainWindow.h:83
void updatePointOrdinals(const Transformation &transformation)
Update point ordinals after point addition/removal or dragging.
Definition: Document.cpp:986
void saveDocumentState(const Document &document)
Save the document state for restoration by restoreDocumentState.