diff options
-rw-r--r-- | include/vcl/button.hxx | 2 | ||||
-rw-r--r-- | sfx2/Library_sfx.mk | 1 | ||||
-rw-r--r-- | sfx2/inc/view/signaturehelper.hxx | 32 | ||||
-rw-r--r-- | sfx2/source/doc/objserv.cxx | 6 | ||||
-rw-r--r-- | sfx2/source/view/signaturehelper.cxx | 67 | ||||
-rw-r--r-- | sfx2/source/view/viewfrm.cxx | 36 | ||||
-rw-r--r-- | vcl/source/control/button.cxx | 8 |
7 files changed, 112 insertions, 40 deletions
diff --git a/include/vcl/button.hxx b/include/vcl/button.hxx index 1c9fd19f421f..57cf7980ac71 100644 --- a/include/vcl/button.hxx +++ b/include/vcl/button.hxx @@ -75,7 +75,7 @@ public: const Link<Button*,void>& GetClickHdl() const { return maClickHdl; } /// Setup handler for UNO commands so that commands like .uno:Something are handled automagically by this button. - void SetCommandHandler(const OUString& aCommand); + void SetCommandHandler(const OUString& aCommand, bool bAddStatusListener=true); const OUString GetCommand() const { return maCommand; } static OUString GetStandardText( StandardButtonType eButton ); diff --git a/sfx2/Library_sfx.mk b/sfx2/Library_sfx.mk index f0a5a52c0cc2..2e51f1b6e21a 100644 --- a/sfx2/Library_sfx.mk +++ b/sfx2/Library_sfx.mk @@ -300,6 +300,7 @@ $(eval $(call gb_Library_add_exception_objects,sfx,\ sfx2/source/view/ipclient \ sfx2/source/view/lokhelper \ sfx2/source/view/printer \ + sfx2/source/view/signaturehelper \ sfx2/source/view/sfxbasecontroller \ sfx2/source/view/userinputinterception \ sfx2/source/view/viewfac \ diff --git a/sfx2/inc/view/signaturehelper.hxx b/sfx2/inc/view/signaturehelper.hxx new file mode 100644 index 000000000000..e8dc089ba876 --- /dev/null +++ b/sfx2/inc/view/signaturehelper.hxx @@ -0,0 +1,32 @@ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + */ + +#ifndef INCLUDED_SFX2_SIGNATUREHELPER_HXX +#define INCLUDED_SFX2_SIGNATUREHELPER_HXX + +#include <sfx2/signaturestate.hxx> + +class SfxViewFrame; + +class SignatureHelper +{ +public: + SignatureHelper(SfxViewFrame* rViewFrame); + /** + * Show the appropriate infobar according to the current signature status + */ + void updateInfoBarState(SignatureState signatureState); +private: + SfxViewFrame* mrViewFrame; +}; + +#endif + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ + diff --git a/sfx2/source/doc/objserv.cxx b/sfx2/source/doc/objserv.cxx index c2bdb2e5281a..d5058863a183 100644 --- a/sfx2/source/doc/objserv.cxx +++ b/sfx2/source/doc/objserv.cxx @@ -90,6 +90,7 @@ #include <sfx2/msgpool.hxx> #include <sfx2/objface.hxx> #include <sfx2/checkin.hxx> +#include "view/signaturehelper.hxx" #include "app.hrc" #include <com/sun/star/document/XDocumentSubStorageSupplier.hpp> @@ -1036,6 +1037,11 @@ void SfxObjectShell::GetState_Impl(SfxItemSet &rSet) } case SID_SIGNATURE: { + SfxViewFrame *pFrame = SfxViewFrame::GetFirst( this ); + if ( pFrame ) + { + SignatureHelper(pFrame).updateInfoBarState(GetDocumentSignatureState()); + } rSet.Put( SfxUInt16Item( SID_SIGNATURE, static_cast<sal_uInt16>(GetDocumentSignatureState()) ) ); break; } diff --git a/sfx2/source/view/signaturehelper.cxx b/sfx2/source/view/signaturehelper.cxx new file mode 100644 index 000000000000..d5b01fd5805c --- /dev/null +++ b/sfx2/source/view/signaturehelper.cxx @@ -0,0 +1,67 @@ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + */ + +#include "view/signaturehelper.hxx" + +#include <sfx2/infobar.hxx> +#include <sfx2/sfxresid.hxx> +#include <sfx2/sfx.hrc> +#include <vcl/button.hxx> +#include <vcl/vclptr.hxx> +#include <tools/link.hxx> + + +SignatureHelper::SignatureHelper(SfxViewFrame* rViewFrame) +{ + mrViewFrame = rViewFrame; +} + +void SignatureHelper::updateInfoBarState(SignatureState nSignatureState) +{ + InfoBarType aInfoBarType(InfoBarType::Info); + OUString sMessage(""); + + switch (nSignatureState) + { + case SignatureState::BROKEN: + sMessage = SfxResId(STR_SIGNATURE_BROKEN); + aInfoBarType = InfoBarType::Danger; + break; + case SignatureState::NOTVALIDATED: + sMessage = SfxResId(STR_SIGNATURE_NOTVALIDATED); + aInfoBarType = InfoBarType::Warning; + break; + case SignatureState::PARTIAL_OK: + sMessage = SfxResId(STR_SIGNATURE_PARTIAL_OK); + aInfoBarType = InfoBarType::Warning; + break; + case SignatureState::OK: + sMessage = SfxResId(STR_SIGNATURE_OK); + aInfoBarType = InfoBarType::Info; + break; + default: + break; + } + + mrViewFrame->RemoveInfoBar("signature"); + if (!sMessage.isEmpty()) + { + auto pInfoBar = mrViewFrame->AppendInfoBar("signature", sMessage, aInfoBarType); + if (pInfoBar == nullptr) + return; + VclPtrInstance<PushButton> xBtn(&(mrViewFrame->GetWindow())); + xBtn->SetText(SfxResId(STR_SIGNATURE_SHOW)); + xBtn->SetSizePixel(xBtn->GetOptimalSize()); + xBtn->SetCommandHandler(".uno:Signature", false); // false = No status listener, else we get in an infinite loop + pInfoBar->addButton(xBtn); + } +} + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ + diff --git a/sfx2/source/view/viewfrm.cxx b/sfx2/source/view/viewfrm.cxx index 6127ce8ab611..289bae55fb27 100644 --- a/sfx2/source/view/viewfrm.cxx +++ b/sfx2/source/view/viewfrm.cxx @@ -1138,42 +1138,6 @@ void SfxViewFrame::Notify( SfxBroadcaster& /*rBC*/, const SfxHint& rHint ) rBind.Invalidate( SID_RELOAD ); rBind.Invalidate( SID_EDITDOC ); - SignatureState nSignatureState = GetObjectShell()->GetDocumentSignatureState(); - InfoBarType aInfoBarType(InfoBarType::Info); - OUString sMessage; - - switch (nSignatureState) - { - case SignatureState::BROKEN: - sMessage = SfxResId(STR_SIGNATURE_BROKEN); - aInfoBarType = InfoBarType::Danger; - break; - case SignatureState::NOTVALIDATED: - sMessage = SfxResId(STR_SIGNATURE_NOTVALIDATED); - aInfoBarType = InfoBarType::Warning; - break; - case SignatureState::PARTIAL_OK: - sMessage = SfxResId(STR_SIGNATURE_PARTIAL_OK); - aInfoBarType = InfoBarType::Warning; - break; - case SignatureState::OK: - sMessage = SfxResId(STR_SIGNATURE_OK); - aInfoBarType = InfoBarType::Info; - break; - default: - break; - } - - if (!sMessage.isEmpty()) - { - auto pInfoBar = AppendInfoBar("signature", sMessage, aInfoBarType); - VclPtrInstance<PushButton> xBtn(&GetWindow()); - xBtn->SetText(SfxResId(STR_SIGNATURE_SHOW)); - xBtn->SetSizePixel(xBtn->GetOptimalSize()); - xBtn->SetClickHdl(LINK(this, SfxViewFrame, SignDocumentHandler)); - pInfoBar->addButton(xBtn); - } - const SfxViewShell *pVSh; const SfxShell *pFSh; if ( m_xObjSh->IsOriginallyReadOnlyMedium() && diff --git a/vcl/source/control/button.cxx b/vcl/source/control/button.cxx index 64c078e070fa..e65bd06ace74 100644 --- a/vcl/source/control/button.cxx +++ b/vcl/source/control/button.cxx @@ -109,13 +109,15 @@ void Button::dispose() Control::dispose(); } -void Button::SetCommandHandler(const OUString& aCommand) +void Button::SetCommandHandler(const OUString& aCommand, bool bAddStatusListener) { maCommand = aCommand; SetClickHdl( LINK( this, Button, dispatchCommandHandler) ); - mpButtonData->mpStatusListener = new VclStatusListener<Button>(this, aCommand); - mpButtonData->mpStatusListener->startListening(); + if (bAddStatusListener) { + mpButtonData->mpStatusListener = new VclStatusListener<Button>(this, aCommand); + mpButtonData->mpStatusListener->startListening(); + } } void Button::Click() |