forked from qt-creator/qt-creator
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:
@@ -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);
|
||||
}
|
||||
|
||||
|
@@ -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);
|
||||
|
||||
|
@@ -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,
|
||||
|
@@ -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);
|
||||
|
@@ -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);
|
||||
|
Reference in New Issue
Block a user