2010-10-14 08:27:31 +02:00
|
|
|
/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
|
2009-08-26 13:11:27 +00:00
|
|
|
/*************************************************************************
|
|
|
|
*
|
|
|
|
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
|
|
|
*
|
2010-02-12 15:01:35 +01:00
|
|
|
* Copyright 2000, 2010 Oracle and/or its affiliates.
|
2009-08-26 13:11:27 +00:00
|
|
|
*
|
|
|
|
* OpenOffice.org - a multi-platform office productivity suite
|
|
|
|
*
|
|
|
|
* This file is part of OpenOffice.org.
|
|
|
|
*
|
|
|
|
* OpenOffice.org is free software: you can redistribute it and/or modify
|
|
|
|
* it under the terms of the GNU Lesser General Public License version 3
|
|
|
|
* only, as published by the Free Software Foundation.
|
|
|
|
*
|
|
|
|
* OpenOffice.org is distributed in the hope that it will be useful,
|
|
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
|
|
* GNU Lesser General Public License version 3 for more details
|
|
|
|
* (a copy is included in the LICENSE file that accompanied this code).
|
|
|
|
*
|
|
|
|
* You should have received a copy of the GNU Lesser General Public License
|
|
|
|
* version 3 along with OpenOffice.org. If not, see
|
|
|
|
* <http://www.openoffice.org/license.html>
|
|
|
|
* for a copy of the LGPLv3 License.
|
|
|
|
*
|
|
|
|
************************************************************************/
|
|
|
|
|
|
|
|
|
2010-12-07 13:50:47 +01:00
|
|
|
#include "gridcontrol.hxx"
|
|
|
|
#include "grideventforwarder.hxx"
|
2009-08-26 13:11:27 +00:00
|
|
|
|
|
|
|
#include <com/sun/star/lang/XMultiServiceFactory.hpp>
|
|
|
|
#include <com/sun/star/view/SelectionType.hpp>
|
|
|
|
#include <com/sun/star/awt/grid/XGridDataModel.hpp>
|
2011-01-10 15:47:51 +01:00
|
|
|
#include <com/sun/star/awt/grid/XMutableGridDataModel.hpp>
|
2011-01-18 11:49:20 +01:00
|
|
|
#include <com/sun/star/awt/grid/DefaultGridDataModel.hpp>
|
|
|
|
#include <com/sun/star/awt/grid/SortableGridDataModel.hpp>
|
2010-02-12 17:05:02 +01:00
|
|
|
#include <com/sun/star/awt/grid/XGridColumnModel.hpp>
|
2009-08-26 13:11:27 +00:00
|
|
|
#include <toolkit/helper/unopropertyarrayhelper.hxx>
|
|
|
|
#include <toolkit/helper/property.hxx>
|
|
|
|
#include <com/sun/star/awt/XVclWindowPeer.hpp>
|
|
|
|
#include <comphelper/processfactory.hxx>
|
2010-12-07 13:50:47 +01:00
|
|
|
#include <tools/diagnose_ex.h>
|
2011-01-04 10:26:14 +01:00
|
|
|
#include <tools/color.hxx>
|
2009-08-26 13:11:27 +00:00
|
|
|
|
|
|
|
using ::rtl::OUString;
|
|
|
|
using namespace ::com::sun::star;
|
|
|
|
using namespace ::com::sun::star::uno;
|
2010-12-07 13:50:47 +01:00
|
|
|
using namespace ::com::sun::star::awt;
|
2009-08-26 13:11:27 +00:00
|
|
|
using namespace ::com::sun::star::awt::grid;
|
|
|
|
using namespace ::com::sun::star::lang;
|
|
|
|
using namespace ::com::sun::star::beans;
|
|
|
|
using namespace ::com::sun::star::container;
|
|
|
|
using namespace ::com::sun::star::view;
|
|
|
|
|
|
|
|
namespace toolkit
|
|
|
|
{
|
2011-01-18 11:49:20 +01:00
|
|
|
//======================================================================================================================
|
|
|
|
//= UnoGridModel
|
|
|
|
//======================================================================================================================
|
|
|
|
namespace
|
|
|
|
{
|
|
|
|
Reference< XGridDataModel > lcl_getDefaultDataModel_throw( ::comphelper::ComponentContext const & i_context )
|
|
|
|
{
|
|
|
|
Reference< XMutableGridDataModel > const xDelegatorModel( DefaultGridDataModel::create( i_context.getUNOContext() ), UNO_QUERY_THROW );
|
|
|
|
Reference< XGridDataModel > const xDataModel( SortableGridDataModel::create( i_context.getUNOContext(), xDelegatorModel ), UNO_QUERY_THROW );
|
|
|
|
return xDataModel;
|
|
|
|
}
|
|
|
|
|
|
|
|
Reference< XGridColumnModel > lcl_getDefaultColumnModel_throw( ::comphelper::ComponentContext const & i_context )
|
|
|
|
{
|
|
|
|
Reference< XGridColumnModel > const xColumnModel( i_context.createComponent( "com.sun.star.awt.grid.DefaultGridColumnModel" ), UNO_QUERY_THROW );
|
|
|
|
return xColumnModel;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2010-12-07 13:50:47 +01:00
|
|
|
//----------------------------------------------------------------------------------------------------------------------
|
2010-12-06 14:14:11 +01:00
|
|
|
UnoGridModel::UnoGridModel( const ::com::sun::star::uno::Reference< ::com::sun::star::lang::XMultiServiceFactory >& i_factory )
|
|
|
|
:UnoControlModel( i_factory )
|
2009-08-26 13:11:27 +00:00
|
|
|
{
|
|
|
|
ImplRegisterProperty( BASEPROPERTY_BACKGROUNDCOLOR );
|
|
|
|
ImplRegisterProperty( BASEPROPERTY_BORDER );
|
|
|
|
ImplRegisterProperty( BASEPROPERTY_BORDERCOLOR );
|
|
|
|
ImplRegisterProperty( BASEPROPERTY_DEFAULTCONTROL );
|
|
|
|
ImplRegisterProperty( BASEPROPERTY_ENABLED );
|
|
|
|
ImplRegisterProperty( BASEPROPERTY_FILLCOLOR );
|
|
|
|
ImplRegisterProperty( BASEPROPERTY_HELPTEXT );
|
|
|
|
ImplRegisterProperty( BASEPROPERTY_HELPURL );
|
|
|
|
ImplRegisterProperty( BASEPROPERTY_PRINTABLE );
|
|
|
|
ImplRegisterProperty( BASEPROPERTY_SIZEABLE ); // resizeable
|
|
|
|
ImplRegisterProperty( BASEPROPERTY_HSCROLL );
|
|
|
|
ImplRegisterProperty( BASEPROPERTY_VSCROLL );
|
2010-02-12 17:05:02 +01:00
|
|
|
ImplRegisterProperty( BASEPROPERTY_TABSTOP );
|
2009-08-26 13:11:27 +00:00
|
|
|
ImplRegisterProperty( BASEPROPERTY_GRID_SHOWROWHEADER );
|
2011-01-07 10:31:19 +01:00
|
|
|
ImplRegisterProperty( BASEPROPERTY_ROW_HEADER_WIDTH );
|
2009-08-26 13:11:27 +00:00
|
|
|
ImplRegisterProperty( BASEPROPERTY_GRID_SHOWCOLUMNHEADER );
|
2011-01-07 10:31:19 +01:00
|
|
|
ImplRegisterProperty( BASEPROPERTY_COLUMN_HEADER_HEIGHT );
|
2011-01-07 10:51:57 +01:00
|
|
|
ImplRegisterProperty( BASEPROPERTY_ROW_HEIGHT );
|
2011-01-18 11:49:20 +01:00
|
|
|
ImplRegisterProperty( BASEPROPERTY_GRID_DATAMODEL, makeAny( lcl_getDefaultDataModel_throw( maContext ) ) );
|
|
|
|
ImplRegisterProperty( BASEPROPERTY_GRID_COLUMNMODEL, makeAny( lcl_getDefaultColumnModel_throw( maContext ) ) );
|
2009-08-26 13:11:27 +00:00
|
|
|
ImplRegisterProperty( BASEPROPERTY_GRID_SELECTIONMODE );
|
2010-02-12 17:05:02 +01:00
|
|
|
ImplRegisterProperty( BASEPROPERTY_FONTRELIEF );
|
|
|
|
ImplRegisterProperty( BASEPROPERTY_FONTEMPHASISMARK );
|
|
|
|
ImplRegisterProperty( BASEPROPERTY_FONTDESCRIPTOR );
|
|
|
|
ImplRegisterProperty( BASEPROPERTY_TEXTCOLOR );
|
2011-01-12 12:34:24 +01:00
|
|
|
ImplRegisterProperty( BASEPROPERTY_TEXTLINECOLOR );
|
|
|
|
ImplRegisterProperty( BASEPROPERTY_USE_GRID_LINES );
|
2010-02-12 17:05:02 +01:00
|
|
|
ImplRegisterProperty( BASEPROPERTY_GRID_LINE_COLOR );
|
2011-01-12 12:34:24 +01:00
|
|
|
ImplRegisterProperty( BASEPROPERTY_GRID_HEADER_BACKGROUND );
|
|
|
|
ImplRegisterProperty( BASEPROPERTY_GRID_HEADER_TEXT_COLOR );
|
|
|
|
ImplRegisterProperty( BASEPROPERTY_GRID_ROW_BACKGROUND_COLORS );
|
|
|
|
ImplRegisterProperty( BASEPROPERTY_VERTICALALIGN );
|
2009-08-26 13:11:27 +00:00
|
|
|
}
|
|
|
|
|
2010-12-07 13:50:47 +01:00
|
|
|
//----------------------------------------------------------------------------------------------------------------------
|
2009-08-26 13:11:27 +00:00
|
|
|
UnoGridModel::UnoGridModel( const UnoGridModel& rModel )
|
2011-01-03 23:14:55 +01:00
|
|
|
:UnoControlModel( rModel )
|
2009-08-26 13:11:27 +00:00
|
|
|
{
|
2011-01-26 14:39:03 +01:00
|
|
|
osl_incrementInterlockedCount( &m_refCount );
|
2011-01-03 23:14:55 +01:00
|
|
|
{
|
2011-01-26 14:39:03 +01:00
|
|
|
Reference< XGridDataModel > xDataModel;
|
|
|
|
// clone the data model
|
|
|
|
const Reference< XFastPropertySet > xCloneSource( &const_cast< UnoGridModel& >( rModel ) );
|
|
|
|
try
|
|
|
|
{
|
|
|
|
const Reference< XCloneable > xCloneable( xCloneSource->getFastPropertyValue( BASEPROPERTY_GRID_DATAMODEL ), UNO_QUERY_THROW );
|
|
|
|
xDataModel.set( xCloneable->createClone(), UNO_QUERY_THROW );
|
|
|
|
}
|
|
|
|
catch( const Exception& )
|
|
|
|
{
|
|
|
|
DBG_UNHANDLED_EXCEPTION();
|
|
|
|
}
|
|
|
|
if ( !xDataModel.is() )
|
|
|
|
xDataModel = lcl_getDefaultDataModel_throw( maContext );
|
|
|
|
UnoControlModel::setFastPropertyValue_NoBroadcast( BASEPROPERTY_GRID_DATAMODEL, makeAny( xDataModel ) );
|
|
|
|
// do *not* use setFastPropertyValue here: The UnoControlModel ctor did a simple copy of all property values,
|
|
|
|
// so before this call here, we share our data model with the own of the clone source. setFastPropertyValue,
|
|
|
|
// then, disposes the old data model - which means the data model which in fact belongs to the clone source.
|
|
|
|
// so, call the UnoControlModel's impl-method for setting the value.
|
2011-01-03 23:14:55 +01:00
|
|
|
|
2011-01-26 14:39:03 +01:00
|
|
|
// clone the column model
|
|
|
|
Reference< XGridColumnModel > xColumnModel;
|
|
|
|
try
|
|
|
|
{
|
|
|
|
const Reference< XCloneable > xCloneable( xCloneSource->getFastPropertyValue( BASEPROPERTY_GRID_COLUMNMODEL ), UNO_QUERY_THROW );
|
|
|
|
xColumnModel.set( xCloneable->createClone(), UNO_QUERY_THROW );
|
|
|
|
}
|
|
|
|
catch( const Exception& )
|
|
|
|
{
|
|
|
|
DBG_UNHANDLED_EXCEPTION();
|
|
|
|
}
|
|
|
|
if ( !xColumnModel.is() )
|
|
|
|
xColumnModel = lcl_getDefaultColumnModel_throw( maContext );
|
|
|
|
UnoControlModel::setFastPropertyValue_NoBroadcast( BASEPROPERTY_GRID_COLUMNMODEL, makeAny( xColumnModel ) );
|
|
|
|
// same comment as above: do not use our own setPropertyValue here.
|
2011-01-03 23:14:55 +01:00
|
|
|
}
|
2011-01-26 14:39:03 +01:00
|
|
|
osl_decrementInterlockedCount( &m_refCount );
|
2009-08-26 13:11:27 +00:00
|
|
|
}
|
|
|
|
|
2010-12-07 13:50:47 +01:00
|
|
|
//----------------------------------------------------------------------------------------------------------------------
|
2009-08-26 13:11:27 +00:00
|
|
|
UnoControlModel* UnoGridModel::Clone() const
|
|
|
|
{
|
|
|
|
return new UnoGridModel( *this );
|
|
|
|
}
|
|
|
|
|
2010-12-23 16:10:02 +01:00
|
|
|
//----------------------------------------------------------------------------------------------------------------------
|
|
|
|
namespace
|
|
|
|
{
|
|
|
|
void lcl_dispose_nothrow( const Any& i_component )
|
|
|
|
{
|
|
|
|
try
|
|
|
|
{
|
|
|
|
const Reference< XComponent > xComponent( i_component, UNO_QUERY_THROW );
|
|
|
|
xComponent->dispose();
|
|
|
|
}
|
|
|
|
catch( const Exception& )
|
|
|
|
{
|
|
|
|
DBG_UNHANDLED_EXCEPTION();
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
//----------------------------------------------------------------------------------------------------------------------
|
|
|
|
void SAL_CALL UnoGridModel::dispose( ) throw(RuntimeException)
|
|
|
|
{
|
|
|
|
lcl_dispose_nothrow( getFastPropertyValue( BASEPROPERTY_GRID_COLUMNMODEL ) );
|
|
|
|
lcl_dispose_nothrow( getFastPropertyValue( BASEPROPERTY_GRID_DATAMODEL ) );
|
|
|
|
|
|
|
|
UnoControlModel::dispose();
|
|
|
|
}
|
|
|
|
|
|
|
|
//----------------------------------------------------------------------------------------------------------------------
|
|
|
|
void SAL_CALL UnoGridModel::setFastPropertyValue_NoBroadcast( sal_Int32 nHandle, const Any& rValue ) throw (Exception)
|
|
|
|
{
|
|
|
|
Any aOldSubModel;
|
|
|
|
if ( ( nHandle == BASEPROPERTY_GRID_COLUMNMODEL ) || ( nHandle == BASEPROPERTY_GRID_DATAMODEL ) )
|
|
|
|
{
|
|
|
|
aOldSubModel = getFastPropertyValue( nHandle );
|
|
|
|
if ( aOldSubModel == rValue )
|
|
|
|
{
|
|
|
|
OSL_ENSURE( false, "UnoGridModel::setFastPropertyValue_NoBroadcast: setting the same value, again!" );
|
|
|
|
// shouldn't this have been caught by convertFastPropertyValue?
|
|
|
|
aOldSubModel.clear();
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
UnoControlModel::setFastPropertyValue_NoBroadcast( nHandle, rValue );
|
|
|
|
|
|
|
|
if ( aOldSubModel.hasValue() )
|
|
|
|
lcl_dispose_nothrow( aOldSubModel );
|
|
|
|
}
|
|
|
|
|
2010-12-07 13:50:47 +01:00
|
|
|
//----------------------------------------------------------------------------------------------------------------------
|
2009-08-26 13:11:27 +00:00
|
|
|
OUString UnoGridModel::getServiceName() throw(RuntimeException)
|
|
|
|
{
|
|
|
|
return OUString::createFromAscii( szServiceName_GridControlModel );
|
|
|
|
}
|
|
|
|
|
2010-12-07 13:50:47 +01:00
|
|
|
//----------------------------------------------------------------------------------------------------------------------
|
2009-08-26 13:11:27 +00:00
|
|
|
Any UnoGridModel::ImplGetDefaultValue( sal_uInt16 nPropId ) const
|
|
|
|
{
|
|
|
|
switch( nPropId )
|
|
|
|
{
|
|
|
|
case BASEPROPERTY_DEFAULTCONTROL:
|
|
|
|
return uno::makeAny( ::rtl::OUString::createFromAscii( szServiceName_GridControl ) );
|
|
|
|
case BASEPROPERTY_GRID_SELECTIONMODE:
|
|
|
|
return uno::makeAny( SelectionType(1) );
|
2010-03-22 11:17:10 +01:00
|
|
|
case BASEPROPERTY_GRID_SHOWROWHEADER:
|
2011-01-12 12:34:24 +01:00
|
|
|
case BASEPROPERTY_USE_GRID_LINES:
|
2010-03-22 11:17:10 +01:00
|
|
|
return uno::makeAny( (sal_Bool)sal_False );
|
2011-01-07 10:31:19 +01:00
|
|
|
case BASEPROPERTY_ROW_HEADER_WIDTH:
|
|
|
|
return uno::makeAny( sal_Int32( 10 ) );
|
2010-03-22 11:17:10 +01:00
|
|
|
case BASEPROPERTY_GRID_SHOWCOLUMNHEADER:
|
2010-12-17 13:38:24 +01:00
|
|
|
return uno::makeAny( (sal_Bool)sal_True );
|
2011-01-07 10:31:19 +01:00
|
|
|
case BASEPROPERTY_COLUMN_HEADER_HEIGHT:
|
2011-01-07 10:51:57 +01:00
|
|
|
case BASEPROPERTY_ROW_HEIGHT:
|
2010-03-22 11:17:10 +01:00
|
|
|
case BASEPROPERTY_GRID_HEADER_BACKGROUND:
|
2011-01-12 12:34:24 +01:00
|
|
|
case BASEPROPERTY_GRID_HEADER_TEXT_COLOR:
|
2010-03-22 11:17:10 +01:00
|
|
|
case BASEPROPERTY_GRID_LINE_COLOR:
|
2011-01-12 12:34:24 +01:00
|
|
|
case BASEPROPERTY_GRID_ROW_BACKGROUND_COLORS:
|
|
|
|
return Any();
|
2009-08-26 13:11:27 +00:00
|
|
|
default:
|
|
|
|
return UnoControlModel::ImplGetDefaultValue( nPropId );
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
2010-12-07 13:50:47 +01:00
|
|
|
//----------------------------------------------------------------------------------------------------------------------
|
2009-08-26 13:11:27 +00:00
|
|
|
::cppu::IPropertyArrayHelper& UnoGridModel::getInfoHelper()
|
|
|
|
{
|
|
|
|
static UnoPropertyArrayHelper* pHelper = NULL;
|
|
|
|
if ( !pHelper )
|
|
|
|
{
|
|
|
|
Sequence<sal_Int32> aIDs = ImplGetPropertyIds();
|
|
|
|
pHelper = new UnoPropertyArrayHelper( aIDs );
|
|
|
|
}
|
|
|
|
return *pHelper;
|
|
|
|
}
|
|
|
|
|
2010-12-07 13:50:47 +01:00
|
|
|
//----------------------------------------------------------------------------------------------------------------------
|
2009-08-26 13:11:27 +00:00
|
|
|
// XMultiPropertySet
|
|
|
|
Reference< XPropertySetInfo > UnoGridModel::getPropertySetInfo( ) throw(RuntimeException)
|
|
|
|
{
|
|
|
|
static Reference< XPropertySetInfo > xInfo( createPropertySetInfo( getInfoHelper() ) );
|
|
|
|
return xInfo;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
2010-12-07 13:50:47 +01:00
|
|
|
//======================================================================================================================
|
|
|
|
//= UnoGridControl
|
|
|
|
//======================================================================================================================
|
2010-12-07 09:51:12 +01:00
|
|
|
UnoGridControl::UnoGridControl( const Reference< XMultiServiceFactory >& i_factory )
|
|
|
|
:UnoGridControl_Base( i_factory )
|
|
|
|
,mSelectionMode(SelectionType(1))
|
|
|
|
,m_aSelectionListeners( *this )
|
2010-12-07 13:50:47 +01:00
|
|
|
,m_pEventForwarder( new GridEventForwarder( *this ) )
|
|
|
|
{
|
|
|
|
}
|
|
|
|
|
|
|
|
//----------------------------------------------------------------------------------------------------------------------
|
|
|
|
UnoGridControl::~UnoGridControl()
|
2009-08-26 13:11:27 +00:00
|
|
|
{
|
|
|
|
}
|
|
|
|
|
2010-12-07 13:50:47 +01:00
|
|
|
//----------------------------------------------------------------------------------------------------------------------
|
2009-08-26 13:11:27 +00:00
|
|
|
OUString UnoGridControl::GetComponentServiceName()
|
|
|
|
{
|
2010-11-22 22:47:26 +01:00
|
|
|
return OUString(RTL_CONSTASCII_USTRINGPARAM("Grid"));
|
2009-08-26 13:11:27 +00:00
|
|
|
}
|
|
|
|
|
2010-12-07 13:50:47 +01:00
|
|
|
//----------------------------------------------------------------------------------------------------------------------
|
2009-08-26 13:11:27 +00:00
|
|
|
void SAL_CALL UnoGridControl::dispose( ) throw(RuntimeException)
|
|
|
|
{
|
2010-03-22 11:17:10 +01:00
|
|
|
lang::EventObject aEvt;
|
|
|
|
aEvt.Source = (::cppu::OWeakObject*)this;
|
|
|
|
m_aSelectionListeners.disposeAndClear( aEvt );
|
2009-08-26 13:11:27 +00:00
|
|
|
UnoControl::dispose();
|
|
|
|
}
|
|
|
|
|
2010-12-07 13:50:47 +01:00
|
|
|
//----------------------------------------------------------------------------------------------------------------------
|
|
|
|
void SAL_CALL UnoGridControl::createPeer( const uno::Reference< awt::XToolkit > & rxToolkit, const uno::Reference< awt::XWindowPeer > & rParentPeer ) throw(uno::RuntimeException)
|
2009-08-26 13:11:27 +00:00
|
|
|
{
|
|
|
|
UnoControlBase::createPeer( rxToolkit, rParentPeer );
|
|
|
|
|
2010-12-07 13:50:47 +01:00
|
|
|
const Reference< XGridControl > xGrid( getPeer(), UNO_QUERY_THROW );
|
2010-03-22 11:17:10 +01:00
|
|
|
xGrid->addSelectionListener(&m_aSelectionListeners);
|
2010-12-07 13:50:47 +01:00
|
|
|
}
|
2009-08-26 13:11:27 +00:00
|
|
|
|
2010-12-07 13:50:47 +01:00
|
|
|
//----------------------------------------------------------------------------------------------------------------------
|
|
|
|
namespace
|
|
|
|
{
|
|
|
|
void lcl_setEventForwarding( const Reference< XControlModel >& i_gridControlModel, const ::boost::scoped_ptr< GridEventForwarder >& i_listener,
|
|
|
|
bool const i_add )
|
2010-03-22 11:17:10 +01:00
|
|
|
{
|
2010-12-07 13:50:47 +01:00
|
|
|
const Reference< XPropertySet > xModelProps( i_gridControlModel, UNO_QUERY );
|
|
|
|
if ( !xModelProps.is() )
|
|
|
|
return;
|
|
|
|
|
|
|
|
try
|
2010-03-22 11:17:10 +01:00
|
|
|
{
|
2011-01-10 15:47:51 +01:00
|
|
|
Reference< XContainer > const xColModel(
|
2010-12-07 13:50:47 +01:00
|
|
|
xModelProps->getPropertyValue( ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "ColumnModel" ) ) ),
|
|
|
|
UNO_QUERY_THROW );
|
|
|
|
if ( i_add )
|
|
|
|
xColModel->addContainerListener( i_listener.get() );
|
|
|
|
else
|
|
|
|
xColModel->removeContainerListener( i_listener.get() );
|
|
|
|
|
2011-01-10 15:47:51 +01:00
|
|
|
Reference< XGridDataModel > const xDataModel(
|
2010-12-07 13:50:47 +01:00
|
|
|
xModelProps->getPropertyValue( ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "GridDataModel" ) ) ),
|
|
|
|
UNO_QUERY_THROW
|
|
|
|
);
|
2011-01-10 15:47:51 +01:00
|
|
|
Reference< XMutableGridDataModel > const xMutableDataModel( xDataModel, UNO_QUERY );
|
|
|
|
if ( xMutableDataModel.is() )
|
|
|
|
{
|
|
|
|
if ( i_add )
|
|
|
|
xMutableDataModel->addGridDataListener( i_listener.get() );
|
|
|
|
else
|
|
|
|
xMutableDataModel->removeGridDataListener( i_listener.get() );
|
|
|
|
}
|
2010-12-07 13:50:47 +01:00
|
|
|
}
|
|
|
|
catch( const Exception& )
|
|
|
|
{
|
|
|
|
DBG_UNHANDLED_EXCEPTION();
|
2010-03-22 11:17:10 +01:00
|
|
|
}
|
|
|
|
}
|
2009-08-26 13:11:27 +00:00
|
|
|
}
|
|
|
|
|
2010-12-07 13:50:47 +01:00
|
|
|
//----------------------------------------------------------------------------------------------------------------------
|
|
|
|
sal_Bool SAL_CALL UnoGridControl::setModel( const Reference< XControlModel >& i_model ) throw(RuntimeException)
|
|
|
|
{
|
|
|
|
lcl_setEventForwarding( getModel(), m_pEventForwarder, false );
|
|
|
|
if ( !UnoGridControl_Base::setModel( i_model ) )
|
|
|
|
return sal_False;
|
|
|
|
lcl_setEventForwarding( getModel(), m_pEventForwarder, true );
|
|
|
|
return sal_True;
|
|
|
|
}
|
2009-08-26 13:11:27 +00:00
|
|
|
|
2010-12-07 13:50:47 +01:00
|
|
|
//----------------------------------------------------------------------------------------------------------------------
|
2011-01-11 12:36:41 +01:00
|
|
|
::sal_Int32 UnoGridControl::getRowAtPoint(::sal_Int32 x, ::sal_Int32 y) throw (::com::sun::star::uno::RuntimeException)
|
2009-08-26 13:11:27 +00:00
|
|
|
{
|
2011-01-11 12:36:41 +01:00
|
|
|
Reference< XGridControl > const xGrid ( getPeer(), UNO_QUERY_THROW );
|
|
|
|
return xGrid->getRowAtPoint( x, y );
|
2009-08-26 13:11:27 +00:00
|
|
|
}
|
|
|
|
|
2011-01-11 12:36:41 +01:00
|
|
|
//----------------------------------------------------------------------------------------------------------------------
|
|
|
|
::sal_Int32 UnoGridControl::getColumnAtPoint(::sal_Int32 x, ::sal_Int32 y) throw (::com::sun::star::uno::RuntimeException)
|
2009-08-26 13:11:27 +00:00
|
|
|
{
|
2011-01-11 12:36:41 +01:00
|
|
|
Reference< XGridControl > const xGrid ( getPeer(), UNO_QUERY_THROW );
|
|
|
|
return xGrid->getColumnAtPoint( x, y );
|
2009-08-26 13:11:27 +00:00
|
|
|
}
|
|
|
|
|
2011-01-11 14:00:09 +01:00
|
|
|
//----------------------------------------------------------------------------------------------------------------------
|
|
|
|
::sal_Int32 SAL_CALL UnoGridControl::getCurrentColumn( ) throw (RuntimeException)
|
2009-08-26 13:11:27 +00:00
|
|
|
{
|
2011-01-11 14:00:09 +01:00
|
|
|
Reference< XGridControl > const xGrid ( getPeer(), UNO_QUERY_THROW );
|
|
|
|
return xGrid->getCurrentColumn();
|
2009-08-26 13:11:27 +00:00
|
|
|
}
|
|
|
|
|
2011-01-11 14:00:09 +01:00
|
|
|
//----------------------------------------------------------------------------------------------------------------------
|
|
|
|
::sal_Int32 SAL_CALL UnoGridControl::getCurrentRow( ) throw (RuntimeException)
|
2009-08-26 13:11:27 +00:00
|
|
|
{
|
2011-01-11 14:00:09 +01:00
|
|
|
Reference< XGridControl > const xGrid ( getPeer(), UNO_QUERY_THROW );
|
|
|
|
return xGrid->getCurrentRow();
|
2009-08-26 13:11:27 +00:00
|
|
|
}
|
|
|
|
|
2010-12-07 13:50:47 +01:00
|
|
|
//----------------------------------------------------------------------------------------------------------------------
|
gridsort: reworked the notification system for inserted/removed rows
In this course, more code which was in SVTXGridControl was moved to the places it belongs to, effectively
meaning that the TableControl has better chances than before to be used outside an SVTXGridControl (though
we're not there, yet).
Also, the selection-related methods in TableControl/_Impl got some refactoring love, so the implementation
details are hidden in the Impl class now, instead of being exposed to an exploited by the TableControl.
And while we were there ... The XGridSelection does not provide a |selectColumn| anymore (there was no
preparation whatsoever for column selection, anywhere, thus it was a complete dummy.)
Also, its de/selectRows methods have been removed: They have questionable use, and make implementation
rather difficult, compared with multiple calls to de/selectRow.
2011-01-13 14:08:36 +01:00
|
|
|
void SAL_CALL UnoGridControl::selectRow( ::sal_Int32 i_rowIndex ) throw (::com::sun::star::uno::RuntimeException)
|
2009-08-26 13:11:27 +00:00
|
|
|
{
|
gridsort: reworked the notification system for inserted/removed rows
In this course, more code which was in SVTXGridControl was moved to the places it belongs to, effectively
meaning that the TableControl has better chances than before to be used outside an SVTXGridControl (though
we're not there, yet).
Also, the selection-related methods in TableControl/_Impl got some refactoring love, so the implementation
details are hidden in the Impl class now, instead of being exposed to an exploited by the TableControl.
And while we were there ... The XGridSelection does not provide a |selectColumn| anymore (there was no
preparation whatsoever for column selection, anywhere, thus it was a complete dummy.)
Also, its de/selectRows methods have been removed: They have questionable use, and make implementation
rather difficult, compared with multiple calls to de/selectRow.
2011-01-13 14:08:36 +01:00
|
|
|
Reference< XGridControl >( getPeer(), UNO_QUERY_THROW )->selectRow( i_rowIndex );
|
2009-08-26 13:11:27 +00:00
|
|
|
}
|
|
|
|
|
2010-12-07 13:50:47 +01:00
|
|
|
//----------------------------------------------------------------------------------------------------------------------
|
2010-03-22 11:17:10 +01:00
|
|
|
void SAL_CALL UnoGridControl::selectAllRows() throw (::com::sun::star::uno::RuntimeException)
|
2009-08-26 13:11:27 +00:00
|
|
|
{
|
2010-03-22 11:17:10 +01:00
|
|
|
Reference< XGridControl >( getPeer(), UNO_QUERY_THROW )->selectAllRows();
|
|
|
|
}
|
2010-12-07 13:50:47 +01:00
|
|
|
|
|
|
|
//----------------------------------------------------------------------------------------------------------------------
|
gridsort: reworked the notification system for inserted/removed rows
In this course, more code which was in SVTXGridControl was moved to the places it belongs to, effectively
meaning that the TableControl has better chances than before to be used outside an SVTXGridControl (though
we're not there, yet).
Also, the selection-related methods in TableControl/_Impl got some refactoring love, so the implementation
details are hidden in the Impl class now, instead of being exposed to an exploited by the TableControl.
And while we were there ... The XGridSelection does not provide a |selectColumn| anymore (there was no
preparation whatsoever for column selection, anywhere, thus it was a complete dummy.)
Also, its de/selectRows methods have been removed: They have questionable use, and make implementation
rather difficult, compared with multiple calls to de/selectRow.
2011-01-13 14:08:36 +01:00
|
|
|
void SAL_CALL UnoGridControl::deselectRow( ::sal_Int32 i_rowIndex ) throw (::com::sun::star::uno::RuntimeException)
|
2010-03-22 11:17:10 +01:00
|
|
|
{
|
gridsort: reworked the notification system for inserted/removed rows
In this course, more code which was in SVTXGridControl was moved to the places it belongs to, effectively
meaning that the TableControl has better chances than before to be used outside an SVTXGridControl (though
we're not there, yet).
Also, the selection-related methods in TableControl/_Impl got some refactoring love, so the implementation
details are hidden in the Impl class now, instead of being exposed to an exploited by the TableControl.
And while we were there ... The XGridSelection does not provide a |selectColumn| anymore (there was no
preparation whatsoever for column selection, anywhere, thus it was a complete dummy.)
Also, its de/selectRows methods have been removed: They have questionable use, and make implementation
rather difficult, compared with multiple calls to de/selectRow.
2011-01-13 14:08:36 +01:00
|
|
|
Reference< XGridControl >( getPeer(), UNO_QUERY_THROW )->deselectRow( i_rowIndex );
|
2009-08-26 13:11:27 +00:00
|
|
|
}
|
|
|
|
|
2010-12-07 13:50:47 +01:00
|
|
|
//----------------------------------------------------------------------------------------------------------------------
|
2010-03-22 11:17:10 +01:00
|
|
|
void SAL_CALL UnoGridControl::deselectAllRows() throw (::com::sun::star::uno::RuntimeException)
|
|
|
|
{
|
|
|
|
Reference< XGridControl >( getPeer(), UNO_QUERY_THROW )->deselectAllRows();
|
|
|
|
}
|
2010-12-07 13:50:47 +01:00
|
|
|
|
|
|
|
//----------------------------------------------------------------------------------------------------------------------
|
2009-08-26 13:11:27 +00:00
|
|
|
::com::sun::star::uno::Sequence< ::sal_Int32 > SAL_CALL UnoGridControl::getSelection() throw (::com::sun::star::uno::RuntimeException)
|
|
|
|
{
|
|
|
|
return Reference< XGridControl >( getPeer(), UNO_QUERY_THROW )->getSelection();
|
|
|
|
}
|
|
|
|
|
2010-12-07 13:50:47 +01:00
|
|
|
//----------------------------------------------------------------------------------------------------------------------
|
2009-08-26 13:11:27 +00:00
|
|
|
::sal_Bool SAL_CALL UnoGridControl::isSelectionEmpty() throw (::com::sun::star::uno::RuntimeException)
|
|
|
|
{
|
|
|
|
return Reference< XGridControl >( getPeer(), UNO_QUERY_THROW )->isSelectionEmpty();
|
|
|
|
}
|
|
|
|
|
2010-12-07 13:50:47 +01:00
|
|
|
//----------------------------------------------------------------------------------------------------------------------
|
2009-08-26 13:11:27 +00:00
|
|
|
::sal_Bool SAL_CALL UnoGridControl::isSelectedIndex(::sal_Int32 index) throw (::com::sun::star::uno::RuntimeException)
|
|
|
|
{
|
|
|
|
return Reference< XGridControl >( getPeer(), UNO_QUERY_THROW )->isSelectedIndex( index );
|
|
|
|
}
|
|
|
|
|
2010-12-07 13:50:47 +01:00
|
|
|
//----------------------------------------------------------------------------------------------------------------------
|
2009-08-26 13:11:27 +00:00
|
|
|
void SAL_CALL UnoGridControl::addSelectionListener(const ::com::sun::star::uno::Reference< ::com::sun::star::awt::grid::XGridSelectionListener > & listener) throw (::com::sun::star::uno::RuntimeException)
|
|
|
|
{
|
2010-03-22 11:17:10 +01:00
|
|
|
m_aSelectionListeners.addInterface( listener );
|
2009-08-26 13:11:27 +00:00
|
|
|
}
|
|
|
|
|
2010-12-07 13:50:47 +01:00
|
|
|
//----------------------------------------------------------------------------------------------------------------------
|
2009-08-26 13:11:27 +00:00
|
|
|
void SAL_CALL UnoGridControl::removeSelectionListener(const ::com::sun::star::uno::Reference< ::com::sun::star::awt::grid::XGridSelectionListener > & listener) throw (::com::sun::star::uno::RuntimeException)
|
|
|
|
{
|
2010-03-22 11:17:10 +01:00
|
|
|
m_aSelectionListeners.removeInterface( listener );
|
2009-08-26 13:11:27 +00:00
|
|
|
}
|
2010-12-07 13:50:47 +01:00
|
|
|
|
2010-02-12 17:05:02 +01:00
|
|
|
}//namespace toolkit
|
2009-08-26 13:11:27 +00:00
|
|
|
|
2010-12-07 09:51:12 +01:00
|
|
|
Reference< XInterface > SAL_CALL GridControl_CreateInstance( const Reference< XMultiServiceFactory >& i_factory )
|
2009-08-26 13:11:27 +00:00
|
|
|
{
|
2010-12-07 09:51:12 +01:00
|
|
|
return Reference < XInterface >( ( ::cppu::OWeakObject* ) new ::toolkit::UnoGridControl( i_factory ) );
|
2009-08-26 13:11:27 +00:00
|
|
|
}
|
|
|
|
|
2010-12-06 14:14:11 +01:00
|
|
|
Reference< XInterface > SAL_CALL GridControlModel_CreateInstance( const Reference< XMultiServiceFactory >& i_factory )
|
2009-08-26 13:11:27 +00:00
|
|
|
{
|
2010-12-06 14:14:11 +01:00
|
|
|
return Reference < XInterface >( ( ::cppu::OWeakObject* ) new ::toolkit::UnoGridModel( i_factory ) );
|
2009-08-26 13:11:27 +00:00
|
|
|
}
|
2010-10-14 08:27:31 +02:00
|
|
|
|
|
|
|
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
|