| /************************************************************** |
| * |
| * Licensed to the Apache Software Foundation (ASF) under one |
| * or more contributor license agreements. See the NOTICE file |
| * distributed with this work for additional information |
| * regarding copyright ownership. The ASF licenses this file |
| * to you under the Apache License, Version 2.0 (the |
| * "License"); you may not use this file except in compliance |
| * with the License. You may obtain a copy of the License at |
| * |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, |
| * software distributed under the License is distributed on an |
| * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY |
| * KIND, either express or implied. See the License for the |
| * specific language governing permissions and limitations |
| * under the License. |
| * |
| *************************************************************/ |
| |
| #ifndef SFX_SIDEBAR_RESOURCE_MANAGER_HXX |
| #define SFX_SIDEBAR_RESOURCE_MANAGER_HXX |
| |
| #include "DeckDescriptor.hxx" |
| #include "PanelDescriptor.hxx" |
| #include "Context.hxx" |
| #include <unotools/confignode.hxx> |
| #include <com/sun/star/frame/XFrame.hpp> |
| #include <set> |
| #include <boost/shared_ptr.hpp> |
| |
| |
| namespace css = ::com::sun::star; |
| namespace cssu = ::com::sun::star::uno; |
| |
| namespace sfx2 { namespace sidebar { |
| |
| class Context; |
| class ContextList; |
| |
| /** Read the content of the Sidebar.xcu file and provide access |
| methods so that the sidebar can easily decide which content panels |
| to display for a certain context. |
| */ |
| class ResourceManager |
| { |
| public: |
| static ResourceManager& Instance (void); |
| |
| const DeckDescriptor* GetDeckDescriptor ( |
| const ::rtl::OUString& rsDeckId) const; |
| const PanelDescriptor* GetPanelDescriptor ( |
| const ::rtl::OUString& rsPanelId) const; |
| |
| /** Excluded or include a deck from being displayed in the tab |
| bar. |
| Note that this value is not persistent. |
| The flag can not be set directly at a DeckDescriptor object |
| because the ResourceManager gives access to to them only |
| read-only. |
| */ |
| void SetIsDeckEnabled ( |
| const ::rtl::OUString& rsDeckId, |
| const bool bIsEnabled); |
| |
| class DeckContextDescriptor |
| { |
| public: |
| ::rtl::OUString msId; |
| bool mbIsEnabled; |
| }; |
| typedef ::std::vector<DeckContextDescriptor> DeckContextDescriptorContainer; |
| |
| class PanelContextDescriptor |
| { |
| public: |
| ::rtl::OUString msId; |
| ::rtl::OUString msMenuCommand; |
| bool mbIsInitiallyVisible; |
| bool mbShowForReadOnlyDocuments; |
| }; |
| typedef ::std::vector<PanelContextDescriptor> PanelContextDescriptorContainer; |
| |
| const DeckContextDescriptorContainer& GetMatchingDecks ( |
| DeckContextDescriptorContainer& rDeckDescriptors, |
| const Context& rContext, |
| const bool bIsDocumentReadOnly, |
| const cssu::Reference<css::frame::XFrame>& rxFrame); |
| |
| const PanelContextDescriptorContainer& GetMatchingPanels ( |
| PanelContextDescriptorContainer& rPanelDescriptors, |
| const Context& rContext, |
| const ::rtl::OUString& rsDeckId, |
| const cssu::Reference<css::frame::XFrame>& rxFrame); |
| |
| /** Remember the expansions state per panel and context. |
| This is not persistent past application end. |
| */ |
| void StorePanelExpansionState ( |
| const ::rtl::OUString& rsPanelId, |
| const bool bExpansionState, |
| const Context& rContext); |
| |
| private: |
| ResourceManager (void); |
| ~ResourceManager (void); |
| class Deleter; |
| friend class Deleter; |
| |
| typedef ::std::vector<DeckDescriptor> DeckContainer; |
| DeckContainer maDecks; |
| typedef ::std::vector<PanelDescriptor> PanelContainer; |
| PanelContainer maPanels; |
| mutable ::std::set<rtl::OUString> maProcessedApplications; |
| |
| void ReadDeckList (void); |
| void ReadPanelList (void); |
| void ReadContextList ( |
| const ::utl::OConfigurationNode& rNode, |
| ContextList& rContextList, |
| const ::rtl::OUString& rsDefaultMenuCommand) const; |
| void ReadLegacyAddons ( |
| const cssu::Reference<css::frame::XFrame>& rxFrame); |
| ::utl::OConfigurationTreeRoot GetLegacyAddonRootNode ( |
| const ::rtl::OUString& rsModuleName) const; |
| void GetToolPanelNodeNames ( |
| ::std::vector<rtl::OUString>& rMatchingNames, |
| const ::utl::OConfigurationTreeRoot aRoot) const; |
| bool IsDeckEnabled ( |
| const ::rtl::OUString& rsDeckId, |
| const Context& rContext, |
| const cssu::Reference<css::frame::XFrame>& rxFrame) const; |
| }; |
| |
| |
| } } // end of namespace sfx2::sidebar |
| |
| #endif |