Files
libreoffice/svx/source/form/fmexpl.cxx

806 lines
24 KiB
C++
Raw Normal View History

2000-09-18 16:07:07 +00:00
/*************************************************************************
*
* OpenOffice.org - a multi-platform office productivity suite
2000-09-18 16:07:07 +00:00
*
* $RCSfile: fmexpl.cxx,v $
2000-09-18 16:07:07 +00:00
*
* $Revision: 1.37 $
2000-09-18 16:07:07 +00:00
*
* last change: $Author: hr $ $Date: 2007-06-27 18:12:20 $
2000-09-18 16:07:07 +00:00
*
* The Contents of this file are made available subject to
* the terms of GNU Lesser General Public License Version 2.1.
2000-09-18 16:07:07 +00:00
*
*
* GNU Lesser General Public License Version 2.1
* =============================================
* Copyright 2005 by Sun Microsystems, Inc.
* 901 San Antonio Road, Palo Alto, CA 94303, USA
2000-09-18 16:07:07 +00:00
*
* 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.
2000-09-18 16:07:07 +00:00
*
* 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.
2000-09-18 16:07:07 +00:00
*
* 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
2000-09-18 16:07:07 +00:00
*
************************************************************************/
// MARKER(update_precomp.py): autogen include statement, do not remove
#include "precompiled_svx.hxx"
2000-09-18 16:07:07 +00:00
#ifndef _SVX_FMUNOVW_HXX
#include "fmvwimp.hxx"
#endif
#ifndef _SVX_FMRESIDS_HRC
#include "fmresids.hrc"
#endif
#ifndef _SVX_FMEXPL_HRC
#include "fmexpl.hrc"
#endif
#ifndef _SVX_FMEXPL_HXX
#include "fmexpl.hxx"
#endif
#ifndef _SVX_FMHELP_HRC
#include "fmhelp.hrc"
#endif
#ifndef _SVX_FMGLOB_HXX
#include <svx/fmglob.hxx>
2000-09-18 16:07:07 +00:00
#endif
#ifndef _SVX_FMSERVS_HXX
#include "fmservs.hxx"
#endif
#ifndef _SVX_FMMODEL_HXX
#include <svx/fmmodel.hxx>
2000-09-18 16:07:07 +00:00
#endif
#ifndef _SVX_FMEXCH_HXX
#include "fmexch.hxx"
#endif
#ifndef _SVX_FMUNDO_HXX
#include "fmundo.hxx"
#endif
#ifndef _SVX_FMUNOPGE_HXX
#include "fmpgeimp.hxx"
#endif
#ifndef _SVX_SVXIDS_HRC
#include <svx/svxids.hrc>
2000-09-18 16:07:07 +00:00
#endif
#ifndef _SVX_FMPROP_HRC
#include "fmprop.hrc"
#endif
#ifndef _SVX_DIALMGR_HXX //autogen
#include <svx/dialmgr.hxx>
2000-09-18 16:07:07 +00:00
#endif
#ifndef _SVDITER_HXX //autogen
#include "svditer.hxx"
#endif
#ifndef _SVDOUNO_HXX
#include <svx/svdouno.hxx>
2000-09-18 16:07:07 +00:00
#endif
#ifndef _SVX_FMUNDO_HXX
#include <fmundo.hxx>
#endif
#ifndef _SVDOBJ_HXX
#include <svx/svdobj.hxx>
2000-09-18 16:07:07 +00:00
#endif
#ifndef _SV_MSGBOX_HXX //autogen
#include <vcl/msgbox.hxx>
#endif
#ifndef _SFXDISPATCH_HXX //autogen
#include <sfx2/dispatch.hxx>
#endif
#ifndef _SFX_OBJSH_HXX //autogen
#include <sfx2/objsh.hxx>
#endif
#ifndef _SFXVIEWSH_HXX
#include <sfx2/viewsh.hxx>
#endif
#ifndef _SFXVIEWFRM_HXX
#include <sfx2/viewfrm.hxx>
#endif
2000-09-18 16:07:07 +00:00
#ifndef _COM_SUN_STAR_LANG_XSERVICEINFO_HPP_
#include <com/sun/star/lang/XServiceInfo.hpp>
#endif
#ifndef _COM_SUN_STAR_FORM_FORMCOMPONENTTYPE_HPP_
#include <com/sun/star/form/FormComponentType.hpp>
#endif
#ifndef _COM_SUN_STAR_AWT_XTABCONTROLLERMODEL_HPP_
#include <com/sun/star/awt/XTabControllerModel.hpp>
#endif
#ifndef _SV_MENU_HXX //autogen
#include <vcl/menu.hxx>
#endif
#ifndef _SFX_OBJITEM_HXX //autogen
#include <sfx2/objitem.hxx>
#endif
#ifndef _SFXREQUEST_HXX
#include <sfx2/request.hxx>
#endif
#ifndef _SHL_HXX
#include <tools/shl.hxx>
#endif
#ifndef _WRKWIN_HXX //autogen
#include <vcl/wrkwin.hxx>
#endif
#ifndef _SV_SOUND_HXX //autogen
#include <vcl/sound.hxx>
#endif
#ifndef _SVX_FMSHELL_HXX
#include <svx/fmshell.hxx>
2000-09-18 16:07:07 +00:00
#endif
#ifndef _SVX_FMSHIMP_HXX
#include "fmshimp.hxx"
#endif
#ifndef _SVX_FMPAGE_HXX
#include <svx/fmpage.hxx>
2000-09-18 16:07:07 +00:00
#endif
#ifndef _COM_SUN_STAR_IO_XPERSISTOBJECT_HPP_
#include <com/sun/star/io/XPersistObject.hpp>
#endif
#ifndef _COM_SUN_STAR_SCRIPT_XEVENTATTACHERMANAGER_HPP_
#include <com/sun/star/script/XEventAttacherManager.hpp>
#endif
#ifndef _COM_SUN_STAR_SDB_COMMANDTYPE_HPP_
#include <com/sun/star/sdb/CommandType.hpp>
#endif
#ifndef _COM_SUN_STAR_BEANS_PROPERTYATTRIBUTE_HPP_
#include <com/sun/star/beans/PropertyAttribute.hpp>
#endif
2000-10-20 13:18:57 +00:00
#ifndef _COMPHELPER_PROPERTY_HXX_
#include <comphelper/property.hxx>
2000-09-18 16:07:07 +00:00
#endif
2000-10-20 13:18:57 +00:00
#ifndef _COMPHELPER_PROCESSFACTORY_HXX_
#include <comphelper/processfactory.hxx>
2000-09-18 16:07:07 +00:00
#endif
2001-04-09 10:19:35 +00:00
#ifndef _OSL_DIAGNOSE_H_
#include <osl/diagnose.h>
#endif
2000-09-18 16:07:07 +00:00
using namespace ::svxform;
2001-04-09 10:19:35 +00:00
using namespace ::com::sun::star::uno;
using namespace ::com::sun::star::sdbc;
using namespace ::com::sun::star::sdb;
using namespace ::com::sun::star::form;
using namespace ::com::sun::star::beans;
using namespace ::com::sun::star::lang;
using namespace ::com::sun::star::container;
2000-09-18 16:07:07 +00:00
//========================================================================
SV_IMPL_PTRARR_SORT( FmEntryDataArray, FmEntryDataPtr )
SV_IMPL_PTRARR_SORT( SvLBoxEntrySortedArray, SvLBoxEntryPtr )
//========================================================================
// class FmNavInsertedHint
2000-09-18 16:07:07 +00:00
//========================================================================
TYPEINIT1( FmNavInsertedHint, SfxHint );
DBG_NAME(FmNavInsertedHint);
2000-09-18 16:07:07 +00:00
//------------------------------------------------------------------------
FmNavInsertedHint::FmNavInsertedHint( FmEntryData* pInsertedEntryData, sal_uInt32 nRelPos )
2000-09-18 16:07:07 +00:00
:pEntryData( pInsertedEntryData )
,nPos( nRelPos )
{
DBG_CTOR(FmNavInsertedHint,NULL);
2000-09-18 16:07:07 +00:00
}
//------------------------------------------------------------------------
FmNavInsertedHint::~FmNavInsertedHint()
2000-09-18 16:07:07 +00:00
{
DBG_DTOR(FmNavInsertedHint,NULL);
2000-09-18 16:07:07 +00:00
}
//========================================================================
// class FmNavInsertedHint
2000-09-18 16:07:07 +00:00
//========================================================================
TYPEINIT1( FmNavModelReplacedHint, SfxHint );
DBG_NAME(FmNavModelReplacedHint);
2000-09-18 16:07:07 +00:00
//------------------------------------------------------------------------
FmNavModelReplacedHint::FmNavModelReplacedHint( FmEntryData* pAffectedEntryData )
2000-09-18 16:07:07 +00:00
:pEntryData( pAffectedEntryData )
{
DBG_CTOR(FmNavModelReplacedHint,NULL);
2000-09-18 16:07:07 +00:00
}
//------------------------------------------------------------------------
FmNavModelReplacedHint::~FmNavModelReplacedHint()
2000-09-18 16:07:07 +00:00
{
DBG_DTOR(FmNavModelReplacedHint,NULL);
2000-09-18 16:07:07 +00:00
}
//========================================================================
// class FmNavRemovedHint
2000-09-18 16:07:07 +00:00
//========================================================================
TYPEINIT1( FmNavRemovedHint, SfxHint );
DBG_NAME(FmNavRemovedHint);
2000-09-18 16:07:07 +00:00
//------------------------------------------------------------------------
FmNavRemovedHint::FmNavRemovedHint( FmEntryData* pRemovedEntryData )
2000-09-18 16:07:07 +00:00
:pEntryData( pRemovedEntryData )
{
DBG_CTOR(FmNavRemovedHint,NULL);
2000-09-18 16:07:07 +00:00
}
//------------------------------------------------------------------------
FmNavRemovedHint::~FmNavRemovedHint()
2000-09-18 16:07:07 +00:00
{
DBG_DTOR(FmNavRemovedHint,NULL);
2000-09-18 16:07:07 +00:00
}
//========================================================================
// class FmNavNameChangedHint
2000-09-18 16:07:07 +00:00
//========================================================================
TYPEINIT1( FmNavNameChangedHint, SfxHint );
DBG_NAME(FmNavNameChangedHint);
2000-09-18 16:07:07 +00:00
//------------------------------------------------------------------------
FmNavNameChangedHint::FmNavNameChangedHint( FmEntryData* pData, const ::rtl::OUString& rNewName )
2000-09-18 16:07:07 +00:00
:pEntryData( pData )
,aNewName( rNewName )
{
DBG_CTOR(FmNavNameChangedHint,NULL);
2000-09-18 16:07:07 +00:00
}
//------------------------------------------------------------------------
FmNavNameChangedHint::~FmNavNameChangedHint()
2000-09-18 16:07:07 +00:00
{
DBG_DTOR(FmNavNameChangedHint,NULL);
2000-09-18 16:07:07 +00:00
}
//========================================================================
// class FmNavClearedHint
2000-09-18 16:07:07 +00:00
//========================================================================
TYPEINIT1( FmNavClearedHint, SfxHint );
DBG_NAME(FmNavClearedHint);
2000-09-18 16:07:07 +00:00
//------------------------------------------------------------------------
FmNavClearedHint::FmNavClearedHint()
2000-09-18 16:07:07 +00:00
{
DBG_CTOR(FmNavClearedHint,NULL);
2000-09-18 16:07:07 +00:00
}
//------------------------------------------------------------------------
FmNavClearedHint::~FmNavClearedHint()
2000-09-18 16:07:07 +00:00
{
DBG_DTOR(FmNavClearedHint,NULL);
2000-09-18 16:07:07 +00:00
}
//========================================================================
// class FmNavRequestSelectHint
2000-09-18 16:07:07 +00:00
//========================================================================
TYPEINIT1(FmNavRequestSelectHint, SfxHint);
2000-09-18 16:07:07 +00:00
//========================================================================
// class FmNavViewMarksChanged
2000-09-18 16:07:07 +00:00
//========================================================================
TYPEINIT1(FmNavViewMarksChanged, SfxHint);
2000-09-18 16:07:07 +00:00
//========================================================================
// class FmEntryDataList
//========================================================================
DBG_NAME(FmEntryDataList);
//------------------------------------------------------------------------
FmEntryDataList::FmEntryDataList()
{
DBG_CTOR(FmEntryDataList,NULL);
}
//------------------------------------------------------------------------
FmEntryDataList::~FmEntryDataList()
{
DBG_DTOR(FmEntryDataList,NULL);
}
//========================================================================
// class FmEntryData
//========================================================================
TYPEINIT0( FmEntryData );
DBG_NAME(FmEntryData);
//------------------------------------------------------------------------
FmEntryData::FmEntryData( FmEntryData* pParentData, const Reference< XInterface >& _rxIFace )
2000-09-18 16:07:07 +00:00
:pParent( pParentData )
{
DBG_CTOR(FmEntryData,NULL);
pChildList = new FmEntryDataList();
newObject( _rxIFace );
2000-09-18 16:07:07 +00:00
}
//------------------------------------------------------------------------
FmEntryData::~FmEntryData()
{
Clear();
delete pChildList;
DBG_DTOR(FmEntryData,NULL);
}
//------------------------------------------------------------------------
void FmEntryData::newObject( const ::com::sun::star::uno::Reference< ::com::sun::star::uno::XInterface >& _rxIFace )
{
// do not just copy, normalize it
m_xNormalizedIFace = Reference< XInterface >( _rxIFace, UNO_QUERY );
m_xProperties = m_xProperties.query( m_xNormalizedIFace );
m_xChild = m_xChild.query( m_xNormalizedIFace );
}
2000-09-18 16:07:07 +00:00
//------------------------------------------------------------------------
FmEntryData::FmEntryData( const FmEntryData& rEntryData )
{
pChildList = new FmEntryDataList();
aText = rEntryData.GetText();
2002-05-17 07:41:57 +00:00
m_aNormalImage = rEntryData.GetNormalImage();
m_aHCImage = rEntryData.GetHCImage();
2000-09-18 16:07:07 +00:00
pParent = rEntryData.GetParent();
FmEntryData* pChildData;
sal_uInt32 nEntryCount = rEntryData.GetChildList()->Count();
for( sal_uInt32 i=0; i<nEntryCount; i++ )
{
pChildData = rEntryData.GetChildList()->GetObject(i);
FmEntryData* pNewChildData = pChildData->Clone();
pChildList->Insert( pNewChildData, LIST_APPEND );
}
m_xNormalizedIFace = rEntryData.m_xNormalizedIFace;
m_xProperties = rEntryData.m_xProperties;
m_xChild = rEntryData.m_xChild;
2000-09-18 16:07:07 +00:00
}
//------------------------------------------------------------------------
void FmEntryData::Clear()
{
for (;;)
{
FmEntryData* pEntryData = GetChildList()->Remove(ULONG(0));
if (pEntryData == NULL)
break;
2000-09-18 16:07:07 +00:00
delete pEntryData;
}
2000-09-18 16:07:07 +00:00
}
//------------------------------------------------------------------------
sal_Bool FmEntryData::IsEqualWithoutChilds( FmEntryData* pEntryData )
{
if(this == pEntryData)
return sal_True;
if( !pEntryData )
return sal_False;
if( !aText.equals(pEntryData->GetText()))
return sal_False;
if( !pEntryData->GetParent() && pParent )
return sal_False;
if( pEntryData->GetParent() && !pParent )
return sal_False;
if( !pEntryData->GetParent() && !pParent )
return sal_True;
if( !pParent->IsEqualWithoutChilds(pEntryData->GetParent()) )
return sal_False;
return sal_True;
}
//========================================================================
// class FmFormData
//========================================================================
TYPEINIT1( FmFormData, FmEntryData );
DBG_NAME(FmFormData);
//------------------------------------------------------------------------
2002-05-17 07:41:57 +00:00
FmFormData::FmFormData( const Reference< XForm >& _rxForm, const ImageList& _rNormalImages, const ImageList& _rHCImages, FmFormData* _pParent )
:FmEntryData( _pParent, _rxForm )
2002-05-17 07:41:57 +00:00
,m_xForm( _rxForm )
2000-09-18 16:07:07 +00:00
{
DBG_CTOR(FmEntryData,NULL);
//////////////////////////////////////////////////////////////////////
// Images setzen
2002-05-17 07:41:57 +00:00
m_aNormalImage = _rNormalImages.GetImage( RID_SVXIMG_FORM );
m_aHCImage = _rHCImages.GetImage( RID_SVXIMG_FORM );
2000-09-18 16:07:07 +00:00
//////////////////////////////////////////////////////////////////////
// Titel setzen
if (m_xForm.is())
{
Reference< XPropertySet > xSet(m_xForm, UNO_QUERY);
2000-09-18 16:07:07 +00:00
if (xSet.is())
{
2000-10-20 13:18:57 +00:00
::rtl::OUString aEntryName(::comphelper::getString(xSet->getPropertyValue( FM_PROP_NAME )));
2000-09-18 16:07:07 +00:00
SetText(aEntryName);
}
}
else
SetText( ::rtl::OUString() );
}
//------------------------------------------------------------------------
FmFormData::~FmFormData()
{
DBG_DTOR(FmEntryData,NULL);
}
//------------------------------------------------------------------------
FmFormData::FmFormData( const FmFormData& rFormData )
:FmEntryData( rFormData )
{
DBG_CTOR(FmEntryData,NULL);
m_xForm = rFormData.GetFormIface();
}
//------------------------------------------------------------------------
FmEntryData* FmFormData::Clone()
{
return new FmFormData( *this );
}
//------------------------------------------------------------------------
sal_Bool FmFormData::IsEqualWithoutChilds( FmEntryData* pEntryData )
{
if(this == pEntryData)
return sal_True;
if( !pEntryData->ISA(FmFormData) )
return sal_False;
FmFormData* pFormData = (FmFormData*)pEntryData;
if( (XForm*)m_xForm.get() != (XForm*)pFormData->GetFormIface().get() )
2000-09-18 16:07:07 +00:00
return sal_False;
return FmEntryData::IsEqualWithoutChilds( pFormData );
}
//========================================================================
// class FmControlData
//========================================================================
TYPEINIT1( FmControlData, FmEntryData );
DBG_NAME(FmControlData);
//------------------------------------------------------------------------
2002-05-17 07:41:57 +00:00
FmControlData::FmControlData( const Reference< XFormComponent >& _rxComponent, const ImageList& _rNormalImages, const ImageList& _rHCImages, FmFormData* _pParent )
:FmEntryData( _pParent, _rxComponent )
2002-05-17 07:41:57 +00:00
,m_xFormComponent( _rxComponent )
2000-09-18 16:07:07 +00:00
{
DBG_CTOR(FmControlData,NULL);
//////////////////////////////////////////////////////////////////////
// Images setzen
2002-05-17 07:41:57 +00:00
m_aNormalImage = GetImage( _rNormalImages );
m_aHCImage = GetImage( _rHCImages );
2000-09-18 16:07:07 +00:00
//////////////////////////////////////////////////////////////////////
// Titel setzen
Reference< XPropertySet > xSet(m_xFormComponent, UNO_QUERY);
2000-09-18 16:07:07 +00:00
if( xSet.is() )
{
#ifdef DBG_UTIL
2000-10-20 13:18:57 +00:00
::rtl::OUString aEntryName = ::comphelper::getString(xSet->getPropertyValue( FM_PROP_NAME ));
2000-09-18 16:07:07 +00:00
#endif
2000-10-20 13:18:57 +00:00
SetText( ::comphelper::getString(xSet->getPropertyValue( FM_PROP_NAME )));
2000-09-18 16:07:07 +00:00
}
}
//------------------------------------------------------------------------
FmControlData::~FmControlData()
{
DBG_DTOR(FmControlData,NULL);
}
//------------------------------------------------------------------------
FmControlData::FmControlData( const FmControlData& rControlData )
:FmEntryData( rControlData )
{
DBG_CTOR(FmControlData,NULL);
m_xFormComponent = rControlData.GetFormComponent();
}
//------------------------------------------------------------------------
FmEntryData* FmControlData::Clone()
{
return new FmControlData( *this );
}
//------------------------------------------------------------------------
Image FmControlData::GetImage(const ImageList& ilNavigatorImages) const
{
//////////////////////////////////////////////////////////////////////
// Default-Image
Image aImage = ilNavigatorImages.GetImage( RID_SVXIMG_CONTROL );
Reference< XServiceInfo > xInfo( m_xFormComponent, UNO_QUERY );
if (!m_xFormComponent.is())
2000-09-18 16:07:07 +00:00
return aImage;
//////////////////////////////////////////////////////////////////////
// Spezielle Control-Images
sal_Int16 nObjectType = getControlTypeByObject(xInfo);
switch (nObjectType)
{
case OBJ_FM_BUTTON:
aImage = ilNavigatorImages.GetImage( RID_SVXIMG_BUTTON );
break;
case OBJ_FM_FIXEDTEXT:
aImage = ilNavigatorImages.GetImage( RID_SVXIMG_FIXEDTEXT );
break;
case OBJ_FM_EDIT:
aImage = ilNavigatorImages.GetImage( RID_SVXIMG_EDIT );
break;
case OBJ_FM_RADIOBUTTON:
aImage = ilNavigatorImages.GetImage( RID_SVXIMG_RADIOBUTTON );
break;
case OBJ_FM_CHECKBOX:
aImage = ilNavigatorImages.GetImage( RID_SVXIMG_CHECKBOX );
break;
case OBJ_FM_LISTBOX:
aImage = ilNavigatorImages.GetImage( RID_SVXIMG_LISTBOX );
break;
case OBJ_FM_COMBOBOX:
aImage = ilNavigatorImages.GetImage( RID_SVXIMG_COMBOBOX );
break;
case OBJ_FM_NAVIGATIONBAR:
aImage = ilNavigatorImages.GetImage( RID_SVXIMG_NAVIGATIONBAR );
break;
2000-09-18 16:07:07 +00:00
case OBJ_FM_GROUPBOX:
aImage = ilNavigatorImages.GetImage( RID_SVXIMG_GROUPBOX );
break;
case OBJ_FM_IMAGEBUTTON:
aImage = ilNavigatorImages.GetImage( RID_SVXIMG_IMAGEBUTTON );
break;
case OBJ_FM_FILECONTROL:
aImage = ilNavigatorImages.GetImage( RID_SVXIMG_FILECONTROL );
break;
case OBJ_FM_HIDDEN:
aImage = ilNavigatorImages.GetImage( RID_SVXIMG_HIDDEN );
break;
case OBJ_FM_DATEFIELD:
aImage = ilNavigatorImages.GetImage( RID_SVXIMG_DATEFIELD );
break;
case OBJ_FM_TIMEFIELD:
aImage = ilNavigatorImages.GetImage( RID_SVXIMG_TIMEFIELD );
break;
case OBJ_FM_NUMERICFIELD:
aImage = ilNavigatorImages.GetImage( RID_SVXIMG_NUMERICFIELD );
break;
case OBJ_FM_CURRENCYFIELD:
aImage = ilNavigatorImages.GetImage( RID_SVXIMG_CURRENCYFIELD );
break;
case OBJ_FM_PATTERNFIELD:
aImage = ilNavigatorImages.GetImage( RID_SVXIMG_PATTERNFIELD );
break;
case OBJ_FM_IMAGECONTROL:
aImage = ilNavigatorImages.GetImage( RID_SVXIMG_IMAGECONTROL );
break;
case OBJ_FM_FORMATTEDFIELD:
aImage = ilNavigatorImages.GetImage( RID_SVXIMG_FORMATTEDFIELD );
break;
case OBJ_FM_GRID:
aImage = ilNavigatorImages.GetImage( RID_SVXIMG_GRID );
break;
case OBJ_FM_SCROLLBAR:
aImage = ilNavigatorImages.GetImage( RID_SVXIMG_SCROLLBAR );
break;
case OBJ_FM_SPINBUTTON:
aImage = ilNavigatorImages.GetImage( RID_SVXIMG_SPINBUTTON);
break;
2000-09-18 16:07:07 +00:00
}
return aImage;
}
//------------------------------------------------------------------------
sal_Bool FmControlData::IsEqualWithoutChilds( FmEntryData* pEntryData )
{
if(this == pEntryData)
return sal_True;
if( !pEntryData->ISA(FmControlData) )
return sal_False;
FmControlData* pControlData = (FmControlData*)pEntryData;
if( (XFormComponent*)m_xFormComponent.get() != (XFormComponent*)pControlData->GetFormComponent().get() )
2000-09-18 16:07:07 +00:00
return sal_False;
return FmEntryData::IsEqualWithoutChilds( pControlData );
}
//------------------------------------------------------------------------
2002-05-17 07:41:57 +00:00
void FmControlData::ModelReplaced( const Reference< XFormComponent >& _rxNew, const ImageList& _rNormalImages, const ImageList& _rHCImages )
2000-09-18 16:07:07 +00:00
{
2002-05-17 07:41:57 +00:00
m_xFormComponent = _rxNew;
newObject( m_xFormComponent );
2000-09-18 16:07:07 +00:00
// Images neu setzen
2002-05-17 07:41:57 +00:00
m_aNormalImage = GetImage( _rNormalImages );
m_aHCImage = GetImage( _rHCImages );
2000-09-18 16:07:07 +00:00
}
//............................................................................
namespace svxform
2000-09-18 16:07:07 +00:00
{
//............................................................................
2000-09-18 16:07:07 +00:00
//========================================================================
// class NavigatorFrame
//========================================================================
2002-05-15 07:11:57 +00:00
DBG_NAME(NavigatorFrame)
//------------------------------------------------------------------------
NavigatorFrame::NavigatorFrame( SfxBindings* _pBindings, SfxChildWindow* _pMgr,
Window* _pParent )
:SfxDockingWindow( _pBindings, _pMgr, _pParent, WinBits(WB_STDMODELESS|WB_SIZEABLE|WB_ROLLABLE|WB_3DLOOK|WB_DOCKABLE) )
,SfxControllerItem( SID_FM_FMEXPLORER_CONTROL, *_pBindings )
2000-09-18 16:07:07 +00:00
{
DBG_CTOR(NavigatorFrame,NULL);
SetHelpId( HID_FORM_NAVIGATOR_WIN );
2000-09-18 16:07:07 +00:00
m_pNavigatorTree = new NavigatorTree(comphelper::getProcessServiceFactory(), this );
m_pNavigatorTree->Show();
SetText( SVX_RES(RID_STR_FMEXPLORER) );
SfxDockingWindow::SetFloatingSize( Size(200,200) );
2000-09-18 16:07:07 +00:00
}
//------------------------------------------------------------------------
NavigatorFrame::~NavigatorFrame()
2000-09-18 16:07:07 +00:00
{
delete m_pNavigatorTree;
DBG_DTOR(NavigatorFrame,NULL);
2000-09-18 16:07:07 +00:00
}
//-----------------------------------------------------------------------
void NavigatorFrame::UpdateContent( FmFormShell* pFormShell )
2000-09-18 16:07:07 +00:00
{
m_pNavigatorTree->UpdateContent( pFormShell );
2000-09-18 16:07:07 +00:00
}
//-----------------------------------------------------------------------
void NavigatorFrame::StateChanged( sal_uInt16 nSID, SfxItemState eState, const SfxPoolItem* pState )
2000-09-18 16:07:07 +00:00
{
if( !pState || SID_FM_FMEXPLORER_CONTROL != nSID )
return;
2000-09-18 16:07:07 +00:00
if( eState >= SFX_ITEM_AVAILABLE )
2000-09-18 16:07:07 +00:00
{
FmFormShell* pShell = PTR_CAST( FmFormShell,((SfxObjectItem*)pState)->GetShell() );
UpdateContent( pShell );
2000-09-18 16:07:07 +00:00
}
else
UpdateContent( NULL );
2000-09-18 16:07:07 +00:00
}
//-----------------------------------------------------------------------
void NavigatorFrame::GetFocus()
2000-09-18 16:07:07 +00:00
{
if ( m_pNavigatorTree )
m_pNavigatorTree->GrabFocus();
else
SfxDockingWindow::GetFocus();
2000-09-18 16:07:07 +00:00
}
//-----------------------------------------------------------------------
sal_Bool NavigatorFrame::Close()
2000-09-18 16:07:07 +00:00
{
UpdateContent( NULL );
return SfxDockingWindow::Close();
2000-09-18 16:07:07 +00:00
}
//-----------------------------------------------------------------------
void NavigatorFrame::FillInfo( SfxChildWinInfo& rInfo ) const
2000-09-18 16:07:07 +00:00
{
SfxDockingWindow::FillInfo( rInfo );
rInfo.bVisible = sal_False;
2000-09-18 16:07:07 +00:00
}
//-----------------------------------------------------------------------
Size NavigatorFrame::CalcDockingSize( SfxChildAlignment eAlign )
2000-09-18 16:07:07 +00:00
{
if ( ( eAlign == SFX_ALIGN_TOP ) || ( eAlign == SFX_ALIGN_BOTTOM ) )
return Size();
2000-09-18 16:07:07 +00:00
return SfxDockingWindow::CalcDockingSize( eAlign );
2000-09-18 16:07:07 +00:00
}
//-----------------------------------------------------------------------
SfxChildAlignment NavigatorFrame::CheckAlignment( SfxChildAlignment _eActAlign, SfxChildAlignment _eAlign )
2000-09-18 16:07:07 +00:00
{
if ( ( _eAlign == SFX_ALIGN_LEFT ) || ( _eAlign == SFX_ALIGN_RIGHT ) || ( _eAlign == SFX_ALIGN_NOALIGNMENT ) )
return _eAlign;
return _eActAlign;
2000-09-18 16:07:07 +00:00
}
//------------------------------------------------------------------------
void NavigatorFrame::Resize()
2000-09-18 16:07:07 +00:00
{
SfxDockingWindow::Resize();
2000-09-18 16:07:07 +00:00
Size aLogOutputSize = PixelToLogic( GetOutputSizePixel(), MAP_APPFONT );
Size aLogExplSize = aLogOutputSize;
aLogExplSize.Width() -= 6;
aLogExplSize.Height() -= 6;
2000-09-18 16:07:07 +00:00
Point aExplPos = LogicToPixel( Point(3,3), MAP_APPFONT );
Size aExplSize = LogicToPixel( aLogExplSize, MAP_APPFONT );
2000-09-18 16:07:07 +00:00
m_pNavigatorTree->SetPosSizePixel( aExplPos, aExplSize );
2000-09-18 16:07:07 +00:00
}
//========================================================================
// class NavigatorFrameManager
//========================================================================
2000-09-18 16:07:07 +00:00
//-----------------------------------------------------------------------
SFX_IMPL_DOCKINGWINDOW( NavigatorFrameManager, SID_FM_SHOW_FMEXPLORER )
2000-09-18 16:07:07 +00:00
//-----------------------------------------------------------------------
NavigatorFrameManager::NavigatorFrameManager( Window* _pParent, sal_uInt16 _nId,
SfxBindings* _pBindings, SfxChildWinInfo* _pInfo )
:SfxChildWindow( _pParent, _nId )
2000-09-18 16:07:07 +00:00
{
pWindow = new NavigatorFrame( _pBindings, this, _pParent );
eChildAlignment = SFX_ALIGN_NOALIGNMENT;
((SfxDockingWindow*)pWindow)->Initialize( _pInfo );
2000-09-18 16:07:07 +00:00
}
//............................................................................
} // namespace svxform
//............................................................................