Files
libreoffice/svx/source/dialog/optinet2.cxx
Vladimir Glazounov a0f362bd2d INTEGRATION: CWS pj65 (1.21.50); FILE MERGED
2006/11/06 11:14:22 pjanik 1.21.50.1: #i71027#: Prevent warnings on Mac OS X.
2006-11-21 16:07:18 +00:00

2090 lines
67 KiB
C++
Raw Blame History

/*************************************************************************
*
* OpenOffice.org - a multi-platform office productivity suite
*
* $RCSfile: optinet2.cxx,v $
*
* $Revision: 1.22 $
*
* last change: $Author: vg $ $Date: 2006-11-21 17:07:18 $
*
* The Contents of this file are made available subject to
* the terms of GNU Lesser General Public License Version 2.1.
*
*
* GNU Lesser General Public License Version 2.1
* =============================================
* Copyright 2005 by Sun Microsystems, Inc.
* 901 San Antonio Road, Palo Alto, CA 94303, USA
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License version 2.1, as published by the Free Software Foundation.
*
* This library 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 for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston,
* MA 02111-1307 USA
*
************************************************************************/
// MARKER(update_precomp.py): autogen include statement, do not remove
#include "precompiled_svx.hxx"
#ifdef SVX_DLLIMPLEMENTATION
#undef SVX_DLLIMPLEMENTATION
#endif
// include ---------------------------------------------------------------
#ifndef _SHL_HXX
#include <tools/shl.hxx>
#endif
#ifndef _CONFIG_HXX
#include <tools/config.hxx>
#endif
#ifndef _SV_MSGBOX_HXX //autogen
#include <vcl/msgbox.hxx>
#endif
#ifndef _SFXINTITEM_HXX //autogen
#include <svtools/intitem.hxx>
#endif
#ifndef _SFXSTRITEM_HXX //autogen
#include <svtools/stritem.hxx>
#endif
#ifndef _SFXENUMITEM_HXX //autogen
#include <svtools/eitem.hxx>
#endif
#ifndef _SFXSLSTITM_HXX //autogen
#include <svtools/slstitm.hxx>
#endif
#ifndef _SFX_FCONTNR_HXX //autogen
#include <sfx2/fcontnr.hxx>
#endif
#ifndef _SFXDISPATCH_HXX //autogen
#include <sfx2/dispatch.hxx>
#endif
#ifndef _SFX_DOCFILT_HACK_HXX //autogen
#include <sfx2/docfilt.hxx>
#endif
#ifndef _SFXVIEWSH_HXX
#include <sfx2/viewsh.hxx>
#endif
#ifndef _SFXSIDS_HRC
#include <sfx2/sfxsids.hrc>
#endif
#ifndef _FILEDLGHELPER_HXX
#include <sfx2/filedlghelper.hxx>
#endif
#ifndef _TOOLS_INETDEF_HXX
#include <tools/inetdef.hxx>
#endif
#ifndef SVTOOLS_URIHELPER_HXX
#include <svtools/urihelper.hxx>
#endif
#ifndef _CNTWIDS_HRC
#include <svtools/cntwids.hrc>
#endif
#ifndef _SVTOOLS_INETOPTIONS_HXX_
#include <svtools/inetoptions.hxx>
#endif
#ifndef _SV_SVAPP_HXX
#include <sfx2/app.hxx>
#endif
#ifndef _SFX_OBJSH_HXX
#include <sfx2/objsh.hxx>
#endif
#ifndef _UTL_BOOTSTRAP_HXX
#include <unotools/bootstrap.hxx>
#endif
#ifndef _SV_HELP_HXX
#include <vcl/help.hxx>
#endif
#ifndef _SFXVIEWFRM_HXX
#include <sfx2/viewfrm.hxx>
#endif
#ifndef _URLOBJ_HXX
#include <tools/urlobj.hxx>
#endif
#ifndef INCLUDED_SVTOOLS_PATHOPTIONS_HXX
#include <svtools/pathoptions.hxx>
#endif
#ifndef INCLUDED_SVTOOLS_SECURITIYOPTIONS_HXX
#include <svtools/securityoptions.hxx>
#endif
#ifndef _SVTOOLS_JAVAPTIONS_HXX
#include <svtools/javaoptions.hxx>
#endif
#ifndef _UNOTOOLS_LOCALFILEHELPER_HXX
#include <unotools/localfilehelper.hxx>
#endif
#ifndef INCLUDED_SVTOOLS_EXTENDEDSECURITYOPTIONS_HXX
#include <svtools/extendedsecurityoptions.hxx>
#endif
#ifndef _COM_SUN_STAR_UNO_SEQUENCE_HXX_
#include <com/sun/star/uno/Sequence.hxx>
#endif
#define _SVX_OPTINET2_CXX
#ifndef _SVX_DIALMGR_HXX
#include "dialmgr.hxx"
#endif
#ifndef _SVX_OPTINET_HXX
#include "optinet2.hxx"
#endif
//CHINA001 #ifndef _SVX_MULTIFIL_HXX
//CHINA001 #include "multifil.hxx"
//CHINA001 #endif
#include "svxdlg.hxx" //CHINA001
#ifndef _SVX_DIALOGS_HRC
#include "dialogs.hrc"
#endif
#ifndef _SVX_OPTINET_HRC
#include "optinet2.hrc"
#endif
#ifndef _SVX_HELPID_HRC
#include "helpid.hrc"
#endif
#include "ofaitem.hxx"
#ifndef _SVX_HTMLMODE_HXX
#include "htmlmode.hxx"
#endif
// for security TP
#ifndef _COMPHELPER_PROCESSFACTORY_HXX_
#include <comphelper/processfactory.hxx>
#endif
#ifndef _COM_SUN_STAR_SECURITY_XDOCUMENTDIGITALSIGNATURES_HPP_
#include <com/sun/star/security/XDocumentDigitalSignatures.hpp>
#endif
#ifdef UNX
#include <sys/types.h>
#include <sys/stat.h>
#include <unistd.h>
#include <fcntl.h>
#include <pwd.h>
#include <sys/types.h>
#include <string.h>
#include <osl/process.h>
#include <rtl/textenc.h>
#include <rtl/locale.h>
#include <osl/nlsupport.h>
#endif
#ifndef _SAL_TYPES_H_
#include <sal/types.h>
#endif
#ifndef _RTL_USTRING_HXX_
#include <rtl/ustring.hxx>
#endif
#ifndef _OSL_MODULE_HXX_
#include <osl/module.hxx>
#endif
#ifndef _OSL_FILE_HXX_
#include <osl/file.hxx>
#endif
#ifndef _COM_SUN_STAR_CONTAINER_XNAMEREPLACE_HPP_
#include <com/sun/star/container/XNameReplace.hpp>
#endif
#ifndef _COM_SUN_STAR_CONTAINER_XNAMEACCESS_HPP_
#include <com/sun/star/container/XNameAccess.hpp>
#endif
#ifndef _COM_SUN_STAR_BEANS_PROPERTYVALUE_HPP_
#include <com/sun/star/beans/PropertyValue.hpp>
#endif
#ifndef _COM_SUN_STAR_BEANS_XPROPERTYSET_HPP_
#include <com/sun/star/beans/XPropertySet.hpp>
#endif
#ifndef _COM_SUN_STAR_BEANS_XPROPERTYSTATE_HPP_
#include <com/sun/star/beans/XPropertyState.hpp>
#endif
#ifndef _COM_SUN_STAR_UTIL_XCHANGESBATCH_HPP_
#include <com/sun/star/util/XChangesBatch.hpp>
#endif
#ifndef _COMPHELPER_PROCESSFACTORY_HXX_
#include <comphelper/processfactory.hxx>
#endif
#include "com/sun/star/ui/dialogs/TemplateDescription.hpp"
using namespace ::com::sun::star;
using namespace ::com::sun::star::uno;
using namespace ::rtl;
using namespace ::sfx2;
//CHINA001 copy from multipat.hxx begin
// define ----------------------------------------------------------------
// different delimiter for Unix (:) and Windows (;)
#ifdef UNX
#define CLASSPATH_DELIMITER ':'
#else
#define CLASSPATH_DELIMITER ';'
#endif
//CHINA001 copy from multipat.hxx end
// static ----------------------------------------------------------------
#define C2U(cChar) OUString::createFromAscii(cChar)
#define INET_SEARCH_TOKEN '"'
#define RET_ALL ((short)200)
#define CFG_READONLY_DEFAULT FALSE
#include <sal/config.h>
SV_IMPL_PTRARR( SfxFilterPtrArr, SfxFilterPtr )
const char* SEARCHENGINE_INI = "srcheng.ini";
const char* SEARCHENGINE_GROUP = "SearchEngines-$(vlang)";
// -----------------------------------------------------------------------
String lcl_MakeTabEntry(const SfxFilter* pFilter)
{
String sEntry(pFilter->GetMimeType());
sEntry += '\t';
sEntry += pFilter->GetWildcard().GetWildCard();
sEntry += '\t';
sEntry += pFilter->GetName();
#if defined(OS2) || defined(MAC)
sEntry += '\t';
sEntry += pFilter->GetTypeName();
#endif
return sEntry;
}
// -----------------------------------------------------------------------
BOOL IsJavaInstalled_Impl( /*!!!SfxIniManager* pIniMgr*/ )
{
BOOL bRet = FALSE;
/*!!! (pb) needs new implementation
String aIniEntry;
String aFullName = Config::GetConfigName( pIniMgr->Get( SFX_KEY_USERCONFIG_PATH ),
String::CreateFromAscii("java") );
INetURLObject aIniFileObj( aFullName, INET_PROT_FILE );
String aIniPath = aIniFileObj.getName();
if ( pIniMgr->SearchFile( aIniPath ) )
{
Config aJavaCfg( aIniPath );
aJavaCfg.SetGroup( "Java" );
ByteString sTemp = aJavaCfg.ReadKey( ByteString(::rtl::OUStringToOString(pIniMgr->GetKeyName( SFX_KEY_JAVA_SYSTEMCLASSPATH ),RTL_TEXTENCODING_UTF8)) );
String aJavaSystemClassPath = ::rtl::OStringToOUString(sTemp,RTL_TEXTENCODING_UTF8);
String aJavaRuntimeLib = ::rtl::OStringToOUString(aJavaCfg.ReadKey( "RuntimeLib" ),RTL_TEXTENCODING_UTF8);
if ( aJavaSystemClassPath.Len() && aJavaRuntimeLib.Len() )
bRet = TRUE;
}
*/
return bRet;
}
// -----------------------------------------------------------------------
void SvxNoSpaceEdit::KeyInput( const KeyEvent& rKEvent )
{
if ( bOnlyNumeric )
{
const KeyCode& rKeyCode = rKEvent.GetKeyCode();
USHORT nGroup = rKeyCode.GetGroup();
USHORT nKey = rKeyCode.GetCode();
BOOL bValid = ( KEYGROUP_NUM == nGroup || KEYGROUP_CURSOR == nGroup ||
( KEYGROUP_MISC == nGroup && ( nKey < KEY_ADD || nKey > KEY_EQUAL ) ) );
if ( !bValid && ( rKeyCode.IsMod1() && (
KEY_A == nKey || KEY_C == nKey || KEY_V == nKey || KEY_X == nKey || KEY_Z == nKey ) ) )
// Erase, Copy, Paste, Select All und Undo soll funktionieren
bValid = TRUE;
if ( bValid )
Edit::KeyInput(rKEvent);
}
else if( rKEvent.GetKeyCode().GetCode() != KEY_SPACE )
Edit::KeyInput(rKEvent);
}
// -----------------------------------------------------------------------
void SvxNoSpaceEdit::Modify()
{
Edit::Modify();
if ( bOnlyNumeric )
{
XubString aValue = GetText();
if ( !ByteString(::rtl::OUStringToOString(aValue,RTL_TEXTENCODING_UTF8)).IsNumericAscii() || (long)aValue.ToInt32() > USHRT_MAX )
// der H<>chstwert einer Portnummer ist USHRT_MAX
ErrorBox( this, SVX_RES( RID_SVXERR_OPT_PROXYPORTS ) ).Execute();
}
}
/********************************************************************/
/********************************************************************/
/* */
/* SvxProxyTabPage */
/* */
/* */
/********************************************************************/
/********************************************************************/
SvxProxyTabPage::SvxProxyTabPage(Window* pParent, const SfxItemSet& rSet ) :
SfxTabPage( pParent, ResId( RID_SVXPAGE_INET_PROXY, DIALOG_MGR() ), rSet ),
aOptionGB (this, ResId(GB_SETTINGS)),
aProxyModeFT (this, ResId(FT_PROXYMODE)),
aProxyModeLB (this, ResId(LB_PROXYMODE)),
aHttpProxyFT (this, ResId( FT_HTTP_PROXY )),
aHttpProxyED (this, ResId( ED_HTTP_PROXY )),
aHttpPortFT (this, ResId( FT_HTTP_PORT )),
aHttpPortED (this, ResId( ED_HTTP_PORT ), TRUE),
aFtpProxyFT (this, ResId( FT_FTP_PROXY )),
aFtpProxyED (this, ResId( ED_FTP_PROXY )),
aFtpPortFT (this, ResId( FT_FTP_PORT )),
aFtpPortED (this, ResId( ED_FTP_PORT ), TRUE),
aNoProxyForFT (this, ResId( FT_NOPROXYFOR )),
aNoProxyForED (this, ResId( ED_NOPROXYFOR )),
aNoProxyDescFT (this, ResId( ED_NOPROXYDESC )),
sFromBrowser ( ResId( ST_PROXY_FROM_BROWSER ) ),
aProxyModePN(RTL_CONSTASCII_USTRINGPARAM("ooInetProxyType")),
aHttpProxyPN(RTL_CONSTASCII_USTRINGPARAM("ooInetHTTPProxyName")),
aHttpPortPN(RTL_CONSTASCII_USTRINGPARAM("ooInetHTTPProxyPort")),
aFtpProxyPN(RTL_CONSTASCII_USTRINGPARAM("ooInetFTPProxyName")),
aFtpPortPN(RTL_CONSTASCII_USTRINGPARAM("ooInetFTPProxyPort")),
aNoProxyDescPN(RTL_CONSTASCII_USTRINGPARAM("ooInetNoProxy"))
{
FreeResource();
aHttpPortED.SetMaxTextLen(5);
aFtpPortED.SetMaxTextLen(5);
Link aLink = LINK( this, SvxProxyTabPage, LoseFocusHdl_Impl );
aHttpPortED.SetLoseFocusHdl( aLink );
aFtpPortED.SetLoseFocusHdl( aLink );
aProxyModeLB.SetSelectHdl(LINK( this, SvxProxyTabPage, ProxyHdl_Impl ));
Reference< com::sun::star::lang::XMultiServiceFactory > xServiceManager(
::comphelper::getProcessServiceFactory());
if( xServiceManager.is() )
{
try
{
Reference< com::sun::star::lang::XMultiServiceFactory > xConfigurationProvider =
Reference< com::sun::star::lang::XMultiServiceFactory > ( xServiceManager->createInstance( rtl::OUString(
RTL_CONSTASCII_USTRINGPARAM( "com.sun.star.configuration.ConfigurationProvider" ) ) ),
UNO_QUERY_THROW);
OUString aConfigRoot(RTL_CONSTASCII_USTRINGPARAM( "org.openoffice.Inet/Settings" ) );
beans::PropertyValue aProperty;
aProperty.Name = OUString(RTL_CONSTASCII_USTRINGPARAM( "nodepath" ));
aProperty.Value = makeAny( aConfigRoot );
Sequence< Any > aArgumentList( 1 );
aArgumentList[0] = makeAny( aProperty );
m_xConfigurationUpdateAccess = xConfigurationProvider->createInstanceWithArguments( rtl::OUString(
RTL_CONSTASCII_USTRINGPARAM( "com.sun.star.configuration.ConfigurationUpdateAccess" ) ),
aArgumentList );
}
catch (RuntimeException e) {
}
}
}
/*-----------------12.08.96 14.55-------------------
--------------------------------------------------*/
SvxProxyTabPage::~SvxProxyTabPage()
{
}
/*-----------------12.08.96 14.55-------------------
--------------------------------------------------*/
SfxTabPage* SvxProxyTabPage::Create(Window* pParent, const SfxItemSet& rAttrSet )
{
return new SvxProxyTabPage(pParent, rAttrSet);
}
/*-----------------02.09.04 14.55-------------------
--------------------------------------------------*/
void SvxProxyTabPage::ReadConfigData_Impl()
{
try {
Reference< container::XNameAccess > xNameAccess(m_xConfigurationUpdateAccess, UNO_QUERY_THROW);
sal_Int32 nIntValue = 0;
OUString aStringValue;
if( xNameAccess->getByName(aProxyModePN) >>= nIntValue )
{
aProxyModeLB.SelectEntryPos( (USHORT) nIntValue );
}
if( xNameAccess->getByName(aHttpProxyPN) >>= aStringValue )
{
aHttpProxyED.SetText( aStringValue );
}
if( xNameAccess->getByName(aHttpPortPN) >>= nIntValue )
{
aHttpPortED.SetText( String::CreateFromInt32( nIntValue ));
}
if( xNameAccess->getByName(aFtpProxyPN) >>= aStringValue )
{
aFtpProxyED.SetText( aStringValue );
}
if( xNameAccess->getByName(aFtpPortPN) >>= nIntValue )
{
aFtpPortED.SetText( String::CreateFromInt32( nIntValue ));
}
if( xNameAccess->getByName(aNoProxyDescPN) >>= aStringValue )
{
aNoProxyForED.SetText( aStringValue );
}
}
catch(container::NoSuchElementException e) {
OSL_TRACE( "SvxProxyTabPage::ReadConfigData_Impl: NoSuchElementException caught" );
}
catch(com::sun::star::lang::WrappedTargetException e) {
OSL_TRACE( "SvxProxyTabPage::ReadConfigData_Impl: WrappedTargetException caught" );
}
catch(RuntimeException e) {
OSL_TRACE( "SvxProxyTabPage::ReadConfigData_Impl: RuntimeException caught" );
}
}
/*-----------------02.09.04 14.55-------------------
--------------------------------------------------*/
void SvxProxyTabPage::ReadConfigDefaults_Impl()
{
try
{
Reference< beans::XPropertyState > xPropertyState(m_xConfigurationUpdateAccess, UNO_QUERY_THROW);
sal_Int32 nIntValue = 0;
OUString aStringValue;
if( xPropertyState->getPropertyDefault(aHttpProxyPN) >>= aStringValue )
{
aHttpProxyED.SetText( aStringValue );
}
if( xPropertyState->getPropertyDefault(aHttpPortPN) >>= nIntValue )
{
aHttpPortED.SetText( String::CreateFromInt32( nIntValue ));
}
if( xPropertyState->getPropertyDefault(aFtpProxyPN) >>= aStringValue )
{
aFtpProxyED.SetText( aStringValue );
}
if( xPropertyState->getPropertyDefault(aFtpPortPN) >>= nIntValue )
{
aFtpPortED.SetText( String::CreateFromInt32( nIntValue ));
}
if( xPropertyState->getPropertyDefault(aNoProxyDescPN) >>= aStringValue )
{
aNoProxyForED.SetText( aStringValue );
}
}
catch(beans::UnknownPropertyException e)
{
OSL_TRACE( "SvxProxyTabPage::RestoreConfigDefaults_Impl: UnknownPropertyException caught" );
}
catch(com::sun::star::lang::WrappedTargetException e) {
OSL_TRACE( "SvxProxyTabPage::RestoreConfigDefaults_Impl: WrappedTargetException caught" );
}
catch(RuntimeException e)
{
OSL_TRACE( "SvxProxyTabPage::RestoreConfigDefaults_Impl: RuntimeException caught" );
}
}
/*-----------------02.09.04 14.55-------------------
--------------------------------------------------*/
void SvxProxyTabPage::RestoreConfigDefaults_Impl()
{
try
{
Reference< beans::XPropertyState > xPropertyState(m_xConfigurationUpdateAccess, UNO_QUERY_THROW);
xPropertyState->setPropertyToDefault(aProxyModePN);
xPropertyState->setPropertyToDefault(aHttpProxyPN);
xPropertyState->setPropertyToDefault(aHttpPortPN);
xPropertyState->setPropertyToDefault(aFtpProxyPN);
xPropertyState->setPropertyToDefault(aFtpPortPN);
xPropertyState->setPropertyToDefault(aNoProxyDescPN);
Reference< util::XChangesBatch > xChangesBatch(m_xConfigurationUpdateAccess, UNO_QUERY_THROW);
xChangesBatch->commitChanges();
}
catch(beans::UnknownPropertyException e)
{
OSL_TRACE( "SvxProxyTabPage::RestoreConfigDefaults_Impl: UnknownPropertyException caught" );
}
catch(com::sun::star::lang::WrappedTargetException e) {
OSL_TRACE( "SvxProxyTabPage::RestoreConfigDefaults_Impl: WrappedTargetException caught" );
}
catch(RuntimeException e)
{
OSL_TRACE( "SvxProxyTabPage::RestoreConfigDefaults_Impl: RuntimeException caught" );
}
}
/*-----------------12.08.96 14.55-------------------
--------------------------------------------------*/
void SvxProxyTabPage::Reset(const SfxItemSet&)
{
ReadConfigData_Impl();
aProxyModeLB.SaveValue();
aHttpProxyED.SaveValue();
aHttpPortED.SaveValue();
aFtpProxyED.SaveValue();
aFtpPortED.SaveValue();
aNoProxyForED.SaveValue();
EnableControls_Impl( aProxyModeLB.GetSelectEntryPos() == 2 );
}
/*-----------------12.08.96 16.34-------------------
--------------------------------------------------*/
BOOL SvxProxyTabPage::FillItemSet(SfxItemSet& )
{
BOOL bModified=FALSE;
try {
Reference< beans::XPropertySet > xPropertySet(m_xConfigurationUpdateAccess, UNO_QUERY_THROW );
USHORT nSelPos = aProxyModeLB.GetSelectEntryPos();
if(aProxyModeLB.GetSavedValue() != nSelPos)
{
if( nSelPos == 1 )
{
RestoreConfigDefaults_Impl();
return TRUE;
}
xPropertySet->setPropertyValue(aProxyModePN,
makeAny((sal_Int32) nSelPos));
bModified = TRUE;
}
if(aHttpProxyED.GetSavedValue() != aHttpProxyED.GetText())
{
xPropertySet->setPropertyValue( aHttpProxyPN,
makeAny(rtl::OUString(aHttpProxyED.GetText())));
bModified = TRUE;
}
if ( aHttpPortED.GetSavedValue() != aHttpPortED.GetText() )
{
xPropertySet->setPropertyValue( aHttpPortPN,
makeAny(aHttpPortED.GetText().ToInt32()));
bModified = TRUE;
}
if(aFtpProxyED.GetSavedValue() != aFtpProxyED.GetText())
{
xPropertySet->setPropertyValue( aFtpProxyPN,
makeAny( rtl::OUString(aFtpProxyED.GetText())));
bModified = TRUE;
}
if ( aFtpPortED.GetSavedValue() != aFtpPortED.GetText() )
{
xPropertySet->setPropertyValue( aFtpPortPN,
makeAny(aFtpPortED.GetText().ToInt32()));
bModified = TRUE;
}
if ( aNoProxyForED.GetSavedValue() != aNoProxyForED.GetText() )
{
xPropertySet->setPropertyValue( aNoProxyDescPN,
makeAny( rtl::OUString(aNoProxyForED.GetText())));
bModified = TRUE;
}
Reference< util::XChangesBatch > xChangesBatch(m_xConfigurationUpdateAccess, UNO_QUERY_THROW);
xChangesBatch->commitChanges();
}
catch(com::sun::star::lang::IllegalArgumentException e) {
OSL_TRACE( "SvxProxyTabPage::FillItemSet: IllegalArgumentException caught" );
}
catch(beans::UnknownPropertyException e) {
OSL_TRACE( "SvxProxyTabPage::FillItemSet: UnknownPropertyException caught" );
}
catch(beans::PropertyVetoException e) {
OSL_TRACE( "SvxProxyTabPage::FillItemSet: PropertyVetoException caught" );
}
catch(com::sun::star::lang::WrappedTargetException e) {
OSL_TRACE( "SvxProxyTabPage::FillItemSet: WrappedTargetException caught" );
}
catch(RuntimeException e) {
OSL_TRACE( "SvxProxyTabPage::FillItemSet: RuntimeException caught" );
}
return bModified;
}
/*-----------------12.08.96 13.38-------------------
--------------------------------------------------*/
void SvxProxyTabPage::EnableControls_Impl(BOOL bEnable)
{
aHttpProxyFT.Enable(bEnable);
aHttpProxyED.Enable(bEnable);
aHttpPortFT.Enable(bEnable);
aHttpPortED.Enable(bEnable);
aFtpProxyFT.Enable(bEnable);
aFtpProxyED.Enable(bEnable);
aFtpPortFT.Enable(bEnable);
aFtpPortED.Enable(bEnable);
aNoProxyForFT.Enable(bEnable);
aNoProxyForED.Enable(bEnable);
aNoProxyDescFT.Enable(bEnable);
}
// -----------------------------------------------------------------------
IMPL_LINK( SvxProxyTabPage, ProxyHdl_Impl, ListBox *, pBox )
{
USHORT nPos = pBox->GetSelectEntryPos();
// Restore original system values
if( nPos == 1 )
{
ReadConfigDefaults_Impl();
}
EnableControls_Impl(nPos == 2);
return 0;
}
// -----------------------------------------------------------------------
IMPL_LINK( SvxProxyTabPage, LoseFocusHdl_Impl, Edit *, pEdit )
{
XubString aValue = pEdit->GetText();
if ( !ByteString(::rtl::OUStringToOString(aValue,RTL_TEXTENCODING_UTF8)).IsNumericAscii() || (long)aValue.ToInt32() > USHRT_MAX )
pEdit->SetText( '0' );
return 0;
}
/********************************************************************/
/********************************************************************/
/* */
/* SvxSearchTabPage */
/* */
/* */
/********************************************************************/
/********************************************************************/
SvxSearchTabPage::SvxSearchTabPage(Window* pParent, const SfxItemSet& rSet ) :
SfxTabPage( pParent, SVX_RES( RID_SVXPAGE_INET_SEARCH ), rSet ),
aSearchGB ( this, ResId( GB_SEARCH ) ),
aSearchLB ( this, ResId( LB_SEARCH ) ),
aSearchNameFT ( this, ResId( FT_SEARCH_NAME ) ),
aSearchNameED ( this, ResId( ED_SEARCH_NAME ) ),
aSearchFT ( this, ResId( FT_SEARCH ) ),
aAndRB ( this, ResId( RB_AND ) ),
aOrRB ( this, ResId( RB_OR ) ),
aExactRB ( this, ResId( RB_EXACT ) ),
aURLFT ( this, ResId( FT_URL ) ),
aURLED ( this, ResId( ED_URL ) ),
aPostFixFT ( this, ResId( FT_POSTFIX ) ),
aPostFixED ( this, ResId( ED_POSTFIX ) ),
aSeparatorFT ( this, ResId( FT_SEPARATOR ) ),
aSeparatorED ( this, ResId( ED_SEPARATOR ) ),
aCaseFT ( this, ResId( FT_CASE ) ),
aCaseED ( this, ResId( ED_CASE ) ),
aNewPB ( this, ResId( PB_NEW ) ),
aAddPB ( this, ResId( PB_ADD ) ),
aChangePB ( this, ResId( PB_CHANGE ) ),
aDeletePB ( this, ResId( PB_DELETE ) ),
sModifyMsg(ResId(MSG_MODIFY))
{
FreeResource();
SetExchangeSupport();
aCaseED.SelectEntryPos(0); // falls kein Eintrag vorhanden ist, kann es sonst "Arger geben
aNewPB.SetClickHdl(LINK( this, SvxSearchTabPage, NewSearchHdl_Impl ) );
aAddPB.SetClickHdl(LINK( this, SvxSearchTabPage, AddSearchHdl_Impl ) );
aChangePB.SetClickHdl(LINK( this, SvxSearchTabPage, ChangeSearchHdl_Impl ) );
aDeletePB.SetClickHdl(LINK( this, SvxSearchTabPage, DeleteSearchHdl_Impl ) );
aSearchLB.SetSelectHdl(LINK( this, SvxSearchTabPage, SearchEntryHdl_Impl ) );
Link aLink = LINK( this, SvxSearchTabPage, SearchModifyHdl_Impl );
aSearchNameED.SetModifyHdl( aLink );
aURLED.SetModifyHdl( aLink );
aSeparatorED.SetModifyHdl( aLink );
aPostFixED.SetModifyHdl( aLink );
aCaseED.SetSelectHdl( aLink );
aLink = LINK( this, SvxSearchTabPage, SearchPartHdl_Impl );
aAndRB.SetClickHdl( aLink );
aOrRB.SetClickHdl( aLink );
aExactRB.SetClickHdl( aLink );
}
// -----------------------------------------------------------------------
SvxSearchTabPage::~SvxSearchTabPage()
{
}
// -----------------------------------------------------------------------
SfxTabPage* SvxSearchTabPage::Create(Window* pParent, const SfxItemSet& rAttrSet )
{
return new SvxSearchTabPage(pParent, rAttrSet);
}
// -----------------------------------------------------------------------
void SvxSearchTabPage::Reset( const SfxItemSet& )
{
//The two lines below are moved here from the last part of this method by BerryJia for fixing Bug102610 Time:2002-8-29 11:00 (China Standard Time GMT+08:00)
aChangePB.Disable();
aAddPB.Disable();
sal_uInt16 nCount = aSearchConfig.Count();
aSearchLB.Clear(); //add by BerryJia for fixing Bug102610 Time:2002-8-29 11:00 (China Standard Time GMT+08:00)
for(sal_uInt16 i = 0; i < nCount; i++)
{
const SvxSearchEngineData& rData = aSearchConfig.GetData(i);
aSearchLB.InsertEntry(rData.sEngineName);
}
if ( nCount )
{
aSearchLB.SelectEntryPos(0);
SearchEntryHdl_Impl( &aSearchLB );
}
else
aDeletePB.Disable();
}
// -----------------------------------------------------------------------
BOOL SvxSearchTabPage::FillItemSet( SfxItemSet& )
{
if(aSearchConfig.IsModified())
aSearchConfig.Commit();
return TRUE;
}
/*--------------------------------------------------------------------*/
void SvxSearchTabPage::ActivatePage( const SfxItemSet& )
{
}
/*--------------------------------------------------------------------*/
int SvxSearchTabPage::DeactivatePage( SfxItemSet* _pSet )
{
//Modified by BerryJia for fixing Bug102610 Time:2002-8-29 11:00 (China Standard Time GMT+08:00)
if(!ConfirmLeave(String()))
return KEEP_PAGE;
if ( _pSet )
FillItemSet( *_pSet );
return LEAVE_PAGE;
}
// -----------------------------------------------------------------------
//add by BerryJia for fixing Bug102610 Time:2002-8-29 11:00 (China Standard Time GMT+08:00)
BOOL SvxSearchTabPage::ConfirmLeave( const String& rStringSelection)
{
if(aChangePB.IsEnabled())
{
QueryBox aQuery(this, WB_YES_NO_CANCEL|WB_DEF_YES, sModifyMsg);
USHORT nRet = aQuery.Execute();
if(RET_CANCEL == nRet)
{
if(rStringSelection.Len())
aSearchLB.SelectEntry(sLastSelectedEntry);
return FALSE;
}
else if(RET_YES == nRet)
{
USHORT nEntryPos = aSearchLB.GetEntryPos( aSearchNameED.GetText() );
if ( nEntryPos != LISTBOX_ENTRY_NOTFOUND )
aSearchLB.SelectEntryPos(nEntryPos);
else
aSearchLB.SetNoSelection();
ChangeSearchHdl_Impl(0);
if(rStringSelection.Len())
aSearchLB.SelectEntry(rStringSelection);
}
else if(RET_NO == nRet)
{
aChangePB.Enable(FALSE);
aAddPB.Enable(FALSE);
SearchEntryHdl_Impl(&aSearchLB);
}
}
if(aAddPB.IsEnabled())
{
QueryBox aQuery(this, WB_YES_NO_CANCEL|WB_DEF_YES, sModifyMsg);
USHORT nRet = aQuery.Execute();
if(RET_CANCEL == nRet)
{
aSearchLB.SetNoSelection();
return FALSE;
}
else if(RET_YES == nRet)
{
aSearchLB.SetNoSelection();
AddSearchHdl_Impl(0);
if(rStringSelection.Len())
aSearchLB.SelectEntry(rStringSelection);
}
else if(RET_NO == nRet)
{
aAddPB.Enable(FALSE);
aChangePB.Enable(FALSE);
NewSearchHdl_Impl(0);
}
}
return TRUE;
}
// -----------------------------------------------------------------------
IMPL_LINK( SvxSearchTabPage, NewSearchHdl_Impl, PushButton *, EMPTYARG )
{
//The 3 lines below is modified by BerryJia for fixing Bug102610 Time:2002-8-29 11:00 (China Standard Time GMT+08:00)
SearchEntryHdl_Impl(&aSearchLB);
if(aChangePB.IsEnabled() || aAddPB.IsEnabled())
return 0;
aSearchNameED.SetText( String() );
aSearchLB.SetNoSelection();
aCurrentSrchData = SvxSearchEngineData();
aAndRB.Check( TRUE );
SearchEntryHdl_Impl( &aSearchLB );
SearchPartHdl_Impl( &aAndRB );
return 0;
}
// -----------------------------------------------------------------------
IMPL_LINK( SvxSearchTabPage, AddSearchHdl_Impl, PushButton *, EMPTYARG )
{
//The following two lines is added by BerryJia for fixing Bug102610 Time:2002-8-29 11:00 (China Standard Time GMT+08:00)
aAddPB.Enable(FALSE);
aChangePB.Enable(FALSE);
aCurrentSrchData.sEngineName = aSearchNameED.GetText();
aSearchConfig.SetData(aCurrentSrchData);
aSearchLB.InsertEntry( aCurrentSrchData.sEngineName );
aSearchLB.SelectEntry( aCurrentSrchData.sEngineName );
SearchEntryHdl_Impl( &aSearchLB );
return 0;
}
// -----------------------------------------------------------------------
IMPL_LINK( SvxSearchTabPage, ChangeSearchHdl_Impl, PushButton *, EMPTYARG )
{
//The following two lines is added by BerryJia for fixing Bug102610 Time:2002-8-29 11:00 (China Standard Time GMT+08:00)
aChangePB.Enable(FALSE);
aAddPB.Enable(FALSE);
USHORT nPos = aSearchLB.GetSelectEntryPos();
if ( nPos != LISTBOX_ENTRY_NOTFOUND )
{
String sEngine = aSearchLB.GetSelectEntry();
aCurrentSrchData.sEngineName = sEngine;
aSearchConfig.SetData(aCurrentSrchData);
aSearchLB.SelectEntry(sEngine);
SearchEntryHdl_Impl(&aSearchLB);
}
else
{
SetUpdateMode(FALSE);
String sEntry = aSearchNameED.GetText();
// im AddHdl wird sLastSelectedEntry umgesetzt
String sTemp(sLastSelectedEntry);
AddSearchHdl_Impl(0);
aSearchLB.SelectEntry(sTemp);
DeleteSearchHdl_Impl(0);
aSearchLB.SelectEntry(sEntry);
SearchEntryHdl_Impl(&aSearchLB);
SetUpdateMode(TRUE);
}
return 0;
}
// -----------------------------------------------------------------------
IMPL_LINK( SvxSearchTabPage, DeleteSearchHdl_Impl, PushButton *, EMPTYARG)
{
aChangePB.Enable(FALSE); //add by BerryJia for fixing Bug102610 Time:2002-8-29 11:00 (China Standard Time GMT+08:00)
USHORT nPos = aSearchLB.GetSelectEntryPos();
DBG_ASSERT(nPos != LISTBOX_ENTRY_NOTFOUND, "kein Eintrag selektiert!")
aSearchConfig.RemoveData(aSearchLB.GetSelectEntry());
aSearchLB.RemoveEntry(nPos);
aSearchLB.SelectEntryPos(0);
SearchEntryHdl_Impl(&aSearchLB);
return 0;
}
// -----------------------------------------------------------------------
IMPL_LINK( SvxSearchTabPage, SearchEntryHdl_Impl, ListBox*, pBox )
{
USHORT nEntryPos = pBox->GetSelectEntryPos();
if ( nEntryPos != LISTBOX_ENTRY_NOTFOUND )
{
String sSelection(pBox->GetSelectEntry());
//Modified by BerryJia for fixing Bug102610 Time:2002-8-29 11:00 (China Standard Time GMT+08:00)
if(!ConfirmLeave(sSelection))
return 0;
const SvxSearchEngineData* pData = aSearchConfig.GetData(sSelection);
DBG_ASSERT(pData, "SearchEngine not available")
if(pData)
{
aSearchNameED.SetText(sSelection);
sLastSelectedEntry = sSelection;
sal_Bool bAnd = aAndRB.IsChecked();
sal_Bool bOr = aOrRB.IsChecked();
aURLED.SetText(bAnd ? pData->sAndPrefix : bOr ? pData->sOrPrefix : pData->sExactPrefix);
aSeparatorED.SetText( bAnd ? pData->sAndSeparator : bOr ? pData->sOrSeparator : pData->sExactSeparator);
aPostFixED.SetText(bAnd ? pData->sAndSuffix : bOr ? pData->sOrSuffix : pData->sExactSuffix );
sal_Int32 nCase = bAnd ? pData->nAndCaseMatch : bOr ? pData->nOrCaseMatch : pData->nExactCaseMatch;
aCaseED.SelectEntryPos( (USHORT)nCase );
aCurrentSrchData = *pData;
}
aDeletePB.Enable();
}
else
{
aDeletePB.Enable(FALSE);
sLastSelectedEntry.Erase();
}
aChangePB.Enable(FALSE);
aAddPB.Enable(FALSE);
return 0;
}
// -----------------------------------------------------------------------
IMPL_LINK( SvxSearchTabPage, SearchModifyHdl_Impl, SvxNoSpaceEdit*, pEdit )
{
if ( pEdit == &aSearchNameED )
{
BOOL bTextLen = ( 0 != pEdit->GetText().Len() );
BOOL bFound = FALSE;
if ( bTextLen )
{
USHORT nEntryPos = aSearchLB.GetEntryPos( pEdit->GetText() );
bFound = ( nEntryPos != LISTBOX_ENTRY_NOTFOUND );
if ( bFound )
aSearchLB.SelectEntryPos(nEntryPos);
else
aSearchLB.SetNoSelection();
}
aChangePB.Enable( sLastSelectedEntry.Len() > 0 );
aDeletePB.Enable(bFound);
aAddPB.Enable(bTextLen && !bFound);
}
else
{
if ( aSearchLB.GetSelectEntryCount() && sLastSelectedEntry.Len() > 0 )
aChangePB.Enable();
if(aAndRB.IsChecked())
{
aCurrentSrchData.sAndPrefix = aURLED.GetText();
aCurrentSrchData.sAndSeparator = aSeparatorED.GetText();
aCurrentSrchData.sAndSuffix = aPostFixED.GetText();
aCurrentSrchData.nAndCaseMatch = aCaseED.GetSelectEntryPos();
}
else if(aOrRB.IsChecked())
{
aCurrentSrchData.sOrPrefix = aURLED.GetText();
aCurrentSrchData.sOrSeparator = aSeparatorED.GetText();
aCurrentSrchData.sOrSuffix = aPostFixED.GetText();
aCurrentSrchData.nOrCaseMatch = aCaseED.GetSelectEntryPos();
}
else
{
aCurrentSrchData.sExactPrefix = aURLED.GetText();
aCurrentSrchData.sExactSeparator = aSeparatorED.GetText();
aCurrentSrchData.sExactSuffix = aPostFixED.GetText();
aCurrentSrchData.nExactCaseMatch = aCaseED.GetSelectEntryPos();
}
}
return 0;
}
// -----------------------------------------------------------------------
IMPL_LINK( SvxSearchTabPage, SearchPartHdl_Impl, RadioButton *, EMPTYARG )
{
sal_Bool bAnd = aAndRB.IsChecked();
sal_Bool bOr = aOrRB.IsChecked();
aURLED.SetText(bAnd ? aCurrentSrchData.sAndPrefix : bOr ? aCurrentSrchData.sOrPrefix : aCurrentSrchData.sExactPrefix);
aSeparatorED.SetText( bAnd ? aCurrentSrchData.sAndSeparator : bOr ? aCurrentSrchData.sOrSeparator : aCurrentSrchData.sExactSeparator);
aPostFixED.SetText(bAnd ? aCurrentSrchData.sAndSuffix : bOr ? aCurrentSrchData.sOrSuffix : aCurrentSrchData.sExactSuffix );
sal_Int32 nCase = bAnd ? aCurrentSrchData.nAndCaseMatch : bOr ? aCurrentSrchData.nOrCaseMatch : aCurrentSrchData.nExactCaseMatch;
aCaseED.SelectEntryPos( (USHORT)nCase );
return 0;
}
// -----------------------------------------------------------------------
/********************************************************************/
/********************************************************************/
/* */
/* SvxOtherTabPage */
/* */
/********************************************************************/
/********************************************************************/
/*-----------------15.05.97 09:51-------------------
--------------------------------------------------*/
/*
SvxPatternField::SvxPatternField( Window* pParent, const ResId& rResId ) :
PatternField( pParent, rResId ),
sMsg233 ( ResId( ST_MSG_233 ) ),
sMsg255 ( ResId( ST_MSG_255 ) )
{
FreeResource();
SelectFixedFont();
} */
/*-----------------15.05.97 09:51-------------------
--------------------------------------------------*/
/*void SvxPatternField::KeyInput( const KeyEvent& rKEvt )
{
PatternField::KeyInput( rKEvt );
BOOL bDelete = ( rKEvt.GetKeyCode().GetCode() == KEY_DELETE );
String sEntry( GetText() );
sEntry[(USHORT)3] = '.';
sEntry[(USHORT)7] = '.';
sEntry[(USHORT)11] = '.';
Selection aSelection( GetSelection() );
String sPart( sEntry.GetToken( 0, '.' ) );
USHORT i, nPart( sPart.EraseLeadingChars() );
BOOL bSet = FALSE;
if ( sPart.Len() && ( !nPart || nPart > 255 ) )
{
// der erste Part darf nicht 0 und nicht gr"osser 255 sein
String sMsg( sPart );
sMsg += ' ';
sMsg += sMsg233;
InfoBox( this, sMsg ).Execute();
if ( nPart == 0 )
sPart = " 1";
else
sPart = "255";
sEntry.SetToken( 0, '.', sPart );
bSet = TRUE;
};
for ( i = 1; i < 4; i++ )
{
// die anderen Parts d"urfen nicht gr"osser 255 sein
sPart = sEntry.GetToken( i, '.' );
nPart = sPart.EraseLeadingChars();
if ( nPart > 255 )
{
String sMsg( sPart );
sMsg += ' ';
sMsg += sMsg255;
InfoBox( this, sMsg ).Execute();
if ( nPart == 0 )
sPart = " 1";
else
sPart = "255";
sEntry.SetToken( i, '.', sPart );
bSet = TRUE;
};
}
if ( bSet )
{
SetText( sEntry );
SetSelection( aSelection );
}
}
*/
// -----------------------------------------------------------------------
#if 0
long SvxPatternField::Notify( NotifyEvent& rNEvt )
{
return PatternField::Notify( rNEvt );
/*! long nHandled = 0;
if ( rNEvt.GetType() == EVENT_KEYUP )
{
const KeyEvent* pKEvt = rNEvt.GetKeyEvent();
KeyInput( *pKEvt );
nHandled = 1;
}
return nHandled;*/
}
#endif
// class JavaScriptDisableQueryBox_Impl --------------------------------------
class JavaScriptDisableQueryBox_Impl : public ModalDialog
{
private:
FixedImage aImage;
FixedText aWarningFT;
CheckBox aDisableCB;
OKButton aYesBtn;
CancelButton aNoBtn;
public:
JavaScriptDisableQueryBox_Impl( Window* pParent );
BOOL IsWarningDisabled() const { return aDisableCB.IsChecked(); }
};
JavaScriptDisableQueryBox_Impl::JavaScriptDisableQueryBox_Impl( Window* pParent ) :
ModalDialog( pParent, SVX_RES( RID_SVXDLG_OPT_JAVASCRIPT_DISABLE ) ),
aImage ( this, ResId( IMG_JSCPT_WARNING ) ),
aWarningFT ( this, ResId( FT_JSCPT_WARNING ) ),
aDisableCB ( this, ResId( CB_JSCPT_DISABLE ) ),
aYesBtn ( this, ResId( BTN_JSCPT_YES ) ),
aNoBtn ( this, ResId( BTN_JSCPT_NO ) )
{
FreeResource();
aYesBtn.SetText( Button::GetStandardText( BUTTON_YES ) );
aNoBtn.SetText( Button::GetStandardText( BUTTON_NO ) );
aImage.SetImage( WarningBox::GetStandardImage() );
}
//#98647#----------------------------------------------
void SvxScriptExecListBox::RequestHelp( const HelpEvent& rHEvt )
{ // try to show tips just like as on toolbars
USHORT nPos=LISTBOX_ENTRY_NOTFOUND;
USHORT nTop = GetTopEntry();
USHORT nCount = GetDisplayLineCount(); // Attention: Not GetLineCount()
Point aPt = ScreenToOutputPixel( rHEvt.GetMousePosPixel() );
Rectangle aItemRect;
if( nCount > 0 ) // if there're some entries, find it.
for( nPos = nTop ; nPos <= nTop+nCount-1 ; nPos++ ) {
aItemRect = GetBoundingRectangle(nPos);
if( aPt.Y() < aItemRect.Top() || aPt.Y() > aItemRect.Bottom() )
continue;
else
break;
}
else // if not, nothing happens.
return;
String aHelpText;
if( nPos <= nTop+nCount-1 ) // if find the matching entry, get its content.
aHelpText = GetEntry(nPos);
if( aHelpText.Len() && GetTextWidth(aHelpText)<GetOutputSizePixel().Width() )
aHelpText.Erase(); // if the entry is quite short, clear the helping tip content.
aItemRect = Rectangle(Point(0,0),GetSizePixel());
aPt = Point(OutputToScreenPixel( aItemRect.TopLeft() ));
aItemRect.Left() = aPt.X();
aItemRect.Top() = aPt.Y();
aPt = OutputToScreenPixel( aItemRect.BottomRight() );
aItemRect.Right() = aPt.X();
aItemRect.Bottom() = aPt.Y();
if( rHEvt.GetMode() == HELPMODE_BALLOON )
Help::ShowBalloon( this, aItemRect.Center(), aItemRect, aHelpText);
else
Help::ShowQuickHelp( this, aItemRect, aHelpText );
}
/********************************************************************/
/* */
/* SvxSecurityTabPage */
/* */
/********************************************************************/
SvxSecurityTabPage::SvxSecurityTabPage( Window* pParent, const SfxItemSet& rSet )
:SfxTabPage ( pParent, SVX_RES( RID_SVXPAGE_INET_SECURITY ), rSet )
,maSecOptionsFL ( this, ResId( FL_SEC_SECOPTIONS ) )
,maSecOptionsFI ( this, ResId( FI_SEC_SECOPTIONS ) )
,maSaveOrSendDocsFI ( this, ResId( FI_SEC_SAVEORSENDDOCS ) )
,maSaveOrSendDocsCB ( this, ResId( CB_SEC_SAVEORSENDDOCS ) )
,maSignDocsFI ( this, ResId( FI_SEC_SIGNDOCS ) )
,maSignDocsCB ( this, ResId( CB_SEC_SIGNDOCS ) )
,maPrintDocsFI ( this, ResId( FI_SEC_PRINTDOCS ) )
,maPrintDocsCB ( this, ResId( CB_SEC_PRINTDOCS ) )
,maCreatePdfFI ( this, ResId( FI_SEC_CREATEPDF ) )
,maCreatePdfCB ( this, ResId( CB_SEC_CREATEPDF ) )
,maRemovePersInfoFI ( this, ResId( FI_SEC_REMOVEPERSINFO ) )
,maRemovePersInfoCB ( this, ResId( CB_SEC_REMOVEPERSINFO ) )
,maRecommPasswdFI ( this, ResId( FI_SEC_RECOMMPASSWD ) )
,maRecommPasswdCB ( this, ResId( CB_SEC_RECOMMPASSWD ) )
,maMacroSecFL ( this, ResId( FL_SEC_MACROSEC ) )
,maMacroSecFI ( this, ResId( FI_SEC_MACROSEC ) )
,maMacroSecPB ( this, ResId( PB_SEC_MACROSEC ) )
,maFilesharingFL ( this, ResId( FL_SEC_FILESHARING ) )
,maRecommReadOnlyCB ( this, ResId( CB_SEC_RECOMMREADONLY ) )
,maRecordChangesCB ( this, ResId( CB_SEC_RECORDCHANGES ) )
,maProtectRecordsPB ( this, ResId( PB_SEC_PROTRECORDS ) )
,mpSecOptions ( new SvtSecurityOptions )
,meRedlingMode ( RL_NONE )
,msProtectRecordsStr( ResId( STR_SEC_PROTRECORDS ) )
,msUnprotectRecordsStr( ResId( STR_SEC_UNPROTRECORDS ) )
{
FreeResource();
InitControls();
maMacroSecPB.SetClickHdl( LINK( this, SvxSecurityTabPage, MacroSecPBHdl ) );
maProtectRecordsPB.SetClickHdl( LINK( this, SvxSecurityTabPage, ProtectRecordsPBHdl ) );
maRecordChangesCB.SetClickHdl( LINK( this, SvxSecurityTabPage, RecordChangesCBHdl ) );
ActivatePage( rSet );
}
SvxSecurityTabPage::~SvxSecurityTabPage()
{
delete mpSecOptions;
}
IMPL_LINK( SvxSecurityTabPage, AdvancedPBHdl, void*, EMPTYARG )
{
return 0;
}
IMPL_LINK( SvxSecurityTabPage, MacroSecPBHdl, void*, EMPTYARG )
{
Reference< security::XDocumentDigitalSignatures > xD(
comphelper::getProcessServiceFactory()->createInstance( rtl::OUString( RTL_CONSTASCII_USTRINGPARAM ( "com.sun.star.security.DocumentDigitalSignatures" ) ) ), UNO_QUERY );
if ( xD.is() )
xD->manageTrustedSources();
return 0;
}
namespace
{
enum RedlineFunc { RF_ON, RF_PROTECT };
const SfxBoolItem* ExecuteRecordChangesFunc( SvxSecurityTabPage::RedliningMode _eMode, RedlineFunc _eFunc, BOOL _bVal, Window* _pParent = NULL )
{
const SfxBoolItem* pRet = NULL;
if( _eMode != SvxSecurityTabPage::RL_NONE )
{
USHORT nSlot;
if ( _eMode == SvxSecurityTabPage::RL_WRITER )
nSlot = ( _eFunc == RF_ON )? FN_REDLINE_ON : FN_REDLINE_PROTECT;
else
nSlot = ( _eFunc == RF_ON )? FID_CHG_RECORD : SID_CHG_PROTECT;
// execute
SfxViewShell* pViewSh = SfxViewShell::Current();
if( pViewSh )
{
bool bNeedItem = ( _eMode == SvxSecurityTabPage::RL_WRITER || _eFunc != RF_ON );
SfxBoolItem* pItem = bNeedItem ? new SfxBoolItem( nSlot, _bVal ) : NULL;
SfxDispatcher* pDisp = pViewSh->GetDispatcher();
if ( _pParent )
{
OfaPtrItem aParentItem( SID_ATTR_PARENTWINDOW, _pParent );
pRet = static_cast< const SfxBoolItem* >(
pDisp->Execute( nSlot, SFX_CALLMODE_SYNCHRON, &aParentItem, pItem, 0L ) );
}
else
pRet = static_cast< const SfxBoolItem* >(
pDisp->Execute( nSlot, SFX_CALLMODE_SYNCHRON, pItem, 0L ) );
delete pItem;
}
}
return pRet;
}
bool QueryState( USHORT _nSlot, bool& _rValue )
{
bool bRet = false;
SfxViewShell* pViewSh = SfxViewShell::Current();
if( pViewSh )
{
const SfxPoolItem* pItem;
SfxDispatcher* pDisp = pViewSh->GetDispatcher();
bRet = SFX_ITEM_AVAILABLE <= pDisp->QueryState( _nSlot, pItem );
if( bRet )
_rValue = ( static_cast< const SfxBoolItem* >( pItem ) )->GetValue();
}
return bRet;
}
bool QueryRecordChangesProtectionState( SvxSecurityTabPage::RedliningMode _eMode, bool& _rValue )
{
bool bRet = false;
if( _eMode != SvxSecurityTabPage::RL_NONE )
{
USHORT nSlot = ( _eMode == SvxSecurityTabPage::RL_WRITER )? FN_REDLINE_PROTECT : SID_CHG_PROTECT;
bRet = QueryState( nSlot, _rValue );
}
return bRet;
}
bool QueryRecordChangesState( SvxSecurityTabPage::RedliningMode _eMode, bool& _rValue )
{
bool bRet = false;
if( _eMode != SvxSecurityTabPage::RL_NONE )
{
USHORT nSlot = ( _eMode == SvxSecurityTabPage::RL_WRITER )? FN_REDLINE_ON : FID_CHG_RECORD;
bRet = QueryState( nSlot, _rValue );
}
return bRet;
}
}
IMPL_LINK( SvxSecurityTabPage, RecordChangesCBHdl, void*, EMPTYARG )
{
ExecuteRecordChangesFunc( meRedlingMode, RF_ON, maRecordChangesCB.IsChecked(), this );
CheckRecordChangesState();
return 0;
}
IMPL_LINK( SvxSecurityTabPage, ProtectRecordsPBHdl, void*, EMPTYARG )
{
bool bProt;
QueryRecordChangesProtectionState( meRedlingMode, bProt );
ExecuteRecordChangesFunc( meRedlingMode, RF_PROTECT, !bProt, this );
CheckRecordChangesState();
if ( QueryRecordChangesProtectionState( meRedlingMode, bProt ) )
{
// RecordChangesCB is enabled if protection is off
maRecordChangesCB.Enable( !bProt );
// toggle text of button "Protect" <-> "Unprotect"
String sNewText = bProt ? msUnprotectRecordsStr : msProtectRecordsStr;
maProtectRecordsPB.SetText( sNewText );
}
return 0;
}
void SvxSecurityTabPage::CheckRecordChangesState( void )
{
bool bVal;
if( QueryRecordChangesState( meRedlingMode, bVal ) )
{
maRecordChangesCB.Enable();
maRecordChangesCB.Check( bVal );
}
else
maRecordChangesCB.Disable(); // because now we don't know the state!
maProtectRecordsPB.Enable( QueryRecordChangesProtectionState( meRedlingMode, bVal ) );
}
void SvxSecurityTabPage::InitControls()
{
const long nOffset = 10;
// Hide all controls which belong to the macro security button in case the macro
// security settings managed by the macro security dialog opened via the button
// are all readonly or if the macros are disabled in general.
// @@@ Better would be to query the dialog whether it is 'useful' or not. Exposing
// macro security dialog implementations here, which is bad.
if ( mpSecOptions->IsMacroDisabled()
|| ( mpSecOptions->IsReadOnly( SvtSecurityOptions::E_MACRO_SECLEVEL )
&& mpSecOptions->IsReadOnly( SvtSecurityOptions::E_MACRO_TRUSTEDAUTHORS )
&& mpSecOptions->IsReadOnly( SvtSecurityOptions::E_SECUREURLS ) ) )
{
maMacroSecFL.Hide();
maMacroSecFI.Hide();
maMacroSecPB.Hide();
// rearrange the following controls
Point aNewPos = maFilesharingFL.GetPosPixel();
long nDelta = aNewPos.Y() - maMacroSecFL.GetPosPixel().Y();
Window* pWins[] =
{
&maFilesharingFL, &maRecommReadOnlyCB, &maRecordChangesCB, &maProtectRecordsPB
};
Window** pCurrent = pWins;
const sal_Int32 nCount = sizeof( pWins ) / sizeof( pWins[ 0 ] );
for ( sal_Int32 i = 0; i < nCount; ++i, ++pCurrent )
{
aNewPos = (*pCurrent)->GetPosPixel();
aNewPos.Y() -= nDelta;
(*pCurrent)->SetPosPixel( aNewPos );
}
}
else
{
// if the button text is too wide, then broaden the button
String sText = maMacroSecPB.GetText();
long nTxtW = maMacroSecPB.GetTextWidth( sText );
if ( sText.Search( '~' ) == STRING_NOTFOUND )
nTxtW += nOffset;
long nBtnW = maMacroSecPB.GetSizePixel().Width();
if ( nTxtW > nBtnW )
{
// broaden the button
long nDelta = nTxtW - nBtnW;
Size aNewSize = maMacroSecPB.GetSizePixel();
aNewSize.Width() += nDelta;
maMacroSecPB.SetSizePixel( aNewSize );
Point aNewPos = maMacroSecPB.GetPosPixel();
aNewPos.X() -= nDelta;
maMacroSecPB.SetPosPixel( aNewPos );
// and narrow the fixedtext of the left side
aNewSize = maMacroSecFI.GetSizePixel();
aNewSize.Width() -= nDelta;
maMacroSecFI.SetSizePixel( aNewSize );
}
}
long nTxtW1 = maProtectRecordsPB.GetTextWidth( msProtectRecordsStr );
if ( msProtectRecordsStr.Search( '~' ) == STRING_NOTFOUND )
nTxtW1 += nOffset;
long nTxtW2 = maProtectRecordsPB.GetTextWidth( msUnprotectRecordsStr );
if ( msUnprotectRecordsStr.Search( '~' ) == STRING_NOTFOUND )
nTxtW2 += nOffset;
long nTxtW = Max( nTxtW1, nTxtW2 );
long nBtnW = maProtectRecordsPB.GetSizePixel().Width();
if ( nTxtW > nBtnW )
{
// broaden the button
long nDelta = nTxtW - nBtnW;
Size aNewSize = maProtectRecordsPB.GetSizePixel();
aNewSize.Width() += nDelta;
maProtectRecordsPB.SetSizePixel( aNewSize );
}
}
SfxTabPage* SvxSecurityTabPage::Create(Window* pParent, const SfxItemSet& rAttrSet )
{
return new SvxSecurityTabPage(pParent, rAttrSet);
}
void SvxSecurityTabPage::ActivatePage( const SfxItemSet& )
{
}
int SvxSecurityTabPage::DeactivatePage( SfxItemSet* _pSet )
{
if( _pSet )
FillItemSet( *_pSet );
return LEAVE_PAGE;
}
namespace
{
/* bool Enable( const SvtSecurityOptions& _rOpt, SvtSecurityOptions::EOption _eOpt, Control& _rCtrl, FixedImage& _rImg )
{
bool b = _rOpt.IsOptionEnabled( _eOpt );
_rCtrl.Enable( b );
_Img.Show( !b );
return b;
}
*/
bool EnableAndSet( const SvtSecurityOptions& _rOpt, SvtSecurityOptions::EOption _eOpt,
CheckBox& _rCtrl, FixedImage& _rImg )
{
// bool b = Enable( _rOpt, _eOpt, _rCtrl, _rImg );
bool b = _rOpt.IsOptionEnabled( _eOpt );
_rCtrl.Enable( b );
_rImg.Show( !b );
_rCtrl.Check( _rOpt.IsOptionSet( _eOpt ) );
return b;
}
bool CheckAndSave( SvtSecurityOptions& _rOpt, SvtSecurityOptions::EOption _eOpt, const CheckBox& _rCtrl, bool& _rModfied )
{
bool bModified = false;
if( _rOpt.IsOptionEnabled( _eOpt ) )
{
bool bNew = _rCtrl.IsChecked();
bModified = _rOpt.IsOptionSet( _eOpt ) != bNew;
if( bModified )
{
_rOpt.SetOption( _eOpt, bNew );
_rModfied = true;
}
}
return bModified;
}
}
BOOL SvxSecurityTabPage::FillItemSet( SfxItemSet& )
{
bool bModified = false;
CheckAndSave( *mpSecOptions, SvtSecurityOptions::E_DOCWARN_SAVEORSEND, maSaveOrSendDocsCB, bModified );
CheckAndSave( *mpSecOptions, SvtSecurityOptions::E_DOCWARN_SIGNING, maSignDocsCB, bModified );
CheckAndSave( *mpSecOptions, SvtSecurityOptions::E_DOCWARN_PRINT, maPrintDocsCB, bModified );
CheckAndSave( *mpSecOptions, SvtSecurityOptions::E_DOCWARN_CREATEPDF, maCreatePdfCB, bModified );
CheckAndSave( *mpSecOptions, SvtSecurityOptions::E_DOCWARN_REMOVEPERSONALINFO, maRemovePersInfoCB, bModified );
CheckAndSave( *mpSecOptions, SvtSecurityOptions::E_DOCWARN_RECOMMENDPASSWORD, maRecommPasswdCB, bModified );
// document options
SfxObjectShell* pCurDocShell = SfxObjectShell::Current();
if( pCurDocShell )
{
if( pCurDocShell->HasSecurityOptOpenReadOnly() )
pCurDocShell->SetSecurityOptOpenReadOnly( maRecommReadOnlyCB.IsChecked() );
}
return bModified;
}
/*--------------------------------------------------------------------*/
void SvxSecurityTabPage::Reset( const SfxItemSet& )
{
EnableAndSet( *mpSecOptions, SvtSecurityOptions::E_DOCWARN_SAVEORSEND, maSaveOrSendDocsCB, maSaveOrSendDocsFI );
EnableAndSet( *mpSecOptions, SvtSecurityOptions::E_DOCWARN_SIGNING, maSignDocsCB, maSignDocsFI );
EnableAndSet( *mpSecOptions, SvtSecurityOptions::E_DOCWARN_PRINT, maPrintDocsCB, maPrintDocsFI );
EnableAndSet( *mpSecOptions, SvtSecurityOptions::E_DOCWARN_CREATEPDF, maCreatePdfCB, maCreatePdfFI );
EnableAndSet( *mpSecOptions, SvtSecurityOptions::E_DOCWARN_REMOVEPERSONALINFO, maRemovePersInfoCB, maRemovePersInfoFI );
EnableAndSet( *mpSecOptions, SvtSecurityOptions::E_DOCWARN_RECOMMENDPASSWORD, maRecommPasswdCB, maRecommPasswdFI );
String sNewText = msProtectRecordsStr;
SfxObjectShell* pCurDocShell = SfxObjectShell::Current();
if( pCurDocShell )
{
bool bIsHTMLDoc = false;
SfxViewShell* pViewSh = SfxViewShell::Current();
if( pViewSh )
{
const SfxPoolItem* pItem;
SfxDispatcher* pDisp = pViewSh->GetDispatcher();
if ( SFX_ITEM_AVAILABLE <= pDisp->QueryState( SID_HTML_MODE, pItem ) )
{
USHORT nMode = static_cast< const SfxUInt16Item* >( pItem )->GetValue();
bIsHTMLDoc = ( ( nMode & HTMLMODE_ON ) != 0 );
}
}
sal_Bool bIsReadonly = pCurDocShell->IsReadOnly();
if( pCurDocShell->HasSecurityOptOpenReadOnly() && !bIsHTMLDoc )
{
maRecommReadOnlyCB.Check( pCurDocShell->IsSecurityOptOpenReadOnly() );
//! maRecommReadOnlyCB.Enable( !bIsReadonly );
}
else
maRecommReadOnlyCB.Disable();
bool bVal;
if ( QueryRecordChangesState( RL_WRITER, bVal ) && !bIsHTMLDoc )
meRedlingMode = RL_WRITER;
else if( QueryRecordChangesState( RL_CALC, bVal ) )
meRedlingMode = RL_CALC;
else
meRedlingMode = RL_NONE;
if ( meRedlingMode != RL_NONE )
{
maRecordChangesCB.Check( bVal );
maRecordChangesCB.Enable( !bVal && !bIsReadonly );
maProtectRecordsPB.Enable(
QueryRecordChangesProtectionState( meRedlingMode, bVal ) && !bIsReadonly );
// set the right text
if ( bVal )
sNewText = msUnprotectRecordsStr;
}
else
{
// only Writer and Calc support redlining
maRecordChangesCB.Disable();
maProtectRecordsPB.Disable();
}
}
else
{ // no doc -> hide document settings
maRecommReadOnlyCB.Disable();
maRecordChangesCB.Disable();
maProtectRecordsPB.Disable();
}
maProtectRecordsPB.SetText( sNewText );
}
//added by jmeng begin
MozPluginTabPage::MozPluginTabPage(Window* pParent, const SfxItemSet& rSet)
: SfxTabPage( pParent, ResId( RID_SVXPAGE_INET_MOZPLUGIN, DIALOG_MGR() ), rSet ),
aMSWordGB ( this, ResId( GB_MOZPLUGIN ) ),
aWBasicCodeCB ( this, ResId( CB_MOZPLUGIN_CODE ) )
{
FreeResource();
}
MozPluginTabPage::~MozPluginTabPage()
{
}
SfxTabPage* MozPluginTabPage::Create( Window* pParent,
const SfxItemSet& rAttrSet )
{
return new MozPluginTabPage( pParent, rAttrSet );
}
BOOL MozPluginTabPage::FillItemSet( SfxItemSet& )
{
BOOL hasInstall = isInstalled();
BOOL hasChecked = aWBasicCodeCB.IsChecked();
if(hasInstall && (!hasChecked)){
//try to uninstall
uninstallPlugin();
}
else if((!hasInstall) && hasChecked){
//try to install
installPlugin();
}
else{
// do nothing
}
return TRUE;
}
void MozPluginTabPage::Reset( const SfxItemSet& )
{
aWBasicCodeCB.Check( isInstalled());
aWBasicCodeCB.SaveValue();
}
#ifdef WNT
extern "C" {
int lc_isInstalled(const char* realFilePath);
int lc_installPlugin(const char* realFilePath);
int lc_uninstallPlugin(const char* realFilePath);
}
#endif
#define NPP_PATH_MAX 2048
inline ::rtl::OString getDllURL( void )
{
// ::rtl::OUString libPath(rtl::OUString::createFromAscii("libcui680li.so"));
::rtl::OUString dirPath/*dllPath, */;
osl::Module::getUrlFromAddress(reinterpret_cast< oslGenericFunction >(getDllURL), dirPath);
dirPath = dirPath.copy(0, dirPath.lastIndexOf('/'));
// osl::FileBase::getAbsoluteFileURL(dirPath, libPath, dllPath);
::rtl::OUString sysDirPath;
osl::FileBase::getSystemPathFromFileURL(dirPath, sysDirPath);
::rtl::OString oSysDirPath;
oSysDirPath = OUStringToOString(sysDirPath, RTL_TEXTENCODING_ASCII_US);
return oSysDirPath;
}
BOOL MozPluginTabPage::isInstalled()
{
#ifdef UNIX
// get the real file referred by .so lnk file
char lnkFilePath[NPP_PATH_MAX] = {0};
char lnkReferFilePath[NPP_PATH_MAX] = {0};
char* pHome = getpwuid(getuid())->pw_dir;
strcat(lnkFilePath, pHome);
strcat(lnkFilePath, "/.mozilla/plugins/libnpsoplugin" SAL_DLLEXTENSION);
struct stat sBuf;
if (0 > lstat(lnkFilePath, &sBuf))
return false;
if (!S_ISLNK(sBuf.st_mode))
return false;
if (0 >= readlink(lnkFilePath, lnkReferFilePath, NPP_PATH_MAX))
return false;
// If the link is relative, then we regard it as non-standard
if (lnkReferFilePath[0] != '/')
return false;
// get the real file path
char realFilePath[NPP_PATH_MAX] = {0};
::rtl::OString tempString;
tempString = getDllURL();
strncpy(realFilePath, tempString.getStr(), NPP_PATH_MAX);
strcat(realFilePath, "/libnpsoplugin" SAL_DLLEXTENSION);
if (0 != strcmp(lnkReferFilePath, realFilePath))
return false;
return true;
#endif
#ifdef WNT
// get the value from registry
BOOL ret = true;
::rtl::OString tempString;
char realFilePath[NPP_PATH_MAX] = {0};
tempString = getDllURL();
strncpy(realFilePath, tempString.getStr(), NPP_PATH_MAX);
if(! lc_isInstalled(realFilePath))
ret =true;
else
ret = false;
return ret;
#endif
}
BOOL MozPluginTabPage::installPlugin()
{
#ifdef UNIX
// get the real file referred by .so lnk file
char lnkFilePath[NPP_PATH_MAX] = {0};
char* pHome = getpwuid(getuid())->pw_dir;
strcat(lnkFilePath, pHome);
strcat(lnkFilePath, "/.mozilla/plugins/libnpsoplugin" SAL_DLLEXTENSION);
remove(lnkFilePath);
// create the dirs if necessary
struct stat buf;
char tmpDir[NPP_PATH_MAX] = {0};
sprintf(tmpDir, "%s/.mozilla", pHome);
if (0 > stat(lnkFilePath, &buf))
{
mkdir(tmpDir, 0755);
strcat(tmpDir, "/plugins");
mkdir(tmpDir, 0755);
}
// get the real file path
char realFilePath[NPP_PATH_MAX] = {0};
::rtl::OString tempString;
tempString = getDllURL();
strncpy(realFilePath, tempString.getStr(), NPP_PATH_MAX);
strcat(realFilePath, "/libnpsoplugin" SAL_DLLEXTENSION);
// create the link
if (0 != symlink(realFilePath, lnkFilePath))
return false;
return true;
#endif
#ifdef WNT
::rtl::OString tempString;
char realFilePath[NPP_PATH_MAX] = {0};
tempString = getDllURL();
strncpy(realFilePath, tempString.getStr(), NPP_PATH_MAX);
if( !lc_installPlugin(realFilePath))
return true;
else
return false;
#endif
}
BOOL MozPluginTabPage::uninstallPlugin()
{
#ifdef UNIX
// get the real file referred by .so lnk file
char lnkFilePath[NPP_PATH_MAX] = {0};
char* pHome = getpwuid(getuid())->pw_dir;
strcat(lnkFilePath, pHome);
strcat(lnkFilePath, "/.mozilla/plugins/libnpsoplugin" SAL_DLLEXTENSION);
if(0 > remove(lnkFilePath))
return false;
return true;
#endif
#ifdef WNT
::rtl::OString tempString;
char realFilePath[NPP_PATH_MAX] = {0};
tempString = getDllURL();
strncpy(realFilePath, tempString.getStr(), NPP_PATH_MAX);
if(!lc_uninstallPlugin(realFilePath))
return true;
else
return false;
#endif
}
//added by jmeng end
/* -------------------------------------------------------------------------*/
class MailerProgramCfg_Impl : public utl::ConfigItem
{
friend class SvxEMailTabPage;
// variables
OUString sProgram;
// readonly states
sal_Bool bROProgram;
const Sequence<OUString> GetPropertyNames();
public:
MailerProgramCfg_Impl();
virtual ~MailerProgramCfg_Impl();
virtual void Commit();
};
/* -------------------------------------------------------------------------*/
MailerProgramCfg_Impl::MailerProgramCfg_Impl() :
utl::ConfigItem(C2U("Office.Common/ExternalMailer")),
bROProgram(sal_False)
{
const Sequence< OUString > aNames = GetPropertyNames();
const Sequence< Any > aValues = GetProperties(aNames);
const Sequence< sal_Bool > aROStates = GetReadOnlyStates(aNames);
const Any* pValues = aValues.getConstArray();
const sal_Bool* pROStates = aROStates.getConstArray();
for(sal_Int32 nProp = 0; nProp < aValues.getLength(); nProp++)
{
if(pValues[nProp].hasValue())
{
switch(nProp)
{
case 0 :
{
pValues[nProp] >>= sProgram;
bROProgram = pROStates[nProp];
}
break;
}
}
}
}
/* -------------------------------------------------------------------------*/
MailerProgramCfg_Impl::~MailerProgramCfg_Impl()
{
}
/* -------------------------------------------------------------------------*/
const Sequence<OUString> MailerProgramCfg_Impl::GetPropertyNames()
{
Sequence<OUString> aRet(1);
OUString* pRet = aRet.getArray();
pRet[0] = C2U("Program");
return aRet;
}
/* -------------------------------------------------------------------------*/
void MailerProgramCfg_Impl::Commit()
{
const Sequence< OUString > aOrgNames = GetPropertyNames();
sal_Int32 nOrgCount = aOrgNames.getLength();
Sequence< OUString > aNames(nOrgCount);
Sequence< Any > aValues(nOrgCount);
sal_Int32 nRealCount = 0;
for(int nProp = 0; nProp < nOrgCount; nProp++)
{
switch(nProp)
{
case 0:
{
if (!bROProgram)
{
aNames[nRealCount] = aOrgNames[nProp];
aValues[nRealCount] <<= sProgram;
++nRealCount;
}
}
break;
}
}
aNames.realloc(nRealCount);
aValues.realloc(nRealCount);
PutProperties(aNames, aValues);
}
/* -------------------------------------------------------------------------*/
struct SvxEMailTabPage_Impl
{
MailerProgramCfg_Impl aMailConfig;
};
SvxEMailTabPage::SvxEMailTabPage(Window* pParent, const SfxItemSet& rSet) :
SfxTabPage(pParent, ResId( RID_SVXPAGE_INET_MAIL, DIALOG_MGR() ), rSet),
aMailFL(this, ResId(FL_MAIL )),
aMailerURLFI(this, ResId(FI_MAILERURL )),
aMailerURLFT(this, ResId(FT_MAILERURL )),
aMailerURLED(this, ResId(ED_MAILERURL )),
aMailerURLPB(this, ResId(PB_MAILERURL )),
m_sDefaultFilterName( ResId(STR_DEFAULT_FILENAME )),
pImpl(new SvxEMailTabPage_Impl)
{
FreeResource();
aMailerURLPB.SetClickHdl( LINK( this, SvxEMailTabPage, FileDialogHdl_Impl ) );
// FixedText not wide enough?
long nTxtW = aMailerURLFT.GetCtrlTextWidth( aMailerURLFT.GetText() );
long nCtrlW = aMailerURLFT.GetSizePixel().Width();
if ( nTxtW >= nCtrlW )
{
long nDelta = Max( (long)10, nTxtW - nCtrlW );
// so FixedText wider
Size aNewSz = aMailerURLFT.GetSizePixel();
aNewSz.Width() += nDelta;
aMailerURLFT.SetSizePixel( aNewSz );
// and Edit smaller
aNewSz = aMailerURLED.GetSizePixel();
aNewSz.Width() -= nDelta;
Point aNewPt = aMailerURLED.GetPosPixel();
aNewPt.X() += nDelta;
aMailerURLED.SetPosSizePixel( aNewPt, aNewSz );
}
}
/* -------------------------------------------------------------------------*/
SvxEMailTabPage::~SvxEMailTabPage()
{
delete pImpl;
}
/* -------------------------------------------------------------------------*/
SfxTabPage* SvxEMailTabPage::Create( Window* pParent, const SfxItemSet& rAttrSet )
{
return new SvxEMailTabPage(pParent, rAttrSet);
}
/* -------------------------------------------------------------------------*/
BOOL SvxEMailTabPage::FillItemSet( SfxItemSet& )
{
BOOL bMailModified = FALSE;
if(!pImpl->aMailConfig.bROProgram && aMailerURLED.GetSavedValue() != aMailerURLED.GetText())
{
pImpl->aMailConfig.sProgram = aMailerURLED.GetText();
bMailModified = TRUE;
}
if ( bMailModified )
pImpl->aMailConfig.Commit();
return FALSE;
}
/* -------------------------------------------------------------------------*/
void SvxEMailTabPage::Reset( const SfxItemSet& )
{
aMailerURLED.Enable(TRUE );
aMailerURLPB.Enable(TRUE );
if(pImpl->aMailConfig.bROProgram)
aMailerURLFI.Show();
aMailerURLED.SetText(pImpl->aMailConfig.sProgram);
aMailerURLED.SaveValue();
aMailerURLED.Enable(!pImpl->aMailConfig.bROProgram);
aMailerURLPB.Enable(!pImpl->aMailConfig.bROProgram);
aMailerURLFT.Enable(!pImpl->aMailConfig.bROProgram);
aMailFL.Enable(aMailerURLFT.IsEnabled() ||
aMailerURLED.IsEnabled() ||
aMailerURLPB.IsEnabled());
}
/* -------------------------------------------------------------------------*/
IMPL_LINK( SvxEMailTabPage, FileDialogHdl_Impl, PushButton*, pButton )
{
if ( &aMailerURLPB == pButton && !pImpl->aMailConfig.bROProgram )
{
FileDialogHelper aHelper(
com::sun::star::ui::dialogs::TemplateDescription::FILEOPEN_SIMPLE,
WB_OPEN );
String sPath = aMailerURLED.GetText();
if ( !sPath.Len() )
sPath.AppendAscii("/usr/bin");
String sUrl;
::utl::LocalFileHelper::ConvertPhysicalNameToURL(sPath,sUrl);
aHelper.SetDisplayDirectory(sUrl);
aHelper.AddFilter( m_sDefaultFilterName, String::CreateFromAscii("*"));
if ( ERRCODE_NONE == aHelper.Execute() )
{
sUrl = aHelper.GetPath();
::utl::LocalFileHelper::ConvertURLToPhysicalName(sUrl,sPath);
aMailerURLED.SetText(sPath);
}
}
return 0;
}
// -----------------------------------------------------------------------------