diff options
Diffstat (limited to 'src/settingsdialog.cpp')
-rw-r--r-- | src/settingsdialog.cpp | 106 |
1 files changed, 106 insertions, 0 deletions
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 <QPushButton> +#include <QDialogButtonBox> + +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<AppSettingsTypes::Timezone>()); + + // Network tab + ui->connectToTheInternetCheckBox->setChecked(settings_interface.read_setting("net/access_internet").value<bool>()); + ui->DownloadCustomEmojiCheckBox->setChecked(settings_interface.read_setting("net/download_emoji").value<bool>()); + ui->downloadAttachmentsCheckBox->setChecked(settings_interface.read_setting("net/download_attachments").value<bool>()); + // Instance frame + ui->instanceTypeComboBox->setCurrentIndex(settings_interface.read_setting("net/instance/type").value<AppSettingsTypes::InstanceType>()); + ui->instanceAddressLineEdit->setText(settings_interface.read_setting("net/instance/address").value<QString>()); + ui->tokenLineEdit->setText(settings_interface.read_setting("net/instance/token").value<QString>()); + update_ui_in_progress = false; +} |