diff options
author | Samuel Mehrbrodt <Samuel.Mehrbrodt@cib.de> | 2019-11-18 09:08:03 +0100 |
---|---|---|
committer | Samuel Mehrbrodt <Samuel.Mehrbrodt@cib.de> | 2019-11-19 08:51:43 +0100 |
commit | 9e3ba7c3036c4d21e01d6f75ed29a1e8c4208141 (patch) | |
tree | c648a26f2445955be14aa6e96815c14ec193dddc /sfx2/source | |
parent | b234743dd26e0be4be272d2d2c82f90c67e192b7 (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>
Diffstat (limited to 'sfx2/source')
-rw-r--r-- | sfx2/source/dialog/infobar.cxx | 98 | ||||
-rw-r--r-- | sfx2/source/doc/objserv.cxx | 18 | ||||
-rw-r--r-- | sfx2/source/view/classificationhelper.cxx | 22 | ||||
-rw-r--r-- | sfx2/source/view/sfxbasecontroller.cxx | 64 | ||||
-rw-r--r-- | sfx2/source/view/viewfrm.cxx | 23 |
5 files changed, 158 insertions, 67 deletions
diff --git a/sfx2/source/dialog/infobar.cxx b/sfx2/source/dialog/infobar.cxx index 84ab3d85f8d0..a1c9ef21cbee 100644 --- a/sfx2/source/dialog/infobar.cxx +++ b/sfx2/source/dialog/infobar.cxx @@ -30,35 +30,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(); @@ -69,26 +70,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; } @@ -102,7 +103,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; @@ -169,14 +170,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() { @@ -189,11 +193,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(); @@ -212,14 +228,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() @@ -228,7 +245,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(); @@ -292,12 +310,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) @@ -305,13 +330,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) { @@ -320,7 +346,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(); } @@ -350,14 +377,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 512fe81d6efd..ff155a031383 100644 --- a/sfx2/source/doc/objserv.cxx +++ b/sfx2/source/doc/objserv.cxx @@ -1298,35 +1298,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: @@ -1338,7 +1338,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())); @@ -1353,7 +1353,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); } } |