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: */
|