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 // MARKER(update_precomp.py): autogen include statement, do not remove
23 #include "precompiled_framework.hxx"
24
25 #include <uielement/statusbaritem.hxx>
26 #include <vcl/status.hxx>
27 #include <vcl/svapp.hxx>
28 #include <vos/mutex.hxx>
29
30 #include <com/sun/star/ui/ItemStyle.hpp>
31
32 using namespace com::sun::star::ui;
33
34 using rtl::OUString;
35 using com::sun::star::uno::RuntimeException;
36
37 namespace framework
38 {
39
40 namespace
41 {
impl_convertItemBitsToItemStyle(sal_Int16 nItemBits)42 static sal_uInt16 impl_convertItemBitsToItemStyle( sal_Int16 nItemBits )
43 {
44 sal_uInt16 nStyle( 0 );
45
46 if ( ( nItemBits & SIB_RIGHT ) == SIB_RIGHT )
47 nStyle |= ItemStyle::ALIGN_RIGHT;
48 else if ( ( nItemBits & SIB_LEFT ) == SIB_LEFT )
49 nStyle |= ItemStyle::ALIGN_LEFT;
50 else
51 nStyle |= ItemStyle::ALIGN_CENTER;
52
53 if ( ( nItemBits & SIB_FLAT ) == SIB_FLAT )
54 nStyle |= ItemStyle::DRAW_FLAT;
55 else if ( ( nItemBits & SIB_OUT ) == SIB_OUT )
56 nStyle |= ItemStyle::DRAW_OUT3D;
57 else
58 nStyle |= ItemStyle::DRAW_IN3D;
59
60 if ( ( nItemBits & SIB_AUTOSIZE ) == SIB_AUTOSIZE )
61 nStyle |= ItemStyle::AUTO_SIZE;
62
63 if ( ( nItemBits & SIB_USERDRAW ) == SIB_USERDRAW )
64 nStyle |= ItemStyle::OWNER_DRAW;
65
66 return nStyle;
67 }
68 }
69
StatusbarItem(StatusBar * pStatusBar,AddonStatusbarItemData * pItemData,sal_uInt16 nId,const rtl::OUString & aCommand)70 StatusbarItem::StatusbarItem(
71 StatusBar *pStatusBar,
72 AddonStatusbarItemData *pItemData,
73 sal_uInt16 nId,
74 const rtl::OUString& aCommand )
75 : StatusbarItem_Base( m_aMutex )
76 , m_pStatusBar( pStatusBar )
77 , m_pItemData( pItemData )
78 , m_nId( nId )
79 , m_nStyle( 0 )
80 , m_aCommand( aCommand )
81 {
82 if ( m_pStatusBar )
83 m_nStyle = impl_convertItemBitsToItemStyle(
84 m_pStatusBar->GetItemBits( m_nId ) );
85 }
86
~StatusbarItem()87 StatusbarItem::~StatusbarItem()
88 {
89 }
90
disposing()91 void SAL_CALL StatusbarItem::disposing()
92 {
93 osl::MutexGuard aGuard( m_aMutex );
94 m_pItemData = 0;
95 m_pStatusBar = 0;
96 }
97
getCommand()98 OUString SAL_CALL StatusbarItem::getCommand()
99 {
100 osl::MutexGuard aGuard( m_aMutex );
101 return m_aCommand;
102 }
103
getItemId()104 ::sal_uInt16 SAL_CALL StatusbarItem::getItemId()
105 {
106 osl::MutexGuard aGuard( m_aMutex );
107 return m_nId;
108 }
109
getWidth()110 ::sal_uInt32 SAL_CALL StatusbarItem::getWidth()
111 {
112 vos::OGuard aSolarGuard( Application::GetSolarMutex() );
113 osl::MutexGuard aGuard( m_aMutex );
114 if ( m_pStatusBar )
115 return m_pStatusBar->GetItemWidth( m_nId );
116
117 return ::sal_uInt32(0);
118 }
119
getStyle()120 ::sal_uInt16 SAL_CALL StatusbarItem::getStyle()
121 {
122 osl::MutexGuard aGuard( m_aMutex );
123 return m_nStyle;
124 }
125
getOffset()126 ::sal_Int32 SAL_CALL StatusbarItem::getOffset()
127 {
128 vos::OGuard aSolarGuard( Application::GetSolarMutex() );
129 osl::MutexGuard aGuard( m_aMutex );
130 if ( m_pStatusBar )
131 return m_pStatusBar->GetItemOffset( m_nId );
132
133 return ::sal_Int32(0);
134 }
135
getItemRect()136 ::com::sun::star::awt::Rectangle SAL_CALL StatusbarItem::getItemRect()
137 {
138 vos::OGuard aSolarGuard( Application::GetSolarMutex() );
139 osl::MutexGuard aGuard( m_aMutex );
140 ::com::sun::star::awt::Rectangle aAWTRect;
141 if ( m_pStatusBar )
142 {
143 Rectangle aRect = m_pStatusBar->GetItemRect( m_nId );
144 return ::com::sun::star::awt::Rectangle( aRect.Left(),
145 aRect.Top(),
146 aRect.GetWidth(),
147 aRect.GetHeight() );
148 }
149
150 return aAWTRect;
151 }
152
getText()153 OUString SAL_CALL StatusbarItem::getText()
154 {
155 vos::OGuard aSolarGuard( Application::GetSolarMutex() );
156 osl::MutexGuard aGuard( m_aMutex );
157 if ( m_pStatusBar )
158 return m_pStatusBar->GetItemText( m_nId );
159
160 return OUString();
161 }
162
setText(const OUString & rText)163 void SAL_CALL StatusbarItem::setText( const OUString& rText )
164 {
165 vos::OGuard aSolarGuard( Application::GetSolarMutex() );
166 osl::MutexGuard aGuard( m_aMutex );
167 if ( m_pStatusBar )
168 m_pStatusBar->SetItemText( m_nId, rText );
169 }
170
getHelpText()171 OUString SAL_CALL StatusbarItem::getHelpText()
172 {
173 vos::OGuard aSolarGuard( Application::GetSolarMutex() );
174 osl::MutexGuard aGuard( m_aMutex );
175 if ( m_pStatusBar )
176 return m_pStatusBar->GetHelpText( m_nId );
177
178 return OUString();
179 }
180
setHelpText(const OUString & rHelpText)181 void SAL_CALL StatusbarItem::setHelpText( const OUString& rHelpText )
182 {
183 vos::OGuard aSolarGuard( Application::GetSolarMutex() );
184 osl::MutexGuard aGuard( m_aMutex );
185 if ( m_pStatusBar )
186 m_pStatusBar->SetHelpText( m_nId, rHelpText );
187 }
188
getQuickHelpText()189 OUString SAL_CALL StatusbarItem::getQuickHelpText()
190 {
191 vos::OGuard aSolarGuard( Application::GetSolarMutex() );
192 osl::MutexGuard aGuard( m_aMutex );
193 if ( m_pStatusBar )
194 return m_pStatusBar->GetHelpText( m_nId );
195
196 return OUString();
197 }
198
setQuickHelpText(const OUString & rQuickHelpText)199 void SAL_CALL StatusbarItem::setQuickHelpText( const OUString& rQuickHelpText )
200 {
201 vos::OGuard aSolarGuard( Application::GetSolarMutex() );
202 osl::MutexGuard aGuard( m_aMutex );
203 if ( m_pStatusBar )
204 m_pStatusBar->SetQuickHelpText( m_nId, rQuickHelpText );
205 }
206
getAccessibleName()207 OUString SAL_CALL StatusbarItem::getAccessibleName()
208 {
209 vos::OGuard aSolarGuard( Application::GetSolarMutex() );
210 osl::MutexGuard aGuard( m_aMutex );
211 if ( m_pStatusBar )
212 return m_pStatusBar->GetAccessibleName( m_nId );
213
214 return OUString();
215 }
216
setAccessibleName(const OUString & rAccessibleName)217 void SAL_CALL StatusbarItem::setAccessibleName( const OUString& rAccessibleName )
218 {
219 vos::OGuard aSolarGuard( Application::GetSolarMutex() );
220 osl::MutexGuard aGuard( m_aMutex );
221 if ( m_pStatusBar )
222 m_pStatusBar->SetAccessibleName( m_nId, rAccessibleName );
223 }
224
getVisible()225 ::sal_Bool SAL_CALL StatusbarItem::getVisible()
226 {
227 vos::OGuard aSolarGuard( Application::GetSolarMutex() );
228 osl::MutexGuard aGuard( m_aMutex );
229 if ( m_pStatusBar )
230 return m_pStatusBar->IsItemVisible( m_nId );
231
232 return sal_False;
233 }
234
setVisible(::sal_Bool bVisible)235 void SAL_CALL StatusbarItem::setVisible( ::sal_Bool bVisible )
236 {
237 vos::OGuard aSolarGuard( Application::GetSolarMutex() );
238 osl::MutexGuard aGuard( m_aMutex );
239 if ( !m_pStatusBar )
240 return;
241
242 if ( bVisible != m_pStatusBar->IsItemVisible( m_nId ) )
243 {
244 if ( bVisible )
245 m_pStatusBar->ShowItem( m_nId );
246 else
247 m_pStatusBar->HideItem( m_nId );
248 }
249 }
250
repaint()251 void SAL_CALL StatusbarItem::repaint( )
252 {
253 vos::OGuard aSolarGuard( Application::GetSolarMutex() );
254 osl::MutexGuard aGuard( m_aMutex );
255 if ( m_pStatusBar )
256 {
257 m_pStatusBar->RedrawItem( m_nId );
258 }
259 }
260
261 }
262