xref: /trunk/main/svtools/source/toolpanel/tabbargeometry.hxx (revision 914d351e5f5b84e4342a86d6ab8d4aca7308b9bd)
101aa44aaSAndrew Rist /**************************************************************
2cdf0e10cSrcweir  *
301aa44aaSAndrew Rist  * Licensed to the Apache Software Foundation (ASF) under one
401aa44aaSAndrew Rist  * or more contributor license agreements.  See the NOTICE file
501aa44aaSAndrew Rist  * distributed with this work for additional information
601aa44aaSAndrew Rist  * regarding copyright ownership.  The ASF licenses this file
701aa44aaSAndrew Rist  * to you under the Apache License, Version 2.0 (the
801aa44aaSAndrew Rist  * "License"); you may not use this file except in compliance
901aa44aaSAndrew Rist  * with the License.  You may obtain a copy of the License at
10cdf0e10cSrcweir  *
1101aa44aaSAndrew Rist  *   http://www.apache.org/licenses/LICENSE-2.0
12cdf0e10cSrcweir  *
1301aa44aaSAndrew Rist  * Unless required by applicable law or agreed to in writing,
1401aa44aaSAndrew Rist  * software distributed under the License is distributed on an
1501aa44aaSAndrew Rist  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
1601aa44aaSAndrew Rist  * KIND, either express or implied.  See the License for the
1701aa44aaSAndrew Rist  * specific language governing permissions and limitations
1801aa44aaSAndrew Rist  * under the License.
19cdf0e10cSrcweir  *
2001aa44aaSAndrew Rist  *************************************************************/
2101aa44aaSAndrew Rist 
2201aa44aaSAndrew Rist 
23cdf0e10cSrcweir 
24cdf0e10cSrcweir #ifndef TABBARGEOMETRY_HXX
25cdf0e10cSrcweir #define TABBARGEOMETRY_HXX
26cdf0e10cSrcweir 
27cdf0e10cSrcweir #include "svtools/toolpanel/tabalignment.hxx"
28cdf0e10cSrcweir 
29cdf0e10cSrcweir #include "tabitemdescriptor.hxx"
30cdf0e10cSrcweir 
31cdf0e10cSrcweir #include <tools/gen.hxx>
32cdf0e10cSrcweir #include <tools/svborder.hxx>
33cdf0e10cSrcweir 
34cdf0e10cSrcweir //......................................................................................................................
35cdf0e10cSrcweir namespace svt
36cdf0e10cSrcweir {
37cdf0e10cSrcweir //......................................................................................................................
38cdf0e10cSrcweir 
39cdf0e10cSrcweir     //==================================================================================================================
40cdf0e10cSrcweir     //= NormalizedArea
41cdf0e10cSrcweir     //==================================================================================================================
42cdf0e10cSrcweir     /** a rectangle which automatically translates between unrotated and rotated geometry.
43cdf0e10cSrcweir 
44*dcaf07f7SJohn Bampton         It can be operated as if it were an unrotated area, but is able to provide coordinates of rotated objects,
45cdf0e10cSrcweir         relative to its playground.
46cdf0e10cSrcweir     */
47cdf0e10cSrcweir     class NormalizedArea
48cdf0e10cSrcweir     {
49cdf0e10cSrcweir     public:
50cdf0e10cSrcweir         NormalizedArea();
51cdf0e10cSrcweir         NormalizedArea( const Rectangle& i_rReference, const bool i_bIsVertical );
52cdf0e10cSrcweir 
53cdf0e10cSrcweir         /** transforms a rectangle, relative to our playground, into a coordinate system defined by the given alignment
54cdf0e10cSrcweir             @param i_rArea
55cdf0e10cSrcweir                 the area which is to be transformed.
56cdf0e10cSrcweir         */
57cdf0e10cSrcweir         Rectangle   getTransformed(
58cdf0e10cSrcweir                         const Rectangle& i_rArea,
59cdf0e10cSrcweir                         const TabAlignment i_eTargetAlignment
60cdf0e10cSrcweir                     ) const;
61cdf0e10cSrcweir 
62cdf0e10cSrcweir         /** normalizes an already transformed rectangle
63cdf0e10cSrcweir             @param i_rArea
64cdf0e10cSrcweir                 the area which is to be normalized.
65cdf0e10cSrcweir         */
66cdf0e10cSrcweir         Rectangle   getNormalized(
67cdf0e10cSrcweir                         const Rectangle& i_rArea,
68cdf0e10cSrcweir                         const TabAlignment i_eTargetAlignment
69cdf0e10cSrcweir                     ) const;
70cdf0e10cSrcweir 
71cdf0e10cSrcweir 
getReferenceSize() const72cdf0e10cSrcweir         Size        getReferenceSize() const { return m_aReference.GetSize(); }
73cdf0e10cSrcweir         const Rectangle&
getReference() const74cdf0e10cSrcweir                     getReference() const { return m_aReference; }
75cdf0e10cSrcweir 
76cdf0e10cSrcweir     private:
77cdf0e10cSrcweir         // the normalized reference area
78cdf0e10cSrcweir         Rectangle   m_aReference;
79cdf0e10cSrcweir     };
80cdf0e10cSrcweir 
81cdf0e10cSrcweir     //==================================================================================================================
82cdf0e10cSrcweir     //= TabBarGeometry
83cdf0e10cSrcweir     //==================================================================================================================
84cdf0e10cSrcweir     class TabBarGeometry_Impl;
85cdf0e10cSrcweir     class TabBarGeometry
86cdf0e10cSrcweir     {
87cdf0e10cSrcweir     public:
88cdf0e10cSrcweir         TabBarGeometry( const TabItemContent i_eItemContent );
89cdf0e10cSrcweir         ~TabBarGeometry();
90cdf0e10cSrcweir 
91cdf0e10cSrcweir         // retrieves the rectangle to be occupied by the button for scrolling backward through the items
getButtonBackRect() const92cdf0e10cSrcweir         const Rectangle&    getButtonBackRect() const { return m_aButtonBackRect; }
93cdf0e10cSrcweir         // retrieves the rectangle to be occupied by the items
getItemsRect() const94cdf0e10cSrcweir         const Rectangle&    getItemsRect() const { return m_aItemsRect; }
95cdf0e10cSrcweir         // retrieves the rectangle to be occupied by the button for scrolling forward through the items
getButtonForwardRect() const96cdf0e10cSrcweir         const Rectangle&    getButtonForwardRect() const { return m_aButtonForwardRect; }
97cdf0e10cSrcweir 
98cdf0e10cSrcweir         inline TabItemContent
getItemContent() const99cdf0e10cSrcweir                             getItemContent() const { return m_eTabItemContent; }
setItemContent(const TabItemContent i_eItemContent)100cdf0e10cSrcweir         inline void         setItemContent( const TabItemContent i_eItemContent ) { m_eTabItemContent = i_eItemContent; }
101cdf0e10cSrcweir 
102cdf0e10cSrcweir         /** adjusts the sizes of the buttons and the item's playground, plus the sizes of the items
103cdf0e10cSrcweir         */
104cdf0e10cSrcweir         void    relayout( const Size& i_rActualOutputSize, ItemDescriptors& io_rItems );
105cdf0e10cSrcweir 
106cdf0e10cSrcweir         /** calculates the optimal size of the tab bar, depending on the item's sizes
107cdf0e10cSrcweir         */
108cdf0e10cSrcweir         Size    getOptimalSize( ItemDescriptors& io_rItems, const bool i_bMinimalSize ) const;
109cdf0e10cSrcweir 
110cdf0e10cSrcweir         /** retrieves the position where the first item should start, relative to the item rect
111cdf0e10cSrcweir         */
112cdf0e10cSrcweir         Point   getFirstItemPosition() const;
113cdf0e10cSrcweir 
114cdf0e10cSrcweir     private:
115cdf0e10cSrcweir         bool    impl_fitItems( ItemDescriptors& io_rItems ) const;
116cdf0e10cSrcweir 
117cdf0e10cSrcweir     private:
118cdf0e10cSrcweir         /// specifies the content to be displayed in the tab items
119cdf0e10cSrcweir         TabItemContent      m_eTabItemContent;
120cdf0e10cSrcweir         /// specifies the inset to be used in the items area, depends on the actual alignment
121cdf0e10cSrcweir         SvBorder            m_aItemsInset;
122cdf0e10cSrcweir         // the (logical) rectangle to be used for the "back" button, empty if the button is not needed
123cdf0e10cSrcweir         Rectangle           m_aButtonBackRect;
124cdf0e10cSrcweir         // the (logical) rectangle to be used for the items
125cdf0e10cSrcweir         Rectangle           m_aItemsRect;
126cdf0e10cSrcweir         // the (logical) rectangle to be used for the "forward" button, empty if the button is not needed
127cdf0e10cSrcweir         Rectangle           m_aButtonForwardRect;
128cdf0e10cSrcweir     };
129cdf0e10cSrcweir 
130cdf0e10cSrcweir //......................................................................................................................
131cdf0e10cSrcweir } // namespace svt
132cdf0e10cSrcweir //......................................................................................................................
133cdf0e10cSrcweir 
134cdf0e10cSrcweir #endif // TABBARGEOMETRY_HXX
135