use officecfg for default options

Change-Id: I5241c21fa097c104f1131db61787191d019a5de4
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/119485
Tested-by: Jenkins
Reviewed-by: Noel Grandin <noel.grandin@collabora.co.uk>
This commit is contained in:
Noel Grandin
2021-07-25 18:10:21 +02:00
committed by Noel Grandin
parent 5e93753ca6
commit 6bb901a128
5 changed files with 80 additions and 336 deletions

View File

@@ -62,7 +62,6 @@ using namespace svx;
struct OptPath_Impl
{
SvtDefaultOptions m_aDefOpt;
OUString m_sMultiPathDlg;
Reference< css::util::XPathSettings > m_xPathSettings;
@@ -351,7 +350,7 @@ IMPL_LINK_NOARG(SvxPathTabPage, StandardHdl_Impl, weld::Button&, void)
{
m_xPathBox->selected_foreach([this](weld::TreeIter& rEntry){
PathUserData_Impl* pPathImpl = reinterpret_cast<PathUserData_Impl*>(m_xPathBox->get_id(rEntry).toInt64());
OUString aOldPath = pImpl->m_aDefOpt.GetDefaultPath( pPathImpl->nRealId );
OUString aOldPath = SvtDefaultOptions::GetDefaultPath( pPathImpl->nRealId );
if ( !aOldPath.isEmpty() )
{

View File

@@ -16,29 +16,15 @@
* except in compliance with the License. You may obtain a copy of
* the License at http://www.apache.org/licenses/LICENSE-2.0 .
*/
#ifndef INCLUDED_UNOTOOLS_DEFAULTOPTIONS_HXX
#define INCLUDED_UNOTOOLS_DEFAULTOPTIONS_HXX
#pragma once
#include <unotools/unotoolsdllapi.h>
#include <rtl/ustring.hxx>
#include <unotools/options.hxx>
#include <unotools/pathoptions.hxx>
#include <memory>
class SvtDefaultOptions_Impl;
class SAL_WARN_UNUSED UNOTOOLS_DLLPUBLIC SvtDefaultOptions final : public utl::detail::Options
namespace SvtDefaultOptions
{
private:
std::shared_ptr<SvtDefaultOptions_Impl> pImpl;
public:
SvtDefaultOptions();
virtual ~SvtDefaultOptions() override;
OUString GetDefaultPath(SvtPathOptions::Paths nId) const;
UNOTOOLS_DLLPUBLIC OUString GetDefaultPath(SvtPathOptions::Paths nId);
};
#endif // INCLUDED_UNOTOOLS_DEFAULTOPTIONS_HXX
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */

View File

@@ -39,8 +39,6 @@ enum class EItem
Compatibility ,
CTLOptions , // 2
DefaultOptions ,
EventConfig ,
HistoryOptions ,

View File

@@ -23,335 +23,100 @@
#include <sal/log.hxx>
#include <unotools/defaultoptions.hxx>
#include <unotools/pathoptions.hxx>
#include <unotools/configitem.hxx>
#include <tools/debug.hxx>
#include <com/sun/star/uno/Any.hxx>
#include <com/sun/star/uno/Sequence.hxx>
#include <osl/mutex.hxx>
#include <rtl/instance.hxx>
#include <rtl/ustrbuf.hxx>
#include <officecfg/Office/Common.hxx>
#include "itemholder1.hxx"
using namespace osl;
using namespace utl;
using namespace com::sun::star::uno;
#define DEFAULTPATH_ADDIN 0
#define DEFAULTPATH_AUTOCORRECT 1
#define DEFAULTPATH_AUTOTEXT 2
#define DEFAULTPATH_BACKUP 3
#define DEFAULTPATH_BASIC 4
#define DEFAULTPATH_BITMAP 5
#define DEFAULTPATH_CONFIG 6
#define DEFAULTPATH_DICTIONARY 7
#define DEFAULTPATH_FAVORITES 8
#define DEFAULTPATH_FILTER 9
#define DEFAULTPATH_GALLERY 10
#define DEFAULTPATH_GRAPHIC 11
#define DEFAULTPATH_HELP 12
#define DEFAULTPATH_LINGUISTIC 13
#define DEFAULTPATH_MODULE 14
#define DEFAULTPATH_PALETTE 15
#define DEFAULTPATH_PLUGIN 16
#define DEFAULTPATH_TEMP 17
#define DEFAULTPATH_TEMPLATE 18
#define DEFAULTPATH_USERCONFIG 19
#define DEFAULTPATH_WORK 20
#define DEFAULTPATH_CLASSIFICATION 21
#define DEFAULTPATH_USERDICTIONARY 22
// class SvtDefaultOptions_Impl ------------------------------------------
class SvtDefaultOptions_Impl : public utl::ConfigItem
namespace SvtDefaultOptions
{
public:
OUString m_aAddinPath;
OUString m_aAutoCorrectPath;
OUString m_aAutoTextPath;
OUString m_aBackupPath;
OUString m_aBasicPath;
OUString m_aBitmapPath;
OUString m_aConfigPath;
OUString m_aDictionaryPath;
OUString m_aFavoritesPath;
OUString m_aFilterPath;
OUString m_aGalleryPath;
OUString m_aGraphicPath;
OUString m_aHelpPath;
OUString m_aLinguisticPath;
OUString m_aModulePath;
OUString m_aPalettePath;
OUString m_aPluginPath;
OUString m_aTempPath;
OUString m_aTemplatePath;
OUString m_aUserConfigPath;
OUString m_aWorkPath;
OUString m_aClassificationPath;
SvtDefaultOptions_Impl();
virtual ~SvtDefaultOptions_Impl() override;
OUString GetDefaultPath( SvtPathOptions::Paths nId ) const;
virtual void Notify( const css::uno::Sequence<OUString>& aPropertyNames) override;
private:
virtual void ImplCommit() final override;
};
// global ----------------------------------------------------------------
namespace {
std::weak_ptr<SvtDefaultOptions_Impl> g_pOptions;
}
typedef OUString SvtDefaultOptions_Impl::*PathStrPtr;
namespace {
struct PathToDefaultMapping_Impl
OUString GetDefaultPath( SvtPathOptions::Paths nId )
{
SvtPathOptions::Paths _ePath;
PathStrPtr _pDefaultPath;
};
}
PathToDefaultMapping_Impl const PathMap_Impl[] =
{
{ SvtPathOptions::Paths::AddIn, &SvtDefaultOptions_Impl::m_aAddinPath },
{ SvtPathOptions::Paths::AutoCorrect, &SvtDefaultOptions_Impl::m_aAutoCorrectPath },
{ SvtPathOptions::Paths::AutoText, &SvtDefaultOptions_Impl::m_aAutoTextPath },
{ SvtPathOptions::Paths::Backup, &SvtDefaultOptions_Impl::m_aBackupPath },
{ SvtPathOptions::Paths::Basic, &SvtDefaultOptions_Impl::m_aBasicPath },
{ SvtPathOptions::Paths::Bitmap, &SvtDefaultOptions_Impl::m_aBitmapPath },
{ SvtPathOptions::Paths::Config, &SvtDefaultOptions_Impl::m_aConfigPath },
{ SvtPathOptions::Paths::Dictionary, &SvtDefaultOptions_Impl::m_aDictionaryPath },
{ SvtPathOptions::Paths::Favorites, &SvtDefaultOptions_Impl::m_aFavoritesPath },
{ SvtPathOptions::Paths::Filter, &SvtDefaultOptions_Impl::m_aFilterPath },
{ SvtPathOptions::Paths::Gallery, &SvtDefaultOptions_Impl::m_aGalleryPath },
{ SvtPathOptions::Paths::Graphic, &SvtDefaultOptions_Impl::m_aGraphicPath },
{ SvtPathOptions::Paths::Help, &SvtDefaultOptions_Impl::m_aHelpPath },
{ SvtPathOptions::Paths::Linguistic, &SvtDefaultOptions_Impl::m_aLinguisticPath },
{ SvtPathOptions::Paths::Module, &SvtDefaultOptions_Impl::m_aModulePath },
{ SvtPathOptions::Paths::Palette, &SvtDefaultOptions_Impl::m_aPalettePath },
{ SvtPathOptions::Paths::Plugin, &SvtDefaultOptions_Impl::m_aPluginPath },
{ SvtPathOptions::Paths::Temp, &SvtDefaultOptions_Impl::m_aTempPath },
{ SvtPathOptions::Paths::Template, &SvtDefaultOptions_Impl::m_aTemplatePath },
{ SvtPathOptions::Paths::UserConfig, &SvtDefaultOptions_Impl::m_aUserConfigPath },
{ SvtPathOptions::Paths::Work, &SvtDefaultOptions_Impl::m_aWorkPath },
{ SvtPathOptions::Paths::Classification, &SvtDefaultOptions_Impl::m_aClassificationPath }
};
// functions -------------------------------------------------------------
static Sequence< OUString > GetDefaultPropertyNames()
{
static const char* aPropNames[] =
{
"Addin", // PATH_ADDIN
"AutoCorrect", // PATH_AUTOCORRECT
"AutoText", // PATH_AUTOTEXT
"Backup", // PATH_BACKUP
"Basic", // PATH_BASIC
"Bitmap", // PATH_BITMAP
"Config", // PATH_CONFIG
"Dictionary", // PATH_DICTIONARY
"Favorite", // PATH_FAVORITES
"Filter", // PATH_FILTER
"Gallery", // PATH_GALLERY
"Graphic", // PATH_GRAPHIC
"Help", // PATH_HELP
"Linguistic", // PATH_LINGUISTIC
"Module", // PATH_MODULE
"Palette", // PATH_PALETTE
"Plugin", // PATH_PLUGIN
"Temp", // PATH_TEMP
"Template", // PATH_TEMPLATE
"UserConfig", // PATH_USERCONFIG
"Work", // PATH_WORK
"Classification" // PATH_CLASSIFICATION
};
const int nCount = SAL_N_ELEMENTS( aPropNames );
Sequence< OUString > aNames( nCount );
OUString* pNames = aNames.getArray();
for ( int i = 0; i < nCount; i++ )
pNames[i] = OUString::createFromAscii( aPropNames[i] );
return aNames;
}
void SvtDefaultOptions_Impl::Notify( const Sequence< OUString >& )
{
// no notification, will never be changed
}
void SvtDefaultOptions_Impl::ImplCommit()
{
// will never be changed
}
// class SvtDefaultOptions_Impl ------------------------------------------
OUString SvtDefaultOptions_Impl::GetDefaultPath( SvtPathOptions::Paths nId ) const
{
OUString aRet;
sal_uInt16 nIdx = 0;
while ( PathMap_Impl[nIdx]._ePath <= SvtPathOptions::Paths::Classification )
{
if ( nId == PathMap_Impl[nIdx]._ePath && PathMap_Impl[nIdx]._pDefaultPath )
SvtPathOptions aPathOpt;
auto seqToPath = [&aPathOpt] (const css::uno::Sequence<OUString> & rSeq)
{
aRet = this->*(PathMap_Impl[nIdx]._pDefaultPath);
if ( nId == SvtPathOptions::Paths::AddIn ||
nId == SvtPathOptions::Paths::Filter ||
nId == SvtPathOptions::Paths::Help ||
nId == SvtPathOptions::Paths::Module ||
nId == SvtPathOptions::Paths::Plugin )
// single paths
sal_Int32 nCount = rSeq.getLength();
OUStringBuffer aFullPathBuf(nCount * 40);
for ( sal_Int32 nPosition = 0; nPosition < nCount; ++nPosition )
{
OUString aTmp;
osl::FileBase::getFileURLFromSystemPath( aRet, aTmp );
aRet = aTmp;
aFullPathBuf.append(aPathOpt.SubstituteVariable( rSeq[ nPosition ] ));
if ( nPosition < nCount-1 )
aFullPathBuf.append(";");
}
return aFullPathBuf.makeStringAndClear();
};
break;
}
++nIdx;
OUString aRet;
switch (nId)
{
case SvtPathOptions::Paths::AddIn:
aRet = aPathOpt.SubstituteVariable(officecfg::Office::Common::Path::Default::Addin::get()); break;
case SvtPathOptions::Paths::AutoCorrect:
aRet = seqToPath(officecfg::Office::Common::Path::Default::AutoCorrect::get()); break;
case SvtPathOptions::Paths::AutoText:
aRet = seqToPath(officecfg::Office::Common::Path::Default::AutoText::get()); break;
case SvtPathOptions::Paths::Backup:
aRet = aPathOpt.SubstituteVariable(officecfg::Office::Common::Path::Default::Backup::get()); break;
case SvtPathOptions::Paths::Basic:
aRet = seqToPath(officecfg::Office::Common::Path::Default::Basic::get()); break;
case SvtPathOptions::Paths::Bitmap:
aRet = aPathOpt.SubstituteVariable(officecfg::Office::Common::Path::Default::Bitmap::get()); break;
case SvtPathOptions::Paths::Config:
aRet = aPathOpt.SubstituteVariable(officecfg::Office::Common::Path::Default::Config::get()); break;
case SvtPathOptions::Paths::Dictionary:
aRet = aPathOpt.SubstituteVariable(officecfg::Office::Common::Path::Default::Dictionary::get()); break;
case SvtPathOptions::Paths::Favorites:
aRet = aPathOpt.SubstituteVariable(officecfg::Office::Common::Path::Default::Favorite::get()); break;
case SvtPathOptions::Paths::Filter:
aRet = aPathOpt.SubstituteVariable(officecfg::Office::Common::Path::Default::Filter::get()); break;
case SvtPathOptions::Paths::Gallery:
aRet = seqToPath(officecfg::Office::Common::Path::Default::Gallery::get()); break;
case SvtPathOptions::Paths::Graphic:
aRet = aPathOpt.SubstituteVariable(officecfg::Office::Common::Path::Default::Graphic::get()); break;
case SvtPathOptions::Paths::Help:
aRet = aPathOpt.SubstituteVariable(officecfg::Office::Common::Path::Default::Help::get()); break;
case SvtPathOptions::Paths::Linguistic:
aRet = aPathOpt.SubstituteVariable(officecfg::Office::Common::Path::Default::Linguistic::get()); break;
case SvtPathOptions::Paths::Module:
aRet = aPathOpt.SubstituteVariable(officecfg::Office::Common::Path::Default::Module::get()); break;
case SvtPathOptions::Paths::Palette:
aRet = aPathOpt.SubstituteVariable(officecfg::Office::Common::Path::Default::Palette::get()); break;
case SvtPathOptions::Paths::Plugin:
aRet = seqToPath(officecfg::Office::Common::Path::Default::Plugin::get()); break;
case SvtPathOptions::Paths::Temp:
aRet = aPathOpt.SubstituteVariable(officecfg::Office::Common::Path::Default::Temp::get()); break;
case SvtPathOptions::Paths::Template:
aRet = seqToPath(officecfg::Office::Common::Path::Default::Template::get()); break;
case SvtPathOptions::Paths::UserConfig:
aRet = aPathOpt.SubstituteVariable(officecfg::Office::Common::Path::Default::UserConfig::get()); break;
case SvtPathOptions::Paths::Work:
aRet = aPathOpt.SubstituteVariable(officecfg::Office::Common::Path::Default::Work::get()); break;
case SvtPathOptions::Paths::Classification:
aRet = aPathOpt.SubstituteVariable(officecfg::Office::Common::Path::Default::Classification::get()); break;
default:
assert(false);
}
if ( nId == SvtPathOptions::Paths::AddIn ||
nId == SvtPathOptions::Paths::Filter ||
nId == SvtPathOptions::Paths::Help ||
nId == SvtPathOptions::Paths::Module ||
nId == SvtPathOptions::Paths::Plugin )
{
OUString aTmp;
osl::FileBase::getFileURLFromSystemPath( aRet, aTmp );
aRet = aTmp;
}
return aRet;
}
SvtDefaultOptions_Impl::SvtDefaultOptions_Impl() : ConfigItem( "Office.Common/Path/Default" )
{
Sequence< OUString > aNames = GetDefaultPropertyNames();
Sequence< Any > aValues = GetProperties( aNames );
EnableNotification( aNames );
const Any* pValues = aValues.getConstArray();
DBG_ASSERT( aValues.getLength() == aNames.getLength(), "GetProperties failed" );
if ( aValues.getLength() != aNames.getLength() )
return;
} // namespace
SvtPathOptions aPathOpt;
OUString aTempStr;
OUStringBuffer aFullPathBuf;
for ( int nProp = 0; nProp < aNames.getLength(); nProp++ )
{
if ( pValues[nProp].hasValue() )
{
switch ( pValues[nProp].getValueTypeClass() )
{
case css::uno::TypeClass_STRING :
{
// multi paths
if ( pValues[nProp] >>= aTempStr )
aFullPathBuf = aPathOpt.SubstituteVariable( aTempStr );
else
{
SAL_WARN( "unotools.config", "any operator >>= failed" );
}
break;
}
case css::uno::TypeClass_SEQUENCE :
{
// single paths
aFullPathBuf.setLength(0);
Sequence < OUString > aList;
if ( pValues[nProp] >>= aList )
{
sal_Int32 nCount = aList.getLength();
for ( sal_Int32 nPosition = 0; nPosition < nCount; ++nPosition )
{
aFullPathBuf.append(aPathOpt.SubstituteVariable( aList[ nPosition ] ));
if ( nPosition < nCount-1 )
aFullPathBuf.append(";");
}
}
else
{
SAL_WARN( "unotools.config", "any operator >>= failed" );
}
break;
}
default:
{
SAL_WARN( "unotools.config", "Wrong any type" );
}
}
auto aFullPath = aFullPathBuf.makeStringAndClear();
switch ( nProp )
{
case DEFAULTPATH_ADDIN: m_aAddinPath = aFullPath; break;
case DEFAULTPATH_AUTOCORRECT: m_aAutoCorrectPath = aFullPath; break;
case DEFAULTPATH_AUTOTEXT: m_aAutoTextPath = aFullPath; break;
case DEFAULTPATH_BACKUP: m_aBackupPath = aFullPath; break;
case DEFAULTPATH_BASIC: m_aBasicPath = aFullPath; break;
case DEFAULTPATH_BITMAP: m_aBitmapPath = aFullPath; break;
case DEFAULTPATH_CONFIG: m_aConfigPath = aFullPath; break;
case DEFAULTPATH_DICTIONARY: m_aDictionaryPath = aFullPath; break;
case DEFAULTPATH_FAVORITES: m_aFavoritesPath = aFullPath; break;
case DEFAULTPATH_FILTER: m_aFilterPath = aFullPath; break;
case DEFAULTPATH_GALLERY: m_aGalleryPath = aFullPath; break;
case DEFAULTPATH_GRAPHIC: m_aGraphicPath = aFullPath; break;
case DEFAULTPATH_HELP: m_aHelpPath = aFullPath; break;
case DEFAULTPATH_LINGUISTIC: m_aLinguisticPath = aFullPath; break;
case DEFAULTPATH_MODULE: m_aModulePath = aFullPath; break;
case DEFAULTPATH_PALETTE: m_aPalettePath = aFullPath; break;
case DEFAULTPATH_PLUGIN: m_aPluginPath = aFullPath; break;
case DEFAULTPATH_TEMP: m_aTempPath = aFullPath; break;
case DEFAULTPATH_TEMPLATE: m_aTemplatePath = aFullPath; break;
case DEFAULTPATH_USERCONFIG: m_aUserConfigPath = aFullPath; break;
case DEFAULTPATH_WORK: m_aWorkPath = aFullPath; break;
case DEFAULTPATH_CLASSIFICATION: m_aClassificationPath = aFullPath;break;
case DEFAULTPATH_USERDICTIONARY: break;
default:
SAL_WARN( "unotools.config", "invalid index to load a default path" );
}
}
}
}
SvtDefaultOptions_Impl::~SvtDefaultOptions_Impl()
{
if ( IsModified() )
Commit();
}
// class SvtDefaultOptions -----------------------------------------------
namespace { struct lclMutex : public rtl::Static< ::osl::Mutex, lclMutex > {}; }
SvtDefaultOptions::SvtDefaultOptions()
{
// Global access, must be guarded (multithreading)
::osl::MutexGuard aGuard( lclMutex::get() );
pImpl = g_pOptions.lock();
if ( !pImpl )
{
pImpl = std::make_shared<SvtDefaultOptions_Impl>();
g_pOptions = pImpl;
ItemHolder1::holdConfigItem(EItem::DefaultOptions);
}
}
SvtDefaultOptions::~SvtDefaultOptions()
{
// Global access, must be guarded (multithreading)
::osl::MutexGuard aGuard( lclMutex::get() );
pImpl.reset();
}
OUString SvtDefaultOptions::GetDefaultPath( SvtPathOptions::Paths nId ) const
{
return pImpl->GetDefaultPath( nId );
}
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */

View File

@@ -125,10 +125,6 @@ void ItemHolder1::impl_newItem(TItemInfo& rItem)
rItem.pItem.reset( new SvtCompatibilityOptions() );
break;
case EItem::DefaultOptions :
rItem.pItem.reset( new SvtDefaultOptions() );
break;
case EItem::EventConfig :
//rItem.pItem.reset( new GlobalEventConfig() );
break;