applicationPath = envImportPath;
}
+ QProcessEnvironment enviroment = QProcessEnvironment::systemEnvironment();
+ enviroment.insert("QML_NO_THREADED_RENDERER", "true");
+
if (QFileInfo(applicationPath).exists()) {
m_qmlPuppetEditorProcess = new QProcess;
+ m_qmlPuppetEditorProcess->setProcessEnvironment(enviroment);
+ m_qmlPuppetEditorProcess->setObjectName("EditorProcess");
connect(m_qmlPuppetEditorProcess.data(), SIGNAL(finished(int,QProcess::ExitStatus)), this, SLOT(processFinished(int,QProcess::ExitStatus)));
connect(QCoreApplication::instance(), SIGNAL(aboutToQuit()), m_qmlPuppetEditorProcess.data(), SLOT(kill()));
bool fowardQmlpuppetOutput = !qgetenv("FORWARD_QMLPUPPET_OUTPUT").isEmpty();
if (runModus == NormalModus) {
m_qmlPuppetPreviewProcess = new QProcess;
+ m_qmlPuppetPreviewProcess->setProcessEnvironment(enviroment);
+ m_qmlPuppetPreviewProcess->setObjectName("PreviewProcess");
connect(m_qmlPuppetPreviewProcess.data(), SIGNAL(finished(int,QProcess::ExitStatus)), this, SLOT(processFinished(int,QProcess::ExitStatus)));
connect(QCoreApplication::instance(), SIGNAL(aboutToQuit()), m_qmlPuppetPreviewProcess.data(), SLOT(kill()));
if (fowardQmlpuppetOutput)
m_qmlPuppetPreviewProcess->start(applicationPath, QStringList() << socketToken << "previewmode" << "-graphicssystem raster");
m_qmlPuppetRenderProcess = new QProcess;
+ m_qmlPuppetRenderProcess->setProcessEnvironment(enviroment);
+ m_qmlPuppetRenderProcess->setObjectName("RenderProcess");
connect(m_qmlPuppetRenderProcess.data(), SIGNAL(finished(int,QProcess::ExitStatus)), this, SLOT(processFinished(int,QProcess::ExitStatus)));
connect(QCoreApplication::instance(), SIGNAL(aboutToQuit()), m_qmlPuppetRenderProcess.data(), SLOT(kill()));
if (fowardQmlpuppetOutput)
void NodeInstanceServerProxy::processFinished(int /*exitCode*/, QProcess::ExitStatus exitStatus)
{
+ qDebug() << "Process finished:" << sender();
if (m_firstSocket)
m_firstSocket->close();
if (m_secondSocket)
QStringList imports() const;
QObject *dummyContextObject() const;
+ virtual QDeclarativeView *declarativeView() const = 0;
+ virtual QSGView *sgView() const = 0;
+
public slots:
void refreshLocalFileProperty(const QString &path);
void refreshDummyData(const QString &path);
void setTimerId(int timerId);
int timerId() const;
- virtual QDeclarativeView *declarativeView() const = 0;
- virtual QSGView *sgView() const = 0;
QDeclarativeContext *rootContext() const;
#include "qt5informationnodeinstanceserver.h"
+#include <QSGItem>
+
#include "servernodeinstance.h"
#include "childrenchangeeventfilter.h"
#include "propertyabstractcontainer.h"
#include "dummycontextobject.h"
+#include "designersupportfunctions.h"
+
namespace QmlDesigner {
Qt5InformationNodeInstanceServer::Qt5InformationNodeInstanceServer(NodeInstanceClientInterface *nodeInstanceClient) :
void Qt5InformationNodeInstanceServer::collectItemChangesAndSendChangeCommands()
{
+ static bool inFunction = false;
+ if (!inFunction) {
+ inFunction = true;
+
+ QSet<ServerNodeInstance> informationChangedInstanceSet;
+ QVector<InstancePropertyPair> propertyChangedList;
+ bool adjustSceneRect = false;
+
+ if (sgView()) {
+ foreach (QSGItem *item, allItems()) {
+ if (item && hasInstanceForObject(item)) {
+ ServerNodeInstance instance = instanceForObject(item);
+
+ DesignerSupport::DirtyType informationsDirty = DesignerSupport::DirtyType(DesignerSupport::TransformUpdateMask
+ | DesignerSupport::Visible
+ | DesignerSupport::ZValue
+ | DesignerSupport::OpacityValue);
+ if (DesignerSupport::dirty(item, informationsDirty))
+ informationChangedInstanceSet.insert(instance);
+
+
+ if (DesignerSupport::dirty(item, DesignerSupport::ParentChanged)) {
+ m_parentChangedSet.insert(instance);
+ informationChangedInstanceSet.insert(instance);
+ }
+// if (d->geometryChanged) {
+// if (instance.isRootNodeInstance())
+// declarativeView()->scene()->setSceneRect(item->boundingRect());
+// }
+
+ }
+ }
+
+ foreach (const InstancePropertyPair& property, changedPropertyList()) {
+ const ServerNodeInstance instance = property.first;
+ const QString propertyName = property.second;
+
+ if (instance.isValid()) {
+ if (instance.isRootNodeInstance() && (propertyName == "width" || propertyName == "height"))
+ adjustSceneRect = true;
+
+ if (propertyName.contains("anchors"))
+ informationChangedInstanceSet.insert(instance);
+
+ propertyChangedList.append(property);
+ }
+ }
+
+ resetAllItems();
+ clearChangedPropertyList();
+
+ if (!informationChangedInstanceSet.isEmpty())
+ nodeInstanceClient()->informationChanged(createAllInformationChangedCommand(informationChangedInstanceSet.toList()));
+
+ if (!propertyChangedList.isEmpty())
+ nodeInstanceClient()->valuesChanged(createValuesChangedCommand(propertyChangedList));
+
+ if (!m_parentChangedSet.isEmpty()) {
+ sendChildrenChangedCommand(m_parentChangedSet.toList());
+ m_parentChangedSet.clear();
+ }
+
+// if (adjustSceneRect) {
+// QRectF boundingRect = rootNodeInstance().boundingRect();
+// if (boundingRect.isValid()) {
+// declarativeView()->setSceneRect(boundingRect);
+// }
+// }
+
+ if (!m_completedComponentList.isEmpty()) {
+ nodeInstanceClient()->componentCompleted(createComponentCompletedCommand(m_completedComponentList));
+ m_completedComponentList.clear();
+ }
+
+ slowDownRenderTimer();
+ nodeInstanceClient()->flush();
+ nodeInstanceClient()->synchronizeWithClientProcess();
+ }
+
+ inFunction = false;
+ }
}
void Qt5InformationNodeInstanceServer::reparentInstances(const ReparentInstancesCommand &command)
}
}
- NodeInstanceServer::reparentInstances(command);
+ Qt5NodeInstanceServer::reparentInstances(command);
}
void Qt5InformationNodeInstanceServer::clearScene(const ClearSceneCommand &command)
{
- NodeInstanceServer::clearScene(command);
+ Qt5NodeInstanceServer::clearScene(command);
m_parentChangedSet.clear();
m_completedComponentList.clear();
void Qt5InformationNodeInstanceServer::createScene(const CreateSceneCommand &command)
{
- NodeInstanceServer::createScene(command);
+ Qt5NodeInstanceServer::createScene(command);
QList<ServerNodeInstance> instanceList;
foreach (const InstanceContainer &container, command.instances()) {
QList<ServerNodeInstance> noParentList;
foreach (const ServerNodeInstance &child, childList) {
- if (!child.hasParent())
+ if (!child.hasParent()) {
noParentList.append(child);
- else
- parentSet.insert(child.parent());
+ } else {
+ ServerNodeInstance parent = child.parent();
+ if (parent.isValid()) {
+ parentSet.insert(parent);
+ } else {
+ noParentList.append(child);
+ }
+ }
}
-
foreach (const ServerNodeInstance &parent, parentSet)
nodeInstanceClient()->childrenChanged(createChildrenChangedCommand(parent, parent.childItems()));
void Qt5InformationNodeInstanceServer::completeComponent(const CompleteComponentCommand &command)
{
- NodeInstanceServer::completeComponent(command);
+ Qt5NodeInstanceServer::completeComponent(command);
QList<ServerNodeInstance> instanceList;
foreach (qint32 instanceId, command.instances()) {
#ifdef Q_WS_MAC
sgView()->setAttribute(Qt::WA_DontShowOnScreen, true);
#endif
+ sgView()->setUpdatesEnabled(false);
}
QDeclarativeView *Qt5NodeInstanceServer::declarativeView() const
void Qt5NodeInstanceServer::resetAllItems()
{
-
+ foreach (QSGItem *item, allItems())
+ DesignerSupport::resetDirty(item);
}
QList<ServerNodeInstance> Qt5NodeInstanceServer::setupScene(const CreateSceneCommand &command)
#include "qt5rendernodeinstanceserver.h"
+#include <QSGItem>
+
#include "servernodeinstance.h"
#include "childrenchangeeventfilter.h"
#include "propertyabstractcontainer.h"
#include "dummycontextobject.h"
+#include "designersupportfunctions.h"
+
namespace QmlDesigner {
Qt5RenderNodeInstanceServer::Qt5RenderNodeInstanceServer(NodeInstanceClientInterface *nodeInstanceClient) :
void Qt5RenderNodeInstanceServer::collectItemChangesAndSendChangeCommands()
{
+ static bool inFunction = false;
+ if (!inFunction) {
+ inFunction = true;
+
+ bool adjustSceneRect = false;
+
+ if (sgView()) {
+ foreach (QSGItem *item, allItems()) {
+ if (item && hasInstanceForObject(item)) {
+ ServerNodeInstance instance = instanceForObject(item);
+ if (DesignerSupport::dirty(item, DesignerSupport::ContentUpdateMask))
+ m_dirtyInstanceSet.insert(instance);
+ }
+ }
+
+ clearChangedPropertyList();
+ resetAllItems();
+
+ if (!m_dirtyInstanceSet.isEmpty() && nodeInstanceClient()->bytesToWrite() < 10000) {
+ nodeInstanceClient()->pixmapChanged(createPixmapChangedCommand(m_dirtyInstanceSet.toList()));
+ m_dirtyInstanceSet.clear();
+ }
+
+// if (adjustSceneRect) {
+// QRectF boundingRect = rootNodeInstance().boundingRect();
+// if (boundingRect.isValid()) {
+// declarativeView()->setSceneRect(boundingRect);
+// }
+// }
+
+ slowDownRenderTimer();
+ nodeInstanceClient()->flush();
+ nodeInstanceClient()->synchronizeWithClientProcess();
+ }
+
+ inFunction = false;
+ }
}
+
void Qt5RenderNodeInstanceServer::createScene(const CreateSceneCommand &command)
{
NodeInstanceServer::createScene(command);
#include "qt5nodeinstanceserver.h"
#include <QDeclarativeExpression>
-
+#include <QSGView>
#include <cmath>
#include <QHash>
+#include <QtDebug>
+
namespace QmlDesigner {
namespace Internal {
SGItemNodeInstance::Pointer SGItemNodeInstance::create(QObject *object)
{
- QSGItem *sgItem = dynamic_cast<QSGItem*>(object);
+ QSGItem *sgItem = qobject_cast<QSGItem*>(object);
Q_ASSERT(sgItem);
return instance;
}
-void SGItemNodeInstance::initialize(const Pointer &objectNodeInstance)
+void SGItemNodeInstance::initialize(const ObjectNodeInstance::Pointer &objectNodeInstance)
{
+ if (instanceId() == 0) {
+ DesignerSupport::setRootItem(nodeInstanceServer()->sgView(), sgItem());
+ } else {
+ sgItem()->setParentItem(qobject_cast<QSGItem*>(nodeInstanceServer()->sgView()->rootObject()));
+ }
+
designerSupport()->refFromEffectItem(sgItem());
ObjectNodeInstance::initialize(objectNodeInstance);
+ sgItem()->update();
}
bool SGItemNodeInstance::isSGItem() const
}
refresh();
+ DesignerSupport::updateDirtyNode(sgItem());
}
static bool isValidAnchorName(const QString &name)
~SGItemNodeInstance();
static Pointer create(QObject *objectToBeWrapped);
- void initialize(const Pointer &objectNodeInstance);
+ void initialize(const ObjectNodeInstance::Pointer &objectNodeInstance);
bool isSGItem() const;
}
}
- NodeInstanceServer::reparentInstances(command);
+ Qt4NodeInstanceServer::reparentInstances(command);
}
void Qt4InformationNodeInstanceServer::clearScene(const ClearSceneCommand &command)
void Qt4InformationNodeInstanceServer::createScene(const CreateSceneCommand &command)
{
- NodeInstanceServer::createScene(command);
+ Qt4NodeInstanceServer::createScene(command);
QList<ServerNodeInstance> instanceList;
foreach(const InstanceContainer &container, command.instances()) {
void Qt4InformationNodeInstanceServer::completeComponent(const CompleteComponentCommand &command)
{
- NodeInstanceServer::completeComponent(command);
+ Qt4NodeInstanceServer::completeComponent(command);
QList<ServerNodeInstance> instanceList;
foreach(qint32 instanceId, command.instances()) {
void Qt4RenderNodeInstanceServer::createScene(const CreateSceneCommand &command)
{
- NodeInstanceServer::createScene(command);
+ Qt4NodeInstanceServer::createScene(command);
QList<ServerNodeInstance> instanceList;
foreach(const InstanceContainer &container, command.instances()) {
void Qt4RenderNodeInstanceServer::clearScene(const ClearSceneCommand &command)
{
- NodeInstanceServer::clearScene(command);
+ Qt4NodeInstanceServer::clearScene(command);
m_dirtyInstanceSet.clear();
}
void Qt4RenderNodeInstanceServer::completeComponent(const CompleteComponentCommand &command)
{
- NodeInstanceServer::completeComponent(command);
+ Qt4NodeInstanceServer::completeComponent(command);
QList<ServerNodeInstance> instanceList;
foreach(qint32 instanceId, command.instances()) {