SelectableTextEditorWidget: Handle display settings

Avoid code repetition inside UnifiedDiffEditorWidget
and SideDiffEditorWidget.

Connect to display settings changed signal and apply
all but 4 settings (which are not desired for diff editor).

Change-Id: If4ae7f7c55690dac04fd1a00f8822db666a9ce2b
Reviewed-by: David Schulz <david.schulz@qt.io>
This commit is contained in:
Jarek Kobus
2022-10-19 23:48:03 +02:00
parent 36d7dcb6b2
commit d0278ae295
5 changed files with 33 additions and 50 deletions

View File

@@ -2,12 +2,17 @@
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0+ OR GPL-3.0 WITH Qt-GPL-exception-1.0
#include "selectabletexteditorwidget.h"
#include <texteditor/displaysettings.h>
#include <texteditor/textdocument.h>
#include <texteditor/textdocumentlayout.h>
#include <texteditor/texteditorsettings.h>
#include <QPainter>
#include <QTextBlock>
using namespace TextEditor;
namespace DiffEditor {
namespace Internal {
@@ -16,6 +21,15 @@ SelectableTextEditorWidget::SelectableTextEditorWidget(Utils::Id id, QWidget *pa
{
setFrameStyle(QFrame::NoFrame);
setupFallBackEditor(id);
setReadOnly(true);
connect(TextEditorSettings::instance(), &TextEditorSettings::displaySettingsChanged,
this, &SelectableTextEditorWidget::setDisplaySettings);
SelectableTextEditorWidget::setDisplaySettings(TextEditorSettings::displaySettings());
setCodeStyle(TextEditorSettings::codeStyle());
setCodeFoldingSupported(true);
}
SelectableTextEditorWidget::~SelectableTextEditorWidget() = default;
@@ -25,6 +39,16 @@ void SelectableTextEditorWidget::setSelections(const DiffSelections &selections)
m_diffSelections = selections;
}
void SelectableTextEditorWidget::setDisplaySettings(const DisplaySettings &displaySettings)
{
DisplaySettings settings = displaySettings;
settings.m_textWrapping = false;
settings.m_displayLineNumbers = true;
settings.m_markTextChanges = false;
settings.m_highlightBlocks = false;
TextEditorWidget::setDisplaySettings(settings);
}
static QList<DiffSelection> subtractSelection(
const DiffSelection &minuendSelection,
const DiffSelection &subtrahendSelection)
@@ -84,7 +108,7 @@ DiffSelections SelectableTextEditorWidget::polishedSelections(const DiffSelectio
void SelectableTextEditorWidget::setFoldingIndent(const QTextBlock &block, int indent)
{
if (TextEditor::TextBlockUserData *userData = TextEditor::TextDocumentLayout::userData(block))
if (TextBlockUserData *userData = TextDocumentLayout::userData(block))
userData->setFoldingIndent(indent);
}

View File

@@ -5,6 +5,8 @@
#include <texteditor/texteditor.h>
namespace TextEditor { class DisplaySettings; }
namespace DiffEditor {
namespace Internal {
@@ -29,6 +31,8 @@ public:
~SelectableTextEditorWidget() override;
void setSelections(const DiffSelections &selections);
void setDisplaySettings(const TextEditor::DisplaySettings &displaySettings) override;
static DiffSelections polishedSelections(const DiffSelections &selections);
static void setFoldingIndent(const QTextBlock &block, int indent);

View File

@@ -55,7 +55,7 @@ public:
void setFolded(int blockNumber, bool folded);
void setDisplaySettings(const DisplaySettings &ds) override;
void setDisplaySettings(const DisplaySettings &displaySettings) override;
SideDiffData diffData() const { return m_data; }
void setDiffData(const SideDiffData &data) { m_data = data; }
@@ -119,13 +119,6 @@ private:
SideDiffEditorWidget::SideDiffEditorWidget(QWidget *parent)
: SelectableTextEditorWidget("DiffEditor.SideDiffEditor", parent)
{
DisplaySettings settings = displaySettings();
settings.m_textWrapping = false;
settings.m_displayLineNumbers = true;
settings.m_markTextChanges = false;
settings.m_highlightBlocks = false;
SelectableTextEditorWidget::setDisplaySettings(settings);
connect(this, &TextEditorWidget::tooltipRequested, this, [this](const QPoint &point, int position) {
const int block = document()->findBlock(position).blockNumber();
const auto it = m_data.m_fileInfo.constFind(block);
@@ -139,7 +132,6 @@ SideDiffEditorWidget::SideDiffEditorWidget(QWidget *parent)
if (documentLayout)
connect(documentLayout, &TextDocumentLayout::foldChanged,
this, &SideDiffEditorWidget::foldChanged);
setCodeFoldingSupported(true);
setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOn);
}
@@ -176,14 +168,9 @@ void SideDiffEditorWidget::setFolded(int blockNumber, bool folded)
documentLayout->emitDocumentSizeChanged();
}
void SideDiffEditorWidget::setDisplaySettings(const DisplaySettings &ds)
void SideDiffEditorWidget::setDisplaySettings(const DisplaySettings &displaySettings)
{
DisplaySettings settings = displaySettings();
settings.m_visualizeWhitespace = ds.m_visualizeWhitespace;
settings.m_displayFoldingMarkers = ds.m_displayFoldingMarkers;
settings.m_scrollBarHighlights = ds.m_scrollBarHighlights;
settings.m_highlightCurrentLine = ds.m_highlightCurrentLine;
SelectableTextEditorWidget::setDisplaySettings(settings);
SelectableTextEditorWidget::setDisplaySettings(displaySettings);
emit gotDisplaySettings();
}
@@ -714,8 +701,6 @@ SideBySideDiffEditorWidget::SideBySideDiffEditorWidget(QWidget *parent)
{
auto setupEditor = [this](DiffSide side) {
m_editor[side] = new SideDiffEditorWidget(this);
m_editor[side]->setReadOnly(true);
m_editor[side]->setCodeStyle(TextEditorSettings::codeStyle());
connect(m_editor[side], &SideDiffEditorWidget::jumpToOriginalFileRequested,
this, std::bind(&SideBySideDiffEditorWidget::jumpToOriginalFileRequested, this,

View File

@@ -16,7 +16,6 @@
#include <coreplugin/icore.h>
#include <coreplugin/progressmanager/progressmanager.h>
#include <texteditor/displaysettings.h>
#include <texteditor/fontsettings.h>
#include <texteditor/textdocument.h>
#include <texteditor/textdocumentlayout.h>
@@ -37,20 +36,6 @@ UnifiedDiffEditorWidget::UnifiedDiffEditorWidget(QWidget *parent)
: SelectableTextEditorWidget("DiffEditor.UnifiedDiffEditor", parent)
, m_controller(this)
{
setReadOnly(true);
DisplaySettings settings = displaySettings();
settings.m_textWrapping = false;
settings.m_displayLineNumbers = true;
settings.m_markTextChanges = false;
settings.m_highlightBlocks = false;
SelectableTextEditorWidget::setDisplaySettings(settings);
connect(TextEditorSettings::instance(), &TextEditorSettings::displaySettingsChanged,
this, &UnifiedDiffEditorWidget::setDisplaySettings);
setDisplaySettings(TextEditorSettings::displaySettings());
setCodeStyle(TextEditorSettings::codeStyle());
connect(TextEditorSettings::instance(), &TextEditorSettings::fontSettingsChanged,
this, &UnifiedDiffEditorWidget::setFontSettings);
setFontSettings(TextEditorSettings::fontSettings());
@@ -64,7 +49,6 @@ UnifiedDiffEditorWidget::UnifiedDiffEditorWidget(QWidget *parent)
context->setWidget(this);
context->setContext(Core::Context(Constants::UNIFIED_VIEW_ID));
Core::ICore::addContextObject(context);
setCodeFoldingSupported(true);
}
UnifiedDiffEditorWidget::~UnifiedDiffEditorWidget()
@@ -105,16 +89,6 @@ void UnifiedDiffEditorWidget::restoreState()
m_state.clear();
}
void UnifiedDiffEditorWidget::setDisplaySettings(const DisplaySettings &ds)
{
DisplaySettings settings = displaySettings();
settings.m_visualizeWhitespace = ds.m_visualizeWhitespace;
settings.m_displayFoldingMarkers = ds.m_displayFoldingMarkers;
settings.m_scrollBarHighlights = ds.m_scrollBarHighlights;
settings.m_highlightCurrentLine = ds.m_highlightCurrentLine;
SelectableTextEditorWidget::setDisplaySettings(settings);
}
void UnifiedDiffEditorWidget::setFontSettings(const FontSettings &fontSettings)
{
m_controller.setFontSettings(fontSettings);

View File

@@ -10,10 +10,7 @@
namespace Core { class IContext; }
namespace TextEditor {
class DisplaySettings;
class FontSettings;
}
namespace TextEditor { class FontSettings; }
namespace DiffEditor {
@@ -80,7 +77,6 @@ public:
void restoreState();
void clear(const QString &message = {});
void setDisplaySettings(const TextEditor::DisplaySettings &ds) override;
signals:
void currentDiffFileIndexChanged(int index);