diff options
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", |