blob: 64f33c53c32d753a1a2ede33b11136a97ff55100 [file] [log] [blame]
/**************************************************************
*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*
*************************************************************/
// MARKER(update_precomp.py): autogen include statement, do not remove
#include "precompiled_unotools.hxx"
#include "itemholder1.hxx"
//-----------------------------------------------
// includes
#include <comphelper/processfactory.hxx>
#include <com/sun/star/lang/XComponent.hpp>
#include <unotools/misccfg.hxx>
#include <unotools/undoopt.hxx>
#include <unotools/useroptions.hxx>
#include <unotools/accelcfg.hxx>
#include <unotools/cacheoptions.hxx>
#include <unotools/cmdoptions.hxx>
#include <unotools/compatibility.hxx>
#include <unotools/defaultoptions.hxx>
#include <unotools/dynamicmenuoptions.hxx>
#include <unotools/eventcfg.hxx>
#include <unotools/extendedsecurityoptions.hxx>
#include <unotools/fltrcfg.hxx>
#include <unotools/fontoptions.hxx>
#include <unotools/historyoptions.hxx>
#include <unotools/inetoptions.hxx>
#include <unotools/internaloptions.hxx>
#include <unotools/javaoptions.hxx>
#include <unotools/lingucfg.hxx>
#include <unotools/localisationoptions.hxx>
#include <unotools/moduleoptions.hxx>
#include <unotools/pathoptions.hxx>
#include <unotools/printwarningoptions.hxx>
#include <unotools/optionsdlg.hxx>
#include <unotools/saveopt.hxx>
#include <unotools/searchopt.hxx>
#include <unotools/securityoptions.hxx>
#include <unotools/sourceviewconfig.hxx>
#include <unotools/startoptions.hxx>
#include <unotools/viewoptions.hxx>
#include <unotools/workingsetoptions.hxx>
#include <unotools/xmlaccelcfg.hxx>
#include <unotools/options.hxx>
#include <unotools/syslocaleoptions.hxx>
//-----------------------------------------------
// namespaces
namespace css = ::com::sun::star;
//-----------------------------------------------
// declarations
//-----------------------------------------------
ItemHolder1::ItemHolder1()
: ItemHolderMutexBase()
{
try
{
css::uno::Reference< css::lang::XMultiServiceFactory > xSMGR = ::comphelper::getProcessServiceFactory();
css::uno::Reference< css::lang::XComponent > xCfg(
xSMGR->createInstance(::rtl::OUString::createFromAscii("com.sun.star.configuration.ConfigurationProvider")),
css::uno::UNO_QUERY);
if (xCfg.is())
xCfg->addEventListener(static_cast< css::lang::XEventListener* >(this));
}
// #i37892 got errorhandling from ConfigManager::GetConfigurationProvider()
#ifdef DBG_UTIL
catch(css::uno::Exception& rEx)
{
static sal_Bool bMessage = sal_True;
if(bMessage)
{
bMessage = sal_False;
::rtl::OString sMsg("CreateInstance with arguments exception: ");
sMsg += ::rtl::OString(rEx.Message.getStr(),
rEx.Message.getLength(),
RTL_TEXTENCODING_ASCII_US);
OSL_ENSURE(sal_False, sMsg.getStr());
}
}
#else
catch(css::uno::Exception&){}
#endif
}
//-----------------------------------------------
ItemHolder1::~ItemHolder1()
{
impl_releaseAllItems();
}
//-----------------------------------------------
void ItemHolder1::holdConfigItem(EItem eItem)
{
static ItemHolder1* pHolder = new ItemHolder1();
pHolder->impl_addItem(eItem);
}
//-----------------------------------------------
void SAL_CALL ItemHolder1::disposing(const css::lang::EventObject&)
throw(css::uno::RuntimeException)
{
css::uno::Reference< css::uno::XInterface > xSelfHold(static_cast< css::lang::XEventListener* >(this), css::uno::UNO_QUERY);
impl_releaseAllItems();
}
//-----------------------------------------------
void ItemHolder1::impl_addItem(EItem eItem)
{
::osl::ResettableMutexGuard aLock(m_aLock);
TItems::const_iterator pIt;
for ( pIt = m_lItems.begin();
pIt != m_lItems.end() ;
++pIt )
{
const TItemInfo& rInfo = *pIt;
if (rInfo.eItem == eItem)
return;
}
TItemInfo aNewItem;
aNewItem.eItem = eItem;
impl_newItem(aNewItem);
if (aNewItem.pItem)
m_lItems.push_back(aNewItem);
}
//-----------------------------------------------
void ItemHolder1::impl_releaseAllItems()
{
::osl::ResettableMutexGuard aLock(m_aLock);
TItems::iterator pIt;
for ( pIt = m_lItems.begin();
pIt != m_lItems.end() ;
++pIt )
{
TItemInfo& rInfo = *pIt;
impl_deleteItem(rInfo);
}
m_lItems.clear();
}
//-----------------------------------------------
void ItemHolder1::impl_newItem(TItemInfo& rItem)
{
switch(rItem.eItem)
{
case E_ACCELCFG :
rItem.pItem = new SvtAcceleratorConfiguration();
break;
case E_CMDOPTIONS :
rItem.pItem = new SvtCommandOptions();
break;
case E_COMPATIBILITY :
rItem.pItem = new SvtCompatibilityOptions();
break;
case E_DEFAULTOPTIONS :
rItem.pItem = new SvtDefaultOptions();
break;
case E_DYNAMICMENUOPTIONS :
rItem.pItem = new SvtDynamicMenuOptions();
break;
case E_EVENTCFG :
//rItem.pItem = new GlobalEventConfig();
break;
case E_EXTENDEDSECURITYOPTIONS :
rItem.pItem = new SvtExtendedSecurityOptions();
break;
case E_FLTRCFG :
// no ref count rItem.pItem = new SvtFilterOptions();
break;
case E_FONTOPTIONS :
rItem.pItem = new SvtFontOptions();
break;
case E_HISTORYOPTIONS :
rItem.pItem = new SvtHistoryOptions();
break;
case E_INETOPTIONS :
rItem.pItem = new SvtInetOptions();
break;
case E_INTERNALOPTIONS :
rItem.pItem = new SvtInternalOptions();
break;
case E_JAVAOPTIONS :
// no ref count rItem.pItem = new SvtJavaOptions();
break;
case E_LINGUCFG :
rItem.pItem = new SvtLinguConfig();
break;
case E_LOCALISATIONOPTIONS :
rItem.pItem = new SvtLocalisationOptions();
break;
case E_MODULEOPTIONS :
rItem.pItem = new SvtModuleOptions();
break;
case E_OPTIONSDLGOPTIONS :
rItem.pItem = new SvtOptionsDialogOptions();
break;
case E_PATHOPTIONS :
rItem.pItem = new SvtPathOptions();
break;
case E_PRINTWARNINGOPTIONS :
rItem.pItem = new SvtPrintWarningOptions();
break;
case E_MISCCFG :
rItem.pItem = new ::utl::MiscCfg();
break;
case E_SAVEOPTIONS :
rItem.pItem = new SvtSaveOptions();
break;
case E_SEARCHOPT :
// no ref count rItem.pItem = new SvtSearchOptions();
break;
case E_SECURITYOPTIONS :
rItem.pItem = new SvtSecurityOptions();
break;
case E_SOURCEVIEWCONFIG :
rItem.pItem = new ::utl::SourceViewConfig();
break;
case E_STARTOPTIONS :
rItem.pItem = new SvtStartOptions();
break;
case E_VIEWOPTIONS_DIALOG :
rItem.pItem = new SvtViewOptions(E_DIALOG, ::rtl::OUString());
break;
case E_VIEWOPTIONS_TABDIALOG :
rItem.pItem = new SvtViewOptions(E_TABDIALOG, ::rtl::OUString());
break;
case E_VIEWOPTIONS_TABPAGE :
rItem.pItem = new SvtViewOptions(E_TABPAGE, ::rtl::OUString());
break;
case E_VIEWOPTIONS_WINDOW :
rItem.pItem = new SvtViewOptions(E_WINDOW, ::rtl::OUString());
break;
case E_WORKINGSETOPTIONS :
rItem.pItem = new SvtWorkingSetOptions();
break;
case E_XMLACCELCFG :
// ??? TODO
break;
case E_UNDOOPTIONS :
rItem.pItem = new SvtUndoOptions();
break;
case E_USEROPTIONS :
rItem.pItem = new SvtUserOptions();
break;
case E_SYSLOCALEOPTIONS :
rItem.pItem = new SvtSysLocaleOptions();
break;
default:
OSL_ASSERT( "unknown item type" );
break;
}
}
//-----------------------------------------------
void ItemHolder1::impl_deleteItem(TItemInfo& rItem)
{
if (rItem.pItem)
{
delete rItem.pItem;
rItem.pItem = 0;
}
}