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_sc.hxx"
26*b1cdbd2cSJim Jagielski #include "AccessibleDataPilotControl.hxx"
27*b1cdbd2cSJim Jagielski #include "unoguard.hxx"
28*b1cdbd2cSJim Jagielski #include "fieldwnd.hxx"
29*b1cdbd2cSJim Jagielski
30*b1cdbd2cSJim Jagielski #include <com/sun/star/accessibility/AccessibleRole.hpp>
31*b1cdbd2cSJim Jagielski #include <com/sun/star/accessibility/AccessibleStateType.hpp>
32*b1cdbd2cSJim Jagielski #include <com/sun/star/accessibility/AccessibleEventId.hpp>
33*b1cdbd2cSJim Jagielski
34*b1cdbd2cSJim Jagielski #include <com/sun/star/accessibility/XAccessibleAction.hpp>
35*b1cdbd2cSJim Jagielski #include <comphelper/accessiblekeybindinghelper.hxx>
36*b1cdbd2cSJim Jagielski #include <com/sun/star/awt/KeyModifier.hpp>
37*b1cdbd2cSJim Jagielski #include <vcl/keycodes.hxx>
38*b1cdbd2cSJim Jagielski #ifndef _UTL_ACCESSIBLESTATESETHELPER_HXX
39*b1cdbd2cSJim Jagielski #include <unotools/accessiblestatesethelper.hxx>
40*b1cdbd2cSJim Jagielski #endif
41*b1cdbd2cSJim Jagielski #include <rtl/uuid.h>
42*b1cdbd2cSJim Jagielski #include <tools/gen.hxx>
43*b1cdbd2cSJim Jagielski #include <toolkit/helper/convert.hxx>
44*b1cdbd2cSJim Jagielski #include <tools/debug.hxx>
45*b1cdbd2cSJim Jagielski
46*b1cdbd2cSJim Jagielski #include <com/sun/star/accessibility/AccessibleRelationType.hpp>
47*b1cdbd2cSJim Jagielski #include <unotools/accessiblerelationsethelper.hxx>
48*b1cdbd2cSJim Jagielski using namespace ::com::sun::star;
49*b1cdbd2cSJim Jagielski using namespace ::com::sun::star::accessibility;
50*b1cdbd2cSJim Jagielski
51*b1cdbd2cSJim Jagielski class ScAccessibleDataPilotButton
52*b1cdbd2cSJim Jagielski : public ScAccessibleContextBase
53*b1cdbd2cSJim Jagielski , public ::com::sun::star::accessibility::XAccessibleAction
54*b1cdbd2cSJim Jagielski {
55*b1cdbd2cSJim Jagielski public:
56*b1cdbd2cSJim Jagielski //===== internal ========================================================
57*b1cdbd2cSJim Jagielski ScAccessibleDataPilotButton(
58*b1cdbd2cSJim Jagielski const ::com::sun::star::uno::Reference<
59*b1cdbd2cSJim Jagielski ::com::sun::star::accessibility::XAccessible>& rxParent,
60*b1cdbd2cSJim Jagielski ScPivotFieldWindow* pFieldWindow,
61*b1cdbd2cSJim Jagielski sal_Int32 nIndex);
62*b1cdbd2cSJim Jagielski
63*b1cdbd2cSJim Jagielski virtual void Init();
64*b1cdbd2cSJim Jagielski
65*b1cdbd2cSJim Jagielski using ScAccessibleContextBase::disposing;
66*b1cdbd2cSJim Jagielski virtual void SAL_CALL disposing();
67*b1cdbd2cSJim Jagielski
SetIndex(sal_Int32 nIndex)68*b1cdbd2cSJim Jagielski void SetIndex(sal_Int32 nIndex) { mnIndex = nIndex; }
69*b1cdbd2cSJim Jagielski void NameChanged();
70*b1cdbd2cSJim Jagielski void SetFocused();
71*b1cdbd2cSJim Jagielski void ResetFocused();
72*b1cdbd2cSJim Jagielski protected:
73*b1cdbd2cSJim Jagielski virtual ~ScAccessibleDataPilotButton(void);
74*b1cdbd2cSJim Jagielski public:
75*b1cdbd2cSJim Jagielski // XAccessibleAction
76*b1cdbd2cSJim Jagielski virtual sal_Int32 SAL_CALL getAccessibleActionCount( ) throw (::com::sun::star::uno::RuntimeException);
77*b1cdbd2cSJim Jagielski virtual sal_Bool SAL_CALL doAccessibleAction ( sal_Int32 nIndex ) throw (::com::sun::star::lang::IndexOutOfBoundsException, ::com::sun::star::uno::RuntimeException);
78*b1cdbd2cSJim Jagielski virtual ::rtl::OUString SAL_CALL getAccessibleActionDescription ( sal_Int32 nIndex ) throw (::com::sun::star::lang::IndexOutOfBoundsException, ::com::sun::star::uno::RuntimeException);
79*b1cdbd2cSJim Jagielski virtual ::com::sun::star::uno::Reference< ::com::sun::star::accessibility::XAccessibleKeyBinding > SAL_CALL getAccessibleActionKeyBinding( sal_Int32 nIndex ) throw (::com::sun::star::lang::IndexOutOfBoundsException, ::com::sun::star::uno::RuntimeException);
80*b1cdbd2cSJim Jagielski ///===== XInterface =====================================================
81*b1cdbd2cSJim Jagielski virtual ::com::sun::star::uno::Any SAL_CALL queryInterface(
82*b1cdbd2cSJim Jagielski ::com::sun::star::uno::Type const & rType )
83*b1cdbd2cSJim Jagielski throw (::com::sun::star::uno::RuntimeException);
84*b1cdbd2cSJim Jagielski virtual void SAL_CALL acquire() throw ();
85*b1cdbd2cSJim Jagielski virtual void SAL_CALL release() throw ();
86*b1cdbd2cSJim Jagielski ///===== XAccessibleComponent ============================================
87*b1cdbd2cSJim Jagielski
88*b1cdbd2cSJim Jagielski virtual ::com::sun::star::uno::Reference< ::com::sun::star::accessibility::XAccessible >
89*b1cdbd2cSJim Jagielski SAL_CALL getAccessibleAtPoint(
90*b1cdbd2cSJim Jagielski const ::com::sun::star::awt::Point& rPoint )
91*b1cdbd2cSJim Jagielski throw (::com::sun::star::uno::RuntimeException);
92*b1cdbd2cSJim Jagielski
93*b1cdbd2cSJim Jagielski virtual sal_Bool SAL_CALL isVisible( )
94*b1cdbd2cSJim Jagielski throw (::com::sun::star::uno::RuntimeException);
95*b1cdbd2cSJim Jagielski
96*b1cdbd2cSJim Jagielski virtual void SAL_CALL grabFocus( )
97*b1cdbd2cSJim Jagielski throw (::com::sun::star::uno::RuntimeException);
98*b1cdbd2cSJim Jagielski
99*b1cdbd2cSJim Jagielski virtual sal_Int32 SAL_CALL getForeground( )
100*b1cdbd2cSJim Jagielski throw (::com::sun::star::uno::RuntimeException);
101*b1cdbd2cSJim Jagielski
102*b1cdbd2cSJim Jagielski virtual sal_Int32 SAL_CALL getBackground( )
103*b1cdbd2cSJim Jagielski throw (::com::sun::star::uno::RuntimeException);
104*b1cdbd2cSJim Jagielski
105*b1cdbd2cSJim Jagielski ///===== XAccessibleContext ==============================================
106*b1cdbd2cSJim Jagielski
107*b1cdbd2cSJim Jagielski /// Return the number of currently visible children.
108*b1cdbd2cSJim Jagielski virtual sal_Int32 SAL_CALL
109*b1cdbd2cSJim Jagielski getAccessibleChildCount(void) throw (::com::sun::star::uno::RuntimeException);
110*b1cdbd2cSJim Jagielski
111*b1cdbd2cSJim Jagielski /// Return the specified child or NULL if index is invalid.
112*b1cdbd2cSJim Jagielski virtual ::com::sun::star::uno::Reference< ::com::sun::star::accessibility::XAccessible> SAL_CALL
113*b1cdbd2cSJim Jagielski getAccessibleChild(sal_Int32 nIndex)
114*b1cdbd2cSJim Jagielski throw (::com::sun::star::uno::RuntimeException,
115*b1cdbd2cSJim Jagielski ::com::sun::star::lang::IndexOutOfBoundsException);
116*b1cdbd2cSJim Jagielski
117*b1cdbd2cSJim Jagielski /// Return this objects index among the parents children.
118*b1cdbd2cSJim Jagielski virtual sal_Int32 SAL_CALL
119*b1cdbd2cSJim Jagielski getAccessibleIndexInParent(void)
120*b1cdbd2cSJim Jagielski throw (::com::sun::star::uno::RuntimeException);
121*b1cdbd2cSJim Jagielski
122*b1cdbd2cSJim Jagielski /// Return the set of current states.
123*b1cdbd2cSJim Jagielski virtual ::com::sun::star::uno::Reference<
124*b1cdbd2cSJim Jagielski ::com::sun::star::accessibility::XAccessibleStateSet> SAL_CALL
125*b1cdbd2cSJim Jagielski getAccessibleStateSet(void)
126*b1cdbd2cSJim Jagielski throw (::com::sun::star::uno::RuntimeException);
127*b1cdbd2cSJim Jagielski ::com::sun::star::uno::Reference< ::com::sun::star::accessibility::XAccessibleRelationSet >
128*b1cdbd2cSJim Jagielski SAL_CALL getAccessibleRelationSet( ) throw (::com::sun::star::uno::RuntimeException);
129*b1cdbd2cSJim Jagielski ///===== XServiceInfo ====================================================
130*b1cdbd2cSJim Jagielski
131*b1cdbd2cSJim Jagielski /** Returns an identifier for the implementation of this object.
132*b1cdbd2cSJim Jagielski */
133*b1cdbd2cSJim Jagielski virtual ::rtl::OUString SAL_CALL
134*b1cdbd2cSJim Jagielski getImplementationName(void)
135*b1cdbd2cSJim Jagielski throw (::com::sun::star::uno::RuntimeException);
136*b1cdbd2cSJim Jagielski
137*b1cdbd2cSJim Jagielski ///===== XTypeProvider ===================================================
138*b1cdbd2cSJim Jagielski
139*b1cdbd2cSJim Jagielski /** Returns a implementation id.
140*b1cdbd2cSJim Jagielski */
141*b1cdbd2cSJim Jagielski virtual ::com::sun::star::uno::Sequence<sal_Int8> SAL_CALL
142*b1cdbd2cSJim Jagielski getImplementationId(void)
143*b1cdbd2cSJim Jagielski throw (::com::sun::star::uno::RuntimeException);
144*b1cdbd2cSJim Jagielski
145*b1cdbd2cSJim Jagielski protected:
146*b1cdbd2cSJim Jagielski /// Return this object's description.
147*b1cdbd2cSJim Jagielski virtual ::rtl::OUString SAL_CALL
148*b1cdbd2cSJim Jagielski createAccessibleDescription(void)
149*b1cdbd2cSJim Jagielski throw (::com::sun::star::uno::RuntimeException);
150*b1cdbd2cSJim Jagielski
151*b1cdbd2cSJim Jagielski /// Return the object's current name.
152*b1cdbd2cSJim Jagielski virtual ::rtl::OUString SAL_CALL
153*b1cdbd2cSJim Jagielski createAccessibleName(void)
154*b1cdbd2cSJim Jagielski throw (::com::sun::star::uno::RuntimeException);
155*b1cdbd2cSJim Jagielski
156*b1cdbd2cSJim Jagielski /// Return the object's current bounding box relative to the desktop.
157*b1cdbd2cSJim Jagielski virtual Rectangle GetBoundingBoxOnScreen(void) const
158*b1cdbd2cSJim Jagielski throw (::com::sun::star::uno::RuntimeException);
159*b1cdbd2cSJim Jagielski
160*b1cdbd2cSJim Jagielski /// Return the object's current bounding box relative to the parent object.
161*b1cdbd2cSJim Jagielski virtual Rectangle GetBoundingBox(void) const
162*b1cdbd2cSJim Jagielski throw (::com::sun::star::uno::RuntimeException);
163*b1cdbd2cSJim Jagielski
164*b1cdbd2cSJim Jagielski private:
165*b1cdbd2cSJim Jagielski ScPivotFieldWindow* mpFieldWindow;
166*b1cdbd2cSJim Jagielski sal_Int32 mnIndex;
167*b1cdbd2cSJim Jagielski };
168*b1cdbd2cSJim Jagielski
169*b1cdbd2cSJim Jagielski //===== internal ========================================================
ScAccessibleDataPilotControl(const uno::Reference<XAccessible> & rxParent,ScPivotFieldWindow * pFieldWindow)170*b1cdbd2cSJim Jagielski ScAccessibleDataPilotControl::ScAccessibleDataPilotControl(
171*b1cdbd2cSJim Jagielski const uno::Reference<XAccessible>& rxParent,
172*b1cdbd2cSJim Jagielski ScPivotFieldWindow* pFieldWindow)
173*b1cdbd2cSJim Jagielski :
174*b1cdbd2cSJim Jagielski ScAccessibleContextBase(rxParent, AccessibleRole::GROUP_BOX),
175*b1cdbd2cSJim Jagielski mpFieldWindow(pFieldWindow)
176*b1cdbd2cSJim Jagielski {
177*b1cdbd2cSJim Jagielski if (mpFieldWindow)
178*b1cdbd2cSJim Jagielski maChildren.resize(mpFieldWindow->GetFieldCount());
179*b1cdbd2cSJim Jagielski }
180*b1cdbd2cSJim Jagielski
~ScAccessibleDataPilotControl(void)181*b1cdbd2cSJim Jagielski ScAccessibleDataPilotControl::~ScAccessibleDataPilotControl(void)
182*b1cdbd2cSJim Jagielski {
183*b1cdbd2cSJim Jagielski if (!IsDefunc() && !rBHelper.bInDispose)
184*b1cdbd2cSJim Jagielski {
185*b1cdbd2cSJim Jagielski // increment refcount to prevent double call off dtor
186*b1cdbd2cSJim Jagielski osl_incrementInterlockedCount( &m_refCount );
187*b1cdbd2cSJim Jagielski // call dispose to inform object wich have a weak reference to this object
188*b1cdbd2cSJim Jagielski dispose();
189*b1cdbd2cSJim Jagielski }
190*b1cdbd2cSJim Jagielski }
191*b1cdbd2cSJim Jagielski
Init()192*b1cdbd2cSJim Jagielski void ScAccessibleDataPilotControl::Init()
193*b1cdbd2cSJim Jagielski {
194*b1cdbd2cSJim Jagielski }
195*b1cdbd2cSJim Jagielski
disposing()196*b1cdbd2cSJim Jagielski void SAL_CALL ScAccessibleDataPilotControl::disposing()
197*b1cdbd2cSJim Jagielski {
198*b1cdbd2cSJim Jagielski ScUnoGuard aGuard;
199*b1cdbd2cSJim Jagielski mpFieldWindow = NULL;
200*b1cdbd2cSJim Jagielski
201*b1cdbd2cSJim Jagielski ScAccessibleContextBase::disposing();
202*b1cdbd2cSJim Jagielski }
203*b1cdbd2cSJim Jagielski
AddField(sal_Int32 nNewIndex)204*b1cdbd2cSJim Jagielski void ScAccessibleDataPilotControl::AddField(sal_Int32 nNewIndex)
205*b1cdbd2cSJim Jagielski {
206*b1cdbd2cSJim Jagielski sal_Bool bAdded(sal_False);
207*b1cdbd2cSJim Jagielski if (static_cast<size_t>(nNewIndex) == maChildren.size())
208*b1cdbd2cSJim Jagielski {
209*b1cdbd2cSJim Jagielski maChildren.push_back(AccessibleWeak());
210*b1cdbd2cSJim Jagielski bAdded = sal_True;
211*b1cdbd2cSJim Jagielski }
212*b1cdbd2cSJim Jagielski else if (static_cast<size_t>(nNewIndex) < maChildren.size())
213*b1cdbd2cSJim Jagielski {
214*b1cdbd2cSJim Jagielski ::std::vector < AccessibleWeak >::iterator aItr = maChildren.begin() + nNewIndex;
215*b1cdbd2cSJim Jagielski maChildren.insert(aItr, AccessibleWeak());
216*b1cdbd2cSJim Jagielski
217*b1cdbd2cSJim Jagielski ::std::vector < AccessibleWeak >::iterator aEndItr = maChildren.end();
218*b1cdbd2cSJim Jagielski aItr = maChildren.begin() + nNewIndex + 1;
219*b1cdbd2cSJim Jagielski uno::Reference< XAccessible > xTempAcc;
220*b1cdbd2cSJim Jagielski sal_Int32 nIndex = nNewIndex + 1;
221*b1cdbd2cSJim Jagielski while (aItr != aEndItr)
222*b1cdbd2cSJim Jagielski {
223*b1cdbd2cSJim Jagielski xTempAcc = aItr->xWeakAcc;
224*b1cdbd2cSJim Jagielski if (xTempAcc.is() && aItr->pAcc)
225*b1cdbd2cSJim Jagielski aItr->pAcc->SetIndex(nIndex);
226*b1cdbd2cSJim Jagielski ++nIndex;
227*b1cdbd2cSJim Jagielski ++aItr;
228*b1cdbd2cSJim Jagielski }
229*b1cdbd2cSJim Jagielski bAdded = sal_True;
230*b1cdbd2cSJim Jagielski }
231*b1cdbd2cSJim Jagielski else
232*b1cdbd2cSJim Jagielski {
233*b1cdbd2cSJim Jagielski DBG_ERRORFILE("did not recognize a child count change");
234*b1cdbd2cSJim Jagielski }
235*b1cdbd2cSJim Jagielski
236*b1cdbd2cSJim Jagielski if (bAdded)
237*b1cdbd2cSJim Jagielski {
238*b1cdbd2cSJim Jagielski AccessibleEventObject aEvent;
239*b1cdbd2cSJim Jagielski aEvent.EventId = AccessibleEventId::CHILD;
240*b1cdbd2cSJim Jagielski aEvent.Source = uno::Reference< XAccessibleContext >(this);
241*b1cdbd2cSJim Jagielski aEvent.NewValue <<= getAccessibleChild(nNewIndex);
242*b1cdbd2cSJim Jagielski
243*b1cdbd2cSJim Jagielski CommitChange(aEvent); // new child - event
244*b1cdbd2cSJim Jagielski }
245*b1cdbd2cSJim Jagielski }
246*b1cdbd2cSJim Jagielski
RemoveField(sal_Int32 nOldIndex)247*b1cdbd2cSJim Jagielski void ScAccessibleDataPilotControl::RemoveField(sal_Int32 nOldIndex)
248*b1cdbd2cSJim Jagielski {
249*b1cdbd2cSJim Jagielski sal_Bool bRemoved(sal_False);
250*b1cdbd2cSJim Jagielski uno::Reference< XAccessible > xTempAcc;
251*b1cdbd2cSJim Jagielski ScAccessibleDataPilotButton* pField = NULL;
252*b1cdbd2cSJim Jagielski if (static_cast<size_t>(nOldIndex) < maChildren.size())
253*b1cdbd2cSJim Jagielski {
254*b1cdbd2cSJim Jagielski xTempAcc = getAccessibleChild(nOldIndex);
255*b1cdbd2cSJim Jagielski pField = maChildren[nOldIndex].pAcc;
256*b1cdbd2cSJim Jagielski
257*b1cdbd2cSJim Jagielski ::std::vector < AccessibleWeak >::iterator aItr = maChildren.begin() + nOldIndex;
258*b1cdbd2cSJim Jagielski aItr = maChildren.erase(aItr);
259*b1cdbd2cSJim Jagielski
260*b1cdbd2cSJim Jagielski ::std::vector < AccessibleWeak >::iterator aEndItr = maChildren.end();
261*b1cdbd2cSJim Jagielski uno::Reference< XAccessible > xItrAcc;
262*b1cdbd2cSJim Jagielski while (aItr != aEndItr)
263*b1cdbd2cSJim Jagielski {
264*b1cdbd2cSJim Jagielski xItrAcc = aItr->xWeakAcc;
265*b1cdbd2cSJim Jagielski if (xItrAcc.is() && aItr->pAcc)
266*b1cdbd2cSJim Jagielski aItr->pAcc->SetIndex(nOldIndex);
267*b1cdbd2cSJim Jagielski ++nOldIndex;
268*b1cdbd2cSJim Jagielski ++aItr;
269*b1cdbd2cSJim Jagielski }
270*b1cdbd2cSJim Jagielski bRemoved = sal_True;
271*b1cdbd2cSJim Jagielski }
272*b1cdbd2cSJim Jagielski else
273*b1cdbd2cSJim Jagielski {
274*b1cdbd2cSJim Jagielski DBG_ERRORFILE("did not recognize a child count change");
275*b1cdbd2cSJim Jagielski }
276*b1cdbd2cSJim Jagielski
277*b1cdbd2cSJim Jagielski if (bRemoved)
278*b1cdbd2cSJim Jagielski {
279*b1cdbd2cSJim Jagielski AccessibleEventObject aEvent;
280*b1cdbd2cSJim Jagielski aEvent.EventId = AccessibleEventId::CHILD;
281*b1cdbd2cSJim Jagielski aEvent.Source = uno::Reference< XAccessibleContext >(this);
282*b1cdbd2cSJim Jagielski aEvent.NewValue <<= xTempAcc;
283*b1cdbd2cSJim Jagielski
284*b1cdbd2cSJim Jagielski CommitChange(aEvent); // gone child - event
285*b1cdbd2cSJim Jagielski
286*b1cdbd2cSJim Jagielski if (pField)
287*b1cdbd2cSJim Jagielski pField->dispose();
288*b1cdbd2cSJim Jagielski }
289*b1cdbd2cSJim Jagielski }
290*b1cdbd2cSJim Jagielski
FieldFocusChange(sal_Int32 nOldIndex,sal_Int32 nNewIndex)291*b1cdbd2cSJim Jagielski void ScAccessibleDataPilotControl::FieldFocusChange(sal_Int32 nOldIndex, sal_Int32 nNewIndex)
292*b1cdbd2cSJim Jagielski {
293*b1cdbd2cSJim Jagielski DBG_ASSERT(static_cast<size_t>(nOldIndex) < maChildren.size() &&
294*b1cdbd2cSJim Jagielski static_cast<size_t>(nNewIndex) < maChildren.size(), "did not recognize a child count change");
295*b1cdbd2cSJim Jagielski
296*b1cdbd2cSJim Jagielski uno::Reference < XAccessible > xTempAcc = maChildren[nOldIndex].xWeakAcc;
297*b1cdbd2cSJim Jagielski if (xTempAcc.is() && maChildren[nOldIndex].pAcc)
298*b1cdbd2cSJim Jagielski maChildren[nOldIndex].pAcc->ResetFocused();
299*b1cdbd2cSJim Jagielski
300*b1cdbd2cSJim Jagielski xTempAcc = maChildren[nNewIndex].xWeakAcc;
301*b1cdbd2cSJim Jagielski if (xTempAcc.is() && maChildren[nNewIndex].pAcc)
302*b1cdbd2cSJim Jagielski maChildren[nNewIndex].pAcc->SetFocused();
303*b1cdbd2cSJim Jagielski }
304*b1cdbd2cSJim Jagielski
FieldNameChange(sal_Int32 nIndex)305*b1cdbd2cSJim Jagielski void ScAccessibleDataPilotControl::FieldNameChange(sal_Int32 nIndex)
306*b1cdbd2cSJim Jagielski {
307*b1cdbd2cSJim Jagielski DBG_ASSERT(static_cast<size_t>(nIndex) < maChildren.size(), "did not recognize a child count change");
308*b1cdbd2cSJim Jagielski
309*b1cdbd2cSJim Jagielski uno::Reference < XAccessible > xTempAcc = maChildren[nIndex].xWeakAcc;
310*b1cdbd2cSJim Jagielski if (xTempAcc.is() && maChildren[nIndex].pAcc)
311*b1cdbd2cSJim Jagielski maChildren[nIndex].pAcc->ChangeName();
312*b1cdbd2cSJim Jagielski }
313*b1cdbd2cSJim Jagielski
GotFocus()314*b1cdbd2cSJim Jagielski void ScAccessibleDataPilotControl::GotFocus()
315*b1cdbd2cSJim Jagielski {
316*b1cdbd2cSJim Jagielski if (mpFieldWindow)
317*b1cdbd2cSJim Jagielski {
318*b1cdbd2cSJim Jagielski DBG_ASSERT(mpFieldWindow->GetFieldCount() == maChildren.size(), "did not recognize a child count change");
319*b1cdbd2cSJim Jagielski
320*b1cdbd2cSJim Jagielski if(maChildren.size()==0)
321*b1cdbd2cSJim Jagielski return ;
322*b1cdbd2cSJim Jagielski sal_Int32 nIndex(mpFieldWindow->GetSelectedIndex());
323*b1cdbd2cSJim Jagielski uno::Reference < XAccessible > xTempAcc = maChildren[nIndex].xWeakAcc;
324*b1cdbd2cSJim Jagielski if (xTempAcc.is() && maChildren[nIndex].pAcc)
325*b1cdbd2cSJim Jagielski maChildren[nIndex].pAcc->SetFocused();
326*b1cdbd2cSJim Jagielski }
327*b1cdbd2cSJim Jagielski }
328*b1cdbd2cSJim Jagielski
LostFocus()329*b1cdbd2cSJim Jagielski void ScAccessibleDataPilotControl::LostFocus()
330*b1cdbd2cSJim Jagielski {
331*b1cdbd2cSJim Jagielski if (mpFieldWindow)
332*b1cdbd2cSJim Jagielski {
333*b1cdbd2cSJim Jagielski DBG_ASSERT(mpFieldWindow->GetFieldCount() == maChildren.size(), "did not recognize a child count change");
334*b1cdbd2cSJim Jagielski if(maChildren.size()==0)
335*b1cdbd2cSJim Jagielski return ;
336*b1cdbd2cSJim Jagielski sal_Int32 nIndex(mpFieldWindow->GetSelectedIndex());
337*b1cdbd2cSJim Jagielski uno::Reference < XAccessible > xTempAcc = maChildren[nIndex].xWeakAcc;
338*b1cdbd2cSJim Jagielski if (xTempAcc.is() && maChildren[nIndex].pAcc)
339*b1cdbd2cSJim Jagielski maChildren[nIndex].pAcc->ResetFocused();
340*b1cdbd2cSJim Jagielski }
341*b1cdbd2cSJim Jagielski }
342*b1cdbd2cSJim Jagielski
343*b1cdbd2cSJim Jagielski ///===== XAccessibleComponent ============================================
344*b1cdbd2cSJim Jagielski
getAccessibleAtPoint(const awt::Point & rPoint)345*b1cdbd2cSJim Jagielski uno::Reference< XAccessible > SAL_CALL ScAccessibleDataPilotControl::getAccessibleAtPoint(
346*b1cdbd2cSJim Jagielski const awt::Point& rPoint )
347*b1cdbd2cSJim Jagielski throw (uno::RuntimeException)
348*b1cdbd2cSJim Jagielski {
349*b1cdbd2cSJim Jagielski uno::Reference<XAccessible> xAcc;
350*b1cdbd2cSJim Jagielski if (containsPoint(rPoint))
351*b1cdbd2cSJim Jagielski {
352*b1cdbd2cSJim Jagielski ScUnoGuard aGuard;
353*b1cdbd2cSJim Jagielski IsObjectValid();
354*b1cdbd2cSJim Jagielski if (mpFieldWindow)
355*b1cdbd2cSJim Jagielski {
356*b1cdbd2cSJim Jagielski Point aAbsPoint(VCLPoint(rPoint));
357*b1cdbd2cSJim Jagielski Point aControlEdge(GetBoundingBoxOnScreen().TopLeft());
358*b1cdbd2cSJim Jagielski Point aRelPoint(aAbsPoint - aControlEdge);
359*b1cdbd2cSJim Jagielski size_t nChildIndex = mpFieldWindow->GetFieldIndex( aRelPoint );
360*b1cdbd2cSJim Jagielski if( nChildIndex != PIVOTFIELD_INVALID )
361*b1cdbd2cSJim Jagielski xAcc = getAccessibleChild(static_cast< long >( nChildIndex ));
362*b1cdbd2cSJim Jagielski }
363*b1cdbd2cSJim Jagielski }
364*b1cdbd2cSJim Jagielski return xAcc;
365*b1cdbd2cSJim Jagielski }
366*b1cdbd2cSJim Jagielski
isVisible()367*b1cdbd2cSJim Jagielski sal_Bool SAL_CALL ScAccessibleDataPilotControl::isVisible( )
368*b1cdbd2cSJim Jagielski throw (uno::RuntimeException)
369*b1cdbd2cSJim Jagielski {
370*b1cdbd2cSJim Jagielski return sal_True;
371*b1cdbd2cSJim Jagielski }
372*b1cdbd2cSJim Jagielski
grabFocus()373*b1cdbd2cSJim Jagielski void SAL_CALL ScAccessibleDataPilotControl::grabFocus( )
374*b1cdbd2cSJim Jagielski throw (uno::RuntimeException)
375*b1cdbd2cSJim Jagielski {
376*b1cdbd2cSJim Jagielski ScUnoGuard aGuard;
377*b1cdbd2cSJim Jagielski IsObjectValid();
378*b1cdbd2cSJim Jagielski if (mpFieldWindow)
379*b1cdbd2cSJim Jagielski mpFieldWindow->GrabFocus();
380*b1cdbd2cSJim Jagielski }
381*b1cdbd2cSJim Jagielski
getForeground()382*b1cdbd2cSJim Jagielski sal_Int32 SAL_CALL ScAccessibleDataPilotControl::getForeground( )
383*b1cdbd2cSJim Jagielski throw (uno::RuntimeException)
384*b1cdbd2cSJim Jagielski {
385*b1cdbd2cSJim Jagielski ScUnoGuard aGuard;
386*b1cdbd2cSJim Jagielski IsObjectValid();
387*b1cdbd2cSJim Jagielski sal_Int32 nColor(0);
388*b1cdbd2cSJim Jagielski if (mpFieldWindow)
389*b1cdbd2cSJim Jagielski {
390*b1cdbd2cSJim Jagielski nColor = mpFieldWindow->GetSettings().GetStyleSettings().GetWindowTextColor().GetColor();
391*b1cdbd2cSJim Jagielski }
392*b1cdbd2cSJim Jagielski return nColor;
393*b1cdbd2cSJim Jagielski }
394*b1cdbd2cSJim Jagielski
getBackground()395*b1cdbd2cSJim Jagielski sal_Int32 SAL_CALL ScAccessibleDataPilotControl::getBackground( )
396*b1cdbd2cSJim Jagielski throw (uno::RuntimeException)
397*b1cdbd2cSJim Jagielski {
398*b1cdbd2cSJim Jagielski ScUnoGuard aGuard;
399*b1cdbd2cSJim Jagielski IsObjectValid();
400*b1cdbd2cSJim Jagielski sal_Int32 nColor(0);
401*b1cdbd2cSJim Jagielski if (mpFieldWindow)
402*b1cdbd2cSJim Jagielski {
403*b1cdbd2cSJim Jagielski const StyleSettings& rStyleSett = mpFieldWindow->GetSettings().GetStyleSettings();
404*b1cdbd2cSJim Jagielski nColor = (mpFieldWindow->GetType() == PIVOTFIELDTYPE_SELECT) ? rStyleSett.GetFaceColor().GetColor() : rStyleSett.GetWindowColor().GetColor();
405*b1cdbd2cSJim Jagielski }
406*b1cdbd2cSJim Jagielski return nColor;
407*b1cdbd2cSJim Jagielski }
408*b1cdbd2cSJim Jagielski
409*b1cdbd2cSJim Jagielski ///===== XAccessibleContext ==============================================
410*b1cdbd2cSJim Jagielski
getAccessibleChildCount(void)411*b1cdbd2cSJim Jagielski sal_Int32 SAL_CALL ScAccessibleDataPilotControl::getAccessibleChildCount(void)
412*b1cdbd2cSJim Jagielski throw (uno::RuntimeException)
413*b1cdbd2cSJim Jagielski {
414*b1cdbd2cSJim Jagielski ScUnoGuard aGuard;
415*b1cdbd2cSJim Jagielski IsObjectValid();
416*b1cdbd2cSJim Jagielski if (mpFieldWindow)
417*b1cdbd2cSJim Jagielski return mpFieldWindow->GetFieldCount();
418*b1cdbd2cSJim Jagielski else
419*b1cdbd2cSJim Jagielski return 0;
420*b1cdbd2cSJim Jagielski }
421*b1cdbd2cSJim Jagielski
getAccessibleChild(sal_Int32 nIndex)422*b1cdbd2cSJim Jagielski uno::Reference< XAccessible> SAL_CALL ScAccessibleDataPilotControl::getAccessibleChild(sal_Int32 nIndex)
423*b1cdbd2cSJim Jagielski throw (uno::RuntimeException, lang::IndexOutOfBoundsException)
424*b1cdbd2cSJim Jagielski {
425*b1cdbd2cSJim Jagielski ScUnoGuard aGuard;
426*b1cdbd2cSJim Jagielski IsObjectValid();
427*b1cdbd2cSJim Jagielski uno::Reference<XAccessible> xAcc;
428*b1cdbd2cSJim Jagielski if (mpFieldWindow)
429*b1cdbd2cSJim Jagielski {
430*b1cdbd2cSJim Jagielski if (nIndex < 0 || static_cast< size_t >( nIndex ) >= mpFieldWindow->GetFieldCount())
431*b1cdbd2cSJim Jagielski throw lang::IndexOutOfBoundsException();
432*b1cdbd2cSJim Jagielski
433*b1cdbd2cSJim Jagielski DBG_ASSERT(mpFieldWindow->GetFieldCount() == maChildren.size(), "did not recognize a child count change");
434*b1cdbd2cSJim Jagielski
435*b1cdbd2cSJim Jagielski uno::Reference < XAccessible > xTempAcc = maChildren[nIndex].xWeakAcc;
436*b1cdbd2cSJim Jagielski if (!xTempAcc.is())
437*b1cdbd2cSJim Jagielski {
438*b1cdbd2cSJim Jagielski maChildren[nIndex].pAcc = new ScAccessibleDataPilotButton(this, mpFieldWindow, nIndex);
439*b1cdbd2cSJim Jagielski xTempAcc = maChildren[nIndex].pAcc;
440*b1cdbd2cSJim Jagielski maChildren[nIndex].xWeakAcc = xTempAcc;
441*b1cdbd2cSJim Jagielski }
442*b1cdbd2cSJim Jagielski
443*b1cdbd2cSJim Jagielski xAcc = xTempAcc;
444*b1cdbd2cSJim Jagielski }
445*b1cdbd2cSJim Jagielski return xAcc;
446*b1cdbd2cSJim Jagielski }
447*b1cdbd2cSJim Jagielski
getAccessibleStateSet(void)448*b1cdbd2cSJim Jagielski uno::Reference<XAccessibleStateSet> SAL_CALL ScAccessibleDataPilotControl::getAccessibleStateSet(void)
449*b1cdbd2cSJim Jagielski throw (uno::RuntimeException)
450*b1cdbd2cSJim Jagielski {
451*b1cdbd2cSJim Jagielski ScUnoGuard aGuard;
452*b1cdbd2cSJim Jagielski IsObjectValid();
453*b1cdbd2cSJim Jagielski
454*b1cdbd2cSJim Jagielski utl::AccessibleStateSetHelper* pStateSet = new utl::AccessibleStateSetHelper();
455*b1cdbd2cSJim Jagielski
456*b1cdbd2cSJim Jagielski if (IsDefunc())
457*b1cdbd2cSJim Jagielski pStateSet->AddState(AccessibleStateType::DEFUNC);
458*b1cdbd2cSJim Jagielski else
459*b1cdbd2cSJim Jagielski {
460*b1cdbd2cSJim Jagielski pStateSet->AddState(AccessibleStateType::ENABLED);
461*b1cdbd2cSJim Jagielski pStateSet->AddState(AccessibleStateType::OPAQUE);
462*b1cdbd2cSJim Jagielski if (isShowing())
463*b1cdbd2cSJim Jagielski pStateSet->AddState(AccessibleStateType::SHOWING);
464*b1cdbd2cSJim Jagielski if (isVisible())
465*b1cdbd2cSJim Jagielski pStateSet->AddState(AccessibleStateType::VISIBLE);
466*b1cdbd2cSJim Jagielski }
467*b1cdbd2cSJim Jagielski
468*b1cdbd2cSJim Jagielski return pStateSet;
469*b1cdbd2cSJim Jagielski }
470*b1cdbd2cSJim Jagielski
471*b1cdbd2cSJim Jagielski ///===== XServiceInfo ====================================================
472*b1cdbd2cSJim Jagielski
getImplementationName(void)473*b1cdbd2cSJim Jagielski ::rtl::OUString SAL_CALL ScAccessibleDataPilotControl::getImplementationName(void)
474*b1cdbd2cSJim Jagielski throw (uno::RuntimeException)
475*b1cdbd2cSJim Jagielski {
476*b1cdbd2cSJim Jagielski return rtl::OUString(RTL_CONSTASCII_USTRINGPARAM ("ScAccessibleDataPilotControl"));
477*b1cdbd2cSJim Jagielski }
478*b1cdbd2cSJim Jagielski
479*b1cdbd2cSJim Jagielski ///===== XTypeProvider ===================================================
480*b1cdbd2cSJim Jagielski
getImplementationId(void)481*b1cdbd2cSJim Jagielski uno::Sequence<sal_Int8> SAL_CALL ScAccessibleDataPilotControl::getImplementationId(void)
482*b1cdbd2cSJim Jagielski throw (uno::RuntimeException)
483*b1cdbd2cSJim Jagielski {
484*b1cdbd2cSJim Jagielski ScUnoGuard aGuard;
485*b1cdbd2cSJim Jagielski IsObjectValid();
486*b1cdbd2cSJim Jagielski static uno::Sequence<sal_Int8> aId;
487*b1cdbd2cSJim Jagielski if (aId.getLength() == 0)
488*b1cdbd2cSJim Jagielski {
489*b1cdbd2cSJim Jagielski aId.realloc (16);
490*b1cdbd2cSJim Jagielski rtl_createUuid (reinterpret_cast<sal_uInt8 *>(aId.getArray()), 0, sal_True);
491*b1cdbd2cSJim Jagielski }
492*b1cdbd2cSJim Jagielski return aId;
493*b1cdbd2cSJim Jagielski }
494*b1cdbd2cSJim Jagielski
495*b1cdbd2cSJim Jagielski //===== internal ========================================================
496*b1cdbd2cSJim Jagielski
createAccessibleDescription(void)497*b1cdbd2cSJim Jagielski ::rtl::OUString SAL_CALL ScAccessibleDataPilotControl::createAccessibleDescription(void)
498*b1cdbd2cSJim Jagielski throw (uno::RuntimeException)
499*b1cdbd2cSJim Jagielski {
500*b1cdbd2cSJim Jagielski ScUnoGuard aGuard;
501*b1cdbd2cSJim Jagielski IsObjectValid();
502*b1cdbd2cSJim Jagielski if (mpFieldWindow)
503*b1cdbd2cSJim Jagielski return mpFieldWindow->GetDescription();
504*b1cdbd2cSJim Jagielski
505*b1cdbd2cSJim Jagielski return rtl::OUString();
506*b1cdbd2cSJim Jagielski }
507*b1cdbd2cSJim Jagielski
createAccessibleName(void)508*b1cdbd2cSJim Jagielski ::rtl::OUString SAL_CALL ScAccessibleDataPilotControl::createAccessibleName(void)
509*b1cdbd2cSJim Jagielski throw (uno::RuntimeException)
510*b1cdbd2cSJim Jagielski {
511*b1cdbd2cSJim Jagielski ScUnoGuard aGuard;
512*b1cdbd2cSJim Jagielski IsObjectValid();
513*b1cdbd2cSJim Jagielski if (mpFieldWindow)
514*b1cdbd2cSJim Jagielski return mpFieldWindow->GetName();
515*b1cdbd2cSJim Jagielski
516*b1cdbd2cSJim Jagielski return rtl::OUString();
517*b1cdbd2cSJim Jagielski }
518*b1cdbd2cSJim Jagielski
GetBoundingBoxOnScreen(void) const519*b1cdbd2cSJim Jagielski Rectangle ScAccessibleDataPilotControl::GetBoundingBoxOnScreen(void) const
520*b1cdbd2cSJim Jagielski throw (uno::RuntimeException)
521*b1cdbd2cSJim Jagielski {
522*b1cdbd2cSJim Jagielski if (mpFieldWindow)
523*b1cdbd2cSJim Jagielski return mpFieldWindow->GetWindowExtentsRelative(NULL);
524*b1cdbd2cSJim Jagielski else
525*b1cdbd2cSJim Jagielski return Rectangle();
526*b1cdbd2cSJim Jagielski }
527*b1cdbd2cSJim Jagielski
GetBoundingBox(void) const528*b1cdbd2cSJim Jagielski Rectangle ScAccessibleDataPilotControl::GetBoundingBox(void) const
529*b1cdbd2cSJim Jagielski throw (uno::RuntimeException)
530*b1cdbd2cSJim Jagielski {
531*b1cdbd2cSJim Jagielski if (mpFieldWindow)
532*b1cdbd2cSJim Jagielski return mpFieldWindow->GetWindowExtentsRelative(mpFieldWindow->GetAccessibleParentWindow());
533*b1cdbd2cSJim Jagielski else
534*b1cdbd2cSJim Jagielski return Rectangle();
535*b1cdbd2cSJim Jagielski }
536*b1cdbd2cSJim Jagielski
537*b1cdbd2cSJim Jagielski
538*b1cdbd2cSJim Jagielski //===============================================================================
539*b1cdbd2cSJim Jagielski
ScAccessibleDataPilotButton(const::com::sun::star::uno::Reference<::com::sun::star::accessibility::XAccessible> & rxParent,ScPivotFieldWindow * pFieldWindow,sal_Int32 nIndex)540*b1cdbd2cSJim Jagielski ScAccessibleDataPilotButton::ScAccessibleDataPilotButton(
541*b1cdbd2cSJim Jagielski const ::com::sun::star::uno::Reference<
542*b1cdbd2cSJim Jagielski ::com::sun::star::accessibility::XAccessible>& rxParent,
543*b1cdbd2cSJim Jagielski ScPivotFieldWindow* pFieldWindow,
544*b1cdbd2cSJim Jagielski sal_Int32 nIndex)
545*b1cdbd2cSJim Jagielski //change role frome PUSH_BUTTON to BUTTON_MENU
546*b1cdbd2cSJim Jagielski : ScAccessibleContextBase(rxParent, AccessibleRole::BUTTON_MENU),
547*b1cdbd2cSJim Jagielski mpFieldWindow(pFieldWindow),
548*b1cdbd2cSJim Jagielski mnIndex(nIndex)
549*b1cdbd2cSJim Jagielski {
550*b1cdbd2cSJim Jagielski }
551*b1cdbd2cSJim Jagielski
~ScAccessibleDataPilotButton(void)552*b1cdbd2cSJim Jagielski ScAccessibleDataPilotButton::~ScAccessibleDataPilotButton(void)
553*b1cdbd2cSJim Jagielski {
554*b1cdbd2cSJim Jagielski if (!IsDefunc() && !rBHelper.bInDispose)
555*b1cdbd2cSJim Jagielski {
556*b1cdbd2cSJim Jagielski // increment refcount to prevent double call off dtor
557*b1cdbd2cSJim Jagielski osl_incrementInterlockedCount( &m_refCount );
558*b1cdbd2cSJim Jagielski // call dispose to inform object wich have a weak reference to this object
559*b1cdbd2cSJim Jagielski dispose();
560*b1cdbd2cSJim Jagielski }
561*b1cdbd2cSJim Jagielski }
562*b1cdbd2cSJim Jagielski
Init()563*b1cdbd2cSJim Jagielski void ScAccessibleDataPilotButton::Init()
564*b1cdbd2cSJim Jagielski {
565*b1cdbd2cSJim Jagielski }
566*b1cdbd2cSJim Jagielski
disposing()567*b1cdbd2cSJim Jagielski void SAL_CALL ScAccessibleDataPilotButton::disposing()
568*b1cdbd2cSJim Jagielski {
569*b1cdbd2cSJim Jagielski ScUnoGuard aGuard;
570*b1cdbd2cSJim Jagielski mpFieldWindow = NULL;
571*b1cdbd2cSJim Jagielski
572*b1cdbd2cSJim Jagielski ScAccessibleContextBase::disposing();
573*b1cdbd2cSJim Jagielski }
574*b1cdbd2cSJim Jagielski
SetFocused()575*b1cdbd2cSJim Jagielski void ScAccessibleDataPilotButton::SetFocused()
576*b1cdbd2cSJim Jagielski {
577*b1cdbd2cSJim Jagielski CommitFocusGained();
578*b1cdbd2cSJim Jagielski }
579*b1cdbd2cSJim Jagielski
ResetFocused()580*b1cdbd2cSJim Jagielski void ScAccessibleDataPilotButton::ResetFocused()
581*b1cdbd2cSJim Jagielski {
582*b1cdbd2cSJim Jagielski CommitFocusLost();
583*b1cdbd2cSJim Jagielski }
584*b1cdbd2cSJim Jagielski
585*b1cdbd2cSJim Jagielski ///===== XAccessibleComponent ============================================
586*b1cdbd2cSJim Jagielski
getAccessibleAtPoint(const::com::sun::star::awt::Point &)587*b1cdbd2cSJim Jagielski uno::Reference< XAccessible > SAL_CALL ScAccessibleDataPilotButton::getAccessibleAtPoint(
588*b1cdbd2cSJim Jagielski const ::com::sun::star::awt::Point& /* rPoint */ )
589*b1cdbd2cSJim Jagielski throw (::com::sun::star::uno::RuntimeException)
590*b1cdbd2cSJim Jagielski {
591*b1cdbd2cSJim Jagielski return NULL;
592*b1cdbd2cSJim Jagielski }
593*b1cdbd2cSJim Jagielski
isVisible()594*b1cdbd2cSJim Jagielski sal_Bool SAL_CALL ScAccessibleDataPilotButton::isVisible( )
595*b1cdbd2cSJim Jagielski throw (::com::sun::star::uno::RuntimeException)
596*b1cdbd2cSJim Jagielski {
597*b1cdbd2cSJim Jagielski return sal_True;
598*b1cdbd2cSJim Jagielski }
599*b1cdbd2cSJim Jagielski
grabFocus()600*b1cdbd2cSJim Jagielski void SAL_CALL ScAccessibleDataPilotButton::grabFocus( )
601*b1cdbd2cSJim Jagielski throw (::com::sun::star::uno::RuntimeException)
602*b1cdbd2cSJim Jagielski {
603*b1cdbd2cSJim Jagielski ScUnoGuard aGuard;
604*b1cdbd2cSJim Jagielski IsObjectValid();
605*b1cdbd2cSJim Jagielski if (mpFieldWindow)
606*b1cdbd2cSJim Jagielski {
607*b1cdbd2cSJim Jagielski mpFieldWindow->GrabFocusAndSelect(getAccessibleIndexInParent());
608*b1cdbd2cSJim Jagielski }
609*b1cdbd2cSJim Jagielski }
610*b1cdbd2cSJim Jagielski
getForeground()611*b1cdbd2cSJim Jagielski sal_Int32 SAL_CALL ScAccessibleDataPilotButton::getForeground( )
612*b1cdbd2cSJim Jagielski throw (uno::RuntimeException)
613*b1cdbd2cSJim Jagielski {
614*b1cdbd2cSJim Jagielski ScUnoGuard aGuard;
615*b1cdbd2cSJim Jagielski IsObjectValid();
616*b1cdbd2cSJim Jagielski sal_Int32 nColor(0);
617*b1cdbd2cSJim Jagielski if (mpFieldWindow)
618*b1cdbd2cSJim Jagielski {
619*b1cdbd2cSJim Jagielski nColor = mpFieldWindow->GetSettings().GetStyleSettings().GetButtonTextColor().GetColor();
620*b1cdbd2cSJim Jagielski }
621*b1cdbd2cSJim Jagielski return nColor;
622*b1cdbd2cSJim Jagielski }
623*b1cdbd2cSJim Jagielski
getBackground()624*b1cdbd2cSJim Jagielski sal_Int32 SAL_CALL ScAccessibleDataPilotButton::getBackground( )
625*b1cdbd2cSJim Jagielski throw (uno::RuntimeException)
626*b1cdbd2cSJim Jagielski {
627*b1cdbd2cSJim Jagielski ScUnoGuard aGuard;
628*b1cdbd2cSJim Jagielski IsObjectValid();
629*b1cdbd2cSJim Jagielski sal_Int32 nColor(0);
630*b1cdbd2cSJim Jagielski if (mpFieldWindow)
631*b1cdbd2cSJim Jagielski {
632*b1cdbd2cSJim Jagielski nColor = mpFieldWindow->GetSettings().GetStyleSettings().GetFaceColor().GetColor();
633*b1cdbd2cSJim Jagielski }
634*b1cdbd2cSJim Jagielski return nColor;
635*b1cdbd2cSJim Jagielski }
636*b1cdbd2cSJim Jagielski
637*b1cdbd2cSJim Jagielski ///===== XAccessibleContext ==============================================
638*b1cdbd2cSJim Jagielski
getAccessibleChildCount(void)639*b1cdbd2cSJim Jagielski sal_Int32 SAL_CALL ScAccessibleDataPilotButton::getAccessibleChildCount(void)
640*b1cdbd2cSJim Jagielski throw (::com::sun::star::uno::RuntimeException)
641*b1cdbd2cSJim Jagielski {
642*b1cdbd2cSJim Jagielski return 0;
643*b1cdbd2cSJim Jagielski }
644*b1cdbd2cSJim Jagielski
getAccessibleChild(sal_Int32)645*b1cdbd2cSJim Jagielski uno::Reference< XAccessible> SAL_CALL ScAccessibleDataPilotButton::getAccessibleChild(sal_Int32 /* nIndex */)
646*b1cdbd2cSJim Jagielski throw (::com::sun::star::uno::RuntimeException,
647*b1cdbd2cSJim Jagielski ::com::sun::star::lang::IndexOutOfBoundsException)
648*b1cdbd2cSJim Jagielski {
649*b1cdbd2cSJim Jagielski throw lang::IndexOutOfBoundsException();
650*b1cdbd2cSJim Jagielski }
651*b1cdbd2cSJim Jagielski
getAccessibleIndexInParent(void)652*b1cdbd2cSJim Jagielski sal_Int32 SAL_CALL ScAccessibleDataPilotButton::getAccessibleIndexInParent(void)
653*b1cdbd2cSJim Jagielski throw (::com::sun::star::uno::RuntimeException)
654*b1cdbd2cSJim Jagielski {
655*b1cdbd2cSJim Jagielski ScUnoGuard aGuard;
656*b1cdbd2cSJim Jagielski IsObjectValid();
657*b1cdbd2cSJim Jagielski return mnIndex;
658*b1cdbd2cSJim Jagielski }
659*b1cdbd2cSJim Jagielski
getAccessibleStateSet(void)660*b1cdbd2cSJim Jagielski uno::Reference<XAccessibleStateSet> SAL_CALL ScAccessibleDataPilotButton::getAccessibleStateSet(void)
661*b1cdbd2cSJim Jagielski throw (::com::sun::star::uno::RuntimeException)
662*b1cdbd2cSJim Jagielski {
663*b1cdbd2cSJim Jagielski ScUnoGuard aGuard;
664*b1cdbd2cSJim Jagielski IsObjectValid();
665*b1cdbd2cSJim Jagielski
666*b1cdbd2cSJim Jagielski utl::AccessibleStateSetHelper* pStateSet = new utl::AccessibleStateSetHelper();
667*b1cdbd2cSJim Jagielski
668*b1cdbd2cSJim Jagielski if (IsDefunc())
669*b1cdbd2cSJim Jagielski pStateSet->AddState(AccessibleStateType::DEFUNC);
670*b1cdbd2cSJim Jagielski else
671*b1cdbd2cSJim Jagielski {
672*b1cdbd2cSJim Jagielski pStateSet->AddState(AccessibleStateType::ENABLED);
673*b1cdbd2cSJim Jagielski pStateSet->AddState(AccessibleStateType::OPAQUE);
674*b1cdbd2cSJim Jagielski pStateSet->AddState(AccessibleStateType::FOCUSABLE);
675*b1cdbd2cSJim Jagielski if (mpFieldWindow && (sal::static_int_cast<sal_Int32>(mpFieldWindow->GetSelectedIndex()) == mnIndex))
676*b1cdbd2cSJim Jagielski pStateSet->AddState(AccessibleStateType::FOCUSED);
677*b1cdbd2cSJim Jagielski if (isShowing())
678*b1cdbd2cSJim Jagielski pStateSet->AddState(AccessibleStateType::SHOWING);
679*b1cdbd2cSJim Jagielski if (isVisible())
680*b1cdbd2cSJim Jagielski pStateSet->AddState(AccessibleStateType::VISIBLE);
681*b1cdbd2cSJim Jagielski }
682*b1cdbd2cSJim Jagielski
683*b1cdbd2cSJim Jagielski return pStateSet;
684*b1cdbd2cSJim Jagielski }
685*b1cdbd2cSJim Jagielski ::com::sun::star::uno::Reference< ::com::sun::star::accessibility::XAccessibleRelationSet >
getAccessibleRelationSet()686*b1cdbd2cSJim Jagielski SAL_CALL ScAccessibleDataPilotButton::getAccessibleRelationSet( ) throw (::com::sun::star::uno::RuntimeException)
687*b1cdbd2cSJim Jagielski {
688*b1cdbd2cSJim Jagielski utl::AccessibleRelationSetHelper* pRelationSetHelper = new utl::AccessibleRelationSetHelper;
689*b1cdbd2cSJim Jagielski uno::Reference< accessibility::XAccessibleRelationSet > xSet = pRelationSetHelper;
690*b1cdbd2cSJim Jagielski if(mxParent.is())
691*b1cdbd2cSJim Jagielski {
692*b1cdbd2cSJim Jagielski uno::Sequence< uno::Reference< uno::XInterface > > aSequence(1);
693*b1cdbd2cSJim Jagielski aSequence[0] = mxParent;
694*b1cdbd2cSJim Jagielski pRelationSetHelper->AddRelation( accessibility::AccessibleRelation( accessibility::AccessibleRelationType::MEMBER_OF, aSequence ) );
695*b1cdbd2cSJim Jagielski }
696*b1cdbd2cSJim Jagielski
697*b1cdbd2cSJim Jagielski return xSet;
698*b1cdbd2cSJim Jagielski
699*b1cdbd2cSJim Jagielski }
700*b1cdbd2cSJim Jagielski ///===== XServiceInfo ====================================================
701*b1cdbd2cSJim Jagielski
getImplementationName(void)702*b1cdbd2cSJim Jagielski ::rtl::OUString SAL_CALL ScAccessibleDataPilotButton::getImplementationName(void)
703*b1cdbd2cSJim Jagielski throw (::com::sun::star::uno::RuntimeException)
704*b1cdbd2cSJim Jagielski {
705*b1cdbd2cSJim Jagielski return rtl::OUString(RTL_CONSTASCII_USTRINGPARAM ("ScAccessibleDataPilotButton"));
706*b1cdbd2cSJim Jagielski }
707*b1cdbd2cSJim Jagielski
708*b1cdbd2cSJim Jagielski ///===== XTypeProvider ===================================================
709*b1cdbd2cSJim Jagielski
getImplementationId(void)710*b1cdbd2cSJim Jagielski uno::Sequence<sal_Int8> SAL_CALL ScAccessibleDataPilotButton::getImplementationId(void)
711*b1cdbd2cSJim Jagielski throw (::com::sun::star::uno::RuntimeException)
712*b1cdbd2cSJim Jagielski {
713*b1cdbd2cSJim Jagielski ScUnoGuard aGuard;
714*b1cdbd2cSJim Jagielski IsObjectValid();
715*b1cdbd2cSJim Jagielski static uno::Sequence<sal_Int8> aId;
716*b1cdbd2cSJim Jagielski if (aId.getLength() == 0)
717*b1cdbd2cSJim Jagielski {
718*b1cdbd2cSJim Jagielski aId.realloc (16);
719*b1cdbd2cSJim Jagielski rtl_createUuid (reinterpret_cast<sal_uInt8 *>(aId.getArray()), 0, sal_True);
720*b1cdbd2cSJim Jagielski }
721*b1cdbd2cSJim Jagielski return aId;
722*b1cdbd2cSJim Jagielski }
723*b1cdbd2cSJim Jagielski
createAccessibleDescription(void)724*b1cdbd2cSJim Jagielski ::rtl::OUString SAL_CALL ScAccessibleDataPilotButton::createAccessibleDescription(void)
725*b1cdbd2cSJim Jagielski throw (::com::sun::star::uno::RuntimeException)
726*b1cdbd2cSJim Jagielski {
727*b1cdbd2cSJim Jagielski if (mpFieldWindow)
728*b1cdbd2cSJim Jagielski return mpFieldWindow->GetHelpText();
729*b1cdbd2cSJim Jagielski return rtl::OUString();
730*b1cdbd2cSJim Jagielski }
731*b1cdbd2cSJim Jagielski
createAccessibleName(void)732*b1cdbd2cSJim Jagielski ::rtl::OUString SAL_CALL ScAccessibleDataPilotButton::createAccessibleName(void)
733*b1cdbd2cSJim Jagielski throw (::com::sun::star::uno::RuntimeException)
734*b1cdbd2cSJim Jagielski {
735*b1cdbd2cSJim Jagielski ScUnoGuard aGuard;
736*b1cdbd2cSJim Jagielski IsObjectValid();
737*b1cdbd2cSJim Jagielski if (mpFieldWindow)
738*b1cdbd2cSJim Jagielski return mpFieldWindow->GetFieldText(getAccessibleIndexInParent());
739*b1cdbd2cSJim Jagielski
740*b1cdbd2cSJim Jagielski return rtl::OUString();
741*b1cdbd2cSJim Jagielski }
742*b1cdbd2cSJim Jagielski
GetBoundingBoxOnScreen(void) const743*b1cdbd2cSJim Jagielski Rectangle ScAccessibleDataPilotButton::GetBoundingBoxOnScreen(void) const
744*b1cdbd2cSJim Jagielski throw (::com::sun::star::uno::RuntimeException)
745*b1cdbd2cSJim Jagielski {
746*b1cdbd2cSJim Jagielski Rectangle aRect(GetBoundingBox());
747*b1cdbd2cSJim Jagielski
748*b1cdbd2cSJim Jagielski if (mpFieldWindow)
749*b1cdbd2cSJim Jagielski {
750*b1cdbd2cSJim Jagielski Point aParentPos(mpFieldWindow->GetWindowExtentsRelative(NULL).TopLeft());
751*b1cdbd2cSJim Jagielski aRect.Move(aParentPos.getX(), aParentPos.getY());
752*b1cdbd2cSJim Jagielski }
753*b1cdbd2cSJim Jagielski
754*b1cdbd2cSJim Jagielski return aRect;
755*b1cdbd2cSJim Jagielski }
756*b1cdbd2cSJim Jagielski
GetBoundingBox(void) const757*b1cdbd2cSJim Jagielski Rectangle ScAccessibleDataPilotButton::GetBoundingBox(void) const
758*b1cdbd2cSJim Jagielski throw (::com::sun::star::uno::RuntimeException)
759*b1cdbd2cSJim Jagielski {
760*b1cdbd2cSJim Jagielski if (mpFieldWindow)
761*b1cdbd2cSJim Jagielski return Rectangle (mpFieldWindow->GetFieldPosition(const_cast<ScAccessibleDataPilotButton*> (this)->getAccessibleIndexInParent()), mpFieldWindow->GetFieldSize());
762*b1cdbd2cSJim Jagielski else
763*b1cdbd2cSJim Jagielski return Rectangle();
764*b1cdbd2cSJim Jagielski }
765*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------------
766*b1cdbd2cSJim Jagielski // XAccessibleAction
767*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------------
getAccessibleActionCount()768*b1cdbd2cSJim Jagielski sal_Int32 ScAccessibleDataPilotButton::getAccessibleActionCount( ) throw (uno::RuntimeException)
769*b1cdbd2cSJim Jagielski {
770*b1cdbd2cSJim Jagielski return 1;
771*b1cdbd2cSJim Jagielski }
772*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------------
doAccessibleAction(sal_Int32 nIndex)773*b1cdbd2cSJim Jagielski sal_Bool ScAccessibleDataPilotButton::doAccessibleAction ( sal_Int32 nIndex ) throw (lang::IndexOutOfBoundsException, uno::RuntimeException)
774*b1cdbd2cSJim Jagielski {
775*b1cdbd2cSJim Jagielski if ( nIndex < 0 || nIndex >= getAccessibleActionCount() )
776*b1cdbd2cSJim Jagielski throw lang::IndexOutOfBoundsException();
777*b1cdbd2cSJim Jagielski return sal_True;
778*b1cdbd2cSJim Jagielski }
779*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------------
getAccessibleActionDescription(sal_Int32 nIndex)780*b1cdbd2cSJim Jagielski ::rtl::OUString ScAccessibleDataPilotButton::getAccessibleActionDescription ( sal_Int32 nIndex ) throw (lang::IndexOutOfBoundsException, uno::RuntimeException)
781*b1cdbd2cSJim Jagielski {
782*b1cdbd2cSJim Jagielski if ( nIndex < 0 || nIndex >= getAccessibleActionCount() )
783*b1cdbd2cSJim Jagielski throw lang::IndexOutOfBoundsException();
784*b1cdbd2cSJim Jagielski return ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "press" ) );
785*b1cdbd2cSJim Jagielski }
786*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------------
getAccessibleActionKeyBinding(sal_Int32 nIndex)787*b1cdbd2cSJim Jagielski ::com::sun::star::uno::Reference< XAccessibleKeyBinding > ScAccessibleDataPilotButton::getAccessibleActionKeyBinding( sal_Int32 nIndex ) throw (lang::IndexOutOfBoundsException, ::com::sun::star::uno::RuntimeException)
788*b1cdbd2cSJim Jagielski {
789*b1cdbd2cSJim Jagielski if ( nIndex < 0 || nIndex >= getAccessibleActionCount() )
790*b1cdbd2cSJim Jagielski throw lang::IndexOutOfBoundsException();
791*b1cdbd2cSJim Jagielski comphelper::OAccessibleKeyBindingHelper* pKeyBindingHelper = new comphelper::OAccessibleKeyBindingHelper();
792*b1cdbd2cSJim Jagielski ::com::sun::star::uno::Reference< XAccessibleKeyBinding > xKeyBinding = pKeyBindingHelper;
793*b1cdbd2cSJim Jagielski ScPivotFieldWindow* pWindow = mpFieldWindow;
794*b1cdbd2cSJim Jagielski if ( pWindow )
795*b1cdbd2cSJim Jagielski {
796*b1cdbd2cSJim Jagielski awt::KeyStroke aKeyStroke;
797*b1cdbd2cSJim Jagielski aKeyStroke.Modifiers = 0;
798*b1cdbd2cSJim Jagielski aKeyStroke.KeyCode = KEY_SPACE;
799*b1cdbd2cSJim Jagielski pKeyBindingHelper->AddKeyBinding( aKeyStroke );
800*b1cdbd2cSJim Jagielski }
801*b1cdbd2cSJim Jagielski return xKeyBinding;
802*b1cdbd2cSJim Jagielski }
803*b1cdbd2cSJim Jagielski //===== XInterface =====================================================
queryInterface(uno::Type const & rType)804*b1cdbd2cSJim Jagielski uno::Any SAL_CALL ScAccessibleDataPilotButton::queryInterface( uno::Type const & rType )
805*b1cdbd2cSJim Jagielski throw (::com::sun::star::uno::RuntimeException)
806*b1cdbd2cSJim Jagielski {
807*b1cdbd2cSJim Jagielski uno::Any aAny (ScAccessibleContextBase::queryInterface(rType));
808*b1cdbd2cSJim Jagielski if(!aAny.hasValue())
809*b1cdbd2cSJim Jagielski {
810*b1cdbd2cSJim Jagielski aAny = ::cppu::queryInterface (rType,
811*b1cdbd2cSJim Jagielski static_cast<XAccessibleAction*>(this)
812*b1cdbd2cSJim Jagielski );
813*b1cdbd2cSJim Jagielski }
814*b1cdbd2cSJim Jagielski return aAny;
815*b1cdbd2cSJim Jagielski }
acquire()816*b1cdbd2cSJim Jagielski void SAL_CALL ScAccessibleDataPilotButton::acquire()
817*b1cdbd2cSJim Jagielski throw ()
818*b1cdbd2cSJim Jagielski {
819*b1cdbd2cSJim Jagielski ScAccessibleContextBase::acquire();
820*b1cdbd2cSJim Jagielski }
release()821*b1cdbd2cSJim Jagielski void SAL_CALL ScAccessibleDataPilotButton::release()
822*b1cdbd2cSJim Jagielski throw ()
823*b1cdbd2cSJim Jagielski {
824*b1cdbd2cSJim Jagielski ScAccessibleContextBase::release();
825*b1cdbd2cSJim Jagielski }
826*b1cdbd2cSJim Jagielski
827