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::~ToolbarValue (void) {} 36 37 namespace 38 { 39 const static sal_Int32 gnLeftIconSpace (3); 40 const static sal_Int32 gnRightIconSpace (3); 41 } 42 43 namespace sfx2 { namespace sidebar { 44 45 TitleBar::TitleBar ( 46 const ::rtl::OUString& rsTitle, 47 Window* pParentWindow, 48 const sidebar::Paint& rInitialBackgroundPaint) 49 : Window(pParentWindow), 50 maToolBox(this), 51 msTitle(rsTitle), 52 maIcon() 53 { 54 SetBackground(rInitialBackgroundPaint.GetWallpaper()); 55 56 maToolBox.SetSelectHdl(LINK(this, TitleBar, SelectionHandler)); 57 } 58 59 TitleBar::~TitleBar (void) 60 { 61 } 62 63 void TitleBar::SetTitle (const ::rtl::OUString& rsTitle) 64 { 65 msTitle = rsTitle; 66 Invalidate(); 67 } 68 69 void TitleBar::SetIcon (const Image& rIcon) 70 { 71 maIcon = rIcon; 72 Invalidate(); 73 } 74 75 void TitleBar::Paint (const Rectangle& rUpdateArea) 76 { 77 (void)rUpdateArea; 78 79 // Paint title bar background. 80 Size aWindowSize (GetOutputSizePixel()); 81 Rectangle aTitleBarBox( 82 0, 83 0, 84 aWindowSize.Width(), 85 aWindowSize.Height() 86 ); 87 88 PaintDecoration(aTitleBarBox); 89 const Rectangle aTitleBox (GetTitleArea(aTitleBarBox)); 90 PaintTitle(aTitleBox); 91 PaintFocus(aTitleBox); 92 } 93 94 void TitleBar::DataChanged (const DataChangedEvent& rEvent) 95 { 96 (void)rEvent; 97 98 SetBackground(GetBackgroundPaint().GetWallpaper()); 99 } 100 101 void TitleBar::SetPosSizePixel ( 102 long nX, 103 long nY, 104 long nWidth, 105 long nHeight, 106 sal_uInt16 nFlags) 107 { 108 Window::SetPosSizePixel(nX,nY,nWidth,nHeight,nFlags); 109 110 // Place the toolbox. 111 const sal_Int32 nToolBoxWidth (maToolBox.GetItemPosRect(0).GetWidth()); 112 maToolBox.SetPosSizePixel(nWidth-nToolBoxWidth,0, nToolBoxWidth,nHeight, WINDOW_POSSIZE_POSSIZE); 113 maToolBox.Show(); 114 } 115 116 ToolBox& TitleBar::GetToolBox (void) 117 { 118 return maToolBox; 119 } 120 121 const ToolBox& TitleBar::GetToolBox (void) const 122 { 123 return maToolBox; 124 } 125 126 void TitleBar::HandleToolBoxItemClick (const sal_uInt16 nItemIndex) 127 { 128 (void)nItemIndex; 129 // Any real processing has to be done in derived class. 130 } 131 132 cssu::Reference<css::accessibility::XAccessible> TitleBar::CreateAccessible (void) 133 { 134 SetAccessibleRole(css::accessibility::AccessibleRole::PANEL); 135 return AccessibleTitleBar::Create(*this); 136 } 137 138 void TitleBar::PaintTitle (const Rectangle& rTitleBox) 139 { 140 Push(PUSH_FONT | PUSH_TEXTCOLOR); 141 142 Rectangle aTitleBox (rTitleBox); 143 144 // When there is an icon then paint it at the left of the given box. 145 if ( !! maIcon) 146 { 147 DrawImage( 148 Point( 149 aTitleBox.Left() + gnLeftIconSpace, 150 aTitleBox.Top() + (aTitleBox.GetHeight()-maIcon.GetSizePixel().Height())/2), 151 maIcon); 152 aTitleBox.Left() += gnLeftIconSpace + maIcon.GetSizePixel().Width() + gnRightIconSpace; 153 } 154 155 Font aFont(GetFont()); 156 aFont.SetWeight(WEIGHT_BOLD); 157 SetFont(aFont); 158 159 // Paint title bar text. 160 SetTextColor(GetTextColor()); 161 DrawText( 162 aTitleBox, 163 msTitle, 164 TEXT_DRAW_LEFT | TEXT_DRAW_VCENTER); 165 166 Pop(); 167 } 168 169 void TitleBar::PaintFocus (const Rectangle& rFocusBox) 170 { 171 Push(PUSH_FONT | PUSH_TEXTCOLOR); 172 173 Font aFont(GetFont()); 174 aFont.SetWeight(WEIGHT_BOLD); 175 SetFont(aFont); 176 177 const Rectangle aTextBox ( 178 GetTextRect( 179 rFocusBox, 180 msTitle, 181 TEXT_DRAW_LEFT | TEXT_DRAW_VCENTER)); 182 const Rectangle aLargerTextBox ( 183 aTextBox.Left() - 2, 184 aTextBox.Top() - 2, 185 aTextBox.Right() + 2, 186 aTextBox.Bottom() + 2); 187 188 if (HasFocus()) 189 Window::ShowFocus(aLargerTextBox); 190 else 191 Window::HideFocus(); 192 193 Pop(); 194 } 195 196 IMPL_LINK(TitleBar, SelectionHandler, ToolBox*, pToolBox) 197 { 198 (void)pToolBox; 199 OSL_ASSERT(&maToolBox==pToolBox); 200 const sal_uInt16 nItemId (maToolBox.GetHighlightItemId()); 201 202 HandleToolBoxItemClick(nItemId); 203 204 return sal_True; 205 } 206 207 } } // end of namespace sfx2::sidebar 208 209 /* vim: set noet sw=4 ts=4: */ 210