2010-10-14 08:27:31 +02:00
|
|
|
/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
|
2000-09-18 16:07:07 +00:00
|
|
|
/*************************************************************************
|
|
|
|
*
|
2008-04-10 19:01:57 +00:00
|
|
|
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
2000-09-18 16:07:07 +00:00
|
|
|
*
|
2010-02-12 15:01:35 +01:00
|
|
|
* Copyright 2000, 2010 Oracle and/or its affiliates.
|
2000-09-18 16:07:07 +00:00
|
|
|
*
|
2008-04-10 19:01:57 +00:00
|
|
|
* OpenOffice.org - a multi-platform office productivity suite
|
2000-09-18 16:07:07 +00:00
|
|
|
*
|
2008-04-10 19:01:57 +00:00
|
|
|
* This file is part of OpenOffice.org.
|
2000-09-18 16:07:07 +00:00
|
|
|
*
|
2008-04-10 19:01:57 +00:00
|
|
|
* 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.
|
2000-09-18 16:07:07 +00:00
|
|
|
*
|
2008-04-10 19:01:57 +00:00
|
|
|
* 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).
|
2000-09-18 16:07:07 +00:00
|
|
|
*
|
2008-04-10 19:01:57 +00:00
|
|
|
* 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.
|
2000-09-18 16:07:07 +00:00
|
|
|
*
|
|
|
|
************************************************************************/
|
2006-09-17 13:28:20 +00:00
|
|
|
|
|
|
|
// MARKER(update_precomp.py): autogen include statement, do not remove
|
2009-10-06 07:38:24 +02:00
|
|
|
#include "precompiled_unotools.hxx"
|
2000-09-18 16:07:07 +00:00
|
|
|
|
2009-10-06 07:38:24 +02:00
|
|
|
#include <unotools/pathoptions.hxx>
|
2000-09-25 09:00:42 +00:00
|
|
|
#include <unotools/configitem.hxx>
|
2000-09-18 16:07:07 +00:00
|
|
|
#include <unotools/configmgr.hxx>
|
|
|
|
#include <tools/debug.hxx>
|
2000-09-25 09:00:42 +00:00
|
|
|
#include <tools/resmgr.hxx>
|
|
|
|
#include <tools/urlobj.hxx>
|
2000-09-18 16:07:07 +00:00
|
|
|
#include <com/sun/star/uno/Any.hxx>
|
|
|
|
#include <com/sun/star/uno/Sequence.hxx>
|
2000-09-25 09:00:42 +00:00
|
|
|
#include <osl/mutex.hxx>
|
2000-11-06 11:58:10 +00:00
|
|
|
#include <osl/file.hxx>
|
2000-12-14 07:18:58 +00:00
|
|
|
#include <unotools/localfilehelper.hxx>
|
2002-04-25 11:46:16 +00:00
|
|
|
#include <unotools/bootstrap.hxx>
|
2000-09-18 16:07:07 +00:00
|
|
|
|
2001-01-19 12:52:46 +00:00
|
|
|
#include <unotools/ucbhelper.hxx>
|
2000-11-08 17:22:21 +00:00
|
|
|
#include <vos/process.hxx>
|
2002-08-21 09:25:15 +00:00
|
|
|
#include <comphelper/processfactory.hxx>
|
|
|
|
#include <com/sun/star/beans/XFastPropertySet.hpp>
|
|
|
|
#include <com/sun/star/beans/XPropertySet.hpp>
|
2002-12-05 13:50:36 +00:00
|
|
|
#include <com/sun/star/beans/PropertyAttribute.hpp>
|
2002-08-21 09:25:15 +00:00
|
|
|
#include <com/sun/star/beans/XPropertySetInfo.hpp>
|
|
|
|
#include <com/sun/star/util/XStringSubstitution.hpp>
|
|
|
|
#include <com/sun/star/lang/XMultiServiceFactory.hpp>
|
2004-06-25 16:24:59 +00:00
|
|
|
#include <rtl/instance.hxx>
|
2002-08-21 09:25:15 +00:00
|
|
|
|
2005-11-11 07:52:56 +00:00
|
|
|
#include <itemholder1.hxx>
|
|
|
|
|
2002-08-21 09:25:15 +00:00
|
|
|
#include <vector>
|
|
|
|
#include <hash_map>
|
2000-11-08 17:22:21 +00:00
|
|
|
|
2000-11-06 11:58:10 +00:00
|
|
|
using namespace osl;
|
2000-09-18 16:07:07 +00:00
|
|
|
using namespace utl;
|
|
|
|
using namespace rtl;
|
|
|
|
using namespace com::sun::star::uno;
|
2002-08-21 09:25:15 +00:00
|
|
|
using namespace com::sun::star::beans;
|
|
|
|
using namespace com::sun::star::util;
|
|
|
|
using namespace com::sun::star::lang;
|
2000-09-18 16:07:07 +00:00
|
|
|
|
2000-09-25 09:00:42 +00:00
|
|
|
// define ----------------------------------------------------------------
|
2000-09-18 16:07:07 +00:00
|
|
|
|
2000-11-09 08:48:41 +00:00
|
|
|
#define SEARCHPATH_DELIMITER ';'
|
|
|
|
|
2000-09-25 09:00:42 +00:00
|
|
|
#define ASCII_STR(s) OUString( RTL_CONSTASCII_USTRINGPARAM(s) )
|
|
|
|
|
|
|
|
#define SIGN_STARTVARIABLE ASCII_STR("$(")
|
|
|
|
#define SIGN_ENDVARIABLE ASCII_STR(")")
|
|
|
|
|
2002-08-21 09:25:15 +00:00
|
|
|
// Supported variables by the old SvtPathOptions implementation
|
|
|
|
#define SUBSTITUTE_INST "$(inst)"
|
|
|
|
#define SUBSTITUTE_PROG "$(prog)"
|
|
|
|
#define SUBSTITUTE_USER "$(user)"
|
|
|
|
#define SUBSTITUTE_INSTPATH "$(instpath)"
|
|
|
|
#define SUBSTITUTE_PROGPATH "$(progpath)"
|
|
|
|
#define SUBSTITUTE_USERPATH "$(userpath)"
|
|
|
|
#define SUBSTITUTE_INSTURL "$(insturl)"
|
|
|
|
#define SUBSTITUTE_PROGURL "$(progurl)"
|
|
|
|
#define SUBSTITUTE_USERURL "$(userurl)"
|
|
|
|
#define SUBSTITUTE_PATH "$(path)"
|
2004-06-25 15:32:52 +00:00
|
|
|
//#define SUBSTITUTE_LANG "$(lang)"
|
2002-08-21 09:25:15 +00:00
|
|
|
#define SUBSTITUTE_LANGID "$(langid)"
|
|
|
|
#define SUBSTITUTE_VLANG "$(vlang)"
|
|
|
|
#define SUBSTITUTE_WORKDIRURL "$(workdirurl)"
|
2000-09-25 09:00:42 +00:00
|
|
|
|
|
|
|
#define STRPOS_NOTFOUND -1
|
2000-09-18 16:07:07 +00:00
|
|
|
|
2002-08-21 09:25:15 +00:00
|
|
|
struct OUStringHashCode
|
|
|
|
{
|
|
|
|
size_t operator()( const ::rtl::OUString& sString ) const
|
|
|
|
{
|
|
|
|
return sString.hashCode();
|
|
|
|
}
|
|
|
|
};
|
|
|
|
|
|
|
|
enum VarNameProperty
|
|
|
|
{
|
|
|
|
VAR_NEEDS_SYSTEM_PATH,
|
|
|
|
VAR_NEEDS_FILEURL
|
|
|
|
};
|
2000-09-25 09:00:42 +00:00
|
|
|
|
2002-08-21 09:25:15 +00:00
|
|
|
class NameToHandleMap : public ::std::hash_map< ::rtl::OUString, sal_Int32, OUStringHashCode, ::std::equal_to< ::rtl::OUString > >
|
|
|
|
{
|
|
|
|
public:
|
|
|
|
inline void free() { NameToHandleMap().swap( *this ); }
|
|
|
|
};
|
|
|
|
|
|
|
|
class EnumToHandleMap : public ::std::hash_map< sal_Int32, sal_Int32, std::hash< sal_Int32 >, std::equal_to< sal_Int32 > >
|
|
|
|
{
|
|
|
|
public:
|
|
|
|
inline void free() { EnumToHandleMap().swap( *this ); }
|
|
|
|
};
|
|
|
|
|
|
|
|
class VarNameToEnumMap : public ::std::hash_map< OUString, VarNameProperty, OUStringHashCode, ::std::equal_to< OUString > >
|
|
|
|
{
|
|
|
|
public:
|
|
|
|
inline void free() { VarNameToEnumMap().swap( *this ); }
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
// class SvtPathOptions_Impl ---------------------------------------------
|
|
|
|
class SvtPathOptions_Impl
|
|
|
|
{
|
|
|
|
private:
|
|
|
|
// Local variables to return const references
|
|
|
|
std::vector< String > m_aPathArray;
|
|
|
|
Reference< XFastPropertySet > m_xPathSettings;
|
|
|
|
Reference< XStringSubstitution > m_xSubstVariables;
|
2002-12-03 15:21:15 +00:00
|
|
|
mutable EnumToHandleMap m_aMapEnumToPropHandle;
|
2002-08-21 09:25:15 +00:00
|
|
|
VarNameToEnumMap m_aMapVarNamesToEnum;
|
|
|
|
|
2004-06-25 15:32:52 +00:00
|
|
|
::com::sun::star::lang::Locale m_aLocale;
|
2002-08-21 09:25:15 +00:00
|
|
|
String m_aEmptyString;
|
2002-12-03 15:21:15 +00:00
|
|
|
mutable ::osl::Mutex m_aMutex;
|
2002-08-21 09:25:15 +00:00
|
|
|
|
|
|
|
public:
|
|
|
|
SvtPathOptions_Impl();
|
|
|
|
|
|
|
|
// get the pathes, not const because of using a mutex
|
2004-04-29 15:47:45 +00:00
|
|
|
const String& GetPath( SvtPathOptions::Pathes );
|
2002-08-21 09:25:15 +00:00
|
|
|
const String& GetAddinPath() { return GetPath( SvtPathOptions::PATH_ADDIN ); }
|
|
|
|
const String& GetAutoCorrectPath() { return GetPath( SvtPathOptions::PATH_AUTOCORRECT ); }
|
|
|
|
const String& GetAutoTextPath() { return GetPath( SvtPathOptions::PATH_AUTOTEXT ); }
|
|
|
|
const String& GetBackupPath() { return GetPath( SvtPathOptions::PATH_BACKUP ); }
|
|
|
|
const String& GetBasicPath() { return GetPath( SvtPathOptions::PATH_BASIC ); }
|
|
|
|
const String& GetBitmapPath() { return GetPath( SvtPathOptions::PATH_BITMAP ); }
|
|
|
|
const String& GetConfigPath() { return GetPath( SvtPathOptions::PATH_CONFIG ); }
|
|
|
|
const String& GetDictionaryPath() { return GetPath( SvtPathOptions::PATH_DICTIONARY ); }
|
|
|
|
const String& GetFavoritesPath() { return GetPath( SvtPathOptions::PATH_FAVORITES ); }
|
|
|
|
const String& GetFilterPath() { return GetPath( SvtPathOptions::PATH_FILTER ); }
|
|
|
|
const String& GetGalleryPath() { return GetPath( SvtPathOptions::PATH_GALLERY ); }
|
|
|
|
const String& GetGraphicPath() { return GetPath( SvtPathOptions::PATH_GRAPHIC ); }
|
|
|
|
const String& GetHelpPath() { return GetPath( SvtPathOptions::PATH_HELP ); }
|
|
|
|
const String& GetLinguisticPath() { return GetPath( SvtPathOptions::PATH_LINGUISTIC ); }
|
|
|
|
const String& GetModulePath() { return GetPath( SvtPathOptions::PATH_MODULE ); }
|
|
|
|
const String& GetPalettePath() { return GetPath( SvtPathOptions::PATH_PALETTE ); }
|
|
|
|
const String& GetPluginPath() { return GetPath( SvtPathOptions::PATH_PLUGIN ); }
|
|
|
|
const String& GetStoragePath() { return GetPath( SvtPathOptions::PATH_STORAGE ); }
|
|
|
|
const String& GetTempPath() { return GetPath( SvtPathOptions::PATH_TEMP ); }
|
|
|
|
const String& GetTemplatePath() { return GetPath( SvtPathOptions::PATH_TEMPLATE ); }
|
|
|
|
const String& GetUserConfigPath() { return GetPath( SvtPathOptions::PATH_USERCONFIG ); }
|
|
|
|
const String& GetWorkPath() { return GetPath( SvtPathOptions::PATH_WORK ); }
|
|
|
|
const String& GetUIConfigPath() { return GetPath( SvtPathOptions::PATH_UICONFIG ); }
|
2007-06-19 14:59:31 +00:00
|
|
|
const String& GetFingerprintPath() { return GetPath( SvtPathOptions::PATH_FINGERPRINT ); }
|
2002-08-21 09:25:15 +00:00
|
|
|
|
|
|
|
// set the pathes
|
2004-04-29 15:47:45 +00:00
|
|
|
void SetPath( SvtPathOptions::Pathes, const String& rNewPath );
|
2002-08-21 09:25:15 +00:00
|
|
|
void SetAddinPath( const String& rPath ) { SetPath( SvtPathOptions::PATH_ADDIN, rPath ); }
|
|
|
|
void SetAutoCorrectPath( const String& rPath ) { SetPath( SvtPathOptions::PATH_AUTOCORRECT, rPath ); }
|
|
|
|
void SetAutoTextPath( const String& rPath ) { SetPath( SvtPathOptions::PATH_AUTOTEXT, rPath ); }
|
|
|
|
void SetBackupPath( const String& rPath ) { SetPath( SvtPathOptions::PATH_BACKUP, rPath ); }
|
|
|
|
void SetBasicPath( const String& rPath ) { SetPath( SvtPathOptions::PATH_BASIC, rPath ); }
|
|
|
|
void SetBitmapPath( const String& rPath ) { SetPath( SvtPathOptions::PATH_BITMAP, rPath ); }
|
|
|
|
void SetConfigPath( const String& rPath ) { SetPath( SvtPathOptions::PATH_CONFIG, rPath ); }
|
|
|
|
void SetDictionaryPath( const String& rPath ) { SetPath( SvtPathOptions::PATH_DICTIONARY, rPath ); }
|
|
|
|
void SetFavoritesPath( const String& rPath ) { SetPath( SvtPathOptions::PATH_FAVORITES, rPath ); }
|
|
|
|
void SetFilterPath( const String& rPath ) { SetPath( SvtPathOptions::PATH_FILTER, rPath ); }
|
|
|
|
void SetGalleryPath( const String& rPath ) { SetPath( SvtPathOptions::PATH_GALLERY, rPath ); }
|
|
|
|
void SetGraphicPath( const String& rPath ) { SetPath( SvtPathOptions::PATH_GRAPHIC, rPath ); }
|
|
|
|
void SetHelpPath( const String& rPath ) { SetPath( SvtPathOptions::PATH_HELP, rPath ); }
|
|
|
|
void SetLinguisticPath( const String& rPath ) { SetPath( SvtPathOptions::PATH_LINGUISTIC, rPath ); }
|
|
|
|
void SetModulePath( const String& rPath ) { SetPath( SvtPathOptions::PATH_MODULE, rPath ); }
|
|
|
|
void SetPalettePath( const String& rPath ) { SetPath( SvtPathOptions::PATH_PALETTE, rPath ); }
|
|
|
|
void SetPluginPath( const String& rPath ) { SetPath( SvtPathOptions::PATH_PLUGIN, rPath ); }
|
|
|
|
void SetStoragePath( const String& rPath ) { SetPath( SvtPathOptions::PATH_STORAGE, rPath ); }
|
|
|
|
void SetTempPath( const String& rPath ) { SetPath( SvtPathOptions::PATH_TEMP, rPath ); }
|
|
|
|
void SetTemplatePath( const String& rPath ) { SetPath( SvtPathOptions::PATH_TEMPLATE, rPath ); }
|
|
|
|
void SetUserConfigPath( const String& rPath ) { SetPath( SvtPathOptions::PATH_USERCONFIG, rPath ); }
|
|
|
|
void SetWorkPath( const String& rPath ) { SetPath( SvtPathOptions::PATH_WORK, rPath ); }
|
|
|
|
|
|
|
|
rtl::OUString SubstVar( const rtl::OUString& rVar );
|
|
|
|
rtl::OUString SubstituteAndConvert( const rtl::OUString& rPath );
|
|
|
|
rtl::OUString UsePathVariables( const rtl::OUString& rPath );
|
|
|
|
|
2004-06-25 19:19:25 +00:00
|
|
|
::com::sun::star::lang::Locale GetLocale() const { return m_aLocale; }
|
2002-12-03 15:21:15 +00:00
|
|
|
|
|
|
|
BOOL IsPathReadonly(SvtPathOptions::Pathes ePath)const;
|
2000-09-25 09:00:42 +00:00
|
|
|
};
|
|
|
|
|
|
|
|
// global ----------------------------------------------------------------
|
|
|
|
|
|
|
|
static SvtPathOptions_Impl* pOptions = NULL;
|
2004-06-25 16:24:59 +00:00
|
|
|
static sal_Int32 nRefCount = 0;
|
2000-09-25 09:00:42 +00:00
|
|
|
|
|
|
|
// functions -------------------------------------------------------------
|
2002-08-21 09:25:15 +00:00
|
|
|
struct PropertyStruct
|
|
|
|
{
|
|
|
|
const char* pPropName; // The ascii name of the Office path
|
|
|
|
SvtPathOptions::Pathes ePath; // The enum value used by SvtPathOptions
|
|
|
|
};
|
2000-09-25 09:00:42 +00:00
|
|
|
|
2002-08-21 09:25:15 +00:00
|
|
|
struct VarNameAttribute
|
2000-09-18 16:07:07 +00:00
|
|
|
{
|
2002-08-21 09:25:15 +00:00
|
|
|
const char* pVarName; // The name of the path variable
|
|
|
|
VarNameProperty eVarProperty; // Which return value is needed by this path variable
|
|
|
|
};
|
|
|
|
|
|
|
|
static PropertyStruct aPropNames[] =
|
|
|
|
{
|
|
|
|
{ "Addin", SvtPathOptions::PATH_ADDIN },
|
|
|
|
{ "AutoCorrect", SvtPathOptions::PATH_AUTOCORRECT },
|
|
|
|
{ "AutoText", SvtPathOptions::PATH_AUTOTEXT },
|
|
|
|
{ "Backup", SvtPathOptions::PATH_BACKUP },
|
|
|
|
{ "Basic", SvtPathOptions::PATH_BASIC },
|
|
|
|
{ "Bitmap", SvtPathOptions::PATH_BITMAP },
|
|
|
|
{ "Config", SvtPathOptions::PATH_CONFIG },
|
|
|
|
{ "Dictionary", SvtPathOptions::PATH_DICTIONARY },
|
|
|
|
{ "Favorite", SvtPathOptions::PATH_FAVORITES },
|
|
|
|
{ "Filter", SvtPathOptions::PATH_FILTER },
|
|
|
|
{ "Gallery", SvtPathOptions::PATH_GALLERY },
|
|
|
|
{ "Graphic", SvtPathOptions::PATH_GRAPHIC },
|
|
|
|
{ "Help", SvtPathOptions::PATH_HELP },
|
|
|
|
{ "Linguistic", SvtPathOptions::PATH_LINGUISTIC },
|
|
|
|
{ "Module", SvtPathOptions::PATH_MODULE },
|
|
|
|
{ "Palette", SvtPathOptions::PATH_PALETTE },
|
|
|
|
{ "Plugin", SvtPathOptions::PATH_PLUGIN },
|
|
|
|
{ "Storage", SvtPathOptions::PATH_STORAGE },
|
|
|
|
{ "Temp", SvtPathOptions::PATH_TEMP },
|
|
|
|
{ "Template", SvtPathOptions::PATH_TEMPLATE },
|
|
|
|
{ "UserConfig", SvtPathOptions::PATH_USERCONFIG },
|
|
|
|
{ "Work", SvtPathOptions::PATH_WORK },
|
2007-06-19 14:59:31 +00:00
|
|
|
{ "UIConfig", SvtPathOptions::PATH_UICONFIG },
|
|
|
|
{ "Fingerprint", SvtPathOptions::PATH_FINGERPRINT }
|
2002-08-21 09:25:15 +00:00
|
|
|
};
|
|
|
|
|
|
|
|
static VarNameAttribute aVarNameAttribute[] =
|
|
|
|
{
|
|
|
|
{ SUBSTITUTE_INSTPATH, VAR_NEEDS_SYSTEM_PATH }, // $(instpath)
|
|
|
|
{ SUBSTITUTE_PROGPATH, VAR_NEEDS_SYSTEM_PATH }, // $(progpath)
|
|
|
|
{ SUBSTITUTE_USERPATH, VAR_NEEDS_SYSTEM_PATH }, // $(userpath)
|
|
|
|
{ SUBSTITUTE_PATH, VAR_NEEDS_SYSTEM_PATH }, // $(path)
|
|
|
|
};
|
|
|
|
|
2000-09-25 09:00:42 +00:00
|
|
|
// class SvtPathOptions_Impl ---------------------------------------------
|
2000-09-18 16:07:07 +00:00
|
|
|
|
2002-08-21 09:25:15 +00:00
|
|
|
const String& SvtPathOptions_Impl::GetPath( SvtPathOptions::Pathes ePath )
|
2000-09-18 16:07:07 +00:00
|
|
|
{
|
|
|
|
::osl::MutexGuard aGuard( m_aMutex );
|
|
|
|
|
2007-06-19 14:59:31 +00:00
|
|
|
if ( ePath < SvtPathOptions::PATH_COUNT )
|
2002-08-21 09:25:15 +00:00
|
|
|
{
|
|
|
|
OUString aPathValue;
|
|
|
|
String aResult;
|
|
|
|
sal_Int32 nHandle = m_aMapEnumToPropHandle[ (sal_Int32)ePath ];
|
|
|
|
|
|
|
|
// Substitution is done by the service itself using the substition service
|
|
|
|
Any a = m_xPathSettings->getFastPropertyValue( nHandle );
|
|
|
|
a >>= aPathValue;
|
2006-06-19 19:47:51 +00:00
|
|
|
if( ePath == SvtPathOptions::PATH_ADDIN ||
|
|
|
|
ePath == SvtPathOptions::PATH_FILTER ||
|
|
|
|
ePath == SvtPathOptions::PATH_HELP ||
|
|
|
|
ePath == SvtPathOptions::PATH_MODULE ||
|
|
|
|
ePath == SvtPathOptions::PATH_PLUGIN ||
|
|
|
|
ePath == SvtPathOptions::PATH_STORAGE
|
|
|
|
)
|
2002-08-21 09:25:15 +00:00
|
|
|
{
|
2006-06-19 19:47:51 +00:00
|
|
|
// These office paths have to be converted to system pathes
|
|
|
|
utl::LocalFileHelper::ConvertURLToPhysicalName( aPathValue, aResult );
|
|
|
|
aPathValue = aResult;
|
2002-08-21 09:25:15 +00:00
|
|
|
}
|
2000-09-18 16:07:07 +00:00
|
|
|
|
2002-08-21 09:25:15 +00:00
|
|
|
m_aPathArray[ ePath ] = aPathValue;
|
|
|
|
return m_aPathArray[ ePath ];
|
|
|
|
}
|
2000-09-18 16:07:07 +00:00
|
|
|
|
2002-08-21 09:25:15 +00:00
|
|
|
return m_aEmptyString;
|
2000-12-04 11:25:08 +00:00
|
|
|
}
|
2002-12-03 15:21:15 +00:00
|
|
|
// -----------------------------------------------------------------------
|
|
|
|
BOOL SvtPathOptions_Impl::IsPathReadonly(SvtPathOptions::Pathes ePath)const
|
|
|
|
{
|
|
|
|
::osl::MutexGuard aGuard( m_aMutex );
|
|
|
|
BOOL bReadonly = FALSE;
|
2007-06-19 14:59:31 +00:00
|
|
|
if ( ePath < SvtPathOptions::PATH_COUNT )
|
2002-12-03 15:21:15 +00:00
|
|
|
{
|
|
|
|
Reference<XPropertySet> xPrSet(m_xPathSettings, UNO_QUERY);
|
|
|
|
if(xPrSet.is())
|
|
|
|
{
|
|
|
|
Reference<XPropertySetInfo> xInfo = xPrSet->getPropertySetInfo();
|
2003-03-27 13:40:07 +00:00
|
|
|
const char* pA = aPropNames[ePath].pPropName;
|
|
|
|
::rtl::OUString sU = OUString::createFromAscii(pA);
|
|
|
|
Property aProperty = xInfo->getPropertyByName(sU);
|
2002-12-05 13:48:16 +00:00
|
|
|
bReadonly = 0 != (aProperty.Attributes & PropertyAttribute::READONLY);
|
2002-12-03 15:21:15 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
return bReadonly;
|
|
|
|
}
|
2002-08-21 09:25:15 +00:00
|
|
|
// -----------------------------------------------------------------------
|
2000-12-04 11:25:08 +00:00
|
|
|
|
2002-08-21 09:25:15 +00:00
|
|
|
void SvtPathOptions_Impl::SetPath( SvtPathOptions::Pathes ePath, const String& rNewPath )
|
2000-12-04 11:25:08 +00:00
|
|
|
{
|
2002-08-21 09:25:15 +00:00
|
|
|
::osl::MutexGuard aGuard( m_aMutex );
|
2000-12-04 11:25:08 +00:00
|
|
|
|
2007-06-19 14:59:31 +00:00
|
|
|
if ( ePath < SvtPathOptions::PATH_COUNT )
|
2000-12-04 11:25:08 +00:00
|
|
|
{
|
2002-08-21 09:25:15 +00:00
|
|
|
String aResult;
|
|
|
|
OUString aNewValue;
|
|
|
|
Any a;
|
|
|
|
|
|
|
|
switch ( ePath )
|
2001-05-10 12:21:46 +00:00
|
|
|
{
|
2002-08-21 09:25:15 +00:00
|
|
|
case SvtPathOptions::PATH_ADDIN:
|
|
|
|
case SvtPathOptions::PATH_FILTER:
|
|
|
|
case SvtPathOptions::PATH_HELP:
|
|
|
|
case SvtPathOptions::PATH_MODULE:
|
|
|
|
case SvtPathOptions::PATH_PLUGIN:
|
|
|
|
case SvtPathOptions::PATH_STORAGE:
|
2001-05-10 12:21:46 +00:00
|
|
|
{
|
2002-08-21 09:25:15 +00:00
|
|
|
// These office paths have to be convert back to UCB-URL's
|
|
|
|
utl::LocalFileHelper::ConvertPhysicalNameToURL( rNewPath, aResult );
|
|
|
|
aNewValue = aResult;
|
2001-05-10 12:21:46 +00:00
|
|
|
}
|
2002-08-21 09:25:15 +00:00
|
|
|
break;
|
|
|
|
|
|
|
|
default:
|
|
|
|
aNewValue = rNewPath;
|
2001-10-10 09:37:49 +00:00
|
|
|
}
|
|
|
|
|
2002-08-21 09:25:15 +00:00
|
|
|
// Resubstitution is done by the service itself using the substition service
|
|
|
|
a <<= aNewValue;
|
|
|
|
try
|
2001-10-10 09:37:49 +00:00
|
|
|
{
|
2002-08-21 09:25:15 +00:00
|
|
|
m_xPathSettings->setFastPropertyValue( m_aMapEnumToPropHandle[ (sal_Int32)ePath], a );
|
2001-10-10 09:37:49 +00:00
|
|
|
}
|
2003-03-27 13:40:07 +00:00
|
|
|
catch (const Exception&)
|
2001-10-10 09:37:49 +00:00
|
|
|
{
|
2001-05-10 12:21:46 +00:00
|
|
|
}
|
2000-12-04 11:25:08 +00:00
|
|
|
}
|
2002-08-21 09:25:15 +00:00
|
|
|
}
|
2000-12-04 11:25:08 +00:00
|
|
|
|
2002-08-21 09:25:15 +00:00
|
|
|
// -----------------------------------------------------------------------
|
|
|
|
|
|
|
|
OUString SvtPathOptions_Impl::SubstituteAndConvert( const rtl::OUString& rPath )
|
|
|
|
{
|
|
|
|
return SubstVar( rPath );
|
|
|
|
}
|
|
|
|
|
|
|
|
//-------------------------------------------------------------------------
|
|
|
|
|
|
|
|
OUString SvtPathOptions_Impl::UsePathVariables( const OUString& rPath )
|
|
|
|
{
|
|
|
|
return m_xSubstVariables->reSubstituteVariables( rPath );
|
2000-12-04 11:25:08 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
// -----------------------------------------------------------------------
|
|
|
|
|
2000-09-25 09:00:42 +00:00
|
|
|
OUString SvtPathOptions_Impl::SubstVar( const OUString& rVar )
|
2000-09-18 16:07:07 +00:00
|
|
|
{
|
2000-09-25 09:00:42 +00:00
|
|
|
// Don't work at parameter-string directly. Copy it.
|
|
|
|
OUString aWorkText = rVar;
|
|
|
|
|
2002-08-21 09:25:15 +00:00
|
|
|
// Convert the returned path to system path!
|
|
|
|
BOOL bConvertLocal = FALSE;
|
|
|
|
|
2000-09-25 09:00:42 +00:00
|
|
|
// Search for first occure of "$(...".
|
|
|
|
sal_Int32 nPosition = aWorkText.indexOf( SIGN_STARTVARIABLE ); // = first position of "$(" in string
|
2002-08-21 09:25:15 +00:00
|
|
|
sal_Int32 nLength = 0; // = count of letters from "$(" to ")" in string
|
2000-09-25 09:00:42 +00:00
|
|
|
|
|
|
|
// Have we found any variable like "$(...)"?
|
|
|
|
if ( nPosition != STRPOS_NOTFOUND )
|
2000-09-18 16:07:07 +00:00
|
|
|
{
|
2000-09-25 09:00:42 +00:00
|
|
|
// Yes; Get length of found variable.
|
|
|
|
// If no ")" was found - nLength is set to 0 by default! see before.
|
|
|
|
sal_Int32 nEndPosition = aWorkText.indexOf( SIGN_ENDVARIABLE, nPosition );
|
|
|
|
if ( nEndPosition != STRPOS_NOTFOUND )
|
2002-08-21 09:25:15 +00:00
|
|
|
nLength = nEndPosition - nPosition + 1;
|
2000-09-25 09:00:42 +00:00
|
|
|
}
|
2000-09-18 16:07:07 +00:00
|
|
|
|
2002-08-21 09:25:15 +00:00
|
|
|
// Is there another path variable?
|
2000-09-25 09:00:42 +00:00
|
|
|
while ( ( nPosition != STRPOS_NOTFOUND ) && ( nLength > 0 ) )
|
|
|
|
{
|
|
|
|
// YES; Get the next variable for replace.
|
|
|
|
OUString aReplacement;
|
|
|
|
OUString aSubString = aWorkText.copy( nPosition, nLength );
|
2001-05-11 18:51:41 +00:00
|
|
|
aSubString = aSubString.toAsciiLowerCase();
|
2000-09-25 09:00:42 +00:00
|
|
|
|
2002-08-21 09:25:15 +00:00
|
|
|
// Look for special variable that needs a system path.
|
|
|
|
VarNameToEnumMap::const_iterator pIter = m_aMapVarNamesToEnum.find( aSubString );
|
|
|
|
if ( pIter != m_aMapVarNamesToEnum.end() )
|
2001-07-25 09:10:31 +00:00
|
|
|
bConvertLocal = TRUE;
|
2000-09-25 09:00:42 +00:00
|
|
|
|
2002-08-21 09:25:15 +00:00
|
|
|
nPosition += nLength;
|
2000-09-25 09:00:42 +00:00
|
|
|
|
|
|
|
// We must control index in string before call something at OUString!
|
|
|
|
// The OUString-implementation don't do it for us :-( but the result is not defined otherwise.
|
|
|
|
if ( nPosition + 1 > aWorkText.getLength() )
|
|
|
|
{
|
|
|
|
// Position is out of range. Break loop!
|
|
|
|
nPosition = STRPOS_NOTFOUND;
|
|
|
|
nLength = 0;
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
2002-08-21 09:25:15 +00:00
|
|
|
// Else; Position is valid. Search for next variable.
|
2000-09-25 09:00:42 +00:00
|
|
|
nPosition = aWorkText.indexOf( SIGN_STARTVARIABLE, nPosition );
|
|
|
|
// Have we found any variable like "$(...)"?
|
|
|
|
if ( nPosition != STRPOS_NOTFOUND )
|
2000-09-18 16:07:07 +00:00
|
|
|
{
|
2000-09-25 09:00:42 +00:00
|
|
|
// Yes; Get length of found variable. If no ")" was found - nLength must set to 0!
|
|
|
|
nLength = 0;
|
|
|
|
sal_Int32 nEndPosition = aWorkText.indexOf( SIGN_ENDVARIABLE, nPosition );
|
|
|
|
if ( nEndPosition != STRPOS_NOTFOUND )
|
2002-08-21 09:25:15 +00:00
|
|
|
nLength = nEndPosition - nPosition + 1;
|
2000-09-18 16:07:07 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
2000-09-25 09:00:42 +00:00
|
|
|
|
2002-08-21 09:25:15 +00:00
|
|
|
aWorkText = m_xSubstVariables->substituteVariables( rVar, sal_False );
|
|
|
|
|
2001-07-25 09:10:31 +00:00
|
|
|
if ( bConvertLocal )
|
|
|
|
{
|
2002-08-21 09:25:15 +00:00
|
|
|
// Convert the URL to a system path for special path variables
|
|
|
|
String aReturn;
|
|
|
|
utl::LocalFileHelper::ConvertURLToPhysicalName( aWorkText, aReturn );
|
2001-07-25 09:10:31 +00:00
|
|
|
return aReturn;
|
|
|
|
}
|
|
|
|
|
2000-12-08 16:33:10 +00:00
|
|
|
return aWorkText;
|
2000-09-18 16:07:07 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
// -----------------------------------------------------------------------
|
|
|
|
|
2002-08-21 09:25:15 +00:00
|
|
|
SvtPathOptions_Impl::SvtPathOptions_Impl() :
|
|
|
|
m_aPathArray( (sal_Int32)SvtPathOptions::PATH_COUNT )
|
2000-09-18 16:07:07 +00:00
|
|
|
{
|
2002-08-21 09:25:15 +00:00
|
|
|
Reference< XMultiServiceFactory > xSMgr = comphelper::getProcessServiceFactory();
|
2002-04-25 11:46:16 +00:00
|
|
|
|
2002-08-21 09:25:15 +00:00
|
|
|
// Create necessary services
|
|
|
|
m_xPathSettings = Reference< XFastPropertySet >( xSMgr->createInstance(
|
|
|
|
::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM(
|
|
|
|
"com.sun.star.util.PathSettings" ))),
|
|
|
|
UNO_QUERY );
|
2005-12-21 15:11:11 +00:00
|
|
|
if ( !m_xPathSettings.is() )
|
|
|
|
{
|
|
|
|
// #112719#: check for existance
|
|
|
|
DBG_ERROR( "SvtPathOptions_Impl::SvtPathOptions_Impl(): #112719# happened again!" );
|
|
|
|
throw RuntimeException(
|
|
|
|
::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "Service com.sun.star.util.PathSettings cannot be created" )),
|
|
|
|
Reference< XInterface >() );
|
|
|
|
}
|
|
|
|
|
2002-08-21 09:25:15 +00:00
|
|
|
m_xSubstVariables = Reference< XStringSubstitution >( xSMgr->createInstance(
|
|
|
|
::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM(
|
|
|
|
"com.sun.star.util.PathSubstitution" ))),
|
|
|
|
UNO_QUERY );
|
2005-12-21 15:11:11 +00:00
|
|
|
if ( !m_xSubstVariables.is() )
|
|
|
|
{
|
|
|
|
// #112719#: check for existance
|
2003-12-01 09:01:18 +00:00
|
|
|
DBG_ERROR( "SvtPathOptions_Impl::SvtPathOptions_Impl(): #112719# happened again!" );
|
2005-12-21 15:11:11 +00:00
|
|
|
throw RuntimeException(
|
|
|
|
::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "Service com.sun.star.util.PathSubstitution cannot be created" )),
|
|
|
|
Reference< XInterface >() );
|
2003-12-01 09:01:18 +00:00
|
|
|
}
|
|
|
|
|
2002-08-21 09:25:15 +00:00
|
|
|
// Create temporary hash map to have a mapping between property names and property handles
|
|
|
|
Reference< XPropertySet > xPropertySet = Reference< XPropertySet >( m_xPathSettings, UNO_QUERY );
|
|
|
|
Reference< XPropertySetInfo > xPropSetInfo = xPropertySet->getPropertySetInfo();
|
|
|
|
Sequence< Property > aPathPropSeq = xPropSetInfo->getProperties();
|
2000-11-10 11:44:09 +00:00
|
|
|
|
2002-08-21 09:25:15 +00:00
|
|
|
NameToHandleMap aTempHashMap;
|
|
|
|
for ( sal_Int32 n = 0; n < aPathPropSeq.getLength(); n++ )
|
2000-11-14 15:53:14 +00:00
|
|
|
{
|
2002-08-21 09:25:15 +00:00
|
|
|
const com::sun::star::beans::Property& aProperty = aPathPropSeq[n];
|
|
|
|
aTempHashMap.insert( NameToHandleMap::value_type( aProperty.Name, aProperty.Handle ));
|
2000-11-14 15:53:14 +00:00
|
|
|
}
|
2000-09-25 09:00:42 +00:00
|
|
|
|
2002-08-21 09:25:15 +00:00
|
|
|
// Create mapping between internal enum (SvtPathOptions::Pathes) and property handle
|
|
|
|
sal_Int32 nCount = sizeof( aPropNames ) / sizeof( PropertyStruct );
|
2003-12-01 14:49:24 +00:00
|
|
|
sal_Int32 i;
|
|
|
|
for ( i = 0; i < nCount; i++ )
|
2000-11-14 15:53:14 +00:00
|
|
|
{
|
2002-08-21 09:25:15 +00:00
|
|
|
NameToHandleMap::const_iterator pIter =
|
|
|
|
aTempHashMap.find( rtl::OUString::createFromAscii( aPropNames[i].pPropName ));
|
|
|
|
|
|
|
|
if ( pIter != aTempHashMap.end() )
|
|
|
|
{
|
|
|
|
sal_Int32 nHandle = pIter->second;
|
|
|
|
sal_Int32 nEnum = aPropNames[i].ePath;
|
|
|
|
m_aMapEnumToPropHandle.insert( EnumToHandleMap::value_type( nEnum, nHandle ));
|
|
|
|
}
|
2000-11-14 15:53:14 +00:00
|
|
|
}
|
2000-09-25 09:00:42 +00:00
|
|
|
|
2002-08-21 09:25:15 +00:00
|
|
|
// Create hash map for path variables that need a system path as a return value!
|
|
|
|
nCount = sizeof( aVarNameAttribute ) / sizeof( VarNameAttribute );
|
|
|
|
for ( i = 0; i < nCount; i++ )
|
2000-11-08 17:22:21 +00:00
|
|
|
{
|
2002-08-21 09:25:15 +00:00
|
|
|
m_aMapVarNamesToEnum.insert( VarNameToEnumMap::value_type(
|
|
|
|
OUString::createFromAscii( aVarNameAttribute[i].pVarName ),
|
|
|
|
aVarNameAttribute[i].eVarProperty ));
|
2000-11-08 17:22:21 +00:00
|
|
|
}
|
|
|
|
|
2002-08-21 09:25:15 +00:00
|
|
|
// Set language type!
|
2010-10-11 15:19:05 +01:00
|
|
|
Any aLocale = ConfigManager::GetConfigManager().GetDirectConfigProperty( ConfigManager::LOCALE );
|
2000-09-27 07:07:33 +00:00
|
|
|
OUString aLocaleStr;
|
|
|
|
if ( aLocale >>= aLocaleStr )
|
2004-06-25 15:32:52 +00:00
|
|
|
{
|
|
|
|
sal_Int32 nIndex = 0;
|
|
|
|
m_aLocale.Language = aLocaleStr.getToken(0, '-', nIndex );
|
|
|
|
m_aLocale.Country = aLocaleStr.getToken(0, '-', nIndex );
|
|
|
|
m_aLocale.Variant = aLocaleStr.getToken(0, '-', nIndex );
|
|
|
|
}
|
2000-09-27 07:07:33 +00:00
|
|
|
else
|
2000-09-25 09:00:42 +00:00
|
|
|
{
|
2000-09-27 07:07:33 +00:00
|
|
|
DBG_ERRORFILE( "wrong any type" );
|
2004-06-25 15:32:52 +00:00
|
|
|
m_aLocale.Language = OStringToOUString(OString("en"), RTL_TEXTENCODING_UTF8);
|
|
|
|
m_aLocale.Country = OStringToOUString(OString("US"), RTL_TEXTENCODING_UTF8);
|
|
|
|
m_aLocale.Variant = OStringToOUString(OString(""), RTL_TEXTENCODING_UTF8);
|
2000-09-25 09:00:42 +00:00
|
|
|
}
|
2000-09-18 16:07:07 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
// -----------------------------------------------------------------------
|
|
|
|
|
2000-09-25 09:00:42 +00:00
|
|
|
// class SvtPathOptions --------------------------------------------------
|
|
|
|
|
2004-06-25 16:24:59 +00:00
|
|
|
namespace { struct lclMutex : public rtl::Static< ::osl::Mutex, lclMutex > {}; }
|
|
|
|
|
2000-09-25 09:00:42 +00:00
|
|
|
SvtPathOptions::SvtPathOptions()
|
|
|
|
{
|
|
|
|
// Global access, must be guarded (multithreading)
|
2004-06-25 16:24:59 +00:00
|
|
|
::osl::MutexGuard aGuard( lclMutex::get() );
|
2000-09-25 09:00:42 +00:00
|
|
|
if ( !pOptions )
|
2005-11-11 07:52:56 +00:00
|
|
|
{
|
2000-09-25 09:00:42 +00:00
|
|
|
pOptions = new SvtPathOptions_Impl;
|
2005-11-11 07:52:56 +00:00
|
|
|
ItemHolder1::holdConfigItem(E_PATHOPTIONS);
|
|
|
|
}
|
2000-09-25 09:00:42 +00:00
|
|
|
++nRefCount;
|
|
|
|
pImp = pOptions;
|
|
|
|
}
|
|
|
|
|
|
|
|
// -----------------------------------------------------------------------
|
|
|
|
|
|
|
|
SvtPathOptions::~SvtPathOptions()
|
|
|
|
{
|
|
|
|
// Global access, must be guarded (multithreading)
|
2004-06-25 16:24:59 +00:00
|
|
|
::osl::MutexGuard aGuard( lclMutex::get() );
|
2000-09-25 09:00:42 +00:00
|
|
|
if ( !--nRefCount )
|
2000-10-26 11:52:03 +00:00
|
|
|
{
|
2000-09-25 09:00:42 +00:00
|
|
|
DELETEZ( pOptions );
|
2000-10-26 11:52:03 +00:00
|
|
|
}
|
2000-09-25 09:00:42 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
// -----------------------------------------------------------------------
|
|
|
|
|
|
|
|
const String& SvtPathOptions::GetAddinPath() const
|
|
|
|
{
|
|
|
|
return pImp->GetAddinPath();
|
|
|
|
}
|
|
|
|
|
|
|
|
// -----------------------------------------------------------------------
|
|
|
|
|
|
|
|
const String& SvtPathOptions::GetAutoCorrectPath() const
|
|
|
|
{
|
|
|
|
return pImp->GetAutoCorrectPath();
|
|
|
|
}
|
|
|
|
|
|
|
|
// -----------------------------------------------------------------------
|
|
|
|
|
2000-11-02 07:18:34 +00:00
|
|
|
const String& SvtPathOptions::GetAutoTextPath() const
|
|
|
|
{
|
|
|
|
return pImp->GetAutoTextPath();
|
|
|
|
}
|
|
|
|
|
|
|
|
// -----------------------------------------------------------------------
|
|
|
|
|
2000-09-25 09:00:42 +00:00
|
|
|
const String& SvtPathOptions::GetBackupPath() const
|
|
|
|
{
|
|
|
|
return pImp->GetBackupPath();
|
|
|
|
}
|
|
|
|
|
|
|
|
// -----------------------------------------------------------------------
|
|
|
|
|
|
|
|
const String& SvtPathOptions::GetBasicPath() const
|
|
|
|
{
|
|
|
|
return pImp->GetBasicPath();
|
|
|
|
}
|
|
|
|
|
|
|
|
// -----------------------------------------------------------------------
|
|
|
|
|
|
|
|
const String& SvtPathOptions::GetBitmapPath() const
|
|
|
|
{
|
|
|
|
return pImp->GetBitmapPath();
|
|
|
|
}
|
|
|
|
|
|
|
|
// -----------------------------------------------------------------------
|
|
|
|
|
|
|
|
const String& SvtPathOptions::GetConfigPath() const
|
|
|
|
{
|
|
|
|
return pImp->GetConfigPath();
|
|
|
|
}
|
|
|
|
|
|
|
|
// -----------------------------------------------------------------------
|
|
|
|
|
|
|
|
const String& SvtPathOptions::GetDictionaryPath() const
|
|
|
|
{
|
|
|
|
return pImp->GetDictionaryPath();
|
|
|
|
}
|
|
|
|
|
|
|
|
// -----------------------------------------------------------------------
|
|
|
|
|
|
|
|
const String& SvtPathOptions::GetFavoritesPath() const
|
|
|
|
{
|
|
|
|
return pImp->GetFavoritesPath();
|
|
|
|
}
|
|
|
|
|
|
|
|
// -----------------------------------------------------------------------
|
|
|
|
|
|
|
|
const String& SvtPathOptions::GetFilterPath() const
|
|
|
|
{
|
|
|
|
return pImp->GetFilterPath();
|
|
|
|
}
|
|
|
|
|
|
|
|
// -----------------------------------------------------------------------
|
|
|
|
|
|
|
|
const String& SvtPathOptions::GetGalleryPath() const
|
|
|
|
{
|
|
|
|
return pImp->GetGalleryPath();
|
|
|
|
}
|
|
|
|
|
|
|
|
// -----------------------------------------------------------------------
|
|
|
|
|
|
|
|
const String& SvtPathOptions::GetGraphicPath() const
|
|
|
|
{
|
|
|
|
return pImp->GetGraphicPath();
|
|
|
|
}
|
|
|
|
|
|
|
|
// -----------------------------------------------------------------------
|
|
|
|
|
|
|
|
const String& SvtPathOptions::GetHelpPath() const
|
|
|
|
{
|
|
|
|
return pImp->GetHelpPath();
|
|
|
|
}
|
|
|
|
|
|
|
|
// -----------------------------------------------------------------------
|
|
|
|
|
|
|
|
const String& SvtPathOptions::GetLinguisticPath() const
|
|
|
|
{
|
|
|
|
return pImp->GetLinguisticPath();
|
|
|
|
}
|
|
|
|
|
|
|
|
// -----------------------------------------------------------------------
|
|
|
|
|
2007-06-19 14:59:31 +00:00
|
|
|
const String& SvtPathOptions::GetFingerprintPath() const
|
|
|
|
{
|
|
|
|
return pImp->GetFingerprintPath();
|
|
|
|
}
|
|
|
|
|
|
|
|
// -----------------------------------------------------------------------
|
|
|
|
|
2000-09-25 09:00:42 +00:00
|
|
|
const String& SvtPathOptions::GetModulePath() const
|
|
|
|
{
|
|
|
|
return pImp->GetModulePath();
|
|
|
|
}
|
|
|
|
|
|
|
|
// -----------------------------------------------------------------------
|
|
|
|
|
|
|
|
const String& SvtPathOptions::GetPalettePath() const
|
|
|
|
{
|
|
|
|
return pImp->GetPalettePath();
|
|
|
|
}
|
|
|
|
|
|
|
|
// -----------------------------------------------------------------------
|
|
|
|
|
|
|
|
const String& SvtPathOptions::GetPluginPath() const
|
|
|
|
{
|
|
|
|
return pImp->GetPluginPath();
|
|
|
|
}
|
|
|
|
|
|
|
|
// -----------------------------------------------------------------------
|
|
|
|
|
|
|
|
const String& SvtPathOptions::GetStoragePath() const
|
|
|
|
{
|
|
|
|
return pImp->GetStoragePath();
|
|
|
|
}
|
|
|
|
|
|
|
|
// -----------------------------------------------------------------------
|
|
|
|
|
|
|
|
const String& SvtPathOptions::GetTempPath() const
|
|
|
|
{
|
|
|
|
return pImp->GetTempPath();
|
|
|
|
}
|
|
|
|
|
|
|
|
// -----------------------------------------------------------------------
|
|
|
|
|
|
|
|
const String& SvtPathOptions::GetTemplatePath() const
|
|
|
|
{
|
|
|
|
return pImp->GetTemplatePath();
|
|
|
|
}
|
|
|
|
|
|
|
|
// -----------------------------------------------------------------------
|
|
|
|
|
|
|
|
const String& SvtPathOptions::GetUserConfigPath() const
|
|
|
|
{
|
|
|
|
return pImp->GetUserConfigPath();
|
|
|
|
}
|
|
|
|
|
2002-03-28 14:59:47 +00:00
|
|
|
const String& SvtPathOptions::GetUIConfigPath() const
|
|
|
|
{
|
|
|
|
return pImp->GetUIConfigPath();
|
|
|
|
}
|
|
|
|
|
2000-09-25 09:00:42 +00:00
|
|
|
// -----------------------------------------------------------------------
|
|
|
|
|
|
|
|
const String& SvtPathOptions::GetWorkPath() const
|
|
|
|
{
|
|
|
|
return pImp->GetWorkPath();
|
|
|
|
}
|
|
|
|
|
|
|
|
// -----------------------------------------------------------------------
|
|
|
|
|
|
|
|
void SvtPathOptions::SetAddinPath( const String& rPath )
|
|
|
|
{
|
|
|
|
pImp->SetAddinPath( rPath );
|
|
|
|
}
|
|
|
|
|
|
|
|
// -----------------------------------------------------------------------
|
|
|
|
|
|
|
|
void SvtPathOptions::SetAutoCorrectPath( const String& rPath )
|
|
|
|
{
|
|
|
|
pImp->SetAutoCorrectPath( rPath );
|
|
|
|
}
|
|
|
|
|
|
|
|
// -----------------------------------------------------------------------
|
|
|
|
|
2000-11-02 07:18:34 +00:00
|
|
|
void SvtPathOptions::SetAutoTextPath( const String& rPath )
|
|
|
|
{
|
|
|
|
pImp->SetAutoTextPath( rPath );
|
|
|
|
}
|
|
|
|
|
|
|
|
// -----------------------------------------------------------------------
|
|
|
|
|
2000-09-25 09:00:42 +00:00
|
|
|
void SvtPathOptions::SetBackupPath( const String& rPath )
|
|
|
|
{
|
|
|
|
pImp->SetBackupPath( rPath );
|
|
|
|
}
|
|
|
|
|
|
|
|
// -----------------------------------------------------------------------
|
|
|
|
|
|
|
|
void SvtPathOptions::SetBasicPath( const String& rPath )
|
|
|
|
{
|
|
|
|
pImp->SetBasicPath( rPath );
|
|
|
|
}
|
|
|
|
|
|
|
|
// -----------------------------------------------------------------------
|
|
|
|
|
|
|
|
void SvtPathOptions::SetBitmapPath( const String& rPath )
|
|
|
|
{
|
|
|
|
pImp->SetBitmapPath( rPath );
|
|
|
|
}
|
|
|
|
|
|
|
|
// -----------------------------------------------------------------------
|
|
|
|
|
|
|
|
void SvtPathOptions::SetConfigPath( const String& rPath )
|
|
|
|
{
|
|
|
|
pImp->SetConfigPath( rPath );
|
|
|
|
}
|
|
|
|
|
|
|
|
// -----------------------------------------------------------------------
|
|
|
|
|
|
|
|
void SvtPathOptions::SetDictionaryPath( const String& rPath )
|
|
|
|
{
|
|
|
|
pImp->SetDictionaryPath( rPath );
|
|
|
|
}
|
|
|
|
|
|
|
|
// -----------------------------------------------------------------------
|
|
|
|
|
|
|
|
void SvtPathOptions::SetFavoritesPath( const String& rPath )
|
|
|
|
{
|
|
|
|
pImp->SetFavoritesPath( rPath );
|
|
|
|
}
|
|
|
|
|
|
|
|
// -----------------------------------------------------------------------
|
|
|
|
|
|
|
|
void SvtPathOptions::SetFilterPath( const String& rPath )
|
|
|
|
{
|
|
|
|
pImp->SetFilterPath( rPath );
|
|
|
|
}
|
|
|
|
|
|
|
|
// -----------------------------------------------------------------------
|
|
|
|
|
|
|
|
void SvtPathOptions::SetGalleryPath( const String& rPath )
|
|
|
|
{
|
|
|
|
pImp->SetGalleryPath( rPath );
|
|
|
|
}
|
|
|
|
|
|
|
|
// -----------------------------------------------------------------------
|
|
|
|
|
|
|
|
void SvtPathOptions::SetGraphicPath( const String& rPath )
|
|
|
|
{
|
|
|
|
pImp->SetGraphicPath( rPath );
|
|
|
|
}
|
|
|
|
|
|
|
|
// -----------------------------------------------------------------------
|
|
|
|
|
|
|
|
void SvtPathOptions::SetHelpPath( const String& rPath )
|
|
|
|
{
|
|
|
|
pImp->SetHelpPath( rPath );
|
|
|
|
}
|
|
|
|
|
|
|
|
// -----------------------------------------------------------------------
|
|
|
|
|
|
|
|
void SvtPathOptions::SetLinguisticPath( const String& rPath )
|
|
|
|
{
|
|
|
|
pImp->SetLinguisticPath( rPath );
|
|
|
|
}
|
|
|
|
|
|
|
|
// -----------------------------------------------------------------------
|
|
|
|
|
|
|
|
void SvtPathOptions::SetModulePath( const String& rPath )
|
|
|
|
{
|
|
|
|
pImp->SetModulePath( rPath );
|
|
|
|
}
|
|
|
|
|
|
|
|
// -----------------------------------------------------------------------
|
|
|
|
|
|
|
|
void SvtPathOptions::SetPalettePath( const String& rPath )
|
|
|
|
{
|
|
|
|
pImp->SetPalettePath( rPath );
|
|
|
|
}
|
|
|
|
|
|
|
|
// -----------------------------------------------------------------------
|
|
|
|
|
|
|
|
void SvtPathOptions::SetPluginPath( const String& rPath )
|
|
|
|
{
|
|
|
|
pImp->SetPluginPath( rPath );
|
|
|
|
}
|
|
|
|
|
|
|
|
// -----------------------------------------------------------------------
|
|
|
|
|
|
|
|
void SvtPathOptions::SetStoragePath( const String& rPath )
|
|
|
|
{
|
|
|
|
pImp->SetStoragePath( rPath );
|
|
|
|
}
|
|
|
|
|
|
|
|
// -----------------------------------------------------------------------
|
|
|
|
|
|
|
|
void SvtPathOptions::SetTempPath( const String& rPath )
|
|
|
|
{
|
|
|
|
pImp->SetTempPath( rPath );
|
|
|
|
}
|
|
|
|
|
|
|
|
// -----------------------------------------------------------------------
|
|
|
|
|
|
|
|
void SvtPathOptions::SetTemplatePath( const String& rPath )
|
|
|
|
{
|
|
|
|
pImp->SetTemplatePath( rPath );
|
|
|
|
}
|
|
|
|
|
|
|
|
// -----------------------------------------------------------------------
|
|
|
|
|
|
|
|
void SvtPathOptions::SetUserConfigPath( const String& rPath )
|
|
|
|
{
|
|
|
|
pImp->SetUserConfigPath( rPath );
|
|
|
|
}
|
|
|
|
|
|
|
|
// -----------------------------------------------------------------------
|
|
|
|
|
|
|
|
void SvtPathOptions::SetWorkPath( const String& rPath )
|
|
|
|
{
|
|
|
|
pImp->SetWorkPath( rPath );
|
|
|
|
}
|
|
|
|
|
2000-09-26 08:26:01 +00:00
|
|
|
// -----------------------------------------------------------------------
|
|
|
|
|
|
|
|
String SvtPathOptions::SubstituteVariable( const String& rVar )
|
|
|
|
{
|
2001-04-11 08:12:25 +00:00
|
|
|
String aRet = pImp->SubstituteAndConvert( rVar );
|
2000-09-26 08:26:01 +00:00
|
|
|
return aRet;
|
|
|
|
}
|
|
|
|
|
2001-11-30 13:00:25 +00:00
|
|
|
String SvtPathOptions::UseVariable( const String& rPath )
|
|
|
|
{
|
|
|
|
String aRet = pImp->UsePathVariables( rPath );
|
|
|
|
return aRet;
|
|
|
|
}
|
|
|
|
|
2000-11-06 11:58:10 +00:00
|
|
|
// -----------------------------------------------------------------------
|
|
|
|
|
|
|
|
sal_Bool SvtPathOptions::SearchFile( String& rIniFile, Pathes ePath )
|
|
|
|
{
|
|
|
|
// check parameter: empty inifile name?
|
|
|
|
if ( !rIniFile.Len() )
|
|
|
|
{
|
|
|
|
DBG_ERRORFILE( "SvtPathOptions::SearchFile(): invalid parameter" );
|
|
|
|
return sal_False;
|
|
|
|
}
|
|
|
|
|
2001-04-11 08:12:25 +00:00
|
|
|
String aIniFile = pImp->SubstVar( rIniFile );
|
2000-11-06 11:58:10 +00:00
|
|
|
sal_Bool bRet = sal_False;
|
|
|
|
|
|
|
|
switch ( ePath )
|
|
|
|
{
|
|
|
|
case PATH_USERCONFIG:
|
|
|
|
{
|
2001-01-19 12:52:46 +00:00
|
|
|
// path is a URL
|
2000-11-06 11:58:10 +00:00
|
|
|
bRet = sal_True;
|
2008-03-25 15:46:55 +00:00
|
|
|
INetURLObject aObj( GetUserConfigPath() );
|
2000-12-14 07:18:58 +00:00
|
|
|
xub_StrLen i, nCount = aIniFile.GetTokenCount( '/' );
|
|
|
|
for ( i = 0; i < nCount; ++i )
|
|
|
|
aObj.insertName( aIniFile.GetToken( i, '/' ) );
|
|
|
|
|
2002-11-05 08:32:36 +00:00
|
|
|
if ( !::utl::UCBContentHelper::Exists( aObj.GetMainURL( INetURLObject::NO_DECODE ) ) )
|
2000-11-06 11:58:10 +00:00
|
|
|
{
|
2008-03-25 15:46:55 +00:00
|
|
|
aObj.SetSmartURL( GetConfigPath() );
|
2000-11-06 11:58:10 +00:00
|
|
|
aObj.insertName( aIniFile );
|
2002-11-05 08:32:36 +00:00
|
|
|
bRet = ::utl::UCBContentHelper::Exists( aObj.GetMainURL( INetURLObject::NO_DECODE ) );
|
2000-11-06 11:58:10 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
if ( bRet )
|
2002-11-05 08:32:36 +00:00
|
|
|
rIniFile = aObj.GetMainURL( INetURLObject::NO_DECODE );
|
2000-11-06 11:58:10 +00:00
|
|
|
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
|
|
|
|
default:
|
|
|
|
{
|
|
|
|
String aPath;
|
|
|
|
switch ( ePath )
|
|
|
|
{
|
|
|
|
case PATH_ADDIN: aPath = GetAddinPath(); break;
|
|
|
|
case PATH_AUTOCORRECT: aPath = GetAutoCorrectPath(); break;
|
|
|
|
case PATH_AUTOTEXT: aPath = GetAutoTextPath(); break;
|
|
|
|
case PATH_BACKUP: aPath = GetBackupPath(); break;
|
|
|
|
case PATH_BASIC: aPath = GetBasicPath(); break;
|
|
|
|
case PATH_BITMAP: aPath = GetBitmapPath(); break;
|
|
|
|
case PATH_CONFIG: aPath = GetConfigPath(); break;
|
|
|
|
case PATH_DICTIONARY: aPath = GetDictionaryPath(); break;
|
|
|
|
case PATH_FAVORITES: aPath = GetFavoritesPath(); break;
|
|
|
|
case PATH_FILTER: aPath = GetFilterPath(); break;
|
|
|
|
case PATH_GALLERY: aPath = GetGalleryPath(); break;
|
|
|
|
case PATH_GRAPHIC: aPath = GetGraphicPath(); break;
|
|
|
|
case PATH_HELP: aPath = GetHelpPath(); break;
|
|
|
|
case PATH_LINGUISTIC: aPath = GetLinguisticPath(); break;
|
|
|
|
case PATH_MODULE: aPath = GetModulePath(); break;
|
|
|
|
case PATH_PALETTE: aPath = GetPalettePath(); break;
|
|
|
|
case PATH_PLUGIN: aPath = GetPluginPath(); break;
|
|
|
|
case PATH_STORAGE: aPath = GetStoragePath(); break;
|
|
|
|
case PATH_TEMP: aPath = GetTempPath(); break;
|
|
|
|
case PATH_TEMPLATE: aPath = GetTemplatePath(); break;
|
|
|
|
case PATH_WORK: aPath = GetWorkPath(); break;
|
2002-03-28 14:59:47 +00:00
|
|
|
case PATH_UICONFIG: aPath = GetUIConfigPath(); break;
|
2007-06-19 14:59:31 +00:00
|
|
|
case PATH_FINGERPRINT: aPath = GetFingerprintPath(); break;
|
2004-06-16 09:08:24 +00:00
|
|
|
case PATH_USERCONFIG:/*-Wall???*/ break;
|
2006-06-19 19:47:51 +00:00
|
|
|
case PATH_COUNT: /*-Wall???*/ break;
|
2000-11-06 11:58:10 +00:00
|
|
|
}
|
2001-01-19 12:52:46 +00:00
|
|
|
|
2006-06-19 19:47:51 +00:00
|
|
|
sal_uInt16 j, nIdx = 0, nTokenCount = aPath.GetTokenCount( SEARCHPATH_DELIMITER );
|
|
|
|
for ( j = 0; j < nTokenCount; ++j )
|
2000-11-06 11:58:10 +00:00
|
|
|
{
|
2001-01-19 12:52:46 +00:00
|
|
|
BOOL bIsURL = TRUE;
|
2000-12-14 14:49:49 +00:00
|
|
|
String aPathToken = aPath.GetToken( 0, SEARCHPATH_DELIMITER, nIdx );
|
|
|
|
INetURLObject aObj( aPathToken );
|
|
|
|
if ( aObj.HasError() )
|
|
|
|
{
|
2001-01-19 12:52:46 +00:00
|
|
|
bIsURL = FALSE;
|
2000-12-14 14:49:49 +00:00
|
|
|
String aURL;
|
|
|
|
if ( LocalFileHelper::ConvertPhysicalNameToURL( aPathToken, aURL ) )
|
|
|
|
aObj.SetURL( aURL );
|
|
|
|
}
|
2001-01-19 12:52:46 +00:00
|
|
|
|
2000-12-14 07:18:58 +00:00
|
|
|
xub_StrLen i, nCount = aIniFile.GetTokenCount( '/' );
|
|
|
|
for ( i = 0; i < nCount; ++i )
|
|
|
|
aObj.insertName( aIniFile.GetToken( i, '/' ) );
|
2002-11-05 08:32:36 +00:00
|
|
|
bRet = ::utl::UCBContentHelper::Exists( aObj.GetMainURL( INetURLObject::NO_DECODE ) );
|
2000-11-06 11:58:10 +00:00
|
|
|
|
|
|
|
if ( bRet )
|
|
|
|
{
|
2001-01-19 12:52:46 +00:00
|
|
|
if ( !bIsURL )
|
2001-08-17 14:35:11 +00:00
|
|
|
::utl::LocalFileHelper::ConvertURLToPhysicalName(
|
2002-11-05 08:32:36 +00:00
|
|
|
aObj.GetMainURL( INetURLObject::NO_DECODE ), rIniFile );
|
2001-08-17 14:35:11 +00:00
|
|
|
else
|
2002-11-05 08:32:36 +00:00
|
|
|
rIniFile = aObj.GetMainURL( INetURLObject::NO_DECODE );
|
2000-11-06 11:58:10 +00:00
|
|
|
break;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
return bRet;
|
|
|
|
}
|
|
|
|
|
2001-06-06 11:48:06 +00:00
|
|
|
// -----------------------------------------------------------------------
|
|
|
|
|
2004-06-30 09:40:48 +00:00
|
|
|
::com::sun::star::lang::Locale SvtPathOptions::GetLocale() const
|
2001-06-06 11:48:06 +00:00
|
|
|
{
|
2004-06-25 15:32:52 +00:00
|
|
|
return pImp->GetLocale();
|
2001-06-06 11:48:06 +00:00
|
|
|
}
|
2002-12-03 15:21:15 +00:00
|
|
|
// -----------------------------------------------------------------------
|
|
|
|
BOOL SvtPathOptions::IsPathReadonly(Pathes ePath)const
|
|
|
|
{
|
|
|
|
return pImp->IsPathReadonly(ePath);
|
|
|
|
}
|
2004-04-29 15:47:45 +00:00
|
|
|
// -----------------------------------------------------------------------
|
|
|
|
const String& SvtPathOptions::GetPath(Pathes ePath)const
|
|
|
|
{
|
|
|
|
return pImp->GetPath(ePath);
|
|
|
|
}
|
|
|
|
// -----------------------------------------------------------------------
|
|
|
|
void SvtPathOptions::SetPath( SvtPathOptions::Pathes ePath, const String& rNewPath )
|
|
|
|
{
|
|
|
|
pImp->SetPath(ePath, rNewPath);
|
|
|
|
}
|
2001-06-06 11:48:06 +00:00
|
|
|
|
|
|
|
// class PathService -----------------------------------------------------
|
2005-04-13 09:49:09 +00:00
|
|
|
#include <com/sun/star/frame/XConfigManager.hpp>
|
|
|
|
#include <com/sun/star/lang/XServiceInfo.hpp>
|
|
|
|
#include <cppuhelper/implbase2.hxx>
|
|
|
|
|
|
|
|
class PathService : public ::cppu::WeakImplHelper2< ::com::sun::star::frame::XConfigManager, ::com::sun::star::lang::XServiceInfo >
|
|
|
|
{
|
|
|
|
virtual ::rtl::OUString SAL_CALL getImplementationName( ) throw(::com::sun::star::uno::RuntimeException);
|
|
|
|
virtual sal_Bool SAL_CALL supportsService( const ::rtl::OUString& ServiceName ) throw(::com::sun::star::uno::RuntimeException);
|
|
|
|
virtual ::com::sun::star::uno::Sequence< ::rtl::OUString > SAL_CALL
|
|
|
|
getSupportedServiceNames( ) throw(::com::sun::star::uno::RuntimeException);
|
|
|
|
virtual ::rtl::OUString SAL_CALL substituteVariables( const ::rtl::OUString& sText ) throw(::com::sun::star::uno::RuntimeException);
|
|
|
|
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);
|
|
|
|
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);
|
|
|
|
virtual void SAL_CALL flush( ) throw(::com::sun::star::uno::RuntimeException);
|
|
|
|
};
|
|
|
|
|
|
|
|
// class PathService -----------------------------------------------------
|
|
|
|
|
2006-06-19 19:47:51 +00:00
|
|
|
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) {}
|
|
|
|
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) {}
|
2000-11-14 16:19:34 +00:00
|
|
|
void SAL_CALL PathService::flush( ) throw(::com::sun::star::uno::RuntimeException) {}
|
|
|
|
|
|
|
|
::rtl::OUString SAL_CALL PathService::substituteVariables( const ::rtl::OUString& sText ) throw(::com::sun::star::uno::RuntimeException)
|
|
|
|
{
|
|
|
|
return SvtPathOptions().SubstituteVariable( sText );
|
|
|
|
}
|
|
|
|
|
|
|
|
::rtl::OUString SAL_CALL PathService::getImplementationName( ) throw(::com::sun::star::uno::RuntimeException)
|
|
|
|
{
|
2009-10-06 07:38:24 +02:00
|
|
|
return OUString::createFromAscii("com.sun.star.comp.unotools.PathService");
|
2000-11-14 16:19:34 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
sal_Bool SAL_CALL PathService::supportsService( const ::rtl::OUString& ServiceName ) throw(::com::sun::star::uno::RuntimeException)
|
|
|
|
{
|
2000-11-14 16:26:07 +00:00
|
|
|
if ( ServiceName.compareToAscii("com.sun.star.config.SpecialConfigManager") == COMPARE_EQUAL )
|
2000-11-14 16:19:34 +00:00
|
|
|
return sal_True;
|
|
|
|
else
|
|
|
|
return sal_False;
|
|
|
|
}
|
|
|
|
|
|
|
|
::com::sun::star::uno::Sequence< ::rtl::OUString > SAL_CALL PathService::getSupportedServiceNames( ) throw(::com::sun::star::uno::RuntimeException)
|
|
|
|
{
|
2000-12-04 11:25:08 +00:00
|
|
|
Sequence< OUString > aRet(1);
|
|
|
|
*aRet.getArray() = OUString::createFromAscii("com.sun.star.config.SpecialConfigManager");
|
2000-11-14 16:19:34 +00:00
|
|
|
return aRet;
|
2002-11-05 08:32:36 +00:00
|
|
|
}
|
2010-10-14 08:27:31 +02:00
|
|
|
|
|
|
|
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
|