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