X-Git-Url: https://git.sven.stormbind.net/?a=blobdiff_plain;f=src%2Fjira-settings-dialog.cpp;fp=src%2Fjira-settings-dialog.cpp;h=adb6f401ad48cf6219a401aac36f72aad3a72896;hb=d483bd8e6523c23c6f1d8908a2e0611c2bc9ff4f;hp=0000000000000000000000000000000000000000;hpb=7dfa3fe589d1722d49681f42cdb0bf1e6efb5223;p=sven%2Fvym.git diff --git a/src/jira-settings-dialog.cpp b/src/jira-settings-dialog.cpp new file mode 100644 index 0000000..adb6f40 --- /dev/null +++ b/src/jira-settings-dialog.cpp @@ -0,0 +1,219 @@ +#include "jira-settings-dialog.h" + +#include + +#include "settings.h" + +extern Settings settings; +extern QString jiraPassword; + +JiraSettingsDialog::JiraSettingsDialog(QWidget *parent) : QDialog(parent) +{ + ui.setupUi(this); + QDialog::setWindowTitle("VYM - " + + tr("Jira settings", "Jira settings dialog title")); + + ui.tableWidget->setColumnCount(5); + + settings.beginGroup("/atlassian/jira"); + QTableWidgetItem *newItem; + + QStringList headers; + headers << "Name"; + headers << "URL"; + headers << "Pattern"; + headers << "Method"; + headers << "User"; + ui.tableWidget->setHorizontalHeaderLabels(headers); + + int size = settings.beginReadArray("servers"); + for (int i = 0; i < size; ++i) { + settings.setArrayIndex(i); + ui.tableWidget->insertRow(0); + foreach (QString p, settings.value("pattern").toString().split(",")) { + + newItem = new QTableWidgetItem(settings.value("name").toString()); + ui.tableWidget->setItem(0, 0, newItem); + + newItem = new QTableWidgetItem(settings.value("baseUrl").toString()); + ui.tableWidget->setItem(0, 1, newItem); + + newItem = new QTableWidgetItem(settings.value("pattern").toString()); + ui.tableWidget->setItem(0, 2, newItem); + + if (settings.value("authUsingPAT").toString() == "true") + newItem = new QTableWidgetItem("PAT"); + else + newItem = new QTableWidgetItem("Username/Password"); + ui.tableWidget->setItem(0, 3, newItem); + + newItem = new QTableWidgetItem(settings.value("username","-").toString()); + ui.tableWidget->setItem(0, 4, newItem); + } + } + settings.endArray(); + ui.tableWidget->resizeColumnsToContents(); + ui.tableWidget->horizontalHeader()->setStretchLastSection(true); + + settings.endGroup(); + + connect(ui.addServerButton, &QPushButton::clicked, this, &JiraSettingsDialog::addServer); + connect(ui.deleteServerButton, &QPushButton::clicked, this, &JiraSettingsDialog::deleteServer); + + connect(ui.tableWidget->selectionModel(), + SIGNAL(selectionChanged(QItemSelection, QItemSelection)), + this, + SLOT(selectionChanged(QItemSelection, QItemSelection))); + + connect(ui.userLineEdit, SIGNAL(editingFinished()), + this, SLOT(fieldsChanged())); + connect(ui.passwordLineEdit, SIGNAL(editingFinished()), + this, SLOT(fieldsChanged())); + connect(ui.PATLineEdit, SIGNAL(editingFinished()), + this, SLOT(fieldsChanged())); + connect(ui.usePATCheckBox, SIGNAL(clicked()), + this, SLOT(fieldsChanged())); + connect(ui.tableWidget, SIGNAL(cellChanged(int, int)), + this, SLOT(fieldsChanged())); + + updateAuthenticationFields(); +} + +void JiraSettingsDialog::addServer() +{ + ui.tableWidget->insertRow(0); +} + +void JiraSettingsDialog::deleteServer() +{ + ui.tableWidget->removeRow(ui.tableWidget->currentRow()); +} + +void JiraSettingsDialog::updateAuthenticationFields() +{ + QModelIndexList ixl = ui.tableWidget->selectionModel()->selectedIndexes(); + + int row; + if (ixl.isEmpty() || ixl.count() > 1) + row = -1; + else + row = ixl.first().row(); + + if (row < 0) { + // No server selected, disable fields + ui.selectedServerLineEdit->setText(""); + ui.usePATCheckBox->setEnabled(false); + ui.PATLineEdit->setEnabled(false); + ui.PATLabel->setEnabled(false); + ui.userLabel->setEnabled(false); + ui.userLineEdit->setEnabled(false); + ui.passwordLabel->setEnabled(false); + ui.passwordLineEdit->setEnabled(false); + + // Empty unused fields + ui.userLineEdit->setText(""); + ui.passwordLineEdit->setText(""); + ui.PATLineEdit->setText(""); + + } else { + // Index of selected server in settings + int n_server = ui.tableWidget->rowCount() - row; + QString selectedServer = QString("/atlassian/jira/servers/%1/").arg(n_server); + + // Enable fields + if (ui.tableWidget->item(row, 0)) + ui.selectedServerLineEdit->setText( ui.tableWidget->item(row, 0)->text()); + else + ui.selectedServerLineEdit->setText(""); + ui.usePATCheckBox->setEnabled(true); + ui.usePATCheckBox->setChecked( + settings.value(selectedServer + "authUsingPAT", true).toBool()); + ui.PATLineEdit->setEnabled(true); + ui.PATLabel->setEnabled(true); + ui.userLabel->setEnabled(true); + ui.userLineEdit->setEnabled(true); + ui.passwordLabel->setEnabled(true); + ui.passwordLineEdit->setEnabled(true); + + // Show and prefill fields depending on usage of PAT + if (ui.usePATCheckBox->isChecked()) { + ui.PATLineEdit->show(); + ui.PATLineEdit->setText( + settings.value(selectedServer + "PAT","").toString()); + settings.value(selectedServer + "PAT","").toString(); + ui.PATLabel->show(); + ui.userLabel->hide(); + ui.userLineEdit->hide(); + ui.passwordLabel->hide(); + ui.passwordLineEdit->hide(); + } else { + ui.PATLineEdit->hide(); + ui.PATLabel->hide(); + ui.userLabel->show(); + ui.userLineEdit->show(); + ui.userLineEdit->setText( + settings.value(QString("/atlassian/jira/servers/%1/username").arg(n_server), "-").toString()); + ui.passwordLabel->show(); + ui.passwordLineEdit->show(); + ui.passwordLineEdit->setText( + settings.value(QString("/atlassian/jira/servers/%1/password").arg(n_server), "").toString()); + } + } + + // Update layout + adjustSize(); +} + + +void JiraSettingsDialog::fieldsChanged() +{ + int rowCount = ui.tableWidget->rowCount(); + + if (rowCount < 1) return; + + QModelIndexList ixl = ui.tableWidget->selectionModel()->selectedIndexes(); + + if (ixl.isEmpty() || ixl.count() > 1) return; + + int row = ixl.first().row(); + int n_server = rowCount - 1 - row; + + if (n_server < 0) return; + + settings.beginGroup("/atlassian/jira"); + settings.beginWriteArray("servers", rowCount); + settings.setArrayIndex(n_server); + + if (ui.tableWidget->item(row, 0)) + settings.setValue("name", ui.tableWidget->item(row, 0)->text()); + else + settings.setValue("name", ""); + if (ui.tableWidget->item(row, 1)) + settings.setValue("baseUrl", ui.tableWidget->item(row, 1)->text()); + else + settings.setValue("baseUrl", ""); + if (ui.tableWidget->item(row, 2)) + settings.setValue("pattern", ui.tableWidget->item(row, 2)->text()); + else + settings.setValue("pattern", ""); + settings.setValue("authUsingPAT", ui.usePATCheckBox->isChecked()); + if (ui.usePATCheckBox->isChecked()) { + // Don't save password if PAT is used + settings.remove("password"); + settings.setValue("PAT", ui.PATLineEdit->text()); + } else { + settings.setValue("username", ui.userLineEdit->text()); + settings.setValue("password", ui.passwordLineEdit->text()); + settings.remove("PAT"); + } + settings.setValue("servers/size", rowCount); + + settings.endArray(); + settings.endGroup(); +} + +void JiraSettingsDialog::selectionChanged(const QItemSelection &selected, const QItemSelection &) +{ + updateAuthenticationFields(); +} +