LCOV - code coverage report
Current view: top level - svtools/source/uno - unoiface.cxx (source / functions) Hit Total Coverage
Test: commit 10e77ab3ff6f4314137acd6e2702a6e5c1ce1fae Lines: 335 1202 27.9 %
Date: 2014-11-03 Functions: 47 166 28.3 %
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             : 
      21             : #include <tools/debug.hxx>
      22             : #include <vcl/fixedhyper.hxx>
      23             : #include <vcl/prgsbar.hxx>
      24             : #include <vcl/svapp.hxx>
      25             : #include <svtools/svmedit.hxx>
      26             : #include <unoiface.hxx>
      27             : #include <svtools/filectrl.hxx>
      28             : #include <roadmap.hxx>
      29             : #include <com/sun/star/lang/XMultiServiceFactory.hpp>
      30             : #include <com/sun/star/lang/XSingleServiceFactory.hpp>
      31             : #include <com/sun/star/awt/LineEndFormat.hpp>
      32             : #include <comphelper/processfactory.hxx>
      33             : #include <toolkit/helper/convert.hxx>
      34             : #include <toolkit/helper/property.hxx>
      35             : #include <svtools/fmtfield.hxx>
      36             : #include <svl/numuno.hxx>
      37             : #include <svtools/calendar.hxx>
      38             : #include <svtools/treelistbox.hxx>
      39             : #include "treecontrolpeer.hxx"
      40             : #include "svtxgridcontrol.hxx"
      41             : #include <table/tablecontrol.hxx>
      42             : 
      43             : namespace
      44             : {
      45          26 :     static void lcl_setWinBits( vcl::Window* _pWindow, WinBits _nBits, bool _bSet )
      46             :     {
      47          26 :         WinBits nStyle = _pWindow->GetStyle();
      48          26 :         if ( _bSet )
      49          22 :             nStyle |= _nBits;
      50             :         else
      51           4 :             nStyle &= ~_nBits;
      52          26 :         _pWindow->SetStyle( nStyle );
      53          26 :     }
      54             : }
      55             : 
      56             : 
      57             : //  help function for the toolkit...
      58             : 
      59             : 
      60             : extern "C" {
      61             : 
      62       50867 : SAL_DLLPUBLIC_EXPORT vcl::Window* CreateWindow( VCLXWindow** ppNewComp, const ::com::sun::star::awt::WindowDescriptor* pDescriptor, vcl::Window* pParent, WinBits nWinBits )
      63             : {
      64       50867 :     vcl::Window* pWindow = NULL;
      65       50867 :     OUString aServiceName( pDescriptor->WindowServiceName );
      66       50867 :     if ( aServiceName.equalsIgnoreAsciiCase( "MultiLineEdit" ) )
      67             :     {
      68          22 :         if ( pParent )
      69             :         {
      70          22 :             pWindow = new MultiLineEdit( pParent, nWinBits|WB_IGNORETAB);
      71          22 :             static_cast< MultiLineEdit* >( pWindow )->DisableSelectionOnFocus();
      72          22 :             *ppNewComp = new VCLXMultiLineEdit;
      73             :         }
      74             :         else
      75             :         {
      76           0 :             *ppNewComp = NULL;
      77           0 :             return NULL;
      78             :         }
      79             :     }
      80       50845 :     else if ( aServiceName.equalsIgnoreAsciiCase( "FileControl" ) )
      81             :     {
      82           0 :         if ( pParent )
      83             :         {
      84           0 :             pWindow = new FileControl( pParent, nWinBits );
      85           0 :             *ppNewComp = new VCLXFileControl;
      86             :         }
      87             :         else
      88             :         {
      89           0 :             *ppNewComp = NULL;
      90           0 :             return NULL;
      91             :         }
      92             :     }
      93       50845 :     else if (aServiceName.equalsIgnoreAsciiCase("FormattedField") )
      94             :     {
      95           2 :         pWindow = new FormattedField( pParent, nWinBits );
      96           2 :         *ppNewComp = new SVTXFormattedField;
      97             :     }
      98       50843 :     else if (aServiceName.equalsIgnoreAsciiCase("NumericField") )
      99             :     {
     100          34 :         pWindow = new DoubleNumericField( pParent, nWinBits );
     101          34 :         *ppNewComp = new SVTXNumericField;
     102             :     }
     103       50809 :     else if (aServiceName.equalsIgnoreAsciiCase("LongCurrencyField") )
     104             :     {
     105          34 :         pWindow = new DoubleCurrencyField( pParent, nWinBits );
     106          34 :         *ppNewComp = new SVTXCurrencyField;
     107             :     }
     108       50775 :     else if (aServiceName.equalsIgnoreAsciiCase("datefield") )
     109             :     {
     110          60 :         pWindow = new CalendarField( pParent, nWinBits);
     111          60 :         static_cast<CalendarField*>(pWindow)->EnableToday();
     112          60 :         static_cast<CalendarField*>(pWindow)->EnableNone();
     113          60 :         static_cast<CalendarField*>(pWindow)->EnableEmptyFieldValue( true );
     114          60 :         *ppNewComp = new SVTXDateField;
     115          60 :         static_cast<VCLXFormattedSpinField*>(*ppNewComp)->SetFormatter( (FormatterBase*)static_cast<DateField*>(pWindow) );
     116             :     }
     117       50715 :     else if (aServiceName.equalsIgnoreAsciiCase("roadmap") )
     118             :     {
     119           0 :         pWindow = new ::svt::ORoadmap( pParent, WB_TABSTOP );
     120           0 :         *ppNewComp = new SVTXRoadmap;
     121             :     }
     122       50715 :     else if ( aServiceName.equalsIgnoreAsciiCase( "ProgressBar" ) )
     123             :     {
     124           0 :         if ( pParent )
     125             :         {
     126           0 :             pWindow = new ProgressBar( pParent, nWinBits );
     127           0 :             *ppNewComp = new VCLXProgressBar;
     128             :         }
     129             :         else
     130             :         {
     131           0 :             *ppNewComp = NULL;
     132           0 :             return NULL;
     133             :         }
     134             :     }
     135       50715 :     else if ( aServiceName.equalsIgnoreAsciiCase( "Tree" ) )
     136             :     {
     137           0 :         TreeControlPeer* pPeer = new TreeControlPeer;
     138           0 :         *ppNewComp = pPeer;
     139           0 :         pWindow = pPeer->createVclControl( pParent, nWinBits );
     140             :     }
     141       50715 :     else if ( aServiceName.equalsIgnoreAsciiCase( "FixedHyperlink" ) )
     142             :     {
     143           0 :         if ( pParent )
     144             :         {
     145           0 :             pWindow = new FixedHyperlink( pParent, nWinBits );
     146           0 :             *ppNewComp = new VCLXFixedHyperlink;
     147             :         }
     148             :         else
     149             :         {
     150           0 :             *ppNewComp = NULL;
     151           0 :             return NULL;
     152             :         }
     153             :     }
     154       50715 :     else if ( aServiceName.equalsIgnoreAsciiCase( "Grid" ) )
     155             :     {
     156           2 :         if ( pParent )
     157             :         {
     158           2 :             pWindow = new ::svt::table::TableControl(pParent, nWinBits);
     159           2 :             *ppNewComp = new SVTXGridControl;
     160             :         }
     161             :         else
     162             :         {
     163           0 :             *ppNewComp = NULL;
     164           0 :             return NULL;
     165             :         }
     166             :     }
     167       50867 :     return pWindow;
     168             : }
     169             : 
     170             : }   // extern "C"
     171             : 
     172             : 
     173             : //  class VCLXMultiLineEdit
     174             : 
     175          22 : VCLXMultiLineEdit::VCLXMultiLineEdit()
     176             :     :maTextListeners( *this )
     177          22 :     ,meLineEndType( LINEEND_LF )    // default behavior before introducing this property: LF (unix-like)
     178             : {
     179          22 : }
     180             : 
     181          44 : VCLXMultiLineEdit::~VCLXMultiLineEdit()
     182             : {
     183          44 : }
     184             : 
     185         599 : ::com::sun::star::uno::Any VCLXMultiLineEdit::queryInterface( const ::com::sun::star::uno::Type & rType ) throw(::com::sun::star::uno::RuntimeException, std::exception)
     186             : {
     187             :     ::com::sun::star::uno::Any aRet = ::cppu::queryInterface( rType,
     188             :                                         (static_cast< ::com::sun::star::awt::XTextComponent* >(this)),
     189             :                                         (static_cast< ::com::sun::star::awt::XTextArea* >(this)),
     190             :                                         (static_cast< ::com::sun::star::awt::XTextLayoutConstrains* >(this)),
     191         599 :                                         (static_cast< ::com::sun::star::lang::XTypeProvider* >(this)) );
     192         599 :     return (aRet.hasValue() ? aRet : VCLXWindow::queryInterface( rType ));
     193             : }
     194             : 
     195             : // ::com::sun::star::lang::XTypeProvider
     196           0 : IMPL_XTYPEPROVIDER_START( VCLXMultiLineEdit )
     197           0 :     cppu::UnoType<com::sun::star::awt::XTextComponent>::get(),
     198           0 :     cppu::UnoType<com::sun::star::awt::XTextArea>::get(),
     199           0 :     cppu::UnoType<com::sun::star::awt::XTextLayoutConstrains>::get(),
     200             :     VCLXWindow::getTypes()
     201           0 : IMPL_XTYPEPROVIDER_END
     202             : 
     203          22 : void VCLXMultiLineEdit::addTextListener( const ::com::sun::star::uno::Reference< ::com::sun::star::awt::XTextListener > & l ) throw(::com::sun::star::uno::RuntimeException, std::exception)
     204             : {
     205          22 :     maTextListeners.addInterface( l );
     206          22 : }
     207             : 
     208           0 : void VCLXMultiLineEdit::removeTextListener( const ::com::sun::star::uno::Reference< ::com::sun::star::awt::XTextListener > & l ) throw(::com::sun::star::uno::RuntimeException, std::exception)
     209             : {
     210           0 :     maTextListeners.removeInterface( l );
     211           0 : }
     212             : 
     213          32 : void VCLXMultiLineEdit::setText( const OUString& aText ) throw(::com::sun::star::uno::RuntimeException, std::exception)
     214             : {
     215          32 :     SolarMutexGuard aGuard;
     216             : 
     217          32 :     MultiLineEdit* pEdit = static_cast<MultiLineEdit*>(GetWindow());
     218          32 :     if ( pEdit )
     219             :     {
     220          32 :         pEdit->SetText( aText );
     221             : 
     222             :         // #107218# Call same listeners like VCL would do after user interaction
     223          32 :         SetSynthesizingVCLEvent( true );
     224          32 :         pEdit->SetModifyFlag();
     225          32 :         pEdit->Modify();
     226          32 :         SetSynthesizingVCLEvent( false );
     227          32 :     }
     228          32 : }
     229             : 
     230           0 : void VCLXMultiLineEdit::insertText( const ::com::sun::star::awt::Selection& rSel, const OUString& aText ) throw(::com::sun::star::uno::RuntimeException, std::exception)
     231             : {
     232           0 :     SolarMutexGuard aGuard;
     233             : 
     234           0 :     MultiLineEdit* pEdit = static_cast<MultiLineEdit*>(GetWindow());
     235           0 :     if ( pEdit )
     236             :     {
     237           0 :         setSelection( rSel );
     238           0 :         pEdit->ReplaceSelected( aText );
     239           0 :     }
     240           0 : }
     241             : 
     242           0 : OUString VCLXMultiLineEdit::getText() throw(::com::sun::star::uno::RuntimeException, std::exception)
     243             : {
     244           0 :     SolarMutexGuard aGuard;
     245             : 
     246           0 :     OUString aText;
     247           0 :     MultiLineEdit* pEdit = static_cast<MultiLineEdit*>(GetWindow());
     248           0 :     if ( pEdit )
     249           0 :         aText = pEdit->GetText( meLineEndType );
     250           0 :     return aText;
     251             : }
     252             : 
     253           0 : OUString VCLXMultiLineEdit::getSelectedText() throw(::com::sun::star::uno::RuntimeException, std::exception)
     254             : {
     255           0 :     SolarMutexGuard aGuard;
     256             : 
     257           0 :     OUString aText;
     258           0 :     MultiLineEdit* pMultiLineEdit = static_cast<MultiLineEdit*>(GetWindow());
     259           0 :     if ( pMultiLineEdit)
     260           0 :         aText = pMultiLineEdit->GetSelected( meLineEndType );
     261           0 :     return aText;
     262             : 
     263             : }
     264             : 
     265           0 : void VCLXMultiLineEdit::setSelection( const ::com::sun::star::awt::Selection& aSelection ) throw(::com::sun::star::uno::RuntimeException, std::exception)
     266             : {
     267           0 :     SolarMutexGuard aGuard;
     268             : 
     269           0 :     MultiLineEdit* pMultiLineEdit = static_cast<MultiLineEdit*>(GetWindow());
     270           0 :     if ( pMultiLineEdit )
     271             :     {
     272           0 :         pMultiLineEdit->SetSelection( Selection( aSelection.Min, aSelection.Max ) );
     273           0 :     }
     274           0 : }
     275             : 
     276           0 : ::com::sun::star::awt::Selection VCLXMultiLineEdit::getSelection() throw(::com::sun::star::uno::RuntimeException, std::exception)
     277             : {
     278           0 :     SolarMutexGuard aGuard;
     279             : 
     280           0 :     ::com::sun::star::awt::Selection aSel;
     281           0 :     MultiLineEdit* pMultiLineEdit = static_cast<MultiLineEdit*>(GetWindow());
     282           0 :     if ( pMultiLineEdit )
     283             :     {
     284           0 :         aSel.Min = pMultiLineEdit->GetSelection().Min();
     285           0 :         aSel.Max = pMultiLineEdit->GetSelection().Max();
     286             :     }
     287           0 :     return aSel;
     288             : }
     289             : 
     290           0 : sal_Bool VCLXMultiLineEdit::isEditable() throw(::com::sun::star::uno::RuntimeException, std::exception)
     291             : {
     292           0 :     SolarMutexGuard aGuard;
     293             : 
     294           0 :     MultiLineEdit* pMultiLineEdit = static_cast<MultiLineEdit*>(GetWindow());
     295           0 :     return ( pMultiLineEdit && !pMultiLineEdit->IsReadOnly() && pMultiLineEdit->IsEnabled() ) ? sal_True : sal_False;
     296             : }
     297             : 
     298           0 : void VCLXMultiLineEdit::setEditable( sal_Bool bEditable ) throw(::com::sun::star::uno::RuntimeException, std::exception)
     299             : {
     300           0 :     SolarMutexGuard aGuard;
     301             : 
     302           0 :     MultiLineEdit* pMultiLineEdit = static_cast<MultiLineEdit*>(GetWindow());
     303           0 :     if ( pMultiLineEdit )
     304           0 :         pMultiLineEdit->SetReadOnly( !bEditable );
     305           0 : }
     306             : 
     307           0 : void VCLXMultiLineEdit::setMaxTextLen( sal_Int16 nLen ) throw(::com::sun::star::uno::RuntimeException, std::exception)
     308             : {
     309           0 :     SolarMutexGuard aGuard;
     310             : 
     311           0 :     MultiLineEdit* pMultiLineEdit = static_cast<MultiLineEdit*>(GetWindow());
     312           0 :     if ( pMultiLineEdit )
     313           0 :         pMultiLineEdit->SetMaxTextLen( nLen );
     314           0 : }
     315             : 
     316           0 : sal_Int16 VCLXMultiLineEdit::getMaxTextLen() throw(::com::sun::star::uno::RuntimeException, std::exception)
     317             : {
     318           0 :     SolarMutexGuard aGuard;
     319             : 
     320           0 :     MultiLineEdit* pMultiLineEdit = static_cast<MultiLineEdit*>(GetWindow());
     321           0 :     return pMultiLineEdit ? (sal_Int16)pMultiLineEdit->GetMaxTextLen() : (sal_Int16)0;
     322             : }
     323             : 
     324           0 : OUString VCLXMultiLineEdit::getTextLines() throw(::com::sun::star::uno::RuntimeException, std::exception)
     325             : {
     326           0 :     SolarMutexGuard aGuard;
     327             : 
     328           0 :     OUString aText;
     329           0 :     MultiLineEdit* pEdit = static_cast<MultiLineEdit*>(GetWindow());
     330           0 :     if ( pEdit )
     331           0 :         aText = pEdit->GetTextLines( meLineEndType );
     332           0 :     return aText;
     333             : }
     334             : 
     335           0 : ::com::sun::star::awt::Size VCLXMultiLineEdit::getMinimumSize() throw(::com::sun::star::uno::RuntimeException, std::exception)
     336             : {
     337           0 :     SolarMutexGuard aGuard;
     338             : 
     339           0 :     ::com::sun::star::awt::Size aSz;
     340           0 :     MultiLineEdit* pEdit = static_cast<MultiLineEdit*>(GetWindow());
     341           0 :     if ( pEdit )
     342           0 :         aSz = AWTSize(pEdit->CalcMinimumSize());
     343           0 :     return aSz;
     344             : }
     345             : 
     346           0 : ::com::sun::star::awt::Size VCLXMultiLineEdit::getPreferredSize() throw(::com::sun::star::uno::RuntimeException, std::exception)
     347             : {
     348           0 :     return getMinimumSize();
     349             : }
     350             : 
     351           0 : ::com::sun::star::awt::Size VCLXMultiLineEdit::calcAdjustedSize( const ::com::sun::star::awt::Size& rNewSize ) throw(::com::sun::star::uno::RuntimeException, std::exception)
     352             : {
     353           0 :     SolarMutexGuard aGuard;
     354             : 
     355           0 :     ::com::sun::star::awt::Size aSz = rNewSize;
     356           0 :     MultiLineEdit* pEdit = static_cast<MultiLineEdit*>(GetWindow());
     357           0 :     if ( pEdit )
     358           0 :         aSz = AWTSize(pEdit->CalcAdjustedSize( VCLSize(rNewSize )));
     359           0 :     return aSz;
     360             : }
     361             : 
     362           0 : ::com::sun::star::awt::Size VCLXMultiLineEdit::getMinimumSize( sal_Int16 nCols, sal_Int16 nLines ) throw(::com::sun::star::uno::RuntimeException, std::exception)
     363             : {
     364           0 :     SolarMutexGuard aGuard;
     365             : 
     366           0 :     ::com::sun::star::awt::Size aSz;
     367           0 :     MultiLineEdit* pEdit = static_cast<MultiLineEdit*>(GetWindow());
     368           0 :     if ( pEdit )
     369           0 :         aSz = AWTSize(pEdit->CalcBlockSize( nCols, nLines ));
     370           0 :     return aSz;
     371             : }
     372             : 
     373           0 : void VCLXMultiLineEdit::getColumnsAndLines( sal_Int16& nCols, sal_Int16& nLines ) throw(::com::sun::star::uno::RuntimeException, std::exception)
     374             : {
     375           0 :     SolarMutexGuard aGuard;
     376             : 
     377           0 :     nCols = nLines = 0;
     378           0 :     MultiLineEdit* pEdit = static_cast<MultiLineEdit*>(GetWindow());
     379           0 :     if ( pEdit )
     380             :     {
     381             :         sal_uInt16 nC, nL;
     382           0 :         pEdit->GetMaxVisColumnsAndLines( nC, nL );
     383           0 :         nCols = nC;
     384           0 :         nLines = nL;
     385           0 :     }
     386           0 : }
     387             : 
     388          66 : void VCLXMultiLineEdit::ProcessWindowEvent( const VclWindowEvent& rVclWindowEvent )
     389             : {
     390          66 :     switch ( rVclWindowEvent.GetId() )
     391             :     {
     392             :         case VCLEVENT_EDIT_MODIFY:
     393             :         {
     394           0 :             if ( maTextListeners.getLength() )
     395             :             {
     396           0 :                 ::com::sun::star::awt::TextEvent aEvent;
     397           0 :                 aEvent.Source = (::cppu::OWeakObject*)this;
     398           0 :                 maTextListeners.textChanged( aEvent );
     399             :             }
     400             :         }
     401           0 :         break;
     402             :         default:
     403             :         {
     404          66 :             VCLXWindow::ProcessWindowEvent( rVclWindowEvent );
     405             :         }
     406          66 :         break;
     407             :     }
     408          66 : }
     409             : 
     410        2880 : void VCLXMultiLineEdit::setProperty( const OUString& PropertyName, const ::com::sun::star::uno::Any& Value) throw(::com::sun::star::uno::RuntimeException, std::exception)
     411             : {
     412        2880 :     SolarMutexGuard aGuard;
     413             : 
     414        2880 :     MultiLineEdit* pMultiLineEdit = static_cast<MultiLineEdit*>(GetWindow());
     415        2880 :     if ( pMultiLineEdit )
     416             :     {
     417        2880 :         sal_uInt16 nPropType = GetPropertyId( PropertyName );
     418        2880 :         switch ( nPropType )
     419             :         {
     420             :             case BASEPROPERTY_LINE_END_FORMAT:
     421             :             {
     422          22 :                 sal_Int16 nLineEndType = ::com::sun::star::awt::LineEndFormat::LINE_FEED;
     423          22 :                 OSL_VERIFY( Value >>= nLineEndType );
     424          22 :                 switch ( nLineEndType )
     425             :                 {
     426           0 :                 case ::com::sun::star::awt::LineEndFormat::CARRIAGE_RETURN:           meLineEndType = LINEEND_CR; break;
     427           0 :                 case ::com::sun::star::awt::LineEndFormat::LINE_FEED:                 meLineEndType = LINEEND_LF; break;
     428          22 :                 case ::com::sun::star::awt::LineEndFormat::CARRIAGE_RETURN_LINE_FEED: meLineEndType = LINEEND_CRLF; break;
     429           0 :                 default: OSL_FAIL( "VCLXMultiLineEdit::setProperty: invalid line end value!" ); break;
     430             :                 }
     431             :             }
     432          22 :             break;
     433             : 
     434             :             case BASEPROPERTY_READONLY:
     435             :             {
     436             :                 bool b;
     437          26 :                 if ( Value >>= b )
     438          26 :                     pMultiLineEdit->SetReadOnly( b );
     439             :             }
     440          26 :             break;
     441             :             case BASEPROPERTY_MAXTEXTLEN:
     442             :             {
     443          26 :                 sal_Int16 n = sal_Int16();
     444          26 :                 if ( Value >>= n )
     445          26 :                     pMultiLineEdit->SetMaxTextLen( n );
     446             :             }
     447          26 :             break;
     448             :             case BASEPROPERTY_HIDEINACTIVESELECTION:
     449             :             {
     450             :                 bool b;
     451          26 :                 if ( Value >>= b )
     452             :                 {
     453          26 :                     pMultiLineEdit->EnableFocusSelectionHide( b );
     454          26 :                     lcl_setWinBits( pMultiLineEdit, WB_NOHIDESELECTION, !b );
     455             :                 }
     456             :             }
     457          26 :             break;
     458             :             default:
     459             :             {
     460        2780 :                 VCLXWindow::setProperty( PropertyName, Value );
     461             :             }
     462             :         }
     463        2880 :     }
     464        2880 : }
     465             : 
     466           0 : ::com::sun::star::uno::Any VCLXMultiLineEdit::getProperty( const OUString& PropertyName ) throw(::com::sun::star::uno::RuntimeException, std::exception)
     467             : {
     468           0 :     SolarMutexGuard aGuard;
     469             : 
     470           0 :     ::com::sun::star::uno::Any aProp;
     471           0 :     MultiLineEdit* pMultiLineEdit = static_cast<MultiLineEdit*>(GetWindow());
     472           0 :     if ( pMultiLineEdit )
     473             :     {
     474           0 :         sal_uInt16 nPropType = GetPropertyId( PropertyName );
     475           0 :         switch ( nPropType )
     476             :         {
     477             :             case BASEPROPERTY_LINE_END_FORMAT:
     478             :             {
     479           0 :                 sal_Int16 nLineEndType = ::com::sun::star::awt::LineEndFormat::LINE_FEED;
     480           0 :                 switch ( meLineEndType )
     481             :                 {
     482           0 :                 case LINEEND_CR:   nLineEndType = ::com::sun::star::awt::LineEndFormat::CARRIAGE_RETURN; break;
     483           0 :                 case LINEEND_LF:   nLineEndType = ::com::sun::star::awt::LineEndFormat::LINE_FEED; break;
     484           0 :                 case LINEEND_CRLF: nLineEndType = ::com::sun::star::awt::LineEndFormat::CARRIAGE_RETURN_LINE_FEED; break;
     485           0 :                 default: OSL_FAIL( "VCLXMultiLineEdit::getProperty: invalid line end value!" ); break;
     486             :                 }
     487           0 :                 aProp <<= nLineEndType;
     488             :             }
     489           0 :             break;
     490             : 
     491             :             case BASEPROPERTY_READONLY:
     492             :             {
     493           0 :                 aProp <<= pMultiLineEdit->IsReadOnly();
     494             :             }
     495           0 :             break;
     496             :             case BASEPROPERTY_MAXTEXTLEN:
     497             :             {
     498           0 :                 aProp <<= (sal_Int16) pMultiLineEdit->GetMaxTextLen();
     499             :             }
     500           0 :             break;
     501             :             default:
     502             :             {
     503           0 :                 aProp <<= VCLXWindow::getProperty( PropertyName );
     504             :             }
     505             :         }
     506             :     }
     507           0 :     return aProp;
     508             : }
     509             : 
     510           0 : void SAL_CALL VCLXMultiLineEdit::setFocus(  ) throw(::com::sun::star::uno::RuntimeException, std::exception)
     511             : {
     512           0 :     SolarMutexGuard aGuard;
     513             : 
     514             :     // don't grab the focus if we already have it. Reason is that the only thing which the edit
     515             :     // does is forwarding the focus to it's text window. This text window then does a "select all".
     516             :     // So if the text window already has the focus, and we give the focus to the multi line
     517             :     // edit, then all which happens is that everything is selected.
     518             :     // #i27072#
     519           0 :     if ( GetWindow() && !GetWindow()->HasChildPathFocus() )
     520           0 :         GetWindow()->GrabFocus();
     521           0 : }
     522             : 
     523           0 : void VCLXMultiLineEdit::ImplGetPropertyIds( std::list< sal_uInt16 > &rIds )
     524             : {
     525             :     PushPropertyIds( rIds,
     526             :                      // FIXME: elide duplication ?
     527             :                      BASEPROPERTY_LINE_END_FORMAT,
     528             :                      BASEPROPERTY_READONLY,
     529             :                      BASEPROPERTY_MAXTEXTLEN,
     530             :                      BASEPROPERTY_HIDEINACTIVESELECTION,
     531           0 :                      0);
     532           0 :     VCLXWindow::ImplGetPropertyIds( rIds, true );
     533             : 
     534           0 : }
     535             : 
     536             : //  class VCLXFileControl
     537             : 
     538           0 : VCLXFileControl::VCLXFileControl() : maTextListeners( *this )
     539             : {
     540           0 : }
     541             : 
     542           0 : VCLXFileControl::~VCLXFileControl()
     543             : {
     544           0 :     FileControl* pControl = static_cast<FileControl*>(GetWindow());
     545           0 :     if ( pControl )
     546           0 :         pControl->GetEdit().SetModifyHdl( Link() );
     547           0 : }
     548             : 
     549           0 : ::com::sun::star::uno::Any VCLXFileControl::queryInterface( const ::com::sun::star::uno::Type & rType ) throw(::com::sun::star::uno::RuntimeException, std::exception)
     550             : {
     551             :     ::com::sun::star::uno::Any aRet = ::cppu::queryInterface( rType,
     552             :                                         (static_cast< ::com::sun::star::awt::XTextComponent* >(this)),
     553             :                                         (static_cast< ::com::sun::star::awt::XTextLayoutConstrains* >(this)),
     554           0 :                                         (static_cast< ::com::sun::star::lang::XTypeProvider* >(this)) );
     555           0 :     return (aRet.hasValue() ? aRet : VCLXWindow::queryInterface( rType ));
     556             : }
     557             : 
     558             : // ::com::sun::star::lang::XTypeProvider
     559           0 : IMPL_XTYPEPROVIDER_START( VCLXFileControl )
     560           0 :     cppu::UnoType<com::sun::star::awt::XTextComponent>::get(),
     561           0 :     cppu::UnoType<com::sun::star::awt::XTextLayoutConstrains>::get(),
     562             :     VCLXWindow::getTypes()
     563           0 : IMPL_XTYPEPROVIDER_END
     564             : 
     565           0 : void SAL_CALL VCLXFileControl::setProperty( const OUString& PropertyName, const ::com::sun::star::uno::Any& Value) throw(::com::sun::star::uno::RuntimeException, std::exception)
     566             : {
     567           0 :     SolarMutexGuard aGuard;
     568             : 
     569           0 :     FileControl* pControl = static_cast<FileControl*>(GetWindow());
     570           0 :     if ( pControl )
     571             :     {
     572           0 :         sal_uInt16 nPropType = GetPropertyId( PropertyName );
     573           0 :         switch ( nPropType )
     574             :         {
     575             :         case BASEPROPERTY_HIDEINACTIVESELECTION:
     576             :         {
     577           0 :             bool bValue(false);
     578           0 :             OSL_VERIFY( Value >>= bValue );
     579             : 
     580           0 :             lcl_setWinBits( pControl, WB_NOHIDESELECTION, !bValue );
     581           0 :             lcl_setWinBits( &pControl->GetEdit(), WB_NOHIDESELECTION, !bValue );
     582             :         }
     583           0 :         break;
     584             : 
     585             :         default:
     586           0 :             VCLXWindow::setProperty( PropertyName, Value );
     587           0 :             break;
     588             :         }
     589           0 :     }
     590           0 : }
     591             : 
     592           0 : void VCLXFileControl::SetWindow( vcl::Window* pWindow )
     593             : {
     594           0 :     FileControl* pPrevFileControl = dynamic_cast<FileControl*>( GetWindow() );
     595           0 :     if ( pPrevFileControl )
     596           0 :         pPrevFileControl->GetEdit().SetModifyHdl( Link() );
     597             : 
     598           0 :     FileControl* pNewFileControl = dynamic_cast<FileControl*>( pWindow );
     599           0 :     if ( pNewFileControl )
     600           0 :         pNewFileControl->GetEdit().SetModifyHdl( LINK( this, VCLXFileControl, ModifyHdl ) );
     601             : 
     602           0 :     VCLXWindow::SetWindow( pWindow );
     603           0 : }
     604             : 
     605           0 : void VCLXFileControl::addTextListener( const ::com::sun::star::uno::Reference< ::com::sun::star::awt::XTextListener > & l ) throw(::com::sun::star::uno::RuntimeException, std::exception)
     606             : {
     607           0 :     maTextListeners.addInterface( l );
     608           0 : }
     609             : 
     610           0 : void VCLXFileControl::removeTextListener( const ::com::sun::star::uno::Reference< ::com::sun::star::awt::XTextListener > & l ) throw(::com::sun::star::uno::RuntimeException, std::exception)
     611             : {
     612           0 :     maTextListeners.removeInterface( l );
     613           0 : }
     614             : 
     615           0 : void VCLXFileControl::setText( const OUString& aText ) throw(::com::sun::star::uno::RuntimeException, std::exception)
     616             : {
     617           0 :     SolarMutexGuard aGuard;
     618             : 
     619           0 :     vcl::Window* pWindow = GetWindow();
     620           0 :     if ( pWindow )
     621             :     {
     622           0 :         pWindow->SetText( aText );
     623             : 
     624             :         // also in Java a textChanged is triggered, not in VCL.
     625             :         // ::com::sun::star::awt::Toolkit should be JAVA-compliant...
     626           0 :         ModifyHdl( NULL );
     627           0 :     }
     628           0 : }
     629             : 
     630           0 : void VCLXFileControl::insertText( const ::com::sun::star::awt::Selection& rSel, const OUString& aText ) throw(::com::sun::star::uno::RuntimeException, std::exception)
     631             : {
     632           0 :     SolarMutexGuard aGuard;
     633             : 
     634           0 :     FileControl* pFileControl = static_cast<FileControl*>(GetWindow());
     635           0 :     if ( pFileControl )
     636             :     {
     637           0 :         pFileControl->GetEdit().SetSelection( Selection( rSel.Min, rSel.Max ) );
     638           0 :         pFileControl->GetEdit().ReplaceSelected( aText );
     639           0 :     }
     640           0 : }
     641             : 
     642           0 : OUString VCLXFileControl::getText() throw(::com::sun::star::uno::RuntimeException, std::exception)
     643             : {
     644           0 :     SolarMutexGuard aGuard;
     645             : 
     646           0 :     OUString aText;
     647           0 :     vcl::Window* pWindow = GetWindow();
     648           0 :     if ( pWindow )
     649           0 :         aText = pWindow->GetText();
     650           0 :     return aText;
     651             : }
     652             : 
     653           0 : OUString VCLXFileControl::getSelectedText() throw(::com::sun::star::uno::RuntimeException, std::exception)
     654             : {
     655           0 :     SolarMutexGuard aGuard;
     656             : 
     657           0 :     OUString aText;
     658           0 :     FileControl* pFileControl = static_cast<FileControl*>(GetWindow());
     659           0 :     if ( pFileControl)
     660           0 :         aText = pFileControl->GetEdit().GetSelected();
     661           0 :     return aText;
     662             : 
     663             : }
     664             : 
     665           0 : void VCLXFileControl::setSelection( const ::com::sun::star::awt::Selection& aSelection ) throw(::com::sun::star::uno::RuntimeException, std::exception)
     666             : {
     667           0 :     SolarMutexGuard aGuard;
     668             : 
     669           0 :     FileControl* pFileControl = static_cast<FileControl*>(GetWindow());
     670           0 :     if ( pFileControl )
     671           0 :         pFileControl->GetEdit().SetSelection( Selection( aSelection.Min, aSelection.Max ) );
     672           0 : }
     673             : 
     674           0 : ::com::sun::star::awt::Selection VCLXFileControl::getSelection() throw(::com::sun::star::uno::RuntimeException, std::exception)
     675             : {
     676           0 :     SolarMutexGuard aGuard;
     677             : 
     678           0 :     ::com::sun::star::awt::Selection aSel;
     679           0 :     FileControl* pFileControl = static_cast<FileControl*>(GetWindow());
     680           0 :     if ( pFileControl )
     681             :     {
     682           0 :         aSel.Min = pFileControl->GetEdit().GetSelection().Min();
     683           0 :         aSel.Max = pFileControl->GetEdit().GetSelection().Max();
     684             :     }
     685           0 :     return aSel;
     686             : }
     687             : 
     688           0 : sal_Bool VCLXFileControl::isEditable() throw(::com::sun::star::uno::RuntimeException, std::exception)
     689             : {
     690           0 :     SolarMutexGuard aGuard;
     691             : 
     692           0 :     FileControl* pFileControl = static_cast<FileControl*>(GetWindow());
     693           0 :     return ( pFileControl && !pFileControl->GetEdit().IsReadOnly() && pFileControl->GetEdit().IsEnabled() ) ? sal_True : sal_False;
     694             : }
     695             : 
     696           0 : void VCLXFileControl::setEditable( sal_Bool bEditable ) throw(::com::sun::star::uno::RuntimeException, std::exception)
     697             : {
     698           0 :     SolarMutexGuard aGuard;
     699             : 
     700           0 :     FileControl* pFileControl = static_cast<FileControl*>(GetWindow());
     701           0 :     if ( pFileControl )
     702           0 :         pFileControl->GetEdit().SetReadOnly( !bEditable );
     703           0 : }
     704             : 
     705           0 : void VCLXFileControl::setMaxTextLen( sal_Int16 nLen ) throw(::com::sun::star::uno::RuntimeException, std::exception)
     706             : {
     707           0 :     SolarMutexGuard aGuard;
     708             : 
     709           0 :     FileControl* pFileControl = static_cast<FileControl*>(GetWindow());
     710           0 :     if ( pFileControl )
     711           0 :         pFileControl->GetEdit().SetMaxTextLen( nLen );
     712           0 : }
     713             : 
     714           0 : sal_Int16 VCLXFileControl::getMaxTextLen() throw(::com::sun::star::uno::RuntimeException, std::exception)
     715             : {
     716           0 :     SolarMutexGuard aGuard;
     717             : 
     718           0 :     FileControl* pFileControl = static_cast<FileControl*>(GetWindow());
     719           0 :     return pFileControl ? pFileControl->GetEdit().GetMaxTextLen() : 0;
     720             : }
     721             : 
     722             : 
     723           0 : IMPL_LINK_NOARG(VCLXFileControl, ModifyHdl)
     724             : {
     725           0 :     ::com::sun::star::awt::TextEvent aEvent;
     726           0 :     aEvent.Source = (::cppu::OWeakObject*)this;
     727           0 :     maTextListeners.textChanged( aEvent );
     728             : 
     729           0 :     return 1;
     730             : }
     731             : 
     732           0 : ::com::sun::star::awt::Size VCLXFileControl::getMinimumSize() throw(::com::sun::star::uno::RuntimeException, std::exception)
     733             : {
     734           0 :     SolarMutexGuard aGuard;
     735             : 
     736           0 :     ::com::sun::star::awt::Size aSz;
     737           0 :     FileControl* pControl = static_cast<FileControl*>(GetWindow());
     738           0 :     if ( pControl )
     739             :     {
     740           0 :         Size aTmpSize = pControl->GetEdit().CalcMinimumSize();
     741           0 :         aTmpSize.Width() += pControl->GetButton().CalcMinimumSize().Width();
     742           0 :         aSz = AWTSize(pControl->CalcWindowSize( aTmpSize ));
     743             :     }
     744           0 :     return aSz;
     745             : }
     746             : 
     747           0 : ::com::sun::star::awt::Size VCLXFileControl::getPreferredSize() throw(::com::sun::star::uno::RuntimeException, std::exception)
     748             : {
     749           0 :     ::com::sun::star::awt::Size aSz = getMinimumSize();
     750           0 :     aSz.Height += 4;
     751           0 :     return aSz;
     752             : }
     753             : 
     754           0 : ::com::sun::star::awt::Size VCLXFileControl::calcAdjustedSize( const ::com::sun::star::awt::Size& rNewSize ) throw(::com::sun::star::uno::RuntimeException, std::exception)
     755             : {
     756           0 :     SolarMutexGuard aGuard;
     757             : 
     758           0 :     ::com::sun::star::awt::Size aSz =rNewSize;
     759           0 :     FileControl* pControl = static_cast<FileControl*>(GetWindow());
     760           0 :     if ( pControl )
     761             :     {
     762           0 :         ::com::sun::star::awt::Size aMinSz = getMinimumSize();
     763           0 :         if ( aSz.Height != aMinSz.Height )
     764           0 :             aSz.Height = aMinSz.Height;
     765             :     }
     766           0 :     return aSz;
     767             : }
     768             : 
     769           0 : ::com::sun::star::awt::Size VCLXFileControl::getMinimumSize( sal_Int16 nCols, sal_Int16 ) throw(::com::sun::star::uno::RuntimeException, std::exception)
     770             : {
     771           0 :     SolarMutexGuard aGuard;
     772             : 
     773           0 :     ::com::sun::star::awt::Size aSz;
     774           0 :     FileControl* pControl = static_cast<FileControl*>(GetWindow());
     775           0 :     if ( pControl )
     776             :     {
     777           0 :         aSz = AWTSize(pControl->GetEdit().CalcSize( nCols ));
     778           0 :         aSz.Width += pControl->GetButton().CalcMinimumSize().Width();
     779             :     }
     780           0 :     return aSz;
     781             : }
     782             : 
     783           0 : void VCLXFileControl::getColumnsAndLines( sal_Int16& nCols, sal_Int16& nLines ) throw(::com::sun::star::uno::RuntimeException, std::exception)
     784             : {
     785           0 :     SolarMutexGuard aGuard;
     786             : 
     787           0 :     nCols = 0;
     788           0 :     nLines = 1;
     789           0 :     FileControl* pControl = static_cast<FileControl*>(GetWindow());
     790           0 :     if ( pControl )
     791           0 :         nCols = pControl->GetEdit().GetMaxVisChars();
     792           0 : }
     793             : 
     794           0 : void VCLXFileControl::ImplGetPropertyIds( std::list< sal_uInt16 > &rIds )
     795             : {
     796             :     PushPropertyIds( rIds,
     797             :                      // FIXME: elide duplication ?
     798             :                      BASEPROPERTY_HIDEINACTIVESELECTION,
     799           0 :                      0);
     800           0 :     VCLXWindow::ImplGetPropertyIds( rIds, true );
     801           0 : }
     802             : 
     803             : 
     804             : 
     805             : //  class SVTXFormattedField
     806             : 
     807             : 
     808          70 : SVTXFormattedField::SVTXFormattedField()
     809             :     :m_pCurrentSupplier(NULL)
     810             :     ,bIsStandardSupplier(true)
     811          70 :     ,nKeyToSetDelayed(-1)
     812             : {
     813          70 : }
     814             : 
     815             : 
     816         142 : SVTXFormattedField::~SVTXFormattedField()
     817             : {
     818          70 :     if (m_pCurrentSupplier)
     819             :     {
     820           2 :         m_pCurrentSupplier->release();
     821           2 :         m_pCurrentSupplier = NULL;
     822             :     }
     823          72 : }
     824             : 
     825             : 
     826         210 : void SVTXFormattedField::SetWindow( vcl::Window* _pWindow )
     827             : {
     828         210 :     VCLXSpinField::SetWindow(_pWindow);
     829         210 :     if (GetFormattedField())
     830          70 :         GetFormattedField()->SetAutoColor(true);
     831         210 : }
     832             : 
     833             : 
     834        5992 : void SVTXFormattedField::setProperty( const OUString& PropertyName, const ::com::sun::star::uno::Any& Value) throw(::com::sun::star::uno::RuntimeException, std::exception)
     835             : {
     836        5992 :     SolarMutexGuard aGuard;
     837             : 
     838        5992 :     FormattedField* pField = GetFormattedField();
     839        5992 :     if ( pField )
     840             :     {
     841        5992 :         sal_uInt16 nPropType = GetPropertyId( PropertyName );
     842        5992 :         switch (nPropType)
     843             :         {
     844             :             case BASEPROPERTY_ENFORCE_FORMAT:
     845             :             {
     846         106 :                 bool bEnable( true );
     847         106 :                 if ( Value >>= bEnable )
     848         106 :                     pField->EnableNotANumber( !bEnable );
     849             :             }
     850         106 :             break;
     851             : 
     852             :             case BASEPROPERTY_EFFECTIVE_MIN:
     853             :             case BASEPROPERTY_VALUEMIN_DOUBLE:
     854         118 :                 SetMinValue(Value);
     855         118 :                 break;
     856             : 
     857             :             case BASEPROPERTY_EFFECTIVE_MAX:
     858             :             case BASEPROPERTY_VALUEMAX_DOUBLE:
     859         118 :                 SetMaxValue(Value);
     860         118 :                 break;
     861             : 
     862             :             case BASEPROPERTY_EFFECTIVE_DEFAULT:
     863           2 :                 SetDefaultValue(Value);
     864           2 :                 break;
     865             : 
     866             :             case BASEPROPERTY_TREATASNUMBER:
     867             :             {
     868             :                 bool b;
     869           2 :                 if ( Value >>= b )
     870           2 :                     SetTreatAsNumber(b);
     871             :             }
     872           2 :             break;
     873             : 
     874             :             case BASEPROPERTY_FORMATSSUPPLIER:
     875           2 :                 if (!Value.hasValue())
     876           0 :                     setFormatsSupplier(::com::sun::star::uno::Reference< ::com::sun::star::util::XNumberFormatsSupplier > (NULL));
     877             :                 else
     878             :                 {
     879           2 :                     ::com::sun::star::uno::Reference< ::com::sun::star::util::XNumberFormatsSupplier > xNFS;
     880           2 :                     if ( Value >>= xNFS )
     881           2 :                         setFormatsSupplier(xNFS);
     882             :                 }
     883           2 :                 break;
     884             :             case BASEPROPERTY_FORMATKEY:
     885           2 :                 if (!Value.hasValue())
     886           2 :                     setFormatKey(0);
     887             :                 else
     888             :                 {
     889           0 :                     sal_Int32 n = 0;
     890           0 :                     if ( Value >>= n )
     891           0 :                         setFormatKey(n);
     892             :                 }
     893           2 :                 break;
     894             : 
     895             :             case BASEPROPERTY_EFFECTIVE_VALUE:
     896             :             case BASEPROPERTY_VALUE_DOUBLE:
     897             :             {
     898          82 :                 const ::com::sun::star::uno::TypeClass rTC = Value.getValueType().getTypeClass();
     899          82 :                 if (rTC != ::com::sun::star::uno::TypeClass_STRING)
     900             :                     // no string
     901          82 :                     if (rTC != ::com::sun::star::uno::TypeClass_DOUBLE)
     902             :                         // no double
     903          62 :                         if (Value.hasValue())
     904             :                         {   // but a value
     905             :                             // try if it is something converitble
     906           0 :                             sal_Int32 nValue = 0;
     907           0 :                             if (!(Value >>= nValue))
     908           0 :                                 throw ::com::sun::star::lang::IllegalArgumentException();
     909           0 :                             SetValue(::com::sun::star::uno::makeAny((double)nValue));
     910           0 :                             break;
     911             :                         }
     912             : 
     913          82 :                 SetValue(Value);
     914             :             }
     915          82 :             break;
     916             :             case BASEPROPERTY_VALUESTEP_DOUBLE:
     917             :             {
     918         116 :                 double d = 0.0;
     919         116 :                 if ( Value >>= d )
     920         116 :                      pField->SetSpinSize( d );
     921             :                 else
     922             :                 {
     923           0 :                     sal_Int32 n = 0;
     924           0 :                     if ( Value >>= n )
     925           0 :                          pField->SetSpinSize( n );
     926             :                 }
     927             :             }
     928         116 :             break;
     929             :             case BASEPROPERTY_DECIMALACCURACY:
     930             :             {
     931         108 :                 sal_Int32 n = 0;
     932         108 :                 if ( Value >>= n )
     933         108 :                      pField->SetDecimalDigits( (sal_uInt16)n );
     934             :             }
     935         108 :             break;
     936             :             case BASEPROPERTY_NUMSHOWTHOUSANDSEP:
     937             :             {
     938             :                     bool b;
     939         101 :                     if ( Value >>= b )
     940         101 :                      pField->SetThousandsSep( b );
     941             :             }
     942         101 :             break;
     943             : 
     944             :             default:
     945        5235 :                 VCLXSpinField::setProperty( PropertyName, Value );
     946             :         }
     947             : 
     948        5992 :         if (BASEPROPERTY_TEXTCOLOR == nPropType)
     949             :         {   // after setting a new text color, think again about the AutoColor flag of the control
     950             :             // 17.05.2001 - 86859 - frank.schoenheit@germany.sun.com
     951          70 :             pField->SetAutoColor(!Value.hasValue());
     952             :         }
     953             :     }
     954             :     else
     955           0 :         VCLXSpinField::setProperty( PropertyName, Value );
     956        5992 : }
     957             : 
     958             : 
     959          24 : ::com::sun::star::uno::Any SVTXFormattedField::getProperty( const OUString& PropertyName ) throw(::com::sun::star::uno::RuntimeException, std::exception)
     960             : {
     961          24 :     SolarMutexGuard aGuard;
     962             : 
     963          24 :     ::com::sun::star::uno::Any aReturn;
     964             : 
     965          24 :     FormattedField* pField = GetFormattedField();
     966          24 :     if ( pField )
     967             :     {
     968          24 :         sal_uInt16 nPropType = GetPropertyId( PropertyName );
     969          24 :         switch (nPropType)
     970             :         {
     971             :             case BASEPROPERTY_EFFECTIVE_MIN:
     972             :             case BASEPROPERTY_VALUEMIN_DOUBLE:
     973           0 :                 aReturn <<= GetMinValue();
     974           0 :                 break;
     975             : 
     976             :             case BASEPROPERTY_EFFECTIVE_MAX:
     977             :             case BASEPROPERTY_VALUEMAX_DOUBLE:
     978           0 :                 aReturn <<= GetMaxValue();
     979           0 :                 break;
     980             : 
     981             :             case BASEPROPERTY_EFFECTIVE_DEFAULT:
     982           0 :                 aReturn <<= GetDefaultValue();
     983           0 :                 break;
     984             : 
     985             :             case BASEPROPERTY_TREATASNUMBER:
     986           0 :                 aReturn <<= GetTreatAsNumber();
     987           0 :                 break;
     988             : 
     989             :             case BASEPROPERTY_EFFECTIVE_VALUE:
     990             :             case BASEPROPERTY_VALUE_DOUBLE:
     991          12 :                 aReturn <<= GetValue();
     992          12 :                 break;
     993             : 
     994             :             case BASEPROPERTY_VALUESTEP_DOUBLE:
     995           0 :                 aReturn <<= pField->GetSpinSize();
     996           0 :                 break;
     997             : 
     998             :             case BASEPROPERTY_DECIMALACCURACY:
     999           0 :                 aReturn <<= pField->GetDecimalDigits();
    1000           0 :                 break;
    1001             : 
    1002             :             case BASEPROPERTY_FORMATSSUPPLIER:
    1003             :             {
    1004           0 :                 if (!bIsStandardSupplier)
    1005             :                 {   // ansonsten void
    1006           0 :                     ::com::sun::star::uno::Reference< ::com::sun::star::util::XNumberFormatsSupplier >  xSupplier = getFormatsSupplier();
    1007           0 :                     aReturn <<= xSupplier;
    1008             :                 }
    1009             :             }
    1010           0 :             break;
    1011             : 
    1012             :             case BASEPROPERTY_FORMATKEY:
    1013             :             {
    1014           0 :                 if (!bIsStandardSupplier)
    1015           0 :                     aReturn <<= getFormatKey();
    1016             :             }
    1017           0 :             break;
    1018             : 
    1019             :             default:
    1020          12 :                 aReturn <<= VCLXSpinField::getProperty(PropertyName);
    1021             :         }
    1022             :     }
    1023          24 :     return aReturn;
    1024             : }
    1025             : 
    1026             : 
    1027           2 : ::com::sun::star::uno::Any SVTXFormattedField::convertEffectiveValue(const ::com::sun::star::uno::Any& rValue)
    1028             : {
    1029           2 :     ::com::sun::star::uno::Any aReturn;
    1030             : 
    1031           2 :     FormattedField* pField = GetFormattedField();
    1032           2 :     if (!pField)
    1033           0 :         return aReturn;
    1034             : 
    1035           2 :     switch (rValue.getValueType().getTypeClass())
    1036             :     {
    1037             :         case ::com::sun::star::uno::TypeClass_DOUBLE:
    1038           0 :             if (pField->TreatingAsNumber())
    1039             :             {
    1040           0 :                 double d = 0.0;
    1041           0 :                 rValue >>= d;
    1042           0 :                 aReturn <<= d;
    1043             :             }
    1044             :             else
    1045             :             {
    1046           0 :                 SvNumberFormatter* pFormatter = pField->GetFormatter();
    1047           0 :                 if (!pFormatter)
    1048           0 :                     pFormatter = pField->StandardFormatter();
    1049             :                     // should never fail
    1050             : 
    1051             :                 Color* pDum;
    1052           0 :                 double d = 0.0;
    1053           0 :                 rValue >>= d;
    1054           0 :                 OUString sConverted;
    1055           0 :                 pFormatter->GetOutputString(d, 0, sConverted, &pDum);
    1056           0 :                 aReturn <<= sConverted;
    1057             :             }
    1058           0 :             break;
    1059             :         case ::com::sun::star::uno::TypeClass_STRING:
    1060             :         {
    1061           0 :             OUString aStr;
    1062           0 :             rValue >>= aStr;
    1063           0 :             if (pField->TreatingAsNumber())
    1064             :             {
    1065           0 :                 SvNumberFormatter* pFormatter = pField->GetFormatter();
    1066           0 :                 if (!pFormatter)
    1067           0 :                     pFormatter = pField->StandardFormatter();
    1068             : 
    1069             :                 double dVal;
    1070           0 :                 sal_uInt32 nTestFormat(0);
    1071           0 :                 if (!pFormatter->IsNumberFormat(aStr, nTestFormat, dVal))
    1072           0 :                     aReturn.clear();
    1073           0 :                 aReturn <<= dVal;
    1074             :             }
    1075             :             else
    1076           0 :                 aReturn <<= aStr;
    1077             :         }
    1078           0 :         break;
    1079             :         default:
    1080           2 :             aReturn.clear();
    1081           2 :             break;
    1082             :     }
    1083           2 :     return aReturn;
    1084             : }
    1085             : 
    1086             : 
    1087         118 : void SVTXFormattedField::SetMinValue(const ::com::sun::star::uno::Any& rValue)
    1088             : {
    1089         118 :     FormattedField* pField = GetFormattedField();
    1090         118 :     if (!pField)
    1091         118 :         return;
    1092             : 
    1093         118 :     switch (rValue.getValueType().getTypeClass())
    1094             : 
    1095             :     {
    1096             :         case ::com::sun::star::uno::TypeClass_DOUBLE:
    1097             :         {
    1098         116 :             double d = 0.0;
    1099         116 :             rValue >>= d;
    1100         116 :             pField->SetMinValue(d);
    1101             :         }
    1102         116 :             break;
    1103             :         default:
    1104             :             DBG_ASSERT(rValue.getValueType().getTypeClass() == ::com::sun::star::uno::TypeClass_VOID, "SVTXFormattedField::SetMinValue : invalid argument (an exception will be thrown) !");
    1105           2 :             if ( rValue.getValueType().getTypeClass() != ::com::sun::star::uno::TypeClass_VOID )
    1106             : 
    1107             :             {
    1108           0 :                 throw ::com::sun::star::lang::IllegalArgumentException();
    1109             :             }
    1110           2 :             pField->ClearMinValue();
    1111           2 :             break;
    1112             :     }
    1113             : }
    1114             : 
    1115             : 
    1116           0 : ::com::sun::star::uno::Any SVTXFormattedField::GetMinValue()
    1117             : {
    1118           0 :     FormattedField* pField = GetFormattedField();
    1119           0 :     if (!pField || !pField->HasMinValue())
    1120           0 :         return ::com::sun::star::uno::Any();
    1121             : 
    1122           0 :     ::com::sun::star::uno::Any aReturn;
    1123           0 :     aReturn <<= pField->GetMinValue();
    1124           0 :     return aReturn;
    1125             : }
    1126             : 
    1127             : 
    1128         118 : void SVTXFormattedField::SetMaxValue(const ::com::sun::star::uno::Any& rValue)
    1129             : {
    1130         118 :     FormattedField* pField = GetFormattedField();
    1131         118 :     if (!pField)
    1132         118 :         return;
    1133             : 
    1134         118 :     switch (rValue.getValueType().getTypeClass())
    1135             : 
    1136             :     {
    1137             :         case ::com::sun::star::uno::TypeClass_DOUBLE:
    1138             :         {
    1139         116 :             double d = 0.0;
    1140         116 :             rValue >>= d;
    1141         116 :             pField->SetMaxValue(d);
    1142             :         }
    1143         116 :             break;
    1144             :         default:
    1145           2 :             if (rValue.getValueType().getTypeClass() != ::com::sun::star::uno::TypeClass_VOID)
    1146             : 
    1147             :             {
    1148           0 :                 throw ::com::sun::star::lang::IllegalArgumentException();
    1149             :             }
    1150           2 :             pField->ClearMaxValue();
    1151           2 :             break;
    1152             :     }
    1153             : }
    1154             : 
    1155             : 
    1156           0 : ::com::sun::star::uno::Any SVTXFormattedField::GetMaxValue()
    1157             : {
    1158           0 :     FormattedField* pField = GetFormattedField();
    1159           0 :     if (!pField || !pField->HasMaxValue())
    1160           0 :         return ::com::sun::star::uno::Any();
    1161             : 
    1162           0 :     ::com::sun::star::uno::Any aReturn;
    1163           0 :     aReturn <<= pField->GetMaxValue();
    1164           0 :     return aReturn;
    1165             : }
    1166             : 
    1167             : 
    1168           2 : void SVTXFormattedField::SetDefaultValue(const ::com::sun::star::uno::Any& rValue)
    1169             : {
    1170           2 :     FormattedField* pField = GetFormattedField();
    1171           2 :     if (!pField)
    1172           2 :         return;
    1173             : 
    1174           2 :     ::com::sun::star::uno::Any aConverted = convertEffectiveValue(rValue);
    1175             : 
    1176           2 :     switch (aConverted.getValueType().getTypeClass())
    1177             : 
    1178             :     {
    1179             :         case ::com::sun::star::uno::TypeClass_DOUBLE:
    1180             :         {
    1181           0 :             double d = 0.0;
    1182           0 :             aConverted >>= d;
    1183           0 :             pField->SetDefaultValue(d);
    1184             :         }
    1185           0 :         break;
    1186             :         case ::com::sun::star::uno::TypeClass_STRING:
    1187             :         {
    1188           0 :             OUString aStr;
    1189           0 :             aConverted >>= aStr;
    1190           0 :             pField->SetDefaultText( aStr );
    1191             :         }
    1192           0 :         break;
    1193             :         default:
    1194           2 :             pField->EnableEmptyField(true);
    1195             :                 // nur noch void erlaubt
    1196           2 :             break;
    1197           2 :     }
    1198             : }
    1199             : 
    1200             : 
    1201           0 : ::com::sun::star::uno::Any SVTXFormattedField::GetDefaultValue()
    1202             : {
    1203           0 :     FormattedField* pField = GetFormattedField();
    1204           0 :     if (!pField || pField->IsEmptyFieldEnabled())
    1205           0 :         return ::com::sun::star::uno::Any();
    1206             : 
    1207           0 :     ::com::sun::star::uno::Any aReturn;
    1208           0 :     if (pField->TreatingAsNumber())
    1209           0 :         aReturn <<= pField->GetDefaultValue();
    1210             :     else
    1211           0 :         aReturn <<= OUString( pField->GetDefaultText() );
    1212           0 :     return aReturn;
    1213             : }
    1214             : 
    1215             : 
    1216           0 : bool SVTXFormattedField::GetTreatAsNumber()
    1217             : {
    1218           0 :     FormattedField* pField = GetFormattedField();
    1219           0 :     if (pField)
    1220           0 :         return pField->TreatingAsNumber();
    1221             : 
    1222           0 :     return true;
    1223             : }
    1224             : 
    1225             : 
    1226           2 : void SVTXFormattedField::SetTreatAsNumber(bool bSet)
    1227             : {
    1228           2 :     FormattedField* pField = GetFormattedField();
    1229           2 :     if (pField)
    1230           2 :         pField->TreatAsNumber(bSet);
    1231           2 : }
    1232             : 
    1233             : 
    1234          14 : ::com::sun::star::uno::Any SVTXFormattedField::GetValue()
    1235             : {
    1236          14 :     FormattedField* pField = GetFormattedField();
    1237          14 :     if (!pField)
    1238           0 :         return ::com::sun::star::uno::Any();
    1239             : 
    1240          14 :     ::com::sun::star::uno::Any aReturn;
    1241          14 :     if (!pField->TreatingAsNumber())
    1242             :     {
    1243           0 :         OUString sText = pField->GetTextValue();
    1244           0 :         aReturn <<= sText;
    1245             :     }
    1246             :     else
    1247             :     {
    1248          14 :         if (!pField->GetText().isEmpty())    // empty is returned as void by default
    1249          12 :             aReturn <<= pField->GetValue();
    1250             :     }
    1251             : 
    1252          14 :     return aReturn;
    1253             : }
    1254             : 
    1255             : 
    1256          84 : void SVTXFormattedField::SetValue(const ::com::sun::star::uno::Any& rValue)
    1257             : {
    1258          84 :     FormattedField* pField = GetFormattedField();
    1259          84 :     if (!pField)
    1260          84 :         return;
    1261             : 
    1262          84 :     if (!rValue.hasValue())
    1263             :     {
    1264          64 :         pField->SetText("");
    1265             :     }
    1266             :     else
    1267             :     {
    1268          20 :         if (rValue.getValueType().getTypeClass() == ::com::sun::star::uno::TypeClass_DOUBLE )
    1269             :         {
    1270          20 :             double d = 0.0;
    1271          20 :             rValue >>= d;
    1272          20 :             pField->SetValue(d);
    1273             :         }
    1274             :         else
    1275             :         {
    1276             :             DBG_ASSERT(rValue.getValueType().getTypeClass() == ::com::sun::star::uno::TypeClass_STRING, "SVTXFormattedField::SetValue : invalid argument !");
    1277             : 
    1278           0 :             OUString sText;
    1279           0 :             rValue >>= sText;
    1280           0 :             if (!pField->TreatingAsNumber())
    1281           0 :                 pField->SetTextFormatted(sText);
    1282             :             else
    1283           0 :                 pField->SetTextValue(sText);
    1284             :         }
    1285             :     }
    1286             : //  NotifyTextListeners();
    1287             : }
    1288             : 
    1289             : 
    1290             : 
    1291             : 
    1292           2 : void SVTXFormattedField::setFormatsSupplier(const ::com::sun::star::uno::Reference< ::com::sun::star::util::XNumberFormatsSupplier > & xSupplier)
    1293             : {
    1294           2 :     FormattedField* pField = GetFormattedField();
    1295             : 
    1296           2 :     SvNumberFormatsSupplierObj* pNew = NULL;
    1297           2 :     if (!xSupplier.is())
    1298             :     {
    1299           0 :         if (pField)
    1300             :         {
    1301           0 :             pNew = new SvNumberFormatsSupplierObj(pField->StandardFormatter());
    1302           0 :             bIsStandardSupplier = true;
    1303             :         }
    1304             :     }
    1305             :     else
    1306             :     {
    1307           2 :         pNew = SvNumberFormatsSupplierObj::getImplementation(xSupplier);
    1308           2 :         bIsStandardSupplier = false;
    1309             :     }
    1310             : 
    1311           2 :     if (!pNew)
    1312           2 :         return;     // TODO : how to process ?
    1313             : 
    1314           2 :     if (m_pCurrentSupplier)
    1315           0 :         m_pCurrentSupplier->release();
    1316           2 :     m_pCurrentSupplier = pNew;
    1317           2 :     m_pCurrentSupplier->acquire();
    1318           2 :     if (pField)
    1319             :     {
    1320             :         // save the actual value
    1321           2 :         ::com::sun::star::uno::Any aCurrent = GetValue();
    1322           2 :         pField->SetFormatter(m_pCurrentSupplier->GetNumberFormatter(), false);
    1323           2 :         if (nKeyToSetDelayed != -1)
    1324             :         {
    1325           2 :             pField->SetFormatKey(nKeyToSetDelayed);
    1326           2 :             nKeyToSetDelayed = -1;
    1327             :         }
    1328           2 :         SetValue(aCurrent);
    1329           2 :         NotifyTextListeners();
    1330             :     }
    1331             : }
    1332             : 
    1333             : 
    1334           0 : sal_Int32 SVTXFormattedField::getFormatKey(void) const
    1335             : {
    1336           0 :     FormattedField* pField = GetFormattedField();
    1337           0 :     return pField ? pField->GetFormatKey() : 0;
    1338             : }
    1339             : 
    1340             : 
    1341           2 : void SVTXFormattedField::setFormatKey(sal_Int32 nKey)
    1342             : {
    1343           2 :     FormattedField* pField = GetFormattedField();
    1344           2 :     if (pField)
    1345             :     {
    1346           2 :         if (pField->GetFormatter())
    1347           0 :             pField->SetFormatKey(nKey);
    1348             :         else
    1349             :         {
    1350             :             // probably I am in a block, in which first the key and next the formatter will be set,
    1351             :             // initially this happens quite certain, as the properties are set in alphabettic sequence,
    1352             :             // and the FormatsSupplier is processed before the FormatKey
    1353           2 :             nKeyToSetDelayed = nKey;
    1354             :         }
    1355           2 :         NotifyTextListeners();
    1356             :     }
    1357           2 : }
    1358             : 
    1359             : 
    1360           4 : void SVTXFormattedField::NotifyTextListeners()
    1361             : {
    1362           4 :     if ( GetTextListeners().getLength() )
    1363             :     {
    1364           0 :         ::com::sun::star::awt::TextEvent aEvent;
    1365           0 :         aEvent.Source = (::cppu::OWeakObject*)this;
    1366           0 :         GetTextListeners().textChanged( aEvent );
    1367             :     }
    1368           4 : }
    1369             : 
    1370           0 : void SVTXFormattedField::ImplGetPropertyIds( std::list< sal_uInt16 > &rIds )
    1371             : {
    1372             :     PushPropertyIds( rIds,
    1373             :                      // FIXME: elide duplication ?
    1374             :                      BASEPROPERTY_EFFECTIVE_MIN,
    1375             :                      BASEPROPERTY_VALUEMIN_DOUBLE,
    1376             :                      BASEPROPERTY_EFFECTIVE_MAX,
    1377             :                      BASEPROPERTY_VALUEMAX_DOUBLE,
    1378             :                      BASEPROPERTY_EFFECTIVE_DEFAULT,
    1379             :                      BASEPROPERTY_TREATASNUMBER,
    1380             :                      BASEPROPERTY_EFFECTIVE_VALUE,
    1381             :                      BASEPROPERTY_VALUE_DOUBLE,
    1382             :                      BASEPROPERTY_VALUESTEP_DOUBLE,
    1383             :                      BASEPROPERTY_DECIMALACCURACY,
    1384             :                      BASEPROPERTY_FORMATSSUPPLIER,
    1385             :                      BASEPROPERTY_NUMSHOWTHOUSANDSEP,
    1386             :                      BASEPROPERTY_FORMATKEY,
    1387             :                      BASEPROPERTY_TREATASNUMBER,
    1388             :                      BASEPROPERTY_ENFORCE_FORMAT,
    1389           0 :                      0);
    1390           0 :     VCLXWindow::ImplGetPropertyIds( rIds, true );
    1391           0 :     VCLXSpinField::ImplGetPropertyIds( rIds );
    1392           0 : }
    1393             : 
    1394             : 
    1395             : 
    1396             : //  class SVTXRoadmap
    1397             : 
    1398             : 
    1399             : using namespace svt;
    1400             : 
    1401             : 
    1402           0 : SVTXRoadmap::SVTXRoadmap() : maItemListeners( *this )
    1403             : {
    1404           0 : }
    1405             : 
    1406             : 
    1407           0 : SVTXRoadmap::~SVTXRoadmap()
    1408             : {
    1409           0 : }
    1410             : 
    1411           0 : void SVTXRoadmap::ProcessWindowEvent( const VclWindowEvent& rVclWindowEvent )
    1412             : {
    1413           0 :     switch ( rVclWindowEvent.GetId() )
    1414             :     {
    1415             :         case VCLEVENT_ROADMAP_ITEMSELECTED:
    1416             :         {
    1417           0 :             SolarMutexGuard aGuard;
    1418           0 :             ::svt::ORoadmap* pField = GetRoadmap();
    1419           0 :             if ( pField )
    1420             :             {
    1421           0 :                 sal_Int16 CurItemID = pField->GetCurrentRoadmapItemID();
    1422           0 :                 ::com::sun::star::awt::ItemEvent aEvent;
    1423           0 :                 aEvent.Selected = CurItemID;
    1424           0 :                 aEvent.Highlighted = CurItemID;
    1425           0 :                 aEvent.ItemId = CurItemID;
    1426           0 :                 maItemListeners.itemStateChanged( aEvent );
    1427           0 :             }
    1428             :         }
    1429           0 :         break;
    1430             :         default:
    1431           0 :             SVTXRoadmap_Base::ProcessWindowEvent( rVclWindowEvent );
    1432           0 :             break;
    1433             :     }
    1434           0 : }
    1435             : 
    1436             : 
    1437           0 : void SVTXRoadmap::propertyChange( const ::com::sun::star::beans::PropertyChangeEvent& evt ) throw (::com::sun::star::uno::RuntimeException, std::exception)
    1438             : {
    1439           0 :     SolarMutexGuard aGuard;
    1440           0 :     ::svt::ORoadmap* pField = GetRoadmap();
    1441           0 :     if ( pField )
    1442             :     {
    1443           0 :         ::com::sun::star::uno::Reference< ::com::sun::star::uno::XInterface > xRoadmapItem;
    1444           0 :         xRoadmapItem = evt.Source;
    1445           0 :         sal_Int32 nID = 0;
    1446           0 :         ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySet > xPropertySet( xRoadmapItem, ::com::sun::star::uno::UNO_QUERY );
    1447           0 :         ::com::sun::star::uno::Any aValue = xPropertySet->getPropertyValue("ID");
    1448           0 :         aValue >>= nID;
    1449             : 
    1450           0 :         ::com::sun::star::uno::Any rVal = evt.NewValue;
    1451           0 :         evt.NewValue >>= rVal;
    1452           0 :         OUString sPropertyName = evt.PropertyName;
    1453           0 :         if ( sPropertyName == "Enabled" )
    1454             :         {
    1455           0 :             bool bEnable = false;
    1456           0 :             evt.NewValue >>= bEnable;
    1457           0 :             pField->EnableRoadmapItem( (RoadmapTypes::ItemId)nID , bEnable );
    1458             :         }
    1459           0 :         else if ( sPropertyName == "Label" )
    1460             :         {
    1461           0 :             OUString sLabel;
    1462           0 :             evt.NewValue >>= sLabel;
    1463           0 :             pField->ChangeRoadmapItemLabel( (RoadmapTypes::ItemId)nID , sLabel );
    1464             :         }
    1465           0 :         else if  ( sPropertyName == "ID" )
    1466             :         {
    1467           0 :             sal_Int32 nNewID = 0;
    1468           0 :             evt.NewValue >>= nNewID;
    1469           0 :             evt.OldValue >>= nID;
    1470           0 :             pField->ChangeRoadmapItemID( (RoadmapTypes::ItemId)nID, (RoadmapTypes::ItemId)nNewID );
    1471           0 :         }
    1472             :     //    else
    1473             :             // TODO handle Interactive appropriately
    1474           0 :     }
    1475           0 : }
    1476             : 
    1477             : 
    1478           0 : void SVTXRoadmap::addItemListener( const ::com::sun::star::uno::Reference< ::com::sun::star::awt::XItemListener >& l ) throw (::com::sun::star::uno::RuntimeException, std::exception)
    1479             : {
    1480           0 :     maItemListeners.addInterface( l );
    1481           0 : }
    1482             : 
    1483           0 : void SVTXRoadmap::removeItemListener( const ::com::sun::star::uno::Reference< ::com::sun::star::awt::XItemListener >& l ) throw (::com::sun::star::uno::RuntimeException, std::exception)
    1484             : {
    1485           0 :     maItemListeners.removeInterface( l );
    1486           0 : }
    1487             : 
    1488           0 : RMItemData SVTXRoadmap::GetRMItemData( const ::com::sun::star::container::ContainerEvent& _rEvent )
    1489             : {
    1490           0 :     RMItemData aCurRMItemData;
    1491           0 :     ::com::sun::star::uno::Reference< ::com::sun::star::uno::XInterface > xRoadmapItem;
    1492           0 :     _rEvent.Element >>= xRoadmapItem;
    1493           0 :     ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySet > xPropertySet( xRoadmapItem, ::com::sun::star::uno::UNO_QUERY );
    1494           0 :     if ( xPropertySet.is() )
    1495             :     {
    1496           0 :         ::com::sun::star::uno::Any aValue = xPropertySet->getPropertyValue("Label");
    1497           0 :         aValue >>= aCurRMItemData.Label;
    1498           0 :         aValue = xPropertySet->getPropertyValue("ID");
    1499           0 :         aValue >>= aCurRMItemData.n_ID;
    1500           0 :         aValue = xPropertySet->getPropertyValue("Enabled");
    1501           0 :         aValue >>= aCurRMItemData.b_Enabled;
    1502             :     }
    1503             :     else
    1504             :     {
    1505           0 :         aCurRMItemData.b_Enabled = false;
    1506           0 :         aCurRMItemData.n_ID = 0;
    1507             :     }
    1508           0 :     return aCurRMItemData;
    1509             : }
    1510             : 
    1511           0 : void SVTXRoadmap::elementInserted( const ::com::sun::star::container::ContainerEvent& _rEvent )throw(::com::sun::star::uno::RuntimeException, std::exception)
    1512             : {
    1513           0 :     SolarMutexGuard aGuard;
    1514           0 :     ::svt::ORoadmap* pField = GetRoadmap();
    1515           0 :     if ( pField )
    1516             :     {
    1517           0 :         RMItemData CurItemData = GetRMItemData(  _rEvent );
    1518           0 :         sal_Int32 InsertIndex = 0;
    1519           0 :         _rEvent.Accessor >>= InsertIndex;
    1520           0 :         pField->InsertRoadmapItem( InsertIndex, CurItemData.Label, (RoadmapTypes::ItemId)CurItemData.n_ID, CurItemData.b_Enabled );
    1521           0 :     }
    1522           0 : }
    1523             : 
    1524           0 : void SVTXRoadmap::elementRemoved( const ::com::sun::star::container::ContainerEvent& _rEvent )throw(::com::sun::star::uno::RuntimeException, std::exception)
    1525             : {
    1526           0 :     SolarMutexGuard aGuard;
    1527           0 :     ::svt::ORoadmap* pField = GetRoadmap();
    1528           0 :     if ( pField )
    1529             :     {
    1530           0 :         sal_Int32 DelIndex = 0;
    1531           0 :         _rEvent.Accessor >>= DelIndex;
    1532           0 :         pField->DeleteRoadmapItem(DelIndex);
    1533           0 :     }
    1534           0 : }
    1535             : 
    1536           0 : void SVTXRoadmap::elementReplaced( const ::com::sun::star::container::ContainerEvent& _rEvent )throw(::com::sun::star::uno::RuntimeException, std::exception)
    1537             : {
    1538           0 :     SolarMutexGuard aGuard;
    1539           0 :     ::svt::ORoadmap* pField = GetRoadmap();
    1540           0 :     if ( pField )
    1541             :     {
    1542           0 :         RMItemData CurItemData = GetRMItemData(  _rEvent );
    1543           0 :         sal_Int32 ReplaceIndex = 0;
    1544           0 :         _rEvent.Accessor >>= ReplaceIndex;
    1545           0 :         pField->ReplaceRoadmapItem( ReplaceIndex, CurItemData.Label, (RoadmapTypes::ItemId)CurItemData.n_ID, CurItemData.b_Enabled );
    1546           0 :     }
    1547           0 : }
    1548             : 
    1549             : 
    1550             : 
    1551             : 
    1552           0 : void SVTXRoadmap::setProperty( const OUString& PropertyName, const ::com::sun::star::uno::Any& Value) throw(::com::sun::star::uno::RuntimeException, std::exception)
    1553             : {
    1554           0 :     SolarMutexGuard aGuard;
    1555             : 
    1556           0 :     ::svt::ORoadmap* pField = GetRoadmap();
    1557           0 :     if ( pField )
    1558             :     {
    1559           0 :         sal_uInt16 nPropType = GetPropertyId( PropertyName );
    1560           0 :         switch (nPropType)
    1561             :         {
    1562             :             case BASEPROPERTY_COMPLETE:
    1563             :             {
    1564           0 :                 bool b = false;
    1565           0 :                 Value >>= b;
    1566           0 :                 pField->SetRoadmapComplete( b);
    1567             :             }
    1568           0 :             break;
    1569             : 
    1570             :             case BASEPROPERTY_ACTIVATED:
    1571             :             {
    1572           0 :                    bool b = false;
    1573           0 :                 Value >>= b;
    1574           0 :                 pField->SetRoadmapInteractive( b);
    1575             :             }
    1576           0 :             break;
    1577             : 
    1578             :             case BASEPROPERTY_CURRENTITEMID:
    1579             :             {
    1580           0 :                    sal_Int32 nId = 0;
    1581           0 :                 Value >>= nId;
    1582           0 :                 pField->SelectRoadmapItemByID( (RoadmapTypes::ItemId)nId );
    1583             :             }
    1584           0 :             break;
    1585             : 
    1586             :             case BASEPROPERTY_TEXT:
    1587             :             {
    1588           0 :                    OUString aStr;
    1589           0 :                 Value >>= aStr;
    1590           0 :                 pField->SetText( aStr );
    1591           0 :                 pField->Invalidate();
    1592             :             }
    1593           0 :             break;
    1594             : 
    1595             :             default:
    1596           0 :                 SVTXRoadmap_Base::setProperty( PropertyName, Value );
    1597           0 :                 break;
    1598             :         }
    1599             : 
    1600             :     }
    1601             :     else
    1602           0 :         SVTXRoadmap_Base::setProperty( PropertyName, Value );
    1603           0 : }
    1604             : 
    1605             : 
    1606             : 
    1607           0 : ::com::sun::star::uno::Any SVTXRoadmap::getProperty( const OUString& PropertyName ) throw(::com::sun::star::uno::RuntimeException, std::exception)
    1608             : {
    1609           0 :     SolarMutexGuard aGuard;
    1610             : 
    1611           0 :     ::com::sun::star::uno::Any aReturn;
    1612             : 
    1613           0 :     ::svt::ORoadmap* pField = GetRoadmap();
    1614           0 :     if ( pField )
    1615             :     {
    1616           0 :         sal_uInt16 nPropType = GetPropertyId( PropertyName );
    1617           0 :         switch (nPropType)
    1618             :         {
    1619             :             case BASEPROPERTY_COMPLETE:
    1620           0 :                 aReturn <<= pField->IsRoadmapComplete();
    1621           0 :                 break;
    1622             :             case BASEPROPERTY_ACTIVATED:
    1623           0 :                 aReturn <<= pField->IsRoadmapInteractive();
    1624           0 :                 break;
    1625             :             case BASEPROPERTY_CURRENTITEMID:
    1626           0 :                 aReturn <<= pField->GetCurrentRoadmapItemID();
    1627           0 :                 break;
    1628             :             default:
    1629           0 :                 aReturn = SVTXRoadmap_Base::getProperty(PropertyName);
    1630           0 :                 break;
    1631             :         }
    1632             :     }
    1633           0 :     return aReturn;
    1634             : }
    1635             : 
    1636           0 : void SVTXRoadmap::ImplSetNewImage()
    1637             : {
    1638             :     OSL_PRECOND( GetWindow(), "SVTXRoadmap::ImplSetNewImage: window is required to be not-NULL!" );
    1639           0 :     ::svt::ORoadmap* pButton = static_cast< ::svt::ORoadmap* >( GetWindow() );
    1640           0 :     pButton->SetRoadmapBitmap( GetImage().GetBitmapEx() );
    1641           0 : }
    1642             : 
    1643           0 : void SVTXRoadmap::ImplGetPropertyIds( std::list< sal_uInt16 > &rIds )
    1644             : {
    1645             :     PushPropertyIds( rIds,
    1646             :                      BASEPROPERTY_COMPLETE,
    1647             :                      BASEPROPERTY_ACTIVATED,
    1648             :                      BASEPROPERTY_CURRENTITEMID,
    1649             :                      BASEPROPERTY_TEXT,
    1650           0 :                      0);
    1651           0 :     VCLXWindow::ImplGetPropertyIds( rIds, true );
    1652           0 :     VCLXGraphicControl::ImplGetPropertyIds( rIds );
    1653           0 : }
    1654             : 
    1655             : 
    1656             : //  class SVTXNumericField
    1657             : 
    1658          34 : SVTXNumericField::SVTXNumericField()
    1659             : {
    1660          34 : }
    1661             : 
    1662          68 : SVTXNumericField::~SVTXNumericField()
    1663             : {
    1664          68 : }
    1665             : 
    1666        4390 : ::com::sun::star::uno::Any SVTXNumericField::queryInterface( const ::com::sun::star::uno::Type & rType ) throw(::com::sun::star::uno::RuntimeException, std::exception)
    1667             : {
    1668             :     ::com::sun::star::uno::Any aRet = ::cppu::queryInterface( rType,
    1669             :                                         (static_cast< ::com::sun::star::awt::XNumericField* >(this)),
    1670        4390 :                                         (static_cast< ::com::sun::star::lang::XTypeProvider* >(this)) );
    1671        4390 :     return (aRet.hasValue() ? aRet : SVTXFormattedField::queryInterface( rType ));
    1672             : }
    1673             : 
    1674             : // ::com::sun::star::lang::XTypeProvider
    1675           0 : IMPL_XTYPEPROVIDER_START( SVTXNumericField )
    1676           0 :     cppu::UnoType<com::sun::star::awt::XNumericField>::get(),
    1677             :     SVTXFormattedField::getTypes()
    1678           0 : IMPL_XTYPEPROVIDER_END
    1679             : 
    1680             : 
    1681           0 : void SVTXNumericField::setValue( double Value ) throw(::com::sun::star::uno::RuntimeException, std::exception)
    1682             : {
    1683           0 :     SolarMutexGuard aGuard;
    1684             : 
    1685           0 :     FormattedField* pField = GetFormattedField();
    1686           0 :     if ( pField )
    1687           0 :         pField->SetValue( Value );
    1688           0 : }
    1689             : 
    1690         212 : double SVTXNumericField::getValue() throw(::com::sun::star::uno::RuntimeException, std::exception)
    1691             : {
    1692         212 :     SolarMutexGuard aGuard;
    1693             : 
    1694         212 :     FormattedField* pField = GetFormattedField();
    1695         212 :     return pField ? pField->GetValue() : 0;
    1696             : }
    1697             : 
    1698           0 : void SVTXNumericField::setMin( double Value ) throw(::com::sun::star::uno::RuntimeException, std::exception)
    1699             : {
    1700           0 :     SolarMutexGuard aGuard;
    1701             : 
    1702           0 :     FormattedField* pField = GetFormattedField();
    1703           0 :     if ( pField )
    1704           0 :         pField->SetMinValue( Value );
    1705           0 : }
    1706             : 
    1707           0 : double SVTXNumericField::getMin() throw(::com::sun::star::uno::RuntimeException, std::exception)
    1708             : {
    1709           0 :     SolarMutexGuard aGuard;
    1710             : 
    1711           0 :     FormattedField* pField = GetFormattedField();
    1712           0 :     return pField ? pField->GetMinValue() : 0;
    1713             : }
    1714             : 
    1715           0 : void SVTXNumericField::setMax( double Value ) throw(::com::sun::star::uno::RuntimeException, std::exception)
    1716             : {
    1717           0 :     SolarMutexGuard aGuard;
    1718             : 
    1719           0 :     FormattedField* pField = GetFormattedField();
    1720           0 :     if ( pField )
    1721           0 :         pField->SetMaxValue( Value );
    1722           0 : }
    1723             : 
    1724           0 : double SVTXNumericField::getMax() throw(::com::sun::star::uno::RuntimeException, std::exception)
    1725             : {
    1726           0 :     SolarMutexGuard aGuard;
    1727             : 
    1728           0 :     FormattedField* pField = GetFormattedField();
    1729           0 :     return pField ? pField->GetMaxValue() : 0;
    1730             : }
    1731             : 
    1732          42 : void SVTXNumericField::setFirst( double Value ) throw(::com::sun::star::uno::RuntimeException, std::exception)
    1733             : {
    1734          42 :     SolarMutexGuard aGuard;
    1735             : 
    1736          42 :     FormattedField* pField = GetFormattedField();
    1737          42 :     if ( pField )
    1738          42 :         pField->SetSpinFirst( Value );
    1739          42 : }
    1740             : 
    1741           0 : double SVTXNumericField::getFirst() throw(::com::sun::star::uno::RuntimeException, std::exception)
    1742             : {
    1743           0 :     SolarMutexGuard aGuard;
    1744             : 
    1745           0 :     FormattedField* pField = GetFormattedField();
    1746           0 :     return pField ? pField->GetSpinFirst() : 0;
    1747             : }
    1748             : 
    1749          42 : void SVTXNumericField::setLast( double Value ) throw(::com::sun::star::uno::RuntimeException, std::exception)
    1750             : {
    1751          42 :     SolarMutexGuard aGuard;
    1752             : 
    1753          42 :     FormattedField* pField = GetFormattedField();
    1754          42 :     if ( pField )
    1755          42 :         pField->SetSpinLast( Value );
    1756          42 : }
    1757             : 
    1758           0 : double SVTXNumericField::getLast() throw(::com::sun::star::uno::RuntimeException, std::exception)
    1759             : {
    1760           0 :     SolarMutexGuard aGuard;
    1761             : 
    1762           0 :     FormattedField* pField = GetFormattedField();
    1763           0 :     return pField ? pField->GetSpinLast() : 0;
    1764             : }
    1765             : 
    1766           0 : void SVTXNumericField::setSpinSize( double Value ) throw(::com::sun::star::uno::RuntimeException, std::exception)
    1767             : {
    1768           0 :     SolarMutexGuard aGuard;
    1769             : 
    1770           0 :     FormattedField* pField = GetFormattedField();
    1771           0 :     if ( pField )
    1772           0 :         pField->SetSpinSize( Value );
    1773           0 : }
    1774             : 
    1775           0 : double SVTXNumericField::getSpinSize() throw(::com::sun::star::uno::RuntimeException, std::exception)
    1776             : {
    1777           0 :     SolarMutexGuard aGuard;
    1778             : 
    1779           0 :     FormattedField* pField = GetFormattedField();
    1780           0 :     return pField ? pField->GetSpinSize() : 0;
    1781             : }
    1782             : 
    1783           0 : void SVTXNumericField::setDecimalDigits( sal_Int16 Value ) throw(::com::sun::star::uno::RuntimeException, std::exception)
    1784             : {
    1785           0 :     SolarMutexGuard aGuard;
    1786             : 
    1787           0 :     FormattedField* pField = GetFormattedField();
    1788           0 :     if ( pField )
    1789           0 :         pField->SetDecimalDigits( Value );
    1790           0 : }
    1791             : 
    1792           0 : sal_Int16 SVTXNumericField::getDecimalDigits() throw(::com::sun::star::uno::RuntimeException, std::exception)
    1793             : {
    1794           0 :     SolarMutexGuard aGuard;
    1795             : 
    1796           0 :     FormattedField* pField = GetFormattedField();
    1797           0 :     return pField ? pField->GetDecimalDigits() : 0;
    1798             : }
    1799             : 
    1800           0 : void SVTXNumericField::setStrictFormat( sal_Bool bStrict ) throw(::com::sun::star::uno::RuntimeException, std::exception)
    1801             : {
    1802           0 :     SolarMutexGuard aGuard;
    1803             : 
    1804           0 :     FormattedField* pField = GetFormattedField();
    1805           0 :     if ( pField )
    1806           0 :         pField->SetStrictFormat( bStrict );
    1807           0 : }
    1808             : 
    1809           0 : sal_Bool SVTXNumericField::isStrictFormat() throw(::com::sun::star::uno::RuntimeException, std::exception)
    1810             : {
    1811           0 :     SolarMutexGuard aGuard;
    1812             : 
    1813           0 :     FormattedField* pField = GetFormattedField();
    1814           0 :     return pField ? pField->IsStrictFormat() : sal_False;
    1815             : }
    1816             : 
    1817           0 : void SVTXNumericField::ImplGetPropertyIds( std::list< sal_uInt16 > &rIds )
    1818             : {
    1819           0 :     SVTXFormattedField::ImplGetPropertyIds( rIds );
    1820           0 : }
    1821             : 
    1822             : 
    1823             : //  class SVTXCurrencyField
    1824             : 
    1825          34 : SVTXCurrencyField::SVTXCurrencyField()
    1826             : {
    1827          34 : }
    1828             : 
    1829          68 : SVTXCurrencyField::~SVTXCurrencyField()
    1830             : {
    1831          68 : }
    1832             : 
    1833        4683 : ::com::sun::star::uno::Any SVTXCurrencyField::queryInterface( const ::com::sun::star::uno::Type & rType ) throw(::com::sun::star::uno::RuntimeException, std::exception)
    1834             : {
    1835             :     ::com::sun::star::uno::Any aRet = ::cppu::queryInterface( rType,
    1836             :                                         (static_cast< ::com::sun::star::awt::XCurrencyField* >(this)),
    1837        4683 :                                         (static_cast< ::com::sun::star::lang::XTypeProvider* >(this)) );
    1838        4683 :     return (aRet.hasValue() ? aRet : SVTXFormattedField::queryInterface( rType ));
    1839             : }
    1840             : 
    1841             : // ::com::sun::star::lang::XTypeProvider
    1842           0 : IMPL_XTYPEPROVIDER_START( SVTXCurrencyField )
    1843           0 :     cppu::UnoType<com::sun::star::awt::XCurrencyField>::get(),
    1844             :     SVTXFormattedField::getTypes()
    1845           0 : IMPL_XTYPEPROVIDER_END
    1846             : 
    1847           0 : void SVTXCurrencyField::setValue( double Value ) throw(::com::sun::star::uno::RuntimeException, std::exception)
    1848             : {
    1849           0 :     SolarMutexGuard aGuard;
    1850             : 
    1851           0 :     FormattedField* pField = GetFormattedField();
    1852           0 :     if ( pField )
    1853           0 :         pField->SetValue( Value );
    1854           0 : }
    1855             : 
    1856         180 : double SVTXCurrencyField::getValue() throw(::com::sun::star::uno::RuntimeException, std::exception)
    1857             : {
    1858         180 :     SolarMutexGuard aGuard;
    1859             : 
    1860         180 :     FormattedField* pField = GetFormattedField();
    1861         180 :     return pField ? pField->GetValue() : 0;
    1862             : }
    1863             : 
    1864           0 : void SVTXCurrencyField::setMin( double Value ) throw(::com::sun::star::uno::RuntimeException, std::exception)
    1865             : {
    1866           0 :     SolarMutexGuard aGuard;
    1867             : 
    1868           0 :     FormattedField* pField = GetFormattedField();
    1869           0 :     if ( pField )
    1870           0 :         pField->SetMinValue( Value );
    1871           0 : }
    1872             : 
    1873           0 : double SVTXCurrencyField::getMin() throw(::com::sun::star::uno::RuntimeException, std::exception)
    1874             : {
    1875           0 :     SolarMutexGuard aGuard;
    1876             : 
    1877           0 :     FormattedField* pField = GetFormattedField();
    1878           0 :     return pField ? pField->GetMinValue() : 0;
    1879             : }
    1880             : 
    1881           0 : void SVTXCurrencyField::setMax( double Value ) throw(::com::sun::star::uno::RuntimeException, std::exception)
    1882             : {
    1883           0 :     SolarMutexGuard aGuard;
    1884             : 
    1885           0 :     FormattedField* pField = GetFormattedField();
    1886           0 :     if ( pField )
    1887           0 :         pField->SetMaxValue( Value );
    1888           0 : }
    1889             : 
    1890           0 : double SVTXCurrencyField::getMax() throw(::com::sun::star::uno::RuntimeException, std::exception)
    1891             : {
    1892           0 :     SolarMutexGuard aGuard;
    1893             : 
    1894           0 :     FormattedField* pField = GetFormattedField();
    1895           0 :     return pField ? pField->GetMaxValue() : 0;
    1896             : }
    1897             : 
    1898          42 : void SVTXCurrencyField::setFirst( double Value ) throw(::com::sun::star::uno::RuntimeException, std::exception)
    1899             : {
    1900          42 :     SolarMutexGuard aGuard;
    1901             : 
    1902          42 :     FormattedField* pField = GetFormattedField();
    1903          42 :     if ( pField )
    1904          42 :         pField->SetSpinFirst( Value );
    1905          42 : }
    1906             : 
    1907           0 : double SVTXCurrencyField::getFirst() throw(::com::sun::star::uno::RuntimeException, std::exception)
    1908             : {
    1909           0 :     SolarMutexGuard aGuard;
    1910             : 
    1911           0 :     FormattedField* pField = GetFormattedField();
    1912           0 :     return pField ? pField->GetSpinFirst() : 0;
    1913             : }
    1914             : 
    1915          42 : void SVTXCurrencyField::setLast( double Value ) throw(::com::sun::star::uno::RuntimeException, std::exception)
    1916             : {
    1917          42 :     SolarMutexGuard aGuard;
    1918             : 
    1919          42 :     FormattedField* pField = GetFormattedField();
    1920          42 :     if ( pField )
    1921          42 :         pField->SetSpinLast( Value );
    1922          42 : }
    1923             : 
    1924           0 : double SVTXCurrencyField::getLast() throw(::com::sun::star::uno::RuntimeException, std::exception)
    1925             : {
    1926           0 :     SolarMutexGuard aGuard;
    1927             : 
    1928           0 :     FormattedField* pField = GetFormattedField();
    1929           0 :     return pField ? pField->GetSpinLast() : 0;
    1930             : }
    1931             : 
    1932           0 : void SVTXCurrencyField::setSpinSize( double Value ) throw(::com::sun::star::uno::RuntimeException, std::exception)
    1933             : {
    1934           0 :     SolarMutexGuard aGuard;
    1935             : 
    1936           0 :     FormattedField* pField = GetFormattedField();
    1937           0 :     if ( pField )
    1938           0 :         pField->SetSpinSize( Value );
    1939           0 : }
    1940             : 
    1941           0 : double SVTXCurrencyField::getSpinSize() throw(::com::sun::star::uno::RuntimeException, std::exception)
    1942             : {
    1943           0 :     SolarMutexGuard aGuard;
    1944             : 
    1945           0 :     FormattedField* pField = GetFormattedField();
    1946           0 :     return pField ? pField->GetSpinSize() : 0;
    1947             : }
    1948             : 
    1949           0 : void SVTXCurrencyField::setDecimalDigits( sal_Int16 Value ) throw(::com::sun::star::uno::RuntimeException, std::exception)
    1950             : {
    1951           0 :     SolarMutexGuard aGuard;
    1952             : 
    1953           0 :     FormattedField* pField = GetFormattedField();
    1954           0 :     if ( pField )
    1955           0 :         pField->SetDecimalDigits( Value );
    1956           0 : }
    1957             : 
    1958           0 : sal_Int16 SVTXCurrencyField::getDecimalDigits() throw(::com::sun::star::uno::RuntimeException, std::exception)
    1959             : {
    1960           0 :     SolarMutexGuard aGuard;
    1961             : 
    1962           0 :     FormattedField* pField = GetFormattedField();
    1963           0 :     return pField ? pField->GetDecimalDigits() : 0;
    1964             : }
    1965             : 
    1966           0 : void SVTXCurrencyField::setStrictFormat( sal_Bool bStrict ) throw(::com::sun::star::uno::RuntimeException, std::exception)
    1967             : {
    1968           0 :     SolarMutexGuard aGuard;
    1969             : 
    1970           0 :     FormattedField* pField = GetFormattedField();
    1971           0 :     if ( pField )
    1972           0 :         pField->SetStrictFormat( bStrict );
    1973           0 : }
    1974             : 
    1975           0 : sal_Bool SVTXCurrencyField::isStrictFormat() throw(::com::sun::star::uno::RuntimeException, std::exception)
    1976             : {
    1977           0 :     SolarMutexGuard aGuard;
    1978             : 
    1979           0 :     FormattedField* pField = GetFormattedField();
    1980           0 :     return pField ? pField->IsStrictFormat() : sal_False;
    1981             : }
    1982             : 
    1983        3108 : void SVTXCurrencyField::setProperty( const OUString& PropertyName, const ::com::sun::star::uno::Any& Value) throw(::com::sun::star::uno::RuntimeException, std::exception)
    1984             : {
    1985        3108 :     SolarMutexGuard aGuard;
    1986             : 
    1987        3108 :     DoubleCurrencyField* pField = static_cast<DoubleCurrencyField*>(GetFormattedField());
    1988        3108 :     if ( pField )
    1989             :     {
    1990        3108 :         sal_uInt16 nPropType = GetPropertyId( PropertyName );
    1991        3108 :         switch (nPropType)
    1992             :         {
    1993             :             case BASEPROPERTY_CURRENCYSYMBOL:
    1994             :             {
    1995          50 :                 OUString aStr;
    1996          50 :                 Value >>= aStr;
    1997          50 :                 pField->setCurrencySymbol( aStr );
    1998             :             }
    1999          50 :             break;
    2000             :             case BASEPROPERTY_CURSYM_POSITION:
    2001             :             {
    2002          50 :                 bool b = false;
    2003          50 :                 Value >>= b;
    2004          50 :                 pField->setPrependCurrSym(b);
    2005             :             }
    2006          50 :             break;
    2007             : 
    2008             :             default:
    2009        3008 :                 SVTXFormattedField::setProperty(PropertyName, Value);
    2010             :         }
    2011             :     }
    2012             :     else
    2013           0 :         SVTXFormattedField::setProperty(PropertyName, Value);
    2014        3108 : }
    2015             : 
    2016           0 : ::com::sun::star::uno::Any SVTXCurrencyField::getProperty( const OUString& PropertyName ) throw(::com::sun::star::uno::RuntimeException, std::exception)
    2017             : {
    2018           0 :     SolarMutexGuard aGuard;
    2019             : 
    2020           0 :     ::com::sun::star::uno::Any aReturn;
    2021             : 
    2022           0 :     DoubleCurrencyField* pField = static_cast<DoubleCurrencyField*>(GetFormattedField());
    2023           0 :     if ( pField )
    2024             :     {
    2025           0 :         sal_uInt16 nPropType = GetPropertyId( PropertyName );
    2026           0 :         switch (nPropType)
    2027             :         {
    2028             :             case BASEPROPERTY_CURRENCYSYMBOL:
    2029             :             {
    2030           0 :                 aReturn <<= OUString( pField->getCurrencySymbol() );
    2031             :             }
    2032           0 :             break;
    2033             :             case BASEPROPERTY_CURSYM_POSITION:
    2034             :             {
    2035           0 :                 aReturn <<= pField->getPrependCurrSym();
    2036             :             }
    2037           0 :             break;
    2038             :             default:
    2039           0 :                 return SVTXFormattedField::getProperty(PropertyName);
    2040             :         }
    2041             :     }
    2042           0 :     return SVTXFormattedField::getProperty(PropertyName);
    2043             : }
    2044             : 
    2045           0 : void SVTXCurrencyField::ImplGetPropertyIds( std::list< sal_uInt16 > &rIds )
    2046             : {
    2047             :     PushPropertyIds( rIds,
    2048             :                      BASEPROPERTY_CURRENCYSYMBOL,
    2049             :                      BASEPROPERTY_CURSYM_POSITION,
    2050           0 :                      0);
    2051           0 :     SVTXFormattedField::ImplGetPropertyIds( rIds );
    2052           0 : }
    2053             : 
    2054             : 
    2055             : 
    2056             : //  class VCLXProgressBar
    2057             : 
    2058             : 
    2059           0 : VCLXProgressBar::VCLXProgressBar()
    2060             :             :m_nValue(0)
    2061             :             ,m_nValueMin(0)
    2062           0 :             ,m_nValueMax(100)
    2063             : {
    2064           0 : }
    2065             : 
    2066           0 : VCLXProgressBar::~VCLXProgressBar()
    2067             : {
    2068           0 : }
    2069             : 
    2070           0 : void VCLXProgressBar::ImplUpdateValue()
    2071             : {
    2072           0 :     ProgressBar* pProgressBar = static_cast<ProgressBar*>(GetWindow());
    2073           0 :     if ( pProgressBar )
    2074             :     {
    2075             :         sal_Int32 nVal;
    2076             :         sal_Int32 nValMin;
    2077             :         sal_Int32 nValMax;
    2078             : 
    2079             :         // check min and max
    2080           0 :         if (m_nValueMin < m_nValueMax)
    2081             :         {
    2082           0 :             nValMin = m_nValueMin;
    2083           0 :             nValMax = m_nValueMax;
    2084             :         }
    2085             :         else
    2086             :         {
    2087           0 :             nValMin = m_nValueMax;
    2088           0 :             nValMax = m_nValueMin;
    2089             :         }
    2090             : 
    2091             :         // check value
    2092           0 :         if (m_nValue < nValMin)
    2093             :         {
    2094           0 :             nVal = nValMin;
    2095             :         }
    2096           0 :         else if (m_nValue > nValMax)
    2097             :         {
    2098           0 :             nVal = nValMax;
    2099             :         }
    2100             :         else
    2101             :         {
    2102           0 :             nVal = m_nValue;
    2103             :         }
    2104             : 
    2105             :         // calculate percent
    2106             :         sal_Int32 nPercent;
    2107           0 :         if (nValMin != nValMax)
    2108             :         {
    2109           0 :             nPercent = 100 * (nVal - nValMin) / (nValMax - nValMin);
    2110             :         }
    2111             :         else
    2112             :         {
    2113           0 :             nPercent = 0;
    2114             :         }
    2115             : 
    2116             :         // set progressbar value
    2117           0 :         pProgressBar->SetValue( (sal_uInt16) nPercent );
    2118             :     }
    2119           0 : }
    2120             : 
    2121             : // ::com::sun::star::uno::XInterface
    2122           0 : ::com::sun::star::uno::Any VCLXProgressBar::queryInterface( const ::com::sun::star::uno::Type & rType ) throw(::com::sun::star::uno::RuntimeException, std::exception)
    2123             : {
    2124             :     ::com::sun::star::uno::Any aRet = ::cppu::queryInterface( rType,
    2125             :                                         (static_cast< ::com::sun::star::awt::XProgressBar* >(this)),
    2126           0 :                                         (static_cast< ::com::sun::star::lang::XTypeProvider* >(this)) );
    2127           0 :     return (aRet.hasValue() ? aRet : VCLXWindow::queryInterface( rType ));
    2128             : }
    2129             : 
    2130             : // ::com::sun::star::lang::XTypeProvider
    2131           0 : IMPL_XTYPEPROVIDER_START( VCLXProgressBar )
    2132           0 :     cppu::UnoType<com::sun::star::awt::XProgressBar>::get(),
    2133             :     VCLXWindow::getTypes()
    2134           0 : IMPL_XTYPEPROVIDER_END
    2135             : 
    2136             : // ::com::sun::star::awt::XProgressBar
    2137           0 : void VCLXProgressBar::setForegroundColor( sal_Int32 nColor ) throw(::com::sun::star::uno::RuntimeException, std::exception)
    2138             : {
    2139           0 :     SolarMutexGuard aGuard;
    2140             : 
    2141           0 :     vcl::Window* pWindow = GetWindow();
    2142           0 :     if ( pWindow )
    2143             :     {
    2144           0 :         Color aColor( nColor );
    2145           0 :         pWindow->SetControlForeground( aColor );
    2146           0 :     }
    2147           0 : }
    2148             : 
    2149           0 : void VCLXProgressBar::setBackgroundColor( sal_Int32 nColor ) throw(::com::sun::star::uno::RuntimeException, std::exception)
    2150             : {
    2151           0 :     SolarMutexGuard aGuard;
    2152             : 
    2153           0 :     vcl::Window* pWindow = GetWindow();
    2154           0 :     if ( pWindow )
    2155             :     {
    2156           0 :         Color aColor( nColor );
    2157           0 :         pWindow->SetBackground( aColor );
    2158           0 :         pWindow->SetControlBackground( aColor );
    2159           0 :         pWindow->Invalidate();
    2160           0 :     }
    2161           0 : }
    2162             : 
    2163           0 : void VCLXProgressBar::setValue( sal_Int32 nValue ) throw(::com::sun::star::uno::RuntimeException, std::exception)
    2164             : {
    2165           0 :     SolarMutexGuard aGuard;
    2166             : 
    2167           0 :     m_nValue = nValue;
    2168           0 :     ImplUpdateValue();
    2169           0 : }
    2170             : 
    2171           0 : void VCLXProgressBar::setRange( sal_Int32 nMin, sal_Int32 nMax ) throw(::com::sun::star::uno::RuntimeException, std::exception )
    2172             : {
    2173           0 :     SolarMutexGuard aGuard;
    2174             : 
    2175           0 :     if ( nMin < nMax )
    2176             :     {
    2177             :         // take correct min and max
    2178           0 :         m_nValueMin = nMin;
    2179           0 :         m_nValueMax = nMax;
    2180             :     }
    2181             :     else
    2182             :     {
    2183             :         // change min and max
    2184           0 :         m_nValueMin = nMax;
    2185           0 :         m_nValueMax = nMin;
    2186             :     }
    2187             : 
    2188           0 :     ImplUpdateValue();
    2189           0 : }
    2190             : 
    2191           0 : sal_Int32 VCLXProgressBar::getValue() throw(::com::sun::star::uno::RuntimeException, std::exception)
    2192             : {
    2193           0 :     SolarMutexGuard aGuard;
    2194             : 
    2195           0 :     return m_nValue;
    2196             : }
    2197             : 
    2198             : // ::com::sun::star::awt::VclWindowPeer
    2199           0 : void VCLXProgressBar::setProperty( const OUString& PropertyName, const ::com::sun::star::uno::Any& Value) throw(::com::sun::star::uno::RuntimeException, std::exception)
    2200             : {
    2201           0 :     SolarMutexGuard aGuard;
    2202             : 
    2203           0 :     ProgressBar* pProgressBar = static_cast<ProgressBar*>(GetWindow());
    2204           0 :     if ( pProgressBar )
    2205             :     {
    2206           0 :         sal_uInt16 nPropType = GetPropertyId( PropertyName );
    2207           0 :         switch ( nPropType )
    2208             :         {
    2209             :             case BASEPROPERTY_PROGRESSVALUE:
    2210             :             {
    2211           0 :                 if ( Value >>= m_nValue )
    2212           0 :                     ImplUpdateValue();
    2213             :             }
    2214           0 :             break;
    2215             :             case BASEPROPERTY_PROGRESSVALUE_MIN:
    2216             :             {
    2217           0 :                 if ( Value >>= m_nValueMin )
    2218           0 :                     ImplUpdateValue();
    2219             :             }
    2220           0 :             break;
    2221             :             case BASEPROPERTY_PROGRESSVALUE_MAX:
    2222             :             {
    2223           0 :                 if ( Value >>= m_nValueMax )
    2224           0 :                     ImplUpdateValue();
    2225             :             }
    2226           0 :             break;
    2227             :             case BASEPROPERTY_FILLCOLOR:
    2228             :             {
    2229           0 :                 vcl::Window* pWindow = GetWindow();
    2230           0 :                 if ( pWindow )
    2231             :                 {
    2232           0 :                     bool bVoid = Value.getValueType().getTypeClass() == ::com::sun::star::uno::TypeClass_VOID;
    2233             : 
    2234           0 :                     if ( bVoid )
    2235             :                     {
    2236           0 :                         pWindow->SetControlForeground();
    2237             :                     }
    2238             :                     else
    2239             :                     {
    2240           0 :                         sal_Int32 nColor = 0;
    2241           0 :                         if ( Value >>= nColor )
    2242             :                         {
    2243           0 :                             Color aColor( nColor );
    2244           0 :                             pWindow->SetControlForeground( aColor );
    2245             :                         }
    2246             :                     }
    2247             :                 }
    2248             :             }
    2249           0 :             break;
    2250             :             default:
    2251           0 :                 VCLXWindow::setProperty( PropertyName, Value );
    2252           0 :                 break;
    2253             :         }
    2254           0 :     }
    2255           0 : }
    2256             : 
    2257           0 : ::com::sun::star::uno::Any VCLXProgressBar::getProperty( const OUString& PropertyName ) throw(::com::sun::star::uno::RuntimeException, std::exception)
    2258             : {
    2259           0 :     SolarMutexGuard aGuard;
    2260             : 
    2261           0 :     ::com::sun::star::uno::Any aProp;
    2262           0 :     ProgressBar* pProgressBar = static_cast<ProgressBar*>(GetWindow());
    2263           0 :     if ( pProgressBar )
    2264             :     {
    2265           0 :         sal_uInt16 nPropType = GetPropertyId( PropertyName );
    2266           0 :         switch ( nPropType )
    2267             :         {
    2268             :             case BASEPROPERTY_PROGRESSVALUE:
    2269             :             {
    2270           0 :                  aProp <<= m_nValue;
    2271             :             }
    2272           0 :             break;
    2273             :             case BASEPROPERTY_PROGRESSVALUE_MIN:
    2274             :             {
    2275           0 :                  aProp <<= m_nValueMin;
    2276             :             }
    2277           0 :             break;
    2278             :             case BASEPROPERTY_PROGRESSVALUE_MAX:
    2279             :             {
    2280           0 :                  aProp <<= m_nValueMax;
    2281             :             }
    2282           0 :             break;
    2283             :             default:
    2284           0 :                 aProp <<= VCLXWindow::getProperty( PropertyName );
    2285           0 :                 break;
    2286             :         }
    2287             :     }
    2288           0 :     return aProp;
    2289             : }
    2290             : 
    2291           0 : void VCLXProgressBar::ImplGetPropertyIds( std::list< sal_uInt16 > &rIds )
    2292             : {
    2293             :     PushPropertyIds( rIds,
    2294             :                      BASEPROPERTY_PROGRESSVALUE,
    2295             :                      BASEPROPERTY_PROGRESSVALUE_MIN,
    2296             :                      BASEPROPERTY_PROGRESSVALUE_MAX,
    2297             :                      BASEPROPERTY_FILLCOLOR,
    2298           0 :                      0);
    2299           0 :     VCLXWindow::ImplGetPropertyIds( rIds, true );
    2300           0 : }
    2301             : 
    2302             : 
    2303             : 
    2304             : //  class SVTXDateField
    2305             : 
    2306          60 : SVTXDateField::SVTXDateField()
    2307          60 :     :VCLXDateField()
    2308             : {
    2309          60 : }
    2310             : 
    2311         116 : SVTXDateField::~SVTXDateField()
    2312             : {
    2313         116 : }
    2314             : 
    2315        4741 : void SAL_CALL SVTXDateField::setProperty( const OUString& PropertyName, const ::com::sun::star::uno::Any& Value ) throw(::com::sun::star::uno::RuntimeException, std::exception)
    2316             : {
    2317        4741 :     VCLXDateField::setProperty( PropertyName, Value );
    2318             : 
    2319             :     // some properties need to be forwarded to the sub edit, too
    2320        4741 :     Edit* pSubEdit = GetWindow() ? static_cast< Edit* >( GetWindow() )->GetSubEdit() : NULL;
    2321        4741 :     if ( !pSubEdit )
    2322        6649 :         return;
    2323             : 
    2324        2833 :     switch ( GetPropertyId( PropertyName ) )
    2325             :     {
    2326             :     case BASEPROPERTY_TEXTLINECOLOR:
    2327          34 :         if ( !Value.hasValue() )
    2328          34 :             pSubEdit->SetTextLineColor();
    2329             :         else
    2330             :         {
    2331           0 :             sal_Int32 nColor = 0;
    2332           0 :             if ( Value >>= nColor )
    2333           0 :                 pSubEdit->SetTextLineColor( Color( nColor ) );
    2334             :         }
    2335          34 :         break;
    2336             :     }
    2337             : }
    2338             : 
    2339           0 : void SVTXDateField::ImplGetPropertyIds( std::list< sal_uInt16 > &rIds )
    2340             : {
    2341             :     PushPropertyIds( rIds,
    2342             :                      BASEPROPERTY_TEXTLINECOLOR,
    2343           0 :                      0);
    2344           0 :     VCLXDateField::ImplGetPropertyIds( rIds );
    2345        1227 : }
    2346             : 
    2347             : /* vim:set shiftwidth=4 softtabstop=4 expandtab: */

Generated by: LCOV version 1.10