Add into settings default line ending for new files

Add option into the Qt Creator settings option to configure what line
ending will the newly create files have.

Change-Id: I0fa67a54c78524dc943c01acb925c1bac1e47cc1
Fixes: QTCREATORBUG-3590
Reviewed-by: André Hartmann <aha_1980@gmx.de>
Reviewed-by: David Schulz <david.schulz@qt.io>
This commit is contained in:
Marius Sincovici
2019-09-03 22:37:25 +02:00
parent c802a1b12a
commit 909c6800e6
10 changed files with 48 additions and 2 deletions

View File

@@ -215,7 +215,9 @@ TextFileFormat::ReadResult readTextFile(const QString &fileName, const QTextCode
return TextFileFormat::ReadMemoryAllocationError;
}
if (!data.isEmpty())
*format = TextFileFormat::detect(data);
if (!format->codec)
format->codec = defaultCodec ? defaultCodec : QTextCodec::codecForLocale();

View File

@@ -213,6 +213,7 @@ const char SETTINGS_ID_TOOLS[] = "D.ExternalTools";
const char SETTINGS_ID_MIMETYPES[] = "E.MimeTypes";
const char SETTINGS_DEFAULTTEXTENCODING[] = "General/DefaultFileEncoding";
const char SETTINGS_DEFAULT_LINE_TERMINATOR[] = "General/DefaultLineTerminator";
const char SETTINGS_THEME[] = "Core/CreatorTheme";
const char DEFAULT_THEME[] = "flat";

View File

@@ -3167,6 +3167,15 @@ QTextCodec *EditorManager::defaultTextCodec()
return QTextCodec::codecForLocale();
}
TextFileFormat::LineTerminationMode EditorManager::defaultLineEnding()
{
QSettings *settings = ICore::settings();
const int defaultLineTerminator = settings->value(Constants::SETTINGS_DEFAULT_LINE_TERMINATOR,
TextFileFormat::LineTerminationMode::NativeLineTerminator).toInt();
return static_cast<TextFileFormat::LineTerminationMode>(defaultLineTerminator);
}
void EditorManager::splitSideBySide()
{
EditorManagerPrivate::split(Qt::Horizontal);

View File

@@ -30,6 +30,8 @@
#include "documentmodel.h"
#include "utils/textfileformat.h"
#include <QList>
#include <QWidget>
@@ -154,6 +156,8 @@ public:
static QTextCodec *defaultTextCodec();
static Utils::TextFileFormat::LineTerminationMode defaultLineEnding();
static qint64 maxTextFileSize();
static void setWindowTitleAdditionHandler(WindowTitleHandler handler);

View File

@@ -162,6 +162,7 @@ bool GeneratedFile::write(QString *errorMessage) const
Utils::TextFileFormat format;
format.codec = EditorManager::defaultTextCodec();
format.lineTerminationMode = EditorManager::defaultLineEnding();
return format.writeFile(m_d->path, contents(), errorMessage);
}

View File

@@ -59,6 +59,7 @@ BaseTextDocument::BaseTextDocument(QObject *parent) :
IDocument(parent), d(new Internal::TextDocumentPrivate)
{
setCodec(Core::EditorManager::defaultTextCodec());
setLineTerminationMode(Core::EditorManager::defaultLineEnding());
}
BaseTextDocument::~BaseTextDocument()

View File

@@ -196,6 +196,8 @@ void BehaviorSettingsPage::apply()
if (s) {
s->setValue(QLatin1String(Core::Constants::SETTINGS_DEFAULTTEXTENCODING),
d->m_page->behaviorWidget->assignedCodecName());
s->setValue(QLatin1String(Core::Constants::SETTINGS_DEFAULT_LINE_TERMINATOR),
d->m_page->behaviorWidget->assignedLineEnding());
}
}
@@ -217,6 +219,7 @@ void BehaviorSettingsPage::settingsToUI()
d->m_page->behaviorWidget->setAssignedBehaviorSettings(d->m_behaviorSettings);
d->m_page->behaviorWidget->setAssignedExtraEncodingSettings(d->m_extraEncodingSettings);
d->m_page->behaviorWidget->setAssignedCodec(Core::EditorManager::defaultTextCodec());
d->m_page->behaviorWidget->setAssignedLineEnding(Core::EditorManager::defaultLineEnding());
}
void BehaviorSettingsPage::finish()

View File

@@ -84,6 +84,8 @@ BehaviorSettingsWidget::BehaviorSettingsWidget(QWidget *parent)
d->m_codecs.prepend(QTextCodec::codecForLocale());
}
d->m_ui.defaultLineEndings->addItems(ExtraEncodingSettings::lineTerminationModeNames());
auto currentIndexChanged = QOverload<int>::of(&QComboBox::currentIndexChanged);
connect(d->m_ui.autoIndent, &QAbstractButton::toggled,
this, &BehaviorSettingsWidget::slotTypingSettingsChanged);
@@ -245,6 +247,16 @@ void BehaviorSettingsWidget::assignedExtraEncodingSettings(
(ExtraEncodingSettings::Utf8BomSetting)d->m_ui.utf8BomBox->currentIndex();
}
void BehaviorSettingsWidget::setAssignedLineEnding(int lineEnding)
{
d->m_ui.defaultLineEndings->setCurrentIndex(lineEnding);
}
int BehaviorSettingsWidget::assignedLineEnding() const
{
return d->m_ui.defaultLineEndings->currentIndex();
}
TabSettingsWidget *BehaviorSettingsWidget::tabSettingsWidget() const
{
return d->m_ui.tabPreferencesWidget->tabSettingsWidget();

View File

@@ -71,6 +71,9 @@ public:
void setAssignedExtraEncodingSettings(const ExtraEncodingSettings &encodingSettings);
void assignedExtraEncodingSettings(ExtraEncodingSettings *encodingSettings) const;
void setAssignedLineEnding(int lineEnding);
int assignedLineEnding() const;
TabSettingsWidget *tabSettingsWidget() const;
signals:

View File

@@ -7,7 +7,7 @@
<x>0</x>
<y>0</y>
<width>801</width>
<height>480</height>
<height>547</height>
</rect>
</property>
<layout class="QHBoxLayout" name="horizontalLayout">
@@ -320,6 +320,16 @@ Specifies how backspace interacts with indentation.
</property>
</widget>
</item>
<item row="2" column="0">
<widget class="QLabel" name="defaultLineEndingsLabel">
<property name="text">
<string>Default line endings:</string>
</property>
</widget>
</item>
<item row="2" column="1">
<widget class="QComboBox" name="defaultLineEndings"/>
</item>
</layout>
</widget>
</item>