aboutsummaryrefslogtreecommitdiffstats
path: root/src/plugins/modeleditor/modelsmanager.cpp
diff options
context:
space:
mode:
authorJochen Becher <jochen_becher@gmx.de>2018-01-07 20:31:02 +0100
committerJochen Becher <jochen_becher@gmx.de>2018-01-10 15:39:45 +0000
commit4d99f47974a5afaecffba354a58fe897ffb9f9c3 (patch)
tree370c333d92e362fad88f8688059a057ce391d969 /src/plugins/modeleditor/modelsmanager.cpp
parentbcc550a4e25121c836ce5f6c83a80bcfa9973548 (diff)
ModelEditor: Implement shared clipboard between all open model-editors
Change-Id: Id2eb6f78f8aa1a698a49d35db6cfceab14a38e0b Reviewed-by: Tobias Hunger <tobias.hunger@qt.io>
Diffstat (limited to 'src/plugins/modeleditor/modelsmanager.cpp')
-rw-r--r--src/plugins/modeleditor/modelsmanager.cpp62
1 files changed, 62 insertions, 0 deletions
diff --git a/src/plugins/modeleditor/modelsmanager.cpp b/src/plugins/modeleditor/modelsmanager.cpp
index 89d691ddc6..683006817d 100644
--- a/src/plugins/modeleditor/modelsmanager.cpp
+++ b/src/plugins/modeleditor/modelsmanager.cpp
@@ -34,10 +34,14 @@
#include "pxnodecontroller.h"
#include "qmt/config/configcontroller.h"
+#include "qmt/diagram_controller/dcontainer.h"
+#include "qmt/diagram_controller/dreferences.h"
#include "qmt/diagram_scene/diagramscenemodel.h"
#include "qmt/diagram_ui/diagramsmanager.h"
#include "qmt/model/mdiagram.h"
#include "qmt/model_controller/modelcontroller.h"
+#include "qmt/model_controller/mcontainer.h"
+#include "qmt/model_controller/mreferences.h"
#include "qmt/project_controller/projectcontroller.h"
#include "qmt/project/project.h"
#include "qmt/stereotype/stereotypecontroller.h"
@@ -91,6 +95,11 @@ public:
ModelIndexer *modelIndexer = nullptr;
QList<Core::IDocument *> documentsToBeClosed;
+ ExtDocumentController *modelClipboardDocumentController = nullptr;
+ qmt::MContainer modelClipboard;
+ ExtDocumentController *diagramClipboardDocumentController = nullptr;
+ qmt::DContainer diagramClipboard;
+
QAction *openDiagramContextMenuItem = nullptr;
ProjectExplorer::Node *contextMenuOwnerNode = nullptr;
};
@@ -142,6 +151,10 @@ ExtDocumentController *ModelsManager::createModel(ModelDocument *modelDocument)
void ModelsManager::releaseModel(ExtDocumentController *documentController)
{
+ if (documentController == d->modelClipboardDocumentController)
+ d->modelClipboardDocumentController = nullptr;
+ if (documentController == d->diagramClipboardDocumentController)
+ d->diagramClipboardDocumentController = nullptr;
for (int i = 0; i < d->managedModels.size(); ++i) {
ManagedModel *managedModel = &d->managedModels[i];
if (managedModel->m_documentController == documentController) {
@@ -165,6 +178,55 @@ void ModelsManager::openDiagram(const qmt::Uid &modelUid, const qmt::Uid &diagra
}
}
+bool ModelsManager::isModelClipboardEmpty() const
+{
+ return d->modelClipboard.isEmpty();
+}
+
+ExtDocumentController *ModelsManager::modelClipboardDocumentController() const
+{
+ return d->modelClipboardDocumentController;
+}
+
+qmt::MReferences ModelsManager::modelClipboard() const
+{
+ qmt::MReferences clipboard;
+ clipboard.setElements(d->modelClipboard.elements());
+ return clipboard;
+}
+
+void ModelsManager::setModelClipboard(ExtDocumentController *documentController, const qmt::MContainer &container)
+{
+ d->modelClipboardDocumentController = documentController;
+ d->modelClipboard = container;
+ emit modelClipboardChanged(isModelClipboardEmpty());
+}
+
+bool ModelsManager::isDiagramClipboardEmpty() const
+{
+ return d->diagramClipboard.isEmpty();
+}
+
+ExtDocumentController *ModelsManager::diagramClipboardDocumentController() const
+{
+ return d->diagramClipboardDocumentController;
+}
+
+qmt::DReferences ModelsManager::diagramClipboard() const
+{
+ qmt::DReferences clipboard;
+ clipboard.setElements(d->diagramClipboard.elements());
+ return clipboard;
+}
+
+void ModelsManager::setDiagramClipboard(ExtDocumentController *documentController, const qmt::DContainer &dcontainer, const qmt::MContainer &mcontainer)
+{
+ setModelClipboard(documentController, mcontainer);
+ d->diagramClipboardDocumentController = documentController;
+ d->diagramClipboard = dcontainer;
+ emit diagramClipboardChanged(isDiagramClipboardEmpty());
+}
+
void ModelsManager::onAboutToShowContextMenu(ProjectExplorer::Project *project,
ProjectExplorer::Node *node)
{