| /************************************************************** |
| * |
| * Licensed to the Apache Software Foundation (ASF) under one |
| * or more contributor license agreements. See the NOTICE file |
| * distributed with this work for additional information |
| * regarding copyright ownership. The ASF licenses this file |
| * to you under the Apache License, Version 2.0 (the |
| * "License"); you may not use this file except in compliance |
| * with the License. You may obtain a copy of the License at |
| * |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, |
| * software distributed under the License is distributed on an |
| * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY |
| * KIND, either express or implied. See the License for the |
| * specific language governing permissions and limitations |
| * under the License. |
| * |
| *************************************************************/ |
| |
| // MARKER(update_precomp.py): autogen include statement, do not remove |
| #include "precompiled_sw.hxx" |
| |
| #include <svx/svxids.hrc> |
| #include <hintids.hxx> |
| #include <vos/mutex.hxx> |
| #include <vcl/svapp.hxx> |
| #include <svl/smplhint.hxx> |
| #include <svtools/ctrltool.hxx> |
| #include <svl/style.hxx> |
| #include <svl/itemiter.hxx> |
| #include <svx/pageitem.hxx> |
| #include <editeng/sizeitem.hxx> |
| #include <editeng/ulspitem.hxx> |
| #include <editeng/lrspitem.hxx> |
| #include <editeng/boxitem.hxx> |
| #include <editeng/shaditem.hxx> |
| #include <editeng/brshitem.hxx> |
| #include <editeng/flstitem.hxx> |
| #include <editeng/paperinf.hxx> |
| #include <pagedesc.hxx> |
| #include <doc.hxx> |
| #include <IDocumentUndoRedo.hxx> |
| #include <docary.hxx> |
| #include <charfmt.hxx> |
| #include <cmdid.h> |
| #include <unostyle.hxx> |
| #include <unosett.hxx> |
| #include <docsh.hxx> |
| #include <swstyle.h> |
| #include <paratr.hxx> |
| #include <unoprnms.hxx> |
| #include <shellio.hxx> |
| #include <docstyle.hxx> |
| #include <unotextbodyhf.hxx> |
| #include <fmthdft.hxx> |
| #include <fmtpdsc.hxx> |
| #include <tools/urlobj.hxx> |
| #include <poolfmt.hrc> |
| #include <poolfmt.hxx> |
| #include "unoevent.hxx" |
| #include <fmtruby.hxx> |
| #include <SwStyleNameMapper.hxx> |
| #include <sfx2/printer.hxx> |
| #include <com/sun/star/style/ParagraphStyleCategory.hpp> |
| #include <com/sun/star/style/XStyleFamiliesSupplier.hpp> |
| #include <com/sun/star/beans/PropertyAttribute.hpp> |
| #include <com/sun/star/beans/NamedValue.hpp> |
| #include <com/sun/star/drawing/BitmapMode.hpp> |
| #include <istyleaccess.hxx> |
| #include <GetMetricVal.hxx> |
| #include <fmtfsize.hxx> |
| #include <numrule.hxx> |
| |
| //UUUU |
| #include <svx/unobrushitemhelper.hxx> |
| #include <editeng/unoipset.hxx> |
| #include <editeng/memberids.hrc> |
| #include <svx/unoshape.hxx> |
| #include <svx/xflbstit.hxx> |
| #include <svx/xflbmtit.hxx> |
| #include <swunohelper.hxx> |
| #include <svx/xbtmpit.hxx> |
| |
| #include <boost/shared_ptr.hpp> |
| |
| #include "ccoll.hxx" |
| #include "unocore.hrc" |
| |
| #include <set> |
| |
| #define STYLE_FAMILY_COUNT 5 // we have 5 style families |
| #define TYPE_BOOL 0 |
| #define TYPE_SIZE 1 |
| #define TYPE_BRUSH 2 |
| #define TYPE_ULSPACE 3 |
| #define TYPE_SHADOW 4 |
| #define TYPE_LRSPACE 5 |
| #define TYPE_BOX 6 |
| |
| const unsigned short aStyleByIndex[] = |
| { |
| SFX_STYLE_FAMILY_CHAR, |
| SFX_STYLE_FAMILY_PARA, |
| SFX_STYLE_FAMILY_PAGE , |
| SFX_STYLE_FAMILY_FRAME , |
| SFX_STYLE_FAMILY_PSEUDO |
| }; |
| |
| // Already implemented autostyle families: 3 |
| #define AUTOSTYLE_FAMILY_COUNT 3 |
| const IStyleAccess::SwAutoStyleFamily aAutoStyleByIndex[] = |
| { |
| IStyleAccess::AUTO_STYLE_CHAR, |
| IStyleAccess::AUTO_STYLE_RUBY, |
| IStyleAccess::AUTO_STYLE_PARA |
| }; |
| |
| using namespace ::com::sun::star; |
| using ::rtl::OUString; |
| |
| /****************************************************************************** |
| * |
| ******************************************************************************/ |
| |
| SwGetPoolIdFromName lcl_GetSwEnumFromSfxEnum ( SfxStyleFamily eFamily ) |
| { |
| switch ( eFamily ) |
| { |
| case SFX_STYLE_FAMILY_CHAR: |
| return nsSwGetPoolIdFromName::GET_POOLID_CHRFMT; |
| case SFX_STYLE_FAMILY_PARA: |
| return nsSwGetPoolIdFromName::GET_POOLID_TXTCOLL; |
| case SFX_STYLE_FAMILY_FRAME: |
| return nsSwGetPoolIdFromName::GET_POOLID_FRMFMT; |
| case SFX_STYLE_FAMILY_PAGE: |
| return nsSwGetPoolIdFromName::GET_POOLID_PAGEDESC; |
| case SFX_STYLE_FAMILY_PSEUDO: |
| return nsSwGetPoolIdFromName::GET_POOLID_NUMRULE; |
| default: |
| DBG_ASSERT(sal_False, "someone asking for all styles in unostyle.cxx!" ); |
| return nsSwGetPoolIdFromName::GET_POOLID_CHRFMT; |
| } |
| } |
| |
| class SwAutoStylesEnumImpl |
| { |
| std::vector<SfxItemSet_Pointer_t> mAutoStyles; |
| std::vector<SfxItemSet_Pointer_t>::iterator aIter; |
| SwDoc* pDoc; |
| IStyleAccess::SwAutoStyleFamily eFamily; |
| public: |
| SwAutoStylesEnumImpl( SwDoc* pInitDoc, IStyleAccess::SwAutoStyleFamily eFam ); |
| ::sal_Bool hasMoreElements() { return aIter != mAutoStyles.end(); } |
| SfxItemSet_Pointer_t nextElement() { return *(aIter++); } |
| IStyleAccess::SwAutoStyleFamily getFamily() const { return eFamily; } |
| SwDoc* getDoc() const { return pDoc; } |
| }; |
| |
| |
| /****************************************************************** |
| * SwXStyleFamilies |
| ******************************************************************/ |
| /* -----------------------------06.04.00 11:24-------------------------------- |
| |
| ---------------------------------------------------------------------------*/ |
| OUString SwXStyleFamilies::getImplementationName(void) throw( uno::RuntimeException ) |
| { |
| return C2U("SwXStyleFamilies"); |
| } |
| /* -----------------------------06.04.00 11:24-------------------------------- |
| |
| ---------------------------------------------------------------------------*/ |
| sal_Bool SwXStyleFamilies::supportsService(const OUString& rServiceName) throw( uno::RuntimeException ) |
| { |
| return C2U("com.sun.star.style.StyleFamilies") == rServiceName; |
| } |
| /* -----------------------------06.04.00 11:24-------------------------------- |
| |
| ---------------------------------------------------------------------------*/ |
| uno::Sequence< OUString > SwXStyleFamilies::getSupportedServiceNames(void) throw( uno::RuntimeException ) |
| { |
| uno::Sequence< OUString > aRet(1); |
| OUString* pArray = aRet.getArray(); |
| pArray[0] = C2U("com.sun.star.style.StyleFamilies"); |
| return aRet; |
| } |
| /*-- 16.12.98 15:13:26--------------------------------------------------- |
| |
| -----------------------------------------------------------------------*/ |
| SwXStyleFamilies::SwXStyleFamilies(SwDocShell& rDocShell) : |
| SwUnoCollection(rDocShell.GetDoc()), |
| pDocShell(&rDocShell), |
| pxCharStyles(0), |
| pxParaStyles(0), |
| pxFrameStyles(0), |
| pxPageStyles(0), |
| pxNumberingStyles(0) |
| { |
| |
| } |
| /*-- 16.12.98 15:13:26--------------------------------------------------- |
| |
| -----------------------------------------------------------------------*/ |
| SwXStyleFamilies::~SwXStyleFamilies() |
| { |
| delete pxCharStyles; |
| delete pxParaStyles; |
| delete pxFrameStyles; |
| delete pxPageStyles; |
| delete pxNumberingStyles; |
| } |
| /*-- 21.12.98 12:05:22--------------------------------------------------- |
| |
| -----------------------------------------------------------------------*/ |
| uno::Any SAL_CALL SwXStyleFamilies::getByName(const OUString& Name) |
| throw( |
| container::NoSuchElementException, |
| lang::WrappedTargetException, |
| uno::RuntimeException ) |
| { |
| vos::OGuard aGuard(Application::GetSolarMutex()); |
| // der Index kommt aus const unsigned short aStyleByIndex[] = |
| uno::Any aRet; |
| if(!IsValid()) |
| throw uno::RuntimeException(); |
| if(Name.compareToAscii("CharacterStyles") == 0 ) |
| aRet = getByIndex(0); |
| else if(Name.compareToAscii("ParagraphStyles") == 0) |
| aRet = getByIndex(1); |
| else if(Name.compareToAscii("FrameStyles") == 0 ) |
| aRet = getByIndex(3); |
| else if(Name.compareToAscii("PageStyles") == 0 ) |
| aRet = getByIndex(2); |
| else if(Name.compareToAscii("NumberingStyles") == 0 ) |
| aRet = getByIndex(4); |
| else |
| throw container::NoSuchElementException(); |
| return aRet; |
| } |
| /*-- 21.12.98 12:05:22--------------------------------------------------- |
| |
| -----------------------------------------------------------------------*/ |
| uno::Sequence< OUString > SwXStyleFamilies::getElementNames(void) throw( uno::RuntimeException ) |
| { |
| uno::Sequence< OUString > aNames(STYLE_FAMILY_COUNT); |
| OUString* pNames = aNames.getArray(); |
| pNames[0] = C2U("CharacterStyles"); |
| pNames[1] = C2U("ParagraphStyles"); |
| pNames[2] = C2U("FrameStyles"); |
| pNames[3] = C2U("PageStyles"); |
| pNames[4] = C2U("NumberingStyles"); |
| return aNames; |
| } |
| /*-- 21.12.98 12:05:22--------------------------------------------------- |
| |
| -----------------------------------------------------------------------*/ |
| sal_Bool SwXStyleFamilies::hasByName(const OUString& Name) throw( uno::RuntimeException ) |
| { |
| if( Name.compareToAscii("CharacterStyles") == 0 || |
| Name.compareToAscii("ParagraphStyles") == 0 || |
| Name.compareToAscii("FrameStyles") == 0 || |
| Name.compareToAscii("PageStyles") == 0 || |
| Name.compareToAscii("NumberingStyles") == 0 ) |
| return sal_True; |
| else |
| return sal_False; |
| } |
| /*-- 16.12.98 15:13:27--------------------------------------------------- |
| |
| -----------------------------------------------------------------------*/ |
| sal_Int32 SwXStyleFamilies::getCount(void) throw( uno::RuntimeException ) |
| { |
| return STYLE_FAMILY_COUNT; |
| } |
| /*-- 16.12.98 15:13:27--------------------------------------------------- |
| |
| -----------------------------------------------------------------------*/ |
| uno::Any SwXStyleFamilies::getByIndex(sal_Int32 nIndex) |
| throw( lang::IndexOutOfBoundsException, lang::WrappedTargetException, uno::RuntimeException ) |
| { |
| vos::OGuard aGuard(Application::GetSolarMutex()); |
| uno::Any aRet; |
| if(nIndex < 0 || nIndex >= STYLE_FAMILY_COUNT) |
| throw lang::IndexOutOfBoundsException(); |
| if(IsValid()) |
| { |
| uno::Reference< container::XNameContainer > aRef; |
| sal_uInt16 nType = aStyleByIndex[nIndex]; |
| switch( nType ) |
| { |
| case SFX_STYLE_FAMILY_CHAR: |
| { |
| if(!pxCharStyles) |
| { |
| ((SwXStyleFamilies*)this)->pxCharStyles = new uno::Reference< container::XNameContainer > (); |
| *pxCharStyles = new SwXStyleFamily(pDocShell, nType); |
| } |
| aRef = *pxCharStyles; |
| } |
| break; |
| case SFX_STYLE_FAMILY_PARA: |
| { |
| if(!pxParaStyles) |
| { |
| ((SwXStyleFamilies*)this)->pxParaStyles = new uno::Reference< container::XNameContainer > (); |
| *pxParaStyles = new SwXStyleFamily(pDocShell, nType); |
| } |
| aRef = *pxParaStyles; |
| } |
| break; |
| case SFX_STYLE_FAMILY_PAGE : |
| { |
| if(!pxPageStyles) |
| { |
| ((SwXStyleFamilies*)this)->pxPageStyles = new uno::Reference< container::XNameContainer > (); |
| *pxPageStyles = new SwXStyleFamily(pDocShell, nType); |
| } |
| aRef = *pxPageStyles; |
| } |
| break; |
| case SFX_STYLE_FAMILY_FRAME : |
| { |
| if(!pxFrameStyles) |
| { |
| ((SwXStyleFamilies*)this)->pxFrameStyles = new uno::Reference< container::XNameContainer > (); |
| *pxFrameStyles = new SwXStyleFamily(pDocShell, nType); |
| } |
| aRef = *pxFrameStyles; |
| } |
| break; |
| case SFX_STYLE_FAMILY_PSEUDO: |
| { |
| if(!pxNumberingStyles) |
| { |
| ((SwXStyleFamilies*)this)->pxNumberingStyles = new uno::Reference< container::XNameContainer > (); |
| *pxNumberingStyles = new SwXStyleFamily(pDocShell, nType); |
| } |
| aRef = *pxNumberingStyles; |
| } |
| break; |
| } |
| aRet.setValue(&aRef, ::getCppuType((const uno::Reference<container::XNameContainer>*)0)); |
| } |
| else |
| throw uno::RuntimeException(); |
| return aRet; |
| } |
| /*-- 16.12.98 15:13:27--------------------------------------------------- |
| |
| -----------------------------------------------------------------------*/ |
| uno::Type SwXStyleFamilies::getElementType(void) |
| throw( uno::RuntimeException ) |
| { |
| return ::getCppuType((const uno::Reference<container::XNameContainer>*)0); |
| |
| } |
| /*-- 16.12.98 15:13:28--------------------------------------------------- |
| |
| -----------------------------------------------------------------------*/ |
| sal_Bool SwXStyleFamilies::hasElements(void) throw( uno::RuntimeException ) |
| { |
| return sal_True; |
| } |
| /*-- 16.12.98 15:13:28--------------------------------------------------- |
| |
| -----------------------------------------------------------------------*/ |
| void SwXStyleFamilies::loadStylesFromURL(const OUString& rURL, |
| const uno::Sequence< beans::PropertyValue >& aOptions) |
| throw( io::IOException, uno::RuntimeException ) |
| { |
| vos::OGuard aGuard(Application::GetSolarMutex()); |
| sal_Bool bLoadStyleText = sal_True; |
| sal_Bool bLoadStylePage = sal_True; |
| sal_Bool bLoadStyleOverwrite = sal_True; |
| sal_Bool bLoadStyleNumbering = sal_True; |
| sal_Bool bLoadStyleFrame = sal_True; |
| if(IsValid() && rURL.getLength()) |
| { |
| const uno::Any* pVal; |
| int nCount = aOptions.getLength(); |
| const beans::PropertyValue* pArray = aOptions.getConstArray(); |
| for(int i = 0; i < nCount; i++) |
| if( ( pVal = &pArray[i].Value)->getValueType() == |
| ::getBooleanCppuType() ) |
| { |
| String sName = pArray[i].Name; |
| sal_Bool bVal = *(sal_Bool*)pVal->getValue(); |
| if( sName.EqualsAscii(SW_PROP_NAME_STR(UNO_NAME_OVERWRITE_STYLES ))) |
| bLoadStyleOverwrite = bVal; |
| else if( sName.EqualsAscii(SW_PROP_NAME_STR(UNO_NAME_LOAD_NUMBERING_STYLES ))) |
| bLoadStyleNumbering = bVal; |
| else if( sName.EqualsAscii(SW_PROP_NAME_STR(UNO_NAME_LOAD_PAGE_STYLES ))) |
| bLoadStylePage = bVal; |
| else if( sName.EqualsAscii(SW_PROP_NAME_STR(UNO_NAME_LOAD_FRAME_STYLES ))) |
| bLoadStyleFrame = bVal; |
| else if( sName.EqualsAscii(SW_PROP_NAME_STR(UNO_NAME_LOAD_TEXT_STYLES ))) |
| bLoadStyleText = bVal; |
| } |
| |
| SwgReaderOption aOpt; |
| aOpt.SetFrmFmts( bLoadStyleFrame ); |
| aOpt.SetTxtFmts( bLoadStyleText ); |
| aOpt.SetPageDescs( bLoadStylePage ); |
| aOpt.SetNumRules( bLoadStyleNumbering ); |
| aOpt.SetMerge( !bLoadStyleOverwrite ); |
| |
| sal_uLong nErr = pDocShell->LoadStylesFromFile( rURL, aOpt, sal_True ); |
| if( nErr ) |
| throw io::IOException(); |
| } |
| else |
| throw uno::RuntimeException(); |
| } |
| /*-- 16.12.98 15:13:28--------------------------------------------------- |
| |
| -----------------------------------------------------------------------*/ |
| uno::Sequence< beans::PropertyValue > SwXStyleFamilies::getStyleLoaderOptions(void) |
| throw( uno::RuntimeException ) |
| { |
| vos::OGuard aGuard(Application::GetSolarMutex()); |
| uno::Sequence< beans::PropertyValue > aSeq(5); |
| beans::PropertyValue* pArray = aSeq.getArray(); |
| uno::Any aVal; |
| sal_Bool bTemp = sal_True; |
| aVal.setValue(&bTemp, ::getCppuBooleanType()); |
| pArray[0] = beans::PropertyValue(C2U(SW_PROP_NAME_STR(UNO_NAME_LOAD_TEXT_STYLES)), -1, aVal, beans::PropertyState_DIRECT_VALUE); |
| aVal.setValue(&bTemp, ::getCppuBooleanType()); |
| pArray[1] = beans::PropertyValue(C2U(SW_PROP_NAME_STR(UNO_NAME_LOAD_FRAME_STYLES)), -1, aVal, beans::PropertyState_DIRECT_VALUE); |
| aVal.setValue(&bTemp, ::getCppuBooleanType()); |
| pArray[2] = beans::PropertyValue(C2U(SW_PROP_NAME_STR(UNO_NAME_LOAD_PAGE_STYLES)), -1, aVal, beans::PropertyState_DIRECT_VALUE); |
| aVal.setValue(&bTemp, ::getCppuBooleanType()); |
| pArray[3] = beans::PropertyValue(C2U(SW_PROP_NAME_STR(UNO_NAME_LOAD_NUMBERING_STYLES)), -1, aVal, beans::PropertyState_DIRECT_VALUE); |
| aVal.setValue(&bTemp, ::getCppuBooleanType()); |
| pArray[4] = beans::PropertyValue(C2U(SW_PROP_NAME_STR(UNO_NAME_OVERWRITE_STYLES)), -1, aVal, beans::PropertyState_DIRECT_VALUE); |
| return aSeq; |
| } |
| |
| /****************************************************************** |
| * SwXStyleFamily |
| ******************************************************************/ |
| /* -----------------------------06.04.00 11:24-------------------------------- |
| |
| ---------------------------------------------------------------------------*/ |
| OUString SwXStyleFamily::getImplementationName(void) throw( uno::RuntimeException ) |
| { |
| return C2U("SwXStyleFamily"); |
| } |
| /* -----------------------------06.04.00 11:24-------------------------------- |
| |
| ---------------------------------------------------------------------------*/ |
| sal_Bool SwXStyleFamily::supportsService(const OUString& rServiceName) throw( uno::RuntimeException ) |
| { |
| return C2U("com.sun.star.style.StyleFamily") == rServiceName; |
| } |
| /* -----------------------------06.04.00 11:24-------------------------------- |
| |
| ---------------------------------------------------------------------------*/ |
| uno::Sequence< OUString > SwXStyleFamily::getSupportedServiceNames(void) throw( uno::RuntimeException ) |
| { |
| uno::Sequence< OUString > aRet(1); |
| OUString* pArray = aRet.getArray(); |
| pArray[0] = C2U("com.sun.star.style.StyleFamily"); |
| return aRet; |
| } |
| /*-- 16.12.98 16:03:56--------------------------------------------------- |
| |
| -----------------------------------------------------------------------*/ |
| SwXStyleFamily::SwXStyleFamily(SwDocShell* pDocSh, sal_uInt16 nFamily) : |
| eFamily((SfxStyleFamily)nFamily), |
| pBasePool(pDocSh->GetStyleSheetPool()), |
| pDocShell(pDocSh) |
| { |
| /* switch( nFamily ) |
| { |
| case SFX_STYLE_FAMILY_CHAR: |
| _pPropMap = aSwMapProvider.GetPropertyMap(PROPERTY_MAP_CHAR_STYLE); |
| break; |
| case SFX_STYLE_FAMILY_PARA: |
| _pPropMap = aSwMapProvider.GetPropertyMap(PROPERTY_MAP_PARA_STYLE); |
| break; |
| case SFX_STYLE_FAMILY_PAGE: |
| _pPropMap = aSwMapProvider.GetPropertyMap(PROPERTY_MAP_PAGE_STYLE); |
| break; |
| case SFX_STYLE_FAMILY_FRAME: |
| _pPropMap = aSwMapProvider.GetPropertyMap(PROPERTY_MAP_FRAME_STYLE); |
| break; |
| case SFX_STYLE_FAMILY_PSEUDO: |
| _pPropMap = aSwMapProvider.GetPropertyMap(PROPERTY_MAP_NUM_STYLE); |
| break; |
| }*/ |
| StartListening(*pBasePool); |
| } |
| /*-- 16.12.98 16:03:56--------------------------------------------------- |
| |
| -----------------------------------------------------------------------*/ |
| SwXStyleFamily::~SwXStyleFamily() |
| { |
| |
| } |
| sal_Int32 lcl_GetCountOrName ( const SwDoc &rDoc, SfxStyleFamily eFamily, String *pString, sal_uInt16 nIndex = USHRT_MAX ) |
| { |
| sal_Int32 nCount = 0; |
| switch( eFamily ) |
| { |
| case SFX_STYLE_FAMILY_CHAR: |
| { |
| sal_uInt16 nBaseCount = RES_POOLCHR_HTML_END - RES_POOLCHR_HTML_BEGIN + |
| RES_POOLCHR_NORMAL_END - RES_POOLCHR_NORMAL_BEGIN; |
| nIndex = nIndex - nBaseCount; |
| const sal_uInt16 nArrLen = rDoc.GetCharFmts()->Count(); |
| for( sal_uInt16 i = 0; i < nArrLen; i++ ) |
| { |
| SwCharFmt* pFmt = (*rDoc.GetCharFmts())[ i ]; |
| if( pFmt->IsDefault() && pFmt != rDoc.GetDfltCharFmt() ) |
| continue; |
| if ( IsPoolUserFmt ( pFmt->GetPoolFmtId() ) ) |
| { |
| if ( nIndex == nCount ) |
| { |
| // the default character format needs to be set to "Default!" |
| if(rDoc.GetDfltCharFmt() == pFmt) |
| SwStyleNameMapper::FillUIName( |
| RES_POOLCOLL_STANDARD, *pString ); |
| else |
| *pString = pFmt->GetName(); |
| break; |
| } |
| nCount++; |
| } |
| } |
| nCount += nBaseCount; |
| } |
| break; |
| case SFX_STYLE_FAMILY_PARA: |
| { |
| sal_uInt16 nBaseCount = RES_POOLCOLL_HTML_END - RES_POOLCOLL_HTML_BEGIN + |
| RES_POOLCOLL_DOC_END - RES_POOLCOLL_DOC_BEGIN + |
| RES_POOLCOLL_REGISTER_END - RES_POOLCOLL_REGISTER_BEGIN + |
| RES_POOLCOLL_EXTRA_END - RES_POOLCOLL_EXTRA_BEGIN + |
| RES_POOLCOLL_LISTS_END - RES_POOLCOLL_LISTS_BEGIN + |
| RES_POOLCOLL_TEXT_END - RES_POOLCOLL_TEXT_BEGIN; |
| nIndex = nIndex - nBaseCount; |
| const sal_uInt16 nArrLen = rDoc.GetTxtFmtColls()->Count(); |
| for ( sal_uInt16 i = 0; i < nArrLen; i++ ) |
| { |
| SwTxtFmtColl * pColl = (*rDoc.GetTxtFmtColls())[i]; |
| if ( pColl->IsDefault() ) |
| continue; |
| if ( IsPoolUserFmt ( pColl->GetPoolFmtId() ) ) |
| { |
| if ( nIndex == nCount ) |
| { |
| *pString = pColl->GetName(); |
| break; |
| } |
| nCount++; |
| } |
| } |
| nCount += nBaseCount; |
| } |
| break; |
| case SFX_STYLE_FAMILY_FRAME: |
| { |
| sal_uInt16 nBaseCount = RES_POOLFRM_END - RES_POOLFRM_BEGIN; |
| nIndex = nIndex - nBaseCount; |
| const sal_uInt16 nArrLen = rDoc.GetFrmFmts()->Count(); |
| for( sal_uInt16 i = 0; i < nArrLen; i++ ) |
| { |
| SwFrmFmt* pFmt = (*rDoc.GetFrmFmts())[ i ]; |
| if(pFmt->IsDefault() || pFmt->IsAuto()) |
| continue; |
| if ( IsPoolUserFmt ( pFmt->GetPoolFmtId() ) ) |
| { |
| if ( nIndex == nCount ) |
| { |
| *pString = pFmt->GetName(); |
| break; |
| } |
| nCount++; |
| } |
| } |
| nCount += nBaseCount; |
| } |
| break; |
| case SFX_STYLE_FAMILY_PAGE: |
| { |
| sal_uInt16 nBaseCount = RES_POOLPAGE_END - RES_POOLPAGE_BEGIN; |
| nIndex = nIndex - nBaseCount; |
| const sal_uInt16 nArrLen = rDoc.GetPageDescCnt(); |
| for(sal_uInt16 i = 0; i < nArrLen; ++i) |
| { |
| const SwPageDesc& rDesc = rDoc.GetPageDesc(i); |
| |
| /*if(rDesc.IsDefault() || rDesc.IsAuto()) |
| continue;*/ |
| if ( IsPoolUserFmt ( rDesc.GetPoolFmtId() ) ) |
| { |
| if ( nIndex == nCount ) |
| { |
| *pString = rDesc.GetName(); |
| break; |
| } |
| nCount++; |
| } |
| } |
| nCount += nBaseCount; |
| } |
| break; |
| case SFX_STYLE_FAMILY_PSEUDO: |
| { |
| sal_uInt16 nBaseCount = RES_POOLNUMRULE_END - RES_POOLNUMRULE_BEGIN; |
| nIndex = nIndex - nBaseCount; |
| const SwNumRuleTbl& rNumTbl = rDoc.GetNumRuleTbl(); |
| for(sal_uInt16 i = 0; i < rNumTbl.Count(); ++i) |
| { |
| const SwNumRule& rRule = *rNumTbl[ i ]; |
| if( rRule.IsAutoRule() ) |
| continue; |
| if ( IsPoolUserFmt ( rRule.GetPoolFmtId() ) ) |
| { |
| if ( nIndex == nCount ) |
| { |
| *pString = rRule.GetName(); |
| break; |
| } |
| nCount++; |
| } |
| } |
| nCount += nBaseCount; |
| } |
| break; |
| |
| default: |
| ; |
| } |
| return nCount; |
| } |
| /*-- 16.12.98 16:03:57--------------------------------------------------- |
| |
| -----------------------------------------------------------------------*/ |
| sal_Int32 SwXStyleFamily::getCount(void) throw( uno::RuntimeException ) |
| { |
| vos::OGuard aGuard(Application::GetSolarMutex()); |
| return lcl_GetCountOrName ( *pDocShell->GetDoc(), eFamily, NULL ); |
| } |
| /*-- 16.12.98 16:03:57--------------------------------------------------- |
| |
| -----------------------------------------------------------------------*/ |
| uno::Any SwXStyleFamily::getByIndex(sal_Int32 nTempIndex) |
| throw( lang::IndexOutOfBoundsException, lang::WrappedTargetException, uno::RuntimeException ) |
| { |
| vos::OGuard aGuard(Application::GetSolarMutex()); |
| uno::Any aRet; |
| if ( nTempIndex >= 0 && nTempIndex < USHRT_MAX ) |
| { |
| sal_uInt16 nIndex = static_cast < sal_uInt16 > ( nTempIndex ); |
| if(pBasePool) |
| { |
| String sStyleName; |
| switch( eFamily ) |
| { |
| case SFX_STYLE_FAMILY_CHAR: |
| { |
| if ( nIndex < ( RES_POOLCHR_NORMAL_END - RES_POOLCHR_NORMAL_BEGIN ) ) |
| SwStyleNameMapper::FillUIName ( static_cast< sal_uInt16 >(RES_POOLCHR_NORMAL_BEGIN + nIndex), sStyleName ); |
| else if ( nIndex < ( RES_POOLCHR_HTML_END - RES_POOLCHR_HTML_BEGIN + |
| RES_POOLCHR_NORMAL_END - RES_POOLCHR_NORMAL_BEGIN ) ) |
| SwStyleNameMapper::FillUIName ( RES_POOLCHR_HTML_BEGIN |
| - RES_POOLCHR_NORMAL_END + RES_POOLCHR_NORMAL_BEGIN |
| + nIndex, sStyleName ); |
| } |
| break; |
| case SFX_STYLE_FAMILY_PARA: |
| { |
| if ( nIndex < ( RES_POOLCOLL_TEXT_END - RES_POOLCOLL_TEXT_BEGIN ) ) |
| SwStyleNameMapper::FillUIName ( static_cast< sal_uInt16 >(RES_POOLCOLL_TEXT_BEGIN + nIndex), sStyleName ); |
| else if ( nIndex < ( RES_POOLCOLL_LISTS_END - RES_POOLCOLL_LISTS_BEGIN + |
| RES_POOLCOLL_TEXT_END - RES_POOLCOLL_TEXT_BEGIN ) ) |
| SwStyleNameMapper::FillUIName ( RES_POOLCOLL_LISTS_BEGIN |
| - RES_POOLCOLL_TEXT_END + RES_POOLCOLL_TEXT_BEGIN |
| + nIndex, sStyleName ); |
| else if ( nIndex < ( RES_POOLCOLL_EXTRA_END - RES_POOLCOLL_EXTRA_BEGIN + |
| RES_POOLCOLL_LISTS_END - RES_POOLCOLL_LISTS_BEGIN + |
| RES_POOLCOLL_TEXT_END - RES_POOLCOLL_TEXT_BEGIN ) ) |
| SwStyleNameMapper::FillUIName ( static_cast< sal_uInt16 >(RES_POOLCOLL_EXTRA_BEGIN |
| - RES_POOLCOLL_LISTS_END + RES_POOLCOLL_LISTS_BEGIN |
| - RES_POOLCOLL_TEXT_END + RES_POOLCOLL_TEXT_BEGIN |
| + nIndex), sStyleName ); |
| else if ( nIndex < ( RES_POOLCOLL_REGISTER_END - RES_POOLCOLL_REGISTER_BEGIN + |
| RES_POOLCOLL_EXTRA_END - RES_POOLCOLL_EXTRA_BEGIN + |
| RES_POOLCOLL_LISTS_END - RES_POOLCOLL_LISTS_BEGIN + |
| RES_POOLCOLL_TEXT_END - RES_POOLCOLL_TEXT_BEGIN ) ) |
| SwStyleNameMapper::FillUIName ( static_cast< sal_uInt16 >(RES_POOLCOLL_REGISTER_BEGIN |
| - RES_POOLCOLL_EXTRA_END + RES_POOLCOLL_EXTRA_BEGIN |
| - RES_POOLCOLL_LISTS_END + RES_POOLCOLL_LISTS_BEGIN |
| - RES_POOLCOLL_TEXT_END + RES_POOLCOLL_TEXT_BEGIN |
| + nIndex), sStyleName ); |
| else if ( nIndex < ( RES_POOLCOLL_DOC_END - RES_POOLCOLL_DOC_BEGIN + |
| RES_POOLCOLL_REGISTER_END - RES_POOLCOLL_REGISTER_BEGIN + |
| RES_POOLCOLL_EXTRA_END - RES_POOLCOLL_EXTRA_BEGIN + |
| RES_POOLCOLL_LISTS_END - RES_POOLCOLL_LISTS_BEGIN + |
| RES_POOLCOLL_TEXT_END - RES_POOLCOLL_TEXT_BEGIN ) ) |
| SwStyleNameMapper::FillUIName ( static_cast< sal_uInt16 >(RES_POOLCOLL_DOC_BEGIN |
| - RES_POOLCOLL_REGISTER_END + RES_POOLCOLL_REGISTER_BEGIN |
| - RES_POOLCOLL_EXTRA_END + RES_POOLCOLL_EXTRA_BEGIN |
| - RES_POOLCOLL_LISTS_END + RES_POOLCOLL_LISTS_BEGIN |
| - RES_POOLCOLL_TEXT_END + RES_POOLCOLL_TEXT_BEGIN |
| + nIndex), sStyleName ); |
| else if ( nIndex < ( RES_POOLCOLL_HTML_END - RES_POOLCOLL_HTML_BEGIN + |
| RES_POOLCOLL_DOC_END - RES_POOLCOLL_DOC_BEGIN + |
| RES_POOLCOLL_REGISTER_END - RES_POOLCOLL_REGISTER_BEGIN + |
| RES_POOLCOLL_EXTRA_END - RES_POOLCOLL_EXTRA_BEGIN + |
| RES_POOLCOLL_LISTS_END - RES_POOLCOLL_LISTS_BEGIN + |
| RES_POOLCOLL_TEXT_END - RES_POOLCOLL_TEXT_BEGIN ) ) |
| SwStyleNameMapper::FillUIName ( static_cast< sal_uInt16 >(RES_POOLCOLL_HTML_BEGIN |
| - RES_POOLCOLL_DOC_END + RES_POOLCOLL_DOC_BEGIN |
| - RES_POOLCOLL_REGISTER_END + RES_POOLCOLL_REGISTER_BEGIN |
| - RES_POOLCOLL_EXTRA_END + RES_POOLCOLL_EXTRA_BEGIN |
| - RES_POOLCOLL_LISTS_END + RES_POOLCOLL_LISTS_BEGIN |
| - RES_POOLCOLL_TEXT_END + RES_POOLCOLL_TEXT_BEGIN |
| + nIndex), sStyleName ); |
| } |
| break; |
| case SFX_STYLE_FAMILY_FRAME: |
| { |
| if ( nIndex < ( RES_POOLFRM_END - RES_POOLFRM_BEGIN ) ) |
| { |
| SwStyleNameMapper::FillUIName ( static_cast< sal_uInt16 >(RES_POOLFRM_BEGIN + nIndex), sStyleName ); |
| } |
| } |
| break; |
| case SFX_STYLE_FAMILY_PAGE: |
| { |
| if ( nIndex < ( RES_POOLPAGE_END - RES_POOLPAGE_BEGIN ) ) |
| { |
| SwStyleNameMapper::FillUIName ( static_cast< sal_uInt16 >(RES_POOLPAGE_BEGIN + nIndex), sStyleName ); |
| } |
| } |
| break; |
| case SFX_STYLE_FAMILY_PSEUDO: |
| { |
| if ( nIndex < ( RES_POOLNUMRULE_END - RES_POOLNUMRULE_BEGIN ) ) |
| { |
| SwStyleNameMapper::FillUIName ( static_cast< sal_uInt16 >(RES_POOLNUMRULE_BEGIN + nIndex), sStyleName ); |
| } |
| } |
| break; |
| |
| default: |
| ; |
| } |
| if ( !sStyleName.Len() ) |
| lcl_GetCountOrName ( *pDocShell->GetDoc(), eFamily, &sStyleName, nIndex ); |
| |
| if ( sStyleName.Len() ) |
| { |
| SfxStyleSheetBase* pBase = pBasePool->Find( sStyleName, eFamily ); |
| if(pBase) |
| { |
| uno::Reference< style::XStyle > xStyle = _FindStyle(sStyleName); |
| if(!xStyle.is()) |
| { |
| xStyle = eFamily == SFX_STYLE_FAMILY_PAGE ? |
| new SwXPageStyle(*pBasePool, pDocShell, eFamily, sStyleName) : |
| eFamily == SFX_STYLE_FAMILY_FRAME ? |
| new SwXFrameStyle(*pBasePool, pDocShell->GetDoc(), pBase->GetName()): |
| new SwXStyle(*pBasePool, eFamily, pDocShell->GetDoc(), sStyleName); |
| } |
| aRet.setValue(&xStyle, ::getCppuType((uno::Reference<style::XStyle>*)0)); |
| } |
| else |
| throw container::NoSuchElementException(); |
| } |
| else |
| throw lang::IndexOutOfBoundsException(); |
| } |
| else |
| throw uno::RuntimeException(); |
| } |
| else |
| throw lang::IndexOutOfBoundsException(); |
| |
| return aRet; |
| } |
| /*-- 16.12.98 16:03:57--------------------------------------------------- |
| |
| -----------------------------------------------------------------------*/ |
| uno::Any SwXStyleFamily::getByName(const OUString& rName) |
| throw( container::NoSuchElementException, lang::WrappedTargetException, uno::RuntimeException ) |
| { |
| vos::OGuard aGuard(Application::GetSolarMutex()); |
| uno::Any aRet; |
| String sStyleName; |
| SwStyleNameMapper::FillUIName(rName, sStyleName, lcl_GetSwEnumFromSfxEnum ( eFamily ), sal_True ); |
| if(pBasePool) |
| { |
| pBasePool->SetSearchMask(eFamily, SFXSTYLEBIT_ALL ); |
| SfxStyleSheetBase* pBase = pBasePool->Find(sStyleName); |
| if(pBase) |
| { |
| uno::Reference< style::XStyle > xStyle = _FindStyle(sStyleName); |
| if(!xStyle.is()) |
| { |
| xStyle = eFamily == SFX_STYLE_FAMILY_PAGE ? |
| new SwXPageStyle(*pBasePool, pDocShell, eFamily, sStyleName) : |
| eFamily == SFX_STYLE_FAMILY_FRAME ? |
| new SwXFrameStyle(*pBasePool, pDocShell->GetDoc(), pBase->GetName()): |
| new SwXStyle(*pBasePool, eFamily, pDocShell->GetDoc(), sStyleName); |
| } |
| aRet.setValue(&xStyle, ::getCppuType((uno::Reference<style::XStyle>*)0)); |
| } |
| else |
| throw container::NoSuchElementException(); |
| } |
| else |
| throw uno::RuntimeException(); |
| return aRet; |
| |
| } |
| /*-- 16.12.98 16:03:57--------------------------------------------------- |
| |
| -----------------------------------------------------------------------*/ |
| uno::Sequence< OUString > SwXStyleFamily::getElementNames(void) throw( uno::RuntimeException ) |
| { |
| vos::OGuard aGuard(Application::GetSolarMutex()); |
| uno::Sequence< OUString > aRet; |
| if(pBasePool) |
| { |
| SfxStyleSheetIteratorPtr pIterator = pBasePool->CreateIterator(eFamily, 0xffff); |
| sal_uInt16 nCount = pIterator->Count(); |
| aRet.realloc(nCount); |
| OUString* pArray = aRet.getArray(); |
| String aString; |
| for(sal_uInt16 i = 0; i < nCount; i++) |
| { |
| SwStyleNameMapper::FillProgName((*pIterator)[i]->GetName(), aString, lcl_GetSwEnumFromSfxEnum ( eFamily ), sal_True ); |
| pArray[i] = OUString ( aString ); |
| } |
| } |
| else |
| throw uno::RuntimeException(); |
| return aRet; |
| } |
| /*-- 16.12.98 16:03:57--------------------------------------------------- |
| |
| -----------------------------------------------------------------------*/ |
| sal_Bool SwXStyleFamily::hasByName(const OUString& rName) throw( uno::RuntimeException ) |
| { |
| vos::OGuard aGuard(Application::GetSolarMutex()); |
| sal_Bool bRet = sal_False; |
| if(pBasePool) |
| { |
| String sStyleName; |
| SwStyleNameMapper::FillUIName(rName, sStyleName, lcl_GetSwEnumFromSfxEnum ( eFamily ), sal_True ); |
| pBasePool->SetSearchMask(eFamily, SFXSTYLEBIT_ALL ); |
| SfxStyleSheetBase* pBase = pBasePool->Find(sStyleName); |
| bRet = 0 != pBase; |
| } |
| else |
| throw uno::RuntimeException(); |
| return bRet; |
| |
| } |
| /*-- 16.12.98 16:03:58--------------------------------------------------- |
| |
| -----------------------------------------------------------------------*/ |
| uno::Type SwXStyleFamily::getElementType(void) throw( uno::RuntimeException ) |
| { |
| return ::getCppuType((const uno::Reference<style::XStyle>*)0); |
| |
| } |
| /*-- 16.12.98 16:03:58--------------------------------------------------- |
| |
| -----------------------------------------------------------------------*/ |
| sal_Bool SwXStyleFamily::hasElements(void) throw( uno::RuntimeException ) |
| { |
| if(!pBasePool) |
| throw uno::RuntimeException(); |
| return sal_True; |
| } |
| /*-- 16.12.98 16:03:58--------------------------------------------------- |
| |
| -----------------------------------------------------------------------*/ |
| void SwXStyleFamily::insertByName(const OUString& rName, const uno::Any& rElement) |
| throw( lang::IllegalArgumentException, container::ElementExistException, lang::WrappedTargetException, uno::RuntimeException ) |
| { |
| vos::OGuard aGuard(Application::GetSolarMutex()); |
| if(pBasePool) |
| { |
| String sStyleName; |
| SwStyleNameMapper::FillUIName(rName, sStyleName, lcl_GetSwEnumFromSfxEnum ( eFamily ), sal_True); |
| pBasePool->SetSearchMask(eFamily, SFXSTYLEBIT_ALL ); |
| SfxStyleSheetBase* pBase = pBasePool->Find(sStyleName); |
| SfxStyleSheetBase* pUINameBase = pBasePool->Find( sStyleName ); |
| if(pBase || pUINameBase) |
| throw container::ElementExistException(); |
| else |
| { |
| if(rElement.getValueType().getTypeClass() == |
| uno::TypeClass_INTERFACE) |
| { |
| uno::Reference< uno::XInterface > * pxRef = |
| (uno::Reference< uno::XInterface > *)rElement.getValue(); |
| |
| uno::Reference<lang::XUnoTunnel> xStyleTunnel( *pxRef, uno::UNO_QUERY); |
| |
| SwXStyle* pNewStyle = 0; |
| if(xStyleTunnel.is()) |
| { |
| pNewStyle = reinterpret_cast< SwXStyle * >( |
| sal::static_int_cast< sal_IntPtr >( xStyleTunnel->getSomething( SwXStyle::getUnoTunnelId()) )); |
| } |
| if(!pNewStyle || !pNewStyle->IsDescriptor() || |
| pNewStyle->GetFamily() != eFamily) |
| throw lang::IllegalArgumentException(); |
| if(pNewStyle) |
| { |
| sal_uInt16 nMask = 0xffff; |
| if(eFamily == SFX_STYLE_FAMILY_PARA && !pNewStyle->IsConditional()) |
| nMask &= ~SWSTYLEBIT_CONDCOLL; |
| #if OSL_DEBUG_LEVEL > 1 |
| SfxStyleSheetBase& rNewBase = |
| #endif |
| pBasePool->Make(sStyleName, eFamily, nMask); |
| pNewStyle->SetDoc(pDocShell->GetDoc(), pBasePool); |
| pNewStyle->SetStyleName(sStyleName); |
| String sParentStyleName(pNewStyle->GetParentStyleName()); |
| if(sParentStyleName.Len()) |
| { |
| pBasePool->SetSearchMask(eFamily, SFXSTYLEBIT_ALL ); |
| SfxStyleSheetBase* pParentBase = pBasePool->Find(sParentStyleName); |
| if(pParentBase && pParentBase->GetFamily() == eFamily && |
| &pParentBase->GetPool() == pBasePool) |
| pBasePool->SetParent( eFamily, sStyleName, sParentStyleName ); |
| |
| } |
| #if OSL_DEBUG_LEVEL > 1 |
| (void)rNewBase; |
| #endif |
| //so, jetzt sollten noch die Properties des Descriptors angewandt werden |
| pNewStyle->ApplyDescriptorProperties(); |
| } |
| else |
| throw lang::IllegalArgumentException(); |
| } |
| else |
| throw lang::IllegalArgumentException(); |
| } |
| } |
| else |
| throw uno::RuntimeException(); |
| } |
| /*-- 16.12.98 16:03:59--------------------------------------------------- |
| |
| -----------------------------------------------------------------------*/ |
| void SwXStyleFamily::replaceByName(const OUString& rName, const uno::Any& rElement) |
| throw( lang::IllegalArgumentException, container::NoSuchElementException, lang::WrappedTargetException, uno::RuntimeException ) |
| { |
| vos::OGuard aGuard(Application::GetSolarMutex()); |
| if(pBasePool) |
| { |
| pBasePool->SetSearchMask(eFamily); |
| SfxStyleSheetBase* pBase = pBasePool->Find(rName); |
| //Ersetzung geht nur fuer benutzerdefinierte Styles |
| if(!pBase) |
| throw container::NoSuchElementException(); |
| if(!pBase->IsUserDefined()) |
| throw lang::IllegalArgumentException(); |
| //if theres an object available to this style then it must be invalidated |
| uno::Reference< style::XStyle > xStyle = _FindStyle(pBase->GetName()); |
| if(xStyle.is()) |
| { |
| uno::Reference<lang::XUnoTunnel> xTunnel( xStyle, uno::UNO_QUERY); |
| if(xTunnel.is()) |
| { |
| SwXStyle* pStyle = reinterpret_cast< SwXStyle * >( |
| sal::static_int_cast< sal_IntPtr >( xTunnel->getSomething( SwXStyle::getUnoTunnelId()) )); |
| pStyle->Invalidate(); |
| } |
| } |
| |
| pBasePool->Remove(pBase); |
| insertByName(rName, rElement); |
| } |
| else |
| throw uno::RuntimeException(); |
| } |
| /*-- 16.12.98 16:03:59--------------------------------------------------- |
| |
| -----------------------------------------------------------------------*/ |
| void SwXStyleFamily::removeByName(const OUString& rName) throw( container::NoSuchElementException, lang::WrappedTargetException, uno::RuntimeException ) |
| { |
| vos::OGuard aGuard(Application::GetSolarMutex()); |
| if(pBasePool) |
| { |
| pBasePool->SetSearchMask(eFamily, SFXSTYLEBIT_ALL ); |
| String aString; |
| SwStyleNameMapper::FillUIName(rName, aString, lcl_GetSwEnumFromSfxEnum ( eFamily ), sal_True ); |
| |
| SfxStyleSheetBase* pBase = pBasePool->Find( aString ); |
| if(pBase) |
| pBasePool->Remove(pBase); |
| else |
| throw container::NoSuchElementException(); |
| } |
| else |
| throw uno::RuntimeException(); |
| } |
| |
| uno::Reference< beans::XPropertySetInfo > SAL_CALL SwXStyleFamily::getPropertySetInfo( ) throw (uno::RuntimeException) |
| { |
| OSL_ENSURE( 0, "###unexpected!" ); |
| return uno::Reference< beans::XPropertySetInfo >(); |
| } |
| |
| void SAL_CALL SwXStyleFamily::setPropertyValue( const ::rtl::OUString&, const uno::Any& ) throw (beans::UnknownPropertyException, beans::PropertyVetoException, lang::IllegalArgumentException, lang::WrappedTargetException, uno::RuntimeException) |
| { |
| OSL_ENSURE( 0, "###unexpected!" ); |
| } |
| |
| uno::Any SAL_CALL SwXStyleFamily::getPropertyValue( const ::rtl::OUString& sPropertyName ) throw (beans::UnknownPropertyException, lang::WrappedTargetException, uno::RuntimeException) |
| { |
| uno::Any aRet; |
| |
| if ( sPropertyName.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM("DisplayName") ) ) |
| { |
| vos::OGuard aGuard(Application::GetSolarMutex()); |
| sal_uInt32 nResId = 0; |
| switch ( eFamily ) |
| { |
| case SFX_STYLE_FAMILY_CHAR: |
| nResId = STR_STYLE_FAMILY_CHARACTER; break; |
| case SFX_STYLE_FAMILY_PARA: |
| nResId = STR_STYLE_FAMILY_PARAGRAPH; break; |
| case SFX_STYLE_FAMILY_FRAME: |
| nResId = STR_STYLE_FAMILY_FRAME; break; |
| case SFX_STYLE_FAMILY_PAGE: |
| nResId = STR_STYLE_FAMILY_PAGE; break; |
| case SFX_STYLE_FAMILY_PSEUDO: |
| nResId = STR_STYLE_FAMILY_NUMBERING; break; |
| default: |
| OSL_ENSURE( 0, "SwXStyleFamily::getPropertyValue(): invalid family" ); |
| } |
| if ( nResId > 0 ) |
| { |
| OUString sDisplayName( String( SW_RES( nResId ) ) ); |
| aRet = uno::makeAny( sDisplayName ); |
| } |
| } |
| else |
| { |
| throw beans::UnknownPropertyException( OUString( RTL_CONSTASCII_USTRINGPARAM("unknown property: ") ) + sPropertyName, static_cast<OWeakObject *>(this) ); |
| } |
| |
| return aRet; |
| } |
| |
| void SAL_CALL SwXStyleFamily::addPropertyChangeListener( const ::rtl::OUString&, const uno::Reference< beans::XPropertyChangeListener >& ) throw (beans::UnknownPropertyException, lang::WrappedTargetException, uno::RuntimeException) |
| { |
| OSL_ENSURE( 0, "###unexpected!" ); |
| } |
| |
| void SAL_CALL SwXStyleFamily::removePropertyChangeListener( const ::rtl::OUString&, const uno::Reference< beans::XPropertyChangeListener >& ) throw (beans::UnknownPropertyException, lang::WrappedTargetException, uno::RuntimeException) |
| { |
| OSL_ENSURE( 0, "###unexpected!" ); |
| } |
| |
| void SAL_CALL SwXStyleFamily::addVetoableChangeListener( const ::rtl::OUString&, const uno::Reference< beans::XVetoableChangeListener >& ) throw (beans::UnknownPropertyException, lang::WrappedTargetException, uno::RuntimeException) |
| { |
| OSL_ENSURE( 0, "###unexpected!" ); |
| } |
| |
| void SAL_CALL SwXStyleFamily::removeVetoableChangeListener( const ::rtl::OUString&, const uno::Reference< beans::XVetoableChangeListener >& ) throw (beans::UnknownPropertyException, lang::WrappedTargetException, uno::RuntimeException) |
| { |
| OSL_ENSURE( 0, "###unexpected!" ); |
| } |
| |
| |
| /*-- 16.12.98 16:03:59--------------------------------------------------- |
| |
| -----------------------------------------------------------------------*/ |
| void SwXStyleFamily::Notify( SfxBroadcaster& rBC, const SfxHint& rHint ) |
| { |
| const SfxSimpleHint *pHint = dynamic_cast< const SfxSimpleHint* >( &rHint ); |
| if( pHint && ( pHint->GetId() & SFX_HINT_DYING ) ) |
| { |
| pBasePool = 0; |
| pDocShell = 0; |
| EndListening(rBC); |
| } |
| } |
| /*-- 16.12.98 16:03:59--------------------------------------------------- |
| |
| -----------------------------------------------------------------------*/ |
| SwXStyle* SwXStyleFamily::_FindStyle(const String& rStyleName)const |
| { |
| sal_uInt16 nLCount = pBasePool->GetListenerCount(); |
| SfxListener* pListener = 0; |
| for( sal_uInt16 i = 0; i < nLCount; i++) |
| { |
| pListener = pBasePool->GetListener( i ); |
| SwXStyle* pTempStyle = dynamic_cast<SwXStyle*>( pListener ); |
| if(pTempStyle && pTempStyle->GetFamily() == eFamily && pTempStyle->GetStyleName() == rStyleName) |
| { |
| return pTempStyle; |
| } |
| } |
| return 0; |
| } |
| /****************************************************************** |
| * |
| ******************************************************************/ |
| class SwStyleProperties_Impl |
| { |
| const PropertyEntryVector_t aPropertyEntries; |
| uno::Any** pAnyArr; |
| sal_uInt32 nArrLen; |
| |
| public: |
| SwStyleProperties_Impl(const SfxItemPropertyMap* _pMap); |
| ~SwStyleProperties_Impl(); |
| |
| sal_Bool SetProperty(const ::rtl::OUString& rName, uno::Any aVal); |
| sal_Bool GetProperty(const ::rtl::OUString& rName, uno::Any*& rpAny); |
| sal_Bool ClearProperty( const ::rtl::OUString& rPropertyName ); |
| void ClearAllProperties( ); |
| void GetProperty(const ::rtl::OUString &rPropertyName, const uno::Reference < beans::XPropertySet > &rxPropertySet, uno::Any& rAny ); |
| |
| const PropertyEntryVector_t& GetPropertyVector() const {return aPropertyEntries; } |
| |
| }; |
| //-------------------------------------------------------------------- |
| //-------------------------------------------------------------------- |
| SwStyleProperties_Impl::SwStyleProperties_Impl(const SfxItemPropertyMap* pMap) : |
| // _pMap(pMap), |
| aPropertyEntries( pMap->getPropertyEntries() ), |
| nArrLen(0) |
| { |
| nArrLen = aPropertyEntries.size(); |
| //const SfxItemPropertyMap* pTmp = _pMap; |
| |
| pAnyArr = new uno::Any* [nArrLen]; |
| for ( sal_uInt32 i =0 ; i < nArrLen; i++ ) |
| pAnyArr[i] = 0; |
| } |
| //-------------------------------------------------------------------- |
| //-------------------------------------------------------------------- |
| SwStyleProperties_Impl::~SwStyleProperties_Impl() |
| { |
| for ( sal_uInt16 i =0 ; i < nArrLen; i++ ) |
| delete pAnyArr[i]; |
| delete[] pAnyArr; |
| } |
| |
| //-------------------------------------------------------------------- |
| //-------------------------------------------------------------------- |
| sal_Bool SwStyleProperties_Impl::SetProperty(const ::rtl::OUString& rName, uno::Any aVal) |
| { |
| sal_uInt16 nPos = 0; |
| sal_Bool bRet = sal_False; |
| PropertyEntryVector_t::const_iterator aIt = aPropertyEntries.begin(); |
| while( aIt != aPropertyEntries.end() ) |
| { |
| if(rName == aIt->sName) |
| { |
| delete pAnyArr[nPos]; |
| pAnyArr[nPos] = new uno::Any ( aVal ); |
| bRet = sal_True; |
| break; |
| } |
| ++nPos; |
| ++aIt; |
| } |
| return bRet; |
| } |
| |
| sal_Bool SwStyleProperties_Impl::ClearProperty( const OUString& rName ) |
| { |
| sal_Bool bRet = sal_False; |
| sal_uInt16 nPos = 0; |
| PropertyEntryVector_t::const_iterator aIt = aPropertyEntries.begin(); |
| while( aIt != aPropertyEntries.end() ) |
| { |
| if( rName == aIt->sName ) |
| { |
| delete pAnyArr[nPos]; |
| pAnyArr[ nPos ] = 0; |
| bRet = sal_True; |
| break; |
| } |
| ++nPos; |
| ++aIt; |
| } |
| return bRet; |
| } |
| void SwStyleProperties_Impl::ClearAllProperties( ) |
| { |
| for ( sal_uInt16 i = 0; i < nArrLen; i++ ) |
| { |
| delete pAnyArr[i]; |
| pAnyArr[ i ] = 0; |
| } |
| } |
| //-------------------------------------------------------------------- |
| //-------------------------------------------------------------------- |
| sal_Bool SwStyleProperties_Impl::GetProperty(const ::rtl::OUString& rName, uno::Any*& rpAny ) |
| { |
| sal_Bool bRet = sal_False; |
| sal_uInt16 nPos = 0; |
| PropertyEntryVector_t::const_iterator aIt = aPropertyEntries.begin(); |
| while( aIt != aPropertyEntries.end() ) |
| { |
| if( rName == aIt->sName ) |
| { |
| rpAny = pAnyArr[nPos]; |
| bRet = sal_True; |
| break; |
| } |
| ++nPos; |
| ++aIt; |
| } |
| |
| return bRet; |
| } |
| |
| void SwStyleProperties_Impl::GetProperty( const OUString &rPropertyName, const uno::Reference < beans::XPropertySet > &rxPropertySet, uno::Any & rAny ) |
| { |
| rAny = rxPropertySet->getPropertyValue( rPropertyName ); |
| } |
| |
| /****************************************************************** |
| * |
| ******************************************************************/ |
| /* -----------------------------10.03.00 18:02-------------------------------- |
| |
| ---------------------------------------------------------------------------*/ |
| const uno::Sequence< sal_Int8 > & SwXStyle::getUnoTunnelId() |
| { |
| static uno::Sequence< sal_Int8 > aSeq = ::CreateUnoTunnelId(); |
| return aSeq; |
| } |
| /* -----------------------------10.03.00 18:04-------------------------------- |
| |
| ---------------------------------------------------------------------------*/ |
| sal_Int64 SAL_CALL SwXStyle::getSomething( const uno::Sequence< sal_Int8 >& rId ) |
| throw(uno::RuntimeException) |
| { |
| if( rId.getLength() == 16 |
| && 0 == rtl_compareMemory( getUnoTunnelId().getConstArray(), |
| rId.getConstArray(), 16 ) ) |
| { |
| return sal::static_int_cast< sal_Int64 >( reinterpret_cast< sal_IntPtr >(this) ); |
| } |
| return 0; |
| } |
| |
| /* -----------------------------06.04.00 11:24-------------------------------- |
| |
| ---------------------------------------------------------------------------*/ |
| OUString SwXStyle::getImplementationName(void) throw( uno::RuntimeException ) |
| { |
| return C2U("SwXStyle"); |
| } |
| /* -----------------------------06.04.00 11:24-------------------------------- |
| |
| ---------------------------------------------------------------------------*/ |
| sal_Bool SwXStyle::supportsService(const OUString& rServiceName) throw( uno::RuntimeException ) |
| { |
| sal_Bool bRet = C2U("com.sun.star.style.Style") == rServiceName; |
| if(!bRet && SFX_STYLE_FAMILY_CHAR == eFamily) |
| bRet = !rServiceName.compareToAscii("com.sun.star.style.CharacterStyle")|| |
| !rServiceName.compareToAscii("com.sun.star.style.CharacterProperties")|| |
| !rServiceName.compareToAscii("com.sun.star.style.CharacterPropertiesAsian")|| |
| !rServiceName.compareToAscii("com.sun.star.style.CharacterPropertiesComplex"); |
| if(!bRet && SFX_STYLE_FAMILY_PARA == eFamily) |
| bRet = (C2U("com.sun.star.style.ParagraphStyle") == rServiceName)|| |
| (C2U("com.sun.star.style.ParagraphProperties") == rServiceName) || |
| (C2U("com.sun.star.style.ParagraphPropertiesAsian") == rServiceName) || |
| (C2U("com.sun.star.style.ParagraphPropertiesComplex") == rServiceName); |
| if(!bRet && SFX_STYLE_FAMILY_PAGE == eFamily) |
| bRet = (C2U("com.sun.star.style.PageStyle") == rServiceName)|| |
| (C2U("com.sun.star.style.PageProperties") == rServiceName); |
| |
| return bRet; |
| } |
| /* -----------------------------06.04.00 11:24-------------------------------- |
| |
| ---------------------------------------------------------------------------*/ |
| uno::Sequence< OUString > SwXStyle::getSupportedServiceNames(void) throw( uno::RuntimeException ) |
| { |
| long nCount = 1; |
| if(SFX_STYLE_FAMILY_PARA == eFamily) |
| { |
| nCount = 5; |
| if(bIsConditional) |
| nCount++; |
| } |
| else if(SFX_STYLE_FAMILY_CHAR == eFamily) |
| nCount = 5; |
| else if(SFX_STYLE_FAMILY_PAGE == eFamily) |
| nCount = 3; |
| uno::Sequence< OUString > aRet(nCount); |
| OUString* pArray = aRet.getArray(); |
| pArray[0] = C2U("com.sun.star.style.Style"); |
| switch(eFamily) |
| { |
| case SFX_STYLE_FAMILY_CHAR: |
| pArray[1] = C2U("com.sun.star.style.CharacterStyle"); |
| pArray[2] = C2U("com.sun.star.style.CharacterProperties"); |
| pArray[3] = C2U("com.sun.star.style.CharacterPropertiesAsian"); |
| pArray[4] = C2U("com.sun.star.style.CharacterPropertiesComplex"); |
| break; |
| case SFX_STYLE_FAMILY_PAGE: |
| pArray[1] = C2U("com.sun.star.style.PageStyle"); |
| pArray[2] = C2U("com.sun.star.style.PageProperties"); |
| break; |
| case SFX_STYLE_FAMILY_PARA: |
| pArray[1] = C2U("com.sun.star.style.ParagraphStyle"); |
| pArray[2] = C2U("com.sun.star.style.ParagraphProperties"); |
| pArray[3] = C2U("com.sun.star.style.ParagraphPropertiesAsian"); |
| pArray[4] = C2U("com.sun.star.style.ParagraphPropertiesComplex"); |
| if(bIsConditional) |
| pArray[5] = C2U("com.sun.star.style.ConditionalParagraphStyle"); |
| break; |
| |
| default: |
| ; |
| } |
| return aRet; |
| } |
| /*-- 17.12.98 08:26:49--------------------------------------------------- |
| |
| -----------------------------------------------------------------------*/ |
| SwXStyle::SwXStyle( SwDoc *pDoc, SfxStyleFamily eFam, sal_Bool bConditional) : |
| m_pDoc( pDoc ), |
| pBasePool(0), |
| eFamily(eFam), |
| bIsDescriptor(sal_True), |
| bIsConditional(bConditional) |
| { |
| // Register ourselves as a listener to the document (via the page descriptor) |
| pDoc->GetPageDescFromPool(RES_POOLPAGE_STANDARD)->Add(this); |
| // get the property set for the default style data |
| // First get the model |
| uno::Reference < frame::XModel > xModel = pDoc->GetDocShell()->GetBaseModel(); |
| // Ask the model for it's family supplier interface |
| uno::Reference < style::XStyleFamiliesSupplier > xFamilySupplier ( xModel, uno::UNO_QUERY ); |
| // Get the style families |
| uno::Reference < container::XNameAccess > xFamilies = xFamilySupplier->getStyleFamilies(); |
| |
| uno::Any aAny; |
| sal_uInt16 nMapId = PROPERTY_MAP_NUM_STYLE; |
| switch( eFamily ) |
| { |
| case SFX_STYLE_FAMILY_CHAR: |
| { |
| nMapId = PROPERTY_MAP_CHAR_STYLE; |
| aAny = xFamilies->getByName ( OUString ( RTL_CONSTASCII_USTRINGPARAM ( "CharacterStyles" ) ) ); |
| // Get the Frame family (and keep it for later) |
| aAny >>= mxStyleFamily; |
| //aAny = mxStyleFamily->getByName ( OUString ( RTL_CONSTASCII_USTRINGPARAM ( "Standard" ) ) ); |
| //aAny >>= mxStyleData; |
| } |
| break; |
| case SFX_STYLE_FAMILY_PARA: |
| { |
| nMapId = bIsConditional ? PROPERTY_MAP_CONDITIONAL_PARA_STYLE : PROPERTY_MAP_PARA_STYLE; |
| aAny = xFamilies->getByName ( OUString ( RTL_CONSTASCII_USTRINGPARAM ( "ParagraphStyles" ) ) ); |
| // Get the Frame family (and keep it for later) |
| aAny >>= mxStyleFamily; |
| aAny = mxStyleFamily->getByName ( OUString ( RTL_CONSTASCII_USTRINGPARAM ( "Standard" ) ) ); |
| aAny >>= mxStyleData; |
| } |
| break; |
| case SFX_STYLE_FAMILY_PAGE: |
| { |
| nMapId = PROPERTY_MAP_PAGE_STYLE; |
| aAny = xFamilies->getByName ( OUString ( RTL_CONSTASCII_USTRINGPARAM ( "PageStyles" ) ) ); |
| // Get the Frame family (and keep it for later) |
| aAny >>= mxStyleFamily; |
| aAny = mxStyleFamily->getByName ( OUString ( RTL_CONSTASCII_USTRINGPARAM ( "Standard" ) ) ); |
| aAny >>= mxStyleData; |
| } |
| break; |
| case SFX_STYLE_FAMILY_FRAME : |
| { |
| nMapId = PROPERTY_MAP_FRAME_STYLE; |
| } |
| break; |
| case SFX_STYLE_FAMILY_PSEUDO: |
| { |
| nMapId = PROPERTY_MAP_NUM_STYLE; |
| } |
| break; |
| |
| default: |
| ; |
| } |
| pPropImpl = new SwStyleProperties_Impl(aSwMapProvider.GetPropertySet(nMapId)->getPropertyMap()); |
| } |
| |
| |
| SwXStyle::SwXStyle(SfxStyleSheetBasePool& rPool, SfxStyleFamily eFam, |
| SwDoc* pDoc, const String& rStyleName) : |
| m_pDoc(pDoc), |
| sStyleName(rStyleName), |
| pBasePool(&rPool), |
| eFamily(eFam), |
| bIsDescriptor(sal_False), |
| bIsConditional(sal_False), |
| pPropImpl(0) |
| { |
| StartListening(rPool); |
| if(eFam == SFX_STYLE_FAMILY_PARA) |
| { |
| pBasePool->SetSearchMask(eFamily, SFXSTYLEBIT_ALL ); |
| SfxStyleSheetBase* pBase = pBasePool->Find(sStyleName); |
| DBG_ASSERT(pBase, "where is the style?" ); |
| if(pBase) |
| { |
| const sal_uInt16 nId = SwStyleNameMapper::GetPoolIdFromUIName(sStyleName, nsSwGetPoolIdFromName::GET_POOLID_TXTCOLL); |
| if(nId != USHRT_MAX) |
| bIsConditional = ::IsConditionalByPoolId( nId ); |
| else |
| bIsConditional = RES_CONDTXTFMTCOLL == ((SwDocStyleSheet*)pBase)->GetCollection()->Which(); |
| } |
| } |
| } |
| /*-- 17.12.98 08:26:50--------------------------------------------------- |
| |
| -----------------------------------------------------------------------*/ |
| SwXStyle::~SwXStyle() |
| { |
| if(pBasePool) |
| EndListening(*pBasePool); |
| delete pPropImpl; |
| } |
| /*-- 17.12.98 08:26:51--------------------------------------------------- |
| |
| -----------------------------------------------------------------------*/ |
| void SwXStyle::Modify( const SfxPoolItem* pOld, const SfxPoolItem *pNew) |
| { |
| ClientModify(this, pOld, pNew); |
| if(!GetRegisteredIn()) |
| { |
| m_pDoc = 0; |
| mxStyleData.clear(); |
| mxStyleFamily.clear(); |
| } |
| } |
| OUString SwXStyle::getName(void) throw( uno::RuntimeException ) |
| { |
| vos::OGuard aGuard(Application::GetSolarMutex()); |
| String aString; |
| if(pBasePool) |
| { |
| pBasePool->SetSearchMask(eFamily, SFXSTYLEBIT_ALL ); |
| SfxStyleSheetBase* pBase = pBasePool->Find(sStyleName); |
| DBG_ASSERT(pBase, "where is the style?" ); |
| if(!pBase) |
| throw uno::RuntimeException(); |
| SwStyleNameMapper::FillProgName(pBase->GetName(), aString, lcl_GetSwEnumFromSfxEnum ( eFamily ), sal_True); |
| } |
| else |
| aString = sStyleName; |
| return OUString (aString); |
| } |
| /*-- 17.12.98 08:26:51--------------------------------------------------- |
| |
| -----------------------------------------------------------------------*/ |
| void SwXStyle::setName(const OUString& rName) throw( uno::RuntimeException ) |
| { |
| vos::OGuard aGuard(Application::GetSolarMutex()); |
| if(pBasePool) |
| { |
| pBasePool->SetSearchMask(eFamily, SFXSTYLEBIT_ALL ); |
| SfxStyleSheetBase* pBase = pBasePool->Find(sStyleName); |
| DBG_ASSERT(pBase, "where is the style?" ); |
| sal_Bool bExcept = sal_True; |
| if(pBase && pBase->IsUserDefined()) |
| { |
| rtl::Reference< SwDocStyleSheet > xTmp( new SwDocStyleSheet( *(SwDocStyleSheet*)pBase ) ); |
| bExcept = !xTmp->SetName(rName); |
| if(!bExcept) |
| sStyleName = String(rName); |
| } |
| if(bExcept) |
| throw uno::RuntimeException(); |
| } |
| else |
| sStyleName = String(rName); |
| } |
| /*-- 17.12.98 08:26:51--------------------------------------------------- |
| |
| -----------------------------------------------------------------------*/ |
| sal_Bool SwXStyle::isUserDefined(void) throw( uno::RuntimeException ) |
| { |
| vos::OGuard aGuard(Application::GetSolarMutex()); |
| sal_Bool bRet = sal_False; |
| if(pBasePool) |
| { |
| pBasePool->SetSearchMask(eFamily, SFXSTYLEBIT_ALL ); |
| SfxStyleSheetBase* pBase = pBasePool->Find(sStyleName); |
| //if it is not found it must be non user defined |
| if(pBase) |
| bRet = pBase->IsUserDefined(); |
| } |
| else |
| throw uno::RuntimeException(); |
| return bRet; |
| } |
| /*-- 17.12.98 08:26:51--------------------------------------------------- |
| |
| -----------------------------------------------------------------------*/ |
| sal_Bool SwXStyle::isInUse(void) throw( uno::RuntimeException ) |
| { |
| vos::OGuard aGuard(Application::GetSolarMutex()); |
| sal_Bool bRet = sal_False; |
| if(pBasePool) |
| { |
| pBasePool->SetSearchMask(eFamily, SFXSTYLEBIT_USED); |
| SfxStyleSheetBase* pBase = pBasePool->Find(sStyleName); |
| if(pBase) |
| bRet = pBase->IsUsed(); |
| } |
| else |
| throw uno::RuntimeException(); |
| return bRet; |
| } |
| /*-- 17.12.98 08:26:52--------------------------------------------------- |
| |
| -----------------------------------------------------------------------*/ |
| OUString SwXStyle::getParentStyle(void) throw( uno::RuntimeException ) |
| { |
| vos::OGuard aGuard(Application::GetSolarMutex()); |
| String aString; |
| if(pBasePool) |
| { |
| pBasePool->SetSearchMask(eFamily, SFXSTYLEBIT_ALL); |
| SfxStyleSheetBase* pBase = pBasePool->Find(sStyleName); |
| if(pBase) |
| aString = pBase->GetParent(); |
| } |
| else if(bIsDescriptor) |
| aString = sParentStyleName; |
| else |
| throw uno::RuntimeException(); |
| SwStyleNameMapper::FillProgName(aString, aString, lcl_GetSwEnumFromSfxEnum ( eFamily ), sal_True ); |
| return OUString ( aString ); |
| } |
| /*-- 17.12.98 08:26:52--------------------------------------------------- |
| |
| -----------------------------------------------------------------------*/ |
| void SwXStyle::setParentStyle(const OUString& rParentStyle) |
| throw( container::NoSuchElementException, uno::RuntimeException ) |
| { |
| vos::OGuard aGuard(Application::GetSolarMutex()); |
| String sParentStyle; |
| SwStyleNameMapper::FillUIName(rParentStyle, sParentStyle, lcl_GetSwEnumFromSfxEnum ( eFamily ), sal_True ); |
| if(pBasePool) |
| { |
| pBasePool->SetSearchMask(eFamily); |
| sal_Bool bExcept = sal_False; |
| SfxStyleSheetBase* pBase = pBasePool->Find(sStyleName); |
| if(pBase) |
| { |
| rtl::Reference< SwDocStyleSheet > xBase( new SwDocStyleSheet(*(SwDocStyleSheet*)pBase) ); |
| //make it a 'real' style - necessary for pooled styles |
| xBase->GetItemSet(); |
| if(xBase->GetParent() != sParentStyle) |
| { |
| bExcept = !xBase->SetParent(sParentStyle); |
| } |
| } |
| else |
| bExcept = sal_True; |
| if(bExcept) |
| throw uno::RuntimeException(); |
| } |
| else if(bIsDescriptor) |
| { |
| sParentStyleName = String(sParentStyle); |
| try |
| { |
| uno::Any aAny = mxStyleFamily->getByName ( sParentStyle ); |
| aAny >>= mxStyleData; |
| } |
| catch ( container::NoSuchElementException& ) |
| { |
| } |
| catch ( lang::WrappedTargetException& ) |
| { |
| } |
| catch ( uno::RuntimeException& ) |
| { |
| } |
| } |
| else |
| throw uno::RuntimeException(); |
| } |
| /*-- 17.12.98 08:26:52--------------------------------------------------- |
| |
| -----------------------------------------------------------------------*/ |
| |
| uno::Reference< beans::XPropertySetInfo > lcl_getPropertySetInfo( SfxStyleFamily eFamily, sal_Bool bIsConditional ) |
| { |
| uno::Reference< beans::XPropertySetInfo > xRet; |
| switch( eFamily ) |
| { |
| case SFX_STYLE_FAMILY_CHAR: |
| { |
| static uno::Reference< beans::XPropertySetInfo > xCharRef; |
| if(!xCharRef.is()) |
| { |
| xCharRef = aSwMapProvider.GetPropertySet(PROPERTY_MAP_CHAR_STYLE)->getPropertySetInfo(); |
| } |
| xRet = xCharRef; |
| } |
| break; |
| case SFX_STYLE_FAMILY_PARA: |
| { |
| static uno::Reference< beans::XPropertySetInfo > xParaRef; |
| if(!xParaRef.is()) |
| { |
| sal_uInt16 nMapId = bIsConditional ? PROPERTY_MAP_CONDITIONAL_PARA_STYLE : PROPERTY_MAP_PARA_STYLE; |
| xParaRef = aSwMapProvider.GetPropertySet(nMapId)->getPropertySetInfo(); |
| } |
| xRet = xParaRef; |
| } |
| break; |
| case SFX_STYLE_FAMILY_PAGE : |
| { |
| static uno::Reference< beans::XPropertySetInfo > xPageRef; |
| if(!xPageRef.is()) |
| { |
| xPageRef = aSwMapProvider.GetPropertySet(PROPERTY_MAP_PAGE_STYLE)->getPropertySetInfo(); |
| } |
| xRet = xPageRef; |
| } |
| break; |
| case SFX_STYLE_FAMILY_FRAME : |
| { |
| static uno::Reference< beans::XPropertySetInfo > xFrameRef; |
| if(!xFrameRef.is()) |
| { |
| xFrameRef = aSwMapProvider.GetPropertySet(PROPERTY_MAP_FRAME_STYLE)->getPropertySetInfo(); |
| } |
| xRet = xFrameRef; |
| } |
| break; |
| case SFX_STYLE_FAMILY_PSEUDO: |
| { |
| static uno::Reference< beans::XPropertySetInfo > xNumRef; |
| if(!xNumRef.is()) |
| { |
| xNumRef = aSwMapProvider.GetPropertySet(PROPERTY_MAP_NUM_STYLE)->getPropertySetInfo(); |
| } |
| xRet = xNumRef; |
| } |
| break; |
| |
| default: |
| ; |
| } |
| return xRet; |
| } |
| |
| uno::Reference< beans::XPropertySetInfo > SwXStyle::getPropertySetInfo(void) |
| throw( uno::RuntimeException ) |
| { |
| return lcl_getPropertySetInfo( eFamily, bIsConditional ); |
| } |
| /* -----------------23.04.99 13:28------------------- |
| * |
| * --------------------------------------------------*/ |
| void SwXStyle::ApplyDescriptorProperties() |
| { |
| bIsDescriptor = sal_False; |
| mxStyleData.clear(); |
| mxStyleFamily.clear(); |
| |
| const PropertyEntryVector_t& rPropertyVector = pPropImpl->GetPropertyVector(); |
| PropertyEntryVector_t::const_iterator aIt = rPropertyVector.begin(); |
| while(aIt != rPropertyVector.end()) |
| { |
| uno::Any* pAny; |
| pPropImpl->GetProperty(aIt->sName, pAny); |
| if(pAny) |
| setPropertyValue(aIt->sName, *pAny); |
| ++aIt; |
| } |
| } |
| |
| /*-- 18.04.01 13:07:27--------------------------------------------------- |
| |
| -----------------------------------------------------------------------*/ |
| class SwStyleBase_Impl |
| { |
| private: |
| SwDoc& mrDoc; |
| const SwPageDesc* mpOldPageDesc; |
| rtl::Reference< SwDocStyleSheet > mxNewBase; |
| SfxItemSet* mpItemSet; |
| const String& mrStyleName; |
| sal_uInt16 mnPDescPos; |
| const SwAttrSet* mpParentStyle; |
| |
| public: |
| SwStyleBase_Impl( |
| SwDoc& rSwDoc, |
| const String& rName, |
| const SwAttrSet* pParentStyle) |
| : mrDoc(rSwDoc), |
| mpOldPageDesc(0), |
| mxNewBase(), |
| mpItemSet(0), |
| mrStyleName(rName), |
| mnPDescPos(0xffff), |
| mpParentStyle(pParentStyle) |
| { |
| } |
| |
| ~SwStyleBase_Impl() |
| { |
| delete mpItemSet; |
| } |
| |
| rtl::Reference< SwDocStyleSheet >& getNewBase() |
| { |
| return mxNewBase; |
| } |
| |
| void setNewBase(SwDocStyleSheet* pNew) |
| { |
| mxNewBase = pNew; |
| } |
| |
| sal_Bool HasItemSet() |
| { |
| return mxNewBase.is(); |
| } |
| |
| SfxItemSet* replaceItemSet(SfxItemSet* pNew) |
| { |
| SfxItemSet* pRetval = mpItemSet; |
| mpItemSet = pNew; |
| return pRetval; |
| } |
| |
| SfxItemSet& GetItemSet() |
| { |
| DBG_ASSERT(mxNewBase.is(), "no SwDocStyleSheet available"); |
| |
| if(!mpItemSet) |
| { |
| mpItemSet = new SfxItemSet(mxNewBase->GetItemSet()); |
| |
| //UUUU set parent style to have the correct XFillStyle setting as XFILL_NONE |
| if(!mpItemSet->GetParent() && mpParentStyle) |
| { |
| mpItemSet->SetParent(mpParentStyle); |
| } |
| } |
| |
| return *mpItemSet; |
| } |
| |
| const SwPageDesc& GetOldPageDesc(); |
| }; |
| /* -----------------------------25.04.01 12:44-------------------------------- |
| |
| ---------------------------------------------------------------------------*/ |
| const SwPageDesc& SwStyleBase_Impl::GetOldPageDesc() |
| { |
| if(!mpOldPageDesc) |
| { |
| sal_uInt16 i; |
| sal_uInt16 nPDescCount = mrDoc.GetPageDescCnt(); |
| for(i = 0; i < nPDescCount; i++) |
| { |
| const SwPageDesc& rDesc = |
| const_cast<const SwDoc &>(mrDoc).GetPageDesc( i ); |
| if(rDesc.GetName() == mrStyleName) |
| { |
| mpOldPageDesc = & rDesc; |
| mnPDescPos = i; |
| break; |
| } |
| } |
| if(!mpOldPageDesc) |
| { |
| for(i = RC_POOLPAGEDESC_BEGIN; i <= STR_POOLPAGE_LANDSCAPE; ++i) |
| { |
| const String aFmtName(SW_RES(i)); |
| if(aFmtName == mrStyleName) |
| { |
| mpOldPageDesc = mrDoc.GetPageDescFromPool( static_cast< sal_uInt16 >(RES_POOLPAGE_BEGIN + i - RC_POOLPAGEDESC_BEGIN) ); |
| break; |
| } |
| } |
| for(i = 0; i < nPDescCount + 1; i++) |
| { |
| const SwPageDesc& rDesc = |
| const_cast<const SwDoc &>(mrDoc).GetPageDesc( i ); |
| if(rDesc.GetName() == mrStyleName) |
| { |
| mnPDescPos = i; |
| break; |
| } |
| } |
| } |
| } |
| return *mpOldPageDesc; |
| } |
| |
| /* -----------------------------19.04.01 09:44-------------------------------- |
| |
| ---------------------------------------------------------------------------*/ |
| |
| void lcl_SetStyleProperty( |
| const SfxItemPropertySimpleEntry& rEntry, |
| const SfxItemPropertySet& rPropSet, |
| const uno::Any& rValue, |
| SwStyleBase_Impl& rBase, |
| SfxStyleSheetBasePool* pBasePool, |
| SwDoc* pDoc, |
| SfxStyleFamily eFamily) |
| throw(beans::PropertyVetoException, lang::IllegalArgumentException, lang::WrappedTargetException, uno::RuntimeException) |
| { |
| //UUUU adapted switch logic to a more readable state; removed goto's and made |
| // execution of standard setting of proerty in ItemSet dependent of this variable |
| bool bDone(false); |
| |
| //UUUU |
| const sal_uInt8 nMemberId(rEntry.nMemberId & (~SFX_METRIC_ITEM)); |
| uno::Any aValue(rValue); |
| |
| //UUUU check for needed metric translation |
| if(rEntry.nMemberId & SFX_METRIC_ITEM) |
| { |
| bool bDoIt(true); |
| |
| if(XATTR_FILLBMP_SIZEX == rEntry.nWID || XATTR_FILLBMP_SIZEY == rEntry.nWID) |
| { |
| // exception: If these ItemTypes are used, do not convert when these are negative |
| // since this means they are intended as percent values |
| sal_Int32 nValue = 0; |
| |
| if(aValue >>= nValue) |
| { |
| bDoIt = nValue > 0; |
| } |
| } |
| |
| if(bDoIt && pDoc) |
| { |
| const SfxItemPool& rPool = pDoc->GetAttrPool(); |
| const SfxMapUnit eMapUnit(rPool.GetMetric(rEntry.nWID)); |
| |
| if(eMapUnit != SFX_MAPUNIT_100TH_MM) |
| { |
| SvxUnoConvertFromMM(eMapUnit, aValue); |
| } |
| } |
| } |
| |
| switch(rEntry.nWID) |
| { |
| case XATTR_FILLGRADIENT: |
| case XATTR_FILLHATCH: |
| case XATTR_FILLBITMAP: |
| case XATTR_FILLFLOATTRANSPARENCE: |
| // not yet needed; activate when LineStyle support may be added |
| // case XATTR_LINESTART: |
| // case XATTR_LINEEND: |
| // case XATTR_LINEDASH: |
| { |
| if(MID_NAME == nMemberId) |
| { |
| //UUUU add set commands for FillName items |
| OUString aTempName; |
| SfxItemSet& rStyleSet = rBase.GetItemSet(); |
| |
| if(!(aValue >>= aTempName)) |
| { |
| throw lang::IllegalArgumentException(); |
| } |
| |
| SvxShape::SetFillAttribute(rEntry.nWID, aTempName, rStyleSet); |
| bDone = true; |
| } |
| else if(MID_GRAFURL == nMemberId) |
| { |
| if(XATTR_FILLBITMAP == rEntry.nWID) |
| { |
| //UUUU Bitmap also has the MID_GRAFURL mode where a Bitmap URL is used |
| const Graphic aNullGraphic; |
| SfxItemSet& rStyleSet = rBase.GetItemSet(); |
| XFillBitmapItem aXFillBitmapItem(rStyleSet.GetPool(), aNullGraphic); |
| |
| aXFillBitmapItem.PutValue(aValue, nMemberId); |
| rStyleSet.Put(aXFillBitmapItem); |
| bDone = true; |
| } |
| } |
| |
| break; |
| } |
| case RES_BACKGROUND: |
| { |
| //UUUU |
| SfxItemSet& rStyleSet = rBase.GetItemSet(); |
| const SvxBrushItem aOriginalBrushItem(getSvxBrushItemFromSourceSet(rStyleSet, RES_BACKGROUND)); |
| SvxBrushItem aChangedBrushItem(aOriginalBrushItem); |
| |
| aChangedBrushItem.PutValue(aValue, nMemberId); |
| |
| if(!(aChangedBrushItem == aOriginalBrushItem)) |
| { |
| setSvxBrushItemAsFillAttributesToTargetSet(aChangedBrushItem, rStyleSet); |
| } |
| |
| bDone = true; |
| break; |
| } |
| case OWN_ATTR_FILLBMP_MODE: |
| { |
| //UUUU |
| drawing::BitmapMode eMode; |
| |
| if(!(aValue >>= eMode)) |
| { |
| sal_Int32 nMode = 0; |
| |
| if(!(aValue >>= nMode)) |
| { |
| throw lang::IllegalArgumentException(); |
| } |
| |
| eMode = (drawing::BitmapMode)nMode; |
| } |
| |
| SfxItemSet& rStyleSet = rBase.GetItemSet(); |
| |
| rStyleSet.Put(XFillBmpStretchItem(drawing::BitmapMode_STRETCH == eMode)); |
| rStyleSet.Put(XFillBmpTileItem(drawing::BitmapMode_REPEAT == eMode)); |
| |
| bDone = true; |
| break; |
| } |
| case RES_PAPER_BIN: |
| { |
| SfxPrinter *pPrinter = pDoc->getPrinter( true ); |
| OUString sTmp; |
| sal_uInt16 nBin = USHRT_MAX; |
| if ( !( aValue >>= sTmp ) ) |
| throw lang::IllegalArgumentException(); |
| if ( sTmp.equalsAsciiL ( RTL_CONSTASCII_STRINGPARAM ( "[From printer settings]" ) ) ) |
| nBin = USHRT_MAX-1; |
| else if ( pPrinter ) |
| { |
| for (sal_uInt16 i=0, nEnd = pPrinter->GetPaperBinCount(); i < nEnd; i++ ) |
| { |
| if (sTmp == OUString ( pPrinter->GetPaperBinName ( i ) ) ) |
| { |
| nBin = i; |
| break; |
| } |
| } |
| } |
| if ( nBin == USHRT_MAX ) |
| throw lang::IllegalArgumentException(); |
| else |
| { |
| SfxItemSet& rStyleSet = rBase.GetItemSet(); |
| SfxItemSet aSet(*rStyleSet.GetPool(), rEntry.nWID, rEntry.nWID); |
| aSet.SetParent(&rStyleSet); |
| rPropSet.setPropertyValue(rEntry, uno::makeAny ( static_cast < sal_Int8 > ( nBin == USHRT_MAX-1 ? -1 : nBin ) ), aSet); |
| rStyleSet.Put(aSet); |
| } |
| |
| bDone = true; |
| break; |
| } |
| case FN_UNO_NUM_RULES: //Sonderbehandlung fuer das SvxNumRuleItem: |
| { |
| if(aValue.getValueType() == ::getCppuType((uno::Reference< container::XIndexReplace>*)0) ) |
| { |
| uno::Reference< container::XIndexReplace > * pxRulesRef = |
| (uno::Reference< container::XIndexReplace > *)aValue.getValue(); |
| |
| uno::Reference<lang::XUnoTunnel> xNumberTunnel( *pxRulesRef, uno::UNO_QUERY); |
| |
| SwXNumberingRules* pSwXRules = 0; |
| if(xNumberTunnel.is()) |
| { |
| pSwXRules = reinterpret_cast< SwXNumberingRules * >( |
| sal::static_int_cast< sal_IntPtr >(xNumberTunnel->getSomething( SwXNumberingRules::getUnoTunnelId()) )); |
| } |
| if(pSwXRules) |
| { |
| const String* pCharStyleNames = pSwXRules->GetNewCharStyleNames(); |
| const String* pBulletFontNames = pSwXRules->GetBulletFontNames(); |
| |
| SwNumRule aSetRule(*pSwXRules->GetNumRule()); |
| const SwCharFmts* pFmts = pDoc->GetCharFmts(); |
| sal_uInt16 nChCount = pFmts->Count(); |
| for(sal_uInt16 i = 0; i < MAXLEVEL; i++) |
| { |
| |
| const SwNumFmt* pFmt = aSetRule.GetNumFmt( i ); |
| if(pFmt) |
| { |
| SwNumFmt aFmt(*pFmt); |
| if( |
| pCharStyleNames[i] != SwXNumberingRules::GetInvalidStyle() && |
| ((pCharStyleNames[i].Len() && !pFmt->GetCharFmt()) || |
| (pCharStyleNames[i].Len() && |
| pFmt->GetCharFmt()->GetName() != pCharStyleNames[i]) )) |
| { |
| |
| SwCharFmt* pCharFmt = 0; |
| if(pCharStyleNames[i].Len()) |
| { |
| for(sal_uInt16 j = 0; j< nChCount; j++) |
| { |
| SwCharFmt* pTmp = (*pFmts)[j]; |
| if(pTmp->GetName() == pCharStyleNames[i]) |
| { |
| pCharFmt = pTmp; |
| break; |
| } |
| } |
| if(!pCharFmt) |
| { |
| |
| SfxStyleSheetBase* pBase; |
| pBase = ((SfxStyleSheetBasePool*)pBasePool)->Find(pCharStyleNames[i], SFX_STYLE_FAMILY_CHAR); |
| if(!pBase) |
| pBase = &pBasePool->Make(pCharStyleNames[i], SFX_STYLE_FAMILY_CHAR); |
| pCharFmt = ((SwDocStyleSheet*)pBase)->GetCharFmt(); |
| |
| } |
| |
| aFmt.SetCharFmt( pCharFmt ); |
| } |
| } |
| //jetzt nochmal fuer Fonts |
| if(pBulletFontNames[i] != SwXNumberingRules::GetInvalidStyle() && |
| ((pBulletFontNames[i].Len() && !pFmt->GetBulletFont()) || |
| (pBulletFontNames[i].Len() && |
| pFmt->GetBulletFont()->GetName() != pBulletFontNames[i]) )) |
| { |
| const SvxFontListItem* pFontListItem = |
| (const SvxFontListItem* )pDoc->GetDocShell() |
| ->GetItem( SID_ATTR_CHAR_FONTLIST ); |
| const FontList* pList = pFontListItem->GetFontList(); |
| FontInfo aInfo = pList->Get( |
| pBulletFontNames[i],WEIGHT_NORMAL, ITALIC_NONE); |
| Font aFont(aInfo); |
| aFmt.SetBulletFont(&aFont); |
| } |
| aSetRule.Set( i, &aFmt ); |
| } |
| } |
| rBase.getNewBase()->SetNumRule(aSetRule); |
| } |
| } |
| else |
| throw lang::IllegalArgumentException(); |
| |
| bDone = true; |
| break; |
| } |
| |
| case RES_PARATR_OUTLINELEVEL: |
| { |
| sal_Int16 nLevel = 0; |
| aValue >>= nLevel; |
| if( 0 <= nLevel && nLevel <= MAXLEVEL) |
| rBase.getNewBase()->GetCollection()->SetAttrOutlineLevel( nLevel ); |
| |
| bDone = true; |
| break; |
| } |
| |
| case FN_UNO_FOLLOW_STYLE: |
| { |
| OUString sTmp; |
| aValue >>= sTmp; |
| String aString; |
| SwStyleNameMapper::FillUIName(sTmp, aString, lcl_GetSwEnumFromSfxEnum ( eFamily ), sal_True ) ; |
| rBase.getNewBase()->SetFollow( aString ); |
| |
| bDone = true; |
| break; |
| } |
| case RES_PAGEDESC : |
| { |
| if( MID_PAGEDESC_PAGEDESCNAME == nMemberId) |
| { |
| // Sonderbehandlung RES_PAGEDESC |
| if(aValue.getValueType() != ::getCppuType((const OUString*)0)) |
| throw lang::IllegalArgumentException(); |
| SfxItemSet& rStyleSet = rBase.GetItemSet(); |
| |
| SwFmtPageDesc* pNewDesc = 0; |
| const SfxPoolItem* pItem; |
| if(SFX_ITEM_SET == rStyleSet.GetItemState( RES_PAGEDESC, sal_True, &pItem ) ) |
| { |
| pNewDesc = new SwFmtPageDesc(*((SwFmtPageDesc*)pItem)); |
| } |
| if(!pNewDesc) |
| pNewDesc = new SwFmtPageDesc(); |
| OUString uDescName; |
| aValue >>= uDescName; |
| String sDescName; |
| SwStyleNameMapper::FillUIName(uDescName, sDescName, nsSwGetPoolIdFromName::GET_POOLID_PAGEDESC, sal_True ); |
| if(!pNewDesc->GetPageDesc() || pNewDesc->GetPageDesc()->GetName() != sDescName) |
| { |
| //sal_uInt16 nCount = pDoc->GetPageDescCnt(); |
| sal_Bool bPut = sal_False; |
| if(sDescName.Len()) |
| { |
| SwPageDesc* pPageDesc = ::GetPageDescByName_Impl(*pDoc, sDescName); |
| if(pPageDesc) |
| { |
| pNewDesc->RegisterToPageDesc( *pPageDesc ); |
| bPut = sal_True; |
| } |
| else |
| { |
| throw lang::IllegalArgumentException(); |
| } |
| } |
| if(!bPut) |
| { |
| rStyleSet.ClearItem(RES_BREAK); |
| rStyleSet.Put(SwFmtPageDesc()); |
| } |
| else |
| rStyleSet.Put(*pNewDesc); |
| } |
| |
| delete pNewDesc; |
| bDone = true; |
| } |
| |
| break; |
| } |
| case FN_UNO_IS_AUTO_UPDATE: |
| { |
| sal_Bool bAuto = *(sal_Bool*)aValue.getValue(); |
| if(SFX_STYLE_FAMILY_PARA == eFamily) |
| rBase.getNewBase()->GetCollection()->SetAutoUpdateFmt(bAuto); |
| else if(SFX_STYLE_FAMILY_FRAME == eFamily) |
| rBase.getNewBase()->GetFrmFmt()->SetAutoUpdateFmt(bAuto); |
| |
| bDone = true; |
| break; |
| } |
| case FN_UNO_PARA_STYLE_CONDITIONS: |
| { |
| uno::Sequence< beans::NamedValue > aSeq; |
| if (!(aValue >>= aSeq)) |
| throw lang::IllegalArgumentException(); |
| |
| DBG_ASSERT(COND_COMMAND_COUNT == 28, |
| "invalid size of comman count?"); |
| const beans::NamedValue *pSeq = aSeq.getConstArray(); |
| sal_Int32 nLen = aSeq.getLength(); |
| |
| sal_Bool bFailed = sal_False; |
| SwCondCollItem aCondItem; |
| for(sal_uInt16 i = 0; i < nLen; i++) |
| { |
| OUString aTmp; |
| if ((pSeq[i].Value >>= aTmp)) |
| { |
| // get UI style name from programmatic style name |
| String aStyleName; |
| SwStyleNameMapper::FillUIName( aTmp, aStyleName, lcl_GetSwEnumFromSfxEnum ( eFamily ), sal_True ); |
| |
| // |
| // check for correct context and style name |
| // |
| sal_Int16 nIdx = GetCommandContextIndex( pSeq[i].Name ); |
| // |
| pBasePool->SetSearchMask( SFX_STYLE_FAMILY_PARA, SFXSTYLEBIT_ALL ); |
| sal_Bool bStyleFound = sal_False; |
| const SfxStyleSheetBase* pBase = pBasePool->First(); |
| while (pBase && !bStyleFound) |
| { |
| if(pBase->GetName() == aStyleName) |
| bStyleFound = sal_True; |
| pBase = pBasePool->Next(); |
| } |
| // |
| if (nIdx == -1 || !bStyleFound) |
| { |
| bFailed = sal_True; |
| break; |
| } |
| |
| aCondItem.SetStyle( &aStyleName, nIdx); |
| } |
| else |
| bFailed = sal_True; |
| } |
| if (bFailed) |
| throw lang::IllegalArgumentException(); |
| rBase.GetItemSet().Put( aCondItem ); |
| bDone = true; |
| break; |
| } |
| case FN_UNO_CATEGORY: |
| { |
| if(!rBase.getNewBase()->IsUserDefined()) |
| throw lang::IllegalArgumentException(); |
| short nSet = 0; |
| aValue >>= nSet; |
| |
| sal_uInt16 nId; |
| switch( nSet ) |
| { |
| case style::ParagraphStyleCategory::TEXT: |
| nId = SWSTYLEBIT_TEXT; |
| break; |
| case style::ParagraphStyleCategory::CHAPTER: |
| nId = SWSTYLEBIT_CHAPTER; |
| break; |
| case style::ParagraphStyleCategory::LIST: |
| nId = SWSTYLEBIT_LIST; |
| break; |
| case style::ParagraphStyleCategory::INDEX: |
| nId = SWSTYLEBIT_IDX; |
| break; |
| case style::ParagraphStyleCategory::EXTRA: |
| nId = SWSTYLEBIT_EXTRA; |
| break; |
| case style::ParagraphStyleCategory::HTML: |
| nId = SWSTYLEBIT_HTML; |
| break; |
| default: throw lang::IllegalArgumentException(); |
| } |
| |
| rBase.getNewBase()->SetMask( nId|SFXSTYLEBIT_USERDEF ); |
| bDone = true; |
| break; |
| } |
| case SID_SWREGISTER_COLLECTION: |
| { |
| OUString sName; |
| aValue >>= sName; |
| SwRegisterItem aReg( sName.getLength() != 0); |
| aReg.SetWhich(SID_SWREGISTER_MODE); |
| rBase.GetItemSet().Put(aReg); |
| String aString; |
| SwStyleNameMapper::FillUIName(sName, aString, nsSwGetPoolIdFromName::GET_POOLID_TXTCOLL, sal_True); |
| |
| rBase.GetItemSet().Put(SfxStringItem(SID_SWREGISTER_COLLECTION, aString ) ); |
| bDone = true; |
| break; |
| } |
| case RES_TXTATR_CJK_RUBY: |
| { |
| if(MID_RUBY_CHARSTYLE == nMemberId ) |
| { |
| OUString sTmp; |
| if(aValue >>= sTmp) |
| { |
| SfxItemSet& rStyleSet = rBase.GetItemSet(); |
| SwFmtRuby* pRuby = 0; |
| const SfxPoolItem* pItem; |
| if(SFX_ITEM_SET == rStyleSet.GetItemState( RES_TXTATR_CJK_RUBY, sal_True, &pItem ) ) |
| pRuby = new SwFmtRuby(*((SwFmtRuby*)pItem)); |
| if(!pRuby) |
| pRuby = new SwFmtRuby(aEmptyStr); |
| String sStyle; |
| SwStyleNameMapper::FillUIName(sTmp, sStyle, nsSwGetPoolIdFromName::GET_POOLID_CHRFMT, sal_True ); |
| pRuby->SetCharFmtName( sTmp ); |
| pRuby->SetCharFmtId( 0 ); |
| if(sTmp.getLength()) |
| { |
| sal_uInt16 nId = SwStyleNameMapper::GetPoolIdFromUIName( sTmp, nsSwGetPoolIdFromName::GET_POOLID_CHRFMT ); |
| pRuby->SetCharFmtId(nId); |
| } |
| rStyleSet.Put(*pRuby); |
| delete pRuby; |
| } |
| else |
| throw lang::IllegalArgumentException(); |
| } |
| break; |
| } |
| case RES_PARATR_DROP: |
| { |
| if( MID_DROPCAP_CHAR_STYLE_NAME == nMemberId) |
| { |
| if(aValue.getValueType() == ::getCppuType((const OUString*)0)) |
| { |
| SfxItemSet& rStyleSet = rBase.GetItemSet(); |
| |
| SwFmtDrop* pDrop = 0; |
| const SfxPoolItem* pItem; |
| if(SFX_ITEM_SET == rStyleSet.GetItemState( RES_PARATR_DROP, sal_True, &pItem ) ) |
| pDrop = new SwFmtDrop(*((SwFmtDrop*)pItem)); |
| if(!pDrop) |
| pDrop = new SwFmtDrop(); |
| OUString uStyle; |
| aValue >>= uStyle; |
| String sStyle; |
| SwStyleNameMapper::FillUIName(uStyle, sStyle, nsSwGetPoolIdFromName::GET_POOLID_CHRFMT, sal_True ); |
| SwDocStyleSheet* pStyle = |
| (SwDocStyleSheet*)pDoc->GetDocShell()->GetStyleSheetPool()->Find(sStyle, SFX_STYLE_FAMILY_CHAR); |
| if(pStyle) |
| pDrop->SetCharFmt(pStyle->GetCharFmt()); |
| else |
| throw lang::IllegalArgumentException(); |
| rStyleSet.Put(*pDrop); |
| delete pDrop; |
| } |
| else |
| throw lang::IllegalArgumentException(); |
| |
| bDone = true; |
| } |
| break; |
| } |
| default: |
| { |
| // nothing to do |
| break; |
| } |
| } |
| |
| if(!bDone) |
| { |
| // default ItemSet handling |
| SfxItemSet& rStyleSet = rBase.GetItemSet(); |
| SfxItemSet aSet(*rStyleSet.GetPool(), rEntry.nWID, rEntry.nWID); |
| aSet.SetParent(&rStyleSet); |
| rPropSet.setPropertyValue(rEntry, aValue, aSet); |
| rStyleSet.Put(aSet); |
| |
| // --> OD 2006-10-18 #i70223# |
| if ( SFX_STYLE_FAMILY_PARA == eFamily && |
| rEntry.nWID == RES_PARATR_NUMRULE && |
| rBase.getNewBase().is() && rBase.getNewBase()->GetCollection() && |
| //rBase.getNewBase()->GetCollection()->GetOutlineLevel() < MAXLEVEL /* assigned to list level of outline style */) //#outline level,removed by zhaojianwei |
| rBase.getNewBase()->GetCollection()->IsAssignedToListLevelOfOutlineStyle() ) ////<-end,add by zhaojianwei |
| { |
| OUString sNewNumberingRuleName; |
| aValue >>= sNewNumberingRuleName; |
| String sTmp( sNewNumberingRuleName ); |
| if ( sNewNumberingRuleName.getLength() == 0 || sTmp != pDoc->GetOutlineNumRule()->GetName() ) |
| { |
| // delete assignment to list level of outline style. |
| //rBase.getNewBase()->GetCollection()->SetOutlineLevel( NO_NUMBERING ); //#outline level,removed by zhaojianwei |
| rBase.getNewBase()->GetCollection()->DeleteAssignmentToListLevelOfOutlineStyle(); //<-end,adde by zhaojianwei |
| } |
| } |
| } |
| } |
| /* -----------------------------18.04.01 13:29-------------------------------- |
| |
| ---------------------------------------------------------------------------*/ |
| void SAL_CALL SwXStyle::SetPropertyValues_Impl( |
| const uno::Sequence< OUString >& rPropertyNames, |
| const uno::Sequence< uno::Any >& rValues ) |
| throw( beans::UnknownPropertyException, beans::PropertyVetoException, lang::IllegalArgumentException, lang::WrappedTargetException, uno::RuntimeException) |
| { |
| if ( !m_pDoc ) |
| throw uno::RuntimeException(); |
| |
| sal_Int8 nPropSetId = PROPERTY_MAP_CHAR_STYLE; |
| |
| switch(eFamily) |
| { |
| case SFX_STYLE_FAMILY_PARA : nPropSetId = bIsConditional ? PROPERTY_MAP_CONDITIONAL_PARA_STYLE : PROPERTY_MAP_PARA_STYLE; break; |
| case SFX_STYLE_FAMILY_FRAME : nPropSetId = PROPERTY_MAP_FRAME_STYLE ;break; |
| case SFX_STYLE_FAMILY_PAGE : nPropSetId = PROPERTY_MAP_PAGE_STYLE ;break; |
| case SFX_STYLE_FAMILY_PSEUDO: nPropSetId = PROPERTY_MAP_NUM_STYLE ;break; |
| default: ; |
| } |
| |
| const SfxItemPropertySet* pPropSet = aSwMapProvider.GetPropertySet(nPropSetId); |
| const SfxItemPropertyMap *pMap = pPropSet->getPropertyMap(); |
| |
| if(rPropertyNames.getLength() != rValues.getLength()) |
| { |
| throw lang::IllegalArgumentException(); |
| } |
| |
| const OUString* pNames = rPropertyNames.getConstArray(); |
| const uno::Any* pValues = rValues.getConstArray(); |
| SwStyleBase_Impl aBaseImpl(*m_pDoc, sStyleName, &GetDoc()->GetDfltTxtFmtColl()->GetAttrSet()); //UUUU add pDfltTxtFmtColl as parent |
| |
| if(pBasePool) |
| { |
| sal_uInt16 nSaveMask = pBasePool->GetSearchMask(); |
| pBasePool->SetSearchMask(eFamily); |
| SfxStyleSheetBase* pBase = pBasePool->Find(sStyleName); |
| pBasePool->SetSearchMask(eFamily, nSaveMask ); |
| DBG_ASSERT(pBase, "where is the style?" ); |
| |
| if(pBase) |
| aBaseImpl.setNewBase(new SwDocStyleSheet(*(SwDocStyleSheet*)pBase)); |
| else |
| throw uno::RuntimeException(); |
| } |
| |
| for(sal_Int16 nProp = 0; nProp < rPropertyNames.getLength(); nProp++) |
| { |
| const SfxItemPropertySimpleEntry* pEntry = pMap->getByName(pNames[nProp]); |
| |
| if(!pEntry || |
| (!bIsConditional && pNames[nProp].equalsAsciiL(SW_PROP_NAME(UNO_NAME_PARA_STYLE_CONDITIONS)))) |
| throw beans::UnknownPropertyException(OUString ( RTL_CONSTASCII_USTRINGPARAM ( "Unknown property: " ) ) + pNames[nProp], static_cast < cppu::OWeakObject * > ( this ) ); |
| if ( pEntry->nFlags & beans::PropertyAttribute::READONLY) |
| throw beans::PropertyVetoException ( OUString ( RTL_CONSTASCII_USTRINGPARAM ( "Property is read-only: " ) ) + pNames[nProp], static_cast < cppu::OWeakObject * > ( this ) ); |
| |
| if(aBaseImpl.getNewBase().is()) |
| { |
| lcl_SetStyleProperty(*pEntry, *pPropSet, pValues[nProp], aBaseImpl, pBasePool, m_pDoc, eFamily); |
| } |
| else if(bIsDescriptor) |
| { |
| if(!pPropImpl->SetProperty(pNames[nProp], pValues[nProp])) |
| { |
| throw lang::IllegalArgumentException(); |
| } |
| } |
| else |
| { |
| throw uno::RuntimeException(); |
| } |
| } |
| |
| if(aBaseImpl.HasItemSet()) |
| { |
| aBaseImpl.getNewBase()->SetItemSet(aBaseImpl.GetItemSet()); |
| } |
| } |
| |
| void SwXStyle::setPropertyValues( |
| const uno::Sequence< OUString >& rPropertyNames, |
| const uno::Sequence< uno::Any >& rValues ) |
| throw(beans::PropertyVetoException, lang::IllegalArgumentException, lang::WrappedTargetException, uno::RuntimeException) |
| { |
| vos::OGuard aGuard(Application::GetSolarMutex()); |
| |
| // workaround for bad designed API |
| try |
| { |
| SetPropertyValues_Impl( rPropertyNames, rValues ); |
| } |
| catch (beans::UnknownPropertyException &rException) |
| { |
| // wrap the original (here not allowed) exception in |
| // a lang::WrappedTargetException that gets thrown instead. |
| lang::WrappedTargetException aWExc; |
| aWExc.TargetException <<= rException; |
| throw aWExc; |
| } |
| } |
| |
| |
| uno::Any lcl_GetStyleProperty( |
| const SfxItemPropertySimpleEntry& rEntry, |
| const SfxItemPropertySet& rPropSet, |
| SwStyleBase_Impl& rBase, |
| SfxStyleSheetBase* pBase, |
| SfxStyleFamily eFamily, |
| SwDoc *pDoc) |
| throw(uno::RuntimeException) |
| { |
| uno::Any aRet; |
| |
| if(FN_UNO_IS_PHYSICAL == rEntry.nWID) |
| { |
| sal_Bool bPhys = pBase != 0; |
| if(pBase) |
| { |
| bPhys = ((SwDocStyleSheet*)pBase)->IsPhysical(); |
| // The standard character format is not existing physically |
| if( bPhys && SFX_STYLE_FAMILY_CHAR == eFamily && |
| ((SwDocStyleSheet*)pBase)->GetCharFmt() && |
| ((SwDocStyleSheet*)pBase)->GetCharFmt()->IsDefault() ) |
| bPhys = sal_False; |
| } |
| aRet.setValue(&bPhys, ::getBooleanCppuType()); |
| } |
| else if(pBase) |
| { |
| if(!rBase.getNewBase().is()) |
| { |
| rBase.setNewBase(new SwDocStyleSheet( *(SwDocStyleSheet*)pBase )); |
| } |
| |
| //UUUU |
| const sal_uInt8 nMemberId(rEntry.nMemberId & (~SFX_METRIC_ITEM)); |
| |
| //UUUU adapted switch logic to a more readable state; removed goto's and made |
| // execution of standard setting of proerty in ItemSet dependent of this variable |
| bool bDone(false); |
| |
| switch(rEntry.nWID) |
| { |
| case RES_PAPER_BIN: |
| { |
| SfxItemSet& rSet = rBase.GetItemSet(); |
| rPropSet.getPropertyValue(rEntry, rSet, aRet); |
| sal_Int8 nBin = 0; |
| aRet >>= nBin; |
| if ( nBin == -1 ) |
| aRet <<= OUString ( RTL_CONSTASCII_USTRINGPARAM ( "[From printer settings]" ) ); |
| else |
| { |
| SfxPrinter *pPrinter = pDoc->getPrinter( false ); |
| OUString sTmp; |
| if (pPrinter ) |
| sTmp = pPrinter->GetPaperBinName ( nBin ); |
| aRet <<= sTmp; |
| } |
| |
| bDone = true; |
| break; |
| } |
| case FN_UNO_NUM_RULES: //Sonderbehandlung fuer das SvxNumRuleItem: |
| { |
| const SwNumRule* pRule = rBase.getNewBase()->GetNumRule(); |
| DBG_ASSERT(pRule, "Wo ist die NumRule?"); |
| uno::Reference< container::XIndexReplace > xRules = new SwXNumberingRules(*pRule); |
| |
| aRet.setValue(&xRules, ::getCppuType((uno::Reference<container::XIndexReplace>*)0)); |
| bDone = true; |
| break; |
| } |
| break; |
| //case FN_UNO_DEFAULT_OUTLINE_LEVEL: //#outline level,removed by zahojianwei |
| //{ |
| // DBG_ASSERT( SFX_STYLE_FAMILY_PARA == eFamily, "only paras" ); |
| // sal_uInt8 nLevel = rBase.getNewBase()->GetCollection()->GetOutlineLevel(); |
| // if( nLevel != NO_NUMBERING ) |
| // aRet <<= static_cast<sal_Int8>( nLevel ); |
| // bDone = true; |
| // break; |
| //} |
| case RES_PARATR_OUTLINELEVEL: //add by zahojianwei |
| { |
| DBG_ASSERT( SFX_STYLE_FAMILY_PARA == eFamily, "only paras" ); |
| int nLevel = rBase.getNewBase()->GetCollection()->GetAttrOutlineLevel(); |
| |
| aRet <<= static_cast<sal_Int16>( nLevel ); |
| bDone = true; |
| break; |
| } //<-end,zhaojianwei |
| case FN_UNO_FOLLOW_STYLE: |
| { |
| String aString; |
| |
| SwStyleNameMapper::FillProgName(rBase.getNewBase()->GetFollow(), aString, lcl_GetSwEnumFromSfxEnum ( eFamily ), sal_True); |
| aRet <<= OUString( aString ); |
| bDone = true; |
| break; |
| } |
| case RES_PAGEDESC : |
| { |
| if( MID_PAGEDESC_PAGEDESCNAME == nMemberId) |
| { |
| // Sonderbehandlung RES_PAGEDESC |
| const SfxPoolItem* pItem; |
| if(SFX_ITEM_SET == rBase.GetItemSet().GetItemState( RES_PAGEDESC, sal_True, &pItem ) ) |
| { |
| const SwPageDesc* pDesc = ((const SwFmtPageDesc*)pItem)->GetPageDesc(); |
| if(pDesc) |
| { |
| String aString; |
| SwStyleNameMapper::FillProgName(pDesc->GetName(), aString, nsSwGetPoolIdFromName::GET_POOLID_PAGEDESC, sal_True ); |
| aRet <<= OUString( aString ); |
| } |
| } |
| |
| bDone = true; |
| } |
| |
| break; |
| } |
| case FN_UNO_IS_AUTO_UPDATE: |
| { |
| sal_Bool bAuto = sal_False; |
| if(SFX_STYLE_FAMILY_PARA == eFamily) |
| bAuto = rBase.getNewBase()->GetCollection()->IsAutoUpdateFmt(); |
| else if(SFX_STYLE_FAMILY_FRAME == eFamily) |
| bAuto = rBase.getNewBase()->GetFrmFmt()->IsAutoUpdateFmt(); |
| aRet.setValue(&bAuto, ::getBooleanCppuType()); |
| |
| bDone = true; |
| break; |
| } |
| case FN_UNO_DISPLAY_NAME: |
| { |
| OUString sName(rBase.getNewBase()->GetDisplayName()); |
| aRet <<= sName; |
| |
| bDone = true; |
| break; |
| } |
| case FN_UNO_PARA_STYLE_CONDITIONS: |
| { |
| DBG_ASSERT(COND_COMMAND_COUNT == 28, |
| "invalid size of comman count?"); |
| //SfxItemSet& rStyleSet = rBase.GetItemSet(); |
| uno::Sequence< beans::NamedValue > aSeq(COND_COMMAND_COUNT); |
| beans::NamedValue *pSeq = aSeq.getArray(); |
| |
| SwFmt *pFmt = ((SwDocStyleSheet*)pBase)->GetCollection(); |
| const CommandStruct *pCmds = SwCondCollItem::GetCmds(); |
| for (sal_uInt16 n = 0; n < COND_COMMAND_COUNT; ++n) |
| { |
| String aStyleName; |
| |
| const SwCollCondition* pCond = 0; |
| if( pFmt && RES_CONDTXTFMTCOLL == pFmt->Which() && |
| 0 != ( pCond = ((SwConditionTxtFmtColl*)pFmt)-> |
| HasCondition( SwCollCondition( 0, pCmds[n].nCnd, pCmds[n].nSubCond ) ) ) |
| && pCond->GetTxtFmtColl() ) |
| { |
| // get programmatic style name from UI style name |
| aStyleName = pCond->GetTxtFmtColl()->GetName(); |
| SwStyleNameMapper::FillProgName(aStyleName, aStyleName, lcl_GetSwEnumFromSfxEnum ( eFamily ), sal_True); |
| } |
| |
| pSeq[n].Name = GetCommandContextByIndex(n); |
| pSeq[n].Value <<= rtl::OUString( aStyleName ); |
| } |
| aRet <<= aSeq; |
| |
| bDone = true; |
| break; |
| } |
| case FN_UNO_CATEGORY: |
| { |
| sal_uInt16 nPoolId = rBase.getNewBase()->GetCollection()->GetPoolFmtId(); |
| short nRet = -1; |
| |
| switch ( COLL_GET_RANGE_BITS & nPoolId ) |
| { |
| case COLL_TEXT_BITS: |
| nRet = style::ParagraphStyleCategory::TEXT; |
| break; |
| case COLL_DOC_BITS: |
| nRet = style::ParagraphStyleCategory::CHAPTER; |
| break; |
| case COLL_LISTS_BITS: |
| nRet = style::ParagraphStyleCategory::LIST; |
| break; |
| case COLL_REGISTER_BITS: |
| nRet = style::ParagraphStyleCategory::INDEX; |
| break; |
| case COLL_EXTRA_BITS: |
| nRet = style::ParagraphStyleCategory::EXTRA; |
| break; |
| case COLL_HTML_BITS: |
| nRet = style::ParagraphStyleCategory::HTML; |
| break; |
| } |
| |
| aRet <<= nRet; |
| bDone = true; |
| break; |
| } |
| case SID_SWREGISTER_COLLECTION: |
| { |
| const SwPageDesc *pPageDesc = rBase.getNewBase()->GetPageDesc(); |
| const SwTxtFmtColl* pCol = 0; |
| String aString; |
| if( pPageDesc ) |
| pCol = pPageDesc->GetRegisterFmtColl(); |
| if( pCol ) |
| SwStyleNameMapper::FillProgName( |
| pCol->GetName(), aString, nsSwGetPoolIdFromName::GET_POOLID_TXTCOLL, sal_True ); |
| |
| aRet <<= OUString ( aString ); |
| bDone = true; |
| break; |
| } |
| case RES_BACKGROUND: |
| { |
| //UUUU |
| const SfxItemSet& rSet = rBase.GetItemSet(); |
| const SvxBrushItem aOriginalBrushItem(getSvxBrushItemFromSourceSet(rSet, RES_BACKGROUND)); |
| |
| if(!aOriginalBrushItem.QueryValue(aRet, nMemberId)) |
| { |
| OSL_ENSURE(false, "Error getting attribute from RES_BACKGROUND (!)"); |
| } |
| |
| bDone = true; |
| break; |
| } |
| case OWN_ATTR_FILLBMP_MODE: |
| { |
| //UUUU |
| const SfxItemSet& rSet = rBase.GetItemSet(); |
| const XFillBmpStretchItem* pStretchItem = dynamic_cast< const XFillBmpStretchItem* >(&rSet.Get(XATTR_FILLBMP_STRETCH)); |
| const XFillBmpTileItem* pTileItem = dynamic_cast< const XFillBmpTileItem* >(&rSet.Get(XATTR_FILLBMP_TILE)); |
| |
| if( pTileItem && pTileItem->GetValue() ) |
| { |
| aRet <<= drawing::BitmapMode_REPEAT; |
| } |
| else if( pStretchItem && pStretchItem->GetValue() ) |
| { |
| aRet <<= drawing::BitmapMode_STRETCH; |
| } |
| else |
| { |
| aRet <<= drawing::BitmapMode_NO_REPEAT; |
| } |
| |
| bDone = true; |
| break; |
| } |
| default: |
| { |
| // nothing to do as default |
| break; |
| } |
| } |
| |
| if(!bDone) |
| { |
| SfxItemSet& rSet = rBase.GetItemSet(); |
| rPropSet.getPropertyValue(rEntry, rSet, aRet); |
| |
| //UUUU |
| if(rEntry.pType && *(rEntry.pType) == ::getCppuType((const sal_Int16*)0) && *(rEntry.pType) != aRet.getValueType()) |
| { |
| // since the sfx uint16 item now exports a sal_Int32, we may have to fix this here |
| sal_Int32 nValue = 0; |
| aRet >>= nValue; |
| aRet <<= (sal_Int16)nValue; |
| } |
| |
| //UUUU check for needed metric translation |
| if(rEntry.nMemberId & SFX_METRIC_ITEM) |
| { |
| bool bDoIt(true); |
| |
| if(XATTR_FILLBMP_SIZEX == rEntry.nWID || XATTR_FILLBMP_SIZEY == rEntry.nWID) |
| { |
| // exception: If these ItemTypes are used, do not convert when these are negative |
| // since this means they are intended as percent values |
| sal_Int32 nValue = 0; |
| |
| if(aRet >>= nValue) |
| { |
| bDoIt = nValue > 0; |
| } |
| } |
| |
| if(bDoIt && pDoc) |
| { |
| const SfxItemPool& rPool = pDoc->GetAttrPool(); |
| const SfxMapUnit eMapUnit(rPool.GetMetric(rEntry.nWID)); |
| |
| if(eMapUnit != SFX_MAPUNIT_100TH_MM) |
| { |
| SvxUnoConvertToMM(eMapUnit, aRet); |
| } |
| } |
| } |
| } |
| } |
| else |
| { |
| throw uno::RuntimeException(); |
| } |
| |
| return aRet; |
| } |
| /* -----------------------------19.04.01 09:26-------------------------------- |
| |
| ---------------------------------------------------------------------------*/ |
| uno::Sequence< uno::Any > SAL_CALL SwXStyle::GetPropertyValues_Impl( |
| const uno::Sequence< OUString > & rPropertyNames ) |
| throw( beans::UnknownPropertyException, lang::WrappedTargetException, uno::RuntimeException ) |
| { |
| if ( !m_pDoc ) |
| throw uno::RuntimeException(); |
| |
| sal_Int8 nPropSetId = PROPERTY_MAP_CHAR_STYLE; |
| |
| switch(eFamily) |
| { |
| case SFX_STYLE_FAMILY_PARA : nPropSetId = bIsConditional ? PROPERTY_MAP_CONDITIONAL_PARA_STYLE : PROPERTY_MAP_PARA_STYLE; break; |
| case SFX_STYLE_FAMILY_FRAME : nPropSetId = PROPERTY_MAP_FRAME_STYLE ;break; |
| case SFX_STYLE_FAMILY_PAGE : nPropSetId = PROPERTY_MAP_PAGE_STYLE ;break; |
| case SFX_STYLE_FAMILY_PSEUDO: nPropSetId = PROPERTY_MAP_NUM_STYLE ;break; |
| default: ; |
| } |
| |
| const SfxItemPropertySet* pPropSet = aSwMapProvider.GetPropertySet(nPropSetId); |
| const SfxItemPropertyMap *pMap = pPropSet->getPropertyMap(); |
| const OUString* pNames = rPropertyNames.getConstArray(); |
| uno::Sequence< uno::Any > aRet(rPropertyNames.getLength()); |
| uno::Any* pRet = aRet.getArray(); |
| SwStyleBase_Impl aBase(*m_pDoc, sStyleName, &GetDoc()->GetDfltTxtFmtColl()->GetAttrSet()); //UUUU add pDfltTxtFmtColl as parent |
| SfxStyleSheetBase* pBase = 0; |
| |
| for(sal_Int32 nProp = 0; nProp < rPropertyNames.getLength(); nProp++) |
| { |
| const SfxItemPropertySimpleEntry* pEntry = pMap->getByName( pNames[nProp]); |
| if(!pEntry || |
| (!bIsConditional && pNames[nProp].equalsAsciiL(SW_PROP_NAME(UNO_NAME_PARA_STYLE_CONDITIONS)))) |
| throw beans::UnknownPropertyException(OUString ( RTL_CONSTASCII_USTRINGPARAM ( "Unknown property: " ) ) + pNames[nProp], static_cast < cppu::OWeakObject * > ( this ) ); |
| |
| if(pBasePool) |
| { |
| if(!pBase) |
| { |
| sal_uInt16 nSaveMask = pBasePool->GetSearchMask(); |
| pBasePool->SetSearchMask(eFamily, SFXSTYLEBIT_ALL ); |
| pBase = pBasePool->Find(sStyleName); |
| pBasePool->SetSearchMask(eFamily, nSaveMask ); |
| } |
| |
| pRet[nProp] = lcl_GetStyleProperty(*pEntry, *pPropSet, aBase, pBase, eFamily, GetDoc() ); |
| } |
| else if(bIsDescriptor) |
| { |
| uno::Any *pAny = 0; |
| pPropImpl->GetProperty ( pNames[nProp], pAny ); |
| if( !pAny ) |
| { |
| sal_Bool bExcept = sal_False; |
| switch( eFamily ) |
| { |
| case SFX_STYLE_FAMILY_PSEUDO: |
| bExcept = sal_True; |
| break; |
| case SFX_STYLE_FAMILY_PARA: |
| case SFX_STYLE_FAMILY_PAGE: |
| pPropImpl->GetProperty ( pNames[nProp], mxStyleData, pRet[ nProp ] ); |
| break; |
| case SFX_STYLE_FAMILY_CHAR: |
| case SFX_STYLE_FAMILY_FRAME : |
| { |
| if (pEntry->nWID >= POOLATTR_BEGIN && pEntry->nWID < RES_UNKNOWNATR_END ) |
| { |
| SwFmt * pFmt; |
| if ( eFamily == SFX_STYLE_FAMILY_CHAR ) |
| pFmt = m_pDoc->GetDfltCharFmt(); |
| else |
| pFmt = m_pDoc->GetDfltFrmFmt(); |
| const SwAttrPool * pPool = pFmt->GetAttrSet().GetPool(); |
| const SfxPoolItem & rItem = pPool->GetDefaultItem ( pEntry->nWID ); |
| rItem.QueryValue ( pRet[nProp], pEntry->nMemberId ); |
| } |
| else |
| bExcept = sal_True; |
| } |
| break; |
| |
| default: |
| ; |
| } |
| if (bExcept ) |
| { |
| uno::RuntimeException aExcept; |
| aExcept.Message = OUString ( RTL_CONSTASCII_USTRINGPARAM ( "No default value for: " ) ) + pNames[nProp]; |
| throw aExcept; |
| } |
| } |
| else |
| pRet [ nProp ] = *pAny; |
| } |
| else |
| throw uno::RuntimeException(); |
| } |
| return aRet; |
| } |
| /* -----------------------------04.11.03 09:26-------------------------------- |
| |
| ---------------------------------------------------------------------------*/ |
| uno::Sequence< uno::Any > SwXStyle::getPropertyValues( |
| const uno::Sequence< OUString >& rPropertyNames ) |
| throw(uno::RuntimeException) |
| { |
| vos::OGuard aGuard(Application::GetSolarMutex()); |
| uno::Sequence< uno::Any > aValues; |
| |
| // workaround for bad designed API |
| try |
| { |
| aValues = GetPropertyValues_Impl( rPropertyNames ); |
| } |
| catch (beans::UnknownPropertyException &) |
| { |
| throw uno::RuntimeException(OUString ( RTL_CONSTASCII_USTRINGPARAM ( "Unknown property exception caught" ) ), static_cast < cppu::OWeakObject * > ( this ) ); |
| } |
| catch (lang::WrappedTargetException &) |
| { |
| throw uno::RuntimeException(OUString ( RTL_CONSTASCII_USTRINGPARAM ( "WrappedTargetException caught" ) ), static_cast < cppu::OWeakObject * > ( this ) ); |
| } |
| |
| return aValues; |
| } |
| /*-- 18.04.01 13:07:29--------------------------------------------------- |
| -----------------------------------------------------------------------*/ |
| void SwXStyle::addPropertiesChangeListener( |
| const uno::Sequence< OUString >& /*aPropertyNames*/, |
| const uno::Reference< beans::XPropertiesChangeListener >& /*xListener*/ ) |
| throw(uno::RuntimeException) |
| { |
| } |
| /*-- 18.04.01 13:07:30--------------------------------------------------- |
| |
| -----------------------------------------------------------------------*/ |
| void SwXStyle::removePropertiesChangeListener( |
| const uno::Reference< beans::XPropertiesChangeListener >& /*xListener*/ ) |
| throw(uno::RuntimeException) |
| { |
| } |
| /*-- 18.04.01 13:07:30--------------------------------------------------- |
| |
| -----------------------------------------------------------------------*/ |
| void SwXStyle::firePropertiesChangeEvent( |
| const uno::Sequence< OUString >& /*aPropertyNames*/, |
| const uno::Reference< beans::XPropertiesChangeListener >& /*xListener*/ ) |
| throw(uno::RuntimeException) |
| { |
| } |
| /*-- 17.12.98 08:26:53--------------------------------------------------- |
| |
| -----------------------------------------------------------------------*/ |
| void SwXStyle::setPropertyValue( |
| const OUString& rPropertyName, |
| const uno::Any& rValue) |
| throw( beans::UnknownPropertyException, beans::PropertyVetoException, lang::IllegalArgumentException, lang::WrappedTargetException, uno::RuntimeException) |
| { |
| vos::OGuard aGuard(Application::GetSolarMutex()); |
| const uno::Sequence<OUString> aProperties(&rPropertyName, 1); |
| const uno::Sequence<uno::Any> aValues(&rValue, 1); |
| |
| SetPropertyValues_Impl( aProperties, aValues ); |
| } |
| /*-- 17.12.98 08:26:53--------------------------------------------------- |
| |
| -----------------------------------------------------------------------*/ |
| uno::Any SwXStyle::getPropertyValue( |
| const OUString& rPropertyName) |
| throw( beans::UnknownPropertyException, lang::WrappedTargetException, uno::RuntimeException ) |
| { |
| vos::OGuard aGuard(Application::GetSolarMutex()); |
| const uno::Sequence<OUString> aProperties(&rPropertyName, 1); |
| return GetPropertyValues_Impl(aProperties).getConstArray()[0]; |
| |
| } |
| /*-- 17.12.98 08:26:53--------------------------------------------------- |
| |
| -----------------------------------------------------------------------*/ |
| void SwXStyle::addPropertyChangeListener( |
| const OUString& /*rPropertyName*/, |
| const uno::Reference< beans::XPropertyChangeListener > & /*xListener*/) |
| throw( beans::UnknownPropertyException, lang::WrappedTargetException, uno::RuntimeException ) |
| { |
| DBG_WARNING("not implemented"); |
| } |
| /*-- 17.12.98 08:26:54--------------------------------------------------- |
| |
| -----------------------------------------------------------------------*/ |
| void SwXStyle::removePropertyChangeListener( |
| const OUString& /*rPropertyName*/, |
| const uno::Reference< beans::XPropertyChangeListener > & /*xListener*/) |
| throw( beans::UnknownPropertyException, lang::WrappedTargetException, uno::RuntimeException ) |
| { |
| DBG_WARNING("not implemented"); |
| } |
| /*-- 17.12.98 08:26:54--------------------------------------------------- |
| |
| -----------------------------------------------------------------------*/ |
| void SwXStyle::addVetoableChangeListener( |
| const OUString& /*rPropertyName*/, |
| const uno::Reference< beans::XVetoableChangeListener > & /*xListener*/) |
| throw( beans::UnknownPropertyException, lang::WrappedTargetException, uno::RuntimeException ) |
| { |
| DBG_WARNING("not implemented"); |
| } |
| /*-- 17.12.98 08:26:54--------------------------------------------------- |
| |
| -----------------------------------------------------------------------*/ |
| void SwXStyle::removeVetoableChangeListener( |
| const OUString& /*rPropertyName*/, |
| const uno::Reference< beans::XVetoableChangeListener > & /*xListener*/) |
| throw( beans::UnknownPropertyException, lang::WrappedTargetException, uno::RuntimeException ) |
| { |
| DBG_WARNING("not implemented"); |
| } |
| |
| /*-- 08.03.99 10:50:26--------------------------------------------------- |
| |
| -----------------------------------------------------------------------*/ |
| beans::PropertyState SwXStyle::getPropertyState( |
| const OUString& rPropertyName) |
| throw( beans::UnknownPropertyException, uno::RuntimeException ) |
| { |
| vos::OGuard aGuard(Application::GetSolarMutex()); |
| uno::Sequence< OUString > aNames(1); |
| OUString* pNames = aNames.getArray(); |
| pNames[0] = rPropertyName; |
| uno::Sequence< beans::PropertyState > aStates = getPropertyStates(aNames); |
| return aStates.getConstArray()[0]; |
| } |
| /*-- 08.03.99 10:50:27--------------------------------------------------- |
| |
| -----------------------------------------------------------------------*/ |
| |
| uno::Sequence< beans::PropertyState > SwXStyle::getPropertyStates( |
| const uno::Sequence< OUString >& rPropertyNames) |
| throw( beans::UnknownPropertyException, uno::RuntimeException ) |
| { |
| vos::OGuard aGuard(Application::GetSolarMutex()); |
| uno::Sequence< beans::PropertyState > aRet(rPropertyNames.getLength()); |
| beans::PropertyState* pStates = aRet.getArray(); |
| |
| if(pBasePool) |
| { |
| pBasePool->SetSearchMask(eFamily ); |
| SfxStyleSheetBase* pBase = pBasePool->Find(sStyleName); |
| DBG_ASSERT(pBase, "where is the style?" ); |
| |
| if(pBase) |
| { |
| const OUString* pNames = rPropertyNames.getConstArray(); |
| rtl::Reference< SwDocStyleSheet > xStyle( new SwDocStyleSheet( *(SwDocStyleSheet*)pBase ) ); |
| sal_Int8 nPropSetId = PROPERTY_MAP_CHAR_STYLE; |
| |
| switch(eFamily) |
| { |
| case SFX_STYLE_FAMILY_PARA : nPropSetId = bIsConditional ? PROPERTY_MAP_CONDITIONAL_PARA_STYLE : PROPERTY_MAP_PARA_STYLE; break; |
| case SFX_STYLE_FAMILY_FRAME : nPropSetId = PROPERTY_MAP_FRAME_STYLE ;break; |
| case SFX_STYLE_FAMILY_PAGE : nPropSetId = PROPERTY_MAP_PAGE_STYLE; break; |
| case SFX_STYLE_FAMILY_PSEUDO: nPropSetId = PROPERTY_MAP_NUM_STYLE ;break; |
| default: ; |
| } |
| |
| const SfxItemPropertySet* pPropSet = aSwMapProvider.GetPropertySet(nPropSetId); |
| const SfxItemPropertyMap *pMap = pPropSet->getPropertyMap(); |
| const SfxItemSet& rSet = xStyle->GetItemSet(); |
| |
| for(sal_Int32 i = 0; i < rPropertyNames.getLength(); i++) |
| { |
| const String& rPropName = pNames[i]; |
| const SfxItemPropertySimpleEntry* pEntry = pMap->getByName( rPropName); |
| bool bDone(false); |
| |
| if(!pEntry) |
| { |
| throw beans::UnknownPropertyException(OUString ( RTL_CONSTASCII_USTRINGPARAM ( "Unknown property: " ) ) + rPropName, static_cast < cppu::OWeakObject * > ( this ) ); |
| } |
| |
| if( FN_UNO_NUM_RULES == pEntry->nWID || FN_UNO_FOLLOW_STYLE == pEntry->nWID ) |
| { |
| // handle NumRules first, done |
| pStates[i] = beans::PropertyState_DIRECT_VALUE; |
| bDone = true; |
| } |
| |
| // allow to retarget the SfxItemSet working on, default correctly. Only |
| // use pSourceSet below this point (except in header/footer processing) |
| const SfxItemSet* pSourceSet = &rSet; |
| |
| if(!bDone) |
| { |
| // check for Header/Footer entry |
| const bool bHeader(SFX_STYLE_FAMILY_PAGE == eFamily && rPropName.EqualsAscii("Header", 0, 6)); |
| const bool bFooter(SFX_STYLE_FAMILY_PAGE == eFamily && rPropName.EqualsAscii("Footer", 0, 6)); |
| |
| if(bHeader || bFooter) |
| { |
| const SvxSetItem* pSetItem; |
| |
| if(SFX_ITEM_SET == rSet.GetItemState( |
| bFooter ? SID_ATTR_PAGE_FOOTERSET : SID_ATTR_PAGE_HEADERSET, |
| sal_False, |
| (const SfxPoolItem**)&pSetItem)) |
| { |
| // retarget the SfxItemSet to the HeaderFooter SfxSetItem's SfxItenSet |
| pSourceSet = &pSetItem->GetItemSet(); |
| } |
| else |
| { |
| // if no SetItem, value is ambigous and we are done |
| pStates[i] = beans::PropertyState_AMBIGUOUS_VALUE; |
| bDone = true; |
| } |
| } |
| } |
| |
| if(!bDone && OWN_ATTR_FILLBMP_MODE == pEntry->nWID) |
| { |
| //UUUU |
| if(SFX_ITEM_SET == pSourceSet->GetItemState(XATTR_FILLBMP_STRETCH, false) |
| || SFX_ITEM_SET == pSourceSet->GetItemState(XATTR_FILLBMP_TILE, false)) |
| { |
| pStates[i] = beans::PropertyState_DIRECT_VALUE; |
| } |
| else |
| { |
| pStates[i] = beans::PropertyState_AMBIGUOUS_VALUE; |
| } |
| |
| bDone = true; |
| } |
| |
| //UUUU for FlyFrames we need to mark all properties from type RES_BACKGROUND |
| // as beans::PropertyState_DIRECT_VALUE to let users of this property call |
| // getPropertyValue where the member properties will be mapped from the |
| // fill attributes to the according SvxBrushItem entries |
| if(!bDone && RES_BACKGROUND == pEntry->nWID |
| && SWUnoHelper::needToMapFillItemsToSvxBrushItemTypes(*pSourceSet)) |
| { |
| pStates[i] = beans::PropertyState_DIRECT_VALUE; |
| bDone = true; |
| } |
| |
| if(!bDone) |
| { |
| pStates[i] = pPropSet->getPropertyState(*pEntry, *pSourceSet); |
| |
| if(SFX_STYLE_FAMILY_PAGE == eFamily && SID_ATTR_PAGE_SIZE == pEntry->nWID && beans::PropertyState_DIRECT_VALUE == pStates[i]) |
| { |
| const SvxSizeItem& rSize = static_cast <const SvxSizeItem&>( rSet.Get(SID_ATTR_PAGE_SIZE)); |
| sal_uInt8 nMemberId = pEntry->nMemberId & 0x7f; |
| |
| if((LONG_MAX == rSize.GetSize().Width() && |
| (MID_SIZE_WIDTH == nMemberId || |
| MID_SIZE_SIZE == nMemberId)) || |
| (LONG_MAX == rSize.GetSize().Height() && |
| MID_SIZE_HEIGHT == nMemberId)) |
| { |
| pStates[i] = beans::PropertyState_DEFAULT_VALUE; |
| } |
| } |
| } |
| } |
| } |
| else |
| { |
| throw uno::RuntimeException(); |
| } |
| } |
| else |
| { |
| throw uno::RuntimeException(); |
| } |
| |
| return aRet; |
| } |
| /*-- 08.03.99 10:50:27--------------------------------------------------- |
| |
| -----------------------------------------------------------------------*/ |
| void SwXStyle::setPropertyToDefault( |
| const OUString& rPropertyName) |
| throw( beans::UnknownPropertyException, uno::RuntimeException ) |
| { |
| const uno::Sequence < OUString > aSequence(&rPropertyName,1); |
| setPropertiesToDefault(aSequence); |
| } |
| |
| void SAL_CALL SwXStyle::setPropertiesToDefault( |
| const uno::Sequence< OUString >& aPropertyNames ) |
| throw (beans::UnknownPropertyException, uno::RuntimeException) |
| { |
| vos::OGuard aGuard(Application::GetSolarMutex()); |
| SwFmt *pTargetFmt = 0; |
| |
| if(pBasePool) |
| { |
| pBasePool->SetSearchMask(eFamily); |
| SfxStyleSheetBase* pBase = pBasePool->Find(sStyleName); |
| DBG_ASSERT(pBase, "Where is the style?"); |
| |
| if(pBase) |
| { |
| rtl::Reference< SwDocStyleSheet > xStyle(new SwDocStyleSheet(*(SwDocStyleSheet*)pBase)); |
| switch(eFamily) |
| { |
| case SFX_STYLE_FAMILY_CHAR: |
| pTargetFmt = xStyle->GetCharFmt(); |
| break; |
| |
| case SFX_STYLE_FAMILY_PARA: |
| pTargetFmt = xStyle->GetCollection(); |
| break; |
| |
| case SFX_STYLE_FAMILY_FRAME: |
| pTargetFmt = xStyle->GetFrmFmt(); |
| break; |
| |
| case SFX_STYLE_FAMILY_PAGE: |
| { |
| sal_uInt16 nPgDscPos = USHRT_MAX; |
| SwPageDesc *pDesc = m_pDoc->FindPageDescByName(xStyle->GetPageDesc()->GetName(),&nPgDscPos); |
| |
| if(pDesc) |
| { |
| pTargetFmt = &pDesc->GetMaster(); |
| } |
| break; |
| } |
| case SFX_STYLE_FAMILY_PSEUDO: |
| break; |
| default: ; |
| } |
| } |
| } |
| |
| sal_Int8 nPropSetId = PROPERTY_MAP_CHAR_STYLE; |
| |
| switch(eFamily) |
| { |
| case SFX_STYLE_FAMILY_PARA: nPropSetId = bIsConditional ? PROPERTY_MAP_CONDITIONAL_PARA_STYLE : PROPERTY_MAP_PARA_STYLE; break; |
| case SFX_STYLE_FAMILY_FRAME: nPropSetId = PROPERTY_MAP_FRAME_STYLE; break; |
| case SFX_STYLE_FAMILY_PAGE: nPropSetId = PROPERTY_MAP_PAGE_STYLE; break; |
| case SFX_STYLE_FAMILY_PSEUDO: nPropSetId = PROPERTY_MAP_NUM_STYLE; break; |
| default: ; |
| } |
| |
| const SfxItemPropertySet* pPropSet = aSwMapProvider.GetPropertySet(nPropSetId); |
| const SfxItemPropertyMap *pMap = pPropSet->getPropertyMap(); |
| const OUString* pNames = aPropertyNames.getConstArray(); |
| |
| if(pTargetFmt) |
| { |
| for(sal_Int32 nProp = 0,nEnd = aPropertyNames.getLength(); nProp < nEnd; nProp++) |
| { |
| const SfxItemPropertySimpleEntry* pEntry = pMap->getByName(pNames[nProp]); |
| |
| if(!pEntry) |
| { |
| throw beans::UnknownPropertyException(OUString(RTL_CONSTASCII_USTRINGPARAM("Property is unknown: ")) + pNames[nProp],static_cast <cppu::OWeakObject *> (this)); |
| } |
| |
| if(pEntry->nWID == FN_UNO_FOLLOW_STYLE || pEntry->nWID == FN_UNO_NUM_RULES) |
| { |
| throw uno::RuntimeException(OUString(RTL_CONSTASCII_USTRINGPARAM("Cannot reset: ")) + pNames[nProp],static_cast <cppu::OWeakObject *> (this)); |
| } |
| |
| if(pEntry->nFlags & beans::PropertyAttribute::READONLY) |
| { |
| throw uno::RuntimeException(OUString(RTL_CONSTASCII_USTRINGPARAM("setPropertiesToDefault: property is read-only: ")) + pNames[nProp],static_cast <cppu::OWeakObject *> (this)); |
| } |
| |
| if(pEntry->nWID == RES_PARATR_OUTLINELEVEL) |
| { |
| static_cast<SwTxtFmtColl*>(pTargetFmt)->DeleteAssignmentToListLevelOfOutlineStyle(); |
| } |
| else |
| { |
| pTargetFmt->ResetFmtAttr(pEntry->nWID); |
| } |
| |
| if(OWN_ATTR_FILLBMP_MODE == pEntry->nWID) |
| { |
| //UUUU |
| SwDoc* pDoc = pTargetFmt->GetDoc(); |
| SfxItemSet aSet(pDoc->GetAttrPool(), XATTR_FILL_FIRST, XATTR_FILL_LAST); |
| aSet.SetParent(&pTargetFmt->GetAttrSet()); |
| |
| aSet.ClearItem(XATTR_FILLBMP_STRETCH); |
| aSet.ClearItem(XATTR_FILLBMP_TILE); |
| |
| pTargetFmt->SetFmtAttr(aSet); |
| } |
| } |
| } |
| else if(bIsDescriptor) |
| { |
| for(sal_Int32 nProp = 0,nEnd = aPropertyNames.getLength(); nProp < nEnd; nProp++) |
| { |
| pPropImpl->ClearProperty(pNames[nProp]); |
| } |
| } |
| } |
| |
| void SAL_CALL SwXStyle::setAllPropertiesToDefault() |
| throw (uno::RuntimeException) |
| { |
| vos::OGuard aGuard(Application::GetSolarMutex()); |
| |
| if(pBasePool) |
| { |
| pBasePool->SetSearchMask(eFamily); |
| SfxStyleSheetBase* pBase = pBasePool->Find(sStyleName); |
| DBG_ASSERT(pBase, "where is the style, you fiend!?"); |
| |
| if(pBase) |
| { |
| rtl::Reference< SwDocStyleSheet > xStyle( new SwDocStyleSheet( *(SwDocStyleSheet*)pBase ) ); |
| SwFmt *pTargetFmt = 0; |
| sal_uInt16 nPgDscPos = USHRT_MAX; |
| |
| switch(eFamily) |
| { |
| case SFX_STYLE_FAMILY_CHAR: |
| pTargetFmt = xStyle->GetCharFmt(); |
| break; |
| |
| case SFX_STYLE_FAMILY_PARA: |
| { |
| pTargetFmt = xStyle->GetCollection(); |
| |
| if(xStyle->GetCollection()) |
| { |
| // xStyle->GetCollection()->SetOutlineLevel( NO_NUMBERING ); //#outline level,removed by zhaojianwei |
| xStyle->GetCollection()->DeleteAssignmentToListLevelOfOutlineStyle(); //<-end,add by zhaojianwei |
| } |
| break; |
| } |
| |
| case SFX_STYLE_FAMILY_FRAME: |
| pTargetFmt = xStyle->GetFrmFmt(); |
| break; |
| |
| case SFX_STYLE_FAMILY_PAGE: |
| { |
| SwPageDesc *pDesc = m_pDoc->FindPageDescByName(xStyle->GetPageDesc()->GetName(),&nPgDscPos); |
| |
| if(pDesc) |
| { |
| pTargetFmt = &pDesc->GetMaster(); |
| pDesc->SetUseOn(nsUseOnPage::PD_ALL); |
| } |
| break; |
| } |
| |
| case SFX_STYLE_FAMILY_PSEUDO: |
| break; |
| |
| default: ; |
| } |
| |
| if(pTargetFmt) |
| { |
| if(USHRT_MAX != nPgDscPos) |
| { |
| SwPageDesc& rPageDesc = m_pDoc->_GetPageDesc(nPgDscPos); |
| rPageDesc.ResetAllMasterAttr(); |
| |
| SvxLRSpaceItem aLR(RES_LR_SPACE); |
| sal_Int32 nSize = GetMetricVal(CM_1) * 2; |
| aLR.SetLeft(nSize); |
| aLR.SetLeft(nSize); |
| SvxULSpaceItem aUL(RES_UL_SPACE); |
| aUL.SetUpper(static_cast <sal_uInt16> (nSize)); |
| aUL.SetLower(static_cast <sal_uInt16> (nSize)); |
| pTargetFmt->SetFmtAttr(aLR); |
| pTargetFmt->SetFmtAttr(aUL); |
| SwPageDesc* pStdPgDsc = m_pDoc->GetPageDescFromPool(RES_POOLPAGE_STANDARD); |
| SwFmtFrmSize aFrmSz(ATT_FIX_SIZE); |
| |
| if(RES_POOLPAGE_STANDARD == rPageDesc.GetPoolFmtId()) |
| { |
| if(m_pDoc->getPrinter(false)) |
| { |
| const Size aPhysSize(SvxPaperInfo::GetPaperSize( |
| static_cast<Printer*>(m_pDoc->getPrinter(false)))); |
| aFrmSz.SetSize(aPhysSize); |
| } |
| else |
| { |
| // --> OD 2008-07-25 #i91928# |
| // aFrmSz.SetWidth( LONG_MAX ); |
| // aFrmSz.SetHeight( LONG_MAX ); |
| aFrmSz.SetSize(SvxPaperInfo::GetDefaultPaperSize()); |
| // <-- |
| } |
| |
| } |
| else |
| { |
| aFrmSz = pStdPgDsc->GetMaster().GetFrmSize(); |
| } |
| |
| if(pStdPgDsc->GetLandscape()) |
| { |
| SwTwips nTmp = aFrmSz.GetHeight(); |
| aFrmSz.SetHeight(aFrmSz.GetWidth()); |
| aFrmSz.SetWidth(nTmp); |
| } |
| |
| pTargetFmt->SetFmtAttr(aFrmSz); |
| } |
| else |
| { |
| // --> OD 2007-01-25 #i73790# - method renamed |
| pTargetFmt->ResetAllFmtAttr(); |
| // <-- |
| } |
| |
| if(USHRT_MAX != nPgDscPos) |
| { |
| m_pDoc->ChgPageDesc(nPgDscPos, const_cast<const SwDoc *>(m_pDoc)->GetPageDesc(nPgDscPos)); |
| } |
| } |
| |
| } |
| else |
| { |
| throw uno::RuntimeException(); |
| } |
| } |
| else if(bIsDescriptor) |
| { |
| pPropImpl->ClearAllProperties(); |
| } |
| else |
| { |
| throw uno::RuntimeException(); |
| } |
| } |
| |
| uno::Sequence< uno::Any > SAL_CALL SwXStyle::getPropertyDefaults( |
| const uno::Sequence< OUString >& aPropertyNames ) |
| throw (beans::UnknownPropertyException, lang::WrappedTargetException, uno::RuntimeException) |
| { |
| vos::OGuard aGuard(Application::GetSolarMutex()); |
| sal_Int32 nCount = aPropertyNames.getLength(); |
| uno::Sequence < uno::Any > aRet(nCount); |
| |
| if(nCount) |
| { |
| if(pBasePool) |
| { |
| pBasePool->SetSearchMask(eFamily); |
| SfxStyleSheetBase* pBase = pBasePool->Find(sStyleName); |
| DBG_ASSERT(pBase,"Doesn't seem to be a style!"); |
| |
| if(pBase) |
| { |
| rtl::Reference< SwDocStyleSheet > xStyle(new SwDocStyleSheet(*(SwDocStyleSheet*)pBase)); |
| sal_Int8 nPropSetId = PROPERTY_MAP_CHAR_STYLE; |
| |
| switch(eFamily) |
| { |
| case SFX_STYLE_FAMILY_PARA: nPropSetId = bIsConditional ? PROPERTY_MAP_CONDITIONAL_PARA_STYLE : PROPERTY_MAP_PARA_STYLE; break; |
| case SFX_STYLE_FAMILY_FRAME: nPropSetId = PROPERTY_MAP_FRAME_STYLE; break; |
| case SFX_STYLE_FAMILY_PAGE: nPropSetId = PROPERTY_MAP_PAGE_STYLE; break; |
| case SFX_STYLE_FAMILY_PSEUDO: nPropSetId = PROPERTY_MAP_NUM_STYLE; break; |
| default: ; |
| } |
| |
| const SfxItemPropertySet* pPropSet = aSwMapProvider.GetPropertySet(nPropSetId); |
| const SfxItemPropertyMap* pMap = pPropSet->getPropertyMap(); |
| const SfxItemSet &rSet = xStyle->GetItemSet(),*pParentSet = rSet.GetParent(); |
| const OUString *pNames = aPropertyNames.getConstArray(); |
| uno::Any *pRet = aRet.getArray(); |
| |
| for(sal_Int32 i = 0; i < nCount; i++) |
| { |
| const SfxItemPropertySimpleEntry* pEntry = pMap->getByName(pNames[i]); |
| |
| if(!pEntry) |
| { |
| throw beans::UnknownPropertyException(OUString(RTL_CONSTASCII_USTRINGPARAM("Unknown property: ")) + pNames[i],static_cast <cppu::OWeakObject *> (this)); |
| } |
| |
| if(pParentSet) |
| { |
| aSwMapProvider.GetPropertySet(nPropSetId)->getPropertyValue(pNames[i],*pParentSet,pRet[i]); |
| } |
| else if(pEntry->nWID != rSet.GetPool()->GetSlotId(pEntry->nWID)) |
| { |
| const SfxPoolItem& rItem = rSet.GetPool()->GetDefaultItem(pEntry->nWID); |
| |
| rItem.QueryValue(pRet[i], pEntry->nMemberId); |
| } |
| } |
| } |
| else |
| { |
| throw uno::RuntimeException(); |
| } |
| } |
| else |
| { |
| throw uno::RuntimeException(); |
| } |
| } |
| return aRet; |
| } |
| /*-- 08.03.99 10:50:27--------------------------------------------------- |
| |
| -----------------------------------------------------------------------*/ |
| uno::Any SwXStyle::getPropertyDefault( |
| const OUString& rPropertyName) |
| throw( beans::UnknownPropertyException, lang::WrappedTargetException, uno::RuntimeException ) |
| { |
| const uno::Sequence < OUString > aSequence(&rPropertyName,1); |
| return getPropertyDefaults(aSequence).getConstArray()[0]; |
| } |
| /* -----------------21.01.99 13:08------------------- |
| * |
| * --------------------------------------------------*/ |
| void SwXStyle::Notify( SfxBroadcaster& rBC, const SfxHint& rHint ) |
| { |
| const SfxSimpleHint *pHint = dynamic_cast< const SfxSimpleHint* >( &rHint ); |
| if( pHint ) |
| { |
| if(( pHint->GetId() & SFX_HINT_DYING ) || ( pHint->GetId() & SFX_STYLESHEET_ERASED)) |
| { |
| pBasePool = 0; |
| EndListening(rBC); |
| } |
| else if( pHint->GetId() &(SFX_STYLESHEET_CHANGED|SFX_STYLESHEET_ERASED) ) |
| { |
| ((SfxStyleSheetBasePool&)rBC).SetSearchMask(eFamily); |
| SfxStyleSheetBase* pOwnBase = ((SfxStyleSheetBasePool&)rBC).Find(sStyleName); |
| if(!pOwnBase) |
| { |
| EndListening(rBC); |
| Invalidate(); |
| } |
| } |
| } |
| } |
| /* -----------------------------15.08.00 11:35-------------------------------- |
| |
| ---------------------------------------------------------------------------*/ |
| void SwXStyle::Invalidate() |
| { |
| sStyleName.Erase(); |
| pBasePool = 0; |
| m_pDoc = 0; |
| mxStyleData.clear(); |
| mxStyleFamily.clear(); |
| } |
| |
| |
| /****************************************************************** |
| * SwXPageStyle |
| ******************************************************************/ |
| /*-- 17.12.98 08:43:35--------------------------------------------------- |
| |
| -----------------------------------------------------------------------*/ |
| SwXPageStyle::SwXPageStyle( |
| SfxStyleSheetBasePool& rPool, |
| SwDocShell* pDocSh, SfxStyleFamily eFam, |
| const String& rStyleName) |
| : SwXStyle(rPool, eFam, pDocSh->GetDoc(), rStyleName), |
| pDocShell(pDocSh) |
| { |
| } |
| /* -----------------23.08.99 15:52------------------- |
| |
| --------------------------------------------------*/ |
| SwXPageStyle::SwXPageStyle(SwDocShell* pDocSh) |
| : SwXStyle(pDocSh->GetDoc(), SFX_STYLE_FAMILY_PAGE), |
| pDocShell(pDocSh) |
| { |
| } |
| |
| /*-- 17.12.98 08:43:35--------------------------------------------------- |
| |
| -----------------------------------------------------------------------*/ |
| SwXPageStyle::~SwXPageStyle() |
| { |
| |
| } |
| /* -----------------------------18.04.01 13:50-------------------------------- |
| |
| ---------------------------------------------------------------------------*/ |
| void SAL_CALL SwXPageStyle::SetPropertyValues_Impl( |
| const uno::Sequence< OUString >& rPropertyNames, |
| const uno::Sequence< uno::Any >& rValues ) |
| throw( beans::UnknownPropertyException, beans::PropertyVetoException, lang::IllegalArgumentException, lang::WrappedTargetException, uno::RuntimeException) |
| { |
| if(!GetDoc()) |
| throw uno::RuntimeException(); |
| |
| if(rPropertyNames.getLength() != rValues.getLength()) |
| throw lang::IllegalArgumentException(); |
| |
| const OUString* pNames = rPropertyNames.getConstArray(); |
| const uno::Any* pValues = rValues.getConstArray(); |
| const SfxItemPropertySet* pPropSet = aSwMapProvider.GetPropertySet(PROPERTY_MAP_PAGE_STYLE); |
| const SfxItemPropertyMap* pMap = pPropSet->getPropertyMap(); |
| SwStyleBase_Impl aBaseImpl(*GetDoc(), GetStyleName(), &GetDoc()->GetDfltFrmFmt()->GetAttrSet()); //UUUU add pDfltFrmFmt as parent |
| |
| if(GetBasePool()) |
| { |
| sal_uInt16 nSaveMask = GetBasePool()->GetSearchMask(); |
| GetBasePool()->SetSearchMask(GetFamily()); |
| SfxStyleSheetBase* pBase = GetBasePool()->Find(GetStyleName()); |
| GetBasePool()->SetSearchMask(GetFamily(), nSaveMask ); |
| DBG_ASSERT(pBase, "where is the style?" ); |
| |
| if(pBase) |
| { |
| aBaseImpl.setNewBase(new SwDocStyleSheet(*(SwDocStyleSheet*)pBase)); |
| } |
| else |
| { |
| throw uno::RuntimeException(); |
| } |
| } |
| |
| for(sal_Int16 nProp = 0; nProp < rPropertyNames.getLength(); nProp++) |
| { |
| const String& rPropName = pNames[nProp]; |
| const SfxItemPropertySimpleEntry* pEntry = pMap->getByName( rPropName ); |
| |
| if (!pEntry) |
| { |
| throw beans::UnknownPropertyException(OUString ( RTL_CONSTASCII_USTRINGPARAM ( "Unknown property: " ) ) + rPropName, static_cast < cppu::OWeakObject * > ( this ) ); |
| } |
| |
| if ( pEntry->nFlags & beans::PropertyAttribute::READONLY) |
| { |
| throw beans::PropertyVetoException ( OUString ( RTL_CONSTASCII_USTRINGPARAM ( "Property is read-only: " ) ) + rPropName, static_cast < cppu::OWeakObject * > ( this ) ); |
| } |
| |
| if(GetBasePool()) |
| { |
| switch(pEntry->nWID) |
| { |
| case SID_ATTR_PAGE_ON: |
| case RES_BACKGROUND: |
| case RES_BOX: |
| case RES_LR_SPACE: |
| case RES_SHADOW: |
| case RES_UL_SPACE: |
| case SID_ATTR_PAGE_DYNAMIC: |
| case SID_ATTR_PAGE_SHARED: |
| case SID_ATTR_PAGE_SIZE: |
| case RES_HEADER_FOOTER_EAT_SPACING: |
| { |
| // these entries are used in Header, Footer and (partially) in the PageStyle itself. |
| // Check for Header/Footer entry |
| const bool bHeader(rPropName.EqualsAscii("Header", 0, 6)); |
| const bool bFooter(rPropName.EqualsAscii("Footer", 0, 6)); |
| |
| if(bHeader || bFooter) |
| { |
| // it is a Header/Footer entry, access the SvxSetItem containing it's information |
| const SvxSetItem* pSetItem = 0; |
| |
| if(SFX_ITEM_SET == aBaseImpl.GetItemSet().GetItemState(bFooter ? SID_ATTR_PAGE_FOOTERSET : SID_ATTR_PAGE_HEADERSET, sal_False, (const SfxPoolItem**)&pSetItem)) |
| { |
| // create a new SvxSetItem and get it's ItemSet as new target |
| SvxSetItem* pNewSetItem = static_cast< SvxSetItem* >(pSetItem->Clone()); |
| SfxItemSet& rSetSet = pNewSetItem->GetItemSet(); |
| |
| // set parent to ItemSet to ensure XFILL_NONE as XFillStyleItem |
| rSetSet.SetParent(&GetDoc()->GetDfltFrmFmt()->GetAttrSet()); |
| |
| // replace the used SfxItemSet at the SwStyleBase_Impl temporarily and use the |
| // default method to set the property |
| SfxItemSet* pRememberItemSet = aBaseImpl.replaceItemSet(&rSetSet); |
| lcl_SetStyleProperty(*pEntry, *pPropSet, pValues[nProp], aBaseImpl, GetBasePool(), GetDoc(), GetFamily()); |
| aBaseImpl.replaceItemSet(pRememberItemSet); |
| |
| // reset paret at ItemSet from SetItem |
| rSetSet.SetParent(0); |
| |
| // set the new SvxSetItem at the real target and delete it |
| aBaseImpl.GetItemSet().Put(*pNewSetItem); |
| delete pNewSetItem; |
| } |
| else if(pEntry->nWID == SID_ATTR_PAGE_ON) |
| { |
| sal_Bool bVal = *(sal_Bool*)pValues[nProp].getValue(); |
| |
| if(bVal) |
| { |
| // Header/footer gets switched on, create defauts and the needed SfxSetItem |
| SfxItemSet aTempSet(*aBaseImpl.GetItemSet().GetPool(), |
| RES_FRMATR_BEGIN,RES_FRMATR_END - 1, // [82 |
| |
| //UUUU FillAttribute support |
| XATTR_FILL_FIRST, XATTR_FILL_LAST, // [1014 |
| |
| SID_ATTR_BORDER_INNER,SID_ATTR_BORDER_INNER, // [10023 |
| SID_ATTR_PAGE_SIZE,SID_ATTR_PAGE_SIZE, // [10051 |
| SID_ATTR_PAGE_ON,SID_ATTR_PAGE_SHARED, // [10060 |
| 0); |
| |
| //UUUU set correct parent to get the XFILL_NONE FillStyle as needed |
| aTempSet.SetParent(&GetDoc()->GetDfltFrmFmt()->GetAttrSet()); |
| |
| aTempSet.Put(SfxBoolItem(SID_ATTR_PAGE_ON, sal_True)); |
| aTempSet.Put(SvxSizeItem(SID_ATTR_PAGE_SIZE, Size(MM50, MM50))); |
| aTempSet.Put(SvxLRSpaceItem(RES_LR_SPACE)); |
| aTempSet.Put(SvxULSpaceItem(RES_UL_SPACE)); |
| aTempSet.Put(SfxBoolItem(SID_ATTR_PAGE_SHARED, sal_True)); |
| aTempSet.Put(SfxBoolItem(SID_ATTR_PAGE_DYNAMIC, sal_True)); |
| |
| SvxSetItem aNewSetItem(bFooter ? SID_ATTR_PAGE_FOOTERSET : SID_ATTR_PAGE_HEADERSET, aTempSet); |
| aBaseImpl.GetItemSet().Put(aNewSetItem); |
| } |
| } |
| } |
| else |
| { |
| switch(pEntry->nWID) |
| { |
| case SID_ATTR_PAGE_DYNAMIC: |
| case SID_ATTR_PAGE_SHARED: |
| case SID_ATTR_PAGE_ON: |
| case RES_HEADER_FOOTER_EAT_SPACING: |
| { |
| // these slots are exclusive to Header/Footer, thus this is an error |
| throw beans::UnknownPropertyException(OUString ( RTL_CONSTASCII_USTRINGPARAM ( "Unknown property: " ) ) + rPropName, static_cast < cppu::OWeakObject * > ( this ) ); |
| break; |
| } |
| default: |
| { |
| // part of PageStyle, fallback to default |
| lcl_SetStyleProperty(*pEntry, *pPropSet, pValues[nProp], aBaseImpl, GetBasePool(), GetDoc(), GetFamily()); |
| } |
| } |
| } |
| |
| break; |
| } |
| |
| case XATTR_FILLBMP_SIZELOG: |
| case XATTR_FILLBMP_TILEOFFSETX: |
| case XATTR_FILLBMP_TILEOFFSETY: |
| case XATTR_FILLBMP_POSOFFSETX: |
| case XATTR_FILLBMP_POSOFFSETY: |
| case XATTR_FILLBMP_POS: |
| case XATTR_FILLBMP_SIZEX: |
| case XATTR_FILLBMP_SIZEY: |
| case XATTR_FILLBMP_STRETCH: |
| case XATTR_FILLBMP_TILE: |
| case OWN_ATTR_FILLBMP_MODE: |
| case XATTR_FILLCOLOR: |
| case XATTR_FILLBACKGROUND: |
| case XATTR_FILLBITMAP: |
| case XATTR_GRADIENTSTEPCOUNT: |
| case XATTR_FILLGRADIENT: |
| case XATTR_FILLHATCH: |
| case XATTR_FILLSTYLE: |
| case XATTR_FILLTRANSPARENCE: |
| case XATTR_FILLFLOATTRANSPARENCE: |
| case XATTR_SECONDARYFILLCOLOR: |
| { |
| // This DrawingLayer FillStyle attributes can be part of Header, Footer and PageStyle |
| // itself, so decide what to do using the name |
| const bool bHeader(rPropName.EqualsAscii("Header", 0, 6)); |
| const bool bFooter(rPropName.EqualsAscii("Footer", 0, 6)); |
| |
| if(bHeader || bFooter) |
| { |
| const SvxSetItem* pSetItem = 0; |
| |
| if(SFX_ITEM_SET == aBaseImpl.GetItemSet().GetItemState(bFooter ? SID_ATTR_PAGE_FOOTERSET : SID_ATTR_PAGE_HEADERSET, sal_False, (const SfxPoolItem**)&pSetItem)) |
| { |
| // create a new SvxSetItem and get it's ItemSet as new target |
| SvxSetItem* pNewSetItem = static_cast< SvxSetItem* >(pSetItem->Clone()); |
| SfxItemSet& rSetSet = pNewSetItem->GetItemSet(); |
| |
| // set parent to ItemSet to ensure XFILL_NONE as XFillStyleItem |
| rSetSet.SetParent(&GetDoc()->GetDfltFrmFmt()->GetAttrSet()); |
| |
| // replace the used SfxItemSet at the SwStyleBase_Impl temporarily and use the |
| // default method to set the property |
| SfxItemSet* pRememberItemSet = aBaseImpl.replaceItemSet(&rSetSet); |
| lcl_SetStyleProperty(*pEntry, *pPropSet, pValues[nProp], aBaseImpl, GetBasePool(), GetDoc(), GetFamily()); |
| aBaseImpl.replaceItemSet(pRememberItemSet); |
| |
| // reset paret at ItemSet from SetItem |
| rSetSet.SetParent(0); |
| |
| // set the new SvxSetItem at the real target and delete it |
| aBaseImpl.GetItemSet().Put(*pNewSetItem); |
| delete pNewSetItem; |
| } |
| } |
| else |
| { |
| // part of PageStyle, fallback to default |
| lcl_SetStyleProperty(*pEntry, *pPropSet, pValues[nProp], aBaseImpl, GetBasePool(), GetDoc(), GetFamily()); |
| } |
| |
| break; |
| } |
| |
| case FN_PARAM_FTN_INFO : |
| { |
| const SfxPoolItem& rItem = aBaseImpl.GetItemSet().Get(FN_PARAM_FTN_INFO); |
| SfxPoolItem* pNewFtnItem = rItem.Clone(); |
| sal_Bool bPut = pNewFtnItem->PutValue(pValues[nProp], pEntry->nMemberId); |
| aBaseImpl.GetItemSet().Put(*pNewFtnItem); |
| delete pNewFtnItem; |
| if(!bPut) |
| throw lang::IllegalArgumentException(); |
| |
| break; |
| } |
| |
| case FN_UNO_HEADER : |
| case FN_UNO_HEADER_LEFT : |
| case FN_UNO_HEADER_RIGHT : |
| case FN_UNO_FOOTER : |
| case FN_UNO_FOOTER_LEFT : |
| case FN_UNO_FOOTER_RIGHT : |
| { |
| throw lang::IllegalArgumentException(); |
| break; |
| } |
| |
| default: |
| { |
| //UUUU |
| lcl_SetStyleProperty(*pEntry, *pPropSet, pValues[nProp], aBaseImpl, GetBasePool(), GetDoc(), GetFamily()); |
| break; |
| } |
| } |
| } |
| else if(IsDescriptor()) |
| { |
| if(!GetPropImpl()->SetProperty(rPropName, pValues[nProp])) |
| throw lang::IllegalArgumentException(); |
| } |
| else |
| { |
| throw uno::RuntimeException(); |
| } |
| } |
| |
| if(aBaseImpl.HasItemSet()) |
| { |
| ::sw::UndoGuard const undoGuard(GetDoc()->GetIDocumentUndoRedo()); |
| |
| if (undoGuard.UndoWasEnabled()) |
| { |
| // Fix i64460: as long as Undo of page styles with header/footer causes trouble... |
| GetDoc()->GetIDocumentUndoRedo().DelAllUndoObj(); |
| } |
| |
| aBaseImpl.getNewBase()->SetItemSet(aBaseImpl.GetItemSet()); |
| } |
| } |
| |
| void SwXPageStyle::setPropertyValues( |
| const uno::Sequence< OUString >& rPropertyNames, |
| const uno::Sequence< uno::Any >& rValues ) |
| throw(beans::PropertyVetoException, lang::IllegalArgumentException, lang::WrappedTargetException, uno::RuntimeException) |
| { |
| vos::OGuard aGuard(Application::GetSolarMutex()); |
| |
| // workaround for bad designed API |
| try |
| { |
| SetPropertyValues_Impl( rPropertyNames, rValues ); |
| } |
| catch (beans::UnknownPropertyException &rException) |
| { |
| // wrap the original (here not allowed) exception in |
| // a lang::WrappedTargetException that gets thrown instead. |
| lang::WrappedTargetException aWExc; |
| aWExc.TargetException <<= rException; |
| throw aWExc; |
| } |
| } |
| /* -----------------------------04.11.03 13:50-------------------------------- |
| |
| ---------------------------------------------------------------------------*/ |
| static uno::Reference<text::XText> lcl_makeHeaderFooter( |
| const sal_uInt16 nRes, |
| const bool bHeader, |
| SwFrmFmt const*const pFrmFmt) |
| { |
| if (!pFrmFmt) { return 0; } |
| |
| const SfxItemSet& rSet = pFrmFmt->GetAttrSet(); |
| const SfxPoolItem* pItem; |
| if (SFX_ITEM_SET == rSet.GetItemState(nRes, sal_True, &pItem)) |
| { |
| SwFrmFmt *const pHeadFootFmt = (bHeader) |
| ? static_cast<SwFmtHeader*>(const_cast<SfxPoolItem*>(pItem))-> |
| GetHeaderFmt() |
| : static_cast<SwFmtFooter*>(const_cast<SfxPoolItem*>(pItem))-> |
| GetFooterFmt(); |
| if (pHeadFootFmt) |
| { |
| return SwXHeadFootText::CreateXHeadFootText(*pHeadFootFmt, bHeader); |
| } |
| } |
| return 0; |
| } |
| |
| uno::Sequence< uno::Any > SAL_CALL SwXPageStyle::GetPropertyValues_Impl( |
| const uno::Sequence< OUString >& rPropertyNames ) |
| throw( beans::UnknownPropertyException, lang::WrappedTargetException, uno::RuntimeException ) |
| { |
| if(!GetDoc()) |
| throw uno::RuntimeException(); |
| |
| sal_Int32 nLength = rPropertyNames.getLength(); |
| const OUString* pNames = rPropertyNames.getConstArray(); |
| uno::Sequence< uno::Any > aRet ( nLength ); |
| uno::Any* pRet = aRet.getArray(); |
| const SfxItemPropertySet* pPropSet = aSwMapProvider.GetPropertySet(PROPERTY_MAP_PAGE_STYLE); |
| const SfxItemPropertyMap* pMap = pPropSet->getPropertyMap(); |
| SwStyleBase_Impl aBase(*GetDoc(), GetStyleName(), &GetDoc()->GetDfltFrmFmt()->GetAttrSet()); //UUUU add pDfltFrmFmt as parent |
| SfxStyleSheetBase* pBase = 0; |
| |
| for(sal_Int32 nProp = 0; nProp < nLength; nProp++) |
| { |
| const String& rPropName = pNames[nProp]; |
| const SfxItemPropertySimpleEntry* pEntry = pMap->getByName( rPropName ); |
| |
| if (!pEntry) |
| { |
| throw beans::UnknownPropertyException(OUString ( RTL_CONSTASCII_USTRINGPARAM ( "Unknown property: " ) ) + rPropName, static_cast < cppu::OWeakObject * > ( this ) ); |
| } |
| |
| if(GetBasePool()) |
| { |
| if(!pBase) |
| { |
| sal_uInt16 nSaveMask = GetBasePool()->GetSearchMask(); |
| GetBasePool()->SetSearchMask(GetFamily(), SFXSTYLEBIT_ALL ); |
| pBase = GetBasePool()->Find(GetStyleName()); |
| GetBasePool()->SetSearchMask(GetFamily(), nSaveMask ); |
| } |
| |
| sal_uInt16 nRes = 0; |
| sal_Bool bAll = sal_False, bLeft = sal_False, bRight = sal_False; |
| const sal_uInt8 nMemberId(pEntry->nMemberId & (~SFX_METRIC_ITEM)); |
| |
| switch(pEntry->nWID) |
| { |
| case SID_ATTR_PAGE_ON: |
| case RES_BACKGROUND: |
| case RES_BOX: |
| case RES_LR_SPACE: |
| case RES_SHADOW: |
| case RES_UL_SPACE: |
| case SID_ATTR_PAGE_DYNAMIC: |
| case SID_ATTR_PAGE_SHARED: |
| case SID_ATTR_PAGE_SIZE: |
| case RES_HEADER_FOOTER_EAT_SPACING: |
| { |
| // These slots are used for Header, Footer and (partially) for PageStyle directly. |
| // Check for Header/Footer entry |
| const bool bHeader(rPropName.EqualsAscii("Header", 0, 6)); |
| const bool bFooter(rPropName.EqualsAscii("Footer", 0, 6)); |
| |
| if(bHeader || bFooter) |
| { |
| // slot is a Header/Footer slot |
| rtl::Reference< SwDocStyleSheet > xStyle( new SwDocStyleSheet( *(SwDocStyleSheet*)pBase ) ); |
| const SfxItemSet& rSet = xStyle->GetItemSet(); |
| const SvxSetItem* pSetItem; |
| |
| if(SFX_ITEM_SET == rSet.GetItemState(bFooter ? SID_ATTR_PAGE_FOOTERSET : SID_ATTR_PAGE_HEADERSET, sal_False, (const SfxPoolItem**)&pSetItem)) |
| { |
| // get from SfxItemSet of the corresponding SfxSetItem |
| const SfxItemSet& rSetSet = pSetItem->GetItemSet(); |
| SfxItemSet* pRememberItemSet = aBase.replaceItemSet(&const_cast< SfxItemSet& >(rSetSet)); |
| pRet[nProp] = lcl_GetStyleProperty(*pEntry, *pPropSet, aBase, pBase, GetFamily(), GetDoc() ); |
| aBase.replaceItemSet(pRememberItemSet); |
| } |
| else if(pEntry->nWID == SID_ATTR_PAGE_ON) |
| { |
| // header/footer is not available, thus off. Default is sal_False, though |
| sal_Bool bRet = sal_False; |
| pRet[nProp].setValue(&bRet, ::getCppuBooleanType()); |
| } |
| } |
| else |
| { |
| switch(pEntry->nWID) |
| { |
| case SID_ATTR_PAGE_DYNAMIC: |
| case SID_ATTR_PAGE_SHARED: |
| case SID_ATTR_PAGE_ON: |
| case RES_HEADER_FOOTER_EAT_SPACING: |
| { |
| // these slots are exclusive to Header/Footer, thus this is an error |
| throw beans::UnknownPropertyException(OUString ( RTL_CONSTASCII_USTRINGPARAM ( "Unknown property: " ) ) + rPropName, static_cast < cppu::OWeakObject * > ( this ) ); |
| break; |
| } |
| default: |
| { |
| // part of PageStyle, fallback to default |
| pRet[nProp] = lcl_GetStyleProperty(*pEntry, *pPropSet, aBase, pBase, GetFamily(), GetDoc() ); |
| } |
| } |
| } |
| |
| break; |
| } |
| |
| case XATTR_FILLBMP_SIZELOG: |
| case XATTR_FILLBMP_TILEOFFSETX: |
| case XATTR_FILLBMP_TILEOFFSETY: |
| case XATTR_FILLBMP_POSOFFSETX: |
| case XATTR_FILLBMP_POSOFFSETY: |
| case XATTR_FILLBMP_POS: |
| case XATTR_FILLBMP_SIZEX: |
| case XATTR_FILLBMP_SIZEY: |
| case XATTR_FILLBMP_STRETCH: |
| case XATTR_FILLBMP_TILE: |
| case OWN_ATTR_FILLBMP_MODE: |
| case XATTR_FILLCOLOR: |
| case XATTR_FILLBACKGROUND: |
| case XATTR_FILLBITMAP: |
| case XATTR_GRADIENTSTEPCOUNT: |
| case XATTR_FILLGRADIENT: |
| case XATTR_FILLHATCH: |
| case XATTR_FILLSTYLE: |
| case XATTR_FILLTRANSPARENCE: |
| case XATTR_FILLFLOATTRANSPARENCE: |
| case XATTR_SECONDARYFILLCOLOR: |
| { |
| // This DrawingLayer FillStyle attributes can be part of Header, Footer and PageStyle |
| // itself, so decide what to do using the name |
| const bool bHeader(rPropName.EqualsAscii("Header", 0, 6)); |
| const bool bFooter(rPropName.EqualsAscii("Footer", 0, 6)); |
| |
| if(bHeader || bFooter) |
| { |
| rtl::Reference< SwDocStyleSheet > xStyle( new SwDocStyleSheet( *(SwDocStyleSheet*)pBase ) ); |
| const SfxItemSet& rSet = xStyle->GetItemSet(); |
| const SvxSetItem* pSetItem; |
| |
| if(SFX_ITEM_SET == rSet.GetItemState(bFooter ? SID_ATTR_PAGE_FOOTERSET : SID_ATTR_PAGE_HEADERSET, sal_False, (const SfxPoolItem**)&pSetItem)) |
| { |
| // set at SfxItemSet of the corresponding SfxSetItem |
| const SfxItemSet& rSetSet = pSetItem->GetItemSet(); |
| SfxItemSet* pRememberItemSet = aBase.replaceItemSet(&const_cast< SfxItemSet& >(rSetSet)); |
| pRet[nProp] = lcl_GetStyleProperty(*pEntry, *pPropSet, aBase, pBase, GetFamily(), GetDoc() ); |
| aBase.replaceItemSet(pRememberItemSet); |
| } |
| } |
| else |
| { |
| // part of PageStyle, fallback to default |
| pRet[nProp] = lcl_GetStyleProperty(*pEntry, *pPropSet, aBase, pBase, GetFamily(), GetDoc() ); |
| } |
| |
| break; |
| } |
| |
| case FN_UNO_HEADER: |
| case FN_UNO_HEADER_LEFT: |
| case FN_UNO_HEADER_RIGHT: |
| case FN_UNO_FOOTER: |
| case FN_UNO_FOOTER_LEFT: |
| case FN_UNO_FOOTER_RIGHT: |
| { |
| //UUUU cleanups for readability (undos removed, rearranged) |
| bool bHeader(false); |
| |
| switch(pEntry->nWID) |
| { |
| case FN_UNO_HEADER: bHeader = true; nRes = RES_HEADER; bAll = sal_True; break; |
| case FN_UNO_HEADER_LEFT: bHeader = true; nRes = RES_HEADER; bLeft = sal_True; break; |
| case FN_UNO_HEADER_RIGHT: bHeader = true; nRes = RES_HEADER; bRight = sal_True; break; |
| case FN_UNO_FOOTER: bHeader = false; nRes = RES_FOOTER; bAll = sal_True; break; |
| case FN_UNO_FOOTER_LEFT: bHeader = false; nRes = RES_FOOTER; bLeft = sal_True; break; |
| case FN_UNO_FOOTER_RIGHT: bHeader = false; nRes = RES_FOOTER; bRight = sal_True; break; |
| default: break; |
| } |
| |
| const SwPageDesc& rDesc = aBase.GetOldPageDesc(); |
| const SwFrmFmt* pFrmFmt = 0; |
| sal_Bool bShare = (bHeader && rDesc.IsHeaderShared()) || (!bHeader && rDesc.IsFooterShared()); |
| // TextLeft returns the left content if there is one, |
| // Text and TextRight return the master content. |
| // TextRight does the same as Text and is for |
| // comptability only. |
| if( bLeft && !bShare ) |
| { |
| pFrmFmt = &rDesc.GetLeft(); |
| } |
| else |
| { |
| pFrmFmt = &rDesc.GetMaster(); |
| } |
| const uno::Reference< text::XText > xRet = |
| lcl_makeHeaderFooter(nRes, bHeader, pFrmFmt); |
| if (xRet.is()) |
| { |
| pRet[nProp] <<= xRet; |
| } |
| |
| break; |
| } |
| |
| case FN_PARAM_FTN_INFO : |
| { |
| rtl::Reference< SwDocStyleSheet > xStyle( new SwDocStyleSheet( *(SwDocStyleSheet*)pBase ) ); |
| const SfxItemSet& rSet = xStyle->GetItemSet(); |
| const SfxPoolItem& rItem = rSet.Get(FN_PARAM_FTN_INFO); |
| rItem.QueryValue(pRet[nProp], nMemberId); |
| break; |
| } |
| |
| default: |
| { |
| //UUUU |
| pRet[nProp] = lcl_GetStyleProperty(*pEntry, *pPropSet, aBase, pBase, GetFamily(), GetDoc() ); |
| break; |
| } |
| } |
| } |
| else if(IsDescriptor()) |
| { |
| uno::Any* pAny = 0; |
| GetPropImpl()->GetProperty(rPropName, pAny); |
| |
| if ( !pAny ) |
| { |
| GetPropImpl()->GetProperty ( rPropName, mxStyleData, pRet[ nProp ] ); |
| } |
| else |
| { |
| pRet[nProp] = *pAny; |
| } |
| } |
| else |
| { |
| throw uno::RuntimeException(); |
| } |
| } |
| |
| return aRet; |
| } |
| /* -----------------------------18.04.01 13:50-------------------------------- |
| |
| ---------------------------------------------------------------------------*/ |
| uno::Sequence< uno::Any > SwXPageStyle::getPropertyValues( |
| const uno::Sequence< OUString >& rPropertyNames ) |
| throw(uno::RuntimeException) |
| { |
| vos::OGuard aGuard(Application::GetSolarMutex()); |
| uno::Sequence< uno::Any > aValues; |
| |
| // workaround for bad designed API |
| try |
| { |
| aValues = GetPropertyValues_Impl( rPropertyNames ); |
| } |
| catch (beans::UnknownPropertyException &) |
| { |
| throw uno::RuntimeException(OUString ( RTL_CONSTASCII_USTRINGPARAM ( "Unknown property exception caught" ) ), static_cast < cppu::OWeakObject * > ( this ) ); |
| } |
| catch (lang::WrappedTargetException &) |
| { |
| throw uno::RuntimeException(OUString ( RTL_CONSTASCII_USTRINGPARAM ( "WrappedTargetException caught" ) ), static_cast < cppu::OWeakObject * > ( this ) ); |
| } |
| |
| return aValues; |
| } |
| /*-- 17.12.98 08:43:36--------------------------------------------------- |
| |
| -----------------------------------------------------------------------*/ |
| uno::Any SwXPageStyle::getPropertyValue( |
| const OUString& rPropertyName) |
| throw(beans::UnknownPropertyException, lang::WrappedTargetException, uno::RuntimeException) |
| { |
| vos::OGuard aGuard(Application::GetSolarMutex()); |
| const uno::Sequence<OUString> aProperties(&rPropertyName, 1); |
| |
| return GetPropertyValues_Impl(aProperties).getConstArray()[0]; |
| } |
| /*-- 17.12.98 08:43:36--------------------------------------------------- |
| |
| -----------------------------------------------------------------------*/ |
| void SwXPageStyle::setPropertyValue( |
| const OUString& rPropertyName, |
| const uno::Any& rValue) |
| throw( beans::UnknownPropertyException, beans::PropertyVetoException, lang::IllegalArgumentException, lang::WrappedTargetException, uno::RuntimeException) |
| { |
| vos::OGuard aGuard(Application::GetSolarMutex()); |
| const uno::Sequence<OUString> aProperties(&rPropertyName, 1); |
| const uno::Sequence<uno::Any> aValues(&rValue, 1); |
| |
| SetPropertyValues_Impl( aProperties, aValues ); |
| } |
| |
| SwXFrameStyle::SwXFrameStyle ( SwDoc *pDoc ) |
| : SwXStyle ( pDoc, SFX_STYLE_FAMILY_FRAME, sal_False) |
| { |
| } |
| /* -----------------------------15.12.00 15:45-------------------------------- |
| |
| ---------------------------------------------------------------------------*/ |
| SwXFrameStyle::~SwXFrameStyle() |
| { |
| } |
| /* -----------------------------15.12.00 14:30-------------------------------- |
| |
| ---------------------------------------------------------------------------*/ |
| uno::Sequence< uno::Type > SwXFrameStyle::getTypes( ) throw(uno::RuntimeException) |
| { |
| uno::Sequence< uno::Type > aTypes = SwXStyle::getTypes(); |
| sal_Int32 nLen = aTypes.getLength(); |
| aTypes.realloc(nLen + 1); |
| aTypes.getArray()[nLen] = ::getCppuType((uno::Reference<XEventsSupplier>*)0); |
| return aTypes; |
| } |
| /* -----------------------------15.12.00 14:30-------------------------------- |
| |
| ---------------------------------------------------------------------------*/ |
| uno::Any SwXFrameStyle::queryInterface( const uno::Type& rType ) throw(uno::RuntimeException) |
| { |
| uno::Any aRet; |
| if(rType == ::getCppuType((uno::Reference<XEventsSupplier>*)0)) |
| aRet <<= uno::Reference<XEventsSupplier>(this); |
| else |
| aRet = SwXStyle::queryInterface(rType); |
| return aRet; |
| } |
| /* -----------------------------15.12.00 14:30-------------------------------- |
| |
| ---------------------------------------------------------------------------*/ |
| uno::Reference< container::XNameReplace > SwXFrameStyle::getEvents( ) throw(uno::RuntimeException) |
| { |
| return new SwFrameStyleEventDescriptor( *this ); |
| } |
| /*-- 19.05.2006 11:23:55--------------------------------------------------- |
| |
| -----------------------------------------------------------------------*/ |
| SwXAutoStyles::SwXAutoStyles(SwDocShell& rDocShell) : |
| SwUnoCollection(rDocShell.GetDoc()), pDocShell( &rDocShell ) |
| { |
| } |
| /*-- 19.05.2006 11:23:56--------------------------------------------------- |
| |
| -----------------------------------------------------------------------*/ |
| SwXAutoStyles::~SwXAutoStyles() |
| { |
| } |
| /*-- 19.05.2006 11:23:57--------------------------------------------------- |
| |
| -----------------------------------------------------------------------*/ |
| sal_Int32 SwXAutoStyles::getCount(void) throw( uno::RuntimeException ) |
| { |
| return AUTOSTYLE_FAMILY_COUNT; |
| } |
| /*-- 19.05.2006 11:23:57--------------------------------------------------- |
| |
| -----------------------------------------------------------------------*/ |
| uno::Any SwXAutoStyles::getByIndex(sal_Int32 nIndex) |
| throw( lang::IndexOutOfBoundsException, lang::WrappedTargetException, |
| uno::RuntimeException ) |
| { |
| vos::OGuard aGuard(Application::GetSolarMutex()); |
| uno::Any aRet; |
| if(nIndex < 0 || nIndex >= AUTOSTYLE_FAMILY_COUNT) |
| throw lang::IndexOutOfBoundsException(); |
| if(IsValid()) |
| { |
| uno::Reference< style::XAutoStyleFamily > aRef; |
| IStyleAccess::SwAutoStyleFamily nType = aAutoStyleByIndex[nIndex]; |
| switch( nType ) |
| { |
| case IStyleAccess::AUTO_STYLE_CHAR: |
| { |
| if(!xAutoCharStyles.is()) |
| xAutoCharStyles = new SwXAutoStyleFamily(pDocShell, nType); |
| aRef = xAutoCharStyles; |
| } |
| break; |
| case IStyleAccess::AUTO_STYLE_RUBY: |
| { |
| if(!xAutoRubyStyles.is()) |
| xAutoRubyStyles = new SwXAutoStyleFamily(pDocShell, nType ); |
| aRef = xAutoRubyStyles; |
| } |
| break; |
| case IStyleAccess::AUTO_STYLE_PARA: |
| { |
| if(!xAutoParaStyles.is()) |
| xAutoParaStyles = new SwXAutoStyleFamily(pDocShell, nType ); |
| aRef = xAutoParaStyles; |
| } |
| break; |
| |
| default: |
| ; |
| } |
| aRet.setValue(&aRef, ::getCppuType((const uno::Reference<style::XAutoStyleFamily>*)0)); |
| } |
| else |
| throw uno::RuntimeException(); |
| return aRet; |
| } |
| /*-- 19.05.2006 11:23:57--------------------------------------------------- |
| |
| -----------------------------------------------------------------------*/ |
| uno::Type SwXAutoStyles::getElementType( ) throw(uno::RuntimeException) |
| { |
| return ::getCppuType((const uno::Reference<style::XAutoStyleFamily>*)0); |
| } |
| /*-- 19.05.2006 11:23:58--------------------------------------------------- |
| |
| -----------------------------------------------------------------------*/ |
| sal_Bool SwXAutoStyles::hasElements( ) throw(uno::RuntimeException) |
| { |
| return sal_True; |
| } |
| /*-- 19.05.2006 11:23:58--------------------------------------------------- |
| |
| -----------------------------------------------------------------------*/ |
| uno::Any SwXAutoStyles::getByName(const rtl::OUString& Name) |
| throw( container::NoSuchElementException, lang::WrappedTargetException, uno::RuntimeException ) |
| { |
| uno::Any aRet; |
| if(Name.compareToAscii("CharacterStyles") == 0 ) |
| aRet = getByIndex(0); |
| else if(Name.compareToAscii("RubyStyles") == 0 ) |
| aRet = getByIndex(1); |
| else if(Name.compareToAscii("ParagraphStyles") == 0 ) |
| aRet = getByIndex(2); |
| else |
| throw container::NoSuchElementException(); |
| return aRet; |
| } |
| /*-- 19.05.2006 11:23:59--------------------------------------------------- |
| |
| -----------------------------------------------------------------------*/ |
| uno::Sequence< rtl::OUString > SwXAutoStyles::getElementNames(void) |
| throw( uno::RuntimeException ) |
| { |
| uno::Sequence< OUString > aNames(AUTOSTYLE_FAMILY_COUNT); |
| OUString* pNames = aNames.getArray(); |
| pNames[0] = C2U("CharacterStyles"); |
| pNames[1] = C2U("RubyStyles"); |
| pNames[2] = C2U("ParagraphStyles"); |
| return aNames; |
| } |
| /*-- 19.05.2006 11:24:00--------------------------------------------------- |
| |
| -----------------------------------------------------------------------*/ |
| sal_Bool SwXAutoStyles::hasByName(const rtl::OUString& Name) |
| throw( uno::RuntimeException ) |
| { |
| if( Name.compareToAscii("CharacterStyles") == 0 || |
| Name.compareToAscii("RubyStyles") == 0 || |
| Name.compareToAscii("ParagraphStyles") == 0 ) |
| return sal_True; |
| else |
| return sal_False; |
| } |
| |
| /*-- 19.05.2006 11:24:02--------------------------------------------------- |
| |
| -----------------------------------------------------------------------*/ |
| SwXAutoStyleFamily::SwXAutoStyleFamily(SwDocShell* pDocSh, IStyleAccess::SwAutoStyleFamily nFamily) : |
| pDocShell( pDocSh ), eFamily(nFamily) |
| { |
| // Register ourselves as a listener to the document (via the page descriptor) |
| pDocSh->GetDoc()->GetPageDescFromPool(RES_POOLPAGE_STANDARD)->Add(this); |
| } |
| /*-- 19.05.2006 11:24:02--------------------------------------------------- |
| |
| -----------------------------------------------------------------------*/ |
| SwXAutoStyleFamily::~SwXAutoStyleFamily() |
| { |
| } |
| |
| void SwXAutoStyleFamily::Modify( const SfxPoolItem* pOld, const SfxPoolItem *pNew) |
| { |
| ClientModify(this, pOld, pNew); |
| if(!GetRegisteredIn()) |
| pDocShell = 0; |
| } |
| |
| /*-- 31.05.2006 11:24:02--------------------------------------------------- |
| |
| -----------------------------------------------------------------------*/ |
| uno::Reference< style::XAutoStyle > SwXAutoStyleFamily::insertStyle( |
| const uno::Sequence< beans::PropertyValue >& Values ) |
| throw (uno::RuntimeException) |
| { |
| if( !pDocShell ) |
| { |
| throw uno::RuntimeException(); |
| } |
| |
| const sal_uInt16* pRange = 0; |
| const SfxItemPropertySet* pPropSet = 0; |
| |
| switch( eFamily ) |
| { |
| case IStyleAccess::AUTO_STYLE_CHAR: |
| { |
| pRange = aCharAutoFmtSetRange; |
| pPropSet = aSwMapProvider.GetPropertySet(PROPERTY_MAP_CHAR_AUTO_STYLE); |
| break; |
| } |
| case IStyleAccess::AUTO_STYLE_RUBY: |
| { |
| pRange = 0;//aTxtNodeSetRange; |
| pPropSet = aSwMapProvider.GetPropertySet(PROPERTY_MAP_RUBY_AUTO_STYLE); |
| break; |
| } |
| case IStyleAccess::AUTO_STYLE_PARA: |
| { |
| pRange = aTxtNodeSetRange; //UUUU checked, already added support for [XATTR_FILL_FIRST, XATTR_FILL_LAST] |
| pPropSet = aSwMapProvider.GetPropertySet(PROPERTY_MAP_PARA_AUTO_STYLE); |
| break; |
| } |
| |
| default: break; |
| } |
| |
| SwAttrSet aSet( pDocShell->GetDoc()->GetAttrPool(), pRange ); |
| const beans::PropertyValue* pSeq = Values.getConstArray(); |
| sal_Int32 nLen = Values.getLength(); |
| const bool bTakeCareOfDrawingLayerFillStyle(IStyleAccess::AUTO_STYLE_PARA == eFamily); |
| |
| if(!bTakeCareOfDrawingLayerFillStyle) |
| { |
| for( sal_Int32 i = 0; i < nLen; ++i ) |
| { |
| try |
| { |
| pPropSet->setPropertyValue( pSeq[i].Name, pSeq[i].Value, aSet ); |
| } |
| catch (beans::UnknownPropertyException &) |
| { |
| ASSERT( false, "Unknown property" ); |
| } |
| catch (lang::IllegalArgumentException &) |
| { |
| ASSERT( false, "Illegal argument" ); |
| } |
| } |
| } |
| else |
| { |
| //UUUU set parent to ItemSet to ensure XFILL_NONE as XFillStyleItem |
| // to make cases in RES_BACKGROUND work correct; target *is* a style |
| // where this is the case |
| aSet.SetParent(&pDocShell->GetDoc()->GetDfltTxtFmtColl()->GetAttrSet()); |
| |
| //UUUU here the used DrawingLayer FillStyles are imported when family is |
| // equal to IStyleAccess::AUTO_STYLE_PARA, thus we will need to serve the |
| // used slots functionality here to do this correctly |
| const SfxItemPropertyMap *pMap = pPropSet->getPropertyMap(); |
| |
| for( sal_Int32 i = 0; i < nLen; ++i ) |
| { |
| const OUString& rPropName = pSeq[i].Name; |
| uno::Any aValue(pSeq[i].Value); |
| const SfxItemPropertySimpleEntry* pEntry = pMap->getByName(rPropName); |
| |
| if(!pEntry) |
| { |
| throw beans::UnknownPropertyException(OUString ( RTL_CONSTASCII_USTRINGPARAM ( "Unknown property: " ) ) + rPropName, static_cast < cppu::OWeakObject * > ( this ) ); |
| } |
| |
| const sal_uInt8 nMemberId(pEntry->nMemberId & (~SFX_METRIC_ITEM)); |
| bool bDone(false); |
| |
| // check for needed metric translation |
| if(pEntry->nMemberId & SFX_METRIC_ITEM) |
| { |
| bool bDoIt(true); |
| |
| if(XATTR_FILLBMP_SIZEX == pEntry->nWID || XATTR_FILLBMP_SIZEY == pEntry->nWID) |
| { |
| // exception: If these ItemTypes are used, do not convert when these are negative |
| // since this means they are intended as percent values |
| sal_Int32 nValue = 0; |
| |
| if(aValue >>= nValue) |
| { |
| bDoIt = nValue > 0; |
| } |
| } |
| |
| if(bDoIt) |
| { |
| const SfxItemPool& rPool = pDocShell->GetDoc()->GetAttrPool(); |
| const SfxMapUnit eMapUnit(rPool.GetMetric(pEntry->nWID)); |
| |
| if(eMapUnit != SFX_MAPUNIT_100TH_MM) |
| { |
| SvxUnoConvertFromMM(eMapUnit, aValue); |
| } |
| } |
| } |
| |
| switch(pEntry->nWID) |
| { |
| case XATTR_FILLGRADIENT: |
| case XATTR_FILLHATCH: |
| case XATTR_FILLBITMAP: |
| case XATTR_FILLFLOATTRANSPARENCE: |
| // not yet needed; activate when LineStyle support may be added |
| // case XATTR_LINESTART: |
| // case XATTR_LINEEND: |
| // case XATTR_LINEDASH: |
| { |
| if(MID_NAME == nMemberId) |
| { |
| //UUUU add set commands for FillName items |
| OUString aTempName; |
| |
| if(!(aValue >>= aTempName)) |
| { |
| throw lang::IllegalArgumentException(); |
| } |
| |
| SvxShape::SetFillAttribute(pEntry->nWID, aTempName, aSet); |
| bDone = true; |
| } |
| else if(MID_GRAFURL == nMemberId) |
| { |
| if(XATTR_FILLBITMAP == pEntry->nWID) |
| { |
| //UUUU Bitmap also has the MID_GRAFURL mode where a Bitmap URL is used |
| const Graphic aNullGraphic; |
| XFillBitmapItem aXFillBitmapItem(aSet.GetPool(), aNullGraphic); |
| |
| aXFillBitmapItem.PutValue(aValue, nMemberId); |
| aSet.Put(aXFillBitmapItem); |
| bDone = true; |
| } |
| } |
| |
| break; |
| } |
| case RES_BACKGROUND: |
| { |
| //UUUU |
| const SvxBrushItem aOriginalBrushItem(getSvxBrushItemFromSourceSet(aSet, RES_BACKGROUND)); |
| SvxBrushItem aChangedBrushItem(aOriginalBrushItem); |
| |
| aChangedBrushItem.PutValue(aValue, nMemberId); |
| |
| if(!(aChangedBrushItem == aOriginalBrushItem)) |
| { |
| setSvxBrushItemAsFillAttributesToTargetSet(aChangedBrushItem, aSet); |
| } |
| |
| bDone = true; |
| break; |
| } |
| case OWN_ATTR_FILLBMP_MODE: |
| { |
| //UUUU |
| drawing::BitmapMode eMode; |
| |
| if(!(aValue >>= eMode)) |
| { |
| sal_Int32 nMode = 0; |
| |
| if(!(aValue >>= nMode)) |
| { |
| throw lang::IllegalArgumentException(); |
| } |
| |
| eMode = (drawing::BitmapMode)nMode; |
| } |
| |
| aSet.Put(XFillBmpStretchItem(drawing::BitmapMode_STRETCH == eMode)); |
| aSet.Put(XFillBmpTileItem(drawing::BitmapMode_REPEAT == eMode)); |
| |
| bDone = true; |
| break; |
| } |
| default: break; |
| } |
| |
| if(!bDone) |
| { |
| pPropSet->setPropertyValue( rPropName, aValue, aSet ); |
| } |
| } |
| |
| //UUUU clear parent again |
| aSet.SetParent(0); |
| } |
| |
| //UUUU need to ensure uniqueness of evtl. added NameOrIndex items |
| // currently in principle only needed when bTakeCareOfDrawingLayerFillStyle, |
| // but does not hurt and is easily forgotten later eventually, so keep it |
| // as common case |
| pDocShell->GetDoc()->CheckForUniqueItemForLineFillNameOrIndex(aSet); |
| |
| // AutomaticStyle creation |
| SfxItemSet_Pointer_t pSet = pDocShell->GetDoc()->GetIStyleAccess().cacheAutomaticStyle( aSet, eFamily ); |
| uno::Reference<style::XAutoStyle> xRet = new SwXAutoStyle(pDocShell->GetDoc(), pSet, eFamily); |
| |
| return xRet; |
| } |
| /*-- 31.05.2006 11:24:02--------------------------------------------------- |
| |
| -----------------------------------------------------------------------*/ |
| uno::Reference< container::XEnumeration > SwXAutoStyleFamily::createEnumeration( ) |
| throw (uno::RuntimeException) |
| { |
| if( !pDocShell ) |
| throw uno::RuntimeException(); |
| return uno::Reference< container::XEnumeration > |
| (new SwXAutoStylesEnumerator( pDocShell->GetDoc(), eFamily )); |
| } |
| /*-- 19.05.2006 11:24:03--------------------------------------------------- |
| |
| -----------------------------------------------------------------------*/ |
| uno::Type SwXAutoStyleFamily::getElementType( ) throw(uno::RuntimeException) |
| { |
| return ::getCppuType((const uno::Reference<style::XAutoStyle>*)0); |
| } |
| /*-- 19.05.2006 11:24:04--------------------------------------------------- |
| |
| -----------------------------------------------------------------------*/ |
| sal_Bool SwXAutoStyleFamily::hasElements( ) throw(uno::RuntimeException) |
| { |
| return sal_False; |
| } |
| |
| /*-- 31.05.2006 11:24:05--------------------------------------------------- |
| |
| -----------------------------------------------------------------------*/ |
| SwAutoStylesEnumImpl::SwAutoStylesEnumImpl( SwDoc* pInitDoc, IStyleAccess::SwAutoStyleFamily eFam ) |
| : pDoc( pInitDoc ), eFamily( eFam ) |
| { |
| // special case for ruby auto styles: |
| if ( IStyleAccess::AUTO_STYLE_RUBY == eFam ) |
| { |
| std::set< std::pair< sal_uInt16, sal_uInt16 > > aRubyMap; |
| SwAttrPool& rAttrPool = pDoc->GetAttrPool(); |
| sal_uInt32 nCount = rAttrPool.GetItemCount2( RES_TXTATR_CJK_RUBY ); |
| |
| for ( sal_uInt32 nI = 0; nI < nCount; ++nI ) |
| { |
| const SwFmtRuby* pItem = static_cast<const SwFmtRuby*>(rAttrPool.GetItem2( RES_TXTATR_CJK_RUBY, nI )); |
| if ( pItem && pItem->GetTxtRuby() ) |
| { |
| std::pair< sal_uInt16, sal_uInt16 > aPair( pItem->GetPosition(), pItem->GetAdjustment() ); |
| if ( aRubyMap.find( aPair ) == aRubyMap.end() ) |
| { |
| aRubyMap.insert( aPair ); |
| SfxItemSet_Pointer_t pItemSet( new SfxItemSet( rAttrPool, RES_TXTATR_CJK_RUBY, RES_TXTATR_CJK_RUBY ) ); |
| pItemSet->Put( *pItem ); |
| mAutoStyles.push_back( pItemSet ); |
| } |
| } |
| } |
| } |
| else |
| { |
| pDoc->GetIStyleAccess().getAllStyles( mAutoStyles, eFamily ); |
| } |
| |
| aIter = mAutoStyles.begin(); |
| } |
| |
| /*-- 31.05.2006 11:24:05--------------------------------------------------- |
| |
| -----------------------------------------------------------------------*/ |
| SwXAutoStylesEnumerator::SwXAutoStylesEnumerator( SwDoc* pDoc, IStyleAccess::SwAutoStyleFamily eFam ) |
| : pImpl( new SwAutoStylesEnumImpl( pDoc, eFam ) ) |
| { |
| // Register ourselves as a listener to the document (via the page descriptor) |
| pDoc->GetPageDescFromPool(RES_POOLPAGE_STANDARD)->Add(this); |
| } |
| /*-- 31.05.2006 11:24:05--------------------------------------------------- |
| |
| -----------------------------------------------------------------------*/ |
| SwXAutoStylesEnumerator::~SwXAutoStylesEnumerator() |
| { |
| delete pImpl; |
| } |
| |
| void SwXAutoStylesEnumerator::Modify( const SfxPoolItem* pOld, const SfxPoolItem *pNew) |
| { |
| ClientModify(this, pOld, pNew); |
| if(!GetRegisteredIn()) |
| { |
| delete pImpl; |
| pImpl = 0; |
| } |
| } |
| |
| |
| /*-- 31.05.2006 11:24:05--------------------------------------------------- |
| |
| -----------------------------------------------------------------------*/ |
| ::sal_Bool SwXAutoStylesEnumerator::hasMoreElements( ) |
| throw (uno::RuntimeException) |
| { |
| if( !pImpl ) |
| throw uno::RuntimeException(); |
| return pImpl->hasMoreElements(); |
| } |
| /*-- 31.05.2006 11:24:05--------------------------------------------------- |
| |
| -----------------------------------------------------------------------*/ |
| uno::Any SwXAutoStylesEnumerator::nextElement( ) |
| throw (container::NoSuchElementException, lang::WrappedTargetException, uno::RuntimeException) |
| { |
| if( !pImpl ) |
| throw uno::RuntimeException(); |
| uno::Any aRet; |
| if( pImpl->hasMoreElements() ) |
| { |
| SfxItemSet_Pointer_t pNextSet = pImpl->nextElement(); |
| uno::Reference< style::XAutoStyle > xAutoStyle = new SwXAutoStyle(pImpl->getDoc(), |
| pNextSet, pImpl->getFamily()); |
| aRet.setValue(&xAutoStyle, ::getCppuType((uno::Reference<style::XAutoStyle>*)0)); |
| } |
| return aRet; |
| } |
| |
| ////////////////////////////////////////////////////////////////////////////// |
| //UUUU SwXAutoStyle with the family IStyleAccess::AUTO_STYLE_PARA (or |
| // PROPERTY_MAP_PARA_AUTO_STYLE) now uses DrawingLayer FillStyles to allow |
| // unified paragraph background fill, thus the UNO API implementation has to |
| // support the needed slots for these. This seems to be used only for reading |
| // (no setPropertyValue implementation here), so maybe specialized for saving |
| // the Writer Doc to ODF |
| |
| SwXAutoStyle::SwXAutoStyle( |
| SwDoc* pDoc, |
| SfxItemSet_Pointer_t pInitSet, |
| IStyleAccess::SwAutoStyleFamily eFam) |
| : mpSet(pInitSet), |
| meFamily(eFam), |
| mrDoc(*pDoc) |
| { |
| // Register ourselves as a listener to the document (via the page descriptor) |
| mrDoc.GetPageDescFromPool(RES_POOLPAGE_STANDARD)->Add(this); |
| } |
| |
| SwXAutoStyle::~SwXAutoStyle() |
| { |
| } |
| |
| void SwXAutoStyle::Modify( |
| const SfxPoolItem* pOld, |
| const SfxPoolItem *pNew) |
| { |
| ClientModify(this, pOld, pNew); |
| |
| if(!GetRegisteredIn()) |
| { |
| mpSet.reset(); |
| } |
| } |
| |
| uno::Reference< beans::XPropertySetInfo > SwXAutoStyle::getPropertySetInfo() |
| throw (uno::RuntimeException) |
| { |
| uno::Reference< beans::XPropertySetInfo > xRet; |
| switch( meFamily ) |
| { |
| case IStyleAccess::AUTO_STYLE_CHAR: |
| { |
| static uno::Reference< beans::XPropertySetInfo > xCharRef; |
| if(!xCharRef.is()) |
| { |
| xCharRef = aSwMapProvider.GetPropertySet(PROPERTY_MAP_CHAR_AUTO_STYLE)->getPropertySetInfo(); |
| } |
| xRet = xCharRef; |
| } |
| break; |
| case IStyleAccess::AUTO_STYLE_RUBY: |
| { |
| static uno::Reference< beans::XPropertySetInfo > xRubyRef; |
| if(!xRubyRef.is()) |
| { |
| sal_uInt16 nMapId = PROPERTY_MAP_RUBY_AUTO_STYLE; |
| xRubyRef = aSwMapProvider.GetPropertySet(nMapId)->getPropertySetInfo(); |
| } |
| xRet = xRubyRef; |
| } |
| break; |
| case IStyleAccess::AUTO_STYLE_PARA: |
| { |
| static uno::Reference< beans::XPropertySetInfo > xParaRef; |
| if(!xParaRef.is()) |
| { |
| sal_uInt16 nMapId = PROPERTY_MAP_PARA_AUTO_STYLE; |
| xParaRef = aSwMapProvider.GetPropertySet(nMapId)->getPropertySetInfo(); |
| } |
| xRet = xParaRef; |
| } |
| break; |
| |
| default: |
| ; |
| } |
| |
| return xRet; |
| } |
| |
| void SwXAutoStyle::setPropertyValue( |
| const OUString& /*rPropertyName*/, |
| const uno::Any& /*rValue*/ ) |
| throw( beans::UnknownPropertyException, beans::PropertyVetoException, lang::IllegalArgumentException, lang::WrappedTargetException, uno::RuntimeException) |
| { |
| } |
| |
| uno::Any SwXAutoStyle::getPropertyValue( |
| const OUString& rPropertyName ) |
| throw( beans::UnknownPropertyException, lang::WrappedTargetException, uno::RuntimeException ) |
| { |
| vos::OGuard aGuard(Application::GetSolarMutex()); |
| const uno::Sequence<OUString> aProperties(&rPropertyName, 1); |
| |
| return GetPropertyValues_Impl(aProperties).getConstArray()[0]; |
| } |
| |
| void SwXAutoStyle::addPropertyChangeListener( |
| const OUString& /*aPropertyName*/, |
| const uno::Reference< beans::XPropertyChangeListener >& /*xListener*/ ) |
| throw( beans::UnknownPropertyException, lang::WrappedTargetException, uno::RuntimeException ) |
| { |
| } |
| |
| void SwXAutoStyle::removePropertyChangeListener( |
| const OUString& /*aPropertyName*/, |
| const uno::Reference< beans::XPropertyChangeListener >& /*aListener*/ ) |
| throw( beans::UnknownPropertyException, lang::WrappedTargetException, uno::RuntimeException ) |
| { |
| } |
| |
| void SwXAutoStyle::addVetoableChangeListener( |
| const OUString& /*PropertyName*/, |
| const uno::Reference< beans::XVetoableChangeListener >& /*aListener*/ ) |
| throw( beans::UnknownPropertyException, lang::WrappedTargetException, uno::RuntimeException ) |
| { |
| } |
| |
| void SwXAutoStyle::removeVetoableChangeListener( |
| const OUString& /*PropertyName*/, |
| const uno::Reference< beans::XVetoableChangeListener >& /*aListener*/ ) |
| throw( beans::UnknownPropertyException, lang::WrappedTargetException, uno::RuntimeException ) |
| { |
| } |
| |
| void SwXAutoStyle::setPropertyValues( |
| const uno::Sequence< ::rtl::OUString >& /*aPropertyNames*/, |
| const uno::Sequence< uno::Any >& /*aValues*/ ) |
| throw (beans::PropertyVetoException, lang::IllegalArgumentException, lang::WrappedTargetException, uno::RuntimeException) |
| { |
| } |
| |
| uno::Sequence< uno::Any > SwXAutoStyle::GetPropertyValues_Impl( |
| const uno::Sequence< OUString > & rPropertyNames ) |
| throw( beans::UnknownPropertyException, lang::WrappedTargetException, uno::RuntimeException ) |
| { |
| if( !mpSet.get() ) |
| { |
| throw uno::RuntimeException(); |
| } |
| |
| // query_item |
| sal_Int8 nPropSetId = PROPERTY_MAP_CHAR_AUTO_STYLE; |
| |
| switch(meFamily) |
| { |
| case IStyleAccess::AUTO_STYLE_CHAR : nPropSetId = PROPERTY_MAP_CHAR_AUTO_STYLE; break; |
| case IStyleAccess::AUTO_STYLE_RUBY : nPropSetId = PROPERTY_MAP_RUBY_AUTO_STYLE; break; |
| case IStyleAccess::AUTO_STYLE_PARA : nPropSetId = PROPERTY_MAP_PARA_AUTO_STYLE; break; |
| default: ; |
| } |
| |
| const SfxItemPropertySet* pPropSet = aSwMapProvider.GetPropertySet(nPropSetId); |
| const SfxItemPropertyMap *pMap = pPropSet->getPropertyMap(); |
| const OUString* pNames = rPropertyNames.getConstArray(); |
| const sal_Int32 nLen(rPropertyNames.getLength()); |
| uno::Sequence< uno::Any > aRet( nLen ); |
| uno::Any* pValues = aRet.getArray(); |
| const bool bTakeCareOfDrawingLayerFillStyle(IStyleAccess::AUTO_STYLE_PARA == meFamily); |
| |
| for( sal_Int32 i = 0; i < nLen; ++i ) |
| { |
| const OUString& rPropName = pNames[i]; |
| const SfxItemPropertySimpleEntry* pEntry = pMap->getByName(rPropName); |
| |
| if(!pEntry) |
| { |
| throw beans::UnknownPropertyException(OUString ( RTL_CONSTASCII_USTRINGPARAM ( "Unknown property: " ) ) + rPropName, static_cast < cppu::OWeakObject * > ( this ) ); |
| } |
| |
| uno::Any aTarget; |
| bool bDone(false); |
| |
| if ( RES_TXTATR_AUTOFMT == pEntry->nWID || RES_AUTO_STYLE == pEntry->nWID ) |
| { |
| OUString sName(StylePool::nameOf( mpSet )); |
| aTarget <<= sName; |
| bDone = true; |
| } |
| else if(bTakeCareOfDrawingLayerFillStyle) |
| { |
| //UUUU add support for DrawingLayer FillStyle slots |
| switch(pEntry->nWID) |
| { |
| case RES_BACKGROUND: |
| { |
| const SvxBrushItem aOriginalBrushItem(getSvxBrushItemFromSourceSet(*mpSet, RES_BACKGROUND)); |
| const sal_uInt8 nMemberId(pEntry->nMemberId & (~SFX_METRIC_ITEM)); |
| |
| if(!aOriginalBrushItem.QueryValue(aTarget, nMemberId)) |
| { |
| OSL_ENSURE(false, "Error getting attribute from RES_BACKGROUND (!)"); |
| } |
| |
| bDone = true; |
| break; |
| } |
| case OWN_ATTR_FILLBMP_MODE: |
| { |
| const XFillBmpStretchItem* pStretchItem = dynamic_cast< const XFillBmpStretchItem* >(&mpSet->Get(XATTR_FILLBMP_STRETCH)); |
| const XFillBmpTileItem* pTileItem = dynamic_cast< const XFillBmpTileItem* >(&mpSet->Get(XATTR_FILLBMP_TILE)); |
| |
| if( pTileItem && pTileItem->GetValue() ) |
| { |
| aTarget <<= drawing::BitmapMode_REPEAT; |
| } |
| else if( pStretchItem && pStretchItem->GetValue() ) |
| { |
| aTarget <<= drawing::BitmapMode_STRETCH; |
| } |
| else |
| { |
| aTarget <<= drawing::BitmapMode_NO_REPEAT; |
| } |
| |
| bDone = true; |
| break; |
| } |
| } |
| } |
| |
| if(!bDone) |
| { |
| pPropSet->getPropertyValue( *pEntry, *mpSet, aTarget ); |
| } |
| |
| if(bTakeCareOfDrawingLayerFillStyle) |
| { |
| if(pEntry->pType && *(pEntry->pType) == ::getCppuType((const sal_Int16*)0) && *(pEntry->pType) != aTarget.getValueType()) |
| { |
| // since the sfx uint16 item now exports a sal_Int32, we may have to fix this here |
| sal_Int32 nValue = 0; |
| aTarget >>= nValue; |
| aTarget <<= (sal_Int16)nValue; |
| } |
| |
| // check for needed metric translation |
| if(pEntry->nMemberId & SFX_METRIC_ITEM) |
| { |
| bool bDoIt(true); |
| |
| if(XATTR_FILLBMP_SIZEX == pEntry->nWID || XATTR_FILLBMP_SIZEY == pEntry->nWID) |
| { |
| // exception: If these ItemTypes are used, do not convert when these are negative |
| // since this means they are intended as percent values |
| sal_Int32 nValue = 0; |
| |
| if(aTarget >>= nValue) |
| { |
| bDoIt = nValue > 0; |
| } |
| } |
| |
| if(bDoIt) |
| { |
| const SfxItemPool& rPool = mrDoc.GetAttrPool(); |
| const SfxMapUnit eMapUnit(rPool.GetMetric(pEntry->nWID)); |
| |
| if(eMapUnit != SFX_MAPUNIT_100TH_MM) |
| { |
| SvxUnoConvertToMM(eMapUnit, aTarget); |
| } |
| } |
| } |
| } |
| |
| // add value |
| pValues[i] = aTarget; |
| } |
| |
| return aRet; |
| } |
| |
| uno::Sequence< uno::Any > SwXAutoStyle::getPropertyValues ( |
| const uno::Sequence< ::rtl::OUString >& rPropertyNames ) |
| throw (uno::RuntimeException) |
| { |
| vos::OGuard aGuard(Application::GetSolarMutex()); |
| uno::Sequence< uno::Any > aValues; |
| |
| // workaround for bad designed API |
| try |
| { |
| aValues = GetPropertyValues_Impl( rPropertyNames ); |
| } |
| catch (beans::UnknownPropertyException &) |
| { |
| throw uno::RuntimeException(OUString ( RTL_CONSTASCII_USTRINGPARAM ( "Unknown property exception caught" ) ), static_cast < cppu::OWeakObject * > ( this ) ); |
| } |
| catch (lang::WrappedTargetException &) |
| { |
| throw uno::RuntimeException(OUString ( RTL_CONSTASCII_USTRINGPARAM ( "WrappedTargetException caught" ) ), static_cast < cppu::OWeakObject * > ( this ) ); |
| } |
| |
| return aValues; |
| } |
| |
| void SwXAutoStyle::addPropertiesChangeListener( |
| const uno::Sequence< ::rtl::OUString >& /*aPropertyNames*/, |
| const uno::Reference< beans::XPropertiesChangeListener >& /*xListener*/ ) |
| throw (uno::RuntimeException) |
| { |
| } |
| |
| void SwXAutoStyle::removePropertiesChangeListener( |
| const uno::Reference< beans::XPropertiesChangeListener >& /*xListener*/ ) |
| throw (uno::RuntimeException) |
| { |
| } |
| |
| void SwXAutoStyle::firePropertiesChangeEvent( |
| const uno::Sequence< ::rtl::OUString >& /*aPropertyNames*/, |
| const uno::Reference< beans::XPropertiesChangeListener >& /*xListener*/ ) |
| throw (uno::RuntimeException) |
| { |
| } |
| |
| beans::PropertyState SwXAutoStyle::getPropertyState( |
| const OUString& rPropertyName ) |
| throw( beans::UnknownPropertyException, uno::RuntimeException) |
| { |
| vos::OGuard aGuard(Application::GetSolarMutex()); |
| |
| uno::Sequence< OUString > aNames(1); |
| OUString* pNames = aNames.getArray(); |
| pNames[0] = rPropertyName; |
| uno::Sequence< beans::PropertyState > aStates = getPropertyStates(aNames); |
| return aStates.getConstArray()[0]; |
| } |
| |
| void SwXAutoStyle::setPropertyToDefault( |
| const OUString& /*PropertyName*/ ) |
| throw( beans::UnknownPropertyException, uno::RuntimeException ) |
| { |
| } |
| |
| uno::Any SwXAutoStyle::getPropertyDefault( |
| const OUString& rPropertyName ) |
| throw( beans::UnknownPropertyException, lang::WrappedTargetException, uno::RuntimeException) |
| { |
| const uno::Sequence < OUString > aSequence ( &rPropertyName, 1 ); |
| |
| return getPropertyDefaults ( aSequence ).getConstArray()[0]; |
| } |
| |
| uno::Sequence< beans::PropertyState > SwXAutoStyle::getPropertyStates( |
| const uno::Sequence< ::rtl::OUString >& rPropertyNames ) |
| throw (beans::UnknownPropertyException, uno::RuntimeException) |
| { |
| if( !mpSet.get() ) |
| { |
| throw uno::RuntimeException(); |
| } |
| |
| vos::OGuard aGuard(Application::GetSolarMutex()); |
| uno::Sequence< beans::PropertyState > aRet(rPropertyNames.getLength()); |
| beans::PropertyState* pStates = aRet.getArray(); |
| const OUString* pNames = rPropertyNames.getConstArray(); |
| sal_Int8 nPropSetId = PROPERTY_MAP_CHAR_AUTO_STYLE; |
| |
| switch(meFamily) |
| { |
| case IStyleAccess::AUTO_STYLE_CHAR : nPropSetId = PROPERTY_MAP_CHAR_AUTO_STYLE; break; |
| case IStyleAccess::AUTO_STYLE_RUBY : nPropSetId = PROPERTY_MAP_RUBY_AUTO_STYLE; break; |
| case IStyleAccess::AUTO_STYLE_PARA : nPropSetId = PROPERTY_MAP_PARA_AUTO_STYLE; break; |
| default: ; |
| } |
| |
| const SfxItemPropertySet* pPropSet = aSwMapProvider.GetPropertySet(nPropSetId); |
| const SfxItemPropertyMap *pMap = pPropSet->getPropertyMap(); |
| const bool bTakeCareOfDrawingLayerFillStyle(IStyleAccess::AUTO_STYLE_PARA == meFamily); |
| |
| for(sal_Int32 i = 0; i < rPropertyNames.getLength(); i++) |
| { |
| const OUString& rPropName = pNames[i]; |
| const SfxItemPropertySimpleEntry* pEntry = pMap->getByName(rPropName); |
| |
| if(!pEntry) |
| { |
| throw beans::UnknownPropertyException(OUString ( RTL_CONSTASCII_USTRINGPARAM ( "Unknown property: " ) ) + rPropName, static_cast < cppu::OWeakObject * > ( this ) ); |
| } |
| |
| bool bDone(false); |
| |
| if(bTakeCareOfDrawingLayerFillStyle) |
| { |
| //UUUU DrawingLayer PropertyStyle support |
| switch(pEntry->nWID) |
| { |
| case OWN_ATTR_FILLBMP_MODE: |
| { |
| if(SFX_ITEM_SET == mpSet->GetItemState(XATTR_FILLBMP_STRETCH, false) |
| || SFX_ITEM_SET == mpSet->GetItemState(XATTR_FILLBMP_TILE, false)) |
| { |
| pStates[i] = beans::PropertyState_DIRECT_VALUE; |
| } |
| else |
| { |
| pStates[i] = beans::PropertyState_AMBIGUOUS_VALUE; |
| } |
| |
| bDone = true; |
| break; |
| } |
| case RES_BACKGROUND: |
| { |
| if(SWUnoHelper::needToMapFillItemsToSvxBrushItemTypes(*mpSet)) |
| { |
| pStates[i] = beans::PropertyState_DIRECT_VALUE; |
| bDone = true; |
| } |
| |
| break; |
| } |
| } |
| } |
| |
| if(!bDone) |
| { |
| pStates[i] = pPropSet->getPropertyState(*pEntry, *mpSet ); |
| } |
| } |
| |
| return aRet; |
| } |
| |
| void SwXAutoStyle::setAllPropertiesToDefault( ) |
| throw (uno::RuntimeException) |
| { |
| } |
| |
| void SwXAutoStyle::setPropertiesToDefault( |
| const uno::Sequence< ::rtl::OUString >& rPropertyNames ) |
| throw (beans::UnknownPropertyException, uno::RuntimeException) |
| { |
| if( !mpSet.get() ) |
| { |
| throw uno::RuntimeException(); |
| } |
| |
| const bool bTakeCareOfDrawingLayerFillStyle(IStyleAccess::AUTO_STYLE_PARA == meFamily); |
| |
| if(!bTakeCareOfDrawingLayerFillStyle) |
| { |
| return; |
| } |
| |
| //UUUU support DrawingLayer FillStyle slots from here on |
| vos::OGuard aGuard(Application::GetSolarMutex()); |
| const OUString* pNames = rPropertyNames.getConstArray(); |
| sal_Int8 nPropSetId = PROPERTY_MAP_CHAR_AUTO_STYLE; |
| |
| switch(meFamily) |
| { |
| case IStyleAccess::AUTO_STYLE_CHAR : nPropSetId = PROPERTY_MAP_CHAR_AUTO_STYLE; break; |
| case IStyleAccess::AUTO_STYLE_RUBY : nPropSetId = PROPERTY_MAP_RUBY_AUTO_STYLE; break; |
| case IStyleAccess::AUTO_STYLE_PARA : nPropSetId = PROPERTY_MAP_PARA_AUTO_STYLE; break; |
| default: ; |
| } |
| |
| const SfxItemPropertySet* pPropSet = aSwMapProvider.GetPropertySet(nPropSetId); |
| const SfxItemPropertyMap *pMap = pPropSet->getPropertyMap(); |
| |
| for(sal_Int32 i = 0; i < rPropertyNames.getLength(); i++) |
| { |
| const OUString& rPropName = pNames[i]; |
| const SfxItemPropertySimpleEntry* pEntry = pMap->getByName(rPropName); |
| |
| if(!pEntry) |
| { |
| throw beans::UnknownPropertyException(OUString ( RTL_CONSTASCII_USTRINGPARAM ( "Unknown property: " ) ) + rPropName, static_cast < cppu::OWeakObject * > ( this ) ); |
| } |
| |
| switch(pEntry->nWID) |
| { |
| case OWN_ATTR_FILLBMP_MODE: |
| { |
| mpSet->ClearItem(XATTR_FILLBMP_STRETCH); |
| mpSet->ClearItem(XATTR_FILLBMP_TILE); |
| } |
| } |
| } |
| } |
| |
| uno::Sequence< uno::Any > SwXAutoStyle::getPropertyDefaults( |
| const uno::Sequence< ::rtl::OUString >& /*aPropertyNames*/ ) |
| throw (beans::UnknownPropertyException, lang::WrappedTargetException, uno::RuntimeException) |
| { |
| uno::Sequence< uno::Any > aRet(0); |
| |
| return aRet; |
| } |
| |
| uno::Sequence< beans::PropertyValue > SwXAutoStyle::getProperties() |
| throw (uno::RuntimeException) |
| { |
| if( !mpSet.get() ) |
| throw uno::RuntimeException(); |
| vos::OGuard aGuard(Application::GetSolarMutex()); |
| std::vector< beans::PropertyValue > aPropertyVector; |
| |
| sal_Int8 nPropSetId = 0; |
| switch(meFamily) |
| { |
| case IStyleAccess::AUTO_STYLE_CHAR : nPropSetId = PROPERTY_MAP_CHAR_AUTO_STYLE; break; |
| case IStyleAccess::AUTO_STYLE_RUBY : nPropSetId = PROPERTY_MAP_RUBY_AUTO_STYLE; break; |
| case IStyleAccess::AUTO_STYLE_PARA : nPropSetId = PROPERTY_MAP_PARA_AUTO_STYLE; break; |
| default: |
| ; |
| } |
| |
| const SfxItemPropertySet* pPropSet = aSwMapProvider.GetPropertySet(nPropSetId); |
| const SfxItemPropertyMap *pMap = pPropSet->getPropertyMap(); |
| PropertyEntryVector_t aPropVector = pMap->getPropertyEntries(); |
| // struct compareWhichIds |
| // { |
| // bool operator()(const sal_uInt16 w1, const sal_uInt16 w2) const |
| // { |
| // return w1 < w2; |
| // } |
| // }; |
| // typedef std::map<const sal_uInt16, SfxItemPropertyNamedEntry, compareWhichIds> PropertyMap_t; |
| // PropertyMap_t aPropMap; |
| // aPropMap.reserve( aPropVector.size() ); |
| // PropertyEntryVector_t::const_iterator aIt = aPropertyEntries.begin(); |
| // while( aIt != aPropertyEntries.end() ) |
| // { |
| // aPropMap[aIt->nWID] = *aIt; |
| // ++aIt; |
| // } |
| |
| SfxItemSet& rSet = *mpSet.get(); |
| SfxItemIter aIter(rSet); |
| const SfxPoolItem* pItem = aIter.FirstItem(); |
| |
| while ( pItem ) |
| { |
| const sal_uInt16 nWID = pItem->Which(); |
| |
| // PropertyMap_t::const_iterator aMapIt = aPropMap[nWID]; |
| // if( aMapIt != aPropMap.getEnd() ) |
| // { |
| // beans::PropertyValue aPropertyValue; |
| // aPropertyValue.Name = aIt->sName; |
| // pItem->QueryValue( aPropertyValue.Value, aIt->nMemberId ); |
| // aPropertyVector.push_back( aPropertyValue ); |
| // } |
| // TODO: Optimize - and fix! the old iteration filled each WhichId |
| // only once but there are more properties than WhichIds |
| PropertyEntryVector_t::const_iterator aIt = aPropVector.begin(); |
| while( aIt != aPropVector.end() ) |
| { |
| if ( aIt->nWID == nWID ) |
| { |
| beans::PropertyValue aPropertyValue; |
| aPropertyValue.Name = aIt->sName; |
| pItem->QueryValue( aPropertyValue.Value, aIt->nMemberId ); |
| aPropertyVector.push_back( aPropertyValue ); |
| } |
| ++aIt; |
| } |
| /* int i = 0; |
| while ( pMap[i].nWID != 0 ) |
| { |
| if ( pMap[i].nWID == nWID ) |
| { |
| beans::PropertyValue aPropertyValue; |
| String sString( OUString::createFromAscii( pMap[i].pName ) ); |
| aPropertyValue.Name = sString; |
| pItem->QueryValue( aPropertyValue.Value, pMap[i].nMemberId ); |
| aPropertyVector.push_back( aPropertyValue ); |
| break; |
| } |
| ++i; |
| }*/ |
| pItem = aIter.NextItem(); |
| } |
| |
| const sal_Int32 nCount = aPropertyVector.size(); |
| uno::Sequence< beans::PropertyValue > aRet( nCount ); |
| beans::PropertyValue* pProps = aRet.getArray(); |
| |
| for ( int i = 0; i < nCount; ++i, pProps++ ) |
| { |
| *pProps = aPropertyVector[i]; |
| } |
| |
| return aRet; |
| } |
| |
| ////////////////////////////////////////////////////////////////////////////// |
| //eof |