1 /************************************************************** 2 * 3 * Licensed to the Apache Software Foundation (ASF) under one 4 * or more contributor license agreements. See the NOTICE file 5 * distributed with this work for additional information 6 * regarding copyright ownership. The ASF licenses this file 7 * to you under the Apache License, Version 2.0 (the 8 * "License"); you may not use this file except in compliance 9 * with the License. You may obtain a copy of the License at 10 * 11 * http://www.apache.org/licenses/LICENSE-2.0 12 * 13 * Unless required by applicable law or agreed to in writing, 14 * software distributed under the License is distributed on an 15 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 16 * KIND, either express or implied. See the License for the 17 * specific language governing permissions and limitations 18 * under the License. 19 * 20 *************************************************************/ 21 22 23 24 #include "precompiled_toolkit.hxx" 25 #include "gridcolumn.hxx" 26 27 #include <comphelper/sequence.hxx> 28 #include <cppuhelper/typeprovider.hxx> 29 #include <toolkit/helper/servicenames.hxx> 30 31 namespace toolkit 32 { 33 using namespace ::com::sun::star; 34 using namespace ::com::sun::star::uno; 35 using namespace ::com::sun::star::awt; 36 using namespace ::com::sun::star::awt::grid; 37 using namespace ::com::sun::star::lang; 38 using namespace ::com::sun::star::util; 39 using namespace ::com::sun::star::style; 40 41 //================================================================================================================== 42 //= DefaultGridColumnModel 43 //================================================================================================================== 44 //------------------------------------------------------------------------------------------------------------------ 45 GridColumn::GridColumn() 46 :GridColumn_Base( m_aMutex ) 47 ,m_aIdentifier() 48 ,m_nIndex(-1) 49 ,m_nDataColumnIndex(-1) 50 ,m_nColumnWidth(4) 51 ,m_nMaxWidth(0) 52 ,m_nMinWidth(0) 53 ,m_nFlexibility(1) 54 ,m_bResizeable(true) 55 ,m_eHorizontalAlign( HorizontalAlignment_LEFT ) 56 { 57 } 58 59 //------------------------------------------------------------------------------------------------------------------ 60 GridColumn::GridColumn( GridColumn const & i_copySource ) 61 :cppu::BaseMutex() 62 ,GridColumn_Base( m_aMutex ) 63 ,m_aIdentifier( i_copySource.m_aIdentifier ) 64 ,m_nIndex( -1 ) 65 ,m_nDataColumnIndex( i_copySource.m_nDataColumnIndex ) 66 ,m_nColumnWidth( i_copySource.m_nColumnWidth ) 67 ,m_nMaxWidth( i_copySource.m_nMaxWidth ) 68 ,m_nMinWidth( i_copySource.m_nMinWidth ) 69 ,m_nFlexibility( i_copySource.m_nFlexibility ) 70 ,m_bResizeable( i_copySource.m_bResizeable ) 71 ,m_sTitle( i_copySource.m_sTitle ) 72 ,m_sHelpText( i_copySource.m_sHelpText ) 73 ,m_eHorizontalAlign( i_copySource.m_eHorizontalAlign ) 74 { 75 } 76 77 //------------------------------------------------------------------------------------------------------------------ 78 GridColumn::~GridColumn() 79 { 80 } 81 82 //------------------------------------------------------------------------------------------------------------------ 83 void GridColumn::broadcast_changed( sal_Char const * const i_asciiAttributeName, Any i_oldValue, Any i_newValue, 84 ::comphelper::ComponentGuard& i_Guard ) 85 { 86 Reference< XInterface > const xSource( static_cast< ::cppu::OWeakObject* >( this ) ); 87 GridColumnEvent const aEvent( 88 xSource, ::rtl::OUString::createFromAscii( i_asciiAttributeName ), 89 i_oldValue, i_newValue, m_nIndex 90 ); 91 92 ::cppu::OInterfaceContainerHelper* pIter = rBHelper.getContainer( XGridColumnListener::static_type() ); 93 94 i_Guard.clear(); 95 if( pIter ) 96 pIter->notifyEach( &XGridColumnListener::columnChanged, aEvent ); 97 } 98 99 //------------------------------------------------------------------------------------------------------------------ 100 ::com::sun::star::uno::Any SAL_CALL GridColumn::getIdentifier() throw (::com::sun::star::uno::RuntimeException) 101 { 102 ::comphelper::ComponentGuard aGuard( *this, rBHelper ); 103 return m_aIdentifier; 104 } 105 106 //------------------------------------------------------------------------------------------------------------------ 107 void SAL_CALL GridColumn::setIdentifier(const ::com::sun::star::uno::Any & value) throw (::com::sun::star::uno::RuntimeException) 108 { 109 ::comphelper::ComponentGuard aGuard( *this, rBHelper ); 110 m_aIdentifier = value; 111 } 112 113 //------------------------------------------------------------------------------------------------------------------ 114 ::sal_Int32 SAL_CALL GridColumn::getColumnWidth() throw (::com::sun::star::uno::RuntimeException) 115 { 116 ::comphelper::ComponentGuard aGuard( *this, rBHelper ); 117 return m_nColumnWidth; 118 } 119 120 //------------------------------------------------------------------------------------------------------------------ 121 void SAL_CALL GridColumn::setColumnWidth(::sal_Int32 value) throw (::com::sun::star::uno::RuntimeException) 122 { 123 impl_set( m_nColumnWidth, value, "ColumnWidth" ); 124 } 125 126 //------------------------------------------------------------------------------------------------------------------ 127 ::sal_Int32 SAL_CALL GridColumn::getMaxWidth() throw (::com::sun::star::uno::RuntimeException) 128 { 129 ::comphelper::ComponentGuard aGuard( *this, rBHelper ); 130 return m_nMaxWidth; 131 } 132 133 //------------------------------------------------------------------------------------------------------------------ 134 void SAL_CALL GridColumn::setMaxWidth(::sal_Int32 value) throw (::com::sun::star::uno::RuntimeException) 135 { 136 impl_set( m_nMaxWidth, value, "MaxWidth" ); 137 } 138 139 //------------------------------------------------------------------------------------------------------------------ 140 ::sal_Int32 SAL_CALL GridColumn::getMinWidth() throw (::com::sun::star::uno::RuntimeException) 141 { 142 ::comphelper::ComponentGuard aGuard( *this, rBHelper ); 143 return m_nMinWidth; 144 } 145 146 //------------------------------------------------------------------------------------------------------------------ 147 void SAL_CALL GridColumn::setMinWidth(::sal_Int32 value) throw (::com::sun::star::uno::RuntimeException) 148 { 149 impl_set( m_nMinWidth, value, "MinWidth" ); 150 } 151 152 //------------------------------------------------------------------------------------------------------------------ 153 ::rtl::OUString SAL_CALL GridColumn::getTitle() throw (::com::sun::star::uno::RuntimeException) 154 { 155 ::comphelper::ComponentGuard aGuard( *this, rBHelper ); 156 return m_sTitle; 157 } 158 159 //------------------------------------------------------------------------------------------------------------------ 160 void SAL_CALL GridColumn::setTitle(const ::rtl::OUString & value) throw (::com::sun::star::uno::RuntimeException) 161 { 162 impl_set( m_sTitle, value, "Title" ); 163 } 164 165 //------------------------------------------------------------------------------------------------------------------ 166 ::rtl::OUString SAL_CALL GridColumn::getHelpText() throw (RuntimeException) 167 { 168 ::comphelper::ComponentGuard aGuard( *this, rBHelper ); 169 return m_sHelpText; 170 } 171 172 //------------------------------------------------------------------------------------------------------------------ 173 void SAL_CALL GridColumn::setHelpText( const ::rtl::OUString & value ) throw (RuntimeException) 174 { 175 impl_set( m_sHelpText, value, "HelpText" ); 176 } 177 178 //------------------------------------------------------------------------------------------------------------------ 179 sal_Bool SAL_CALL GridColumn::getResizeable() throw (::com::sun::star::uno::RuntimeException) 180 { 181 ::comphelper::ComponentGuard aGuard( *this, rBHelper ); 182 return m_bResizeable; 183 } 184 185 //------------------------------------------------------------------------------------------------------------------ 186 void SAL_CALL GridColumn::setResizeable(sal_Bool value) throw (::com::sun::star::uno::RuntimeException) 187 { 188 impl_set( m_bResizeable, value, "Resizeable" ); 189 } 190 191 //------------------------------------------------------------------------------------------------------------------ 192 ::sal_Int32 SAL_CALL GridColumn::getFlexibility() throw (RuntimeException) 193 { 194 ::comphelper::ComponentGuard aGuard( *this, rBHelper ); 195 return m_nFlexibility; 196 } 197 198 //------------------------------------------------------------------------------------------------------------------ 199 void SAL_CALL GridColumn::setFlexibility( ::sal_Int32 i_value ) throw (IllegalArgumentException, RuntimeException) 200 { 201 if ( i_value < 0 ) 202 throw IllegalArgumentException( ::rtl::OUString(), *this, 1 ); 203 impl_set( m_nFlexibility, i_value, "Flexibility" ); 204 } 205 206 //------------------------------------------------------------------------------------------------------------------ 207 HorizontalAlignment SAL_CALL GridColumn::getHorizontalAlign() throw (::com::sun::star::uno::RuntimeException) 208 { 209 ::comphelper::ComponentGuard aGuard( *this, rBHelper ); 210 return m_eHorizontalAlign; 211 } 212 213 //------------------------------------------------------------------------------------------------------------------ 214 void SAL_CALL GridColumn::setHorizontalAlign(HorizontalAlignment align) throw (::com::sun::star::uno::RuntimeException) 215 { 216 impl_set( m_eHorizontalAlign, align, "HorizontalAlign" ); 217 } 218 219 //------------------------------------------------------------------------------------------------------------------ 220 void SAL_CALL GridColumn::addGridColumnListener( const Reference< XGridColumnListener >& xListener ) throw (RuntimeException) 221 { 222 rBHelper.addListener( XGridColumnListener::static_type(), xListener ); 223 } 224 225 //------------------------------------------------------------------------------------------------------------------ 226 void SAL_CALL GridColumn::removeGridColumnListener( const Reference< XGridColumnListener >& xListener ) throw (RuntimeException) 227 { 228 rBHelper.removeListener( XGridColumnListener::static_type(), xListener ); 229 } 230 231 //------------------------------------------------------------------------------------------------------------------ 232 void SAL_CALL GridColumn::disposing() 233 { 234 ::osl::MutexGuard aGuard( m_aMutex ); 235 m_aIdentifier.clear(); 236 m_sTitle = m_sHelpText = ::rtl::OUString(); 237 } 238 239 //------------------------------------------------------------------------------------------------------------------ 240 ::sal_Int32 SAL_CALL GridColumn::getIndex() throw (RuntimeException) 241 { 242 ::comphelper::ComponentGuard aGuard( *this, rBHelper ); 243 return m_nIndex; 244 } 245 246 //------------------------------------------------------------------------------------------------------------------ 247 void GridColumn::setIndex( sal_Int32 const i_index ) 248 { 249 ::comphelper::ComponentGuard aGuard( *this, rBHelper ); 250 m_nIndex = i_index; 251 } 252 253 //------------------------------------------------------------------------------------------------------------------ 254 ::sal_Int32 SAL_CALL GridColumn::getDataColumnIndex() throw(RuntimeException) 255 { 256 ::comphelper::ComponentGuard aGuard( *this, rBHelper ); 257 return m_nDataColumnIndex; 258 } 259 260 //------------------------------------------------------------------------------------------------------------------ 261 void SAL_CALL GridColumn::setDataColumnIndex( ::sal_Int32 i_dataColumnIndex ) throw(RuntimeException) 262 { 263 impl_set( m_nDataColumnIndex, i_dataColumnIndex, "DataColumnIndex" ); 264 } 265 266 //------------------------------------------------------------------------------------------------------------------ 267 ::rtl::OUString SAL_CALL GridColumn::getImplementationName( ) throw (RuntimeException) 268 { 269 return ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "org.openoffice.comp.toolkit.GridColumn" ) ); 270 } 271 272 //------------------------------------------------------------------------------------------------------------------ 273 sal_Bool SAL_CALL GridColumn::supportsService( const ::rtl::OUString& i_serviceName ) throw (RuntimeException) 274 { 275 const Sequence< ::rtl::OUString > aServiceNames( getSupportedServiceNames() ); 276 for ( sal_Int32 i=0; i<aServiceNames.getLength(); ++i ) 277 if ( aServiceNames[i] == i_serviceName ) 278 return sal_True; 279 return sal_False; 280 } 281 282 //------------------------------------------------------------------------------------------------------------------ 283 ::com::sun::star::uno::Sequence< ::rtl::OUString > SAL_CALL GridColumn::getSupportedServiceNames( ) throw (RuntimeException) 284 { 285 const ::rtl::OUString aServiceName( ::rtl::OUString::createFromAscii( szServiceName_GridColumn ) ); 286 const Sequence< ::rtl::OUString > aSeq( &aServiceName, 1 ); 287 return aSeq; 288 } 289 290 //------------------------------------------------------------------------------------------------------------------ 291 Reference< XCloneable > SAL_CALL GridColumn::createClone( ) throw (RuntimeException) 292 { 293 return new GridColumn( *this ); 294 } 295 296 //------------------------------------------------------------------------------------------------------------------ 297 sal_Int64 SAL_CALL GridColumn::getSomething( const Sequence< sal_Int8 >& i_identifier ) throw(RuntimeException) 298 { 299 if ( ( i_identifier.getLength() == 16 ) && ( i_identifier == getUnoTunnelId() ) ) 300 return ::sal::static_int_cast< sal_Int64 >( reinterpret_cast< sal_IntPtr >( this ) ); 301 return 0; 302 } 303 304 //------------------------------------------------------------------------------------------------------------------ 305 Sequence< sal_Int8 > GridColumn::getUnoTunnelId() throw() 306 { 307 static ::cppu::OImplementationId const aId; 308 return aId.getImplementationId(); 309 } 310 311 //------------------------------------------------------------------------------------------------------------------ 312 GridColumn* GridColumn::getImplementation( const Reference< XInterface >& i_component ) 313 { 314 Reference< XUnoTunnel > const xTunnel( i_component, UNO_QUERY ); 315 if ( xTunnel.is() ) 316 return reinterpret_cast< GridColumn* >( ::sal::static_int_cast< sal_IntPtr >( xTunnel->getSomething( getUnoTunnelId() ) ) ); 317 return NULL; 318 } 319 } 320 321 ::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 >& ) 322 { 323 return *( new ::toolkit::GridColumn ); 324 } 325 326