Skip to content

Commit fa3c5e9

Browse files
authored
Add default EOL setting (dail8859#694)
Closes dail8859#608
1 parent 43bac17 commit fa3c5e9

File tree

7 files changed

+257
-165
lines changed

7 files changed

+257
-165
lines changed

src/NotepadNext/ApplicationSettings.cpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -65,3 +65,4 @@ CREATE_SETTING(Editor, WordWrap, wordWrap, bool, false)
6565
CREATE_SETTING(Editor, FontName, fontName, QString, QStringLiteral("Courier New"))
6666
CREATE_SETTING(Editor, FontSize, fontSize, int, []() { return qApp->font().pointSize() + 2; })
6767
CREATE_SETTING(Editor, AdditionalWordChars, additionalWordChars, QString, QStringLiteral(""));
68+
CREATE_SETTING(Editor, DefaultEOLMode, defaultEOLMode, QString, QStringLiteral(""))

src/NotepadNext/ApplicationSettings.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -107,4 +107,5 @@ class ApplicationSettings : public QSettings
107107
DEFINE_SETTING(FontName, fontName, QString);
108108
DEFINE_SETTING(FontSize, fontSize, int);
109109
DEFINE_SETTING(AdditionalWordChars, additionalWordChars, QString);
110+
DEFINE_SETTING(DefaultEOLMode, defaultEOLMode, QString)
110111
};

src/NotepadNext/EditorManager.cpp

Lines changed: 16 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -266,8 +266,21 @@ void EditorManager::setupEditor(ScintillaNext *editor)
266266
editor->setIndentationGuides(settings->showIndentGuide() ? SC_IV_LOOKBOTH : SC_IV_NONE);
267267
editor->setWrapMode(settings->wordWrap() ? SC_WRAP_WORD : SC_WRAP_NONE);
268268

269-
// TODO: make this optional
270-
editor->setEOLMode(detectEOLMode(editor));
269+
int detectedEOLMode = detectEOLMode(editor);
270+
if (detectedEOLMode == -1) {
271+
if (!settings->defaultEOLMode().isEmpty()) {
272+
const int eol = ScintillaNext::stringToEolMode(settings->defaultEOLMode().toLower());
273+
274+
if (eol != -1)
275+
editor->setEOLMode(eol);
276+
else
277+
qWarning("Unexpected DefaultEOLMode: %s", qUtf8Printable(settings->defaultEOLMode()));
278+
}
279+
// else it will just stay whatever EOL mode it was when it was created
280+
}
281+
else {
282+
editor->setEOLMode(detectedEOLMode);
283+
}
271284

272285
// Decorators
273286
SmartHighlighter *s = new SmartHighlighter(editor);
@@ -366,6 +379,6 @@ int EditorManager::detectEOLMode(ScintillaNext *editor) const
366379
return SC_EOL_LF;
367380
}
368381
else {
369-
return editor->eOLMode();
382+
return -1;
370383
}
371384
}

src/NotepadNext/ScintillaNext.cpp

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -97,6 +97,30 @@ ScintillaNext *ScintillaNext::fromFile(const QString &filePath, bool tryToCreate
9797
return editor;
9898
}
9999

100+
QString ScintillaNext::eolModeToString(int eolMode)
101+
{
102+
if (eolMode == SC_EOL_CRLF)
103+
return QStringLiteral("crlf");
104+
else if (eolMode == SC_EOL_CR)
105+
return QStringLiteral("cr");
106+
else if (eolMode == SC_EOL_LF)
107+
return QStringLiteral("lf");
108+
else
109+
return QString(); // unknown
110+
}
111+
112+
int ScintillaNext::stringToEolMode(QString eolMode)
113+
{
114+
if (eolMode == QStringLiteral("crlf"))
115+
return SC_EOL_CRLF;
116+
else if (eolMode == QStringLiteral("cr"))
117+
return SC_EOL_CR;
118+
else if (eolMode == QStringLiteral("lf"))
119+
return SC_EOL_LF;
120+
else
121+
return -1;
122+
}
123+
100124
int ScintillaNext::allocateIndicator(const QString &name)
101125
{
102126
return indicatorResources.requestResource(name);

src/NotepadNext/ScintillaNext.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,8 @@ class ScintillaNext : public ScintillaEdit
4444
virtual ~ScintillaNext();
4545

4646
static ScintillaNext *fromFile(const QString &filePath, bool tryToCreate=false);
47+
static QString eolModeToString(int eolMode);
48+
static int stringToEolMode(QString eolMode);
4749

4850
int allocateIndicator(const QString &name);
4951

src/NotepadNext/dialogs/PreferencesDialog.cpp

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@
2121
#include "NotepadNextApplication.h"
2222
#include "TranslationManager.h"
2323
#include "ui_PreferencesDialog.h"
24+
#include "ScintillaNext.h"
2425

2526
#include <QMessageBox>
2627

@@ -78,6 +79,23 @@ PreferencesDialog::PreferencesDialog(ApplicationSettings *settings, QWidget *par
7879
ui->spbDefaultFontSize->setValue(settings->fontSize());
7980
connect(ui->spbDefaultFontSize, QOverload<int>::of(&QSpinBox::valueChanged), settings, &ApplicationSettings::setFontSize);
8081
connect(settings, &ApplicationSettings::fontSizeChanged, ui->spbDefaultFontSize, &QSpinBox::setValue);
82+
83+
ui->comboBoxLineEndings->addItem(tr("System Default"), QString(""));
84+
ui->comboBoxLineEndings->addItem(tr("Windows (CR LF)"), ScintillaNext::eolModeToString(SC_EOL_CRLF));
85+
ui->comboBoxLineEndings->addItem(tr("Linux (LF)"), ScintillaNext::eolModeToString(SC_EOL_LF));
86+
ui->comboBoxLineEndings->addItem(tr("Macintosh (CR)"), ScintillaNext::eolModeToString(SC_EOL_CR));
87+
88+
// Select the current one
89+
int index = ui->comboBoxLineEndings->findData(settings->defaultEOLMode());
90+
ui->comboBoxLineEndings->setCurrentIndex(index == -1 ? 0 : index);
91+
92+
connect(ui->comboBoxLineEndings, QOverload<int>::of(&QComboBox::currentIndexChanged), this, [=](int index) {
93+
settings->setDefaultEOLMode(ui->comboBoxLineEndings->itemData(index).toString());
94+
});
95+
connect(settings, &ApplicationSettings::defaultEOLModeChanged, this, [=](QString defaultEOLMode) {
96+
int index = ui->comboBoxLineEndings->findData(defaultEOLMode);
97+
ui->comboBoxLineEndings->setCurrentIndex(index == -1 ? 0 : index);
98+
});
8199
}
82100

83101
PreferencesDialog::~PreferencesDialog()

0 commit comments

Comments
 (0)