1 #include "jira-settings-dialog.h"
7 extern Settings settings;
8 extern QString jiraPassword;
10 JiraSettingsDialog::JiraSettingsDialog(QWidget *parent) : QDialog(parent)
13 QDialog::setWindowTitle("VYM - " +
14 tr("Jira settings", "Jira settings dialog title"));
16 ui.tableWidget->setColumnCount(5);
18 settings.beginGroup("/atlassian/jira");
19 QTableWidgetItem *newItem;
27 ui.tableWidget->setHorizontalHeaderLabels(headers);
29 int size = settings.beginReadArray("servers");
30 for (int i = 0; i < size; ++i) {
31 settings.setArrayIndex(i);
32 ui.tableWidget->insertRow(0);
33 foreach (QString p, settings.value("pattern").toString().split(",")) {
35 newItem = new QTableWidgetItem(settings.value("name").toString());
36 ui.tableWidget->setItem(0, 0, newItem);
38 newItem = new QTableWidgetItem(settings.value("baseUrl").toString());
39 ui.tableWidget->setItem(0, 1, newItem);
41 newItem = new QTableWidgetItem(settings.value("pattern").toString());
42 ui.tableWidget->setItem(0, 2, newItem);
44 if (settings.value("authUsingPAT").toString() == "true")
45 newItem = new QTableWidgetItem("PAT");
47 newItem = new QTableWidgetItem("Username/Password");
48 ui.tableWidget->setItem(0, 3, newItem);
50 newItem = new QTableWidgetItem(settings.value("username","-").toString());
51 ui.tableWidget->setItem(0, 4, newItem);
55 ui.tableWidget->resizeColumnsToContents();
56 ui.tableWidget->horizontalHeader()->setStretchLastSection(true);
60 connect(ui.addServerButton, &QPushButton::clicked, this, &JiraSettingsDialog::addServer);
61 connect(ui.deleteServerButton, &QPushButton::clicked, this, &JiraSettingsDialog::deleteServer);
63 connect(ui.tableWidget->selectionModel(),
64 SIGNAL(selectionChanged(QItemSelection, QItemSelection)),
66 SLOT(selectionChanged(QItemSelection, QItemSelection)));
68 connect(ui.userLineEdit, SIGNAL(editingFinished()),
69 this, SLOT(fieldsChanged()));
70 connect(ui.passwordLineEdit, SIGNAL(editingFinished()),
71 this, SLOT(fieldsChanged()));
72 connect(ui.PATLineEdit, SIGNAL(editingFinished()),
73 this, SLOT(fieldsChanged()));
74 connect(ui.usePATCheckBox, SIGNAL(clicked()),
75 this, SLOT(fieldsChanged()));
76 connect(ui.tableWidget, SIGNAL(cellChanged(int, int)),
77 this, SLOT(fieldsChanged()));
79 updateAuthenticationFields();
82 void JiraSettingsDialog::addServer()
84 ui.tableWidget->insertRow(0);
87 void JiraSettingsDialog::deleteServer()
89 ui.tableWidget->removeRow(ui.tableWidget->currentRow());
92 void JiraSettingsDialog::updateAuthenticationFields()
94 QModelIndexList ixl = ui.tableWidget->selectionModel()->selectedIndexes();
97 if (ixl.isEmpty() || ixl.count() > 1)
100 row = ixl.first().row();
103 // No server selected, disable fields
104 ui.selectedServerLineEdit->setText("");
105 ui.usePATCheckBox->setEnabled(false);
106 ui.PATLineEdit->setEnabled(false);
107 ui.PATLabel->setEnabled(false);
108 ui.userLabel->setEnabled(false);
109 ui.userLineEdit->setEnabled(false);
110 ui.passwordLabel->setEnabled(false);
111 ui.passwordLineEdit->setEnabled(false);
113 // Empty unused fields
114 ui.userLineEdit->setText("");
115 ui.passwordLineEdit->setText("");
116 ui.PATLineEdit->setText("");
119 // Index of selected server in settings
120 int n_server = ui.tableWidget->rowCount() - row;
121 QString selectedServer = QString("/atlassian/jira/servers/%1/").arg(n_server);
124 if (ui.tableWidget->item(row, 0))
125 ui.selectedServerLineEdit->setText( ui.tableWidget->item(row, 0)->text());
127 ui.selectedServerLineEdit->setText("");
128 ui.usePATCheckBox->setEnabled(true);
129 ui.usePATCheckBox->setChecked(
130 settings.value(selectedServer + "authUsingPAT", true).toBool());
131 ui.PATLineEdit->setEnabled(true);
132 ui.PATLabel->setEnabled(true);
133 ui.userLabel->setEnabled(true);
134 ui.userLineEdit->setEnabled(true);
135 ui.passwordLabel->setEnabled(true);
136 ui.passwordLineEdit->setEnabled(true);
138 // Show and prefill fields depending on usage of PAT
139 if (ui.usePATCheckBox->isChecked()) {
140 ui.PATLineEdit->show();
141 ui.PATLineEdit->setText(
142 settings.value(selectedServer + "PAT","").toString());
143 settings.value(selectedServer + "PAT","").toString();
145 ui.userLabel->hide();
146 ui.userLineEdit->hide();
147 ui.passwordLabel->hide();
148 ui.passwordLineEdit->hide();
150 ui.PATLineEdit->hide();
152 ui.userLabel->show();
153 ui.userLineEdit->show();
154 ui.userLineEdit->setText(
155 settings.value(QString("/atlassian/jira/servers/%1/username").arg(n_server), "-").toString());
156 ui.passwordLabel->show();
157 ui.passwordLineEdit->show();
158 ui.passwordLineEdit->setText(
159 settings.value(QString("/atlassian/jira/servers/%1/password").arg(n_server), "").toString());
168 void JiraSettingsDialog::fieldsChanged()
170 int rowCount = ui.tableWidget->rowCount();
172 if (rowCount < 1) return;
174 QModelIndexList ixl = ui.tableWidget->selectionModel()->selectedIndexes();
176 if (ixl.isEmpty() || ixl.count() > 1) return;
178 int row = ixl.first().row();
179 int n_server = rowCount - 1 - row;
181 if (n_server < 0) return;
183 settings.beginGroup("/atlassian/jira");
184 settings.beginWriteArray("servers", rowCount);
185 settings.setArrayIndex(n_server);
187 if (ui.tableWidget->item(row, 0))
188 settings.setValue("name", ui.tableWidget->item(row, 0)->text());
190 settings.setValue("name", "");
191 if (ui.tableWidget->item(row, 1))
192 settings.setValue("baseUrl", ui.tableWidget->item(row, 1)->text());
194 settings.setValue("baseUrl", "");
195 if (ui.tableWidget->item(row, 2))
196 settings.setValue("pattern", ui.tableWidget->item(row, 2)->text());
198 settings.setValue("pattern", "");
199 settings.setValue("authUsingPAT", ui.usePATCheckBox->isChecked());
200 if (ui.usePATCheckBox->isChecked()) {
201 // Don't save password if PAT is used
202 settings.remove("password");
203 settings.setValue("PAT", ui.PATLineEdit->text());
205 settings.setValue("username", ui.userLineEdit->text());
206 settings.setValue("password", ui.passwordLineEdit->text());
207 settings.remove("PAT");
209 settings.setValue("servers/size", rowCount);
215 void JiraSettingsDialog::selectionChanged(const QItemSelection &selected, const QItemSelection &)
217 updateAuthenticationFields();