1 /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
2 /*
3 * This file is part of the LibreOffice project.
4 *
5 * This Source Code Form is subject to the terms of the Mozilla Public
6 * License, v. 2.0. If a copy of the MPL was not distributed with this
7 * file, You can obtain one at http://mozilla.org/MPL/2.0/.
8 *
9 * This file incorporates work covered by the following license notice:
10 *
11 * Licensed to the Apache Software Foundation (ASF) under one or more
12 * contributor license agreements. See the NOTICE file distributed
13 * with this work for additional information regarding copyright
14 * ownership. The ASF licenses this file to you under the Apache
15 * License, Version 2.0 (the "License"); you may not use this file
16 * except in compliance with the License. You may obtain a copy of
17 * the License at http://www.apache.org/licenses/LICENSE-2.0 .
18 */
19
20 #include <uielement/statusbaritem.hxx>
21 #include <vcl/status.hxx>
22 #include <vcl/svapp.hxx>
23
24 #include <com/sun/star/ui/ItemStyle.hpp>
25
26 using namespace com::sun::star::ui;
27
28 namespace framework
29 {
30
31 namespace
32 {
impl_convertItemBitsToItemStyle(StatusBarItemBits nItemBits)33 sal_uInt16 impl_convertItemBitsToItemStyle( StatusBarItemBits nItemBits )
34 {
35 sal_uInt16 nStyle( 0 );
36
37 if ( nItemBits & StatusBarItemBits::Right )
38 nStyle |= ItemStyle::ALIGN_RIGHT;
39 else if ( nItemBits & StatusBarItemBits::Left )
40 nStyle |= ItemStyle::ALIGN_LEFT;
41 else
42 nStyle |= ItemStyle::ALIGN_CENTER;
43
44 if ( nItemBits & StatusBarItemBits::Flat )
45 nStyle |= ItemStyle::DRAW_FLAT;
46 else if ( nItemBits & StatusBarItemBits::Out )
47 nStyle |= ItemStyle::DRAW_OUT3D;
48 else
49 nStyle |= ItemStyle::DRAW_IN3D;
50
51 if ( nItemBits & StatusBarItemBits::AutoSize )
52 nStyle |= ItemStyle::AUTO_SIZE;
53
54 if ( nItemBits & StatusBarItemBits::UserDraw )
55 nStyle |= ItemStyle::OWNER_DRAW;
56
57 return nStyle;
58 }
59 }
60
StatusbarItem(StatusBar * pStatusBar,sal_uInt16 nId,const OUString & aCommand)61 StatusbarItem::StatusbarItem(
62 StatusBar *pStatusBar,
63 sal_uInt16 nId,
64 const OUString& aCommand )
65 : StatusbarItem_Base( m_aMutex )
66 , m_pStatusBar( pStatusBar )
67 , m_nId( nId )
68 , m_nStyle( 0 )
69 , m_aCommand( aCommand )
70 {
71 if ( m_pStatusBar )
72 m_nStyle = impl_convertItemBitsToItemStyle(
73 m_pStatusBar->GetItemBits( m_nId ) );
74 }
75
~StatusbarItem()76 StatusbarItem::~StatusbarItem()
77 {
78 }
79
disposing()80 void SAL_CALL StatusbarItem::disposing()
81 {
82 osl::MutexGuard aGuard( m_aMutex );
83 m_pStatusBar = nullptr;
84 }
85
getCommand()86 OUString SAL_CALL StatusbarItem::getCommand()
87 {
88 osl::MutexGuard aGuard( m_aMutex );
89 return m_aCommand;
90 }
91
getItemId()92 ::sal_uInt16 SAL_CALL StatusbarItem::getItemId()
93 {
94 osl::MutexGuard aGuard( m_aMutex );
95 return m_nId;
96 }
97
getWidth()98 ::sal_uInt32 SAL_CALL StatusbarItem::getWidth()
99 {
100 SolarMutexGuard aGuard;
101 if ( m_pStatusBar )
102 return m_pStatusBar->GetItemWidth( m_nId );
103
104 return ::sal_uInt32(0);
105 }
106
getStyle()107 ::sal_uInt16 SAL_CALL StatusbarItem::getStyle()
108 {
109 osl::MutexGuard aGuard( m_aMutex );
110 return m_nStyle;
111 }
112
getOffset()113 ::sal_Int32 SAL_CALL StatusbarItem::getOffset()
114 {
115 SolarMutexGuard aGuard;
116 if ( m_pStatusBar )
117 return m_pStatusBar->GetItemOffset( m_nId );
118
119 return 0;
120 }
121
getItemRect()122 css::awt::Rectangle SAL_CALL StatusbarItem::getItemRect()
123 {
124 SolarMutexGuard aGuard;
125 css::awt::Rectangle aAWTRect;
126 if ( m_pStatusBar )
127 {
128 tools::Rectangle aRect = m_pStatusBar->GetItemRect( m_nId );
129 return css::awt::Rectangle( aRect.Left(),
130 aRect.Top(),
131 aRect.GetWidth(),
132 aRect.GetHeight() );
133 }
134
135 return aAWTRect;
136 }
137
getText()138 OUString SAL_CALL StatusbarItem::getText()
139 {
140 SolarMutexGuard aGuard;
141 if ( m_pStatusBar )
142 return m_pStatusBar->GetItemText( m_nId );
143
144 return OUString();
145 }
146
setText(const OUString & rText)147 void SAL_CALL StatusbarItem::setText( const OUString& rText )
148 {
149 SolarMutexGuard aGuard;
150 if ( m_pStatusBar )
151 m_pStatusBar->SetItemText( m_nId, rText );
152 }
153
getHelpText()154 OUString SAL_CALL StatusbarItem::getHelpText()
155 {
156 SolarMutexGuard aGuard;
157 if ( m_pStatusBar )
158 return m_pStatusBar->GetHelpText( m_nId );
159
160 return OUString();
161 }
162
setHelpText(const OUString & rHelpText)163 void SAL_CALL StatusbarItem::setHelpText( const OUString& rHelpText )
164 {
165 SolarMutexGuard aGuard;
166 if ( m_pStatusBar )
167 m_pStatusBar->SetHelpText( m_nId, rHelpText );
168 }
169
getQuickHelpText()170 OUString SAL_CALL StatusbarItem::getQuickHelpText()
171 {
172 SolarMutexGuard aGuard;
173 if ( m_pStatusBar )
174 return m_pStatusBar->GetHelpText( m_nId );
175
176 return OUString();
177 }
178
setQuickHelpText(const OUString & rQuickHelpText)179 void SAL_CALL StatusbarItem::setQuickHelpText( const OUString& rQuickHelpText )
180 {
181 SolarMutexGuard aGuard;
182 if ( m_pStatusBar )
183 m_pStatusBar->SetQuickHelpText( m_nId, rQuickHelpText );
184 }
185
getAccessibleName()186 OUString SAL_CALL StatusbarItem::getAccessibleName()
187 {
188 SolarMutexGuard aGuard;
189 if ( m_pStatusBar )
190 return m_pStatusBar->GetAccessibleName( m_nId );
191
192 return OUString();
193 }
194
setAccessibleName(const OUString & rAccessibleName)195 void SAL_CALL StatusbarItem::setAccessibleName( const OUString& rAccessibleName )
196 {
197 SolarMutexGuard aGuard;
198 if ( m_pStatusBar )
199 m_pStatusBar->SetAccessibleName( m_nId, rAccessibleName );
200 }
201
getVisible()202 sal_Bool SAL_CALL StatusbarItem::getVisible()
203 {
204 SolarMutexGuard aGuard;
205 if ( m_pStatusBar )
206 return m_pStatusBar->IsItemVisible( m_nId );
207
208 return false;
209 }
210
setVisible(sal_Bool bVisible)211 void SAL_CALL StatusbarItem::setVisible( sal_Bool bVisible )
212 {
213 SolarMutexGuard aGuard;
214 if ( !m_pStatusBar )
215 return;
216
217 if ( bool(bVisible) != m_pStatusBar->IsItemVisible( m_nId ) )
218 {
219 if ( bVisible )
220 m_pStatusBar->ShowItem( m_nId );
221 else
222 m_pStatusBar->HideItem( m_nId );
223 }
224 }
225
repaint()226 void SAL_CALL StatusbarItem::repaint( )
227 {
228 SolarMutexGuard aGuard;
229 if ( m_pStatusBar )
230 {
231 m_pStatusBar->RedrawItem( m_nId );
232 }
233 }
234
235 }
236
237 /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
238