diff options
Diffstat (limited to 'sfx2/source/sidebar/TabBar.hxx')
-rw-r--r-- | sfx2/source/sidebar/TabBar.hxx | 120 |
1 files changed, 120 insertions, 0 deletions
diff --git a/sfx2/source/sidebar/TabBar.hxx b/sfx2/source/sidebar/TabBar.hxx new file mode 100644 index 000000000000..50ea6f3537d0 --- /dev/null +++ b/sfx2/source/sidebar/TabBar.hxx @@ -0,0 +1,120 @@ +/* + * 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/. + * + * This file incorporates work covered by the following license notice: + * + * 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 . + */ +#ifndef SFX_SIDEBAR_TAB_BAR_HXX +#define SFX_SIDEBAR_TAB_BAR_HXX + +#include "DeckDescriptor.hxx" +#include "ResourceManager.hxx" + +#include <vcl/menu.hxx> +#include <vcl/window.hxx> + +#include <com/sun/star/frame/XFrame.hpp> +#include <boost/function.hpp> +#include <boost/tuple/tuple.hpp> +#include <boost/scoped_ptr.hpp> + +class Button; +class RadioButton; + +namespace css = ::com::sun::star; +namespace cssu = ::com::sun::star::uno; + + +namespace sfx2 { namespace sidebar { + +class FocusManager; +class TabBarConfiguration; +class TabItem; + +/** The tab bar is the container for the individual tabs. +*/ +class TabBar + : public Window +{ +public: + /** DeckMenuData has entries for display name, deck id, and a flag: + - isCurrentDeck for the deck selection data + - isEnabled for the show/hide menu + */ + typedef ::boost::tuple<rtl::OUString,rtl::OUString,bool> DeckMenuData; + typedef ::boost::function<void( + const Rectangle&, + const ::std::vector<DeckMenuData>& rDeckSelectionData, + const ::std::vector<DeckMenuData>& rDeckShowData)> PopupMenuProvider; + TabBar ( + Window* pParentWindow, + const cssu::Reference<css::frame::XFrame>& rxFrame, + const ::boost::function<void(const ::rtl::OUString&rsDeckId)>& rDeckActivationFunctor, + const PopupMenuProvider& rPopupMenuProvider); + virtual ~TabBar (void); + + virtual void Paint (const Rectangle& rUpdateArea); + virtual void DataChanged (const DataChangedEvent& rDataChangedEvent); + + static sal_Int32 GetDefaultWidth (void); + + void SetDecks ( + const ResourceManager::IdContainer& rDeckIds); + void HighlightDeck (const ::rtl::OUString& rsDeckId); + void AddPopupMenuEntries ( + PopupMenu& rMenu, + const sal_Int32 nFirstIndex); + void AddCustomizationMenuEntries ( + PopupMenu& rMenu, + const sal_Int32 nFirstIndex); + const ::rtl::OUString GetDeckIdForIndex (const sal_Int32 nIndex) const; + void ToggleHideFlag (const sal_Int32 nIndex); + void RestoreHideFlags (void); + + void UpdateFocusManager (FocusManager& rFocusManager); + +private: + cssu::Reference<css::frame::XFrame> mxFrame; + ::boost::scoped_ptr<Button> mpMenuButton; + class Item + { + public: + DECL_LINK(HandleClick, Button*); + ::boost::shared_ptr<RadioButton> mpButton; + ::rtl::OUString msDeckId; + ::boost::function<void(const ::rtl::OUString&rsDeckId)> maDeckActivationFunctor; + bool mbIsHidden; + bool mbIsHiddenByDefault; + }; + typedef ::std::vector<Item> ItemContainer; + ItemContainer maItems; + const ::boost::function<void(const ::rtl::OUString&rsDeckId)> maDeckActivationFunctor; + sal_Int32 mnMenuSeparatorY; + PopupMenuProvider maPopupMenuProvider; + + RadioButton* CreateTabItem (const DeckDescriptor& rDeckDescriptor); + Image GetItemImage (const DeckDescriptor& rDeskDescriptor) const; + void Layout (void); + void UpdateButtonIcons (void); + + ::boost::shared_ptr<PopupMenu> CreatePopupMenu (void) const; + void ShowPopupMenu (void) const; + DECL_LINK(OnToolboxClicked, void*); + +}; + + +} } // end of namespace sfx2::sidebar + +#endif |