From ade98b4cf6630635e2fdbf84ac29fe83a79cc371 Mon Sep 17 00:00:00 2001 From: ConfuSomu Date: Tue, 15 Aug 2023 19:42:18 -0400 Subject: Implement settings dialog --- src/settingsdialog.cpp | 106 +++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 106 insertions(+) create mode 100644 src/settingsdialog.cpp (limited to 'src/settingsdialog.cpp') diff --git a/src/settingsdialog.cpp b/src/settingsdialog.cpp new file mode 100644 index 0000000..0c64641 --- /dev/null +++ b/src/settingsdialog.cpp @@ -0,0 +1,106 @@ +#include "settingsdialog.h" +#include "settings_interface.h" +#include +#include + +SettingsDialog::SettingsDialog(QWidget* parent) + : QDialog(parent, Qt::Dialog), ui(new Ui::SettingsDialog) +{ + ui->setupUi(this); + + // Create connections for each dialog button box button, as this is the best way to do it + connect(ui->buttonBox->button(QDialogButtonBox::RestoreDefaults), &QPushButton::clicked, this, &SettingsDialog::defaults_button_clicked); + connect(ui->buttonBox->button(QDialogButtonBox::Apply), &QPushButton::clicked, this, &SettingsDialog::apply_button_clicked); + connect(ui->buttonBox->button(QDialogButtonBox::Cancel), &QPushButton::clicked, this, &SettingsDialog::cancel_button_clicked); + + update_ui(); +} + +SettingsDialog::~SettingsDialog() { + delete ui; +} + +/* ----- General tab ----- */ + +void SettingsDialog::on_timezoneCombo_activated(int index) { + if (update_ui_in_progress) return; + settings_interface.write_setting("ui/timezone", index); +} + +/* ----- Network tab ----- */ + +void SettingsDialog::on_connectToTheInternetCheckBox_clicked(bool checked) { + if (update_ui_in_progress) return; + settings_interface.write_setting("net/access_internet", checked); +} + +void SettingsDialog::on_DownloadCustomEmojiCheckBox_clicked(bool checked) { + if (update_ui_in_progress) return; + settings_interface.write_setting("net/download_emoji", checked); +} + +void SettingsDialog::on_downloadAttachmentsCheckBox_clicked(bool checked) { + if (update_ui_in_progress) return; + settings_interface.write_setting("net/download_attachments", checked); +} + +void SettingsDialog::on_instanceTypeComboBox_activated(int index) { + if (update_ui_in_progress) return; + settings_interface.write_setting("net/instance/type", index); +} + +void SettingsDialog::on_instanceAddressLineEdit_editingFinished() { + if (update_ui_in_progress) return; + settings_interface.write_setting("net/instance/address", ui->instanceAddressLineEdit->text()); +} + +void SettingsDialog::on_tokenLineEdit_editingFinished() { + if (update_ui_in_progress) return; + settings_interface.write_setting("net/instance/token", ui->tokenLineEdit->text()); +} + +void SettingsDialog::on_instanceActionsLabel_linkActivated(const QString& link) { + if (link == "action:fill-address") { + update_ui_in_progress = true; + // TODO + update_ui_in_progress = false; + } else if (link == "action:request-token") { + // TODO + } +} + +/* ----- Dialog & setting saving/restoring ----- */ + +// OK button pressed, save and apply new settings +void SettingsDialog::apply_button_clicked() { + settings_interface.commit(); + emit QDialog::accept(); // Closes the dialog with return code +} + +// Cancel button pressed, discard new settings +void SettingsDialog::cancel_button_clicked() { + emit QDialog::reject(); // Closes the dialog with return code +} + +// Restore defaults button pressed, reset settings +void SettingsDialog::defaults_button_clicked() { + settings_interface.clear_all(); + update_ui(); +} + +// Update the UI's setting values with the values in settings_interface. +void SettingsDialog::update_ui() { + update_ui_in_progress = true; + // General tab + ui->timezoneCombo->setCurrentIndex(settings_interface.read_setting("ui/timezone").value()); + + // Network tab + ui->connectToTheInternetCheckBox->setChecked(settings_interface.read_setting("net/access_internet").value()); + ui->DownloadCustomEmojiCheckBox->setChecked(settings_interface.read_setting("net/download_emoji").value()); + ui->downloadAttachmentsCheckBox->setChecked(settings_interface.read_setting("net/download_attachments").value()); + // Instance frame + ui->instanceTypeComboBox->setCurrentIndex(settings_interface.read_setting("net/instance/type").value()); + ui->instanceAddressLineEdit->setText(settings_interface.read_setting("net/instance/address").value()); + ui->tokenLineEdit->setText(settings_interface.read_setting("net/instance/token").value()); + update_ui_in_progress = false; +} -- cgit v1.2.3-54-g00ecf