aboutsummaryrefslogtreecommitdiffstats
path: root/src/settingsdialog.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/settingsdialog.cpp')
-rw-r--r--src/settingsdialog.cpp106
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;
+}