1 /*************************************************************************
3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
5 * Copyright 2008 by Sun Microsystems, Inc.
7 * OpenOffice.org - a multi-platform office productivity suite
9 * $RCSfile: unoiface.cxx,v $
12 * This file is part of OpenOffice.org.
14 * OpenOffice.org is free software: you can redistribute it and/or modify
15 * it under the terms of the GNU Lesser General Public License version 3
16 * only, as published by the Free Software Foundation.
18 * OpenOffice.org is distributed in the hope that it will be useful,
19 * but WITHOUT ANY WARRANTY; without even the implied warranty of
20 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
21 * GNU Lesser General Public License version 3 for more details
22 * (a copy is included in the LICENSE file that accompanied this code).
24 * You should have received a copy of the GNU Lesser General Public License
25 * version 3 along with OpenOffice.org. If not, see
26 * <http://www.openoffice.org/license.html>
27 * for a copy of the LGPLv3 License.
29 ************************************************************************/
31 // MARKER(update_precomp.py): autogen include statement, do not remove
32 #include "precompiled_svtools.hxx"
34 #define _SVT_UNOIFACE_CXX
35 #include <tools/debug.hxx>
36 #include <vcl/svapp.hxx>
38 #include <svtools/svmedit.hxx>
39 #include <unoiface.hxx>
40 #include "filedlg.hxx"
41 #include "filectrl.hxx"
42 #include "roadmap.hxx"
43 #include <svtools/fixedhyper.hxx>
44 #include <com/sun/star/lang/XMultiServiceFactory.hpp>
45 #include <com/sun/star/lang/XSingleServiceFactory.hpp>
46 #include <com/sun/star/awt/LineEndFormat.hpp>
47 #include <comphelper/processfactory.hxx>
48 #include <toolkit/helper/convert.hxx>
49 #include <toolkit/helper/property.hxx>
50 #include <svtools/fmtfield.hxx>
52 #include <calendar.hxx>
53 #include <prgsbar.hxx>
55 #include <svtools/svtreebx.hxx>
56 #include "treecontrolpeer.hxx"
57 //#include "vclxgridcontrol.hxx"
58 #include "unocontroltablemodel.hxx"
59 #include <svtools/table/tablecontrol.hxx>
63 static void lcl_setWinBits( Window
* _pWindow
, WinBits _nBits
, sal_Bool _bSet
)
65 WinBits nStyle
= _pWindow
->GetStyle();
70 _pWindow
->SetStyle( nStyle
);
74 // ----------------------------------------------------
75 // help function for the toolkit...
76 // ----------------------------------------------------
80 SAL_DLLPUBLIC_EXPORT Window
* CreateWindow( VCLXWindow
** ppNewComp
, const ::com::sun::star::awt::WindowDescriptor
* pDescriptor
, Window
* pParent
, WinBits nWinBits
)
82 Window
* pWindow
= NULL
;
83 String
aServiceName( pDescriptor
->WindowServiceName
);
84 if ( aServiceName
.EqualsIgnoreCaseAscii( "MultiLineEdit" ) )
88 pWindow
= new MultiLineEdit( pParent
, nWinBits
|WB_IGNORETAB
);
89 *ppNewComp
= new VCLXMultiLineEdit
;
97 else if ( aServiceName
.EqualsIgnoreCaseAscii( "FileControl" ) )
101 pWindow
= new FileControl( pParent
, nWinBits
);
102 *ppNewComp
= new VCLXFileControl
;
110 else if (aServiceName
.EqualsIgnoreCaseAscii("FormattedField") )
112 pWindow
= new FormattedField( pParent
, nWinBits
);
113 *ppNewComp
= new SVTXFormattedField
;
115 else if (aServiceName
.EqualsIgnoreCaseAscii("NumericField") )
117 pWindow
= new DoubleNumericField( pParent
, nWinBits
);
118 *ppNewComp
= new SVTXNumericField
;
120 else if (aServiceName
.EqualsIgnoreCaseAscii("LongCurrencyField") )
122 pWindow
= new DoubleCurrencyField( pParent
, nWinBits
);
123 *ppNewComp
= new SVTXCurrencyField
;
125 else if (aServiceName
.EqualsIgnoreCaseAscii("datefield") )
127 pWindow
= new CalendarField( pParent
, nWinBits
);
128 static_cast<CalendarField
*>(pWindow
)->EnableToday();
129 static_cast<CalendarField
*>(pWindow
)->EnableNone();
130 static_cast<CalendarField
*>(pWindow
)->EnableEmptyFieldValue( TRUE
);
131 *ppNewComp
= new SVTXDateField
;
132 ((VCLXFormattedSpinField
*)*ppNewComp
)->SetFormatter( (FormatterBase
*)(DateField
*)pWindow
);
134 else if (aServiceName
.EqualsIgnoreCaseAscii("roadmap") )
136 pWindow
= new ::svt::ORoadmap( pParent
, WB_TABSTOP
);
137 *ppNewComp
= new SVTXRoadmap
;
139 else if ( aServiceName
.EqualsIgnoreCaseAscii( "ProgressBar" ) )
143 pWindow
= new ProgressBar( pParent
, nWinBits
);
144 *ppNewComp
= new VCLXProgressBar
;
152 else if ( aServiceName
.EqualsIgnoreCaseAscii( "Tree" ) )
154 TreeControlPeer
* pPeer
= new TreeControlPeer
;
156 pWindow
= pPeer
->createVclControl( pParent
, nWinBits
);
158 else if ( aServiceName
.EqualsIgnoreCaseAscii( "FixedHyperlink" ) )
162 pWindow
= new ::svt::FixedHyperlink( pParent
, nWinBits
);
163 *ppNewComp
= new VCLXFixedHyperlink
;
171 else if ( aServiceName
.EqualsIgnoreCaseAscii( "Grid" ) )
175 ::svt::table::TableControl
* m_pTable
= new ::svt::table::TableControl(pParent
, nWinBits
);
176 UnoControlTableModel
* pModel
= new UnoControlTableModel();
191 // ----------------------------------------------------
192 // class VCLXMultiLineEdit
193 // ----------------------------------------------------
194 VCLXMultiLineEdit::VCLXMultiLineEdit()
195 :maTextListeners( *this )
196 ,meLineEndType( LINEEND_LF
) // default behavior before introducing this property: LF (unix-like)
200 VCLXMultiLineEdit::~VCLXMultiLineEdit()
204 ::com::sun::star::uno::Any
VCLXMultiLineEdit::queryInterface( const ::com::sun::star::uno::Type
& rType
) throw(::com::sun::star::uno::RuntimeException
)
206 ::com::sun::star::uno::Any aRet
= ::cppu::queryInterface( rType
,
207 SAL_STATIC_CAST( ::com::sun::star::awt::XTextComponent
*, this ),
208 SAL_STATIC_CAST( ::com::sun::star::awt::XTextArea
*, this ),
209 SAL_STATIC_CAST( ::com::sun::star::awt::XTextLayoutConstrains
*, this ),
210 SAL_STATIC_CAST( ::com::sun::star::lang::XTypeProvider
*, this ) );
211 return (aRet
.hasValue() ? aRet
: VCLXWindow::queryInterface( rType
));
214 // ::com::sun::star::lang::XTypeProvider
215 IMPL_XTYPEPROVIDER_START( VCLXMultiLineEdit
)
216 getCppuType( ( ::com::sun::star::uno::Reference
< ::com::sun::star::awt::XTextComponent
>* ) NULL
),
217 getCppuType( ( ::com::sun::star::uno::Reference
< ::com::sun::star::awt::XTextArea
>* ) NULL
),
218 getCppuType( ( ::com::sun::star::uno::Reference
< ::com::sun::star::awt::XTextLayoutConstrains
>* ) NULL
),
219 VCLXWindow::getTypes()
220 IMPL_XTYPEPROVIDER_END
222 void VCLXMultiLineEdit::addTextListener( const ::com::sun::star::uno::Reference
< ::com::sun::star::awt::XTextListener
> & l
) throw(::com::sun::star::uno::RuntimeException
)
224 maTextListeners
.addInterface( l
);
227 void VCLXMultiLineEdit::removeTextListener( const ::com::sun::star::uno::Reference
< ::com::sun::star::awt::XTextListener
> & l
) throw(::com::sun::star::uno::RuntimeException
)
229 maTextListeners
.removeInterface( l
);
232 void VCLXMultiLineEdit::setText( const ::rtl::OUString
& aText
) throw(::com::sun::star::uno::RuntimeException
)
234 ::vos::OGuard
aGuard( GetMutex() );
236 MultiLineEdit
* pEdit
= (MultiLineEdit
*)GetWindow();
239 pEdit
->SetText( aText
);
241 // #107218# Call same listeners like VCL would do after user interaction
242 SetSynthesizingVCLEvent( sal_True
);
243 pEdit
->SetModifyFlag();
245 SetSynthesizingVCLEvent( sal_False
);
249 void VCLXMultiLineEdit::insertText( const ::com::sun::star::awt::Selection
& rSel
, const ::rtl::OUString
& aText
) throw(::com::sun::star::uno::RuntimeException
)
251 ::vos::OGuard
aGuard( GetMutex() );
253 MultiLineEdit
* pEdit
= (MultiLineEdit
*)GetWindow();
256 setSelection( rSel
);
257 pEdit
->ReplaceSelected( aText
);
261 ::rtl::OUString
VCLXMultiLineEdit::getText() throw(::com::sun::star::uno::RuntimeException
)
263 ::vos::OGuard
aGuard( GetMutex() );
265 ::rtl::OUString aText
;
266 MultiLineEdit
* pEdit
= (MultiLineEdit
*)GetWindow();
268 aText
= pEdit
->GetText( meLineEndType
);
272 ::rtl::OUString
VCLXMultiLineEdit::getSelectedText() throw(::com::sun::star::uno::RuntimeException
)
274 ::vos::OGuard
aGuard( GetMutex() );
276 ::rtl::OUString aText
;
277 MultiLineEdit
* pMultiLineEdit
= (MultiLineEdit
*) GetWindow();
279 aText
= pMultiLineEdit
->GetSelected( meLineEndType
);
284 void VCLXMultiLineEdit::setSelection( const ::com::sun::star::awt::Selection
& aSelection
) throw(::com::sun::star::uno::RuntimeException
)
286 ::vos::OGuard
aGuard( GetMutex() );
288 MultiLineEdit
* pMultiLineEdit
= (MultiLineEdit
*) GetWindow();
289 if ( pMultiLineEdit
)
291 pMultiLineEdit
->SetSelection( Selection( aSelection
.Min
, aSelection
.Max
) );
295 ::com::sun::star::awt::Selection
VCLXMultiLineEdit::getSelection() throw(::com::sun::star::uno::RuntimeException
)
297 ::vos::OGuard
aGuard( GetMutex() );
299 ::com::sun::star::awt::Selection aSel
;
300 MultiLineEdit
* pMultiLineEdit
= (MultiLineEdit
*) GetWindow();
301 if ( pMultiLineEdit
)
303 aSel
.Min
= pMultiLineEdit
->GetSelection().Min();
304 aSel
.Max
= pMultiLineEdit
->GetSelection().Max();
309 sal_Bool
VCLXMultiLineEdit::isEditable() throw(::com::sun::star::uno::RuntimeException
)
311 ::vos::OGuard
aGuard( GetMutex() );
313 MultiLineEdit
* pMultiLineEdit
= (MultiLineEdit
*) GetWindow();
314 return ( pMultiLineEdit
&& !pMultiLineEdit
->IsReadOnly() && pMultiLineEdit
->IsEnabled() ) ? sal_True
: sal_False
;
317 void VCLXMultiLineEdit::setEditable( sal_Bool bEditable
) throw(::com::sun::star::uno::RuntimeException
)
319 ::vos::OGuard
aGuard( GetMutex() );
321 MultiLineEdit
* pMultiLineEdit
= (MultiLineEdit
*) GetWindow();
322 if ( pMultiLineEdit
)
323 pMultiLineEdit
->SetReadOnly( !bEditable
);
326 void VCLXMultiLineEdit::setMaxTextLen( sal_Int16 nLen
) throw(::com::sun::star::uno::RuntimeException
)
328 ::vos::OGuard
aGuard( GetMutex() );
330 MultiLineEdit
* pMultiLineEdit
= (MultiLineEdit
*) GetWindow();
331 if ( pMultiLineEdit
)
332 pMultiLineEdit
->SetMaxTextLen( nLen
);
335 sal_Int16
VCLXMultiLineEdit::getMaxTextLen() throw(::com::sun::star::uno::RuntimeException
)
337 ::vos::OGuard
aGuard( GetMutex() );
339 MultiLineEdit
* pMultiLineEdit
= (MultiLineEdit
*) GetWindow();
340 return pMultiLineEdit
? (sal_Int16
)pMultiLineEdit
->GetMaxTextLen() : (sal_Int16
)0;
343 ::rtl::OUString
VCLXMultiLineEdit::getTextLines() throw(::com::sun::star::uno::RuntimeException
)
345 ::vos::OGuard
aGuard( GetMutex() );
347 ::rtl::OUString aText
;
348 MultiLineEdit
* pEdit
= (MultiLineEdit
*)GetWindow();
350 aText
= pEdit
->GetTextLines( meLineEndType
);
354 ::com::sun::star::awt::Size
VCLXMultiLineEdit::getMinimumSize() throw(::com::sun::star::uno::RuntimeException
)
356 ::vos::OGuard
aGuard( GetMutex() );
358 ::com::sun::star::awt::Size aSz
;
359 MultiLineEdit
* pEdit
= (MultiLineEdit
*) GetWindow();
361 aSz
= AWTSize(pEdit
->CalcMinimumSize());
365 ::com::sun::star::awt::Size
VCLXMultiLineEdit::getPreferredSize() throw(::com::sun::star::uno::RuntimeException
)
367 return getMinimumSize();
370 ::com::sun::star::awt::Size
VCLXMultiLineEdit::calcAdjustedSize( const ::com::sun::star::awt::Size
& rNewSize
) throw(::com::sun::star::uno::RuntimeException
)
372 ::vos::OGuard
aGuard( GetMutex() );
374 ::com::sun::star::awt::Size aSz
= rNewSize
;
375 MultiLineEdit
* pEdit
= (MultiLineEdit
*) GetWindow();
377 aSz
= AWTSize(pEdit
->CalcAdjustedSize( VCLSize(rNewSize
)));
381 ::com::sun::star::awt::Size
VCLXMultiLineEdit::getMinimumSize( sal_Int16 nCols
, sal_Int16 nLines
) throw(::com::sun::star::uno::RuntimeException
)
383 ::vos::OGuard
aGuard( GetMutex() );
385 ::com::sun::star::awt::Size aSz
;
386 MultiLineEdit
* pEdit
= (MultiLineEdit
*) GetWindow();
388 aSz
= AWTSize(pEdit
->CalcSize( nCols
, nLines
));
392 void VCLXMultiLineEdit::getColumnsAndLines( sal_Int16
& nCols
, sal_Int16
& nLines
) throw(::com::sun::star::uno::RuntimeException
)
394 ::vos::OGuard
aGuard( GetMutex() );
397 MultiLineEdit
* pEdit
= (MultiLineEdit
*) GetWindow();
401 pEdit
->GetMaxVisColumnsAndLines( nC
, nL
);
407 void VCLXMultiLineEdit::ProcessWindowEvent( const VclWindowEvent
& rVclWindowEvent
)
409 switch ( rVclWindowEvent
.GetId() )
411 case VCLEVENT_EDIT_MODIFY
:
413 if ( maTextListeners
.getLength() )
415 ::com::sun::star::awt::TextEvent aEvent
;
416 aEvent
.Source
= (::cppu::OWeakObject
*)this;
417 maTextListeners
.textChanged( aEvent
);
423 VCLXWindow::ProcessWindowEvent( rVclWindowEvent
);
429 void VCLXMultiLineEdit::setProperty( const ::rtl::OUString
& PropertyName
, const ::com::sun::star::uno::Any
& Value
) throw(::com::sun::star::uno::RuntimeException
)
431 ::vos::OGuard
aGuard( GetMutex() );
433 MultiLineEdit
* pMultiLineEdit
= (MultiLineEdit
*)GetWindow();
434 if ( pMultiLineEdit
)
436 sal_uInt16 nPropType
= GetPropertyId( PropertyName
);
439 case BASEPROPERTY_LINE_END_FORMAT
:
441 sal_Int16 nLineEndType
= ::com::sun::star::awt::LineEndFormat::LINE_FEED
;
442 OSL_VERIFY( Value
>>= nLineEndType
);
443 switch ( nLineEndType
)
445 case ::com::sun::star::awt::LineEndFormat::CARRIAGE_RETURN
: meLineEndType
= LINEEND_CR
; break;
446 case ::com::sun::star::awt::LineEndFormat::LINE_FEED
: meLineEndType
= LINEEND_LF
; break;
447 case ::com::sun::star::awt::LineEndFormat::CARRIAGE_RETURN_LINE_FEED
: meLineEndType
= LINEEND_CRLF
; break;
448 default: DBG_ERROR( "VCLXMultiLineEdit::setProperty: invalid line end value!" ); break;
453 case BASEPROPERTY_READONLY
:
455 sal_Bool b
= sal_Bool();
457 pMultiLineEdit
->SetReadOnly( b
);
460 case BASEPROPERTY_MAXTEXTLEN
:
462 sal_Int16 n
= sal_Int16();
464 pMultiLineEdit
->SetMaxTextLen( n
);
467 case BASEPROPERTY_HIDEINACTIVESELECTION
:
469 sal_Bool b
= sal_Bool();
472 pMultiLineEdit
->EnableFocusSelectionHide( b
);
473 lcl_setWinBits( pMultiLineEdit
, WB_NOHIDESELECTION
, !b
);
479 VCLXWindow::setProperty( PropertyName
, Value
);
485 ::com::sun::star::uno::Any
VCLXMultiLineEdit::getProperty( const ::rtl::OUString
& PropertyName
) throw(::com::sun::star::uno::RuntimeException
)
487 ::vos::OGuard
aGuard( GetMutex() );
489 ::com::sun::star::uno::Any aProp
;
490 MultiLineEdit
* pMultiLineEdit
= (MultiLineEdit
*)GetWindow();
491 if ( pMultiLineEdit
)
493 sal_uInt16 nPropType
= GetPropertyId( PropertyName
);
496 case BASEPROPERTY_LINE_END_FORMAT
:
498 sal_Int16 nLineEndType
= ::com::sun::star::awt::LineEndFormat::LINE_FEED
;
499 switch ( meLineEndType
)
501 case LINEEND_CR
: nLineEndType
= ::com::sun::star::awt::LineEndFormat::CARRIAGE_RETURN
; break;
502 case LINEEND_LF
: nLineEndType
= ::com::sun::star::awt::LineEndFormat::LINE_FEED
; break;
503 case LINEEND_CRLF
: nLineEndType
= ::com::sun::star::awt::LineEndFormat::CARRIAGE_RETURN_LINE_FEED
; break;
504 default: DBG_ERROR( "VCLXMultiLineEdit::getProperty: invalid line end value!" ); break;
506 aProp
<<= nLineEndType
;
510 case BASEPROPERTY_READONLY
:
512 aProp
<<= pMultiLineEdit
->IsReadOnly();
515 case BASEPROPERTY_MAXTEXTLEN
:
517 aProp
<<= (sal_Int16
) pMultiLineEdit
->GetMaxTextLen();
522 aProp
<<= VCLXWindow::getProperty( PropertyName
);
529 void SAL_CALL
VCLXMultiLineEdit::setFocus( ) throw(::com::sun::star::uno::RuntimeException
)
531 ::vos::OGuard
aGuard( GetMutex() );
533 // don't grab the focus if we already have it. Reason is that the only thing which the edit
534 // does is forwarding the focus to it's text window. This text window then does a "select all".
535 // So if the text window already has the focus, and we give the focus to the multi line
536 // edit, then all which happens is that everything is selected.
537 // #i27072# - 2004-04-25 - fs@openoffice.org
538 if ( GetWindow() && !GetWindow()->HasChildPathFocus() )
539 GetWindow()->GrabFocus();
542 void VCLXMultiLineEdit::ImplGetPropertyIds( std::list
< sal_uInt16
> &rIds
)
544 PushPropertyIds( rIds
,
545 // FIXME: elide duplication ?
546 BASEPROPERTY_LINE_END_FORMAT
,
547 BASEPROPERTY_READONLY
,
548 BASEPROPERTY_MAXTEXTLEN
,
549 BASEPROPERTY_HIDEINACTIVESELECTION
,
551 VCLXWindow::ImplGetPropertyIds( rIds
, true );
554 // ----------------------------------------------------
555 // class VCLXFileDialog
556 // ----------------------------------------------------
558 VCLXFileDialog::VCLXFileDialog()
562 VCLXFileDialog::~VCLXFileDialog()
566 ::com::sun::star::uno::Any VCLXFileDialog::queryInterface( const ::com::sun::star::uno::Type & rType ) throw(::com::sun::star::uno::RuntimeException)
568 ::com::sun::star::uno::Any aRet = ::cppu::queryInterface( rType,
569 SAL_STATIC_CAST( ::com::sun::star::awt::XXX*, this ) );
570 return (aRet.hasValue() ? aRet : OWeakObject::queryInterface( rType ));
573 // ::com::sun::star::lang::XTypeProvider
574 IMPL_XTYPEPROVIDER_START( VCLXFileDialog )
575 getCppuType( ( ::com::sun::star::uno::Reference< ::com::sun::star::awt::XXX>* ) NULL )
576 IMPL_XTYPEPROVIDER_END
578 void VCLXFileDialog::setPath( const ::rtl::OUString& rPath )
580 ::vos::OGuard aGuard( GetMutex() );
582 FileDialog* pDlg = (FileDialog*)GetWindow();
584 pDlg->SetPath( ::rtl::OUStringToOString( rPath, CHARSET_SYSTEM ) );
587 ::rtl::OUString VCLXFileDialog::getPath()
589 ::vos::OGuard aGuard( GetMutex() );
591 ::rtl::OUString aPath;
592 FileDialog* pDlg = (FileDialog*)GetWindow();
594 aPath = StringToOUString( pDlg->GetPath(), CHARSET_SYSTEM );
598 void VCLXFileDialog::setFilters( const ::com::sun::star::uno::Sequence< ::rtl::OUString>& rFilterNames, const ::com::sun::star::uno::Sequence< ::rtl::OUString>& rMasks )
600 ::vos::OGuard aGuard( GetMutex() );
602 FileDialog* pDlg = (FileDialog*)GetWindow();
605 sal_uInt32 nFlts = rFilterNames.getLength();
606 for ( sal_uInt32 n = 0; n < nFlts; n++ )
608 ::rtl::OUStringToOString( rFilterNames.getConstArray()[n], CHARSET_SYSTEM ),
609 ::rtl::OUStringToOString( rMasks.getConstArray()[n], CHARSET_SYSTEM ) );
613 void VCLXFileDialog::setCurrentFilter( const ::rtl::OUString& rFilterName )
615 ::vos::OGuard aGuard( GetMutex() );
617 FileDialog* pDlg = (FileDialog*)GetWindow();
619 pDlg->SetCurFilter( ::rtl::OUStringToOString( rFilterName, CHARSET_SYSTEM ) );
622 ::rtl::OUString VCLXFileDialog::getCurrentFilter()
624 ::vos::OGuard aGuard( GetMutex() );
626 ::rtl::OUString aFilter;
627 FileDialog* pDlg = (FileDialog*)GetWindow();
629 aFilter = StringToOUString( pDlg->GetCurFilter(), CHARSET_SYSTEM );
634 // ----------------------------------------------------
635 // class VCLXFileControl
636 // ----------------------------------------------------
637 VCLXFileControl::VCLXFileControl() : maTextListeners( *this )
641 VCLXFileControl::~VCLXFileControl()
643 FileControl
* pControl
= (FileControl
*) GetWindow();
645 pControl
->GetEdit().SetModifyHdl( Link() );
648 ::com::sun::star::uno::Any
VCLXFileControl::queryInterface( const ::com::sun::star::uno::Type
& rType
) throw(::com::sun::star::uno::RuntimeException
)
650 ::com::sun::star::uno::Any aRet
= ::cppu::queryInterface( rType
,
651 SAL_STATIC_CAST( ::com::sun::star::awt::XTextComponent
*, this ),
652 SAL_STATIC_CAST( ::com::sun::star::awt::XTextLayoutConstrains
*, this ),
653 SAL_STATIC_CAST( ::com::sun::star::lang::XTypeProvider
*, this ) );
654 return (aRet
.hasValue() ? aRet
: VCLXWindow::queryInterface( rType
));
657 // ::com::sun::star::lang::XTypeProvider
658 IMPL_XTYPEPROVIDER_START( VCLXFileControl
)
659 getCppuType( ( ::com::sun::star::uno::Reference
< ::com::sun::star::awt::XTextComponent
>* ) NULL
),
660 getCppuType( ( ::com::sun::star::uno::Reference
< ::com::sun::star::awt::XTextLayoutConstrains
>* ) NULL
),
661 VCLXWindow::getTypes()
662 IMPL_XTYPEPROVIDER_END
664 void SAL_CALL
VCLXFileControl::setProperty( const ::rtl::OUString
& PropertyName
, const ::com::sun::star::uno::Any
& Value
) throw(::com::sun::star::uno::RuntimeException
)
666 ::vos::OGuard
aGuard( GetMutex() );
668 FileControl
* pControl
= (FileControl
*)GetWindow();
671 sal_uInt16 nPropType
= GetPropertyId( PropertyName
);
674 case BASEPROPERTY_HIDEINACTIVESELECTION
:
676 sal_Bool
bValue( sal_False
);
677 OSL_VERIFY( Value
>>= bValue
);
679 lcl_setWinBits( pControl
, WB_NOHIDESELECTION
, !bValue
);
680 lcl_setWinBits( &pControl
->GetEdit(), WB_NOHIDESELECTION
, !bValue
);
685 VCLXWindow::setProperty( PropertyName
, Value
);
691 void VCLXFileControl::SetWindow( Window
* pWindow
)
693 FileControl
* pPrevFileControl
= dynamic_cast<FileControl
*>( GetWindow() );
694 if ( pPrevFileControl
)
695 pPrevFileControl
->GetEdit().SetModifyHdl( Link() );
697 FileControl
* pNewFileControl
= dynamic_cast<FileControl
*>( pWindow
);
698 if ( pNewFileControl
)
699 pNewFileControl
->GetEdit().SetModifyHdl( LINK( this, VCLXFileControl
, ModifyHdl
) );
701 VCLXWindow::SetWindow( pWindow
);
704 void VCLXFileControl::addTextListener( const ::com::sun::star::uno::Reference
< ::com::sun::star::awt::XTextListener
> & l
) throw(::com::sun::star::uno::RuntimeException
)
706 maTextListeners
.addInterface( l
);
709 void VCLXFileControl::removeTextListener( const ::com::sun::star::uno::Reference
< ::com::sun::star::awt::XTextListener
> & l
) throw(::com::sun::star::uno::RuntimeException
)
711 maTextListeners
.removeInterface( l
);
714 void VCLXFileControl::setText( const ::rtl::OUString
& aText
) throw(::com::sun::star::uno::RuntimeException
)
716 ::vos::OGuard
aGuard( GetMutex() );
718 Window
* pWindow
= GetWindow();
721 pWindow
->SetText( aText
);
723 // In JAVA wird auch ein textChanged ausgeloest, in VCL nicht.
724 // ::com::sun::star::awt::Toolkit soll JAVA-komform sein...
729 void VCLXFileControl::insertText( const ::com::sun::star::awt::Selection
& rSel
, const ::rtl::OUString
& aText
) throw(::com::sun::star::uno::RuntimeException
)
731 ::vos::OGuard
aGuard( GetMutex() );
733 FileControl
* pFileControl
= (FileControl
*) GetWindow();
736 pFileControl
->GetEdit().SetSelection( Selection( rSel
.Min
, rSel
.Max
) );
737 pFileControl
->GetEdit().ReplaceSelected( aText
);
741 ::rtl::OUString
VCLXFileControl::getText() throw(::com::sun::star::uno::RuntimeException
)
743 ::vos::OGuard
aGuard( GetMutex() );
745 ::rtl::OUString aText
;
746 Window
* pWindow
= GetWindow();
748 aText
= pWindow
->GetText();
752 ::rtl::OUString
VCLXFileControl::getSelectedText() throw(::com::sun::star::uno::RuntimeException
)
754 ::vos::OGuard
aGuard( GetMutex() );
756 ::rtl::OUString aText
;
757 FileControl
* pFileControl
= (FileControl
*) GetWindow();
759 aText
= pFileControl
->GetEdit().GetSelected();
764 void VCLXFileControl::setSelection( const ::com::sun::star::awt::Selection
& aSelection
) throw(::com::sun::star::uno::RuntimeException
)
766 ::vos::OGuard
aGuard( GetMutex() );
768 FileControl
* pFileControl
= (FileControl
*) GetWindow();
770 pFileControl
->GetEdit().SetSelection( Selection( aSelection
.Min
, aSelection
.Max
) );
773 ::com::sun::star::awt::Selection
VCLXFileControl::getSelection() throw(::com::sun::star::uno::RuntimeException
)
775 ::vos::OGuard
aGuard( GetMutex() );
777 ::com::sun::star::awt::Selection aSel
;
778 FileControl
* pFileControl
= (FileControl
*) GetWindow();
781 aSel
.Min
= pFileControl
->GetEdit().GetSelection().Min();
782 aSel
.Max
= pFileControl
->GetEdit().GetSelection().Max();
787 sal_Bool
VCLXFileControl::isEditable() throw(::com::sun::star::uno::RuntimeException
)
789 ::vos::OGuard
aGuard( GetMutex() );
791 FileControl
* pFileControl
= (FileControl
*) GetWindow();
792 return ( pFileControl
&& !pFileControl
->GetEdit().IsReadOnly() && pFileControl
->GetEdit().IsEnabled() ) ? sal_True
: sal_False
;
795 void VCLXFileControl::setEditable( sal_Bool bEditable
) throw(::com::sun::star::uno::RuntimeException
)
797 ::vos::OGuard
aGuard( GetMutex() );
799 FileControl
* pFileControl
= (FileControl
*) GetWindow();
801 pFileControl
->GetEdit().SetReadOnly( !bEditable
);
804 void VCLXFileControl::setMaxTextLen( sal_Int16 nLen
) throw(::com::sun::star::uno::RuntimeException
)
806 ::vos::OGuard
aGuard( GetMutex() );
808 FileControl
* pFileControl
= (FileControl
*) GetWindow();
810 pFileControl
->GetEdit().SetMaxTextLen( nLen
);
813 sal_Int16
VCLXFileControl::getMaxTextLen() throw(::com::sun::star::uno::RuntimeException
)
815 ::vos::OGuard
aGuard( GetMutex() );
817 FileControl
* pFileControl
= (FileControl
*) GetWindow();
818 return pFileControl
? pFileControl
->GetEdit().GetMaxTextLen() : 0;
822 IMPL_LINK( VCLXFileControl
, ModifyHdl
, Edit
*, EMPTYARG
)
824 ::com::sun::star::awt::TextEvent aEvent
;
825 aEvent
.Source
= (::cppu::OWeakObject
*)this;
826 maTextListeners
.textChanged( aEvent
);
831 ::com::sun::star::awt::Size
VCLXFileControl::getMinimumSize() throw(::com::sun::star::uno::RuntimeException
)
833 ::vos::OGuard
aGuard( GetMutex() );
835 ::com::sun::star::awt::Size aSz
;
836 FileControl
* pControl
= (FileControl
*) GetWindow();
839 Size aTmpSize
= pControl
->GetEdit().CalcMinimumSize();
840 aTmpSize
.Width() += pControl
->GetButton().CalcMinimumSize().Width();
841 aSz
= AWTSize(pControl
->CalcWindowSize( aTmpSize
));
846 ::com::sun::star::awt::Size
VCLXFileControl::getPreferredSize() throw(::com::sun::star::uno::RuntimeException
)
848 ::com::sun::star::awt::Size aSz
= getMinimumSize();
853 ::com::sun::star::awt::Size
VCLXFileControl::calcAdjustedSize( const ::com::sun::star::awt::Size
& rNewSize
) throw(::com::sun::star::uno::RuntimeException
)
855 ::vos::OGuard
aGuard( GetMutex() );
857 ::com::sun::star::awt::Size aSz
=rNewSize
;
858 FileControl
* pControl
= (FileControl
*) GetWindow();
861 ::com::sun::star::awt::Size aMinSz
= getMinimumSize();
862 if ( aSz
.Height
!= aMinSz
.Height
)
863 aSz
.Height
= aMinSz
.Height
;
868 ::com::sun::star::awt::Size
VCLXFileControl::getMinimumSize( sal_Int16 nCols
, sal_Int16
) throw(::com::sun::star::uno::RuntimeException
)
870 ::vos::OGuard
aGuard( GetMutex() );
872 ::com::sun::star::awt::Size aSz
;
873 FileControl
* pControl
= (FileControl
*) GetWindow();
876 aSz
= AWTSize(pControl
->GetEdit().CalcSize( nCols
));
877 aSz
.Width
+= pControl
->GetButton().CalcMinimumSize().Width();
882 void VCLXFileControl::getColumnsAndLines( sal_Int16
& nCols
, sal_Int16
& nLines
) throw(::com::sun::star::uno::RuntimeException
)
884 ::vos::OGuard
aGuard( GetMutex() );
888 FileControl
* pControl
= (FileControl
*) GetWindow();
890 nCols
= (sal_Int16
) pControl
->GetEdit().GetMaxVisChars();
893 void VCLXFileControl::ImplGetPropertyIds( std::list
< sal_uInt16
> &rIds
)
895 PushPropertyIds( rIds
,
896 // FIXME: elide duplication ?
897 BASEPROPERTY_HIDEINACTIVESELECTION
,
899 VCLXWindow::ImplGetPropertyIds( rIds
, true );
903 // ----------------------------------------------------
904 // class SVTXFormattedField
905 // ----------------------------------------------------
906 // --------------------------------------------------------------------------------------
907 SVTXFormattedField::SVTXFormattedField()
908 :m_pCurrentSupplier(NULL
)
909 ,bIsStandardSupplier(sal_True
)
910 ,nKeyToSetDelayed(-1)
914 // --------------------------------------------------------------------------------------
915 SVTXFormattedField::~SVTXFormattedField()
917 if (m_pCurrentSupplier
)
919 m_pCurrentSupplier
->release();
920 m_pCurrentSupplier
= NULL
;
924 // --------------------------------------------------------------------------------------
925 void SVTXFormattedField::SetWindow( Window
* _pWindow
)
927 VCLXSpinField::SetWindow(_pWindow
);
928 if (GetFormattedField())
929 GetFormattedField()->SetAutoColor(TRUE
);
932 // --------------------------------------------------------------------------------------
933 void SVTXFormattedField::setProperty( const ::rtl::OUString
& PropertyName
, const ::com::sun::star::uno::Any
& Value
) throw(::com::sun::star::uno::RuntimeException
)
935 ::vos::OGuard
aGuard( GetMutex() );
937 FormattedField
* pField
= GetFormattedField();
940 sal_uInt16 nPropType
= GetPropertyId( PropertyName
);
943 case BASEPROPERTY_ENFORCE_FORMAT
:
945 sal_Bool
bEnable( sal_True
);
946 if ( Value
>>= bEnable
)
947 pField
->EnableNotANumber( !bEnable
);
951 case BASEPROPERTY_EFFECTIVE_MIN
:
952 case BASEPROPERTY_VALUEMIN_DOUBLE
:
956 case BASEPROPERTY_EFFECTIVE_MAX
:
957 case BASEPROPERTY_VALUEMAX_DOUBLE
:
961 case BASEPROPERTY_EFFECTIVE_DEFAULT
:
962 SetDefaultValue(Value
);
965 case BASEPROPERTY_TREATASNUMBER
:
967 sal_Bool b
= sal_Bool();
973 case BASEPROPERTY_FORMATSSUPPLIER
:
974 if (!Value
.hasValue())
975 setFormatsSupplier(::com::sun::star::uno::Reference
< ::com::sun::star::util::XNumberFormatsSupplier
> (NULL
));
978 ::com::sun::star::uno::Reference
< ::com::sun::star::util::XNumberFormatsSupplier
> xNFS
;
979 if ( Value
>>= xNFS
)
980 setFormatsSupplier(xNFS
);
983 case BASEPROPERTY_FORMATKEY
:
984 if (!Value
.hasValue())
994 case BASEPROPERTY_EFFECTIVE_VALUE
:
995 case BASEPROPERTY_VALUE_DOUBLE
:
997 const ::com::sun::star::uno::TypeClass rTC
= Value
.getValueType().getTypeClass();
998 if (rTC
!= ::com::sun::star::uno::TypeClass_STRING
)
1000 if (rTC
!= ::com::sun::star::uno::TypeClass_DOUBLE
)
1002 if (Value
.hasValue())
1004 // try if it is something converitble
1005 sal_Int32 nValue
= 0;
1006 if (!(Value
>>= nValue
))
1007 throw ::com::sun::star::lang::IllegalArgumentException();
1008 SetValue(::com::sun::star::uno::makeAny((double)nValue
));
1015 case BASEPROPERTY_VALUESTEP_DOUBLE
:
1019 pField
->SetSpinSize( d
);
1024 pField
->SetSpinSize( n
);
1028 case BASEPROPERTY_DECIMALACCURACY
:
1032 pField
->SetDecimalDigits( (sal_uInt16
)n
);
1035 case BASEPROPERTY_NUMSHOWTHOUSANDSEP
:
1037 sal_Bool b
= sal_Bool();
1039 pField
->SetThousandsSep( b
);
1044 VCLXSpinField::setProperty( PropertyName
, Value
);
1047 if (BASEPROPERTY_TEXTCOLOR
== nPropType
)
1048 { // after setting a new text color, think again about the AutoColor flag of the control
1049 // 17.05.2001 - 86859 - frank.schoenheit@germany.sun.com
1050 pField
->SetAutoColor(!Value
.hasValue());
1054 VCLXSpinField::setProperty( PropertyName
, Value
);
1057 // --------------------------------------------------------------------------------------
1058 ::com::sun::star::uno::Any
SVTXFormattedField::getProperty( const ::rtl::OUString
& PropertyName
) throw(::com::sun::star::uno::RuntimeException
)
1060 ::vos::OGuard
aGuard( GetMutex() );
1062 ::com::sun::star::uno::Any aReturn
;
1064 FormattedField
* pField
= GetFormattedField();
1067 sal_uInt16 nPropType
= GetPropertyId( PropertyName
);
1070 case BASEPROPERTY_EFFECTIVE_MIN
:
1071 case BASEPROPERTY_VALUEMIN_DOUBLE
:
1072 aReturn
<<= GetMinValue();
1075 case BASEPROPERTY_EFFECTIVE_MAX
:
1076 case BASEPROPERTY_VALUEMAX_DOUBLE
:
1077 aReturn
<<= GetMaxValue();
1080 case BASEPROPERTY_EFFECTIVE_DEFAULT
:
1081 aReturn
<<= GetDefaultValue();
1084 case BASEPROPERTY_TREATASNUMBER
:
1085 aReturn
<<= GetTreatAsNumber();
1088 case BASEPROPERTY_EFFECTIVE_VALUE
:
1089 case BASEPROPERTY_VALUE_DOUBLE
:
1090 aReturn
<<= GetValue();
1093 case BASEPROPERTY_VALUESTEP_DOUBLE
:
1094 aReturn
<<= pField
->GetSpinSize();
1097 case BASEPROPERTY_DECIMALACCURACY
:
1098 aReturn
<<= pField
->GetDecimalDigits();
1101 case BASEPROPERTY_FORMATSSUPPLIER
:
1103 if (!bIsStandardSupplier
)
1105 ::com::sun::star::uno::Reference
< ::com::sun::star::util::XNumberFormatsSupplier
> xSupplier
= getFormatsSupplier();
1106 aReturn
<<= xSupplier
;
1111 case BASEPROPERTY_FORMATKEY
:
1113 if (!bIsStandardSupplier
)
1114 aReturn
<<= getFormatKey();
1119 aReturn
<<= VCLXSpinField::getProperty(PropertyName
);
1125 // --------------------------------------------------------------------------------------
1126 ::com::sun::star::uno::Any
SVTXFormattedField::convertEffectiveValue(const ::com::sun::star::uno::Any
& rValue
)
1128 ::com::sun::star::uno::Any aReturn
;
1130 FormattedField
* pField
= GetFormattedField();
1134 switch (rValue
.getValueType().getTypeClass())
1136 case ::com::sun::star::uno::TypeClass_DOUBLE
:
1137 if (pField
->TreatingAsNumber())
1145 SvNumberFormatter
* pFormatter
= pField
->GetFormatter();
1147 pFormatter
= pField
->StandardFormatter();
1148 // should never fail
1154 pFormatter
->GetOutputString(d
, 0, sConverted
, &pDum
);
1155 aReturn
<<= ::rtl::OUString( sConverted
);
1158 case ::com::sun::star::uno::TypeClass_STRING
:
1160 ::rtl::OUString aStr
;
1162 String sValue
= aStr
;
1163 if (pField
->TreatingAsNumber())
1165 SvNumberFormatter
* pFormatter
= pField
->GetFormatter();
1167 pFormatter
= pField
->StandardFormatter();
1170 sal_uInt32
nTestFormat(0);
1171 if (!pFormatter
->IsNumberFormat(sValue
, nTestFormat
, dVal
))
1186 // --------------------------------------------------------------------------------------
1187 void SVTXFormattedField::SetMinValue(const ::com::sun::star::uno::Any
& rValue
)
1189 FormattedField
* pField
= GetFormattedField();
1193 switch (rValue
.getValueType().getTypeClass())
1196 case ::com::sun::star::uno::TypeClass_DOUBLE
:
1200 pField
->SetMinValue(d
);
1204 DBG_ASSERT(rValue
.getValueType().getTypeClass() == ::com::sun::star::uno::TypeClass_VOID
, "SVTXFormattedField::SetMinValue : invalid argument (an exception will be thrown) !");
1205 if ( rValue
.getValueType().getTypeClass() != ::com::sun::star::uno::TypeClass_VOID
)
1208 throw ::com::sun::star::lang::IllegalArgumentException();
1210 pField
->ClearMinValue();
1215 // --------------------------------------------------------------------------------------
1216 ::com::sun::star::uno::Any
SVTXFormattedField::GetMinValue()
1218 FormattedField
* pField
= GetFormattedField();
1219 if (!pField
|| !pField
->HasMinValue())
1220 return ::com::sun::star::uno::Any();
1222 ::com::sun::star::uno::Any aReturn
;
1223 aReturn
<<= pField
->GetMinValue();
1227 // --------------------------------------------------------------------------------------
1228 void SVTXFormattedField::SetMaxValue(const ::com::sun::star::uno::Any
& rValue
)
1230 FormattedField
* pField
= GetFormattedField();
1234 switch (rValue
.getValueType().getTypeClass())
1237 case ::com::sun::star::uno::TypeClass_DOUBLE
:
1241 pField
->SetMaxValue(d
);
1245 if (rValue
.getValueType().getTypeClass() != ::com::sun::star::uno::TypeClass_VOID
)
1248 throw ::com::sun::star::lang::IllegalArgumentException();
1250 pField
->ClearMaxValue();
1255 // --------------------------------------------------------------------------------------
1256 ::com::sun::star::uno::Any
SVTXFormattedField::GetMaxValue()
1258 FormattedField
* pField
= GetFormattedField();
1259 if (!pField
|| !pField
->HasMaxValue())
1260 return ::com::sun::star::uno::Any();
1262 ::com::sun::star::uno::Any aReturn
;
1263 aReturn
<<= pField
->GetMaxValue();
1267 // --------------------------------------------------------------------------------------
1268 void SVTXFormattedField::SetDefaultValue(const ::com::sun::star::uno::Any
& rValue
)
1270 FormattedField
* pField
= GetFormattedField();
1274 ::com::sun::star::uno::Any aConverted
= convertEffectiveValue(rValue
);
1276 switch (aConverted
.getValueType().getTypeClass())
1279 case ::com::sun::star::uno::TypeClass_DOUBLE
:
1283 pField
->SetDefaultValue(d
);
1286 case ::com::sun::star::uno::TypeClass_STRING
:
1288 ::rtl::OUString aStr
;
1289 aConverted
>>= aStr
;
1290 pField
->SetDefaultText( aStr
);
1294 pField
->EnableEmptyField(sal_True
);
1295 // nur noch void erlaubt
1300 // --------------------------------------------------------------------------------------
1301 ::com::sun::star::uno::Any
SVTXFormattedField::GetDefaultValue()
1303 FormattedField
* pField
= GetFormattedField();
1304 if (!pField
|| pField
->IsEmptyFieldEnabled())
1305 return ::com::sun::star::uno::Any();
1307 ::com::sun::star::uno::Any aReturn
;
1308 if (pField
->TreatingAsNumber())
1309 aReturn
<<= pField
->GetDefaultValue();
1311 aReturn
<<= ::rtl::OUString( pField
->GetDefaultText() );
1315 // --------------------------------------------------------------------------------------
1316 sal_Bool
SVTXFormattedField::GetTreatAsNumber()
1318 FormattedField
* pField
= GetFormattedField();
1320 return pField
->TreatingAsNumber();
1325 // --------------------------------------------------------------------------------------
1326 void SVTXFormattedField::SetTreatAsNumber(sal_Bool bSet
)
1328 FormattedField
* pField
= GetFormattedField();
1330 pField
->TreatAsNumber(bSet
);
1333 // --------------------------------------------------------------------------------------
1334 ::com::sun::star::uno::Any
SVTXFormattedField::GetValue()
1336 FormattedField
* pField
= GetFormattedField();
1338 return ::com::sun::star::uno::Any();
1340 ::com::sun::star::uno::Any aReturn
;
1341 if (!pField
->TreatingAsNumber())
1343 ::rtl::OUString sText
= pField
->GetTextValue();
1348 if (pField
->GetText().Len()) // empty wird erst mal standardmaessig als void nach draussen gereicht
1349 aReturn
<<= pField
->GetValue();
1355 // --------------------------------------------------------------------------------------
1356 void SVTXFormattedField::SetValue(const ::com::sun::star::uno::Any
& rValue
)
1358 FormattedField
* pField
= GetFormattedField();
1362 if (!rValue
.hasValue())
1364 pField
->SetText(String());
1368 if (rValue
.getValueType().getTypeClass() == ::com::sun::star::uno::TypeClass_DOUBLE
)
1372 pField
->SetValue(d
);
1376 DBG_ASSERT(rValue
.getValueType().getTypeClass() == ::com::sun::star::uno::TypeClass_STRING
, "SVTXFormattedField::SetValue : invalid argument !");
1378 ::rtl::OUString sText
;
1380 String
aStr( sText
);
1381 if (!pField
->TreatingAsNumber())
1382 pField
->SetTextFormatted(aStr
);
1384 pField
->SetTextValue(aStr
);
1387 // NotifyTextListeners();
1390 // --------------------------------------------------------------------------------------
1391 ::com::sun::star::uno::Reference
< ::com::sun::star::util::XNumberFormatsSupplier
> SVTXFormattedField::getFormatsSupplier(void) const
1393 return ::com::sun::star::uno::Reference
< ::com::sun::star::util::XNumberFormatsSupplier
> ((::com::sun::star::util::XNumberFormatsSupplier
*)m_pCurrentSupplier
);
1396 // --------------------------------------------------------------------------------------
1397 void SVTXFormattedField::setFormatsSupplier(const ::com::sun::star::uno::Reference
< ::com::sun::star::util::XNumberFormatsSupplier
> & xSupplier
)
1399 FormattedField
* pField
= GetFormattedField();
1401 SvNumberFormatsSupplierObj
* pNew
= NULL
;
1402 if (!xSupplier
.is())
1406 pNew
= new SvNumberFormatsSupplierObj(pField
->StandardFormatter());
1407 bIsStandardSupplier
= sal_True
;
1412 pNew
= SvNumberFormatsSupplierObj::getImplementation(xSupplier
);
1413 bIsStandardSupplier
= sal_False
;
1417 return; // TODO : wie das behandeln ?
1419 if (m_pCurrentSupplier
)
1420 m_pCurrentSupplier
->release();
1421 m_pCurrentSupplier
= pNew
;
1422 m_pCurrentSupplier
->acquire();
1425 // den aktuellen Value mit hinueberretten
1426 ::com::sun::star::uno::Any aCurrent
= GetValue();
1427 pField
->SetFormatter(m_pCurrentSupplier
->GetNumberFormatter(), sal_False
);
1428 if (nKeyToSetDelayed
!= -1)
1430 pField
->SetFormatKey(nKeyToSetDelayed
);
1431 nKeyToSetDelayed
= -1;
1434 NotifyTextListeners();
1438 // --------------------------------------------------------------------------------------
1439 sal_Int32
SVTXFormattedField::getFormatKey(void) const
1441 FormattedField
* pField
= GetFormattedField();
1442 return pField
? pField
->GetFormatKey() : 0;
1445 // --------------------------------------------------------------------------------------
1446 void SVTXFormattedField::setFormatKey(sal_Int32 nKey
)
1448 FormattedField
* pField
= GetFormattedField();
1451 if (pField
->GetFormatter())
1452 pField
->SetFormatKey(nKey
);
1454 { // Wahrscheinlich bin ich gerade in einem Block, in dem erst der Key und dann der Formatter gesetzt
1455 // wird, das passiert initial mit ziemlicher Sicherheit, da die Properties in alphabetischer Reihenfolge
1456 // gesetzt werden, und der FormatsSupplier nun mal vor dem FormatKey kommt
1457 nKeyToSetDelayed
= nKey
;
1459 NotifyTextListeners();
1463 // --------------------------------------------------------------------------------------
1464 void SVTXFormattedField::NotifyTextListeners()
1466 if ( GetTextListeners().getLength() )
1468 ::com::sun::star::awt::TextEvent aEvent
;
1469 aEvent
.Source
= (::cppu::OWeakObject
*)this;
1470 GetTextListeners().textChanged( aEvent
);
1474 void SVTXFormattedField::ImplGetPropertyIds( std::list
< sal_uInt16
> &rIds
)
1476 PushPropertyIds( rIds
,
1477 // FIXME: elide duplication ?
1478 BASEPROPERTY_EFFECTIVE_MIN
,
1479 BASEPROPERTY_VALUEMIN_DOUBLE
,
1480 BASEPROPERTY_EFFECTIVE_MAX
,
1481 BASEPROPERTY_VALUEMAX_DOUBLE
,
1482 BASEPROPERTY_EFFECTIVE_DEFAULT
,
1483 BASEPROPERTY_TREATASNUMBER
,
1484 BASEPROPERTY_EFFECTIVE_VALUE
,
1485 BASEPROPERTY_VALUE_DOUBLE
,
1486 BASEPROPERTY_VALUESTEP_DOUBLE
,
1487 BASEPROPERTY_DECIMALACCURACY
,
1488 BASEPROPERTY_FORMATSSUPPLIER
,
1489 BASEPROPERTY_NUMSHOWTHOUSANDSEP
,
1490 BASEPROPERTY_FORMATKEY
,
1491 BASEPROPERTY_TREATASNUMBER
,
1492 BASEPROPERTY_ENFORCE_FORMAT
,
1494 VCLXWindow::ImplGetPropertyIds( rIds
, true );
1495 VCLXSpinField::ImplGetPropertyIds( rIds
);
1499 // ----------------------------------------------------
1500 // class SVTXRoadmap
1501 // ----------------------------------------------------
1503 using namespace svt
;
1505 // --------------------------------------------------------------------------------------
1506 SVTXRoadmap::SVTXRoadmap() : maItemListeners( *this )
1510 // --------------------------------------------------------------------------------------
1511 SVTXRoadmap::~SVTXRoadmap()
1515 void SVTXRoadmap::ProcessWindowEvent( const VclWindowEvent
& rVclWindowEvent
)
1517 switch ( rVclWindowEvent
.GetId() )
1519 case VCLEVENT_ROADMAP_ITEMSELECTED
:
1521 ::vos::OGuard
aGuard( GetMutex() );
1522 ::svt::ORoadmap
* pField
= GetRoadmap();
1525 sal_Int16 CurItemID
= pField
->GetCurrentRoadmapItemID();
1526 ::com::sun::star::awt::ItemEvent aEvent
;
1527 aEvent
.Selected
= CurItemID
;
1528 aEvent
.Highlighted
= CurItemID
;
1529 aEvent
.ItemId
= CurItemID
;
1530 maItemListeners
.itemStateChanged( aEvent
);
1535 SVTXRoadmap_Base::ProcessWindowEvent( rVclWindowEvent
);
1541 void SVTXRoadmap::propertyChange( const ::com::sun::star::beans::PropertyChangeEvent
& evt
) throw (::com::sun::star::uno::RuntimeException
)
1543 ::vos::OGuard
aGuard( GetMutex() );
1544 ::svt::ORoadmap
* pField
= GetRoadmap();
1547 ::com::sun::star::uno::Reference
< ::com::sun::star::uno::XInterface
> xRoadmapItem
;
1548 xRoadmapItem
= evt
.Source
;
1550 ::com::sun::star::uno::Reference
< ::com::sun::star::beans::XPropertySet
> xPropertySet( xRoadmapItem
, ::com::sun::star::uno::UNO_QUERY
);
1551 ::com::sun::star::uno::Any aValue
= xPropertySet
->getPropertyValue(::rtl::OUString::createFromAscii( "ID" ));
1554 ::com::sun::star::uno::Any rVal
= evt
.NewValue
;
1555 evt
.NewValue
>>= rVal
;
1556 ::rtl::OUString sPropertyName
= evt
.PropertyName
;
1557 if ( sPropertyName
.equals(::rtl::OUString::createFromAscii( "Enabled" ) ) )
1559 sal_Bool bEnable
= false;
1560 evt
.NewValue
>>= bEnable
;
1561 pField
->EnableRoadmapItem( (RoadmapTypes::ItemId
)nID
, bEnable
);
1563 else if ( sPropertyName
.equals(::rtl::OUString::createFromAscii( "Label" ) ) )
1565 ::rtl::OUString sLabel
;
1566 evt
.NewValue
>>= sLabel
;
1567 pField
->ChangeRoadmapItemLabel( (RoadmapTypes::ItemId
)nID
, sLabel
);
1569 else if ( sPropertyName
.equals(::rtl::OUString::createFromAscii( "ID" ) ) )
1571 sal_Int32 nNewID
= 0;
1572 evt
.NewValue
>>= nNewID
;
1573 evt
.OldValue
>>= nID
;
1574 pField
->ChangeRoadmapItemID( (RoadmapTypes::ItemId
)nID
, (RoadmapTypes::ItemId
)nNewID
);
1577 // Todo: handle Interactive appropriately
1582 void SVTXRoadmap::addItemListener( const ::com::sun::star::uno::Reference
< ::com::sun::star::awt::XItemListener
>& l
) throw (::com::sun::star::uno::RuntimeException
)
1584 maItemListeners
.addInterface( l
);
1587 void SVTXRoadmap::removeItemListener( const ::com::sun::star::uno::Reference
< ::com::sun::star::awt::XItemListener
>& l
) throw (::com::sun::star::uno::RuntimeException
)
1589 maItemListeners
.removeInterface( l
);
1592 RMItemData
SVTXRoadmap::GetRMItemData( const ::com::sun::star::container::ContainerEvent
& _rEvent
)
1594 RMItemData aCurRMItemData
;
1595 ::com::sun::star::uno::Reference
< ::com::sun::star::uno::XInterface
> xRoadmapItem
;
1596 _rEvent
.Element
>>= xRoadmapItem
;
1597 ::com::sun::star::uno::Reference
< ::com::sun::star::beans::XPropertySet
> xPropertySet( xRoadmapItem
, ::com::sun::star::uno::UNO_QUERY
);
1598 if ( xPropertySet
.is() )
1600 ::com::sun::star::uno::Any aValue
= xPropertySet
->getPropertyValue(::rtl::OUString::createFromAscii( "Label" ));
1601 aValue
>>= aCurRMItemData
.Label
;
1602 aValue
= xPropertySet
->getPropertyValue(::rtl::OUString::createFromAscii( "ID" ));
1603 aValue
>>= aCurRMItemData
.n_ID
;
1604 aValue
= xPropertySet
->getPropertyValue(::rtl::OUString::createFromAscii( "Enabled" ));
1605 aValue
>>= aCurRMItemData
.b_Enabled
;
1607 return aCurRMItemData
;;
1610 void SVTXRoadmap::elementInserted( const ::com::sun::star::container::ContainerEvent
& _rEvent
)throw(::com::sun::star::uno::RuntimeException
)
1612 ::vos::OGuard
aGuard( GetMutex() );
1613 ::svt::ORoadmap
* pField
= GetRoadmap();
1616 RMItemData CurItemData
= GetRMItemData( _rEvent
);
1617 sal_Int32 InsertIndex
= 0;
1618 _rEvent
.Accessor
>>= InsertIndex
;
1619 pField
->InsertRoadmapItem( InsertIndex
, CurItemData
.Label
, (RoadmapTypes::ItemId
)CurItemData
.n_ID
, CurItemData
.b_Enabled
);
1623 void SVTXRoadmap::elementRemoved( const ::com::sun::star::container::ContainerEvent
& _rEvent
)throw(::com::sun::star::uno::RuntimeException
)
1625 ::vos::OGuard
aGuard( GetMutex() );
1626 ::svt::ORoadmap
* pField
= GetRoadmap();
1629 sal_Int32 DelIndex
= 0;
1630 _rEvent
.Accessor
>>= DelIndex
;
1631 pField
->DeleteRoadmapItem(DelIndex
);
1632 // pField->GetCurrentRoadmapItem()
1633 // setProperty(::rtl::OUString.createFromAscii( "CurrentItem" )aAny,
1637 void SVTXRoadmap::elementReplaced( const ::com::sun::star::container::ContainerEvent
& _rEvent
)throw(::com::sun::star::uno::RuntimeException
)
1639 ::vos::OGuard
aGuard( GetMutex() );
1640 ::svt::ORoadmap
* pField
= GetRoadmap();
1643 RMItemData CurItemData
= GetRMItemData( _rEvent
);
1644 sal_Int32 ReplaceIndex
= 0;
1645 _rEvent
.Accessor
>>= ReplaceIndex
;
1646 pField
->ReplaceRoadmapItem( ReplaceIndex
, CurItemData
.Label
, (RoadmapTypes::ItemId
)CurItemData
.n_ID
, CurItemData
.b_Enabled
);
1652 // --------------------------------------------------------------------------------------
1653 void SVTXRoadmap::setProperty( const ::rtl::OUString
& PropertyName
, const ::com::sun::star::uno::Any
& Value
) throw(::com::sun::star::uno::RuntimeException
)
1655 ::vos::OGuard
aGuard( GetMutex() );
1657 ::svt::ORoadmap
* pField
= GetRoadmap();
1660 sal_uInt16 nPropType
= GetPropertyId( PropertyName
);
1663 case BASEPROPERTY_COMPLETE
:
1667 pField
->SetRoadmapComplete( b
);
1671 case BASEPROPERTY_ACTIVATED
:
1675 pField
->SetRoadmapInteractive( b
);
1679 case BASEPROPERTY_CURRENTITEMID
:
1683 pField
->SelectRoadmapItemByID( (RoadmapTypes::ItemId
)nId
);
1687 case BASEPROPERTY_TEXT
:
1689 ::rtl::OUString aStr
;
1691 pField
->SetText( aStr
);
1692 pField
->Invalidate();
1697 SVTXRoadmap_Base::setProperty( PropertyName
, Value
);
1703 SVTXRoadmap_Base::setProperty( PropertyName
, Value
);
1707 // --------------------------------------------------------------------------------------
1708 ::com::sun::star::uno::Any
SVTXRoadmap::getProperty( const ::rtl::OUString
& PropertyName
) throw(::com::sun::star::uno::RuntimeException
)
1710 ::vos::OGuard
aGuard( GetMutex() );
1712 ::com::sun::star::uno::Any aReturn
;
1714 ::svt::ORoadmap
* pField
= GetRoadmap();
1717 sal_uInt16 nPropType
= GetPropertyId( PropertyName
);
1720 case BASEPROPERTY_COMPLETE
:
1721 aReturn
<<= pField
->IsRoadmapComplete();
1723 case BASEPROPERTY_ACTIVATED
:
1724 aReturn
<<= pField
->IsRoadmapInteractive();
1726 case BASEPROPERTY_CURRENTITEMID
:
1727 aReturn
<<= pField
->GetCurrentRoadmapItemID();
1730 aReturn
= SVTXRoadmap_Base::getProperty(PropertyName
);
1737 void SVTXRoadmap::ImplSetNewImage()
1739 OSL_PRECOND( GetWindow(), "SVTXRoadmap::ImplSetNewImage: window is required to be not-NULL!" );
1740 ::svt::ORoadmap
* pButton
= static_cast< ::svt::ORoadmap
* >( GetWindow() );
1741 pButton
->SetRoadmapBitmap( GetBitmap() );
1744 void SVTXRoadmap::ImplGetPropertyIds( std::list
< sal_uInt16
> &rIds
)
1746 PushPropertyIds( rIds
,
1747 BASEPROPERTY_COMPLETE
,
1748 BASEPROPERTY_ACTIVATED
,
1749 BASEPROPERTY_CURRENTITEMID
,
1752 VCLXWindow::ImplGetPropertyIds( rIds
, true );
1753 VCLXImageConsumer::ImplGetPropertyIds( rIds
);
1756 // ----------------------------------------------------
1757 // class SVTXNumericField
1758 // ----------------------------------------------------
1759 SVTXNumericField::SVTXNumericField()
1763 SVTXNumericField::~SVTXNumericField()
1767 ::com::sun::star::uno::Any
SVTXNumericField::queryInterface( const ::com::sun::star::uno::Type
& rType
) throw(::com::sun::star::uno::RuntimeException
)
1769 ::com::sun::star::uno::Any aRet
= ::cppu::queryInterface( rType
,
1770 SAL_STATIC_CAST( ::com::sun::star::awt::XNumericField
*, this ),
1771 SAL_STATIC_CAST( ::com::sun::star::lang::XTypeProvider
*, this ) );
1772 return (aRet
.hasValue() ? aRet
: SVTXFormattedField::queryInterface( rType
));
1775 // ::com::sun::star::lang::XTypeProvider
1776 IMPL_XTYPEPROVIDER_START( SVTXNumericField
)
1777 getCppuType( ( ::com::sun::star::uno::Reference
< ::com::sun::star::awt::XNumericField
>* ) NULL
),
1778 SVTXFormattedField::getTypes()
1779 IMPL_XTYPEPROVIDER_END
1782 void SVTXNumericField::setValue( double Value
) throw(::com::sun::star::uno::RuntimeException
)
1784 ::vos::OGuard
aGuard( GetMutex() );
1786 FormattedField
* pField
= GetFormattedField();
1788 pField
->SetValue( Value
);
1791 double SVTXNumericField::getValue() throw(::com::sun::star::uno::RuntimeException
)
1793 ::vos::OGuard
aGuard( GetMutex() );
1795 FormattedField
* pField
= GetFormattedField();
1796 return pField
? pField
->GetValue() : 0;
1799 void SVTXNumericField::setMin( double Value
) throw(::com::sun::star::uno::RuntimeException
)
1801 ::vos::OGuard
aGuard( GetMutex() );
1803 FormattedField
* pField
= GetFormattedField();
1805 pField
->SetMinValue( Value
);
1808 double SVTXNumericField::getMin() throw(::com::sun::star::uno::RuntimeException
)
1810 ::vos::OGuard
aGuard( GetMutex() );
1812 FormattedField
* pField
= GetFormattedField();
1813 return pField
? pField
->GetMinValue() : 0;
1816 void SVTXNumericField::setMax( double Value
) throw(::com::sun::star::uno::RuntimeException
)
1818 ::vos::OGuard
aGuard( GetMutex() );
1820 FormattedField
* pField
= GetFormattedField();
1822 pField
->SetMaxValue( Value
);
1825 double SVTXNumericField::getMax() throw(::com::sun::star::uno::RuntimeException
)
1827 ::vos::OGuard
aGuard( GetMutex() );
1829 FormattedField
* pField
= GetFormattedField();
1830 return pField
? pField
->GetMaxValue() : 0;
1833 void SVTXNumericField::setFirst( double Value
) throw(::com::sun::star::uno::RuntimeException
)
1835 ::vos::OGuard
aGuard( GetMutex() );
1837 FormattedField
* pField
= GetFormattedField();
1839 pField
->SetSpinFirst( Value
);
1842 double SVTXNumericField::getFirst() throw(::com::sun::star::uno::RuntimeException
)
1844 ::vos::OGuard
aGuard( GetMutex() );
1846 FormattedField
* pField
= GetFormattedField();
1847 return pField
? pField
->GetSpinFirst() : 0;
1850 void SVTXNumericField::setLast( double Value
) throw(::com::sun::star::uno::RuntimeException
)
1852 ::vos::OGuard
aGuard( GetMutex() );
1854 FormattedField
* pField
= GetFormattedField();
1856 pField
->SetSpinLast( Value
);
1859 double SVTXNumericField::getLast() throw(::com::sun::star::uno::RuntimeException
)
1861 ::vos::OGuard
aGuard( GetMutex() );
1863 FormattedField
* pField
= GetFormattedField();
1864 return pField
? pField
->GetSpinLast() : 0;
1867 void SVTXNumericField::setSpinSize( double Value
) throw(::com::sun::star::uno::RuntimeException
)
1869 ::vos::OGuard
aGuard( GetMutex() );
1871 FormattedField
* pField
= GetFormattedField();
1873 pField
->SetSpinSize( Value
);
1876 double SVTXNumericField::getSpinSize() throw(::com::sun::star::uno::RuntimeException
)
1878 ::vos::OGuard
aGuard( GetMutex() );
1880 FormattedField
* pField
= GetFormattedField();
1881 return pField
? pField
->GetSpinSize() : 0;
1884 void SVTXNumericField::setDecimalDigits( sal_Int16 Value
) throw(::com::sun::star::uno::RuntimeException
)
1886 ::vos::OGuard
aGuard( GetMutex() );
1888 FormattedField
* pField
= GetFormattedField();
1890 pField
->SetDecimalDigits( Value
);
1893 sal_Int16
SVTXNumericField::getDecimalDigits() throw(::com::sun::star::uno::RuntimeException
)
1895 ::vos::OGuard
aGuard( GetMutex() );
1897 FormattedField
* pField
= GetFormattedField();
1898 return pField
? pField
->GetDecimalDigits() : 0;
1901 void SVTXNumericField::setStrictFormat( sal_Bool bStrict
) throw(::com::sun::star::uno::RuntimeException
)
1903 ::vos::OGuard
aGuard( GetMutex() );
1905 FormattedField
* pField
= GetFormattedField();
1907 pField
->SetStrictFormat( bStrict
);
1910 sal_Bool
SVTXNumericField::isStrictFormat() throw(::com::sun::star::uno::RuntimeException
)
1912 ::vos::OGuard
aGuard( GetMutex() );
1914 FormattedField
* pField
= GetFormattedField();
1915 return pField
? pField
->IsStrictFormat() : sal_False
;
1918 void SVTXNumericField::ImplGetPropertyIds( std::list
< sal_uInt16
> &rIds
)
1920 SVTXFormattedField::ImplGetPropertyIds( rIds
);
1923 // ----------------------------------------------------
1924 // class SVTXCurrencyField
1925 // ----------------------------------------------------
1926 SVTXCurrencyField::SVTXCurrencyField()
1930 SVTXCurrencyField::~SVTXCurrencyField()
1934 ::com::sun::star::uno::Any
SVTXCurrencyField::queryInterface( const ::com::sun::star::uno::Type
& rType
) throw(::com::sun::star::uno::RuntimeException
)
1936 ::com::sun::star::uno::Any aRet
= ::cppu::queryInterface( rType
,
1937 SAL_STATIC_CAST( ::com::sun::star::awt::XCurrencyField
*, this ),
1938 SAL_STATIC_CAST( ::com::sun::star::lang::XTypeProvider
*, this ) );
1939 return (aRet
.hasValue() ? aRet
: SVTXFormattedField::queryInterface( rType
));
1942 // ::com::sun::star::lang::XTypeProvider
1943 IMPL_XTYPEPROVIDER_START( SVTXCurrencyField
)
1944 getCppuType( ( ::com::sun::star::uno::Reference
< ::com::sun::star::awt::XCurrencyField
>* ) NULL
),
1945 SVTXFormattedField::getTypes()
1946 IMPL_XTYPEPROVIDER_END
1948 void SVTXCurrencyField::setValue( double Value
) throw(::com::sun::star::uno::RuntimeException
)
1950 ::vos::OGuard
aGuard( GetMutex() );
1952 FormattedField
* pField
= GetFormattedField();
1954 pField
->SetValue( Value
);
1957 double SVTXCurrencyField::getValue() throw(::com::sun::star::uno::RuntimeException
)
1959 ::vos::OGuard
aGuard( GetMutex() );
1961 FormattedField
* pField
= GetFormattedField();
1962 return pField
? pField
->GetValue() : 0;
1965 void SVTXCurrencyField::setMin( double Value
) throw(::com::sun::star::uno::RuntimeException
)
1967 ::vos::OGuard
aGuard( GetMutex() );
1969 FormattedField
* pField
= GetFormattedField();
1971 pField
->SetMinValue( Value
);
1974 double SVTXCurrencyField::getMin() throw(::com::sun::star::uno::RuntimeException
)
1976 ::vos::OGuard
aGuard( GetMutex() );
1978 FormattedField
* pField
= GetFormattedField();
1979 return pField
? pField
->GetMinValue() : 0;
1982 void SVTXCurrencyField::setMax( double Value
) throw(::com::sun::star::uno::RuntimeException
)
1984 ::vos::OGuard
aGuard( GetMutex() );
1986 FormattedField
* pField
= GetFormattedField();
1988 pField
->SetMaxValue( Value
);
1991 double SVTXCurrencyField::getMax() throw(::com::sun::star::uno::RuntimeException
)
1993 ::vos::OGuard
aGuard( GetMutex() );
1995 FormattedField
* pField
= GetFormattedField();
1996 return pField
? pField
->GetMaxValue() : 0;
1999 void SVTXCurrencyField::setFirst( double Value
) throw(::com::sun::star::uno::RuntimeException
)
2001 ::vos::OGuard
aGuard( GetMutex() );
2003 FormattedField
* pField
= GetFormattedField();
2005 pField
->SetSpinFirst( Value
);
2008 double SVTXCurrencyField::getFirst() throw(::com::sun::star::uno::RuntimeException
)
2010 ::vos::OGuard
aGuard( GetMutex() );
2012 FormattedField
* pField
= GetFormattedField();
2013 return pField
? pField
->GetSpinFirst() : 0;
2016 void SVTXCurrencyField::setLast( double Value
) throw(::com::sun::star::uno::RuntimeException
)
2018 ::vos::OGuard
aGuard( GetMutex() );
2020 FormattedField
* pField
= GetFormattedField();
2022 pField
->SetSpinLast( Value
);
2025 double SVTXCurrencyField::getLast() throw(::com::sun::star::uno::RuntimeException
)
2027 ::vos::OGuard
aGuard( GetMutex() );
2029 FormattedField
* pField
= GetFormattedField();
2030 return pField
? pField
->GetSpinLast() : 0;
2033 void SVTXCurrencyField::setSpinSize( double Value
) throw(::com::sun::star::uno::RuntimeException
)
2035 ::vos::OGuard
aGuard( GetMutex() );
2037 FormattedField
* pField
= GetFormattedField();
2039 pField
->SetSpinSize( Value
);
2042 double SVTXCurrencyField::getSpinSize() throw(::com::sun::star::uno::RuntimeException
)
2044 ::vos::OGuard
aGuard( GetMutex() );
2046 FormattedField
* pField
= GetFormattedField();
2047 return pField
? pField
->GetSpinSize() : 0;
2050 void SVTXCurrencyField::setDecimalDigits( sal_Int16 Value
) throw(::com::sun::star::uno::RuntimeException
)
2052 ::vos::OGuard
aGuard( GetMutex() );
2054 FormattedField
* pField
= GetFormattedField();
2056 pField
->SetDecimalDigits( Value
);
2059 sal_Int16
SVTXCurrencyField::getDecimalDigits() throw(::com::sun::star::uno::RuntimeException
)
2061 ::vos::OGuard
aGuard( GetMutex() );
2063 FormattedField
* pField
= GetFormattedField();
2064 return pField
? pField
->GetDecimalDigits() : 0;
2067 void SVTXCurrencyField::setStrictFormat( sal_Bool bStrict
) throw(::com::sun::star::uno::RuntimeException
)
2069 ::vos::OGuard
aGuard( GetMutex() );
2071 FormattedField
* pField
= GetFormattedField();
2073 pField
->SetStrictFormat( bStrict
);
2076 sal_Bool
SVTXCurrencyField::isStrictFormat() throw(::com::sun::star::uno::RuntimeException
)
2078 ::vos::OGuard
aGuard( GetMutex() );
2080 FormattedField
* pField
= GetFormattedField();
2081 return pField
? pField
->IsStrictFormat() : sal_False
;
2084 void SVTXCurrencyField::setProperty( const ::rtl::OUString
& PropertyName
, const ::com::sun::star::uno::Any
& Value
) throw(::com::sun::star::uno::RuntimeException
)
2086 ::vos::OGuard
aGuard( GetMutex() );
2088 ::com::sun::star::uno::Any aReturn
;
2090 DoubleCurrencyField
* pField
= (DoubleCurrencyField
*)GetFormattedField();
2094 String
sAssertion( String::CreateFromAscii( RTL_CONSTASCII_STRINGPARAM( "SVTXCurrencyField::setProperty(" ) ) );
2095 sAssertion
+= String( PropertyName
);
2096 sAssertion
.AppendAscii( RTL_CONSTASCII_STRINGPARAM( ") : invalid value !" ) );
2098 sal_uInt16 nPropType
= GetPropertyId( PropertyName
);
2101 case BASEPROPERTY_CURRENCYSYMBOL
:
2103 ::rtl::OUString aStr
;
2105 pField
->setCurrencySymbol( aStr
);
2108 case BASEPROPERTY_CURSYM_POSITION
:
2112 pField
->setPrependCurrSym(b
);
2117 SVTXFormattedField::setProperty(PropertyName
, Value
);
2121 SVTXFormattedField::setProperty(PropertyName
, Value
);
2124 ::com::sun::star::uno::Any
SVTXCurrencyField::getProperty( const ::rtl::OUString
& PropertyName
) throw(::com::sun::star::uno::RuntimeException
)
2126 ::vos::OGuard
aGuard( GetMutex() );
2128 ::com::sun::star::uno::Any aReturn
;
2130 DoubleCurrencyField
* pField
= (DoubleCurrencyField
*)GetFormattedField();
2133 sal_uInt16 nPropType
= GetPropertyId( PropertyName
);
2136 case BASEPROPERTY_CURRENCYSYMBOL
:
2138 aReturn
<<= ::rtl::OUString( pField
->getCurrencySymbol() );
2141 case BASEPROPERTY_CURSYM_POSITION
:
2143 aReturn
<<= pField
->getPrependCurrSym();
2147 return SVTXFormattedField::getProperty(PropertyName
);
2150 return SVTXFormattedField::getProperty(PropertyName
);
2153 void SVTXCurrencyField::ImplGetPropertyIds( std::list
< sal_uInt16
> &rIds
)
2155 PushPropertyIds( rIds
,
2156 BASEPROPERTY_CURRENCYSYMBOL
,
2157 BASEPROPERTY_CURSYM_POSITION
,
2159 SVTXFormattedField::ImplGetPropertyIds( rIds
);
2163 // ----------------------------------------------------
2164 // class VCLXProgressBar
2165 // ----------------------------------------------------
2167 VCLXProgressBar::VCLXProgressBar()
2174 VCLXProgressBar::~VCLXProgressBar()
2178 void VCLXProgressBar::ImplUpdateValue()
2180 ProgressBar
* pProgressBar
= (ProgressBar
*) GetWindow();
2187 // check min and max
2188 if (m_nValueMin
< m_nValueMax
)
2190 nValMin
= m_nValueMin
;
2191 nValMax
= m_nValueMax
;
2195 nValMin
= m_nValueMax
;
2196 nValMax
= m_nValueMin
;
2200 if (m_nValue
< nValMin
)
2204 else if (m_nValue
> nValMax
)
2213 // calculate percent
2215 if (nValMin
!= nValMax
)
2217 nPercent
= 100 * (nVal
- nValMin
) / (nValMax
- nValMin
);
2224 // set progressbar value
2225 pProgressBar
->SetValue( (USHORT
) nPercent
);
2229 // ::com::sun::star::uno::XInterface
2230 ::com::sun::star::uno::Any
VCLXProgressBar::queryInterface( const ::com::sun::star::uno::Type
& rType
) throw(::com::sun::star::uno::RuntimeException
)
2232 ::com::sun::star::uno::Any aRet
= ::cppu::queryInterface( rType
,
2233 SAL_STATIC_CAST( ::com::sun::star::awt::XProgressBar
*, this ),
2234 SAL_STATIC_CAST( ::com::sun::star::lang::XTypeProvider
*, this ) );
2235 return (aRet
.hasValue() ? aRet
: VCLXWindow::queryInterface( rType
));
2238 // ::com::sun::star::lang::XTypeProvider
2239 IMPL_XTYPEPROVIDER_START( VCLXProgressBar
)
2240 getCppuType( ( ::com::sun::star::uno::Reference
< ::com::sun::star::awt::XProgressBar
>* ) NULL
),
2241 VCLXWindow::getTypes()
2242 IMPL_XTYPEPROVIDER_END
2244 // ::com::sun::star::awt::XProgressBar
2245 void VCLXProgressBar::setForegroundColor( sal_Int32 nColor
) throw(::com::sun::star::uno::RuntimeException
)
2247 ::vos::OGuard
aGuard( GetMutex() );
2249 Window
* pWindow
= GetWindow();
2252 Color
aColor( nColor
);
2253 pWindow
->SetControlForeground( aColor
);
2257 void VCLXProgressBar::setBackgroundColor( sal_Int32 nColor
) throw(::com::sun::star::uno::RuntimeException
)
2259 ::vos::OGuard
aGuard( GetMutex() );
2261 Window
* pWindow
= GetWindow();
2264 Color
aColor( nColor
);
2265 pWindow
->SetBackground( aColor
);
2266 pWindow
->SetControlBackground( aColor
);
2267 pWindow
->Invalidate();
2271 void VCLXProgressBar::setValue( sal_Int32 nValue
) throw(::com::sun::star::uno::RuntimeException
)
2273 ::vos::OGuard
aGuard( GetMutex() );
2279 void VCLXProgressBar::setRange( sal_Int32 nMin
, sal_Int32 nMax
) throw(::com::sun::star::uno::RuntimeException
)
2281 ::vos::OGuard
aGuard( GetMutex() );
2285 // take correct min and max
2291 // change min and max
2299 sal_Int32
VCLXProgressBar::getValue() throw(::com::sun::star::uno::RuntimeException
)
2301 ::vos::OGuard
aGuard( GetMutex() );
2306 // ::com::sun::star::awt::VclWindowPeer
2307 void VCLXProgressBar::setProperty( const ::rtl::OUString
& PropertyName
, const ::com::sun::star::uno::Any
& Value
) throw(::com::sun::star::uno::RuntimeException
)
2309 ::vos::OGuard
aGuard( GetMutex() );
2311 ProgressBar
* pProgressBar
= (ProgressBar
*)GetWindow();
2314 sal_uInt16 nPropType
= GetPropertyId( PropertyName
);
2315 switch ( nPropType
)
2317 case BASEPROPERTY_PROGRESSVALUE
:
2319 if ( Value
>>= m_nValue
)
2323 case BASEPROPERTY_PROGRESSVALUE_MIN
:
2325 if ( Value
>>= m_nValueMin
)
2329 case BASEPROPERTY_PROGRESSVALUE_MAX
:
2331 if ( Value
>>= m_nValueMax
)
2335 case BASEPROPERTY_FILLCOLOR
:
2337 Window
* pWindow
= GetWindow();
2340 sal_Bool bVoid
= Value
.getValueType().getTypeClass() == ::com::sun::star::uno::TypeClass_VOID
;
2344 pWindow
->SetControlForeground();
2348 sal_Int32 nColor
= 0;
2349 if ( Value
>>= nColor
)
2351 Color
aColor( nColor
);
2352 pWindow
->SetControlForeground( aColor
);
2359 VCLXWindow::setProperty( PropertyName
, Value
);
2365 ::com::sun::star::uno::Any
VCLXProgressBar::getProperty( const ::rtl::OUString
& PropertyName
) throw(::com::sun::star::uno::RuntimeException
)
2367 ::vos::OGuard
aGuard( GetMutex() );
2369 ::com::sun::star::uno::Any aProp
;
2370 ProgressBar
* pProgressBar
= (ProgressBar
*)GetWindow();
2373 sal_uInt16 nPropType
= GetPropertyId( PropertyName
);
2374 switch ( nPropType
)
2376 case BASEPROPERTY_PROGRESSVALUE
:
2381 case BASEPROPERTY_PROGRESSVALUE_MIN
:
2383 aProp
<<= m_nValueMin
;
2386 case BASEPROPERTY_PROGRESSVALUE_MAX
:
2388 aProp
<<= m_nValueMax
;
2392 aProp
<<= VCLXWindow::getProperty( PropertyName
);
2399 void VCLXProgressBar::ImplGetPropertyIds( std::list
< sal_uInt16
> &rIds
)
2401 PushPropertyIds( rIds
,
2402 BASEPROPERTY_PROGRESSVALUE
,
2403 BASEPROPERTY_PROGRESSVALUE_MIN
,
2404 BASEPROPERTY_PROGRESSVALUE_MAX
,
2405 BASEPROPERTY_FILLCOLOR
,
2407 VCLXWindow::ImplGetPropertyIds( rIds
, true );
2411 // ----------------------------------------------------
2412 // class SVTXDateField
2413 // ----------------------------------------------------
2414 SVTXDateField::SVTXDateField()
2419 SVTXDateField::~SVTXDateField()
2423 void SAL_CALL
SVTXDateField::setProperty( const ::rtl::OUString
& PropertyName
, const ::com::sun::star::uno::Any
& Value
) throw(::com::sun::star::uno::RuntimeException
)
2425 VCLXDateField::setProperty( PropertyName
, Value
);
2427 // some properties need to be forwarded to the sub edit, too
2428 Edit
* pSubEdit
= GetWindow() ? static_cast< Edit
* >( GetWindow() )->GetSubEdit() : NULL
;
2432 switch ( GetPropertyId( PropertyName
) )
2434 case BASEPROPERTY_TEXTLINECOLOR
:
2435 if ( !Value
.hasValue() )
2436 pSubEdit
->SetTextLineColor();
2439 sal_Int32 nColor
= 0;
2440 if ( Value
>>= nColor
)
2441 pSubEdit
->SetTextLineColor( Color( nColor
) );
2447 void SVTXDateField::ImplGetPropertyIds( std::list
< sal_uInt16
> &rIds
)
2449 PushPropertyIds( rIds
,
2450 BASEPROPERTY_TEXTLINECOLOR
,
2452 VCLXDateField::ImplGetPropertyIds( rIds
);