From 3124db009fa976443d650604626fddef91e2119c Mon Sep 17 00:00:00 2001
From: Lasse Holmstedt <lasse.holmstedt@nokia.com>
Date: Wed, 10 Mar 2010 10:50:11 +0100
Subject: [PATCH] Refactored toolbar interface

---
 src/plugins/coreplugin/designmodetoolbar.cpp |  8 +++++---
 src/plugins/coreplugin/designmodetoolbar.h   |  7 +++++--
 src/plugins/designer/formeditorw.cpp         | 18 ++++++++++++++----
 src/plugins/designer/formeditorw.h           |  4 ++++
 src/plugins/qmldesigner/designmodewidget.cpp |  3 ++-
 5 files changed, 30 insertions(+), 10 deletions(-)

diff --git a/src/plugins/coreplugin/designmodetoolbar.cpp b/src/plugins/coreplugin/designmodetoolbar.cpp
index 34354e0cb00..90fc50dd6e0 100644
--- a/src/plugins/coreplugin/designmodetoolbar.cpp
+++ b/src/plugins/coreplugin/designmodetoolbar.cpp
@@ -183,13 +183,11 @@ void EditorToolBar::closeView()
     emit closeClicked();
 }
 
-void EditorToolBar::addEditor(IEditor *editor, ToolbarCreationFlags flags)
+void EditorToolBar::addEditor(IEditor *editor)
 {
     connect(editor, SIGNAL(changed()), this, SLOT(checkEditorStatus()));
     QWidget *toolBar = editor->toolBar();
 
-    m_ignoreEditorToolbar = flags & FlagsIgnoreIEditorToolBar;
-
     if (toolBar && !m_ignoreEditorToolbar)
         addCenterToolBar(toolBar);
 
@@ -215,6 +213,10 @@ void EditorToolBar::updateToolBar(QWidget *toolBar)
     m_activeToolBar = toolBar;
 }
 
+void EditorToolBar::setToolbarCreationFlags(ToolbarCreationFlags flags)
+{
+    m_ignoreEditorToolbar = flags & FlagsIgnoreIEditorToolBar;
+}
 
 void EditorToolBar::setCurrentEditor(IEditor *editor)
 {
diff --git a/src/plugins/coreplugin/designmodetoolbar.h b/src/plugins/coreplugin/designmodetoolbar.h
index 286884b7fc7..0deab7df899 100644
--- a/src/plugins/coreplugin/designmodetoolbar.h
+++ b/src/plugins/coreplugin/designmodetoolbar.h
@@ -61,15 +61,18 @@ public:
     enum ToolbarCreationFlags { FlagsNone = 0, FlagsIgnoreIEditorToolBar = 1 };
 
     /**
-      * Adds an editor to listen to state changes so that the editor can be updated accordingly.
+      * Adds an editor whose state is listened to, so that the toolbar can be kept up to date
+      * with regards to locked status and tooltips.
       */
-    void addEditor(IEditor *editor, ToolbarCreationFlags flags = FlagsNone);
+    void addEditor(IEditor *editor);
 
     /**
       * Sets the editor and adds its custom toolbar to the widget.
       */
     void setCurrentEditor(IEditor *editor);
 
+    void setToolbarCreationFlags(ToolbarCreationFlags flags);
+
     /**
       * Adds a toolbar to the widget and sets invisible by default.
       */
diff --git a/src/plugins/designer/formeditorw.cpp b/src/plugins/designer/formeditorw.cpp
index 4b377eaad46..8a8dff3669a 100644
--- a/src/plugins/designer/formeditorw.cpp
+++ b/src/plugins/designer/formeditorw.cpp
@@ -30,7 +30,6 @@
 #include "formeditorw.h"
 #include "formwindoweditor.h"
 #include "designerconstants.h"
-#include "faketoolbar.h"
 #include "settingsmanager.h"
 #include "settingspage.h"
 #include "editorwidget.h"
@@ -42,6 +41,7 @@
 #include "resourcehandler.h"
 #include <widgethost.h>
 
+#include <coreplugin/designmodetoolbar.h>
 #include <coreplugin/modemanager.h>
 #include <coreplugin/designmode.h>
 #include <coreplugin/coreconstants.h>
@@ -154,7 +154,9 @@ FormEditorW::FormEditorW() :
     m_context(0),
     m_modeWidget(0),
     m_editorWidget(0),
-    m_designMode(0)
+    m_designMode(0),
+    m_editorToolBar(0),
+    m_toolBar(0)
 {
     if (Designer::Constants::Internal::debug)
         qDebug() << Q_FUNC_INFO;
@@ -310,14 +312,19 @@ void FormEditorW::fullInit()
     m_editorWidget->restoreSettings(settings);
     settings->endGroup();
 
+    m_editorToolBar = createEditorToolBar();
+    m_toolBar = Core::EditorManager::createToolBar();
+    m_toolBar->setToolbarCreationFlags(Core::EditorToolBar::FlagsIgnoreIEditorToolBar);
+    m_toolBar->setNavigationVisible(false);
+    m_toolBar->addCenterToolBar(m_editorToolBar);
+
     m_designMode = ExtensionSystem::PluginManager::instance()->getObject<Core::DesignMode>();
     m_modeWidget = new QWidget;
     m_modeWidget->setObjectName(QLatin1String("DesignerModeWidget"));
     QVBoxLayout *layout = new QVBoxLayout;
     layout->setMargin(0);
     layout->setSpacing(0);
-
-    layout->addWidget(new FakeToolBar(createEditorToolBar()));
+    layout->addWidget(m_toolBar);
     layout->addWidget(m_editorWidget);
     m_modeWidget->setLayout(layout);
 
@@ -676,6 +683,9 @@ EditorData FormEditorW::createEditor(QWidget *parent)
     connect(data.formWindowEditor->file(), SIGNAL(changed()),
             resourceHandler, SLOT(updateResources()));
     m_editorWidget->add(data);
+
+    m_toolBar->addEditor(xmlEditor->editableInterface());
+
     return data;
 }
 
diff --git a/src/plugins/designer/formeditorw.h b/src/plugins/designer/formeditorw.h
index 63ab2cf0198..0cd32d7b947 100644
--- a/src/plugins/designer/formeditorw.h
+++ b/src/plugins/designer/formeditorw.h
@@ -61,6 +61,7 @@ class ICore;
 class IEditor;
 class Command;
 class DesignMode;
+class EditorToolBar;
 }
 
 namespace Designer {
@@ -192,6 +193,9 @@ private:
     EditorWidget *m_editorWidget;
     Core::DesignMode *m_designMode;
 
+    QWidget *m_editorToolBar;
+    Core::EditorToolBar *m_toolBar;
+
     QMap<Core::Command *, QAction *> m_commandToDesignerAction;
 };
 
diff --git a/src/plugins/qmldesigner/designmodewidget.cpp b/src/plugins/qmldesigner/designmodewidget.cpp
index 2f65ada9e0f..9e6b0368077 100644
--- a/src/plugins/qmldesigner/designmodewidget.cpp
+++ b/src/plugins/qmldesigner/designmodewidget.cpp
@@ -297,7 +297,8 @@ void DocumentWidget::setup()
 
     m_designToolBar->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Ignored);
 
-    m_fakeToolBar->addEditor(textEditor(), Core::EditorToolBar::FlagsIgnoreIEditorToolBar);
+    m_fakeToolBar->setToolbarCreationFlags(Core::EditorToolBar::FlagsIgnoreIEditorToolBar);
+    m_fakeToolBar->addEditor(textEditor());
     m_fakeToolBar->addCenterToolBar(m_designToolBar);
     m_fakeToolBar->setNavigationVisible(false);
 
-- 
GitLab