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 throw (RuntimeException)
100 {
101 osl::MutexGuard aGuard( m_aMutex );
102 return m_aCommand;
103 }
104
getItemId()105 ::sal_uInt16 SAL_CALL StatusbarItem::getItemId()
106 throw (RuntimeException)
107 {
108 osl::MutexGuard aGuard( m_aMutex );
109 return m_nId;
110 }
111
getWidth()112 ::sal_uInt32 SAL_CALL StatusbarItem::getWidth()
113 throw (RuntimeException)
114 {
115 vos::OGuard aSolarGuard( Application::GetSolarMutex() );
116 osl::MutexGuard aGuard( m_aMutex );
117 if ( m_pStatusBar )
118 return m_pStatusBar->GetItemWidth( m_nId );
119
120 return ::sal_uInt32(0);
121 }
122
getStyle()123 ::sal_uInt16 SAL_CALL StatusbarItem::getStyle()
124 throw (RuntimeException)
125 {
126 osl::MutexGuard aGuard( m_aMutex );
127 return m_nStyle;
128 }
129
getOffset()130 ::sal_Int32 SAL_CALL StatusbarItem::getOffset()
131 throw (RuntimeException)
132 {
133 vos::OGuard aSolarGuard( Application::GetSolarMutex() );
134 osl::MutexGuard aGuard( m_aMutex );
135 if ( m_pStatusBar )
136 return m_pStatusBar->GetItemOffset( m_nId );
137
138 return ::sal_Int32(0);
139 }
140
getItemRect()141 ::com::sun::star::awt::Rectangle SAL_CALL StatusbarItem::getItemRect()
142 throw (RuntimeException)
143 {
144 vos::OGuard aSolarGuard( Application::GetSolarMutex() );
145 osl::MutexGuard aGuard( m_aMutex );
146 ::com::sun::star::awt::Rectangle aAWTRect;
147 if ( m_pStatusBar )
148 {
149 Rectangle aRect = m_pStatusBar->GetItemRect( m_nId );
150 return ::com::sun::star::awt::Rectangle( aRect.Left(),
151 aRect.Top(),
152 aRect.GetWidth(),
153 aRect.GetHeight() );
154 }
155
156 return aAWTRect;
157 }
158
getText()159 OUString SAL_CALL StatusbarItem::getText()
160 throw (RuntimeException)
161 {
162 vos::OGuard aSolarGuard( Application::GetSolarMutex() );
163 osl::MutexGuard aGuard( m_aMutex );
164 if ( m_pStatusBar )
165 return m_pStatusBar->GetItemText( m_nId );
166
167 return OUString();
168 }
169
setText(const OUString & rText)170 void SAL_CALL StatusbarItem::setText( const OUString& rText )
171 throw (RuntimeException)
172 {
173 vos::OGuard aSolarGuard( Application::GetSolarMutex() );
174 osl::MutexGuard aGuard( m_aMutex );
175 if ( m_pStatusBar )
176 m_pStatusBar->SetItemText( m_nId, rText );;
177 }
178
getHelpText()179 OUString SAL_CALL StatusbarItem::getHelpText()
180 throw (RuntimeException)
181 {
182 vos::OGuard aSolarGuard( Application::GetSolarMutex() );
183 osl::MutexGuard aGuard( m_aMutex );
184 if ( m_pStatusBar )
185 return m_pStatusBar->GetHelpText( m_nId );
186
187 return OUString();
188 }
189
setHelpText(const OUString & rHelpText)190 void SAL_CALL StatusbarItem::setHelpText( const OUString& rHelpText )
191 throw (RuntimeException)
192 {
193 vos::OGuard aSolarGuard( Application::GetSolarMutex() );
194 osl::MutexGuard aGuard( m_aMutex );
195 if ( m_pStatusBar )
196 m_pStatusBar->SetHelpText( m_nId, rHelpText );;
197 }
198
getQuickHelpText()199 OUString SAL_CALL StatusbarItem::getQuickHelpText()
200 throw (RuntimeException)
201 {
202 vos::OGuard aSolarGuard( Application::GetSolarMutex() );
203 osl::MutexGuard aGuard( m_aMutex );
204 if ( m_pStatusBar )
205 return m_pStatusBar->GetHelpText( m_nId );
206
207 return OUString();
208 }
209
setQuickHelpText(const OUString & rQuickHelpText)210 void SAL_CALL StatusbarItem::setQuickHelpText( const OUString& rQuickHelpText )
211 throw (RuntimeException)
212 {
213 vos::OGuard aSolarGuard( Application::GetSolarMutex() );
214 osl::MutexGuard aGuard( m_aMutex );
215 if ( m_pStatusBar )
216 m_pStatusBar->SetQuickHelpText( m_nId, rQuickHelpText );
217 }
218
getAccessibleName()219 OUString SAL_CALL StatusbarItem::getAccessibleName()
220 throw (RuntimeException)
221 {
222 vos::OGuard aSolarGuard( Application::GetSolarMutex() );
223 osl::MutexGuard aGuard( m_aMutex );
224 if ( m_pStatusBar )
225 return m_pStatusBar->GetAccessibleName( m_nId );
226
227 return OUString();
228 }
229
setAccessibleName(const OUString & rAccessibleName)230 void SAL_CALL StatusbarItem::setAccessibleName( const OUString& rAccessibleName )
231 throw (RuntimeException)
232 {
233 vos::OGuard aSolarGuard( Application::GetSolarMutex() );
234 osl::MutexGuard aGuard( m_aMutex );
235 if ( m_pStatusBar )
236 m_pStatusBar->SetAccessibleName( m_nId, rAccessibleName );
237 }
238
getVisible()239 ::sal_Bool SAL_CALL StatusbarItem::getVisible()
240 throw (RuntimeException)
241 {
242 vos::OGuard aSolarGuard( Application::GetSolarMutex() );
243 osl::MutexGuard aGuard( m_aMutex );
244 if ( m_pStatusBar )
245 return m_pStatusBar->IsItemVisible( m_nId );
246
247 return sal_False;
248 }
249
setVisible(::sal_Bool bVisible)250 void SAL_CALL StatusbarItem::setVisible( ::sal_Bool bVisible )
251 throw (RuntimeException)
252 {
253 vos::OGuard aSolarGuard( Application::GetSolarMutex() );
254 osl::MutexGuard aGuard( m_aMutex );
255 if ( !m_pStatusBar )
256 return;
257
258 if ( bVisible != m_pStatusBar->IsItemVisible( m_nId ) )
259 {
260 if ( bVisible )
261 m_pStatusBar->ShowItem( m_nId );
262 else
263 m_pStatusBar->HideItem( m_nId );
264 }
265 }
266
repaint()267 void SAL_CALL StatusbarItem::repaint( )
268 throw (RuntimeException)
269 {
270 vos::OGuard aSolarGuard( Application::GetSolarMutex() );
271 osl::MutexGuard aGuard( m_aMutex );
272 if ( m_pStatusBar )
273 {
274 m_pStatusBar->RedrawItem( m_nId );
275 }
276 }
277
278 }
279