xref: /trunk/main/framework/source/uielement/statusbaritem.cxx (revision 91144cd0085a7583d2099b982122deb2184ab956) !
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