1 /**************************************************************
2  *
3  * Licensed to the Apache Software Foundation (ASF) under one
4  * or more contributor license agreements.  See the NOTICE file
5  * distributed with this work for additional information
6  * regarding copyright ownership.  The ASF licenses this file
7  * to you under the Apache License, Version 2.0 (the
8  * "License"); you may not use this file except in compliance
9  * with the License.  You may obtain a copy of the License at
10  *
11  *   http://www.apache.org/licenses/LICENSE-2.0
12  *
13  * Unless required by applicable law or agreed to in writing,
14  * software distributed under the License is distributed on an
15  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16  * KIND, either express or implied.  See the License for the
17  * specific language governing permissions and limitations
18  * under the License.
19  *
20  *************************************************************/
21 
22 
23 
24 // MARKER(update_precomp.py): autogen include statement, do not remove
25 #include "precompiled_svx.hxx"
26 
27 
28 #include <svx/AccessibleOLEShape.hxx>
29 
30 #include <svx/ShapeTypeHandler.hxx>
31 #include <svx/SvxShapeTypes.hxx>
32 #include <svx/svdoole2.hxx>
33 using namespace accessibility;
34 using namespace ::com::sun::star;
35 using namespace ::com::sun::star::uno;
36 using namespace	::com::sun::star::accessibility;
37 
38 //=====  internal  ============================================================
39 
AccessibleOLEShape(const AccessibleShapeInfo & rShapeInfo,const AccessibleShapeTreeInfo & rShapeTreeInfo)40 AccessibleOLEShape::AccessibleOLEShape (
41     const AccessibleShapeInfo& rShapeInfo,
42     const AccessibleShapeTreeInfo& rShapeTreeInfo)
43     : AccessibleShape (rShapeInfo, rShapeTreeInfo)
44 {
45 }
46 
47 
48 
49 
~AccessibleOLEShape(void)50 AccessibleOLEShape::~AccessibleOLEShape (void)
51 {
52 }
53 
54 
55 
56 
57 //=====  XAccessibleAction  ===================================================
58 
getAccessibleActionCount(void)59 sal_Int32 SAL_CALL AccessibleOLEShape::getAccessibleActionCount (void)
60     throw (::com::sun::star::uno::RuntimeException)
61 {
62     return 0;
63 }
64 
65 
66 
67 
doAccessibleAction(sal_Int32)68 sal_Bool SAL_CALL AccessibleOLEShape::doAccessibleAction (sal_Int32 /*nIndex*/)
69     throw (lang::IndexOutOfBoundsException, uno::RuntimeException)
70 {
71     throw lang::IndexOutOfBoundsException();
72 }
73 
74 
75 
76 
getAccessibleActionDescription(sal_Int32)77 ::rtl::OUString SAL_CALL AccessibleOLEShape::getAccessibleActionDescription (sal_Int32 /*nIndex*/)
78     throw (::com::sun::star::lang::IndexOutOfBoundsException,
79         ::com::sun::star::uno::RuntimeException)
80 {
81     throw lang::IndexOutOfBoundsException();
82 }
83 
84 
85 
86 
getAccessibleActionKeyBinding(sal_Int32)87 Reference<XAccessibleKeyBinding> SAL_CALL AccessibleOLEShape::getAccessibleActionKeyBinding (sal_Int32 /*nIndex*/)
88     throw (::com::sun::star::lang::IndexOutOfBoundsException,
89         ::com::sun::star::uno::RuntimeException)
90 {
91     throw lang::IndexOutOfBoundsException();
92 }
93 
94 
95 
96 
97 //=====  XInterface  ==========================================================
98 
99 com::sun::star::uno::Any SAL_CALL
queryInterface(const com::sun::star::uno::Type & rType)100     AccessibleOLEShape::queryInterface (const com::sun::star::uno::Type & rType)
101     throw (::com::sun::star::uno::RuntimeException)
102 {
103     ::com::sun::star::uno::Any aReturn = AccessibleShape::queryInterface (rType);
104     if ( ! aReturn.hasValue())
105         aReturn = ::cppu::queryInterface (rType,
106             static_cast<XAccessibleAction*>(this));
107     return aReturn;
108 }
109 
110 
111 
112 void SAL_CALL
acquire(void)113     AccessibleOLEShape::acquire (void)
114     throw ()
115 {
116     AccessibleShape::acquire ();
117 }
118 
119 
120 
121 void SAL_CALL
release(void)122     AccessibleOLEShape::release (void)
123     throw ()
124 {
125     AccessibleShape::release ();
126 }
127 
128 
129 
130 
131 //=====  XServiceInfo  ========================================================
132 
133 ::rtl::OUString SAL_CALL
getImplementationName(void)134     AccessibleOLEShape::getImplementationName (void)
135     throw (::com::sun::star::uno::RuntimeException)
136 {
137 	return ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("AccessibleOLEShape"));
138 }
139 
140 
141 
142 
143 ::com::sun::star::uno::Sequence< ::rtl::OUString> SAL_CALL
getSupportedServiceNames(void)144     AccessibleOLEShape::getSupportedServiceNames (void)
145     throw (::com::sun::star::uno::RuntimeException)
146 {
147     ThrowIfDisposed();
148     // Get list of supported service names from base class...
149     uno::Sequence< ::rtl::OUString > aServiceNames =
150         AccessibleShape::getSupportedServiceNames();
151     sal_Int32 nCount (aServiceNames.getLength());
152 
153     // ...and add additional names.
154     aServiceNames.realloc (nCount + 1);
155     static const ::rtl::OUString sAdditionalServiceName (RTL_CONSTASCII_USTRINGPARAM(
156         "com.sun.star.drawing.AccessibleOLEShape"));
157     aServiceNames[nCount] = sAdditionalServiceName;
158 
159     return aServiceNames;
160 }
161 
162 
163 
164 
165 //=====  XTypeProvider  ===================================================
166 
167 uno::Sequence<uno::Type> SAL_CALL
getTypes(void)168     AccessibleOLEShape::getTypes (void)
169     throw (uno::RuntimeException)
170 {
171     // Get list of types from the context base implementation...
172 	uno::Sequence<uno::Type> aTypeList (AccessibleShape::getTypes());
173     // ...and add the additional type for the component.
174     long nTypeCount = aTypeList.getLength();
175     aTypeList.realloc (nTypeCount + 1);
176     const uno::Type aActionType =
177     	::getCppuType((const uno::Reference<XAccessibleAction>*)0);
178     aTypeList[nTypeCount] = aActionType;
179 
180 	return aTypeList;
181 }
182 //=====  XAccessibleExtendedAttributes  ========================================================
getExtendedAttributes()183 uno::Any SAL_CALL AccessibleOLEShape::getExtendedAttributes()
184 		throw (::com::sun::star::lang::IndexOutOfBoundsException, ::com::sun::star::uno::RuntimeException)
185 {
186 	uno::Any strRet;
187 	::rtl::OUString style;
188 	if( m_pShape )
189 	{
190 		//style = ::rtl::OUString::createFromAscii("style=");
191 		style = ::rtl::OUString::createFromAscii("style:");
192 		style += ((SdrOle2Obj*)m_pShape)->GetStyleString();
193 	}
194 	style += ::rtl::OUString::createFromAscii(";");
195 	strRet <<= style;
196 	return strRet;
197 }
198 
199 
200 ///	Set this object's name if is different to the current name.
201 ::rtl::OUString
CreateAccessibleBaseName(void)202     AccessibleOLEShape::CreateAccessibleBaseName (void)
203     throw (::com::sun::star::uno::RuntimeException)
204 {
205     ::rtl::OUString sName;
206 
207     ShapeTypeId nShapeType = ShapeTypeHandler::Instance().GetTypeId (mxShape);
208     switch (nShapeType)
209     {
210         case DRAWING_APPLET:
211             sName = ::rtl::OUString (RTL_CONSTASCII_USTRINGPARAM("AppletOLEShape"));
212             break;
213         case DRAWING_FRAME:
214             sName = ::rtl::OUString (RTL_CONSTASCII_USTRINGPARAM("FrameOLEShape"));
215             break;
216         case DRAWING_OLE:
217             sName = ::rtl::OUString (RTL_CONSTASCII_USTRINGPARAM("OLEShape"));
218             break;
219         case DRAWING_PLUGIN:
220             sName = ::rtl::OUString (RTL_CONSTASCII_USTRINGPARAM("PluginOLEShape"));
221             break;
222 
223         default:
224             sName = ::rtl::OUString (RTL_CONSTASCII_USTRINGPARAM("UnknownAccessibleOLEShape"));
225             uno::Reference<drawing::XShapeDescriptor> xDescriptor (mxShape, uno::UNO_QUERY);
226             if (xDescriptor.is())
227                 sName += ::rtl::OUString (RTL_CONSTASCII_USTRINGPARAM(": "))
228                     + xDescriptor->getShapeType();
229     }
230 
231     return sName;
232 }
233 
234 
235 
236 ::rtl::OUString
CreateAccessibleDescription(void)237     AccessibleOLEShape::CreateAccessibleDescription (void)
238     throw (::com::sun::star::uno::RuntimeException)
239 {
240     return CreateAccessibleName ();
241 }
242 
243