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 <svtools/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 <svtools/table/tablecontrol.hxx>
42 :
43 : namespace
44 : {
45 0 : static void lcl_setWinBits( Window* _pWindow, WinBits _nBits, sal_Bool _bSet )
46 : {
47 0 : WinBits nStyle = _pWindow->GetStyle();
48 0 : if ( _bSet )
49 0 : nStyle |= _nBits;
50 : else
51 0 : nStyle &= ~_nBits;
52 0 : _pWindow->SetStyle( nStyle );
53 0 : }
54 : }
55 :
56 :
57 : // help function for the toolkit...
58 :
59 :
60 : extern "C" {
61 :
62 0 : SAL_DLLPUBLIC_EXPORT Window* CreateWindow( VCLXWindow** ppNewComp, const ::com::sun::star::awt::WindowDescriptor* pDescriptor, Window* pParent, WinBits nWinBits )
63 : {
64 0 : Window* pWindow = NULL;
65 0 : OUString aServiceName( pDescriptor->WindowServiceName );
66 0 : if ( aServiceName.equalsIgnoreAsciiCase( "MultiLineEdit" ) )
67 : {
68 0 : if ( pParent )
69 : {
70 0 : pWindow = new MultiLineEdit( pParent, nWinBits|WB_IGNORETAB);
71 0 : static_cast< MultiLineEdit* >( pWindow )->DisableSelectionOnFocus();
72 0 : *ppNewComp = new VCLXMultiLineEdit;
73 : }
74 : else
75 : {
76 0 : *ppNewComp = NULL;
77 0 : return NULL;
78 : }
79 : }
80 0 : 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 0 : else if (aServiceName.equalsIgnoreAsciiCase("FormattedField") )
94 : {
95 0 : pWindow = new FormattedField( pParent, nWinBits );
96 0 : *ppNewComp = new SVTXFormattedField;
97 : }
98 0 : else if (aServiceName.equalsIgnoreAsciiCase("NumericField") )
99 : {
100 0 : pWindow = new DoubleNumericField( pParent, nWinBits );
101 0 : *ppNewComp = new SVTXNumericField;
102 : }
103 0 : else if (aServiceName.equalsIgnoreAsciiCase("LongCurrencyField") )
104 : {
105 0 : pWindow = new DoubleCurrencyField( pParent, nWinBits );
106 0 : *ppNewComp = new SVTXCurrencyField;
107 : }
108 0 : else if (aServiceName.equalsIgnoreAsciiCase("datefield") )
109 : {
110 0 : pWindow = new CalendarField( pParent, nWinBits);
111 0 : static_cast<CalendarField*>(pWindow)->EnableToday();
112 0 : static_cast<CalendarField*>(pWindow)->EnableNone();
113 0 : static_cast<CalendarField*>(pWindow)->EnableEmptyFieldValue( true );
114 0 : *ppNewComp = new SVTXDateField;
115 0 : ((VCLXFormattedSpinField*)*ppNewComp)->SetFormatter( (FormatterBase*)(DateField*)pWindow );
116 : }
117 0 : else if (aServiceName.equalsIgnoreAsciiCase("roadmap") )
118 : {
119 0 : pWindow = new ::svt::ORoadmap( pParent, WB_TABSTOP );
120 0 : *ppNewComp = new SVTXRoadmap;
121 : }
122 0 : 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 0 : 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 0 : 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 0 : else if ( aServiceName.equalsIgnoreAsciiCase( "Grid" ) )
155 : {
156 0 : if ( pParent )
157 : {
158 0 : pWindow = new ::svt::table::TableControl(pParent, nWinBits);
159 0 : *ppNewComp = new SVTXGridControl;
160 : }
161 : else
162 : {
163 0 : *ppNewComp = NULL;
164 0 : return NULL;
165 : }
166 : }
167 0 : return pWindow;
168 : }
169 :
170 : } // extern "C"
171 :
172 :
173 : // class VCLXMultiLineEdit
174 :
175 0 : VCLXMultiLineEdit::VCLXMultiLineEdit()
176 : :maTextListeners( *this )
177 0 : ,meLineEndType( LINEEND_LF ) // default behavior before introducing this property: LF (unix-like)
178 : {
179 0 : }
180 :
181 0 : VCLXMultiLineEdit::~VCLXMultiLineEdit()
182 : {
183 0 : }
184 :
185 0 : ::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 0 : (static_cast< ::com::sun::star::lang::XTypeProvider* >(this)) );
192 0 : return (aRet.hasValue() ? aRet : VCLXWindow::queryInterface( rType ));
193 : }
194 :
195 : // ::com::sun::star::lang::XTypeProvider
196 0 : IMPL_XTYPEPROVIDER_START( VCLXMultiLineEdit )
197 0 : getCppuType( ( ::com::sun::star::uno::Reference< ::com::sun::star::awt::XTextComponent>* ) NULL ),
198 0 : getCppuType( ( ::com::sun::star::uno::Reference< ::com::sun::star::awt::XTextArea>* ) NULL ),
199 0 : getCppuType( ( ::com::sun::star::uno::Reference< ::com::sun::star::awt::XTextLayoutConstrains>* ) NULL ),
200 : VCLXWindow::getTypes()
201 0 : IMPL_XTYPEPROVIDER_END
202 :
203 0 : 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 0 : maTextListeners.addInterface( l );
206 0 : }
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 0 : void VCLXMultiLineEdit::setText( const OUString& aText ) throw(::com::sun::star::uno::RuntimeException, std::exception)
214 : {
215 0 : SolarMutexGuard aGuard;
216 :
217 0 : MultiLineEdit* pEdit = (MultiLineEdit*)GetWindow();
218 0 : if ( pEdit )
219 : {
220 0 : pEdit->SetText( aText );
221 :
222 : // #107218# Call same listeners like VCL would do after user interaction
223 0 : SetSynthesizingVCLEvent( true );
224 0 : pEdit->SetModifyFlag();
225 0 : pEdit->Modify();
226 0 : SetSynthesizingVCLEvent( false );
227 0 : }
228 0 : }
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 = (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 = (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 = (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 = (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 = (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 = (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 = (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 = (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 = (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 = (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 = (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 = (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 = (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 = (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 0 : void VCLXMultiLineEdit::ProcessWindowEvent( const VclWindowEvent& rVclWindowEvent )
389 : {
390 0 : 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 0 : VCLXWindow::ProcessWindowEvent( rVclWindowEvent );
405 : }
406 0 : break;
407 : }
408 0 : }
409 :
410 0 : void VCLXMultiLineEdit::setProperty( const OUString& PropertyName, const ::com::sun::star::uno::Any& Value) throw(::com::sun::star::uno::RuntimeException, std::exception)
411 : {
412 0 : SolarMutexGuard aGuard;
413 :
414 0 : MultiLineEdit* pMultiLineEdit = (MultiLineEdit*)GetWindow();
415 0 : if ( pMultiLineEdit )
416 : {
417 0 : sal_uInt16 nPropType = GetPropertyId( PropertyName );
418 0 : switch ( nPropType )
419 : {
420 : case BASEPROPERTY_LINE_END_FORMAT:
421 : {
422 0 : sal_Int16 nLineEndType = ::com::sun::star::awt::LineEndFormat::LINE_FEED;
423 0 : OSL_VERIFY( Value >>= nLineEndType );
424 0 : 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 0 : 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 0 : break;
433 :
434 : case BASEPROPERTY_READONLY:
435 : {
436 0 : sal_Bool b = sal_Bool();
437 0 : if ( Value >>= b )
438 0 : pMultiLineEdit->SetReadOnly( b );
439 : }
440 0 : break;
441 : case BASEPROPERTY_MAXTEXTLEN:
442 : {
443 0 : sal_Int16 n = sal_Int16();
444 0 : if ( Value >>= n )
445 0 : pMultiLineEdit->SetMaxTextLen( n );
446 : }
447 0 : break;
448 : case BASEPROPERTY_HIDEINACTIVESELECTION:
449 : {
450 0 : sal_Bool b = sal_Bool();
451 0 : if ( Value >>= b )
452 : {
453 0 : pMultiLineEdit->EnableFocusSelectionHide( b );
454 0 : lcl_setWinBits( pMultiLineEdit, WB_NOHIDESELECTION, !b );
455 : }
456 : }
457 0 : break;
458 : default:
459 : {
460 0 : VCLXWindow::setProperty( PropertyName, Value );
461 : }
462 : }
463 0 : }
464 0 : }
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 = (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 = (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 : getCppuType( ( ::com::sun::star::uno::Reference< ::com::sun::star::awt::XTextComponent>* ) NULL ),
561 0 : getCppuType( ( ::com::sun::star::uno::Reference< ::com::sun::star::awt::XTextLayoutConstrains>* ) NULL ),
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 = (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 : sal_Bool bValue( sal_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( 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 : 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 = (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 : 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 = (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 = (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 = (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 = (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 = (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 = (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 = (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 = (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 = (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 = (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 = (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 0 : SVTXFormattedField::SVTXFormattedField()
809 : :m_pCurrentSupplier(NULL)
810 : ,bIsStandardSupplier(sal_True)
811 0 : ,nKeyToSetDelayed(-1)
812 : {
813 0 : }
814 :
815 :
816 0 : SVTXFormattedField::~SVTXFormattedField()
817 : {
818 0 : if (m_pCurrentSupplier)
819 : {
820 0 : m_pCurrentSupplier->release();
821 0 : m_pCurrentSupplier = NULL;
822 : }
823 0 : }
824 :
825 :
826 0 : void SVTXFormattedField::SetWindow( Window* _pWindow )
827 : {
828 0 : VCLXSpinField::SetWindow(_pWindow);
829 0 : if (GetFormattedField())
830 0 : GetFormattedField()->SetAutoColor(true);
831 0 : }
832 :
833 :
834 0 : void SVTXFormattedField::setProperty( const OUString& PropertyName, const ::com::sun::star::uno::Any& Value) throw(::com::sun::star::uno::RuntimeException, std::exception)
835 : {
836 0 : SolarMutexGuard aGuard;
837 :
838 0 : FormattedField* pField = GetFormattedField();
839 0 : if ( pField )
840 : {
841 0 : sal_uInt16 nPropType = GetPropertyId( PropertyName );
842 0 : switch (nPropType)
843 : {
844 : case BASEPROPERTY_ENFORCE_FORMAT:
845 : {
846 0 : sal_Bool bEnable( sal_True );
847 0 : if ( Value >>= bEnable )
848 0 : pField->EnableNotANumber( !bEnable );
849 : }
850 0 : break;
851 :
852 : case BASEPROPERTY_EFFECTIVE_MIN:
853 : case BASEPROPERTY_VALUEMIN_DOUBLE:
854 0 : SetMinValue(Value);
855 0 : break;
856 :
857 : case BASEPROPERTY_EFFECTIVE_MAX:
858 : case BASEPROPERTY_VALUEMAX_DOUBLE:
859 0 : SetMaxValue(Value);
860 0 : break;
861 :
862 : case BASEPROPERTY_EFFECTIVE_DEFAULT:
863 0 : SetDefaultValue(Value);
864 0 : break;
865 :
866 : case BASEPROPERTY_TREATASNUMBER:
867 : {
868 0 : sal_Bool b = sal_Bool();
869 0 : if ( Value >>= b )
870 0 : SetTreatAsNumber(b);
871 : }
872 0 : break;
873 :
874 : case BASEPROPERTY_FORMATSSUPPLIER:
875 0 : if (!Value.hasValue())
876 0 : setFormatsSupplier(::com::sun::star::uno::Reference< ::com::sun::star::util::XNumberFormatsSupplier > (NULL));
877 : else
878 : {
879 0 : ::com::sun::star::uno::Reference< ::com::sun::star::util::XNumberFormatsSupplier > xNFS;
880 0 : if ( Value >>= xNFS )
881 0 : setFormatsSupplier(xNFS);
882 : }
883 0 : break;
884 : case BASEPROPERTY_FORMATKEY:
885 0 : if (!Value.hasValue())
886 0 : setFormatKey(0);
887 : else
888 : {
889 0 : sal_Int32 n = 0;
890 0 : if ( Value >>= n )
891 0 : setFormatKey(n);
892 : }
893 0 : break;
894 :
895 : case BASEPROPERTY_EFFECTIVE_VALUE:
896 : case BASEPROPERTY_VALUE_DOUBLE:
897 : {
898 0 : const ::com::sun::star::uno::TypeClass rTC = Value.getValueType().getTypeClass();
899 0 : if (rTC != ::com::sun::star::uno::TypeClass_STRING)
900 : // no string
901 0 : if (rTC != ::com::sun::star::uno::TypeClass_DOUBLE)
902 : // no double
903 0 : 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 0 : SetValue(Value);
914 : }
915 0 : break;
916 : case BASEPROPERTY_VALUESTEP_DOUBLE:
917 : {
918 0 : double d = 0.0;
919 0 : if ( Value >>= d )
920 0 : 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 0 : break;
929 : case BASEPROPERTY_DECIMALACCURACY:
930 : {
931 0 : sal_Int32 n = 0;
932 0 : if ( Value >>= n )
933 0 : pField->SetDecimalDigits( (sal_uInt16)n );
934 : }
935 0 : break;
936 : case BASEPROPERTY_NUMSHOWTHOUSANDSEP:
937 : {
938 0 : sal_Bool b = sal_Bool();
939 0 : if ( Value >>= b )
940 0 : pField->SetThousandsSep( b );
941 : }
942 0 : break;
943 :
944 : default:
945 0 : VCLXSpinField::setProperty( PropertyName, Value );
946 : }
947 :
948 0 : 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 0 : pField->SetAutoColor(!Value.hasValue());
952 : }
953 : }
954 : else
955 0 : VCLXSpinField::setProperty( PropertyName, Value );
956 0 : }
957 :
958 :
959 0 : ::com::sun::star::uno::Any SVTXFormattedField::getProperty( const OUString& PropertyName ) throw(::com::sun::star::uno::RuntimeException, std::exception)
960 : {
961 0 : SolarMutexGuard aGuard;
962 :
963 0 : ::com::sun::star::uno::Any aReturn;
964 :
965 0 : FormattedField* pField = GetFormattedField();
966 0 : if ( pField )
967 : {
968 0 : sal_uInt16 nPropType = GetPropertyId( PropertyName );
969 0 : 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 0 : aReturn <<= GetValue();
992 0 : 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 0 : aReturn <<= VCLXSpinField::getProperty(PropertyName);
1021 : }
1022 : }
1023 0 : return aReturn;
1024 : }
1025 :
1026 :
1027 0 : ::com::sun::star::uno::Any SVTXFormattedField::convertEffectiveValue(const ::com::sun::star::uno::Any& rValue)
1028 : {
1029 0 : ::com::sun::star::uno::Any aReturn;
1030 :
1031 0 : FormattedField* pField = GetFormattedField();
1032 0 : if (!pField)
1033 0 : return aReturn;
1034 :
1035 0 : 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 0 : aReturn.clear();
1081 0 : break;
1082 : }
1083 0 : return aReturn;
1084 : }
1085 :
1086 :
1087 0 : void SVTXFormattedField::SetMinValue(const ::com::sun::star::uno::Any& rValue)
1088 : {
1089 0 : FormattedField* pField = GetFormattedField();
1090 0 : if (!pField)
1091 0 : return;
1092 :
1093 0 : switch (rValue.getValueType().getTypeClass())
1094 :
1095 : {
1096 : case ::com::sun::star::uno::TypeClass_DOUBLE:
1097 : {
1098 0 : double d = 0.0;
1099 0 : rValue >>= d;
1100 0 : pField->SetMinValue(d);
1101 : }
1102 0 : 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 0 : if ( rValue.getValueType().getTypeClass() != ::com::sun::star::uno::TypeClass_VOID )
1106 :
1107 : {
1108 0 : throw ::com::sun::star::lang::IllegalArgumentException();
1109 : }
1110 0 : pField->ClearMinValue();
1111 0 : 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 0 : void SVTXFormattedField::SetMaxValue(const ::com::sun::star::uno::Any& rValue)
1129 : {
1130 0 : FormattedField* pField = GetFormattedField();
1131 0 : if (!pField)
1132 0 : return;
1133 :
1134 0 : switch (rValue.getValueType().getTypeClass())
1135 :
1136 : {
1137 : case ::com::sun::star::uno::TypeClass_DOUBLE:
1138 : {
1139 0 : double d = 0.0;
1140 0 : rValue >>= d;
1141 0 : pField->SetMaxValue(d);
1142 : }
1143 0 : break;
1144 : default:
1145 0 : if (rValue.getValueType().getTypeClass() != ::com::sun::star::uno::TypeClass_VOID)
1146 :
1147 : {
1148 0 : throw ::com::sun::star::lang::IllegalArgumentException();
1149 : }
1150 0 : pField->ClearMaxValue();
1151 0 : 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 0 : void SVTXFormattedField::SetDefaultValue(const ::com::sun::star::uno::Any& rValue)
1169 : {
1170 0 : FormattedField* pField = GetFormattedField();
1171 0 : if (!pField)
1172 0 : return;
1173 :
1174 0 : ::com::sun::star::uno::Any aConverted = convertEffectiveValue(rValue);
1175 :
1176 0 : 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 0 : pField->EnableEmptyField(true);
1195 : // nur noch void erlaubt
1196 0 : break;
1197 0 : }
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 : sal_Bool SVTXFormattedField::GetTreatAsNumber()
1217 : {
1218 0 : FormattedField* pField = GetFormattedField();
1219 0 : if (pField)
1220 0 : return pField->TreatingAsNumber();
1221 :
1222 0 : return sal_True;
1223 : }
1224 :
1225 :
1226 0 : void SVTXFormattedField::SetTreatAsNumber(sal_Bool bSet)
1227 : {
1228 0 : FormattedField* pField = GetFormattedField();
1229 0 : if (pField)
1230 0 : pField->TreatAsNumber(bSet);
1231 0 : }
1232 :
1233 :
1234 0 : ::com::sun::star::uno::Any SVTXFormattedField::GetValue()
1235 : {
1236 0 : FormattedField* pField = GetFormattedField();
1237 0 : if (!pField)
1238 0 : return ::com::sun::star::uno::Any();
1239 :
1240 0 : ::com::sun::star::uno::Any aReturn;
1241 0 : if (!pField->TreatingAsNumber())
1242 : {
1243 0 : OUString sText = pField->GetTextValue();
1244 0 : aReturn <<= sText;
1245 : }
1246 : else
1247 : {
1248 0 : if (!pField->GetText().isEmpty()) // empty is returned as void by default
1249 0 : aReturn <<= pField->GetValue();
1250 : }
1251 :
1252 0 : return aReturn;
1253 : }
1254 :
1255 :
1256 0 : void SVTXFormattedField::SetValue(const ::com::sun::star::uno::Any& rValue)
1257 : {
1258 0 : FormattedField* pField = GetFormattedField();
1259 0 : if (!pField)
1260 0 : return;
1261 :
1262 0 : if (!rValue.hasValue())
1263 : {
1264 0 : pField->SetText("");
1265 : }
1266 : else
1267 : {
1268 0 : if (rValue.getValueType().getTypeClass() == ::com::sun::star::uno::TypeClass_DOUBLE )
1269 : {
1270 0 : double d = 0.0;
1271 0 : rValue >>= d;
1272 0 : 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 0 : ::com::sun::star::uno::Reference< ::com::sun::star::util::XNumberFormatsSupplier > SVTXFormattedField::getFormatsSupplier(void) const
1291 : {
1292 0 : return ::com::sun::star::uno::Reference< ::com::sun::star::util::XNumberFormatsSupplier > ((::com::sun::star::util::XNumberFormatsSupplier*)m_pCurrentSupplier);
1293 : }
1294 :
1295 :
1296 0 : void SVTXFormattedField::setFormatsSupplier(const ::com::sun::star::uno::Reference< ::com::sun::star::util::XNumberFormatsSupplier > & xSupplier)
1297 : {
1298 0 : FormattedField* pField = GetFormattedField();
1299 :
1300 0 : SvNumberFormatsSupplierObj* pNew = NULL;
1301 0 : if (!xSupplier.is())
1302 : {
1303 0 : if (pField)
1304 : {
1305 0 : pNew = new SvNumberFormatsSupplierObj(pField->StandardFormatter());
1306 0 : bIsStandardSupplier = sal_True;
1307 : }
1308 : }
1309 : else
1310 : {
1311 0 : pNew = SvNumberFormatsSupplierObj::getImplementation(xSupplier);
1312 0 : bIsStandardSupplier = sal_False;
1313 : }
1314 :
1315 0 : if (!pNew)
1316 0 : return; // TODO : how to process ?
1317 :
1318 0 : if (m_pCurrentSupplier)
1319 0 : m_pCurrentSupplier->release();
1320 0 : m_pCurrentSupplier = pNew;
1321 0 : m_pCurrentSupplier->acquire();
1322 0 : if (pField)
1323 : {
1324 : // save the actual value
1325 0 : ::com::sun::star::uno::Any aCurrent = GetValue();
1326 0 : pField->SetFormatter(m_pCurrentSupplier->GetNumberFormatter(), false);
1327 0 : if (nKeyToSetDelayed != -1)
1328 : {
1329 0 : pField->SetFormatKey(nKeyToSetDelayed);
1330 0 : nKeyToSetDelayed = -1;
1331 : }
1332 0 : SetValue(aCurrent);
1333 0 : NotifyTextListeners();
1334 : }
1335 : }
1336 :
1337 :
1338 0 : sal_Int32 SVTXFormattedField::getFormatKey(void) const
1339 : {
1340 0 : FormattedField* pField = GetFormattedField();
1341 0 : return pField ? pField->GetFormatKey() : 0;
1342 : }
1343 :
1344 :
1345 0 : void SVTXFormattedField::setFormatKey(sal_Int32 nKey)
1346 : {
1347 0 : FormattedField* pField = GetFormattedField();
1348 0 : if (pField)
1349 : {
1350 0 : if (pField->GetFormatter())
1351 0 : pField->SetFormatKey(nKey);
1352 : else
1353 : {
1354 : // probably I am in a block, in which first the key and next the formatter will be set,
1355 : // initially this happens quite certain, as the properties are set in alphabettic sequence,
1356 : // and the FormatsSupplier is processed before the FormatKey
1357 0 : nKeyToSetDelayed = nKey;
1358 : }
1359 0 : NotifyTextListeners();
1360 : }
1361 0 : }
1362 :
1363 :
1364 0 : void SVTXFormattedField::NotifyTextListeners()
1365 : {
1366 0 : if ( GetTextListeners().getLength() )
1367 : {
1368 0 : ::com::sun::star::awt::TextEvent aEvent;
1369 0 : aEvent.Source = (::cppu::OWeakObject*)this;
1370 0 : GetTextListeners().textChanged( aEvent );
1371 : }
1372 0 : }
1373 :
1374 0 : void SVTXFormattedField::ImplGetPropertyIds( std::list< sal_uInt16 > &rIds )
1375 : {
1376 : PushPropertyIds( rIds,
1377 : // FIXME: elide duplication ?
1378 : BASEPROPERTY_EFFECTIVE_MIN,
1379 : BASEPROPERTY_VALUEMIN_DOUBLE,
1380 : BASEPROPERTY_EFFECTIVE_MAX,
1381 : BASEPROPERTY_VALUEMAX_DOUBLE,
1382 : BASEPROPERTY_EFFECTIVE_DEFAULT,
1383 : BASEPROPERTY_TREATASNUMBER,
1384 : BASEPROPERTY_EFFECTIVE_VALUE,
1385 : BASEPROPERTY_VALUE_DOUBLE,
1386 : BASEPROPERTY_VALUESTEP_DOUBLE,
1387 : BASEPROPERTY_DECIMALACCURACY,
1388 : BASEPROPERTY_FORMATSSUPPLIER,
1389 : BASEPROPERTY_NUMSHOWTHOUSANDSEP,
1390 : BASEPROPERTY_FORMATKEY,
1391 : BASEPROPERTY_TREATASNUMBER,
1392 : BASEPROPERTY_ENFORCE_FORMAT,
1393 0 : 0);
1394 0 : VCLXWindow::ImplGetPropertyIds( rIds, true );
1395 0 : VCLXSpinField::ImplGetPropertyIds( rIds );
1396 0 : }
1397 :
1398 :
1399 :
1400 : // class SVTXRoadmap
1401 :
1402 :
1403 : using namespace svt;
1404 :
1405 :
1406 0 : SVTXRoadmap::SVTXRoadmap() : maItemListeners( *this )
1407 : {
1408 0 : }
1409 :
1410 :
1411 0 : SVTXRoadmap::~SVTXRoadmap()
1412 : {
1413 0 : }
1414 :
1415 0 : void SVTXRoadmap::ProcessWindowEvent( const VclWindowEvent& rVclWindowEvent )
1416 : {
1417 0 : switch ( rVclWindowEvent.GetId() )
1418 : {
1419 : case VCLEVENT_ROADMAP_ITEMSELECTED:
1420 : {
1421 0 : SolarMutexGuard aGuard;
1422 0 : ::svt::ORoadmap* pField = GetRoadmap();
1423 0 : if ( pField )
1424 : {
1425 0 : sal_Int16 CurItemID = pField->GetCurrentRoadmapItemID();
1426 0 : ::com::sun::star::awt::ItemEvent aEvent;
1427 0 : aEvent.Selected = CurItemID;
1428 0 : aEvent.Highlighted = CurItemID;
1429 0 : aEvent.ItemId = CurItemID;
1430 0 : maItemListeners.itemStateChanged( aEvent );
1431 0 : }
1432 : }
1433 0 : break;
1434 : default:
1435 0 : SVTXRoadmap_Base::ProcessWindowEvent( rVclWindowEvent );
1436 0 : break;
1437 : }
1438 0 : }
1439 :
1440 :
1441 0 : void SVTXRoadmap::propertyChange( const ::com::sun::star::beans::PropertyChangeEvent& evt ) throw (::com::sun::star::uno::RuntimeException, std::exception)
1442 : {
1443 0 : SolarMutexGuard aGuard;
1444 0 : ::svt::ORoadmap* pField = GetRoadmap();
1445 0 : if ( pField )
1446 : {
1447 0 : ::com::sun::star::uno::Reference< ::com::sun::star::uno::XInterface > xRoadmapItem;
1448 0 : xRoadmapItem = evt.Source;
1449 0 : sal_Int32 nID = 0;
1450 0 : ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySet > xPropertySet( xRoadmapItem, ::com::sun::star::uno::UNO_QUERY );
1451 0 : ::com::sun::star::uno::Any aValue = xPropertySet->getPropertyValue("ID");
1452 0 : aValue >>= nID;
1453 :
1454 0 : ::com::sun::star::uno::Any rVal = evt.NewValue;
1455 0 : evt.NewValue >>= rVal;
1456 0 : OUString sPropertyName = evt.PropertyName;
1457 0 : if ( sPropertyName == "Enabled" )
1458 : {
1459 0 : sal_Bool bEnable = false;
1460 0 : evt.NewValue >>= bEnable;
1461 0 : pField->EnableRoadmapItem( (RoadmapTypes::ItemId)nID , bEnable );
1462 : }
1463 0 : else if ( sPropertyName == "Label" )
1464 : {
1465 0 : OUString sLabel;
1466 0 : evt.NewValue >>= sLabel;
1467 0 : pField->ChangeRoadmapItemLabel( (RoadmapTypes::ItemId)nID , sLabel );
1468 : }
1469 0 : else if ( sPropertyName == "ID" )
1470 : {
1471 0 : sal_Int32 nNewID = 0;
1472 0 : evt.NewValue >>= nNewID;
1473 0 : evt.OldValue >>= nID;
1474 0 : pField->ChangeRoadmapItemID( (RoadmapTypes::ItemId)nID, (RoadmapTypes::ItemId)nNewID );
1475 0 : }
1476 : // else
1477 : // Todo: handle Interactive appropriately
1478 0 : }
1479 0 : }
1480 :
1481 :
1482 0 : void SVTXRoadmap::addItemListener( const ::com::sun::star::uno::Reference< ::com::sun::star::awt::XItemListener >& l ) throw (::com::sun::star::uno::RuntimeException, std::exception)
1483 : {
1484 0 : maItemListeners.addInterface( l );
1485 0 : }
1486 :
1487 0 : void SVTXRoadmap::removeItemListener( const ::com::sun::star::uno::Reference< ::com::sun::star::awt::XItemListener >& l ) throw (::com::sun::star::uno::RuntimeException, std::exception)
1488 : {
1489 0 : maItemListeners.removeInterface( l );
1490 0 : }
1491 :
1492 0 : RMItemData SVTXRoadmap::GetRMItemData( const ::com::sun::star::container::ContainerEvent& _rEvent )
1493 : {
1494 0 : RMItemData aCurRMItemData;
1495 0 : ::com::sun::star::uno::Reference< ::com::sun::star::uno::XInterface > xRoadmapItem;
1496 0 : _rEvent.Element >>= xRoadmapItem;
1497 0 : ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySet > xPropertySet( xRoadmapItem, ::com::sun::star::uno::UNO_QUERY );
1498 0 : if ( xPropertySet.is() )
1499 : {
1500 0 : ::com::sun::star::uno::Any aValue = xPropertySet->getPropertyValue("Label");
1501 0 : aValue >>= aCurRMItemData.Label;
1502 0 : aValue = xPropertySet->getPropertyValue("ID");
1503 0 : aValue >>= aCurRMItemData.n_ID;
1504 0 : aValue = xPropertySet->getPropertyValue("Enabled");
1505 0 : aValue >>= aCurRMItemData.b_Enabled;
1506 : }
1507 : else
1508 : {
1509 0 : aCurRMItemData.b_Enabled = sal_False;
1510 0 : aCurRMItemData.n_ID = 0;
1511 : }
1512 0 : return aCurRMItemData;
1513 : }
1514 :
1515 0 : void SVTXRoadmap::elementInserted( const ::com::sun::star::container::ContainerEvent& _rEvent )throw(::com::sun::star::uno::RuntimeException, std::exception)
1516 : {
1517 0 : SolarMutexGuard aGuard;
1518 0 : ::svt::ORoadmap* pField = GetRoadmap();
1519 0 : if ( pField )
1520 : {
1521 0 : RMItemData CurItemData = GetRMItemData( _rEvent );
1522 0 : sal_Int32 InsertIndex = 0;
1523 0 : _rEvent.Accessor >>= InsertIndex;
1524 0 : pField->InsertRoadmapItem( InsertIndex, CurItemData.Label, (RoadmapTypes::ItemId)CurItemData.n_ID, CurItemData.b_Enabled );
1525 0 : }
1526 0 : }
1527 :
1528 0 : void SVTXRoadmap::elementRemoved( const ::com::sun::star::container::ContainerEvent& _rEvent )throw(::com::sun::star::uno::RuntimeException, std::exception)
1529 : {
1530 0 : SolarMutexGuard aGuard;
1531 0 : ::svt::ORoadmap* pField = GetRoadmap();
1532 0 : if ( pField )
1533 : {
1534 0 : sal_Int32 DelIndex = 0;
1535 0 : _rEvent.Accessor >>= DelIndex;
1536 0 : pField->DeleteRoadmapItem(DelIndex);
1537 0 : }
1538 0 : }
1539 :
1540 0 : void SVTXRoadmap::elementReplaced( const ::com::sun::star::container::ContainerEvent& _rEvent )throw(::com::sun::star::uno::RuntimeException, std::exception)
1541 : {
1542 0 : SolarMutexGuard aGuard;
1543 0 : ::svt::ORoadmap* pField = GetRoadmap();
1544 0 : if ( pField )
1545 : {
1546 0 : RMItemData CurItemData = GetRMItemData( _rEvent );
1547 0 : sal_Int32 ReplaceIndex = 0;
1548 0 : _rEvent.Accessor >>= ReplaceIndex;
1549 0 : pField->ReplaceRoadmapItem( ReplaceIndex, CurItemData.Label, (RoadmapTypes::ItemId)CurItemData.n_ID, CurItemData.b_Enabled );
1550 0 : }
1551 0 : }
1552 :
1553 :
1554 :
1555 :
1556 0 : void SVTXRoadmap::setProperty( const OUString& PropertyName, const ::com::sun::star::uno::Any& Value) throw(::com::sun::star::uno::RuntimeException, std::exception)
1557 : {
1558 0 : SolarMutexGuard aGuard;
1559 :
1560 0 : ::svt::ORoadmap* pField = GetRoadmap();
1561 0 : if ( pField )
1562 : {
1563 0 : sal_uInt16 nPropType = GetPropertyId( PropertyName );
1564 0 : switch (nPropType)
1565 : {
1566 : case BASEPROPERTY_COMPLETE:
1567 : {
1568 0 : sal_Bool b = false;
1569 0 : Value >>= b;
1570 0 : pField->SetRoadmapComplete( b);
1571 : }
1572 0 : break;
1573 :
1574 : case BASEPROPERTY_ACTIVATED:
1575 : {
1576 0 : sal_Bool b = false;
1577 0 : Value >>= b;
1578 0 : pField->SetRoadmapInteractive( b);
1579 : }
1580 0 : break;
1581 :
1582 : case BASEPROPERTY_CURRENTITEMID:
1583 : {
1584 0 : sal_Int32 nId = 0;
1585 0 : Value >>= nId;
1586 0 : pField->SelectRoadmapItemByID( (RoadmapTypes::ItemId)nId );
1587 : }
1588 0 : break;
1589 :
1590 : case BASEPROPERTY_TEXT:
1591 : {
1592 0 : OUString aStr;
1593 0 : Value >>= aStr;
1594 0 : pField->SetText( aStr );
1595 0 : pField->Invalidate();
1596 : }
1597 0 : break;
1598 :
1599 : default:
1600 0 : SVTXRoadmap_Base::setProperty( PropertyName, Value );
1601 0 : break;
1602 : }
1603 :
1604 : }
1605 : else
1606 0 : SVTXRoadmap_Base::setProperty( PropertyName, Value );
1607 0 : }
1608 :
1609 :
1610 :
1611 0 : ::com::sun::star::uno::Any SVTXRoadmap::getProperty( const OUString& PropertyName ) throw(::com::sun::star::uno::RuntimeException, std::exception)
1612 : {
1613 0 : SolarMutexGuard aGuard;
1614 :
1615 0 : ::com::sun::star::uno::Any aReturn;
1616 :
1617 0 : ::svt::ORoadmap* pField = GetRoadmap();
1618 0 : if ( pField )
1619 : {
1620 0 : sal_uInt16 nPropType = GetPropertyId( PropertyName );
1621 0 : switch (nPropType)
1622 : {
1623 : case BASEPROPERTY_COMPLETE:
1624 0 : aReturn <<= pField->IsRoadmapComplete();
1625 0 : break;
1626 : case BASEPROPERTY_ACTIVATED:
1627 0 : aReturn <<= pField->IsRoadmapInteractive();
1628 0 : break;
1629 : case BASEPROPERTY_CURRENTITEMID:
1630 0 : aReturn <<= pField->GetCurrentRoadmapItemID();
1631 0 : break;
1632 : default:
1633 0 : aReturn = SVTXRoadmap_Base::getProperty(PropertyName);
1634 0 : break;
1635 : }
1636 : }
1637 0 : return aReturn;
1638 : }
1639 :
1640 0 : void SVTXRoadmap::ImplSetNewImage()
1641 : {
1642 : OSL_PRECOND( GetWindow(), "SVTXRoadmap::ImplSetNewImage: window is required to be not-NULL!" );
1643 0 : ::svt::ORoadmap* pButton = static_cast< ::svt::ORoadmap* >( GetWindow() );
1644 0 : pButton->SetRoadmapBitmap( GetImage().GetBitmapEx() );
1645 0 : }
1646 :
1647 0 : void SVTXRoadmap::ImplGetPropertyIds( std::list< sal_uInt16 > &rIds )
1648 : {
1649 : PushPropertyIds( rIds,
1650 : BASEPROPERTY_COMPLETE,
1651 : BASEPROPERTY_ACTIVATED,
1652 : BASEPROPERTY_CURRENTITEMID,
1653 : BASEPROPERTY_TEXT,
1654 0 : 0);
1655 0 : VCLXWindow::ImplGetPropertyIds( rIds, true );
1656 0 : VCLXGraphicControl::ImplGetPropertyIds( rIds );
1657 0 : }
1658 :
1659 :
1660 : // class SVTXNumericField
1661 :
1662 0 : SVTXNumericField::SVTXNumericField()
1663 : {
1664 0 : }
1665 :
1666 0 : SVTXNumericField::~SVTXNumericField()
1667 : {
1668 0 : }
1669 :
1670 0 : ::com::sun::star::uno::Any SVTXNumericField::queryInterface( const ::com::sun::star::uno::Type & rType ) throw(::com::sun::star::uno::RuntimeException, std::exception)
1671 : {
1672 : ::com::sun::star::uno::Any aRet = ::cppu::queryInterface( rType,
1673 : (static_cast< ::com::sun::star::awt::XNumericField* >(this)),
1674 0 : (static_cast< ::com::sun::star::lang::XTypeProvider* >(this)) );
1675 0 : return (aRet.hasValue() ? aRet : SVTXFormattedField::queryInterface( rType ));
1676 : }
1677 :
1678 : // ::com::sun::star::lang::XTypeProvider
1679 0 : IMPL_XTYPEPROVIDER_START( SVTXNumericField )
1680 0 : getCppuType( ( ::com::sun::star::uno::Reference< ::com::sun::star::awt::XNumericField>* ) NULL ),
1681 : SVTXFormattedField::getTypes()
1682 0 : IMPL_XTYPEPROVIDER_END
1683 :
1684 :
1685 0 : void SVTXNumericField::setValue( double Value ) throw(::com::sun::star::uno::RuntimeException, std::exception)
1686 : {
1687 0 : SolarMutexGuard aGuard;
1688 :
1689 0 : FormattedField* pField = GetFormattedField();
1690 0 : if ( pField )
1691 0 : pField->SetValue( Value );
1692 0 : }
1693 :
1694 0 : double SVTXNumericField::getValue() throw(::com::sun::star::uno::RuntimeException, std::exception)
1695 : {
1696 0 : SolarMutexGuard aGuard;
1697 :
1698 0 : FormattedField* pField = GetFormattedField();
1699 0 : return pField ? pField->GetValue() : 0;
1700 : }
1701 :
1702 0 : void SVTXNumericField::setMin( double Value ) throw(::com::sun::star::uno::RuntimeException, std::exception)
1703 : {
1704 0 : SolarMutexGuard aGuard;
1705 :
1706 0 : FormattedField* pField = GetFormattedField();
1707 0 : if ( pField )
1708 0 : pField->SetMinValue( Value );
1709 0 : }
1710 :
1711 0 : double SVTXNumericField::getMin() throw(::com::sun::star::uno::RuntimeException, std::exception)
1712 : {
1713 0 : SolarMutexGuard aGuard;
1714 :
1715 0 : FormattedField* pField = GetFormattedField();
1716 0 : return pField ? pField->GetMinValue() : 0;
1717 : }
1718 :
1719 0 : void SVTXNumericField::setMax( double Value ) throw(::com::sun::star::uno::RuntimeException, std::exception)
1720 : {
1721 0 : SolarMutexGuard aGuard;
1722 :
1723 0 : FormattedField* pField = GetFormattedField();
1724 0 : if ( pField )
1725 0 : pField->SetMaxValue( Value );
1726 0 : }
1727 :
1728 0 : double SVTXNumericField::getMax() throw(::com::sun::star::uno::RuntimeException, std::exception)
1729 : {
1730 0 : SolarMutexGuard aGuard;
1731 :
1732 0 : FormattedField* pField = GetFormattedField();
1733 0 : return pField ? pField->GetMaxValue() : 0;
1734 : }
1735 :
1736 0 : void SVTXNumericField::setFirst( double Value ) throw(::com::sun::star::uno::RuntimeException, std::exception)
1737 : {
1738 0 : SolarMutexGuard aGuard;
1739 :
1740 0 : FormattedField* pField = GetFormattedField();
1741 0 : if ( pField )
1742 0 : pField->SetSpinFirst( Value );
1743 0 : }
1744 :
1745 0 : double SVTXNumericField::getFirst() throw(::com::sun::star::uno::RuntimeException, std::exception)
1746 : {
1747 0 : SolarMutexGuard aGuard;
1748 :
1749 0 : FormattedField* pField = GetFormattedField();
1750 0 : return pField ? pField->GetSpinFirst() : 0;
1751 : }
1752 :
1753 0 : void SVTXNumericField::setLast( double Value ) throw(::com::sun::star::uno::RuntimeException, std::exception)
1754 : {
1755 0 : SolarMutexGuard aGuard;
1756 :
1757 0 : FormattedField* pField = GetFormattedField();
1758 0 : if ( pField )
1759 0 : pField->SetSpinLast( Value );
1760 0 : }
1761 :
1762 0 : double SVTXNumericField::getLast() throw(::com::sun::star::uno::RuntimeException, std::exception)
1763 : {
1764 0 : SolarMutexGuard aGuard;
1765 :
1766 0 : FormattedField* pField = GetFormattedField();
1767 0 : return pField ? pField->GetSpinLast() : 0;
1768 : }
1769 :
1770 0 : void SVTXNumericField::setSpinSize( double Value ) throw(::com::sun::star::uno::RuntimeException, std::exception)
1771 : {
1772 0 : SolarMutexGuard aGuard;
1773 :
1774 0 : FormattedField* pField = GetFormattedField();
1775 0 : if ( pField )
1776 0 : pField->SetSpinSize( Value );
1777 0 : }
1778 :
1779 0 : double SVTXNumericField::getSpinSize() throw(::com::sun::star::uno::RuntimeException, std::exception)
1780 : {
1781 0 : SolarMutexGuard aGuard;
1782 :
1783 0 : FormattedField* pField = GetFormattedField();
1784 0 : return pField ? pField->GetSpinSize() : 0;
1785 : }
1786 :
1787 0 : void SVTXNumericField::setDecimalDigits( sal_Int16 Value ) throw(::com::sun::star::uno::RuntimeException, std::exception)
1788 : {
1789 0 : SolarMutexGuard aGuard;
1790 :
1791 0 : FormattedField* pField = GetFormattedField();
1792 0 : if ( pField )
1793 0 : pField->SetDecimalDigits( Value );
1794 0 : }
1795 :
1796 0 : sal_Int16 SVTXNumericField::getDecimalDigits() throw(::com::sun::star::uno::RuntimeException, std::exception)
1797 : {
1798 0 : SolarMutexGuard aGuard;
1799 :
1800 0 : FormattedField* pField = GetFormattedField();
1801 0 : return pField ? pField->GetDecimalDigits() : 0;
1802 : }
1803 :
1804 0 : void SVTXNumericField::setStrictFormat( sal_Bool bStrict ) throw(::com::sun::star::uno::RuntimeException, std::exception)
1805 : {
1806 0 : SolarMutexGuard aGuard;
1807 :
1808 0 : FormattedField* pField = GetFormattedField();
1809 0 : if ( pField )
1810 0 : pField->SetStrictFormat( bStrict );
1811 0 : }
1812 :
1813 0 : sal_Bool SVTXNumericField::isStrictFormat() throw(::com::sun::star::uno::RuntimeException, std::exception)
1814 : {
1815 0 : SolarMutexGuard aGuard;
1816 :
1817 0 : FormattedField* pField = GetFormattedField();
1818 0 : return pField ? pField->IsStrictFormat() : sal_False;
1819 : }
1820 :
1821 0 : void SVTXNumericField::ImplGetPropertyIds( std::list< sal_uInt16 > &rIds )
1822 : {
1823 0 : SVTXFormattedField::ImplGetPropertyIds( rIds );
1824 0 : }
1825 :
1826 :
1827 : // class SVTXCurrencyField
1828 :
1829 0 : SVTXCurrencyField::SVTXCurrencyField()
1830 : {
1831 0 : }
1832 :
1833 0 : SVTXCurrencyField::~SVTXCurrencyField()
1834 : {
1835 0 : }
1836 :
1837 0 : ::com::sun::star::uno::Any SVTXCurrencyField::queryInterface( const ::com::sun::star::uno::Type & rType ) throw(::com::sun::star::uno::RuntimeException, std::exception)
1838 : {
1839 : ::com::sun::star::uno::Any aRet = ::cppu::queryInterface( rType,
1840 : (static_cast< ::com::sun::star::awt::XCurrencyField* >(this)),
1841 0 : (static_cast< ::com::sun::star::lang::XTypeProvider* >(this)) );
1842 0 : return (aRet.hasValue() ? aRet : SVTXFormattedField::queryInterface( rType ));
1843 : }
1844 :
1845 : // ::com::sun::star::lang::XTypeProvider
1846 0 : IMPL_XTYPEPROVIDER_START( SVTXCurrencyField )
1847 0 : getCppuType( ( ::com::sun::star::uno::Reference< ::com::sun::star::awt::XCurrencyField>* ) NULL ),
1848 : SVTXFormattedField::getTypes()
1849 0 : IMPL_XTYPEPROVIDER_END
1850 :
1851 0 : void SVTXCurrencyField::setValue( double Value ) throw(::com::sun::star::uno::RuntimeException, std::exception)
1852 : {
1853 0 : SolarMutexGuard aGuard;
1854 :
1855 0 : FormattedField* pField = GetFormattedField();
1856 0 : if ( pField )
1857 0 : pField->SetValue( Value );
1858 0 : }
1859 :
1860 0 : double SVTXCurrencyField::getValue() throw(::com::sun::star::uno::RuntimeException, std::exception)
1861 : {
1862 0 : SolarMutexGuard aGuard;
1863 :
1864 0 : FormattedField* pField = GetFormattedField();
1865 0 : return pField ? pField->GetValue() : 0;
1866 : }
1867 :
1868 0 : void SVTXCurrencyField::setMin( double Value ) throw(::com::sun::star::uno::RuntimeException, std::exception)
1869 : {
1870 0 : SolarMutexGuard aGuard;
1871 :
1872 0 : FormattedField* pField = GetFormattedField();
1873 0 : if ( pField )
1874 0 : pField->SetMinValue( Value );
1875 0 : }
1876 :
1877 0 : double SVTXCurrencyField::getMin() throw(::com::sun::star::uno::RuntimeException, std::exception)
1878 : {
1879 0 : SolarMutexGuard aGuard;
1880 :
1881 0 : FormattedField* pField = GetFormattedField();
1882 0 : return pField ? pField->GetMinValue() : 0;
1883 : }
1884 :
1885 0 : void SVTXCurrencyField::setMax( double Value ) throw(::com::sun::star::uno::RuntimeException, std::exception)
1886 : {
1887 0 : SolarMutexGuard aGuard;
1888 :
1889 0 : FormattedField* pField = GetFormattedField();
1890 0 : if ( pField )
1891 0 : pField->SetMaxValue( Value );
1892 0 : }
1893 :
1894 0 : double SVTXCurrencyField::getMax() throw(::com::sun::star::uno::RuntimeException, std::exception)
1895 : {
1896 0 : SolarMutexGuard aGuard;
1897 :
1898 0 : FormattedField* pField = GetFormattedField();
1899 0 : return pField ? pField->GetMaxValue() : 0;
1900 : }
1901 :
1902 0 : void SVTXCurrencyField::setFirst( double Value ) throw(::com::sun::star::uno::RuntimeException, std::exception)
1903 : {
1904 0 : SolarMutexGuard aGuard;
1905 :
1906 0 : FormattedField* pField = GetFormattedField();
1907 0 : if ( pField )
1908 0 : pField->SetSpinFirst( Value );
1909 0 : }
1910 :
1911 0 : double SVTXCurrencyField::getFirst() throw(::com::sun::star::uno::RuntimeException, std::exception)
1912 : {
1913 0 : SolarMutexGuard aGuard;
1914 :
1915 0 : FormattedField* pField = GetFormattedField();
1916 0 : return pField ? pField->GetSpinFirst() : 0;
1917 : }
1918 :
1919 0 : void SVTXCurrencyField::setLast( double Value ) throw(::com::sun::star::uno::RuntimeException, std::exception)
1920 : {
1921 0 : SolarMutexGuard aGuard;
1922 :
1923 0 : FormattedField* pField = GetFormattedField();
1924 0 : if ( pField )
1925 0 : pField->SetSpinLast( Value );
1926 0 : }
1927 :
1928 0 : double SVTXCurrencyField::getLast() throw(::com::sun::star::uno::RuntimeException, std::exception)
1929 : {
1930 0 : SolarMutexGuard aGuard;
1931 :
1932 0 : FormattedField* pField = GetFormattedField();
1933 0 : return pField ? pField->GetSpinLast() : 0;
1934 : }
1935 :
1936 0 : void SVTXCurrencyField::setSpinSize( double Value ) throw(::com::sun::star::uno::RuntimeException, std::exception)
1937 : {
1938 0 : SolarMutexGuard aGuard;
1939 :
1940 0 : FormattedField* pField = GetFormattedField();
1941 0 : if ( pField )
1942 0 : pField->SetSpinSize( Value );
1943 0 : }
1944 :
1945 0 : double SVTXCurrencyField::getSpinSize() throw(::com::sun::star::uno::RuntimeException, std::exception)
1946 : {
1947 0 : SolarMutexGuard aGuard;
1948 :
1949 0 : FormattedField* pField = GetFormattedField();
1950 0 : return pField ? pField->GetSpinSize() : 0;
1951 : }
1952 :
1953 0 : void SVTXCurrencyField::setDecimalDigits( sal_Int16 Value ) throw(::com::sun::star::uno::RuntimeException, std::exception)
1954 : {
1955 0 : SolarMutexGuard aGuard;
1956 :
1957 0 : FormattedField* pField = GetFormattedField();
1958 0 : if ( pField )
1959 0 : pField->SetDecimalDigits( Value );
1960 0 : }
1961 :
1962 0 : sal_Int16 SVTXCurrencyField::getDecimalDigits() throw(::com::sun::star::uno::RuntimeException, std::exception)
1963 : {
1964 0 : SolarMutexGuard aGuard;
1965 :
1966 0 : FormattedField* pField = GetFormattedField();
1967 0 : return pField ? pField->GetDecimalDigits() : 0;
1968 : }
1969 :
1970 0 : void SVTXCurrencyField::setStrictFormat( sal_Bool bStrict ) throw(::com::sun::star::uno::RuntimeException, std::exception)
1971 : {
1972 0 : SolarMutexGuard aGuard;
1973 :
1974 0 : FormattedField* pField = GetFormattedField();
1975 0 : if ( pField )
1976 0 : pField->SetStrictFormat( bStrict );
1977 0 : }
1978 :
1979 0 : sal_Bool SVTXCurrencyField::isStrictFormat() throw(::com::sun::star::uno::RuntimeException, std::exception)
1980 : {
1981 0 : SolarMutexGuard aGuard;
1982 :
1983 0 : FormattedField* pField = GetFormattedField();
1984 0 : return pField ? pField->IsStrictFormat() : sal_False;
1985 : }
1986 :
1987 0 : void SVTXCurrencyField::setProperty( const OUString& PropertyName, const ::com::sun::star::uno::Any& Value) throw(::com::sun::star::uno::RuntimeException, std::exception)
1988 : {
1989 0 : SolarMutexGuard aGuard;
1990 :
1991 0 : DoubleCurrencyField* pField = (DoubleCurrencyField*)GetFormattedField();
1992 0 : if ( pField )
1993 : {
1994 0 : sal_uInt16 nPropType = GetPropertyId( PropertyName );
1995 0 : switch (nPropType)
1996 : {
1997 : case BASEPROPERTY_CURRENCYSYMBOL:
1998 : {
1999 0 : OUString aStr;
2000 0 : Value >>= aStr;
2001 0 : pField->setCurrencySymbol( aStr );
2002 : }
2003 0 : break;
2004 : case BASEPROPERTY_CURSYM_POSITION:
2005 : {
2006 0 : sal_Bool b = false;
2007 0 : Value >>= b;
2008 0 : pField->setPrependCurrSym(b);
2009 : }
2010 0 : break;
2011 :
2012 : default:
2013 0 : SVTXFormattedField::setProperty(PropertyName, Value);
2014 : }
2015 : }
2016 : else
2017 0 : SVTXFormattedField::setProperty(PropertyName, Value);
2018 0 : }
2019 :
2020 0 : ::com::sun::star::uno::Any SVTXCurrencyField::getProperty( const OUString& PropertyName ) throw(::com::sun::star::uno::RuntimeException, std::exception)
2021 : {
2022 0 : SolarMutexGuard aGuard;
2023 :
2024 0 : ::com::sun::star::uno::Any aReturn;
2025 :
2026 0 : DoubleCurrencyField* pField = (DoubleCurrencyField*)GetFormattedField();
2027 0 : if ( pField )
2028 : {
2029 0 : sal_uInt16 nPropType = GetPropertyId( PropertyName );
2030 0 : switch (nPropType)
2031 : {
2032 : case BASEPROPERTY_CURRENCYSYMBOL:
2033 : {
2034 0 : aReturn <<= OUString( pField->getCurrencySymbol() );
2035 : }
2036 0 : break;
2037 : case BASEPROPERTY_CURSYM_POSITION:
2038 : {
2039 0 : aReturn <<= pField->getPrependCurrSym();
2040 : }
2041 0 : break;
2042 : default:
2043 0 : return SVTXFormattedField::getProperty(PropertyName);
2044 : }
2045 : }
2046 0 : return SVTXFormattedField::getProperty(PropertyName);
2047 : }
2048 :
2049 0 : void SVTXCurrencyField::ImplGetPropertyIds( std::list< sal_uInt16 > &rIds )
2050 : {
2051 : PushPropertyIds( rIds,
2052 : BASEPROPERTY_CURRENCYSYMBOL,
2053 : BASEPROPERTY_CURSYM_POSITION,
2054 0 : 0);
2055 0 : SVTXFormattedField::ImplGetPropertyIds( rIds );
2056 0 : }
2057 :
2058 :
2059 :
2060 : // class VCLXProgressBar
2061 :
2062 :
2063 0 : VCLXProgressBar::VCLXProgressBar()
2064 : :m_nValue(0)
2065 : ,m_nValueMin(0)
2066 0 : ,m_nValueMax(100)
2067 : {
2068 0 : }
2069 :
2070 0 : VCLXProgressBar::~VCLXProgressBar()
2071 : {
2072 0 : }
2073 :
2074 0 : void VCLXProgressBar::ImplUpdateValue()
2075 : {
2076 0 : ProgressBar* pProgressBar = (ProgressBar*) GetWindow();
2077 0 : if ( pProgressBar )
2078 : {
2079 : sal_Int32 nVal;
2080 : sal_Int32 nValMin;
2081 : sal_Int32 nValMax;
2082 :
2083 : // check min and max
2084 0 : if (m_nValueMin < m_nValueMax)
2085 : {
2086 0 : nValMin = m_nValueMin;
2087 0 : nValMax = m_nValueMax;
2088 : }
2089 : else
2090 : {
2091 0 : nValMin = m_nValueMax;
2092 0 : nValMax = m_nValueMin;
2093 : }
2094 :
2095 : // check value
2096 0 : if (m_nValue < nValMin)
2097 : {
2098 0 : nVal = nValMin;
2099 : }
2100 0 : else if (m_nValue > nValMax)
2101 : {
2102 0 : nVal = nValMax;
2103 : }
2104 : else
2105 : {
2106 0 : nVal = m_nValue;
2107 : }
2108 :
2109 : // calculate percent
2110 : sal_Int32 nPercent;
2111 0 : if (nValMin != nValMax)
2112 : {
2113 0 : nPercent = 100 * (nVal - nValMin) / (nValMax - nValMin);
2114 : }
2115 : else
2116 : {
2117 0 : nPercent = 0;
2118 : }
2119 :
2120 : // set progressbar value
2121 0 : pProgressBar->SetValue( (sal_uInt16) nPercent );
2122 : }
2123 0 : }
2124 :
2125 : // ::com::sun::star::uno::XInterface
2126 0 : ::com::sun::star::uno::Any VCLXProgressBar::queryInterface( const ::com::sun::star::uno::Type & rType ) throw(::com::sun::star::uno::RuntimeException, std::exception)
2127 : {
2128 : ::com::sun::star::uno::Any aRet = ::cppu::queryInterface( rType,
2129 : (static_cast< ::com::sun::star::awt::XProgressBar* >(this)),
2130 0 : (static_cast< ::com::sun::star::lang::XTypeProvider* >(this)) );
2131 0 : return (aRet.hasValue() ? aRet : VCLXWindow::queryInterface( rType ));
2132 : }
2133 :
2134 : // ::com::sun::star::lang::XTypeProvider
2135 0 : IMPL_XTYPEPROVIDER_START( VCLXProgressBar )
2136 0 : getCppuType( ( ::com::sun::star::uno::Reference< ::com::sun::star::awt::XProgressBar>* ) NULL ),
2137 : VCLXWindow::getTypes()
2138 0 : IMPL_XTYPEPROVIDER_END
2139 :
2140 : // ::com::sun::star::awt::XProgressBar
2141 0 : void VCLXProgressBar::setForegroundColor( sal_Int32 nColor ) throw(::com::sun::star::uno::RuntimeException, std::exception)
2142 : {
2143 0 : SolarMutexGuard aGuard;
2144 :
2145 0 : Window* pWindow = GetWindow();
2146 0 : if ( pWindow )
2147 : {
2148 0 : Color aColor( nColor );
2149 0 : pWindow->SetControlForeground( aColor );
2150 0 : }
2151 0 : }
2152 :
2153 0 : void VCLXProgressBar::setBackgroundColor( sal_Int32 nColor ) throw(::com::sun::star::uno::RuntimeException, std::exception)
2154 : {
2155 0 : SolarMutexGuard aGuard;
2156 :
2157 0 : Window* pWindow = GetWindow();
2158 0 : if ( pWindow )
2159 : {
2160 0 : Color aColor( nColor );
2161 0 : pWindow->SetBackground( aColor );
2162 0 : pWindow->SetControlBackground( aColor );
2163 0 : pWindow->Invalidate();
2164 0 : }
2165 0 : }
2166 :
2167 0 : void VCLXProgressBar::setValue( sal_Int32 nValue ) throw(::com::sun::star::uno::RuntimeException, std::exception)
2168 : {
2169 0 : SolarMutexGuard aGuard;
2170 :
2171 0 : m_nValue = nValue;
2172 0 : ImplUpdateValue();
2173 0 : }
2174 :
2175 0 : void VCLXProgressBar::setRange( sal_Int32 nMin, sal_Int32 nMax ) throw(::com::sun::star::uno::RuntimeException, std::exception )
2176 : {
2177 0 : SolarMutexGuard aGuard;
2178 :
2179 0 : if ( nMin < nMax )
2180 : {
2181 : // take correct min and max
2182 0 : m_nValueMin = nMin;
2183 0 : m_nValueMax = nMax;
2184 : }
2185 : else
2186 : {
2187 : // change min and max
2188 0 : m_nValueMin = nMax;
2189 0 : m_nValueMax = nMin;
2190 : }
2191 :
2192 0 : ImplUpdateValue();
2193 0 : }
2194 :
2195 0 : sal_Int32 VCLXProgressBar::getValue() throw(::com::sun::star::uno::RuntimeException, std::exception)
2196 : {
2197 0 : SolarMutexGuard aGuard;
2198 :
2199 0 : return m_nValue;
2200 : }
2201 :
2202 : // ::com::sun::star::awt::VclWindowPeer
2203 0 : void VCLXProgressBar::setProperty( const OUString& PropertyName, const ::com::sun::star::uno::Any& Value) throw(::com::sun::star::uno::RuntimeException, std::exception)
2204 : {
2205 0 : SolarMutexGuard aGuard;
2206 :
2207 0 : ProgressBar* pProgressBar = (ProgressBar*)GetWindow();
2208 0 : if ( pProgressBar )
2209 : {
2210 0 : sal_uInt16 nPropType = GetPropertyId( PropertyName );
2211 0 : switch ( nPropType )
2212 : {
2213 : case BASEPROPERTY_PROGRESSVALUE:
2214 : {
2215 0 : if ( Value >>= m_nValue )
2216 0 : ImplUpdateValue();
2217 : }
2218 0 : break;
2219 : case BASEPROPERTY_PROGRESSVALUE_MIN:
2220 : {
2221 0 : if ( Value >>= m_nValueMin )
2222 0 : ImplUpdateValue();
2223 : }
2224 0 : break;
2225 : case BASEPROPERTY_PROGRESSVALUE_MAX:
2226 : {
2227 0 : if ( Value >>= m_nValueMax )
2228 0 : ImplUpdateValue();
2229 : }
2230 0 : break;
2231 : case BASEPROPERTY_FILLCOLOR:
2232 : {
2233 0 : Window* pWindow = GetWindow();
2234 0 : if ( pWindow )
2235 : {
2236 0 : sal_Bool bVoid = Value.getValueType().getTypeClass() == ::com::sun::star::uno::TypeClass_VOID;
2237 :
2238 0 : if ( bVoid )
2239 : {
2240 0 : pWindow->SetControlForeground();
2241 : }
2242 : else
2243 : {
2244 0 : sal_Int32 nColor = 0;
2245 0 : if ( Value >>= nColor )
2246 : {
2247 0 : Color aColor( nColor );
2248 0 : pWindow->SetControlForeground( aColor );
2249 : }
2250 : }
2251 : }
2252 : }
2253 0 : break;
2254 : default:
2255 0 : VCLXWindow::setProperty( PropertyName, Value );
2256 0 : break;
2257 : }
2258 0 : }
2259 0 : }
2260 :
2261 0 : ::com::sun::star::uno::Any VCLXProgressBar::getProperty( const OUString& PropertyName ) throw(::com::sun::star::uno::RuntimeException, std::exception)
2262 : {
2263 0 : SolarMutexGuard aGuard;
2264 :
2265 0 : ::com::sun::star::uno::Any aProp;
2266 0 : ProgressBar* pProgressBar = (ProgressBar*)GetWindow();
2267 0 : if ( pProgressBar )
2268 : {
2269 0 : sal_uInt16 nPropType = GetPropertyId( PropertyName );
2270 0 : switch ( nPropType )
2271 : {
2272 : case BASEPROPERTY_PROGRESSVALUE:
2273 : {
2274 0 : aProp <<= m_nValue;
2275 : }
2276 0 : break;
2277 : case BASEPROPERTY_PROGRESSVALUE_MIN:
2278 : {
2279 0 : aProp <<= m_nValueMin;
2280 : }
2281 0 : break;
2282 : case BASEPROPERTY_PROGRESSVALUE_MAX:
2283 : {
2284 0 : aProp <<= m_nValueMax;
2285 : }
2286 0 : break;
2287 : default:
2288 0 : aProp <<= VCLXWindow::getProperty( PropertyName );
2289 0 : break;
2290 : }
2291 : }
2292 0 : return aProp;
2293 : }
2294 :
2295 0 : void VCLXProgressBar::ImplGetPropertyIds( std::list< sal_uInt16 > &rIds )
2296 : {
2297 : PushPropertyIds( rIds,
2298 : BASEPROPERTY_PROGRESSVALUE,
2299 : BASEPROPERTY_PROGRESSVALUE_MIN,
2300 : BASEPROPERTY_PROGRESSVALUE_MAX,
2301 : BASEPROPERTY_FILLCOLOR,
2302 0 : 0);
2303 0 : VCLXWindow::ImplGetPropertyIds( rIds, true );
2304 0 : }
2305 :
2306 :
2307 :
2308 : // class SVTXDateField
2309 :
2310 0 : SVTXDateField::SVTXDateField()
2311 0 : :VCLXDateField()
2312 : {
2313 0 : }
2314 :
2315 0 : SVTXDateField::~SVTXDateField()
2316 : {
2317 0 : }
2318 :
2319 0 : void SAL_CALL SVTXDateField::setProperty( const OUString& PropertyName, const ::com::sun::star::uno::Any& Value ) throw(::com::sun::star::uno::RuntimeException, std::exception)
2320 : {
2321 0 : VCLXDateField::setProperty( PropertyName, Value );
2322 :
2323 : // some properties need to be forwarded to the sub edit, too
2324 0 : Edit* pSubEdit = GetWindow() ? static_cast< Edit* >( GetWindow() )->GetSubEdit() : NULL;
2325 0 : if ( !pSubEdit )
2326 0 : return;
2327 :
2328 0 : switch ( GetPropertyId( PropertyName ) )
2329 : {
2330 : case BASEPROPERTY_TEXTLINECOLOR:
2331 0 : if ( !Value.hasValue() )
2332 0 : pSubEdit->SetTextLineColor();
2333 : else
2334 : {
2335 0 : sal_Int32 nColor = 0;
2336 0 : if ( Value >>= nColor )
2337 0 : pSubEdit->SetTextLineColor( Color( nColor ) );
2338 : }
2339 0 : break;
2340 : }
2341 : }
2342 :
2343 0 : void SVTXDateField::ImplGetPropertyIds( std::list< sal_uInt16 > &rIds )
2344 : {
2345 : PushPropertyIds( rIds,
2346 : BASEPROPERTY_TEXTLINECOLOR,
2347 0 : 0);
2348 0 : VCLXDateField::ImplGetPropertyIds( rIds );
2349 0 : }
2350 :
2351 : /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
|