1*b1cdbd2cSJim Jagielski /************************************************************** 2*b1cdbd2cSJim Jagielski * 3*b1cdbd2cSJim Jagielski * Licensed to the Apache Software Foundation (ASF) under one 4*b1cdbd2cSJim Jagielski * or more contributor license agreements. See the NOTICE file 5*b1cdbd2cSJim Jagielski * distributed with this work for additional information 6*b1cdbd2cSJim Jagielski * regarding copyright ownership. The ASF licenses this file 7*b1cdbd2cSJim Jagielski * to you under the Apache License, Version 2.0 (the 8*b1cdbd2cSJim Jagielski * "License"); you may not use this file except in compliance 9*b1cdbd2cSJim Jagielski * with the License. You may obtain a copy of the License at 10*b1cdbd2cSJim Jagielski * 11*b1cdbd2cSJim Jagielski * http://www.apache.org/licenses/LICENSE-2.0 12*b1cdbd2cSJim Jagielski * 13*b1cdbd2cSJim Jagielski * Unless required by applicable law or agreed to in writing, 14*b1cdbd2cSJim Jagielski * software distributed under the License is distributed on an 15*b1cdbd2cSJim Jagielski * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 16*b1cdbd2cSJim Jagielski * KIND, either express or implied. See the License for the 17*b1cdbd2cSJim Jagielski * specific language governing permissions and limitations 18*b1cdbd2cSJim Jagielski * under the License. 19*b1cdbd2cSJim Jagielski * 20*b1cdbd2cSJim Jagielski *************************************************************/ 21*b1cdbd2cSJim Jagielski 22*b1cdbd2cSJim Jagielski 23*b1cdbd2cSJim Jagielski 24*b1cdbd2cSJim Jagielski // MARKER(update_precomp.py): autogen include statement, do not remove 25*b1cdbd2cSJim Jagielski #include "precompiled_dbaccess.hxx" 26*b1cdbd2cSJim Jagielski 27*b1cdbd2cSJim Jagielski #include "columnsettings.hxx" 28*b1cdbd2cSJim Jagielski #include "dbastrings.hrc" 29*b1cdbd2cSJim Jagielski 30*b1cdbd2cSJim Jagielski /** === begin UNO includes === **/ 31*b1cdbd2cSJim Jagielski #include <com/sun/star/beans/PropertyAttribute.hpp> 32*b1cdbd2cSJim Jagielski /** === end UNO includes === **/ 33*b1cdbd2cSJim Jagielski 34*b1cdbd2cSJim Jagielski #include <cppuhelper/typeprovider.hxx> 35*b1cdbd2cSJim Jagielski #include <comphelper/property.hxx> 36*b1cdbd2cSJim Jagielski #include <tools/debug.hxx> 37*b1cdbd2cSJim Jagielski #include <tools/diagnose_ex.h> 38*b1cdbd2cSJim Jagielski 39*b1cdbd2cSJim Jagielski //........................................................................ 40*b1cdbd2cSJim Jagielski namespace dbaccess 41*b1cdbd2cSJim Jagielski { 42*b1cdbd2cSJim Jagielski //........................................................................ 43*b1cdbd2cSJim Jagielski 44*b1cdbd2cSJim Jagielski /** === begin UNO using === **/ 45*b1cdbd2cSJim Jagielski using ::com::sun::star::uno::Reference; 46*b1cdbd2cSJim Jagielski using ::com::sun::star::uno::XInterface; 47*b1cdbd2cSJim Jagielski using ::com::sun::star::uno::UNO_QUERY; 48*b1cdbd2cSJim Jagielski using ::com::sun::star::uno::UNO_QUERY_THROW; 49*b1cdbd2cSJim Jagielski using ::com::sun::star::uno::UNO_SET_THROW; 50*b1cdbd2cSJim Jagielski using ::com::sun::star::uno::Exception; 51*b1cdbd2cSJim Jagielski using ::com::sun::star::uno::RuntimeException; 52*b1cdbd2cSJim Jagielski using ::com::sun::star::uno::Any; 53*b1cdbd2cSJim Jagielski using ::com::sun::star::uno::makeAny; 54*b1cdbd2cSJim Jagielski using ::com::sun::star::uno::Sequence; 55*b1cdbd2cSJim Jagielski using ::com::sun::star::uno::Type; 56*b1cdbd2cSJim Jagielski using ::com::sun::star::lang::IllegalArgumentException; 57*b1cdbd2cSJim Jagielski using ::com::sun::star::beans::XPropertySet; 58*b1cdbd2cSJim Jagielski using ::com::sun::star::beans::XPropertySetInfo; 59*b1cdbd2cSJim Jagielski /** === end UNO using === **/ 60*b1cdbd2cSJim Jagielski namespace PropertyAttribute = ::com::sun::star::beans::PropertyAttribute; 61*b1cdbd2cSJim Jagielski 62*b1cdbd2cSJim Jagielski //============================================================================== 63*b1cdbd2cSJim Jagielski //= OColumnSettings 64*b1cdbd2cSJim Jagielski //============================================================================== DBG_NAME(OColumnSettings)65*b1cdbd2cSJim Jagielski DBG_NAME( OColumnSettings ) 66*b1cdbd2cSJim Jagielski //------------------------------------------------------------------------------ 67*b1cdbd2cSJim Jagielski OColumnSettings::OColumnSettings() 68*b1cdbd2cSJim Jagielski :m_bHidden(sal_False) 69*b1cdbd2cSJim Jagielski { 70*b1cdbd2cSJim Jagielski DBG_CTOR( OColumnSettings, NULL ); 71*b1cdbd2cSJim Jagielski } 72*b1cdbd2cSJim Jagielski 73*b1cdbd2cSJim Jagielski //------------------------------------------------------------------------------ ~OColumnSettings()74*b1cdbd2cSJim Jagielski OColumnSettings::~OColumnSettings() 75*b1cdbd2cSJim Jagielski { 76*b1cdbd2cSJim Jagielski DBG_DTOR( OColumnSettings, NULL ); 77*b1cdbd2cSJim Jagielski } 78*b1cdbd2cSJim Jagielski 79*b1cdbd2cSJim Jagielski //------------------------------------------------------------------------------ registerProperties(IPropertyContainer & _rPropertyContainer)80*b1cdbd2cSJim Jagielski void OColumnSettings::registerProperties( IPropertyContainer& _rPropertyContainer ) 81*b1cdbd2cSJim Jagielski { 82*b1cdbd2cSJim Jagielski const sal_Int32 nBoundAttr = PropertyAttribute::BOUND; 83*b1cdbd2cSJim Jagielski const sal_Int32 nMayBeVoidAttr = PropertyAttribute::MAYBEVOID | nBoundAttr; 84*b1cdbd2cSJim Jagielski 85*b1cdbd2cSJim Jagielski const Type& rSalInt32Type = ::getCppuType( static_cast< sal_Int32* >( NULL ) ); 86*b1cdbd2cSJim Jagielski const Type& rStringType = ::getCppuType( static_cast< ::rtl::OUString* >( NULL ) ); 87*b1cdbd2cSJim Jagielski 88*b1cdbd2cSJim Jagielski _rPropertyContainer.registerMayBeVoidProperty( PROPERTY_ALIGN, PROPERTY_ID_ALIGN, nMayBeVoidAttr, &m_aAlignment, rSalInt32Type ); 89*b1cdbd2cSJim Jagielski _rPropertyContainer.registerMayBeVoidProperty( PROPERTY_NUMBERFORMAT, PROPERTY_ID_NUMBERFORMAT, nMayBeVoidAttr, &m_aFormatKey, rSalInt32Type ); 90*b1cdbd2cSJim Jagielski _rPropertyContainer.registerMayBeVoidProperty( PROPERTY_RELATIVEPOSITION, PROPERTY_ID_RELATIVEPOSITION, nMayBeVoidAttr, &m_aRelativePosition, rSalInt32Type ); 91*b1cdbd2cSJim Jagielski _rPropertyContainer.registerMayBeVoidProperty( PROPERTY_WIDTH, PROPERTY_ID_WIDTH, nMayBeVoidAttr, &m_aWidth, rSalInt32Type ); 92*b1cdbd2cSJim Jagielski _rPropertyContainer.registerMayBeVoidProperty( PROPERTY_HELPTEXT, PROPERTY_ID_HELPTEXT, nMayBeVoidAttr, &m_aHelpText, rStringType ); 93*b1cdbd2cSJim Jagielski _rPropertyContainer.registerMayBeVoidProperty( PROPERTY_CONTROLDEFAULT, PROPERTY_ID_CONTROLDEFAULT, nMayBeVoidAttr, &m_aControlDefault, rStringType ); 94*b1cdbd2cSJim Jagielski _rPropertyContainer.registerProperty( PROPERTY_CONTROLMODEL, PROPERTY_ID_CONTROLMODEL, nBoundAttr, &m_xControlModel, ::getCppuType( &m_xControlModel ) ); 95*b1cdbd2cSJim Jagielski _rPropertyContainer.registerProperty( PROPERTY_HIDDEN, PROPERTY_ID_HIDDEN, nBoundAttr, &m_bHidden, ::getCppuType( &m_bHidden ) ); 96*b1cdbd2cSJim Jagielski } 97*b1cdbd2cSJim Jagielski 98*b1cdbd2cSJim Jagielski //------------------------------------------------------------------------------ isColumnSettingProperty(const sal_Int32 _nPropertyHandle)99*b1cdbd2cSJim Jagielski bool OColumnSettings::isColumnSettingProperty( const sal_Int32 _nPropertyHandle ) 100*b1cdbd2cSJim Jagielski { 101*b1cdbd2cSJim Jagielski return ( _nPropertyHandle == PROPERTY_ID_ALIGN ) 102*b1cdbd2cSJim Jagielski || ( _nPropertyHandle == PROPERTY_ID_NUMBERFORMAT ) 103*b1cdbd2cSJim Jagielski || ( _nPropertyHandle == PROPERTY_ID_RELATIVEPOSITION ) 104*b1cdbd2cSJim Jagielski || ( _nPropertyHandle == PROPERTY_ID_WIDTH ) 105*b1cdbd2cSJim Jagielski || ( _nPropertyHandle == PROPERTY_ID_HELPTEXT ) 106*b1cdbd2cSJim Jagielski || ( _nPropertyHandle == PROPERTY_ID_CONTROLDEFAULT ) 107*b1cdbd2cSJim Jagielski || ( _nPropertyHandle == PROPERTY_ID_CONTROLMODEL ) 108*b1cdbd2cSJim Jagielski || ( _nPropertyHandle == PROPERTY_ID_HIDDEN ); 109*b1cdbd2cSJim Jagielski } 110*b1cdbd2cSJim Jagielski 111*b1cdbd2cSJim Jagielski //------------------------------------------------------------------------------ isDefaulted(const sal_Int32 _nPropertyHandle,const Any & _rPropertyValue)112*b1cdbd2cSJim Jagielski bool OColumnSettings::isDefaulted( const sal_Int32 _nPropertyHandle, const Any& _rPropertyValue ) 113*b1cdbd2cSJim Jagielski { 114*b1cdbd2cSJim Jagielski switch ( _nPropertyHandle ) 115*b1cdbd2cSJim Jagielski { 116*b1cdbd2cSJim Jagielski case PROPERTY_ID_ALIGN: 117*b1cdbd2cSJim Jagielski case PROPERTY_ID_NUMBERFORMAT: 118*b1cdbd2cSJim Jagielski case PROPERTY_ID_RELATIVEPOSITION: 119*b1cdbd2cSJim Jagielski case PROPERTY_ID_WIDTH: 120*b1cdbd2cSJim Jagielski case PROPERTY_ID_HELPTEXT: 121*b1cdbd2cSJim Jagielski case PROPERTY_ID_CONTROLDEFAULT: 122*b1cdbd2cSJim Jagielski return !_rPropertyValue.hasValue(); 123*b1cdbd2cSJim Jagielski 124*b1cdbd2cSJim Jagielski case PROPERTY_ID_CONTROLMODEL: 125*b1cdbd2cSJim Jagielski return !Reference< XPropertySet >( _rPropertyValue, UNO_QUERY ).is(); 126*b1cdbd2cSJim Jagielski 127*b1cdbd2cSJim Jagielski case PROPERTY_ID_HIDDEN: 128*b1cdbd2cSJim Jagielski { 129*b1cdbd2cSJim Jagielski sal_Bool bHidden = sal_False; 130*b1cdbd2cSJim Jagielski OSL_VERIFY( _rPropertyValue >>= bHidden ); 131*b1cdbd2cSJim Jagielski return !bHidden; 132*b1cdbd2cSJim Jagielski } 133*b1cdbd2cSJim Jagielski } 134*b1cdbd2cSJim Jagielski OSL_ENSURE( false, "OColumnSettings::isDefaulted: illegal property handle!" ); 135*b1cdbd2cSJim Jagielski return sal_False; 136*b1cdbd2cSJim Jagielski } 137*b1cdbd2cSJim Jagielski 138*b1cdbd2cSJim Jagielski //------------------------------------------------------------------------------ hasDefaultSettings(const Reference<XPropertySet> & _rxColumn)139*b1cdbd2cSJim Jagielski bool OColumnSettings::hasDefaultSettings( const Reference< XPropertySet >& _rxColumn ) 140*b1cdbd2cSJim Jagielski { 141*b1cdbd2cSJim Jagielski ENSURE_OR_THROW( _rxColumn.is(), "illegal column" ); 142*b1cdbd2cSJim Jagielski try 143*b1cdbd2cSJim Jagielski { 144*b1cdbd2cSJim Jagielski Reference< XPropertySetInfo > xPSI( _rxColumn->getPropertySetInfo(), UNO_SET_THROW ); 145*b1cdbd2cSJim Jagielski 146*b1cdbd2cSJim Jagielski struct PropertyDescriptor 147*b1cdbd2cSJim Jagielski { 148*b1cdbd2cSJim Jagielski ::rtl::OUString sName; 149*b1cdbd2cSJim Jagielski sal_Int32 nHandle; 150*b1cdbd2cSJim Jagielski }; 151*b1cdbd2cSJim Jagielski PropertyDescriptor aProps[] = 152*b1cdbd2cSJim Jagielski { 153*b1cdbd2cSJim Jagielski { PROPERTY_ALIGN, PROPERTY_ID_ALIGN }, 154*b1cdbd2cSJim Jagielski { PROPERTY_NUMBERFORMAT, PROPERTY_ID_NUMBERFORMAT }, 155*b1cdbd2cSJim Jagielski { PROPERTY_RELATIVEPOSITION, PROPERTY_ID_RELATIVEPOSITION }, 156*b1cdbd2cSJim Jagielski { PROPERTY_WIDTH, PROPERTY_ID_WIDTH }, 157*b1cdbd2cSJim Jagielski { PROPERTY_HELPTEXT, PROPERTY_ID_HELPTEXT }, 158*b1cdbd2cSJim Jagielski { PROPERTY_CONTROLDEFAULT, PROPERTY_ID_CONTROLDEFAULT }, 159*b1cdbd2cSJim Jagielski { PROPERTY_CONTROLMODEL, PROPERTY_ID_CONTROLMODEL }, 160*b1cdbd2cSJim Jagielski { PROPERTY_HIDDEN, PROPERTY_ID_HIDDEN } 161*b1cdbd2cSJim Jagielski }; 162*b1cdbd2cSJim Jagielski 163*b1cdbd2cSJim Jagielski for ( size_t i=0; i < sizeof( aProps ) / sizeof( aProps[0] ); ++i ) 164*b1cdbd2cSJim Jagielski { 165*b1cdbd2cSJim Jagielski if ( xPSI->hasPropertyByName( aProps[i].sName ) ) 166*b1cdbd2cSJim Jagielski if ( !isDefaulted( aProps[i].nHandle, _rxColumn->getPropertyValue( aProps[i].sName ) ) ) 167*b1cdbd2cSJim Jagielski return false; 168*b1cdbd2cSJim Jagielski } 169*b1cdbd2cSJim Jagielski } 170*b1cdbd2cSJim Jagielski catch( const Exception& ) 171*b1cdbd2cSJim Jagielski { 172*b1cdbd2cSJim Jagielski DBG_UNHANDLED_EXCEPTION(); 173*b1cdbd2cSJim Jagielski } 174*b1cdbd2cSJim Jagielski return true; 175*b1cdbd2cSJim Jagielski } 176*b1cdbd2cSJim Jagielski 177*b1cdbd2cSJim Jagielski //........................................................................ 178*b1cdbd2cSJim Jagielski } // namespace dbaccess 179*b1cdbd2cSJim Jagielski //........................................................................ 180