Kaydet (Commit) b83e7371 authored tarafından Frank Schoenheit [fs]'s avatar Frank Schoenheit [fs]

gridsort: allow cloning grid columns, and the (default) grid data/column model

üst cb2f6f86
...@@ -84,7 +84,7 @@ using namespace ::com::sun::star::awt::grid; ...@@ -84,7 +84,7 @@ using namespace ::com::sun::star::awt::grid;
//-------------------------------------------------------------------- //--------------------------------------------------------------------
UnoControlTableColumn::UnoControlTableColumn( const Reference< XGridColumn >& i_gridColumn ) UnoControlTableColumn::UnoControlTableColumn( const Reference< XGridColumn >& i_gridColumn )
:m_nID( 0 ) :m_nID( 0 )
,m_xGridColumn( i_gridColumn, UNO_SET_THROW ) ,m_xGridColumn( i_gridColumn, UNO_QUERY_THROW )
{ {
} }
......
...@@ -59,6 +59,7 @@ namespace toolkit ...@@ -59,6 +59,7 @@ namespace toolkit
using ::com::sun::star::container::ContainerEvent; using ::com::sun::star::container::ContainerEvent;
using ::com::sun::star::uno::Exception; using ::com::sun::star::uno::Exception;
using ::com::sun::star::lang::IndexOutOfBoundsException; using ::com::sun::star::lang::IndexOutOfBoundsException;
using ::com::sun::star::util::XCloneable;
/** === end UNO using === **/ /** === end UNO using === **/
//================================================================================================================== //==================================================================================================================
...@@ -74,6 +75,35 @@ namespace toolkit ...@@ -74,6 +75,35 @@ namespace toolkit
{ {
} }
//------------------------------------------------------------------------------------------------------------------
DefaultGridColumnModel::DefaultGridColumnModel( DefaultGridColumnModel const & i_copySource )
:DefaultGridColumnModel_Base( m_aMutex )
,m_aContext( i_copySource.m_aContext )
,m_aContainerListeners( m_aMutex )
,m_aColumns()
,m_nColumnHeaderHeight( i_copySource.m_nColumnHeaderHeight )
{
Columns aColumns;
aColumns.reserve( i_copySource.m_aColumns.size() );
try
{
for ( Columns::const_iterator col = i_copySource.m_aColumns.begin();
col != i_copySource.m_aColumns.end();
++col
)
{
const Reference< XCloneable > xCloneable( *col, UNO_QUERY_THROW );
aColumns.push_back( Reference< XGridColumn >( xCloneable->createClone(), UNO_QUERY_THROW ) );
}
}
catch( const Exception& )
{
DBG_UNHANDLED_EXCEPTION();
}
if ( aColumns.size() == i_copySource.m_aColumns.size() )
m_aColumns.swap( aColumns );
}
//------------------------------------------------------------------------------------------------------------------ //------------------------------------------------------------------------------------------------------------------
DefaultGridColumnModel::~DefaultGridColumnModel() DefaultGridColumnModel::~DefaultGridColumnModel()
{ {
...@@ -210,18 +240,9 @@ namespace toolkit ...@@ -210,18 +240,9 @@ namespace toolkit
} }
//------------------------------------------------------------------------------------------------------------------ //------------------------------------------------------------------------------------------------------------------
Reference< XGridColumn > SAL_CALL DefaultGridColumnModel::copyColumn(const Reference< XGridColumn > & column) throw (RuntimeException) Reference< XGridColumn > SAL_CALL DefaultGridColumnModel::copyColumn( const Reference< XGridColumn > & i_column ) throw (RuntimeException)
{ {
Reference< XGridColumn > xColumn( m_aContext.createComponent( "com.sun.star.awt.grid.GridColumn" ), UNO_QUERY_THROW ); return Reference< XGridColumn >( i_column->createClone(), UNO_QUERY_THROW );
xColumn->setColumnWidth(column->getColumnWidth());
xColumn->setPreferredWidth(column->getPreferredWidth());
xColumn->setMaxWidth(column->getMaxWidth());
xColumn->setMinWidth(column->getMinWidth());
xColumn->setPreferredWidth(column->getPreferredWidth());
xColumn->setResizeable(column->getResizeable());
xColumn->setTitle(column->getTitle());
xColumn->setHorizontalAlign(column->getHorizontalAlign());
return xColumn;
} }
//------------------------------------------------------------------------------------------------------------------ //------------------------------------------------------------------------------------------------------------------
...@@ -293,6 +314,12 @@ namespace toolkit ...@@ -293,6 +314,12 @@ namespace toolkit
} }
} }
//------------------------------------------------------------------------------------------------------------------
Reference< XCloneable > SAL_CALL DefaultGridColumnModel::createClone( ) throw (RuntimeException)
{
return new DefaultGridColumnModel( *this );
}
//...................................................................................................................... //......................................................................................................................
} // namespace toolkit } // namespace toolkit
//...................................................................................................................... //......................................................................................................................
......
...@@ -28,7 +28,6 @@ ...@@ -28,7 +28,6 @@
/** === begin UNO includes === **/ /** === begin UNO includes === **/
#include <com/sun/star/awt/grid/XGridColumnModel.hpp> #include <com/sun/star/awt/grid/XGridColumnModel.hpp>
#include <com/sun/star/awt/grid/XGridColumn.hpp> #include <com/sun/star/awt/grid/XGridColumn.hpp>
//#include <com/sun/star/awt/grid/GridColumnEvent.hpp>
#include <com/sun/star/lang/XEventListener.hpp> #include <com/sun/star/lang/XEventListener.hpp>
#include <com/sun/star/lang/XServiceInfo.hpp> #include <com/sun/star/lang/XServiceInfo.hpp>
#include <com/sun/star/lang/XUnoTunnel.hpp> #include <com/sun/star/lang/XUnoTunnel.hpp>
...@@ -54,7 +53,8 @@ class DefaultGridColumnModel :public ::cppu::BaseMutex ...@@ -54,7 +53,8 @@ class DefaultGridColumnModel :public ::cppu::BaseMutex
,public DefaultGridColumnModel_Base ,public DefaultGridColumnModel_Base
{ {
public: public:
DefaultGridColumnModel(const ::com::sun::star::uno::Reference< ::com::sun::star::lang::XMultiServiceFactory >& xFactory); DefaultGridColumnModel( const ::com::sun::star::uno::Reference< ::com::sun::star::lang::XMultiServiceFactory >& xFactory );
DefaultGridColumnModel( DefaultGridColumnModel const & i_copySource );
virtual ~DefaultGridColumnModel(); virtual ~DefaultGridColumnModel();
// XGridColumnModel // XGridColumnModel
...@@ -76,6 +76,9 @@ public: ...@@ -76,6 +76,9 @@ public:
virtual void SAL_CALL addContainerListener( const ::com::sun::star::uno::Reference< ::com::sun::star::container::XContainerListener >& xListener ) throw (::com::sun::star::uno::RuntimeException); virtual void SAL_CALL addContainerListener( const ::com::sun::star::uno::Reference< ::com::sun::star::container::XContainerListener >& xListener ) throw (::com::sun::star::uno::RuntimeException);
virtual void SAL_CALL removeContainerListener( const ::com::sun::star::uno::Reference< ::com::sun::star::container::XContainerListener >& xListener ) throw (::com::sun::star::uno::RuntimeException); virtual void SAL_CALL removeContainerListener( const ::com::sun::star::uno::Reference< ::com::sun::star::container::XContainerListener >& xListener ) throw (::com::sun::star::uno::RuntimeException);
// XCloneable
virtual ::com::sun::star::uno::Reference< ::com::sun::star::util::XCloneable > SAL_CALL createClone( ) throw (::com::sun::star::uno::RuntimeException);
// OComponentHelper // OComponentHelper
virtual void SAL_CALL disposing(); virtual void SAL_CALL disposing();
......
...@@ -57,6 +57,7 @@ class DefaultGridDataModel : public ::cppu::WeakImplHelper2< XGridDataModel, XSe ...@@ -57,6 +57,7 @@ class DefaultGridDataModel : public ::cppu::WeakImplHelper2< XGridDataModel, XSe
{ {
public: public:
DefaultGridDataModel(); DefaultGridDataModel();
DefaultGridDataModel( DefaultGridDataModel const & i_copySource );
virtual ~DefaultGridDataModel(); virtual ~DefaultGridDataModel();
// XGridDataModel // XGridDataModel
...@@ -66,7 +67,7 @@ public: ...@@ -66,7 +67,7 @@ public:
virtual ::com::sun::star::uno::Sequence< ::rtl::OUString > SAL_CALL getRowHeaders() throw (::com::sun::star::uno::RuntimeException); virtual ::com::sun::star::uno::Sequence< ::rtl::OUString > SAL_CALL getRowHeaders() throw (::com::sun::star::uno::RuntimeException);
virtual void SAL_CALL setRowHeaders(const ::com::sun::star::uno::Sequence< ::rtl::OUString > & value) throw (::com::sun::star::uno::RuntimeException); virtual void SAL_CALL setRowHeaders(const ::com::sun::star::uno::Sequence< ::rtl::OUString > & value) throw (::com::sun::star::uno::RuntimeException);
virtual ::com::sun::star::uno::Sequence< ::com::sun::star::uno::Sequence< Any > > SAL_CALL getData() throw (::com::sun::star::uno::RuntimeException); virtual ::com::sun::star::uno::Sequence< ::com::sun::star::uno::Sequence< Any > > SAL_CALL getData() throw (::com::sun::star::uno::RuntimeException);
virtual void SAL_CALL addRow(const ::rtl::OUString & headername, const ::com::sun::star::uno::Sequence< Any > & data) throw (::com::sun::star::uno::RuntimeException); virtual void SAL_CALL addRow(const ::rtl::OUString & headername, const ::com::sun::star::uno::Sequence< Any > & m_aData) throw (::com::sun::star::uno::RuntimeException);
virtual void SAL_CALL removeRow(::sal_Int32 index) throw (::com::sun::star::uno::RuntimeException); virtual void SAL_CALL removeRow(::sal_Int32 index) throw (::com::sun::star::uno::RuntimeException);
virtual void SAL_CALL addGridDataListener( const Reference< XGridDataListener >& xListener ) throw (RuntimeException); virtual void SAL_CALL addGridDataListener( const Reference< XGridDataListener >& xListener ) throw (RuntimeException);
virtual void SAL_CALL removeGridDataListener( const Reference< XGridDataListener >& xListener ) throw (RuntimeException); virtual void SAL_CALL removeGridDataListener( const Reference< XGridDataListener >& xListener ) throw (RuntimeException);
...@@ -75,11 +76,15 @@ public: ...@@ -75,11 +76,15 @@ public:
virtual sal_Int32 SAL_CALL getRowHeaderWidth() throw (::com::sun::star::uno::RuntimeException); virtual sal_Int32 SAL_CALL getRowHeaderWidth() throw (::com::sun::star::uno::RuntimeException);
virtual void SAL_CALL updateCell( ::sal_Int32 row, ::sal_Int32 column, const ::com::sun::star::uno::Any& value ) throw (::com::sun::star::uno::RuntimeException); virtual void SAL_CALL updateCell( ::sal_Int32 row, ::sal_Int32 column, const ::com::sun::star::uno::Any& value ) throw (::com::sun::star::uno::RuntimeException);
virtual void SAL_CALL updateRow( ::sal_Int32 row, const ::com::sun::star::uno::Sequence< ::sal_Int32 >& columns, const ::com::sun::star::uno::Sequence< ::com::sun::star::uno::Any >& values ) throw (::com::sun::star::uno::RuntimeException); virtual void SAL_CALL updateRow( ::sal_Int32 row, const ::com::sun::star::uno::Sequence< ::sal_Int32 >& columns, const ::com::sun::star::uno::Sequence< ::com::sun::star::uno::Any >& values ) throw (::com::sun::star::uno::RuntimeException);
// XComponent // XComponent
virtual void SAL_CALL dispose( ) throw (RuntimeException); virtual void SAL_CALL dispose( ) throw (RuntimeException);
virtual void SAL_CALL addEventListener( const Reference< XEventListener >& xListener ) throw (RuntimeException); virtual void SAL_CALL addEventListener( const Reference< XEventListener >& xListener ) throw (RuntimeException);
virtual void SAL_CALL removeEventListener( const Reference< XEventListener >& aListener ) throw (RuntimeException); virtual void SAL_CALL removeEventListener( const Reference< XEventListener >& aListener ) throw (RuntimeException);
// XCloneable
virtual ::com::sun::star::uno::Reference< ::com::sun::star::util::XCloneable > SAL_CALL createClone( ) throw (::com::sun::star::uno::RuntimeException);
// XServiceInfo // XServiceInfo
virtual ::rtl::OUString SAL_CALL getImplementationName( ) throw (RuntimeException); virtual ::rtl::OUString SAL_CALL getImplementationName( ) throw (RuntimeException);
virtual ::sal_Bool SAL_CALL supportsService( const ::rtl::OUString& ServiceName ) throw (RuntimeException); virtual ::sal_Bool SAL_CALL supportsService( const ::rtl::OUString& ServiceName ) throw (RuntimeException);
...@@ -92,9 +97,9 @@ private: ...@@ -92,9 +97,9 @@ private:
void broadcast_add( sal_Int32 index, const ::rtl::OUString & headerName, const ::com::sun::star::uno::Sequence< Any > rowData ) throw (::com::sun::star::uno::RuntimeException); void broadcast_add( sal_Int32 index, const ::rtl::OUString & headerName, const ::com::sun::star::uno::Sequence< Any > rowData ) throw (::com::sun::star::uno::RuntimeException);
void broadcast_remove( sal_Int32 index, const ::rtl::OUString & headerName, const ::com::sun::star::uno::Sequence< Any > rowData ) throw (::com::sun::star::uno::RuntimeException); void broadcast_remove( sal_Int32 index, const ::rtl::OUString & headerName, const ::com::sun::star::uno::Sequence< Any > rowData ) throw (::com::sun::star::uno::RuntimeException);
sal_Int32 rowHeight; sal_Int32 m_nRowHeight;
std::vector< std::vector < Any > > data; std::vector< std::vector < Any > > m_aData;
std::vector< ::rtl::OUString > rowHeaders; std::vector< ::rtl::OUString > m_aRowHeaders;
sal_Int32 m_nRowHeaderWidth; sal_Int32 m_nRowHeaderWidth;
}; };
......
...@@ -46,11 +46,13 @@ namespace toolkit ...@@ -46,11 +46,13 @@ namespace toolkit
using namespace ::com::sun::star::awt; using namespace ::com::sun::star::awt;
using namespace ::com::sun::star::awt::grid; using namespace ::com::sun::star::awt::grid;
using namespace ::com::sun::star::lang; using namespace ::com::sun::star::lang;
using namespace ::com::sun::star::util;
using namespace ::com::sun::star::style; using namespace ::com::sun::star::style;
//================================================================================================================== //==================================================================================================================
//= DefaultGridColumnModel //= DefaultGridColumnModel
//================================================================================================================== //==================================================================================================================
//------------------------------------------------------------------------------------------------------------------
GridColumn::GridColumn() GridColumn::GridColumn()
:GridColumn_Base( m_aMutex ) :GridColumn_Base( m_aMutex )
,m_aIdentifier() ,m_aIdentifier()
...@@ -60,7 +62,21 @@ namespace toolkit ...@@ -60,7 +62,21 @@ namespace toolkit
,m_nMaxWidth(0) ,m_nMaxWidth(0)
,m_nMinWidth(0) ,m_nMinWidth(0)
,m_bResizeable(true) ,m_bResizeable(true)
,m_eHorizontalAlign(HorizontalAlignment(0)) ,m_eHorizontalAlign( HorizontalAlignment_LEFT )
{
}
//------------------------------------------------------------------------------------------------------------------
GridColumn::GridColumn( GridColumn const & i_copySource )
:GridColumn_Base( m_aMutex )
,m_aIdentifier( i_copySource.m_aIdentifier )
,m_nIndex( i_copySource.m_nIndex )
,m_nColumnWidth( i_copySource.m_nColumnWidth )
,m_nPreferredWidth( i_copySource.m_nPreferredWidth )
,m_nMaxWidth( i_copySource.m_nMaxWidth )
,m_nMinWidth( i_copySource.m_nMinWidth )
,m_bResizeable( i_copySource.m_bResizeable )
,m_eHorizontalAlign( i_copySource.m_eHorizontalAlign )
{ {
} }
...@@ -283,6 +299,12 @@ namespace toolkit ...@@ -283,6 +299,12 @@ namespace toolkit
const Sequence< ::rtl::OUString > aSeq( &aServiceName, 1 ); const Sequence< ::rtl::OUString > aSeq( &aServiceName, 1 );
return aSeq; return aSeq;
} }
//------------------------------------------------------------------------------------------------------------------
Reference< XCloneable > SAL_CALL GridColumn::createClone( ) throw (RuntimeException)
{
return new GridColumn( *this );
}
} }
::com::sun::star::uno::Reference< ::com::sun::star::uno::XInterface > SAL_CALL GridColumn_CreateInstance( const ::com::sun::star::uno::Reference< ::com::sun::star::lang::XMultiServiceFactory >& ) ::com::sun::star::uno::Reference< ::com::sun::star::uno::XInterface > SAL_CALL GridColumn_CreateInstance( const ::com::sun::star::uno::Reference< ::com::sun::star::lang::XMultiServiceFactory >& )
......
...@@ -51,6 +51,7 @@ class GridColumn :public ::cppu::BaseMutex ...@@ -51,6 +51,7 @@ class GridColumn :public ::cppu::BaseMutex
{ {
public: public:
GridColumn(); GridColumn();
GridColumn( GridColumn const & i_copySource );
virtual ~GridColumn(); virtual ~GridColumn();
// ::com::sun::star::awt::grid::XGridColumn // ::com::sun::star::awt::grid::XGridColumn
...@@ -78,6 +79,9 @@ public: ...@@ -78,6 +79,9 @@ public:
virtual void SAL_CALL addEventListener( const ::com::sun::star::uno::Reference< ::com::sun::star::lang::XEventListener >& xListener ) throw (::com::sun::star::uno::RuntimeException); virtual void SAL_CALL addEventListener( const ::com::sun::star::uno::Reference< ::com::sun::star::lang::XEventListener >& xListener ) throw (::com::sun::star::uno::RuntimeException);
virtual void SAL_CALL removeEventListener( const ::com::sun::star::uno::Reference< ::com::sun::star::lang::XEventListener >& aListener ) throw (::com::sun::star::uno::RuntimeException); virtual void SAL_CALL removeEventListener( const ::com::sun::star::uno::Reference< ::com::sun::star::lang::XEventListener >& aListener ) throw (::com::sun::star::uno::RuntimeException);
// XCloneable (base of XGridColumn)
virtual ::com::sun::star::uno::Reference< ::com::sun::star::util::XCloneable > SAL_CALL createClone( ) throw (::com::sun::star::uno::RuntimeException);
// XServiceInfo // XServiceInfo
virtual ::rtl::OUString SAL_CALL getImplementationName( ) throw (::com::sun::star::uno::RuntimeException); virtual ::rtl::OUString SAL_CALL getImplementationName( ) throw (::com::sun::star::uno::RuntimeException);
virtual ::sal_Bool SAL_CALL supportsService( const ::rtl::OUString& ServiceName ) throw (::com::sun::star::uno::RuntimeException); virtual ::sal_Bool SAL_CALL supportsService( const ::rtl::OUString& ServiceName ) throw (::com::sun::star::uno::RuntimeException);
......
...@@ -92,8 +92,38 @@ UnoGridModel::UnoGridModel( const ::com::sun::star::uno::Reference< ::com::sun:: ...@@ -92,8 +92,38 @@ UnoGridModel::UnoGridModel( const ::com::sun::star::uno::Reference< ::com::sun::
//---------------------------------------------------------------------------------------------------------------------- //----------------------------------------------------------------------------------------------------------------------
UnoGridModel::UnoGridModel( const UnoGridModel& rModel ) UnoGridModel::UnoGridModel( const UnoGridModel& rModel )
: UnoControlModel( rModel ) :UnoControlModel( rModel )
{ {
// clone the data model
const Reference< XFastPropertySet > xCloneSource( &const_cast< UnoGridModel& >( rModel ) );
bool success = false;
try
{
const Reference< XCloneable > xCloneable( xCloneSource->getFastPropertyValue( BASEPROPERTY_GRID_DATAMODEL ), UNO_QUERY_THROW );
setFastPropertyValue( BASEPROPERTY_GRID_DATAMODEL, makeAny( xCloneable->createClone() ) );
success = true;
}
catch( const Exception& )
{
DBG_UNHANDLED_EXCEPTION();
}
if ( !success )
setFastPropertyValue( BASEPROPERTY_GRID_DATAMODEL, makeAny( maContext.createComponent( "com.sun.star.awt.grid.DefaultGridDataModel" ) ) );
// clone the column model
success = false;
try
{
const Reference< XCloneable > xCloneable( xCloneSource->getFastPropertyValue( BASEPROPERTY_GRID_COLUMNMODEL ), UNO_QUERY_THROW );
setFastPropertyValue( BASEPROPERTY_GRID_COLUMNMODEL, makeAny( xCloneable->createClone() ) );
success = true;
}
catch( const Exception& )
{
DBG_UNHANDLED_EXCEPTION();
}
if ( !success )
setFastPropertyValue( BASEPROPERTY_GRID_COLUMNMODEL, makeAny( maContext.createComponent( "com.sun.star.awt.grid.DefaultGridColumnModel" ) ) );
} }
//---------------------------------------------------------------------------------------------------------------------- //----------------------------------------------------------------------------------------------------------------------
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment