Kaydet (Commit) d8faf3bf authored tarafından Samuel Mehrbrodt's avatar Samuel Mehrbrodt

Related tdf#105566 Update Infobar when signature status changes

gpg4libre

Change-Id: I8f29cf16905c79d19d46662b087f4fd8778c8147
Reviewed-on: https://gerrit.libreoffice.org/36251Tested-by: 's avatarJenkins <ci@libreoffice.org>
Reviewed-by: 's avatarSamuel Mehrbrodt <Samuel.Mehrbrodt@cib.de>
üst 3c443852
......@@ -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 );
......
......@@ -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 \
......
/* -*- 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: */
......@@ -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;
}
......
/* -*- 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: */
......@@ -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() &&
......
......@@ -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()
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment