1*3a700b0aSSteve Yin /**************************************************************
25fdc4257SSteve Yin *
3*3a700b0aSSteve Yin * Licensed to the Apache Software Foundation (ASF) under one
4*3a700b0aSSteve Yin * or more contributor license agreements. See the NOTICE file
5*3a700b0aSSteve Yin * distributed with this work for additional information
6*3a700b0aSSteve Yin * regarding copyright ownership. The ASF licenses this file
7*3a700b0aSSteve Yin * to you under the Apache License, Version 2.0 (the
8*3a700b0aSSteve Yin * "License"); you may not use this file except in compliance
9*3a700b0aSSteve Yin * with the License. You may obtain a copy of the License at
105fdc4257SSteve Yin *
11*3a700b0aSSteve Yin * http://www.apache.org/licenses/LICENSE-2.0
125fdc4257SSteve Yin *
13*3a700b0aSSteve Yin * Unless required by applicable law or agreed to in writing,
14*3a700b0aSSteve Yin * software distributed under the License is distributed on an
15*3a700b0aSSteve Yin * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16*3a700b0aSSteve Yin * KIND, either express or implied. See the License for the
17*3a700b0aSSteve Yin * specific language governing permissions and limitations
18*3a700b0aSSteve Yin * under the License.
195fdc4257SSteve Yin *
20*3a700b0aSSteve Yin *************************************************************/
215fdc4257SSteve Yin
225fdc4257SSteve Yin /**
235fdc4257SSteve Yin * AccEditableText.cpp : Implementation of CUAccCOMApp and DLL registration.
245fdc4257SSteve Yin */
255fdc4257SSteve Yin #include "stdafx.h"
265fdc4257SSteve Yin #include "UAccCOM2.h"
275fdc4257SSteve Yin #include "AccEditableText.h"
285fdc4257SSteve Yin #include <com/sun/star/accessibility/XAccessible.hpp>
295fdc4257SSteve Yin #include <com/sun/star/accessibility/XAccessibleContext.hpp>
305fdc4257SSteve Yin #include <com/sun/star/accessibility/XAccessibleText.hpp>
315fdc4257SSteve Yin #include <com/sun/star/awt/FontSlant.hpp>
325fdc4257SSteve Yin #include <com/sun/star/beans/PropertyValue.hpp>
335fdc4257SSteve Yin #include <com/sun/star/style/LineSpacing.hpp>
345fdc4257SSteve Yin #include <com/sun/star/style/TabStop.hpp>
355fdc4257SSteve Yin #include <vector>
365fdc4257SSteve Yin
375fdc4257SSteve Yin using namespace com::sun::star::accessibility;
385fdc4257SSteve Yin using namespace com::sun::star::uno;
395fdc4257SSteve Yin using namespace com::sun::star::awt;
405fdc4257SSteve Yin using namespace com::sun::star::beans;
415fdc4257SSteve Yin using namespace std;
425fdc4257SSteve Yin
435fdc4257SSteve Yin /**
445fdc4257SSteve Yin * Copys a range of text to the clipboard.
455fdc4257SSteve Yin *
465fdc4257SSteve Yin * @param startOffset the start offset of copying.
475fdc4257SSteve Yin * @param endOffset the end offset of copying.
485fdc4257SSteve Yin * @param success the boolean result to be returned.
495fdc4257SSteve Yin */
copyText(long startOffset,long endOffset)505fdc4257SSteve Yin STDMETHODIMP CAccEditableText::copyText(long startOffset, long endOffset)
515fdc4257SSteve Yin {
525fdc4257SSteve Yin
535fdc4257SSteve Yin CHECK_ENABLE_INF
545fdc4257SSteve Yin
555fdc4257SSteve Yin ENTER_PROTECTED_BLOCK
565fdc4257SSteve Yin
575fdc4257SSteve Yin // #CHECK XInterface#
585fdc4257SSteve Yin if(!pRXEdtTxt.is())
595fdc4257SSteve Yin {
605fdc4257SSteve Yin return E_FAIL;
615fdc4257SSteve Yin }
625fdc4257SSteve Yin
635fdc4257SSteve Yin if ( GetXInterface()->copyText( startOffset, endOffset ) )
645fdc4257SSteve Yin return S_OK;
655fdc4257SSteve Yin
665fdc4257SSteve Yin return E_FAIL;
675fdc4257SSteve Yin
685fdc4257SSteve Yin LEAVE_PROTECTED_BLOCK
695fdc4257SSteve Yin }
705fdc4257SSteve Yin
715fdc4257SSteve Yin /**
725fdc4257SSteve Yin * Deletes a range of text.
735fdc4257SSteve Yin *
745fdc4257SSteve Yin * @param startOffset the start offset of deleting.
755fdc4257SSteve Yin * @param endOffset the end offset of deleting.
765fdc4257SSteve Yin * @param success the boolean result to be returned.
775fdc4257SSteve Yin */
deleteText(long startOffset,long endOffset)785fdc4257SSteve Yin STDMETHODIMP CAccEditableText::deleteText(long startOffset, long endOffset)
795fdc4257SSteve Yin {
805fdc4257SSteve Yin
815fdc4257SSteve Yin CHECK_ENABLE_INF
825fdc4257SSteve Yin
835fdc4257SSteve Yin ENTER_PROTECTED_BLOCK
845fdc4257SSteve Yin
855fdc4257SSteve Yin if( !pRXEdtTxt.is() )
865fdc4257SSteve Yin return E_FAIL;
875fdc4257SSteve Yin
885fdc4257SSteve Yin if( GetXInterface()->deleteText( startOffset, endOffset ) )
895fdc4257SSteve Yin return S_OK;
905fdc4257SSteve Yin
915fdc4257SSteve Yin return E_FAIL;
925fdc4257SSteve Yin
935fdc4257SSteve Yin LEAVE_PROTECTED_BLOCK
945fdc4257SSteve Yin }
955fdc4257SSteve Yin
965fdc4257SSteve Yin /**
975fdc4257SSteve Yin * Inserts text at a specified offset.
985fdc4257SSteve Yin *
995fdc4257SSteve Yin * @param offset the offset of inserting.
1005fdc4257SSteve Yin * @param text the text to be inserted.
1015fdc4257SSteve Yin * @param success the boolean result to be returned.
1025fdc4257SSteve Yin */
insertText(long offset,BSTR * text)1035fdc4257SSteve Yin STDMETHODIMP CAccEditableText::insertText(long offset, BSTR * text)
1045fdc4257SSteve Yin {
1055fdc4257SSteve Yin
1065fdc4257SSteve Yin CHECK_ENABLE_INF
1075fdc4257SSteve Yin
1085fdc4257SSteve Yin ENTER_PROTECTED_BLOCK
1095fdc4257SSteve Yin
1105fdc4257SSteve Yin if (text == NULL)
1115fdc4257SSteve Yin return E_INVALIDARG;
1125fdc4257SSteve Yin
1135fdc4257SSteve Yin if( !pRXEdtTxt.is() )
1145fdc4257SSteve Yin return E_FAIL;
1155fdc4257SSteve Yin
1165fdc4257SSteve Yin ::rtl::OUString ouStr(*text);
1175fdc4257SSteve Yin
1185fdc4257SSteve Yin if( GetXInterface()->insertText( ouStr, offset ) )
1195fdc4257SSteve Yin return S_OK;
1205fdc4257SSteve Yin
1215fdc4257SSteve Yin return E_FAIL;
1225fdc4257SSteve Yin
1235fdc4257SSteve Yin LEAVE_PROTECTED_BLOCK
1245fdc4257SSteve Yin }
1255fdc4257SSteve Yin
1265fdc4257SSteve Yin /**
1275fdc4257SSteve Yin * Cuts a range of text to the clipboard.
1285fdc4257SSteve Yin *
1295fdc4257SSteve Yin * @param startOffset the start offset of cuting.
1305fdc4257SSteve Yin * @param endOffset the end offset of cuting.
1315fdc4257SSteve Yin * @param success the boolean result to be returned.
1325fdc4257SSteve Yin */
cutText(long startOffset,long endOffset)1335fdc4257SSteve Yin STDMETHODIMP CAccEditableText::cutText(long startOffset, long endOffset)
1345fdc4257SSteve Yin {
1355fdc4257SSteve Yin
1365fdc4257SSteve Yin CHECK_ENABLE_INF
1375fdc4257SSteve Yin
1385fdc4257SSteve Yin ENTER_PROTECTED_BLOCK
1395fdc4257SSteve Yin
1405fdc4257SSteve Yin if( !pRXEdtTxt.is() )
1415fdc4257SSteve Yin return E_FAIL;
1425fdc4257SSteve Yin
1435fdc4257SSteve Yin if( GetXInterface()->cutText( startOffset, endOffset ) )
1445fdc4257SSteve Yin return S_OK;
1455fdc4257SSteve Yin
1465fdc4257SSteve Yin return E_FAIL;
1475fdc4257SSteve Yin
1485fdc4257SSteve Yin LEAVE_PROTECTED_BLOCK
1495fdc4257SSteve Yin }
1505fdc4257SSteve Yin
1515fdc4257SSteve Yin /**
1525fdc4257SSteve Yin * Pastes text from clipboard at specified offset.
1535fdc4257SSteve Yin *
1545fdc4257SSteve Yin * @param offset the offset of pasting.
1555fdc4257SSteve Yin * @param success the boolean result to be returned.
1565fdc4257SSteve Yin */
pasteText(long offset)1575fdc4257SSteve Yin STDMETHODIMP CAccEditableText::pasteText(long offset)
1585fdc4257SSteve Yin {
1595fdc4257SSteve Yin
1605fdc4257SSteve Yin CHECK_ENABLE_INF
1615fdc4257SSteve Yin
1625fdc4257SSteve Yin ENTER_PROTECTED_BLOCK
1635fdc4257SSteve Yin
1645fdc4257SSteve Yin if( !pRXEdtTxt.is() )
1655fdc4257SSteve Yin return E_FAIL;
1665fdc4257SSteve Yin
1675fdc4257SSteve Yin if( GetXInterface()->pasteText( offset ) )
1685fdc4257SSteve Yin return S_OK;
1695fdc4257SSteve Yin
1705fdc4257SSteve Yin return E_FAIL;
1715fdc4257SSteve Yin
1725fdc4257SSteve Yin LEAVE_PROTECTED_BLOCK
1735fdc4257SSteve Yin }
1745fdc4257SSteve Yin
1755fdc4257SSteve Yin /**
1765fdc4257SSteve Yin * Replaces range of text with new text.
1775fdc4257SSteve Yin *
1785fdc4257SSteve Yin * @param startOffset the start offset of replacing.
1795fdc4257SSteve Yin * @param endOffset the end offset of replacing.
1805fdc4257SSteve Yin * @param text the replacing text.
1815fdc4257SSteve Yin * @param success the boolean result to be returned.
1825fdc4257SSteve Yin */
replaceText(long startOffset,long endOffset,BSTR * text)1835fdc4257SSteve Yin STDMETHODIMP CAccEditableText::replaceText(long startOffset, long endOffset, BSTR * text)
1845fdc4257SSteve Yin {
1855fdc4257SSteve Yin
1865fdc4257SSteve Yin CHECK_ENABLE_INF
1875fdc4257SSteve Yin
1885fdc4257SSteve Yin ENTER_PROTECTED_BLOCK
1895fdc4257SSteve Yin
1905fdc4257SSteve Yin // #CHECK#
1915fdc4257SSteve Yin if (text == NULL)
1925fdc4257SSteve Yin return E_INVALIDARG;
1935fdc4257SSteve Yin if( !pRXEdtTxt.is() )
1945fdc4257SSteve Yin return E_FAIL;
1955fdc4257SSteve Yin
1965fdc4257SSteve Yin ::rtl::OUString ouStr(*text);
1975fdc4257SSteve Yin
1985fdc4257SSteve Yin if( GetXInterface()->replaceText( startOffset,endOffset, ouStr) )
1995fdc4257SSteve Yin return S_OK;
2005fdc4257SSteve Yin return E_FAIL;
2015fdc4257SSteve Yin
2025fdc4257SSteve Yin LEAVE_PROTECTED_BLOCK
2035fdc4257SSteve Yin }
2045fdc4257SSteve Yin
2055fdc4257SSteve Yin /**
2065fdc4257SSteve Yin * Sets attributes of range of text.
2075fdc4257SSteve Yin *
2085fdc4257SSteve Yin * @param startOffset the start offset.
2095fdc4257SSteve Yin * @param endOffset the end offset.
2105fdc4257SSteve Yin * @param attributes the attribute text.
2115fdc4257SSteve Yin * @param success the boolean result to be returned.
2125fdc4257SSteve Yin */
setAttributes(long startOffset,long endOffset,BSTR * attributes)2135fdc4257SSteve Yin STDMETHODIMP CAccEditableText::setAttributes(long startOffset, long endOffset, BSTR * attributes)
2145fdc4257SSteve Yin {
2155fdc4257SSteve Yin
2165fdc4257SSteve Yin CHECK_ENABLE_INF
2175fdc4257SSteve Yin
2185fdc4257SSteve Yin ENTER_PROTECTED_BLOCK
2195fdc4257SSteve Yin
2205fdc4257SSteve Yin // #CHECK#
2215fdc4257SSteve Yin if (attributes == NULL)
2225fdc4257SSteve Yin return E_INVALIDARG;
2235fdc4257SSteve Yin if( !pRXEdtTxt.is() )
2245fdc4257SSteve Yin return E_FAIL;
2255fdc4257SSteve Yin
2265fdc4257SSteve Yin ::rtl::OUString ouStr(*attributes);
2275fdc4257SSteve Yin
2285fdc4257SSteve Yin sal_Int32 nIndex = 0;
2295fdc4257SSteve Yin sal_Unicode cTok = ';';
2305fdc4257SSteve Yin vector< ::rtl::OUString > vecAttr;
2315fdc4257SSteve Yin do
2325fdc4257SSteve Yin {
2335fdc4257SSteve Yin ::rtl::OUString ouToken = ouStr.getToken(0, cTok, nIndex);
2345fdc4257SSteve Yin vecAttr.push_back(ouToken);
2355fdc4257SSteve Yin }
2365fdc4257SSteve Yin while(nIndex >= 0);
2375fdc4257SSteve Yin
2385fdc4257SSteve Yin Sequence< PropertyValue > beanSeq(vecAttr.size());
2395fdc4257SSteve Yin for(unsigned int i = 0; i < vecAttr.size(); i ++)
2405fdc4257SSteve Yin {
2415fdc4257SSteve Yin ::rtl::OUString attr = vecAttr[i];
2425fdc4257SSteve Yin sal_Int32 nPos = attr.indexOf(':');
2435fdc4257SSteve Yin if(nPos > -1)
2445fdc4257SSteve Yin {
2455fdc4257SSteve Yin ::rtl::OUString attrName = attr.copy(0, nPos);
2465fdc4257SSteve Yin ::rtl::OUString attrValue = attr.copy(nPos + 1, attr.getLength() - nPos - 1);
2475fdc4257SSteve Yin beanSeq[i].Name = attrName;
2485fdc4257SSteve Yin get_AnyFromOLECHAR(attrName, attrValue, beanSeq[i].Value);
2495fdc4257SSteve Yin }
2505fdc4257SSteve Yin }
2515fdc4257SSteve Yin
2525fdc4257SSteve Yin if( GetXInterface()->setAttributes( startOffset,endOffset, beanSeq) )
2535fdc4257SSteve Yin return S_OK;
2545fdc4257SSteve Yin
2555fdc4257SSteve Yin return E_FAIL;
2565fdc4257SSteve Yin
2575fdc4257SSteve Yin LEAVE_PROTECTED_BLOCK
2585fdc4257SSteve Yin }
2595fdc4257SSteve Yin
2605fdc4257SSteve Yin /**
2615fdc4257SSteve Yin * Convert attributes string to Any type.
2625fdc4257SSteve Yin * Reference to infra\accessibility\bridge\org\openoffice\java\accessibility\AccessibleTextImpl.java
2635fdc4257SSteve Yin *
2645fdc4257SSteve Yin * @param ouName the string of attribute name.
2655fdc4257SSteve Yin * @param ouValue the string of attribute value.
2665fdc4257SSteve Yin * @param rAny the Any object to be returned.
2675fdc4257SSteve Yin */
get_AnyFromOLECHAR(const::rtl::OUString & ouName,const::rtl::OUString & ouValue,Any & rAny)2685fdc4257SSteve Yin void CAccEditableText::get_AnyFromOLECHAR(const ::rtl::OUString &ouName, const ::rtl::OUString &ouValue, Any &rAny)
2695fdc4257SSteve Yin {
2705fdc4257SSteve Yin if(ouName.compareTo(L"CharBackColor") == 0 ||
2715fdc4257SSteve Yin ouName.compareTo(L"CharColor") == 0 ||
2725fdc4257SSteve Yin ouName.compareTo(L"ParaAdjust") == 0 ||
2735fdc4257SSteve Yin ouName.compareTo(L"ParaFirstLineIndent") == 0 ||
2745fdc4257SSteve Yin ouName.compareTo(L"ParaLeftMargin") == 0 ||
2755fdc4257SSteve Yin ouName.compareTo(L"ParaRightMargin") == 0 ||
2765fdc4257SSteve Yin ouName.compareTo(L"ParaTopMargin") == 0 ||
2775fdc4257SSteve Yin ouName.compareTo(L"ParaBottomMargin") == 0 ||
2785fdc4257SSteve Yin ouName.compareTo(L"CharFontPitch") == 0)
2795fdc4257SSteve Yin {
2805fdc4257SSteve Yin // Convert to int.
2815fdc4257SSteve Yin // NOTE: CharFontPitch is not implemented in java file.
2825fdc4257SSteve Yin sal_Int32 nValue = ouValue.toInt32();
2835fdc4257SSteve Yin rAny.setValue(&nValue, getCppuType((sal_Int32 *)0));
2845fdc4257SSteve Yin }
2855fdc4257SSteve Yin else if(ouName.compareTo(L"CharShadowed") == 0 ||
2865fdc4257SSteve Yin ouName.compareTo(L"CharContoured") == 0)
2875fdc4257SSteve Yin {
2885fdc4257SSteve Yin // Convert to boolean.
2895fdc4257SSteve Yin boolean nValue = (boolean)ouValue.toBoolean();
2905fdc4257SSteve Yin rAny.setValue(&nValue, getCppuType((sal_Bool *)sal_False));
2915fdc4257SSteve Yin }
2925fdc4257SSteve Yin else if(ouName.compareTo(L"CharEscapement") == 0 ||
2935fdc4257SSteve Yin ouName.compareTo(L"CharStrikeout") == 0 ||
2945fdc4257SSteve Yin ouName.compareTo(L"CharUnderline") == 0 ||
2955fdc4257SSteve Yin ouName.compareTo(L"CharFontPitch") == 0)
2965fdc4257SSteve Yin {
2975fdc4257SSteve Yin // Convert to short.
2985fdc4257SSteve Yin short nValue = (short)ouValue.toInt32();
2995fdc4257SSteve Yin rAny.setValue(&nValue, getCppuType((short *)0));
3005fdc4257SSteve Yin }
3015fdc4257SSteve Yin else if(ouName.compareTo(L"CharHeight") == 0 ||
3025fdc4257SSteve Yin ouName.compareTo(L"CharWeight") == 0)
3035fdc4257SSteve Yin {
3045fdc4257SSteve Yin // Convert to float.
3055fdc4257SSteve Yin float fValue = ouValue.toFloat();
3065fdc4257SSteve Yin rAny.setValue(&fValue, getCppuType((float *)0));
3075fdc4257SSteve Yin }
3085fdc4257SSteve Yin else if(ouName.compareTo(L"CharFontName") == 0)
3095fdc4257SSteve Yin {
3105fdc4257SSteve Yin // Convert to string.
3115fdc4257SSteve Yin rAny.setValue(&ouValue, getCppuType((::rtl::OUString *)0));
3125fdc4257SSteve Yin }
3135fdc4257SSteve Yin else if(ouName.compareTo(L"CharPosture") == 0)
3145fdc4257SSteve Yin {
3155fdc4257SSteve Yin // Convert to FontSlant.
3165fdc4257SSteve Yin ::com::sun::star::awt::FontSlant fontSlant = (::com::sun::star::awt::FontSlant)ouValue.toInt32();
3175fdc4257SSteve Yin rAny.setValue(&fontSlant, getCppuType((::com::sun::star::awt::FontSlant*)0));
3185fdc4257SSteve Yin }
3195fdc4257SSteve Yin else if(ouName.compareTo(L"ParaTabStops") == 0)
3205fdc4257SSteve Yin {
3215fdc4257SSteve Yin //
3225fdc4257SSteve Yin // Convert to the Sequence with TabStop element.
3235fdc4257SSteve Yin vector< ::com::sun::star::style::TabStop > vecTabStop;
3245fdc4257SSteve Yin ::com::sun::star::style::TabStop tabStop;
3255fdc4257SSteve Yin ::rtl::OUString ouSubValue;
3265fdc4257SSteve Yin sal_Int32 nIndex = 0;
3275fdc4257SSteve Yin sal_Int32 pos = 0, posComma = 0;
3285fdc4257SSteve Yin
3295fdc4257SSteve Yin do
3305fdc4257SSteve Yin {
3315fdc4257SSteve Yin // Position.
3325fdc4257SSteve Yin pos = ouValue.indexOf(L"Position=", pos);
3335fdc4257SSteve Yin if(pos != -1)
3345fdc4257SSteve Yin {
3355fdc4257SSteve Yin posComma = ouValue.indexOf(',', pos + 9); // 9 = length of "Position=".
3365fdc4257SSteve Yin if(posComma != -1)
3375fdc4257SSteve Yin {
3385fdc4257SSteve Yin ouSubValue = ouValue.copy(pos + 9, posComma - pos - 9);
3395fdc4257SSteve Yin tabStop.Position = ouSubValue.toInt32();
3405fdc4257SSteve Yin pos = posComma + 1;
3415fdc4257SSteve Yin
3425fdc4257SSteve Yin // TabAlign.
3435fdc4257SSteve Yin pos = ouValue.indexOf(L"TabAlign=", pos);
3445fdc4257SSteve Yin if(pos != -1)
3455fdc4257SSteve Yin {
3465fdc4257SSteve Yin posComma = ouValue.indexOf(',', pos + 9); // 9 = length of "TabAlign=".
3475fdc4257SSteve Yin if(posComma != -1)
3485fdc4257SSteve Yin {
3495fdc4257SSteve Yin ouSubValue = ouValue.copy(pos + 9, posComma - pos - 9);
3505fdc4257SSteve Yin tabStop.Alignment = (::com::sun::star::style::TabAlign)ouSubValue.toInt32();
3515fdc4257SSteve Yin pos = posComma + 1;
3525fdc4257SSteve Yin
3535fdc4257SSteve Yin // DecimalChar.
3545fdc4257SSteve Yin pos = ouValue.indexOf(L"DecimalChar=", pos);
3555fdc4257SSteve Yin if(pos != -1)
3565fdc4257SSteve Yin {
3575fdc4257SSteve Yin posComma = ouValue.indexOf(',', pos + 11); // 11 = length of "TabAlign=".
3585fdc4257SSteve Yin if(posComma != -1)
3595fdc4257SSteve Yin {
3605fdc4257SSteve Yin ouSubValue = ouValue.copy(pos + 11, posComma - pos - 11);
3615fdc4257SSteve Yin tabStop.DecimalChar = (sal_Unicode)ouSubValue.toChar();
3625fdc4257SSteve Yin pos = posComma + 1;
3635fdc4257SSteve Yin
3645fdc4257SSteve Yin // FillChar.
3655fdc4257SSteve Yin pos = ouValue.indexOf(L"FillChar=", pos);
3665fdc4257SSteve Yin if(pos != -1)
3675fdc4257SSteve Yin {
3685fdc4257SSteve Yin posComma = ouValue.indexOf(',', pos + 9); // 9 = length of "TabAlign=".
3695fdc4257SSteve Yin if(posComma != -1)
3705fdc4257SSteve Yin {
3715fdc4257SSteve Yin ouSubValue = ouValue.copy(pos + 9, posComma - pos - 9);
3725fdc4257SSteve Yin tabStop.DecimalChar = (sal_Unicode)ouSubValue.toChar();
3735fdc4257SSteve Yin pos = posComma + 1;
3745fdc4257SSteve Yin
3755fdc4257SSteve Yin // Complete TabStop element.
3765fdc4257SSteve Yin vecTabStop.push_back(tabStop);
3775fdc4257SSteve Yin }
3785fdc4257SSteve Yin else
3795fdc4257SSteve Yin break; // No match comma.
3805fdc4257SSteve Yin }
3815fdc4257SSteve Yin else
3825fdc4257SSteve Yin break; // No match FillChar.
3835fdc4257SSteve Yin }
3845fdc4257SSteve Yin else
3855fdc4257SSteve Yin break; // No match comma.
3865fdc4257SSteve Yin }
3875fdc4257SSteve Yin else
3885fdc4257SSteve Yin break; // No match DecimalChar.
3895fdc4257SSteve Yin }
3905fdc4257SSteve Yin else
3915fdc4257SSteve Yin break; // No match comma.
3925fdc4257SSteve Yin }
3935fdc4257SSteve Yin else
3945fdc4257SSteve Yin break; // No match TabAlign.
3955fdc4257SSteve Yin }
3965fdc4257SSteve Yin else
3975fdc4257SSteve Yin break; // No match comma.
3985fdc4257SSteve Yin }
3995fdc4257SSteve Yin else
4005fdc4257SSteve Yin break; // No match Position.
4015fdc4257SSteve Yin }
4025fdc4257SSteve Yin while(pos < ouValue.getLength());
4035fdc4257SSteve Yin
4045fdc4257SSteve Yin //
4055fdc4257SSteve Yin // Dump into Sequence.
4065fdc4257SSteve Yin int iSeqLen = (vecTabStop.size() == 0) ? 1 : vecTabStop.size();
4075fdc4257SSteve Yin Sequence< ::com::sun::star::style::TabStop > seqTabStop(iSeqLen);
4085fdc4257SSteve Yin
4095fdc4257SSteve Yin if(vecTabStop.size() != 0)
4105fdc4257SSteve Yin {
4115fdc4257SSteve Yin // Dump every element.
4125fdc4257SSteve Yin for(int i = 0; i < iSeqLen; i ++)
4135fdc4257SSteve Yin {
4145fdc4257SSteve Yin seqTabStop[i] = vecTabStop[i];
4155fdc4257SSteve Yin }
4165fdc4257SSteve Yin }
4175fdc4257SSteve Yin else
4185fdc4257SSteve Yin {
4195fdc4257SSteve Yin // Create default value.
4205fdc4257SSteve Yin seqTabStop[0].Position = 0;
4215fdc4257SSteve Yin seqTabStop[0].Alignment = ::com::sun::star::style::TabAlign_DEFAULT;
4225fdc4257SSteve Yin seqTabStop[0].DecimalChar = '.';
4235fdc4257SSteve Yin seqTabStop[0].FillChar = ' ';
4245fdc4257SSteve Yin }
4255fdc4257SSteve Yin
4265fdc4257SSteve Yin // Assign to Any object.
4275fdc4257SSteve Yin rAny.setValue(&seqTabStop, getCppuType((Sequence< ::com::sun::star::style::TabStop >*)0));
4285fdc4257SSteve Yin }
4295fdc4257SSteve Yin else if(ouName.compareTo(L"ParaLineSpacing") == 0)
4305fdc4257SSteve Yin {
4315fdc4257SSteve Yin // Parse value string.
4325fdc4257SSteve Yin ::com::sun::star::style::LineSpacing lineSpacing;
4335fdc4257SSteve Yin ::rtl::OUString ouSubValue;
4345fdc4257SSteve Yin sal_Int32 pos = 0, posComma = 0;
4355fdc4257SSteve Yin
4365fdc4257SSteve Yin pos = ouValue.indexOf(L"Mode=", pos);
4375fdc4257SSteve Yin if(pos != -1)
4385fdc4257SSteve Yin {
4395fdc4257SSteve Yin posComma = ouValue.indexOf(',', pos + 5); // 5 = length of "Mode=".
4405fdc4257SSteve Yin if(posComma != -1)
4415fdc4257SSteve Yin {
4425fdc4257SSteve Yin ouSubValue = ouValue.copy(pos + 5, posComma - pos - 5);
4435fdc4257SSteve Yin lineSpacing.Mode = (sal_Int16)ouSubValue.toInt32();
4445fdc4257SSteve Yin pos = posComma + 1;
4455fdc4257SSteve Yin
4465fdc4257SSteve Yin pos = ouValue.indexOf(L"Height=", pos);
4475fdc4257SSteve Yin if(pos != -1)
4485fdc4257SSteve Yin {
4495fdc4257SSteve Yin ouSubValue = ouValue.copy(pos + 7, ouValue.getLength() - pos - 7);
4505fdc4257SSteve Yin lineSpacing.Height = (sal_Int16)ouSubValue.toInt32();
4515fdc4257SSteve Yin }
4525fdc4257SSteve Yin else
4535fdc4257SSteve Yin {
4545fdc4257SSteve Yin lineSpacing.Height = (sal_Int16)100; // Default height.
4555fdc4257SSteve Yin }
4565fdc4257SSteve Yin }
4575fdc4257SSteve Yin else
4585fdc4257SSteve Yin {
4595fdc4257SSteve Yin lineSpacing.Height = (sal_Int16)100; // Default height.
4605fdc4257SSteve Yin }
4615fdc4257SSteve Yin }
4625fdc4257SSteve Yin else
4635fdc4257SSteve Yin {
4645fdc4257SSteve Yin // Default Mode and Height.
4655fdc4257SSteve Yin lineSpacing.Mode = (sal_Int16)0;
4665fdc4257SSteve Yin lineSpacing.Height = (sal_Int16)100; // Default height.
4675fdc4257SSteve Yin }
4685fdc4257SSteve Yin
4695fdc4257SSteve Yin // Convert to Any object.
4705fdc4257SSteve Yin rAny.setValue(&lineSpacing, getCppuType((::com::sun::star::style::LineSpacing* )0));
4715fdc4257SSteve Yin }
4725fdc4257SSteve Yin else
4735fdc4257SSteve Yin {
4745fdc4257SSteve Yin // Do nothing.
4755fdc4257SSteve Yin sal_Int32 nDefault = 0;
4765fdc4257SSteve Yin rAny.setValue(&nDefault, getCppuType((sal_Int32 *)0));
4775fdc4257SSteve Yin }
4785fdc4257SSteve Yin }
4795fdc4257SSteve Yin
4805fdc4257SSteve Yin /**
4815fdc4257SSteve Yin * Overide of IUNOXWrapper.
4825fdc4257SSteve Yin *
4835fdc4257SSteve Yin * @param pXInterface the pointer of UNO interface.
4845fdc4257SSteve Yin */
put_XInterface(long pXInterface)4855fdc4257SSteve Yin STDMETHODIMP CAccEditableText::put_XInterface(long pXInterface)
4865fdc4257SSteve Yin {
4875fdc4257SSteve Yin
4885fdc4257SSteve Yin
4895fdc4257SSteve Yin ENTER_PROTECTED_BLOCK
4905fdc4257SSteve Yin
4915fdc4257SSteve Yin CUNOXWrapper::put_XInterface(pXInterface);
4925fdc4257SSteve Yin //special query.
4935fdc4257SSteve Yin if(pUNOInterface == NULL)
4945fdc4257SSteve Yin return E_FAIL;
4955fdc4257SSteve Yin Reference<XAccessibleContext> pRContext = pUNOInterface->getAccessibleContext();
4965fdc4257SSteve Yin if( !pRContext.is() )
4975fdc4257SSteve Yin {
4985fdc4257SSteve Yin return E_FAIL;
4995fdc4257SSteve Yin }
5005fdc4257SSteve Yin Reference<XAccessibleEditableText> pRXI(pRContext,UNO_QUERY);
5015fdc4257SSteve Yin if( !pRXI.is() )
5025fdc4257SSteve Yin pRXEdtTxt = NULL;
5035fdc4257SSteve Yin else
5045fdc4257SSteve Yin pRXEdtTxt = pRXI.get();
5055fdc4257SSteve Yin return S_OK;
5065fdc4257SSteve Yin
5075fdc4257SSteve Yin LEAVE_PROTECTED_BLOCK
5085fdc4257SSteve Yin }
509