1*b1cdbd2cSJim Jagielski /**************************************************************
2*b1cdbd2cSJim Jagielski *
3*b1cdbd2cSJim Jagielski * Licensed to the Apache Software Foundation (ASF) under one
4*b1cdbd2cSJim Jagielski * or more contributor license agreements. See the NOTICE file
5*b1cdbd2cSJim Jagielski * distributed with this work for additional information
6*b1cdbd2cSJim Jagielski * regarding copyright ownership. The ASF licenses this file
7*b1cdbd2cSJim Jagielski * to you under the Apache License, Version 2.0 (the
8*b1cdbd2cSJim Jagielski * "License"); you may not use this file except in compliance
9*b1cdbd2cSJim Jagielski * with the License. You may obtain a copy of the License at
10*b1cdbd2cSJim Jagielski *
11*b1cdbd2cSJim Jagielski * http://www.apache.org/licenses/LICENSE-2.0
12*b1cdbd2cSJim Jagielski *
13*b1cdbd2cSJim Jagielski * Unless required by applicable law or agreed to in writing,
14*b1cdbd2cSJim Jagielski * software distributed under the License is distributed on an
15*b1cdbd2cSJim Jagielski * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16*b1cdbd2cSJim Jagielski * KIND, either express or implied. See the License for the
17*b1cdbd2cSJim Jagielski * specific language governing permissions and limitations
18*b1cdbd2cSJim Jagielski * under the License.
19*b1cdbd2cSJim Jagielski *
20*b1cdbd2cSJim Jagielski *************************************************************/
21*b1cdbd2cSJim Jagielski
22*b1cdbd2cSJim Jagielski
23*b1cdbd2cSJim Jagielski
24*b1cdbd2cSJim Jagielski // MARKER(update_precomp.py): autogen include statement, do not remove
25*b1cdbd2cSJim Jagielski #include "precompiled_accessibility.hxx"
26*b1cdbd2cSJim Jagielski
27*b1cdbd2cSJim Jagielski // includes --------------------------------------------------------------
28*b1cdbd2cSJim Jagielski #include <accessibility/standard/accessiblemenubasecomponent.hxx>
29*b1cdbd2cSJim Jagielski #include <accessibility/standard/vclxaccessiblemenu.hxx>
30*b1cdbd2cSJim Jagielski #include <accessibility/standard/vclxaccessiblemenuitem.hxx>
31*b1cdbd2cSJim Jagielski #include <accessibility/standard/vclxaccessiblemenuseparator.hxx>
32*b1cdbd2cSJim Jagielski #include <toolkit/helper/externallock.hxx>
33*b1cdbd2cSJim Jagielski #include <toolkit/helper/convert.hxx>
34*b1cdbd2cSJim Jagielski
35*b1cdbd2cSJim Jagielski #include <com/sun/star/accessibility/AccessibleEventId.hpp>
36*b1cdbd2cSJim Jagielski #include <com/sun/star/accessibility/AccessibleRole.hpp>
37*b1cdbd2cSJim Jagielski #include <com/sun/star/accessibility/AccessibleStateType.hpp>
38*b1cdbd2cSJim Jagielski
39*b1cdbd2cSJim Jagielski #include <unotools/accessiblestatesethelper.hxx>
40*b1cdbd2cSJim Jagielski #include <vcl/svapp.hxx>
41*b1cdbd2cSJim Jagielski #include <vcl/window.hxx>
42*b1cdbd2cSJim Jagielski #include <vcl/menu.hxx>
43*b1cdbd2cSJim Jagielski #include <tools/debug.hxx>
44*b1cdbd2cSJim Jagielski
45*b1cdbd2cSJim Jagielski using namespace ::com::sun::star;
46*b1cdbd2cSJim Jagielski using namespace ::com::sun::star::lang;
47*b1cdbd2cSJim Jagielski using namespace ::com::sun::star::uno;
48*b1cdbd2cSJim Jagielski using namespace ::com::sun::star::accessibility;
49*b1cdbd2cSJim Jagielski using namespace ::comphelper;
50*b1cdbd2cSJim Jagielski
51*b1cdbd2cSJim Jagielski
52*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------------
53*b1cdbd2cSJim Jagielski // OAccessibleMenuBaseComponent
54*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------------
55*b1cdbd2cSJim Jagielski
OAccessibleMenuBaseComponent(Menu * pMenu)56*b1cdbd2cSJim Jagielski OAccessibleMenuBaseComponent::OAccessibleMenuBaseComponent( Menu* pMenu )
57*b1cdbd2cSJim Jagielski :AccessibleExtendedComponentHelper_BASE( new VCLExternalSolarLock() )
58*b1cdbd2cSJim Jagielski ,m_pMenu( pMenu )
59*b1cdbd2cSJim Jagielski ,m_bEnabled( sal_False )
60*b1cdbd2cSJim Jagielski ,m_bFocused( sal_False )
61*b1cdbd2cSJim Jagielski ,m_bVisible( sal_False )
62*b1cdbd2cSJim Jagielski ,m_bSelected( sal_False )
63*b1cdbd2cSJim Jagielski ,m_bChecked( sal_False )
64*b1cdbd2cSJim Jagielski {
65*b1cdbd2cSJim Jagielski m_pExternalLock = static_cast< VCLExternalSolarLock* >( getExternalLock() );
66*b1cdbd2cSJim Jagielski
67*b1cdbd2cSJim Jagielski if ( m_pMenu )
68*b1cdbd2cSJim Jagielski {
69*b1cdbd2cSJim Jagielski m_aAccessibleChildren.assign( m_pMenu->GetItemCount(), Reference< XAccessible >() );
70*b1cdbd2cSJim Jagielski m_pMenu->AddEventListener( LINK( this, OAccessibleMenuBaseComponent, MenuEventListener ) );
71*b1cdbd2cSJim Jagielski }
72*b1cdbd2cSJim Jagielski }
73*b1cdbd2cSJim Jagielski
74*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------------
75*b1cdbd2cSJim Jagielski
~OAccessibleMenuBaseComponent()76*b1cdbd2cSJim Jagielski OAccessibleMenuBaseComponent::~OAccessibleMenuBaseComponent()
77*b1cdbd2cSJim Jagielski {
78*b1cdbd2cSJim Jagielski if ( m_pMenu )
79*b1cdbd2cSJim Jagielski m_pMenu->RemoveEventListener( LINK( this, OAccessibleMenuBaseComponent, MenuEventListener ) );
80*b1cdbd2cSJim Jagielski
81*b1cdbd2cSJim Jagielski delete m_pExternalLock;
82*b1cdbd2cSJim Jagielski m_pExternalLock = NULL;
83*b1cdbd2cSJim Jagielski }
84*b1cdbd2cSJim Jagielski
85*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------------
86*b1cdbd2cSJim Jagielski
IsEnabled()87*b1cdbd2cSJim Jagielski sal_Bool OAccessibleMenuBaseComponent::IsEnabled()
88*b1cdbd2cSJim Jagielski {
89*b1cdbd2cSJim Jagielski return sal_False;
90*b1cdbd2cSJim Jagielski }
91*b1cdbd2cSJim Jagielski
92*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------------
93*b1cdbd2cSJim Jagielski
IsFocused()94*b1cdbd2cSJim Jagielski sal_Bool OAccessibleMenuBaseComponent::IsFocused()
95*b1cdbd2cSJim Jagielski {
96*b1cdbd2cSJim Jagielski return sal_False;
97*b1cdbd2cSJim Jagielski }
98*b1cdbd2cSJim Jagielski
99*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------------
100*b1cdbd2cSJim Jagielski
IsVisible()101*b1cdbd2cSJim Jagielski sal_Bool OAccessibleMenuBaseComponent::IsVisible()
102*b1cdbd2cSJim Jagielski {
103*b1cdbd2cSJim Jagielski return sal_False;
104*b1cdbd2cSJim Jagielski }
105*b1cdbd2cSJim Jagielski
106*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------------
107*b1cdbd2cSJim Jagielski
IsSelected()108*b1cdbd2cSJim Jagielski sal_Bool OAccessibleMenuBaseComponent::IsSelected()
109*b1cdbd2cSJim Jagielski {
110*b1cdbd2cSJim Jagielski return sal_False;
111*b1cdbd2cSJim Jagielski }
112*b1cdbd2cSJim Jagielski
113*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------------
114*b1cdbd2cSJim Jagielski
IsChecked()115*b1cdbd2cSJim Jagielski sal_Bool OAccessibleMenuBaseComponent::IsChecked()
116*b1cdbd2cSJim Jagielski {
117*b1cdbd2cSJim Jagielski return sal_False;
118*b1cdbd2cSJim Jagielski }
119*b1cdbd2cSJim Jagielski
120*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------------
121*b1cdbd2cSJim Jagielski
SetStates()122*b1cdbd2cSJim Jagielski void OAccessibleMenuBaseComponent::SetStates()
123*b1cdbd2cSJim Jagielski {
124*b1cdbd2cSJim Jagielski m_bEnabled = IsEnabled();
125*b1cdbd2cSJim Jagielski m_bFocused = IsFocused();
126*b1cdbd2cSJim Jagielski m_bVisible = IsVisible();
127*b1cdbd2cSJim Jagielski m_bSelected = IsSelected();
128*b1cdbd2cSJim Jagielski m_bChecked = IsChecked();
129*b1cdbd2cSJim Jagielski }
130*b1cdbd2cSJim Jagielski
131*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------------
132*b1cdbd2cSJim Jagielski
SetEnabled(sal_Bool bEnabled)133*b1cdbd2cSJim Jagielski void OAccessibleMenuBaseComponent::SetEnabled( sal_Bool bEnabled )
134*b1cdbd2cSJim Jagielski {
135*b1cdbd2cSJim Jagielski if ( m_bEnabled != bEnabled )
136*b1cdbd2cSJim Jagielski {
137*b1cdbd2cSJim Jagielski sal_Int16 nStateType=AccessibleStateType::ENABLED;
138*b1cdbd2cSJim Jagielski if (IsMenuHideDisabledEntries())
139*b1cdbd2cSJim Jagielski {
140*b1cdbd2cSJim Jagielski nStateType = AccessibleStateType::VISIBLE;
141*b1cdbd2cSJim Jagielski }
142*b1cdbd2cSJim Jagielski Any aOldValue[2], aNewValue[2];
143*b1cdbd2cSJim Jagielski if ( m_bEnabled )
144*b1cdbd2cSJim Jagielski {
145*b1cdbd2cSJim Jagielski aOldValue[0] <<= AccessibleStateType::SENSITIVE;
146*b1cdbd2cSJim Jagielski aOldValue[1] <<= nStateType;
147*b1cdbd2cSJim Jagielski }
148*b1cdbd2cSJim Jagielski else
149*b1cdbd2cSJim Jagielski {
150*b1cdbd2cSJim Jagielski aNewValue[0] <<= nStateType;
151*b1cdbd2cSJim Jagielski aNewValue[1] <<= AccessibleStateType::SENSITIVE;
152*b1cdbd2cSJim Jagielski }
153*b1cdbd2cSJim Jagielski m_bEnabled = bEnabled;
154*b1cdbd2cSJim Jagielski NotifyAccessibleEvent( AccessibleEventId::STATE_CHANGED, aOldValue[0], aNewValue[0] );
155*b1cdbd2cSJim Jagielski NotifyAccessibleEvent( AccessibleEventId::STATE_CHANGED, aOldValue[1], aNewValue[1] );
156*b1cdbd2cSJim Jagielski }
157*b1cdbd2cSJim Jagielski }
158*b1cdbd2cSJim Jagielski
159*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------------
160*b1cdbd2cSJim Jagielski
SetFocused(sal_Bool bFocused)161*b1cdbd2cSJim Jagielski void OAccessibleMenuBaseComponent::SetFocused( sal_Bool bFocused )
162*b1cdbd2cSJim Jagielski {
163*b1cdbd2cSJim Jagielski if ( m_bFocused != bFocused )
164*b1cdbd2cSJim Jagielski {
165*b1cdbd2cSJim Jagielski Any aOldValue, aNewValue;
166*b1cdbd2cSJim Jagielski if ( m_bFocused )
167*b1cdbd2cSJim Jagielski aOldValue <<= AccessibleStateType::FOCUSED;
168*b1cdbd2cSJim Jagielski else
169*b1cdbd2cSJim Jagielski aNewValue <<= AccessibleStateType::FOCUSED;
170*b1cdbd2cSJim Jagielski m_bFocused = bFocused;
171*b1cdbd2cSJim Jagielski NotifyAccessibleEvent( AccessibleEventId::STATE_CHANGED, aOldValue, aNewValue );
172*b1cdbd2cSJim Jagielski }
173*b1cdbd2cSJim Jagielski }
174*b1cdbd2cSJim Jagielski
175*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------------
176*b1cdbd2cSJim Jagielski
SetVisible(sal_Bool bVisible)177*b1cdbd2cSJim Jagielski void OAccessibleMenuBaseComponent::SetVisible( sal_Bool bVisible )
178*b1cdbd2cSJim Jagielski {
179*b1cdbd2cSJim Jagielski if ( m_bVisible != bVisible )
180*b1cdbd2cSJim Jagielski {
181*b1cdbd2cSJim Jagielski Any aOldValue, aNewValue;
182*b1cdbd2cSJim Jagielski if ( m_bVisible )
183*b1cdbd2cSJim Jagielski aOldValue <<= AccessibleStateType::VISIBLE;
184*b1cdbd2cSJim Jagielski else
185*b1cdbd2cSJim Jagielski aNewValue <<= AccessibleStateType::VISIBLE;
186*b1cdbd2cSJim Jagielski m_bVisible = bVisible;
187*b1cdbd2cSJim Jagielski NotifyAccessibleEvent( AccessibleEventId::STATE_CHANGED, aOldValue, aNewValue );
188*b1cdbd2cSJim Jagielski }
189*b1cdbd2cSJim Jagielski }
190*b1cdbd2cSJim Jagielski
191*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------------
192*b1cdbd2cSJim Jagielski
SetSelected(sal_Bool bSelected)193*b1cdbd2cSJim Jagielski void OAccessibleMenuBaseComponent::SetSelected( sal_Bool bSelected )
194*b1cdbd2cSJim Jagielski {
195*b1cdbd2cSJim Jagielski if ( m_bSelected != bSelected )
196*b1cdbd2cSJim Jagielski {
197*b1cdbd2cSJim Jagielski Any aOldValue, aNewValue;
198*b1cdbd2cSJim Jagielski if ( m_bSelected )
199*b1cdbd2cSJim Jagielski aOldValue <<= AccessibleStateType::SELECTED;
200*b1cdbd2cSJim Jagielski else
201*b1cdbd2cSJim Jagielski aNewValue <<= AccessibleStateType::SELECTED;
202*b1cdbd2cSJim Jagielski m_bSelected = bSelected;
203*b1cdbd2cSJim Jagielski NotifyAccessibleEvent( AccessibleEventId::STATE_CHANGED, aOldValue, aNewValue );
204*b1cdbd2cSJim Jagielski }
205*b1cdbd2cSJim Jagielski }
206*b1cdbd2cSJim Jagielski
207*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------------
208*b1cdbd2cSJim Jagielski
SetChecked(sal_Bool bChecked)209*b1cdbd2cSJim Jagielski void OAccessibleMenuBaseComponent::SetChecked( sal_Bool bChecked )
210*b1cdbd2cSJim Jagielski {
211*b1cdbd2cSJim Jagielski if ( m_bChecked != bChecked )
212*b1cdbd2cSJim Jagielski {
213*b1cdbd2cSJim Jagielski Any aOldValue, aNewValue;
214*b1cdbd2cSJim Jagielski if ( m_bChecked )
215*b1cdbd2cSJim Jagielski aOldValue <<= AccessibleStateType::CHECKED;
216*b1cdbd2cSJim Jagielski else
217*b1cdbd2cSJim Jagielski aNewValue <<= AccessibleStateType::CHECKED;
218*b1cdbd2cSJim Jagielski m_bChecked = bChecked;
219*b1cdbd2cSJim Jagielski NotifyAccessibleEvent( AccessibleEventId::STATE_CHANGED, aOldValue, aNewValue );
220*b1cdbd2cSJim Jagielski }
221*b1cdbd2cSJim Jagielski }
222*b1cdbd2cSJim Jagielski
223*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------------
224*b1cdbd2cSJim Jagielski
UpdateEnabled(sal_Int32 i,sal_Bool bEnabled)225*b1cdbd2cSJim Jagielski void OAccessibleMenuBaseComponent::UpdateEnabled( sal_Int32 i, sal_Bool bEnabled )
226*b1cdbd2cSJim Jagielski {
227*b1cdbd2cSJim Jagielski if ( i >= 0 && i < (sal_Int32)m_aAccessibleChildren.size() )
228*b1cdbd2cSJim Jagielski {
229*b1cdbd2cSJim Jagielski Reference< XAccessible > xChild( m_aAccessibleChildren[i] );
230*b1cdbd2cSJim Jagielski if ( xChild.is() )
231*b1cdbd2cSJim Jagielski {
232*b1cdbd2cSJim Jagielski OAccessibleMenuBaseComponent* pComp = static_cast< OAccessibleMenuBaseComponent* >( xChild.get() );
233*b1cdbd2cSJim Jagielski if ( pComp )
234*b1cdbd2cSJim Jagielski pComp->SetEnabled( bEnabled );
235*b1cdbd2cSJim Jagielski }
236*b1cdbd2cSJim Jagielski }
237*b1cdbd2cSJim Jagielski }
238*b1cdbd2cSJim Jagielski
239*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------------
240*b1cdbd2cSJim Jagielski
UpdateFocused(sal_Int32 i,sal_Bool bFocused)241*b1cdbd2cSJim Jagielski void OAccessibleMenuBaseComponent::UpdateFocused( sal_Int32 i, sal_Bool bFocused )
242*b1cdbd2cSJim Jagielski {
243*b1cdbd2cSJim Jagielski if ( i >= 0 && i < (sal_Int32)m_aAccessibleChildren.size() )
244*b1cdbd2cSJim Jagielski {
245*b1cdbd2cSJim Jagielski Reference< XAccessible > xChild( m_aAccessibleChildren[i] );
246*b1cdbd2cSJim Jagielski if ( xChild.is() )
247*b1cdbd2cSJim Jagielski {
248*b1cdbd2cSJim Jagielski OAccessibleMenuBaseComponent* pComp = static_cast< OAccessibleMenuBaseComponent* >( xChild.get() );
249*b1cdbd2cSJim Jagielski if ( pComp )
250*b1cdbd2cSJim Jagielski pComp->SetFocused( bFocused );
251*b1cdbd2cSJim Jagielski }
252*b1cdbd2cSJim Jagielski }
253*b1cdbd2cSJim Jagielski }
254*b1cdbd2cSJim Jagielski
255*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------------
256*b1cdbd2cSJim Jagielski
UpdateVisible()257*b1cdbd2cSJim Jagielski void OAccessibleMenuBaseComponent::UpdateVisible()
258*b1cdbd2cSJim Jagielski {
259*b1cdbd2cSJim Jagielski SetVisible( IsVisible() );
260*b1cdbd2cSJim Jagielski for ( sal_uInt32 i = 0; i < m_aAccessibleChildren.size(); ++i )
261*b1cdbd2cSJim Jagielski {
262*b1cdbd2cSJim Jagielski Reference< XAccessible > xChild( m_aAccessibleChildren[i] );
263*b1cdbd2cSJim Jagielski if ( xChild.is() )
264*b1cdbd2cSJim Jagielski {
265*b1cdbd2cSJim Jagielski OAccessibleMenuBaseComponent* pComp = static_cast< OAccessibleMenuBaseComponent* >( xChild.get() );
266*b1cdbd2cSJim Jagielski if ( pComp )
267*b1cdbd2cSJim Jagielski pComp->SetVisible( pComp->IsVisible() );
268*b1cdbd2cSJim Jagielski }
269*b1cdbd2cSJim Jagielski }
270*b1cdbd2cSJim Jagielski }
271*b1cdbd2cSJim Jagielski
272*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------------
273*b1cdbd2cSJim Jagielski
UpdateSelected(sal_Int32 i,sal_Bool bSelected)274*b1cdbd2cSJim Jagielski void OAccessibleMenuBaseComponent::UpdateSelected( sal_Int32 i, sal_Bool bSelected )
275*b1cdbd2cSJim Jagielski {
276*b1cdbd2cSJim Jagielski NotifyAccessibleEvent( AccessibleEventId::SELECTION_CHANGED, Any(), Any() );
277*b1cdbd2cSJim Jagielski
278*b1cdbd2cSJim Jagielski if ( i >= 0 && i < (sal_Int32)m_aAccessibleChildren.size() )
279*b1cdbd2cSJim Jagielski {
280*b1cdbd2cSJim Jagielski Reference< XAccessible > xChild( m_aAccessibleChildren[i] );
281*b1cdbd2cSJim Jagielski if ( xChild.is() )
282*b1cdbd2cSJim Jagielski {
283*b1cdbd2cSJim Jagielski OAccessibleMenuBaseComponent* pComp = static_cast< OAccessibleMenuBaseComponent* >( xChild.get() );
284*b1cdbd2cSJim Jagielski if ( pComp )
285*b1cdbd2cSJim Jagielski pComp->SetSelected( bSelected );
286*b1cdbd2cSJim Jagielski }
287*b1cdbd2cSJim Jagielski }
288*b1cdbd2cSJim Jagielski }
289*b1cdbd2cSJim Jagielski
290*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------------
291*b1cdbd2cSJim Jagielski
UpdateChecked(sal_Int32 i,sal_Bool bChecked)292*b1cdbd2cSJim Jagielski void OAccessibleMenuBaseComponent::UpdateChecked( sal_Int32 i, sal_Bool bChecked )
293*b1cdbd2cSJim Jagielski {
294*b1cdbd2cSJim Jagielski if ( i >= 0 && i < (sal_Int32)m_aAccessibleChildren.size() )
295*b1cdbd2cSJim Jagielski {
296*b1cdbd2cSJim Jagielski Reference< XAccessible > xChild( m_aAccessibleChildren[i] );
297*b1cdbd2cSJim Jagielski if ( xChild.is() )
298*b1cdbd2cSJim Jagielski {
299*b1cdbd2cSJim Jagielski OAccessibleMenuBaseComponent* pComp = static_cast< OAccessibleMenuBaseComponent* >( xChild.get() );
300*b1cdbd2cSJim Jagielski if ( pComp )
301*b1cdbd2cSJim Jagielski pComp->SetChecked( bChecked );
302*b1cdbd2cSJim Jagielski }
303*b1cdbd2cSJim Jagielski }
304*b1cdbd2cSJim Jagielski }
305*b1cdbd2cSJim Jagielski
306*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------------
307*b1cdbd2cSJim Jagielski
UpdateAccessibleName(sal_Int32 i)308*b1cdbd2cSJim Jagielski void OAccessibleMenuBaseComponent::UpdateAccessibleName( sal_Int32 i )
309*b1cdbd2cSJim Jagielski {
310*b1cdbd2cSJim Jagielski if ( i >= 0 && i < (sal_Int32)m_aAccessibleChildren.size() )
311*b1cdbd2cSJim Jagielski {
312*b1cdbd2cSJim Jagielski Reference< XAccessible > xChild( m_aAccessibleChildren[i] );
313*b1cdbd2cSJim Jagielski if ( xChild.is() )
314*b1cdbd2cSJim Jagielski {
315*b1cdbd2cSJim Jagielski OAccessibleMenuItemComponent* pComp = static_cast< OAccessibleMenuItemComponent* >( xChild.get() );
316*b1cdbd2cSJim Jagielski if ( pComp )
317*b1cdbd2cSJim Jagielski pComp->SetAccessibleName( pComp->GetAccessibleName() );
318*b1cdbd2cSJim Jagielski }
319*b1cdbd2cSJim Jagielski }
320*b1cdbd2cSJim Jagielski }
321*b1cdbd2cSJim Jagielski
322*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------------
323*b1cdbd2cSJim Jagielski
UpdateItemText(sal_Int32 i)324*b1cdbd2cSJim Jagielski void OAccessibleMenuBaseComponent::UpdateItemText( sal_Int32 i )
325*b1cdbd2cSJim Jagielski {
326*b1cdbd2cSJim Jagielski if ( i >= 0 && i < (sal_Int32)m_aAccessibleChildren.size() )
327*b1cdbd2cSJim Jagielski {
328*b1cdbd2cSJim Jagielski Reference< XAccessible > xChild( m_aAccessibleChildren[i] );
329*b1cdbd2cSJim Jagielski if ( xChild.is() )
330*b1cdbd2cSJim Jagielski {
331*b1cdbd2cSJim Jagielski OAccessibleMenuItemComponent* pComp = static_cast< OAccessibleMenuItemComponent* >( xChild.get() );
332*b1cdbd2cSJim Jagielski if ( pComp )
333*b1cdbd2cSJim Jagielski pComp->SetItemText( pComp->GetItemText() );
334*b1cdbd2cSJim Jagielski }
335*b1cdbd2cSJim Jagielski }
336*b1cdbd2cSJim Jagielski }
337*b1cdbd2cSJim Jagielski
338*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------------
339*b1cdbd2cSJim Jagielski
GetChildCount()340*b1cdbd2cSJim Jagielski sal_Int32 OAccessibleMenuBaseComponent::GetChildCount()
341*b1cdbd2cSJim Jagielski {
342*b1cdbd2cSJim Jagielski return m_aAccessibleChildren.size();
343*b1cdbd2cSJim Jagielski }
344*b1cdbd2cSJim Jagielski
345*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------------
346*b1cdbd2cSJim Jagielski
GetChild(sal_Int32 i)347*b1cdbd2cSJim Jagielski Reference< XAccessible > OAccessibleMenuBaseComponent::GetChild( sal_Int32 i )
348*b1cdbd2cSJim Jagielski {
349*b1cdbd2cSJim Jagielski Reference< XAccessible > xChild = m_aAccessibleChildren[i];
350*b1cdbd2cSJim Jagielski if ( !xChild.is() )
351*b1cdbd2cSJim Jagielski {
352*b1cdbd2cSJim Jagielski if ( m_pMenu )
353*b1cdbd2cSJim Jagielski {
354*b1cdbd2cSJim Jagielski // create a new child
355*b1cdbd2cSJim Jagielski OAccessibleMenuBaseComponent* pChild;
356*b1cdbd2cSJim Jagielski
357*b1cdbd2cSJim Jagielski if ( m_pMenu->GetItemType( (sal_uInt16)i ) == MENUITEM_SEPARATOR )
358*b1cdbd2cSJim Jagielski {
359*b1cdbd2cSJim Jagielski pChild = new VCLXAccessibleMenuSeparator( m_pMenu, (sal_uInt16)i );
360*b1cdbd2cSJim Jagielski }
361*b1cdbd2cSJim Jagielski else
362*b1cdbd2cSJim Jagielski {
363*b1cdbd2cSJim Jagielski PopupMenu* pPopupMenu = m_pMenu->GetPopupMenu( m_pMenu->GetItemId( (sal_uInt16)i ) );
364*b1cdbd2cSJim Jagielski if ( pPopupMenu )
365*b1cdbd2cSJim Jagielski {
366*b1cdbd2cSJim Jagielski pChild = new VCLXAccessibleMenu( m_pMenu, (sal_uInt16)i, pPopupMenu );
367*b1cdbd2cSJim Jagielski pPopupMenu->SetAccessible( pChild );
368*b1cdbd2cSJim Jagielski }
369*b1cdbd2cSJim Jagielski else
370*b1cdbd2cSJim Jagielski {
371*b1cdbd2cSJim Jagielski pChild = new VCLXAccessibleMenuItem( m_pMenu, (sal_uInt16)i );
372*b1cdbd2cSJim Jagielski }
373*b1cdbd2cSJim Jagielski }
374*b1cdbd2cSJim Jagielski
375*b1cdbd2cSJim Jagielski // set states
376*b1cdbd2cSJim Jagielski pChild->SetStates();
377*b1cdbd2cSJim Jagielski
378*b1cdbd2cSJim Jagielski xChild = pChild;
379*b1cdbd2cSJim Jagielski
380*b1cdbd2cSJim Jagielski // insert into menu item list
381*b1cdbd2cSJim Jagielski m_aAccessibleChildren[i] = xChild;
382*b1cdbd2cSJim Jagielski }
383*b1cdbd2cSJim Jagielski }
384*b1cdbd2cSJim Jagielski
385*b1cdbd2cSJim Jagielski return xChild;
386*b1cdbd2cSJim Jagielski }
387*b1cdbd2cSJim Jagielski
388*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------------
389*b1cdbd2cSJim Jagielski
GetChildAt(const awt::Point & rPoint)390*b1cdbd2cSJim Jagielski Reference< XAccessible > OAccessibleMenuBaseComponent::GetChildAt( const awt::Point& rPoint )
391*b1cdbd2cSJim Jagielski {
392*b1cdbd2cSJim Jagielski Reference< XAccessible > xChild;
393*b1cdbd2cSJim Jagielski for ( sal_uInt32 i = 0, nCount = getAccessibleChildCount(); i < nCount; ++i )
394*b1cdbd2cSJim Jagielski {
395*b1cdbd2cSJim Jagielski Reference< XAccessible > xAcc = getAccessibleChild( i );
396*b1cdbd2cSJim Jagielski if ( xAcc.is() )
397*b1cdbd2cSJim Jagielski {
398*b1cdbd2cSJim Jagielski Reference< XAccessibleComponent > xComp( xAcc->getAccessibleContext(), UNO_QUERY );
399*b1cdbd2cSJim Jagielski if ( xComp.is() )
400*b1cdbd2cSJim Jagielski {
401*b1cdbd2cSJim Jagielski Rectangle aRect = VCLRectangle( xComp->getBounds() );
402*b1cdbd2cSJim Jagielski Point aPos = VCLPoint( rPoint );
403*b1cdbd2cSJim Jagielski if ( aRect.IsInside( aPos ) )
404*b1cdbd2cSJim Jagielski {
405*b1cdbd2cSJim Jagielski xChild = xAcc;
406*b1cdbd2cSJim Jagielski break;
407*b1cdbd2cSJim Jagielski }
408*b1cdbd2cSJim Jagielski }
409*b1cdbd2cSJim Jagielski }
410*b1cdbd2cSJim Jagielski }
411*b1cdbd2cSJim Jagielski
412*b1cdbd2cSJim Jagielski return xChild;
413*b1cdbd2cSJim Jagielski }
414*b1cdbd2cSJim Jagielski
415*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------------
416*b1cdbd2cSJim Jagielski
InsertChild(sal_Int32 i)417*b1cdbd2cSJim Jagielski void OAccessibleMenuBaseComponent::InsertChild( sal_Int32 i )
418*b1cdbd2cSJim Jagielski {
419*b1cdbd2cSJim Jagielski if ( i > (sal_Int32)m_aAccessibleChildren.size() )
420*b1cdbd2cSJim Jagielski i = m_aAccessibleChildren.size();
421*b1cdbd2cSJim Jagielski
422*b1cdbd2cSJim Jagielski if ( i >= 0 )
423*b1cdbd2cSJim Jagielski {
424*b1cdbd2cSJim Jagielski // insert entry in child list
425*b1cdbd2cSJim Jagielski m_aAccessibleChildren.insert( m_aAccessibleChildren.begin() + i, Reference< XAccessible >() );
426*b1cdbd2cSJim Jagielski
427*b1cdbd2cSJim Jagielski // update item position of accessible children
428*b1cdbd2cSJim Jagielski for ( sal_uInt32 j = i, nCount = m_aAccessibleChildren.size(); j < nCount; ++j )
429*b1cdbd2cSJim Jagielski {
430*b1cdbd2cSJim Jagielski Reference< XAccessible > xAcc( m_aAccessibleChildren[j] );
431*b1cdbd2cSJim Jagielski if ( xAcc.is() )
432*b1cdbd2cSJim Jagielski {
433*b1cdbd2cSJim Jagielski OAccessibleMenuItemComponent* pComp = static_cast< OAccessibleMenuItemComponent* >( xAcc.get() );
434*b1cdbd2cSJim Jagielski if ( pComp )
435*b1cdbd2cSJim Jagielski pComp->SetItemPos( (sal_uInt16)j );
436*b1cdbd2cSJim Jagielski }
437*b1cdbd2cSJim Jagielski }
438*b1cdbd2cSJim Jagielski
439*b1cdbd2cSJim Jagielski // send accessible child event
440*b1cdbd2cSJim Jagielski Reference< XAccessible > xChild( GetChild( i ) );
441*b1cdbd2cSJim Jagielski if ( xChild.is() )
442*b1cdbd2cSJim Jagielski {
443*b1cdbd2cSJim Jagielski Any aOldValue, aNewValue;
444*b1cdbd2cSJim Jagielski aNewValue <<= xChild;
445*b1cdbd2cSJim Jagielski NotifyAccessibleEvent( AccessibleEventId::CHILD, aOldValue, aNewValue );
446*b1cdbd2cSJim Jagielski }
447*b1cdbd2cSJim Jagielski }
448*b1cdbd2cSJim Jagielski }
449*b1cdbd2cSJim Jagielski
450*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------------
451*b1cdbd2cSJim Jagielski
RemoveChild(sal_Int32 i)452*b1cdbd2cSJim Jagielski void OAccessibleMenuBaseComponent::RemoveChild( sal_Int32 i )
453*b1cdbd2cSJim Jagielski {
454*b1cdbd2cSJim Jagielski if ( i >= 0 && i < (sal_Int32)m_aAccessibleChildren.size() )
455*b1cdbd2cSJim Jagielski {
456*b1cdbd2cSJim Jagielski // keep the accessible of the removed item
457*b1cdbd2cSJim Jagielski Reference< XAccessible > xChild( m_aAccessibleChildren[i] );
458*b1cdbd2cSJim Jagielski
459*b1cdbd2cSJim Jagielski // remove entry in child list
460*b1cdbd2cSJim Jagielski m_aAccessibleChildren.erase( m_aAccessibleChildren.begin() + i );
461*b1cdbd2cSJim Jagielski
462*b1cdbd2cSJim Jagielski // update item position of accessible children
463*b1cdbd2cSJim Jagielski for ( sal_uInt32 j = i, nCount = m_aAccessibleChildren.size(); j < nCount; ++j )
464*b1cdbd2cSJim Jagielski {
465*b1cdbd2cSJim Jagielski Reference< XAccessible > xAcc( m_aAccessibleChildren[j] );
466*b1cdbd2cSJim Jagielski if ( xAcc.is() )
467*b1cdbd2cSJim Jagielski {
468*b1cdbd2cSJim Jagielski OAccessibleMenuItemComponent* pComp = static_cast< OAccessibleMenuItemComponent* >( xAcc.get() );
469*b1cdbd2cSJim Jagielski if ( pComp )
470*b1cdbd2cSJim Jagielski pComp->SetItemPos( (sal_uInt16)j );
471*b1cdbd2cSJim Jagielski }
472*b1cdbd2cSJim Jagielski }
473*b1cdbd2cSJim Jagielski
474*b1cdbd2cSJim Jagielski // send accessible child event
475*b1cdbd2cSJim Jagielski if ( xChild.is() )
476*b1cdbd2cSJim Jagielski {
477*b1cdbd2cSJim Jagielski Any aOldValue, aNewValue;
478*b1cdbd2cSJim Jagielski aOldValue <<= xChild;
479*b1cdbd2cSJim Jagielski NotifyAccessibleEvent( AccessibleEventId::CHILD, aOldValue, aNewValue );
480*b1cdbd2cSJim Jagielski
481*b1cdbd2cSJim Jagielski Reference< XComponent > xComponent( xChild, UNO_QUERY );
482*b1cdbd2cSJim Jagielski if ( xComponent.is() )
483*b1cdbd2cSJim Jagielski xComponent->dispose();
484*b1cdbd2cSJim Jagielski }
485*b1cdbd2cSJim Jagielski }
486*b1cdbd2cSJim Jagielski }
487*b1cdbd2cSJim Jagielski
488*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------------
489*b1cdbd2cSJim Jagielski
IsHighlighted()490*b1cdbd2cSJim Jagielski sal_Bool OAccessibleMenuBaseComponent::IsHighlighted()
491*b1cdbd2cSJim Jagielski {
492*b1cdbd2cSJim Jagielski return sal_False;
493*b1cdbd2cSJim Jagielski }
494*b1cdbd2cSJim Jagielski
495*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------------
496*b1cdbd2cSJim Jagielski
IsChildHighlighted()497*b1cdbd2cSJim Jagielski sal_Bool OAccessibleMenuBaseComponent::IsChildHighlighted()
498*b1cdbd2cSJim Jagielski {
499*b1cdbd2cSJim Jagielski sal_Bool bChildHighlighted = sal_False;
500*b1cdbd2cSJim Jagielski
501*b1cdbd2cSJim Jagielski for ( sal_uInt32 i = 0; i < m_aAccessibleChildren.size(); ++i )
502*b1cdbd2cSJim Jagielski {
503*b1cdbd2cSJim Jagielski Reference< XAccessible > xChild( m_aAccessibleChildren[i] );
504*b1cdbd2cSJim Jagielski if ( xChild.is() )
505*b1cdbd2cSJim Jagielski {
506*b1cdbd2cSJim Jagielski OAccessibleMenuBaseComponent* pComp = static_cast< OAccessibleMenuBaseComponent* >( xChild.get() );
507*b1cdbd2cSJim Jagielski if ( pComp && pComp->IsHighlighted() )
508*b1cdbd2cSJim Jagielski {
509*b1cdbd2cSJim Jagielski bChildHighlighted = sal_True;
510*b1cdbd2cSJim Jagielski break;
511*b1cdbd2cSJim Jagielski }
512*b1cdbd2cSJim Jagielski }
513*b1cdbd2cSJim Jagielski }
514*b1cdbd2cSJim Jagielski
515*b1cdbd2cSJim Jagielski return bChildHighlighted;
516*b1cdbd2cSJim Jagielski }
517*b1cdbd2cSJim Jagielski
518*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------------
519*b1cdbd2cSJim Jagielski
SelectChild(sal_Int32 i)520*b1cdbd2cSJim Jagielski void OAccessibleMenuBaseComponent::SelectChild( sal_Int32 i )
521*b1cdbd2cSJim Jagielski {
522*b1cdbd2cSJim Jagielski // open the menu
523*b1cdbd2cSJim Jagielski if ( getAccessibleRole() == AccessibleRole::MENU && !IsPopupMenuOpen() )
524*b1cdbd2cSJim Jagielski Click();
525*b1cdbd2cSJim Jagielski
526*b1cdbd2cSJim Jagielski // highlight the child
527*b1cdbd2cSJim Jagielski if ( m_pMenu )
528*b1cdbd2cSJim Jagielski m_pMenu->HighlightItem( (sal_uInt16)i );
529*b1cdbd2cSJim Jagielski }
530*b1cdbd2cSJim Jagielski
531*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------------
532*b1cdbd2cSJim Jagielski
DeSelectAll()533*b1cdbd2cSJim Jagielski void OAccessibleMenuBaseComponent::DeSelectAll()
534*b1cdbd2cSJim Jagielski {
535*b1cdbd2cSJim Jagielski if ( m_pMenu )
536*b1cdbd2cSJim Jagielski m_pMenu->DeHighlight();
537*b1cdbd2cSJim Jagielski }
538*b1cdbd2cSJim Jagielski
539*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------------
540*b1cdbd2cSJim Jagielski
IsChildSelected(sal_Int32 i)541*b1cdbd2cSJim Jagielski sal_Bool OAccessibleMenuBaseComponent::IsChildSelected( sal_Int32 i )
542*b1cdbd2cSJim Jagielski {
543*b1cdbd2cSJim Jagielski sal_Bool bSelected = sal_False;
544*b1cdbd2cSJim Jagielski
545*b1cdbd2cSJim Jagielski if ( m_pMenu && m_pMenu->IsHighlighted( (sal_uInt16)i ) )
546*b1cdbd2cSJim Jagielski bSelected = sal_True;
547*b1cdbd2cSJim Jagielski
548*b1cdbd2cSJim Jagielski return bSelected;
549*b1cdbd2cSJim Jagielski }
550*b1cdbd2cSJim Jagielski
551*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------------
552*b1cdbd2cSJim Jagielski
Select()553*b1cdbd2cSJim Jagielski void OAccessibleMenuBaseComponent::Select()
554*b1cdbd2cSJim Jagielski {
555*b1cdbd2cSJim Jagielski }
556*b1cdbd2cSJim Jagielski
557*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------------
558*b1cdbd2cSJim Jagielski
DeSelect()559*b1cdbd2cSJim Jagielski void OAccessibleMenuBaseComponent::DeSelect()
560*b1cdbd2cSJim Jagielski {
561*b1cdbd2cSJim Jagielski }
562*b1cdbd2cSJim Jagielski
563*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------------
564*b1cdbd2cSJim Jagielski
Click()565*b1cdbd2cSJim Jagielski void OAccessibleMenuBaseComponent::Click()
566*b1cdbd2cSJim Jagielski {
567*b1cdbd2cSJim Jagielski }
568*b1cdbd2cSJim Jagielski
569*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------------
570*b1cdbd2cSJim Jagielski
IsPopupMenuOpen()571*b1cdbd2cSJim Jagielski sal_Bool OAccessibleMenuBaseComponent::IsPopupMenuOpen()
572*b1cdbd2cSJim Jagielski {
573*b1cdbd2cSJim Jagielski return sal_False;
574*b1cdbd2cSJim Jagielski }
575*b1cdbd2cSJim Jagielski
576*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------------
577*b1cdbd2cSJim Jagielski
IMPL_LINK(OAccessibleMenuBaseComponent,MenuEventListener,VclSimpleEvent *,pEvent)578*b1cdbd2cSJim Jagielski IMPL_LINK( OAccessibleMenuBaseComponent, MenuEventListener, VclSimpleEvent*, pEvent )
579*b1cdbd2cSJim Jagielski {
580*b1cdbd2cSJim Jagielski DBG_ASSERT( pEvent && pEvent->ISA( VclMenuEvent ), "OAccessibleMenuBaseComponent - Unknown MenuEvent!" );
581*b1cdbd2cSJim Jagielski if ( pEvent && pEvent->ISA( VclMenuEvent ) )
582*b1cdbd2cSJim Jagielski {
583*b1cdbd2cSJim Jagielski DBG_ASSERT( ((VclMenuEvent*)pEvent)->GetMenu(), "OAccessibleMenuBaseComponent - Menu?" );
584*b1cdbd2cSJim Jagielski ProcessMenuEvent( *(VclMenuEvent*)pEvent );
585*b1cdbd2cSJim Jagielski }
586*b1cdbd2cSJim Jagielski return 0;
587*b1cdbd2cSJim Jagielski }
588*b1cdbd2cSJim Jagielski
589*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------------
590*b1cdbd2cSJim Jagielski
ProcessMenuEvent(const VclMenuEvent & rVclMenuEvent)591*b1cdbd2cSJim Jagielski void OAccessibleMenuBaseComponent::ProcessMenuEvent( const VclMenuEvent& rVclMenuEvent )
592*b1cdbd2cSJim Jagielski {
593*b1cdbd2cSJim Jagielski sal_uInt16 nItemPos = rVclMenuEvent.GetItemPos();
594*b1cdbd2cSJim Jagielski
595*b1cdbd2cSJim Jagielski switch ( rVclMenuEvent.GetId() )
596*b1cdbd2cSJim Jagielski {
597*b1cdbd2cSJim Jagielski case VCLEVENT_MENU_SHOW:
598*b1cdbd2cSJim Jagielski case VCLEVENT_MENU_HIDE:
599*b1cdbd2cSJim Jagielski {
600*b1cdbd2cSJim Jagielski UpdateVisible();
601*b1cdbd2cSJim Jagielski }
602*b1cdbd2cSJim Jagielski break;
603*b1cdbd2cSJim Jagielski case VCLEVENT_MENU_HIGHLIGHT:
604*b1cdbd2cSJim Jagielski {
605*b1cdbd2cSJim Jagielski SetFocused( sal_False );
606*b1cdbd2cSJim Jagielski UpdateFocused( nItemPos, sal_True );
607*b1cdbd2cSJim Jagielski UpdateSelected( nItemPos, sal_True );
608*b1cdbd2cSJim Jagielski }
609*b1cdbd2cSJim Jagielski break;
610*b1cdbd2cSJim Jagielski case VCLEVENT_MENU_DEHIGHLIGHT:
611*b1cdbd2cSJim Jagielski {
612*b1cdbd2cSJim Jagielski UpdateFocused( nItemPos, sal_False );
613*b1cdbd2cSJim Jagielski UpdateSelected( nItemPos, sal_False );
614*b1cdbd2cSJim Jagielski }
615*b1cdbd2cSJim Jagielski break;
616*b1cdbd2cSJim Jagielski case VCLEVENT_MENU_SUBMENUACTIVATE:
617*b1cdbd2cSJim Jagielski {
618*b1cdbd2cSJim Jagielski }
619*b1cdbd2cSJim Jagielski break;
620*b1cdbd2cSJim Jagielski case VCLEVENT_MENU_SUBMENUDEACTIVATE:
621*b1cdbd2cSJim Jagielski {
622*b1cdbd2cSJim Jagielski UpdateFocused( nItemPos, sal_True );
623*b1cdbd2cSJim Jagielski }
624*b1cdbd2cSJim Jagielski break;
625*b1cdbd2cSJim Jagielski case VCLEVENT_MENU_ENABLE:
626*b1cdbd2cSJim Jagielski {
627*b1cdbd2cSJim Jagielski UpdateEnabled( nItemPos, sal_True );
628*b1cdbd2cSJim Jagielski }
629*b1cdbd2cSJim Jagielski break;
630*b1cdbd2cSJim Jagielski case VCLEVENT_MENU_DISABLE:
631*b1cdbd2cSJim Jagielski {
632*b1cdbd2cSJim Jagielski UpdateEnabled( nItemPos, sal_False );
633*b1cdbd2cSJim Jagielski }
634*b1cdbd2cSJim Jagielski break;
635*b1cdbd2cSJim Jagielski case VCLEVENT_MENU_SUBMENUCHANGED:
636*b1cdbd2cSJim Jagielski {
637*b1cdbd2cSJim Jagielski RemoveChild( nItemPos );
638*b1cdbd2cSJim Jagielski InsertChild( nItemPos );
639*b1cdbd2cSJim Jagielski }
640*b1cdbd2cSJim Jagielski break;
641*b1cdbd2cSJim Jagielski case VCLEVENT_MENU_INSERTITEM:
642*b1cdbd2cSJim Jagielski {
643*b1cdbd2cSJim Jagielski InsertChild( nItemPos );
644*b1cdbd2cSJim Jagielski }
645*b1cdbd2cSJim Jagielski break;
646*b1cdbd2cSJim Jagielski case VCLEVENT_MENU_REMOVEITEM:
647*b1cdbd2cSJim Jagielski {
648*b1cdbd2cSJim Jagielski RemoveChild( nItemPos );
649*b1cdbd2cSJim Jagielski }
650*b1cdbd2cSJim Jagielski break;
651*b1cdbd2cSJim Jagielski case VCLEVENT_MENU_ACCESSIBLENAMECHANGED:
652*b1cdbd2cSJim Jagielski {
653*b1cdbd2cSJim Jagielski UpdateAccessibleName( nItemPos );
654*b1cdbd2cSJim Jagielski }
655*b1cdbd2cSJim Jagielski break;
656*b1cdbd2cSJim Jagielski case VCLEVENT_MENU_ITEMTEXTCHANGED:
657*b1cdbd2cSJim Jagielski {
658*b1cdbd2cSJim Jagielski UpdateAccessibleName( nItemPos );
659*b1cdbd2cSJim Jagielski UpdateItemText( nItemPos );
660*b1cdbd2cSJim Jagielski }
661*b1cdbd2cSJim Jagielski break;
662*b1cdbd2cSJim Jagielski case VCLEVENT_MENU_ITEMCHECKED:
663*b1cdbd2cSJim Jagielski {
664*b1cdbd2cSJim Jagielski UpdateChecked( nItemPos, sal_True );
665*b1cdbd2cSJim Jagielski }
666*b1cdbd2cSJim Jagielski break;
667*b1cdbd2cSJim Jagielski case VCLEVENT_MENU_ITEMUNCHECKED:
668*b1cdbd2cSJim Jagielski {
669*b1cdbd2cSJim Jagielski UpdateChecked( nItemPos, sal_False );
670*b1cdbd2cSJim Jagielski }
671*b1cdbd2cSJim Jagielski break;
672*b1cdbd2cSJim Jagielski case VCLEVENT_OBJECT_DYING:
673*b1cdbd2cSJim Jagielski {
674*b1cdbd2cSJim Jagielski if ( m_pMenu )
675*b1cdbd2cSJim Jagielski {
676*b1cdbd2cSJim Jagielski m_pMenu->RemoveEventListener( LINK( this, OAccessibleMenuBaseComponent, MenuEventListener ) );
677*b1cdbd2cSJim Jagielski
678*b1cdbd2cSJim Jagielski m_pMenu = NULL;
679*b1cdbd2cSJim Jagielski
680*b1cdbd2cSJim Jagielski // dispose all menu items
681*b1cdbd2cSJim Jagielski for ( sal_uInt32 i = 0; i < m_aAccessibleChildren.size(); ++i )
682*b1cdbd2cSJim Jagielski {
683*b1cdbd2cSJim Jagielski Reference< XComponent > xComponent( m_aAccessibleChildren[i], UNO_QUERY );
684*b1cdbd2cSJim Jagielski if ( xComponent.is() )
685*b1cdbd2cSJim Jagielski xComponent->dispose();
686*b1cdbd2cSJim Jagielski }
687*b1cdbd2cSJim Jagielski m_aAccessibleChildren.clear();
688*b1cdbd2cSJim Jagielski }
689*b1cdbd2cSJim Jagielski }
690*b1cdbd2cSJim Jagielski break;
691*b1cdbd2cSJim Jagielski default:
692*b1cdbd2cSJim Jagielski {
693*b1cdbd2cSJim Jagielski }
694*b1cdbd2cSJim Jagielski break;
695*b1cdbd2cSJim Jagielski }
696*b1cdbd2cSJim Jagielski }
697*b1cdbd2cSJim Jagielski
698*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------------
699*b1cdbd2cSJim Jagielski // XInterface
700*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------------
701*b1cdbd2cSJim Jagielski
IMPLEMENT_FORWARD_XINTERFACE2(OAccessibleMenuBaseComponent,AccessibleExtendedComponentHelper_BASE,OAccessibleMenuBaseComponent_BASE)702*b1cdbd2cSJim Jagielski IMPLEMENT_FORWARD_XINTERFACE2( OAccessibleMenuBaseComponent, AccessibleExtendedComponentHelper_BASE, OAccessibleMenuBaseComponent_BASE )
703*b1cdbd2cSJim Jagielski
704*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------------
705*b1cdbd2cSJim Jagielski // XTypeProvider
706*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------------
707*b1cdbd2cSJim Jagielski
708*b1cdbd2cSJim Jagielski IMPLEMENT_FORWARD_XTYPEPROVIDER2( OAccessibleMenuBaseComponent, AccessibleExtendedComponentHelper_BASE, OAccessibleMenuBaseComponent_BASE )
709*b1cdbd2cSJim Jagielski
710*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------------
711*b1cdbd2cSJim Jagielski // XComponent
712*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------------
713*b1cdbd2cSJim Jagielski
714*b1cdbd2cSJim Jagielski void OAccessibleMenuBaseComponent::disposing()
715*b1cdbd2cSJim Jagielski {
716*b1cdbd2cSJim Jagielski AccessibleExtendedComponentHelper_BASE::disposing();
717*b1cdbd2cSJim Jagielski
718*b1cdbd2cSJim Jagielski if ( m_pMenu )
719*b1cdbd2cSJim Jagielski {
720*b1cdbd2cSJim Jagielski m_pMenu->RemoveEventListener( LINK( this, OAccessibleMenuBaseComponent, MenuEventListener ) );
721*b1cdbd2cSJim Jagielski
722*b1cdbd2cSJim Jagielski m_pMenu = NULL;
723*b1cdbd2cSJim Jagielski
724*b1cdbd2cSJim Jagielski // dispose all menu items
725*b1cdbd2cSJim Jagielski for ( sal_uInt32 i = 0; i < m_aAccessibleChildren.size(); ++i )
726*b1cdbd2cSJim Jagielski {
727*b1cdbd2cSJim Jagielski Reference< XComponent > xComponent( m_aAccessibleChildren[i], UNO_QUERY );
728*b1cdbd2cSJim Jagielski if ( xComponent.is() )
729*b1cdbd2cSJim Jagielski xComponent->dispose();
730*b1cdbd2cSJim Jagielski }
731*b1cdbd2cSJim Jagielski m_aAccessibleChildren.clear();
732*b1cdbd2cSJim Jagielski }
733*b1cdbd2cSJim Jagielski }
734*b1cdbd2cSJim Jagielski
735*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------------
736*b1cdbd2cSJim Jagielski // XServiceInfo
737*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------------
738*b1cdbd2cSJim Jagielski
supportsService(const::rtl::OUString & rServiceName)739*b1cdbd2cSJim Jagielski sal_Bool OAccessibleMenuBaseComponent::supportsService( const ::rtl::OUString& rServiceName ) throw (RuntimeException)
740*b1cdbd2cSJim Jagielski {
741*b1cdbd2cSJim Jagielski Sequence< ::rtl::OUString > aNames( getSupportedServiceNames() );
742*b1cdbd2cSJim Jagielski const ::rtl::OUString* pNames = aNames.getConstArray();
743*b1cdbd2cSJim Jagielski const ::rtl::OUString* pEnd = pNames + aNames.getLength();
744*b1cdbd2cSJim Jagielski for ( ; pNames != pEnd && !pNames->equals( rServiceName ); ++pNames )
745*b1cdbd2cSJim Jagielski ;
746*b1cdbd2cSJim Jagielski
747*b1cdbd2cSJim Jagielski return pNames != pEnd;
748*b1cdbd2cSJim Jagielski }
749*b1cdbd2cSJim Jagielski
750*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------------
751*b1cdbd2cSJim Jagielski // XAccessible
752*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------------
753*b1cdbd2cSJim Jagielski
getAccessibleContext()754*b1cdbd2cSJim Jagielski Reference< XAccessibleContext > OAccessibleMenuBaseComponent::getAccessibleContext( ) throw (RuntimeException)
755*b1cdbd2cSJim Jagielski {
756*b1cdbd2cSJim Jagielski OExternalLockGuard aGuard( this );
757*b1cdbd2cSJim Jagielski
758*b1cdbd2cSJim Jagielski return this;
759*b1cdbd2cSJim Jagielski }
760*b1cdbd2cSJim Jagielski
761*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------------
762*b1cdbd2cSJim Jagielski // XAccessibleContext
763*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------------
764*b1cdbd2cSJim Jagielski
getAccessibleStateSet()765*b1cdbd2cSJim Jagielski Reference< XAccessibleStateSet > OAccessibleMenuBaseComponent::getAccessibleStateSet( ) throw (RuntimeException)
766*b1cdbd2cSJim Jagielski {
767*b1cdbd2cSJim Jagielski OExternalLockGuard aGuard( this );
768*b1cdbd2cSJim Jagielski
769*b1cdbd2cSJim Jagielski utl::AccessibleStateSetHelper* pStateSetHelper = new utl::AccessibleStateSetHelper;
770*b1cdbd2cSJim Jagielski Reference< XAccessibleStateSet > xSet = pStateSetHelper;
771*b1cdbd2cSJim Jagielski
772*b1cdbd2cSJim Jagielski if ( !rBHelper.bDisposed && !rBHelper.bInDispose )
773*b1cdbd2cSJim Jagielski {
774*b1cdbd2cSJim Jagielski FillAccessibleStateSet( *pStateSetHelper );
775*b1cdbd2cSJim Jagielski }
776*b1cdbd2cSJim Jagielski else
777*b1cdbd2cSJim Jagielski {
778*b1cdbd2cSJim Jagielski pStateSetHelper->AddState( AccessibleStateType::DEFUNC );
779*b1cdbd2cSJim Jagielski }
780*b1cdbd2cSJim Jagielski
781*b1cdbd2cSJim Jagielski return xSet;
782*b1cdbd2cSJim Jagielski }
783*b1cdbd2cSJim Jagielski
784*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------------
785*b1cdbd2cSJim Jagielski
IsMenuHideDisabledEntries()786*b1cdbd2cSJim Jagielski sal_Bool OAccessibleMenuBaseComponent::IsMenuHideDisabledEntries()
787*b1cdbd2cSJim Jagielski {
788*b1cdbd2cSJim Jagielski return sal_False;
789*b1cdbd2cSJim Jagielski }
790*b1cdbd2cSJim Jagielski
791