From defcfadd1746428c14440e6e9660ffb126f0668e Mon Sep 17 00:00:00 2001 From: Marco Bubke <marco.bubke@digia.com> Date: Thu, 26 Sep 2013 18:46:39 +0200 Subject: [PATCH] QmlDesigner: Add master to component view Change-Id: I236f78b73b8eea2b780e64d833fdedcfa7d246d1 Reviewed-by: Thomas Hartmann <Thomas.Hartmann@digia.com> --- .../components/componentcore/crumblebar.cpp | 9 ++++-- .../integration/componentaction.cpp | 7 +++-- .../components/integration/componentaction.h | 1 + .../components/integration/componentview.cpp | 30 +++++++++++++++++++ .../components/integration/componentview.h | 3 ++ .../components/integration/designdocument.cpp | 14 +++++++++ .../components/integration/designdocument.h | 1 + .../designercore/include/viewmanager.h | 1 + .../designercore/model/viewmanager.cpp | 8 +++++ src/plugins/qmldesigner/qmldesignerplugin.cpp | 1 + 10 files changed, 70 insertions(+), 5 deletions(-) diff --git a/src/plugins/qmldesigner/components/componentcore/crumblebar.cpp b/src/plugins/qmldesigner/components/componentcore/crumblebar.cpp index 47cbdcdf40e..891a82c4f7c 100644 --- a/src/plugins/qmldesigner/components/componentcore/crumblebar.cpp +++ b/src/plugins/qmldesigner/components/componentcore/crumblebar.cpp @@ -147,15 +147,18 @@ void CrumbleBar::onCrumblePathElementClicked(const QVariant &data) && clickedCrumbleBarInfo.fileName == currentDesignDocument()->fileName()) { nextFileIsCalledInternally(); currentDesignDocument()->changeToDocumentModel(); + QmlDesignerPlugin::instance()->viewManager().setComponentViewToMaster(); } else { crumblePath()->popElement(); nextFileIsCalledInternally(); Core::EditorManager::openEditor(clickedCrumbleBarInfo.fileName, Core::Id(), Core::EditorManager::DoNotMakeVisible); if (!clickedCrumbleBarInfo.componentId.isEmpty()) { - currentDesignDocument()->changeToSubComponent( - currentDesignDocument()->rewriterView()->modelNodeForId(clickedCrumbleBarInfo.componentId)); - //pushInFileComponent(clickedCrumbleBarInfo.componentId); + ModelNode componentNode = currentDesignDocument()->rewriterView()->modelNodeForId(clickedCrumbleBarInfo.componentId); + currentDesignDocument()->changeToSubComponent(componentNode); + QmlDesignerPlugin::instance()->viewManager().setComponentNode(componentNode); + } else { + QmlDesignerPlugin::instance()->viewManager().setComponentViewToMaster(); } } updateVisibility(); diff --git a/src/plugins/qmldesigner/components/integration/componentaction.cpp b/src/plugins/qmldesigner/components/integration/componentaction.cpp index 78667b67769..194e3ebb083 100644 --- a/src/plugins/qmldesigner/components/integration/componentaction.cpp +++ b/src/plugins/qmldesigner/components/integration/componentaction.cpp @@ -68,9 +68,12 @@ void ComponentAction::emitCurrentComponentChanged(int index) if (dontEmitCurrentComponentChanged) return; - ModelNode componentNode = m_componentView->modelNode(index); + ModelNode componentModelNode = m_componentView->modelNode(index); - emit currentComponentChanged(componentNode); + if (componentModelNode.isRootNode()) + emit changedToMaster(); + else + emit currentComponentChanged(componentModelNode); } } // namespace QmlDesigner diff --git a/src/plugins/qmldesigner/components/integration/componentaction.h b/src/plugins/qmldesigner/components/integration/componentaction.h index d421d2f5dae..875ddacc141 100644 --- a/src/plugins/qmldesigner/components/integration/componentaction.h +++ b/src/plugins/qmldesigner/components/integration/componentaction.h @@ -56,6 +56,7 @@ protected: signals: void currentComponentChanged(const ModelNode &node); + void changedToMaster(); void currentIndexChanged(int index); public slots: diff --git a/src/plugins/qmldesigner/components/integration/componentview.cpp b/src/plugins/qmldesigner/components/integration/componentview.cpp index 80c0489a647..082b3e220b9 100644 --- a/src/plugins/qmldesigner/components/integration/componentview.cpp +++ b/src/plugins/qmldesigner/components/integration/componentview.cpp @@ -71,6 +71,11 @@ void ComponentView::setComponentNode(const ModelNode &node) m_componentAction->setCurrentIndex(indexForNode(node)); } +void ComponentView::setComponentToMaster() +{ + m_componentAction->setCurrentIndex(indexOfMaster()); +} + void ComponentView::removeSingleNodeFromList(const ModelNode &node) { for (int row = 0; row < m_standardItemModel->rowCount(); row++) { @@ -89,6 +94,24 @@ int ComponentView::indexForNode(const ModelNode &node) return -1; } +int ComponentView::indexOfMaster() +{ + for (int row = 0; row < m_standardItemModel->rowCount(); row++) { + if (m_standardItemModel->item(row)->data(ModelNodeRole).toInt() == 0) + return row; + } + + return -1; +} + +void ComponentView::addMasterDocument() +{ + QStandardItem *item = new QStandardItem("master"); + item->setData(QVariant::fromValue(0), ModelNodeRole); + item->setEditable(false); + m_standardItemModel->appendRow(item); +} + void ComponentView::modelAttached(Model *model) { if (AbstractView::model() == model) @@ -129,8 +152,15 @@ void ComponentView::searchForComponentAndAddToList(const ModelNode &node) nodeList.append(node.allSubModelNodes()); + bool masterNotAdded = true; + foreach (const ModelNode &node, nodeList) { if (node.nodeSourceType() == ModelNode::NodeWithComponentSource) { + if (masterNotAdded) { + masterNotAdded = true; + addMasterDocument(); + } + if (!node.id().isEmpty()) { QStandardItem *item = new QStandardItem(node.id()); item->setData(QVariant::fromValue(node.internalId()), ModelNodeRole); diff --git a/src/plugins/qmldesigner/components/integration/componentview.h b/src/plugins/qmldesigner/components/integration/componentview.h index 3c5f3ab74b2..43842dcab03 100644 --- a/src/plugins/qmldesigner/components/integration/componentview.h +++ b/src/plugins/qmldesigner/components/integration/componentview.h @@ -116,6 +116,7 @@ public: ModelNode modelNode(int index) const; void setComponentNode(const ModelNode &node); + void setComponentToMaster(); signals: void componentListChanged(const QStringList &componentList); @@ -126,6 +127,8 @@ private: //functions void searchForComponentAndRemoveFromList(const ModelNode &node); void removeSingleNodeFromList(const ModelNode &node); int indexForNode(const ModelNode &node); + int indexOfMaster(); + void addMasterDocument(); private: QStandardItemModel *m_standardItemModel; diff --git a/src/plugins/qmldesigner/components/integration/designdocument.cpp b/src/plugins/qmldesigner/components/integration/designdocument.cpp index 510022e76b2..6855346372e 100644 --- a/src/plugins/qmldesigner/components/integration/designdocument.cpp +++ b/src/plugins/qmldesigner/components/integration/designdocument.cpp @@ -264,6 +264,7 @@ void DesignDocument::changeToDocumentModel() viewManager().detachRewriterView(); viewManager().detachViewsExceptRewriterAndComponetView(); + m_inFileComponentModel.reset(); viewManager().attachRewriterView(); @@ -297,6 +298,19 @@ void DesignDocument::changeToSubComponent(const ModelNode &componentNode) attachRewriterToModel(); QmlDesignerPlugin::instance()->viewManager().pushInFileComponentOnCrumbleBar(componentNode); + QmlDesignerPlugin::instance()->viewManager().setComponentNode(componentNode); +} + +void DesignDocument::changeToMaster() +{ + if (QmlDesignerPlugin::instance()->currentDesignDocument() != this) + return; + + if (m_inFileComponentModel) + changeToDocumentModel(); + + QmlDesignerPlugin::instance()->viewManager().pushFileOnCrumbleBar(fileName()); + QmlDesignerPlugin::instance()->viewManager().setComponentNode(rootModelNode()); } void DesignDocument::attachRewriterToModel() diff --git a/src/plugins/qmldesigner/components/integration/designdocument.h b/src/plugins/qmldesigner/components/integration/designdocument.h index e4178b03282..36261b99f4e 100644 --- a/src/plugins/qmldesigner/components/integration/designdocument.h +++ b/src/plugins/qmldesigner/components/integration/designdocument.h @@ -118,6 +118,7 @@ public slots: void redo(); void updateActiveQtVersion(); void changeToSubComponent(const ModelNode &componentNode); + void changeToMaster(); private slots: void updateFileName(const QString &oldFileName, const QString &newFileName); diff --git a/src/plugins/qmldesigner/designercore/include/viewmanager.h b/src/plugins/qmldesigner/designercore/include/viewmanager.h index fb2e7b71c0d..97d7367c5c4 100644 --- a/src/plugins/qmldesigner/designercore/include/viewmanager.h +++ b/src/plugins/qmldesigner/designercore/include/viewmanager.h @@ -70,6 +70,7 @@ public: void setItemLibraryViewResourcePath(const QString &resourcePath); void setComponentNode(const ModelNode &componentNode); + void setComponentViewToMaster(); void setNodeInstanceViewQtPath(const QString & qtPath); void resetPropertyEditorView(); diff --git a/src/plugins/qmldesigner/designercore/model/viewmanager.cpp b/src/plugins/qmldesigner/designercore/model/viewmanager.cpp index 6ed7323f2c1..2dd3c68ce02 100644 --- a/src/plugins/qmldesigner/designercore/model/viewmanager.cpp +++ b/src/plugins/qmldesigner/designercore/model/viewmanager.cpp @@ -132,11 +132,14 @@ void ViewManager::attachComponentView() { documentModel()->attachView(&m_componentView); QObject::connect(m_componentView.action(), SIGNAL(currentComponentChanged(ModelNode)), currentDesignDocument(), SLOT(changeToSubComponent(ModelNode))); + QObject::connect(m_componentView.action(), SIGNAL(changedToMaster()), currentDesignDocument(), SLOT(changeToMaster())); } void ViewManager::detachComponentView() { QObject::disconnect(m_componentView.action(), SIGNAL(currentComponentChanged(ModelNode)), currentDesignDocument(), SLOT(changeToSubComponent(ModelNode))); + QObject::disconnect(m_componentView.action(), SIGNAL(changedToMaster()), currentDesignDocument(), SLOT(changeToMaster())); + documentModel()->detachView(&m_componentView); } @@ -166,6 +169,11 @@ void ViewManager::setComponentNode(const ModelNode &componentNode) m_componentView.setComponentNode(componentNode); } +void ViewManager::setComponentViewToMaster() +{ + m_componentView.setComponentToMaster(); +} + void ViewManager::setNodeInstanceViewQtPath(const QString &qtPath) { m_nodeInstanceView.setPathToQt(qtPath); diff --git a/src/plugins/qmldesigner/qmldesignerplugin.cpp b/src/plugins/qmldesigner/qmldesignerplugin.cpp index d9e93b30293..0c7f9b33ced 100644 --- a/src/plugins/qmldesigner/qmldesignerplugin.cpp +++ b/src/plugins/qmldesigner/qmldesignerplugin.cpp @@ -233,6 +233,7 @@ void QmlDesignerPlugin::changeEditor() if (m_documentManager.hasCurrentDesignDocument()) { activateAutoSynchronization(); m_viewManager.pushFileOnCrumbleBar(m_documentManager.currentDesignDocument()->fileName()); + m_viewManager.setComponentViewToMaster(); } m_shortCutManager.updateUndoActions(currentDesignDocument()); -- GitLab