]> git.sven.stormbind.net Git - sven/vym.git/blob - src/jira-settings-dialog.cpp
New upstream version 2.9.22
[sven/vym.git] / src / jira-settings-dialog.cpp
1 #include "jira-settings-dialog.h"
2
3 #include <QDebug>
4
5 #include "settings.h"
6
7 extern Settings settings;
8 extern QString jiraPassword;
9
10 JiraSettingsDialog::JiraSettingsDialog(QWidget *parent) : QDialog(parent)
11 {
12     ui.setupUi(this);
13     QDialog::setWindowTitle("VYM - " +
14                             tr("Jira settings", "Jira settings dialog title"));
15
16     ui.tableWidget->setColumnCount(5);
17
18         settings.beginGroup("/atlassian/jira");
19         QTableWidgetItem *newItem;
20
21         QStringList headers;
22         headers << "Name";
23         headers << "URL";
24         headers << "Pattern";
25         headers << "Method";
26         headers << "User";
27         ui.tableWidget->setHorizontalHeaderLabels(headers);
28
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(",")) {
34
35                 newItem = new QTableWidgetItem(settings.value("name").toString());
36                 ui.tableWidget->setItem(0, 0, newItem);
37
38                 newItem = new QTableWidgetItem(settings.value("baseUrl").toString());
39                 ui.tableWidget->setItem(0, 1, newItem);
40
41                 newItem = new QTableWidgetItem(settings.value("pattern").toString());
42                 ui.tableWidget->setItem(0, 2, newItem);
43
44                 if (settings.value("authUsingPAT").toString() == "true")
45                     newItem = new QTableWidgetItem("PAT");
46                 else
47                     newItem = new QTableWidgetItem("Username/Password");
48                 ui.tableWidget->setItem(0, 3, newItem);
49
50                 newItem = new QTableWidgetItem(settings.value("username","-").toString());
51                 ui.tableWidget->setItem(0, 4, newItem);
52             }
53         }
54         settings.endArray();
55     ui.tableWidget->resizeColumnsToContents();
56     ui.tableWidget->horizontalHeader()->setStretchLastSection(true);
57
58     settings.endGroup();
59
60     connect(ui.addServerButton, &QPushButton::clicked, this, &JiraSettingsDialog::addServer);
61     connect(ui.deleteServerButton, &QPushButton::clicked, this, &JiraSettingsDialog::deleteServer);
62
63     connect(ui.tableWidget->selectionModel(),
64             SIGNAL(selectionChanged(QItemSelection, QItemSelection)),
65             this,
66             SLOT(selectionChanged(QItemSelection, QItemSelection)));
67
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()));
78
79     updateAuthenticationFields();
80 }
81
82 void JiraSettingsDialog::addServer()
83 {
84     ui.tableWidget->insertRow(0);
85 }
86
87 void JiraSettingsDialog::deleteServer()
88 {
89     ui.tableWidget->removeRow(ui.tableWidget->currentRow());
90 }
91
92 void JiraSettingsDialog::updateAuthenticationFields()
93 {
94     QModelIndexList ixl = ui.tableWidget->selectionModel()->selectedIndexes();
95
96     int row;
97     if (ixl.isEmpty() || ixl.count() > 1)
98         row = -1;
99     else
100         row = ixl.first().row();
101
102     if (row < 0) {
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);
112
113         // Empty unused fields
114         ui.userLineEdit->setText("");
115         ui.passwordLineEdit->setText("");
116         ui.PATLineEdit->setText("");
117
118     } else {
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);
122
123         // Enable fields
124         if (ui.tableWidget->item(row, 0))
125             ui.selectedServerLineEdit->setText( ui.tableWidget->item(row, 0)->text());
126         else
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);
137
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();
144             ui.PATLabel->show();
145             ui.userLabel->hide();
146             ui.userLineEdit->hide();
147             ui.passwordLabel->hide();
148             ui.passwordLineEdit->hide();
149         } else {
150             ui.PATLineEdit->hide();
151             ui.PATLabel->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());
160         }
161     }
162
163     // Update layout
164     adjustSize();
165 }
166
167
168 void JiraSettingsDialog::fieldsChanged()
169 {
170     int rowCount = ui.tableWidget->rowCount();
171
172     if (rowCount < 1) return;
173
174     QModelIndexList ixl = ui.tableWidget->selectionModel()->selectedIndexes();
175
176     if (ixl.isEmpty() || ixl.count() > 1) return;
177
178     int row = ixl.first().row();
179     int n_server = rowCount - 1 - row;
180
181     if (n_server < 0) return;
182
183     settings.beginGroup("/atlassian/jira");
184     settings.beginWriteArray("servers", rowCount);
185     settings.setArrayIndex(n_server);
186
187     if (ui.tableWidget->item(row, 0))
188         settings.setValue("name", ui.tableWidget->item(row, 0)->text());
189     else
190         settings.setValue("name", "");
191     if (ui.tableWidget->item(row, 1))
192         settings.setValue("baseUrl", ui.tableWidget->item(row, 1)->text());
193     else
194         settings.setValue("baseUrl", "");
195     if (ui.tableWidget->item(row, 2))
196         settings.setValue("pattern", ui.tableWidget->item(row, 2)->text());
197     else
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());
204     } else {
205         settings.setValue("username", ui.userLineEdit->text());
206         settings.setValue("password", ui.passwordLineEdit->text());
207         settings.remove("PAT");
208     }
209     settings.setValue("servers/size", rowCount);
210
211     settings.endArray();
212     settings.endGroup();
213 }
214
215 void JiraSettingsDialog::selectionChanged(const QItemSelection &selected, const QItemSelection &)
216 {
217     updateAuthenticationFields();
218 }
219