diff --git a/src/plugins/qmldesigner/components/texteditor/texteditor.pri b/src/plugins/qmldesigner/components/texteditor/texteditor.pri
new file mode 100644
index 00000000000..b683350cd96
--- /dev/null
+++ b/src/plugins/qmldesigner/components/texteditor/texteditor.pri
@@ -0,0 +1,4 @@
+VPATH += $$PWD
+SOURCES += texteditorview.cpp
+HEADERS += texteditorview.h
+#RESOURCES += texteditor.qrc
diff --git a/src/plugins/qmldesigner/components/texteditor/texteditor.qrc b/src/plugins/qmldesigner/components/texteditor/texteditor.qrc
new file mode 100644
index 00000000000..03585ec0309
--- /dev/null
+++ b/src/plugins/qmldesigner/components/texteditor/texteditor.qrc
@@ -0,0 +1,2 @@
+
+
diff --git a/src/plugins/qmldesigner/components/texteditor/texteditorview.cpp b/src/plugins/qmldesigner/components/texteditor/texteditorview.cpp
new file mode 100644
index 00000000000..b160aebbc17
--- /dev/null
+++ b/src/plugins/qmldesigner/components/texteditor/texteditorview.cpp
@@ -0,0 +1,210 @@
+/****************************************************************************
+**
+** Copyright (C) 2016 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 "texteditorview.h"
+
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+
+#include
+#include
+#include
+
+#include
+#include
+#include
+#include
+#include
+#include
+
+namespace QmlDesigner {
+
+class DummyWidget : public QWidget {
+public:
+ DummyWidget(QWidget *parent = nullptr) : QWidget(parent) {
+ QBoxLayout *layout = new QVBoxLayout(this);
+ layout->setMargin(0);
+ }
+ void showEvent(QShowEvent *event) {
+ if (m_widget.isNull())
+ setWidget(QmlDesignerPlugin::instance()->currentDesignDocument()->textEditor()->duplicate()->widget());
+ QWidget::showEvent(event);
+ }
+
+private:
+ void setWidget(QWidget *widget) {
+ if (m_widget)
+ m_widget->deleteLater();
+ m_widget = widget;
+
+ layout()->addWidget(widget);
+ }
+ QPointer m_widget;
+};
+
+
+TextEditorView::TextEditorView(QObject *parent)
+ : AbstractView(parent)
+ , m_dummyWidget(new DummyWidget)
+{
+ // not completely sure that we need this to just call the right help method ->
+ Internal::TextEditorContext *textEditorContext = new Internal::TextEditorContext(m_dummyWidget);
+ Core::ICore::addContextObject(textEditorContext);
+}
+
+TextEditorView::~TextEditorView()
+{
+ m_textEditor->deleteLater();
+ m_dummyWidget->deleteLater();
+}
+
+void TextEditorView::modelAttached(Model *model)
+{
+ Q_ASSERT(model);
+
+ AbstractView::modelAttached(model);
+}
+
+void TextEditorView::modelAboutToBeDetached(Model *model)
+{
+ AbstractView::modelAboutToBeDetached(model);
+}
+
+void TextEditorView::importsChanged(const QList &/*addedImports*/, const QList &/*removedImports*/)
+{
+}
+
+void TextEditorView::nodeAboutToBeRemoved(const ModelNode &/*removedNode*/)
+{
+}
+
+void TextEditorView::rootNodeTypeChanged(const QString &/*type*/, int /*majorVersion*/, int /*minorVersion*/)
+{
+}
+
+void TextEditorView::propertiesAboutToBeRemoved(const QList& /*propertyList*/)
+{
+}
+
+void TextEditorView::nodeReparented(const ModelNode &/*node*/, const NodeAbstractProperty &/*newPropertyParent*/, const NodeAbstractProperty &/*oldPropertyParent*/, AbstractView::PropertyChangeFlags /*propertyChange*/)
+{
+}
+
+WidgetInfo TextEditorView::widgetInfo()
+{
+ return createWidgetInfo(m_dummyWidget, 0, "TextEditor", WidgetInfo::CentralPane, 0, tr("Text Editor"));
+}
+
+QString TextEditorView::contextHelpId() const
+{
+ if (m_textEditor) {
+ QString contextHelpId = m_textEditor->contextHelpId();
+ if (!contextHelpId.isEmpty())
+ return m_textEditor->contextHelpId();
+ }
+ return AbstractView::contextHelpId();
+}
+
+void TextEditorView::nodeIdChanged(const ModelNode& /*node*/, const QString &/*newId*/, const QString &/*oldId*/)
+{
+}
+
+void TextEditorView::selectedNodesChanged(const QList &/*selectedNodeList*/,
+ const QList &/*lastSelectedNodeList*/)
+{
+}
+
+void TextEditorView::customNotification(const AbstractView * /*view*/, const QString &/*identifier*/, const QList &/*nodeList*/, const QList &/*data*/)
+{
+}
+
+bool TextEditorView::changeToMoveTool()
+{
+ return true;
+}
+
+void TextEditorView::changeToDragTool()
+{
+}
+
+bool TextEditorView::changeToMoveTool(const QPointF &/*beginPoint*/)
+{
+ return true;
+}
+
+void TextEditorView::changeToSelectionTool()
+{
+}
+
+void TextEditorView::changeToResizeTool()
+{
+}
+
+void TextEditorView::changeToTransformTools()
+{
+}
+
+void TextEditorView::changeToCustomTool()
+{
+}
+
+void TextEditorView::auxiliaryDataChanged(const ModelNode &/*node*/, const PropertyName &/*name*/, const QVariant &/*data*/)
+{
+}
+
+void TextEditorView::instancesCompleted(const QVector &/*completedNodeList*/)
+{
+}
+
+void TextEditorView::instanceInformationsChanged(const QMultiHash &/*informationChangeHash*/)
+{
+}
+
+void TextEditorView::instancesRenderImageChanged(const QVector &/*nodeList*/)
+{
+}
+
+void TextEditorView::instancesChildrenChanged(const QVector &/*nodeList*/)
+{
+}
+
+void TextEditorView::rewriterBeginTransaction()
+{
+}
+
+void TextEditorView::rewriterEndTransaction()
+{
+}
+
+void TextEditorView::instancePropertyChanged(const QList > &/*propertyList*/)
+{
+}
+}
+
diff --git a/src/plugins/qmldesigner/components/texteditor/texteditorview.h b/src/plugins/qmldesigner/components/texteditor/texteditorview.h
new file mode 100644
index 00000000000..fe5587bccb3
--- /dev/null
+++ b/src/plugins/qmldesigner/components/texteditor/texteditorview.h
@@ -0,0 +1,91 @@
+/****************************************************************************
+**
+** Copyright (C) 2016 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.
+**
+****************************************************************************/
+#pragma once
+
+#include
+
+namespace TextEditor { class BaseTextEditor; }
+
+namespace Utils { class CrumblePath; }
+
+namespace QmlDesigner {
+
+class QMLDESIGNERCORE_EXPORT TextEditorView : public AbstractView
+{
+ Q_OBJECT
+
+public:
+ TextEditorView(QObject *parent = 0);
+ ~TextEditorView();
+
+ // AbstractView
+ void modelAttached(Model *model) override;
+ void modelAboutToBeDetached(Model *model) override;
+
+ void importsChanged(const QList &addedImports, const QList &removedImports) override;
+
+ void nodeAboutToBeRemoved(const ModelNode &removedNode) override;
+ void nodeReparented(const ModelNode &node, const NodeAbstractProperty &newPropertyParent, const NodeAbstractProperty &oldPropertyParent, AbstractView::PropertyChangeFlags propertyChange) override;
+ void nodeIdChanged(const ModelNode& node, const QString& newId, const QString& oldId) override;
+ void propertiesAboutToBeRemoved(const QList& propertyList) override;
+ void rootNodeTypeChanged(const QString &type, int majorVersion, int minorVersion) override;
+
+ void selectedNodesChanged(const QList &selectedNodeList,
+ const QList &lastSelectedNodeList) override;
+ void customNotification(const AbstractView *view, const QString &identifier, const QList &nodeList, const QList &data) override;
+
+ // TextEditorView
+ WidgetInfo widgetInfo() override;
+ QString contextHelpId() const override;
+
+ TextEditor::BaseTextEditor *textEditor();
+
+ bool changeToMoveTool();
+ bool changeToMoveTool(const QPointF &beginPoint);
+ void changeToDragTool();
+ void changeToSelectionTool();
+ void changeToResizeTool();
+ void changeToTransformTools();
+ void changeToCustomTool();
+
+ void auxiliaryDataChanged(const ModelNode &node, const PropertyName &name, const QVariant &data) override;
+
+ void instancesCompleted(const QVector &completedNodeList) override;
+ void instanceInformationsChanged(const QMultiHash &informationChangeHash) override;
+ void instancesRenderImageChanged(const QVector &nodeList) override;
+ void instancesChildrenChanged(const QVector &nodeList) override;
+ void instancePropertyChanged(const QList > &propertyList) override;
+
+ void rewriterBeginTransaction() override;
+ void rewriterEndTransaction() override;
+
+ void deActivateItemCreator();
+
+private:
+ QPointer m_textEditor;
+ QWidget *m_dummyWidget = 0;
+};
+
+} // namespace QmlDesigner
diff --git a/src/plugins/qmldesigner/designercore/include/abstractview.h b/src/plugins/qmldesigner/designercore/include/abstractview.h
index 4dd000e5feb..435335f4404 100644
--- a/src/plugins/qmldesigner/designercore/include/abstractview.h
+++ b/src/plugins/qmldesigner/designercore/include/abstractview.h
@@ -246,7 +246,7 @@ public:
virtual bool hasWidget() const;
virtual WidgetInfo widgetInfo();
- QString contextHelpId() const;
+ virtual QString contextHelpId() const;
protected:
void setModel(Model * model);
diff --git a/src/plugins/qmldesigner/designercore/model/viewmanager.cpp b/src/plugins/qmldesigner/designercore/model/viewmanager.cpp
index 5056666456f..5c95899cb04 100644
--- a/src/plugins/qmldesigner/designercore/model/viewmanager.cpp
+++ b/src/plugins/qmldesigner/designercore/model/viewmanager.cpp
@@ -27,23 +27,24 @@
#ifndef QMLDESIGNER_TEST
+#include
+#include
+#include
+#include
#include
#include
#include
#include
#include
#include
+#include
#include
#include
#include
#include
#include
+#include
-#include "componentaction.h"
-#include "designmodewidget.h"
-#include "crumblebar.h"
-
-#include
#include
namespace QmlDesigner {
@@ -55,6 +56,7 @@ public:
Internal::DebugView debugView;
ComponentView componentView;
FormEditorView formEditorView;
+ TextEditorView textEditorView;
ItemLibraryView itemLibraryView;
NavigatorView navigatorView;
PropertyEditorView propertyEditorView;
@@ -236,6 +238,7 @@ QList ViewManager::widgetInfos()
QList widgetInfoList;
widgetInfoList.append(d->formEditorView.widgetInfo());
+ widgetInfoList.append(d->textEditorView.widgetInfo());
widgetInfoList.append(d->itemLibraryView.widgetInfo());
widgetInfoList.append(d->navigatorView.widgetInfo());
widgetInfoList.append(d->propertyEditorView.widgetInfo());
diff --git a/src/plugins/qmldesigner/designmodecontext.cpp b/src/plugins/qmldesigner/designmodecontext.cpp
index 3158e2dbb31..e2021d3d88e 100644
--- a/src/plugins/qmldesigner/designmodecontext.cpp
+++ b/src/plugins/qmldesigner/designmodecontext.cpp
@@ -68,6 +68,21 @@ QString NavigatorContext::contextHelpId() const
return qobject_cast(m_widget)->contextHelpId();
}
+TextEditorContext::TextEditorContext(QWidget *widget)
+ : IContext(widget)
+{
+ setWidget(widget);
+ setContext(Core::Context(Constants::C_QMLTEXTEDITOR, Constants::C_QT_QUICK_TOOLS_MENU));
+}
+
+QString TextEditorContext::contextHelpId() const
+{
+ // as TextEditorView::contextHelpId() uses the texteditor directly,
+ // this should not happen
+ Q_ASSERT(false);
+ return "not_implemented";
+}
+
}
}
diff --git a/src/plugins/qmldesigner/designmodecontext.h b/src/plugins/qmldesigner/designmodecontext.h
index aa89c619f38..db4f7899268 100644
--- a/src/plugins/qmldesigner/designmodecontext.h
+++ b/src/plugins/qmldesigner/designmodecontext.h
@@ -54,5 +54,12 @@ public:
QString contextHelpId() const;
};
+class TextEditorContext : public Core::IContext
+{
+public:
+ TextEditorContext(QWidget *widget);
+ QString contextHelpId() const;
+};
+
}
}
diff --git a/src/plugins/qmldesigner/designmodewidget.cpp b/src/plugins/qmldesigner/designmodewidget.cpp
index 648cb3b07f1..6a5c5c8c6a3 100644
--- a/src/plugins/qmldesigner/designmodewidget.cpp
+++ b/src/plugins/qmldesigner/designmodewidget.cpp
@@ -235,6 +235,11 @@ void DesignModeWidget::disableWidgets()
m_isDisabled = true;
}
+void DesignModeWidget::showTextEdit()
+{
+ m_centralTabWidget->setCurrentIndex(m_centralTabWidget->currentIndex() == 0 ? 1 : 0);
+}
+
void DesignModeWidget::updateErrorStatus(const QList &errors)
{
if (debug)
diff --git a/src/plugins/qmldesigner/designmodewidget.h b/src/plugins/qmldesigner/designmodewidget.h
index 06bc08646c4..ff3acb9914e 100644
--- a/src/plugins/qmldesigner/designmodewidget.h
+++ b/src/plugins/qmldesigner/designmodewidget.h
@@ -79,6 +79,7 @@ public:
void enableWidgets();
void disableWidgets();
+ void showTextEdit();
void showErrorMessageBox(const QList &errors);
void showWarningMessageBox(const QList &warnings);
bool gotoCodeWasClicked();
diff --git a/src/plugins/qmldesigner/qmldesigner_dependencies.pri b/src/plugins/qmldesigner/qmldesigner_dependencies.pri
index 3239b075ebe..68b12dc2635 100644
--- a/src/plugins/qmldesigner/qmldesigner_dependencies.pri
+++ b/src/plugins/qmldesigner/qmldesigner_dependencies.pri
@@ -18,12 +18,13 @@ INCLUDEPATH *= \
$$PWD/../../../share/qtcreator/qml/qmlpuppet/types \
$$PWD/designercore \
$$PWD/designercore/include \
+ $$PWD/components/integration \
$$PWD/components/componentcore \
$$PWD/components/importmanager \
- $$PWD/components/formeditor \
$$PWD/components/itemlibrary \
+ $$PWD/components/formeditor \
$$PWD/components/navigator \
- $$PWD/components/propertyeditor \
$$PWD/components/stateseditor \
- $$PWD/components/debugview \
- $$PWD/components/integration
+ $$PWD/components/texteditor \
+ $$PWD/components/propertyeditor \
+ $$PWD/components/debugview
diff --git a/src/plugins/qmldesigner/qmldesignerconstants.h b/src/plugins/qmldesigner/qmldesignerconstants.h
index e0e8081d1f5..05ec44c6b20 100644
--- a/src/plugins/qmldesigner/qmldesignerconstants.h
+++ b/src/plugins/qmldesigner/qmldesignerconstants.h
@@ -35,6 +35,7 @@ const char C_DELETE[] = "QmlDesigner.Delete";
const char C_QMLDESIGNER[] = "QmlDesigner::QmlDesignerMain";
const char C_QMLFORMEDITOR[] = "QmlDesigner::FormEditor";
const char C_QMLNAVIGATOR[] = "QmlDesigner::Navigator";
+const char C_QMLTEXTEDITOR[] = "QmlDesigner::TextEditor";
// Special context for preview menu, shared b/w designer and text editor
const char C_QT_QUICK_TOOLS_MENU[] = "QmlDesigner::ToolsMenu";
diff --git a/src/plugins/qmldesigner/qmldesignerplugin.cpp b/src/plugins/qmldesigner/qmldesignerplugin.cpp
index 304555175ef..a9fdeaad102 100644
--- a/src/plugins/qmldesigner/qmldesignerplugin.cpp
+++ b/src/plugins/qmldesigner/qmldesignerplugin.cpp
@@ -135,7 +135,7 @@ static bool shouldAssertInException()
static bool useTextEditInDesignMode()
{
DesignerSettings settings = QmlDesignerPlugin::instance()->settings();
- return settings.value(DesignerSettingsKey::TEXTEDIT_IN_DESIGNMODE, false).toBool();
+ return settings.value(DesignerSettingsKey::TEXTEDIT_IN_DESIGNMODE, true).toBool();
}
static bool warningsForQmlFilesInsteadOfUiQmlEnabled()
@@ -215,12 +215,13 @@ bool QmlDesignerPlugin::initialize(const QStringList & /*arguments*/, QString *e
MetaInfo::setPluginPaths(QStringList(pluginPath));
createDesignModeWidget();
- connect(switchTextDesignAction, &QAction::triggered, this, [](){
+ connect(switchTextDesignAction, &QAction::triggered, this, [this](){
if (Core::ModeManager::currentMode() == Core::Constants::MODE_DESIGN) {
- if (useTextEditInDesignMode())
- qDebug() << "not implemented";
- else
+ if (useTextEditInDesignMode()) {
+ d->mainWidget->showTextEdit();
+ } else {
Core::ModeManager::activateMode(Core::Constants::MODE_EDIT);
+ }
}
});
diff --git a/src/plugins/qmldesigner/qmldesignerplugin.pro b/src/plugins/qmldesigner/qmldesignerplugin.pro
index 8499afd913b..460a77a96ef 100644
--- a/src/plugins/qmldesigner/qmldesignerplugin.pro
+++ b/src/plugins/qmldesigner/qmldesignerplugin.pro
@@ -8,11 +8,13 @@ unix:!openbsd:!osx: LIBS += -lrt # posix shared memory
include(../../qtcreatorplugin.pri)
+include(qmldesignerplugin.pri)
include(designercore/designercore-lib.pri)
include(components/componentcore/componentcore.pri)
include(components/integration/integration.pri)
include(components/propertyeditor/propertyeditor.pri)
include(components/formeditor/formeditor.pri)
+include(components/texteditor/texteditor.pri)
include(components/itemlibrary/itemlibrary.pri)
include(components/navigator/navigator.pri)
include(components/stateseditor/stateseditor.pri)
@@ -20,7 +22,6 @@ include(components/resources/resources.pri)
include(components/debugview/debugview.pri)
include(components/importmanager/importmanager.pri)
include(qmldesignerextension/qmldesignerextension.pri)
-include(qmldesignerplugin.pri)
BUILD_PUPPET_IN_CREATOR_BINPATH = $$(BUILD_PUPPET_IN_CREATOR_BINPATH)
diff --git a/src/plugins/qmldesigner/qmldesignerplugin.qbs b/src/plugins/qmldesigner/qmldesignerplugin.qbs
index e593a32b3d3..b10ad94aec5 100644
--- a/src/plugins/qmldesigner/qmldesignerplugin.qbs
+++ b/src/plugins/qmldesigner/qmldesignerplugin.qbs
@@ -397,6 +397,8 @@ Project {
"componentcore/selectioncontext.h",
"componentcore/qmldesignericonprovider.cpp",
"componentcore/qmldesignericonprovider.h",
+ "texteditor/texteditorview.cpp",
+ "texteditor/texteditorview.h",
"debugview/debugview.cpp",
"debugview/debugview.h",
"debugview/debugviewwidget.cpp",