summaryrefslogtreecommitdiff
path: root/sfx2
diff options
context:
space:
mode:
authorSamuel Mehrbrodt <Samuel.Mehrbrodt@cib.de>2019-11-18 09:08:03 +0100
committerThorsten Behrens <Thorsten.Behrens@CIB.de>2019-11-22 14:29:04 +0100
commitfa070a798536d4017baada1e8f036b0e18dad9c7 (patch)
tree3e34754fb883a8d46cc8e42e8c0f494f5a26f977 /sfx2
parent54239c99b7f9d82ec14492aff29e450abdafc61d (diff)
tdf#97926 Add UNO API for Infobar
This allows creating, updating and removing infobars from macros/extensions. It also extends the infobar with a primary and a secondary text, so there can be a bold summary at the beginning at the infobar with a longer text following in normal letters. Macro sample: ------------------------------------------------------------ Sub AddInfobar dim buttons(1) as new com.sun.star.beans.StringPair buttons(0).first = "Close doc" buttons(0).second = ".uno:CloseDoc" buttons(1).first = "Paste into doc" buttons(1).second = ".uno:Paste" ThisComponent.getCurrentController().appendInfobar("my", "Hello world", "Things happened. What now?", com.sun.star.frame.InfobarType.INFO, buttons, true) End Sub Sub UpdateInfobar ThisComponent.getCurrentController().updateInfobar("my", "WARNING","Do not read this message.", com.sun.star.frame.InfobarType.WARNING) End Sub Sub RemoveInfobar ThisComponent.getCurrentController().removeInfobar("my") End Sub ------------------------------------------------------------ Change-Id: I5d0a223525845d23ffab17acdaa431e0eb783fec Reviewed-on: https://gerrit.libreoffice.org/29816 Reviewed-by: Serge Krot (CIB) <Serge.Krot@cib.de> Tested-by: Serge Krot (CIB) <Serge.Krot@cib.de> Reviewed-by: Samuel Mehrbrodt <Samuel.Mehrbrodt@cib.de> (cherry picked from commit 9e3ba7c3036c4d21e01d6f75ed29a1e8c4208141) Reviewed-on: https://gerrit.libreoffice.org/83405 Tested-by: Jenkins Reviewed-by: Thorsten Behrens <Thorsten.Behrens@CIB.de>
Diffstat (limited to 'sfx2')
-rw-r--r--sfx2/source/dialog/infobar.cxx98
-rw-r--r--sfx2/source/doc/objserv.cxx18
-rw-r--r--sfx2/source/view/classificationhelper.cxx22
-rw-r--r--sfx2/source/view/sfxbasecontroller.cxx64
-rw-r--r--sfx2/source/view/viewfrm.cxx23
5 files changed, 158 insertions, 67 deletions
diff --git a/sfx2/source/dialog/infobar.cxx b/sfx2/source/dialog/infobar.cxx
index 8fc9f6c32fe1..ea99fc6b67d3 100644
--- a/sfx2/source/dialog/infobar.cxx
+++ b/sfx2/source/dialog/infobar.cxx
@@ -31,35 +31,36 @@ using namespace drawinglayer::processor2d;
using namespace drawinglayer::primitive2d;
using namespace drawinglayer::attribute;
using namespace basegfx;
+using namespace css::frame;
namespace
{
const long INFO_BAR_BASE_HEIGHT = 40;
-void GetInfoBarColors(InfoBarType ibType, BColor& rBackgroundColor, BColor& rForegroundColor, BColor& rMessageColor)
+void GetInfoBarColors(InfobarType ibType, BColor& rBackgroundColor, BColor& rForegroundColor, BColor& rMessageColor)
{
rMessageColor = basegfx::BColor(0.0, 0.0, 0.0);
switch (ibType)
{
- case InfoBarType::Info: // blue; #004785/0,71,133; #BDE5F8/189,229,248
+ case InfobarType::INFO: // blue; #004785/0,71,133; #BDE5F8/189,229,248
rBackgroundColor = basegfx::BColor(0.741, 0.898, 0.973);
rForegroundColor = basegfx::BColor(0.0, 0.278, 0.522);
break;
- case InfoBarType::Success: // green; #32550C/50,85,12; #DFF2BF/223,242,191
+ case InfobarType::SUCCESS: // green; #32550C/50,85,12; #DFF2BF/223,242,191
rBackgroundColor = basegfx::BColor(0.874,0.949,0.749);
rForegroundColor = basegfx::BColor(0.196,0.333,0.047);
break;
- case InfoBarType::Warning: // orange; #704300/112,67,0; #FEEFB3/254,239,179
+ case InfobarType::WARNING: // orange; #704300/112,67,0; #FEEFB3/254,239,179
rBackgroundColor = basegfx::BColor(0.996,0.937,0.702);
rForegroundColor = basegfx::BColor(0.439,0.263,0.0);
break;
- case InfoBarType::Danger: // red; #7A0006/122,0,6; #FFBABA/255,186,186
+ case InfobarType::DANGER: // red; #7A0006/122,0,6; #FFBABA/255,186,186
rBackgroundColor = basegfx::BColor(1.0,0.729,0.729);
rForegroundColor = basegfx::BColor(0.478,0.0,0.024);
break;
- }//switch
+ }
//remove this?
const StyleSettings& rSettings = Application::GetSettings().GetStyleSettings();
@@ -70,26 +71,26 @@ void GetInfoBarColors(InfoBarType ibType, BColor& rBackgroundColor, BColor& rFo
}
}
-OUString GetInfoBarIconName(InfoBarType ibType)
+OUString GetInfoBarIconName(InfobarType ibType)
{
OUString aRet;
switch (ibType)
{
- case InfoBarType::Info:
+ case InfobarType::INFO:
aRet = "vcl/res/infobox.svg";
break;
- case InfoBarType::Success:
+ case InfobarType::SUCCESS:
aRet = "vcl/res/successbox.svg";
break;
- case InfoBarType::Warning:
+ case InfobarType::WARNING:
aRet = "vcl/res/warningbox.svg";
break;
- case InfoBarType::Danger:
+ case InfobarType::DANGER:
aRet = "vcl/res/errorbox.svg";
break;
- }//switch
+ }
return aRet;
}
@@ -103,7 +104,7 @@ public:
explicit SfxCloseButton(vcl::Window* pParent) : PushButton(pParent, 0)
{
basegfx::BColor aMessageColor;
- GetInfoBarColors(InfoBarType::Warning,m_aBackgroundColor,m_aForegroundColor,aMessageColor);
+ GetInfoBarColors(InfobarType::WARNING, m_aBackgroundColor, m_aForegroundColor, aMessageColor);
}
virtual void Paint(vcl::RenderContext& rRenderContext, const ::tools::Rectangle& rRect) override;
@@ -174,14 +175,17 @@ void SfxCloseButton::setForegroundColor(const basegfx::BColor& rColor)
} // anonymous namespace
SfxInfoBarWindow::SfxInfoBarWindow(vcl::Window* pParent, const OUString& sId,
- const OUString& sMessage,
- InfoBarType ibType,
+ const OUString& sPrimaryMessage,
+ const OUString& sSecondaryMessage,
+ InfobarType ibType,
+ bool bShowCloseButton,
WinBits nMessageStyle = WB_LEFT|WB_VCENTER) :
Window(pParent, 0),
m_sId(sId),
m_eType(ibType),
m_pImage(VclPtr<FixedImage>::Create(this, nMessageStyle)),
- m_pMessage(VclPtr<FixedText>::Create(this, nMessageStyle | WB_WORDBREAK)),
+ m_pPrimaryMessage(VclPtr<FixedText>::Create(this, nMessageStyle | WB_WORDBREAK)),
+ m_pSecondaryMessage(VclPtr<FixedText>::Create(this, nMessageStyle | WB_WORDBREAK)),
m_pCloseBtn(VclPtr<SfxCloseButton>::Create(this)),
m_aActionBtns()
{
@@ -194,11 +198,23 @@ SfxInfoBarWindow::SfxInfoBarWindow(vcl::Window* pParent, const OUString& sId,
m_pImage->SetPaintTransparent(true);
m_pImage->Show();
- m_pMessage->SetText(sMessage);
- m_pMessage->Show();
+ vcl::Font aFont(m_pPrimaryMessage->GetControlFont());
+ aFont.SetWeight(WEIGHT_BOLD);
+ m_pPrimaryMessage->SetControlFont(aFont);
+ if (!sPrimaryMessage.isEmpty())
+ {
+ m_pPrimaryMessage->SetText(sPrimaryMessage);
+ m_pPrimaryMessage->Show();
+ }
+
+ m_pSecondaryMessage->SetText(sSecondaryMessage);
+ m_pSecondaryMessage->Show();
- m_pCloseBtn->SetClickHdl(LINK(this, SfxInfoBarWindow, CloseHandler));
- m_pCloseBtn->Show();
+ if (bShowCloseButton)
+ {
+ m_pCloseBtn->SetClickHdl(LINK(this, SfxInfoBarWindow, CloseHandler));
+ m_pCloseBtn->Show();
+ }
EnableChildTransparentMode();
@@ -217,14 +233,15 @@ SfxInfoBarWindow::~SfxInfoBarWindow()
disposeOnce();
}
-void SfxInfoBarWindow::SetForeAndBackgroundColors(InfoBarType eType)
+void SfxInfoBarWindow::SetForeAndBackgroundColors(InfobarType eType)
{
basegfx::BColor aMessageColor;
GetInfoBarColors(eType,m_aBackgroundColor,m_aForegroundColor,aMessageColor);
static_cast<SfxCloseButton*>(m_pCloseBtn.get())->setBackgroundColor(m_aBackgroundColor);
static_cast<SfxCloseButton*>(m_pCloseBtn.get())->setForegroundColor(m_aForegroundColor);
- m_pMessage->SetControlForeground(Color(aMessageColor));
+ m_pPrimaryMessage->SetControlForeground(Color(aMessageColor));
+ m_pSecondaryMessage->SetControlForeground(Color(aMessageColor));
}
void SfxInfoBarWindow::dispose()
@@ -233,7 +250,8 @@ void SfxInfoBarWindow::dispose()
rxBtn.disposeAndClear();
m_pImage.disposeAndClear();
- m_pMessage.disposeAndClear();
+ m_pPrimaryMessage.disposeAndClear();
+ m_pSecondaryMessage.disposeAndClear();
m_pCloseBtn.disposeAndClear();
m_aActionBtns.clear( );
vcl::Window::dispose();
@@ -297,12 +315,19 @@ void SfxInfoBarWindow::Resize()
nX -= nButtonGap;
}
- Point aMessagePosition(32 * fScaleFactor + 10 * fScaleFactor, 10 * fScaleFactor);
+ Point aPrimaryMessagePosition(32 * fScaleFactor + 10 * fScaleFactor, 10 * fScaleFactor);
+ Point aSecondaryMessagePosition(aPrimaryMessagePosition);
Size aMessageSize(nX - 35 * fScaleFactor, 20 * fScaleFactor);
- Size aActualSize = m_pMessage->CalcMinimumSize(aMessageSize.getWidth());
- long aMinimumHeight = m_pMessage->CalcMinimumSize().getHeight();
+ Size aPrimaryTextSize = m_pPrimaryMessage->CalcMinimumSize(aMessageSize.getWidth());
+ Size aSecondaryTextSize = m_pSecondaryMessage->CalcMinimumSize(aMessageSize.getWidth()
+ - aPrimaryTextSize.getWidth());
+ if (!m_pPrimaryMessage->GetText().isEmpty())
+ aSecondaryMessagePosition.AdjustX(aPrimaryTextSize.getWidth() + 6 * fScaleFactor);
+
+ long aMinimumHeight = std::max(m_pPrimaryMessage->CalcMinimumSize().getHeight(),
+ m_pSecondaryMessage->CalcMinimumSize().getHeight());
- long aExtraHeight = aActualSize.getHeight() - aMinimumHeight;
+ long aExtraHeight = aSecondaryTextSize.getHeight() - aMinimumHeight;
// The message won't be legible and the window will get too high
if (aMessageSize.getWidth() < 30)
@@ -310,13 +335,14 @@ void SfxInfoBarWindow::Resize()
aExtraHeight = 0;
}
- m_pMessage->SetPosSizePixel(aMessagePosition, aActualSize);
+ m_pPrimaryMessage->SetPosSizePixel(aPrimaryMessagePosition, aPrimaryTextSize);
+ m_pSecondaryMessage->SetPosSizePixel(aSecondaryMessagePosition, aSecondaryTextSize);
m_pImage->SetPosSizePixel(Point(4, 4), Size(32 * fScaleFactor, 32 * fScaleFactor));
SetPosSizePixel(Point(0, 0), Size(nWidth, INFO_BAR_BASE_HEIGHT * fScaleFactor + aExtraHeight * fScaleFactor));
}
-void SfxInfoBarWindow::Update( const OUString &sNewMessage, InfoBarType eType )
+void SfxInfoBarWindow::Update( const OUString& sPrimaryMessage, const OUString& sSecondaryMessage, InfobarType eType )
{
if (m_eType != eType)
{
@@ -325,7 +351,8 @@ void SfxInfoBarWindow::Update( const OUString &sNewMessage, InfoBarType eType )
m_pImage->SetImage(Image(StockImage::Yes, GetInfoBarIconName(eType)));
}
- m_pMessage->SetText( sNewMessage );
+ m_pPrimaryMessage->SetText( sPrimaryMessage );
+ m_pSecondaryMessage->SetText( sSecondaryMessage );
Resize();
Invalidate();
}
@@ -355,14 +382,15 @@ void SfxInfoBarContainerWindow::dispose()
Window::dispose();
}
-VclPtr<SfxInfoBarWindow> SfxInfoBarContainerWindow::appendInfoBar(const OUString& sId,
- const OUString& sMessage,
- InfoBarType ibType,
- WinBits nMessageStyle)
+VclPtr<SfxInfoBarWindow>
+SfxInfoBarContainerWindow::appendInfoBar(const OUString& sId, const OUString& sPrimaryMessage,
+ const OUString& sSecondaryMessage, InfobarType ibType,
+ WinBits nMessageStyle, bool bShowCloseButton)
{
Size aSize = GetSizePixel();
- auto pInfoBar = VclPtr<SfxInfoBarWindow>::Create(this, sId, sMessage, ibType, nMessageStyle);
+ auto pInfoBar = VclPtr<SfxInfoBarWindow>::Create(this, sId, sPrimaryMessage, sSecondaryMessage,
+ ibType, nMessageStyle, bShowCloseButton);
basegfx::BColor aBackgroundColor;
basegfx::BColor aForegroundColor;
diff --git a/sfx2/source/doc/objserv.cxx b/sfx2/source/doc/objserv.cxx
index 24cfa8afd294..b438d2d4e269 100644
--- a/sfx2/source/doc/objserv.cxx
+++ b/sfx2/source/doc/objserv.cxx
@@ -1300,35 +1300,35 @@ void SfxObjectShell::GetState_Impl(SfxItemSet &rSet)
if ( pFrame )
{
SignatureState eState = GetDocumentSignatureState();
- InfoBarType aInfoBarType(InfoBarType::Info);
+ InfobarType aInfobarType(InfobarType::INFO);
OUString sMessage("");
switch (eState)
{
case SignatureState::BROKEN:
sMessage = SfxResId(STR_SIGNATURE_BROKEN);
- aInfoBarType = InfoBarType::Danger;
+ aInfobarType = InfobarType::DANGER;
break;
case SignatureState::INVALID:
sMessage = SfxResId(STR_SIGNATURE_INVALID);
// Warning only, I've tried Danger and it looked too scary
- aInfoBarType = InfoBarType::Warning;
+ aInfobarType = InfobarType::WARNING;
break;
case SignatureState::NOTVALIDATED:
sMessage = SfxResId(STR_SIGNATURE_NOTVALIDATED);
- aInfoBarType = InfoBarType::Warning;
+ aInfobarType = InfobarType::WARNING;
break;
case SignatureState::PARTIAL_OK:
sMessage = SfxResId(STR_SIGNATURE_PARTIAL_OK);
- aInfoBarType = InfoBarType::Warning;
+ aInfobarType = InfobarType::WARNING;
break;
case SignatureState::OK:
sMessage = SfxResId(STR_SIGNATURE_OK);
- aInfoBarType = InfoBarType::Info;
+ aInfobarType = InfobarType::INFO;
break;
case SignatureState::NOTVALIDATED_PARTIAL_OK:
sMessage = SfxResId(STR_SIGNATURE_NOTVALIDATED_PARTIAL_OK);
- aInfoBarType = InfoBarType::Warning;
+ aInfobarType = InfobarType::WARNING;
break;
//FIXME SignatureState::Unknown, own message?
default:
@@ -1340,7 +1340,7 @@ void SfxObjectShell::GetState_Impl(SfxItemSet &rSet)
{
if ( !sMessage.isEmpty() )
{
- auto pInfoBar = pFrame->AppendInfoBar("signature", sMessage, aInfoBarType);
+ auto pInfoBar = pFrame->AppendInfoBar("signature", "", sMessage, aInfobarType);
if (pInfoBar == nullptr || pInfoBar->IsDisposed())
return;
VclPtrInstance<PushButton> xBtn(&(pFrame->GetWindow()));
@@ -1355,7 +1355,7 @@ void SfxObjectShell::GetState_Impl(SfxItemSet &rSet)
if ( eState == SignatureState::NOSIGNATURES )
pFrame->RemoveInfoBar("signature");
else
- pFrame->UpdateInfoBar("signature", sMessage, aInfoBarType);
+ pFrame->UpdateInfoBar("signature", "", sMessage, aInfobarType);
}
}
diff --git a/sfx2/source/view/classificationhelper.cxx b/sfx2/source/view/classificationhelper.cxx
index 57c6a50df38f..66d27a07375c 100644
--- a/sfx2/source/view/classificationhelper.cxx
+++ b/sfx2/source/view/classificationhelper.cxx
@@ -693,11 +693,11 @@ bool SfxClassificationHelper::HasDocumentFooter()
return it != rCategory.m_aLabels.end() && !it->second.isEmpty();
}
-InfoBarType SfxClassificationHelper::GetImpactLevelType()
+InfobarType SfxClassificationHelper::GetImpactLevelType()
{
- InfoBarType aRet;
+ InfobarType aRet;
- aRet = InfoBarType::Warning;
+ aRet = InfobarType::WARNING;
auto itCategory = m_pImpl->m_aCategory.find(SfxClassificationPolicyType::IntellectualProperty);
if (itCategory == m_pImpl->m_aCategory.end())
@@ -718,22 +718,22 @@ InfoBarType SfxClassificationHelper::GetImpactLevelType()
if (aScale == "UK-Cabinet")
{
if (aLevel == "0")
- aRet = InfoBarType::Success;
+ aRet = InfobarType::SUCCESS;
else if (aLevel == "1")
- aRet = InfoBarType::Warning;
+ aRet = InfobarType::WARNING;
else if (aLevel == "2")
- aRet = InfoBarType::Warning;
+ aRet = InfobarType::WARNING;
else if (aLevel == "3")
- aRet = InfoBarType::Danger;
+ aRet = InfobarType::DANGER;
}
else if (aScale == "FIPS-199")
{
if (aLevel == "Low")
- aRet = InfoBarType::Success;
+ aRet = InfobarType::SUCCESS;
else if (aLevel == "Moderate")
- aRet = InfoBarType::Warning;
+ aRet = InfobarType::WARNING;
else if (aLevel == "High")
- aRet = InfoBarType::Danger;
+ aRet = InfobarType::DANGER;
}
return aRet;
}
@@ -890,7 +890,7 @@ void SfxClassificationHelper::UpdateInfobar(SfxViewFrame& rViewFrame)
aMessage = aMessage.replaceFirst("%1", aBACName);
rViewFrame.RemoveInfoBar("classification");
- rViewFrame.AppendInfoBar("classification", aMessage, GetImpactLevelType());
+ rViewFrame.AppendInfoBar("classification", "", aMessage, GetImpactLevelType());
}
}
diff --git a/sfx2/source/view/sfxbasecontroller.cxx b/sfx2/source/view/sfxbasecontroller.cxx
index 7812b560de2a..f4cf6768a8b3 100644
--- a/sfx2/source/view/sfxbasecontroller.cxx
+++ b/sfx2/source/view/sfxbasecontroller.cxx
@@ -99,6 +99,7 @@ using ::com::sun::star::frame::XDispatchProvider;
using ::com::sun::star::document::XViewDataSupplier;
using ::com::sun::star::container::XIndexAccess;
using ::com::sun::star::beans::PropertyValue;
+using ::com::sun::star::beans::StringPair;
using ::com::sun::star::uno::Sequence;
using ::com::sun::star::uno::UNO_QUERY;
using ::com::sun::star::uno::Exception;
@@ -1395,7 +1396,8 @@ void SfxBaseController::ShowInfoBars( )
// Get the Frame and show the InfoBar if not checked out
SfxViewFrame* pViewFrame = m_pData->m_pViewShell->GetFrame();
- auto pInfoBar = pViewFrame->AppendInfoBar( "checkout", SfxResId( STR_NONCHECKEDOUT_DOCUMENT ), InfoBarType::Warning);
+ auto pInfoBar = pViewFrame->AppendInfoBar("checkout", "", SfxResId(STR_NONCHECKEDOUT_DOCUMENT),
+ InfobarType::WARNING);
if (pInfoBar)
{
VclPtrInstance<PushButton> xBtn(&pViewFrame->GetWindow());
@@ -1469,4 +1471,64 @@ void SfxBaseController::initialize( const css::uno::Sequence< css::uno::Any >& /
{
}
+void SAL_CALL SfxBaseController::appendInfobar(const OUString& sId, const OUString& sPrimaryMessage,
+ const OUString& sSecondaryMessage,
+ sal_Int32 aInfobarType,
+ const Sequence<StringPair>& actionButtons,
+ sal_Bool bShowCloseButton)
+{
+ if (aInfobarType < static_cast<sal_Int32>(InfobarType::INFO)
+ || aInfobarType > static_cast<sal_Int32>(InfobarType::DANGER))
+ throw lang::IllegalArgumentException("Undefined InfobarType: "
+ + OUString::number(aInfobarType),
+ static_cast<::cppu::OWeakObject*>(this), 0);
+ SfxViewFrame* pViewFrame = m_pData->m_pViewShell->GetFrame();
+ if (pViewFrame->HasInfoBarWithID(sId))
+ throw lang::IllegalArgumentException("Infobar with ID '" + sId + "' already existing.",
+ static_cast<::cppu::OWeakObject*>(this), 0);
+
+ auto pInfoBar
+ = pViewFrame->AppendInfoBar(sId, sPrimaryMessage, sSecondaryMessage,
+ static_cast<InfobarType>(aInfobarType), bShowCloseButton);
+ if (!pInfoBar)
+ throw uno::RuntimeException("Could not create Infobar");
+
+ auto vActionButtons = comphelper::sequenceToContainer<std::vector<StringPair>>(actionButtons);
+ for (auto& actionButton : vActionButtons)
+ {
+ if (actionButton.First.isEmpty() || actionButton.Second.isEmpty())
+ continue;
+ VclPtrInstance<PushButton> xBtn(&pViewFrame->GetWindow());
+ xBtn->SetText(actionButton.First);
+ xBtn->SetSizePixel(xBtn->GetOptimalSize());
+ xBtn->SetCommandHandler(actionButton.Second);
+ pInfoBar->addButton(xBtn);
+ }
+}
+
+void SAL_CALL SfxBaseController::updateInfobar(const OUString& sId, const OUString& sPrimaryMessage,
+ const OUString& sSecondaryMessage,
+ sal_Int32 aInfobarType)
+{
+ if (aInfobarType < static_cast<sal_Int32>(InfobarType::INFO)
+ || aInfobarType > static_cast<sal_Int32>(InfobarType::DANGER))
+ throw lang::IllegalArgumentException("Undefined InfobarType: "
+ + OUString::number(aInfobarType),
+ static_cast<::cppu::OWeakObject*>(this), 0);
+ SfxViewFrame* pViewFrame = m_pData->m_pViewShell->GetFrame();
+ if (!pViewFrame->HasInfoBarWithID(sId))
+ throw css::container::NoSuchElementException("Infobar with ID '" + sId + "' not found.");
+
+ pViewFrame->UpdateInfoBar(sId, sPrimaryMessage, sSecondaryMessage,
+ static_cast<InfobarType>(aInfobarType));
+}
+
+void SAL_CALL SfxBaseController::removeInfobar(const OUString& sId)
+{
+ SfxViewFrame* pViewFrame = m_pData->m_pViewShell->GetFrame();
+ if (!pViewFrame->HasInfoBarWithID(sId))
+ throw css::container::NoSuchElementException("Infobar with ID '" + sId + "' not found.");
+ pViewFrame->RemoveInfoBar(sId);
+}
+
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sfx2/source/view/viewfrm.cxx b/sfx2/source/view/viewfrm.cxx
index 6dccb522c14b..80d66831f0bb 100644
--- a/sfx2/source/view/viewfrm.cxx
+++ b/sfx2/source/view/viewfrm.cxx
@@ -1300,7 +1300,7 @@ void SfxViewFrame::Notify( SfxBroadcaster& /*rBC*/, const SfxHint& rHint )
sal_Int32 iLast = sLastVersion.getToken(0,'.').toInt32() * 10 + sLastVersion.getToken(1,'.').toInt32();
if ((iCurrent > iLast) && !Application::IsHeadlessModeEnabled() && !bIsUITest)
{
- VclPtr<SfxInfoBarWindow> pInfoBar = AppendInfoBar("whatsnew", SfxResId(STR_WHATSNEW_TEXT), InfoBarType::Info);
+ VclPtr<SfxInfoBarWindow> pInfoBar = AppendInfoBar("whatsnew", "", SfxResId(STR_WHATSNEW_TEXT), InfobarType::INFO);
if (pInfoBar)
{
VclPtrInstance<PushButton> xWhatsNewButton(&GetWindow());
@@ -1342,7 +1342,7 @@ void SfxViewFrame::Notify( SfxBroadcaster& /*rBC*/, const SfxHint& rHint )
{
bUpdateLastTimeGetInvolvedShown = true;
- VclPtr<SfxInfoBarWindow> pInfoBar = AppendInfoBar("getinvolved", SfxResId(STR_GET_INVOLVED_TEXT), InfoBarType::Info);
+ VclPtr<SfxInfoBarWindow> pInfoBar = AppendInfoBar("getinvolved", "", SfxResId(STR_GET_INVOLVED_TEXT), InfobarType::INFO);
VclPtrInstance<PushButton> xGetInvolvedButton(&GetWindow());
xGetInvolvedButton->SetText(SfxResId(STR_GET_INVOLVED_BUTTON));
@@ -1369,7 +1369,7 @@ void SfxViewFrame::Notify( SfxBroadcaster& /*rBC*/, const SfxHint& rHint )
{
bUpdateLastTimeDonateShown = true;
- VclPtr<SfxInfoBarWindow> pInfoBar = AppendInfoBar("donate", SfxResId(STR_DONATE_TEXT), InfoBarType::Info);
+ VclPtr<SfxInfoBarWindow> pInfoBar = AppendInfoBar("donate", "", SfxResId(STR_DONATE_TEXT), InfobarType::INFO);
VclPtrInstance<PushButton> xDonateButton(&GetWindow());
xDonateButton->SetText(SfxResId(STR_DONATE_BUTTON));
@@ -1396,7 +1396,7 @@ void SfxViewFrame::Notify( SfxBroadcaster& /*rBC*/, const SfxHint& rHint )
{
bool bSignPDF = IsSignPDF(m_xObjSh);
- auto pInfoBar = AppendInfoBar("readonly", SfxResId(bSignPDF ? STR_READONLY_PDF : STR_READONLY_DOCUMENT), InfoBarType::Info);
+ auto pInfoBar = AppendInfoBar("readonly", "", SfxResId(bSignPDF ? STR_READONLY_PDF : STR_READONLY_DOCUMENT), InfobarType::INFO);
if (pInfoBar)
{
if (bSignPDF)
@@ -3283,22 +3283,23 @@ void SfxViewFrame::SetViewFrame( SfxViewFrame* pFrame )
}
VclPtr<SfxInfoBarWindow> SfxViewFrame::AppendInfoBar(const OUString& sId,
- const OUString& sMessage,
- InfoBarType aInfoBarType)
+ const OUString& sPrimaryMessage,
+ const OUString& sSecondaryMessage,
+ InfobarType aInfobarType, bool bShowCloseButton)
{
SfxChildWindow* pChild = GetChildWindow(SfxInfoBarContainerChild::GetChildWindowId());
if (!pChild)
return nullptr;
SfxInfoBarContainerWindow* pInfoBarContainer = static_cast<SfxInfoBarContainerWindow*>(pChild->GetWindow());
- auto pInfoBar = pInfoBarContainer->appendInfoBar(sId, sMessage, aInfoBarType, WB_LEFT | WB_VCENTER);
+ auto pInfoBar = pInfoBarContainer->appendInfoBar(sId, sPrimaryMessage, sSecondaryMessage,
+ aInfobarType, WB_LEFT | WB_VCENTER, bShowCloseButton);
ShowChildWindow(SfxInfoBarContainerChild::GetChildWindowId());
return pInfoBar;
}
-void SfxViewFrame::UpdateInfoBar( const OUString& sId,
- const OUString& sMessage,
- InfoBarType eType )
+void SfxViewFrame::UpdateInfoBar(const OUString& sId, const OUString& sPrimaryMessage,
+ const OUString& sSecondaryMessage, InfobarType eType)
{
const sal_uInt16 nId = SfxInfoBarContainerChild::GetChildWindowId();
@@ -3313,7 +3314,7 @@ void SfxViewFrame::UpdateInfoBar( const OUString& sId,
auto pInfoBar = pInfoBarContainer->getInfoBar(sId);
if (pInfoBar)
- pInfoBar->Update(sMessage, eType);
+ pInfoBar->Update(sPrimaryMessage, sSecondaryMessage, eType);
}
}