2010-10-14 08:27:31 +02:00
|
|
|
/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
|
2012-10-02 14:13:40 +01:00
|
|
|
/*
|
|
|
|
* This file is part of the LibreOffice project.
|
|
|
|
*
|
|
|
|
* This Source Code Form is subject to the terms of the Mozilla Public
|
|
|
|
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
|
|
* file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
|
|
|
*
|
|
|
|
* This file incorporates work covered by the following license notice:
|
|
|
|
*
|
|
|
|
* Licensed to the Apache Software Foundation (ASF) under one or more
|
|
|
|
* contributor license agreements. See the NOTICE file distributed
|
|
|
|
* with this work for additional information regarding copyright
|
|
|
|
* ownership. The ASF licenses this file to you under the Apache
|
|
|
|
* License, Version 2.0 (the "License"); you may not use this file
|
|
|
|
* except in compliance with the License. You may obtain a copy of
|
|
|
|
* the License at http://www.apache.org/licenses/LICENSE-2.0 .
|
|
|
|
*/
|
2009-08-26 13:11:27 +00:00
|
|
|
|
|
|
|
|
2010-12-07 13:50:47 +01:00
|
|
|
#include "gridcontrol.hxx"
|
|
|
|
#include "grideventforwarder.hxx"
|
2009-08-26 13:11:27 +00:00
|
|
|
|
2014-08-07 18:42:35 +02:00
|
|
|
#include <com/sun/star/uno/XComponentContext.hpp>
|
2009-08-26 13:11:27 +00:00
|
|
|
#include <com/sun/star/view/SelectionType.hpp>
|
2014-01-23 14:44:17 +01:00
|
|
|
#include <com/sun/star/awt/grid/XGridControl.hpp>
|
2009-08-26 13:11:27 +00:00
|
|
|
#include <com/sun/star/awt/grid/XGridDataModel.hpp>
|
2014-01-23 14:44:17 +01:00
|
|
|
#include <com/sun/star/awt/grid/XGridRowSelection.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>
|
2013-06-06 16:02:46 +02:00
|
|
|
#include <com/sun/star/awt/grid/DefaultGridColumnModel.hpp>
|
2009-08-26 13:11:27 +00:00
|
|
|
#include <toolkit/helper/property.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>
|
2014-01-23 14:44:17 +01:00
|
|
|
#include <toolkit/controls/unocontrolbase.hxx>
|
|
|
|
#include <toolkit/controls/unocontrolmodel.hxx>
|
|
|
|
#include <toolkit/helper/listenermultiplexer.hxx>
|
|
|
|
|
2015-09-17 17:10:47 +01:00
|
|
|
#include <memory>
|
2009-08-26 13:11:27 +00:00
|
|
|
|
2014-04-19 11:24:35 +03:00
|
|
|
#include "helper/unopropertyarrayhelper.hxx"
|
|
|
|
|
2009-08-26 13:11:27 +00:00
|
|
|
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;
|
2012-09-03 19:05:27 -05:00
|
|
|
using namespace ::com::sun::star::util;
|
2009-08-26 13:11:27 +00:00
|
|
|
|
2014-01-23 14:44:17 +01:00
|
|
|
namespace toolkit {
|
|
|
|
|
2011-01-18 11:49:20 +01:00
|
|
|
namespace
|
|
|
|
{
|
2013-06-03 13:22:24 +02:00
|
|
|
Reference< XGridDataModel > lcl_getDefaultDataModel_throw( const Reference<XComponentContext> & i_context )
|
2011-01-18 11:49:20 +01:00
|
|
|
{
|
2013-06-03 13:22:24 +02:00
|
|
|
Reference< XMutableGridDataModel > const xDelegatorModel( DefaultGridDataModel::create( i_context ), UNO_QUERY_THROW );
|
|
|
|
Reference< XGridDataModel > const xDataModel( SortableGridDataModel::create( i_context, xDelegatorModel ), UNO_QUERY_THROW );
|
2011-01-18 11:49:20 +01:00
|
|
|
return xDataModel;
|
|
|
|
}
|
|
|
|
|
2013-06-03 13:22:24 +02:00
|
|
|
Reference< XGridColumnModel > lcl_getDefaultColumnModel_throw( const Reference<XComponentContext> & i_context )
|
2011-01-18 11:49:20 +01:00
|
|
|
{
|
2013-06-06 16:02:46 +02:00
|
|
|
Reference< XGridColumnModel > const xColumnModel = DefaultGridColumnModel::create( i_context );
|
2011-01-18 11:49:20 +01:00
|
|
|
return xColumnModel;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2014-02-22 21:20:15 +01:00
|
|
|
|
2015-11-09 09:05:08 +02:00
|
|
|
UnoGridModel::UnoGridModel( const css::uno::Reference< css::uno::XComponentContext >& rxContext )
|
2013-01-07 11:05:58 +02:00
|
|
|
:UnoControlModel( rxContext )
|
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 );
|
2013-03-03 12:45:21 +01:00
|
|
|
ImplRegisterProperty( BASEPROPERTY_SIZEABLE ); // resizable
|
2009-08-26 13:11:27 +00:00
|
|
|
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 );
|
2013-01-07 11:05:58 +02:00
|
|
|
ImplRegisterProperty( BASEPROPERTY_GRID_DATAMODEL, makeAny( lcl_getDefaultDataModel_throw( m_xContext ) ) );
|
|
|
|
ImplRegisterProperty( BASEPROPERTY_GRID_COLUMNMODEL, makeAny( lcl_getDefaultColumnModel_throw( m_xContext ) ) );
|
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 );
|
2012-09-03 12:20:27 -05:00
|
|
|
ImplRegisterProperty( BASEPROPERTY_ACTIVE_SEL_BACKGROUND_COLOR );
|
|
|
|
ImplRegisterProperty( BASEPROPERTY_INACTIVE_SEL_BACKGROUND_COLOR );
|
|
|
|
ImplRegisterProperty( BASEPROPERTY_ACTIVE_SEL_TEXT_COLOR );
|
|
|
|
ImplRegisterProperty( BASEPROPERTY_INACTIVE_SEL_TEXT_COLOR );
|
2011-01-12 12:34:24 +01:00
|
|
|
ImplRegisterProperty( BASEPROPERTY_VERTICALALIGN );
|
2009-08-26 13:11:27 +00:00
|
|
|
}
|
|
|
|
|
2014-02-22 21:20:15 +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
|
|
|
{
|
2012-09-22 01:51:12 -05:00
|
|
|
osl_atomic_increment( &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() )
|
2013-01-07 11:05:58 +02:00
|
|
|
xDataModel = lcl_getDefaultDataModel_throw( m_xContext );
|
2011-01-26 14:39:03 +01:00
|
|
|
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() )
|
2013-01-07 11:05:58 +02:00
|
|
|
xColumnModel = lcl_getDefaultColumnModel_throw( m_xContext );
|
2011-01-26 14:39:03 +01:00
|
|
|
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
|
|
|
}
|
2012-09-22 01:51:12 -05:00
|
|
|
osl_atomic_decrement( &m_refCount );
|
2009-08-26 13:11:27 +00:00
|
|
|
}
|
|
|
|
|
2014-02-22 21:20:15 +01:00
|
|
|
|
2009-08-26 13:11:27 +00:00
|
|
|
UnoControlModel* UnoGridModel::Clone() const
|
|
|
|
{
|
|
|
|
return new UnoGridModel( *this );
|
|
|
|
}
|
|
|
|
|
2014-02-22 21:20:15 +01:00
|
|
|
|
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();
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2014-02-22 21:20:15 +01:00
|
|
|
|
2014-02-25 21:31:58 +01:00
|
|
|
void SAL_CALL UnoGridModel::dispose( ) throw(RuntimeException, std::exception)
|
2010-12-23 16:10:02 +01:00
|
|
|
{
|
|
|
|
lcl_dispose_nothrow( getFastPropertyValue( BASEPROPERTY_GRID_COLUMNMODEL ) );
|
|
|
|
lcl_dispose_nothrow( getFastPropertyValue( BASEPROPERTY_GRID_DATAMODEL ) );
|
|
|
|
|
|
|
|
UnoControlModel::dispose();
|
|
|
|
}
|
|
|
|
|
2014-02-22 21:20:15 +01:00
|
|
|
|
2014-02-25 21:31:58 +01:00
|
|
|
void SAL_CALL UnoGridModel::setFastPropertyValue_NoBroadcast( sal_Int32 nHandle, const Any& rValue ) throw (Exception, std::exception)
|
2010-12-23 16:10:02 +01:00
|
|
|
{
|
|
|
|
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 );
|
|
|
|
}
|
|
|
|
|
2014-02-22 21:20:15 +01:00
|
|
|
|
2014-02-25 21:31:58 +01:00
|
|
|
OUString UnoGridModel::getServiceName() throw(RuntimeException, std::exception)
|
2009-08-26 13:11:27 +00:00
|
|
|
{
|
2014-01-23 14:44:17 +01:00
|
|
|
return OUString("com.sun.star.awt.grid.UnoControlGridModel");
|
2009-08-26 13:11:27 +00:00
|
|
|
}
|
|
|
|
|
2014-02-22 21:20:15 +01:00
|
|
|
|
2009-08-26 13:11:27 +00:00
|
|
|
Any UnoGridModel::ImplGetDefaultValue( sal_uInt16 nPropId ) const
|
|
|
|
{
|
|
|
|
switch( nPropId )
|
|
|
|
{
|
|
|
|
case BASEPROPERTY_DEFAULTCONTROL:
|
2014-01-23 14:44:17 +01:00
|
|
|
return uno::makeAny( OUString("com.sun.star.awt.grid.UnoControlGrid") );
|
2009-08-26 13:11:27 +00:00
|
|
|
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:
|
2014-02-24 11:13:09 +01:00
|
|
|
return uno::makeAny( 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:
|
2014-02-24 11:13:09 +01:00
|
|
|
return uno::makeAny( 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:
|
2012-09-03 12:20:27 -05:00
|
|
|
case BASEPROPERTY_ACTIVE_SEL_BACKGROUND_COLOR:
|
|
|
|
case BASEPROPERTY_INACTIVE_SEL_BACKGROUND_COLOR:
|
|
|
|
case BASEPROPERTY_ACTIVE_SEL_TEXT_COLOR:
|
|
|
|
case BASEPROPERTY_INACTIVE_SEL_TEXT_COLOR:
|
2011-01-12 12:34:24 +01:00
|
|
|
return Any();
|
2009-08-26 13:11:27 +00:00
|
|
|
default:
|
|
|
|
return UnoControlModel::ImplGetDefaultValue( nPropId );
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
2014-02-22 21:20:15 +01:00
|
|
|
|
2009-08-26 13:11:27 +00:00
|
|
|
::cppu::IPropertyArrayHelper& UnoGridModel::getInfoHelper()
|
|
|
|
{
|
2015-11-10 10:26:16 +01:00
|
|
|
static UnoPropertyArrayHelper* pHelper = nullptr;
|
2009-08-26 13:11:27 +00:00
|
|
|
if ( !pHelper )
|
|
|
|
{
|
|
|
|
Sequence<sal_Int32> aIDs = ImplGetPropertyIds();
|
|
|
|
pHelper = new UnoPropertyArrayHelper( aIDs );
|
|
|
|
}
|
|
|
|
return *pHelper;
|
|
|
|
}
|
|
|
|
|
2014-02-22 21:20:15 +01:00
|
|
|
|
2009-08-26 13:11:27 +00:00
|
|
|
// XMultiPropertySet
|
2014-02-25 21:31:58 +01:00
|
|
|
Reference< XPropertySetInfo > UnoGridModel::getPropertySetInfo( ) throw(RuntimeException, std::exception)
|
2009-08-26 13:11:27 +00:00
|
|
|
{
|
|
|
|
static Reference< XPropertySetInfo > xInfo( createPropertySetInfo( getInfoHelper() ) );
|
|
|
|
return xInfo;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
2010-12-07 13:50:47 +01:00
|
|
|
//= UnoGridControl
|
2014-02-25 22:29:44 +01:00
|
|
|
|
2013-01-07 11:05:58 +02:00
|
|
|
UnoGridControl::UnoGridControl()
|
|
|
|
:UnoGridControl_Base()
|
2010-12-07 09:51:12 +01:00
|
|
|
,m_aSelectionListeners( *this )
|
2014-01-23 14:44:17 +01:00
|
|
|
,m_pEventForwarder( new toolkit::GridEventForwarder( *this ) )
|
2010-12-07 13:50:47 +01:00
|
|
|
{
|
|
|
|
}
|
|
|
|
|
2014-02-22 21:20:15 +01:00
|
|
|
|
2010-12-07 13:50:47 +01:00
|
|
|
UnoGridControl::~UnoGridControl()
|
2009-08-26 13:11:27 +00:00
|
|
|
{
|
|
|
|
}
|
|
|
|
|
2014-02-22 21:20:15 +01:00
|
|
|
|
2009-08-26 13:11:27 +00:00
|
|
|
OUString UnoGridControl::GetComponentServiceName()
|
|
|
|
{
|
2012-05-28 15:43:18 -05:00
|
|
|
return OUString("Grid");
|
2009-08-26 13:11:27 +00:00
|
|
|
}
|
|
|
|
|
2014-02-22 21:20:15 +01:00
|
|
|
|
2014-02-25 21:31:58 +01:00
|
|
|
void SAL_CALL UnoGridControl::dispose( ) throw(RuntimeException, std::exception)
|
2009-08-26 13:11:27 +00:00
|
|
|
{
|
2010-03-22 11:17:10 +01:00
|
|
|
lang::EventObject aEvt;
|
2015-06-08 16:29:04 +02:00
|
|
|
aEvt.Source = static_cast<cppu::OWeakObject*>(this);
|
2010-03-22 11:17:10 +01:00
|
|
|
m_aSelectionListeners.disposeAndClear( aEvt );
|
2009-08-26 13:11:27 +00:00
|
|
|
UnoControl::dispose();
|
|
|
|
}
|
|
|
|
|
2014-02-22 21:20:15 +01:00
|
|
|
|
2014-02-25 21:31:58 +01:00
|
|
|
void SAL_CALL UnoGridControl::createPeer( const uno::Reference< awt::XToolkit > & rxToolkit, const uno::Reference< awt::XWindowPeer > & rParentPeer ) throw(uno::RuntimeException, std::exception)
|
2009-08-26 13:11:27 +00:00
|
|
|
{
|
|
|
|
UnoControlBase::createPeer( rxToolkit, rParentPeer );
|
|
|
|
|
2012-08-31 03:09:18 -05:00
|
|
|
const Reference< XGridRowSelection > xGrid( getPeer(), UNO_QUERY_THROW );
|
|
|
|
xGrid->addSelectionListener( &m_aSelectionListeners );
|
2010-12-07 13:50:47 +01:00
|
|
|
}
|
2009-08-26 13:11:27 +00:00
|
|
|
|
2014-02-22 21:20:15 +01:00
|
|
|
|
2010-12-07 13:50:47 +01:00
|
|
|
namespace
|
|
|
|
{
|
2015-09-17 17:10:47 +01:00
|
|
|
void lcl_setEventForwarding( const Reference< XControlModel >& i_gridControlModel, const std::unique_ptr< toolkit::GridEventForwarder >& i_listener,
|
2010-12-07 13:50:47 +01:00
|
|
|
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(
|
2013-06-29 21:24:12 +02:00
|
|
|
xModelProps->getPropertyValue("ColumnModel"),
|
2010-12-07 13:50:47 +01:00
|
|
|
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(
|
2013-06-29 21:24:12 +02:00
|
|
|
xModelProps->getPropertyValue("GridDataModel"),
|
2010-12-07 13:50:47 +01:00
|
|
|
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
|
|
|
}
|
|
|
|
|
2014-02-22 21:20:15 +01:00
|
|
|
|
2014-02-25 21:31:58 +01:00
|
|
|
sal_Bool SAL_CALL UnoGridControl::setModel( const Reference< XControlModel >& i_model ) throw(RuntimeException, std::exception)
|
2010-12-07 13:50:47 +01:00
|
|
|
{
|
|
|
|
lcl_setEventForwarding( getModel(), m_pEventForwarder, false );
|
|
|
|
if ( !UnoGridControl_Base::setModel( i_model ) )
|
2016-04-20 17:20:31 +02:00
|
|
|
return false;
|
2010-12-07 13:50:47 +01:00
|
|
|
lcl_setEventForwarding( getModel(), m_pEventForwarder, true );
|
2016-04-20 17:20:31 +02:00
|
|
|
return true;
|
2010-12-07 13:50:47 +01:00
|
|
|
}
|
2009-08-26 13:11:27 +00:00
|
|
|
|
2014-02-22 21:20:15 +01:00
|
|
|
|
2015-11-09 09:05:08 +02:00
|
|
|
::sal_Int32 UnoGridControl::getRowAtPoint(::sal_Int32 x, ::sal_Int32 y) throw (css::uno::RuntimeException, std::exception)
|
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
|
|
|
}
|
|
|
|
|
2014-02-22 21:20:15 +01:00
|
|
|
|
2015-11-09 09:05:08 +02:00
|
|
|
::sal_Int32 UnoGridControl::getColumnAtPoint(::sal_Int32 x, ::sal_Int32 y) throw (css::uno::RuntimeException, std::exception)
|
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
|
|
|
}
|
|
|
|
|
2014-02-22 21:20:15 +01:00
|
|
|
|
2014-02-25 21:31:58 +01:00
|
|
|
::sal_Int32 SAL_CALL UnoGridControl::getCurrentColumn( ) throw (RuntimeException, std::exception)
|
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
|
|
|
}
|
|
|
|
|
2014-02-22 21:20:15 +01:00
|
|
|
|
2014-02-25 21:31:58 +01:00
|
|
|
::sal_Int32 SAL_CALL UnoGridControl::getCurrentRow( ) throw (RuntimeException, std::exception)
|
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
|
|
|
}
|
|
|
|
|
2014-02-22 21:20:15 +01:00
|
|
|
|
2014-02-25 21:31:58 +01:00
|
|
|
void SAL_CALL UnoGridControl::goToCell( ::sal_Int32 i_columnIndex, ::sal_Int32 i_rowIndex ) throw (RuntimeException, IndexOutOfBoundsException, VetoException, std::exception)
|
2012-09-03 19:05:27 -05:00
|
|
|
{
|
|
|
|
Reference< XGridControl > const xGrid ( getPeer(), UNO_QUERY_THROW );
|
|
|
|
xGrid->goToCell( i_columnIndex, i_rowIndex );
|
|
|
|
}
|
|
|
|
|
2014-02-22 21:20:15 +01:00
|
|
|
|
2014-02-25 21:31:58 +01:00
|
|
|
void SAL_CALL UnoGridControl::selectRow( ::sal_Int32 i_rowIndex ) throw (RuntimeException, IndexOutOfBoundsException, std::exception )
|
2009-08-26 13:11:27 +00:00
|
|
|
{
|
2012-08-31 03:09:18 -05:00
|
|
|
Reference< XGridRowSelection >( getPeer(), UNO_QUERY_THROW )->selectRow( i_rowIndex );
|
2009-08-26 13:11:27 +00:00
|
|
|
}
|
|
|
|
|
2014-02-22 21:20:15 +01:00
|
|
|
|
2015-11-09 09:05:08 +02:00
|
|
|
void SAL_CALL UnoGridControl::selectAllRows() throw (css::uno::RuntimeException, std::exception)
|
2009-08-26 13:11:27 +00:00
|
|
|
{
|
2012-08-31 03:09:18 -05:00
|
|
|
Reference< XGridRowSelection >( getPeer(), UNO_QUERY_THROW )->selectAllRows();
|
2010-03-22 11:17:10 +01:00
|
|
|
}
|
2010-12-07 13:50:47 +01:00
|
|
|
|
2014-02-22 21:20:15 +01:00
|
|
|
|
2014-02-25 21:31:58 +01:00
|
|
|
void SAL_CALL UnoGridControl::deselectRow( ::sal_Int32 i_rowIndex ) throw (RuntimeException, IndexOutOfBoundsException, std::exception )
|
2010-03-22 11:17:10 +01:00
|
|
|
{
|
2012-08-31 03:09:18 -05:00
|
|
|
Reference< XGridRowSelection >( getPeer(), UNO_QUERY_THROW )->deselectRow( i_rowIndex );
|
2009-08-26 13:11:27 +00:00
|
|
|
}
|
|
|
|
|
2014-02-22 21:20:15 +01:00
|
|
|
|
2015-11-09 09:05:08 +02:00
|
|
|
void SAL_CALL UnoGridControl::deselectAllRows() throw (css::uno::RuntimeException, std::exception)
|
2010-03-22 11:17:10 +01:00
|
|
|
{
|
2012-08-31 03:09:18 -05:00
|
|
|
Reference< XGridRowSelection >( getPeer(), UNO_QUERY_THROW )->deselectAllRows();
|
2010-03-22 11:17:10 +01:00
|
|
|
}
|
2010-12-07 13:50:47 +01:00
|
|
|
|
2014-02-22 21:20:15 +01:00
|
|
|
|
2015-11-09 09:05:08 +02:00
|
|
|
css::uno::Sequence< ::sal_Int32 > SAL_CALL UnoGridControl::getSelectedRows() throw (css::uno::RuntimeException, std::exception)
|
2009-08-26 13:11:27 +00:00
|
|
|
{
|
2012-08-31 03:09:18 -05:00
|
|
|
return Reference< XGridRowSelection >( getPeer(), UNO_QUERY_THROW )->getSelectedRows();
|
2009-08-26 13:11:27 +00:00
|
|
|
}
|
|
|
|
|
2014-02-22 21:20:15 +01:00
|
|
|
|
2015-11-09 09:05:08 +02:00
|
|
|
sal_Bool SAL_CALL UnoGridControl::hasSelectedRows() throw (css::uno::RuntimeException, std::exception)
|
2009-08-26 13:11:27 +00:00
|
|
|
{
|
2012-08-31 03:09:18 -05:00
|
|
|
return Reference< XGridRowSelection >( getPeer(), UNO_QUERY_THROW )->hasSelectedRows();
|
2009-08-26 13:11:27 +00:00
|
|
|
}
|
|
|
|
|
2014-02-22 21:20:15 +01:00
|
|
|
|
2015-11-09 09:05:08 +02:00
|
|
|
sal_Bool SAL_CALL UnoGridControl::isRowSelected(::sal_Int32 index) throw (css::uno::RuntimeException, std::exception)
|
2009-08-26 13:11:27 +00:00
|
|
|
{
|
2012-08-31 03:09:18 -05:00
|
|
|
return Reference< XGridRowSelection >( getPeer(), UNO_QUERY_THROW )->isRowSelected( index );
|
2009-08-26 13:11:27 +00:00
|
|
|
}
|
|
|
|
|
2014-02-22 21:20:15 +01:00
|
|
|
|
2015-11-09 09:05:08 +02:00
|
|
|
void SAL_CALL UnoGridControl::addSelectionListener(const css::uno::Reference< css::awt::grid::XGridSelectionListener > & listener) throw (css::uno::RuntimeException, std::exception)
|
2009-08-26 13:11:27 +00:00
|
|
|
{
|
2010-03-22 11:17:10 +01:00
|
|
|
m_aSelectionListeners.addInterface( listener );
|
2009-08-26 13:11:27 +00:00
|
|
|
}
|
|
|
|
|
2014-02-22 21:20:15 +01:00
|
|
|
|
2015-11-09 09:05:08 +02:00
|
|
|
void SAL_CALL UnoGridControl::removeSelectionListener(const css::uno::Reference< css::awt::grid::XGridSelectionListener > & listener) throw (css::uno::RuntimeException, std::exception)
|
2009-08-26 13:11:27 +00:00
|
|
|
{
|
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
|
|
|
|
2014-01-23 14:44:17 +01:00
|
|
|
}
|
2009-08-26 13:11:27 +00:00
|
|
|
|
2014-01-23 14:44:17 +01:00
|
|
|
extern "C" SAL_DLLPUBLIC_EXPORT css::uno::XInterface * SAL_CALL
|
|
|
|
stardiv_Toolkit_GridControl_get_implementation(
|
|
|
|
css::uno::XComponentContext *,
|
|
|
|
css::uno::Sequence<css::uno::Any> const &)
|
2009-08-26 13:11:27 +00:00
|
|
|
{
|
2014-01-23 14:44:17 +01:00
|
|
|
return cppu::acquire(new toolkit::UnoGridControl());
|
2009-08-26 13:11:27 +00:00
|
|
|
}
|
|
|
|
|
2014-01-23 14:44:17 +01:00
|
|
|
extern "C" SAL_DLLPUBLIC_EXPORT css::uno::XInterface * SAL_CALL
|
|
|
|
stardiv_Toolkit_GridControlModel_get_implementation(
|
|
|
|
css::uno::XComponentContext *context,
|
|
|
|
css::uno::Sequence<css::uno::Any> const &)
|
2009-08-26 13:11:27 +00:00
|
|
|
{
|
2014-01-23 14:44:17 +01:00
|
|
|
return cppu::acquire(new toolkit::UnoGridModel(context));
|
2009-08-26 13:11:27 +00:00
|
|
|
}
|
2010-10-14 08:27:31 +02:00
|
|
|
|
|
|
|
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
|