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 // MARKER(update_precomp.py): autogen include statement, do not remove 25 #include "precompiled_forms.hxx" 26 27 #include "Columns.hxx" 28 #include "findpos.hxx" 29 #include "Grid.hxx" 30 #include "property.hrc" 31 #include "property.hxx" 32 #include "services.hxx" 33 34 /** === begin UNO includes === **/ 35 #include <com/sun/star/form/FormComponentType.hpp> 36 #include <com/sun/star/form/XForm.hpp> 37 #include <com/sun/star/form/XLoadable.hpp> 38 #include <com/sun/star/text/WritingMode2.hpp> 39 /** === end UNO includes === **/ 40 41 #include <comphelper/basicio.hxx> 42 #include <comphelper/container.hxx> 43 #include <comphelper/extract.hxx> 44 #include <cppuhelper/queryinterface.hxx> 45 #include <toolkit/helper/vclunohelper.hxx> 46 #include <vcl/svapp.hxx> 47 48 using namespace ::com::sun::star::uno; 49 50 //......................................................................... 51 namespace frm 52 { 53 //......................................................................... 54 using namespace ::com::sun::star; 55 using namespace ::com::sun::star::uno; 56 using namespace ::com::sun::star::sdb; 57 using namespace ::com::sun::star::sdbc; 58 using namespace ::com::sun::star::sdbcx; 59 using namespace ::com::sun::star::beans; 60 using namespace ::com::sun::star::container; 61 using namespace ::com::sun::star::form; 62 using namespace ::com::sun::star::awt; 63 using namespace ::com::sun::star::io; 64 using namespace ::com::sun::star::lang; 65 using namespace ::com::sun::star::util; 66 using namespace ::com::sun::star::view; 67 68 namespace WritingMode2 = ::com::sun::star::text::WritingMode2; 69 70 const sal_uInt16 ROWHEIGHT = 0x0001; 71 const sal_uInt16 FONTTYPE = 0x0002; 72 const sal_uInt16 FONTSIZE = 0x0004; 73 const sal_uInt16 FONTATTRIBS = 0x0008; 74 const sal_uInt16 TABSTOP = 0x0010; 75 const sal_uInt16 TEXTCOLOR = 0x0020; 76 const sal_uInt16 FONTDESCRIPTOR = 0x0040; 77 const sal_uInt16 RECORDMARKER = 0x0080; 78 const sal_uInt16 BACKGROUNDCOLOR = 0x0100; 79 80 //------------------------------------------------------------------ 81 InterfaceRef SAL_CALL OGridControlModel_CreateInstance(const Reference<XMultiServiceFactory>& _rxFactory) 82 { 83 return *(new OGridControlModel(_rxFactory)); 84 } 85 86 DBG_NAME(OGridControlModel); 87 //------------------------------------------------------------------ 88 OGridControlModel::OGridControlModel(const Reference<XMultiServiceFactory>& _rxFactory) 89 :OControlModel(_rxFactory, ::rtl::OUString()) 90 ,OInterfaceContainer(_rxFactory, m_aMutex, ::getCppuType(static_cast<Reference<XPropertySet>*>(NULL))) 91 ,OErrorBroadcaster( OComponentHelper::rBHelper ) 92 ,FontControlModel( false ) 93 ,m_aSelectListeners(m_aMutex) 94 ,m_aResetListeners(m_aMutex) 95 ,m_aRowSetChangeListeners(m_aMutex) 96 ,m_aDefaultControl( FRM_SUN_CONTROL_GRIDCONTROL ) 97 ,m_nBorder(1) 98 ,m_nWritingMode( WritingMode2::CONTEXT ) 99 ,m_nContextWritingMode( WritingMode2::CONTEXT ) 100 ,m_bEnableVisible(sal_True) 101 ,m_bEnable(sal_True) 102 ,m_bNavigation(sal_True) 103 ,m_bRecordMarker(sal_True) 104 ,m_bPrintable(sal_True) 105 ,m_bAlwaysShowCursor(sal_False) 106 ,m_bDisplaySynchron(sal_True) 107 { 108 DBG_CTOR(OGridControlModel,NULL); 109 110 m_nClassId = FormComponentType::GRIDCONTROL; 111 } 112 113 //------------------------------------------------------------------ 114 OGridControlModel::OGridControlModel( const OGridControlModel* _pOriginal, const Reference< XMultiServiceFactory >& _rxFactory ) 115 :OControlModel( _pOriginal, _rxFactory ) 116 ,OInterfaceContainer( _rxFactory, m_aMutex, ::getCppuType( static_cast<Reference<XPropertySet>*>( NULL ) ) ) 117 ,OErrorBroadcaster( OComponentHelper::rBHelper ) 118 ,FontControlModel( _pOriginal ) 119 ,m_aSelectListeners( m_aMutex ) 120 ,m_aResetListeners( m_aMutex ) 121 ,m_aRowSetChangeListeners( m_aMutex ) 122 { 123 DBG_CTOR(OGridControlModel,NULL); 124 125 m_aDefaultControl = _pOriginal->m_aDefaultControl; 126 m_bEnable = _pOriginal->m_bEnable; 127 m_bEnableVisible = _pOriginal->m_bEnableVisible; 128 m_bNavigation = _pOriginal->m_bNavigation; 129 m_nBorder = _pOriginal->m_nBorder; 130 m_nWritingMode = _pOriginal->m_nWritingMode; 131 m_nContextWritingMode = _pOriginal->m_nContextWritingMode; 132 m_bRecordMarker = _pOriginal->m_bRecordMarker; 133 m_bPrintable = _pOriginal->m_bPrintable; 134 m_bAlwaysShowCursor = _pOriginal->m_bAlwaysShowCursor; 135 m_bDisplaySynchron = _pOriginal->m_bDisplaySynchron; 136 137 // clone the columns 138 cloneColumns( _pOriginal ); 139 140 // TODO: clone the events? 141 } 142 143 //------------------------------------------------------------------ 144 OGridControlModel::~OGridControlModel() 145 { 146 if (!OComponentHelper::rBHelper.bDisposed) 147 { 148 acquire(); 149 dispose(); 150 } 151 152 DBG_DTOR(OGridControlModel,NULL); 153 } 154 155 // XCloneable 156 //------------------------------------------------------------------------------ 157 Reference< XCloneable > SAL_CALL OGridControlModel::createClone( ) throw (RuntimeException) 158 { 159 OGridControlModel* pClone = new OGridControlModel( this, getContext().getLegacyServiceFactory() ); 160 osl_incrementInterlockedCount( &pClone->m_refCount ); 161 pClone->OControlModel::clonedFrom( this ); 162 // do not call OInterfaceContainer::clonedFrom, it would clone the elements aka columns, which is 163 // already done in the ctor 164 //pClone->OInterfaceContainer::clonedFrom( *this ); 165 osl_decrementInterlockedCount( &pClone->m_refCount ); 166 return static_cast< XCloneable* >( static_cast< OControlModel* >( pClone ) ); 167 } 168 169 //------------------------------------------------------------------------------ 170 void OGridControlModel::cloneColumns( const OGridControlModel* _pOriginalContainer ) 171 { 172 try 173 { 174 Reference< XCloneable > xColCloneable; 175 176 const OInterfaceArray::const_iterator pColumnStart = _pOriginalContainer->m_aItems.begin(); 177 const OInterfaceArray::const_iterator pColumnEnd = _pOriginalContainer->m_aItems.end(); 178 for ( OInterfaceArray::const_iterator pColumn = pColumnStart; pColumn != pColumnEnd; ++pColumn ) 179 { 180 // ask the col for a factory for the clone 181 xColCloneable = xColCloneable.query( *pColumn ); 182 DBG_ASSERT( xColCloneable.is(), "OGridControlModel::cloneColumns: column is not cloneable!" ); 183 184 if ( xColCloneable.is() ) 185 { 186 // create a clone of the column 187 Reference< XCloneable > xColClone( xColCloneable->createClone() ); 188 DBG_ASSERT( xColClone.is(), "OGridControlModel::cloneColumns: invalid column clone!" ); 189 190 if ( xColClone.is() ) 191 { 192 // insert this clone into our own container 193 insertByIndex( pColumn - pColumnStart, xColClone->queryInterface( m_aElementType ) ); 194 } 195 196 } 197 } 198 } 199 catch( const Exception& ) 200 { 201 DBG_ERROR( "OGridControlModel::cloneColumns: caught an exception while cloning the columns!" ); 202 } 203 } 204 205 // XServiceInfo 206 //------------------------------------------------------------------------------ 207 StringSequence OGridControlModel::getSupportedServiceNames() throw(RuntimeException) 208 { 209 StringSequence aSupported = OControlModel::getSupportedServiceNames(); 210 aSupported.realloc(aSupported.getLength() + 2); 211 212 ::rtl::OUString*pArray = aSupported.getArray(); 213 pArray[aSupported.getLength()-2] = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("com.sun.star.awt.UnoControlModel")); 214 pArray[aSupported.getLength()-1] = FRM_SUN_COMPONENT_GRIDCONTROL; 215 return aSupported; 216 } 217 218 //------------------------------------------------------------------------------ 219 Any SAL_CALL OGridControlModel::queryAggregation( const Type& _rType ) throw (RuntimeException) 220 { 221 Any aReturn = OGridControlModel_BASE::queryInterface(_rType); 222 223 if ( !aReturn.hasValue() ) 224 { 225 aReturn = OControlModel::queryAggregation( _rType ); 226 if ( !aReturn.hasValue() ) 227 { 228 aReturn = OInterfaceContainer::queryInterface( _rType ); 229 if ( !aReturn.hasValue() ) 230 aReturn = OErrorBroadcaster::queryInterface( _rType ); 231 } 232 } 233 return aReturn; 234 } 235 236 // XSQLErrorListener 237 //------------------------------------------------------------------------------ 238 void SAL_CALL OGridControlModel::errorOccured( const SQLErrorEvent& _rEvent ) throw (RuntimeException) 239 { 240 // forward the errors which happened to my columns to my own listeners 241 onError( _rEvent ); 242 } 243 244 // XRowSetSupplier 245 //------------------------------------------------------------------------------ 246 Reference< XRowSet > SAL_CALL OGridControlModel::getRowSet( ) throw (RuntimeException) 247 { 248 return Reference< XRowSet >( getParent(), UNO_QUERY ); 249 } 250 251 //------------------------------------------------------------------------------ 252 void SAL_CALL OGridControlModel::setRowSet( const Reference< XRowSet >& /*_rxDataSource*/ ) throw (RuntimeException) 253 { 254 OSL_ENSURE( false, "OGridControlModel::setRowSet: not supported!" ); 255 } 256 257 //-------------------------------------------------------------------- 258 void SAL_CALL OGridControlModel::addRowSetChangeListener( const Reference< XRowSetChangeListener >& i_Listener ) throw (RuntimeException) 259 { 260 if ( i_Listener.is() ) 261 m_aRowSetChangeListeners.addInterface( i_Listener ); 262 } 263 264 //-------------------------------------------------------------------- 265 void SAL_CALL OGridControlModel::removeRowSetChangeListener( const Reference< XRowSetChangeListener >& i_Listener ) throw (RuntimeException) 266 { 267 m_aRowSetChangeListeners.removeInterface( i_Listener ); 268 } 269 270 // XChild 271 //------------------------------------------------------------------------------ 272 void SAL_CALL OGridControlModel::setParent( const InterfaceRef& i_Parent ) throw(NoSupportException, RuntimeException) 273 { 274 ::osl::ClearableMutexGuard aGuard( m_aMutex ); 275 if ( i_Parent == getParent() ) 276 return; 277 278 OControlModel::setParent( i_Parent ); 279 280 EventObject aEvent( *this ); 281 aGuard.clear(); 282 m_aRowSetChangeListeners.notifyEach( &XRowSetChangeListener::onRowSetChanged, aEvent ); 283 } 284 285 //------------------------------------------------------------------------------ 286 Sequence< Type > SAL_CALL OGridControlModel::getTypes( ) throw(RuntimeException) 287 { 288 return concatSequences( 289 concatSequences( 290 OControlModel::getTypes(), 291 OInterfaceContainer::getTypes(), 292 OErrorBroadcaster::getTypes() 293 ), 294 OGridControlModel_BASE::getTypes() 295 ); 296 } 297 298 // OComponentHelper 299 //------------------------------------------------------------------------------ 300 void OGridControlModel::disposing() 301 { 302 OControlModel::disposing(); 303 OErrorBroadcaster::disposing(); 304 OInterfaceContainer::disposing(); 305 306 setParent(NULL); 307 308 EventObject aEvt(static_cast<XWeak*>(this)); 309 m_aSelectListeners.disposeAndClear(aEvt); 310 m_aResetListeners.disposeAndClear(aEvt); 311 m_aRowSetChangeListeners.disposeAndClear(aEvt); 312 } 313 314 // XEventListener 315 //------------------------------------------------------------------------------ 316 void OGridControlModel::disposing(const EventObject& _rEvent) throw( RuntimeException ) 317 { 318 OControlModel::disposing( _rEvent ); 319 OInterfaceContainer::disposing( _rEvent ); 320 } 321 322 // XSelectionSupplier 323 //----------------------------------------------------------------------------- 324 sal_Bool SAL_CALL OGridControlModel::select(const Any& rElement) throw(IllegalArgumentException, RuntimeException) 325 { 326 ::osl::ClearableMutexGuard aGuard( m_aMutex ); 327 328 Reference<XPropertySet> xSel; 329 if (rElement.hasValue() && !::cppu::extractInterface(xSel, rElement)) 330 { 331 throw IllegalArgumentException(); 332 } 333 InterfaceRef xMe = static_cast<XWeak*>(this); 334 335 if (xSel.is()) 336 { 337 Reference<XChild> xAsChild(xSel, UNO_QUERY); 338 if (!xAsChild.is() || (xAsChild->getParent() != xMe)) 339 { 340 throw IllegalArgumentException(); 341 } 342 } 343 344 if ( xSel != m_xSelection ) 345 { 346 m_xSelection = xSel; 347 aGuard.clear(); 348 m_aSelectListeners.notifyEach( &XSelectionChangeListener::selectionChanged, EventObject( *this ) ); 349 return sal_True; 350 } 351 return sal_False; 352 } 353 354 //----------------------------------------------------------------------------- 355 Any SAL_CALL OGridControlModel::getSelection() throw(RuntimeException) 356 { 357 return makeAny(m_xSelection); 358 } 359 360 //----------------------------------------------------------------------------- 361 void OGridControlModel::addSelectionChangeListener(const Reference< XSelectionChangeListener >& _rxListener) throw( RuntimeException ) 362 { 363 m_aSelectListeners.addInterface(_rxListener); 364 } 365 366 //----------------------------------------------------------------------------- 367 void OGridControlModel::removeSelectionChangeListener(const Reference< XSelectionChangeListener >& _rxListener) throw( RuntimeException ) 368 { 369 m_aSelectListeners.removeInterface(_rxListener); 370 } 371 372 // XGridColumnFactory 373 //------------------------------------------------------------------------------ 374 Reference<XPropertySet> SAL_CALL OGridControlModel::createColumn(const ::rtl::OUString& ColumnType) throw ( :: com::sun::star::lang::IllegalArgumentException, ::com::sun::star::uno::RuntimeException) 375 { 376 const Sequence< ::rtl::OUString >& rColumnTypes = frm::getColumnTypes(); 377 return createColumn( detail::findPos( ColumnType, rColumnTypes ) ); 378 } 379 380 //------------------------------------------------------------------------------ 381 Reference<XPropertySet> OGridControlModel::createColumn(sal_Int32 nTypeId) const 382 { 383 Reference<XPropertySet> xReturn; 384 switch (nTypeId) 385 { 386 case TYPE_CHECKBOX: xReturn = new CheckBoxColumn( getContext() ); break; 387 case TYPE_COMBOBOX: xReturn = new ComboBoxColumn( getContext() ); break; 388 case TYPE_CURRENCYFIELD: xReturn = new CurrencyFieldColumn( getContext() ); break; 389 case TYPE_DATEFIELD: xReturn = new DateFieldColumn( getContext() ); break; 390 case TYPE_LISTBOX: xReturn = new ListBoxColumn( getContext() ); break; 391 case TYPE_NUMERICFIELD: xReturn = new NumericFieldColumn( getContext() ); break; 392 case TYPE_PATTERNFIELD: xReturn = new PatternFieldColumn( getContext() ); break; 393 case TYPE_TEXTFIELD: xReturn = new TextFieldColumn( getContext() ); break; 394 case TYPE_TIMEFIELD: xReturn = new TimeFieldColumn( getContext() ); break; 395 case TYPE_FORMATTEDFIELD: xReturn = new FormattedFieldColumn( getContext() ); break; 396 default: 397 DBG_ERROR("OGridControlModel::createColumn: Unknown Column"); 398 break; 399 } 400 return xReturn; 401 } 402 403 //------------------------------------------------------------------------------ 404 StringSequence SAL_CALL OGridControlModel::getColumnTypes() throw ( ::com::sun::star::uno::RuntimeException) 405 { 406 return frm::getColumnTypes(); 407 } 408 409 // XReset 410 //----------------------------------------------------------------------------- 411 void SAL_CALL OGridControlModel::reset() throw ( ::com::sun::star::uno::RuntimeException) 412 { 413 ::cppu::OInterfaceIteratorHelper aIter(m_aResetListeners); 414 EventObject aEvt(static_cast<XWeak*>(this)); 415 sal_Bool bContinue = sal_True; 416 while (aIter.hasMoreElements() && bContinue) 417 bContinue =((XResetListener*)aIter.next())->approveReset(aEvt); 418 419 if (bContinue) 420 { 421 _reset(); 422 m_aResetListeners.notifyEach( &XResetListener::resetted, aEvt ); 423 } 424 } 425 426 //----------------------------------------------------------------------------- 427 void SAL_CALL OGridControlModel::addResetListener(const Reference<XResetListener>& _rxListener) throw ( ::com::sun::star::uno::RuntimeException) 428 { 429 m_aResetListeners.addInterface(_rxListener); 430 } 431 432 //----------------------------------------------------------------------------- 433 void SAL_CALL OGridControlModel::removeResetListener(const Reference<XResetListener>& _rxListener) throw ( ::com::sun::star::uno::RuntimeException) 434 { 435 m_aResetListeners.removeInterface(_rxListener); 436 } 437 438 //----------------------------------------------------------------------------- 439 void OGridControlModel::_reset() 440 { 441 Reference<XReset> xReset; 442 sal_Int32 nCount = getCount(); 443 for (sal_Int32 nIndex=0; nIndex < nCount; nIndex++) 444 { 445 getByIndex( nIndex ) >>= xReset; 446 if (xReset.is()) 447 xReset->reset(); 448 } 449 } 450 451 // XPropertySet 452 //------------------------------------------------------------------------------ 453 void OGridControlModel::describeFixedProperties( Sequence< Property >& _rProps ) const 454 { 455 BEGIN_DESCRIBE_BASE_PROPERTIES( 37 ) 456 DECL_PROP1(NAME, ::rtl::OUString, BOUND); 457 DECL_PROP2(CLASSID, sal_Int16, READONLY, TRANSIENT); 458 DECL_PROP1(TAG, ::rtl::OUString, BOUND); 459 DECL_PROP1(TABINDEX, sal_Int16, BOUND); 460 DECL_PROP3(TABSTOP, sal_Bool, BOUND, MAYBEDEFAULT, MAYBEVOID); 461 DECL_PROP2(HASNAVIGATION, sal_Bool, BOUND, MAYBEDEFAULT); 462 DECL_PROP1(ENABLED, sal_Bool, BOUND); 463 DECL_PROP2(ENABLEVISIBLE, sal_Bool, BOUND, MAYBEDEFAULT); 464 DECL_PROP1(BORDER, sal_Int16, BOUND); 465 DECL_PROP2(BORDERCOLOR, sal_Int16, BOUND, MAYBEVOID); 466 DECL_PROP1(DEFAULTCONTROL, ::rtl::OUString, BOUND); 467 DECL_PROP3(TEXTCOLOR, sal_Int32, BOUND, MAYBEDEFAULT, MAYBEVOID); 468 DECL_PROP3(BACKGROUNDCOLOR, sal_Int32, BOUND, MAYBEDEFAULT, MAYBEVOID); 469 DECL_PROP2(FONT, FontDescriptor, BOUND, MAYBEDEFAULT); 470 DECL_PROP3(ROWHEIGHT, sal_Int32, BOUND, MAYBEDEFAULT, MAYBEVOID); 471 DECL_PROP1(HELPTEXT, ::rtl::OUString, BOUND); 472 DECL_PROP1(FONT_NAME, ::rtl::OUString, MAYBEDEFAULT); 473 DECL_PROP1(FONT_STYLENAME, ::rtl::OUString, MAYBEDEFAULT); 474 DECL_PROP1(FONT_FAMILY, sal_Int16, MAYBEDEFAULT); 475 DECL_PROP1(FONT_CHARSET, sal_Int16, MAYBEDEFAULT); 476 DECL_PROP1(FONT_HEIGHT, float, MAYBEDEFAULT); 477 DECL_PROP1(FONT_WEIGHT, float, MAYBEDEFAULT); 478 DECL_PROP1(FONT_SLANT, sal_Int16, MAYBEDEFAULT); 479 DECL_PROP1(FONT_UNDERLINE, sal_Int16, MAYBEDEFAULT); 480 DECL_BOOL_PROP1(FONT_WORDLINEMODE, MAYBEDEFAULT); 481 DECL_PROP3(TEXTLINECOLOR, sal_Int32, BOUND, MAYBEDEFAULT, MAYBEVOID); 482 DECL_PROP2(FONTEMPHASISMARK, sal_Int16, BOUND, MAYBEDEFAULT); 483 DECL_PROP2(FONTRELIEF, sal_Int16, BOUND, MAYBEDEFAULT); 484 DECL_PROP1(FONT_STRIKEOUT, sal_Int16, MAYBEDEFAULT); 485 DECL_PROP2(RECORDMARKER, sal_Bool, BOUND, MAYBEDEFAULT ); 486 DECL_PROP2(PRINTABLE, sal_Bool, BOUND, MAYBEDEFAULT ); 487 DECL_PROP4(CURSORCOLOR, sal_Int32, BOUND, MAYBEDEFAULT, MAYBEVOID , TRANSIENT); 488 DECL_PROP3(ALWAYSSHOWCURSOR, sal_Bool, BOUND, MAYBEDEFAULT, TRANSIENT); 489 DECL_PROP3(DISPLAYSYNCHRON, sal_Bool, BOUND, MAYBEDEFAULT, TRANSIENT); 490 DECL_PROP2(HELPURL, ::rtl::OUString, BOUND, MAYBEDEFAULT); 491 DECL_PROP2(WRITING_MODE, sal_Int16, BOUND, MAYBEDEFAULT); 492 DECL_PROP3(CONTEXT_WRITING_MODE,sal_Int16, BOUND, MAYBEDEFAULT, TRANSIENT); 493 END_DESCRIBE_PROPERTIES(); 494 } 495 496 //------------------------------------------------------------------------------ 497 void OGridControlModel::getFastPropertyValue(Any& rValue, sal_Int32 nHandle ) const 498 { 499 switch (nHandle) 500 { 501 case PROPERTY_ID_CONTEXT_WRITING_MODE: 502 rValue <<= m_nContextWritingMode; 503 break; 504 case PROPERTY_ID_WRITING_MODE: 505 rValue <<= m_nWritingMode; 506 break; 507 case PROPERTY_ID_HELPTEXT: 508 rValue <<= m_sHelpText; 509 break; 510 case PROPERTY_ID_HELPURL: 511 rValue <<= m_sHelpURL; 512 break; 513 case PROPERTY_ID_DISPLAYSYNCHRON: 514 setBOOL(rValue, m_bDisplaySynchron); 515 break; 516 case PROPERTY_ID_ALWAYSSHOWCURSOR: 517 setBOOL(rValue, m_bAlwaysShowCursor); 518 break; 519 case PROPERTY_ID_CURSORCOLOR: 520 rValue = m_aCursorColor; 521 break; 522 case PROPERTY_ID_PRINTABLE: 523 setBOOL(rValue, m_bPrintable); 524 break; 525 case PROPERTY_ID_TABSTOP: 526 rValue = m_aTabStop; 527 break; 528 case PROPERTY_ID_HASNAVIGATION: 529 setBOOL(rValue, m_bNavigation); 530 break; 531 case PROPERTY_ID_RECORDMARKER: 532 setBOOL(rValue, m_bRecordMarker); 533 break; 534 case PROPERTY_ID_ENABLED: 535 setBOOL(rValue, m_bEnable); 536 break; 537 case PROPERTY_ID_ENABLEVISIBLE: 538 setBOOL(rValue, m_bEnableVisible); 539 break; 540 case PROPERTY_ID_BORDER: 541 rValue <<= (sal_Int16)m_nBorder; 542 break; 543 case PROPERTY_ID_BORDERCOLOR: 544 rValue <<= m_aBorderColor; 545 break; 546 case PROPERTY_ID_DEFAULTCONTROL: 547 rValue <<= m_aDefaultControl; 548 break; 549 case PROPERTY_ID_BACKGROUNDCOLOR: 550 rValue = m_aBackgroundColor; 551 break; 552 case PROPERTY_ID_ROWHEIGHT: 553 rValue = m_aRowHeight; 554 break; 555 556 default: 557 if ( isFontRelatedProperty( nHandle ) ) 558 FontControlModel::getFastPropertyValue( rValue, nHandle ); 559 else 560 OControlModel::getFastPropertyValue( rValue, nHandle ); 561 } 562 } 563 564 //------------------------------------------------------------------------------ 565 sal_Bool OGridControlModel::convertFastPropertyValue( Any& rConvertedValue, Any& rOldValue, 566 sal_Int32 nHandle, const Any& rValue )throw( IllegalArgumentException ) 567 { 568 sal_Bool bModified(sal_False); 569 switch (nHandle) 570 { 571 case PROPERTY_ID_CONTEXT_WRITING_MODE: 572 bModified = tryPropertyValue( rConvertedValue, rOldValue, rValue, m_nContextWritingMode ); 573 break; 574 case PROPERTY_ID_WRITING_MODE: 575 bModified = tryPropertyValue( rConvertedValue, rOldValue, rValue, m_nWritingMode ); 576 break; 577 case PROPERTY_ID_HELPTEXT: 578 bModified = tryPropertyValue(rConvertedValue, rOldValue, rValue, m_sHelpText); 579 break; 580 case PROPERTY_ID_HELPURL: 581 bModified = tryPropertyValue(rConvertedValue, rOldValue, rValue, m_sHelpURL); 582 break; 583 case PROPERTY_ID_DISPLAYSYNCHRON: 584 bModified = tryPropertyValue(rConvertedValue, rOldValue, rValue, m_bDisplaySynchron); 585 break; 586 case PROPERTY_ID_ALWAYSSHOWCURSOR: 587 bModified = tryPropertyValue(rConvertedValue, rOldValue, rValue, m_bAlwaysShowCursor); 588 break; 589 case PROPERTY_ID_CURSORCOLOR: 590 if (!rValue.hasValue() || !m_aCursorColor.hasValue()) 591 { 592 if (rValue.hasValue() && (TypeClass_LONG != rValue.getValueType().getTypeClass())) 593 { 594 throw IllegalArgumentException(); 595 } 596 rOldValue = m_aCursorColor; 597 rConvertedValue = rValue; 598 bModified = (rOldValue.getValue() != rConvertedValue.getValue()); 599 } 600 else 601 bModified = tryPropertyValue(rConvertedValue, rOldValue, rValue, getINT32(m_aCursorColor)); 602 break; 603 case PROPERTY_ID_PRINTABLE: 604 bModified = tryPropertyValue(rConvertedValue, rOldValue, rValue, m_bPrintable); 605 break; 606 case PROPERTY_ID_TABSTOP: 607 bModified = tryPropertyValue(rConvertedValue, rOldValue, rValue, m_aTabStop, ::getBooleanCppuType()); 608 break; 609 case PROPERTY_ID_HASNAVIGATION: 610 bModified = tryPropertyValue(rConvertedValue, rOldValue, rValue, m_bNavigation); 611 break; 612 case PROPERTY_ID_RECORDMARKER: 613 bModified = tryPropertyValue(rConvertedValue, rOldValue, rValue, m_bRecordMarker); 614 break; 615 case PROPERTY_ID_ENABLED: 616 bModified = tryPropertyValue(rConvertedValue, rOldValue, rValue, m_bEnable); 617 break; 618 case PROPERTY_ID_ENABLEVISIBLE: 619 bModified = tryPropertyValue(rConvertedValue, rOldValue, rValue, m_bEnableVisible); 620 break; 621 case PROPERTY_ID_BORDER: 622 bModified = tryPropertyValue(rConvertedValue, rOldValue, rValue, m_nBorder); 623 break; 624 case PROPERTY_ID_BORDERCOLOR: 625 bModified = tryPropertyValue(rConvertedValue, rOldValue, rValue, m_aBorderColor, ::getCppuType((const sal_Int32*)NULL)); 626 break; 627 case PROPERTY_ID_DEFAULTCONTROL: 628 bModified = tryPropertyValue(rConvertedValue, rOldValue, rValue, m_aDefaultControl); 629 break; 630 case PROPERTY_ID_BACKGROUNDCOLOR: 631 bModified = tryPropertyValue(rConvertedValue, rOldValue, rValue, m_aBackgroundColor, ::getCppuType((const sal_Int32*)NULL)); 632 break; 633 case PROPERTY_ID_ROWHEIGHT: 634 { 635 bModified = tryPropertyValue(rConvertedValue, rOldValue, rValue, m_aRowHeight, ::getCppuType((const sal_Int32*)NULL)); 636 637 sal_Int32 nNewVal( 0 ); 638 if ( ( rConvertedValue >>= nNewVal ) && ( nNewVal <= 0 ) ) 639 { 640 rConvertedValue.clear(); 641 bModified = m_aRowHeight.hasValue(); 642 } 643 } 644 break; 645 default: 646 if ( isFontRelatedProperty( nHandle ) ) 647 bModified = FontControlModel::convertFastPropertyValue( rConvertedValue, rOldValue, nHandle, rValue ); 648 else 649 bModified = OControlModel::convertFastPropertyValue( rConvertedValue, rOldValue, nHandle, rValue); 650 } 651 return bModified; 652 } 653 654 //------------------------------------------------------------------------------ 655 void OGridControlModel::setFastPropertyValue_NoBroadcast( sal_Int32 nHandle, const Any& rValue ) throw ( ::com::sun::star::uno::Exception) 656 { 657 switch (nHandle) 658 { 659 case PROPERTY_ID_CONTEXT_WRITING_MODE: 660 rValue >>= m_nContextWritingMode; 661 break; 662 case PROPERTY_ID_WRITING_MODE: 663 rValue >>= m_nWritingMode; 664 break; 665 case PROPERTY_ID_HELPTEXT: 666 rValue >>= m_sHelpText; 667 break; 668 case PROPERTY_ID_HELPURL: 669 rValue >>= m_sHelpURL; 670 break; 671 case PROPERTY_ID_DISPLAYSYNCHRON: 672 m_bDisplaySynchron = getBOOL(rValue); 673 break; 674 case PROPERTY_ID_ALWAYSSHOWCURSOR: 675 m_bAlwaysShowCursor = getBOOL(rValue); 676 break; 677 case PROPERTY_ID_CURSORCOLOR: 678 m_aCursorColor = rValue; 679 break; 680 case PROPERTY_ID_PRINTABLE: 681 m_bPrintable = getBOOL(rValue); 682 break; 683 case PROPERTY_ID_TABSTOP: 684 m_aTabStop = rValue; 685 break; 686 case PROPERTY_ID_HASNAVIGATION: 687 m_bNavigation = getBOOL(rValue); 688 break; 689 case PROPERTY_ID_ENABLED: 690 m_bEnable = getBOOL(rValue); 691 break; 692 case PROPERTY_ID_ENABLEVISIBLE: 693 m_bEnableVisible = getBOOL(rValue); 694 break; 695 case PROPERTY_ID_RECORDMARKER: 696 m_bRecordMarker = getBOOL(rValue); 697 break; 698 case PROPERTY_ID_BORDER: 699 rValue >>= m_nBorder; 700 break; 701 case PROPERTY_ID_BORDERCOLOR: 702 m_aBorderColor = rValue; 703 break; 704 case PROPERTY_ID_DEFAULTCONTROL: 705 rValue >>= m_aDefaultControl; 706 break; 707 case PROPERTY_ID_BACKGROUNDCOLOR: 708 m_aBackgroundColor = rValue; 709 break; 710 case PROPERTY_ID_ROWHEIGHT: 711 m_aRowHeight = rValue; 712 break; 713 714 default: 715 if ( isFontRelatedProperty( nHandle ) ) 716 { 717 FontDescriptor aOldFont( getFont() ); 718 719 FontControlModel::setFastPropertyValue_NoBroadcast( nHandle, rValue ); 720 721 if ( isFontAggregateProperty( nHandle ) ) 722 firePropertyChange( PROPERTY_ID_FONT, makeAny( getFont() ), makeAny( aOldFont ) ); 723 } 724 else 725 OControlModel::setFastPropertyValue_NoBroadcast( nHandle, rValue ); 726 } 727 728 } 729 730 //XPropertyState 731 732 //------------------------------------------------------------------------------ 733 Any OGridControlModel::getPropertyDefaultByHandle( sal_Int32 nHandle ) const 734 { 735 Any aReturn; 736 switch (nHandle) 737 { 738 case PROPERTY_ID_CONTEXT_WRITING_MODE: 739 case PROPERTY_ID_WRITING_MODE: 740 aReturn <<= WritingMode2::CONTEXT; 741 break; 742 743 case PROPERTY_ID_DEFAULTCONTROL: 744 aReturn <<= ::rtl::OUString( STARDIV_ONE_FORM_CONTROL_GRID ); 745 break; 746 747 case PROPERTY_ID_PRINTABLE: 748 case PROPERTY_ID_HASNAVIGATION: 749 case PROPERTY_ID_RECORDMARKER: 750 case PROPERTY_ID_DISPLAYSYNCHRON: 751 case PROPERTY_ID_ENABLED: 752 case PROPERTY_ID_ENABLEVISIBLE: 753 aReturn = makeBoolAny(sal_True); 754 break; 755 756 case PROPERTY_ID_ALWAYSSHOWCURSOR: 757 aReturn = makeBoolAny(sal_False); 758 break; 759 760 case PROPERTY_ID_HELPURL: 761 case PROPERTY_ID_HELPTEXT: 762 aReturn <<= ::rtl::OUString(); 763 break; 764 765 case PROPERTY_ID_BORDER: 766 aReturn <<= (sal_Int16)1; 767 break; 768 769 case PROPERTY_ID_BORDERCOLOR: 770 case PROPERTY_ID_TABSTOP: 771 case PROPERTY_ID_BACKGROUNDCOLOR: 772 case PROPERTY_ID_ROWHEIGHT: 773 case PROPERTY_ID_CURSORCOLOR: 774 // void 775 break; 776 777 default: 778 if ( isFontRelatedProperty( nHandle ) ) 779 aReturn = FontControlModel::getPropertyDefaultByHandle( nHandle ); 780 else 781 aReturn = OControlModel::getPropertyDefaultByHandle(nHandle); 782 } 783 return aReturn; 784 } 785 786 //------------------------------------------------------------------------------ 787 OGridColumn* OGridControlModel::getColumnImplementation(const InterfaceRef& _rxIFace) const 788 { 789 OGridColumn* pImplementation = NULL; 790 Reference< XUnoTunnel > xUnoTunnel( _rxIFace, UNO_QUERY ); 791 if ( xUnoTunnel.is() ) 792 pImplementation = reinterpret_cast<OGridColumn*>(xUnoTunnel->getSomething(OGridColumn::getUnoTunnelImplementationId())); 793 794 return pImplementation; 795 } 796 797 //------------------------------------------------------------------------------ 798 void OGridControlModel::gotColumn( const Reference< XInterface >& _rxColumn ) 799 { 800 Reference< XSQLErrorBroadcaster > xBroadcaster( _rxColumn, UNO_QUERY ); 801 if ( xBroadcaster.is() ) 802 xBroadcaster->addSQLErrorListener( this ); 803 } 804 805 //------------------------------------------------------------------------------ 806 void OGridControlModel::lostColumn(const Reference< XInterface >& _rxColumn) 807 { 808 if ( m_xSelection == _rxColumn ) 809 { // the currently selected element was replaced 810 m_xSelection.clear(); 811 EventObject aEvt( static_cast< XWeak* >( this ) ); 812 m_aSelectListeners.notifyEach( &XSelectionChangeListener::selectionChanged, aEvt ); 813 } 814 815 Reference< XSQLErrorBroadcaster > xBroadcaster( _rxColumn, UNO_QUERY ); 816 if ( xBroadcaster.is() ) 817 xBroadcaster->removeSQLErrorListener( this ); 818 } 819 820 //------------------------------------------------------------------------------ 821 void OGridControlModel::implRemoved(const InterfaceRef& _rxObject) 822 { 823 OInterfaceContainer::implRemoved(_rxObject); 824 lostColumn(_rxObject); 825 } 826 827 //------------------------------------------------------------------------------ 828 void OGridControlModel::implInserted( const ElementDescription* _pElement ) 829 { 830 OInterfaceContainer::implInserted( _pElement ); 831 gotColumn( _pElement->xInterface ); 832 } 833 834 //------------------------------------------------------------------------------ 835 void OGridControlModel::impl_replacedElement( const ContainerEvent& _rEvent, ::osl::ClearableMutexGuard& _rInstanceLock ) 836 { 837 Reference< XInterface > xOldColumn( _rEvent.ReplacedElement, UNO_QUERY ); 838 Reference< XInterface > xNewColumn( _rEvent.Element, UNO_QUERY ); 839 840 bool bNewSelection = ( xOldColumn == m_xSelection ); 841 842 lostColumn( xOldColumn ); 843 gotColumn( xNewColumn ); 844 845 if ( bNewSelection ) 846 m_xSelection.set( xNewColumn, UNO_QUERY ); 847 848 OInterfaceContainer::impl_replacedElement( _rEvent, _rInstanceLock ); 849 // <<---- SYNCHRONIZED 850 851 if ( bNewSelection ) 852 { 853 m_aSelectListeners.notifyEach( &XSelectionChangeListener::selectionChanged, EventObject( *this ) ); 854 } 855 } 856 857 //------------------------------------------------------------------------------ 858 ElementDescription* OGridControlModel::createElementMetaData( ) 859 { 860 return new ColumnDescription; 861 } 862 863 //------------------------------------------------------------------------------ 864 void OGridControlModel::approveNewElement( const Reference< XPropertySet >& _rxObject, ElementDescription* _pElement ) 865 { 866 OGridColumn* pCol = getColumnImplementation( _rxObject ); 867 if ( !pCol ) 868 throw IllegalArgumentException(); 869 870 OInterfaceContainer::approveNewElement( _rxObject, _pElement ); 871 872 // if we're here, the object passed all tests 873 if ( _pElement ) 874 static_cast< ColumnDescription* >( _pElement )->pColumn = pCol; 875 } 876 877 // XPersistObject 878 //------------------------------------------------------------------------------ 879 ::rtl::OUString SAL_CALL OGridControlModel::getServiceName() throw ( ::com::sun::star::uno::RuntimeException) 880 { 881 return FRM_COMPONENT_GRID; // old (non-sun) name for compatibility ! 882 } 883 884 //------------------------------------------------------------------------------ 885 void OGridControlModel::write(const Reference<XObjectOutputStream>& _rxOutStream) throw ( ::com::sun::star::io::IOException, ::com::sun::star::uno::RuntimeException) 886 { 887 OControlModel::write(_rxOutStream); 888 889 Reference<XMarkableStream> xMark(_rxOutStream, UNO_QUERY); 890 891 // 1. Version 892 _rxOutStream->writeShort(0x0008); 893 894 // 2. Columns 895 sal_Int32 nLen = getCount(); 896 _rxOutStream->writeLong(nLen); 897 OGridColumn* pCol; 898 for (sal_Int32 i = 0; i < nLen; i++) 899 { 900 // zuerst den Servicenamen fuer das darunterliegende Model 901 pCol = getColumnImplementation(m_aItems[i]); 902 DBG_ASSERT(pCol != NULL, "OGridControlModel::write : such items should never reach it into my container !"); 903 904 _rxOutStream << pCol->getModelName(); 905 906 // dann das Object selbst 907 sal_Int32 nMark = xMark->createMark(); 908 sal_Int32 nObjLen = 0; 909 _rxOutStream->writeLong(nObjLen); 910 911 // schreiben der Col 912 pCol->write(_rxOutStream); 913 914 // feststellen der Laenge 915 nObjLen = xMark->offsetToMark(nMark) - 4; 916 xMark->jumpToMark(nMark); 917 _rxOutStream->writeLong(nObjLen); 918 xMark->jumpToFurthest(); 919 xMark->deleteMark(nMark); 920 } 921 922 // 3. Events 923 writeEvents(_rxOutStream); 924 925 // 4. Attribute 926 // Maskierung fuer alle any Typen 927 sal_uInt16 nAnyMask = 0; 928 if (m_aRowHeight.getValueType().getTypeClass() == TypeClass_LONG) 929 nAnyMask |= ROWHEIGHT; 930 if ( getFont() != getDefaultFont() ) 931 nAnyMask |= FONTATTRIBS | FONTSIZE | FONTTYPE | FONTDESCRIPTOR; 932 if (m_aTabStop.getValueType().getTypeClass() == TypeClass_BOOLEAN) 933 nAnyMask |= TABSTOP; 934 if ( hasTextColor() ) 935 nAnyMask |= TEXTCOLOR; 936 if (m_aBackgroundColor.getValueType().getTypeClass() == TypeClass_LONG) 937 nAnyMask |= BACKGROUNDCOLOR; 938 if (!m_bRecordMarker) 939 nAnyMask |= RECORDMARKER; 940 941 _rxOutStream->writeShort(nAnyMask); 942 943 if (nAnyMask & ROWHEIGHT) 944 _rxOutStream->writeLong(getINT32(m_aRowHeight)); 945 946 // old structures 947 const FontDescriptor& aFont = getFont(); 948 if ( nAnyMask & FONTDESCRIPTOR ) 949 { 950 // Attrib 951 _rxOutStream->writeShort( sal::static_int_cast< sal_Int16 >( VCLUnoHelper::ConvertFontWeight( aFont.Weight ) ) ); 952 _rxOutStream->writeShort( sal::static_int_cast< sal_Int16 >( aFont.Slant ) ); 953 _rxOutStream->writeShort( aFont.Underline ); 954 _rxOutStream->writeShort( aFont.Strikeout ); 955 _rxOutStream->writeShort( sal_Int16(aFont.Orientation * 10) ); 956 _rxOutStream->writeBoolean( aFont.Kerning ); 957 _rxOutStream->writeBoolean( aFont.WordLineMode ); 958 959 // Size 960 _rxOutStream->writeLong( aFont.Width ); 961 _rxOutStream->writeLong( aFont.Height ); 962 _rxOutStream->writeShort( sal::static_int_cast< sal_Int16 >( VCLUnoHelper::ConvertFontWidth( aFont.CharacterWidth ) ) ); 963 964 // Type 965 _rxOutStream->writeUTF( aFont.Name ); 966 _rxOutStream->writeUTF( aFont.StyleName ); 967 _rxOutStream->writeShort( aFont.Family ); 968 _rxOutStream->writeShort( aFont.CharSet ); 969 _rxOutStream->writeShort( aFont.Pitch ); 970 } 971 972 _rxOutStream << m_aDefaultControl; 973 974 _rxOutStream->writeShort(m_nBorder); 975 _rxOutStream->writeBoolean(m_bEnable); 976 977 if (nAnyMask & TABSTOP) 978 _rxOutStream->writeBoolean(getBOOL(m_aTabStop)); 979 980 _rxOutStream->writeBoolean(m_bNavigation); 981 982 if (nAnyMask & TEXTCOLOR) 983 _rxOutStream->writeLong( getTextColor() ); 984 985 // neu ab Version 6 986 _rxOutStream << m_sHelpText; 987 988 if (nAnyMask & FONTDESCRIPTOR) 989 _rxOutStream << getFont(); 990 991 if (nAnyMask & RECORDMARKER) 992 _rxOutStream->writeBoolean(m_bRecordMarker); 993 994 // neu ab Version 7 995 _rxOutStream->writeBoolean(m_bPrintable); 996 997 // new since 8 998 if (nAnyMask & BACKGROUNDCOLOR) 999 _rxOutStream->writeLong(getINT32(m_aBackgroundColor)); 1000 } 1001 1002 //------------------------------------------------------------------------------ 1003 void OGridControlModel::read(const Reference<XObjectInputStream>& _rxInStream) throw ( ::com::sun::star::io::IOException, ::com::sun::star::uno::RuntimeException) 1004 { 1005 OControlModel::read(_rxInStream); 1006 1007 Reference<XMarkableStream> xMark(_rxInStream, UNO_QUERY); 1008 1009 // 1. Version 1010 sal_Int16 nVersion = _rxInStream->readShort(); 1011 1012 // 2. Einlesen der Spalten 1013 sal_Int32 nLen = _rxInStream->readLong(); 1014 if (nLen) 1015 { 1016 for (sal_Int32 i = 0; i < nLen; i++) 1017 { 1018 // Lesen des Modelnamen 1019 1020 ::rtl::OUString sModelName; 1021 _rxInStream >> sModelName; 1022 1023 Reference<XPropertySet> xCol(createColumn(getColumnTypeByModelName(sModelName))); 1024 DBG_ASSERT(xCol.is(), "OGridControlModel::read : unknown column type !"); 1025 sal_Int32 nObjLen = _rxInStream->readLong(); 1026 if (nObjLen) 1027 { 1028 sal_Int32 nMark = xMark->createMark(); 1029 if (xCol.is()) 1030 { 1031 OGridColumn* pCol = getColumnImplementation(xCol); 1032 pCol->read(_rxInStream); 1033 } 1034 xMark->jumpToMark(nMark); 1035 _rxInStream->skipBytes(nObjLen); 1036 xMark->deleteMark(nMark); 1037 } 1038 1039 if ( xCol.is() ) 1040 implInsert( i, xCol, sal_False, NULL, sal_False ); 1041 } 1042 } 1043 1044 // In der Basisimplementierung werden die Events nur gelesen, Elemente im Container existieren 1045 // da aber vor TF_ONE fuer das GridControl immer Events geschrieben wurden, muessen sie auch immer 1046 // mit gelesen werden 1047 sal_Int32 nObjLen = _rxInStream->readLong(); 1048 if (nObjLen) 1049 { 1050 sal_Int32 nMark = xMark->createMark(); 1051 Reference<XPersistObject> xObj(m_xEventAttacher, UNO_QUERY); 1052 if (xObj.is()) 1053 xObj->read(_rxInStream); 1054 xMark->jumpToMark(nMark); 1055 _rxInStream->skipBytes(nObjLen); 1056 xMark->deleteMark(nMark); 1057 } 1058 1059 // Attachement lesen 1060 for (sal_Int32 i = 0; i < nLen; i++) 1061 { 1062 InterfaceRef xIfc(m_aItems[i], UNO_QUERY); 1063 Reference<XPropertySet> xSet(xIfc, UNO_QUERY); 1064 Any aHelper; 1065 aHelper <<= xSet; 1066 m_xEventAttacher->attach( i, xIfc, aHelper ); 1067 } 1068 1069 // 4. Einlesen der Attribute 1070 if (nVersion == 1) 1071 return; 1072 1073 // Maskierung fuer any 1074 sal_uInt16 nAnyMask = _rxInStream->readShort(); 1075 1076 if (nAnyMask & ROWHEIGHT) 1077 { 1078 sal_Int32 nValue = _rxInStream->readLong(); 1079 m_aRowHeight <<= (sal_Int32)nValue; 1080 } 1081 1082 FontDescriptor aFont( getFont() ); 1083 if ( nAnyMask & FONTATTRIBS ) 1084 { 1085 aFont.Weight = (float)VCLUnoHelper::ConvertFontWeight( _rxInStream->readShort() ); 1086 1087 aFont.Slant = (FontSlant)_rxInStream->readShort(); 1088 aFont.Underline = _rxInStream->readShort(); 1089 aFont.Strikeout = _rxInStream->readShort(); 1090 aFont.Orientation = ( (float)_rxInStream->readShort() ) / 10; 1091 aFont.Kerning = _rxInStream->readBoolean(); 1092 aFont.WordLineMode = _rxInStream->readBoolean(); 1093 } 1094 if ( nAnyMask & FONTSIZE ) 1095 { 1096 aFont.Width = (sal_Int16)_rxInStream->readLong(); 1097 aFont.Height = (sal_Int16)_rxInStream->readLong(); 1098 aFont.CharacterWidth = (float)VCLUnoHelper::ConvertFontWidth( _rxInStream->readShort() ); 1099 } 1100 if ( nAnyMask & FONTTYPE ) 1101 { 1102 aFont.Name = _rxInStream->readUTF(); 1103 aFont.StyleName = _rxInStream->readUTF(); 1104 aFont.Family = _rxInStream->readShort(); 1105 aFont.CharSet = _rxInStream->readShort(); 1106 aFont.Pitch = _rxInStream->readShort(); 1107 } 1108 1109 if ( nAnyMask & ( FONTATTRIBS | FONTSIZE | FONTTYPE ) ) 1110 setFont( aFont ); 1111 1112 // Name 1113 _rxInStream >> m_aDefaultControl; 1114 m_nBorder = _rxInStream->readShort(); 1115 m_bEnable = _rxInStream->readBoolean(); 1116 1117 if (nAnyMask & TABSTOP) 1118 { 1119 m_aTabStop = makeBoolAny(_rxInStream->readBoolean()); 1120 } 1121 1122 if (nVersion > 3) 1123 m_bNavigation = _rxInStream->readBoolean(); 1124 1125 if (nAnyMask & TEXTCOLOR) 1126 { 1127 sal_Int32 nValue = _rxInStream->readLong(); 1128 setTextColor( (sal_Int32)nValue ); 1129 } 1130 1131 // neu ab Version 6 1132 if (nVersion > 5) 1133 _rxInStream >> m_sHelpText; 1134 1135 if (nAnyMask & FONTDESCRIPTOR) 1136 { 1137 FontDescriptor aUNOFont; 1138 _rxInStream >> aUNOFont; 1139 setFont( aFont ); 1140 } 1141 1142 if (nAnyMask & RECORDMARKER) 1143 m_bRecordMarker = _rxInStream->readBoolean(); 1144 1145 // neu ab Version 7 1146 if (nVersion > 6) 1147 m_bPrintable = _rxInStream->readBoolean(); 1148 1149 if (nAnyMask & BACKGROUNDCOLOR) 1150 { 1151 sal_Int32 nValue = _rxInStream->readLong(); 1152 m_aBackgroundColor <<= (sal_Int32)nValue; 1153 } 1154 } 1155 1156 //......................................................................... 1157 } // namespace frm 1158 //......................................................................... 1159 1160