LCOV - code coverage report
Current view: top level - libreoffice/toolkit/source/awt - vclxwindows.cxx (source / functions) Hit Total Coverage
Test: libreoffice_filtered.info Lines: 20 3276 0.6 %
Date: 2012-12-27 Functions: 9 497 1.8 %
Legend: Lines: hit not hit

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

Generated by: LCOV version 1.10