xref: /aoo4110/main/forms/source/component/Grid.cxx (revision b1cdbd2c)
1*b1cdbd2cSJim Jagielski /**************************************************************
2*b1cdbd2cSJim Jagielski  *
3*b1cdbd2cSJim Jagielski  * Licensed to the Apache Software Foundation (ASF) under one
4*b1cdbd2cSJim Jagielski  * or more contributor license agreements.  See the NOTICE file
5*b1cdbd2cSJim Jagielski  * distributed with this work for additional information
6*b1cdbd2cSJim Jagielski  * regarding copyright ownership.  The ASF licenses this file
7*b1cdbd2cSJim Jagielski  * to you under the Apache License, Version 2.0 (the
8*b1cdbd2cSJim Jagielski  * "License"); you may not use this file except in compliance
9*b1cdbd2cSJim Jagielski  * with the License.  You may obtain a copy of the License at
10*b1cdbd2cSJim Jagielski  *
11*b1cdbd2cSJim Jagielski  *   http://www.apache.org/licenses/LICENSE-2.0
12*b1cdbd2cSJim Jagielski  *
13*b1cdbd2cSJim Jagielski  * Unless required by applicable law or agreed to in writing,
14*b1cdbd2cSJim Jagielski  * software distributed under the License is distributed on an
15*b1cdbd2cSJim Jagielski  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16*b1cdbd2cSJim Jagielski  * KIND, either express or implied.  See the License for the
17*b1cdbd2cSJim Jagielski  * specific language governing permissions and limitations
18*b1cdbd2cSJim Jagielski  * under the License.
19*b1cdbd2cSJim Jagielski  *
20*b1cdbd2cSJim Jagielski  *************************************************************/
21*b1cdbd2cSJim Jagielski 
22*b1cdbd2cSJim Jagielski 
23*b1cdbd2cSJim Jagielski 
24*b1cdbd2cSJim Jagielski // MARKER(update_precomp.py): autogen include statement, do not remove
25*b1cdbd2cSJim Jagielski #include "precompiled_forms.hxx"
26*b1cdbd2cSJim Jagielski 
27*b1cdbd2cSJim Jagielski #include "Columns.hxx"
28*b1cdbd2cSJim Jagielski #include "findpos.hxx"
29*b1cdbd2cSJim Jagielski #include "Grid.hxx"
30*b1cdbd2cSJim Jagielski #include "property.hrc"
31*b1cdbd2cSJim Jagielski #include "property.hxx"
32*b1cdbd2cSJim Jagielski #include "services.hxx"
33*b1cdbd2cSJim Jagielski 
34*b1cdbd2cSJim Jagielski /** === begin UNO includes === **/
35*b1cdbd2cSJim Jagielski #include <com/sun/star/form/FormComponentType.hpp>
36*b1cdbd2cSJim Jagielski #include <com/sun/star/form/XForm.hpp>
37*b1cdbd2cSJim Jagielski #include <com/sun/star/form/XLoadable.hpp>
38*b1cdbd2cSJim Jagielski #include <com/sun/star/text/WritingMode2.hpp>
39*b1cdbd2cSJim Jagielski /** === end UNO includes === **/
40*b1cdbd2cSJim Jagielski 
41*b1cdbd2cSJim Jagielski #include <comphelper/basicio.hxx>
42*b1cdbd2cSJim Jagielski #include <comphelper/container.hxx>
43*b1cdbd2cSJim Jagielski #include <comphelper/extract.hxx>
44*b1cdbd2cSJim Jagielski #include <cppuhelper/queryinterface.hxx>
45*b1cdbd2cSJim Jagielski #include <toolkit/helper/vclunohelper.hxx>
46*b1cdbd2cSJim Jagielski #include <vcl/svapp.hxx>
47*b1cdbd2cSJim Jagielski 
48*b1cdbd2cSJim Jagielski using namespace ::com::sun::star::uno;
49*b1cdbd2cSJim Jagielski 
50*b1cdbd2cSJim Jagielski //.........................................................................
51*b1cdbd2cSJim Jagielski namespace frm
52*b1cdbd2cSJim Jagielski {
53*b1cdbd2cSJim Jagielski //.........................................................................
54*b1cdbd2cSJim Jagielski using namespace ::com::sun::star;
55*b1cdbd2cSJim Jagielski using namespace ::com::sun::star::uno;
56*b1cdbd2cSJim Jagielski using namespace ::com::sun::star::sdb;
57*b1cdbd2cSJim Jagielski using namespace ::com::sun::star::sdbc;
58*b1cdbd2cSJim Jagielski using namespace ::com::sun::star::sdbcx;
59*b1cdbd2cSJim Jagielski using namespace ::com::sun::star::beans;
60*b1cdbd2cSJim Jagielski using namespace ::com::sun::star::container;
61*b1cdbd2cSJim Jagielski using namespace ::com::sun::star::form;
62*b1cdbd2cSJim Jagielski using namespace ::com::sun::star::awt;
63*b1cdbd2cSJim Jagielski using namespace ::com::sun::star::io;
64*b1cdbd2cSJim Jagielski using namespace ::com::sun::star::lang;
65*b1cdbd2cSJim Jagielski using namespace ::com::sun::star::util;
66*b1cdbd2cSJim Jagielski using namespace ::com::sun::star::view;
67*b1cdbd2cSJim Jagielski 
68*b1cdbd2cSJim Jagielski namespace WritingMode2 = ::com::sun::star::text::WritingMode2;
69*b1cdbd2cSJim Jagielski 
70*b1cdbd2cSJim Jagielski const sal_uInt16 ROWHEIGHT			=	0x0001;
71*b1cdbd2cSJim Jagielski const sal_uInt16 FONTTYPE			=	0x0002;
72*b1cdbd2cSJim Jagielski const sal_uInt16 FONTSIZE			=	0x0004;
73*b1cdbd2cSJim Jagielski const sal_uInt16 FONTATTRIBS		=	0x0008;
74*b1cdbd2cSJim Jagielski const sal_uInt16 TABSTOP			=	0x0010;
75*b1cdbd2cSJim Jagielski const sal_uInt16 TEXTCOLOR			=	0x0020;
76*b1cdbd2cSJim Jagielski const sal_uInt16 FONTDESCRIPTOR 	=	0x0040;
77*b1cdbd2cSJim Jagielski const sal_uInt16 RECORDMARKER		=	0x0080;
78*b1cdbd2cSJim Jagielski const sal_uInt16 BACKGROUNDCOLOR	=	0x0100;
79*b1cdbd2cSJim Jagielski 
80*b1cdbd2cSJim Jagielski //------------------------------------------------------------------
OGridControlModel_CreateInstance(const Reference<XMultiServiceFactory> & _rxFactory)81*b1cdbd2cSJim Jagielski InterfaceRef SAL_CALL OGridControlModel_CreateInstance(const Reference<XMultiServiceFactory>& _rxFactory)
82*b1cdbd2cSJim Jagielski {
83*b1cdbd2cSJim Jagielski 	return *(new OGridControlModel(_rxFactory));
84*b1cdbd2cSJim Jagielski }
85*b1cdbd2cSJim Jagielski 
86*b1cdbd2cSJim Jagielski DBG_NAME(OGridControlModel);
87*b1cdbd2cSJim Jagielski //------------------------------------------------------------------
OGridControlModel(const Reference<XMultiServiceFactory> & _rxFactory)88*b1cdbd2cSJim Jagielski OGridControlModel::OGridControlModel(const Reference<XMultiServiceFactory>& _rxFactory)
89*b1cdbd2cSJim Jagielski     :OControlModel(_rxFactory, ::rtl::OUString())
90*b1cdbd2cSJim Jagielski     ,OInterfaceContainer(_rxFactory, m_aMutex, ::getCppuType(static_cast<Reference<XPropertySet>*>(NULL)))
91*b1cdbd2cSJim Jagielski     ,OErrorBroadcaster( OComponentHelper::rBHelper )
92*b1cdbd2cSJim Jagielski     ,FontControlModel( false )
93*b1cdbd2cSJim Jagielski     ,m_aSelectListeners(m_aMutex)
94*b1cdbd2cSJim Jagielski     ,m_aResetListeners(m_aMutex)
95*b1cdbd2cSJim Jagielski     ,m_aRowSetChangeListeners(m_aMutex)
96*b1cdbd2cSJim Jagielski     ,m_aDefaultControl( FRM_SUN_CONTROL_GRIDCONTROL )
97*b1cdbd2cSJim Jagielski     ,m_nBorder(1)
98*b1cdbd2cSJim Jagielski     ,m_nWritingMode( WritingMode2::CONTEXT )
99*b1cdbd2cSJim Jagielski     ,m_nContextWritingMode( WritingMode2::CONTEXT )
100*b1cdbd2cSJim Jagielski     ,m_bEnableVisible(sal_True)
101*b1cdbd2cSJim Jagielski     ,m_bEnable(sal_True)
102*b1cdbd2cSJim Jagielski     ,m_bNavigation(sal_True)
103*b1cdbd2cSJim Jagielski     ,m_bRecordMarker(sal_True)
104*b1cdbd2cSJim Jagielski     ,m_bPrintable(sal_True)
105*b1cdbd2cSJim Jagielski     ,m_bAlwaysShowCursor(sal_False)
106*b1cdbd2cSJim Jagielski     ,m_bDisplaySynchron(sal_True)
107*b1cdbd2cSJim Jagielski {
108*b1cdbd2cSJim Jagielski 	DBG_CTOR(OGridControlModel,NULL);
109*b1cdbd2cSJim Jagielski 
110*b1cdbd2cSJim Jagielski 	m_nClassId = FormComponentType::GRIDCONTROL;
111*b1cdbd2cSJim Jagielski }
112*b1cdbd2cSJim Jagielski 
113*b1cdbd2cSJim Jagielski //------------------------------------------------------------------
OGridControlModel(const OGridControlModel * _pOriginal,const Reference<XMultiServiceFactory> & _rxFactory)114*b1cdbd2cSJim Jagielski OGridControlModel::OGridControlModel( const OGridControlModel* _pOriginal, const Reference< XMultiServiceFactory >& _rxFactory )
115*b1cdbd2cSJim Jagielski 	:OControlModel( _pOriginal, _rxFactory )
116*b1cdbd2cSJim Jagielski 	,OInterfaceContainer( _rxFactory, m_aMutex, ::getCppuType( static_cast<Reference<XPropertySet>*>( NULL ) ) )
117*b1cdbd2cSJim Jagielski 	,OErrorBroadcaster( OComponentHelper::rBHelper )
118*b1cdbd2cSJim Jagielski     ,FontControlModel( _pOriginal )
119*b1cdbd2cSJim Jagielski 	,m_aSelectListeners( m_aMutex )
120*b1cdbd2cSJim Jagielski 	,m_aResetListeners( m_aMutex )
121*b1cdbd2cSJim Jagielski     ,m_aRowSetChangeListeners( m_aMutex )
122*b1cdbd2cSJim Jagielski {
123*b1cdbd2cSJim Jagielski 	DBG_CTOR(OGridControlModel,NULL);
124*b1cdbd2cSJim Jagielski 
125*b1cdbd2cSJim Jagielski 	m_aDefaultControl = _pOriginal->m_aDefaultControl;
126*b1cdbd2cSJim Jagielski 	m_bEnable = _pOriginal->m_bEnable;
127*b1cdbd2cSJim Jagielski 	m_bEnableVisible = _pOriginal->m_bEnableVisible;
128*b1cdbd2cSJim Jagielski 	m_bNavigation = _pOriginal->m_bNavigation;
129*b1cdbd2cSJim Jagielski 	m_nBorder = _pOriginal->m_nBorder;
130*b1cdbd2cSJim Jagielski     m_nWritingMode = _pOriginal->m_nWritingMode;
131*b1cdbd2cSJim Jagielski     m_nContextWritingMode = _pOriginal->m_nContextWritingMode;
132*b1cdbd2cSJim Jagielski 	m_bRecordMarker = _pOriginal->m_bRecordMarker;
133*b1cdbd2cSJim Jagielski 	m_bPrintable = _pOriginal->m_bPrintable;
134*b1cdbd2cSJim Jagielski 	m_bAlwaysShowCursor = _pOriginal->m_bAlwaysShowCursor;
135*b1cdbd2cSJim Jagielski 	m_bDisplaySynchron = _pOriginal->m_bDisplaySynchron;
136*b1cdbd2cSJim Jagielski 
137*b1cdbd2cSJim Jagielski 	// clone the columns
138*b1cdbd2cSJim Jagielski 	cloneColumns( _pOriginal );
139*b1cdbd2cSJim Jagielski 
140*b1cdbd2cSJim Jagielski 	// TODO: clone the events?
141*b1cdbd2cSJim Jagielski }
142*b1cdbd2cSJim Jagielski 
143*b1cdbd2cSJim Jagielski //------------------------------------------------------------------
~OGridControlModel()144*b1cdbd2cSJim Jagielski OGridControlModel::~OGridControlModel()
145*b1cdbd2cSJim Jagielski {
146*b1cdbd2cSJim Jagielski 	if (!OComponentHelper::rBHelper.bDisposed)
147*b1cdbd2cSJim Jagielski 	{
148*b1cdbd2cSJim Jagielski 		acquire();
149*b1cdbd2cSJim Jagielski 		dispose();
150*b1cdbd2cSJim Jagielski 	}
151*b1cdbd2cSJim Jagielski 
152*b1cdbd2cSJim Jagielski 	DBG_DTOR(OGridControlModel,NULL);
153*b1cdbd2cSJim Jagielski }
154*b1cdbd2cSJim Jagielski 
155*b1cdbd2cSJim Jagielski // XCloneable
156*b1cdbd2cSJim Jagielski //------------------------------------------------------------------------------
createClone()157*b1cdbd2cSJim Jagielski Reference< XCloneable > SAL_CALL OGridControlModel::createClone( ) throw (RuntimeException)
158*b1cdbd2cSJim Jagielski {
159*b1cdbd2cSJim Jagielski     OGridControlModel* pClone = new OGridControlModel( this, getContext().getLegacyServiceFactory() );
160*b1cdbd2cSJim Jagielski     osl_incrementInterlockedCount( &pClone->m_refCount );
161*b1cdbd2cSJim Jagielski     pClone->OControlModel::clonedFrom( this );
162*b1cdbd2cSJim Jagielski     // do not call OInterfaceContainer::clonedFrom, it would clone the elements aka columns, which is
163*b1cdbd2cSJim Jagielski     // already done in the ctor
164*b1cdbd2cSJim Jagielski     //pClone->OInterfaceContainer::clonedFrom( *this );
165*b1cdbd2cSJim Jagielski     osl_decrementInterlockedCount( &pClone->m_refCount );
166*b1cdbd2cSJim Jagielski     return static_cast< XCloneable* >( static_cast< OControlModel* >( pClone ) );
167*b1cdbd2cSJim Jagielski }
168*b1cdbd2cSJim Jagielski 
169*b1cdbd2cSJim Jagielski //------------------------------------------------------------------------------
cloneColumns(const OGridControlModel * _pOriginalContainer)170*b1cdbd2cSJim Jagielski void OGridControlModel::cloneColumns( const OGridControlModel* _pOriginalContainer )
171*b1cdbd2cSJim Jagielski {
172*b1cdbd2cSJim Jagielski 	try
173*b1cdbd2cSJim Jagielski 	{
174*b1cdbd2cSJim Jagielski 		Reference< XCloneable > xColCloneable;
175*b1cdbd2cSJim Jagielski 
176*b1cdbd2cSJim Jagielski 		const OInterfaceArray::const_iterator pColumnStart = _pOriginalContainer->m_aItems.begin();
177*b1cdbd2cSJim Jagielski 		const OInterfaceArray::const_iterator pColumnEnd = _pOriginalContainer->m_aItems.end();
178*b1cdbd2cSJim Jagielski 		for ( OInterfaceArray::const_iterator pColumn = pColumnStart; pColumn != pColumnEnd; ++pColumn )
179*b1cdbd2cSJim Jagielski 		{
180*b1cdbd2cSJim Jagielski 			// ask the col for a factory for the clone
181*b1cdbd2cSJim Jagielski 			xColCloneable = xColCloneable.query( *pColumn );
182*b1cdbd2cSJim Jagielski 			DBG_ASSERT( xColCloneable.is(), "OGridControlModel::cloneColumns: column is not cloneable!" );
183*b1cdbd2cSJim Jagielski 
184*b1cdbd2cSJim Jagielski 			if ( xColCloneable.is() )
185*b1cdbd2cSJim Jagielski 			{
186*b1cdbd2cSJim Jagielski 				// create a clone of the column
187*b1cdbd2cSJim Jagielski 				Reference< XCloneable > xColClone( xColCloneable->createClone() );
188*b1cdbd2cSJim Jagielski 				DBG_ASSERT( xColClone.is(), "OGridControlModel::cloneColumns: invalid column clone!" );
189*b1cdbd2cSJim Jagielski 
190*b1cdbd2cSJim Jagielski 				if ( xColClone.is() )
191*b1cdbd2cSJim Jagielski 				{
192*b1cdbd2cSJim Jagielski 					// insert this clone into our own container
193*b1cdbd2cSJim Jagielski 					insertByIndex( pColumn - pColumnStart, xColClone->queryInterface( m_aElementType ) );
194*b1cdbd2cSJim Jagielski 				}
195*b1cdbd2cSJim Jagielski 
196*b1cdbd2cSJim Jagielski 			}
197*b1cdbd2cSJim Jagielski 		}
198*b1cdbd2cSJim Jagielski 	}
199*b1cdbd2cSJim Jagielski 	catch( const Exception& )
200*b1cdbd2cSJim Jagielski 	{
201*b1cdbd2cSJim Jagielski 		DBG_ERROR( "OGridControlModel::cloneColumns: caught an exception while cloning the columns!" );
202*b1cdbd2cSJim Jagielski 	}
203*b1cdbd2cSJim Jagielski }
204*b1cdbd2cSJim Jagielski 
205*b1cdbd2cSJim Jagielski // XServiceInfo
206*b1cdbd2cSJim Jagielski //------------------------------------------------------------------------------
getSupportedServiceNames()207*b1cdbd2cSJim Jagielski StringSequence OGridControlModel::getSupportedServiceNames() throw(RuntimeException)
208*b1cdbd2cSJim Jagielski {
209*b1cdbd2cSJim Jagielski 	StringSequence aSupported = OControlModel::getSupportedServiceNames();
210*b1cdbd2cSJim Jagielski 	aSupported.realloc(aSupported.getLength() + 2);
211*b1cdbd2cSJim Jagielski 
212*b1cdbd2cSJim Jagielski 	::rtl::OUString*pArray = aSupported.getArray();
213*b1cdbd2cSJim Jagielski 	pArray[aSupported.getLength()-2] = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("com.sun.star.awt.UnoControlModel"));
214*b1cdbd2cSJim Jagielski 	pArray[aSupported.getLength()-1] = FRM_SUN_COMPONENT_GRIDCONTROL;
215*b1cdbd2cSJim Jagielski 	return aSupported;
216*b1cdbd2cSJim Jagielski }
217*b1cdbd2cSJim Jagielski 
218*b1cdbd2cSJim Jagielski //------------------------------------------------------------------------------
queryAggregation(const Type & _rType)219*b1cdbd2cSJim Jagielski Any SAL_CALL OGridControlModel::queryAggregation( const Type& _rType ) throw (RuntimeException)
220*b1cdbd2cSJim Jagielski {
221*b1cdbd2cSJim Jagielski 	Any aReturn = OGridControlModel_BASE::queryInterface(_rType);
222*b1cdbd2cSJim Jagielski 
223*b1cdbd2cSJim Jagielski 	if ( !aReturn.hasValue() )
224*b1cdbd2cSJim Jagielski 	{
225*b1cdbd2cSJim Jagielski 		aReturn = OControlModel::queryAggregation( _rType );
226*b1cdbd2cSJim Jagielski 		if ( !aReturn.hasValue() )
227*b1cdbd2cSJim Jagielski 		{
228*b1cdbd2cSJim Jagielski 			aReturn = OInterfaceContainer::queryInterface( _rType );
229*b1cdbd2cSJim Jagielski 			if ( !aReturn.hasValue() )
230*b1cdbd2cSJim Jagielski 				aReturn = OErrorBroadcaster::queryInterface( _rType );
231*b1cdbd2cSJim Jagielski 		}
232*b1cdbd2cSJim Jagielski 	}
233*b1cdbd2cSJim Jagielski 	return aReturn;
234*b1cdbd2cSJim Jagielski }
235*b1cdbd2cSJim Jagielski 
236*b1cdbd2cSJim Jagielski // XSQLErrorListener
237*b1cdbd2cSJim Jagielski //------------------------------------------------------------------------------
errorOccured(const SQLErrorEvent & _rEvent)238*b1cdbd2cSJim Jagielski void SAL_CALL OGridControlModel::errorOccured( const SQLErrorEvent& _rEvent ) throw (RuntimeException)
239*b1cdbd2cSJim Jagielski {
240*b1cdbd2cSJim Jagielski 	// forward the errors which happened to my columns to my own listeners
241*b1cdbd2cSJim Jagielski 	onError( _rEvent );
242*b1cdbd2cSJim Jagielski }
243*b1cdbd2cSJim Jagielski 
244*b1cdbd2cSJim Jagielski // XRowSetSupplier
245*b1cdbd2cSJim Jagielski //------------------------------------------------------------------------------
getRowSet()246*b1cdbd2cSJim Jagielski Reference< XRowSet > SAL_CALL OGridControlModel::getRowSet(  ) throw (RuntimeException)
247*b1cdbd2cSJim Jagielski {
248*b1cdbd2cSJim Jagielski     return Reference< XRowSet >( getParent(), UNO_QUERY );
249*b1cdbd2cSJim Jagielski }
250*b1cdbd2cSJim Jagielski 
251*b1cdbd2cSJim Jagielski //------------------------------------------------------------------------------
setRowSet(const Reference<XRowSet> &)252*b1cdbd2cSJim Jagielski void SAL_CALL OGridControlModel::setRowSet( const Reference< XRowSet >& /*_rxDataSource*/ ) throw (RuntimeException)
253*b1cdbd2cSJim Jagielski {
254*b1cdbd2cSJim Jagielski     OSL_ENSURE( false, "OGridControlModel::setRowSet: not supported!" );
255*b1cdbd2cSJim Jagielski }
256*b1cdbd2cSJim Jagielski 
257*b1cdbd2cSJim Jagielski //--------------------------------------------------------------------
addRowSetChangeListener(const Reference<XRowSetChangeListener> & i_Listener)258*b1cdbd2cSJim Jagielski void SAL_CALL OGridControlModel::addRowSetChangeListener( const Reference< XRowSetChangeListener >& i_Listener ) throw (RuntimeException)
259*b1cdbd2cSJim Jagielski {
260*b1cdbd2cSJim Jagielski     if ( i_Listener.is() )
261*b1cdbd2cSJim Jagielski         m_aRowSetChangeListeners.addInterface( i_Listener );
262*b1cdbd2cSJim Jagielski }
263*b1cdbd2cSJim Jagielski 
264*b1cdbd2cSJim Jagielski //--------------------------------------------------------------------
removeRowSetChangeListener(const Reference<XRowSetChangeListener> & i_Listener)265*b1cdbd2cSJim Jagielski void SAL_CALL OGridControlModel::removeRowSetChangeListener( const Reference< XRowSetChangeListener >& i_Listener ) throw (RuntimeException)
266*b1cdbd2cSJim Jagielski {
267*b1cdbd2cSJim Jagielski     m_aRowSetChangeListeners.removeInterface( i_Listener );
268*b1cdbd2cSJim Jagielski }
269*b1cdbd2cSJim Jagielski 
270*b1cdbd2cSJim Jagielski // XChild
271*b1cdbd2cSJim Jagielski //------------------------------------------------------------------------------
setParent(const InterfaceRef & i_Parent)272*b1cdbd2cSJim Jagielski void SAL_CALL OGridControlModel::setParent( const InterfaceRef& i_Parent ) throw(NoSupportException, RuntimeException)
273*b1cdbd2cSJim Jagielski {
274*b1cdbd2cSJim Jagielski     ::osl::ClearableMutexGuard aGuard( m_aMutex );
275*b1cdbd2cSJim Jagielski     if ( i_Parent == getParent() )
276*b1cdbd2cSJim Jagielski         return;
277*b1cdbd2cSJim Jagielski 
278*b1cdbd2cSJim Jagielski     OControlModel::setParent( i_Parent );
279*b1cdbd2cSJim Jagielski 
280*b1cdbd2cSJim Jagielski     EventObject aEvent( *this );
281*b1cdbd2cSJim Jagielski     aGuard.clear();
282*b1cdbd2cSJim Jagielski     m_aRowSetChangeListeners.notifyEach( &XRowSetChangeListener::onRowSetChanged, aEvent );
283*b1cdbd2cSJim Jagielski }
284*b1cdbd2cSJim Jagielski 
285*b1cdbd2cSJim Jagielski //------------------------------------------------------------------------------
getTypes()286*b1cdbd2cSJim Jagielski Sequence< Type > SAL_CALL OGridControlModel::getTypes(	) throw(RuntimeException)
287*b1cdbd2cSJim Jagielski {
288*b1cdbd2cSJim Jagielski 	return concatSequences(
289*b1cdbd2cSJim Jagielski 		concatSequences(
290*b1cdbd2cSJim Jagielski 			OControlModel::getTypes(),
291*b1cdbd2cSJim Jagielski 			OInterfaceContainer::getTypes(),
292*b1cdbd2cSJim Jagielski 			OErrorBroadcaster::getTypes()
293*b1cdbd2cSJim Jagielski 		),
294*b1cdbd2cSJim Jagielski 		OGridControlModel_BASE::getTypes()
295*b1cdbd2cSJim Jagielski 	);
296*b1cdbd2cSJim Jagielski }
297*b1cdbd2cSJim Jagielski 
298*b1cdbd2cSJim Jagielski // OComponentHelper
299*b1cdbd2cSJim Jagielski //------------------------------------------------------------------------------
disposing()300*b1cdbd2cSJim Jagielski void OGridControlModel::disposing()
301*b1cdbd2cSJim Jagielski {
302*b1cdbd2cSJim Jagielski 	OControlModel::disposing();
303*b1cdbd2cSJim Jagielski 	OErrorBroadcaster::disposing();
304*b1cdbd2cSJim Jagielski 	OInterfaceContainer::disposing();
305*b1cdbd2cSJim Jagielski 
306*b1cdbd2cSJim Jagielski 	setParent(NULL);
307*b1cdbd2cSJim Jagielski 
308*b1cdbd2cSJim Jagielski 	EventObject aEvt(static_cast<XWeak*>(this));
309*b1cdbd2cSJim Jagielski 	m_aSelectListeners.disposeAndClear(aEvt);
310*b1cdbd2cSJim Jagielski 	m_aResetListeners.disposeAndClear(aEvt);
311*b1cdbd2cSJim Jagielski     m_aRowSetChangeListeners.disposeAndClear(aEvt);
312*b1cdbd2cSJim Jagielski }
313*b1cdbd2cSJim Jagielski 
314*b1cdbd2cSJim Jagielski // XEventListener
315*b1cdbd2cSJim Jagielski //------------------------------------------------------------------------------
disposing(const EventObject & _rEvent)316*b1cdbd2cSJim Jagielski void OGridControlModel::disposing(const EventObject& _rEvent) throw( RuntimeException )
317*b1cdbd2cSJim Jagielski {
318*b1cdbd2cSJim Jagielski 	OControlModel::disposing( _rEvent );
319*b1cdbd2cSJim Jagielski 	OInterfaceContainer::disposing( _rEvent );
320*b1cdbd2cSJim Jagielski }
321*b1cdbd2cSJim Jagielski 
322*b1cdbd2cSJim Jagielski // XSelectionSupplier
323*b1cdbd2cSJim Jagielski //-----------------------------------------------------------------------------
select(const Any & rElement)324*b1cdbd2cSJim Jagielski sal_Bool SAL_CALL OGridControlModel::select(const Any& rElement) throw(IllegalArgumentException, RuntimeException)
325*b1cdbd2cSJim Jagielski {
326*b1cdbd2cSJim Jagielski     ::osl::ClearableMutexGuard aGuard( m_aMutex );
327*b1cdbd2cSJim Jagielski 
328*b1cdbd2cSJim Jagielski 	Reference<XPropertySet> xSel;
329*b1cdbd2cSJim Jagielski 	if (rElement.hasValue() && !::cppu::extractInterface(xSel, rElement))
330*b1cdbd2cSJim Jagielski 	{
331*b1cdbd2cSJim Jagielski 		throw IllegalArgumentException();
332*b1cdbd2cSJim Jagielski 	}
333*b1cdbd2cSJim Jagielski 	InterfaceRef xMe = static_cast<XWeak*>(this);
334*b1cdbd2cSJim Jagielski 
335*b1cdbd2cSJim Jagielski 	if (xSel.is())
336*b1cdbd2cSJim Jagielski 	{
337*b1cdbd2cSJim Jagielski 		Reference<XChild> xAsChild(xSel, UNO_QUERY);
338*b1cdbd2cSJim Jagielski 		if (!xAsChild.is() || (xAsChild->getParent() != xMe))
339*b1cdbd2cSJim Jagielski 		{
340*b1cdbd2cSJim Jagielski 			throw IllegalArgumentException();
341*b1cdbd2cSJim Jagielski 		}
342*b1cdbd2cSJim Jagielski 	}
343*b1cdbd2cSJim Jagielski 
344*b1cdbd2cSJim Jagielski 	if ( xSel != m_xSelection )
345*b1cdbd2cSJim Jagielski     {
346*b1cdbd2cSJim Jagielski         m_xSelection = xSel;
347*b1cdbd2cSJim Jagielski         aGuard.clear();
348*b1cdbd2cSJim Jagielski         m_aSelectListeners.notifyEach( &XSelectionChangeListener::selectionChanged, EventObject( *this ) );
349*b1cdbd2cSJim Jagielski         return sal_True;
350*b1cdbd2cSJim Jagielski     }
351*b1cdbd2cSJim Jagielski     return sal_False;
352*b1cdbd2cSJim Jagielski }
353*b1cdbd2cSJim Jagielski 
354*b1cdbd2cSJim Jagielski //-----------------------------------------------------------------------------
getSelection()355*b1cdbd2cSJim Jagielski Any SAL_CALL OGridControlModel::getSelection() throw(RuntimeException)
356*b1cdbd2cSJim Jagielski {
357*b1cdbd2cSJim Jagielski 	return makeAny(m_xSelection);
358*b1cdbd2cSJim Jagielski }
359*b1cdbd2cSJim Jagielski 
360*b1cdbd2cSJim Jagielski //-----------------------------------------------------------------------------
addSelectionChangeListener(const Reference<XSelectionChangeListener> & _rxListener)361*b1cdbd2cSJim Jagielski void OGridControlModel::addSelectionChangeListener(const Reference< XSelectionChangeListener >& _rxListener) throw( RuntimeException )
362*b1cdbd2cSJim Jagielski {
363*b1cdbd2cSJim Jagielski 	m_aSelectListeners.addInterface(_rxListener);
364*b1cdbd2cSJim Jagielski }
365*b1cdbd2cSJim Jagielski 
366*b1cdbd2cSJim Jagielski //-----------------------------------------------------------------------------
removeSelectionChangeListener(const Reference<XSelectionChangeListener> & _rxListener)367*b1cdbd2cSJim Jagielski void OGridControlModel::removeSelectionChangeListener(const Reference< XSelectionChangeListener >& _rxListener) throw( RuntimeException )
368*b1cdbd2cSJim Jagielski {
369*b1cdbd2cSJim Jagielski 	m_aSelectListeners.removeInterface(_rxListener);
370*b1cdbd2cSJim Jagielski }
371*b1cdbd2cSJim Jagielski 
372*b1cdbd2cSJim Jagielski // XGridColumnFactory
373*b1cdbd2cSJim Jagielski //------------------------------------------------------------------------------
createColumn(const::rtl::OUString & ColumnType)374*b1cdbd2cSJim Jagielski Reference<XPropertySet> SAL_CALL OGridControlModel::createColumn(const ::rtl::OUString& ColumnType) throw ( :: com::sun::star::lang::IllegalArgumentException, ::com::sun::star::uno::RuntimeException)
375*b1cdbd2cSJim Jagielski {
376*b1cdbd2cSJim Jagielski 	const Sequence< ::rtl::OUString >& rColumnTypes = frm::getColumnTypes();
377*b1cdbd2cSJim Jagielski 	return createColumn( forms_detail::findPos( ColumnType, rColumnTypes ) );
378*b1cdbd2cSJim Jagielski }
379*b1cdbd2cSJim Jagielski 
380*b1cdbd2cSJim Jagielski //------------------------------------------------------------------------------
createColumn(sal_Int32 nTypeId) const381*b1cdbd2cSJim Jagielski Reference<XPropertySet>  OGridControlModel::createColumn(sal_Int32 nTypeId) const
382*b1cdbd2cSJim Jagielski {
383*b1cdbd2cSJim Jagielski 	Reference<XPropertySet>  xReturn;
384*b1cdbd2cSJim Jagielski 	switch (nTypeId)
385*b1cdbd2cSJim Jagielski 	{
386*b1cdbd2cSJim Jagielski 		case TYPE_CHECKBOX: 		xReturn = new CheckBoxColumn( getContext() ); break;
387*b1cdbd2cSJim Jagielski 		case TYPE_COMBOBOX: 		xReturn = new ComboBoxColumn( getContext() ); break;
388*b1cdbd2cSJim Jagielski 		case TYPE_CURRENCYFIELD:	xReturn = new CurrencyFieldColumn( getContext() ); break;
389*b1cdbd2cSJim Jagielski 		case TYPE_DATEFIELD:		xReturn = new DateFieldColumn( getContext() ); break;
390*b1cdbd2cSJim Jagielski 		case TYPE_LISTBOX:			xReturn = new ListBoxColumn( getContext() ); break;
391*b1cdbd2cSJim Jagielski 		case TYPE_NUMERICFIELD: 	xReturn = new NumericFieldColumn( getContext() ); break;
392*b1cdbd2cSJim Jagielski 		case TYPE_PATTERNFIELD: 	xReturn = new PatternFieldColumn( getContext() ); break;
393*b1cdbd2cSJim Jagielski 		case TYPE_TEXTFIELD:		xReturn = new TextFieldColumn( getContext() ); break;
394*b1cdbd2cSJim Jagielski 		case TYPE_TIMEFIELD:		xReturn = new TimeFieldColumn( getContext() ); break;
395*b1cdbd2cSJim Jagielski 		case TYPE_FORMATTEDFIELD:	xReturn = new FormattedFieldColumn( getContext() ); break;
396*b1cdbd2cSJim Jagielski 		default:
397*b1cdbd2cSJim Jagielski 			DBG_ERROR("OGridControlModel::createColumn: Unknown Column");
398*b1cdbd2cSJim Jagielski 			break;
399*b1cdbd2cSJim Jagielski 	}
400*b1cdbd2cSJim Jagielski 	return xReturn;
401*b1cdbd2cSJim Jagielski }
402*b1cdbd2cSJim Jagielski 
403*b1cdbd2cSJim Jagielski //------------------------------------------------------------------------------
getColumnTypes()404*b1cdbd2cSJim Jagielski StringSequence SAL_CALL OGridControlModel::getColumnTypes() throw ( ::com::sun::star::uno::RuntimeException)
405*b1cdbd2cSJim Jagielski {
406*b1cdbd2cSJim Jagielski 	return frm::getColumnTypes();
407*b1cdbd2cSJim Jagielski }
408*b1cdbd2cSJim Jagielski 
409*b1cdbd2cSJim Jagielski // XReset
410*b1cdbd2cSJim Jagielski //-----------------------------------------------------------------------------
reset()411*b1cdbd2cSJim Jagielski void SAL_CALL OGridControlModel::reset() throw ( ::com::sun::star::uno::RuntimeException)
412*b1cdbd2cSJim Jagielski {
413*b1cdbd2cSJim Jagielski 	::cppu::OInterfaceIteratorHelper aIter(m_aResetListeners);
414*b1cdbd2cSJim Jagielski 	EventObject aEvt(static_cast<XWeak*>(this));
415*b1cdbd2cSJim Jagielski 	sal_Bool bContinue = sal_True;
416*b1cdbd2cSJim Jagielski 	while (aIter.hasMoreElements() && bContinue)
417*b1cdbd2cSJim Jagielski 		bContinue =((XResetListener*)aIter.next())->approveReset(aEvt);
418*b1cdbd2cSJim Jagielski 
419*b1cdbd2cSJim Jagielski 	if (bContinue)
420*b1cdbd2cSJim Jagielski 	{
421*b1cdbd2cSJim Jagielski 		_reset();
422*b1cdbd2cSJim Jagielski         m_aResetListeners.notifyEach( &XResetListener::resetted, aEvt );
423*b1cdbd2cSJim Jagielski 	}
424*b1cdbd2cSJim Jagielski }
425*b1cdbd2cSJim Jagielski 
426*b1cdbd2cSJim Jagielski //-----------------------------------------------------------------------------
addResetListener(const Reference<XResetListener> & _rxListener)427*b1cdbd2cSJim Jagielski void SAL_CALL OGridControlModel::addResetListener(const Reference<XResetListener>& _rxListener) throw ( ::com::sun::star::uno::RuntimeException)
428*b1cdbd2cSJim Jagielski {
429*b1cdbd2cSJim Jagielski 	m_aResetListeners.addInterface(_rxListener);
430*b1cdbd2cSJim Jagielski }
431*b1cdbd2cSJim Jagielski 
432*b1cdbd2cSJim Jagielski //-----------------------------------------------------------------------------
removeResetListener(const Reference<XResetListener> & _rxListener)433*b1cdbd2cSJim Jagielski void SAL_CALL OGridControlModel::removeResetListener(const Reference<XResetListener>& _rxListener) throw ( ::com::sun::star::uno::RuntimeException)
434*b1cdbd2cSJim Jagielski {
435*b1cdbd2cSJim Jagielski 	m_aResetListeners.removeInterface(_rxListener);
436*b1cdbd2cSJim Jagielski }
437*b1cdbd2cSJim Jagielski 
438*b1cdbd2cSJim Jagielski //-----------------------------------------------------------------------------
_reset()439*b1cdbd2cSJim Jagielski void OGridControlModel::_reset()
440*b1cdbd2cSJim Jagielski {
441*b1cdbd2cSJim Jagielski 	Reference<XReset> xReset;
442*b1cdbd2cSJim Jagielski 	sal_Int32 nCount = getCount();
443*b1cdbd2cSJim Jagielski 	for (sal_Int32 nIndex=0; nIndex < nCount; nIndex++)
444*b1cdbd2cSJim Jagielski 	{
445*b1cdbd2cSJim Jagielski 		getByIndex( nIndex ) >>= xReset;
446*b1cdbd2cSJim Jagielski 		if (xReset.is())
447*b1cdbd2cSJim Jagielski 			xReset->reset();
448*b1cdbd2cSJim Jagielski 	}
449*b1cdbd2cSJim Jagielski }
450*b1cdbd2cSJim Jagielski 
451*b1cdbd2cSJim Jagielski // XPropertySet
452*b1cdbd2cSJim Jagielski //------------------------------------------------------------------------------
describeFixedProperties(Sequence<Property> & _rProps) const453*b1cdbd2cSJim Jagielski void OGridControlModel::describeFixedProperties( Sequence< Property >& _rProps ) const
454*b1cdbd2cSJim Jagielski {
455*b1cdbd2cSJim Jagielski 	BEGIN_DESCRIBE_BASE_PROPERTIES( 37 )
456*b1cdbd2cSJim Jagielski 		DECL_PROP1(NAME,				::rtl::OUString,	BOUND);
457*b1cdbd2cSJim Jagielski 		DECL_PROP2(CLASSID, 			sal_Int16,			READONLY, TRANSIENT);
458*b1cdbd2cSJim Jagielski 		DECL_PROP1(TAG, 				::rtl::OUString,	BOUND);
459*b1cdbd2cSJim Jagielski 		DECL_PROP1(TABINDEX,			sal_Int16,			BOUND);
460*b1cdbd2cSJim Jagielski 		DECL_PROP3(TABSTOP, 			sal_Bool,			BOUND, MAYBEDEFAULT, MAYBEVOID);
461*b1cdbd2cSJim Jagielski 		DECL_PROP2(HASNAVIGATION,		sal_Bool,			BOUND, MAYBEDEFAULT);
462*b1cdbd2cSJim Jagielski 		DECL_PROP1(ENABLED, 			sal_Bool,			BOUND);
463*b1cdbd2cSJim Jagielski 		DECL_PROP2(ENABLEVISIBLE,		sal_Bool,			BOUND, MAYBEDEFAULT);
464*b1cdbd2cSJim Jagielski 		DECL_PROP1(BORDER,				sal_Int16,			BOUND);
465*b1cdbd2cSJim Jagielski 		DECL_PROP2(BORDERCOLOR,	        sal_Int16,			BOUND, MAYBEVOID);
466*b1cdbd2cSJim Jagielski 		DECL_PROP1(DEFAULTCONTROL,		::rtl::OUString,	BOUND);
467*b1cdbd2cSJim Jagielski 		DECL_PROP3(TEXTCOLOR,			sal_Int32,			BOUND, MAYBEDEFAULT, MAYBEVOID);
468*b1cdbd2cSJim Jagielski 		DECL_PROP3(BACKGROUNDCOLOR, 	sal_Int32,			BOUND, MAYBEDEFAULT, MAYBEVOID);
469*b1cdbd2cSJim Jagielski 		DECL_PROP2(FONT,				FontDescriptor, 	BOUND, MAYBEDEFAULT);
470*b1cdbd2cSJim Jagielski 		DECL_PROP3(ROWHEIGHT,			sal_Int32,			BOUND, MAYBEDEFAULT, MAYBEVOID);
471*b1cdbd2cSJim Jagielski 		DECL_PROP1(HELPTEXT,			::rtl::OUString,	BOUND);
472*b1cdbd2cSJim Jagielski 		DECL_PROP1(FONT_NAME,			::rtl::OUString,	MAYBEDEFAULT);
473*b1cdbd2cSJim Jagielski 		DECL_PROP1(FONT_STYLENAME,		::rtl::OUString,	MAYBEDEFAULT);
474*b1cdbd2cSJim Jagielski 		DECL_PROP1(FONT_FAMILY, 		sal_Int16,			MAYBEDEFAULT);
475*b1cdbd2cSJim Jagielski 		DECL_PROP1(FONT_CHARSET,		sal_Int16,			MAYBEDEFAULT);
476*b1cdbd2cSJim Jagielski 		DECL_PROP1(FONT_HEIGHT, 		float,				MAYBEDEFAULT);
477*b1cdbd2cSJim Jagielski 		DECL_PROP1(FONT_WEIGHT, 		float,				MAYBEDEFAULT);
478*b1cdbd2cSJim Jagielski 		DECL_PROP1(FONT_SLANT,			sal_Int16,			MAYBEDEFAULT);
479*b1cdbd2cSJim Jagielski 		DECL_PROP1(FONT_UNDERLINE,		sal_Int16,			MAYBEDEFAULT);
480*b1cdbd2cSJim Jagielski 		DECL_BOOL_PROP1(FONT_WORDLINEMODE,					MAYBEDEFAULT);
481*b1cdbd2cSJim Jagielski 		DECL_PROP3(TEXTLINECOLOR,		sal_Int32,			BOUND, MAYBEDEFAULT, MAYBEVOID);
482*b1cdbd2cSJim Jagielski 		DECL_PROP2(FONTEMPHASISMARK,	sal_Int16,			BOUND, MAYBEDEFAULT);
483*b1cdbd2cSJim Jagielski 		DECL_PROP2(FONTRELIEF,			sal_Int16,			BOUND, MAYBEDEFAULT);
484*b1cdbd2cSJim Jagielski 		DECL_PROP1(FONT_STRIKEOUT,		sal_Int16,			MAYBEDEFAULT);
485*b1cdbd2cSJim Jagielski 		DECL_PROP2(RECORDMARKER,		sal_Bool,			BOUND, MAYBEDEFAULT );
486*b1cdbd2cSJim Jagielski 		DECL_PROP2(PRINTABLE,			sal_Bool,			BOUND, MAYBEDEFAULT );
487*b1cdbd2cSJim Jagielski 		DECL_PROP4(CURSORCOLOR, 		sal_Int32,			BOUND, MAYBEDEFAULT, MAYBEVOID , TRANSIENT);
488*b1cdbd2cSJim Jagielski 		DECL_PROP3(ALWAYSSHOWCURSOR,	sal_Bool,			BOUND, MAYBEDEFAULT, TRANSIENT);
489*b1cdbd2cSJim Jagielski 		DECL_PROP3(DISPLAYSYNCHRON, 	sal_Bool,			BOUND, MAYBEDEFAULT, TRANSIENT);
490*b1cdbd2cSJim Jagielski 		DECL_PROP2(HELPURL, 			::rtl::OUString,	BOUND, MAYBEDEFAULT);
491*b1cdbd2cSJim Jagielski         DECL_PROP2(WRITING_MODE,        sal_Int16,          BOUND, MAYBEDEFAULT);
492*b1cdbd2cSJim Jagielski         DECL_PROP3(CONTEXT_WRITING_MODE,sal_Int16,          BOUND, MAYBEDEFAULT, TRANSIENT);
493*b1cdbd2cSJim Jagielski     END_DESCRIBE_PROPERTIES();
494*b1cdbd2cSJim Jagielski }
495*b1cdbd2cSJim Jagielski 
496*b1cdbd2cSJim Jagielski //------------------------------------------------------------------------------
getFastPropertyValue(Any & rValue,sal_Int32 nHandle) const497*b1cdbd2cSJim Jagielski void OGridControlModel::getFastPropertyValue(Any& rValue, sal_Int32 nHandle ) const
498*b1cdbd2cSJim Jagielski {
499*b1cdbd2cSJim Jagielski 	switch (nHandle)
500*b1cdbd2cSJim Jagielski 	{
501*b1cdbd2cSJim Jagielski         case PROPERTY_ID_CONTEXT_WRITING_MODE:
502*b1cdbd2cSJim Jagielski             rValue <<= m_nContextWritingMode;
503*b1cdbd2cSJim Jagielski             break;
504*b1cdbd2cSJim Jagielski         case PROPERTY_ID_WRITING_MODE:
505*b1cdbd2cSJim Jagielski             rValue <<= m_nWritingMode;
506*b1cdbd2cSJim Jagielski             break;
507*b1cdbd2cSJim Jagielski 		case PROPERTY_ID_HELPTEXT:
508*b1cdbd2cSJim Jagielski 			rValue <<= m_sHelpText;
509*b1cdbd2cSJim Jagielski 			break;
510*b1cdbd2cSJim Jagielski 		case PROPERTY_ID_HELPURL:
511*b1cdbd2cSJim Jagielski 			rValue <<= m_sHelpURL;
512*b1cdbd2cSJim Jagielski 			break;
513*b1cdbd2cSJim Jagielski 		case PROPERTY_ID_DISPLAYSYNCHRON:
514*b1cdbd2cSJim Jagielski 			setBOOL(rValue, m_bDisplaySynchron);
515*b1cdbd2cSJim Jagielski 			break;
516*b1cdbd2cSJim Jagielski 		case PROPERTY_ID_ALWAYSSHOWCURSOR:
517*b1cdbd2cSJim Jagielski 			setBOOL(rValue, m_bAlwaysShowCursor);
518*b1cdbd2cSJim Jagielski 			break;
519*b1cdbd2cSJim Jagielski 		case PROPERTY_ID_CURSORCOLOR:
520*b1cdbd2cSJim Jagielski 			rValue = m_aCursorColor;
521*b1cdbd2cSJim Jagielski 			break;
522*b1cdbd2cSJim Jagielski 		case PROPERTY_ID_PRINTABLE:
523*b1cdbd2cSJim Jagielski 			setBOOL(rValue, m_bPrintable);
524*b1cdbd2cSJim Jagielski 			break;
525*b1cdbd2cSJim Jagielski 		case PROPERTY_ID_TABSTOP:
526*b1cdbd2cSJim Jagielski 			rValue = m_aTabStop;
527*b1cdbd2cSJim Jagielski 			break;
528*b1cdbd2cSJim Jagielski 		case PROPERTY_ID_HASNAVIGATION:
529*b1cdbd2cSJim Jagielski 			setBOOL(rValue, m_bNavigation);
530*b1cdbd2cSJim Jagielski 			break;
531*b1cdbd2cSJim Jagielski 		case PROPERTY_ID_RECORDMARKER:
532*b1cdbd2cSJim Jagielski 			setBOOL(rValue, m_bRecordMarker);
533*b1cdbd2cSJim Jagielski 			break;
534*b1cdbd2cSJim Jagielski 		case PROPERTY_ID_ENABLED:
535*b1cdbd2cSJim Jagielski 			setBOOL(rValue, m_bEnable);
536*b1cdbd2cSJim Jagielski 			break;
537*b1cdbd2cSJim Jagielski 		case PROPERTY_ID_ENABLEVISIBLE:
538*b1cdbd2cSJim Jagielski 			setBOOL(rValue, m_bEnableVisible);
539*b1cdbd2cSJim Jagielski 			break;
540*b1cdbd2cSJim Jagielski 		case PROPERTY_ID_BORDER:
541*b1cdbd2cSJim Jagielski 			rValue <<= (sal_Int16)m_nBorder;
542*b1cdbd2cSJim Jagielski 			break;
543*b1cdbd2cSJim Jagielski 		case PROPERTY_ID_BORDERCOLOR:
544*b1cdbd2cSJim Jagielski 			rValue <<= m_aBorderColor;
545*b1cdbd2cSJim Jagielski 			break;
546*b1cdbd2cSJim Jagielski 		case PROPERTY_ID_DEFAULTCONTROL:
547*b1cdbd2cSJim Jagielski 			rValue <<= m_aDefaultControl;
548*b1cdbd2cSJim Jagielski 			break;
549*b1cdbd2cSJim Jagielski 		case PROPERTY_ID_BACKGROUNDCOLOR:
550*b1cdbd2cSJim Jagielski 			rValue = m_aBackgroundColor;
551*b1cdbd2cSJim Jagielski 			break;
552*b1cdbd2cSJim Jagielski 		case PROPERTY_ID_ROWHEIGHT:
553*b1cdbd2cSJim Jagielski 			rValue = m_aRowHeight;
554*b1cdbd2cSJim Jagielski 			break;
555*b1cdbd2cSJim Jagielski 
556*b1cdbd2cSJim Jagielski         default:
557*b1cdbd2cSJim Jagielski             if ( isFontRelatedProperty( nHandle ) )
558*b1cdbd2cSJim Jagielski                 FontControlModel::getFastPropertyValue( rValue, nHandle );
559*b1cdbd2cSJim Jagielski             else
560*b1cdbd2cSJim Jagielski 			    OControlModel::getFastPropertyValue( rValue, nHandle );
561*b1cdbd2cSJim Jagielski 	}
562*b1cdbd2cSJim Jagielski }
563*b1cdbd2cSJim Jagielski 
564*b1cdbd2cSJim Jagielski //------------------------------------------------------------------------------
convertFastPropertyValue(Any & rConvertedValue,Any & rOldValue,sal_Int32 nHandle,const Any & rValue)565*b1cdbd2cSJim Jagielski sal_Bool OGridControlModel::convertFastPropertyValue( Any& rConvertedValue, Any& rOldValue,
566*b1cdbd2cSJim Jagielski 													sal_Int32 nHandle, const Any& rValue )throw( IllegalArgumentException )
567*b1cdbd2cSJim Jagielski {
568*b1cdbd2cSJim Jagielski 	sal_Bool bModified(sal_False);
569*b1cdbd2cSJim Jagielski 	switch (nHandle)
570*b1cdbd2cSJim Jagielski 	{
571*b1cdbd2cSJim Jagielski         case PROPERTY_ID_CONTEXT_WRITING_MODE:
572*b1cdbd2cSJim Jagielski 			bModified = tryPropertyValue( rConvertedValue, rOldValue, rValue, m_nContextWritingMode );
573*b1cdbd2cSJim Jagielski             break;
574*b1cdbd2cSJim Jagielski         case PROPERTY_ID_WRITING_MODE:
575*b1cdbd2cSJim Jagielski 			bModified = tryPropertyValue( rConvertedValue, rOldValue, rValue, m_nWritingMode );
576*b1cdbd2cSJim Jagielski             break;
577*b1cdbd2cSJim Jagielski 		case PROPERTY_ID_HELPTEXT:
578*b1cdbd2cSJim Jagielski 			bModified = tryPropertyValue(rConvertedValue, rOldValue, rValue, m_sHelpText);
579*b1cdbd2cSJim Jagielski 			break;
580*b1cdbd2cSJim Jagielski 		case PROPERTY_ID_HELPURL:
581*b1cdbd2cSJim Jagielski 			bModified = tryPropertyValue(rConvertedValue, rOldValue, rValue, m_sHelpURL);
582*b1cdbd2cSJim Jagielski 			break;
583*b1cdbd2cSJim Jagielski 		case PROPERTY_ID_DISPLAYSYNCHRON:
584*b1cdbd2cSJim Jagielski 			bModified = tryPropertyValue(rConvertedValue, rOldValue, rValue, m_bDisplaySynchron);
585*b1cdbd2cSJim Jagielski 			break;
586*b1cdbd2cSJim Jagielski 		case PROPERTY_ID_ALWAYSSHOWCURSOR:
587*b1cdbd2cSJim Jagielski 			bModified = tryPropertyValue(rConvertedValue, rOldValue, rValue, m_bAlwaysShowCursor);
588*b1cdbd2cSJim Jagielski 			break;
589*b1cdbd2cSJim Jagielski 		case PROPERTY_ID_CURSORCOLOR:
590*b1cdbd2cSJim Jagielski 			if (!rValue.hasValue() || !m_aCursorColor.hasValue())
591*b1cdbd2cSJim Jagielski 			{
592*b1cdbd2cSJim Jagielski 				if (rValue.hasValue() && (TypeClass_LONG != rValue.getValueType().getTypeClass()))
593*b1cdbd2cSJim Jagielski 				{
594*b1cdbd2cSJim Jagielski 					throw IllegalArgumentException();
595*b1cdbd2cSJim Jagielski 				}
596*b1cdbd2cSJim Jagielski 				rOldValue = m_aCursorColor;
597*b1cdbd2cSJim Jagielski 				rConvertedValue = rValue;
598*b1cdbd2cSJim Jagielski 				bModified = (rOldValue.getValue() != rConvertedValue.getValue());
599*b1cdbd2cSJim Jagielski 			}
600*b1cdbd2cSJim Jagielski 			else
601*b1cdbd2cSJim Jagielski 				bModified = tryPropertyValue(rConvertedValue, rOldValue, rValue, getINT32(m_aCursorColor));
602*b1cdbd2cSJim Jagielski 			break;
603*b1cdbd2cSJim Jagielski 		case PROPERTY_ID_PRINTABLE:
604*b1cdbd2cSJim Jagielski 			bModified = tryPropertyValue(rConvertedValue, rOldValue, rValue, m_bPrintable);
605*b1cdbd2cSJim Jagielski 			break;
606*b1cdbd2cSJim Jagielski 		case PROPERTY_ID_TABSTOP:
607*b1cdbd2cSJim Jagielski 			bModified = tryPropertyValue(rConvertedValue, rOldValue, rValue, m_aTabStop, ::getBooleanCppuType());
608*b1cdbd2cSJim Jagielski 			break;
609*b1cdbd2cSJim Jagielski 		case PROPERTY_ID_HASNAVIGATION:
610*b1cdbd2cSJim Jagielski 			bModified = tryPropertyValue(rConvertedValue, rOldValue, rValue, m_bNavigation);
611*b1cdbd2cSJim Jagielski 			break;
612*b1cdbd2cSJim Jagielski 		case PROPERTY_ID_RECORDMARKER:
613*b1cdbd2cSJim Jagielski 			bModified = tryPropertyValue(rConvertedValue, rOldValue, rValue, m_bRecordMarker);
614*b1cdbd2cSJim Jagielski 			break;
615*b1cdbd2cSJim Jagielski 		case PROPERTY_ID_ENABLED:
616*b1cdbd2cSJim Jagielski 			bModified = tryPropertyValue(rConvertedValue, rOldValue, rValue, m_bEnable);
617*b1cdbd2cSJim Jagielski 			break;
618*b1cdbd2cSJim Jagielski 		case PROPERTY_ID_ENABLEVISIBLE:
619*b1cdbd2cSJim Jagielski 			bModified = tryPropertyValue(rConvertedValue, rOldValue, rValue, m_bEnableVisible);
620*b1cdbd2cSJim Jagielski 			break;
621*b1cdbd2cSJim Jagielski 		case PROPERTY_ID_BORDER:
622*b1cdbd2cSJim Jagielski 			bModified = tryPropertyValue(rConvertedValue, rOldValue, rValue, m_nBorder);
623*b1cdbd2cSJim Jagielski 			break;
624*b1cdbd2cSJim Jagielski 		case PROPERTY_ID_BORDERCOLOR:
625*b1cdbd2cSJim Jagielski 			bModified = tryPropertyValue(rConvertedValue, rOldValue, rValue, m_aBorderColor, ::getCppuType((const sal_Int32*)NULL));
626*b1cdbd2cSJim Jagielski 			break;
627*b1cdbd2cSJim Jagielski 		case PROPERTY_ID_DEFAULTCONTROL:
628*b1cdbd2cSJim Jagielski 			bModified = tryPropertyValue(rConvertedValue, rOldValue, rValue, m_aDefaultControl);
629*b1cdbd2cSJim Jagielski 			break;
630*b1cdbd2cSJim Jagielski 		case PROPERTY_ID_BACKGROUNDCOLOR:
631*b1cdbd2cSJim Jagielski 			bModified = tryPropertyValue(rConvertedValue, rOldValue, rValue, m_aBackgroundColor, ::getCppuType((const sal_Int32*)NULL));
632*b1cdbd2cSJim Jagielski 			break;
633*b1cdbd2cSJim Jagielski 		case PROPERTY_ID_ROWHEIGHT:
634*b1cdbd2cSJim Jagielski 			{
635*b1cdbd2cSJim Jagielski 				bModified = tryPropertyValue(rConvertedValue, rOldValue, rValue, m_aRowHeight, ::getCppuType((const sal_Int32*)NULL));
636*b1cdbd2cSJim Jagielski 
637*b1cdbd2cSJim Jagielski 				sal_Int32 nNewVal( 0 );
638*b1cdbd2cSJim Jagielski 				if ( ( rConvertedValue >>= nNewVal ) && ( nNewVal <= 0 ) )
639*b1cdbd2cSJim Jagielski 				{
640*b1cdbd2cSJim Jagielski 					rConvertedValue.clear();
641*b1cdbd2cSJim Jagielski 					bModified = m_aRowHeight.hasValue();
642*b1cdbd2cSJim Jagielski 				}
643*b1cdbd2cSJim Jagielski 			}
644*b1cdbd2cSJim Jagielski 			break;
645*b1cdbd2cSJim Jagielski 		default:
646*b1cdbd2cSJim Jagielski             if ( isFontRelatedProperty( nHandle ) )
647*b1cdbd2cSJim Jagielski                 bModified = FontControlModel::convertFastPropertyValue( rConvertedValue, rOldValue, nHandle, rValue );
648*b1cdbd2cSJim Jagielski             else
649*b1cdbd2cSJim Jagielski 			    bModified = OControlModel::convertFastPropertyValue( rConvertedValue, rOldValue, nHandle, rValue);
650*b1cdbd2cSJim Jagielski 	}
651*b1cdbd2cSJim Jagielski 	return bModified;
652*b1cdbd2cSJim Jagielski }
653*b1cdbd2cSJim Jagielski 
654*b1cdbd2cSJim Jagielski //------------------------------------------------------------------------------
setFastPropertyValue_NoBroadcast(sal_Int32 nHandle,const Any & rValue)655*b1cdbd2cSJim Jagielski void OGridControlModel::setFastPropertyValue_NoBroadcast( sal_Int32 nHandle, const Any& rValue ) throw ( ::com::sun::star::uno::Exception)
656*b1cdbd2cSJim Jagielski {
657*b1cdbd2cSJim Jagielski 	switch (nHandle)
658*b1cdbd2cSJim Jagielski 	{
659*b1cdbd2cSJim Jagielski         case PROPERTY_ID_CONTEXT_WRITING_MODE:
660*b1cdbd2cSJim Jagielski             rValue >>= m_nContextWritingMode;
661*b1cdbd2cSJim Jagielski             break;
662*b1cdbd2cSJim Jagielski         case PROPERTY_ID_WRITING_MODE:
663*b1cdbd2cSJim Jagielski             rValue >>= m_nWritingMode;
664*b1cdbd2cSJim Jagielski             break;
665*b1cdbd2cSJim Jagielski 		case PROPERTY_ID_HELPTEXT:
666*b1cdbd2cSJim Jagielski 			rValue >>= m_sHelpText;
667*b1cdbd2cSJim Jagielski 			break;
668*b1cdbd2cSJim Jagielski 		case PROPERTY_ID_HELPURL:
669*b1cdbd2cSJim Jagielski 			rValue >>= m_sHelpURL;
670*b1cdbd2cSJim Jagielski 			break;
671*b1cdbd2cSJim Jagielski 		case PROPERTY_ID_DISPLAYSYNCHRON:
672*b1cdbd2cSJim Jagielski 			m_bDisplaySynchron = getBOOL(rValue);
673*b1cdbd2cSJim Jagielski 			break;
674*b1cdbd2cSJim Jagielski 		case PROPERTY_ID_ALWAYSSHOWCURSOR:
675*b1cdbd2cSJim Jagielski 			m_bAlwaysShowCursor = getBOOL(rValue);
676*b1cdbd2cSJim Jagielski 			break;
677*b1cdbd2cSJim Jagielski 		case PROPERTY_ID_CURSORCOLOR:
678*b1cdbd2cSJim Jagielski 			m_aCursorColor = rValue;
679*b1cdbd2cSJim Jagielski 			break;
680*b1cdbd2cSJim Jagielski 		case PROPERTY_ID_PRINTABLE:
681*b1cdbd2cSJim Jagielski 			m_bPrintable = getBOOL(rValue);
682*b1cdbd2cSJim Jagielski 			break;
683*b1cdbd2cSJim Jagielski 		case PROPERTY_ID_TABSTOP:
684*b1cdbd2cSJim Jagielski 			m_aTabStop = rValue;
685*b1cdbd2cSJim Jagielski 			break;
686*b1cdbd2cSJim Jagielski 		case PROPERTY_ID_HASNAVIGATION:
687*b1cdbd2cSJim Jagielski 			m_bNavigation = getBOOL(rValue);
688*b1cdbd2cSJim Jagielski 			break;
689*b1cdbd2cSJim Jagielski 		case PROPERTY_ID_ENABLED:
690*b1cdbd2cSJim Jagielski 			m_bEnable = getBOOL(rValue);
691*b1cdbd2cSJim Jagielski 			break;
692*b1cdbd2cSJim Jagielski 		case PROPERTY_ID_ENABLEVISIBLE:
693*b1cdbd2cSJim Jagielski 			m_bEnableVisible = getBOOL(rValue);
694*b1cdbd2cSJim Jagielski 			break;
695*b1cdbd2cSJim Jagielski 		case PROPERTY_ID_RECORDMARKER:
696*b1cdbd2cSJim Jagielski 			m_bRecordMarker = getBOOL(rValue);
697*b1cdbd2cSJim Jagielski 			break;
698*b1cdbd2cSJim Jagielski 		case PROPERTY_ID_BORDER:
699*b1cdbd2cSJim Jagielski 			rValue >>= m_nBorder;
700*b1cdbd2cSJim Jagielski 			break;
701*b1cdbd2cSJim Jagielski 		case PROPERTY_ID_BORDERCOLOR:
702*b1cdbd2cSJim Jagielski 			m_aBorderColor = rValue;
703*b1cdbd2cSJim Jagielski 			break;
704*b1cdbd2cSJim Jagielski 		case PROPERTY_ID_DEFAULTCONTROL:
705*b1cdbd2cSJim Jagielski 			rValue >>= m_aDefaultControl;
706*b1cdbd2cSJim Jagielski 			break;
707*b1cdbd2cSJim Jagielski 		case PROPERTY_ID_BACKGROUNDCOLOR:
708*b1cdbd2cSJim Jagielski 			m_aBackgroundColor = rValue;
709*b1cdbd2cSJim Jagielski 			break;
710*b1cdbd2cSJim Jagielski         case PROPERTY_ID_ROWHEIGHT:
711*b1cdbd2cSJim Jagielski 			m_aRowHeight = rValue;
712*b1cdbd2cSJim Jagielski 			break;
713*b1cdbd2cSJim Jagielski 
714*b1cdbd2cSJim Jagielski         default:
715*b1cdbd2cSJim Jagielski             if ( isFontRelatedProperty( nHandle ) )
716*b1cdbd2cSJim Jagielski             {
717*b1cdbd2cSJim Jagielski                 FontDescriptor aOldFont( getFont() );
718*b1cdbd2cSJim Jagielski 
719*b1cdbd2cSJim Jagielski                 FontControlModel::setFastPropertyValue_NoBroadcast( nHandle, rValue );
720*b1cdbd2cSJim Jagielski 
721*b1cdbd2cSJim Jagielski                 if ( isFontAggregateProperty( nHandle ) )
722*b1cdbd2cSJim Jagielski 	                firePropertyChange( PROPERTY_ID_FONT, makeAny( getFont() ), makeAny( aOldFont ) );
723*b1cdbd2cSJim Jagielski             }
724*b1cdbd2cSJim Jagielski             else
725*b1cdbd2cSJim Jagielski 			    OControlModel::setFastPropertyValue_NoBroadcast( nHandle, rValue );
726*b1cdbd2cSJim Jagielski 	}
727*b1cdbd2cSJim Jagielski 
728*b1cdbd2cSJim Jagielski }
729*b1cdbd2cSJim Jagielski 
730*b1cdbd2cSJim Jagielski //XPropertyState
731*b1cdbd2cSJim Jagielski 
732*b1cdbd2cSJim Jagielski //------------------------------------------------------------------------------
getPropertyDefaultByHandle(sal_Int32 nHandle) const733*b1cdbd2cSJim Jagielski Any OGridControlModel::getPropertyDefaultByHandle( sal_Int32 nHandle ) const
734*b1cdbd2cSJim Jagielski {
735*b1cdbd2cSJim Jagielski 	Any aReturn;
736*b1cdbd2cSJim Jagielski 	switch (nHandle)
737*b1cdbd2cSJim Jagielski 	{
738*b1cdbd2cSJim Jagielski         case PROPERTY_ID_CONTEXT_WRITING_MODE:
739*b1cdbd2cSJim Jagielski         case PROPERTY_ID_WRITING_MODE:
740*b1cdbd2cSJim Jagielski             aReturn <<= WritingMode2::CONTEXT;
741*b1cdbd2cSJim Jagielski             break;
742*b1cdbd2cSJim Jagielski 
743*b1cdbd2cSJim Jagielski 		case PROPERTY_ID_DEFAULTCONTROL:
744*b1cdbd2cSJim Jagielski 			aReturn <<= ::rtl::OUString( STARDIV_ONE_FORM_CONTROL_GRID  );
745*b1cdbd2cSJim Jagielski 			break;
746*b1cdbd2cSJim Jagielski 
747*b1cdbd2cSJim Jagielski 		case PROPERTY_ID_PRINTABLE:
748*b1cdbd2cSJim Jagielski 		case PROPERTY_ID_HASNAVIGATION:
749*b1cdbd2cSJim Jagielski 		case PROPERTY_ID_RECORDMARKER:
750*b1cdbd2cSJim Jagielski 		case PROPERTY_ID_DISPLAYSYNCHRON:
751*b1cdbd2cSJim Jagielski 		case PROPERTY_ID_ENABLED:
752*b1cdbd2cSJim Jagielski 		case PROPERTY_ID_ENABLEVISIBLE:
753*b1cdbd2cSJim Jagielski 			aReturn = makeBoolAny(sal_True);
754*b1cdbd2cSJim Jagielski 			break;
755*b1cdbd2cSJim Jagielski 
756*b1cdbd2cSJim Jagielski 		case PROPERTY_ID_ALWAYSSHOWCURSOR:
757*b1cdbd2cSJim Jagielski 			aReturn = makeBoolAny(sal_False);
758*b1cdbd2cSJim Jagielski 			break;
759*b1cdbd2cSJim Jagielski 
760*b1cdbd2cSJim Jagielski 		case PROPERTY_ID_HELPURL:
761*b1cdbd2cSJim Jagielski 		case PROPERTY_ID_HELPTEXT:
762*b1cdbd2cSJim Jagielski 			aReturn <<= ::rtl::OUString();
763*b1cdbd2cSJim Jagielski 			break;
764*b1cdbd2cSJim Jagielski 
765*b1cdbd2cSJim Jagielski 		case PROPERTY_ID_BORDER:
766*b1cdbd2cSJim Jagielski 			aReturn <<= (sal_Int16)1;
767*b1cdbd2cSJim Jagielski 			break;
768*b1cdbd2cSJim Jagielski 
769*b1cdbd2cSJim Jagielski 		case PROPERTY_ID_BORDERCOLOR:
770*b1cdbd2cSJim Jagielski 		case PROPERTY_ID_TABSTOP:
771*b1cdbd2cSJim Jagielski 		case PROPERTY_ID_BACKGROUNDCOLOR:
772*b1cdbd2cSJim Jagielski 		case PROPERTY_ID_ROWHEIGHT:
773*b1cdbd2cSJim Jagielski 		case PROPERTY_ID_CURSORCOLOR:
774*b1cdbd2cSJim Jagielski 			// void
775*b1cdbd2cSJim Jagielski 			break;
776*b1cdbd2cSJim Jagielski 
777*b1cdbd2cSJim Jagielski 		default:
778*b1cdbd2cSJim Jagielski             if ( isFontRelatedProperty( nHandle ) )
779*b1cdbd2cSJim Jagielski                 aReturn = FontControlModel::getPropertyDefaultByHandle( nHandle );
780*b1cdbd2cSJim Jagielski             else
781*b1cdbd2cSJim Jagielski 			    aReturn = OControlModel::getPropertyDefaultByHandle(nHandle);
782*b1cdbd2cSJim Jagielski 	}
783*b1cdbd2cSJim Jagielski 	return aReturn;
784*b1cdbd2cSJim Jagielski }
785*b1cdbd2cSJim Jagielski 
786*b1cdbd2cSJim Jagielski //------------------------------------------------------------------------------
getColumnImplementation(const InterfaceRef & _rxIFace) const787*b1cdbd2cSJim Jagielski OGridColumn* OGridControlModel::getColumnImplementation(const InterfaceRef& _rxIFace) const
788*b1cdbd2cSJim Jagielski {
789*b1cdbd2cSJim Jagielski 	OGridColumn* pImplementation = NULL;
790*b1cdbd2cSJim Jagielski 	Reference< XUnoTunnel > xUnoTunnel( _rxIFace, UNO_QUERY );
791*b1cdbd2cSJim Jagielski 	if ( xUnoTunnel.is() )
792*b1cdbd2cSJim Jagielski 		pImplementation = reinterpret_cast<OGridColumn*>(xUnoTunnel->getSomething(OGridColumn::getUnoTunnelImplementationId()));
793*b1cdbd2cSJim Jagielski 
794*b1cdbd2cSJim Jagielski 	return pImplementation;
795*b1cdbd2cSJim Jagielski }
796*b1cdbd2cSJim Jagielski 
797*b1cdbd2cSJim Jagielski //------------------------------------------------------------------------------
gotColumn(const Reference<XInterface> & _rxColumn)798*b1cdbd2cSJim Jagielski void OGridControlModel::gotColumn( const Reference< XInterface >& _rxColumn )
799*b1cdbd2cSJim Jagielski {
800*b1cdbd2cSJim Jagielski 	Reference< XSQLErrorBroadcaster > xBroadcaster( _rxColumn, UNO_QUERY );
801*b1cdbd2cSJim Jagielski 	if ( xBroadcaster.is() )
802*b1cdbd2cSJim Jagielski 		xBroadcaster->addSQLErrorListener( this );
803*b1cdbd2cSJim Jagielski }
804*b1cdbd2cSJim Jagielski 
805*b1cdbd2cSJim Jagielski //------------------------------------------------------------------------------
lostColumn(const Reference<XInterface> & _rxColumn)806*b1cdbd2cSJim Jagielski void OGridControlModel::lostColumn(const Reference< XInterface >& _rxColumn)
807*b1cdbd2cSJim Jagielski {
808*b1cdbd2cSJim Jagielski 	if ( m_xSelection == _rxColumn )
809*b1cdbd2cSJim Jagielski 	{	// the currently selected element was replaced
810*b1cdbd2cSJim Jagielski 		m_xSelection.clear();
811*b1cdbd2cSJim Jagielski 		EventObject aEvt( static_cast< XWeak* >( this ) );
812*b1cdbd2cSJim Jagielski         m_aSelectListeners.notifyEach( &XSelectionChangeListener::selectionChanged, aEvt );
813*b1cdbd2cSJim Jagielski 	}
814*b1cdbd2cSJim Jagielski 
815*b1cdbd2cSJim Jagielski     Reference< XSQLErrorBroadcaster > xBroadcaster( _rxColumn, UNO_QUERY );
816*b1cdbd2cSJim Jagielski 	if ( xBroadcaster.is() )
817*b1cdbd2cSJim Jagielski 		xBroadcaster->removeSQLErrorListener( this );
818*b1cdbd2cSJim Jagielski }
819*b1cdbd2cSJim Jagielski 
820*b1cdbd2cSJim Jagielski //------------------------------------------------------------------------------
implRemoved(const InterfaceRef & _rxObject)821*b1cdbd2cSJim Jagielski void OGridControlModel::implRemoved(const InterfaceRef& _rxObject)
822*b1cdbd2cSJim Jagielski {
823*b1cdbd2cSJim Jagielski 	OInterfaceContainer::implRemoved(_rxObject);
824*b1cdbd2cSJim Jagielski 	lostColumn(_rxObject);
825*b1cdbd2cSJim Jagielski }
826*b1cdbd2cSJim Jagielski 
827*b1cdbd2cSJim Jagielski //------------------------------------------------------------------------------
implInserted(const ElementDescription * _pElement)828*b1cdbd2cSJim Jagielski void OGridControlModel::implInserted( const ElementDescription* _pElement )
829*b1cdbd2cSJim Jagielski {
830*b1cdbd2cSJim Jagielski 	OInterfaceContainer::implInserted( _pElement );
831*b1cdbd2cSJim Jagielski 	gotColumn( _pElement->xInterface );
832*b1cdbd2cSJim Jagielski }
833*b1cdbd2cSJim Jagielski 
834*b1cdbd2cSJim Jagielski //------------------------------------------------------------------------------
impl_replacedElement(const ContainerEvent & _rEvent,::osl::ClearableMutexGuard & _rInstanceLock)835*b1cdbd2cSJim Jagielski void OGridControlModel::impl_replacedElement( const ContainerEvent& _rEvent, ::osl::ClearableMutexGuard& _rInstanceLock )
836*b1cdbd2cSJim Jagielski {
837*b1cdbd2cSJim Jagielski     Reference< XInterface > xOldColumn( _rEvent.ReplacedElement, UNO_QUERY );
838*b1cdbd2cSJim Jagielski     Reference< XInterface > xNewColumn( _rEvent.Element, UNO_QUERY );
839*b1cdbd2cSJim Jagielski 
840*b1cdbd2cSJim Jagielski     bool bNewSelection = ( xOldColumn == m_xSelection );
841*b1cdbd2cSJim Jagielski 
842*b1cdbd2cSJim Jagielski     lostColumn( xOldColumn );
843*b1cdbd2cSJim Jagielski 	gotColumn( xNewColumn );
844*b1cdbd2cSJim Jagielski 
845*b1cdbd2cSJim Jagielski     if ( bNewSelection )
846*b1cdbd2cSJim Jagielski         m_xSelection.set( xNewColumn, UNO_QUERY );
847*b1cdbd2cSJim Jagielski 
848*b1cdbd2cSJim Jagielski 	OInterfaceContainer::impl_replacedElement( _rEvent, _rInstanceLock );
849*b1cdbd2cSJim Jagielski     // <<---- SYNCHRONIZED
850*b1cdbd2cSJim Jagielski 
851*b1cdbd2cSJim Jagielski     if ( bNewSelection )
852*b1cdbd2cSJim Jagielski     {
853*b1cdbd2cSJim Jagielski         m_aSelectListeners.notifyEach( &XSelectionChangeListener::selectionChanged, EventObject( *this ) );
854*b1cdbd2cSJim Jagielski     }
855*b1cdbd2cSJim Jagielski }
856*b1cdbd2cSJim Jagielski 
857*b1cdbd2cSJim Jagielski //------------------------------------------------------------------------------
createElementMetaData()858*b1cdbd2cSJim Jagielski ElementDescription* OGridControlModel::createElementMetaData( )
859*b1cdbd2cSJim Jagielski {
860*b1cdbd2cSJim Jagielski 	return new ColumnDescription;
861*b1cdbd2cSJim Jagielski }
862*b1cdbd2cSJim Jagielski 
863*b1cdbd2cSJim Jagielski //------------------------------------------------------------------------------
approveNewElement(const Reference<XPropertySet> & _rxObject,ElementDescription * _pElement)864*b1cdbd2cSJim Jagielski void OGridControlModel::approveNewElement( const Reference< XPropertySet >& _rxObject, ElementDescription* _pElement )
865*b1cdbd2cSJim Jagielski {
866*b1cdbd2cSJim Jagielski 	OGridColumn* pCol = getColumnImplementation( _rxObject );
867*b1cdbd2cSJim Jagielski 	if ( !pCol )
868*b1cdbd2cSJim Jagielski 		throw IllegalArgumentException();
869*b1cdbd2cSJim Jagielski 
870*b1cdbd2cSJim Jagielski 	OInterfaceContainer::approveNewElement( _rxObject, _pElement );
871*b1cdbd2cSJim Jagielski 
872*b1cdbd2cSJim Jagielski 	// if we're here, the object passed all tests
873*b1cdbd2cSJim Jagielski 	if ( _pElement )
874*b1cdbd2cSJim Jagielski 		static_cast< ColumnDescription* >( _pElement )->pColumn = pCol;
875*b1cdbd2cSJim Jagielski }
876*b1cdbd2cSJim Jagielski 
877*b1cdbd2cSJim Jagielski // XPersistObject
878*b1cdbd2cSJim Jagielski //------------------------------------------------------------------------------
getServiceName()879*b1cdbd2cSJim Jagielski ::rtl::OUString SAL_CALL OGridControlModel::getServiceName() throw ( ::com::sun::star::uno::RuntimeException)
880*b1cdbd2cSJim Jagielski {
881*b1cdbd2cSJim Jagielski 	return FRM_COMPONENT_GRID;	// old (non-sun) name for compatibility !
882*b1cdbd2cSJim Jagielski }
883*b1cdbd2cSJim Jagielski 
884*b1cdbd2cSJim Jagielski //------------------------------------------------------------------------------
write(const Reference<XObjectOutputStream> & _rxOutStream)885*b1cdbd2cSJim Jagielski void OGridControlModel::write(const Reference<XObjectOutputStream>& _rxOutStream) throw ( ::com::sun::star::io::IOException, ::com::sun::star::uno::RuntimeException)
886*b1cdbd2cSJim Jagielski {
887*b1cdbd2cSJim Jagielski 	OControlModel::write(_rxOutStream);
888*b1cdbd2cSJim Jagielski 
889*b1cdbd2cSJim Jagielski 	Reference<XMarkableStream>	xMark(_rxOutStream, UNO_QUERY);
890*b1cdbd2cSJim Jagielski 
891*b1cdbd2cSJim Jagielski 	// 1. Version
892*b1cdbd2cSJim Jagielski 	_rxOutStream->writeShort(0x0008);
893*b1cdbd2cSJim Jagielski 
894*b1cdbd2cSJim Jagielski 	// 2. Columns
895*b1cdbd2cSJim Jagielski 	sal_Int32 nLen = getCount();
896*b1cdbd2cSJim Jagielski 	_rxOutStream->writeLong(nLen);
897*b1cdbd2cSJim Jagielski 	OGridColumn* pCol;
898*b1cdbd2cSJim Jagielski 	for (sal_Int32 i = 0; i < nLen; i++)
899*b1cdbd2cSJim Jagielski 	{
900*b1cdbd2cSJim Jagielski 		// zuerst den Servicenamen fuer das darunterliegende Model
901*b1cdbd2cSJim Jagielski 		pCol = getColumnImplementation(m_aItems[i]);
902*b1cdbd2cSJim Jagielski 		DBG_ASSERT(pCol != NULL, "OGridControlModel::write : such items should never reach it into my container !");
903*b1cdbd2cSJim Jagielski 
904*b1cdbd2cSJim Jagielski 		_rxOutStream << pCol->getModelName();
905*b1cdbd2cSJim Jagielski 
906*b1cdbd2cSJim Jagielski 		// dann das Object selbst
907*b1cdbd2cSJim Jagielski 		sal_Int32 nMark = xMark->createMark();
908*b1cdbd2cSJim Jagielski 		sal_Int32 nObjLen = 0;
909*b1cdbd2cSJim Jagielski 		_rxOutStream->writeLong(nObjLen);
910*b1cdbd2cSJim Jagielski 
911*b1cdbd2cSJim Jagielski 		// schreiben der Col
912*b1cdbd2cSJim Jagielski 		pCol->write(_rxOutStream);
913*b1cdbd2cSJim Jagielski 
914*b1cdbd2cSJim Jagielski 		// feststellen der Laenge
915*b1cdbd2cSJim Jagielski 		nObjLen = xMark->offsetToMark(nMark) - 4;
916*b1cdbd2cSJim Jagielski 		xMark->jumpToMark(nMark);
917*b1cdbd2cSJim Jagielski 		_rxOutStream->writeLong(nObjLen);
918*b1cdbd2cSJim Jagielski 		xMark->jumpToFurthest();
919*b1cdbd2cSJim Jagielski 		xMark->deleteMark(nMark);
920*b1cdbd2cSJim Jagielski 	}
921*b1cdbd2cSJim Jagielski 
922*b1cdbd2cSJim Jagielski 	// 3. Events
923*b1cdbd2cSJim Jagielski 	writeEvents(_rxOutStream);
924*b1cdbd2cSJim Jagielski 
925*b1cdbd2cSJim Jagielski 	// 4. Attribute
926*b1cdbd2cSJim Jagielski 	// Maskierung fuer alle any Typen
927*b1cdbd2cSJim Jagielski 	sal_uInt16 nAnyMask = 0;
928*b1cdbd2cSJim Jagielski 	if (m_aRowHeight.getValueType().getTypeClass() == TypeClass_LONG)
929*b1cdbd2cSJim Jagielski 		nAnyMask |= ROWHEIGHT;
930*b1cdbd2cSJim Jagielski 	if ( getFont() != getDefaultFont() )
931*b1cdbd2cSJim Jagielski 		nAnyMask |= FONTATTRIBS | FONTSIZE | FONTTYPE | FONTDESCRIPTOR;
932*b1cdbd2cSJim Jagielski 	if (m_aTabStop.getValueType().getTypeClass() == TypeClass_BOOLEAN)
933*b1cdbd2cSJim Jagielski 		nAnyMask |= TABSTOP;
934*b1cdbd2cSJim Jagielski 	if ( hasTextColor() )
935*b1cdbd2cSJim Jagielski 		nAnyMask |= TEXTCOLOR;
936*b1cdbd2cSJim Jagielski 	if (m_aBackgroundColor.getValueType().getTypeClass() == TypeClass_LONG)
937*b1cdbd2cSJim Jagielski 		nAnyMask |= BACKGROUNDCOLOR;
938*b1cdbd2cSJim Jagielski 	if (!m_bRecordMarker)
939*b1cdbd2cSJim Jagielski 		nAnyMask |= RECORDMARKER;
940*b1cdbd2cSJim Jagielski 
941*b1cdbd2cSJim Jagielski 	_rxOutStream->writeShort(nAnyMask);
942*b1cdbd2cSJim Jagielski 
943*b1cdbd2cSJim Jagielski 	if (nAnyMask & ROWHEIGHT)
944*b1cdbd2cSJim Jagielski 		_rxOutStream->writeLong(getINT32(m_aRowHeight));
945*b1cdbd2cSJim Jagielski 
946*b1cdbd2cSJim Jagielski 	// old structures
947*b1cdbd2cSJim Jagielski     const FontDescriptor& aFont = getFont();
948*b1cdbd2cSJim Jagielski 	if ( nAnyMask & FONTDESCRIPTOR )
949*b1cdbd2cSJim Jagielski     {
950*b1cdbd2cSJim Jagielski 		// Attrib
951*b1cdbd2cSJim Jagielski 		_rxOutStream->writeShort( sal::static_int_cast< sal_Int16 >( VCLUnoHelper::ConvertFontWeight( aFont.Weight ) ) );
952*b1cdbd2cSJim Jagielski 		_rxOutStream->writeShort( sal::static_int_cast< sal_Int16 >( aFont.Slant ) );
953*b1cdbd2cSJim Jagielski 		_rxOutStream->writeShort( aFont.Underline );
954*b1cdbd2cSJim Jagielski 		_rxOutStream->writeShort( aFont.Strikeout );
955*b1cdbd2cSJim Jagielski 		_rxOutStream->writeShort( sal_Int16(aFont.Orientation * 10) );
956*b1cdbd2cSJim Jagielski 		_rxOutStream->writeBoolean( aFont.Kerning );
957*b1cdbd2cSJim Jagielski 		_rxOutStream->writeBoolean( aFont.WordLineMode );
958*b1cdbd2cSJim Jagielski 
959*b1cdbd2cSJim Jagielski 		// Size
960*b1cdbd2cSJim Jagielski 		_rxOutStream->writeLong( aFont.Width );
961*b1cdbd2cSJim Jagielski 		_rxOutStream->writeLong( aFont.Height );
962*b1cdbd2cSJim Jagielski 		_rxOutStream->writeShort( sal::static_int_cast< sal_Int16 >( VCLUnoHelper::ConvertFontWidth( aFont.CharacterWidth ) ) );
963*b1cdbd2cSJim Jagielski 
964*b1cdbd2cSJim Jagielski 		// Type
965*b1cdbd2cSJim Jagielski 		_rxOutStream->writeUTF( aFont.Name );
966*b1cdbd2cSJim Jagielski 		_rxOutStream->writeUTF( aFont.StyleName );
967*b1cdbd2cSJim Jagielski 		_rxOutStream->writeShort( aFont.Family );
968*b1cdbd2cSJim Jagielski 		_rxOutStream->writeShort( aFont.CharSet );
969*b1cdbd2cSJim Jagielski 		_rxOutStream->writeShort( aFont.Pitch );
970*b1cdbd2cSJim Jagielski     }
971*b1cdbd2cSJim Jagielski 
972*b1cdbd2cSJim Jagielski     _rxOutStream << m_aDefaultControl;
973*b1cdbd2cSJim Jagielski 
974*b1cdbd2cSJim Jagielski 	_rxOutStream->writeShort(m_nBorder);
975*b1cdbd2cSJim Jagielski 	_rxOutStream->writeBoolean(m_bEnable);
976*b1cdbd2cSJim Jagielski 
977*b1cdbd2cSJim Jagielski 	if (nAnyMask & TABSTOP)
978*b1cdbd2cSJim Jagielski 		_rxOutStream->writeBoolean(getBOOL(m_aTabStop));
979*b1cdbd2cSJim Jagielski 
980*b1cdbd2cSJim Jagielski 	_rxOutStream->writeBoolean(m_bNavigation);
981*b1cdbd2cSJim Jagielski 
982*b1cdbd2cSJim Jagielski 	if (nAnyMask & TEXTCOLOR)
983*b1cdbd2cSJim Jagielski 		_rxOutStream->writeLong( getTextColor() );
984*b1cdbd2cSJim Jagielski 
985*b1cdbd2cSJim Jagielski 	// neu ab Version 6
986*b1cdbd2cSJim Jagielski 	_rxOutStream << m_sHelpText;
987*b1cdbd2cSJim Jagielski 
988*b1cdbd2cSJim Jagielski 	if (nAnyMask & FONTDESCRIPTOR)
989*b1cdbd2cSJim Jagielski 		_rxOutStream << getFont();
990*b1cdbd2cSJim Jagielski 
991*b1cdbd2cSJim Jagielski 	if (nAnyMask & RECORDMARKER)
992*b1cdbd2cSJim Jagielski 		_rxOutStream->writeBoolean(m_bRecordMarker);
993*b1cdbd2cSJim Jagielski 
994*b1cdbd2cSJim Jagielski 	// neu ab Version 7
995*b1cdbd2cSJim Jagielski 	_rxOutStream->writeBoolean(m_bPrintable);
996*b1cdbd2cSJim Jagielski 
997*b1cdbd2cSJim Jagielski 	// new since 8
998*b1cdbd2cSJim Jagielski 	if (nAnyMask & BACKGROUNDCOLOR)
999*b1cdbd2cSJim Jagielski 		_rxOutStream->writeLong(getINT32(m_aBackgroundColor));
1000*b1cdbd2cSJim Jagielski }
1001*b1cdbd2cSJim Jagielski 
1002*b1cdbd2cSJim Jagielski //------------------------------------------------------------------------------
read(const Reference<XObjectInputStream> & _rxInStream)1003*b1cdbd2cSJim Jagielski void OGridControlModel::read(const Reference<XObjectInputStream>& _rxInStream) throw ( ::com::sun::star::io::IOException, ::com::sun::star::uno::RuntimeException)
1004*b1cdbd2cSJim Jagielski {
1005*b1cdbd2cSJim Jagielski 	OControlModel::read(_rxInStream);
1006*b1cdbd2cSJim Jagielski 
1007*b1cdbd2cSJim Jagielski 	Reference<XMarkableStream>	xMark(_rxInStream, UNO_QUERY);
1008*b1cdbd2cSJim Jagielski 
1009*b1cdbd2cSJim Jagielski 	// 1. Version
1010*b1cdbd2cSJim Jagielski 	sal_Int16 nVersion = _rxInStream->readShort();
1011*b1cdbd2cSJim Jagielski 
1012*b1cdbd2cSJim Jagielski 	// 2. Einlesen der Spalten
1013*b1cdbd2cSJim Jagielski 	sal_Int32 nLen = _rxInStream->readLong();
1014*b1cdbd2cSJim Jagielski 	if (nLen)
1015*b1cdbd2cSJim Jagielski 	{
1016*b1cdbd2cSJim Jagielski 		for (sal_Int32 i = 0; i < nLen; i++)
1017*b1cdbd2cSJim Jagielski 		{
1018*b1cdbd2cSJim Jagielski 			// Lesen des Modelnamen
1019*b1cdbd2cSJim Jagielski 
1020*b1cdbd2cSJim Jagielski 			::rtl::OUString sModelName;
1021*b1cdbd2cSJim Jagielski 			_rxInStream >> sModelName;
1022*b1cdbd2cSJim Jagielski 
1023*b1cdbd2cSJim Jagielski 			Reference<XPropertySet>  xCol(createColumn(getColumnTypeByModelName(sModelName)));
1024*b1cdbd2cSJim Jagielski 			DBG_ASSERT(xCol.is(), "OGridControlModel::read : unknown column type !");
1025*b1cdbd2cSJim Jagielski 			sal_Int32 nObjLen = _rxInStream->readLong();
1026*b1cdbd2cSJim Jagielski 			if (nObjLen)
1027*b1cdbd2cSJim Jagielski 			{
1028*b1cdbd2cSJim Jagielski 				sal_Int32 nMark = xMark->createMark();
1029*b1cdbd2cSJim Jagielski 				if (xCol.is())
1030*b1cdbd2cSJim Jagielski 				{
1031*b1cdbd2cSJim Jagielski 					OGridColumn* pCol = getColumnImplementation(xCol);
1032*b1cdbd2cSJim Jagielski 					pCol->read(_rxInStream);
1033*b1cdbd2cSJim Jagielski 				}
1034*b1cdbd2cSJim Jagielski 				xMark->jumpToMark(nMark);
1035*b1cdbd2cSJim Jagielski 				_rxInStream->skipBytes(nObjLen);
1036*b1cdbd2cSJim Jagielski 				xMark->deleteMark(nMark);
1037*b1cdbd2cSJim Jagielski 			}
1038*b1cdbd2cSJim Jagielski 
1039*b1cdbd2cSJim Jagielski 			if ( xCol.is() )
1040*b1cdbd2cSJim Jagielski 				implInsert( i, xCol, sal_False, NULL, sal_False );
1041*b1cdbd2cSJim Jagielski 		}
1042*b1cdbd2cSJim Jagielski 	}
1043*b1cdbd2cSJim Jagielski 
1044*b1cdbd2cSJim Jagielski 	// In der Basisimplementierung werden die Events nur gelesen, Elemente im Container existieren
1045*b1cdbd2cSJim Jagielski 	// da aber vor TF_ONE fuer das GridControl immer Events geschrieben wurden, muessen sie auch immer
1046*b1cdbd2cSJim Jagielski 	// mit gelesen werden
1047*b1cdbd2cSJim Jagielski 	sal_Int32 nObjLen = _rxInStream->readLong();
1048*b1cdbd2cSJim Jagielski 	if (nObjLen)
1049*b1cdbd2cSJim Jagielski 	{
1050*b1cdbd2cSJim Jagielski 		sal_Int32 nMark = xMark->createMark();
1051*b1cdbd2cSJim Jagielski 		Reference<XPersistObject>  xObj(m_xEventAttacher, UNO_QUERY);
1052*b1cdbd2cSJim Jagielski 		if (xObj.is())
1053*b1cdbd2cSJim Jagielski 			xObj->read(_rxInStream);
1054*b1cdbd2cSJim Jagielski 		xMark->jumpToMark(nMark);
1055*b1cdbd2cSJim Jagielski 		_rxInStream->skipBytes(nObjLen);
1056*b1cdbd2cSJim Jagielski 		xMark->deleteMark(nMark);
1057*b1cdbd2cSJim Jagielski 	}
1058*b1cdbd2cSJim Jagielski 
1059*b1cdbd2cSJim Jagielski 	// Attachement lesen
1060*b1cdbd2cSJim Jagielski 	for (sal_Int32 i = 0; i < nLen; i++)
1061*b1cdbd2cSJim Jagielski 	{
1062*b1cdbd2cSJim Jagielski 		InterfaceRef  xIfc(m_aItems[i], UNO_QUERY);
1063*b1cdbd2cSJim Jagielski 		Reference<XPropertySet>  xSet(xIfc, UNO_QUERY);
1064*b1cdbd2cSJim Jagielski 		Any aHelper;
1065*b1cdbd2cSJim Jagielski 		aHelper <<= xSet;
1066*b1cdbd2cSJim Jagielski 		m_xEventAttacher->attach( i, xIfc, aHelper );
1067*b1cdbd2cSJim Jagielski 	}
1068*b1cdbd2cSJim Jagielski 
1069*b1cdbd2cSJim Jagielski 	// 4. Einlesen der Attribute
1070*b1cdbd2cSJim Jagielski 	if (nVersion == 1)
1071*b1cdbd2cSJim Jagielski 		return;
1072*b1cdbd2cSJim Jagielski 
1073*b1cdbd2cSJim Jagielski 	// Maskierung fuer any
1074*b1cdbd2cSJim Jagielski 	sal_uInt16 nAnyMask = _rxInStream->readShort();
1075*b1cdbd2cSJim Jagielski 
1076*b1cdbd2cSJim Jagielski 	if (nAnyMask & ROWHEIGHT)
1077*b1cdbd2cSJim Jagielski 	{
1078*b1cdbd2cSJim Jagielski 		sal_Int32 nValue = _rxInStream->readLong();
1079*b1cdbd2cSJim Jagielski 		m_aRowHeight <<= (sal_Int32)nValue;
1080*b1cdbd2cSJim Jagielski 	}
1081*b1cdbd2cSJim Jagielski 
1082*b1cdbd2cSJim Jagielski     FontDescriptor aFont( getFont() );
1083*b1cdbd2cSJim Jagielski 	if ( nAnyMask & FONTATTRIBS )
1084*b1cdbd2cSJim Jagielski 	{
1085*b1cdbd2cSJim Jagielski 		aFont.Weight = (float)VCLUnoHelper::ConvertFontWeight( _rxInStream->readShort() );
1086*b1cdbd2cSJim Jagielski 
1087*b1cdbd2cSJim Jagielski 		aFont.Slant = (FontSlant)_rxInStream->readShort();
1088*b1cdbd2cSJim Jagielski 		aFont.Underline = _rxInStream->readShort();
1089*b1cdbd2cSJim Jagielski 		aFont.Strikeout = _rxInStream->readShort();
1090*b1cdbd2cSJim Jagielski 		aFont.Orientation = ( (float)_rxInStream->readShort() ) / 10;
1091*b1cdbd2cSJim Jagielski 		aFont.Kerning = _rxInStream->readBoolean();
1092*b1cdbd2cSJim Jagielski 		aFont.WordLineMode = _rxInStream->readBoolean();
1093*b1cdbd2cSJim Jagielski 	}
1094*b1cdbd2cSJim Jagielski 	if ( nAnyMask & FONTSIZE )
1095*b1cdbd2cSJim Jagielski 	{
1096*b1cdbd2cSJim Jagielski 		aFont.Width = (sal_Int16)_rxInStream->readLong();
1097*b1cdbd2cSJim Jagielski 		aFont.Height = (sal_Int16)_rxInStream->readLong();
1098*b1cdbd2cSJim Jagielski 		aFont.CharacterWidth = (float)VCLUnoHelper::ConvertFontWidth( _rxInStream->readShort() );
1099*b1cdbd2cSJim Jagielski 	}
1100*b1cdbd2cSJim Jagielski 	if ( nAnyMask & FONTTYPE )
1101*b1cdbd2cSJim Jagielski 	{
1102*b1cdbd2cSJim Jagielski 		aFont.Name = _rxInStream->readUTF();
1103*b1cdbd2cSJim Jagielski 		aFont.StyleName = _rxInStream->readUTF();
1104*b1cdbd2cSJim Jagielski 		aFont.Family = _rxInStream->readShort();
1105*b1cdbd2cSJim Jagielski 		aFont.CharSet = _rxInStream->readShort();
1106*b1cdbd2cSJim Jagielski 		aFont.Pitch = _rxInStream->readShort();
1107*b1cdbd2cSJim Jagielski 	}
1108*b1cdbd2cSJim Jagielski 
1109*b1cdbd2cSJim Jagielski     if ( nAnyMask & ( FONTATTRIBS | FONTSIZE | FONTTYPE ) )
1110*b1cdbd2cSJim Jagielski         setFont( aFont );
1111*b1cdbd2cSJim Jagielski 
1112*b1cdbd2cSJim Jagielski 	// Name
1113*b1cdbd2cSJim Jagielski 	_rxInStream >> m_aDefaultControl;
1114*b1cdbd2cSJim Jagielski 	m_nBorder = _rxInStream->readShort();
1115*b1cdbd2cSJim Jagielski 	m_bEnable = _rxInStream->readBoolean();
1116*b1cdbd2cSJim Jagielski 
1117*b1cdbd2cSJim Jagielski 	if (nAnyMask & TABSTOP)
1118*b1cdbd2cSJim Jagielski 	{
1119*b1cdbd2cSJim Jagielski 		m_aTabStop = makeBoolAny(_rxInStream->readBoolean());
1120*b1cdbd2cSJim Jagielski 	}
1121*b1cdbd2cSJim Jagielski 
1122*b1cdbd2cSJim Jagielski 	if (nVersion > 3)
1123*b1cdbd2cSJim Jagielski 		m_bNavigation = _rxInStream->readBoolean();
1124*b1cdbd2cSJim Jagielski 
1125*b1cdbd2cSJim Jagielski 	if (nAnyMask & TEXTCOLOR)
1126*b1cdbd2cSJim Jagielski 	{
1127*b1cdbd2cSJim Jagielski 		sal_Int32 nValue = _rxInStream->readLong();
1128*b1cdbd2cSJim Jagielski         setTextColor( (sal_Int32)nValue );
1129*b1cdbd2cSJim Jagielski 	}
1130*b1cdbd2cSJim Jagielski 
1131*b1cdbd2cSJim Jagielski 	// neu ab Version 6
1132*b1cdbd2cSJim Jagielski 	if (nVersion > 5)
1133*b1cdbd2cSJim Jagielski 		_rxInStream >> m_sHelpText;
1134*b1cdbd2cSJim Jagielski 
1135*b1cdbd2cSJim Jagielski 	if (nAnyMask & FONTDESCRIPTOR)
1136*b1cdbd2cSJim Jagielski 	{
1137*b1cdbd2cSJim Jagielski         FontDescriptor aUNOFont;
1138*b1cdbd2cSJim Jagielski 		_rxInStream >> aUNOFont;
1139*b1cdbd2cSJim Jagielski         setFont( aFont );
1140*b1cdbd2cSJim Jagielski 	}
1141*b1cdbd2cSJim Jagielski 
1142*b1cdbd2cSJim Jagielski 	if (nAnyMask & RECORDMARKER)
1143*b1cdbd2cSJim Jagielski 		m_bRecordMarker = _rxInStream->readBoolean();
1144*b1cdbd2cSJim Jagielski 
1145*b1cdbd2cSJim Jagielski 	// neu ab Version 7
1146*b1cdbd2cSJim Jagielski 	if (nVersion > 6)
1147*b1cdbd2cSJim Jagielski 		m_bPrintable = _rxInStream->readBoolean();
1148*b1cdbd2cSJim Jagielski 
1149*b1cdbd2cSJim Jagielski 	if (nAnyMask & BACKGROUNDCOLOR)
1150*b1cdbd2cSJim Jagielski 	{
1151*b1cdbd2cSJim Jagielski 		sal_Int32 nValue = _rxInStream->readLong();
1152*b1cdbd2cSJim Jagielski 		m_aBackgroundColor <<= (sal_Int32)nValue;
1153*b1cdbd2cSJim Jagielski 	}
1154*b1cdbd2cSJim Jagielski }
1155*b1cdbd2cSJim Jagielski 
1156*b1cdbd2cSJim Jagielski //.........................................................................
1157*b1cdbd2cSJim Jagielski }	// namespace frm
1158*b1cdbd2cSJim Jagielski //.........................................................................
1159*b1cdbd2cSJim Jagielski 
1160