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; return TextFileFormat::ReadMemoryAllocationError;
} }
*format = TextFileFormat::detect(data); if (!data.isEmpty())
*format = TextFileFormat::detect(data);
if (!format->codec) if (!format->codec)
format->codec = defaultCodec ? defaultCodec : QTextCodec::codecForLocale(); 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_ID_MIMETYPES[] = "E.MimeTypes";
const char SETTINGS_DEFAULTTEXTENCODING[] = "General/DefaultFileEncoding"; const char SETTINGS_DEFAULTTEXTENCODING[] = "General/DefaultFileEncoding";
const char SETTINGS_DEFAULT_LINE_TERMINATOR[] = "General/DefaultLineTerminator";
const char SETTINGS_THEME[] = "Core/CreatorTheme"; const char SETTINGS_THEME[] = "Core/CreatorTheme";
const char DEFAULT_THEME[] = "flat"; const char DEFAULT_THEME[] = "flat";

View File

@@ -3167,6 +3167,15 @@ QTextCodec *EditorManager::defaultTextCodec()
return QTextCodec::codecForLocale(); 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() void EditorManager::splitSideBySide()
{ {
EditorManagerPrivate::split(Qt::Horizontal); EditorManagerPrivate::split(Qt::Horizontal);

View File

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

View File

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

View File

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

View File

@@ -196,6 +196,8 @@ void BehaviorSettingsPage::apply()
if (s) { if (s) {
s->setValue(QLatin1String(Core::Constants::SETTINGS_DEFAULTTEXTENCODING), s->setValue(QLatin1String(Core::Constants::SETTINGS_DEFAULTTEXTENCODING),
d->m_page->behaviorWidget->assignedCodecName()); 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->setAssignedBehaviorSettings(d->m_behaviorSettings);
d->m_page->behaviorWidget->setAssignedExtraEncodingSettings(d->m_extraEncodingSettings); d->m_page->behaviorWidget->setAssignedExtraEncodingSettings(d->m_extraEncodingSettings);
d->m_page->behaviorWidget->setAssignedCodec(Core::EditorManager::defaultTextCodec()); d->m_page->behaviorWidget->setAssignedCodec(Core::EditorManager::defaultTextCodec());
d->m_page->behaviorWidget->setAssignedLineEnding(Core::EditorManager::defaultLineEnding());
} }
void BehaviorSettingsPage::finish() void BehaviorSettingsPage::finish()

View File

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

View File

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

View File

@@ -7,7 +7,7 @@
<x>0</x> <x>0</x>
<y>0</y> <y>0</y>
<width>801</width> <width>801</width>
<height>480</height> <height>547</height>
</rect> </rect>
</property> </property>
<layout class="QHBoxLayout" name="horizontalLayout"> <layout class="QHBoxLayout" name="horizontalLayout">
@@ -320,6 +320,16 @@ Specifies how backspace interacts with indentation.
</property> </property>
</widget> </widget>
</item> </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> </layout>
</widget> </widget>
</item> </item>