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 * AccEditableText.cpp : Implementation of CUAccCOMApp and DLL registration.
24*b1cdbd2cSJim Jagielski */
25*b1cdbd2cSJim Jagielski #include "stdafx.h"
26*b1cdbd2cSJim Jagielski #include "UAccCOM2.h"
27*b1cdbd2cSJim Jagielski #include "AccEditableText.h"
28*b1cdbd2cSJim Jagielski #include <com/sun/star/accessibility/XAccessible.hpp>
29*b1cdbd2cSJim Jagielski #include <com/sun/star/accessibility/XAccessibleContext.hpp>
30*b1cdbd2cSJim Jagielski #include <com/sun/star/accessibility/XAccessibleText.hpp>
31*b1cdbd2cSJim Jagielski #include <com/sun/star/awt/FontSlant.hpp>
32*b1cdbd2cSJim Jagielski #include <com/sun/star/beans/PropertyValue.hpp>
33*b1cdbd2cSJim Jagielski #include <com/sun/star/style/LineSpacing.hpp>
34*b1cdbd2cSJim Jagielski #include <com/sun/star/style/TabStop.hpp>
35*b1cdbd2cSJim Jagielski #include <vector>
36*b1cdbd2cSJim Jagielski
37*b1cdbd2cSJim Jagielski using namespace com::sun::star::accessibility;
38*b1cdbd2cSJim Jagielski using namespace com::sun::star::uno;
39*b1cdbd2cSJim Jagielski using namespace com::sun::star::awt;
40*b1cdbd2cSJim Jagielski using namespace com::sun::star::beans;
41*b1cdbd2cSJim Jagielski using namespace std;
42*b1cdbd2cSJim Jagielski
43*b1cdbd2cSJim Jagielski /**
44*b1cdbd2cSJim Jagielski * Copys a range of text to the clipboard.
45*b1cdbd2cSJim Jagielski *
46*b1cdbd2cSJim Jagielski * @param startOffset the start offset of copying.
47*b1cdbd2cSJim Jagielski * @param endOffset the end offset of copying.
48*b1cdbd2cSJim Jagielski * @param success the boolean result to be returned.
49*b1cdbd2cSJim Jagielski */
copyText(long startOffset,long endOffset)50*b1cdbd2cSJim Jagielski STDMETHODIMP CAccEditableText::copyText(long startOffset, long endOffset)
51*b1cdbd2cSJim Jagielski {
52*b1cdbd2cSJim Jagielski
53*b1cdbd2cSJim Jagielski CHECK_ENABLE_INF
54*b1cdbd2cSJim Jagielski
55*b1cdbd2cSJim Jagielski ENTER_PROTECTED_BLOCK
56*b1cdbd2cSJim Jagielski
57*b1cdbd2cSJim Jagielski // #CHECK XInterface#
58*b1cdbd2cSJim Jagielski if(!pRXEdtTxt.is())
59*b1cdbd2cSJim Jagielski {
60*b1cdbd2cSJim Jagielski return E_FAIL;
61*b1cdbd2cSJim Jagielski }
62*b1cdbd2cSJim Jagielski
63*b1cdbd2cSJim Jagielski if ( GetXInterface()->copyText( startOffset, endOffset ) )
64*b1cdbd2cSJim Jagielski return S_OK;
65*b1cdbd2cSJim Jagielski
66*b1cdbd2cSJim Jagielski return E_FAIL;
67*b1cdbd2cSJim Jagielski
68*b1cdbd2cSJim Jagielski LEAVE_PROTECTED_BLOCK
69*b1cdbd2cSJim Jagielski }
70*b1cdbd2cSJim Jagielski
71*b1cdbd2cSJim Jagielski /**
72*b1cdbd2cSJim Jagielski * Deletes a range of text.
73*b1cdbd2cSJim Jagielski *
74*b1cdbd2cSJim Jagielski * @param startOffset the start offset of deleting.
75*b1cdbd2cSJim Jagielski * @param endOffset the end offset of deleting.
76*b1cdbd2cSJim Jagielski * @param success the boolean result to be returned.
77*b1cdbd2cSJim Jagielski */
deleteText(long startOffset,long endOffset)78*b1cdbd2cSJim Jagielski STDMETHODIMP CAccEditableText::deleteText(long startOffset, long endOffset)
79*b1cdbd2cSJim Jagielski {
80*b1cdbd2cSJim Jagielski
81*b1cdbd2cSJim Jagielski CHECK_ENABLE_INF
82*b1cdbd2cSJim Jagielski
83*b1cdbd2cSJim Jagielski ENTER_PROTECTED_BLOCK
84*b1cdbd2cSJim Jagielski
85*b1cdbd2cSJim Jagielski if( !pRXEdtTxt.is() )
86*b1cdbd2cSJim Jagielski return E_FAIL;
87*b1cdbd2cSJim Jagielski
88*b1cdbd2cSJim Jagielski if( GetXInterface()->deleteText( startOffset, endOffset ) )
89*b1cdbd2cSJim Jagielski return S_OK;
90*b1cdbd2cSJim Jagielski
91*b1cdbd2cSJim Jagielski return E_FAIL;
92*b1cdbd2cSJim Jagielski
93*b1cdbd2cSJim Jagielski LEAVE_PROTECTED_BLOCK
94*b1cdbd2cSJim Jagielski }
95*b1cdbd2cSJim Jagielski
96*b1cdbd2cSJim Jagielski /**
97*b1cdbd2cSJim Jagielski * Inserts text at a specified offset.
98*b1cdbd2cSJim Jagielski *
99*b1cdbd2cSJim Jagielski * @param offset the offset of inserting.
100*b1cdbd2cSJim Jagielski * @param text the text to be inserted.
101*b1cdbd2cSJim Jagielski * @param success the boolean result to be returned.
102*b1cdbd2cSJim Jagielski */
insertText(long offset,BSTR * text)103*b1cdbd2cSJim Jagielski STDMETHODIMP CAccEditableText::insertText(long offset, BSTR * text)
104*b1cdbd2cSJim Jagielski {
105*b1cdbd2cSJim Jagielski
106*b1cdbd2cSJim Jagielski CHECK_ENABLE_INF
107*b1cdbd2cSJim Jagielski
108*b1cdbd2cSJim Jagielski ENTER_PROTECTED_BLOCK
109*b1cdbd2cSJim Jagielski
110*b1cdbd2cSJim Jagielski if (text == NULL)
111*b1cdbd2cSJim Jagielski return E_INVALIDARG;
112*b1cdbd2cSJim Jagielski
113*b1cdbd2cSJim Jagielski if( !pRXEdtTxt.is() )
114*b1cdbd2cSJim Jagielski return E_FAIL;
115*b1cdbd2cSJim Jagielski
116*b1cdbd2cSJim Jagielski ::rtl::OUString ouStr(*text);
117*b1cdbd2cSJim Jagielski
118*b1cdbd2cSJim Jagielski if( GetXInterface()->insertText( ouStr, offset ) )
119*b1cdbd2cSJim Jagielski return S_OK;
120*b1cdbd2cSJim Jagielski
121*b1cdbd2cSJim Jagielski return E_FAIL;
122*b1cdbd2cSJim Jagielski
123*b1cdbd2cSJim Jagielski LEAVE_PROTECTED_BLOCK
124*b1cdbd2cSJim Jagielski }
125*b1cdbd2cSJim Jagielski
126*b1cdbd2cSJim Jagielski /**
127*b1cdbd2cSJim Jagielski * Cuts a range of text to the clipboard.
128*b1cdbd2cSJim Jagielski *
129*b1cdbd2cSJim Jagielski * @param startOffset the start offset of cuting.
130*b1cdbd2cSJim Jagielski * @param endOffset the end offset of cuting.
131*b1cdbd2cSJim Jagielski * @param success the boolean result to be returned.
132*b1cdbd2cSJim Jagielski */
cutText(long startOffset,long endOffset)133*b1cdbd2cSJim Jagielski STDMETHODIMP CAccEditableText::cutText(long startOffset, long endOffset)
134*b1cdbd2cSJim Jagielski {
135*b1cdbd2cSJim Jagielski
136*b1cdbd2cSJim Jagielski CHECK_ENABLE_INF
137*b1cdbd2cSJim Jagielski
138*b1cdbd2cSJim Jagielski ENTER_PROTECTED_BLOCK
139*b1cdbd2cSJim Jagielski
140*b1cdbd2cSJim Jagielski if( !pRXEdtTxt.is() )
141*b1cdbd2cSJim Jagielski return E_FAIL;
142*b1cdbd2cSJim Jagielski
143*b1cdbd2cSJim Jagielski if( GetXInterface()->cutText( startOffset, endOffset ) )
144*b1cdbd2cSJim Jagielski return S_OK;
145*b1cdbd2cSJim Jagielski
146*b1cdbd2cSJim Jagielski return E_FAIL;
147*b1cdbd2cSJim Jagielski
148*b1cdbd2cSJim Jagielski LEAVE_PROTECTED_BLOCK
149*b1cdbd2cSJim Jagielski }
150*b1cdbd2cSJim Jagielski
151*b1cdbd2cSJim Jagielski /**
152*b1cdbd2cSJim Jagielski * Pastes text from clipboard at specified offset.
153*b1cdbd2cSJim Jagielski *
154*b1cdbd2cSJim Jagielski * @param offset the offset of pasting.
155*b1cdbd2cSJim Jagielski * @param success the boolean result to be returned.
156*b1cdbd2cSJim Jagielski */
pasteText(long offset)157*b1cdbd2cSJim Jagielski STDMETHODIMP CAccEditableText::pasteText(long offset)
158*b1cdbd2cSJim Jagielski {
159*b1cdbd2cSJim Jagielski
160*b1cdbd2cSJim Jagielski CHECK_ENABLE_INF
161*b1cdbd2cSJim Jagielski
162*b1cdbd2cSJim Jagielski ENTER_PROTECTED_BLOCK
163*b1cdbd2cSJim Jagielski
164*b1cdbd2cSJim Jagielski if( !pRXEdtTxt.is() )
165*b1cdbd2cSJim Jagielski return E_FAIL;
166*b1cdbd2cSJim Jagielski
167*b1cdbd2cSJim Jagielski if( GetXInterface()->pasteText( offset ) )
168*b1cdbd2cSJim Jagielski return S_OK;
169*b1cdbd2cSJim Jagielski
170*b1cdbd2cSJim Jagielski return E_FAIL;
171*b1cdbd2cSJim Jagielski
172*b1cdbd2cSJim Jagielski LEAVE_PROTECTED_BLOCK
173*b1cdbd2cSJim Jagielski }
174*b1cdbd2cSJim Jagielski
175*b1cdbd2cSJim Jagielski /**
176*b1cdbd2cSJim Jagielski * Replaces range of text with new text.
177*b1cdbd2cSJim Jagielski *
178*b1cdbd2cSJim Jagielski * @param startOffset the start offset of replacing.
179*b1cdbd2cSJim Jagielski * @param endOffset the end offset of replacing.
180*b1cdbd2cSJim Jagielski * @param text the replacing text.
181*b1cdbd2cSJim Jagielski * @param success the boolean result to be returned.
182*b1cdbd2cSJim Jagielski */
replaceText(long startOffset,long endOffset,BSTR * text)183*b1cdbd2cSJim Jagielski STDMETHODIMP CAccEditableText::replaceText(long startOffset, long endOffset, BSTR * text)
184*b1cdbd2cSJim Jagielski {
185*b1cdbd2cSJim Jagielski
186*b1cdbd2cSJim Jagielski CHECK_ENABLE_INF
187*b1cdbd2cSJim Jagielski
188*b1cdbd2cSJim Jagielski ENTER_PROTECTED_BLOCK
189*b1cdbd2cSJim Jagielski
190*b1cdbd2cSJim Jagielski // #CHECK#
191*b1cdbd2cSJim Jagielski if (text == NULL)
192*b1cdbd2cSJim Jagielski return E_INVALIDARG;
193*b1cdbd2cSJim Jagielski if( !pRXEdtTxt.is() )
194*b1cdbd2cSJim Jagielski return E_FAIL;
195*b1cdbd2cSJim Jagielski
196*b1cdbd2cSJim Jagielski ::rtl::OUString ouStr(*text);
197*b1cdbd2cSJim Jagielski
198*b1cdbd2cSJim Jagielski if( GetXInterface()->replaceText( startOffset,endOffset, ouStr) )
199*b1cdbd2cSJim Jagielski return S_OK;
200*b1cdbd2cSJim Jagielski return E_FAIL;
201*b1cdbd2cSJim Jagielski
202*b1cdbd2cSJim Jagielski LEAVE_PROTECTED_BLOCK
203*b1cdbd2cSJim Jagielski }
204*b1cdbd2cSJim Jagielski
205*b1cdbd2cSJim Jagielski /**
206*b1cdbd2cSJim Jagielski * Sets attributes of range of text.
207*b1cdbd2cSJim Jagielski *
208*b1cdbd2cSJim Jagielski * @param startOffset the start offset.
209*b1cdbd2cSJim Jagielski * @param endOffset the end offset.
210*b1cdbd2cSJim Jagielski * @param attributes the attribute text.
211*b1cdbd2cSJim Jagielski * @param success the boolean result to be returned.
212*b1cdbd2cSJim Jagielski */
setAttributes(long startOffset,long endOffset,BSTR * attributes)213*b1cdbd2cSJim Jagielski STDMETHODIMP CAccEditableText::setAttributes(long startOffset, long endOffset, BSTR * attributes)
214*b1cdbd2cSJim Jagielski {
215*b1cdbd2cSJim Jagielski
216*b1cdbd2cSJim Jagielski CHECK_ENABLE_INF
217*b1cdbd2cSJim Jagielski
218*b1cdbd2cSJim Jagielski ENTER_PROTECTED_BLOCK
219*b1cdbd2cSJim Jagielski
220*b1cdbd2cSJim Jagielski // #CHECK#
221*b1cdbd2cSJim Jagielski if (attributes == NULL)
222*b1cdbd2cSJim Jagielski return E_INVALIDARG;
223*b1cdbd2cSJim Jagielski if( !pRXEdtTxt.is() )
224*b1cdbd2cSJim Jagielski return E_FAIL;
225*b1cdbd2cSJim Jagielski
226*b1cdbd2cSJim Jagielski ::rtl::OUString ouStr(*attributes);
227*b1cdbd2cSJim Jagielski
228*b1cdbd2cSJim Jagielski sal_Int32 nIndex = 0;
229*b1cdbd2cSJim Jagielski sal_Unicode cTok = ';';
230*b1cdbd2cSJim Jagielski vector< ::rtl::OUString > vecAttr;
231*b1cdbd2cSJim Jagielski do
232*b1cdbd2cSJim Jagielski {
233*b1cdbd2cSJim Jagielski ::rtl::OUString ouToken = ouStr.getToken(0, cTok, nIndex);
234*b1cdbd2cSJim Jagielski vecAttr.push_back(ouToken);
235*b1cdbd2cSJim Jagielski }
236*b1cdbd2cSJim Jagielski while(nIndex >= 0);
237*b1cdbd2cSJim Jagielski
238*b1cdbd2cSJim Jagielski Sequence< PropertyValue > beanSeq(vecAttr.size());
239*b1cdbd2cSJim Jagielski for(unsigned int i = 0; i < vecAttr.size(); i ++)
240*b1cdbd2cSJim Jagielski {
241*b1cdbd2cSJim Jagielski ::rtl::OUString attr = vecAttr[i];
242*b1cdbd2cSJim Jagielski sal_Int32 nPos = attr.indexOf(':');
243*b1cdbd2cSJim Jagielski if(nPos > -1)
244*b1cdbd2cSJim Jagielski {
245*b1cdbd2cSJim Jagielski ::rtl::OUString attrName = attr.copy(0, nPos);
246*b1cdbd2cSJim Jagielski ::rtl::OUString attrValue = attr.copy(nPos + 1, attr.getLength() - nPos - 1);
247*b1cdbd2cSJim Jagielski beanSeq[i].Name = attrName;
248*b1cdbd2cSJim Jagielski get_AnyFromOLECHAR(attrName, attrValue, beanSeq[i].Value);
249*b1cdbd2cSJim Jagielski }
250*b1cdbd2cSJim Jagielski }
251*b1cdbd2cSJim Jagielski
252*b1cdbd2cSJim Jagielski if( GetXInterface()->setAttributes( startOffset,endOffset, beanSeq) )
253*b1cdbd2cSJim Jagielski return S_OK;
254*b1cdbd2cSJim Jagielski
255*b1cdbd2cSJim Jagielski return E_FAIL;
256*b1cdbd2cSJim Jagielski
257*b1cdbd2cSJim Jagielski LEAVE_PROTECTED_BLOCK
258*b1cdbd2cSJim Jagielski }
259*b1cdbd2cSJim Jagielski
260*b1cdbd2cSJim Jagielski /**
261*b1cdbd2cSJim Jagielski * Convert attributes string to Any type.
262*b1cdbd2cSJim Jagielski * Reference to infra\accessibility\bridge\org\openoffice\java\accessibility\AccessibleTextImpl.java
263*b1cdbd2cSJim Jagielski *
264*b1cdbd2cSJim Jagielski * @param ouName the string of attribute name.
265*b1cdbd2cSJim Jagielski * @param ouValue the string of attribute value.
266*b1cdbd2cSJim Jagielski * @param rAny the Any object to be returned.
267*b1cdbd2cSJim Jagielski */
get_AnyFromOLECHAR(const::rtl::OUString & ouName,const::rtl::OUString & ouValue,Any & rAny)268*b1cdbd2cSJim Jagielski void CAccEditableText::get_AnyFromOLECHAR(const ::rtl::OUString &ouName, const ::rtl::OUString &ouValue, Any &rAny)
269*b1cdbd2cSJim Jagielski {
270*b1cdbd2cSJim Jagielski if(ouName.compareTo(L"CharBackColor") == 0 ||
271*b1cdbd2cSJim Jagielski ouName.compareTo(L"CharColor") == 0 ||
272*b1cdbd2cSJim Jagielski ouName.compareTo(L"ParaAdjust") == 0 ||
273*b1cdbd2cSJim Jagielski ouName.compareTo(L"ParaFirstLineIndent") == 0 ||
274*b1cdbd2cSJim Jagielski ouName.compareTo(L"ParaLeftMargin") == 0 ||
275*b1cdbd2cSJim Jagielski ouName.compareTo(L"ParaRightMargin") == 0 ||
276*b1cdbd2cSJim Jagielski ouName.compareTo(L"ParaTopMargin") == 0 ||
277*b1cdbd2cSJim Jagielski ouName.compareTo(L"ParaBottomMargin") == 0 ||
278*b1cdbd2cSJim Jagielski ouName.compareTo(L"CharFontPitch") == 0)
279*b1cdbd2cSJim Jagielski {
280*b1cdbd2cSJim Jagielski // Convert to int.
281*b1cdbd2cSJim Jagielski // NOTE: CharFontPitch is not implemented in java file.
282*b1cdbd2cSJim Jagielski sal_Int32 nValue = ouValue.toInt32();
283*b1cdbd2cSJim Jagielski rAny.setValue(&nValue, getCppuType((sal_Int32 *)0));
284*b1cdbd2cSJim Jagielski }
285*b1cdbd2cSJim Jagielski else if(ouName.compareTo(L"CharShadowed") == 0 ||
286*b1cdbd2cSJim Jagielski ouName.compareTo(L"CharContoured") == 0)
287*b1cdbd2cSJim Jagielski {
288*b1cdbd2cSJim Jagielski // Convert to boolean.
289*b1cdbd2cSJim Jagielski boolean nValue = (boolean)ouValue.toBoolean();
290*b1cdbd2cSJim Jagielski rAny.setValue(&nValue, getCppuType((sal_Bool *)sal_False));
291*b1cdbd2cSJim Jagielski }
292*b1cdbd2cSJim Jagielski else if(ouName.compareTo(L"CharEscapement") == 0 ||
293*b1cdbd2cSJim Jagielski ouName.compareTo(L"CharStrikeout") == 0 ||
294*b1cdbd2cSJim Jagielski ouName.compareTo(L"CharUnderline") == 0 ||
295*b1cdbd2cSJim Jagielski ouName.compareTo(L"CharFontPitch") == 0)
296*b1cdbd2cSJim Jagielski {
297*b1cdbd2cSJim Jagielski // Convert to short.
298*b1cdbd2cSJim Jagielski short nValue = (short)ouValue.toInt32();
299*b1cdbd2cSJim Jagielski rAny.setValue(&nValue, getCppuType((short *)0));
300*b1cdbd2cSJim Jagielski }
301*b1cdbd2cSJim Jagielski else if(ouName.compareTo(L"CharHeight") == 0 ||
302*b1cdbd2cSJim Jagielski ouName.compareTo(L"CharWeight") == 0)
303*b1cdbd2cSJim Jagielski {
304*b1cdbd2cSJim Jagielski // Convert to float.
305*b1cdbd2cSJim Jagielski float fValue = ouValue.toFloat();
306*b1cdbd2cSJim Jagielski rAny.setValue(&fValue, getCppuType((float *)0));
307*b1cdbd2cSJim Jagielski }
308*b1cdbd2cSJim Jagielski else if(ouName.compareTo(L"CharFontName") == 0)
309*b1cdbd2cSJim Jagielski {
310*b1cdbd2cSJim Jagielski // Convert to string.
311*b1cdbd2cSJim Jagielski rAny.setValue(&ouValue, getCppuType((::rtl::OUString *)0));
312*b1cdbd2cSJim Jagielski }
313*b1cdbd2cSJim Jagielski else if(ouName.compareTo(L"CharPosture") == 0)
314*b1cdbd2cSJim Jagielski {
315*b1cdbd2cSJim Jagielski // Convert to FontSlant.
316*b1cdbd2cSJim Jagielski ::com::sun::star::awt::FontSlant fontSlant = (::com::sun::star::awt::FontSlant)ouValue.toInt32();
317*b1cdbd2cSJim Jagielski rAny.setValue(&fontSlant, getCppuType((::com::sun::star::awt::FontSlant*)0));
318*b1cdbd2cSJim Jagielski }
319*b1cdbd2cSJim Jagielski else if(ouName.compareTo(L"ParaTabStops") == 0)
320*b1cdbd2cSJim Jagielski {
321*b1cdbd2cSJim Jagielski //
322*b1cdbd2cSJim Jagielski // Convert to the Sequence with TabStop element.
323*b1cdbd2cSJim Jagielski vector< ::com::sun::star::style::TabStop > vecTabStop;
324*b1cdbd2cSJim Jagielski ::com::sun::star::style::TabStop tabStop;
325*b1cdbd2cSJim Jagielski ::rtl::OUString ouSubValue;
326*b1cdbd2cSJim Jagielski sal_Int32 nIndex = 0;
327*b1cdbd2cSJim Jagielski sal_Int32 pos = 0, posComma = 0;
328*b1cdbd2cSJim Jagielski
329*b1cdbd2cSJim Jagielski do
330*b1cdbd2cSJim Jagielski {
331*b1cdbd2cSJim Jagielski // Position.
332*b1cdbd2cSJim Jagielski pos = ouValue.indexOf(L"Position=", pos);
333*b1cdbd2cSJim Jagielski if(pos != -1)
334*b1cdbd2cSJim Jagielski {
335*b1cdbd2cSJim Jagielski posComma = ouValue.indexOf(',', pos + 9); // 9 = length of "Position=".
336*b1cdbd2cSJim Jagielski if(posComma != -1)
337*b1cdbd2cSJim Jagielski {
338*b1cdbd2cSJim Jagielski ouSubValue = ouValue.copy(pos + 9, posComma - pos - 9);
339*b1cdbd2cSJim Jagielski tabStop.Position = ouSubValue.toInt32();
340*b1cdbd2cSJim Jagielski pos = posComma + 1;
341*b1cdbd2cSJim Jagielski
342*b1cdbd2cSJim Jagielski // TabAlign.
343*b1cdbd2cSJim Jagielski pos = ouValue.indexOf(L"TabAlign=", pos);
344*b1cdbd2cSJim Jagielski if(pos != -1)
345*b1cdbd2cSJim Jagielski {
346*b1cdbd2cSJim Jagielski posComma = ouValue.indexOf(',', pos + 9); // 9 = length of "TabAlign=".
347*b1cdbd2cSJim Jagielski if(posComma != -1)
348*b1cdbd2cSJim Jagielski {
349*b1cdbd2cSJim Jagielski ouSubValue = ouValue.copy(pos + 9, posComma - pos - 9);
350*b1cdbd2cSJim Jagielski tabStop.Alignment = (::com::sun::star::style::TabAlign)ouSubValue.toInt32();
351*b1cdbd2cSJim Jagielski pos = posComma + 1;
352*b1cdbd2cSJim Jagielski
353*b1cdbd2cSJim Jagielski // DecimalChar.
354*b1cdbd2cSJim Jagielski pos = ouValue.indexOf(L"DecimalChar=", pos);
355*b1cdbd2cSJim Jagielski if(pos != -1)
356*b1cdbd2cSJim Jagielski {
357*b1cdbd2cSJim Jagielski posComma = ouValue.indexOf(',', pos + 11); // 11 = length of "TabAlign=".
358*b1cdbd2cSJim Jagielski if(posComma != -1)
359*b1cdbd2cSJim Jagielski {
360*b1cdbd2cSJim Jagielski ouSubValue = ouValue.copy(pos + 11, posComma - pos - 11);
361*b1cdbd2cSJim Jagielski tabStop.DecimalChar = (sal_Unicode)ouSubValue.toChar();
362*b1cdbd2cSJim Jagielski pos = posComma + 1;
363*b1cdbd2cSJim Jagielski
364*b1cdbd2cSJim Jagielski // FillChar.
365*b1cdbd2cSJim Jagielski pos = ouValue.indexOf(L"FillChar=", pos);
366*b1cdbd2cSJim Jagielski if(pos != -1)
367*b1cdbd2cSJim Jagielski {
368*b1cdbd2cSJim Jagielski posComma = ouValue.indexOf(',', pos + 9); // 9 = length of "TabAlign=".
369*b1cdbd2cSJim Jagielski if(posComma != -1)
370*b1cdbd2cSJim Jagielski {
371*b1cdbd2cSJim Jagielski ouSubValue = ouValue.copy(pos + 9, posComma - pos - 9);
372*b1cdbd2cSJim Jagielski tabStop.DecimalChar = (sal_Unicode)ouSubValue.toChar();
373*b1cdbd2cSJim Jagielski pos = posComma + 1;
374*b1cdbd2cSJim Jagielski
375*b1cdbd2cSJim Jagielski // Complete TabStop element.
376*b1cdbd2cSJim Jagielski vecTabStop.push_back(tabStop);
377*b1cdbd2cSJim Jagielski }
378*b1cdbd2cSJim Jagielski else
379*b1cdbd2cSJim Jagielski break; // No match comma.
380*b1cdbd2cSJim Jagielski }
381*b1cdbd2cSJim Jagielski else
382*b1cdbd2cSJim Jagielski break; // No match FillChar.
383*b1cdbd2cSJim Jagielski }
384*b1cdbd2cSJim Jagielski else
385*b1cdbd2cSJim Jagielski break; // No match comma.
386*b1cdbd2cSJim Jagielski }
387*b1cdbd2cSJim Jagielski else
388*b1cdbd2cSJim Jagielski break; // No match DecimalChar.
389*b1cdbd2cSJim Jagielski }
390*b1cdbd2cSJim Jagielski else
391*b1cdbd2cSJim Jagielski break; // No match comma.
392*b1cdbd2cSJim Jagielski }
393*b1cdbd2cSJim Jagielski else
394*b1cdbd2cSJim Jagielski break; // No match TabAlign.
395*b1cdbd2cSJim Jagielski }
396*b1cdbd2cSJim Jagielski else
397*b1cdbd2cSJim Jagielski break; // No match comma.
398*b1cdbd2cSJim Jagielski }
399*b1cdbd2cSJim Jagielski else
400*b1cdbd2cSJim Jagielski break; // No match Position.
401*b1cdbd2cSJim Jagielski }
402*b1cdbd2cSJim Jagielski while(pos < ouValue.getLength());
403*b1cdbd2cSJim Jagielski
404*b1cdbd2cSJim Jagielski //
405*b1cdbd2cSJim Jagielski // Dump into Sequence.
406*b1cdbd2cSJim Jagielski int iSeqLen = (vecTabStop.size() == 0) ? 1 : vecTabStop.size();
407*b1cdbd2cSJim Jagielski Sequence< ::com::sun::star::style::TabStop > seqTabStop(iSeqLen);
408*b1cdbd2cSJim Jagielski
409*b1cdbd2cSJim Jagielski if(vecTabStop.size() != 0)
410*b1cdbd2cSJim Jagielski {
411*b1cdbd2cSJim Jagielski // Dump every element.
412*b1cdbd2cSJim Jagielski for(int i = 0; i < iSeqLen; i ++)
413*b1cdbd2cSJim Jagielski {
414*b1cdbd2cSJim Jagielski seqTabStop[i] = vecTabStop[i];
415*b1cdbd2cSJim Jagielski }
416*b1cdbd2cSJim Jagielski }
417*b1cdbd2cSJim Jagielski else
418*b1cdbd2cSJim Jagielski {
419*b1cdbd2cSJim Jagielski // Create default value.
420*b1cdbd2cSJim Jagielski seqTabStop[0].Position = 0;
421*b1cdbd2cSJim Jagielski seqTabStop[0].Alignment = ::com::sun::star::style::TabAlign_DEFAULT;
422*b1cdbd2cSJim Jagielski seqTabStop[0].DecimalChar = '.';
423*b1cdbd2cSJim Jagielski seqTabStop[0].FillChar = ' ';
424*b1cdbd2cSJim Jagielski }
425*b1cdbd2cSJim Jagielski
426*b1cdbd2cSJim Jagielski // Assign to Any object.
427*b1cdbd2cSJim Jagielski rAny.setValue(&seqTabStop, getCppuType((Sequence< ::com::sun::star::style::TabStop >*)0));
428*b1cdbd2cSJim Jagielski }
429*b1cdbd2cSJim Jagielski else if(ouName.compareTo(L"ParaLineSpacing") == 0)
430*b1cdbd2cSJim Jagielski {
431*b1cdbd2cSJim Jagielski // Parse value string.
432*b1cdbd2cSJim Jagielski ::com::sun::star::style::LineSpacing lineSpacing;
433*b1cdbd2cSJim Jagielski ::rtl::OUString ouSubValue;
434*b1cdbd2cSJim Jagielski sal_Int32 pos = 0, posComma = 0;
435*b1cdbd2cSJim Jagielski
436*b1cdbd2cSJim Jagielski pos = ouValue.indexOf(L"Mode=", pos);
437*b1cdbd2cSJim Jagielski if(pos != -1)
438*b1cdbd2cSJim Jagielski {
439*b1cdbd2cSJim Jagielski posComma = ouValue.indexOf(',', pos + 5); // 5 = length of "Mode=".
440*b1cdbd2cSJim Jagielski if(posComma != -1)
441*b1cdbd2cSJim Jagielski {
442*b1cdbd2cSJim Jagielski ouSubValue = ouValue.copy(pos + 5, posComma - pos - 5);
443*b1cdbd2cSJim Jagielski lineSpacing.Mode = (sal_Int16)ouSubValue.toInt32();
444*b1cdbd2cSJim Jagielski pos = posComma + 1;
445*b1cdbd2cSJim Jagielski
446*b1cdbd2cSJim Jagielski pos = ouValue.indexOf(L"Height=", pos);
447*b1cdbd2cSJim Jagielski if(pos != -1)
448*b1cdbd2cSJim Jagielski {
449*b1cdbd2cSJim Jagielski ouSubValue = ouValue.copy(pos + 7, ouValue.getLength() - pos - 7);
450*b1cdbd2cSJim Jagielski lineSpacing.Height = (sal_Int16)ouSubValue.toInt32();
451*b1cdbd2cSJim Jagielski }
452*b1cdbd2cSJim Jagielski else
453*b1cdbd2cSJim Jagielski {
454*b1cdbd2cSJim Jagielski lineSpacing.Height = (sal_Int16)100; // Default height.
455*b1cdbd2cSJim Jagielski }
456*b1cdbd2cSJim Jagielski }
457*b1cdbd2cSJim Jagielski else
458*b1cdbd2cSJim Jagielski {
459*b1cdbd2cSJim Jagielski lineSpacing.Height = (sal_Int16)100; // Default height.
460*b1cdbd2cSJim Jagielski }
461*b1cdbd2cSJim Jagielski }
462*b1cdbd2cSJim Jagielski else
463*b1cdbd2cSJim Jagielski {
464*b1cdbd2cSJim Jagielski // Default Mode and Height.
465*b1cdbd2cSJim Jagielski lineSpacing.Mode = (sal_Int16)0;
466*b1cdbd2cSJim Jagielski lineSpacing.Height = (sal_Int16)100; // Default height.
467*b1cdbd2cSJim Jagielski }
468*b1cdbd2cSJim Jagielski
469*b1cdbd2cSJim Jagielski // Convert to Any object.
470*b1cdbd2cSJim Jagielski rAny.setValue(&lineSpacing, getCppuType((::com::sun::star::style::LineSpacing* )0));
471*b1cdbd2cSJim Jagielski }
472*b1cdbd2cSJim Jagielski else
473*b1cdbd2cSJim Jagielski {
474*b1cdbd2cSJim Jagielski // Do nothing.
475*b1cdbd2cSJim Jagielski sal_Int32 nDefault = 0;
476*b1cdbd2cSJim Jagielski rAny.setValue(&nDefault, getCppuType((sal_Int32 *)0));
477*b1cdbd2cSJim Jagielski }
478*b1cdbd2cSJim Jagielski }
479*b1cdbd2cSJim Jagielski
480*b1cdbd2cSJim Jagielski /**
481*b1cdbd2cSJim Jagielski * Overide of IUNOXWrapper.
482*b1cdbd2cSJim Jagielski *
483*b1cdbd2cSJim Jagielski * @param pXInterface the pointer of UNO interface.
484*b1cdbd2cSJim Jagielski */
put_XInterface(long pXInterface)485*b1cdbd2cSJim Jagielski STDMETHODIMP CAccEditableText::put_XInterface(long pXInterface)
486*b1cdbd2cSJim Jagielski {
487*b1cdbd2cSJim Jagielski
488*b1cdbd2cSJim Jagielski
489*b1cdbd2cSJim Jagielski ENTER_PROTECTED_BLOCK
490*b1cdbd2cSJim Jagielski
491*b1cdbd2cSJim Jagielski CUNOXWrapper::put_XInterface(pXInterface);
492*b1cdbd2cSJim Jagielski //special query.
493*b1cdbd2cSJim Jagielski if(pUNOInterface == NULL)
494*b1cdbd2cSJim Jagielski return E_FAIL;
495*b1cdbd2cSJim Jagielski Reference<XAccessibleContext> pRContext = pUNOInterface->getAccessibleContext();
496*b1cdbd2cSJim Jagielski if( !pRContext.is() )
497*b1cdbd2cSJim Jagielski {
498*b1cdbd2cSJim Jagielski return E_FAIL;
499*b1cdbd2cSJim Jagielski }
500*b1cdbd2cSJim Jagielski Reference<XAccessibleEditableText> pRXI(pRContext,UNO_QUERY);
501*b1cdbd2cSJim Jagielski if( !pRXI.is() )
502*b1cdbd2cSJim Jagielski pRXEdtTxt = NULL;
503*b1cdbd2cSJim Jagielski else
504*b1cdbd2cSJim Jagielski pRXEdtTxt = pRXI.get();
505*b1cdbd2cSJim Jagielski return S_OK;
506*b1cdbd2cSJim Jagielski
507*b1cdbd2cSJim Jagielski LEAVE_PROTECTED_BLOCK
508*b1cdbd2cSJim Jagielski }
509