Files
libreoffice/basctl/source/dlged/dlgedobj.cxx

1532 lines
50 KiB
C++
Raw Normal View History

2001-02-26 09:47:06 +00:00
/*************************************************************************
*
* $RCSfile: dlgedobj.cxx,v $
*
* $Revision: 1.28 $
2001-02-26 09:47:06 +00:00
*
* last change: $Author: tbe $ $Date: 2002-04-24 14:51:10 $
2001-02-26 09:47:06 +00:00
*
* The Contents of this file are made available subject to the terms of
* either of the following licenses
*
* - GNU Lesser General Public License Version 2.1
* - Sun Industry Standards Source License Version 1.1
*
* Sun Microsystems Inc., October, 2000
*
* GNU Lesser General Public License Version 2.1
* =============================================
* Copyright 2000 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
*
*
* Sun Industry Standards Source License Version 1.1
* =================================================
* The contents of this file are subject to the Sun Industry Standards
* Source License Version 1.1 (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.openoffice.org/license.html.
*
* Software provided under this License is provided on an "AS IS" basis,
* WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING,
* WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS,
* MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING.
* See the License for the specific provisions governing your rights and
* obligations concerning the Software.
*
* The Initial Developer of the Original Code is: Sun Microsystems, Inc.
*
* Copyright: 2000 by Sun Microsystems, Inc.
*
* All Rights Reserved.
*
* Contributor(s): _______________________________________
*
*
************************************************************************/
2001-03-20 13:37:42 +00:00
#include <vector>
#include <algorithm>
2001-07-27 17:06:15 +00:00
#ifndef _BASCTL_DLGEDDEF_HXX
#include <dlgeddef.hxx>
#endif
2001-02-26 09:47:06 +00:00
#ifndef _BASCTL_DLGEDOBJ_HXX
#include "dlgedobj.hxx"
#endif
#ifndef _BASCTL_DLGED_HXX
#include "dlged.hxx"
#endif
#ifndef _BASCTL_DLGEDMOD_HXX
#include "dlgedmod.hxx"
#endif
#ifndef _BASCTL_DLGEDPAGE_HXX
#include "dlgedpage.hxx"
#endif
#ifndef _BASCTL_DLGEDVIEW_HXX
#include "dlgedview.hxx"
#endif
#ifndef _BASCTL_DLGEDLIST_HXX
#include "dlgedlist.hxx"
#endif
2001-03-23 15:16:45 +00:00
#ifndef _IDERID_HXX
#include <iderid.hxx>
#endif
#ifndef _BASCTL_DLGRESID_HRC
#include <dlgresid.hrc>
#endif
#ifndef _TOOLS_RESMGR_HXX
#include <tools/resmgr.hxx>
#endif
#ifndef _SVDIO_HXX //autogen
#include <svx/svdio.hxx>
#endif
#ifndef _SHL_HXX
#include <tools/shl.hxx>
#endif
#ifndef _COMPHELPER_PROCESSFACTORY_HXX_
#include <comphelper/processfactory.hxx>
#endif
2001-02-26 09:47:06 +00:00
#ifndef _COM_SUN_STAR_BEANS_XPROPERTYSET_HPP_
#include <com/sun/star/beans/XPropertySet.hpp>
#endif
2001-03-06 13:50:13 +00:00
#ifndef _COM_SUN_STAR_BEANS_PROPERTYATTRIBUTE_HPP_
#include <com/sun/star/beans/PropertyAttribute.hpp>
#endif
2001-03-12 10:31:43 +00:00
#ifndef _COM_SUN_STAR_SCRIPT_XSCRIPTEVENTSSUPPLIER_HPP_
#include <com/sun/star/script/XScriptEventsSupplier.hpp>
#endif
#ifndef _COM_SUN_STAR_CONTAINER_XCONTAINER_HPP_
#include <com/sun/star/container/XContainer.hpp>
#endif
2001-03-16 12:43:42 +00:00
#ifndef _COM_SUN_STAR_LANG_XSERVICEINFO_HPP_
#include <com/sun/star/lang/XServiceInfo.hpp>
#endif
2001-02-26 09:47:06 +00:00
using namespace ::com::sun::star;
using namespace ::com::sun::star::uno;
using namespace ::com::sun::star::beans;
2001-03-12 10:31:43 +00:00
using namespace ::com::sun::star::container;
using namespace ::com::sun::star::script;
2001-02-26 09:47:06 +00:00
using namespace ::rtl;
//----------------------------------------------------------------------------
2001-03-20 13:37:42 +00:00
// helper class for sorting by tabindex
class TabSortHelper
{
public:
::rtl::OUString name;
sal_Int16 tabindex;
bool operator<(const TabSortHelper& rComp) const { return tabindex < rComp.tabindex ? true : false; }
};
//----------------------------------------------------------------------------
2001-02-26 09:47:06 +00:00
TYPEINIT1(DlgEdObj, SdrUnoObj);
DBG_NAME(DlgEdObj);
//----------------------------------------------------------------------------
DlgEdObj::DlgEdObj()
:SdrUnoObj(String(), sal_False)
,bIsListening(sal_False)
{
DBG_CTOR(DlgEdObj, NULL);
}
//----------------------------------------------------------------------------
DlgEdObj::DlgEdObj(const ::rtl::OUString& rModelName)
:SdrUnoObj(rModelName, sal_False)
,bIsListening(sal_False)
{
DBG_CTOR(DlgEdObj, NULL);
}
//----------------------------------------------------------------------------
DlgEdObj::DlgEdObj(const ::rtl::OUString& rModelName,
const com::sun::star::uno::Reference< com::sun::star::lang::XMultiServiceFactory >& rxSFac)
:SdrUnoObj(rModelName, rxSFac, sal_False)
,bIsListening(sal_False)
{
DBG_CTOR(DlgEdObj, NULL);
}
//----------------------------------------------------------------------------
DlgEdObj::~DlgEdObj()
{
DBG_DTOR(DlgEdObj, NULL);
2001-03-12 10:31:43 +00:00
EndListening();
2001-02-26 09:47:06 +00:00
}
//----------------------------------------------------------------------------
void DlgEdObj::SetPage(SdrPage* _pNewPage)
{
// now set the page
SdrUnoObj::SetPage(_pNewPage);
}
//----------------------------------------------------------------------------
void DlgEdObj::SetRectFromProps()
{
// get property sets
Reference< beans::XPropertySet > xPSet( GetUnoControlModel(), UNO_QUERY );
Reference< beans::XPropertySet > xPSetForm( GetDlgEdForm()->GetUnoControlModel(), UNO_QUERY );
if (xPSet.is() && xPSetForm.is())
{
// get control position and size from properties
2001-02-26 09:47:06 +00:00
sal_Int32 nX, nY, nWidth, nHeight;
xPSet->getPropertyValue( ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "PositionX" ) ) ) >>= nX;
xPSet->getPropertyValue( ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "PositionY" ) ) ) >>= nY;
xPSet->getPropertyValue( ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "Width" ) ) ) >>= nWidth;
xPSet->getPropertyValue( ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "Height" ) ) ) >>= nHeight;
// get form position and size from properties
sal_Int32 nFormX, nFormY, nFormWidth, nFormHeight;
xPSetForm->getPropertyValue( ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "PositionX" ) ) ) >>= nFormX;
xPSetForm->getPropertyValue( ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "PositionY" ) ) ) >>= nFormY;
xPSetForm->getPropertyValue( ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "Width" ) ) ) >>= nFormWidth;
xPSetForm->getPropertyValue( ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "Height" ) ) ) >>= nFormHeight;
2001-02-26 09:47:06 +00:00
Size aPos( nX, nY );
Size aSize( nWidth, nHeight );
Size aFormPos( nFormX, nFormY );
Size aFormSize( nFormWidth, nFormHeight );
2001-02-26 09:47:06 +00:00
// convert logic units to pixel
2001-02-26 09:47:06 +00:00
OutputDevice* pDevice = Application::GetDefaultDevice();
DBG_ASSERT( pDevice, "Missing Default Device!" );
if( pDevice )
{
aPos = pDevice->LogicToPixel( aPos, MapMode(MAP_APPFONT) );
aSize = pDevice->LogicToPixel( aSize, MapMode(MAP_APPFONT) );
aFormPos = pDevice->LogicToPixel( aFormPos, MapMode(MAP_APPFONT) );
aFormSize = pDevice->LogicToPixel( aFormSize, MapMode(MAP_APPFONT) );
}
// take window borders into account
awt::DeviceInfo aDeviceInfo;
Window* pWindow = GetDlgEdForm()->GetDlgEditor()->GetWindow();
Reference< awt::XControl > xDlg( GetDlgEdForm()->GetUnoControl( pWindow ), UNO_QUERY );
if ( xDlg.is() )
{
Reference< awt::XDevice > xDev( xDlg->getPeer(), UNO_QUERY );
if ( xDev.is() )
aDeviceInfo = xDev->getInfo();
}
aPos.Width() += aFormPos.Width() + aDeviceInfo.LeftInset;
aPos.Height() += aFormPos.Height() + aDeviceInfo.TopInset;
// convert pixel to 100th_mm
if( pDevice )
{
aPos = pDevice->PixelToLogic( aPos, MapMode(MAP_100TH_MM) );
2001-02-26 09:47:06 +00:00
aSize = pDevice->PixelToLogic( aSize, MapMode(MAP_100TH_MM) );
}
Point aPoint;
aPoint.X() = aPos.Width();
aPoint.Y() = aPos.Height();
// set rectangle position and size
SetSnapRect( Rectangle( aPoint, aSize ) );
}
}
//----------------------------------------------------------------------------
void DlgEdObj::SetPropsFromRect()
{
//EndListening(sal_False);
// get control property set
Reference< beans::XPropertySet > xPSet( GetUnoControlModel(), UNO_QUERY );
2001-02-26 09:47:06 +00:00
if (xPSet.is())
{
// get control position and size from rectangle
2001-02-26 09:47:06 +00:00
Rectangle aRect = GetSnapRect();
Point aPoint = aRect.TopLeft();
Size aSize = aRect.GetSize();
Size aPos;
aPos.Width() = aPoint.X();
aPos.Height() = aPoint.Y();
// get form position and size from rectangle
Rectangle aFormRect = GetDlgEdForm()->GetSnapRect();
Point aFormPoint = aFormRect.TopLeft();
Size aFormSize = aFormRect.GetSize();
Size aFormPos;
aFormPos.Width() = aFormPoint.X();
aFormPos.Height() = aFormPoint.Y();
// convert 100th_mm to pixel
2001-02-26 09:47:06 +00:00
OutputDevice* pDevice = Application::GetDefaultDevice();
DBG_ASSERT( pDevice, "Missing Default Device!" );
if( pDevice )
{
aPos = pDevice->LogicToPixel( aPos, MapMode(MAP_100TH_MM) );
aSize = pDevice->LogicToPixel( aSize, MapMode(MAP_100TH_MM) );
aFormPos = pDevice->LogicToPixel( aFormPos, MapMode(MAP_100TH_MM) );
aFormSize = pDevice->LogicToPixel( aFormSize, MapMode(MAP_100TH_MM) );
}
// take window borders into account
awt::DeviceInfo aDeviceInfo;
Window* pWindow = GetDlgEdForm()->GetDlgEditor()->GetWindow();
Reference< awt::XControl > xDlg( GetDlgEdForm()->GetUnoControl( pWindow ), UNO_QUERY );
if ( xDlg.is() )
{
Reference< awt::XDevice > xDev( xDlg->getPeer(), UNO_QUERY );
if ( xDev.is() )
aDeviceInfo = xDev->getInfo();
}
aPos.Width() -= aFormPos.Width() + aDeviceInfo.LeftInset;
aPos.Height() -= aFormPos.Height() + aDeviceInfo.TopInset;
// convert pixel to logic units
if( pDevice )
{
aPos = pDevice->PixelToLogic( aPos, MapMode(MAP_APPFONT) );
2001-02-26 09:47:06 +00:00
aSize = pDevice->PixelToLogic( aSize, MapMode(MAP_APPFONT) );
}
// set properties
Any aValue;
aValue <<= aPos.Width();
xPSet->setPropertyValue( ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM( "PositionX" ) ), aValue );
aValue <<= aPos.Height();
xPSet->setPropertyValue( ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM( "PositionY" ) ), aValue );
aValue <<= aSize.Width();
xPSet->setPropertyValue( ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM( "Width" ) ), aValue );
aValue <<= aSize.Height();
xPSet->setPropertyValue( ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM( "Height" ) ), aValue );
}
//StartListening();
2001-02-26 09:47:06 +00:00
}
//----------------------------------------------------------------------------
2001-03-20 13:37:42 +00:00
void SAL_CALL DlgEdObj::NameChange( const ::com::sun::star::beans::PropertyChangeEvent& evt ) throw( ::com::sun::star::uno::RuntimeException)
{
2001-03-20 13:37:42 +00:00
// get old name
::rtl::OUString aOldName;
evt.OldValue >>= aOldName;
2001-03-20 13:37:42 +00:00
// get new name
::rtl::OUString aNewName;
evt.NewValue >>= aNewName;
2001-04-10 14:18:14 +00:00
if ( !aNewName.equals(aOldName) )
2001-03-20 13:37:42 +00:00
{
2001-04-10 14:18:14 +00:00
Reference< container::XNameAccess > xNameAcc((GetDlgEdForm()->GetUnoControlModel()), UNO_QUERY);
if ( xNameAcc.is() && xNameAcc->hasByName(aOldName) )
{
2001-04-10 14:18:14 +00:00
if ( !xNameAcc->hasByName(aNewName) && aNewName.getLength() != 0 )
{
// remove the control by the old name and insert the control by the new name in the container
Reference< container::XNameContainer > xCont(xNameAcc, UNO_QUERY );
if ( xCont.is() )
{
Reference< awt::XControlModel > xCtrl(GetUnoControlModel(), UNO_QUERY);
Any aAny;
aAny <<= xCtrl;
xCont->removeByName( aOldName );
xCont->insertByName( aNewName , aAny );
}
// sort the controls by tabindex
GetDlgEdForm()->SortByTabIndex();
}
else
{
// set old name property
EndListening(sal_False);
Reference< beans::XPropertySet > xPSet(GetUnoControlModel(), UNO_QUERY);
Any aName;
aName <<= aOldName;
xPSet->setPropertyValue( ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM( "Name" ) ), aName );
StartListening();
}
}
}
}
//----------------------------------------------------------------------------
2001-03-07 17:10:25 +00:00
sal_Int32 DlgEdObj::GetStep() const
{
// get step property
sal_Int32 nStep;
uno::Reference< beans::XPropertySet > xPSet( GetUnoControlModel(), uno::UNO_QUERY );
if (xPSet.is())
{
xPSet->getPropertyValue( ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "Step" ) ) ) >>= nStep;
}
return nStep;
}
//----------------------------------------------------------------------------
void DlgEdObj::UpdateStep()
{
sal_Int32 nCurStep = GetDlgEdForm()->GetStep();
sal_Int32 nStep = GetStep();
if( nCurStep )
{
SdrLayerAdmin& rLayerAdmin = GetModel()->GetLayerAdmin();
SdrLayerID nLayerId = rLayerAdmin.GetLayerID( String( RTL_CONSTASCII_USTRINGPARAM( "HiddenLayer" ) ), FALSE );
if ( nStep && (nStep != nCurStep) )
{
SetLayer( nLayerId );
}
else
{
SetLayer( 0 );
}
}
else
{
SetLayer( 0 );
}
}
//----------------------------------------------------------------------------
2001-03-20 13:37:42 +00:00
void SAL_CALL DlgEdObj::TabIndexChange( const ::com::sun::star::beans::PropertyChangeEvent& evt ) throw( ::com::sun::star::uno::RuntimeException)
{
// stop listening with all childs
::std::vector<DlgEdObj*> aChildList = GetDlgEdForm()->GetChilds();
::std::vector<DlgEdObj*>::iterator aIter;
for ( aIter = aChildList.begin() ; aIter != aChildList.end() ; aIter++ )
{
(*aIter)->EndListening(sal_False);
}
Reference< ::com::sun::star::container::XNameAccess > xNameAcc( GetDlgEdForm()->GetUnoControlModel() , UNO_QUERY );
if ( xNameAcc.is() )
{
// get sequence of control names
Sequence< ::rtl::OUString > aNames = xNameAcc->getElementNames();
const ::rtl::OUString* pNames = aNames.getConstArray();
sal_Int32 nCtrls = aNames.getLength();
::std::vector< ::rtl::OUString > aNameList( nCtrls );
2001-03-20 13:37:42 +00:00
// fill helper list
for ( sal_Int16 i = 0; i < nCtrls; i++ )
{
aNameList[i] = pNames[i];
}
// check tabindex
sal_Int16 nOldTabIndex;
evt.OldValue >>= nOldTabIndex;
sal_Int16 nNewTabIndex;
evt.NewValue >>= nNewTabIndex;
if ( nNewTabIndex < 0 )
2001-03-20 13:37:42 +00:00
nNewTabIndex = 0;
else if ( nNewTabIndex > nCtrls - 1 )
2001-03-20 13:37:42 +00:00
nNewTabIndex = nCtrls - 1;
// reorder helper list
::rtl::OUString aCtrlName = aNameList[nOldTabIndex];
aNameList.erase( aNameList.begin() + nOldTabIndex );
aNameList.insert( aNameList.begin() + nNewTabIndex , aCtrlName );
// sort name container by tabindex
Reference< container::XNameContainer > xCont( xNameAcc, UNO_QUERY );
for ( i = 0; i < nCtrls; i++ )
{
// get control model
::rtl::OUString aName = aNameList[i];
Any aCtrl = xNameAcc->getByName( aName );
// set new tabindex
Reference< ::com::sun::star::beans::XPropertySet > xPSet;
aCtrl >>= xPSet;
if ( xPSet.is() )
2001-03-20 13:37:42 +00:00
{
Any aTabIndex;
aTabIndex <<= (sal_Int16) i;
xPSet->setPropertyValue( ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM( "TabIndex" ) ), aTabIndex );
}
// sort name container
xCont->removeByName( aName );
xCont->insertByName( aName , aCtrl );
}
// reorder objects in drawing page
GetModel()->GetPage(0)->SetObjectOrdNum( nOldTabIndex + 1, nNewTabIndex + 1 );
2001-03-20 13:37:42 +00:00
}
// start listening with all childs
for ( aIter = aChildList.begin() ; aIter != aChildList.end() ; aIter++ )
{
(*aIter)->StartListening();
}
}
//----------------------------------------------------------------------------
2001-03-23 15:16:45 +00:00
::rtl::OUString DlgEdObj::GetServiceName() const
{
2001-03-16 12:43:42 +00:00
::rtl::OUString aServiceName;
Reference< lang::XServiceInfo > xServiceInfo( GetUnoControlModel() , UNO_QUERY );
if (xServiceInfo.is())
{
Sequence< ::rtl::OUString > aServiceNames( xServiceInfo->getSupportedServiceNames() );
DBG_ASSERT( aServiceNames.getLength() == 1 , "DlgEdObj: aServiceNames.getLength() != 1" );
aServiceName = aServiceNames.getArray()[ 0 ];
}
return aServiceName;
}
//----------------------------------------------------------------------------
2001-03-23 15:16:45 +00:00
::rtl::OUString DlgEdObj::GetDefaultName() const
2001-03-16 12:43:42 +00:00
{
sal_uInt16 nResId = 0;
::rtl::OUString aDefaultName;
::rtl::OUString aServiceName = GetServiceName();
if (aServiceName.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM("com.sun.star.awt.UnoControlDialogModel") ))
{
nResId = RID_STR_CLASS_DIALOG;
}
else if (aServiceName.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM("com.sun.star.awt.UnoControlButtonModel") ))
{
nResId = RID_STR_CLASS_BUTTON;
}
else if (aServiceName.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM("com.sun.star.awt.UnoControlRadioButtonModel") ))
{
nResId = RID_STR_CLASS_RADIOBUTTON;
}
else if (aServiceName.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM("com.sun.star.awt.UnoControlCheckBoxModel") ))
{
nResId = RID_STR_CLASS_CHECKBOX;
}
else if (aServiceName.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM("com.sun.star.awt.UnoControlListBoxModel") ))
{
nResId = RID_STR_CLASS_LISTBOX;
}
else if (aServiceName.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM("com.sun.star.awt.UnoControlComboBoxModel") ))
{
nResId = RID_STR_CLASS_COMBOBOX;
}
else if (aServiceName.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM("com.sun.star.awt.UnoControlGroupBoxModel") ))
{
nResId = RID_STR_CLASS_GROUPBOX;
}
else if (aServiceName.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM("com.sun.star.awt.UnoControlEditModel") ))
{
nResId = RID_STR_CLASS_EDIT;
}
else if (aServiceName.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM("com.sun.star.awt.UnoControlFixedTextModel") ))
{
nResId = RID_STR_CLASS_FIXEDTEXT;
}
else if (aServiceName.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM("com.sun.star.awt.UnoControlImageControlModel") ))
{
nResId = RID_STR_CLASS_IMAGECONTROL;
}
2001-04-26 11:40:09 +00:00
else if (aServiceName.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM("com.sun.star.awt.UnoControlProgressBarModel") ))
{
nResId = RID_STR_CLASS_PROGRESSBAR;
}
2001-05-02 11:39:47 +00:00
else if (aServiceName.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM("com.sun.star.awt.UnoControlScrollBarModel") ))
{
nResId = RID_STR_CLASS_SCROLLBAR;
}
2001-05-04 10:10:36 +00:00
else if (aServiceName.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM("com.sun.star.awt.UnoControlFixedLineModel") ))
{
nResId = RID_STR_CLASS_FIXEDLINE;
}
else if (aServiceName.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM("com.sun.star.awt.UnoControlDateFieldModel") ))
{
nResId = RID_STR_CLASS_DATEFIELD;
}
else if (aServiceName.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM("com.sun.star.awt.UnoControlTimeFieldModel") ))
{
nResId = RID_STR_CLASS_TIMEFIELD;
}
else if (aServiceName.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM("com.sun.star.awt.UnoControlNumericFieldModel") ))
{
nResId = RID_STR_CLASS_NUMERICFIELD;
}
else if (aServiceName.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM("com.sun.star.awt.UnoControlCurrencyFieldModel") ))
{
nResId = RID_STR_CLASS_CURRENCYFIELD;
}
else if (aServiceName.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM("com.sun.star.awt.UnoControlFormattedFieldModel") ))
{
nResId = RID_STR_CLASS_FORMATTEDFIELD;
}
else if (aServiceName.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM("com.sun.star.awt.UnoControlPatternFieldModel") ))
{
nResId = RID_STR_CLASS_PATTERNFIELD;
}
else if (aServiceName.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM("com.sun.star.awt.UnoControlFileControlModel") ))
{
nResId = RID_STR_CLASS_FILECONTROL;
}
else
{
nResId = RID_STR_CLASS_CONTROL;
}
2001-03-16 12:43:42 +00:00
if (nResId)
{
aDefaultName = ::rtl::OUString( IDEResId(nResId) );
}
return aDefaultName;
}
//----------------------------------------------------------------------------
2001-03-23 15:16:45 +00:00
::rtl::OUString DlgEdObj::GetUniqueName() const
{
2001-03-16 12:43:42 +00:00
::rtl::OUString aUniqueName;
uno::Reference< container::XNameAccess > xNameAcc((GetDlgEdForm()->GetUnoControlModel()), uno::UNO_QUERY);
if ( xNameAcc.is() )
{
sal_Int32 n = 0;
2001-03-16 12:43:42 +00:00
::rtl::OUString aDefaultName = GetDefaultName();
do
{
2001-03-16 12:43:42 +00:00
aUniqueName = aDefaultName + ::rtl::OUString::valueOf(++n);
} while (xNameAcc->hasByName(aUniqueName));
}
2001-03-16 12:43:42 +00:00
return aUniqueName;
}
//----------------------------------------------------------------------------
2001-02-26 09:47:06 +00:00
sal_uInt32 DlgEdObj::GetObjInventor() const
{
2001-07-27 17:06:15 +00:00
return DlgInventor;
2001-02-26 09:47:06 +00:00
}
//----------------------------------------------------------------------------
sal_uInt16 DlgEdObj::GetObjIdentifier() const
{
2001-03-23 15:16:45 +00:00
::rtl::OUString aServiceName = GetServiceName();
if (aServiceName.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM("com.sun.star.awt.UnoControlDialogModel") ))
{
2001-07-27 17:06:15 +00:00
return OBJ_DLG_DIALOG;
2001-03-23 15:16:45 +00:00
}
else if (aServiceName.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM("com.sun.star.awt.UnoControlButtonModel") ))
{
return OBJ_DLG_PUSHBUTTON;
}
else if (aServiceName.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM("com.sun.star.awt.UnoControlRadioButtonModel") ))
{
return OBJ_DLG_RADIOBUTTON;
}
else if (aServiceName.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM("com.sun.star.awt.UnoControlCheckBoxModel") ))
{
return OBJ_DLG_CHECKBOX;
}
else if (aServiceName.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM("com.sun.star.awt.UnoControlListBoxModel") ))
{
return OBJ_DLG_LISTBOX;
}
else if (aServiceName.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM("com.sun.star.awt.UnoControlComboBoxModel") ))
{
return OBJ_DLG_COMBOBOX;
}
else if (aServiceName.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM("com.sun.star.awt.UnoControlGroupBoxModel") ))
{
return OBJ_DLG_GROUPBOX;
}
else if (aServiceName.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM("com.sun.star.awt.UnoControlEditModel") ))
{
return OBJ_DLG_EDIT;
}
else if (aServiceName.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM("com.sun.star.awt.UnoControlFixedTextModel") ))
{
return OBJ_DLG_FIXEDTEXT;
}
else if (aServiceName.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM("com.sun.star.awt.UnoControlImageControlModel") ))
{
2001-05-14 10:23:57 +00:00
return OBJ_DLG_IMAGECONTROL;
2001-03-23 15:16:45 +00:00
}
2001-04-26 11:40:09 +00:00
else if (aServiceName.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM("com.sun.star.awt.UnoControlProgressBarModel") ))
{
2001-05-14 10:23:57 +00:00
return OBJ_DLG_PROGRESSBAR;
2001-04-26 11:40:09 +00:00
}
2001-05-02 11:39:47 +00:00
else if (aServiceName.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM("com.sun.star.awt.UnoControlScrollBarModel") ))
{
2001-05-14 10:23:57 +00:00
return OBJ_DLG_HSCROLLBAR;
2001-05-04 10:10:36 +00:00
}
else if (aServiceName.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM("com.sun.star.awt.UnoControlFixedLineModel") ))
{
2001-05-14 10:23:57 +00:00
return OBJ_DLG_HFIXEDLINE;
2001-05-02 11:39:47 +00:00
}
else if (aServiceName.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM("com.sun.star.awt.UnoControlDateFieldModel") ))
{
return OBJ_DLG_DATEFIELD;
}
else if (aServiceName.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM("com.sun.star.awt.UnoControlTimeFieldModel") ))
{
return OBJ_DLG_TIMEFIELD;
}
else if (aServiceName.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM("com.sun.star.awt.UnoControlNumericFieldModel") ))
{
return OBJ_DLG_NUMERICFIELD;
}
else if (aServiceName.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM("com.sun.star.awt.UnoControlCurrencyFieldModel") ))
{
return OBJ_DLG_CURRENCYFIELD;
}
else if (aServiceName.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM("com.sun.star.awt.UnoControlFormattedFieldModel") ))
{
return OBJ_DLG_FORMATTEDFIELD;
}
else if (aServiceName.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM("com.sun.star.awt.UnoControlPatternFieldModel") ))
{
return OBJ_DLG_PATTERNFIELD;
}
else if (aServiceName.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM("com.sun.star.awt.UnoControlFileControlModel") ))
{
return OBJ_DLG_FILECONTROL;
}
2001-05-14 10:23:57 +00:00
else
2001-03-23 15:16:45 +00:00
{
return OBJ_DLG_CONTROL;
2001-03-23 15:16:45 +00:00
}
2001-02-26 09:47:06 +00:00
}
//----------------------------------------------------------------------------
2001-03-23 15:16:45 +00:00
void DlgEdObj::clonedFrom(const DlgEdObj* _pSource) // not working yet
2001-02-26 09:47:06 +00:00
{
}
//----------------------------------------------------------------------------
2001-03-23 15:16:45 +00:00
SdrObject* DlgEdObj::Clone() const // not working yet
2001-02-26 09:47:06 +00:00
{
SdrObject* pReturn = SdrUnoObj::Clone();
DlgEdObj* pFormObject = PTR_CAST(DlgEdObj, pReturn);
DBG_ASSERT(pFormObject != NULL, "DlgEdObj::Clone : invalid clone !");
if (pFormObject)
pFormObject->clonedFrom(this);
return pReturn;
}
//----------------------------------------------------------------------------
2001-03-23 15:16:45 +00:00
SdrObject* DlgEdObj::Clone(SdrPage* _pPage, SdrModel* _pModel) const // not working yet
2001-02-26 09:47:06 +00:00
{
SdrObject* pReturn = SdrUnoObj::Clone(_pPage, _pModel);
if (!pReturn)
return pReturn;
return pReturn;
}
//----------------------------------------------------------------------------
2001-03-23 15:16:45 +00:00
void DlgEdObj::operator= (const SdrObject& rObj) // not working yet
2001-02-26 09:47:06 +00:00
{
SdrUnoObj::operator= (rObj);
}
//----------------------------------------------------------------------------
2001-03-23 15:16:45 +00:00
void DlgEdObj::WriteData(SvStream& rOut) const // not working yet
2001-02-26 09:47:06 +00:00
{
SdrUnoObj::WriteData(rOut);
}
//----------------------------------------------------------------------------
2001-03-23 15:16:45 +00:00
void DlgEdObj::ReadData(const SdrObjIOHeader& rHead, SvStream& rIn) // not working yet
2001-02-26 09:47:06 +00:00
{
SdrUnoObj::ReadData(rHead,rIn);
}
//----------------------------------------------------------------------------
void DlgEdObj::NbcMove( const Size& rSize )
{
SdrUnoObj::NbcMove( rSize );
2001-04-10 14:18:14 +00:00
// stop listening
EndListening(sal_False);
// set geometry properties
2001-02-26 09:47:06 +00:00
SetPropsFromRect();
2001-04-10 14:18:14 +00:00
// start listening
StartListening();
2001-05-15 12:16:52 +00:00
// dialog model changed
GetDlgEdForm()->GetDlgEditor()->SetDialogModelChanged(TRUE);
2001-02-26 09:47:06 +00:00
}
//----------------------------------------------------------------------------
void DlgEdObj::NbcResize(const Point& rRef, const Fraction& xFract, const Fraction& yFract)
{
SdrUnoObj::NbcResize( rRef, xFract, yFract );
2001-04-10 14:18:14 +00:00
// stop listening
EndListening(sal_False);
// set geometry properties
2001-02-26 09:47:06 +00:00
SetPropsFromRect();
2001-04-10 14:18:14 +00:00
// start listening
StartListening();
2001-05-15 12:16:52 +00:00
// dialog model changed
GetDlgEdForm()->GetDlgEditor()->SetDialogModelChanged(TRUE);
2001-02-26 09:47:06 +00:00
}
//----------------------------------------------------------------------------
FASTBOOL DlgEdObj::EndCreate(SdrDragStat& rStat, SdrCreateCmd eCmd)
{
sal_Bool bResult = SdrUnoObj::EndCreate(rStat, eCmd);
SetDefaults();
return bResult;
}
//----------------------------------------------------------------------------
void DlgEdObj::SetDefaults()
{
2001-03-20 13:37:42 +00:00
// stop listening
EndListening( sal_False );
2001-03-20 13:37:42 +00:00
// set parent form
2001-03-23 15:16:45 +00:00
pDlgEdForm = ((DlgEdPage*)GetPage())->GetDlgEdForm();
2001-03-20 13:37:42 +00:00
// add child to parent form
pDlgEdForm->AddChild( this );
Reference< beans::XPropertySet > xPSet( GetUnoControlModel(), UNO_QUERY );
if ( xPSet.is() )
{
// get unique name
::rtl::OUString aOUniqueName( GetUniqueName() );
// set name property
Any aUniqueName;
aUniqueName <<= aOUniqueName;
xPSet->setPropertyValue( ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM( "Name" ) ), aUniqueName );
// set labels
::rtl::OUString aServiceName = GetServiceName();
if (aServiceName.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM("com.sun.star.awt.UnoControlButtonModel") ) ||
aServiceName.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM("com.sun.star.awt.UnoControlRadioButtonModel") ) ||
aServiceName.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM("com.sun.star.awt.UnoControlCheckBoxModel") ) ||
aServiceName.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM("com.sun.star.awt.UnoControlGroupBoxModel") ) ||
aServiceName.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM("com.sun.star.awt.UnoControlFixedTextModel") ) )
{
xPSet->setPropertyValue( ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM( "Label" ) ), aUniqueName );
}
2001-03-20 13:37:42 +00:00
// set number formats supplier for formatted field
if ( aServiceName.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM("com.sun.star.awt.UnoControlFormattedFieldModel") ) )
{
Reference< util::XNumberFormatsSupplier > xSupplier = GetDlgEdForm()->GetDlgEditor()->GetNumberFormatsSupplier();
if ( xSupplier.is() )
{
Any aSupplier;
aSupplier <<= xSupplier;
xPSet->setPropertyValue( ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM( "FormatsSupplier" ) ), aSupplier );
}
}
// set geometry properties
SetPropsFromRect();
Reference< container::XNameContainer > xCont( GetDlgEdForm()->GetUnoControlModel() , UNO_QUERY );
if ( xCont.is() )
{
// set tabindex
Sequence< OUString > aNames = xCont->getElementNames();
uno::Any aTabIndex;
aTabIndex <<= (sal_Int16) aNames.getLength();
xPSet->setPropertyValue( ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM( "TabIndex" ) ), aTabIndex );
// set step
Reference< beans::XPropertySet > xPSetForm( xCont, UNO_QUERY );
if ( xPSetForm.is() )
{
Any aStep = xPSetForm->getPropertyValue( ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "Step" ) ) );
xPSet->setPropertyValue( ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM( "Step" ) ), aStep );
}
// insert control model in dialog model
Reference< awt::XControlModel > xCtrl( xPSet , UNO_QUERY );
Any aAny;
aAny <<= xCtrl;
xCont->insertByName( aOUniqueName , aAny );
}
}
2001-03-20 13:37:42 +00:00
// dialog model changed
GetDlgEdForm()->GetDlgEditor()->SetDialogModelChanged( TRUE );
2001-03-20 13:37:42 +00:00
// start listening
StartListening();
2001-02-26 09:47:06 +00:00
}
//----------------------------------------------------------------------------
IMPL_LINK(DlgEdObj, OnCreate, void*, EMPTYTAG)
{
/*
if (pTempView)
pTempView->ObjectCreated(this);
*/
return 0;
}
//----------------------------------------------------------------------------
2001-03-12 10:31:43 +00:00
void DlgEdObj::StartListening()
{
DBG_ASSERT(!isListening(), "DlgEdObj::StartListening: already listening!");
if (!isListening())
{
bIsListening = sal_True;
// XPropertyChangeListener
Reference< XPropertySet > xControlModel( GetUnoControlModel() , UNO_QUERY );
if (!m_xPropertyChangeListener.is() && xControlModel.is())
{
// create listener
m_xPropertyChangeListener = static_cast< ::com::sun::star::beans::XPropertyChangeListener*>( new DlgEdPropListenerImpl( (DlgEdObj*)this ) );
// register listener to properties
2001-03-13 16:24:59 +00:00
xControlModel->addPropertyChangeListener( ::rtl::OUString() , m_xPropertyChangeListener );
2001-03-12 10:31:43 +00:00
}
// XContainerListener
Reference< XScriptEventsSupplier > xEventsSupplier( GetUnoControlModel() , UNO_QUERY );
if( !m_xContainerListener.is() && xEventsSupplier.is() )
{
// create listener
m_xContainerListener = static_cast< ::com::sun::star::container::XContainerListener*>( new DlgEdEvtContListenerImpl( (DlgEdObj*)this ) );
// register listener to script event container
Reference< XNameContainer > xEventCont = xEventsSupplier->getEvents();
DBG_ASSERT(xEventCont.is(), "DlgEdObj::StartListening: control model has no script event container!");
Reference< XContainer > xCont( xEventCont , UNO_QUERY );
if (xCont.is())
xCont->addContainerListener( m_xContainerListener );
}
}
}
//----------------------------------------------------------------------------
void DlgEdObj::EndListening(sal_Bool bRemoveListener)
{
DBG_ASSERT(isListening(), "DlgEdObj::EndListening: not listening currently!");
if (isListening())
{
bIsListening = sal_False;
if (bRemoveListener)
{
// XPropertyChangeListener
Reference< XPropertySet > xControlModel(GetUnoControlModel(), UNO_QUERY);
if ( m_xPropertyChangeListener.is() && xControlModel.is() )
{
// remove listener
2001-03-13 16:24:59 +00:00
xControlModel->removePropertyChangeListener( ::rtl::OUString() , m_xPropertyChangeListener );
2001-03-12 10:31:43 +00:00
}
m_xPropertyChangeListener.clear();
// XContainerListener
Reference< XScriptEventsSupplier > xEventsSupplier( GetUnoControlModel() , UNO_QUERY );
if( m_xContainerListener.is() && xEventsSupplier.is() )
{
// remove listener
Reference< XNameContainer > xEventCont = xEventsSupplier->getEvents();
DBG_ASSERT(xEventCont.is(), "DlgEdObj::EndListening: control model has no script event container!");
Reference< XContainer > xCont( xEventCont , UNO_QUERY );
if (xCont.is())
xCont->removeContainerListener( m_xContainerListener );
}
m_xContainerListener.clear();
}
}
}
//----------------------------------------------------------------------------
2001-02-26 09:47:06 +00:00
void SAL_CALL DlgEdObj::_propertyChange( const ::com::sun::star::beans::PropertyChangeEvent& evt ) throw( ::com::sun::star::uno::RuntimeException)
{
if (isListening())
{
2001-03-06 13:50:13 +00:00
// dialog model changed
if ( ISA(DlgEdForm) )
{
((DlgEdForm*)this)->GetDlgEditor()->SetDialogModelChanged(TRUE);
}
else
{
GetDlgEdForm()->GetDlgEditor()->SetDialogModelChanged(TRUE);
}
2001-02-26 09:47:06 +00:00
// set rectangle, if geometry information in the model changed
if ( evt.PropertyName == ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("Width")) ||
evt.PropertyName == ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("Height")) ||
evt.PropertyName == ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("PositionX")) ||
evt.PropertyName == ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("PositionY")) )
{
if ( !ISA(DlgEdForm) )
{
SetRectFromProps();
}
else
{
// set rectangle of form
SetRectFromProps();
// set rectangles of all childs
::std::vector<DlgEdObj*>::iterator aIter;
::std::vector<DlgEdObj*> aChildList = ((DlgEdForm*)this)->GetChilds();
for ( aIter = aChildList.begin() ; aIter != aChildList.end() ; aIter++ )
{
(*aIter)->SetRectFromProps();
}
}
2001-02-26 09:47:06 +00:00
}
2001-03-06 13:50:13 +00:00
// change name of control in dialog model
else if ( evt.PropertyName == ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("Name")) )
{
2001-03-20 13:37:42 +00:00
if ( !ISA(DlgEdForm) )
{
NameChange(evt);
}
}
2001-03-07 17:10:25 +00:00
// update step
else if ( evt.PropertyName == ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("Step")) )
{
UpdateStep();
}
2001-03-20 13:37:42 +00:00
// change tabindex
else if ( evt.PropertyName == ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("TabIndex")) )
{
if ( !ISA(DlgEdForm) )
{
TabIndexChange(evt);
}
}
2001-02-26 09:47:06 +00:00
}
}
//----------------------------------------------------------------------------
2001-03-12 10:31:43 +00:00
void SAL_CALL DlgEdObj::_elementInserted(const ::com::sun::star::container::ContainerEvent& Event) throw(::com::sun::star::uno::RuntimeException)
2001-02-26 09:47:06 +00:00
{
2001-03-12 10:31:43 +00:00
if (isListening())
2001-02-26 09:47:06 +00:00
{
2001-03-12 10:31:43 +00:00
// dialog model changed
if ( ISA(DlgEdForm) )
2001-02-26 09:47:06 +00:00
{
2001-03-12 10:31:43 +00:00
((DlgEdForm*)this)->GetDlgEditor()->SetDialogModelChanged(TRUE);
}
else
{
GetDlgEdForm()->GetDlgEditor()->SetDialogModelChanged(TRUE);
2001-02-26 09:47:06 +00:00
}
}
}
//----------------------------------------------------------------------------
2001-03-12 10:31:43 +00:00
void SAL_CALL DlgEdObj::_elementReplaced(const ::com::sun::star::container::ContainerEvent& Event) throw(::com::sun::star::uno::RuntimeException)
2001-02-26 09:47:06 +00:00
{
if (isListening())
{
2001-03-12 10:31:43 +00:00
// dialog model changed
if ( ISA(DlgEdForm) )
2001-02-26 09:47:06 +00:00
{
2001-03-12 10:31:43 +00:00
((DlgEdForm*)this)->GetDlgEditor()->SetDialogModelChanged(TRUE);
}
else
{
GetDlgEdForm()->GetDlgEditor()->SetDialogModelChanged(TRUE);
}
}
}
//----------------------------------------------------------------------------
2001-02-26 09:47:06 +00:00
2001-03-12 10:31:43 +00:00
void SAL_CALL DlgEdObj::_elementRemoved(const ::com::sun::star::container::ContainerEvent& Event) throw(::com::sun::star::uno::RuntimeException)
{
if (isListening())
{
// dialog model changed
if ( ISA(DlgEdForm) )
{
((DlgEdForm*)this)->GetDlgEditor()->SetDialogModelChanged(TRUE);
}
else
{
GetDlgEdForm()->GetDlgEditor()->SetDialogModelChanged(TRUE);
2001-02-26 09:47:06 +00:00
}
}
}
//----------------------------------------------------------------------------
SdrObject* DlgEdObj::CheckHit( const Point& rPnt, USHORT nTol,const SetOfByte* pSet ) const
{
::rtl::OUString aServiceName = GetServiceName();
if (aServiceName.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM("com.sun.star.awt.UnoControlGroupBoxModel") ))
{
Rectangle aROuter = aOutRect;
aROuter.Left() -= nTol;
aROuter.Right() += nTol;
aROuter.Top() -= nTol;
aROuter.Bottom() += nTol;
Rectangle aRInner = aOutRect;
if( (aRInner.GetSize().Height() > (long)nTol*2) &&
(aRInner.GetSize().Width() > (long)nTol*2) )
{
aRInner.Left() += nTol;
aRInner.Right() -= nTol;
aRInner.Top() += nTol;
aRInner.Bottom() -= nTol;
}
if( aROuter.IsInside( rPnt ) && !aRInner.IsInside( rPnt ) )
return (SdrObject*)this;
else
return 0;
}
else
return SdrObject::CheckHit( rPnt, nTol, pSet );
}
2001-02-26 09:47:06 +00:00
//----------------------------------------------------------------------------
TYPEINIT1(DlgEdForm, DlgEdObj);
DBG_NAME(DlgEdForm);
//----------------------------------------------------------------------------
DlgEdForm::DlgEdForm(const ::rtl::OUString& rModelName)
:DlgEdObj(rModelName)
{
DBG_CTOR(DlgEdForm, NULL);
}
//----------------------------------------------------------------------------
DlgEdForm::DlgEdForm(const ::rtl::OUString& rModelName,
const com::sun::star::uno::Reference< com::sun::star::lang::XMultiServiceFactory >& rxSFac)
:DlgEdObj(rModelName, rxSFac)
{
DBG_CTOR(DlgEdForm, NULL);
}
//----------------------------------------------------------------------------
DlgEdForm::DlgEdForm()
:DlgEdObj()
{
DBG_CTOR(DlgEdForm, NULL);
}
//----------------------------------------------------------------------------
DlgEdForm::~DlgEdForm()
{
DBG_DTOR(DlgEdForm, NULL);
}
//----------------------------------------------------------------------------
2001-03-07 17:10:25 +00:00
void DlgEdForm::SetRectFromProps()
{
// get property set
Reference< beans::XPropertySet > xPSetForm( GetUnoControlModel(), UNO_QUERY );
if (xPSetForm.is())
{
// get form position and size from properties
sal_Int32 nFormX, nFormY, nFormWidth, nFormHeight;
xPSetForm->getPropertyValue( ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "PositionX" ) ) ) >>= nFormX;
xPSetForm->getPropertyValue( ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "PositionY" ) ) ) >>= nFormY;
xPSetForm->getPropertyValue( ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "Width" ) ) ) >>= nFormWidth;
xPSetForm->getPropertyValue( ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "Height" ) ) ) >>= nFormHeight;
Size aFormPos( nFormX, nFormY );
Size aFormSize( nFormWidth, nFormHeight );
// convert logic units to pixel
OutputDevice* pDevice = Application::GetDefaultDevice();
DBG_ASSERT( pDevice, "Missing Default Device!" );
if( pDevice )
{
aFormPos = pDevice->LogicToPixel( aFormPos, MapMode(MAP_APPFONT) );
aFormSize = pDevice->LogicToPixel( aFormSize, MapMode(MAP_APPFONT) );
}
// take window borders into account
awt::DeviceInfo aDeviceInfo;
Window* pWindow = GetDlgEditor()->GetWindow();
Reference< awt::XControl > xDlg( GetUnoControl( pWindow ), UNO_QUERY );
if ( xDlg.is() )
{
Reference< awt::XDevice > xDev( xDlg->getPeer(), UNO_QUERY );
if ( xDev.is() )
aDeviceInfo = xDev->getInfo();
}
aFormSize.Width() += aDeviceInfo.LeftInset + aDeviceInfo.RightInset;
aFormSize.Height() += aDeviceInfo.TopInset + aDeviceInfo.BottomInset;
// convert pixel to 100th_mm
if( pDevice )
{
aFormPos = pDevice->PixelToLogic( aFormPos, MapMode(MAP_100TH_MM) );
aFormSize = pDevice->PixelToLogic( aFormSize, MapMode(MAP_100TH_MM) );
}
Point aFormPoint;
aFormPoint.X() = aFormPos.Width();
aFormPoint.Y() = aFormPos.Height();
// set rectangle position and size
SetSnapRect( Rectangle( aFormPoint, aFormSize ) );
}
}
//----------------------------------------------------------------------------
void DlgEdForm::SetPropsFromRect()
{
//EndListening(sal_False);
// get control property set
Reference< beans::XPropertySet > xPSetForm( GetUnoControlModel(), UNO_QUERY );
if (xPSetForm.is())
{
// get form position and size from rectangle
Rectangle aFormRect = GetSnapRect();
Point aFormPoint = aFormRect.TopLeft();
Size aFormSize = aFormRect.GetSize();
Size aFormPos;
aFormPos.Width() = aFormPoint.X();
aFormPos.Height() = aFormPoint.Y();
// convert 100th_mm to pixel
OutputDevice* pDevice = Application::GetDefaultDevice();
DBG_ASSERT( pDevice, "Missing Default Device!" );
if( pDevice )
{
aFormPos = pDevice->LogicToPixel( aFormPos, MapMode(MAP_100TH_MM) );
aFormSize = pDevice->LogicToPixel( aFormSize, MapMode(MAP_100TH_MM) );
}
// take window borders into account
awt::DeviceInfo aDeviceInfo;
Window* pWindow = GetDlgEditor()->GetWindow();
Reference< awt::XControl > xDlg( GetUnoControl( pWindow ), UNO_QUERY );
if ( xDlg.is() )
{
Reference< awt::XDevice > xDev( xDlg->getPeer(), UNO_QUERY );
if ( xDev.is() )
aDeviceInfo = xDev->getInfo();
}
aFormSize.Width() -= aDeviceInfo.LeftInset + aDeviceInfo.RightInset;
aFormSize.Height() -= aDeviceInfo.TopInset + aDeviceInfo.BottomInset;
// convert pixel to logic units
if( pDevice )
{
aFormPos = pDevice->PixelToLogic( aFormPos, MapMode(MAP_APPFONT) );
aFormSize = pDevice->PixelToLogic( aFormSize, MapMode(MAP_APPFONT) );
}
// set properties
Any aValue;
aValue <<= aFormPos.Width();
xPSetForm->setPropertyValue( ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM( "PositionX" ) ), aValue );
aValue <<= aFormPos.Height();
xPSetForm->setPropertyValue( ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM( "PositionY" ) ), aValue );
aValue <<= aFormSize.Width();
xPSetForm->setPropertyValue( ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM( "Width" ) ), aValue );
aValue <<= aFormSize.Height();
xPSetForm->setPropertyValue( ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM( "Height" ) ), aValue );
}
//StartListening();
}
//----------------------------------------------------------------------------
2001-03-20 13:37:42 +00:00
void DlgEdForm::AddChild( DlgEdObj* pDlgEdObj )
{
pChilds.push_back( pDlgEdObj );
}
//----------------------------------------------------------------------------
void DlgEdForm::RemoveChild( DlgEdObj* pDlgEdObj )
{
pChilds.erase( ::std::find( pChilds.begin() , pChilds.end() , pDlgEdObj ) );
}
//----------------------------------------------------------------------------
2001-03-07 17:10:25 +00:00
void DlgEdForm::UpdateStep()
{
ULONG nObjCount;
SdrPage* pSdrPage = GetPage();
if ( pSdrPage && ( ( nObjCount = pSdrPage->GetObjCount() ) > 0 ) )
{
for ( ULONG i = 0 ; i < nObjCount ; i++ )
{
SdrObject* pObj = pSdrPage->GetObj(i);
DlgEdObj* pDlgEdObj = PTR_CAST(DlgEdObj, pObj);
if ( pDlgEdObj && !pDlgEdObj->ISA(DlgEdForm) )
pDlgEdObj->UpdateStep();
}
}
}
//----------------------------------------------------------------------------
2001-02-26 09:47:06 +00:00
2001-03-20 13:37:42 +00:00
void DlgEdForm::SortByTabIndex()
{
// stop listening with all childs
::std::vector<DlgEdObj*>::iterator aIter;
for ( aIter = pChilds.begin() ; aIter != pChilds.end() ; aIter++ )
{
(*aIter)->EndListening(sal_False);
}
Reference< ::com::sun::star::container::XNameAccess > xNameAcc( GetUnoControlModel() , UNO_QUERY );
if ( xNameAcc.is() )
{
// get sequence of control names
Sequence< ::rtl::OUString > aNames = xNameAcc->getElementNames();
const ::rtl::OUString* pNames = aNames.getConstArray();
sal_Int32 nCtrls = aNames.getLength();
::std::vector<TabSortHelper> aTabSortList(nCtrls);
for ( sal_Int16 i = 0; i < nCtrls; i++ )
{
// name
TabSortHelper aTabSortHelper;
aTabSortHelper.name = pNames[i];
// tabindex
Any aCtrl = xNameAcc->getByName( pNames[i] );
Reference< ::com::sun::star::beans::XPropertySet > xPSet;
aCtrl >>= xPSet;
if (xPSet.is())
{
xPSet->getPropertyValue( ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "TabIndex" ) ) ) >>= aTabSortHelper.tabindex;
}
// insert element into helper list
aTabSortList[i] = aTabSortHelper;
}
// sort helper list by tabindex
::std::sort( aTabSortList.begin() , aTabSortList.end() );
// sort name container by tabindex
Reference< container::XNameContainer > xCont( xNameAcc, UNO_QUERY );
for ( i = 0; i < nCtrls; i++ )
{
// get control model
::rtl::OUString aName = aTabSortList[i].name;
Any aCtrl = xNameAcc->getByName( aName );
// set new tabindex
Reference< ::com::sun::star::beans::XPropertySet > xPSet;
aCtrl >>= xPSet;
if (xPSet.is())
{
Any aTabIndex;
aTabIndex <<= (sal_Int16) i;
xPSet->setPropertyValue( ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM( "TabIndex" ) ), aTabIndex );
}
// sort name container
xCont->removeByName( aName );
xCont->insertByName( aName , aCtrl );
}
}
// start listening with all childs
for ( aIter = pChilds.begin() ; aIter != pChilds.end() ; aIter++ )
{
(*aIter)->StartListening();
}
}
//----------------------------------------------------------------------------
2001-02-26 09:47:06 +00:00
SdrObject* DlgEdForm::CheckHit( const Point& rPnt, USHORT nTol,
const SetOfByte* pSet ) const
{
Rectangle aROuter = aOutRect;
aROuter.Left() -= nTol;
aROuter.Right() += nTol;
aROuter.Top() -= nTol;
aROuter.Bottom() += nTol;
Rectangle aRInner = aOutRect;
if( (aRInner.GetSize().Height() > (long)nTol*2) &&
(aRInner.GetSize().Width() > (long)nTol*2) )
{
aRInner.Left() += nTol;
aRInner.Right() -= nTol;
aRInner.Top() += nTol;
aRInner.Bottom() -= nTol;
}
if( aROuter.IsInside( rPnt ) && !aRInner.IsInside( rPnt ) )
return (SdrObject*)this;
else
return 0;
}
//----------------------------------------------------------------------------
2001-05-15 12:16:52 +00:00
void DlgEdForm::NbcMove( const Size& rSize )
{
SdrUnoObj::NbcMove( rSize );
// set geometry properties of form
EndListening(sal_False);
SetPropsFromRect();
StartListening();
// set geometry properties of all childs
::std::vector<DlgEdObj*>::iterator aIter;
for ( aIter = pChilds.begin() ; aIter != pChilds.end() ; aIter++ )
{
(*aIter)->EndListening(sal_False);
(*aIter)->SetPropsFromRect();
(*aIter)->StartListening();
}
// dialog model changed
GetDlgEditor()->SetDialogModelChanged(TRUE);
}
//----------------------------------------------------------------------------
void DlgEdForm::NbcResize(const Point& rRef, const Fraction& xFract, const Fraction& yFract)
{
SdrUnoObj::NbcResize( rRef, xFract, yFract );
// set geometry properties of form
EndListening(sal_False);
SetPropsFromRect();
StartListening();
// set geometry properties of all childs
::std::vector<DlgEdObj*>::iterator aIter;
for ( aIter = pChilds.begin() ; aIter != pChilds.end() ; aIter++ )
{
(*aIter)->EndListening(sal_False);
(*aIter)->SetPropsFromRect();
(*aIter)->StartListening();
}
// dialog model changed
GetDlgEditor()->SetDialogModelChanged(TRUE);
}
//----------------------------------------------------------------------------
2001-02-26 09:47:06 +00:00
FASTBOOL DlgEdForm::EndCreate(SdrDragStat& rStat, SdrCreateCmd eCmd)
{
sal_Bool bResult = SdrUnoObj::EndCreate(rStat, eCmd);
2001-03-23 15:16:45 +00:00
// stop listening
EndListening(sal_False);
2001-03-13 16:24:59 +00:00
// set geometry properties
2001-02-26 09:47:06 +00:00
SetPropsFromRect();
2001-03-23 15:16:45 +00:00
// dialog model changed
GetDlgEditor()->SetDialogModelChanged(TRUE);
// start listening
StartListening();
2001-02-26 09:47:06 +00:00
return bResult;
}
//----------------------------------------------------------------------------