Mercurial > trustbridge
annotate ui/certificateitemwidget.cpp @ 1119:5349e2354c48
(issue54) Merge branch runafterinstall
There is now an NSIS Plugin that executes the Software after
installation using COM in the shell of the current user.
With the way over the shell there is no inheritance /
token management required. As it is impossible to
drop all privileges of a token granted by UAC and
still be able to reelevate the Token again with another
RunAs call later this round trip over the Shell was
necessary.
author | Andre Heinecke <andre.heinecke@intevation.de> |
---|---|
date | Tue, 16 Sep 2014 19:48:22 +0200 |
parents | 6594e8e63a25 |
children | ad4fc3649ffb |
rev | line source |
---|---|
582
88c9bdc74175
New widgets to display certificates in lists.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff
changeset
|
1 /* Copyright (C) 2014 by Bundesamt für Sicherheit in der Informationstechnik |
88c9bdc74175
New widgets to display certificates in lists.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff
changeset
|
2 * Software engineering by Intevation GmbH |
88c9bdc74175
New widgets to display certificates in lists.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff
changeset
|
3 * |
88c9bdc74175
New widgets to display certificates in lists.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff
changeset
|
4 * This file is Free Software under the GNU GPL (v>=2) |
88c9bdc74175
New widgets to display certificates in lists.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff
changeset
|
5 * and comes with ABSOLUTELY NO WARRANTY! |
88c9bdc74175
New widgets to display certificates in lists.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff
changeset
|
6 * See LICENSE.txt for details. |
88c9bdc74175
New widgets to display certificates in lists.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff
changeset
|
7 */ |
88c9bdc74175
New widgets to display certificates in lists.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff
changeset
|
8 #include "certificateitemwidget.h" |
88c9bdc74175
New widgets to display certificates in lists.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff
changeset
|
9 |
88c9bdc74175
New widgets to display certificates in lists.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff
changeset
|
10 #include <QHBoxLayout> |
88c9bdc74175
New widgets to display certificates in lists.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff
changeset
|
11 #include <QDebug> |
701
31c3d2bc9880
(Issue22) Fix painting problems with fixed size in windows style.
Andre Heinecke <andre.heinecke@intevation.de>
parents:
687
diff
changeset
|
12 #include <QStyleFactory> |
1106
6f7b7d88f048
(issue115) Rework CertificateListWidgets to have a ToolButton instead of a combobox
Andre Heinecke <andre.heinecke@intevation.de>
parents:
1101
diff
changeset
|
13 #include <QToolButton> |
582
88c9bdc74175
New widgets to display certificates in lists.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff
changeset
|
14 |
687
973a7ce19658
(issue24) Let the string for install / remove be set for each item individually
Andre Heinecke <andre.heinecke@intevation.de>
parents:
685
diff
changeset
|
15 CertificateItemWidget::CertificateItemWidget(QWidget *parent, |
973a7ce19658
(issue24) Let the string for install / remove be set for each item individually
Andre Heinecke <andre.heinecke@intevation.de>
parents:
685
diff
changeset
|
16 const Certificate &cert, |
973a7ce19658
(issue24) Let the string for install / remove be set for each item individually
Andre Heinecke <andre.heinecke@intevation.de>
parents:
685
diff
changeset
|
17 bool state, |
1106
6f7b7d88f048
(issue115) Rework CertificateListWidgets to have a ToolButton instead of a combobox
Andre Heinecke <andre.heinecke@intevation.de>
parents:
1101
diff
changeset
|
18 QToolButton *btn) : |
687
973a7ce19658
(issue24) Let the string for install / remove be set for each item individually
Andre Heinecke <andre.heinecke@intevation.de>
parents:
685
diff
changeset
|
19 QWidget(parent), |
1106
6f7b7d88f048
(issue115) Rework CertificateListWidgets to have a ToolButton instead of a combobox
Andre Heinecke <andre.heinecke@intevation.de>
parents:
1101
diff
changeset
|
20 mButton(btn) |
582
88c9bdc74175
New widgets to display certificates in lists.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff
changeset
|
21 { |
88c9bdc74175
New widgets to display certificates in lists.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff
changeset
|
22 mCertificate = cert; |
1109
6594e8e63a25
(issue115) Add tooltips and fix manual changes handling
Andre Heinecke <andre.heinecke@intevation.de>
parents:
1108
diff
changeset
|
23 mOriginalState = state; |
1106
6f7b7d88f048
(issue115) Rework CertificateListWidgets to have a ToolButton instead of a combobox
Andre Heinecke <andre.heinecke@intevation.de>
parents:
1101
diff
changeset
|
24 btn->setCheckable(true); |
1109
6594e8e63a25
(issue115) Add tooltips and fix manual changes handling
Andre Heinecke <andre.heinecke@intevation.de>
parents:
1108
diff
changeset
|
25 btn->setStyleSheet("QToolButton:Checked{" |
6594e8e63a25
(issue115) Add tooltips and fix manual changes handling
Andre Heinecke <andre.heinecke@intevation.de>
parents:
1108
diff
changeset
|
26 "border: 1px solid #8f8f91;" |
6594e8e63a25
(issue115) Add tooltips and fix manual changes handling
Andre Heinecke <andre.heinecke@intevation.de>
parents:
1108
diff
changeset
|
27 "background-color: qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1," |
6594e8e63a25
(issue115) Add tooltips and fix manual changes handling
Andre Heinecke <andre.heinecke@intevation.de>
parents:
1108
diff
changeset
|
28 "stop: 0 #f6f7fa, stop: 1 #dadbde);" |
6594e8e63a25
(issue115) Add tooltips and fix manual changes handling
Andre Heinecke <andre.heinecke@intevation.de>
parents:
1108
diff
changeset
|
29 "}" |
6594e8e63a25
(issue115) Add tooltips and fix manual changes handling
Andre Heinecke <andre.heinecke@intevation.de>
parents:
1108
diff
changeset
|
30 ); |
6594e8e63a25
(issue115) Add tooltips and fix manual changes handling
Andre Heinecke <andre.heinecke@intevation.de>
parents:
1108
diff
changeset
|
31 setState(state); |
582
88c9bdc74175
New widgets to display certificates in lists.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff
changeset
|
32 setupGUI(); |
88c9bdc74175
New widgets to display certificates in lists.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff
changeset
|
33 } |
88c9bdc74175
New widgets to display certificates in lists.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff
changeset
|
34 |
88c9bdc74175
New widgets to display certificates in lists.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff
changeset
|
35 void CertificateItemWidget::setupGUI() |
88c9bdc74175
New widgets to display certificates in lists.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff
changeset
|
36 { |
743
a467204a35f5
Rework User Interface.
Andre Heinecke <andre.heinecke@intevation.de>
parents:
710
diff
changeset
|
37 mLabel = new QLabel; |
a467204a35f5
Rework User Interface.
Andre Heinecke <andre.heinecke@intevation.de>
parents:
710
diff
changeset
|
38 |
786
4eff77851e76
Use minimum size for certificates to avoid scaling in small lists.
Andre Heinecke <andre.heinecke@intevation.de>
parents:
780
diff
changeset
|
39 setSizePolicy(QSizePolicy::Preferred, QSizePolicy::Minimum); |
4eff77851e76
Use minimum size for certificates to avoid scaling in small lists.
Andre Heinecke <andre.heinecke@intevation.de>
parents:
780
diff
changeset
|
40 |
842
bd33c6585cd0
UI improvements (issue18, 60)
Emanuel Schuetze <emanuel@intevation.de>
parents:
839
diff
changeset
|
41 const QString validity = tr("Validity: %1 until %2").arg( |
743
a467204a35f5
Rework User Interface.
Andre Heinecke <andre.heinecke@intevation.de>
parents:
710
diff
changeset
|
42 QLocale::system().toString(mCertificate.validFrom().date(), QLocale::ShortFormat)).arg( |
a467204a35f5
Rework User Interface.
Andre Heinecke <andre.heinecke@intevation.de>
parents:
710
diff
changeset
|
43 QLocale::system().toString(mCertificate.validTo().date(), QLocale::ShortFormat)); |
842
bd33c6585cd0
UI improvements (issue18, 60)
Emanuel Schuetze <emanuel@intevation.de>
parents:
839
diff
changeset
|
44 const QString fpstring = tr("Fingerprint (SHA1): <code>%1</code>").arg(mCertificate.fingerprint()); |
bd33c6585cd0
UI improvements (issue18, 60)
Emanuel Schuetze <emanuel@intevation.de>
parents:
839
diff
changeset
|
45 mLabel->setText(QString::fromLatin1("<big><b>%1</b></big><br/>%2<br/>%3<br/>%4").arg |
743
a467204a35f5
Rework User Interface.
Andre Heinecke <andre.heinecke@intevation.de>
parents:
710
diff
changeset
|
46 (mCertificate.subjectCN()).arg(mCertificate.subjectO()).arg(validity).arg |
a467204a35f5
Rework User Interface.
Andre Heinecke <andre.heinecke@intevation.de>
parents:
710
diff
changeset
|
47 (fpstring)); |
a467204a35f5
Rework User Interface.
Andre Heinecke <andre.heinecke@intevation.de>
parents:
710
diff
changeset
|
48 mLabel->setTextFormat(Qt::RichText); |
701
31c3d2bc9880
(Issue22) Fix painting problems with fixed size in windows style.
Andre Heinecke <andre.heinecke@intevation.de>
parents:
687
diff
changeset
|
49 |
842
bd33c6585cd0
UI improvements (issue18, 60)
Emanuel Schuetze <emanuel@intevation.de>
parents:
839
diff
changeset
|
50 mLabel->setSizePolicy(QSizePolicy::Minimum, QSizePolicy::Minimum); |
780
9f13c00a2647
Make certificate text selectable
Andre Heinecke <andre.heinecke@intevation.de>
parents:
744
diff
changeset
|
51 |
9f13c00a2647
Make certificate text selectable
Andre Heinecke <andre.heinecke@intevation.de>
parents:
744
diff
changeset
|
52 mLabel->setTextInteractionFlags( |
9f13c00a2647
Make certificate text selectable
Andre Heinecke <andre.heinecke@intevation.de>
parents:
744
diff
changeset
|
53 Qt::TextSelectableByMouse | |
9f13c00a2647
Make certificate text selectable
Andre Heinecke <andre.heinecke@intevation.de>
parents:
744
diff
changeset
|
54 Qt::TextSelectableByKeyboard); |
1106
6f7b7d88f048
(issue115) Rework CertificateListWidgets to have a ToolButton instead of a combobox
Andre Heinecke <andre.heinecke@intevation.de>
parents:
1101
diff
changeset
|
55 mButton->setSizePolicy(QSizePolicy::Minimum, QSizePolicy::Minimum); |
6f7b7d88f048
(issue115) Rework CertificateListWidgets to have a ToolButton instead of a combobox
Andre Heinecke <andre.heinecke@intevation.de>
parents:
1101
diff
changeset
|
56 connect(mButton, SIGNAL(toggled (bool)), |
6f7b7d88f048
(issue115) Rework CertificateListWidgets to have a ToolButton instead of a combobox
Andre Heinecke <andre.heinecke@intevation.de>
parents:
1101
diff
changeset
|
57 this, SLOT(currentStateChanged(bool))); |
582
88c9bdc74175
New widgets to display certificates in lists.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff
changeset
|
58 |
638
9d806f140bd5
Added state and editable flag to certificate list items.
Raimund Renkert <rrenkert@intevation.de>
parents:
627
diff
changeset
|
59 QHBoxLayout *layout = new QHBoxLayout; |
1106
6f7b7d88f048
(issue115) Rework CertificateListWidgets to have a ToolButton instead of a combobox
Andre Heinecke <andre.heinecke@intevation.de>
parents:
1101
diff
changeset
|
60 layout->addWidget(mButton); |
6f7b7d88f048
(issue115) Rework CertificateListWidgets to have a ToolButton instead of a combobox
Andre Heinecke <andre.heinecke@intevation.de>
parents:
1101
diff
changeset
|
61 mButton->setFixedSize(64, 64); |
6f7b7d88f048
(issue115) Rework CertificateListWidgets to have a ToolButton instead of a combobox
Andre Heinecke <andre.heinecke@intevation.de>
parents:
1101
diff
changeset
|
62 mButton->setIconSize(QSize(48, 48)); |
582
88c9bdc74175
New widgets to display certificates in lists.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff
changeset
|
63 layout->addWidget(mLabel); |
88c9bdc74175
New widgets to display certificates in lists.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff
changeset
|
64 this->setLayout(layout); |
88c9bdc74175
New widgets to display certificates in lists.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff
changeset
|
65 } |
627
566ee111e331
Added state to certificate list item and updated certificate list widget.
Raimund Renkert <rrenkert@intevation.de>
parents:
582
diff
changeset
|
66 |
566ee111e331
Added state to certificate list item and updated certificate list widget.
Raimund Renkert <rrenkert@intevation.de>
parents:
582
diff
changeset
|
67 bool CertificateItemWidget::state() |
566ee111e331
Added state to certificate list item and updated certificate list widget.
Raimund Renkert <rrenkert@intevation.de>
parents:
582
diff
changeset
|
68 { |
1106
6f7b7d88f048
(issue115) Rework CertificateListWidgets to have a ToolButton instead of a combobox
Andre Heinecke <andre.heinecke@intevation.de>
parents:
1101
diff
changeset
|
69 if (!mButton->isEnabled()) { |
685
248d4f24e618
(Issue 29) Uneditable items are always selected
Andre Heinecke <andre.heinecke@intevation.de>
parents:
659
diff
changeset
|
70 return true; |
248d4f24e618
(Issue 29) Uneditable items are always selected
Andre Heinecke <andre.heinecke@intevation.de>
parents:
659
diff
changeset
|
71 } |
701
31c3d2bc9880
(Issue22) Fix painting problems with fixed size in windows style.
Andre Heinecke <andre.heinecke@intevation.de>
parents:
687
diff
changeset
|
72 |
1109
6594e8e63a25
(issue115) Add tooltips and fix manual changes handling
Andre Heinecke <andre.heinecke@intevation.de>
parents:
1108
diff
changeset
|
73 return !mButton->isChecked(); |
627
566ee111e331
Added state to certificate list item and updated certificate list widget.
Raimund Renkert <rrenkert@intevation.de>
parents:
582
diff
changeset
|
74 } |
566ee111e331
Added state to certificate list item and updated certificate list widget.
Raimund Renkert <rrenkert@intevation.de>
parents:
582
diff
changeset
|
75 |
638
9d806f140bd5
Added state and editable flag to certificate list items.
Raimund Renkert <rrenkert@intevation.de>
parents:
627
diff
changeset
|
76 void CertificateItemWidget::setState(bool state) |
9d806f140bd5
Added state and editable flag to certificate list items.
Raimund Renkert <rrenkert@intevation.de>
parents:
627
diff
changeset
|
77 { |
1109
6594e8e63a25
(issue115) Add tooltips and fix manual changes handling
Andre Heinecke <andre.heinecke@intevation.de>
parents:
1108
diff
changeset
|
78 /* The internal state we get here is inverted for Ui reasons the logic |
6594e8e63a25
(issue115) Add tooltips and fix manual changes handling
Andre Heinecke <andre.heinecke@intevation.de>
parents:
1108
diff
changeset
|
79 * is if a certificate is selected for installation the button |
6594e8e63a25
(issue115) Add tooltips and fix manual changes handling
Andre Heinecke <andre.heinecke@intevation.de>
parents:
1108
diff
changeset
|
80 * is disabled (as this is the default) Only those that are |
6594e8e63a25
(issue115) Add tooltips and fix manual changes handling
Andre Heinecke <andre.heinecke@intevation.de>
parents:
1108
diff
changeset
|
81 * unselected have the enabled button. */ |
6594e8e63a25
(issue115) Add tooltips and fix manual changes handling
Andre Heinecke <andre.heinecke@intevation.de>
parents:
1108
diff
changeset
|
82 mButton->blockSignals(true); // code did this and not the user |
1106
6f7b7d88f048
(issue115) Rework CertificateListWidgets to have a ToolButton instead of a combobox
Andre Heinecke <andre.heinecke@intevation.de>
parents:
1101
diff
changeset
|
83 mButton->setChecked(!state); |
1109
6594e8e63a25
(issue115) Add tooltips and fix manual changes handling
Andre Heinecke <andre.heinecke@intevation.de>
parents:
1108
diff
changeset
|
84 mButton->blockSignals(false); |
6594e8e63a25
(issue115) Add tooltips and fix manual changes handling
Andre Heinecke <andre.heinecke@intevation.de>
parents:
1108
diff
changeset
|
85 if (mButton->isEnabled()) { |
6594e8e63a25
(issue115) Add tooltips and fix manual changes handling
Andre Heinecke <andre.heinecke@intevation.de>
parents:
1108
diff
changeset
|
86 mButton->setToolTip(mButton->property(!state ? "ToolTip_On" : |
6594e8e63a25
(issue115) Add tooltips and fix manual changes handling
Andre Heinecke <andre.heinecke@intevation.de>
parents:
1108
diff
changeset
|
87 "ToolTip_Off").toString()); |
6594e8e63a25
(issue115) Add tooltips and fix manual changes handling
Andre Heinecke <andre.heinecke@intevation.de>
parents:
1108
diff
changeset
|
88 } |
638
9d806f140bd5
Added state and editable flag to certificate list items.
Raimund Renkert <rrenkert@intevation.de>
parents:
627
diff
changeset
|
89 } |
9d806f140bd5
Added state and editable flag to certificate list items.
Raimund Renkert <rrenkert@intevation.de>
parents:
627
diff
changeset
|
90 |
1108
9bb9932bb819
Revert commit 1101 the inactive manual changes were a bad idea
Andre Heinecke <andre.heinecke@intevation.de>
parents:
1106
diff
changeset
|
91 Certificate CertificateItemWidget::certificate() |
627
566ee111e331
Added state to certificate list item and updated certificate list widget.
Raimund Renkert <rrenkert@intevation.de>
parents:
582
diff
changeset
|
92 { |
1108
9bb9932bb819
Revert commit 1101 the inactive manual changes were a bad idea
Andre Heinecke <andre.heinecke@intevation.de>
parents:
1106
diff
changeset
|
93 return mCertificate; |
627
566ee111e331
Added state to certificate list item and updated certificate list widget.
Raimund Renkert <rrenkert@intevation.de>
parents:
582
diff
changeset
|
94 } |
566ee111e331
Added state to certificate list item and updated certificate list widget.
Raimund Renkert <rrenkert@intevation.de>
parents:
582
diff
changeset
|
95 |
1106
6f7b7d88f048
(issue115) Rework CertificateListWidgets to have a ToolButton instead of a combobox
Andre Heinecke <andre.heinecke@intevation.de>
parents:
1101
diff
changeset
|
96 void CertificateItemWidget::currentStateChanged(bool state) |
627
566ee111e331
Added state to certificate list item and updated certificate list widget.
Raimund Renkert <rrenkert@intevation.de>
parents:
582
diff
changeset
|
97 { |
1109
6594e8e63a25
(issue115) Add tooltips and fix manual changes handling
Andre Heinecke <andre.heinecke@intevation.de>
parents:
1108
diff
changeset
|
98 mButton->setToolTip(mButton->property(state ? "ToolTip_On" : |
6594e8e63a25
(issue115) Add tooltips and fix manual changes handling
Andre Heinecke <andre.heinecke@intevation.de>
parents:
1108
diff
changeset
|
99 "ToolTip_Off").toString()); |
6594e8e63a25
(issue115) Add tooltips and fix manual changes handling
Andre Heinecke <andre.heinecke@intevation.de>
parents:
1108
diff
changeset
|
100 emit stateChanged(state, mCertificate); |
627
566ee111e331
Added state to certificate list item and updated certificate list widget.
Raimund Renkert <rrenkert@intevation.de>
parents:
582
diff
changeset
|
101 } |