summaryrefslogtreecommitdiffstats
path: root/forms/source/component/Grid.cxx
diff options
context:
space:
mode:
authorFrank Schönheit <fs@openoffice.org>2002-12-02 08:56:36 +0000
committerFrank Schönheit <fs@openoffice.org>2002-12-02 08:56:36 +0000
commitb0c4be14883b4390642c3c60da343d0571ca34e7 (patch)
tree3eb1ff42f79f4f6ad5af7f387195f8abee11cd3f /forms/source/component/Grid.cxx
parent#105577# +cloneable (diff)
downloadcore-b0c4be14883b4390642c3c60da343d0571ca34e7.tar.gz
core-b0c4be14883b4390642c3c60da343d0571ca34e7.zip
#105577# properly (hopefully :) implemented XClonable
Diffstat (limited to 'forms/source/component/Grid.cxx')
-rw-r--r--forms/source/component/Grid.cxx74
1 files changed, 71 insertions, 3 deletions
diff --git a/forms/source/component/Grid.cxx b/forms/source/component/Grid.cxx
index 0a1c1f988f5d..c13202c1f95e 100644
--- a/forms/source/component/Grid.cxx
+++ b/forms/source/component/Grid.cxx
@@ -2,9 +2,9 @@
*
* $RCSfile: Grid.cxx,v $
*
- * $Revision: 1.25 $
+ * $Revision: 1.26 $
*
- * last change: $Author: fs $ $Date: 2002-10-04 08:11:48 $
+ * last change: $Author: fs $ $Date: 2002-12-02 09:56:31 $
*
* The Contents of this file are made available subject to the terms of
* either of the following licenses
@@ -202,9 +202,36 @@ OGridControlModel::OGridControlModel(const Reference<XMultiServiceFactory>& _rxF
}
//------------------------------------------------------------------
+OGridControlModel::OGridControlModel( const OGridControlModel* _pOriginal, const Reference< XMultiServiceFactory >& _rxFactory )
+ :OControlModel( _pOriginal, _rxFactory )
+ ,OInterfaceContainer( _rxFactory, m_aMutex, ::getCppuType( static_cast<Reference<XPropertySet>*>( NULL ) ) )
+ ,OErrorBroadcaster( OComponentHelper::rBHelper )
+ ,m_aSelectListeners( m_aMutex )
+ ,m_aResetListeners( m_aMutex )
+{
+ DBG_CTOR(OGridControlModel,NULL);
+
+ m_aDefaultControl = _pOriginal->m_aDefaultControl;
+ m_nFontEvent = _pOriginal->m_nFontEvent;
+ m_bEnable = _pOriginal->m_bEnable;
+ m_bNavigation = _pOriginal->m_bNavigation;
+ m_nBorder = _pOriginal->m_nBorder;
+ m_bRecordMarker = _pOriginal->m_bRecordMarker;
+ m_bPrintable = _pOriginal->m_bPrintable;
+ m_bAlwaysShowCursor = _pOriginal->m_bAlwaysShowCursor;
+ m_bDisplaySynchron = _pOriginal->m_bDisplaySynchron;
+ m_nFontRelief = _pOriginal->m_nFontRelief;
+ m_nFontEmphasis = _pOriginal->m_nFontEmphasis;
+
+ // clone the columns
+ cloneColumns( _pOriginal );
+
+ // TODO: clone the events?
+}
+
+//------------------------------------------------------------------
OGridControlModel::~OGridControlModel()
{
- DBG_DTOR(OGridControlModel,NULL);
if (m_nFontEvent)
Application::RemoveUserEvent(m_nFontEvent);
@@ -214,6 +241,47 @@ OGridControlModel::~OGridControlModel()
dispose();
}
+ DBG_DTOR(OGridControlModel,NULL);
+}
+
+// XCloneable
+//------------------------------------------------------------------------------
+IMPLEMENT_DEFAULT_CLONING( OGridControlModel )
+
+//------------------------------------------------------------------------------
+void OGridControlModel::cloneColumns( const OGridControlModel* _pOriginalContainer )
+{
+ try
+ {
+ Reference< XCloneable > xColCloneable;
+
+ const OInterfaceArray::const_iterator pColumnStart = m_aItems.begin();
+ const OInterfaceArray::const_iterator pColumnEnd = m_aItems.end();
+ for ( OInterfaceArray::const_iterator pColumn = pColumnStart; pColumn != pColumnEnd; ++pColumn )
+ {
+ // ask the col for a factory for the clone
+ xColCloneable = xColCloneable.query( *pColumn );
+ DBG_ASSERT( xColCloneable.is(), "OGridControlModel::cloneColumns: column is not cloneable!" );
+
+ if ( xColCloneable.is() )
+ {
+ // create a clone of the column
+ Reference< XCloneable > xColClone( xColCloneable->createClone() );
+ DBG_ASSERT( xColClone.is(), "OGridControlModel::cloneColumns: invalid column clone!" );
+
+ if ( xColClone.is() )
+ {
+ // insert this clone into our own container
+ insertByIndex( pColumn - pColumnStart, xColClone->queryInterface( m_aElementType ) );
+ }
+
+ }
+ }
+ }
+ catch( const Exception& )
+ {
+ DBG_ERROR( "OGridControlModel::cloneColumns: caught an exception while cloning the columns!" );
+ }
}
// XServiceInfo