LCOV - code coverage report
Current view: top level - toolkit/source/controls - unocontrols.cxx (source / functions) Hit Total Coverage
Test: commit 10e77ab3ff6f4314137acd6e2702a6e5c1ce1fae Lines: 1659 2326 71.3 %
Date: 2014-11-03 Functions: 374 513 72.9 %
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 <com/sun/star/awt/XTextArea.hpp>
      21             : #include <com/sun/star/awt/XVclWindowPeer.hpp>
      22             : #include <com/sun/star/lang/XMultiServiceFactory.hpp>
      23             : #include <com/sun/star/uno/XComponentContext.hpp>
      24             : #include <com/sun/star/awt/PosSize.hpp>
      25             : #include <com/sun/star/awt/VisualEffect.hpp>
      26             : #include <com/sun/star/awt/LineEndFormat.hpp>
      27             : #include <com/sun/star/graphic/GraphicProvider.hpp>
      28             : #include <com/sun/star/graphic/XGraphicProvider.hpp>
      29             : #include <com/sun/star/graphic/GraphicObject.hpp>
      30             : #include <com/sun/star/util/Date.hpp>
      31             : #include <com/sun/star/awt/ImageScaleMode.hpp>
      32             : 
      33             : 
      34             : #include <toolkit/controls/formattedcontrol.hxx>
      35             : #include <toolkit/controls/roadmapcontrol.hxx>
      36             : #include <toolkit/controls/unocontrols.hxx>
      37             : #include <toolkit/controls/stdtabcontroller.hxx>
      38             : #include <toolkit/helper/property.hxx>
      39             : #include <toolkit/helper/servicenames.hxx>
      40             : #include <toolkit/helper/macros.hxx>
      41             : 
      42             : // for introspection
      43             : #include <toolkit/awt/vclxwindows.hxx>
      44             : #include <cppuhelper/typeprovider.hxx>
      45             : #include <comphelper/processfactory.hxx>
      46             : #include <vcl/wrkwin.hxx>
      47             : #include <vcl/svapp.hxx>
      48             : #include <vcl/edit.hxx>
      49             : #include <vcl/button.hxx>
      50             : #include <vcl/group.hxx>
      51             : #include <vcl/fixed.hxx>
      52             : #include <vcl/lstbox.hxx>
      53             : #include <vcl/combobox.hxx>
      54             : #include <tools/debug.hxx>
      55             : #include <tools/diagnose_ex.h>
      56             : #include <tools/date.hxx>
      57             : #include <tools/time.hxx>
      58             : 
      59             : #include <algorithm>
      60             : #include <functional>
      61             : 
      62             : #include "helper/imagealign.hxx"
      63             : #include "helper/unopropertyarrayhelper.hxx"
      64             : 
      65             : using namespace css;
      66             : using namespace css::awt;
      67             : using namespace css::lang;
      68             : using namespace css::uno;
      69             : using ::com::sun::star::graphic::XGraphic;
      70             : using ::com::sun::star::uno::Reference;
      71             : using namespace ::toolkit;
      72             : 
      73             : #define IMPL_SERVICEINFO_DERIVED( ImplName, BaseClass, ServiceName ) \
      74             :     OUString SAL_CALL ImplName::getImplementationName(  ) throw(::com::sun::star::uno::RuntimeException, std::exception) { return OUString( "stardiv.Toolkit." #ImplName ); } \
      75             :     ::com::sun::star::uno::Sequence< OUString > SAL_CALL ImplName::getSupportedServiceNames() throw(::com::sun::star::uno::RuntimeException, std::exception) \
      76             :                             { \
      77             :                                 ::com::sun::star::uno::Sequence< OUString > aNames = BaseClass::getSupportedServiceNames( ); \
      78             :                                 aNames.realloc( aNames.getLength() + 1 ); \
      79             :                                 aNames[ aNames.getLength() - 1 ] = OUString::createFromAscii( ServiceName ); \
      80             :                                 return aNames; \
      81             :                             } \
      82             : 
      83             : 
      84             : uno::Reference< graphic::XGraphic >
      85           4 : ImageHelper::getGraphicAndGraphicObjectFromURL_nothrow( uno::Reference< graphic::XGraphicObject >& xOutGraphicObj, const OUString& _rURL )
      86             : {
      87           4 :     if ( _rURL.startsWith( UNO_NAME_GRAPHOBJ_URLPREFIX ) )
      88             :     {
      89             :         // graphic manager uniqueid
      90           0 :         OUString sID = _rURL.copy( sizeof( UNO_NAME_GRAPHOBJ_URLPREFIX ) - 1 );
      91           0 :         xOutGraphicObj = graphic::GraphicObject::createWithId( ::comphelper::getProcessComponentContext(), sID );
      92             :     }
      93             :     else // linked
      94           4 :         xOutGraphicObj = NULL; // release the GraphicObject
      95             : 
      96           4 :     return ImageHelper::getGraphicFromURL_nothrow( _rURL );
      97             : }
      98             : 
      99             : ::com::sun::star::uno::Reference< ::com::sun::star::graphic::XGraphic >
     100          57 : ImageHelper::getGraphicFromURL_nothrow( const OUString& _rURL )
     101             : {
     102          57 :     uno::Reference< graphic::XGraphic > xGraphic;
     103          57 :     if ( _rURL.isEmpty() )
     104           0 :         return xGraphic;
     105             : 
     106             :     try
     107             :     {
     108          57 :         uno::Reference< uno::XComponentContext > xContext( ::comphelper::getProcessComponentContext() );
     109         114 :         uno::Reference< graphic::XGraphicProvider > xProvider( graphic::GraphicProvider::create(xContext) );
     110         114 :         uno::Sequence< beans::PropertyValue > aMediaProperties(1);
     111          57 :         aMediaProperties[0].Name = "URL";
     112          57 :         aMediaProperties[0].Value <<= _rURL;
     113         114 :         xGraphic = xProvider->queryGraphic( aMediaProperties );
     114             :     }
     115           0 :     catch (const Exception&)
     116             :     {
     117             :         DBG_UNHANDLED_EXCEPTION();
     118             :     }
     119             : 
     120          57 :     return xGraphic;
     121             : }
     122             : 
     123             : //  class UnoControlEditModel
     124             : 
     125          28 : UnoControlEditModel::UnoControlEditModel( const Reference< XComponentContext >& rxContext )
     126          28 :     :UnoControlModel( rxContext )
     127             : {
     128          28 :     UNO_CONTROL_MODEL_REGISTER_PROPERTIES( VCLXEdit );
     129          28 : }
     130             : 
     131           2 : OUString UnoControlEditModel::getServiceName( ) throw(::com::sun::star::uno::RuntimeException, std::exception)
     132             : {
     133           2 :     return OUString::createFromAscii( szServiceName_UnoControlEditModel );
     134             : }
     135             : 
     136        1258 : uno::Any UnoControlEditModel::ImplGetDefaultValue( sal_uInt16 nPropId ) const
     137             : {
     138        1258 :     uno::Any aReturn;
     139             : 
     140        1258 :     switch ( nPropId )
     141             :     {
     142             :     case BASEPROPERTY_LINE_END_FORMAT:
     143          42 :         aReturn <<= (sal_Int16)awt::LineEndFormat::LINE_FEED;   // LF
     144          42 :         break;
     145             :     case BASEPROPERTY_DEFAULTCONTROL:
     146          34 :         aReturn <<= OUString::createFromAscii( szServiceName_UnoControlEdit );
     147          34 :         break;
     148             :     default:
     149        1182 :         aReturn = UnoControlModel::ImplGetDefaultValue( nPropId );
     150        1182 :         break;
     151             :     }
     152        1258 :     return aReturn;
     153             : }
     154             : 
     155        4202 : ::cppu::IPropertyArrayHelper& UnoControlEditModel::getInfoHelper()
     156             : {
     157             :     static UnoPropertyArrayHelper* pHelper = NULL;
     158        4202 :     if ( !pHelper )
     159             :     {
     160          12 :         uno::Sequence<sal_Int32>    aIDs = ImplGetPropertyIds();
     161          12 :         pHelper = new UnoPropertyArrayHelper( aIDs );
     162             :     }
     163        4202 :     return *pHelper;
     164             : }
     165             : 
     166             : // beans::XMultiPropertySet
     167         130 : uno::Reference< beans::XPropertySetInfo > UnoControlEditModel::getPropertySetInfo(  ) throw(uno::RuntimeException, std::exception)
     168             : {
     169         130 :     static uno::Reference< beans::XPropertySetInfo > xInfo( createPropertySetInfo( getInfoHelper() ) );
     170         130 :     return xInfo;
     171             : }
     172             : 
     173             : extern "C" SAL_DLLPUBLIC_EXPORT css::uno::XInterface * SAL_CALL
     174          14 : stardiv_Toolkit_UnoControlEditModel_get_implementation(
     175             :     css::uno::XComponentContext *context,
     176             :     css::uno::Sequence<css::uno::Any> const &)
     177             : {
     178          14 :     return cppu::acquire(new UnoControlEditModel(context));
     179             : }
     180             : 
     181             : 
     182             : //  class UnoEditControl
     183             : 
     184         232 : UnoEditControl::UnoEditControl()
     185             :     :UnoControlBase()
     186             :     ,maTextListeners( *this )
     187             :     ,mnMaxTextLen( 0 )
     188             :     ,mbSetTextInPeer( false )
     189             :     ,mbSetMaxTextLenInPeer( false )
     190         232 :     ,mbHasTextProperty( false )
     191             : {
     192         232 :     maComponentInfos.nWidth = 100;
     193         232 :     maComponentInfos.nHeight = 12;
     194         232 :     mnMaxTextLen = 0;
     195         232 :     mbSetMaxTextLenInPeer = false;
     196         232 : }
     197             : 
     198        7776 : uno::Any SAL_CALL UnoEditControl::queryAggregation( const uno::Type & rType ) throw(uno::RuntimeException, std::exception)
     199             : {
     200        7776 :     uno::Any aReturn = UnoControlBase::queryAggregation( rType );
     201        7776 :     if ( !aReturn.hasValue() )
     202         790 :         aReturn = UnoEditControl_Base::queryInterface( rType );
     203        7776 :     return aReturn;
     204             : }
     205             : 
     206        9865 : uno::Any SAL_CALL UnoEditControl::queryInterface( const uno::Type & rType ) throw(uno::RuntimeException, std::exception)
     207             : {
     208        9865 :     return UnoControlBase::queryInterface( rType );
     209             : }
     210             : 
     211       12914 : void SAL_CALL UnoEditControl::acquire(  ) throw ()
     212             : {
     213       12914 :     UnoControlBase::acquire();
     214       12914 : }
     215             : 
     216       12846 : void SAL_CALL UnoEditControl::release(  ) throw ()
     217             : {
     218       12846 :     UnoControlBase::release();
     219       12846 : }
     220             : 
     221          42 : IMPLEMENT_FORWARD_XTYPEPROVIDER2( UnoEditControl, UnoControlBase, UnoEditControl_Base )
     222             : 
     223         130 : OUString UnoEditControl::GetComponentServiceName()
     224             : {
     225             :     // by default, we want a simple edit field
     226         130 :     OUString sName( "Edit" );
     227             : 
     228             :     // but maybe we are to display multi-line text?
     229         260 :     uno::Any aVal = ImplGetPropertyValue( GetPropertyName( BASEPROPERTY_MULTILINE ) );
     230         130 :     bool b = bool();
     231         130 :     if ( ( aVal >>= b ) && b )
     232          22 :         sName = "MultiLineEdit";
     233             : 
     234         260 :     return sName;
     235             : }
     236             : 
     237         458 : sal_Bool SAL_CALL UnoEditControl::setModel(const uno::Reference< awt::XControlModel >& _rModel) throw ( uno::RuntimeException, std::exception )
     238             : {
     239         458 :     bool bReturn = UnoControlBase::setModel( _rModel );
     240         458 :     mbHasTextProperty = ImplHasProperty( BASEPROPERTY_TEXT );
     241         458 :     return bReturn;
     242             : }
     243             : 
     244       41481 : void UnoEditControl::ImplSetPeerProperty( const OUString& rPropName, const uno::Any& rVal )
     245             : {
     246       41481 :     bool bDone = false;
     247       41481 :     if ( GetPropertyId( rPropName ) == BASEPROPERTY_TEXT )
     248             :     {
     249             :         // #96986# use setText(), or text listener will not be called.
     250         598 :         uno::Reference < awt::XTextComponent > xTextComponent( getPeer(), uno::UNO_QUERY );
     251         598 :         if ( xTextComponent.is() )
     252             :         {
     253         550 :             OUString sText;
     254         550 :             rVal >>= sText;
     255         550 :             ImplCheckLocalize( sText );
     256         550 :             xTextComponent->setText( sText );
     257         550 :             bDone = true;
     258         598 :         }
     259             :     }
     260             : 
     261       41481 :     if ( !bDone )
     262       40931 :         UnoControlBase::ImplSetPeerProperty( rPropName, rVal );
     263       41481 : }
     264             : 
     265         178 : void UnoEditControl::dispose() throw(uno::RuntimeException, std::exception)
     266             : {
     267         178 :     lang::EventObject aEvt( *this );
     268         178 :     maTextListeners.disposeAndClear( aEvt );
     269         178 :     UnoControl::dispose();
     270         178 : }
     271             : 
     272         386 : void UnoEditControl::createPeer( const uno::Reference< awt::XToolkit > & rxToolkit, const uno::Reference< awt::XWindowPeer >  & rParentPeer ) throw(uno::RuntimeException, std::exception)
     273             : {
     274         386 :     UnoControl::createPeer( rxToolkit, rParentPeer );
     275             : 
     276         386 :     uno::Reference< awt::XTextComponent > xText( getPeer(), uno::UNO_QUERY );
     277         386 :     if ( xText.is() )
     278             :     {
     279         386 :     xText->addTextListener( this );
     280             : 
     281         386 :     if ( mbSetMaxTextLenInPeer )
     282           0 :         xText->setMaxTextLen( mnMaxTextLen );
     283         386 :     if ( mbSetTextInPeer )
     284           0 :         xText->setText( maText );
     285         386 :     }
     286         386 : }
     287             : 
     288           0 : void UnoEditControl::textChanged(const awt::TextEvent& e) throw(uno::RuntimeException, std::exception)
     289             : {
     290           0 :     uno::Reference< awt::XTextComponent > xText( getPeer(), uno::UNO_QUERY );
     291             : 
     292           0 :     if ( mbHasTextProperty )
     293             :     {
     294           0 :         uno::Any aAny;
     295           0 :         aAny <<= xText->getText();
     296           0 :         ImplSetPropertyValue( GetPropertyName( BASEPROPERTY_TEXT ), aAny, false );
     297             :     }
     298             :     else
     299             :     {
     300           0 :         maText = xText->getText();
     301             :     }
     302             : 
     303           0 :     if ( maTextListeners.getLength() )
     304           0 :         maTextListeners.textChanged( e );
     305           0 : }
     306             : 
     307          64 : void UnoEditControl::addTextListener(const uno::Reference< awt::XTextListener > & l) throw(uno::RuntimeException, std::exception)
     308             : {
     309          64 :     maTextListeners.addInterface( l );
     310          64 : }
     311             : 
     312          30 : void UnoEditControl::removeTextListener(const uno::Reference< awt::XTextListener > & l) throw(uno::RuntimeException, std::exception)
     313             : {
     314          30 :     maTextListeners.removeInterface( l );
     315          30 : }
     316             : 
     317         274 : void UnoEditControl::setText( const OUString& aText ) throw(uno::RuntimeException, std::exception)
     318             : {
     319         274 :     if ( mbHasTextProperty )
     320             :     {
     321         202 :         uno::Any aAny;
     322         202 :         aAny <<= aText;
     323         202 :         ImplSetPropertyValue( GetPropertyName( BASEPROPERTY_TEXT ), aAny, true );
     324             :     }
     325             :     else
     326             :     {
     327          72 :         maText = aText;
     328          72 :         mbSetTextInPeer = true;
     329          72 :             uno::Reference < awt::XTextComponent > xText( getPeer(), uno::UNO_QUERY );
     330          72 :         if ( xText.is() )
     331          72 :             xText->setText( maText );
     332             :         }
     333             : 
     334             :     // Setting the property to the VCLXWindow doesn't call textChanged
     335         274 :     if ( maTextListeners.getLength() )
     336             :     {
     337         274 :         awt::TextEvent aEvent;
     338         274 :         aEvent.Source = *this;
     339         274 :         maTextListeners.textChanged( aEvent );
     340             :     }
     341         274 : }
     342             : 
     343             : namespace
     344             : {
     345          30 :     static void lcl_normalize( awt::Selection& _rSel )
     346             :     {
     347          30 :         if ( _rSel.Min > _rSel.Max )
     348           0 :             ::std::swap( _rSel.Min, _rSel.Max );
     349          30 :     }
     350             : }
     351             : 
     352          30 : void UnoEditControl::insertText( const awt::Selection& rSel, const OUString& rNewText ) throw(uno::RuntimeException, std::exception)
     353             : {
     354             :     // normalize the selection - OUString::replaceAt has a strange behaviour if the min is greater than the max
     355          30 :     awt::Selection aSelection( rSel );
     356          30 :     lcl_normalize( aSelection );
     357             : 
     358             :     // preserve the selection resp. cursor position
     359          30 :     awt::Selection aNewSelection( getSelection() );
     360             : #ifdef ALSO_PRESERVE_COMPLETE_SELECTION
     361             :         // (not sure - looks uglier ...)
     362             :     sal_Int32 nDeletedCharacters = ( aSelection.Max - aSelection.Min ) - rNewText.getLength();
     363             :     if ( aNewSelection.Min > aSelection.Min )
     364             :         aNewSelection.Min -= nDeletedCharacters;
     365             :     if ( aNewSelection.Max > aSelection.Max )
     366             :         aNewSelection.Max -= nDeletedCharacters;
     367             : #else
     368          30 :     aNewSelection.Max = ::std::min( aNewSelection.Min, aNewSelection.Max ) + rNewText.getLength();
     369          30 :     aNewSelection.Min = aNewSelection.Max;
     370             : #endif
     371             : 
     372          30 :     OUString aOldText = getText();
     373          60 :     OUString  aNewText = aOldText.replaceAt( aSelection.Min, aSelection.Max - aSelection.Min, rNewText );
     374          30 :     setText( aNewText );
     375             : 
     376          60 :     setSelection( aNewSelection );
     377          30 : }
     378             : 
     379         188 : OUString UnoEditControl::getText() throw(uno::RuntimeException, std::exception)
     380             : {
     381         188 :     OUString aText = maText;
     382             : 
     383         188 :     if ( mbHasTextProperty )
     384         140 :         aText = ImplGetPropertyValue_UString( BASEPROPERTY_TEXT );
     385             :     else
     386             :     {
     387          48 :         uno::Reference< awt::XTextComponent > xText( getPeer(), uno::UNO_QUERY );
     388          48 :         if ( xText.is() )
     389          48 :             aText = xText->getText();
     390             :     }
     391             : 
     392         188 :     return aText;
     393             : }
     394             : 
     395          30 : OUString UnoEditControl::getSelectedText( void ) throw(uno::RuntimeException, std::exception)
     396             : {
     397          30 :     OUString sSelected;
     398          60 :         uno::Reference< awt::XTextComponent > xText( getPeer(), uno::UNO_QUERY );
     399          30 :     if ( xText.is() )
     400          30 :         sSelected = xText->getSelectedText();
     401             : 
     402          60 :     return sSelected;
     403             : }
     404             : 
     405         120 : void UnoEditControl::setSelection( const awt::Selection& aSelection ) throw(uno::RuntimeException, std::exception)
     406             : {
     407         120 :         uno::Reference< awt::XTextComponent > xText( getPeer(), uno::UNO_QUERY );
     408         120 :     if ( xText.is() )
     409         120 :         xText->setSelection( aSelection );
     410         120 : }
     411             : 
     412          90 : awt::Selection UnoEditControl::getSelection( void ) throw(uno::RuntimeException, std::exception)
     413             : {
     414          90 :     awt::Selection aSel;
     415          90 :         uno::Reference< awt::XTextComponent > xText( getPeer(), uno::UNO_QUERY );
     416          90 :     if ( xText.is() )
     417          90 :         aSel = xText->getSelection();
     418          90 :     return aSel;
     419             : }
     420             : 
     421          60 : sal_Bool UnoEditControl::isEditable( void ) throw(uno::RuntimeException, std::exception)
     422             : {
     423          60 :     return !ImplGetPropertyValue_BOOL( BASEPROPERTY_READONLY );
     424             : }
     425             : 
     426          60 : void UnoEditControl::setEditable( sal_Bool bEditable ) throw(uno::RuntimeException, std::exception)
     427             : {
     428          60 :     uno::Any aAny;
     429          60 :     aAny <<= !bEditable;
     430          60 :     ImplSetPropertyValue( GetPropertyName( BASEPROPERTY_READONLY ), aAny, true );
     431          60 : }
     432             : 
     433          90 : sal_Int16 UnoEditControl::getMaxTextLen() throw(uno::RuntimeException, std::exception)
     434             : {
     435          90 :     sal_Int16 nMaxLen = mnMaxTextLen;
     436             : 
     437          90 :     if ( ImplHasProperty( BASEPROPERTY_MAXTEXTLEN ) )
     438          42 :         nMaxLen = ImplGetPropertyValue_INT16( BASEPROPERTY_MAXTEXTLEN );
     439             : 
     440          90 :     return nMaxLen;
     441             : }
     442             : 
     443          60 : void UnoEditControl::setMaxTextLen( sal_Int16 nLen ) throw(uno::RuntimeException, std::exception)
     444             : {
     445          60 :     if ( ImplHasProperty( BASEPROPERTY_MAXTEXTLEN) )
     446             :     {
     447          28 :         uno::Any aAny;
     448          28 :         aAny <<= (sal_Int16)nLen;
     449          28 :         ImplSetPropertyValue( GetPropertyName( BASEPROPERTY_MAXTEXTLEN ), aAny, true );
     450             :     }
     451             :     else
     452             :     {
     453          32 :         mnMaxTextLen = nLen;
     454          32 :         mbSetMaxTextLenInPeer = true;
     455          32 :             uno::Reference < awt::XTextComponent > xText( getPeer(), uno::UNO_QUERY );
     456          32 :         if ( xText.is() )
     457          32 :             xText->setMaxTextLen( mnMaxTextLen );
     458             :     }
     459          60 : }
     460             : 
     461          30 : awt::Size UnoEditControl::getMinimumSize(  ) throw(uno::RuntimeException, std::exception)
     462             : {
     463          30 :     return Impl_getMinimumSize();
     464             : }
     465             : 
     466          32 : awt::Size UnoEditControl::getPreferredSize(  ) throw(uno::RuntimeException, std::exception)
     467             : {
     468          32 :     return Impl_getPreferredSize();
     469             : }
     470             : 
     471          30 : awt::Size UnoEditControl::calcAdjustedSize( const awt::Size& rNewSize ) throw(uno::RuntimeException, std::exception)
     472             : {
     473          30 :     return Impl_calcAdjustedSize( rNewSize );
     474             : }
     475             : 
     476          32 : awt::Size UnoEditControl::getMinimumSize( sal_Int16 nCols, sal_Int16 nLines ) throw(uno::RuntimeException, std::exception)
     477             : {
     478          32 :     return Impl_getMinimumSize( nCols, nLines );
     479             : }
     480             : 
     481          30 : void UnoEditControl::getColumnsAndLines( sal_Int16& nCols, sal_Int16& nLines ) throw(uno::RuntimeException, std::exception)
     482             : {
     483          30 :     Impl_getColumnsAndLines( nCols, nLines );
     484          30 : }
     485             : 
     486           2 : OUString UnoEditControl::getImplementationName(  ) throw(uno::RuntimeException, std::exception)
     487             : {
     488           2 :     return OUString( "stardiv.Toolkit.UnoEditControl" );
     489             : }
     490             : 
     491           0 : uno::Sequence< OUString > UnoEditControl::getSupportedServiceNames() throw(uno::RuntimeException, std::exception)
     492             : {
     493           0 :     uno::Sequence< OUString > aNames = UnoControlBase::getSupportedServiceNames( );
     494           0 :     aNames.realloc( aNames.getLength() + 1 );
     495           0 :     aNames[ aNames.getLength() - 1 ] = OUString::createFromAscii( szServiceName2_UnoControlEdit );
     496           0 :     return aNames;
     497             : }
     498             : 
     499             : extern "C" SAL_DLLPUBLIC_EXPORT css::uno::XInterface * SAL_CALL
     500           4 : stardiv_Toolkit_UnoEditControl_get_implementation(
     501             :     css::uno::XComponentContext *,
     502             :     css::uno::Sequence<css::uno::Any> const &)
     503             : {
     504           4 :     return cppu::acquire(new UnoEditControl());
     505             : }
     506             : 
     507             : 
     508             : //  class UnoControlFileControlModel
     509             : 
     510          14 : UnoControlFileControlModel::UnoControlFileControlModel( const Reference< XComponentContext >& rxContext )
     511          14 :     :UnoControlModel( rxContext )
     512             : {
     513          14 :     ImplRegisterProperty( BASEPROPERTY_ALIGN );
     514          14 :     ImplRegisterProperty( BASEPROPERTY_BACKGROUNDCOLOR );
     515          14 :     ImplRegisterProperty( BASEPROPERTY_BORDER );
     516          14 :     ImplRegisterProperty( BASEPROPERTY_BORDERCOLOR );
     517          14 :     ImplRegisterProperty( BASEPROPERTY_DEFAULTCONTROL );
     518          14 :     ImplRegisterProperty( BASEPROPERTY_ENABLED );
     519          14 :     ImplRegisterProperty( BASEPROPERTY_ENABLEVISIBLE );
     520          14 :     ImplRegisterProperty( BASEPROPERTY_FONTDESCRIPTOR );
     521          14 :     ImplRegisterProperty( BASEPROPERTY_HELPTEXT );
     522          14 :     ImplRegisterProperty( BASEPROPERTY_HELPURL );
     523          14 :     ImplRegisterProperty( BASEPROPERTY_PRINTABLE );
     524          14 :     ImplRegisterProperty( BASEPROPERTY_READONLY );
     525          14 :     ImplRegisterProperty( BASEPROPERTY_TABSTOP );
     526          14 :     ImplRegisterProperty( BASEPROPERTY_TEXT );
     527          14 :     ImplRegisterProperty( BASEPROPERTY_VERTICALALIGN );
     528          14 :     ImplRegisterProperty( BASEPROPERTY_WRITING_MODE );
     529          14 :     ImplRegisterProperty( BASEPROPERTY_CONTEXT_WRITING_MODE );
     530          14 :     ImplRegisterProperty( BASEPROPERTY_HIDEINACTIVESELECTION );
     531          14 : }
     532             : 
     533           2 : OUString UnoControlFileControlModel::getServiceName() throw(::com::sun::star::uno::RuntimeException, std::exception)
     534             : {
     535           2 :     return OUString::createFromAscii( szServiceName_UnoControlFileControlModel );
     536             : }
     537             : 
     538         350 : uno::Any UnoControlFileControlModel::ImplGetDefaultValue( sal_uInt16 nPropId ) const
     539             : {
     540         350 :     if ( nPropId == BASEPROPERTY_DEFAULTCONTROL )
     541             :     {
     542          16 :         uno::Any aAny;
     543          16 :         aAny <<= OUString::createFromAscii( szServiceName_UnoControlFileControl );
     544          16 :         return aAny;
     545             :     }
     546         334 :     return UnoControlModel::ImplGetDefaultValue( nPropId );
     547             : }
     548             : 
     549        1694 : ::cppu::IPropertyArrayHelper& UnoControlFileControlModel::getInfoHelper()
     550             : {
     551             :     static UnoPropertyArrayHelper* pHelper = NULL;
     552        1694 :     if ( !pHelper )
     553             :     {
     554           2 :         uno::Sequence<sal_Int32>    aIDs = ImplGetPropertyIds();
     555           2 :         pHelper = new UnoPropertyArrayHelper( aIDs );
     556             :     }
     557        1694 :     return *pHelper;
     558             : }
     559             : 
     560             : // beans::XMultiPropertySet
     561          82 : uno::Reference< beans::XPropertySetInfo > UnoControlFileControlModel::getPropertySetInfo(  ) throw(uno::RuntimeException, std::exception)
     562             : {
     563          82 :     static uno::Reference< beans::XPropertySetInfo > xInfo( createPropertySetInfo( getInfoHelper() ) );
     564          82 :     return xInfo;
     565             : }
     566             : 
     567             : extern "C" SAL_DLLPUBLIC_EXPORT css::uno::XInterface * SAL_CALL
     568          12 : stardiv_Toolkit_UnoControlFileControlModel_get_implementation(
     569             :     css::uno::XComponentContext *context,
     570             :     css::uno::Sequence<css::uno::Any> const &)
     571             : {
     572          12 :     return cppu::acquire(new UnoControlFileControlModel(context));
     573             : }
     574             : 
     575             : 
     576             : //  class UnoFileControl
     577             : 
     578           0 : UnoFileControl::UnoFileControl()
     579           0 :     :UnoEditControl()
     580             : {
     581           0 : }
     582             : 
     583           0 : OUString UnoFileControl::GetComponentServiceName()
     584             : {
     585           0 :     return OUString("filecontrol");
     586             : }
     587             : 
     588             : extern "C" SAL_DLLPUBLIC_EXPORT css::uno::XInterface * SAL_CALL
     589           0 : stardiv_Toolkit_UnoFileControl_get_implementation(
     590             :     css::uno::XComponentContext *,
     591             :     css::uno::Sequence<css::uno::Any> const &)
     592             : {
     593           0 :     return cppu::acquire(new UnoFileControl());
     594             : }
     595             : 
     596             : 
     597             : //  class GraphicControlModel
     598             : 
     599        6924 : uno::Any GraphicControlModel::ImplGetDefaultValue( sal_uInt16 nPropId ) const
     600             : {
     601        6924 :     if ( nPropId == BASEPROPERTY_GRAPHIC )
     602         272 :         return uno::makeAny( uno::Reference< graphic::XGraphic >() );
     603             : 
     604        6652 :     return UnoControlModel::ImplGetDefaultValue( nPropId );
     605             : }
     606             : 
     607        3415 : void SAL_CALL GraphicControlModel::setFastPropertyValue_NoBroadcast( sal_Int32 nHandle, const ::com::sun::star::uno::Any& rValue ) throw (::com::sun::star::uno::Exception, std::exception)
     608             : {
     609        3415 :     UnoControlModel::setFastPropertyValue_NoBroadcast( nHandle, rValue );
     610             : 
     611             :     // - ImageAlign and ImagePosition need to correspond to each other
     612             :     // - Graphic and ImageURL need to correspond to each other
     613             :     try
     614             :     {
     615        3415 :         switch ( nHandle )
     616             :         {
     617             :         case BASEPROPERTY_IMAGEURL:
     618          49 :             if ( !mbAdjustingGraphic && ImplHasProperty( BASEPROPERTY_GRAPHIC ) )
     619             :             {
     620          49 :                 mbAdjustingGraphic = true;
     621          49 :                 OUString sImageURL;
     622          49 :                 OSL_VERIFY( rValue >>= sImageURL );
     623          49 :                 setDependentFastPropertyValue( BASEPROPERTY_GRAPHIC, uno::makeAny( ImageHelper::getGraphicFromURL_nothrow( sImageURL ) ) );
     624          49 :                 mbAdjustingGraphic = false;
     625             :             }
     626          49 :             break;
     627             : 
     628             :         case BASEPROPERTY_GRAPHIC:
     629           0 :             if ( !mbAdjustingGraphic && ImplHasProperty( BASEPROPERTY_IMAGEURL ) )
     630             :             {
     631           0 :                 mbAdjustingGraphic = true;
     632           0 :                 setDependentFastPropertyValue( BASEPROPERTY_IMAGEURL, uno::makeAny( OUString() ) );
     633           0 :                 mbAdjustingGraphic = false;
     634             :             }
     635           0 :             break;
     636             : 
     637             :         case BASEPROPERTY_IMAGEALIGN:
     638          16 :             if ( !mbAdjustingImagePosition && ImplHasProperty( BASEPROPERTY_IMAGEPOSITION ) )
     639             :             {
     640          12 :                 mbAdjustingImagePosition = true;
     641          12 :                 sal_Int16 nUNOValue = 0;
     642          12 :                 OSL_VERIFY( rValue >>= nUNOValue );
     643          12 :                 setDependentFastPropertyValue( BASEPROPERTY_IMAGEPOSITION, uno::makeAny( getExtendedImagePosition( nUNOValue ) ) );
     644          12 :                 mbAdjustingImagePosition = false;
     645             :             }
     646          16 :             break;
     647             :         case BASEPROPERTY_IMAGEPOSITION:
     648         276 :             if ( !mbAdjustingImagePosition && ImplHasProperty( BASEPROPERTY_IMAGEALIGN ) )
     649             :             {
     650         178 :                 mbAdjustingImagePosition = true;
     651         178 :                 sal_Int16 nUNOValue = 0;
     652         178 :                 OSL_VERIFY( rValue >>= nUNOValue );
     653         178 :                 setDependentFastPropertyValue( BASEPROPERTY_IMAGEALIGN, uno::makeAny( getCompatibleImageAlign( translateImagePosition( nUNOValue ) ) ) );
     654         178 :                 mbAdjustingImagePosition = false;
     655             :             }
     656         276 :             break;
     657             :         }
     658             :     }
     659           0 :     catch( const ::com::sun::star::uno::Exception& )
     660             :     {
     661             :         OSL_FAIL( "GraphicControlModel::setFastPropertyValue_NoBroadcast: caught an exception while aligning the ImagePosition/ImageAlign properties!" );
     662             :         DBG_UNHANDLED_EXCEPTION();
     663           0 :         mbAdjustingImagePosition = false;
     664             :     }
     665        3415 : }
     666             : 
     667             : 
     668             : //  class UnoControlButtonModel
     669             : 
     670         118 : UnoControlButtonModel::UnoControlButtonModel( const Reference< XComponentContext >& rxContext )
     671         118 :     :GraphicControlModel( rxContext )
     672             : {
     673         118 :     UNO_CONTROL_MODEL_REGISTER_PROPERTIES( VCLXButton );
     674             : 
     675         118 :     osl_atomic_increment( &m_refCount );
     676             :     {
     677         118 :         setFastPropertyValue_NoBroadcast( BASEPROPERTY_IMAGEPOSITION, ImplGetDefaultValue( BASEPROPERTY_IMAGEPOSITION ) );
     678             :         // this ensures that our ImagePosition is consistent with our ImageAlign property (since both
     679             :         // defaults are not per se consistent), since both are coupled in setFastPropertyValue_NoBroadcast
     680             :     }
     681         118 :     osl_atomic_decrement( &m_refCount );
     682         118 : }
     683             : 
     684           2 : OUString UnoControlButtonModel::getServiceName() throw(::com::sun::star::uno::RuntimeException, std::exception)
     685             : {
     686           2 :     return OUString::createFromAscii( szServiceName_UnoControlButtonModel );
     687             : }
     688             : 
     689        3874 : uno::Any UnoControlButtonModel::ImplGetDefaultValue( sal_uInt16 nPropId ) const
     690             : {
     691        3874 :     switch ( nPropId )
     692             :     {
     693             :     case BASEPROPERTY_DEFAULTCONTROL:
     694         120 :         return uno::makeAny( OUString::createFromAscii( szServiceName_UnoControlButton ) );
     695             :     case BASEPROPERTY_TOGGLE:
     696         120 :         return uno::makeAny( false );
     697             :     case BASEPROPERTY_ALIGN:
     698         122 :         return uno::makeAny( (sal_Int16)PROPERTY_ALIGN_CENTER );
     699             :     case BASEPROPERTY_FOCUSONCLICK:
     700         122 :         return uno::makeAny( true );
     701             :     }
     702             : 
     703        3390 :     return GraphicControlModel::ImplGetDefaultValue( nPropId );
     704             : }
     705             : 
     706        9776 : ::cppu::IPropertyArrayHelper& UnoControlButtonModel::getInfoHelper()
     707             : {
     708             :     static UnoPropertyArrayHelper* pHelper = NULL;
     709        9776 :     if ( !pHelper )
     710             :     {
     711          24 :         uno::Sequence<sal_Int32>    aIDs = ImplGetPropertyIds();
     712          24 :         pHelper = new UnoPropertyArrayHelper( aIDs );
     713             :     }
     714        9776 :     return *pHelper;
     715             : }
     716             : 
     717             : // beans::XMultiPropertySet
     718         128 : uno::Reference< beans::XPropertySetInfo > UnoControlButtonModel::getPropertySetInfo(  ) throw(uno::RuntimeException, std::exception)
     719             : {
     720         128 :     static uno::Reference< beans::XPropertySetInfo > xInfo( createPropertySetInfo( getInfoHelper() ) );
     721         128 :     return xInfo;
     722             : }
     723             : 
     724             : extern "C" SAL_DLLPUBLIC_EXPORT css::uno::XInterface * SAL_CALL
     725         106 : stardiv_Toolkit_UnoControlButtonModel_get_implementation(
     726             :     css::uno::XComponentContext *context,
     727             :     css::uno::Sequence<css::uno::Any> const &)
     728             : {
     729         106 :     return cppu::acquire(new UnoControlButtonModel(context));
     730             : }
     731             : 
     732             : 
     733             : //  class UnoButtonControl
     734             : 
     735         250 : UnoButtonControl::UnoButtonControl()
     736             :     :UnoButtonControl_Base()
     737             :     ,maActionListeners( *this )
     738         250 :     ,maItemListeners( *this )
     739             : {
     740         250 :     maComponentInfos.nWidth = 50;
     741         250 :     maComponentInfos.nHeight = 14;
     742         250 : }
     743             : 
     744          91 : OUString UnoButtonControl::GetComponentServiceName()
     745             : {
     746          91 :     OUString aName( "pushbutton" );
     747         182 :     uno::Any aVal = ImplGetPropertyValue( GetPropertyName( BASEPROPERTY_PUSHBUTTONTYPE ) );
     748          91 :     sal_Int16 n = sal_Int16();
     749          91 :     if ( ( aVal >>= n ) && n )
     750             :     {
     751             :         // Use PushButtonType later when available...
     752           0 :         switch ( n )
     753             :         {
     754           0 :             case 1 /*PushButtonType::OK*/:      aName = "okbutton";
     755           0 :                                                 break;
     756           0 :             case 2 /*PushButtonType::CANCEL*/:  aName = "cancelbutton";
     757           0 :                                                 break;
     758           0 :             case 3 /*PushButtonType::HELP*/:    aName = "helpbutton";
     759           0 :                                                 break;
     760             :             default:
     761             :             {
     762             :                 OSL_FAIL( "Unknown Button Type!" );
     763             :             }
     764             :         }
     765             :     }
     766         182 :     return aName;
     767             : }
     768             : 
     769         363 : void UnoButtonControl::dispose() throw(uno::RuntimeException, std::exception)
     770             : {
     771         363 :     lang::EventObject aEvt;
     772         363 :     aEvt.Source = (::cppu::OWeakObject*)this;
     773         363 :     maActionListeners.disposeAndClear( aEvt );
     774         363 :     maItemListeners.disposeAndClear( aEvt );
     775         363 :     UnoControlBase::dispose();
     776         363 : }
     777             : 
     778          95 : void UnoButtonControl::createPeer( const uno::Reference< awt::XToolkit > & rxToolkit, const uno::Reference< awt::XWindowPeer >  & rParentPeer ) throw(uno::RuntimeException, std::exception)
     779             : {
     780          95 :     UnoControlBase::createPeer( rxToolkit, rParentPeer );
     781             : 
     782          95 :     uno::Reference < awt::XButton > xButton( getPeer(), uno::UNO_QUERY );
     783          95 :     xButton->setActionCommand( maActionCommand );
     784          95 :     if ( maActionListeners.getLength() )
     785          85 :         xButton->addActionListener( &maActionListeners );
     786             : 
     787         190 :     uno::Reference< XToggleButton > xPushButton( getPeer(), uno::UNO_QUERY );
     788          95 :     if ( xPushButton.is() )
     789         190 :         xPushButton->addItemListener( this );
     790          95 : }
     791             : 
     792         238 : void UnoButtonControl::addActionListener(const uno::Reference< awt::XActionListener > & l) throw(uno::RuntimeException, std::exception)
     793             : {
     794         238 :     maActionListeners.addInterface( l );
     795         238 :     if( getPeer().is() && maActionListeners.getLength() == 1 )
     796             :     {
     797           4 :         uno::Reference < awt::XButton >  xButton( getPeer(), uno::UNO_QUERY );
     798           4 :         xButton->addActionListener( &maActionListeners );
     799             :     }
     800         238 : }
     801             : 
     802           2 : void UnoButtonControl::removeActionListener(const uno::Reference< awt::XActionListener > & l) throw(uno::RuntimeException, std::exception)
     803             : {
     804           2 :     if( getPeer().is() && maActionListeners.getLength() == 1 )
     805             :     {
     806           2 :         uno::Reference < awt::XButton >  xButton( getPeer(), uno::UNO_QUERY );
     807           2 :         xButton->removeActionListener( &maActionListeners );
     808             :     }
     809           2 :     maActionListeners.removeInterface( l );
     810           2 : }
     811             : 
     812           4 : void UnoButtonControl::addItemListener(const uno::Reference< awt::XItemListener > & l) throw(uno::RuntimeException, std::exception)
     813             : {
     814           4 :     maItemListeners.addInterface( l );
     815           4 : }
     816             : 
     817           2 : void UnoButtonControl::removeItemListener(const uno::Reference< awt::XItemListener > & l) throw(uno::RuntimeException, std::exception)
     818             : {
     819           2 :     maItemListeners.removeInterface( l );
     820           2 : }
     821             : 
     822         637 : void SAL_CALL UnoButtonControl::disposing( const lang::EventObject& Source ) throw (uno::RuntimeException, std::exception)
     823             : {
     824         637 :     UnoControlBase::disposing( Source );
     825         637 : }
     826             : 
     827           0 : void SAL_CALL UnoButtonControl::itemStateChanged( const awt::ItemEvent& rEvent ) throw (uno::RuntimeException, std::exception)
     828             : {
     829             :     // forward to model
     830           0 :     uno::Any aAny;
     831           0 :     aAny <<= (sal_Int16)rEvent.Selected;
     832           0 :     ImplSetPropertyValue( GetPropertyName( BASEPROPERTY_STATE ), aAny, false );
     833             : 
     834             :     // multiplex
     835           0 :     ItemEvent aEvent( rEvent );
     836           0 :     aEvent.Source = *this;
     837           0 :     maItemListeners.itemStateChanged( aEvent );
     838           0 : }
     839             : 
     840           4 : void UnoButtonControl::setLabel( const OUString&  rLabel ) throw(uno::RuntimeException, std::exception)
     841             : {
     842           4 :     uno::Any aAny;
     843           4 :     aAny <<= rLabel;
     844           4 :     ImplSetPropertyValue( GetPropertyName( BASEPROPERTY_LABEL ), aAny, true );
     845           4 : }
     846             : 
     847           4 : void UnoButtonControl::setActionCommand( const OUString& rCommand ) throw(uno::RuntimeException, std::exception)
     848             : {
     849           4 :     maActionCommand = rCommand;
     850           4 :     if ( getPeer().is() )
     851             :     {
     852           4 :         uno::Reference < awt::XButton >  xButton( getPeer(), uno::UNO_QUERY );
     853           4 :         xButton->setActionCommand( rCommand );
     854             :     }
     855           4 : }
     856             : 
     857           4 : awt::Size UnoButtonControl::getMinimumSize(  ) throw(uno::RuntimeException, std::exception)
     858             : {
     859           4 :     return Impl_getMinimumSize();
     860             : }
     861             : 
     862           6 : awt::Size UnoButtonControl::getPreferredSize(  ) throw(uno::RuntimeException, std::exception)
     863             : {
     864           6 :     return Impl_getPreferredSize();
     865             : }
     866             : 
     867           4 : awt::Size UnoButtonControl::calcAdjustedSize( const awt::Size& rNewSize ) throw(uno::RuntimeException, std::exception)
     868             : {
     869           4 :     return Impl_calcAdjustedSize( rNewSize );
     870             : }
     871             : 
     872             : extern "C" SAL_DLLPUBLIC_EXPORT css::uno::XInterface * SAL_CALL
     873         250 : stardiv_Toolkit_UnoButtonControl_get_implementation(
     874             :     css::uno::XComponentContext *,
     875             :     css::uno::Sequence<css::uno::Any> const &)
     876             : {
     877         250 :     return cppu::acquire(new UnoButtonControl());
     878             : }
     879             : 
     880             : 
     881             : //  class UnoControlImageControlModel
     882             : 
     883          48 : UnoControlImageControlModel::UnoControlImageControlModel( const Reference< XComponentContext >& rxContext )
     884             :     :GraphicControlModel( rxContext )
     885          48 :     ,mbAdjustingImageScaleMode( false )
     886             : {
     887          48 :     UNO_CONTROL_MODEL_REGISTER_PROPERTIES( VCLXImageControl );
     888          48 : }
     889             : 
     890           2 : OUString UnoControlImageControlModel::getServiceName() throw(::com::sun::star::uno::RuntimeException, std::exception)
     891             : {
     892           2 :     return OUString::createFromAscii( szServiceName_UnoControlImageControlModel );
     893             : }
     894             : 
     895         868 : uno::Any UnoControlImageControlModel::ImplGetDefaultValue( sal_uInt16 nPropId ) const
     896             : {
     897         868 :     if ( nPropId == BASEPROPERTY_DEFAULTCONTROL )
     898          54 :         return uno::makeAny( OUString::createFromAscii( szServiceName_UnoControlImageControl ) );
     899             : 
     900         814 :     if ( nPropId == BASEPROPERTY_IMAGE_SCALE_MODE )
     901          54 :         return makeAny( awt::ImageScaleMode::ANISOTROPIC );
     902             : 
     903         760 :     return GraphicControlModel::ImplGetDefaultValue( nPropId );
     904             : }
     905             : 
     906        4973 : ::cppu::IPropertyArrayHelper& UnoControlImageControlModel::getInfoHelper()
     907             : {
     908             :     static UnoPropertyArrayHelper* pHelper = NULL;
     909        4973 :     if ( !pHelper )
     910             :     {
     911           6 :         uno::Sequence<sal_Int32>    aIDs = ImplGetPropertyIds();
     912           6 :         pHelper = new UnoPropertyArrayHelper( aIDs );
     913             :     }
     914        4973 :     return *pHelper;
     915             : }
     916             : 
     917             : // beans::XMultiPropertySet
     918          76 : uno::Reference< beans::XPropertySetInfo > UnoControlImageControlModel::getPropertySetInfo(  ) throw(uno::RuntimeException, std::exception)
     919             : {
     920          76 :     static uno::Reference< beans::XPropertySetInfo > xInfo( createPropertySetInfo( getInfoHelper() ) );
     921          76 :     return xInfo;
     922             : }
     923             : 
     924         614 : void SAL_CALL UnoControlImageControlModel::setFastPropertyValue_NoBroadcast( sal_Int32 _nHandle, const ::com::sun::star::uno::Any& _rValue ) throw (::com::sun::star::uno::Exception, std::exception)
     925             : {
     926         614 :     GraphicControlModel::setFastPropertyValue_NoBroadcast( _nHandle, _rValue );
     927             : 
     928             :     // ScaleImage is an older (and less powerful) version of ScaleMode, but keep both in sync as far as possible
     929             :     try
     930             :     {
     931         614 :         switch ( _nHandle )
     932             :         {
     933             :         case BASEPROPERTY_IMAGE_SCALE_MODE:
     934          88 :             if ( !mbAdjustingImageScaleMode && ImplHasProperty( BASEPROPERTY_SCALEIMAGE ) )
     935             :             {
     936          44 :                 mbAdjustingImageScaleMode = true;
     937          44 :                 sal_Int16 nScaleMode( awt::ImageScaleMode::ANISOTROPIC );
     938          44 :                 OSL_VERIFY( _rValue >>= nScaleMode );
     939          44 :                 setDependentFastPropertyValue( BASEPROPERTY_SCALEIMAGE, uno::makeAny( nScaleMode != awt::ImageScaleMode::NONE ) );
     940          44 :                 mbAdjustingImageScaleMode = false;
     941             :             }
     942          88 :             break;
     943             :         case BASEPROPERTY_SCALEIMAGE:
     944          88 :             if ( !mbAdjustingImageScaleMode && ImplHasProperty( BASEPROPERTY_IMAGE_SCALE_MODE ) )
     945             :             {
     946          44 :                 mbAdjustingImageScaleMode = true;
     947          44 :                 bool bScale = true;
     948          44 :                 OSL_VERIFY( _rValue >>= bScale );
     949          44 :                 setDependentFastPropertyValue( BASEPROPERTY_IMAGE_SCALE_MODE, uno::makeAny( bScale ? awt::ImageScaleMode::ANISOTROPIC : awt::ImageScaleMode::NONE ) );
     950          44 :                 mbAdjustingImageScaleMode = false;
     951             :             }
     952          88 :             break;
     953             :         }
     954             :     }
     955           0 :     catch( const Exception& )
     956             :     {
     957           0 :         mbAdjustingImageScaleMode = false;
     958           0 :         throw;
     959             :     }
     960         614 : }
     961             : 
     962             : extern "C" SAL_DLLPUBLIC_EXPORT css::uno::XInterface * SAL_CALL
     963          46 : stardiv_Toolkit_UnoControlImageControlModel_get_implementation(
     964             :     css::uno::XComponentContext *context,
     965             :     css::uno::Sequence<css::uno::Any> const &)
     966             : {
     967          46 :     return cppu::acquire(new UnoControlImageControlModel(context));
     968             : }
     969             : 
     970             : 
     971             : //  class UnoImageControlControl
     972             : 
     973          22 : UnoImageControlControl::UnoImageControlControl()
     974             :     :UnoImageControlControl_Base()
     975          22 :     ,maActionListeners( *this )
     976             : {
     977             :     // TODO: Where should I look for defaults?
     978          22 :     maComponentInfos.nWidth = 100;
     979          22 :     maComponentInfos.nHeight = 100;
     980          22 : }
     981             : 
     982          22 : OUString UnoImageControlControl::GetComponentServiceName()
     983             : {
     984          22 :     return OUString("fixedimage");
     985             : }
     986             : 
     987          24 : void UnoImageControlControl::dispose() throw(uno::RuntimeException, std::exception)
     988             : {
     989          24 :     lang::EventObject aEvt;
     990          24 :     aEvt.Source = (::cppu::OWeakObject*)this;
     991          24 :     maActionListeners.disposeAndClear( aEvt );
     992          24 :     UnoControl::dispose();
     993          24 : }
     994             : 
     995           4 : sal_Bool UnoImageControlControl::isTransparent() throw(uno::RuntimeException, std::exception)
     996             : {
     997           4 :     return sal_True;
     998             : }
     999             : 
    1000           6 : awt::Size UnoImageControlControl::getMinimumSize(  ) throw(uno::RuntimeException, std::exception)
    1001             : {
    1002           6 :     return Impl_getMinimumSize();
    1003             : }
    1004             : 
    1005           6 : awt::Size UnoImageControlControl::getPreferredSize(  ) throw(uno::RuntimeException, std::exception)
    1006             : {
    1007           6 :     return Impl_getPreferredSize();
    1008             : }
    1009             : 
    1010           6 : awt::Size UnoImageControlControl::calcAdjustedSize( const awt::Size& rNewSize ) throw(uno::RuntimeException, std::exception)
    1011             : {
    1012           6 :     return Impl_calcAdjustedSize( rNewSize );
    1013             : }
    1014             : 
    1015             : extern "C" SAL_DLLPUBLIC_EXPORT css::uno::XInterface * SAL_CALL
    1016          22 : stardiv_Toolkit_UnoImageControlControl_get_implementation(
    1017             :     css::uno::XComponentContext *,
    1018             :     css::uno::Sequence<css::uno::Any> const &)
    1019             : {
    1020          22 :     return cppu::acquire(new UnoImageControlControl());
    1021             : }
    1022             : 
    1023             : 
    1024             : //  class UnoControlRadioButtonModel
    1025             : 
    1026          54 : UnoControlRadioButtonModel::UnoControlRadioButtonModel( const Reference< XComponentContext >& rxContext )
    1027          54 :     :GraphicControlModel( rxContext )
    1028             : {
    1029          54 :     UNO_CONTROL_MODEL_REGISTER_PROPERTIES( VCLXRadioButton );
    1030          54 : }
    1031             : 
    1032           2 : OUString UnoControlRadioButtonModel::getServiceName() throw(::com::sun::star::uno::RuntimeException, std::exception)
    1033             : {
    1034           2 :     return OUString::createFromAscii( szServiceName_UnoControlRadioButtonModel );
    1035             : }
    1036             : 
    1037        1540 : uno::Any UnoControlRadioButtonModel::ImplGetDefaultValue( sal_uInt16 nPropId ) const
    1038             : {
    1039        1540 :     switch ( nPropId )
    1040             :     {
    1041             :     case BASEPROPERTY_DEFAULTCONTROL:
    1042          58 :         return uno::makeAny( OUString::createFromAscii( szServiceName_UnoControlRadioButton ) );
    1043             : 
    1044             :     case BASEPROPERTY_VISUALEFFECT:
    1045          60 :         return uno::makeAny( (sal_Int16)awt::VisualEffect::LOOK3D );
    1046             :     }
    1047             : 
    1048        1422 :     return GraphicControlModel::ImplGetDefaultValue( nPropId );
    1049             : }
    1050             : 
    1051       11484 : ::cppu::IPropertyArrayHelper& UnoControlRadioButtonModel::getInfoHelper()
    1052             : {
    1053             :     static UnoPropertyArrayHelper* pHelper = NULL;
    1054       11484 :     if ( !pHelper )
    1055             :     {
    1056          12 :         uno::Sequence<sal_Int32>    aIDs = ImplGetPropertyIds();
    1057          12 :         pHelper = new UnoPropertyArrayHelper( aIDs );
    1058             :     }
    1059       11484 :     return *pHelper;
    1060             : }
    1061             : 
    1062             : // beans::XMultiPropertySet
    1063         132 : uno::Reference< beans::XPropertySetInfo > UnoControlRadioButtonModel::getPropertySetInfo(  ) throw(uno::RuntimeException, std::exception)
    1064             : {
    1065         132 :     static uno::Reference< beans::XPropertySetInfo > xInfo( createPropertySetInfo( getInfoHelper() ) );
    1066         132 :     return xInfo;
    1067             : }
    1068             : 
    1069             : extern "C" SAL_DLLPUBLIC_EXPORT css::uno::XInterface * SAL_CALL
    1070          52 : stardiv_Toolkit_UnoControlRadioButtonModel_get_implementation(
    1071             :     css::uno::XComponentContext *context,
    1072             :     css::uno::Sequence<css::uno::Any> const &)
    1073             : {
    1074          52 :     return cppu::acquire(new UnoControlRadioButtonModel(context));
    1075             : }
    1076             : 
    1077             : 
    1078             : //  class UnoRadioButtonControl
    1079             : 
    1080          38 : UnoRadioButtonControl::UnoRadioButtonControl()
    1081             :     :UnoRadioButtonControl_Base()
    1082             :     ,maItemListeners( *this )
    1083          38 :     ,maActionListeners( *this )
    1084             : {
    1085          38 :     maComponentInfos.nWidth = 100;
    1086          38 :     maComponentInfos.nHeight = 12;
    1087          38 : }
    1088             : 
    1089          42 : OUString UnoRadioButtonControl::GetComponentServiceName()
    1090             : {
    1091          42 :     return OUString("radiobutton");
    1092             : }
    1093             : 
    1094          40 : void UnoRadioButtonControl::dispose() throw(uno::RuntimeException, std::exception)
    1095             : {
    1096          40 :     lang::EventObject aEvt;
    1097          40 :     aEvt.Source = (::cppu::OWeakObject*)this;
    1098          40 :     maItemListeners.disposeAndClear( aEvt );
    1099          40 :     UnoControlBase::dispose();
    1100          40 : }
    1101             : 
    1102             : 
    1103           4 : sal_Bool UnoRadioButtonControl::isTransparent() throw(uno::RuntimeException, std::exception)
    1104             : {
    1105           4 :     return sal_True;
    1106             : }
    1107             : 
    1108          46 : void UnoRadioButtonControl::createPeer( const uno::Reference< awt::XToolkit > & rxToolkit, const uno::Reference< awt::XWindowPeer >  & rParentPeer ) throw(uno::RuntimeException, std::exception)
    1109             : {
    1110          46 :     UnoControlBase::createPeer( rxToolkit, rParentPeer );
    1111             : 
    1112          46 :     uno::Reference < awt::XRadioButton >  xRadioButton( getPeer(), uno::UNO_QUERY );
    1113          46 :     xRadioButton->addItemListener( this );
    1114             : 
    1115          92 :     uno::Reference < awt::XButton > xButton( getPeer(), uno::UNO_QUERY );
    1116          46 :     xButton->setActionCommand( maActionCommand );
    1117          46 :     if ( maActionListeners.getLength() )
    1118           0 :         xButton->addActionListener( &maActionListeners );
    1119             : 
    1120             :     // as default, set the "AutoToggle" to true
    1121             :     // (it is set to false in VCLXToolkit::ImplCreateWindow because of #87254#, but we want to
    1122             :     // have it enabled by default because of 85071)
    1123          92 :     uno::Reference< awt::XVclWindowPeer >  xVclWindowPeer( getPeer(), uno::UNO_QUERY );
    1124          46 :     if ( xVclWindowPeer.is() )
    1125          92 :         xVclWindowPeer->setProperty( GetPropertyName( BASEPROPERTY_AUTOTOGGLE ), css::uno::Any(true) );
    1126          46 : }
    1127             : 
    1128           6 : void UnoRadioButtonControl::addItemListener(const uno::Reference < awt::XItemListener > & l) throw(uno::RuntimeException, std::exception)
    1129             : {
    1130           6 :     maItemListeners.addInterface( l );
    1131           6 : }
    1132             : 
    1133           0 : void UnoRadioButtonControl::removeItemListener(const uno::Reference < awt::XItemListener > & l) throw(uno::RuntimeException, std::exception)
    1134             : {
    1135           0 :     maItemListeners.removeInterface( l );
    1136           0 : }
    1137             : 
    1138           2 : void UnoRadioButtonControl::addActionListener(const uno::Reference< awt::XActionListener > & l) throw(uno::RuntimeException, std::exception)
    1139             : {
    1140           2 :     maActionListeners.addInterface( l );
    1141           2 :     if( getPeer().is() && maActionListeners.getLength() == 1 )
    1142             :     {
    1143           2 :         uno::Reference < awt::XButton >  xButton( getPeer(), uno::UNO_QUERY );
    1144           2 :         xButton->addActionListener( &maActionListeners );
    1145             :     }
    1146           2 : }
    1147             : 
    1148           0 : void UnoRadioButtonControl::removeActionListener(const uno::Reference< awt::XActionListener > & l) throw(uno::RuntimeException, std::exception)
    1149             : {
    1150           0 :     if( getPeer().is() && maActionListeners.getLength() == 1 )
    1151             :     {
    1152           0 :         uno::Reference < awt::XButton >  xButton( getPeer(), uno::UNO_QUERY );
    1153           0 :         xButton->removeActionListener( &maActionListeners );
    1154             :     }
    1155           0 :     maActionListeners.removeInterface( l );
    1156           0 : }
    1157             : 
    1158           4 : void UnoRadioButtonControl::setLabel( const OUString&  rLabel ) throw(uno::RuntimeException, std::exception)
    1159             : {
    1160           4 :     uno::Any aAny;
    1161           4 :     aAny <<= rLabel;
    1162           4 :     ImplSetPropertyValue( GetPropertyName( BASEPROPERTY_LABEL ), aAny, true );
    1163           4 : }
    1164             : 
    1165           0 : void UnoRadioButtonControl::setActionCommand( const OUString& rCommand ) throw(uno::RuntimeException, std::exception)
    1166             : {
    1167           0 :     maActionCommand = rCommand;
    1168           0 :     if ( getPeer().is() )
    1169             :     {
    1170           0 :         uno::Reference < awt::XButton >  xButton( getPeer(), uno::UNO_QUERY );
    1171           0 :         xButton->setActionCommand( rCommand );
    1172             :     }
    1173           0 : }
    1174             : 
    1175           4 : void UnoRadioButtonControl::setState( sal_Bool bOn ) throw(uno::RuntimeException, std::exception)
    1176             : {
    1177           4 :     sal_Int16 nState = bOn ? 1 : 0;
    1178           4 :     uno::Any aAny;
    1179           4 :     aAny <<= nState;
    1180           4 :     ImplSetPropertyValue( GetPropertyName( BASEPROPERTY_STATE ), aAny, true );
    1181           4 : }
    1182             : 
    1183           8 : sal_Bool UnoRadioButtonControl::getState() throw(uno::RuntimeException, std::exception)
    1184             : {
    1185           8 :     sal_Int16 nState = 0;
    1186           8 :     uno::Any aVal = ImplGetPropertyValue( GetPropertyName( BASEPROPERTY_STATE ) );
    1187           8 :     aVal >>= nState;
    1188           8 :     return nState ? sal_True : sal_False;
    1189             : }
    1190             : 
    1191           0 : void UnoRadioButtonControl::itemStateChanged( const awt::ItemEvent& rEvent ) throw(uno::RuntimeException, std::exception)
    1192             : {
    1193           0 :     uno::Any aAny;
    1194           0 :     aAny <<= (sal_Int16)rEvent.Selected;
    1195           0 :     ImplSetPropertyValue( GetPropertyName( BASEPROPERTY_STATE ), aAny, false );
    1196             : 
    1197             :     // compatibility:
    1198             :     // in OOo 1.0.x, when the user clicked a radio button in a group of buttons, this resulted
    1199             :     // in _one_ itemStateChanged call for exactly the radio button which's state changed from
    1200             :     // "0" to "1".
    1201             :     // Nowadays, since the listener handling changed a lot towards 1.1 (the VCLXWindow reacts on more
    1202             :     // basic events from the VCL-windows, not anymore on the Link-based events like in 1.0.x), this
    1203             :     // isn't the case anymore: For instance, this method here gets called for the radio button
    1204             :     // which is being implicitily _de_selected, too. This is pretty bad for compatibility.
    1205             :     // Thus, we suppress all events with a new state other than "1". This is unlogical, and weird, when looking
    1206             :     // from a pure API perspective, but it's _compatible_ with older product versions, and this is
    1207             :     // all which matters here.
    1208             :     // #i14703#
    1209           0 :     if ( 1 == rEvent.Selected )
    1210             :     {
    1211           0 :         if ( maItemListeners.getLength() )
    1212           0 :             maItemListeners.itemStateChanged( rEvent );
    1213           0 :     }
    1214             :         // note that speaking stricly, this is wrong: When in 1.0.x, the user would have de-selected
    1215             :         // a radio button _without_ selecing another one, this would have caused a notification.
    1216             :         // With the change done here, this today won't cause a notification anymore.
    1217             : 
    1218             :         // Fortunately, it's not possible for the user to de-select a radio button without selecting another on,
    1219             :         // at least not via the regular UI. It _would_ be possible via the Accessibility API, which
    1220             :         // counts as "user input", too. But in 1.0.x, there was no Accessibility API, so there is nothing
    1221             :         // to be inconsistent with.
    1222           0 : }
    1223             : 
    1224           4 : awt::Size UnoRadioButtonControl::getMinimumSize(  ) throw(uno::RuntimeException, std::exception)
    1225             : {
    1226           4 :     return Impl_getMinimumSize();
    1227             : }
    1228             : 
    1229           4 : awt::Size UnoRadioButtonControl::getPreferredSize(  ) throw(uno::RuntimeException, std::exception)
    1230             : {
    1231           4 :     return Impl_getPreferredSize();
    1232             : }
    1233             : 
    1234           4 : awt::Size UnoRadioButtonControl::calcAdjustedSize( const awt::Size& rNewSize ) throw(uno::RuntimeException, std::exception)
    1235             : {
    1236           4 :     return Impl_calcAdjustedSize( rNewSize );
    1237             : }
    1238             : 
    1239             : extern "C" SAL_DLLPUBLIC_EXPORT css::uno::XInterface * SAL_CALL
    1240          38 : stardiv_Toolkit_UnoRadioButtonControl_get_implementation(
    1241             :     css::uno::XComponentContext *,
    1242             :     css::uno::Sequence<css::uno::Any> const &)
    1243             : {
    1244          38 :     return cppu::acquire(new UnoRadioButtonControl());
    1245             : }
    1246             : 
    1247             : 
    1248             : //  class UnoControlCheckBoxModel
    1249             : 
    1250          50 : UnoControlCheckBoxModel::UnoControlCheckBoxModel( const Reference< XComponentContext >& rxContext )
    1251          50 :     :GraphicControlModel( rxContext )
    1252             : {
    1253          50 :     UNO_CONTROL_MODEL_REGISTER_PROPERTIES( VCLXCheckBox );
    1254          50 : }
    1255             : 
    1256           2 : OUString UnoControlCheckBoxModel::getServiceName() throw(::com::sun::star::uno::RuntimeException, std::exception)
    1257             : {
    1258           2 :     return OUString::createFromAscii( szServiceName_UnoControlCheckBoxModel );
    1259             : }
    1260             : 
    1261        1436 : uno::Any UnoControlCheckBoxModel::ImplGetDefaultValue( sal_uInt16 nPropId ) const
    1262             : {
    1263        1436 :     switch ( nPropId )
    1264             :     {
    1265             :     case BASEPROPERTY_DEFAULTCONTROL:
    1266          54 :         return uno::makeAny( OUString::createFromAscii( szServiceName_UnoControlCheckBox ) );
    1267             : 
    1268             :     case BASEPROPERTY_VISUALEFFECT:
    1269          56 :         return uno::makeAny( (sal_Int16)awt::VisualEffect::LOOK3D );
    1270             :     }
    1271             : 
    1272        1326 :     return GraphicControlModel::ImplGetDefaultValue( nPropId );
    1273             : }
    1274             : 
    1275       10794 : ::cppu::IPropertyArrayHelper& UnoControlCheckBoxModel::getInfoHelper()
    1276             : {
    1277             :     static UnoPropertyArrayHelper* pHelper = NULL;
    1278       10794 :     if ( !pHelper )
    1279             :     {
    1280          14 :         uno::Sequence<sal_Int32>    aIDs = ImplGetPropertyIds();
    1281          14 :         pHelper = new UnoPropertyArrayHelper( aIDs );
    1282             :     }
    1283       10794 :     return *pHelper;
    1284             : }
    1285             : 
    1286             : // beans::XMultiPropertySet
    1287         118 : uno::Reference< beans::XPropertySetInfo > UnoControlCheckBoxModel::getPropertySetInfo(  ) throw(uno::RuntimeException, std::exception)
    1288             : {
    1289         118 :     static uno::Reference< beans::XPropertySetInfo > xInfo( createPropertySetInfo( getInfoHelper() ) );
    1290         118 :     return xInfo;
    1291             : }
    1292             : 
    1293             : extern "C" SAL_DLLPUBLIC_EXPORT css::uno::XInterface * SAL_CALL
    1294          44 : stardiv_Toolkit_UnoControlCheckBoxModel_get_implementation(
    1295             :     css::uno::XComponentContext *context,
    1296             :     css::uno::Sequence<css::uno::Any> const &)
    1297             : {
    1298          44 :     return cppu::acquire(new UnoControlCheckBoxModel(context));
    1299             : }
    1300             : 
    1301             : 
    1302             : //  class UnoCheckBoxControl
    1303             : 
    1304          40 : UnoCheckBoxControl::UnoCheckBoxControl()
    1305             :     :UnoCheckBoxControl_Base()
    1306          40 :     ,maItemListeners( *this ), maActionListeners( *this )
    1307             : {
    1308          40 :     maComponentInfos.nWidth = 100;
    1309          40 :     maComponentInfos.nHeight = 12;
    1310          40 : }
    1311             : 
    1312          42 : OUString UnoCheckBoxControl::GetComponentServiceName()
    1313             : {
    1314          42 :     return OUString("checkbox");
    1315             : }
    1316             : 
    1317          42 : void UnoCheckBoxControl::dispose() throw(uno::RuntimeException, std::exception)
    1318             : {
    1319          42 :     lang::EventObject aEvt;
    1320          42 :     aEvt.Source = (::cppu::OWeakObject*)this;
    1321          42 :     maItemListeners.disposeAndClear( aEvt );
    1322          42 :     UnoControlBase::dispose();
    1323          42 : }
    1324             : 
    1325           4 : sal_Bool UnoCheckBoxControl::isTransparent() throw(uno::RuntimeException, std::exception)
    1326             : {
    1327           4 :     return sal_True;
    1328             : }
    1329             : 
    1330          46 : void UnoCheckBoxControl::createPeer( const uno::Reference< awt::XToolkit > & rxToolkit, const uno::Reference< awt::XWindowPeer >  & rParentPeer ) throw(uno::RuntimeException, std::exception)
    1331             : {
    1332          46 :     UnoControlBase::createPeer( rxToolkit, rParentPeer );
    1333             : 
    1334          46 :     uno::Reference < awt::XCheckBox >  xCheckBox( getPeer(), uno::UNO_QUERY );
    1335          46 :     xCheckBox->addItemListener( this );
    1336             : 
    1337          92 :     uno::Reference < awt::XButton > xButton( getPeer(), uno::UNO_QUERY );
    1338          46 :     xButton->setActionCommand( maActionCommand );
    1339          46 :     if ( maActionListeners.getLength() )
    1340          46 :         xButton->addActionListener( &maActionListeners );
    1341          46 : }
    1342             : 
    1343          10 : void UnoCheckBoxControl::addItemListener(const uno::Reference < awt::XItemListener > & l) throw(uno::RuntimeException, std::exception)
    1344             : {
    1345          10 :     maItemListeners.addInterface( l );
    1346          10 : }
    1347             : 
    1348           4 : void UnoCheckBoxControl::removeItemListener(const uno::Reference < awt::XItemListener > & l) throw(uno::RuntimeException, std::exception)
    1349             : {
    1350           4 :     maItemListeners.removeInterface( l );
    1351           4 : }
    1352             : 
    1353           2 : void UnoCheckBoxControl::addActionListener(const uno::Reference< awt::XActionListener > & l) throw(uno::RuntimeException, std::exception)
    1354             : {
    1355           2 :     maActionListeners.addInterface( l );
    1356           2 :     if( getPeer().is() && maActionListeners.getLength() == 1 )
    1357             :     {
    1358           2 :         uno::Reference < awt::XButton >  xButton( getPeer(), uno::UNO_QUERY );
    1359           2 :         xButton->addActionListener( &maActionListeners );
    1360             :     }
    1361           2 : }
    1362             : 
    1363           0 : void UnoCheckBoxControl::removeActionListener(const uno::Reference< awt::XActionListener > & l) throw(uno::RuntimeException, std::exception)
    1364             : {
    1365           0 :     if( getPeer().is() && maActionListeners.getLength() == 1 )
    1366             :     {
    1367           0 :         uno::Reference < awt::XButton >  xButton( getPeer(), uno::UNO_QUERY );
    1368           0 :         xButton->removeActionListener( &maActionListeners );
    1369             :     }
    1370           0 :     maActionListeners.removeInterface( l );
    1371           0 : }
    1372             : 
    1373           0 : void UnoCheckBoxControl::setActionCommand( const OUString& rCommand ) throw(uno::RuntimeException, std::exception)
    1374             : {
    1375           0 :     maActionCommand = rCommand;
    1376           0 :     if ( getPeer().is() )
    1377             :     {
    1378           0 :         uno::Reference < awt::XButton > xButton( getPeer(), uno::UNO_QUERY );
    1379           0 :         xButton->setActionCommand( rCommand );
    1380             :     }
    1381           0 : }
    1382             : 
    1383             : 
    1384           4 : void UnoCheckBoxControl::setLabel( const OUString&  rLabel ) throw(uno::RuntimeException, std::exception)
    1385             : {
    1386           4 :     uno::Any aAny;
    1387           4 :     aAny <<= rLabel;
    1388           4 :     ImplSetPropertyValue( GetPropertyName( BASEPROPERTY_LABEL ), aAny, true );
    1389           4 : }
    1390             : 
    1391           4 : void UnoCheckBoxControl::setState( short n ) throw(uno::RuntimeException, std::exception)
    1392             : {
    1393           4 :     uno::Any aAny;
    1394           4 :     aAny <<= (sal_Int16)n;
    1395           4 :     ImplSetPropertyValue( GetPropertyName( BASEPROPERTY_STATE ), aAny, true );
    1396           4 : }
    1397             : 
    1398           8 : short UnoCheckBoxControl::getState() throw(uno::RuntimeException, std::exception)
    1399             : {
    1400           8 :     short nState = 0;
    1401           8 :     uno::Any aVal = ImplGetPropertyValue( GetPropertyName( BASEPROPERTY_STATE ) );
    1402           8 :     aVal >>= nState;
    1403           8 :     return nState;
    1404             : }
    1405             : 
    1406           4 : void UnoCheckBoxControl::enableTriState( sal_Bool b ) throw(uno::RuntimeException, std::exception)
    1407             : {
    1408           4 :     uno::Any aAny;
    1409           4 :     aAny <<= b;
    1410           4 :     ImplSetPropertyValue( GetPropertyName( BASEPROPERTY_TRISTATE ), aAny, true );
    1411           4 : }
    1412             : 
    1413           0 : void UnoCheckBoxControl::itemStateChanged( const awt::ItemEvent& rEvent ) throw(uno::RuntimeException, std::exception)
    1414             : {
    1415           0 :     uno::Any aAny;
    1416           0 :     aAny <<= (sal_Int16)rEvent.Selected;
    1417           0 :     ImplSetPropertyValue( GetPropertyName( BASEPROPERTY_STATE ), aAny, false );
    1418             : 
    1419           0 :     if ( maItemListeners.getLength() )
    1420           0 :         maItemListeners.itemStateChanged( rEvent );
    1421           0 : }
    1422             : 
    1423           4 : awt::Size UnoCheckBoxControl::getMinimumSize(  ) throw(uno::RuntimeException, std::exception)
    1424             : {
    1425           4 :     return Impl_getMinimumSize();
    1426             : }
    1427             : 
    1428           4 : awt::Size UnoCheckBoxControl::getPreferredSize(  ) throw(uno::RuntimeException, std::exception)
    1429             : {
    1430           4 :     return Impl_getPreferredSize();
    1431             : }
    1432             : 
    1433           4 : awt::Size UnoCheckBoxControl::calcAdjustedSize( const awt::Size& rNewSize ) throw(uno::RuntimeException, std::exception)
    1434             : {
    1435           4 :     return Impl_calcAdjustedSize( rNewSize );
    1436             : }
    1437             : 
    1438             : extern "C" SAL_DLLPUBLIC_EXPORT css::uno::XInterface * SAL_CALL
    1439          40 : stardiv_Toolkit_UnoCheckBoxControl_get_implementation(
    1440             :     css::uno::XComponentContext *,
    1441             :     css::uno::Sequence<css::uno::Any> const &)
    1442             : {
    1443          40 :     return cppu::acquire(new UnoCheckBoxControl());
    1444             : }
    1445             : 
    1446             : 
    1447             : //  class UnoControlFixedHyperlinkModel
    1448             : 
    1449           0 : UnoControlFixedHyperlinkModel::UnoControlFixedHyperlinkModel( const Reference< XComponentContext >& rxContext )
    1450           0 :     :UnoControlModel( rxContext )
    1451             : {
    1452           0 :     UNO_CONTROL_MODEL_REGISTER_PROPERTIES( VCLXFixedHyperlink );
    1453           0 : }
    1454             : 
    1455           0 : OUString UnoControlFixedHyperlinkModel::getServiceName() throw(::com::sun::star::uno::RuntimeException, std::exception)
    1456             : {
    1457           0 :     return OUString::createFromAscii( szServiceName_UnoControlFixedHyperlinkModel );
    1458             : }
    1459             : 
    1460           0 : uno::Any UnoControlFixedHyperlinkModel::ImplGetDefaultValue( sal_uInt16 nPropId ) const
    1461             : {
    1462           0 :     if ( nPropId == BASEPROPERTY_DEFAULTCONTROL )
    1463             :     {
    1464           0 :         uno::Any aAny;
    1465           0 :         aAny <<= OUString::createFromAscii( szServiceName_UnoControlFixedHyperlink );
    1466           0 :         return aAny;
    1467             :     }
    1468           0 :     else if ( nPropId == BASEPROPERTY_BORDER )
    1469             :     {
    1470           0 :         uno::Any aAny;
    1471           0 :         aAny <<= (sal_Int16)0;
    1472           0 :         return aAny;
    1473             :     }
    1474           0 :     else if ( nPropId == BASEPROPERTY_URL )
    1475             :     {
    1476           0 :         uno::Any aAny;
    1477           0 :         aAny <<= OUString();
    1478           0 :         return aAny;
    1479             :     }
    1480             : 
    1481           0 :     return UnoControlModel::ImplGetDefaultValue( nPropId );
    1482             : }
    1483             : 
    1484           0 : ::cppu::IPropertyArrayHelper& UnoControlFixedHyperlinkModel::getInfoHelper()
    1485             : {
    1486             :     static UnoPropertyArrayHelper* pHelper = NULL;
    1487           0 :     if ( !pHelper )
    1488             :     {
    1489           0 :         uno::Sequence<sal_Int32>    aIDs = ImplGetPropertyIds();
    1490           0 :         pHelper = new UnoPropertyArrayHelper( aIDs );
    1491             :     }
    1492           0 :     return *pHelper;
    1493             : }
    1494             : 
    1495             : // beans::XMultiPropertySet
    1496           0 : uno::Reference< beans::XPropertySetInfo > UnoControlFixedHyperlinkModel::getPropertySetInfo(  ) throw(uno::RuntimeException, std::exception)
    1497             : {
    1498           0 :     static uno::Reference< beans::XPropertySetInfo > xInfo( createPropertySetInfo( getInfoHelper() ) );
    1499           0 :     return xInfo;
    1500             : }
    1501             : 
    1502             : extern "C" SAL_DLLPUBLIC_EXPORT css::uno::XInterface * SAL_CALL
    1503           0 : stardiv_Toolkit_UnoControlFixedHyperlinkModel_get_implementation(
    1504             :     css::uno::XComponentContext *context,
    1505             :     css::uno::Sequence<css::uno::Any> const &)
    1506             : {
    1507           0 :     return cppu::acquire(new UnoControlFixedHyperlinkModel(context));
    1508             : }
    1509             : 
    1510             : 
    1511             : //  class UnoFixedHyperlinkControl
    1512             : 
    1513           0 : UnoFixedHyperlinkControl::UnoFixedHyperlinkControl()
    1514             :     :UnoControlBase()
    1515           0 :     ,maActionListeners( *this )
    1516             : {
    1517           0 :     maComponentInfos.nWidth = 100;
    1518           0 :     maComponentInfos.nHeight = 12;
    1519           0 : }
    1520             : 
    1521           0 : OUString UnoFixedHyperlinkControl::GetComponentServiceName()
    1522             : {
    1523           0 :     return OUString("fixedhyperlink");
    1524             : }
    1525             : 
    1526             : // uno::XInterface
    1527           0 : uno::Any UnoFixedHyperlinkControl::queryAggregation( const uno::Type & rType ) throw(uno::RuntimeException, std::exception)
    1528             : {
    1529             :     uno::Any aRet = ::cppu::queryInterface( rType,
    1530             :                                         (static_cast< awt::XFixedHyperlink* >(this)),
    1531           0 :                                         (static_cast< awt::XLayoutConstrains* >(this)) );
    1532           0 :     return (aRet.hasValue() ? aRet : UnoControlBase::queryAggregation( rType ));
    1533             : }
    1534             : 
    1535             : // lang::XTypeProvider
    1536           0 : IMPL_XTYPEPROVIDER_START( UnoFixedHyperlinkControl )
    1537           0 :     cppu::UnoType<awt::XFixedHyperlink>::get(),
    1538           0 :     cppu::UnoType<awt::XLayoutConstrains>::get(),
    1539             :     UnoControlBase::getTypes()
    1540           0 : IMPL_XTYPEPROVIDER_END
    1541             : 
    1542           0 : sal_Bool UnoFixedHyperlinkControl::isTransparent() throw(uno::RuntimeException, std::exception)
    1543             : {
    1544           0 :     return sal_True;
    1545             : }
    1546             : 
    1547           0 : void UnoFixedHyperlinkControl::setText( const OUString& Text ) throw(uno::RuntimeException, std::exception)
    1548             : {
    1549           0 :     uno::Any aAny;
    1550           0 :     aAny <<= Text;
    1551           0 :     ImplSetPropertyValue( GetPropertyName( BASEPROPERTY_LABEL ), aAny, true );
    1552           0 : }
    1553             : 
    1554           0 : OUString UnoFixedHyperlinkControl::getText() throw(uno::RuntimeException, std::exception)
    1555             : {
    1556           0 :     return ImplGetPropertyValue_UString( BASEPROPERTY_LABEL );
    1557             : }
    1558             : 
    1559           0 : void UnoFixedHyperlinkControl::setURL( const OUString& URL ) throw(::com::sun::star::uno::RuntimeException, std::exception)
    1560             : {
    1561           0 :     uno::Any aAny;
    1562           0 :     aAny <<= URL;
    1563           0 :     ImplSetPropertyValue( GetPropertyName( BASEPROPERTY_URL ), aAny, true );
    1564           0 : }
    1565             : 
    1566           0 : OUString UnoFixedHyperlinkControl::getURL(  ) throw(::com::sun::star::uno::RuntimeException, std::exception)
    1567             : {
    1568           0 :     return ImplGetPropertyValue_UString( BASEPROPERTY_URL );
    1569             : }
    1570             : 
    1571           0 : void UnoFixedHyperlinkControl::setAlignment( short nAlign ) throw(uno::RuntimeException, std::exception)
    1572             : {
    1573           0 :     uno::Any aAny;
    1574           0 :     aAny <<= (sal_Int16)nAlign;
    1575           0 :     ImplSetPropertyValue( GetPropertyName( BASEPROPERTY_ALIGN ), aAny, true );
    1576           0 : }
    1577             : 
    1578           0 : short UnoFixedHyperlinkControl::getAlignment() throw(uno::RuntimeException, std::exception)
    1579             : {
    1580           0 :     short nAlign = 0;
    1581           0 :     if ( mxModel.is() )
    1582             :     {
    1583           0 :         uno::Any aVal = ImplGetPropertyValue( GetPropertyName( BASEPROPERTY_ALIGN ) );
    1584           0 :         aVal >>= nAlign;
    1585             :     }
    1586           0 :     return nAlign;
    1587             : }
    1588             : 
    1589           0 : awt::Size UnoFixedHyperlinkControl::getMinimumSize(  ) throw(uno::RuntimeException, std::exception)
    1590             : {
    1591           0 :     return Impl_getMinimumSize();
    1592             : }
    1593             : 
    1594           0 : awt::Size UnoFixedHyperlinkControl::getPreferredSize(  ) throw(uno::RuntimeException, std::exception)
    1595             : {
    1596           0 :     return Impl_getPreferredSize();
    1597             : }
    1598             : 
    1599           0 : awt::Size UnoFixedHyperlinkControl::calcAdjustedSize( const awt::Size& rNewSize ) throw(uno::RuntimeException, std::exception)
    1600             : {
    1601           0 :     return Impl_calcAdjustedSize( rNewSize );
    1602             : }
    1603             : 
    1604           0 : void UnoFixedHyperlinkControl::dispose() throw(uno::RuntimeException, std::exception)
    1605             : {
    1606           0 :     lang::EventObject aEvt;
    1607           0 :     aEvt.Source = (::cppu::OWeakObject*)this;
    1608           0 :     maActionListeners.disposeAndClear( aEvt );
    1609           0 :     UnoControlBase::dispose();
    1610           0 : }
    1611             : 
    1612           0 : void UnoFixedHyperlinkControl::createPeer( const uno::Reference< awt::XToolkit > & rxToolkit, const uno::Reference< awt::XWindowPeer >  & rParentPeer ) throw(uno::RuntimeException, std::exception)
    1613             : {
    1614           0 :     UnoControlBase::createPeer( rxToolkit, rParentPeer );
    1615             : 
    1616           0 :     uno::Reference < awt::XFixedHyperlink > xFixedHyperlink( getPeer(), uno::UNO_QUERY );
    1617           0 :     if ( maActionListeners.getLength() )
    1618           0 :         xFixedHyperlink->addActionListener( &maActionListeners );
    1619           0 : }
    1620             : 
    1621           0 : void UnoFixedHyperlinkControl::addActionListener(const uno::Reference< awt::XActionListener > & l) throw(uno::RuntimeException, std::exception)
    1622             : {
    1623           0 :     maActionListeners.addInterface( l );
    1624           0 :     if( getPeer().is() && maActionListeners.getLength() == 1 )
    1625             :     {
    1626           0 :         uno::Reference < awt::XFixedHyperlink >  xFixedHyperlink( getPeer(), uno::UNO_QUERY );
    1627           0 :         xFixedHyperlink->addActionListener( &maActionListeners );
    1628             :     }
    1629           0 : }
    1630             : 
    1631           0 : void UnoFixedHyperlinkControl::removeActionListener(const uno::Reference< awt::XActionListener > & l) throw(uno::RuntimeException, std::exception)
    1632             : {
    1633           0 :     if( getPeer().is() && maActionListeners.getLength() == 1 )
    1634             :     {
    1635           0 :         uno::Reference < awt::XFixedHyperlink >  xFixedHyperlink( getPeer(), uno::UNO_QUERY );
    1636           0 :         xFixedHyperlink->removeActionListener( &maActionListeners );
    1637             :     }
    1638           0 :     maActionListeners.removeInterface( l );
    1639           0 : }
    1640             : 
    1641             : extern "C" SAL_DLLPUBLIC_EXPORT css::uno::XInterface * SAL_CALL
    1642           0 : stardiv_Toolkit_UnoFixedHyperlinkControl_get_implementation(
    1643             :     css::uno::XComponentContext *,
    1644             :     css::uno::Sequence<css::uno::Any> const &)
    1645             : {
    1646           0 :     return cppu::acquire(new UnoFixedHyperlinkControl());
    1647             : }
    1648             : 
    1649             : 
    1650             : //  class UnoControlFixedTextModel
    1651             : 
    1652         158 : UnoControlFixedTextModel::UnoControlFixedTextModel( const Reference< XComponentContext >& rxContext )
    1653         158 :     :UnoControlModel( rxContext )
    1654             : {
    1655         158 :     UNO_CONTROL_MODEL_REGISTER_PROPERTIES( VCLXFixedText );
    1656         158 : }
    1657             : 
    1658           2 : OUString UnoControlFixedTextModel::getServiceName() throw(::com::sun::star::uno::RuntimeException, std::exception)
    1659             : {
    1660           2 :     return OUString::createFromAscii( szServiceName_UnoControlFixedTextModel );
    1661             : }
    1662             : 
    1663        3726 : uno::Any UnoControlFixedTextModel::ImplGetDefaultValue( sal_uInt16 nPropId ) const
    1664             : {
    1665        3726 :     if ( nPropId == BASEPROPERTY_DEFAULTCONTROL )
    1666             :     {
    1667         162 :         uno::Any aAny;
    1668         162 :         aAny <<= OUString::createFromAscii( szServiceName_UnoControlFixedText );
    1669         162 :         return aAny;
    1670             :     }
    1671        3564 :     else if ( nPropId == BASEPROPERTY_BORDER )
    1672             :     {
    1673         162 :         uno::Any aAny;
    1674         162 :         aAny <<= (sal_Int16)0;
    1675         162 :         return aAny;
    1676             :     }
    1677             : 
    1678        3402 :     return UnoControlModel::ImplGetDefaultValue( nPropId );
    1679             : }
    1680             : 
    1681        5848 : ::cppu::IPropertyArrayHelper& UnoControlFixedTextModel::getInfoHelper()
    1682             : {
    1683             :     static UnoPropertyArrayHelper* pHelper = NULL;
    1684        5848 :     if ( !pHelper )
    1685             :     {
    1686           6 :         uno::Sequence<sal_Int32>    aIDs = ImplGetPropertyIds();
    1687           6 :         pHelper = new UnoPropertyArrayHelper( aIDs );
    1688             :     }
    1689        5848 :     return *pHelper;
    1690             : }
    1691             : 
    1692             : // beans::XMultiPropertySet
    1693         192 : uno::Reference< beans::XPropertySetInfo > UnoControlFixedTextModel::getPropertySetInfo(  ) throw(uno::RuntimeException, std::exception)
    1694             : {
    1695         192 :     static uno::Reference< beans::XPropertySetInfo > xInfo( createPropertySetInfo( getInfoHelper() ) );
    1696         192 :     return xInfo;
    1697             : }
    1698             : 
    1699             : extern "C" SAL_DLLPUBLIC_EXPORT css::uno::XInterface * SAL_CALL
    1700         158 : stardiv_Toolkit_UnoControlFixedTextModel_get_implementation(
    1701             :     css::uno::XComponentContext *context,
    1702             :     css::uno::Sequence<css::uno::Any> const &)
    1703             : {
    1704         158 :     return cppu::acquire(new UnoControlFixedTextModel(context));
    1705             : }
    1706             : 
    1707             : 
    1708             : //  class UnoFixedTextControl
    1709             : 
    1710          24 : UnoFixedTextControl::UnoFixedTextControl()
    1711          24 :     :UnoControlBase()
    1712             : {
    1713          24 :     maComponentInfos.nWidth = 100;
    1714          24 :     maComponentInfos.nHeight = 12;
    1715          24 : }
    1716             : 
    1717           4 : OUString UnoFixedTextControl::GetComponentServiceName()
    1718             : {
    1719           4 :     return OUString("fixedtext");
    1720             : }
    1721             : 
    1722             : // uno::XInterface
    1723         160 : uno::Any UnoFixedTextControl::queryAggregation( const uno::Type & rType ) throw(uno::RuntimeException, std::exception)
    1724             : {
    1725             :     uno::Any aRet = ::cppu::queryInterface( rType,
    1726             :                                         (static_cast< awt::XFixedText* >(this)),
    1727         160 :                                         (static_cast< awt::XLayoutConstrains* >(this)) );
    1728         160 :     return (aRet.hasValue() ? aRet : UnoControlBase::queryAggregation( rType ));
    1729             : }
    1730             : 
    1731             : // lang::XTypeProvider
    1732           0 : IMPL_XTYPEPROVIDER_START( UnoFixedTextControl )
    1733           0 :     cppu::UnoType<awt::XFixedText>::get(),
    1734           0 :     cppu::UnoType<awt::XLayoutConstrains>::get(),
    1735             :     UnoControlBase::getTypes()
    1736           0 : IMPL_XTYPEPROVIDER_END
    1737             : 
    1738           2 : sal_Bool UnoFixedTextControl::isTransparent() throw(uno::RuntimeException, std::exception)
    1739             : {
    1740           2 :     return sal_True;
    1741             : }
    1742             : 
    1743           4 : void UnoFixedTextControl::setText( const OUString& Text ) throw(uno::RuntimeException, std::exception)
    1744             : {
    1745           4 :     uno::Any aAny;
    1746           4 :     aAny <<= Text;
    1747           4 :     ImplSetPropertyValue( GetPropertyName( BASEPROPERTY_LABEL ), aAny, true );
    1748           4 : }
    1749             : 
    1750           4 : OUString UnoFixedTextControl::getText() throw(uno::RuntimeException, std::exception)
    1751             : {
    1752           4 :     return ImplGetPropertyValue_UString( BASEPROPERTY_LABEL );
    1753             : }
    1754             : 
    1755           2 : void UnoFixedTextControl::setAlignment( short nAlign ) throw(uno::RuntimeException, std::exception)
    1756             : {
    1757           2 :     uno::Any aAny;
    1758           2 :     aAny <<= (sal_Int16)nAlign;
    1759           2 :     ImplSetPropertyValue( GetPropertyName( BASEPROPERTY_ALIGN ), aAny, true );
    1760           2 : }
    1761             : 
    1762           4 : short UnoFixedTextControl::getAlignment() throw(uno::RuntimeException, std::exception)
    1763             : {
    1764           4 :     short nAlign = 0;
    1765           4 :     if ( mxModel.is() )
    1766             :     {
    1767           4 :         uno::Any aVal = ImplGetPropertyValue( GetPropertyName( BASEPROPERTY_ALIGN ) );
    1768           4 :         aVal >>= nAlign;
    1769             :     }
    1770           4 :     return nAlign;
    1771             : }
    1772             : 
    1773           2 : awt::Size UnoFixedTextControl::getMinimumSize(  ) throw(uno::RuntimeException, std::exception)
    1774             : {
    1775           2 :     return Impl_getMinimumSize();
    1776             : }
    1777             : 
    1778           2 : awt::Size UnoFixedTextControl::getPreferredSize(  ) throw(uno::RuntimeException, std::exception)
    1779             : {
    1780           2 :     return Impl_getPreferredSize();
    1781             : }
    1782             : 
    1783           2 : awt::Size UnoFixedTextControl::calcAdjustedSize( const awt::Size& rNewSize ) throw(uno::RuntimeException, std::exception)
    1784             : {
    1785           2 :     return Impl_calcAdjustedSize( rNewSize );
    1786             : }
    1787             : 
    1788             : extern "C" SAL_DLLPUBLIC_EXPORT css::uno::XInterface * SAL_CALL
    1789          24 : stardiv_Toolkit_UnoFixedTextControl_get_implementation(
    1790             :     css::uno::XComponentContext *,
    1791             :     css::uno::Sequence<css::uno::Any> const &)
    1792             : {
    1793          24 :     return cppu::acquire(new UnoFixedTextControl());
    1794             : }
    1795             : 
    1796             : 
    1797             : //  class UnoControlGroupBoxModel
    1798             : 
    1799          38 : UnoControlGroupBoxModel::UnoControlGroupBoxModel( const Reference< XComponentContext >& rxContext )
    1800          38 :     :UnoControlModel( rxContext )
    1801             : {
    1802          38 :     ImplRegisterProperty( BASEPROPERTY_DEFAULTCONTROL );
    1803          38 :     ImplRegisterProperty( BASEPROPERTY_ENABLED );
    1804          38 :     ImplRegisterProperty( BASEPROPERTY_ENABLEVISIBLE );
    1805          38 :     ImplRegisterProperty( BASEPROPERTY_FONTDESCRIPTOR );
    1806          38 :     ImplRegisterProperty( BASEPROPERTY_HELPTEXT );
    1807          38 :     ImplRegisterProperty( BASEPROPERTY_HELPURL );
    1808          38 :     ImplRegisterProperty( BASEPROPERTY_LABEL );
    1809          38 :     ImplRegisterProperty( BASEPROPERTY_PRINTABLE );
    1810          38 :     ImplRegisterProperty( BASEPROPERTY_WRITING_MODE );
    1811          38 :     ImplRegisterProperty( BASEPROPERTY_CONTEXT_WRITING_MODE );
    1812          38 : }
    1813             : 
    1814           2 : OUString UnoControlGroupBoxModel::getServiceName() throw(::com::sun::star::uno::RuntimeException, std::exception)
    1815             : {
    1816           2 :     return OUString::createFromAscii( szServiceName_UnoControlGroupBoxModel );
    1817             : }
    1818             : 
    1819         592 : uno::Any UnoControlGroupBoxModel::ImplGetDefaultValue( sal_uInt16 nPropId ) const
    1820             : {
    1821         592 :     if ( nPropId == BASEPROPERTY_DEFAULTCONTROL )
    1822             :     {
    1823          42 :         uno::Any aAny;
    1824          42 :         aAny <<= OUString::createFromAscii( szServiceName_UnoControlGroupBox );
    1825          42 :         return aAny;
    1826             :     }
    1827         550 :     return UnoControlModel::ImplGetDefaultValue( nPropId );
    1828             : }
    1829             : 
    1830        6664 : ::cppu::IPropertyArrayHelper& UnoControlGroupBoxModel::getInfoHelper()
    1831             : {
    1832             :     static UnoPropertyArrayHelper* pHelper = NULL;
    1833        6664 :     if ( !pHelper )
    1834             :     {
    1835          10 :         uno::Sequence<sal_Int32>    aIDs = ImplGetPropertyIds();
    1836          10 :         pHelper = new UnoPropertyArrayHelper( aIDs );
    1837             :     }
    1838        6664 :     return *pHelper;
    1839             : }
    1840             : 
    1841             : // beans::XMultiPropertySet
    1842          96 : uno::Reference< beans::XPropertySetInfo > UnoControlGroupBoxModel::getPropertySetInfo(  ) throw(uno::RuntimeException, std::exception)
    1843             : {
    1844          96 :     static uno::Reference< beans::XPropertySetInfo > xInfo( createPropertySetInfo( getInfoHelper() ) );
    1845          96 :     return xInfo;
    1846             : }
    1847             : 
    1848             : extern "C" SAL_DLLPUBLIC_EXPORT css::uno::XInterface * SAL_CALL
    1849          36 : stardiv_Toolkit_UnoControlGroupBoxModel_get_implementation(
    1850             :     css::uno::XComponentContext *context,
    1851             :     css::uno::Sequence<css::uno::Any> const &)
    1852             : {
    1853          36 :     return cppu::acquire(new UnoControlGroupBoxModel(context));
    1854             : }
    1855             : 
    1856             : 
    1857             : //  class UnoGroupBoxControl
    1858             : 
    1859          26 : UnoGroupBoxControl::UnoGroupBoxControl()
    1860          26 :     :UnoControlBase()
    1861             : {
    1862          26 :     maComponentInfos.nWidth = 100;
    1863          26 :     maComponentInfos.nHeight = 100;
    1864          26 : }
    1865             : 
    1866          26 : OUString UnoGroupBoxControl::GetComponentServiceName()
    1867             : {
    1868          26 :     return OUString("groupbox");
    1869             : }
    1870             : 
    1871           4 : sal_Bool UnoGroupBoxControl::isTransparent() throw(uno::RuntimeException, std::exception)
    1872             : {
    1873           4 :     return sal_True;
    1874             : }
    1875             : 
    1876             : extern "C" SAL_DLLPUBLIC_EXPORT css::uno::XInterface * SAL_CALL
    1877          26 : stardiv_Toolkit_UnoGroupBoxControl_get_implementation(
    1878             :     css::uno::XComponentContext *,
    1879             :     css::uno::Sequence<css::uno::Any> const &)
    1880             : {
    1881          26 :     return cppu::acquire(new UnoGroupBoxControl());
    1882             : }
    1883             : 
    1884             : 
    1885             : // = UnoControlListBoxModel_Data
    1886             : 
    1887        1772 : struct ListItem
    1888             : {
    1889             :     OUString ItemText;
    1890             :     OUString ItemImageURL;
    1891             :     Any             ItemData;
    1892             : 
    1893         356 :     ListItem()
    1894             :         :ItemText()
    1895             :         ,ItemImageURL()
    1896         356 :         ,ItemData()
    1897             :     {
    1898         356 :     }
    1899             : 
    1900         356 :     ListItem( const OUString& i_rItemText )
    1901             :         :ItemText( i_rItemText )
    1902             :         ,ItemImageURL()
    1903         356 :         ,ItemData()
    1904             :     {
    1905         356 :     }
    1906             : };
    1907             : 
    1908             : typedef beans::Pair< OUString, OUString > UnoListItem;
    1909             : 
    1910             : struct StripItemData : public ::std::unary_function< ListItem, UnoListItem >
    1911             : {
    1912         224 :     UnoListItem operator()( const ListItem& i_rItem )
    1913             :     {
    1914         224 :         return UnoListItem( i_rItem.ItemText, i_rItem.ItemImageURL );
    1915             :     }
    1916             : };
    1917             : 
    1918          94 : struct UnoControlListBoxModel_Data
    1919             : {
    1920         102 :     UnoControlListBoxModel_Data( UnoControlListBoxModel& i_rAntiImpl )
    1921             :         :m_bSettingLegacyProperty( false )
    1922             :         ,m_rAntiImpl( i_rAntiImpl )
    1923         102 :         ,m_aListItems()
    1924             :     {
    1925         102 :     }
    1926             : 
    1927           0 :     sal_Int32 getItemCount() const { return sal_Int32( m_aListItems.size() ); }
    1928             : 
    1929           0 :     const ListItem& getItem( const sal_Int32 i_nIndex ) const
    1930             :     {
    1931           0 :         if ( ( i_nIndex < 0 ) || ( i_nIndex >= sal_Int32( m_aListItems.size() ) ) )
    1932           0 :             throw IndexOutOfBoundsException( OUString(), m_rAntiImpl );
    1933           0 :         return m_aListItems[ i_nIndex ];
    1934             :     }
    1935             : 
    1936           0 :     ListItem& getItem( const sal_Int32 i_nIndex )
    1937             :     {
    1938           0 :         return const_cast< ListItem& >( static_cast< const UnoControlListBoxModel_Data* >( this )->getItem( i_nIndex ) );
    1939             :     }
    1940             : 
    1941           0 :     ListItem& insertItem( const sal_Int32 i_nIndex )
    1942             :     {
    1943           0 :         if ( ( i_nIndex < 0 ) || ( i_nIndex > sal_Int32( m_aListItems.size() ) ) )
    1944           0 :             throw IndexOutOfBoundsException( OUString(), m_rAntiImpl );
    1945           0 :         return *m_aListItems.insert( m_aListItems.begin() + i_nIndex, ListItem() );
    1946             :     }
    1947             : 
    1948         158 :     Sequence< UnoListItem > getAllItems() const
    1949             :     {
    1950         158 :         Sequence< UnoListItem > aItems( sal_Int32( m_aListItems.size() ) );
    1951         158 :         ::std::transform( m_aListItems.begin(), m_aListItems.end(), aItems.getArray(), StripItemData() );
    1952         158 :         return aItems;
    1953             :     }
    1954             : 
    1955           8 :     void copyItems( const UnoControlListBoxModel_Data& i_copySource )
    1956             :     {
    1957           8 :         m_aListItems = i_copySource.m_aListItems;
    1958           8 :     }
    1959             : 
    1960         138 :     void    setAllItems( const ::std::vector< ListItem >& i_rItems )
    1961             :     {
    1962         138 :         m_aListItems = i_rItems;
    1963         138 :     }
    1964             : 
    1965           0 :     void    removeItem( const sal_Int32 i_nIndex )
    1966             :     {
    1967           0 :         if ( ( i_nIndex < 0 ) || ( i_nIndex >= sal_Int32( m_aListItems.size() ) ) )
    1968           0 :             throw IndexOutOfBoundsException( OUString(), m_rAntiImpl );
    1969           0 :         m_aListItems.erase( m_aListItems.begin() + i_nIndex );
    1970           0 :     }
    1971             : 
    1972           0 :     void removeAllItems()
    1973             :     {
    1974           0 :         ::std::vector< ListItem > aEmpty;
    1975           0 :         m_aListItems.swap( aEmpty );
    1976           0 :     }
    1977             : 
    1978             : public:
    1979             :     bool                        m_bSettingLegacyProperty;
    1980             : 
    1981             : private:
    1982             :     UnoControlListBoxModel&     m_rAntiImpl;
    1983             :     ::std::vector< ListItem >   m_aListItems;
    1984             : };
    1985             : 
    1986             : 
    1987             : // = UnoControlListBoxModel
    1988             : 
    1989             : 
    1990          94 : UnoControlListBoxModel::UnoControlListBoxModel( const Reference< XComponentContext >& rxContext, ConstructorMode const i_mode )
    1991             :     :UnoControlListBoxModel_Base( rxContext )
    1992          94 :     ,m_pData( new UnoControlListBoxModel_Data( *this ) )
    1993         188 :     ,m_aItemListListeners( GetMutex() )
    1994             : {
    1995          94 :     if ( i_mode == ConstructDefault )
    1996             :     {
    1997          28 :         UNO_CONTROL_MODEL_REGISTER_PROPERTIES( VCLXListBox );
    1998             :     }
    1999          94 : }
    2000             : 
    2001           8 : UnoControlListBoxModel::UnoControlListBoxModel( const UnoControlListBoxModel& i_rSource )
    2002             :     :UnoControlListBoxModel_Base( i_rSource )
    2003           8 :     ,m_pData( new UnoControlListBoxModel_Data( *this ) )
    2004          16 :     ,m_aItemListListeners( GetMutex() )
    2005             : {
    2006           8 :     m_pData->copyItems( *i_rSource.m_pData );
    2007           8 : }
    2008         122 : UnoControlListBoxModel::~UnoControlListBoxModel()
    2009             : {
    2010         122 : }
    2011         192 : IMPL_SERVICEINFO_DERIVED( UnoControlListBoxModel, UnoControlModel, szServiceName2_UnoControlListBoxModel )
    2012             : 
    2013           2 : OUString UnoControlListBoxModel::getServiceName() throw(::com::sun::star::uno::RuntimeException, std::exception)
    2014             : {
    2015           2 :     return OUString::createFromAscii( szServiceName_UnoControlListBoxModel );
    2016             : }
    2017             : 
    2018             : 
    2019         928 : uno::Any UnoControlListBoxModel::ImplGetDefaultValue( sal_uInt16 nPropId ) const
    2020             : {
    2021         928 :     if ( nPropId == BASEPROPERTY_DEFAULTCONTROL )
    2022             :     {
    2023          32 :         uno::Any aAny;
    2024          32 :         aAny <<= OUString::createFromAscii( szServiceName_UnoControlListBox );
    2025          32 :         return aAny;
    2026             :     }
    2027         896 :     return UnoControlModel::ImplGetDefaultValue( nPropId );
    2028             : }
    2029             : 
    2030             : 
    2031       12151 : ::cppu::IPropertyArrayHelper& UnoControlListBoxModel::getInfoHelper()
    2032             : {
    2033             :     static UnoPropertyArrayHelper* pHelper = NULL;
    2034       12151 :     if ( !pHelper )
    2035             :     {
    2036           8 :         uno::Sequence<sal_Int32>    aIDs = ImplGetPropertyIds();
    2037           8 :         pHelper = new UnoPropertyArrayHelper( aIDs );
    2038             :     }
    2039       12151 :     return *pHelper;
    2040             : }
    2041             : 
    2042             : 
    2043             : // beans::XMultiPropertySet
    2044         150 : uno::Reference< beans::XPropertySetInfo > UnoControlListBoxModel::getPropertySetInfo(  ) throw(uno::RuntimeException, std::exception)
    2045             : {
    2046         150 :     static uno::Reference< beans::XPropertySetInfo > xInfo( createPropertySetInfo( getInfoHelper() ) );
    2047         150 :     return xInfo;
    2048             : }
    2049             : 
    2050             : 
    2051             : namespace
    2052             : {
    2053             :     struct CreateListItem : public ::std::unary_function< OUString, ListItem >
    2054             :     {
    2055         356 :         ListItem operator()( const OUString& i_rItemText )
    2056             :         {
    2057         356 :             return ListItem( i_rItemText );
    2058             :         }
    2059             :     };
    2060             : }
    2061             : 
    2062             : 
    2063        1161 : void SAL_CALL UnoControlListBoxModel::setFastPropertyValue_NoBroadcast( sal_Int32 nHandle, const uno::Any& rValue ) throw (uno::Exception, std::exception)
    2064             : {
    2065        1161 :     UnoControlModel::setFastPropertyValue_NoBroadcast( nHandle, rValue );
    2066             : 
    2067        1161 :     if ( nHandle == BASEPROPERTY_STRINGITEMLIST )
    2068             :     {
    2069             :         // reset selection
    2070          52 :         uno::Sequence<sal_Int16> aSeq;
    2071         104 :         uno::Any aAny;
    2072          52 :         aAny <<= aSeq;
    2073          52 :         setDependentFastPropertyValue( BASEPROPERTY_SELECTEDITEMS, aAny );
    2074             : 
    2075          52 :         if ( !m_pData->m_bSettingLegacyProperty )
    2076             :         {
    2077             :             // synchronize the legacy StringItemList property with our list items
    2078          52 :             Sequence< OUString > aStringItemList;
    2079         104 :             Any aPropValue;
    2080          52 :             getFastPropertyValue( aPropValue, BASEPROPERTY_STRINGITEMLIST );
    2081          52 :             OSL_VERIFY( aPropValue >>= aStringItemList );
    2082             : 
    2083         104 :             ::std::vector< ListItem > aItems( aStringItemList.getLength() );
    2084             :             ::std::transform(
    2085             :                 aStringItemList.getConstArray(),
    2086          52 :                 aStringItemList.getConstArray() + aStringItemList.getLength(),
    2087             :                 aItems.begin(),
    2088             :                 CreateListItem()
    2089         104 :             );
    2090          52 :             m_pData->setAllItems( aItems );
    2091             : 
    2092             :             // since an XItemListListener does not have a "all items modified" or some such method,
    2093             :             // we simulate this by notifying removal of all items, followed by insertion of all new
    2094             :             // items
    2095         104 :             lang::EventObject aEvent;
    2096          52 :             aEvent.Source = *this;
    2097         104 :             m_aItemListListeners.notifyEach( &XItemListListener::itemListChanged, aEvent );
    2098             :             // TODO: OPropertySetHelper calls into this method with the mutex locked ...
    2099             :             // which is wrong for the above notifications ...
    2100          52 :         }
    2101             :     }
    2102        1161 : }
    2103             : 
    2104             : 
    2105         360 : void UnoControlListBoxModel::ImplNormalizePropertySequence( const sal_Int32 _nCount, sal_Int32* _pHandles,
    2106             :     uno::Any* _pValues, sal_Int32* _pValidHandles ) const
    2107             : {
    2108             :     // dependencies we know:
    2109             :     // BASEPROPERTY_STRINGITEMLIST->BASEPROPERTY_SELECTEDITEMS
    2110         360 :     ImplEnsureHandleOrder( _nCount, _pHandles, _pValues, BASEPROPERTY_STRINGITEMLIST, BASEPROPERTY_SELECTEDITEMS );
    2111             : 
    2112         360 :     UnoControlModel::ImplNormalizePropertySequence( _nCount, _pHandles, _pValues, _pValidHandles );
    2113         360 : }
    2114             : 
    2115             : 
    2116           0 : ::sal_Int32 SAL_CALL UnoControlListBoxModel::getItemCount() throw (RuntimeException, std::exception)
    2117             : {
    2118           0 :     ::osl::MutexGuard aGuard( GetMutex() );
    2119           0 :     return m_pData->getItemCount();
    2120             : }
    2121             : 
    2122             : 
    2123           0 : void SAL_CALL UnoControlListBoxModel::insertItem( ::sal_Int32 i_nPosition, const OUString& i_rItemText, const OUString& i_rItemImageURL ) throw (IndexOutOfBoundsException, RuntimeException, std::exception)
    2124             : {
    2125           0 :     ::osl::ClearableMutexGuard aGuard( GetMutex() );
    2126             :     // SYNCHRONIZED ----->
    2127           0 :     ListItem& rItem( m_pData->insertItem( i_nPosition ) );
    2128           0 :     rItem.ItemText = i_rItemText;
    2129           0 :     rItem.ItemImageURL = i_rItemImageURL;
    2130             : 
    2131           0 :     impl_handleInsert( i_nPosition, i_rItemText, i_rItemImageURL, aGuard );
    2132             :     // <----- SYNCHRONIZED
    2133           0 : }
    2134             : 
    2135             : 
    2136           0 : void SAL_CALL UnoControlListBoxModel::insertItemText( ::sal_Int32 i_nPosition, const OUString& i_rItemText ) throw (IndexOutOfBoundsException, RuntimeException, std::exception)
    2137             : {
    2138           0 :     ::osl::ClearableMutexGuard aGuard( GetMutex() );
    2139             :     // SYNCHRONIZED ----->
    2140           0 :     ListItem& rItem( m_pData->insertItem( i_nPosition ) );
    2141           0 :     rItem.ItemText = i_rItemText;
    2142             : 
    2143           0 :     impl_handleInsert( i_nPosition, i_rItemText, ::boost::optional< OUString >(), aGuard );
    2144             :     // <----- SYNCHRONIZED
    2145           0 : }
    2146             : 
    2147             : 
    2148           0 : void SAL_CALL UnoControlListBoxModel::insertItemImage( ::sal_Int32 i_nPosition, const OUString& i_rItemImageURL ) throw (IndexOutOfBoundsException, RuntimeException, std::exception)
    2149             : {
    2150           0 :     ::osl::ClearableMutexGuard aGuard( GetMutex() );
    2151             :     // SYNCHRONIZED ----->
    2152           0 :     ListItem& rItem( m_pData->insertItem( i_nPosition ) );
    2153           0 :     rItem.ItemImageURL = i_rItemImageURL;
    2154             : 
    2155           0 :     impl_handleInsert( i_nPosition, ::boost::optional< OUString >(), i_rItemImageURL, aGuard );
    2156             :     // <----- SYNCHRONIZED
    2157           0 : }
    2158             : 
    2159             : 
    2160           0 : void SAL_CALL UnoControlListBoxModel::removeItem( ::sal_Int32 i_nPosition ) throw (IndexOutOfBoundsException, RuntimeException, std::exception)
    2161             : {
    2162           0 :     ::osl::ClearableMutexGuard aGuard( GetMutex() );
    2163             :     // SYNCHRONIZED ----->
    2164           0 :     m_pData->removeItem( i_nPosition );
    2165             : 
    2166           0 :     impl_handleRemove( i_nPosition, aGuard );
    2167             :     // <----- SYNCHRONIZED
    2168           0 : }
    2169             : 
    2170             : 
    2171           0 : void SAL_CALL UnoControlListBoxModel::removeAllItems(  ) throw (::com::sun::star::uno::RuntimeException, std::exception)
    2172             : {
    2173           0 :     ::osl::ClearableMutexGuard aGuard( GetMutex() );
    2174             :     // SYNCHRONIZED ----->
    2175           0 :     m_pData->removeAllItems();
    2176             : 
    2177           0 :     impl_handleRemove( -1, aGuard );
    2178             :     // <----- SYNCHRONIZED
    2179           0 : }
    2180             : 
    2181             : 
    2182           0 : void SAL_CALL UnoControlListBoxModel::setItemText( ::sal_Int32 i_nPosition, const OUString& i_rItemText ) throw (IndexOutOfBoundsException, RuntimeException, std::exception)
    2183             : {
    2184           0 :     ::osl::ClearableMutexGuard aGuard( GetMutex() );
    2185             :     // SYNCHRONIZED ----->
    2186           0 :     ListItem& rItem( m_pData->getItem( i_nPosition ) );
    2187           0 :     rItem.ItemText = i_rItemText;
    2188             : 
    2189           0 :     impl_handleModify( i_nPosition, i_rItemText, ::boost::optional< OUString >(), aGuard );
    2190             :     // <----- SYNCHRONIZED
    2191           0 : }
    2192             : 
    2193             : 
    2194           0 : void SAL_CALL UnoControlListBoxModel::setItemImage( ::sal_Int32 i_nPosition, const OUString& i_rItemImageURL ) throw (IndexOutOfBoundsException, RuntimeException, std::exception)
    2195             : {
    2196           0 :     ::osl::ClearableMutexGuard aGuard( GetMutex() );
    2197             :     // SYNCHRONIZED ----->
    2198           0 :     ListItem& rItem( m_pData->getItem( i_nPosition ) );
    2199           0 :     rItem.ItemImageURL = i_rItemImageURL;
    2200             : 
    2201           0 :     impl_handleModify( i_nPosition, ::boost::optional< OUString >(), i_rItemImageURL, aGuard );
    2202             :     // <----- SYNCHRONIZED
    2203           0 : }
    2204             : 
    2205             : 
    2206           0 : void SAL_CALL UnoControlListBoxModel::setItemTextAndImage( ::sal_Int32 i_nPosition, const OUString& i_rItemText, const OUString& i_rItemImageURL ) throw (IndexOutOfBoundsException, RuntimeException, std::exception)
    2207             : {
    2208           0 :     ::osl::ClearableMutexGuard aGuard( GetMutex() );
    2209             :     // SYNCHRONIZED ----->
    2210           0 :     ListItem& rItem( m_pData->getItem( i_nPosition ) );
    2211           0 :     rItem.ItemText = i_rItemText;
    2212           0 :     rItem.ItemImageURL = i_rItemImageURL;
    2213             : 
    2214           0 :     impl_handleModify( i_nPosition, i_rItemText, i_rItemImageURL, aGuard );
    2215             :     // <----- SYNCHRONIZED
    2216           0 : }
    2217             : 
    2218             : 
    2219           0 : void SAL_CALL UnoControlListBoxModel::setItemData( ::sal_Int32 i_nPosition, const Any& i_rDataValue ) throw (IndexOutOfBoundsException, RuntimeException, std::exception)
    2220             : {
    2221           0 :     ::osl::ClearableMutexGuard aGuard( GetMutex() );
    2222           0 :     ListItem& rItem( m_pData->getItem( i_nPosition ) );
    2223           0 :     rItem.ItemData = i_rDataValue;
    2224           0 : }
    2225             : 
    2226             : 
    2227           0 : OUString SAL_CALL UnoControlListBoxModel::getItemText( ::sal_Int32 i_nPosition ) throw (IndexOutOfBoundsException, RuntimeException, std::exception)
    2228             : {
    2229           0 :     ::osl::MutexGuard aGuard( GetMutex() );
    2230           0 :     const ListItem& rItem( m_pData->getItem( i_nPosition ) );
    2231           0 :     return rItem.ItemText;
    2232             : }
    2233             : 
    2234             : 
    2235           0 : OUString SAL_CALL UnoControlListBoxModel::getItemImage( ::sal_Int32 i_nPosition ) throw (IndexOutOfBoundsException, RuntimeException, std::exception)
    2236             : {
    2237           0 :     ::osl::MutexGuard aGuard( GetMutex() );
    2238           0 :     const ListItem& rItem( m_pData->getItem( i_nPosition ) );
    2239           0 :     return rItem.ItemImageURL;
    2240             : }
    2241             : 
    2242             : 
    2243           0 : beans::Pair< OUString, OUString > SAL_CALL UnoControlListBoxModel::getItemTextAndImage( ::sal_Int32 i_nPosition ) throw (IndexOutOfBoundsException, RuntimeException, std::exception)
    2244             : {
    2245           0 :     ::osl::MutexGuard aGuard( GetMutex() );
    2246           0 :     const ListItem& rItem( m_pData->getItem( i_nPosition ) );
    2247           0 :     return beans::Pair< OUString, OUString >( rItem.ItemText, rItem.ItemImageURL );
    2248             : }
    2249             : 
    2250             : 
    2251           0 : Any SAL_CALL UnoControlListBoxModel::getItemData( ::sal_Int32 i_nPosition ) throw (IndexOutOfBoundsException, RuntimeException, std::exception)
    2252             : {
    2253           0 :     ::osl::ClearableMutexGuard aGuard( GetMutex() );
    2254           0 :     const ListItem& rItem( m_pData->getItem( i_nPosition ) );
    2255           0 :     return rItem.ItemData;
    2256             : }
    2257             : 
    2258             : 
    2259         158 : Sequence< beans::Pair< OUString, OUString > > SAL_CALL UnoControlListBoxModel::getAllItems(  ) throw (RuntimeException, std::exception)
    2260             : {
    2261         158 :     ::osl::MutexGuard aGuard( GetMutex() );
    2262         158 :     return m_pData->getAllItems();
    2263             : }
    2264             : 
    2265             : 
    2266          42 : void SAL_CALL UnoControlListBoxModel::addItemListListener( const uno::Reference< awt::XItemListListener >& i_Listener ) throw (uno::RuntimeException, std::exception)
    2267             : {
    2268          42 :     if ( i_Listener.is() )
    2269          42 :         m_aItemListListeners.addInterface( i_Listener );
    2270          42 : }
    2271             : 
    2272             : 
    2273           8 : void SAL_CALL UnoControlListBoxModel::removeItemListListener( const uno::Reference< awt::XItemListListener >& i_Listener ) throw (uno::RuntimeException, std::exception)
    2274             : {
    2275           8 :     if ( i_Listener.is() )
    2276           8 :         m_aItemListListeners.removeInterface( i_Listener );
    2277           8 : }
    2278             : 
    2279             : 
    2280           0 : void UnoControlListBoxModel::impl_getStringItemList( ::std::vector< OUString >& o_rStringItems ) const
    2281             : {
    2282           0 :     Sequence< OUString > aStringItemList;
    2283           0 :     Any aPropValue;
    2284           0 :     getFastPropertyValue( aPropValue, BASEPROPERTY_STRINGITEMLIST );
    2285           0 :     OSL_VERIFY( aPropValue >>= aStringItemList );
    2286             : 
    2287           0 :     o_rStringItems.resize( size_t( aStringItemList.getLength() ) );
    2288             :     ::std::copy(
    2289             :         aStringItemList.getConstArray(),
    2290           0 :         aStringItemList.getConstArray() + aStringItemList.getLength(),
    2291             :         o_rStringItems.begin()
    2292           0 :     );
    2293           0 : }
    2294             : 
    2295             : 
    2296           0 : void UnoControlListBoxModel::impl_setStringItemList_nolck( const ::std::vector< OUString >& i_rStringItems )
    2297             : {
    2298           0 :     Sequence< OUString > aStringItems( i_rStringItems.size() );
    2299             :     ::std::copy(
    2300             :         i_rStringItems.begin(),
    2301             :         i_rStringItems.end(),
    2302             :         aStringItems.getArray()
    2303           0 :     );
    2304           0 :     m_pData->m_bSettingLegacyProperty = true;
    2305             :     try
    2306             :     {
    2307           0 :         setFastPropertyValue( BASEPROPERTY_STRINGITEMLIST, uno::makeAny( aStringItems ) );
    2308             :     }
    2309           0 :     catch( const Exception& )
    2310             :     {
    2311           0 :         m_pData->m_bSettingLegacyProperty = false;
    2312           0 :         throw;
    2313             :     }
    2314           0 :     m_pData->m_bSettingLegacyProperty = false;
    2315           0 : }
    2316             : 
    2317             : 
    2318           0 : void UnoControlListBoxModel::impl_handleInsert( const sal_Int32 i_nItemPosition, const ::boost::optional< OUString >& i_rItemText,
    2319             :         const ::boost::optional< OUString >& i_rItemImageURL, ::osl::ClearableMutexGuard& i_rClearBeforeNotify )
    2320             : {
    2321             :     // SYNCHRONIZED ----->
    2322             :     // sync with legacy StringItemList property
    2323           0 :     ::std::vector< OUString > aStringItems;
    2324           0 :     impl_getStringItemList( aStringItems );
    2325             :     OSL_ENSURE( size_t( i_nItemPosition ) <= aStringItems.size(), "UnoControlListBoxModel::impl_handleInsert" );
    2326           0 :     if ( size_t( i_nItemPosition ) <= aStringItems.size() )
    2327             :     {
    2328           0 :         const OUString sItemText( !!i_rItemText ? *i_rItemText : OUString() );
    2329           0 :         aStringItems.insert( aStringItems.begin() + i_nItemPosition, sItemText );
    2330             :     }
    2331             : 
    2332           0 :     i_rClearBeforeNotify.clear();
    2333             :     // <----- SYNCHRONIZED
    2334           0 :     impl_setStringItemList_nolck( aStringItems );
    2335             : 
    2336             :     // notify ItemListListeners
    2337           0 :     impl_notifyItemListEvent_nolck( i_nItemPosition, i_rItemText, i_rItemImageURL, &XItemListListener::listItemInserted );
    2338           0 : }
    2339             : 
    2340             : 
    2341           0 : void UnoControlListBoxModel::impl_handleRemove( const sal_Int32 i_nItemPosition, ::osl::ClearableMutexGuard& i_rClearBeforeNotify )
    2342             : {
    2343             :     // SYNCHRONIZED ----->
    2344           0 :     const bool bAllItems = ( i_nItemPosition < 0 );
    2345             :     // sync with legacy StringItemList property
    2346           0 :     ::std::vector< OUString > aStringItems;
    2347           0 :     impl_getStringItemList( aStringItems );
    2348           0 :     if ( !bAllItems )
    2349             :     {
    2350             :         OSL_ENSURE( size_t( i_nItemPosition ) < aStringItems.size(), "UnoControlListBoxModel::impl_handleRemove" );
    2351           0 :         if ( size_t( i_nItemPosition ) < aStringItems.size() )
    2352             :         {
    2353           0 :             aStringItems.erase( aStringItems.begin() + i_nItemPosition );
    2354             :         }
    2355             :     }
    2356             :     else
    2357             :     {
    2358           0 :         aStringItems.resize(0);
    2359             :     }
    2360             : 
    2361           0 :     i_rClearBeforeNotify.clear();
    2362             :     // <----- SYNCHRONIZED
    2363           0 :     impl_setStringItemList_nolck( aStringItems );
    2364             : 
    2365             :     // notify ItemListListeners
    2366           0 :     if ( bAllItems )
    2367             :     {
    2368           0 :         EventObject aEvent( *this );
    2369           0 :         m_aItemListListeners.notifyEach( &XItemListListener::allItemsRemoved, aEvent );
    2370             :     }
    2371             :     else
    2372             :     {
    2373             :         impl_notifyItemListEvent_nolck( i_nItemPosition, ::boost::optional< OUString >(), ::boost::optional< OUString >(),
    2374           0 :             &XItemListListener::listItemRemoved );
    2375           0 :     }
    2376           0 : }
    2377             : 
    2378             : 
    2379           0 : void UnoControlListBoxModel::impl_handleModify( const sal_Int32 i_nItemPosition, const ::boost::optional< OUString >& i_rItemText,
    2380             :         const ::boost::optional< OUString >& i_rItemImageURL, ::osl::ClearableMutexGuard& i_rClearBeforeNotify )
    2381             : {
    2382             :     // SYNCHRONIZED ----->
    2383           0 :     if ( !!i_rItemText )
    2384             :     {
    2385             :         // sync with legacy StringItemList property
    2386           0 :         ::std::vector< OUString > aStringItems;
    2387           0 :         impl_getStringItemList( aStringItems );
    2388             :         OSL_ENSURE( size_t( i_nItemPosition ) < aStringItems.size(), "UnoControlListBoxModel::impl_handleModify" );
    2389           0 :         if ( size_t( i_nItemPosition ) < aStringItems.size() )
    2390             :         {
    2391           0 :             aStringItems[ i_nItemPosition] = *i_rItemText;
    2392             :         }
    2393             : 
    2394           0 :         i_rClearBeforeNotify.clear();
    2395             :         // <----- SYNCHRONIZED
    2396           0 :         impl_setStringItemList_nolck( aStringItems );
    2397             :     }
    2398             :     else
    2399             :     {
    2400           0 :         i_rClearBeforeNotify.clear();
    2401             :         // <----- SYNCHRONIZED
    2402             :     }
    2403             : 
    2404             :     // notify ItemListListeners
    2405           0 :     impl_notifyItemListEvent_nolck( i_nItemPosition, i_rItemText, i_rItemImageURL, &XItemListListener::listItemModified );
    2406           0 : }
    2407             : 
    2408             : 
    2409           0 : void UnoControlListBoxModel::impl_notifyItemListEvent_nolck( const sal_Int32 i_nItemPosition, const ::boost::optional< OUString >& i_rItemText,
    2410             :     const ::boost::optional< OUString >& i_rItemImageURL,
    2411             :     void ( SAL_CALL XItemListListener::*NotificationMethod )( const ItemListEvent& ) )
    2412             : {
    2413           0 :     ItemListEvent aEvent;
    2414           0 :     aEvent.Source = *this;
    2415           0 :     aEvent.ItemPosition = i_nItemPosition;
    2416           0 :     if ( !!i_rItemText )
    2417             :     {
    2418           0 :         aEvent.ItemText.IsPresent = sal_True;
    2419           0 :         aEvent.ItemText.Value = *i_rItemText;
    2420             :     }
    2421           0 :     if ( !!i_rItemImageURL )
    2422             :     {
    2423           0 :         aEvent.ItemImageURL.IsPresent = sal_True;
    2424           0 :         aEvent.ItemImageURL.Value = *i_rItemImageURL;
    2425             :     }
    2426             : 
    2427           0 :     m_aItemListListeners.notifyEach( NotificationMethod, aEvent );
    2428           0 : }
    2429             : 
    2430             : extern "C" SAL_DLLPUBLIC_EXPORT css::uno::XInterface * SAL_CALL
    2431          26 : stardiv_Toolkit_UnoControlListBoxModel_get_implementation(
    2432             :     css::uno::XComponentContext *context,
    2433             :     css::uno::Sequence<css::uno::Any> const &)
    2434             : {
    2435          26 :     return cppu::acquire(new UnoControlListBoxModel(context));
    2436             : }
    2437             : 
    2438             : 
    2439             : //  class UnoListBoxControl
    2440             : 
    2441          36 : UnoListBoxControl::UnoListBoxControl()
    2442             :     :UnoListBoxControl_Base()
    2443             :     ,maActionListeners( *this )
    2444          36 :     ,maItemListeners( *this )
    2445             : {
    2446          36 :     maComponentInfos.nWidth = 100;
    2447          36 :     maComponentInfos.nHeight = 12;
    2448          36 : }
    2449             : 
    2450          40 : OUString UnoListBoxControl::GetComponentServiceName()
    2451             : {
    2452          40 :     return OUString("listbox");
    2453             : }
    2454           0 : IMPL_SERVICEINFO_DERIVED( UnoListBoxControl, UnoControlBase, szServiceName2_UnoControlListBox )
    2455             : 
    2456          16 : void UnoListBoxControl::dispose() throw(uno::RuntimeException, std::exception)
    2457             : {
    2458          16 :     lang::EventObject aEvt;
    2459          16 :     aEvt.Source = (::cppu::OWeakObject*)this;
    2460          16 :     maActionListeners.disposeAndClear( aEvt );
    2461          16 :     maItemListeners.disposeAndClear( aEvt );
    2462          16 :     UnoControl::dispose();
    2463          16 : }
    2464             : 
    2465           0 : void UnoListBoxControl::ImplUpdateSelectedItemsProperty()
    2466             : {
    2467           0 :     if ( getPeer().is() )
    2468             :     {
    2469           0 :         uno::Reference < awt::XListBox > xListBox( getPeer(), uno::UNO_QUERY );
    2470             :         DBG_ASSERT( xListBox.is(), "XListBox?" );
    2471             : 
    2472           0 :         uno::Sequence<sal_Int16> aSeq = xListBox->getSelectedItemsPos();
    2473           0 :         uno::Any aAny;
    2474           0 :         aAny <<= aSeq;
    2475           0 :         ImplSetPropertyValue( GetPropertyName( BASEPROPERTY_SELECTEDITEMS ), aAny, false );
    2476             :     }
    2477           0 : }
    2478             : 
    2479          40 : void UnoListBoxControl::updateFromModel()
    2480             : {
    2481          40 :     UnoControlBase::updateFromModel();
    2482             : 
    2483          40 :     Reference< XItemListListener > xItemListListener( getPeer(), UNO_QUERY );
    2484          80 :     ENSURE_OR_RETURN_VOID( xItemListListener.is(), "UnoListBoxControl::updateFromModel: a peer which is no ItemListListener?!" );
    2485             : 
    2486          80 :     EventObject aEvent( getModel() );
    2487          40 :     xItemListListener->itemListChanged( aEvent );
    2488             : 
    2489             :     // notify the change of the SelectedItems property, again. While our base class, in updateFromModel,
    2490             :     // already did this, our peer(s) can only legitimately set the selection after they have the string
    2491             :     // item list, which we just notified with the itemListChanged call.
    2492          80 :     const OUString sSelectedItemsPropName( GetPropertyName( BASEPROPERTY_SELECTEDITEMS ) );
    2493          80 :     ImplSetPeerProperty( sSelectedItemsPropName, ImplGetPropertyValue( sSelectedItemsPropName ) );
    2494             : }
    2495             : 
    2496        3601 : void UnoListBoxControl::ImplSetPeerProperty( const OUString& rPropName, const uno::Any& rVal )
    2497             : {
    2498        3601 :     if ( rPropName == GetPropertyName( BASEPROPERTY_STRINGITEMLIST ) )
    2499             :         // do not forward this to our peer. We are a XItemListListener at our model, and changes in the string item
    2500             :         // list (which is a legacy property) will, later, arrive as changes in the ItemList. Those latter changes
    2501             :         // will be forwarded to the peer, which will update itself accordingly.
    2502        3717 :         return;
    2503             : 
    2504        3485 :     UnoControl::ImplSetPeerProperty( rPropName, rVal );
    2505             : }
    2506             : 
    2507          40 : void UnoListBoxControl::createPeer( const uno::Reference< awt::XToolkit > & rxToolkit, const uno::Reference< awt::XWindowPeer >  & rParentPeer ) throw(uno::RuntimeException, std::exception)
    2508             : {
    2509          40 :     UnoControl::createPeer( rxToolkit, rParentPeer );
    2510             : 
    2511          40 :     uno::Reference < awt::XListBox >  xListBox( getPeer(), uno::UNO_QUERY );
    2512          40 :     xListBox->addItemListener( this );
    2513             : 
    2514          40 :     if ( maActionListeners.getLength() )
    2515           0 :         xListBox->addActionListener( &maActionListeners );
    2516          40 : }
    2517             : 
    2518           2 : void UnoListBoxControl::addActionListener(const uno::Reference< awt::XActionListener > & l) throw(uno::RuntimeException, std::exception)
    2519             : {
    2520           2 :     maActionListeners.addInterface( l );
    2521           2 :     if( getPeer().is() && maActionListeners.getLength() == 1 )
    2522             :     {
    2523           2 :         uno::Reference < awt::XListBox >  xListBox( getPeer(), uno::UNO_QUERY );
    2524           2 :         xListBox->addActionListener( &maActionListeners );
    2525             :     }
    2526           2 : }
    2527             : 
    2528           0 : void UnoListBoxControl::removeActionListener(const uno::Reference< awt::XActionListener > & l) throw(uno::RuntimeException, std::exception)
    2529             : {
    2530           0 :     if( getPeer().is() && maActionListeners.getLength() == 1 )
    2531             :     {
    2532           0 :         uno::Reference < awt::XListBox >  xListBox( getPeer(), uno::UNO_QUERY );
    2533           0 :         xListBox->removeActionListener( &maActionListeners );
    2534             :     }
    2535           0 :     maActionListeners.removeInterface( l );
    2536           0 : }
    2537             : 
    2538          36 : void UnoListBoxControl::addItemListener(const uno::Reference < awt::XItemListener > & l) throw(uno::RuntimeException, std::exception)
    2539             : {
    2540          36 :     maItemListeners.addInterface( l );
    2541          36 : }
    2542             : 
    2543           0 : void UnoListBoxControl::removeItemListener(const uno::Reference < awt::XItemListener > & l) throw(uno::RuntimeException, std::exception)
    2544             : {
    2545           0 :     maItemListeners.removeInterface( l );
    2546           0 : }
    2547             : 
    2548           0 : void UnoListBoxControl::addItem( const OUString& aItem, sal_Int16 nPos ) throw(uno::RuntimeException, std::exception)
    2549             : {
    2550           0 :     uno::Sequence< OUString> aSeq( 1 );
    2551           0 :     aSeq.getArray()[0] = aItem;
    2552           0 :     addItems( aSeq, nPos );
    2553           0 : }
    2554             : 
    2555           0 : void UnoListBoxControl::addItems( const uno::Sequence< OUString>& aItems, sal_Int16 nPos ) throw(uno::RuntimeException, std::exception)
    2556             : {
    2557           0 :     uno::Any aVal = ImplGetPropertyValue( GetPropertyName( BASEPROPERTY_STRINGITEMLIST ) );
    2558           0 :     uno::Sequence< OUString> aSeq;
    2559           0 :     aVal >>= aSeq;
    2560           0 :     sal_uInt16 nNewItems = (sal_uInt16)aItems.getLength();
    2561           0 :     sal_uInt16 nOldLen = (sal_uInt16)aSeq.getLength();
    2562           0 :     sal_uInt16 nNewLen = nOldLen + nNewItems;
    2563             : 
    2564           0 :     uno::Sequence< OUString> aNewSeq( nNewLen );
    2565           0 :     OUString* pNewData = aNewSeq.getArray();
    2566           0 :     OUString* pOldData = aSeq.getArray();
    2567             : 
    2568           0 :     if ( ( nPos < 0 ) || ( nPos > nOldLen ) )
    2569           0 :         nPos = (sal_uInt16) nOldLen;
    2570             : 
    2571             :     sal_uInt16 n;
    2572             :     // Items vor der Einfuege-Position
    2573           0 :     for ( n = 0; n < nPos; n++ )
    2574           0 :         pNewData[n] = pOldData[n];
    2575             : 
    2576             :     // Neue Items
    2577           0 :     for ( n = 0; n < nNewItems; n++ )
    2578           0 :         pNewData[nPos+n] = aItems.getConstArray()[n];
    2579             : 
    2580             :     // Rest der alten Items
    2581           0 :     for ( n = nPos; n < nOldLen; n++ )
    2582           0 :         pNewData[nNewItems+n] = pOldData[n];
    2583             : 
    2584           0 :     uno::Any aAny;
    2585           0 :     aAny <<= aNewSeq;
    2586           0 :     ImplSetPropertyValue( GetPropertyName( BASEPROPERTY_STRINGITEMLIST ), aAny, true );
    2587           0 : }
    2588             : 
    2589           0 : void UnoListBoxControl::removeItems( sal_Int16 nPos, sal_Int16 nCount ) throw(uno::RuntimeException, std::exception)
    2590             : {
    2591           0 :     uno::Any aVal = ImplGetPropertyValue( GetPropertyName( BASEPROPERTY_STRINGITEMLIST ) );
    2592           0 :     uno::Sequence< OUString> aSeq;
    2593           0 :     aVal >>= aSeq;
    2594           0 :     sal_uInt16 nOldLen = (sal_uInt16)aSeq.getLength();
    2595           0 :     if ( nOldLen && ( nPos < nOldLen ) )
    2596             :     {
    2597           0 :         if ( nCount > ( nOldLen-nPos ) )
    2598           0 :             nCount = nOldLen-nPos;
    2599             : 
    2600           0 :         sal_uInt16 nNewLen = nOldLen - nCount;
    2601             : 
    2602           0 :         uno::Sequence< OUString> aNewSeq( nNewLen );
    2603           0 :         OUString* pNewData = aNewSeq.getArray();
    2604           0 :         OUString* pOldData = aSeq.getArray();
    2605             : 
    2606             :         sal_uInt16 n;
    2607             :         // Items vor der Entfern-Position
    2608           0 :         for ( n = 0; n < nPos; n++ )
    2609           0 :             pNewData[n] = pOldData[n];
    2610             : 
    2611             :         // Rest der Items
    2612           0 :         for ( n = nPos; n < (nOldLen-nCount); n++ )
    2613           0 :             pNewData[n] = pOldData[n+nCount];
    2614             : 
    2615           0 :         uno::Any aAny;
    2616           0 :         aAny <<= aNewSeq;
    2617           0 :         ImplSetPropertyValue( GetPropertyName( BASEPROPERTY_STRINGITEMLIST ), aAny, true );
    2618           0 :     }
    2619           0 : }
    2620             : 
    2621           0 : sal_Int16 UnoListBoxControl::getItemCount() throw(uno::RuntimeException, std::exception)
    2622             : {
    2623           0 :     uno::Any aVal = ImplGetPropertyValue( GetPropertyName( BASEPROPERTY_STRINGITEMLIST ) );
    2624           0 :     uno::Sequence< OUString> aSeq;
    2625           0 :     aVal >>= aSeq;
    2626           0 :     return (sal_Int16)aSeq.getLength();
    2627             : }
    2628             : 
    2629           0 : OUString UnoListBoxControl::getItem( sal_Int16 nPos ) throw(uno::RuntimeException, std::exception)
    2630             : {
    2631           0 :     OUString aItem;
    2632           0 :     uno::Any aVal = ImplGetPropertyValue( GetPropertyName( BASEPROPERTY_STRINGITEMLIST ) );
    2633           0 :     uno::Sequence< OUString> aSeq;
    2634           0 :     aVal >>= aSeq;
    2635           0 :     if ( nPos < aSeq.getLength() )
    2636           0 :         aItem = aSeq.getConstArray()[nPos];
    2637           0 :     return aItem;
    2638             : }
    2639             : 
    2640           0 : uno::Sequence< OUString> UnoListBoxControl::getItems() throw(uno::RuntimeException, std::exception)
    2641             : {
    2642           0 :     uno::Any aVal = ImplGetPropertyValue( GetPropertyName( BASEPROPERTY_STRINGITEMLIST ) );
    2643           0 :     uno::Sequence< OUString> aSeq;
    2644           0 :     aVal >>= aSeq;
    2645           0 :     return aSeq;
    2646             : }
    2647             : 
    2648           0 : sal_Int16 UnoListBoxControl::getSelectedItemPos() throw(uno::RuntimeException, std::exception)
    2649             : {
    2650           0 :     sal_Int16 n = -1;
    2651           0 :     if ( getPeer().is() )
    2652             :     {
    2653           0 :         uno::Reference < awt::XListBox >  xListBox( getPeer(), uno::UNO_QUERY );
    2654           0 :         n = xListBox->getSelectedItemPos();
    2655             :     }
    2656           0 :     return n;
    2657             : }
    2658             : 
    2659           0 : uno::Sequence<sal_Int16> UnoListBoxControl::getSelectedItemsPos() throw(uno::RuntimeException, std::exception)
    2660             : {
    2661           0 :     uno::Sequence<sal_Int16> aSeq;
    2662           0 :     if ( getPeer().is() )
    2663             :     {
    2664           0 :         uno::Reference < awt::XListBox >  xListBox( getPeer(), uno::UNO_QUERY );
    2665           0 :         aSeq = xListBox->getSelectedItemsPos();
    2666             :     }
    2667           0 :     return aSeq;
    2668             : }
    2669             : 
    2670           0 : OUString UnoListBoxControl::getSelectedItem() throw(uno::RuntimeException, std::exception)
    2671             : {
    2672           0 :     OUString aItem;
    2673           0 :     if ( getPeer().is() )
    2674             :     {
    2675           0 :         uno::Reference < awt::XListBox >  xListBox( getPeer(), uno::UNO_QUERY );
    2676           0 :         aItem = xListBox->getSelectedItem();
    2677             :     }
    2678           0 :     return aItem;
    2679             : }
    2680             : 
    2681           0 : uno::Sequence< OUString> UnoListBoxControl::getSelectedItems() throw(uno::RuntimeException, std::exception)
    2682             : {
    2683           0 :     uno::Sequence< OUString> aSeq;
    2684           0 :     if ( getPeer().is() )
    2685             :     {
    2686           0 :         uno::Reference < awt::XListBox >  xListBox( getPeer(), uno::UNO_QUERY );
    2687           0 :         aSeq = xListBox->getSelectedItems();
    2688             :     }
    2689           0 :     return aSeq;
    2690             : }
    2691             : 
    2692           0 : void UnoListBoxControl::selectItemPos( sal_Int16 nPos, sal_Bool bSelect ) throw(uno::RuntimeException, std::exception)
    2693             : {
    2694           0 :     if ( getPeer().is() )
    2695             :     {
    2696           0 :         uno::Reference < awt::XListBox >  xListBox( getPeer(), uno::UNO_QUERY );
    2697           0 :         xListBox->selectItemPos( nPos, bSelect );
    2698             :     }
    2699           0 :     ImplUpdateSelectedItemsProperty();
    2700           0 : }
    2701             : 
    2702           0 : void UnoListBoxControl::selectItemsPos( const uno::Sequence<sal_Int16>& aPositions, sal_Bool bSelect ) throw(uno::RuntimeException, std::exception)
    2703             : {
    2704           0 :     if ( getPeer().is() )
    2705             :     {
    2706           0 :         uno::Reference < awt::XListBox >  xListBox( getPeer(), uno::UNO_QUERY );
    2707           0 :         xListBox->selectItemsPos( aPositions, bSelect );
    2708             :     }
    2709           0 :     ImplUpdateSelectedItemsProperty();
    2710           0 : }
    2711             : 
    2712           0 : void UnoListBoxControl::selectItem( const OUString& aItem, sal_Bool bSelect ) throw(uno::RuntimeException, std::exception)
    2713             : {
    2714           0 :     if ( getPeer().is() )
    2715             :     {
    2716           0 :         uno::Reference < awt::XListBox >  xListBox( getPeer(), uno::UNO_QUERY );
    2717           0 :         xListBox->selectItem( aItem, bSelect );
    2718             :     }
    2719           0 :     ImplUpdateSelectedItemsProperty();
    2720           0 : }
    2721             : 
    2722           0 : void UnoListBoxControl::makeVisible( sal_Int16 nEntry ) throw(uno::RuntimeException, std::exception)
    2723             : {
    2724           0 :     if ( getPeer().is() )
    2725             :     {
    2726           0 :         uno::Reference < awt::XListBox >  xListBox( getPeer(), uno::UNO_QUERY );
    2727           0 :         xListBox->makeVisible( nEntry );
    2728             :     }
    2729           0 : }
    2730             : 
    2731           0 : void UnoListBoxControl::setDropDownLineCount( sal_Int16 nLines ) throw(uno::RuntimeException, std::exception)
    2732             : {
    2733           0 :     uno::Any aAny;
    2734           0 :     aAny <<= (sal_Int16)nLines;
    2735           0 :     ImplSetPropertyValue( GetPropertyName( BASEPROPERTY_LINECOUNT ), aAny, true );
    2736           0 : }
    2737             : 
    2738           0 : sal_Int16 UnoListBoxControl::getDropDownLineCount() throw(uno::RuntimeException, std::exception)
    2739             : {
    2740           0 :     return ImplGetPropertyValue_INT16( BASEPROPERTY_LINECOUNT );
    2741             : }
    2742             : 
    2743           0 : sal_Bool UnoListBoxControl::isMutipleMode() throw(uno::RuntimeException, std::exception)
    2744             : {
    2745           0 :     return ImplGetPropertyValue_BOOL( BASEPROPERTY_MULTISELECTION );
    2746             : }
    2747             : 
    2748           0 : void UnoListBoxControl::setMultipleMode( sal_Bool bMulti ) throw(uno::RuntimeException, std::exception)
    2749             : {
    2750           0 :     uno::Any aAny;
    2751           0 :     aAny <<= bMulti;
    2752           0 :     ImplSetPropertyValue( GetPropertyName( BASEPROPERTY_MULTISELECTION ), aAny, true );
    2753           0 : }
    2754             : 
    2755           0 : void UnoListBoxControl::itemStateChanged( const awt::ItemEvent& rEvent ) throw(uno::RuntimeException, std::exception)
    2756             : {
    2757           0 :     ImplUpdateSelectedItemsProperty();
    2758           0 :     if ( maItemListeners.getLength() )
    2759             :     {
    2760             :         try
    2761             :         {
    2762           0 :             maItemListeners.itemStateChanged( rEvent );
    2763             :         }
    2764           0 :         catch( const Exception& e )
    2765             :         {
    2766             : #if OSL_DEBUG_LEVEL == 0
    2767             :             (void) e; // suppress warning
    2768             : #else
    2769             :             OString sMessage( "UnoListBoxControl::itemStateChanged: caught an exception:\n" );
    2770             :             sMessage += OString( e.Message.getStr(), e.Message.getLength(), RTL_TEXTENCODING_ASCII_US );
    2771             :             OSL_FAIL( sMessage.getStr() );
    2772             : #endif
    2773             :         }
    2774             :     }
    2775           0 : }
    2776             : 
    2777           0 : awt::Size UnoListBoxControl::getMinimumSize(  ) throw(uno::RuntimeException, std::exception)
    2778             : {
    2779           0 :     return Impl_getMinimumSize();
    2780             : }
    2781             : 
    2782           0 : awt::Size UnoListBoxControl::getPreferredSize(  ) throw(uno::RuntimeException, std::exception)
    2783             : {
    2784           0 :     return Impl_getPreferredSize();
    2785             : }
    2786             : 
    2787           0 : awt::Size UnoListBoxControl::calcAdjustedSize( const awt::Size& rNewSize ) throw(uno::RuntimeException, std::exception)
    2788             : {
    2789           0 :     return Impl_calcAdjustedSize( rNewSize );
    2790             : }
    2791             : 
    2792           0 : awt::Size UnoListBoxControl::getMinimumSize( sal_Int16 nCols, sal_Int16 nLines ) throw(uno::RuntimeException, std::exception)
    2793             : {
    2794           0 :     return Impl_getMinimumSize( nCols, nLines );
    2795             : }
    2796             : 
    2797           0 : void UnoListBoxControl::getColumnsAndLines( sal_Int16& nCols, sal_Int16& nLines ) throw(uno::RuntimeException, std::exception)
    2798             : {
    2799           0 :     Impl_getColumnsAndLines( nCols, nLines );
    2800           0 : }
    2801             : 
    2802          30 : sal_Bool SAL_CALL UnoListBoxControl::setModel( const uno::Reference< awt::XControlModel >& i_rModel ) throw ( uno::RuntimeException, std::exception )
    2803             : {
    2804          30 :     ::osl::MutexGuard aGuard( GetMutex() );
    2805             : 
    2806          60 :     const Reference< XItemList > xOldItems( getModel(), UNO_QUERY );
    2807             :     OSL_ENSURE( xOldItems.is() || !getModel().is(), "UnoListBoxControl::setModel: illegal old model!" );
    2808          60 :     const Reference< XItemList > xNewItems( i_rModel, UNO_QUERY );
    2809             :     OSL_ENSURE( xNewItems.is() || !i_rModel.is(), "UnoListBoxControl::setModel: illegal new model!" );
    2810             : 
    2811          30 :     if ( !UnoListBoxControl_Base::setModel( i_rModel ) )
    2812          16 :         return sal_False;
    2813             : 
    2814          14 :     if ( xOldItems.is() )
    2815           0 :         xOldItems->removeItemListListener( this );
    2816          14 :     if ( xNewItems.is() )
    2817          14 :         xNewItems->addItemListListener( this );
    2818             : 
    2819          44 :     return sal_True;
    2820             : }
    2821             : 
    2822           0 : void SAL_CALL UnoListBoxControl::listItemInserted( const awt::ItemListEvent& i_rEvent ) throw (uno::RuntimeException, std::exception)
    2823             : {
    2824           0 :     const Reference< XItemListListener > xPeerListener( getPeer(), UNO_QUERY );
    2825             :     OSL_ENSURE( xPeerListener.is() || !getPeer().is(), "UnoListBoxControl::listItemInserted: invalid peer!" );
    2826           0 :     if ( xPeerListener.is() )
    2827           0 :         xPeerListener->listItemInserted( i_rEvent );
    2828           0 : }
    2829             : 
    2830           0 : void SAL_CALL UnoListBoxControl::listItemRemoved( const awt::ItemListEvent& i_rEvent ) throw (uno::RuntimeException, std::exception)
    2831             : {
    2832           0 :     const Reference< XItemListListener > xPeerListener( getPeer(), UNO_QUERY );
    2833             :     OSL_ENSURE( xPeerListener.is() || !getPeer().is(), "UnoListBoxControl::listItemRemoved: invalid peer!" );
    2834           0 :     if ( xPeerListener.is() )
    2835           0 :         xPeerListener->listItemRemoved( i_rEvent );
    2836           0 : }
    2837             : 
    2838           0 : void SAL_CALL UnoListBoxControl::listItemModified( const awt::ItemListEvent& i_rEvent ) throw (uno::RuntimeException, std::exception)
    2839             : {
    2840           0 :     const Reference< XItemListListener > xPeerListener( getPeer(), UNO_QUERY );
    2841             :     OSL_ENSURE( xPeerListener.is() || !getPeer().is(), "UnoListBoxControl::listItemModified: invalid peer!" );
    2842           0 :     if ( xPeerListener.is() )
    2843           0 :         xPeerListener->listItemModified( i_rEvent );
    2844           0 : }
    2845             : 
    2846           0 : void SAL_CALL UnoListBoxControl::allItemsRemoved( const lang::EventObject& i_rEvent ) throw (uno::RuntimeException, std::exception)
    2847             : {
    2848           0 :     const Reference< XItemListListener > xPeerListener( getPeer(), UNO_QUERY );
    2849             :     OSL_ENSURE( xPeerListener.is() || !getPeer().is(), "UnoListBoxControl::allItemsRemoved: invalid peer!" );
    2850           0 :     if ( xPeerListener.is() )
    2851           0 :         xPeerListener->allItemsRemoved( i_rEvent );
    2852           0 : }
    2853             : 
    2854          38 : void SAL_CALL UnoListBoxControl::itemListChanged( const lang::EventObject& i_rEvent ) throw (uno::RuntimeException, std::exception)
    2855             : {
    2856          38 :     const Reference< XItemListListener > xPeerListener( getPeer(), UNO_QUERY );
    2857             :     OSL_ENSURE( xPeerListener.is() || !getPeer().is(), "UnoListBoxControl::itemListChanged: invalid peer!" );
    2858          38 :     if ( xPeerListener.is() )
    2859          38 :         xPeerListener->itemListChanged( i_rEvent );
    2860          38 : }
    2861             : 
    2862             : extern "C" SAL_DLLPUBLIC_EXPORT css::uno::XInterface * SAL_CALL
    2863          36 : stardiv_Toolkit_UnoListBoxControl_get_implementation(
    2864             :     css::uno::XComponentContext *,
    2865             :     css::uno::Sequence<css::uno::Any> const &)
    2866             : {
    2867          36 :     return cppu::acquire(new UnoListBoxControl());
    2868             : }
    2869             : 
    2870             : 
    2871             : //  class UnoControlComboBoxModel
    2872             : 
    2873          66 : UnoControlComboBoxModel::UnoControlComboBoxModel( const Reference< XComponentContext >& rxContext )
    2874          66 :     :UnoControlListBoxModel( rxContext, ConstructWithoutProperties )
    2875             : {
    2876          66 :     UNO_CONTROL_MODEL_REGISTER_PROPERTIES( VCLXComboBox );
    2877          66 : }
    2878             : 
    2879          68 : IMPL_SERVICEINFO_DERIVED( UnoControlComboBoxModel, UnoControlModel, szServiceName2_UnoControlComboBoxModel )
    2880             : 
    2881         234 : uno::Reference< beans::XPropertySetInfo > UnoControlComboBoxModel::getPropertySetInfo(  ) throw(uno::RuntimeException, std::exception)
    2882             : {
    2883         234 :     static uno::Reference< beans::XPropertySetInfo > xInfo( createPropertySetInfo( getInfoHelper() ) );
    2884         234 :     return xInfo;
    2885             : }
    2886             : 
    2887       12991 : ::cppu::IPropertyArrayHelper& UnoControlComboBoxModel::getInfoHelper()
    2888             : {
    2889             :     static UnoPropertyArrayHelper* pHelper = NULL;
    2890       12991 :     if ( !pHelper )
    2891             :     {
    2892          16 :         uno::Sequence<sal_Int32>    aIDs = ImplGetPropertyIds();
    2893          16 :         pHelper = new UnoPropertyArrayHelper( aIDs );
    2894             :     }
    2895       12991 :     return *pHelper;
    2896             : }
    2897             : 
    2898             : 
    2899           2 : OUString UnoControlComboBoxModel::getServiceName() throw(::com::sun::star::uno::RuntimeException, std::exception)
    2900             : {
    2901           2 :     return OUString::createFromAscii( szServiceName_UnoControlComboBoxModel );
    2902             : }
    2903        1414 : void SAL_CALL UnoControlComboBoxModel::setFastPropertyValue_NoBroadcast( sal_Int32 nHandle, const uno::Any& rValue ) throw (uno::Exception, std::exception)
    2904             : {
    2905        1414 :     UnoControlModel::setFastPropertyValue_NoBroadcast( nHandle, rValue );
    2906             : 
    2907        1414 :     if ( nHandle == BASEPROPERTY_STRINGITEMLIST && !m_pData->m_bSettingLegacyProperty)
    2908             :     {
    2909             :         // synchronize the legacy StringItemList property with our list items
    2910          86 :         Sequence< OUString > aStringItemList;
    2911         172 :         Any aPropValue;
    2912          86 :         getFastPropertyValue( aPropValue, BASEPROPERTY_STRINGITEMLIST );
    2913          86 :         OSL_VERIFY( aPropValue >>= aStringItemList );
    2914             : 
    2915         172 :         ::std::vector< ListItem > aItems( aStringItemList.getLength() );
    2916             :         ::std::transform(
    2917             :             aStringItemList.getConstArray(),
    2918          86 :             aStringItemList.getConstArray() + aStringItemList.getLength(),
    2919             :             aItems.begin(),
    2920             :             CreateListItem()
    2921         172 :         );
    2922          86 :         m_pData->setAllItems( aItems );
    2923             : 
    2924             :         // since an XItemListListener does not have a "all items modified" or some such method,
    2925             :         // we simulate this by notifying removal of all items, followed by insertion of all new
    2926             :         // items
    2927         172 :         lang::EventObject aEvent;
    2928          86 :         aEvent.Source = *this;
    2929         172 :         m_aItemListListeners.notifyEach( &XItemListListener::itemListChanged, aEvent );
    2930             :         // TODO: OPropertySetHelper calls into this method with the mutex locked ...
    2931             :         // which is wrong for the above notifications ...
    2932             :     }
    2933        1414 : }
    2934             : 
    2935        1998 : uno::Any UnoControlComboBoxModel::ImplGetDefaultValue( sal_uInt16 nPropId ) const
    2936             : {
    2937        1998 :     if ( nPropId == BASEPROPERTY_DEFAULTCONTROL )
    2938             :     {
    2939          70 :         uno::Any aAny;
    2940          70 :         aAny <<= OUString::createFromAscii( szServiceName_UnoControlComboBox );
    2941          70 :         return aAny;
    2942             :     }
    2943        1928 :     return UnoControlModel::ImplGetDefaultValue( nPropId );
    2944             : }
    2945             : 
    2946             : extern "C" SAL_DLLPUBLIC_EXPORT css::uno::XInterface * SAL_CALL
    2947          64 : stardiv_Toolkit_UnoControlComboBoxModel_get_implementation(
    2948             :     css::uno::XComponentContext *context,
    2949             :     css::uno::Sequence<css::uno::Any> const &)
    2950             : {
    2951          64 :     return cppu::acquire(new UnoControlComboBoxModel(context));
    2952             : }
    2953             : 
    2954             : 
    2955             : //  class UnoComboBoxControl
    2956             : 
    2957          34 : UnoComboBoxControl::UnoComboBoxControl()
    2958             :     :UnoEditControl()
    2959             :     ,maActionListeners( *this )
    2960          34 :     ,maItemListeners( *this )
    2961             : {
    2962          34 :     maComponentInfos.nWidth = 100;
    2963          34 :     maComponentInfos.nHeight = 12;
    2964          34 : }
    2965           2 : IMPL_SERVICEINFO_DERIVED( UnoComboBoxControl, UnoEditControl, szServiceName2_UnoControlComboBox )
    2966             : 
    2967          46 : OUString UnoComboBoxControl::GetComponentServiceName()
    2968             : {
    2969          46 :     return OUString("combobox");
    2970             : }
    2971             : 
    2972          36 : void UnoComboBoxControl::dispose() throw(uno::RuntimeException, std::exception)
    2973             : {
    2974          36 :     lang::EventObject aEvt;
    2975          36 :     aEvt.Source = (::cppu::OWeakObject*)this;
    2976          36 :     maActionListeners.disposeAndClear( aEvt );
    2977          36 :     maItemListeners.disposeAndClear( aEvt );
    2978          36 :     UnoControl::dispose();
    2979          36 : }
    2980        1056 : uno::Any UnoComboBoxControl::queryAggregation( const uno::Type & rType ) throw(uno::RuntimeException, std::exception)
    2981             : {
    2982             :     uno::Any aRet = ::cppu::queryInterface( rType,
    2983        1056 :                                         (static_cast< awt::XComboBox* >(this)) );
    2984        1056 :     if ( !aRet.hasValue() )
    2985             :     {
    2986        2096 :         aRet = ::cppu::queryInterface( rType,
    2987        1048 :                                         (static_cast< awt::XItemListener* >(this)) );
    2988        1048 :         if ( !aRet.hasValue() )
    2989             :         {
    2990        2096 :             aRet = ::cppu::queryInterface( rType,
    2991        1048 :                                             (static_cast< awt::XItemListListener* >(this)) );
    2992             :         }
    2993             :     }
    2994        1056 :     return (aRet.hasValue() ? aRet : UnoEditControl::queryAggregation( rType ));
    2995             : }
    2996             : // lang::XTypeProvider
    2997          50 : IMPL_XTYPEPROVIDER_START( UnoComboBoxControl )
    2998           2 :     cppu::UnoType<awt::XComboBox>::get(),
    2999           2 :     cppu::UnoType<awt::XItemListener>::get(),
    3000           2 :     cppu::UnoType<awt::XItemListListener>::get(),
    3001             :     UnoEditControl::getTypes()
    3002           4 : IMPL_XTYPEPROVIDER_END
    3003             : 
    3004          46 : void UnoComboBoxControl::updateFromModel()
    3005             : {
    3006          46 :     UnoEditControl::updateFromModel();
    3007             : 
    3008          46 :     Reference< XItemListListener > xItemListListener( getPeer(), UNO_QUERY );
    3009          92 :     ENSURE_OR_RETURN_VOID( xItemListListener.is(), "UnoComboBoxControl::updateFromModel: a peer which is no ItemListListener?!" );
    3010             : 
    3011          92 :     EventObject aEvent( getModel() );
    3012          92 :     xItemListListener->itemListChanged( aEvent );
    3013             : }
    3014        3801 : void UnoComboBoxControl::ImplSetPeerProperty( const OUString& rPropName, const uno::Any& rVal )
    3015             : {
    3016        3801 :     if ( rPropName == GetPropertyName( BASEPROPERTY_STRINGITEMLIST ) )
    3017             :         // do not forward this to our peer. We are a XItemListListener at our model, and changes in the string item
    3018             :         // list (which is a legacy property) will, later, arrive as changes in the ItemList. Those latter changes
    3019             :         // will be forwarded to the peer, which will update itself accordingly.
    3020        3915 :         return;
    3021             : 
    3022        3687 :     UnoEditControl::ImplSetPeerProperty( rPropName, rVal );
    3023             : }
    3024          50 : void UnoComboBoxControl::createPeer( const uno::Reference< awt::XToolkit > & rxToolkit, const uno::Reference< awt::XWindowPeer >  & rParentPeer ) throw(uno::RuntimeException, std::exception)
    3025             : {
    3026          50 :     UnoEditControl::createPeer( rxToolkit, rParentPeer );
    3027             : 
    3028          50 :     uno::Reference < awt::XComboBox >  xComboBox( getPeer(), uno::UNO_QUERY );
    3029          50 :     if ( maActionListeners.getLength() )
    3030           0 :         xComboBox->addActionListener( &maActionListeners );
    3031          50 :     if ( maItemListeners.getLength() )
    3032           0 :         xComboBox->addItemListener( &maItemListeners );
    3033          50 : }
    3034             : 
    3035           6 : void UnoComboBoxControl::addActionListener(const uno::Reference< awt::XActionListener > & l) throw(uno::RuntimeException, std::exception)
    3036             : {
    3037           6 :     maActionListeners.addInterface( l );
    3038           6 :     if( getPeer().is() && maActionListeners.getLength() == 1 )
    3039             :     {
    3040           6 :         uno::Reference < awt::XComboBox >  xComboBox( getPeer(), uno::UNO_QUERY );
    3041           6 :         xComboBox->addActionListener( &maActionListeners );
    3042             :     }
    3043           6 : }
    3044             : 
    3045           0 : void UnoComboBoxControl::removeActionListener(const uno::Reference< awt::XActionListener > & l) throw(uno::RuntimeException, std::exception)
    3046             : {
    3047           0 :     if( getPeer().is() && maActionListeners.getLength() == 1 )
    3048             :     {
    3049           0 :         uno::Reference < awt::XComboBox >  xComboBox( getPeer(), uno::UNO_QUERY );
    3050           0 :         xComboBox->removeActionListener( &maActionListeners );
    3051             :     }
    3052           0 :     maActionListeners.removeInterface( l );
    3053           0 : }
    3054             : 
    3055           6 : void UnoComboBoxControl::addItemListener(const uno::Reference < awt::XItemListener > & l) throw(uno::RuntimeException, std::exception)
    3056             : {
    3057           6 :     maItemListeners.addInterface( l );
    3058           6 :     if( getPeer().is() && maItemListeners.getLength() == 1 )
    3059             :     {
    3060           6 :         uno::Reference < awt::XComboBox >  xComboBox( getPeer(), uno::UNO_QUERY );
    3061           6 :         xComboBox->addItemListener( &maItemListeners );
    3062             :     }
    3063           6 : }
    3064             : 
    3065           0 : void UnoComboBoxControl::removeItemListener(const uno::Reference < awt::XItemListener > & l) throw(uno::RuntimeException, std::exception)
    3066             : {
    3067           0 :     if( getPeer().is() && maItemListeners.getLength() == 1 )
    3068             :     {
    3069             :         // This call is prettier than creating a Ref and calling query
    3070           0 :         uno::Reference < awt::XComboBox >  xComboBox( getPeer(), uno::UNO_QUERY );
    3071           0 :         xComboBox->removeItemListener( &maItemListeners );
    3072             :     }
    3073           0 :     maItemListeners.removeInterface( l );
    3074           0 : }
    3075           0 : void UnoComboBoxControl::itemStateChanged( const awt::ItemEvent& rEvent ) throw(uno::RuntimeException, std::exception)
    3076             : {
    3077           0 :     if ( maItemListeners.getLength() )
    3078             :     {
    3079             :         try
    3080             :         {
    3081           0 :             maItemListeners.itemStateChanged( rEvent );
    3082             :         }
    3083           0 :         catch( const Exception& e )
    3084             :         {
    3085             : #if OSL_DEBUG_LEVEL == 0
    3086             :             (void) e; // suppress warning
    3087             : #else
    3088             :             OString sMessage( "UnoComboBoxControl::itemStateChanged: caught an exception:\n" );
    3089             :             sMessage += OString( e.Message.getStr(), e.Message.getLength(), RTL_TEXTENCODING_ASCII_US );
    3090             :             OSL_FAIL( sMessage.getStr() );
    3091             : #endif
    3092             :         }
    3093             :     }
    3094           0 : }
    3095          64 : sal_Bool SAL_CALL UnoComboBoxControl::setModel( const uno::Reference< awt::XControlModel >& i_rModel ) throw ( uno::RuntimeException, std::exception )
    3096             : {
    3097          64 :     ::osl::MutexGuard aGuard( GetMutex() );
    3098             : 
    3099         128 :     const Reference< XItemList > xOldItems( getModel(), UNO_QUERY );
    3100             :     OSL_ENSURE( xOldItems.is() || !getModel().is(), "UnoComboBoxControl::setModel: illegal old model!" );
    3101         128 :     const Reference< XItemList > xNewItems( i_rModel, UNO_QUERY );
    3102             :     OSL_ENSURE( xNewItems.is() || !i_rModel.is(), "UnoComboBoxControl::setModel: illegal new model!" );
    3103             : 
    3104          64 :     if ( !UnoEditControl::setModel( i_rModel ) )
    3105          36 :         return sal_False;
    3106             : 
    3107          28 :     if ( xOldItems.is() )
    3108           8 :         xOldItems->removeItemListListener( this );
    3109          28 :     if ( xNewItems.is() )
    3110          28 :         xNewItems->addItemListListener( this );
    3111             : 
    3112          92 :     return sal_True;
    3113             : }
    3114             : 
    3115           0 : void SAL_CALL UnoComboBoxControl::listItemInserted( const awt::ItemListEvent& i_rEvent ) throw (uno::RuntimeException, std::exception)
    3116             : {
    3117           0 :     const Reference< XItemListListener > xPeerListener( getPeer(), UNO_QUERY );
    3118             :     OSL_ENSURE( xPeerListener.is() || !getPeer().is(), "UnoComboBoxControl::listItemInserted: invalid peer!" );
    3119           0 :     if ( xPeerListener.is() )
    3120           0 :         xPeerListener->listItemInserted( i_rEvent );
    3121           0 : }
    3122             : 
    3123           0 : void SAL_CALL UnoComboBoxControl::listItemRemoved( const awt::ItemListEvent& i_rEvent ) throw (uno::RuntimeException, std::exception)
    3124             : {
    3125           0 :     const Reference< XItemListListener > xPeerListener( getPeer(), UNO_QUERY );
    3126             :     OSL_ENSURE( xPeerListener.is() || !getPeer().is(), "UnoComboBoxControl::listItemRemoved: invalid peer!" );
    3127           0 :     if ( xPeerListener.is() )
    3128           0 :         xPeerListener->listItemRemoved( i_rEvent );
    3129           0 : }
    3130             : 
    3131           0 : void SAL_CALL UnoComboBoxControl::listItemModified( const awt::ItemListEvent& i_rEvent ) throw (uno::RuntimeException, std::exception)
    3132             : {
    3133           0 :     const Reference< XItemListListener > xPeerListener( getPeer(), UNO_QUERY );
    3134             :     OSL_ENSURE( xPeerListener.is() || !getPeer().is(), "UnoComboBoxControl::listItemModified: invalid peer!" );
    3135           0 :     if ( xPeerListener.is() )
    3136           0 :         xPeerListener->listItemModified( i_rEvent );
    3137           0 : }
    3138             : 
    3139           0 : void SAL_CALL UnoComboBoxControl::allItemsRemoved( const lang::EventObject& i_rEvent ) throw (uno::RuntimeException, std::exception)
    3140             : {
    3141           0 :     const Reference< XItemListListener > xPeerListener( getPeer(), UNO_QUERY );
    3142             :     OSL_ENSURE( xPeerListener.is() || !getPeer().is(), "UnoComboBoxControl::allItemsRemoved: invalid peer!" );
    3143           0 :     if ( xPeerListener.is() )
    3144           0 :         xPeerListener->allItemsRemoved( i_rEvent );
    3145           0 : }
    3146             : 
    3147          34 : void SAL_CALL UnoComboBoxControl::itemListChanged( const lang::EventObject& i_rEvent ) throw (uno::RuntimeException, std::exception)
    3148             : {
    3149          34 :     const Reference< XItemListListener > xPeerListener( getPeer(), UNO_QUERY );
    3150             :     OSL_ENSURE( xPeerListener.is() || !getPeer().is(), "UnoComboBoxControl::itemListChanged: invalid peer!" );
    3151          34 :     if ( xPeerListener.is() )
    3152          34 :         xPeerListener->itemListChanged( i_rEvent );
    3153          34 : }
    3154             : 
    3155           4 : void UnoComboBoxControl::addItem( const OUString& aItem, sal_Int16 nPos ) throw(uno::RuntimeException, std::exception)
    3156             : {
    3157           4 :     uno::Sequence< OUString> aSeq( 1 );
    3158           4 :     aSeq.getArray()[0] = aItem;
    3159           4 :     addItems( aSeq, nPos );
    3160           4 : }
    3161             : 
    3162           8 : void UnoComboBoxControl::addItems( const uno::Sequence< OUString>& aItems, sal_Int16 nPos ) throw(uno::RuntimeException, std::exception)
    3163             : {
    3164           8 :     uno::Any aVal = ImplGetPropertyValue( GetPropertyName( BASEPROPERTY_STRINGITEMLIST ) );
    3165          16 :     uno::Sequence< OUString> aSeq;
    3166           8 :     aVal >>= aSeq;
    3167           8 :     sal_uInt16 nNewItems = (sal_uInt16)aItems.getLength();
    3168           8 :     sal_uInt16 nOldLen = (sal_uInt16)aSeq.getLength();
    3169           8 :     sal_uInt16 nNewLen = nOldLen + nNewItems;
    3170             : 
    3171          16 :     uno::Sequence< OUString> aNewSeq( nNewLen );
    3172           8 :     OUString* pNewData = aNewSeq.getArray();
    3173           8 :     const OUString* pOldData = aSeq.getConstArray();
    3174             : 
    3175           8 :     if ( ( nPos < 0 ) || ( nPos > nOldLen ) )
    3176           0 :         nPos = (sal_uInt16) nOldLen;
    3177             : 
    3178             :     sal_uInt16 n;
    3179             :     // items before the insert position
    3180          12 :     for ( n = 0; n < nPos; n++ )
    3181           4 :         pNewData[n] = pOldData[n];
    3182             : 
    3183             :     // New items
    3184          20 :     for ( n = 0; n < nNewItems; n++ )
    3185          12 :         pNewData[nPos+n] = aItems.getConstArray()[n];
    3186             : 
    3187             :     // remainder of old items
    3188           8 :     for ( n = nPos; n < nOldLen; n++ )
    3189           0 :         pNewData[nNewItems+n] = pOldData[n];
    3190             : 
    3191          16 :     uno::Any aAny;
    3192           8 :     aAny <<= aNewSeq;
    3193          16 :     ImplSetPropertyValue( GetPropertyName( BASEPROPERTY_STRINGITEMLIST ), aAny, true );
    3194           8 : }
    3195             : 
    3196           4 : void UnoComboBoxControl::removeItems( sal_Int16 nPos, sal_Int16 nCount ) throw(uno::RuntimeException, std::exception)
    3197             : {
    3198           4 :     uno::Any aVal = ImplGetPropertyValue( GetPropertyName( BASEPROPERTY_STRINGITEMLIST ) );
    3199           8 :     uno::Sequence< OUString> aSeq;
    3200           4 :     aVal >>= aSeq;
    3201           4 :     sal_uInt16 nOldLen = (sal_uInt16)aSeq.getLength();
    3202           4 :     if ( nOldLen && ( nPos < nOldLen ) )
    3203             :     {
    3204           4 :         if ( nCount > ( nOldLen-nPos ) )
    3205           0 :             nCount = nOldLen-nPos;
    3206             : 
    3207           4 :         sal_uInt16 nNewLen = nOldLen - nCount;
    3208             : 
    3209           4 :         uno::Sequence< OUString> aNewSeq( nNewLen );
    3210           4 :         OUString* pNewData = aNewSeq.getArray();
    3211           4 :         OUString* pOldData = aSeq.getArray();
    3212             : 
    3213             :         sal_uInt16 n;
    3214             :         // items before the deletion position
    3215           4 :         for ( n = 0; n < nPos; n++ )
    3216           0 :             pNewData[n] = pOldData[n];
    3217             : 
    3218             :         // remainder of old items
    3219           4 :         for ( n = nPos; n < (nOldLen-nCount); n++ )
    3220           0 :             pNewData[n] = pOldData[n+nCount];
    3221             : 
    3222           8 :         uno::Any aAny;
    3223           4 :         aAny <<= aNewSeq;
    3224           8 :         ImplSetPropertyValue( GetPropertyName( BASEPROPERTY_STRINGITEMLIST ), aAny, true );
    3225           4 :     }
    3226           4 : }
    3227             : 
    3228          24 : sal_Int16 UnoComboBoxControl::getItemCount() throw(uno::RuntimeException, std::exception)
    3229             : {
    3230          24 :     uno::Any aVal = ImplGetPropertyValue( GetPropertyName( BASEPROPERTY_STRINGITEMLIST ) );
    3231          48 :     uno::Sequence< OUString> aSeq;
    3232          24 :     aVal >>= aSeq;
    3233          48 :     return (sal_Int16)aSeq.getLength();
    3234             : }
    3235             : 
    3236           4 : OUString UnoComboBoxControl::getItem( sal_Int16 nPos ) throw(uno::RuntimeException, std::exception)
    3237             : {
    3238           4 :     OUString aItem;
    3239           8 :     uno::Any aVal = ImplGetPropertyValue( GetPropertyName( BASEPROPERTY_STRINGITEMLIST ) );
    3240           8 :     uno::Sequence< OUString> aSeq;
    3241           4 :     aVal >>= aSeq;
    3242           4 :     if ( nPos < aSeq.getLength() )
    3243           4 :         aItem = aSeq.getConstArray()[nPos];
    3244           8 :     return aItem;
    3245             : }
    3246             : 
    3247           4 : uno::Sequence< OUString> UnoComboBoxControl::getItems() throw(uno::RuntimeException, std::exception)
    3248             : {
    3249           4 :     uno::Any aVal = ImplGetPropertyValue( GetPropertyName( BASEPROPERTY_STRINGITEMLIST ) );
    3250           4 :     uno::Sequence< OUString> aSeq;
    3251           4 :     aVal >>= aSeq;
    3252           4 :     return aSeq;
    3253             : }
    3254             : 
    3255           4 : void UnoComboBoxControl::setDropDownLineCount( sal_Int16 nLines ) throw(uno::RuntimeException, std::exception)
    3256             : {
    3257           4 :     uno::Any aAny;
    3258           4 :     aAny <<= nLines;
    3259           4 :     ImplSetPropertyValue( GetPropertyName( BASEPROPERTY_LINECOUNT ), aAny, true );
    3260           4 : }
    3261             : 
    3262           8 : sal_Int16 UnoComboBoxControl::getDropDownLineCount() throw(uno::RuntimeException, std::exception)
    3263             : {
    3264           8 :     return ImplGetPropertyValue_INT16( BASEPROPERTY_LINECOUNT );
    3265             : }
    3266             : 
    3267             : extern "C" SAL_DLLPUBLIC_EXPORT css::uno::XInterface * SAL_CALL
    3268          34 : stardiv_Toolkit_UnoComboBoxControl_get_implementation(
    3269             :     css::uno::XComponentContext *,
    3270             :     css::uno::Sequence<css::uno::Any> const &)
    3271             : {
    3272          34 :     return cppu::acquire(new UnoComboBoxControl());
    3273             : }
    3274             : 
    3275             : 
    3276             : //  UnoSpinFieldControl
    3277             : 
    3278          78 : UnoSpinFieldControl::UnoSpinFieldControl()
    3279             :     :UnoEditControl()
    3280          78 :     ,maSpinListeners( *this )
    3281             : {
    3282          78 :     mbRepeat = false;
    3283          78 : }
    3284             : 
    3285             : // uno::XInterface
    3286        4074 : uno::Any UnoSpinFieldControl::queryAggregation( const uno::Type & rType ) throw(uno::RuntimeException, std::exception)
    3287             : {
    3288             :     uno::Any aRet = ::cppu::queryInterface( rType,
    3289        4074 :                                         (static_cast< awt::XSpinField* >(this)) );
    3290        4074 :     return (aRet.hasValue() ? aRet : UnoEditControl::queryAggregation( rType ));
    3291             : }
    3292             : 
    3293             : // lang::XTypeProvider
    3294           0 : IMPL_XTYPEPROVIDER_START( UnoSpinFieldControl )
    3295           0 :     cppu::UnoType<awt::XSpinField>::get(),
    3296             :     UnoEditControl::getTypes()
    3297           0 : IMPL_XTYPEPROVIDER_END
    3298             : 
    3299         202 : void UnoSpinFieldControl::createPeer( const uno::Reference< awt::XToolkit > & rxToolkit, const uno::Reference< awt::XWindowPeer >  & rParentPeer ) throw(uno::RuntimeException, std::exception)
    3300             : {
    3301         202 :     UnoEditControl::createPeer( rxToolkit, rParentPeer );
    3302             : 
    3303         202 :     uno::Reference < awt::XSpinField > xField( getPeer(), uno::UNO_QUERY );
    3304         202 :     xField->enableRepeat( mbRepeat );
    3305         202 :     if ( maSpinListeners.getLength() )
    3306           0 :         xField->addSpinListener( &maSpinListeners );
    3307         202 : }
    3308             : 
    3309             :     // ::com::sun::star::awt::XSpinField
    3310          22 : void UnoSpinFieldControl::addSpinListener( const ::com::sun::star::uno::Reference< ::com::sun::star::awt::XSpinListener >& l ) throw(::com::sun::star::uno::RuntimeException, std::exception)
    3311             : {
    3312          22 :     maSpinListeners.addInterface( l );
    3313          22 :     if( getPeer().is() && maSpinListeners.getLength() == 1 )
    3314             :     {
    3315          22 :         uno::Reference < awt::XSpinField > xField( getPeer(), uno::UNO_QUERY );
    3316          22 :         xField->addSpinListener( &maSpinListeners );
    3317             :     }
    3318          22 : }
    3319             : 
    3320          22 : void UnoSpinFieldControl::removeSpinListener( const ::com::sun::star::uno::Reference< ::com::sun::star::awt::XSpinListener >& l ) throw(::com::sun::star::uno::RuntimeException, std::exception)
    3321             : {
    3322          22 :     if( getPeer().is() && maSpinListeners.getLength() == 1 )
    3323             :     {
    3324          22 :         uno::Reference < awt::XSpinField > xField( getPeer(), uno::UNO_QUERY );
    3325          22 :         xField->removeSpinListener( &maSpinListeners );
    3326             :     }
    3327          22 :     maSpinListeners.removeInterface( l );
    3328          22 : }
    3329             : 
    3330          44 : void UnoSpinFieldControl::up() throw(::com::sun::star::uno::RuntimeException, std::exception)
    3331             : {
    3332          44 :     uno::Reference < awt::XSpinField > xField( getPeer(), uno::UNO_QUERY );
    3333          44 :     if ( xField.is() )
    3334          44 :         xField->up();
    3335          44 : }
    3336             : 
    3337          22 : void UnoSpinFieldControl::down() throw(::com::sun::star::uno::RuntimeException, std::exception)
    3338             : {
    3339          22 :     uno::Reference < awt::XSpinField > xField( getPeer(), uno::UNO_QUERY );
    3340          22 :     if ( xField.is() )
    3341          22 :         xField->down();
    3342          22 : }
    3343             : 
    3344          22 : void UnoSpinFieldControl::first() throw(::com::sun::star::uno::RuntimeException, std::exception)
    3345             : {
    3346          22 :     uno::Reference < awt::XSpinField > xField( getPeer(), uno::UNO_QUERY );
    3347          22 :     if ( xField.is() )
    3348          22 :         xField->first();
    3349          22 : }
    3350             : 
    3351          22 : void UnoSpinFieldControl::last() throw(::com::sun::star::uno::RuntimeException, std::exception)
    3352             : {
    3353          22 :     uno::Reference < awt::XSpinField > xField( getPeer(), uno::UNO_QUERY );
    3354          22 :     if ( xField.is() )
    3355          22 :         xField->last();
    3356          22 : }
    3357             : 
    3358          44 : void UnoSpinFieldControl::enableRepeat( sal_Bool bRepeat ) throw(::com::sun::star::uno::RuntimeException, std::exception)
    3359             : {
    3360          44 :     mbRepeat = bRepeat;
    3361             : 
    3362          44 :     uno::Reference < awt::XSpinField > xField( getPeer(), uno::UNO_QUERY );
    3363          44 :     if ( xField.is() )
    3364          44 :         xField->enableRepeat( bRepeat );
    3365          44 : }
    3366             : 
    3367             : 
    3368             : //  class UnoControlDateFieldModel
    3369             : 
    3370          76 : UnoControlDateFieldModel::UnoControlDateFieldModel( const Reference< XComponentContext >& rxContext )
    3371          76 :     :UnoControlModel( rxContext )
    3372             : {
    3373          76 :     UNO_CONTROL_MODEL_REGISTER_PROPERTIES( VCLXDateField );
    3374          76 : }
    3375             : 
    3376           2 : OUString UnoControlDateFieldModel::getServiceName() throw(::com::sun::star::uno::RuntimeException, std::exception)
    3377             : {
    3378           2 :     return OUString::createFromAscii( szServiceName_UnoControlDateFieldModel );
    3379             : }
    3380             : 
    3381        2790 : uno::Any UnoControlDateFieldModel::ImplGetDefaultValue( sal_uInt16 nPropId ) const
    3382             : {
    3383        2790 :     if ( nPropId == BASEPROPERTY_DEFAULTCONTROL )
    3384             :     {
    3385          82 :         uno::Any aAny;
    3386          82 :         aAny <<= OUString::createFromAscii( szServiceName_UnoControlDateField );
    3387          82 :         return aAny;
    3388             :     }
    3389        2708 :     return UnoControlModel::ImplGetDefaultValue( nPropId );
    3390             : }
    3391             : 
    3392             : 
    3393       15895 : ::cppu::IPropertyArrayHelper& UnoControlDateFieldModel::getInfoHelper()
    3394             : {
    3395             :     static UnoPropertyArrayHelper* pHelper = NULL;
    3396       15895 :     if ( !pHelper )
    3397             :     {
    3398          16 :         uno::Sequence<sal_Int32>    aIDs = ImplGetPropertyIds();
    3399          16 :         pHelper = new UnoPropertyArrayHelper( aIDs );
    3400             :     }
    3401       15895 :     return *pHelper;
    3402             : }
    3403             : 
    3404             : // beans::XMultiPropertySet
    3405         270 : uno::Reference< beans::XPropertySetInfo > UnoControlDateFieldModel::getPropertySetInfo(  ) throw(uno::RuntimeException, std::exception)
    3406             : {
    3407         270 :     static uno::Reference< beans::XPropertySetInfo > xInfo( createPropertySetInfo( getInfoHelper() ) );
    3408         270 :     return xInfo;
    3409             : }
    3410             : 
    3411             : extern "C" SAL_DLLPUBLIC_EXPORT css::uno::XInterface * SAL_CALL
    3412          74 : stardiv_Toolkit_UnoControlDateFieldModel_get_implementation(
    3413             :     css::uno::XComponentContext *context,
    3414             :     css::uno::Sequence<css::uno::Any> const &)
    3415             : {
    3416          74 :     return cppu::acquire(new UnoControlDateFieldModel(context));
    3417             : }
    3418             : 
    3419             : 
    3420             : //  class UnoDateFieldControl
    3421             : 
    3422          20 : UnoDateFieldControl::UnoDateFieldControl()
    3423          20 :     :UnoSpinFieldControl()
    3424             : {
    3425          20 :     mnFirst = util::Date( 1, 1, 1900 );
    3426          20 :     mnLast = util::Date( 31, 12, 2200 );
    3427          20 :     mbLongFormat = TRISTATE_INDET;
    3428          20 : }
    3429             : 
    3430          60 : OUString UnoDateFieldControl::GetComponentServiceName()
    3431             : {
    3432          60 :     return OUString("datefield");
    3433             : }
    3434             : 
    3435             : // uno::XInterface
    3436         932 : uno::Any UnoDateFieldControl::queryAggregation( const uno::Type & rType ) throw(uno::RuntimeException, std::exception)
    3437             : {
    3438             :     uno::Any aRet = ::cppu::queryInterface( rType,
    3439         932 :                                         (static_cast< awt::XDateField* >(this)) );
    3440         932 :     return (aRet.hasValue() ? aRet : UnoSpinFieldControl::queryAggregation( rType ));
    3441             : }
    3442             : 
    3443             : // lang::XTypeProvider
    3444           0 : IMPL_XTYPEPROVIDER_START( UnoDateFieldControl )
    3445           0 :     cppu::UnoType<awt::XDateField>::get(),
    3446             :     UnoSpinFieldControl::getTypes()
    3447           0 : IMPL_XTYPEPROVIDER_END
    3448             : 
    3449          64 : void UnoDateFieldControl::createPeer( const uno::Reference< awt::XToolkit > & rxToolkit, const uno::Reference< awt::XWindowPeer >  & rParentPeer ) throw(uno::RuntimeException, std::exception)
    3450             : {
    3451          64 :     UnoSpinFieldControl::createPeer( rxToolkit, rParentPeer );
    3452             : 
    3453          64 :     uno::Reference < awt::XDateField > xField( getPeer(), uno::UNO_QUERY );
    3454          64 :     xField->setFirst( mnFirst );
    3455          64 :     xField->setLast( mnLast );
    3456          64 :     if ( mbLongFormat != TRISTATE_INDET )
    3457           4 :         xField->setLongFormat( mbLongFormat );
    3458          64 : }
    3459             : 
    3460             : 
    3461          52 : void UnoDateFieldControl::textChanged( const awt::TextEvent& e ) throw(uno::RuntimeException, std::exception)
    3462             : {
    3463          52 :     uno::Reference< awt::XVclWindowPeer > xPeer( getPeer(), uno::UNO_QUERY );
    3464             : 
    3465             :     // also change the text property (#i25106#)
    3466          52 :     if ( xPeer.is() )
    3467             :     {
    3468          52 :         OUString sTextPropertyName = GetPropertyName( BASEPROPERTY_TEXT );
    3469          52 :         ImplSetPropertyValue( sTextPropertyName, xPeer->getProperty( sTextPropertyName ), false );
    3470             :     }
    3471             : 
    3472             :     // re-calc the Date property
    3473         104 :     uno::Reference < awt::XDateField > xField( getPeer(), uno::UNO_QUERY );
    3474         104 :     uno::Any aValue;
    3475          52 :     if ( xField->isEmpty() )
    3476             :     {
    3477             :         // the field says it's empty
    3478           8 :         bool bEnforceFormat = true;
    3479           8 :         if ( xPeer.is() )
    3480           8 :             xPeer->getProperty( GetPropertyName( BASEPROPERTY_ENFORCE_FORMAT ) ) >>= bEnforceFormat;
    3481           8 :         if ( !bEnforceFormat )
    3482             :         {
    3483             :             // and it also says that it is currently accepting invalid inputs, without
    3484             :             // forcing it to a valid date
    3485           0 :             uno::Reference< awt::XTextComponent > xText( xPeer, uno::UNO_QUERY );
    3486           0 :             if ( xText.is() && xText->getText().getLength() )
    3487             :                 // and in real, the text of the peer is *not* empty
    3488             :                 // -> simulate an invalid date, which is different from "no date"
    3489           0 :                 aValue <<= util::Date();
    3490             :         }
    3491             :     }
    3492             :     else
    3493          44 :         aValue <<= xField->getDate();
    3494             : 
    3495          52 :     ImplSetPropertyValue( GetPropertyName( BASEPROPERTY_DATE ), aValue, false );
    3496             : 
    3497             :     // multiplex the event
    3498          52 :     if ( GetTextListeners().getLength() )
    3499         104 :         GetTextListeners().textChanged( e );
    3500          52 : }
    3501             : 
    3502           4 : void UnoDateFieldControl::setDate( const util::Date& Date ) throw(uno::RuntimeException, std::exception)
    3503             : {
    3504           4 :     uno::Any aAny;
    3505           4 :     aAny <<= Date;
    3506           4 :     ImplSetPropertyValue( GetPropertyName( BASEPROPERTY_DATE ), aAny, true );
    3507           4 : }
    3508             : 
    3509           8 : util::Date UnoDateFieldControl::getDate() throw(uno::RuntimeException, std::exception)
    3510             : {
    3511           8 :     return ImplGetPropertyValue_Date( BASEPROPERTY_DATE );
    3512             : }
    3513             : 
    3514           4 : void UnoDateFieldControl::setMin( const util::Date& Date ) throw(uno::RuntimeException, std::exception)
    3515             : {
    3516           4 :     uno::Any aAny;
    3517           4 :     aAny <<= Date;
    3518           4 :     ImplSetPropertyValue( GetPropertyName( BASEPROPERTY_DATEMIN ), aAny, true );
    3519           4 : }
    3520             : 
    3521           8 : util::Date UnoDateFieldControl::getMin() throw(uno::RuntimeException, std::exception)
    3522             : {
    3523           8 :     return ImplGetPropertyValue_Date( BASEPROPERTY_DATEMIN );
    3524             : }
    3525             : 
    3526           4 : void UnoDateFieldControl::setMax( const util::Date& Date ) throw(uno::RuntimeException, std::exception)
    3527             : {
    3528           4 :     uno::Any aAny;
    3529           4 :     aAny <<= Date;
    3530           4 :     ImplSetPropertyValue( GetPropertyName( BASEPROPERTY_DATEMAX ), aAny, true );
    3531           4 : }
    3532             : 
    3533           8 : util::Date UnoDateFieldControl::getMax() throw(uno::RuntimeException, std::exception)
    3534             : {
    3535           8 :     return ImplGetPropertyValue_Date( BASEPROPERTY_DATEMAX );
    3536             : }
    3537             : 
    3538           4 : void UnoDateFieldControl::setFirst( const util::Date& Date ) throw(uno::RuntimeException, std::exception)
    3539             : {
    3540           4 :     mnFirst = Date;
    3541           4 :     if ( getPeer().is() )
    3542             :     {
    3543           4 :         uno::Reference < awt::XDateField > xField( getPeer(), uno::UNO_QUERY );
    3544           4 :         xField->setFirst( Date );
    3545             :     }
    3546           4 : }
    3547             : 
    3548           8 : util::Date UnoDateFieldControl::getFirst() throw(uno::RuntimeException, std::exception)
    3549             : {
    3550           8 :     return mnFirst;
    3551             : }
    3552             : 
    3553           4 : void UnoDateFieldControl::setLast( const util::Date& Date ) throw(uno::RuntimeException, std::exception)
    3554             : {
    3555           4 :     mnLast = Date;
    3556           4 :     if ( getPeer().is() )
    3557             :     {
    3558           4 :         uno::Reference < awt::XDateField > xField( getPeer(), uno::UNO_QUERY );
    3559           4 :         xField->setLast( Date );
    3560             :     }
    3561           4 : }
    3562             : 
    3563           8 : util::Date UnoDateFieldControl::getLast() throw(uno::RuntimeException, std::exception)
    3564             : {
    3565           8 :     return mnLast;
    3566             : }
    3567             : 
    3568           4 : void UnoDateFieldControl::setLongFormat( sal_Bool bLong ) throw(uno::RuntimeException, std::exception)
    3569             : {
    3570           4 :     mbLongFormat = bLong ? TRISTATE_TRUE : TRISTATE_FALSE;
    3571           4 :     if ( getPeer().is() )
    3572             :     {
    3573           4 :         uno::Reference < awt::XDateField > xField( getPeer(), uno::UNO_QUERY );
    3574           4 :         xField->setLongFormat( bLong );
    3575             :     }
    3576           4 : }
    3577             : 
    3578           8 : sal_Bool UnoDateFieldControl::isLongFormat() throw(uno::RuntimeException, std::exception)
    3579             : {
    3580           8 :     return mbLongFormat == TRISTATE_TRUE;
    3581             : }
    3582             : 
    3583           4 : void UnoDateFieldControl::setEmpty() throw(uno::RuntimeException, std::exception)
    3584             : {
    3585           4 :     if ( getPeer().is() )
    3586             :     {
    3587           4 :         uno::Reference < awt::XDateField >  xField( getPeer(), uno::UNO_QUERY );
    3588           4 :         xField->setEmpty();
    3589             :     }
    3590           4 : }
    3591             : 
    3592           4 : sal_Bool UnoDateFieldControl::isEmpty() throw(uno::RuntimeException, std::exception)
    3593             : {
    3594           4 :     bool bEmpty = false;
    3595           4 :     if ( getPeer().is() )
    3596             :     {
    3597           4 :         uno::Reference < awt::XDateField > xField( getPeer(), uno::UNO_QUERY );
    3598           4 :         bEmpty = xField->isEmpty();
    3599             :     }
    3600           4 :     return bEmpty;
    3601             : }
    3602             : 
    3603           4 : void UnoDateFieldControl::setStrictFormat( sal_Bool bStrict ) throw(uno::RuntimeException, std::exception)
    3604             : {
    3605           4 :     uno::Any aAny;
    3606           4 :     aAny <<= bStrict;
    3607           4 :     ImplSetPropertyValue( GetPropertyName( BASEPROPERTY_STRICTFORMAT ), aAny, true );
    3608           4 : }
    3609             : 
    3610           8 : sal_Bool UnoDateFieldControl::isStrictFormat() throw(uno::RuntimeException, std::exception)
    3611             : {
    3612           8 :     return ImplGetPropertyValue_BOOL( BASEPROPERTY_STRICTFORMAT );
    3613             : }
    3614             : 
    3615             : extern "C" SAL_DLLPUBLIC_EXPORT css::uno::XInterface * SAL_CALL
    3616          20 : stardiv_Toolkit_UnoDateFieldControl_get_implementation(
    3617             :     css::uno::XComponentContext *,
    3618             :     css::uno::Sequence<css::uno::Any> const &)
    3619             : {
    3620          20 :     return cppu::acquire(new UnoDateFieldControl());
    3621             : }
    3622             : 
    3623             : 
    3624             : //  class UnoControlTimeFieldModel
    3625             : 
    3626          28 : UnoControlTimeFieldModel::UnoControlTimeFieldModel( const Reference< XComponentContext >& rxContext )
    3627          28 :     :UnoControlModel( rxContext )
    3628             : {
    3629          28 :     UNO_CONTROL_MODEL_REGISTER_PROPERTIES( VCLXTimeField );
    3630          28 : }
    3631             : 
    3632           2 : OUString UnoControlTimeFieldModel::getServiceName() throw(::com::sun::star::uno::RuntimeException, std::exception)
    3633             : {
    3634           2 :     return OUString::createFromAscii( szServiceName_UnoControlTimeFieldModel );
    3635             : }
    3636             : 
    3637        1028 : uno::Any UnoControlTimeFieldModel::ImplGetDefaultValue( sal_uInt16 nPropId ) const
    3638             : {
    3639        1028 :     if ( nPropId == BASEPROPERTY_DEFAULTCONTROL )
    3640             :     {
    3641          32 :         uno::Any aAny;
    3642          32 :         aAny <<= OUString::createFromAscii( szServiceName_UnoControlTimeField );
    3643          32 :         return aAny;
    3644             :     }
    3645         996 :     return UnoControlModel::ImplGetDefaultValue( nPropId );
    3646             : }
    3647             : 
    3648             : 
    3649       11922 : ::cppu::IPropertyArrayHelper& UnoControlTimeFieldModel::getInfoHelper()
    3650             : {
    3651             :     static UnoPropertyArrayHelper* pHelper = NULL;
    3652       11922 :     if ( !pHelper )
    3653             :     {
    3654           6 :         uno::Sequence<sal_Int32>    aIDs = ImplGetPropertyIds();
    3655           6 :         pHelper = new UnoPropertyArrayHelper( aIDs );
    3656             :     }
    3657       11922 :     return *pHelper;
    3658             : }
    3659             : 
    3660             : // beans::XMultiPropertySet
    3661         162 : uno::Reference< beans::XPropertySetInfo > UnoControlTimeFieldModel::getPropertySetInfo(  ) throw(uno::RuntimeException, std::exception)
    3662             : {
    3663         162 :     static uno::Reference< beans::XPropertySetInfo > xInfo( createPropertySetInfo( getInfoHelper() ) );
    3664         162 :     return xInfo;
    3665             : }
    3666             : 
    3667             : extern "C" SAL_DLLPUBLIC_EXPORT css::uno::XInterface * SAL_CALL
    3668          26 : stardiv_Toolkit_UnoControlTimeFieldModel_get_implementation(
    3669             :     css::uno::XComponentContext *context,
    3670             :     css::uno::Sequence<css::uno::Any> const &)
    3671             : {
    3672          26 :     return cppu::acquire(new UnoControlTimeFieldModel(context));
    3673             : }
    3674             : 
    3675             : 
    3676             : //  class UnoTimeFieldControl
    3677             : 
    3678          14 : UnoTimeFieldControl::UnoTimeFieldControl()
    3679          14 :     :UnoSpinFieldControl()
    3680             : {
    3681          14 :     mnFirst = util::Time( 0, 0, 0, 0, false );
    3682          14 :     mnLast = util::Time( 999999999, 59, 59, 23, false );
    3683          14 : }
    3684             : 
    3685          34 : OUString UnoTimeFieldControl::GetComponentServiceName()
    3686             : {
    3687          34 :     return OUString("timefield");
    3688             : }
    3689             : 
    3690             : // uno::XInterface
    3691         750 : uno::Any UnoTimeFieldControl::queryAggregation( const uno::Type & rType ) throw(uno::RuntimeException, std::exception)
    3692             : {
    3693             :     uno::Any aRet = ::cppu::queryInterface( rType,
    3694         750 :                                         (static_cast< awt::XTimeField* >(this)) );
    3695         750 :     return (aRet.hasValue() ? aRet : UnoSpinFieldControl::queryAggregation( rType ));
    3696             : }
    3697             : 
    3698             : // lang::XTypeProvider
    3699           0 : IMPL_XTYPEPROVIDER_START( UnoTimeFieldControl )
    3700           0 :     cppu::UnoType<awt::XTimeField>::get(),
    3701             :     UnoSpinFieldControl::getTypes()
    3702           0 : IMPL_XTYPEPROVIDER_END
    3703             : 
    3704          38 : void UnoTimeFieldControl::createPeer( const uno::Reference< awt::XToolkit > & rxToolkit, const uno::Reference< awt::XWindowPeer >  & rParentPeer ) throw(uno::RuntimeException, std::exception)
    3705             : {
    3706          38 :     UnoSpinFieldControl::createPeer( rxToolkit, rParentPeer );
    3707             : 
    3708          38 :     uno::Reference < awt::XTimeField > xField( getPeer(), uno::UNO_QUERY );
    3709          38 :     xField->setFirst( mnFirst );
    3710          38 :     xField->setLast( mnLast );
    3711          38 : }
    3712             : 
    3713          40 : void UnoTimeFieldControl::textChanged( const awt::TextEvent& e ) throw(uno::RuntimeException, std::exception)
    3714             : {
    3715             :     // also change the text property (#i25106#)
    3716          40 :     uno::Reference< awt::XVclWindowPeer > xPeer( getPeer(), uno::UNO_QUERY );
    3717          80 :     OUString sTextPropertyName = GetPropertyName( BASEPROPERTY_TEXT );
    3718          40 :     ImplSetPropertyValue( sTextPropertyName, xPeer->getProperty( sTextPropertyName ), false );
    3719             : 
    3720             :     // re-calc the Time property
    3721          80 :     uno::Reference < awt::XTimeField >  xField( getPeer(), uno::UNO_QUERY );
    3722          80 :     uno::Any aValue;
    3723          40 :     if ( !xField->isEmpty() )
    3724          36 :         aValue <<= xField->getTime();
    3725          40 :     ImplSetPropertyValue( GetPropertyName( BASEPROPERTY_TIME ), aValue, false );
    3726             : 
    3727             :     // multiplex the event
    3728          40 :     if ( GetTextListeners().getLength() )
    3729          80 :         GetTextListeners().textChanged( e );
    3730          40 : }
    3731             : 
    3732           4 : void UnoTimeFieldControl::setTime( const util::Time& Time ) throw(uno::RuntimeException, std::exception)
    3733             : {
    3734           4 :     uno::Any aAny;
    3735           4 :     aAny <<= Time;
    3736           4 :     ImplSetPropertyValue( GetPropertyName( BASEPROPERTY_TIME ), aAny, true );
    3737           4 : }
    3738             : 
    3739           8 : util::Time UnoTimeFieldControl::getTime() throw(uno::RuntimeException, std::exception)
    3740             : {
    3741           8 :     return ImplGetPropertyValue_Time( BASEPROPERTY_TIME );
    3742             : }
    3743             : 
    3744           4 : void UnoTimeFieldControl::setMin( const util::Time& Time ) throw(uno::RuntimeException, std::exception)
    3745             : {
    3746           4 :     uno::Any aAny;
    3747           4 :     aAny <<= Time;
    3748           4 :     ImplSetPropertyValue( GetPropertyName( BASEPROPERTY_TIMEMIN ), aAny, true );
    3749           4 : }
    3750             : 
    3751           8 : util::Time UnoTimeFieldControl::getMin() throw(uno::RuntimeException, std::exception)
    3752             : {
    3753           8 :     return ImplGetPropertyValue_Time( BASEPROPERTY_TIMEMIN );
    3754             : }
    3755             : 
    3756           4 : void UnoTimeFieldControl::setMax( const util::Time& Time ) throw(uno::RuntimeException, std::exception)
    3757             : {
    3758           4 :     uno::Any aAny;
    3759           4 :     aAny <<= Time;
    3760           4 :     ImplSetPropertyValue( GetPropertyName( BASEPROPERTY_TIMEMAX ), aAny, true );
    3761           4 : }
    3762             : 
    3763           8 : util::Time UnoTimeFieldControl::getMax() throw(uno::RuntimeException, std::exception)
    3764             : {
    3765           8 :     return ImplGetPropertyValue_Time( BASEPROPERTY_TIMEMAX );
    3766             : }
    3767             : 
    3768           4 : void UnoTimeFieldControl::setFirst( const util::Time& Time ) throw(uno::RuntimeException, std::exception)
    3769             : {
    3770           4 :     mnFirst = Time;
    3771           4 :     if ( getPeer().is() )
    3772             :     {
    3773           4 :         uno::Reference < awt::XTimeField > xField( getPeer(), uno::UNO_QUERY );
    3774           4 :         xField->setFirst( mnFirst );
    3775             :     }
    3776           4 : }
    3777             : 
    3778           8 : util::Time UnoTimeFieldControl::getFirst() throw(uno::RuntimeException, std::exception)
    3779             : {
    3780           8 :     return mnFirst;
    3781             : }
    3782             : 
    3783           4 : void UnoTimeFieldControl::setLast( const util::Time& Time ) throw(uno::RuntimeException, std::exception)
    3784             : {
    3785           4 :     mnLast = Time;
    3786           4 :     if ( getPeer().is() )
    3787             :     {
    3788           4 :         uno::Reference < awt::XTimeField > xField( getPeer(), uno::UNO_QUERY );
    3789           4 :         xField->setFirst( mnLast );
    3790             :     }
    3791           4 : }
    3792             : 
    3793           8 : util::Time UnoTimeFieldControl::getLast() throw(uno::RuntimeException, std::exception)
    3794             : {
    3795           8 :     return mnLast;
    3796             : }
    3797             : 
    3798           4 : void UnoTimeFieldControl::setEmpty() throw(uno::RuntimeException, std::exception)
    3799             : {
    3800           4 :     if ( getPeer().is() )
    3801             :     {
    3802           4 :         uno::Reference < awt::XTimeField >  xField( getPeer(), uno::UNO_QUERY );
    3803           4 :         xField->setEmpty();
    3804             :     }
    3805           4 : }
    3806             : 
    3807           4 : sal_Bool UnoTimeFieldControl::isEmpty() throw(uno::RuntimeException, std::exception)
    3808             : {
    3809           4 :     bool bEmpty = false;
    3810           4 :     if ( getPeer().is() )
    3811             :     {
    3812           4 :         uno::Reference < awt::XTimeField >  xField( getPeer(), uno::UNO_QUERY );
    3813           4 :         bEmpty = xField->isEmpty();
    3814             :     }
    3815           4 :     return bEmpty;
    3816             : }
    3817             : 
    3818           4 : void UnoTimeFieldControl::setStrictFormat( sal_Bool bStrict ) throw(uno::RuntimeException, std::exception)
    3819             : {
    3820           4 :     uno::Any aAny;
    3821           4 :     aAny <<= bStrict;
    3822           4 :     ImplSetPropertyValue( GetPropertyName( BASEPROPERTY_STRICTFORMAT ), aAny, true );
    3823           4 : }
    3824             : 
    3825           8 : sal_Bool UnoTimeFieldControl::isStrictFormat() throw(uno::RuntimeException, std::exception)
    3826             : {
    3827           8 :     return ImplGetPropertyValue_BOOL( BASEPROPERTY_STRICTFORMAT );
    3828             : }
    3829             : 
    3830             : extern "C" SAL_DLLPUBLIC_EXPORT css::uno::XInterface * SAL_CALL
    3831          14 : stardiv_Toolkit_UnoTimeFieldControl_get_implementation(
    3832             :     css::uno::XComponentContext *,
    3833             :     css::uno::Sequence<css::uno::Any> const &)
    3834             : {
    3835          14 :     return cppu::acquire(new UnoTimeFieldControl());
    3836             : }
    3837             : 
    3838             : 
    3839             : //  class UnoControlNumericFieldModel
    3840             : 
    3841          28 : UnoControlNumericFieldModel::UnoControlNumericFieldModel( const Reference< XComponentContext >& rxContext )
    3842          28 :     :UnoControlModel( rxContext )
    3843             : {
    3844          28 :     UNO_CONTROL_MODEL_REGISTER_PROPERTIES( VCLXNumericField );
    3845          28 : }
    3846             : 
    3847           2 : OUString UnoControlNumericFieldModel::getServiceName() throw(::com::sun::star::uno::RuntimeException, std::exception)
    3848             : {
    3849           2 :     return OUString::createFromAscii( szServiceName_UnoControlNumericFieldModel );
    3850             : }
    3851             : 
    3852        1060 : uno::Any UnoControlNumericFieldModel::ImplGetDefaultValue( sal_uInt16 nPropId ) const
    3853             : {
    3854        1060 :     if ( nPropId == BASEPROPERTY_DEFAULTCONTROL )
    3855             :     {
    3856          32 :         uno::Any aAny;
    3857          32 :         aAny <<= OUString::createFromAscii( szServiceName_UnoControlNumericField );
    3858          32 :         return aAny;
    3859             :     }
    3860        1028 :     return UnoControlModel::ImplGetDefaultValue( nPropId );
    3861             : }
    3862             : 
    3863             : 
    3864       12342 : ::cppu::IPropertyArrayHelper& UnoControlNumericFieldModel::getInfoHelper()
    3865             : {
    3866             :     static UnoPropertyArrayHelper* pHelper = NULL;
    3867       12342 :     if ( !pHelper )
    3868             :     {
    3869           6 :         uno::Sequence<sal_Int32>    aIDs = ImplGetPropertyIds();
    3870           6 :         pHelper = new UnoPropertyArrayHelper( aIDs );
    3871             :     }
    3872       12342 :     return *pHelper;
    3873             : }
    3874             : 
    3875             : // beans::XMultiPropertySet
    3876         164 : uno::Reference< beans::XPropertySetInfo > UnoControlNumericFieldModel::getPropertySetInfo(  ) throw(uno::RuntimeException, std::exception)
    3877             : {
    3878         164 :     static uno::Reference< beans::XPropertySetInfo > xInfo( createPropertySetInfo( getInfoHelper() ) );
    3879         164 :     return xInfo;
    3880             : }
    3881             : 
    3882             : extern "C" SAL_DLLPUBLIC_EXPORT css::uno::XInterface * SAL_CALL
    3883          26 : stardiv_Toolkit_UnoControlNumericFieldModel_get_implementation(
    3884             :     css::uno::XComponentContext *context,
    3885             :     css::uno::Sequence<css::uno::Any> const &)
    3886             : {
    3887          26 :     return cppu::acquire(new UnoControlNumericFieldModel(context));
    3888             : }
    3889             : 
    3890             : 
    3891             : //  class UnoNumericFieldControl
    3892             : 
    3893          14 : UnoNumericFieldControl::UnoNumericFieldControl()
    3894          14 :     :UnoSpinFieldControl()
    3895             : {
    3896          14 :     mnFirst = 0;
    3897          14 :     mnLast = 0x7FFFFFFF;
    3898          14 : }
    3899             : 
    3900          34 : OUString UnoNumericFieldControl::GetComponentServiceName()
    3901             : {
    3902          34 :     return OUString("numericfield");
    3903             : }
    3904             : 
    3905             : // uno::XInterface
    3906         848 : uno::Any UnoNumericFieldControl::queryAggregation( const uno::Type & rType ) throw(uno::RuntimeException, std::exception)
    3907             : {
    3908             :     uno::Any aRet = ::cppu::queryInterface( rType,
    3909         848 :                                         (static_cast< awt::XNumericField* >(this)) );
    3910         848 :     return (aRet.hasValue() ? aRet : UnoSpinFieldControl::queryAggregation( rType ));
    3911             : }
    3912             : 
    3913             : // lang::XTypeProvider
    3914           0 : IMPL_XTYPEPROVIDER_START( UnoNumericFieldControl )
    3915           0 :     cppu::UnoType<awt::XNumericField>::get(),
    3916             :     UnoSpinFieldControl::getTypes()
    3917           0 : IMPL_XTYPEPROVIDER_END
    3918             : 
    3919          38 : void UnoNumericFieldControl::createPeer( const uno::Reference< awt::XToolkit > & rxToolkit, const uno::Reference< awt::XWindowPeer >  & rParentPeer ) throw(uno::RuntimeException, std::exception)
    3920             : {
    3921          38 :     UnoSpinFieldControl::createPeer( rxToolkit, rParentPeer );
    3922             : 
    3923          38 :     uno::Reference < awt::XNumericField > xField( getPeer(), uno::UNO_QUERY );
    3924          38 :     xField->setFirst( mnFirst );
    3925          38 :     xField->setLast( mnLast );
    3926          38 : }
    3927             : 
    3928             : 
    3929         212 : void UnoNumericFieldControl::textChanged( const awt::TextEvent& e ) throw(uno::RuntimeException, std::exception)
    3930             : {
    3931         212 :     uno::Reference < awt::XNumericField >  xField( getPeer(), uno::UNO_QUERY );
    3932         424 :     uno::Any aAny;
    3933         212 :     aAny <<= xField->getValue();
    3934         212 :     ImplSetPropertyValue( GetPropertyName( BASEPROPERTY_VALUE_DOUBLE ), aAny, false );
    3935             : 
    3936         212 :     if ( GetTextListeners().getLength() )
    3937         424 :         GetTextListeners().textChanged( e );
    3938         212 : }
    3939             : 
    3940           4 : void UnoNumericFieldControl::setValue( double Value ) throw(uno::RuntimeException, std::exception)
    3941             : {
    3942           4 :     uno::Any aAny;
    3943           4 :     aAny <<= Value;
    3944           4 :     ImplSetPropertyValue( GetPropertyName( BASEPROPERTY_VALUE_DOUBLE ), aAny, true );
    3945           4 : }
    3946             : 
    3947           8 : double UnoNumericFieldControl::getValue() throw(uno::RuntimeException, std::exception)
    3948             : {
    3949           8 :     return ImplGetPropertyValue_DOUBLE( BASEPROPERTY_VALUE_DOUBLE );
    3950             : }
    3951             : 
    3952           4 : void UnoNumericFieldControl::setMin( double Value ) throw(uno::RuntimeException, std::exception)
    3953             : {
    3954           4 :     uno::Any aAny;
    3955           4 :     aAny <<= Value;
    3956           4 :     ImplSetPropertyValue( GetPropertyName( BASEPROPERTY_VALUEMIN_DOUBLE ), aAny, true );
    3957           4 : }
    3958             : 
    3959           8 : double UnoNumericFieldControl::getMin() throw(uno::RuntimeException, std::exception)
    3960             : {
    3961           8 :     return ImplGetPropertyValue_DOUBLE( BASEPROPERTY_VALUEMIN_DOUBLE );
    3962             : }
    3963             : 
    3964           4 : void UnoNumericFieldControl::setMax( double Value ) throw(uno::RuntimeException, std::exception)
    3965             : {
    3966           4 :     uno::Any aAny;
    3967           4 :     aAny <<= Value;
    3968           4 :     ImplSetPropertyValue( GetPropertyName( BASEPROPERTY_VALUEMAX_DOUBLE ), aAny, true );
    3969           4 : }
    3970             : 
    3971           8 : double UnoNumericFieldControl::getMax() throw(uno::RuntimeException, std::exception)
    3972             : {
    3973           8 :     return ImplGetPropertyValue_DOUBLE( BASEPROPERTY_VALUEMAX_DOUBLE );
    3974             : }
    3975             : 
    3976           4 : void UnoNumericFieldControl::setFirst( double Value ) throw(uno::RuntimeException, std::exception)
    3977             : {
    3978           4 :     mnFirst = Value;
    3979           4 :     if ( getPeer().is() )
    3980             :     {
    3981           4 :         uno::Reference < awt::XNumericField > xField( getPeer(), uno::UNO_QUERY );
    3982           4 :         xField->setFirst( mnFirst );
    3983             :     }
    3984           4 : }
    3985             : 
    3986           8 : double UnoNumericFieldControl::getFirst() throw(uno::RuntimeException, std::exception)
    3987             : {
    3988           8 :     return mnFirst;
    3989             : }
    3990             : 
    3991           4 : void UnoNumericFieldControl::setLast( double Value ) throw(uno::RuntimeException, std::exception)
    3992             : {
    3993           4 :     mnLast = Value;
    3994           4 :     if ( getPeer().is() )
    3995             :     {
    3996           4 :         uno::Reference < awt::XNumericField > xField( getPeer(), uno::UNO_QUERY );
    3997           4 :         xField->setLast( mnLast );
    3998             :     }
    3999           4 : }
    4000             : 
    4001           8 : double UnoNumericFieldControl::getLast() throw(uno::RuntimeException, std::exception)
    4002             : {
    4003           8 :     return mnLast;
    4004             : }
    4005             : 
    4006           4 : void UnoNumericFieldControl::setStrictFormat( sal_Bool bStrict ) throw(uno::RuntimeException, std::exception)
    4007             : {
    4008           4 :     uno::Any aAny;
    4009           4 :     aAny <<= bStrict;
    4010           4 :     ImplSetPropertyValue( GetPropertyName( BASEPROPERTY_STRICTFORMAT ), aAny, true );
    4011           4 : }
    4012             : 
    4013           8 : sal_Bool UnoNumericFieldControl::isStrictFormat() throw(uno::RuntimeException, std::exception)
    4014             : {
    4015           8 :     return ImplGetPropertyValue_BOOL( BASEPROPERTY_STRICTFORMAT );
    4016             : }
    4017             : 
    4018           4 : void UnoNumericFieldControl::setSpinSize( double Digits ) throw(uno::RuntimeException, std::exception)
    4019             : {
    4020           4 :     uno::Any aAny;
    4021           4 :     aAny <<= Digits;
    4022           4 :     ImplSetPropertyValue( GetPropertyName( BASEPROPERTY_VALUESTEP_DOUBLE ), aAny, true );
    4023           4 : }
    4024             : 
    4025           8 : double UnoNumericFieldControl::getSpinSize() throw(uno::RuntimeException, std::exception)
    4026             : {
    4027           8 :     return ImplGetPropertyValue_DOUBLE( BASEPROPERTY_VALUESTEP_DOUBLE );
    4028             : }
    4029             : 
    4030           4 : void UnoNumericFieldControl::setDecimalDigits( sal_Int16 Digits ) throw(uno::RuntimeException, std::exception)
    4031             : {
    4032           4 :     uno::Any aAny;
    4033           4 :     aAny <<= Digits;
    4034           4 :     ImplSetPropertyValue( GetPropertyName( BASEPROPERTY_DECIMALACCURACY ), aAny, true );
    4035           4 : }
    4036             : 
    4037           8 : sal_Int16 UnoNumericFieldControl::getDecimalDigits() throw(uno::RuntimeException, std::exception)
    4038             : {
    4039           8 :     return ImplGetPropertyValue_INT16( BASEPROPERTY_DECIMALACCURACY );
    4040             : }
    4041             : 
    4042             : extern "C" SAL_DLLPUBLIC_EXPORT css::uno::XInterface * SAL_CALL
    4043          14 : stardiv_Toolkit_UnoNumericFieldControl_get_implementation(
    4044             :     css::uno::XComponentContext *,
    4045             :     css::uno::Sequence<css::uno::Any> const &)
    4046             : {
    4047          14 :     return cppu::acquire(new UnoNumericFieldControl());
    4048             : }
    4049             : 
    4050             : 
    4051             : //  class UnoControlCurrencyFieldModel
    4052             : 
    4053          26 : UnoControlCurrencyFieldModel::UnoControlCurrencyFieldModel( const Reference< XComponentContext >& rxContext )
    4054          26 :     :UnoControlModel( rxContext )
    4055             : {
    4056          26 :     UNO_CONTROL_MODEL_REGISTER_PROPERTIES( VCLXCurrencyField );
    4057          26 : }
    4058             : 
    4059           2 : OUString UnoControlCurrencyFieldModel::getServiceName() throw(::com::sun::star::uno::RuntimeException, std::exception)
    4060             : {
    4061           2 :     return OUString::createFromAscii( szServiceName_UnoControlCurrencyFieldModel );
    4062             : }
    4063             : 
    4064        1054 : uno::Any UnoControlCurrencyFieldModel::ImplGetDefaultValue( sal_uInt16 nPropId ) const
    4065             : {
    4066        1054 :     if ( nPropId == BASEPROPERTY_DEFAULTCONTROL )
    4067             :     {
    4068          30 :         uno::Any aAny;
    4069          30 :         aAny <<= OUString::createFromAscii( szServiceName_UnoControlCurrencyField );
    4070          30 :         return aAny;
    4071             :     }
    4072        1024 :     if ( nPropId == BASEPROPERTY_CURSYM_POSITION )
    4073             :     {
    4074          30 :         uno::Any aAny;
    4075          30 :         aAny <<= false;
    4076          30 :         return aAny;
    4077             :     }
    4078             : 
    4079         994 :     return UnoControlModel::ImplGetDefaultValue( nPropId );
    4080             : }
    4081             : 
    4082       13814 : ::cppu::IPropertyArrayHelper& UnoControlCurrencyFieldModel::getInfoHelper()
    4083             : {
    4084             :     static UnoPropertyArrayHelper* pHelper = NULL;
    4085       13814 :     if ( !pHelper )
    4086             :     {
    4087           6 :         uno::Sequence<sal_Int32>    aIDs = ImplGetPropertyIds();
    4088           6 :         pHelper = new UnoPropertyArrayHelper( aIDs );
    4089             :     }
    4090       13814 :     return *pHelper;
    4091             : }
    4092             : 
    4093             : // beans::XMultiPropertySet
    4094         172 : uno::Reference< beans::XPropertySetInfo > UnoControlCurrencyFieldModel::getPropertySetInfo(  ) throw(uno::RuntimeException, std::exception)
    4095             : {
    4096         172 :     static uno::Reference< beans::XPropertySetInfo > xInfo( createPropertySetInfo( getInfoHelper() ) );
    4097         172 :     return xInfo;
    4098             : }
    4099             : 
    4100             : extern "C" SAL_DLLPUBLIC_EXPORT css::uno::XInterface * SAL_CALL
    4101          24 : stardiv_Toolkit_UnoControlCurrencyFieldModel_get_implementation(
    4102             :     css::uno::XComponentContext *context,
    4103             :     css::uno::Sequence<css::uno::Any> const &)
    4104             : {
    4105          24 :     return cppu::acquire(new UnoControlCurrencyFieldModel(context));
    4106             : }
    4107             : 
    4108             : 
    4109             : //  class UnoCurrencyFieldControl
    4110             : 
    4111          14 : UnoCurrencyFieldControl::UnoCurrencyFieldControl()
    4112          14 :     :UnoSpinFieldControl()
    4113             : {
    4114          14 :     mnFirst = 0;
    4115          14 :     mnLast = 0x7FFFFFFF;
    4116          14 : }
    4117             : 
    4118          34 : OUString UnoCurrencyFieldControl::GetComponentServiceName()
    4119             : {
    4120          34 :     return OUString("longcurrencyfield");
    4121             : }
    4122             : 
    4123             : // uno::XInterface
    4124         850 : uno::Any UnoCurrencyFieldControl::queryAggregation( const uno::Type & rType ) throw(uno::RuntimeException, std::exception)
    4125             : {
    4126             :     uno::Any aRet = ::cppu::queryInterface( rType,
    4127         850 :                                         (static_cast< awt::XCurrencyField* >(this)) );
    4128         850 :     return (aRet.hasValue() ? aRet : UnoSpinFieldControl::queryAggregation( rType ));
    4129             : }
    4130             : 
    4131             : // lang::XTypeProvider
    4132           0 : IMPL_XTYPEPROVIDER_START( UnoCurrencyFieldControl )
    4133           0 :     cppu::UnoType<awt::XCurrencyField>::get(),
    4134             :     UnoSpinFieldControl::getTypes()
    4135           0 : IMPL_XTYPEPROVIDER_END
    4136             : 
    4137          38 : void UnoCurrencyFieldControl::createPeer( const uno::Reference< awt::XToolkit > & rxToolkit, const uno::Reference< awt::XWindowPeer >  & rParentPeer ) throw(uno::RuntimeException, std::exception)
    4138             : {
    4139          38 :     UnoSpinFieldControl::createPeer( rxToolkit, rParentPeer );
    4140             : 
    4141          38 :     uno::Reference < awt::XCurrencyField > xField( getPeer(), uno::UNO_QUERY );
    4142          38 :     xField->setFirst( mnFirst );
    4143          38 :     xField->setLast( mnLast );
    4144          38 : }
    4145             : 
    4146         180 : void UnoCurrencyFieldControl::textChanged( const awt::TextEvent& e ) throw(uno::RuntimeException, std::exception)
    4147             : {
    4148         180 :     uno::Reference < awt::XCurrencyField >  xField( getPeer(), uno::UNO_QUERY );
    4149         360 :     uno::Any aAny;
    4150         180 :     aAny <<= xField->getValue();
    4151         180 :     ImplSetPropertyValue( GetPropertyName( BASEPROPERTY_VALUE_DOUBLE ), aAny, false );
    4152             : 
    4153         180 :     if ( GetTextListeners().getLength() )
    4154         360 :         GetTextListeners().textChanged( e );
    4155         180 : }
    4156             : 
    4157           4 : void UnoCurrencyFieldControl::setValue( double Value ) throw(uno::RuntimeException, std::exception)
    4158             : {
    4159           4 :     uno::Any aAny;
    4160           4 :     aAny <<= Value;
    4161           4 :     ImplSetPropertyValue( GetPropertyName( BASEPROPERTY_VALUE_DOUBLE ), aAny, true );
    4162           4 : }
    4163             : 
    4164           8 : double UnoCurrencyFieldControl::getValue() throw(uno::RuntimeException, std::exception)
    4165             : {
    4166           8 :     return ImplGetPropertyValue_DOUBLE( BASEPROPERTY_VALUE_DOUBLE );
    4167             : }
    4168             : 
    4169           4 : void UnoCurrencyFieldControl::setMin( double Value ) throw(uno::RuntimeException, std::exception)
    4170             : {
    4171           4 :     uno::Any aAny;
    4172           4 :     aAny <<= Value;
    4173           4 :     ImplSetPropertyValue( GetPropertyName( BASEPROPERTY_VALUEMIN_DOUBLE ), aAny, true );
    4174           4 : }
    4175             : 
    4176           8 : double UnoCurrencyFieldControl::getMin() throw(uno::RuntimeException, std::exception)
    4177             : {
    4178           8 :     return ImplGetPropertyValue_DOUBLE( BASEPROPERTY_VALUEMIN_DOUBLE );
    4179             : }
    4180             : 
    4181           4 : void UnoCurrencyFieldControl::setMax( double Value ) throw(uno::RuntimeException, std::exception)
    4182             : {
    4183           4 :     uno::Any aAny;
    4184           4 :     aAny <<= Value;
    4185           4 :     ImplSetPropertyValue( GetPropertyName( BASEPROPERTY_VALUEMAX_DOUBLE ), aAny, true );
    4186           4 : }
    4187             : 
    4188           8 : double UnoCurrencyFieldControl::getMax() throw(uno::RuntimeException, std::exception)
    4189             : {
    4190           8 :     return ImplGetPropertyValue_DOUBLE( BASEPROPERTY_VALUEMAX_DOUBLE );
    4191             : }
    4192             : 
    4193           4 : void UnoCurrencyFieldControl::setFirst( double Value ) throw(uno::RuntimeException, std::exception)
    4194             : {
    4195           4 :     mnFirst = Value;
    4196           4 :     if ( getPeer().is() )
    4197             :     {
    4198           4 :         uno::Reference < awt::XCurrencyField > xField( getPeer(), uno::UNO_QUERY );
    4199           4 :         xField->setFirst( mnFirst );
    4200             :     }
    4201           4 : }
    4202             : 
    4203           8 : double UnoCurrencyFieldControl::getFirst() throw(uno::RuntimeException, std::exception)
    4204             : {
    4205           8 :     return mnFirst;
    4206             : }
    4207             : 
    4208           4 : void UnoCurrencyFieldControl::setLast( double Value ) throw(uno::RuntimeException, std::exception)
    4209             : {
    4210           4 :     mnLast = Value;
    4211           4 :     if ( getPeer().is() )
    4212             :     {
    4213           4 :         uno::Reference < awt::XCurrencyField > xField( getPeer(), uno::UNO_QUERY );
    4214           4 :         xField->setLast( mnLast );
    4215             :     }
    4216           4 : }
    4217             : 
    4218           8 : double UnoCurrencyFieldControl::getLast() throw(uno::RuntimeException, std::exception)
    4219             : {
    4220           8 :     return mnLast;
    4221             : }
    4222             : 
    4223           4 : void UnoCurrencyFieldControl::setStrictFormat( sal_Bool bStrict ) throw(uno::RuntimeException, std::exception)
    4224             : {
    4225           4 :     uno::Any aAny;
    4226           4 :     aAny <<= bStrict;
    4227           4 :     ImplSetPropertyValue( GetPropertyName( BASEPROPERTY_STRICTFORMAT ), aAny, true );
    4228           4 : }
    4229             : 
    4230           8 : sal_Bool UnoCurrencyFieldControl::isStrictFormat() throw(uno::RuntimeException, std::exception)
    4231             : {
    4232           8 :     return ImplGetPropertyValue_BOOL( BASEPROPERTY_STRICTFORMAT );
    4233             : }
    4234             : 
    4235           4 : void UnoCurrencyFieldControl::setSpinSize( double Digits ) throw(uno::RuntimeException, std::exception)
    4236             : {
    4237           4 :     uno::Any aAny;
    4238           4 :     aAny <<= Digits;
    4239           4 :     ImplSetPropertyValue( GetPropertyName( BASEPROPERTY_VALUESTEP_DOUBLE ), aAny, true );
    4240           4 : }
    4241             : 
    4242           8 : double UnoCurrencyFieldControl::getSpinSize() throw(uno::RuntimeException, std::exception)
    4243             : {
    4244           8 :     return ImplGetPropertyValue_DOUBLE( BASEPROPERTY_VALUESTEP_DOUBLE );
    4245             : }
    4246             : 
    4247           4 : void UnoCurrencyFieldControl::setDecimalDigits( sal_Int16 Digits ) throw(uno::RuntimeException, std::exception)
    4248             : {
    4249           4 :     uno::Any aAny;
    4250           4 :     aAny <<= Digits;
    4251           4 :     ImplSetPropertyValue( GetPropertyName( BASEPROPERTY_DECIMALACCURACY ), aAny, true );
    4252           4 : }
    4253             : 
    4254           8 : sal_Int16 UnoCurrencyFieldControl::getDecimalDigits() throw(uno::RuntimeException, std::exception)
    4255             : {
    4256           8 :     return ImplGetPropertyValue_INT16( BASEPROPERTY_DECIMALACCURACY );
    4257             : }
    4258             : 
    4259             : extern "C" SAL_DLLPUBLIC_EXPORT css::uno::XInterface * SAL_CALL
    4260          14 : stardiv_Toolkit_UnoCurrencyFieldControl_get_implementation(
    4261             :     css::uno::XComponentContext *,
    4262             :     css::uno::Sequence<css::uno::Any> const &)
    4263             : {
    4264          14 :     return cppu::acquire(new UnoCurrencyFieldControl());
    4265             : }
    4266             : 
    4267             : 
    4268             : //  class UnoControlPatternFieldModel
    4269             : 
    4270          26 : UnoControlPatternFieldModel::UnoControlPatternFieldModel( const Reference< XComponentContext >& rxContext )
    4271          26 :     :UnoControlModel( rxContext )
    4272             : {
    4273          26 :     UNO_CONTROL_MODEL_REGISTER_PROPERTIES( VCLXPatternField );
    4274          26 : }
    4275             : 
    4276           2 : OUString UnoControlPatternFieldModel::getServiceName() throw(::com::sun::star::uno::RuntimeException, std::exception)
    4277             : {
    4278           2 :     return OUString::createFromAscii( szServiceName_UnoControlPatternFieldModel );
    4279             : }
    4280             : 
    4281         814 : uno::Any UnoControlPatternFieldModel::ImplGetDefaultValue( sal_uInt16 nPropId ) const
    4282             : {
    4283         814 :     if ( nPropId == BASEPROPERTY_DEFAULTCONTROL )
    4284             :     {
    4285          30 :         uno::Any aAny;
    4286          30 :         aAny <<= OUString::createFromAscii( szServiceName_UnoControlPatternField );
    4287          30 :         return aAny;
    4288             :     }
    4289         784 :     return UnoControlModel::ImplGetDefaultValue( nPropId );
    4290             : }
    4291             : 
    4292       10407 : ::cppu::IPropertyArrayHelper& UnoControlPatternFieldModel::getInfoHelper()
    4293             : {
    4294             :     static UnoPropertyArrayHelper* pHelper = NULL;
    4295       10407 :     if ( !pHelper )
    4296             :     {
    4297           6 :         uno::Sequence<sal_Int32>    aIDs = ImplGetPropertyIds();
    4298           6 :         pHelper = new UnoPropertyArrayHelper( aIDs );
    4299             :     }
    4300       10407 :     return *pHelper;
    4301             : }
    4302             : 
    4303             : // beans::XMultiPropertySet
    4304         138 : uno::Reference< beans::XPropertySetInfo > UnoControlPatternFieldModel::getPropertySetInfo(  ) throw(uno::RuntimeException, std::exception)
    4305             : {
    4306         138 :     static uno::Reference< beans::XPropertySetInfo > xInfo( createPropertySetInfo( getInfoHelper() ) );
    4307         138 :     return xInfo;
    4308             : }
    4309             : 
    4310             : extern "C" SAL_DLLPUBLIC_EXPORT css::uno::XInterface * SAL_CALL
    4311          24 : stardiv_Toolkit_UnoControlPatternFieldModel_get_implementation(
    4312             :     css::uno::XComponentContext *context,
    4313             :     css::uno::Sequence<css::uno::Any> const &)
    4314             : {
    4315          24 :     return cppu::acquire(new UnoControlPatternFieldModel(context));
    4316             : }
    4317             : 
    4318             : 
    4319             : //  class UnoPatternFieldControl
    4320             : 
    4321          14 : UnoPatternFieldControl::UnoPatternFieldControl()
    4322          14 :     :UnoSpinFieldControl()
    4323             : {
    4324          14 : }
    4325             : 
    4326          16 : OUString UnoPatternFieldControl::GetComponentServiceName()
    4327             : {
    4328          16 :     return OUString("patternfield");
    4329             : }
    4330             : 
    4331        1848 : void UnoPatternFieldControl::ImplSetPeerProperty( const OUString& rPropName, const uno::Any& rVal )
    4332             : {
    4333        1848 :     sal_uInt16 nType = GetPropertyId( rPropName );
    4334        1848 :     if ( ( nType == BASEPROPERTY_TEXT ) || ( nType == BASEPROPERTY_EDITMASK ) || ( nType == BASEPROPERTY_LITERALMASK ) )
    4335             :     {
    4336             :         // These masks cannot be set consecutively
    4337         160 :         OUString Text = ImplGetPropertyValue_UString( BASEPROPERTY_TEXT );
    4338         320 :         OUString EditMask = ImplGetPropertyValue_UString( BASEPROPERTY_EDITMASK );
    4339         320 :         OUString LiteralMask = ImplGetPropertyValue_UString( BASEPROPERTY_LITERALMASK );
    4340             : 
    4341         320 :         uno::Reference < awt::XPatternField >  xPF( getPeer(), uno::UNO_QUERY );
    4342         160 :         if (xPF.is())
    4343             :         {
    4344             :             // same comment as in UnoControl::ImplSetPeerProperty - see there
    4345         160 :             OUString sText( Text );
    4346         160 :             ImplCheckLocalize( sText );
    4347         160 :             xPF->setString( sText );
    4348         160 :             xPF->setMasks( EditMask, LiteralMask );
    4349         160 :         }
    4350             :     }
    4351             :     else
    4352        1688 :         UnoSpinFieldControl::ImplSetPeerProperty( rPropName, rVal );
    4353        1848 : }
    4354             : 
    4355             : 
    4356             : // uno::XInterface
    4357         646 : uno::Any UnoPatternFieldControl::queryAggregation( const uno::Type & rType ) throw(uno::RuntimeException, std::exception)
    4358             : {
    4359             :     uno::Any aRet = ::cppu::queryInterface( rType,
    4360         646 :                                         (static_cast< awt::XPatternField* >(this)) );
    4361         646 :     return (aRet.hasValue() ? aRet : UnoSpinFieldControl::queryAggregation( rType ));
    4362             : }
    4363             : 
    4364             : // lang::XTypeProvider
    4365           0 : IMPL_XTYPEPROVIDER_START( UnoPatternFieldControl )
    4366           0 :     cppu::UnoType<awt::XPatternField>::get(),
    4367             :     UnoSpinFieldControl::getTypes()
    4368           0 : IMPL_XTYPEPROVIDER_END
    4369             : 
    4370           4 : void UnoPatternFieldControl::setString( const OUString& rString ) throw(uno::RuntimeException, std::exception)
    4371             : {
    4372           4 :     setText( rString );
    4373           4 : }
    4374             : 
    4375           8 : OUString UnoPatternFieldControl::getString() throw(uno::RuntimeException, std::exception)
    4376             : {
    4377           8 :     return getText();
    4378             : }
    4379             : 
    4380           4 : void UnoPatternFieldControl::setMasks( const OUString& EditMask, const OUString& LiteralMask ) throw(uno::RuntimeException, std::exception)
    4381             : {
    4382           4 :     uno::Any aAny;
    4383           4 :     aAny <<= EditMask;
    4384           4 :     ImplSetPropertyValue( GetPropertyName( BASEPROPERTY_EDITMASK ), aAny, true );
    4385           4 :     aAny <<= LiteralMask;
    4386           4 :     ImplSetPropertyValue( GetPropertyName( BASEPROPERTY_LITERALMASK ), aAny, true );
    4387           4 : }
    4388             : 
    4389           8 : void UnoPatternFieldControl::getMasks( OUString& EditMask, OUString& LiteralMask ) throw(uno::RuntimeException, std::exception)
    4390             : {
    4391           8 :     EditMask = ImplGetPropertyValue_UString( BASEPROPERTY_EDITMASK );
    4392           8 :     LiteralMask = ImplGetPropertyValue_UString( BASEPROPERTY_LITERALMASK );
    4393           8 : }
    4394             : 
    4395           4 : void UnoPatternFieldControl::setStrictFormat( sal_Bool bStrict ) throw(uno::RuntimeException, std::exception)
    4396             : {
    4397           4 :     uno::Any aAny;
    4398           4 :     aAny <<= bStrict;
    4399           4 :     ImplSetPropertyValue( GetPropertyName( BASEPROPERTY_STRICTFORMAT ), aAny, true );
    4400           4 : }
    4401             : 
    4402           8 : sal_Bool UnoPatternFieldControl::isStrictFormat() throw(uno::RuntimeException, std::exception)
    4403             : {
    4404           8 :     return ImplGetPropertyValue_BOOL( BASEPROPERTY_STRICTFORMAT );
    4405             : }
    4406             : 
    4407             : extern "C" SAL_DLLPUBLIC_EXPORT css::uno::XInterface * SAL_CALL
    4408          14 : stardiv_Toolkit_UnoPatternFieldControl_get_implementation(
    4409             :     css::uno::XComponentContext *,
    4410             :     css::uno::Sequence<css::uno::Any> const &)
    4411             : {
    4412          14 :     return cppu::acquire(new UnoPatternFieldControl());
    4413             : }
    4414             : 
    4415             : 
    4416             : //  class UnoControlProgressBarModel
    4417             : 
    4418           8 : UnoControlProgressBarModel::UnoControlProgressBarModel( const Reference< XComponentContext >& rxContext )
    4419           8 :     :UnoControlModel( rxContext )
    4420             : {
    4421           8 :     ImplRegisterProperty( BASEPROPERTY_BACKGROUNDCOLOR );
    4422           8 :     ImplRegisterProperty( BASEPROPERTY_BORDER );
    4423           8 :     ImplRegisterProperty( BASEPROPERTY_BORDERCOLOR );
    4424           8 :     ImplRegisterProperty( BASEPROPERTY_DEFAULTCONTROL );
    4425           8 :     ImplRegisterProperty( BASEPROPERTY_ENABLED );
    4426           8 :     ImplRegisterProperty( BASEPROPERTY_ENABLEVISIBLE );
    4427           8 :     ImplRegisterProperty( BASEPROPERTY_FILLCOLOR );
    4428           8 :     ImplRegisterProperty( BASEPROPERTY_HELPTEXT );
    4429           8 :     ImplRegisterProperty( BASEPROPERTY_HELPURL );
    4430           8 :     ImplRegisterProperty( BASEPROPERTY_PRINTABLE );
    4431           8 :     ImplRegisterProperty( BASEPROPERTY_PROGRESSVALUE );
    4432           8 :     ImplRegisterProperty( BASEPROPERTY_PROGRESSVALUE_MAX );
    4433           8 :     ImplRegisterProperty( BASEPROPERTY_PROGRESSVALUE_MIN );
    4434           8 : }
    4435             : 
    4436           2 : OUString UnoControlProgressBarModel::getServiceName( ) throw(::com::sun::star::uno::RuntimeException, std::exception)
    4437             : {
    4438           2 :     return OUString::createFromAscii( szServiceName_UnoControlProgressBarModel );
    4439             : }
    4440             : 
    4441         130 : uno::Any UnoControlProgressBarModel::ImplGetDefaultValue( sal_uInt16 nPropId ) const
    4442             : {
    4443         130 :     if ( nPropId == BASEPROPERTY_DEFAULTCONTROL )
    4444             :     {
    4445          10 :         uno::Any aAny;
    4446          10 :         aAny <<= OUString::createFromAscii( szServiceName_UnoControlProgressBar );
    4447          10 :         return aAny;
    4448             :     }
    4449             : 
    4450         120 :     return UnoControlModel::ImplGetDefaultValue( nPropId );
    4451             : }
    4452             : 
    4453         744 : ::cppu::IPropertyArrayHelper& UnoControlProgressBarModel::getInfoHelper()
    4454             : {
    4455             :     static UnoPropertyArrayHelper* pHelper = NULL;
    4456         744 :     if ( !pHelper )
    4457             :     {
    4458           2 :         uno::Sequence<sal_Int32>    aIDs = ImplGetPropertyIds();
    4459           2 :         pHelper = new UnoPropertyArrayHelper( aIDs );
    4460             :     }
    4461         744 :     return *pHelper;
    4462             : }
    4463             : 
    4464             : // beans::XMultiPropertySet
    4465          28 : uno::Reference< beans::XPropertySetInfo > UnoControlProgressBarModel::getPropertySetInfo(  ) throw(uno::RuntimeException, std::exception)
    4466             : {
    4467          28 :     static uno::Reference< beans::XPropertySetInfo > xInfo( createPropertySetInfo( getInfoHelper() ) );
    4468          28 :     return xInfo;
    4469             : }
    4470             : 
    4471             : extern "C" SAL_DLLPUBLIC_EXPORT css::uno::XInterface * SAL_CALL
    4472           6 : stardiv_Toolkit_UnoControlProgressBarModel_get_implementation(
    4473             :     css::uno::XComponentContext *context,
    4474             :     css::uno::Sequence<css::uno::Any> const &)
    4475             : {
    4476           6 :     return cppu::acquire(new UnoControlProgressBarModel(context));
    4477             : }
    4478             : 
    4479             : 
    4480             : //  class UnoProgressBarControl
    4481             : 
    4482           0 : UnoProgressBarControl::UnoProgressBarControl()
    4483           0 :     :UnoControlBase()
    4484             : {
    4485           0 : }
    4486             : 
    4487           0 : OUString UnoProgressBarControl::GetComponentServiceName()
    4488             : {
    4489           0 :     return OUString("ProgressBar");
    4490             : }
    4491             : 
    4492             : // uno::XInterface
    4493           0 : uno::Any UnoProgressBarControl::queryAggregation( const uno::Type & rType ) throw(uno::RuntimeException, std::exception)
    4494             : {
    4495             :     uno::Any aRet = ::cppu::queryInterface( rType,
    4496           0 :                                         (static_cast< awt::XProgressBar* >(this)) );
    4497           0 :     return (aRet.hasValue() ? aRet : UnoControlBase::queryAggregation( rType ));
    4498             : }
    4499             : 
    4500             : // lang::XTypeProvider
    4501           0 : IMPL_XTYPEPROVIDER_START( UnoProgressBarControl )
    4502           0 :     cppu::UnoType<awt::XProgressBar>::get(),
    4503             :     UnoControlBase::getTypes()
    4504           0 : IMPL_XTYPEPROVIDER_END
    4505             : 
    4506             : // ::com::sun::star::awt::XProgressBar
    4507           0 : void UnoProgressBarControl::setForegroundColor( sal_Int32 nColor ) throw(::com::sun::star::uno::RuntimeException, std::exception)
    4508             : {
    4509           0 :     uno::Any aAny;
    4510           0 :     aAny <<= nColor;
    4511           0 :     ImplSetPropertyValue( GetPropertyName( BASEPROPERTY_FILLCOLOR ), aAny, true );
    4512           0 : }
    4513             : 
    4514           0 : void UnoProgressBarControl::setBackgroundColor( sal_Int32 nColor ) throw(::com::sun::star::uno::RuntimeException, std::exception)
    4515             : {
    4516           0 :     uno::Any aAny;
    4517           0 :     aAny <<= nColor;
    4518           0 :     ImplSetPropertyValue( GetPropertyName( BASEPROPERTY_BACKGROUNDCOLOR ), aAny, true );
    4519           0 : }
    4520             : 
    4521           0 : void UnoProgressBarControl::setValue( sal_Int32 nValue ) throw(::com::sun::star::uno::RuntimeException, std::exception)
    4522             : {
    4523           0 :     uno::Any aAny;
    4524           0 :     aAny <<= nValue;
    4525           0 :     ImplSetPropertyValue( GetPropertyName( BASEPROPERTY_PROGRESSVALUE ), aAny, true );
    4526           0 : }
    4527             : 
    4528           0 : void UnoProgressBarControl::setRange( sal_Int32 nMin, sal_Int32 nMax ) throw(::com::sun::star::uno::RuntimeException, std::exception )
    4529             : {
    4530           0 :     uno::Any aMin;
    4531           0 :     uno::Any aMax;
    4532             : 
    4533           0 :     if ( nMin < nMax )
    4534             :     {
    4535             :         // take correct min and max
    4536           0 :         aMin <<= nMin;
    4537           0 :         aMax <<= nMax;
    4538             :     }
    4539             :     else
    4540             :     {
    4541             :         // change min and max
    4542           0 :         aMin <<= nMax;
    4543           0 :         aMax <<= nMin;
    4544             :     }
    4545             : 
    4546           0 :     ImplSetPropertyValue( GetPropertyName( BASEPROPERTY_PROGRESSVALUE_MIN ), aMin, true );
    4547           0 :     ImplSetPropertyValue( GetPropertyName( BASEPROPERTY_PROGRESSVALUE_MAX ), aMax, true );
    4548           0 : }
    4549             : 
    4550           0 : sal_Int32 UnoProgressBarControl::getValue() throw(::com::sun::star::uno::RuntimeException, std::exception)
    4551             : {
    4552           0 :     return ImplGetPropertyValue_INT32( BASEPROPERTY_PROGRESSVALUE );
    4553             : }
    4554             : 
    4555             : extern "C" SAL_DLLPUBLIC_EXPORT css::uno::XInterface * SAL_CALL
    4556           0 : stardiv_Toolkit_UnoProgressBarControl_get_implementation(
    4557             :     css::uno::XComponentContext *,
    4558             :     css::uno::Sequence<css::uno::Any> const &)
    4559             : {
    4560           0 :     return cppu::acquire(new UnoProgressBarControl());
    4561             : }
    4562             : 
    4563             : 
    4564             : //  class UnoControlFixedLineModel
    4565             : 
    4566           8 : UnoControlFixedLineModel::UnoControlFixedLineModel( const Reference< XComponentContext >& rxContext )
    4567           8 :     :UnoControlModel( rxContext )
    4568             : {
    4569           8 :     ImplRegisterProperty( BASEPROPERTY_BACKGROUNDCOLOR );
    4570           8 :     ImplRegisterProperty( BASEPROPERTY_DEFAULTCONTROL );
    4571           8 :     ImplRegisterProperty( BASEPROPERTY_ENABLED );
    4572           8 :     ImplRegisterProperty( BASEPROPERTY_ENABLEVISIBLE );
    4573           8 :     ImplRegisterProperty( BASEPROPERTY_FONTDESCRIPTOR );
    4574           8 :     ImplRegisterProperty( BASEPROPERTY_HELPTEXT );
    4575           8 :     ImplRegisterProperty( BASEPROPERTY_HELPURL );
    4576           8 :     ImplRegisterProperty( BASEPROPERTY_LABEL );
    4577           8 :     ImplRegisterProperty( BASEPROPERTY_ORIENTATION );
    4578           8 :     ImplRegisterProperty( BASEPROPERTY_PRINTABLE );
    4579           8 : }
    4580             : 
    4581           2 : OUString UnoControlFixedLineModel::getServiceName( ) throw(::com::sun::star::uno::RuntimeException, std::exception)
    4582             : {
    4583           2 :     return OUString::createFromAscii( szServiceName_UnoControlFixedLineModel );
    4584             : }
    4585             : 
    4586         140 : uno::Any UnoControlFixedLineModel::ImplGetDefaultValue( sal_uInt16 nPropId ) const
    4587             : {
    4588         140 :     if ( nPropId == BASEPROPERTY_DEFAULTCONTROL )
    4589             :     {
    4590          10 :         uno::Any aAny;
    4591          10 :         aAny <<= OUString::createFromAscii( szServiceName_UnoControlFixedLine );
    4592          10 :         return aAny;
    4593             :     }
    4594         130 :     return UnoControlModel::ImplGetDefaultValue( nPropId );
    4595             : }
    4596             : 
    4597        1462 : ::cppu::IPropertyArrayHelper& UnoControlFixedLineModel::getInfoHelper()
    4598             : {
    4599             :     static UnoPropertyArrayHelper* pHelper = NULL;
    4600        1462 :     if ( !pHelper )
    4601             :     {
    4602           2 :         uno::Sequence<sal_Int32>    aIDs = ImplGetPropertyIds();
    4603           2 :         pHelper = new UnoPropertyArrayHelper( aIDs );
    4604             :     }
    4605        1462 :     return *pHelper;
    4606             : }
    4607             : 
    4608             : // beans::XMultiPropertySet
    4609          68 : uno::Reference< beans::XPropertySetInfo > UnoControlFixedLineModel::getPropertySetInfo(  ) throw(uno::RuntimeException, std::exception)
    4610             : {
    4611          68 :     static uno::Reference< beans::XPropertySetInfo > xInfo( createPropertySetInfo( getInfoHelper() ) );
    4612          68 :     return xInfo;
    4613             : }
    4614             : 
    4615             : extern "C" SAL_DLLPUBLIC_EXPORT css::uno::XInterface * SAL_CALL
    4616           6 : stardiv_Toolkit_UnoControlFixedLineModel_get_implementation(
    4617             :     css::uno::XComponentContext *context,
    4618             :     css::uno::Sequence<css::uno::Any> const &)
    4619             : {
    4620           6 :     return cppu::acquire(new UnoControlFixedLineModel(context));
    4621             : }
    4622             : 
    4623             : 
    4624             : //  class UnoFixedLineControl
    4625             : 
    4626           0 : UnoFixedLineControl::UnoFixedLineControl()
    4627           0 :     :UnoControlBase()
    4628             : {
    4629           0 :     maComponentInfos.nWidth = 100;      // ??
    4630           0 :     maComponentInfos.nHeight = 100;     // ??
    4631           0 : }
    4632             : 
    4633           0 : OUString UnoFixedLineControl::GetComponentServiceName()
    4634             : {
    4635           0 :     return OUString("FixedLine");
    4636             : }
    4637             : 
    4638           0 : sal_Bool UnoFixedLineControl::isTransparent() throw(uno::RuntimeException, std::exception)
    4639             : {
    4640           0 :     return sal_True;
    4641             : }
    4642             : 
    4643             : extern "C" SAL_DLLPUBLIC_EXPORT css::uno::XInterface * SAL_CALL
    4644           0 : stardiv_Toolkit_UnoFixedLineControl_get_implementation(
    4645             :     css::uno::XComponentContext *,
    4646             :     css::uno::Sequence<css::uno::Any> const &)
    4647             : {
    4648           0 :     return cppu::acquire(new UnoFixedLineControl());
    4649        1227 : }
    4650             : 
    4651             : /* vim:set shiftwidth=4 softtabstop=4 expandtab: */

Generated by: LCOV version 1.10