1 /*************************************************************************
3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
5 * Copyright 2008 by Sun Microsystems, Inc.
7 * OpenOffice.org - a multi-platform office productivity suite
9 * $RCSfile: Columns.cxx,v $
12 * This file is part of OpenOffice.org.
14 * OpenOffice.org is free software: you can redistribute it and/or modify
15 * it under the terms of the GNU Lesser General Public License version 3
16 * only, as published by the Free Software Foundation.
18 * OpenOffice.org is distributed in the hope that it will be useful,
19 * but WITHOUT ANY WARRANTY; without even the implied warranty of
20 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
21 * GNU Lesser General Public License version 3 for more details
22 * (a copy is included in the LICENSE file that accompanied this code).
24 * You should have received a copy of the GNU Lesser General Public License
25 * version 3 along with OpenOffice.org. If not, see
26 * <http://www.openoffice.org/license.html>
27 * for a copy of the LGPLv3 License.
29 ************************************************************************/
31 // MARKER(update_precomp.py): autogen include statement, do not remove
32 #include "precompiled_forms.hxx"
33 #include "Columns.hxx"
34 #ifndef _FRM_PROPERTY_HRC_
35 #include "property.hrc"
37 #include "property.hxx"
39 #include "findpos.hxx"
40 #include <com/sun/star/io/XPersistObject.hpp>
41 #include <com/sun/star/io/XObjectOutputStream.hpp>
42 #include <com/sun/star/io/XObjectInputStream.hpp>
43 #include <com/sun/star/io/XMarkableStream.hpp>
44 #include <com/sun/star/form/XFormComponent.hpp>
45 #include <com/sun/star/lang/XServiceInfo.hpp>
46 #include <com/sun/star/form/binding/XBindableValue.hpp>
47 #include <com/sun/star/beans/XPropertyContainer.hpp>
48 #include <comphelper/sequence.hxx>
49 #include <comphelper/property.hxx>
50 #include <comphelper/basicio.hxx>
51 #include "services.hxx"
52 #ifndef _FRM_RESOURCE_HRC_
53 #include "frm_resource.hrc"
55 #include <tools/debug.hxx>
57 #include <rtl/memory.h>
59 //.........................................................................
62 //.........................................................................
63 using namespace ::com::sun::star::uno
;
64 using namespace ::com::sun::star::beans
;
65 using namespace ::com::sun::star::container
;
66 using namespace ::com::sun::star::form
;
67 using namespace ::com::sun::star::awt
;
68 using namespace ::com::sun::star::io
;
69 using namespace ::com::sun::star::lang
;
70 using namespace ::com::sun::star::util
;
71 using namespace ::com::sun::star::form::binding
;
73 const sal_uInt16 WIDTH
= 0x0001;
74 const sal_uInt16 ALIGN
= 0x0002;
75 const sal_uInt16 OLD_HIDDEN
= 0x0004;
76 const sal_uInt16 COMPATIBLE_HIDDEN
= 0x0008;
78 //------------------------------------------------------------------------------
79 const StringSequence
& getColumnTypes()
81 static StringSequence
aColumnTypes(10);
82 if (!aColumnTypes
.getConstArray()[0].getLength())
84 ::rtl::OUString
* pNames
= aColumnTypes
.getArray();
85 pNames
[TYPE_CHECKBOX
] = ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "CheckBox" ) );
86 pNames
[TYPE_COMBOBOX
] = ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "ComboBox" ) );
87 pNames
[TYPE_CURRENCYFIELD
] = ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "CurrencyField" ) );
88 pNames
[TYPE_DATEFIELD
] = ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "DateField" ) );
89 pNames
[TYPE_FORMATTEDFIELD
] = ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "FormattedField" ) );
90 pNames
[TYPE_LISTBOX
] = ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "ListBox" ) );
91 pNames
[TYPE_NUMERICFIELD
] = ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "NumericField" ) );
92 pNames
[TYPE_PATTERNFIELD
] = ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "PatternField" ) );
93 pNames
[TYPE_TEXTFIELD
] = ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "TextField" ) );
94 pNames
[TYPE_TIMEFIELD
] = ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "TimeField" ) );
99 //------------------------------------------------------------------------------
100 sal_Int32
getColumnTypeByModelName(const ::rtl::OUString
& aModelName
)
102 const ::rtl::OUString aModelPrefix
= ::rtl::OUString::createFromAscii("com.sun.star.form.component.");
103 const ::rtl::OUString aCompatibleModelPrefix
= ::rtl::OUString::createFromAscii("stardiv.one.form.component.");
105 sal_Int32 nTypeId
= -1;
106 if (aModelName
== FRM_COMPONENT_EDIT
)
107 nTypeId
= TYPE_TEXTFIELD
;
110 sal_Int32 nPrefixPos
= aModelName
.indexOf(aModelPrefix
);
112 sal_Int32 nCompatiblePrefixPos
= aModelName
.indexOf(aCompatibleModelPrefix
);
114 DBG_ASSERT( (nPrefixPos
!= -1) || (nCompatiblePrefixPos
!= -1),
115 "::getColumnTypeByModelName() : wrong servivce !");
117 ::rtl::OUString aColumnType
= (nPrefixPos
!= -1)
118 ? aModelName
.copy(aModelPrefix
.getLength())
119 : aModelName
.copy(aCompatibleModelPrefix
.getLength());
121 const StringSequence
& rColumnTypes
= getColumnTypes();
122 nTypeId
= ::detail::findPos(aColumnType
, rColumnTypes
);
127 /*************************************************************************/
129 //------------------------------------------------------------------
130 const Sequence
<sal_Int8
>& OGridColumn::getUnoTunnelImplementationId()
132 static Sequence
< sal_Int8
> * pSeq
= 0;
135 ::osl::MutexGuard
aGuard( ::osl::Mutex::getGlobalMutex() );
138 static Sequence
< sal_Int8
> aSeq( 16 );
139 rtl_createUuid( (sal_uInt8
*)aSeq
.getArray(), 0, sal_True
);
146 //------------------------------------------------------------------
147 sal_Int64 SAL_CALL
OGridColumn::getSomething( const Sequence
<sal_Int8
>& _rIdentifier
) throw(RuntimeException
)
149 sal_Int64
nReturn(0);
151 if ( (_rIdentifier
.getLength() == 16)
152 && (0 == rtl_compareMemory( getUnoTunnelImplementationId().getConstArray(), _rIdentifier
.getConstArray(), 16 ))
155 nReturn
= reinterpret_cast<sal_Int64
>(this);
159 Reference
< XUnoTunnel
> xAggTunnel
;
160 if ( query_aggregation( m_xAggregate
, xAggTunnel
) )
161 return xAggTunnel
->getSomething( _rIdentifier
);
166 //------------------------------------------------------------------
167 Sequence
<sal_Int8
> SAL_CALL
OGridColumn::getImplementationId() throw(RuntimeException
)
169 return OImplementationIds::getImplementationId(getTypes());
172 //------------------------------------------------------------------
173 Sequence
<Type
> SAL_CALL
OGridColumn::getTypes() throw(RuntimeException
)
175 Reference
<XTypeProvider
> xProv
;
177 if (query_aggregation(m_xAggregate
, xProv
))
178 return concatSequences(OGridColumn_BASE::getTypes(), xProv
->getTypes());
179 return OGridColumn_BASE::getTypes();
182 //------------------------------------------------------------------
183 Any SAL_CALL
OGridColumn::queryAggregation( const Type
& _rType
) throw (RuntimeException
)
186 // some functionality at our aggregate cannot be reasonably fullfilled here.
187 if ( _rType
.equals(::getCppuType(static_cast< Reference
< XFormComponent
>* >(NULL
)))
188 || _rType
.equals(::getCppuType(static_cast< Reference
< XServiceInfo
>* >(NULL
)))
189 || _rType
.equals(::getCppuType(static_cast< Reference
< XBindableValue
>* >(NULL
)))
190 || _rType
.equals(::getCppuType(static_cast< Reference
< XPropertyContainer
>* >(NULL
)))
194 aReturn
= OGridColumn_BASE::queryAggregation(_rType
);
195 if (!aReturn
.hasValue())
197 aReturn
= OPropertySetAggregationHelper::queryInterface(_rType
);
198 if (!aReturn
.hasValue() && m_xAggregate
.is())
199 aReturn
= m_xAggregate
->queryAggregation(_rType
);
205 DBG_NAME(OGridColumn
);
206 //------------------------------------------------------------------------------
207 OGridColumn::OGridColumn( const comphelper::ComponentContext
& _rContext
, const ::rtl::OUString
& _sModelName
)
208 :OGridColumn_BASE(m_aMutex
)
209 ,OPropertySetAggregationHelper(OGridColumn_BASE::rBHelper
)
210 ,m_aHidden( makeAny( sal_False
) )
211 ,m_aContext( _rContext
)
212 ,m_aModelName(_sModelName
)
214 DBG_CTOR(OGridColumn
,NULL
);
216 // Anlegen des UnoControlModels
217 if ( m_aModelName
.getLength() ) // is there a to-be-aggregated model?
219 increment( m_refCount
);
222 m_xAggregate
.set( m_aContext
.createComponent( m_aModelName
), UNO_QUERY
);
223 setAggregation( m_xAggregate
);
226 if ( m_xAggregate
.is() )
227 { // don't omit those brackets - they ensure that the following temporary is properly deleted
228 m_xAggregate
->setDelegator( static_cast< ::cppu::OWeakObject
* >( this ) );
231 // Refcount wieder bei NULL
232 decrement( m_refCount
);
236 //------------------------------------------------------------------------------
237 OGridColumn::OGridColumn( const OGridColumn
* _pOriginal
)
238 :OGridColumn_BASE( m_aMutex
)
239 ,OPropertySetAggregationHelper( OGridColumn_BASE::rBHelper
)
240 ,m_aContext( _pOriginal
->m_aContext
)
242 DBG_CTOR(OGridColumn
,NULL
);
244 m_aWidth
= _pOriginal
->m_aWidth
;
245 m_aAlign
= _pOriginal
->m_aAlign
;
246 m_aHidden
= _pOriginal
->m_aHidden
;
247 m_aModelName
= _pOriginal
->m_aModelName
;
248 m_aLabel
= _pOriginal
->m_aLabel
;
250 increment( m_refCount
);
253 m_xAggregate
= createAggregateClone( _pOriginal
);
254 setAggregation( m_xAggregate
);
257 if ( m_xAggregate
.is() )
258 { // don't omit this brackets - they ensure that the following temporary is properly deleted
259 m_xAggregate
->setDelegator( static_cast< ::cppu::OWeakObject
* >( this ) );
262 decrement( m_refCount
);
265 //------------------------------------------------------------------------------
266 OGridColumn::~OGridColumn()
268 if (!OGridColumn_BASE::rBHelper
.bDisposed
)
275 if (m_xAggregate
.is())
278 m_xAggregate
->setDelegator(xIface
);
281 DBG_DTOR(OGridColumn
,NULL
);
285 //------------------------------------------------------------------------------
286 void SAL_CALL
OGridColumn::disposing(const EventObject
& _rSource
) throw(RuntimeException
)
288 OPropertySetAggregationHelper::disposing(_rSource
);
290 Reference
<XEventListener
> xEvtLstner
;
291 if (query_aggregation(m_xAggregate
, xEvtLstner
))
292 xEvtLstner
->disposing(_rSource
);
296 //-----------------------------------------------------------------------------
297 void OGridColumn::disposing()
299 OGridColumn_BASE::disposing();
300 OPropertySetAggregationHelper::disposing();
302 Reference
<XComponent
> xComp
;
303 if (query_aggregation(m_xAggregate
, xComp
))
307 //------------------------------------------------------------------------------
308 void OGridColumn::clearAggregateProperties( Sequence
< Property
>& _rProps
, sal_Bool bAllowDropDown
)
310 // some properties are not to be exposed to the outer world
311 ::std::set
< ::rtl::OUString
> aForbiddenProperties
;
312 aForbiddenProperties
.insert( PROPERTY_ALIGN
);
313 aForbiddenProperties
.insert( PROPERTY_AUTOCOMPLETE
);
314 aForbiddenProperties
.insert( PROPERTY_BACKGROUNDCOLOR
);
315 aForbiddenProperties
.insert( PROPERTY_BORDER
);
316 aForbiddenProperties
.insert( PROPERTY_BORDERCOLOR
);
317 aForbiddenProperties
.insert( PROPERTY_ECHO_CHAR
);
318 aForbiddenProperties
.insert( PROPERTY_FILLCOLOR
);
319 aForbiddenProperties
.insert( PROPERTY_FONT
);
320 aForbiddenProperties
.insert( PROPERTY_FONT_NAME
);
321 aForbiddenProperties
.insert( PROPERTY_FONT_STYLENAME
);
322 aForbiddenProperties
.insert( PROPERTY_FONT_FAMILY
);
323 aForbiddenProperties
.insert( PROPERTY_FONT_CHARSET
);
324 aForbiddenProperties
.insert( PROPERTY_FONT_HEIGHT
);
325 aForbiddenProperties
.insert( PROPERTY_FONT_WEIGHT
);
326 aForbiddenProperties
.insert( PROPERTY_FONT_SLANT
);
327 aForbiddenProperties
.insert( PROPERTY_FONT_UNDERLINE
);
328 aForbiddenProperties
.insert( PROPERTY_FONT_STRIKEOUT
);
329 aForbiddenProperties
.insert( PROPERTY_FONT_WORDLINEMODE
);
330 aForbiddenProperties
.insert( PROPERTY_TEXTLINECOLOR
);
331 aForbiddenProperties
.insert( PROPERTY_FONTEMPHASISMARK
);
332 aForbiddenProperties
.insert( PROPERTY_FONTRELIEF
);
333 aForbiddenProperties
.insert( PROPERTY_HARDLINEBREAKS
);
334 aForbiddenProperties
.insert( PROPERTY_HSCROLL
);
335 aForbiddenProperties
.insert( PROPERTY_LABEL
);
336 aForbiddenProperties
.insert( PROPERTY_LINECOLOR
);
337 aForbiddenProperties
.insert( PROPERTY_MULTISELECTION
);
338 aForbiddenProperties
.insert( PROPERTY_PRINTABLE
);
339 aForbiddenProperties
.insert( PROPERTY_TABINDEX
);
340 aForbiddenProperties
.insert( PROPERTY_TABSTOP
);
341 aForbiddenProperties
.insert( PROPERTY_TEXTCOLOR
);
342 aForbiddenProperties
.insert( PROPERTY_VSCROLL
);
343 aForbiddenProperties
.insert( PROPERTY_CONTROLLABEL
);
344 aForbiddenProperties
.insert( PROPERTY_RICH_TEXT
);
345 aForbiddenProperties
.insert( PROPERTY_VERTICALALIGN
);
346 aForbiddenProperties
.insert( PROPERTY_IMAGE_URL
);
347 aForbiddenProperties
.insert( PROPERTY_IMAGE_POSITION
);
348 aForbiddenProperties
.insert( ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "EnableVisible" ) ) );
349 if ( !bAllowDropDown
)
350 aForbiddenProperties
.insert( PROPERTY_DROPDOWN
);
352 Sequence
< Property
> aNewProps( _rProps
.getLength() );
353 Property
* pNewProps
= aNewProps
.getArray();
355 const Property
* pProps
= _rProps
.getConstArray();
356 const Property
* pPropsEnd
= pProps
+ _rProps
.getLength();
357 for ( ; pProps
!= pPropsEnd
; ++pProps
)
359 if ( aForbiddenProperties
.find( pProps
->Name
) == aForbiddenProperties
.end() )
360 *pNewProps
++ = *pProps
;
363 aNewProps
.realloc( pNewProps
- aNewProps
.getArray() );
367 //------------------------------------------------------------------------------
368 void OGridColumn::setOwnProperties(Sequence
<Property
>& aDescriptor
)
370 aDescriptor
.realloc(5);
371 Property
* pProperties
= aDescriptor
.getArray();
372 DECL_PROP1(LABEL
, ::rtl::OUString
, BOUND
);
373 DECL_PROP3(WIDTH
, sal_Int32
, BOUND
, MAYBEVOID
, MAYBEDEFAULT
);
374 DECL_PROP3(ALIGN
, sal_Int16
, BOUND
, MAYBEVOID
, MAYBEDEFAULT
);
375 DECL_BOOL_PROP2(HIDDEN
, BOUND
, MAYBEDEFAULT
);
376 DECL_PROP1(COLUMNSERVICENAME
, ::rtl::OUString
, READONLY
);
379 // Reference<XPropertySet>
380 //------------------------------------------------------------------------------
381 void OGridColumn::getFastPropertyValue(Any
& rValue
, sal_Int32 nHandle
) const
385 case PROPERTY_ID_COLUMNSERVICENAME
:
386 rValue
<<= m_aModelName
;
388 case PROPERTY_ID_LABEL
:
391 case PROPERTY_ID_WIDTH
:
394 case PROPERTY_ID_ALIGN
:
397 case PROPERTY_ID_HIDDEN
:
401 OPropertySetAggregationHelper::getFastPropertyValue(rValue
, nHandle
);
405 //------------------------------------------------------------------------------
406 sal_Bool
OGridColumn::convertFastPropertyValue( Any
& rConvertedValue
, Any
& rOldValue
,
407 sal_Int32 nHandle
, const Any
& rValue
)throw( IllegalArgumentException
)
409 sal_Bool
bModified(sal_False
);
412 case PROPERTY_ID_LABEL
:
413 bModified
= tryPropertyValue(rConvertedValue
, rOldValue
, rValue
, m_aLabel
);
415 case PROPERTY_ID_WIDTH
:
416 bModified
= tryPropertyValue(rConvertedValue
, rOldValue
, rValue
, m_aWidth
, ::getCppuType((const sal_Int32
*)NULL
));
418 case PROPERTY_ID_ALIGN
:
421 bModified
= tryPropertyValue(rConvertedValue
, rOldValue
, rValue
, m_aAlign
, ::getCppuType((const sal_Int16
*)NULL
));
423 catch(starlang::IllegalArgumentException
&)
425 OSL_ENSURE(0,"OGridColumn::convertFastPropertyValue: TextAlign must be casted to sal_Int16!");
429 case PROPERTY_ID_HIDDEN
:
430 bModified
= tryPropertyValue(rConvertedValue
, rOldValue
, rValue
, getBOOL(m_aHidden
));
436 //------------------------------------------------------------------------------
437 void OGridColumn::setFastPropertyValue_NoBroadcast( sal_Int32 nHandle
, const Any
& rValue
) throw (::com::sun::star::uno::Exception
)
441 case PROPERTY_ID_LABEL
:
442 DBG_ASSERT(rValue
.getValueType().getTypeClass() == TypeClass_STRING
, "invalid type" );
445 case PROPERTY_ID_WIDTH
:
448 case PROPERTY_ID_ALIGN
:
451 case PROPERTY_ID_HIDDEN
:
459 //------------------------------------------------------------------------------
460 Any
OGridColumn::getPropertyDefaultByHandle( sal_Int32 nHandle
) const
464 case PROPERTY_ID_WIDTH
:
465 case PROPERTY_ID_ALIGN
:
467 case PROPERTY_ID_HIDDEN
:
468 return makeAny((sal_Bool
)sal_False
);
470 return OPropertySetAggregationHelper::getPropertyDefaultByHandle(nHandle
);
475 //------------------------------------------------------------------------------
476 Reference
< XCloneable
> SAL_CALL
OGridColumn::createClone( ) throw (RuntimeException
)
478 OGridColumn
* pNewColumn
= createCloneColumn();
483 //------------------------------------------------------------------------------
484 void SAL_CALL
OGridColumn::write(const Reference
<XObjectOutputStream
>& _rxOutStream
)
486 // 1. Schreiben des UnoControls
487 Reference
<XMarkableStream
> xMark(_rxOutStream
, UNO_QUERY
);
488 sal_Int32 nMark
= xMark
->createMark();
491 _rxOutStream
->writeLong(nLen
);
493 Reference
<XPersistObject
> xPersist
;
494 if (query_aggregation(m_xAggregate
, xPersist
))
495 xPersist
->write(_rxOutStream
);
497 // feststellen der Laenge
498 nLen
= xMark
->offsetToMark(nMark
) - 4;
499 xMark
->jumpToMark(nMark
);
500 _rxOutStream
->writeLong(nLen
);
501 xMark
->jumpToFurthest();
502 xMark
->deleteMark(nMark
);
504 // 2. Schreiben einer VersionsNummer
505 _rxOutStream
->writeShort(0x0002);
507 sal_uInt16 nAnyMask
= 0;
508 if (m_aWidth
.getValueType().getTypeClass() == TypeClass_LONG
)
511 if (m_aAlign
.getValueTypeClass() == TypeClass_SHORT
)
514 nAnyMask
|= COMPATIBLE_HIDDEN
;
516 _rxOutStream
->writeShort(nAnyMask
);
518 if (nAnyMask
& WIDTH
)
519 _rxOutStream
->writeLong(getINT32(m_aWidth
));
520 if (nAnyMask
& ALIGN
)
521 _rxOutStream
->writeShort(getINT16(m_aAlign
));
524 _rxOutStream
<< m_aLabel
;
526 // the new place for the hidden flag : after m_aLabel, so older office version read the correct label, too
527 if (nAnyMask
& COMPATIBLE_HIDDEN
)
528 _rxOutStream
->writeBoolean(getBOOL(m_aHidden
));
531 //------------------------------------------------------------------------------
532 void SAL_CALL
OGridColumn::read(const Reference
<XObjectInputStream
>& _rxInStream
)
534 // 1. Lesen des UnoControls
535 sal_Int32 nLen
= _rxInStream
->readLong();
538 Reference
<XMarkableStream
> xMark(_rxInStream
, UNO_QUERY
);
539 sal_Int32 nMark
= xMark
->createMark();
540 Reference
<XPersistObject
> xPersist
;
541 if (query_aggregation(m_xAggregate
, xPersist
))
542 xPersist
->read(_rxInStream
);
544 xMark
->jumpToMark(nMark
);
545 _rxInStream
->skipBytes(nLen
);
546 xMark
->deleteMark(nMark
);
549 // 2. Lesen des Versionsnummer
550 sal_uInt16 nVersion
= _rxInStream
->readShort(); (void)nVersion
;
551 sal_uInt16 nAnyMask
= _rxInStream
->readShort();
553 if (nAnyMask
& WIDTH
)
555 sal_Int32 nValue
= _rxInStream
->readLong();
556 m_aWidth
<<= (sal_Int32
)nValue
;
559 if (nAnyMask
& ALIGN
)
561 sal_Int16 nValue
= _rxInStream
->readShort();
564 if (nAnyMask
& OLD_HIDDEN
)
566 sal_Bool bValue
= _rxInStream
->readBoolean();
567 m_aHidden
<<= (sal_Bool
)bValue
;
571 _rxInStream
>> m_aLabel
;
573 if (nAnyMask
& COMPATIBLE_HIDDEN
)
575 sal_Bool bValue
= _rxInStream
->readBoolean();
576 m_aHidden
<<= (sal_Bool
)bValue
;
580 //------------------------------------------------------------------------------
581 IMPL_COLUMN(TextFieldColumn
, FRM_SUN_COMPONENT_TEXTFIELD
, sal_False
);
582 IMPL_COLUMN(PatternFieldColumn
, FRM_SUN_COMPONENT_PATTERNFIELD
, sal_False
);
583 IMPL_COLUMN(DateFieldColumn
, FRM_SUN_COMPONENT_DATEFIELD
, sal_True
);
584 IMPL_COLUMN(TimeFieldColumn
, FRM_SUN_COMPONENT_TIMEFIELD
, sal_False
);
585 IMPL_COLUMN(NumericFieldColumn
, FRM_SUN_COMPONENT_NUMERICFIELD
, sal_False
);
586 IMPL_COLUMN(CurrencyFieldColumn
, FRM_SUN_COMPONENT_CURRENCYFIELD
, sal_False
);
587 IMPL_COLUMN(CheckBoxColumn
, FRM_SUN_COMPONENT_CHECKBOX
, sal_False
);
588 IMPL_COLUMN(ComboBoxColumn
, FRM_SUN_COMPONENT_COMBOBOX
, sal_False
);
589 IMPL_COLUMN(ListBoxColumn
, FRM_SUN_COMPONENT_LISTBOX
, sal_False
);
590 IMPL_COLUMN(FormattedFieldColumn
, FRM_SUN_COMPONENT_FORMATTEDFIELD
, sal_False
);
592 //.........................................................................
594 //.........................................................................