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