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 2160 : SAL_DLLPUBLIC_EXPORT Window* CreateWindow( VCLXWindow** ppNewComp, const ::com::sun::star::awt::WindowDescriptor* pDescriptor, Window* pParent, WinBits nWinBits )
63 : {
64 2160 : Window* pWindow = NULL;
65 2160 : String aServiceName( pDescriptor->WindowServiceName );
66 2160 : if ( aServiceName.EqualsIgnoreCaseAscii( "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 2160 : else if ( aServiceName.EqualsIgnoreCaseAscii( "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 2160 : else if (aServiceName.EqualsIgnoreCaseAscii("FormattedField") )
94 : {
95 0 : pWindow = new FormattedField( pParent, nWinBits );
96 0 : *ppNewComp = new SVTXFormattedField;
97 : }
98 2160 : else if (aServiceName.EqualsIgnoreCaseAscii("NumericField") )
99 : {
100 0 : pWindow = new DoubleNumericField( pParent, nWinBits );
101 0 : *ppNewComp = new SVTXNumericField;
102 : }
103 2160 : else if (aServiceName.EqualsIgnoreCaseAscii("LongCurrencyField") )
104 : {
105 0 : pWindow = new DoubleCurrencyField( pParent, nWinBits );
106 0 : *ppNewComp = new SVTXCurrencyField;
107 : }
108 2160 : else if (aServiceName.EqualsIgnoreCaseAscii("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( sal_True );
114 0 : *ppNewComp = new SVTXDateField;
115 0 : ((VCLXFormattedSpinField*)*ppNewComp)->SetFormatter( (FormatterBase*)(DateField*)pWindow );
116 : }
117 2160 : else if (aServiceName.EqualsIgnoreCaseAscii("roadmap") )
118 : {
119 0 : pWindow = new ::svt::ORoadmap( pParent, WB_TABSTOP );
120 0 : *ppNewComp = new SVTXRoadmap;
121 : }
122 2160 : else if ( aServiceName.EqualsIgnoreCaseAscii( "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 2160 : else if ( aServiceName.EqualsIgnoreCaseAscii( "Tree" ) )
136 : {
137 0 : TreeControlPeer* pPeer = new TreeControlPeer;
138 0 : *ppNewComp = pPeer;
139 0 : pWindow = pPeer->createVclControl( pParent, nWinBits );
140 : }
141 2160 : else if ( aServiceName.EqualsIgnoreCaseAscii( "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 2160 : else if ( aServiceName.EqualsIgnoreCaseAscii( "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 2160 : 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)
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)
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)
209 : {
210 0 : maTextListeners.removeInterface( l );
211 0 : }
212 :
213 0 : void VCLXMultiLineEdit::setText( const ::rtl::OUString& aText ) throw(::com::sun::star::uno::RuntimeException)
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( sal_True );
224 0 : pEdit->SetModifyFlag();
225 0 : pEdit->Modify();
226 0 : SetSynthesizingVCLEvent( sal_False );
227 0 : }
228 0 : }
229 :
230 0 : void VCLXMultiLineEdit::insertText( const ::com::sun::star::awt::Selection& rSel, const ::rtl::OUString& aText ) throw(::com::sun::star::uno::RuntimeException)
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 : ::rtl::OUString VCLXMultiLineEdit::getText() throw(::com::sun::star::uno::RuntimeException)
243 : {
244 0 : SolarMutexGuard aGuard;
245 :
246 0 : ::rtl::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 : ::rtl::OUString VCLXMultiLineEdit::getSelectedText() throw(::com::sun::star::uno::RuntimeException)
254 : {
255 0 : SolarMutexGuard aGuard;
256 :
257 0 : ::rtl::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)
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)
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)
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)
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)
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)
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 : ::rtl::OUString VCLXMultiLineEdit::getTextLines() throw(::com::sun::star::uno::RuntimeException)
325 : {
326 0 : SolarMutexGuard aGuard;
327 :
328 0 : ::rtl::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)
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)
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)
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)
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->CalcSize( 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)
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 ::rtl::OUString& PropertyName, const ::com::sun::star::uno::Any& Value) throw(::com::sun::star::uno::RuntimeException)
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 ::rtl::OUString& PropertyName ) throw(::com::sun::star::uno::RuntimeException)
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)
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)
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 ::rtl::OUString& PropertyName, const ::com::sun::star::uno::Any& Value) throw(::com::sun::star::uno::RuntimeException)
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)
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)
611 : {
612 0 : maTextListeners.removeInterface( l );
613 0 : }
614 :
615 0 : void VCLXFileControl::setText( const ::rtl::OUString& aText ) throw(::com::sun::star::uno::RuntimeException)
616 : {
617 0 : SolarMutexGuard aGuard;
618 :
619 0 : Window* pWindow = GetWindow();
620 0 : if ( pWindow )
621 : {
622 0 : pWindow->SetText( aText );
623 :
624 : // In JAVA wird auch ein textChanged ausgeloest, in VCL nicht.
625 : // ::com::sun::star::awt::Toolkit soll JAVA-komform sein...
626 0 : ModifyHdl( NULL );
627 0 : }
628 0 : }
629 :
630 0 : void VCLXFileControl::insertText( const ::com::sun::star::awt::Selection& rSel, const ::rtl::OUString& aText ) throw(::com::sun::star::uno::RuntimeException)
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 : ::rtl::OUString VCLXFileControl::getText() throw(::com::sun::star::uno::RuntimeException)
643 : {
644 0 : SolarMutexGuard aGuard;
645 :
646 0 : ::rtl::OUString aText;
647 0 : Window* pWindow = GetWindow();
648 0 : if ( pWindow )
649 0 : aText = pWindow->GetText();
650 0 : return aText;
651 : }
652 :
653 0 : ::rtl::OUString VCLXFileControl::getSelectedText() throw(::com::sun::star::uno::RuntimeException)
654 : {
655 0 : SolarMutexGuard aGuard;
656 :
657 0 : ::rtl::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)
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)
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)
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)
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)
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)
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)
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)
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)
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)
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)
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 = (sal_Int16) 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(sal_True);
831 0 : }
832 :
833 : // --------------------------------------------------------------------------------------
834 0 : void SVTXFormattedField::setProperty( const ::rtl::OUString& PropertyName, const ::com::sun::star::uno::Any& Value) throw(::com::sun::star::uno::RuntimeException)
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 : 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 ::rtl::OUString& PropertyName ) throw(::com::sun::star::uno::RuntimeException)
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 : String sConverted;
1055 0 : pFormatter->GetOutputString(d, 0, sConverted, &pDum);
1056 0 : aReturn <<= ::rtl::OUString( sConverted );
1057 : }
1058 0 : break;
1059 : case ::com::sun::star::uno::TypeClass_STRING:
1060 : {
1061 0 : ::rtl::OUString aStr;
1062 0 : rValue >>= aStr;
1063 0 : String sValue = aStr;
1064 0 : if (pField->TreatingAsNumber())
1065 : {
1066 0 : SvNumberFormatter* pFormatter = pField->GetFormatter();
1067 0 : if (!pFormatter)
1068 0 : pFormatter = pField->StandardFormatter();
1069 :
1070 : double dVal;
1071 0 : sal_uInt32 nTestFormat(0);
1072 0 : if (!pFormatter->IsNumberFormat(sValue, nTestFormat, dVal))
1073 0 : aReturn.clear();
1074 0 : aReturn <<=dVal;
1075 : }
1076 : else
1077 0 : aReturn <<= aStr;
1078 : }
1079 0 : break;
1080 : default:
1081 0 : aReturn.clear();
1082 0 : break;
1083 : }
1084 0 : return aReturn;
1085 : }
1086 :
1087 : // --------------------------------------------------------------------------------------
1088 0 : void SVTXFormattedField::SetMinValue(const ::com::sun::star::uno::Any& rValue)
1089 : {
1090 0 : FormattedField* pField = GetFormattedField();
1091 0 : if (!pField)
1092 0 : return;
1093 :
1094 0 : switch (rValue.getValueType().getTypeClass())
1095 :
1096 : {
1097 : case ::com::sun::star::uno::TypeClass_DOUBLE:
1098 : {
1099 0 : double d = 0.0;
1100 0 : rValue >>= d;
1101 0 : pField->SetMinValue(d);
1102 : }
1103 0 : break;
1104 : default:
1105 : DBG_ASSERT(rValue.getValueType().getTypeClass() == ::com::sun::star::uno::TypeClass_VOID, "SVTXFormattedField::SetMinValue : invalid argument (an exception will be thrown) !");
1106 0 : if ( rValue.getValueType().getTypeClass() != ::com::sun::star::uno::TypeClass_VOID )
1107 :
1108 : {
1109 0 : throw ::com::sun::star::lang::IllegalArgumentException();
1110 : }
1111 0 : pField->ClearMinValue();
1112 0 : break;
1113 : }
1114 : }
1115 :
1116 : // --------------------------------------------------------------------------------------
1117 0 : ::com::sun::star::uno::Any SVTXFormattedField::GetMinValue()
1118 : {
1119 0 : FormattedField* pField = GetFormattedField();
1120 0 : if (!pField || !pField->HasMinValue())
1121 0 : return ::com::sun::star::uno::Any();
1122 :
1123 0 : ::com::sun::star::uno::Any aReturn;
1124 0 : aReturn <<= pField->GetMinValue();
1125 0 : return aReturn;
1126 : }
1127 :
1128 : // --------------------------------------------------------------------------------------
1129 0 : void SVTXFormattedField::SetMaxValue(const ::com::sun::star::uno::Any& rValue)
1130 : {
1131 0 : FormattedField* pField = GetFormattedField();
1132 0 : if (!pField)
1133 0 : return;
1134 :
1135 0 : switch (rValue.getValueType().getTypeClass())
1136 :
1137 : {
1138 : case ::com::sun::star::uno::TypeClass_DOUBLE:
1139 : {
1140 0 : double d = 0.0;
1141 0 : rValue >>= d;
1142 0 : pField->SetMaxValue(d);
1143 : }
1144 0 : break;
1145 : default:
1146 0 : if (rValue.getValueType().getTypeClass() != ::com::sun::star::uno::TypeClass_VOID)
1147 :
1148 : {
1149 0 : throw ::com::sun::star::lang::IllegalArgumentException();
1150 : }
1151 0 : pField->ClearMaxValue();
1152 0 : break;
1153 : }
1154 : }
1155 :
1156 : // --------------------------------------------------------------------------------------
1157 0 : ::com::sun::star::uno::Any SVTXFormattedField::GetMaxValue()
1158 : {
1159 0 : FormattedField* pField = GetFormattedField();
1160 0 : if (!pField || !pField->HasMaxValue())
1161 0 : return ::com::sun::star::uno::Any();
1162 :
1163 0 : ::com::sun::star::uno::Any aReturn;
1164 0 : aReturn <<= pField->GetMaxValue();
1165 0 : return aReturn;
1166 : }
1167 :
1168 : // --------------------------------------------------------------------------------------
1169 0 : void SVTXFormattedField::SetDefaultValue(const ::com::sun::star::uno::Any& rValue)
1170 : {
1171 0 : FormattedField* pField = GetFormattedField();
1172 0 : if (!pField)
1173 0 : return;
1174 :
1175 0 : ::com::sun::star::uno::Any aConverted = convertEffectiveValue(rValue);
1176 :
1177 0 : switch (aConverted.getValueType().getTypeClass())
1178 :
1179 : {
1180 : case ::com::sun::star::uno::TypeClass_DOUBLE:
1181 : {
1182 0 : double d = 0.0;
1183 0 : aConverted >>= d;
1184 0 : pField->SetDefaultValue(d);
1185 : }
1186 0 : break;
1187 : case ::com::sun::star::uno::TypeClass_STRING:
1188 : {
1189 0 : ::rtl::OUString aStr;
1190 0 : aConverted >>= aStr;
1191 0 : pField->SetDefaultText( aStr );
1192 : }
1193 0 : break;
1194 : default:
1195 0 : pField->EnableEmptyField(sal_True);
1196 : // nur noch void erlaubt
1197 0 : break;
1198 0 : }
1199 : }
1200 :
1201 : // --------------------------------------------------------------------------------------
1202 0 : ::com::sun::star::uno::Any SVTXFormattedField::GetDefaultValue()
1203 : {
1204 0 : FormattedField* pField = GetFormattedField();
1205 0 : if (!pField || pField->IsEmptyFieldEnabled())
1206 0 : return ::com::sun::star::uno::Any();
1207 :
1208 0 : ::com::sun::star::uno::Any aReturn;
1209 0 : if (pField->TreatingAsNumber())
1210 0 : aReturn <<= pField->GetDefaultValue();
1211 : else
1212 0 : aReturn <<= ::rtl::OUString( pField->GetDefaultText() );
1213 0 : return aReturn;
1214 : }
1215 :
1216 : // --------------------------------------------------------------------------------------
1217 0 : sal_Bool SVTXFormattedField::GetTreatAsNumber()
1218 : {
1219 0 : FormattedField* pField = GetFormattedField();
1220 0 : if (pField)
1221 0 : return pField->TreatingAsNumber();
1222 :
1223 0 : return sal_True;
1224 : }
1225 :
1226 : // --------------------------------------------------------------------------------------
1227 0 : void SVTXFormattedField::SetTreatAsNumber(sal_Bool bSet)
1228 : {
1229 0 : FormattedField* pField = GetFormattedField();
1230 0 : if (pField)
1231 0 : pField->TreatAsNumber(bSet);
1232 0 : }
1233 :
1234 : // --------------------------------------------------------------------------------------
1235 0 : ::com::sun::star::uno::Any SVTXFormattedField::GetValue()
1236 : {
1237 0 : FormattedField* pField = GetFormattedField();
1238 0 : if (!pField)
1239 0 : return ::com::sun::star::uno::Any();
1240 :
1241 0 : ::com::sun::star::uno::Any aReturn;
1242 0 : if (!pField->TreatingAsNumber())
1243 : {
1244 0 : ::rtl::OUString sText = pField->GetTextValue();
1245 0 : aReturn <<= sText;
1246 : }
1247 : else
1248 : {
1249 0 : if (pField->GetText().Len()) // empty wird erst mal standardmaessig als void nach draussen gereicht
1250 0 : aReturn <<= pField->GetValue();
1251 : }
1252 :
1253 0 : return aReturn;
1254 : }
1255 :
1256 : // --------------------------------------------------------------------------------------
1257 0 : void SVTXFormattedField::SetValue(const ::com::sun::star::uno::Any& rValue)
1258 : {
1259 0 : FormattedField* pField = GetFormattedField();
1260 0 : if (!pField)
1261 0 : return;
1262 :
1263 0 : if (!rValue.hasValue())
1264 : {
1265 0 : pField->SetText(String());
1266 : }
1267 : else
1268 : {
1269 0 : if (rValue.getValueType().getTypeClass() == ::com::sun::star::uno::TypeClass_DOUBLE )
1270 : {
1271 0 : double d = 0.0;
1272 0 : rValue >>= d;
1273 0 : pField->SetValue(d);
1274 : }
1275 : else
1276 : {
1277 : DBG_ASSERT(rValue.getValueType().getTypeClass() == ::com::sun::star::uno::TypeClass_STRING, "SVTXFormattedField::SetValue : invalid argument !");
1278 :
1279 0 : ::rtl::OUString sText;
1280 0 : rValue >>= sText;
1281 0 : String aStr( sText );
1282 0 : if (!pField->TreatingAsNumber())
1283 0 : pField->SetTextFormatted(aStr);
1284 : else
1285 0 : pField->SetTextValue(aStr);
1286 : }
1287 : }
1288 : // NotifyTextListeners();
1289 : }
1290 :
1291 : // --------------------------------------------------------------------------------------
1292 0 : ::com::sun::star::uno::Reference< ::com::sun::star::util::XNumberFormatsSupplier > SVTXFormattedField::getFormatsSupplier(void) const
1293 : {
1294 0 : return ::com::sun::star::uno::Reference< ::com::sun::star::util::XNumberFormatsSupplier > ((::com::sun::star::util::XNumberFormatsSupplier*)m_pCurrentSupplier);
1295 : }
1296 :
1297 : // --------------------------------------------------------------------------------------
1298 0 : void SVTXFormattedField::setFormatsSupplier(const ::com::sun::star::uno::Reference< ::com::sun::star::util::XNumberFormatsSupplier > & xSupplier)
1299 : {
1300 0 : FormattedField* pField = GetFormattedField();
1301 :
1302 0 : SvNumberFormatsSupplierObj* pNew = NULL;
1303 0 : if (!xSupplier.is())
1304 : {
1305 0 : if (pField)
1306 : {
1307 0 : pNew = new SvNumberFormatsSupplierObj(pField->StandardFormatter());
1308 0 : bIsStandardSupplier = sal_True;
1309 : }
1310 : }
1311 : else
1312 : {
1313 0 : pNew = SvNumberFormatsSupplierObj::getImplementation(xSupplier);
1314 0 : bIsStandardSupplier = sal_False;
1315 : }
1316 :
1317 0 : if (!pNew)
1318 0 : return; // TODO : wie das behandeln ?
1319 :
1320 0 : if (m_pCurrentSupplier)
1321 0 : m_pCurrentSupplier->release();
1322 0 : m_pCurrentSupplier = pNew;
1323 0 : m_pCurrentSupplier->acquire();
1324 0 : if (pField)
1325 : {
1326 : // den aktuellen Value mit hinueberretten
1327 0 : ::com::sun::star::uno::Any aCurrent = GetValue();
1328 0 : pField->SetFormatter(m_pCurrentSupplier->GetNumberFormatter(), sal_False);
1329 0 : if (nKeyToSetDelayed != -1)
1330 : {
1331 0 : pField->SetFormatKey(nKeyToSetDelayed);
1332 0 : nKeyToSetDelayed = -1;
1333 : }
1334 0 : SetValue(aCurrent);
1335 0 : NotifyTextListeners();
1336 : }
1337 : }
1338 :
1339 : // --------------------------------------------------------------------------------------
1340 0 : sal_Int32 SVTXFormattedField::getFormatKey(void) const
1341 : {
1342 0 : FormattedField* pField = GetFormattedField();
1343 0 : return pField ? pField->GetFormatKey() : 0;
1344 : }
1345 :
1346 : // --------------------------------------------------------------------------------------
1347 0 : void SVTXFormattedField::setFormatKey(sal_Int32 nKey)
1348 : {
1349 0 : FormattedField* pField = GetFormattedField();
1350 0 : if (pField)
1351 : {
1352 0 : if (pField->GetFormatter())
1353 0 : pField->SetFormatKey(nKey);
1354 : else
1355 : { // Wahrscheinlich bin ich gerade in einem Block, in dem erst der Key und dann der Formatter gesetzt
1356 : // wird, das passiert initial mit ziemlicher Sicherheit, da die Properties in alphabetischer Reihenfolge
1357 : // gesetzt werden, und der FormatsSupplier nun mal vor dem FormatKey kommt
1358 0 : nKeyToSetDelayed = nKey;
1359 : }
1360 0 : NotifyTextListeners();
1361 : }
1362 0 : }
1363 :
1364 : // --------------------------------------------------------------------------------------
1365 0 : void SVTXFormattedField::NotifyTextListeners()
1366 : {
1367 0 : if ( GetTextListeners().getLength() )
1368 : {
1369 0 : ::com::sun::star::awt::TextEvent aEvent;
1370 0 : aEvent.Source = (::cppu::OWeakObject*)this;
1371 0 : GetTextListeners().textChanged( aEvent );
1372 : }
1373 0 : }
1374 :
1375 0 : void SVTXFormattedField::ImplGetPropertyIds( std::list< sal_uInt16 > &rIds )
1376 : {
1377 : PushPropertyIds( rIds,
1378 : // FIXME: elide duplication ?
1379 : BASEPROPERTY_EFFECTIVE_MIN,
1380 : BASEPROPERTY_VALUEMIN_DOUBLE,
1381 : BASEPROPERTY_EFFECTIVE_MAX,
1382 : BASEPROPERTY_VALUEMAX_DOUBLE,
1383 : BASEPROPERTY_EFFECTIVE_DEFAULT,
1384 : BASEPROPERTY_TREATASNUMBER,
1385 : BASEPROPERTY_EFFECTIVE_VALUE,
1386 : BASEPROPERTY_VALUE_DOUBLE,
1387 : BASEPROPERTY_VALUESTEP_DOUBLE,
1388 : BASEPROPERTY_DECIMALACCURACY,
1389 : BASEPROPERTY_FORMATSSUPPLIER,
1390 : BASEPROPERTY_NUMSHOWTHOUSANDSEP,
1391 : BASEPROPERTY_FORMATKEY,
1392 : BASEPROPERTY_TREATASNUMBER,
1393 : BASEPROPERTY_ENFORCE_FORMAT,
1394 0 : 0);
1395 0 : VCLXWindow::ImplGetPropertyIds( rIds, true );
1396 0 : VCLXSpinField::ImplGetPropertyIds( rIds );
1397 0 : }
1398 :
1399 :
1400 : // ----------------------------------------------------
1401 : // class SVTXRoadmap
1402 : // ----------------------------------------------------
1403 :
1404 : using namespace svt;
1405 :
1406 : // --------------------------------------------------------------------------------------
1407 0 : SVTXRoadmap::SVTXRoadmap() : maItemListeners( *this )
1408 : {
1409 0 : }
1410 :
1411 : // --------------------------------------------------------------------------------------
1412 0 : SVTXRoadmap::~SVTXRoadmap()
1413 : {
1414 0 : }
1415 :
1416 0 : void SVTXRoadmap::ProcessWindowEvent( const VclWindowEvent& rVclWindowEvent )
1417 : {
1418 0 : switch ( rVclWindowEvent.GetId() )
1419 : {
1420 : case VCLEVENT_ROADMAP_ITEMSELECTED:
1421 : {
1422 0 : SolarMutexGuard aGuard;
1423 0 : ::svt::ORoadmap* pField = GetRoadmap();
1424 0 : if ( pField )
1425 : {
1426 0 : sal_Int16 CurItemID = pField->GetCurrentRoadmapItemID();
1427 0 : ::com::sun::star::awt::ItemEvent aEvent;
1428 0 : aEvent.Selected = CurItemID;
1429 0 : aEvent.Highlighted = CurItemID;
1430 0 : aEvent.ItemId = CurItemID;
1431 0 : maItemListeners.itemStateChanged( aEvent );
1432 0 : }
1433 : }
1434 0 : break;
1435 : default:
1436 0 : SVTXRoadmap_Base::ProcessWindowEvent( rVclWindowEvent );
1437 0 : break;
1438 : }
1439 0 : }
1440 :
1441 :
1442 0 : void SVTXRoadmap::propertyChange( const ::com::sun::star::beans::PropertyChangeEvent& evt ) throw (::com::sun::star::uno::RuntimeException)
1443 : {
1444 0 : SolarMutexGuard aGuard;
1445 0 : ::svt::ORoadmap* pField = GetRoadmap();
1446 0 : if ( pField )
1447 : {
1448 0 : ::com::sun::star::uno::Reference< ::com::sun::star::uno::XInterface > xRoadmapItem;
1449 0 : xRoadmapItem = evt.Source;
1450 0 : sal_Int32 nID = 0;
1451 0 : ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySet > xPropertySet( xRoadmapItem, ::com::sun::star::uno::UNO_QUERY );
1452 0 : ::com::sun::star::uno::Any aValue = xPropertySet->getPropertyValue(::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "ID" )));
1453 0 : aValue >>= nID;
1454 :
1455 0 : ::com::sun::star::uno::Any rVal = evt.NewValue;
1456 0 : evt.NewValue >>= rVal;
1457 0 : ::rtl::OUString sPropertyName = evt.PropertyName;
1458 0 : if ( sPropertyName == "Enabled" )
1459 : {
1460 0 : sal_Bool bEnable = false;
1461 0 : evt.NewValue >>= bEnable;
1462 0 : pField->EnableRoadmapItem( (RoadmapTypes::ItemId)nID , bEnable );
1463 : }
1464 0 : else if ( sPropertyName == "Label" )
1465 : {
1466 0 : ::rtl::OUString sLabel;
1467 0 : evt.NewValue >>= sLabel;
1468 0 : pField->ChangeRoadmapItemLabel( (RoadmapTypes::ItemId)nID , sLabel );
1469 : }
1470 0 : else if ( sPropertyName == "ID" )
1471 : {
1472 0 : sal_Int32 nNewID = 0;
1473 0 : evt.NewValue >>= nNewID;
1474 0 : evt.OldValue >>= nID;
1475 0 : pField->ChangeRoadmapItemID( (RoadmapTypes::ItemId)nID, (RoadmapTypes::ItemId)nNewID );
1476 0 : }
1477 : // else
1478 : // Todo: handle Interactive appropriately
1479 0 : }
1480 0 : }
1481 :
1482 :
1483 0 : void SVTXRoadmap::addItemListener( const ::com::sun::star::uno::Reference< ::com::sun::star::awt::XItemListener >& l ) throw (::com::sun::star::uno::RuntimeException)
1484 : {
1485 0 : maItemListeners.addInterface( l );
1486 0 : }
1487 :
1488 0 : void SVTXRoadmap::removeItemListener( const ::com::sun::star::uno::Reference< ::com::sun::star::awt::XItemListener >& l ) throw (::com::sun::star::uno::RuntimeException)
1489 : {
1490 0 : maItemListeners.removeInterface( l );
1491 0 : }
1492 :
1493 0 : RMItemData SVTXRoadmap::GetRMItemData( const ::com::sun::star::container::ContainerEvent& _rEvent )
1494 : {
1495 0 : RMItemData aCurRMItemData;
1496 0 : ::com::sun::star::uno::Reference< ::com::sun::star::uno::XInterface > xRoadmapItem;
1497 0 : _rEvent.Element >>= xRoadmapItem;
1498 0 : ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySet > xPropertySet( xRoadmapItem, ::com::sun::star::uno::UNO_QUERY );
1499 0 : if ( xPropertySet.is() )
1500 : {
1501 0 : ::com::sun::star::uno::Any aValue = xPropertySet->getPropertyValue(::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "Label" )));
1502 0 : aValue >>= aCurRMItemData.Label;
1503 0 : aValue = xPropertySet->getPropertyValue(::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "ID" )));
1504 0 : aValue >>= aCurRMItemData.n_ID;
1505 0 : aValue = xPropertySet->getPropertyValue(::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "Enabled" )));
1506 0 : aValue >>= aCurRMItemData.b_Enabled;
1507 : }
1508 0 : return aCurRMItemData;
1509 : }
1510 :
1511 0 : void SVTXRoadmap::elementInserted( const ::com::sun::star::container::ContainerEvent& _rEvent )throw(::com::sun::star::uno::RuntimeException)
1512 : {
1513 0 : SolarMutexGuard aGuard;
1514 0 : ::svt::ORoadmap* pField = GetRoadmap();
1515 0 : if ( pField )
1516 : {
1517 0 : RMItemData CurItemData = GetRMItemData( _rEvent );
1518 0 : sal_Int32 InsertIndex = 0;
1519 0 : _rEvent.Accessor >>= InsertIndex;
1520 0 : pField->InsertRoadmapItem( InsertIndex, CurItemData.Label, (RoadmapTypes::ItemId)CurItemData.n_ID, CurItemData.b_Enabled );
1521 0 : }
1522 0 : }
1523 :
1524 0 : void SVTXRoadmap::elementRemoved( const ::com::sun::star::container::ContainerEvent& _rEvent )throw(::com::sun::star::uno::RuntimeException)
1525 : {
1526 0 : SolarMutexGuard aGuard;
1527 0 : ::svt::ORoadmap* pField = GetRoadmap();
1528 0 : if ( pField )
1529 : {
1530 0 : sal_Int32 DelIndex = 0;
1531 0 : _rEvent.Accessor >>= DelIndex;
1532 0 : pField->DeleteRoadmapItem(DelIndex);
1533 0 : }
1534 0 : }
1535 :
1536 0 : void SVTXRoadmap::elementReplaced( const ::com::sun::star::container::ContainerEvent& _rEvent )throw(::com::sun::star::uno::RuntimeException)
1537 : {
1538 0 : SolarMutexGuard aGuard;
1539 0 : ::svt::ORoadmap* pField = GetRoadmap();
1540 0 : if ( pField )
1541 : {
1542 0 : RMItemData CurItemData = GetRMItemData( _rEvent );
1543 0 : sal_Int32 ReplaceIndex = 0;
1544 0 : _rEvent.Accessor >>= ReplaceIndex;
1545 0 : pField->ReplaceRoadmapItem( ReplaceIndex, CurItemData.Label, (RoadmapTypes::ItemId)CurItemData.n_ID, CurItemData.b_Enabled );
1546 0 : }
1547 0 : }
1548 :
1549 :
1550 :
1551 : // --------------------------------------------------------------------------------------
1552 0 : void SVTXRoadmap::setProperty( const ::rtl::OUString& PropertyName, const ::com::sun::star::uno::Any& Value) throw(::com::sun::star::uno::RuntimeException)
1553 : {
1554 0 : SolarMutexGuard aGuard;
1555 :
1556 0 : ::svt::ORoadmap* pField = GetRoadmap();
1557 0 : if ( pField )
1558 : {
1559 0 : sal_uInt16 nPropType = GetPropertyId( PropertyName );
1560 0 : switch (nPropType)
1561 : {
1562 : case BASEPROPERTY_COMPLETE:
1563 : {
1564 0 : sal_Bool b = false;
1565 0 : Value >>= b;
1566 0 : pField->SetRoadmapComplete( b);
1567 : }
1568 0 : break;
1569 :
1570 : case BASEPROPERTY_ACTIVATED:
1571 : {
1572 0 : sal_Bool b = false;
1573 0 : Value >>= b;
1574 0 : pField->SetRoadmapInteractive( b);
1575 : }
1576 0 : break;
1577 :
1578 : case BASEPROPERTY_CURRENTITEMID:
1579 : {
1580 0 : sal_Int32 nId = 0;
1581 0 : Value >>= nId;
1582 0 : pField->SelectRoadmapItemByID( (RoadmapTypes::ItemId)nId );
1583 : }
1584 0 : break;
1585 :
1586 : case BASEPROPERTY_TEXT:
1587 : {
1588 0 : ::rtl::OUString aStr;
1589 0 : Value >>= aStr;
1590 0 : pField->SetText( aStr );
1591 0 : pField->Invalidate();
1592 : }
1593 0 : break;
1594 :
1595 : default:
1596 0 : SVTXRoadmap_Base::setProperty( PropertyName, Value );
1597 0 : break;
1598 : }
1599 :
1600 : }
1601 : else
1602 0 : SVTXRoadmap_Base::setProperty( PropertyName, Value );
1603 0 : }
1604 :
1605 :
1606 : // --------------------------------------------------------------------------------------
1607 0 : ::com::sun::star::uno::Any SVTXRoadmap::getProperty( const ::rtl::OUString& PropertyName ) throw(::com::sun::star::uno::RuntimeException)
1608 : {
1609 0 : SolarMutexGuard aGuard;
1610 :
1611 0 : ::com::sun::star::uno::Any aReturn;
1612 :
1613 0 : ::svt::ORoadmap* pField = GetRoadmap();
1614 0 : if ( pField )
1615 : {
1616 0 : sal_uInt16 nPropType = GetPropertyId( PropertyName );
1617 0 : switch (nPropType)
1618 : {
1619 : case BASEPROPERTY_COMPLETE:
1620 0 : aReturn <<= pField->IsRoadmapComplete();
1621 0 : break;
1622 : case BASEPROPERTY_ACTIVATED:
1623 0 : aReturn <<= pField->IsRoadmapInteractive();
1624 0 : break;
1625 : case BASEPROPERTY_CURRENTITEMID:
1626 0 : aReturn <<= pField->GetCurrentRoadmapItemID();
1627 0 : break;
1628 : default:
1629 0 : aReturn = SVTXRoadmap_Base::getProperty(PropertyName);
1630 0 : break;
1631 : }
1632 : }
1633 0 : return aReturn;
1634 : }
1635 :
1636 0 : void SVTXRoadmap::ImplSetNewImage()
1637 : {
1638 : OSL_PRECOND( GetWindow(), "SVTXRoadmap::ImplSetNewImage: window is required to be not-NULL!" );
1639 0 : ::svt::ORoadmap* pButton = static_cast< ::svt::ORoadmap* >( GetWindow() );
1640 0 : pButton->SetRoadmapBitmap( GetImage().GetBitmapEx() );
1641 0 : }
1642 :
1643 0 : void SVTXRoadmap::ImplGetPropertyIds( std::list< sal_uInt16 > &rIds )
1644 : {
1645 : PushPropertyIds( rIds,
1646 : BASEPROPERTY_COMPLETE,
1647 : BASEPROPERTY_ACTIVATED,
1648 : BASEPROPERTY_CURRENTITEMID,
1649 : BASEPROPERTY_TEXT,
1650 0 : 0);
1651 0 : VCLXWindow::ImplGetPropertyIds( rIds, true );
1652 0 : VCLXGraphicControl::ImplGetPropertyIds( rIds );
1653 0 : }
1654 :
1655 : // ----------------------------------------------------
1656 : // class SVTXNumericField
1657 : // ----------------------------------------------------
1658 0 : SVTXNumericField::SVTXNumericField()
1659 : {
1660 0 : }
1661 :
1662 0 : SVTXNumericField::~SVTXNumericField()
1663 : {
1664 0 : }
1665 :
1666 0 : ::com::sun::star::uno::Any SVTXNumericField::queryInterface( const ::com::sun::star::uno::Type & rType ) throw(::com::sun::star::uno::RuntimeException)
1667 : {
1668 : ::com::sun::star::uno::Any aRet = ::cppu::queryInterface( rType,
1669 : (static_cast< ::com::sun::star::awt::XNumericField* >(this)),
1670 0 : (static_cast< ::com::sun::star::lang::XTypeProvider* >(this)) );
1671 0 : return (aRet.hasValue() ? aRet : SVTXFormattedField::queryInterface( rType ));
1672 : }
1673 :
1674 : // ::com::sun::star::lang::XTypeProvider
1675 0 : IMPL_XTYPEPROVIDER_START( SVTXNumericField )
1676 0 : getCppuType( ( ::com::sun::star::uno::Reference< ::com::sun::star::awt::XNumericField>* ) NULL ),
1677 : SVTXFormattedField::getTypes()
1678 0 : IMPL_XTYPEPROVIDER_END
1679 :
1680 :
1681 0 : void SVTXNumericField::setValue( double Value ) throw(::com::sun::star::uno::RuntimeException)
1682 : {
1683 0 : SolarMutexGuard aGuard;
1684 :
1685 0 : FormattedField* pField = GetFormattedField();
1686 0 : if ( pField )
1687 0 : pField->SetValue( Value );
1688 0 : }
1689 :
1690 0 : double SVTXNumericField::getValue() throw(::com::sun::star::uno::RuntimeException)
1691 : {
1692 0 : SolarMutexGuard aGuard;
1693 :
1694 0 : FormattedField* pField = GetFormattedField();
1695 0 : return pField ? pField->GetValue() : 0;
1696 : }
1697 :
1698 0 : void SVTXNumericField::setMin( double Value ) throw(::com::sun::star::uno::RuntimeException)
1699 : {
1700 0 : SolarMutexGuard aGuard;
1701 :
1702 0 : FormattedField* pField = GetFormattedField();
1703 0 : if ( pField )
1704 0 : pField->SetMinValue( Value );
1705 0 : }
1706 :
1707 0 : double SVTXNumericField::getMin() throw(::com::sun::star::uno::RuntimeException)
1708 : {
1709 0 : SolarMutexGuard aGuard;
1710 :
1711 0 : FormattedField* pField = GetFormattedField();
1712 0 : return pField ? pField->GetMinValue() : 0;
1713 : }
1714 :
1715 0 : void SVTXNumericField::setMax( double Value ) throw(::com::sun::star::uno::RuntimeException)
1716 : {
1717 0 : SolarMutexGuard aGuard;
1718 :
1719 0 : FormattedField* pField = GetFormattedField();
1720 0 : if ( pField )
1721 0 : pField->SetMaxValue( Value );
1722 0 : }
1723 :
1724 0 : double SVTXNumericField::getMax() throw(::com::sun::star::uno::RuntimeException)
1725 : {
1726 0 : SolarMutexGuard aGuard;
1727 :
1728 0 : FormattedField* pField = GetFormattedField();
1729 0 : return pField ? pField->GetMaxValue() : 0;
1730 : }
1731 :
1732 0 : void SVTXNumericField::setFirst( double Value ) throw(::com::sun::star::uno::RuntimeException)
1733 : {
1734 0 : SolarMutexGuard aGuard;
1735 :
1736 0 : FormattedField* pField = GetFormattedField();
1737 0 : if ( pField )
1738 0 : pField->SetSpinFirst( Value );
1739 0 : }
1740 :
1741 0 : double SVTXNumericField::getFirst() throw(::com::sun::star::uno::RuntimeException)
1742 : {
1743 0 : SolarMutexGuard aGuard;
1744 :
1745 0 : FormattedField* pField = GetFormattedField();
1746 0 : return pField ? pField->GetSpinFirst() : 0;
1747 : }
1748 :
1749 0 : void SVTXNumericField::setLast( double Value ) throw(::com::sun::star::uno::RuntimeException)
1750 : {
1751 0 : SolarMutexGuard aGuard;
1752 :
1753 0 : FormattedField* pField = GetFormattedField();
1754 0 : if ( pField )
1755 0 : pField->SetSpinLast( Value );
1756 0 : }
1757 :
1758 0 : double SVTXNumericField::getLast() throw(::com::sun::star::uno::RuntimeException)
1759 : {
1760 0 : SolarMutexGuard aGuard;
1761 :
1762 0 : FormattedField* pField = GetFormattedField();
1763 0 : return pField ? pField->GetSpinLast() : 0;
1764 : }
1765 :
1766 0 : void SVTXNumericField::setSpinSize( double Value ) throw(::com::sun::star::uno::RuntimeException)
1767 : {
1768 0 : SolarMutexGuard aGuard;
1769 :
1770 0 : FormattedField* pField = GetFormattedField();
1771 0 : if ( pField )
1772 0 : pField->SetSpinSize( Value );
1773 0 : }
1774 :
1775 0 : double SVTXNumericField::getSpinSize() throw(::com::sun::star::uno::RuntimeException)
1776 : {
1777 0 : SolarMutexGuard aGuard;
1778 :
1779 0 : FormattedField* pField = GetFormattedField();
1780 0 : return pField ? pField->GetSpinSize() : 0;
1781 : }
1782 :
1783 0 : void SVTXNumericField::setDecimalDigits( sal_Int16 Value ) throw(::com::sun::star::uno::RuntimeException)
1784 : {
1785 0 : SolarMutexGuard aGuard;
1786 :
1787 0 : FormattedField* pField = GetFormattedField();
1788 0 : if ( pField )
1789 0 : pField->SetDecimalDigits( Value );
1790 0 : }
1791 :
1792 0 : sal_Int16 SVTXNumericField::getDecimalDigits() throw(::com::sun::star::uno::RuntimeException)
1793 : {
1794 0 : SolarMutexGuard aGuard;
1795 :
1796 0 : FormattedField* pField = GetFormattedField();
1797 0 : return pField ? pField->GetDecimalDigits() : 0;
1798 : }
1799 :
1800 0 : void SVTXNumericField::setStrictFormat( sal_Bool bStrict ) throw(::com::sun::star::uno::RuntimeException)
1801 : {
1802 0 : SolarMutexGuard aGuard;
1803 :
1804 0 : FormattedField* pField = GetFormattedField();
1805 0 : if ( pField )
1806 0 : pField->SetStrictFormat( bStrict );
1807 0 : }
1808 :
1809 0 : sal_Bool SVTXNumericField::isStrictFormat() throw(::com::sun::star::uno::RuntimeException)
1810 : {
1811 0 : SolarMutexGuard aGuard;
1812 :
1813 0 : FormattedField* pField = GetFormattedField();
1814 0 : return pField ? pField->IsStrictFormat() : sal_False;
1815 : }
1816 :
1817 0 : void SVTXNumericField::ImplGetPropertyIds( std::list< sal_uInt16 > &rIds )
1818 : {
1819 0 : SVTXFormattedField::ImplGetPropertyIds( rIds );
1820 0 : }
1821 :
1822 : // ----------------------------------------------------
1823 : // class SVTXCurrencyField
1824 : // ----------------------------------------------------
1825 0 : SVTXCurrencyField::SVTXCurrencyField()
1826 : {
1827 0 : }
1828 :
1829 0 : SVTXCurrencyField::~SVTXCurrencyField()
1830 : {
1831 0 : }
1832 :
1833 0 : ::com::sun::star::uno::Any SVTXCurrencyField::queryInterface( const ::com::sun::star::uno::Type & rType ) throw(::com::sun::star::uno::RuntimeException)
1834 : {
1835 : ::com::sun::star::uno::Any aRet = ::cppu::queryInterface( rType,
1836 : (static_cast< ::com::sun::star::awt::XCurrencyField* >(this)),
1837 0 : (static_cast< ::com::sun::star::lang::XTypeProvider* >(this)) );
1838 0 : return (aRet.hasValue() ? aRet : SVTXFormattedField::queryInterface( rType ));
1839 : }
1840 :
1841 : // ::com::sun::star::lang::XTypeProvider
1842 0 : IMPL_XTYPEPROVIDER_START( SVTXCurrencyField )
1843 0 : getCppuType( ( ::com::sun::star::uno::Reference< ::com::sun::star::awt::XCurrencyField>* ) NULL ),
1844 : SVTXFormattedField::getTypes()
1845 0 : IMPL_XTYPEPROVIDER_END
1846 :
1847 0 : void SVTXCurrencyField::setValue( double Value ) throw(::com::sun::star::uno::RuntimeException)
1848 : {
1849 0 : SolarMutexGuard aGuard;
1850 :
1851 0 : FormattedField* pField = GetFormattedField();
1852 0 : if ( pField )
1853 0 : pField->SetValue( Value );
1854 0 : }
1855 :
1856 0 : double SVTXCurrencyField::getValue() throw(::com::sun::star::uno::RuntimeException)
1857 : {
1858 0 : SolarMutexGuard aGuard;
1859 :
1860 0 : FormattedField* pField = GetFormattedField();
1861 0 : return pField ? pField->GetValue() : 0;
1862 : }
1863 :
1864 0 : void SVTXCurrencyField::setMin( double Value ) throw(::com::sun::star::uno::RuntimeException)
1865 : {
1866 0 : SolarMutexGuard aGuard;
1867 :
1868 0 : FormattedField* pField = GetFormattedField();
1869 0 : if ( pField )
1870 0 : pField->SetMinValue( Value );
1871 0 : }
1872 :
1873 0 : double SVTXCurrencyField::getMin() throw(::com::sun::star::uno::RuntimeException)
1874 : {
1875 0 : SolarMutexGuard aGuard;
1876 :
1877 0 : FormattedField* pField = GetFormattedField();
1878 0 : return pField ? pField->GetMinValue() : 0;
1879 : }
1880 :
1881 0 : void SVTXCurrencyField::setMax( double Value ) throw(::com::sun::star::uno::RuntimeException)
1882 : {
1883 0 : SolarMutexGuard aGuard;
1884 :
1885 0 : FormattedField* pField = GetFormattedField();
1886 0 : if ( pField )
1887 0 : pField->SetMaxValue( Value );
1888 0 : }
1889 :
1890 0 : double SVTXCurrencyField::getMax() throw(::com::sun::star::uno::RuntimeException)
1891 : {
1892 0 : SolarMutexGuard aGuard;
1893 :
1894 0 : FormattedField* pField = GetFormattedField();
1895 0 : return pField ? pField->GetMaxValue() : 0;
1896 : }
1897 :
1898 0 : void SVTXCurrencyField::setFirst( double Value ) throw(::com::sun::star::uno::RuntimeException)
1899 : {
1900 0 : SolarMutexGuard aGuard;
1901 :
1902 0 : FormattedField* pField = GetFormattedField();
1903 0 : if ( pField )
1904 0 : pField->SetSpinFirst( Value );
1905 0 : }
1906 :
1907 0 : double SVTXCurrencyField::getFirst() throw(::com::sun::star::uno::RuntimeException)
1908 : {
1909 0 : SolarMutexGuard aGuard;
1910 :
1911 0 : FormattedField* pField = GetFormattedField();
1912 0 : return pField ? pField->GetSpinFirst() : 0;
1913 : }
1914 :
1915 0 : void SVTXCurrencyField::setLast( double Value ) throw(::com::sun::star::uno::RuntimeException)
1916 : {
1917 0 : SolarMutexGuard aGuard;
1918 :
1919 0 : FormattedField* pField = GetFormattedField();
1920 0 : if ( pField )
1921 0 : pField->SetSpinLast( Value );
1922 0 : }
1923 :
1924 0 : double SVTXCurrencyField::getLast() throw(::com::sun::star::uno::RuntimeException)
1925 : {
1926 0 : SolarMutexGuard aGuard;
1927 :
1928 0 : FormattedField* pField = GetFormattedField();
1929 0 : return pField ? pField->GetSpinLast() : 0;
1930 : }
1931 :
1932 0 : void SVTXCurrencyField::setSpinSize( double Value ) throw(::com::sun::star::uno::RuntimeException)
1933 : {
1934 0 : SolarMutexGuard aGuard;
1935 :
1936 0 : FormattedField* pField = GetFormattedField();
1937 0 : if ( pField )
1938 0 : pField->SetSpinSize( Value );
1939 0 : }
1940 :
1941 0 : double SVTXCurrencyField::getSpinSize() throw(::com::sun::star::uno::RuntimeException)
1942 : {
1943 0 : SolarMutexGuard aGuard;
1944 :
1945 0 : FormattedField* pField = GetFormattedField();
1946 0 : return pField ? pField->GetSpinSize() : 0;
1947 : }
1948 :
1949 0 : void SVTXCurrencyField::setDecimalDigits( sal_Int16 Value ) throw(::com::sun::star::uno::RuntimeException)
1950 : {
1951 0 : SolarMutexGuard aGuard;
1952 :
1953 0 : FormattedField* pField = GetFormattedField();
1954 0 : if ( pField )
1955 0 : pField->SetDecimalDigits( Value );
1956 0 : }
1957 :
1958 0 : sal_Int16 SVTXCurrencyField::getDecimalDigits() throw(::com::sun::star::uno::RuntimeException)
1959 : {
1960 0 : SolarMutexGuard aGuard;
1961 :
1962 0 : FormattedField* pField = GetFormattedField();
1963 0 : return pField ? pField->GetDecimalDigits() : 0;
1964 : }
1965 :
1966 0 : void SVTXCurrencyField::setStrictFormat( sal_Bool bStrict ) throw(::com::sun::star::uno::RuntimeException)
1967 : {
1968 0 : SolarMutexGuard aGuard;
1969 :
1970 0 : FormattedField* pField = GetFormattedField();
1971 0 : if ( pField )
1972 0 : pField->SetStrictFormat( bStrict );
1973 0 : }
1974 :
1975 0 : sal_Bool SVTXCurrencyField::isStrictFormat() throw(::com::sun::star::uno::RuntimeException)
1976 : {
1977 0 : SolarMutexGuard aGuard;
1978 :
1979 0 : FormattedField* pField = GetFormattedField();
1980 0 : return pField ? pField->IsStrictFormat() : sal_False;
1981 : }
1982 :
1983 0 : void SVTXCurrencyField::setProperty( const ::rtl::OUString& PropertyName, const ::com::sun::star::uno::Any& Value) throw(::com::sun::star::uno::RuntimeException)
1984 : {
1985 0 : SolarMutexGuard aGuard;
1986 :
1987 0 : ::com::sun::star::uno::Any aReturn;
1988 :
1989 0 : DoubleCurrencyField* pField = (DoubleCurrencyField*)GetFormattedField();
1990 0 : if ( pField )
1991 : {
1992 0 : sal_uInt16 nPropType = GetPropertyId( PropertyName );
1993 0 : switch (nPropType)
1994 : {
1995 : case BASEPROPERTY_CURRENCYSYMBOL:
1996 : {
1997 0 : ::rtl::OUString aStr;
1998 0 : Value >>= aStr;
1999 0 : pField->setCurrencySymbol( aStr );
2000 : }
2001 0 : break;
2002 : case BASEPROPERTY_CURSYM_POSITION:
2003 : {
2004 0 : sal_Bool b = false;
2005 0 : Value >>= b;
2006 0 : pField->setPrependCurrSym(b);
2007 : }
2008 0 : break;
2009 :
2010 : default:
2011 0 : SVTXFormattedField::setProperty(PropertyName, Value);
2012 : }
2013 : }
2014 : else
2015 0 : SVTXFormattedField::setProperty(PropertyName, Value);
2016 0 : }
2017 :
2018 0 : ::com::sun::star::uno::Any SVTXCurrencyField::getProperty( const ::rtl::OUString& PropertyName ) throw(::com::sun::star::uno::RuntimeException)
2019 : {
2020 0 : SolarMutexGuard aGuard;
2021 :
2022 0 : ::com::sun::star::uno::Any aReturn;
2023 :
2024 0 : DoubleCurrencyField* pField = (DoubleCurrencyField*)GetFormattedField();
2025 0 : if ( pField )
2026 : {
2027 0 : sal_uInt16 nPropType = GetPropertyId( PropertyName );
2028 0 : switch (nPropType)
2029 : {
2030 : case BASEPROPERTY_CURRENCYSYMBOL:
2031 : {
2032 0 : aReturn <<= ::rtl::OUString( pField->getCurrencySymbol() );
2033 : }
2034 0 : break;
2035 : case BASEPROPERTY_CURSYM_POSITION:
2036 : {
2037 0 : aReturn <<= pField->getPrependCurrSym();
2038 : }
2039 0 : break;
2040 : default:
2041 0 : return SVTXFormattedField::getProperty(PropertyName);
2042 : }
2043 : }
2044 0 : return SVTXFormattedField::getProperty(PropertyName);
2045 : }
2046 :
2047 0 : void SVTXCurrencyField::ImplGetPropertyIds( std::list< sal_uInt16 > &rIds )
2048 : {
2049 : PushPropertyIds( rIds,
2050 : BASEPROPERTY_CURRENCYSYMBOL,
2051 : BASEPROPERTY_CURSYM_POSITION,
2052 0 : 0);
2053 0 : SVTXFormattedField::ImplGetPropertyIds( rIds );
2054 0 : }
2055 :
2056 :
2057 : // ----------------------------------------------------
2058 : // class VCLXProgressBar
2059 : // ----------------------------------------------------
2060 :
2061 0 : VCLXProgressBar::VCLXProgressBar()
2062 : :m_nValue(0)
2063 : ,m_nValueMin(0)
2064 0 : ,m_nValueMax(100)
2065 : {
2066 0 : }
2067 :
2068 0 : VCLXProgressBar::~VCLXProgressBar()
2069 : {
2070 0 : }
2071 :
2072 0 : void VCLXProgressBar::ImplUpdateValue()
2073 : {
2074 0 : ProgressBar* pProgressBar = (ProgressBar*) GetWindow();
2075 0 : if ( pProgressBar )
2076 : {
2077 : sal_Int32 nVal;
2078 : sal_Int32 nValMin;
2079 : sal_Int32 nValMax;
2080 :
2081 : // check min and max
2082 0 : if (m_nValueMin < m_nValueMax)
2083 : {
2084 0 : nValMin = m_nValueMin;
2085 0 : nValMax = m_nValueMax;
2086 : }
2087 : else
2088 : {
2089 0 : nValMin = m_nValueMax;
2090 0 : nValMax = m_nValueMin;
2091 : }
2092 :
2093 : // check value
2094 0 : if (m_nValue < nValMin)
2095 : {
2096 0 : nVal = nValMin;
2097 : }
2098 0 : else if (m_nValue > nValMax)
2099 : {
2100 0 : nVal = nValMax;
2101 : }
2102 : else
2103 : {
2104 0 : nVal = m_nValue;
2105 : }
2106 :
2107 : // calculate percent
2108 : sal_Int32 nPercent;
2109 0 : if (nValMin != nValMax)
2110 : {
2111 0 : nPercent = 100 * (nVal - nValMin) / (nValMax - nValMin);
2112 : }
2113 : else
2114 : {
2115 0 : nPercent = 0;
2116 : }
2117 :
2118 : // set progressbar value
2119 0 : pProgressBar->SetValue( (sal_uInt16) nPercent );
2120 : }
2121 0 : }
2122 :
2123 : // ::com::sun::star::uno::XInterface
2124 0 : ::com::sun::star::uno::Any VCLXProgressBar::queryInterface( const ::com::sun::star::uno::Type & rType ) throw(::com::sun::star::uno::RuntimeException)
2125 : {
2126 : ::com::sun::star::uno::Any aRet = ::cppu::queryInterface( rType,
2127 : (static_cast< ::com::sun::star::awt::XProgressBar* >(this)),
2128 0 : (static_cast< ::com::sun::star::lang::XTypeProvider* >(this)) );
2129 0 : return (aRet.hasValue() ? aRet : VCLXWindow::queryInterface( rType ));
2130 : }
2131 :
2132 : // ::com::sun::star::lang::XTypeProvider
2133 0 : IMPL_XTYPEPROVIDER_START( VCLXProgressBar )
2134 0 : getCppuType( ( ::com::sun::star::uno::Reference< ::com::sun::star::awt::XProgressBar>* ) NULL ),
2135 : VCLXWindow::getTypes()
2136 0 : IMPL_XTYPEPROVIDER_END
2137 :
2138 : // ::com::sun::star::awt::XProgressBar
2139 0 : void VCLXProgressBar::setForegroundColor( sal_Int32 nColor ) throw(::com::sun::star::uno::RuntimeException)
2140 : {
2141 0 : SolarMutexGuard aGuard;
2142 :
2143 0 : Window* pWindow = GetWindow();
2144 0 : if ( pWindow )
2145 : {
2146 0 : Color aColor( nColor );
2147 0 : pWindow->SetControlForeground( aColor );
2148 0 : }
2149 0 : }
2150 :
2151 0 : void VCLXProgressBar::setBackgroundColor( sal_Int32 nColor ) throw(::com::sun::star::uno::RuntimeException)
2152 : {
2153 0 : SolarMutexGuard aGuard;
2154 :
2155 0 : Window* pWindow = GetWindow();
2156 0 : if ( pWindow )
2157 : {
2158 0 : Color aColor( nColor );
2159 0 : pWindow->SetBackground( aColor );
2160 0 : pWindow->SetControlBackground( aColor );
2161 0 : pWindow->Invalidate();
2162 0 : }
2163 0 : }
2164 :
2165 0 : void VCLXProgressBar::setValue( sal_Int32 nValue ) throw(::com::sun::star::uno::RuntimeException)
2166 : {
2167 0 : SolarMutexGuard aGuard;
2168 :
2169 0 : m_nValue = nValue;
2170 0 : ImplUpdateValue();
2171 0 : }
2172 :
2173 0 : void VCLXProgressBar::setRange( sal_Int32 nMin, sal_Int32 nMax ) throw(::com::sun::star::uno::RuntimeException )
2174 : {
2175 0 : SolarMutexGuard aGuard;
2176 :
2177 0 : if ( nMin < nMax )
2178 : {
2179 : // take correct min and max
2180 0 : m_nValueMin = nMin;
2181 0 : m_nValueMax = nMax;
2182 : }
2183 : else
2184 : {
2185 : // change min and max
2186 0 : m_nValueMin = nMax;
2187 0 : m_nValueMax = nMin;
2188 : }
2189 :
2190 0 : ImplUpdateValue();
2191 0 : }
2192 :
2193 0 : sal_Int32 VCLXProgressBar::getValue() throw(::com::sun::star::uno::RuntimeException)
2194 : {
2195 0 : SolarMutexGuard aGuard;
2196 :
2197 0 : return m_nValue;
2198 : }
2199 :
2200 : // ::com::sun::star::awt::VclWindowPeer
2201 0 : void VCLXProgressBar::setProperty( const ::rtl::OUString& PropertyName, const ::com::sun::star::uno::Any& Value) throw(::com::sun::star::uno::RuntimeException)
2202 : {
2203 0 : SolarMutexGuard aGuard;
2204 :
2205 0 : ProgressBar* pProgressBar = (ProgressBar*)GetWindow();
2206 0 : if ( pProgressBar )
2207 : {
2208 0 : sal_uInt16 nPropType = GetPropertyId( PropertyName );
2209 0 : switch ( nPropType )
2210 : {
2211 : case BASEPROPERTY_PROGRESSVALUE:
2212 : {
2213 0 : if ( Value >>= m_nValue )
2214 0 : ImplUpdateValue();
2215 : }
2216 0 : break;
2217 : case BASEPROPERTY_PROGRESSVALUE_MIN:
2218 : {
2219 0 : if ( Value >>= m_nValueMin )
2220 0 : ImplUpdateValue();
2221 : }
2222 0 : break;
2223 : case BASEPROPERTY_PROGRESSVALUE_MAX:
2224 : {
2225 0 : if ( Value >>= m_nValueMax )
2226 0 : ImplUpdateValue();
2227 : }
2228 0 : break;
2229 : case BASEPROPERTY_FILLCOLOR:
2230 : {
2231 0 : Window* pWindow = GetWindow();
2232 0 : if ( pWindow )
2233 : {
2234 0 : sal_Bool bVoid = Value.getValueType().getTypeClass() == ::com::sun::star::uno::TypeClass_VOID;
2235 :
2236 0 : if ( bVoid )
2237 : {
2238 0 : pWindow->SetControlForeground();
2239 : }
2240 : else
2241 : {
2242 0 : sal_Int32 nColor = 0;
2243 0 : if ( Value >>= nColor )
2244 : {
2245 0 : Color aColor( nColor );
2246 0 : pWindow->SetControlForeground( aColor );
2247 : }
2248 : }
2249 : }
2250 : }
2251 0 : break;
2252 : default:
2253 0 : VCLXWindow::setProperty( PropertyName, Value );
2254 0 : break;
2255 : }
2256 0 : }
2257 0 : }
2258 :
2259 0 : ::com::sun::star::uno::Any VCLXProgressBar::getProperty( const ::rtl::OUString& PropertyName ) throw(::com::sun::star::uno::RuntimeException)
2260 : {
2261 0 : SolarMutexGuard aGuard;
2262 :
2263 0 : ::com::sun::star::uno::Any aProp;
2264 0 : ProgressBar* pProgressBar = (ProgressBar*)GetWindow();
2265 0 : if ( pProgressBar )
2266 : {
2267 0 : sal_uInt16 nPropType = GetPropertyId( PropertyName );
2268 0 : switch ( nPropType )
2269 : {
2270 : case BASEPROPERTY_PROGRESSVALUE:
2271 : {
2272 0 : aProp <<= m_nValue;
2273 : }
2274 0 : break;
2275 : case BASEPROPERTY_PROGRESSVALUE_MIN:
2276 : {
2277 0 : aProp <<= m_nValueMin;
2278 : }
2279 0 : break;
2280 : case BASEPROPERTY_PROGRESSVALUE_MAX:
2281 : {
2282 0 : aProp <<= m_nValueMax;
2283 : }
2284 0 : break;
2285 : default:
2286 0 : aProp <<= VCLXWindow::getProperty( PropertyName );
2287 0 : break;
2288 : }
2289 : }
2290 0 : return aProp;
2291 : }
2292 :
2293 0 : void VCLXProgressBar::ImplGetPropertyIds( std::list< sal_uInt16 > &rIds )
2294 : {
2295 : PushPropertyIds( rIds,
2296 : BASEPROPERTY_PROGRESSVALUE,
2297 : BASEPROPERTY_PROGRESSVALUE_MIN,
2298 : BASEPROPERTY_PROGRESSVALUE_MAX,
2299 : BASEPROPERTY_FILLCOLOR,
2300 0 : 0);
2301 0 : VCLXWindow::ImplGetPropertyIds( rIds, true );
2302 0 : }
2303 :
2304 :
2305 : // ----------------------------------------------------
2306 : // class SVTXDateField
2307 : // ----------------------------------------------------
2308 0 : SVTXDateField::SVTXDateField()
2309 0 : :VCLXDateField()
2310 : {
2311 0 : }
2312 :
2313 0 : SVTXDateField::~SVTXDateField()
2314 : {
2315 0 : }
2316 :
2317 0 : void SAL_CALL SVTXDateField::setProperty( const ::rtl::OUString& PropertyName, const ::com::sun::star::uno::Any& Value ) throw(::com::sun::star::uno::RuntimeException)
2318 : {
2319 0 : VCLXDateField::setProperty( PropertyName, Value );
2320 :
2321 : // some properties need to be forwarded to the sub edit, too
2322 0 : Edit* pSubEdit = GetWindow() ? static_cast< Edit* >( GetWindow() )->GetSubEdit() : NULL;
2323 0 : if ( !pSubEdit )
2324 0 : return;
2325 :
2326 0 : switch ( GetPropertyId( PropertyName ) )
2327 : {
2328 : case BASEPROPERTY_TEXTLINECOLOR:
2329 0 : if ( !Value.hasValue() )
2330 0 : pSubEdit->SetTextLineColor();
2331 : else
2332 : {
2333 0 : sal_Int32 nColor = 0;
2334 0 : if ( Value >>= nColor )
2335 0 : pSubEdit->SetTextLineColor( Color( nColor ) );
2336 : }
2337 0 : break;
2338 : }
2339 : }
2340 :
2341 0 : void SVTXDateField::ImplGetPropertyIds( std::list< sal_uInt16 > &rIds )
2342 : {
2343 : PushPropertyIds( rIds,
2344 : BASEPROPERTY_TEXTLINECOLOR,
2345 0 : 0);
2346 0 : VCLXDateField::ImplGetPropertyIds( rIds );
2347 0 : }
2348 :
2349 : /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
|