2000-09-18 16:07:07 +00:00
/*************************************************************************
*
2005-09-09 12:20:51 +00:00
* OpenOffice . org - a multi - platform office productivity suite
2000-09-18 16:07:07 +00:00
*
2005-09-09 12:20:51 +00:00
* $ RCSfile : unocontrolmodel . cxx , v $
2000-09-18 16:07:07 +00:00
*
2006-10-12 09:32:56 +00:00
* $ Revision : 1.50 $
2000-09-18 16:07:07 +00:00
*
2006-10-12 09:32:56 +00:00
* last change : $ Author : obo $ $ Date : 2006 - 10 - 12 10 : 32 : 56 $
2000-09-18 16:07:07 +00:00
*
2005-09-09 12:20:51 +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
*
*
2005-09-09 12:20:51 +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
*
2005-09-09 12:20:51 +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
*
2005-09-09 12:20:51 +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
*
2005-09-09 12:20:51 +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
*
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
2006-09-16 11:20:19 +00:00
// MARKER(update_precomp.py): autogen include statement, do not remove
# include "precompiled_toolkit.hxx"
2000-09-18 16:07:07 +00:00
# ifndef _COM_SUN_STAR_BEANS_PROPERTYSTATE_HPP_
# include <com/sun/star/beans/PropertyState.hpp>
# endif
# ifndef _COM_SUN_STAR_BEANS_PROPERTYATTRIBUTE_HPP_
# include <com/sun/star/beans/PropertyAttribute.hpp>
# endif
# ifndef _COM_SUN_STAR_AWT_FONTDESCRIPTOR_HPP_
# include <com/sun/star/awt/FontDescriptor.hpp>
# endif
# ifndef _COM_SUN_STAR_AWT_FONTWIDTH_HPP_
# include <com/sun/star/awt/FontWidth.hpp>
# endif
# ifndef _COM_SUN_STAR_AWT_FONTWEIGHT_HPP_
# include <com/sun/star/awt/FontWeight.hpp>
# endif
# ifndef _COM_SUN_STAR_AWT_FONTSLANT_HPP_
# include <com/sun/star/awt/FontSlant.hpp>
# endif
# ifndef _COM_SUN_STAR_IO_XMARKABLESTREAM_HPP_
# include <com/sun/star/io/XMarkableStream.hpp>
# endif
2001-08-22 09:05:07 +00:00
# ifndef _TOOLKIT_AWT_UNOCONTROLMODEL_HXX_
2000-09-18 16:07:07 +00:00
# include <toolkit/controls/unocontrolmodel.hxx>
2001-08-22 09:05:07 +00:00
# endif
# ifndef _TOOLKIT_HELPER_MACROS_HXX_
2000-09-18 16:07:07 +00:00
# include <toolkit/helper/macros.hxx>
2001-08-22 09:05:07 +00:00
# endif
# ifndef _CPPUHELPER_TYPEPROVIDER_HXX_
2000-09-18 16:07:07 +00:00
# include <cppuhelper/typeprovider.hxx>
2001-08-22 09:05:07 +00:00
# endif
2005-01-21 15:47:22 +00:00
# ifndef _COMPHELPER_EXTRACT_HXX_
# include <cppuhelper/extract.hxx>
# endif
2001-08-22 09:05:07 +00:00
# ifndef _RTL_MEMORY_H_
2000-09-18 16:07:07 +00:00
# include <rtl/memory.h>
2001-08-22 09:05:07 +00:00
# endif
# ifndef _RTL_UUID_H_
2000-09-18 16:07:07 +00:00
# include <rtl/uuid.h>
2001-08-22 09:05:07 +00:00
# endif
2000-09-18 16:07:07 +00:00
2006-01-19 14:35:39 +00:00
# ifndef TOOLS_DIAGNOSE_EX_H
# include <tools/diagnose_ex.h>
# endif
2001-08-22 09:05:07 +00:00
# ifndef _STRING_HXX
2000-09-18 16:07:07 +00:00
# include <tools/string.hxx>
2001-08-22 09:05:07 +00:00
# endif
# ifndef _TOOLS_TABLE_HXX
2000-09-18 16:07:07 +00:00
# include <tools/table.hxx>
2001-08-22 09:05:07 +00:00
# endif
# ifndef _DATE_HXX
2000-09-18 16:07:07 +00:00
# include <tools/date.hxx>
2001-08-22 09:05:07 +00:00
# endif
# ifndef _TOOLS_TIME_HXX
2000-09-18 16:07:07 +00:00
# include <tools/time.hxx>
2001-08-22 09:05:07 +00:00
# endif
# ifndef _URLOBJ_HXX
2000-09-18 16:07:07 +00:00
# include <tools/urlobj.hxx>
2001-08-22 09:05:07 +00:00
# endif
# ifndef _TOOLS_DEBUG_HXX
2000-09-18 16:07:07 +00:00
# include <tools/debug.hxx>
2001-08-22 09:05:07 +00:00
# endif
2000-09-18 16:07:07 +00:00
2001-08-22 09:05:07 +00:00
# ifndef _TOOLKIT_HELPER_PROPERTY_HXX_
2000-09-18 16:07:07 +00:00
# include <toolkit/helper/property.hxx>
2001-08-22 09:05:07 +00:00
# endif
# ifndef _TOOLKIT_HELPER_VCLUNOHELPER_HXX_
2000-09-18 16:07:07 +00:00
# include <toolkit/helper/vclunohelper.hxx>
2001-08-22 09:05:07 +00:00
# endif
# ifndef _TOOLKIT_HELPER_EMPTYFONTDESCRIPTOR_HXX_
2000-09-18 16:07:07 +00:00
# include <toolkit/helper/emptyfontdescriptor.hxx>
2001-08-22 09:05:07 +00:00
# endif
2000-09-18 16:07:07 +00:00
2000-11-09 14:02:24 +00:00
# ifndef _COM_SUN_STAR_LANG_LOCALE_HPP_
# include <com/sun/star/lang/Locale.hpp>
# endif
# ifndef _UNOTOOLS_LOCALEDATAWRAPPER_HXX
# include <unotools/localedatawrapper.hxx>
# endif
# ifndef _UTL_CONFIGMGR_HXX_
# include <unotools/configmgr.hxx>
# endif
# ifndef _COMPHELPER_PROCESSFACTORY_HXX_
# include <comphelper/processfactory.hxx>
# endif
2000-11-02 10:12:12 +00:00
# ifndef _COMPHELPER_SEQUENCE_HXX_
# include <comphelper/sequence.hxx>
# endif
2000-09-18 16:07:07 +00:00
2001-08-22 09:05:07 +00:00
# ifndef _SV_SVAPP_HXX
2000-09-18 16:07:07 +00:00
# include <vcl/svapp.hxx>
2001-08-22 09:05:07 +00:00
# endif
2000-09-18 16:07:07 +00:00
2002-07-29 11:20:48 +00:00
# ifndef _UNO_DATA_H_
# include <uno/data.h>
# endif
2004-05-10 11:49:30 +00:00
# include <memory>
2001-01-24 14:00:58 +00:00
using namespace : : com : : sun : : star ;
2001-03-13 14:57:30 +00:00
using namespace : : com : : sun : : star : : uno ;
using namespace : : com : : sun : : star : : lang ;
2001-08-22 09:05:07 +00:00
using namespace : : com : : sun : : star : : i18n ;
2006-03-14 09:53:43 +00:00
using : : com : : sun : : star : : awt : : FontDescriptor ;
2001-01-24 14:00:58 +00:00
2001-02-05 09:54:01 +00:00
struct ImplControlProperty
2000-09-18 16:07:07 +00:00
{
private :
sal_uInt16 nId ;
: : com : : sun : : star : : uno : : Any aValue ;
public :
2001-02-05 09:54:01 +00:00
ImplControlProperty ( const ImplControlProperty & rProp ) : aValue ( rProp . aValue )
2001-01-24 14:00:58 +00:00
{
nId = rProp . nId ;
}
2001-02-05 09:54:01 +00:00
ImplControlProperty ( sal_uInt16 nT )
2000-09-18 16:07:07 +00:00
{
nId = nT ;
}
2001-02-05 09:54:01 +00:00
ImplControlProperty ( sal_uInt16 nT , const : : com : : sun : : star : : uno : : Any & rValue ) : aValue ( rValue )
2000-09-18 16:07:07 +00:00
{
nId = nT ;
}
sal_uInt16 GetId ( ) const { return nId ; }
const : : com : : sun : : star : : uno : : Any & GetValue ( ) const { return aValue ; }
void SetValue ( const : : com : : sun : : star : : uno : : Any & rValue ) { aValue = rValue ; }
} ;
2006-06-19 22:05:03 +00:00
DECLARE_TABLE ( ImplPropertyTable , ImplControlProperty * )
2000-09-18 16:07:07 +00:00
# define UNOCONTROL_STREAMVERSION (short)2
2006-03-14 09:53:43 +00:00
static void lcl_ImplMergeFontProperty ( FontDescriptor & rFD , sal_uInt16 nPropId , const Any & rValue )
2000-09-18 16:07:07 +00:00
{
2000-09-19 14:09:44 +00:00
// some props are defined with other types than the matching FontDescriptor members have
// (e.g. FontWidth, FontSlant)
// 78474 - 09/19/2000 - FS
float nExtractFloat = 0 ;
sal_Int16 nExtractShort = 0 ;
2000-09-18 16:07:07 +00:00
switch ( nPropId )
{
case BASEPROPERTY_FONTDESCRIPTORPART_NAME : rValue > > = rFD . Name ;
break ;
case BASEPROPERTY_FONTDESCRIPTORPART_STYLENAME : rValue > > = rFD . StyleName ;
break ;
case BASEPROPERTY_FONTDESCRIPTORPART_FAMILY : rValue > > = rFD . Family ;
break ;
case BASEPROPERTY_FONTDESCRIPTORPART_CHARSET : rValue > > = rFD . CharSet ;
break ;
2001-06-05 04:53:22 +00:00
case BASEPROPERTY_FONTDESCRIPTORPART_HEIGHT : rValue > > = nExtractFloat ; rFD . Height = ( sal_Int16 ) nExtractFloat ;
2000-09-18 16:07:07 +00:00
break ;
case BASEPROPERTY_FONTDESCRIPTORPART_WEIGHT : rValue > > = rFD . Weight ;
break ;
2003-03-27 16:05:12 +00:00
case BASEPROPERTY_FONTDESCRIPTORPART_SLANT : if ( rValue > > = nExtractShort )
rFD . Slant = ( : : com : : sun : : star : : awt : : FontSlant ) nExtractShort ;
else
rValue > > = rFD . Slant ;
2000-09-18 16:07:07 +00:00
break ;
case BASEPROPERTY_FONTDESCRIPTORPART_UNDERLINE : rValue > > = rFD . Underline ;
break ;
case BASEPROPERTY_FONTDESCRIPTORPART_STRIKEOUT : rValue > > = rFD . Strikeout ;
break ;
case BASEPROPERTY_FONTDESCRIPTORPART_WIDTH : rValue > > = rFD . Width ;
break ;
case BASEPROPERTY_FONTDESCRIPTORPART_PITCH : rValue > > = rFD . Pitch ;
break ;
case BASEPROPERTY_FONTDESCRIPTORPART_CHARWIDTH : rValue > > = rFD . CharacterWidth ;
break ;
case BASEPROPERTY_FONTDESCRIPTORPART_ORIENTATION : rValue > > = rFD . Orientation ;
break ;
case BASEPROPERTY_FONTDESCRIPTORPART_KERNING : rValue > > = rFD . Kerning ;
break ;
case BASEPROPERTY_FONTDESCRIPTORPART_WORDLINEMODE : rValue > > = rFD . WordLineMode ;
break ;
case BASEPROPERTY_FONTDESCRIPTORPART_TYPE : rValue > > = rFD . Type ;
break ;
default : DBG_ERROR ( " FontProperty?! " ) ;
}
}
// ----------------------------------------------------
// class UnoControlModel
// ----------------------------------------------------
UnoControlModel : : UnoControlModel ( )
: OPropertySetHelper ( BrdcstHelper ) , maDisposeListeners ( * this )
{
// Die Properties muessen vom Model in die Tabelle gestopft werden,
// nur vorhandene Properties sind gueltige Properties, auch wenn VOID.
mpData = new ImplPropertyTable ;
}
2001-01-24 14:00:58 +00:00
UnoControlModel : : UnoControlModel ( const UnoControlModel & rModel )
2006-06-19 22:05:03 +00:00
: XControlModel ( )
, XPropertyState ( )
, XPersistObject ( )
, XComponent ( )
, XServiceInfo ( )
, XTypeProvider ( )
, XUnoTunnel ( )
, XCloneable ( )
, MutexAndBroadcastHelper ( )
, OPropertySetHelper ( BrdcstHelper )
, OWeakAggObject ( )
, maDisposeListeners ( * this )
2001-01-24 14:00:58 +00:00
{
mpData = new ImplPropertyTable ;
for ( sal_uInt32 n = rModel . mpData - > Count ( ) ; n ; )
{
2001-02-05 09:54:01 +00:00
ImplControlProperty * pProp = rModel . mpData - > GetObject ( - - n ) ;
ImplControlProperty * pNew = new ImplControlProperty ( * pProp ) ;
2001-01-24 14:00:58 +00:00
mpData - > Insert ( pNew - > GetId ( ) , pNew ) ;
}
}
2000-09-18 16:07:07 +00:00
UnoControlModel : : ~ UnoControlModel ( )
{
2001-01-24 14:00:58 +00:00
for ( sal_uInt32 n = mpData - > Count ( ) ; n ; )
delete mpData - > GetObject ( - - n ) ;
2000-09-18 16:07:07 +00:00
delete mpData ;
}
2001-01-24 14:00:58 +00:00
UnoControlModel * UnoControlModel : : Clone ( ) const
{
DBG_ERROR ( " UnoControlModel::Clone() ?! " ) ;
return NULL ;
}
2000-09-18 16:07:07 +00:00
: : com : : sun : : star : : uno : : Sequence < sal_Int32 > UnoControlModel : : ImplGetPropertyIds ( ) const
{
sal_uInt32 nIDs = mpData - > Count ( ) ;
: : com : : sun : : star : : uno : : Sequence < sal_Int32 > aIDs ( nIDs ) ;
sal_Int32 * pIDs = aIDs . getArray ( ) ;
for ( sal_uInt32 n = 0 ; n < nIDs ; n + + )
pIDs [ n ] = mpData - > GetObjectKey ( n ) ;
return aIDs ;
}
sal_Bool UnoControlModel : : ImplHasProperty ( sal_uInt16 nPropId ) const
{
if ( ( nPropId > = BASEPROPERTY_FONTDESCRIPTORPART_START ) & & ( nPropId < = BASEPROPERTY_FONTDESCRIPTORPART_END ) )
nPropId = BASEPROPERTY_FONTDESCRIPTOR ;
return mpData - > Get ( nPropId ) ? sal_True : sal_False ;
}
2006-06-19 22:05:03 +00:00
void UnoControlModel : : ImplPropertyChanged ( sal_uInt16 )
2000-09-18 16:07:07 +00:00
{
}
: : com : : sun : : star : : uno : : Any UnoControlModel : : ImplGetDefaultValue ( sal_uInt16 nPropId ) const
{
: : com : : sun : : star : : uno : : Any aDefault ;
if ( ( nPropId = = BASEPROPERTY_FONTDESCRIPTOR ) | |
( nPropId > = BASEPROPERTY_FONTDESCRIPTORPART_START ) & & ( nPropId < = BASEPROPERTY_FONTDESCRIPTORPART_END ) )
{
EmptyFontDescriptor aFD ;
switch ( nPropId )
{
case BASEPROPERTY_FONTDESCRIPTOR : aDefault < < = aFD ; break ;
case BASEPROPERTY_FONTDESCRIPTORPART_NAME : aDefault < < = aFD . Name ; break ;
case BASEPROPERTY_FONTDESCRIPTORPART_STYLENAME : aDefault < < = aFD . StyleName ; break ;
case BASEPROPERTY_FONTDESCRIPTORPART_FAMILY : aDefault < < = aFD . Family ; break ;
case BASEPROPERTY_FONTDESCRIPTORPART_CHARSET : aDefault < < = aFD . CharSet ; break ;
case BASEPROPERTY_FONTDESCRIPTORPART_HEIGHT : aDefault < < = ( float ) aFD . Height ; break ;
case BASEPROPERTY_FONTDESCRIPTORPART_WEIGHT : aDefault < < = aFD . Weight ; break ;
case BASEPROPERTY_FONTDESCRIPTORPART_SLANT : aDefault < < = ( sal_Int16 ) aFD . Slant ; break ;
case BASEPROPERTY_FONTDESCRIPTORPART_UNDERLINE : aDefault < < = aFD . Underline ; break ;
case BASEPROPERTY_FONTDESCRIPTORPART_STRIKEOUT : aDefault < < = aFD . Strikeout ; break ;
case BASEPROPERTY_FONTDESCRIPTORPART_WIDTH : aDefault < < = aFD . Width ; break ;
case BASEPROPERTY_FONTDESCRIPTORPART_PITCH : aDefault < < = aFD . Pitch ; break ;
case BASEPROPERTY_FONTDESCRIPTORPART_CHARWIDTH : aDefault < < = aFD . CharacterWidth ; break ;
case BASEPROPERTY_FONTDESCRIPTORPART_ORIENTATION : aDefault < < = aFD . Orientation ; break ;
case BASEPROPERTY_FONTDESCRIPTORPART_KERNING : aDefault < < = aFD . Kerning ; break ;
case BASEPROPERTY_FONTDESCRIPTORPART_WORDLINEMODE : aDefault < < = aFD . WordLineMode ; break ;
case BASEPROPERTY_FONTDESCRIPTORPART_TYPE : aDefault < < = aFD . Type ; break ;
default : DBG_ERROR ( " FontProperty?! " ) ;
}
}
else
{
switch ( nPropId )
{
2005-01-21 15:47:22 +00:00
case BASEPROPERTY_VERTICALALIGN :
2004-07-05 14:56:58 +00:00
case BASEPROPERTY_BORDERCOLOR :
2003-12-11 10:59:15 +00:00
case BASEPROPERTY_SYMBOL_COLOR :
2000-09-18 16:07:07 +00:00
case BASEPROPERTY_TABSTOP :
case BASEPROPERTY_TEXTCOLOR :
2001-06-01 10:22:52 +00:00
case BASEPROPERTY_TEXTLINECOLOR :
2000-09-18 16:07:07 +00:00
case BASEPROPERTY_DATE :
case BASEPROPERTY_DATESHOWCENTURY :
case BASEPROPERTY_TIME :
case BASEPROPERTY_VALUE_DOUBLE :
2001-04-26 08:09:16 +00:00
case BASEPROPERTY_PROGRESSVALUE :
2001-05-02 11:31:11 +00:00
case BASEPROPERTY_SCROLLVALUE :
case BASEPROPERTY_VISIBLESIZE :
2001-04-26 08:09:16 +00:00
case BASEPROPERTY_BACKGROUNDCOLOR :
2001-06-01 10:22:52 +00:00
case BASEPROPERTY_FILLCOLOR : break ; // Void
2000-09-18 16:07:07 +00:00
2001-06-01 10:22:52 +00:00
case BASEPROPERTY_FONTRELIEF :
case BASEPROPERTY_FONTEMPHASISMARK :
2000-09-18 16:07:07 +00:00
case BASEPROPERTY_MAXTEXTLEN :
case BASEPROPERTY_STATE :
case BASEPROPERTY_EXTDATEFORMAT :
case BASEPROPERTY_EXTTIMEFORMAT :
2001-04-26 08:09:16 +00:00
case BASEPROPERTY_ECHOCHAR : aDefault < < = ( sal_Int16 ) 0 ; break ;
case BASEPROPERTY_BORDER : aDefault < < = ( sal_Int16 ) 1 ; break ;
case BASEPROPERTY_DECIMALACCURACY : aDefault < < = ( sal_Int16 ) 2 ; break ;
case BASEPROPERTY_LINECOUNT : aDefault < < = ( sal_Int16 ) 5 ; break ;
case BASEPROPERTY_ALIGN : aDefault < < = ( sal_Int16 ) PROPERTY_ALIGN_LEFT ; break ;
2001-06-06 07:36:56 +00:00
case BASEPROPERTY_IMAGEALIGN : aDefault < < = ( sal_Int16 ) 1 /*ImageAlign::TOP*/ ; break ;
2004-07-05 14:56:58 +00:00
case BASEPROPERTY_IMAGEPOSITION : aDefault < < = ( sal_Int16 ) 12 /*ImagePosition::Centered*/ ; break ;
2001-10-17 07:47:10 +00:00
case BASEPROPERTY_PUSHBUTTONTYPE : aDefault < < = ( sal_Int16 ) 0 /*PushButtonType::STANDARD*/ ; break ;
2001-04-26 08:09:16 +00:00
case BASEPROPERTY_DATEMAX : aDefault < < = ( sal_Int32 ) Date ( 31 , 12 , 2200 ) . GetDate ( ) ; break ;
case BASEPROPERTY_DATEMIN : aDefault < < = ( sal_Int32 ) Date ( 1 , 1 , 1900 ) . GetDate ( ) ; break ;
case BASEPROPERTY_TIMEMAX : aDefault < < = ( sal_Int32 ) Time ( 23 , 59 ) . GetTime ( ) ; break ;
case BASEPROPERTY_TIMEMIN : aDefault < < = ( sal_Int32 ) 0 ; break ;
case BASEPROPERTY_VALUEMAX_DOUBLE : aDefault < < = ( double ) 1000000 ; break ;
case BASEPROPERTY_VALUEMIN_DOUBLE : aDefault < < = ( double ) - 1000000 ; break ;
case BASEPROPERTY_VALUESTEP_DOUBLE : aDefault < < = ( double ) 1 ; break ;
2001-05-02 11:31:11 +00:00
case BASEPROPERTY_PROGRESSVALUE_MAX : aDefault < < = ( sal_Int32 ) 100 ; break ;
case BASEPROPERTY_PROGRESSVALUE_MIN : aDefault < < = ( sal_Int32 ) 0 ; break ;
case BASEPROPERTY_SCROLLVALUE_MAX : aDefault < < = ( sal_Int32 ) 100 ; break ;
2003-12-11 10:59:15 +00:00
case BASEPROPERTY_SCROLLVALUE_MIN : aDefault < < = ( sal_Int32 ) 0 ; break ;
2001-05-02 11:31:11 +00:00
case BASEPROPERTY_LINEINCREMENT : aDefault < < = ( sal_Int32 ) 1 ; break ;
case BASEPROPERTY_BLOCKINCREMENT : aDefault < < = ( sal_Int32 ) 10 ; break ;
2001-05-04 08:04:05 +00:00
case BASEPROPERTY_ORIENTATION : aDefault < < = ( sal_Int32 ) 0 ; break ;
2003-12-11 10:59:15 +00:00
case BASEPROPERTY_SPINVALUE : aDefault < < = ( sal_Int32 ) 0 ; break ;
case BASEPROPERTY_SPININCREMENT : aDefault < < = ( sal_Int32 ) 1 ; break ;
case BASEPROPERTY_SPINVALUE_MIN : aDefault < < = ( sal_Int32 ) 0 ; break ;
case BASEPROPERTY_SPINVALUE_MAX : aDefault < < = ( sal_Int32 ) 100 ; break ;
case BASEPROPERTY_REPEAT_DELAY : aDefault < < = ( sal_Int32 ) 50 ; break ; // 50 milliseconds
2001-04-26 08:09:16 +00:00
case BASEPROPERTY_DEFAULTCONTROL : aDefault < < = ( ( UnoControlModel * ) this ) - > getServiceName ( ) ; break ;
2000-09-18 16:07:07 +00:00
2003-12-11 10:59:15 +00:00
2001-01-24 14:00:58 +00:00
case BASEPROPERTY_MOVEABLE :
case BASEPROPERTY_CLOSEABLE :
case BASEPROPERTY_SIZEABLE :
2000-09-18 16:07:07 +00:00
case BASEPROPERTY_HSCROLL :
case BASEPROPERTY_DEFAULTBUTTON :
case BASEPROPERTY_MULTILINE :
case BASEPROPERTY_MULTISELECTION :
case BASEPROPERTY_TRISTATE :
case BASEPROPERTY_DROPDOWN :
case BASEPROPERTY_SPIN :
case BASEPROPERTY_READONLY :
case BASEPROPERTY_VSCROLL :
case BASEPROPERTY_NUMSHOWTHOUSANDSEP :
case BASEPROPERTY_STRICTFORMAT :
2003-12-11 10:59:15 +00:00
case BASEPROPERTY_REPEAT :
2001-04-26 08:09:16 +00:00
case BASEPROPERTY_HARDLINEBREAKS : aDefault < < = ( sal_Bool ) sal_False ; break ;
2000-09-18 16:07:07 +00:00
2006-05-04 07:26:08 +00:00
case BASEPROPERTY_WHEELWITHOUTFOCUS :
2004-07-05 14:56:58 +00:00
case BASEPROPERTY_HIDEINACTIVESELECTION :
2004-04-02 09:33:36 +00:00
case BASEPROPERTY_ENFORCE_FORMAT :
2000-09-18 16:07:07 +00:00
case BASEPROPERTY_AUTOCOMPLETE :
2001-10-12 11:31:09 +00:00
case BASEPROPERTY_SCALEIMAGE :
2000-09-18 16:07:07 +00:00
case BASEPROPERTY_ENABLED :
2001-04-26 08:09:16 +00:00
case BASEPROPERTY_PRINTABLE : aDefault < < = ( sal_Bool ) sal_True ; break ;
2000-09-18 16:07:07 +00:00
2001-04-02 08:37:26 +00:00
case BASEPROPERTY_HELPTEXT :
2000-09-18 16:07:07 +00:00
case BASEPROPERTY_HELPURL :
case BASEPROPERTY_IMAGEURL :
case BASEPROPERTY_EDITMASK :
case BASEPROPERTY_LITERALMASK :
case BASEPROPERTY_LABEL :
2001-01-24 14:00:58 +00:00
case BASEPROPERTY_TITLE :
2001-04-26 08:09:16 +00:00
case BASEPROPERTY_TEXT : aDefault < < = : : rtl : : OUString ( ) ; break ;
2000-09-18 16:07:07 +00:00
case BASEPROPERTY_STRINGITEMLIST :
{
: : com : : sun : : star : : uno : : Sequence < : : rtl : : OUString > aStringSeq ;
aDefault < < = aStringSeq ;
}
break ;
case BASEPROPERTY_SELECTEDITEMS :
{
: : com : : sun : : star : : uno : : Sequence < sal_Int16 > aINT16Seq ;
aDefault < < = aINT16Seq ;
}
break ;
case BASEPROPERTY_CURRENCYSYMBOL :
{
2001-08-22 09:05:07 +00:00
Any aDefaultCurrency = : : utl : : ConfigManager : : GetDirectConfigProperty ( : : utl : : ConfigManager : : DEFAULTCURRENCY ) ;
DBG_ASSERT ( TypeClass_STRING = = aDefaultCurrency . getValueTypeClass ( ) , " UnoControlModel::ImplGetDefaultValue: invalid currency config value! " ) ;
: : rtl : : OUString sDefaultCurrency ;
aDefaultCurrency > > = sDefaultCurrency ;
// extract the bank symbol
sal_Int32 nSepPos = sDefaultCurrency . indexOf ( ' - ' ) ;
2002-12-02 09:09:04 +00:00
: : rtl : : OUString sBankSymbol ;
if ( nSepPos > = 0 )
{
sBankSymbol = sDefaultCurrency . copy ( 0 , nSepPos ) ;
sDefaultCurrency = sDefaultCurrency . copy ( nSepPos + 1 ) ;
}
2001-08-22 09:05:07 +00:00
// the remaming is the locale
Locale aLocale ;
nSepPos = sDefaultCurrency . indexOf ( ' - ' ) ;
2002-12-02 09:09:04 +00:00
if ( nSepPos > = 0 )
{
aLocale . Language = sDefaultCurrency . copy ( 0 , nSepPos ) ;
aLocale . Country = sDefaultCurrency . copy ( nSepPos + 1 ) ;
}
2001-08-22 09:05:07 +00:00
LocaleDataWrapper aLocaleInfo ( : : comphelper : : getProcessServiceFactory ( ) , aLocale ) ;
2001-09-05 11:05:22 +00:00
if ( ! sBankSymbol . getLength ( ) )
sBankSymbol = aLocaleInfo . getCurrBankSymbol ( ) ;
2001-08-22 09:05:07 +00:00
// look for the currency entry (for this language) which has the given bank symbol
2006-04-20 12:23:00 +00:00
Sequence < Currency2 > aAllCurrencies = aLocaleInfo . getAllCurrencies ( ) ;
const Currency2 * pAllCurrencies = aAllCurrencies . getConstArray ( ) ;
const Currency2 * pAllCurrenciesEnd = pAllCurrencies + aAllCurrencies . getLength ( ) ;
2001-09-05 11:05:22 +00:00
: : rtl : : OUString sCurrencySymbol = aLocaleInfo . getCurrSymbol ( ) ;
if ( ! sBankSymbol . getLength ( ) )
{
DBG_ASSERT ( pAllCurrencies ! = pAllCurrenciesEnd , " UnoControlModel::ImplGetDefaultValue: no currencies at all! " ) ;
if ( pAllCurrencies ! = pAllCurrenciesEnd )
2001-08-22 09:05:07 +00:00
{
2001-09-05 11:05:22 +00:00
sBankSymbol = pAllCurrencies - > BankSymbol ;
2001-08-22 09:05:07 +00:00
sCurrencySymbol = pAllCurrencies - > Symbol ;
}
2001-09-05 11:05:22 +00:00
}
if ( sBankSymbol . getLength ( ) )
{
2006-04-20 12:23:00 +00:00
bool bLegacy = false ;
2001-09-05 11:05:22 +00:00
for ( ; pAllCurrencies ! = pAllCurrenciesEnd ; + + pAllCurrencies )
if ( pAllCurrencies - > BankSymbol = = sBankSymbol )
{
sCurrencySymbol = pAllCurrencies - > Symbol ;
2006-04-20 12:23:00 +00:00
if ( pAllCurrencies - > LegacyOnly )
bLegacy = true ;
else
break ;
2001-09-05 11:05:22 +00:00
}
2006-04-20 12:23:00 +00:00
DBG_ASSERT ( bLegacy | | pAllCurrencies ! = pAllCurrenciesEnd , " UnoControlModel::ImplGetDefaultValue: did not find the given bank symbol! " ) ;
2001-09-05 11:05:22 +00:00
}
2001-08-22 09:05:07 +00:00
aDefault < < = sCurrencySymbol ;
2000-09-18 16:07:07 +00:00
}
break ;
2003-12-11 10:59:15 +00:00
2000-09-18 16:07:07 +00:00
default : DBG_ERROR ( " ImplGetDefaultValue - unknown Property " ) ;
}
}
return aDefault ;
}
void UnoControlModel : : ImplRegisterProperty ( sal_uInt16 nPropId , const : : com : : sun : : star : : uno : : Any & rDefault )
{
2001-02-05 09:54:01 +00:00
ImplControlProperty * pProp = new ImplControlProperty ( nPropId , rDefault ) ;
2000-09-18 16:07:07 +00:00
mpData - > Insert ( nPropId , pProp ) ;
}
void UnoControlModel : : ImplRegisterProperty ( sal_uInt16 nPropId )
{
ImplRegisterProperty ( nPropId , ImplGetDefaultValue ( nPropId ) ) ;
2001-06-01 10:22:52 +00:00
if ( nPropId = = BASEPROPERTY_FONTDESCRIPTOR )
{
// some properties are not included in the FontDescriptor, but everytime
// when we have a FontDescriptor we want to have these properties too.
// => Easier to register the here, istead everywhere where I register the FontDescriptor...
ImplRegisterProperty ( BASEPROPERTY_TEXTCOLOR ) ;
ImplRegisterProperty ( BASEPROPERTY_TEXTLINECOLOR ) ;
ImplRegisterProperty ( BASEPROPERTY_FONTRELIEF ) ;
ImplRegisterProperty ( BASEPROPERTY_FONTEMPHASISMARK ) ;
}
2000-09-18 16:07:07 +00:00
}
// ::com::sun::star::uno::XInterface
: : com : : sun : : star : : uno : : Any UnoControlModel : : queryAggregation ( const : : com : : sun : : star : : uno : : Type & rType ) throw ( : : com : : sun : : star : : uno : : RuntimeException )
{
: : com : : sun : : star : : uno : : Any aRet = : : cppu : : queryInterface ( rType ,
SAL_STATIC_CAST ( : : com : : sun : : star : : awt : : XControlModel * , this ) ,
SAL_STATIC_CAST ( : : com : : sun : : star : : io : : XPersistObject * , this ) ,
SAL_STATIC_CAST ( : : com : : sun : : star : : lang : : XComponent * , this ) ,
SAL_STATIC_CAST ( : : com : : sun : : star : : lang : : XServiceInfo * , this ) ,
2001-01-24 14:00:58 +00:00
SAL_STATIC_CAST ( : : com : : sun : : star : : util : : XCloneable * , this ) ,
2000-09-18 16:07:07 +00:00
SAL_STATIC_CAST ( : : com : : sun : : star : : beans : : XPropertyState * , this ) ,
SAL_STATIC_CAST ( : : com : : sun : : star : : beans : : XMultiPropertySet * , this ) ,
SAL_STATIC_CAST ( : : com : : sun : : star : : beans : : XFastPropertySet * , this ) ,
SAL_STATIC_CAST ( : : com : : sun : : star : : beans : : XPropertySet * , this ) ,
SAL_STATIC_CAST ( : : com : : sun : : star : : lang : : XTypeProvider * , this ) ,
SAL_STATIC_CAST ( : : com : : sun : : star : : lang : : XUnoTunnel * , this ) ) ;
return ( aRet . hasValue ( ) ? aRet : OWeakAggObject : : queryAggregation ( rType ) ) ;
}
// ::com::sun::star::lang::XUnoTunnel
IMPL_XUNOTUNNEL ( UnoControlModel )
// ::com::sun::star::lang::XTypeProvider
IMPL_XTYPEPROVIDER_START ( UnoControlModel )
getCppuType ( ( : : com : : sun : : star : : uno : : Reference < : : com : : sun : : star : : awt : : XControlModel > * ) NULL ) ,
getCppuType ( ( : : com : : sun : : star : : uno : : Reference < : : com : : sun : : star : : io : : XPersistObject > * ) NULL ) ,
getCppuType ( ( : : com : : sun : : star : : uno : : Reference < : : com : : sun : : star : : lang : : XComponent > * ) NULL ) ,
getCppuType ( ( : : com : : sun : : star : : uno : : Reference < : : com : : sun : : star : : lang : : XServiceInfo > * ) NULL ) ,
2001-01-24 14:00:58 +00:00
getCppuType ( ( : : com : : sun : : star : : uno : : Reference < : : com : : sun : : star : : util : : XCloneable > * ) NULL ) ,
2000-09-18 16:07:07 +00:00
getCppuType ( ( : : com : : sun : : star : : uno : : Reference < : : com : : sun : : star : : beans : : XPropertyState > * ) NULL ) ,
getCppuType ( ( : : com : : sun : : star : : uno : : Reference < : : com : : sun : : star : : beans : : XMultiPropertySet > * ) NULL ) ,
getCppuType ( ( : : com : : sun : : star : : uno : : Reference < : : com : : sun : : star : : beans : : XFastPropertySet > * ) NULL ) ,
getCppuType ( ( : : com : : sun : : star : : uno : : Reference < : : com : : sun : : star : : beans : : XPropertySet > * ) NULL )
IMPL_XTYPEPROVIDER_END
2001-01-24 14:00:58 +00:00
uno : : Reference < util : : XCloneable > UnoControlModel : : createClone ( ) throw ( : : com : : sun : : star : : uno : : RuntimeException )
{
UnoControlModel * pClone = Clone ( ) ;
uno : : Reference < util : : XCloneable > xClone ( ( : : cppu : : OWeakObject * ) pClone , uno : : UNO_QUERY ) ;
return xClone ;
}
2000-09-18 16:07:07 +00:00
// ::com::sun::star::lang::XComponent
void UnoControlModel : : dispose ( ) throw ( : : com : : sun : : star : : uno : : RuntimeException )
{
: : osl : : Guard < : : osl : : Mutex > aGuard ( GetMutex ( ) ) ;
: : com : : sun : : star : : lang : : EventObject aEvt ;
aEvt . Source = ( : : com : : sun : : star : : uno : : XAggregation * ) ( : : cppu : : OWeakAggObject * ) this ;
maDisposeListeners . disposeAndClear ( aEvt ) ;
2001-06-05 04:53:22 +00:00
// let the property set helper notify our property listeners
OPropertySetHelper : : disposing ( ) ;
2000-09-18 16:07:07 +00:00
}
void UnoControlModel : : addEventListener ( const : : com : : sun : : star : : uno : : Reference < : : com : : sun : : star : : lang : : XEventListener > & rxListener ) throw ( : : com : : sun : : star : : uno : : RuntimeException )
{
: : osl : : Guard < : : osl : : Mutex > aGuard ( GetMutex ( ) ) ;
maDisposeListeners . addInterface ( rxListener ) ;
}
void UnoControlModel : : removeEventListener ( const : : com : : sun : : star : : uno : : Reference < : : com : : sun : : star : : lang : : XEventListener > & rxListener ) throw ( : : com : : sun : : star : : uno : : RuntimeException )
{
: : osl : : Guard < : : osl : : Mutex > aGuard ( GetMutex ( ) ) ;
maDisposeListeners . removeInterface ( rxListener ) ;
}
// ::com::sun::star::beans::XPropertyState
: : com : : sun : : star : : beans : : PropertyState UnoControlModel : : getPropertyState ( const : : rtl : : OUString & PropertyName ) throw ( : : com : : sun : : star : : beans : : UnknownPropertyException , : : com : : sun : : star : : uno : : RuntimeException )
{
: : osl : : Guard < : : osl : : Mutex > aGuard ( GetMutex ( ) ) ;
sal_uInt16 nPropId = GetPropertyId ( PropertyName ) ;
: : com : : sun : : star : : uno : : Any aValue = getPropertyValue ( PropertyName ) ;
: : com : : sun : : star : : uno : : Any aDefault = ImplGetDefaultValue ( nPropId ) ;
return CompareProperties ( aValue , aDefault ) ? : : com : : sun : : star : : beans : : PropertyState_DEFAULT_VALUE : : : com : : sun : : star : : beans : : PropertyState_DIRECT_VALUE ;
}
: : com : : sun : : star : : uno : : Sequence < : : com : : sun : : star : : beans : : PropertyState > UnoControlModel : : getPropertyStates ( const : : com : : sun : : star : : uno : : Sequence < : : rtl : : OUString > & PropertyNames ) throw ( : : com : : sun : : star : : beans : : UnknownPropertyException , : : com : : sun : : star : : uno : : RuntimeException )
{
: : osl : : Guard < : : osl : : Mutex > aGuard ( GetMutex ( ) ) ;
sal_uInt32 nNames = PropertyNames . getLength ( ) ;
const : : rtl : : OUString * pNames = PropertyNames . getConstArray ( ) ;
: : com : : sun : : star : : uno : : Sequence < : : com : : sun : : star : : beans : : PropertyState > aStates ( nNames ) ;
: : com : : sun : : star : : beans : : PropertyState * pStates = aStates . getArray ( ) ;
for ( sal_uInt32 n = 0 ; n < nNames ; n + + )
pStates [ n ] = getPropertyState ( pNames [ n ] ) ;
return aStates ;
}
void UnoControlModel : : setPropertyToDefault ( const : : rtl : : OUString & PropertyName ) throw ( : : com : : sun : : star : : beans : : UnknownPropertyException , : : com : : sun : : star : : uno : : RuntimeException )
{
2006-03-29 11:21:46 +00:00
Any aDefaultValue ;
{
: : osl : : Guard < : : osl : : Mutex > aGuard ( GetMutex ( ) ) ;
aDefaultValue = ImplGetDefaultValue ( GetPropertyId ( PropertyName ) ) ;
}
setPropertyValue ( PropertyName , aDefaultValue ) ;
2000-09-18 16:07:07 +00:00
}
: : com : : sun : : star : : uno : : Any UnoControlModel : : getPropertyDefault ( const : : rtl : : OUString & rPropertyName ) throw ( : : com : : sun : : star : : beans : : UnknownPropertyException , : : com : : sun : : star : : lang : : WrappedTargetException , : : com : : sun : : star : : uno : : RuntimeException )
{
: : osl : : Guard < : : osl : : Mutex > aGuard ( GetMutex ( ) ) ;
return ImplGetDefaultValue ( GetPropertyId ( rPropertyName ) ) ;
}
// ::com::sun::star::io::XPersistObjec
: : rtl : : OUString UnoControlModel : : getServiceName ( ) throw ( : : com : : sun : : star : : uno : : RuntimeException )
{
: : osl : : Guard < : : osl : : Mutex > aGuard ( GetMutex ( ) ) ;
DBG_ERROR ( " ServiceName von UnoControlModel ?! " ) ;
return : : rtl : : OUString ( ) ;
}
void UnoControlModel : : write ( const : : com : : sun : : star : : uno : : Reference < : : com : : sun : : star : : io : : XObjectOutputStream > & OutStream ) throw ( : : com : : sun : : star : : io : : IOException , : : com : : sun : : star : : uno : : RuntimeException )
{
: : osl : : Guard < : : osl : : Mutex > aGuard ( GetMutex ( ) ) ;
: : com : : sun : : star : : uno : : Reference < : : com : : sun : : star : : io : : XMarkableStream > xMark ( OutStream , : : com : : sun : : star : : uno : : UNO_QUERY ) ;
DBG_ASSERT ( xMark . is ( ) , " write: no ::com::sun::star::io::XMarkableStream! " ) ;
OutStream - > writeShort ( UNOCONTROL_STREAMVERSION ) ;
ImplPropertyTable aProps ;
2006-06-19 22:05:03 +00:00
sal_uInt32 i ;
for ( i = mpData - > Count ( ) ; i ; )
2000-09-18 16:07:07 +00:00
{
2006-06-19 22:05:03 +00:00
ImplControlProperty * pProp = mpData - > GetObject ( - - i ) ;
2000-09-18 16:07:07 +00:00
if ( ( ( GetPropertyAttribs ( pProp - > GetId ( ) ) & : : com : : sun : : star : : beans : : PropertyAttribute : : TRANSIENT ) = = 0 )
& & ( getPropertyState ( GetPropertyName ( pProp - > GetId ( ) ) ) ! = : : com : : sun : : star : : beans : : PropertyState_DEFAULT_VALUE ) )
{
aProps . Insert ( pProp - > GetId ( ) , pProp ) ;
}
}
sal_uInt32 nProps = aProps . Count ( ) ;
// FontProperty wegen fehlender Unterscheidung zwischen 5.0 / 5.1
// immer im alten Format mitspeichern.
OutStream - > writeLong ( ( long ) aProps . IsKeyValid ( BASEPROPERTY_FONTDESCRIPTOR ) ? ( nProps + 3 ) : nProps ) ;
2006-06-19 22:05:03 +00:00
for ( i = 0 ; i < nProps ; i + + )
2000-09-18 16:07:07 +00:00
{
sal_Int32 nPropDataBeginMark = xMark - > createMark ( ) ;
OutStream - > writeLong ( 0L ) ; // DataLen
2006-06-19 22:05:03 +00:00
ImplControlProperty * pProp = aProps . GetObject ( i ) ;
2000-09-18 16:07:07 +00:00
OutStream - > writeShort ( pProp - > GetId ( ) ) ;
sal_Bool bVoid = pProp - > GetValue ( ) . getValueType ( ) . getTypeClass ( ) = = : : com : : sun : : star : : uno : : TypeClass_VOID ;
OutStream - > writeBoolean ( bVoid ) ;
if ( ! bVoid )
{
const : : com : : sun : : star : : uno : : Any & rValue = pProp - > GetValue ( ) ;
const : : com : : sun : : star : : uno : : Type & rType = rValue . getValueType ( ) ;
if ( rType = = : : getBooleanCppuType ( ) )
{
2006-07-19 14:56:01 +00:00
sal_Bool b = false ;
2000-09-18 16:07:07 +00:00
rValue > > = b ;
OutStream - > writeBoolean ( b ) ;
}
else if ( rType = = : : getCppuType ( ( const : : rtl : : OUString * ) 0 ) )
{
: : rtl : : OUString aUString ;
rValue > > = aUString ;
OutStream - > writeUTF ( aUString ) ;
}
else if ( rType = = : : getCppuType ( ( const sal_uInt16 * ) 0 ) )
{
2006-07-19 14:56:01 +00:00
sal_uInt16 n = 0 ;
2000-09-18 16:07:07 +00:00
rValue > > = n ;
OutStream - > writeShort ( n ) ;
}
else if ( rType = = : : getCppuType ( ( const sal_Int16 * ) 0 ) )
{
2006-07-19 14:56:01 +00:00
sal_Int16 n = 0 ;
2000-09-18 16:07:07 +00:00
rValue > > = n ;
OutStream - > writeShort ( n ) ;
}
else if ( rType = = : : getCppuType ( ( const sal_uInt32 * ) 0 ) )
{
sal_uInt32 n ;
rValue > > = n ;
OutStream - > writeLong ( n ) ;
}
else if ( rType = = : : getCppuType ( ( const sal_Int32 * ) 0 ) )
{
sal_Int32 n ;
rValue > > = n ;
OutStream - > writeLong ( n ) ;
}
else if ( rType = = : : getCppuType ( ( const double * ) 0 ) )
{
double n ;
rValue > > = n ;
OutStream - > writeDouble ( n ) ;
}
else if ( rType = = : : getCppuType ( ( const : : com : : sun : : star : : awt : : FontDescriptor * ) 0 ) )
{
: : com : : sun : : star : : awt : : FontDescriptor aFD ;
rValue > > = aFD ;
OutStream - > writeUTF ( aFD . Name ) ;
OutStream - > writeShort ( aFD . Height ) ;
OutStream - > writeShort ( aFD . Width ) ;
OutStream - > writeUTF ( aFD . StyleName ) ;
OutStream - > writeShort ( aFD . Family ) ;
OutStream - > writeShort ( aFD . CharSet ) ;
OutStream - > writeShort ( aFD . Pitch ) ;
OutStream - > writeDouble ( aFD . CharacterWidth ) ;
OutStream - > writeDouble ( aFD . Weight ) ;
2006-10-12 09:32:56 +00:00
OutStream - > writeShort (
sal : : static_int_cast < sal_Int16 > ( aFD . Slant ) ) ;
2000-09-18 16:07:07 +00:00
OutStream - > writeShort ( aFD . Underline ) ;
OutStream - > writeShort ( aFD . Strikeout ) ;
OutStream - > writeDouble ( aFD . Orientation ) ;
OutStream - > writeBoolean ( aFD . Kerning ) ;
OutStream - > writeBoolean ( aFD . WordLineMode ) ;
OutStream - > writeShort ( aFD . Type ) ;
}
else if ( rType = = : : getCppuType ( ( const : : com : : sun : : star : : uno : : Sequence < : : rtl : : OUString > * ) 0 ) )
{
: : com : : sun : : star : : uno : : Sequence < : : rtl : : OUString > aSeq ;
rValue > > = aSeq ;
long nEntries = aSeq . getLength ( ) ;
OutStream - > writeLong ( nEntries ) ;
for ( long n = 0 ; n < nEntries ; n + + )
OutStream - > writeUTF ( aSeq . getConstArray ( ) [ n ] ) ;
}
else if ( rType = = : : getCppuType ( ( const : : com : : sun : : star : : uno : : Sequence < sal_uInt16 > * ) 0 ) )
{
: : com : : sun : : star : : uno : : Sequence < sal_uInt16 > aSeq ;
rValue > > = aSeq ;
long nEntries = aSeq . getLength ( ) ;
OutStream - > writeLong ( nEntries ) ;
for ( long n = 0 ; n < nEntries ; n + + )
OutStream - > writeShort ( aSeq . getConstArray ( ) [ n ] ) ;
}
else if ( rType = = : : getCppuType ( ( const : : com : : sun : : star : : uno : : Sequence < sal_Int16 > * ) 0 ) )
{
: : com : : sun : : star : : uno : : Sequence < sal_Int16 > aSeq ;
rValue > > = aSeq ;
long nEntries = aSeq . getLength ( ) ;
OutStream - > writeLong ( nEntries ) ;
for ( long n = 0 ; n < nEntries ; n + + )
OutStream - > writeShort ( aSeq . getConstArray ( ) [ n ] ) ;
}
2006-03-31 10:55:55 +00:00
else if ( rType . getTypeClass ( ) = = TypeClass_ENUM )
2000-09-18 16:07:07 +00:00
{
2006-03-31 10:55:55 +00:00
sal_Int32 nAsInt = 0 ;
: : cppu : : enum2int ( nAsInt , rValue ) ;
OutStream - > writeLong ( nAsInt ) ;
}
2006-01-19 14:35:39 +00:00
# if OSL_DEBUG_LEVEL > 0
2006-03-31 10:55:55 +00:00
else
{
2006-01-19 14:35:39 +00:00
: : rtl : : OString sMessage ( " UnoControlModel::write: don't know how to handle a property of type ' " ) ;
: : rtl : : OUString sTypeName ( rType . getTypeName ( ) ) ;
sMessage + = : : rtl : : OString ( sTypeName . getStr ( ) , sTypeName . getLength ( ) , RTL_TEXTENCODING_ASCII_US ) ;
sMessage + = " '. \n (Currently handling property ' " ;
: : rtl : : OUString sPropertyName ( GetPropertyName ( pProp - > GetId ( ) ) ) ;
sMessage + = : : rtl : : OString ( sPropertyName . getStr ( ) , sPropertyName . getLength ( ) , osl_getThreadTextEncoding ( ) ) ;
sMessage + = " '.) " ;
DBG_ERROR ( sMessage ) ;
2000-09-18 16:07:07 +00:00
}
2006-03-31 10:55:55 +00:00
# endif
2000-09-18 16:07:07 +00:00
}
sal_Int32 nPropDataLen = xMark - > offsetToMark ( nPropDataBeginMark ) ;
xMark - > jumpToMark ( nPropDataBeginMark ) ;
OutStream - > writeLong ( nPropDataLen ) ;
xMark - > jumpToFurthest ( ) ;
xMark - > deleteMark ( nPropDataBeginMark ) ;
}
2001-02-05 09:54:01 +00:00
ImplControlProperty * pProp = aProps . Get ( BASEPROPERTY_FONTDESCRIPTOR ) ;
2000-09-18 16:07:07 +00:00
if ( pProp )
{
// Solange wir keinen 5.0-Export haben, muss das alte
// Format mit rausgeschrieben werden...
: : com : : sun : : star : : awt : : FontDescriptor aFD ;
pProp - > GetValue ( ) > > = aFD ;
for ( sal_uInt16 n = BASEPROPERTY_FONT_TYPE ; n < = BASEPROPERTY_FONT_ATTRIBS ; n + + )
{
sal_Int32 nPropDataBeginMark = xMark - > createMark ( ) ;
OutStream - > writeLong ( 0L ) ; // DataLen
OutStream - > writeShort ( n ) ; // PropId
OutStream - > writeBoolean ( sal_False ) ; // Void
if ( n = = BASEPROPERTY_FONT_TYPE )
{
OutStream - > writeUTF ( aFD . Name ) ;
OutStream - > writeUTF ( aFD . StyleName ) ;
OutStream - > writeShort ( aFD . Family ) ;
OutStream - > writeShort ( aFD . CharSet ) ;
OutStream - > writeShort ( aFD . Pitch ) ;
}
else if ( n = = BASEPROPERTY_FONT_SIZE )
{
OutStream - > writeLong ( aFD . Width ) ;
OutStream - > writeLong ( aFD . Height ) ;
2006-10-12 09:32:56 +00:00
OutStream - > writeShort (
sal : : static_int_cast < sal_Int16 > (
VCLUnoHelper : : ConvertFontWidth ( aFD . CharacterWidth ) ) ) ;
2000-09-18 16:07:07 +00:00
}
else if ( n = = BASEPROPERTY_FONT_ATTRIBS )
{
2006-10-12 09:32:56 +00:00
OutStream - > writeShort (
sal : : static_int_cast < sal_Int16 > (
VCLUnoHelper : : ConvertFontWeight ( aFD . Weight ) ) ) ;
OutStream - > writeShort (
sal : : static_int_cast < sal_Int16 > ( aFD . Slant ) ) ;
2000-09-18 16:07:07 +00:00
OutStream - > writeShort ( aFD . Underline ) ;
OutStream - > writeShort ( aFD . Strikeout ) ;
2001-06-05 04:53:22 +00:00
OutStream - > writeShort ( ( short ) ( aFD . Orientation * 10 ) ) ;
2000-09-18 16:07:07 +00:00
OutStream - > writeBoolean ( aFD . Kerning ) ;
OutStream - > writeBoolean ( aFD . WordLineMode ) ;
}
else
{
DBG_ERROR ( " Property?! " ) ;
}
sal_Int32 nPropDataLen = xMark - > offsetToMark ( nPropDataBeginMark ) ;
xMark - > jumpToMark ( nPropDataBeginMark ) ;
OutStream - > writeLong ( nPropDataLen ) ;
xMark - > jumpToFurthest ( ) ;
xMark - > deleteMark ( nPropDataBeginMark ) ;
}
}
}
void UnoControlModel : : read ( const : : com : : sun : : star : : uno : : Reference < : : com : : sun : : star : : io : : XObjectInputStream > & InStream ) throw ( : : com : : sun : : star : : io : : IOException , : : com : : sun : : star : : uno : : RuntimeException )
{
: : osl : : Guard < : : osl : : Mutex > aGuard ( GetMutex ( ) ) ;
: : com : : sun : : star : : uno : : Reference < : : com : : sun : : star : : io : : XMarkableStream > xMark ( InStream , : : com : : sun : : star : : uno : : UNO_QUERY ) ;
DBG_ASSERT ( xMark . is ( ) , " read: no ::com::sun::star::io::XMarkableStream! " ) ;
short nVersion = InStream - > readShort ( ) ;
sal_uInt32 nProps = ( sal_uInt32 ) InStream - > readLong ( ) ;
: : com : : sun : : star : : uno : : Sequence < : : rtl : : OUString > aProps ( nProps ) ;
: : com : : sun : : star : : uno : : Sequence < : : com : : sun : : star : : uno : : Any > aValues ( nProps ) ;
sal_Bool bInvalidEntries = sal_False ;
// Dummerweise kein Mark fuer den gesamten Block, es koennen also
// nur Properties geaendert werden, es koennen aber nicht spaeter mal Daten
// fuer das Model hinter den Properties geschrieben werden.
// Fuer den Import der alten ::com::sun::star::awt::FontDescriptor-Teile
: : com : : sun : : star : : awt : : FontDescriptor * pFD = NULL ;
2006-06-19 22:05:03 +00:00
sal_uInt32 i ;
for ( i = 0 ; i < nProps ; i + + )
2000-09-18 16:07:07 +00:00
{
sal_Int32 nPropDataBeginMark = xMark - > createMark ( ) ;
sal_Int32 nPropDataLen = InStream - > readLong ( ) ;
sal_uInt16 nPropId = ( sal_uInt16 ) InStream - > readShort ( ) ;
: : com : : sun : : star : : uno : : Any aValue ;
sal_Bool bIsVoid = InStream - > readBoolean ( ) ;
if ( ! bIsVoid )
{
const : : com : : sun : : star : : uno : : Type * pType = mpData - > Get ( nPropId ) ? GetPropertyType ( nPropId ) : NULL ;
if ( pType )
{
if ( * pType = = : : getBooleanCppuType ( ) )
{
sal_Bool b = InStream - > readBoolean ( ) ;
aValue < < = b ;
}
else if ( * pType = = : : getCppuType ( ( const : : rtl : : OUString * ) 0 ) )
{
: : rtl : : OUString aUTF = InStream - > readUTF ( ) ;
aValue < < = aUTF ;
}
else if ( * pType = = : : getCppuType ( ( const sal_uInt16 * ) 0 ) )
{
sal_uInt16 n = InStream - > readShort ( ) ;
aValue < < = n ;
}
else if ( * pType = = : : getCppuType ( ( const sal_Int16 * ) 0 ) )
{
sal_Int16 n = InStream - > readShort ( ) ;
aValue < < = n ;
}
else if ( * pType = = : : getCppuType ( ( const sal_uInt32 * ) 0 ) )
{
sal_uInt32 n = InStream - > readLong ( ) ;
aValue < < = n ;
}
else if ( * pType = = : : getCppuType ( ( const sal_Int32 * ) 0 ) )
{
sal_Int32 n = InStream - > readLong ( ) ;
aValue < < = n ;
}
2001-03-21 13:26:20 +00:00
else if ( * pType = = : : getCppuType ( ( const double * ) 0 ) )
2000-09-18 16:07:07 +00:00
{
double n = InStream - > readDouble ( ) ;
aValue < < = n ;
}
else if ( * pType = = : : getCppuType ( ( const : : com : : sun : : star : : awt : : FontDescriptor * ) 0 ) )
{
: : com : : sun : : star : : awt : : FontDescriptor aFD ;
aFD . Name = InStream - > readUTF ( ) ;
aFD . Height = InStream - > readShort ( ) ;
aFD . Width = InStream - > readShort ( ) ;
aFD . StyleName = InStream - > readUTF ( ) ;
aFD . Family = InStream - > readShort ( ) ;
aFD . CharSet = InStream - > readShort ( ) ;
aFD . Pitch = InStream - > readShort ( ) ;
2001-06-05 04:53:22 +00:00
aFD . CharacterWidth = ( float ) InStream - > readDouble ( ) ;
aFD . Weight = ( float ) InStream - > readDouble ( ) ;
2000-09-18 16:07:07 +00:00
aFD . Slant = ( : : com : : sun : : star : : awt : : FontSlant ) InStream - > readShort ( ) ;
aFD . Underline = InStream - > readShort ( ) ;
aFD . Strikeout = InStream - > readShort ( ) ;
2001-06-05 04:53:22 +00:00
aFD . Orientation = ( float ) InStream - > readDouble ( ) ;
2000-09-18 16:07:07 +00:00
aFD . Kerning = InStream - > readBoolean ( ) ;
aFD . WordLineMode = InStream - > readBoolean ( ) ;
aFD . Type = InStream - > readShort ( ) ;
aValue < < = aFD ;
}
else if ( * pType = = : : getCppuType ( ( const : : com : : sun : : star : : uno : : Sequence < : : rtl : : OUString > * ) 0 ) )
{
long nEntries = InStream - > readLong ( ) ;
: : com : : sun : : star : : uno : : Sequence < : : rtl : : OUString > aSeq ( nEntries ) ;
for ( long n = 0 ; n < nEntries ; n + + )
aSeq . getArray ( ) [ n ] = InStream - > readUTF ( ) ;
aValue < < = aSeq ;
}
else if ( * pType = = : : getCppuType ( ( const : : com : : sun : : star : : uno : : Sequence < sal_uInt16 > * ) 0 ) )
{
long nEntries = InStream - > readLong ( ) ;
: : com : : sun : : star : : uno : : Sequence < sal_uInt16 > aSeq ( nEntries ) ;
for ( long n = 0 ; n < nEntries ; n + + )
aSeq . getArray ( ) [ n ] = ( sal_uInt16 ) InStream - > readShort ( ) ;
aValue < < = aSeq ;
}
else if ( * pType = = : : getCppuType ( ( const : : com : : sun : : star : : uno : : Sequence < sal_Int16 > * ) 0 ) )
{
long nEntries = InStream - > readLong ( ) ;
: : com : : sun : : star : : uno : : Sequence < sal_Int16 > aSeq ( nEntries ) ;
for ( long n = 0 ; n < nEntries ; n + + )
aSeq . getArray ( ) [ n ] = ( sal_Int16 ) InStream - > readShort ( ) ;
aValue < < = aSeq ;
}
2006-03-31 10:55:55 +00:00
else if ( pType - > getTypeClass ( ) = = TypeClass_ENUM )
{
sal_Int32 nAsInt = InStream - > readLong ( ) ;
aValue = : : cppu : : int2enum ( nAsInt , * pType ) ;
}
else
{
: : rtl : : OString sMessage ( " UnoControlModel::read: don't know how to handle a property of type ' " ) ;
: : rtl : : OUString sTypeName ( pType - > getTypeName ( ) ) ;
sMessage + = : : rtl : : OString ( sTypeName . getStr ( ) , sTypeName . getLength ( ) , RTL_TEXTENCODING_ASCII_US ) ;
sMessage + = " '. \n (Currently handling property ' " ;
: : rtl : : OUString sPropertyName ( GetPropertyName ( nPropId ) ) ;
sMessage + = : : rtl : : OString ( sPropertyName . getStr ( ) , sPropertyName . getLength ( ) , osl_getThreadTextEncoding ( ) ) ;
sMessage + = " '.) " ;
DBG_ERROR ( sMessage ) ;
}
2000-09-18 16:07:07 +00:00
}
else
{
// Altes Geraffel aus 5.0
if ( nPropId = = BASEPROPERTY_FONT_TYPE )
{
// Sonst ist es nur die redundante Info fuer alte Versionen
// Daten werden durch MarkableStream geskippt.
if ( nVersion < 2 )
{
if ( ! pFD )
{
pFD = new : : com : : sun : : star : : awt : : FontDescriptor ;
2001-02-05 09:54:01 +00:00
ImplControlProperty * pProp = mpData - > Get ( BASEPROPERTY_FONTDESCRIPTOR ) ;
2000-09-18 16:07:07 +00:00
if ( pProp ) // wegen den Defaults...
{
pFD = new : : com : : sun : : star : : awt : : FontDescriptor ;
pProp - > GetValue ( ) > > = * pFD ;
}
}
pFD - > Name = InStream - > readUTF ( ) ;
pFD - > StyleName = InStream - > readUTF ( ) ;
pFD - > Family = InStream - > readShort ( ) ;
pFD - > CharSet = InStream - > readShort ( ) ;
pFD - > Pitch = InStream - > readShort ( ) ;
}
}
else if ( nPropId = = BASEPROPERTY_FONT_SIZE )
{
if ( nVersion < 2 )
{
if ( ! pFD )
{
pFD = new : : com : : sun : : star : : awt : : FontDescriptor ;
2001-02-05 09:54:01 +00:00
ImplControlProperty * pProp = mpData - > Get ( BASEPROPERTY_FONTDESCRIPTOR ) ;
2000-09-18 16:07:07 +00:00
if ( pProp ) // wegen den Defaults...
pProp - > GetValue ( ) > > = * pFD ;
}
2001-06-05 04:53:22 +00:00
pFD - > Width = ( sal_Int16 ) InStream - > readLong ( ) ;
pFD - > Height = ( sal_Int16 ) InStream - > readLong ( ) ;
2000-09-18 16:07:07 +00:00
InStream - > readShort ( ) ; // ::com::sun::star::awt::FontWidth ignorieren - wurde mal falsch geschrieben und wird nicht gebraucht.
pFD - > CharacterWidth = : : com : : sun : : star : : awt : : FontWidth : : DONTKNOW ;
}
}
else if ( nPropId = = BASEPROPERTY_FONT_ATTRIBS )
{
if ( nVersion < 2 )
{
if ( ! pFD )
{
pFD = new : : com : : sun : : star : : awt : : FontDescriptor ;
2001-02-05 09:54:01 +00:00
ImplControlProperty * pProp = mpData - > Get ( BASEPROPERTY_FONTDESCRIPTOR ) ;
2000-09-18 16:07:07 +00:00
if ( pProp ) // wegen den Defaults...
pProp - > GetValue ( ) > > = * pFD ;
}
pFD - > Weight = VCLUnoHelper : : ConvertFontWeight ( ( FontWeight ) InStream - > readShort ( ) ) ;
pFD - > Slant = ( : : com : : sun : : star : : awt : : FontSlant ) InStream - > readShort ( ) ;
pFD - > Underline = InStream - > readShort ( ) ;
pFD - > Strikeout = InStream - > readShort ( ) ;
2001-06-05 04:53:22 +00:00
pFD - > Orientation = ( ( float ) ( double ) InStream - > readShort ( ) ) / 10 ;
2000-09-18 16:07:07 +00:00
pFD - > Kerning = InStream - > readBoolean ( ) ;
pFD - > WordLineMode = InStream - > readBoolean ( ) ;
}
}
else
{
DBG_ERROR ( " read: unknown Property! " ) ;
}
}
}
else // bVoid
{
if ( nPropId = = BASEPROPERTY_FONTDESCRIPTOR )
{
EmptyFontDescriptor aFD ;
aValue < < = aFD ;
}
}
if ( mpData - > Get ( nPropId ) )
{
2006-06-19 22:05:03 +00:00
aProps . getArray ( ) [ i ] = GetPropertyName ( nPropId ) ;
aValues . getArray ( ) [ i ] = aValue ;
2000-09-18 16:07:07 +00:00
}
else
{
bInvalidEntries = sal_True ;
}
// Falls bereits mehr drinsteht als diese Version kennt:
xMark - > jumpToMark ( nPropDataBeginMark ) ;
InStream - > skipBytes ( nPropDataLen ) ;
xMark - > deleteMark ( nPropDataBeginMark ) ;
}
if ( bInvalidEntries )
{
2006-06-19 22:05:03 +00:00
for ( i = 0 ; i < ( sal_uInt32 ) aProps . getLength ( ) ; i + + )
2000-09-18 16:07:07 +00:00
{
2006-06-19 22:05:03 +00:00
if ( ! aProps . getConstArray ( ) [ i ] . getLength ( ) )
2000-09-18 16:07:07 +00:00
{
2006-06-19 22:05:03 +00:00
: : comphelper : : removeElementAt ( aProps , i ) ;
: : comphelper : : removeElementAt ( aValues , i ) ;
i - - ;
2000-09-18 16:07:07 +00:00
}
}
}
2006-01-19 14:35:39 +00:00
try
{
setPropertyValues ( aProps , aValues ) ;
}
catch ( const Exception & )
{
DBG_UNHANDLED_EXCEPTION ( ) ;
}
2000-09-18 16:07:07 +00:00
if ( pFD )
{
: : com : : sun : : star : : uno : : Any aValue ;
aValue < < = * pFD ;
setPropertyValue ( GetPropertyName ( BASEPROPERTY_FONTDESCRIPTOR ) , aValue ) ;
delete pFD ;
}
}
// ::com::sun::star::lang::XServiceInfo
: : rtl : : OUString UnoControlModel : : getImplementationName ( ) throw ( : : com : : sun : : star : : uno : : RuntimeException )
{
DBG_ERROR ( " This method should be overloaded! " ) ;
return : : rtl : : OUString ( ) ;
}
sal_Bool UnoControlModel : : supportsService ( const : : rtl : : OUString & rServiceName ) throw ( : : com : : sun : : star : : uno : : RuntimeException )
{
: : osl : : Guard < : : osl : : Mutex > aGuard ( GetMutex ( ) ) ;
: : com : : sun : : star : : uno : : Sequence < : : rtl : : OUString > aSNL = getSupportedServiceNames ( ) ;
const : : rtl : : OUString * pArray = aSNL . getConstArray ( ) ;
for ( sal_Int32 i = 0 ; i < aSNL . getLength ( ) ; i + + )
if ( pArray [ i ] = = rServiceName )
return sal_True ;
return sal_False ;
}
: : com : : sun : : star : : uno : : Sequence < : : rtl : : OUString > UnoControlModel : : getSupportedServiceNames ( ) throw ( : : com : : sun : : star : : uno : : RuntimeException )
{
2003-03-27 16:05:12 +00:00
: : rtl : : OUString sName ( RTL_CONSTASCII_USTRINGPARAM ( " com.sun.star.awt.UnoControlModel " ) ) ;
return Sequence < : : rtl : : OUString > ( & sName , 1 ) ;
2000-09-18 16:07:07 +00:00
}
// ::cppu::OPropertySetHelper
: : cppu : : IPropertyArrayHelper & UnoControlModel : : getInfoHelper ( )
{
DBG_ERROR ( " UnoControlModel::getInfoHelper() not possible! " ) ;
return * ( : : cppu : : IPropertyArrayHelper * ) NULL ;
}
2001-03-13 14:57:30 +00:00
// ------------------------------------------------------------------
template < class TYPE >
sal_Bool convertType ( Any & _rConvertedValue , const Any & _rNewValueTest , const TYPE * /* _pTypeDisambiguation */ )
{
TYPE tValue ;
if ( _rNewValueTest > > = tValue )
{
_rConvertedValue < < = tValue ;
return sal_True ;
}
}
// ..................................................................
sal_Bool UnoControlModel : : convertFastPropertyValue ( Any & rConvertedValue , Any & rOldValue , sal_Int32 nPropId , const Any & rValue ) throw ( IllegalArgumentException )
2000-09-18 16:07:07 +00:00
{
: : osl : : Guard < : : osl : : Mutex > aGuard ( GetMutex ( ) ) ;
sal_Bool bVoid = rValue . getValueType ( ) . getTypeClass ( ) = = : : com : : sun : : star : : uno : : TypeClass_VOID ;
if ( bVoid )
{
rConvertedValue . clear ( ) ;
}
else
{
2001-06-05 04:53:22 +00:00
const : : com : : sun : : star : : uno : : Type * pDestType = GetPropertyType ( ( sal_uInt16 ) nPropId ) ;
2001-03-13 14:57:30 +00:00
if ( pDestType - > getTypeClass ( ) = = TypeClass_ANY )
2000-09-18 16:07:07 +00:00
{
rConvertedValue = rValue ;
}
else
{
2001-11-16 12:57:20 +00:00
if ( pDestType - > equals ( rValue . getValueType ( ) ) )
2001-03-13 14:57:30 +00:00
{
2001-11-16 12:57:20 +00:00
rConvertedValue = rValue ;
}
else
{
BOOL bConverted = FALSE ;
2001-03-13 14:57:30 +00:00
// 13.03.2001 - 84923 - frank.schoenheit@germany.sun.com
2001-11-16 12:57:20 +00:00
2001-03-13 14:57:30 +00:00
switch ( pDestType - > getTypeClass ( ) )
{
2002-10-08 11:32:43 +00:00
case TypeClass_DOUBLE :
{
// try as double
double nAsDouble = 0 ;
2006-10-12 09:32:56 +00:00
bConverted = ( rValue > > = nAsDouble ) ;
if ( bConverted )
2002-10-08 11:32:43 +00:00
rConvertedValue < < = nAsDouble ;
else
{ // try as integer - 96136 - 2002-10-08 - fs@openoffice.org
sal_Int32 nAsInteger = 0 ;
2006-10-12 09:32:56 +00:00
bConverted = ( rValue > > = nAsInteger ) ;
if ( bConverted )
2002-10-08 11:32:43 +00:00
rConvertedValue < < = ( double ) nAsInteger ;
}
}
break ;
2001-03-13 14:57:30 +00:00
case TypeClass_SHORT :
2001-11-16 12:57:20 +00:00
{
sal_Int16 n ;
2006-10-12 09:32:56 +00:00
bConverted = ( rValue > > = n ) ;
if ( bConverted )
2001-11-16 12:57:20 +00:00
rConvertedValue < < = n ;
}
break ;
2001-03-13 14:57:30 +00:00
case TypeClass_UNSIGNED_SHORT :
2001-11-16 12:57:20 +00:00
{
sal_uInt16 n ;
2006-10-12 09:32:56 +00:00
bConverted = ( rValue > > = n ) ;
if ( bConverted )
2001-11-16 12:57:20 +00:00
rConvertedValue < < = n ;
}
break ;
2001-03-13 14:57:30 +00:00
case TypeClass_LONG :
2001-11-16 12:57:20 +00:00
{
sal_Int32 n ;
2006-10-12 09:32:56 +00:00
bConverted = ( rValue > > = n ) ;
if ( bConverted )
2001-11-16 12:57:20 +00:00
rConvertedValue < < = n ;
}
break ;
2001-03-13 14:57:30 +00:00
case TypeClass_UNSIGNED_LONG :
2001-11-16 12:57:20 +00:00
{
sal_uInt32 n ;
2006-10-12 09:32:56 +00:00
bConverted = ( rValue > > = n ) ;
if ( bConverted )
2001-11-16 12:57:20 +00:00
rConvertedValue < < = n ;
}
break ;
2002-07-29 11:20:48 +00:00
case TypeClass_INTERFACE :
{
if ( rValue . getValueType ( ) . getTypeClass ( ) = = TypeClass_INTERFACE )
{
Reference < XInterface > xPure ;
if ( ( rValue > > = xPure ) & & xPure . is ( ) )
{
rConvertedValue = xPure - > queryInterface ( * pDestType ) ;
bConverted = rConvertedValue . hasValue ( ) ;
}
}
}
break ;
2005-01-21 15:47:22 +00:00
case TypeClass_ENUM :
{
sal_Int32 nValue = 0 ;
2006-10-12 09:32:56 +00:00
bConverted = ( rValue > > = nValue ) ;
if ( bConverted )
2005-01-21 15:47:22 +00:00
rConvertedValue = : : cppu : : int2enum ( nValue , * pDestType ) ;
}
break ;
2006-06-19 22:05:03 +00:00
default : ; // avoid compiler warning
2001-03-13 14:57:30 +00:00
}
2001-11-16 12:57:20 +00:00
if ( ! bConverted )
{
2001-03-13 14:57:30 +00:00
throw : : com : : sun : : star : : lang : : IllegalArgumentException (
2003-03-27 16:05:12 +00:00
: : rtl : : OUString : : createFromAscii ( " Unable to convert the given value for the property " )
+ = GetPropertyName ( ( sal_uInt16 ) nPropId ) ,
static_cast < : : com : : sun : : star : : beans : : XPropertySet * > ( this ) ,
1 ) ;
2001-11-16 12:57:20 +00:00
}
2001-03-13 14:57:30 +00:00
}
2000-09-18 16:07:07 +00:00
}
}
2001-03-13 14:57:30 +00:00
// the current value
2000-09-18 16:07:07 +00:00
getFastPropertyValue ( rOldValue , nPropId ) ;
return ! CompareProperties ( rConvertedValue , rOldValue ) ;
}
void UnoControlModel : : setFastPropertyValue_NoBroadcast ( sal_Int32 nPropId , const : : com : : sun : : star : : uno : : Any & rValue ) throw ( : : com : : sun : : star : : uno : : Exception )
{
: : osl : : Guard < : : osl : : Mutex > aGuard ( GetMutex ( ) ) ;
// Fehlt: Die gefakten Einzelproperties des FontDescriptors...
2001-02-05 09:54:01 +00:00
ImplControlProperty * pProp = mpData - > Get ( nPropId ) ;
2000-09-18 16:07:07 +00:00
if ( pProp )
{
2006-06-19 22:05:03 +00:00
DBG_ASSERT ( ( rValue . getValueType ( ) . getTypeClass ( ) ! = : : com : : sun : : star : : uno : : TypeClass_VOID ) | | ( GetPropertyAttribs ( ( sal_uInt16 ) nPropId ) & : : com : : sun : : star : : beans : : PropertyAttribute : : MAYBEVOID ) , " Property darf nicht VOID sein! " ) ;
2001-06-05 04:53:22 +00:00
ImplPropertyChanged ( ( sal_uInt16 ) nPropId ) ;
2000-09-18 16:07:07 +00:00
pProp - > SetValue ( rValue ) ;
}
else
{
// exception...
DBG_ERROR ( " SetPropertyValues: Invalid Property! " ) ;
}
}
void UnoControlModel : : getFastPropertyValue ( : : com : : sun : : star : : uno : : Any & rValue , sal_Int32 nPropId ) const
{
: : osl : : Guard < : : osl : : Mutex > aGuard ( ( ( UnoControlModel * ) this ) - > GetMutex ( ) ) ;
2001-02-05 09:54:01 +00:00
ImplControlProperty * pProp = mpData - > Get ( nPropId ) ;
2000-09-18 16:07:07 +00:00
if ( pProp )
rValue = pProp - > GetValue ( ) ;
else if ( ( nPropId > = BASEPROPERTY_FONTDESCRIPTORPART_START ) & & ( nPropId < = BASEPROPERTY_FONTDESCRIPTORPART_END ) )
{
pProp = mpData - > Get ( BASEPROPERTY_FONTDESCRIPTOR ) ;
: : com : : sun : : star : : awt : : FontDescriptor aFD ;
pProp - > GetValue ( ) > > = aFD ;
switch ( nPropId )
{
case BASEPROPERTY_FONTDESCRIPTORPART_NAME : rValue < < = aFD . Name ;
break ;
case BASEPROPERTY_FONTDESCRIPTORPART_STYLENAME : rValue < < = aFD . StyleName ;
break ;
case BASEPROPERTY_FONTDESCRIPTORPART_FAMILY : rValue < < = aFD . Family ;
break ;
case BASEPROPERTY_FONTDESCRIPTORPART_CHARSET : rValue < < = aFD . CharSet ;
break ;
case BASEPROPERTY_FONTDESCRIPTORPART_HEIGHT : rValue < < = ( float ) aFD . Height ;
break ;
case BASEPROPERTY_FONTDESCRIPTORPART_WEIGHT : rValue < < = aFD . Weight ;
break ;
case BASEPROPERTY_FONTDESCRIPTORPART_SLANT : rValue < < = ( sal_Int16 ) aFD . Slant ;
break ;
case BASEPROPERTY_FONTDESCRIPTORPART_UNDERLINE : rValue < < = aFD . Underline ;
break ;
case BASEPROPERTY_FONTDESCRIPTORPART_STRIKEOUT : rValue < < = aFD . Strikeout ;
break ;
case BASEPROPERTY_FONTDESCRIPTORPART_WIDTH : rValue < < = aFD . Width ;
break ;
case BASEPROPERTY_FONTDESCRIPTORPART_PITCH : rValue < < = aFD . Pitch ;
break ;
case BASEPROPERTY_FONTDESCRIPTORPART_CHARWIDTH : rValue < < = aFD . CharacterWidth ;
break ;
case BASEPROPERTY_FONTDESCRIPTORPART_ORIENTATION : rValue < < = aFD . Orientation ;
break ;
case BASEPROPERTY_FONTDESCRIPTORPART_KERNING : rValue < < = aFD . Kerning ;
break ;
case BASEPROPERTY_FONTDESCRIPTORPART_WORDLINEMODE : rValue < < = aFD . WordLineMode ;
break ;
case BASEPROPERTY_FONTDESCRIPTORPART_TYPE : rValue < < = aFD . Type ;
break ;
default : DBG_ERROR ( " FontProperty?! " ) ;
}
}
else
{
DBG_ERROR ( " getFastPropertyValue - invalid Property! " ) ;
}
}
// ::com::sun::star::beans::XPropertySet
void UnoControlModel : : setPropertyValue ( const : : rtl : : OUString & rPropertyName , const : : com : : sun : : star : : uno : : Any & rValue ) throw ( : : com : : sun : : star : : beans : : UnknownPropertyException , : : com : : sun : : star : : beans : : PropertyVetoException , : : com : : sun : : star : : lang : : IllegalArgumentException , : : com : : sun : : star : : lang : : WrappedTargetException , : : com : : sun : : star : : uno : : RuntimeException )
{
2006-03-29 11:21:46 +00:00
sal_Int32 nPropId = 0 ;
{
: : osl : : Guard < : : osl : : Mutex > aGuard ( GetMutex ( ) ) ;
nPropId = ( sal_Int32 ) GetPropertyId ( rPropertyName ) ;
DBG_ASSERT ( nPropId , " Invalid ID in UnoControlModel::setPropertyValue " ) ;
}
2000-09-18 16:07:07 +00:00
setFastPropertyValue ( nPropId , rValue ) ;
}
// ::com::sun::star::beans::XFastPropertySet
void UnoControlModel : : setFastPropertyValue ( sal_Int32 nPropId , const : : com : : sun : : star : : uno : : Any & rValue ) throw ( : : com : : sun : : star : : beans : : UnknownPropertyException , : : com : : sun : : star : : beans : : PropertyVetoException , : : com : : sun : : star : : lang : : IllegalArgumentException , : : com : : sun : : star : : lang : : WrappedTargetException , : : com : : sun : : star : : uno : : RuntimeException )
{
if ( ( nPropId > = BASEPROPERTY_FONTDESCRIPTORPART_START ) & & ( nPropId < = BASEPROPERTY_FONTDESCRIPTORPART_END ) )
{
2006-03-14 09:53:43 +00:00
: : osl : : ClearableMutexGuard aGuard ( GetMutex ( ) ) ;
2001-04-27 09:12:03 +00:00
2006-03-14 09:53:43 +00:00
Any aOldSingleValue ;
getFastPropertyValue ( aOldSingleValue , BASEPROPERTY_FONTDESCRIPTORPART_START ) ;
2000-09-18 16:07:07 +00:00
2006-03-14 09:53:43 +00:00
ImplControlProperty * pProp = mpData - > Get ( BASEPROPERTY_FONTDESCRIPTOR ) ;
FontDescriptor aOldFontDescriptor ;
pProp - > GetValue ( ) > > = aOldFontDescriptor ;
FontDescriptor aNewFontDescriptor ( aOldFontDescriptor ) ;
lcl_ImplMergeFontProperty ( aNewFontDescriptor , ( sal_uInt16 ) nPropId , rValue ) ;
Any aNewValue ;
aNewValue < < = aNewFontDescriptor ;
sal_Int32 nDescriptorId ( BASEPROPERTY_FONTDESCRIPTOR ) ;
nDescriptorId = BASEPROPERTY_FONTDESCRIPTOR ;
setFastPropertyValues ( 1 , & nDescriptorId , & aNewValue , 1 ) ;
// also fire a propertyChange event for the single property, since with the above
// line, only an event for the FontDescriptor property will be fired
Any aNewSingleValue ;
getFastPropertyValue ( aNewSingleValue , BASEPROPERTY_FONTDESCRIPTORPART_START ) ;
aGuard . clear ( ) ;
fire ( & nPropId , & aNewSingleValue , & aOldSingleValue , 1 , sal_False ) ;
2000-09-18 16:07:07 +00:00
}
else
setFastPropertyValues ( 1 , & nPropId , & rValue , 1 ) ;
}
// ::com::sun::star::beans::XMultiPropertySet
: : com : : sun : : star : : uno : : Reference < : : com : : sun : : star : : beans : : XPropertySetInfo > UnoControlModel : : getPropertySetInfo ( ) throw ( : : com : : sun : : star : : uno : : RuntimeException )
{
DBG_ERROR ( " UnoControlModel::getPropertySetInfo() not possible! " ) ;
return : : com : : sun : : star : : uno : : Reference < : : com : : sun : : star : : beans : : XPropertySetInfo > ( ) ;
}
void UnoControlModel : : setPropertyValues ( const : : com : : sun : : star : : uno : : Sequence < : : rtl : : OUString > & rPropertyNames , const : : com : : sun : : star : : uno : : Sequence < : : com : : sun : : star : : uno : : Any > & Values ) throw ( : : com : : sun : : star : : beans : : PropertyVetoException , : : com : : sun : : star : : lang : : IllegalArgumentException , : : com : : sun : : star : : lang : : WrappedTargetException , : : com : : sun : : star : : uno : : RuntimeException )
{
2004-05-10 11:49:30 +00:00
: : osl : : ClearableMutexGuard aGuard ( GetMutex ( ) ) ;
2000-09-18 16:07:07 +00:00
2001-06-05 04:53:22 +00:00
sal_Int32 nProps = rPropertyNames . getLength ( ) ;
2004-05-10 11:49:30 +00:00
// sal_Int32* pHandles = new sal_Int32[nProps];
// don't do this - it leaks in case of an exception
Sequence < sal_Int32 > aHandles ( nProps ) ;
sal_Int32 * pHandles = aHandles . getArray ( ) ;
2002-05-16 04:50:49 +00:00
// may need to change the order in the sequence, for this we need a non-const value sequence
// 15.05.2002 - 99314 - fs@openoffice.org
uno : : Sequence < uno : : Any > aValues ( Values ) ;
uno : : Any * pValues = aValues . getArray ( ) ;
2001-06-05 04:53:22 +00:00
sal_Int32 nValidHandles = getInfoHelper ( ) . fillHandles ( pHandles , rPropertyNames ) ;
2000-09-18 16:07:07 +00:00
if ( nValidHandles )
{
2004-05-10 11:49:30 +00:00
// if somebody sets properties which are single aspects of a font descriptor,
// remove them, and build a font descriptor instead
: : std : : auto_ptr < awt : : FontDescriptor > pFD ;
for ( sal_uInt16 n = 0 ; n < nProps ; + + n )
2000-09-18 16:07:07 +00:00
{
if ( ( pHandles [ n ] > = BASEPROPERTY_FONTDESCRIPTORPART_START ) & & ( pHandles [ n ] < = BASEPROPERTY_FONTDESCRIPTORPART_END ) )
{
2004-05-10 11:49:30 +00:00
if ( ! pFD . get ( ) )
2000-09-18 16:07:07 +00:00
{
2001-02-05 09:54:01 +00:00
ImplControlProperty * pProp = mpData - > Get ( BASEPROPERTY_FONTDESCRIPTOR ) ;
2004-05-10 11:49:30 +00:00
pFD . reset ( new awt : : FontDescriptor ) ;
2000-09-18 16:07:07 +00:00
pProp - > GetValue ( ) > > = * pFD ;
}
2001-06-05 04:53:22 +00:00
lcl_ImplMergeFontProperty ( * pFD , ( sal_uInt16 ) pHandles [ n ] , pValues [ n ] ) ;
2000-09-18 16:07:07 +00:00
pHandles [ n ] = - 1 ;
nValidHandles - - ;
}
}
if ( nValidHandles )
2002-05-16 04:50:49 +00:00
{
ImplNormalizePropertySequence ( nProps , pHandles , pValues , & nValidHandles ) ;
2004-05-10 11:49:30 +00:00
aGuard . clear ( ) ;
// clear our guard before calling into setFastPropertyValues - this method
// will implicitly call property listeners, and this should not happen with
// our mutex locked
// #i23451# - 2004-03-18 - fs@openoffice.org
2002-05-16 04:50:49 +00:00
setFastPropertyValues ( nProps , pHandles , pValues , nValidHandles ) ;
}
2004-05-10 11:49:30 +00:00
else
aGuard . clear ( ) ;
// same as a few lines above
2000-09-18 16:07:07 +00:00
// FD-Propertie nicht in das Array mergen, weil sortiert...
2004-05-10 11:49:30 +00:00
if ( pFD . get ( ) )
2000-09-18 16:07:07 +00:00
{
: : com : : sun : : star : : uno : : Any aValue ;
aValue < < = * pFD ;
sal_Int32 nHandle = BASEPROPERTY_FONTDESCRIPTOR ;
setFastPropertyValues ( 1 , & nHandle , & aValue , 1 ) ;
}
}
}
2006-06-19 22:05:03 +00:00
void UnoControlModel : : ImplNormalizePropertySequence ( const sal_Int32 , sal_Int32 * ,
uno : : Any * , sal_Int32 * ) const SAL_THROW ( ( ) )
2002-05-16 04:50:49 +00:00
{
// nothing to do here
}