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