From 736963a4227a782cd45df6298bf322d469dac940 Mon Sep 17 00:00:00 2001
From: Lasse Holmstedt <lasse.holmstedt@nokia.com>
Date: Mon, 8 Mar 2010 09:47:45 +0100
Subject: [PATCH] Context Help support for Bauhaus

Task-number: BAUHAUS-451
Reviewed-by: kkoehne
---
 .../integration/designdocumentcontroller.cpp    | 17 ++++++++++++++++-
 .../integration/designdocumentcontroller.h      |  1 +
 src/plugins/qmldesigner/designmodecontext.cpp   |  8 +++++++-
 src/plugins/qmldesigner/designmodecontext.h     |  9 +++++++--
 src/plugins/qmldesigner/designmodewidget.cpp    |  7 +++++++
 src/plugins/qmldesigner/designmodewidget.h      |  2 ++
 6 files changed, 40 insertions(+), 4 deletions(-)

diff --git a/src/plugins/qmldesigner/components/integration/designdocumentcontroller.cpp b/src/plugins/qmldesigner/components/integration/designdocumentcontroller.cpp
index 0de6ee28f67..3a7d3789044 100644
--- a/src/plugins/qmldesigner/components/integration/designdocumentcontroller.cpp
+++ b/src/plugins/qmldesigner/components/integration/designdocumentcontroller.cpp
@@ -416,7 +416,7 @@ void DesignDocumentController::loadCurrentModel()
     m_d->model->attachView(m_d->navigator.data());
     m_d->itemLibrary->setMetaInfo(m_d->model->metaInfo());
 
-    if (m_d->formEditorView .isNull()) {
+    if (m_d->formEditorView.isNull()) {
         m_d->formEditorView = new FormEditorView(this);
         m_d->stackedWidget->addWidget(m_d->formEditorView->widget());
         ComponentAction *componentAction = new ComponentAction(m_d->formEditorView->widget());
@@ -857,4 +857,19 @@ bool DesignDocumentController::save(QIODevice *device, QString * /*errorMessage*
     }
 }
 
+QString DesignDocumentController::contextHelpId() const
+{
+    DesignDocumentControllerView view;
+    m_d->model->attachView(&view);
+
+    QList<ModelNode> nodes = view.selectedModelNodes();
+    QString helpId;
+    if (!nodes.isEmpty()) {
+        helpId = nodes.first().type();
+        helpId.replace("Qt/", "QML.");
+    }
+
+    return helpId;
+}
+
 } // namespace QmlDesigner
diff --git a/src/plugins/qmldesigner/components/integration/designdocumentcontroller.h b/src/plugins/qmldesigner/components/integration/designdocumentcontroller.h
index 0521b436c37..311861fc112 100644
--- a/src/plugins/qmldesigner/components/integration/designdocumentcontroller.h
+++ b/src/plugins/qmldesigner/components/integration/designdocumentcontroller.h
@@ -90,6 +90,7 @@ public:
     bool isModelSyncBlocked() const;
     void blockModelSync(bool block);
 
+    QString contextHelpId() const;
     QList<RewriterView::Error> qmlErrors() const;
 
 signals:
diff --git a/src/plugins/qmldesigner/designmodecontext.cpp b/src/plugins/qmldesigner/designmodecontext.cpp
index 3b15329b364..baddfa1c779 100644
--- a/src/plugins/qmldesigner/designmodecontext.cpp
+++ b/src/plugins/qmldesigner/designmodecontext.cpp
@@ -29,13 +29,14 @@
 
 #include "designmodecontext.h"
 #include "qmldesignerconstants.h"
+#include "designmodewidget.h"
 #include <coreplugin/uniqueidmanager.h>
 #include <QWidget>
 
 namespace QmlDesigner {
 namespace Internal {
 
-DesignModeContext::DesignModeContext(QWidget *widget) : IContext(widget),
+DesignModeContext::DesignModeContext(DesignModeWidget *widget) : IContext(widget),
     m_widget(widget)
 {
     m_context << Core::UniqueIDManager::instance()->uniqueIdentifier(Constants::C_FORMEDITOR);
@@ -56,6 +57,11 @@ QWidget *DesignModeContext::widget()
     return m_widget;
 }
 
+QString DesignModeContext::contextHelpId() const
+{
+    return m_widget->contextHelpId();
+}
+
 }
 }
 
diff --git a/src/plugins/qmldesigner/designmodecontext.h b/src/plugins/qmldesigner/designmodecontext.h
index e35f3aa1fd9..90dcb94eee9 100644
--- a/src/plugins/qmldesigner/designmodecontext.h
+++ b/src/plugins/qmldesigner/designmodecontext.h
@@ -40,20 +40,25 @@ QT_END_NAMESPACE
 namespace QmlDesigner {
 namespace Internal {
 
+class DesignModeWidget;
+
 /**
   * Bauhaus Design mode context object
   */
 class DesignModeContext : public Core::IContext
 {
 public:
-    DesignModeContext(QWidget *widget);
+    DesignModeContext(DesignModeWidget *widget);
     ~DesignModeContext();
 
     QList<int> context() const;
     QWidget *widget();
+
+    QString contextHelpId() const;
+
 private:
     QList<int> m_context;
-    QWidget *m_widget;
+    DesignModeWidget *m_widget;
 };
 
 }
diff --git a/src/plugins/qmldesigner/designmodewidget.cpp b/src/plugins/qmldesigner/designmodewidget.cpp
index 9f842c99d95..7851dc8e102 100644
--- a/src/plugins/qmldesigner/designmodewidget.cpp
+++ b/src/plugins/qmldesigner/designmodewidget.cpp
@@ -688,5 +688,12 @@ void DesignModeWidget::setCurrentDocumentWidget(DocumentWidget *newDocumentWidge
     }
 }
 
+QString DesignModeWidget::contextHelpId() const
+{
+    if (m_currentDocumentWidget)
+        return m_currentDocumentWidget->document()->contextHelpId();
+    return QString();
+}
+
 } // namespace Internal
 } // namespace Designer
diff --git a/src/plugins/qmldesigner/designmodewidget.h b/src/plugins/qmldesigner/designmodewidget.h
index 5a51f6cc12e..4cbcf6c93c7 100644
--- a/src/plugins/qmldesigner/designmodewidget.h
+++ b/src/plugins/qmldesigner/designmodewidget.h
@@ -165,8 +165,10 @@ public:
     ~DesignModeWidget();
 
 //    void syncWithTextEdit(bool sync);
+
     void showEditor(Core::IEditor *editor);
     void closeEditors(const QList<Core::IEditor*> editors);
+    QString contextHelpId() const;
 
     QAction *undoAction() const;
     QAction *redoAction() const;
-- 
GitLab