summaryrefslogtreecommitdiff
path: root/sd/source/core/stlsheet.cxx
diff options
context:
space:
mode:
Diffstat (limited to 'sd/source/core/stlsheet.cxx')
-rw-r--r--sd/source/core/stlsheet.cxx1448
1 files changed, 1448 insertions, 0 deletions
diff --git a/sd/source/core/stlsheet.cxx b/sd/source/core/stlsheet.cxx
new file mode 100644
index 000000000000..7e090d0e9a98
--- /dev/null
+++ b/sd/source/core/stlsheet.cxx
@@ -0,0 +1,1448 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+// MARKER(update_precomp.py): autogen include statement, do not remove
+#include "precompiled_sd.hxx"
+
+#include <com/sun/star/beans/PropertyAttribute.hpp>
+#include <com/sun/star/lang/DisposedException.hpp>
+#include <com/sun/star/style/XStyle.hpp>
+
+#include <osl/mutex.hxx>
+#include <vos/mutex.hxx>
+#include <vcl/svapp.hxx>
+#include <comphelper/serviceinfohelper.hxx>
+#include <boost/bind.hpp>
+
+#include "eetext.hxx"
+#include <editeng/eeitem.hxx>
+#include <editeng/fhgtitem.hxx>
+#include <svx/svdoattr.hxx>
+#include <editeng/ulspitem.hxx>
+#include <svl/smplhint.hxx>
+#include <svl/itemset.hxx>
+
+#include <svx/xflbmtit.hxx>
+#include <svx/xflbstit.hxx>
+#include <editeng/bulitem.hxx>
+#include <editeng/lrspitem.hxx>
+#include <svx/unoshprp.hxx>
+#include <svx/unoshape.hxx>
+#include <svx/svdpool.hxx>
+#include "stlsheet.hxx"
+#include "sdresid.hxx"
+#include "sdpage.hxx"
+#include "drawdoc.hxx"
+#include "stlpool.hxx"
+#include "glob.hrc"
+#include "app.hrc"
+#include "glob.hxx"
+#include "helpids.h"
+#include "../ui/inc/DrawViewShell.hxx"
+#include "../ui/inc/ViewShellBase.hxx"
+
+using ::rtl::OUString;
+using ::osl::MutexGuard;
+using ::osl::ClearableMutexGuard;
+using ::cppu::OInterfaceContainerHelper;
+using namespace ::vos;
+using namespace ::com::sun::star::uno;
+using namespace ::com::sun::star::util;
+using namespace ::com::sun::star::lang;
+using namespace ::com::sun::star::style;
+using namespace ::com::sun::star::beans;
+using namespace ::com::sun::star::container;
+using namespace ::com::sun::star::drawing;
+
+#define WID_STYLE_DISPNAME 7998
+#define WID_STYLE_FAMILY 7999
+
+static SvxItemPropertySet& GetStylePropertySet()
+{
+ static const SfxItemPropertyMapEntry aFullPropertyMap_Impl[] =
+ {
+ { RTL_CONSTASCII_STRINGPARAM("Family"), WID_STYLE_FAMILY, &::getCppuType((const OUString*)0), PropertyAttribute::READONLY, 0},
+ { RTL_CONSTASCII_STRINGPARAM("UserDefinedAttributes"), SDRATTR_XMLATTRIBUTES, &XNameContainer::static_type(), 0, 0},
+ { RTL_CONSTASCII_STRINGPARAM("DisplayName"), WID_STYLE_DISPNAME, &::getCppuType((const OUString*)0), PropertyAttribute::READONLY, 0},
+
+ SVX_UNOEDIT_NUMBERING_PROPERTIE,
+ SHADOW_PROPERTIES
+ LINE_PROPERTIES
+ LINE_PROPERTIES_START_END
+ FILL_PROPERTIES
+ EDGERADIUS_PROPERTIES
+ TEXT_PROPERTIES_DEFAULTS
+ CONNECTOR_PROPERTIES
+ SPECIAL_DIMENSIONING_PROPERTIES_DEFAULTS
+ {0,0,0,0,0,0}
+ };
+
+ static SvxItemPropertySet aPropSet( aFullPropertyMap_Impl, SdrObject::GetGlobalDrawObjectItemPool() );
+ return aPropSet;
+}
+
+class ModifyListenerForewarder : public SfxListener
+{
+public:
+ ModifyListenerForewarder( SdStyleSheet* pStyleSheet );
+
+ virtual void Notify(SfxBroadcaster& rBC, const SfxHint& rHint);
+
+private:
+ SdStyleSheet* mpStyleSheet;
+};
+
+ModifyListenerForewarder::ModifyListenerForewarder( SdStyleSheet* pStyleSheet )
+: mpStyleSheet( pStyleSheet )
+{
+ if( pStyleSheet )
+ {
+ SfxBroadcaster& rBC = static_cast< SfxBroadcaster& >( *pStyleSheet );
+ StartListening( rBC );
+ }
+}
+
+void ModifyListenerForewarder::Notify(SfxBroadcaster& /*rBC*/, const SfxHint& /*rHint*/)
+{
+ if( mpStyleSheet )
+ mpStyleSheet->notifyModifyListener();
+}
+
+SdStyleSheet::SdStyleSheet(const OUString& rDisplayName, SfxStyleSheetBasePool& _rPool, SfxStyleFamily eFamily, USHORT _nMask)
+: SdStyleSheetBase( UniString( rDisplayName ), _rPool, eFamily, _nMask)
+, ::cppu::BaseMutex()
+, msApiName( rDisplayName )
+, mxPool( const_cast< SfxStyleSheetBasePool* >(&_rPool) )
+, mrBHelper( m_aMutex )
+{
+}
+
+SdStyleSheet::SdStyleSheet( const SdStyleSheet & r )
+: SdStyleSheetBase( r )
+, ::cppu::BaseMutex()
+, msApiName( r.msApiName )
+, mxPool( r.mxPool )
+, mrBHelper( m_aMutex )
+{
+}
+
+SdStyleSheet::~SdStyleSheet()
+{
+ delete pSet;
+ pSet = NULL; // damit nachfolgende Destruktoren eine Chance haben
+}
+
+void SdStyleSheet::SetApiName( const OUString& rApiName )
+{
+ msApiName = rApiName;
+}
+
+rtl::OUString SdStyleSheet::GetApiName() const
+{
+ if( msApiName.getLength() )
+ return msApiName;
+ else
+ return GetName();
+}
+
+
+void SdStyleSheet::Load (SvStream& rIn, USHORT nVersion)
+{
+ SfxStyleSheetBase::Load(rIn, nVersion);
+
+ // Die Default-Maske war frueher 0xAFFE.
+ // Aus dieser Default-Maske wurden die benoetigten Flags ausmaskiert.
+ // Nun wurde das Flag SFXSTYLEBIT_READONLY eingefuehrt, was dazu
+ // das alle StyleSheets read-only waren.
+ // Da im Draw kein StyleSheet read-only sein soll, wird an dieser Stelle
+ // das Flag zurueckgesetzt.
+ nMask &= ~SFXSTYLEBIT_READONLY;
+}
+
+/*************************************************************************
+|*
+|* Store
+|*
+\************************************************************************/
+
+void SdStyleSheet::Store(SvStream& rOut)
+{
+ SfxStyleSheetBase::Store(rOut);
+}
+
+/*************************************************************************
+|*
+|* Parent setzen
+|*
+\************************************************************************/
+
+BOOL SdStyleSheet::SetParent(const String& rParentName)
+{
+ BOOL bResult = FALSE;
+
+ if (SfxStyleSheet::SetParent(rParentName))
+ {
+ // PseudoStyleSheets haben keine eigenen ItemSets
+ if (nFamily != SD_STYLE_FAMILY_PSEUDO)
+ {
+ if( rParentName.Len() )
+ {
+ SfxStyleSheetBase* pStyle = rPool.Find(rParentName, nFamily);
+ if (pStyle)
+ {
+ bResult = TRUE;
+ SfxItemSet& rParentSet = pStyle->GetItemSet();
+ GetItemSet().SetParent(&rParentSet);
+ Broadcast( SfxSimpleHint( SFX_HINT_DATACHANGED ) );
+ }
+ }
+ else
+ {
+ bResult = TRUE;
+ GetItemSet().SetParent(NULL);
+ Broadcast( SfxSimpleHint( SFX_HINT_DATACHANGED ) );
+ }
+ }
+ else
+ {
+ bResult = TRUE;
+ }
+ }
+ return bResult;
+}
+
+/*************************************************************************
+|*
+|* ItemSet ggfs. erzeugen und herausreichen
+|*
+\************************************************************************/
+
+SfxItemSet& SdStyleSheet::GetItemSet()
+{
+ if (nFamily == SD_STYLE_FAMILY_GRAPHICS || nFamily == SD_STYLE_FAMILY_MASTERPAGE)
+ {
+ // ggfs. das ItemSet 'on demand' anlegen
+ if (!pSet)
+ {
+ USHORT nWhichPairTable[] = { XATTR_LINE_FIRST, XATTR_LINE_LAST,
+ XATTR_FILL_FIRST, XATTR_FILL_LAST,
+
+ SDRATTR_SHADOW_FIRST, SDRATTR_SHADOW_LAST,
+ SDRATTR_TEXT_MINFRAMEHEIGHT, SDRATTR_TEXT_CONTOURFRAME,
+
+ SDRATTR_TEXT_WORDWRAP, SDRATTR_TEXT_AUTOGROWSIZE,
+
+ SDRATTR_EDGE_FIRST, SDRATTR_EDGE_LAST,
+ SDRATTR_MEASURE_FIRST, SDRATTR_MEASURE_LAST,
+
+ EE_PARA_START, EE_CHAR_END,
+
+ SDRATTR_XMLATTRIBUTES, SDRATTR_TEXT_USEFIXEDCELLHEIGHT,
+
+ SDRATTR_3D_FIRST, SDRATTR_3D_LAST,
+ 0, 0 };
+
+ pSet = new SfxItemSet(GetPool().GetPool(), nWhichPairTable);
+ }
+
+ return *pSet;
+ }
+
+ else if( nFamily == SD_STYLE_FAMILY_CELL )
+ {
+ if (!pSet)
+ {
+ USHORT nWhichPairTable[] = { XATTR_LINE_FIRST, XATTR_LINE_LAST,
+ XATTR_FILL_FIRST, XATTR_FILL_LAST,
+
+ SDRATTR_SHADOW_FIRST, SDRATTR_SHADOW_LAST,
+ SDRATTR_TEXT_MINFRAMEHEIGHT, SDRATTR_TEXT_CONTOURFRAME,
+
+ SDRATTR_TEXT_WORDWRAP, SDRATTR_TEXT_AUTOGROWSIZE,
+
+ EE_PARA_START, EE_CHAR_END,
+
+ SDRATTR_TABLE_FIRST, SDRATTR_TABLE_LAST,
+ SDRATTR_XMLATTRIBUTES, SDRATTR_XMLATTRIBUTES,
+
+ 0, 0 };
+
+ pSet = new SfxItemSet(GetPool().GetPool(), nWhichPairTable);
+ }
+
+ return *pSet;
+ }
+
+ // dies ist eine Stellvertretervorlage fuer die interne Vorlage des
+ // aktuellen Praesentationslayouts: dessen ItemSet returnieren
+ else
+ {
+// return (GetRealStyleSheet()->GetItemSet());
+
+ SdStyleSheet* pSdSheet = GetRealStyleSheet();
+
+ if (pSdSheet)
+ {
+ return(pSdSheet->GetItemSet());
+ }
+ else
+ {
+ if (!pSet)
+ {
+ USHORT nWhichPairTable[] = { XATTR_LINE_FIRST, XATTR_LINE_LAST,
+ XATTR_FILL_FIRST, XATTR_FILL_LAST,
+
+ SDRATTR_SHADOW_FIRST, SDRATTR_SHADOW_LAST,
+ SDRATTR_TEXT_MINFRAMEHEIGHT, SDRATTR_TEXT_CONTOURFRAME,
+
+ SDRATTR_TEXT_WORDWRAP, SDRATTR_TEXT_AUTOGROWSIZE,
+
+ SDRATTR_EDGE_FIRST, SDRATTR_EDGE_LAST,
+ SDRATTR_MEASURE_FIRST, SDRATTR_MEASURE_LAST,
+
+ EE_PARA_START, EE_CHAR_END,
+
+ SDRATTR_XMLATTRIBUTES, SDRATTR_TEXT_USEFIXEDCELLHEIGHT,
+
+ SDRATTR_3D_FIRST, SDRATTR_3D_LAST,
+ 0, 0 };
+
+ pSet = new SfxItemSet(GetPool().GetPool(), nWhichPairTable);
+ }
+
+ return(*pSet);
+ }
+ }
+}
+
+/*************************************************************************
+|*
+|* IsUsed(), eine Vorlage gilt als benutzt, wenn sie von eingefuegten Objekten
+|* oder von benutzten Vorlagen referenziert wird
+|*
+\************************************************************************/
+
+BOOL SdStyleSheet::IsUsed() const
+{
+ BOOL bResult = FALSE;
+
+ USHORT nListenerCount = GetListenerCount();
+ if (nListenerCount > 0)
+ {
+ for (USHORT n = 0; n < nListenerCount; n++)
+ {
+ SfxListener* pListener = GetListener(n);
+ if( pListener == this )
+ continue;
+
+ // NULL-Pointer ist im Listener-Array erlaubt
+ if (pListener && pListener->ISA(SdrAttrObj))
+ {
+ bResult = ((SdrAttrObj*)pListener)->IsInserted();
+ }
+ else if (pListener && pListener->ISA(SfxStyleSheet))
+ {
+ bResult = ((SfxStyleSheet*)pListener)->IsUsed();
+ }
+ if (bResult)
+ break;
+ }
+ }
+
+ if( !bResult )
+ {
+ MutexGuard aGuard( mrBHelper.rMutex );
+
+ OInterfaceContainerHelper * pContainer = mrBHelper.getContainer( XModifyListener::static_type() );
+ if( pContainer )
+ {
+ Sequence< Reference< XInterface > > aModifyListeners( pContainer->getElements() );
+ Reference< XInterface > *p = aModifyListeners.getArray();
+ sal_Int32 nCount = aModifyListeners.getLength();
+ while( nCount-- && !bResult )
+ {
+ Reference< XStyle > xStyle( *p++, UNO_QUERY );
+ if( xStyle.is() )
+ bResult = xStyle->isInUse();
+ }
+ }
+ }
+ return bResult;
+}
+
+/*************************************************************************
+|*
+|* das StyleSheet ermitteln, fuer das dieses StyleSheet steht
+|*
+\************************************************************************/
+
+SdStyleSheet* SdStyleSheet::GetRealStyleSheet() const
+{
+ String aRealStyle;
+ String aSep( RTL_CONSTASCII_USTRINGPARAM( SD_LT_SEPARATOR ));
+ SdStyleSheet* pRealStyle = NULL;
+ SdDrawDocument* pDoc = ((SdStyleSheetPool&) rPool).GetDoc();
+
+ ::sd::DrawViewShell* pDrawViewShell = 0;
+
+ ::sd::ViewShellBase* pBase = dynamic_cast< ::sd::ViewShellBase* >( SfxViewShell::Current() );
+ if( pBase )
+ pDrawViewShell = dynamic_cast< ::sd::DrawViewShell* >( pBase->GetMainViewShell().get() );
+
+ if (pDrawViewShell && pDrawViewShell->GetDoc() == pDoc)
+ {
+ SdPage* pPage = pDrawViewShell->getCurrentPage();
+ if( pPage )
+ {
+ aRealStyle = pPage->GetLayoutName();
+ // cut after seperator string
+ aRealStyle.Erase(aRealStyle.Search(aSep) + aSep.Len());
+ }
+ }
+
+ if (aRealStyle.Len() == 0)
+ {
+ SdPage* pPage = pDoc->GetSdPage(0, PK_STANDARD);
+
+ if (pPage)
+ {
+ aRealStyle = pDoc->GetSdPage(0, PK_STANDARD)->GetLayoutName();
+ }
+ else
+ {
+ // Noch keine Seite vorhanden
+ // Dieses kann beim Aktualisieren vonDokumentvorlagen vorkommen
+ SfxStyleSheetIterator aIter(&rPool, SD_STYLE_FAMILY_MASTERPAGE);
+ SfxStyleSheetBase* pSheet = aIter.First();
+ if( pSheet )
+ aRealStyle = pSheet->GetName();
+ }
+
+ aRealStyle.Erase(aRealStyle.Search(aSep) + aSep.Len());
+ }
+
+ // jetzt vom Namen (landessprachlich angepasst) auf den internen
+ // Namen (unabhaengig von der Landessprache) mappen
+ String aInternalName;
+
+ if (aName == String(SdResId(STR_PSEUDOSHEET_TITLE)))
+ {
+ aInternalName = String(SdResId(STR_LAYOUT_TITLE));
+ }
+ else if (aName == String(SdResId(STR_PSEUDOSHEET_SUBTITLE)))
+ {
+ aInternalName = String(SdResId(STR_LAYOUT_SUBTITLE));
+ }
+ else if (aName == String(SdResId(STR_PSEUDOSHEET_BACKGROUND)))
+ {
+ aInternalName = String(SdResId(STR_LAYOUT_BACKGROUND));
+ }
+ else if (aName == String(SdResId(STR_PSEUDOSHEET_BACKGROUNDOBJECTS)))
+ {
+ aInternalName = String(SdResId(STR_LAYOUT_BACKGROUNDOBJECTS));
+ }
+ else if (aName == String(SdResId(STR_PSEUDOSHEET_NOTES)))
+ {
+ aInternalName = String(SdResId(STR_LAYOUT_NOTES));
+ }
+ else
+ {
+ String aOutlineStr(SdResId(STR_PSEUDOSHEET_OUTLINE));
+ USHORT nPos = aName.Search(aOutlineStr);
+ if (nPos != STRING_NOTFOUND)
+ {
+ String aNumStr(aName.Copy(aOutlineStr.Len()));
+ aInternalName = String(SdResId(STR_LAYOUT_OUTLINE));
+ aInternalName += aNumStr;
+ }
+ }
+
+ aRealStyle += aInternalName;
+ pRealStyle = static_cast< SdStyleSheet* >( rPool.Find(aRealStyle, SD_STYLE_FAMILY_MASTERPAGE) );
+
+#ifdef DBG_UTIL
+ if( !pRealStyle )
+ {
+ SfxStyleSheetIterator aIter(&rPool, SD_STYLE_FAMILY_MASTERPAGE);
+ if( aIter.Count() > 0 )
+ // StyleSheet not found, but pool already loaded
+ DBG_ASSERT(pRealStyle, "Internal StyleSheet not found");
+ }
+#endif
+
+ return pRealStyle;
+}
+
+/*************************************************************************
+|*
+|* das PseudoStyleSheet ermitteln, durch das dieses StyleSheet vertreten wird
+|*
+\************************************************************************/
+
+SdStyleSheet* SdStyleSheet::GetPseudoStyleSheet() const
+{
+ SdStyleSheet* pPseudoStyle = NULL;
+ String aSep( RTL_CONSTASCII_USTRINGPARAM( SD_LT_SEPARATOR ));
+ String aStyleName(aName);
+ // ohne Layoutnamen und Separator
+ aStyleName.Erase(0, aStyleName.Search(aSep) + aSep.Len());
+
+ if (aStyleName == String(SdResId(STR_LAYOUT_TITLE)))
+ {
+ aStyleName = String(SdResId(STR_PSEUDOSHEET_TITLE));
+ }
+ else if (aStyleName == String(SdResId(STR_LAYOUT_SUBTITLE)))
+ {
+ aStyleName = String(SdResId(STR_PSEUDOSHEET_SUBTITLE));
+ }
+ else if (aStyleName == String(SdResId(STR_LAYOUT_BACKGROUND)))
+ {
+ aStyleName = String(SdResId(STR_PSEUDOSHEET_BACKGROUND));
+ }
+ else if (aStyleName == String(SdResId(STR_LAYOUT_BACKGROUNDOBJECTS)))
+ {
+ aStyleName = String(SdResId(STR_PSEUDOSHEET_BACKGROUNDOBJECTS));
+ }
+ else if (aStyleName == String(SdResId(STR_LAYOUT_NOTES)))
+ {
+ aStyleName = String(SdResId(STR_PSEUDOSHEET_NOTES));
+ }
+ else
+ {
+ String aOutlineStr((SdResId(STR_LAYOUT_OUTLINE)));
+ USHORT nPos = aStyleName.Search(aOutlineStr);
+ if (nPos != STRING_NOTFOUND)
+ {
+ String aNumStr(aStyleName.Copy(aOutlineStr.Len()));
+ aStyleName = String(SdResId(STR_PSEUDOSHEET_OUTLINE));
+ aStyleName += aNumStr;
+ }
+ }
+
+ pPseudoStyle = static_cast<SdStyleSheet*>(rPool.Find(aStyleName, SD_STYLE_FAMILY_PSEUDO));
+ DBG_ASSERT(pPseudoStyle, "PseudoStyleSheet nicht gefunden");
+
+ return pPseudoStyle;
+}
+
+
+/*************************************************************************
+|*
+|* Notify
+|*
+\************************************************************************/
+
+void SdStyleSheet::Notify(SfxBroadcaster& rBC, const SfxHint& rHint)
+{
+ // erstmal die Basisklassenfunktionalitaet
+ SfxStyleSheet::Notify(rBC, rHint);
+
+ // wenn der Stellvertreter ein Notify bezueglich geaenderter Attribute
+ // bekommt, sorgt er dafuer, dass das eigentlich gemeinte StyleSheet
+ // broadcastet
+ SfxSimpleHint* pSimple = PTR_CAST(SfxSimpleHint, &rHint);
+ ULONG nId = pSimple == NULL ? 0 : pSimple->GetId();
+ if (nId == SFX_HINT_DATACHANGED && nFamily == SD_STYLE_FAMILY_PSEUDO)
+ {
+ SdStyleSheet* pRealStyle = GetRealStyleSheet();
+ if (pRealStyle)
+ pRealStyle->Broadcast(rHint);
+ }
+}
+
+/*************************************************************************
+|* AdjustToFontHeight passt die Bulletbreite und den linken Texteinzug
+|* des uebergebenen ItemSets dessen Fonthoehe an. Die neuen Werte werden so
+|* berechnet, dass das Verhaeltnis zur Fonthoehe so ist wie im StyleSheet.
+|*
+|* bOnlyMissingItems legt fest, ob lediglich nicht gesetzte Items ergaenzt
+|* (TRUE) oder explizit gesetzte Items ueberschreiben werden sollen (FALSE)
+|*
+\************************************************************************/
+
+void SdStyleSheet::AdjustToFontHeight(SfxItemSet& rSet, BOOL bOnlyMissingItems)
+{
+ // Bulletbreite und Texteinzug an neue Fonthoehe
+ // anpassen, wenn sie nicht explizit gesetzt wurden
+ SfxStyleFamily eFamily = nFamily;
+ String aStyleName(aName);
+ if (eFamily == SD_STYLE_FAMILY_PSEUDO)
+ {
+ SfxStyleSheet* pRealStyle = GetRealStyleSheet();
+ eFamily = pRealStyle->GetFamily();
+ aStyleName = pRealStyle->GetName();
+ }
+
+ if (eFamily == SD_STYLE_FAMILY_MASTERPAGE &&
+ aStyleName.Search(String(SdResId(STR_LAYOUT_OUTLINE))) != STRING_NOTFOUND &&
+ rSet.GetItemState(EE_CHAR_FONTHEIGHT) == SFX_ITEM_SET)
+ {
+ const SfxItemSet* pCurSet = &GetItemSet();
+ UINT32 nNewHeight = ((SvxFontHeightItem&)rSet.Get(EE_CHAR_FONTHEIGHT)).GetHeight();
+ UINT32 nOldHeight = ((SvxFontHeightItem&)pCurSet->Get(EE_CHAR_FONTHEIGHT)).GetHeight();
+
+ if (rSet.GetItemState(EE_PARA_BULLET) != SFX_ITEM_SET || !bOnlyMissingItems)
+ {
+ const SvxBulletItem& rBItem = (const SvxBulletItem&)pCurSet->Get(EE_PARA_BULLET);
+ double fBulletFraction = double(rBItem.GetWidth()) / nOldHeight;
+ SvxBulletItem aNewBItem(rBItem);
+ aNewBItem.SetWidth((UINT32)(fBulletFraction * nNewHeight));
+ rSet.Put(aNewBItem);
+ }
+
+ if (rSet.GetItemState(EE_PARA_LRSPACE) != SFX_ITEM_SET || !bOnlyMissingItems)
+ {
+ const SvxLRSpaceItem& rLRItem = (const SvxLRSpaceItem&)pCurSet->Get(EE_PARA_LRSPACE);
+ double fIndentFraction = double(rLRItem.GetTxtLeft()) / nOldHeight;
+ SvxLRSpaceItem aNewLRItem(rLRItem);
+ aNewLRItem.SetTxtLeft((USHORT)(fIndentFraction * nNewHeight));
+ double fFirstIndentFraction = double(rLRItem.GetTxtFirstLineOfst()) / nOldHeight;
+ aNewLRItem.SetTxtFirstLineOfst((short)(fFirstIndentFraction * nNewHeight));
+ rSet.Put(aNewLRItem);
+ }
+
+ if (rSet.GetItemState(EE_PARA_ULSPACE) != SFX_ITEM_SET || !bOnlyMissingItems)
+ {
+ const SvxULSpaceItem& rULItem = (const SvxULSpaceItem&)pCurSet->Get(EE_PARA_ULSPACE);
+ SvxULSpaceItem aNewULItem(rULItem);
+ double fLowerFraction = double(rULItem.GetLower()) / nOldHeight;
+ aNewULItem.SetLower((USHORT)(fLowerFraction * nNewHeight));
+ double fUpperFraction = double(rULItem.GetUpper()) / nOldHeight;
+ aNewULItem.SetUpper((USHORT)(fUpperFraction * nNewHeight));
+ rSet.Put(aNewULItem);
+ }
+ }
+}
+
+// --------------------------------------------------------------------
+
+BOOL SdStyleSheet::HasFollowSupport() const
+{
+ return FALSE;
+}
+
+// --------------------------------------------------------------------
+
+BOOL SdStyleSheet::HasParentSupport() const
+{
+ return TRUE;
+}
+
+// --------------------------------------------------------------------
+
+BOOL SdStyleSheet::HasClearParentSupport() const
+{
+ return TRUE;
+}
+
+// --------------------------------------------------------------------
+
+BOOL SdStyleSheet::SetName( const UniString& rName )
+{
+ return SfxStyleSheet::SetName( rName );
+}
+
+// --------------------------------------------------------------------
+
+void SdStyleSheet::SetHelpId( const String& r, ULONG nId )
+{
+ SfxStyleSheet::SetHelpId( r, nId );
+
+ if( (nId >= HID_PSEUDOSHEET_OUTLINE1) && ( nId <= HID_PSEUDOSHEET_OUTLINE9 ) )
+ {
+ msApiName = OUString( RTL_CONSTASCII_USTRINGPARAM("outline") );
+ msApiName += OUString( (sal_Unicode)( '1' + (nId - HID_PSEUDOSHEET_OUTLINE1) ) );
+ }
+ else
+ {
+ static struct ApiNameMap
+ {
+ const sal_Char* mpApiName;
+ sal_uInt32 mnApiNameLength;
+ sal_uInt32 mnHelpId;
+ }
+ pApiNameMap[] =
+ {
+ { RTL_CONSTASCII_STRINGPARAM( "title" ), HID_PSEUDOSHEET_TITLE },
+ { RTL_CONSTASCII_STRINGPARAM( "subtitle" ), HID_PSEUDOSHEET_SUBTITLE },
+ { RTL_CONSTASCII_STRINGPARAM( "background" ), HID_PSEUDOSHEET_BACKGROUND },
+ { RTL_CONSTASCII_STRINGPARAM( "backgroundobjects" ),HID_PSEUDOSHEET_BACKGROUNDOBJECTS },
+ { RTL_CONSTASCII_STRINGPARAM( "notes" ), HID_PSEUDOSHEET_NOTES },
+ { RTL_CONSTASCII_STRINGPARAM( "standard" ), HID_STANDARD_STYLESHEET_NAME },
+ { RTL_CONSTASCII_STRINGPARAM( "objectwitharrow" ), HID_POOLSHEET_OBJWITHARROW },
+ { RTL_CONSTASCII_STRINGPARAM( "objectwithshadow" ), HID_POOLSHEET_OBJWITHSHADOW },
+ { RTL_CONSTASCII_STRINGPARAM( "objectwithoutfill" ),HID_POOLSHEET_OBJWITHOUTFILL },
+ { RTL_CONSTASCII_STRINGPARAM( "text" ), HID_POOLSHEET_TEXT },
+ { RTL_CONSTASCII_STRINGPARAM( "textbody" ), HID_POOLSHEET_TEXTBODY },
+ { RTL_CONSTASCII_STRINGPARAM( "textbodyjustfied" ), HID_POOLSHEET_TEXTBODY_JUSTIFY },
+ { RTL_CONSTASCII_STRINGPARAM( "textbodyindent" ), HID_POOLSHEET_TEXTBODY_INDENT },
+ { RTL_CONSTASCII_STRINGPARAM( "title" ), HID_POOLSHEET_TITLE },
+ { RTL_CONSTASCII_STRINGPARAM( "title1" ), HID_POOLSHEET_TITLE1 },
+ { RTL_CONSTASCII_STRINGPARAM( "title2" ), HID_POOLSHEET_TITLE2 },
+ { RTL_CONSTASCII_STRINGPARAM( "headline" ), HID_POOLSHEET_HEADLINE },
+ { RTL_CONSTASCII_STRINGPARAM( "headline1" ), HID_POOLSHEET_HEADLINE1 },
+ { RTL_CONSTASCII_STRINGPARAM( "headline2" ), HID_POOLSHEET_HEADLINE2 },
+ { RTL_CONSTASCII_STRINGPARAM( "measure" ), HID_POOLSHEET_MEASURE },
+ { 0, 0, 0 }
+ };
+
+ ApiNameMap* p = pApiNameMap;
+ while( p->mpApiName )
+ {
+ if( nId == p->mnHelpId )
+ {
+ msApiName = OUString( p->mpApiName, p->mnApiNameLength, RTL_TEXTENCODING_ASCII_US );
+ break;
+ }
+ p++;
+ }
+ }
+}
+
+// --------------------------------------------------------------------
+
+OUString SdStyleSheet::GetFamilyString( SfxStyleFamily eFamily )
+{
+ switch( eFamily )
+ {
+ case SD_STYLE_FAMILY_CELL:
+ return OUString( RTL_CONSTASCII_USTRINGPARAM( "cell" ) );
+ default:
+ DBG_ERROR( "SdStyleSheet::GetFamilyString(), illegal family!" );
+ case SD_STYLE_FAMILY_GRAPHICS:
+ return OUString( RTL_CONSTASCII_USTRINGPARAM( "graphics" ) );
+ }
+}
+
+// --------------------------------------------------------------------
+
+void SdStyleSheet::throwIfDisposed() throw (RuntimeException)
+{
+ if( !mxPool.is() )
+ throw DisposedException();
+}
+
+// --------------------------------------------------------------------
+
+SdStyleSheet* SdStyleSheet::CreateEmptyUserStyle( SfxStyleSheetBasePool& rPool, SfxStyleFamily eFamily )
+{
+ OUString aPrefix( RTL_CONSTASCII_USTRINGPARAM("user") );
+ OUString aName;
+ sal_Int32 nIndex = 1;
+ do
+ {
+ aName = aPrefix + OUString::valueOf( nIndex++ );
+ }
+ while( rPool.Find( aName, eFamily ) != 0 );
+
+ return new SdStyleSheet(aName, rPool, eFamily, SFXSTYLEBIT_USERDEF);
+}
+
+// --------------------------------------------------------------------
+// XInterface
+// --------------------------------------------------------------------
+
+/*
+Any SAL_CALL SdStyleSheet::queryInterface( const ::com::sun::star::uno::Type& aType ) throw (RuntimeException)
+{
+ return SdStyleSheetBase::queryInterface( aType );
+}
+
+// --------------------------------------------------------------------
+
+void SAL_CALL SdStyleSheet::acquire( ) throw ()
+{
+ SdStyleSheetBase::acquire();
+}
+
+// --------------------------------------------------------------------
+*/
+void SAL_CALL SdStyleSheet::release( ) throw ()
+{
+ if (osl_decrementInterlockedCount( &m_refCount ) == 0)
+ {
+ // restore reference count:
+ osl_incrementInterlockedCount( &m_refCount );
+ if (! mrBHelper.bDisposed) try
+ {
+ dispose();
+ }
+ catch (RuntimeException const& exc)
+ { // don't break throw ()
+ OSL_ENSURE(
+ false, OUStringToOString(
+ exc.Message, RTL_TEXTENCODING_ASCII_US ).getStr() );
+ static_cast<void>(exc);
+ }
+ OSL_ASSERT( mrBHelper.bDisposed );
+ SdStyleSheetBase::release();
+ }
+}
+
+// --------------------------------------------------------------------
+// XWeak
+// --------------------------------------------------------------------
+/*
+Reference< XAdapter > SAL_CALL SdStyleSheet::queryAdapter( ) throw (RuntimeException)
+{
+ return SdStyleSheetBase::queryAdapter();
+}
+
+// --------------------------------------------------------------------
+// XTypeProvider
+// --------------------------------------------------------------------
+
+Sequence< Type > SAL_CALL SdStyleSheet::getTypes( ) throw (RuntimeException)
+{
+ return SdStyleSheetBase::getTypes();
+}
+
+// --------------------------------------------------------------------
+
+Sequence< ::sal_Int8 > SAL_CALL SdStyleSheet::getImplementationId( ) throw (RuntimeException)
+{
+ return SdStyleSheetBase::getImplementationId();
+}
+*/
+// --------------------------------------------------------------------
+// XComponent
+// --------------------------------------------------------------------
+
+void SAL_CALL SdStyleSheet::dispose( ) throw (RuntimeException)
+{
+ ClearableMutexGuard aGuard( mrBHelper.rMutex );
+ if (!mrBHelper.bDisposed && !mrBHelper.bInDispose)
+ {
+ mrBHelper.bInDispose = sal_True;
+ aGuard.clear();
+ try
+ {
+ // side effect: keeping a reference to this
+ EventObject aEvt( static_cast< OWeakObject * >( this ) );
+ try
+ {
+ mrBHelper.aLC.disposeAndClear( aEvt );
+ disposing();
+ }
+ catch (...)
+ {
+ MutexGuard aGuard2( mrBHelper.rMutex );
+ // bDisposed and bInDispose must be set in this order:
+ mrBHelper.bDisposed = sal_True;
+ mrBHelper.bInDispose = sal_False;
+ throw;
+ }
+ MutexGuard aGuard2( mrBHelper.rMutex );
+ // bDisposed and bInDispose must be set in this order:
+ mrBHelper.bDisposed = sal_True;
+ mrBHelper.bInDispose = sal_False;
+ }
+ catch (RuntimeException &)
+ {
+ throw;
+ }
+ catch (Exception & exc)
+ {
+ throw RuntimeException(
+ OUString( RTL_CONSTASCII_USTRINGPARAM(
+ "unexpected UNO exception caught: ") ) +
+ exc.Message, Reference< XInterface >() );
+ }
+ }
+}
+
+// --------------------------------------------------------------------
+
+void SdStyleSheet::disposing()
+{
+ mxPool.clear();
+}
+
+// --------------------------------------------------------------------
+
+void SAL_CALL SdStyleSheet::addEventListener( const Reference< XEventListener >& xListener ) throw (RuntimeException)
+{
+ ClearableMutexGuard aGuard( mrBHelper.rMutex );
+ if (mrBHelper.bDisposed || mrBHelper.bInDispose)
+ {
+ aGuard.clear();
+ EventObject aEvt( static_cast< OWeakObject * >( this ) );
+ xListener->disposing( aEvt );
+ }
+ else
+ {
+ mrBHelper.addListener( ::getCppuType( &xListener ), xListener );
+ }
+}
+
+// --------------------------------------------------------------------
+
+void SAL_CALL SdStyleSheet::removeEventListener( const Reference< XEventListener >& xListener ) throw (RuntimeException)
+{
+ mrBHelper.removeListener( ::getCppuType( &xListener ), xListener );
+}
+
+//------------------------------------------------------------------------
+// XModifyBroadcaster
+//------------------------------------------------------------------------
+
+void SAL_CALL SdStyleSheet::addModifyListener( const Reference< XModifyListener >& xListener ) throw (RuntimeException)
+{
+ ClearableMutexGuard aGuard( mrBHelper.rMutex );
+ if (mrBHelper.bDisposed || mrBHelper.bInDispose)
+ {
+ aGuard.clear();
+ EventObject aEvt( static_cast< OWeakObject * >( this ) );
+ xListener->disposing( aEvt );
+ }
+ else
+ {
+ if( !mpModifyListenerForewarder.get() )
+ mpModifyListenerForewarder.reset( new ModifyListenerForewarder( this ) );
+ mrBHelper.addListener( XModifyListener::static_type(), xListener );
+ }
+}
+
+//------------------------------------------------------------------------
+
+void SAL_CALL SdStyleSheet::removeModifyListener( const Reference< XModifyListener >& xListener ) throw (RuntimeException)
+{
+ mrBHelper.removeListener( XModifyListener::static_type(), xListener );
+}
+
+//------------------------------------------------------------------------
+
+void SdStyleSheet::notifyModifyListener()
+{
+ MutexGuard aGuard( mrBHelper.rMutex );
+
+ OInterfaceContainerHelper * pContainer = mrBHelper.getContainer( XModifyListener::static_type() );
+ if( pContainer )
+ {
+ EventObject aEvt( static_cast< OWeakObject * >( this ) );
+ pContainer->forEach<XModifyListener>( boost::bind( &XModifyListener::modified, _1, boost::cref( aEvt ) ) );
+ }
+}
+
+
+// --------------------------------------------------------------------
+// XServiceInfo
+// --------------------------------------------------------------------
+
+OUString SAL_CALL SdStyleSheet::getImplementationName() throw(RuntimeException)
+{
+ return OUString::createFromAscii( "SdStyleSheet" );
+}
+
+// --------------------------------------------------------------------
+
+sal_Bool SAL_CALL SdStyleSheet::supportsService( const OUString& ServiceName ) throw(RuntimeException)
+{
+ return comphelper::ServiceInfoHelper::supportsService( ServiceName, getSupportedServiceNames() );
+}
+
+// --------------------------------------------------------------------
+
+Sequence< OUString > SAL_CALL SdStyleSheet::getSupportedServiceNames() throw(RuntimeException)
+{
+ Sequence< OUString > aNameSequence( 10 );
+ OUString* pStrings = aNameSequence.getArray();
+
+ *pStrings++ = OUString( RTL_CONSTASCII_USTRINGPARAM( "com.sun.star.style.Style" ) );
+ *pStrings++ = OUString( RTL_CONSTASCII_USTRINGPARAM( "com.sun.star.drawing.FillProperties" ) );
+ *pStrings++ = OUString( RTL_CONSTASCII_USTRINGPARAM( "com.sun.star.drawing.LineProperties" ) );
+ *pStrings++ = OUString( RTL_CONSTASCII_USTRINGPARAM( "com.sun.star.drawing.ShadowProperties" ) );
+ *pStrings++ = OUString( RTL_CONSTASCII_USTRINGPARAM( "com.sun.star.drawing.ConnectorProperties" ) );
+ *pStrings++ = OUString( RTL_CONSTASCII_USTRINGPARAM( "com.sun.star.drawing.MeasureProperties" ) );
+ *pStrings++ = OUString( RTL_CONSTASCII_USTRINGPARAM( "com.sun.star.style.ParagraphProperties" ) );
+ *pStrings++ = OUString( RTL_CONSTASCII_USTRINGPARAM( "com.sun.star.style.CharacterProperties" ) );
+ *pStrings++ = OUString( RTL_CONSTASCII_USTRINGPARAM( "com.sun.star.drawing.TextProperties" ) );
+ *pStrings++ = OUString( RTL_CONSTASCII_USTRINGPARAM( "com.sun.star.drawing.Text" ) );
+
+ return aNameSequence;
+}
+
+// --------------------------------------------------------------------
+// XNamed
+// --------------------------------------------------------------------
+
+OUString SAL_CALL SdStyleSheet::getName() throw(RuntimeException)
+{
+ OGuard aGuard( Application::GetSolarMutex() );
+ throwIfDisposed();
+ return GetApiName();
+}
+
+// --------------------------------------------------------------------
+
+void SAL_CALL SdStyleSheet::setName( const OUString& rName ) throw(RuntimeException)
+{
+ OGuard aGuard( Application::GetSolarMutex() );
+ throwIfDisposed();
+ if( IsUserDefined() )
+ {
+ if( SetName( rName ) )
+ {
+ msApiName = rName;
+ Broadcast(SfxSimpleHint(SFX_HINT_DATACHANGED));
+ }
+ }
+}
+
+// --------------------------------------------------------------------
+// XStyle
+// --------------------------------------------------------------------
+
+sal_Bool SAL_CALL SdStyleSheet::isUserDefined() throw(RuntimeException)
+{
+ OGuard aGuard( Application::GetSolarMutex() );
+ throwIfDisposed();
+ return IsUserDefined() ? sal_True : sal_False;
+}
+
+// --------------------------------------------------------------------
+
+sal_Bool SAL_CALL SdStyleSheet::isInUse() throw(RuntimeException)
+{
+ OGuard aGuard( Application::GetSolarMutex() );
+ throwIfDisposed();
+ return IsUsed() ? sal_True : sal_False;
+}
+
+// --------------------------------------------------------------------
+
+OUString SAL_CALL SdStyleSheet::getParentStyle() throw(RuntimeException)
+{
+ OGuard aGuard( Application::GetSolarMutex() );
+ throwIfDisposed();
+
+ if( GetParent().Len() )
+ {
+ SdStyleSheet* pParentStyle = static_cast< SdStyleSheet* >( mxPool->Find( GetParent(), nFamily ) );
+ if( pParentStyle )
+ return pParentStyle->msApiName;
+ }
+ return OUString();
+}
+
+// --------------------------------------------------------------------
+
+void SAL_CALL SdStyleSheet::setParentStyle( const OUString& rParentName ) throw(NoSuchElementException, RuntimeException)
+{
+ OGuard aGuard( Application::GetSolarMutex() );
+ throwIfDisposed();
+
+ if( IsUserDefined() )
+ {
+ if( rParentName.getLength() )
+ {
+ const SfxStyles& rStyles = mxPool->GetStyles();
+
+ for( SfxStyles::const_iterator iter( rStyles.begin() ); iter != rStyles.end(); iter++ )
+ {
+ SdStyleSheet* pStyle = static_cast< SdStyleSheet* >( (*iter).get() );
+ if( pStyle && (pStyle->nFamily == nFamily) && (pStyle->msApiName == rParentName) )
+ {
+ if( pStyle != this )
+ SetParent( pStyle->GetName() );
+ return;
+ }
+ }
+ throw NoSuchElementException();
+ }
+ else
+ {
+ SetParent( rParentName );
+ }
+ }
+}
+
+// --------------------------------------------------------------------
+// XPropertySet
+// --------------------------------------------------------------------
+
+Reference< XPropertySetInfo > SdStyleSheet::getPropertySetInfo() throw(RuntimeException)
+{
+ throwIfDisposed();
+ static Reference< XPropertySetInfo > xInfo;
+ if( !xInfo.is() )
+ xInfo = GetStylePropertySet().getPropertySetInfo();
+ return xInfo;
+}
+
+// --------------------------------------------------------------------
+
+void SAL_CALL SdStyleSheet::setPropertyValue( const OUString& aPropertyName, const Any& aValue ) throw(UnknownPropertyException, PropertyVetoException, IllegalArgumentException, WrappedTargetException, RuntimeException)
+{
+ OGuard aGuard( Application::GetSolarMutex() );
+ throwIfDisposed();
+
+ const SfxItemPropertySimpleEntry* pEntry = getPropertyMapEntry( aPropertyName );
+ if( pEntry == NULL )
+ {
+ throw UnknownPropertyException();
+ }
+ else
+ {
+ if( pEntry->nWID == SDRATTR_TEXTDIRECTION )
+ return; // not yet implemented for styles
+
+ if( pEntry->nWID == WID_STYLE_FAMILY )
+ throw PropertyVetoException();
+
+ if( (pEntry->nWID == EE_PARA_NUMBULLET) && (GetFamily() == SD_STYLE_FAMILY_MASTERPAGE) )
+ {
+ String aStr;
+ const sal_uInt32 nTempHelpId = GetHelpId( aStr );
+
+ if( (nTempHelpId >= HID_PSEUDOSHEET_OUTLINE2) && (nTempHelpId <= HID_PSEUDOSHEET_OUTLINE9) )
+ return;
+ }
+
+ SfxItemSet &rStyleSet = GetItemSet();
+
+ if( pEntry->nWID == OWN_ATTR_FILLBMP_MODE )
+ {
+ BitmapMode eMode;
+ if( aValue >>= eMode )
+ {
+ rStyleSet.Put( XFillBmpStretchItem( eMode == BitmapMode_STRETCH ) );
+ rStyleSet.Put( XFillBmpTileItem( eMode == BitmapMode_REPEAT ) );
+ return;
+ }
+ throw IllegalArgumentException();
+ }
+
+ SfxItemSet aSet( GetPool().GetPool(), pEntry->nWID, pEntry->nWID);
+ aSet.Put( rStyleSet );
+
+ if( !aSet.Count() )
+ {
+ if( EE_PARA_NUMBULLET == pEntry->nWID )
+ {
+ Font aBulletFont;
+ SdStyleSheetPool::PutNumBulletItem( this, aBulletFont );
+ aSet.Put( rStyleSet );
+ }
+ else
+ {
+ aSet.Put( GetPool().GetPool().GetDefaultItem( pEntry->nWID ) );
+ }
+ }
+
+ if( pEntry->nMemberId == MID_NAME &&
+ ( pEntry->nWID == XATTR_FILLBITMAP || pEntry->nWID == XATTR_FILLGRADIENT ||
+ pEntry->nWID == XATTR_FILLHATCH || pEntry->nWID == XATTR_FILLFLOATTRANSPARENCE ||
+ pEntry->nWID == XATTR_LINESTART || pEntry->nWID == XATTR_LINEEND || pEntry->nWID == XATTR_LINEDASH) )
+ {
+ OUString aTempName;
+ if(!(aValue >>= aTempName ))
+ throw IllegalArgumentException();
+
+ SvxShape::SetFillAttribute( pEntry->nWID, aTempName, aSet );
+ }
+ else if(!SvxUnoTextRangeBase::SetPropertyValueHelper( aSet, pEntry, aValue, aSet ))
+ {
+ SvxItemPropertySet_setPropertyValue( GetStylePropertySet(), pEntry, aValue, aSet );
+ }
+
+ rStyleSet.Put( aSet );
+ Broadcast(SfxSimpleHint(SFX_HINT_DATACHANGED));
+ }
+}
+
+// --------------------------------------------------------------------
+
+Any SAL_CALL SdStyleSheet::getPropertyValue( const OUString& PropertyName ) throw(UnknownPropertyException, WrappedTargetException, RuntimeException)
+{
+ OGuard aGuard( Application::GetSolarMutex() );
+
+ throwIfDisposed();
+
+ const SfxItemPropertySimpleEntry* pEntry = getPropertyMapEntry( PropertyName );
+ if( pEntry == NULL )
+ {
+ throw UnknownPropertyException();
+ }
+ else
+ {
+ Any aAny;
+
+ if( pEntry->nWID == WID_STYLE_FAMILY )
+ {
+ if( nFamily == SD_STYLE_FAMILY_MASTERPAGE )
+ {
+ const OUString aLayoutName( GetName() );
+ aAny <<= aLayoutName.copy( 0, aLayoutName.indexOf(OUString( RTL_CONSTASCII_USTRINGPARAM(SD_LT_SEPARATOR) ) ) );
+ }
+ else
+ {
+ aAny <<= GetFamilyString(nFamily);
+ }
+ }
+ else if( pEntry->nWID == WID_STYLE_DISPNAME )
+ {
+ aAny <<= maDisplayName;
+ }
+ else if( pEntry->nWID == SDRATTR_TEXTDIRECTION )
+ {
+ aAny <<= sal_False;
+ }
+ else if( pEntry->nWID == OWN_ATTR_FILLBMP_MODE )
+ {
+ SfxItemSet &rStyleSet = GetItemSet();
+
+ XFillBmpStretchItem* pStretchItem = (XFillBmpStretchItem*)rStyleSet.GetItem(XATTR_FILLBMP_STRETCH);
+ XFillBmpTileItem* pTileItem = (XFillBmpTileItem*)rStyleSet.GetItem(XATTR_FILLBMP_TILE);
+
+ if( pStretchItem && pTileItem )
+ {
+ if( pTileItem->GetValue() )
+ aAny <<= BitmapMode_REPEAT;
+ else if( pStretchItem->GetValue() )
+ aAny <<= BitmapMode_STRETCH;
+ else
+ aAny <<= BitmapMode_NO_REPEAT;
+ }
+ }
+ else
+ {
+ SfxItemSet aSet( GetPool().GetPool(), pEntry->nWID, pEntry->nWID);
+
+ const SfxPoolItem* pItem;
+ SfxItemSet& rStyleSet = GetItemSet();
+
+ if( rStyleSet.GetItemState( pEntry->nWID, sal_True, &pItem ) == SFX_ITEM_SET )
+ aSet.Put( *pItem );
+
+ if( !aSet.Count() )
+ aSet.Put( GetPool().GetPool().GetDefaultItem( pEntry->nWID ) );
+
+ if(SvxUnoTextRangeBase::GetPropertyValueHelper( aSet, pEntry, aAny ))
+ return aAny;
+
+ // Hole Wert aus ItemSet
+ aAny = SvxItemPropertySet_getPropertyValue( GetStylePropertySet(),pEntry, aSet );
+ }
+
+ if( *pEntry->pType != aAny.getValueType() )
+ {
+ // since the sfx uint16 item now exports a sal_Int32, we may have to fix this here
+ if( ( *pEntry->pType == ::getCppuType((const sal_Int16*)0)) && aAny.getValueType() == ::getCppuType((const sal_Int32*)0) )
+ {
+ sal_Int32 nValue = 0;
+ aAny >>= nValue;
+ aAny <<= (sal_Int16)nValue;
+ }
+ else
+ {
+ DBG_ERROR("SvxShape::GetAnyForItem() Returnvalue has wrong Type!" );
+ }
+ }
+
+ return aAny;
+ }
+}
+
+// --------------------------------------------------------------------
+
+void SAL_CALL SdStyleSheet::addPropertyChangeListener( const OUString& , const Reference< XPropertyChangeListener >& ) throw(UnknownPropertyException, WrappedTargetException, RuntimeException) {}
+void SAL_CALL SdStyleSheet::removePropertyChangeListener( const OUString& , const Reference< XPropertyChangeListener >& ) throw(UnknownPropertyException, WrappedTargetException, RuntimeException) {}
+void SAL_CALL SdStyleSheet::addVetoableChangeListener( const OUString& , const Reference< XVetoableChangeListener >& ) throw(UnknownPropertyException, WrappedTargetException, RuntimeException) {}
+void SAL_CALL SdStyleSheet::removeVetoableChangeListener( const OUString& , const Reference< XVetoableChangeListener >& ) throw(UnknownPropertyException, WrappedTargetException, RuntimeException) {}
+
+// --------------------------------------------------------------------
+// XPropertyState
+// --------------------------------------------------------------------
+
+PropertyState SAL_CALL SdStyleSheet::getPropertyState( const OUString& PropertyName ) throw(UnknownPropertyException, RuntimeException)
+{
+ OGuard aGuard( Application::GetSolarMutex() );
+
+ throwIfDisposed();
+
+ const SfxItemPropertySimpleEntry* pEntry = getPropertyMapEntry( PropertyName );
+
+ if( pEntry == NULL )
+ throw UnknownPropertyException();
+
+ if( pEntry->nWID == WID_STYLE_FAMILY )
+ {
+ return PropertyState_DIRECT_VALUE;
+ }
+ else if( pEntry->nWID == SDRATTR_TEXTDIRECTION )
+ {
+ return PropertyState_DEFAULT_VALUE;
+ }
+ else if( pEntry->nWID == OWN_ATTR_FILLBMP_MODE )
+ {
+ const SfxItemSet& rSet = GetItemSet();
+
+ if( rSet.GetItemState( XATTR_FILLBMP_STRETCH, false ) == SFX_ITEM_SET ||
+ rSet.GetItemState( XATTR_FILLBMP_TILE, false ) == SFX_ITEM_SET )
+ {
+ return PropertyState_DIRECT_VALUE;
+ }
+ else
+ {
+ return PropertyState_AMBIGUOUS_VALUE;
+ }
+ }
+ else
+ {
+ SfxItemSet &rStyleSet = GetItemSet();
+
+ PropertyState eState;
+
+ switch( rStyleSet.GetItemState( pEntry->nWID, sal_False ) )
+ {
+ case SFX_ITEM_READONLY:
+ case SFX_ITEM_SET:
+ eState = PropertyState_DIRECT_VALUE;
+ break;
+ case SFX_ITEM_DEFAULT:
+ eState = PropertyState_DEFAULT_VALUE;
+ break;
+// case SFX_ITEM_DONTCARE:
+// case SFX_ITEM_DISABLED:
+ default:
+ eState = PropertyState_AMBIGUOUS_VALUE;
+ break;
+ }
+
+ // if a item is set, this doesn't mean we want it :)
+ if( ( PropertyState_DIRECT_VALUE == eState ) )
+ {
+ switch( pEntry->nWID )
+ {
+ case XATTR_FILLBITMAP:
+ case XATTR_FILLGRADIENT:
+ case XATTR_FILLHATCH:
+ case XATTR_FILLFLOATTRANSPARENCE:
+ case XATTR_LINEEND:
+ case XATTR_LINESTART:
+ case XATTR_LINEDASH:
+ {
+ NameOrIndex* pItem = (NameOrIndex*)rStyleSet.GetItem((USHORT)pEntry->nWID);
+ if( ( pItem == NULL ) || ( pItem->GetName().Len() == 0) )
+ eState = PropertyState_DEFAULT_VALUE;
+ }
+ }
+ }
+
+ return eState;
+ }
+}
+
+// --------------------------------------------------------------------
+
+Sequence< PropertyState > SAL_CALL SdStyleSheet::getPropertyStates( const Sequence< OUString >& aPropertyName ) throw(UnknownPropertyException, RuntimeException)
+{
+ OGuard aGuard( Application::GetSolarMutex() );
+
+ throwIfDisposed();
+
+ sal_Int32 nCount = aPropertyName.getLength();
+ const OUString* pNames = aPropertyName.getConstArray();
+
+ Sequence< PropertyState > aPropertyStateSequence( nCount );
+ PropertyState* pState = aPropertyStateSequence.getArray();
+
+ while( nCount-- )
+ *pState++ = getPropertyState( *pNames++ );
+
+ return aPropertyStateSequence;
+}
+
+// --------------------------------------------------------------------
+
+void SAL_CALL SdStyleSheet::setPropertyToDefault( const OUString& PropertyName ) throw(UnknownPropertyException, RuntimeException)
+{
+ OGuard aGuard( Application::GetSolarMutex() );
+
+ throwIfDisposed();
+
+ const SfxItemPropertySimpleEntry* pEntry = getPropertyMapEntry( PropertyName );
+ if( pEntry == NULL )
+ throw UnknownPropertyException();
+
+ SfxItemSet &rStyleSet = GetItemSet();
+
+ if( pEntry->nWID == OWN_ATTR_FILLBMP_MODE )
+ {
+ rStyleSet.ClearItem( XATTR_FILLBMP_STRETCH );
+ rStyleSet.ClearItem( XATTR_FILLBMP_TILE );
+ }
+ else
+ {
+ rStyleSet.ClearItem( pEntry->nWID );
+ }
+ Broadcast(SfxSimpleHint(SFX_HINT_DATACHANGED));
+}
+
+// --------------------------------------------------------------------
+
+Any SAL_CALL SdStyleSheet::getPropertyDefault( const OUString& aPropertyName ) throw(UnknownPropertyException, WrappedTargetException, RuntimeException)
+{
+ OGuard aGuard( Application::GetSolarMutex() );
+
+ throwIfDisposed();
+
+ const SfxItemPropertySimpleEntry* pEntry = getPropertyMapEntry( aPropertyName );
+ if( pEntry == NULL )
+ throw UnknownPropertyException();
+ Any aRet;
+ if( pEntry->nWID == WID_STYLE_FAMILY )
+ {
+ aRet <<= GetFamilyString(nFamily);
+ }
+ else if( pEntry->nWID == SDRATTR_TEXTDIRECTION )
+ {
+ aRet <<= sal_False;
+ }
+ else if( pEntry->nWID == OWN_ATTR_FILLBMP_MODE )
+ {
+ aRet <<= BitmapMode_REPEAT;
+ }
+ else
+ {
+ SfxItemPool& rMyPool = GetPool().GetPool();
+ SfxItemSet aSet( rMyPool, pEntry->nWID, pEntry->nWID);
+ aSet.Put( rMyPool.GetDefaultItem( pEntry->nWID ) );
+ aRet = SvxItemPropertySet_getPropertyValue( GetStylePropertySet(), pEntry, aSet );
+ }
+ return aRet;
+}
+
+// --------------------------------------------------------------------
+
+/** this is used because our property map is not sorted yet */
+const SfxItemPropertySimpleEntry* SdStyleSheet::getPropertyMapEntry( const OUString& rPropertyName ) const throw()
+{
+ return GetStylePropertySet().getPropertyMapEntry(rPropertyName);
+}
+