summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--share/qtcreator/qml/qmlpuppet/commands/commands.pri2
-rw-r--r--share/qtcreator/qml/qmlpuppet/commands/puppettocreatorcommand.cpp55
-rw-r--r--share/qtcreator/qml/qmlpuppet/commands/puppettocreatorcommand.h56
-rw-r--r--share/qtcreator/qml/qmlpuppet/instances/nodeinstanceclientproxy.cpp6
-rw-r--r--share/qtcreator/qml/qmlpuppet/instances/nodeinstanceclientproxy.h2
-rw-r--r--share/qtcreator/qml/qmlpuppet/interfaces/nodeinstanceclientinterface.h2
-rw-r--r--share/qtcreator/qml/qmlpuppet/interfaces/nodeinstanceserverinterface.cpp7
-rw-r--r--share/qtcreator/qml/qmlpuppet/qml2puppet/instances/qt5informationnodeinstanceserver.cpp8
-rw-r--r--src/plugins/qmldesigner/CMakeLists.txt1
-rw-r--r--src/plugins/qmldesigner/designercore/include/nodeinstanceview.h7
-rw-r--r--src/plugins/qmldesigner/designercore/instances/nodeinstanceserverproxy.cpp4
-rw-r--r--src/plugins/qmldesigner/designercore/instances/nodeinstanceview.cpp42
-rw-r--r--src/plugins/qmldesigner/qmldesignerplugin.qbs2
-rw-r--r--src/tools/qml2puppet/CMakeLists.txt1
-rw-r--r--src/tools/qml2puppet/qml2puppet.qbs2
15 files changed, 193 insertions, 4 deletions
diff --git a/share/qtcreator/qml/qmlpuppet/commands/commands.pri b/share/qtcreator/qml/qmlpuppet/commands/commands.pri
index 47ec4473ea..7bc595154b 100644
--- a/share/qtcreator/qml/qmlpuppet/commands/commands.pri
+++ b/share/qtcreator/qml/qmlpuppet/commands/commands.pri
@@ -31,6 +31,7 @@ HEADERS += $$PWD/drop3dlibraryitemcommand.h
HEADERS += $$PWD/update3dviewstatecommand.h
HEADERS += $$PWD/enable3dviewcommand.h
HEADERS += $$PWD/view3dclosedcommand.h
+HEADERS += $$PWD/puppettocreatorcommand.h
SOURCES += $$PWD/synchronizecommand.cpp
SOURCES += $$PWD/debugoutputcommand.cpp
@@ -63,3 +64,4 @@ SOURCES += $$PWD/drop3dlibraryitemcommand.cpp
SOURCES += $$PWD/update3dviewstatecommand.cpp
SOURCES += $$PWD/enable3dviewcommand.cpp
SOURCES += $$PWD/view3dclosedcommand.cpp
+SOURCES += $$PWD/puppettocreatorcommand.cpp
diff --git a/share/qtcreator/qml/qmlpuppet/commands/puppettocreatorcommand.cpp b/share/qtcreator/qml/qmlpuppet/commands/puppettocreatorcommand.cpp
new file mode 100644
index 0000000000..b346776a24
--- /dev/null
+++ b/share/qtcreator/qml/qmlpuppet/commands/puppettocreatorcommand.cpp
@@ -0,0 +1,55 @@
+/****************************************************************************
+**
+** Copyright (C) 2020 The Qt Company Ltd.
+** Contact: https://www.qt.io/licensing/
+**
+** This file is part of Qt Creator.
+**
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 3 as published by the Free Software
+** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
+** included in the packaging of this file. Please review the following
+** information to ensure the GNU General Public License requirements will
+** be met: https://www.gnu.org/licenses/gpl-3.0.html.
+**
+****************************************************************************/
+
+#include "puppettocreatorcommand.h"
+
+namespace QmlDesigner {
+
+// A generic command that can hold a variant data from puppet to creator
+
+PuppetToCreatorCommand::PuppetToCreatorCommand(Type type, const QVariant &data)
+ : m_type(type)
+ , m_data(data)
+{
+
+}
+
+QDataStream &operator<<(QDataStream &out, const PuppetToCreatorCommand &command)
+{
+ out << qint32(command.type());
+ out << command.data();
+ return out;
+}
+
+QDataStream &operator>>(QDataStream &in, PuppetToCreatorCommand &command)
+{
+ qint32 type;
+ in >> type;
+ command.m_type = PuppetToCreatorCommand::Type(type);
+ in >> command.m_data;
+ return in;
+}
+
+} // namespace QmlDesigner
diff --git a/share/qtcreator/qml/qmlpuppet/commands/puppettocreatorcommand.h b/share/qtcreator/qml/qmlpuppet/commands/puppettocreatorcommand.h
new file mode 100644
index 0000000000..aa4dcd1a44
--- /dev/null
+++ b/share/qtcreator/qml/qmlpuppet/commands/puppettocreatorcommand.h
@@ -0,0 +1,56 @@
+/****************************************************************************
+**
+** Copyright (C) 2020 The Qt Company Ltd.
+** Contact: https://www.qt.io/licensing/
+**
+** This file is part of Qt Creator.
+**
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 3 as published by the Free Software
+** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
+** included in the packaging of this file. Please review the following
+** information to ensure the GNU General Public License requirements will
+** be met: https://www.gnu.org/licenses/gpl-3.0.html.
+**
+****************************************************************************/
+
+#pragma once
+
+#include <qmetatype.h>
+#include <QDataStream>
+
+namespace QmlDesigner {
+
+class PuppetToCreatorCommand
+{
+public:
+ enum Type { Key_Pressed, None };
+
+ PuppetToCreatorCommand(Type type, const QVariant &data);
+ PuppetToCreatorCommand() = default;
+
+ Type type() const { return m_type; }
+ QVariant data() const { return m_data; }
+
+private:
+ Type m_type = None;
+ QVariant m_data;
+
+ friend QDataStream &operator>>(QDataStream &in, PuppetToCreatorCommand &command);
+};
+
+QDataStream &operator<<(QDataStream &out, const PuppetToCreatorCommand &command);
+QDataStream &operator>>(QDataStream &in, PuppetToCreatorCommand &command);
+
+} // namespace QmlDesigner
+
+Q_DECLARE_METATYPE(QmlDesigner::PuppetToCreatorCommand)
diff --git a/share/qtcreator/qml/qmlpuppet/instances/nodeinstanceclientproxy.cpp b/share/qtcreator/qml/qmlpuppet/instances/nodeinstanceclientproxy.cpp
index 01d9cd1842..4ca4f0fb38 100644
--- a/share/qtcreator/qml/qmlpuppet/instances/nodeinstanceclientproxy.cpp
+++ b/share/qtcreator/qml/qmlpuppet/instances/nodeinstanceclientproxy.cpp
@@ -72,6 +72,7 @@
#include "changeselectioncommand.h"
#include "drop3dlibraryitemcommand.h"
#include "view3dclosedcommand.h"
+#include "puppettocreatorcommand.h"
namespace QmlDesigner {
@@ -262,6 +263,11 @@ void NodeInstanceClientProxy::library3DItemDropped(const Drop3DLibraryItemComman
writeCommand(QVariant::fromValue(command));
}
+void NodeInstanceClientProxy::handlePuppetToCreatorCommand(const PuppetToCreatorCommand &command)
+{
+ writeCommand(QVariant::fromValue(command));
+}
+
void NodeInstanceClientProxy::view3DClosed(const View3DClosedCommand &command)
{
writeCommand(QVariant::fromValue(command));
diff --git a/share/qtcreator/qml/qmlpuppet/instances/nodeinstanceclientproxy.h b/share/qtcreator/qml/qmlpuppet/instances/nodeinstanceclientproxy.h
index 7c9724e1ff..6a114bbe3e 100644
--- a/share/qtcreator/qml/qmlpuppet/instances/nodeinstanceclientproxy.h
+++ b/share/qtcreator/qml/qmlpuppet/instances/nodeinstanceclientproxy.h
@@ -60,6 +60,7 @@ class ChangeNodeSourceCommand;
class EndPuppetCommand;
class ChangeSelectionCommand;
class Drop3DLibraryItemCommand;
+class PuppetToCreatorCommand;
class View3DClosedCommand;
class NodeInstanceClientProxy : public QObject, public NodeInstanceClientInterface
@@ -81,6 +82,7 @@ public:
void puppetAlive(const PuppetAliveCommand &command);
void selectionChanged(const ChangeSelectionCommand &command) override;
void library3DItemDropped(const Drop3DLibraryItemCommand &command) override;
+ void handlePuppetToCreatorCommand(const PuppetToCreatorCommand &command) override;
void view3DClosed(const View3DClosedCommand &command) override;
void flush() override;
diff --git a/share/qtcreator/qml/qmlpuppet/interfaces/nodeinstanceclientinterface.h b/share/qtcreator/qml/qmlpuppet/interfaces/nodeinstanceclientinterface.h
index b188d7edfd..d289a1b259 100644
--- a/share/qtcreator/qml/qmlpuppet/interfaces/nodeinstanceclientinterface.h
+++ b/share/qtcreator/qml/qmlpuppet/interfaces/nodeinstanceclientinterface.h
@@ -43,6 +43,7 @@ class PuppetAliveCommand;
class ChangeSelectionCommand;
class Drop3DLibraryItemCommand;
class View3DClosedCommand;
+class PuppetToCreatorCommand;
class NodeInstanceClientInterface
{
@@ -59,6 +60,7 @@ public:
virtual void selectionChanged(const ChangeSelectionCommand &command) = 0;
virtual void library3DItemDropped(const Drop3DLibraryItemCommand &command) = 0;
virtual void view3DClosed(const View3DClosedCommand &command) = 0;
+ virtual void handlePuppetToCreatorCommand(const PuppetToCreatorCommand &command) = 0;
virtual void flush() {}
virtual void synchronizeWithClientProcess() {}
diff --git a/share/qtcreator/qml/qmlpuppet/interfaces/nodeinstanceserverinterface.cpp b/share/qtcreator/qml/qmlpuppet/interfaces/nodeinstanceserverinterface.cpp
index f606bfacf2..5c7c9d2953 100644
--- a/share/qtcreator/qml/qmlpuppet/interfaces/nodeinstanceserverinterface.cpp
+++ b/share/qtcreator/qml/qmlpuppet/interfaces/nodeinstanceserverinterface.cpp
@@ -64,6 +64,7 @@
#include "debugoutputcommand.h"
#include "puppetalivecommand.h"
#include "view3dclosedcommand.h"
+#include "puppettocreatorcommand.h"
#include <enumeration.h>
@@ -209,6 +210,12 @@ void NodeInstanceServerInterface::registerCommands()
qRegisterMetaType<View3DClosedCommand>("View3DClosedCommand");
qRegisterMetaTypeStreamOperators<View3DClosedCommand>("View3DClosedCommand");
+
+ qRegisterMetaType<PuppetToCreatorCommand>("PuppetToCreatorCommand");
+ qRegisterMetaTypeStreamOperators<PuppetToCreatorCommand>("PuppetToCreatorCommand");
+
+ qRegisterMetaType<QPair<int, int>>("QPairIntInt");
+ qRegisterMetaTypeStreamOperators<QPair<int, int>>("QPairIntInt");
}
}
diff --git a/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/qt5informationnodeinstanceserver.cpp b/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/qt5informationnodeinstanceserver.cpp
index db38985d90..b9bc5e8a3f 100644
--- a/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/qt5informationnodeinstanceserver.cpp
+++ b/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/qt5informationnodeinstanceserver.cpp
@@ -61,6 +61,7 @@
#include "removesharedmemorycommand.h"
#include "objectnodeinstance.h"
#include "drop3dlibraryitemcommand.h"
+#include "puppettocreatorcommand.h"
#include "view3dclosedcommand.h"
#include "dummycontextobject.h"
@@ -102,6 +103,13 @@ bool Qt5InformationNodeInstanceServer::eventFilter(QObject *, QEvent *event)
nodeInstanceClient()->view3DClosed(View3DClosedCommand());
} break;
+ case QEvent::KeyPress: {
+ QKeyEvent *keyEvent = static_cast<QKeyEvent *>(event);
+ QPair<int, int> data = {keyEvent->key(), keyEvent->modifiers()};
+ nodeInstanceClient()->handlePuppetToCreatorCommand({PuppetToCreatorCommand::Key_Pressed,
+ QVariant::fromValue(data)});
+ } break;
+
default:
break;
}
diff --git a/src/plugins/qmldesigner/CMakeLists.txt b/src/plugins/qmldesigner/CMakeLists.txt
index 5948c7d3b2..7596514f29 100644
--- a/src/plugins/qmldesigner/CMakeLists.txt
+++ b/src/plugins/qmldesigner/CMakeLists.txt
@@ -143,6 +143,7 @@ extend_qtc_plugin(QmlDesigner
update3dviewstatecommand.cpp update3dviewstatecommand.h
enable3dviewcommand.cpp enable3dviewcommand.h
view3dclosedcommand.cpp view3dclosedcommand.h
+ puppettocreatorcommand.cpp puppettocreatorcommand.h
)
extend_qtc_plugin(QmlDesigner
diff --git a/src/plugins/qmldesigner/designercore/include/nodeinstanceview.h b/src/plugins/qmldesigner/designercore/include/nodeinstanceview.h
index c55dae2d87..3e18424ca6 100644
--- a/src/plugins/qmldesigner/designercore/include/nodeinstanceview.h
+++ b/src/plugins/qmldesigner/designercore/include/nodeinstanceview.h
@@ -147,6 +147,8 @@ public:
void mainWindowActiveChanged(bool active, bool hasPopup);
void enable3DView(bool enable);
+ void handlePuppetToCreatorCommand(const PuppetToCreatorCommand &command) override;
+
protected:
void timerEvent(QTimerEvent *event) override;
@@ -198,12 +200,13 @@ private: // functions
void restartProcess();
void delayedRestartProcess();
-private:
void handleCrash();
void startPuppetTransaction();
void endPuppetTransaction();
-private: //variables
+ // puppet to creator command handlers
+ void handlePuppetKeyPress(int key, Qt::KeyboardModifiers modifiers);
+
NodeInstance m_rootNodeInstance;
NodeInstance m_activeStateInstance;
diff --git a/src/plugins/qmldesigner/designercore/instances/nodeinstanceserverproxy.cpp b/src/plugins/qmldesigner/designercore/instances/nodeinstanceserverproxy.cpp
index 07e3216f37..76e1b34621 100644
--- a/src/plugins/qmldesigner/designercore/instances/nodeinstanceserverproxy.cpp
+++ b/src/plugins/qmldesigner/designercore/instances/nodeinstanceserverproxy.cpp
@@ -45,6 +45,7 @@
#include <changenodesourcecommand.h>
#include <changeselectioncommand.h>
#include <drop3dlibraryitemcommand.h>
+#include <puppettocreatorcommand.h>
#include <view3dclosedcommand.h>
#include <informationchangedcommand.h>
@@ -286,6 +287,7 @@ void NodeInstanceServerProxy::dispatchCommand(const QVariant &command, PuppetStr
static const int puppetAliveCommandType = QMetaType::type("PuppetAliveCommand");
static const int changeSelectionCommandType = QMetaType::type("ChangeSelectionCommand");
static const int drop3DLibraryItemCommandType = QMetaType::type("Drop3DLibraryItemCommand");
+ static const int puppetToCreatorCommand = QMetaType::type("PuppetToCreatorCommand");
static const int view3DClosedCommand = QMetaType::type("View3DClosedCommand");
if (m_destructing)
@@ -314,6 +316,8 @@ void NodeInstanceServerProxy::dispatchCommand(const QVariant &command, PuppetStr
nodeInstanceClient()->selectionChanged(command.value<ChangeSelectionCommand>());
} else if (command.userType() == drop3DLibraryItemCommandType) {
nodeInstanceClient()->library3DItemDropped(command.value<Drop3DLibraryItemCommand>());
+ } else if (command.userType() == puppetToCreatorCommand) {
+ nodeInstanceClient()->handlePuppetToCreatorCommand(command.value<PuppetToCreatorCommand>());
} else if (command.userType() == view3DClosedCommand) {
nodeInstanceClient()->view3DClosed(command.value<View3DClosedCommand>());
} else if (command.userType() == puppetAliveCommandType) {
diff --git a/src/plugins/qmldesigner/designercore/instances/nodeinstanceview.cpp b/src/plugins/qmldesigner/designercore/instances/nodeinstanceview.cpp
index a550a2e4b2..b06b513726 100644
--- a/src/plugins/qmldesigner/designercore/instances/nodeinstanceview.cpp
+++ b/src/plugins/qmldesigner/designercore/instances/nodeinstanceview.cpp
@@ -30,7 +30,7 @@
#include <metainfo.h>
#include <nodehints.h>
#include <rewriterview.h>
-
+#include "qmldesignerplugin.h"
#include "abstractproperty.h"
#include "variantproperty.h"
#include "bindingproperty.h"
@@ -42,7 +42,10 @@
#include "qmltimeline.h"
#include "qmltimelinekeyframegroup.h"
#include "qmlvisualnode.h"
-
+#include "coreplugin/actionmanager/actionmanager.h"
+#include "coreplugin/editormanager/editormanager.h"
+#include "coreplugin/documentmanager.h"
+#include "plugins/qmldesigner/qmldesignerconstants.h"
#include "createscenecommand.h"
#include "createinstancescommand.h"
#include "clearscenecommand.h"
@@ -71,6 +74,7 @@
#include "removesharedmemorycommand.h"
#include "debugoutputcommand.h"
#include "nodeinstanceserverproxy.h"
+#include "puppettocreatorcommand.h"
#include <utils/algorithm.h>
#include <utils/qtcassert.h>
@@ -1454,6 +1458,40 @@ void NodeInstanceView::library3DItemDropped(const Drop3DLibraryItemCommand &comm
QmlVisualNode::createQmlVisualNode(this, itemLibraryEntry, {});
}
+void NodeInstanceView::handlePuppetToCreatorCommand(const PuppetToCreatorCommand &command)
+{
+ if (command.type() == PuppetToCreatorCommand::Key_Pressed) {
+ QPair<int, int> data = qvariant_cast<QPair<int, int>>(command.data());
+ int key = data.first;
+ Qt::KeyboardModifiers modifiers = Qt::KeyboardModifiers(data.second);
+
+ handlePuppetKeyPress(key, modifiers);
+ }
+}
+
+// puppet to creator command handlers
+void NodeInstanceView::handlePuppetKeyPress(int key, Qt::KeyboardModifiers modifiers)
+{
+ // TODO: optimal way to handle key events is to just pass them on. This is done
+ // using the code below but it is so far not working, if someone could get it to work then
+ // it should be utilized and the rest of the method deleted
+// QCoreApplication::postEvent([receiver], new QKeyEvent(QEvent::KeyPress, key, modifiers));
+
+ // handle common keyboard actions coming from puppet
+ if (Core::ActionManager::command(Core::Constants::UNDO)->keySequence().matches(key + modifiers) == QKeySequence::ExactMatch)
+ QmlDesignerPlugin::instance()->currentDesignDocument()->undo();
+ else if (Core::ActionManager::command(Core::Constants::REDO)->keySequence().matches(key + modifiers) == QKeySequence::ExactMatch)
+ QmlDesignerPlugin::instance()->currentDesignDocument()->redo();
+ else if (Core::ActionManager::command(Core::Constants::SAVE)->keySequence().matches(key + modifiers) == QKeySequence::ExactMatch)
+ Core::EditorManager::saveDocument();
+ else if (Core::ActionManager::command(Core::Constants::SAVEAS)->keySequence().matches(key + modifiers) == QKeySequence::ExactMatch)
+ Core::EditorManager::saveDocumentAs();
+ else if (Core::ActionManager::command(Core::Constants::SAVEALL)->keySequence().matches(key + modifiers) == QKeySequence::ExactMatch)
+ Core::DocumentManager::saveAllModifiedDocuments();
+ else if (Core::ActionManager::command(QmlDesigner::Constants::C_DELETE)->keySequence().matches(key + modifiers) == QKeySequence::ExactMatch)
+ QmlDesignerPlugin::instance()->currentDesignDocument()->deleteSelected();
+}
+
void NodeInstanceView::view3DClosed(const View3DClosedCommand &command)
{
Q_UNUSED(command)
diff --git a/src/plugins/qmldesigner/qmldesignerplugin.qbs b/src/plugins/qmldesigner/qmldesignerplugin.qbs
index 454fdfced0..6b11bf52bf 100644
--- a/src/plugins/qmldesigner/qmldesignerplugin.qbs
+++ b/src/plugins/qmldesigner/qmldesignerplugin.qbs
@@ -177,6 +177,8 @@ Project {
"commands/enable3dviewcommand.h",
"commands/view3dclosedcommand.cpp",
"commands/view3dclosedcommand.h",
+ "commands/puppettocreatorcommand.cpp",
+ "commands/puppettocreatorcommand.h",
"container/addimportcontainer.cpp",
"container/addimportcontainer.h",
"container/idcontainer.cpp",
diff --git a/src/tools/qml2puppet/CMakeLists.txt b/src/tools/qml2puppet/CMakeLists.txt
index 3912645283..06e224a96f 100644
--- a/src/tools/qml2puppet/CMakeLists.txt
+++ b/src/tools/qml2puppet/CMakeLists.txt
@@ -49,6 +49,7 @@ extend_qtc_executable(qml2puppet
update3dviewstatecommand.cpp update3dviewstatecommand.h
enable3dviewcommand.cpp enable3dviewcommand.h
view3dclosedcommand.cpp view3dclosedcommand.h
+ puppettocreatorcommand.cpp puppettocreatorcommand.h
valueschangedcommand.cpp
)
diff --git a/src/tools/qml2puppet/qml2puppet.qbs b/src/tools/qml2puppet/qml2puppet.qbs
index 645250c2d4..cef1c5fe0b 100644
--- a/src/tools/qml2puppet/qml2puppet.qbs
+++ b/src/tools/qml2puppet/qml2puppet.qbs
@@ -103,6 +103,8 @@ QtcTool {
"commands/enable3dviewcommand.h",
"commands/view3dclosedcommand.cpp",
"commands/view3dclosedcommand.h",
+ "commands/puppettocreatorcommand.cpp",
+ "commands/puppettocreatorcommand.h",
"container/addimportcontainer.cpp",
"container/addimportcontainer.h",
"container/idcontainer.cpp",