1 /************************************************************** 2 * 3 * Licensed to the Apache Software Foundation (ASF) under one 4 * or more contributor license agreements. See the NOTICE file 5 * distributed with this work for additional information 6 * regarding copyright ownership. The ASF licenses this file 7 * to you under the Apache License, Version 2.0 (the 8 * "License"); you may not use this file except in compliance 9 * with the License. You may obtain a copy of the License at 10 * 11 * http://www.apache.org/licenses/LICENSE-2.0 12 * 13 * Unless required by applicable law or agreed to in writing, 14 * software distributed under the License is distributed on an 15 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 16 * KIND, either express or implied. See the License for the 17 * specific language governing permissions and limitations 18 * under the License. 19 * 20 *************************************************************/ 21 22 23 24 // MARKER(update_precomp.py): autogen include statement, do not remove 25 #include "precompiled_sw.hxx" 26 27 #include <com/sun/star/beans/PropertyAttribute.hpp> 28 29 #include <vos/mutex.hxx> 30 #include <vcl/svapp.hxx> 31 32 #include <SwXTextDefaults.hxx> 33 #include <SwStyleNameMapper.hxx> 34 #include <fchrfmt.hxx> 35 #include <charfmt.hxx> 36 #include <docstyle.hxx> 37 #include <doc.hxx> 38 #include <docsh.hxx> 39 #include <unomap.hxx> 40 #include <unomid.h> 41 #include <paratr.hxx> 42 #include <unoprnms.hxx> 43 #include <unocrsrhelper.hxx> 44 #include <hintids.hxx> 45 46 #include <unomid.h> 47 48 49 using rtl::OUString; 50 using namespace rtl; 51 using namespace ::com::sun::star; 52 using namespace ::com::sun::star::uno; 53 using namespace ::com::sun::star::beans; 54 using namespace ::com::sun::star::lang; 55 56 57 SwXTextDefaults::SwXTextDefaults ( SwDoc * pNewDoc ) : 58 m_pPropSet( aSwMapProvider.GetPropertySet( PROPERTY_MAP_TEXT_DEFAULT ) ), 59 m_pDoc ( pNewDoc ) 60 { 61 } 62 63 64 SwXTextDefaults::~SwXTextDefaults () 65 { 66 } 67 68 69 uno::Reference< XPropertySetInfo > SAL_CALL SwXTextDefaults::getPropertySetInfo( ) 70 throw(RuntimeException) 71 { 72 static uno::Reference < XPropertySetInfo > xRef = m_pPropSet->getPropertySetInfo(); 73 return xRef; 74 } 75 76 77 void SAL_CALL SwXTextDefaults::setPropertyValue( const OUString& rPropertyName, const Any& aValue ) 78 throw(UnknownPropertyException, PropertyVetoException, IllegalArgumentException, WrappedTargetException, RuntimeException) 79 { 80 vos::OGuard aGuard( Application::GetSolarMutex()); 81 if (!m_pDoc) 82 throw RuntimeException(); 83 const SfxItemPropertySimpleEntry *pMap = m_pPropSet->getPropertyMap()->getByName( rPropertyName ); 84 if (!pMap) 85 throw UnknownPropertyException(OUString ( RTL_CONSTASCII_USTRINGPARAM ( "Unknown property: " ) ) + rPropertyName, static_cast < cppu::OWeakObject * > ( this ) ); 86 if ( pMap->nFlags & PropertyAttribute::READONLY) 87 throw PropertyVetoException ( OUString ( RTL_CONSTASCII_USTRINGPARAM ( "Property is read-only: " ) ) + rPropertyName, static_cast < cppu::OWeakObject * > ( this ) ); 88 89 const SfxPoolItem& rItem = m_pDoc->GetDefault(pMap->nWID); 90 if (RES_PAGEDESC == pMap->nWID && MID_PAGEDESC_PAGEDESCNAME == pMap->nMemberId) 91 { 92 SfxItemSet aSet( m_pDoc->GetAttrPool(), RES_PAGEDESC, RES_PAGEDESC ); 93 aSet.Put(rItem); 94 SwUnoCursorHelper::SetPageDesc( aValue, *m_pDoc, aSet ); 95 m_pDoc->SetDefault(aSet.Get(RES_PAGEDESC)); 96 } 97 else if ((RES_PARATR_DROP == pMap->nWID && MID_DROPCAP_CHAR_STYLE_NAME == pMap->nMemberId) || 98 (RES_TXTATR_CHARFMT == pMap->nWID)) 99 { 100 OUString uStyle; 101 if(aValue >>= uStyle) 102 { 103 String sStyle; 104 SwStyleNameMapper::FillUIName(uStyle, sStyle, nsSwGetPoolIdFromName::GET_POOLID_CHRFMT, sal_True ); 105 SwDocStyleSheet* pStyle = 106 (SwDocStyleSheet*)m_pDoc->GetDocShell()->GetStyleSheetPool()->Find(sStyle, SFX_STYLE_FAMILY_CHAR); 107 SwFmtDrop* pDrop = 0; 108 SwFmtCharFmt *pCharFmt = 0; 109 if(pStyle) 110 { 111 rtl::Reference< SwDocStyleSheet > xStyle( new SwDocStyleSheet( *(SwDocStyleSheet*)pStyle ) ); 112 if (RES_PARATR_DROP == pMap->nWID) 113 { 114 pDrop = (SwFmtDrop*)rItem.Clone(); // because rItem ist const... 115 pDrop->SetCharFmt(xStyle->GetCharFmt()); 116 m_pDoc->SetDefault(*pDrop); 117 } 118 else // RES_TXTATR_CHARFMT == pMap->nWID 119 { 120 pCharFmt = (SwFmtCharFmt*)rItem.Clone(); // because rItem ist const... 121 pCharFmt->SetCharFmt(xStyle->GetCharFmt()); 122 m_pDoc->SetDefault(*pCharFmt); 123 } 124 } 125 else 126 throw lang::IllegalArgumentException(); 127 delete pDrop; 128 delete pCharFmt; 129 } 130 else 131 throw lang::IllegalArgumentException(); 132 } 133 else 134 { 135 SfxPoolItem * pNewItem = rItem.Clone(); 136 pNewItem->PutValue( aValue, pMap->nMemberId); 137 m_pDoc->SetDefault(*pNewItem); 138 delete pNewItem; 139 } 140 } 141 142 143 Any SAL_CALL SwXTextDefaults::getPropertyValue( const OUString& rPropertyName ) 144 throw(UnknownPropertyException, WrappedTargetException, RuntimeException) 145 { 146 vos::OGuard aGuard( Application::GetSolarMutex()); 147 if (!m_pDoc) 148 throw RuntimeException(); 149 const SfxItemPropertySimpleEntry *pMap = m_pPropSet->getPropertyMap()->getByName( rPropertyName ); 150 if (!pMap) 151 throw UnknownPropertyException(OUString ( RTL_CONSTASCII_USTRINGPARAM ( "Unknown property: " ) ) + rPropertyName, static_cast < cppu::OWeakObject * > ( this ) ); 152 Any aRet; 153 const SfxPoolItem& rItem = m_pDoc->GetDefault(pMap->nWID); 154 rItem.QueryValue( aRet, pMap->nMemberId ); 155 return aRet; 156 } 157 158 159 void SAL_CALL SwXTextDefaults::addPropertyChangeListener( const OUString& /*rPropertyName*/, const uno::Reference< XPropertyChangeListener >& /*xListener*/ ) 160 throw(UnknownPropertyException, WrappedTargetException, RuntimeException) 161 { 162 DBG_WARNING ( "not implemented" ); 163 } 164 165 166 void SAL_CALL SwXTextDefaults::removePropertyChangeListener( const OUString& /*rPropertyName*/, const uno::Reference< XPropertyChangeListener >& /*xListener*/ ) 167 throw(UnknownPropertyException, WrappedTargetException, RuntimeException) 168 { 169 DBG_WARNING ( "not implemented" ); 170 } 171 172 173 void SAL_CALL SwXTextDefaults::addVetoableChangeListener( const OUString& /*rPropertyName*/, const uno::Reference< XVetoableChangeListener >& /*xListener*/ ) 174 throw(UnknownPropertyException, WrappedTargetException, RuntimeException) 175 { 176 DBG_WARNING ( "not implemented" ); 177 } 178 179 180 void SAL_CALL SwXTextDefaults::removeVetoableChangeListener( const OUString& /*rPropertyName*/, const uno::Reference< XVetoableChangeListener >& /*xListener*/ ) 181 throw(UnknownPropertyException, WrappedTargetException, RuntimeException) 182 { 183 DBG_WARNING ( "not implemented" ); 184 } 185 186 187 // XPropertyState 188 PropertyState SAL_CALL SwXTextDefaults::getPropertyState( const OUString& rPropertyName ) 189 throw(UnknownPropertyException, RuntimeException) 190 { 191 vos::OGuard aGuard( Application::GetSolarMutex()); 192 PropertyState eRet = PropertyState_DIRECT_VALUE; 193 if (!m_pDoc) 194 throw RuntimeException(); 195 const SfxItemPropertySimpleEntry *pMap = m_pPropSet->getPropertyMap()->getByName( rPropertyName ); 196 if (!pMap) 197 throw UnknownPropertyException(OUString ( RTL_CONSTASCII_USTRINGPARAM ( "Unknown property: " ) ) + rPropertyName, static_cast < cppu::OWeakObject * > ( this ) ); 198 199 const SfxPoolItem& rItem = m_pDoc->GetDefault(pMap->nWID); 200 if (IsStaticDefaultItem ( &rItem ) ) 201 eRet = PropertyState_DEFAULT_VALUE; 202 return eRet; 203 } 204 205 206 Sequence< PropertyState > SAL_CALL SwXTextDefaults::getPropertyStates( const Sequence< OUString >& rPropertyNames ) 207 throw(UnknownPropertyException, RuntimeException) 208 { 209 const sal_Int32 nCount = rPropertyNames.getLength(); 210 const OUString * pNames = rPropertyNames.getConstArray(); 211 Sequence < PropertyState > aRet ( nCount ); 212 PropertyState *pState = aRet.getArray(); 213 214 for ( sal_Int32 nIndex = 0; nIndex < nCount; nIndex++) 215 pState[nIndex] = getPropertyState( pNames[nIndex] ); 216 217 return aRet; 218 } 219 220 221 void SAL_CALL SwXTextDefaults::setPropertyToDefault( const OUString& rPropertyName ) 222 throw(UnknownPropertyException, RuntimeException) 223 { 224 if (!m_pDoc) 225 throw RuntimeException(); 226 const SfxItemPropertySimpleEntry *pMap = m_pPropSet->getPropertyMap()->getByName( rPropertyName ); 227 if (!pMap) 228 throw UnknownPropertyException(OUString ( RTL_CONSTASCII_USTRINGPARAM ( "Unknown property: " ) ) + rPropertyName, static_cast < cppu::OWeakObject * > ( this ) ); 229 if ( pMap->nFlags & PropertyAttribute::READONLY) 230 throw RuntimeException( OUString ( RTL_CONSTASCII_USTRINGPARAM ( "setPropertyToDefault: property is read-only: " ) ) + rPropertyName, static_cast < cppu::OWeakObject * > ( this ) ); 231 SfxItemPool& rSet (m_pDoc->GetAttrPool()); 232 rSet.ResetPoolDefaultItem ( pMap->nWID ); 233 } 234 235 236 Any SAL_CALL SwXTextDefaults::getPropertyDefault( const OUString& rPropertyName ) 237 throw(UnknownPropertyException, WrappedTargetException, RuntimeException) 238 { 239 if (!m_pDoc) 240 throw RuntimeException(); 241 const SfxItemPropertySimpleEntry *pMap = m_pPropSet->getPropertyMap()->getByName( rPropertyName ); 242 if (!pMap) 243 throw UnknownPropertyException(OUString ( RTL_CONSTASCII_USTRINGPARAM ( "Unknown property: " ) ) + rPropertyName, static_cast < cppu::OWeakObject * > ( this ) ); 244 Any aRet; 245 SfxItemPool& rSet (m_pDoc->GetAttrPool()); 246 const SfxPoolItem *pItem = rSet.GetPoolDefaultItem ( pMap->nWID ); 247 pItem->QueryValue( aRet, pMap->nMemberId ); 248 return aRet; 249 } 250 251 252 rtl::OUString SAL_CALL SwXTextDefaults::getImplementationName( ) 253 throw (RuntimeException) 254 { 255 return C2U("SwXTextDefaults"); 256 } 257 258 259 sal_Bool SAL_CALL SwXTextDefaults::supportsService( const ::rtl::OUString& rServiceName ) 260 throw (RuntimeException) 261 { 262 return rServiceName == C2U("com.sun.star.text.Defaults") || 263 rServiceName == C2U("com.sun.star.style.CharacterProperties") || 264 rServiceName == C2U("com.sun.star.style.CharacterPropertiesAsian") || 265 rServiceName == C2U("com.sun.star.style.CharacterPropertiesComplex") || 266 rServiceName == C2U("com.sun.star.style.ParagraphProperties") || 267 rServiceName == C2U("com.sun.star.style.ParagraphPropertiesAsian") || 268 rServiceName == C2U("com.sun.star.style.ParagraphPropertiesComplex"); 269 } 270 271 272 uno::Sequence< ::rtl::OUString > SAL_CALL SwXTextDefaults::getSupportedServiceNames( ) 273 throw (RuntimeException) 274 { 275 uno::Sequence< OUString > aRet(7); 276 OUString* pArr = aRet.getArray(); 277 *pArr++ = C2U("com.sun.star.text.Defaults"); 278 *pArr++ = C2U("com.sun.star.style.CharacterProperties"); 279 *pArr++ = C2U("com.sun.star.style.CharacterPropertiesAsian"); 280 *pArr++ = C2U("com.sun.star.style.CharacterPropertiesComplex"); 281 *pArr++ = C2U("com.sun.star.style.ParagraphProperties"); 282 *pArr++ = C2U("com.sun.star.style.ParagraphPropertiesAsian"); 283 *pArr++ = C2U("com.sun.star.style.ParagraphPropertiesComplex"); 284 return aRet; 285 } 286 287 288 289