xref: /trunk/main/sfx2/source/sidebar/TitleBar.cxx (revision 3b2c5b9d)
1 /**************************************************************
2  *
3  * Licensed to the Apache Software Foundation (ASF) under one
4  * or more contributor license agreements.  See the NOTICE file
5  * distributed with this work for additional information
6  * regarding copyright ownership.  The ASF licenses this file
7  * to you under the Apache License, Version 2.0 (the
8  * "License"); you may not use this file except in compliance
9  * with the License.  You may obtain a copy of the License at
10  *
11  *   http://www.apache.org/licenses/LICENSE-2.0
12  *
13  * Unless required by applicable law or agreed to in writing,
14  * software distributed under the License is distributed on an
15  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16  * KIND, either express or implied.  See the License for the
17  * specific language governing permissions and limitations
18  * under the License.
19  *
20  *************************************************************/
21 
22 #include "precompiled_sfx2.hxx"
23 
24 #include "TitleBar.hxx"
25 #include "Paint.hxx"
26 #include "Accessible.hxx"
27 #include "AccessibleTitleBar.hxx"
28 
29 #include <tools/svborder.hxx>
30 #include <vcl/gradient.hxx>
31 #include <vcl/lineinfo.hxx>
32 
33 #include <com/sun/star/accessibility/AccessibleRole.hpp>
34 
35 
~ToolbarValue(void)36 ToolbarValue::~ToolbarValue (void) {}
37 
38 namespace
39 {
40     const static sal_Int32 gnLeftIconSpace (3);
41     const static sal_Int32 gnRightIconSpace (3);
42 }
43 
44 namespace sfx2 { namespace sidebar {
45 
TitleBar(const::rtl::OUString & rsTitle,Window * pParentWindow,const sidebar::Paint & rInitialBackgroundPaint)46 TitleBar::TitleBar (
47     const ::rtl::OUString& rsTitle,
48     Window* pParentWindow,
49     const sidebar::Paint& rInitialBackgroundPaint)
50     : Window(pParentWindow),
51       maToolBox(this),
52       msTitle(rsTitle),
53       maIcon()
54 {
55     SetBackground(rInitialBackgroundPaint.GetWallpaper());
56 
57     maToolBox.SetSelectHdl(LINK(this, TitleBar, SelectionHandler));
58 }
59 
60 
61 
62 
~TitleBar(void)63 TitleBar::~TitleBar (void)
64 {
65 }
66 
67 
68 
69 
SetTitle(const::rtl::OUString & rsTitle)70 void TitleBar::SetTitle (const ::rtl::OUString& rsTitle)
71 {
72     msTitle = rsTitle;
73     Invalidate();
74 }
75 
76 
77 
78 
SetIcon(const Image & rIcon)79 void TitleBar::SetIcon (const Image& rIcon)
80 {
81     maIcon = rIcon;
82     Invalidate();
83 }
84 
85 
86 
87 
Paint(const Rectangle & rUpdateArea)88 void TitleBar::Paint (const Rectangle& rUpdateArea)
89 {
90     (void)rUpdateArea;
91 
92     // Paint title bar background.
93     Size aWindowSize (GetOutputSizePixel());
94     Rectangle aTitleBarBox(
95         0,
96         0,
97         aWindowSize.Width(),
98         aWindowSize.Height()
99         );
100 
101     PaintDecoration(aTitleBarBox);
102     const Rectangle aTitleBox (GetTitleArea(aTitleBarBox));
103     PaintTitle(aTitleBox);
104     PaintFocus(aTitleBox);
105 }
106 
107 
108 
109 
DataChanged(const DataChangedEvent & rEvent)110 void TitleBar::DataChanged (const DataChangedEvent& rEvent)
111 {
112     (void)rEvent;
113 
114     SetBackground(GetBackgroundPaint().GetWallpaper());
115 }
116 
117 
118 
119 
SetPosSizePixel(long nX,long nY,long nWidth,long nHeight,sal_uInt16 nFlags)120 void TitleBar::SetPosSizePixel (
121     long nX,
122     long nY,
123     long nWidth,
124     long nHeight,
125     sal_uInt16 nFlags)
126 {
127     Window::SetPosSizePixel(nX,nY,nWidth,nHeight,nFlags);
128 
129     // Place the toolbox.
130     const sal_Int32 nToolBoxWidth (maToolBox.GetItemPosRect(0).GetWidth());
131     maToolBox.SetPosSizePixel(nWidth-nToolBoxWidth,0, nToolBoxWidth,nHeight, WINDOW_POSSIZE_POSSIZE);
132     maToolBox.Show();
133 }
134 
135 
136 
137 
GetToolBox(void)138 ToolBox& TitleBar::GetToolBox (void)
139 {
140     return maToolBox;
141 }
142 
143 
144 
145 
GetToolBox(void) const146 const ToolBox& TitleBar::GetToolBox (void) const
147 {
148     return maToolBox;
149 }
150 
151 
152 
153 
HandleToolBoxItemClick(const sal_uInt16 nItemIndex)154 void TitleBar::HandleToolBoxItemClick (const sal_uInt16 nItemIndex)
155 {
156     (void)nItemIndex;
157     // Any real processing has to be done in derived class.
158 }
159 
160 
161 
162 
CreateAccessible(void)163 cssu::Reference<css::accessibility::XAccessible> TitleBar::CreateAccessible (void)
164 {
165     SetAccessibleRole(css::accessibility::AccessibleRole::PANEL);
166     return AccessibleTitleBar::Create(*this);
167 }
168 
169 
170 
171 
PaintTitle(const Rectangle & rTitleBox)172 void TitleBar::PaintTitle (const Rectangle& rTitleBox)
173 {
174     Push(PUSH_FONT | PUSH_TEXTCOLOR);
175 
176     Rectangle aTitleBox (rTitleBox);
177 
178     // When there is an icon then paint it at the left of the given
179     // box.
180     if ( !! maIcon)
181     {
182         DrawImage(
183             Point(
184                 aTitleBox.Left() + gnLeftIconSpace,
185                 aTitleBox.Top() + (aTitleBox.GetHeight()-maIcon.GetSizePixel().Height())/2),
186             maIcon);
187         aTitleBox.Left() += gnLeftIconSpace + maIcon.GetSizePixel().Width() + gnRightIconSpace;
188     }
189 
190     Font aFont(GetFont());
191     aFont.SetWeight(WEIGHT_BOLD);
192     SetFont(aFont);
193 
194     // Paint title bar text.
195     SetTextColor(GetTextColor());
196     DrawText(
197         aTitleBox,
198         msTitle,
199         TEXT_DRAW_LEFT | TEXT_DRAW_VCENTER);
200 
201     Pop();
202 }
203 
204 
205 
206 
PaintFocus(const Rectangle & rFocusBox)207 void TitleBar::PaintFocus (const Rectangle& rFocusBox)
208 {
209     Push(PUSH_FONT | PUSH_TEXTCOLOR);
210 
211     Font aFont(GetFont());
212     aFont.SetWeight(WEIGHT_BOLD);
213     SetFont(aFont);
214 
215     const Rectangle aTextBox (
216         GetTextRect(
217             rFocusBox,
218             msTitle,
219             TEXT_DRAW_LEFT | TEXT_DRAW_VCENTER));
220     const Rectangle aLargerTextBox (
221         aTextBox.Left() - 2,
222         aTextBox.Top() - 2,
223         aTextBox.Right() + 2,
224         aTextBox.Bottom() + 2);
225 
226     if (HasFocus())
227         Window::ShowFocus(aLargerTextBox);
228     else
229         Window::HideFocus();
230 
231     Pop();
232 }
233 
234 
235 
236 
IMPL_LINK(TitleBar,SelectionHandler,ToolBox *,pToolBox)237 IMPL_LINK(TitleBar, SelectionHandler, ToolBox*, pToolBox)
238 {
239     (void)pToolBox;
240     OSL_ASSERT(&maToolBox==pToolBox);
241     const sal_uInt16 nItemId (maToolBox.GetHighlightItemId());
242 
243     HandleToolBoxItemClick(nItemId);
244 
245     return sal_True;
246 }
247 
248 } } // end of namespace sfx2::sidebar
249