/************************************************************** * * 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 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. * *************************************************************/ // MARKER(update_precomp.py): autogen include statement, do not remove #include "precompiled_dbaccess.hxx" #include "columnsettings.hxx" #include "dbastrings.hrc" /** === begin UNO includes === **/ #include /** === end UNO includes === **/ #include #include #include #include //........................................................................ namespace dbaccess { //........................................................................ /** === begin UNO using === **/ using ::com::sun::star::uno::Reference; using ::com::sun::star::uno::XInterface; using ::com::sun::star::uno::UNO_QUERY; using ::com::sun::star::uno::UNO_QUERY_THROW; using ::com::sun::star::uno::UNO_SET_THROW; using ::com::sun::star::uno::Exception; using ::com::sun::star::uno::RuntimeException; using ::com::sun::star::uno::Any; using ::com::sun::star::uno::makeAny; using ::com::sun::star::uno::Sequence; using ::com::sun::star::uno::Type; using ::com::sun::star::lang::IllegalArgumentException; using ::com::sun::star::beans::XPropertySet; using ::com::sun::star::beans::XPropertySetInfo; /** === end UNO using === **/ namespace PropertyAttribute = ::com::sun::star::beans::PropertyAttribute; //============================================================================== //= OColumnSettings //============================================================================== DBG_NAME( OColumnSettings ) //------------------------------------------------------------------------------ OColumnSettings::OColumnSettings() :m_bHidden(sal_False) { DBG_CTOR( OColumnSettings, NULL ); } //------------------------------------------------------------------------------ OColumnSettings::~OColumnSettings() { DBG_DTOR( OColumnSettings, NULL ); } //------------------------------------------------------------------------------ void OColumnSettings::registerProperties( IPropertyContainer& _rPropertyContainer ) { const sal_Int32 nBoundAttr = PropertyAttribute::BOUND; const sal_Int32 nMayBeVoidAttr = PropertyAttribute::MAYBEVOID | nBoundAttr; const Type& rSalInt32Type = ::getCppuType( static_cast< sal_Int32* >( NULL ) ); const Type& rStringType = ::getCppuType( static_cast< ::rtl::OUString* >( NULL ) ); _rPropertyContainer.registerMayBeVoidProperty( PROPERTY_ALIGN, PROPERTY_ID_ALIGN, nMayBeVoidAttr, &m_aAlignment, rSalInt32Type ); _rPropertyContainer.registerMayBeVoidProperty( PROPERTY_NUMBERFORMAT, PROPERTY_ID_NUMBERFORMAT, nMayBeVoidAttr, &m_aFormatKey, rSalInt32Type ); _rPropertyContainer.registerMayBeVoidProperty( PROPERTY_RELATIVEPOSITION, PROPERTY_ID_RELATIVEPOSITION, nMayBeVoidAttr, &m_aRelativePosition, rSalInt32Type ); _rPropertyContainer.registerMayBeVoidProperty( PROPERTY_WIDTH, PROPERTY_ID_WIDTH, nMayBeVoidAttr, &m_aWidth, rSalInt32Type ); _rPropertyContainer.registerMayBeVoidProperty( PROPERTY_HELPTEXT, PROPERTY_ID_HELPTEXT, nMayBeVoidAttr, &m_aHelpText, rStringType ); _rPropertyContainer.registerMayBeVoidProperty( PROPERTY_CONTROLDEFAULT, PROPERTY_ID_CONTROLDEFAULT, nMayBeVoidAttr, &m_aControlDefault, rStringType ); _rPropertyContainer.registerProperty( PROPERTY_CONTROLMODEL, PROPERTY_ID_CONTROLMODEL, nBoundAttr, &m_xControlModel, ::getCppuType( &m_xControlModel ) ); _rPropertyContainer.registerProperty( PROPERTY_HIDDEN, PROPERTY_ID_HIDDEN, nBoundAttr, &m_bHidden, ::getCppuType( &m_bHidden ) ); } //------------------------------------------------------------------------------ bool OColumnSettings::isColumnSettingProperty( const sal_Int32 _nPropertyHandle ) { return ( _nPropertyHandle == PROPERTY_ID_ALIGN ) || ( _nPropertyHandle == PROPERTY_ID_NUMBERFORMAT ) || ( _nPropertyHandle == PROPERTY_ID_RELATIVEPOSITION ) || ( _nPropertyHandle == PROPERTY_ID_WIDTH ) || ( _nPropertyHandle == PROPERTY_ID_HELPTEXT ) || ( _nPropertyHandle == PROPERTY_ID_CONTROLDEFAULT ) || ( _nPropertyHandle == PROPERTY_ID_CONTROLMODEL ) || ( _nPropertyHandle == PROPERTY_ID_HIDDEN ); } //------------------------------------------------------------------------------ bool OColumnSettings::isDefaulted( const sal_Int32 _nPropertyHandle, const Any& _rPropertyValue ) { switch ( _nPropertyHandle ) { case PROPERTY_ID_ALIGN: case PROPERTY_ID_NUMBERFORMAT: case PROPERTY_ID_RELATIVEPOSITION: case PROPERTY_ID_WIDTH: case PROPERTY_ID_HELPTEXT: case PROPERTY_ID_CONTROLDEFAULT: return !_rPropertyValue.hasValue(); case PROPERTY_ID_CONTROLMODEL: return !Reference< XPropertySet >( _rPropertyValue, UNO_QUERY ).is(); case PROPERTY_ID_HIDDEN: { sal_Bool bHidden = sal_False; OSL_VERIFY( _rPropertyValue >>= bHidden ); return !bHidden; } } OSL_ENSURE( false, "OColumnSettings::isDefaulted: illegal property handle!" ); return sal_False; } //------------------------------------------------------------------------------ bool OColumnSettings::hasDefaultSettings( const Reference< XPropertySet >& _rxColumn ) { ENSURE_OR_THROW( _rxColumn.is(), "illegal column" ); try { Reference< XPropertySetInfo > xPSI( _rxColumn->getPropertySetInfo(), UNO_SET_THROW ); struct PropertyDescriptor { ::rtl::OUString sName; sal_Int32 nHandle; }; PropertyDescriptor aProps[] = { { PROPERTY_ALIGN, PROPERTY_ID_ALIGN }, { PROPERTY_NUMBERFORMAT, PROPERTY_ID_NUMBERFORMAT }, { PROPERTY_RELATIVEPOSITION, PROPERTY_ID_RELATIVEPOSITION }, { PROPERTY_WIDTH, PROPERTY_ID_WIDTH }, { PROPERTY_HELPTEXT, PROPERTY_ID_HELPTEXT }, { PROPERTY_CONTROLDEFAULT, PROPERTY_ID_CONTROLDEFAULT }, { PROPERTY_CONTROLMODEL, PROPERTY_ID_CONTROLMODEL }, { PROPERTY_HIDDEN, PROPERTY_ID_HIDDEN } }; for ( size_t i=0; i < sizeof( aProps ) / sizeof( aProps[0] ); ++i ) { if ( xPSI->hasPropertyByName( aProps[i].sName ) ) if ( !isDefaulted( aProps[i].nHandle, _rxColumn->getPropertyValue( aProps[i].sName ) ) ) return false; } } catch( const Exception& ) { DBG_UNHANDLED_EXCEPTION(); } return true; } //........................................................................ } // namespace dbaccess //........................................................................