blob: a9776beed93a013e45ed4f55528da691abb4afe8 [file] [log] [blame]
/**************************************************************
*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*
*************************************************************/
// MARKER(update_precomp.py): autogen include statement, do not remove
#include "precompiled_cui.hxx"
// include ---------------------------------------------------------------
#include <tools/shl.hxx>
#include <tools/config.hxx>
#include <vcl/msgbox.hxx>
#include <svl/intitem.hxx>
#include <svl/stritem.hxx>
#include <svl/eitem.hxx>
#include <svl/slstitm.hxx>
#include <sfx2/fcontnr.hxx>
#include <sfx2/dispatch.hxx>
#include <sfx2/docfilt.hxx>
#include <sfx2/viewsh.hxx>
#include <sfx2/sfxsids.hrc>
#include <sfx2/filedlghelper.hxx>
#include <tools/inetdef.hxx>
#include <svl/urihelper.hxx>
#include <svl/cntwids.hrc>
#include <unotools/inetoptions.hxx>
#include <sfx2/app.hxx>
#include <sfx2/objsh.hxx>
#include <unotools/bootstrap.hxx>
#include <vcl/help.hxx>
#include <sfx2/viewfrm.hxx>
#include <tools/urlobj.hxx>
#include <unotools/pathoptions.hxx>
#include <unotools/securityoptions.hxx>
#include <unotools/javaoptions.hxx>
#include <unotools/localfilehelper.hxx>
#include <unotools/extendedsecurityoptions.hxx>
#include <com/sun/star/uno/Sequence.hxx>
#define _SVX_OPTINET2_CXX
#include <dialmgr.hxx>
#include "optinet2.hxx"
#include <svx/svxdlg.hxx> //CHINA001
#include <cuires.hrc>
#include "optinet2.hrc"
#include "helpid.hrc"
#include <svx/ofaitem.hxx>
#include <svx/htmlmode.hxx>
#include <svx/svxids.hrc> // slot ids, mostly for changetracking
// for security TP
#include <comphelper/processfactory.hxx>
#include <com/sun/star/security/XDocumentDigitalSignatures.hpp>
#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 <rtl/textenc.h>
#include <rtl/locale.h>
#include <osl/nlsupport.h>
#endif
#include <sal/types.h>
#include <rtl/ustring.hxx>
#include <osl/file.hxx>
#include <osl/process.h>
#include <com/sun/star/container/XNameReplace.hpp>
#include <com/sun/star/container/XNameAccess.hpp>
#include <com/sun/star/beans/PropertyValue.hpp>
#include <com/sun/star/beans/XPropertySet.hpp>
#include <com/sun/star/beans/XPropertyState.hpp>
#include <com/sun/star/util/XChangesBatch.hpp>
#include <comphelper/processfactory.hxx>
#include "com/sun/star/ui/dialogs/TemplateDescription.hpp"
#include "com/sun/star/task/XMasterPasswordHandling2.hpp"
#include "com/sun/star/task/XPasswordContainer.hpp"
#include "securityoptions.hxx"
#include "webconninfo.hxx"
using namespace ::com::sun::star;
using namespace ::com::sun::star::uno;
using namespace ::sfx2;
using ::rtl::OUString;
//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)";
// -----------------------------------------------------------------------
void SvxNoSpaceEdit::KeyInput( const KeyEvent& rKEvent )
{
if ( bOnlyNumeric )
{
const KeyCode& rKeyCode = rKEvent.GetKeyCode();
sal_uInt16 nGroup = rKeyCode.GetGroup();
sal_uInt16 nKey = rKeyCode.GetCode();
sal_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 = sal_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, CUI_RES( RID_SVXERR_OPT_PROXYPORTS ) ).Execute();
}
}
/********************************************************************/
/********************************************************************/
/* */
/* SvxProxyTabPage */
/* */
/* */
/********************************************************************/
/********************************************************************/
SvxProxyTabPage::SvxProxyTabPage(Window* pParent, const SfxItemSet& rSet ) :
SfxTabPage( pParent, CUI_RES( RID_SVXPAGE_INET_PROXY ), rSet ),
aOptionGB (this, CUI_RES(GB_SETTINGS)),
aProxyModeFT (this, CUI_RES(FT_PROXYMODE)),
aProxyModeLB (this, CUI_RES(LB_PROXYMODE)),
aHttpProxyFT (this, CUI_RES( FT_HTTP_PROXY )),
aHttpProxyED (this, CUI_RES( ED_HTTP_PROXY )),
aHttpPortFT (this, CUI_RES( FT_HTTP_PORT )),
aHttpPortED (this, CUI_RES( ED_HTTP_PORT ), sal_True),
aHttpsProxyFT (this, CUI_RES( FT_HTTPS_PROXY )),
aHttpsProxyED (this, CUI_RES( ED_HTTPS_PROXY )),
aHttpsPortFT (this, CUI_RES( FT_HTTPS_PORT )),
aHttpsPortED (this, CUI_RES( ED_HTTPS_PORT ), sal_True),
aFtpProxyFT (this, CUI_RES( FT_FTP_PROXY )),
aFtpProxyED (this, CUI_RES( ED_FTP_PROXY )),
aFtpPortFT (this, CUI_RES( FT_FTP_PORT )),
aFtpPortED (this, CUI_RES( ED_FTP_PORT ), sal_True),
aNoProxyForFT (this, CUI_RES( FT_NOPROXYFOR )),
aNoProxyForED (this, CUI_RES( ED_NOPROXYFOR )),
aNoProxyDescFT (this, CUI_RES( ED_NOPROXYDESC )),
sFromBrowser ( CUI_RES( ST_PROXY_FROM_BROWSER ) ),
aProxyModePN(RTL_CONSTASCII_USTRINGPARAM("ooInetProxyType")),
aHttpProxyPN(RTL_CONSTASCII_USTRINGPARAM("ooInetHTTPProxyName")),
aHttpPortPN(RTL_CONSTASCII_USTRINGPARAM("ooInetHTTPProxyPort")),
aHttpsProxyPN(RTL_CONSTASCII_USTRINGPARAM("ooInetHTTPSProxyName")),
aHttpsPortPN(RTL_CONSTASCII_USTRINGPARAM("ooInetHTTPSProxyPort")),
aFtpProxyPN(RTL_CONSTASCII_USTRINGPARAM("ooInetFTPProxyName")),
aFtpPortPN(RTL_CONSTASCII_USTRINGPARAM("ooInetFTPProxyPort")),
aNoProxyDescPN(RTL_CONSTASCII_USTRINGPARAM("ooInetNoProxy"))
{
FreeResource();
aHttpPortED.SetMaxTextLen(5);
aHttpsPortED.SetMaxTextLen(5);
aFtpPortED.SetMaxTextLen(5);
Link aLink = LINK( this, SvxProxyTabPage, LoseFocusHdl_Impl );
aHttpPortED.SetLoseFocusHdl( aLink );
aHttpsPortED.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& )
{
}
}
ArrangeControls_Impl();
}
/*-----------------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( (sal_uInt16) nIntValue );
}
if( xNameAccess->getByName(aHttpProxyPN) >>= aStringValue )
{
aHttpProxyED.SetText( aStringValue );
}
if( xNameAccess->getByName(aHttpPortPN) >>= nIntValue )
{
aHttpPortED.SetText( String::CreateFromInt32( nIntValue ));
}
if( xNameAccess->getByName(aHttpsProxyPN) >>= aStringValue )
{
aHttpsProxyED.SetText( aStringValue );
}
if( xNameAccess->getByName(aHttpsPortPN) >>= nIntValue )
{
aHttpsPortED.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(aHttpsProxyPN) >>= aStringValue )
{
aHttpsProxyED.SetText( aStringValue );
}
if( xPropertyState->getPropertyDefault(aHttpsPortPN) >>= nIntValue )
{
aHttpsPortED.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(aHttpsProxyPN);
xPropertyState->setPropertyToDefault(aHttpsPortPN);
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();
aHttpsProxyED.SaveValue();
aHttpsPortED.SaveValue();
aFtpProxyED.SaveValue();
aFtpPortED.SaveValue();
aNoProxyForED.SaveValue();
EnableControls_Impl( aProxyModeLB.GetSelectEntryPos() == 2 );
}
/*-----------------12.08.96 16.34-------------------
--------------------------------------------------*/
sal_Bool SvxProxyTabPage::FillItemSet(SfxItemSet& )
{
sal_Bool bModified=sal_False;
try {
Reference< beans::XPropertySet > xPropertySet(m_xConfigurationUpdateAccess, UNO_QUERY_THROW );
sal_uInt16 nSelPos = aProxyModeLB.GetSelectEntryPos();
if(aProxyModeLB.GetSavedValue() != nSelPos)
{
if( nSelPos == 1 )
{
RestoreConfigDefaults_Impl();
return sal_True;
}
xPropertySet->setPropertyValue(aProxyModePN,
makeAny((sal_Int32) nSelPos));
bModified = sal_True;
}
if(aHttpProxyED.GetSavedValue() != aHttpProxyED.GetText())
{
xPropertySet->setPropertyValue( aHttpProxyPN,
makeAny(rtl::OUString(aHttpProxyED.GetText())));
bModified = sal_True;
}
if ( aHttpPortED.GetSavedValue() != aHttpPortED.GetText() )
{
xPropertySet->setPropertyValue( aHttpPortPN,
makeAny(aHttpPortED.GetText().ToInt32()));
bModified = sal_True;
}
if(aHttpsProxyED.GetSavedValue() != aHttpsProxyED.GetText())
{
xPropertySet->setPropertyValue( aHttpsProxyPN,
makeAny(rtl::OUString(aHttpsProxyED.GetText())));
bModified = sal_True;
}
if ( aHttpsPortED.GetSavedValue() != aHttpsPortED.GetText() )
{
xPropertySet->setPropertyValue( aHttpsPortPN,
makeAny(aHttpsPortED.GetText().ToInt32()));
bModified = sal_True;
}
if(aFtpProxyED.GetSavedValue() != aFtpProxyED.GetText())
{
xPropertySet->setPropertyValue( aFtpProxyPN,
makeAny( rtl::OUString(aFtpProxyED.GetText())));
bModified = sal_True;
}
if ( aFtpPortED.GetSavedValue() != aFtpPortED.GetText() )
{
xPropertySet->setPropertyValue( aFtpPortPN,
makeAny(aFtpPortED.GetText().ToInt32()));
bModified = sal_True;
}
if ( aNoProxyForED.GetSavedValue() != aNoProxyForED.GetText() )
{
xPropertySet->setPropertyValue( aNoProxyDescPN,
makeAny( rtl::OUString(aNoProxyForED.GetText())));
bModified = sal_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;
}
void SvxProxyTabPage::ArrangeControls_Impl()
{
//-->Calculate dynamical width of controls, add buy wuy for i71445 Time: 2007.02.27
long nWidth = aProxyModeFT.GetCtrlTextWidth( aProxyModeFT.GetText() );
long nTemp = aHttpProxyFT.GetCtrlTextWidth( aHttpProxyFT.GetText() );
if ( nTemp > nWidth )
nWidth = nTemp;
nTemp = aHttpsProxyFT.GetCtrlTextWidth( aHttpsProxyFT.GetText() );
if ( nTemp > nWidth )
nWidth = nTemp;
nTemp = aFtpProxyFT.GetCtrlTextWidth( aFtpProxyFT.GetText() );
if ( nTemp > nWidth )
nWidth = nTemp;
nTemp = aNoProxyForFT.GetCtrlTextWidth( aNoProxyForFT.GetText() );
if ( nTemp > nWidth )
nWidth = nTemp;
nWidth += 10; // To be sure the length of the FixedText is enough on all platforms
const long nFTWidth = aProxyModeFT.GetSizePixel().Width();
if ( nWidth > nFTWidth )
{
Size aNewSize = aProxyModeFT.GetSizePixel();
aNewSize.Width() = nWidth;
aProxyModeFT.SetSizePixel( aNewSize );
aHttpProxyFT.SetSizePixel( aNewSize );
aHttpsProxyFT.SetSizePixel( aNewSize );
aFtpProxyFT.SetSizePixel( aNewSize );
aNoProxyForFT.SetSizePixel( aNewSize );
const long nDelta = nWidth - nFTWidth;
Point aNewPos = aProxyModeLB.GetPosPixel();
aNewPos.X() += nDelta;
aProxyModeLB.SetPosPixel( aNewPos );
aNewSize = aHttpProxyED.GetSizePixel();
aNewSize.Width() -= nDelta;
aNewPos.Y() = aHttpProxyED.GetPosPixel().Y();
aHttpProxyED.SetPosSizePixel( aNewPos, aNewSize );
aNewPos.Y() = aHttpsProxyED.GetPosPixel().Y();
aHttpsProxyED.SetPosSizePixel( aNewPos, aNewSize );
aNewPos.Y() = aFtpProxyED.GetPosPixel().Y();
aFtpProxyED.SetPosSizePixel( aNewPos, aNewSize );
aNewPos.Y() = aNoProxyForED.GetPosPixel().Y();
aNoProxyForED.SetPosSizePixel( aNewPos, aNewSize );
}
//<--End buy wuy for i71445 Time: 2007.02.27
}
/*-----------------12.08.96 13.38-------------------
--------------------------------------------------*/
void SvxProxyTabPage::EnableControls_Impl(sal_Bool bEnable)
{
aHttpProxyFT.Enable(bEnable);
aHttpProxyED.Enable(bEnable);
aHttpPortFT.Enable(bEnable);
aHttpPortED.Enable(bEnable);
aHttpsProxyFT.Enable(bEnable);
aHttpsProxyED.Enable(bEnable);
aHttpsPortFT.Enable(bEnable);
aHttpsPortED.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 )
{
sal_uInt16 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, CUI_RES( RID_SVXPAGE_INET_SEARCH ), rSet ),
aSearchGB ( this, CUI_RES( GB_SEARCH ) ),
aSearchLB ( this, CUI_RES( LB_SEARCH ) ),
aSearchNameFT ( this, CUI_RES( FT_SEARCH_NAME ) ),
aSearchNameED ( this, CUI_RES( ED_SEARCH_NAME ) ),
aSearchFT ( this, CUI_RES( FT_SEARCH ) ),
aAndRB ( this, CUI_RES( RB_AND ) ),
aOrRB ( this, CUI_RES( RB_OR ) ),
aExactRB ( this, CUI_RES( RB_EXACT ) ),
aURLFT ( this, CUI_RES( FT_URL ) ),
aURLED ( this, CUI_RES( ED_URL ) ),
aPostFixFT ( this, CUI_RES( FT_POSTFIX ) ),
aPostFixED ( this, CUI_RES( ED_POSTFIX ) ),
aSeparatorFT ( this, CUI_RES( FT_SEPARATOR ) ),
aSeparatorED ( this, CUI_RES( ED_SEPARATOR ) ),
aCaseFT ( this, CUI_RES( FT_CASE ) ),
aCaseED ( this, CUI_RES( ED_CASE ) ),
aNewPB ( this, CUI_RES( PB_NEW ) ),
aAddPB ( this, CUI_RES( PB_ADD ) ),
aChangePB ( this, CUI_RES( PB_CHANGE ) ),
aDeletePB ( this, CUI_RES( PB_DELETE ) ),
sModifyMsg(CUI_RES(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 );
InitControls_Impl();
}
// -----------------------------------------------------------------------
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();
}
// -----------------------------------------------------------------------
sal_Bool SvxSearchTabPage::FillItemSet( SfxItemSet& )
{
if(aSearchConfig.IsModified())
aSearchConfig.Commit();
return sal_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)
sal_Bool SvxSearchTabPage::ConfirmLeave( const String& rStringSelection)
{
if(aChangePB.IsEnabled())
{
QueryBox aQuery(this, WB_YES_NO_CANCEL|WB_DEF_YES, sModifyMsg);
sal_uInt16 nRet = aQuery.Execute();
if(RET_CANCEL == nRet)
{
if(rStringSelection.Len())
aSearchLB.SelectEntry(sLastSelectedEntry);
return sal_False;
}
else if(RET_YES == nRet)
{
sal_uInt16 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(sal_False);
aAddPB.Enable(sal_False);
SearchEntryHdl_Impl(&aSearchLB);
}
}
if(aAddPB.IsEnabled())
{
QueryBox aQuery(this, WB_YES_NO_CANCEL|WB_DEF_YES, sModifyMsg);
sal_uInt16 nRet = aQuery.Execute();
if(RET_CANCEL == nRet)
{
aSearchLB.SetNoSelection();
return sal_False;
}
else if(RET_YES == nRet)
{
aSearchLB.SetNoSelection();
AddSearchHdl_Impl(0);
if(rStringSelection.Len())
aSearchLB.SelectEntry(rStringSelection);
}
else if(RET_NO == nRet)
{
aAddPB.Enable(sal_False);
aChangePB.Enable(sal_False);
NewSearchHdl_Impl(0);
}
}
return sal_True;
}
// -----------------------------------------------------------------------
void SvxSearchTabPage::InitControls_Impl()
{
// detect longest label text
sal_Int32 i = 0;
long nLabelTextWidth = 0;
Window* pLabels[] = { &aSearchNameFT, &aSearchFT, &aURLFT, &aPostFixFT, &aSeparatorFT, &aCaseFT };
Window** pLabel = pLabels;
const sal_Int32 nLabelCount = sizeof( pLabels ) / sizeof( pLabels[0] );
for ( ; i < nLabelCount; ++i, ++pLabel )
{
long nTemp = (*pLabel)->GetCtrlTextWidth( (*pLabel)->GetText() );
if ( nTemp > nLabelTextWidth )
nLabelTextWidth = nTemp;
}
// resize all labels
const Size aSpace = aSearchNameFT.LogicToPixel( Size( RSC_SP_CTRL_DESC_Y, RSC_SP_CTRL_DESC_Y ), MAP_APPFONT );
nLabelTextWidth += aSpace.Width();
const long nLabelWidth = aSearchNameFT.GetSizePixel().Width();
const long nDelta = nLabelWidth - nLabelTextWidth;
pLabel = pLabels;
for ( i = 0; i < nLabelCount; ++i, ++pLabel )
{
Size aNewSize = (*pLabel)->GetSizePixel();
aNewSize.Width() = nLabelTextWidth;
(*pLabel)->SetSizePixel( aNewSize );
}
// resize and move the edits
Window* pEdits[] = { &aSearchNameED, &aAndRB, &aOrRB,
&aExactRB, &aURLED, &aPostFixED, &aSeparatorED, &aCaseED };
Window** pEdit = pEdits;
const sal_Int32 nCCount = sizeof( pEdits ) / sizeof( pEdits[ 0 ] );
for ( i = 0; i < nCCount; ++i, ++pEdit )
{
Point aNewPos = (*pEdit)->GetPosPixel();
aNewPos.X() -= nDelta;
Size aNewSize = (*pEdit)->GetSizePixel();
if ( (*pEdit) != &aSeparatorED && (*pEdit) != &aCaseED )
aNewSize.Width() += nDelta;
(*pEdit)->SetPosSizePixel( aNewPos, aNewSize );
}
}
// -----------------------------------------------------------------------
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( sal_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(sal_False);
aChangePB.Enable(sal_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(sal_False);
aAddPB.Enable(sal_False);
sal_uInt16 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(sal_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(sal_True);
}
return 0;
}
// -----------------------------------------------------------------------
IMPL_LINK( SvxSearchTabPage, DeleteSearchHdl_Impl, PushButton *, EMPTYARG)
{
aChangePB.Enable(sal_False); //add by BerryJia for fixing Bug102610 Time:2002-8-29 11:00 (China Standard Time GMT+08:00)
sal_uInt16 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 )
{
sal_uInt16 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( (sal_uInt16)nCase );
aCurrentSrchData = *pData;
}
aDeletePB.Enable();
}
else
{
aDeletePB.Enable(sal_False);
sLastSelectedEntry.Erase();
}
aChangePB.Enable(sal_False);
aAddPB.Enable(sal_False);
return 0;
}
// -----------------------------------------------------------------------
IMPL_LINK( SvxSearchTabPage, SearchModifyHdl_Impl, SvxNoSpaceEdit*, pEdit )
{
if ( pEdit == &aSearchNameED )
{
sal_Bool bTextLen = ( 0 != pEdit->GetText().Len() );
sal_Bool bFound = sal_False;
if ( bTextLen )
{
sal_uInt16 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( (sal_uInt16)nCase );
return 0;
}
//#98647#----------------------------------------------
void SvxScriptExecListBox::RequestHelp( const HelpEvent& rHEvt )
{ // try to show tips just like as on toolbars
sal_uInt16 nPos=LISTBOX_ENTRY_NOTFOUND;
sal_uInt16 nTop = GetTopEntry();
sal_uInt16 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, CUI_RES( RID_SVXPAGE_INET_SECURITY ), rSet )
,maSecurityOptionsFL( this, CUI_RES( FL_SEC_SECURITYOPTIONS ) )
,maSecurityOptionsFI( this, CUI_RES( FI_SEC_SECURITYOPTIONS ) )
,maSecurityOptionsPB( this, CUI_RES( PB_SEC_SECURITYOPTIONS ) )
,maPasswordsFL ( this, CUI_RES( FL_SEC_PASSWORDS ) )
,maSavePasswordsCB ( this, CUI_RES( CB_SEC_SAVEPASSWORDS ) )
,maShowConnectionsPB( this, CUI_RES( PB_SEC_CONNECTIONS ) )
,maMasterPasswordCB ( this, CUI_RES( CB_SEC_MASTERPASSWORD ) )
,maMasterPasswordFI ( this, CUI_RES( FI_SEC_MASTERPASSWORD ) )
,maMasterPasswordPB ( this, CUI_RES( PB_SEC_MASTERPASSWORD ) )
,maMacroSecFL ( this, CUI_RES( FL_SEC_MACROSEC ) )
,maMacroSecFI ( this, CUI_RES( FI_SEC_MACROSEC ) )
,maMacroSecPB ( this, CUI_RES( PB_SEC_MACROSEC ) )
,mpSecOptions ( new SvtSecurityOptions )
,mpSecOptDlg ( NULL )
,msPasswordStoringDeactivateStr( CUI_RES( STR_SEC_NOPASSWDSAVE ) )
{
FreeResource();
InitControls();
maSecurityOptionsPB.SetClickHdl( LINK( this, SvxSecurityTabPage, SecurityOptionsHdl ) );
maSavePasswordsCB.SetClickHdl( LINK( this, SvxSecurityTabPage, SavePasswordHdl ) );
maMasterPasswordPB.SetClickHdl( LINK( this, SvxSecurityTabPage, MasterPasswordHdl ) );
maMasterPasswordCB.SetClickHdl( LINK( this, SvxSecurityTabPage, MasterPasswordCBHdl ) );
maShowConnectionsPB.SetClickHdl( LINK( this, SvxSecurityTabPage, ShowPasswordsHdl ) );
maMacroSecPB.SetClickHdl( LINK( this, SvxSecurityTabPage, MacroSecPBHdl ) );
ActivatePage( rSet );
}
SvxSecurityTabPage::~SvxSecurityTabPage()
{
delete mpSecOptions;
delete mpSecOptDlg;
}
IMPL_LINK( SvxSecurityTabPage, SecurityOptionsHdl, PushButton*, EMPTYARG )
{
if ( !mpSecOptDlg )
mpSecOptDlg = new svx::SecurityOptionsDialog( this, mpSecOptions );
mpSecOptDlg->Execute();
return 0;
}
IMPL_LINK( SvxSecurityTabPage, SavePasswordHdl, void*, EMPTYARG )
{
try
{
Reference< task::XMasterPasswordHandling > xMasterPasswd(
comphelper::getProcessServiceFactory()->createInstance(
rtl::OUString( RTL_CONSTASCII_USTRINGPARAM ( "com.sun.star.task.PasswordContainer" ) ) ),
UNO_QUERY_THROW );
if ( maSavePasswordsCB.IsChecked() )
{
sal_Bool bOldValue = xMasterPasswd->allowPersistentStoring( sal_True );
xMasterPasswd->removeMasterPassword();
if ( xMasterPasswd->changeMasterPassword( Reference< task::XInteractionHandler >() ) )
{
maMasterPasswordPB.Enable( sal_True );
maMasterPasswordCB.Check( sal_True );
maMasterPasswordCB.Enable( sal_True );
maMasterPasswordFI.Enable( sal_True );
maShowConnectionsPB.Enable( sal_True );
}
else
{
xMasterPasswd->allowPersistentStoring( bOldValue );
maSavePasswordsCB.Check( sal_False );
}
}
else
{
QueryBox aQuery( this, WB_YES_NO|WB_DEF_NO, msPasswordStoringDeactivateStr );
sal_uInt16 nRet = aQuery.Execute();
if( RET_YES == nRet )
{
xMasterPasswd->allowPersistentStoring( sal_False );
maMasterPasswordCB.Check( sal_True );
maMasterPasswordPB.Enable( sal_False );
maMasterPasswordCB.Enable( sal_False );
maMasterPasswordFI.Enable( sal_False );
maShowConnectionsPB.Enable( sal_False );
}
else
{
maSavePasswordsCB.Check( sal_True );
maMasterPasswordPB.Enable( sal_True );
maShowConnectionsPB.Enable( sal_True );
}
}
}
catch( Exception& )
{
maSavePasswordsCB.Check( !maSavePasswordsCB.IsChecked() );
}
return 0;
}
IMPL_LINK( SvxSecurityTabPage, MasterPasswordHdl, PushButton*, EMPTYARG )
{
try
{
Reference< task::XMasterPasswordHandling > xMasterPasswd(
comphelper::getProcessServiceFactory()->createInstance(
rtl::OUString( RTL_CONSTASCII_USTRINGPARAM ( "com.sun.star.task.PasswordContainer" ) ) ),
UNO_QUERY );
if ( xMasterPasswd.is() && xMasterPasswd->isPersistentStoringAllowed() )
xMasterPasswd->changeMasterPassword( Reference< task::XInteractionHandler >() );
}
catch( Exception& )
{}
return 0;
}
IMPL_LINK( SvxSecurityTabPage, MasterPasswordCBHdl, void*, EMPTYARG )
{
try
{
Reference< task::XMasterPasswordHandling2 > xMasterPasswd(
comphelper::getProcessServiceFactory()->createInstance(
rtl::OUString( RTL_CONSTASCII_USTRINGPARAM ( "com.sun.star.task.PasswordContainer" ) ) ),
UNO_QUERY_THROW );
if ( maMasterPasswordCB.IsChecked() )
{
if ( xMasterPasswd->isPersistentStoringAllowed() && xMasterPasswd->changeMasterPassword( Reference< task::XInteractionHandler >() ) )
{
maMasterPasswordPB.Enable( sal_True );
maMasterPasswordFI.Enable( sal_True );
}
else
{
maMasterPasswordCB.Check( sal_False );
maMasterPasswordPB.Enable( sal_True );
maMasterPasswordFI.Enable( sal_True );
}
}
else
{
if ( xMasterPasswd->isPersistentStoringAllowed() && xMasterPasswd->useDefaultMasterPassword( Reference< task::XInteractionHandler >() ) )
{
maMasterPasswordPB.Enable( sal_False );
maMasterPasswordFI.Enable( sal_False );
}
else
{
maMasterPasswordCB.Check( sal_True );
maMasterPasswordPB.Enable( sal_True );
maShowConnectionsPB.Enable( sal_True );
}
}
}
catch( Exception& )
{
maSavePasswordsCB.Check( !maSavePasswordsCB.IsChecked() );
}
return 0;
}
IMPL_LINK( SvxSecurityTabPage, ShowPasswordsHdl, PushButton*, EMPTYARG )
{
try
{
Reference< task::XMasterPasswordHandling > xMasterPasswd(
comphelper::getProcessServiceFactory()->createInstance(
rtl::OUString( RTL_CONSTASCII_USTRINGPARAM ( "com.sun.star.task.PasswordContainer" ) ) ),
UNO_QUERY );
if ( xMasterPasswd.is() && xMasterPasswd->isPersistentStoringAllowed() && xMasterPasswd->authorizateWithMasterPassword( Reference< task::XInteractionHandler>() ) )
{
svx::WebConnectionInfoDialog aDlg( this );
aDlg.Execute();
}
}
catch( Exception& )
{}
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;
}
void SvxSecurityTabPage::InitControls()
{
// 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();
}
// one button too small for its text?
sal_Int32 i = 0;
long nBtnTextWidth = 0;
Window* pButtons[] = { &maSecurityOptionsPB, &maMasterPasswordPB,
&maShowConnectionsPB, &maMacroSecPB };
Window** pButton = pButtons;
const sal_Int32 nBCount = sizeof( pButtons ) / sizeof( pButtons[ 0 ] );
for ( ; i < nBCount; ++i, ++pButton )
{
long nTemp = (*pButton)->GetCtrlTextWidth( (*pButton)->GetText() );
if ( nTemp > nBtnTextWidth )
nBtnTextWidth = nTemp;
}
nBtnTextWidth = nBtnTextWidth * 115 / 100; // a little offset
const long nButtonWidth = maSecurityOptionsPB.GetSizePixel().Width();
const long nMaxWidth = nButtonWidth * 140 / 100;
long nExtra = ( nBtnTextWidth > nMaxWidth ) ? nBtnTextWidth - nMaxWidth : 0;
nBtnTextWidth = std::min( nBtnTextWidth, nMaxWidth );
if ( nBtnTextWidth > nButtonWidth )
{
// so make the buttons broader and its control in front of it smaller
long nDelta = nBtnTextWidth - nButtonWidth;
pButton = pButtons;
if ( nExtra > 0 )
{
long nPos = (*pButton)->GetPosPixel().X() - nDelta;
long nWidth = (*pButton)->GetSizePixel().Width() + nDelta;
long nMaxExtra = GetOutputSizePixel().Width() - ( nPos + nWidth ) - 2;
nExtra = ( nExtra < nMaxExtra ) ? nExtra : nMaxExtra;
}
for ( i = 0; i < nBCount; ++i, ++pButton )
{
Point aNewPos = (*pButton)->GetPosPixel();
aNewPos.X() -= nDelta;
Size aNewSize = (*pButton)->GetSizePixel();
aNewSize.Width() += ( nDelta + nExtra );
(*pButton)->SetPosSizePixel( aNewPos, aNewSize );
}
Window* pControls[] = { &maSecurityOptionsFI, &maSavePasswordsCB,
&maMasterPasswordFI, &maMacroSecFI };
Window** pControl = pControls;
const sal_Int32 nCCount = sizeof( pControls ) / sizeof( pControls[ 0 ] );
for ( i = 0; i < nCCount; ++i, ++pControl )
{
Size aNewSize = (*pControl)->GetSizePixel();
aNewSize.Width() -= nDelta;
(*pControl)->SetSizePixel( aNewSize );
}
}
maMasterPasswordPB.Enable( sal_False );
maMasterPasswordCB.Enable( sal_False );
maMasterPasswordCB.Check( sal_True );
maMasterPasswordFI.Enable( sal_False );
maShowConnectionsPB.Enable( sal_False );
// initialize the password saving checkbox
try
{
Reference< task::XMasterPasswordHandling > xMasterPasswd(
comphelper::getProcessServiceFactory()->createInstance(
rtl::OUString( RTL_CONSTASCII_USTRINGPARAM ( "com.sun.star.task.PasswordContainer" ) ) ),
UNO_QUERY_THROW );
if ( xMasterPasswd->isPersistentStoringAllowed() )
{
maMasterPasswordCB.Enable( sal_True );
maShowConnectionsPB.Enable( sal_True );
maSavePasswordsCB.Check( sal_True );
Reference< task::XMasterPasswordHandling2 > xMasterPasswd2( xMasterPasswd, UNO_QUERY );
if ( xMasterPasswd2.is() && xMasterPasswd2->isDefaultMasterPasswordUsed() )
maMasterPasswordCB.Check( sal_False );
else
{
maMasterPasswordPB.Enable( sal_True );
maMasterPasswordCB.Check( sal_True );
maMasterPasswordFI.Enable( sal_True );
}
}
}
catch( Exception& )
{
maSavePasswordsCB.Enable( sal_False );
}
}
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 CheckAndSave( SvtSecurityOptions& _rOpt, SvtSecurityOptions::EOption _eOpt, const bool _bIsChecked, bool& _rModfied )
{
bool bModified = false;
if ( _rOpt.IsOptionEnabled( _eOpt ) )
{
bModified = _rOpt.IsOptionSet( _eOpt ) != _bIsChecked;
if ( bModified )
{
_rOpt.SetOption( _eOpt, _bIsChecked );
_rModfied = true;
}
}
return bModified;
}
}
sal_Bool SvxSecurityTabPage::FillItemSet( SfxItemSet& )
{
bool bModified = false;
if ( mpSecOptDlg )
{
CheckAndSave( *mpSecOptions, SvtSecurityOptions::E_DOCWARN_SAVEORSEND, mpSecOptDlg->IsSaveOrSendDocsChecked(), bModified );
CheckAndSave( *mpSecOptions, SvtSecurityOptions::E_DOCWARN_SIGNING, mpSecOptDlg->IsSignDocsChecked(), bModified );
CheckAndSave( *mpSecOptions, SvtSecurityOptions::E_DOCWARN_PRINT, mpSecOptDlg->IsPrintDocsChecked(), bModified );
CheckAndSave( *mpSecOptions, SvtSecurityOptions::E_DOCWARN_CREATEPDF, mpSecOptDlg->IsCreatePdfChecked(), bModified );
CheckAndSave( *mpSecOptions, SvtSecurityOptions::E_DOCWARN_REMOVEPERSONALINFO, mpSecOptDlg->IsRemovePersInfoChecked(), bModified );
CheckAndSave( *mpSecOptions, SvtSecurityOptions::E_DOCWARN_RECOMMENDPASSWORD, mpSecOptDlg->IsRecommPasswdChecked(), bModified );
CheckAndSave( *mpSecOptions, SvtSecurityOptions::E_CTRLCLICK_HYPERLINK, mpSecOptDlg->IsCtrlHyperlinkChecked(), bModified );
}
return bModified;
}
/*--------------------------------------------------------------------*/
void SvxSecurityTabPage::Reset( const SfxItemSet& )
{
SfxObjectShell* pCurDocShell = SfxObjectShell::Current();
if( pCurDocShell )
{
}
}
/* -------------------------------------------------------------------------*/
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();
virtual void Notify( const com::sun::star::uno::Sequence< rtl::OUString >& _rPropertyNames);
};
/* -------------------------------------------------------------------------*/
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);
}
void MailerProgramCfg_Impl::Notify( const com::sun::star::uno::Sequence< rtl::OUString >& )
{
}
/* -------------------------------------------------------------------------*/
struct SvxEMailTabPage_Impl
{
MailerProgramCfg_Impl aMailConfig;
};
SvxEMailTabPage::SvxEMailTabPage(Window* pParent, const SfxItemSet& rSet) :
SfxTabPage(pParent, CUI_RES( RID_SVXPAGE_INET_MAIL ), rSet),
aMailFL(this, CUI_RES(FL_MAIL )),
aMailerURLFI(this, CUI_RES(FI_MAILERURL )),
aMailerURLFT(this, CUI_RES(FT_MAILERURL )),
aMailerURLED(this, CUI_RES(ED_MAILERURL )),
aMailerURLPB(this, CUI_RES(PB_MAILERURL )),
m_sDefaultFilterName( CUI_RES(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);
}
/* -------------------------------------------------------------------------*/
sal_Bool SvxEMailTabPage::FillItemSet( SfxItemSet& )
{
sal_Bool bMailModified = sal_False;
if(!pImpl->aMailConfig.bROProgram && aMailerURLED.GetSavedValue() != aMailerURLED.GetText())
{
pImpl->aMailConfig.sProgram = aMailerURLED.GetText();
bMailModified = sal_True;
}
if ( bMailModified )
pImpl->aMailConfig.Commit();
return sal_False;
}
/* -------------------------------------------------------------------------*/
void SvxEMailTabPage::Reset( const SfxItemSet& )
{
aMailerURLED.Enable(sal_True );
aMailerURLPB.Enable(sal_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;
}
// -----------------------------------------------------------------------------