From 1e909269663ac02bd9b50a1eca5e7df62eb144f5 Mon Sep 17 00:00:00 2001 From: David Schulz Date: Wed, 18 May 2016 09:20:08 +0200 Subject: [PATCH] Editor: Simplify FoldValidator::process. Change-Id: I9181c18ae5a36f5ab0027fb36cea21f4f2a5e99c Reviewed-by: Christian Stenger --- src/plugins/texteditor/textdocumentlayout.cpp | 43 ++++++++----------- 1 file changed, 18 insertions(+), 25 deletions(-) diff --git a/src/plugins/texteditor/textdocumentlayout.cpp b/src/plugins/texteditor/textdocumentlayout.cpp index f82d9c446d..f413b5c363 100644 --- a/src/plugins/texteditor/textdocumentlayout.cpp +++ b/src/plugins/texteditor/textdocumentlayout.cpp @@ -655,34 +655,27 @@ void TextDocumentLayout::FoldValidator::process(QTextBlock block) if (!previous.isValid()) return; - if ((TextDocumentLayout::isFolded(previous) - && !TextDocumentLayout::canFold(previous)) - || (!TextDocumentLayout::isFolded(previous) - && TextDocumentLayout::canFold(previous) - && previous.isVisible() - && !block.isVisible())) { - TextDocumentLayout::setFolded(previous, !TextDocumentLayout::isFolded(previous)); - } - - if (TextDocumentLayout::isFolded(previous) && !m_insideFold) - m_insideFold = TextDocumentLayout::foldingIndent(block); - - bool toggleVisibility = false; - if (m_insideFold) { - if (TextDocumentLayout::foldingIndent(block) >= m_insideFold) { - if (block.isVisible()) - toggleVisibility = true; - } else { + const bool preIsFolded = isFolded(previous); + const bool preCanFold = canFold(previous); + const bool isVisible = block.isVisible(); + + if (preIsFolded && !preCanFold) + setFolded(previous, false); + else if (!preIsFolded && preCanFold && previous.isVisible() && !isVisible) + setFolded(previous, true); + + if (isFolded(previous) && !m_insideFold) + m_insideFold = foldingIndent(block); + + bool shouldBeVisible = m_insideFold == 0; + if (!shouldBeVisible) { + shouldBeVisible = foldingIndent(block) < m_insideFold; + if (shouldBeVisible) m_insideFold = 0; - if (!block.isVisible()) - toggleVisibility = true; - } - } else if (!block.isVisible()) { - toggleVisibility = true; } - if (toggleVisibility) { - block.setVisible(!block.isVisible()); + if (shouldBeVisible != isVisible) { + block.setVisible(shouldBeVisible); block.setLineCount(block.isVisible() ? qMax(1, block.layout()->lineCount()) : 0); m_requestDocUpdate = true; } -- GitLab