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/SystemShellExecute.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 ::com::sun::star::system::SystemShellExecute::create( 2630 ::comphelper::getProcessComponentContext() ) ); 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 //change the window type here to match the role 4509 ::com::sun::star::uno::Reference< ::com::sun::star::accessibility::XAccessibleContext > VCLXDateField::CreateAccessibleContext() 4510 { 4511 Window* pWindow = GetWindow(); 4512 if ( pWindow ) 4513 { 4514 pWindow->SetType( WINDOW_DATEFIELD ); 4515 } 4516 return getAccessibleFactory().createAccessibleContext( this ); 4517 } 4518 4519 // ::com::sun::star::uno::XInterface 4520 ::com::sun::star::uno::Any VCLXDateField::queryInterface( const ::com::sun::star::uno::Type & rType ) throw(::com::sun::star::uno::RuntimeException) 4521 { 4522 ::com::sun::star::uno::Any aRet = ::cppu::queryInterface( rType, 4523 SAL_STATIC_CAST( ::com::sun::star::awt::XDateField*, this ) ); 4524 return (aRet.hasValue() ? aRet : VCLXFormattedSpinField::queryInterface( rType )); 4525 } 4526 4527 // ::com::sun::star::lang::XTypeProvider 4528 IMPL_XTYPEPROVIDER_START( VCLXDateField ) 4529 getCppuType( ( ::com::sun::star::uno::Reference< ::com::sun::star::awt::XDateField>* ) NULL ), 4530 VCLXFormattedSpinField::getTypes() 4531 IMPL_XTYPEPROVIDER_END 4532 4533 void VCLXDateField::setProperty( const ::rtl::OUString& PropertyName, const ::com::sun::star::uno::Any& Value) throw(::com::sun::star::uno::RuntimeException) 4534 { 4535 ::vos::OGuard aGuard( GetMutex() ); 4536 4537 if ( GetWindow() ) 4538 { 4539 sal_Bool bVoid = Value.getValueType().getTypeClass() == ::com::sun::star::uno::TypeClass_VOID; 4540 4541 sal_uInt16 nPropType = GetPropertyId( PropertyName ); 4542 switch ( nPropType ) 4543 { 4544 case BASEPROPERTY_DATE: 4545 { 4546 if ( bVoid ) 4547 { 4548 ((DateField*)GetWindow())->EnableEmptyFieldValue( sal_True ); 4549 ((DateField*)GetWindow())->SetEmptyFieldValue(); 4550 } 4551 else 4552 { 4553 sal_Int32 n = 0; 4554 if ( Value >>= n ) 4555 setDate( n ); 4556 } 4557 } 4558 break; 4559 case BASEPROPERTY_DATEMIN: 4560 { 4561 sal_Int32 n = 0; 4562 if ( Value >>= n ) 4563 setMin( n ); 4564 } 4565 break; 4566 case BASEPROPERTY_DATEMAX: 4567 { 4568 sal_Int32 n = 0; 4569 if ( Value >>= n ) 4570 setMax( n ); 4571 } 4572 break; 4573 case BASEPROPERTY_EXTDATEFORMAT: 4574 { 4575 sal_Int16 n = sal_Int16(); 4576 if ( Value >>= n ) 4577 ((DateField*)GetWindow())->SetExtDateFormat( (ExtDateFieldFormat) n ); 4578 } 4579 break; 4580 case BASEPROPERTY_DATESHOWCENTURY: 4581 { 4582 sal_Bool b = sal_Bool(); 4583 if ( Value >>= b ) 4584 ((DateField*)GetWindow())->SetShowDateCentury( b ); 4585 } 4586 break; 4587 case BASEPROPERTY_ENFORCE_FORMAT: 4588 { 4589 sal_Bool bEnforce( sal_True ); 4590 OSL_VERIFY( Value >>= bEnforce ); 4591 static_cast< DateField* >( GetWindow() )->EnforceValidValue( bEnforce ); 4592 } 4593 break; 4594 default: 4595 { 4596 VCLXFormattedSpinField::setProperty( PropertyName, Value ); 4597 } 4598 } 4599 } 4600 } 4601 4602 ::com::sun::star::uno::Any VCLXDateField::getProperty( const ::rtl::OUString& PropertyName ) throw(::com::sun::star::uno::RuntimeException) 4603 { 4604 ::vos::OGuard aGuard( GetMutex() ); 4605 4606 ::com::sun::star::uno::Any aProp; 4607 FormatterBase* pFormatter = GetFormatter(); 4608 if ( pFormatter ) 4609 { 4610 sal_uInt16 nPropType = GetPropertyId( PropertyName ); 4611 switch ( nPropType ) 4612 { 4613 case BASEPROPERTY_DATE: 4614 { 4615 aProp <<= (sal_Int32) getDate(); 4616 } 4617 break; 4618 case BASEPROPERTY_DATEMIN: 4619 { 4620 aProp <<= (sal_Int32) getMin(); 4621 } 4622 break; 4623 case BASEPROPERTY_DATEMAX: 4624 { 4625 aProp <<= (sal_Int32) getMax(); 4626 } 4627 break; 4628 case BASEPROPERTY_DATESHOWCENTURY: 4629 { 4630 aProp <<= ((DateField*)GetWindow())->IsShowDateCentury(); 4631 } 4632 break; 4633 case BASEPROPERTY_ENFORCE_FORMAT: 4634 { 4635 aProp <<= (sal_Bool)static_cast< DateField* >( GetWindow() )->IsEnforceValidValue( ); 4636 } 4637 break; 4638 default: 4639 { 4640 aProp <<= VCLXFormattedSpinField::getProperty( PropertyName ); 4641 } 4642 } 4643 } 4644 return aProp; 4645 } 4646 4647 4648 void VCLXDateField::setDate( sal_Int32 nDate ) throw(::com::sun::star::uno::RuntimeException) 4649 { 4650 ::vos::OGuard aGuard( GetMutex() ); 4651 4652 DateField* pDateField = (DateField*) GetWindow(); 4653 if ( pDateField ) 4654 { 4655 pDateField->SetDate( nDate ); 4656 4657 // #107218# Call same listeners like VCL would do after user interaction 4658 SetSynthesizingVCLEvent( sal_True ); 4659 pDateField->SetModifyFlag(); 4660 pDateField->Modify(); 4661 SetSynthesizingVCLEvent( sal_False ); 4662 } 4663 } 4664 4665 sal_Int32 VCLXDateField::getDate() throw(::com::sun::star::uno::RuntimeException) 4666 { 4667 ::vos::OGuard aGuard( GetMutex() ); 4668 4669 sal_Int32 nDate = 0; 4670 DateField* pDateField = (DateField*) GetWindow(); 4671 if ( pDateField ) 4672 nDate = pDateField->GetDate().GetDate(); 4673 4674 return nDate; 4675 } 4676 4677 void VCLXDateField::setMin( sal_Int32 nDate ) throw(::com::sun::star::uno::RuntimeException) 4678 { 4679 ::vos::OGuard aGuard( GetMutex() ); 4680 4681 DateField* pDateField = (DateField*) GetWindow(); 4682 if ( pDateField ) 4683 pDateField->SetMin( nDate ); 4684 } 4685 4686 sal_Int32 VCLXDateField::getMin() throw(::com::sun::star::uno::RuntimeException) 4687 { 4688 ::vos::OGuard aGuard( GetMutex() ); 4689 4690 sal_Int32 nDate = 0; 4691 DateField* pDateField = (DateField*) GetWindow(); 4692 if ( pDateField ) 4693 nDate = pDateField->GetMin().GetDate(); 4694 4695 return nDate; 4696 } 4697 4698 void VCLXDateField::setMax( sal_Int32 nDate ) throw(::com::sun::star::uno::RuntimeException) 4699 { 4700 ::vos::OGuard aGuard( GetMutex() ); 4701 4702 DateField* pDateField = (DateField*) GetWindow(); 4703 if ( pDateField ) 4704 pDateField->SetMax( nDate ); 4705 } 4706 4707 sal_Int32 VCLXDateField::getMax() throw(::com::sun::star::uno::RuntimeException) 4708 { 4709 ::vos::OGuard aGuard( GetMutex() ); 4710 4711 sal_Int32 nDate = 0; 4712 DateField* pDateField = (DateField*) GetWindow(); 4713 if ( pDateField ) 4714 nDate = pDateField->GetMax().GetDate(); 4715 4716 return nDate; 4717 } 4718 4719 void VCLXDateField::setFirst( sal_Int32 nDate ) throw(::com::sun::star::uno::RuntimeException) 4720 { 4721 ::vos::OGuard aGuard( GetMutex() ); 4722 4723 DateField* pDateField = (DateField*) GetWindow(); 4724 if ( pDateField ) 4725 pDateField->SetFirst( nDate ); 4726 } 4727 4728 sal_Int32 VCLXDateField::getFirst() throw(::com::sun::star::uno::RuntimeException) 4729 { 4730 ::vos::OGuard aGuard( GetMutex() ); 4731 4732 sal_Int32 nDate = 0; 4733 DateField* pDateField = (DateField*) GetWindow(); 4734 if ( pDateField ) 4735 nDate = pDateField->GetFirst().GetDate(); 4736 4737 return nDate; 4738 } 4739 4740 void VCLXDateField::setLast( sal_Int32 nDate ) throw(::com::sun::star::uno::RuntimeException) 4741 { 4742 ::vos::OGuard aGuard( GetMutex() ); 4743 4744 DateField* pDateField = (DateField*) GetWindow(); 4745 if ( pDateField ) 4746 pDateField->SetLast( nDate ); 4747 } 4748 4749 sal_Int32 VCLXDateField::getLast() throw(::com::sun::star::uno::RuntimeException) 4750 { 4751 ::vos::OGuard aGuard( GetMutex() ); 4752 4753 sal_Int32 nDate = 0; 4754 DateField* pDateField = (DateField*) GetWindow(); 4755 if ( pDateField ) 4756 nDate = pDateField->GetLast().GetDate(); 4757 4758 return nDate; 4759 } 4760 4761 void VCLXDateField::setLongFormat( sal_Bool bLong ) throw(::com::sun::star::uno::RuntimeException) 4762 { 4763 ::vos::OGuard aGuard( GetMutex() ); 4764 4765 DateField* pDateField = (DateField*) GetWindow(); 4766 if ( pDateField ) 4767 pDateField->SetLongFormat( bLong ); 4768 } 4769 4770 sal_Bool VCLXDateField::isLongFormat() throw(::com::sun::star::uno::RuntimeException) 4771 { 4772 ::vos::OGuard aGuard( GetMutex() ); 4773 4774 DateField* pDateField = (DateField*) GetWindow(); 4775 return pDateField ? pDateField->IsLongFormat() : sal_False; 4776 } 4777 4778 void VCLXDateField::setEmpty() throw(::com::sun::star::uno::RuntimeException) 4779 { 4780 ::vos::OGuard aGuard( GetMutex() ); 4781 4782 DateField* pDateField = (DateField*) GetWindow(); 4783 if ( pDateField ) 4784 { 4785 pDateField->SetEmptyDate(); 4786 4787 // #107218# Call same listeners like VCL would do after user interaction 4788 SetSynthesizingVCLEvent( sal_True ); 4789 pDateField->SetModifyFlag(); 4790 pDateField->Modify(); 4791 SetSynthesizingVCLEvent( sal_False ); 4792 } 4793 } 4794 4795 sal_Bool VCLXDateField::isEmpty() throw(::com::sun::star::uno::RuntimeException) 4796 { 4797 ::vos::OGuard aGuard( GetMutex() ); 4798 4799 DateField* pDateField = (DateField*) GetWindow(); 4800 return pDateField ? pDateField->IsEmptyDate() : sal_False; 4801 } 4802 4803 void VCLXDateField::setStrictFormat( sal_Bool bStrict ) throw(::com::sun::star::uno::RuntimeException) 4804 { 4805 VCLXFormattedSpinField::setStrictFormat( bStrict ); 4806 } 4807 4808 sal_Bool VCLXDateField::isStrictFormat() throw(::com::sun::star::uno::RuntimeException) 4809 { 4810 return VCLXFormattedSpinField::isStrictFormat(); 4811 } 4812 4813 4814 // ---------------------------------------------------- 4815 // class VCLXTimeField 4816 // ---------------------------------------------------- 4817 4818 void VCLXTimeField::ImplGetPropertyIds( std::list< sal_uInt16 > &rIds ) 4819 { 4820 PushPropertyIds( rIds, 4821 BASEPROPERTY_ALIGN, 4822 BASEPROPERTY_BACKGROUNDCOLOR, 4823 BASEPROPERTY_BORDER, 4824 BASEPROPERTY_BORDERCOLOR, 4825 BASEPROPERTY_DEFAULTCONTROL, 4826 BASEPROPERTY_ENABLED, 4827 BASEPROPERTY_ENABLEVISIBLE, 4828 BASEPROPERTY_EXTTIMEFORMAT, 4829 BASEPROPERTY_FONTDESCRIPTOR, 4830 BASEPROPERTY_HELPTEXT, 4831 BASEPROPERTY_HELPURL, 4832 BASEPROPERTY_PRINTABLE, 4833 BASEPROPERTY_READONLY, 4834 BASEPROPERTY_REPEAT, 4835 BASEPROPERTY_REPEAT_DELAY, 4836 BASEPROPERTY_SPIN, 4837 BASEPROPERTY_STRICTFORMAT, 4838 BASEPROPERTY_TABSTOP, 4839 BASEPROPERTY_TIME, 4840 BASEPROPERTY_TIMEMAX, 4841 BASEPROPERTY_TIMEMIN, 4842 BASEPROPERTY_ENFORCE_FORMAT, 4843 BASEPROPERTY_TEXT, 4844 BASEPROPERTY_HIDEINACTIVESELECTION, 4845 BASEPROPERTY_VERTICALALIGN, 4846 BASEPROPERTY_WRITING_MODE, 4847 BASEPROPERTY_CONTEXT_WRITING_MODE, 4848 BASEPROPERTY_MOUSE_WHEEL_BEHAVIOUR, 4849 0); 4850 VCLXFormattedSpinField::ImplGetPropertyIds( rIds ); 4851 } 4852 4853 VCLXTimeField::VCLXTimeField() 4854 { 4855 } 4856 4857 VCLXTimeField::~VCLXTimeField() 4858 { 4859 } 4860 //change the window type here to match the role 4861 ::com::sun::star::uno::Reference< ::com::sun::star::accessibility::XAccessibleContext > VCLXTimeField::CreateAccessibleContext() 4862 { 4863 Window* pWindow = GetWindow(); 4864 if ( pWindow ) 4865 { 4866 pWindow->SetType( WINDOW_TIMEFIELD ); 4867 } 4868 return getAccessibleFactory().createAccessibleContext( this ); 4869 } 4870 4871 // ::com::sun::star::uno::XInterface 4872 ::com::sun::star::uno::Any VCLXTimeField::queryInterface( const ::com::sun::star::uno::Type & rType ) throw(::com::sun::star::uno::RuntimeException) 4873 { 4874 ::com::sun::star::uno::Any aRet = ::cppu::queryInterface( rType, 4875 SAL_STATIC_CAST( ::com::sun::star::awt::XTimeField*, this ) ); 4876 return (aRet.hasValue() ? aRet : VCLXFormattedSpinField::queryInterface( rType )); 4877 } 4878 4879 // ::com::sun::star::lang::XTypeProvider 4880 IMPL_XTYPEPROVIDER_START( VCLXTimeField ) 4881 getCppuType( ( ::com::sun::star::uno::Reference< ::com::sun::star::awt::XTimeField>* ) NULL ), 4882 VCLXFormattedSpinField::getTypes() 4883 IMPL_XTYPEPROVIDER_END 4884 4885 void VCLXTimeField::setTime( sal_Int32 nTime ) throw(::com::sun::star::uno::RuntimeException) 4886 { 4887 ::vos::OGuard aGuard( GetMutex() ); 4888 4889 TimeField* pTimeField = (TimeField*) GetWindow(); 4890 if ( pTimeField ) 4891 { 4892 pTimeField->SetTime( nTime ); 4893 4894 // #107218# Call same listeners like VCL would do after user interaction 4895 SetSynthesizingVCLEvent( sal_True ); 4896 pTimeField->SetModifyFlag(); 4897 pTimeField->Modify(); 4898 SetSynthesizingVCLEvent( sal_False ); 4899 } 4900 } 4901 4902 sal_Int32 VCLXTimeField::getTime() throw(::com::sun::star::uno::RuntimeException) 4903 { 4904 ::vos::OGuard aGuard( GetMutex() ); 4905 4906 sal_Int32 nTime = 0; 4907 TimeField* pTimeField = (TimeField*) GetWindow(); 4908 if ( pTimeField ) 4909 nTime = pTimeField->GetTime().GetTime(); 4910 4911 return nTime; 4912 } 4913 4914 void VCLXTimeField::setMin( sal_Int32 nTime ) throw(::com::sun::star::uno::RuntimeException) 4915 { 4916 ::vos::OGuard aGuard( GetMutex() ); 4917 4918 TimeField* pTimeField = (TimeField*) GetWindow(); 4919 if ( pTimeField ) 4920 pTimeField->SetMin( nTime ); 4921 } 4922 4923 sal_Int32 VCLXTimeField::getMin() throw(::com::sun::star::uno::RuntimeException) 4924 { 4925 ::vos::OGuard aGuard( GetMutex() ); 4926 4927 sal_Int32 nTime = 0; 4928 TimeField* pTimeField = (TimeField*) GetWindow(); 4929 if ( pTimeField ) 4930 nTime = pTimeField->GetMin().GetTime(); 4931 4932 return nTime; 4933 } 4934 4935 void VCLXTimeField::setMax( sal_Int32 nTime ) throw(::com::sun::star::uno::RuntimeException) 4936 { 4937 ::vos::OGuard aGuard( GetMutex() ); 4938 4939 TimeField* pTimeField = (TimeField*) GetWindow(); 4940 if ( pTimeField ) 4941 pTimeField->SetMax( nTime ); 4942 } 4943 4944 sal_Int32 VCLXTimeField::getMax() throw(::com::sun::star::uno::RuntimeException) 4945 { 4946 ::vos::OGuard aGuard( GetMutex() ); 4947 4948 sal_Int32 nTime = 0; 4949 TimeField* pTimeField = (TimeField*) GetWindow(); 4950 if ( pTimeField ) 4951 nTime = pTimeField->GetMax().GetTime(); 4952 4953 return nTime; 4954 } 4955 4956 void VCLXTimeField::setFirst( sal_Int32 nTime ) throw(::com::sun::star::uno::RuntimeException) 4957 { 4958 ::vos::OGuard aGuard( GetMutex() ); 4959 4960 TimeField* pTimeField = (TimeField*) GetWindow(); 4961 if ( pTimeField ) 4962 pTimeField->SetFirst( nTime ); 4963 } 4964 4965 sal_Int32 VCLXTimeField::getFirst() throw(::com::sun::star::uno::RuntimeException) 4966 { 4967 ::vos::OGuard aGuard( GetMutex() ); 4968 4969 sal_Int32 nTime = 0; 4970 TimeField* pTimeField = (TimeField*) GetWindow(); 4971 if ( pTimeField ) 4972 nTime = pTimeField->GetFirst().GetTime(); 4973 4974 return nTime; 4975 } 4976 4977 void VCLXTimeField::setLast( sal_Int32 nTime ) throw(::com::sun::star::uno::RuntimeException) 4978 { 4979 ::vos::OGuard aGuard( GetMutex() ); 4980 4981 TimeField* pTimeField = (TimeField*) GetWindow(); 4982 if ( pTimeField ) 4983 pTimeField->SetLast( nTime ); 4984 } 4985 4986 sal_Int32 VCLXTimeField::getLast() throw(::com::sun::star::uno::RuntimeException) 4987 { 4988 ::vos::OGuard aGuard( GetMutex() ); 4989 4990 sal_Int32 nTime = 0; 4991 TimeField* pTimeField = (TimeField*) GetWindow(); 4992 if ( pTimeField ) 4993 nTime = pTimeField->GetLast().GetTime(); 4994 4995 return nTime; 4996 } 4997 4998 void VCLXTimeField::setEmpty() throw(::com::sun::star::uno::RuntimeException) 4999 { 5000 ::vos::OGuard aGuard( GetMutex() ); 5001 5002 TimeField* pTimeField = (TimeField*) GetWindow(); 5003 if ( pTimeField ) 5004 pTimeField->SetEmptyTime(); 5005 } 5006 5007 sal_Bool VCLXTimeField::isEmpty() throw(::com::sun::star::uno::RuntimeException) 5008 { 5009 ::vos::OGuard aGuard( GetMutex() ); 5010 5011 TimeField* pTimeField = (TimeField*) GetWindow(); 5012 return pTimeField ? pTimeField->IsEmptyTime() : sal_False; 5013 } 5014 5015 void VCLXTimeField::setStrictFormat( sal_Bool bStrict ) throw(::com::sun::star::uno::RuntimeException) 5016 { 5017 VCLXFormattedSpinField::setStrictFormat( bStrict ); 5018 } 5019 5020 sal_Bool VCLXTimeField::isStrictFormat() throw(::com::sun::star::uno::RuntimeException) 5021 { 5022 return VCLXFormattedSpinField::isStrictFormat(); 5023 } 5024 5025 5026 void VCLXTimeField::setProperty( const ::rtl::OUString& PropertyName, const ::com::sun::star::uno::Any& Value) throw(::com::sun::star::uno::RuntimeException) 5027 { 5028 ::vos::OGuard aGuard( GetMutex() ); 5029 5030 if ( GetWindow() ) 5031 { 5032 sal_Bool bVoid = Value.getValueType().getTypeClass() == ::com::sun::star::uno::TypeClass_VOID; 5033 5034 sal_uInt16 nPropType = GetPropertyId( PropertyName ); 5035 switch ( nPropType ) 5036 { 5037 case BASEPROPERTY_TIME: 5038 { 5039 if ( bVoid ) 5040 { 5041 ((TimeField*)GetWindow())->EnableEmptyFieldValue( sal_True ); 5042 ((TimeField*)GetWindow())->SetEmptyFieldValue(); 5043 } 5044 else 5045 { 5046 sal_Int32 n = 0; 5047 if ( Value >>= n ) 5048 setTime( n ); 5049 } 5050 } 5051 break; 5052 case BASEPROPERTY_TIMEMIN: 5053 { 5054 sal_Int32 n = 0; 5055 if ( Value >>= n ) 5056 setMin( n ); 5057 } 5058 break; 5059 case BASEPROPERTY_TIMEMAX: 5060 { 5061 sal_Int32 n = 0; 5062 if ( Value >>= n ) 5063 setMax( n ); 5064 } 5065 break; 5066 case BASEPROPERTY_EXTTIMEFORMAT: 5067 { 5068 sal_Int16 n = sal_Int16(); 5069 if ( Value >>= n ) 5070 ((TimeField*)GetWindow())->SetExtFormat( (ExtTimeFieldFormat) n ); 5071 } 5072 break; 5073 case BASEPROPERTY_ENFORCE_FORMAT: 5074 { 5075 sal_Bool bEnforce( sal_True ); 5076 OSL_VERIFY( Value >>= bEnforce ); 5077 static_cast< TimeField* >( GetWindow() )->EnforceValidValue( bEnforce ); 5078 } 5079 break; 5080 default: 5081 { 5082 VCLXFormattedSpinField::setProperty( PropertyName, Value ); 5083 } 5084 } 5085 } 5086 } 5087 5088 ::com::sun::star::uno::Any VCLXTimeField::getProperty( const ::rtl::OUString& PropertyName ) throw(::com::sun::star::uno::RuntimeException) 5089 { 5090 ::vos::OGuard aGuard( GetMutex() ); 5091 5092 ::com::sun::star::uno::Any aProp; 5093 if ( GetWindow() ) 5094 { 5095 sal_uInt16 nPropType = GetPropertyId( PropertyName ); 5096 switch ( nPropType ) 5097 { 5098 case BASEPROPERTY_TIME: 5099 { 5100 aProp <<= (sal_Int32) getTime(); 5101 } 5102 break; 5103 case BASEPROPERTY_TIMEMIN: 5104 { 5105 aProp <<= (sal_Int32) getMin(); 5106 } 5107 break; 5108 case BASEPROPERTY_TIMEMAX: 5109 { 5110 aProp <<= (sal_Int32) getMax(); 5111 } 5112 break; 5113 case BASEPROPERTY_ENFORCE_FORMAT: 5114 { 5115 aProp <<= (sal_Bool)static_cast< TimeField* >( GetWindow() )->IsEnforceValidValue( ); 5116 } 5117 break; 5118 default: 5119 { 5120 aProp <<= VCLXFormattedSpinField::getProperty( PropertyName ); 5121 } 5122 } 5123 } 5124 return aProp; 5125 } 5126 5127 // ---------------------------------------------------- 5128 // class VCLXNumericField 5129 // ---------------------------------------------------- 5130 5131 void VCLXNumericField::ImplGetPropertyIds( std::list< sal_uInt16 > &rIds ) 5132 { 5133 PushPropertyIds( rIds, 5134 BASEPROPERTY_ALIGN, 5135 BASEPROPERTY_BACKGROUNDCOLOR, 5136 BASEPROPERTY_BORDER, 5137 BASEPROPERTY_BORDERCOLOR, 5138 BASEPROPERTY_DECIMALACCURACY, 5139 BASEPROPERTY_DEFAULTCONTROL, 5140 BASEPROPERTY_ENABLED, 5141 BASEPROPERTY_ENABLEVISIBLE, 5142 BASEPROPERTY_FONTDESCRIPTOR, 5143 BASEPROPERTY_HELPTEXT, 5144 BASEPROPERTY_HELPURL, 5145 BASEPROPERTY_NUMSHOWTHOUSANDSEP, 5146 BASEPROPERTY_PRINTABLE, 5147 BASEPROPERTY_READONLY, 5148 BASEPROPERTY_REPEAT, 5149 BASEPROPERTY_REPEAT_DELAY, 5150 BASEPROPERTY_SPIN, 5151 BASEPROPERTY_STRICTFORMAT, 5152 BASEPROPERTY_TABSTOP, 5153 BASEPROPERTY_VALUEMAX_DOUBLE, 5154 BASEPROPERTY_VALUEMIN_DOUBLE, 5155 BASEPROPERTY_VALUESTEP_DOUBLE, 5156 BASEPROPERTY_VALUE_DOUBLE, 5157 BASEPROPERTY_ENFORCE_FORMAT, 5158 BASEPROPERTY_HIDEINACTIVESELECTION, 5159 BASEPROPERTY_VERTICALALIGN, 5160 BASEPROPERTY_WRITING_MODE, 5161 BASEPROPERTY_CONTEXT_WRITING_MODE, 5162 BASEPROPERTY_MOUSE_WHEEL_BEHAVIOUR, 5163 0); 5164 VCLXFormattedSpinField::ImplGetPropertyIds( rIds ); 5165 } 5166 5167 VCLXNumericField::VCLXNumericField() 5168 { 5169 } 5170 5171 VCLXNumericField::~VCLXNumericField() 5172 { 5173 } 5174 5175 // ::com::sun::star::uno::XInterface 5176 ::com::sun::star::uno::Any VCLXNumericField::queryInterface( const ::com::sun::star::uno::Type & rType ) throw(::com::sun::star::uno::RuntimeException) 5177 { 5178 ::com::sun::star::uno::Any aRet = ::cppu::queryInterface( rType, 5179 SAL_STATIC_CAST( ::com::sun::star::awt::XNumericField*, this ) ); 5180 return (aRet.hasValue() ? aRet : VCLXFormattedSpinField::queryInterface( rType )); 5181 } 5182 5183 // ::com::sun::star::lang::XTypeProvider 5184 IMPL_XTYPEPROVIDER_START( VCLXNumericField ) 5185 getCppuType( ( ::com::sun::star::uno::Reference< ::com::sun::star::awt::XNumericField>* ) NULL ), 5186 VCLXFormattedSpinField::getTypes() 5187 IMPL_XTYPEPROVIDER_END 5188 5189 void VCLXNumericField::setValue( double Value ) throw(::com::sun::star::uno::RuntimeException) 5190 { 5191 ::vos::OGuard aGuard( GetMutex() ); 5192 5193 NumericFormatter* pNumericFormatter = (NumericFormatter*) GetFormatter(); 5194 if ( pNumericFormatter ) 5195 { 5196 // z.B. 105, 2 Digits => 1,05 5197 // ein float 1,05 muss also eine 105 einstellen... 5198 pNumericFormatter->SetValue( 5199 (long)ImplCalcLongValue( Value, pNumericFormatter->GetDecimalDigits() ) ); 5200 5201 // #107218# Call same listeners like VCL would do after user interaction 5202 Edit* pEdit = (Edit*)GetWindow(); 5203 if ( pEdit ) 5204 { 5205 SetSynthesizingVCLEvent( sal_True ); 5206 pEdit->SetModifyFlag(); 5207 pEdit->Modify(); 5208 SetSynthesizingVCLEvent( sal_False ); 5209 } 5210 } 5211 } 5212 5213 double VCLXNumericField::getValue() throw(::com::sun::star::uno::RuntimeException) 5214 { 5215 ::vos::OGuard aGuard( GetMutex() ); 5216 5217 NumericFormatter* pNumericFormatter = (NumericFormatter*) GetFormatter(); 5218 return pNumericFormatter 5219 ? ImplCalcDoubleValue( (double)pNumericFormatter->GetValue(), pNumericFormatter->GetDecimalDigits() ) 5220 : 0; 5221 } 5222 5223 void VCLXNumericField::setMin( double Value ) throw(::com::sun::star::uno::RuntimeException) 5224 { 5225 ::vos::OGuard aGuard( GetMutex() ); 5226 5227 NumericFormatter* pNumericFormatter = (NumericFormatter*) GetFormatter(); 5228 if ( pNumericFormatter ) 5229 pNumericFormatter->SetMin( 5230 (long)ImplCalcLongValue( Value, pNumericFormatter->GetDecimalDigits() ) ); 5231 } 5232 5233 double VCLXNumericField::getMin() throw(::com::sun::star::uno::RuntimeException) 5234 { 5235 ::vos::OGuard aGuard( GetMutex() ); 5236 5237 NumericFormatter* pNumericFormatter = (NumericFormatter*) GetFormatter(); 5238 return pNumericFormatter 5239 ? ImplCalcDoubleValue( (double)pNumericFormatter->GetMin(), pNumericFormatter->GetDecimalDigits() ) 5240 : 0; 5241 } 5242 5243 void VCLXNumericField::setMax( double Value ) throw(::com::sun::star::uno::RuntimeException) 5244 { 5245 ::vos::OGuard aGuard( GetMutex() ); 5246 5247 NumericFormatter* pNumericFormatter = (NumericFormatter*) GetFormatter(); 5248 if ( pNumericFormatter ) 5249 pNumericFormatter->SetMax( 5250 (long)ImplCalcLongValue( Value, pNumericFormatter->GetDecimalDigits() ) ); 5251 } 5252 5253 double VCLXNumericField::getMax() throw(::com::sun::star::uno::RuntimeException) 5254 { 5255 ::vos::OGuard aGuard( GetMutex() ); 5256 5257 NumericFormatter* pNumericFormatter = (NumericFormatter*) GetFormatter(); 5258 return pNumericFormatter 5259 ? ImplCalcDoubleValue( (double)pNumericFormatter->GetMax(), pNumericFormatter->GetDecimalDigits() ) 5260 : 0; 5261 } 5262 5263 void VCLXNumericField::setFirst( double Value ) throw(::com::sun::star::uno::RuntimeException) 5264 { 5265 ::vos::OGuard aGuard( GetMutex() ); 5266 5267 NumericField* pNumericField = (NumericField*) GetWindow(); 5268 if ( pNumericField ) 5269 pNumericField->SetFirst( 5270 (long)ImplCalcLongValue( Value, pNumericField->GetDecimalDigits() ) ); 5271 } 5272 5273 double VCLXNumericField::getFirst() throw(::com::sun::star::uno::RuntimeException) 5274 { 5275 ::vos::OGuard aGuard( GetMutex() ); 5276 5277 NumericField* pNumericField = (NumericField*) GetWindow(); 5278 return pNumericField 5279 ? ImplCalcDoubleValue( (double)pNumericField->GetFirst(), pNumericField->GetDecimalDigits() ) 5280 : 0; 5281 } 5282 5283 void VCLXNumericField::setLast( double Value ) throw(::com::sun::star::uno::RuntimeException) 5284 { 5285 ::vos::OGuard aGuard( GetMutex() ); 5286 5287 NumericField* pNumericField = (NumericField*) GetWindow(); 5288 if ( pNumericField ) 5289 pNumericField->SetLast( 5290 (long)ImplCalcLongValue( Value, pNumericField->GetDecimalDigits() ) ); 5291 } 5292 5293 double VCLXNumericField::getLast() throw(::com::sun::star::uno::RuntimeException) 5294 { 5295 ::vos::OGuard aGuard( GetMutex() ); 5296 5297 NumericField* pNumericField = (NumericField*) GetWindow(); 5298 return pNumericField 5299 ? ImplCalcDoubleValue( (double)pNumericField->GetLast(), pNumericField->GetDecimalDigits() ) 5300 : 0; 5301 } 5302 5303 void VCLXNumericField::setStrictFormat( sal_Bool bStrict ) throw(::com::sun::star::uno::RuntimeException) 5304 { 5305 VCLXFormattedSpinField::setStrictFormat( bStrict ); 5306 } 5307 5308 sal_Bool VCLXNumericField::isStrictFormat() throw(::com::sun::star::uno::RuntimeException) 5309 { 5310 return VCLXFormattedSpinField::isStrictFormat(); 5311 } 5312 5313 5314 void VCLXNumericField::setSpinSize( double Value ) throw(::com::sun::star::uno::RuntimeException) 5315 { 5316 ::vos::OGuard aGuard( GetMutex() ); 5317 5318 NumericField* pNumericField = (NumericField*) GetWindow(); 5319 if ( pNumericField ) 5320 pNumericField->SetSpinSize( 5321 (long)ImplCalcLongValue( Value, pNumericField->GetDecimalDigits() ) ); 5322 } 5323 5324 double VCLXNumericField::getSpinSize() throw(::com::sun::star::uno::RuntimeException) 5325 { 5326 ::vos::OGuard aGuard( GetMutex() ); 5327 5328 NumericField* pNumericField = (NumericField*) GetWindow(); 5329 return pNumericField 5330 ? ImplCalcDoubleValue( (double)pNumericField->GetSpinSize(), pNumericField->GetDecimalDigits() ) 5331 : 0; 5332 } 5333 5334 void VCLXNumericField::setDecimalDigits( sal_Int16 Value ) throw(::com::sun::star::uno::RuntimeException) 5335 { 5336 ::vos::OGuard aGuard( GetMutex() ); 5337 5338 NumericFormatter* pNumericFormatter = (NumericFormatter*) GetFormatter(); 5339 if ( pNumericFormatter ) 5340 { 5341 double n = getValue(); 5342 pNumericFormatter->SetDecimalDigits( Value ); 5343 setValue( n ); 5344 } 5345 } 5346 5347 sal_Int16 VCLXNumericField::getDecimalDigits() throw(::com::sun::star::uno::RuntimeException) 5348 { 5349 ::vos::OGuard aGuard( GetMutex() ); 5350 5351 NumericFormatter* pNumericFormatter = (NumericFormatter*) GetFormatter(); 5352 return pNumericFormatter ? pNumericFormatter->GetDecimalDigits() : 0; 5353 } 5354 5355 void VCLXNumericField::setProperty( const ::rtl::OUString& PropertyName, const ::com::sun::star::uno::Any& Value) throw(::com::sun::star::uno::RuntimeException) 5356 { 5357 ::vos::OGuard aGuard( GetMutex() ); 5358 5359 if ( GetWindow() ) 5360 { 5361 sal_Bool bVoid = Value.getValueType().getTypeClass() == ::com::sun::star::uno::TypeClass_VOID; 5362 5363 sal_uInt16 nPropType = GetPropertyId( PropertyName ); 5364 switch ( nPropType ) 5365 { 5366 case BASEPROPERTY_VALUE_DOUBLE: 5367 { 5368 if ( bVoid ) 5369 { 5370 ((NumericField*)GetWindow())->EnableEmptyFieldValue( sal_True ); 5371 ((NumericField*)GetWindow())->SetEmptyFieldValue(); 5372 } 5373 else 5374 { 5375 double d = 0; 5376 if ( Value >>= d ) 5377 setValue( d ); 5378 } 5379 } 5380 break; 5381 case BASEPROPERTY_VALUEMIN_DOUBLE: 5382 { 5383 double d = 0; 5384 if ( Value >>= d ) 5385 setMin( d ); 5386 } 5387 break; 5388 case BASEPROPERTY_VALUEMAX_DOUBLE: 5389 { 5390 double d = 0; 5391 if ( Value >>= d ) 5392 setMax( d ); 5393 } 5394 break; 5395 case BASEPROPERTY_VALUESTEP_DOUBLE: 5396 { 5397 double d = 0; 5398 if ( Value >>= d ) 5399 setSpinSize( d ); 5400 } 5401 break; 5402 case BASEPROPERTY_DECIMALACCURACY: 5403 { 5404 sal_Int16 n = sal_Int16(); 5405 if ( Value >>= n ) 5406 setDecimalDigits( n ); 5407 } 5408 break; 5409 case BASEPROPERTY_NUMSHOWTHOUSANDSEP: 5410 { 5411 sal_Bool b = sal_Bool(); 5412 if ( Value >>= b ) 5413 ((NumericField*)GetWindow())->SetUseThousandSep( b ); 5414 } 5415 break; 5416 default: 5417 { 5418 VCLXFormattedSpinField::setProperty( PropertyName, Value ); 5419 } 5420 } 5421 } 5422 } 5423 5424 ::com::sun::star::uno::Any VCLXNumericField::getProperty( const ::rtl::OUString& PropertyName ) throw(::com::sun::star::uno::RuntimeException) 5425 { 5426 ::vos::OGuard aGuard( GetMutex() ); 5427 5428 ::com::sun::star::uno::Any aProp; 5429 FormatterBase* pFormatter = GetFormatter(); 5430 if ( pFormatter ) 5431 { 5432 sal_uInt16 nPropType = GetPropertyId( PropertyName ); 5433 switch ( nPropType ) 5434 { 5435 case BASEPROPERTY_VALUE_DOUBLE: 5436 { 5437 aProp <<= (double) getValue(); 5438 } 5439 break; 5440 case BASEPROPERTY_VALUEMIN_DOUBLE: 5441 { 5442 aProp <<= (double) getMin(); 5443 } 5444 break; 5445 case BASEPROPERTY_VALUEMAX_DOUBLE: 5446 { 5447 aProp <<= (double) getMax(); 5448 } 5449 break; 5450 case BASEPROPERTY_VALUESTEP_DOUBLE: 5451 { 5452 aProp <<= (double) getSpinSize(); 5453 } 5454 break; 5455 case BASEPROPERTY_NUMSHOWTHOUSANDSEP: 5456 { 5457 aProp <<= (sal_Bool) ((NumericField*)GetWindow())->IsUseThousandSep(); 5458 } 5459 break; 5460 default: 5461 { 5462 aProp <<= VCLXFormattedSpinField::getProperty( PropertyName ); 5463 } 5464 } 5465 } 5466 return aProp; 5467 } 5468 5469 5470 // ---------------------------------------------------- 5471 // class VCLXMetricField 5472 // ---------------------------------------------------- 5473 5474 void VCLXMetricField::ImplGetPropertyIds( std::list< sal_uInt16 > &rIds ) 5475 { 5476 PushPropertyIds( rIds, 5477 BASEPROPERTY_ALIGN, 5478 BASEPROPERTY_BACKGROUNDCOLOR, 5479 BASEPROPERTY_BORDER, 5480 BASEPROPERTY_BORDERCOLOR, 5481 BASEPROPERTY_DECIMALACCURACY, 5482 BASEPROPERTY_DEFAULTCONTROL, 5483 BASEPROPERTY_ENABLED, 5484 BASEPROPERTY_ENABLEVISIBLE, 5485 BASEPROPERTY_FONTDESCRIPTOR, 5486 BASEPROPERTY_HELPTEXT, 5487 BASEPROPERTY_HELPURL, 5488 BASEPROPERTY_NUMSHOWTHOUSANDSEP, 5489 BASEPROPERTY_PRINTABLE, 5490 BASEPROPERTY_READONLY, 5491 BASEPROPERTY_REPEAT, 5492 BASEPROPERTY_REPEAT_DELAY, 5493 BASEPROPERTY_SPIN, 5494 BASEPROPERTY_STRICTFORMAT, 5495 BASEPROPERTY_TABSTOP, 5496 BASEPROPERTY_ENFORCE_FORMAT, 5497 BASEPROPERTY_HIDEINACTIVESELECTION, 5498 BASEPROPERTY_UNIT, 5499 BASEPROPERTY_CUSTOMUNITTEXT, 5500 BASEPROPERTY_WRITING_MODE, 5501 BASEPROPERTY_CONTEXT_WRITING_MODE, 5502 BASEPROPERTY_MOUSE_WHEEL_BEHAVIOUR, 5503 0); 5504 VCLXFormattedSpinField::ImplGetPropertyIds( rIds ); 5505 } 5506 5507 VCLXMetricField::VCLXMetricField() 5508 { 5509 } 5510 5511 VCLXMetricField::~VCLXMetricField() 5512 { 5513 } 5514 5515 MetricFormatter *VCLXMetricField::GetMetricFormatter() throw(::com::sun::star::uno::RuntimeException) 5516 { 5517 MetricFormatter *pFormatter = (MetricFormatter *) GetFormatter(); 5518 if (!pFormatter) 5519 throw ::com::sun::star::uno::RuntimeException(); 5520 return pFormatter; 5521 } 5522 5523 MetricField *VCLXMetricField::GetMetricField() throw(::com::sun::star::uno::RuntimeException) 5524 { 5525 MetricField *pField = (MetricField *) GetWindow(); 5526 if (!pField) 5527 throw ::com::sun::star::uno::RuntimeException(); 5528 return pField; 5529 } 5530 5531 // ::com::sun::star::uno::XInterface 5532 ::com::sun::star::uno::Any VCLXMetricField::queryInterface( const ::com::sun::star::uno::Type & rType ) throw(::com::sun::star::uno::RuntimeException) 5533 { 5534 ::com::sun::star::uno::Any aRet = ::cppu::queryInterface( rType, 5535 SAL_STATIC_CAST( ::com::sun::star::awt::XMetricField*, this ) ); 5536 return (aRet.hasValue() ? aRet : VCLXFormattedSpinField::queryInterface( rType )); 5537 } 5538 5539 // ::com::sun::star::lang::XTypeProvider 5540 IMPL_XTYPEPROVIDER_START( VCLXMetricField ) 5541 getCppuType( ( ::com::sun::star::uno::Reference< ::com::sun::star::awt::XMetricField>* ) NULL ), 5542 VCLXFormattedSpinField::getTypes() 5543 IMPL_XTYPEPROVIDER_END 5544 5545 // FIXME: later ... 5546 #define MetricUnitUnoToVcl(a) ((FieldUnit)(a)) 5547 5548 #define METRIC_MAP_PAIR(method,parent) \ 5549 sal_Int64 VCLXMetricField::get##method( sal_Int16 nUnit ) throw (::com::sun::star::uno::RuntimeException) \ 5550 { \ 5551 ::vos::OGuard aGuard( GetMutex() ); \ 5552 return GetMetric##parent()->Get##method( MetricUnitUnoToVcl( nUnit ) ); \ 5553 } \ 5554 void VCLXMetricField::set##method( sal_Int64 nValue, sal_Int16 nUnit ) throw (::com::sun::star::uno::RuntimeException) \ 5555 { \ 5556 ::vos::OGuard aGuard( GetMutex() ); \ 5557 GetMetric##parent()->Set##method( nValue, MetricUnitUnoToVcl( nUnit ) ); \ 5558 } 5559 5560 METRIC_MAP_PAIR(Min, Formatter) 5561 METRIC_MAP_PAIR(Max, Formatter) 5562 METRIC_MAP_PAIR(First, Field) 5563 METRIC_MAP_PAIR(Last, Field) 5564 5565 #undef METRIC_MAP_PAIR 5566 5567 ::sal_Int64 VCLXMetricField::getValue( ::sal_Int16 nUnit ) throw (::com::sun::star::uno::RuntimeException) 5568 { 5569 ::vos::OGuard aGuard( GetMutex() ); 5570 return GetMetricFormatter()->GetValue( MetricUnitUnoToVcl( nUnit ) ); 5571 } 5572 5573 ::sal_Int64 VCLXMetricField::getCorrectedValue( ::sal_Int16 nUnit ) throw (::com::sun::star::uno::RuntimeException) 5574 { 5575 ::vos::OGuard aGuard( GetMutex() ); 5576 return GetMetricFormatter()->GetCorrectedValue( MetricUnitUnoToVcl( nUnit ) ); 5577 } 5578 5579 // FIXME: acute cut/paste evilness - move this to the parent Edit class ? 5580 void VCLXMetricField::CallListeners() 5581 { 5582 // #107218# Call same listeners like VCL would do after user interaction 5583 Edit* pEdit = (Edit*)GetWindow(); 5584 if ( pEdit ) 5585 { 5586 SetSynthesizingVCLEvent( sal_True ); 5587 pEdit->SetModifyFlag(); 5588 pEdit->Modify(); 5589 SetSynthesizingVCLEvent( sal_False ); 5590 } 5591 } 5592 5593 void VCLXMetricField::setValue( ::sal_Int64 Value, ::sal_Int16 Unit ) throw (::com::sun::star::uno::RuntimeException) 5594 { 5595 ::vos::OGuard aGuard( GetMutex() ); 5596 GetMetricFormatter()->SetValue( Value, MetricUnitUnoToVcl( Unit ) ); 5597 CallListeners(); 5598 } 5599 5600 void VCLXMetricField::setUserValue( ::sal_Int64 Value, ::sal_Int16 Unit ) throw (::com::sun::star::uno::RuntimeException) 5601 { 5602 ::vos::OGuard aGuard( GetMutex() ); 5603 GetMetricFormatter()->SetUserValue( Value, MetricUnitUnoToVcl( Unit ) ); 5604 CallListeners(); 5605 } 5606 5607 void VCLXMetricField::setStrictFormat( sal_Bool bStrict ) throw(::com::sun::star::uno::RuntimeException) 5608 { 5609 VCLXFormattedSpinField::setStrictFormat( bStrict ); 5610 } 5611 5612 sal_Bool VCLXMetricField::isStrictFormat() throw(::com::sun::star::uno::RuntimeException) 5613 { 5614 return VCLXFormattedSpinField::isStrictFormat(); 5615 } 5616 5617 void VCLXMetricField::setSpinSize( sal_Int64 Value ) throw(::com::sun::star::uno::RuntimeException) 5618 { 5619 ::vos::OGuard aGuard( GetMutex() ); 5620 GetMetricField()->SetSpinSize( Value ); 5621 } 5622 5623 sal_Int64 VCLXMetricField::getSpinSize() throw(::com::sun::star::uno::RuntimeException) 5624 { 5625 ::vos::OGuard aGuard( GetMutex() ); 5626 return GetMetricField()->GetSpinSize(); 5627 } 5628 5629 void VCLXMetricField::setDecimalDigits( sal_Int16 Value ) throw(::com::sun::star::uno::RuntimeException) 5630 { 5631 ::vos::OGuard aGuard( GetMutex() ); 5632 GetMetricFormatter()->SetDecimalDigits( Value ); 5633 } 5634 5635 sal_Int16 VCLXMetricField::getDecimalDigits() throw(::com::sun::star::uno::RuntimeException) 5636 { 5637 ::vos::OGuard aGuard( GetMutex() ); 5638 5639 NumericFormatter* pNumericFormatter = (NumericFormatter*) GetFormatter(); 5640 return pNumericFormatter ? pNumericFormatter->GetDecimalDigits() : 0; 5641 } 5642 5643 void VCLXMetricField::setProperty( const ::rtl::OUString& PropertyName, const ::com::sun::star::uno::Any& Value) throw(::com::sun::star::uno::RuntimeException) 5644 { 5645 ::vos::OGuard aGuard( GetMutex() ); 5646 5647 if ( GetWindow() ) 5648 { 5649 sal_uInt16 nPropType = GetPropertyId( PropertyName ); 5650 switch ( nPropType ) 5651 { 5652 case BASEPROPERTY_DECIMALACCURACY: 5653 { 5654 sal_Int16 n = 0; 5655 if ( Value >>= n ) 5656 setDecimalDigits( n ); 5657 break; 5658 } 5659 case BASEPROPERTY_NUMSHOWTHOUSANDSEP: 5660 { 5661 sal_Bool b = sal_False; 5662 if ( Value >>= b ) 5663 ((NumericField*)GetWindow())->SetUseThousandSep( b ); 5664 } 5665 break; 5666 case BASEPROPERTY_UNIT: 5667 { 5668 sal_uInt16 nVal = 0; 5669 if ( Value >>= nVal ) 5670 ((MetricField*)GetWindow())->SetUnit( (FieldUnit) nVal ); 5671 break; 5672 } 5673 case BASEPROPERTY_CUSTOMUNITTEXT: 5674 { 5675 rtl::OUString aStr; 5676 if ( Value >>= aStr ) 5677 ((MetricField*)GetWindow())->SetCustomUnitText( aStr ); 5678 break; 5679 } 5680 default: 5681 { 5682 VCLXFormattedSpinField::setProperty( PropertyName, Value ); 5683 break; 5684 } 5685 } 5686 } 5687 } 5688 5689 ::com::sun::star::uno::Any VCLXMetricField::getProperty( const ::rtl::OUString& PropertyName ) throw(::com::sun::star::uno::RuntimeException) 5690 { 5691 ::vos::OGuard aGuard( GetMutex() ); 5692 5693 ::com::sun::star::uno::Any aProp; 5694 FormatterBase* pFormatter = GetFormatter(); 5695 if ( pFormatter ) 5696 { 5697 sal_uInt16 nPropType = GetPropertyId( PropertyName ); 5698 switch ( nPropType ) 5699 { 5700 case BASEPROPERTY_NUMSHOWTHOUSANDSEP: 5701 aProp <<= (sal_Bool) ((NumericField*)GetWindow())->IsUseThousandSep(); 5702 break; 5703 case BASEPROPERTY_UNIT: 5704 aProp <<= (sal_uInt16) ((MetricField*)GetWindow())->GetUnit(); 5705 break; 5706 case BASEPROPERTY_CUSTOMUNITTEXT: 5707 aProp <<= rtl::OUString (((MetricField*)GetWindow())->GetCustomUnitText()); 5708 break; 5709 default: 5710 { 5711 aProp <<= VCLXFormattedSpinField::getProperty( PropertyName ); 5712 break; 5713 } 5714 } 5715 } 5716 return aProp; 5717 } 5718 5719 5720 // ---------------------------------------------------- 5721 // class VCLXCurrencyField 5722 // ---------------------------------------------------- 5723 5724 void VCLXCurrencyField::ImplGetPropertyIds( std::list< sal_uInt16 > &rIds ) 5725 { 5726 PushPropertyIds( rIds, 5727 BASEPROPERTY_ALIGN, 5728 BASEPROPERTY_BACKGROUNDCOLOR, 5729 BASEPROPERTY_BORDER, 5730 BASEPROPERTY_BORDERCOLOR, 5731 BASEPROPERTY_CURRENCYSYMBOL, 5732 BASEPROPERTY_CURSYM_POSITION, 5733 BASEPROPERTY_DECIMALACCURACY, 5734 BASEPROPERTY_DEFAULTCONTROL, 5735 BASEPROPERTY_ENABLED, 5736 BASEPROPERTY_ENABLEVISIBLE, 5737 BASEPROPERTY_FONTDESCRIPTOR, 5738 BASEPROPERTY_HELPTEXT, 5739 BASEPROPERTY_HELPURL, 5740 BASEPROPERTY_NUMSHOWTHOUSANDSEP, 5741 BASEPROPERTY_PRINTABLE, 5742 BASEPROPERTY_READONLY, 5743 BASEPROPERTY_REPEAT, 5744 BASEPROPERTY_REPEAT_DELAY, 5745 BASEPROPERTY_SPIN, 5746 BASEPROPERTY_STRICTFORMAT, 5747 BASEPROPERTY_TABSTOP, 5748 BASEPROPERTY_VALUEMAX_DOUBLE, 5749 BASEPROPERTY_VALUEMIN_DOUBLE, 5750 BASEPROPERTY_VALUESTEP_DOUBLE, 5751 BASEPROPERTY_VALUE_DOUBLE, 5752 BASEPROPERTY_ENFORCE_FORMAT, 5753 BASEPROPERTY_HIDEINACTIVESELECTION, 5754 BASEPROPERTY_VERTICALALIGN, 5755 BASEPROPERTY_WRITING_MODE, 5756 BASEPROPERTY_CONTEXT_WRITING_MODE, 5757 BASEPROPERTY_MOUSE_WHEEL_BEHAVIOUR, 5758 0); 5759 VCLXFormattedSpinField::ImplGetPropertyIds( rIds ); 5760 } 5761 5762 VCLXCurrencyField::VCLXCurrencyField() 5763 { 5764 } 5765 5766 VCLXCurrencyField::~VCLXCurrencyField() 5767 { 5768 } 5769 5770 // ::com::sun::star::uno::XInterface 5771 ::com::sun::star::uno::Any VCLXCurrencyField::queryInterface( const ::com::sun::star::uno::Type & rType ) throw(::com::sun::star::uno::RuntimeException) 5772 { 5773 ::com::sun::star::uno::Any aRet = ::cppu::queryInterface( rType, 5774 SAL_STATIC_CAST( ::com::sun::star::awt::XCurrencyField*, this ) ); 5775 return (aRet.hasValue() ? aRet : VCLXFormattedSpinField::queryInterface( rType )); 5776 } 5777 5778 // ::com::sun::star::lang::XTypeProvider 5779 IMPL_XTYPEPROVIDER_START( VCLXCurrencyField ) 5780 getCppuType( ( ::com::sun::star::uno::Reference< ::com::sun::star::awt::XCurrencyField>* ) NULL ), 5781 VCLXFormattedSpinField::getTypes() 5782 IMPL_XTYPEPROVIDER_END 5783 5784 void VCLXCurrencyField::setValue( double Value ) throw(::com::sun::star::uno::RuntimeException) 5785 { 5786 ::vos::OGuard aGuard( GetMutex() ); 5787 5788 LongCurrencyFormatter* pCurrencyFormatter = (LongCurrencyFormatter*) GetFormatter(); 5789 if ( pCurrencyFormatter ) 5790 { 5791 // z.B. 105, 2 Digits => 1,05 5792 // ein float 1,05 muss also eine 105 einstellen... 5793 pCurrencyFormatter->SetValue( 5794 ImplCalcLongValue( Value, pCurrencyFormatter->GetDecimalDigits() ) ); 5795 5796 // #107218# Call same listeners like VCL would do after user interaction 5797 Edit* pEdit = (Edit*)GetWindow(); 5798 if ( pEdit ) 5799 { 5800 SetSynthesizingVCLEvent( sal_True ); 5801 pEdit->SetModifyFlag(); 5802 pEdit->Modify(); 5803 SetSynthesizingVCLEvent( sal_False ); 5804 } 5805 } 5806 } 5807 5808 double VCLXCurrencyField::getValue() throw(::com::sun::star::uno::RuntimeException) 5809 { 5810 ::vos::OGuard aGuard( GetMutex() ); 5811 5812 LongCurrencyFormatter* pCurrencyFormatter = (LongCurrencyFormatter*) GetFormatter(); 5813 return pCurrencyFormatter 5814 ? ImplCalcDoubleValue( (double)pCurrencyFormatter->GetValue(), pCurrencyFormatter->GetDecimalDigits() ) 5815 : 0; 5816 } 5817 5818 void VCLXCurrencyField::setMin( double Value ) throw(::com::sun::star::uno::RuntimeException) 5819 { 5820 ::vos::OGuard aGuard( GetMutex() ); 5821 5822 LongCurrencyFormatter* pCurrencyFormatter = (LongCurrencyFormatter*) GetFormatter(); 5823 if ( pCurrencyFormatter ) 5824 pCurrencyFormatter->SetMin( 5825 ImplCalcLongValue( Value, pCurrencyFormatter->GetDecimalDigits() ) ); 5826 } 5827 5828 double VCLXCurrencyField::getMin() throw(::com::sun::star::uno::RuntimeException) 5829 { 5830 ::vos::OGuard aGuard( GetMutex() ); 5831 5832 LongCurrencyFormatter* pCurrencyFormatter = (LongCurrencyFormatter*) GetFormatter(); 5833 return pCurrencyFormatter 5834 ? ImplCalcDoubleValue( (double)pCurrencyFormatter->GetMin(), pCurrencyFormatter->GetDecimalDigits() ) 5835 : 0; 5836 } 5837 5838 void VCLXCurrencyField::setMax( double Value ) throw(::com::sun::star::uno::RuntimeException) 5839 { 5840 ::vos::OGuard aGuard( GetMutex() ); 5841 5842 LongCurrencyFormatter* pCurrencyFormatter = (LongCurrencyFormatter*) GetFormatter(); 5843 if ( pCurrencyFormatter ) 5844 pCurrencyFormatter->SetMax( 5845 ImplCalcLongValue( Value, pCurrencyFormatter->GetDecimalDigits() ) ); 5846 } 5847 5848 double VCLXCurrencyField::getMax() throw(::com::sun::star::uno::RuntimeException) 5849 { 5850 ::vos::OGuard aGuard( GetMutex() ); 5851 5852 LongCurrencyFormatter* pCurrencyFormatter = (LongCurrencyFormatter*) GetFormatter(); 5853 return pCurrencyFormatter 5854 ? ImplCalcDoubleValue( (double)pCurrencyFormatter->GetMax(), pCurrencyFormatter->GetDecimalDigits() ) 5855 : 0; 5856 } 5857 5858 void VCLXCurrencyField::setFirst( double Value ) throw(::com::sun::star::uno::RuntimeException) 5859 { 5860 ::vos::OGuard aGuard( GetMutex() ); 5861 5862 LongCurrencyField* pCurrencyField = (LongCurrencyField*) GetWindow(); 5863 if ( pCurrencyField ) 5864 pCurrencyField->SetFirst( 5865 ImplCalcLongValue( Value, pCurrencyField->GetDecimalDigits() ) ); 5866 } 5867 5868 double VCLXCurrencyField::getFirst() throw(::com::sun::star::uno::RuntimeException) 5869 { 5870 ::vos::OGuard aGuard( GetMutex() ); 5871 5872 LongCurrencyField* pCurrencyField = (LongCurrencyField*) GetWindow(); 5873 return pCurrencyField 5874 ? ImplCalcDoubleValue( (double)pCurrencyField->GetFirst(), pCurrencyField->GetDecimalDigits() ) 5875 : 0; 5876 } 5877 5878 void VCLXCurrencyField::setLast( double Value ) throw(::com::sun::star::uno::RuntimeException) 5879 { 5880 ::vos::OGuard aGuard( GetMutex() ); 5881 5882 LongCurrencyField* pCurrencyField = (LongCurrencyField*) GetWindow(); 5883 if ( pCurrencyField ) 5884 pCurrencyField->SetLast( 5885 ImplCalcLongValue( Value, pCurrencyField->GetDecimalDigits() ) ); 5886 } 5887 5888 double VCLXCurrencyField::getLast() throw(::com::sun::star::uno::RuntimeException) 5889 { 5890 ::vos::OGuard aGuard( GetMutex() ); 5891 5892 LongCurrencyField* pCurrencyField = (LongCurrencyField*) GetWindow(); 5893 return pCurrencyField 5894 ? ImplCalcDoubleValue( (double)pCurrencyField->GetLast(), pCurrencyField->GetDecimalDigits() ) 5895 : 0; 5896 } 5897 5898 void VCLXCurrencyField::setSpinSize( double Value ) throw(::com::sun::star::uno::RuntimeException) 5899 { 5900 ::vos::OGuard aGuard( GetMutex() ); 5901 5902 LongCurrencyField* pCurrencyField = (LongCurrencyField*) GetWindow(); 5903 if ( pCurrencyField ) 5904 pCurrencyField->SetSpinSize( 5905 ImplCalcLongValue( Value, pCurrencyField->GetDecimalDigits() ) ); 5906 } 5907 5908 double VCLXCurrencyField::getSpinSize() throw(::com::sun::star::uno::RuntimeException) 5909 { 5910 ::vos::OGuard aGuard( GetMutex() ); 5911 5912 LongCurrencyField* pCurrencyField = (LongCurrencyField*) GetWindow(); 5913 return pCurrencyField 5914 ? ImplCalcDoubleValue( (double)pCurrencyField->GetSpinSize(), pCurrencyField->GetDecimalDigits() ) 5915 : 0; 5916 } 5917 5918 void VCLXCurrencyField::setStrictFormat( sal_Bool bStrict ) throw(::com::sun::star::uno::RuntimeException) 5919 { 5920 VCLXFormattedSpinField::setStrictFormat( bStrict ); 5921 } 5922 5923 sal_Bool VCLXCurrencyField::isStrictFormat() throw(::com::sun::star::uno::RuntimeException) 5924 { 5925 return VCLXFormattedSpinField::isStrictFormat(); 5926 } 5927 5928 5929 void VCLXCurrencyField::setDecimalDigits( sal_Int16 Value ) throw(::com::sun::star::uno::RuntimeException) 5930 { 5931 ::vos::OGuard aGuard( GetMutex() ); 5932 5933 LongCurrencyFormatter* pCurrencyFormatter = (LongCurrencyFormatter*) GetFormatter(); 5934 if ( pCurrencyFormatter ) 5935 { 5936 double n = getValue(); 5937 pCurrencyFormatter->SetDecimalDigits( Value ); 5938 setValue( n ); 5939 } 5940 } 5941 5942 sal_Int16 VCLXCurrencyField::getDecimalDigits() throw(::com::sun::star::uno::RuntimeException) 5943 { 5944 ::vos::OGuard aGuard( GetMutex() ); 5945 5946 LongCurrencyFormatter* pCurrencyFormatter = (LongCurrencyFormatter*) GetFormatter(); 5947 return pCurrencyFormatter ? pCurrencyFormatter->GetDecimalDigits() : 0; 5948 } 5949 5950 void VCLXCurrencyField::setProperty( const ::rtl::OUString& PropertyName, const ::com::sun::star::uno::Any& Value) throw(::com::sun::star::uno::RuntimeException) 5951 { 5952 ::vos::OGuard aGuard( GetMutex() ); 5953 5954 if ( GetWindow() ) 5955 { 5956 sal_Bool bVoid = Value.getValueType().getTypeClass() == ::com::sun::star::uno::TypeClass_VOID; 5957 5958 sal_uInt16 nPropType = GetPropertyId( PropertyName ); 5959 switch ( nPropType ) 5960 { 5961 case BASEPROPERTY_VALUE_DOUBLE: 5962 { 5963 if ( bVoid ) 5964 { 5965 ((LongCurrencyField*)GetWindow())->EnableEmptyFieldValue( sal_True ); 5966 ((LongCurrencyField*)GetWindow())->SetEmptyFieldValue(); 5967 } 5968 else 5969 { 5970 double d = 0; 5971 if ( Value >>= d ) 5972 setValue( d ); 5973 } 5974 } 5975 break; 5976 case BASEPROPERTY_VALUEMIN_DOUBLE: 5977 { 5978 double d = 0; 5979 if ( Value >>= d ) 5980 setMin( d ); 5981 } 5982 break; 5983 case BASEPROPERTY_VALUEMAX_DOUBLE: 5984 { 5985 double d = 0; 5986 if ( Value >>= d ) 5987 setMax( d ); 5988 } 5989 break; 5990 case BASEPROPERTY_VALUESTEP_DOUBLE: 5991 { 5992 double d = 0; 5993 if ( Value >>= d ) 5994 setSpinSize( d ); 5995 } 5996 break; 5997 case BASEPROPERTY_DECIMALACCURACY: 5998 { 5999 sal_Int16 n = sal_Int16(); 6000 if ( Value >>= n ) 6001 setDecimalDigits( n ); 6002 } 6003 break; 6004 case BASEPROPERTY_CURRENCYSYMBOL: 6005 { 6006 ::rtl::OUString aString; 6007 if ( Value >>= aString ) 6008 ((LongCurrencyField*)GetWindow())->SetCurrencySymbol( aString ); 6009 } 6010 break; 6011 case BASEPROPERTY_NUMSHOWTHOUSANDSEP: 6012 { 6013 sal_Bool b = sal_Bool(); 6014 if ( Value >>= b ) 6015 ((LongCurrencyField*)GetWindow())->SetUseThousandSep( b ); 6016 } 6017 break; 6018 default: 6019 { 6020 VCLXFormattedSpinField::setProperty( PropertyName, Value ); 6021 } 6022 } 6023 } 6024 } 6025 6026 ::com::sun::star::uno::Any VCLXCurrencyField::getProperty( const ::rtl::OUString& PropertyName ) throw(::com::sun::star::uno::RuntimeException) 6027 { 6028 ::vos::OGuard aGuard( GetMutex() ); 6029 6030 ::com::sun::star::uno::Any aProp; 6031 FormatterBase* pFormatter = GetFormatter(); 6032 if ( pFormatter ) 6033 { 6034 sal_uInt16 nPropType = GetPropertyId( PropertyName ); 6035 switch ( nPropType ) 6036 { 6037 case BASEPROPERTY_VALUE_DOUBLE: 6038 { 6039 aProp <<= (double) getValue(); 6040 } 6041 break; 6042 case BASEPROPERTY_VALUEMIN_DOUBLE: 6043 { 6044 aProp <<= (double) getMin(); 6045 } 6046 break; 6047 case BASEPROPERTY_VALUEMAX_DOUBLE: 6048 { 6049 aProp <<= (double) getMax(); 6050 } 6051 break; 6052 case BASEPROPERTY_VALUESTEP_DOUBLE: 6053 { 6054 aProp <<= (double) getSpinSize(); 6055 } 6056 break; 6057 case BASEPROPERTY_CURRENCYSYMBOL: 6058 { 6059 aProp <<= ::rtl::OUString( ((LongCurrencyField*)GetWindow())->GetCurrencySymbol() ); 6060 } 6061 break; 6062 case BASEPROPERTY_NUMSHOWTHOUSANDSEP: 6063 { 6064 aProp <<= (sal_Bool) ((LongCurrencyField*)GetWindow())->IsUseThousandSep(); 6065 } 6066 break; 6067 default: 6068 { 6069 aProp <<= VCLXFormattedSpinField::getProperty( PropertyName ); 6070 } 6071 } 6072 } 6073 return aProp; 6074 } 6075 6076 // ---------------------------------------------------- 6077 // class VCLXPatternField 6078 // ---------------------------------------------------- 6079 6080 void VCLXPatternField::ImplGetPropertyIds( std::list< sal_uInt16 > &rIds ) 6081 { 6082 PushPropertyIds( rIds, 6083 BASEPROPERTY_ALIGN, 6084 BASEPROPERTY_BACKGROUNDCOLOR, 6085 BASEPROPERTY_BORDER, 6086 BASEPROPERTY_BORDERCOLOR, 6087 BASEPROPERTY_DEFAULTCONTROL, 6088 BASEPROPERTY_EDITMASK, 6089 BASEPROPERTY_ENABLED, 6090 BASEPROPERTY_ENABLEVISIBLE, 6091 BASEPROPERTY_FONTDESCRIPTOR, 6092 BASEPROPERTY_HELPTEXT, 6093 BASEPROPERTY_HELPURL, 6094 BASEPROPERTY_LITERALMASK, 6095 BASEPROPERTY_MAXTEXTLEN, 6096 BASEPROPERTY_PRINTABLE, 6097 BASEPROPERTY_READONLY, 6098 BASEPROPERTY_STRICTFORMAT, 6099 BASEPROPERTY_TABSTOP, 6100 BASEPROPERTY_TEXT, 6101 BASEPROPERTY_HIDEINACTIVESELECTION, 6102 BASEPROPERTY_VERTICALALIGN, 6103 BASEPROPERTY_WRITING_MODE, 6104 BASEPROPERTY_CONTEXT_WRITING_MODE, 6105 BASEPROPERTY_MOUSE_WHEEL_BEHAVIOUR, 6106 0); 6107 VCLXFormattedSpinField::ImplGetPropertyIds( rIds ); 6108 } 6109 6110 VCLXPatternField::VCLXPatternField() 6111 { 6112 } 6113 6114 VCLXPatternField::~VCLXPatternField() 6115 { 6116 } 6117 6118 // ::com::sun::star::uno::XInterface 6119 ::com::sun::star::uno::Any VCLXPatternField::queryInterface( const ::com::sun::star::uno::Type & rType ) throw(::com::sun::star::uno::RuntimeException) 6120 { 6121 ::com::sun::star::uno::Any aRet = ::cppu::queryInterface( rType, 6122 SAL_STATIC_CAST( ::com::sun::star::awt::XPatternField*, this ) ); 6123 return (aRet.hasValue() ? aRet : VCLXFormattedSpinField::queryInterface( rType )); 6124 } 6125 6126 // ::com::sun::star::lang::XTypeProvider 6127 IMPL_XTYPEPROVIDER_START( VCLXPatternField ) 6128 getCppuType( ( ::com::sun::star::uno::Reference< ::com::sun::star::awt::XPatternField>* ) NULL ), 6129 VCLXFormattedSpinField::getTypes() 6130 IMPL_XTYPEPROVIDER_END 6131 6132 void VCLXPatternField::setMasks( const ::rtl::OUString& EditMask, const ::rtl::OUString& LiteralMask ) throw(::com::sun::star::uno::RuntimeException) 6133 { 6134 ::vos::OGuard aGuard( GetMutex() ); 6135 6136 PatternField* pPatternField = (PatternField*) GetWindow(); 6137 if ( pPatternField ) 6138 { 6139 pPatternField->SetMask( ByteString( UniString( EditMask ), RTL_TEXTENCODING_ASCII_US ), LiteralMask ); 6140 } 6141 } 6142 6143 void VCLXPatternField::getMasks( ::rtl::OUString& EditMask, ::rtl::OUString& LiteralMask ) throw(::com::sun::star::uno::RuntimeException) 6144 { 6145 ::vos::OGuard aGuard( GetMutex() ); 6146 6147 PatternField* pPatternField = (PatternField*) GetWindow(); 6148 if ( pPatternField ) 6149 { 6150 EditMask = String( pPatternField->GetEditMask(), RTL_TEXTENCODING_ASCII_US ); 6151 LiteralMask = pPatternField->GetLiteralMask(); 6152 } 6153 } 6154 6155 void VCLXPatternField::setString( const ::rtl::OUString& Str ) throw(::com::sun::star::uno::RuntimeException) 6156 { 6157 ::vos::OGuard aGuard( GetMutex() ); 6158 6159 PatternField* pPatternField = (PatternField*) GetWindow(); 6160 if ( pPatternField ) 6161 { 6162 pPatternField->SetString( Str ); 6163 } 6164 } 6165 6166 ::rtl::OUString VCLXPatternField::getString() throw(::com::sun::star::uno::RuntimeException) 6167 { 6168 ::vos::OGuard aGuard( GetMutex() ); 6169 6170 ::rtl::OUString aString; 6171 PatternField* pPatternField = (PatternField*) GetWindow(); 6172 if ( pPatternField ) 6173 aString = pPatternField->GetString(); 6174 return aString; 6175 } 6176 6177 void VCLXPatternField::setStrictFormat( sal_Bool bStrict ) throw(::com::sun::star::uno::RuntimeException) 6178 { 6179 VCLXFormattedSpinField::setStrictFormat( bStrict ); 6180 } 6181 6182 sal_Bool VCLXPatternField::isStrictFormat() throw(::com::sun::star::uno::RuntimeException) 6183 { 6184 return VCLXFormattedSpinField::isStrictFormat(); 6185 } 6186 6187 void VCLXPatternField::setProperty( const ::rtl::OUString& PropertyName, const ::com::sun::star::uno::Any& Value) throw(::com::sun::star::uno::RuntimeException) 6188 { 6189 ::vos::OGuard aGuard( GetMutex() ); 6190 6191 if ( GetWindow() ) 6192 { 6193 sal_uInt16 nPropType = GetPropertyId( PropertyName ); 6194 switch ( nPropType ) 6195 { 6196 case BASEPROPERTY_EDITMASK: 6197 case BASEPROPERTY_LITERALMASK: 6198 { 6199 ::rtl::OUString aString; 6200 if ( Value >>= aString ) 6201 { 6202 ::rtl::OUString aEditMask, aLiteralMask; 6203 getMasks( aEditMask, aLiteralMask ); 6204 if ( nPropType == BASEPROPERTY_EDITMASK ) 6205 aEditMask = aString; 6206 else 6207 aLiteralMask = aString; 6208 setMasks( aEditMask, aLiteralMask ); 6209 } 6210 } 6211 break; 6212 default: 6213 { 6214 VCLXFormattedSpinField::setProperty( PropertyName, Value ); 6215 } 6216 } 6217 } 6218 } 6219 6220 ::com::sun::star::uno::Any VCLXPatternField::getProperty( const ::rtl::OUString& PropertyName ) throw(::com::sun::star::uno::RuntimeException) 6221 { 6222 ::vos::OGuard aGuard( GetMutex() ); 6223 6224 ::com::sun::star::uno::Any aProp; 6225 if ( GetWindow() ) 6226 { 6227 sal_uInt16 nPropType = GetPropertyId( PropertyName ); 6228 switch ( nPropType ) 6229 { 6230 case BASEPROPERTY_EDITMASK: 6231 case BASEPROPERTY_LITERALMASK: 6232 { 6233 ::rtl::OUString aEditMask, aLiteralMask; 6234 getMasks( aEditMask, aLiteralMask ); 6235 if ( nPropType == BASEPROPERTY_EDITMASK ) 6236 aProp <<= aEditMask; 6237 else 6238 aProp <<= aLiteralMask; 6239 } 6240 break; 6241 default: 6242 { 6243 aProp <<= VCLXFormattedSpinField::getProperty( PropertyName ); 6244 } 6245 } 6246 } 6247 return aProp; 6248 } 6249 6250 // ---------------------------------------------------- 6251 // class VCLXToolBox 6252 // ---------------------------------------------------- 6253 VCLXToolBox::VCLXToolBox() 6254 { 6255 } 6256 6257 VCLXToolBox::~VCLXToolBox() 6258 { 6259 } 6260 6261 ::com::sun::star::uno::Reference< ::com::sun::star::accessibility::XAccessibleContext > VCLXToolBox::CreateAccessibleContext() 6262 { 6263 return getAccessibleFactory().createAccessibleContext( this ); 6264 } 6265 6266