include/sfx2/sidebar/ContextList.hxx | 1 + sfx2/source/sidebar/ContextList.cxx | 20 ++++++++++++++++++++ sfx2/source/sidebar/ResourceManager.cxx | 9 ++++----- sfx2/source/sidebar/TabBar.cxx | 10 ++++++++++ 4 files changed, 35 insertions(+), 5 deletions(-)
New commits: commit 9da397de852b5d7a6eb77293030ea895bd42a2cd Author: Katarina Behrens <katarina.behr...@cib.de> Date: Tue Mar 22 16:32:47 2016 +0100 tdf#97398: Toggle deck/panel visibility individually for each app Change in visibility of a shared deck ('any, any, ...') or panel made in 1 app must not affect its visibility in the remaining apps Change-Id: I78472ce078409edec796ef649349df4bda62a709 Reviewed-on: https://gerrit.libreoffice.org/23432 Tested-by: Jenkins <c...@libreoffice.org> Reviewed-by: Katarina Behrens <katarina.behr...@cib.de> (cherry picked from commit 1a045a9df7918adf4c0d8a62db3331f120266c6e) Reviewed-on: https://gerrit.libreoffice.org/23712 Reviewed-by: Miklos Vajna <vmik...@collabora.co.uk> diff --git a/include/sfx2/sidebar/ContextList.hxx b/include/sfx2/sidebar/ContextList.hxx index 9c56d15..8e9c1ce 100644 --- a/include/sfx2/sidebar/ContextList.hxx +++ b/include/sfx2/sidebar/ContextList.hxx @@ -55,6 +55,7 @@ public: const bool bIsInitiallyVisible, const ::rtl::OUString& rsMenuCommand); + void ToggleVisibilityForContext( const Context& rContext,const bool bIsInitiallyVisible ); const ::std::vector<Entry>& GetEntries() const {return maEntries;}; private: diff --git a/sfx2/source/sidebar/ContextList.cxx b/sfx2/source/sidebar/ContextList.cxx index 6b95196..f515dcf 100644 --- a/sfx2/source/sidebar/ContextList.cxx +++ b/sfx2/source/sidebar/ContextList.cxx @@ -85,6 +85,26 @@ void ContextList::AddContextDescription ( maEntries.back().msMenuCommand = rsMenuCommand; } +void ContextList::ToggleVisibilityForContext( const Context &rContext, const bool bVisible) +{ + ContextList::Entry *pEntry = GetMatch( rContext ); + + if ( pEntry ) + { + const sal_Int32 nMatch( rContext.EvaluateMatch( pEntry->maContext ) ); + + if ( nMatch & Context::ApplicationWildcardMatch ) + { + // Create a separate context list entry for this app if 'any' + // is the only context that matches. Toggling the visibility + // for 'any' would change it for all apps, not just this one + AddContextDescription( rContext, bVisible, OUString() ); + } + else if ( nMatch == Context::OptimalMatch || nMatch == Context::ContextWildcardMatch ) + pEntry->mbIsInitiallyVisible = bVisible; + } +} + } } // end of namespace sfx2::sidebar /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/sfx2/source/sidebar/ResourceManager.cxx b/sfx2/source/sidebar/ResourceManager.cxx index 1389c53..b2f9d17 100644 --- a/sfx2/source/sidebar/ResourceManager.cxx +++ b/sfx2/source/sidebar/ResourceManager.cxx @@ -54,7 +54,7 @@ bool getBool(utl::OConfigurationNode const & aNode, const char* pNodeName) return comphelper::getBOOL(aNode.getNodeValue(pNodeName)); } -css::uno::Sequence<OUString> BuildContextList (ContextList rContextList, bool isEnabled) +css::uno::Sequence<OUString> BuildContextList (ContextList rContextList) { const ::std::vector<ContextList::Entry>& entries = rContextList.GetEntries(); @@ -69,7 +69,7 @@ css::uno::Sequence<OUString> BuildContextList (ContextList rContextList, bool is OUString menuCommand = iEntry->msMenuCommand; OUString visibility; - if (isEnabled) + if (iEntry->mbIsInitiallyVisible) visibility = "visible"; else visibility = "hidden"; @@ -323,7 +323,7 @@ void ResourceManager::SaveDeckSettings(const DeckDescriptor* pDeckDesc) // save deck settings - ::uno::Sequence< OUString > sContextList = BuildContextList(pDeckDesc->maContextList, pDeckDesc->mbIsEnabled); + ::uno::Sequence< OUString > sContextList = BuildContextList(pDeckDesc->maContextList); utl::OConfigurationNode aDeckNode (aDeckRootNode.openNode(pDeckDesc->msNodeName)); @@ -353,10 +353,9 @@ void ResourceManager::SaveDeckSettings(const DeckDescriptor* pDeckDesc) { Panel* aPanel = *iPanel; OUString panelId = aPanel->GetId(); - bool isExpanded = aPanel->IsExpanded(); const PanelDescriptor* pPanelDesc = GetPanelDescriptor(panelId); - ::uno::Sequence< OUString > sPanelContextList = BuildContextList(pPanelDesc->maContextList, isExpanded); + ::uno::Sequence< OUString > sPanelContextList = BuildContextList(pPanelDesc->maContextList); utl::OConfigurationNode aPanelNode (aPanelRootNode.openNode(pPanelDesc->msNodeName)); diff --git a/sfx2/source/sidebar/TabBar.cxx b/sfx2/source/sidebar/TabBar.cxx index 0c99317..ef6e185 100644 --- a/sfx2/source/sidebar/TabBar.cxx +++ b/sfx2/source/sidebar/TabBar.cxx @@ -337,8 +337,18 @@ void TabBar::ToggleHideFlag (const sal_Int32 nIndex) DeckDescriptor* pDeckDescriptor = pParentSidebarController->GetResourceManager()->GetDeckDescriptor(maItems[nIndex].msDeckId); if (pDeckDescriptor) + { pDeckDescriptor->mbIsEnabled = ! maItems[nIndex].mbIsHidden; + Context aContext; + aContext.msApplication = pParentSidebarController->GetCurrentContext().msApplication; + // leave aContext.msContext on default 'any' ... this func is used only for decks + // and we don't have context-sensitive decks anyway + + pDeckDescriptor->maContextList.ToggleVisibilityForContext( + aContext, pDeckDescriptor->mbIsEnabled ); + } + Layout(); } } _______________________________________________ Libreoffice-commits mailing list libreoffice-comm...@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/libreoffice-commits