QmlDesigner: Auxiliary data auto-fold

- Made TextEditorWidget::restoreState() virtual
 - Added function to fold qml Auxiliary Data
 - Extended settings page to fit the new option

Task: QDS-1667
Change-Id: Id1256fcc72a67ac822888d5fd2e23d6076349573
Reviewed-by: Leena Miettinen <riitta-leena.miettinen@qt.io>
Reviewed-by: Thomas Hartmann <thomas.hartmann@qt.io>
This commit is contained in:
Aleksei German
2020-02-20 15:19:12 +01:00
parent 33b091bd40
commit 103a602f8d
6 changed files with 82 additions and 3 deletions

View File

@@ -36,6 +36,7 @@
#include "qmljsquickfixassist.h"
#include "qmloutlinemodel.h"
#include "quicktoolbar.h"
#include "qmljseditingsettingspage.h"
#include <qmljs/qmljsbind.h>
#include <qmljs/qmljsevaluate.h>
@@ -158,6 +159,24 @@ void QmlJSEditorWidget::finalizeInitialization()
createToolBar();
}
bool QmlJSEditorWidget::restoreState(const QByteArray &state)
{
QStringList qmlTypes { QmlJSTools::Constants::QML_MIMETYPE,
QmlJSTools::Constants::QBS_MIMETYPE,
QmlJSTools::Constants::QMLTYPES_MIMETYPE,
QmlJSTools::Constants::QMLUI_MIMETYPE };
if (QmlJsEditingSettings::get().foldAuxData() && qmlTypes.contains(textDocument()->mimeType())) {
int version = 0;
QDataStream stream(state);
stream >> version;
if (version < 1)
foldAuxiliaryData();
}
return TextEditorWidget::restoreState(state);
}
QModelIndex QmlJSEditorWidget::outlineModelIndex()
{
if (!m_outlineModelIndex.isValid()) {
@@ -217,6 +236,27 @@ void QmlJSEditorWidget::updateCodeWarnings(Document::Ptr doc)
}
}
void QmlJSEditorWidget::foldAuxiliaryData()
{
QTextDocument *doc = document();
auto documentLayout = qobject_cast<TextDocumentLayout*>(doc->documentLayout());
QTC_ASSERT(documentLayout, return);
QTextBlock block = doc->lastBlock();
while (block.isValid() && block.isVisible()) {
if (TextDocumentLayout::canFold(block) && block.next().isVisible()) {
const QString trimmedText = block.text().trimmed();
if (trimmedText.startsWith("/*##^##")) {
TextDocumentLayout::doFoldOrUnfold(block, false);
documentLayout->requestUpdate();
documentLayout->emitDocumentSizeChanged();
break;
}
}
block = block.previous();
}
}
void QmlJSEditorWidget::modificationChanged(bool changed)
{
if (!changed && m_modelManager)