Engauge Digitizer 2
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
22const QString CMD_DESCRIPTION ("Paste");
23
25 Document &document,
26 const QStringList &selectedPointIdentifiers) :
27 CmdAbstract(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 CmdAbstract (mainWindow,
50 document,
51 cmdDescription)
52{
53 LOG4CPP_INFO_S ((*mainCat)) << "CmdPaste::CmdPaste";
54
55 m_copiedPoints.loadXml (reader);
56}
57
58CmdPaste::~CmdPaste ()
59{
60}
61
63{
64 LOG4CPP_INFO_S ((*mainCat)) << "CmdPaste::cmdRedo"
65 << " pasting=" << m_copiedPoints.count ();
66
67 QClipboard *clipboard = QApplication::clipboard();
68 clipboard->setMimeData (&m_mimePoints, QClipboard::Clipboard);
69 document().updatePointOrdinals (mainWindow().transformation());
71 resetSelection(m_copiedPoints);
72}
73
75{
76 LOG4CPP_INFO_S ((*mainCat)) << "CmdPaste::cmdUndo"
77 << " pasting=" << m_copiedPoints.count ();
78
80 resetSelection(m_copiedPoints);
81}
82
83void CmdPaste::saveXml (QXmlStreamWriter &writer) const
84{
85 writer.writeStartElement(DOCUMENT_SERIALIZE_CMD);
86 writer.writeAttribute(DOCUMENT_SERIALIZE_CMD_TYPE, DOCUMENT_SERIALIZE_CMD_PASTE);
87 writer.writeAttribute(DOCUMENT_SERIALIZE_CMD_DESCRIPTION, QUndoCommand::text ());
88 m_copiedPoints.saveXml (writer);
89 writer.writeEndElement();
90}
Wrapper around QUndoCommand. This simplifies the more complicated feature set of QUndoCommand.
Definition: CmdAbstract.h:19
Document & document()
Return the Document that this command will modify during redo and undo.
Definition: CmdAbstract.cpp:33
MainWindow & mainWindow()
Return the MainWindow so it can be updated by this command as a last step.
Definition: CmdAbstract.cpp:43
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:79
virtual void cmdRedo()
Redo method that is called when QUndoStack is moved one command forward.
Definition: CmdPaste.cpp:62
virtual void saveXml(QXmlStreamWriter &writer) const
Save commands as xml for later uploading.
Definition: CmdPaste.cpp:83
CmdPaste(MainWindow &mainWindow, Document &document, const QStringList &selectedPointIdentifiers)
Constructor for normal creation.
Definition: CmdPaste.cpp:24
virtual void cmdUndo()
Undo method that is called when QUndoStack is moved one command backward.
Definition: CmdPaste.cpp:74
Storage of one imported image and the data attached to that image.
Definition: Document.h:41
void updatePointOrdinals(const Transformation &transformation)
Update point ordinals after point addition/removal or dragging.
Definition: Document.cpp:903
Main window consisting of menu, graphics scene, status bar and optional toolbars as a Single Document...
Definition: MainWindow.h:78
void updateAfterCommand()
See GraphicsScene::updateAfterCommand.
void loadXml(QXmlStreamReader &reader)
Load from serialized xml.
int count() const
Number of entries.
void setKeyValue(const QString &pointIdentifier, bool value)
Set key/value pair.
void saveXml(QXmlStreamWriter &writer) const
Serialize table to xml.