src/settingseditor/settingseditor.cpp

Sat, 05 Mar 2022 12:47:10 +0200

author
Teemu Piippo <teemu@hecknology.net>
date
Sat, 05 Mar 2022 12:47:10 +0200
changeset 159
1a04364d20b5
parent 48
3c10f0e2fbe0
child 202
b05af0bab735
permissions
-rw-r--r--

fix crash when loading a file
`object` is moved so we cannot access it after moving

#include <QSettings>
#include "gl/common.h"
#include "keyboardshortcutseditor.h"
#include "settingseditor.h"
#include "ui_settingseditor.h"

SettingsEditor::SettingsEditor(
	Configuration* settings,
	const uiutilities::KeySequenceMap& defaultKeyboardShortcuts,
	QWidget* parent
) :
	QDialog{parent},
	ui{*new Ui_SettingsEditor},
	settings{settings},
	libraries{settings, this},
	librariesEditor{settings, this},
	defaultKeyboardShortcuts{defaultKeyboardShortcuts}
{
	this->ui.setupUi(this);
	this->loadLocales();
	this->setDefaults();
	QVBoxLayout* layout = new QVBoxLayout{this};
	layout->addWidget(&librariesEditor);
	this->ui.tabLdrawLibraries->setLayout(layout);
	connect(
		this,
		&SettingsEditor::accepted,
		this,
		&SettingsEditor::handleAccepted);
	this->ui.keyboardShortcutsView->setModel(new KeyboardShortcutsEditor{parent, this});
}

SettingsEditor::~SettingsEditor()
{
	delete &this->ui;
}

void SettingsEditor::handleAccepted()
{
	this->settings->setLocale(this->ui.language->currentData().toString());
	this->settings->setMainColor(this->ui.mainColorButton->selectedColor());
	this->settings->setBackgroundColor(this->ui.backgroundColorButton->selectedColor());
	this->settings->setSelectedColor(this->ui.selectedColorButton->selectedColor());
	this->settings->setLineThickness(static_cast<GLfloat>(this->ui.lineThickness->value()));
	this->settings->setLineAntiAliasing(this->ui.lineAntiAliasing->isChecked());
	this->librariesEditor.saveSettings(this->settings);
}

void SettingsEditor::loadLocales()
{
	this->ui.language->clear();
	QDir dir{":/locale"};
	// Collect translation files in built-in resources
	QVector<QString> localeCodes = {"en"}; // English is the default locale
	for (const QFileInfo& file : dir.entryInfoList(QDir::Files))
	{
		localeCodes.append(file.baseName());
	}
	std::sort(localeCodes.begin(), localeCodes.end());
	this->ui.language->addItem(tr("System language"), "system");
	for (const QString& localeCode : localeCodes)
	{
		const QLocale locale{localeCode};
		const QString languageName = QLocale::languageToString(locale.language());
		const QIcon flag{":/flags/" + localeCode + ".png"};
		this->ui.language->addItem(languageName, localeCode);
		this->ui.language->setItemIcon(this->ui.language->count() - 1, flag);
	}
}

void SettingsEditor::setDefaults()
{
	this->setCurrentLanguage(this->settings->locale());
	this->ui.mainColorButton->setSelectedColor(this->settings->mainColor());
	this->ui.backgroundColorButton->setSelectedColor(this->settings->backgroundColor());
	this->ui.selectedColorButton->setSelectedColor(this->settings->selectedColor());
	this->ui.lineThickness->setValue(static_cast<double>(this->settings->lineThickness()));
	this->ui.lineAntiAliasing->setChecked(this->settings->lineAntiAliasing());
}

void SettingsEditor::setCurrentLanguage(const QString& localeCode)
{
	for (int i = 0; i < this->ui.language->count(); i += 1)
	{
		if (this->ui.language->itemData(i) == localeCode)
		{
			this->ui.language->setCurrentIndex(i);
			break;
		}
	}
}

mercurial