Mercurial > trustbridge
annotate ui/certificatetablemodel.cpp @ 502:e551de11d8b6
Properly handle the case that the file does not exist.
TRUNCATE makes create file fail if the file does not exist
but we need TRUNCATE in the case that the file already exists
author | Andre Heinecke <aheinecke@intevation.de> |
---|---|
date | Mon, 28 Apr 2014 09:18:07 +0000 |
parents | 5200b8e9b2ae |
children | 320a64d58e62 |
rev | line source |
---|---|
404 | 1 /* Copyright (C) 2014 by Bundesamt für Sicherheit in der Informationstechnik |
2 * Software engineering by Intevation GmbH | |
3 * | |
4 * This file is Free Software under the GNU GPL (v>=2) | |
5 * and comes with ABSOLUTELY NO WARRANTY! | |
6 * See LICENSE.txt for details. | |
7 */ | |
334
36be67070dcb
Added table model for certificates.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff
changeset
|
8 #include "certificatetablemodel.h" |
36be67070dcb
Added table model for certificates.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff
changeset
|
9 |
397
8752aae8aad8
Set DejaVu Sans Mono as font for fingerprint column.
Raimund Renkert <rrenkert@intevation.de>
parents:
396
diff
changeset
|
10 #include <QFont> |
8752aae8aad8
Set DejaVu Sans Mono as font for fingerprint column.
Raimund Renkert <rrenkert@intevation.de>
parents:
396
diff
changeset
|
11 |
334
36be67070dcb
Added table model for certificates.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff
changeset
|
12 CertificateTabelModel::CertificateTabelModel(QObject *parent) |
36be67070dcb
Added table model for certificates.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff
changeset
|
13 : QAbstractTableModel(parent) |
36be67070dcb
Added table model for certificates.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff
changeset
|
14 { |
342
fba80767fd7a
Fixed member variables in certificate table model.
Raimund Renkert <rrenkert@intevation.de>
parents:
334
diff
changeset
|
15 header.append(""); |
380
1220b741cd51
Add some more fields for a certificate
Andre Heinecke <andre.heinecke@intevation.de>
parents:
378
diff
changeset
|
16 header.append(tr("Subject CN")); |
1220b741cd51
Add some more fields for a certificate
Andre Heinecke <andre.heinecke@intevation.de>
parents:
378
diff
changeset
|
17 header.append(tr("Subject O")); |
1220b741cd51
Add some more fields for a certificate
Andre Heinecke <andre.heinecke@intevation.de>
parents:
378
diff
changeset
|
18 header.append(tr("Issuer CN")); |
1220b741cd51
Add some more fields for a certificate
Andre Heinecke <andre.heinecke@intevation.de>
parents:
378
diff
changeset
|
19 header.append(tr("Issuer O")); |
416
847fdfd33a22
Fixed wording in certificate table header.
Raimund Renkert <rrenkert@intevation.de>
parents:
404
diff
changeset
|
20 header.append(tr("Valid from")); |
847fdfd33a22
Fixed wording in certificate table header.
Raimund Renkert <rrenkert@intevation.de>
parents:
404
diff
changeset
|
21 header.append(tr("Valid to")); |
378
31079bd54036
Add fingerprint to certificate
Andre Heinecke <andre.heinecke@intevation.de>
parents:
376
diff
changeset
|
22 header.append(tr("SHA1 Fingerprint")); |
334
36be67070dcb
Added table model for certificates.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff
changeset
|
23 |
36be67070dcb
Added table model for certificates.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff
changeset
|
24 } |
36be67070dcb
Added table model for certificates.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff
changeset
|
25 |
358
9ba7b4b4c1de
Implemented the load from certificate file and set the edit state of certificates.
Raimund Renkert <rrenkert@intevation.de>
parents:
353
diff
changeset
|
26 void CertificateTabelModel::addCertificate(const Certificate& certificate, |
9ba7b4b4c1de
Implemented the load from certificate file and set the edit state of certificates.
Raimund Renkert <rrenkert@intevation.de>
parents:
353
diff
changeset
|
27 bool editable) |
334
36be67070dcb
Added table model for certificates.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff
changeset
|
28 { |
342
fba80767fd7a
Fixed member variables in certificate table model.
Raimund Renkert <rrenkert@intevation.de>
parents:
334
diff
changeset
|
29 beginInsertRows(QModelIndex(), rowCount(), rowCount()); |
463
5200b8e9b2ae
Rename tablemodel certificates and add accessors
Andre Heinecke <aheinecke@intevation.de>
parents:
416
diff
changeset
|
30 mCertificates.append(certificate); |
5200b8e9b2ae
Rename tablemodel certificates and add accessors
Andre Heinecke <aheinecke@intevation.de>
parents:
416
diff
changeset
|
31 mCertificates.last().setEditable(editable); |
342
fba80767fd7a
Fixed member variables in certificate table model.
Raimund Renkert <rrenkert@intevation.de>
parents:
334
diff
changeset
|
32 endInsertRows(); |
334
36be67070dcb
Added table model for certificates.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff
changeset
|
33 } |
36be67070dcb
Added table model for certificates.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff
changeset
|
34 |
376
9731d28b95af
Implemented 'remove certificate' in administrator app.
Raimund Renkert <rrenkert@intevation.de>
parents:
358
diff
changeset
|
35 bool CertificateTabelModel::removeRows(int row, int count, |
9731d28b95af
Implemented 'remove certificate' in administrator app.
Raimund Renkert <rrenkert@intevation.de>
parents:
358
diff
changeset
|
36 const QModelIndex &index) |
9731d28b95af
Implemented 'remove certificate' in administrator app.
Raimund Renkert <rrenkert@intevation.de>
parents:
358
diff
changeset
|
37 { |
9731d28b95af
Implemented 'remove certificate' in administrator app.
Raimund Renkert <rrenkert@intevation.de>
parents:
358
diff
changeset
|
38 beginRemoveRows(QModelIndex(), row, row + count - 1); |
463
5200b8e9b2ae
Rename tablemodel certificates and add accessors
Andre Heinecke <aheinecke@intevation.de>
parents:
416
diff
changeset
|
39 if ((row + count - 1) > mCertificates.size()) { |
376
9731d28b95af
Implemented 'remove certificate' in administrator app.
Raimund Renkert <rrenkert@intevation.de>
parents:
358
diff
changeset
|
40 return false; |
9731d28b95af
Implemented 'remove certificate' in administrator app.
Raimund Renkert <rrenkert@intevation.de>
parents:
358
diff
changeset
|
41 } |
9731d28b95af
Implemented 'remove certificate' in administrator app.
Raimund Renkert <rrenkert@intevation.de>
parents:
358
diff
changeset
|
42 for (int i = row + count - 1; i >= row; i--) { |
463
5200b8e9b2ae
Rename tablemodel certificates and add accessors
Andre Heinecke <aheinecke@intevation.de>
parents:
416
diff
changeset
|
43 mCertificates.removeAt(i); |
376
9731d28b95af
Implemented 'remove certificate' in administrator app.
Raimund Renkert <rrenkert@intevation.de>
parents:
358
diff
changeset
|
44 } |
9731d28b95af
Implemented 'remove certificate' in administrator app.
Raimund Renkert <rrenkert@intevation.de>
parents:
358
diff
changeset
|
45 endRemoveRows(); |
9731d28b95af
Implemented 'remove certificate' in administrator app.
Raimund Renkert <rrenkert@intevation.de>
parents:
358
diff
changeset
|
46 return true; |
9731d28b95af
Implemented 'remove certificate' in administrator app.
Raimund Renkert <rrenkert@intevation.de>
parents:
358
diff
changeset
|
47 } |
9731d28b95af
Implemented 'remove certificate' in administrator app.
Raimund Renkert <rrenkert@intevation.de>
parents:
358
diff
changeset
|
48 |
396
26651cc0cc47
Remove all certificates if a new list is loaded from file.
Raimund Renkert <rrenkert@intevation.de>
parents:
380
diff
changeset
|
49 bool CertificateTabelModel::removeAll() |
26651cc0cc47
Remove all certificates if a new list is loaded from file.
Raimund Renkert <rrenkert@intevation.de>
parents:
380
diff
changeset
|
50 { |
463
5200b8e9b2ae
Rename tablemodel certificates and add accessors
Andre Heinecke <aheinecke@intevation.de>
parents:
416
diff
changeset
|
51 return removeRows(0, mCertificates.size(), QModelIndex()); |
396
26651cc0cc47
Remove all certificates if a new list is loaded from file.
Raimund Renkert <rrenkert@intevation.de>
parents:
380
diff
changeset
|
52 } |
26651cc0cc47
Remove all certificates if a new list is loaded from file.
Raimund Renkert <rrenkert@intevation.de>
parents:
380
diff
changeset
|
53 |
334
36be67070dcb
Added table model for certificates.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff
changeset
|
54 QVariant CertificateTabelModel::data(const QModelIndex &index, |
36be67070dcb
Added table model for certificates.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff
changeset
|
55 int role) const |
36be67070dcb
Added table model for certificates.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff
changeset
|
56 { |
463
5200b8e9b2ae
Rename tablemodel certificates and add accessors
Andre Heinecke <aheinecke@intevation.de>
parents:
416
diff
changeset
|
57 if (index.row() > mCertificates.size() || index.row() < 0) { |
334
36be67070dcb
Added table model for certificates.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff
changeset
|
58 return QVariant(); |
36be67070dcb
Added table model for certificates.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff
changeset
|
59 } |
36be67070dcb
Added table model for certificates.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff
changeset
|
60 |
342
fba80767fd7a
Fixed member variables in certificate table model.
Raimund Renkert <rrenkert@intevation.de>
parents:
334
diff
changeset
|
61 if (role == Qt::DisplayRole) { |
463
5200b8e9b2ae
Rename tablemodel certificates and add accessors
Andre Heinecke <aheinecke@intevation.de>
parents:
416
diff
changeset
|
62 Certificate cert = mCertificates.at(index.row()); |
342
fba80767fd7a
Fixed member variables in certificate table model.
Raimund Renkert <rrenkert@intevation.de>
parents:
334
diff
changeset
|
63 QVariant ret; |
fba80767fd7a
Fixed member variables in certificate table model.
Raimund Renkert <rrenkert@intevation.de>
parents:
334
diff
changeset
|
64 switch(index.column()) { |
fba80767fd7a
Fixed member variables in certificate table model.
Raimund Renkert <rrenkert@intevation.de>
parents:
334
diff
changeset
|
65 case 0: ret = cert.isInstallCert(); break; |
fba80767fd7a
Fixed member variables in certificate table model.
Raimund Renkert <rrenkert@intevation.de>
parents:
334
diff
changeset
|
66 case 1: ret = cert.subjectCN(); break; |
380
1220b741cd51
Add some more fields for a certificate
Andre Heinecke <andre.heinecke@intevation.de>
parents:
378
diff
changeset
|
67 case 2: ret = cert.subjectO(); break; |
1220b741cd51
Add some more fields for a certificate
Andre Heinecke <andre.heinecke@intevation.de>
parents:
378
diff
changeset
|
68 case 3: ret = cert.issuerCN(); break; |
1220b741cd51
Add some more fields for a certificate
Andre Heinecke <andre.heinecke@intevation.de>
parents:
378
diff
changeset
|
69 case 4: ret = cert.issuerO(); break; |
1220b741cd51
Add some more fields for a certificate
Andre Heinecke <andre.heinecke@intevation.de>
parents:
378
diff
changeset
|
70 case 5: ret = cert.validFrom(); break; |
1220b741cd51
Add some more fields for a certificate
Andre Heinecke <andre.heinecke@intevation.de>
parents:
378
diff
changeset
|
71 case 6: ret = cert.validTo(); break; |
1220b741cd51
Add some more fields for a certificate
Andre Heinecke <andre.heinecke@intevation.de>
parents:
378
diff
changeset
|
72 case 7: ret = cert.fingerprint(); break; |
342
fba80767fd7a
Fixed member variables in certificate table model.
Raimund Renkert <rrenkert@intevation.de>
parents:
334
diff
changeset
|
73 default: ; |
fba80767fd7a
Fixed member variables in certificate table model.
Raimund Renkert <rrenkert@intevation.de>
parents:
334
diff
changeset
|
74 } |
fba80767fd7a
Fixed member variables in certificate table model.
Raimund Renkert <rrenkert@intevation.de>
parents:
334
diff
changeset
|
75 return ret; |
334
36be67070dcb
Added table model for certificates.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff
changeset
|
76 } |
358
9ba7b4b4c1de
Implemented the load from certificate file and set the edit state of certificates.
Raimund Renkert <rrenkert@intevation.de>
parents:
353
diff
changeset
|
77 if (role == Qt::UserRole) { |
463
5200b8e9b2ae
Rename tablemodel certificates and add accessors
Andre Heinecke <aheinecke@intevation.de>
parents:
416
diff
changeset
|
78 Certificate cert = mCertificates.at(index.row()); |
358
9ba7b4b4c1de
Implemented the load from certificate file and set the edit state of certificates.
Raimund Renkert <rrenkert@intevation.de>
parents:
353
diff
changeset
|
79 return cert.isEditable(); |
9ba7b4b4c1de
Implemented the load from certificate file and set the edit state of certificates.
Raimund Renkert <rrenkert@intevation.de>
parents:
353
diff
changeset
|
80 } |
397
8752aae8aad8
Set DejaVu Sans Mono as font for fingerprint column.
Raimund Renkert <rrenkert@intevation.de>
parents:
396
diff
changeset
|
81 if (role == Qt::FontRole && index.column() == 7) { |
8752aae8aad8
Set DejaVu Sans Mono as font for fingerprint column.
Raimund Renkert <rrenkert@intevation.de>
parents:
396
diff
changeset
|
82 QFont block("DejaVu Sans Mono"); |
8752aae8aad8
Set DejaVu Sans Mono as font for fingerprint column.
Raimund Renkert <rrenkert@intevation.de>
parents:
396
diff
changeset
|
83 return block; |
8752aae8aad8
Set DejaVu Sans Mono as font for fingerprint column.
Raimund Renkert <rrenkert@intevation.de>
parents:
396
diff
changeset
|
84 } |
334
36be67070dcb
Added table model for certificates.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff
changeset
|
85 |
36be67070dcb
Added table model for certificates.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff
changeset
|
86 return QVariant(); |
36be67070dcb
Added table model for certificates.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff
changeset
|
87 } |
36be67070dcb
Added table model for certificates.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff
changeset
|
88 |
348
e6aa82466420
Use the table item delegate for certificates and make the model editable.
Raimund Renkert <rrenkert@intevation.de>
parents:
342
diff
changeset
|
89 bool CertificateTabelModel::setData(const QModelIndex &index, |
e6aa82466420
Use the table item delegate for certificates and make the model editable.
Raimund Renkert <rrenkert@intevation.de>
parents:
342
diff
changeset
|
90 const QVariant &value, int role) |
e6aa82466420
Use the table item delegate for certificates and make the model editable.
Raimund Renkert <rrenkert@intevation.de>
parents:
342
diff
changeset
|
91 { |
463
5200b8e9b2ae
Rename tablemodel certificates and add accessors
Andre Heinecke <aheinecke@intevation.de>
parents:
416
diff
changeset
|
92 if (index.row() > mCertificates.size() || index.row() < 0) { |
353
666abcfab229
Implemented setData in certificate table model.
Raimund Renkert <rrenkert@intevation.de>
parents:
348
diff
changeset
|
93 return false; |
666abcfab229
Implemented setData in certificate table model.
Raimund Renkert <rrenkert@intevation.de>
parents:
348
diff
changeset
|
94 } |
666abcfab229
Implemented setData in certificate table model.
Raimund Renkert <rrenkert@intevation.de>
parents:
348
diff
changeset
|
95 |
666abcfab229
Implemented setData in certificate table model.
Raimund Renkert <rrenkert@intevation.de>
parents:
348
diff
changeset
|
96 bool newValue = value.toBool(); |
463
5200b8e9b2ae
Rename tablemodel certificates and add accessors
Andre Heinecke <aheinecke@intevation.de>
parents:
416
diff
changeset
|
97 Certificate &cert = mCertificates[index.row()]; |
358
9ba7b4b4c1de
Implemented the load from certificate file and set the edit state of certificates.
Raimund Renkert <rrenkert@intevation.de>
parents:
353
diff
changeset
|
98 if (!cert.isEditable()) { |
9ba7b4b4c1de
Implemented the load from certificate file and set the edit state of certificates.
Raimund Renkert <rrenkert@intevation.de>
parents:
353
diff
changeset
|
99 return false; |
9ba7b4b4c1de
Implemented the load from certificate file and set the edit state of certificates.
Raimund Renkert <rrenkert@intevation.de>
parents:
353
diff
changeset
|
100 } |
353
666abcfab229
Implemented setData in certificate table model.
Raimund Renkert <rrenkert@intevation.de>
parents:
348
diff
changeset
|
101 cert.setInstallCert(newValue); |
666abcfab229
Implemented setData in certificate table model.
Raimund Renkert <rrenkert@intevation.de>
parents:
348
diff
changeset
|
102 |
666abcfab229
Implemented setData in certificate table model.
Raimund Renkert <rrenkert@intevation.de>
parents:
348
diff
changeset
|
103 emit dataChanged(index, index); |
666abcfab229
Implemented setData in certificate table model.
Raimund Renkert <rrenkert@intevation.de>
parents:
348
diff
changeset
|
104 |
348
e6aa82466420
Use the table item delegate for certificates and make the model editable.
Raimund Renkert <rrenkert@intevation.de>
parents:
342
diff
changeset
|
105 return true; |
e6aa82466420
Use the table item delegate for certificates and make the model editable.
Raimund Renkert <rrenkert@intevation.de>
parents:
342
diff
changeset
|
106 } |
e6aa82466420
Use the table item delegate for certificates and make the model editable.
Raimund Renkert <rrenkert@intevation.de>
parents:
342
diff
changeset
|
107 |
334
36be67070dcb
Added table model for certificates.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff
changeset
|
108 QVariant CertificateTabelModel::headerData(int section, |
36be67070dcb
Added table model for certificates.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff
changeset
|
109 Qt::Orientation orientation, int role) const |
36be67070dcb
Added table model for certificates.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff
changeset
|
110 { |
36be67070dcb
Added table model for certificates.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff
changeset
|
111 if (orientation == Qt::Horizontal && role == Qt::DisplayRole) { |
342
fba80767fd7a
Fixed member variables in certificate table model.
Raimund Renkert <rrenkert@intevation.de>
parents:
334
diff
changeset
|
112 return header.at(section); |
334
36be67070dcb
Added table model for certificates.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff
changeset
|
113 } |
36be67070dcb
Added table model for certificates.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff
changeset
|
114 return QVariant(); |
36be67070dcb
Added table model for certificates.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff
changeset
|
115 } |
36be67070dcb
Added table model for certificates.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff
changeset
|
116 |
36be67070dcb
Added table model for certificates.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff
changeset
|
117 int CertificateTabelModel::rowCount(const QModelIndex&) const |
36be67070dcb
Added table model for certificates.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff
changeset
|
118 { |
463
5200b8e9b2ae
Rename tablemodel certificates and add accessors
Andre Heinecke <aheinecke@intevation.de>
parents:
416
diff
changeset
|
119 return mCertificates.size(); |
334
36be67070dcb
Added table model for certificates.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff
changeset
|
120 } |
36be67070dcb
Added table model for certificates.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff
changeset
|
121 |
36be67070dcb
Added table model for certificates.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff
changeset
|
122 int CertificateTabelModel::columnCount(const QModelIndex&) const |
36be67070dcb
Added table model for certificates.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff
changeset
|
123 { |
342
fba80767fd7a
Fixed member variables in certificate table model.
Raimund Renkert <rrenkert@intevation.de>
parents:
334
diff
changeset
|
124 return header.size(); |
334
36be67070dcb
Added table model for certificates.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff
changeset
|
125 } |
36be67070dcb
Added table model for certificates.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff
changeset
|
126 |
348
e6aa82466420
Use the table item delegate for certificates and make the model editable.
Raimund Renkert <rrenkert@intevation.de>
parents:
342
diff
changeset
|
127 Qt::ItemFlags CertificateTabelModel::flags(const QModelIndex &index) const |
e6aa82466420
Use the table item delegate for certificates and make the model editable.
Raimund Renkert <rrenkert@intevation.de>
parents:
342
diff
changeset
|
128 { |
e6aa82466420
Use the table item delegate for certificates and make the model editable.
Raimund Renkert <rrenkert@intevation.de>
parents:
342
diff
changeset
|
129 if (!index.isValid ()) |
e6aa82466420
Use the table item delegate for certificates and make the model editable.
Raimund Renkert <rrenkert@intevation.de>
parents:
342
diff
changeset
|
130 return Qt::ItemIsSelectable; |
334
36be67070dcb
Added table model for certificates.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff
changeset
|
131 |
348
e6aa82466420
Use the table item delegate for certificates and make the model editable.
Raimund Renkert <rrenkert@intevation.de>
parents:
342
diff
changeset
|
132 if (index.column() == 0) { |
e6aa82466420
Use the table item delegate for certificates and make the model editable.
Raimund Renkert <rrenkert@intevation.de>
parents:
342
diff
changeset
|
133 return QAbstractTableModel::flags(index) | Qt::ItemIsEditable; |
e6aa82466420
Use the table item delegate for certificates and make the model editable.
Raimund Renkert <rrenkert@intevation.de>
parents:
342
diff
changeset
|
134 } |
e6aa82466420
Use the table item delegate for certificates and make the model editable.
Raimund Renkert <rrenkert@intevation.de>
parents:
342
diff
changeset
|
135 |
e6aa82466420
Use the table item delegate for certificates and make the model editable.
Raimund Renkert <rrenkert@intevation.de>
parents:
342
diff
changeset
|
136 return QAbstractTableModel::flags(index); |
e6aa82466420
Use the table item delegate for certificates and make the model editable.
Raimund Renkert <rrenkert@intevation.de>
parents:
342
diff
changeset
|
137 } |