diff options
Diffstat (limited to 'cui/source/options/treeopt.cxx')
-rw-r--r-- | cui/source/options/treeopt.cxx | 2779 |
1 files changed, 0 insertions, 2779 deletions
diff --git a/cui/source/options/treeopt.cxx b/cui/source/options/treeopt.cxx deleted file mode 100644 index a6ae33454..000000000 --- a/cui/source/options/treeopt.cxx +++ /dev/null @@ -1,2779 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * This file is part of OpenOffice.org. - * - * 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. - * - * 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). - * - * 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. - * - ************************************************************************/ - -#include <com/sun/star/beans/XPropertySet.hpp> -#include <com/sun/star/lang/XMultiServiceFactory.hpp> -#include <com/sun/star/loader/CannotActivateFactoryException.hpp> -#include <com/sun/star/linguistic2/XDictionaryList.hpp> -#include <com/sun/star/frame/XDesktop.hpp> -#include <com/sun/star/frame/XFrame.hpp> -#include <com/sun/star/frame/XModuleManager.hpp> -#include <com/sun/star/util/XMacroExpander.hpp> -#include <osl/module.hxx> -#include <com/sun/star/util/XCloseable.hpp> -#include <com/sun/star/frame/XLoadable.hpp> -#include <tools/rcid.h> -#include <tools/shl.hxx> -#include <tools/urlobj.hxx> -#include <comphelper/processfactory.hxx> -#include <toolkit/helper/vclunohelper.hxx> -#include <com/sun/star/beans/PropertyValue.hpp> -#include <com/sun/star/container/XNameContainer.hpp> -#include <com/sun/star/container/XNameAccess.hpp> -#include <com/sun/star/oooimprovement/XCoreController.hpp> -#include <comphelper/configurationhelper.hxx> -#include <com/sun/star/awt/XDialogProvider.hpp> -#include <com/sun/star/awt/XDialogProvider2.hpp> -#include <com/sun/star/awt/XContainerWindowProvider.hpp> -#include <com/sun/star/awt/XDialogEventHandler.hpp> -#include <com/sun/star/awt/XContainerWindowEventHandler.hpp> -#include <com/sun/star/awt/PosSize.hpp> -#include <com/sun/star/awt/XTopWindow.hpp> -#include <com/sun/star/awt/XControl.hpp> -#include <com/sun/star/awt/XTabController.hpp> -#include <vcl/help.hxx> -#include <linguistic/misc.hxx> -#include <svtools/helpopt.hxx> -#include <unotools/moduleoptions.hxx> -#include <svl/languageoptions.hxx> -#include <unotools/optionsdlg.hxx> -#include <sfx2/module.hxx> -#include <vcl/msgbox.hxx> -#include <sfx2/dispatch.hxx> -#include <vcl/waitobj.hxx> -#include <svl/slstitm.hxx> -#include <sfx2/viewfrm.hxx> -#include <unotools/viewoptions.hxx> -#include <sfx2/printopt.hxx> -#include <osl/module.h> -#include <osl/process.h> -#include <rtl/bootstrap.hxx> -#include <unotools/misccfg.hxx> -#include <sfx2/objsh.hxx> -#include <sfx2/viewsh.hxx> -#include <sfx2/tplpitem.hxx> -#include <svtools/apearcfg.hxx> -#include <unotools/linguprops.hxx> -#include <sfx2/app.hxx> -#include <svx/xdef.hxx> -#include <svx/xflclit.hxx> -#include <svx/xpool.hxx> -#include "cuitabarea.hxx" -#include <svx/ofaitem.hxx> -#include "opthtml.hxx" -#include "optcolor.hxx" -#include "optctl.hxx" -#include "optjava.hxx" -#include "optsave.hxx" -#include "optpath.hxx" -#include "cuioptgenrl.hxx" -#include "optlingu.hxx" -#include "optinet2.hxx" -#include "optasian.hxx" -#include "optaccessibility.hxx" -#include "optjsearch.hxx" -#include "connpooloptions.hxx" -#include "optupdt.hxx" -#include <optimprove.hxx> -#include "optchart.hxx" -#include "optgdlg.hxx" -#include "optmemory.hxx" -#include "optfltr.hxx" -#include <cuires.hrc> -#include "helpid.hrc" -#include <dialmgr.hxx> -#include "treeopt.hxx" -#include "treeopt.hrc" -#include "fontsubs.hxx" -#include <editeng/unolingu.hxx> -#include <svx/xtable.hxx> -#include "connpoolconfig.hxx" -#include "dbregister.hxx" -#include "dbregisterednamesconfig.hxx" -#include "cfgchart.hxx" -#include <svx/dialogs.hrc> - -#ifndef _SVX_LANGITEM_HXX -#define ITEMID_LANGUAGE SID_ATTR_CHAR_LANGUAGE -#include <editeng/langitem.hxx> -#endif - - -#include <editeng/optitems.hxx> - -#include <svx/drawitem.hxx> -#include <rtl/uri.hxx> - -#ifdef LINUX -#include <string.h> -#include <sys/types.h> -#include <sys/stat.h> -#include <unistd.h> -#endif - -using namespace ::com::sun::star; -using namespace ::com::sun::star::beans; -using namespace ::com::sun::star::container; -using namespace ::com::sun::star::frame; -using namespace ::com::sun::star::lang; -using namespace ::com::sun::star::linguistic2; -using namespace ::com::sun::star::uno; -using namespace ::com::sun::star::util; - -#ifdef C2U - #error "Who define C2U before! I use it to create const ascii strings ..." -#else - #define C2U(cChar) rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( cChar ) ) -#endif - -#define HINT_TIMEOUT 200 -#define SELECT_FIRST_TIMEOUT 0 -#define SELECT_TIMEOUT 300 -#define COLORPAGE_UNKNOWN ((sal_uInt16)0xFFFF) -#define EXPAND_PROTOCOL "vnd.sun.star.expand:" - -LastPageSaver* OfaTreeOptionsDialog::pLastPageSaver = NULL; - -// some stuff for easier changes for SvtViewOptions -static const sal_Char* pViewOptDataName = "page data"; -#define VIEWOPT_DATANAME rtl::OUString::createFromAscii( pViewOptDataName ) - -static XOutdevItemPool* mpStaticXOutdevItemPool = 0L; - -static inline void SetViewOptUserItem( SvtViewOptions& rOpt, const String& rData ) -{ - rOpt.SetUserItem( VIEWOPT_DATANAME, makeAny( rtl::OUString( rData ) ) ); -} - -static inline String GetViewOptUserItem( const SvtViewOptions& rOpt ) -{ - Any aAny( rOpt.GetUserItem( VIEWOPT_DATANAME ) ); - rtl::OUString aUserData; - aAny >>= aUserData; - - return String( aUserData ); -} - -struct ModuleToGroupNameMap_Impl -{ - const char* m_pModule; - String m_sGroupName; - sal_uInt16 m_nNodeId; -}; - -static OfaPageResource* pPageRes = NULL; - -static ModuleToGroupNameMap_Impl ModuleMap[] = -{ - { "ProductName", String::EmptyString(), SID_GENERAL_OPTIONS }, - { "LanguageSettings", String::EmptyString(), SID_LANGUAGE_OPTIONS }, - { "Internet", String::EmptyString(), SID_INET_DLG }, - { "LoadSave", String::EmptyString(), SID_FILTER_DLG }, - { "Writer", String::EmptyString(), SID_SW_EDITOPTIONS }, - { "WriterWeb", String::EmptyString(), SID_SW_ONLINEOPTIONS }, - { "Math", String::EmptyString(), SID_SM_EDITOPTIONS }, - { "Calc", String::EmptyString(), SID_SC_EDITOPTIONS }, - { "Impress", String::EmptyString(), SID_SD_EDITOPTIONS }, - { "Draw", String::EmptyString(), SID_SD_GRAPHIC_OPTIONS }, - { "Charts", String::EmptyString(), SID_SCH_EDITOPTIONS }, - { "Base", String::EmptyString(), SID_SB_STARBASEOPTIONS }, - - { NULL, String::EmptyString(), 0xFFFF } -}; - -static void setGroupName( const rtl::OUString& rModule, const String& rGroupName ) -{ - sal_uInt16 nIndex = 0; - while ( ModuleMap[ nIndex ].m_pModule ) - { - rtl::OUString sTemp = - rtl::OUString::createFromAscii( ModuleMap[ nIndex ].m_pModule ); - if ( sTemp == rModule ) - { - ModuleMap[ nIndex ].m_sGroupName = rGroupName; - break; - } - ++nIndex; - } -} - -static String getGroupName( const rtl::OUString& rModule, bool bForced ) -{ - String sGroupName; - sal_uInt16 nIndex = 0; - while ( ModuleMap[ nIndex ].m_pModule ) - { - rtl::OUString sTemp = - rtl::OUString::createFromAscii( ModuleMap[ nIndex ].m_pModule ); - if ( sTemp == rModule ) - { - sGroupName = ModuleMap[ nIndex ].m_sGroupName; - break; - } - ++nIndex; - } - - if ( sGroupName.Len() == 0 && bForced ) - { - if ( !pPageRes ) - pPageRes = new OfaPageResource; - - if ( rModule == C2U("Writer") ) - sGroupName = pPageRes->GetTextArray().GetString(0); - else if ( rModule == C2U("WriterWeb") ) - sGroupName = pPageRes->GetHTMLArray().GetString(0); - else if ( rModule == C2U("Calc") ) - sGroupName = pPageRes->GetCalcArray().GetString(0); - else if ( rModule == C2U("Impress") ) - sGroupName = pPageRes->GetImpressArray().GetString(0); - else if ( rModule == C2U("Draw") ) - sGroupName = pPageRes->GetDrawArray().GetString(0); - else if ( rModule == C2U("Math") ) - sGroupName = pPageRes->GetStarMathArray().GetString(0); - else if ( rModule == C2U("Base") ) - sGroupName = pPageRes->GetDatasourcesArray().GetString(0); - } - return sGroupName; -} - -static void deleteGroupNames() -{ - sal_uInt16 nIndex = 0; - while ( ModuleMap[ nIndex ].m_pModule ) - ModuleMap[ nIndex++ ].m_sGroupName = String::EmptyString(); -} - -static sal_uInt16 getGroupNodeId( const rtl::OUString& rModule ) -{ - sal_uInt16 nNodeId = 0xFFFF, nIndex = 0; - while ( ModuleMap[ nIndex ].m_pModule ) - { - rtl::OUString sTemp = - rtl::OUString::createFromAscii( ModuleMap[ nIndex ].m_pModule ); - if ( sTemp == rModule ) - { - nNodeId = ModuleMap[ nIndex ].m_nNodeId; - break; - } - ++nIndex; - } - - return nNodeId; -} - -class MailMergeCfg_Impl : public utl::ConfigItem -{ - friend class SvxEMailTabPage; - // variables - sal_Bool bIsEmailSupported; - -public: - MailMergeCfg_Impl(); - virtual ~MailMergeCfg_Impl(); - - virtual void Commit(); - virtual void Notify( const com::sun::star::uno::Sequence< rtl::OUString >& _rPropertyNames); - - sal_Bool IsEmailSupported() const {return bIsEmailSupported;} - -}; - -MailMergeCfg_Impl::MailMergeCfg_Impl() : - utl::ConfigItem(C2U("Office.Writer/MailMergeWizard")), - bIsEmailSupported(sal_False) -{ - Sequence<rtl::OUString> aNames(1); - aNames.getArray()[0] = C2U("EMailSupported"); - const Sequence< Any > aValues = GetProperties(aNames); - const Any* pValues = aValues.getConstArray(); - if(aValues.getLength() && pValues[0].hasValue()) - pValues[0] >>= bIsEmailSupported; -} - -MailMergeCfg_Impl::~MailMergeCfg_Impl() -{ -} -/* -------------------------------------------------------------------------*/ -void MailMergeCfg_Impl::Commit() -{ -} - -void MailMergeCfg_Impl::Notify( const com::sun::star::uno::Sequence< rtl::OUString >& ) -{ -} - -//typedef SfxTabPage* (*FNCreateTabPage)( Window *pParent, const SfxItemSet &rAttrSet ); -SfxTabPage* CreateGeneralTabPage( sal_uInt16 nId, Window* pParent, const SfxItemSet& rSet ) -{ - CreateTabPage fnCreate = 0; - switch(nId) - { - case RID_SFXPAGE_SAVE: fnCreate = &SvxSaveTabPage::Create; break; - case RID_SFXPAGE_PATH: fnCreate = &SvxPathTabPage::Create; break; - case RID_SFXPAGE_GENERAL: fnCreate = &SvxGeneralTabPage::Create; break; - case RID_SFXPAGE_PRINTOPTIONS: fnCreate = &SfxCommonPrintOptionsTabPage::Create; break; - case OFA_TP_LANGUAGES: fnCreate = &OfaLanguagesTabPage::Create; break; - case RID_SFXPAGE_LINGU: fnCreate = &SvxLinguTabPage::Create; break; - case RID_SVXPAGE_COLOR: fnCreate = &SvxColorTabPage::Create; break; - case OFA_TP_VIEW: fnCreate = &OfaViewTabPage::Create; break; - case OFA_TP_MISC: fnCreate = &OfaMiscTabPage::Create; break; - case OFA_TP_MEMORY: fnCreate = &OfaMemoryOptionsPage::Create; break; - case RID_SVXPAGE_ASIAN_LAYOUT: fnCreate = &SvxAsianLayoutPage::Create; break; - case RID_SVX_FONT_SUBSTITUTION: fnCreate = &SvxFontSubstTabPage::Create; break; - case RID_SVXPAGE_INET_PROXY: fnCreate = &SvxProxyTabPage::Create; break; - case RID_SVXPAGE_INET_SECURITY: fnCreate = &SvxSecurityTabPage::Create; break; - case RID_SVXPAGE_INET_MAIL: fnCreate = &SvxEMailTabPage::Create; break; - case RID_SVXPAGE_COLORCONFIG: fnCreate = &SvxColorOptionsTabPage::Create; break; - case RID_OFAPAGE_HTMLOPT: fnCreate = &OfaHtmlTabPage::Create; break; - case SID_OPTFILTER_MSOFFICE: fnCreate = &OfaMSFilterTabPage::Create; break; - case RID_OFAPAGE_MSFILTEROPT2: fnCreate = &OfaMSFilterTabPage2::Create; break; - case RID_SVXPAGE_JSEARCH_OPTIONS: fnCreate = &SvxJSearchOptionsPage::Create ; break; - case SID_SB_CONNECTIONPOOLING: fnCreate = &::offapp::ConnectionPoolOptionsPage::Create; break; - case SID_SB_DBREGISTEROPTIONS: fnCreate = &::svx::DbRegistrationOptionsPage::Create; break; - case RID_SVXPAGE_ACCESSIBILITYCONFIG: fnCreate = &SvxAccessibilityOptionsTabPage::Create; break; - case RID_SVXPAGE_SSO: fnCreate = GetSSOCreator(); break; - case RID_SVXPAGE_OPTIONS_CTL: fnCreate = &SvxCTLOptionsPage::Create ; break; - case RID_SVXPAGE_INET_MOZPLUGIN: fnCreate = &MozPluginTabPage::Create; break; - case RID_SVXPAGE_OPTIONS_JAVA: fnCreate = &SvxJavaOptionsPage::Create ; break; - case RID_SVXPAGE_ONLINEUPDATE: fnCreate = &SvxOnlineUpdateTabPage::Create; break; - case RID_OPTPAGE_CHART_DEFCOLORS: fnCreate = &SvxDefaultColorOptPage::Create; break; - case RID_SVXPAGE_IMPROVEMENT: fnCreate = &SvxImprovementOptionsPage::Create; break; - } - - SfxTabPage* pRet = fnCreate ? (*fnCreate)( pParent, rSet ) : NULL; - return pRet; -} - - -struct OptionsMapping_Impl -{ - const char* m_pGroupName; - const char* m_pPageName; - sal_uInt16 m_nPageId; -}; - -static OptionsMapping_Impl const OptionsMap_Impl[] = -{ -// GROUP PAGE PAGE-ID - { "ProductName", NULL, SID_GENERAL_OPTIONS }, - { "ProductName", "UserData", RID_SFXPAGE_GENERAL }, - { "ProductName", "General", OFA_TP_MISC }, - { "ProductName", "Memory", OFA_TP_MEMORY }, - { "ProductName", "View", OFA_TP_VIEW }, - { "ProductName", "Print", RID_SFXPAGE_PRINTOPTIONS }, - { "ProductName", "Paths", RID_SFXPAGE_PATH }, - { "ProductName", "Colors", RID_SVXPAGE_COLOR }, - { "ProductName", "Fonts", RID_SVX_FONT_SUBSTITUTION }, - { "ProductName", "Security", RID_SVXPAGE_INET_SECURITY }, - { "ProductName", "Appearance", RID_SVXPAGE_COLORCONFIG }, - { "ProductName", "Accessibility", RID_SVXPAGE_ACCESSIBILITYCONFIG }, - { "ProductName", "Java", RID_SVXPAGE_OPTIONS_JAVA }, - { "ProductName", "NetworkIdentity", RID_SVXPAGE_SSO }, - { "ProductName", "OnlineUpdate", RID_SVXPAGE_ONLINEUPDATE }, - { "ProductName", "ImprovementProgram", RID_SVXPAGE_IMPROVEMENT }, - { "LanguageSettings", NULL, SID_LANGUAGE_OPTIONS }, - { "LanguageSettings", "Languages", OFA_TP_LANGUAGES }, - { "LanguageSettings", "WritingAids", RID_SFXPAGE_LINGU }, - { "LanguageSettings", "SearchingInJapanese", RID_SVXPAGE_JSEARCH_OPTIONS }, - { "LanguageSettings", "AsianLayout", RID_SVXPAGE_ASIAN_LAYOUT }, - { "LanguageSettings", "ComplexTextLayout", RID_SVXPAGE_OPTIONS_CTL }, - { "Internet", NULL, SID_INET_DLG }, - { "Internet", "Proxy", RID_SVXPAGE_INET_PROXY }, - { "Internet", "Email", RID_SVXPAGE_INET_MAIL }, - { "Internet", "MozillaPlugin", RID_SVXPAGE_INET_MOZPLUGIN }, - { "LoadSave", NULL, SID_FILTER_DLG }, - { "LoadSave", "General", RID_SFXPAGE_SAVE }, - { "LoadSave", "VBAProperties", SID_OPTFILTER_MSOFFICE }, - { "LoadSave", "MicrosoftOffice", RID_OFAPAGE_MSFILTEROPT2 }, - { "LoadSave", "HTMLCompatibility", RID_OFAPAGE_HTMLOPT }, - { "Writer", NULL, SID_SW_EDITOPTIONS }, - { "Writer", "General", RID_SW_TP_OPTLOAD_PAGE }, - { "Writer", "View", RID_SW_TP_CONTENT_OPT }, - { "Writer", "FormattingAids", RID_SW_TP_OPTSHDWCRSR }, - { "Writer", "Grid", RID_SVXPAGE_GRID }, - { "Writer", "BasicFontsWestern", RID_SW_TP_STD_FONT }, - { "Writer", "BasicFontsAsian", RID_SW_TP_STD_FONT_CJK }, - { "Writer", "BasicFontsCTL", RID_SW_TP_STD_FONT_CTL }, - { "Writer", "Print", RID_SW_TP_OPTPRINT_PAGE }, - { "Writer", "Table", RID_SW_TP_OPTTABLE_PAGE }, - { "Writer", "Changes", RID_SW_TP_REDLINE_OPT }, - { "Writer", "Compatibility", RID_SW_TP_OPTCOMPATIBILITY_PAGE }, - { "Writer", "AutoCaption", RID_SW_TP_OPTCAPTION_PAGE }, - { "Writer", "MailMerge", RID_SW_TP_MAILCONFIG }, - { "WriterWeb", NULL, SID_SW_ONLINEOPTIONS }, - { "WriterWeb", "View", RID_SW_TP_HTML_CONTENT_OPT }, - { "WriterWeb", "FormattingAids", RID_SW_TP_HTML_OPTSHDWCRSR }, - { "WriterWeb", "Grid", RID_SW_TP_HTML_OPTGRID_PAGE }, - { "WriterWeb", "Print", RID_SW_TP_HTML_OPTPRINT_PAGE }, - { "WriterWeb", "Table", RID_SW_TP_HTML_OPTTABLE_PAGE }, - { "WriterWeb", "Background", RID_SW_TP_BACKGROUND }, - { "Math", NULL, SID_SM_EDITOPTIONS }, - { "Math", "Settings", SID_SM_TP_PRINTOPTIONS }, - { "Calc", NULL, SID_SC_EDITOPTIONS }, - { "Calc", "General", SID_SC_TP_LAYOUT }, - { "Calc", "View", SID_SC_TP_CONTENT }, - { "Calc", "International", RID_OFA_TP_INTERNATIONAL }, - { "Calc", "Calculate", SID_SC_TP_CALC }, - { "Calc", "Formula", SID_SC_TP_FORMULA }, - { "Calc", "SortLists", SID_SC_TP_USERLISTS }, - { "Calc", "Changes", SID_SC_TP_CHANGES }, - { "Calc", "Compatibility", SID_SC_TP_COMPATIBILITY }, - { "Calc", "Grid", SID_SC_TP_GRID }, - { "Calc", "Print", RID_SC_TP_PRINT }, - { "Impress", NULL, SID_SD_EDITOPTIONS }, - { "Impress", "General", SID_SI_TP_MISC }, - { "Impress", "View", SID_SI_TP_CONTENTS }, - { "Impress", "Grid", SID_SI_TP_SNAP }, - { "Impress", "Print", SID_SI_TP_PRINT }, - { "Draw", NULL, SID_SD_GRAPHIC_OPTIONS }, - { "Draw", "General", SID_SD_TP_MISC }, - { "Draw", "View", SID_SD_TP_CONTENTS }, - { "Draw", "Grid", SID_SD_TP_SNAP }, - { "Draw", "Print", SID_SD_TP_PRINT }, - { "Charts", NULL, SID_SCH_EDITOPTIONS }, - { "Charts", "DefaultColors", RID_OPTPAGE_CHART_DEFCOLORS }, - { "Base", NULL, SID_SB_STARBASEOPTIONS }, - { "Base", "Connections", SID_SB_CONNECTIONPOOLING }, - { "Base", "Databases", SID_SB_DBREGISTEROPTIONS }, - { NULL, NULL, 0 } -}; - -static sal_Bool lcl_getStringFromID( sal_uInt16 _nPageId, String& _rGroupName, String& _rPageName ) -{ - sal_Bool bRet = sal_False; - - sal_uInt16 nIdx = 0; - while ( OptionsMap_Impl[nIdx].m_pGroupName != NULL ) - { - if ( _nPageId == OptionsMap_Impl[nIdx].m_nPageId ) - { - bRet = sal_True; - _rGroupName = String( OptionsMap_Impl[nIdx].m_pGroupName, RTL_TEXTENCODING_ASCII_US ); - if ( OptionsMap_Impl[nIdx].m_pPageName != NULL ) - _rPageName = String( OptionsMap_Impl[nIdx].m_pPageName, RTL_TEXTENCODING_ASCII_US ); - break; - } - ++nIdx; - } - - return bRet; -} - -static sal_Bool lcl_isOptionHidden( sal_uInt16 _nPageId, const SvtOptionsDialogOptions& _rOptOptions ) -{ - sal_Bool bIsHidden = sal_False; - String sGroupName, sPageName; - if ( lcl_getStringFromID( _nPageId, sGroupName, sPageName ) ) - { - if ( sPageName.Len() == 0 ) - bIsHidden = _rOptOptions.IsGroupHidden( sGroupName ); - else - bIsHidden = _rOptOptions.IsPageHidden( sPageName, sGroupName ); - } - return bIsHidden; -} - -struct OptionsPageInfo -{ - SfxTabPage* m_pPage; - sal_uInt16 m_nPageId; - rtl::OUString m_sPageURL; - rtl::OUString m_sEventHdl; - ExtensionsTabPage* m_pExtPage; - - OptionsPageInfo( sal_uInt16 nId ) : m_pPage( NULL ), m_nPageId( nId ), m_pExtPage( NULL ) {} -}; - -struct OptionsGroupInfo -{ - SfxItemSet* m_pInItemSet; - SfxItemSet* m_pOutItemSet; - SfxShell* m_pShell; // used to create the page - SfxModule* m_pModule; // used to create the ItemSet - sal_uInt16 m_nDialogId; // Id of the former dialog - sal_Bool m_bLoadError; // load fails? - rtl::OUString m_sPageURL; - ExtensionsTabPage* m_pExtPage; - - OptionsGroupInfo( SfxShell* pSh, SfxModule* pMod, sal_uInt16 nId ) : - m_pInItemSet( NULL ), m_pOutItemSet( NULL ), m_pShell( pSh ), - m_pModule( pMod ), m_nDialogId( nId ), m_bLoadError( sal_False ), - m_sPageURL( rtl::OUString() ), m_pExtPage( NULL ) {} - ~OptionsGroupInfo() { delete m_pInItemSet; delete m_pOutItemSet; } -}; - -sal_Bool OfaOptionsTreeListBox::Collapse( SvLBoxEntry* pParent ) -{ - bInCollapse = sal_True; - sal_Bool bRet = SvTreeListBox::Collapse(pParent); - bInCollapse = sal_False; - return bRet; -} - -// ----------------------------------------------------------------------- - -#define INI_LIST() \ - aOkPB ( this, CUI_RES( PB_OK ) ),\ - aCancelPB ( this, CUI_RES( PB_CANCEL ) ),\ - aHelpPB ( this, CUI_RES( PB_HELP ) ),\ - aBackPB ( this, CUI_RES( PB_BACK ) ),\ - aHiddenGB ( this, CUI_RES( FB_BORDER ) ),\ - aPageTitleFT ( this, CUI_RES( FT_PAGE_TITLE ) ),\ - aLine1FL ( this, CUI_RES( FL_LINE_1 ) ),\ - aHelpFT ( this, CUI_RES( FT_HELPTEXT ) ),\ - aHelpImg ( this, CUI_RES( IMG_HELP ) ),\ - aHelpTextsArr ( CUI_RES( STR_HELPTEXTS ) ),\ - aTreeLB ( this, CUI_RES( TLB_PAGES ) ),\ - sTitle ( GetText() ),\ - sNotLoadedError ( CUI_RES( ST_LOAD_ERROR ) ),\ - pCurrentPageEntry ( NULL ),\ - pColorPageItemSet ( NULL ),\ - pColorTab ( NULL ),\ - nChangeType ( CT_NONE ),\ - nUnknownType ( COLORPAGE_UNKNOWN ),\ - nUnknownPos ( COLORPAGE_UNKNOWN ),\ - bIsAreaTP ( sal_False ),\ - bForgetSelection ( sal_False ),\ - bImageResized ( sal_False ),\ - bInSelectHdl_Impl ( false ),\ - bIsFromExtensionManager( false ), \ - bIsForSetDocumentLanguage( false ) - -// Ctor() with Frame ----------------------------------------------------- -using namespace ::com::sun::star; -OfaTreeOptionsDialog::OfaTreeOptionsDialog( - Window* pParent, - const Reference< XFrame >& _xFrame, - bool bActivateLastSelection ) : - - SfxModalDialog( pParent, CUI_RES( RID_OFADLG_OPTIONS_TREE ) ), - INI_LIST() -{ - FreeResource(); - - InitTreeAndHandler(); - Initialize( _xFrame ); - LoadExtensionOptions( rtl::OUString() ); - ResizeTreeLB(); - if (bActivateLastSelection) - ActivateLastSelection(); - - aTreeLB.SetAccessibleName(GetDisplayText()); -} - -// Ctor() with ExtensionId ----------------------------------------------- - -OfaTreeOptionsDialog::OfaTreeOptionsDialog( Window* pParent, const rtl::OUString& rExtensionId ) : - - SfxModalDialog( pParent, CUI_RES( RID_OFADLG_OPTIONS_TREE ) ), - - INI_LIST() - -{ - FreeResource(); - - bIsFromExtensionManager = ( rExtensionId.getLength() > 0 ); - InitTreeAndHandler(); - LoadExtensionOptions( rExtensionId ); - ResizeTreeLB(); - ActivateLastSelection(); -} - -OfaTreeOptionsDialog::~OfaTreeOptionsDialog() -{ - SvLBoxEntry* pEntry = aTreeLB.First(); - // first children - while(pEntry) - { - // if Child (has parent), then OptionsPageInfo - if(aTreeLB.GetParent(pEntry)) - { - OptionsPageInfo *pPageInfo = (OptionsPageInfo *)pEntry->GetUserData(); - if(pPageInfo->m_pPage) - { - pPageInfo->m_pPage->FillUserData(); - String aPageData(pPageInfo->m_pPage->GetUserData()); - if ( aPageData.Len() ) - { - SvtViewOptions aTabPageOpt( E_TABPAGE, String::CreateFromInt32( pPageInfo->m_nPageId ) ); - SetViewOptUserItem( aTabPageOpt, aPageData ); - } - delete pPageInfo->m_pPage; - } - - if (pPageInfo->m_nPageId == RID_SFXPAGE_LINGU) - { - // write personal dictionaries - Reference< XDictionaryList > xDicList( SvxGetDictionaryList() ); - if (xDicList.is()) - { - linguistic::SaveDictionaries( xDicList ); - } - } - - if( pPageInfo->m_pExtPage ) - delete pPageInfo->m_pExtPage; - - delete pPageInfo; - } - pEntry = aTreeLB.Next(pEntry); - } - - // and parents - pEntry = aTreeLB.First(); - while(pEntry) - { - if(!aTreeLB.GetParent(pEntry)) - { - OptionsGroupInfo* pGroupInfo = (OptionsGroupInfo*)pEntry->GetUserData(); - if ( pGroupInfo && pGroupInfo->m_pExtPage ) - delete pGroupInfo->m_pExtPage; - delete pGroupInfo; - } - pEntry = aTreeLB.Next(pEntry); - } - delete pColorPageItemSet; - deleteGroupNames(); -} - -OptionsPageInfo* OfaTreeOptionsDialog::AddTabPage( - sal_uInt16 nId, const String& rPageName, sal_uInt16 nGroup ) -{ - OptionsPageInfo* pPageInfo = new OptionsPageInfo( nId ); - SvLBoxEntry* pParent = aTreeLB.GetEntry( 0, nGroup ); - DBG_ASSERT( pParent, "OfaTreeOptionsDialog::AddTabPage(): no group found" ); - SvLBoxEntry* pEntry = aTreeLB.InsertEntry( rPageName, pParent ); - pEntry->SetUserData( pPageInfo ); - return pPageInfo; -} - -// der ItemSet* geht in den Besitz des Dialogs -sal_uInt16 OfaTreeOptionsDialog::AddGroup(const String& rGroupName, - SfxShell* pCreateShell, - SfxModule* pCreateModule, - sal_uInt16 nDialogId ) -{ - SvLBoxEntry* pEntry = aTreeLB.InsertEntry(rGroupName); - OptionsGroupInfo* pInfo = - new OptionsGroupInfo( pCreateShell, pCreateModule, nDialogId ); - pEntry->SetUserData(pInfo); - sal_uInt16 nRet = 0; - pEntry = aTreeLB.First(); - while(pEntry) - { - if(!aTreeLB.GetParent(pEntry)) - nRet++; - pEntry = aTreeLB.Next(pEntry); - } - return nRet - 1; -} - -IMPL_LINK(OfaTreeOptionsDialog, ShowPageHdl_Impl, SvTreeListBox*, EMPTYARG) -{ - if ( aSelectTimer.GetTimeout() == SELECT_FIRST_TIMEOUT ) - { - aSelectTimer.SetTimeout( SELECT_TIMEOUT ); - SelectHdl_Impl( NULL ); - } - else if ( aSelectTimer.GetTimeout() == SELECT_TIMEOUT ) - aSelectTimer.Start(); - - return 0; -} - -IMPL_LINK( OfaTreeOptionsDialog, BackHdl_Impl, PushButton*, EMPTYARG ) -{ - if ( pCurrentPageEntry && aTreeLB.GetParent( pCurrentPageEntry ) ) - { - OptionsPageInfo* pPageInfo = (OptionsPageInfo*)pCurrentPageEntry->GetUserData(); - if ( pPageInfo->m_pPage ) - { - OptionsGroupInfo* pGroupInfo = - (OptionsGroupInfo*)aTreeLB.GetParent( pCurrentPageEntry )->GetUserData(); - if ( RID_SVXPAGE_COLOR == pPageInfo->m_nPageId ) - pPageInfo->m_pPage->Reset( *pColorPageItemSet ); - else - pPageInfo->m_pPage->Reset( *pGroupInfo->m_pInItemSet ); - } - else if ( pPageInfo->m_pExtPage ) - pPageInfo->m_pExtPage->ResetPage(); - } - return 0; -} - -IMPL_LINK( OfaTreeOptionsDialog, OKHdl_Impl, Button *, EMPTYARG ) -{ - aTreeLB.EndSelection(); - if ( pCurrentPageEntry && aTreeLB.GetParent( pCurrentPageEntry ) ) - { - OptionsPageInfo* pPageInfo = (OptionsPageInfo *)pCurrentPageEntry->GetUserData(); - if ( pPageInfo->m_pPage ) - { - OptionsGroupInfo* pGroupInfo = - (OptionsGroupInfo *)aTreeLB.GetParent(pCurrentPageEntry)->GetUserData(); - if ( RID_SVXPAGE_COLOR != pPageInfo->m_nPageId - && pPageInfo->m_pPage->HasExchangeSupport() ) - { - int nLeave = pPageInfo->m_pPage->DeactivatePage(pGroupInfo->m_pOutItemSet); - if ( nLeave == SfxTabPage::KEEP_PAGE ) - { - //die Seite darf nicht verlassen werden! - aTreeLB.Select(pCurrentPageEntry); - return 0; - } - } - pPageInfo->m_pPage->Hide(); - } - } - - SvLBoxEntry* pEntry = aTreeLB.First(); - while ( pEntry ) - { - if ( aTreeLB.GetParent( pEntry ) ) - { - OptionsPageInfo* pPageInfo = (OptionsPageInfo *)pEntry->GetUserData(); - if ( pPageInfo->m_pPage && !pPageInfo->m_pPage->HasExchangeSupport() ) - { - OptionsGroupInfo* pGroupInfo = - (OptionsGroupInfo*)aTreeLB.GetParent(pEntry)->GetUserData(); - pPageInfo->m_pPage->FillItemSet(*pGroupInfo->m_pOutItemSet); - } - - if ( pPageInfo->m_pExtPage ) - { - pPageInfo->m_pExtPage->DeactivatePage(); - pPageInfo->m_pExtPage->SavePage(); - } - } - pEntry = aTreeLB.Next(pEntry); - } - EndDialog(RET_OK); - return 0; -} - -// Eine aufgeklappte Gruppe soll vollstaendig sichtbar sein -IMPL_LINK(OfaTreeOptionsDialog, ExpandedHdl_Impl, SvTreeListBox*, pBox ) -{ - pBox->Update(); - pBox->InitStartEntry(); - SvLBoxEntry* pEntry = pBox->GetHdlEntry(); - if(pEntry && pBox->IsExpanded(pEntry)) - { - sal_uInt32 nChildCount = pBox->GetChildCount( pEntry ); - - SvLBoxEntry* pNext = pEntry; - for(sal_uInt32 i = 0; i < nChildCount;i++) - { - pNext = pBox->GetNextEntryInView(pNext); - if(!pNext) - { - pBox->ScrollOutputArea( -(short)(nChildCount - i + 1) ); - break; - } - else - { - Size aSz(pBox->GetOutputSizePixel()); - int nHeight = pBox->GetEntryHeight(); - Point aPos(pBox->GetEntryPosition(pNext)); - if(aPos.Y()+nHeight > aSz.Height()) - { - pBox->ScrollOutputArea( -(short)(nChildCount - i + 1) ); - break; - } - } - } - } - return 0; -} - -void OfaTreeOptionsDialog::ApplyItemSets() -{ - SvLBoxEntry* pEntry = aTreeLB.First(); - while(pEntry) - { - if(!aTreeLB.GetParent(pEntry)) - { - OptionsGroupInfo* pGroupInfo = (OptionsGroupInfo *)pEntry->GetUserData(); - if(pGroupInfo->m_pOutItemSet) - { - if(pGroupInfo->m_pShell) - pGroupInfo->m_pShell->ApplyItemSet( pGroupInfo->m_nDialogId, *pGroupInfo->m_pOutItemSet); - else - ApplyItemSet( pGroupInfo->m_nDialogId, *pGroupInfo->m_pOutItemSet); - } - } - pEntry = aTreeLB.Next(pEntry); - } -} - -void OfaTreeOptionsDialog::InitTreeAndHandler() -{ - aTreeLB.SetNodeDefaultImages(); - aPageImages = ImageList( CUI_RES( RID_IMGLIST_TREEOPT ) ); - - - aTreeLB.SetHelpId( HID_OFADLG_TREELISTBOX ); - aTreeLB.SetStyle( aTreeLB.GetStyle()|WB_HASBUTTONS | WB_HASBUTTONSATROOT | - WB_HASLINES | WB_HASLINESATROOT | - WB_CLIPCHILDREN | WB_HSCROLL | WB_FORCE_MAKEVISIBLE | WB_QUICK_SEARCH ); - aTreeLB.SetSpaceBetweenEntries( 0 ); - aTreeLB.SetSelectionMode( SINGLE_SELECTION ); - aTreeLB.SetSublistOpenWithLeftRight( sal_True ); - aTreeLB.SetExpandedHdl( LINK( this, OfaTreeOptionsDialog, ExpandedHdl_Impl ) ); - aTreeLB.SetSelectHdl( LINK( this, OfaTreeOptionsDialog, ShowPageHdl_Impl ) ); - aBackPB.SetClickHdl( LINK( this, OfaTreeOptionsDialog, BackHdl_Impl ) ); - aOkPB.SetClickHdl( LINK( this, OfaTreeOptionsDialog, OKHdl_Impl ) ); - - aHiddenGB.Show(); - aSelectTimer.SetTimeout( SELECT_FIRST_TIMEOUT ); - aSelectTimer.SetTimeoutHdl( LINK( this, OfaTreeOptionsDialog, SelectHdl_Impl ) ); -} - -void OfaTreeOptionsDialog::ActivatePage( sal_uInt16 nResId ) -{ - bIsForSetDocumentLanguage = false; - if ( nResId == OFA_TP_LANGUAGES_FOR_SET_DOCUMENT_LANGUAGE ) - { - bIsForSetDocumentLanguage = true; - nResId = OFA_TP_LANGUAGES; - } - - DBG_ASSERT( !bIsFromExtensionManager, "OfaTreeOptionsDialog::ActivatePage(): call from extension manager" ); - if ( !pLastPageSaver ) - pLastPageSaver = new LastPageSaver; - bForgetSelection = sal_True; - sal_uInt16 nTemp = pLastPageSaver->m_nLastPageId; - pLastPageSaver->m_nLastPageId = nResId; - ActivateLastSelection(); - pLastPageSaver->m_nLastPageId = nTemp; -} - -void OfaTreeOptionsDialog::ActivatePage( const String& rPageURL ) -{ - DBG_ASSERT( !bIsFromExtensionManager, "OfaTreeOptionsDialog::ActivatePage(): call from extension manager" ); - if ( !pLastPageSaver ) - pLastPageSaver = new LastPageSaver; - bForgetSelection = sal_True; - pLastPageSaver->m_nLastPageId = 0; - pLastPageSaver->m_sLastPageURL_Tools = rPageURL; - ActivateLastSelection(); -} - -void OfaTreeOptionsDialog::ActivateLastSelection() -{ - SvLBoxEntry* pEntry = NULL; - if ( pLastPageSaver ) - { - String sExpand( RTL_CONSTASCII_USTRINGPARAM( EXPAND_PROTOCOL ) ); - String sLastURL = bIsFromExtensionManager ? pLastPageSaver->m_sLastPageURL_ExtMgr - : pLastPageSaver->m_sLastPageURL_Tools; - if ( sLastURL.Len() == 0 ) - { - sLastURL = !bIsFromExtensionManager ? pLastPageSaver->m_sLastPageURL_ExtMgr - : pLastPageSaver->m_sLastPageURL_Tools; - } - - // MacroExpander to convert "expand"-URL to "file"-URL - Reference< XMacroExpander > m_xMacroExpander; - bool bMustExpand = ( INetURLObject( sLastURL ).GetProtocol() == INET_PROT_FILE ); - - if ( bMustExpand ) - { - Reference< XComponentContext > xContext; - Reference< XPropertySet > xProps( ::comphelper::getProcessServiceFactory(), UNO_QUERY ); - xProps->getPropertyValue( - ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "DefaultContext" ) ) ) >>= xContext; - if ( xContext.is() ) - m_xMacroExpander = Reference< com::sun::star::util::XMacroExpander >( - xContext->getValueByName( ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( - "/singletons/com.sun.star.util.theMacroExpander" ) ) ), UNO_QUERY ); - } - - SvLBoxEntry* pTemp = aTreeLB.First(); - while( !pEntry && pTemp ) - { - // restore only selection of a leaf - if ( aTreeLB.GetParent( pTemp ) && pTemp->GetUserData() ) - { - OptionsPageInfo* pPageInfo = (OptionsPageInfo*)pTemp->GetUserData(); - String sPageURL = pPageInfo->m_sPageURL; - if ( bMustExpand - && sPageURL.Len() > 0 - && sExpand.Match( sPageURL ) == STRING_MATCH ) - { - // cut protocol - ::rtl::OUString sTemp( sPageURL.Copy( sizeof( EXPAND_PROTOCOL ) -1 ) ); - // decode uri class chars - sTemp = ::rtl::Uri::decode( - sTemp, rtl_UriDecodeWithCharset, RTL_TEXTENCODING_UTF8 ); - // expand string - sPageURL = m_xMacroExpander->expandMacros( sTemp ); - } - - if ( ( !bIsFromExtensionManager - && pPageInfo->m_nPageId && pPageInfo->m_nPageId == pLastPageSaver->m_nLastPageId ) - || ( !pPageInfo->m_nPageId && sLastURL == sPageURL ) ) - pEntry = pTemp; - } - pTemp = aTreeLB.Next(pTemp); - } - } - - if ( !pEntry ) - { - pEntry = aTreeLB.First(); - pEntry = aTreeLB.Next(pEntry); - } - - SvLBoxEntry* pParent = aTreeLB.GetParent(pEntry); - aTreeLB.Expand(pParent); - aTreeLB.MakeVisible(pParent); - aTreeLB.MakeVisible(pEntry); - aTreeLB.Select(pEntry); - aTreeLB.GrabFocus(); -} - -long OfaTreeOptionsDialog::Notify( NotifyEvent& rNEvt ) -{ - if ( rNEvt.GetType() == EVENT_KEYINPUT ) - { - const KeyEvent* pKEvt = rNEvt.GetKeyEvent(); - const KeyCode aKeyCode = pKEvt->GetKeyCode(); - - if( aKeyCode.GetCode() == KEY_PAGEUP || - aKeyCode.GetCode() == KEY_PAGEDOWN) - { - SvLBoxEntry* pCurEntry = aTreeLB.FirstSelected(); - SvLBoxEntry* pTemp = 0; - if(aKeyCode.GetCode() == KEY_PAGEDOWN) - { - pTemp = aTreeLB.Next( pCurEntry ) ; - if(pTemp && !aTreeLB.GetParent(pTemp)) - { - pTemp = aTreeLB.Next( pTemp ) ; - aTreeLB.Select(pTemp); - } - } - else - { - pTemp = aTreeLB.Prev( pCurEntry ) ; - if(pTemp && !aTreeLB.GetParent(pTemp)) - { - pTemp = aTreeLB.Prev( pTemp ) ; - } - } - if(pTemp) - { - if(!aTreeLB.IsExpanded(aTreeLB.GetParent(pTemp))) - aTreeLB.Expand(aTreeLB.GetParent(pTemp)); - aTreeLB.MakeVisible(pTemp); - aTreeLB.Select(pTemp); - } - } - } - return SfxModalDialog::Notify(rNEvt); -} - -// -------------------------------------------------------------------- - -void OfaTreeOptionsDialog::DataChanged( const DataChangedEvent& rDCEvt ) -{ - SfxModalDialog::DataChanged( rDCEvt ); - - SvLBoxEntry* pEntry = aTreeLB.GetCurEntry(); - if ( ( rDCEvt.GetType() == DATACHANGED_SETTINGS ) && ( rDCEvt.GetFlags() & SETTINGS_STYLE ) && - !aTreeLB.GetParent(pEntry)) - { - OptionsGroupInfo* pInfo = static_cast<OptionsGroupInfo*>(pEntry->GetUserData()); - ImageList* pImgLst = &aPageImages; - for ( sal_uInt16 i = 0; i < aHelpTextsArr.Count(); ++i ) - { - if ( aHelpTextsArr.GetValue(i) == pInfo->m_nDialogId ) - { - aHelpImg.SetImage( pImgLst->GetImage( pInfo->m_nDialogId ) ); - break; - } - } - } -} -class FlagSet_Impl -{ - bool & rFlag; - public: - FlagSet_Impl(bool& bFlag) : rFlag(bFlag){rFlag = true;} - ~FlagSet_Impl(){rFlag = false;} -}; - -IMPL_LINK( OfaTreeOptionsDialog, SelectHdl_Impl, Timer*, EMPTYARG ) -{ - SvTreeListBox* pBox = &aTreeLB; - SvLBoxEntry* pEntry = pBox->GetCurEntry(); - SvLBoxEntry* pParent = pBox->GetParent(pEntry); - pBox->EndSelection(); - - DBG_ASSERT(!bInSelectHdl_Impl, "Timeout handler called twice"); - if(bInSelectHdl_Impl || pCurrentPageEntry == pEntry) - return 0; - //#111938# lock the SelectHdl_Impl to prevent multiple executes - FlagSet_Impl aFlag(bInSelectHdl_Impl); - TabPage* pOldPage = NULL; - TabPage* pNewPage = NULL; - OptionsPageInfo* pOptPageInfo = ( pCurrentPageEntry && aTreeLB.GetParent( pCurrentPageEntry ) ) - ? (OptionsPageInfo*)pCurrentPageEntry->GetUserData() : NULL; - - if ( pOptPageInfo && pOptPageInfo->m_pPage && pOptPageInfo->m_pPage->IsVisible() ) - { - pOldPage = pOptPageInfo->m_pPage; - OptionsGroupInfo* pGroupInfo = (OptionsGroupInfo*)aTreeLB.GetParent(pCurrentPageEntry)->GetUserData(); - int nLeave = SfxTabPage::LEAVE_PAGE; - if ( RID_SVXPAGE_COLOR != pOptPageInfo->m_nPageId && pOptPageInfo->m_pPage->HasExchangeSupport() ) - nLeave = pOptPageInfo->m_pPage->DeactivatePage( pGroupInfo->m_pOutItemSet ); - - if ( nLeave == SfxTabPage::KEEP_PAGE ) - { - // we cannot leave this page - pBox->Select( pCurrentPageEntry ); - return 0; - } - else - pOptPageInfo->m_pPage->Hide(); - } - else if ( pOptPageInfo && pOptPageInfo->m_pExtPage ) - { - pOptPageInfo->m_pExtPage->Hide(); - pOptPageInfo->m_pExtPage->DeactivatePage(); - } - else if ( pCurrentPageEntry && !aTreeLB.GetParent( pCurrentPageEntry ) ) - { - OptionsGroupInfo* pGroupInfo = (OptionsGroupInfo*)pCurrentPageEntry->GetUserData(); - if ( pGroupInfo && pGroupInfo->m_pExtPage ) - { - pGroupInfo->m_pExtPage->Hide(); - pGroupInfo->m_pExtPage->DeactivatePage(); - } - } - if ( pParent ) - { - aPageTitleFT.Hide(); - aLine1FL.Hide(); - aHelpFT.Hide(); - aHelpImg.Hide(); - OptionsPageInfo *pPageInfo = (OptionsPageInfo *)pEntry->GetUserData(); - OptionsGroupInfo* pGroupInfo = (OptionsGroupInfo *)pParent->GetUserData(); - if(!pPageInfo->m_pPage && pPageInfo->m_nPageId > 0) - { - if(pGroupInfo->m_bLoadError) - return 0; - if ( RID_SVXPAGE_COLOR == pPageInfo->m_nPageId ) - { - if(!pColorPageItemSet) - { - // Move usage of a static XOutdevItemPool instance here - if(!mpStaticXOutdevItemPool) - { - mpStaticXOutdevItemPool = new XOutdevItemPool(); - } - pColorPageItemSet = new SfxItemSet( *mpStaticXOutdevItemPool, XATTR_FILLSTYLE, XATTR_FILLCOLOR); - pColorPageItemSet->Put( XFillColorItem() ); - } - } - else - { - if(pGroupInfo->m_pModule /*&& !pGroupInfo->pModule->IsLoaded()*/) - { - SfxModule* pOldModule = pGroupInfo->m_pModule; - sal_Bool bIdentical = pGroupInfo->m_pModule == pGroupInfo->m_pShell; - - WaitObject aWait(this); - //pGroupInfo->pModule = pGroupInfo->pModule->Load(); - if(!pGroupInfo->m_pModule) - { - pGroupInfo->m_bLoadError = sal_True; - InfoBox(pBox, sNotLoadedError).Execute(); - return 0; - } - if(bIdentical) - pGroupInfo->m_pShell = pGroupInfo->m_pModule; - //jetzt noch testen, ob es auch in anderen Gruppen das gleiche Module gab (z.B. Text+HTML) - SvLBoxEntry* pTemp = aTreeLB.First(); - while(pTemp) - { - if(!aTreeLB.GetParent(pTemp) && pTemp != pEntry) - { - OptionsGroupInfo* pTGInfo = (OptionsGroupInfo *)pTemp->GetUserData(); - if(pTGInfo->m_pModule == pOldModule) - { - pTGInfo->m_pModule = pGroupInfo->m_pModule; - if(bIdentical) - pTGInfo->m_pShell = pGroupInfo->m_pModule; - } - } - pTemp = aTreeLB.Next(pTemp); - } - } - -// if ( pPageInfo->nPageId != RID_OPTPAGE_CHART_DEFCOLORS ) - { - if(!pGroupInfo->m_pInItemSet) - pGroupInfo->m_pInItemSet = pGroupInfo->m_pShell - ? pGroupInfo->m_pShell->CreateItemSet( pGroupInfo->m_nDialogId ) - : CreateItemSet( pGroupInfo->m_nDialogId ); - if(!pGroupInfo->m_pOutItemSet) - pGroupInfo->m_pOutItemSet = new SfxItemSet( - *pGroupInfo->m_pInItemSet->GetPool(), - pGroupInfo->m_pInItemSet->GetRanges()); - } - } - - if(pGroupInfo->m_pModule) - { - pPageInfo->m_pPage = pGroupInfo->m_pModule->CreateTabPage( - pPageInfo->m_nPageId, this, *pGroupInfo->m_pInItemSet ); - } - else if(RID_SVXPAGE_COLOR != pPageInfo->m_nPageId) - pPageInfo->m_pPage = ::CreateGeneralTabPage( pPageInfo->m_nPageId, this, *pGroupInfo->m_pInItemSet ); - else - { - pPageInfo->m_pPage = ::CreateGeneralTabPage( - pPageInfo->m_nPageId, this, *pColorPageItemSet ); - SvxColorTabPage& rColPage = *(SvxColorTabPage*)pPageInfo->m_pPage; - const OfaPtrItem* pPtr = NULL; - if ( SfxViewFrame::Current() && SfxViewFrame::Current()->GetDispatcher() ) - pPtr = (const OfaPtrItem*)SfxViewFrame::Current()-> - GetDispatcher()->Execute( SID_GET_COLORTABLE, SFX_CALLMODE_SYNCHRON ); - pColorTab = pPtr ? (XColorTable*)pPtr->GetValue() : &XColorTable::GetStdColorTable(); - - rColPage.SetColorTable( pColorTab ); - rColPage.SetPageType( &nUnknownType ); - rColPage.SetDlgType( &nUnknownType ); - rColPage.SetPos( &nUnknownPos ); - rColPage.SetAreaTP( &bIsAreaTP ); - rColPage.SetColorChgd( (ChangeType*)&nChangeType ); - rColPage.Construct(); - } - - DBG_ASSERT( pPageInfo->m_pPage, "tabpage could not created"); - if ( pPageInfo->m_pPage ) - { - SvtViewOptions aTabPageOpt( E_TABPAGE, String::CreateFromInt32( pPageInfo->m_nPageId ) ); - pPageInfo->m_pPage->SetUserData( GetViewOptUserItem( aTabPageOpt ) ); - - Point aTreePos(aTreeLB.GetPosPixel()); - Size aTreeSize(aTreeLB.GetSizePixel()); - Point aGBPos(aHiddenGB.GetPosPixel()); - Size aPageSize(pPageInfo->m_pPage->GetSizePixel()); - Size aGBSize(aHiddenGB.GetSizePixel()); - Point aPagePos( aGBPos.X() + ( aGBSize.Width() - aPageSize.Width() ) / 2, - aGBPos.Y() + ( aGBSize.Height() - aPageSize.Height() ) / 2 ); - pPageInfo->m_pPage->SetPosPixel( aPagePos ); - if ( RID_SVXPAGE_COLOR == pPageInfo->m_nPageId ) - { - pPageInfo->m_pPage->Reset( *pColorPageItemSet ); - pPageInfo->m_pPage->ActivatePage( *pColorPageItemSet ); - } - else - { - pPageInfo->m_pPage->Reset( *pGroupInfo->m_pInItemSet ); - } - } - } - else if ( 0 == pPageInfo->m_nPageId && !pPageInfo->m_pExtPage ) - { - if ( !m_xContainerWinProvider.is() ) - { - Reference < XMultiServiceFactory > xFactory( ::comphelper::getProcessServiceFactory() ); - m_xContainerWinProvider = Reference < awt::XContainerWindowProvider >( - xFactory->createInstance( - C2U("com.sun.star.awt.ContainerWindowProvider") ), UNO_QUERY ); - DBG_ASSERT( m_xContainerWinProvider.is(), "service com.sun.star.awt.ContainerWindowProvider could not be loaded" ); - } - - pPageInfo->m_pExtPage = new ExtensionsTabPage( - this, 0, pPageInfo->m_sPageURL, pPageInfo->m_sEventHdl, m_xContainerWinProvider ); - Size aSize = aHiddenGB.GetSizePixel(); - aSize.Width() = aSize.Width() - 4; - aSize.Height() = aSize.Height() - 4; - Point aPos = aHiddenGB.GetPosPixel(); - aPos.X() = aPos.X() + 2; - aPos.Y() = aPos.Y() + 2; - pPageInfo->m_pExtPage->SetPosSizePixel( aPos, aSize ); - } - - if ( pPageInfo->m_pPage ) - { - if ( RID_SVXPAGE_COLOR != pPageInfo->m_nPageId && - pPageInfo->m_pPage->HasExchangeSupport()) - { - pPageInfo->m_pPage->ActivatePage(*pGroupInfo->m_pOutItemSet); - } - pPageInfo->m_pPage->Show(); - } - else if ( pPageInfo->m_pExtPage ) - { - pPageInfo->m_pExtPage->Show(); - pPageInfo->m_pExtPage->ActivatePage(); - } - - String sTmpTitle = sTitle; - sTmpTitle += String::CreateFromAscii(" - "); - sTmpTitle += aTreeLB.GetEntryText(pParent); - sTmpTitle += String::CreateFromAscii(" - "); - sTmpTitle += aTreeLB.GetEntryText(pEntry); - SetText(sTmpTitle); - pCurrentPageEntry = pEntry; - if ( !bForgetSelection ) - { - if ( !pLastPageSaver ) - pLastPageSaver = new LastPageSaver; - if ( !bIsFromExtensionManager ) - pLastPageSaver->m_nLastPageId = pPageInfo->m_nPageId; - if ( pPageInfo->m_pExtPage ) - { - if ( bIsFromExtensionManager ) - pLastPageSaver->m_sLastPageURL_ExtMgr = pPageInfo->m_sPageURL; - else - pLastPageSaver->m_sLastPageURL_Tools = pPageInfo->m_sPageURL; - } - } - pNewPage = pPageInfo->m_pPage; - } - else - { - OptionsGroupInfo* pTGInfo = (OptionsGroupInfo *)pEntry->GetUserData(); - if ( pTGInfo->m_sPageURL.getLength() == 0 ) - { - ImageList* pImgLst = &aPageImages; - //hier den Hilfetext anzeigen - for ( sal_uInt16 i = 0; i < aHelpTextsArr.Count(); ++i ) - { - if ( aHelpTextsArr.GetValue(i) == pTGInfo->m_nDialogId ) - { - aHelpFT.SetText(aHelpTextsArr.GetString(i)); - aHelpImg.SetImage(pImgLst->GetImage(pTGInfo->m_nDialogId)); - break; - } - } - - aPageTitleFT.Show(); - aLine1FL.Show(); - aHelpFT.Show(); - aHelpImg.Show(); - - //auf die Groesse der Bitmap anpassen - if(!bImageResized) - { - const long nCtrlDist = 2; - bImageResized = sal_True; - Point aImgPos(aHelpImg.GetPosPixel()); - Size aImgSize(aHelpImg.GetSizePixel()); - Point aTitlePos(aPageTitleFT.GetPosPixel()); - Point aLinePos(aLine1FL.GetPosPixel()); - Point aHelpPos(aHelpFT.GetPosPixel()); - Size aHelpSize(aHelpFT.GetSizePixel()); - long nXDiff = 0; - long nYDiff = 0; - if(aTitlePos.X() <= (aImgPos.X() + aImgSize.Width() + nCtrlDist)) - { - nXDiff = aImgPos.X() + aImgSize.Width() + nCtrlDist - aTitlePos.X(); - } - if(aLinePos.Y() <= (aImgPos.Y() + aImgSize.Height() + nCtrlDist)) - { - nYDiff = aImgPos.Y() + aImgSize.Height() + nCtrlDist - aLinePos.Y(); - } - aLinePos.Y() += nYDiff; - aLine1FL.SetPosPixel(aLinePos); - - aTitlePos.X() += nXDiff; - aPageTitleFT.SetPosPixel(aTitlePos); - - aHelpPos.X() += nXDiff; - aHelpPos.Y() += nYDiff; - aHelpSize.Width() -= nXDiff; - aHelpSize.Height() -= nYDiff; - aHelpFT.SetPosSizePixel(aHelpPos, aHelpSize); - - Font aFont = aHelpFT.GetFont(); - Size aSz = aFont.GetSize(); - aSz.Height() = (aSz.Height() * 14 ) / 10; - aFont.SetSize(aSz); - aPageTitleFT.SetFont(aFont); - } - - String sTmpTitle = sTitle; - sTmpTitle += String::CreateFromAscii(" - "); - aPageTitleFT.SetText(aTreeLB.GetEntryText(pEntry)); - sTmpTitle += aPageTitleFT.GetText(); - SetText(sTmpTitle); - pCurrentPageEntry = NULL; - } - else - { - if ( !pTGInfo->m_pExtPage ) - { - if ( !m_xContainerWinProvider.is() ) - { - Reference < XMultiServiceFactory > xFactory( ::comphelper::getProcessServiceFactory() ); - m_xContainerWinProvider = Reference < awt::XContainerWindowProvider >( - xFactory->createInstance( - C2U("com.sun.star.awt.ContainerWindowProvider") ), UNO_QUERY ); - DBG_ASSERT( m_xContainerWinProvider.is(), "service com.sun.star.awt.ContainerWindowProvider could not be loaded" ); - } - - pTGInfo->m_pExtPage = - new ExtensionsTabPage( this, 0, pTGInfo->m_sPageURL, rtl::OUString(), m_xContainerWinProvider ); - Size aSize = aHiddenGB.GetSizePixel(); - aSize.Width() = aSize.Width() - 4; - aSize.Height() = aSize.Height() - 4; - Point aPos = aHiddenGB.GetPosPixel(); - aPos.X() = aPos.X() + 2; - aPos.Y() = aPos.Y() + 2; - pTGInfo->m_pExtPage->SetPosSizePixel( aPos, aSize ); - } - - if ( pTGInfo->m_pExtPage ) - { - pTGInfo->m_pExtPage->Show(); - pTGInfo->m_pExtPage->ActivatePage(); - } - - pCurrentPageEntry = pEntry; - } - } - - // restore lost focus, if necessary - Window* pFocusWin = Application::GetFocusWindow(); - // if the focused window is not the options treebox and the old page has the focus - if ( pFocusWin && pFocusWin != pBox && pOldPage && pOldPage->HasChildPathFocus() ) - // then set the focus to the new page or if we are on a group set the focus to the options treebox - pNewPage ? pNewPage->GrabFocus() : pBox->GrabFocus(); - - return 0; -} - -OfaPageResource::OfaPageResource() : - Resource(CUI_RES(RID_OFADLG_OPTIONS_TREE_PAGES)), - aGeneralDlgAry(CUI_RES(SID_GENERAL_OPTIONS)), - aInetDlgAry(CUI_RES(SID_INET_DLG)), - aLangDlgAry(CUI_RES(SID_LANGUAGE_OPTIONS)), - aTextDlgAry(CUI_RES(SID_SW_EDITOPTIONS)), - aHTMLDlgAry(CUI_RES(SID_SW_ONLINEOPTIONS)), - aCalcDlgAry(CUI_RES(SID_SC_EDITOPTIONS)), - aStarMathDlgAry(CUI_RES(SID_SM_EDITOPTIONS)), - aImpressDlgAry(CUI_RES(SID_SD_EDITOPTIONS)), - aDrawDlgAry(CUI_RES(SID_SD_GRAPHIC_OPTIONS)), - aChartDlgAry(CUI_RES(SID_SCH_EDITOPTIONS)), - aFilterDlgAry(CUI_RES(SID_FILTER_DLG)), - aDatasourcesDlgAry(CUI_RES(SID_SB_STARBASEOPTIONS)) -{ - FreeResource(); -} - -sal_Bool EnableSSO( void ) -{ - // SSO must be enabled if the configuration manager bootstrap settings - // are configured as follows ... - // CFG_Offline=false - // CFG_ServerType=uno ( or unspecified ) - // CFG_BackendService= - // com.sun.star.comp.configuration.backend.LdapSingleBackend - - rtl::OUString theIniFile; - osl_getExecutableFile( &theIniFile.pData ); - theIniFile = theIniFile.copy( 0, theIniFile.lastIndexOf( '/' ) + 1 ) + - rtl::OUString(RTL_CONSTASCII_USTRINGPARAM( SAL_CONFIGFILE( "configmgr" )) ); - ::rtl::Bootstrap theBootstrap( theIniFile ); - - rtl::OUString theOfflineValue; - rtl::OUString theDefaultOfflineValue (RTL_CONSTASCII_USTRINGPARAM("false") ); - theBootstrap.getFrom( rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("CFG_Offline") ), - theOfflineValue, - theDefaultOfflineValue ); - - rtl::OUString theServerTypeValue; - theBootstrap.getFrom( rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("CFG_ServerType") ), - theServerTypeValue ); - - rtl::OUString theBackendServiceTypeValue; - theBootstrap.getFrom( rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("CFG_BackendService") ), - theBackendServiceTypeValue ); - - sal_Bool bSSOEnabled = - ( theOfflineValue == theDefaultOfflineValue && - ( theServerTypeValue.getLength() == 0 || - theServerTypeValue == rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("uno") ) ) && - theBackendServiceTypeValue == - rtl::OUString(RTL_CONSTASCII_USTRINGPARAM( - "com.sun.star.comp.configuration.backend.LdapSingleBackend") ) ); - if ( bSSOEnabled && GetSSOCreator() == 0 ) - { - bSSOEnabled = sal_False; - } - return bSSOEnabled; -} - -extern "C" { static void SAL_CALL thisModule() {} } - -CreateTabPage GetSSOCreator( void ) -{ - static CreateTabPage theSymbol = 0; - if ( theSymbol == 0 ) - { - osl::Module aModule; - rtl::OUString theModuleName( RTL_CONSTASCII_USTRINGPARAM( SVLIBRARY( "ssoopt" ) ) ); - if( aModule.loadRelative( - &thisModule, theModuleName, SAL_LOADMODULE_DEFAULT ) ) - { - rtl::OUString theSymbolName( RTL_CONSTASCII_USTRINGPARAM("CreateSSOTabPage" ) ); - theSymbol = reinterpret_cast<CreateTabPage>(aModule.getFunctionSymbol( theSymbolName )); - } - } - - return theSymbol; -} - -SfxItemSet* OfaTreeOptionsDialog::CreateItemSet( sal_uInt16 nId ) -{ - Reference< XPropertySet > xProp( SvxGetLinguPropertySet() ); - SfxItemSet* pRet = 0; - switch(nId) - { - case SID_GENERAL_OPTIONS: - { - pRet = new SfxItemSet( - SFX_APP()->GetPool(), - SID_ATTR_METRIC, SID_ATTR_SPELL, - SID_AUTOSPELL_CHECK, SID_AUTOSPELL_CHECK, - SID_ATTR_QUICKLAUNCHER, SID_ATTR_QUICKLAUNCHER, - SID_ATTR_YEAR2000, SID_ATTR_YEAR2000, - SID_HTML_MODE, SID_HTML_MODE, - 0 ); - - SfxItemSet aOptSet( SFX_APP()->GetPool(), SID_ATTR_QUICKLAUNCHER, SID_ATTR_QUICKLAUNCHER ); - SFX_APP()->GetOptions(aOptSet); - pRet->Put(aOptSet); - - utl::MiscCfg aMisc; - const SfxPoolItem* pItem; - SfxViewFrame* pViewFrame = SfxViewFrame::Current(); - if ( pViewFrame ) - { - SfxDispatcher* pDispatch = pViewFrame->GetDispatcher(); - - // Sonstiges - Year2000 - if( SFX_ITEM_AVAILABLE <= pDispatch->QueryState( SID_ATTR_YEAR2000, pItem ) ) - pRet->Put( SfxUInt16Item( SID_ATTR_YEAR2000, ((const SfxUInt16Item*)pItem)->GetValue() ) ); - else - pRet->Put( SfxUInt16Item( SID_ATTR_YEAR2000, (sal_uInt16)aMisc.GetYear2000() ) ); - } - else - pRet->Put( SfxUInt16Item( SID_ATTR_YEAR2000, (sal_uInt16)aMisc.GetYear2000() ) ); - - - // Sonstiges - Tabulator - pRet->Put(SfxBoolItem(SID_PRINTER_NOTFOUND_WARN, aMisc.IsNotFoundWarning())); - - sal_uInt16 nFlag = aMisc.IsPaperSizeWarning() ? SFX_PRINTER_CHG_SIZE : 0; - nFlag |= aMisc.IsPaperOrientationWarning() ? SFX_PRINTER_CHG_ORIENTATION : 0; - pRet->Put( SfxFlagItem( SID_PRINTER_CHANGESTODOC, nFlag )); - - } - break; - case SID_LANGUAGE_OPTIONS : - { - pRet = new SfxItemSet(SFX_APP()->GetPool(), - SID_ATTR_LANGUAGE, SID_AUTOSPELL_CHECK, - SID_ATTR_CHAR_CJK_LANGUAGE, SID_ATTR_CHAR_CTL_LANGUAGE, - SID_OPT_LOCALE_CHANGED, SID_OPT_LOCALE_CHANGED, - SID_SET_DOCUMENT_LANGUAGE, SID_SET_DOCUMENT_LANGUAGE, - 0 ); - - // fuer die Linguistik - - Reference< XSpellChecker1 > xSpell = SvxGetSpellChecker(); - pRet->Put(SfxSpellCheckItem( xSpell, SID_ATTR_SPELL )); - SfxHyphenRegionItem aHyphen( SID_ATTR_HYPHENREGION ); - - sal_Int16 nMinLead = 2, - nMinTrail = 2; - if (xProp.is()) - { - xProp->getPropertyValue( String::CreateFromAscii( - UPN_HYPH_MIN_LEADING) ) >>= nMinLead; - xProp->getPropertyValue( String::CreateFromAscii( - UPN_HYPH_MIN_TRAILING) ) >>= nMinTrail; - } - aHyphen.GetMinLead() = (sal_uInt8)nMinLead; - aHyphen.GetMinTrail() = (sal_uInt8)nMinTrail; - - const SfxPoolItem* pItem; - SfxPoolItem* pClone; - SfxViewFrame* pViewFrame = SfxViewFrame::Current(); - if ( pViewFrame ) - { - SfxDispatcher* pDispatch = pViewFrame->GetDispatcher(); - if(SFX_ITEM_AVAILABLE <= pDispatch->QueryState(SID_ATTR_LANGUAGE, pItem)) - pRet->Put(SfxUInt16Item(SID_ATTR_LANGUAGE, ((const SvxLanguageItem*)pItem)->GetLanguage())); - if(SFX_ITEM_AVAILABLE <= pDispatch->QueryState(SID_ATTR_CHAR_CJK_LANGUAGE, pItem)) - pRet->Put(SfxUInt16Item(SID_ATTR_CHAR_CJK_LANGUAGE, ((const SvxLanguageItem*)pItem)->GetLanguage())); - if(SFX_ITEM_AVAILABLE <= pDispatch->QueryState(SID_ATTR_CHAR_CTL_LANGUAGE, pItem)) - pRet->Put(SfxUInt16Item(SID_ATTR_CHAR_CTL_LANGUAGE, ((const SvxLanguageItem*)pItem)->GetLanguage())); - - pRet->Put(aHyphen); - if(SFX_ITEM_AVAILABLE <= pDispatch->QueryState(SID_AUTOSPELL_CHECK, pItem)) - { - pClone = pItem->Clone(); - pRet->Put(*pClone); - delete pClone; - } - else - { - sal_Bool bVal = sal_False; - if (xProp.is()) - { - xProp->getPropertyValue( String::CreateFromAscii( UPN_IS_SPELL_AUTO) ) >>= bVal; - } - - pRet->Put(SfxBoolItem(SID_AUTOSPELL_CHECK, bVal)); - } - } - pRet->Put( SfxBoolItem( SID_SET_DOCUMENT_LANGUAGE, bIsForSetDocumentLanguage ) ); - } - break; - case SID_INET_DLG : - pRet = new SfxItemSet( SFX_APP()->GetPool(), - SID_BASIC_ENABLED, SID_BASIC_ENABLED, - //SID_OPTIONS_START - ..END - SID_OPTIONS_START, SID_INET_PROXY_PORT, - SID_SAVEREL_INET, SID_SAVEREL_FSYS, - SID_INET_SMTPSERVER, SID_INET_SMTPSERVER, - SID_INET_NOPROXY, SID_INET_SOCKS_PROXY_PORT, - SID_INET_DNS_AUTO, SID_INET_DNS_SERVER, - SID_SECURE_URL, SID_SECURE_URL, - 0L ); - SFX_APP()->GetOptions(*pRet); - break; - case SID_FILTER_DLG: - pRet = new SfxItemSet( SFX_APP()->GetPool(), - SID_ATTR_DOCINFO, SID_ATTR_AUTOSAVEMINUTE, - SID_SAVEREL_INET, SID_SAVEREL_FSYS, - SID_ATTR_PRETTYPRINTING, SID_ATTR_PRETTYPRINTING, - SID_ATTR_WARNALIENFORMAT, SID_ATTR_WARNALIENFORMAT, - 0 ); - SFX_APP()->GetOptions(*pRet); - break; - - case SID_SB_STARBASEOPTIONS: - pRet = new SfxItemSet( SFX_APP()->GetPool(), - SID_SB_POOLING_ENABLED, SID_SB_DB_REGISTER, - 0 ); - ::offapp::ConnectionPoolConfig::GetOptions(*pRet); - ::svx::DbRegisteredNamesConfig::GetOptions(*pRet); - break; - - case SID_SCH_EDITOPTIONS: - { - SvxChartOptions aChartOpt; - pRet = new SfxItemSet( SFX_APP()->GetPool(), SID_SCH_EDITOPTIONS, SID_SCH_EDITOPTIONS ); - pRet->Put( SvxChartColorTableItem( SID_SCH_EDITOPTIONS, aChartOpt.GetDefaultColors() ) ); - break; - } - } - return pRet; -} - -void OfaTreeOptionsDialog::ApplyItemSet( sal_uInt16 nId, const SfxItemSet& rSet ) -{ - switch(nId) - { - case SID_GENERAL_OPTIONS: - { - utl::MiscCfg aMisc; - const SfxPoolItem* pItem; - SfxItemSet aOptSet(SFX_APP()->GetPool(), SID_ATTR_QUICKLAUNCHER, SID_ATTR_QUICKLAUNCHER ); - aOptSet.Put(rSet); - if(aOptSet.Count()) - SFX_APP()->SetOptions( aOptSet ); - // Dispatcher neu holen, weil SetOptions() ggf. den Dispatcher zerst"ort hat - SfxViewFrame *pViewFrame = SfxViewFrame::Current(); -// ------------------------------------------------------------------------- -// Year2000 auswerten -// ------------------------------------------------------------------------- - sal_uInt16 nY2K = USHRT_MAX; - if( SFX_ITEM_SET == rSet.GetItemState( SID_ATTR_YEAR2000, sal_False, &pItem ) ) - nY2K = ((const SfxUInt16Item*)pItem)->GetValue(); - if( USHRT_MAX != nY2K ) - { - if ( pViewFrame ) - { - SfxDispatcher* pDispatch = pViewFrame->GetDispatcher(); - pDispatch->Execute( SID_ATTR_YEAR2000, SFX_CALLMODE_ASYNCHRON, pItem, 0L); - } - aMisc.SetYear2000(nY2K); - } - -// ------------------------------------------------------------------------- -// Drucken auswerten -// ------------------------------------------------------------------------- - if(SFX_ITEM_SET == rSet.GetItemState(SID_PRINTER_NOTFOUND_WARN, sal_False, &pItem)) - aMisc.SetNotFoundWarning(((const SfxBoolItem*)pItem)->GetValue()); - - if(SFX_ITEM_SET == rSet.GetItemState(SID_PRINTER_CHANGESTODOC, sal_False, &pItem)) - { - const SfxFlagItem* pFlag = (const SfxFlagItem*)pItem; - aMisc.SetPaperSizeWarning(0 != (pFlag->GetValue() & SFX_PRINTER_CHG_SIZE )); - aMisc.SetPaperOrientationWarning(0 != (pFlag->GetValue() & SFX_PRINTER_CHG_ORIENTATION )); - } -// ------------------------------------------------------------------------- -// evaluate help options -// ------------------------------------------------------------------------- - if ( SvtHelpOptions().IsHelpTips() != Help::IsQuickHelpEnabled() ) - SvtHelpOptions().IsHelpTips() ? Help::EnableQuickHelp() : Help::DisableQuickHelp(); - if ( SvtHelpOptions().IsExtendedHelp() != Help::IsBalloonHelpEnabled() ) - SvtHelpOptions().IsExtendedHelp() ? Help::EnableBalloonHelp() : Help::DisableBalloonHelp(); - } - break; - case SID_LANGUAGE_OPTIONS : - { - OfaTreeOptionsDialog::ApplyLanguageOptions(rSet); - } - break; - case SID_INET_DLG : - case SID_FILTER_DLG: - SFX_APP()->SetOptions( rSet ); - break; - - case SID_SB_STARBASEOPTIONS: - ::offapp::ConnectionPoolConfig::SetOptions( rSet ); - ::svx::DbRegisteredNamesConfig::SetOptions(rSet); - break; - - case SID_SCH_EDITOPTIONS: - // nothing to do. Chart options only apply to newly created charts - break; - - default: - { - OSL_FAIL( "Unhandled option in ApplyItemSet" ); - } - break; - } - -} -void OfaTreeOptionsDialog::ApplyLanguageOptions(const SfxItemSet& rSet) -{ - sal_Bool bSaveSpellCheck = sal_False; - const SfxPoolItem* pItem; - - if ( SFX_ITEM_SET == rSet.GetItemState( SID_SPELL_MODIFIED, sal_False, &pItem ) ) - { - bSaveSpellCheck = ( (const SfxBoolItem*)pItem )->GetValue(); - } - Reference< XMultiServiceFactory > xMgr( ::comphelper::getProcessServiceFactory() ); - Reference< XPropertySet > xProp( - xMgr->createInstance( ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM( - "com.sun.star.linguistic2.LinguProperties") ) ), - UNO_QUERY ); - if ( SFX_ITEM_SET == rSet.GetItemState(SID_ATTR_HYPHENREGION, sal_False, &pItem ) ) - { - const SfxHyphenRegionItem* pHyphenItem = (const SfxHyphenRegionItem*)pItem; - - if (xProp.is()) - { - xProp->setPropertyValue( - String::CreateFromAscii(UPN_HYPH_MIN_LEADING), - makeAny((sal_Int16) pHyphenItem->GetMinLead()) ); - xProp->setPropertyValue( - String::CreateFromAscii(UPN_HYPH_MIN_TRAILING), - makeAny((sal_Int16) pHyphenItem->GetMinTrail()) ); - } - bSaveSpellCheck = sal_True; - } - - SfxViewFrame *pViewFrame = SfxViewFrame::Current(); - if ( pViewFrame ) - { - SfxDispatcher* pDispatch = pViewFrame->GetDispatcher(); - pItem = 0; - if(SFX_ITEM_SET == rSet.GetItemState( SID_ATTR_LANGUAGE, sal_False, &pItem )) - { - pDispatch->Execute(pItem->Which(), SFX_CALLMODE_ASYNCHRON, pItem, 0L); - bSaveSpellCheck = sal_True; - } - if(SFX_ITEM_SET == rSet.GetItemState( SID_ATTR_CHAR_CTL_LANGUAGE, sal_False, &pItem )) - { - pDispatch->Execute(pItem->Which(), SFX_CALLMODE_ASYNCHRON, pItem, 0L); - bSaveSpellCheck = sal_True; - } - if(SFX_ITEM_SET == rSet.GetItemState( SID_ATTR_CHAR_CJK_LANGUAGE, sal_False, &pItem )) - { - pDispatch->Execute(pItem->Which(), SFX_CALLMODE_ASYNCHRON, pItem, 0L); - bSaveSpellCheck = sal_True; - } - - if( SFX_ITEM_SET == rSet.GetItemState(SID_AUTOSPELL_CHECK, sal_False, &pItem )) - { - sal_Bool bOnlineSpelling = ((const SfxBoolItem*)pItem)->GetValue(); - pDispatch->Execute(SID_AUTOSPELL_CHECK, - SFX_CALLMODE_ASYNCHRON|SFX_CALLMODE_RECORD, pItem, 0L); - - if (xProp.is()) - { - xProp->setPropertyValue( - String::CreateFromAscii(UPN_IS_SPELL_AUTO), - makeAny(bOnlineSpelling) ); - } - } - - if( bSaveSpellCheck ) - { - //! the config item has changed since we modified the - //! property set it uses - pDispatch->Execute(SID_SPELLCHECKER_CHANGED, SFX_CALLMODE_ASYNCHRON); - } - } - - if( SFX_ITEM_SET == rSet.GetItemState(SID_OPT_LOCALE_CHANGED, sal_False, &pItem )) - { - SfxViewFrame* _pViewFrame = SfxViewFrame::GetFirst(); - while ( _pViewFrame ) - { - _pViewFrame->GetDispatcher()->Execute(pItem->Which(), SFX_CALLMODE_ASYNCHRON, pItem, 0L); - _pViewFrame = SfxViewFrame::GetNext( *_pViewFrame ); - } - } -} - -rtl::OUString getCurrentFactory_Impl( const Reference< XFrame >& _xFrame ) -{ - rtl::OUString sIdentifier; - Reference < XFrame > xCurrentFrame( _xFrame ); - Reference < XModuleManager > xModuleManager( ::comphelper::getProcessServiceFactory()->createInstance( - DEFINE_CONST_UNICODE("com.sun.star.frame.ModuleManager") ), UNO_QUERY ); - if ( !xCurrentFrame.is() ) - { - Reference< XDesktop > xDesktop( ::comphelper::getProcessServiceFactory()->createInstance( - DEFINE_CONST_UNICODE("com.sun.star.frame.Desktop") ), UNO_QUERY ); - if ( xDesktop.is() ) - xCurrentFrame = xDesktop->getCurrentFrame(); - } - - if ( xCurrentFrame.is() && xModuleManager.is() ) - { - try - { - sIdentifier = xModuleManager->identify( xCurrentFrame ); - } - catch ( ::com::sun::star::frame::UnknownModuleException& ) - { - DBG_WARNING( "getActiveModule_Impl(): unknown module" ); - } - catch ( Exception& ) - { - DBG_ERRORFILE( "getActiveModule_Impl(): exception of XModuleManager::identify()" ); - } - } - - return sIdentifier; -} - -void OfaTreeOptionsDialog::Initialize( const Reference< XFrame >& _xFrame ) -{ - OfaPageResource aDlgResource; - sal_uInt16 nGroup = 0; - - SvtOptionsDialogOptions aOptionsDlgOpt; - sal_uInt16 i, nPageId; - - // %PRODUCTNAME options - sal_Bool isSSOEnabled = EnableSSO(); - if ( !lcl_isOptionHidden( SID_GENERAL_OPTIONS, aOptionsDlgOpt ) ) - { - ResStringArray& rGeneralArray = aDlgResource.GetGeneralArray(); - setGroupName( C2U("ProductName"), rGeneralArray.GetString(0) ); - nGroup = AddGroup( rGeneralArray.GetString(0), 0, 0, SID_GENERAL_OPTIONS ); - sal_uInt16 nEnd = static_cast< sal_uInt16 >( rGeneralArray.Count() ); - String sPageTitle; - - for ( i = 1; i < nEnd; ++i ) - { - String sNewTitle = rGeneralArray.GetString(i); - nPageId = (sal_uInt16)rGeneralArray.GetValue(i); - if ( lcl_isOptionHidden( nPageId, aOptionsDlgOpt ) ) - continue; - - // Disable Online Update page if service not installed - if( RID_SVXPAGE_ONLINEUPDATE == nPageId ) - { - const ::rtl::OUString sService = C2U("com.sun.star.setup.UpdateCheck"); - - try - { - Reference < XMultiServiceFactory > xFactory( ::comphelper::getProcessServiceFactory() ); - Reference < XInterface > xService( xFactory->createInstance( sService ) ); - - if( ! xService.is() ) - continue; - } - catch ( ::com::sun::star::loader::CannotActivateFactoryException& ) - { - continue; - } - } - // Disable OOoImprovement page if not enabled - if( RID_SVXPAGE_IMPROVEMENT == nPageId ) - { - continue; - } - if ( nPageId != RID_SVXPAGE_SSO || isSSOEnabled ) - { - AddTabPage( nPageId, sNewTitle, nGroup ); - } - } - // private iteration hack for Improvement Program - // hack for OOo 3.1 - // should not be in found in any later release - for(bool bOnce = false; bOnce==false; bOnce=true) - { - String sNewTitle = C2U("Improvement Program"); - { - SvxImprovementPage aTempTabPage(this); - sNewTitle = aTempTabPage.GetTitleText(); - } - nPageId = RID_SVXPAGE_IMPROVEMENT; - if ( lcl_isOptionHidden( nPageId, aOptionsDlgOpt ) ) - continue; - // Disable OOoImprovement page if not enabled - { - const ::rtl::OUString sService = C2U("com.sun.star.oooimprovement.CoreController"); - try - { - Reference < XMultiServiceFactory > xFactory( ::comphelper::getProcessServiceFactory() ); - Reference < ::com::sun::star::oooimprovement::XCoreController > xService( xFactory->createInstance( sService ), UNO_QUERY ); - - if( ! xService.is() ) - continue; - if( ! xService->showBuiltinOptionsPage(1)) - continue; - } - catch ( ::com::sun::star::loader::CannotActivateFactoryException& ) - { - continue; - } - } - if ( nPageId != RID_SVXPAGE_SSO || isSSOEnabled ) - { - AddTabPage( nPageId, sNewTitle, nGroup ); - } - } - } - - // Load and Save options - if ( !lcl_isOptionHidden( SID_FILTER_DLG, aOptionsDlgOpt ) ) - { - ResStringArray& rFilterArray = aDlgResource.GetFilterArray(); - setGroupName( C2U("LoadSave"), rFilterArray.GetString(0) ); - nGroup = AddGroup( rFilterArray.GetString(0), 0, 0, SID_FILTER_DLG ); - for ( i = 1; i < rFilterArray.Count(); ++i ) - { - nPageId = (sal_uInt16)rFilterArray.GetValue(i); - if ( !lcl_isOptionHidden( nPageId, aOptionsDlgOpt ) ) - AddTabPage( nPageId, rFilterArray.GetString(i), nGroup ); - } - } - - // Language options - SvtLanguageOptions aLanguageOptions; - if ( !lcl_isOptionHidden( SID_LANGUAGE_OPTIONS, aOptionsDlgOpt ) ) - { - ResStringArray& rLangArray = aDlgResource.GetLangArray(); - setGroupName( C2U("LanguageSettings"), rLangArray.GetString(0) ); - nGroup = AddGroup( rLangArray.GetString(0), 0, 0, SID_LANGUAGE_OPTIONS ); - for ( i = 1; i < rLangArray.Count(); ++i ) - { - nPageId = (sal_uInt16)rLangArray.GetValue(i); - if ( lcl_isOptionHidden( nPageId, aOptionsDlgOpt ) ) - continue; - if ( ( RID_SVXPAGE_JSEARCH_OPTIONS != nPageId || aLanguageOptions.IsJapaneseFindEnabled() ) && - ( RID_SVXPAGE_ASIAN_LAYOUT != nPageId || aLanguageOptions.IsAsianTypographyEnabled() ) && - ( RID_SVXPAGE_OPTIONS_CTL != nPageId || aLanguageOptions.IsCTLFontEnabled() ) ) - AddTabPage( nPageId, rLangArray.GetString(i), nGroup ); - } - } - - - rtl::OUString aFactory = getCurrentFactory_Impl( _xFrame ); - rtl::OUString sTemp = GetModuleIdentifier( comphelper::getProcessServiceFactory(), _xFrame ); - DBG_ASSERT( sTemp == aFactory, "S H I T!!!" ); - - // Writer and Writer/Web options - SvtModuleOptions aModuleOpt; - if ( aModuleOpt.IsModuleInstalled( SvtModuleOptions::E_SWRITER ) ) - { - // Textdokument - ResStringArray& rTextArray = aDlgResource.GetTextArray(); - if ( aFactory.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM( "com.sun.star.text.TextDocument" ) ) - || aFactory.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM( "com.sun.star.text.WebDocument" ) ) - || aFactory.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM( "com.sun.star.text.GlobalDocument" ) ) ) - { - SfxModule* pSwMod = (*(SfxModule**) GetAppData(SHL_WRITER)); - if ( !lcl_isOptionHidden( SID_SW_EDITOPTIONS, aOptionsDlgOpt ) ) - { - if ( aFactory.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM( "com.sun.star.text.WebDocument" ) ) ) - setGroupName( C2U("WriterWeb"), rTextArray.GetString(0) ); - else - setGroupName( C2U("Writer"), rTextArray.GetString(0) ); - nGroup = AddGroup(rTextArray.GetString(0), pSwMod, pSwMod, SID_SW_EDITOPTIONS ); - for ( i = 1; i < rTextArray.Count(); ++i ) - { - nPageId = (sal_uInt16)rTextArray.GetValue(i); - if ( lcl_isOptionHidden( nPageId, aOptionsDlgOpt ) ) - continue; - if ( ( RID_SW_TP_STD_FONT_CJK != nPageId || aLanguageOptions.IsCJKFontEnabled() ) && - ( RID_SW_TP_STD_FONT_CTL != nPageId || aLanguageOptions.IsCTLFontEnabled() ) && - ( RID_SW_TP_MAILCONFIG != nPageId || MailMergeCfg_Impl().IsEmailSupported() ) ) - AddTabPage( nPageId, rTextArray.GetString(i), nGroup ); - } -#ifdef DBG_UTIL - AddTabPage( RID_SW_TP_OPTTEST_PAGE, String::CreateFromAscii("Interner Test"), nGroup ); -#endif - } - - // HTML-Dokument - if ( !lcl_isOptionHidden( SID_SW_ONLINEOPTIONS, aOptionsDlgOpt ) ) - { - ResStringArray& rHTMLArray = aDlgResource.GetHTMLArray(); - nGroup = AddGroup(rHTMLArray.GetString(0), pSwMod, pSwMod, SID_SW_ONLINEOPTIONS ); - for( i = 1; i < rHTMLArray.Count(); ++i ) - { - nPageId = (sal_uInt16)rHTMLArray.GetValue(i); - if ( !lcl_isOptionHidden( nPageId, aOptionsDlgOpt ) ) - AddTabPage( nPageId, rHTMLArray.GetString(i), nGroup ); - } -#ifdef DBG_UTIL - AddTabPage( RID_SW_TP_OPTTEST_PAGE, String::CreateFromAscii("Interner Test"), nGroup ); -#endif - } - } - } - - // Calc options - if ( aModuleOpt.IsModuleInstalled( SvtModuleOptions::E_SCALC ) ) - { - if ( aFactory.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM( "com.sun.star.sheet.SpreadsheetDocument" ) )) - { - if ( !lcl_isOptionHidden( SID_SC_EDITOPTIONS, aOptionsDlgOpt ) ) - { - ResStringArray& rCalcArray = aDlgResource.GetCalcArray(); - SfxModule* pScMod = ( *( SfxModule** ) GetAppData( SHL_CALC ) ); - setGroupName( C2U("Calc"), rCalcArray.GetString(0) ); - nGroup = AddGroup( rCalcArray.GetString( 0 ), pScMod, pScMod, SID_SC_EDITOPTIONS ); - const sal_uInt16 nCount = static_cast< const sal_uInt16 >( rCalcArray.Count() ); - for ( i = 1; i < nCount; ++i ) - { - nPageId = (sal_uInt16)rCalcArray.GetValue(i); - if ( lcl_isOptionHidden( nPageId, aOptionsDlgOpt ) ) - continue; -// if( bCTL || nId != RID_OFA_TP_INTERNATIONAL ) -// #103755# if an international tabpage is need one day, this should be used again... ;-) - if ( nPageId != RID_OFA_TP_INTERNATIONAL ) - AddTabPage( nPageId, rCalcArray.GetString( i ), nGroup ); - } - } - } - } - - // Impress options - SfxModule* pSdMod = ( *( SfxModule** ) GetAppData( SHL_DRAW ) ); - if ( aModuleOpt.IsModuleInstalled( SvtModuleOptions::E_SIMPRESS ) ) - { - if ( aFactory.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM( "com.sun.star.presentation.PresentationDocument" ) )) - { - if ( !lcl_isOptionHidden( SID_SD_EDITOPTIONS, aOptionsDlgOpt ) ) - { - ResStringArray& rImpressArray = aDlgResource.GetImpressArray(); - setGroupName( C2U("Impress"), rImpressArray.GetString(0) ); - nGroup = AddGroup( rImpressArray.GetString( 0 ), pSdMod, pSdMod, SID_SD_EDITOPTIONS ); - const sal_Bool bCTL = aLanguageOptions.IsCTLFontEnabled(); - const sal_uInt16 nCount = static_cast< const sal_uInt16 >( rImpressArray.Count() ); - for ( i = 1; i < nCount; ++i ) - { - nPageId = (sal_uInt16)rImpressArray.GetValue(i); - if ( lcl_isOptionHidden( nPageId, aOptionsDlgOpt ) ) - continue; - if ( bCTL || nPageId != RID_OFA_TP_INTERNATIONAL_IMPR ) - AddTabPage( nPageId, rImpressArray.GetString(i), nGroup ); - } - } - } - } - - // Draw options - if ( aModuleOpt.IsModuleInstalled( SvtModuleOptions::E_SDRAW ) ) - { - if ( aFactory.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM( "com.sun.star.drawing.DrawingDocument" ) )) - { - if ( !lcl_isOptionHidden( SID_SD_GRAPHIC_OPTIONS, aOptionsDlgOpt ) ) - { - ResStringArray& rDrawArray = aDlgResource.GetDrawArray(); - setGroupName( C2U("Draw"), rDrawArray.GetString(0) ); - nGroup = AddGroup( rDrawArray.GetString( 0 ), pSdMod, pSdMod, SID_SD_GRAPHIC_OPTIONS ); - const sal_Bool bCTL = aLanguageOptions.IsCTLFontEnabled(); - const sal_uInt16 nCount = static_cast< const sal_uInt16 >( rDrawArray.Count() ); - for ( i = 1; i < nCount; ++i ) - { - nPageId = (sal_uInt16)rDrawArray.GetValue(i); - if ( lcl_isOptionHidden( nPageId, aOptionsDlgOpt ) ) - continue; - if ( bCTL || nPageId != RID_OFA_TP_INTERNATIONAL_SD ) - AddTabPage( nPageId, rDrawArray.GetString(i), nGroup ); - } - } - } - } - - // Math options - if ( aModuleOpt.IsModuleInstalled( SvtModuleOptions::E_SMATH ) ) - { - if ( aFactory.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM( "com.sun.star.formula.FormulaProperties" ) )) - { - if ( !lcl_isOptionHidden( SID_SM_EDITOPTIONS, aOptionsDlgOpt ) ) - { - ResStringArray& rStarMathArray = aDlgResource.GetStarMathArray(); - SfxModule* pSmMod = (*(SfxModule**) GetAppData(SHL_SM)); - setGroupName( C2U("Math"), rStarMathArray.GetString(0) ); - nGroup = AddGroup(rStarMathArray.GetString(0), pSmMod, pSmMod, SID_SM_EDITOPTIONS ); - for ( i = 1; i < rStarMathArray.Count(); ++i ) - { - nPageId = (sal_uInt16)rStarMathArray.GetValue(i); - if ( !lcl_isOptionHidden( nPageId, aOptionsDlgOpt ) ) - AddTabPage( nPageId, rStarMathArray.GetString(i), nGroup ); - } - } - } - } - - // Database - needed only if there is an application which integrates with databases - if ( !lcl_isOptionHidden( SID_SB_STARBASEOPTIONS, aOptionsDlgOpt ) && - ( aModuleOpt.IsModuleInstalled( SvtModuleOptions::E_SDATABASE ) - || aModuleOpt.IsModuleInstalled( SvtModuleOptions::E_SWRITER ) - || aModuleOpt.IsModuleInstalled( SvtModuleOptions::E_SCALC ) - ) ) - { - ResStringArray& rDSArray = aDlgResource.GetDatasourcesArray(); - setGroupName( C2U("Base"), rDSArray.GetString(0) ); - nGroup = AddGroup( rDSArray.GetString(0), 0, NULL, SID_SB_STARBASEOPTIONS ); - for ( i = 1; i < rDSArray.Count(); ++i ) - { - nPageId = (sal_uInt16)rDSArray.GetValue(i); - if ( !lcl_isOptionHidden( nPageId, aOptionsDlgOpt ) ) - AddTabPage( nPageId, rDSArray.GetString(i), nGroup ); - } - } - - // Chart options (always installed and active) - if ( !lcl_isOptionHidden( SID_SCH_EDITOPTIONS, aOptionsDlgOpt ) ) - { - ResStringArray& rChartArray = aDlgResource.GetChartArray(); - setGroupName( C2U("Charts"), rChartArray.GetString(0) ); - nGroup = AddGroup( rChartArray.GetString(0), 0, 0, SID_SCH_EDITOPTIONS ); - for ( i = 1; i < rChartArray.Count(); ++i ) - { - nPageId = (sal_uInt16)rChartArray.GetValue(i); - if ( !lcl_isOptionHidden( nPageId, aOptionsDlgOpt ) ) - AddTabPage( nPageId, rChartArray.GetString(i), nGroup ); - } - } - - // Internet options - if ( !lcl_isOptionHidden( SID_INET_DLG, aOptionsDlgOpt ) ) - { - ResStringArray& rInetArray = aDlgResource.GetInetArray(); - setGroupName( C2U("Internet"), rInetArray.GetString(0) ); - nGroup = AddGroup(rInetArray.GetString(0), 0, 0, SID_INET_DLG ); - - for ( i = 1; i < rInetArray.Count(); ++i ) - { - nPageId = (sal_uInt16)rInetArray.GetValue(i); - if ( lcl_isOptionHidden( nPageId, aOptionsDlgOpt ) ) - continue; -#if defined WNT - // Disable E-mail tab-page on Windows - if ( nPageId == RID_SVXPAGE_INET_MAIL ) - continue; -#endif -#if defined MACOSX - // Disable Mozilla Plug-in tab-page on Mac - if ( nPageId == RID_SVXPAGE_INET_MOZPLUGIN ) - continue; -#endif -#ifdef LINUX - // Disable Mozilla Plug-in tab-page on Linux if we find a - // globally installed plugin - if ( nPageId == RID_SVXPAGE_INET_MOZPLUGIN ) { - struct stat sb; - char *p; - bool bHaveSystemWidePlugin = false; - char mozpaths[]="/usr/lib/mozilla/plugins/libnpsoplugin.so:/usr/lib/firefox/plugins/libnpsoplugin.so:/usr/lib/mozilla-firefox/plugins/libnpsoplugin.so:/usr/lib/iceweasel/plugins/libnpsoplugin.so:/usr/lib/iceape/plugins/libnpsoplugin.so:/usr/lib/browser-plugins/libnpsoplugin.so:/usr/lib64/browser-plugins/libnpsoplugin.so"; - - p = strtok(mozpaths, ":"); - while (p != NULL) { - if (stat(p, &sb) != -1) { - bHaveSystemWidePlugin = true; - break; - } - p = strtok(NULL, ":"); - } - - if (bHaveSystemWidePlugin == true) - continue; - } -#endif - AddTabPage( nPageId, rInetArray.GetString(i), nGroup ); - } - } - -/*!!! - ResizeTreeLB(); - ActivateLastSelection(); - */ -} - -namespace -{ - void MoveControl( Control& _rCtrl, long _nDeltaPixel ) - { - Point aPt( _rCtrl.GetPosPixel() ); - aPt.X() += _nDeltaPixel; - _rCtrl.SetPosPixel( aPt ); - } -} - -void OfaTreeOptionsDialog::ResizeTreeLB( void ) -{ - const long nMax = aHiddenGB.GetSizePixel().Width() * 42 / 100; - // don't ask where 42 comes from... but it looks / feels ok ;-) - long nDelta = 50; // min. - sal_uInt16 nDepth = 0; - const long nIndent0 = PixelToLogic( Size( 28, 0 ) ).Width(); - const long nIndent1 = PixelToLogic( Size( 52, 0 ) ).Width(); - - SvTreeList* pTreeList = aTreeLB.GetModel(); - DBG_ASSERT( pTreeList, "-OfaTreeOptionsDialog::ResizeTreeLB(): no model, no cookies!" ); - - SvListEntry* pEntry = pTreeList->First(); - while( pEntry ) - { - long n = aTreeLB.GetTextWidth( aTreeLB.GetEntryText( static_cast< SvLBoxEntry* >( pEntry ) ) ); - n += ((nDepth == 0) ? nIndent0 : nIndent1); - - if( n > nDelta ) - nDelta = n; - - pEntry = pTreeList->Next( pEntry, &nDepth ); - } - - nDelta = LogicToPixel( Size( nDelta + 3, 0 ) ).Width(); // + extra space [logic] - nDelta += GetSettings().GetStyleSettings().GetScrollBarSize(); // + scroll bar, in case it's needed - - if( nDelta > nMax ) - nDelta = nMax; - - // starting resizing with this - Size aSize( GetSizePixel() ); - aSize.Width() += nDelta; - SetSizePixel( aSize ); - - // resize treelistbox - aSize = aTreeLB.GetSizePixel(); - aSize.Width() += nDelta; - aTreeLB.SetSizePixel( aSize ); - - // ... and move depending controls - MoveControl( aOkPB, nDelta ); - MoveControl( aCancelPB, nDelta ); - MoveControl( aHelpPB, nDelta ); - MoveControl( aBackPB, nDelta ); - MoveControl( aHiddenGB, nDelta ); - MoveControl( aPageTitleFT, nDelta ); - MoveControl( aLine1FL, nDelta ); - MoveControl( aHelpFT, nDelta ); - MoveControl( aHelpImg, nDelta ); -} - -bool isNodeActive( OptionsNode* pNode, Module* pModule ) -{ - if ( pNode ) - { - // Node for all modules actine? - if ( pNode->m_bAllModules ) - return true; - - // OOo-Nodes (Writer, Calc, Impress...) are active if node is already inserted - if ( getGroupName( pNode->m_sId, false ).Len() > 0 ) - return true; - - // no module -> not active - if ( !pModule ) - return false; - - // search node in active module - if ( pModule->m_bActive ) - { - for ( sal_uInt32 j = 0; j < pModule->m_aNodeList.size(); ++j ) - if ( pModule->m_aNodeList[j]->m_sId == pNode->m_sId ) - return true; - } - } - return false; -} - -void OfaTreeOptionsDialog::LoadExtensionOptions( const rtl::OUString& rExtensionId ) -{ - Module* pModule = NULL; - Reference< XMultiServiceFactory > xMSFac = comphelper::getProcessServiceFactory(); - // open optionsdialog.xcu - Reference< XNameAccess > xRoot( - ::comphelper::ConfigurationHelper::openConfig( - xMSFac, C2U("org.openoffice.Office.OptionsDialog"), - ::comphelper::ConfigurationHelper::E_READONLY ), UNO_QUERY ); - DBG_ASSERT( xRoot.is(), "OfaTreeOptionsDialog::LoadExtensionOptions(): no config" ); - // when called by Tools - Options then load nodes of active module - if ( rExtensionId.getLength() == 0 ) - pModule = LoadModule( GetModuleIdentifier( xMSFac, Reference< XFrame >() ), xRoot ); - - VectorOfNodes aNodeList; - LoadNodes( xRoot, pModule, rExtensionId, aNodeList ); - InsertNodes( aNodeList ); -} - -rtl::OUString OfaTreeOptionsDialog::GetModuleIdentifier( - const Reference< XMultiServiceFactory >& xMFac, const Reference< XFrame >& rFrame ) -{ - rtl::OUString sModule; - Reference < XFrame > xCurrentFrame( rFrame ); - Reference < XModuleManager > xModuleManager( xMFac->createInstance( - C2U("com.sun.star.frame.ModuleManager") ), UNO_QUERY ); - - if ( !xCurrentFrame.is() ) - { - Reference < XDesktop > xDesktop( xMFac->createInstance( - C2U("com.sun.star.frame.Desktop") ), UNO_QUERY ); - if ( xDesktop.is() ) - xCurrentFrame = xDesktop->getCurrentFrame(); - } - - if ( xCurrentFrame.is() && xModuleManager.is() ) - { - try - { - sModule = xModuleManager->identify( xCurrentFrame ); - } - catch ( ::com::sun::star::frame::UnknownModuleException& ) - { - DBG_WARNING( "OfaTreeOptionsDialog::GetModuleIdentifier(): unknown module" ); - } - catch ( Exception& ) - { - DBG_ERRORFILE( "OfaTreeOptionsDialog::GetModuleIdentifier(): exception of XModuleManager::identify()" ); - } - } - return sModule; -} - -Module* OfaTreeOptionsDialog::LoadModule( - const rtl::OUString& rModuleIdentifier, const Reference< XNameAccess >& xRoot ) -{ - Module* pModule = NULL; - Reference< XNameAccess > xSet; - - if ( xRoot->hasByName( C2U("Modules") ) ) - { - xRoot->getByName( C2U("Modules") ) >>= xSet; - if ( xSet.is() ) - { - Sequence< rtl::OUString > seqNames = xSet->getElementNames(); - for ( int i = 0; i < seqNames.getLength(); ++i ) - { - rtl::OUString sModule( seqNames[i] ); - if ( rModuleIdentifier == sModule ) - { - // current active module found - pModule = new Module( sModule ); - pModule->m_bActive = true; - - Reference< XNameAccess > xModAccess; - xSet->getByName( seqNames[i] ) >>= xModAccess; - if ( xModAccess.is() ) - { - // load the nodes of this module - Reference< XNameAccess > xNodeAccess; - xModAccess->getByName( C2U("Nodes") ) >>= xNodeAccess; - if ( xNodeAccess.is() ) - { - Sequence< rtl::OUString > xTemp = xNodeAccess->getElementNames(); - Reference< XNameAccess > xAccess; - sal_Int32 nIndex = -1; - for ( int x = 0; x < xTemp.getLength(); ++x ) - { - xNodeAccess->getByName( xTemp[x] ) >>= xAccess; - if ( xAccess.is() ) - { - xAccess->getByName( C2U("Index") ) >>= nIndex; - if ( nIndex < 0 ) - // append nodes with index < 0 - pModule->m_aNodeList.push_back( - new OrderedEntry( nIndex, xTemp[x] ) ); - else - { - // search position of the node - sal_uInt32 y = 0; - for ( ; y < pModule->m_aNodeList.size(); ++y ) - { - sal_Int32 nNodeIdx = pModule->m_aNodeList[y]->m_nIndex; - if ( nNodeIdx < 0 || nNodeIdx > nIndex ) - break; - } - // and insert the node on this position - pModule->m_aNodeList.insert( - pModule->m_aNodeList.begin() + y, - new OrderedEntry( nIndex, xTemp[x] ) ); - } - } - } - } - } - } - } - } - } - return pModule; -} - -void OfaTreeOptionsDialog::LoadNodes( - const Reference< XNameAccess >& xRoot, Module* pModule, - const rtl::OUString& rExtensionId, VectorOfNodes& rOutNodeList ) -{ - Reference< XNameAccess > xSet; - if ( xRoot->hasByName( C2U("Nodes") ) ) - { - xRoot->getByName( C2U("Nodes") ) >>= xSet; - if ( xSet.is() ) - { - VectorOfNodes aNodeList; - Sequence< rtl::OUString > seqNames = xSet->getElementNames(); - - for ( int i = 0; i < seqNames.getLength(); ++i ) - { - String sGroupName( seqNames[i] ); - Reference< XNameAccess > xNodeAccess; - xSet->getByName( seqNames[i] ) >>= xNodeAccess; - - if ( xNodeAccess.is() ) - { - rtl::OUString sNodeId, sLabel, sPageURL, sGroupId; - bool bAllModules = false; - sal_Int32 nGroupIndex = 0; - - sNodeId = seqNames[i]; - xNodeAccess->getByName( C2U("Label") ) >>= sLabel; - xNodeAccess->getByName( C2U("OptionsPage") ) >>= sPageURL; - xNodeAccess->getByName( C2U("AllModules") ) >>= bAllModules; - xNodeAccess->getByName( C2U("GroupId") ) >>= sGroupId; - xNodeAccess->getByName( C2U("GroupIndex") ) >>= nGroupIndex; - - if ( sLabel.getLength() == 0 ) - sLabel = sGroupName; - String sTemp = getGroupName( sLabel, rExtensionId.getLength() > 0 ); - if ( sTemp.Len() > 0 ) - sLabel = sTemp; - OptionsNode* pNode = - new OptionsNode( sNodeId, sLabel, sPageURL, bAllModules, sGroupId, nGroupIndex ); - - if ( !rExtensionId.getLength() && !isNodeActive( pNode, pModule ) ) - { - delete pNode; - continue; - } - - Reference< XNameAccess > xLeavesSet; - xNodeAccess->getByName( C2U( "Leaves" ) ) >>= xLeavesSet; - if ( xLeavesSet.is() ) - { - Sequence< rtl::OUString > seqLeaves = xLeavesSet->getElementNames(); - for ( int j = 0; j < seqLeaves.getLength(); ++j ) - { - Reference< XNameAccess > xLeaveAccess; - xLeavesSet->getByName( seqLeaves[j] ) >>= xLeaveAccess; - - if ( xLeaveAccess.is() ) - { - rtl::OUString sId, sLeafLabel, sEventHdl, sLeafURL, sLeafGrpId; - sal_Int32 nLeafGrpIdx = 0; - - xLeaveAccess->getByName( C2U("Id") ) >>= sId; - xLeaveAccess->getByName( C2U("Label") ) >>= sLeafLabel; - xLeaveAccess->getByName( C2U("OptionsPage") ) >>= sLeafURL; - xLeaveAccess->getByName( C2U("EventHandlerService") ) >>= sEventHdl; - xLeaveAccess->getByName( C2U("GroupId") ) >>= sLeafGrpId; - xLeaveAccess->getByName( C2U("GroupIndex") ) >>= nLeafGrpIdx; - - if ( !rExtensionId.getLength() || sId == rExtensionId ) - { - OptionsLeaf* pLeaf = new OptionsLeaf( - sId, sLeafLabel, sLeafURL, sEventHdl, sLeafGrpId, nLeafGrpIdx ); - - if ( sLeafGrpId.getLength() > 0 ) - { - bool bAlreadyOpened = false; - if ( pNode->m_aGroupedLeaves.size() > 0 ) - { - for ( sal_uInt32 k = 0; - k < pNode->m_aGroupedLeaves.size(); ++k ) - { - if ( pNode->m_aGroupedLeaves[k].size() > 0 && - pNode->m_aGroupedLeaves[k][0]->m_sGroupId - == sLeafGrpId ) - { - sal_uInt32 l = 0; - for ( ; l < pNode->m_aGroupedLeaves[k].size(); ++l ) - { - if ( pNode->m_aGroupedLeaves[k][l]-> - m_nGroupIndex >= nLeafGrpIdx ) - break; - } - pNode->m_aGroupedLeaves[k].insert( - pNode->m_aGroupedLeaves[k].begin() + l, pLeaf ); - bAlreadyOpened = true; - break; - } - } - } - if ( !bAlreadyOpened ) - { - VectorOfLeaves aGroupedLeaves; - aGroupedLeaves.push_back( pLeaf ); - pNode->m_aGroupedLeaves.push_back( aGroupedLeaves ); - } - } - else - pNode->m_aLeaves.push_back( - new OptionsLeaf( - sId, sLeafLabel, sLeafURL, - sEventHdl, sLeafGrpId, nLeafGrpIdx ) ); - } - } - } - } - - // do not insert nodes without leaves - if ( pNode->m_aLeaves.size() > 0 || pNode->m_aGroupedLeaves.size() > 0 ) - { - pModule ? aNodeList.push_back( pNode ) : rOutNodeList.push_back( pNode ); - } - } - } - - if ( pModule && aNodeList.size() > 0 ) - { - sal_uInt32 i = 0, j = 0; - for ( ; i < pModule->m_aNodeList.size(); ++i ) - { - rtl::OUString sNodeId = pModule->m_aNodeList[i]->m_sId; - for ( j = 0; j < aNodeList.size(); ++j ) - { - OptionsNode* pNode = aNodeList[j]; - if ( pNode->m_sId == sNodeId ) - { - rOutNodeList.push_back( pNode ); - aNodeList.erase( aNodeList.begin() + j ); - break; - } - } - } - - for ( i = 0; i < aNodeList.size(); ++i ) - rOutNodeList.push_back( aNodeList[i] ); - } - } - } -} - -sal_uInt16 lcl_getGroupId( const rtl::OUString& rGroupName, const SvTreeListBox& rTreeLB ) -{ - String sGroupName( rGroupName ); - sal_uInt16 nRet = 0; - SvLBoxEntry* pEntry = rTreeLB.First(); - while( pEntry ) - { - if ( !rTreeLB.GetParent( pEntry ) ) - { - String sTemp( rTreeLB.GetEntryText( pEntry ) ); - if ( sTemp == sGroupName ) - return nRet; - nRet++; - } - pEntry = rTreeLB.Next( pEntry ); - } - - return USHRT_MAX; -} - -void lcl_insertLeaf( - OfaTreeOptionsDialog* pDlg, OptionsNode* pNode, OptionsLeaf* pLeaf, const SvTreeListBox& rTreeLB ) -{ - sal_uInt16 nGrpId = lcl_getGroupId( pNode->m_sLabel, rTreeLB ); - if ( USHRT_MAX == nGrpId ) - { - sal_uInt16 nNodeGrpId = getGroupNodeId( pNode->m_sId ); - nGrpId = pDlg->AddGroup( pNode->m_sLabel, NULL, NULL, nNodeGrpId ); - if ( pNode->m_sPageURL.getLength() > 0 ) - { - SvLBoxEntry* pGrpEntry = rTreeLB.GetEntry( 0, nGrpId ); - DBG_ASSERT( pGrpEntry, "OfaTreeOptionsDialog::InsertNodes(): no group" ); - if ( pGrpEntry ) - { - OptionsGroupInfo* pGrpInfo = - static_cast<OptionsGroupInfo*>(pGrpEntry->GetUserData()); - pGrpInfo->m_sPageURL = pNode->m_sPageURL; - } - } - } - OptionsPageInfo* pInfo = pDlg->AddTabPage( 0, pLeaf->m_sLabel, nGrpId ); - pInfo->m_sPageURL = pLeaf->m_sPageURL; - pInfo->m_sEventHdl = pLeaf->m_sEventHdl; -} - -void OfaTreeOptionsDialog::InsertNodes( const VectorOfNodes& rNodeList ) -{ - for ( sal_uInt32 i = 0; i < rNodeList.size(); ++i ) - { - OptionsNode* pNode = rNodeList[i]; - - if ( pNode->m_aLeaves.size() > 0 || pNode->m_aGroupedLeaves.size() > 0 ) - { - sal_uInt32 j = 0; - for ( ; j < pNode->m_aGroupedLeaves.size(); ++j ) - { - for ( sal_uInt32 k = 0; k < pNode->m_aGroupedLeaves[j].size(); ++k ) - { - OptionsLeaf* pLeaf = pNode->m_aGroupedLeaves[j][k]; - lcl_insertLeaf( this, pNode, pLeaf, aTreeLB ); - } - } - - for ( j = 0; j < pNode->m_aLeaves.size(); ++j ) - { - OptionsLeaf* pLeaf = pNode->m_aLeaves[j]; - lcl_insertLeaf( this, pNode, pLeaf, aTreeLB ); - } - } - } -} - -short OfaTreeOptionsDialog::Execute() -{ - ::std::auto_ptr< SvxDicListChgClamp > pClamp; - if ( !bIsFromExtensionManager ) - { - // collect all DictionaryList Events while the dialog is executed - Reference<com::sun::star::linguistic2::XDictionaryList> xDictionaryList(SvxGetDictionaryList()); - pClamp = ::std::auto_ptr< SvxDicListChgClamp >( new SvxDicListChgClamp( xDictionaryList ) ); - } - short nRet = SfxModalDialog::Execute(); - - if( RET_OK == nRet ) - { - ApplyItemSets(); - if( GetColorTable() ) - { - GetColorTable()->Save(); - - // notify current viewframe it it uses the same color table - if ( SfxViewFrame::Current() && SfxViewFrame::Current()->GetDispatcher() ) - { - const OfaPtrItem* pPtr = (const OfaPtrItem*)SfxViewFrame::Current()->GetDispatcher()->Execute( SID_GET_COLORTABLE, SFX_CALLMODE_SYNCHRON ); - if( pPtr ) - { - XColorTable* _pColorTab = (XColorTable*)pPtr->GetValue(); - - if( _pColorTab && - _pColorTab->GetPath() == GetColorTable()->GetPath() && - _pColorTab->GetName() == GetColorTable()->GetName() ) - SfxObjectShell::Current()->PutItem( SvxColorTableItem( GetColorTable(), SID_COLOR_TABLE ) ); - } - } - } - - utl::ConfigManager::GetConfigManager().StoreConfigItems(); - } - - return nRet; -} - -// class ExtensionsTabPage ----------------------------------------------- - -ExtensionsTabPage::ExtensionsTabPage( - Window* pParent, WinBits nStyle, const rtl::OUString& rPageURL, - const rtl::OUString& rEvtHdl, const Reference< awt::XContainerWindowProvider >& rProvider ) : - - TabPage( pParent, nStyle ), - - m_sPageURL ( rPageURL ), - m_sEventHdl ( rEvtHdl ), - m_xWinProvider ( rProvider ), - m_bIsWindowHidden ( false ) - -{ -} - -// ----------------------------------------------------------------------- - -ExtensionsTabPage::~ExtensionsTabPage() -{ - Hide(); - DeactivatePage(); -} - -// ----------------------------------------------------------------------- - -void ExtensionsTabPage::CreateDialogWithHandler() -{ - try - { - bool bWithHandler = ( m_sEventHdl.getLength() > 0 ); - if ( bWithHandler ) - { - Reference < XMultiServiceFactory > xFactory( ::comphelper::getProcessServiceFactory() ); - m_xEventHdl = Reference< awt::XContainerWindowEventHandler >( - xFactory->createInstance( m_sEventHdl ), UNO_QUERY ); - } - - if ( !bWithHandler || m_xEventHdl.is() ) - { - SetStyle( GetStyle() | WB_DIALOGCONTROL | WB_CHILDDLGCTRL ); - Reference< awt::XWindowPeer > xParent( VCLUnoHelper::GetInterface( this ), UNO_QUERY ); - m_xPage = Reference < awt::XWindow >( - m_xWinProvider->createContainerWindow( - m_sPageURL, rtl::OUString(), xParent, m_xEventHdl ), UNO_QUERY ); - - Reference< awt::XControl > xPageControl( m_xPage, UNO_QUERY ); - if ( xPageControl.is() ) - { - Reference< awt::XWindowPeer > xWinPeer( xPageControl->getPeer() ); - if ( xWinPeer.is() ) - { - Window* pWindow = VCLUnoHelper::GetWindow( xWinPeer ); - if ( pWindow ) - pWindow->SetStyle( pWindow->GetStyle() | WB_DIALOGCONTROL | WB_CHILDDLGCTRL ); - } - } - } - } - catch ( ::com::sun::star::lang::IllegalArgumentException& ) - { - DBG_ERRORFILE( "ExtensionsTabPage::CreateDialogWithHandler(): illegal argument" ); - } - catch ( Exception& ) - { - DBG_ERRORFILE( "ExtensionsTabPage::CreateDialogWithHandler(): exception of XDialogProvider2::createDialogWithHandler()" ); - } -} - -// ----------------------------------------------------------------------- - -sal_Bool ExtensionsTabPage::DispatchAction( const rtl::OUString& rAction ) -{ - sal_Bool bRet = sal_False; - if ( m_xEventHdl.is() ) - { - try - { - bRet = m_xEventHdl->callHandlerMethod( m_xPage, makeAny( rAction ), C2U("external_event") ); - } - catch ( Exception& ) - { - DBG_ERRORFILE( "ExtensionsTabPage::DispatchAction(): exception of XDialogEventHandler::callHandlerMethod()" ); - } - } - return bRet; -} - -// ----------------------------------------------------------------------- - -void ExtensionsTabPage::ActivatePage() -{ - TabPage::ActivatePage(); - - if ( !m_xPage.is() ) - { - CreateDialogWithHandler(); - - if ( m_xPage.is() ) - { - Point aPos = Point(); - Size aSize = GetSizePixel(); - m_xPage->setPosSize( aPos.X() + 1, aPos.Y() + 1, - aSize.Width() - 2, aSize.Height() - 2, awt::PosSize::POSSIZE ); - if ( m_sEventHdl.getLength() > 0 ) - DispatchAction( C2U("initialize") ); - } - } - - if ( m_xPage.is() ) - { - m_xPage->setVisible( sal_True ); - m_bIsWindowHidden = false; - } -} - -// ----------------------------------------------------------------------- - -void ExtensionsTabPage::DeactivatePage() -{ - TabPage::DeactivatePage(); - - if ( m_xPage.is() ) - m_xPage->setVisible( sal_False ); -} - -// ----------------------------------------------------------------------- - -void ExtensionsTabPage::ResetPage() -{ - DispatchAction( C2U("back") ); - ActivatePage(); -} - -// ----------------------------------------------------------------------- - -void ExtensionsTabPage::SavePage() -{ - DispatchAction( C2U("ok") ); -} - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ |