summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMahmoud Badri <mahmoud.badri@qt.io>2019-12-11 21:29:10 +0200
committerMahmoud Badri <mahmoud.badri@qt.io>2019-12-13 12:40:43 +0000
commitf97de35dd4af80fa5f3d4229ac4aa8519d9e1d38 (patch)
treeebc8244942f8014726a7166464f3cc8153d6de21
parentc2bfdff70b4d539e719d7eb78a59ed4214b683f4 (diff)
downloadqt-creator-qds/v1.4.0-rc1.tar.gz
Improve edit view 3D "on top" logicqds/v1.4.0-rc1
- Proxy dialog removed - When the QDS window is minimized/maximized, the edit view 3D follows. The opposite is not true (edit view 3D can be minimized separately). - Edit view 3D is always on top of QDS window. Only exception is when a popup is shown (so that the user can handle the popup). - External apps go normally on top of the edit view 3D. Known (non critical) issues: - Activating the edit view 3D doesn't raise() the QDS window, so if an external app is on top of the edit view 3D then the view is clicked, the external app will be in between the view and the QDS window. - Closing the edit view 3D from the x button doesnt work (causes a restart). This is not in the scope of this commit. Task-number: QDS-1179 Change-Id: I1dd72590037be295b94735de96772307ba14c59c Reviewed-by: Mahmoud Badri <mahmoud.badri@qt.io> Reviewed-by: Thomas Hartmann <thomas.hartmann@qt.io> Reviewed-by: Tim Jenssen <tim.jenssen@qt.io>
-rw-r--r--share/qtcreator/qml/qmlpuppet/commands/commands.pri6
-rw-r--r--share/qtcreator/qml/qmlpuppet/commands/enable3dviewcommand.cpp (renamed from share/qtcreator/qml/qmlpuppet/commands/change3dviewcommand.cpp)28
-rw-r--r--share/qtcreator/qml/qmlpuppet/commands/enable3dviewcommand.h (renamed from share/qtcreator/qml/qmlpuppet/commands/change3dviewcommand.h)25
-rw-r--r--share/qtcreator/qml/qmlpuppet/commands/update3dviewstatecommand.cpp106
-rw-r--r--share/qtcreator/qml/qmlpuppet/commands/update3dviewstatecommand.h (renamed from src/plugins/qmldesigner/components/formeditor/editview3dproxydialog.h)52
-rw-r--r--share/qtcreator/qml/qmlpuppet/instances/nodeinstanceclientproxy.cpp21
-rw-r--r--share/qtcreator/qml/qmlpuppet/instances/nodeinstanceclientproxy.h6
-rw-r--r--share/qtcreator/qml/qmlpuppet/interfaces/nodeinstanceserverinterface.cpp10
-rw-r--r--share/qtcreator/qml/qmlpuppet/interfaces/nodeinstanceserverinterface.h6
-rw-r--r--share/qtcreator/qml/qmlpuppet/mockfiles/EditView3D.qml12
-rw-r--r--share/qtcreator/qml/qmlpuppet/qml2puppet/instances/nodeinstanceserver.cpp6
-rw-r--r--share/qtcreator/qml/qmlpuppet/qml2puppet/instances/nodeinstanceserver.h3
-rw-r--r--share/qtcreator/qml/qmlpuppet/qml2puppet/instances/qt5informationnodeinstanceserver.cpp117
-rw-r--r--share/qtcreator/qml/qmlpuppet/qml2puppet/instances/qt5informationnodeinstanceserver.h12
-rw-r--r--src/plugins/coreplugin/icore.h2
-rw-r--r--src/plugins/coreplugin/mainwindow.cpp13
-rw-r--r--src/plugins/coreplugin/mainwindow.h2
-rw-r--r--src/plugins/qmldesigner/CMakeLists.txt4
-rw-r--r--src/plugins/qmldesigner/components/formeditor/editview3dproxydialog.cpp168
-rw-r--r--src/plugins/qmldesigner/components/formeditor/formeditor.pri2
-rw-r--r--src/plugins/qmldesigner/components/formeditor/formeditorview.cpp5
-rw-r--r--src/plugins/qmldesigner/components/formeditor/formeditorwidget.cpp15
-rw-r--r--src/plugins/qmldesigner/components/formeditor/formeditorwidget.h5
-rw-r--r--src/plugins/qmldesigner/designercore/include/nodeinstanceview.h9
-rw-r--r--src/plugins/qmldesigner/designercore/instances/nodeinstanceserverproxy.cpp10
-rw-r--r--src/plugins/qmldesigner/designercore/instances/nodeinstanceserverproxy.h3
-rw-r--r--src/plugins/qmldesigner/designercore/instances/nodeinstanceview.cpp34
-rw-r--r--src/plugins/qmldesigner/qmldesignerplugin.cpp11
-rw-r--r--src/plugins/qmldesigner/qmldesignerplugin.qbs8
-rw-r--r--src/tools/qml2puppet/CMakeLists.txt3
-rw-r--r--src/tools/qml2puppet/qml2puppet.qbs6
31 files changed, 307 insertions, 403 deletions
diff --git a/share/qtcreator/qml/qmlpuppet/commands/commands.pri b/share/qtcreator/qml/qmlpuppet/commands/commands.pri
index ffd1ce6dea..7985b25975 100644
--- a/share/qtcreator/qml/qmlpuppet/commands/commands.pri
+++ b/share/qtcreator/qml/qmlpuppet/commands/commands.pri
@@ -28,7 +28,8 @@ HEADERS += $$PWD/removesharedmemorycommand.h
HEADERS += $$PWD/puppetalivecommand.h
HEADERS += $$PWD/changeselectioncommand.h
HEADERS += $$PWD/drop3dlibraryitemcommand.h
-HEADERS += $$PWD/change3dviewcommand.h
+HEADERS += $$PWD/update3dviewstatecommand.h
+HEADERS += $$PWD/enable3dviewcommand.h
SOURCES += $$PWD/synchronizecommand.cpp
SOURCES += $$PWD/debugoutputcommand.cpp
@@ -58,4 +59,5 @@ SOURCES += $$PWD/removesharedmemorycommand.cpp
SOURCES += $$PWD/puppetalivecommand.cpp
SOURCES += $$PWD/changeselectioncommand.cpp
SOURCES += $$PWD/drop3dlibraryitemcommand.cpp
-SOURCES += $$PWD/change3dviewcommand.cpp
+SOURCES += $$PWD/update3dviewstatecommand.cpp
+SOURCES += $$PWD/enable3dviewcommand.cpp
diff --git a/share/qtcreator/qml/qmlpuppet/commands/change3dviewcommand.cpp b/share/qtcreator/qml/qmlpuppet/commands/enable3dviewcommand.cpp
index ad4832d86b..7fd3b3f350 100644
--- a/share/qtcreator/qml/qmlpuppet/commands/change3dviewcommand.cpp
+++ b/share/qtcreator/qml/qmlpuppet/commands/enable3dviewcommand.cpp
@@ -23,41 +23,43 @@
**
****************************************************************************/
-#include "change3dviewcommand.h"
+#include "enable3dviewcommand.h"
#include <QDebug>
+#include <QDataStream>
namespace QmlDesigner {
-Change3DViewCommand::Change3DViewCommand() = default;
-
-Change3DViewCommand::Change3DViewCommand(const QVector<InformationContainer> &informationVector)
- : m_informationVector(informationVector)
+// open / close edit view 3D command
+Enable3DViewCommand::Enable3DViewCommand(bool enable)
+ : m_enable(enable)
{
}
-QVector<InformationContainer> Change3DViewCommand::informationVector() const
+bool Enable3DViewCommand::isEnable() const
{
- return m_informationVector;
+ return m_enable;
}
-QDataStream &operator<<(QDataStream &out, const Change3DViewCommand &command)
+QDataStream &operator<<(QDataStream &out, const Enable3DViewCommand &command)
{
- out << command.informationVector();
+ out << qint32(command.isEnable());
return out;
}
-QDataStream &operator>>(QDataStream &in, Change3DViewCommand &command)
+QDataStream &operator>>(QDataStream &in, Enable3DViewCommand &command)
{
- in >> command.m_informationVector;
+ qint32 enable;
+ in >> enable;
+ command.m_enable = enable;
return in;
}
-QDebug operator <<(QDebug debug, const Change3DViewCommand &command)
+QDebug operator<<(QDebug debug, const Enable3DViewCommand &command)
{
- return debug.nospace() << "Change3DViewCommand(auxiliaryChanges: " << command.m_informationVector << ")";
+ return debug.nospace() << "Enable3DViewCommand(enable: " << command.m_enable << ")";
}
} // namespace QmlDesigner
diff --git a/share/qtcreator/qml/qmlpuppet/commands/change3dviewcommand.h b/share/qtcreator/qml/qmlpuppet/commands/enable3dviewcommand.h
index 6b1b062da0..cd9529fbb5 100644
--- a/share/qtcreator/qml/qmlpuppet/commands/change3dviewcommand.h
+++ b/share/qtcreator/qml/qmlpuppet/commands/enable3dviewcommand.h
@@ -26,32 +26,29 @@
#pragma once
#include <QMetaType>
-#include <QVector>
-
-#include "informationcontainer.h"
namespace QmlDesigner {
-class Change3DViewCommand
+class Enable3DViewCommand
{
- friend QDataStream &operator>>(QDataStream &in, Change3DViewCommand &command);
- friend QDebug operator <<(QDebug debug, const Change3DViewCommand &command);
+ friend QDataStream &operator>>(QDataStream &in, Enable3DViewCommand &command);
+ friend QDebug operator<<(QDebug debug, const Enable3DViewCommand &command);
public:
- Change3DViewCommand();
- explicit Change3DViewCommand(const QVector<InformationContainer> &auxiliaryChangeVector);
+ explicit Enable3DViewCommand(bool enable);
+ Enable3DViewCommand() = default;
- QVector<InformationContainer> informationVector() const;
+ bool isEnable() const;
private:
- QVector<InformationContainer> m_informationVector;
+ bool m_enable = true;
};
-QDataStream &operator<<(QDataStream &out, const Change3DViewCommand &command);
-QDataStream &operator>>(QDataStream &in, Change3DViewCommand &command);
+QDataStream &operator<<(QDataStream &out, const Enable3DViewCommand &command);
+QDataStream &operator>>(QDataStream &in, Enable3DViewCommand &command);
-QDebug operator <<(QDebug debug, const Change3DViewCommand &command);
+QDebug operator<<(QDebug debug, const Enable3DViewCommand &command);
} // namespace QmlDesigner
-Q_DECLARE_METATYPE(QmlDesigner::Change3DViewCommand)
+Q_DECLARE_METATYPE(QmlDesigner::Enable3DViewCommand)
diff --git a/share/qtcreator/qml/qmlpuppet/commands/update3dviewstatecommand.cpp b/share/qtcreator/qml/qmlpuppet/commands/update3dviewstatecommand.cpp
new file mode 100644
index 0000000000..b387cf09f3
--- /dev/null
+++ b/share/qtcreator/qml/qmlpuppet/commands/update3dviewstatecommand.cpp
@@ -0,0 +1,106 @@
+/****************************************************************************
+**
+** Copyright (C) 2019 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 "update3dviewstatecommand.h"
+
+#include <QDebug>
+#include <QDataStream>
+
+namespace QmlDesigner {
+
+Update3dViewStateCommand::Update3dViewStateCommand(Qt::WindowStates previousStates,
+ Qt::WindowStates currentStates)
+ : m_previousStates(previousStates)
+ , m_currentStates(currentStates)
+ , m_type(Update3dViewStateCommand::StateChange)
+{
+}
+
+Update3dViewStateCommand::Update3dViewStateCommand(bool active, bool hasPopup)
+ : m_active(active)
+ , m_hasPopup(hasPopup)
+ , m_type(Update3dViewStateCommand::ActiveChange)
+{
+}
+
+Qt::WindowStates Update3dViewStateCommand::previousStates() const
+{
+ return m_previousStates;
+}
+
+Qt::WindowStates Update3dViewStateCommand::currentStates() const
+{
+ return m_currentStates;
+}
+
+bool Update3dViewStateCommand::isActive() const
+{
+ return m_active;
+}
+
+bool Update3dViewStateCommand::hasPopup() const
+{
+ return m_hasPopup;
+}
+
+Update3dViewStateCommand::Type Update3dViewStateCommand::type() const
+{
+ return m_type;
+}
+
+QDataStream &operator<<(QDataStream &out, const Update3dViewStateCommand &command)
+{
+ out << command.previousStates();
+ out << command.currentStates();
+ out << qint32(command.isActive());
+ out << qint32(command.hasPopup());
+ out << qint32(command.type());
+
+ return out;
+}
+
+QDataStream &operator>>(QDataStream &in, Update3dViewStateCommand &command)
+{
+ in >> command.m_previousStates;
+ in >> command.m_currentStates;
+ qint32 active;
+ qint32 hasPopup;
+ qint32 type;
+ in >> active;
+ in >> hasPopup;
+ in >> type;
+ command.m_active = active;
+ command.m_hasPopup = hasPopup;
+ command.m_type = Update3dViewStateCommand::Type(type);
+
+ return in;
+}
+
+QDebug operator<<(QDebug debug, const Update3dViewStateCommand &command)
+{
+ return debug.nospace() << "Update3dViewStateCommand(type: " << command.m_type << ")";
+}
+
+} // namespace QmlDesigner
diff --git a/src/plugins/qmldesigner/components/formeditor/editview3dproxydialog.h b/share/qtcreator/qml/qmlpuppet/commands/update3dviewstatecommand.h
index 717deca7f9..de8511255d 100644
--- a/src/plugins/qmldesigner/components/formeditor/editview3dproxydialog.h
+++ b/share/qtcreator/qml/qmlpuppet/commands/update3dviewstatecommand.h
@@ -25,43 +25,45 @@
#pragma once
-#include "abstractcustomtool.h"
-
-#include <QObject>
-#include <QDialog>
+#include <QMetaType>
namespace QmlDesigner {
-class FormEditorView;
-class NodeInstanceView;
-
-class EditView3DProxyDialog : public QDialog
+class Update3dViewStateCommand
{
- Q_OBJECT
+ friend QDataStream &operator>>(QDataStream &in, Update3dViewStateCommand &command);
+ friend QDebug operator<<(QDebug debug, const Update3dViewStateCommand &command);
public:
- explicit EditView3DProxyDialog(FormEditorView *view);
+ enum Type { StateChange, ActiveChange, Empty };
+
+ explicit Update3dViewStateCommand(Qt::WindowStates previousStates, Qt::WindowStates currentStates);
+ explicit Update3dViewStateCommand(bool active, bool hasPopup);
+ Update3dViewStateCommand() = default;
- void invalidate();
+ Qt::WindowStates previousStates() const;
+ Qt::WindowStates currentStates() const;
-protected:
- void moveEvent(QMoveEvent *event) override;
- void closeEvent(QCloseEvent *event) override;
- void hideEvent(QHideEvent *event) override;
- void focusOutEvent(QFocusEvent *event) override;
- void focusInEvent(QFocusEvent *event) override;
- void resizeEvent(QResizeEvent *event) override;
- bool event(QEvent *event) override;
+ bool isActive() const;
+ bool hasPopup() const;
+
+ Type type() const;
private:
- QRect adjustedRect() const;
- NodeInstanceView *nodeInstanceView() const;
- void showView();
- void hideView();
+ Qt::WindowStates m_previousStates = Qt::WindowNoState;
+ Qt::WindowStates m_currentStates = Qt::WindowNoState;
- QPointer<FormEditorView> m_formEditorView;
+ bool m_active = false;
+ bool m_hasPopup = false;
+ Type m_type = Empty;
};
-} //QmlDesigner
+QDataStream &operator<<(QDataStream &out, const Update3dViewStateCommand &command);
+QDataStream &operator>>(QDataStream &in, Update3dViewStateCommand &command);
+
+QDebug operator<<(QDebug debug, const Update3dViewStateCommand &command);
+
+} // namespace QmlDesigner
+Q_DECLARE_METATYPE(QmlDesigner::Update3dViewStateCommand)
diff --git a/share/qtcreator/qml/qmlpuppet/instances/nodeinstanceclientproxy.cpp b/share/qtcreator/qml/qmlpuppet/instances/nodeinstanceclientproxy.cpp
index 93520c2f7d..d12cfe327f 100644
--- a/share/qtcreator/qml/qmlpuppet/instances/nodeinstanceclientproxy.cpp
+++ b/share/qtcreator/qml/qmlpuppet/instances/nodeinstanceclientproxy.cpp
@@ -41,7 +41,8 @@
#include "instancecontainer.h"
#include "createinstancescommand.h"
#include "createscenecommand.h"
-#include "change3dviewcommand.h"
+#include "update3dviewstatecommand.h"
+#include "enable3dviewcommand.h"
#include "changevaluescommand.h"
#include "changebindingscommand.h"
#include "changeauxiliarycommand.h"
@@ -361,9 +362,14 @@ void NodeInstanceClientProxy::createScene(const CreateSceneCommand &command)
nodeInstanceServer()->createScene(command);
}
-void NodeInstanceClientProxy::change3DView(const Change3DViewCommand &command)
+void NodeInstanceClientProxy::update3DViewState(const Update3dViewStateCommand &command)
{
- nodeInstanceServer()->change3DView(command);
+ nodeInstanceServer()->update3DViewState(command);
+}
+
+void NodeInstanceClientProxy::enable3DView(const Enable3DViewCommand &command)
+{
+ nodeInstanceServer()->enable3DView(command);
}
void NodeInstanceClientProxy::clearScene(const ClearSceneCommand &command)
@@ -453,7 +459,8 @@ void NodeInstanceClientProxy::changeSelection(const ChangeSelectionCommand &comm
void NodeInstanceClientProxy::dispatchCommand(const QVariant &command)
{
static const int createInstancesCommandType = QMetaType::type("CreateInstancesCommand");
- static const int change3DViewCommandType = QMetaType::type("Change3DViewCommand");
+ static const int update3dViewStateCommand = QMetaType::type("Update3dViewStateCommand");
+ static const int enable3DViewCommandType = QMetaType::type("Enable3DViewCommand");
static const int changeFileUrlCommandType = QMetaType::type("ChangeFileUrlCommand");
static const int createSceneCommandType = QMetaType::type("CreateSceneCommand");
static const int clearSceneCommandType = QMetaType::type("ClearSceneCommand");
@@ -477,8 +484,10 @@ void NodeInstanceClientProxy::dispatchCommand(const QVariant &command)
if (commandType == createInstancesCommandType)
createInstances(command.value<CreateInstancesCommand>());
- else if (commandType == change3DViewCommandType)
- change3DView(command.value<Change3DViewCommand>());
+ else if (commandType == update3dViewStateCommand)
+ update3DViewState(command.value<Update3dViewStateCommand>());
+ else if (commandType == enable3DViewCommandType)
+ enable3DView(command.value<Enable3DViewCommand>());
else if (commandType == changeFileUrlCommandType)
changeFileUrl(command.value<ChangeFileUrlCommand>());
else if (commandType == createSceneCommandType)
diff --git a/share/qtcreator/qml/qmlpuppet/instances/nodeinstanceclientproxy.h b/share/qtcreator/qml/qmlpuppet/instances/nodeinstanceclientproxy.h
index e9044b63ef..5a742947d2 100644
--- a/share/qtcreator/qml/qmlpuppet/instances/nodeinstanceclientproxy.h
+++ b/share/qtcreator/qml/qmlpuppet/instances/nodeinstanceclientproxy.h
@@ -45,7 +45,8 @@ class CreateSceneCommand;
class CreateInstancesCommand;
class ClearSceneCommand;
class ReparentInstancesCommand;
-class Change3DViewCommand;
+class Update3dViewStateCommand;
+class Enable3DViewCommand;
class ChangeFileUrlCommand;
class ChangeValuesCommand;
class ChangeAuxiliaryCommand;
@@ -96,7 +97,8 @@ protected:
void changeFileUrl(const ChangeFileUrlCommand &command);
void createScene(const CreateSceneCommand &command);
void clearScene(const ClearSceneCommand &command);
- void change3DView(const Change3DViewCommand &command);
+ void update3DViewState(const Update3dViewStateCommand &command);
+ void enable3DView(const Enable3DViewCommand &command);
void removeInstances(const RemoveInstancesCommand &command);
void removeProperties(const RemovePropertiesCommand &command);
void changePropertyBindings(const ChangeBindingsCommand &command);
diff --git a/share/qtcreator/qml/qmlpuppet/interfaces/nodeinstanceserverinterface.cpp b/share/qtcreator/qml/qmlpuppet/interfaces/nodeinstanceserverinterface.cpp
index 83c8c67ef7..bbd73e63ca 100644
--- a/share/qtcreator/qml/qmlpuppet/interfaces/nodeinstanceserverinterface.cpp
+++ b/share/qtcreator/qml/qmlpuppet/interfaces/nodeinstanceserverinterface.cpp
@@ -32,7 +32,8 @@
#include "instancecontainer.h"
#include "createinstancescommand.h"
#include "createscenecommand.h"
-#include "change3dviewcommand.h"
+#include "update3dviewstatecommand.h"
+#include "enable3dviewcommand.h"
#include "changevaluescommand.h"
#include "changebindingscommand.h"
#include "changeauxiliarycommand.h"
@@ -91,8 +92,11 @@ void NodeInstanceServerInterface::registerCommands()
qRegisterMetaType<CreateSceneCommand>("CreateSceneCommand");
qRegisterMetaTypeStreamOperators<CreateSceneCommand>("CreateSceneCommand");
- qRegisterMetaType<Change3DViewCommand>("Change3DViewCommand");
- qRegisterMetaTypeStreamOperators<Change3DViewCommand>("Change3DViewCommand");
+ qRegisterMetaType<Update3dViewStateCommand>("Update3dViewStateCommand");
+ qRegisterMetaTypeStreamOperators<Update3dViewStateCommand>("Update3dViewStateCommand");
+
+ qRegisterMetaType<Enable3DViewCommand>("Enable3DViewCommand");
+ qRegisterMetaTypeStreamOperators<Enable3DViewCommand>("Enable3DViewCommand");
qRegisterMetaType<ChangeBindingsCommand>("ChangeBindingsCommand");
qRegisterMetaTypeStreamOperators<ChangeBindingsCommand>("ChangeBindingsCommand");
diff --git a/share/qtcreator/qml/qmlpuppet/interfaces/nodeinstanceserverinterface.h b/share/qtcreator/qml/qmlpuppet/interfaces/nodeinstanceserverinterface.h
index 3dc651ef2f..e60d99b1e1 100644
--- a/share/qtcreator/qml/qmlpuppet/interfaces/nodeinstanceserverinterface.h
+++ b/share/qtcreator/qml/qmlpuppet/interfaces/nodeinstanceserverinterface.h
@@ -33,7 +33,8 @@ class PropertyAbstractContainer;
class PropertyBindingContainer;
class PropertyValueContainer;
-class Change3DViewCommand;
+class Update3dViewStateCommand;
+class Enable3DViewCommand;
class ChangeFileUrlCommand;
class ChangeValuesCommand;
class ChangeBindingsCommand;
@@ -67,7 +68,8 @@ public:
virtual void changeFileUrl(const ChangeFileUrlCommand &command) = 0;
virtual void createScene(const CreateSceneCommand &command) = 0;
virtual void clearScene(const ClearSceneCommand &command) = 0;
- virtual void change3DView(const Change3DViewCommand &command) = 0;
+ virtual void update3DViewState(const Update3dViewStateCommand &command) = 0;
+ virtual void enable3DView(const Enable3DViewCommand &command) = 0;
virtual void removeInstances(const RemoveInstancesCommand &command) = 0;
virtual void removeProperties(const RemovePropertiesCommand &command) = 0;
virtual void changePropertyBindings(const ChangeBindingsCommand &command) = 0;
diff --git a/share/qtcreator/qml/qmlpuppet/mockfiles/EditView3D.qml b/share/qtcreator/qml/qmlpuppet/mockfiles/EditView3D.qml
index 9cdb74fc12..1e471d73f1 100644
--- a/share/qtcreator/qml/qmlpuppet/mockfiles/EditView3D.qml
+++ b/share/qtcreator/qml/qmlpuppet/mockfiles/EditView3D.qml
@@ -34,14 +34,10 @@ Window {
id: viewWindow
width: 1024
height: 768
- visible: false
- title: "3D"
- flags: Qt.Widget | Qt.SplashScreen
-
- onActiveChanged: {
- if (viewWindow.active)
- cameraControl.forceActiveFocus()
- }
+ visible: true
+ title: "3D Edit View"
+ // need all those flags otherwise the title bar disappears after setting WindowStaysOnTopHint flag later
+ flags: Qt.Window | Qt.WindowTitleHint | Qt.WindowSystemMenuHint | Qt.WindowMinMaxButtonsHint | Qt.WindowCloseButtonHint
property alias scene: editView.importScene
property alias showEditLight: btnEditViewLight.toggled
diff --git a/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/nodeinstanceserver.cpp b/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/nodeinstanceserver.cpp
index d19c0faea4..5f277bf6bb 100644
--- a/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/nodeinstanceserver.cpp
+++ b/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/nodeinstanceserver.cpp
@@ -332,7 +332,11 @@ void NodeInstanceServer::clearScene(const ClearSceneCommand &/*command*/)
m_fileUrl.clear();
}
-void NodeInstanceServer::change3DView(const Change3DViewCommand &/*command*/)
+void NodeInstanceServer::update3DViewState(const Update3dViewStateCommand &/*command*/)
+{
+}
+
+void NodeInstanceServer::enable3DView(const Enable3DViewCommand &/*command*/)
{
}
diff --git a/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/nodeinstanceserver.h b/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/nodeinstanceserver.h
index ba74636733..861b674af9 100644
--- a/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/nodeinstanceserver.h
+++ b/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/nodeinstanceserver.h
@@ -101,7 +101,8 @@ public:
void changeIds(const ChangeIdsCommand &command) override;
void createScene(const CreateSceneCommand &command) override;
void clearScene(const ClearSceneCommand &command) override;
- void change3DView(const Change3DViewCommand &command) override;
+ void update3DViewState(const Update3dViewStateCommand &command) override;
+ void enable3DView(const Enable3DViewCommand &command) override;
void removeInstances(const RemoveInstancesCommand &command) override;
void removeProperties(const RemovePropertiesCommand &command) override;
void reparentInstances(const ReparentInstancesCommand &command) override;
diff --git a/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/qt5informationnodeinstanceserver.cpp b/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/qt5informationnodeinstanceserver.cpp
index dcaf9a7345..e65b1b4b2d 100644
--- a/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/qt5informationnodeinstanceserver.cpp
+++ b/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/qt5informationnodeinstanceserver.cpp
@@ -40,7 +40,8 @@
#include "changefileurlcommand.h"
#include "clearscenecommand.h"
#include "reparentinstancescommand.h"
-#include "change3dviewcommand.h"
+#include "update3dviewstatecommand.h"
+#include "enable3dviewcommand.h"
#include "changevaluescommand.h"
#include "changebindingscommand.h"
#include "changeidscommand.h"
@@ -59,7 +60,7 @@
#include "tokencommand.h"
#include "removesharedmemorycommand.h"
#include "objectnodeinstance.h"
-#include <drop3dlibraryitemcommand.h>
+#include "drop3dlibraryitemcommand.h"
#include "dummycontextobject.h"
#include "../editor3d/generalhelper.h"
@@ -119,7 +120,7 @@ QObject *Qt5InformationNodeInstanceServer::createEditView3D(QQmlEngine *engine)
QWindow *window = qobject_cast<QWindow *>(component.create());
if (!window) {
- qWarning() << "Could not create edit view" << component.errors();
+ qWarning() << "Could not create edit view 3D: " << component.errors();
return nullptr;
}
@@ -130,8 +131,6 @@ QObject *Qt5InformationNodeInstanceServer::createEditView3D(QQmlEngine *engine)
this, SLOT(handleObjectPropertyCommit(QVariant, QVariant)));
QObject::connect(window, SIGNAL(changeObjectProperty(QVariant, QVariant)),
this, SLOT(handleObjectPropertyChange(QVariant, QVariant)));
- QObject::connect(window, SIGNAL(activeChanged()),
- this, SLOT(handleActiveChanged()));
QObject::connect(&m_propertyChangeTimer, &QTimer::timeout,
this, &Qt5InformationNodeInstanceServer::handleObjectPropertyChangeTimeout);
QObject::connect(&m_selectionChangeTimer, &QTimer::timeout,
@@ -150,7 +149,7 @@ QObject *Qt5InformationNodeInstanceServer::createEditView3D(QQmlEngine *engine)
return window;
}
-// The selection has changed in the 3D edit view. Empty list indicates selection is cleared.
+// The selection has changed in the edit view 3D. Empty list indicates selection is cleared.
void Qt5InformationNodeInstanceServer::handleSelectionChanged(const QVariant &objs)
{
QList<ServerNodeInstance> instanceList;
@@ -231,65 +230,6 @@ void Qt5InformationNodeInstanceServer::modifyVariantValue(
}
}
-void Qt5InformationNodeInstanceServer::showEditView(const QPoint &pos, const QSize &size)
-{
- m_blockViewActivate = false;
- auto window = qobject_cast<QWindow *>(m_editView3D);
- if (window) {
- activateEditView();
- window->setPosition(pos);
- window->resize(size);
- }
-}
-
-void Qt5InformationNodeInstanceServer::hideEditView()
-{
- m_blockViewActivate = true;
- auto window = qobject_cast<QWindow *>(m_editView3D);
- if (window)
- window->hide();
-}
-
-void Qt5InformationNodeInstanceServer::activateEditView()
-{
- auto window = qobject_cast<QWindow *>(m_editView3D);
- if (window) {
- Qt::WindowFlags flags = window->flags();
-
-#ifdef Q_OS_MACOS
- window->setFlags(Qt::Popup);
- window->show();
- window->setFlags(flags);
-#else
- window->raise();
- window->setFlags(flags | Qt::WindowStaysOnTopHint);
- window->show();
-
- window->requestActivate();
- window->raise();
- window->setFlags(flags);
-#endif
- }
-}
-
-void Qt5InformationNodeInstanceServer::moveEditView(const QPoint &pos)
-{
- auto window = qobject_cast<QWindow*>(m_editView3D);
- if (window) {
- activateEditView();
- window->setPosition(pos);
- }
-}
-
-void Qt5InformationNodeInstanceServer::resizeEditView(const QSize &size)
-{
- auto window = qobject_cast<QWindow *>(m_editView3D);
- if (window) {
- activateEditView();
- window->resize(size);
- }
-}
-
void Qt5InformationNodeInstanceServer::handleObjectPropertyCommit(const QVariant &object,
const QVariant &propName)
{
@@ -324,14 +264,6 @@ void Qt5InformationNodeInstanceServer::updateViewPortRect()
viewPortProperty.write(viewPortrect);
}
-void Qt5InformationNodeInstanceServer::handleActiveChanged()
-{
- if (m_blockViewActivate)
- return;
-
- activateEditView();
-}
-
Qt5InformationNodeInstanceServer::Qt5InformationNodeInstanceServer(NodeInstanceClientInterface *nodeInstanceClient) :
Qt5NodeInstanceServer(nodeInstanceClient)
{
@@ -759,17 +691,36 @@ void Qt5InformationNodeInstanceServer::changePropertyValues(const ChangeValuesCo
startRenderTimer();
}
-void Qt5InformationNodeInstanceServer::change3DView(const Change3DViewCommand &command)
+// update 3D view window state when the main app window state change
+void Qt5InformationNodeInstanceServer::update3DViewState(const Update3dViewStateCommand &command)
+{
+ auto window = qobject_cast<QWindow *>(m_editView3D);
+ if (window) {
+ if (command.type() == Update3dViewStateCommand::StateChange) {
+ if (command.previousStates() & Qt::WindowMinimized) // main window expanded from minimize state
+ window->show();
+ else if (command.currentStates() & Qt::WindowMinimized) // main window minimized
+ window->hide();
+ } else if (command.type() == Update3dViewStateCommand::ActiveChange) {
+ window->setFlag(Qt::WindowStaysOnTopHint, command.isActive());
+
+ // main window has a popup open, lower the edit view 3D so that the pop up is visible
+ if (command.hasPopup())
+ window->lower();
+ }
+ }
+}
+
+void Qt5InformationNodeInstanceServer::enable3DView(const Enable3DViewCommand &command)
{
- for (const InformationContainer &container : command.informationVector()) {
- if (container.name() == InformationName::ShowView)
- showEditView(container.information().toPoint(), container.secondInformation().toSize());
- else if (container.name() == InformationName::HideView)
- hideEditView();
- else if (container.name() == InformationName::MoveView)
- moveEditView(container.information().toPoint());
- else if (container.name() == InformationName::ResizeView)
- resizeEditView(container.secondInformation().toSize());
+ // TODO: this method is not currently in use as the 3D view is currently enabled by resetting the puppet.
+ // It should however be implemented here.
+
+ auto window = qobject_cast<QWindow *>(m_editView3D);
+ if (window && !command.isEnable()) {
+ // TODO: remove the 3D view
+ } else if (!window && command.isEnable()) {
+ // TODO: create the 3D view
}
}
diff --git a/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/qt5informationnodeinstanceserver.h b/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/qt5informationnodeinstanceserver.h
index 0ac073655b..079b811c05 100644
--- a/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/qt5informationnodeinstanceserver.h
+++ b/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/qt5informationnodeinstanceserver.h
@@ -38,12 +38,14 @@ namespace QmlDesigner {
class Qt5InformationNodeInstanceServer : public Qt5NodeInstanceServer
{
Q_OBJECT
+
public:
explicit Qt5InformationNodeInstanceServer(NodeInstanceClientInterface *nodeInstanceClient);
void reparentInstances(const ReparentInstancesCommand &command) override;
void clearScene(const ClearSceneCommand &command) override;
- void change3DView(const Change3DViewCommand &command) override;
+ void update3DViewState(const Update3dViewStateCommand &command) override;
+ void enable3DView(const Enable3DViewCommand &command) override;
void createScene(const CreateSceneCommand &command) override;
void completeComponent(const CompleteComponentCommand &command) override;
void token(const TokenCommand &command) override;
@@ -56,7 +58,6 @@ private slots:
void handleObjectPropertyCommit(const QVariant &object, const QVariant &propName);
void handleObjectPropertyChange(const QVariant &object, const QVariant &propName);
void updateViewPortRect();
- void handleActiveChanged();
protected:
void collectItemChangesAndSendChangeCommands() override;
@@ -84,12 +85,6 @@ private:
const PropertyName &propertyName,
ValuesModifiedCommand::TransactionOption option);
- void showEditView(const QPoint &pos, const QSize &size);
- void hideEditView();
- void activateEditView();
- void moveEditView(const QPoint &pos);
- void resizeEditView(const QSize &size);
-
QObject *m_editView3D = nullptr;
QSet<ServerNodeInstance> m_parentChangedSet;
QList<ServerNodeInstance> m_completedComponentList;
@@ -99,7 +94,6 @@ private:
QVariant m_changedNode;
PropertyName m_changedProperty;
ServerNodeInstance m_viewPortInstance;
- bool m_blockViewActivate = false;
QObject *m_rootNode = nullptr;
ChangeSelectionCommand m_pendingSelectionChangeCommand;
};
diff --git a/src/plugins/coreplugin/icore.h b/src/plugins/coreplugin/icore.h
index b338839110..783f890599 100644
--- a/src/plugins/coreplugin/icore.h
+++ b/src/plugins/coreplugin/icore.h
@@ -164,6 +164,8 @@ signals:
void coreAboutToClose();
void contextAboutToChange(const QList<Core::IContext *> &context);
void contextChanged(const Core::Context &context);
+ void windowStateChanged(Qt::WindowStates previousStates, Qt::WindowStates currentStates);
+ void windowActivationChanged(bool isActive, bool hasPopup);
public:
/* internal use */
diff --git a/src/plugins/coreplugin/mainwindow.cpp b/src/plugins/coreplugin/mainwindow.cpp
index 94e5aa78fe..da53dd7528 100644
--- a/src/plugins/coreplugin/mainwindow.cpp
+++ b/src/plugins/coreplugin/mainwindow.cpp
@@ -201,6 +201,19 @@ MainWindow::MainWindow()
this, &MainWindow::openDroppedFiles);
}
+// Edit View 3D needs to know when the main windows's state or activation change
+void MainWindow::changeEvent(QEvent *event)
+{
+ if (event->type() == QEvent::WindowStateChange) {
+ emit m_coreImpl->windowStateChanged(m_previousWindowStates, windowState());
+ m_previousWindowStates = windowState();
+ } else if (event->type() == QEvent::ActivationChange) {
+ auto lastChild = qobject_cast<QWidget *>(children().last());
+ bool hasPopup = lastChild && lastChild->isActiveWindow();
+ emit m_coreImpl->windowActivationChanged(isActiveWindow(), hasPopup);
+ }
+}
+
NavigationWidget *MainWindow::navigationWidget(Side side) const
{
return side == Side::Left ? m_leftNavigationWidget : m_rightNavigationWidget;
diff --git a/src/plugins/coreplugin/mainwindow.h b/src/plugins/coreplugin/mainwindow.h
index 26dc607cbe..a3a537b231 100644
--- a/src/plugins/coreplugin/mainwindow.h
+++ b/src/plugins/coreplugin/mainwindow.h
@@ -114,6 +114,7 @@ public slots:
protected:
void closeEvent(QCloseEvent *event) override;
+ void changeEvent(QEvent *event) override;
private:
void openFile();
@@ -192,6 +193,7 @@ private:
QToolButton *m_toggleRightSideBarButton = nullptr;
QColor m_overrideColor;
QList<std::function<bool()>> m_preCloseListeners;
+ Qt::WindowStates m_previousWindowStates = Qt::WindowNoState;
};
} // namespace Internal
diff --git a/src/plugins/qmldesigner/CMakeLists.txt b/src/plugins/qmldesigner/CMakeLists.txt
index 1685aeaa79..6d3bca379c 100644
--- a/src/plugins/qmldesigner/CMakeLists.txt
+++ b/src/plugins/qmldesigner/CMakeLists.txt
@@ -140,7 +140,8 @@ extend_qtc_plugin(QmlDesigner
valueschangedcommand.cpp valueschangedcommand.h
changeselectioncommand.cpp changeselectioncommand.h
drop3dlibraryitemcommand.cpp drop3dlibraryitemcommand.h
- change3dviewcommand.cpp change3dviewcommand.h
+ update3dviewstatecommand.cpp update3dviewstatecommand.h
+ enable3dviewcommand.cpp enable3dviewcommand.h
)
extend_qtc_plugin(QmlDesigner
@@ -235,7 +236,6 @@ extend_qtc_plugin(QmlDesigner
snappinglinecreator.cpp snappinglinecreator.h
toolbox.cpp toolbox.h
option3daction.cpp option3daction.h
- editview3dproxydialog.cpp editview3dproxydialog.h
)
extend_qtc_plugin(QmlDesigner
diff --git a/src/plugins/qmldesigner/components/formeditor/editview3dproxydialog.cpp b/src/plugins/qmldesigner/components/formeditor/editview3dproxydialog.cpp
deleted file mode 100644
index 505eeacd1f..0000000000
--- a/src/plugins/qmldesigner/components/formeditor/editview3dproxydialog.cpp
+++ /dev/null
@@ -1,168 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2019 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 "editview3dproxydialog.h"
-#include "formeditorview.h"
-
-#include <nodeinstanceview.h>
-
-#include <coreplugin/icore.h>
-
-#include <utils/hostosinfo.h>
-
-#include <QApplication>
-#include <QMouseEvent>
-#include <QStyle>
-#include <QWindow>
-
-namespace QmlDesigner {
-
-const int borderOffset = 8;
-
-static int titleBarHeight() {
- return QApplication::style()->pixelMetric(QStyle::PM_TitleBarHeight);
-}
-
-EditView3DProxyDialog::EditView3DProxyDialog(FormEditorView *view) :
- QDialog(Core::ICore::dialogParent())
- ,m_formEditorView(view)
-{
- setFocusPolicy(Qt::ClickFocus);
- setWindowFlags(windowFlags() & ~Qt::WindowContextHelpButtonHint);
-
- if (Utils::HostOsInfo::isMacHost()) {
- setWindowFlag(Qt::Tool);
- setAttribute(Qt::WA_MacAlwaysShowToolWindow);
- }
-
- resize(1024, 768);
-}
-
-void EditView3DProxyDialog::invalidate()
-{
- if (nodeInstanceView() && isVisible())
- nodeInstanceView()->show3DView(adjustedRect());
-}
-
-void EditView3DProxyDialog::moveEvent(QMoveEvent *event)
-{
- if (nodeInstanceView())
- nodeInstanceView()->move3DView(pos() + QPoint(borderOffset, titleBarHeight() + 2 * borderOffset));
-
- QDialog::moveEvent(event);
-}
-
-void EditView3DProxyDialog::closeEvent(QCloseEvent *event)
-{
- if (m_formEditorView) {
- m_formEditorView->toggle3DViewEnabled(false);
- m_formEditorView->setupOption3DAction();
- }
-
- nodeInstanceView()->hide3DView();
-
- QDialog::closeEvent(event);
-}
-
-void EditView3DProxyDialog::hideEvent(QHideEvent *event)
-{
- if (m_formEditorView) {
- m_formEditorView->toggle3DViewEnabled(false);
- m_formEditorView->setupOption3DAction();
- }
-
- nodeInstanceView()->hide3DView();
-
- QDialog::hideEvent(event);
-}
-
-void EditView3DProxyDialog::focusOutEvent(QFocusEvent *event)
-{
- if (isVisible())
- showView();
-
- QDialog::focusOutEvent(event);
-}
-
-void EditView3DProxyDialog::focusInEvent(QFocusEvent *event)
-{
- showView();
-
- QDialog::focusInEvent(event);
-}
-
-void EditView3DProxyDialog::resizeEvent(QResizeEvent *event)
-{
- if (nodeInstanceView())
- nodeInstanceView()->show3DView(adjustedRect());
-
- QDialog::resizeEvent(event);
-}
-
-bool EditView3DProxyDialog::event(QEvent *event)
-{
- if (event->type() == QEvent::WindowActivate) {
- showView();
- } else if (event->type() == QEvent::NonClientAreaMouseButtonPress) {
- auto mouseMoveEvent = static_cast<QMouseEvent *>(event);
- if (mouseMoveEvent->buttons() & Qt::LeftButton)
- hideView();
- } else if (event->type() == QEvent::NonClientAreaMouseButtonRelease) {
- auto mouseMoveEvent = static_cast<QMouseEvent *>(event);
- if (mouseMoveEvent->buttons() & Qt::LeftButton)
- showView();
- }
-
- return QDialog::event(event);
-}
-
-QRect EditView3DProxyDialog::adjustedRect() const
-{
- return QRect(pos(), size()).adjusted(borderOffset,
- titleBarHeight() + 2 * borderOffset,
- -borderOffset, titleBarHeight());
-}
-
-NodeInstanceView *EditView3DProxyDialog::nodeInstanceView() const
-{
- if (m_formEditorView)
- return m_formEditorView->nodeInstanceView();
-
- return nullptr;
-}
-
-void EditView3DProxyDialog::showView()
-{
- if (nodeInstanceView())
- nodeInstanceView()->show3DView(adjustedRect());
-}
-
-void EditView3DProxyDialog::hideView()
-{
- if (nodeInstanceView())
- nodeInstanceView()->hide3DView();
-}
-
-} //QmlDesigner
diff --git a/src/plugins/qmldesigner/components/formeditor/formeditor.pri b/src/plugins/qmldesigner/components/formeditor/formeditor.pri
index 15de28f504..5bff19e664 100644
--- a/src/plugins/qmldesigner/components/formeditor/formeditor.pri
+++ b/src/plugins/qmldesigner/components/formeditor/formeditor.pri
@@ -1,6 +1,5 @@
VPATH += $$PWD
SOURCES += formeditoritem.cpp \
- editview3dproxydialog.cpp \
formeditorview.cpp \
formeditorscene.cpp \
formeditorwidget.cpp \
@@ -41,7 +40,6 @@ SOURCES += formeditoritem.cpp \
option3daction.cpp
HEADERS += formeditorscene.h \
- editview3dproxydialog.h \
formeditorwidget.h \
formeditoritem.h \
formeditorview.h \
diff --git a/src/plugins/qmldesigner/components/formeditor/formeditorview.cpp b/src/plugins/qmldesigner/components/formeditor/formeditorview.cpp
index 90707a5887..ee7b3f18a9 100644
--- a/src/plugins/qmldesigner/components/formeditor/formeditorview.cpp
+++ b/src/plugins/qmldesigner/components/formeditor/formeditorview.cpp
@@ -24,6 +24,7 @@
****************************************************************************/
#include "formeditorview.h"
+#include "nodeinstanceview.h"
#include "selectiontool.h"
#include "movetool.h"
#include "option3daction.h"
@@ -475,8 +476,6 @@ void FormEditorView::instancesCompleted(const QVector<ModelNode> &completedNodeL
itemNodeList.append(item);
}
}
- if (node.isRootNode())
- formEditorWidget()->invalidate3DEditor();
}
currentTool()->instancesCompleted(itemNodeList);
}
@@ -598,7 +597,7 @@ void FormEditorView::toggle3DViewEnabled(bool enabled)
else
rootModelNode().setAuxiliaryData("3d-view", false);
- formEditorWidget()->set3dEditorVisibility(enabled);
+ nodeInstanceView()->enable3DView(enabled);
}
QmlItemNode findRecursiveQmlItemNode(const QmlObjectNode &firstQmlObjectNode)
diff --git a/src/plugins/qmldesigner/components/formeditor/formeditorwidget.cpp b/src/plugins/qmldesigner/components/formeditor/formeditorwidget.cpp
index fdad23a880..f5970dc0e0 100644
--- a/src/plugins/qmldesigner/components/formeditor/formeditorwidget.cpp
+++ b/src/plugins/qmldesigner/components/formeditor/formeditorwidget.cpp
@@ -24,7 +24,6 @@
****************************************************************************/
#include "designeractionmanager.h"
-#include "editview3dproxydialog.h"
#include "formeditorwidget.h"
#include "formeditorscene.h"
#include "qmldesignerplugin.h"
@@ -174,14 +173,11 @@ FormEditorWidget::FormEditorWidget(FormEditorView *view) :
fillLayout->addWidget(m_graphicsView.data());
m_graphicsView.data()->setStyleSheet(Theme::replaceCssColors(QString::fromUtf8(Utils::FileReader::fetchQrc(QLatin1String(":/qmldesigner/scrollbar.css")))));
-
- m_editView3DProxyDialog = new EditView3DProxyDialog(view);
}
void FormEditorWidget::changeTransformTool(bool checked)
{
if (checked)
-
m_formEditorView->changeToTransformTools();
}
@@ -397,17 +393,6 @@ FormEditorGraphicsView *FormEditorWidget::graphicsView() const
return m_graphicsView;
}
-void FormEditorWidget::set3dEditorVisibility(bool b)
-{
- m_editView3DProxyDialog->setVisible(b);
-}
-
-void FormEditorWidget::invalidate3DEditor()
-{
- if (m_editView3DProxyDialog)
- m_editView3DProxyDialog->invalidate();
-}
-
DocumentWarningWidget *FormEditorWidget::errorWidget()
{
if (m_documentErrorWidget.isNull()) {
diff --git a/src/plugins/qmldesigner/components/formeditor/formeditorwidget.h b/src/plugins/qmldesigner/components/formeditor/formeditorwidget.h
index d1c5588528..f7e0d8a92d 100644
--- a/src/plugins/qmldesigner/components/formeditor/formeditorwidget.h
+++ b/src/plugins/qmldesigner/components/formeditor/formeditorwidget.h
@@ -37,7 +37,6 @@ QT_END_NAMESPACE
namespace QmlDesigner {
-class EditView3DProxyDialog;
class ZoomAction;
class LineEditAction;
class BackgroundAction;
@@ -87,9 +86,6 @@ public:
FormEditorGraphicsView *graphicsView() const;
- void set3dEditorVisibility(bool b);
- void invalidate3DEditor();
-
protected:
void wheelEvent(QWheelEvent *event) override;
QActionGroup *toolActionGroup() const;
@@ -120,7 +116,6 @@ private:
QPointer<Option3DAction> m_option3DAction;
QPointer<QAction> m_resetAction;
QPointer<DocumentWarningWidget> m_documentErrorWidget;
- QPointer<EditView3DProxyDialog> m_editView3DProxyDialog;
};
} // namespace QmlDesigner
diff --git a/src/plugins/qmldesigner/designercore/include/nodeinstanceview.h b/src/plugins/qmldesigner/designercore/include/nodeinstanceview.h
index a6de5fd6c6..f6b705acc3 100644
--- a/src/plugins/qmldesigner/designercore/include/nodeinstanceview.h
+++ b/src/plugins/qmldesigner/designercore/include/nodeinstanceview.h
@@ -59,7 +59,6 @@ class CreateSceneCommand;
class CreateInstancesCommand;
class ClearSceneCommand;
class ReparentInstancesCommand;
-class Change3DViewCommand;
class ChangeFileUrlCommand;
class ChangeValuesCommand;
class ChangeBindingsCommand;
@@ -143,15 +142,14 @@ public:
void selectedNodesChanged(const QList<ModelNode> &selectedNodeList,
const QList<ModelNode> &lastSelectedNodeList) override;
- void show3DView(const QRect &rect);
- void move3DView(const QPoint &position);
- void hide3DView();
+ void mainWindowStateChanged(Qt::WindowStates previousStates, Qt::WindowStates currentStates);
+ void mainWindowActiveChanged(bool active, bool hasPopup);
+ void enable3DView(bool enable);
protected:
void timerEvent(QTimerEvent *event) override;
private: // functions
- enum ViewAction { Show, Move, Hide };
void activateState(const NodeInstance &instance);
void activateBaseState();
@@ -176,7 +174,6 @@ private: // functions
CreateSceneCommand createCreateSceneCommand();
- Change3DViewCommand createChange3DViewCommand(ViewAction action, const QPoint &pos = {}, const QSize &size = {}) const;
ClearSceneCommand createClearSceneCommand() const;
CreateInstancesCommand createCreateInstancesCommand(const QList<NodeInstance> &instanceList) const;
CompleteComponentCommand createComponentCompleteCommand(const QList<NodeInstance> &instanceList) const;
diff --git a/src/plugins/qmldesigner/designercore/instances/nodeinstanceserverproxy.cpp b/src/plugins/qmldesigner/designercore/instances/nodeinstanceserverproxy.cpp
index 39de64f9ae..d979e3dd32 100644
--- a/src/plugins/qmldesigner/designercore/instances/nodeinstanceserverproxy.cpp
+++ b/src/plugins/qmldesigner/designercore/instances/nodeinstanceserverproxy.cpp
@@ -29,7 +29,8 @@
#include <createinstancescommand.h>
#include <createscenecommand.h>
-#include <change3dviewcommand.h>
+#include <update3dviewstatecommand.h>
+#include <enable3dviewcommand.h>
#include <changevaluescommand.h>
#include <changebindingscommand.h>
#include <changeauxiliarycommand.h>
@@ -652,7 +653,12 @@ void NodeInstanceServerProxy::clearScene(const ClearSceneCommand &command)
writeCommand(QVariant::fromValue(command));
}
-void NodeInstanceServerProxy::change3DView(const Change3DViewCommand &command)
+void NodeInstanceServerProxy::update3DViewState(const Update3dViewStateCommand &command)
+{
+ writeCommand(QVariant::fromValue(command));
+}
+
+void NodeInstanceServerProxy::enable3DView(const Enable3DViewCommand &command)
{
writeCommand(QVariant::fromValue(command));
}
diff --git a/src/plugins/qmldesigner/designercore/instances/nodeinstanceserverproxy.h b/src/plugins/qmldesigner/designercore/instances/nodeinstanceserverproxy.h
index 62c361dbd1..25dd7bec1f 100644
--- a/src/plugins/qmldesigner/designercore/instances/nodeinstanceserverproxy.h
+++ b/src/plugins/qmldesigner/designercore/instances/nodeinstanceserverproxy.h
@@ -69,7 +69,8 @@ public:
void createInstances(const CreateInstancesCommand &command) override;
void changeFileUrl(const ChangeFileUrlCommand &command) override;
void createScene(const CreateSceneCommand &command) override;
- void change3DView(const Change3DViewCommand &command) override;
+ void update3DViewState(const Update3dViewStateCommand &command) override;
+ void enable3DView(const Enable3DViewCommand &command) override;
void clearScene(const ClearSceneCommand &command) override;
void removeInstances(const RemoveInstancesCommand &command) override;
void changeSelection(const ChangeSelectionCommand &command) override;
diff --git a/src/plugins/qmldesigner/designercore/instances/nodeinstanceview.cpp b/src/plugins/qmldesigner/designercore/instances/nodeinstanceview.cpp
index 9aa8d2f41c..9528328754 100644
--- a/src/plugins/qmldesigner/designercore/instances/nodeinstanceview.cpp
+++ b/src/plugins/qmldesigner/designercore/instances/nodeinstanceview.cpp
@@ -48,7 +48,8 @@
#include "clearscenecommand.h"
#include "changefileurlcommand.h"
#include "reparentinstancescommand.h"
-#include "change3dviewcommand.h"
+#include "update3dviewstatecommand.h"
+#include "enable3dviewcommand.h"
#include "changevaluescommand.h"
#include "changeauxiliarycommand.h"
#include "changebindingscommand.h"
@@ -979,20 +980,6 @@ ClearSceneCommand NodeInstanceView::createClearSceneCommand() const
return {};
}
-Change3DViewCommand NodeInstanceView::createChange3DViewCommand(ViewAction action, const QPoint &pos, const QSize &size) const
-{
- InformationName informationName = InformationName::ShowView;
-
- if (action == ViewAction::Move)
- informationName = InformationName::MoveView;
- else if (action == ViewAction::Hide)
- informationName = InformationName::HideView;
-
- const qint32 instanceId = 0;
-
- return Change3DViewCommand({ InformationContainer(instanceId, informationName, pos, size) });
-}
-
CompleteComponentCommand NodeInstanceView::createComponentCompleteCommand(const QList<NodeInstance> &instanceList) const
{
QVector<qint32> containerList;
@@ -1473,21 +1460,22 @@ void NodeInstanceView::selectedNodesChanged(const QList<ModelNode> &selectedNode
nodeInstanceServer()->changeSelection(createChangeSelectionCommand(selectedNodeList));
}
-void NodeInstanceView::move3DView(const QPoint &position)
+void NodeInstanceView::mainWindowStateChanged(Qt::WindowStates previousStates, Qt::WindowStates currentStates)
{
- nodeInstanceServer()->change3DView(createChange3DViewCommand(ViewAction::Move, position));
+ if (nodeInstanceServer())
+ nodeInstanceServer()->update3DViewState(Update3dViewStateCommand(previousStates, currentStates));
}
-void NodeInstanceView::hide3DView()
+void NodeInstanceView::mainWindowActiveChanged(bool active, bool hasPopup)
{
- nodeInstanceServer()->change3DView(createChange3DViewCommand(ViewAction::Hide));
+ if (nodeInstanceServer())
+ nodeInstanceServer()->update3DViewState(Update3dViewStateCommand(active, hasPopup));
}
-void NodeInstanceView::show3DView(const QRect &rect)
+// enable / disable 3D edit View
+void NodeInstanceView::enable3DView(bool enable)
{
- nodeInstanceServer()->change3DView(createChange3DViewCommand(ViewAction::Show,
- rect.topLeft(),
- rect.size()));
+ nodeInstanceServer()->enable3DView(Enable3DViewCommand(enable));
}
void NodeInstanceView::timerEvent(QTimerEvent *event)
diff --git a/src/plugins/qmldesigner/qmldesignerplugin.cpp b/src/plugins/qmldesigner/qmldesignerplugin.cpp
index 928c19b02c..0fb5f19f2b 100644
--- a/src/plugins/qmldesigner/qmldesignerplugin.cpp
+++ b/src/plugins/qmldesigner/qmldesignerplugin.cpp
@@ -31,6 +31,7 @@
#include "designmodecontext.h"
#include "openuiqmlfiledialog.h"
#include "generateresource.h"
+#include "nodeinstanceview.h"
#include <metainfo.h>
#include <connectionview.h>
@@ -249,6 +250,16 @@ void QmlDesignerPlugin::extensionsInitialized()
connect(Core::ICore::instance(), &Core::ICore::coreAboutToOpen, this, [this] {
integrateIntoQtCreator(&d->mainWidget);
});
+
+ connect(Core::ICore::instance(), &Core::ICore::windowStateChanged, this,
+ [this] (Qt::WindowStates previousStates, Qt::WindowStates currentStates) {
+ d->viewManager.nodeInstanceView()->mainWindowStateChanged(previousStates, currentStates);
+ });
+
+ connect(Core::ICore::instance(), &Core::ICore::windowActivationChanged, this,
+ [this] (bool isActive, bool hasPopup) {
+ d->viewManager.nodeInstanceView()->mainWindowActiveChanged(isActive, hasPopup);
+ });
}
static QStringList allUiQmlFilesforCurrentProject(const Utils::FilePath &fileName)
diff --git a/src/plugins/qmldesigner/qmldesignerplugin.qbs b/src/plugins/qmldesigner/qmldesignerplugin.qbs
index 7047ffa1b8..1ef8407d8e 100644
--- a/src/plugins/qmldesigner/qmldesignerplugin.qbs
+++ b/src/plugins/qmldesigner/qmldesignerplugin.qbs
@@ -171,8 +171,10 @@ Project {
"commands/changeselectioncommand.h",
"commands/drop3dlibraryitemcommand.cpp",
"commands/drop3dlibraryitemcommand.h",
- "commands/change3dviewcommand.cpp",
- "commands/change3dviewcommand.h",
+ "commands/update3dviewstatecommand.cpp",
+ "commands/update3dviewstatecommand.h",
+ "commands/enable3dviewcommand.cpp",
+ "commands/enable3dviewcommand.h",
"container/addimportcontainer.cpp",
"container/addimportcontainer.h",
"container/idcontainer.cpp",
@@ -454,8 +456,6 @@ Project {
"formeditor/controlelement.h",
"formeditor/dragtool.cpp",
"formeditor/dragtool.h",
- "formeditor/editview3dproxydialog.cpp",
- "formeditor/editview3dproxydialog.h",
"formeditor/formeditor.qrc",
"formeditor/formeditorgraphicsview.cpp",
"formeditor/formeditorgraphicsview.h",
diff --git a/src/tools/qml2puppet/CMakeLists.txt b/src/tools/qml2puppet/CMakeLists.txt
index ea449b4010..eb9abeda16 100644
--- a/src/tools/qml2puppet/CMakeLists.txt
+++ b/src/tools/qml2puppet/CMakeLists.txt
@@ -46,7 +46,8 @@ extend_qtc_executable(qml2puppet
tokencommand.cpp tokencommand.h
changeselectioncommand.cpp changeselectioncommand.h
drop3dlibraryitemcommand.cpp drop3dlibraryitemcommand.h
- change3dviewcommand.cpp change3dviewcommand.h
+ update3dviewstatecommand.cpp update3dviewstatecommand.h
+ enable3dviewcommand.cpp enable3dviewcommand.h
valueschangedcommand.cpp
)
diff --git a/src/tools/qml2puppet/qml2puppet.qbs b/src/tools/qml2puppet/qml2puppet.qbs
index 4071978749..fb73413038 100644
--- a/src/tools/qml2puppet/qml2puppet.qbs
+++ b/src/tools/qml2puppet/qml2puppet.qbs
@@ -97,8 +97,10 @@ QtcTool {
"commands/changeselectioncommand.h",
"commands/drop3dlibraryitemcommand.cpp",
"commands/drop3dlibraryitemcommand.h",
- "commands/change3dviewcommand.cpp",
- "commands/change3dviewcommand.h",
+ "commands/update3dviewstatecommand.cpp",
+ "commands/update3dviewstatecommand.h",
+ "commands/enable3dviewcommand.cpp",
+ "commands/enable3dviewcommand.h",
"container/addimportcontainer.cpp",
"container/addimportcontainer.h",
"container/idcontainer.cpp",