diff options
author | Caolán McNamara <caolanm@redhat.com> | 2019-02-13 11:49:34 +0000 |
---|---|---|
committer | Caolán McNamara <caolanm@redhat.com> | 2019-02-14 13:06:03 +0100 |
commit | 762740f6dbbb3818323dc33f0062cf27ab8fd638 (patch) | |
tree | b7ff003c7157e1fe7479a27b7693c86ddbf419ad /xmlsecurity | |
parent | f7ec0b0ac40045450bd86b73ca59b32a15bc8346 (diff) |
weld CertificateChooser
Change-Id: I46087a58d5cff7ea8ac86ef8ee670cc4a59d0120
Reviewed-on: https://gerrit.libreoffice.org/67795
Tested-by: Jenkins
Reviewed-by: Caolán McNamara <caolanm@redhat.com>
Tested-by: Caolán McNamara <caolanm@redhat.com>
Diffstat (limited to 'xmlsecurity')
-rw-r--r-- | xmlsecurity/inc/certificatechooser.hxx | 42 | ||||
-rw-r--r-- | xmlsecurity/inc/certificateviewer.hxx | 2 | ||||
-rw-r--r-- | xmlsecurity/inc/strings.hrc | 11 | ||||
-rw-r--r-- | xmlsecurity/source/component/documentdigitalsignatures.cxx | 10 | ||||
-rw-r--r-- | xmlsecurity/source/dialogs/certificatechooser.cxx | 190 | ||||
-rw-r--r-- | xmlsecurity/source/dialogs/certificateviewer.cxx | 2 | ||||
-rw-r--r-- | xmlsecurity/source/dialogs/digitalsignaturesdialog.cxx | 8 | ||||
-rw-r--r-- | xmlsecurity/uiconfig/ui/selectcertificatedialog.ui | 228 |
8 files changed, 221 insertions, 272 deletions
diff --git a/xmlsecurity/inc/certificatechooser.hxx b/xmlsecurity/inc/certificatechooser.hxx index d01b95edda24..b98b30fdc6b3 100644 --- a/xmlsecurity/inc/certificatechooser.hxx +++ b/xmlsecurity/inc/certificatechooser.hxx @@ -20,16 +20,12 @@ #ifndef INCLUDED_XMLSECURITY_INC_CERTIFICATECHOOSER_HXX #define INCLUDED_XMLSECURITY_INC_CERTIFICATECHOOSER_HXX -#include <svtools/simptabl.hxx> -#include <vcl/dialog.hxx> -#include <vcl/fixed.hxx> -#include <vcl/button.hxx> #include <com/sun/star/xml/crypto/XSecurityEnvironment.hpp> #include <com/sun/star/xml/crypto/XXMLSecurityContext.hpp> #include <com/sun/star/uno/XComponentContext.hpp> #include <com/sun/star/uno/Sequence.hxx> #include <svl/sigstruct.hxx> - +#include <vcl/weld.hxx> namespace com { namespace sun { @@ -40,8 +36,6 @@ namespace xml { namespace crypto { class XSecurityEnvironment; }} }}} -class HeaderBar; - struct UserData { css::uno::Reference<css::security::XCertificate> xCertificate; @@ -56,45 +50,43 @@ enum class UserAction Encrypt }; -class CertificateChooser : public ModalDialog +class CertificateChooser : public weld::GenericDialogController { private: css::uno::Reference< css::uno::XComponentContext > mxCtx; std::vector< css::uno::Reference< css::xml::crypto::XXMLSecurityContext > > mxSecurityContexts; std::vector<std::shared_ptr<UserData>> mvUserData; - VclPtr<FixedText> m_pFTSign; - VclPtr<FixedText> m_pFTEncrypt; - - VclPtr<SvSimpleTable> m_pCertLB; - VclPtr<PushButton> m_pViewBtn; - VclPtr<OKButton> m_pOKBtn; - VclPtr<FixedText> m_pFTDescription; - VclPtr<Edit> m_pDescriptionED; - bool mbInitialized; UserAction const meAction; OUString msPreferredKey; css::uno::Reference<css::security::XCertificate> mxEncryptToSelf; - DECL_LINK(ViewButtonHdl, Button*, void); - DECL_LINK(CertificateHighlightHdl, SvTreeListBox*, void ); - DECL_LINK(CertificateSelectHdl, SvTreeListBox*, bool ); + std::unique_ptr<weld::Label> m_xFTSign; + std::unique_ptr<weld::Label> m_xFTEncrypt; + std::unique_ptr<weld::TreeView> m_xCertLB; + std::unique_ptr<weld::Button> m_xViewBtn; + std::unique_ptr<weld::Button> m_xOKBtn; + std::unique_ptr<weld::Label> m_xFTDescription; + std::unique_ptr<weld::Entry> m_xDescriptionED; + + DECL_LINK(ViewButtonHdl, weld::Button&, void); + DECL_LINK(CertificateHighlightHdl, weld::TreeView&, void); + DECL_LINK(CertificateSelectHdl, weld::TreeView&, void); void ImplShowCertificateDetails(); void ImplInitialize(); - void HandleOneUsageBit(OUString& string, int& bits, int bit, const char *name); + static void HandleOneUsageBit(OUString& string, int& bits, int bit, const char *name); public: - CertificateChooser(vcl::Window* pParent, + CertificateChooser(weld::Window* pParent, css::uno::Reference< css::uno::XComponentContext> const & rxCtx, std::vector< css::uno::Reference< css::xml::crypto::XXMLSecurityContext > > const & rxSecurityContexts, UserAction eAction); virtual ~CertificateChooser() override; - virtual void dispose() override; - short Execute() override; + short run() override; css::uno::Sequence<css::uno::Reference< css::security::XCertificate > > GetSelectedCertificates(); css::uno::Reference< css::xml::crypto::XXMLSecurityContext > GetSelectedSecurityContext(); @@ -104,7 +96,7 @@ public: /// Returns the usage string of the selected certificate, if any. OUString GetUsageText(); - OUString UsageInClearText(int bits); + static OUString UsageInClearText(int bits); }; #endif // INCLUDED_XMLSECURITY_INC_CERTIFICATECHOOSER_HXX diff --git a/xmlsecurity/inc/certificateviewer.hxx b/xmlsecurity/inc/certificateviewer.hxx index 9f816c9a0671..a117ad39cbb8 100644 --- a/xmlsecurity/inc/certificateviewer.hxx +++ b/xmlsecurity/inc/certificateviewer.hxx @@ -53,7 +53,7 @@ private: css::uno::Reference< css::xml::crypto::XSecurityEnvironment > mxSecurityEnvironment; css::uno::Reference< css::security::XCertificate > mxCert; - VclPtr<CertificateChooser> mpParentChooser; + CertificateChooser* mpParentChooser; std::unique_ptr<weld::Notebook> mxTabCtrl; diff --git a/xmlsecurity/inc/strings.hrc b/xmlsecurity/inc/strings.hrc index c44617e10fed..deed17e9e1a2 100644 --- a/xmlsecurity/inc/strings.hrc +++ b/xmlsecurity/inc/strings.hrc @@ -51,6 +51,17 @@ #define RID_XMLSECWB_NO_MOZILLA_PROFILE NC_("RID_XMLSECWB_NO_MOZILLA_PROFILE", "Digital signatures functionality could not be used, because no Mozilla user profile was found. Please check the Mozilla installation.") +#define STR_DIGITAL_SIGNATURE NC_("selectcertificatedialog|STR_DIGITAL_SIGNATURE", "Digital signature") +#define STR_NON_REPUDIATION NC_("selectcertificatedialog|STR_NON_REPUDIATION", "Non-repudiation") +#define STR_KEY_ENCIPHERMENT NC_("selectcertificatedialog|STR_KEY_ENCIPHERMENT", "Key encipherment") +#define STR_DATA_ENCIPHERMENT NC_("selectcertificatedialog|STR_DATA_ENCIPHERMENT", "Data encipherment") +#define STR_KEY_AGREEMENT NC_("selectcertificatedialog|STR_KEY_AGREEMENT", "Key Agreement") +#define STR_KEY_CERT_SIGN NC_("selectcertificatedialog|STR_KEY_CERT_SIGN", "Certificate signature verification") +#define STR_CRL_SIGN NC_("selectcertificatedialog|STR_CRL_SIGN", "CRL signature verification") +#define STR_ENCIPHER_ONLY NC_("selectcertificatedialog|STR_ENCIPHER_ONLY", "Only for encipherment") +#define STR_SIGN NC_("selectcertificatedialog|str_sign", "Sign") +#define STR_SELECTSIGN NC_("selectcertificatedialog|str_selectsign", "Select") +#define STR_ENCRYPT NC_("selectcertificatedialog|str_encrypt", "Encrypt") #endif diff --git a/xmlsecurity/source/component/documentdigitalsignatures.cxx b/xmlsecurity/source/component/documentdigitalsignatures.cxx index 0f6d9e909035..2eeb6d9d13d8 100644 --- a/xmlsecurity/source/component/documentdigitalsignatures.cxx +++ b/xmlsecurity/source/component/documentdigitalsignatures.cxx @@ -649,17 +649,17 @@ DocumentDigitalSignatures::chooseCertificatesImpl(std::map<OUString, OUString>& xSecContexts.push_back(aSignatureManager.getGpgSecurityContext()); } - ScopedVclPtrInstance< CertificateChooser > aChooser(nullptr, mxCtx, xSecContexts, eAction); + CertificateChooser aChooser(Application::GetFrameWeld(mxParentWindow), mxCtx, xSecContexts, eAction); uno::Sequence< Reference< css::security::XCertificate > > xCerts(1); xCerts[0] = Reference< css::security::XCertificate >(nullptr); - if (aChooser->Execute() != RET_OK) + if (aChooser.run() != RET_OK) return xCerts; - xCerts = aChooser->GetSelectedCertificates(); - rProperties["Description"] = aChooser->GetDescription(); - rProperties["Usage"] = aChooser->GetUsageText(); + xCerts = aChooser.GetSelectedCertificates(); + rProperties["Description"] = aChooser.GetDescription(); + rProperties["Usage"] = aChooser.GetUsageText(); return xCerts; } diff --git a/xmlsecurity/source/dialogs/certificatechooser.cxx b/xmlsecurity/source/dialogs/certificatechooser.cxx index 61ce81f135db..67bc31cf3dd0 100644 --- a/xmlsecurity/source/dialogs/certificatechooser.cxx +++ b/xmlsecurity/source/dialogs/certificatechooser.cxx @@ -32,68 +32,53 @@ #include <unotools/datetime.hxx> #include <unotools/useroptions.hxx> +#include <resourcemanager.hxx> +#include <strings.hrc> + using namespace comphelper; using namespace css; -CertificateChooser::CertificateChooser(vcl::Window* _pParent, +CertificateChooser::CertificateChooser(weld::Window* _pParent, uno::Reference<uno::XComponentContext> const & _rxCtx, std::vector< css::uno::Reference< css::xml::crypto::XXMLSecurityContext > > const & rxSecurityContexts, UserAction eAction) - : ModalDialog(_pParent, "SelectCertificateDialog", "xmlsec/ui/selectcertificatedialog.ui"), - mvUserData(), - meAction( eAction ) + : GenericDialogController(_pParent, "xmlsec/ui/selectcertificatedialog.ui", "SelectCertificateDialog") + , mvUserData() + , meAction(eAction) + , m_xFTSign(m_xBuilder->weld_label("sign")) + , m_xFTEncrypt(m_xBuilder->weld_label("encrypt")) + , m_xCertLB(m_xBuilder->weld_tree_view("signatures")) + , m_xViewBtn(m_xBuilder->weld_button("viewcert")) + , m_xOKBtn(m_xBuilder->weld_button("ok")) + , m_xFTDescription(m_xBuilder->weld_label("description-label")) + , m_xDescriptionED(m_xBuilder->weld_entry("description")) { - get(m_pFTSign, "sign"); - get(m_pFTEncrypt, "encrypt"); - get(m_pOKBtn, "ok"); - get(m_pViewBtn, "viewcert"); - get(m_pFTDescription, "description-label"); - get(m_pDescriptionED, "description"); - - Size aControlSize(475, 122); - const long nControlWidth = aControlSize.Width(); - aControlSize = LogicToPixel(aControlSize, MapMode(MapUnit::MapAppFont)); - SvSimpleTableContainer *pSignatures = get<SvSimpleTableContainer>("signatures"); - pSignatures->set_width_request(aControlSize.Width()); - pSignatures->set_height_request(aControlSize.Height()); - - m_pCertLB = VclPtr<SvSimpleTable>::Create(*pSignatures); - static long nTabs[] = { 0, 20*nControlWidth/100, 50*nControlWidth/100, 60*nControlWidth/100, 70*nControlWidth/100 }; - m_pCertLB->SetTabs( SAL_N_ELEMENTS(nTabs), nTabs ); - m_pCertLB->InsertHeaderEntry(get<FixedText>("issuedto")->GetText() + "\t" + get<FixedText>("issuedby")->GetText() - + "\t" + get<FixedText>("type")->GetText() + "\t" + get<FixedText>("expiration")->GetText() - + "\t" + get<FixedText>("usage")->GetText()); - m_pCertLB->SetSelectHdl( LINK( this, CertificateChooser, CertificateHighlightHdl ) ); - m_pCertLB->SetDoubleClickHdl( LINK( this, CertificateChooser, CertificateSelectHdl ) ); - m_pViewBtn->SetClickHdl( LINK( this, CertificateChooser, ViewButtonHdl ) ); + auto nControlWidth = m_xCertLB->get_approximate_digit_width() * 105; + m_xCertLB->set_size_request(nControlWidth, m_xCertLB->get_height_rows(12)); + + std::vector<int> aWidths; + aWidths.push_back(30*nControlWidth/100); + aWidths.push_back(30*nControlWidth/100); + aWidths.push_back(10*nControlWidth/100); + aWidths.push_back(20*nControlWidth/100); + m_xCertLB->set_column_fixed_widths(aWidths); + m_xCertLB->connect_changed( LINK( this, CertificateChooser, CertificateHighlightHdl ) ); + m_xCertLB->connect_row_activated( LINK( this, CertificateChooser, CertificateSelectHdl ) ); + m_xViewBtn->connect_clicked( LINK( this, CertificateChooser, ViewButtonHdl ) ); mxCtx = _rxCtx; mxSecurityContexts = rxSecurityContexts; mbInitialized = false; // disable buttons - CertificateHighlightHdl( nullptr ); + CertificateHighlightHdl(*m_xCertLB); } CertificateChooser::~CertificateChooser() { - disposeOnce(); } -void CertificateChooser::dispose() -{ - m_pFTSign.clear(); - m_pFTEncrypt.clear(); - m_pCertLB.disposeAndClear(); - m_pViewBtn.clear(); - m_pOKBtn.clear(); - m_pFTDescription.clear(); - m_pDescriptionED.clear(); - mvUserData.clear(); - ModalDialog::dispose(); -} - -short CertificateChooser::Execute() +short CertificateChooser::run() { // #i48432# // We can't check for personal certificates before raising this dialog, @@ -108,25 +93,18 @@ short CertificateChooser::Execute() // Problem: This Dialog should be visible right now, and the parent should not be accessible. // Show, Update, DisableInput... - vcl::Window* pMe = this; - vcl::Window* pParent = GetParent(); - if ( pParent ) - pParent->EnableInput( false ); - pMe->Show(); - pMe->Update(); + m_xDialog->show(); ImplInitialize(); - if ( pParent ) - pParent->EnableInput(); - return ModalDialog::Execute(); + return GenericDialogController::run(); } -void CertificateChooser::HandleOneUsageBit(OUString& string, int& bits, int bit, const char *name) +void CertificateChooser::HandleOneUsageBit(OUString& string, int& bits, int bit, const char *pResId) { if (bits & bit) { if (!string.isEmpty()) string += ", "; - string += get<FixedText>(OString("STR_") + name)->GetText(); + string += XsResId(pResId); bits &= ~bit; } } @@ -135,14 +113,14 @@ OUString CertificateChooser::UsageInClearText(int bits) { OUString result; - HandleOneUsageBit(result, bits, 0x80, "DIGITAL_SIGNATURE"); - HandleOneUsageBit(result, bits, 0x40, "NON_REPUDIATION"); - HandleOneUsageBit(result, bits, 0x20, "KEY_ENCIPHERMENT"); - HandleOneUsageBit(result, bits, 0x10, "DATA_ENCIPHERMENT"); - HandleOneUsageBit(result, bits, 0x08, "KEY_AGREEMENT"); - HandleOneUsageBit(result, bits, 0x04, "KEY_CERT_SIGN"); - HandleOneUsageBit(result, bits, 0x02, "CRL_SIGN"); - HandleOneUsageBit(result, bits, 0x01, "ENCIPHER_ONLY"); + HandleOneUsageBit(result, bits, 0x80, STR_DIGITAL_SIGNATURE); + HandleOneUsageBit(result, bits, 0x40, STR_NON_REPUDIATION); + HandleOneUsageBit(result, bits, 0x20, STR_KEY_ENCIPHERMENT); + HandleOneUsageBit(result, bits, 0x10, STR_DATA_ENCIPHERMENT); + HandleOneUsageBit(result, bits, 0x08, STR_KEY_AGREEMENT); + HandleOneUsageBit(result, bits, 0x04, STR_KEY_CERT_SIGN); + HandleOneUsageBit(result, bits, 0x02, STR_CRL_SIGN); + HandleOneUsageBit(result, bits, 0x01, STR_ENCIPHER_ONLY); // Check for mystery leftover bits if (bits != 0) @@ -165,23 +143,23 @@ void CertificateChooser::ImplInitialize() switch (meAction) { case UserAction::Sign: - m_pFTSign->Show(); - m_pOKBtn->SetText( get<FixedText>("str_sign")->GetText() ); + m_xFTSign->show(); + m_xOKBtn->set_label(XsResId(STR_SIGN)); msPreferredKey = aUserOpts.GetSigningKey(); break; case UserAction::SelectSign: - m_pFTSign->Show(); - m_pOKBtn->SetText( get<FixedText>("str_selectsign")->GetText() ); + m_xFTSign->show(); + m_xOKBtn->set_label(XsResId(STR_SELECTSIGN)); msPreferredKey = aUserOpts.GetSigningKey(); break; case UserAction::Encrypt: - m_pFTEncrypt->Show(); - m_pFTDescription->Hide(); - m_pDescriptionED->Hide(); - m_pCertLB->SetSelectionMode( SelectionMode::Multiple ); - m_pOKBtn->SetText( get<FixedText>("str_encrypt")->GetText() ); + m_xFTEncrypt->show(); + m_xFTDescription->hide(); + m_xDescriptionED->hide(); + m_xCertLB->set_selection_mode(SelectionMode::Multiple); + m_xOKBtn->set_label(XsResId(STR_ENCRYPT)); msPreferredKey = aUserOpts.GetEncryptionKey(); break; @@ -232,19 +210,24 @@ void CertificateChooser::ImplInitialize() mvUserData.push_back(userData); OUString sIssuer = xmlsec::GetContentPart( xCerts[ nC ]->getIssuerName() ); - SvTreeListEntry* pEntry = m_pCertLB->InsertEntry( xmlsec::GetContentPart( xCerts[ nC ]->getSubjectName() ) - + "\t" + sIssuer - + "\t" + xmlsec::GetCertificateKind( xCerts[ nC ]->getCertificateKind() ) - + "\t" + utl::GetDateString( xCerts[ nC ]->getNotValidAfter() ) - + "\t" + UsageInClearText( xCerts[ nC ]->getCertificateUsage() ) ); - pEntry->SetUserData( userData.get() ); + + m_xCertLB->insert(nullptr, -1, nullptr, nullptr, + nullptr, nullptr, nullptr, false); + int nRow = m_xCertLB->n_children() - 1; + m_xCertLB->set_text(nRow, xmlsec::GetContentPart(xCerts[nC]->getSubjectName()), 0); + m_xCertLB->set_text(nRow, sIssuer, 1); + m_xCertLB->set_text(nRow, xmlsec::GetCertificateKind(xCerts[nC]->getCertificateKind()), 2); + m_xCertLB->set_text(nRow, utl::GetDateString(xCerts[nC]->getNotValidAfter()), 3); + m_xCertLB->set_text(nRow, UsageInClearText(xCerts[nC]->getCertificateUsage()), 4); + OUString sId(OUString::number(reinterpret_cast<sal_Int64>(userData.get()))); + m_xCertLB->set_id(nRow, sId); #if HAVE_FEATURE_GPGME // only GPG has preferred keys if ( sIssuer == msPreferredKey ) { if ( meAction == UserAction::Sign || meAction == UserAction::SelectSign ) - m_pCertLB->Select( pEntry ); + m_xCertLB->select(nRow); else if ( meAction == UserAction::Encrypt && aUserOpts.GetEncryptToSelf() ) mxEncryptToSelf = xCerts[nC]; @@ -254,32 +237,28 @@ void CertificateChooser::ImplInitialize() } // enable/disable buttons - CertificateHighlightHdl( nullptr ); + CertificateHighlightHdl(*m_xCertLB); mbInitialized = true; } - uno::Sequence<uno::Reference< css::security::XCertificate > > CertificateChooser::GetSelectedCertificates() { std::vector< uno::Reference< css::security::XCertificate > > aRet; - SvTreeListEntry* pSel = m_pCertLB->FirstSelected(); - if (meAction == UserAction::Encrypt) { // for encryption, multiselection is enabled - while(pSel) - { - UserData* userData = static_cast<UserData*>(pSel->GetUserData()); + m_xCertLB->selected_foreach([this, &aRet](weld::TreeIter& rEntry){ + UserData* userData = reinterpret_cast<UserData*>(m_xCertLB->get_id(rEntry).toInt64()); aRet.push_back( userData->xCertificate ); - pSel = m_pCertLB->NextSelected(pSel); - } + }); } else { uno::Reference< css::security::XCertificate > xCert; - if( pSel ) + int nSel = m_xCertLB->get_selected_index(); + if (nSel != -1) { - UserData* userData = static_cast<UserData*>(pSel->GetUserData()); + UserData* userData = reinterpret_cast<UserData*>(m_xCertLB->get_id(nSel).toInt64()); xCert = userData->xCertificate; } aRet.push_back( xCert ); @@ -295,18 +274,18 @@ uno::Sequence<uno::Reference< css::security::XCertificate > > CertificateChooser uno::Reference<xml::crypto::XXMLSecurityContext> CertificateChooser::GetSelectedSecurityContext() { - SvTreeListEntry* pSel = m_pCertLB->FirstSelected(); - if( !pSel ) + int nSel = m_xCertLB->get_selected_index(); + if (nSel == -1) return uno::Reference<xml::crypto::XXMLSecurityContext>(); - UserData* userData = static_cast<UserData*>(pSel->GetUserData()); + UserData* userData = reinterpret_cast<UserData*>(m_xCertLB->get_id(nSel).toInt64()); uno::Reference<xml::crypto::XXMLSecurityContext> xCert = userData->xSecurityContext; return xCert; } OUString CertificateChooser::GetDescription() { - return m_pDescriptionED->GetText(); + return m_xDescriptionED->get_text(); } OUString CertificateChooser::GetUsageText() @@ -317,37 +296,36 @@ OUString CertificateChooser::GetUsageText() UsageInClearText(xCerts[0]->getCertificateUsage()) : OUString(); } -IMPL_LINK_NOARG(CertificateChooser, CertificateHighlightHdl, SvTreeListBox*, void) +IMPL_LINK_NOARG(CertificateChooser, CertificateHighlightHdl, weld::TreeView&, void) { - bool bEnable = m_pCertLB->GetSelectionCount() > 0; - m_pViewBtn->Enable( bEnable ); - m_pOKBtn->Enable( bEnable ); - m_pDescriptionED->Enable(bEnable); + bool bEnable = m_xCertLB->get_selected_index() != -1; + m_xViewBtn->set_sensitive(bEnable); + m_xOKBtn->set_sensitive(bEnable); + m_xDescriptionED->set_sensitive(bEnable); } -IMPL_LINK_NOARG(CertificateChooser, CertificateSelectHdl, SvTreeListBox*, bool) +IMPL_LINK_NOARG(CertificateChooser, CertificateSelectHdl, weld::TreeView&, void) { - EndDialog( RET_OK ); - return false; + m_xDialog->response(RET_OK); } -IMPL_LINK_NOARG(CertificateChooser, ViewButtonHdl, Button*, void) +IMPL_LINK_NOARG(CertificateChooser, ViewButtonHdl, weld::Button&, void) { ImplShowCertificateDetails(); } void CertificateChooser::ImplShowCertificateDetails() { - SvTreeListEntry* pSel = m_pCertLB->FirstSelected(); - if( !pSel ) + int nSel = m_xCertLB->get_selected_index(); + if (nSel == -1) return; - UserData* userData = static_cast<UserData*>(pSel->GetUserData()); + UserData* userData = reinterpret_cast<UserData*>(m_xCertLB->get_id(nSel).toInt64()); if (!userData->xSecurityEnvironment.is() || !userData->xCertificate.is()) return; - CertificateViewer aViewer(GetFrameWeld(), userData->xSecurityEnvironment, userData->xCertificate, true, this); + CertificateViewer aViewer(m_xDialog.get(), userData->xSecurityEnvironment, userData->xCertificate, true, this); aViewer.run(); } diff --git a/xmlsecurity/source/dialogs/certificateviewer.cxx b/xmlsecurity/source/dialogs/certificateviewer.cxx index 501f59296b47..7bc6b03ff28d 100644 --- a/xmlsecurity/source/dialogs/certificateviewer.cxx +++ b/xmlsecurity/source/dialogs/certificateviewer.cxx @@ -224,7 +224,7 @@ CertificateViewerDetailsTP::CertificateViewerDetailsTP(weld::Container* pParent, CertificateChooser* pChooser = mpDlg->GetParentChooser(); if (pChooser) { - aLBEntry = pChooser->UsageInClearText( mpDlg->mxCert->getCertificateUsage() ); + aLBEntry = CertificateChooser::UsageInClearText( mpDlg->mxCert->getCertificateUsage() ); InsertElement( XsResId( STR_USE ), aLBEntry, aLBEntry ); } diff --git a/xmlsecurity/source/dialogs/digitalsignaturesdialog.cxx b/xmlsecurity/source/dialogs/digitalsignaturesdialog.cxx index 762bcc58c878..dd93f64b55d9 100644 --- a/xmlsecurity/source/dialogs/digitalsignaturesdialog.cxx +++ b/xmlsecurity/source/dialogs/digitalsignaturesdialog.cxx @@ -404,12 +404,12 @@ IMPL_LINK_NOARG(DigitalSignaturesDialog, AddButtonHdl, Button*, void) if (DocumentSignatureHelper::CanSignWithGPG(maSignatureManager.mxStore, m_sODFVersion)) xSecContexts.push_back(maSignatureManager.getGpgSecurityContext()); - ScopedVclPtrInstance< CertificateChooser > aChooser( this, mxCtx, xSecContexts, UserAction::Sign ); - if ( aChooser->Execute() == RET_OK ) + CertificateChooser aChooser(GetFrameWeld(), mxCtx, xSecContexts, UserAction::Sign); + if (aChooser.run() == RET_OK) { sal_Int32 nSecurityId; - if (!maSignatureManager.add(aChooser->GetSelectedCertificates()[0], aChooser->GetSelectedSecurityContext(), - aChooser->GetDescription(), nSecurityId, m_bAdESCompliant)) + if (!maSignatureManager.add(aChooser.GetSelectedCertificates()[0], aChooser.GetSelectedSecurityContext(), + aChooser.GetDescription(), nSecurityId, m_bAdESCompliant)) return; mbSignaturesChanged = true; diff --git a/xmlsecurity/uiconfig/ui/selectcertificatedialog.ui b/xmlsecurity/uiconfig/ui/selectcertificatedialog.ui index 6bbc37546af4..f44d0e58f4da 100644 --- a/xmlsecurity/uiconfig/ui/selectcertificatedialog.ui +++ b/xmlsecurity/uiconfig/ui/selectcertificatedialog.ui @@ -2,12 +2,28 @@ <!-- Generated with glade 3.18.3 --> <interface domain="xsc"> <requires lib="gtk+" version="3.18"/> - <requires lib="LibreOffice" version="1.0"/> + <object class="GtkTreeStore" id="liststore3"> + <columns> + <!-- column-name text --> + <column type="gchararray"/> + <!-- column-name text2 --> + <column type="gchararray"/> + <!-- column-name text3 --> + <column type="gchararray"/> + <!-- column-name text4 --> + <column type="gchararray"/> + <!-- column-name text5 --> + <column type="gchararray"/> + <!-- column-name id --> + <column type="gchararray"/> + </columns> + </object> <object class="GtkDialog" id="SelectCertificateDialog"> <property name="can_focus">False</property> <property name="border_width">6</property> <property name="title" translatable="yes" context="selectcertificatedialog|SelectCertificateDialog">Select Certificate</property> <property name="resizable">False</property> + <property name="modal">True</property> <property name="type_hint">dialog</property> <child internal-child="vbox"> <object class="GtkBox" id="dialog-vbox1"> @@ -80,132 +96,6 @@ <property name="row_spacing">12</property> <property name="column_spacing">12</property> <child> - <object class="GtkGrid" id="grid2"> - <property name="can_focus">False</property> - <property name="no_show_all">True</property> - <property name="hexpand">True</property> - <property name="column_spacing">12</property> - <child> - <object class="GtkLabel" id="issuedto"> - <property name="can_focus">False</property> - <property name="hexpand">True</property> - <property name="label" translatable="yes" context="selectcertificatedialog|issuedto">Issued to</property> - </object> - <packing> - <property name="left_attach">0</property> - <property name="top_attach">0</property> - </packing> - </child> - <child> - <object class="GtkLabel" id="issuedby"> - <property name="can_focus">False</property> - <property name="hexpand">True</property> - <property name="label" translatable="yes" context="selectcertificatedialog|issuedby">Issued by</property> - </object> - <packing> - <property name="left_attach">1</property> - <property name="top_attach">0</property> - </packing> - </child> - <child> - <object class="GtkLabel" id="usage"> - <property name="can_focus">False</property> - <property name="hexpand">True</property> - <property name="label" translatable="yes" context="selectcertificatedialog|usage">Certificate usage</property> - </object> - <packing> - <property name="left_attach">2</property> - <property name="top_attach">0</property> - </packing> - </child> - <child> - <object class="GtkLabel" id="expiration"> - <property name="can_focus">False</property> - <property name="hexpand">True</property> - <property name="label" translatable="yes" context="selectcertificatedialog|expiration">Expiration date</property> - </object> - <packing> - <property name="left_attach">3</property> - <property name="top_attach">0</property> - </packing> - </child> - <child> - <object class="GtkLabel" id="type"> - <property name="can_focus">False</property> - <property name="hexpand">True</property> - <property name="label" translatable="yes" context="selectcertificatedialog|type">Type</property> - </object> - <packing> - <property name="left_attach">4</property> - <property name="top_attach">0</property> - </packing> - </child> - <!-- Just for localisation --> - <child> - <object class="GtkLabel" id="STR_DIGITAL_SIGNATURE"> - <property name="can_focus">False</property> - <property name="hexpand">True</property> - <property name="label" translatable="yes" context="selectcertificatedialog|STR_DIGITAL_SIGNATURE">Digital signature</property> - </object> - <object class="GtkLabel" id="STR_NON_REPUDIATION"> - <property name="can_focus">False</property> - <property name="hexpand">True</property> - <property name="label" translatable="yes" context="selectcertificatedialog|STR_NON_REPUDIATION">Non-repudiation</property> - </object> - <object class="GtkLabel" id="STR_KEY_ENCIPHERMENT"> - <property name="can_focus">False</property> - <property name="hexpand">True</property> - <property name="label" translatable="yes" context="selectcertificatedialog|STR_KEY_ENCIPHERMENT">Key encipherment</property> - </object> - <object class="GtkLabel" id="STR_DATA_ENCIPHERMENT"> - <property name="can_focus">False</property> - <property name="hexpand">True</property> - <property name="label" translatable="yes" context="selectcertificatedialog|STR_DATA_ENCIPHERMENT">Data encipherment</property> - </object> - <object class="GtkLabel" id="STR_KEY_AGREEMENT"> - <property name="can_focus">False</property> - <property name="hexpand">True</property> - <property name="label" translatable="yes" context="selectcertificatedialog|STR_KEY_AGREEMENT">Key Agreement</property> - </object> - <object class="GtkLabel" id="STR_KEY_CERT_SIGN"> - <property name="can_focus">False</property> - <property name="hexpand">True</property> - <property name="label" translatable="yes" context="selectcertificatedialog|STR_KEY_CERT_SIGN">Certificate signature verification</property> - </object> - <object class="GtkLabel" id="STR_CRL_SIGN"> - <property name="can_focus">False</property> - <property name="hexpand">True</property> - <property name="label" translatable="yes" context="selectcertificatedialog|STR_CRL_SIGN">CRL signature verification</property> - </object> - <object class="GtkLabel" id="STR_ENCIPHER_ONLY"> - <property name="can_focus">False</property> - <property name="hexpand">True</property> - <property name="label" translatable="yes" context="selectcertificatedialog|STR_ENCIPHER_ONLY">Only for encipherment</property> - </object> - <!-- different prefix, STR_ is (mis)used in the code to map certificate usage flags to strings --> - <object class="GtkLabel" id="str_sign"> - <property name="can_focus">False</property> - <property name="hexpand">True</property> - <property name="label" translatable="yes" context="selectcertificatedialog|str_sign">Sign</property> - </object> - <object class="GtkLabel" id="str_selectsign"> - <property name="can_focus">False</property> - <property name="hexpand">True</property> - <property name="label" translatable="yes" context="selectcertificatedialog|str_selectsign">Select</property> - </object> - <object class="GtkLabel" id="str_encrypt"> - <property name="can_focus">False</property> - <property name="hexpand">True</property> - <property name="label" translatable="yes" context="selectcertificatedialog|str_encrypt">Encrypt</property> - </object> - </child> - </object> - <packing> - <property name="left_attach">0</property> - <property name="top_attach">1</property> - </packing> - </child> - <child> <object class="GtkLabel" id="sign"> <property name="visible">False</property> <property name="can_focus">False</property> @@ -232,13 +122,91 @@ </packing> </child> <child> - <object class="svtlo-SvSimpleTableContainer" id="signatures"> + <object class="GtkScrolledWindow"> <property name="visible">True</property> <property name="can_focus">True</property> <property name="hexpand">True</property> <property name="vexpand">True</property> - <child internal-child="selection"> - <object class="GtkTreeSelection" id="Simple Table Container-selection1"/> + <property name="shadow_type">in</property> + <child> + <object class="GtkTreeView" id="signatures"> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="receives_default">True</property> + <property name="hexpand">True</property> + <property name="vexpand">True</property> + <property name="model">liststore3</property> + <property name="search_column">0</property> + <property name="show_expanders">False</property> + <child internal-child="selection"> + <object class="GtkTreeSelection" id="Macro Library List-selection2"/> + </child> + <child> + <object class="GtkTreeViewColumn" id="treeviewcolumn3"> + <property name="resizable">True</property> + <property name="spacing">6</property> + <property name="title" translatable="yes" context="selectcertificatedialog|issuedto">Issued to</property> + <child> + <object class="GtkCellRendererText" id="cellrenderer1"/> + <attributes> + <attribute name="text">0</attribute> + </attributes> + </child> + </object> + </child> + <child> + <object class="GtkTreeViewColumn" id="treeviewcolumn4"> + <property name="resizable">True</property> + <property name="spacing">6</property> + <property name="title" translatable="yes" context="selectcertificatedialog|issuedby">Issued by</property> + <child> + <object class="GtkCellRendererText" id="cellrenderer2"/> + <attributes> + <attribute name="text">1</attribute> + </attributes> + </child> + </object> + </child> + <child> + <object class="GtkTreeViewColumn" id="treeviewcolumn5"> + <property name="resizable">True</property> + <property name="spacing">6</property> + <property name="title" translatable="yes" context="selectcertificatedialog|type">Type</property> + <child> + <object class="GtkCellRendererText" id="cellrenderer3"/> + <attributes> + <attribute name="text">2</attribute> + </attributes> + </child> + </object> + </child> + <child> + <object class="GtkTreeViewColumn" id="treeviewcolumn6"> + <property name="resizable">True</property> + <property name="spacing">6</property> + <property name="title" translatable="yes" context="selectcertificatedialog|expiration">Expiration date</property> + <child> + <object class="GtkCellRendererText" id="cellrenderer4"/> + <attributes> + <attribute name="text">3</attribute> + </attributes> + </child> + </object> + </child> + <child> + <object class="GtkTreeViewColumn" id="treeviewcolumn7"> + <property name="resizable">True</property> + <property name="spacing">6</property> + <property name="title" translatable="yes" context="selectcertificatedialog|usage">Certificate usage</property> + <child> + <object class="GtkCellRendererText" id="cellrenderer5"/> + <attributes> + <attribute name="text">4</attribute> + </attributes> + </child> + </object> + </child> + </object> </child> </object> <packing> |