diff options
Diffstat (limited to 'sfx2/source/doc/doctemplates.cxx')
-rw-r--r-- | sfx2/source/doc/doctemplates.cxx | 150 |
1 files changed, 82 insertions, 68 deletions
diff --git a/sfx2/source/doc/doctemplates.cxx b/sfx2/source/doc/doctemplates.cxx index abc48c5a80..ee0571c30f 100644 --- a/sfx2/source/doc/doctemplates.cxx +++ b/sfx2/source/doc/doctemplates.cxx @@ -1,3 +1,4 @@ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ /************************************************************************* * * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. @@ -29,14 +30,12 @@ #include "precompiled_sfx2.hxx" #include "doctemplates.hxx" -#include <vos/mutex.hxx> +#include <osl/mutex.hxx> #include <tools/debug.hxx> #include <tools/urlobj.hxx> #include <rtl/ustring.hxx> #include <rtl/ustrbuf.hxx> -#ifndef _SV_RESARY_HXX #include <tools/resary.hxx> -#endif #include <vcl/svapp.hxx> #include <vcl/wrkwin.hxx> #include <comphelper/sequenceashashmap.hxx> @@ -72,6 +71,8 @@ #include <sfx2/docfile.hxx> #include "doc.hrc" +#include <vector> + //----------------------------------------------------------------------------- //============================================================================= @@ -123,6 +124,8 @@ using namespace ::rtl; using namespace ::ucbhelper; using namespace ::comphelper; +using ::std::vector; + //============================================================================= class WaitWindow_Impl : public WorkWindow @@ -148,13 +151,13 @@ struct NamePair_Impl OUString maLongName; }; -DECLARE_LIST( NameList_Impl, NamePair_Impl* ) - class Updater_Impl; -class GroupList_Impl; class DocTemplates_EntryData_Impl; class GroupData_Impl; +typedef vector< NamePair_Impl* > NameList_Impl; +typedef vector< GroupData_Impl* > GroupList_Impl; + //============================================================================= #include <com/sun/star/task/XInteractionHandler.hpp> #include <com/sun/star/ucb/XProgressHandler.hpp> @@ -305,7 +308,7 @@ public: //============================================================================= -class Updater_Impl : public ::vos::OThread +class Updater_Impl : public ::osl::Thread { private: SfxDocTplService_Impl *mpDocTemplates; @@ -359,8 +362,7 @@ public: class GroupData_Impl { - DECLARE_LIST( EntryList_Impl, DocTemplates_EntryData_Impl* ) - EntryList_Impl maEntries; + vector< DocTemplates_EntryData_Impl* > maEntries; OUString maTitle; OUString maHierarchyURL; OUString maTargetURL; @@ -376,8 +378,8 @@ public: void setHierarchyURL( const OUString& rURL ) { maHierarchyURL = rURL; } void setTargetURL( const OUString& rURL ) { maTargetURL = rURL; } - sal_Bool getInUse() { return mbInUse; } - sal_Bool getInHierarchy() { return mbInHierarchy; } + sal_Bool getInUse() const { return mbInUse; } + sal_Bool getInHierarchy() const { return mbInHierarchy; } const OUString& getHierarchyURL() const { return maHierarchyURL; } const OUString& getTargetURL() const { return maTargetURL; } const OUString& getTitle() const { return maTitle; } @@ -386,12 +388,10 @@ public: const OUString& rTargetURL, const OUString& rType, const OUString& rHierURL ); - ULONG count() { return maEntries.Count(); } - DocTemplates_EntryData_Impl* getEntry( ULONG nPos ) { return maEntries.GetObject( nPos ); } + size_t count() { return maEntries.size(); } + DocTemplates_EntryData_Impl* getEntry( size_t nPos ) { return maEntries[ nPos ]; } }; -DECLARE_LIST( GroupList_Impl, GroupData_Impl* ) - //============================================================================= //============================================================================= //============================================================================= @@ -472,7 +472,7 @@ void SfxDocTplService_Impl::init_Impl() if ( bNeedsUpdate ) { aGuard.clear(); - ::vos::OClearableGuard aSolarGuard( Application::GetSolarMutex() ); + SolarMutexClearableGuard aSolarGuard; WaitWindow_Impl* pWin = new WaitWindow_Impl(); @@ -482,7 +482,7 @@ void SfxDocTplService_Impl::init_Impl() update( sal_True ); anotherGuard.clear(); - ::vos::OGuard aSecondSolarGuard( Application::GetSolarMutex() ); + SolarMutexGuard aSecondSolarGuard; delete pWin; } @@ -542,7 +542,7 @@ void SfxDocTplService_Impl::getDefaultLocale() // ----------------------------------------------------------------------- void SfxDocTplService_Impl::readFolderList() { - ::vos::OGuard aGuard( Application::GetSolarMutex() ); + SolarMutexGuard aGuard; ResStringArray aShortNames( SfxResId( TEMPLATE_SHORT_NAMES_ARY ) ); ResStringArray aLongNames( SfxResId( TEMPLATE_LONG_NAMES_ARY ) ); @@ -557,7 +557,7 @@ void SfxDocTplService_Impl::readFolderList() pPair->maShortName = aShortNames.GetString( i ); pPair->maLongName = aLongNames.GetString( i ); - maNames.Insert( pPair, LIST_APPEND ); + maNames.push_back( pPair ); } } @@ -565,17 +565,15 @@ void SfxDocTplService_Impl::readFolderList() OUString SfxDocTplService_Impl::getLongName( const OUString& rShortName ) { OUString aRet; - NamePair_Impl *pPair = maNames.First(); - while ( pPair ) + for ( size_t i = 0, n = maNames.size(); i < n; ++i ) { + NamePair_Impl* pPair = maNames[ i ]; if ( pPair->maShortName == rShortName ) { aRet = pPair->maLongName; break; } - else - pPair = maNames.Next(); } if ( !aRet.getLength() ) @@ -704,7 +702,7 @@ sal_Bool SfxDocTplService_Impl::getTitleFromURL( const OUString& rURL, OUString& uno::Reference< container::XNameAccess > xTypeDetection( mxType, uno::UNO_QUERY_THROW ); SequenceAsHashMap aTypeProps( xTypeDetection->getByName( aDocType ) ); aType = aTypeProps.getUnpackedValueOrDefault( - ::rtl::OUString::createFromAscii( "MediaType" ), + ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("MediaType")), ::rtl::OUString() ); } catch( uno::Exception& ) @@ -1152,9 +1150,14 @@ SfxDocTplService_Impl::~SfxDocTplService_Impl() if ( mpUpdater ) { - mpUpdater->kill(); + mpUpdater->terminate(); + mpUpdater->join(); delete mpUpdater; } + + for ( size_t i = 0, n = maNames.size(); i < n; ++i ) + delete maNames[ i ]; + maNames.clear(); } //----------------------------------------------------------------------------- @@ -1235,9 +1238,9 @@ void SfxDocTplService_Impl::doUpdate() } // now check the list - GroupData_Impl *pGroup = aGroupList.First(); - while ( pGroup ) + for( size_t j = 0, n = aGroupList.size(); j < n; ++j ) { + GroupData_Impl *pGroup = aGroupList[ j ]; if ( pGroup->getInUse() ) { if ( pGroup->getInHierarchy() ) @@ -1248,8 +1251,8 @@ void SfxDocTplService_Impl::doUpdate() OUString( RTL_CONSTASCII_USTRINGPARAM( TARGET_DIR_URL ) ), makeAny( pGroup->getTargetURL() ) ); - ULONG nCount = pGroup->count(); - for ( ULONG i=0; i<nCount; i++ ) + size_t nCount = pGroup->count(); + for ( size_t i=0; i<nCount; i++ ) { DocTemplates_EntryData_Impl *pData = pGroup->getEntry( i ); if ( ! pData->getInUse() ) @@ -1275,10 +1278,10 @@ void SfxDocTplService_Impl::doUpdate() removeFromHierarchy( pGroup ); // delete group from hierarchy delete pGroup; - pGroup = aGroupList.Next(); } + aGroupList.clear(); - aValue <<= sal_False; + aValue <<= sal_False; setProperty( maRootContent, aPropName, aValue ); } @@ -1387,11 +1390,11 @@ sal_Bool SfxDocTplService_Impl::WriteUINamesForTemplateDir_Impl( const ::rtl::OU sal_Bool bResult = sal_False; try { uno::Reference< beans::XPropertySet > xTempFile( - mxFactory->createInstance( ::rtl::OUString::createFromAscii( "com.sun.star.io.TempFile" ) ), + mxFactory->createInstance( ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("com.sun.star.io.TempFile")) ), uno::UNO_QUERY_THROW ); ::rtl::OUString aTempURL; - uno::Any aUrl = xTempFile->getPropertyValue( ::rtl::OUString::createFromAscii( "Uri" ) ); + uno::Any aUrl = xTempFile->getPropertyValue( ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("Uri")) ); aUrl >>= aTempURL; uno::Reference< io::XStream > xStream( xTempFile, uno::UNO_QUERY_THROW ); @@ -1600,7 +1603,7 @@ sal_Bool SfxDocTplService_Impl::removeGroup( const OUString& rGroupName ) uno::Reference< XResultSet > xResultSet; Sequence< OUString > aProps( 1 ); - aProps[0] = OUString::createFromAscii( TARGET_URL ); + aProps[0] = OUString(RTL_CONSTASCII_USTRINGPARAM( TARGET_URL )); try { @@ -1717,7 +1720,7 @@ sal_Bool SfxDocTplService_Impl::renameGroup( const OUString& rOldName, uno::Reference< XResultSet > xResultSet; Sequence< OUString > aProps( 1 ); - aProps[0] = OUString::createFromAscii( TARGET_URL ); + aProps[0] = OUString(RTL_CONSTASCII_USTRINGPARAM( TARGET_URL )); ResultSetInclude eInclude = INCLUDE_DOCUMENTS_ONLY; xResultSet = aGroup.createCursor( aProps, eInclude ); @@ -1823,7 +1826,7 @@ sal_Bool SfxDocTplService_Impl::storeTemplate( const OUString& rGroupName, // get document service name uno::Reference< frame::XModuleManager > xModuleManager( xFactory->createInstance( - ::rtl::OUString::createFromAscii( "com.sun.star.frame.ModuleManager" ) ), + ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("com.sun.star.frame.ModuleManager")) ), uno::UNO_QUERY_THROW ); sDocServiceName = xModuleManager->identify( uno::Reference< uno::XInterface >( rStorable, uno::UNO_QUERY ) ); if ( !sDocServiceName.getLength() ) @@ -1834,18 +1837,18 @@ sal_Bool SfxDocTplService_Impl::storeTemplate( const OUString& rGroupName, uno::Reference< lang::XMultiServiceFactory > xConfigProvider( xFactory->createInstance( - ::rtl::OUString::createFromAscii( "com.sun.star.configuration.ConfigurationProvider" ) ), + ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("com.sun.star.configuration.ConfigurationProvider")) ), uno::UNO_QUERY_THROW ); uno::Sequence< uno::Any > aArgs( 1 ); beans::PropertyValue aPathProp; - aPathProp.Name = ::rtl::OUString::createFromAscii( "nodepath" ); + aPathProp.Name = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("nodepath")); aPathProp.Value <<= ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "/org.openoffice.Setup/Office/Factories/" ) ); aArgs[0] <<= aPathProp; uno::Reference< container::XNameAccess > xSOFConfig( xConfigProvider->createInstanceWithArguments( - ::rtl::OUString::createFromAscii( "com.sun.star.configuration.ConfigurationAccess" ), + ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("com.sun.star.configuration.ConfigurationAccess")), aArgs ), uno::UNO_QUERY_THROW ); @@ -1861,13 +1864,13 @@ sal_Bool SfxDocTplService_Impl::storeTemplate( const OUString& rGroupName, // find the related type name ::rtl::OUString aTypeName; uno::Reference< container::XNameAccess > xFilterFactory( - xFactory->createInstance( ::rtl::OUString::createFromAscii( "com.sun.star.document.FilterFactory" ) ), + xFactory->createInstance( ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("com.sun.star.document.FilterFactory")) ), uno::UNO_QUERY_THROW ); uno::Sequence< beans::PropertyValue > aFilterData; xFilterFactory->getByName( aFilterName ) >>= aFilterData; for ( sal_Int32 nInd = 0; nInd < aFilterData.getLength(); nInd++ ) - if ( aFilterData[nInd].Name.equalsAscii( "Type" ) ) + if ( aFilterData[nInd].Name.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM( "Type" ) ) ) aFilterData[nInd].Value >>= aTypeName; if ( !aTypeName.getLength() ) @@ -1878,16 +1881,16 @@ sal_Bool SfxDocTplService_Impl::storeTemplate( const OUString& rGroupName, mxType.is() ? uno::Reference< container::XNameAccess >( mxType, uno::UNO_QUERY_THROW ) : uno::Reference< container::XNameAccess >( - xFactory->createInstance( ::rtl::OUString::createFromAscii( "com.sun.star.document.TypeDetection" ) ), + xFactory->createInstance( ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("com.sun.star.document.TypeDetection")) ), uno::UNO_QUERY_THROW ); SequenceAsHashMap aTypeProps( xTypeDetection->getByName( aTypeName ) ); uno::Sequence< ::rtl::OUString > aAllExt = - aTypeProps.getUnpackedValueOrDefault( ::rtl::OUString::createFromAscii( "Extensions" ), Sequence< ::rtl::OUString >() ); + aTypeProps.getUnpackedValueOrDefault( ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("Extensions")), Sequence< ::rtl::OUString >() ); if ( !aAllExt.getLength() ) throw uno::RuntimeException(); - ::rtl::OUString aMediaType = aTypeProps.getUnpackedValueOrDefault( ::rtl::OUString::createFromAscii( "MediaType" ), ::rtl::OUString() ); + ::rtl::OUString aMediaType = aTypeProps.getUnpackedValueOrDefault( ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("MediaType")), ::rtl::OUString() ); ::rtl::OUString aExt = aAllExt[0]; if ( !aMediaType.getLength() || !aExt.getLength() ) @@ -1913,9 +1916,9 @@ sal_Bool SfxDocTplService_Impl::storeTemplate( const OUString& rGroupName, // store template uno::Sequence< PropertyValue > aStoreArgs( 2 ); - aStoreArgs[0].Name = ::rtl::OUString::createFromAscii( "FilterName" ); + aStoreArgs[0].Name = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("FilterName")); aStoreArgs[0].Value <<= aFilterName; - aStoreArgs[1].Name = ::rtl::OUString::createFromAscii( "DocumentTitle" ); + aStoreArgs[1].Name = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("DocumentTitle")); aStoreArgs[1].Value <<= rTemplateName; ::rtl::OUString aCurrentDocumentURL = rStorable->getLocation(); @@ -2432,9 +2435,9 @@ void SfxDocTplService_Impl::addHierGroup( GroupList_Impl& rList, uno::Reference< XResultSet > xResultSet; Sequence< OUString > aProps(3); - aProps[0] = OUString::createFromAscii( TITLE ); - aProps[1] = OUString::createFromAscii( TARGET_URL ); - aProps[2] = OUString::createFromAscii( PROPERTY_TYPE ); + aProps[0] = OUString(RTL_CONSTASCII_USTRINGPARAM( TITLE )); + aProps[1] = OUString(RTL_CONSTASCII_USTRINGPARAM( TARGET_URL )); + aProps[2] = OUString(RTL_CONSTASCII_USTRINGPARAM( PROPERTY_TYPE )); try { @@ -2453,7 +2456,7 @@ void SfxDocTplService_Impl::addHierGroup( GroupList_Impl& rList, GroupData_Impl *pGroup = new GroupData_Impl( rTitle ); pGroup->setHierarchy( sal_True ); pGroup->setHierarchyURL( rOwnURL ); - rList.Insert( pGroup ); + rList.push_back( pGroup ); uno::Reference< XContentAccess > xContentAccess( xResultSet, UNO_QUERY ); uno::Reference< XRow > xRow( xResultSet, UNO_QUERY ); @@ -2518,15 +2521,20 @@ void SfxDocTplService_Impl::addFsysGroup( GroupList_Impl& rList, if ( !aTitle.getLength() ) return; - GroupData_Impl *pGroup = rList.First(); - - while ( pGroup && pGroup->getTitle() != aTitle ) - pGroup = rList.Next(); + GroupData_Impl* pGroup = NULL; + for ( size_t i = 0, n = rList.size(); i < n; ++i ) + { + if ( rList[ i ]->getTitle() == aTitle ) + { + pGroup = rList[ i ]; + break; + } + } if ( !pGroup ) { pGroup = new GroupData_Impl( aTitle ); - rList.Insert( pGroup ); + rList.push_back( pGroup ); } if ( bWriteableGroup ) @@ -2538,7 +2546,7 @@ void SfxDocTplService_Impl::addFsysGroup( GroupList_Impl& rList, Content aContent; uno::Reference< XResultSet > xResultSet; Sequence< OUString > aProps(1); - aProps[0] = OUString::createFromAscii( TITLE ); + aProps[0] = OUString(RTL_CONSTASCII_USTRINGPARAM( TITLE )); try { @@ -2606,7 +2614,7 @@ void SfxDocTplService_Impl::createFromContent( GroupList_Impl& rList, uno::Reference< XResultSet > xResultSet; Sequence< OUString > aProps(1); - aProps[0] = OUString::createFromAscii( TITLE ); + aProps[0] = OUString(RTL_CONSTASCII_USTRINGPARAM( TITLE )); try { @@ -2760,12 +2768,9 @@ GroupData_Impl::GroupData_Impl( const OUString& rTitle ) // ----------------------------------------------------------------------- GroupData_Impl::~GroupData_Impl() { - DocTemplates_EntryData_Impl *pData = maEntries.First(); - while ( pData ) - { - delete pData; - pData = maEntries.Next(); - } + for ( size_t i = 0, n = maEntries.size(); i < n; ++i ) + delete maEntries[ i ]; + maEntries.clear(); } // ----------------------------------------------------------------------- @@ -2774,12 +2779,20 @@ DocTemplates_EntryData_Impl* GroupData_Impl::addEntry( const OUString& rTitle, const OUString& rType, const OUString& rHierURL ) { - DocTemplates_EntryData_Impl *pData = maEntries.First(); + DocTemplates_EntryData_Impl* pData = NULL; + bool EntryFound = false; - while ( pData && pData->getTitle() != rTitle ) - pData = maEntries.Next(); + for ( size_t i = 0, n = maEntries.size(); i < n; ++i ) + { + pData = maEntries[ i ]; + if ( pData->getTitle() == rTitle ) + { + EntryFound = true; + break; + } + } - if ( !pData ) + if ( !EntryFound ) { pData = new DocTemplates_EntryData_Impl( rTitle ); pData->setTargetURL( rTargetURL ); @@ -2789,7 +2802,7 @@ DocTemplates_EntryData_Impl* GroupData_Impl::addEntry( const OUString& rTitle, pData->setHierarchyURL( rHierURL ); pData->setHierarchy( sal_True ); } - maEntries.Insert( pData ); + maEntries.push_back( pData ); } else { @@ -2896,3 +2909,4 @@ void SfxURLRelocator_Impl::makeAbsoluteURL( rtl::OUString & rURL ) } +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ |