1b5088357SAndrew Rist /************************************************************** 2cdf0e10cSrcweir * 3b5088357SAndrew Rist * Licensed to the Apache Software Foundation (ASF) under one 4b5088357SAndrew Rist * or more contributor license agreements. See the NOTICE file 5b5088357SAndrew Rist * distributed with this work for additional information 6b5088357SAndrew Rist * regarding copyright ownership. The ASF licenses this file 7b5088357SAndrew Rist * to you under the Apache License, Version 2.0 (the 8b5088357SAndrew Rist * "License"); you may not use this file except in compliance 9b5088357SAndrew Rist * with the License. You may obtain a copy of the License at 10cdf0e10cSrcweir * 11b5088357SAndrew Rist * http://www.apache.org/licenses/LICENSE-2.0 12cdf0e10cSrcweir * 13b5088357SAndrew Rist * Unless required by applicable law or agreed to in writing, 14b5088357SAndrew Rist * software distributed under the License is distributed on an 15b5088357SAndrew Rist * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 16b5088357SAndrew Rist * KIND, either express or implied. See the License for the 17b5088357SAndrew Rist * specific language governing permissions and limitations 18b5088357SAndrew Rist * under the License. 19cdf0e10cSrcweir * 20b5088357SAndrew Rist *************************************************************/ 21b5088357SAndrew Rist 22b5088357SAndrew Rist 23cdf0e10cSrcweir 24cdf0e10cSrcweir // MARKER(update_precomp.py): autogen include statement, do not remove 25cdf0e10cSrcweir #include "precompiled_unotools.hxx" 26cdf0e10cSrcweir #ifndef GCC 27cdf0e10cSrcweir #endif 28cdf0e10cSrcweir 29cdf0e10cSrcweir #include <unotools/pathoptions.hxx> 30cdf0e10cSrcweir #include <unotools/configitem.hxx> 31cdf0e10cSrcweir #include <unotools/configmgr.hxx> 32cdf0e10cSrcweir #include <tools/debug.hxx> 33cdf0e10cSrcweir #include <tools/resmgr.hxx> 34cdf0e10cSrcweir #include <tools/urlobj.hxx> 35cdf0e10cSrcweir #include <com/sun/star/uno/Any.hxx> 36cdf0e10cSrcweir #include <com/sun/star/uno/Sequence.hxx> 37cdf0e10cSrcweir #include <osl/mutex.hxx> 38cdf0e10cSrcweir #include <osl/file.hxx> 39cdf0e10cSrcweir #include <unotools/localfilehelper.hxx> 40cdf0e10cSrcweir #include <unotools/bootstrap.hxx> 41cdf0e10cSrcweir 42cdf0e10cSrcweir #include <unotools/ucbhelper.hxx> 43cdf0e10cSrcweir #include <vos/process.hxx> 44cdf0e10cSrcweir #include <comphelper/processfactory.hxx> 45cdf0e10cSrcweir #include <comphelper/componentcontext.hxx> 46cdf0e10cSrcweir #include <com/sun/star/beans/XFastPropertySet.hpp> 47cdf0e10cSrcweir #include <com/sun/star/beans/XPropertySet.hpp> 48cdf0e10cSrcweir #include <com/sun/star/beans/PropertyAttribute.hpp> 49cdf0e10cSrcweir #include <com/sun/star/beans/XPropertySetInfo.hpp> 50cdf0e10cSrcweir #include <com/sun/star/util/XStringSubstitution.hpp> 51cdf0e10cSrcweir #include <com/sun/star/lang/XMultiServiceFactory.hpp> 52cdf0e10cSrcweir #include <com/sun/star/util/XMacroExpander.hpp> 53cdf0e10cSrcweir #include <rtl/instance.hxx> 54cdf0e10cSrcweir 55cdf0e10cSrcweir #include <itemholder1.hxx> 56cdf0e10cSrcweir 57cdf0e10cSrcweir #include <vector> 58cdf0e10cSrcweir #include <hash_map> 59cdf0e10cSrcweir 60cdf0e10cSrcweir using namespace osl; 61cdf0e10cSrcweir using namespace utl; 62cdf0e10cSrcweir using namespace rtl; 63cdf0e10cSrcweir using namespace com::sun::star::uno; 64cdf0e10cSrcweir using namespace com::sun::star::beans; 65cdf0e10cSrcweir using namespace com::sun::star::util; 66cdf0e10cSrcweir using namespace com::sun::star::lang; 67cdf0e10cSrcweir 68cdf0e10cSrcweir // define ---------------------------------------------------------------- 69cdf0e10cSrcweir 70cdf0e10cSrcweir #define SEARCHPATH_DELIMITER ';' 71cdf0e10cSrcweir 72cdf0e10cSrcweir #define ASCII_STR(s) OUString( RTL_CONSTASCII_USTRINGPARAM(s) ) 73cdf0e10cSrcweir 74cdf0e10cSrcweir #define SIGN_STARTVARIABLE ASCII_STR("$(") 75cdf0e10cSrcweir #define SIGN_ENDVARIABLE ASCII_STR(")") 76cdf0e10cSrcweir 77cdf0e10cSrcweir // Supported variables by the old SvtPathOptions implementation 78cdf0e10cSrcweir #define SUBSTITUTE_INST "$(inst)" 79cdf0e10cSrcweir #define SUBSTITUTE_PROG "$(prog)" 80cdf0e10cSrcweir #define SUBSTITUTE_USER "$(user)" 81cdf0e10cSrcweir #define SUBSTITUTE_INSTPATH "$(instpath)" 82cdf0e10cSrcweir #define SUBSTITUTE_PROGPATH "$(progpath)" 83cdf0e10cSrcweir #define SUBSTITUTE_USERPATH "$(userpath)" 84cdf0e10cSrcweir #define SUBSTITUTE_INSTURL "$(insturl)" 85cdf0e10cSrcweir #define SUBSTITUTE_PROGURL "$(progurl)" 86cdf0e10cSrcweir #define SUBSTITUTE_USERURL "$(userurl)" 87cdf0e10cSrcweir #define SUBSTITUTE_PATH "$(path)" 88cdf0e10cSrcweir //#define SUBSTITUTE_LANG "$(lang)" 89cdf0e10cSrcweir #define SUBSTITUTE_LANGID "$(langid)" 90cdf0e10cSrcweir #define SUBSTITUTE_VLANG "$(vlang)" 91cdf0e10cSrcweir #define SUBSTITUTE_WORKDIRURL "$(workdirurl)" 92cdf0e10cSrcweir 93cdf0e10cSrcweir #define STRPOS_NOTFOUND -1 94cdf0e10cSrcweir 95cdf0e10cSrcweir struct OUStringHashCode 96cdf0e10cSrcweir { 97cdf0e10cSrcweir size_t operator()( const ::rtl::OUString& sString ) const 98cdf0e10cSrcweir { 99cdf0e10cSrcweir return sString.hashCode(); 100cdf0e10cSrcweir } 101cdf0e10cSrcweir }; 102cdf0e10cSrcweir 103cdf0e10cSrcweir enum VarNameProperty 104cdf0e10cSrcweir { 105cdf0e10cSrcweir VAR_NEEDS_SYSTEM_PATH, 106cdf0e10cSrcweir VAR_NEEDS_FILEURL 107cdf0e10cSrcweir }; 108cdf0e10cSrcweir 109cdf0e10cSrcweir class NameToHandleMap : public ::std::hash_map< ::rtl::OUString, sal_Int32, OUStringHashCode, ::std::equal_to< ::rtl::OUString > > 110cdf0e10cSrcweir { 111cdf0e10cSrcweir public: 112cdf0e10cSrcweir inline void free() { NameToHandleMap().swap( *this ); } 113cdf0e10cSrcweir }; 114cdf0e10cSrcweir 115cdf0e10cSrcweir class EnumToHandleMap : public ::std::hash_map< sal_Int32, sal_Int32, std::hash< sal_Int32 >, std::equal_to< sal_Int32 > > 116cdf0e10cSrcweir { 117cdf0e10cSrcweir public: 118cdf0e10cSrcweir inline void free() { EnumToHandleMap().swap( *this ); } 119cdf0e10cSrcweir }; 120cdf0e10cSrcweir 121cdf0e10cSrcweir class VarNameToEnumMap : public ::std::hash_map< OUString, VarNameProperty, OUStringHashCode, ::std::equal_to< OUString > > 122cdf0e10cSrcweir { 123cdf0e10cSrcweir public: 124cdf0e10cSrcweir inline void free() { VarNameToEnumMap().swap( *this ); } 125cdf0e10cSrcweir }; 126cdf0e10cSrcweir 127cdf0e10cSrcweir 128cdf0e10cSrcweir // class SvtPathOptions_Impl --------------------------------------------- 129cdf0e10cSrcweir class SvtPathOptions_Impl 130cdf0e10cSrcweir { 131cdf0e10cSrcweir private: 132cdf0e10cSrcweir // Local variables to return const references 133cdf0e10cSrcweir std::vector< String > m_aPathArray; 134cdf0e10cSrcweir Reference< XFastPropertySet > m_xPathSettings; 135cdf0e10cSrcweir Reference< XStringSubstitution > m_xSubstVariables; 136cdf0e10cSrcweir Reference< XMacroExpander > m_xMacroExpander; 137cdf0e10cSrcweir mutable EnumToHandleMap m_aMapEnumToPropHandle; 138cdf0e10cSrcweir VarNameToEnumMap m_aMapVarNamesToEnum; 139cdf0e10cSrcweir 140cdf0e10cSrcweir ::com::sun::star::lang::Locale m_aLocale; 141cdf0e10cSrcweir String m_aEmptyString; 142cdf0e10cSrcweir mutable ::osl::Mutex m_aMutex; 143cdf0e10cSrcweir 144cdf0e10cSrcweir public: 145cdf0e10cSrcweir SvtPathOptions_Impl(); 146cdf0e10cSrcweir 147cdf0e10cSrcweir // get the pathes, not const because of using a mutex 148cdf0e10cSrcweir const String& GetPath( SvtPathOptions::Pathes ); 149cdf0e10cSrcweir const String& GetAddinPath() { return GetPath( SvtPathOptions::PATH_ADDIN ); } 150cdf0e10cSrcweir const String& GetAutoCorrectPath() { return GetPath( SvtPathOptions::PATH_AUTOCORRECT ); } 151cdf0e10cSrcweir const String& GetAutoTextPath() { return GetPath( SvtPathOptions::PATH_AUTOTEXT ); } 152cdf0e10cSrcweir const String& GetBackupPath() { return GetPath( SvtPathOptions::PATH_BACKUP ); } 153cdf0e10cSrcweir const String& GetBasicPath() { return GetPath( SvtPathOptions::PATH_BASIC ); } 154cdf0e10cSrcweir const String& GetBitmapPath() { return GetPath( SvtPathOptions::PATH_BITMAP ); } 155cdf0e10cSrcweir const String& GetConfigPath() { return GetPath( SvtPathOptions::PATH_CONFIG ); } 156cdf0e10cSrcweir const String& GetDictionaryPath() { return GetPath( SvtPathOptions::PATH_DICTIONARY ); } 157cdf0e10cSrcweir const String& GetFavoritesPath() { return GetPath( SvtPathOptions::PATH_FAVORITES ); } 158cdf0e10cSrcweir const String& GetFilterPath() { return GetPath( SvtPathOptions::PATH_FILTER ); } 159cdf0e10cSrcweir const String& GetGalleryPath() { return GetPath( SvtPathOptions::PATH_GALLERY ); } 160cdf0e10cSrcweir const String& GetGraphicPath() { return GetPath( SvtPathOptions::PATH_GRAPHIC ); } 161cdf0e10cSrcweir const String& GetHelpPath() { return GetPath( SvtPathOptions::PATH_HELP ); } 162cdf0e10cSrcweir const String& GetLinguisticPath() { return GetPath( SvtPathOptions::PATH_LINGUISTIC ); } 163cdf0e10cSrcweir const String& GetModulePath() { return GetPath( SvtPathOptions::PATH_MODULE ); } 164cdf0e10cSrcweir const String& GetPalettePath() { return GetPath( SvtPathOptions::PATH_PALETTE ); } 165cdf0e10cSrcweir const String& GetPluginPath() { return GetPath( SvtPathOptions::PATH_PLUGIN ); } 166cdf0e10cSrcweir const String& GetStoragePath() { return GetPath( SvtPathOptions::PATH_STORAGE ); } 167cdf0e10cSrcweir const String& GetTempPath() { return GetPath( SvtPathOptions::PATH_TEMP ); } 168cdf0e10cSrcweir const String& GetTemplatePath() { return GetPath( SvtPathOptions::PATH_TEMPLATE ); } 169cdf0e10cSrcweir const String& GetUserConfigPath() { return GetPath( SvtPathOptions::PATH_USERCONFIG ); } 170cdf0e10cSrcweir const String& GetWorkPath() { return GetPath( SvtPathOptions::PATH_WORK ); } 171cdf0e10cSrcweir const String& GetUIConfigPath() { return GetPath( SvtPathOptions::PATH_UICONFIG ); } 172cdf0e10cSrcweir const String& GetFingerprintPath() { return GetPath( SvtPathOptions::PATH_FINGERPRINT ); } 173cdf0e10cSrcweir 174cdf0e10cSrcweir // set the pathes 175cdf0e10cSrcweir void SetPath( SvtPathOptions::Pathes, const String& rNewPath ); 176cdf0e10cSrcweir void SetAddinPath( const String& rPath ) { SetPath( SvtPathOptions::PATH_ADDIN, rPath ); } 177cdf0e10cSrcweir void SetAutoCorrectPath( const String& rPath ) { SetPath( SvtPathOptions::PATH_AUTOCORRECT, rPath ); } 178cdf0e10cSrcweir void SetAutoTextPath( const String& rPath ) { SetPath( SvtPathOptions::PATH_AUTOTEXT, rPath ); } 179cdf0e10cSrcweir void SetBackupPath( const String& rPath ) { SetPath( SvtPathOptions::PATH_BACKUP, rPath ); } 180cdf0e10cSrcweir void SetBasicPath( const String& rPath ) { SetPath( SvtPathOptions::PATH_BASIC, rPath ); } 181cdf0e10cSrcweir void SetBitmapPath( const String& rPath ) { SetPath( SvtPathOptions::PATH_BITMAP, rPath ); } 182cdf0e10cSrcweir void SetConfigPath( const String& rPath ) { SetPath( SvtPathOptions::PATH_CONFIG, rPath ); } 183cdf0e10cSrcweir void SetDictionaryPath( const String& rPath ) { SetPath( SvtPathOptions::PATH_DICTIONARY, rPath ); } 184cdf0e10cSrcweir void SetFavoritesPath( const String& rPath ) { SetPath( SvtPathOptions::PATH_FAVORITES, rPath ); } 185cdf0e10cSrcweir void SetFilterPath( const String& rPath ) { SetPath( SvtPathOptions::PATH_FILTER, rPath ); } 186cdf0e10cSrcweir void SetGalleryPath( const String& rPath ) { SetPath( SvtPathOptions::PATH_GALLERY, rPath ); } 187cdf0e10cSrcweir void SetGraphicPath( const String& rPath ) { SetPath( SvtPathOptions::PATH_GRAPHIC, rPath ); } 188cdf0e10cSrcweir void SetHelpPath( const String& rPath ) { SetPath( SvtPathOptions::PATH_HELP, rPath ); } 189cdf0e10cSrcweir void SetLinguisticPath( const String& rPath ) { SetPath( SvtPathOptions::PATH_LINGUISTIC, rPath ); } 190cdf0e10cSrcweir void SetModulePath( const String& rPath ) { SetPath( SvtPathOptions::PATH_MODULE, rPath ); } 191cdf0e10cSrcweir void SetPalettePath( const String& rPath ) { SetPath( SvtPathOptions::PATH_PALETTE, rPath ); } 192cdf0e10cSrcweir void SetPluginPath( const String& rPath ) { SetPath( SvtPathOptions::PATH_PLUGIN, rPath ); } 193cdf0e10cSrcweir void SetStoragePath( const String& rPath ) { SetPath( SvtPathOptions::PATH_STORAGE, rPath ); } 194cdf0e10cSrcweir void SetTempPath( const String& rPath ) { SetPath( SvtPathOptions::PATH_TEMP, rPath ); } 195cdf0e10cSrcweir void SetTemplatePath( const String& rPath ) { SetPath( SvtPathOptions::PATH_TEMPLATE, rPath ); } 196cdf0e10cSrcweir void SetUserConfigPath( const String& rPath ) { SetPath( SvtPathOptions::PATH_USERCONFIG, rPath ); } 197cdf0e10cSrcweir void SetWorkPath( const String& rPath ) { SetPath( SvtPathOptions::PATH_WORK, rPath ); } 198cdf0e10cSrcweir 199cdf0e10cSrcweir rtl::OUString SubstVar( const rtl::OUString& rVar ) const; 200cdf0e10cSrcweir rtl::OUString ExpandMacros( const rtl::OUString& rPath ) const; 201cdf0e10cSrcweir rtl::OUString UsePathVariables( const rtl::OUString& rPath ) const; 202cdf0e10cSrcweir 203cdf0e10cSrcweir ::com::sun::star::lang::Locale GetLocale() const { return m_aLocale; } 204cdf0e10cSrcweir 205cdf0e10cSrcweir sal_Bool IsPathReadonly(SvtPathOptions::Pathes ePath)const; 206cdf0e10cSrcweir }; 207cdf0e10cSrcweir 208cdf0e10cSrcweir // global ---------------------------------------------------------------- 209cdf0e10cSrcweir 210cdf0e10cSrcweir static SvtPathOptions_Impl* pOptions = NULL; 211cdf0e10cSrcweir static sal_Int32 nRefCount = 0; 212cdf0e10cSrcweir 213cdf0e10cSrcweir // functions ------------------------------------------------------------- 214cdf0e10cSrcweir struct PropertyStruct 215cdf0e10cSrcweir { 216cdf0e10cSrcweir const char* pPropName; // The ascii name of the Office path 217cdf0e10cSrcweir SvtPathOptions::Pathes ePath; // The enum value used by SvtPathOptions 218cdf0e10cSrcweir }; 219cdf0e10cSrcweir 220cdf0e10cSrcweir struct VarNameAttribute 221cdf0e10cSrcweir { 222cdf0e10cSrcweir const char* pVarName; // The name of the path variable 223cdf0e10cSrcweir VarNameProperty eVarProperty; // Which return value is needed by this path variable 224cdf0e10cSrcweir }; 225cdf0e10cSrcweir 226cdf0e10cSrcweir static PropertyStruct aPropNames[] = 227cdf0e10cSrcweir { 228cdf0e10cSrcweir { "Addin", SvtPathOptions::PATH_ADDIN }, 229cdf0e10cSrcweir { "AutoCorrect", SvtPathOptions::PATH_AUTOCORRECT }, 230cdf0e10cSrcweir { "AutoText", SvtPathOptions::PATH_AUTOTEXT }, 231cdf0e10cSrcweir { "Backup", SvtPathOptions::PATH_BACKUP }, 232cdf0e10cSrcweir { "Basic", SvtPathOptions::PATH_BASIC }, 233cdf0e10cSrcweir { "Bitmap", SvtPathOptions::PATH_BITMAP }, 234cdf0e10cSrcweir { "Config", SvtPathOptions::PATH_CONFIG }, 235cdf0e10cSrcweir { "Dictionary", SvtPathOptions::PATH_DICTIONARY }, 236cdf0e10cSrcweir { "Favorite", SvtPathOptions::PATH_FAVORITES }, 237cdf0e10cSrcweir { "Filter", SvtPathOptions::PATH_FILTER }, 238cdf0e10cSrcweir { "Gallery", SvtPathOptions::PATH_GALLERY }, 239cdf0e10cSrcweir { "Graphic", SvtPathOptions::PATH_GRAPHIC }, 240cdf0e10cSrcweir { "Help", SvtPathOptions::PATH_HELP }, 241cdf0e10cSrcweir { "Linguistic", SvtPathOptions::PATH_LINGUISTIC }, 242cdf0e10cSrcweir { "Module", SvtPathOptions::PATH_MODULE }, 243cdf0e10cSrcweir { "Palette", SvtPathOptions::PATH_PALETTE }, 244cdf0e10cSrcweir { "Plugin", SvtPathOptions::PATH_PLUGIN }, 245cdf0e10cSrcweir { "Storage", SvtPathOptions::PATH_STORAGE }, 246cdf0e10cSrcweir { "Temp", SvtPathOptions::PATH_TEMP }, 247cdf0e10cSrcweir { "Template", SvtPathOptions::PATH_TEMPLATE }, 248cdf0e10cSrcweir { "UserConfig", SvtPathOptions::PATH_USERCONFIG }, 249cdf0e10cSrcweir { "Work", SvtPathOptions::PATH_WORK }, 250cdf0e10cSrcweir { "UIConfig", SvtPathOptions::PATH_UICONFIG }, 251cdf0e10cSrcweir { "Fingerprint", SvtPathOptions::PATH_FINGERPRINT } 252cdf0e10cSrcweir }; 253cdf0e10cSrcweir 254cdf0e10cSrcweir static VarNameAttribute aVarNameAttribute[] = 255cdf0e10cSrcweir { 256cdf0e10cSrcweir { SUBSTITUTE_INSTPATH, VAR_NEEDS_SYSTEM_PATH }, // $(instpath) 257cdf0e10cSrcweir { SUBSTITUTE_PROGPATH, VAR_NEEDS_SYSTEM_PATH }, // $(progpath) 258cdf0e10cSrcweir { SUBSTITUTE_USERPATH, VAR_NEEDS_SYSTEM_PATH }, // $(userpath) 259cdf0e10cSrcweir { SUBSTITUTE_PATH, VAR_NEEDS_SYSTEM_PATH }, // $(path) 260cdf0e10cSrcweir }; 261cdf0e10cSrcweir 262cdf0e10cSrcweir #if 0 263cdf0e10cSrcweir // currently unused 264cdf0e10cSrcweir static Sequence< OUString > GetPathPropertyNames() 265cdf0e10cSrcweir { 266cdf0e10cSrcweir const int nCount = sizeof( aPropNames ) / sizeof( PropertyStruct ); 267cdf0e10cSrcweir Sequence< OUString > aNames( nCount ); 268cdf0e10cSrcweir OUString* pNames = aNames.getArray(); 269cdf0e10cSrcweir for ( int i = 0; i < nCount; i++ ) 270cdf0e10cSrcweir pNames[i] = OUString::createFromAscii( aPropNames[i].pPropName ); 271cdf0e10cSrcweir 272cdf0e10cSrcweir return aNames; 273cdf0e10cSrcweir } 274cdf0e10cSrcweir #endif 275cdf0e10cSrcweir 276cdf0e10cSrcweir // class SvtPathOptions_Impl --------------------------------------------- 277cdf0e10cSrcweir 278cdf0e10cSrcweir const String& SvtPathOptions_Impl::GetPath( SvtPathOptions::Pathes ePath ) 279cdf0e10cSrcweir { 280cdf0e10cSrcweir ::osl::MutexGuard aGuard( m_aMutex ); 281cdf0e10cSrcweir 282cdf0e10cSrcweir if ( ePath >= SvtPathOptions::PATH_COUNT ) 283cdf0e10cSrcweir return m_aEmptyString; 284cdf0e10cSrcweir 285cdf0e10cSrcweir OUString aPathValue; 286cdf0e10cSrcweir String aResult; 287cdf0e10cSrcweir sal_Int32 nHandle = m_aMapEnumToPropHandle[ (sal_Int32)ePath ]; 288cdf0e10cSrcweir 289*d941b70cSJohn Bampton // Substitution is done by the service itself using the substitution service 290cdf0e10cSrcweir Any a = m_xPathSettings->getFastPropertyValue( nHandle ); 291cdf0e10cSrcweir a >>= aPathValue; 292cdf0e10cSrcweir if( ePath == SvtPathOptions::PATH_ADDIN || 293cdf0e10cSrcweir ePath == SvtPathOptions::PATH_FILTER || 294cdf0e10cSrcweir ePath == SvtPathOptions::PATH_HELP || 295cdf0e10cSrcweir ePath == SvtPathOptions::PATH_MODULE || 296cdf0e10cSrcweir ePath == SvtPathOptions::PATH_PLUGIN || 297cdf0e10cSrcweir ePath == SvtPathOptions::PATH_STORAGE 298cdf0e10cSrcweir ) 299cdf0e10cSrcweir { 300cdf0e10cSrcweir // These office paths have to be converted to system pathes 301cdf0e10cSrcweir utl::LocalFileHelper::ConvertURLToPhysicalName( aPathValue, aResult ); 302cdf0e10cSrcweir aPathValue = aResult; 303cdf0e10cSrcweir } 304cdf0e10cSrcweir 305cdf0e10cSrcweir m_aPathArray[ ePath ] = aPathValue; 306cdf0e10cSrcweir return m_aPathArray[ ePath ]; 307cdf0e10cSrcweir } 308cdf0e10cSrcweir // ----------------------------------------------------------------------- 309cdf0e10cSrcweir sal_Bool SvtPathOptions_Impl::IsPathReadonly(SvtPathOptions::Pathes ePath)const 310cdf0e10cSrcweir { 311cdf0e10cSrcweir ::osl::MutexGuard aGuard( m_aMutex ); 312cdf0e10cSrcweir sal_Bool bReadonly = sal_False; 313cdf0e10cSrcweir if ( ePath < SvtPathOptions::PATH_COUNT ) 314cdf0e10cSrcweir { 315cdf0e10cSrcweir Reference<XPropertySet> xPrSet(m_xPathSettings, UNO_QUERY); 316cdf0e10cSrcweir if(xPrSet.is()) 317cdf0e10cSrcweir { 318cdf0e10cSrcweir Reference<XPropertySetInfo> xInfo = xPrSet->getPropertySetInfo(); 319cdf0e10cSrcweir const char* pA = aPropNames[ePath].pPropName; 320cdf0e10cSrcweir ::rtl::OUString sU = OUString::createFromAscii(pA); 321cdf0e10cSrcweir Property aProperty = xInfo->getPropertyByName(sU); 322cdf0e10cSrcweir bReadonly = 0 != (aProperty.Attributes & PropertyAttribute::READONLY); 323cdf0e10cSrcweir } 324cdf0e10cSrcweir } 325cdf0e10cSrcweir return bReadonly; 326cdf0e10cSrcweir } 327cdf0e10cSrcweir // ----------------------------------------------------------------------- 328cdf0e10cSrcweir 329cdf0e10cSrcweir void SvtPathOptions_Impl::SetPath( SvtPathOptions::Pathes ePath, const String& rNewPath ) 330cdf0e10cSrcweir { 331cdf0e10cSrcweir ::osl::MutexGuard aGuard( m_aMutex ); 332cdf0e10cSrcweir 333cdf0e10cSrcweir if ( ePath < SvtPathOptions::PATH_COUNT ) 334cdf0e10cSrcweir { 335cdf0e10cSrcweir String aResult; 336cdf0e10cSrcweir OUString aNewValue; 337cdf0e10cSrcweir Any a; 338cdf0e10cSrcweir 339cdf0e10cSrcweir switch ( ePath ) 340cdf0e10cSrcweir { 341cdf0e10cSrcweir case SvtPathOptions::PATH_ADDIN: 342cdf0e10cSrcweir case SvtPathOptions::PATH_FILTER: 343cdf0e10cSrcweir case SvtPathOptions::PATH_HELP: 344cdf0e10cSrcweir case SvtPathOptions::PATH_MODULE: 345cdf0e10cSrcweir case SvtPathOptions::PATH_PLUGIN: 346cdf0e10cSrcweir case SvtPathOptions::PATH_STORAGE: 347cdf0e10cSrcweir { 348cdf0e10cSrcweir // These office paths have to be convert back to UCB-URL's 349cdf0e10cSrcweir utl::LocalFileHelper::ConvertPhysicalNameToURL( rNewPath, aResult ); 350cdf0e10cSrcweir aNewValue = aResult; 351cdf0e10cSrcweir } 352cdf0e10cSrcweir break; 353cdf0e10cSrcweir 354cdf0e10cSrcweir default: 355cdf0e10cSrcweir aNewValue = rNewPath; 356cdf0e10cSrcweir } 357cdf0e10cSrcweir 358*d941b70cSJohn Bampton // Resubstitution is done by the service itself using the substitution service 359cdf0e10cSrcweir a <<= aNewValue; 360cdf0e10cSrcweir try 361cdf0e10cSrcweir { 362cdf0e10cSrcweir m_xPathSettings->setFastPropertyValue( m_aMapEnumToPropHandle[ (sal_Int32)ePath], a ); 363cdf0e10cSrcweir } 364cdf0e10cSrcweir catch (const Exception&) 365cdf0e10cSrcweir { 366cdf0e10cSrcweir } 367cdf0e10cSrcweir } 368cdf0e10cSrcweir } 369cdf0e10cSrcweir 370cdf0e10cSrcweir //------------------------------------------------------------------------- 371cdf0e10cSrcweir 372cdf0e10cSrcweir OUString SvtPathOptions_Impl::ExpandMacros( const rtl::OUString& rPath ) const 373cdf0e10cSrcweir { 374cdf0e10cSrcweir ::rtl::OUString sExpanded( rPath ); 375cdf0e10cSrcweir 376cdf0e10cSrcweir const INetURLObject aParser( rPath ); 377cdf0e10cSrcweir if ( aParser.GetProtocol() == INET_PROT_VND_SUN_STAR_EXPAND ) 378cdf0e10cSrcweir sExpanded = m_xMacroExpander->expandMacros( aParser.GetURLPath( INetURLObject::DECODE_WITH_CHARSET ) ); 379cdf0e10cSrcweir 380cdf0e10cSrcweir return sExpanded; 381cdf0e10cSrcweir } 382cdf0e10cSrcweir 383cdf0e10cSrcweir //------------------------------------------------------------------------- 384cdf0e10cSrcweir 385cdf0e10cSrcweir OUString SvtPathOptions_Impl::UsePathVariables( const OUString& rPath ) const 386cdf0e10cSrcweir { 387cdf0e10cSrcweir return m_xSubstVariables->reSubstituteVariables( rPath ); 388cdf0e10cSrcweir } 389cdf0e10cSrcweir 390cdf0e10cSrcweir // ----------------------------------------------------------------------- 391cdf0e10cSrcweir 392cdf0e10cSrcweir OUString SvtPathOptions_Impl::SubstVar( const OUString& rVar ) const 393cdf0e10cSrcweir { 394cdf0e10cSrcweir // Don't work at parameter-string directly. Copy it. 395cdf0e10cSrcweir OUString aWorkText = rVar; 396cdf0e10cSrcweir 397cdf0e10cSrcweir // Convert the returned path to system path! 398cdf0e10cSrcweir sal_Bool bConvertLocal = sal_False; 399cdf0e10cSrcweir 40086e1cf34SPedro Giffuni // Search for first occur of "$(...". 401cdf0e10cSrcweir sal_Int32 nPosition = aWorkText.indexOf( SIGN_STARTVARIABLE ); // = first position of "$(" in string 402cdf0e10cSrcweir sal_Int32 nLength = 0; // = count of letters from "$(" to ")" in string 403cdf0e10cSrcweir 404cdf0e10cSrcweir // Have we found any variable like "$(...)"? 405cdf0e10cSrcweir if ( nPosition != STRPOS_NOTFOUND ) 406cdf0e10cSrcweir { 407cdf0e10cSrcweir // Yes; Get length of found variable. 408cdf0e10cSrcweir // If no ")" was found - nLength is set to 0 by default! see before. 409cdf0e10cSrcweir sal_Int32 nEndPosition = aWorkText.indexOf( SIGN_ENDVARIABLE, nPosition ); 410cdf0e10cSrcweir if ( nEndPosition != STRPOS_NOTFOUND ) 411cdf0e10cSrcweir nLength = nEndPosition - nPosition + 1; 412cdf0e10cSrcweir } 413cdf0e10cSrcweir 414cdf0e10cSrcweir // Is there another path variable? 415cdf0e10cSrcweir while ( ( nPosition != STRPOS_NOTFOUND ) && ( nLength > 0 ) ) 416cdf0e10cSrcweir { 417cdf0e10cSrcweir // YES; Get the next variable for replace. 418cdf0e10cSrcweir OUString aReplacement; 419cdf0e10cSrcweir OUString aSubString = aWorkText.copy( nPosition, nLength ); 420cdf0e10cSrcweir aSubString = aSubString.toAsciiLowerCase(); 421cdf0e10cSrcweir 422cdf0e10cSrcweir // Look for special variable that needs a system path. 423cdf0e10cSrcweir VarNameToEnumMap::const_iterator pIter = m_aMapVarNamesToEnum.find( aSubString ); 424cdf0e10cSrcweir if ( pIter != m_aMapVarNamesToEnum.end() ) 425cdf0e10cSrcweir bConvertLocal = sal_True; 426cdf0e10cSrcweir 427cdf0e10cSrcweir nPosition += nLength; 428cdf0e10cSrcweir 429cdf0e10cSrcweir // We must control index in string before call something at OUString! 430cdf0e10cSrcweir // The OUString-implementation don't do it for us :-( but the result is not defined otherwise. 431cdf0e10cSrcweir if ( nPosition + 1 > aWorkText.getLength() ) 432cdf0e10cSrcweir { 433cdf0e10cSrcweir // Position is out of range. Break loop! 434cdf0e10cSrcweir nPosition = STRPOS_NOTFOUND; 435cdf0e10cSrcweir nLength = 0; 436cdf0e10cSrcweir } 437cdf0e10cSrcweir else 438cdf0e10cSrcweir { 439cdf0e10cSrcweir // Else; Position is valid. Search for next variable. 440cdf0e10cSrcweir nPosition = aWorkText.indexOf( SIGN_STARTVARIABLE, nPosition ); 441cdf0e10cSrcweir // Have we found any variable like "$(...)"? 442cdf0e10cSrcweir if ( nPosition != STRPOS_NOTFOUND ) 443cdf0e10cSrcweir { 444cdf0e10cSrcweir // Yes; Get length of found variable. If no ")" was found - nLength must set to 0! 445cdf0e10cSrcweir nLength = 0; 446cdf0e10cSrcweir sal_Int32 nEndPosition = aWorkText.indexOf( SIGN_ENDVARIABLE, nPosition ); 447cdf0e10cSrcweir if ( nEndPosition != STRPOS_NOTFOUND ) 448cdf0e10cSrcweir nLength = nEndPosition - nPosition + 1; 449cdf0e10cSrcweir } 450cdf0e10cSrcweir } 451cdf0e10cSrcweir } 452cdf0e10cSrcweir 453cdf0e10cSrcweir aWorkText = m_xSubstVariables->substituteVariables( rVar, sal_False ); 454cdf0e10cSrcweir 455cdf0e10cSrcweir if ( bConvertLocal ) 456cdf0e10cSrcweir { 457cdf0e10cSrcweir // Convert the URL to a system path for special path variables 458cdf0e10cSrcweir String aReturn; 459cdf0e10cSrcweir utl::LocalFileHelper::ConvertURLToPhysicalName( aWorkText, aReturn ); 460cdf0e10cSrcweir return aReturn; 461cdf0e10cSrcweir } 462cdf0e10cSrcweir 463cdf0e10cSrcweir return aWorkText; 464cdf0e10cSrcweir } 465cdf0e10cSrcweir 466cdf0e10cSrcweir // ----------------------------------------------------------------------- 467cdf0e10cSrcweir 468cdf0e10cSrcweir SvtPathOptions_Impl::SvtPathOptions_Impl() : 469cdf0e10cSrcweir m_aPathArray( (sal_Int32)SvtPathOptions::PATH_COUNT ) 470cdf0e10cSrcweir { 471cdf0e10cSrcweir Reference< XMultiServiceFactory > xSMgr = comphelper::getProcessServiceFactory(); 472cdf0e10cSrcweir 473cdf0e10cSrcweir // Create necessary services 474cdf0e10cSrcweir m_xPathSettings = Reference< XFastPropertySet >( xSMgr->createInstance( 475cdf0e10cSrcweir ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( 476cdf0e10cSrcweir "com.sun.star.util.PathSettings" ))), 477cdf0e10cSrcweir UNO_QUERY ); 478cdf0e10cSrcweir if ( !m_xPathSettings.is() ) 479cdf0e10cSrcweir { 48086e1cf34SPedro Giffuni // #112719#: check for existence 481cdf0e10cSrcweir DBG_ERROR( "SvtPathOptions_Impl::SvtPathOptions_Impl(): #112719# happened again!" ); 482cdf0e10cSrcweir throw RuntimeException( 483cdf0e10cSrcweir ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "Service com.sun.star.util.PathSettings cannot be created" )), 484cdf0e10cSrcweir Reference< XInterface >() ); 485cdf0e10cSrcweir } 486cdf0e10cSrcweir 487cdf0e10cSrcweir ::comphelper::ComponentContext aContext( xSMgr ); 488cdf0e10cSrcweir m_xSubstVariables.set( aContext.createComponent( "com.sun.star.util.PathSubstitution" ), UNO_QUERY_THROW ); 489cdf0e10cSrcweir m_xMacroExpander.set( aContext.getSingleton( "com.sun.star.util.theMacroExpander" ), UNO_QUERY_THROW ); 490cdf0e10cSrcweir 491cdf0e10cSrcweir // Create temporary hash map to have a mapping between property names and property handles 492cdf0e10cSrcweir Reference< XPropertySet > xPropertySet = Reference< XPropertySet >( m_xPathSettings, UNO_QUERY ); 493cdf0e10cSrcweir Reference< XPropertySetInfo > xPropSetInfo = xPropertySet->getPropertySetInfo(); 494cdf0e10cSrcweir Sequence< Property > aPathPropSeq = xPropSetInfo->getProperties(); 495cdf0e10cSrcweir 496cdf0e10cSrcweir NameToHandleMap aTempHashMap; 497cdf0e10cSrcweir for ( sal_Int32 n = 0; n < aPathPropSeq.getLength(); n++ ) 498cdf0e10cSrcweir { 499cdf0e10cSrcweir const com::sun::star::beans::Property& aProperty = aPathPropSeq[n]; 500cdf0e10cSrcweir aTempHashMap.insert( NameToHandleMap::value_type( aProperty.Name, aProperty.Handle )); 501cdf0e10cSrcweir } 502cdf0e10cSrcweir 503cdf0e10cSrcweir // Create mapping between internal enum (SvtPathOptions::Pathes) and property handle 504cdf0e10cSrcweir sal_Int32 nCount = sizeof( aPropNames ) / sizeof( PropertyStruct ); 505cdf0e10cSrcweir sal_Int32 i; 506cdf0e10cSrcweir for ( i = 0; i < nCount; i++ ) 507cdf0e10cSrcweir { 508cdf0e10cSrcweir NameToHandleMap::const_iterator pIter = 509cdf0e10cSrcweir aTempHashMap.find( rtl::OUString::createFromAscii( aPropNames[i].pPropName )); 510cdf0e10cSrcweir 511cdf0e10cSrcweir if ( pIter != aTempHashMap.end() ) 512cdf0e10cSrcweir { 513cdf0e10cSrcweir sal_Int32 nHandle = pIter->second; 514cdf0e10cSrcweir sal_Int32 nEnum = aPropNames[i].ePath; 515cdf0e10cSrcweir m_aMapEnumToPropHandle.insert( EnumToHandleMap::value_type( nEnum, nHandle )); 516cdf0e10cSrcweir } 517cdf0e10cSrcweir } 518cdf0e10cSrcweir 519cdf0e10cSrcweir // Create hash map for path variables that need a system path as a return value! 520cdf0e10cSrcweir nCount = sizeof( aVarNameAttribute ) / sizeof( VarNameAttribute ); 521cdf0e10cSrcweir for ( i = 0; i < nCount; i++ ) 522cdf0e10cSrcweir { 523cdf0e10cSrcweir m_aMapVarNamesToEnum.insert( VarNameToEnumMap::value_type( 524cdf0e10cSrcweir OUString::createFromAscii( aVarNameAttribute[i].pVarName ), 525cdf0e10cSrcweir aVarNameAttribute[i].eVarProperty )); 526cdf0e10cSrcweir } 527cdf0e10cSrcweir 528cdf0e10cSrcweir // Set language type! 529cdf0e10cSrcweir Any aLocale = ConfigManager::GetConfigManager()->GetDirectConfigProperty( ConfigManager::LOCALE ); 530cdf0e10cSrcweir OUString aLocaleStr; 531cdf0e10cSrcweir if ( aLocale >>= aLocaleStr ) 532cdf0e10cSrcweir { 533cdf0e10cSrcweir sal_Int32 nIndex = 0; 534cdf0e10cSrcweir m_aLocale.Language = aLocaleStr.getToken(0, '-', nIndex ); 535cdf0e10cSrcweir m_aLocale.Country = aLocaleStr.getToken(0, '-', nIndex ); 536cdf0e10cSrcweir m_aLocale.Variant = aLocaleStr.getToken(0, '-', nIndex ); 537cdf0e10cSrcweir } 538cdf0e10cSrcweir else 539cdf0e10cSrcweir { 540cdf0e10cSrcweir DBG_ERRORFILE( "wrong any type" ); 541cdf0e10cSrcweir m_aLocale.Language = OStringToOUString(OString("en"), RTL_TEXTENCODING_UTF8); 542cdf0e10cSrcweir m_aLocale.Country = OStringToOUString(OString("US"), RTL_TEXTENCODING_UTF8); 543cdf0e10cSrcweir m_aLocale.Variant = OStringToOUString(OString(""), RTL_TEXTENCODING_UTF8); 544cdf0e10cSrcweir } 545cdf0e10cSrcweir } 546cdf0e10cSrcweir 547cdf0e10cSrcweir // ----------------------------------------------------------------------- 548cdf0e10cSrcweir 549cdf0e10cSrcweir // class SvtPathOptions -------------------------------------------------- 550cdf0e10cSrcweir 551cdf0e10cSrcweir namespace { struct lclMutex : public rtl::Static< ::osl::Mutex, lclMutex > {}; } 552cdf0e10cSrcweir 553cdf0e10cSrcweir SvtPathOptions::SvtPathOptions() 554cdf0e10cSrcweir { 555cdf0e10cSrcweir // Global access, must be guarded (multithreading) 556cdf0e10cSrcweir ::osl::MutexGuard aGuard( lclMutex::get() ); 557cdf0e10cSrcweir if ( !pOptions ) 558cdf0e10cSrcweir { 559cdf0e10cSrcweir pOptions = new SvtPathOptions_Impl; 560cdf0e10cSrcweir ItemHolder1::holdConfigItem(E_PATHOPTIONS); 561cdf0e10cSrcweir } 562cdf0e10cSrcweir ++nRefCount; 563cdf0e10cSrcweir pImp = pOptions; 564cdf0e10cSrcweir } 565cdf0e10cSrcweir 566cdf0e10cSrcweir // ----------------------------------------------------------------------- 567cdf0e10cSrcweir 568cdf0e10cSrcweir SvtPathOptions::~SvtPathOptions() 569cdf0e10cSrcweir { 570cdf0e10cSrcweir // Global access, must be guarded (multithreading) 571cdf0e10cSrcweir ::osl::MutexGuard aGuard( lclMutex::get() ); 572cdf0e10cSrcweir if ( !--nRefCount ) 573cdf0e10cSrcweir { 574cdf0e10cSrcweir DELETEZ( pOptions ); 575cdf0e10cSrcweir } 576cdf0e10cSrcweir } 577cdf0e10cSrcweir 578cdf0e10cSrcweir // ----------------------------------------------------------------------- 579cdf0e10cSrcweir 580cdf0e10cSrcweir const String& SvtPathOptions::GetAddinPath() const 581cdf0e10cSrcweir { 582cdf0e10cSrcweir return pImp->GetAddinPath(); 583cdf0e10cSrcweir } 584cdf0e10cSrcweir 585cdf0e10cSrcweir // ----------------------------------------------------------------------- 586cdf0e10cSrcweir 587cdf0e10cSrcweir const String& SvtPathOptions::GetAutoCorrectPath() const 588cdf0e10cSrcweir { 589cdf0e10cSrcweir return pImp->GetAutoCorrectPath(); 590cdf0e10cSrcweir } 591cdf0e10cSrcweir 592cdf0e10cSrcweir // ----------------------------------------------------------------------- 593cdf0e10cSrcweir 594cdf0e10cSrcweir const String& SvtPathOptions::GetAutoTextPath() const 595cdf0e10cSrcweir { 596cdf0e10cSrcweir return pImp->GetAutoTextPath(); 597cdf0e10cSrcweir } 598cdf0e10cSrcweir 599cdf0e10cSrcweir // ----------------------------------------------------------------------- 600cdf0e10cSrcweir 601cdf0e10cSrcweir const String& SvtPathOptions::GetBackupPath() const 602cdf0e10cSrcweir { 603cdf0e10cSrcweir return pImp->GetBackupPath(); 604cdf0e10cSrcweir } 605cdf0e10cSrcweir 606cdf0e10cSrcweir // ----------------------------------------------------------------------- 607cdf0e10cSrcweir 608cdf0e10cSrcweir const String& SvtPathOptions::GetBasicPath() const 609cdf0e10cSrcweir { 610cdf0e10cSrcweir return pImp->GetBasicPath(); 611cdf0e10cSrcweir } 612cdf0e10cSrcweir 613cdf0e10cSrcweir // ----------------------------------------------------------------------- 614cdf0e10cSrcweir 615cdf0e10cSrcweir const String& SvtPathOptions::GetBitmapPath() const 616cdf0e10cSrcweir { 617cdf0e10cSrcweir return pImp->GetBitmapPath(); 618cdf0e10cSrcweir } 619cdf0e10cSrcweir 620cdf0e10cSrcweir // ----------------------------------------------------------------------- 621cdf0e10cSrcweir 622cdf0e10cSrcweir const String& SvtPathOptions::GetConfigPath() const 623cdf0e10cSrcweir { 624cdf0e10cSrcweir return pImp->GetConfigPath(); 625cdf0e10cSrcweir } 626cdf0e10cSrcweir 627cdf0e10cSrcweir // ----------------------------------------------------------------------- 628cdf0e10cSrcweir 629cdf0e10cSrcweir const String& SvtPathOptions::GetDictionaryPath() const 630cdf0e10cSrcweir { 631cdf0e10cSrcweir return pImp->GetDictionaryPath(); 632cdf0e10cSrcweir } 633cdf0e10cSrcweir 634cdf0e10cSrcweir // ----------------------------------------------------------------------- 635cdf0e10cSrcweir 636cdf0e10cSrcweir const String& SvtPathOptions::GetFavoritesPath() const 637cdf0e10cSrcweir { 638cdf0e10cSrcweir return pImp->GetFavoritesPath(); 639cdf0e10cSrcweir } 640cdf0e10cSrcweir 641cdf0e10cSrcweir // ----------------------------------------------------------------------- 642cdf0e10cSrcweir 643cdf0e10cSrcweir const String& SvtPathOptions::GetFilterPath() const 644cdf0e10cSrcweir { 645cdf0e10cSrcweir return pImp->GetFilterPath(); 646cdf0e10cSrcweir } 647cdf0e10cSrcweir 648cdf0e10cSrcweir // ----------------------------------------------------------------------- 649cdf0e10cSrcweir 650cdf0e10cSrcweir const String& SvtPathOptions::GetGalleryPath() const 651cdf0e10cSrcweir { 652cdf0e10cSrcweir return pImp->GetGalleryPath(); 653cdf0e10cSrcweir } 654cdf0e10cSrcweir 655cdf0e10cSrcweir // ----------------------------------------------------------------------- 656cdf0e10cSrcweir 657cdf0e10cSrcweir const String& SvtPathOptions::GetGraphicPath() const 658cdf0e10cSrcweir { 659cdf0e10cSrcweir return pImp->GetGraphicPath(); 660cdf0e10cSrcweir } 661cdf0e10cSrcweir 662cdf0e10cSrcweir // ----------------------------------------------------------------------- 663cdf0e10cSrcweir 664cdf0e10cSrcweir const String& SvtPathOptions::GetHelpPath() const 665cdf0e10cSrcweir { 666cdf0e10cSrcweir return pImp->GetHelpPath(); 667cdf0e10cSrcweir } 668cdf0e10cSrcweir 669cdf0e10cSrcweir // ----------------------------------------------------------------------- 670cdf0e10cSrcweir 671cdf0e10cSrcweir const String& SvtPathOptions::GetLinguisticPath() const 672cdf0e10cSrcweir { 673cdf0e10cSrcweir return pImp->GetLinguisticPath(); 674cdf0e10cSrcweir } 675cdf0e10cSrcweir 676cdf0e10cSrcweir // ----------------------------------------------------------------------- 677cdf0e10cSrcweir 678cdf0e10cSrcweir const String& SvtPathOptions::GetFingerprintPath() const 679cdf0e10cSrcweir { 680cdf0e10cSrcweir return pImp->GetFingerprintPath(); 681cdf0e10cSrcweir } 682cdf0e10cSrcweir 683cdf0e10cSrcweir // ----------------------------------------------------------------------- 684cdf0e10cSrcweir 685cdf0e10cSrcweir const String& SvtPathOptions::GetModulePath() const 686cdf0e10cSrcweir { 687cdf0e10cSrcweir return pImp->GetModulePath(); 688cdf0e10cSrcweir } 689cdf0e10cSrcweir 690cdf0e10cSrcweir // ----------------------------------------------------------------------- 691cdf0e10cSrcweir 692cdf0e10cSrcweir const String& SvtPathOptions::GetPalettePath() const 693cdf0e10cSrcweir { 694cdf0e10cSrcweir return pImp->GetPalettePath(); 695cdf0e10cSrcweir } 696cdf0e10cSrcweir 697cdf0e10cSrcweir // ----------------------------------------------------------------------- 698cdf0e10cSrcweir 699cdf0e10cSrcweir const String& SvtPathOptions::GetPluginPath() const 700cdf0e10cSrcweir { 701cdf0e10cSrcweir return pImp->GetPluginPath(); 702cdf0e10cSrcweir } 703cdf0e10cSrcweir 704cdf0e10cSrcweir // ----------------------------------------------------------------------- 705cdf0e10cSrcweir 706cdf0e10cSrcweir const String& SvtPathOptions::GetStoragePath() const 707cdf0e10cSrcweir { 708cdf0e10cSrcweir return pImp->GetStoragePath(); 709cdf0e10cSrcweir } 710cdf0e10cSrcweir 711cdf0e10cSrcweir // ----------------------------------------------------------------------- 712cdf0e10cSrcweir 713cdf0e10cSrcweir const String& SvtPathOptions::GetTempPath() const 714cdf0e10cSrcweir { 715cdf0e10cSrcweir return pImp->GetTempPath(); 716cdf0e10cSrcweir } 717cdf0e10cSrcweir 718cdf0e10cSrcweir // ----------------------------------------------------------------------- 719cdf0e10cSrcweir 720cdf0e10cSrcweir const String& SvtPathOptions::GetTemplatePath() const 721cdf0e10cSrcweir { 722cdf0e10cSrcweir return pImp->GetTemplatePath(); 723cdf0e10cSrcweir } 724cdf0e10cSrcweir 725cdf0e10cSrcweir // ----------------------------------------------------------------------- 726cdf0e10cSrcweir 727cdf0e10cSrcweir const String& SvtPathOptions::GetUserConfigPath() const 728cdf0e10cSrcweir { 729cdf0e10cSrcweir return pImp->GetUserConfigPath(); 730cdf0e10cSrcweir } 731cdf0e10cSrcweir 732cdf0e10cSrcweir const String& SvtPathOptions::GetUIConfigPath() const 733cdf0e10cSrcweir { 734cdf0e10cSrcweir return pImp->GetUIConfigPath(); 735cdf0e10cSrcweir } 736cdf0e10cSrcweir 737cdf0e10cSrcweir // ----------------------------------------------------------------------- 738cdf0e10cSrcweir 739cdf0e10cSrcweir const String& SvtPathOptions::GetWorkPath() const 740cdf0e10cSrcweir { 741cdf0e10cSrcweir return pImp->GetWorkPath(); 742cdf0e10cSrcweir } 743cdf0e10cSrcweir 744cdf0e10cSrcweir // ----------------------------------------------------------------------- 745cdf0e10cSrcweir 746cdf0e10cSrcweir void SvtPathOptions::SetAddinPath( const String& rPath ) 747cdf0e10cSrcweir { 748cdf0e10cSrcweir pImp->SetAddinPath( rPath ); 749cdf0e10cSrcweir } 750cdf0e10cSrcweir 751cdf0e10cSrcweir // ----------------------------------------------------------------------- 752cdf0e10cSrcweir 753cdf0e10cSrcweir void SvtPathOptions::SetAutoCorrectPath( const String& rPath ) 754cdf0e10cSrcweir { 755cdf0e10cSrcweir pImp->SetAutoCorrectPath( rPath ); 756cdf0e10cSrcweir } 757cdf0e10cSrcweir 758cdf0e10cSrcweir // ----------------------------------------------------------------------- 759cdf0e10cSrcweir 760cdf0e10cSrcweir void SvtPathOptions::SetAutoTextPath( const String& rPath ) 761cdf0e10cSrcweir { 762cdf0e10cSrcweir pImp->SetAutoTextPath( rPath ); 763cdf0e10cSrcweir } 764cdf0e10cSrcweir 765cdf0e10cSrcweir // ----------------------------------------------------------------------- 766cdf0e10cSrcweir 767cdf0e10cSrcweir void SvtPathOptions::SetBackupPath( const String& rPath ) 768cdf0e10cSrcweir { 769cdf0e10cSrcweir pImp->SetBackupPath( rPath ); 770cdf0e10cSrcweir } 771cdf0e10cSrcweir 772cdf0e10cSrcweir // ----------------------------------------------------------------------- 773cdf0e10cSrcweir 774cdf0e10cSrcweir void SvtPathOptions::SetBasicPath( const String& rPath ) 775cdf0e10cSrcweir { 776cdf0e10cSrcweir pImp->SetBasicPath( rPath ); 777cdf0e10cSrcweir } 778cdf0e10cSrcweir 779cdf0e10cSrcweir // ----------------------------------------------------------------------- 780cdf0e10cSrcweir 781cdf0e10cSrcweir void SvtPathOptions::SetBitmapPath( const String& rPath ) 782cdf0e10cSrcweir { 783cdf0e10cSrcweir pImp->SetBitmapPath( rPath ); 784cdf0e10cSrcweir } 785cdf0e10cSrcweir 786cdf0e10cSrcweir // ----------------------------------------------------------------------- 787cdf0e10cSrcweir 788cdf0e10cSrcweir void SvtPathOptions::SetConfigPath( const String& rPath ) 789cdf0e10cSrcweir { 790cdf0e10cSrcweir pImp->SetConfigPath( rPath ); 791cdf0e10cSrcweir } 792cdf0e10cSrcweir 793cdf0e10cSrcweir // ----------------------------------------------------------------------- 794cdf0e10cSrcweir 795cdf0e10cSrcweir void SvtPathOptions::SetDictionaryPath( const String& rPath ) 796cdf0e10cSrcweir { 797cdf0e10cSrcweir pImp->SetDictionaryPath( rPath ); 798cdf0e10cSrcweir } 799cdf0e10cSrcweir 800cdf0e10cSrcweir // ----------------------------------------------------------------------- 801cdf0e10cSrcweir 802cdf0e10cSrcweir void SvtPathOptions::SetFavoritesPath( const String& rPath ) 803cdf0e10cSrcweir { 804cdf0e10cSrcweir pImp->SetFavoritesPath( rPath ); 805cdf0e10cSrcweir } 806cdf0e10cSrcweir 807cdf0e10cSrcweir // ----------------------------------------------------------------------- 808cdf0e10cSrcweir 809cdf0e10cSrcweir void SvtPathOptions::SetFilterPath( const String& rPath ) 810cdf0e10cSrcweir { 811cdf0e10cSrcweir pImp->SetFilterPath( rPath ); 812cdf0e10cSrcweir } 813cdf0e10cSrcweir 814cdf0e10cSrcweir // ----------------------------------------------------------------------- 815cdf0e10cSrcweir 816cdf0e10cSrcweir void SvtPathOptions::SetGalleryPath( const String& rPath ) 817cdf0e10cSrcweir { 818cdf0e10cSrcweir pImp->SetGalleryPath( rPath ); 819cdf0e10cSrcweir } 820cdf0e10cSrcweir 821cdf0e10cSrcweir // ----------------------------------------------------------------------- 822cdf0e10cSrcweir 823cdf0e10cSrcweir void SvtPathOptions::SetGraphicPath( const String& rPath ) 824cdf0e10cSrcweir { 825cdf0e10cSrcweir pImp->SetGraphicPath( rPath ); 826cdf0e10cSrcweir } 827cdf0e10cSrcweir 828cdf0e10cSrcweir // ----------------------------------------------------------------------- 829cdf0e10cSrcweir 830cdf0e10cSrcweir void SvtPathOptions::SetHelpPath( const String& rPath ) 831cdf0e10cSrcweir { 832cdf0e10cSrcweir pImp->SetHelpPath( rPath ); 833cdf0e10cSrcweir } 834cdf0e10cSrcweir 835cdf0e10cSrcweir // ----------------------------------------------------------------------- 836cdf0e10cSrcweir 837cdf0e10cSrcweir void SvtPathOptions::SetLinguisticPath( const String& rPath ) 838cdf0e10cSrcweir { 839cdf0e10cSrcweir pImp->SetLinguisticPath( rPath ); 840cdf0e10cSrcweir } 841cdf0e10cSrcweir 842cdf0e10cSrcweir // ----------------------------------------------------------------------- 843cdf0e10cSrcweir 844cdf0e10cSrcweir void SvtPathOptions::SetModulePath( const String& rPath ) 845cdf0e10cSrcweir { 846cdf0e10cSrcweir pImp->SetModulePath( rPath ); 847cdf0e10cSrcweir } 848cdf0e10cSrcweir 849cdf0e10cSrcweir // ----------------------------------------------------------------------- 850cdf0e10cSrcweir 851cdf0e10cSrcweir void SvtPathOptions::SetPalettePath( const String& rPath ) 852cdf0e10cSrcweir { 853cdf0e10cSrcweir pImp->SetPalettePath( rPath ); 854cdf0e10cSrcweir } 855cdf0e10cSrcweir 856cdf0e10cSrcweir // ----------------------------------------------------------------------- 857cdf0e10cSrcweir 858cdf0e10cSrcweir void SvtPathOptions::SetPluginPath( const String& rPath ) 859cdf0e10cSrcweir { 860cdf0e10cSrcweir pImp->SetPluginPath( rPath ); 861cdf0e10cSrcweir } 862cdf0e10cSrcweir 863cdf0e10cSrcweir // ----------------------------------------------------------------------- 864cdf0e10cSrcweir 865cdf0e10cSrcweir void SvtPathOptions::SetStoragePath( const String& rPath ) 866cdf0e10cSrcweir { 867cdf0e10cSrcweir pImp->SetStoragePath( rPath ); 868cdf0e10cSrcweir } 869cdf0e10cSrcweir 870cdf0e10cSrcweir // ----------------------------------------------------------------------- 871cdf0e10cSrcweir 872cdf0e10cSrcweir void SvtPathOptions::SetTempPath( const String& rPath ) 873cdf0e10cSrcweir { 874cdf0e10cSrcweir pImp->SetTempPath( rPath ); 875cdf0e10cSrcweir } 876cdf0e10cSrcweir 877cdf0e10cSrcweir // ----------------------------------------------------------------------- 878cdf0e10cSrcweir 879cdf0e10cSrcweir void SvtPathOptions::SetTemplatePath( const String& rPath ) 880cdf0e10cSrcweir { 881cdf0e10cSrcweir pImp->SetTemplatePath( rPath ); 882cdf0e10cSrcweir } 883cdf0e10cSrcweir 884cdf0e10cSrcweir // ----------------------------------------------------------------------- 885cdf0e10cSrcweir 886cdf0e10cSrcweir void SvtPathOptions::SetUserConfigPath( const String& rPath ) 887cdf0e10cSrcweir { 888cdf0e10cSrcweir pImp->SetUserConfigPath( rPath ); 889cdf0e10cSrcweir } 890cdf0e10cSrcweir 891cdf0e10cSrcweir // ----------------------------------------------------------------------- 892cdf0e10cSrcweir 893cdf0e10cSrcweir void SvtPathOptions::SetWorkPath( const String& rPath ) 894cdf0e10cSrcweir { 895cdf0e10cSrcweir pImp->SetWorkPath( rPath ); 896cdf0e10cSrcweir } 897cdf0e10cSrcweir 898cdf0e10cSrcweir // ----------------------------------------------------------------------- 899cdf0e10cSrcweir 900cdf0e10cSrcweir String SvtPathOptions::SubstituteVariable( const String& rVar ) const 901cdf0e10cSrcweir { 902cdf0e10cSrcweir String aRet = pImp->SubstVar( rVar ); 903cdf0e10cSrcweir return aRet; 904cdf0e10cSrcweir } 905cdf0e10cSrcweir 906cdf0e10cSrcweir // ----------------------------------------------------------------------- 907cdf0e10cSrcweir 908cdf0e10cSrcweir String SvtPathOptions::ExpandMacros( const String& rPath ) const 909cdf0e10cSrcweir { 910cdf0e10cSrcweir return pImp->ExpandMacros( rPath ); 911cdf0e10cSrcweir } 912cdf0e10cSrcweir 913cdf0e10cSrcweir // ----------------------------------------------------------------------- 914cdf0e10cSrcweir 915cdf0e10cSrcweir String SvtPathOptions::UseVariable( const String& rPath ) const 916cdf0e10cSrcweir { 917cdf0e10cSrcweir String aRet = pImp->UsePathVariables( rPath ); 918cdf0e10cSrcweir return aRet; 919cdf0e10cSrcweir } 920cdf0e10cSrcweir 921cdf0e10cSrcweir // ----------------------------------------------------------------------- 922cdf0e10cSrcweir 923cdf0e10cSrcweir sal_Bool SvtPathOptions::SearchFile( String& rIniFile, Pathes ePath ) 924cdf0e10cSrcweir { 925cdf0e10cSrcweir // check parameter: empty inifile name? 926cdf0e10cSrcweir if ( !rIniFile.Len() ) 927cdf0e10cSrcweir { 928cdf0e10cSrcweir DBG_ERRORFILE( "SvtPathOptions::SearchFile(): invalid parameter" ); 929cdf0e10cSrcweir return sal_False; 930cdf0e10cSrcweir } 931cdf0e10cSrcweir 932cdf0e10cSrcweir String aIniFile = pImp->SubstVar( rIniFile ); 933cdf0e10cSrcweir sal_Bool bRet = sal_False; 934cdf0e10cSrcweir 935cdf0e10cSrcweir switch ( ePath ) 936cdf0e10cSrcweir { 937cdf0e10cSrcweir case PATH_USERCONFIG: 938cdf0e10cSrcweir { 939cdf0e10cSrcweir // path is a URL 940cdf0e10cSrcweir bRet = sal_True; 941cdf0e10cSrcweir INetURLObject aObj( GetUserConfigPath() ); 942cdf0e10cSrcweir xub_StrLen i, nCount = aIniFile.GetTokenCount( '/' ); 943cdf0e10cSrcweir for ( i = 0; i < nCount; ++i ) 944cdf0e10cSrcweir aObj.insertName( aIniFile.GetToken( i, '/' ) ); 945cdf0e10cSrcweir 946cdf0e10cSrcweir if ( !::utl::UCBContentHelper::Exists( aObj.GetMainURL( INetURLObject::NO_DECODE ) ) ) 947cdf0e10cSrcweir { 948cdf0e10cSrcweir aObj.SetSmartURL( GetConfigPath() ); 949cdf0e10cSrcweir aObj.insertName( aIniFile ); 950cdf0e10cSrcweir bRet = ::utl::UCBContentHelper::Exists( aObj.GetMainURL( INetURLObject::NO_DECODE ) ); 951cdf0e10cSrcweir } 952cdf0e10cSrcweir 953cdf0e10cSrcweir if ( bRet ) 954cdf0e10cSrcweir rIniFile = aObj.GetMainURL( INetURLObject::NO_DECODE ); 955cdf0e10cSrcweir 956cdf0e10cSrcweir break; 957cdf0e10cSrcweir } 958cdf0e10cSrcweir 959cdf0e10cSrcweir default: 960cdf0e10cSrcweir { 961cdf0e10cSrcweir String aPath; 962cdf0e10cSrcweir switch ( ePath ) 963cdf0e10cSrcweir { 964cdf0e10cSrcweir case PATH_ADDIN: aPath = GetAddinPath(); break; 965cdf0e10cSrcweir case PATH_AUTOCORRECT: aPath = GetAutoCorrectPath(); break; 966cdf0e10cSrcweir case PATH_AUTOTEXT: aPath = GetAutoTextPath(); break; 967cdf0e10cSrcweir case PATH_BACKUP: aPath = GetBackupPath(); break; 968cdf0e10cSrcweir case PATH_BASIC: aPath = GetBasicPath(); break; 969cdf0e10cSrcweir case PATH_BITMAP: aPath = GetBitmapPath(); break; 970cdf0e10cSrcweir case PATH_CONFIG: aPath = GetConfigPath(); break; 971cdf0e10cSrcweir case PATH_DICTIONARY: aPath = GetDictionaryPath(); break; 972cdf0e10cSrcweir case PATH_FAVORITES: aPath = GetFavoritesPath(); break; 973cdf0e10cSrcweir case PATH_FILTER: aPath = GetFilterPath(); break; 974cdf0e10cSrcweir case PATH_GALLERY: aPath = GetGalleryPath(); break; 975cdf0e10cSrcweir case PATH_GRAPHIC: aPath = GetGraphicPath(); break; 976cdf0e10cSrcweir case PATH_HELP: aPath = GetHelpPath(); break; 977cdf0e10cSrcweir case PATH_LINGUISTIC: aPath = GetLinguisticPath(); break; 978cdf0e10cSrcweir case PATH_MODULE: aPath = GetModulePath(); break; 979cdf0e10cSrcweir case PATH_PALETTE: aPath = GetPalettePath(); break; 980cdf0e10cSrcweir case PATH_PLUGIN: aPath = GetPluginPath(); break; 981cdf0e10cSrcweir case PATH_STORAGE: aPath = GetStoragePath(); break; 982cdf0e10cSrcweir case PATH_TEMP: aPath = GetTempPath(); break; 983cdf0e10cSrcweir case PATH_TEMPLATE: aPath = GetTemplatePath(); break; 984cdf0e10cSrcweir case PATH_WORK: aPath = GetWorkPath(); break; 985cdf0e10cSrcweir case PATH_UICONFIG: aPath = GetUIConfigPath(); break; 986cdf0e10cSrcweir case PATH_FINGERPRINT: aPath = GetFingerprintPath(); break; 987cdf0e10cSrcweir case PATH_USERCONFIG:/*-Wall???*/ break; 988cdf0e10cSrcweir case PATH_COUNT: /*-Wall???*/ break; 989cdf0e10cSrcweir } 990cdf0e10cSrcweir 991cdf0e10cSrcweir sal_uInt16 j, nIdx = 0, nTokenCount = aPath.GetTokenCount( SEARCHPATH_DELIMITER ); 992cdf0e10cSrcweir for ( j = 0; j < nTokenCount; ++j ) 993cdf0e10cSrcweir { 994cdf0e10cSrcweir sal_Bool bIsURL = sal_True; 995cdf0e10cSrcweir String aPathToken = aPath.GetToken( 0, SEARCHPATH_DELIMITER, nIdx ); 996cdf0e10cSrcweir INetURLObject aObj( aPathToken ); 997cdf0e10cSrcweir if ( aObj.HasError() ) 998cdf0e10cSrcweir { 999cdf0e10cSrcweir bIsURL = sal_False; 1000cdf0e10cSrcweir String aURL; 1001cdf0e10cSrcweir if ( LocalFileHelper::ConvertPhysicalNameToURL( aPathToken, aURL ) ) 1002cdf0e10cSrcweir aObj.SetURL( aURL ); 1003cdf0e10cSrcweir } 1004cdf0e10cSrcweir if ( aObj.GetProtocol() == INET_PROT_VND_SUN_STAR_EXPAND ) 1005cdf0e10cSrcweir { 1006cdf0e10cSrcweir ::comphelper::ComponentContext aContext( ::comphelper::getProcessServiceFactory() ); 1007cdf0e10cSrcweir Reference< XMacroExpander > xMacroExpander( aContext.getSingleton( "com.sun.star.util.theMacroExpander" ), UNO_QUERY ); 1008cdf0e10cSrcweir OSL_ENSURE( xMacroExpander.is(), "SvtPathOptions::SearchFile: unable to access the MacroExpander singleton!" ); 1009cdf0e10cSrcweir if ( xMacroExpander.is() ) 1010cdf0e10cSrcweir { 1011cdf0e10cSrcweir const ::rtl::OUString sExpandedPath = xMacroExpander->expandMacros( aObj.GetURLPath( INetURLObject::DECODE_WITH_CHARSET ) ); 1012cdf0e10cSrcweir aObj.SetURL( sExpandedPath ); 1013cdf0e10cSrcweir } 1014cdf0e10cSrcweir } 1015cdf0e10cSrcweir 1016cdf0e10cSrcweir xub_StrLen i, nCount = aIniFile.GetTokenCount( '/' ); 1017cdf0e10cSrcweir for ( i = 0; i < nCount; ++i ) 1018cdf0e10cSrcweir aObj.insertName( aIniFile.GetToken( i, '/' ) ); 1019cdf0e10cSrcweir bRet = ::utl::UCBContentHelper::Exists( aObj.GetMainURL( INetURLObject::NO_DECODE ) ); 1020cdf0e10cSrcweir 1021cdf0e10cSrcweir if ( bRet ) 1022cdf0e10cSrcweir { 1023cdf0e10cSrcweir if ( !bIsURL ) 1024cdf0e10cSrcweir ::utl::LocalFileHelper::ConvertURLToPhysicalName( 1025cdf0e10cSrcweir aObj.GetMainURL( INetURLObject::NO_DECODE ), rIniFile ); 1026cdf0e10cSrcweir else 1027cdf0e10cSrcweir rIniFile = aObj.GetMainURL( INetURLObject::NO_DECODE ); 1028cdf0e10cSrcweir break; 1029cdf0e10cSrcweir } 1030cdf0e10cSrcweir } 1031cdf0e10cSrcweir } 1032cdf0e10cSrcweir } 1033cdf0e10cSrcweir 1034cdf0e10cSrcweir return bRet; 1035cdf0e10cSrcweir } 1036cdf0e10cSrcweir 1037cdf0e10cSrcweir // ----------------------------------------------------------------------- 1038cdf0e10cSrcweir 1039cdf0e10cSrcweir ::com::sun::star::lang::Locale SvtPathOptions::GetLocale() const 1040cdf0e10cSrcweir { 1041cdf0e10cSrcweir return pImp->GetLocale(); 1042cdf0e10cSrcweir } 1043cdf0e10cSrcweir // ----------------------------------------------------------------------- 1044cdf0e10cSrcweir sal_Bool SvtPathOptions::IsPathReadonly(Pathes ePath)const 1045cdf0e10cSrcweir { 1046cdf0e10cSrcweir return pImp->IsPathReadonly(ePath); 1047cdf0e10cSrcweir } 1048cdf0e10cSrcweir // ----------------------------------------------------------------------- 1049cdf0e10cSrcweir const String& SvtPathOptions::GetPath(Pathes ePath)const 1050cdf0e10cSrcweir { 1051cdf0e10cSrcweir return pImp->GetPath(ePath); 1052cdf0e10cSrcweir } 1053cdf0e10cSrcweir // ----------------------------------------------------------------------- 1054cdf0e10cSrcweir void SvtPathOptions::SetPath( SvtPathOptions::Pathes ePath, const String& rNewPath ) 1055cdf0e10cSrcweir { 1056cdf0e10cSrcweir pImp->SetPath(ePath, rNewPath); 1057cdf0e10cSrcweir } 1058cdf0e10cSrcweir 1059cdf0e10cSrcweir // class PathService ----------------------------------------------------- 1060cdf0e10cSrcweir #include <com/sun/star/frame/XConfigManager.hpp> 1061cdf0e10cSrcweir #include <com/sun/star/lang/XServiceInfo.hpp> 1062cdf0e10cSrcweir #include <cppuhelper/implbase2.hxx> 1063cdf0e10cSrcweir 1064cdf0e10cSrcweir class PathService : public ::cppu::WeakImplHelper2< ::com::sun::star::frame::XConfigManager, ::com::sun::star::lang::XServiceInfo > 1065cdf0e10cSrcweir { 1066cdf0e10cSrcweir virtual ::rtl::OUString SAL_CALL getImplementationName( ) throw(::com::sun::star::uno::RuntimeException); 1067cdf0e10cSrcweir virtual sal_Bool SAL_CALL supportsService( const ::rtl::OUString& ServiceName ) throw(::com::sun::star::uno::RuntimeException); 1068cdf0e10cSrcweir virtual ::com::sun::star::uno::Sequence< ::rtl::OUString > SAL_CALL 1069cdf0e10cSrcweir getSupportedServiceNames( ) throw(::com::sun::star::uno::RuntimeException); 1070cdf0e10cSrcweir virtual ::rtl::OUString SAL_CALL substituteVariables( const ::rtl::OUString& sText ) throw(::com::sun::star::uno::RuntimeException); 1071cdf0e10cSrcweir virtual void SAL_CALL addPropertyChangeListener( const ::rtl::OUString& sKeyName, const ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertyChangeListener >& xListener ) throw(::com::sun::star::uno::RuntimeException); 1072cdf0e10cSrcweir virtual void SAL_CALL removePropertyChangeListener( const ::rtl::OUString& sKeyName, const ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertyChangeListener >& xListener ) throw(::com::sun::star::uno::RuntimeException); 1073cdf0e10cSrcweir virtual void SAL_CALL flush( ) throw(::com::sun::star::uno::RuntimeException); 1074cdf0e10cSrcweir }; 1075cdf0e10cSrcweir 1076cdf0e10cSrcweir // class PathService ----------------------------------------------------- 1077cdf0e10cSrcweir 1078cdf0e10cSrcweir void SAL_CALL PathService::addPropertyChangeListener( const ::rtl::OUString&, const ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertyChangeListener >& ) throw(::com::sun::star::uno::RuntimeException) {} 1079cdf0e10cSrcweir void SAL_CALL PathService::removePropertyChangeListener( const ::rtl::OUString&, const ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertyChangeListener >& ) throw(::com::sun::star::uno::RuntimeException) {} 1080cdf0e10cSrcweir void SAL_CALL PathService::flush( ) throw(::com::sun::star::uno::RuntimeException) {} 1081cdf0e10cSrcweir 1082cdf0e10cSrcweir ::rtl::OUString SAL_CALL PathService::substituteVariables( const ::rtl::OUString& sText ) throw(::com::sun::star::uno::RuntimeException) 1083cdf0e10cSrcweir { 1084cdf0e10cSrcweir return SvtPathOptions().SubstituteVariable( sText ); 1085cdf0e10cSrcweir } 1086cdf0e10cSrcweir 1087cdf0e10cSrcweir ::rtl::OUString SAL_CALL PathService::getImplementationName( ) throw(::com::sun::star::uno::RuntimeException) 1088cdf0e10cSrcweir { 1089cdf0e10cSrcweir return OUString::createFromAscii("com.sun.star.comp.unotools.PathService"); 1090cdf0e10cSrcweir } 1091cdf0e10cSrcweir 1092cdf0e10cSrcweir sal_Bool SAL_CALL PathService::supportsService( const ::rtl::OUString& ServiceName ) throw(::com::sun::star::uno::RuntimeException) 1093cdf0e10cSrcweir { 1094cdf0e10cSrcweir if ( ServiceName.compareToAscii("com.sun.star.config.SpecialConfigManager") == COMPARE_EQUAL ) 1095cdf0e10cSrcweir return sal_True; 1096cdf0e10cSrcweir else 1097cdf0e10cSrcweir return sal_False; 1098cdf0e10cSrcweir } 1099cdf0e10cSrcweir 1100cdf0e10cSrcweir ::com::sun::star::uno::Sequence< ::rtl::OUString > SAL_CALL PathService::getSupportedServiceNames( ) throw(::com::sun::star::uno::RuntimeException) 1101cdf0e10cSrcweir { 1102cdf0e10cSrcweir Sequence< OUString > aRet(1); 1103cdf0e10cSrcweir *aRet.getArray() = OUString::createFromAscii("com.sun.star.config.SpecialConfigManager"); 1104cdf0e10cSrcweir return aRet; 1105cdf0e10cSrcweir } 1106