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_toolkit.hxx" 26 #include <toolkit/awt/vclxwindows.hxx> 27 #include <com/sun/star/awt/ScrollBarOrientation.hpp> 28 #include <com/sun/star/graphic/XGraphicProvider.hpp> 29 #include <toolkit/helper/vclunohelper.hxx> 30 #include <toolkit/helper/macros.hxx> 31 #include <toolkit/helper/property.hxx> 32 #include <toolkit/helper/convert.hxx> 33 #include <toolkit/helper/imagealign.hxx> 34 #include <toolkit/helper/accessibilityclient.hxx> 35 #include <toolkit/helper/fixedhyperbase.hxx> 36 #include <toolkit/helper/tkresmgr.hxx> 37 #include <cppuhelper/typeprovider.hxx> 38 #include <com/sun/star/awt/VisualEffect.hpp> 39 #include <com/sun/star/lang/XMultiServiceFactory.hpp> 40 #include <com/sun/star/system/XSystemShellExecute.hpp> 41 #include <com/sun/star/system/SystemShellExecuteFlags.hpp> 42 #include <com/sun/star/resource/XStringResourceResolver.hpp> 43 #include <com/sun/star/awt/ImageScaleMode.hpp> 44 #include <com/sun/star/awt/XItemList.hpp> 45 #include <comphelper/componentcontext.hxx> 46 #include <comphelper/namedvaluecollection.hxx> 47 #include <comphelper/processfactory.hxx> 48 49 #ifndef _SV_BUTTON_HXX 50 #include <vcl/button.hxx> 51 #endif 52 #include <vcl/lstbox.hxx> 53 #include <vcl/combobox.hxx> 54 #include <vcl/field.hxx> 55 #include <vcl/longcurr.hxx> 56 #include <vcl/imgctrl.hxx> 57 #include <vcl/dialog.hxx> 58 #include <vcl/msgbox.hxx> 59 #include <vcl/scrbar.hxx> 60 #include <vcl/svapp.hxx> 61 #include <vcl/tabpage.hxx> 62 #include <vcl/tabctrl.hxx> 63 #include <tools/diagnose_ex.h> 64 65 #include <boost/bind.hpp> 66 #include <boost/function.hpp> 67 68 using ::com::sun::star::uno::Any; 69 using ::com::sun::star::uno::Reference; 70 using ::com::sun::star::uno::makeAny; 71 using ::com::sun::star::uno::RuntimeException; 72 using ::com::sun::star::lang::EventObject; 73 using ::com::sun::star::awt::ItemListEvent; 74 using ::com::sun::star::awt::XItemList; 75 using ::com::sun::star::graphic::XGraphic; 76 using ::com::sun::star::graphic::XGraphicProvider; 77 78 using namespace ::com::sun::star; 79 using namespace ::com::sun::star::awt::VisualEffect; 80 namespace ImageScaleMode = ::com::sun::star::awt::ImageScaleMode; 81 82 static double ImplCalcLongValue( double nValue, sal_uInt16 nDigits ) 83 { 84 double n = nValue; 85 for ( sal_uInt16 d = 0; d < nDigits; d++ ) 86 n *= 10; 87 return n; 88 } 89 90 static double ImplCalcDoubleValue( double nValue, sal_uInt16 nDigits ) 91 { 92 double n = nValue; 93 for ( sal_uInt16 d = 0; d < nDigits; d++ ) 94 n /= 10; 95 return n; 96 } 97 98 namespace toolkit 99 { 100 /** sets the "face color" for button like controls (scroll bar, spin button) 101 */ 102 void setButtonLikeFaceColor( Window* _pWindow, const ::com::sun::star::uno::Any& _rColorValue ) 103 { 104 AllSettings aSettings = _pWindow->GetSettings(); 105 StyleSettings aStyleSettings = aSettings.GetStyleSettings(); 106 107 if ( !_rColorValue.hasValue() ) 108 { 109 const StyleSettings& aAppStyle = Application::GetSettings().GetStyleSettings(); 110 aStyleSettings.SetFaceColor( aAppStyle.GetFaceColor( ) ); 111 aStyleSettings.SetCheckedColor( aAppStyle.GetCheckedColor( ) ); 112 aStyleSettings.SetLightBorderColor( aAppStyle.GetLightBorderColor() ); 113 aStyleSettings.SetLightColor( aAppStyle.GetLightColor() ); 114 aStyleSettings.SetShadowColor( aAppStyle.GetShadowColor() ); 115 aStyleSettings.SetDarkShadowColor( aAppStyle.GetDarkShadowColor() ); 116 } 117 else 118 { 119 sal_Int32 nBackgroundColor = 0; 120 _rColorValue >>= nBackgroundColor; 121 aStyleSettings.SetFaceColor( nBackgroundColor ); 122 123 // for the real background (everything except the buttons and the thumb), 124 // use an average between the desired color and "white" 125 Color aWhite( COL_WHITE ); 126 Color aBackground( nBackgroundColor ); 127 aBackground.SetRed( ( aBackground.GetRed() + aWhite.GetRed() ) / 2 ); 128 aBackground.SetGreen( ( aBackground.GetGreen() + aWhite.GetGreen() ) / 2 ); 129 aBackground.SetBlue( ( aBackground.GetBlue() + aWhite.GetBlue() ) / 2 ); 130 aStyleSettings.SetCheckedColor( aBackground ); 131 132 sal_Int32 nBackgroundLuminance = Color( nBackgroundColor ).GetLuminance(); 133 sal_Int32 nWhiteLuminance = Color( COL_WHITE ).GetLuminance(); 134 135 Color aLightShadow( nBackgroundColor ); 136 aLightShadow.IncreaseLuminance( (sal_uInt8)( ( nWhiteLuminance - nBackgroundLuminance ) * 2 / 3 ) ); 137 aStyleSettings.SetLightBorderColor( aLightShadow ); 138 139 Color aLight( nBackgroundColor ); 140 aLight.IncreaseLuminance( (sal_uInt8)( ( nWhiteLuminance - nBackgroundLuminance ) * 1 / 3 ) ); 141 aStyleSettings.SetLightColor( aLight ); 142 143 Color aShadow( nBackgroundColor ); 144 aShadow.DecreaseLuminance( (sal_uInt8)( nBackgroundLuminance * 1 / 3 ) ); 145 aStyleSettings.SetShadowColor( aShadow ); 146 147 Color aDarkShadow( nBackgroundColor ); 148 aDarkShadow.DecreaseLuminance( (sal_uInt8)( nBackgroundLuminance * 2 / 3 ) ); 149 aStyleSettings.SetDarkShadowColor( aDarkShadow ); 150 } 151 152 aSettings.SetStyleSettings( aStyleSettings ); 153 _pWindow->SetSettings( aSettings, sal_True ); 154 } 155 156 Any getButtonLikeFaceColor( const Window* _pWindow ) 157 { 158 sal_Int32 nBackgroundColor = _pWindow->GetSettings().GetStyleSettings().GetFaceColor().GetColor(); 159 return makeAny( nBackgroundColor ); 160 } 161 162 static void adjustBooleanWindowStyle( const Any& _rValue, Window* _pWindow, WinBits _nBits, sal_Bool _bInverseSemantics ) 163 { 164 WinBits nStyle = _pWindow->GetStyle(); 165 sal_Bool bValue( sal_False ); 166 OSL_VERIFY( _rValue >>= bValue ); 167 if ( bValue != _bInverseSemantics ) 168 nStyle |= _nBits; 169 else 170 nStyle &= ~_nBits; 171 _pWindow->SetStyle( nStyle ); 172 } 173 174 static void setVisualEffect( const Any& _rValue, Window* _pWindow ) 175 { 176 AllSettings aSettings = _pWindow->GetSettings(); 177 StyleSettings aStyleSettings = aSettings.GetStyleSettings(); 178 179 sal_Int16 nStyle = LOOK3D; 180 OSL_VERIFY( _rValue >>= nStyle ); 181 switch ( nStyle ) 182 { 183 case FLAT: 184 aStyleSettings.SetOptions( aStyleSettings.GetOptions() & ~STYLE_OPTION_MONO ); 185 break; 186 case LOOK3D: 187 default: 188 aStyleSettings.SetOptions( aStyleSettings.GetOptions() | STYLE_OPTION_MONO ); 189 } 190 aSettings.SetStyleSettings( aStyleSettings ); 191 _pWindow->SetSettings( aSettings ); 192 } 193 194 static Any getVisualEffect( Window* _pWindow ) 195 { 196 Any aEffect; 197 198 StyleSettings aStyleSettings = _pWindow->GetSettings().GetStyleSettings(); 199 if ( (aStyleSettings.GetOptions() & STYLE_OPTION_MONO) ) 200 aEffect <<= (sal_Int16)FLAT; 201 else 202 aEffect <<= (sal_Int16)LOOK3D; 203 return aEffect; 204 } 205 } 206 207 // ---------------------------------------------------- 208 // class VCLXGraphicControl 209 // ---------------------------------------------------- 210 211 void VCLXGraphicControl::ImplGetPropertyIds( std::list< sal_uInt16 > &rIds ) 212 { 213 VCLXWindow::ImplGetPropertyIds( rIds ); 214 } 215 216 void VCLXGraphicControl::ImplSetNewImage() 217 { 218 OSL_PRECOND( GetWindow(), "VCLXGraphicControl::ImplSetNewImage: window is required to be not-NULL!" ); 219 Button* pButton = static_cast< Button* >( GetWindow() ); 220 pButton->SetModeImage( GetImage() ); 221 } 222 223 void VCLXGraphicControl::setPosSize( sal_Int32 X, sal_Int32 Y, sal_Int32 Width, sal_Int32 Height, short Flags ) throw(::com::sun::star::uno::RuntimeException) 224 { 225 ::vos::OGuard aGuard( GetMutex() ); 226 227 if ( GetWindow() ) 228 { 229 Size aOldSize = GetWindow()->GetSizePixel(); 230 VCLXWindow::setPosSize( X, Y, Width, Height, Flags ); 231 if ( ( aOldSize.Width() != Width ) || ( aOldSize.Height() != Height ) ) 232 ImplSetNewImage(); 233 } 234 } 235 236 void VCLXGraphicControl::setProperty( const ::rtl::OUString& PropertyName, const ::com::sun::star::uno::Any& Value) throw(::com::sun::star::uno::RuntimeException) 237 { 238 ::vos::OGuard aGuard( GetMutex() ); 239 240 Button* pButton = static_cast< Button* >( GetWindow() ); 241 if ( !pButton ) 242 return; 243 sal_uInt16 nPropType = GetPropertyId( PropertyName ); 244 switch ( nPropType ) 245 { 246 case BASEPROPERTY_GRAPHIC: 247 { 248 Reference< XGraphic > xGraphic; 249 OSL_VERIFY( Value >>= xGraphic ); 250 maImage = Image( xGraphic ); 251 ImplSetNewImage(); 252 } 253 break; 254 255 case BASEPROPERTY_IMAGEALIGN: 256 { 257 WindowType eType = GetWindow()->GetType(); 258 if ( ( eType == WINDOW_PUSHBUTTON ) 259 || ( eType == WINDOW_RADIOBUTTON ) 260 || ( eType == WINDOW_CHECKBOX ) 261 ) 262 { 263 sal_Int16 nAlignment = sal_Int16(); 264 if ( Value >>= nAlignment ) 265 pButton->SetImageAlign( static_cast< ImageAlign >( nAlignment ) ); 266 } 267 } 268 break; 269 case BASEPROPERTY_IMAGEPOSITION: 270 { 271 WindowType eType = GetWindow()->GetType(); 272 if ( ( eType == WINDOW_PUSHBUTTON ) 273 || ( eType == WINDOW_RADIOBUTTON ) 274 || ( eType == WINDOW_CHECKBOX ) 275 ) 276 { 277 sal_Int16 nImagePosition = 2; 278 OSL_VERIFY( Value >>= nImagePosition ); 279 pButton->SetImageAlign( ::toolkit::translateImagePosition( nImagePosition ) ); 280 } 281 } 282 break; 283 default: 284 VCLXWindow::setProperty( PropertyName, Value ); 285 break; 286 } 287 } 288 289 ::com::sun::star::uno::Any VCLXGraphicControl::getProperty( const ::rtl::OUString& PropertyName ) throw(::com::sun::star::uno::RuntimeException) 290 { 291 ::vos::OGuard aGuard( GetMutex() ); 292 293 ::com::sun::star::uno::Any aProp; 294 if ( !GetWindow() ) 295 return aProp; 296 297 sal_uInt16 nPropType = GetPropertyId( PropertyName ); 298 switch ( nPropType ) 299 { 300 case BASEPROPERTY_GRAPHIC: 301 aProp <<= maImage.GetXGraphic(); 302 break; 303 case BASEPROPERTY_IMAGEALIGN: 304 { 305 WindowType eType = GetWindow()->GetType(); 306 if ( ( eType == WINDOW_PUSHBUTTON ) 307 || ( eType == WINDOW_RADIOBUTTON ) 308 || ( eType == WINDOW_CHECKBOX ) 309 ) 310 { 311 aProp <<= ::toolkit::getCompatibleImageAlign( static_cast< Button* >( GetWindow() )->GetImageAlign() ); 312 } 313 } 314 break; 315 case BASEPROPERTY_IMAGEPOSITION: 316 { 317 WindowType eType = GetWindow()->GetType(); 318 if ( ( eType == WINDOW_PUSHBUTTON ) 319 || ( eType == WINDOW_RADIOBUTTON ) 320 || ( eType == WINDOW_CHECKBOX ) 321 ) 322 { 323 aProp <<= ::toolkit::translateImagePosition( static_cast< Button* >( GetWindow() )->GetImageAlign() ); 324 } 325 } 326 break; 327 default: 328 { 329 aProp <<= VCLXWindow::getProperty( PropertyName ); 330 } 331 break; 332 } 333 return aProp; 334 } 335 336 //-------------------------------------------------------------------- 337 // class VCLXButton 338 // ---------------------------------------------------- 339 340 void VCLXButton::ImplGetPropertyIds( std::list< sal_uInt16 > &rIds ) 341 { 342 PushPropertyIds( rIds, 343 BASEPROPERTY_BACKGROUNDCOLOR, 344 BASEPROPERTY_DEFAULTBUTTON, 345 BASEPROPERTY_DEFAULTCONTROL, 346 BASEPROPERTY_ENABLED, 347 BASEPROPERTY_ENABLEVISIBLE, 348 BASEPROPERTY_FONTDESCRIPTOR, 349 BASEPROPERTY_GRAPHIC, 350 BASEPROPERTY_HELPTEXT, 351 BASEPROPERTY_HELPURL, 352 BASEPROPERTY_IMAGEALIGN, 353 BASEPROPERTY_IMAGEPOSITION, 354 BASEPROPERTY_IMAGEURL, 355 BASEPROPERTY_LABEL, 356 BASEPROPERTY_PRINTABLE, 357 BASEPROPERTY_PUSHBUTTONTYPE, 358 BASEPROPERTY_REPEAT, 359 BASEPROPERTY_REPEAT_DELAY, 360 BASEPROPERTY_STATE, 361 BASEPROPERTY_TABSTOP, 362 BASEPROPERTY_TOGGLE, 363 BASEPROPERTY_FOCUSONCLICK, 364 BASEPROPERTY_MULTILINE, 365 BASEPROPERTY_ALIGN, 366 BASEPROPERTY_VERTICALALIGN, 367 BASEPROPERTY_WRITING_MODE, 368 BASEPROPERTY_CONTEXT_WRITING_MODE, 369 BASEPROPERTY_REFERENCE_DEVICE, 370 0); 371 VCLXGraphicControl::ImplGetPropertyIds( rIds ); 372 } 373 374 VCLXButton::VCLXButton() 375 :maActionListeners( *this ) 376 ,maItemListeners( *this ) 377 { 378 } 379 380 VCLXButton::~VCLXButton() 381 { 382 } 383 384 ::com::sun::star::uno::Reference< ::com::sun::star::accessibility::XAccessibleContext > VCLXButton::CreateAccessibleContext() 385 { 386 return getAccessibleFactory().createAccessibleContext( this ); 387 } 388 389 void VCLXButton::dispose() throw(::com::sun::star::uno::RuntimeException) 390 { 391 ::vos::OGuard aGuard( GetMutex() ); 392 393 ::com::sun::star::lang::EventObject aObj; 394 aObj.Source = (::cppu::OWeakObject*)this; 395 maActionListeners.disposeAndClear( aObj ); 396 maItemListeners.disposeAndClear( aObj ); 397 VCLXGraphicControl::dispose(); 398 } 399 400 void VCLXButton::addActionListener( const ::com::sun::star::uno::Reference< ::com::sun::star::awt::XActionListener > & l )throw(::com::sun::star::uno::RuntimeException) 401 { 402 ::vos::OGuard aGuard( GetMutex() ); 403 maActionListeners.addInterface( l ); 404 } 405 406 void VCLXButton::removeActionListener( const ::com::sun::star::uno::Reference< ::com::sun::star::awt::XActionListener > & l ) throw(::com::sun::star::uno::RuntimeException) 407 { 408 ::vos::OGuard aGuard( GetMutex() ); 409 maActionListeners.removeInterface( l ); 410 } 411 412 void VCLXButton::addItemListener( const ::com::sun::star::uno::Reference< ::com::sun::star::awt::XItemListener > & l )throw(::com::sun::star::uno::RuntimeException) 413 { 414 ::vos::OGuard aGuard( GetMutex() ); 415 maItemListeners.addInterface( l ); 416 } 417 418 void VCLXButton::removeItemListener( const ::com::sun::star::uno::Reference< ::com::sun::star::awt::XItemListener > & l ) throw(::com::sun::star::uno::RuntimeException) 419 { 420 ::vos::OGuard aGuard( GetMutex() ); 421 maItemListeners.removeInterface( l ); 422 } 423 424 void VCLXButton::setLabel( const ::rtl::OUString& rLabel ) throw(::com::sun::star::uno::RuntimeException) 425 { 426 ::vos::OGuard aGuard( GetMutex() ); 427 428 Window* pWindow = GetWindow(); 429 if ( pWindow ) 430 pWindow->SetText( rLabel ); 431 } 432 433 void VCLXButton::setActionCommand( const ::rtl::OUString& rCommand ) throw(::com::sun::star::uno::RuntimeException) 434 { 435 ::vos::OGuard aGuard( GetMutex() ); 436 437 maActionCommand = rCommand; 438 } 439 440 ::com::sun::star::awt::Size VCLXButton::getMinimumSize( ) throw(::com::sun::star::uno::RuntimeException) 441 { 442 ::vos::OGuard aGuard( GetMutex() ); 443 444 Size aSz; 445 PushButton* pButton = (PushButton*) GetWindow(); 446 if ( pButton ) 447 aSz = pButton->CalcMinimumSize(); 448 return AWTSize(aSz); 449 } 450 451 ::com::sun::star::awt::Size VCLXButton::getPreferredSize( ) throw(::com::sun::star::uno::RuntimeException) 452 { 453 ::com::sun::star::awt::Size aSz = getMinimumSize(); 454 aSz.Width += 16; 455 aSz.Height += 10; 456 return aSz; 457 } 458 459 ::com::sun::star::awt::Size VCLXButton::calcAdjustedSize( const ::com::sun::star::awt::Size& rNewSize ) throw(::com::sun::star::uno::RuntimeException) 460 { 461 ::vos::OGuard aGuard( GetMutex() ); 462 463 Size aSz = VCLSize(rNewSize); 464 PushButton* pButton = (PushButton*) GetWindow(); 465 if ( pButton ) 466 { 467 Size aMinSz = pButton->CalcMinimumSize(); 468 // Kein Text, also Image 469 if ( !pButton->GetText().Len() ) 470 { 471 if ( aSz.Width() < aMinSz.Width() ) 472 aSz.Width() = aMinSz.Width(); 473 if ( aSz.Height() < aMinSz.Height() ) 474 aSz.Height() = aMinSz.Height(); 475 } 476 else 477 { 478 if ( ( aSz.Width() > aMinSz.Width() ) && ( aSz.Height() < aMinSz.Height() ) ) 479 aSz.Height() = aMinSz.Height(); 480 else 481 aSz = aMinSz; 482 } 483 } 484 return AWTSize(aSz); 485 } 486 487 void VCLXButton::setProperty( const ::rtl::OUString& PropertyName, const ::com::sun::star::uno::Any& Value) throw(::com::sun::star::uno::RuntimeException) 488 { 489 ::vos::OGuard aGuard( GetMutex() ); 490 491 Button* pButton = (Button*)GetWindow(); 492 if ( pButton ) 493 { 494 sal_uInt16 nPropType = GetPropertyId( PropertyName ); 495 switch ( nPropType ) 496 { 497 case BASEPROPERTY_FOCUSONCLICK: 498 ::toolkit::adjustBooleanWindowStyle( Value, pButton, WB_NOPOINTERFOCUS, sal_True ); 499 break; 500 501 case BASEPROPERTY_TOGGLE: 502 ::toolkit::adjustBooleanWindowStyle( Value, pButton, WB_TOGGLE, sal_False ); 503 break; 504 505 case BASEPROPERTY_DEFAULTBUTTON: 506 { 507 WinBits nStyle = pButton->GetStyle() | WB_DEFBUTTON; 508 sal_Bool b = sal_Bool(); 509 if ( ( Value >>= b ) && !b ) 510 nStyle &= ~WB_DEFBUTTON; 511 pButton->SetStyle( nStyle ); 512 } 513 break; 514 case BASEPROPERTY_STATE: 515 { 516 if ( GetWindow()->GetType() == WINDOW_PUSHBUTTON ) 517 { 518 sal_Int16 n = sal_Int16(); 519 if ( Value >>= n ) 520 ((PushButton*)pButton)->SetState( (TriState)n ); 521 } 522 } 523 break; 524 default: 525 { 526 VCLXGraphicControl::setProperty( PropertyName, Value ); 527 } 528 } 529 } 530 } 531 532 ::com::sun::star::uno::Any VCLXButton::getProperty( const ::rtl::OUString& PropertyName ) throw(::com::sun::star::uno::RuntimeException) 533 { 534 ::vos::OGuard aGuard( GetMutex() ); 535 536 ::com::sun::star::uno::Any aProp; 537 Button* pButton = (Button*)GetWindow(); 538 if ( pButton ) 539 { 540 sal_uInt16 nPropType = GetPropertyId( PropertyName ); 541 switch ( nPropType ) 542 { 543 case BASEPROPERTY_FOCUSONCLICK: 544 aProp <<= (sal_Bool)( ( pButton->GetStyle() & WB_NOPOINTERFOCUS ) == 0 ); 545 break; 546 547 case BASEPROPERTY_TOGGLE: 548 aProp <<= (sal_Bool)( ( pButton->GetStyle() & WB_TOGGLE ) != 0 ); 549 break; 550 551 case BASEPROPERTY_DEFAULTBUTTON: 552 { 553 aProp <<= (sal_Bool) ( ( pButton->GetStyle() & WB_DEFBUTTON ) ? sal_True : sal_False ); 554 } 555 break; 556 case BASEPROPERTY_STATE: 557 { 558 if ( GetWindow()->GetType() == WINDOW_PUSHBUTTON ) 559 { 560 aProp <<= (sal_Int16)((PushButton*)pButton)->GetState(); 561 } 562 } 563 break; 564 default: 565 { 566 aProp <<= VCLXGraphicControl::getProperty( PropertyName ); 567 } 568 } 569 } 570 return aProp; 571 } 572 573 void VCLXButton::ProcessWindowEvent( const VclWindowEvent& rVclWindowEvent ) 574 { 575 switch ( rVclWindowEvent.GetId() ) 576 { 577 case VCLEVENT_BUTTON_CLICK: 578 { 579 ::com::sun::star::uno::Reference< ::com::sun::star::awt::XWindow > xKeepAlive( this ); 580 // since we call listeners below, there is a potential that we will be destroyed 581 // during the listener call. To prevent the resulting crashs, we keep us 582 // alive as long as we're here 583 // #20178# - 2003-10-01 - fs@openoffice.org 584 585 if ( maActionListeners.getLength() ) 586 { 587 ::com::sun::star::awt::ActionEvent aEvent; 588 aEvent.Source = (::cppu::OWeakObject*)this; 589 aEvent.ActionCommand = maActionCommand; 590 591 Callback aCallback = ::boost::bind( 592 &ActionListenerMultiplexer::actionPerformed, 593 &maActionListeners, 594 aEvent 595 ); 596 ImplExecuteAsyncWithoutSolarLock( aCallback ); 597 } 598 } 599 break; 600 601 case VCLEVENT_PUSHBUTTON_TOGGLE: 602 { 603 PushButton& rButton = dynamic_cast< PushButton& >( *rVclWindowEvent.GetWindow() ); 604 605 ::com::sun::star::uno::Reference< ::com::sun::star::awt::XWindow > xKeepAlive( this ); 606 if ( maItemListeners.getLength() ) 607 { 608 ::com::sun::star::awt::ItemEvent aEvent; 609 aEvent.Source = (::cppu::OWeakObject*)this; 610 aEvent.Selected = ( rButton.GetState() == STATE_CHECK ) ? 1 : 0; 611 maItemListeners.itemStateChanged( aEvent ); 612 } 613 } 614 break; 615 616 default: 617 VCLXGraphicControl::ProcessWindowEvent( rVclWindowEvent ); 618 break; 619 } 620 } 621 622 // ---------------------------------------------------- 623 // class VCLXImageControl 624 // ---------------------------------------------------- 625 626 void VCLXImageControl::ImplGetPropertyIds( std::list< sal_uInt16 > &rIds ) 627 { 628 PushPropertyIds( rIds, 629 BASEPROPERTY_BACKGROUNDCOLOR, 630 BASEPROPERTY_BORDER, 631 BASEPROPERTY_BORDERCOLOR, 632 BASEPROPERTY_DEFAULTCONTROL, 633 BASEPROPERTY_ENABLED, 634 BASEPROPERTY_ENABLEVISIBLE, 635 BASEPROPERTY_GRAPHIC, 636 BASEPROPERTY_HELPTEXT, 637 BASEPROPERTY_HELPURL, 638 BASEPROPERTY_IMAGEURL, 639 BASEPROPERTY_PRINTABLE, 640 BASEPROPERTY_SCALEIMAGE, 641 BASEPROPERTY_IMAGE_SCALE_MODE, 642 BASEPROPERTY_TABSTOP, 643 BASEPROPERTY_WRITING_MODE, 644 BASEPROPERTY_CONTEXT_WRITING_MODE, 645 0); 646 VCLXGraphicControl::ImplGetPropertyIds( rIds ); 647 } 648 649 VCLXImageControl::VCLXImageControl() 650 { 651 } 652 653 VCLXImageControl::~VCLXImageControl() 654 { 655 } 656 657 void VCLXImageControl::ImplSetNewImage() 658 { 659 OSL_PRECOND( GetWindow(), "VCLXImageControl::ImplSetNewImage: window is required to be not-NULL!" ); 660 ImageControl* pControl = static_cast< ImageControl* >( GetWindow() ); 661 pControl->SetImage( GetImage() ); 662 } 663 664 ::com::sun::star::awt::Size VCLXImageControl::getMinimumSize( ) throw(::com::sun::star::uno::RuntimeException) 665 { 666 ::vos::OGuard aGuard( GetMutex() ); 667 668 Size aSz = GetImage().GetSizePixel(); 669 aSz = ImplCalcWindowSize( aSz ); 670 671 return AWTSize(aSz); 672 } 673 674 ::com::sun::star::awt::Size VCLXImageControl::getPreferredSize( ) throw(::com::sun::star::uno::RuntimeException) 675 { 676 return getMinimumSize(); 677 } 678 679 ::com::sun::star::awt::Size VCLXImageControl::calcAdjustedSize( const ::com::sun::star::awt::Size& rNewSize ) throw(::com::sun::star::uno::RuntimeException) 680 { 681 ::vos::OGuard aGuard( GetMutex() ); 682 683 ::com::sun::star::awt::Size aSz = rNewSize; 684 ::com::sun::star::awt::Size aMinSz = getMinimumSize(); 685 if ( aSz.Width < aMinSz.Width ) 686 aSz.Width = aMinSz.Width; 687 if ( aSz.Height < aMinSz.Height ) 688 aSz.Height = aMinSz.Height; 689 return aSz; 690 } 691 692 void VCLXImageControl::setProperty( const ::rtl::OUString& PropertyName, const ::com::sun::star::uno::Any& Value) throw(::com::sun::star::uno::RuntimeException) 693 { 694 ::vos::OGuard aGuard( GetMutex() ); 695 696 ImageControl* pImageControl = (ImageControl*)GetWindow(); 697 698 sal_uInt16 nPropType = GetPropertyId( PropertyName ); 699 switch ( nPropType ) 700 { 701 case BASEPROPERTY_IMAGE_SCALE_MODE: 702 { 703 sal_Int16 nScaleMode( ImageScaleMode::Anisotropic ); 704 if ( pImageControl && ( Value >>= nScaleMode ) ) 705 { 706 pImageControl->SetScaleMode( nScaleMode ); 707 } 708 } 709 break; 710 711 case BASEPROPERTY_SCALEIMAGE: 712 { 713 // this is for compatibility only, nowadays, the ImageScaleMode property should be used 714 sal_Bool bScaleImage = sal_False; 715 if ( pImageControl && ( Value >>= bScaleImage ) ) 716 { 717 pImageControl->SetScaleMode( bScaleImage ? ImageScaleMode::Anisotropic : ImageScaleMode::None ); 718 } 719 } 720 break; 721 722 default: 723 VCLXGraphicControl::setProperty( PropertyName, Value ); 724 break; 725 } 726 } 727 728 ::com::sun::star::uno::Any VCLXImageControl::getProperty( const ::rtl::OUString& PropertyName ) throw(::com::sun::star::uno::RuntimeException) 729 { 730 ::vos::OGuard aGuard( GetMutex() ); 731 732 ::com::sun::star::uno::Any aProp; 733 ImageControl* pImageControl = (ImageControl*)GetWindow(); 734 sal_uInt16 nPropType = GetPropertyId( PropertyName ); 735 736 switch ( nPropType ) 737 { 738 case BASEPROPERTY_IMAGE_SCALE_MODE: 739 aProp <<= ( pImageControl ? pImageControl->GetScaleMode() : ImageScaleMode::Anisotropic ); 740 break; 741 742 case BASEPROPERTY_SCALEIMAGE: 743 aProp <<= ( pImageControl && pImageControl->GetScaleMode() != ImageScaleMode::None ) ? sal_True : sal_False; 744 break; 745 746 default: 747 aProp = VCLXGraphicControl::getProperty( PropertyName ); 748 break; 749 } 750 return aProp; 751 } 752 753 // ---------------------------------------------------- 754 // class VCLXCheckBox 755 // ---------------------------------------------------- 756 757 758 void VCLXCheckBox::ImplGetPropertyIds( std::list< sal_uInt16 > &rIds ) 759 { 760 PushPropertyIds( rIds, 761 BASEPROPERTY_DEFAULTCONTROL, 762 BASEPROPERTY_ENABLED, 763 BASEPROPERTY_ENABLEVISIBLE, 764 BASEPROPERTY_FONTDESCRIPTOR, 765 BASEPROPERTY_GRAPHIC, 766 BASEPROPERTY_HELPTEXT, 767 BASEPROPERTY_HELPURL, 768 BASEPROPERTY_IMAGEPOSITION, 769 BASEPROPERTY_IMAGEURL, 770 BASEPROPERTY_LABEL, 771 BASEPROPERTY_PRINTABLE, 772 BASEPROPERTY_STATE, 773 BASEPROPERTY_TABSTOP, 774 BASEPROPERTY_TRISTATE, 775 BASEPROPERTY_VISUALEFFECT, 776 BASEPROPERTY_MULTILINE, 777 BASEPROPERTY_BACKGROUNDCOLOR, 778 BASEPROPERTY_ALIGN, 779 BASEPROPERTY_VERTICALALIGN, 780 BASEPROPERTY_WRITING_MODE, 781 BASEPROPERTY_CONTEXT_WRITING_MODE, 782 BASEPROPERTY_REFERENCE_DEVICE, 783 0); 784 VCLXGraphicControl::ImplGetPropertyIds( rIds ); 785 } 786 787 VCLXCheckBox::VCLXCheckBox() : maActionListeners( *this ), maItemListeners( *this ) 788 { 789 } 790 791 // ::com::sun::star::uno::XInterface 792 ::com::sun::star::uno::Any VCLXCheckBox::queryInterface( const ::com::sun::star::uno::Type & rType ) throw(::com::sun::star::uno::RuntimeException) 793 { 794 ::com::sun::star::uno::Any aRet = ::cppu::queryInterface( rType, 795 SAL_STATIC_CAST( ::com::sun::star::awt::XButton*, this ), 796 SAL_STATIC_CAST( ::com::sun::star::awt::XCheckBox*, this ) ); 797 return (aRet.hasValue() ? aRet : VCLXGraphicControl::queryInterface( rType )); 798 } 799 800 // ::com::sun::star::lang::XTypeProvider 801 IMPL_XTYPEPROVIDER_START( VCLXCheckBox ) 802 getCppuType( ( ::com::sun::star::uno::Reference< ::com::sun::star::awt::XButton>* ) NULL ), 803 getCppuType( ( ::com::sun::star::uno::Reference< ::com::sun::star::awt::XCheckBox>* ) NULL ), 804 VCLXGraphicControl::getTypes() 805 IMPL_XTYPEPROVIDER_END 806 807 ::com::sun::star::uno::Reference< ::com::sun::star::accessibility::XAccessibleContext > VCLXCheckBox::CreateAccessibleContext() 808 { 809 return getAccessibleFactory().createAccessibleContext( this ); 810 } 811 812 void VCLXCheckBox::dispose() throw(::com::sun::star::uno::RuntimeException) 813 { 814 ::vos::OGuard aGuard( GetMutex() ); 815 816 ::com::sun::star::lang::EventObject aObj; 817 aObj.Source = (::cppu::OWeakObject*)this; 818 maItemListeners.disposeAndClear( aObj ); 819 VCLXGraphicControl::dispose(); 820 } 821 822 void VCLXCheckBox::addItemListener( const ::com::sun::star::uno::Reference< ::com::sun::star::awt::XItemListener > & l ) throw(::com::sun::star::uno::RuntimeException) 823 { 824 ::vos::OGuard aGuard( GetMutex() ); 825 maItemListeners.addInterface( l ); 826 } 827 828 void VCLXCheckBox::removeItemListener( const ::com::sun::star::uno::Reference< ::com::sun::star::awt::XItemListener > & l ) throw(::com::sun::star::uno::RuntimeException) 829 { 830 ::vos::OGuard aGuard( GetMutex() ); 831 maItemListeners.removeInterface( l ); 832 } 833 834 void VCLXCheckBox::addActionListener( const ::com::sun::star::uno::Reference< ::com::sun::star::awt::XActionListener > & l )throw(::com::sun::star::uno::RuntimeException) 835 { 836 ::vos::OGuard aGuard( GetMutex() ); 837 maActionListeners.addInterface( l ); 838 } 839 840 void VCLXCheckBox::removeActionListener( const ::com::sun::star::uno::Reference< ::com::sun::star::awt::XActionListener > & l ) throw(::com::sun::star::uno::RuntimeException) 841 { 842 ::vos::OGuard aGuard( GetMutex() ); 843 maActionListeners.removeInterface( l ); 844 } 845 846 void VCLXCheckBox::setActionCommand( const ::rtl::OUString& rCommand ) throw(::com::sun::star::uno::RuntimeException) 847 { 848 ::vos::OGuard aGuard( GetMutex() ); 849 maActionCommand = rCommand; 850 } 851 852 void VCLXCheckBox::setLabel( const ::rtl::OUString& rLabel ) throw(::com::sun::star::uno::RuntimeException) 853 { 854 ::vos::OGuard aGuard( GetMutex() ); 855 856 Window* pWindow = GetWindow(); 857 if ( pWindow ) 858 pWindow->SetText( rLabel ); 859 } 860 861 void VCLXCheckBox::setState( short n ) throw(::com::sun::star::uno::RuntimeException) 862 { 863 ::vos::OGuard aGuard( GetMutex() ); 864 865 CheckBox* pCheckBox = (CheckBox*)GetWindow(); 866 if ( pCheckBox) 867 { 868 TriState eState; 869 switch ( n ) 870 { 871 case 0: eState = STATE_NOCHECK; break; 872 case 1: eState = STATE_CHECK; break; 873 case 2: eState = STATE_DONTKNOW; break; 874 default: eState = STATE_NOCHECK; 875 } 876 pCheckBox->SetState( eState ); 877 878 // #105198# call C++ click listeners (needed for accessibility) 879 // pCheckBox->GetClickHdl().Call( pCheckBox ); 880 881 // #107218# Call same virtual methods and listeners like VCL would do after user interaction 882 SetSynthesizingVCLEvent( sal_True ); 883 pCheckBox->Toggle(); 884 pCheckBox->Click(); 885 SetSynthesizingVCLEvent( sal_False ); 886 } 887 } 888 889 short VCLXCheckBox::getState() throw(::com::sun::star::uno::RuntimeException) 890 { 891 ::vos::OGuard aGuard( GetMutex() ); 892 893 short nState = -1; 894 CheckBox* pCheckBox = (CheckBox*)GetWindow(); 895 if ( pCheckBox ) 896 { 897 switch ( pCheckBox->GetState() ) 898 { 899 case STATE_NOCHECK: nState = 0; break; 900 case STATE_CHECK: nState = 1; break; 901 case STATE_DONTKNOW: nState = 2; break; 902 default: DBG_ERROR( "VCLXCheckBox::getState(): unknown TriState!" ); 903 } 904 } 905 906 return nState; 907 } 908 909 void VCLXCheckBox::enableTriState( sal_Bool b ) throw(::com::sun::star::uno::RuntimeException) 910 { 911 ::vos::OGuard aGuard( GetMutex() ); 912 913 CheckBox* pCheckBox = (CheckBox*)GetWindow(); 914 if ( pCheckBox) 915 pCheckBox->EnableTriState( b ); 916 } 917 918 ::com::sun::star::awt::Size VCLXCheckBox::getMinimumSize( ) throw(::com::sun::star::uno::RuntimeException) 919 { 920 ::vos::OGuard aGuard( GetMutex() ); 921 922 Size aSz; 923 CheckBox* pCheckBox = (CheckBox*) GetWindow(); 924 if ( pCheckBox ) 925 aSz = pCheckBox->CalcMinimumSize(); 926 return AWTSize(aSz); 927 } 928 929 ::com::sun::star::awt::Size VCLXCheckBox::getPreferredSize( ) throw(::com::sun::star::uno::RuntimeException) 930 { 931 return getMinimumSize(); 932 } 933 934 ::com::sun::star::awt::Size VCLXCheckBox::calcAdjustedSize( const ::com::sun::star::awt::Size& rNewSize ) throw(::com::sun::star::uno::RuntimeException) 935 { 936 ::vos::OGuard aGuard( GetMutex() ); 937 938 Size aSz = VCLSize(rNewSize); 939 CheckBox* pCheckBox = (CheckBox*) GetWindow(); 940 if ( pCheckBox ) 941 { 942 Size aMinSz = pCheckBox->CalcMinimumSize(); 943 if ( ( aSz.Width() > aMinSz.Width() ) && ( aSz.Height() < aMinSz.Height() ) ) 944 aSz.Height() = aMinSz.Height(); 945 else 946 aSz = aMinSz; 947 } 948 return AWTSize(aSz); 949 } 950 951 void VCLXCheckBox::setProperty( const ::rtl::OUString& PropertyName, const ::com::sun::star::uno::Any& Value) throw(::com::sun::star::uno::RuntimeException) 952 { 953 ::vos::OGuard aGuard( GetMutex() ); 954 955 CheckBox* pCheckBox = (CheckBox*)GetWindow(); 956 if ( pCheckBox ) 957 { 958 sal_uInt16 nPropType = GetPropertyId( PropertyName ); 959 switch ( nPropType ) 960 { 961 case BASEPROPERTY_VISUALEFFECT: 962 ::toolkit::setVisualEffect( Value, pCheckBox ); 963 break; 964 965 case BASEPROPERTY_TRISTATE: 966 { 967 sal_Bool b = sal_Bool(); 968 if ( Value >>= b ) 969 pCheckBox->EnableTriState( b ); 970 } 971 break; 972 case BASEPROPERTY_STATE: 973 { 974 sal_Int16 n = sal_Int16(); 975 if ( Value >>= n ) 976 setState( n ); 977 } 978 break; 979 default: 980 { 981 VCLXGraphicControl::setProperty( PropertyName, Value ); 982 } 983 } 984 } 985 } 986 987 ::com::sun::star::uno::Any VCLXCheckBox::getProperty( const ::rtl::OUString& PropertyName ) throw(::com::sun::star::uno::RuntimeException) 988 { 989 ::vos::OGuard aGuard( GetMutex() ); 990 991 ::com::sun::star::uno::Any aProp; 992 CheckBox* pCheckBox = (CheckBox*)GetWindow(); 993 if ( pCheckBox ) 994 { 995 sal_uInt16 nPropType = GetPropertyId( PropertyName ); 996 switch ( nPropType ) 997 { 998 case BASEPROPERTY_VISUALEFFECT: 999 aProp = ::toolkit::getVisualEffect( pCheckBox ); 1000 break; 1001 case BASEPROPERTY_TRISTATE: 1002 aProp <<= (sal_Bool)pCheckBox->IsTriStateEnabled(); 1003 break; 1004 case BASEPROPERTY_STATE: 1005 aProp <<= (sal_Int16)pCheckBox->GetState(); 1006 break; 1007 default: 1008 { 1009 aProp <<= VCLXGraphicControl::getProperty( PropertyName ); 1010 } 1011 } 1012 } 1013 return aProp; 1014 } 1015 1016 void VCLXCheckBox::ProcessWindowEvent( const VclWindowEvent& rVclWindowEvent ) 1017 { 1018 switch ( rVclWindowEvent.GetId() ) 1019 { 1020 case VCLEVENT_CHECKBOX_TOGGLE: 1021 { 1022 ::com::sun::star::uno::Reference< ::com::sun::star::awt::XWindow > xKeepAlive( this ); 1023 // since we call listeners below, there is a potential that we will be destroyed 1024 // in during the listener call. To prevent the resulting crashs, we keep us 1025 // alive as long as we're here 1026 // #20178# - 2003-10-01 - fs@openoffice.org 1027 1028 CheckBox* pCheckBox = (CheckBox*)GetWindow(); 1029 if ( pCheckBox ) 1030 { 1031 if ( maItemListeners.getLength() ) 1032 { 1033 ::com::sun::star::awt::ItemEvent aEvent; 1034 aEvent.Source = (::cppu::OWeakObject*)this; 1035 aEvent.Highlighted = sal_False; 1036 aEvent.Selected = pCheckBox->GetState(); 1037 maItemListeners.itemStateChanged( aEvent ); 1038 } 1039 if ( !IsSynthesizingVCLEvent() && maActionListeners.getLength() ) 1040 { 1041 ::com::sun::star::awt::ActionEvent aEvent; 1042 aEvent.Source = (::cppu::OWeakObject*)this; 1043 aEvent.ActionCommand = maActionCommand; 1044 maActionListeners.actionPerformed( aEvent ); 1045 } 1046 } 1047 } 1048 break; 1049 1050 default: 1051 VCLXGraphicControl::ProcessWindowEvent( rVclWindowEvent ); 1052 break; 1053 } 1054 } 1055 1056 // ---------------------------------------------------- 1057 // class VCLXRadioButton 1058 // ---------------------------------------------------- 1059 void VCLXRadioButton::ImplGetPropertyIds( std::list< sal_uInt16 > &rIds ) 1060 { 1061 PushPropertyIds( rIds, 1062 BASEPROPERTY_DEFAULTCONTROL, 1063 BASEPROPERTY_ENABLED, 1064 BASEPROPERTY_ENABLEVISIBLE, 1065 BASEPROPERTY_FONTDESCRIPTOR, 1066 BASEPROPERTY_GRAPHIC, 1067 BASEPROPERTY_HELPTEXT, 1068 BASEPROPERTY_HELPURL, 1069 BASEPROPERTY_IMAGEPOSITION, 1070 BASEPROPERTY_IMAGEURL, 1071 BASEPROPERTY_LABEL, 1072 BASEPROPERTY_PRINTABLE, 1073 BASEPROPERTY_STATE, 1074 BASEPROPERTY_TABSTOP, 1075 BASEPROPERTY_VISUALEFFECT, 1076 BASEPROPERTY_MULTILINE, 1077 BASEPROPERTY_BACKGROUNDCOLOR, 1078 BASEPROPERTY_ALIGN, 1079 BASEPROPERTY_VERTICALALIGN, 1080 BASEPROPERTY_WRITING_MODE, 1081 BASEPROPERTY_CONTEXT_WRITING_MODE, 1082 BASEPROPERTY_REFERENCE_DEVICE, 1083 0); 1084 VCLXGraphicControl::ImplGetPropertyIds( rIds ); 1085 } 1086 1087 1088 VCLXRadioButton::VCLXRadioButton() : maItemListeners( *this ), maActionListeners( *this ) 1089 { 1090 } 1091 1092 // ::com::sun::star::uno::XInterface 1093 ::com::sun::star::uno::Any VCLXRadioButton::queryInterface( const ::com::sun::star::uno::Type & rType ) throw(::com::sun::star::uno::RuntimeException) 1094 { 1095 ::com::sun::star::uno::Any aRet = ::cppu::queryInterface( rType, 1096 SAL_STATIC_CAST( ::com::sun::star::awt::XRadioButton*, this ), 1097 SAL_STATIC_CAST( ::com::sun::star::awt::XButton*, this ) ); 1098 return (aRet.hasValue() ? aRet : VCLXGraphicControl::queryInterface( rType )); 1099 } 1100 1101 // ::com::sun::star::lang::XTypeProvider 1102 IMPL_XTYPEPROVIDER_START( VCLXRadioButton ) 1103 getCppuType( ( ::com::sun::star::uno::Reference< ::com::sun::star::awt::XRadioButton>* ) NULL ), 1104 getCppuType( ( ::com::sun::star::uno::Reference< ::com::sun::star::awt::XButton>* ) NULL ), 1105 VCLXGraphicControl::getTypes() 1106 IMPL_XTYPEPROVIDER_END 1107 1108 ::com::sun::star::uno::Reference< ::com::sun::star::accessibility::XAccessibleContext > VCLXRadioButton::CreateAccessibleContext() 1109 { 1110 return getAccessibleFactory().createAccessibleContext( this ); 1111 } 1112 1113 void VCLXRadioButton::dispose() throw(::com::sun::star::uno::RuntimeException) 1114 { 1115 ::vos::OGuard aGuard( GetMutex() ); 1116 1117 ::com::sun::star::lang::EventObject aObj; 1118 aObj.Source = (::cppu::OWeakObject*)this; 1119 maItemListeners.disposeAndClear( aObj ); 1120 VCLXGraphicControl::dispose(); 1121 } 1122 1123 void VCLXRadioButton::setProperty( const ::rtl::OUString& PropertyName, const ::com::sun::star::uno::Any& Value) throw(::com::sun::star::uno::RuntimeException) 1124 { 1125 ::vos::OGuard aGuard( GetMutex() ); 1126 1127 RadioButton* pButton = (RadioButton*)GetWindow(); 1128 if ( pButton ) 1129 { 1130 sal_uInt16 nPropType = GetPropertyId( PropertyName ); 1131 switch ( nPropType ) 1132 { 1133 case BASEPROPERTY_VISUALEFFECT: 1134 ::toolkit::setVisualEffect( Value, pButton ); 1135 break; 1136 1137 case BASEPROPERTY_STATE: 1138 { 1139 sal_Int16 n = sal_Int16(); 1140 if ( Value >>= n ) 1141 { 1142 sal_Bool b = n ? sal_True : sal_False; 1143 if ( pButton->IsRadioCheckEnabled() ) 1144 pButton->Check( b ); 1145 else 1146 pButton->SetState( b ); 1147 } 1148 } 1149 break; 1150 case BASEPROPERTY_AUTOTOGGLE: 1151 { 1152 sal_Bool b = sal_Bool(); 1153 if ( Value >>= b ) 1154 pButton->EnableRadioCheck( b ); 1155 } 1156 break; 1157 default: 1158 { 1159 VCLXGraphicControl::setProperty( PropertyName, Value ); 1160 } 1161 } 1162 } 1163 } 1164 1165 ::com::sun::star::uno::Any VCLXRadioButton::getProperty( const ::rtl::OUString& PropertyName ) throw(::com::sun::star::uno::RuntimeException) 1166 { 1167 ::vos::OGuard aGuard( GetMutex() ); 1168 1169 ::com::sun::star::uno::Any aProp; 1170 RadioButton* pButton = (RadioButton*)GetWindow(); 1171 if ( pButton ) 1172 { 1173 sal_uInt16 nPropType = GetPropertyId( PropertyName ); 1174 switch ( nPropType ) 1175 { 1176 case BASEPROPERTY_VISUALEFFECT: 1177 aProp = ::toolkit::getVisualEffect( pButton ); 1178 break; 1179 case BASEPROPERTY_STATE: 1180 aProp <<= (sal_Int16) ( pButton->IsChecked() ? 1 : 0 ); 1181 break; 1182 case BASEPROPERTY_AUTOTOGGLE: 1183 aProp <<= (sal_Bool) pButton->IsRadioCheckEnabled(); 1184 break; 1185 default: 1186 { 1187 aProp <<= VCLXGraphicControl::getProperty( PropertyName ); 1188 } 1189 } 1190 } 1191 return aProp; 1192 } 1193 1194 void VCLXRadioButton::addItemListener( const ::com::sun::star::uno::Reference< ::com::sun::star::awt::XItemListener > & l ) throw(::com::sun::star::uno::RuntimeException) 1195 { 1196 ::vos::OGuard aGuard( GetMutex() ); 1197 maItemListeners.addInterface( l ); 1198 } 1199 1200 void VCLXRadioButton::removeItemListener( const ::com::sun::star::uno::Reference< ::com::sun::star::awt::XItemListener > & l ) throw(::com::sun::star::uno::RuntimeException) 1201 { 1202 ::vos::OGuard aGuard( GetMutex() ); 1203 maItemListeners.removeInterface( l ); 1204 } 1205 1206 void VCLXRadioButton::addActionListener( const ::com::sun::star::uno::Reference< ::com::sun::star::awt::XActionListener > & l )throw(::com::sun::star::uno::RuntimeException) 1207 { 1208 ::vos::OGuard aGuard( GetMutex() ); 1209 maActionListeners.addInterface( l ); 1210 } 1211 1212 void VCLXRadioButton::removeActionListener( const ::com::sun::star::uno::Reference< ::com::sun::star::awt::XActionListener > & l ) throw(::com::sun::star::uno::RuntimeException) 1213 { 1214 ::vos::OGuard aGuard( GetMutex() ); 1215 maActionListeners.removeInterface( l ); 1216 } 1217 1218 void VCLXRadioButton::setLabel( const ::rtl::OUString& rLabel ) throw(::com::sun::star::uno::RuntimeException) 1219 { 1220 ::vos::OGuard aGuard( GetMutex() ); 1221 1222 Window* pWindow = GetWindow(); 1223 if ( pWindow ) 1224 pWindow->SetText( rLabel ); 1225 } 1226 1227 void VCLXRadioButton::setActionCommand( const ::rtl::OUString& rCommand ) throw(::com::sun::star::uno::RuntimeException) 1228 { 1229 ::vos::OGuard aGuard( GetMutex() ); 1230 maActionCommand = rCommand; 1231 } 1232 1233 void VCLXRadioButton::setState( sal_Bool b ) throw(::com::sun::star::uno::RuntimeException) 1234 { 1235 ::vos::OGuard aGuard( GetMutex() ); 1236 1237 RadioButton* pRadioButton = (RadioButton*)GetWindow(); 1238 if ( pRadioButton) 1239 { 1240 pRadioButton->Check( b ); 1241 // #102717# item listeners are called, but not C++ click listeners in StarOffice code => call click hdl 1242 // But this is needed in old code because Accessibility API uses it. 1243 // pRadioButton->GetClickHdl().Call( pRadioButton ); 1244 1245 // #107218# Call same virtual methods and listeners like VCL would do after user interaction 1246 SetSynthesizingVCLEvent( sal_True ); 1247 pRadioButton->Click(); 1248 SetSynthesizingVCLEvent( sal_False ); 1249 } 1250 } 1251 1252 sal_Bool VCLXRadioButton::getState() throw(::com::sun::star::uno::RuntimeException) 1253 { 1254 ::vos::OGuard aGuard( GetMutex() ); 1255 1256 RadioButton* pRadioButton = (RadioButton*)GetWindow(); 1257 return pRadioButton ? pRadioButton->IsChecked() : sal_False; 1258 } 1259 1260 ::com::sun::star::awt::Size VCLXRadioButton::getMinimumSize( ) throw(::com::sun::star::uno::RuntimeException) 1261 { 1262 ::vos::OGuard aGuard( GetMutex() ); 1263 1264 Size aSz; 1265 RadioButton* pRadioButton = (RadioButton*) GetWindow(); 1266 if ( pRadioButton ) 1267 aSz = pRadioButton->CalcMinimumSize(); 1268 return AWTSize(aSz); 1269 } 1270 1271 ::com::sun::star::awt::Size VCLXRadioButton::getPreferredSize( ) throw(::com::sun::star::uno::RuntimeException) 1272 { 1273 return getMinimumSize(); 1274 } 1275 1276 ::com::sun::star::awt::Size VCLXRadioButton::calcAdjustedSize( const ::com::sun::star::awt::Size& rNewSize ) throw(::com::sun::star::uno::RuntimeException) 1277 { 1278 ::vos::OGuard aGuard( GetMutex() ); 1279 1280 Size aSz = VCLSize(rNewSize); 1281 RadioButton* pRadioButton = (RadioButton*) GetWindow(); 1282 if ( pRadioButton ) 1283 { 1284 Size aMinSz = pRadioButton->CalcMinimumSize(); 1285 if ( ( aSz.Width() > aMinSz.Width() ) && ( aSz.Height() < aMinSz.Height() ) ) 1286 aSz.Height() = aMinSz.Height(); 1287 else 1288 aSz = aMinSz; 1289 } 1290 return AWTSize(aSz); 1291 } 1292 1293 void VCLXRadioButton::ProcessWindowEvent( const VclWindowEvent& rVclWindowEvent ) 1294 { 1295 ::com::sun::star::uno::Reference< ::com::sun::star::awt::XWindow > xKeepAlive( this ); 1296 // since we call listeners below, there is a potential that we will be destroyed 1297 // in during the listener call. To prevent the resulting crashs, we keep us 1298 // alive as long as we're here 1299 // #20178# - 2003-10-01 - fs@openoffice.org 1300 1301 switch ( rVclWindowEvent.GetId() ) 1302 { 1303 case VCLEVENT_BUTTON_CLICK: 1304 if ( !IsSynthesizingVCLEvent() && maActionListeners.getLength() ) 1305 { 1306 ::com::sun::star::awt::ActionEvent aEvent; 1307 aEvent.Source = (::cppu::OWeakObject*)this; 1308 aEvent.ActionCommand = maActionCommand; 1309 maActionListeners.actionPerformed( aEvent ); 1310 } 1311 ImplClickedOrToggled( sal_False ); 1312 break; 1313 1314 case VCLEVENT_RADIOBUTTON_TOGGLE: 1315 ImplClickedOrToggled( sal_True ); 1316 break; 1317 1318 default: 1319 VCLXGraphicControl::ProcessWindowEvent( rVclWindowEvent ); 1320 break; 1321 } 1322 } 1323 1324 void VCLXRadioButton::ImplClickedOrToggled( sal_Bool bToggled ) 1325 { 1326 // In the formulars, RadioChecked is not enabled, call itemStateChanged only for click 1327 // In the dialog editor, RadioChecked is enabled, call itemStateChanged only for bToggled 1328 RadioButton* pRadioButton = (RadioButton*)GetWindow(); 1329 if ( pRadioButton && ( pRadioButton->IsRadioCheckEnabled() == bToggled ) && ( bToggled || pRadioButton->IsStateChanged() ) && maItemListeners.getLength() ) 1330 { 1331 ::com::sun::star::awt::ItemEvent aEvent; 1332 aEvent.Source = (::cppu::OWeakObject*)this; 1333 aEvent.Highlighted = sal_False; 1334 aEvent.Selected = pRadioButton->IsChecked(); 1335 maItemListeners.itemStateChanged( aEvent ); 1336 } 1337 } 1338 1339 ::com::sun::star::uno::Reference< ::com::sun::star::uno::XInterface > VCLXRadioButton::getFirstActionListener () 1340 { 1341 if (!maItemListeners.getLength ()) 1342 return ::com::sun::star::uno::Reference< ::com::sun::star::uno::XInterface > (); 1343 return maActionListeners.getElements()[0]; 1344 } 1345 1346 // ---------------------------------------------------- 1347 // class VCLXSpinField 1348 // ---------------------------------------------------- 1349 void VCLXSpinField::ImplGetPropertyIds( std::list< sal_uInt16 > &rIds ) 1350 { 1351 PushPropertyIds( rIds, 1352 BASEPROPERTY_MOUSE_WHEEL_BEHAVIOUR, 1353 0 ); 1354 VCLXEdit::ImplGetPropertyIds( rIds ); 1355 } 1356 1357 VCLXSpinField::VCLXSpinField() : maSpinListeners( *this ) 1358 { 1359 } 1360 1361 // ::com::sun::star::uno::XInterface 1362 ::com::sun::star::uno::Any VCLXSpinField::queryInterface( const ::com::sun::star::uno::Type & rType ) throw(::com::sun::star::uno::RuntimeException) 1363 { 1364 ::com::sun::star::uno::Any aRet = ::cppu::queryInterface( rType, 1365 SAL_STATIC_CAST( ::com::sun::star::awt::XSpinField*, this ) ); 1366 return (aRet.hasValue() ? aRet : VCLXEdit::queryInterface( rType )); 1367 } 1368 1369 // ::com::sun::star::lang::XTypeProvider 1370 IMPL_XTYPEPROVIDER_START( VCLXSpinField ) 1371 getCppuType( ( ::com::sun::star::uno::Reference< ::com::sun::star::awt::XSpinField>* ) NULL ), 1372 VCLXEdit::getTypes() 1373 IMPL_XTYPEPROVIDER_END 1374 1375 void VCLXSpinField::addSpinListener( const ::com::sun::star::uno::Reference< ::com::sun::star::awt::XSpinListener > & l ) throw(::com::sun::star::uno::RuntimeException) 1376 { 1377 ::vos::OGuard aGuard( GetMutex() ); 1378 maSpinListeners.addInterface( l ); 1379 } 1380 1381 void VCLXSpinField::removeSpinListener( const ::com::sun::star::uno::Reference< ::com::sun::star::awt::XSpinListener > & l ) throw(::com::sun::star::uno::RuntimeException) 1382 { 1383 ::vos::OGuard aGuard( GetMutex() ); 1384 maSpinListeners.removeInterface( l ); 1385 } 1386 1387 void VCLXSpinField::up() throw(::com::sun::star::uno::RuntimeException) 1388 { 1389 ::vos::OGuard aGuard( GetMutex() ); 1390 1391 SpinField* pSpinField = (SpinField*) GetWindow(); 1392 if ( pSpinField ) 1393 pSpinField->Up(); 1394 } 1395 1396 void VCLXSpinField::down() throw(::com::sun::star::uno::RuntimeException) 1397 { 1398 ::vos::OGuard aGuard( GetMutex() ); 1399 1400 SpinField* pSpinField = (SpinField*) GetWindow(); 1401 if ( pSpinField ) 1402 pSpinField->Down(); 1403 } 1404 1405 void VCLXSpinField::first() throw(::com::sun::star::uno::RuntimeException) 1406 { 1407 ::vos::OGuard aGuard( GetMutex() ); 1408 1409 SpinField* pSpinField = (SpinField*) GetWindow(); 1410 if ( pSpinField ) 1411 pSpinField->First(); 1412 } 1413 1414 void VCLXSpinField::last() throw(::com::sun::star::uno::RuntimeException) 1415 { 1416 ::vos::OGuard aGuard( GetMutex() ); 1417 1418 SpinField* pSpinField = (SpinField*) GetWindow(); 1419 if ( pSpinField ) 1420 pSpinField->Last(); 1421 } 1422 1423 void VCLXSpinField::enableRepeat( sal_Bool bRepeat ) throw(::com::sun::star::uno::RuntimeException) 1424 { 1425 ::vos::OGuard aGuard( GetMutex() ); 1426 1427 Window* pWindow = GetWindow(); 1428 if ( pWindow ) 1429 { 1430 WinBits nStyle = pWindow->GetStyle(); 1431 if ( bRepeat ) 1432 nStyle |= WB_REPEAT; 1433 else 1434 nStyle &= ~WB_REPEAT; 1435 pWindow->SetStyle( nStyle ); 1436 } 1437 } 1438 1439 void VCLXSpinField::ProcessWindowEvent( const VclWindowEvent& rVclWindowEvent ) 1440 { 1441 switch ( rVclWindowEvent.GetId() ) 1442 { 1443 case VCLEVENT_SPINFIELD_UP: 1444 case VCLEVENT_SPINFIELD_DOWN: 1445 case VCLEVENT_SPINFIELD_FIRST: 1446 case VCLEVENT_SPINFIELD_LAST: 1447 { 1448 ::com::sun::star::uno::Reference< ::com::sun::star::awt::XWindow > xKeepAlive( this ); 1449 // since we call listeners below, there is a potential that we will be destroyed 1450 // in during the listener call. To prevent the resulting crashs, we keep us 1451 // alive as long as we're here 1452 // #20178# - 2003-10-01 - fs@openoffice.org 1453 1454 if ( maSpinListeners.getLength() ) 1455 { 1456 ::com::sun::star::awt::SpinEvent aEvent; 1457 aEvent.Source = (::cppu::OWeakObject*)this; 1458 switch ( rVclWindowEvent.GetId() ) 1459 { 1460 case VCLEVENT_SPINFIELD_UP: maSpinListeners.up( aEvent ); 1461 break; 1462 case VCLEVENT_SPINFIELD_DOWN: maSpinListeners.down( aEvent ); 1463 break; 1464 case VCLEVENT_SPINFIELD_FIRST: maSpinListeners.first( aEvent ); 1465 break; 1466 case VCLEVENT_SPINFIELD_LAST: maSpinListeners.last( aEvent ); 1467 break; 1468 } 1469 1470 } 1471 } 1472 break; 1473 1474 default: 1475 VCLXEdit::ProcessWindowEvent( rVclWindowEvent ); 1476 break; 1477 } 1478 } 1479 1480 1481 // ---------------------------------------------------- 1482 // class VCLXListBox 1483 // ---------------------------------------------------- 1484 void VCLXListBox::ImplGetPropertyIds( std::list< sal_uInt16 > &rIds ) 1485 { 1486 PushPropertyIds( rIds, 1487 BASEPROPERTY_BACKGROUNDCOLOR, 1488 BASEPROPERTY_BORDER, 1489 BASEPROPERTY_BORDERCOLOR, 1490 BASEPROPERTY_DEFAULTCONTROL, 1491 BASEPROPERTY_DROPDOWN, 1492 BASEPROPERTY_ENABLED, 1493 BASEPROPERTY_ENABLEVISIBLE, 1494 BASEPROPERTY_FONTDESCRIPTOR, 1495 BASEPROPERTY_HELPTEXT, 1496 BASEPROPERTY_HELPURL, 1497 BASEPROPERTY_LINECOUNT, 1498 BASEPROPERTY_MULTISELECTION, 1499 BASEPROPERTY_MULTISELECTION_SIMPLEMODE, 1500 BASEPROPERTY_ITEM_SEPARATOR_POS, 1501 BASEPROPERTY_PRINTABLE, 1502 BASEPROPERTY_SELECTEDITEMS, 1503 BASEPROPERTY_STRINGITEMLIST, 1504 BASEPROPERTY_TABSTOP, 1505 BASEPROPERTY_READONLY, 1506 BASEPROPERTY_ALIGN, 1507 BASEPROPERTY_WRITING_MODE, 1508 BASEPROPERTY_CONTEXT_WRITING_MODE, 1509 BASEPROPERTY_REFERENCE_DEVICE, 1510 BASEPROPERTY_MOUSE_WHEEL_BEHAVIOUR, 1511 0); 1512 VCLXWindow::ImplGetPropertyIds( rIds ); 1513 } 1514 1515 1516 VCLXListBox::VCLXListBox() 1517 : maActionListeners( *this ), 1518 maItemListeners( *this ) 1519 { 1520 } 1521 1522 void VCLXListBox::dispose() throw(::com::sun::star::uno::RuntimeException) 1523 { 1524 ::vos::OGuard aGuard( GetMutex() ); 1525 1526 ::com::sun::star::lang::EventObject aObj; 1527 aObj.Source = (::cppu::OWeakObject*)this; 1528 maItemListeners.disposeAndClear( aObj ); 1529 maActionListeners.disposeAndClear( aObj ); 1530 VCLXWindow::dispose(); 1531 } 1532 1533 void VCLXListBox::addItemListener( const ::com::sun::star::uno::Reference< ::com::sun::star::awt::XItemListener > & l ) throw(::com::sun::star::uno::RuntimeException) 1534 { 1535 ::vos::OGuard aGuard( GetMutex() ); 1536 maItemListeners.addInterface( l ); 1537 } 1538 1539 void VCLXListBox::removeItemListener( const ::com::sun::star::uno::Reference< ::com::sun::star::awt::XItemListener > & l ) throw(::com::sun::star::uno::RuntimeException) 1540 { 1541 ::vos::OGuard aGuard( GetMutex() ); 1542 maItemListeners.removeInterface( l ); 1543 } 1544 1545 void VCLXListBox::addActionListener( const ::com::sun::star::uno::Reference< ::com::sun::star::awt::XActionListener > & l ) throw(::com::sun::star::uno::RuntimeException) 1546 { 1547 ::vos::OGuard aGuard( GetMutex() ); 1548 maActionListeners.addInterface( l ); 1549 } 1550 1551 void VCLXListBox::removeActionListener( const ::com::sun::star::uno::Reference< ::com::sun::star::awt::XActionListener > & l ) throw(::com::sun::star::uno::RuntimeException) 1552 { 1553 ::vos::OGuard aGuard( GetMutex() ); 1554 maActionListeners.removeInterface( l ); 1555 } 1556 1557 void VCLXListBox::addItem( const ::rtl::OUString& aItem, sal_Int16 nPos ) throw(::com::sun::star::uno::RuntimeException) 1558 { 1559 ::vos::OGuard aGuard( GetMutex() ); 1560 1561 ListBox* pBox = (ListBox*) GetWindow(); 1562 if ( pBox ) 1563 pBox->InsertEntry( aItem, nPos ); 1564 } 1565 1566 void VCLXListBox::addItems( const ::com::sun::star::uno::Sequence< ::rtl::OUString>& aItems, sal_Int16 nPos ) throw(::com::sun::star::uno::RuntimeException) 1567 { 1568 ::vos::OGuard aGuard( GetMutex() ); 1569 1570 ListBox* pBox = (ListBox*) GetWindow(); 1571 if ( pBox ) 1572 { 1573 sal_uInt16 nP = nPos; 1574 const ::rtl::OUString* pItems = aItems.getConstArray(); 1575 const ::rtl::OUString* pItemsEnd = aItems.getConstArray() + aItems.getLength(); 1576 while ( pItems != pItemsEnd ) 1577 { 1578 if ( (sal_uInt16)nP == 0xFFFF ) 1579 { 1580 OSL_ENSURE( false, "VCLXListBox::addItems: too many entries!" ); 1581 // skip remaining entries, list cannot hold them, anyway 1582 break; 1583 } 1584 1585 pBox->InsertEntry( *pItems++, nP++ ); 1586 } 1587 } 1588 } 1589 1590 void VCLXListBox::removeItems( sal_Int16 nPos, sal_Int16 nCount ) throw(::com::sun::star::uno::RuntimeException) 1591 { 1592 ::vos::OGuard aGuard( GetMutex() ); 1593 1594 ListBox* pBox = (ListBox*) GetWindow(); 1595 if ( pBox ) 1596 { 1597 for ( sal_uInt16 n = nCount; n; ) 1598 pBox->RemoveEntry( nPos + (--n) ); 1599 } 1600 } 1601 1602 sal_Int16 VCLXListBox::getItemCount() throw(::com::sun::star::uno::RuntimeException) 1603 { 1604 ::vos::OGuard aGuard( GetMutex() ); 1605 1606 ListBox* pBox = (ListBox*) GetWindow(); 1607 return pBox ? pBox->GetEntryCount() : 0; 1608 } 1609 1610 ::rtl::OUString VCLXListBox::getItem( sal_Int16 nPos ) throw(::com::sun::star::uno::RuntimeException) 1611 { 1612 ::vos::OGuard aGuard( GetMutex() ); 1613 1614 String aItem; 1615 ListBox* pBox = (ListBox*) GetWindow(); 1616 if ( pBox ) 1617 aItem = pBox->GetEntry( nPos ); 1618 return aItem; 1619 } 1620 1621 ::com::sun::star::uno::Sequence< ::rtl::OUString> VCLXListBox::getItems() throw(::com::sun::star::uno::RuntimeException) 1622 { 1623 ::vos::OGuard aGuard( GetMutex() ); 1624 1625 ::com::sun::star::uno::Sequence< ::rtl::OUString> aSeq; 1626 ListBox* pBox = (ListBox*) GetWindow(); 1627 if ( pBox ) 1628 { 1629 sal_uInt16 nEntries = pBox->GetEntryCount(); 1630 aSeq = ::com::sun::star::uno::Sequence< ::rtl::OUString>( nEntries ); 1631 for ( sal_uInt16 n = nEntries; n; ) 1632 { 1633 --n; 1634 aSeq.getArray()[n] = ::rtl::OUString( pBox->GetEntry( n ) ); 1635 } 1636 } 1637 return aSeq; 1638 } 1639 1640 sal_Int16 VCLXListBox::getSelectedItemPos() throw(::com::sun::star::uno::RuntimeException) 1641 { 1642 ::vos::OGuard aGuard( GetMutex() ); 1643 1644 ListBox* pBox = (ListBox*) GetWindow(); 1645 return pBox ? pBox->GetSelectEntryPos() : 0; 1646 } 1647 1648 ::com::sun::star::uno::Sequence<sal_Int16> VCLXListBox::getSelectedItemsPos() throw(::com::sun::star::uno::RuntimeException) 1649 { 1650 ::vos::OGuard aGuard( GetMutex() ); 1651 1652 ::com::sun::star::uno::Sequence<sal_Int16> aSeq; 1653 ListBox* pBox = (ListBox*) GetWindow(); 1654 if ( pBox ) 1655 { 1656 sal_uInt16 nSelEntries = pBox->GetSelectEntryCount(); 1657 aSeq = ::com::sun::star::uno::Sequence<sal_Int16>( nSelEntries ); 1658 for ( sal_uInt16 n = 0; n < nSelEntries; n++ ) 1659 aSeq.getArray()[n] = pBox->GetSelectEntryPos( n ); 1660 } 1661 return aSeq; 1662 } 1663 1664 ::rtl::OUString VCLXListBox::getSelectedItem() throw(::com::sun::star::uno::RuntimeException) 1665 { 1666 ::vos::OGuard aGuard( GetMutex() ); 1667 1668 String aItem; 1669 ListBox* pBox = (ListBox*) GetWindow(); 1670 if ( pBox ) 1671 aItem = pBox->GetSelectEntry(); 1672 return aItem; 1673 } 1674 1675 ::com::sun::star::uno::Sequence< ::rtl::OUString> VCLXListBox::getSelectedItems() throw(::com::sun::star::uno::RuntimeException) 1676 { 1677 ::vos::OGuard aGuard( GetMutex() ); 1678 1679 ::com::sun::star::uno::Sequence< ::rtl::OUString> aSeq; 1680 ListBox* pBox = (ListBox*) GetWindow(); 1681 if ( pBox ) 1682 { 1683 sal_uInt16 nSelEntries = pBox->GetSelectEntryCount(); 1684 aSeq = ::com::sun::star::uno::Sequence< ::rtl::OUString>( nSelEntries ); 1685 for ( sal_uInt16 n = 0; n < nSelEntries; n++ ) 1686 aSeq.getArray()[n] = ::rtl::OUString( pBox->GetSelectEntry( n ) ); 1687 } 1688 return aSeq; 1689 } 1690 1691 void VCLXListBox::selectItemPos( sal_Int16 nPos, sal_Bool bSelect ) throw(::com::sun::star::uno::RuntimeException) 1692 { 1693 ::vos::OGuard aGuard( GetMutex() ); 1694 1695 ListBox* pBox = (ListBox*) GetWindow(); 1696 if ( pBox && ( pBox->IsEntryPosSelected( nPos ) != bSelect ) ) 1697 { 1698 pBox->SelectEntryPos( nPos, bSelect ); 1699 1700 // VCL doesn't call select handler after API call. 1701 // ImplCallItemListeners(); 1702 1703 // #107218# Call same listeners like VCL would do after user interaction 1704 SetSynthesizingVCLEvent( sal_True ); 1705 pBox->Select(); 1706 SetSynthesizingVCLEvent( sal_False ); 1707 } 1708 } 1709 1710 void VCLXListBox::selectItemsPos( const ::com::sun::star::uno::Sequence<sal_Int16>& aPositions, sal_Bool bSelect ) throw(::com::sun::star::uno::RuntimeException) 1711 { 1712 ::vos::OGuard aGuard( GetMutex() ); 1713 1714 ListBox* pBox = (ListBox*) GetWindow(); 1715 if ( pBox ) 1716 { 1717 sal_Bool bChanged = sal_False; 1718 for ( sal_uInt16 n = (sal_uInt16)aPositions.getLength(); n; ) 1719 { 1720 sal_uInt16 nPos = (sal_uInt16) aPositions.getConstArray()[--n]; 1721 if ( pBox->IsEntryPosSelected( nPos ) != bSelect ) 1722 { 1723 pBox->SelectEntryPos( nPos, bSelect ); 1724 bChanged = sal_True; 1725 } 1726 } 1727 1728 if ( bChanged ) 1729 { 1730 // VCL doesn't call select handler after API call. 1731 // ImplCallItemListeners(); 1732 1733 // #107218# Call same listeners like VCL would do after user interaction 1734 SetSynthesizingVCLEvent( sal_True ); 1735 pBox->Select(); 1736 SetSynthesizingVCLEvent( sal_False ); 1737 } 1738 } 1739 } 1740 1741 void VCLXListBox::selectItem( const ::rtl::OUString& rItemText, sal_Bool bSelect ) throw(::com::sun::star::uno::RuntimeException) 1742 { 1743 ::vos::OGuard aGuard( GetMutex() ); 1744 1745 ListBox* pBox = (ListBox*) GetWindow(); 1746 if ( pBox ) 1747 { 1748 String aItemText( rItemText ); 1749 selectItemPos( pBox->GetEntryPos( aItemText ), bSelect ); 1750 } 1751 } 1752 1753 1754 void VCLXListBox::setDropDownLineCount( sal_Int16 nLines ) throw(::com::sun::star::uno::RuntimeException) 1755 { 1756 ::vos::OGuard aGuard( GetMutex() ); 1757 1758 ListBox* pBox = (ListBox*) GetWindow(); 1759 if ( pBox ) 1760 pBox->SetDropDownLineCount( nLines ); 1761 } 1762 1763 sal_Int16 VCLXListBox::getDropDownLineCount() throw(::com::sun::star::uno::RuntimeException) 1764 { 1765 ::vos::OGuard aGuard( GetMutex() ); 1766 1767 sal_Int16 nLines = 0; 1768 ListBox* pBox = (ListBox*) GetWindow(); 1769 if ( pBox ) 1770 nLines = pBox->GetDropDownLineCount(); 1771 return nLines; 1772 } 1773 1774 sal_Bool VCLXListBox::isMutipleMode() throw(::com::sun::star::uno::RuntimeException) 1775 { 1776 ::vos::OGuard aGuard( GetMutex() ); 1777 1778 sal_Bool bMulti = sal_False; 1779 ListBox* pBox = (ListBox*) GetWindow(); 1780 if ( pBox ) 1781 bMulti = pBox->IsMultiSelectionEnabled(); 1782 return bMulti; 1783 } 1784 1785 void VCLXListBox::setMultipleMode( sal_Bool bMulti ) throw(::com::sun::star::uno::RuntimeException) 1786 { 1787 ::vos::OGuard aGuard( GetMutex() ); 1788 1789 ListBox* pBox = (ListBox*) GetWindow(); 1790 if ( pBox ) 1791 pBox->EnableMultiSelection( bMulti ); 1792 } 1793 1794 void VCLXListBox::makeVisible( sal_Int16 nEntry ) throw(::com::sun::star::uno::RuntimeException) 1795 { 1796 ::vos::OGuard aGuard( GetMutex() ); 1797 1798 ListBox* pBox = (ListBox*) GetWindow(); 1799 if ( pBox ) 1800 pBox->SetTopEntry( nEntry ); 1801 } 1802 1803 void VCLXListBox::ProcessWindowEvent( const VclWindowEvent& rVclWindowEvent ) 1804 { 1805 ::com::sun::star::uno::Reference< ::com::sun::star::awt::XWindow > xKeepAlive( this ); 1806 // since we call listeners below, there is a potential that we will be destroyed 1807 // in during the listener call. To prevent the resulting crashs, we keep us 1808 // alive as long as we're here 1809 // #20178# - 2003-10-01 - fs@openoffice.org 1810 1811 switch ( rVclWindowEvent.GetId() ) 1812 { 1813 case VCLEVENT_LISTBOX_SELECT: 1814 { 1815 ListBox* pListBox = (ListBox*)GetWindow(); 1816 1817 if( pListBox ) 1818 { 1819 sal_Bool bDropDown = ( pListBox->GetStyle() & WB_DROPDOWN ) ? sal_True : sal_False; 1820 if ( bDropDown && !IsSynthesizingVCLEvent() && maActionListeners.getLength() ) 1821 { 1822 // Bei DropDown den ActionListener rufen... 1823 ::com::sun::star::awt::ActionEvent aEvent; 1824 aEvent.Source = (::cppu::OWeakObject*)this; 1825 aEvent.ActionCommand = pListBox->GetSelectEntry(); 1826 maActionListeners.actionPerformed( aEvent ); 1827 } 1828 1829 if ( maItemListeners.getLength() ) 1830 { 1831 ImplCallItemListeners(); 1832 } 1833 } 1834 } 1835 break; 1836 1837 case VCLEVENT_LISTBOX_DOUBLECLICK: 1838 if ( GetWindow() && maActionListeners.getLength() ) 1839 { 1840 ::com::sun::star::awt::ActionEvent aEvent; 1841 aEvent.Source = (::cppu::OWeakObject*)this; 1842 aEvent.ActionCommand = ((ListBox*)GetWindow())->GetSelectEntry(); 1843 maActionListeners.actionPerformed( aEvent ); 1844 } 1845 break; 1846 1847 default: 1848 VCLXWindow::ProcessWindowEvent( rVclWindowEvent ); 1849 break; 1850 } 1851 } 1852 1853 ::com::sun::star::uno::Reference< ::com::sun::star::accessibility::XAccessibleContext > VCLXListBox::CreateAccessibleContext() 1854 { 1855 ::vos::OGuard aGuard( GetMutex() ); 1856 1857 return getAccessibleFactory().createAccessibleContext( this ); 1858 } 1859 1860 void VCLXListBox::setProperty( const ::rtl::OUString& PropertyName, const ::com::sun::star::uno::Any& Value) throw(::com::sun::star::uno::RuntimeException) 1861 { 1862 ::vos::OGuard aGuard( GetMutex() ); 1863 1864 ListBox* pListBox = (ListBox*)GetWindow(); 1865 if ( pListBox ) 1866 { 1867 sal_uInt16 nPropType = GetPropertyId( PropertyName ); 1868 switch ( nPropType ) 1869 { 1870 case BASEPROPERTY_ITEM_SEPARATOR_POS: 1871 { 1872 sal_Int16 nSeparatorPos(0); 1873 if ( Value >>= nSeparatorPos ) 1874 pListBox->SetSeparatorPos( nSeparatorPos ); 1875 } 1876 break; 1877 case BASEPROPERTY_READONLY: 1878 { 1879 sal_Bool b = sal_Bool(); 1880 if ( Value >>= b ) 1881 pListBox->SetReadOnly( b); 1882 } 1883 break; 1884 case BASEPROPERTY_MULTISELECTION: 1885 { 1886 sal_Bool b = sal_Bool(); 1887 if ( Value >>= b ) 1888 pListBox->EnableMultiSelection( b ); 1889 } 1890 break; 1891 case BASEPROPERTY_MULTISELECTION_SIMPLEMODE: 1892 ::toolkit::adjustBooleanWindowStyle( Value, pListBox, WB_SIMPLEMODE, sal_False ); 1893 break; 1894 case BASEPROPERTY_LINECOUNT: 1895 { 1896 sal_Int16 n = sal_Int16(); 1897 if ( Value >>= n ) 1898 pListBox->SetDropDownLineCount( n ); 1899 } 1900 break; 1901 case BASEPROPERTY_STRINGITEMLIST: 1902 { 1903 ::com::sun::star::uno::Sequence< ::rtl::OUString> aItems; 1904 if ( Value >>= aItems ) 1905 { 1906 pListBox->Clear(); 1907 addItems( aItems, 0 ); 1908 } 1909 } 1910 break; 1911 case BASEPROPERTY_SELECTEDITEMS: 1912 { 1913 ::com::sun::star::uno::Sequence<sal_Int16> aItems; 1914 if ( Value >>= aItems ) 1915 { 1916 for ( sal_uInt16 n = pListBox->GetEntryCount(); n; ) 1917 pListBox->SelectEntryPos( --n, sal_False ); 1918 1919 if ( aItems.getLength() ) 1920 selectItemsPos( aItems, sal_True ); 1921 else 1922 pListBox->SetNoSelection(); 1923 1924 if ( !pListBox->GetSelectEntryCount() ) 1925 pListBox->SetTopEntry( 0 ); 1926 } 1927 } 1928 break; 1929 default: 1930 { 1931 VCLXWindow::setProperty( PropertyName, Value ); 1932 } 1933 } 1934 } 1935 } 1936 1937 ::com::sun::star::uno::Any VCLXListBox::getProperty( const ::rtl::OUString& PropertyName ) throw(::com::sun::star::uno::RuntimeException) 1938 { 1939 ::vos::OGuard aGuard( GetMutex() ); 1940 1941 ::com::sun::star::uno::Any aProp; 1942 ListBox* pListBox = (ListBox*)GetWindow(); 1943 if ( pListBox ) 1944 { 1945 sal_uInt16 nPropType = GetPropertyId( PropertyName ); 1946 switch ( nPropType ) 1947 { 1948 case BASEPROPERTY_ITEM_SEPARATOR_POS: 1949 aProp <<= sal_Int16( pListBox->GetSeparatorPos() ); 1950 break; 1951 case BASEPROPERTY_READONLY: 1952 { 1953 aProp <<= (sal_Bool) pListBox->IsReadOnly(); 1954 } 1955 break; 1956 case BASEPROPERTY_MULTISELECTION: 1957 { 1958 aProp <<= (sal_Bool) pListBox->IsMultiSelectionEnabled(); 1959 } 1960 break; 1961 case BASEPROPERTY_MULTISELECTION_SIMPLEMODE: 1962 { 1963 aProp <<= (sal_Bool)( ( pListBox->GetStyle() & WB_SIMPLEMODE ) == 0 ); 1964 } 1965 break; 1966 case BASEPROPERTY_LINECOUNT: 1967 { 1968 aProp <<= (sal_Int16) pListBox->GetDropDownLineCount(); 1969 } 1970 break; 1971 case BASEPROPERTY_STRINGITEMLIST: 1972 { 1973 sal_uInt16 nItems = pListBox->GetEntryCount(); 1974 ::com::sun::star::uno::Sequence< ::rtl::OUString> aSeq( nItems ); 1975 ::rtl::OUString* pStrings = aSeq.getArray(); 1976 for ( sal_uInt16 n = 0; n < nItems; n++ ) 1977 pStrings[n] = pListBox->GetEntry( n ); 1978 aProp <<= aSeq; 1979 1980 } 1981 break; 1982 default: 1983 { 1984 aProp <<= VCLXWindow::getProperty( PropertyName ); 1985 } 1986 } 1987 } 1988 return aProp; 1989 } 1990 1991 ::com::sun::star::awt::Size VCLXListBox::getMinimumSize( ) throw(::com::sun::star::uno::RuntimeException) 1992 { 1993 ::vos::OGuard aGuard( GetMutex() ); 1994 1995 Size aSz; 1996 ListBox* pListBox = (ListBox*) GetWindow(); 1997 if ( pListBox ) 1998 aSz = pListBox->CalcMinimumSize(); 1999 return AWTSize(aSz); 2000 } 2001 2002 ::com::sun::star::awt::Size VCLXListBox::getPreferredSize( ) throw(::com::sun::star::uno::RuntimeException) 2003 { 2004 ::vos::OGuard aGuard( GetMutex() ); 2005 2006 Size aSz; 2007 ListBox* pListBox = (ListBox*) GetWindow(); 2008 if ( pListBox ) 2009 { 2010 aSz = pListBox->CalcMinimumSize(); 2011 if ( pListBox->GetStyle() & WB_DROPDOWN ) 2012 aSz.Height() += 4; 2013 } 2014 return AWTSize(aSz); 2015 } 2016 2017 ::com::sun::star::awt::Size VCLXListBox::calcAdjustedSize( const ::com::sun::star::awt::Size& rNewSize ) throw(::com::sun::star::uno::RuntimeException) 2018 { 2019 ::vos::OGuard aGuard( GetMutex() ); 2020 2021 Size aSz = VCLSize(rNewSize); 2022 ListBox* pListBox = (ListBox*) GetWindow(); 2023 if ( pListBox ) 2024 aSz = pListBox->CalcAdjustedSize( aSz ); 2025 return AWTSize(aSz); 2026 } 2027 2028 ::com::sun::star::awt::Size VCLXListBox::getMinimumSize( sal_Int16 nCols, sal_Int16 nLines ) throw(::com::sun::star::uno::RuntimeException) 2029 { 2030 ::vos::OGuard aGuard( GetMutex() ); 2031 2032 Size aSz; 2033 ListBox* pListBox = (ListBox*) GetWindow(); 2034 if ( pListBox ) 2035 aSz = pListBox->CalcSize( nCols, nLines ); 2036 return AWTSize(aSz); 2037 } 2038 2039 void VCLXListBox::getColumnsAndLines( sal_Int16& nCols, sal_Int16& nLines ) throw(::com::sun::star::uno::RuntimeException) 2040 { 2041 ::vos::OGuard aGuard( GetMutex() ); 2042 2043 nCols = nLines = 0; 2044 ListBox* pListBox = (ListBox*) GetWindow(); 2045 if ( pListBox ) 2046 { 2047 sal_uInt16 nC, nL; 2048 pListBox->GetMaxVisColumnsAndLines( nC, nL ); 2049 nCols = nC; 2050 nLines = nL; 2051 } 2052 } 2053 2054 void VCLXListBox::ImplCallItemListeners() 2055 { 2056 ListBox* pListBox = (ListBox*) GetWindow(); 2057 if ( pListBox && maItemListeners.getLength() ) 2058 { 2059 ::com::sun::star::awt::ItemEvent aEvent; 2060 aEvent.Source = (::cppu::OWeakObject*)this; 2061 aEvent.Highlighted = sal_False; 2062 2063 // Bei Mehrfachselektion 0xFFFF, sonst die ID 2064 aEvent.Selected = (pListBox->GetSelectEntryCount() == 1 ) ? pListBox->GetSelectEntryPos() : 0xFFFF; 2065 2066 maItemListeners.itemStateChanged( aEvent ); 2067 } 2068 } 2069 namespace 2070 { 2071 Image lcl_getImageFromURL( const ::rtl::OUString& i_rImageURL ) 2072 { 2073 if ( !i_rImageURL.getLength() ) 2074 return Image(); 2075 2076 try 2077 { 2078 ::comphelper::ComponentContext aContext( ::comphelper::getProcessServiceFactory() ); 2079 Reference< XGraphicProvider > xProvider; 2080 if ( aContext.createComponent( "com.sun.star.graphic.GraphicProvider", xProvider ) ) 2081 { 2082 ::comphelper::NamedValueCollection aMediaProperties; 2083 aMediaProperties.put( "URL", i_rImageURL ); 2084 Reference< XGraphic > xGraphic = xProvider->queryGraphic( aMediaProperties.getPropertyValues() ); 2085 return Image( xGraphic ); 2086 } 2087 } 2088 catch( const uno::Exception& ) 2089 { 2090 DBG_UNHANDLED_EXCEPTION(); 2091 } 2092 return Image(); 2093 } 2094 } 2095 void SAL_CALL VCLXListBox::listItemInserted( const ItemListEvent& i_rEvent ) throw (RuntimeException) 2096 { 2097 ::vos::OGuard aGuard( GetMutex() ); 2098 2099 ListBox* pListBox = dynamic_cast< ListBox* >( GetWindow() ); 2100 2101 ENSURE_OR_RETURN_VOID( pListBox, "VCLXListBox::listItemInserted: no ListBox?!" ); 2102 ENSURE_OR_RETURN_VOID( ( i_rEvent.ItemPosition >= 0 ) && ( i_rEvent.ItemPosition <= sal_Int32( pListBox->GetEntryCount() ) ), 2103 "VCLXListBox::listItemInserted: illegal (inconsistent) item position!" ); 2104 pListBox->InsertEntry( 2105 i_rEvent.ItemText.IsPresent ? i_rEvent.ItemText.Value : ::rtl::OUString(), 2106 i_rEvent.ItemImageURL.IsPresent ? TkResMgr::getImageFromURL( i_rEvent.ItemImageURL.Value ) : Image(), 2107 i_rEvent.ItemPosition ); 2108 } 2109 2110 void SAL_CALL VCLXListBox::listItemRemoved( const ItemListEvent& i_rEvent ) throw (RuntimeException) 2111 { 2112 ::vos::OGuard aGuard( GetMutex() ); 2113 2114 ListBox* pListBox = dynamic_cast< ListBox* >( GetWindow() ); 2115 2116 ENSURE_OR_RETURN_VOID( pListBox, "VCLXListBox::listItemRemoved: no ListBox?!" ); 2117 ENSURE_OR_RETURN_VOID( ( i_rEvent.ItemPosition >= 0 ) && ( i_rEvent.ItemPosition < sal_Int32( pListBox->GetEntryCount() ) ), 2118 "VCLXListBox::listItemRemoved: illegal (inconsistent) item position!" ); 2119 2120 pListBox->RemoveEntry( i_rEvent.ItemPosition ); 2121 } 2122 2123 void SAL_CALL VCLXListBox::listItemModified( const ItemListEvent& i_rEvent ) throw (RuntimeException) 2124 { 2125 ::vos::OGuard aGuard( GetMutex() ); 2126 2127 ListBox* pListBox = dynamic_cast< ListBox* >( GetWindow() ); 2128 2129 ENSURE_OR_RETURN_VOID( pListBox, "VCLXListBox::listItemModified: no ListBox?!" ); 2130 ENSURE_OR_RETURN_VOID( ( i_rEvent.ItemPosition >= 0 ) && ( i_rEvent.ItemPosition < sal_Int32( pListBox->GetEntryCount() ) ), 2131 "VCLXListBox::listItemModified: illegal (inconsistent) item position!" ); 2132 2133 // VCL's ListBox does not support changing an entry's text or image, so remove and re-insert 2134 2135 const ::rtl::OUString sNewText = i_rEvent.ItemText.IsPresent ? i_rEvent.ItemText.Value : ::rtl::OUString( pListBox->GetEntry( i_rEvent.ItemPosition ) ); 2136 const Image aNewImage( i_rEvent.ItemImageURL.IsPresent ? TkResMgr::getImageFromURL( i_rEvent.ItemImageURL.Value ) : pListBox->GetEntryImage( i_rEvent.ItemPosition ) ); 2137 2138 pListBox->RemoveEntry( i_rEvent.ItemPosition ); 2139 pListBox->InsertEntry( sNewText, aNewImage, i_rEvent.ItemPosition ); 2140 } 2141 2142 void SAL_CALL VCLXListBox::allItemsRemoved( const EventObject& i_rEvent ) throw (RuntimeException) 2143 { 2144 ::vos::OGuard aGuard( GetMutex() ); 2145 2146 ListBox* pListBox = dynamic_cast< ListBox* >( GetWindow() ); 2147 ENSURE_OR_RETURN_VOID( pListBox, "VCLXListBox::listItemModified: no ListBox?!" ); 2148 2149 pListBox->Clear(); 2150 2151 (void)i_rEvent; 2152 } 2153 2154 void SAL_CALL VCLXListBox::itemListChanged( const EventObject& i_rEvent ) throw (RuntimeException) 2155 { 2156 ::vos::OGuard aGuard( GetMutex() ); 2157 2158 ListBox* pListBox = dynamic_cast< ListBox* >( GetWindow() ); 2159 ENSURE_OR_RETURN_VOID( pListBox, "VCLXListBox::listItemModified: no ListBox?!" ); 2160 2161 pListBox->Clear(); 2162 2163 uno::Reference< beans::XPropertySet > xPropSet( i_rEvent.Source, uno::UNO_QUERY_THROW ); 2164 uno::Reference< beans::XPropertySetInfo > xPSI( xPropSet->getPropertySetInfo(), uno::UNO_QUERY_THROW ); 2165 uno::Reference< resource::XStringResourceResolver > xStringResourceResolver; 2166 if ( xPSI->hasPropertyByName( ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "ResourceResolver" ) ) ) ) 2167 { 2168 xStringResourceResolver.set( 2169 xPropSet->getPropertyValue( ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "ResourceResolver" ) ) ), 2170 uno::UNO_QUERY 2171 ); 2172 } 2173 2174 2175 Reference< XItemList > xItemList( i_rEvent.Source, uno::UNO_QUERY_THROW ); 2176 uno::Sequence< beans::Pair< ::rtl::OUString, ::rtl::OUString > > aItems = xItemList->getAllItems(); 2177 for ( sal_Int32 i=0; i<aItems.getLength(); ++i ) 2178 { 2179 ::rtl::OUString aLocalizationKey( aItems[i].First ); 2180 if ( xStringResourceResolver.is() && aLocalizationKey.getLength() != 0 && aLocalizationKey[0] == '&' ) 2181 { 2182 aLocalizationKey = xStringResourceResolver->resolveString(aLocalizationKey.copy( 1 )); 2183 } 2184 pListBox->InsertEntry( aLocalizationKey, lcl_getImageFromURL( aItems[i].Second ) ); 2185 } 2186 } 2187 2188 void SAL_CALL VCLXListBox::disposing( const EventObject& i_rEvent ) throw (RuntimeException) 2189 { 2190 // just disambiguate 2191 VCLXWindow::disposing( i_rEvent ); 2192 } 2193 2194 // ---------------------------------------------------- 2195 // class VCLXMessageBox 2196 // ---------------------------------------------------- 2197 2198 void VCLXMessageBox::ImplGetPropertyIds( std::list< sal_uInt16 > &rIds ) 2199 { 2200 VCLXTopWindow::ImplGetPropertyIds( rIds ); 2201 } 2202 2203 VCLXMessageBox::VCLXMessageBox() 2204 { 2205 } 2206 2207 VCLXMessageBox::~VCLXMessageBox() 2208 { 2209 } 2210 2211 // ::com::sun::star::uno::XInterface 2212 ::com::sun::star::uno::Any VCLXMessageBox::queryInterface( const ::com::sun::star::uno::Type & rType ) throw(::com::sun::star::uno::RuntimeException) 2213 { 2214 ::com::sun::star::uno::Any aRet = ::cppu::queryInterface( rType, 2215 SAL_STATIC_CAST( ::com::sun::star::awt::XMessageBox*, this ) ); 2216 return (aRet.hasValue() ? aRet : VCLXTopWindow::queryInterface( rType )); 2217 } 2218 2219 // ::com::sun::star::lang::XTypeProvider 2220 IMPL_XTYPEPROVIDER_START( VCLXMessageBox ) 2221 getCppuType( ( ::com::sun::star::uno::Reference< ::com::sun::star::awt::XMessageBox>* ) NULL ), 2222 VCLXTopWindow::getTypes() 2223 IMPL_XTYPEPROVIDER_END 2224 2225 void VCLXMessageBox::setCaptionText( const ::rtl::OUString& rText ) throw(::com::sun::star::uno::RuntimeException) 2226 { 2227 ::vos::OGuard aGuard( GetMutex() ); 2228 2229 Window* pWindow = GetWindow(); 2230 if ( pWindow ) 2231 pWindow->SetText( rText ); 2232 } 2233 2234 ::rtl::OUString VCLXMessageBox::getCaptionText() throw(::com::sun::star::uno::RuntimeException) 2235 { 2236 ::vos::OGuard aGuard( GetMutex() ); 2237 2238 String aText; 2239 Window* pWindow = GetWindow(); 2240 if ( pWindow ) 2241 aText = pWindow->GetText(); 2242 return aText; 2243 } 2244 2245 void VCLXMessageBox::setMessageText( const ::rtl::OUString& rText ) throw(::com::sun::star::uno::RuntimeException) 2246 { 2247 ::vos::OGuard aGuard( GetMutex() ); 2248 2249 MessBox* pBox = (MessBox*)GetWindow(); 2250 if ( pBox ) 2251 pBox->SetMessText( rText ); 2252 } 2253 2254 ::rtl::OUString VCLXMessageBox::getMessageText() throw(::com::sun::star::uno::RuntimeException) 2255 { 2256 ::vos::OGuard aGuard( GetMutex() ); 2257 2258 ::rtl::OUString aText; 2259 MessBox* pBox = (MessBox*)GetWindow(); 2260 if ( pBox ) 2261 aText = pBox->GetMessText(); 2262 return aText; 2263 } 2264 2265 sal_Int16 VCLXMessageBox::execute() throw(::com::sun::star::uno::RuntimeException) 2266 { 2267 ::vos::OGuard aGuard( GetMutex() ); 2268 2269 MessBox* pBox = (MessBox*)GetWindow(); 2270 return pBox ? pBox->Execute() : 0; 2271 } 2272 2273 ::com::sun::star::awt::Size SAL_CALL VCLXMessageBox::getMinimumSize() throw(::com::sun::star::uno::RuntimeException) 2274 { 2275 ::vos::OGuard aGuard( GetMutex() ); 2276 return ::com::sun::star::awt::Size( 250, 100 ); 2277 } 2278 2279 // ---------------------------------------------------- 2280 // class VCLXDialog 2281 // ---------------------------------------------------- 2282 void VCLXDialog::ImplGetPropertyIds( std::list< sal_uInt16 > &rIds ) 2283 { 2284 VCLXTopWindow::ImplGetPropertyIds( rIds ); 2285 } 2286 2287 VCLXDialog::VCLXDialog() 2288 { 2289 } 2290 2291 VCLXDialog::~VCLXDialog() 2292 { 2293 #ifndef __SUNPRO_CC 2294 OSL_TRACE ("%s", __FUNCTION__); 2295 #endif 2296 } 2297 2298 // ::com::sun::star::uno::XInterface 2299 ::com::sun::star::uno::Any VCLXDialog::queryInterface( const ::com::sun::star::uno::Type & rType ) throw(::com::sun::star::uno::RuntimeException) 2300 { 2301 ::com::sun::star::uno::Any aRet = ::cppu::queryInterface( rType, 2302 SAL_STATIC_CAST( ::com::sun::star::awt::XDialog2*, this ), 2303 SAL_STATIC_CAST( ::com::sun::star::awt::XDialog*, this ) ); 2304 return (aRet.hasValue() ? aRet : VCLXTopWindow::queryInterface( rType )); 2305 } 2306 2307 // ::com::sun::star::lang::XTypeProvider 2308 IMPL_XTYPEPROVIDER_START( VCLXDialog ) 2309 getCppuType( ( ::com::sun::star::uno::Reference< ::com::sun::star::awt::XDialog2>* ) NULL ), 2310 getCppuType( ( ::com::sun::star::uno::Reference< ::com::sun::star::awt::XDialog>* ) NULL ), 2311 VCLXTopWindow::getTypes() 2312 IMPL_XTYPEPROVIDER_END 2313 2314 void SAL_CALL VCLXDialog::endDialog( ::sal_Int32 i_result ) throw (RuntimeException) 2315 { 2316 ::vos::OGuard aGuard( GetMutex() ); 2317 2318 Dialog* pDialog = dynamic_cast< Dialog* >( GetWindow() ); 2319 if ( pDialog ) 2320 pDialog->EndDialog( i_result ); 2321 } 2322 2323 void SAL_CALL VCLXDialog::setHelpId( const ::rtl::OUString& rId ) throw (RuntimeException) 2324 { 2325 ::vos::OGuard aGuard( GetMutex() ); 2326 2327 Window* pWindow = GetWindow(); 2328 if ( pWindow ) 2329 pWindow->SetHelpId( rtl::OUStringToOString( rId, RTL_TEXTENCODING_UTF8 ) ); 2330 } 2331 2332 void VCLXDialog::setTitle( const ::rtl::OUString& Title ) throw(::com::sun::star::uno::RuntimeException) 2333 { 2334 ::vos::OGuard aGuard( GetMutex() ); 2335 2336 Window* pWindow = GetWindow(); 2337 if ( pWindow ) 2338 pWindow->SetText( Title ); 2339 } 2340 2341 ::rtl::OUString VCLXDialog::getTitle() throw(::com::sun::star::uno::RuntimeException) 2342 { 2343 ::vos::OGuard aGuard( GetMutex() ); 2344 2345 ::rtl::OUString aTitle; 2346 Window* pWindow = GetWindow(); 2347 if ( pWindow ) 2348 aTitle = pWindow->GetText(); 2349 return aTitle; 2350 } 2351 2352 sal_Int16 VCLXDialog::execute() throw(::com::sun::star::uno::RuntimeException) 2353 { 2354 ::vos::OGuard aGuard( GetMutex() ); 2355 2356 sal_Int16 nRet = 0; 2357 if ( GetWindow() ) 2358 { 2359 Dialog* pDlg = (Dialog*) GetWindow(); 2360 Window* pParent = pDlg->GetWindow( WINDOW_PARENTOVERLAP ); 2361 Window* pOldParent = NULL; 2362 Window* pSetParent = NULL; 2363 if ( pParent && !pParent->IsReallyVisible() ) 2364 { 2365 pOldParent = pDlg->GetParent(); 2366 Window* pFrame = pDlg->GetWindow( WINDOW_FRAME ); 2367 if( pFrame != pDlg ) 2368 { 2369 pDlg->SetParent( pFrame ); 2370 pSetParent = pFrame; 2371 } 2372 } 2373 2374 nRet = pDlg->Execute(); 2375 2376 // set the parent back only in case no new parent was set from outside 2377 // in other words, revert only own changes 2378 if ( pOldParent && pDlg->GetParent() == pSetParent ) 2379 pDlg->SetParent( pOldParent ); 2380 } 2381 return nRet; 2382 } 2383 2384 void VCLXDialog::endExecute() throw(::com::sun::star::uno::RuntimeException) 2385 { 2386 endDialog(0); 2387 } 2388 2389 void SAL_CALL VCLXDialog::draw( sal_Int32 nX, sal_Int32 nY ) throw(::com::sun::star::uno::RuntimeException) 2390 { 2391 ::vos::OGuard aGuard( GetMutex() ); 2392 Window* pWindow = GetWindow(); 2393 2394 if ( pWindow ) 2395 { 2396 OutputDevice* pDev = VCLUnoHelper::GetOutputDevice( getGraphics() ); 2397 if ( !pDev ) 2398 pDev = pWindow->GetParent(); 2399 2400 Size aSize = pDev->PixelToLogic( pWindow->GetSizePixel() ); 2401 Point aPos = pDev->PixelToLogic( Point( nX, nY ) ); 2402 2403 pWindow->Draw( pDev, aPos, aSize, WINDOW_DRAW_NOCONTROLS ); 2404 } 2405 } 2406 2407 ::com::sun::star::awt::DeviceInfo VCLXDialog::getInfo() throw(::com::sun::star::uno::RuntimeException) 2408 { 2409 ::com::sun::star::awt::DeviceInfo aInfo = VCLXDevice::getInfo(); 2410 2411 ::vos::OGuard aGuard( GetMutex() ); 2412 Dialog* pDlg = (Dialog*) GetWindow(); 2413 if ( pDlg ) 2414 pDlg->GetDrawWindowBorder( aInfo.LeftInset, aInfo.TopInset, aInfo.RightInset, aInfo.BottomInset ); 2415 2416 return aInfo; 2417 } 2418 2419 2420 void SAL_CALL VCLXDialog::setProperty( 2421 const ::rtl::OUString& PropertyName, 2422 const ::com::sun::star::uno::Any& Value ) 2423 throw(::com::sun::star::uno::RuntimeException) 2424 { 2425 ::vos::OGuard aGuard( GetMutex() ); 2426 2427 Dialog* pDialog = (Dialog*)GetWindow(); 2428 if ( pDialog ) 2429 { 2430 sal_Bool bVoid = Value.getValueType().getTypeClass() == ::com::sun::star::uno::TypeClass_VOID; 2431 2432 sal_uInt16 nPropType = GetPropertyId( PropertyName ); 2433 switch ( nPropType ) 2434 { 2435 case BASEPROPERTY_GRAPHIC: 2436 { 2437 Reference< XGraphic > xGraphic; 2438 if (( Value >>= xGraphic ) && xGraphic.is() ) 2439 { 2440 Image aImage( xGraphic ); 2441 2442 Wallpaper aWallpaper( aImage.GetBitmapEx()); 2443 aWallpaper.SetStyle( WALLPAPER_SCALE ); 2444 pDialog->SetBackground( aWallpaper ); 2445 } 2446 else if ( bVoid || !xGraphic.is() ) 2447 { 2448 Color aColor = pDialog->GetControlBackground().GetColor(); 2449 if ( aColor == COL_AUTO ) 2450 aColor = pDialog->GetSettings().GetStyleSettings().GetDialogColor(); 2451 2452 Wallpaper aWallpaper( aColor ); 2453 pDialog->SetBackground( aWallpaper ); 2454 } 2455 } 2456 break; 2457 2458 default: 2459 { 2460 VCLXWindow::setProperty( PropertyName, Value ); 2461 } 2462 } 2463 } 2464 } 2465 2466 // ---------------------------------------------------- 2467 // class VCLXTabPage 2468 // ---------------------------------------------------- 2469 VCLXTabPage::VCLXTabPage() 2470 { 2471 } 2472 2473 VCLXTabPage::~VCLXTabPage() 2474 { 2475 } 2476 2477 ::com::sun::star::uno::Any SAL_CALL VCLXTabPage::queryInterface(const ::com::sun::star::uno::Type & rType ) 2478 throw(::com::sun::star::uno::RuntimeException) 2479 { 2480 return VCLXContainer::queryInterface( rType ); 2481 } 2482 2483 // ::com::sun::star::lang::XTypeProvider 2484 IMPL_XTYPEPROVIDER_START( VCLXTabPage ) 2485 VCLXContainer::getTypes() 2486 IMPL_XTYPEPROVIDER_END 2487 2488 // ::com::sun::star::awt::XView 2489 void SAL_CALL VCLXTabPage::draw( sal_Int32 nX, sal_Int32 nY ) 2490 throw(::com::sun::star::uno::RuntimeException) 2491 { 2492 ::vos::OGuard aGuard( GetMutex() ); 2493 Window* pWindow = GetWindow(); 2494 2495 if ( pWindow ) 2496 { 2497 OutputDevice* pDev = VCLUnoHelper::GetOutputDevice( getGraphics() ); 2498 if ( !pDev ) 2499 pDev = pWindow->GetParent(); 2500 2501 Size aSize = pDev->PixelToLogic( pWindow->GetSizePixel() ); 2502 Point aPos = pDev->PixelToLogic( Point( nX, nY ) ); 2503 2504 pWindow->Draw( pDev, aPos, aSize, WINDOW_DRAW_NOCONTROLS ); 2505 } 2506 } 2507 2508 // ::com::sun::star::awt::XDevice, 2509 ::com::sun::star::awt::DeviceInfo SAL_CALL VCLXTabPage::getInfo() 2510 throw(::com::sun::star::uno::RuntimeException) 2511 { 2512 ::com::sun::star::awt::DeviceInfo aInfo = VCLXDevice::getInfo(); 2513 return aInfo; 2514 } 2515 2516 void SAL_CALL VCLXTabPage::setProperty( 2517 const ::rtl::OUString& PropertyName, 2518 const ::com::sun::star::uno::Any& Value ) 2519 throw(::com::sun::star::uno::RuntimeException) 2520 { 2521 ::vos::OGuard aGuard( GetMutex() ); 2522 2523 TabPage* pTabPage = (TabPage*)GetWindow(); 2524 if ( pTabPage ) 2525 { 2526 sal_Bool bVoid = Value.getValueType().getTypeClass() == ::com::sun::star::uno::TypeClass_VOID; 2527 2528 sal_uInt16 nPropType = GetPropertyId( PropertyName ); 2529 switch ( nPropType ) 2530 { 2531 case BASEPROPERTY_GRAPHIC: 2532 { 2533 Reference< XGraphic > xGraphic; 2534 if (( Value >>= xGraphic ) && xGraphic.is() ) 2535 { 2536 Image aImage( xGraphic ); 2537 2538 Wallpaper aWallpaper( aImage.GetBitmapEx()); 2539 aWallpaper.SetStyle( WALLPAPER_SCALE ); 2540 pTabPage->SetBackground( aWallpaper ); 2541 } 2542 else if ( bVoid || !xGraphic.is() ) 2543 { 2544 Color aColor = pTabPage->GetControlBackground().GetColor(); 2545 if ( aColor == COL_AUTO ) 2546 aColor = pTabPage->GetSettings().GetStyleSettings().GetDialogColor(); 2547 2548 Wallpaper aWallpaper( aColor ); 2549 pTabPage->SetBackground( aWallpaper ); 2550 } 2551 } 2552 break; 2553 case BASEPROPERTY_TITLE: 2554 { 2555 ::rtl::OUString sTitle; 2556 if ( Value >>= sTitle ) 2557 { 2558 pTabPage->SetText(sTitle); 2559 } 2560 } 2561 break; 2562 2563 default: 2564 { 2565 VCLXContainer::setProperty( PropertyName, Value ); 2566 } 2567 } 2568 } 2569 } 2570 2571 // ---------------------------------------------------- 2572 // class VCLXFixedHyperlink 2573 // ---------------------------------------------------- 2574 VCLXFixedHyperlink::VCLXFixedHyperlink() : 2575 2576 maActionListeners( *this ) 2577 2578 { 2579 } 2580 2581 VCLXFixedHyperlink::~VCLXFixedHyperlink() 2582 { 2583 } 2584 2585 // ::com::sun::star::uno::XInterface 2586 ::com::sun::star::uno::Any VCLXFixedHyperlink::queryInterface( const ::com::sun::star::uno::Type & rType ) throw(::com::sun::star::uno::RuntimeException) 2587 { 2588 ::com::sun::star::uno::Any aRet = ::cppu::queryInterface( rType, 2589 SAL_STATIC_CAST( ::com::sun::star::awt::XFixedHyperlink*, this ) ); 2590 return (aRet.hasValue() ? aRet : VCLXWindow::queryInterface( rType )); 2591 } 2592 2593 void VCLXFixedHyperlink::dispose() throw(::com::sun::star::uno::RuntimeException) 2594 { 2595 ::vos::OGuard aGuard( GetMutex() ); 2596 2597 ::com::sun::star::lang::EventObject aObj; 2598 aObj.Source = (::cppu::OWeakObject*)this; 2599 maActionListeners.disposeAndClear( aObj ); 2600 VCLXWindow::dispose(); 2601 } 2602 2603 // ::com::sun::star::lang::XTypeProvider 2604 IMPL_XTYPEPROVIDER_START( VCLXFixedHyperlink ) 2605 getCppuType( ( ::com::sun::star::uno::Reference< ::com::sun::star::awt::XFixedHyperlink>* ) NULL ), 2606 VCLXWindow::getTypes() 2607 IMPL_XTYPEPROVIDER_END 2608 2609 void VCLXFixedHyperlink::ProcessWindowEvent( const VclWindowEvent& rVclWindowEvent ) 2610 { 2611 switch ( rVclWindowEvent.GetId() ) 2612 { 2613 case VCLEVENT_BUTTON_CLICK: 2614 { 2615 if ( maActionListeners.getLength() ) 2616 { 2617 ::com::sun::star::awt::ActionEvent aEvent; 2618 aEvent.Source = (::cppu::OWeakObject*)this; 2619 maActionListeners.actionPerformed( aEvent ); 2620 } 2621 else 2622 { 2623 // open the URL 2624 ::rtl::OUString sURL; 2625 ::toolkit::FixedHyperlinkBase* pBase = (::toolkit::FixedHyperlinkBase*)GetWindow(); 2626 if ( pBase ) 2627 sURL = pBase->GetURL(); 2628 Reference< ::com::sun::star::system::XSystemShellExecute > xSystemShellExecute( 2629 ::comphelper::getProcessServiceFactory()->createInstance( 2630 ::rtl::OUString::createFromAscii( "com.sun.star.system.SystemShellExecute" )), uno::UNO_QUERY ); 2631 if ( sURL.getLength() > 0 && xSystemShellExecute.is() ) 2632 { 2633 try 2634 { 2635 // start browser 2636 xSystemShellExecute->execute( 2637 sURL, ::rtl::OUString(), ::com::sun::star::system::SystemShellExecuteFlags::DEFAULTS ); 2638 } 2639 catch( uno::Exception& ) 2640 { 2641 } 2642 } 2643 } 2644 } 2645 2646 default: 2647 VCLXWindow::ProcessWindowEvent( rVclWindowEvent ); 2648 break; 2649 } 2650 } 2651 2652 ::com::sun::star::uno::Reference< ::com::sun::star::accessibility::XAccessibleContext > VCLXFixedHyperlink::CreateAccessibleContext() 2653 { 2654 return getAccessibleFactory().createAccessibleContext( this ); 2655 } 2656 2657 void VCLXFixedHyperlink::setText( const ::rtl::OUString& Text ) throw(::com::sun::star::uno::RuntimeException) 2658 { 2659 ::vos::OGuard aGuard( GetMutex() ); 2660 2661 ::toolkit::FixedHyperlinkBase* pBase = (::toolkit::FixedHyperlinkBase*)GetWindow(); 2662 if ( pBase ) 2663 pBase->SetDescription( Text ); 2664 } 2665 2666 ::rtl::OUString VCLXFixedHyperlink::getText() throw(::com::sun::star::uno::RuntimeException) 2667 { 2668 ::vos::OGuard aGuard( GetMutex() ); 2669 2670 ::rtl::OUString aText; 2671 Window* pWindow = GetWindow(); 2672 if ( pWindow ) 2673 aText = pWindow->GetText(); 2674 return aText; 2675 } 2676 2677 void VCLXFixedHyperlink::setURL( const ::rtl::OUString& URL ) throw(::com::sun::star::uno::RuntimeException) 2678 { 2679 ::vos::OGuard aGuard( GetMutex() ); 2680 2681 ::toolkit::FixedHyperlinkBase* pBase = (::toolkit::FixedHyperlinkBase*)GetWindow(); 2682 if ( pBase ) 2683 pBase->SetURL( URL ); 2684 } 2685 2686 ::rtl::OUString VCLXFixedHyperlink::getURL( ) throw(::com::sun::star::uno::RuntimeException) 2687 { 2688 ::vos::OGuard aGuard( GetMutex() ); 2689 2690 ::rtl::OUString aText; 2691 ::toolkit::FixedHyperlinkBase* pBase = (::toolkit::FixedHyperlinkBase*)GetWindow(); 2692 if ( pBase ) 2693 aText = pBase->GetURL(); 2694 return aText; 2695 } 2696 2697 void VCLXFixedHyperlink::setAlignment( short nAlign ) throw(::com::sun::star::uno::RuntimeException) 2698 { 2699 ::vos::OGuard aGuard( GetMutex() ); 2700 2701 Window* pWindow = GetWindow(); 2702 if ( pWindow ) 2703 { 2704 WinBits nNewBits = 0; 2705 if ( nAlign == ::com::sun::star::awt::TextAlign::LEFT ) 2706 nNewBits = WB_LEFT; 2707 else if ( nAlign == ::com::sun::star::awt::TextAlign::CENTER ) 2708 nNewBits = WB_CENTER; 2709 else 2710 nNewBits = WB_RIGHT; 2711 2712 WinBits nStyle = pWindow->GetStyle(); 2713 nStyle &= ~(WB_LEFT|WB_CENTER|WB_RIGHT); 2714 pWindow->SetStyle( nStyle | nNewBits ); 2715 } 2716 } 2717 2718 short VCLXFixedHyperlink::getAlignment() throw(::com::sun::star::uno::RuntimeException) 2719 { 2720 ::vos::OGuard aGuard( GetMutex() ); 2721 2722 short nAlign = 0; 2723 Window* pWindow = GetWindow(); 2724 if ( pWindow ) 2725 { 2726 WinBits nStyle = pWindow->GetStyle(); 2727 if ( nStyle & WB_LEFT ) 2728 nAlign = ::com::sun::star::awt::TextAlign::LEFT; 2729 else if ( nStyle & WB_CENTER ) 2730 nAlign = ::com::sun::star::awt::TextAlign::CENTER; 2731 else 2732 nAlign = ::com::sun::star::awt::TextAlign::RIGHT; 2733 } 2734 return nAlign; 2735 } 2736 2737 void VCLXFixedHyperlink::addActionListener( const ::com::sun::star::uno::Reference< ::com::sun::star::awt::XActionListener > & l )throw(::com::sun::star::uno::RuntimeException) 2738 { 2739 ::vos::OGuard aGuard( GetMutex() ); 2740 maActionListeners.addInterface( l ); 2741 } 2742 2743 void VCLXFixedHyperlink::removeActionListener( const ::com::sun::star::uno::Reference< ::com::sun::star::awt::XActionListener > & l ) throw(::com::sun::star::uno::RuntimeException) 2744 { 2745 ::vos::OGuard aGuard( GetMutex() ); 2746 maActionListeners.removeInterface( l ); 2747 } 2748 2749 ::com::sun::star::awt::Size VCLXFixedHyperlink::getMinimumSize( ) throw(::com::sun::star::uno::RuntimeException) 2750 { 2751 ::vos::OGuard aGuard( GetMutex() ); 2752 2753 Size aSz; 2754 FixedText* pFixedText = (FixedText*)GetWindow(); 2755 if ( pFixedText ) 2756 aSz = pFixedText->CalcMinimumSize(); 2757 return AWTSize(aSz); 2758 } 2759 2760 ::com::sun::star::awt::Size VCLXFixedHyperlink::getPreferredSize( ) throw(::com::sun::star::uno::RuntimeException) 2761 { 2762 return getMinimumSize(); 2763 } 2764 2765 ::com::sun::star::awt::Size VCLXFixedHyperlink::calcAdjustedSize( const ::com::sun::star::awt::Size& rNewSize ) throw(::com::sun::star::uno::RuntimeException) 2766 { 2767 ::vos::OGuard aGuard( GetMutex() ); 2768 2769 ::com::sun::star::awt::Size aSz = rNewSize; 2770 ::com::sun::star::awt::Size aMinSz = getMinimumSize(); 2771 if ( aSz.Height != aMinSz.Height ) 2772 aSz.Height = aMinSz.Height; 2773 2774 return aSz; 2775 } 2776 2777 void VCLXFixedHyperlink::setProperty( const ::rtl::OUString& PropertyName, const ::com::sun::star::uno::Any& Value) throw(::com::sun::star::uno::RuntimeException) 2778 { 2779 ::vos::OGuard aGuard( GetMutex() ); 2780 2781 ::toolkit::FixedHyperlinkBase* pBase = (::toolkit::FixedHyperlinkBase*)GetWindow(); 2782 if ( pBase ) 2783 { 2784 sal_uInt16 nPropType = GetPropertyId( PropertyName ); 2785 switch ( nPropType ) 2786 { 2787 case BASEPROPERTY_LABEL: 2788 { 2789 ::rtl::OUString sNewLabel; 2790 if ( Value >>= sNewLabel ) 2791 pBase->SetDescription( sNewLabel ); 2792 break; 2793 } 2794 2795 case BASEPROPERTY_URL: 2796 { 2797 ::rtl::OUString sNewURL; 2798 if ( Value >>= sNewURL ) 2799 pBase->SetURL( sNewURL ); 2800 break; 2801 } 2802 2803 default: 2804 { 2805 VCLXWindow::setProperty( PropertyName, Value ); 2806 } 2807 } 2808 } 2809 } 2810 2811 ::com::sun::star::uno::Any VCLXFixedHyperlink::getProperty( const ::rtl::OUString& PropertyName ) throw(::com::sun::star::uno::RuntimeException) 2812 { 2813 ::vos::OGuard aGuard( GetMutex() ); 2814 2815 ::com::sun::star::uno::Any aProp; 2816 ::toolkit::FixedHyperlinkBase* pBase = (::toolkit::FixedHyperlinkBase*)GetWindow(); 2817 if ( pBase ) 2818 { 2819 sal_uInt16 nPropType = GetPropertyId( PropertyName ); 2820 switch ( nPropType ) 2821 { 2822 case BASEPROPERTY_URL: 2823 { 2824 aProp = makeAny( ::rtl::OUString( pBase->GetURL() ) ); 2825 break; 2826 } 2827 2828 default: 2829 { 2830 aProp <<= VCLXWindow::getProperty( PropertyName ); 2831 } 2832 } 2833 } 2834 return aProp; 2835 } 2836 2837 void VCLXFixedHyperlink::ImplGetPropertyIds( std::list< sal_uInt16 > &rIds ) 2838 { 2839 PushPropertyIds( rIds, 2840 BASEPROPERTY_ALIGN, 2841 BASEPROPERTY_BACKGROUNDCOLOR, 2842 BASEPROPERTY_BORDER, 2843 BASEPROPERTY_BORDERCOLOR, 2844 BASEPROPERTY_DEFAULTCONTROL, 2845 BASEPROPERTY_ENABLED, 2846 BASEPROPERTY_ENABLEVISIBLE, 2847 BASEPROPERTY_FONTDESCRIPTOR, 2848 BASEPROPERTY_HELPTEXT, 2849 BASEPROPERTY_HELPURL, 2850 BASEPROPERTY_LABEL, 2851 BASEPROPERTY_MULTILINE, 2852 BASEPROPERTY_NOLABEL, 2853 BASEPROPERTY_PRINTABLE, 2854 BASEPROPERTY_TABSTOP, 2855 BASEPROPERTY_VERTICALALIGN, 2856 BASEPROPERTY_URL, 2857 BASEPROPERTY_WRITING_MODE, 2858 BASEPROPERTY_CONTEXT_WRITING_MODE, 2859 0); 2860 VCLXWindow::ImplGetPropertyIds( rIds ); 2861 } 2862 2863 // ---------------------------------------------------- 2864 // class VCLXFixedText 2865 // ---------------------------------------------------- 2866 void VCLXFixedText::ImplGetPropertyIds( std::list< sal_uInt16 > &rIds ) 2867 { 2868 PushPropertyIds( rIds, 2869 BASEPROPERTY_ALIGN, 2870 BASEPROPERTY_BACKGROUNDCOLOR, 2871 BASEPROPERTY_BORDER, 2872 BASEPROPERTY_BORDERCOLOR, 2873 BASEPROPERTY_DEFAULTCONTROL, 2874 BASEPROPERTY_ENABLED, 2875 BASEPROPERTY_ENABLEVISIBLE, 2876 BASEPROPERTY_FONTDESCRIPTOR, 2877 BASEPROPERTY_HELPTEXT, 2878 BASEPROPERTY_HELPURL, 2879 BASEPROPERTY_LABEL, 2880 BASEPROPERTY_MULTILINE, 2881 BASEPROPERTY_NOLABEL, 2882 BASEPROPERTY_PRINTABLE, 2883 BASEPROPERTY_TABSTOP, 2884 BASEPROPERTY_VERTICALALIGN, 2885 BASEPROPERTY_WRITING_MODE, 2886 BASEPROPERTY_CONTEXT_WRITING_MODE, 2887 BASEPROPERTY_REFERENCE_DEVICE, 2888 0); 2889 VCLXWindow::ImplGetPropertyIds( rIds ); 2890 } 2891 2892 VCLXFixedText::VCLXFixedText() 2893 { 2894 } 2895 2896 VCLXFixedText::~VCLXFixedText() 2897 { 2898 } 2899 2900 // ::com::sun::star::uno::XInterface 2901 ::com::sun::star::uno::Any VCLXFixedText::queryInterface( const ::com::sun::star::uno::Type & rType ) throw(::com::sun::star::uno::RuntimeException) 2902 { 2903 ::com::sun::star::uno::Any aRet = ::cppu::queryInterface( rType, 2904 SAL_STATIC_CAST( ::com::sun::star::awt::XFixedText*, this ) ); 2905 return (aRet.hasValue() ? aRet : VCLXWindow::queryInterface( rType )); 2906 } 2907 2908 // ::com::sun::star::lang::XTypeProvider 2909 IMPL_XTYPEPROVIDER_START( VCLXFixedText ) 2910 getCppuType( ( ::com::sun::star::uno::Reference< ::com::sun::star::awt::XFixedText>* ) NULL ), 2911 VCLXWindow::getTypes() 2912 IMPL_XTYPEPROVIDER_END 2913 2914 ::com::sun::star::uno::Reference< ::com::sun::star::accessibility::XAccessibleContext > VCLXFixedText::CreateAccessibleContext() 2915 { 2916 return getAccessibleFactory().createAccessibleContext( this ); 2917 } 2918 2919 void VCLXFixedText::setText( const ::rtl::OUString& Text ) throw(::com::sun::star::uno::RuntimeException) 2920 { 2921 ::vos::OGuard aGuard( GetMutex() ); 2922 2923 Window* pWindow = GetWindow(); 2924 if ( pWindow ) 2925 pWindow->SetText( Text ); 2926 } 2927 2928 ::rtl::OUString VCLXFixedText::getText() throw(::com::sun::star::uno::RuntimeException) 2929 { 2930 ::vos::OGuard aGuard( GetMutex() ); 2931 2932 ::rtl::OUString aText; 2933 Window* pWindow = GetWindow(); 2934 if ( pWindow ) 2935 aText = pWindow->GetText(); 2936 return aText; 2937 } 2938 2939 void VCLXFixedText::setAlignment( short nAlign ) throw(::com::sun::star::uno::RuntimeException) 2940 { 2941 ::vos::OGuard aGuard( GetMutex() ); 2942 2943 Window* pWindow = GetWindow(); 2944 if ( pWindow ) 2945 { 2946 WinBits nNewBits = 0; 2947 if ( nAlign == ::com::sun::star::awt::TextAlign::LEFT ) 2948 nNewBits = WB_LEFT; 2949 else if ( nAlign == ::com::sun::star::awt::TextAlign::CENTER ) 2950 nNewBits = WB_CENTER; 2951 else 2952 nNewBits = WB_RIGHT; 2953 2954 WinBits nStyle = pWindow->GetStyle(); 2955 nStyle &= ~(WB_LEFT|WB_CENTER|WB_RIGHT); 2956 pWindow->SetStyle( nStyle | nNewBits ); 2957 } 2958 } 2959 2960 short VCLXFixedText::getAlignment() throw(::com::sun::star::uno::RuntimeException) 2961 { 2962 ::vos::OGuard aGuard( GetMutex() ); 2963 2964 short nAlign = 0; 2965 Window* pWindow = GetWindow(); 2966 if ( pWindow ) 2967 { 2968 WinBits nStyle = pWindow->GetStyle(); 2969 if ( nStyle & WB_LEFT ) 2970 nAlign = ::com::sun::star::awt::TextAlign::LEFT; 2971 else if ( nStyle & WB_CENTER ) 2972 nAlign = ::com::sun::star::awt::TextAlign::CENTER; 2973 else 2974 nAlign = ::com::sun::star::awt::TextAlign::RIGHT; 2975 } 2976 return nAlign; 2977 } 2978 2979 ::com::sun::star::awt::Size VCLXFixedText::getMinimumSize( ) throw(::com::sun::star::uno::RuntimeException) 2980 { 2981 ::vos::OGuard aGuard( GetMutex() ); 2982 2983 Size aSz; 2984 FixedText* pFixedText = (FixedText*)GetWindow(); 2985 if ( pFixedText ) 2986 aSz = pFixedText->CalcMinimumSize(); 2987 return AWTSize(aSz); 2988 } 2989 2990 ::com::sun::star::awt::Size VCLXFixedText::getPreferredSize( ) throw(::com::sun::star::uno::RuntimeException) 2991 { 2992 return getMinimumSize(); 2993 } 2994 2995 ::com::sun::star::awt::Size VCLXFixedText::calcAdjustedSize( const ::com::sun::star::awt::Size& rMaxSize ) throw(::com::sun::star::uno::RuntimeException) 2996 { 2997 ::vos::OGuard aGuard( GetMutex() ); 2998 2999 Size aAdjustedSize( VCLUnoHelper::ConvertToVCLSize( rMaxSize ) ); 3000 FixedText* pFixedText = (FixedText*)GetWindow(); 3001 if ( pFixedText ) 3002 aAdjustedSize = pFixedText->CalcMinimumSize( rMaxSize.Width ); 3003 return VCLUnoHelper::ConvertToAWTSize( aAdjustedSize ); 3004 } 3005 3006 // ---------------------------------------------------- 3007 // class VCLXScrollBar 3008 // ---------------------------------------------------- 3009 void VCLXScrollBar::ImplGetPropertyIds( std::list< sal_uInt16 > &rIds ) 3010 { 3011 PushPropertyIds( rIds, 3012 BASEPROPERTY_BACKGROUNDCOLOR, 3013 BASEPROPERTY_BLOCKINCREMENT, 3014 BASEPROPERTY_BORDER, 3015 BASEPROPERTY_BORDERCOLOR, 3016 BASEPROPERTY_DEFAULTCONTROL, 3017 BASEPROPERTY_ENABLED, 3018 BASEPROPERTY_ENABLEVISIBLE, 3019 BASEPROPERTY_HELPTEXT, 3020 BASEPROPERTY_HELPURL, 3021 BASEPROPERTY_LINEINCREMENT, 3022 BASEPROPERTY_LIVE_SCROLL, 3023 BASEPROPERTY_ORIENTATION, 3024 BASEPROPERTY_PRINTABLE, 3025 BASEPROPERTY_REPEAT_DELAY, 3026 BASEPROPERTY_SCROLLVALUE, 3027 BASEPROPERTY_SCROLLVALUE_MAX, 3028 BASEPROPERTY_SCROLLVALUE_MIN, 3029 BASEPROPERTY_SYMBOL_COLOR, 3030 BASEPROPERTY_TABSTOP, 3031 BASEPROPERTY_VISIBLESIZE, 3032 BASEPROPERTY_WRITING_MODE, 3033 BASEPROPERTY_CONTEXT_WRITING_MODE, 3034 0); 3035 VCLXWindow::ImplGetPropertyIds( rIds ); 3036 } 3037 3038 VCLXScrollBar::VCLXScrollBar() : maAdjustmentListeners( *this ) 3039 { 3040 } 3041 3042 // ::com::sun::star::uno::XInterface 3043 ::com::sun::star::uno::Any VCLXScrollBar::queryInterface( const ::com::sun::star::uno::Type & rType ) throw(::com::sun::star::uno::RuntimeException) 3044 { 3045 ::com::sun::star::uno::Any aRet = ::cppu::queryInterface( rType, 3046 SAL_STATIC_CAST( ::com::sun::star::awt::XScrollBar*, this ) ); 3047 return (aRet.hasValue() ? aRet : VCLXWindow::queryInterface( rType )); 3048 } 3049 3050 // ::com::sun::star::lang::XTypeProvider 3051 IMPL_XTYPEPROVIDER_START( VCLXScrollBar ) 3052 getCppuType( ( ::com::sun::star::uno::Reference< ::com::sun::star::awt::XScrollBar>* ) NULL ), 3053 VCLXWindow::getTypes() 3054 IMPL_XTYPEPROVIDER_END 3055 3056 ::com::sun::star::uno::Reference< ::com::sun::star::accessibility::XAccessibleContext > VCLXScrollBar::CreateAccessibleContext() 3057 { 3058 return getAccessibleFactory().createAccessibleContext( this ); 3059 } 3060 3061 // ::com::sun::star::lang::XComponent 3062 void VCLXScrollBar::dispose() throw(::com::sun::star::uno::RuntimeException) 3063 { 3064 ::vos::OGuard aGuard( GetMutex() ); 3065 3066 ::com::sun::star::lang::EventObject aObj; 3067 aObj.Source = (::cppu::OWeakObject*)this; 3068 maAdjustmentListeners.disposeAndClear( aObj ); 3069 VCLXWindow::dispose(); 3070 } 3071 3072 // ::com::sun::star::awt::XScrollbar 3073 void VCLXScrollBar::addAdjustmentListener( const ::com::sun::star::uno::Reference< ::com::sun::star::awt::XAdjustmentListener > & l ) throw(::com::sun::star::uno::RuntimeException) 3074 { 3075 ::vos::OGuard aGuard( GetMutex() ); 3076 maAdjustmentListeners.addInterface( l ); 3077 } 3078 3079 void VCLXScrollBar::removeAdjustmentListener( const ::com::sun::star::uno::Reference< ::com::sun::star::awt::XAdjustmentListener > & l ) throw(::com::sun::star::uno::RuntimeException) 3080 { 3081 ::vos::OGuard aGuard( GetMutex() ); 3082 maAdjustmentListeners.removeInterface( l ); 3083 } 3084 3085 void VCLXScrollBar::setValue( sal_Int32 n ) throw(::com::sun::star::uno::RuntimeException) 3086 { 3087 ::vos::OGuard aGuard( GetMutex() ); 3088 3089 ScrollBar* pScrollBar = (ScrollBar*) GetWindow(); 3090 if ( pScrollBar ) 3091 pScrollBar->DoScroll( n ); 3092 } 3093 3094 void VCLXScrollBar::setValues( sal_Int32 nValue, sal_Int32 nVisible, sal_Int32 nMax ) throw(::com::sun::star::uno::RuntimeException) 3095 { 3096 ::vos::OGuard aGuard( GetMutex() ); 3097 3098 ScrollBar* pScrollBar = (ScrollBar*) GetWindow(); 3099 if ( pScrollBar ) 3100 { 3101 pScrollBar->SetVisibleSize( nVisible ); 3102 pScrollBar->SetRangeMax( nMax ); 3103 pScrollBar->DoScroll( nValue ); 3104 } 3105 } 3106 3107 sal_Int32 VCLXScrollBar::getValue() throw(::com::sun::star::uno::RuntimeException) 3108 { 3109 ::vos::OGuard aGuard( GetMutex() ); 3110 3111 ScrollBar* pScrollBar = (ScrollBar*) GetWindow(); 3112 return pScrollBar ? pScrollBar->GetThumbPos() : 0; 3113 } 3114 3115 void VCLXScrollBar::setMaximum( sal_Int32 n ) throw(::com::sun::star::uno::RuntimeException) 3116 { 3117 ::vos::OGuard aGuard( GetMutex() ); 3118 3119 ScrollBar* pScrollBar = (ScrollBar*) GetWindow(); 3120 if ( pScrollBar ) 3121 pScrollBar->SetRangeMax( n ); 3122 } 3123 3124 sal_Int32 VCLXScrollBar::getMaximum() throw(::com::sun::star::uno::RuntimeException) 3125 { 3126 ::vos::OGuard aGuard( GetMutex() ); 3127 3128 ScrollBar* pScrollBar = (ScrollBar*) GetWindow(); 3129 return pScrollBar ? pScrollBar->GetRangeMax() : 0; 3130 } 3131 3132 void VCLXScrollBar::setMinimum( sal_Int32 n ) throw(::com::sun::star::uno::RuntimeException) 3133 { 3134 ::vos::OGuard aGuard( GetMutex() ); 3135 3136 ScrollBar* pScrollBar = static_cast< ScrollBar* >( GetWindow() ); 3137 if ( pScrollBar ) 3138 pScrollBar->SetRangeMin( n ); 3139 } 3140 3141 sal_Int32 VCLXScrollBar::getMinimum() throw(::com::sun::star::uno::RuntimeException) 3142 { 3143 ::vos::OGuard aGuard( GetMutex() ); 3144 3145 ScrollBar* pScrollBar = static_cast< ScrollBar* >( GetWindow() ); 3146 return pScrollBar ? pScrollBar->GetRangeMin() : 0; 3147 } 3148 3149 void VCLXScrollBar::setLineIncrement( sal_Int32 n ) throw(::com::sun::star::uno::RuntimeException) 3150 { 3151 ::vos::OGuard aGuard( GetMutex() ); 3152 3153 ScrollBar* pScrollBar = (ScrollBar*) GetWindow(); 3154 if ( pScrollBar ) 3155 pScrollBar->SetLineSize( n ); 3156 } 3157 3158 sal_Int32 VCLXScrollBar::getLineIncrement() throw(::com::sun::star::uno::RuntimeException) 3159 { 3160 ::vos::OGuard aGuard( GetMutex() ); 3161 3162 ScrollBar* pScrollBar = (ScrollBar*) GetWindow(); 3163 return pScrollBar ? pScrollBar->GetLineSize() : 0; 3164 } 3165 3166 void VCLXScrollBar::setBlockIncrement( sal_Int32 n ) throw(::com::sun::star::uno::RuntimeException) 3167 { 3168 ::vos::OGuard aGuard( GetMutex() ); 3169 3170 ScrollBar* pScrollBar = (ScrollBar*) GetWindow(); 3171 if ( pScrollBar ) 3172 pScrollBar->SetPageSize( n ); 3173 } 3174 3175 sal_Int32 VCLXScrollBar::getBlockIncrement() throw(::com::sun::star::uno::RuntimeException) 3176 { 3177 ::vos::OGuard aGuard( GetMutex() ); 3178 3179 ScrollBar* pScrollBar = (ScrollBar*) GetWindow(); 3180 return pScrollBar ? pScrollBar->GetPageSize() : 0; 3181 } 3182 3183 void VCLXScrollBar::setVisibleSize( sal_Int32 n ) throw(::com::sun::star::uno::RuntimeException) 3184 { 3185 ::vos::OGuard aGuard( GetMutex() ); 3186 3187 ScrollBar* pScrollBar = (ScrollBar*) GetWindow(); 3188 if ( pScrollBar ) 3189 pScrollBar->SetVisibleSize( n ); 3190 } 3191 3192 sal_Int32 VCLXScrollBar::getVisibleSize() throw(::com::sun::star::uno::RuntimeException) 3193 { 3194 ::vos::OGuard aGuard( GetMutex() ); 3195 3196 ScrollBar* pScrollBar = (ScrollBar*) GetWindow(); 3197 return pScrollBar ? pScrollBar->GetVisibleSize() : 0; 3198 } 3199 3200 void VCLXScrollBar::setOrientation( sal_Int32 n ) throw(::com::sun::star::uno::RuntimeException) 3201 { 3202 ::vos::OGuard aGuard( GetMutex() ); 3203 3204 Window* pWindow = GetWindow(); 3205 if ( pWindow ) 3206 { 3207 WinBits nStyle = pWindow->GetStyle(); 3208 nStyle &= ~(WB_HORZ|WB_VERT); 3209 if ( n == ::com::sun::star::awt::ScrollBarOrientation::HORIZONTAL ) 3210 nStyle |= WB_HORZ; 3211 else 3212 nStyle |= WB_VERT; 3213 3214 pWindow->SetStyle( nStyle ); 3215 pWindow->Resize(); 3216 } 3217 } 3218 3219 sal_Int32 VCLXScrollBar::getOrientation() throw(::com::sun::star::uno::RuntimeException) 3220 { 3221 ::vos::OGuard aGuard( GetMutex() ); 3222 3223 sal_Int32 n = 0; 3224 Window* pWindow = GetWindow(); 3225 if ( pWindow ) 3226 { 3227 WinBits nStyle = pWindow->GetStyle(); 3228 if ( nStyle & WB_HORZ ) 3229 n = ::com::sun::star::awt::ScrollBarOrientation::HORIZONTAL; 3230 else 3231 n = ::com::sun::star::awt::ScrollBarOrientation::VERTICAL; 3232 } 3233 return n; 3234 3235 } 3236 3237 // ::com::sun::star::awt::VclWindowPeer 3238 void VCLXScrollBar::setProperty( const ::rtl::OUString& PropertyName, const ::com::sun::star::uno::Any& Value) throw(::com::sun::star::uno::RuntimeException) 3239 { 3240 ::vos::OGuard aGuard( GetMutex() ); 3241 3242 ScrollBar* pScrollBar = (ScrollBar*)GetWindow(); 3243 if ( pScrollBar ) 3244 { 3245 sal_Bool bVoid = Value.getValueType().getTypeClass() == ::com::sun::star::uno::TypeClass_VOID; 3246 3247 sal_uInt16 nPropType = GetPropertyId( PropertyName ); 3248 switch ( nPropType ) 3249 { 3250 case BASEPROPERTY_LIVE_SCROLL: 3251 { 3252 sal_Bool bDo = sal_False; 3253 if ( !bVoid ) 3254 { 3255 OSL_VERIFY( Value >>= bDo ); 3256 } 3257 AllSettings aSettings( pScrollBar->GetSettings() ); 3258 StyleSettings aStyle( aSettings.GetStyleSettings() ); 3259 sal_uLong nDragOptions = aStyle.GetDragFullOptions(); 3260 if ( bDo ) 3261 nDragOptions |= DRAGFULL_OPTION_SCROLL; 3262 else 3263 nDragOptions &= ~DRAGFULL_OPTION_SCROLL; 3264 aStyle.SetDragFullOptions( nDragOptions ); 3265 aSettings.SetStyleSettings( aStyle ); 3266 pScrollBar->SetSettings( aSettings ); 3267 } 3268 break; 3269 3270 case BASEPROPERTY_SCROLLVALUE: 3271 { 3272 if ( !bVoid ) 3273 { 3274 sal_Int32 n = 0; 3275 if ( Value >>= n ) 3276 setValue( n ); 3277 } 3278 } 3279 break; 3280 case BASEPROPERTY_SCROLLVALUE_MAX: 3281 case BASEPROPERTY_SCROLLVALUE_MIN: 3282 { 3283 if ( !bVoid ) 3284 { 3285 sal_Int32 n = 0; 3286 if ( Value >>= n ) 3287 { 3288 if ( nPropType == BASEPROPERTY_SCROLLVALUE_MAX ) 3289 setMaximum( n ); 3290 else 3291 setMinimum( n ); 3292 } 3293 } 3294 } 3295 break; 3296 case BASEPROPERTY_LINEINCREMENT: 3297 { 3298 if ( !bVoid ) 3299 { 3300 sal_Int32 n = 0; 3301 if ( Value >>= n ) 3302 setLineIncrement( n ); 3303 } 3304 } 3305 break; 3306 case BASEPROPERTY_BLOCKINCREMENT: 3307 { 3308 if ( !bVoid ) 3309 { 3310 sal_Int32 n = 0; 3311 if ( Value >>= n ) 3312 setBlockIncrement( n ); 3313 } 3314 } 3315 break; 3316 case BASEPROPERTY_VISIBLESIZE: 3317 { 3318 if ( !bVoid ) 3319 { 3320 sal_Int32 n = 0; 3321 if ( Value >>= n ) 3322 setVisibleSize( n ); 3323 } 3324 } 3325 break; 3326 case BASEPROPERTY_ORIENTATION: 3327 { 3328 if ( !bVoid ) 3329 { 3330 sal_Int32 n = 0; 3331 if ( Value >>= n ) 3332 setOrientation( n ); 3333 } 3334 } 3335 break; 3336 3337 case BASEPROPERTY_BACKGROUNDCOLOR: 3338 { 3339 // the default implementation of the base class doesn't work here, since our 3340 // interpretation for this property is slightly different 3341 ::toolkit::setButtonLikeFaceColor( pScrollBar, Value); 3342 } 3343 break; 3344 3345 default: 3346 { 3347 VCLXWindow::setProperty( PropertyName, Value ); 3348 } 3349 } 3350 } 3351 } 3352 3353 ::com::sun::star::uno::Any VCLXScrollBar::getProperty( const ::rtl::OUString& PropertyName ) throw(::com::sun::star::uno::RuntimeException) 3354 { 3355 ::vos::OGuard aGuard( GetMutex() ); 3356 3357 ::com::sun::star::uno::Any aProp; 3358 ScrollBar* pScrollBar = (ScrollBar*)GetWindow(); 3359 if ( pScrollBar ) 3360 { 3361 sal_uInt16 nPropType = GetPropertyId( PropertyName ); 3362 3363 switch ( nPropType ) 3364 { 3365 case BASEPROPERTY_LIVE_SCROLL: 3366 { 3367 aProp <<= (sal_Bool)( 0 != ( pScrollBar->GetSettings().GetStyleSettings().GetDragFullOptions() & DRAGFULL_OPTION_SCROLL ) ); 3368 } 3369 break; 3370 case BASEPROPERTY_SCROLLVALUE: 3371 { 3372 aProp <<= (sal_Int32) getValue(); 3373 } 3374 break; 3375 case BASEPROPERTY_SCROLLVALUE_MAX: 3376 { 3377 aProp <<= (sal_Int32) getMaximum(); 3378 } 3379 break; 3380 case BASEPROPERTY_SCROLLVALUE_MIN: 3381 { 3382 aProp <<= (sal_Int32) getMinimum(); 3383 } 3384 break; 3385 case BASEPROPERTY_LINEINCREMENT: 3386 { 3387 aProp <<= (sal_Int32) getLineIncrement(); 3388 } 3389 break; 3390 case BASEPROPERTY_BLOCKINCREMENT: 3391 { 3392 aProp <<= (sal_Int32) getBlockIncrement(); 3393 } 3394 break; 3395 case BASEPROPERTY_VISIBLESIZE: 3396 { 3397 aProp <<= (sal_Int32) getVisibleSize(); 3398 } 3399 break; 3400 case BASEPROPERTY_ORIENTATION: 3401 { 3402 aProp <<= (sal_Int32) getOrientation(); 3403 } 3404 break; 3405 case BASEPROPERTY_BACKGROUNDCOLOR: 3406 { 3407 // the default implementation of the base class doesn't work here, since our 3408 // interpretation for this property is slightly different 3409 aProp = ::toolkit::getButtonLikeFaceColor( pScrollBar ); 3410 } 3411 break; 3412 3413 default: 3414 { 3415 aProp <<= VCLXWindow::getProperty( PropertyName ); 3416 } 3417 } 3418 } 3419 return aProp; 3420 } 3421 3422 void VCLXScrollBar::ProcessWindowEvent( const VclWindowEvent& rVclWindowEvent ) 3423 { 3424 switch ( rVclWindowEvent.GetId() ) 3425 { 3426 case VCLEVENT_SCROLLBAR_SCROLL: 3427 { 3428 ::com::sun::star::uno::Reference< ::com::sun::star::awt::XWindow > xKeepAlive( this ); 3429 // since we call listeners below, there is a potential that we will be destroyed 3430 // in during the listener call. To prevent the resulting crashs, we keep us 3431 // alive as long as we're here 3432 // #20178# - 2003-10-01 - fs@openoffice.org 3433 3434 if ( maAdjustmentListeners.getLength() ) 3435 { 3436 ScrollBar* pScrollBar = (ScrollBar*)GetWindow(); 3437 3438 if( pScrollBar ) 3439 { 3440 ::com::sun::star::awt::AdjustmentEvent aEvent; 3441 aEvent.Source = (::cppu::OWeakObject*)this; 3442 aEvent.Value = pScrollBar->GetThumbPos(); 3443 3444 // set adjustment type 3445 ScrollType aType = pScrollBar->GetType(); 3446 if ( aType == SCROLL_LINEUP || aType == SCROLL_LINEDOWN ) 3447 { 3448 aEvent.Type = ::com::sun::star::awt::AdjustmentType_ADJUST_LINE; 3449 } 3450 else if ( aType == SCROLL_PAGEUP || aType == SCROLL_PAGEDOWN ) 3451 { 3452 aEvent.Type = ::com::sun::star::awt::AdjustmentType_ADJUST_PAGE; 3453 } 3454 else if ( aType == SCROLL_DRAG ) 3455 { 3456 aEvent.Type = ::com::sun::star::awt::AdjustmentType_ADJUST_ABS; 3457 } 3458 3459 maAdjustmentListeners.adjustmentValueChanged( aEvent ); 3460 } 3461 } 3462 } 3463 break; 3464 3465 default: 3466 VCLXWindow::ProcessWindowEvent( rVclWindowEvent ); 3467 break; 3468 } 3469 } 3470 3471 ::com::sun::star::awt::Size SAL_CALL VCLXScrollBar::implGetMinimumSize( Window* p ) throw(::com::sun::star::uno::RuntimeException) 3472 { 3473 long n = p->GetSettings().GetStyleSettings().GetScrollBarSize(); 3474 return ::com::sun::star::awt::Size( n, n ); 3475 } 3476 3477 ::com::sun::star::awt::Size SAL_CALL VCLXScrollBar::getMinimumSize() throw(::com::sun::star::uno::RuntimeException) 3478 { 3479 ::vos::OGuard aGuard( GetMutex() ); 3480 return implGetMinimumSize( GetWindow() ); 3481 } 3482 3483 3484 // ---------------------------------------------------- 3485 // class VCLXEdit 3486 // ---------------------------------------------------- 3487 3488 void VCLXEdit::ImplGetPropertyIds( std::list< sal_uInt16 > &rIds ) 3489 { 3490 PushPropertyIds( rIds, 3491 BASEPROPERTY_ALIGN, 3492 BASEPROPERTY_BACKGROUNDCOLOR, 3493 BASEPROPERTY_BORDER, 3494 BASEPROPERTY_BORDERCOLOR, 3495 BASEPROPERTY_DEFAULTCONTROL, 3496 BASEPROPERTY_ECHOCHAR, 3497 BASEPROPERTY_ENABLED, 3498 BASEPROPERTY_ENABLEVISIBLE, 3499 BASEPROPERTY_FONTDESCRIPTOR, 3500 BASEPROPERTY_HARDLINEBREAKS, 3501 BASEPROPERTY_HELPTEXT, 3502 BASEPROPERTY_HELPURL, 3503 BASEPROPERTY_HSCROLL, 3504 BASEPROPERTY_LINE_END_FORMAT, 3505 BASEPROPERTY_MAXTEXTLEN, 3506 BASEPROPERTY_MULTILINE, 3507 BASEPROPERTY_PRINTABLE, 3508 BASEPROPERTY_READONLY, 3509 BASEPROPERTY_TABSTOP, 3510 BASEPROPERTY_TEXT, 3511 BASEPROPERTY_VSCROLL, 3512 BASEPROPERTY_HIDEINACTIVESELECTION, 3513 BASEPROPERTY_PAINTTRANSPARENT, 3514 BASEPROPERTY_AUTOHSCROLL, 3515 BASEPROPERTY_AUTOVSCROLL, 3516 BASEPROPERTY_VERTICALALIGN, 3517 BASEPROPERTY_WRITING_MODE, 3518 BASEPROPERTY_CONTEXT_WRITING_MODE, 3519 0); 3520 VCLXWindow::ImplGetPropertyIds( rIds ); 3521 } 3522 3523 VCLXEdit::VCLXEdit() : maTextListeners( *this ) 3524 { 3525 } 3526 3527 // ::com::sun::star::uno::XInterface 3528 ::com::sun::star::uno::Any VCLXEdit::queryInterface( const ::com::sun::star::uno::Type & rType ) throw(::com::sun::star::uno::RuntimeException) 3529 { 3530 ::com::sun::star::uno::Any aRet = ::cppu::queryInterface( rType, 3531 SAL_STATIC_CAST( ::com::sun::star::awt::XTextComponent*, this ), 3532 SAL_STATIC_CAST( ::com::sun::star::awt::XTextEditField*, this ), 3533 SAL_STATIC_CAST( ::com::sun::star::awt::XTextLayoutConstrains*, this ) ); 3534 return (aRet.hasValue() ? aRet : VCLXWindow::queryInterface( rType )); 3535 } 3536 3537 // ::com::sun::star::lang::XTypeProvider 3538 IMPL_XTYPEPROVIDER_START( VCLXEdit ) 3539 getCppuType( ( ::com::sun::star::uno::Reference< ::com::sun::star::awt::XTextComponent>* ) NULL ), 3540 getCppuType( ( ::com::sun::star::uno::Reference< ::com::sun::star::awt::XTextEditField>* ) NULL ), 3541 getCppuType( ( ::com::sun::star::uno::Reference< ::com::sun::star::awt::XTextLayoutConstrains>* ) NULL ), 3542 VCLXWindow::getTypes() 3543 IMPL_XTYPEPROVIDER_END 3544 3545 ::com::sun::star::uno::Reference< ::com::sun::star::accessibility::XAccessibleContext > VCLXEdit::CreateAccessibleContext() 3546 { 3547 return getAccessibleFactory().createAccessibleContext( this ); 3548 } 3549 3550 void VCLXEdit::dispose() throw(::com::sun::star::uno::RuntimeException) 3551 { 3552 ::vos::OGuard aGuard( GetMutex() ); 3553 3554 ::com::sun::star::lang::EventObject aObj; 3555 aObj.Source = (::cppu::OWeakObject*)this; 3556 maTextListeners.disposeAndClear( aObj ); 3557 VCLXWindow::dispose(); 3558 } 3559 3560 void VCLXEdit::addTextListener( const ::com::sun::star::uno::Reference< ::com::sun::star::awt::XTextListener > & l ) throw(::com::sun::star::uno::RuntimeException) 3561 { 3562 ::vos::OGuard aGuard( GetMutex() ); 3563 GetTextListeners().addInterface( l ); 3564 } 3565 3566 void VCLXEdit::removeTextListener( const ::com::sun::star::uno::Reference< ::com::sun::star::awt::XTextListener > & l ) throw(::com::sun::star::uno::RuntimeException) 3567 { 3568 ::vos::OGuard aGuard( GetMutex() ); 3569 GetTextListeners().removeInterface( l ); 3570 } 3571 3572 void VCLXEdit::setText( const ::rtl::OUString& aText ) throw(::com::sun::star::uno::RuntimeException) 3573 { 3574 ::vos::OGuard aGuard( GetMutex() ); 3575 3576 Edit* pEdit = (Edit*)GetWindow(); 3577 if ( pEdit ) 3578 { 3579 pEdit->SetText( aText ); 3580 3581 // #107218# Call same listeners like VCL would do after user interaction 3582 SetSynthesizingVCLEvent( sal_True ); 3583 pEdit->SetModifyFlag(); 3584 pEdit->Modify(); 3585 SetSynthesizingVCLEvent( sal_False ); 3586 } 3587 } 3588 3589 void VCLXEdit::insertText( const ::com::sun::star::awt::Selection& rSel, const ::rtl::OUString& aText ) throw(::com::sun::star::uno::RuntimeException) 3590 { 3591 ::vos::OGuard aGuard( GetMutex() ); 3592 3593 Edit* pEdit = (Edit*)GetWindow(); 3594 if ( pEdit ) 3595 { 3596 pEdit->SetSelection( Selection( rSel.Min, rSel.Max ) ); 3597 pEdit->ReplaceSelected( aText ); 3598 3599 // #107218# Call same listeners like VCL would do after user interaction 3600 SetSynthesizingVCLEvent( sal_True ); 3601 pEdit->SetModifyFlag(); 3602 pEdit->Modify(); 3603 SetSynthesizingVCLEvent( sal_False ); 3604 } 3605 } 3606 3607 ::rtl::OUString VCLXEdit::getText() throw(::com::sun::star::uno::RuntimeException) 3608 { 3609 ::vos::OGuard aGuard( GetMutex() ); 3610 3611 ::rtl::OUString aText; 3612 Window* pWindow = GetWindow(); 3613 if ( pWindow ) 3614 aText = pWindow->GetText(); 3615 return aText; 3616 } 3617 3618 ::rtl::OUString VCLXEdit::getSelectedText() throw(::com::sun::star::uno::RuntimeException) 3619 { 3620 ::vos::OGuard aGuard( GetMutex() ); 3621 3622 ::rtl::OUString aText; 3623 Edit* pEdit = (Edit*) GetWindow(); 3624 if ( pEdit) 3625 aText = pEdit->GetSelected(); 3626 return aText; 3627 3628 } 3629 3630 void VCLXEdit::setSelection( const ::com::sun::star::awt::Selection& aSelection ) throw(::com::sun::star::uno::RuntimeException) 3631 { 3632 ::vos::OGuard aGuard( GetMutex() ); 3633 3634 Edit* pEdit = (Edit*) GetWindow(); 3635 if ( pEdit ) 3636 pEdit->SetSelection( Selection( aSelection.Min, aSelection.Max ) ); 3637 } 3638 3639 ::com::sun::star::awt::Selection VCLXEdit::getSelection() throw(::com::sun::star::uno::RuntimeException) 3640 { 3641 ::vos::OGuard aGuard( GetMutex() ); 3642 3643 Selection aSel; 3644 Edit* pEdit = (Edit*) GetWindow(); 3645 if ( pEdit ) 3646 aSel = pEdit->GetSelection(); 3647 return ::com::sun::star::awt::Selection( aSel.Min(), aSel.Max() ); 3648 } 3649 3650 sal_Bool VCLXEdit::isEditable() throw(::com::sun::star::uno::RuntimeException) 3651 { 3652 ::vos::OGuard aGuard( GetMutex() ); 3653 3654 Edit* pEdit = (Edit*) GetWindow(); 3655 return ( pEdit && !pEdit->IsReadOnly() && pEdit->IsEnabled() ) ? sal_True : sal_False; 3656 } 3657 3658 void VCLXEdit::setEditable( sal_Bool bEditable ) throw(::com::sun::star::uno::RuntimeException) 3659 { 3660 ::vos::OGuard aGuard( GetMutex() ); 3661 3662 Edit* pEdit = (Edit*) GetWindow(); 3663 if ( pEdit ) 3664 pEdit->SetReadOnly( !bEditable ); 3665 } 3666 3667 3668 void VCLXEdit::setMaxTextLen( sal_Int16 nLen ) throw(::com::sun::star::uno::RuntimeException) 3669 { 3670 ::vos::OGuard aGuard( GetMutex() ); 3671 3672 Edit* pEdit = (Edit*) GetWindow(); 3673 if ( pEdit ) 3674 pEdit->SetMaxTextLen( nLen ); 3675 } 3676 3677 sal_Int16 VCLXEdit::getMaxTextLen() throw(::com::sun::star::uno::RuntimeException) 3678 { 3679 ::vos::OGuard aGuard( GetMutex() ); 3680 3681 Edit* pEdit = (Edit*) GetWindow(); 3682 return pEdit ? pEdit->GetMaxTextLen() : 0; 3683 } 3684 3685 void VCLXEdit::setEchoChar( sal_Unicode cEcho ) throw(::com::sun::star::uno::RuntimeException) 3686 { 3687 ::vos::OGuard aGuard( GetMutex() ); 3688 3689 Edit* pEdit = (Edit*) GetWindow(); 3690 if ( pEdit ) 3691 pEdit->SetEchoChar( cEcho ); 3692 } 3693 3694 void VCLXEdit::setProperty( const ::rtl::OUString& PropertyName, const ::com::sun::star::uno::Any& Value) throw(::com::sun::star::uno::RuntimeException) 3695 { 3696 ::vos::OGuard aGuard( GetMutex() ); 3697 3698 Edit* pEdit = (Edit*)GetWindow(); 3699 if ( pEdit ) 3700 { 3701 sal_uInt16 nPropType = GetPropertyId( PropertyName ); 3702 switch ( nPropType ) 3703 { 3704 case BASEPROPERTY_HIDEINACTIVESELECTION: 3705 ::toolkit::adjustBooleanWindowStyle( Value, pEdit, WB_NOHIDESELECTION, sal_True ); 3706 if ( pEdit->GetSubEdit() ) 3707 ::toolkit::adjustBooleanWindowStyle( Value, pEdit->GetSubEdit(), WB_NOHIDESELECTION, sal_True ); 3708 break; 3709 3710 case BASEPROPERTY_READONLY: 3711 { 3712 sal_Bool b = sal_Bool(); 3713 if ( Value >>= b ) 3714 pEdit->SetReadOnly( b ); 3715 } 3716 break; 3717 case BASEPROPERTY_ECHOCHAR: 3718 { 3719 sal_Int16 n = sal_Int16(); 3720 if ( Value >>= n ) 3721 pEdit->SetEchoChar( n ); 3722 } 3723 break; 3724 case BASEPROPERTY_MAXTEXTLEN: 3725 { 3726 sal_Int16 n = sal_Int16(); 3727 if ( Value >>= n ) 3728 pEdit->SetMaxTextLen( n ); 3729 } 3730 break; 3731 default: 3732 { 3733 VCLXWindow::setProperty( PropertyName, Value ); 3734 } 3735 } 3736 } 3737 } 3738 3739 ::com::sun::star::uno::Any VCLXEdit::getProperty( const ::rtl::OUString& PropertyName ) throw(::com::sun::star::uno::RuntimeException) 3740 { 3741 ::vos::OGuard aGuard( GetMutex() ); 3742 3743 ::com::sun::star::uno::Any aProp; 3744 Edit* pEdit = (Edit*)GetWindow(); 3745 if ( pEdit ) 3746 { 3747 sal_uInt16 nPropType = GetPropertyId( PropertyName ); 3748 switch ( nPropType ) 3749 { 3750 case BASEPROPERTY_HIDEINACTIVESELECTION: 3751 aProp <<= (sal_Bool)( ( pEdit->GetStyle() & WB_NOHIDESELECTION ) == 0 ); 3752 break; 3753 case BASEPROPERTY_READONLY: 3754 aProp <<= (sal_Bool) pEdit->IsReadOnly(); 3755 break; 3756 case BASEPROPERTY_ECHOCHAR: 3757 aProp <<= (sal_Int16) pEdit->GetEchoChar(); 3758 break; 3759 case BASEPROPERTY_MAXTEXTLEN: 3760 aProp <<= (sal_Int16) pEdit->GetMaxTextLen(); 3761 break; 3762 default: 3763 { 3764 aProp = VCLXWindow::getProperty( PropertyName ); 3765 } 3766 } 3767 } 3768 return aProp; 3769 } 3770 3771 ::com::sun::star::awt::Size VCLXEdit::getMinimumSize( ) throw(::com::sun::star::uno::RuntimeException) 3772 { 3773 ::vos::OGuard aGuard( GetMutex() ); 3774 3775 Size aSz; 3776 Edit* pEdit = (Edit*) GetWindow(); 3777 if ( pEdit ) 3778 aSz = pEdit->CalcMinimumSize(); 3779 return AWTSize(aSz); 3780 } 3781 3782 ::com::sun::star::awt::Size VCLXEdit::getPreferredSize( ) throw(::com::sun::star::uno::RuntimeException) 3783 { 3784 ::vos::OGuard aGuard( GetMutex() ); 3785 3786 Size aSz; 3787 Edit* pEdit = (Edit*) GetWindow(); 3788 if ( pEdit ) 3789 { 3790 aSz = pEdit->CalcMinimumSize(); 3791 aSz.Height() += 4; 3792 } 3793 return AWTSize(aSz); 3794 } 3795 3796 ::com::sun::star::awt::Size VCLXEdit::calcAdjustedSize( const ::com::sun::star::awt::Size& rNewSize ) throw(::com::sun::star::uno::RuntimeException) 3797 { 3798 ::vos::OGuard aGuard( GetMutex() ); 3799 3800 ::com::sun::star::awt::Size aSz = rNewSize; 3801 ::com::sun::star::awt::Size aMinSz = getMinimumSize(); 3802 if ( aSz.Height != aMinSz.Height ) 3803 aSz.Height = aMinSz.Height; 3804 3805 return aSz; 3806 } 3807 3808 ::com::sun::star::awt::Size VCLXEdit::getMinimumSize( sal_Int16 nCols, sal_Int16 ) throw(::com::sun::star::uno::RuntimeException) 3809 { 3810 ::vos::OGuard aGuard( GetMutex() ); 3811 3812 Size aSz; 3813 Edit* pEdit = (Edit*) GetWindow(); 3814 if ( pEdit ) 3815 { 3816 if ( nCols ) 3817 aSz = pEdit->CalcSize( nCols ); 3818 else 3819 aSz = pEdit->CalcMinimumSize(); 3820 } 3821 return AWTSize(aSz); 3822 } 3823 3824 void VCLXEdit::getColumnsAndLines( sal_Int16& nCols, sal_Int16& nLines ) throw(::com::sun::star::uno::RuntimeException) 3825 { 3826 ::vos::OGuard aGuard( GetMutex() ); 3827 3828 nLines = 1; 3829 nCols = 0; 3830 Edit* pEdit = (Edit*) GetWindow(); 3831 if ( pEdit ) 3832 nCols = pEdit->GetMaxVisChars(); 3833 } 3834 3835 void VCLXEdit::ProcessWindowEvent( const VclWindowEvent& rVclWindowEvent ) 3836 { 3837 switch ( rVclWindowEvent.GetId() ) 3838 { 3839 case VCLEVENT_EDIT_MODIFY: 3840 { 3841 ::com::sun::star::uno::Reference< ::com::sun::star::awt::XWindow > xKeepAlive( this ); 3842 // since we call listeners below, there is a potential that we will be destroyed 3843 // during the listener call. To prevent the resulting crashs, we keep us 3844 // alive as long as we're here 3845 // #20178# - 2003-10-01 - fs@openoffice.org 3846 3847 if ( GetTextListeners().getLength() ) 3848 { 3849 ::com::sun::star::awt::TextEvent aEvent; 3850 aEvent.Source = (::cppu::OWeakObject*)this; 3851 GetTextListeners().textChanged( aEvent ); 3852 } 3853 } 3854 break; 3855 3856 default: 3857 VCLXWindow::ProcessWindowEvent( rVclWindowEvent ); 3858 break; 3859 } 3860 } 3861 3862 // ---------------------------------------------------- 3863 // class VCLXComboBox 3864 // ---------------------------------------------------- 3865 3866 void VCLXComboBox::ImplGetPropertyIds( std::list< sal_uInt16 > &rIds ) 3867 { 3868 PushPropertyIds( rIds, 3869 BASEPROPERTY_AUTOCOMPLETE, 3870 BASEPROPERTY_BACKGROUNDCOLOR, 3871 BASEPROPERTY_BORDER, 3872 BASEPROPERTY_BORDERCOLOR, 3873 BASEPROPERTY_DEFAULTCONTROL, 3874 BASEPROPERTY_DROPDOWN, 3875 BASEPROPERTY_ENABLED, 3876 BASEPROPERTY_ENABLEVISIBLE, 3877 BASEPROPERTY_FONTDESCRIPTOR, 3878 BASEPROPERTY_HELPTEXT, 3879 BASEPROPERTY_HELPURL, 3880 BASEPROPERTY_LINECOUNT, 3881 BASEPROPERTY_MAXTEXTLEN, 3882 BASEPROPERTY_PRINTABLE, 3883 BASEPROPERTY_READONLY, 3884 BASEPROPERTY_STRINGITEMLIST, 3885 BASEPROPERTY_TABSTOP, 3886 BASEPROPERTY_TEXT, 3887 BASEPROPERTY_HIDEINACTIVESELECTION, 3888 BASEPROPERTY_ALIGN, 3889 BASEPROPERTY_WRITING_MODE, 3890 BASEPROPERTY_CONTEXT_WRITING_MODE, 3891 BASEPROPERTY_REFERENCE_DEVICE, 3892 BASEPROPERTY_MOUSE_WHEEL_BEHAVIOUR, 3893 0); 3894 // no, don't call VCLXEdit here - it has properties which we do *not* want to have at at combo box 3895 // #i92690# / 2008-08-12 / frank.schoenheit@sun.com 3896 // VCLXEdit::ImplGetPropertyIds( rIds ); 3897 VCLXWindow::ImplGetPropertyIds( rIds ); 3898 } 3899 3900 VCLXComboBox::VCLXComboBox() 3901 : maActionListeners( *this ), maItemListeners( *this ) 3902 { 3903 } 3904 3905 VCLXComboBox::~VCLXComboBox() 3906 { 3907 #ifndef __SUNPRO_CC 3908 OSL_TRACE ("%s", __FUNCTION__); 3909 #endif 3910 } 3911 3912 ::com::sun::star::uno::Reference< ::com::sun::star::accessibility::XAccessibleContext > VCLXComboBox::CreateAccessibleContext() 3913 { 3914 ::vos::OGuard aGuard( GetMutex() ); 3915 3916 return getAccessibleFactory().createAccessibleContext( this ); 3917 } 3918 3919 void VCLXComboBox::dispose() throw(::com::sun::star::uno::RuntimeException) 3920 { 3921 ::vos::OGuard aGuard( GetMutex() ); 3922 3923 ::com::sun::star::lang::EventObject aObj; 3924 aObj.Source = (::cppu::OWeakObject*)this; 3925 maItemListeners.disposeAndClear( aObj ); 3926 maActionListeners.disposeAndClear( aObj ); 3927 VCLXEdit::dispose(); 3928 } 3929 3930 3931 void VCLXComboBox::addItemListener( const ::com::sun::star::uno::Reference< ::com::sun::star::awt::XItemListener > & l ) throw(::com::sun::star::uno::RuntimeException) 3932 { 3933 ::vos::OGuard aGuard( GetMutex() ); 3934 maItemListeners.addInterface( l ); 3935 } 3936 3937 void VCLXComboBox::removeItemListener( const ::com::sun::star::uno::Reference< ::com::sun::star::awt::XItemListener > & l ) throw(::com::sun::star::uno::RuntimeException) 3938 { 3939 ::vos::OGuard aGuard( GetMutex() ); 3940 maItemListeners.removeInterface( l ); 3941 } 3942 3943 void VCLXComboBox::addActionListener( const ::com::sun::star::uno::Reference< ::com::sun::star::awt::XActionListener > & l ) throw(::com::sun::star::uno::RuntimeException) 3944 { 3945 ::vos::OGuard aGuard( GetMutex() ); 3946 maActionListeners.addInterface( l ); 3947 } 3948 3949 void VCLXComboBox::removeActionListener( const ::com::sun::star::uno::Reference< ::com::sun::star::awt::XActionListener > & l ) throw(::com::sun::star::uno::RuntimeException) 3950 { 3951 ::vos::OGuard aGuard( GetMutex() ); 3952 maActionListeners.removeInterface( l ); 3953 } 3954 3955 void VCLXComboBox::addItem( const ::rtl::OUString& aItem, sal_Int16 nPos ) throw(::com::sun::star::uno::RuntimeException) 3956 { 3957 ::vos::OGuard aGuard( GetMutex() ); 3958 3959 ComboBox* pBox = (ComboBox*) GetWindow(); 3960 if ( pBox ) 3961 pBox->InsertEntry( aItem, nPos ); 3962 } 3963 3964 void VCLXComboBox::addItems( const ::com::sun::star::uno::Sequence< ::rtl::OUString>& aItems, sal_Int16 nPos ) throw(::com::sun::star::uno::RuntimeException) 3965 { 3966 ::vos::OGuard aGuard( GetMutex() ); 3967 3968 ComboBox* pBox = (ComboBox*) GetWindow(); 3969 if ( pBox ) 3970 { 3971 sal_uInt16 nP = nPos; 3972 for ( sal_uInt16 n = 0; n < aItems.getLength(); n++ ) 3973 { 3974 pBox->InsertEntry( aItems.getConstArray()[n], nP ); 3975 if ( nP == 0xFFFF ) 3976 { 3977 OSL_ENSURE( false, "VCLXComboBox::addItems: too many entries!" ); 3978 // skip remaining entries, list cannot hold them, anyway 3979 break; 3980 } 3981 } 3982 } 3983 } 3984 3985 void VCLXComboBox::removeItems( sal_Int16 nPos, sal_Int16 nCount ) throw(::com::sun::star::uno::RuntimeException) 3986 { 3987 ::vos::OGuard aGuard( GetMutex() ); 3988 3989 ComboBox* pBox = (ComboBox*) GetWindow(); 3990 if ( pBox ) 3991 { 3992 for ( sal_uInt16 n = nCount; n; ) 3993 pBox->RemoveEntry( nPos + (--n) ); 3994 } 3995 } 3996 3997 sal_Int16 VCLXComboBox::getItemCount() throw(::com::sun::star::uno::RuntimeException) 3998 { 3999 ::vos::OGuard aGuard( GetMutex() ); 4000 4001 ComboBox* pBox = (ComboBox*) GetWindow(); 4002 return pBox ? pBox->GetEntryCount() : 0; 4003 } 4004 4005 ::rtl::OUString VCLXComboBox::getItem( sal_Int16 nPos ) throw(::com::sun::star::uno::RuntimeException) 4006 { 4007 ::vos::OGuard aGuard( GetMutex() ); 4008 4009 ::rtl::OUString aItem; 4010 ComboBox* pBox = (ComboBox*) GetWindow(); 4011 if ( pBox ) 4012 aItem = pBox->GetEntry( nPos ); 4013 return aItem; 4014 } 4015 4016 ::com::sun::star::uno::Sequence< ::rtl::OUString> VCLXComboBox::getItems() throw(::com::sun::star::uno::RuntimeException) 4017 { 4018 ::vos::OGuard aGuard( GetMutex() ); 4019 4020 ::com::sun::star::uno::Sequence< ::rtl::OUString> aSeq; 4021 ComboBox* pBox = (ComboBox*) GetWindow(); 4022 if ( pBox ) 4023 { 4024 sal_uInt16 nEntries = pBox->GetEntryCount(); 4025 aSeq = ::com::sun::star::uno::Sequence< ::rtl::OUString>( nEntries ); 4026 for ( sal_uInt16 n = nEntries; n; ) 4027 { 4028 --n; 4029 aSeq.getArray()[n] = pBox->GetEntry( n ); 4030 } 4031 } 4032 return aSeq; 4033 } 4034 4035 void VCLXComboBox::setDropDownLineCount( sal_Int16 nLines ) throw(::com::sun::star::uno::RuntimeException) 4036 { 4037 ::vos::OGuard aGuard( GetMutex() ); 4038 4039 ComboBox* pBox = (ComboBox*) GetWindow(); 4040 if ( pBox ) 4041 pBox->SetDropDownLineCount( nLines ); 4042 } 4043 4044 sal_Int16 VCLXComboBox::getDropDownLineCount() throw(::com::sun::star::uno::RuntimeException) 4045 { 4046 ::vos::OGuard aGuard( GetMutex() ); 4047 4048 sal_Int16 nLines = 0; 4049 ComboBox* pBox = (ComboBox*) GetWindow(); 4050 if ( pBox ) 4051 nLines = pBox->GetDropDownLineCount(); 4052 return nLines; 4053 } 4054 4055 void VCLXComboBox::setProperty( const ::rtl::OUString& PropertyName, const ::com::sun::star::uno::Any& Value) throw(::com::sun::star::uno::RuntimeException) 4056 { 4057 ::vos::OGuard aGuard( GetMutex() ); 4058 4059 ComboBox* pComboBox = (ComboBox*)GetWindow(); 4060 if ( pComboBox ) 4061 { 4062 sal_uInt16 nPropType = GetPropertyId( PropertyName ); 4063 switch ( nPropType ) 4064 { 4065 case BASEPROPERTY_LINECOUNT: 4066 { 4067 sal_Int16 n = sal_Int16(); 4068 if ( Value >>= n ) 4069 pComboBox->SetDropDownLineCount( n ); 4070 } 4071 break; 4072 case BASEPROPERTY_AUTOCOMPLETE: 4073 { 4074 sal_Int16 n = sal_Int16(); 4075 if ( Value >>= n ) 4076 pComboBox->EnableAutocomplete( n != 0 ); 4077 } 4078 break; 4079 case BASEPROPERTY_STRINGITEMLIST: 4080 { 4081 ::com::sun::star::uno::Sequence< ::rtl::OUString> aItems; 4082 if ( Value >>= aItems ) 4083 { 4084 pComboBox->Clear(); 4085 addItems( aItems, 0 ); 4086 } 4087 } 4088 break; 4089 default: 4090 { 4091 VCLXEdit::setProperty( PropertyName, Value ); 4092 4093 // #109385# SetBorderStyle is not virtual 4094 if ( nPropType == BASEPROPERTY_BORDER ) 4095 { 4096 sal_uInt16 nBorder = sal_uInt16(); 4097 if ( (Value >>= nBorder) && nBorder != 0 ) 4098 pComboBox->SetBorderStyle( nBorder ); 4099 } 4100 } 4101 } 4102 } 4103 } 4104 4105 ::com::sun::star::uno::Any VCLXComboBox::getProperty( const ::rtl::OUString& PropertyName ) throw(::com::sun::star::uno::RuntimeException) 4106 { 4107 ::vos::OGuard aGuard( GetMutex() ); 4108 4109 ::com::sun::star::uno::Any aProp; 4110 ComboBox* pComboBox = (ComboBox*)GetWindow(); 4111 if ( pComboBox ) 4112 { 4113 sal_uInt16 nPropType = GetPropertyId( PropertyName ); 4114 switch ( nPropType ) 4115 { 4116 case BASEPROPERTY_LINECOUNT: 4117 { 4118 aProp <<= (sal_Int16) pComboBox->GetDropDownLineCount(); 4119 } 4120 break; 4121 case BASEPROPERTY_AUTOCOMPLETE: 4122 { 4123 aProp <<= (sal_Bool) pComboBox->IsAutocompleteEnabled(); 4124 } 4125 break; 4126 case BASEPROPERTY_STRINGITEMLIST: 4127 { 4128 sal_uInt16 nItems = pComboBox->GetEntryCount(); 4129 ::com::sun::star::uno::Sequence< ::rtl::OUString> aSeq( nItems ); 4130 ::rtl::OUString* pStrings = aSeq.getArray(); 4131 for ( sal_uInt16 n = 0; n < nItems; n++ ) 4132 pStrings[n] = pComboBox->GetEntry( n ); 4133 aProp <<= aSeq; 4134 4135 } 4136 break; 4137 default: 4138 { 4139 aProp <<= VCLXEdit::getProperty( PropertyName ); 4140 } 4141 } 4142 } 4143 return aProp; 4144 } 4145 4146 void VCLXComboBox::ProcessWindowEvent( const VclWindowEvent& rVclWindowEvent ) 4147 { 4148 ::com::sun::star::uno::Reference< ::com::sun::star::awt::XWindow > xKeepAlive( this ); 4149 // since we call listeners below, there is a potential that we will be destroyed 4150 // during the listener call. To prevent the resulting crashs, we keep us 4151 // alive as long as we're here 4152 // #20178# - 2003-10-01 - fs@openoffice.org 4153 4154 switch ( rVclWindowEvent.GetId() ) 4155 { 4156 case VCLEVENT_COMBOBOX_SELECT: 4157 if ( maItemListeners.getLength() ) 4158 { 4159 ComboBox* pComboBox = (ComboBox*)GetWindow(); 4160 if( pComboBox ) 4161 { 4162 if ( !pComboBox->IsTravelSelect() ) 4163 { 4164 ::com::sun::star::awt::ItemEvent aEvent; 4165 aEvent.Source = (::cppu::OWeakObject*)this; 4166 aEvent.Highlighted = sal_False; 4167 4168 // Bei Mehrfachselektion 0xFFFF, sonst die ID 4169 aEvent.Selected = pComboBox->GetEntryPos( pComboBox->GetText() ); 4170 4171 maItemListeners.itemStateChanged( aEvent ); 4172 } 4173 } 4174 } 4175 break; 4176 4177 case VCLEVENT_COMBOBOX_DOUBLECLICK: 4178 if ( maActionListeners.getLength() ) 4179 { 4180 ::com::sun::star::awt::ActionEvent aEvent; 4181 aEvent.Source = (::cppu::OWeakObject*)this; 4182 // aEvent.ActionCommand = ...; 4183 maActionListeners.actionPerformed( aEvent ); 4184 } 4185 break; 4186 4187 default: 4188 VCLXEdit::ProcessWindowEvent( rVclWindowEvent ); 4189 break; 4190 } 4191 } 4192 4193 ::com::sun::star::awt::Size VCLXComboBox::getMinimumSize( ) throw(::com::sun::star::uno::RuntimeException) 4194 { 4195 ::vos::OGuard aGuard( GetMutex() ); 4196 4197 Size aSz; 4198 ComboBox* pComboBox = (ComboBox*) GetWindow(); 4199 if ( pComboBox ) 4200 aSz = pComboBox->CalcMinimumSize(); 4201 return AWTSize(aSz); 4202 } 4203 4204 ::com::sun::star::awt::Size VCLXComboBox::getPreferredSize( ) throw(::com::sun::star::uno::RuntimeException) 4205 { 4206 ::vos::OGuard aGuard( GetMutex() ); 4207 4208 Size aSz; 4209 ComboBox* pComboBox = (ComboBox*) GetWindow(); 4210 if ( pComboBox ) 4211 { 4212 aSz = pComboBox->CalcMinimumSize(); 4213 if ( pComboBox->GetStyle() & WB_DROPDOWN ) 4214 aSz.Height() += 4; 4215 } 4216 return AWTSize(aSz); 4217 } 4218 4219 ::com::sun::star::awt::Size VCLXComboBox::calcAdjustedSize( const ::com::sun::star::awt::Size& rNewSize ) throw(::com::sun::star::uno::RuntimeException) 4220 { 4221 ::vos::OGuard aGuard( GetMutex() ); 4222 4223 Size aSz = VCLSize(rNewSize); 4224 ComboBox* pComboBox = (ComboBox*) GetWindow(); 4225 if ( pComboBox ) 4226 aSz = pComboBox->CalcAdjustedSize( aSz ); 4227 return AWTSize(aSz); 4228 } 4229 4230 ::com::sun::star::awt::Size VCLXComboBox::getMinimumSize( sal_Int16 nCols, sal_Int16 nLines ) throw(::com::sun::star::uno::RuntimeException) 4231 { 4232 ::vos::OGuard aGuard( GetMutex() ); 4233 4234 Size aSz; 4235 ComboBox* pComboBox = (ComboBox*) GetWindow(); 4236 if ( pComboBox ) 4237 aSz = pComboBox->CalcSize( nCols, nLines ); 4238 return AWTSize(aSz); 4239 } 4240 4241 void VCLXComboBox::getColumnsAndLines( sal_Int16& nCols, sal_Int16& nLines ) throw(::com::sun::star::uno::RuntimeException) 4242 { 4243 ::vos::OGuard aGuard( GetMutex() ); 4244 4245 nCols = nLines = 0; 4246 ComboBox* pComboBox = (ComboBox*) GetWindow(); 4247 if ( pComboBox ) 4248 { 4249 sal_uInt16 nC, nL; 4250 pComboBox->GetMaxVisColumnsAndLines( nC, nL ); 4251 nCols = nC; 4252 nLines = nL; 4253 } 4254 } 4255 void SAL_CALL VCLXComboBox::listItemInserted( const ItemListEvent& i_rEvent ) throw (RuntimeException) 4256 { 4257 ::vos::OGuard aGuard( GetMutex() ); 4258 4259 ComboBox* pComboBox = dynamic_cast< ComboBox* >( GetWindow() ); 4260 4261 ENSURE_OR_RETURN_VOID( pComboBox, "VCLXComboBox::listItemInserted: no ComboBox?!" ); 4262 ENSURE_OR_RETURN_VOID( ( i_rEvent.ItemPosition >= 0 ) && ( i_rEvent.ItemPosition <= sal_Int32( pComboBox->GetEntryCount() ) ), 4263 "VCLXComboBox::listItemInserted: illegal (inconsistent) item position!" ); 4264 pComboBox->InsertEntry( 4265 i_rEvent.ItemText.IsPresent ? i_rEvent.ItemText.Value : ::rtl::OUString(), 4266 i_rEvent.ItemImageURL.IsPresent ? lcl_getImageFromURL( i_rEvent.ItemImageURL.Value ) : Image(), 4267 i_rEvent.ItemPosition ); 4268 } 4269 4270 void SAL_CALL VCLXComboBox::listItemRemoved( const ItemListEvent& i_rEvent ) throw (RuntimeException) 4271 { 4272 ::vos::OGuard aGuard( GetMutex() ); 4273 4274 ComboBox* pComboBox = dynamic_cast< ComboBox* >( GetWindow() ); 4275 4276 ENSURE_OR_RETURN_VOID( pComboBox, "VCLXComboBox::listItemRemoved: no ComboBox?!" ); 4277 ENSURE_OR_RETURN_VOID( ( i_rEvent.ItemPosition >= 0 ) && ( i_rEvent.ItemPosition < sal_Int32( pComboBox->GetEntryCount() ) ), 4278 "VCLXComboBox::listItemRemoved: illegal (inconsistent) item position!" ); 4279 4280 pComboBox->RemoveEntry( i_rEvent.ItemPosition ); 4281 } 4282 4283 void SAL_CALL VCLXComboBox::listItemModified( const ItemListEvent& i_rEvent ) throw (RuntimeException) 4284 { 4285 ::vos::OGuard aGuard( GetMutex() ); 4286 4287 ComboBox* pComboBox = dynamic_cast< ComboBox* >( GetWindow() ); 4288 4289 ENSURE_OR_RETURN_VOID( pComboBox, "VCLXComboBox::listItemModified: no ComboBox?!" ); 4290 ENSURE_OR_RETURN_VOID( ( i_rEvent.ItemPosition >= 0 ) && ( i_rEvent.ItemPosition < sal_Int32( pComboBox->GetEntryCount() ) ), 4291 "VCLXComboBox::listItemModified: illegal (inconsistent) item position!" ); 4292 4293 // VCL's ComboBox does not support changing an entry's text or image, so remove and re-insert 4294 4295 const ::rtl::OUString sNewText = i_rEvent.ItemText.IsPresent ? i_rEvent.ItemText.Value : ::rtl::OUString( pComboBox->GetEntry( i_rEvent.ItemPosition ) ); 4296 const Image aNewImage( i_rEvent.ItemImageURL.IsPresent ? lcl_getImageFromURL( i_rEvent.ItemImageURL.Value ) : pComboBox->GetEntryImage( i_rEvent.ItemPosition ) ); 4297 4298 pComboBox->RemoveEntry( i_rEvent.ItemPosition ); 4299 pComboBox->InsertEntry( sNewText, aNewImage, i_rEvent.ItemPosition ); 4300 } 4301 4302 void SAL_CALL VCLXComboBox::allItemsRemoved( const EventObject& i_rEvent ) throw (RuntimeException) 4303 { 4304 ::vos::OGuard aGuard( GetMutex() ); 4305 4306 ComboBox* pComboBox = dynamic_cast< ComboBox* >( GetWindow() ); 4307 ENSURE_OR_RETURN_VOID( pComboBox, "VCLXComboBox::listItemModified: no ComboBox?!" ); 4308 4309 pComboBox->Clear(); 4310 4311 (void)i_rEvent; 4312 } 4313 4314 void SAL_CALL VCLXComboBox::itemListChanged( const EventObject& i_rEvent ) throw (RuntimeException) 4315 { 4316 ::vos::OGuard aGuard( GetMutex() ); 4317 4318 ComboBox* pComboBox = dynamic_cast< ComboBox* >( GetWindow() ); 4319 ENSURE_OR_RETURN_VOID( pComboBox, "VCLXComboBox::listItemModified: no ComboBox?!" ); 4320 4321 pComboBox->Clear(); 4322 4323 uno::Reference< beans::XPropertySet > xPropSet( i_rEvent.Source, uno::UNO_QUERY_THROW ); 4324 uno::Reference< beans::XPropertySetInfo > xPSI( xPropSet->getPropertySetInfo(), uno::UNO_QUERY_THROW ); 4325 // bool localize = xPSI->hasPropertyByName( ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "ResourceResolver" ) ) ); 4326 uno::Reference< resource::XStringResourceResolver > xStringResourceResolver; 4327 if ( xPSI->hasPropertyByName( ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "ResourceResolver" ) ) ) ) 4328 { 4329 xStringResourceResolver.set( 4330 xPropSet->getPropertyValue( ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "ResourceResolver" ) ) ), 4331 uno::UNO_QUERY 4332 ); 4333 } 4334 4335 4336 Reference< XItemList > xItemList( i_rEvent.Source, uno::UNO_QUERY_THROW ); 4337 uno::Sequence< beans::Pair< ::rtl::OUString, ::rtl::OUString > > aItems = xItemList->getAllItems(); 4338 for ( sal_Int32 i=0; i<aItems.getLength(); ++i ) 4339 { 4340 ::rtl::OUString aLocalizationKey( aItems[i].First ); 4341 if ( xStringResourceResolver.is() && aLocalizationKey.getLength() != 0 && aLocalizationKey[0] == '&' ) 4342 { 4343 aLocalizationKey = xStringResourceResolver->resolveString(aLocalizationKey.copy( 1 )); 4344 } 4345 pComboBox->InsertEntry( aLocalizationKey, lcl_getImageFromURL( aItems[i].Second ) ); 4346 } 4347 } 4348 void SAL_CALL VCLXComboBox::disposing( const EventObject& i_rEvent ) throw (RuntimeException) 4349 { 4350 // just disambiguate 4351 VCLXEdit::disposing( i_rEvent ); 4352 } 4353 4354 // ---------------------------------------------------- 4355 // class VCLXFormattedSpinField 4356 // ---------------------------------------------------- 4357 void VCLXFormattedSpinField::ImplGetPropertyIds( std::list< sal_uInt16 > &rIds ) 4358 { 4359 // Interestingly in the UnoControl API this is 4360 // - not derived from XEdit ultimately, (correct ?) - so cut this here ... 4361 // VCLXSpinField::ImplGetPropertyIds( rIds ); 4362 VCLXWindow::ImplGetPropertyIds( rIds ); 4363 } 4364 4365 VCLXFormattedSpinField::VCLXFormattedSpinField() 4366 { 4367 } 4368 4369 VCLXFormattedSpinField::~VCLXFormattedSpinField() 4370 { 4371 } 4372 4373 void VCLXFormattedSpinField::setStrictFormat( sal_Bool bStrict ) 4374 { 4375 ::vos::OGuard aGuard( GetMutex() ); 4376 4377 FormatterBase* pFormatter = GetFormatter(); 4378 if ( pFormatter ) 4379 pFormatter->SetStrictFormat( bStrict ); 4380 } 4381 4382 sal_Bool VCLXFormattedSpinField::isStrictFormat() 4383 { 4384 FormatterBase* pFormatter = GetFormatter(); 4385 return pFormatter ? pFormatter->IsStrictFormat() : sal_False; 4386 } 4387 4388 4389 void VCLXFormattedSpinField::setProperty( const ::rtl::OUString& PropertyName, const ::com::sun::star::uno::Any& Value) throw(::com::sun::star::uno::RuntimeException) 4390 { 4391 ::vos::OGuard aGuard( GetMutex() ); 4392 4393 FormatterBase* pFormatter = GetFormatter(); 4394 if ( pFormatter ) 4395 { 4396 sal_uInt16 nPropType = GetPropertyId( PropertyName ); 4397 switch ( nPropType ) 4398 { 4399 case BASEPROPERTY_SPIN: 4400 { 4401 sal_Bool b = sal_Bool(); 4402 if ( Value >>= b ) 4403 { 4404 WinBits nStyle = GetWindow()->GetStyle() | WB_SPIN; 4405 if ( !b ) 4406 nStyle &= ~WB_SPIN; 4407 GetWindow()->SetStyle( nStyle ); 4408 } 4409 } 4410 break; 4411 case BASEPROPERTY_STRICTFORMAT: 4412 { 4413 sal_Bool b = sal_Bool(); 4414 if ( Value >>= b ) 4415 { 4416 pFormatter->SetStrictFormat( b ); 4417 } 4418 } 4419 break; 4420 default: 4421 { 4422 VCLXSpinField::setProperty( PropertyName, Value ); 4423 } 4424 } 4425 } 4426 } 4427 4428 ::com::sun::star::uno::Any VCLXFormattedSpinField::getProperty( const ::rtl::OUString& PropertyName ) throw(::com::sun::star::uno::RuntimeException) 4429 { 4430 ::vos::OGuard aGuard( GetMutex() ); 4431 4432 ::com::sun::star::uno::Any aProp; 4433 FormatterBase* pFormatter = GetFormatter(); 4434 if ( pFormatter ) 4435 { 4436 sal_uInt16 nPropType = GetPropertyId( PropertyName ); 4437 switch ( nPropType ) 4438 { 4439 case BASEPROPERTY_TABSTOP: 4440 { 4441 aProp <<= (sal_Bool) ( ( GetWindow()->GetStyle() & WB_SPIN ) ? sal_True : sal_False ); 4442 } 4443 break; 4444 case BASEPROPERTY_STRICTFORMAT: 4445 { 4446 aProp <<= (sal_Bool) pFormatter->IsStrictFormat(); 4447 } 4448 break; 4449 default: 4450 { 4451 aProp <<= VCLXSpinField::getProperty( PropertyName ); 4452 } 4453 } 4454 } 4455 return aProp; 4456 } 4457 4458 4459 // ---------------------------------------------------- 4460 // class VCLXDateField 4461 // ---------------------------------------------------- 4462 4463 void VCLXDateField::ImplGetPropertyIds( std::list< sal_uInt16 > &rIds ) 4464 { 4465 PushPropertyIds( rIds, 4466 BASEPROPERTY_ALIGN, 4467 BASEPROPERTY_BACKGROUNDCOLOR, 4468 BASEPROPERTY_BORDER, 4469 BASEPROPERTY_BORDERCOLOR, 4470 BASEPROPERTY_DATE, 4471 BASEPROPERTY_DATEMAX, 4472 BASEPROPERTY_DATEMIN, 4473 BASEPROPERTY_DATESHOWCENTURY, 4474 BASEPROPERTY_DEFAULTCONTROL, 4475 BASEPROPERTY_DROPDOWN, 4476 BASEPROPERTY_ENABLED, 4477 BASEPROPERTY_ENABLEVISIBLE, 4478 BASEPROPERTY_EXTDATEFORMAT, 4479 BASEPROPERTY_FONTDESCRIPTOR, 4480 BASEPROPERTY_HELPTEXT, 4481 BASEPROPERTY_HELPURL, 4482 BASEPROPERTY_PRINTABLE, 4483 BASEPROPERTY_READONLY, 4484 BASEPROPERTY_REPEAT, 4485 BASEPROPERTY_REPEAT_DELAY, 4486 BASEPROPERTY_SPIN, 4487 BASEPROPERTY_STRICTFORMAT, 4488 BASEPROPERTY_TABSTOP, 4489 BASEPROPERTY_ENFORCE_FORMAT, 4490 BASEPROPERTY_TEXT, 4491 BASEPROPERTY_HIDEINACTIVESELECTION, 4492 BASEPROPERTY_VERTICALALIGN, 4493 BASEPROPERTY_WRITING_MODE, 4494 BASEPROPERTY_CONTEXT_WRITING_MODE, 4495 BASEPROPERTY_MOUSE_WHEEL_BEHAVIOUR, 4496 0); 4497 VCLXFormattedSpinField::ImplGetPropertyIds( rIds ); 4498 } 4499 4500 VCLXDateField::VCLXDateField() 4501 { 4502 } 4503 4504 VCLXDateField::~VCLXDateField() 4505 { 4506 } 4507 4508 //IAccessibility2 Implementation 2009----- 4509 //change the window type here to match the role 4510 ::com::sun::star::uno::Reference< ::com::sun::star::accessibility::XAccessibleContext > VCLXDateField::CreateAccessibleContext() 4511 { 4512 Window* pWindow = GetWindow(); 4513 if ( pWindow ) 4514 { 4515 pWindow->SetType( WINDOW_DATEFIELD ); 4516 } 4517 return getAccessibleFactory().createAccessibleContext( this ); 4518 } 4519 //-----IAccessibility2 Implementation 2009 4520 4521 // ::com::sun::star::uno::XInterface 4522 ::com::sun::star::uno::Any VCLXDateField::queryInterface( const ::com::sun::star::uno::Type & rType ) throw(::com::sun::star::uno::RuntimeException) 4523 { 4524 ::com::sun::star::uno::Any aRet = ::cppu::queryInterface( rType, 4525 SAL_STATIC_CAST( ::com::sun::star::awt::XDateField*, this ) ); 4526 return (aRet.hasValue() ? aRet : VCLXFormattedSpinField::queryInterface( rType )); 4527 } 4528 4529 // ::com::sun::star::lang::XTypeProvider 4530 IMPL_XTYPEPROVIDER_START( VCLXDateField ) 4531 getCppuType( ( ::com::sun::star::uno::Reference< ::com::sun::star::awt::XDateField>* ) NULL ), 4532 VCLXFormattedSpinField::getTypes() 4533 IMPL_XTYPEPROVIDER_END 4534 4535 void VCLXDateField::setProperty( const ::rtl::OUString& PropertyName, const ::com::sun::star::uno::Any& Value) throw(::com::sun::star::uno::RuntimeException) 4536 { 4537 ::vos::OGuard aGuard( GetMutex() ); 4538 4539 if ( GetWindow() ) 4540 { 4541 sal_Bool bVoid = Value.getValueType().getTypeClass() == ::com::sun::star::uno::TypeClass_VOID; 4542 4543 sal_uInt16 nPropType = GetPropertyId( PropertyName ); 4544 switch ( nPropType ) 4545 { 4546 case BASEPROPERTY_DATE: 4547 { 4548 if ( bVoid ) 4549 { 4550 ((DateField*)GetWindow())->EnableEmptyFieldValue( sal_True ); 4551 ((DateField*)GetWindow())->SetEmptyFieldValue(); 4552 } 4553 else 4554 { 4555 sal_Int32 n = 0; 4556 if ( Value >>= n ) 4557 setDate( n ); 4558 } 4559 } 4560 break; 4561 case BASEPROPERTY_DATEMIN: 4562 { 4563 sal_Int32 n = 0; 4564 if ( Value >>= n ) 4565 setMin( n ); 4566 } 4567 break; 4568 case BASEPROPERTY_DATEMAX: 4569 { 4570 sal_Int32 n = 0; 4571 if ( Value >>= n ) 4572 setMax( n ); 4573 } 4574 break; 4575 case BASEPROPERTY_EXTDATEFORMAT: 4576 { 4577 sal_Int16 n = sal_Int16(); 4578 if ( Value >>= n ) 4579 ((DateField*)GetWindow())->SetExtDateFormat( (ExtDateFieldFormat) n ); 4580 } 4581 break; 4582 case BASEPROPERTY_DATESHOWCENTURY: 4583 { 4584 sal_Bool b = sal_Bool(); 4585 if ( Value >>= b ) 4586 ((DateField*)GetWindow())->SetShowDateCentury( b ); 4587 } 4588 break; 4589 case BASEPROPERTY_ENFORCE_FORMAT: 4590 { 4591 sal_Bool bEnforce( sal_True ); 4592 OSL_VERIFY( Value >>= bEnforce ); 4593 static_cast< DateField* >( GetWindow() )->EnforceValidValue( bEnforce ); 4594 } 4595 break; 4596 default: 4597 { 4598 VCLXFormattedSpinField::setProperty( PropertyName, Value ); 4599 } 4600 } 4601 } 4602 } 4603 4604 ::com::sun::star::uno::Any VCLXDateField::getProperty( const ::rtl::OUString& PropertyName ) throw(::com::sun::star::uno::RuntimeException) 4605 { 4606 ::vos::OGuard aGuard( GetMutex() ); 4607 4608 ::com::sun::star::uno::Any aProp; 4609 FormatterBase* pFormatter = GetFormatter(); 4610 if ( pFormatter ) 4611 { 4612 sal_uInt16 nPropType = GetPropertyId( PropertyName ); 4613 switch ( nPropType ) 4614 { 4615 case BASEPROPERTY_DATE: 4616 { 4617 aProp <<= (sal_Int32) getDate(); 4618 } 4619 break; 4620 case BASEPROPERTY_DATEMIN: 4621 { 4622 aProp <<= (sal_Int32) getMin(); 4623 } 4624 break; 4625 case BASEPROPERTY_DATEMAX: 4626 { 4627 aProp <<= (sal_Int32) getMax(); 4628 } 4629 break; 4630 case BASEPROPERTY_DATESHOWCENTURY: 4631 { 4632 aProp <<= ((DateField*)GetWindow())->IsShowDateCentury(); 4633 } 4634 break; 4635 case BASEPROPERTY_ENFORCE_FORMAT: 4636 { 4637 aProp <<= (sal_Bool)static_cast< DateField* >( GetWindow() )->IsEnforceValidValue( ); 4638 } 4639 break; 4640 default: 4641 { 4642 aProp <<= VCLXFormattedSpinField::getProperty( PropertyName ); 4643 } 4644 } 4645 } 4646 return aProp; 4647 } 4648 4649 4650 void VCLXDateField::setDate( sal_Int32 nDate ) throw(::com::sun::star::uno::RuntimeException) 4651 { 4652 ::vos::OGuard aGuard( GetMutex() ); 4653 4654 DateField* pDateField = (DateField*) GetWindow(); 4655 if ( pDateField ) 4656 { 4657 pDateField->SetDate( nDate ); 4658 4659 // #107218# Call same listeners like VCL would do after user interaction 4660 SetSynthesizingVCLEvent( sal_True ); 4661 pDateField->SetModifyFlag(); 4662 pDateField->Modify(); 4663 SetSynthesizingVCLEvent( sal_False ); 4664 } 4665 } 4666 4667 sal_Int32 VCLXDateField::getDate() throw(::com::sun::star::uno::RuntimeException) 4668 { 4669 ::vos::OGuard aGuard( GetMutex() ); 4670 4671 sal_Int32 nDate = 0; 4672 DateField* pDateField = (DateField*) GetWindow(); 4673 if ( pDateField ) 4674 nDate = pDateField->GetDate().GetDate(); 4675 4676 return nDate; 4677 } 4678 4679 void VCLXDateField::setMin( sal_Int32 nDate ) throw(::com::sun::star::uno::RuntimeException) 4680 { 4681 ::vos::OGuard aGuard( GetMutex() ); 4682 4683 DateField* pDateField = (DateField*) GetWindow(); 4684 if ( pDateField ) 4685 pDateField->SetMin( nDate ); 4686 } 4687 4688 sal_Int32 VCLXDateField::getMin() throw(::com::sun::star::uno::RuntimeException) 4689 { 4690 ::vos::OGuard aGuard( GetMutex() ); 4691 4692 sal_Int32 nDate = 0; 4693 DateField* pDateField = (DateField*) GetWindow(); 4694 if ( pDateField ) 4695 nDate = pDateField->GetMin().GetDate(); 4696 4697 return nDate; 4698 } 4699 4700 void VCLXDateField::setMax( sal_Int32 nDate ) throw(::com::sun::star::uno::RuntimeException) 4701 { 4702 ::vos::OGuard aGuard( GetMutex() ); 4703 4704 DateField* pDateField = (DateField*) GetWindow(); 4705 if ( pDateField ) 4706 pDateField->SetMax( nDate ); 4707 } 4708 4709 sal_Int32 VCLXDateField::getMax() throw(::com::sun::star::uno::RuntimeException) 4710 { 4711 ::vos::OGuard aGuard( GetMutex() ); 4712 4713 sal_Int32 nDate = 0; 4714 DateField* pDateField = (DateField*) GetWindow(); 4715 if ( pDateField ) 4716 nDate = pDateField->GetMax().GetDate(); 4717 4718 return nDate; 4719 } 4720 4721 void VCLXDateField::setFirst( sal_Int32 nDate ) throw(::com::sun::star::uno::RuntimeException) 4722 { 4723 ::vos::OGuard aGuard( GetMutex() ); 4724 4725 DateField* pDateField = (DateField*) GetWindow(); 4726 if ( pDateField ) 4727 pDateField->SetFirst( nDate ); 4728 } 4729 4730 sal_Int32 VCLXDateField::getFirst() throw(::com::sun::star::uno::RuntimeException) 4731 { 4732 ::vos::OGuard aGuard( GetMutex() ); 4733 4734 sal_Int32 nDate = 0; 4735 DateField* pDateField = (DateField*) GetWindow(); 4736 if ( pDateField ) 4737 nDate = pDateField->GetFirst().GetDate(); 4738 4739 return nDate; 4740 } 4741 4742 void VCLXDateField::setLast( sal_Int32 nDate ) throw(::com::sun::star::uno::RuntimeException) 4743 { 4744 ::vos::OGuard aGuard( GetMutex() ); 4745 4746 DateField* pDateField = (DateField*) GetWindow(); 4747 if ( pDateField ) 4748 pDateField->SetLast( nDate ); 4749 } 4750 4751 sal_Int32 VCLXDateField::getLast() throw(::com::sun::star::uno::RuntimeException) 4752 { 4753 ::vos::OGuard aGuard( GetMutex() ); 4754 4755 sal_Int32 nDate = 0; 4756 DateField* pDateField = (DateField*) GetWindow(); 4757 if ( pDateField ) 4758 nDate = pDateField->GetLast().GetDate(); 4759 4760 return nDate; 4761 } 4762 4763 void VCLXDateField::setLongFormat( sal_Bool bLong ) throw(::com::sun::star::uno::RuntimeException) 4764 { 4765 ::vos::OGuard aGuard( GetMutex() ); 4766 4767 DateField* pDateField = (DateField*) GetWindow(); 4768 if ( pDateField ) 4769 pDateField->SetLongFormat( bLong ); 4770 } 4771 4772 sal_Bool VCLXDateField::isLongFormat() throw(::com::sun::star::uno::RuntimeException) 4773 { 4774 ::vos::OGuard aGuard( GetMutex() ); 4775 4776 DateField* pDateField = (DateField*) GetWindow(); 4777 return pDateField ? pDateField->IsLongFormat() : sal_False; 4778 } 4779 4780 void VCLXDateField::setEmpty() throw(::com::sun::star::uno::RuntimeException) 4781 { 4782 ::vos::OGuard aGuard( GetMutex() ); 4783 4784 DateField* pDateField = (DateField*) GetWindow(); 4785 if ( pDateField ) 4786 { 4787 pDateField->SetEmptyDate(); 4788 4789 // #107218# Call same listeners like VCL would do after user interaction 4790 SetSynthesizingVCLEvent( sal_True ); 4791 pDateField->SetModifyFlag(); 4792 pDateField->Modify(); 4793 SetSynthesizingVCLEvent( sal_False ); 4794 } 4795 } 4796 4797 sal_Bool VCLXDateField::isEmpty() throw(::com::sun::star::uno::RuntimeException) 4798 { 4799 ::vos::OGuard aGuard( GetMutex() ); 4800 4801 DateField* pDateField = (DateField*) GetWindow(); 4802 return pDateField ? pDateField->IsEmptyDate() : sal_False; 4803 } 4804 4805 void VCLXDateField::setStrictFormat( sal_Bool bStrict ) throw(::com::sun::star::uno::RuntimeException) 4806 { 4807 VCLXFormattedSpinField::setStrictFormat( bStrict ); 4808 } 4809 4810 sal_Bool VCLXDateField::isStrictFormat() throw(::com::sun::star::uno::RuntimeException) 4811 { 4812 return VCLXFormattedSpinField::isStrictFormat(); 4813 } 4814 4815 4816 // ---------------------------------------------------- 4817 // class VCLXTimeField 4818 // ---------------------------------------------------- 4819 4820 void VCLXTimeField::ImplGetPropertyIds( std::list< sal_uInt16 > &rIds ) 4821 { 4822 PushPropertyIds( rIds, 4823 BASEPROPERTY_ALIGN, 4824 BASEPROPERTY_BACKGROUNDCOLOR, 4825 BASEPROPERTY_BORDER, 4826 BASEPROPERTY_BORDERCOLOR, 4827 BASEPROPERTY_DEFAULTCONTROL, 4828 BASEPROPERTY_ENABLED, 4829 BASEPROPERTY_ENABLEVISIBLE, 4830 BASEPROPERTY_EXTTIMEFORMAT, 4831 BASEPROPERTY_FONTDESCRIPTOR, 4832 BASEPROPERTY_HELPTEXT, 4833 BASEPROPERTY_HELPURL, 4834 BASEPROPERTY_PRINTABLE, 4835 BASEPROPERTY_READONLY, 4836 BASEPROPERTY_REPEAT, 4837 BASEPROPERTY_REPEAT_DELAY, 4838 BASEPROPERTY_SPIN, 4839 BASEPROPERTY_STRICTFORMAT, 4840 BASEPROPERTY_TABSTOP, 4841 BASEPROPERTY_TIME, 4842 BASEPROPERTY_TIMEMAX, 4843 BASEPROPERTY_TIMEMIN, 4844 BASEPROPERTY_ENFORCE_FORMAT, 4845 BASEPROPERTY_TEXT, 4846 BASEPROPERTY_HIDEINACTIVESELECTION, 4847 BASEPROPERTY_VERTICALALIGN, 4848 BASEPROPERTY_WRITING_MODE, 4849 BASEPROPERTY_CONTEXT_WRITING_MODE, 4850 BASEPROPERTY_MOUSE_WHEEL_BEHAVIOUR, 4851 0); 4852 VCLXFormattedSpinField::ImplGetPropertyIds( rIds ); 4853 } 4854 4855 VCLXTimeField::VCLXTimeField() 4856 { 4857 } 4858 4859 VCLXTimeField::~VCLXTimeField() 4860 { 4861 } 4862 //IAccessibility2 Implementation 2009----- 4863 //change the window type here to match the role 4864 ::com::sun::star::uno::Reference< ::com::sun::star::accessibility::XAccessibleContext > VCLXTimeField::CreateAccessibleContext() 4865 { 4866 Window* pWindow = GetWindow(); 4867 if ( pWindow ) 4868 { 4869 pWindow->SetType( WINDOW_TIMEFIELD ); 4870 } 4871 return getAccessibleFactory().createAccessibleContext( this ); 4872 } 4873 //-----IAccessibility2 Implementation 2009 4874 4875 // ::com::sun::star::uno::XInterface 4876 ::com::sun::star::uno::Any VCLXTimeField::queryInterface( const ::com::sun::star::uno::Type & rType ) throw(::com::sun::star::uno::RuntimeException) 4877 { 4878 ::com::sun::star::uno::Any aRet = ::cppu::queryInterface( rType, 4879 SAL_STATIC_CAST( ::com::sun::star::awt::XTimeField*, this ) ); 4880 return (aRet.hasValue() ? aRet : VCLXFormattedSpinField::queryInterface( rType )); 4881 } 4882 4883 // ::com::sun::star::lang::XTypeProvider 4884 IMPL_XTYPEPROVIDER_START( VCLXTimeField ) 4885 getCppuType( ( ::com::sun::star::uno::Reference< ::com::sun::star::awt::XTimeField>* ) NULL ), 4886 VCLXFormattedSpinField::getTypes() 4887 IMPL_XTYPEPROVIDER_END 4888 4889 void VCLXTimeField::setTime( sal_Int32 nTime ) throw(::com::sun::star::uno::RuntimeException) 4890 { 4891 ::vos::OGuard aGuard( GetMutex() ); 4892 4893 TimeField* pTimeField = (TimeField*) GetWindow(); 4894 if ( pTimeField ) 4895 { 4896 pTimeField->SetTime( nTime ); 4897 4898 // #107218# Call same listeners like VCL would do after user interaction 4899 SetSynthesizingVCLEvent( sal_True ); 4900 pTimeField->SetModifyFlag(); 4901 pTimeField->Modify(); 4902 SetSynthesizingVCLEvent( sal_False ); 4903 } 4904 } 4905 4906 sal_Int32 VCLXTimeField::getTime() throw(::com::sun::star::uno::RuntimeException) 4907 { 4908 ::vos::OGuard aGuard( GetMutex() ); 4909 4910 sal_Int32 nTime = 0; 4911 TimeField* pTimeField = (TimeField*) GetWindow(); 4912 if ( pTimeField ) 4913 nTime = pTimeField->GetTime().GetTime(); 4914 4915 return nTime; 4916 } 4917 4918 void VCLXTimeField::setMin( sal_Int32 nTime ) throw(::com::sun::star::uno::RuntimeException) 4919 { 4920 ::vos::OGuard aGuard( GetMutex() ); 4921 4922 TimeField* pTimeField = (TimeField*) GetWindow(); 4923 if ( pTimeField ) 4924 pTimeField->SetMin( nTime ); 4925 } 4926 4927 sal_Int32 VCLXTimeField::getMin() throw(::com::sun::star::uno::RuntimeException) 4928 { 4929 ::vos::OGuard aGuard( GetMutex() ); 4930 4931 sal_Int32 nTime = 0; 4932 TimeField* pTimeField = (TimeField*) GetWindow(); 4933 if ( pTimeField ) 4934 nTime = pTimeField->GetMin().GetTime(); 4935 4936 return nTime; 4937 } 4938 4939 void VCLXTimeField::setMax( sal_Int32 nTime ) throw(::com::sun::star::uno::RuntimeException) 4940 { 4941 ::vos::OGuard aGuard( GetMutex() ); 4942 4943 TimeField* pTimeField = (TimeField*) GetWindow(); 4944 if ( pTimeField ) 4945 pTimeField->SetMax( nTime ); 4946 } 4947 4948 sal_Int32 VCLXTimeField::getMax() throw(::com::sun::star::uno::RuntimeException) 4949 { 4950 ::vos::OGuard aGuard( GetMutex() ); 4951 4952 sal_Int32 nTime = 0; 4953 TimeField* pTimeField = (TimeField*) GetWindow(); 4954 if ( pTimeField ) 4955 nTime = pTimeField->GetMax().GetTime(); 4956 4957 return nTime; 4958 } 4959 4960 void VCLXTimeField::setFirst( sal_Int32 nTime ) throw(::com::sun::star::uno::RuntimeException) 4961 { 4962 ::vos::OGuard aGuard( GetMutex() ); 4963 4964 TimeField* pTimeField = (TimeField*) GetWindow(); 4965 if ( pTimeField ) 4966 pTimeField->SetFirst( nTime ); 4967 } 4968 4969 sal_Int32 VCLXTimeField::getFirst() throw(::com::sun::star::uno::RuntimeException) 4970 { 4971 ::vos::OGuard aGuard( GetMutex() ); 4972 4973 sal_Int32 nTime = 0; 4974 TimeField* pTimeField = (TimeField*) GetWindow(); 4975 if ( pTimeField ) 4976 nTime = pTimeField->GetFirst().GetTime(); 4977 4978 return nTime; 4979 } 4980 4981 void VCLXTimeField::setLast( sal_Int32 nTime ) throw(::com::sun::star::uno::RuntimeException) 4982 { 4983 ::vos::OGuard aGuard( GetMutex() ); 4984 4985 TimeField* pTimeField = (TimeField*) GetWindow(); 4986 if ( pTimeField ) 4987 pTimeField->SetLast( nTime ); 4988 } 4989 4990 sal_Int32 VCLXTimeField::getLast() throw(::com::sun::star::uno::RuntimeException) 4991 { 4992 ::vos::OGuard aGuard( GetMutex() ); 4993 4994 sal_Int32 nTime = 0; 4995 TimeField* pTimeField = (TimeField*) GetWindow(); 4996 if ( pTimeField ) 4997 nTime = pTimeField->GetLast().GetTime(); 4998 4999 return nTime; 5000 } 5001 5002 void VCLXTimeField::setEmpty() throw(::com::sun::star::uno::RuntimeException) 5003 { 5004 ::vos::OGuard aGuard( GetMutex() ); 5005 5006 TimeField* pTimeField = (TimeField*) GetWindow(); 5007 if ( pTimeField ) 5008 pTimeField->SetEmptyTime(); 5009 } 5010 5011 sal_Bool VCLXTimeField::isEmpty() throw(::com::sun::star::uno::RuntimeException) 5012 { 5013 ::vos::OGuard aGuard( GetMutex() ); 5014 5015 TimeField* pTimeField = (TimeField*) GetWindow(); 5016 return pTimeField ? pTimeField->IsEmptyTime() : sal_False; 5017 } 5018 5019 void VCLXTimeField::setStrictFormat( sal_Bool bStrict ) throw(::com::sun::star::uno::RuntimeException) 5020 { 5021 VCLXFormattedSpinField::setStrictFormat( bStrict ); 5022 } 5023 5024 sal_Bool VCLXTimeField::isStrictFormat() throw(::com::sun::star::uno::RuntimeException) 5025 { 5026 return VCLXFormattedSpinField::isStrictFormat(); 5027 } 5028 5029 5030 void VCLXTimeField::setProperty( const ::rtl::OUString& PropertyName, const ::com::sun::star::uno::Any& Value) throw(::com::sun::star::uno::RuntimeException) 5031 { 5032 ::vos::OGuard aGuard( GetMutex() ); 5033 5034 if ( GetWindow() ) 5035 { 5036 sal_Bool bVoid = Value.getValueType().getTypeClass() == ::com::sun::star::uno::TypeClass_VOID; 5037 5038 sal_uInt16 nPropType = GetPropertyId( PropertyName ); 5039 switch ( nPropType ) 5040 { 5041 case BASEPROPERTY_TIME: 5042 { 5043 if ( bVoid ) 5044 { 5045 ((TimeField*)GetWindow())->EnableEmptyFieldValue( sal_True ); 5046 ((TimeField*)GetWindow())->SetEmptyFieldValue(); 5047 } 5048 else 5049 { 5050 sal_Int32 n = 0; 5051 if ( Value >>= n ) 5052 setTime( n ); 5053 } 5054 } 5055 break; 5056 case BASEPROPERTY_TIMEMIN: 5057 { 5058 sal_Int32 n = 0; 5059 if ( Value >>= n ) 5060 setMin( n ); 5061 } 5062 break; 5063 case BASEPROPERTY_TIMEMAX: 5064 { 5065 sal_Int32 n = 0; 5066 if ( Value >>= n ) 5067 setMax( n ); 5068 } 5069 break; 5070 case BASEPROPERTY_EXTTIMEFORMAT: 5071 { 5072 sal_Int16 n = sal_Int16(); 5073 if ( Value >>= n ) 5074 ((TimeField*)GetWindow())->SetExtFormat( (ExtTimeFieldFormat) n ); 5075 } 5076 break; 5077 case BASEPROPERTY_ENFORCE_FORMAT: 5078 { 5079 sal_Bool bEnforce( sal_True ); 5080 OSL_VERIFY( Value >>= bEnforce ); 5081 static_cast< TimeField* >( GetWindow() )->EnforceValidValue( bEnforce ); 5082 } 5083 break; 5084 default: 5085 { 5086 VCLXFormattedSpinField::setProperty( PropertyName, Value ); 5087 } 5088 } 5089 } 5090 } 5091 5092 ::com::sun::star::uno::Any VCLXTimeField::getProperty( const ::rtl::OUString& PropertyName ) throw(::com::sun::star::uno::RuntimeException) 5093 { 5094 ::vos::OGuard aGuard( GetMutex() ); 5095 5096 ::com::sun::star::uno::Any aProp; 5097 if ( GetWindow() ) 5098 { 5099 sal_uInt16 nPropType = GetPropertyId( PropertyName ); 5100 switch ( nPropType ) 5101 { 5102 case BASEPROPERTY_TIME: 5103 { 5104 aProp <<= (sal_Int32) getTime(); 5105 } 5106 break; 5107 case BASEPROPERTY_TIMEMIN: 5108 { 5109 aProp <<= (sal_Int32) getMin(); 5110 } 5111 break; 5112 case BASEPROPERTY_TIMEMAX: 5113 { 5114 aProp <<= (sal_Int32) getMax(); 5115 } 5116 break; 5117 case BASEPROPERTY_ENFORCE_FORMAT: 5118 { 5119 aProp <<= (sal_Bool)static_cast< TimeField* >( GetWindow() )->IsEnforceValidValue( ); 5120 } 5121 break; 5122 default: 5123 { 5124 aProp <<= VCLXFormattedSpinField::getProperty( PropertyName ); 5125 } 5126 } 5127 } 5128 return aProp; 5129 } 5130 5131 // ---------------------------------------------------- 5132 // class VCLXNumericField 5133 // ---------------------------------------------------- 5134 5135 void VCLXNumericField::ImplGetPropertyIds( std::list< sal_uInt16 > &rIds ) 5136 { 5137 PushPropertyIds( rIds, 5138 BASEPROPERTY_ALIGN, 5139 BASEPROPERTY_BACKGROUNDCOLOR, 5140 BASEPROPERTY_BORDER, 5141 BASEPROPERTY_BORDERCOLOR, 5142 BASEPROPERTY_DECIMALACCURACY, 5143 BASEPROPERTY_DEFAULTCONTROL, 5144 BASEPROPERTY_ENABLED, 5145 BASEPROPERTY_ENABLEVISIBLE, 5146 BASEPROPERTY_FONTDESCRIPTOR, 5147 BASEPROPERTY_HELPTEXT, 5148 BASEPROPERTY_HELPURL, 5149 BASEPROPERTY_NUMSHOWTHOUSANDSEP, 5150 BASEPROPERTY_PRINTABLE, 5151 BASEPROPERTY_READONLY, 5152 BASEPROPERTY_REPEAT, 5153 BASEPROPERTY_REPEAT_DELAY, 5154 BASEPROPERTY_SPIN, 5155 BASEPROPERTY_STRICTFORMAT, 5156 BASEPROPERTY_TABSTOP, 5157 BASEPROPERTY_VALUEMAX_DOUBLE, 5158 BASEPROPERTY_VALUEMIN_DOUBLE, 5159 BASEPROPERTY_VALUESTEP_DOUBLE, 5160 BASEPROPERTY_VALUE_DOUBLE, 5161 BASEPROPERTY_ENFORCE_FORMAT, 5162 BASEPROPERTY_HIDEINACTIVESELECTION, 5163 BASEPROPERTY_VERTICALALIGN, 5164 BASEPROPERTY_WRITING_MODE, 5165 BASEPROPERTY_CONTEXT_WRITING_MODE, 5166 BASEPROPERTY_MOUSE_WHEEL_BEHAVIOUR, 5167 0); 5168 VCLXFormattedSpinField::ImplGetPropertyIds( rIds ); 5169 } 5170 5171 VCLXNumericField::VCLXNumericField() 5172 { 5173 } 5174 5175 VCLXNumericField::~VCLXNumericField() 5176 { 5177 } 5178 5179 // ::com::sun::star::uno::XInterface 5180 ::com::sun::star::uno::Any VCLXNumericField::queryInterface( const ::com::sun::star::uno::Type & rType ) throw(::com::sun::star::uno::RuntimeException) 5181 { 5182 ::com::sun::star::uno::Any aRet = ::cppu::queryInterface( rType, 5183 SAL_STATIC_CAST( ::com::sun::star::awt::XNumericField*, this ) ); 5184 return (aRet.hasValue() ? aRet : VCLXFormattedSpinField::queryInterface( rType )); 5185 } 5186 5187 // ::com::sun::star::lang::XTypeProvider 5188 IMPL_XTYPEPROVIDER_START( VCLXNumericField ) 5189 getCppuType( ( ::com::sun::star::uno::Reference< ::com::sun::star::awt::XNumericField>* ) NULL ), 5190 VCLXFormattedSpinField::getTypes() 5191 IMPL_XTYPEPROVIDER_END 5192 5193 void VCLXNumericField::setValue( double Value ) throw(::com::sun::star::uno::RuntimeException) 5194 { 5195 ::vos::OGuard aGuard( GetMutex() ); 5196 5197 NumericFormatter* pNumericFormatter = (NumericFormatter*) GetFormatter(); 5198 if ( pNumericFormatter ) 5199 { 5200 // z.B. 105, 2 Digits => 1,05 5201 // ein float 1,05 muss also eine 105 einstellen... 5202 pNumericFormatter->SetValue( 5203 (long)ImplCalcLongValue( Value, pNumericFormatter->GetDecimalDigits() ) ); 5204 5205 // #107218# Call same listeners like VCL would do after user interaction 5206 Edit* pEdit = (Edit*)GetWindow(); 5207 if ( pEdit ) 5208 { 5209 SetSynthesizingVCLEvent( sal_True ); 5210 pEdit->SetModifyFlag(); 5211 pEdit->Modify(); 5212 SetSynthesizingVCLEvent( sal_False ); 5213 } 5214 } 5215 } 5216 5217 double VCLXNumericField::getValue() throw(::com::sun::star::uno::RuntimeException) 5218 { 5219 ::vos::OGuard aGuard( GetMutex() ); 5220 5221 NumericFormatter* pNumericFormatter = (NumericFormatter*) GetFormatter(); 5222 return pNumericFormatter 5223 ? ImplCalcDoubleValue( (double)pNumericFormatter->GetValue(), pNumericFormatter->GetDecimalDigits() ) 5224 : 0; 5225 } 5226 5227 void VCLXNumericField::setMin( double Value ) throw(::com::sun::star::uno::RuntimeException) 5228 { 5229 ::vos::OGuard aGuard( GetMutex() ); 5230 5231 NumericFormatter* pNumericFormatter = (NumericFormatter*) GetFormatter(); 5232 if ( pNumericFormatter ) 5233 pNumericFormatter->SetMin( 5234 (long)ImplCalcLongValue( Value, pNumericFormatter->GetDecimalDigits() ) ); 5235 } 5236 5237 double VCLXNumericField::getMin() throw(::com::sun::star::uno::RuntimeException) 5238 { 5239 ::vos::OGuard aGuard( GetMutex() ); 5240 5241 NumericFormatter* pNumericFormatter = (NumericFormatter*) GetFormatter(); 5242 return pNumericFormatter 5243 ? ImplCalcDoubleValue( (double)pNumericFormatter->GetMin(), pNumericFormatter->GetDecimalDigits() ) 5244 : 0; 5245 } 5246 5247 void VCLXNumericField::setMax( double Value ) throw(::com::sun::star::uno::RuntimeException) 5248 { 5249 ::vos::OGuard aGuard( GetMutex() ); 5250 5251 NumericFormatter* pNumericFormatter = (NumericFormatter*) GetFormatter(); 5252 if ( pNumericFormatter ) 5253 pNumericFormatter->SetMax( 5254 (long)ImplCalcLongValue( Value, pNumericFormatter->GetDecimalDigits() ) ); 5255 } 5256 5257 double VCLXNumericField::getMax() throw(::com::sun::star::uno::RuntimeException) 5258 { 5259 ::vos::OGuard aGuard( GetMutex() ); 5260 5261 NumericFormatter* pNumericFormatter = (NumericFormatter*) GetFormatter(); 5262 return pNumericFormatter 5263 ? ImplCalcDoubleValue( (double)pNumericFormatter->GetMax(), pNumericFormatter->GetDecimalDigits() ) 5264 : 0; 5265 } 5266 5267 void VCLXNumericField::setFirst( double Value ) throw(::com::sun::star::uno::RuntimeException) 5268 { 5269 ::vos::OGuard aGuard( GetMutex() ); 5270 5271 NumericField* pNumericField = (NumericField*) GetWindow(); 5272 if ( pNumericField ) 5273 pNumericField->SetFirst( 5274 (long)ImplCalcLongValue( Value, pNumericField->GetDecimalDigits() ) ); 5275 } 5276 5277 double VCLXNumericField::getFirst() throw(::com::sun::star::uno::RuntimeException) 5278 { 5279 ::vos::OGuard aGuard( GetMutex() ); 5280 5281 NumericField* pNumericField = (NumericField*) GetWindow(); 5282 return pNumericField 5283 ? ImplCalcDoubleValue( (double)pNumericField->GetFirst(), pNumericField->GetDecimalDigits() ) 5284 : 0; 5285 } 5286 5287 void VCLXNumericField::setLast( double Value ) throw(::com::sun::star::uno::RuntimeException) 5288 { 5289 ::vos::OGuard aGuard( GetMutex() ); 5290 5291 NumericField* pNumericField = (NumericField*) GetWindow(); 5292 if ( pNumericField ) 5293 pNumericField->SetLast( 5294 (long)ImplCalcLongValue( Value, pNumericField->GetDecimalDigits() ) ); 5295 } 5296 5297 double VCLXNumericField::getLast() throw(::com::sun::star::uno::RuntimeException) 5298 { 5299 ::vos::OGuard aGuard( GetMutex() ); 5300 5301 NumericField* pNumericField = (NumericField*) GetWindow(); 5302 return pNumericField 5303 ? ImplCalcDoubleValue( (double)pNumericField->GetLast(), pNumericField->GetDecimalDigits() ) 5304 : 0; 5305 } 5306 5307 void VCLXNumericField::setStrictFormat( sal_Bool bStrict ) throw(::com::sun::star::uno::RuntimeException) 5308 { 5309 VCLXFormattedSpinField::setStrictFormat( bStrict ); 5310 } 5311 5312 sal_Bool VCLXNumericField::isStrictFormat() throw(::com::sun::star::uno::RuntimeException) 5313 { 5314 return VCLXFormattedSpinField::isStrictFormat(); 5315 } 5316 5317 5318 void VCLXNumericField::setSpinSize( double Value ) throw(::com::sun::star::uno::RuntimeException) 5319 { 5320 ::vos::OGuard aGuard( GetMutex() ); 5321 5322 NumericField* pNumericField = (NumericField*) GetWindow(); 5323 if ( pNumericField ) 5324 pNumericField->SetSpinSize( 5325 (long)ImplCalcLongValue( Value, pNumericField->GetDecimalDigits() ) ); 5326 } 5327 5328 double VCLXNumericField::getSpinSize() throw(::com::sun::star::uno::RuntimeException) 5329 { 5330 ::vos::OGuard aGuard( GetMutex() ); 5331 5332 NumericField* pNumericField = (NumericField*) GetWindow(); 5333 return pNumericField 5334 ? ImplCalcDoubleValue( (double)pNumericField->GetSpinSize(), pNumericField->GetDecimalDigits() ) 5335 : 0; 5336 } 5337 5338 void VCLXNumericField::setDecimalDigits( sal_Int16 Value ) throw(::com::sun::star::uno::RuntimeException) 5339 { 5340 ::vos::OGuard aGuard( GetMutex() ); 5341 5342 NumericFormatter* pNumericFormatter = (NumericFormatter*) GetFormatter(); 5343 if ( pNumericFormatter ) 5344 { 5345 double n = getValue(); 5346 pNumericFormatter->SetDecimalDigits( Value ); 5347 setValue( n ); 5348 } 5349 } 5350 5351 sal_Int16 VCLXNumericField::getDecimalDigits() throw(::com::sun::star::uno::RuntimeException) 5352 { 5353 ::vos::OGuard aGuard( GetMutex() ); 5354 5355 NumericFormatter* pNumericFormatter = (NumericFormatter*) GetFormatter(); 5356 return pNumericFormatter ? pNumericFormatter->GetDecimalDigits() : 0; 5357 } 5358 5359 void VCLXNumericField::setProperty( const ::rtl::OUString& PropertyName, const ::com::sun::star::uno::Any& Value) throw(::com::sun::star::uno::RuntimeException) 5360 { 5361 ::vos::OGuard aGuard( GetMutex() ); 5362 5363 if ( GetWindow() ) 5364 { 5365 sal_Bool bVoid = Value.getValueType().getTypeClass() == ::com::sun::star::uno::TypeClass_VOID; 5366 5367 sal_uInt16 nPropType = GetPropertyId( PropertyName ); 5368 switch ( nPropType ) 5369 { 5370 case BASEPROPERTY_VALUE_DOUBLE: 5371 { 5372 if ( bVoid ) 5373 { 5374 ((NumericField*)GetWindow())->EnableEmptyFieldValue( sal_True ); 5375 ((NumericField*)GetWindow())->SetEmptyFieldValue(); 5376 } 5377 else 5378 { 5379 double d = 0; 5380 if ( Value >>= d ) 5381 setValue( d ); 5382 } 5383 } 5384 break; 5385 case BASEPROPERTY_VALUEMIN_DOUBLE: 5386 { 5387 double d = 0; 5388 if ( Value >>= d ) 5389 setMin( d ); 5390 } 5391 break; 5392 case BASEPROPERTY_VALUEMAX_DOUBLE: 5393 { 5394 double d = 0; 5395 if ( Value >>= d ) 5396 setMax( d ); 5397 } 5398 break; 5399 case BASEPROPERTY_VALUESTEP_DOUBLE: 5400 { 5401 double d = 0; 5402 if ( Value >>= d ) 5403 setSpinSize( d ); 5404 } 5405 break; 5406 case BASEPROPERTY_DECIMALACCURACY: 5407 { 5408 sal_Int16 n = sal_Int16(); 5409 if ( Value >>= n ) 5410 setDecimalDigits( n ); 5411 } 5412 break; 5413 case BASEPROPERTY_NUMSHOWTHOUSANDSEP: 5414 { 5415 sal_Bool b = sal_Bool(); 5416 if ( Value >>= b ) 5417 ((NumericField*)GetWindow())->SetUseThousandSep( b ); 5418 } 5419 break; 5420 default: 5421 { 5422 VCLXFormattedSpinField::setProperty( PropertyName, Value ); 5423 } 5424 } 5425 } 5426 } 5427 5428 ::com::sun::star::uno::Any VCLXNumericField::getProperty( const ::rtl::OUString& PropertyName ) throw(::com::sun::star::uno::RuntimeException) 5429 { 5430 ::vos::OGuard aGuard( GetMutex() ); 5431 5432 ::com::sun::star::uno::Any aProp; 5433 FormatterBase* pFormatter = GetFormatter(); 5434 if ( pFormatter ) 5435 { 5436 sal_uInt16 nPropType = GetPropertyId( PropertyName ); 5437 switch ( nPropType ) 5438 { 5439 case BASEPROPERTY_VALUE_DOUBLE: 5440 { 5441 aProp <<= (double) getValue(); 5442 } 5443 break; 5444 case BASEPROPERTY_VALUEMIN_DOUBLE: 5445 { 5446 aProp <<= (double) getMin(); 5447 } 5448 break; 5449 case BASEPROPERTY_VALUEMAX_DOUBLE: 5450 { 5451 aProp <<= (double) getMax(); 5452 } 5453 break; 5454 case BASEPROPERTY_VALUESTEP_DOUBLE: 5455 { 5456 aProp <<= (double) getSpinSize(); 5457 } 5458 break; 5459 case BASEPROPERTY_NUMSHOWTHOUSANDSEP: 5460 { 5461 aProp <<= (sal_Bool) ((NumericField*)GetWindow())->IsUseThousandSep(); 5462 } 5463 break; 5464 default: 5465 { 5466 aProp <<= VCLXFormattedSpinField::getProperty( PropertyName ); 5467 } 5468 } 5469 } 5470 return aProp; 5471 } 5472 5473 5474 // ---------------------------------------------------- 5475 // class VCLXMetricField 5476 // ---------------------------------------------------- 5477 5478 void VCLXMetricField::ImplGetPropertyIds( std::list< sal_uInt16 > &rIds ) 5479 { 5480 PushPropertyIds( rIds, 5481 BASEPROPERTY_ALIGN, 5482 BASEPROPERTY_BACKGROUNDCOLOR, 5483 BASEPROPERTY_BORDER, 5484 BASEPROPERTY_BORDERCOLOR, 5485 BASEPROPERTY_DECIMALACCURACY, 5486 BASEPROPERTY_DEFAULTCONTROL, 5487 BASEPROPERTY_ENABLED, 5488 BASEPROPERTY_ENABLEVISIBLE, 5489 BASEPROPERTY_FONTDESCRIPTOR, 5490 BASEPROPERTY_HELPTEXT, 5491 BASEPROPERTY_HELPURL, 5492 BASEPROPERTY_NUMSHOWTHOUSANDSEP, 5493 BASEPROPERTY_PRINTABLE, 5494 BASEPROPERTY_READONLY, 5495 BASEPROPERTY_REPEAT, 5496 BASEPROPERTY_REPEAT_DELAY, 5497 BASEPROPERTY_SPIN, 5498 BASEPROPERTY_STRICTFORMAT, 5499 BASEPROPERTY_TABSTOP, 5500 BASEPROPERTY_ENFORCE_FORMAT, 5501 BASEPROPERTY_HIDEINACTIVESELECTION, 5502 BASEPROPERTY_UNIT, 5503 BASEPROPERTY_CUSTOMUNITTEXT, 5504 BASEPROPERTY_WRITING_MODE, 5505 BASEPROPERTY_CONTEXT_WRITING_MODE, 5506 BASEPROPERTY_MOUSE_WHEEL_BEHAVIOUR, 5507 0); 5508 VCLXFormattedSpinField::ImplGetPropertyIds( rIds ); 5509 } 5510 5511 VCLXMetricField::VCLXMetricField() 5512 { 5513 } 5514 5515 VCLXMetricField::~VCLXMetricField() 5516 { 5517 } 5518 5519 MetricFormatter *VCLXMetricField::GetMetricFormatter() throw(::com::sun::star::uno::RuntimeException) 5520 { 5521 MetricFormatter *pFormatter = (MetricFormatter *) GetFormatter(); 5522 if (!pFormatter) 5523 throw ::com::sun::star::uno::RuntimeException(); 5524 return pFormatter; 5525 } 5526 5527 MetricField *VCLXMetricField::GetMetricField() throw(::com::sun::star::uno::RuntimeException) 5528 { 5529 MetricField *pField = (MetricField *) GetWindow(); 5530 if (!pField) 5531 throw ::com::sun::star::uno::RuntimeException(); 5532 return pField; 5533 } 5534 5535 // ::com::sun::star::uno::XInterface 5536 ::com::sun::star::uno::Any VCLXMetricField::queryInterface( const ::com::sun::star::uno::Type & rType ) throw(::com::sun::star::uno::RuntimeException) 5537 { 5538 ::com::sun::star::uno::Any aRet = ::cppu::queryInterface( rType, 5539 SAL_STATIC_CAST( ::com::sun::star::awt::XMetricField*, this ) ); 5540 return (aRet.hasValue() ? aRet : VCLXFormattedSpinField::queryInterface( rType )); 5541 } 5542 5543 // ::com::sun::star::lang::XTypeProvider 5544 IMPL_XTYPEPROVIDER_START( VCLXMetricField ) 5545 getCppuType( ( ::com::sun::star::uno::Reference< ::com::sun::star::awt::XMetricField>* ) NULL ), 5546 VCLXFormattedSpinField::getTypes() 5547 IMPL_XTYPEPROVIDER_END 5548 5549 // FIXME: later ... 5550 #define MetricUnitUnoToVcl(a) ((FieldUnit)(a)) 5551 5552 #define METRIC_MAP_PAIR(method,parent) \ 5553 sal_Int64 VCLXMetricField::get##method( sal_Int16 nUnit ) throw (::com::sun::star::uno::RuntimeException) \ 5554 { \ 5555 ::vos::OGuard aGuard( GetMutex() ); \ 5556 return GetMetric##parent()->Get##method( MetricUnitUnoToVcl( nUnit ) ); \ 5557 } \ 5558 void VCLXMetricField::set##method( sal_Int64 nValue, sal_Int16 nUnit ) throw (::com::sun::star::uno::RuntimeException) \ 5559 { \ 5560 ::vos::OGuard aGuard( GetMutex() ); \ 5561 GetMetric##parent()->Set##method( nValue, MetricUnitUnoToVcl( nUnit ) ); \ 5562 } 5563 5564 METRIC_MAP_PAIR(Min, Formatter) 5565 METRIC_MAP_PAIR(Max, Formatter) 5566 METRIC_MAP_PAIR(First, Field) 5567 METRIC_MAP_PAIR(Last, Field) 5568 5569 #undef METRIC_MAP_PAIR 5570 5571 ::sal_Int64 VCLXMetricField::getValue( ::sal_Int16 nUnit ) throw (::com::sun::star::uno::RuntimeException) 5572 { 5573 ::vos::OGuard aGuard( GetMutex() ); 5574 return GetMetricFormatter()->GetValue( MetricUnitUnoToVcl( nUnit ) ); 5575 } 5576 5577 ::sal_Int64 VCLXMetricField::getCorrectedValue( ::sal_Int16 nUnit ) throw (::com::sun::star::uno::RuntimeException) 5578 { 5579 ::vos::OGuard aGuard( GetMutex() ); 5580 return GetMetricFormatter()->GetCorrectedValue( MetricUnitUnoToVcl( nUnit ) ); 5581 } 5582 5583 // FIXME: acute cut/paste evilness - move this to the parent Edit class ? 5584 void VCLXMetricField::CallListeners() 5585 { 5586 // #107218# Call same listeners like VCL would do after user interaction 5587 Edit* pEdit = (Edit*)GetWindow(); 5588 if ( pEdit ) 5589 { 5590 SetSynthesizingVCLEvent( sal_True ); 5591 pEdit->SetModifyFlag(); 5592 pEdit->Modify(); 5593 SetSynthesizingVCLEvent( sal_False ); 5594 } 5595 } 5596 5597 void VCLXMetricField::setValue( ::sal_Int64 Value, ::sal_Int16 Unit ) throw (::com::sun::star::uno::RuntimeException) 5598 { 5599 ::vos::OGuard aGuard( GetMutex() ); 5600 GetMetricFormatter()->SetValue( Value, MetricUnitUnoToVcl( Unit ) ); 5601 CallListeners(); 5602 } 5603 5604 void VCLXMetricField::setUserValue( ::sal_Int64 Value, ::sal_Int16 Unit ) throw (::com::sun::star::uno::RuntimeException) 5605 { 5606 ::vos::OGuard aGuard( GetMutex() ); 5607 GetMetricFormatter()->SetUserValue( Value, MetricUnitUnoToVcl( Unit ) ); 5608 CallListeners(); 5609 } 5610 5611 void VCLXMetricField::setStrictFormat( sal_Bool bStrict ) throw(::com::sun::star::uno::RuntimeException) 5612 { 5613 VCLXFormattedSpinField::setStrictFormat( bStrict ); 5614 } 5615 5616 sal_Bool VCLXMetricField::isStrictFormat() throw(::com::sun::star::uno::RuntimeException) 5617 { 5618 return VCLXFormattedSpinField::isStrictFormat(); 5619 } 5620 5621 void VCLXMetricField::setSpinSize( sal_Int64 Value ) throw(::com::sun::star::uno::RuntimeException) 5622 { 5623 ::vos::OGuard aGuard( GetMutex() ); 5624 GetMetricField()->SetSpinSize( Value ); 5625 } 5626 5627 sal_Int64 VCLXMetricField::getSpinSize() throw(::com::sun::star::uno::RuntimeException) 5628 { 5629 ::vos::OGuard aGuard( GetMutex() ); 5630 return GetMetricField()->GetSpinSize(); 5631 } 5632 5633 void VCLXMetricField::setDecimalDigits( sal_Int16 Value ) throw(::com::sun::star::uno::RuntimeException) 5634 { 5635 ::vos::OGuard aGuard( GetMutex() ); 5636 GetMetricFormatter()->SetDecimalDigits( Value ); 5637 } 5638 5639 sal_Int16 VCLXMetricField::getDecimalDigits() throw(::com::sun::star::uno::RuntimeException) 5640 { 5641 ::vos::OGuard aGuard( GetMutex() ); 5642 5643 NumericFormatter* pNumericFormatter = (NumericFormatter*) GetFormatter(); 5644 return pNumericFormatter ? pNumericFormatter->GetDecimalDigits() : 0; 5645 } 5646 5647 void VCLXMetricField::setProperty( const ::rtl::OUString& PropertyName, const ::com::sun::star::uno::Any& Value) throw(::com::sun::star::uno::RuntimeException) 5648 { 5649 ::vos::OGuard aGuard( GetMutex() ); 5650 5651 if ( GetWindow() ) 5652 { 5653 sal_uInt16 nPropType = GetPropertyId( PropertyName ); 5654 switch ( nPropType ) 5655 { 5656 case BASEPROPERTY_DECIMALACCURACY: 5657 { 5658 sal_Int16 n = 0; 5659 if ( Value >>= n ) 5660 setDecimalDigits( n ); 5661 break; 5662 } 5663 case BASEPROPERTY_NUMSHOWTHOUSANDSEP: 5664 { 5665 sal_Bool b = sal_False; 5666 if ( Value >>= b ) 5667 ((NumericField*)GetWindow())->SetUseThousandSep( b ); 5668 } 5669 break; 5670 case BASEPROPERTY_UNIT: 5671 { 5672 sal_uInt16 nVal = 0; 5673 if ( Value >>= nVal ) 5674 ((MetricField*)GetWindow())->SetUnit( (FieldUnit) nVal ); 5675 break; 5676 } 5677 case BASEPROPERTY_CUSTOMUNITTEXT: 5678 { 5679 rtl::OUString aStr; 5680 if ( Value >>= aStr ) 5681 ((MetricField*)GetWindow())->SetCustomUnitText( aStr ); 5682 break; 5683 } 5684 default: 5685 { 5686 VCLXFormattedSpinField::setProperty( PropertyName, Value ); 5687 break; 5688 } 5689 } 5690 } 5691 } 5692 5693 ::com::sun::star::uno::Any VCLXMetricField::getProperty( const ::rtl::OUString& PropertyName ) throw(::com::sun::star::uno::RuntimeException) 5694 { 5695 ::vos::OGuard aGuard( GetMutex() ); 5696 5697 ::com::sun::star::uno::Any aProp; 5698 FormatterBase* pFormatter = GetFormatter(); 5699 if ( pFormatter ) 5700 { 5701 sal_uInt16 nPropType = GetPropertyId( PropertyName ); 5702 switch ( nPropType ) 5703 { 5704 case BASEPROPERTY_NUMSHOWTHOUSANDSEP: 5705 aProp <<= (sal_Bool) ((NumericField*)GetWindow())->IsUseThousandSep(); 5706 break; 5707 case BASEPROPERTY_UNIT: 5708 aProp <<= (sal_uInt16) ((MetricField*)GetWindow())->GetUnit(); 5709 break; 5710 case BASEPROPERTY_CUSTOMUNITTEXT: 5711 aProp <<= rtl::OUString (((MetricField*)GetWindow())->GetCustomUnitText()); 5712 break; 5713 default: 5714 { 5715 aProp <<= VCLXFormattedSpinField::getProperty( PropertyName ); 5716 break; 5717 } 5718 } 5719 } 5720 return aProp; 5721 } 5722 5723 5724 // ---------------------------------------------------- 5725 // class VCLXCurrencyField 5726 // ---------------------------------------------------- 5727 5728 void VCLXCurrencyField::ImplGetPropertyIds( std::list< sal_uInt16 > &rIds ) 5729 { 5730 PushPropertyIds( rIds, 5731 BASEPROPERTY_ALIGN, 5732 BASEPROPERTY_BACKGROUNDCOLOR, 5733 BASEPROPERTY_BORDER, 5734 BASEPROPERTY_BORDERCOLOR, 5735 BASEPROPERTY_CURRENCYSYMBOL, 5736 BASEPROPERTY_CURSYM_POSITION, 5737 BASEPROPERTY_DECIMALACCURACY, 5738 BASEPROPERTY_DEFAULTCONTROL, 5739 BASEPROPERTY_ENABLED, 5740 BASEPROPERTY_ENABLEVISIBLE, 5741 BASEPROPERTY_FONTDESCRIPTOR, 5742 BASEPROPERTY_HELPTEXT, 5743 BASEPROPERTY_HELPURL, 5744 BASEPROPERTY_NUMSHOWTHOUSANDSEP, 5745 BASEPROPERTY_PRINTABLE, 5746 BASEPROPERTY_READONLY, 5747 BASEPROPERTY_REPEAT, 5748 BASEPROPERTY_REPEAT_DELAY, 5749 BASEPROPERTY_SPIN, 5750 BASEPROPERTY_STRICTFORMAT, 5751 BASEPROPERTY_TABSTOP, 5752 BASEPROPERTY_VALUEMAX_DOUBLE, 5753 BASEPROPERTY_VALUEMIN_DOUBLE, 5754 BASEPROPERTY_VALUESTEP_DOUBLE, 5755 BASEPROPERTY_VALUE_DOUBLE, 5756 BASEPROPERTY_ENFORCE_FORMAT, 5757 BASEPROPERTY_HIDEINACTIVESELECTION, 5758 BASEPROPERTY_VERTICALALIGN, 5759 BASEPROPERTY_WRITING_MODE, 5760 BASEPROPERTY_CONTEXT_WRITING_MODE, 5761 BASEPROPERTY_MOUSE_WHEEL_BEHAVIOUR, 5762 0); 5763 VCLXFormattedSpinField::ImplGetPropertyIds( rIds ); 5764 } 5765 5766 VCLXCurrencyField::VCLXCurrencyField() 5767 { 5768 } 5769 5770 VCLXCurrencyField::~VCLXCurrencyField() 5771 { 5772 } 5773 5774 // ::com::sun::star::uno::XInterface 5775 ::com::sun::star::uno::Any VCLXCurrencyField::queryInterface( const ::com::sun::star::uno::Type & rType ) throw(::com::sun::star::uno::RuntimeException) 5776 { 5777 ::com::sun::star::uno::Any aRet = ::cppu::queryInterface( rType, 5778 SAL_STATIC_CAST( ::com::sun::star::awt::XCurrencyField*, this ) ); 5779 return (aRet.hasValue() ? aRet : VCLXFormattedSpinField::queryInterface( rType )); 5780 } 5781 5782 // ::com::sun::star::lang::XTypeProvider 5783 IMPL_XTYPEPROVIDER_START( VCLXCurrencyField ) 5784 getCppuType( ( ::com::sun::star::uno::Reference< ::com::sun::star::awt::XCurrencyField>* ) NULL ), 5785 VCLXFormattedSpinField::getTypes() 5786 IMPL_XTYPEPROVIDER_END 5787 5788 void VCLXCurrencyField::setValue( double Value ) throw(::com::sun::star::uno::RuntimeException) 5789 { 5790 ::vos::OGuard aGuard( GetMutex() ); 5791 5792 LongCurrencyFormatter* pCurrencyFormatter = (LongCurrencyFormatter*) GetFormatter(); 5793 if ( pCurrencyFormatter ) 5794 { 5795 // z.B. 105, 2 Digits => 1,05 5796 // ein float 1,05 muss also eine 105 einstellen... 5797 pCurrencyFormatter->SetValue( 5798 ImplCalcLongValue( Value, pCurrencyFormatter->GetDecimalDigits() ) ); 5799 5800 // #107218# Call same listeners like VCL would do after user interaction 5801 Edit* pEdit = (Edit*)GetWindow(); 5802 if ( pEdit ) 5803 { 5804 SetSynthesizingVCLEvent( sal_True ); 5805 pEdit->SetModifyFlag(); 5806 pEdit->Modify(); 5807 SetSynthesizingVCLEvent( sal_False ); 5808 } 5809 } 5810 } 5811 5812 double VCLXCurrencyField::getValue() throw(::com::sun::star::uno::RuntimeException) 5813 { 5814 ::vos::OGuard aGuard( GetMutex() ); 5815 5816 LongCurrencyFormatter* pCurrencyFormatter = (LongCurrencyFormatter*) GetFormatter(); 5817 return pCurrencyFormatter 5818 ? ImplCalcDoubleValue( (double)pCurrencyFormatter->GetValue(), pCurrencyFormatter->GetDecimalDigits() ) 5819 : 0; 5820 } 5821 5822 void VCLXCurrencyField::setMin( double Value ) throw(::com::sun::star::uno::RuntimeException) 5823 { 5824 ::vos::OGuard aGuard( GetMutex() ); 5825 5826 LongCurrencyFormatter* pCurrencyFormatter = (LongCurrencyFormatter*) GetFormatter(); 5827 if ( pCurrencyFormatter ) 5828 pCurrencyFormatter->SetMin( 5829 ImplCalcLongValue( Value, pCurrencyFormatter->GetDecimalDigits() ) ); 5830 } 5831 5832 double VCLXCurrencyField::getMin() throw(::com::sun::star::uno::RuntimeException) 5833 { 5834 ::vos::OGuard aGuard( GetMutex() ); 5835 5836 LongCurrencyFormatter* pCurrencyFormatter = (LongCurrencyFormatter*) GetFormatter(); 5837 return pCurrencyFormatter 5838 ? ImplCalcDoubleValue( (double)pCurrencyFormatter->GetMin(), pCurrencyFormatter->GetDecimalDigits() ) 5839 : 0; 5840 } 5841 5842 void VCLXCurrencyField::setMax( double Value ) throw(::com::sun::star::uno::RuntimeException) 5843 { 5844 ::vos::OGuard aGuard( GetMutex() ); 5845 5846 LongCurrencyFormatter* pCurrencyFormatter = (LongCurrencyFormatter*) GetFormatter(); 5847 if ( pCurrencyFormatter ) 5848 pCurrencyFormatter->SetMax( 5849 ImplCalcLongValue( Value, pCurrencyFormatter->GetDecimalDigits() ) ); 5850 } 5851 5852 double VCLXCurrencyField::getMax() throw(::com::sun::star::uno::RuntimeException) 5853 { 5854 ::vos::OGuard aGuard( GetMutex() ); 5855 5856 LongCurrencyFormatter* pCurrencyFormatter = (LongCurrencyFormatter*) GetFormatter(); 5857 return pCurrencyFormatter 5858 ? ImplCalcDoubleValue( (double)pCurrencyFormatter->GetMax(), pCurrencyFormatter->GetDecimalDigits() ) 5859 : 0; 5860 } 5861 5862 void VCLXCurrencyField::setFirst( double Value ) throw(::com::sun::star::uno::RuntimeException) 5863 { 5864 ::vos::OGuard aGuard( GetMutex() ); 5865 5866 LongCurrencyField* pCurrencyField = (LongCurrencyField*) GetWindow(); 5867 if ( pCurrencyField ) 5868 pCurrencyField->SetFirst( 5869 ImplCalcLongValue( Value, pCurrencyField->GetDecimalDigits() ) ); 5870 } 5871 5872 double VCLXCurrencyField::getFirst() throw(::com::sun::star::uno::RuntimeException) 5873 { 5874 ::vos::OGuard aGuard( GetMutex() ); 5875 5876 LongCurrencyField* pCurrencyField = (LongCurrencyField*) GetWindow(); 5877 return pCurrencyField 5878 ? ImplCalcDoubleValue( (double)pCurrencyField->GetFirst(), pCurrencyField->GetDecimalDigits() ) 5879 : 0; 5880 } 5881 5882 void VCLXCurrencyField::setLast( double Value ) throw(::com::sun::star::uno::RuntimeException) 5883 { 5884 ::vos::OGuard aGuard( GetMutex() ); 5885 5886 LongCurrencyField* pCurrencyField = (LongCurrencyField*) GetWindow(); 5887 if ( pCurrencyField ) 5888 pCurrencyField->SetLast( 5889 ImplCalcLongValue( Value, pCurrencyField->GetDecimalDigits() ) ); 5890 } 5891 5892 double VCLXCurrencyField::getLast() throw(::com::sun::star::uno::RuntimeException) 5893 { 5894 ::vos::OGuard aGuard( GetMutex() ); 5895 5896 LongCurrencyField* pCurrencyField = (LongCurrencyField*) GetWindow(); 5897 return pCurrencyField 5898 ? ImplCalcDoubleValue( (double)pCurrencyField->GetLast(), pCurrencyField->GetDecimalDigits() ) 5899 : 0; 5900 } 5901 5902 void VCLXCurrencyField::setSpinSize( double Value ) throw(::com::sun::star::uno::RuntimeException) 5903 { 5904 ::vos::OGuard aGuard( GetMutex() ); 5905 5906 LongCurrencyField* pCurrencyField = (LongCurrencyField*) GetWindow(); 5907 if ( pCurrencyField ) 5908 pCurrencyField->SetSpinSize( 5909 ImplCalcLongValue( Value, pCurrencyField->GetDecimalDigits() ) ); 5910 } 5911 5912 double VCLXCurrencyField::getSpinSize() throw(::com::sun::star::uno::RuntimeException) 5913 { 5914 ::vos::OGuard aGuard( GetMutex() ); 5915 5916 LongCurrencyField* pCurrencyField = (LongCurrencyField*) GetWindow(); 5917 return pCurrencyField 5918 ? ImplCalcDoubleValue( (double)pCurrencyField->GetSpinSize(), pCurrencyField->GetDecimalDigits() ) 5919 : 0; 5920 } 5921 5922 void VCLXCurrencyField::setStrictFormat( sal_Bool bStrict ) throw(::com::sun::star::uno::RuntimeException) 5923 { 5924 VCLXFormattedSpinField::setStrictFormat( bStrict ); 5925 } 5926 5927 sal_Bool VCLXCurrencyField::isStrictFormat() throw(::com::sun::star::uno::RuntimeException) 5928 { 5929 return VCLXFormattedSpinField::isStrictFormat(); 5930 } 5931 5932 5933 void VCLXCurrencyField::setDecimalDigits( sal_Int16 Value ) throw(::com::sun::star::uno::RuntimeException) 5934 { 5935 ::vos::OGuard aGuard( GetMutex() ); 5936 5937 LongCurrencyFormatter* pCurrencyFormatter = (LongCurrencyFormatter*) GetFormatter(); 5938 if ( pCurrencyFormatter ) 5939 { 5940 double n = getValue(); 5941 pCurrencyFormatter->SetDecimalDigits( Value ); 5942 setValue( n ); 5943 } 5944 } 5945 5946 sal_Int16 VCLXCurrencyField::getDecimalDigits() throw(::com::sun::star::uno::RuntimeException) 5947 { 5948 ::vos::OGuard aGuard( GetMutex() ); 5949 5950 LongCurrencyFormatter* pCurrencyFormatter = (LongCurrencyFormatter*) GetFormatter(); 5951 return pCurrencyFormatter ? pCurrencyFormatter->GetDecimalDigits() : 0; 5952 } 5953 5954 void VCLXCurrencyField::setProperty( const ::rtl::OUString& PropertyName, const ::com::sun::star::uno::Any& Value) throw(::com::sun::star::uno::RuntimeException) 5955 { 5956 ::vos::OGuard aGuard( GetMutex() ); 5957 5958 if ( GetWindow() ) 5959 { 5960 sal_Bool bVoid = Value.getValueType().getTypeClass() == ::com::sun::star::uno::TypeClass_VOID; 5961 5962 sal_uInt16 nPropType = GetPropertyId( PropertyName ); 5963 switch ( nPropType ) 5964 { 5965 case BASEPROPERTY_VALUE_DOUBLE: 5966 { 5967 if ( bVoid ) 5968 { 5969 ((LongCurrencyField*)GetWindow())->EnableEmptyFieldValue( sal_True ); 5970 ((LongCurrencyField*)GetWindow())->SetEmptyFieldValue(); 5971 } 5972 else 5973 { 5974 double d = 0; 5975 if ( Value >>= d ) 5976 setValue( d ); 5977 } 5978 } 5979 break; 5980 case BASEPROPERTY_VALUEMIN_DOUBLE: 5981 { 5982 double d = 0; 5983 if ( Value >>= d ) 5984 setMin( d ); 5985 } 5986 break; 5987 case BASEPROPERTY_VALUEMAX_DOUBLE: 5988 { 5989 double d = 0; 5990 if ( Value >>= d ) 5991 setMax( d ); 5992 } 5993 break; 5994 case BASEPROPERTY_VALUESTEP_DOUBLE: 5995 { 5996 double d = 0; 5997 if ( Value >>= d ) 5998 setSpinSize( d ); 5999 } 6000 break; 6001 case BASEPROPERTY_DECIMALACCURACY: 6002 { 6003 sal_Int16 n = sal_Int16(); 6004 if ( Value >>= n ) 6005 setDecimalDigits( n ); 6006 } 6007 break; 6008 case BASEPROPERTY_CURRENCYSYMBOL: 6009 { 6010 ::rtl::OUString aString; 6011 if ( Value >>= aString ) 6012 ((LongCurrencyField*)GetWindow())->SetCurrencySymbol( aString ); 6013 } 6014 break; 6015 case BASEPROPERTY_NUMSHOWTHOUSANDSEP: 6016 { 6017 sal_Bool b = sal_Bool(); 6018 if ( Value >>= b ) 6019 ((LongCurrencyField*)GetWindow())->SetUseThousandSep( b ); 6020 } 6021 break; 6022 default: 6023 { 6024 VCLXFormattedSpinField::setProperty( PropertyName, Value ); 6025 } 6026 } 6027 } 6028 } 6029 6030 ::com::sun::star::uno::Any VCLXCurrencyField::getProperty( const ::rtl::OUString& PropertyName ) throw(::com::sun::star::uno::RuntimeException) 6031 { 6032 ::vos::OGuard aGuard( GetMutex() ); 6033 6034 ::com::sun::star::uno::Any aProp; 6035 FormatterBase* pFormatter = GetFormatter(); 6036 if ( pFormatter ) 6037 { 6038 sal_uInt16 nPropType = GetPropertyId( PropertyName ); 6039 switch ( nPropType ) 6040 { 6041 case BASEPROPERTY_VALUE_DOUBLE: 6042 { 6043 aProp <<= (double) getValue(); 6044 } 6045 break; 6046 case BASEPROPERTY_VALUEMIN_DOUBLE: 6047 { 6048 aProp <<= (double) getMin(); 6049 } 6050 break; 6051 case BASEPROPERTY_VALUEMAX_DOUBLE: 6052 { 6053 aProp <<= (double) getMax(); 6054 } 6055 break; 6056 case BASEPROPERTY_VALUESTEP_DOUBLE: 6057 { 6058 aProp <<= (double) getSpinSize(); 6059 } 6060 break; 6061 case BASEPROPERTY_CURRENCYSYMBOL: 6062 { 6063 aProp <<= ::rtl::OUString( ((LongCurrencyField*)GetWindow())->GetCurrencySymbol() ); 6064 } 6065 break; 6066 case BASEPROPERTY_NUMSHOWTHOUSANDSEP: 6067 { 6068 aProp <<= (sal_Bool) ((LongCurrencyField*)GetWindow())->IsUseThousandSep(); 6069 } 6070 break; 6071 default: 6072 { 6073 aProp <<= VCLXFormattedSpinField::getProperty( PropertyName ); 6074 } 6075 } 6076 } 6077 return aProp; 6078 } 6079 6080 // ---------------------------------------------------- 6081 // class VCLXPatternField 6082 // ---------------------------------------------------- 6083 6084 void VCLXPatternField::ImplGetPropertyIds( std::list< sal_uInt16 > &rIds ) 6085 { 6086 PushPropertyIds( rIds, 6087 BASEPROPERTY_ALIGN, 6088 BASEPROPERTY_BACKGROUNDCOLOR, 6089 BASEPROPERTY_BORDER, 6090 BASEPROPERTY_BORDERCOLOR, 6091 BASEPROPERTY_DEFAULTCONTROL, 6092 BASEPROPERTY_EDITMASK, 6093 BASEPROPERTY_ENABLED, 6094 BASEPROPERTY_ENABLEVISIBLE, 6095 BASEPROPERTY_FONTDESCRIPTOR, 6096 BASEPROPERTY_HELPTEXT, 6097 BASEPROPERTY_HELPURL, 6098 BASEPROPERTY_LITERALMASK, 6099 BASEPROPERTY_MAXTEXTLEN, 6100 BASEPROPERTY_PRINTABLE, 6101 BASEPROPERTY_READONLY, 6102 BASEPROPERTY_STRICTFORMAT, 6103 BASEPROPERTY_TABSTOP, 6104 BASEPROPERTY_TEXT, 6105 BASEPROPERTY_HIDEINACTIVESELECTION, 6106 BASEPROPERTY_VERTICALALIGN, 6107 BASEPROPERTY_WRITING_MODE, 6108 BASEPROPERTY_CONTEXT_WRITING_MODE, 6109 BASEPROPERTY_MOUSE_WHEEL_BEHAVIOUR, 6110 0); 6111 VCLXFormattedSpinField::ImplGetPropertyIds( rIds ); 6112 } 6113 6114 VCLXPatternField::VCLXPatternField() 6115 { 6116 } 6117 6118 VCLXPatternField::~VCLXPatternField() 6119 { 6120 } 6121 6122 // ::com::sun::star::uno::XInterface 6123 ::com::sun::star::uno::Any VCLXPatternField::queryInterface( const ::com::sun::star::uno::Type & rType ) throw(::com::sun::star::uno::RuntimeException) 6124 { 6125 ::com::sun::star::uno::Any aRet = ::cppu::queryInterface( rType, 6126 SAL_STATIC_CAST( ::com::sun::star::awt::XPatternField*, this ) ); 6127 return (aRet.hasValue() ? aRet : VCLXFormattedSpinField::queryInterface( rType )); 6128 } 6129 6130 // ::com::sun::star::lang::XTypeProvider 6131 IMPL_XTYPEPROVIDER_START( VCLXPatternField ) 6132 getCppuType( ( ::com::sun::star::uno::Reference< ::com::sun::star::awt::XPatternField>* ) NULL ), 6133 VCLXFormattedSpinField::getTypes() 6134 IMPL_XTYPEPROVIDER_END 6135 6136 void VCLXPatternField::setMasks( const ::rtl::OUString& EditMask, const ::rtl::OUString& LiteralMask ) throw(::com::sun::star::uno::RuntimeException) 6137 { 6138 ::vos::OGuard aGuard( GetMutex() ); 6139 6140 PatternField* pPatternField = (PatternField*) GetWindow(); 6141 if ( pPatternField ) 6142 { 6143 pPatternField->SetMask( ByteString( UniString( EditMask ), RTL_TEXTENCODING_ASCII_US ), LiteralMask ); 6144 } 6145 } 6146 6147 void VCLXPatternField::getMasks( ::rtl::OUString& EditMask, ::rtl::OUString& LiteralMask ) throw(::com::sun::star::uno::RuntimeException) 6148 { 6149 ::vos::OGuard aGuard( GetMutex() ); 6150 6151 PatternField* pPatternField = (PatternField*) GetWindow(); 6152 if ( pPatternField ) 6153 { 6154 EditMask = String( pPatternField->GetEditMask(), RTL_TEXTENCODING_ASCII_US ); 6155 LiteralMask = pPatternField->GetLiteralMask(); 6156 } 6157 } 6158 6159 void VCLXPatternField::setString( const ::rtl::OUString& Str ) throw(::com::sun::star::uno::RuntimeException) 6160 { 6161 ::vos::OGuard aGuard( GetMutex() ); 6162 6163 PatternField* pPatternField = (PatternField*) GetWindow(); 6164 if ( pPatternField ) 6165 { 6166 pPatternField->SetString( Str ); 6167 } 6168 } 6169 6170 ::rtl::OUString VCLXPatternField::getString() throw(::com::sun::star::uno::RuntimeException) 6171 { 6172 ::vos::OGuard aGuard( GetMutex() ); 6173 6174 ::rtl::OUString aString; 6175 PatternField* pPatternField = (PatternField*) GetWindow(); 6176 if ( pPatternField ) 6177 aString = pPatternField->GetString(); 6178 return aString; 6179 } 6180 6181 void VCLXPatternField::setStrictFormat( sal_Bool bStrict ) throw(::com::sun::star::uno::RuntimeException) 6182 { 6183 VCLXFormattedSpinField::setStrictFormat( bStrict ); 6184 } 6185 6186 sal_Bool VCLXPatternField::isStrictFormat() throw(::com::sun::star::uno::RuntimeException) 6187 { 6188 return VCLXFormattedSpinField::isStrictFormat(); 6189 } 6190 6191 void VCLXPatternField::setProperty( const ::rtl::OUString& PropertyName, const ::com::sun::star::uno::Any& Value) throw(::com::sun::star::uno::RuntimeException) 6192 { 6193 ::vos::OGuard aGuard( GetMutex() ); 6194 6195 if ( GetWindow() ) 6196 { 6197 sal_uInt16 nPropType = GetPropertyId( PropertyName ); 6198 switch ( nPropType ) 6199 { 6200 case BASEPROPERTY_EDITMASK: 6201 case BASEPROPERTY_LITERALMASK: 6202 { 6203 ::rtl::OUString aString; 6204 if ( Value >>= aString ) 6205 { 6206 ::rtl::OUString aEditMask, aLiteralMask; 6207 getMasks( aEditMask, aLiteralMask ); 6208 if ( nPropType == BASEPROPERTY_EDITMASK ) 6209 aEditMask = aString; 6210 else 6211 aLiteralMask = aString; 6212 setMasks( aEditMask, aLiteralMask ); 6213 } 6214 } 6215 break; 6216 default: 6217 { 6218 VCLXFormattedSpinField::setProperty( PropertyName, Value ); 6219 } 6220 } 6221 } 6222 } 6223 6224 ::com::sun::star::uno::Any VCLXPatternField::getProperty( const ::rtl::OUString& PropertyName ) throw(::com::sun::star::uno::RuntimeException) 6225 { 6226 ::vos::OGuard aGuard( GetMutex() ); 6227 6228 ::com::sun::star::uno::Any aProp; 6229 if ( GetWindow() ) 6230 { 6231 sal_uInt16 nPropType = GetPropertyId( PropertyName ); 6232 switch ( nPropType ) 6233 { 6234 case BASEPROPERTY_EDITMASK: 6235 case BASEPROPERTY_LITERALMASK: 6236 { 6237 ::rtl::OUString aEditMask, aLiteralMask; 6238 getMasks( aEditMask, aLiteralMask ); 6239 if ( nPropType == BASEPROPERTY_EDITMASK ) 6240 aProp <<= aEditMask; 6241 else 6242 aProp <<= aLiteralMask; 6243 } 6244 break; 6245 default: 6246 { 6247 aProp <<= VCLXFormattedSpinField::getProperty( PropertyName ); 6248 } 6249 } 6250 } 6251 return aProp; 6252 } 6253 6254 // ---------------------------------------------------- 6255 // class VCLXToolBox 6256 // ---------------------------------------------------- 6257 VCLXToolBox::VCLXToolBox() 6258 { 6259 } 6260 6261 VCLXToolBox::~VCLXToolBox() 6262 { 6263 } 6264 6265 ::com::sun::star::uno::Reference< ::com::sun::star::accessibility::XAccessibleContext > VCLXToolBox::CreateAccessibleContext() 6266 { 6267 return getAccessibleFactory().createAccessibleContext( this ); 6268 } 6269 6270