LCOV - code coverage report
Current view: top level - toolkit/source/controls - unocontrols.cxx (source / functions) Hit Total Coverage
Test: commit c8344322a7af75b84dd3ca8f78b05543a976dfd5 Lines: 1986 2591 76.6 %
Date: 2015-06-13 12:38:46 Functions: 450 571 78.8 %
Legend: Lines: hit not hit

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

Generated by: LCOV version 1.11