Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 2 additions & 1 deletion src/core/core/settings.json
Original file line number Diff line number Diff line change
Expand Up @@ -63,7 +63,8 @@
"tab": {
"insertSpaces": true,
"tabSize": 4
}
},
"encoding": "utf8"
},
"toggle_section": {
"tag": "KDAB_TEMPORARILY_REMOVED",
Expand Down
15 changes: 11 additions & 4 deletions src/core/knutcore.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,13 @@ KnutCore::KnutCore(QObject *parent)
initialize(Settings::Mode::Test);
}

KnutCore::~KnutCore()
{
delete m_scriptManager;
delete m_project;
delete m_settings;
}

KnutCore::KnutCore(InternalTag, QObject *parent)
: QObject(parent)
{
Expand Down Expand Up @@ -188,10 +195,10 @@ void KnutCore::initialize(Settings::Mode mode)
// If creating a KnutCore and then processing command line arguments
if (m_initialized)
return;
new Settings(mode, this);
new Project(this);
new ScriptManager(this);
if (Core::Settings::instance()->value<bool>(Core::Settings::SaveLogsToFile))
m_settings = new Settings(mode, this);
m_project = new Project(this);
m_scriptManager = new ScriptManager(this);
if (DEFAULT_VALUE(bool, SaveLogsToFile))
initializeMultiSinkLogger();
// auto flush when "info" or higher message is logged.
spdlog::flush_on(spdlog::level::info);
Expand Down
9 changes: 9 additions & 0 deletions src/core/knutcore.h
Original file line number Diff line number Diff line change
Expand Up @@ -17,12 +17,17 @@

namespace Core {

class Settings;
class Project;
class ScriptManager;

class KnutCore : public QObject
{
Q_OBJECT

public:
explicit KnutCore(QObject *parent = nullptr);
~KnutCore() override;

bool process(const QStringList &arguments);

Expand All @@ -41,6 +46,10 @@ class KnutCore : public QObject
void initializeMultiSinkLogger();

bool m_initialized = false;

Settings *m_settings = nullptr;
Project *m_project = nullptr;
ScriptManager *m_scriptManager = nullptr;
};

} // namespace Core
2 changes: 1 addition & 1 deletion src/core/logger.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -105,7 +105,7 @@ void HistoryModel::clear()

QString HistoryModel::createScript(int start, int end)
{
const auto settings = Core::Settings::instance()->value<Core::TabSettings>(Core::Settings::Tab);
const auto settings = DEFAULT_VALUE(Core::TabSettings, Tab);
const auto tab = settings.insertSpaces ? QString(settings.tabSize, ' ') : QString('\t');

std::tie(start, end) = std::minmax(start, end);
Expand Down
2 changes: 2 additions & 0 deletions src/core/rcdocument.h
Original file line number Diff line number Diff line change
Expand Up @@ -57,6 +57,8 @@ class RcDocument : public Document

static inline constexpr char DefaultLanguage[] = "[default]";

using LanguageMap = std::map<std::string, std::string>;

public:
explicit RcDocument(QObject *parent = nullptr);

Expand Down
1 change: 1 addition & 0 deletions src/core/settings.h
Original file line number Diff line number Diff line change
Expand Up @@ -53,6 +53,7 @@ class Settings : public QObject
static inline constexpr char SaveLogsToFile[] = "/logs/saveToFile";
static inline constexpr char ScriptPaths[] = "/script_paths";
static inline constexpr char Tab[] = "/text_editor/tab";
static inline constexpr char Encoding[] = "/text_editor/encoding";
static inline constexpr char ToggleSection[] = "/toggle_section";

public:
Expand Down
8 changes: 5 additions & 3 deletions src/core/textdocument.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -255,6 +255,7 @@ bool TextDocument::doSave(const QString &fileName)
plainText.replace('\n', "\r\n");

QTextStream stream(&file);
stream.setEncoding(static_cast<QStringConverter::Encoding>(DEFAULT_VALUE(TextDocument::Encoding, Encoding)));
stream << plainText;
return true;
}
Expand All @@ -273,6 +274,7 @@ bool TextDocument::doLoad(const QString &fileName)
QByteArray data = file.readAll();
detectFormat(data);
QTextStream stream(data);
stream.setEncoding(static_cast<QStringConverter::Encoding>(DEFAULT_VALUE(TextDocument::Encoding, Encoding)));
const QString text = stream.readAll();

QSignalBlocker sb(m_document->document());
Expand Down Expand Up @@ -1559,7 +1561,7 @@ static int indentOneLine(QTextCursor &cursor, int tabCount, const TabSettings &s

static void indentBlocksInTextEdit(QPlainTextEdit *textEdit, int blockStart, int blockEnd, int tabCount, bool relative)
{
const auto settings = Core::Settings::instance()->value<Core::TabSettings>(Core::Settings::Tab);
const auto settings = DEFAULT_VALUE(Core::TabSettings, Tab);
QTextCursor cursor = textEdit->textCursor();

// Make sure we don't move the cursor outside the first line it started on.
Expand Down Expand Up @@ -1725,7 +1727,7 @@ int TextDocument::indentationAtPosition(int pos) const
LOG(LOG_ARG("position", pos));

const auto indentText = indentTextAtPosition(pos);
const auto settings = Core::Settings::instance()->value<Core::TabSettings>(Core::Settings::Tab);
const auto settings = DEFAULT_VALUE(Core::TabSettings, Tab);
return columnAt(indentText, indentText.size(), settings.tabSize) / settings.tabSize;
}

Expand All @@ -1741,7 +1743,7 @@ int TextDocument::indentationAtLine(int line /* = -1 */) const
LOG(LOG_ARG("line", line));

const auto indentText = indentTextAtLine(line);
const auto settings = Core::Settings::instance()->value<Core::TabSettings>(Core::Settings::Tab);
const auto settings = DEFAULT_VALUE(Core::TabSettings, Tab);
return columnAt(indentText, indentText.size(), settings.tabSize) / settings.tabSize;
}

Expand Down
25 changes: 25 additions & 0 deletions src/core/textdocument.h
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@
#include "document.h"
#include "mark.h"
#include "rangemark.h"
#include "utils/json.h"

#include <QPointer>
#include <QRegularExpressionMatch>
Expand Down Expand Up @@ -64,6 +65,19 @@ class TextDocument : public Document
Q_DECLARE_FLAGS(FindFlags, FindFlag)
Q_ENUM(FindFlag)

enum class Encoding {
Utf8 = QStringConverter::Utf8,
Utf16 = QStringConverter::Utf16,
Utf16BE = QStringConverter::Utf16BE,
Utf16LE = QStringConverter::Utf16LE,
Utf32 = QStringConverter::Utf32,
Utf32BE = QStringConverter::Utf32BE,
Utf32LE = QStringConverter::Utf32LE,
Latin1 = QStringConverter::Latin1,
System = QStringConverter::System,
};
Q_ENUM(Encoding)

explicit TextDocument(QObject *parent = nullptr);
~TextDocument() override;

Expand Down Expand Up @@ -240,6 +254,17 @@ public slots:
bool m_utf8Bom = false;
};

NLOHMANN_JSON_SERIALIZE_ENUM(TextDocument::Encoding,
{{TextDocument::Encoding::Utf8, "utf8"},
{TextDocument::Encoding::Utf16, "utf16"},
{TextDocument::Encoding::Utf16BE, "utf16be"},
{TextDocument::Encoding::Utf16LE, "utf16le"},
{TextDocument::Encoding::Utf32, "utf32"},
{TextDocument::Encoding::Utf32BE, "utf32be"},
{TextDocument::Encoding::Utf32LE, "utf32le"},
{TextDocument::Encoding::Latin1, "latin1"},
{TextDocument::Encoding::System, "system"}})

} // namespace Core

Q_DECLARE_OPERATORS_FOR_FLAGS(Core::TextDocument::FindFlags)
2 changes: 1 addition & 1 deletion src/gui/guisettings.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -314,7 +314,7 @@ GuiSettings::TextEditSettings GuiSettings::computeTextEditSettings() const
f.setPointSize(m_fontSize);

QFontMetrics fm(f);
const auto tabSettings = Core::Settings::instance()->value<Core::TabSettings>(Core::Settings::Tab);
const auto tabSettings = DEFAULT_VALUE(Core::TabSettings, Tab);
return {f, tabSettings.tabSize * fm.horizontalAdvance(' ')};
}

Expand Down
32 changes: 21 additions & 11 deletions src/gui/optionsdialog.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@
#include "core/rcdocument.h"
#include "core/scriptmanager.h"
#include "core/settings.h"
#include "core/textdocument.h"
#include "core/textdocument_p.h"
#include "ui_optionsdialog.h"

Expand Down Expand Up @@ -43,7 +44,7 @@ OptionsDialog::OptionsDialog(QWidget *parent)
connect(ui->listWidget, &QListWidget::currentItemChanged, this, &OptionsDialog::changePage);

initializeScriptPathSettings();
initializeScriptBehaviorSettings();
initializeTextSettings();
initializeRcSettings();
initializeSaveToLogFileSetting();
initializeEnableLSPSetting();
Expand All @@ -63,14 +64,14 @@ OptionsDialog::~OptionsDialog() = default;
void OptionsDialog::initializeSaveToLogFileSetting()
{
// Save Logs to file
ui->saveLogsToFile->setChecked(Core::Settings::instance()->value<bool>(Core::Settings::SaveLogsToFile));
ui->saveLogsToFile->setChecked(DEFAULT_VALUE(bool, SaveLogsToFile));
connect(ui->saveLogsToFile, &QCheckBox::toggled, this, &OptionsDialog::changeSaveLogsToFileSetting);
}

void OptionsDialog::initializeEnableLSPSetting()
{
// Enable LSP when running in Gui mode
ui->enableLSP->setChecked(Core::Settings::instance()->value<bool>(Core::Settings::EnableLSP));
ui->enableLSP->setChecked(DEFAULT_VALUE(bool, EnableLSP));
connect(ui->enableLSP, &QCheckBox::toggled, this, &OptionsDialog::changeEnableLSPSetting);
}

Expand Down Expand Up @@ -101,22 +102,33 @@ void OptionsDialog::initializeScriptPathSettings()
ui->scriptsList->setModel(Core::ScriptManager::model());
}

void OptionsDialog::initializeScriptBehaviorSettings()
void OptionsDialog::initializeTextSettings()
{
// Text editor settings
ui->tabSize->setValidator(new QIntValidator(ui->tabSize));
const auto settings = DEFAULT_VALUE(Core::TabSettings, Tab);
ui->insertSpacesCheck->setChecked(settings.insertSpaces);
ui->tabSize->setText(QString::number(settings.tabSize));

// Encoding combobox
const auto metaEnum = QMetaEnum::fromType<Core::TextDocument::Encoding>();
for (int i = 0; i < metaEnum.keyCount(); ++i) {
ui->encoding->addItem(QLatin1String(metaEnum.key(i)), metaEnum.value(i));
}
const auto encoding = DEFAULT_VALUE(Core::TextDocument::Encoding, Encoding);
ui->encoding->setCurrentIndex(ui->encoding->findData(QVariant::fromValue(encoding)));

auto changeTextEditorSettings = [this]() {
auto settings = DEFAULT_VALUE(Core::TabSettings, Tab);
settings.insertSpaces = ui->insertSpacesCheck->isChecked();
settings.tabSize = ui->tabSize->text().toInt();
Core::Settings::instance()->setValue(Core::Settings::Tab, settings);
SET_DEFAULT_VALUE(Tab, settings);
const auto encoding = ui->encoding->currentData().value<Core::TextDocument::Encoding>();
SET_DEFAULT_VALUE(Encoding, encoding);
};
connect(ui->insertSpacesCheck, &QCheckBox::toggled, this, changeTextEditorSettings);
connect(ui->tabSize, &QLineEdit::textEdited, this, changeTextEditorSettings);
connect(ui->encoding, &QComboBox::currentIndexChanged, this, changeTextEditorSettings);

// Toggle section settings
auto sectionSettings = DEFAULT_VALUE(Core::ToggleSectionSettings, ToggleSection);
Expand Down Expand Up @@ -191,8 +203,7 @@ void OptionsDialog::initializeRcSettings()
SET_DEFAULT_VALUE(RcDialogScaleY, value);
});

auto languageMap =
Core::Settings::instance()->value<std::map<std::string, std::string>>(Core::Settings::RcLanguageMap);
auto languageMap = DEFAULT_VALUE(Core::RcDocument::LanguageMap, RcLanguageMap);
for (const auto &[source, result] : languageMap) {
auto item = new QTreeWidgetItem(ui->languageMap);
item->setText(0, QString::fromStdString(source));
Expand Down Expand Up @@ -322,7 +333,7 @@ void OptionsDialog::changeToggleSectionSetting()
sectionSettings.tag = ui->tagEdit->text();
sectionSettings.debug = ui->debugEdit->text();
sectionSettings.return_values = returnValues;
Core::Settings::instance()->setValue(Core::Settings::ToggleSection, sectionSettings);
SET_DEFAULT_VALUE(ToggleSection, sectionSettings);
}

void OptionsDialog::changeAssetFlagsSetting()
Expand Down Expand Up @@ -363,8 +374,7 @@ void OptionsDialog::changeDialogFlagsSetting()

void OptionsDialog::changeLanguageMap()
{
auto oldLanguageMap =
Core::Settings::instance()->value<std::map<std::string, std::string>>(Core::Settings::RcLanguageMap);
auto oldLanguageMap = DEFAULT_VALUE(Core::RcDocument::LanguageMap, RcLanguageMap);
std::map<std::string, std::string> languageMap;
for (int i = 0; i < ui->languageMap->topLevelItemCount(); ++i) {
auto item = ui->languageMap->topLevelItem(i);
Expand All @@ -374,7 +384,7 @@ void OptionsDialog::changeLanguageMap()
item->text(1).isEmpty() ? Core::RcDocument::DefaultLanguage : item->text(1).toStdString();
languageMap[item->text(0).toStdString()] = result;
}
Core::Settings::instance()->setValue(Core::Settings::RcLanguageMap, languageMap);
SET_DEFAULT_VALUE(RcLanguageMap, languageMap);
}

void OptionsDialog::changePage()
Expand Down
2 changes: 1 addition & 1 deletion src/gui/optionsdialog.h
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,7 @@ class OptionsDialog : public QDialog
void initializeEnableLSPSetting();
void initializeSaveToLogFileSetting();
void initializeScriptPathSettings();
void initializeScriptBehaviorSettings();
void initializeTextSettings();
void initializeRcSettings();
void initializeCppSettings();

Expand Down
Loading
Loading