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 : #include <toolkit/awt/vclxwindows.hxx>
21 : #include "toolkit/awt/scrollabledialog.hxx"
22 : #include <com/sun/star/awt/ScrollBarOrientation.hpp>
23 : #include <com/sun/star/graphic/GraphicProvider.hpp>
24 : #include <com/sun/star/graphic/XGraphicProvider.hpp>
25 : #include <toolkit/helper/vclunohelper.hxx>
26 : #include <toolkit/helper/macros.hxx>
27 : #include <toolkit/helper/property.hxx>
28 : #include <toolkit/helper/convert.hxx>
29 : #include <toolkit/helper/imagealign.hxx>
30 : #include <toolkit/helper/accessibilityclient.hxx>
31 : #include <toolkit/helper/tkresmgr.hxx>
32 : #include <cppuhelper/typeprovider.hxx>
33 : #include <com/sun/star/awt/VisualEffect.hpp>
34 : #include <com/sun/star/lang/XMultiServiceFactory.hpp>
35 : #include <com/sun/star/system/SystemShellExecute.hpp>
36 : #include <com/sun/star/system/SystemShellExecuteFlags.hpp>
37 : #include <com/sun/star/resource/XStringResourceResolver.hpp>
38 : #include <com/sun/star/awt/ImageScaleMode.hpp>
39 : #include <com/sun/star/awt/XItemList.hpp>
40 : #include <comphelper/componentcontext.hxx>
41 : #include <comphelper/namedvaluecollection.hxx>
42 : #include <comphelper/processfactory.hxx>
43 :
44 : #include <vcl/button.hxx>
45 : #include <vcl/lstbox.hxx>
46 : #include <vcl/combobox.hxx>
47 : #include <vcl/field.hxx>
48 : #include <vcl/fixedhyper.hxx>
49 : #include <vcl/longcurr.hxx>
50 : #include <vcl/imgctrl.hxx>
51 : #include <vcl/dialog.hxx>
52 : #include <vcl/msgbox.hxx>
53 : #include <vcl/scrbar.hxx>
54 : #include <vcl/svapp.hxx>
55 : #include <vcl/tabpage.hxx>
56 : #include <vcl/tabctrl.hxx>
57 : #include <tools/diagnose_ex.h>
58 :
59 : #include <boost/bind.hpp>
60 : #include <boost/function.hpp>
61 :
62 : #include <vcl/group.hxx>
63 : using ::com::sun::star::uno::Any;
64 : using ::com::sun::star::uno::Reference;
65 : using ::com::sun::star::uno::makeAny;
66 : using ::com::sun::star::uno::RuntimeException;
67 : using ::com::sun::star::lang::EventObject;
68 : using ::com::sun::star::awt::ItemListEvent;
69 : using ::com::sun::star::awt::XItemList;
70 : using ::com::sun::star::graphic::XGraphic;
71 : using ::com::sun::star::graphic::XGraphicProvider;
72 :
73 : using namespace ::com::sun::star;
74 : using namespace ::com::sun::star::awt::VisualEffect;
75 : namespace ImageScaleMode = ::com::sun::star::awt::ImageScaleMode;
76 :
77 0 : static double ImplCalcLongValue( double nValue, sal_uInt16 nDigits )
78 : {
79 0 : double n = nValue;
80 0 : for ( sal_uInt16 d = 0; d < nDigits; d++ )
81 0 : n *= 10;
82 0 : return n;
83 : }
84 :
85 0 : static double ImplCalcDoubleValue( double nValue, sal_uInt16 nDigits )
86 : {
87 0 : double n = nValue;
88 0 : for ( sal_uInt16 d = 0; d < nDigits; d++ )
89 0 : n /= 10;
90 0 : return n;
91 : }
92 :
93 : namespace toolkit
94 : {
95 : /** sets the "face color" for button like controls (scroll bar, spin button)
96 : */
97 0 : void setButtonLikeFaceColor( Window* _pWindow, const ::com::sun::star::uno::Any& _rColorValue )
98 : {
99 0 : AllSettings aSettings = _pWindow->GetSettings();
100 0 : StyleSettings aStyleSettings = aSettings.GetStyleSettings();
101 :
102 0 : if ( !_rColorValue.hasValue() )
103 : {
104 0 : const StyleSettings& aAppStyle = Application::GetSettings().GetStyleSettings();
105 0 : aStyleSettings.SetFaceColor( aAppStyle.GetFaceColor( ) );
106 0 : aStyleSettings.SetCheckedColor( aAppStyle.GetCheckedColor( ) );
107 0 : aStyleSettings.SetLightBorderColor( aAppStyle.GetLightBorderColor() );
108 0 : aStyleSettings.SetLightColor( aAppStyle.GetLightColor() );
109 0 : aStyleSettings.SetShadowColor( aAppStyle.GetShadowColor() );
110 0 : aStyleSettings.SetDarkShadowColor( aAppStyle.GetDarkShadowColor() );
111 : }
112 : else
113 : {
114 0 : sal_Int32 nBackgroundColor = 0;
115 0 : _rColorValue >>= nBackgroundColor;
116 0 : aStyleSettings.SetFaceColor( nBackgroundColor );
117 :
118 : // for the real background (everything except the buttons and the thumb),
119 : // use an average between the desired color and "white"
120 0 : Color aWhite( COL_WHITE );
121 0 : Color aBackground( nBackgroundColor );
122 0 : aBackground.SetRed( ( aBackground.GetRed() + aWhite.GetRed() ) / 2 );
123 0 : aBackground.SetGreen( ( aBackground.GetGreen() + aWhite.GetGreen() ) / 2 );
124 0 : aBackground.SetBlue( ( aBackground.GetBlue() + aWhite.GetBlue() ) / 2 );
125 0 : aStyleSettings.SetCheckedColor( aBackground );
126 :
127 0 : sal_Int32 nBackgroundLuminance = Color( nBackgroundColor ).GetLuminance();
128 0 : sal_Int32 nWhiteLuminance = Color( COL_WHITE ).GetLuminance();
129 :
130 0 : Color aLightShadow( nBackgroundColor );
131 0 : aLightShadow.IncreaseLuminance( (sal_uInt8)( ( nWhiteLuminance - nBackgroundLuminance ) * 2 / 3 ) );
132 0 : aStyleSettings.SetLightBorderColor( aLightShadow );
133 :
134 0 : Color aLight( nBackgroundColor );
135 0 : aLight.IncreaseLuminance( (sal_uInt8)( ( nWhiteLuminance - nBackgroundLuminance ) * 1 / 3 ) );
136 0 : aStyleSettings.SetLightColor( aLight );
137 :
138 0 : Color aShadow( nBackgroundColor );
139 0 : aShadow.DecreaseLuminance( (sal_uInt8)( nBackgroundLuminance * 1 / 3 ) );
140 0 : aStyleSettings.SetShadowColor( aShadow );
141 :
142 0 : Color aDarkShadow( nBackgroundColor );
143 0 : aDarkShadow.DecreaseLuminance( (sal_uInt8)( nBackgroundLuminance * 2 / 3 ) );
144 0 : aStyleSettings.SetDarkShadowColor( aDarkShadow );
145 : }
146 :
147 0 : aSettings.SetStyleSettings( aStyleSettings );
148 0 : _pWindow->SetSettings( aSettings, sal_True );
149 0 : }
150 :
151 0 : Any getButtonLikeFaceColor( const Window* _pWindow )
152 : {
153 0 : sal_Int32 nBackgroundColor = _pWindow->GetSettings().GetStyleSettings().GetFaceColor().GetColor();
154 0 : return makeAny( nBackgroundColor );
155 : }
156 :
157 0 : static void adjustBooleanWindowStyle( const Any& _rValue, Window* _pWindow, WinBits _nBits, sal_Bool _bInverseSemantics )
158 : {
159 0 : WinBits nStyle = _pWindow->GetStyle();
160 0 : sal_Bool bValue( sal_False );
161 0 : OSL_VERIFY( _rValue >>= bValue );
162 0 : if ( bValue != _bInverseSemantics )
163 0 : nStyle |= _nBits;
164 : else
165 0 : nStyle &= ~_nBits;
166 0 : _pWindow->SetStyle( nStyle );
167 0 : }
168 :
169 0 : static void setVisualEffect( const Any& _rValue, Window* _pWindow )
170 : {
171 0 : AllSettings aSettings = _pWindow->GetSettings();
172 0 : StyleSettings aStyleSettings = aSettings.GetStyleSettings();
173 :
174 0 : sal_Int16 nStyle = LOOK3D;
175 0 : OSL_VERIFY( _rValue >>= nStyle );
176 0 : switch ( nStyle )
177 : {
178 : case FLAT:
179 0 : aStyleSettings.SetOptions( aStyleSettings.GetOptions() & ~STYLE_OPTION_MONO );
180 0 : break;
181 : case LOOK3D:
182 : default:
183 0 : aStyleSettings.SetOptions( aStyleSettings.GetOptions() | STYLE_OPTION_MONO );
184 : }
185 0 : aSettings.SetStyleSettings( aStyleSettings );
186 0 : _pWindow->SetSettings( aSettings );
187 0 : }
188 :
189 0 : static Any getVisualEffect( Window* _pWindow )
190 : {
191 0 : Any aEffect;
192 :
193 0 : StyleSettings aStyleSettings = _pWindow->GetSettings().GetStyleSettings();
194 0 : if ( (aStyleSettings.GetOptions() & STYLE_OPTION_MONO) )
195 0 : aEffect <<= (sal_Int16)FLAT;
196 : else
197 0 : aEffect <<= (sal_Int16)LOOK3D;
198 0 : return aEffect;
199 : }
200 : }
201 :
202 : // ----------------------------------------------------
203 : // class VCLXGraphicControl
204 : // ----------------------------------------------------
205 :
206 8 : void VCLXGraphicControl::ImplGetPropertyIds( std::list< sal_uInt16 > &rIds )
207 : {
208 8 : VCLXWindow::ImplGetPropertyIds( rIds );
209 8 : }
210 :
211 0 : void VCLXGraphicControl::ImplSetNewImage()
212 : {
213 : OSL_PRECOND( GetWindow(), "VCLXGraphicControl::ImplSetNewImage: window is required to be not-NULL!" );
214 0 : Button* pButton = static_cast< Button* >( GetWindow() );
215 0 : pButton->SetModeImage( GetImage() );
216 0 : }
217 :
218 0 : void VCLXGraphicControl::setPosSize( sal_Int32 X, sal_Int32 Y, sal_Int32 Width, sal_Int32 Height, short Flags ) throw(::com::sun::star::uno::RuntimeException)
219 : {
220 0 : SolarMutexGuard aGuard;
221 :
222 0 : if ( GetWindow() )
223 : {
224 0 : Size aOldSize = GetWindow()->GetSizePixel();
225 0 : VCLXWindow::setPosSize( X, Y, Width, Height, Flags );
226 0 : if ( ( aOldSize.Width() != Width ) || ( aOldSize.Height() != Height ) )
227 0 : ImplSetNewImage();
228 0 : }
229 0 : }
230 :
231 0 : void VCLXGraphicControl::setProperty( const ::rtl::OUString& PropertyName, const ::com::sun::star::uno::Any& Value) throw(::com::sun::star::uno::RuntimeException)
232 : {
233 0 : SolarMutexGuard aGuard;
234 :
235 0 : Button* pButton = static_cast< Button* >( GetWindow() );
236 0 : if ( !pButton )
237 0 : return;
238 0 : sal_uInt16 nPropType = GetPropertyId( PropertyName );
239 0 : switch ( nPropType )
240 : {
241 : case BASEPROPERTY_GRAPHIC:
242 : {
243 0 : Reference< XGraphic > xGraphic;
244 0 : OSL_VERIFY( Value >>= xGraphic );
245 0 : maImage = Image( xGraphic );
246 0 : ImplSetNewImage();
247 : }
248 0 : break;
249 :
250 : case BASEPROPERTY_IMAGEALIGN:
251 : {
252 0 : WindowType eType = GetWindow()->GetType();
253 0 : if ( ( eType == WINDOW_PUSHBUTTON )
254 : || ( eType == WINDOW_RADIOBUTTON )
255 : || ( eType == WINDOW_CHECKBOX )
256 : )
257 : {
258 0 : sal_Int16 nAlignment = sal_Int16();
259 0 : if ( Value >>= nAlignment )
260 0 : pButton->SetImageAlign( static_cast< ImageAlign >( nAlignment ) );
261 : }
262 : }
263 0 : break;
264 : case BASEPROPERTY_IMAGEPOSITION:
265 : {
266 0 : WindowType eType = GetWindow()->GetType();
267 0 : if ( ( eType == WINDOW_PUSHBUTTON )
268 : || ( eType == WINDOW_RADIOBUTTON )
269 : || ( eType == WINDOW_CHECKBOX )
270 : )
271 : {
272 0 : sal_Int16 nImagePosition = 2;
273 0 : OSL_VERIFY( Value >>= nImagePosition );
274 0 : pButton->SetImageAlign( ::toolkit::translateImagePosition( nImagePosition ) );
275 : }
276 : }
277 0 : break;
278 : default:
279 0 : VCLXWindow::setProperty( PropertyName, Value );
280 0 : break;
281 0 : }
282 : }
283 :
284 0 : ::com::sun::star::uno::Any VCLXGraphicControl::getProperty( const ::rtl::OUString& PropertyName ) throw(::com::sun::star::uno::RuntimeException)
285 : {
286 0 : SolarMutexGuard aGuard;
287 :
288 0 : ::com::sun::star::uno::Any aProp;
289 0 : if ( !GetWindow() )
290 : return aProp;
291 :
292 0 : sal_uInt16 nPropType = GetPropertyId( PropertyName );
293 0 : switch ( nPropType )
294 : {
295 : case BASEPROPERTY_GRAPHIC:
296 0 : aProp <<= maImage.GetXGraphic();
297 0 : break;
298 : case BASEPROPERTY_IMAGEALIGN:
299 : {
300 0 : WindowType eType = GetWindow()->GetType();
301 0 : if ( ( eType == WINDOW_PUSHBUTTON )
302 : || ( eType == WINDOW_RADIOBUTTON )
303 : || ( eType == WINDOW_CHECKBOX )
304 : )
305 : {
306 0 : aProp <<= ::toolkit::getCompatibleImageAlign( static_cast< Button* >( GetWindow() )->GetImageAlign() );
307 : }
308 : }
309 0 : break;
310 : case BASEPROPERTY_IMAGEPOSITION:
311 : {
312 0 : WindowType eType = GetWindow()->GetType();
313 0 : if ( ( eType == WINDOW_PUSHBUTTON )
314 : || ( eType == WINDOW_RADIOBUTTON )
315 : || ( eType == WINDOW_CHECKBOX )
316 : )
317 : {
318 0 : aProp <<= ::toolkit::translateImagePosition( static_cast< Button* >( GetWindow() )->GetImageAlign() );
319 : }
320 : }
321 0 : break;
322 : default:
323 : {
324 0 : aProp <<= VCLXWindow::getProperty( PropertyName );
325 : }
326 0 : break;
327 : }
328 0 : return aProp;
329 : }
330 :
331 : //--------------------------------------------------------------------
332 : // class VCLXButton
333 : // ----------------------------------------------------
334 :
335 3 : void VCLXButton::ImplGetPropertyIds( std::list< sal_uInt16 > &rIds )
336 : {
337 : PushPropertyIds( rIds,
338 : BASEPROPERTY_BACKGROUNDCOLOR,
339 : BASEPROPERTY_DEFAULTBUTTON,
340 : BASEPROPERTY_DEFAULTCONTROL,
341 : BASEPROPERTY_ENABLED,
342 : BASEPROPERTY_ENABLEVISIBLE,
343 : BASEPROPERTY_FONTDESCRIPTOR,
344 : BASEPROPERTY_GRAPHIC,
345 : BASEPROPERTY_HELPTEXT,
346 : BASEPROPERTY_HELPURL,
347 : BASEPROPERTY_IMAGEALIGN,
348 : BASEPROPERTY_IMAGEPOSITION,
349 : BASEPROPERTY_IMAGEURL,
350 : BASEPROPERTY_LABEL,
351 : BASEPROPERTY_PRINTABLE,
352 : BASEPROPERTY_PUSHBUTTONTYPE,
353 : BASEPROPERTY_REPEAT,
354 : BASEPROPERTY_REPEAT_DELAY,
355 : BASEPROPERTY_STATE,
356 : BASEPROPERTY_TABSTOP,
357 : BASEPROPERTY_TOGGLE,
358 : BASEPROPERTY_FOCUSONCLICK,
359 : BASEPROPERTY_MULTILINE,
360 : BASEPROPERTY_ALIGN,
361 : BASEPROPERTY_VERTICALALIGN,
362 : BASEPROPERTY_WRITING_MODE,
363 : BASEPROPERTY_CONTEXT_WRITING_MODE,
364 : BASEPROPERTY_REFERENCE_DEVICE,
365 3 : 0);
366 3 : VCLXGraphicControl::ImplGetPropertyIds( rIds );
367 3 : }
368 :
369 0 : VCLXButton::VCLXButton()
370 : :maActionListeners( *this )
371 0 : ,maItemListeners( *this )
372 : {
373 0 : }
374 :
375 0 : VCLXButton::~VCLXButton()
376 : {
377 0 : }
378 :
379 0 : ::com::sun::star::uno::Reference< ::com::sun::star::accessibility::XAccessibleContext > VCLXButton::CreateAccessibleContext()
380 : {
381 0 : return getAccessibleFactory().createAccessibleContext( this );
382 : }
383 :
384 0 : void VCLXButton::dispose() throw(::com::sun::star::uno::RuntimeException)
385 : {
386 0 : SolarMutexGuard aGuard;
387 :
388 0 : ::com::sun::star::lang::EventObject aObj;
389 0 : aObj.Source = (::cppu::OWeakObject*)this;
390 0 : maActionListeners.disposeAndClear( aObj );
391 0 : maItemListeners.disposeAndClear( aObj );
392 0 : VCLXGraphicControl::dispose();
393 0 : }
394 :
395 0 : void VCLXButton::addActionListener( const ::com::sun::star::uno::Reference< ::com::sun::star::awt::XActionListener > & l )throw(::com::sun::star::uno::RuntimeException)
396 : {
397 0 : SolarMutexGuard aGuard;
398 0 : maActionListeners.addInterface( l );
399 0 : }
400 :
401 0 : void VCLXButton::removeActionListener( const ::com::sun::star::uno::Reference< ::com::sun::star::awt::XActionListener > & l ) throw(::com::sun::star::uno::RuntimeException)
402 : {
403 0 : SolarMutexGuard aGuard;
404 0 : maActionListeners.removeInterface( l );
405 0 : }
406 :
407 0 : void VCLXButton::addItemListener( const ::com::sun::star::uno::Reference< ::com::sun::star::awt::XItemListener > & l )throw(::com::sun::star::uno::RuntimeException)
408 : {
409 0 : SolarMutexGuard aGuard;
410 0 : maItemListeners.addInterface( l );
411 0 : }
412 :
413 0 : void VCLXButton::removeItemListener( const ::com::sun::star::uno::Reference< ::com::sun::star::awt::XItemListener > & l ) throw(::com::sun::star::uno::RuntimeException)
414 : {
415 0 : SolarMutexGuard aGuard;
416 0 : maItemListeners.removeInterface( l );
417 0 : }
418 :
419 0 : void VCLXButton::setLabel( const ::rtl::OUString& rLabel ) throw(::com::sun::star::uno::RuntimeException)
420 : {
421 0 : SolarMutexGuard aGuard;
422 :
423 0 : Window* pWindow = GetWindow();
424 0 : if ( pWindow )
425 0 : pWindow->SetText( rLabel );
426 0 : }
427 :
428 0 : void VCLXButton::setActionCommand( const ::rtl::OUString& rCommand ) throw(::com::sun::star::uno::RuntimeException)
429 : {
430 0 : SolarMutexGuard aGuard;
431 :
432 0 : maActionCommand = rCommand;
433 0 : }
434 :
435 0 : ::com::sun::star::awt::Size VCLXButton::getMinimumSize( ) throw(::com::sun::star::uno::RuntimeException)
436 : {
437 0 : SolarMutexGuard aGuard;
438 :
439 0 : Size aSz;
440 0 : PushButton* pButton = (PushButton*) GetWindow();
441 0 : if ( pButton )
442 0 : aSz = pButton->CalcMinimumSize();
443 0 : return AWTSize(aSz);
444 : }
445 :
446 0 : ::com::sun::star::awt::Size VCLXButton::getPreferredSize( ) throw(::com::sun::star::uno::RuntimeException)
447 : {
448 0 : ::com::sun::star::awt::Size aSz = getMinimumSize();
449 0 : aSz.Width += 16;
450 0 : aSz.Height += 10;
451 0 : return aSz;
452 : }
453 :
454 0 : ::com::sun::star::awt::Size VCLXButton::calcAdjustedSize( const ::com::sun::star::awt::Size& rNewSize ) throw(::com::sun::star::uno::RuntimeException)
455 : {
456 0 : SolarMutexGuard aGuard;
457 :
458 0 : Size aSz = VCLSize(rNewSize);
459 0 : PushButton* pButton = (PushButton*) GetWindow();
460 0 : if ( pButton )
461 : {
462 0 : Size aMinSz = pButton->CalcMinimumSize();
463 : // no text, thus image
464 0 : if ( !pButton->GetText().Len() )
465 : {
466 0 : if ( aSz.Width() < aMinSz.Width() )
467 0 : aSz.Width() = aMinSz.Width();
468 0 : if ( aSz.Height() < aMinSz.Height() )
469 0 : aSz.Height() = aMinSz.Height();
470 : }
471 : else
472 : {
473 0 : if ( ( aSz.Width() > aMinSz.Width() ) && ( aSz.Height() < aMinSz.Height() ) )
474 0 : aSz.Height() = aMinSz.Height();
475 : else
476 0 : aSz = aMinSz;
477 : }
478 : }
479 0 : return AWTSize(aSz);
480 : }
481 :
482 0 : void VCLXButton::setProperty( const ::rtl::OUString& PropertyName, const ::com::sun::star::uno::Any& Value) throw(::com::sun::star::uno::RuntimeException)
483 : {
484 0 : SolarMutexGuard aGuard;
485 :
486 0 : Button* pButton = (Button*)GetWindow();
487 0 : if ( pButton )
488 : {
489 0 : sal_uInt16 nPropType = GetPropertyId( PropertyName );
490 0 : switch ( nPropType )
491 : {
492 : case BASEPROPERTY_FOCUSONCLICK:
493 0 : ::toolkit::adjustBooleanWindowStyle( Value, pButton, WB_NOPOINTERFOCUS, sal_True );
494 0 : break;
495 :
496 : case BASEPROPERTY_TOGGLE:
497 0 : ::toolkit::adjustBooleanWindowStyle( Value, pButton, WB_TOGGLE, sal_False );
498 0 : break;
499 :
500 : case BASEPROPERTY_DEFAULTBUTTON:
501 : {
502 0 : WinBits nStyle = pButton->GetStyle() | WB_DEFBUTTON;
503 0 : sal_Bool b = sal_Bool();
504 0 : if ( ( Value >>= b ) && !b )
505 0 : nStyle &= ~WB_DEFBUTTON;
506 0 : pButton->SetStyle( nStyle );
507 : }
508 0 : break;
509 : case BASEPROPERTY_STATE:
510 : {
511 0 : if ( GetWindow()->GetType() == WINDOW_PUSHBUTTON )
512 : {
513 0 : sal_Int16 n = sal_Int16();
514 0 : if ( Value >>= n )
515 0 : ((PushButton*)pButton)->SetState( (TriState)n );
516 : }
517 : }
518 0 : break;
519 : default:
520 : {
521 0 : VCLXGraphicControl::setProperty( PropertyName, Value );
522 : }
523 : }
524 0 : }
525 0 : }
526 :
527 0 : ::com::sun::star::uno::Any VCLXButton::getProperty( const ::rtl::OUString& PropertyName ) throw(::com::sun::star::uno::RuntimeException)
528 : {
529 0 : SolarMutexGuard aGuard;
530 :
531 0 : ::com::sun::star::uno::Any aProp;
532 0 : Button* pButton = (Button*)GetWindow();
533 0 : if ( pButton )
534 : {
535 0 : sal_uInt16 nPropType = GetPropertyId( PropertyName );
536 0 : switch ( nPropType )
537 : {
538 : case BASEPROPERTY_FOCUSONCLICK:
539 0 : aProp <<= (sal_Bool)( ( pButton->GetStyle() & WB_NOPOINTERFOCUS ) == 0 );
540 0 : break;
541 :
542 : case BASEPROPERTY_TOGGLE:
543 0 : aProp <<= (sal_Bool)( ( pButton->GetStyle() & WB_TOGGLE ) != 0 );
544 0 : break;
545 :
546 : case BASEPROPERTY_DEFAULTBUTTON:
547 : {
548 0 : aProp <<= (sal_Bool) ( ( pButton->GetStyle() & WB_DEFBUTTON ) ? sal_True : sal_False );
549 : }
550 0 : break;
551 : case BASEPROPERTY_STATE:
552 : {
553 0 : if ( GetWindow()->GetType() == WINDOW_PUSHBUTTON )
554 : {
555 0 : aProp <<= (sal_Int16)((PushButton*)pButton)->GetState();
556 : }
557 : }
558 0 : break;
559 : default:
560 : {
561 0 : aProp <<= VCLXGraphicControl::getProperty( PropertyName );
562 : }
563 : }
564 : }
565 0 : return aProp;
566 : }
567 :
568 0 : void VCLXButton::ProcessWindowEvent( const VclWindowEvent& rVclWindowEvent )
569 : {
570 0 : switch ( rVclWindowEvent.GetId() )
571 : {
572 : case VCLEVENT_BUTTON_CLICK:
573 : {
574 0 : ::com::sun::star::uno::Reference< ::com::sun::star::awt::XWindow > xKeepAlive( this );
575 : // since we call listeners below, there is a potential that we will be destroyed
576 : // during the listener call. To prevent the resulting crashs, we keep us
577 : // alive as long as we're here
578 :
579 0 : if ( maActionListeners.getLength() )
580 : {
581 0 : ::com::sun::star::awt::ActionEvent aEvent;
582 0 : aEvent.Source = (::cppu::OWeakObject*)this;
583 0 : aEvent.ActionCommand = maActionCommand;
584 :
585 : Callback aCallback = ::boost::bind(
586 : &ActionListenerMultiplexer::actionPerformed,
587 : &maActionListeners,
588 : aEvent
589 0 : );
590 0 : ImplExecuteAsyncWithoutSolarLock( aCallback );
591 0 : }
592 : }
593 0 : break;
594 :
595 : case VCLEVENT_PUSHBUTTON_TOGGLE:
596 : {
597 0 : PushButton& rButton = dynamic_cast< PushButton& >( *rVclWindowEvent.GetWindow() );
598 :
599 0 : ::com::sun::star::uno::Reference< ::com::sun::star::awt::XWindow > xKeepAlive( this );
600 0 : if ( maItemListeners.getLength() )
601 : {
602 0 : ::com::sun::star::awt::ItemEvent aEvent;
603 0 : aEvent.Source = (::cppu::OWeakObject*)this;
604 0 : aEvent.Selected = ( rButton.GetState() == STATE_CHECK ) ? 1 : 0;
605 0 : maItemListeners.itemStateChanged( aEvent );
606 0 : }
607 : }
608 0 : break;
609 :
610 : default:
611 0 : VCLXGraphicControl::ProcessWindowEvent( rVclWindowEvent );
612 0 : break;
613 : }
614 0 : }
615 :
616 : // ----------------------------------------------------
617 : // class VCLXImageControl
618 : // ----------------------------------------------------
619 :
620 0 : void VCLXImageControl::ImplGetPropertyIds( std::list< sal_uInt16 > &rIds )
621 : {
622 : PushPropertyIds( rIds,
623 : BASEPROPERTY_BACKGROUNDCOLOR,
624 : BASEPROPERTY_BORDER,
625 : BASEPROPERTY_BORDERCOLOR,
626 : BASEPROPERTY_DEFAULTCONTROL,
627 : BASEPROPERTY_ENABLED,
628 : BASEPROPERTY_ENABLEVISIBLE,
629 : BASEPROPERTY_GRAPHIC,
630 : BASEPROPERTY_HELPTEXT,
631 : BASEPROPERTY_HELPURL,
632 : BASEPROPERTY_IMAGEURL,
633 : BASEPROPERTY_PRINTABLE,
634 : BASEPROPERTY_SCALEIMAGE,
635 : BASEPROPERTY_IMAGE_SCALE_MODE,
636 : BASEPROPERTY_TABSTOP,
637 : BASEPROPERTY_WRITING_MODE,
638 : BASEPROPERTY_CONTEXT_WRITING_MODE,
639 0 : 0);
640 0 : VCLXGraphicControl::ImplGetPropertyIds( rIds );
641 0 : }
642 :
643 0 : VCLXImageControl::VCLXImageControl()
644 : {
645 0 : }
646 :
647 0 : VCLXImageControl::~VCLXImageControl()
648 : {
649 0 : }
650 :
651 0 : void VCLXImageControl::ImplSetNewImage()
652 : {
653 : OSL_PRECOND( GetWindow(), "VCLXImageControl::ImplSetNewImage: window is required to be not-NULL!" );
654 0 : ImageControl* pControl = static_cast< ImageControl* >( GetWindow() );
655 0 : pControl->SetImage( GetImage() );
656 0 : }
657 :
658 0 : ::com::sun::star::awt::Size VCLXImageControl::getMinimumSize( ) throw(::com::sun::star::uno::RuntimeException)
659 : {
660 0 : SolarMutexGuard aGuard;
661 :
662 0 : Size aSz = GetImage().GetSizePixel();
663 0 : aSz = ImplCalcWindowSize( aSz );
664 :
665 0 : return AWTSize(aSz);
666 : }
667 :
668 0 : ::com::sun::star::awt::Size VCLXImageControl::getPreferredSize( ) throw(::com::sun::star::uno::RuntimeException)
669 : {
670 0 : return getMinimumSize();
671 : }
672 :
673 0 : ::com::sun::star::awt::Size VCLXImageControl::calcAdjustedSize( const ::com::sun::star::awt::Size& rNewSize ) throw(::com::sun::star::uno::RuntimeException)
674 : {
675 0 : SolarMutexGuard aGuard;
676 :
677 0 : ::com::sun::star::awt::Size aSz = rNewSize;
678 0 : ::com::sun::star::awt::Size aMinSz = getMinimumSize();
679 0 : if ( aSz.Width < aMinSz.Width )
680 0 : aSz.Width = aMinSz.Width;
681 0 : if ( aSz.Height < aMinSz.Height )
682 0 : aSz.Height = aMinSz.Height;
683 0 : return aSz;
684 : }
685 :
686 0 : void VCLXImageControl::setProperty( const ::rtl::OUString& PropertyName, const ::com::sun::star::uno::Any& Value) throw(::com::sun::star::uno::RuntimeException)
687 : {
688 0 : SolarMutexGuard aGuard;
689 :
690 0 : ImageControl* pImageControl = (ImageControl*)GetWindow();
691 :
692 0 : sal_uInt16 nPropType = GetPropertyId( PropertyName );
693 0 : switch ( nPropType )
694 : {
695 : case BASEPROPERTY_IMAGE_SCALE_MODE:
696 : {
697 0 : sal_Int16 nScaleMode( ImageScaleMode::Anisotropic );
698 0 : if ( pImageControl && ( Value >>= nScaleMode ) )
699 : {
700 0 : pImageControl->SetScaleMode( nScaleMode );
701 : }
702 : }
703 0 : break;
704 :
705 : case BASEPROPERTY_SCALEIMAGE:
706 : {
707 : // this is for compatibility only, nowadays, the ImageScaleMode property should be used
708 0 : sal_Bool bScaleImage = sal_False;
709 0 : if ( pImageControl && ( Value >>= bScaleImage ) )
710 : {
711 0 : pImageControl->SetScaleMode( bScaleImage ? ImageScaleMode::Anisotropic : ImageScaleMode::None );
712 : }
713 : }
714 0 : break;
715 :
716 : default:
717 0 : VCLXGraphicControl::setProperty( PropertyName, Value );
718 0 : break;
719 0 : }
720 0 : }
721 :
722 0 : ::com::sun::star::uno::Any VCLXImageControl::getProperty( const ::rtl::OUString& PropertyName ) throw(::com::sun::star::uno::RuntimeException)
723 : {
724 0 : SolarMutexGuard aGuard;
725 :
726 0 : ::com::sun::star::uno::Any aProp;
727 0 : ImageControl* pImageControl = (ImageControl*)GetWindow();
728 0 : sal_uInt16 nPropType = GetPropertyId( PropertyName );
729 :
730 0 : switch ( nPropType )
731 : {
732 : case BASEPROPERTY_IMAGE_SCALE_MODE:
733 0 : aProp <<= ( pImageControl ? pImageControl->GetScaleMode() : ImageScaleMode::Anisotropic );
734 0 : break;
735 :
736 : case BASEPROPERTY_SCALEIMAGE:
737 0 : aProp <<= ( pImageControl && pImageControl->GetScaleMode() != ImageScaleMode::None ) ? sal_True : sal_False;
738 0 : break;
739 :
740 : default:
741 0 : aProp = VCLXGraphicControl::getProperty( PropertyName );
742 0 : break;
743 : }
744 0 : return aProp;
745 : }
746 :
747 : // ----------------------------------------------------
748 : // class VCLXCheckBox
749 : // ----------------------------------------------------
750 :
751 :
752 1 : void VCLXCheckBox::ImplGetPropertyIds( std::list< sal_uInt16 > &rIds )
753 : {
754 : PushPropertyIds( rIds,
755 : BASEPROPERTY_DEFAULTCONTROL,
756 : BASEPROPERTY_ENABLED,
757 : BASEPROPERTY_ENABLEVISIBLE,
758 : BASEPROPERTY_FONTDESCRIPTOR,
759 : BASEPROPERTY_GRAPHIC,
760 : BASEPROPERTY_HELPTEXT,
761 : BASEPROPERTY_HELPURL,
762 : BASEPROPERTY_IMAGEPOSITION,
763 : BASEPROPERTY_IMAGEURL,
764 : BASEPROPERTY_LABEL,
765 : BASEPROPERTY_PRINTABLE,
766 : BASEPROPERTY_STATE,
767 : BASEPROPERTY_TABSTOP,
768 : BASEPROPERTY_TRISTATE,
769 : BASEPROPERTY_VISUALEFFECT,
770 : BASEPROPERTY_MULTILINE,
771 : BASEPROPERTY_BACKGROUNDCOLOR,
772 : BASEPROPERTY_ALIGN,
773 : BASEPROPERTY_VERTICALALIGN,
774 : BASEPROPERTY_WRITING_MODE,
775 : BASEPROPERTY_CONTEXT_WRITING_MODE,
776 : BASEPROPERTY_REFERENCE_DEVICE,
777 1 : 0);
778 1 : VCLXGraphicControl::ImplGetPropertyIds( rIds );
779 1 : }
780 :
781 0 : VCLXCheckBox::VCLXCheckBox() : maActionListeners( *this ), maItemListeners( *this )
782 : {
783 0 : }
784 :
785 : // ::com::sun::star::uno::XInterface
786 0 : ::com::sun::star::uno::Any VCLXCheckBox::queryInterface( const ::com::sun::star::uno::Type & rType ) throw(::com::sun::star::uno::RuntimeException)
787 : {
788 : ::com::sun::star::uno::Any aRet = ::cppu::queryInterface( rType,
789 : (static_cast< ::com::sun::star::awt::XButton* >(this)),
790 0 : (static_cast< ::com::sun::star::awt::XCheckBox* >(this)) );
791 0 : return (aRet.hasValue() ? aRet : VCLXGraphicControl::queryInterface( rType ));
792 : }
793 :
794 : // ::com::sun::star::lang::XTypeProvider
795 0 : IMPL_XTYPEPROVIDER_START( VCLXCheckBox )
796 0 : getCppuType( ( ::com::sun::star::uno::Reference< ::com::sun::star::awt::XButton>* ) NULL ),
797 0 : getCppuType( ( ::com::sun::star::uno::Reference< ::com::sun::star::awt::XCheckBox>* ) NULL ),
798 : VCLXGraphicControl::getTypes()
799 0 : IMPL_XTYPEPROVIDER_END
800 :
801 0 : ::com::sun::star::uno::Reference< ::com::sun::star::accessibility::XAccessibleContext > VCLXCheckBox::CreateAccessibleContext()
802 : {
803 0 : return getAccessibleFactory().createAccessibleContext( this );
804 : }
805 :
806 0 : void VCLXCheckBox::dispose() throw(::com::sun::star::uno::RuntimeException)
807 : {
808 0 : SolarMutexGuard aGuard;
809 :
810 0 : ::com::sun::star::lang::EventObject aObj;
811 0 : aObj.Source = (::cppu::OWeakObject*)this;
812 0 : maItemListeners.disposeAndClear( aObj );
813 0 : VCLXGraphicControl::dispose();
814 0 : }
815 :
816 0 : void VCLXCheckBox::addItemListener( const ::com::sun::star::uno::Reference< ::com::sun::star::awt::XItemListener > & l ) throw(::com::sun::star::uno::RuntimeException)
817 : {
818 0 : SolarMutexGuard aGuard;
819 0 : maItemListeners.addInterface( l );
820 0 : }
821 :
822 0 : void VCLXCheckBox::removeItemListener( const ::com::sun::star::uno::Reference< ::com::sun::star::awt::XItemListener > & l ) throw(::com::sun::star::uno::RuntimeException)
823 : {
824 0 : SolarMutexGuard aGuard;
825 0 : maItemListeners.removeInterface( l );
826 0 : }
827 :
828 0 : void VCLXCheckBox::addActionListener( const ::com::sun::star::uno::Reference< ::com::sun::star::awt::XActionListener > & l )throw(::com::sun::star::uno::RuntimeException)
829 : {
830 0 : SolarMutexGuard aGuard;
831 0 : maActionListeners.addInterface( l );
832 0 : }
833 :
834 0 : void VCLXCheckBox::removeActionListener( const ::com::sun::star::uno::Reference< ::com::sun::star::awt::XActionListener > & l ) throw(::com::sun::star::uno::RuntimeException)
835 : {
836 0 : SolarMutexGuard aGuard;
837 0 : maActionListeners.removeInterface( l );
838 0 : }
839 :
840 0 : void VCLXCheckBox::setActionCommand( const ::rtl::OUString& rCommand ) throw(::com::sun::star::uno::RuntimeException)
841 : {
842 0 : SolarMutexGuard aGuard;
843 0 : maActionCommand = rCommand;
844 0 : }
845 :
846 0 : void VCLXCheckBox::setLabel( const ::rtl::OUString& rLabel ) throw(::com::sun::star::uno::RuntimeException)
847 : {
848 0 : SolarMutexGuard aGuard;
849 :
850 0 : Window* pWindow = GetWindow();
851 0 : if ( pWindow )
852 0 : pWindow->SetText( rLabel );
853 0 : }
854 :
855 0 : void VCLXCheckBox::setState( short n ) throw(::com::sun::star::uno::RuntimeException)
856 : {
857 0 : SolarMutexGuard aGuard;
858 :
859 0 : CheckBox* pCheckBox = (CheckBox*)GetWindow();
860 0 : if ( pCheckBox)
861 : {
862 : TriState eState;
863 0 : switch ( n )
864 : {
865 0 : case 0: eState = STATE_NOCHECK; break;
866 0 : case 1: eState = STATE_CHECK; break;
867 0 : case 2: eState = STATE_DONTKNOW; break;
868 0 : default: eState = STATE_NOCHECK;
869 : }
870 0 : pCheckBox->SetState( eState );
871 :
872 : // #105198# call C++ click listeners (needed for accessibility)
873 : // pCheckBox->GetClickHdl().Call( pCheckBox );
874 :
875 : // #107218# Call same virtual methods and listeners like VCL would do after user interaction
876 0 : SetSynthesizingVCLEvent( sal_True );
877 0 : pCheckBox->Toggle();
878 0 : pCheckBox->Click();
879 0 : SetSynthesizingVCLEvent( sal_False );
880 0 : }
881 0 : }
882 :
883 0 : short VCLXCheckBox::getState() throw(::com::sun::star::uno::RuntimeException)
884 : {
885 0 : SolarMutexGuard aGuard;
886 :
887 0 : short nState = -1;
888 0 : CheckBox* pCheckBox = (CheckBox*)GetWindow();
889 0 : if ( pCheckBox )
890 : {
891 0 : switch ( pCheckBox->GetState() )
892 : {
893 0 : case STATE_NOCHECK: nState = 0; break;
894 0 : case STATE_CHECK: nState = 1; break;
895 0 : case STATE_DONTKNOW: nState = 2; break;
896 : default: OSL_FAIL( "VCLXCheckBox::getState(): unknown TriState!" );
897 : }
898 : }
899 :
900 0 : return nState;
901 : }
902 :
903 0 : void VCLXCheckBox::enableTriState( sal_Bool b ) throw(::com::sun::star::uno::RuntimeException)
904 : {
905 0 : SolarMutexGuard aGuard;
906 :
907 0 : CheckBox* pCheckBox = (CheckBox*)GetWindow();
908 0 : if ( pCheckBox)
909 0 : pCheckBox->EnableTriState( b );
910 0 : }
911 :
912 0 : ::com::sun::star::awt::Size VCLXCheckBox::getMinimumSize( ) throw(::com::sun::star::uno::RuntimeException)
913 : {
914 0 : SolarMutexGuard aGuard;
915 :
916 0 : Size aSz;
917 0 : CheckBox* pCheckBox = (CheckBox*) GetWindow();
918 0 : if ( pCheckBox )
919 0 : aSz = pCheckBox->CalcMinimumSize();
920 0 : return AWTSize(aSz);
921 : }
922 :
923 0 : ::com::sun::star::awt::Size VCLXCheckBox::getPreferredSize( ) throw(::com::sun::star::uno::RuntimeException)
924 : {
925 0 : return getMinimumSize();
926 : }
927 :
928 0 : ::com::sun::star::awt::Size VCLXCheckBox::calcAdjustedSize( const ::com::sun::star::awt::Size& rNewSize ) throw(::com::sun::star::uno::RuntimeException)
929 : {
930 0 : SolarMutexGuard aGuard;
931 :
932 0 : Size aSz = VCLSize(rNewSize);
933 0 : CheckBox* pCheckBox = (CheckBox*) GetWindow();
934 0 : if ( pCheckBox )
935 : {
936 0 : Size aMinSz = pCheckBox->CalcMinimumSize();
937 0 : if ( ( aSz.Width() > aMinSz.Width() ) && ( aSz.Height() < aMinSz.Height() ) )
938 0 : aSz.Height() = aMinSz.Height();
939 : else
940 0 : aSz = aMinSz;
941 : }
942 0 : return AWTSize(aSz);
943 : }
944 :
945 0 : void VCLXCheckBox::setProperty( const ::rtl::OUString& PropertyName, const ::com::sun::star::uno::Any& Value) throw(::com::sun::star::uno::RuntimeException)
946 : {
947 0 : SolarMutexGuard aGuard;
948 :
949 0 : CheckBox* pCheckBox = (CheckBox*)GetWindow();
950 0 : if ( pCheckBox )
951 : {
952 0 : sal_uInt16 nPropType = GetPropertyId( PropertyName );
953 0 : switch ( nPropType )
954 : {
955 : case BASEPROPERTY_VISUALEFFECT:
956 0 : ::toolkit::setVisualEffect( Value, pCheckBox );
957 0 : break;
958 :
959 : case BASEPROPERTY_TRISTATE:
960 : {
961 0 : sal_Bool b = sal_Bool();
962 0 : if ( Value >>= b )
963 0 : pCheckBox->EnableTriState( b );
964 : }
965 0 : break;
966 : case BASEPROPERTY_STATE:
967 : {
968 0 : sal_Int16 n = sal_Int16();
969 0 : if ( Value >>= n )
970 0 : setState( n );
971 : }
972 0 : break;
973 : default:
974 : {
975 0 : VCLXGraphicControl::setProperty( PropertyName, Value );
976 : }
977 : }
978 0 : }
979 0 : }
980 :
981 0 : ::com::sun::star::uno::Any VCLXCheckBox::getProperty( const ::rtl::OUString& PropertyName ) throw(::com::sun::star::uno::RuntimeException)
982 : {
983 0 : SolarMutexGuard aGuard;
984 :
985 0 : ::com::sun::star::uno::Any aProp;
986 0 : CheckBox* pCheckBox = (CheckBox*)GetWindow();
987 0 : if ( pCheckBox )
988 : {
989 0 : sal_uInt16 nPropType = GetPropertyId( PropertyName );
990 0 : switch ( nPropType )
991 : {
992 : case BASEPROPERTY_VISUALEFFECT:
993 0 : aProp = ::toolkit::getVisualEffect( pCheckBox );
994 0 : break;
995 : case BASEPROPERTY_TRISTATE:
996 0 : aProp <<= (sal_Bool)pCheckBox->IsTriStateEnabled();
997 0 : break;
998 : case BASEPROPERTY_STATE:
999 0 : aProp <<= (sal_Int16)pCheckBox->GetState();
1000 0 : break;
1001 : default:
1002 : {
1003 0 : aProp <<= VCLXGraphicControl::getProperty( PropertyName );
1004 : }
1005 : }
1006 : }
1007 0 : return aProp;
1008 : }
1009 :
1010 0 : void VCLXCheckBox::ProcessWindowEvent( const VclWindowEvent& rVclWindowEvent )
1011 : {
1012 0 : switch ( rVclWindowEvent.GetId() )
1013 : {
1014 : case VCLEVENT_CHECKBOX_TOGGLE:
1015 : {
1016 0 : ::com::sun::star::uno::Reference< ::com::sun::star::awt::XWindow > xKeepAlive( this );
1017 : // since we call listeners below, there is a potential that we will be destroyed
1018 : // in during the listener call. To prevent the resulting crashs, we keep us
1019 : // alive as long as we're here
1020 :
1021 0 : CheckBox* pCheckBox = (CheckBox*)GetWindow();
1022 0 : if ( pCheckBox )
1023 : {
1024 0 : if ( maItemListeners.getLength() )
1025 : {
1026 0 : ::com::sun::star::awt::ItemEvent aEvent;
1027 0 : aEvent.Source = (::cppu::OWeakObject*)this;
1028 0 : aEvent.Highlighted = sal_False;
1029 0 : aEvent.Selected = pCheckBox->GetState();
1030 0 : maItemListeners.itemStateChanged( aEvent );
1031 : }
1032 0 : if ( !IsSynthesizingVCLEvent() && maActionListeners.getLength() )
1033 : {
1034 0 : ::com::sun::star::awt::ActionEvent aEvent;
1035 0 : aEvent.Source = (::cppu::OWeakObject*)this;
1036 0 : aEvent.ActionCommand = maActionCommand;
1037 0 : maActionListeners.actionPerformed( aEvent );
1038 : }
1039 0 : }
1040 : }
1041 0 : break;
1042 :
1043 : default:
1044 0 : VCLXGraphicControl::ProcessWindowEvent( rVclWindowEvent );
1045 0 : break;
1046 : }
1047 0 : }
1048 :
1049 : // ----------------------------------------------------
1050 : // class VCLXRadioButton
1051 : // ----------------------------------------------------
1052 4 : void VCLXRadioButton::ImplGetPropertyIds( std::list< sal_uInt16 > &rIds )
1053 : {
1054 : PushPropertyIds( rIds,
1055 : BASEPROPERTY_DEFAULTCONTROL,
1056 : BASEPROPERTY_ENABLED,
1057 : BASEPROPERTY_ENABLEVISIBLE,
1058 : BASEPROPERTY_FONTDESCRIPTOR,
1059 : BASEPROPERTY_GRAPHIC,
1060 : BASEPROPERTY_HELPTEXT,
1061 : BASEPROPERTY_HELPURL,
1062 : BASEPROPERTY_IMAGEPOSITION,
1063 : BASEPROPERTY_IMAGEURL,
1064 : BASEPROPERTY_LABEL,
1065 : BASEPROPERTY_PRINTABLE,
1066 : BASEPROPERTY_STATE,
1067 : BASEPROPERTY_TABSTOP,
1068 : BASEPROPERTY_VISUALEFFECT,
1069 : BASEPROPERTY_MULTILINE,
1070 : BASEPROPERTY_BACKGROUNDCOLOR,
1071 : BASEPROPERTY_ALIGN,
1072 : BASEPROPERTY_VERTICALALIGN,
1073 : BASEPROPERTY_WRITING_MODE,
1074 : BASEPROPERTY_CONTEXT_WRITING_MODE,
1075 : BASEPROPERTY_REFERENCE_DEVICE,
1076 : BASEPROPERTY_GROUPNAME,
1077 4 : 0);
1078 4 : VCLXGraphicControl::ImplGetPropertyIds( rIds );
1079 4 : }
1080 :
1081 :
1082 0 : VCLXRadioButton::VCLXRadioButton() : maItemListeners( *this ), maActionListeners( *this )
1083 : {
1084 0 : }
1085 :
1086 : // ::com::sun::star::uno::XInterface
1087 0 : ::com::sun::star::uno::Any VCLXRadioButton::queryInterface( const ::com::sun::star::uno::Type & rType ) throw(::com::sun::star::uno::RuntimeException)
1088 : {
1089 : ::com::sun::star::uno::Any aRet = ::cppu::queryInterface( rType,
1090 : (static_cast< ::com::sun::star::awt::XRadioButton* >(this)),
1091 0 : (static_cast< ::com::sun::star::awt::XButton* >(this)) );
1092 0 : return (aRet.hasValue() ? aRet : VCLXGraphicControl::queryInterface( rType ));
1093 : }
1094 :
1095 : // ::com::sun::star::lang::XTypeProvider
1096 0 : IMPL_XTYPEPROVIDER_START( VCLXRadioButton )
1097 0 : getCppuType( ( ::com::sun::star::uno::Reference< ::com::sun::star::awt::XRadioButton>* ) NULL ),
1098 0 : getCppuType( ( ::com::sun::star::uno::Reference< ::com::sun::star::awt::XButton>* ) NULL ),
1099 : VCLXGraphicControl::getTypes()
1100 0 : IMPL_XTYPEPROVIDER_END
1101 :
1102 0 : ::com::sun::star::uno::Reference< ::com::sun::star::accessibility::XAccessibleContext > VCLXRadioButton::CreateAccessibleContext()
1103 : {
1104 0 : return getAccessibleFactory().createAccessibleContext( this );
1105 : }
1106 :
1107 0 : void VCLXRadioButton::dispose() throw(::com::sun::star::uno::RuntimeException)
1108 : {
1109 0 : SolarMutexGuard aGuard;
1110 :
1111 0 : ::com::sun::star::lang::EventObject aObj;
1112 0 : aObj.Source = (::cppu::OWeakObject*)this;
1113 0 : maItemListeners.disposeAndClear( aObj );
1114 0 : VCLXGraphicControl::dispose();
1115 0 : }
1116 :
1117 0 : void VCLXRadioButton::setProperty( const ::rtl::OUString& PropertyName, const ::com::sun::star::uno::Any& Value) throw(::com::sun::star::uno::RuntimeException)
1118 : {
1119 0 : SolarMutexGuard aGuard;
1120 :
1121 0 : RadioButton* pButton = (RadioButton*)GetWindow();
1122 0 : if ( pButton )
1123 : {
1124 0 : sal_uInt16 nPropType = GetPropertyId( PropertyName );
1125 0 : switch ( nPropType )
1126 : {
1127 : case BASEPROPERTY_VISUALEFFECT:
1128 0 : ::toolkit::setVisualEffect( Value, pButton );
1129 0 : break;
1130 :
1131 : case BASEPROPERTY_STATE:
1132 : {
1133 0 : sal_Int16 n = sal_Int16();
1134 0 : if ( Value >>= n )
1135 : {
1136 0 : sal_Bool b = n ? sal_True : sal_False;
1137 0 : if ( pButton->IsRadioCheckEnabled() )
1138 0 : pButton->Check( b );
1139 : else
1140 0 : pButton->SetState( b );
1141 : }
1142 : }
1143 0 : break;
1144 : case BASEPROPERTY_AUTOTOGGLE:
1145 : {
1146 0 : sal_Bool b = sal_Bool();
1147 0 : if ( Value >>= b )
1148 0 : pButton->EnableRadioCheck( b );
1149 : }
1150 0 : break;
1151 : default:
1152 : {
1153 0 : VCLXGraphicControl::setProperty( PropertyName, Value );
1154 : }
1155 : }
1156 0 : }
1157 0 : }
1158 :
1159 0 : ::com::sun::star::uno::Any VCLXRadioButton::getProperty( const ::rtl::OUString& PropertyName ) throw(::com::sun::star::uno::RuntimeException)
1160 : {
1161 0 : SolarMutexGuard aGuard;
1162 :
1163 0 : ::com::sun::star::uno::Any aProp;
1164 0 : RadioButton* pButton = (RadioButton*)GetWindow();
1165 0 : if ( pButton )
1166 : {
1167 0 : sal_uInt16 nPropType = GetPropertyId( PropertyName );
1168 0 : switch ( nPropType )
1169 : {
1170 : case BASEPROPERTY_VISUALEFFECT:
1171 0 : aProp = ::toolkit::getVisualEffect( pButton );
1172 0 : break;
1173 : case BASEPROPERTY_STATE:
1174 0 : aProp <<= (sal_Int16) ( pButton->IsChecked() ? 1 : 0 );
1175 0 : break;
1176 : case BASEPROPERTY_AUTOTOGGLE:
1177 0 : aProp <<= (sal_Bool) pButton->IsRadioCheckEnabled();
1178 0 : break;
1179 : default:
1180 : {
1181 0 : aProp <<= VCLXGraphicControl::getProperty( PropertyName );
1182 : }
1183 : }
1184 : }
1185 0 : return aProp;
1186 : }
1187 :
1188 0 : void VCLXRadioButton::addItemListener( const ::com::sun::star::uno::Reference< ::com::sun::star::awt::XItemListener > & l ) throw(::com::sun::star::uno::RuntimeException)
1189 : {
1190 0 : SolarMutexGuard aGuard;
1191 0 : maItemListeners.addInterface( l );
1192 0 : }
1193 :
1194 0 : void VCLXRadioButton::removeItemListener( const ::com::sun::star::uno::Reference< ::com::sun::star::awt::XItemListener > & l ) throw(::com::sun::star::uno::RuntimeException)
1195 : {
1196 0 : SolarMutexGuard aGuard;
1197 0 : maItemListeners.removeInterface( l );
1198 0 : }
1199 :
1200 0 : void VCLXRadioButton::addActionListener( const ::com::sun::star::uno::Reference< ::com::sun::star::awt::XActionListener > & l )throw(::com::sun::star::uno::RuntimeException)
1201 : {
1202 0 : SolarMutexGuard aGuard;
1203 0 : maActionListeners.addInterface( l );
1204 0 : }
1205 :
1206 0 : void VCLXRadioButton::removeActionListener( const ::com::sun::star::uno::Reference< ::com::sun::star::awt::XActionListener > & l ) throw(::com::sun::star::uno::RuntimeException)
1207 : {
1208 0 : SolarMutexGuard aGuard;
1209 0 : maActionListeners.removeInterface( l );
1210 0 : }
1211 :
1212 0 : void VCLXRadioButton::setLabel( const ::rtl::OUString& rLabel ) throw(::com::sun::star::uno::RuntimeException)
1213 : {
1214 0 : SolarMutexGuard aGuard;
1215 :
1216 0 : Window* pWindow = GetWindow();
1217 0 : if ( pWindow )
1218 0 : pWindow->SetText( rLabel );
1219 0 : }
1220 :
1221 0 : void VCLXRadioButton::setActionCommand( const ::rtl::OUString& rCommand ) throw(::com::sun::star::uno::RuntimeException)
1222 : {
1223 0 : SolarMutexGuard aGuard;
1224 0 : maActionCommand = rCommand;
1225 0 : }
1226 :
1227 0 : void VCLXRadioButton::setState( sal_Bool b ) throw(::com::sun::star::uno::RuntimeException)
1228 : {
1229 0 : SolarMutexGuard aGuard;
1230 :
1231 0 : RadioButton* pRadioButton = (RadioButton*)GetWindow();
1232 0 : if ( pRadioButton)
1233 : {
1234 0 : pRadioButton->Check( b );
1235 : // #102717# item listeners are called, but not C++ click listeners in StarOffice code => call click hdl
1236 : // But this is needed in old code because Accessibility API uses it.
1237 : // pRadioButton->GetClickHdl().Call( pRadioButton );
1238 :
1239 : // #107218# Call same virtual methods and listeners like VCL would do after user interaction
1240 0 : SetSynthesizingVCLEvent( sal_True );
1241 0 : pRadioButton->Click();
1242 0 : SetSynthesizingVCLEvent( sal_False );
1243 0 : }
1244 0 : }
1245 :
1246 0 : sal_Bool VCLXRadioButton::getState() throw(::com::sun::star::uno::RuntimeException)
1247 : {
1248 0 : SolarMutexGuard aGuard;
1249 :
1250 0 : RadioButton* pRadioButton = (RadioButton*)GetWindow();
1251 0 : return pRadioButton ? pRadioButton->IsChecked() : sal_False;
1252 : }
1253 :
1254 0 : ::com::sun::star::awt::Size VCLXRadioButton::getMinimumSize( ) throw(::com::sun::star::uno::RuntimeException)
1255 : {
1256 0 : SolarMutexGuard aGuard;
1257 :
1258 0 : Size aSz;
1259 0 : RadioButton* pRadioButton = (RadioButton*) GetWindow();
1260 0 : if ( pRadioButton )
1261 0 : aSz = pRadioButton->CalcMinimumSize();
1262 0 : return AWTSize(aSz);
1263 : }
1264 :
1265 0 : ::com::sun::star::awt::Size VCLXRadioButton::getPreferredSize( ) throw(::com::sun::star::uno::RuntimeException)
1266 : {
1267 0 : return getMinimumSize();
1268 : }
1269 :
1270 0 : ::com::sun::star::awt::Size VCLXRadioButton::calcAdjustedSize( const ::com::sun::star::awt::Size& rNewSize ) throw(::com::sun::star::uno::RuntimeException)
1271 : {
1272 0 : SolarMutexGuard aGuard;
1273 :
1274 0 : Size aSz = VCLSize(rNewSize);
1275 0 : RadioButton* pRadioButton = (RadioButton*) GetWindow();
1276 0 : if ( pRadioButton )
1277 : {
1278 0 : Size aMinSz = pRadioButton->CalcMinimumSize();
1279 0 : if ( ( aSz.Width() > aMinSz.Width() ) && ( aSz.Height() < aMinSz.Height() ) )
1280 0 : aSz.Height() = aMinSz.Height();
1281 : else
1282 0 : aSz = aMinSz;
1283 : }
1284 0 : return AWTSize(aSz);
1285 : }
1286 :
1287 0 : void VCLXRadioButton::ProcessWindowEvent( const VclWindowEvent& rVclWindowEvent )
1288 : {
1289 0 : ::com::sun::star::uno::Reference< ::com::sun::star::awt::XWindow > xKeepAlive( this );
1290 : // since we call listeners below, there is a potential that we will be destroyed
1291 : // in during the listener call. To prevent the resulting crashs, we keep us
1292 : // alive as long as we're here
1293 :
1294 0 : switch ( rVclWindowEvent.GetId() )
1295 : {
1296 : case VCLEVENT_BUTTON_CLICK:
1297 0 : if ( !IsSynthesizingVCLEvent() && maActionListeners.getLength() )
1298 : {
1299 0 : ::com::sun::star::awt::ActionEvent aEvent;
1300 0 : aEvent.Source = (::cppu::OWeakObject*)this;
1301 0 : aEvent.ActionCommand = maActionCommand;
1302 0 : maActionListeners.actionPerformed( aEvent );
1303 : }
1304 0 : ImplClickedOrToggled( sal_False );
1305 0 : break;
1306 :
1307 : case VCLEVENT_RADIOBUTTON_TOGGLE:
1308 0 : ImplClickedOrToggled( sal_True );
1309 0 : break;
1310 :
1311 : default:
1312 0 : VCLXGraphicControl::ProcessWindowEvent( rVclWindowEvent );
1313 0 : break;
1314 0 : }
1315 0 : }
1316 :
1317 0 : void VCLXRadioButton::ImplClickedOrToggled( sal_Bool bToggled )
1318 : {
1319 : // In the formulars, RadioChecked is not enabled, call itemStateChanged only for click
1320 : // In the dialog editor, RadioChecked is enabled, call itemStateChanged only for bToggled
1321 0 : RadioButton* pRadioButton = (RadioButton*)GetWindow();
1322 0 : if ( pRadioButton && ( pRadioButton->IsRadioCheckEnabled() == bToggled ) && ( bToggled || pRadioButton->IsStateChanged() ) && maItemListeners.getLength() )
1323 : {
1324 0 : ::com::sun::star::awt::ItemEvent aEvent;
1325 0 : aEvent.Source = (::cppu::OWeakObject*)this;
1326 0 : aEvent.Highlighted = sal_False;
1327 0 : aEvent.Selected = pRadioButton->IsChecked();
1328 0 : maItemListeners.itemStateChanged( aEvent );
1329 : }
1330 0 : }
1331 :
1332 : // ----------------------------------------------------
1333 : // class VCLXSpinField
1334 : // ----------------------------------------------------
1335 0 : void VCLXSpinField::ImplGetPropertyIds( std::list< sal_uInt16 > &rIds )
1336 : {
1337 : PushPropertyIds( rIds,
1338 : BASEPROPERTY_MOUSE_WHEEL_BEHAVIOUR,
1339 0 : 0 );
1340 0 : VCLXEdit::ImplGetPropertyIds( rIds );
1341 0 : }
1342 :
1343 0 : VCLXSpinField::VCLXSpinField() : maSpinListeners( *this )
1344 : {
1345 0 : }
1346 :
1347 : // ::com::sun::star::uno::XInterface
1348 0 : ::com::sun::star::uno::Any VCLXSpinField::queryInterface( const ::com::sun::star::uno::Type & rType ) throw(::com::sun::star::uno::RuntimeException)
1349 : {
1350 : ::com::sun::star::uno::Any aRet = ::cppu::queryInterface( rType,
1351 0 : (static_cast< ::com::sun::star::awt::XSpinField* >(this)) );
1352 0 : return (aRet.hasValue() ? aRet : VCLXEdit::queryInterface( rType ));
1353 : }
1354 :
1355 : // ::com::sun::star::lang::XTypeProvider
1356 0 : IMPL_XTYPEPROVIDER_START( VCLXSpinField )
1357 0 : getCppuType( ( ::com::sun::star::uno::Reference< ::com::sun::star::awt::XSpinField>* ) NULL ),
1358 : VCLXEdit::getTypes()
1359 0 : IMPL_XTYPEPROVIDER_END
1360 :
1361 0 : void VCLXSpinField::addSpinListener( const ::com::sun::star::uno::Reference< ::com::sun::star::awt::XSpinListener > & l ) throw(::com::sun::star::uno::RuntimeException)
1362 : {
1363 0 : SolarMutexGuard aGuard;
1364 0 : maSpinListeners.addInterface( l );
1365 0 : }
1366 :
1367 0 : void VCLXSpinField::removeSpinListener( const ::com::sun::star::uno::Reference< ::com::sun::star::awt::XSpinListener > & l ) throw(::com::sun::star::uno::RuntimeException)
1368 : {
1369 0 : SolarMutexGuard aGuard;
1370 0 : maSpinListeners.removeInterface( l );
1371 0 : }
1372 :
1373 0 : void VCLXSpinField::up() throw(::com::sun::star::uno::RuntimeException)
1374 : {
1375 0 : SolarMutexGuard aGuard;
1376 :
1377 0 : SpinField* pSpinField = (SpinField*) GetWindow();
1378 0 : if ( pSpinField )
1379 0 : pSpinField->Up();
1380 0 : }
1381 :
1382 0 : void VCLXSpinField::down() throw(::com::sun::star::uno::RuntimeException)
1383 : {
1384 0 : SolarMutexGuard aGuard;
1385 :
1386 0 : SpinField* pSpinField = (SpinField*) GetWindow();
1387 0 : if ( pSpinField )
1388 0 : pSpinField->Down();
1389 0 : }
1390 :
1391 0 : void VCLXSpinField::first() throw(::com::sun::star::uno::RuntimeException)
1392 : {
1393 0 : SolarMutexGuard aGuard;
1394 :
1395 0 : SpinField* pSpinField = (SpinField*) GetWindow();
1396 0 : if ( pSpinField )
1397 0 : pSpinField->First();
1398 0 : }
1399 :
1400 0 : void VCLXSpinField::last() throw(::com::sun::star::uno::RuntimeException)
1401 : {
1402 0 : SolarMutexGuard aGuard;
1403 :
1404 0 : SpinField* pSpinField = (SpinField*) GetWindow();
1405 0 : if ( pSpinField )
1406 0 : pSpinField->Last();
1407 0 : }
1408 :
1409 0 : void VCLXSpinField::enableRepeat( sal_Bool bRepeat ) throw(::com::sun::star::uno::RuntimeException)
1410 : {
1411 0 : SolarMutexGuard aGuard;
1412 :
1413 0 : Window* pWindow = GetWindow();
1414 0 : if ( pWindow )
1415 : {
1416 0 : WinBits nStyle = pWindow->GetStyle();
1417 0 : if ( bRepeat )
1418 0 : nStyle |= WB_REPEAT;
1419 : else
1420 0 : nStyle &= ~WB_REPEAT;
1421 0 : pWindow->SetStyle( nStyle );
1422 0 : }
1423 0 : }
1424 :
1425 0 : void VCLXSpinField::ProcessWindowEvent( const VclWindowEvent& rVclWindowEvent )
1426 : {
1427 0 : switch ( rVclWindowEvent.GetId() )
1428 : {
1429 : case VCLEVENT_SPINFIELD_UP:
1430 : case VCLEVENT_SPINFIELD_DOWN:
1431 : case VCLEVENT_SPINFIELD_FIRST:
1432 : case VCLEVENT_SPINFIELD_LAST:
1433 : {
1434 0 : ::com::sun::star::uno::Reference< ::com::sun::star::awt::XWindow > xKeepAlive( this );
1435 : // since we call listeners below, there is a potential that we will be destroyed
1436 : // in during the listener call. To prevent the resulting crashs, we keep us
1437 : // alive as long as we're here
1438 :
1439 0 : if ( maSpinListeners.getLength() )
1440 : {
1441 0 : ::com::sun::star::awt::SpinEvent aEvent;
1442 0 : aEvent.Source = (::cppu::OWeakObject*)this;
1443 0 : switch ( rVclWindowEvent.GetId() )
1444 : {
1445 0 : case VCLEVENT_SPINFIELD_UP: maSpinListeners.up( aEvent );
1446 0 : break;
1447 0 : case VCLEVENT_SPINFIELD_DOWN: maSpinListeners.down( aEvent );
1448 0 : break;
1449 0 : case VCLEVENT_SPINFIELD_FIRST: maSpinListeners.first( aEvent );
1450 0 : break;
1451 0 : case VCLEVENT_SPINFIELD_LAST: maSpinListeners.last( aEvent );
1452 0 : break;
1453 0 : }
1454 :
1455 0 : }
1456 : }
1457 0 : break;
1458 :
1459 : default:
1460 0 : VCLXEdit::ProcessWindowEvent( rVclWindowEvent );
1461 0 : break;
1462 : }
1463 0 : }
1464 :
1465 :
1466 : // ----------------------------------------------------
1467 : // class VCLXListBox
1468 : // ----------------------------------------------------
1469 0 : void VCLXListBox::ImplGetPropertyIds( std::list< sal_uInt16 > &rIds )
1470 : {
1471 : PushPropertyIds( rIds,
1472 : BASEPROPERTY_BACKGROUNDCOLOR,
1473 : BASEPROPERTY_BORDER,
1474 : BASEPROPERTY_BORDERCOLOR,
1475 : BASEPROPERTY_DEFAULTCONTROL,
1476 : BASEPROPERTY_DROPDOWN,
1477 : BASEPROPERTY_ENABLED,
1478 : BASEPROPERTY_ENABLEVISIBLE,
1479 : BASEPROPERTY_FONTDESCRIPTOR,
1480 : BASEPROPERTY_HELPTEXT,
1481 : BASEPROPERTY_HELPURL,
1482 : BASEPROPERTY_LINECOUNT,
1483 : BASEPROPERTY_MULTISELECTION,
1484 : BASEPROPERTY_MULTISELECTION_SIMPLEMODE,
1485 : BASEPROPERTY_ITEM_SEPARATOR_POS,
1486 : BASEPROPERTY_PRINTABLE,
1487 : BASEPROPERTY_SELECTEDITEMS,
1488 : BASEPROPERTY_STRINGITEMLIST,
1489 : BASEPROPERTY_TABSTOP,
1490 : BASEPROPERTY_READONLY,
1491 : BASEPROPERTY_ALIGN,
1492 : BASEPROPERTY_WRITING_MODE,
1493 : BASEPROPERTY_CONTEXT_WRITING_MODE,
1494 : BASEPROPERTY_REFERENCE_DEVICE,
1495 : BASEPROPERTY_MOUSE_WHEEL_BEHAVIOUR,
1496 0 : 0);
1497 0 : VCLXWindow::ImplGetPropertyIds( rIds );
1498 0 : }
1499 :
1500 :
1501 0 : VCLXListBox::VCLXListBox()
1502 : : maActionListeners( *this ),
1503 0 : maItemListeners( *this )
1504 : {
1505 0 : }
1506 :
1507 0 : void VCLXListBox::dispose() throw(::com::sun::star::uno::RuntimeException)
1508 : {
1509 0 : SolarMutexGuard aGuard;
1510 :
1511 0 : ::com::sun::star::lang::EventObject aObj;
1512 0 : aObj.Source = (::cppu::OWeakObject*)this;
1513 0 : maItemListeners.disposeAndClear( aObj );
1514 0 : maActionListeners.disposeAndClear( aObj );
1515 0 : VCLXWindow::dispose();
1516 0 : }
1517 :
1518 0 : void VCLXListBox::addItemListener( const ::com::sun::star::uno::Reference< ::com::sun::star::awt::XItemListener > & l ) throw(::com::sun::star::uno::RuntimeException)
1519 : {
1520 0 : SolarMutexGuard aGuard;
1521 0 : maItemListeners.addInterface( l );
1522 0 : }
1523 :
1524 0 : void VCLXListBox::removeItemListener( const ::com::sun::star::uno::Reference< ::com::sun::star::awt::XItemListener > & l ) throw(::com::sun::star::uno::RuntimeException)
1525 : {
1526 0 : SolarMutexGuard aGuard;
1527 0 : maItemListeners.removeInterface( l );
1528 0 : }
1529 :
1530 0 : void VCLXListBox::addActionListener( const ::com::sun::star::uno::Reference< ::com::sun::star::awt::XActionListener > & l ) throw(::com::sun::star::uno::RuntimeException)
1531 : {
1532 0 : SolarMutexGuard aGuard;
1533 0 : maActionListeners.addInterface( l );
1534 0 : }
1535 :
1536 0 : void VCLXListBox::removeActionListener( const ::com::sun::star::uno::Reference< ::com::sun::star::awt::XActionListener > & l ) throw(::com::sun::star::uno::RuntimeException)
1537 : {
1538 0 : SolarMutexGuard aGuard;
1539 0 : maActionListeners.removeInterface( l );
1540 0 : }
1541 :
1542 0 : void VCLXListBox::addItem( const ::rtl::OUString& aItem, sal_Int16 nPos ) throw(::com::sun::star::uno::RuntimeException)
1543 : {
1544 0 : SolarMutexGuard aGuard;
1545 :
1546 0 : ListBox* pBox = (ListBox*) GetWindow();
1547 0 : if ( pBox )
1548 0 : pBox->InsertEntry( aItem, nPos );
1549 0 : }
1550 :
1551 0 : void VCLXListBox::addItems( const ::com::sun::star::uno::Sequence< ::rtl::OUString>& aItems, sal_Int16 nPos ) throw(::com::sun::star::uno::RuntimeException)
1552 : {
1553 0 : SolarMutexGuard aGuard;
1554 :
1555 0 : ListBox* pBox = (ListBox*) GetWindow();
1556 0 : if ( pBox )
1557 : {
1558 0 : sal_uInt16 nP = nPos;
1559 0 : const ::rtl::OUString* pItems = aItems.getConstArray();
1560 0 : const ::rtl::OUString* pItemsEnd = aItems.getConstArray() + aItems.getLength();
1561 0 : while ( pItems != pItemsEnd )
1562 : {
1563 0 : if ( (sal_uInt16)nP == 0xFFFF )
1564 : {
1565 : OSL_FAIL( "VCLXListBox::addItems: too many entries!" );
1566 : // skip remaining entries, list cannot hold them, anyway
1567 0 : break;
1568 : }
1569 :
1570 0 : pBox->InsertEntry( *pItems++, nP++ );
1571 : }
1572 0 : }
1573 0 : }
1574 :
1575 0 : void VCLXListBox::removeItems( sal_Int16 nPos, sal_Int16 nCount ) throw(::com::sun::star::uno::RuntimeException)
1576 : {
1577 0 : SolarMutexGuard aGuard;
1578 :
1579 0 : ListBox* pBox = (ListBox*) GetWindow();
1580 0 : if ( pBox )
1581 : {
1582 0 : for ( sal_uInt16 n = nCount; n; )
1583 0 : pBox->RemoveEntry( nPos + (--n) );
1584 0 : }
1585 0 : }
1586 :
1587 0 : sal_Int16 VCLXListBox::getItemCount() throw(::com::sun::star::uno::RuntimeException)
1588 : {
1589 0 : SolarMutexGuard aGuard;
1590 :
1591 0 : ListBox* pBox = (ListBox*) GetWindow();
1592 0 : return pBox ? pBox->GetEntryCount() : 0;
1593 : }
1594 :
1595 0 : ::rtl::OUString VCLXListBox::getItem( sal_Int16 nPos ) throw(::com::sun::star::uno::RuntimeException)
1596 : {
1597 0 : SolarMutexGuard aGuard;
1598 :
1599 0 : String aItem;
1600 0 : ListBox* pBox = (ListBox*) GetWindow();
1601 0 : if ( pBox )
1602 0 : aItem = pBox->GetEntry( nPos );
1603 0 : return aItem;
1604 : }
1605 :
1606 0 : ::com::sun::star::uno::Sequence< ::rtl::OUString> VCLXListBox::getItems() throw(::com::sun::star::uno::RuntimeException)
1607 : {
1608 0 : SolarMutexGuard aGuard;
1609 :
1610 0 : ::com::sun::star::uno::Sequence< ::rtl::OUString> aSeq;
1611 0 : ListBox* pBox = (ListBox*) GetWindow();
1612 0 : if ( pBox )
1613 : {
1614 0 : sal_uInt16 nEntries = pBox->GetEntryCount();
1615 0 : aSeq = ::com::sun::star::uno::Sequence< ::rtl::OUString>( nEntries );
1616 0 : for ( sal_uInt16 n = nEntries; n; )
1617 : {
1618 0 : --n;
1619 0 : aSeq.getArray()[n] = ::rtl::OUString( pBox->GetEntry( n ) );
1620 : }
1621 : }
1622 0 : return aSeq;
1623 : }
1624 :
1625 0 : sal_Int16 VCLXListBox::getSelectedItemPos() throw(::com::sun::star::uno::RuntimeException)
1626 : {
1627 0 : SolarMutexGuard aGuard;
1628 :
1629 0 : ListBox* pBox = (ListBox*) GetWindow();
1630 0 : return pBox ? pBox->GetSelectEntryPos() : 0;
1631 : }
1632 :
1633 0 : ::com::sun::star::uno::Sequence<sal_Int16> VCLXListBox::getSelectedItemsPos() throw(::com::sun::star::uno::RuntimeException)
1634 : {
1635 0 : SolarMutexGuard aGuard;
1636 :
1637 0 : ::com::sun::star::uno::Sequence<sal_Int16> aSeq;
1638 0 : ListBox* pBox = (ListBox*) GetWindow();
1639 0 : if ( pBox )
1640 : {
1641 0 : sal_uInt16 nSelEntries = pBox->GetSelectEntryCount();
1642 0 : aSeq = ::com::sun::star::uno::Sequence<sal_Int16>( nSelEntries );
1643 0 : for ( sal_uInt16 n = 0; n < nSelEntries; n++ )
1644 0 : aSeq.getArray()[n] = pBox->GetSelectEntryPos( n );
1645 : }
1646 0 : return aSeq;
1647 : }
1648 :
1649 0 : ::rtl::OUString VCLXListBox::getSelectedItem() throw(::com::sun::star::uno::RuntimeException)
1650 : {
1651 0 : SolarMutexGuard aGuard;
1652 :
1653 0 : String aItem;
1654 0 : ListBox* pBox = (ListBox*) GetWindow();
1655 0 : if ( pBox )
1656 0 : aItem = pBox->GetSelectEntry();
1657 0 : return aItem;
1658 : }
1659 :
1660 0 : ::com::sun::star::uno::Sequence< ::rtl::OUString> VCLXListBox::getSelectedItems() throw(::com::sun::star::uno::RuntimeException)
1661 : {
1662 0 : SolarMutexGuard aGuard;
1663 :
1664 0 : ::com::sun::star::uno::Sequence< ::rtl::OUString> aSeq;
1665 0 : ListBox* pBox = (ListBox*) GetWindow();
1666 0 : if ( pBox )
1667 : {
1668 0 : sal_uInt16 nSelEntries = pBox->GetSelectEntryCount();
1669 0 : aSeq = ::com::sun::star::uno::Sequence< ::rtl::OUString>( nSelEntries );
1670 0 : for ( sal_uInt16 n = 0; n < nSelEntries; n++ )
1671 0 : aSeq.getArray()[n] = ::rtl::OUString( pBox->GetSelectEntry( n ) );
1672 : }
1673 0 : return aSeq;
1674 : }
1675 :
1676 0 : void VCLXListBox::selectItemPos( sal_Int16 nPos, sal_Bool bSelect ) throw(::com::sun::star::uno::RuntimeException)
1677 : {
1678 0 : SolarMutexGuard aGuard;
1679 :
1680 0 : ListBox* pBox = (ListBox*) GetWindow();
1681 0 : if ( pBox && ( pBox->IsEntryPosSelected( nPos ) != bSelect ) )
1682 : {
1683 0 : pBox->SelectEntryPos( nPos, bSelect );
1684 :
1685 : // VCL doesn't call select handler after API call.
1686 : // ImplCallItemListeners();
1687 :
1688 : // #107218# Call same listeners like VCL would do after user interaction
1689 0 : SetSynthesizingVCLEvent( sal_True );
1690 0 : pBox->Select();
1691 0 : SetSynthesizingVCLEvent( sal_False );
1692 0 : }
1693 0 : }
1694 :
1695 0 : void VCLXListBox::selectItemsPos( const ::com::sun::star::uno::Sequence<sal_Int16>& aPositions, sal_Bool bSelect ) throw(::com::sun::star::uno::RuntimeException)
1696 : {
1697 0 : SolarMutexGuard aGuard;
1698 :
1699 0 : ListBox* pBox = (ListBox*) GetWindow();
1700 0 : if ( pBox )
1701 : {
1702 0 : sal_Bool bChanged = sal_False;
1703 0 : for ( sal_uInt16 n = (sal_uInt16)aPositions.getLength(); n; )
1704 : {
1705 0 : sal_uInt16 nPos = (sal_uInt16) aPositions.getConstArray()[--n];
1706 0 : if ( pBox->IsEntryPosSelected( nPos ) != bSelect )
1707 : {
1708 0 : pBox->SelectEntryPos( nPos, bSelect );
1709 0 : bChanged = sal_True;
1710 : }
1711 : }
1712 :
1713 0 : if ( bChanged )
1714 : {
1715 : // VCL doesn't call select handler after API call.
1716 : // ImplCallItemListeners();
1717 :
1718 : // #107218# Call same listeners like VCL would do after user interaction
1719 0 : SetSynthesizingVCLEvent( sal_True );
1720 0 : pBox->Select();
1721 0 : SetSynthesizingVCLEvent( sal_False );
1722 : }
1723 0 : }
1724 0 : }
1725 :
1726 0 : void VCLXListBox::selectItem( const ::rtl::OUString& rItemText, sal_Bool bSelect ) throw(::com::sun::star::uno::RuntimeException)
1727 : {
1728 0 : SolarMutexGuard aGuard;
1729 :
1730 0 : ListBox* pBox = (ListBox*) GetWindow();
1731 0 : if ( pBox )
1732 : {
1733 0 : String aItemText( rItemText );
1734 0 : selectItemPos( pBox->GetEntryPos( aItemText ), bSelect );
1735 0 : }
1736 0 : }
1737 :
1738 :
1739 0 : void VCLXListBox::setDropDownLineCount( sal_Int16 nLines ) throw(::com::sun::star::uno::RuntimeException)
1740 : {
1741 0 : SolarMutexGuard aGuard;
1742 :
1743 0 : ListBox* pBox = (ListBox*) GetWindow();
1744 0 : if ( pBox )
1745 0 : pBox->SetDropDownLineCount( nLines );
1746 0 : }
1747 :
1748 0 : sal_Int16 VCLXListBox::getDropDownLineCount() throw(::com::sun::star::uno::RuntimeException)
1749 : {
1750 0 : SolarMutexGuard aGuard;
1751 :
1752 0 : sal_Int16 nLines = 0;
1753 0 : ListBox* pBox = (ListBox*) GetWindow();
1754 0 : if ( pBox )
1755 0 : nLines = pBox->GetDropDownLineCount();
1756 0 : return nLines;
1757 : }
1758 :
1759 0 : sal_Bool VCLXListBox::isMutipleMode() throw(::com::sun::star::uno::RuntimeException)
1760 : {
1761 0 : SolarMutexGuard aGuard;
1762 :
1763 0 : sal_Bool bMulti = sal_False;
1764 0 : ListBox* pBox = (ListBox*) GetWindow();
1765 0 : if ( pBox )
1766 0 : bMulti = pBox->IsMultiSelectionEnabled();
1767 0 : return bMulti;
1768 : }
1769 :
1770 0 : void VCLXListBox::setMultipleMode( sal_Bool bMulti ) throw(::com::sun::star::uno::RuntimeException)
1771 : {
1772 0 : SolarMutexGuard aGuard;
1773 :
1774 0 : ListBox* pBox = (ListBox*) GetWindow();
1775 0 : if ( pBox )
1776 0 : pBox->EnableMultiSelection( bMulti );
1777 0 : }
1778 :
1779 0 : void VCLXListBox::makeVisible( sal_Int16 nEntry ) throw(::com::sun::star::uno::RuntimeException)
1780 : {
1781 0 : SolarMutexGuard aGuard;
1782 :
1783 0 : ListBox* pBox = (ListBox*) GetWindow();
1784 0 : if ( pBox )
1785 0 : pBox->SetTopEntry( nEntry );
1786 0 : }
1787 :
1788 0 : void VCLXListBox::ProcessWindowEvent( const VclWindowEvent& rVclWindowEvent )
1789 : {
1790 0 : ::com::sun::star::uno::Reference< ::com::sun::star::awt::XWindow > xKeepAlive( this );
1791 : // since we call listeners below, there is a potential that we will be destroyed
1792 : // in during the listener call. To prevent the resulting crashs, we keep us
1793 : // alive as long as we're here
1794 :
1795 0 : switch ( rVclWindowEvent.GetId() )
1796 : {
1797 : case VCLEVENT_LISTBOX_SELECT:
1798 : {
1799 0 : ListBox* pListBox = (ListBox*)GetWindow();
1800 :
1801 0 : if( pListBox )
1802 : {
1803 0 : sal_Bool bDropDown = ( pListBox->GetStyle() & WB_DROPDOWN ) ? sal_True : sal_False;
1804 0 : if ( bDropDown && !IsSynthesizingVCLEvent() && maActionListeners.getLength() )
1805 : {
1806 : // Call ActionListener on DropDown event
1807 0 : ::com::sun::star::awt::ActionEvent aEvent;
1808 0 : aEvent.Source = (::cppu::OWeakObject*)this;
1809 0 : aEvent.ActionCommand = pListBox->GetSelectEntry();
1810 0 : maActionListeners.actionPerformed( aEvent );
1811 : }
1812 :
1813 0 : if ( maItemListeners.getLength() )
1814 : {
1815 0 : ImplCallItemListeners();
1816 : }
1817 : }
1818 : }
1819 0 : break;
1820 :
1821 : case VCLEVENT_LISTBOX_DOUBLECLICK:
1822 0 : if ( GetWindow() && maActionListeners.getLength() )
1823 : {
1824 0 : ::com::sun::star::awt::ActionEvent aEvent;
1825 0 : aEvent.Source = (::cppu::OWeakObject*)this;
1826 0 : aEvent.ActionCommand = ((ListBox*)GetWindow())->GetSelectEntry();
1827 0 : maActionListeners.actionPerformed( aEvent );
1828 : }
1829 0 : break;
1830 :
1831 : default:
1832 0 : VCLXWindow::ProcessWindowEvent( rVclWindowEvent );
1833 0 : break;
1834 0 : }
1835 0 : }
1836 :
1837 0 : ::com::sun::star::uno::Reference< ::com::sun::star::accessibility::XAccessibleContext > VCLXListBox::CreateAccessibleContext()
1838 : {
1839 0 : SolarMutexGuard aGuard;
1840 :
1841 0 : return getAccessibleFactory().createAccessibleContext( this );
1842 : }
1843 :
1844 0 : void VCLXListBox::setProperty( const ::rtl::OUString& PropertyName, const ::com::sun::star::uno::Any& Value) throw(::com::sun::star::uno::RuntimeException)
1845 : {
1846 0 : SolarMutexGuard aGuard;
1847 :
1848 0 : ListBox* pListBox = (ListBox*)GetWindow();
1849 0 : if ( pListBox )
1850 : {
1851 0 : sal_uInt16 nPropType = GetPropertyId( PropertyName );
1852 0 : switch ( nPropType )
1853 : {
1854 : case BASEPROPERTY_ITEM_SEPARATOR_POS:
1855 : {
1856 0 : sal_Int16 nSeparatorPos(0);
1857 0 : if ( Value >>= nSeparatorPos )
1858 0 : pListBox->SetSeparatorPos( nSeparatorPos );
1859 : }
1860 0 : break;
1861 : case BASEPROPERTY_READONLY:
1862 : {
1863 0 : sal_Bool b = sal_Bool();
1864 0 : if ( Value >>= b )
1865 0 : pListBox->SetReadOnly( b);
1866 : }
1867 0 : break;
1868 : case BASEPROPERTY_MULTISELECTION:
1869 : {
1870 0 : sal_Bool b = sal_Bool();
1871 0 : if ( Value >>= b )
1872 0 : pListBox->EnableMultiSelection( b );
1873 : }
1874 0 : break;
1875 : case BASEPROPERTY_MULTISELECTION_SIMPLEMODE:
1876 0 : ::toolkit::adjustBooleanWindowStyle( Value, pListBox, WB_SIMPLEMODE, sal_False );
1877 0 : break;
1878 : case BASEPROPERTY_LINECOUNT:
1879 : {
1880 0 : sal_Int16 n = sal_Int16();
1881 0 : if ( Value >>= n )
1882 0 : pListBox->SetDropDownLineCount( n );
1883 : }
1884 0 : break;
1885 : case BASEPROPERTY_STRINGITEMLIST:
1886 : {
1887 0 : ::com::sun::star::uno::Sequence< ::rtl::OUString> aItems;
1888 0 : if ( Value >>= aItems )
1889 : {
1890 0 : pListBox->Clear();
1891 0 : addItems( aItems, 0 );
1892 0 : }
1893 : }
1894 0 : break;
1895 : case BASEPROPERTY_SELECTEDITEMS:
1896 : {
1897 0 : ::com::sun::star::uno::Sequence<sal_Int16> aItems;
1898 0 : if ( Value >>= aItems )
1899 : {
1900 0 : for ( sal_uInt16 n = pListBox->GetEntryCount(); n; )
1901 0 : pListBox->SelectEntryPos( --n, sal_False );
1902 :
1903 0 : if ( aItems.getLength() )
1904 0 : selectItemsPos( aItems, sal_True );
1905 : else
1906 0 : pListBox->SetNoSelection();
1907 :
1908 0 : if ( !pListBox->GetSelectEntryCount() )
1909 0 : pListBox->SetTopEntry( 0 );
1910 0 : }
1911 : }
1912 0 : break;
1913 : default:
1914 : {
1915 0 : VCLXWindow::setProperty( PropertyName, Value );
1916 : }
1917 : }
1918 0 : }
1919 0 : }
1920 :
1921 0 : ::com::sun::star::uno::Any VCLXListBox::getProperty( const ::rtl::OUString& PropertyName ) throw(::com::sun::star::uno::RuntimeException)
1922 : {
1923 0 : SolarMutexGuard aGuard;
1924 :
1925 0 : ::com::sun::star::uno::Any aProp;
1926 0 : ListBox* pListBox = (ListBox*)GetWindow();
1927 0 : if ( pListBox )
1928 : {
1929 0 : sal_uInt16 nPropType = GetPropertyId( PropertyName );
1930 0 : switch ( nPropType )
1931 : {
1932 : case BASEPROPERTY_ITEM_SEPARATOR_POS:
1933 0 : aProp <<= sal_Int16( pListBox->GetSeparatorPos() );
1934 0 : break;
1935 : case BASEPROPERTY_READONLY:
1936 : {
1937 0 : aProp <<= (sal_Bool) pListBox->IsReadOnly();
1938 : }
1939 0 : break;
1940 : case BASEPROPERTY_MULTISELECTION:
1941 : {
1942 0 : aProp <<= (sal_Bool) pListBox->IsMultiSelectionEnabled();
1943 : }
1944 0 : break;
1945 : case BASEPROPERTY_MULTISELECTION_SIMPLEMODE:
1946 : {
1947 0 : aProp <<= (sal_Bool)( ( pListBox->GetStyle() & WB_SIMPLEMODE ) == 0 );
1948 : }
1949 0 : break;
1950 : case BASEPROPERTY_LINECOUNT:
1951 : {
1952 0 : aProp <<= (sal_Int16) pListBox->GetDropDownLineCount();
1953 : }
1954 0 : break;
1955 : case BASEPROPERTY_STRINGITEMLIST:
1956 : {
1957 0 : sal_uInt16 nItems = pListBox->GetEntryCount();
1958 0 : ::com::sun::star::uno::Sequence< ::rtl::OUString> aSeq( nItems );
1959 0 : ::rtl::OUString* pStrings = aSeq.getArray();
1960 0 : for ( sal_uInt16 n = 0; n < nItems; n++ )
1961 0 : pStrings[n] = pListBox->GetEntry( n );
1962 0 : aProp <<= aSeq;
1963 :
1964 : }
1965 0 : break;
1966 : default:
1967 : {
1968 0 : aProp <<= VCLXWindow::getProperty( PropertyName );
1969 : }
1970 : }
1971 : }
1972 0 : return aProp;
1973 : }
1974 :
1975 0 : ::com::sun::star::awt::Size VCLXListBox::getMinimumSize( ) throw(::com::sun::star::uno::RuntimeException)
1976 : {
1977 0 : SolarMutexGuard aGuard;
1978 :
1979 0 : Size aSz;
1980 0 : ListBox* pListBox = (ListBox*) GetWindow();
1981 0 : if ( pListBox )
1982 0 : aSz = pListBox->CalcMinimumSize();
1983 0 : return AWTSize(aSz);
1984 : }
1985 :
1986 0 : ::com::sun::star::awt::Size VCLXListBox::getPreferredSize( ) throw(::com::sun::star::uno::RuntimeException)
1987 : {
1988 0 : SolarMutexGuard aGuard;
1989 :
1990 0 : Size aSz;
1991 0 : ListBox* pListBox = (ListBox*) GetWindow();
1992 0 : if ( pListBox )
1993 : {
1994 0 : aSz = pListBox->CalcMinimumSize();
1995 0 : if ( pListBox->GetStyle() & WB_DROPDOWN )
1996 0 : aSz.Height() += 4;
1997 : }
1998 0 : return AWTSize(aSz);
1999 : }
2000 :
2001 0 : ::com::sun::star::awt::Size VCLXListBox::calcAdjustedSize( const ::com::sun::star::awt::Size& rNewSize ) throw(::com::sun::star::uno::RuntimeException)
2002 : {
2003 0 : SolarMutexGuard aGuard;
2004 :
2005 0 : Size aSz = VCLSize(rNewSize);
2006 0 : ListBox* pListBox = (ListBox*) GetWindow();
2007 0 : if ( pListBox )
2008 0 : aSz = pListBox->CalcAdjustedSize( aSz );
2009 0 : return AWTSize(aSz);
2010 : }
2011 :
2012 0 : ::com::sun::star::awt::Size VCLXListBox::getMinimumSize( sal_Int16 nCols, sal_Int16 nLines ) throw(::com::sun::star::uno::RuntimeException)
2013 : {
2014 0 : SolarMutexGuard aGuard;
2015 :
2016 0 : Size aSz;
2017 0 : ListBox* pListBox = (ListBox*) GetWindow();
2018 0 : if ( pListBox )
2019 0 : aSz = pListBox->CalcSize( nCols, nLines );
2020 0 : return AWTSize(aSz);
2021 : }
2022 :
2023 0 : void VCLXListBox::getColumnsAndLines( sal_Int16& nCols, sal_Int16& nLines ) throw(::com::sun::star::uno::RuntimeException)
2024 : {
2025 0 : SolarMutexGuard aGuard;
2026 :
2027 0 : nCols = nLines = 0;
2028 0 : ListBox* pListBox = (ListBox*) GetWindow();
2029 0 : if ( pListBox )
2030 : {
2031 : sal_uInt16 nC, nL;
2032 0 : pListBox->GetMaxVisColumnsAndLines( nC, nL );
2033 0 : nCols = nC;
2034 0 : nLines = nL;
2035 0 : }
2036 0 : }
2037 :
2038 0 : void VCLXListBox::ImplCallItemListeners()
2039 : {
2040 0 : ListBox* pListBox = (ListBox*) GetWindow();
2041 0 : if ( pListBox && maItemListeners.getLength() )
2042 : {
2043 0 : ::com::sun::star::awt::ItemEvent aEvent;
2044 0 : aEvent.Source = (::cppu::OWeakObject*)this;
2045 0 : aEvent.Highlighted = sal_False;
2046 :
2047 : // Set to 0xFFFF on multiple selection, selected entry ID otherwise
2048 0 : aEvent.Selected = (pListBox->GetSelectEntryCount() == 1 ) ? pListBox->GetSelectEntryPos() : 0xFFFF;
2049 :
2050 0 : maItemListeners.itemStateChanged( aEvent );
2051 : }
2052 0 : }
2053 : namespace
2054 : {
2055 0 : Image lcl_getImageFromURL( const ::rtl::OUString& i_rImageURL )
2056 : {
2057 0 : if ( i_rImageURL.isEmpty() )
2058 0 : return Image();
2059 :
2060 : try
2061 : {
2062 0 : Reference< uno::XComponentContext > xContext( ::comphelper::getProcessComponentContext() );
2063 0 : Reference< XGraphicProvider > xProvider(graphic::GraphicProvider::create(xContext));
2064 0 : ::comphelper::NamedValueCollection aMediaProperties;
2065 0 : aMediaProperties.put( "URL", i_rImageURL );
2066 0 : Reference< XGraphic > xGraphic = xProvider->queryGraphic( aMediaProperties.getPropertyValues() );
2067 0 : return Image( xGraphic );
2068 : }
2069 0 : catch( const uno::Exception& )
2070 : {
2071 : DBG_UNHANDLED_EXCEPTION();
2072 : }
2073 0 : return Image();
2074 : }
2075 : }
2076 0 : void SAL_CALL VCLXListBox::listItemInserted( const ItemListEvent& i_rEvent ) throw (RuntimeException)
2077 : {
2078 0 : SolarMutexGuard aGuard;
2079 :
2080 0 : ListBox* pListBox = dynamic_cast< ListBox* >( GetWindow() );
2081 :
2082 0 : ENSURE_OR_RETURN_VOID( pListBox, "VCLXListBox::listItemInserted: no ListBox?!" );
2083 0 : ENSURE_OR_RETURN_VOID( ( i_rEvent.ItemPosition >= 0 ) && ( i_rEvent.ItemPosition <= sal_Int32( pListBox->GetEntryCount() ) ),
2084 : "VCLXListBox::listItemInserted: illegal (inconsistent) item position!" );
2085 : pListBox->InsertEntry(
2086 : i_rEvent.ItemText.IsPresent ? i_rEvent.ItemText.Value : ::rtl::OUString(),
2087 : i_rEvent.ItemImageURL.IsPresent ? TkResMgr::getImageFromURL( i_rEvent.ItemImageURL.Value ) : Image(),
2088 0 : i_rEvent.ItemPosition );
2089 : }
2090 :
2091 0 : void SAL_CALL VCLXListBox::listItemRemoved( const ItemListEvent& i_rEvent ) throw (RuntimeException)
2092 : {
2093 0 : SolarMutexGuard aGuard;
2094 :
2095 0 : ListBox* pListBox = dynamic_cast< ListBox* >( GetWindow() );
2096 :
2097 0 : ENSURE_OR_RETURN_VOID( pListBox, "VCLXListBox::listItemRemoved: no ListBox?!" );
2098 0 : ENSURE_OR_RETURN_VOID( ( i_rEvent.ItemPosition >= 0 ) && ( i_rEvent.ItemPosition < sal_Int32( pListBox->GetEntryCount() ) ),
2099 : "VCLXListBox::listItemRemoved: illegal (inconsistent) item position!" );
2100 :
2101 0 : pListBox->RemoveEntry( i_rEvent.ItemPosition );
2102 : }
2103 :
2104 0 : void SAL_CALL VCLXListBox::listItemModified( const ItemListEvent& i_rEvent ) throw (RuntimeException)
2105 : {
2106 0 : SolarMutexGuard aGuard;
2107 :
2108 0 : ListBox* pListBox = dynamic_cast< ListBox* >( GetWindow() );
2109 :
2110 0 : ENSURE_OR_RETURN_VOID( pListBox, "VCLXListBox::listItemModified: no ListBox?!" );
2111 0 : ENSURE_OR_RETURN_VOID( ( i_rEvent.ItemPosition >= 0 ) && ( i_rEvent.ItemPosition < sal_Int32( pListBox->GetEntryCount() ) ),
2112 : "VCLXListBox::listItemModified: illegal (inconsistent) item position!" );
2113 :
2114 : // VCL's ListBox does not support changing an entry's text or image, so remove and re-insert
2115 :
2116 0 : const ::rtl::OUString sNewText = i_rEvent.ItemText.IsPresent ? i_rEvent.ItemText.Value : ::rtl::OUString( pListBox->GetEntry( i_rEvent.ItemPosition ) );
2117 0 : const Image aNewImage( i_rEvent.ItemImageURL.IsPresent ? TkResMgr::getImageFromURL( i_rEvent.ItemImageURL.Value ) : pListBox->GetEntryImage( i_rEvent.ItemPosition ) );
2118 :
2119 0 : pListBox->RemoveEntry( i_rEvent.ItemPosition );
2120 0 : pListBox->InsertEntry( sNewText, aNewImage, i_rEvent.ItemPosition );
2121 : }
2122 :
2123 0 : void SAL_CALL VCLXListBox::allItemsRemoved( const EventObject& i_rEvent ) throw (RuntimeException)
2124 : {
2125 0 : SolarMutexGuard aGuard;
2126 :
2127 0 : ListBox* pListBox = dynamic_cast< ListBox* >( GetWindow() );
2128 0 : ENSURE_OR_RETURN_VOID( pListBox, "VCLXListBox::listItemModified: no ListBox?!" );
2129 :
2130 0 : pListBox->Clear();
2131 :
2132 0 : (void)i_rEvent;
2133 : }
2134 :
2135 0 : void SAL_CALL VCLXListBox::itemListChanged( const EventObject& i_rEvent ) throw (RuntimeException)
2136 : {
2137 0 : SolarMutexGuard aGuard;
2138 :
2139 0 : ListBox* pListBox = dynamic_cast< ListBox* >( GetWindow() );
2140 0 : ENSURE_OR_RETURN_VOID( pListBox, "VCLXListBox::listItemModified: no ListBox?!" );
2141 :
2142 0 : pListBox->Clear();
2143 :
2144 0 : uno::Reference< beans::XPropertySet > xPropSet( i_rEvent.Source, uno::UNO_QUERY_THROW );
2145 0 : uno::Reference< beans::XPropertySetInfo > xPSI( xPropSet->getPropertySetInfo(), uno::UNO_QUERY_THROW );
2146 0 : uno::Reference< resource::XStringResourceResolver > xStringResourceResolver;
2147 0 : if ( xPSI->hasPropertyByName( ::rtl::OUString( "ResourceResolver" ) ) )
2148 : {
2149 : xStringResourceResolver.set(
2150 0 : xPropSet->getPropertyValue( ::rtl::OUString( "ResourceResolver" ) ),
2151 : uno::UNO_QUERY
2152 0 : );
2153 : }
2154 :
2155 :
2156 0 : Reference< XItemList > xItemList( i_rEvent.Source, uno::UNO_QUERY_THROW );
2157 0 : uno::Sequence< beans::Pair< ::rtl::OUString, ::rtl::OUString > > aItems = xItemList->getAllItems();
2158 0 : for ( sal_Int32 i=0; i<aItems.getLength(); ++i )
2159 : {
2160 0 : ::rtl::OUString aLocalizationKey( aItems[i].First );
2161 0 : if ( xStringResourceResolver.is() && !aLocalizationKey.isEmpty() && aLocalizationKey[0] == '&' )
2162 : {
2163 0 : aLocalizationKey = xStringResourceResolver->resolveString(aLocalizationKey.copy( 1 ));
2164 : }
2165 0 : pListBox->InsertEntry( aLocalizationKey, lcl_getImageFromURL( aItems[i].Second ) );
2166 0 : }
2167 : }
2168 :
2169 0 : void SAL_CALL VCLXListBox::disposing( const EventObject& i_rEvent ) throw (RuntimeException)
2170 : {
2171 : // just disambiguate
2172 0 : VCLXWindow::disposing( i_rEvent );
2173 0 : }
2174 :
2175 : // ----------------------------------------------------
2176 : // class VCLXMessageBox
2177 : // ----------------------------------------------------
2178 :
2179 0 : void VCLXMessageBox::ImplGetPropertyIds( std::list< sal_uInt16 > &rIds )
2180 : {
2181 0 : VCLXTopWindow::ImplGetPropertyIds( rIds );
2182 0 : }
2183 :
2184 0 : VCLXMessageBox::VCLXMessageBox()
2185 : {
2186 0 : }
2187 :
2188 0 : VCLXMessageBox::~VCLXMessageBox()
2189 : {
2190 0 : }
2191 :
2192 : // ::com::sun::star::uno::XInterface
2193 0 : ::com::sun::star::uno::Any VCLXMessageBox::queryInterface( const ::com::sun::star::uno::Type & rType ) throw(::com::sun::star::uno::RuntimeException)
2194 : {
2195 : ::com::sun::star::uno::Any aRet = ::cppu::queryInterface( rType,
2196 0 : (static_cast< ::com::sun::star::awt::XMessageBox* >(this)) );
2197 0 : return (aRet.hasValue() ? aRet : VCLXTopWindow::queryInterface( rType ));
2198 : }
2199 :
2200 : // ::com::sun::star::lang::XTypeProvider
2201 0 : IMPL_XTYPEPROVIDER_START( VCLXMessageBox )
2202 0 : getCppuType( ( ::com::sun::star::uno::Reference< ::com::sun::star::awt::XMessageBox>* ) NULL ),
2203 : VCLXTopWindow::getTypes()
2204 0 : IMPL_XTYPEPROVIDER_END
2205 :
2206 0 : void VCLXMessageBox::setCaptionText( const ::rtl::OUString& rText ) throw(::com::sun::star::uno::RuntimeException)
2207 : {
2208 0 : SolarMutexGuard aGuard;
2209 :
2210 0 : Window* pWindow = GetWindow();
2211 0 : if ( pWindow )
2212 0 : pWindow->SetText( rText );
2213 0 : }
2214 :
2215 0 : ::rtl::OUString VCLXMessageBox::getCaptionText() throw(::com::sun::star::uno::RuntimeException)
2216 : {
2217 0 : SolarMutexGuard aGuard;
2218 :
2219 0 : String aText;
2220 0 : Window* pWindow = GetWindow();
2221 0 : if ( pWindow )
2222 0 : aText = pWindow->GetText();
2223 0 : return aText;
2224 : }
2225 :
2226 0 : void VCLXMessageBox::setMessageText( const ::rtl::OUString& rText ) throw(::com::sun::star::uno::RuntimeException)
2227 : {
2228 0 : SolarMutexGuard aGuard;
2229 :
2230 0 : MessBox* pBox = (MessBox*)GetWindow();
2231 0 : if ( pBox )
2232 0 : pBox->SetMessText( rText );
2233 0 : }
2234 :
2235 0 : ::rtl::OUString VCLXMessageBox::getMessageText() throw(::com::sun::star::uno::RuntimeException)
2236 : {
2237 0 : SolarMutexGuard aGuard;
2238 :
2239 0 : ::rtl::OUString aText;
2240 0 : MessBox* pBox = (MessBox*)GetWindow();
2241 0 : if ( pBox )
2242 0 : aText = pBox->GetMessText();
2243 0 : return aText;
2244 : }
2245 :
2246 0 : sal_Int16 VCLXMessageBox::execute() throw(::com::sun::star::uno::RuntimeException)
2247 : {
2248 0 : SolarMutexGuard aGuard;
2249 :
2250 0 : MessBox* pBox = (MessBox*)GetWindow();
2251 0 : return pBox ? pBox->Execute() : 0;
2252 : }
2253 :
2254 0 : ::com::sun::star::awt::Size SAL_CALL VCLXMessageBox::getMinimumSize() throw(::com::sun::star::uno::RuntimeException)
2255 : {
2256 0 : SolarMutexGuard aGuard;
2257 0 : return ::com::sun::star::awt::Size( 250, 100 );
2258 : }
2259 :
2260 : // ----------------------------------------------------
2261 : // class VCLXDialog
2262 : // ----------------------------------------------------
2263 0 : void VCLXDialog::ImplGetPropertyIds( std::list< sal_uInt16 > &rIds )
2264 : {
2265 0 : VCLXTopWindow::ImplGetPropertyIds( rIds );
2266 0 : }
2267 :
2268 0 : VCLXDialog::VCLXDialog()
2269 : {
2270 : OSL_TRACE("XDialog created");
2271 0 : }
2272 :
2273 0 : VCLXDialog::~VCLXDialog()
2274 : {
2275 : #ifndef __SUNPRO_CC
2276 : OSL_TRACE ("%s", __FUNCTION__);
2277 : #endif
2278 0 : }
2279 :
2280 : // ::com::sun::star::uno::XInterface
2281 0 : ::com::sun::star::uno::Any VCLXDialog::queryInterface( const ::com::sun::star::uno::Type & rType ) throw(::com::sun::star::uno::RuntimeException)
2282 : {
2283 : ::com::sun::star::uno::Any aRet = ::cppu::queryInterface( rType,
2284 : (static_cast< ::com::sun::star::awt::XDialog2* >(this)),
2285 0 : (static_cast< ::com::sun::star::awt::XDialog* >(this)) );
2286 0 : return (aRet.hasValue() ? aRet : VCLXTopWindow::queryInterface( rType ));
2287 : }
2288 :
2289 : // ::com::sun::star::lang::XTypeProvider
2290 0 : IMPL_XTYPEPROVIDER_START( VCLXDialog )
2291 0 : getCppuType( ( ::com::sun::star::uno::Reference< ::com::sun::star::awt::XDialog2>* ) NULL ),
2292 0 : getCppuType( ( ::com::sun::star::uno::Reference< ::com::sun::star::awt::XDialog>* ) NULL ),
2293 : VCLXTopWindow::getTypes()
2294 0 : IMPL_XTYPEPROVIDER_END
2295 :
2296 0 : void SAL_CALL VCLXDialog::endDialog( ::sal_Int32 i_result ) throw (RuntimeException)
2297 : {
2298 0 : SolarMutexGuard aGuard;
2299 :
2300 0 : Dialog* pDialog = dynamic_cast< Dialog* >( GetWindow() );
2301 0 : if ( pDialog )
2302 0 : pDialog->EndDialog( i_result );
2303 0 : }
2304 :
2305 0 : void SAL_CALL VCLXDialog::setHelpId( const ::rtl::OUString& rId ) throw (RuntimeException)
2306 : {
2307 0 : SolarMutexGuard aGuard;
2308 :
2309 0 : Window* pWindow = GetWindow();
2310 0 : if ( pWindow )
2311 0 : pWindow->SetHelpId( rtl::OUStringToOString( rId, RTL_TEXTENCODING_UTF8 ) );
2312 0 : }
2313 :
2314 0 : void VCLXDialog::setTitle( const ::rtl::OUString& Title ) throw(::com::sun::star::uno::RuntimeException)
2315 : {
2316 0 : SolarMutexGuard aGuard;
2317 :
2318 0 : Window* pWindow = GetWindow();
2319 0 : if ( pWindow )
2320 0 : pWindow->SetText( Title );
2321 0 : }
2322 :
2323 0 : ::rtl::OUString VCLXDialog::getTitle() throw(::com::sun::star::uno::RuntimeException)
2324 : {
2325 0 : SolarMutexGuard aGuard;
2326 :
2327 0 : ::rtl::OUString aTitle;
2328 0 : Window* pWindow = GetWindow();
2329 0 : if ( pWindow )
2330 0 : aTitle = pWindow->GetText();
2331 0 : return aTitle;
2332 : }
2333 :
2334 0 : sal_Int16 VCLXDialog::execute() throw(::com::sun::star::uno::RuntimeException)
2335 : {
2336 0 : SolarMutexGuard aGuard;
2337 :
2338 0 : sal_Int16 nRet = 0;
2339 0 : if ( GetWindow() )
2340 : {
2341 0 : Dialog* pDlg = (Dialog*) GetWindow();
2342 0 : Window* pParent = pDlg->GetWindow( WINDOW_PARENTOVERLAP );
2343 0 : Window* pOldParent = NULL;
2344 0 : Window* pSetParent = NULL;
2345 0 : if ( pParent && !pParent->IsReallyVisible() )
2346 : {
2347 0 : pOldParent = pDlg->GetParent();
2348 0 : Window* pFrame = pDlg->GetWindow( WINDOW_FRAME );
2349 0 : if( pFrame != pDlg )
2350 : {
2351 0 : pDlg->SetParent( pFrame );
2352 0 : pSetParent = pFrame;
2353 : }
2354 : }
2355 :
2356 0 : nRet = pDlg->Execute();
2357 :
2358 : // set the parent back only in case no new parent was set from outside
2359 : // in other words, revert only own changes
2360 0 : if ( pOldParent && pDlg->GetParent() == pSetParent )
2361 0 : pDlg->SetParent( pOldParent );
2362 : }
2363 0 : return nRet;
2364 : }
2365 :
2366 0 : void VCLXDialog::endExecute() throw(::com::sun::star::uno::RuntimeException)
2367 : {
2368 0 : endDialog(0);
2369 0 : }
2370 :
2371 0 : void SAL_CALL VCLXDialog::draw( sal_Int32 nX, sal_Int32 nY ) throw(::com::sun::star::uno::RuntimeException)
2372 : {
2373 0 : SolarMutexGuard aGuard;
2374 0 : Window* pWindow = GetWindow();
2375 :
2376 0 : if ( pWindow )
2377 : {
2378 0 : OutputDevice* pDev = VCLUnoHelper::GetOutputDevice( getGraphics() );
2379 0 : if ( !pDev )
2380 0 : pDev = pWindow->GetParent();
2381 :
2382 0 : Size aSize = pDev->PixelToLogic( pWindow->GetSizePixel() );
2383 0 : Point aPos = pDev->PixelToLogic( Point( nX, nY ) );
2384 :
2385 0 : pWindow->Draw( pDev, aPos, aSize, WINDOW_DRAW_NOCONTROLS );
2386 0 : }
2387 0 : }
2388 :
2389 0 : ::com::sun::star::awt::DeviceInfo VCLXDialog::getInfo() throw(::com::sun::star::uno::RuntimeException)
2390 : {
2391 0 : ::com::sun::star::awt::DeviceInfo aInfo = VCLXDevice::getInfo();
2392 :
2393 0 : SolarMutexGuard aGuard;
2394 0 : Dialog* pDlg = (Dialog*) GetWindow();
2395 0 : if ( pDlg )
2396 0 : pDlg->GetDrawWindowBorder( aInfo.LeftInset, aInfo.TopInset, aInfo.RightInset, aInfo.BottomInset );
2397 :
2398 0 : return aInfo;
2399 : }
2400 :
2401 0 : void SAL_CALL VCLXDialog::setProperty(
2402 : const ::rtl::OUString& PropertyName,
2403 : const ::com::sun::star::uno::Any& Value )
2404 : throw(::com::sun::star::uno::RuntimeException)
2405 : {
2406 0 : SolarMutexGuard aGuard;
2407 :
2408 0 : Dialog* pDialog = (Dialog*)GetWindow();
2409 0 : if ( pDialog )
2410 : {
2411 0 : sal_Bool bVoid = Value.getValueType().getTypeClass() == ::com::sun::star::uno::TypeClass_VOID;
2412 :
2413 0 : sal_uInt16 nPropType = GetPropertyId( PropertyName );
2414 0 : switch ( nPropType )
2415 : {
2416 : case BASEPROPERTY_GRAPHIC:
2417 : {
2418 0 : Reference< XGraphic > xGraphic;
2419 0 : if (( Value >>= xGraphic ) && xGraphic.is() )
2420 : {
2421 0 : Image aImage( xGraphic );
2422 :
2423 0 : Wallpaper aWallpaper( aImage.GetBitmapEx());
2424 0 : aWallpaper.SetStyle( WALLPAPER_SCALE );
2425 0 : pDialog->SetBackground( aWallpaper );
2426 : }
2427 0 : else if ( bVoid || !xGraphic.is() )
2428 : {
2429 0 : Color aColor = pDialog->GetControlBackground().GetColor();
2430 0 : if ( aColor == COL_AUTO )
2431 0 : aColor = pDialog->GetSettings().GetStyleSettings().GetDialogColor();
2432 :
2433 0 : Wallpaper aWallpaper( aColor );
2434 0 : pDialog->SetBackground( aWallpaper );
2435 0 : }
2436 : }
2437 0 : break;
2438 :
2439 : default:
2440 : {
2441 0 : VCLXContainer::setProperty( PropertyName, Value );
2442 : }
2443 : }
2444 0 : }
2445 0 : }
2446 :
2447 :
2448 : // ----------------------------------------------------
2449 : // class VCLXTabPage
2450 : // ----------------------------------------------------
2451 0 : VCLXMultiPage::VCLXMultiPage() : maTabListeners( *this ), mTabId( 1 )
2452 : {
2453 : OSL_TRACE("VCLXMultiPage::VCLXMultiPage()" );
2454 0 : }
2455 :
2456 0 : void VCLXMultiPage::ImplGetPropertyIds( std::list< sal_uInt16 > &rIds )
2457 : {
2458 : PushPropertyIds( rIds,
2459 : BASEPROPERTY_BACKGROUNDCOLOR,
2460 : BASEPROPERTY_DEFAULTCONTROL,
2461 : BASEPROPERTY_ENABLED,
2462 : BASEPROPERTY_MULTIPAGEVALUE,
2463 : BASEPROPERTY_ENABLEVISIBLE,
2464 : BASEPROPERTY_FONTDESCRIPTOR,
2465 : BASEPROPERTY_GRAPHIC,
2466 : BASEPROPERTY_HELPTEXT,
2467 : BASEPROPERTY_HELPURL,
2468 : BASEPROPERTY_IMAGEALIGN,
2469 : BASEPROPERTY_IMAGEPOSITION,
2470 : BASEPROPERTY_IMAGEURL,
2471 : BASEPROPERTY_PRINTABLE,
2472 : BASEPROPERTY_TABSTOP,
2473 : BASEPROPERTY_FOCUSONCLICK,
2474 0 : 0);
2475 0 : VCLXContainer::ImplGetPropertyIds( rIds );
2476 0 : }
2477 :
2478 0 : VCLXMultiPage::~VCLXMultiPage()
2479 : {
2480 0 : }
2481 0 : void SAL_CALL VCLXMultiPage::dispose() throw(::com::sun::star::uno::RuntimeException)
2482 : {
2483 0 : SolarMutexGuard aGuard;
2484 :
2485 0 : ::com::sun::star::lang::EventObject aObj;
2486 0 : aObj.Source = (::cppu::OWeakObject*)this;
2487 0 : maTabListeners.disposeAndClear( aObj );
2488 0 : VCLXContainer::dispose();
2489 0 : }
2490 0 : ::com::sun::star::uno::Any SAL_CALL VCLXMultiPage::queryInterface(const ::com::sun::star::uno::Type & rType )
2491 : throw(::com::sun::star::uno::RuntimeException)
2492 : {
2493 0 : uno::Any aRet = ::cppu::queryInterface( rType, static_cast< awt::XSimpleTabController*>( this ) );
2494 :
2495 0 : return ( aRet.hasValue() ? aRet : VCLXContainer::queryInterface( rType ) );
2496 : }
2497 :
2498 : // ::com::sun::star::lang::XTypeProvider
2499 0 : IMPL_XTYPEPROVIDER_START( VCLXMultiPage )
2500 : VCLXContainer::getTypes()
2501 0 : IMPL_XTYPEPROVIDER_END
2502 :
2503 : // ::com::sun::star::awt::XView
2504 0 : void SAL_CALL VCLXMultiPage::draw( sal_Int32 nX, sal_Int32 nY )
2505 : throw(::com::sun::star::uno::RuntimeException)
2506 : {
2507 0 : SolarMutexGuard aGuard;
2508 0 : Window* pWindow = GetWindow();
2509 :
2510 0 : if ( pWindow )
2511 : {
2512 0 : OutputDevice* pDev = VCLUnoHelper::GetOutputDevice( getGraphics() );
2513 0 : if ( !pDev )
2514 0 : pDev = pWindow->GetParent();
2515 :
2516 0 : Size aSize = pDev->PixelToLogic( pWindow->GetSizePixel() );
2517 0 : Point aPos = pDev->PixelToLogic( Point( nX, nY ) );
2518 :
2519 0 : pWindow->Draw( pDev, aPos, aSize, WINDOW_DRAW_NOCONTROLS );
2520 0 : }
2521 0 : }
2522 :
2523 : // ::com::sun::star::awt::XDevice,
2524 0 : ::com::sun::star::awt::DeviceInfo SAL_CALL VCLXMultiPage::getInfo()
2525 : throw(::com::sun::star::uno::RuntimeException)
2526 : {
2527 0 : ::com::sun::star::awt::DeviceInfo aInfo = VCLXDevice::getInfo();
2528 0 : return aInfo;
2529 : }
2530 :
2531 0 : uno::Any SAL_CALL VCLXMultiPage::getProperty( const ::rtl::OUString& PropertyName ) throw(::com::sun::star::uno::RuntimeException)
2532 : {
2533 0 : SolarMutexGuard aGuard;
2534 : OSL_TRACE(" **** VCLXMultiPage::getProperty( %s )",
2535 : rtl::OUStringToOString( PropertyName,
2536 : RTL_TEXTENCODING_UTF8 ).getStr() );
2537 0 : ::com::sun::star::uno::Any aProp;
2538 0 : sal_uInt16 nPropType = GetPropertyId( PropertyName );
2539 0 : switch ( nPropType )
2540 : {
2541 :
2542 : case BASEPROPERTY_MULTIPAGEVALUE:
2543 : {
2544 0 : aProp <<= getActiveTabID();
2545 : }
2546 0 : break;
2547 : default:
2548 0 : aProp <<= VCLXContainer::getProperty( PropertyName );
2549 : }
2550 0 : return aProp;
2551 : }
2552 :
2553 0 : void SAL_CALL VCLXMultiPage::setProperty(
2554 : const ::rtl::OUString& PropertyName,
2555 : const ::com::sun::star::uno::Any& Value )
2556 : throw(::com::sun::star::uno::RuntimeException)
2557 : {
2558 0 : SolarMutexGuard aGuard;
2559 : OSL_TRACE(" **** VCLXMultiPage::setProperty( %s )", rtl::OUStringToOString( PropertyName, RTL_TEXTENCODING_UTF8 ).getStr() );
2560 :
2561 0 : TabControl* pTabControl = (TabControl*)GetWindow();
2562 0 : if ( pTabControl )
2563 : {
2564 0 : sal_Bool bVoid = Value.getValueType().getTypeClass() == ::com::sun::star::uno::TypeClass_VOID;
2565 :
2566 0 : sal_uInt16 nPropType = GetPropertyId( PropertyName );
2567 0 : switch ( nPropType )
2568 : {
2569 : case BASEPROPERTY_MULTIPAGEVALUE:
2570 : {
2571 : OSL_TRACE("***MULTIPAGE VALUE");
2572 0 : sal_Int32 nId(0);
2573 0 : Value >>= nId;
2574 : // when the multipage is created we attempt to set the activepage
2575 : // but no pages created
2576 0 : if ( nId && nId <= getWindows().getLength() )
2577 0 : activateTab( nId );
2578 : }
2579 : case BASEPROPERTY_GRAPHIC:
2580 : {
2581 0 : Reference< XGraphic > xGraphic;
2582 0 : if (( Value >>= xGraphic ) && xGraphic.is() )
2583 : {
2584 0 : Image aImage( xGraphic );
2585 :
2586 0 : Wallpaper aWallpaper( aImage.GetBitmapEx());
2587 0 : aWallpaper.SetStyle( WALLPAPER_SCALE );
2588 0 : pTabControl->SetBackground( aWallpaper );
2589 : }
2590 0 : else if ( bVoid || !xGraphic.is() )
2591 : {
2592 0 : Color aColor = pTabControl->GetControlBackground().GetColor();
2593 0 : if ( aColor == COL_AUTO )
2594 0 : aColor = pTabControl->GetSettings().GetStyleSettings().GetDialogColor();
2595 :
2596 0 : Wallpaper aWallpaper( aColor );
2597 0 : pTabControl->SetBackground( aWallpaper );
2598 0 : }
2599 : }
2600 0 : break;
2601 :
2602 : default:
2603 : {
2604 0 : VCLXContainer::setProperty( PropertyName, Value );
2605 : }
2606 : }
2607 0 : }
2608 0 : }
2609 :
2610 0 : TabControl *VCLXMultiPage::getTabControl() const throw (uno::RuntimeException)
2611 : {
2612 0 : TabControl *pTabControl = dynamic_cast< TabControl* >( GetWindow() );
2613 0 : if ( pTabControl )
2614 0 : return pTabControl;
2615 0 : throw uno::RuntimeException();
2616 : }
2617 0 : sal_Int32 SAL_CALL VCLXMultiPage::insertTab() throw (uno::RuntimeException)
2618 : {
2619 0 : TabControl *pTabControl = getTabControl();
2620 0 : TabPage* pTab = new TabPage( pTabControl );
2621 0 : rtl::OUString title ("");
2622 0 : return static_cast< sal_Int32 >( insertTab( pTab, title ) );
2623 : }
2624 :
2625 0 : sal_uInt16 VCLXMultiPage::insertTab( TabPage* pPage, rtl::OUString& sTitle )
2626 : {
2627 0 : TabControl *pTabControl = getTabControl();
2628 0 : sal_uInt16 id = sal::static_int_cast< sal_uInt16 >( mTabId++ );
2629 0 : pTabControl->InsertPage( id, sTitle, TAB_APPEND );
2630 0 : pTabControl->SetTabPage( id, pPage );
2631 0 : return id;
2632 : }
2633 :
2634 0 : void SAL_CALL VCLXMultiPage::removeTab( sal_Int32 ID ) throw (uno::RuntimeException, lang::IndexOutOfBoundsException)
2635 : {
2636 0 : TabControl *pTabControl = getTabControl();
2637 0 : if ( pTabControl->GetTabPage( sal::static_int_cast< sal_uInt16 >( ID ) ) == NULL )
2638 0 : throw lang::IndexOutOfBoundsException();
2639 0 : pTabControl->RemovePage( sal::static_int_cast< sal_uInt16 >( ID ) );
2640 0 : }
2641 :
2642 0 : void SAL_CALL VCLXMultiPage::activateTab( sal_Int32 ID ) throw (uno::RuntimeException, lang::IndexOutOfBoundsException)
2643 : {
2644 0 : TabControl *pTabControl = getTabControl();
2645 : OSL_TRACE("Attempting to activate tab %d, active tab is %d, numtabs is %d", ID, getActiveTabID(), getWindows().getLength() );
2646 0 : if ( pTabControl->GetTabPage( sal::static_int_cast< sal_uInt16 >( ID ) ) == NULL )
2647 0 : throw lang::IndexOutOfBoundsException();
2648 0 : pTabControl->SelectTabPage( sal::static_int_cast< sal_uInt16 >( ID ) );
2649 0 : }
2650 :
2651 0 : sal_Int32 SAL_CALL VCLXMultiPage::getActiveTabID() throw (uno::RuntimeException)
2652 : {
2653 0 : return getTabControl()->GetCurPageId( );
2654 : }
2655 :
2656 0 : void SAL_CALL VCLXMultiPage::addTabListener( const uno::Reference< awt::XTabListener >& xListener ) throw (uno::RuntimeException)
2657 : {
2658 0 : SolarMutexGuard aGuard;
2659 0 : maTabListeners.addInterface( xListener );
2660 0 : }
2661 :
2662 0 : void SAL_CALL VCLXMultiPage::removeTabListener( const uno::Reference< awt::XTabListener >& xListener ) throw (uno::RuntimeException)
2663 : {
2664 0 : SolarMutexGuard aGuard;
2665 0 : maTabListeners.addInterface( xListener );
2666 0 : }
2667 :
2668 0 : void SAL_CALL VCLXMultiPage::setTabProps( sal_Int32 ID, const uno::Sequence< beans::NamedValue >& Properties ) throw (uno::RuntimeException, lang::IndexOutOfBoundsException)
2669 : {
2670 0 : SolarMutexGuard aGuard;
2671 0 : TabControl *pTabControl = getTabControl();
2672 0 : if ( pTabControl->GetTabPage( sal::static_int_cast< sal_uInt16 >( ID ) ) == NULL )
2673 0 : throw lang::IndexOutOfBoundsException();
2674 :
2675 0 : for (sal_Int32 i = 0; i < Properties.getLength(); ++i)
2676 : {
2677 0 : const rtl::OUString &name = Properties[i].Name;
2678 0 : const uno::Any &value = Properties[i].Value;
2679 :
2680 0 : if (name.equalsAsciiL(RTL_CONSTASCII_STRINGPARAM("Title")))
2681 : {
2682 0 : rtl::OUString title = value.get<rtl::OUString>();
2683 0 : pTabControl->SetPageText( sal::static_int_cast< sal_uInt16 >( ID ), title );
2684 : }
2685 0 : }
2686 0 : }
2687 :
2688 0 : uno::Sequence< beans::NamedValue > SAL_CALL VCLXMultiPage::getTabProps( sal_Int32 ID )
2689 : throw (lang::IndexOutOfBoundsException, uno::RuntimeException)
2690 : {
2691 0 : SolarMutexGuard aGuard;
2692 0 : TabControl *pTabControl = getTabControl();
2693 0 : if ( pTabControl->GetTabPage( sal::static_int_cast< sal_uInt16 >( ID ) ) == NULL )
2694 0 : throw lang::IndexOutOfBoundsException();
2695 :
2696 : #define ADD_PROP( seq, i, name, val ) { \
2697 : beans::NamedValue value; \
2698 : value.Name = rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( name ) ); \
2699 : value.Value = uno::makeAny( val ); \
2700 : seq[i] = value; \
2701 : }
2702 :
2703 0 : uno::Sequence< beans::NamedValue > props( 2 );
2704 0 : ADD_PROP( props, 0, "Title", rtl::OUString( pTabControl->GetPageText( sal::static_int_cast< sal_uInt16 >( ID ) ) ) );
2705 0 : ADD_PROP( props, 1, "Position", pTabControl->GetPagePos( sal::static_int_cast< sal_uInt16 >( ID ) ) );
2706 : #undef ADD_PROP
2707 0 : return props;
2708 : }
2709 0 : void VCLXMultiPage::ProcessWindowEvent( const VclWindowEvent& rVclWindowEvent )
2710 : {
2711 0 : ::com::sun::star::uno::Reference< ::com::sun::star::awt::XWindow > xKeepAlive( this );
2712 0 : switch ( rVclWindowEvent.GetId() )
2713 : {
2714 : case VCLEVENT_TABPAGE_DEACTIVATE:
2715 : {
2716 0 : sal_uLong nPageID = (sal_uLong)( rVclWindowEvent.GetData() );
2717 0 : maTabListeners.deactivated( nPageID );
2718 0 : break;
2719 :
2720 : }
2721 : case VCLEVENT_TABPAGE_ACTIVATE:
2722 : {
2723 0 : sal_uLong nPageID = (sal_uLong)( rVclWindowEvent.GetData() );
2724 0 : maTabListeners.activated( nPageID );
2725 0 : break;
2726 : }
2727 : default:
2728 0 : VCLXContainer::ProcessWindowEvent( rVclWindowEvent );
2729 0 : break;
2730 0 : };
2731 0 : }
2732 :
2733 : // ----------------------------------------------------
2734 : // class VCLXTabPage
2735 : // ----------------------------------------------------
2736 0 : VCLXTabPage::VCLXTabPage()
2737 : {
2738 0 : }
2739 :
2740 0 : void VCLXTabPage::ImplGetPropertyIds( std::list< sal_uInt16 > &rIds )
2741 : {
2742 : PushPropertyIds( rIds,
2743 : BASEPROPERTY_BACKGROUNDCOLOR,
2744 : BASEPROPERTY_DEFAULTCONTROL,
2745 : BASEPROPERTY_ENABLED,
2746 : BASEPROPERTY_ENABLEVISIBLE,
2747 : BASEPROPERTY_FONTDESCRIPTOR,
2748 : BASEPROPERTY_GRAPHIC,
2749 : BASEPROPERTY_HELPTEXT,
2750 : BASEPROPERTY_HELPURL,
2751 : BASEPROPERTY_IMAGEALIGN,
2752 : BASEPROPERTY_IMAGEPOSITION,
2753 : BASEPROPERTY_IMAGEURL,
2754 : BASEPROPERTY_PRINTABLE,
2755 : BASEPROPERTY_TABSTOP,
2756 : BASEPROPERTY_FOCUSONCLICK,
2757 0 : 0);
2758 0 : VCLXContainer::ImplGetPropertyIds( rIds );
2759 0 : }
2760 :
2761 0 : VCLXTabPage::~VCLXTabPage()
2762 : {
2763 0 : }
2764 :
2765 0 : ::com::sun::star::uno::Any SAL_CALL VCLXTabPage::queryInterface(const ::com::sun::star::uno::Type & rType )
2766 : throw(::com::sun::star::uno::RuntimeException)
2767 : {
2768 0 : return VCLXContainer::queryInterface( rType );
2769 : }
2770 :
2771 : // ::com::sun::star::lang::XTypeProvider
2772 0 : IMPL_XTYPEPROVIDER_START( VCLXTabPage )
2773 : VCLXContainer::getTypes()
2774 0 : IMPL_XTYPEPROVIDER_END
2775 :
2776 : // ::com::sun::star::awt::XView
2777 0 : void SAL_CALL VCLXTabPage::draw( sal_Int32 nX, sal_Int32 nY )
2778 : throw(::com::sun::star::uno::RuntimeException)
2779 : {
2780 0 : SolarMutexGuard aGuard;
2781 0 : Window* pWindow = GetWindow();
2782 :
2783 0 : if ( pWindow )
2784 : {
2785 0 : OutputDevice* pDev = VCLUnoHelper::GetOutputDevice( getGraphics() );
2786 0 : if ( !pDev )
2787 0 : pDev = pWindow->GetParent();
2788 :
2789 0 : Size aSize = pDev->PixelToLogic( pWindow->GetSizePixel() );
2790 0 : Point aPos = pDev->PixelToLogic( Point( nX, nY ) );
2791 :
2792 0 : pWindow->Draw( pDev, aPos, aSize, WINDOW_DRAW_NOCONTROLS );
2793 0 : }
2794 0 : }
2795 :
2796 : // ::com::sun::star::awt::XDevice,
2797 0 : ::com::sun::star::awt::DeviceInfo SAL_CALL VCLXTabPage::getInfo()
2798 : throw(::com::sun::star::uno::RuntimeException)
2799 : {
2800 0 : ::com::sun::star::awt::DeviceInfo aInfo = VCLXDevice::getInfo();
2801 0 : return aInfo;
2802 : }
2803 :
2804 0 : void SAL_CALL VCLXTabPage::setProperty(
2805 : const ::rtl::OUString& PropertyName,
2806 : const ::com::sun::star::uno::Any& Value )
2807 : throw(::com::sun::star::uno::RuntimeException)
2808 : {
2809 0 : SolarMutexGuard aGuard;
2810 :
2811 0 : TabPage* pTabPage = (TabPage*)GetWindow();
2812 0 : if ( pTabPage )
2813 : {
2814 0 : sal_Bool bVoid = Value.getValueType().getTypeClass() == ::com::sun::star::uno::TypeClass_VOID;
2815 :
2816 0 : sal_uInt16 nPropType = GetPropertyId( PropertyName );
2817 0 : switch ( nPropType )
2818 : {
2819 : case BASEPROPERTY_GRAPHIC:
2820 : {
2821 0 : Reference< XGraphic > xGraphic;
2822 0 : if (( Value >>= xGraphic ) && xGraphic.is() )
2823 : {
2824 0 : Image aImage( xGraphic );
2825 :
2826 0 : Wallpaper aWallpaper( aImage.GetBitmapEx());
2827 0 : aWallpaper.SetStyle( WALLPAPER_SCALE );
2828 0 : pTabPage->SetBackground( aWallpaper );
2829 : }
2830 0 : else if ( bVoid || !xGraphic.is() )
2831 : {
2832 0 : Color aColor = pTabPage->GetControlBackground().GetColor();
2833 0 : if ( aColor == COL_AUTO )
2834 0 : aColor = pTabPage->GetSettings().GetStyleSettings().GetDialogColor();
2835 :
2836 0 : Wallpaper aWallpaper( aColor );
2837 0 : pTabPage->SetBackground( aWallpaper );
2838 0 : }
2839 : }
2840 0 : break;
2841 : case BASEPROPERTY_TITLE:
2842 : {
2843 0 : ::rtl::OUString sTitle;
2844 0 : if ( Value >>= sTitle )
2845 : {
2846 0 : pTabPage->SetText(sTitle);
2847 0 : }
2848 : }
2849 0 : break;
2850 :
2851 : default:
2852 : {
2853 0 : VCLXContainer::setProperty( PropertyName, Value );
2854 : }
2855 : }
2856 0 : }
2857 0 : }
2858 :
2859 0 : TabPage *VCLXTabPage::getTabPage() const throw (uno::RuntimeException)
2860 : {
2861 0 : TabPage *pTabPage = dynamic_cast< TabPage* >( GetWindow() );
2862 0 : if ( pTabPage )
2863 0 : return pTabPage;
2864 0 : throw uno::RuntimeException();
2865 : }
2866 :
2867 : // ----------------------------------------------------
2868 : // class VCLXFixedHyperlink
2869 : // ----------------------------------------------------
2870 :
2871 0 : VCLXFixedHyperlink::VCLXFixedHyperlink() :
2872 :
2873 0 : maActionListeners( *this )
2874 :
2875 : {
2876 0 : }
2877 :
2878 0 : VCLXFixedHyperlink::~VCLXFixedHyperlink()
2879 : {
2880 0 : }
2881 :
2882 : // ::com::sun::star::uno::XInterface
2883 0 : ::com::sun::star::uno::Any VCLXFixedHyperlink::queryInterface( const ::com::sun::star::uno::Type & rType ) throw(::com::sun::star::uno::RuntimeException)
2884 : {
2885 : ::com::sun::star::uno::Any aRet = ::cppu::queryInterface( rType,
2886 0 : (static_cast< ::com::sun::star::awt::XFixedHyperlink* >(this)) );
2887 0 : return (aRet.hasValue() ? aRet : VCLXWindow::queryInterface( rType ));
2888 : }
2889 :
2890 0 : void VCLXFixedHyperlink::dispose() throw(::com::sun::star::uno::RuntimeException)
2891 : {
2892 0 : SolarMutexGuard aGuard;
2893 :
2894 0 : ::com::sun::star::lang::EventObject aObj;
2895 0 : aObj.Source = (::cppu::OWeakObject*)this;
2896 0 : maActionListeners.disposeAndClear( aObj );
2897 0 : VCLXWindow::dispose();
2898 0 : }
2899 :
2900 : // ::com::sun::star::lang::XTypeProvider
2901 0 : IMPL_XTYPEPROVIDER_START( VCLXFixedHyperlink )
2902 0 : getCppuType( ( ::com::sun::star::uno::Reference< ::com::sun::star::awt::XFixedHyperlink>* ) NULL ),
2903 : VCLXWindow::getTypes()
2904 0 : IMPL_XTYPEPROVIDER_END
2905 :
2906 0 : void VCLXFixedHyperlink::ProcessWindowEvent( const VclWindowEvent& rVclWindowEvent )
2907 : {
2908 0 : switch ( rVclWindowEvent.GetId() )
2909 : {
2910 : case VCLEVENT_BUTTON_CLICK:
2911 : {
2912 0 : if ( maActionListeners.getLength() )
2913 : {
2914 0 : ::com::sun::star::awt::ActionEvent aEvent;
2915 0 : aEvent.Source = (::cppu::OWeakObject*)this;
2916 0 : maActionListeners.actionPerformed( aEvent );
2917 : }
2918 : else
2919 : {
2920 : // open the URL
2921 0 : ::rtl::OUString sURL;
2922 0 : FixedHyperlink* pBase = (FixedHyperlink*)GetWindow();
2923 0 : if ( pBase )
2924 0 : sURL = pBase->GetURL();
2925 : Reference< ::com::sun::star::system::XSystemShellExecute > xSystemShellExecute( ::com::sun::star::system::SystemShellExecute::create(
2926 0 : ::comphelper::getProcessComponentContext() ) );
2927 0 : if ( !sURL.isEmpty() )
2928 : {
2929 : try
2930 : {
2931 : // start browser
2932 0 : xSystemShellExecute->execute(
2933 0 : sURL, ::rtl::OUString(), ::com::sun::star::system::SystemShellExecuteFlags::URIS_ONLY );
2934 : }
2935 0 : catch( uno::Exception& )
2936 : {
2937 : }
2938 0 : }
2939 : }
2940 : }
2941 :
2942 : default:
2943 0 : VCLXWindow::ProcessWindowEvent( rVclWindowEvent );
2944 0 : break;
2945 : }
2946 0 : }
2947 :
2948 0 : ::com::sun::star::uno::Reference< ::com::sun::star::accessibility::XAccessibleContext > VCLXFixedHyperlink::CreateAccessibleContext()
2949 : {
2950 0 : return getAccessibleFactory().createAccessibleContext( this );
2951 : }
2952 :
2953 0 : void VCLXFixedHyperlink::setText( const ::rtl::OUString& Text ) throw(::com::sun::star::uno::RuntimeException)
2954 : {
2955 0 : SolarMutexGuard aGuard;
2956 :
2957 0 : FixedHyperlink* pBase = (FixedHyperlink*)GetWindow();
2958 0 : if (pBase)
2959 0 : pBase->SetText(Text);
2960 0 : }
2961 :
2962 0 : ::rtl::OUString VCLXFixedHyperlink::getText() throw(::com::sun::star::uno::RuntimeException)
2963 : {
2964 0 : SolarMutexGuard aGuard;
2965 :
2966 0 : ::rtl::OUString aText;
2967 0 : Window* pWindow = GetWindow();
2968 0 : if ( pWindow )
2969 0 : aText = pWindow->GetText();
2970 0 : return aText;
2971 : }
2972 :
2973 0 : void VCLXFixedHyperlink::setURL( const ::rtl::OUString& URL ) throw(::com::sun::star::uno::RuntimeException)
2974 : {
2975 0 : SolarMutexGuard aGuard;
2976 :
2977 0 : FixedHyperlink* pBase = (FixedHyperlink*)GetWindow();
2978 0 : if ( pBase )
2979 0 : pBase->SetURL( URL );
2980 0 : }
2981 :
2982 0 : ::rtl::OUString VCLXFixedHyperlink::getURL( ) throw(::com::sun::star::uno::RuntimeException)
2983 : {
2984 0 : SolarMutexGuard aGuard;
2985 :
2986 0 : ::rtl::OUString aText;
2987 0 : FixedHyperlink* pBase = (FixedHyperlink*)GetWindow();
2988 0 : if ( pBase )
2989 0 : aText = pBase->GetURL();
2990 0 : return aText;
2991 : }
2992 :
2993 0 : void VCLXFixedHyperlink::setAlignment( short nAlign ) throw(::com::sun::star::uno::RuntimeException)
2994 : {
2995 0 : SolarMutexGuard aGuard;
2996 :
2997 0 : Window* pWindow = GetWindow();
2998 0 : if ( pWindow )
2999 : {
3000 0 : WinBits nNewBits = 0;
3001 0 : if ( nAlign == ::com::sun::star::awt::TextAlign::LEFT )
3002 0 : nNewBits = WB_LEFT;
3003 0 : else if ( nAlign == ::com::sun::star::awt::TextAlign::CENTER )
3004 0 : nNewBits = WB_CENTER;
3005 : else
3006 0 : nNewBits = WB_RIGHT;
3007 :
3008 0 : WinBits nStyle = pWindow->GetStyle();
3009 0 : nStyle &= ~(WB_LEFT|WB_CENTER|WB_RIGHT);
3010 0 : pWindow->SetStyle( nStyle | nNewBits );
3011 0 : }
3012 0 : }
3013 :
3014 0 : short VCLXFixedHyperlink::getAlignment() throw(::com::sun::star::uno::RuntimeException)
3015 : {
3016 0 : SolarMutexGuard aGuard;
3017 :
3018 0 : short nAlign = 0;
3019 0 : Window* pWindow = GetWindow();
3020 0 : if ( pWindow )
3021 : {
3022 0 : WinBits nStyle = pWindow->GetStyle();
3023 0 : if ( nStyle & WB_LEFT )
3024 0 : nAlign = ::com::sun::star::awt::TextAlign::LEFT;
3025 0 : else if ( nStyle & WB_CENTER )
3026 0 : nAlign = ::com::sun::star::awt::TextAlign::CENTER;
3027 : else
3028 0 : nAlign = ::com::sun::star::awt::TextAlign::RIGHT;
3029 : }
3030 0 : return nAlign;
3031 : }
3032 :
3033 0 : void VCLXFixedHyperlink::addActionListener( const ::com::sun::star::uno::Reference< ::com::sun::star::awt::XActionListener > & l )throw(::com::sun::star::uno::RuntimeException)
3034 : {
3035 0 : SolarMutexGuard aGuard;
3036 0 : maActionListeners.addInterface( l );
3037 0 : }
3038 :
3039 0 : void VCLXFixedHyperlink::removeActionListener( const ::com::sun::star::uno::Reference< ::com::sun::star::awt::XActionListener > & l ) throw(::com::sun::star::uno::RuntimeException)
3040 : {
3041 0 : SolarMutexGuard aGuard;
3042 0 : maActionListeners.removeInterface( l );
3043 0 : }
3044 :
3045 0 : ::com::sun::star::awt::Size VCLXFixedHyperlink::getMinimumSize( ) throw(::com::sun::star::uno::RuntimeException)
3046 : {
3047 0 : SolarMutexGuard aGuard;
3048 :
3049 0 : Size aSz;
3050 0 : FixedText* pFixedText = (FixedText*)GetWindow();
3051 0 : if ( pFixedText )
3052 0 : aSz = pFixedText->CalcMinimumSize();
3053 0 : return AWTSize(aSz);
3054 : }
3055 :
3056 0 : ::com::sun::star::awt::Size VCLXFixedHyperlink::getPreferredSize( ) throw(::com::sun::star::uno::RuntimeException)
3057 : {
3058 0 : return getMinimumSize();
3059 : }
3060 :
3061 0 : ::com::sun::star::awt::Size VCLXFixedHyperlink::calcAdjustedSize( const ::com::sun::star::awt::Size& rNewSize ) throw(::com::sun::star::uno::RuntimeException)
3062 : {
3063 0 : SolarMutexGuard aGuard;
3064 :
3065 0 : ::com::sun::star::awt::Size aSz = rNewSize;
3066 0 : ::com::sun::star::awt::Size aMinSz = getMinimumSize();
3067 0 : if ( aSz.Height != aMinSz.Height )
3068 0 : aSz.Height = aMinSz.Height;
3069 :
3070 0 : return aSz;
3071 : }
3072 :
3073 0 : void VCLXFixedHyperlink::setProperty( const ::rtl::OUString& PropertyName, const ::com::sun::star::uno::Any& Value) throw(::com::sun::star::uno::RuntimeException)
3074 : {
3075 0 : SolarMutexGuard aGuard;
3076 :
3077 0 : FixedHyperlink* pBase = (FixedHyperlink*)GetWindow();
3078 0 : if ( pBase )
3079 : {
3080 0 : sal_uInt16 nPropType = GetPropertyId( PropertyName );
3081 0 : switch ( nPropType )
3082 : {
3083 : case BASEPROPERTY_LABEL:
3084 : {
3085 0 : ::rtl::OUString sNewLabel;
3086 0 : if ( Value >>= sNewLabel )
3087 0 : pBase->SetText(sNewLabel);
3088 0 : break;
3089 : }
3090 :
3091 : case BASEPROPERTY_URL:
3092 : {
3093 0 : ::rtl::OUString sNewURL;
3094 0 : if ( Value >>= sNewURL )
3095 0 : pBase->SetURL( sNewURL );
3096 0 : break;
3097 : }
3098 :
3099 : default:
3100 : {
3101 0 : VCLXWindow::setProperty( PropertyName, Value );
3102 : }
3103 : }
3104 0 : }
3105 0 : }
3106 :
3107 0 : ::com::sun::star::uno::Any VCLXFixedHyperlink::getProperty( const ::rtl::OUString& PropertyName ) throw(::com::sun::star::uno::RuntimeException)
3108 : {
3109 0 : SolarMutexGuard aGuard;
3110 :
3111 0 : ::com::sun::star::uno::Any aProp;
3112 0 : FixedHyperlink* pBase = (FixedHyperlink*)GetWindow();
3113 0 : if ( pBase )
3114 : {
3115 0 : sal_uInt16 nPropType = GetPropertyId( PropertyName );
3116 0 : switch ( nPropType )
3117 : {
3118 : case BASEPROPERTY_URL:
3119 : {
3120 0 : aProp = makeAny( ::rtl::OUString( pBase->GetURL() ) );
3121 0 : break;
3122 : }
3123 :
3124 : default:
3125 : {
3126 0 : aProp <<= VCLXWindow::getProperty( PropertyName );
3127 : }
3128 : }
3129 : }
3130 0 : return aProp;
3131 : }
3132 :
3133 0 : void VCLXFixedHyperlink::ImplGetPropertyIds( std::list< sal_uInt16 > &rIds )
3134 : {
3135 : PushPropertyIds( rIds,
3136 : BASEPROPERTY_ALIGN,
3137 : BASEPROPERTY_BACKGROUNDCOLOR,
3138 : BASEPROPERTY_BORDER,
3139 : BASEPROPERTY_BORDERCOLOR,
3140 : BASEPROPERTY_DEFAULTCONTROL,
3141 : BASEPROPERTY_ENABLED,
3142 : BASEPROPERTY_ENABLEVISIBLE,
3143 : BASEPROPERTY_FONTDESCRIPTOR,
3144 : BASEPROPERTY_HELPTEXT,
3145 : BASEPROPERTY_HELPURL,
3146 : BASEPROPERTY_LABEL,
3147 : BASEPROPERTY_MULTILINE,
3148 : BASEPROPERTY_NOLABEL,
3149 : BASEPROPERTY_PRINTABLE,
3150 : BASEPROPERTY_TABSTOP,
3151 : BASEPROPERTY_VERTICALALIGN,
3152 : BASEPROPERTY_URL,
3153 : BASEPROPERTY_WRITING_MODE,
3154 : BASEPROPERTY_CONTEXT_WRITING_MODE,
3155 0 : 0);
3156 0 : VCLXWindow::ImplGetPropertyIds( rIds );
3157 0 : }
3158 :
3159 : // ----------------------------------------------------
3160 : // class VCLXFixedText
3161 : // ----------------------------------------------------
3162 0 : void VCLXFixedText::ImplGetPropertyIds( std::list< sal_uInt16 > &rIds )
3163 : {
3164 : PushPropertyIds( rIds,
3165 : BASEPROPERTY_ALIGN,
3166 : BASEPROPERTY_BACKGROUNDCOLOR,
3167 : BASEPROPERTY_BORDER,
3168 : BASEPROPERTY_BORDERCOLOR,
3169 : BASEPROPERTY_DEFAULTCONTROL,
3170 : BASEPROPERTY_ENABLED,
3171 : BASEPROPERTY_ENABLEVISIBLE,
3172 : BASEPROPERTY_FONTDESCRIPTOR,
3173 : BASEPROPERTY_HELPTEXT,
3174 : BASEPROPERTY_HELPURL,
3175 : BASEPROPERTY_LABEL,
3176 : BASEPROPERTY_MULTILINE,
3177 : BASEPROPERTY_NOLABEL,
3178 : BASEPROPERTY_PRINTABLE,
3179 : BASEPROPERTY_TABSTOP,
3180 : BASEPROPERTY_VERTICALALIGN,
3181 : BASEPROPERTY_WRITING_MODE,
3182 : BASEPROPERTY_CONTEXT_WRITING_MODE,
3183 : BASEPROPERTY_REFERENCE_DEVICE,
3184 0 : 0);
3185 0 : VCLXWindow::ImplGetPropertyIds( rIds );
3186 0 : }
3187 :
3188 0 : VCLXFixedText::VCLXFixedText()
3189 : {
3190 0 : }
3191 :
3192 0 : VCLXFixedText::~VCLXFixedText()
3193 : {
3194 0 : }
3195 :
3196 : // ::com::sun::star::uno::XInterface
3197 0 : ::com::sun::star::uno::Any VCLXFixedText::queryInterface( const ::com::sun::star::uno::Type & rType ) throw(::com::sun::star::uno::RuntimeException)
3198 : {
3199 : ::com::sun::star::uno::Any aRet = ::cppu::queryInterface( rType,
3200 0 : (static_cast< ::com::sun::star::awt::XFixedText* >(this)) );
3201 0 : return (aRet.hasValue() ? aRet : VCLXWindow::queryInterface( rType ));
3202 : }
3203 :
3204 : // ::com::sun::star::lang::XTypeProvider
3205 0 : IMPL_XTYPEPROVIDER_START( VCLXFixedText )
3206 0 : getCppuType( ( ::com::sun::star::uno::Reference< ::com::sun::star::awt::XFixedText>* ) NULL ),
3207 : VCLXWindow::getTypes()
3208 0 : IMPL_XTYPEPROVIDER_END
3209 :
3210 0 : ::com::sun::star::uno::Reference< ::com::sun::star::accessibility::XAccessibleContext > VCLXFixedText::CreateAccessibleContext()
3211 : {
3212 0 : return getAccessibleFactory().createAccessibleContext( this );
3213 : }
3214 :
3215 0 : void VCLXFixedText::setText( const ::rtl::OUString& Text ) throw(::com::sun::star::uno::RuntimeException)
3216 : {
3217 0 : SolarMutexGuard aGuard;
3218 :
3219 0 : Window* pWindow = GetWindow();
3220 0 : if ( pWindow )
3221 0 : pWindow->SetText( Text );
3222 0 : }
3223 :
3224 0 : ::rtl::OUString VCLXFixedText::getText() throw(::com::sun::star::uno::RuntimeException)
3225 : {
3226 0 : SolarMutexGuard aGuard;
3227 :
3228 0 : ::rtl::OUString aText;
3229 0 : Window* pWindow = GetWindow();
3230 0 : if ( pWindow )
3231 0 : aText = pWindow->GetText();
3232 0 : return aText;
3233 : }
3234 :
3235 0 : void VCLXFixedText::setAlignment( short nAlign ) throw(::com::sun::star::uno::RuntimeException)
3236 : {
3237 0 : SolarMutexGuard aGuard;
3238 :
3239 0 : Window* pWindow = GetWindow();
3240 0 : if ( pWindow )
3241 : {
3242 0 : WinBits nNewBits = 0;
3243 0 : if ( nAlign == ::com::sun::star::awt::TextAlign::LEFT )
3244 0 : nNewBits = WB_LEFT;
3245 0 : else if ( nAlign == ::com::sun::star::awt::TextAlign::CENTER )
3246 0 : nNewBits = WB_CENTER;
3247 : else
3248 0 : nNewBits = WB_RIGHT;
3249 :
3250 0 : WinBits nStyle = pWindow->GetStyle();
3251 0 : nStyle &= ~(WB_LEFT|WB_CENTER|WB_RIGHT);
3252 0 : pWindow->SetStyle( nStyle | nNewBits );
3253 0 : }
3254 0 : }
3255 :
3256 0 : short VCLXFixedText::getAlignment() throw(::com::sun::star::uno::RuntimeException)
3257 : {
3258 0 : SolarMutexGuard aGuard;
3259 :
3260 0 : short nAlign = 0;
3261 0 : Window* pWindow = GetWindow();
3262 0 : if ( pWindow )
3263 : {
3264 0 : WinBits nStyle = pWindow->GetStyle();
3265 0 : if ( nStyle & WB_LEFT )
3266 0 : nAlign = ::com::sun::star::awt::TextAlign::LEFT;
3267 0 : else if ( nStyle & WB_CENTER )
3268 0 : nAlign = ::com::sun::star::awt::TextAlign::CENTER;
3269 : else
3270 0 : nAlign = ::com::sun::star::awt::TextAlign::RIGHT;
3271 : }
3272 0 : return nAlign;
3273 : }
3274 :
3275 0 : ::com::sun::star::awt::Size VCLXFixedText::getMinimumSize( ) throw(::com::sun::star::uno::RuntimeException)
3276 : {
3277 0 : SolarMutexGuard aGuard;
3278 :
3279 0 : Size aSz;
3280 0 : FixedText* pFixedText = (FixedText*)GetWindow();
3281 0 : if ( pFixedText )
3282 0 : aSz = pFixedText->CalcMinimumSize();
3283 0 : return AWTSize(aSz);
3284 : }
3285 :
3286 0 : ::com::sun::star::awt::Size VCLXFixedText::getPreferredSize( ) throw(::com::sun::star::uno::RuntimeException)
3287 : {
3288 0 : return getMinimumSize();
3289 : }
3290 :
3291 0 : ::com::sun::star::awt::Size VCLXFixedText::calcAdjustedSize( const ::com::sun::star::awt::Size& rMaxSize ) throw(::com::sun::star::uno::RuntimeException)
3292 : {
3293 0 : SolarMutexGuard aGuard;
3294 :
3295 0 : Size aAdjustedSize( VCLUnoHelper::ConvertToVCLSize( rMaxSize ) );
3296 0 : FixedText* pFixedText = (FixedText*)GetWindow();
3297 0 : if ( pFixedText )
3298 0 : aAdjustedSize = pFixedText->CalcMinimumSize( rMaxSize.Width );
3299 0 : return VCLUnoHelper::ConvertToAWTSize( aAdjustedSize );
3300 : }
3301 :
3302 : // ----------------------------------------------------
3303 : // class VCLXScrollBar
3304 : // ----------------------------------------------------
3305 0 : void VCLXScrollBar::ImplGetPropertyIds( std::list< sal_uInt16 > &rIds )
3306 : {
3307 : PushPropertyIds( rIds,
3308 : BASEPROPERTY_BACKGROUNDCOLOR,
3309 : BASEPROPERTY_BLOCKINCREMENT,
3310 : BASEPROPERTY_BORDER,
3311 : BASEPROPERTY_BORDERCOLOR,
3312 : BASEPROPERTY_DEFAULTCONTROL,
3313 : BASEPROPERTY_ENABLED,
3314 : BASEPROPERTY_ENABLEVISIBLE,
3315 : BASEPROPERTY_HELPTEXT,
3316 : BASEPROPERTY_HELPURL,
3317 : BASEPROPERTY_LINEINCREMENT,
3318 : BASEPROPERTY_LIVE_SCROLL,
3319 : BASEPROPERTY_ORIENTATION,
3320 : BASEPROPERTY_PRINTABLE,
3321 : BASEPROPERTY_REPEAT_DELAY,
3322 : BASEPROPERTY_SCROLLVALUE,
3323 : BASEPROPERTY_SCROLLVALUE_MAX,
3324 : BASEPROPERTY_SCROLLVALUE_MIN,
3325 : BASEPROPERTY_SYMBOL_COLOR,
3326 : BASEPROPERTY_TABSTOP,
3327 : BASEPROPERTY_VISIBLESIZE,
3328 : BASEPROPERTY_WRITING_MODE,
3329 : BASEPROPERTY_CONTEXT_WRITING_MODE,
3330 0 : 0);
3331 0 : VCLXWindow::ImplGetPropertyIds( rIds );
3332 0 : }
3333 :
3334 0 : VCLXScrollBar::VCLXScrollBar() : maAdjustmentListeners( *this )
3335 : {
3336 0 : }
3337 :
3338 : // ::com::sun::star::uno::XInterface
3339 0 : ::com::sun::star::uno::Any VCLXScrollBar::queryInterface( const ::com::sun::star::uno::Type & rType ) throw(::com::sun::star::uno::RuntimeException)
3340 : {
3341 : ::com::sun::star::uno::Any aRet = ::cppu::queryInterface( rType,
3342 0 : (static_cast< ::com::sun::star::awt::XScrollBar* >(this)) );
3343 0 : return (aRet.hasValue() ? aRet : VCLXWindow::queryInterface( rType ));
3344 : }
3345 :
3346 : // ::com::sun::star::lang::XTypeProvider
3347 0 : IMPL_XTYPEPROVIDER_START( VCLXScrollBar )
3348 0 : getCppuType( ( ::com::sun::star::uno::Reference< ::com::sun::star::awt::XScrollBar>* ) NULL ),
3349 : VCLXWindow::getTypes()
3350 0 : IMPL_XTYPEPROVIDER_END
3351 :
3352 0 : ::com::sun::star::uno::Reference< ::com::sun::star::accessibility::XAccessibleContext > VCLXScrollBar::CreateAccessibleContext()
3353 : {
3354 0 : return getAccessibleFactory().createAccessibleContext( this );
3355 : }
3356 :
3357 : // ::com::sun::star::lang::XComponent
3358 0 : void VCLXScrollBar::dispose() throw(::com::sun::star::uno::RuntimeException)
3359 : {
3360 0 : SolarMutexGuard aGuard;
3361 :
3362 0 : ::com::sun::star::lang::EventObject aObj;
3363 0 : aObj.Source = (::cppu::OWeakObject*)this;
3364 0 : maAdjustmentListeners.disposeAndClear( aObj );
3365 0 : VCLXWindow::dispose();
3366 0 : }
3367 :
3368 : // ::com::sun::star::awt::XScrollbar
3369 0 : void VCLXScrollBar::addAdjustmentListener( const ::com::sun::star::uno::Reference< ::com::sun::star::awt::XAdjustmentListener > & l ) throw(::com::sun::star::uno::RuntimeException)
3370 : {
3371 0 : SolarMutexGuard aGuard;
3372 0 : maAdjustmentListeners.addInterface( l );
3373 0 : }
3374 :
3375 0 : void VCLXScrollBar::removeAdjustmentListener( const ::com::sun::star::uno::Reference< ::com::sun::star::awt::XAdjustmentListener > & l ) throw(::com::sun::star::uno::RuntimeException)
3376 : {
3377 0 : SolarMutexGuard aGuard;
3378 0 : maAdjustmentListeners.removeInterface( l );
3379 0 : }
3380 :
3381 0 : void VCLXScrollBar::setValue( sal_Int32 n ) throw(::com::sun::star::uno::RuntimeException)
3382 : {
3383 0 : SolarMutexGuard aGuard;
3384 :
3385 0 : ScrollBar* pScrollBar = (ScrollBar*) GetWindow();
3386 0 : if ( pScrollBar )
3387 0 : pScrollBar->DoScroll( n );
3388 0 : }
3389 :
3390 0 : void VCLXScrollBar::setValues( sal_Int32 nValue, sal_Int32 nVisible, sal_Int32 nMax ) throw(::com::sun::star::uno::RuntimeException)
3391 : {
3392 0 : SolarMutexGuard aGuard;
3393 :
3394 0 : ScrollBar* pScrollBar = (ScrollBar*) GetWindow();
3395 0 : if ( pScrollBar )
3396 : {
3397 0 : pScrollBar->SetVisibleSize( nVisible );
3398 0 : pScrollBar->SetRangeMax( nMax );
3399 0 : pScrollBar->DoScroll( nValue );
3400 0 : }
3401 0 : }
3402 :
3403 0 : sal_Int32 VCLXScrollBar::getValue() throw(::com::sun::star::uno::RuntimeException)
3404 : {
3405 0 : SolarMutexGuard aGuard;
3406 :
3407 0 : ScrollBar* pScrollBar = (ScrollBar*) GetWindow();
3408 0 : return pScrollBar ? pScrollBar->GetThumbPos() : 0;
3409 : }
3410 :
3411 0 : void VCLXScrollBar::setMaximum( sal_Int32 n ) throw(::com::sun::star::uno::RuntimeException)
3412 : {
3413 0 : SolarMutexGuard aGuard;
3414 :
3415 0 : ScrollBar* pScrollBar = (ScrollBar*) GetWindow();
3416 0 : if ( pScrollBar )
3417 0 : pScrollBar->SetRangeMax( n );
3418 0 : }
3419 :
3420 0 : sal_Int32 VCLXScrollBar::getMaximum() throw(::com::sun::star::uno::RuntimeException)
3421 : {
3422 0 : SolarMutexGuard aGuard;
3423 :
3424 0 : ScrollBar* pScrollBar = (ScrollBar*) GetWindow();
3425 0 : return pScrollBar ? pScrollBar->GetRangeMax() : 0;
3426 : }
3427 :
3428 0 : void VCLXScrollBar::setMinimum( sal_Int32 n ) throw(::com::sun::star::uno::RuntimeException)
3429 : {
3430 0 : SolarMutexGuard aGuard;
3431 :
3432 0 : ScrollBar* pScrollBar = static_cast< ScrollBar* >( GetWindow() );
3433 0 : if ( pScrollBar )
3434 0 : pScrollBar->SetRangeMin( n );
3435 0 : }
3436 :
3437 0 : sal_Int32 VCLXScrollBar::getMinimum() throw(::com::sun::star::uno::RuntimeException)
3438 : {
3439 0 : SolarMutexGuard aGuard;
3440 :
3441 0 : ScrollBar* pScrollBar = static_cast< ScrollBar* >( GetWindow() );
3442 0 : return pScrollBar ? pScrollBar->GetRangeMin() : 0;
3443 : }
3444 :
3445 0 : void VCLXScrollBar::setLineIncrement( sal_Int32 n ) throw(::com::sun::star::uno::RuntimeException)
3446 : {
3447 0 : SolarMutexGuard aGuard;
3448 :
3449 0 : ScrollBar* pScrollBar = (ScrollBar*) GetWindow();
3450 0 : if ( pScrollBar )
3451 0 : pScrollBar->SetLineSize( n );
3452 0 : }
3453 :
3454 0 : sal_Int32 VCLXScrollBar::getLineIncrement() throw(::com::sun::star::uno::RuntimeException)
3455 : {
3456 0 : SolarMutexGuard aGuard;
3457 :
3458 0 : ScrollBar* pScrollBar = (ScrollBar*) GetWindow();
3459 0 : return pScrollBar ? pScrollBar->GetLineSize() : 0;
3460 : }
3461 :
3462 0 : void VCLXScrollBar::setBlockIncrement( sal_Int32 n ) throw(::com::sun::star::uno::RuntimeException)
3463 : {
3464 0 : SolarMutexGuard aGuard;
3465 :
3466 0 : ScrollBar* pScrollBar = (ScrollBar*) GetWindow();
3467 0 : if ( pScrollBar )
3468 0 : pScrollBar->SetPageSize( n );
3469 0 : }
3470 :
3471 0 : sal_Int32 VCLXScrollBar::getBlockIncrement() throw(::com::sun::star::uno::RuntimeException)
3472 : {
3473 0 : SolarMutexGuard aGuard;
3474 :
3475 0 : ScrollBar* pScrollBar = (ScrollBar*) GetWindow();
3476 0 : return pScrollBar ? pScrollBar->GetPageSize() : 0;
3477 : }
3478 :
3479 0 : void VCLXScrollBar::setVisibleSize( sal_Int32 n ) throw(::com::sun::star::uno::RuntimeException)
3480 : {
3481 0 : SolarMutexGuard aGuard;
3482 :
3483 0 : ScrollBar* pScrollBar = (ScrollBar*) GetWindow();
3484 0 : if ( pScrollBar )
3485 0 : pScrollBar->SetVisibleSize( n );
3486 0 : }
3487 :
3488 0 : sal_Int32 VCLXScrollBar::getVisibleSize() throw(::com::sun::star::uno::RuntimeException)
3489 : {
3490 0 : SolarMutexGuard aGuard;
3491 :
3492 0 : ScrollBar* pScrollBar = (ScrollBar*) GetWindow();
3493 0 : return pScrollBar ? pScrollBar->GetVisibleSize() : 0;
3494 : }
3495 :
3496 0 : void VCLXScrollBar::setOrientation( sal_Int32 n ) throw(::com::sun::star::uno::RuntimeException)
3497 : {
3498 0 : SolarMutexGuard aGuard;
3499 :
3500 0 : Window* pWindow = GetWindow();
3501 0 : if ( pWindow )
3502 : {
3503 0 : WinBits nStyle = pWindow->GetStyle();
3504 0 : nStyle &= ~(WB_HORZ|WB_VERT);
3505 0 : if ( n == ::com::sun::star::awt::ScrollBarOrientation::HORIZONTAL )
3506 0 : nStyle |= WB_HORZ;
3507 : else
3508 0 : nStyle |= WB_VERT;
3509 :
3510 0 : pWindow->SetStyle( nStyle );
3511 0 : pWindow->Resize();
3512 0 : }
3513 0 : }
3514 :
3515 0 : sal_Int32 VCLXScrollBar::getOrientation() throw(::com::sun::star::uno::RuntimeException)
3516 : {
3517 0 : SolarMutexGuard aGuard;
3518 :
3519 0 : sal_Int32 n = 0;
3520 0 : Window* pWindow = GetWindow();
3521 0 : if ( pWindow )
3522 : {
3523 0 : WinBits nStyle = pWindow->GetStyle();
3524 0 : if ( nStyle & WB_HORZ )
3525 0 : n = ::com::sun::star::awt::ScrollBarOrientation::HORIZONTAL;
3526 : else
3527 0 : n = ::com::sun::star::awt::ScrollBarOrientation::VERTICAL;
3528 : }
3529 0 : return n;
3530 :
3531 : }
3532 :
3533 : // ::com::sun::star::awt::VclWindowPeer
3534 0 : void VCLXScrollBar::setProperty( const ::rtl::OUString& PropertyName, const ::com::sun::star::uno::Any& Value) throw(::com::sun::star::uno::RuntimeException)
3535 : {
3536 0 : SolarMutexGuard aGuard;
3537 :
3538 0 : ScrollBar* pScrollBar = (ScrollBar*)GetWindow();
3539 0 : if ( pScrollBar )
3540 : {
3541 0 : sal_Bool bVoid = Value.getValueType().getTypeClass() == ::com::sun::star::uno::TypeClass_VOID;
3542 :
3543 0 : sal_uInt16 nPropType = GetPropertyId( PropertyName );
3544 0 : switch ( nPropType )
3545 : {
3546 : case BASEPROPERTY_LIVE_SCROLL:
3547 : {
3548 0 : sal_Bool bDo = sal_False;
3549 0 : if ( !bVoid )
3550 : {
3551 0 : OSL_VERIFY( Value >>= bDo );
3552 : }
3553 0 : AllSettings aSettings( pScrollBar->GetSettings() );
3554 0 : StyleSettings aStyle( aSettings.GetStyleSettings() );
3555 0 : sal_uLong nDragOptions = aStyle.GetDragFullOptions();
3556 0 : if ( bDo )
3557 0 : nDragOptions |= DRAGFULL_OPTION_SCROLL;
3558 : else
3559 0 : nDragOptions &= ~DRAGFULL_OPTION_SCROLL;
3560 0 : aStyle.SetDragFullOptions( nDragOptions );
3561 0 : aSettings.SetStyleSettings( aStyle );
3562 0 : pScrollBar->SetSettings( aSettings );
3563 : }
3564 0 : break;
3565 :
3566 : case BASEPROPERTY_SCROLLVALUE:
3567 : {
3568 0 : if ( !bVoid )
3569 : {
3570 0 : sal_Int32 n = 0;
3571 0 : if ( Value >>= n )
3572 0 : setValue( n );
3573 : }
3574 : }
3575 0 : break;
3576 : case BASEPROPERTY_SCROLLVALUE_MAX:
3577 : case BASEPROPERTY_SCROLLVALUE_MIN:
3578 : {
3579 0 : if ( !bVoid )
3580 : {
3581 0 : sal_Int32 n = 0;
3582 0 : if ( Value >>= n )
3583 : {
3584 0 : if ( nPropType == BASEPROPERTY_SCROLLVALUE_MAX )
3585 0 : setMaximum( n );
3586 : else
3587 0 : setMinimum( n );
3588 : }
3589 : }
3590 : }
3591 0 : break;
3592 : case BASEPROPERTY_LINEINCREMENT:
3593 : {
3594 0 : if ( !bVoid )
3595 : {
3596 0 : sal_Int32 n = 0;
3597 0 : if ( Value >>= n )
3598 0 : setLineIncrement( n );
3599 : }
3600 : }
3601 0 : break;
3602 : case BASEPROPERTY_BLOCKINCREMENT:
3603 : {
3604 0 : if ( !bVoid )
3605 : {
3606 0 : sal_Int32 n = 0;
3607 0 : if ( Value >>= n )
3608 0 : setBlockIncrement( n );
3609 : }
3610 : }
3611 0 : break;
3612 : case BASEPROPERTY_VISIBLESIZE:
3613 : {
3614 0 : if ( !bVoid )
3615 : {
3616 0 : sal_Int32 n = 0;
3617 0 : if ( Value >>= n )
3618 0 : setVisibleSize( n );
3619 : }
3620 : }
3621 0 : break;
3622 : case BASEPROPERTY_ORIENTATION:
3623 : {
3624 0 : if ( !bVoid )
3625 : {
3626 0 : sal_Int32 n = 0;
3627 0 : if ( Value >>= n )
3628 0 : setOrientation( n );
3629 : }
3630 : }
3631 0 : break;
3632 :
3633 : case BASEPROPERTY_BACKGROUNDCOLOR:
3634 : {
3635 : // the default implementation of the base class doesn't work here, since our
3636 : // interpretation for this property is slightly different
3637 0 : ::toolkit::setButtonLikeFaceColor( pScrollBar, Value);
3638 : }
3639 0 : break;
3640 :
3641 : default:
3642 : {
3643 0 : VCLXWindow::setProperty( PropertyName, Value );
3644 : }
3645 : }
3646 0 : }
3647 0 : }
3648 :
3649 0 : ::com::sun::star::uno::Any VCLXScrollBar::getProperty( const ::rtl::OUString& PropertyName ) throw(::com::sun::star::uno::RuntimeException)
3650 : {
3651 0 : SolarMutexGuard aGuard;
3652 :
3653 0 : ::com::sun::star::uno::Any aProp;
3654 0 : ScrollBar* pScrollBar = (ScrollBar*)GetWindow();
3655 0 : if ( pScrollBar )
3656 : {
3657 0 : sal_uInt16 nPropType = GetPropertyId( PropertyName );
3658 :
3659 0 : switch ( nPropType )
3660 : {
3661 : case BASEPROPERTY_LIVE_SCROLL:
3662 : {
3663 0 : aProp <<= (sal_Bool)( 0 != ( pScrollBar->GetSettings().GetStyleSettings().GetDragFullOptions() & DRAGFULL_OPTION_SCROLL ) );
3664 : }
3665 0 : break;
3666 : case BASEPROPERTY_SCROLLVALUE:
3667 : {
3668 0 : aProp <<= (sal_Int32) getValue();
3669 : }
3670 0 : break;
3671 : case BASEPROPERTY_SCROLLVALUE_MAX:
3672 : {
3673 0 : aProp <<= (sal_Int32) getMaximum();
3674 : }
3675 0 : break;
3676 : case BASEPROPERTY_SCROLLVALUE_MIN:
3677 : {
3678 0 : aProp <<= (sal_Int32) getMinimum();
3679 : }
3680 0 : break;
3681 : case BASEPROPERTY_LINEINCREMENT:
3682 : {
3683 0 : aProp <<= (sal_Int32) getLineIncrement();
3684 : }
3685 0 : break;
3686 : case BASEPROPERTY_BLOCKINCREMENT:
3687 : {
3688 0 : aProp <<= (sal_Int32) getBlockIncrement();
3689 : }
3690 0 : break;
3691 : case BASEPROPERTY_VISIBLESIZE:
3692 : {
3693 0 : aProp <<= (sal_Int32) getVisibleSize();
3694 : }
3695 0 : break;
3696 : case BASEPROPERTY_ORIENTATION:
3697 : {
3698 0 : aProp <<= (sal_Int32) getOrientation();
3699 : }
3700 0 : break;
3701 : case BASEPROPERTY_BACKGROUNDCOLOR:
3702 : {
3703 : // the default implementation of the base class doesn't work here, since our
3704 : // interpretation for this property is slightly different
3705 0 : aProp = ::toolkit::getButtonLikeFaceColor( pScrollBar );
3706 : }
3707 0 : break;
3708 :
3709 : default:
3710 : {
3711 0 : aProp <<= VCLXWindow::getProperty( PropertyName );
3712 : }
3713 : }
3714 : }
3715 0 : return aProp;
3716 : }
3717 :
3718 0 : void VCLXScrollBar::ProcessWindowEvent( const VclWindowEvent& rVclWindowEvent )
3719 : {
3720 0 : switch ( rVclWindowEvent.GetId() )
3721 : {
3722 : case VCLEVENT_SCROLLBAR_SCROLL:
3723 : {
3724 0 : ::com::sun::star::uno::Reference< ::com::sun::star::awt::XWindow > xKeepAlive( this );
3725 : // since we call listeners below, there is a potential that we will be destroyed
3726 : // in during the listener call. To prevent the resulting crashs, we keep us
3727 : // alive as long as we're here
3728 :
3729 0 : if ( maAdjustmentListeners.getLength() )
3730 : {
3731 0 : ScrollBar* pScrollBar = (ScrollBar*)GetWindow();
3732 :
3733 0 : if( pScrollBar )
3734 : {
3735 0 : ::com::sun::star::awt::AdjustmentEvent aEvent;
3736 0 : aEvent.Source = (::cppu::OWeakObject*)this;
3737 0 : aEvent.Value = pScrollBar->GetThumbPos();
3738 :
3739 : // set adjustment type
3740 0 : ScrollType aType = pScrollBar->GetType();
3741 0 : if ( aType == SCROLL_LINEUP || aType == SCROLL_LINEDOWN )
3742 : {
3743 0 : aEvent.Type = ::com::sun::star::awt::AdjustmentType_ADJUST_LINE;
3744 : }
3745 0 : else if ( aType == SCROLL_PAGEUP || aType == SCROLL_PAGEDOWN )
3746 : {
3747 0 : aEvent.Type = ::com::sun::star::awt::AdjustmentType_ADJUST_PAGE;
3748 : }
3749 0 : else if ( aType == SCROLL_DRAG )
3750 : {
3751 0 : aEvent.Type = ::com::sun::star::awt::AdjustmentType_ADJUST_ABS;
3752 : }
3753 :
3754 0 : maAdjustmentListeners.adjustmentValueChanged( aEvent );
3755 : }
3756 0 : }
3757 : }
3758 0 : break;
3759 :
3760 : default:
3761 0 : VCLXWindow::ProcessWindowEvent( rVclWindowEvent );
3762 0 : break;
3763 : }
3764 0 : }
3765 :
3766 0 : ::com::sun::star::awt::Size SAL_CALL VCLXScrollBar::implGetMinimumSize( Window* p ) throw(::com::sun::star::uno::RuntimeException)
3767 : {
3768 0 : long n = p->GetSettings().GetStyleSettings().GetScrollBarSize();
3769 0 : return ::com::sun::star::awt::Size( n, n );
3770 : }
3771 :
3772 0 : ::com::sun::star::awt::Size SAL_CALL VCLXScrollBar::getMinimumSize() throw(::com::sun::star::uno::RuntimeException)
3773 : {
3774 0 : SolarMutexGuard aGuard;
3775 0 : return implGetMinimumSize( GetWindow() );
3776 : }
3777 :
3778 :
3779 : // ----------------------------------------------------
3780 : // class VCLXEdit
3781 : // ----------------------------------------------------
3782 :
3783 0 : void VCLXEdit::ImplGetPropertyIds( std::list< sal_uInt16 > &rIds )
3784 : {
3785 : PushPropertyIds( rIds,
3786 : BASEPROPERTY_ALIGN,
3787 : BASEPROPERTY_BACKGROUNDCOLOR,
3788 : BASEPROPERTY_BORDER,
3789 : BASEPROPERTY_BORDERCOLOR,
3790 : BASEPROPERTY_DEFAULTCONTROL,
3791 : BASEPROPERTY_ECHOCHAR,
3792 : BASEPROPERTY_ENABLED,
3793 : BASEPROPERTY_ENABLEVISIBLE,
3794 : BASEPROPERTY_FONTDESCRIPTOR,
3795 : BASEPROPERTY_HARDLINEBREAKS,
3796 : BASEPROPERTY_HELPTEXT,
3797 : BASEPROPERTY_HELPURL,
3798 : BASEPROPERTY_HSCROLL,
3799 : BASEPROPERTY_LINE_END_FORMAT,
3800 : BASEPROPERTY_MAXTEXTLEN,
3801 : BASEPROPERTY_MULTILINE,
3802 : BASEPROPERTY_PRINTABLE,
3803 : BASEPROPERTY_READONLY,
3804 : BASEPROPERTY_TABSTOP,
3805 : BASEPROPERTY_TEXT,
3806 : BASEPROPERTY_VSCROLL,
3807 : BASEPROPERTY_HIDEINACTIVESELECTION,
3808 : BASEPROPERTY_PAINTTRANSPARENT,
3809 : BASEPROPERTY_AUTOHSCROLL,
3810 : BASEPROPERTY_AUTOVSCROLL,
3811 : BASEPROPERTY_VERTICALALIGN,
3812 : BASEPROPERTY_WRITING_MODE,
3813 : BASEPROPERTY_CONTEXT_WRITING_MODE,
3814 0 : 0);
3815 0 : VCLXWindow::ImplGetPropertyIds( rIds );
3816 0 : }
3817 :
3818 0 : VCLXEdit::VCLXEdit() : maTextListeners( *this )
3819 : {
3820 0 : }
3821 :
3822 : // ::com::sun::star::uno::XInterface
3823 0 : ::com::sun::star::uno::Any VCLXEdit::queryInterface( const ::com::sun::star::uno::Type & rType ) throw(::com::sun::star::uno::RuntimeException)
3824 : {
3825 : ::com::sun::star::uno::Any aRet = ::cppu::queryInterface( rType,
3826 : (static_cast< ::com::sun::star::awt::XTextComponent* >(this)),
3827 : (static_cast< ::com::sun::star::awt::XTextEditField* >(this)),
3828 0 : (static_cast< ::com::sun::star::awt::XTextLayoutConstrains* >(this)) );
3829 0 : return (aRet.hasValue() ? aRet : VCLXWindow::queryInterface( rType ));
3830 : }
3831 :
3832 : // ::com::sun::star::lang::XTypeProvider
3833 0 : IMPL_XTYPEPROVIDER_START( VCLXEdit )
3834 0 : getCppuType( ( ::com::sun::star::uno::Reference< ::com::sun::star::awt::XTextComponent>* ) NULL ),
3835 0 : getCppuType( ( ::com::sun::star::uno::Reference< ::com::sun::star::awt::XTextEditField>* ) NULL ),
3836 0 : getCppuType( ( ::com::sun::star::uno::Reference< ::com::sun::star::awt::XTextLayoutConstrains>* ) NULL ),
3837 : VCLXWindow::getTypes()
3838 0 : IMPL_XTYPEPROVIDER_END
3839 :
3840 0 : ::com::sun::star::uno::Reference< ::com::sun::star::accessibility::XAccessibleContext > VCLXEdit::CreateAccessibleContext()
3841 : {
3842 0 : return getAccessibleFactory().createAccessibleContext( this );
3843 : }
3844 :
3845 0 : void VCLXEdit::dispose() throw(::com::sun::star::uno::RuntimeException)
3846 : {
3847 0 : SolarMutexGuard aGuard;
3848 :
3849 0 : ::com::sun::star::lang::EventObject aObj;
3850 0 : aObj.Source = (::cppu::OWeakObject*)this;
3851 0 : maTextListeners.disposeAndClear( aObj );
3852 0 : VCLXWindow::dispose();
3853 0 : }
3854 :
3855 0 : void VCLXEdit::addTextListener( const ::com::sun::star::uno::Reference< ::com::sun::star::awt::XTextListener > & l ) throw(::com::sun::star::uno::RuntimeException)
3856 : {
3857 0 : SolarMutexGuard aGuard;
3858 0 : GetTextListeners().addInterface( l );
3859 0 : }
3860 :
3861 0 : void VCLXEdit::removeTextListener( const ::com::sun::star::uno::Reference< ::com::sun::star::awt::XTextListener > & l ) throw(::com::sun::star::uno::RuntimeException)
3862 : {
3863 0 : SolarMutexGuard aGuard;
3864 0 : GetTextListeners().removeInterface( l );
3865 0 : }
3866 :
3867 0 : void VCLXEdit::setText( const ::rtl::OUString& aText ) throw(::com::sun::star::uno::RuntimeException)
3868 : {
3869 0 : SolarMutexGuard aGuard;
3870 :
3871 0 : Edit* pEdit = (Edit*)GetWindow();
3872 0 : if ( pEdit )
3873 : {
3874 0 : pEdit->SetText( aText );
3875 :
3876 : // #107218# Call same listeners like VCL would do after user interaction
3877 0 : SetSynthesizingVCLEvent( sal_True );
3878 0 : pEdit->SetModifyFlag();
3879 0 : pEdit->Modify();
3880 0 : SetSynthesizingVCLEvent( sal_False );
3881 0 : }
3882 0 : }
3883 :
3884 0 : void VCLXEdit::insertText( const ::com::sun::star::awt::Selection& rSel, const ::rtl::OUString& aText ) throw(::com::sun::star::uno::RuntimeException)
3885 : {
3886 0 : SolarMutexGuard aGuard;
3887 :
3888 0 : Edit* pEdit = (Edit*)GetWindow();
3889 0 : if ( pEdit )
3890 : {
3891 0 : pEdit->SetSelection( Selection( rSel.Min, rSel.Max ) );
3892 0 : pEdit->ReplaceSelected( aText );
3893 :
3894 : // #107218# Call same listeners like VCL would do after user interaction
3895 0 : SetSynthesizingVCLEvent( sal_True );
3896 0 : pEdit->SetModifyFlag();
3897 0 : pEdit->Modify();
3898 0 : SetSynthesizingVCLEvent( sal_False );
3899 0 : }
3900 0 : }
3901 :
3902 0 : ::rtl::OUString VCLXEdit::getText() throw(::com::sun::star::uno::RuntimeException)
3903 : {
3904 0 : SolarMutexGuard aGuard;
3905 :
3906 0 : ::rtl::OUString aText;
3907 0 : Window* pWindow = GetWindow();
3908 0 : if ( pWindow )
3909 0 : aText = pWindow->GetText();
3910 0 : return aText;
3911 : }
3912 :
3913 0 : ::rtl::OUString VCLXEdit::getSelectedText() throw(::com::sun::star::uno::RuntimeException)
3914 : {
3915 0 : SolarMutexGuard aGuard;
3916 :
3917 0 : ::rtl::OUString aText;
3918 0 : Edit* pEdit = (Edit*) GetWindow();
3919 0 : if ( pEdit)
3920 0 : aText = pEdit->GetSelected();
3921 0 : return aText;
3922 :
3923 : }
3924 :
3925 0 : void VCLXEdit::setSelection( const ::com::sun::star::awt::Selection& aSelection ) throw(::com::sun::star::uno::RuntimeException)
3926 : {
3927 0 : SolarMutexGuard aGuard;
3928 :
3929 0 : Edit* pEdit = (Edit*) GetWindow();
3930 0 : if ( pEdit )
3931 0 : pEdit->SetSelection( Selection( aSelection.Min, aSelection.Max ) );
3932 0 : }
3933 :
3934 0 : ::com::sun::star::awt::Selection VCLXEdit::getSelection() throw(::com::sun::star::uno::RuntimeException)
3935 : {
3936 0 : SolarMutexGuard aGuard;
3937 :
3938 0 : Selection aSel;
3939 0 : Edit* pEdit = (Edit*) GetWindow();
3940 0 : if ( pEdit )
3941 0 : aSel = pEdit->GetSelection();
3942 0 : return ::com::sun::star::awt::Selection( aSel.Min(), aSel.Max() );
3943 : }
3944 :
3945 0 : sal_Bool VCLXEdit::isEditable() throw(::com::sun::star::uno::RuntimeException)
3946 : {
3947 0 : SolarMutexGuard aGuard;
3948 :
3949 0 : Edit* pEdit = (Edit*) GetWindow();
3950 0 : return ( pEdit && !pEdit->IsReadOnly() && pEdit->IsEnabled() ) ? sal_True : sal_False;
3951 : }
3952 :
3953 0 : void VCLXEdit::setEditable( sal_Bool bEditable ) throw(::com::sun::star::uno::RuntimeException)
3954 : {
3955 0 : SolarMutexGuard aGuard;
3956 :
3957 0 : Edit* pEdit = (Edit*) GetWindow();
3958 0 : if ( pEdit )
3959 0 : pEdit->SetReadOnly( !bEditable );
3960 0 : }
3961 :
3962 :
3963 0 : void VCLXEdit::setMaxTextLen( sal_Int16 nLen ) throw(::com::sun::star::uno::RuntimeException)
3964 : {
3965 0 : SolarMutexGuard aGuard;
3966 :
3967 0 : Edit* pEdit = (Edit*) GetWindow();
3968 0 : if ( pEdit )
3969 0 : pEdit->SetMaxTextLen( nLen );
3970 0 : }
3971 :
3972 0 : sal_Int16 VCLXEdit::getMaxTextLen() throw(::com::sun::star::uno::RuntimeException)
3973 : {
3974 0 : SolarMutexGuard aGuard;
3975 :
3976 0 : Edit* pEdit = (Edit*) GetWindow();
3977 0 : return pEdit ? pEdit->GetMaxTextLen() : 0;
3978 : }
3979 :
3980 0 : void VCLXEdit::setEchoChar( sal_Unicode cEcho ) throw(::com::sun::star::uno::RuntimeException)
3981 : {
3982 0 : SolarMutexGuard aGuard;
3983 :
3984 0 : Edit* pEdit = (Edit*) GetWindow();
3985 0 : if ( pEdit )
3986 0 : pEdit->SetEchoChar( cEcho );
3987 0 : }
3988 :
3989 0 : void VCLXEdit::setProperty( const ::rtl::OUString& PropertyName, const ::com::sun::star::uno::Any& Value) throw(::com::sun::star::uno::RuntimeException)
3990 : {
3991 0 : SolarMutexGuard aGuard;
3992 :
3993 0 : Edit* pEdit = (Edit*)GetWindow();
3994 0 : if ( pEdit )
3995 : {
3996 0 : sal_uInt16 nPropType = GetPropertyId( PropertyName );
3997 0 : switch ( nPropType )
3998 : {
3999 : case BASEPROPERTY_HIDEINACTIVESELECTION:
4000 0 : ::toolkit::adjustBooleanWindowStyle( Value, pEdit, WB_NOHIDESELECTION, sal_True );
4001 0 : if ( pEdit->GetSubEdit() )
4002 0 : ::toolkit::adjustBooleanWindowStyle( Value, pEdit->GetSubEdit(), WB_NOHIDESELECTION, sal_True );
4003 0 : break;
4004 :
4005 : case BASEPROPERTY_READONLY:
4006 : {
4007 0 : sal_Bool b = sal_Bool();
4008 0 : if ( Value >>= b )
4009 0 : pEdit->SetReadOnly( b );
4010 : }
4011 0 : break;
4012 : case BASEPROPERTY_ECHOCHAR:
4013 : {
4014 0 : sal_Int16 n = sal_Int16();
4015 0 : if ( Value >>= n )
4016 0 : pEdit->SetEchoChar( n );
4017 : }
4018 0 : break;
4019 : case BASEPROPERTY_MAXTEXTLEN:
4020 : {
4021 0 : sal_Int16 n = sal_Int16();
4022 0 : if ( Value >>= n )
4023 0 : pEdit->SetMaxTextLen( n );
4024 : }
4025 0 : break;
4026 : default:
4027 : {
4028 0 : VCLXWindow::setProperty( PropertyName, Value );
4029 : }
4030 : }
4031 0 : }
4032 0 : }
4033 :
4034 0 : ::com::sun::star::uno::Any VCLXEdit::getProperty( const ::rtl::OUString& PropertyName ) throw(::com::sun::star::uno::RuntimeException)
4035 : {
4036 0 : SolarMutexGuard aGuard;
4037 :
4038 0 : ::com::sun::star::uno::Any aProp;
4039 0 : Edit* pEdit = (Edit*)GetWindow();
4040 0 : if ( pEdit )
4041 : {
4042 0 : sal_uInt16 nPropType = GetPropertyId( PropertyName );
4043 0 : switch ( nPropType )
4044 : {
4045 : case BASEPROPERTY_HIDEINACTIVESELECTION:
4046 0 : aProp <<= (sal_Bool)( ( pEdit->GetStyle() & WB_NOHIDESELECTION ) == 0 );
4047 0 : break;
4048 : case BASEPROPERTY_READONLY:
4049 0 : aProp <<= (sal_Bool) pEdit->IsReadOnly();
4050 0 : break;
4051 : case BASEPROPERTY_ECHOCHAR:
4052 0 : aProp <<= (sal_Int16) pEdit->GetEchoChar();
4053 0 : break;
4054 : case BASEPROPERTY_MAXTEXTLEN:
4055 0 : aProp <<= (sal_Int16) pEdit->GetMaxTextLen();
4056 0 : break;
4057 : default:
4058 : {
4059 0 : aProp = VCLXWindow::getProperty( PropertyName );
4060 : }
4061 : }
4062 : }
4063 0 : return aProp;
4064 : }
4065 :
4066 0 : ::com::sun::star::awt::Size VCLXEdit::getMinimumSize( ) throw(::com::sun::star::uno::RuntimeException)
4067 : {
4068 0 : SolarMutexGuard aGuard;
4069 :
4070 0 : Size aSz;
4071 0 : Edit* pEdit = (Edit*) GetWindow();
4072 0 : if ( pEdit )
4073 0 : aSz = pEdit->CalcMinimumSize();
4074 0 : return AWTSize(aSz);
4075 : }
4076 :
4077 0 : ::com::sun::star::awt::Size VCLXEdit::getPreferredSize( ) throw(::com::sun::star::uno::RuntimeException)
4078 : {
4079 0 : SolarMutexGuard aGuard;
4080 :
4081 0 : Size aSz;
4082 0 : Edit* pEdit = (Edit*) GetWindow();
4083 0 : if ( pEdit )
4084 : {
4085 0 : aSz = pEdit->CalcMinimumSize();
4086 0 : aSz.Height() += 4;
4087 : }
4088 0 : return AWTSize(aSz);
4089 : }
4090 :
4091 0 : ::com::sun::star::awt::Size VCLXEdit::calcAdjustedSize( const ::com::sun::star::awt::Size& rNewSize ) throw(::com::sun::star::uno::RuntimeException)
4092 : {
4093 0 : SolarMutexGuard aGuard;
4094 :
4095 0 : ::com::sun::star::awt::Size aSz = rNewSize;
4096 0 : ::com::sun::star::awt::Size aMinSz = getMinimumSize();
4097 0 : if ( aSz.Height != aMinSz.Height )
4098 0 : aSz.Height = aMinSz.Height;
4099 :
4100 0 : return aSz;
4101 : }
4102 :
4103 0 : ::com::sun::star::awt::Size VCLXEdit::getMinimumSize( sal_Int16 nCols, sal_Int16 ) throw(::com::sun::star::uno::RuntimeException)
4104 : {
4105 0 : SolarMutexGuard aGuard;
4106 :
4107 0 : Size aSz;
4108 0 : Edit* pEdit = (Edit*) GetWindow();
4109 0 : if ( pEdit )
4110 : {
4111 0 : if ( nCols )
4112 0 : aSz = pEdit->CalcSize( nCols );
4113 : else
4114 0 : aSz = pEdit->CalcMinimumSize();
4115 : }
4116 0 : return AWTSize(aSz);
4117 : }
4118 :
4119 0 : void VCLXEdit::getColumnsAndLines( sal_Int16& nCols, sal_Int16& nLines ) throw(::com::sun::star::uno::RuntimeException)
4120 : {
4121 0 : SolarMutexGuard aGuard;
4122 :
4123 0 : nLines = 1;
4124 0 : nCols = 0;
4125 0 : Edit* pEdit = (Edit*) GetWindow();
4126 0 : if ( pEdit )
4127 0 : nCols = pEdit->GetMaxVisChars();
4128 0 : }
4129 :
4130 0 : void VCLXEdit::ProcessWindowEvent( const VclWindowEvent& rVclWindowEvent )
4131 : {
4132 0 : switch ( rVclWindowEvent.GetId() )
4133 : {
4134 : case VCLEVENT_EDIT_MODIFY:
4135 : {
4136 0 : ::com::sun::star::uno::Reference< ::com::sun::star::awt::XWindow > xKeepAlive( this );
4137 : // since we call listeners below, there is a potential that we will be destroyed
4138 : // during the listener call. To prevent the resulting crashs, we keep us
4139 : // alive as long as we're here
4140 :
4141 0 : if ( GetTextListeners().getLength() )
4142 : {
4143 0 : ::com::sun::star::awt::TextEvent aEvent;
4144 0 : aEvent.Source = (::cppu::OWeakObject*)this;
4145 0 : GetTextListeners().textChanged( aEvent );
4146 0 : }
4147 : }
4148 0 : break;
4149 :
4150 : default:
4151 0 : VCLXWindow::ProcessWindowEvent( rVclWindowEvent );
4152 0 : break;
4153 : }
4154 0 : }
4155 :
4156 : // ----------------------------------------------------
4157 : // class VCLXComboBox
4158 : // ----------------------------------------------------
4159 :
4160 0 : void VCLXComboBox::ImplGetPropertyIds( std::list< sal_uInt16 > &rIds )
4161 : {
4162 : PushPropertyIds( rIds,
4163 : BASEPROPERTY_AUTOCOMPLETE,
4164 : BASEPROPERTY_BACKGROUNDCOLOR,
4165 : BASEPROPERTY_BORDER,
4166 : BASEPROPERTY_BORDERCOLOR,
4167 : BASEPROPERTY_DEFAULTCONTROL,
4168 : BASEPROPERTY_DROPDOWN,
4169 : BASEPROPERTY_ENABLED,
4170 : BASEPROPERTY_ENABLEVISIBLE,
4171 : BASEPROPERTY_FONTDESCRIPTOR,
4172 : BASEPROPERTY_HELPTEXT,
4173 : BASEPROPERTY_HELPURL,
4174 : BASEPROPERTY_LINECOUNT,
4175 : BASEPROPERTY_MAXTEXTLEN,
4176 : BASEPROPERTY_PRINTABLE,
4177 : BASEPROPERTY_READONLY,
4178 : BASEPROPERTY_STRINGITEMLIST,
4179 : BASEPROPERTY_TABSTOP,
4180 : BASEPROPERTY_TEXT,
4181 : BASEPROPERTY_HIDEINACTIVESELECTION,
4182 : BASEPROPERTY_ALIGN,
4183 : BASEPROPERTY_WRITING_MODE,
4184 : BASEPROPERTY_CONTEXT_WRITING_MODE,
4185 : BASEPROPERTY_REFERENCE_DEVICE,
4186 : BASEPROPERTY_MOUSE_WHEEL_BEHAVIOUR,
4187 0 : 0);
4188 : // no, don't call VCLXEdit here - it has properties which we do *not* want to have at at combo box
4189 : // #i92690# / 2008-08-12 / frank.schoenheit@sun.com
4190 : // VCLXEdit::ImplGetPropertyIds( rIds );
4191 0 : VCLXWindow::ImplGetPropertyIds( rIds );
4192 0 : }
4193 :
4194 0 : VCLXComboBox::VCLXComboBox()
4195 0 : : maActionListeners( *this ), maItemListeners( *this )
4196 : {
4197 0 : }
4198 :
4199 0 : VCLXComboBox::~VCLXComboBox()
4200 : {
4201 : #ifndef __SUNPRO_CC
4202 : OSL_TRACE ("%s", __FUNCTION__);
4203 : #endif
4204 0 : }
4205 :
4206 0 : ::com::sun::star::uno::Reference< ::com::sun::star::accessibility::XAccessibleContext > VCLXComboBox::CreateAccessibleContext()
4207 : {
4208 0 : SolarMutexGuard aGuard;
4209 :
4210 0 : return getAccessibleFactory().createAccessibleContext( this );
4211 : }
4212 :
4213 0 : void VCLXComboBox::dispose() throw(::com::sun::star::uno::RuntimeException)
4214 : {
4215 0 : SolarMutexGuard aGuard;
4216 :
4217 0 : ::com::sun::star::lang::EventObject aObj;
4218 0 : aObj.Source = (::cppu::OWeakObject*)this;
4219 0 : maItemListeners.disposeAndClear( aObj );
4220 0 : maActionListeners.disposeAndClear( aObj );
4221 0 : VCLXEdit::dispose();
4222 0 : }
4223 :
4224 :
4225 0 : void VCLXComboBox::addItemListener( const ::com::sun::star::uno::Reference< ::com::sun::star::awt::XItemListener > & l ) throw(::com::sun::star::uno::RuntimeException)
4226 : {
4227 0 : SolarMutexGuard aGuard;
4228 0 : maItemListeners.addInterface( l );
4229 0 : }
4230 :
4231 0 : void VCLXComboBox::removeItemListener( const ::com::sun::star::uno::Reference< ::com::sun::star::awt::XItemListener > & l ) throw(::com::sun::star::uno::RuntimeException)
4232 : {
4233 0 : SolarMutexGuard aGuard;
4234 0 : maItemListeners.removeInterface( l );
4235 0 : }
4236 :
4237 0 : void VCLXComboBox::addActionListener( const ::com::sun::star::uno::Reference< ::com::sun::star::awt::XActionListener > & l ) throw(::com::sun::star::uno::RuntimeException)
4238 : {
4239 0 : SolarMutexGuard aGuard;
4240 0 : maActionListeners.addInterface( l );
4241 0 : }
4242 :
4243 0 : void VCLXComboBox::removeActionListener( const ::com::sun::star::uno::Reference< ::com::sun::star::awt::XActionListener > & l ) throw(::com::sun::star::uno::RuntimeException)
4244 : {
4245 0 : SolarMutexGuard aGuard;
4246 0 : maActionListeners.removeInterface( l );
4247 0 : }
4248 :
4249 0 : void VCLXComboBox::addItem( const ::rtl::OUString& aItem, sal_Int16 nPos ) throw(::com::sun::star::uno::RuntimeException)
4250 : {
4251 0 : SolarMutexGuard aGuard;
4252 :
4253 0 : ComboBox* pBox = (ComboBox*) GetWindow();
4254 0 : if ( pBox )
4255 0 : pBox->InsertEntry( aItem, nPos );
4256 0 : }
4257 :
4258 0 : void VCLXComboBox::addItems( const ::com::sun::star::uno::Sequence< ::rtl::OUString>& aItems, sal_Int16 nPos ) throw(::com::sun::star::uno::RuntimeException)
4259 : {
4260 0 : SolarMutexGuard aGuard;
4261 :
4262 0 : ComboBox* pBox = (ComboBox*) GetWindow();
4263 0 : if ( pBox )
4264 : {
4265 0 : sal_uInt16 nP = nPos;
4266 0 : for ( sal_uInt16 n = 0; n < aItems.getLength(); n++ )
4267 : {
4268 0 : pBox->InsertEntry( aItems.getConstArray()[n], nP );
4269 0 : if ( nP == 0xFFFF )
4270 : {
4271 : OSL_FAIL( "VCLXComboBox::addItems: too many entries!" );
4272 : // skip remaining entries, list cannot hold them, anyway
4273 0 : break;
4274 : }
4275 : }
4276 0 : }
4277 0 : }
4278 :
4279 0 : void VCLXComboBox::removeItems( sal_Int16 nPos, sal_Int16 nCount ) throw(::com::sun::star::uno::RuntimeException)
4280 : {
4281 0 : SolarMutexGuard aGuard;
4282 :
4283 0 : ComboBox* pBox = (ComboBox*) GetWindow();
4284 0 : if ( pBox )
4285 : {
4286 0 : for ( sal_uInt16 n = nCount; n; )
4287 0 : pBox->RemoveEntry( nPos + (--n) );
4288 0 : }
4289 0 : }
4290 :
4291 0 : sal_Int16 VCLXComboBox::getItemCount() throw(::com::sun::star::uno::RuntimeException)
4292 : {
4293 0 : SolarMutexGuard aGuard;
4294 :
4295 0 : ComboBox* pBox = (ComboBox*) GetWindow();
4296 0 : return pBox ? pBox->GetEntryCount() : 0;
4297 : }
4298 :
4299 0 : ::rtl::OUString VCLXComboBox::getItem( sal_Int16 nPos ) throw(::com::sun::star::uno::RuntimeException)
4300 : {
4301 0 : SolarMutexGuard aGuard;
4302 :
4303 0 : ::rtl::OUString aItem;
4304 0 : ComboBox* pBox = (ComboBox*) GetWindow();
4305 0 : if ( pBox )
4306 0 : aItem = pBox->GetEntry( nPos );
4307 0 : return aItem;
4308 : }
4309 :
4310 0 : ::com::sun::star::uno::Sequence< ::rtl::OUString> VCLXComboBox::getItems() throw(::com::sun::star::uno::RuntimeException)
4311 : {
4312 0 : SolarMutexGuard aGuard;
4313 :
4314 0 : ::com::sun::star::uno::Sequence< ::rtl::OUString> aSeq;
4315 0 : ComboBox* pBox = (ComboBox*) GetWindow();
4316 0 : if ( pBox )
4317 : {
4318 0 : sal_uInt16 nEntries = pBox->GetEntryCount();
4319 0 : aSeq = ::com::sun::star::uno::Sequence< ::rtl::OUString>( nEntries );
4320 0 : for ( sal_uInt16 n = nEntries; n; )
4321 : {
4322 0 : --n;
4323 0 : aSeq.getArray()[n] = pBox->GetEntry( n );
4324 : }
4325 : }
4326 0 : return aSeq;
4327 : }
4328 :
4329 0 : void VCLXComboBox::setDropDownLineCount( sal_Int16 nLines ) throw(::com::sun::star::uno::RuntimeException)
4330 : {
4331 0 : SolarMutexGuard aGuard;
4332 :
4333 0 : ComboBox* pBox = (ComboBox*) GetWindow();
4334 0 : if ( pBox )
4335 0 : pBox->SetDropDownLineCount( nLines );
4336 0 : }
4337 :
4338 0 : sal_Int16 VCLXComboBox::getDropDownLineCount() throw(::com::sun::star::uno::RuntimeException)
4339 : {
4340 0 : SolarMutexGuard aGuard;
4341 :
4342 0 : sal_Int16 nLines = 0;
4343 0 : ComboBox* pBox = (ComboBox*) GetWindow();
4344 0 : if ( pBox )
4345 0 : nLines = pBox->GetDropDownLineCount();
4346 0 : return nLines;
4347 : }
4348 :
4349 0 : void VCLXComboBox::setProperty( const ::rtl::OUString& PropertyName, const ::com::sun::star::uno::Any& Value) throw(::com::sun::star::uno::RuntimeException)
4350 : {
4351 0 : SolarMutexGuard aGuard;
4352 :
4353 0 : ComboBox* pComboBox = (ComboBox*)GetWindow();
4354 0 : if ( pComboBox )
4355 : {
4356 0 : sal_uInt16 nPropType = GetPropertyId( PropertyName );
4357 0 : switch ( nPropType )
4358 : {
4359 : case BASEPROPERTY_LINECOUNT:
4360 : {
4361 0 : sal_Int16 n = sal_Int16();
4362 0 : if ( Value >>= n )
4363 0 : pComboBox->SetDropDownLineCount( n );
4364 : }
4365 0 : break;
4366 : case BASEPROPERTY_AUTOCOMPLETE:
4367 : {
4368 0 : sal_Int16 n = sal_Int16();
4369 0 : if ( Value >>= n )
4370 0 : pComboBox->EnableAutocomplete( n != 0 );
4371 : }
4372 0 : break;
4373 : case BASEPROPERTY_STRINGITEMLIST:
4374 : {
4375 0 : ::com::sun::star::uno::Sequence< ::rtl::OUString> aItems;
4376 0 : if ( Value >>= aItems )
4377 : {
4378 0 : pComboBox->Clear();
4379 0 : addItems( aItems, 0 );
4380 0 : }
4381 : }
4382 0 : break;
4383 : default:
4384 : {
4385 0 : VCLXEdit::setProperty( PropertyName, Value );
4386 :
4387 : // #109385# SetBorderStyle is not virtual
4388 0 : if ( nPropType == BASEPROPERTY_BORDER )
4389 : {
4390 0 : sal_uInt16 nBorder = sal_uInt16();
4391 0 : if ( (Value >>= nBorder) && nBorder != 0 )
4392 0 : pComboBox->SetBorderStyle( nBorder );
4393 : }
4394 : }
4395 : }
4396 0 : }
4397 0 : }
4398 :
4399 0 : ::com::sun::star::uno::Any VCLXComboBox::getProperty( const ::rtl::OUString& PropertyName ) throw(::com::sun::star::uno::RuntimeException)
4400 : {
4401 0 : SolarMutexGuard aGuard;
4402 :
4403 0 : ::com::sun::star::uno::Any aProp;
4404 0 : ComboBox* pComboBox = (ComboBox*)GetWindow();
4405 0 : if ( pComboBox )
4406 : {
4407 0 : sal_uInt16 nPropType = GetPropertyId( PropertyName );
4408 0 : switch ( nPropType )
4409 : {
4410 : case BASEPROPERTY_LINECOUNT:
4411 : {
4412 0 : aProp <<= (sal_Int16) pComboBox->GetDropDownLineCount();
4413 : }
4414 0 : break;
4415 : case BASEPROPERTY_AUTOCOMPLETE:
4416 : {
4417 0 : aProp <<= (sal_Bool) pComboBox->IsAutocompleteEnabled();
4418 : }
4419 0 : break;
4420 : case BASEPROPERTY_STRINGITEMLIST:
4421 : {
4422 0 : sal_uInt16 nItems = pComboBox->GetEntryCount();
4423 0 : ::com::sun::star::uno::Sequence< ::rtl::OUString> aSeq( nItems );
4424 0 : ::rtl::OUString* pStrings = aSeq.getArray();
4425 0 : for ( sal_uInt16 n = 0; n < nItems; n++ )
4426 0 : pStrings[n] = pComboBox->GetEntry( n );
4427 0 : aProp <<= aSeq;
4428 :
4429 : }
4430 0 : break;
4431 : default:
4432 : {
4433 0 : aProp <<= VCLXEdit::getProperty( PropertyName );
4434 : }
4435 : }
4436 : }
4437 0 : return aProp;
4438 : }
4439 :
4440 0 : void VCLXComboBox::ProcessWindowEvent( const VclWindowEvent& rVclWindowEvent )
4441 : {
4442 0 : ::com::sun::star::uno::Reference< ::com::sun::star::awt::XWindow > xKeepAlive( this );
4443 : // since we call listeners below, there is a potential that we will be destroyed
4444 : // during the listener call. To prevent the resulting crashs, we keep us
4445 : // alive as long as we're here
4446 :
4447 0 : switch ( rVclWindowEvent.GetId() )
4448 : {
4449 : case VCLEVENT_COMBOBOX_SELECT:
4450 0 : if ( maItemListeners.getLength() )
4451 : {
4452 0 : ComboBox* pComboBox = (ComboBox*)GetWindow();
4453 0 : if( pComboBox )
4454 : {
4455 0 : if ( !pComboBox->IsTravelSelect() )
4456 : {
4457 0 : ::com::sun::star::awt::ItemEvent aEvent;
4458 0 : aEvent.Source = (::cppu::OWeakObject*)this;
4459 0 : aEvent.Highlighted = sal_False;
4460 :
4461 : // Set to 0xFFFF on multiple selection, selected entry ID otherwise
4462 0 : aEvent.Selected = pComboBox->GetEntryPos( pComboBox->GetText() );
4463 :
4464 0 : maItemListeners.itemStateChanged( aEvent );
4465 : }
4466 : }
4467 : }
4468 0 : break;
4469 :
4470 : case VCLEVENT_COMBOBOX_DOUBLECLICK:
4471 0 : if ( maActionListeners.getLength() )
4472 : {
4473 0 : ::com::sun::star::awt::ActionEvent aEvent;
4474 0 : aEvent.Source = (::cppu::OWeakObject*)this;
4475 : // aEvent.ActionCommand = ...;
4476 0 : maActionListeners.actionPerformed( aEvent );
4477 : }
4478 0 : break;
4479 :
4480 : default:
4481 0 : VCLXEdit::ProcessWindowEvent( rVclWindowEvent );
4482 0 : break;
4483 0 : }
4484 0 : }
4485 :
4486 0 : ::com::sun::star::awt::Size VCLXComboBox::getMinimumSize( ) throw(::com::sun::star::uno::RuntimeException)
4487 : {
4488 0 : SolarMutexGuard aGuard;
4489 :
4490 0 : Size aSz;
4491 0 : ComboBox* pComboBox = (ComboBox*) GetWindow();
4492 0 : if ( pComboBox )
4493 0 : aSz = pComboBox->CalcMinimumSize();
4494 0 : return AWTSize(aSz);
4495 : }
4496 :
4497 0 : ::com::sun::star::awt::Size VCLXComboBox::getPreferredSize( ) throw(::com::sun::star::uno::RuntimeException)
4498 : {
4499 0 : SolarMutexGuard aGuard;
4500 :
4501 0 : Size aSz;
4502 0 : ComboBox* pComboBox = (ComboBox*) GetWindow();
4503 0 : if ( pComboBox )
4504 : {
4505 0 : aSz = pComboBox->CalcMinimumSize();
4506 0 : if ( pComboBox->GetStyle() & WB_DROPDOWN )
4507 0 : aSz.Height() += 4;
4508 : }
4509 0 : return AWTSize(aSz);
4510 : }
4511 :
4512 0 : ::com::sun::star::awt::Size VCLXComboBox::calcAdjustedSize( const ::com::sun::star::awt::Size& rNewSize ) throw(::com::sun::star::uno::RuntimeException)
4513 : {
4514 0 : SolarMutexGuard aGuard;
4515 :
4516 0 : Size aSz = VCLSize(rNewSize);
4517 0 : ComboBox* pComboBox = (ComboBox*) GetWindow();
4518 0 : if ( pComboBox )
4519 0 : aSz = pComboBox->CalcAdjustedSize( aSz );
4520 0 : return AWTSize(aSz);
4521 : }
4522 :
4523 0 : ::com::sun::star::awt::Size VCLXComboBox::getMinimumSize( sal_Int16 nCols, sal_Int16 nLines ) throw(::com::sun::star::uno::RuntimeException)
4524 : {
4525 0 : SolarMutexGuard aGuard;
4526 :
4527 0 : Size aSz;
4528 0 : ComboBox* pComboBox = (ComboBox*) GetWindow();
4529 0 : if ( pComboBox )
4530 0 : aSz = pComboBox->CalcSize( nCols, nLines );
4531 0 : return AWTSize(aSz);
4532 : }
4533 :
4534 0 : void VCLXComboBox::getColumnsAndLines( sal_Int16& nCols, sal_Int16& nLines ) throw(::com::sun::star::uno::RuntimeException)
4535 : {
4536 0 : SolarMutexGuard aGuard;
4537 :
4538 0 : nCols = nLines = 0;
4539 0 : ComboBox* pComboBox = (ComboBox*) GetWindow();
4540 0 : if ( pComboBox )
4541 : {
4542 : sal_uInt16 nC, nL;
4543 0 : pComboBox->GetMaxVisColumnsAndLines( nC, nL );
4544 0 : nCols = nC;
4545 0 : nLines = nL;
4546 0 : }
4547 0 : }
4548 0 : void SAL_CALL VCLXComboBox::listItemInserted( const ItemListEvent& i_rEvent ) throw (RuntimeException)
4549 : {
4550 0 : SolarMutexGuard aGuard;
4551 :
4552 0 : ComboBox* pComboBox = dynamic_cast< ComboBox* >( GetWindow() );
4553 :
4554 0 : ENSURE_OR_RETURN_VOID( pComboBox, "VCLXComboBox::listItemInserted: no ComboBox?!" );
4555 0 : ENSURE_OR_RETURN_VOID( ( i_rEvent.ItemPosition >= 0 ) && ( i_rEvent.ItemPosition <= sal_Int32( pComboBox->GetEntryCount() ) ),
4556 : "VCLXComboBox::listItemInserted: illegal (inconsistent) item position!" );
4557 : pComboBox->InsertEntry(
4558 : i_rEvent.ItemText.IsPresent ? i_rEvent.ItemText.Value : ::rtl::OUString(),
4559 : i_rEvent.ItemImageURL.IsPresent ? lcl_getImageFromURL( i_rEvent.ItemImageURL.Value ) : Image(),
4560 0 : i_rEvent.ItemPosition );
4561 : }
4562 :
4563 0 : void SAL_CALL VCLXComboBox::listItemRemoved( const ItemListEvent& i_rEvent ) throw (RuntimeException)
4564 : {
4565 0 : SolarMutexGuard aGuard;
4566 :
4567 0 : ComboBox* pComboBox = dynamic_cast< ComboBox* >( GetWindow() );
4568 :
4569 0 : ENSURE_OR_RETURN_VOID( pComboBox, "VCLXComboBox::listItemRemoved: no ComboBox?!" );
4570 0 : ENSURE_OR_RETURN_VOID( ( i_rEvent.ItemPosition >= 0 ) && ( i_rEvent.ItemPosition < sal_Int32( pComboBox->GetEntryCount() ) ),
4571 : "VCLXComboBox::listItemRemoved: illegal (inconsistent) item position!" );
4572 :
4573 0 : pComboBox->RemoveEntry( i_rEvent.ItemPosition );
4574 : }
4575 :
4576 0 : void SAL_CALL VCLXComboBox::listItemModified( const ItemListEvent& i_rEvent ) throw (RuntimeException)
4577 : {
4578 0 : SolarMutexGuard aGuard;
4579 :
4580 0 : ComboBox* pComboBox = dynamic_cast< ComboBox* >( GetWindow() );
4581 :
4582 0 : ENSURE_OR_RETURN_VOID( pComboBox, "VCLXComboBox::listItemModified: no ComboBox?!" );
4583 0 : ENSURE_OR_RETURN_VOID( ( i_rEvent.ItemPosition >= 0 ) && ( i_rEvent.ItemPosition < sal_Int32( pComboBox->GetEntryCount() ) ),
4584 : "VCLXComboBox::listItemModified: illegal (inconsistent) item position!" );
4585 :
4586 : // VCL's ComboBox does not support changing an entry's text or image, so remove and re-insert
4587 :
4588 0 : const ::rtl::OUString sNewText = i_rEvent.ItemText.IsPresent ? i_rEvent.ItemText.Value : ::rtl::OUString( pComboBox->GetEntry( i_rEvent.ItemPosition ) );
4589 0 : const Image aNewImage( i_rEvent.ItemImageURL.IsPresent ? lcl_getImageFromURL( i_rEvent.ItemImageURL.Value ) : pComboBox->GetEntryImage( i_rEvent.ItemPosition ) );
4590 :
4591 0 : pComboBox->RemoveEntry( i_rEvent.ItemPosition );
4592 0 : pComboBox->InsertEntry( sNewText, aNewImage, i_rEvent.ItemPosition );
4593 : }
4594 :
4595 0 : void SAL_CALL VCLXComboBox::allItemsRemoved( const EventObject& i_rEvent ) throw (RuntimeException)
4596 : {
4597 0 : SolarMutexGuard aGuard;
4598 :
4599 0 : ComboBox* pComboBox = dynamic_cast< ComboBox* >( GetWindow() );
4600 0 : ENSURE_OR_RETURN_VOID( pComboBox, "VCLXComboBox::listItemModified: no ComboBox?!" );
4601 :
4602 0 : pComboBox->Clear();
4603 :
4604 0 : (void)i_rEvent;
4605 : }
4606 :
4607 0 : void SAL_CALL VCLXComboBox::itemListChanged( const EventObject& i_rEvent ) throw (RuntimeException)
4608 : {
4609 0 : SolarMutexGuard aGuard;
4610 :
4611 0 : ComboBox* pComboBox = dynamic_cast< ComboBox* >( GetWindow() );
4612 0 : ENSURE_OR_RETURN_VOID( pComboBox, "VCLXComboBox::listItemModified: no ComboBox?!" );
4613 :
4614 0 : pComboBox->Clear();
4615 :
4616 0 : uno::Reference< beans::XPropertySet > xPropSet( i_rEvent.Source, uno::UNO_QUERY_THROW );
4617 0 : uno::Reference< beans::XPropertySetInfo > xPSI( xPropSet->getPropertySetInfo(), uno::UNO_QUERY_THROW );
4618 : // bool localize = xPSI->hasPropertyByName( ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "ResourceResolver" ) ) );
4619 0 : uno::Reference< resource::XStringResourceResolver > xStringResourceResolver;
4620 0 : if ( xPSI->hasPropertyByName( ::rtl::OUString( "ResourceResolver" ) ) )
4621 : {
4622 : xStringResourceResolver.set(
4623 0 : xPropSet->getPropertyValue( ::rtl::OUString( "ResourceResolver" ) ),
4624 : uno::UNO_QUERY
4625 0 : );
4626 : }
4627 :
4628 :
4629 0 : Reference< XItemList > xItemList( i_rEvent.Source, uno::UNO_QUERY_THROW );
4630 0 : uno::Sequence< beans::Pair< ::rtl::OUString, ::rtl::OUString > > aItems = xItemList->getAllItems();
4631 0 : for ( sal_Int32 i=0; i<aItems.getLength(); ++i )
4632 : {
4633 0 : ::rtl::OUString aLocalizationKey( aItems[i].First );
4634 0 : if ( xStringResourceResolver.is() && !aLocalizationKey.isEmpty() && aLocalizationKey[0] == '&' )
4635 : {
4636 0 : aLocalizationKey = xStringResourceResolver->resolveString(aLocalizationKey.copy( 1 ));
4637 : }
4638 0 : pComboBox->InsertEntry( aLocalizationKey, lcl_getImageFromURL( aItems[i].Second ) );
4639 0 : }
4640 : }
4641 0 : void SAL_CALL VCLXComboBox::disposing( const EventObject& i_rEvent ) throw (RuntimeException)
4642 : {
4643 : // just disambiguate
4644 0 : VCLXEdit::disposing( i_rEvent );
4645 0 : }
4646 :
4647 : // ----------------------------------------------------
4648 : // class VCLXFormattedSpinField
4649 : // ----------------------------------------------------
4650 0 : void VCLXFormattedSpinField::ImplGetPropertyIds( std::list< sal_uInt16 > &rIds )
4651 : {
4652 : // Interestingly in the UnoControl API this is
4653 : // - not derived from XEdit ultimately, (correct ?) - so cut this here ...
4654 : // VCLXSpinField::ImplGetPropertyIds( rIds );
4655 0 : VCLXWindow::ImplGetPropertyIds( rIds );
4656 0 : }
4657 :
4658 0 : VCLXFormattedSpinField::VCLXFormattedSpinField()
4659 : {
4660 0 : }
4661 :
4662 0 : VCLXFormattedSpinField::~VCLXFormattedSpinField()
4663 : {
4664 0 : }
4665 :
4666 0 : void VCLXFormattedSpinField::setStrictFormat( sal_Bool bStrict )
4667 : {
4668 0 : SolarMutexGuard aGuard;
4669 :
4670 0 : FormatterBase* pFormatter = GetFormatter();
4671 0 : if ( pFormatter )
4672 0 : pFormatter->SetStrictFormat( bStrict );
4673 0 : }
4674 :
4675 0 : sal_Bool VCLXFormattedSpinField::isStrictFormat()
4676 : {
4677 0 : FormatterBase* pFormatter = GetFormatter();
4678 0 : return pFormatter ? pFormatter->IsStrictFormat() : sal_False;
4679 : }
4680 :
4681 :
4682 0 : void VCLXFormattedSpinField::setProperty( const ::rtl::OUString& PropertyName, const ::com::sun::star::uno::Any& Value) throw(::com::sun::star::uno::RuntimeException)
4683 : {
4684 0 : SolarMutexGuard aGuard;
4685 :
4686 0 : FormatterBase* pFormatter = GetFormatter();
4687 0 : if ( pFormatter )
4688 : {
4689 0 : sal_uInt16 nPropType = GetPropertyId( PropertyName );
4690 0 : switch ( nPropType )
4691 : {
4692 : case BASEPROPERTY_SPIN:
4693 : {
4694 0 : sal_Bool b = sal_Bool();
4695 0 : if ( Value >>= b )
4696 : {
4697 0 : WinBits nStyle = GetWindow()->GetStyle() | WB_SPIN;
4698 0 : if ( !b )
4699 0 : nStyle &= ~WB_SPIN;
4700 0 : GetWindow()->SetStyle( nStyle );
4701 : }
4702 : }
4703 0 : break;
4704 : case BASEPROPERTY_STRICTFORMAT:
4705 : {
4706 0 : sal_Bool b = sal_Bool();
4707 0 : if ( Value >>= b )
4708 : {
4709 0 : pFormatter->SetStrictFormat( b );
4710 : }
4711 : }
4712 0 : break;
4713 : default:
4714 : {
4715 0 : VCLXSpinField::setProperty( PropertyName, Value );
4716 : }
4717 : }
4718 0 : }
4719 0 : }
4720 :
4721 0 : ::com::sun::star::uno::Any VCLXFormattedSpinField::getProperty( const ::rtl::OUString& PropertyName ) throw(::com::sun::star::uno::RuntimeException)
4722 : {
4723 0 : SolarMutexGuard aGuard;
4724 :
4725 0 : ::com::sun::star::uno::Any aProp;
4726 0 : FormatterBase* pFormatter = GetFormatter();
4727 0 : if ( pFormatter )
4728 : {
4729 0 : sal_uInt16 nPropType = GetPropertyId( PropertyName );
4730 0 : switch ( nPropType )
4731 : {
4732 : case BASEPROPERTY_TABSTOP:
4733 : {
4734 0 : aProp <<= (sal_Bool) ( ( GetWindow()->GetStyle() & WB_SPIN ) ? sal_True : sal_False );
4735 : }
4736 0 : break;
4737 : case BASEPROPERTY_STRICTFORMAT:
4738 : {
4739 0 : aProp <<= (sal_Bool) pFormatter->IsStrictFormat();
4740 : }
4741 0 : break;
4742 : default:
4743 : {
4744 0 : aProp <<= VCLXSpinField::getProperty( PropertyName );
4745 : }
4746 : }
4747 : }
4748 0 : return aProp;
4749 : }
4750 :
4751 :
4752 : // ----------------------------------------------------
4753 : // class VCLXDateField
4754 : // ----------------------------------------------------
4755 :
4756 0 : void VCLXDateField::ImplGetPropertyIds( std::list< sal_uInt16 > &rIds )
4757 : {
4758 : PushPropertyIds( rIds,
4759 : BASEPROPERTY_ALIGN,
4760 : BASEPROPERTY_BACKGROUNDCOLOR,
4761 : BASEPROPERTY_BORDER,
4762 : BASEPROPERTY_BORDERCOLOR,
4763 : BASEPROPERTY_DATE,
4764 : BASEPROPERTY_DATEMAX,
4765 : BASEPROPERTY_DATEMIN,
4766 : BASEPROPERTY_DATESHOWCENTURY,
4767 : BASEPROPERTY_DEFAULTCONTROL,
4768 : BASEPROPERTY_DROPDOWN,
4769 : BASEPROPERTY_ENABLED,
4770 : BASEPROPERTY_ENABLEVISIBLE,
4771 : BASEPROPERTY_EXTDATEFORMAT,
4772 : BASEPROPERTY_FONTDESCRIPTOR,
4773 : BASEPROPERTY_HELPTEXT,
4774 : BASEPROPERTY_HELPURL,
4775 : BASEPROPERTY_PRINTABLE,
4776 : BASEPROPERTY_READONLY,
4777 : BASEPROPERTY_REPEAT,
4778 : BASEPROPERTY_REPEAT_DELAY,
4779 : BASEPROPERTY_SPIN,
4780 : BASEPROPERTY_STRICTFORMAT,
4781 : BASEPROPERTY_TABSTOP,
4782 : BASEPROPERTY_ENFORCE_FORMAT,
4783 : BASEPROPERTY_TEXT,
4784 : BASEPROPERTY_HIDEINACTIVESELECTION,
4785 : BASEPROPERTY_VERTICALALIGN,
4786 : BASEPROPERTY_WRITING_MODE,
4787 : BASEPROPERTY_CONTEXT_WRITING_MODE,
4788 : BASEPROPERTY_MOUSE_WHEEL_BEHAVIOUR,
4789 0 : 0);
4790 0 : VCLXFormattedSpinField::ImplGetPropertyIds( rIds );
4791 0 : }
4792 :
4793 0 : VCLXDateField::VCLXDateField()
4794 : {
4795 0 : }
4796 :
4797 0 : VCLXDateField::~VCLXDateField()
4798 : {
4799 0 : }
4800 :
4801 : // ::com::sun::star::uno::XInterface
4802 0 : ::com::sun::star::uno::Any VCLXDateField::queryInterface( const ::com::sun::star::uno::Type & rType ) throw(::com::sun::star::uno::RuntimeException)
4803 : {
4804 : ::com::sun::star::uno::Any aRet = ::cppu::queryInterface( rType,
4805 0 : (static_cast< ::com::sun::star::awt::XDateField* >(this)) );
4806 0 : return (aRet.hasValue() ? aRet : VCLXFormattedSpinField::queryInterface( rType ));
4807 : }
4808 :
4809 : // ::com::sun::star::lang::XTypeProvider
4810 0 : IMPL_XTYPEPROVIDER_START( VCLXDateField )
4811 0 : getCppuType( ( ::com::sun::star::uno::Reference< ::com::sun::star::awt::XDateField>* ) NULL ),
4812 : VCLXFormattedSpinField::getTypes()
4813 0 : IMPL_XTYPEPROVIDER_END
4814 :
4815 0 : void VCLXDateField::setProperty( const ::rtl::OUString& PropertyName, const ::com::sun::star::uno::Any& Value) throw(::com::sun::star::uno::RuntimeException)
4816 : {
4817 0 : SolarMutexGuard aGuard;
4818 :
4819 0 : if ( GetWindow() )
4820 : {
4821 0 : sal_Bool bVoid = Value.getValueType().getTypeClass() == ::com::sun::star::uno::TypeClass_VOID;
4822 :
4823 0 : sal_uInt16 nPropType = GetPropertyId( PropertyName );
4824 0 : switch ( nPropType )
4825 : {
4826 : case BASEPROPERTY_DATE:
4827 : {
4828 0 : if ( bVoid )
4829 : {
4830 0 : ((DateField*)GetWindow())->EnableEmptyFieldValue( sal_True );
4831 0 : ((DateField*)GetWindow())->SetEmptyFieldValue();
4832 : }
4833 : else
4834 : {
4835 0 : sal_Int32 n = 0;
4836 0 : if ( Value >>= n )
4837 0 : setDate( n );
4838 : }
4839 : }
4840 0 : break;
4841 : case BASEPROPERTY_DATEMIN:
4842 : {
4843 0 : sal_Int32 n = 0;
4844 0 : if ( Value >>= n )
4845 0 : setMin( n );
4846 : }
4847 0 : break;
4848 : case BASEPROPERTY_DATEMAX:
4849 : {
4850 0 : sal_Int32 n = 0;
4851 0 : if ( Value >>= n )
4852 0 : setMax( n );
4853 : }
4854 0 : break;
4855 : case BASEPROPERTY_EXTDATEFORMAT:
4856 : {
4857 0 : sal_Int16 n = sal_Int16();
4858 0 : if ( Value >>= n )
4859 0 : ((DateField*)GetWindow())->SetExtDateFormat( (ExtDateFieldFormat) n );
4860 : }
4861 0 : break;
4862 : case BASEPROPERTY_DATESHOWCENTURY:
4863 : {
4864 0 : sal_Bool b = sal_Bool();
4865 0 : if ( Value >>= b )
4866 0 : ((DateField*)GetWindow())->SetShowDateCentury( b );
4867 : }
4868 0 : break;
4869 : case BASEPROPERTY_ENFORCE_FORMAT:
4870 : {
4871 0 : sal_Bool bEnforce( sal_True );
4872 0 : OSL_VERIFY( Value >>= bEnforce );
4873 0 : static_cast< DateField* >( GetWindow() )->EnforceValidValue( bEnforce );
4874 : }
4875 0 : break;
4876 : default:
4877 : {
4878 0 : VCLXFormattedSpinField::setProperty( PropertyName, Value );
4879 : }
4880 : }
4881 0 : }
4882 0 : }
4883 :
4884 0 : ::com::sun::star::uno::Any VCLXDateField::getProperty( const ::rtl::OUString& PropertyName ) throw(::com::sun::star::uno::RuntimeException)
4885 : {
4886 0 : SolarMutexGuard aGuard;
4887 :
4888 0 : ::com::sun::star::uno::Any aProp;
4889 0 : FormatterBase* pFormatter = GetFormatter();
4890 0 : if ( pFormatter )
4891 : {
4892 0 : sal_uInt16 nPropType = GetPropertyId( PropertyName );
4893 0 : switch ( nPropType )
4894 : {
4895 : case BASEPROPERTY_DATE:
4896 : {
4897 0 : aProp <<= (sal_Int32) getDate();
4898 : }
4899 0 : break;
4900 : case BASEPROPERTY_DATEMIN:
4901 : {
4902 0 : aProp <<= (sal_Int32) getMin();
4903 : }
4904 0 : break;
4905 : case BASEPROPERTY_DATEMAX:
4906 : {
4907 0 : aProp <<= (sal_Int32) getMax();
4908 : }
4909 0 : break;
4910 : case BASEPROPERTY_DATESHOWCENTURY:
4911 : {
4912 0 : aProp <<= ((DateField*)GetWindow())->IsShowDateCentury();
4913 : }
4914 0 : break;
4915 : case BASEPROPERTY_ENFORCE_FORMAT:
4916 : {
4917 0 : aProp <<= (sal_Bool)static_cast< DateField* >( GetWindow() )->IsEnforceValidValue( );
4918 : }
4919 0 : break;
4920 : default:
4921 : {
4922 0 : aProp <<= VCLXFormattedSpinField::getProperty( PropertyName );
4923 : }
4924 : }
4925 : }
4926 0 : return aProp;
4927 : }
4928 :
4929 :
4930 0 : void VCLXDateField::setDate( sal_Int32 nDate ) throw(::com::sun::star::uno::RuntimeException)
4931 : {
4932 0 : SolarMutexGuard aGuard;
4933 :
4934 0 : DateField* pDateField = (DateField*) GetWindow();
4935 0 : if ( pDateField )
4936 : {
4937 0 : pDateField->SetDate( nDate );
4938 :
4939 : // #107218# Call same listeners like VCL would do after user interaction
4940 0 : SetSynthesizingVCLEvent( sal_True );
4941 0 : pDateField->SetModifyFlag();
4942 0 : pDateField->Modify();
4943 0 : SetSynthesizingVCLEvent( sal_False );
4944 0 : }
4945 0 : }
4946 :
4947 0 : sal_Int32 VCLXDateField::getDate() throw(::com::sun::star::uno::RuntimeException)
4948 : {
4949 0 : SolarMutexGuard aGuard;
4950 :
4951 0 : sal_Int32 nDate = 0;
4952 0 : DateField* pDateField = (DateField*) GetWindow();
4953 0 : if ( pDateField )
4954 0 : nDate = pDateField->GetDate().GetDate();
4955 :
4956 0 : return nDate;
4957 : }
4958 :
4959 0 : void VCLXDateField::setMin( sal_Int32 nDate ) throw(::com::sun::star::uno::RuntimeException)
4960 : {
4961 0 : SolarMutexGuard aGuard;
4962 :
4963 0 : DateField* pDateField = (DateField*) GetWindow();
4964 0 : if ( pDateField )
4965 0 : pDateField->SetMin( nDate );
4966 0 : }
4967 :
4968 0 : sal_Int32 VCLXDateField::getMin() throw(::com::sun::star::uno::RuntimeException)
4969 : {
4970 0 : SolarMutexGuard aGuard;
4971 :
4972 0 : sal_Int32 nDate = 0;
4973 0 : DateField* pDateField = (DateField*) GetWindow();
4974 0 : if ( pDateField )
4975 0 : nDate = pDateField->GetMin().GetDate();
4976 :
4977 0 : return nDate;
4978 : }
4979 :
4980 0 : void VCLXDateField::setMax( sal_Int32 nDate ) throw(::com::sun::star::uno::RuntimeException)
4981 : {
4982 0 : SolarMutexGuard aGuard;
4983 :
4984 0 : DateField* pDateField = (DateField*) GetWindow();
4985 0 : if ( pDateField )
4986 0 : pDateField->SetMax( nDate );
4987 0 : }
4988 :
4989 0 : sal_Int32 VCLXDateField::getMax() throw(::com::sun::star::uno::RuntimeException)
4990 : {
4991 0 : SolarMutexGuard aGuard;
4992 :
4993 0 : sal_Int32 nDate = 0;
4994 0 : DateField* pDateField = (DateField*) GetWindow();
4995 0 : if ( pDateField )
4996 0 : nDate = pDateField->GetMax().GetDate();
4997 :
4998 0 : return nDate;
4999 : }
5000 :
5001 0 : void VCLXDateField::setFirst( sal_Int32 nDate ) throw(::com::sun::star::uno::RuntimeException)
5002 : {
5003 0 : SolarMutexGuard aGuard;
5004 :
5005 0 : DateField* pDateField = (DateField*) GetWindow();
5006 0 : if ( pDateField )
5007 0 : pDateField->SetFirst( nDate );
5008 0 : }
5009 :
5010 0 : sal_Int32 VCLXDateField::getFirst() throw(::com::sun::star::uno::RuntimeException)
5011 : {
5012 0 : SolarMutexGuard aGuard;
5013 :
5014 0 : sal_Int32 nDate = 0;
5015 0 : DateField* pDateField = (DateField*) GetWindow();
5016 0 : if ( pDateField )
5017 0 : nDate = pDateField->GetFirst().GetDate();
5018 :
5019 0 : return nDate;
5020 : }
5021 :
5022 0 : void VCLXDateField::setLast( sal_Int32 nDate ) throw(::com::sun::star::uno::RuntimeException)
5023 : {
5024 0 : SolarMutexGuard aGuard;
5025 :
5026 0 : DateField* pDateField = (DateField*) GetWindow();
5027 0 : if ( pDateField )
5028 0 : pDateField->SetLast( nDate );
5029 0 : }
5030 :
5031 0 : sal_Int32 VCLXDateField::getLast() throw(::com::sun::star::uno::RuntimeException)
5032 : {
5033 0 : SolarMutexGuard aGuard;
5034 :
5035 0 : sal_Int32 nDate = 0;
5036 0 : DateField* pDateField = (DateField*) GetWindow();
5037 0 : if ( pDateField )
5038 0 : nDate = pDateField->GetLast().GetDate();
5039 :
5040 0 : return nDate;
5041 : }
5042 :
5043 0 : void VCLXDateField::setLongFormat( sal_Bool bLong ) throw(::com::sun::star::uno::RuntimeException)
5044 : {
5045 0 : SolarMutexGuard aGuard;
5046 :
5047 0 : DateField* pDateField = (DateField*) GetWindow();
5048 0 : if ( pDateField )
5049 0 : pDateField->SetLongFormat( bLong );
5050 0 : }
5051 :
5052 0 : sal_Bool VCLXDateField::isLongFormat() throw(::com::sun::star::uno::RuntimeException)
5053 : {
5054 0 : SolarMutexGuard aGuard;
5055 :
5056 0 : DateField* pDateField = (DateField*) GetWindow();
5057 0 : return pDateField ? pDateField->IsLongFormat() : sal_False;
5058 : }
5059 :
5060 0 : void VCLXDateField::setEmpty() throw(::com::sun::star::uno::RuntimeException)
5061 : {
5062 0 : SolarMutexGuard aGuard;
5063 :
5064 0 : DateField* pDateField = (DateField*) GetWindow();
5065 0 : if ( pDateField )
5066 : {
5067 0 : pDateField->SetEmptyDate();
5068 :
5069 : // #107218# Call same listeners like VCL would do after user interaction
5070 0 : SetSynthesizingVCLEvent( sal_True );
5071 0 : pDateField->SetModifyFlag();
5072 0 : pDateField->Modify();
5073 0 : SetSynthesizingVCLEvent( sal_False );
5074 0 : }
5075 0 : }
5076 :
5077 0 : sal_Bool VCLXDateField::isEmpty() throw(::com::sun::star::uno::RuntimeException)
5078 : {
5079 0 : SolarMutexGuard aGuard;
5080 :
5081 0 : DateField* pDateField = (DateField*) GetWindow();
5082 0 : return pDateField ? pDateField->IsEmptyDate() : sal_False;
5083 : }
5084 :
5085 0 : void VCLXDateField::setStrictFormat( sal_Bool bStrict ) throw(::com::sun::star::uno::RuntimeException)
5086 : {
5087 0 : VCLXFormattedSpinField::setStrictFormat( bStrict );
5088 0 : }
5089 :
5090 0 : sal_Bool VCLXDateField::isStrictFormat() throw(::com::sun::star::uno::RuntimeException)
5091 : {
5092 0 : return VCLXFormattedSpinField::isStrictFormat();
5093 : }
5094 :
5095 :
5096 : // ----------------------------------------------------
5097 : // class VCLXTimeField
5098 : // ----------------------------------------------------
5099 :
5100 0 : void VCLXTimeField::ImplGetPropertyIds( std::list< sal_uInt16 > &rIds )
5101 : {
5102 : PushPropertyIds( rIds,
5103 : BASEPROPERTY_ALIGN,
5104 : BASEPROPERTY_BACKGROUNDCOLOR,
5105 : BASEPROPERTY_BORDER,
5106 : BASEPROPERTY_BORDERCOLOR,
5107 : BASEPROPERTY_DEFAULTCONTROL,
5108 : BASEPROPERTY_ENABLED,
5109 : BASEPROPERTY_ENABLEVISIBLE,
5110 : BASEPROPERTY_EXTTIMEFORMAT,
5111 : BASEPROPERTY_FONTDESCRIPTOR,
5112 : BASEPROPERTY_HELPTEXT,
5113 : BASEPROPERTY_HELPURL,
5114 : BASEPROPERTY_PRINTABLE,
5115 : BASEPROPERTY_READONLY,
5116 : BASEPROPERTY_REPEAT,
5117 : BASEPROPERTY_REPEAT_DELAY,
5118 : BASEPROPERTY_SPIN,
5119 : BASEPROPERTY_STRICTFORMAT,
5120 : BASEPROPERTY_TABSTOP,
5121 : BASEPROPERTY_TIME,
5122 : BASEPROPERTY_TIMEMAX,
5123 : BASEPROPERTY_TIMEMIN,
5124 : BASEPROPERTY_ENFORCE_FORMAT,
5125 : BASEPROPERTY_TEXT,
5126 : BASEPROPERTY_HIDEINACTIVESELECTION,
5127 : BASEPROPERTY_VERTICALALIGN,
5128 : BASEPROPERTY_WRITING_MODE,
5129 : BASEPROPERTY_CONTEXT_WRITING_MODE,
5130 : BASEPROPERTY_MOUSE_WHEEL_BEHAVIOUR,
5131 0 : 0);
5132 0 : VCLXFormattedSpinField::ImplGetPropertyIds( rIds );
5133 0 : }
5134 :
5135 0 : VCLXTimeField::VCLXTimeField()
5136 : {
5137 0 : }
5138 :
5139 0 : VCLXTimeField::~VCLXTimeField()
5140 : {
5141 0 : }
5142 :
5143 : // ::com::sun::star::uno::XInterface
5144 0 : ::com::sun::star::uno::Any VCLXTimeField::queryInterface( const ::com::sun::star::uno::Type & rType ) throw(::com::sun::star::uno::RuntimeException)
5145 : {
5146 : ::com::sun::star::uno::Any aRet = ::cppu::queryInterface( rType,
5147 0 : (static_cast< ::com::sun::star::awt::XTimeField* >(this)) );
5148 0 : return (aRet.hasValue() ? aRet : VCLXFormattedSpinField::queryInterface( rType ));
5149 : }
5150 :
5151 : // ::com::sun::star::lang::XTypeProvider
5152 0 : IMPL_XTYPEPROVIDER_START( VCLXTimeField )
5153 0 : getCppuType( ( ::com::sun::star::uno::Reference< ::com::sun::star::awt::XTimeField>* ) NULL ),
5154 : VCLXFormattedSpinField::getTypes()
5155 0 : IMPL_XTYPEPROVIDER_END
5156 :
5157 0 : void VCLXTimeField::setTime( sal_Int32 nTime ) throw(::com::sun::star::uno::RuntimeException)
5158 : {
5159 0 : SolarMutexGuard aGuard;
5160 :
5161 0 : TimeField* pTimeField = (TimeField*) GetWindow();
5162 0 : if ( pTimeField )
5163 : {
5164 0 : pTimeField->SetTime( nTime );
5165 :
5166 : // #107218# Call same listeners like VCL would do after user interaction
5167 0 : SetSynthesizingVCLEvent( sal_True );
5168 0 : pTimeField->SetModifyFlag();
5169 0 : pTimeField->Modify();
5170 0 : SetSynthesizingVCLEvent( sal_False );
5171 0 : }
5172 0 : }
5173 :
5174 0 : sal_Int32 VCLXTimeField::getTime() throw(::com::sun::star::uno::RuntimeException)
5175 : {
5176 0 : SolarMutexGuard aGuard;
5177 :
5178 0 : sal_Int32 nTime = 0;
5179 0 : TimeField* pTimeField = (TimeField*) GetWindow();
5180 0 : if ( pTimeField )
5181 0 : nTime = pTimeField->GetTime().GetTime();
5182 :
5183 0 : return nTime;
5184 : }
5185 :
5186 0 : void VCLXTimeField::setMin( sal_Int32 nTime ) throw(::com::sun::star::uno::RuntimeException)
5187 : {
5188 0 : SolarMutexGuard aGuard;
5189 :
5190 0 : TimeField* pTimeField = (TimeField*) GetWindow();
5191 0 : if ( pTimeField )
5192 0 : pTimeField->SetMin( nTime );
5193 0 : }
5194 :
5195 0 : sal_Int32 VCLXTimeField::getMin() throw(::com::sun::star::uno::RuntimeException)
5196 : {
5197 0 : SolarMutexGuard aGuard;
5198 :
5199 0 : sal_Int32 nTime = 0;
5200 0 : TimeField* pTimeField = (TimeField*) GetWindow();
5201 0 : if ( pTimeField )
5202 0 : nTime = pTimeField->GetMin().GetTime();
5203 :
5204 0 : return nTime;
5205 : }
5206 :
5207 0 : void VCLXTimeField::setMax( sal_Int32 nTime ) throw(::com::sun::star::uno::RuntimeException)
5208 : {
5209 0 : SolarMutexGuard aGuard;
5210 :
5211 0 : TimeField* pTimeField = (TimeField*) GetWindow();
5212 0 : if ( pTimeField )
5213 0 : pTimeField->SetMax( nTime );
5214 0 : }
5215 :
5216 0 : sal_Int32 VCLXTimeField::getMax() throw(::com::sun::star::uno::RuntimeException)
5217 : {
5218 0 : SolarMutexGuard aGuard;
5219 :
5220 0 : sal_Int32 nTime = 0;
5221 0 : TimeField* pTimeField = (TimeField*) GetWindow();
5222 0 : if ( pTimeField )
5223 0 : nTime = pTimeField->GetMax().GetTime();
5224 :
5225 0 : return nTime;
5226 : }
5227 :
5228 0 : void VCLXTimeField::setFirst( sal_Int32 nTime ) throw(::com::sun::star::uno::RuntimeException)
5229 : {
5230 0 : SolarMutexGuard aGuard;
5231 :
5232 0 : TimeField* pTimeField = (TimeField*) GetWindow();
5233 0 : if ( pTimeField )
5234 0 : pTimeField->SetFirst( nTime );
5235 0 : }
5236 :
5237 0 : sal_Int32 VCLXTimeField::getFirst() throw(::com::sun::star::uno::RuntimeException)
5238 : {
5239 0 : SolarMutexGuard aGuard;
5240 :
5241 0 : sal_Int32 nTime = 0;
5242 0 : TimeField* pTimeField = (TimeField*) GetWindow();
5243 0 : if ( pTimeField )
5244 0 : nTime = pTimeField->GetFirst().GetTime();
5245 :
5246 0 : return nTime;
5247 : }
5248 :
5249 0 : void VCLXTimeField::setLast( sal_Int32 nTime ) throw(::com::sun::star::uno::RuntimeException)
5250 : {
5251 0 : SolarMutexGuard aGuard;
5252 :
5253 0 : TimeField* pTimeField = (TimeField*) GetWindow();
5254 0 : if ( pTimeField )
5255 0 : pTimeField->SetLast( nTime );
5256 0 : }
5257 :
5258 0 : sal_Int32 VCLXTimeField::getLast() throw(::com::sun::star::uno::RuntimeException)
5259 : {
5260 0 : SolarMutexGuard aGuard;
5261 :
5262 0 : sal_Int32 nTime = 0;
5263 0 : TimeField* pTimeField = (TimeField*) GetWindow();
5264 0 : if ( pTimeField )
5265 0 : nTime = pTimeField->GetLast().GetTime();
5266 :
5267 0 : return nTime;
5268 : }
5269 :
5270 0 : void VCLXTimeField::setEmpty() throw(::com::sun::star::uno::RuntimeException)
5271 : {
5272 0 : SolarMutexGuard aGuard;
5273 :
5274 0 : TimeField* pTimeField = (TimeField*) GetWindow();
5275 0 : if ( pTimeField )
5276 0 : pTimeField->SetEmptyTime();
5277 0 : }
5278 :
5279 0 : sal_Bool VCLXTimeField::isEmpty() throw(::com::sun::star::uno::RuntimeException)
5280 : {
5281 0 : SolarMutexGuard aGuard;
5282 :
5283 0 : TimeField* pTimeField = (TimeField*) GetWindow();
5284 0 : return pTimeField ? pTimeField->IsEmptyTime() : sal_False;
5285 : }
5286 :
5287 0 : void VCLXTimeField::setStrictFormat( sal_Bool bStrict ) throw(::com::sun::star::uno::RuntimeException)
5288 : {
5289 0 : VCLXFormattedSpinField::setStrictFormat( bStrict );
5290 0 : }
5291 :
5292 0 : sal_Bool VCLXTimeField::isStrictFormat() throw(::com::sun::star::uno::RuntimeException)
5293 : {
5294 0 : return VCLXFormattedSpinField::isStrictFormat();
5295 : }
5296 :
5297 :
5298 0 : void VCLXTimeField::setProperty( const ::rtl::OUString& PropertyName, const ::com::sun::star::uno::Any& Value) throw(::com::sun::star::uno::RuntimeException)
5299 : {
5300 0 : SolarMutexGuard aGuard;
5301 :
5302 0 : if ( GetWindow() )
5303 : {
5304 0 : sal_Bool bVoid = Value.getValueType().getTypeClass() == ::com::sun::star::uno::TypeClass_VOID;
5305 :
5306 0 : sal_uInt16 nPropType = GetPropertyId( PropertyName );
5307 0 : switch ( nPropType )
5308 : {
5309 : case BASEPROPERTY_TIME:
5310 : {
5311 0 : if ( bVoid )
5312 : {
5313 0 : ((TimeField*)GetWindow())->EnableEmptyFieldValue( sal_True );
5314 0 : ((TimeField*)GetWindow())->SetEmptyFieldValue();
5315 : }
5316 : else
5317 : {
5318 0 : sal_Int32 n = 0;
5319 0 : if ( Value >>= n )
5320 0 : setTime( n );
5321 : }
5322 : }
5323 0 : break;
5324 : case BASEPROPERTY_TIMEMIN:
5325 : {
5326 0 : sal_Int32 n = 0;
5327 0 : if ( Value >>= n )
5328 0 : setMin( n );
5329 : }
5330 0 : break;
5331 : case BASEPROPERTY_TIMEMAX:
5332 : {
5333 0 : sal_Int32 n = 0;
5334 0 : if ( Value >>= n )
5335 0 : setMax( n );
5336 : }
5337 0 : break;
5338 : case BASEPROPERTY_EXTTIMEFORMAT:
5339 : {
5340 0 : sal_Int16 n = sal_Int16();
5341 0 : if ( Value >>= n )
5342 0 : ((TimeField*)GetWindow())->SetExtFormat( (ExtTimeFieldFormat) n );
5343 : }
5344 0 : break;
5345 : case BASEPROPERTY_ENFORCE_FORMAT:
5346 : {
5347 0 : sal_Bool bEnforce( sal_True );
5348 0 : OSL_VERIFY( Value >>= bEnforce );
5349 0 : static_cast< TimeField* >( GetWindow() )->EnforceValidValue( bEnforce );
5350 : }
5351 0 : break;
5352 : default:
5353 : {
5354 0 : VCLXFormattedSpinField::setProperty( PropertyName, Value );
5355 : }
5356 : }
5357 0 : }
5358 0 : }
5359 :
5360 0 : ::com::sun::star::uno::Any VCLXTimeField::getProperty( const ::rtl::OUString& PropertyName ) throw(::com::sun::star::uno::RuntimeException)
5361 : {
5362 0 : SolarMutexGuard aGuard;
5363 :
5364 0 : ::com::sun::star::uno::Any aProp;
5365 0 : if ( GetWindow() )
5366 : {
5367 0 : sal_uInt16 nPropType = GetPropertyId( PropertyName );
5368 0 : switch ( nPropType )
5369 : {
5370 : case BASEPROPERTY_TIME:
5371 : {
5372 0 : aProp <<= (sal_Int32) getTime();
5373 : }
5374 0 : break;
5375 : case BASEPROPERTY_TIMEMIN:
5376 : {
5377 0 : aProp <<= (sal_Int32) getMin();
5378 : }
5379 0 : break;
5380 : case BASEPROPERTY_TIMEMAX:
5381 : {
5382 0 : aProp <<= (sal_Int32) getMax();
5383 : }
5384 0 : break;
5385 : case BASEPROPERTY_ENFORCE_FORMAT:
5386 : {
5387 0 : aProp <<= (sal_Bool)static_cast< TimeField* >( GetWindow() )->IsEnforceValidValue( );
5388 : }
5389 0 : break;
5390 : default:
5391 : {
5392 0 : aProp <<= VCLXFormattedSpinField::getProperty( PropertyName );
5393 : }
5394 : }
5395 : }
5396 0 : return aProp;
5397 : }
5398 :
5399 : // ----------------------------------------------------
5400 : // class VCLXNumericField
5401 : // ----------------------------------------------------
5402 :
5403 0 : void VCLXNumericField::ImplGetPropertyIds( std::list< sal_uInt16 > &rIds )
5404 : {
5405 : PushPropertyIds( rIds,
5406 : BASEPROPERTY_ALIGN,
5407 : BASEPROPERTY_BACKGROUNDCOLOR,
5408 : BASEPROPERTY_BORDER,
5409 : BASEPROPERTY_BORDERCOLOR,
5410 : BASEPROPERTY_DECIMALACCURACY,
5411 : BASEPROPERTY_DEFAULTCONTROL,
5412 : BASEPROPERTY_ENABLED,
5413 : BASEPROPERTY_ENABLEVISIBLE,
5414 : BASEPROPERTY_FONTDESCRIPTOR,
5415 : BASEPROPERTY_HELPTEXT,
5416 : BASEPROPERTY_HELPURL,
5417 : BASEPROPERTY_NUMSHOWTHOUSANDSEP,
5418 : BASEPROPERTY_PRINTABLE,
5419 : BASEPROPERTY_READONLY,
5420 : BASEPROPERTY_REPEAT,
5421 : BASEPROPERTY_REPEAT_DELAY,
5422 : BASEPROPERTY_SPIN,
5423 : BASEPROPERTY_STRICTFORMAT,
5424 : BASEPROPERTY_TABSTOP,
5425 : BASEPROPERTY_VALUEMAX_DOUBLE,
5426 : BASEPROPERTY_VALUEMIN_DOUBLE,
5427 : BASEPROPERTY_VALUESTEP_DOUBLE,
5428 : BASEPROPERTY_VALUE_DOUBLE,
5429 : BASEPROPERTY_ENFORCE_FORMAT,
5430 : BASEPROPERTY_HIDEINACTIVESELECTION,
5431 : BASEPROPERTY_VERTICALALIGN,
5432 : BASEPROPERTY_WRITING_MODE,
5433 : BASEPROPERTY_CONTEXT_WRITING_MODE,
5434 : BASEPROPERTY_MOUSE_WHEEL_BEHAVIOUR,
5435 0 : 0);
5436 0 : VCLXFormattedSpinField::ImplGetPropertyIds( rIds );
5437 0 : }
5438 :
5439 0 : VCLXNumericField::VCLXNumericField()
5440 : {
5441 0 : }
5442 :
5443 0 : VCLXNumericField::~VCLXNumericField()
5444 : {
5445 0 : }
5446 :
5447 : // ::com::sun::star::uno::XInterface
5448 0 : ::com::sun::star::uno::Any VCLXNumericField::queryInterface( const ::com::sun::star::uno::Type & rType ) throw(::com::sun::star::uno::RuntimeException)
5449 : {
5450 : ::com::sun::star::uno::Any aRet = ::cppu::queryInterface( rType,
5451 0 : (static_cast< ::com::sun::star::awt::XNumericField* >(this)) );
5452 0 : return (aRet.hasValue() ? aRet : VCLXFormattedSpinField::queryInterface( rType ));
5453 : }
5454 :
5455 : // ::com::sun::star::lang::XTypeProvider
5456 0 : IMPL_XTYPEPROVIDER_START( VCLXNumericField )
5457 0 : getCppuType( ( ::com::sun::star::uno::Reference< ::com::sun::star::awt::XNumericField>* ) NULL ),
5458 : VCLXFormattedSpinField::getTypes()
5459 0 : IMPL_XTYPEPROVIDER_END
5460 :
5461 0 : void VCLXNumericField::setValue( double Value ) throw(::com::sun::star::uno::RuntimeException)
5462 : {
5463 0 : SolarMutexGuard aGuard;
5464 :
5465 0 : NumericFormatter* pNumericFormatter = (NumericFormatter*) GetFormatter();
5466 0 : if ( pNumericFormatter )
5467 : {
5468 : // shift long value using decimal digits
5469 : // (e.g., input 105 using 2 digits returns 1,05)
5470 : // Thus, to set a value of 1,05, insert 105 and 2 digits
5471 : pNumericFormatter->SetValue(
5472 0 : (long)ImplCalcLongValue( Value, pNumericFormatter->GetDecimalDigits() ) );
5473 :
5474 : // #107218# Call same listeners like VCL would do after user interaction
5475 0 : Edit* pEdit = (Edit*)GetWindow();
5476 0 : if ( pEdit )
5477 : {
5478 0 : SetSynthesizingVCLEvent( sal_True );
5479 0 : pEdit->SetModifyFlag();
5480 0 : pEdit->Modify();
5481 0 : SetSynthesizingVCLEvent( sal_False );
5482 : }
5483 0 : }
5484 0 : }
5485 :
5486 0 : double VCLXNumericField::getValue() throw(::com::sun::star::uno::RuntimeException)
5487 : {
5488 0 : SolarMutexGuard aGuard;
5489 :
5490 0 : NumericFormatter* pNumericFormatter = (NumericFormatter*) GetFormatter();
5491 : return pNumericFormatter
5492 0 : ? ImplCalcDoubleValue( (double)pNumericFormatter->GetValue(), pNumericFormatter->GetDecimalDigits() )
5493 0 : : 0;
5494 : }
5495 :
5496 0 : void VCLXNumericField::setMin( double Value ) throw(::com::sun::star::uno::RuntimeException)
5497 : {
5498 0 : SolarMutexGuard aGuard;
5499 :
5500 0 : NumericFormatter* pNumericFormatter = (NumericFormatter*) GetFormatter();
5501 0 : if ( pNumericFormatter )
5502 : pNumericFormatter->SetMin(
5503 0 : (long)ImplCalcLongValue( Value, pNumericFormatter->GetDecimalDigits() ) );
5504 0 : }
5505 :
5506 0 : double VCLXNumericField::getMin() throw(::com::sun::star::uno::RuntimeException)
5507 : {
5508 0 : SolarMutexGuard aGuard;
5509 :
5510 0 : NumericFormatter* pNumericFormatter = (NumericFormatter*) GetFormatter();
5511 : return pNumericFormatter
5512 0 : ? ImplCalcDoubleValue( (double)pNumericFormatter->GetMin(), pNumericFormatter->GetDecimalDigits() )
5513 0 : : 0;
5514 : }
5515 :
5516 0 : void VCLXNumericField::setMax( double Value ) throw(::com::sun::star::uno::RuntimeException)
5517 : {
5518 0 : SolarMutexGuard aGuard;
5519 :
5520 0 : NumericFormatter* pNumericFormatter = (NumericFormatter*) GetFormatter();
5521 0 : if ( pNumericFormatter )
5522 : pNumericFormatter->SetMax(
5523 0 : (long)ImplCalcLongValue( Value, pNumericFormatter->GetDecimalDigits() ) );
5524 0 : }
5525 :
5526 0 : double VCLXNumericField::getMax() throw(::com::sun::star::uno::RuntimeException)
5527 : {
5528 0 : SolarMutexGuard aGuard;
5529 :
5530 0 : NumericFormatter* pNumericFormatter = (NumericFormatter*) GetFormatter();
5531 : return pNumericFormatter
5532 0 : ? ImplCalcDoubleValue( (double)pNumericFormatter->GetMax(), pNumericFormatter->GetDecimalDigits() )
5533 0 : : 0;
5534 : }
5535 :
5536 0 : void VCLXNumericField::setFirst( double Value ) throw(::com::sun::star::uno::RuntimeException)
5537 : {
5538 0 : SolarMutexGuard aGuard;
5539 :
5540 0 : NumericField* pNumericField = (NumericField*) GetWindow();
5541 0 : if ( pNumericField )
5542 : pNumericField->SetFirst(
5543 0 : (long)ImplCalcLongValue( Value, pNumericField->GetDecimalDigits() ) );
5544 0 : }
5545 :
5546 0 : double VCLXNumericField::getFirst() throw(::com::sun::star::uno::RuntimeException)
5547 : {
5548 0 : SolarMutexGuard aGuard;
5549 :
5550 0 : NumericField* pNumericField = (NumericField*) GetWindow();
5551 : return pNumericField
5552 0 : ? ImplCalcDoubleValue( (double)pNumericField->GetFirst(), pNumericField->GetDecimalDigits() )
5553 0 : : 0;
5554 : }
5555 :
5556 0 : void VCLXNumericField::setLast( double Value ) throw(::com::sun::star::uno::RuntimeException)
5557 : {
5558 0 : SolarMutexGuard aGuard;
5559 :
5560 0 : NumericField* pNumericField = (NumericField*) GetWindow();
5561 0 : if ( pNumericField )
5562 : pNumericField->SetLast(
5563 0 : (long)ImplCalcLongValue( Value, pNumericField->GetDecimalDigits() ) );
5564 0 : }
5565 :
5566 0 : double VCLXNumericField::getLast() throw(::com::sun::star::uno::RuntimeException)
5567 : {
5568 0 : SolarMutexGuard aGuard;
5569 :
5570 0 : NumericField* pNumericField = (NumericField*) GetWindow();
5571 : return pNumericField
5572 0 : ? ImplCalcDoubleValue( (double)pNumericField->GetLast(), pNumericField->GetDecimalDigits() )
5573 0 : : 0;
5574 : }
5575 :
5576 0 : void VCLXNumericField::setStrictFormat( sal_Bool bStrict ) throw(::com::sun::star::uno::RuntimeException)
5577 : {
5578 0 : VCLXFormattedSpinField::setStrictFormat( bStrict );
5579 0 : }
5580 :
5581 0 : sal_Bool VCLXNumericField::isStrictFormat() throw(::com::sun::star::uno::RuntimeException)
5582 : {
5583 0 : return VCLXFormattedSpinField::isStrictFormat();
5584 : }
5585 :
5586 :
5587 0 : void VCLXNumericField::setSpinSize( double Value ) throw(::com::sun::star::uno::RuntimeException)
5588 : {
5589 0 : SolarMutexGuard aGuard;
5590 :
5591 0 : NumericField* pNumericField = (NumericField*) GetWindow();
5592 0 : if ( pNumericField )
5593 : pNumericField->SetSpinSize(
5594 0 : (long)ImplCalcLongValue( Value, pNumericField->GetDecimalDigits() ) );
5595 0 : }
5596 :
5597 0 : double VCLXNumericField::getSpinSize() throw(::com::sun::star::uno::RuntimeException)
5598 : {
5599 0 : SolarMutexGuard aGuard;
5600 :
5601 0 : NumericField* pNumericField = (NumericField*) GetWindow();
5602 : return pNumericField
5603 0 : ? ImplCalcDoubleValue( (double)pNumericField->GetSpinSize(), pNumericField->GetDecimalDigits() )
5604 0 : : 0;
5605 : }
5606 :
5607 0 : void VCLXNumericField::setDecimalDigits( sal_Int16 Value ) throw(::com::sun::star::uno::RuntimeException)
5608 : {
5609 0 : SolarMutexGuard aGuard;
5610 :
5611 0 : NumericFormatter* pNumericFormatter = (NumericFormatter*) GetFormatter();
5612 0 : if ( pNumericFormatter )
5613 : {
5614 0 : double n = getValue();
5615 0 : pNumericFormatter->SetDecimalDigits( Value );
5616 0 : setValue( n );
5617 0 : }
5618 0 : }
5619 :
5620 0 : sal_Int16 VCLXNumericField::getDecimalDigits() throw(::com::sun::star::uno::RuntimeException)
5621 : {
5622 0 : SolarMutexGuard aGuard;
5623 :
5624 0 : NumericFormatter* pNumericFormatter = (NumericFormatter*) GetFormatter();
5625 0 : return pNumericFormatter ? pNumericFormatter->GetDecimalDigits() : 0;
5626 : }
5627 :
5628 0 : void VCLXNumericField::setProperty( const ::rtl::OUString& PropertyName, const ::com::sun::star::uno::Any& Value) throw(::com::sun::star::uno::RuntimeException)
5629 : {
5630 0 : SolarMutexGuard aGuard;
5631 :
5632 0 : if ( GetWindow() )
5633 : {
5634 0 : sal_Bool bVoid = Value.getValueType().getTypeClass() == ::com::sun::star::uno::TypeClass_VOID;
5635 :
5636 0 : sal_uInt16 nPropType = GetPropertyId( PropertyName );
5637 0 : switch ( nPropType )
5638 : {
5639 : case BASEPROPERTY_VALUE_DOUBLE:
5640 : {
5641 0 : if ( bVoid )
5642 : {
5643 0 : ((NumericField*)GetWindow())->EnableEmptyFieldValue( sal_True );
5644 0 : ((NumericField*)GetWindow())->SetEmptyFieldValue();
5645 : }
5646 : else
5647 : {
5648 0 : double d = 0;
5649 0 : if ( Value >>= d )
5650 0 : setValue( d );
5651 : }
5652 : }
5653 0 : break;
5654 : case BASEPROPERTY_VALUEMIN_DOUBLE:
5655 : {
5656 0 : double d = 0;
5657 0 : if ( Value >>= d )
5658 0 : setMin( d );
5659 : }
5660 0 : break;
5661 : case BASEPROPERTY_VALUEMAX_DOUBLE:
5662 : {
5663 0 : double d = 0;
5664 0 : if ( Value >>= d )
5665 0 : setMax( d );
5666 : }
5667 0 : break;
5668 : case BASEPROPERTY_VALUESTEP_DOUBLE:
5669 : {
5670 0 : double d = 0;
5671 0 : if ( Value >>= d )
5672 0 : setSpinSize( d );
5673 : }
5674 0 : break;
5675 : case BASEPROPERTY_DECIMALACCURACY:
5676 : {
5677 0 : sal_Int16 n = sal_Int16();
5678 0 : if ( Value >>= n )
5679 0 : setDecimalDigits( n );
5680 : }
5681 0 : break;
5682 : case BASEPROPERTY_NUMSHOWTHOUSANDSEP:
5683 : {
5684 0 : sal_Bool b = sal_Bool();
5685 0 : if ( Value >>= b )
5686 0 : ((NumericField*)GetWindow())->SetUseThousandSep( b );
5687 : }
5688 0 : break;
5689 : default:
5690 : {
5691 0 : VCLXFormattedSpinField::setProperty( PropertyName, Value );
5692 : }
5693 : }
5694 0 : }
5695 0 : }
5696 :
5697 0 : ::com::sun::star::uno::Any VCLXNumericField::getProperty( const ::rtl::OUString& PropertyName ) throw(::com::sun::star::uno::RuntimeException)
5698 : {
5699 0 : SolarMutexGuard aGuard;
5700 :
5701 0 : ::com::sun::star::uno::Any aProp;
5702 0 : FormatterBase* pFormatter = GetFormatter();
5703 0 : if ( pFormatter )
5704 : {
5705 0 : sal_uInt16 nPropType = GetPropertyId( PropertyName );
5706 0 : switch ( nPropType )
5707 : {
5708 : case BASEPROPERTY_VALUE_DOUBLE:
5709 : {
5710 0 : aProp <<= (double) getValue();
5711 : }
5712 0 : break;
5713 : case BASEPROPERTY_VALUEMIN_DOUBLE:
5714 : {
5715 0 : aProp <<= (double) getMin();
5716 : }
5717 0 : break;
5718 : case BASEPROPERTY_VALUEMAX_DOUBLE:
5719 : {
5720 0 : aProp <<= (double) getMax();
5721 : }
5722 0 : break;
5723 : case BASEPROPERTY_VALUESTEP_DOUBLE:
5724 : {
5725 0 : aProp <<= (double) getSpinSize();
5726 : }
5727 0 : break;
5728 : case BASEPROPERTY_NUMSHOWTHOUSANDSEP:
5729 : {
5730 0 : aProp <<= (sal_Bool) ((NumericField*)GetWindow())->IsUseThousandSep();
5731 : }
5732 0 : break;
5733 : default:
5734 : {
5735 0 : aProp <<= VCLXFormattedSpinField::getProperty( PropertyName );
5736 : }
5737 : }
5738 : }
5739 0 : return aProp;
5740 : }
5741 :
5742 :
5743 : // ----------------------------------------------------
5744 : // class VCLXMetricField
5745 : // ----------------------------------------------------
5746 :
5747 0 : void VCLXMetricField::ImplGetPropertyIds( std::list< sal_uInt16 > &rIds )
5748 : {
5749 : PushPropertyIds( rIds,
5750 : BASEPROPERTY_ALIGN,
5751 : BASEPROPERTY_BACKGROUNDCOLOR,
5752 : BASEPROPERTY_BORDER,
5753 : BASEPROPERTY_BORDERCOLOR,
5754 : BASEPROPERTY_DECIMALACCURACY,
5755 : BASEPROPERTY_DEFAULTCONTROL,
5756 : BASEPROPERTY_ENABLED,
5757 : BASEPROPERTY_ENABLEVISIBLE,
5758 : BASEPROPERTY_FONTDESCRIPTOR,
5759 : BASEPROPERTY_HELPTEXT,
5760 : BASEPROPERTY_HELPURL,
5761 : BASEPROPERTY_NUMSHOWTHOUSANDSEP,
5762 : BASEPROPERTY_PRINTABLE,
5763 : BASEPROPERTY_READONLY,
5764 : BASEPROPERTY_REPEAT,
5765 : BASEPROPERTY_REPEAT_DELAY,
5766 : BASEPROPERTY_SPIN,
5767 : BASEPROPERTY_STRICTFORMAT,
5768 : BASEPROPERTY_TABSTOP,
5769 : BASEPROPERTY_ENFORCE_FORMAT,
5770 : BASEPROPERTY_HIDEINACTIVESELECTION,
5771 : BASEPROPERTY_UNIT,
5772 : BASEPROPERTY_CUSTOMUNITTEXT,
5773 : BASEPROPERTY_WRITING_MODE,
5774 : BASEPROPERTY_CONTEXT_WRITING_MODE,
5775 : BASEPROPERTY_MOUSE_WHEEL_BEHAVIOUR,
5776 0 : 0);
5777 0 : VCLXFormattedSpinField::ImplGetPropertyIds( rIds );
5778 0 : }
5779 :
5780 0 : VCLXMetricField::VCLXMetricField()
5781 : {
5782 0 : }
5783 :
5784 0 : VCLXMetricField::~VCLXMetricField()
5785 : {
5786 0 : }
5787 :
5788 0 : MetricFormatter *VCLXMetricField::GetMetricFormatter() throw(::com::sun::star::uno::RuntimeException)
5789 : {
5790 0 : MetricFormatter *pFormatter = (MetricFormatter *) GetFormatter();
5791 0 : if (!pFormatter)
5792 0 : throw ::com::sun::star::uno::RuntimeException();
5793 0 : return pFormatter;
5794 : }
5795 :
5796 0 : MetricField *VCLXMetricField::GetMetricField() throw(::com::sun::star::uno::RuntimeException)
5797 : {
5798 0 : MetricField *pField = (MetricField *) GetWindow();
5799 0 : if (!pField)
5800 0 : throw ::com::sun::star::uno::RuntimeException();
5801 0 : return pField;
5802 : }
5803 :
5804 : // ::com::sun::star::uno::XInterface
5805 0 : ::com::sun::star::uno::Any VCLXMetricField::queryInterface( const ::com::sun::star::uno::Type & rType ) throw(::com::sun::star::uno::RuntimeException)
5806 : {
5807 : ::com::sun::star::uno::Any aRet = ::cppu::queryInterface( rType,
5808 0 : (static_cast< ::com::sun::star::awt::XMetricField* >(this)) );
5809 0 : return (aRet.hasValue() ? aRet : VCLXFormattedSpinField::queryInterface( rType ));
5810 : }
5811 :
5812 : // ::com::sun::star::lang::XTypeProvider
5813 0 : IMPL_XTYPEPROVIDER_START( VCLXMetricField )
5814 0 : getCppuType( ( ::com::sun::star::uno::Reference< ::com::sun::star::awt::XMetricField>* ) NULL ),
5815 : VCLXFormattedSpinField::getTypes()
5816 0 : IMPL_XTYPEPROVIDER_END
5817 :
5818 : // FIXME: later ...
5819 : #define MetricUnitUnoToVcl(a) ((FieldUnit)(a))
5820 :
5821 : #define METRIC_MAP_PAIR(method,parent) \
5822 : sal_Int64 VCLXMetricField::get##method( sal_Int16 nUnit ) throw (::com::sun::star::uno::RuntimeException) \
5823 : { \
5824 : SolarMutexGuard aGuard; \
5825 : return GetMetric##parent()->Get##method( MetricUnitUnoToVcl( nUnit ) ); \
5826 : } \
5827 : void VCLXMetricField::set##method( sal_Int64 nValue, sal_Int16 nUnit ) throw (::com::sun::star::uno::RuntimeException) \
5828 : { \
5829 : SolarMutexGuard aGuard; \
5830 : GetMetric##parent()->Set##method( nValue, MetricUnitUnoToVcl( nUnit ) ); \
5831 : }
5832 :
5833 0 : METRIC_MAP_PAIR(Min, Formatter)
5834 0 : METRIC_MAP_PAIR(Max, Formatter)
5835 0 : METRIC_MAP_PAIR(First, Field)
5836 0 : METRIC_MAP_PAIR(Last, Field)
5837 :
5838 : #undef METRIC_MAP_PAIR
5839 :
5840 0 : ::sal_Int64 VCLXMetricField::getValue( ::sal_Int16 nUnit ) throw (::com::sun::star::uno::RuntimeException)
5841 : {
5842 0 : SolarMutexGuard aGuard;
5843 0 : return GetMetricFormatter()->GetValue( MetricUnitUnoToVcl( nUnit ) );
5844 : }
5845 :
5846 0 : ::sal_Int64 VCLXMetricField::getCorrectedValue( ::sal_Int16 nUnit ) throw (::com::sun::star::uno::RuntimeException)
5847 : {
5848 0 : SolarMutexGuard aGuard;
5849 0 : return GetMetricFormatter()->GetCorrectedValue( MetricUnitUnoToVcl( nUnit ) );
5850 : }
5851 :
5852 : // FIXME: acute cut/paste evilness - move this to the parent Edit class ?
5853 0 : void VCLXMetricField::CallListeners()
5854 : {
5855 : // #107218# Call same listeners like VCL would do after user interaction
5856 0 : Edit* pEdit = (Edit*)GetWindow();
5857 0 : if ( pEdit )
5858 : {
5859 0 : SetSynthesizingVCLEvent( sal_True );
5860 0 : pEdit->SetModifyFlag();
5861 0 : pEdit->Modify();
5862 0 : SetSynthesizingVCLEvent( sal_False );
5863 : }
5864 0 : }
5865 :
5866 0 : void VCLXMetricField::setValue( ::sal_Int64 Value, ::sal_Int16 Unit ) throw (::com::sun::star::uno::RuntimeException)
5867 : {
5868 0 : SolarMutexGuard aGuard;
5869 0 : GetMetricFormatter()->SetValue( Value, MetricUnitUnoToVcl( Unit ) );
5870 0 : CallListeners();
5871 0 : }
5872 :
5873 0 : void VCLXMetricField::setUserValue( ::sal_Int64 Value, ::sal_Int16 Unit ) throw (::com::sun::star::uno::RuntimeException)
5874 : {
5875 0 : SolarMutexGuard aGuard;
5876 0 : GetMetricFormatter()->SetUserValue( Value, MetricUnitUnoToVcl( Unit ) );
5877 0 : CallListeners();
5878 0 : }
5879 :
5880 0 : void VCLXMetricField::setStrictFormat( sal_Bool bStrict ) throw(::com::sun::star::uno::RuntimeException)
5881 : {
5882 0 : VCLXFormattedSpinField::setStrictFormat( bStrict );
5883 0 : }
5884 :
5885 0 : sal_Bool VCLXMetricField::isStrictFormat() throw(::com::sun::star::uno::RuntimeException)
5886 : {
5887 0 : return VCLXFormattedSpinField::isStrictFormat();
5888 : }
5889 :
5890 0 : void VCLXMetricField::setSpinSize( sal_Int64 Value ) throw(::com::sun::star::uno::RuntimeException)
5891 : {
5892 0 : SolarMutexGuard aGuard;
5893 0 : GetMetricField()->SetSpinSize( Value );
5894 0 : }
5895 :
5896 0 : sal_Int64 VCLXMetricField::getSpinSize() throw(::com::sun::star::uno::RuntimeException)
5897 : {
5898 0 : SolarMutexGuard aGuard;
5899 0 : return GetMetricField()->GetSpinSize();
5900 : }
5901 :
5902 0 : void VCLXMetricField::setDecimalDigits( sal_Int16 Value ) throw(::com::sun::star::uno::RuntimeException)
5903 : {
5904 0 : SolarMutexGuard aGuard;
5905 0 : GetMetricFormatter()->SetDecimalDigits( Value );
5906 0 : }
5907 :
5908 0 : sal_Int16 VCLXMetricField::getDecimalDigits() throw(::com::sun::star::uno::RuntimeException)
5909 : {
5910 0 : SolarMutexGuard aGuard;
5911 :
5912 0 : NumericFormatter* pNumericFormatter = (NumericFormatter*) GetFormatter();
5913 0 : return pNumericFormatter ? pNumericFormatter->GetDecimalDigits() : 0;
5914 : }
5915 :
5916 0 : void VCLXMetricField::setProperty( const ::rtl::OUString& PropertyName, const ::com::sun::star::uno::Any& Value) throw(::com::sun::star::uno::RuntimeException)
5917 : {
5918 0 : SolarMutexGuard aGuard;
5919 :
5920 0 : if ( GetWindow() )
5921 : {
5922 0 : sal_uInt16 nPropType = GetPropertyId( PropertyName );
5923 0 : switch ( nPropType )
5924 : {
5925 : case BASEPROPERTY_DECIMALACCURACY:
5926 : {
5927 0 : sal_Int16 n = 0;
5928 0 : if ( Value >>= n )
5929 0 : setDecimalDigits( n );
5930 : break;
5931 : }
5932 : case BASEPROPERTY_NUMSHOWTHOUSANDSEP:
5933 : {
5934 0 : sal_Bool b = sal_False;
5935 0 : if ( Value >>= b )
5936 0 : ((NumericField*)GetWindow())->SetUseThousandSep( b );
5937 : }
5938 0 : break;
5939 : case BASEPROPERTY_UNIT:
5940 : {
5941 0 : sal_uInt16 nVal = 0;
5942 0 : if ( Value >>= nVal )
5943 0 : ((MetricField*)GetWindow())->SetUnit( (FieldUnit) nVal );
5944 : break;
5945 : }
5946 : case BASEPROPERTY_CUSTOMUNITTEXT:
5947 : {
5948 0 : rtl::OUString aStr;
5949 0 : if ( Value >>= aStr )
5950 0 : ((MetricField*)GetWindow())->SetCustomUnitText( aStr );
5951 0 : break;
5952 : }
5953 : default:
5954 : {
5955 0 : VCLXFormattedSpinField::setProperty( PropertyName, Value );
5956 0 : break;
5957 : }
5958 : }
5959 0 : }
5960 0 : }
5961 :
5962 0 : ::com::sun::star::uno::Any VCLXMetricField::getProperty( const ::rtl::OUString& PropertyName ) throw(::com::sun::star::uno::RuntimeException)
5963 : {
5964 0 : SolarMutexGuard aGuard;
5965 :
5966 0 : ::com::sun::star::uno::Any aProp;
5967 0 : FormatterBase* pFormatter = GetFormatter();
5968 0 : if ( pFormatter )
5969 : {
5970 0 : sal_uInt16 nPropType = GetPropertyId( PropertyName );
5971 0 : switch ( nPropType )
5972 : {
5973 : case BASEPROPERTY_NUMSHOWTHOUSANDSEP:
5974 0 : aProp <<= (sal_Bool) ((NumericField*)GetWindow())->IsUseThousandSep();
5975 0 : break;
5976 : case BASEPROPERTY_UNIT:
5977 0 : aProp <<= (sal_uInt16) ((MetricField*)GetWindow())->GetUnit();
5978 0 : break;
5979 : case BASEPROPERTY_CUSTOMUNITTEXT:
5980 0 : aProp <<= rtl::OUString (((MetricField*)GetWindow())->GetCustomUnitText());
5981 0 : break;
5982 : default:
5983 : {
5984 0 : aProp <<= VCLXFormattedSpinField::getProperty( PropertyName );
5985 0 : break;
5986 : }
5987 : }
5988 : }
5989 0 : return aProp;
5990 : }
5991 :
5992 :
5993 : // ----------------------------------------------------
5994 : // class VCLXCurrencyField
5995 : // ----------------------------------------------------
5996 :
5997 0 : void VCLXCurrencyField::ImplGetPropertyIds( std::list< sal_uInt16 > &rIds )
5998 : {
5999 : PushPropertyIds( rIds,
6000 : BASEPROPERTY_ALIGN,
6001 : BASEPROPERTY_BACKGROUNDCOLOR,
6002 : BASEPROPERTY_BORDER,
6003 : BASEPROPERTY_BORDERCOLOR,
6004 : BASEPROPERTY_CURRENCYSYMBOL,
6005 : BASEPROPERTY_CURSYM_POSITION,
6006 : BASEPROPERTY_DECIMALACCURACY,
6007 : BASEPROPERTY_DEFAULTCONTROL,
6008 : BASEPROPERTY_ENABLED,
6009 : BASEPROPERTY_ENABLEVISIBLE,
6010 : BASEPROPERTY_FONTDESCRIPTOR,
6011 : BASEPROPERTY_HELPTEXT,
6012 : BASEPROPERTY_HELPURL,
6013 : BASEPROPERTY_NUMSHOWTHOUSANDSEP,
6014 : BASEPROPERTY_PRINTABLE,
6015 : BASEPROPERTY_READONLY,
6016 : BASEPROPERTY_REPEAT,
6017 : BASEPROPERTY_REPEAT_DELAY,
6018 : BASEPROPERTY_SPIN,
6019 : BASEPROPERTY_STRICTFORMAT,
6020 : BASEPROPERTY_TABSTOP,
6021 : BASEPROPERTY_VALUEMAX_DOUBLE,
6022 : BASEPROPERTY_VALUEMIN_DOUBLE,
6023 : BASEPROPERTY_VALUESTEP_DOUBLE,
6024 : BASEPROPERTY_VALUE_DOUBLE,
6025 : BASEPROPERTY_ENFORCE_FORMAT,
6026 : BASEPROPERTY_HIDEINACTIVESELECTION,
6027 : BASEPROPERTY_VERTICALALIGN,
6028 : BASEPROPERTY_WRITING_MODE,
6029 : BASEPROPERTY_CONTEXT_WRITING_MODE,
6030 : BASEPROPERTY_MOUSE_WHEEL_BEHAVIOUR,
6031 0 : 0);
6032 0 : VCLXFormattedSpinField::ImplGetPropertyIds( rIds );
6033 0 : }
6034 :
6035 0 : VCLXCurrencyField::VCLXCurrencyField()
6036 : {
6037 0 : }
6038 :
6039 0 : VCLXCurrencyField::~VCLXCurrencyField()
6040 : {
6041 0 : }
6042 :
6043 : // ::com::sun::star::uno::XInterface
6044 0 : ::com::sun::star::uno::Any VCLXCurrencyField::queryInterface( const ::com::sun::star::uno::Type & rType ) throw(::com::sun::star::uno::RuntimeException)
6045 : {
6046 : ::com::sun::star::uno::Any aRet = ::cppu::queryInterface( rType,
6047 0 : (static_cast< ::com::sun::star::awt::XCurrencyField* >(this)) );
6048 0 : return (aRet.hasValue() ? aRet : VCLXFormattedSpinField::queryInterface( rType ));
6049 : }
6050 :
6051 : // ::com::sun::star::lang::XTypeProvider
6052 0 : IMPL_XTYPEPROVIDER_START( VCLXCurrencyField )
6053 0 : getCppuType( ( ::com::sun::star::uno::Reference< ::com::sun::star::awt::XCurrencyField>* ) NULL ),
6054 : VCLXFormattedSpinField::getTypes()
6055 0 : IMPL_XTYPEPROVIDER_END
6056 :
6057 0 : void VCLXCurrencyField::setValue( double Value ) throw(::com::sun::star::uno::RuntimeException)
6058 : {
6059 0 : SolarMutexGuard aGuard;
6060 :
6061 0 : LongCurrencyFormatter* pCurrencyFormatter = (LongCurrencyFormatter*) GetFormatter();
6062 0 : if ( pCurrencyFormatter )
6063 : {
6064 : // shift long value using decimal digits
6065 : // (e.g., input 105 using 2 digits returns 1,05)
6066 : // Thus, to set a value of 1,05, insert 105 and 2 digits
6067 : pCurrencyFormatter->SetValue(
6068 0 : ImplCalcLongValue( Value, pCurrencyFormatter->GetDecimalDigits() ) );
6069 :
6070 : // #107218# Call same listeners like VCL would do after user interaction
6071 0 : Edit* pEdit = (Edit*)GetWindow();
6072 0 : if ( pEdit )
6073 : {
6074 0 : SetSynthesizingVCLEvent( sal_True );
6075 0 : pEdit->SetModifyFlag();
6076 0 : pEdit->Modify();
6077 0 : SetSynthesizingVCLEvent( sal_False );
6078 : }
6079 0 : }
6080 0 : }
6081 :
6082 0 : double VCLXCurrencyField::getValue() throw(::com::sun::star::uno::RuntimeException)
6083 : {
6084 0 : SolarMutexGuard aGuard;
6085 :
6086 0 : LongCurrencyFormatter* pCurrencyFormatter = (LongCurrencyFormatter*) GetFormatter();
6087 : return pCurrencyFormatter
6088 0 : ? ImplCalcDoubleValue( (double)pCurrencyFormatter->GetValue(), pCurrencyFormatter->GetDecimalDigits() )
6089 0 : : 0;
6090 : }
6091 :
6092 0 : void VCLXCurrencyField::setMin( double Value ) throw(::com::sun::star::uno::RuntimeException)
6093 : {
6094 0 : SolarMutexGuard aGuard;
6095 :
6096 0 : LongCurrencyFormatter* pCurrencyFormatter = (LongCurrencyFormatter*) GetFormatter();
6097 0 : if ( pCurrencyFormatter )
6098 : pCurrencyFormatter->SetMin(
6099 0 : ImplCalcLongValue( Value, pCurrencyFormatter->GetDecimalDigits() ) );
6100 0 : }
6101 :
6102 0 : double VCLXCurrencyField::getMin() throw(::com::sun::star::uno::RuntimeException)
6103 : {
6104 0 : SolarMutexGuard aGuard;
6105 :
6106 0 : LongCurrencyFormatter* pCurrencyFormatter = (LongCurrencyFormatter*) GetFormatter();
6107 : return pCurrencyFormatter
6108 0 : ? ImplCalcDoubleValue( (double)pCurrencyFormatter->GetMin(), pCurrencyFormatter->GetDecimalDigits() )
6109 0 : : 0;
6110 : }
6111 :
6112 0 : void VCLXCurrencyField::setMax( double Value ) throw(::com::sun::star::uno::RuntimeException)
6113 : {
6114 0 : SolarMutexGuard aGuard;
6115 :
6116 0 : LongCurrencyFormatter* pCurrencyFormatter = (LongCurrencyFormatter*) GetFormatter();
6117 0 : if ( pCurrencyFormatter )
6118 : pCurrencyFormatter->SetMax(
6119 0 : ImplCalcLongValue( Value, pCurrencyFormatter->GetDecimalDigits() ) );
6120 0 : }
6121 :
6122 0 : double VCLXCurrencyField::getMax() throw(::com::sun::star::uno::RuntimeException)
6123 : {
6124 0 : SolarMutexGuard aGuard;
6125 :
6126 0 : LongCurrencyFormatter* pCurrencyFormatter = (LongCurrencyFormatter*) GetFormatter();
6127 : return pCurrencyFormatter
6128 0 : ? ImplCalcDoubleValue( (double)pCurrencyFormatter->GetMax(), pCurrencyFormatter->GetDecimalDigits() )
6129 0 : : 0;
6130 : }
6131 :
6132 0 : void VCLXCurrencyField::setFirst( double Value ) throw(::com::sun::star::uno::RuntimeException)
6133 : {
6134 0 : SolarMutexGuard aGuard;
6135 :
6136 0 : LongCurrencyField* pCurrencyField = (LongCurrencyField*) GetWindow();
6137 0 : if ( pCurrencyField )
6138 : pCurrencyField->SetFirst(
6139 0 : ImplCalcLongValue( Value, pCurrencyField->GetDecimalDigits() ) );
6140 0 : }
6141 :
6142 0 : double VCLXCurrencyField::getFirst() throw(::com::sun::star::uno::RuntimeException)
6143 : {
6144 0 : SolarMutexGuard aGuard;
6145 :
6146 0 : LongCurrencyField* pCurrencyField = (LongCurrencyField*) GetWindow();
6147 : return pCurrencyField
6148 0 : ? ImplCalcDoubleValue( (double)pCurrencyField->GetFirst(), pCurrencyField->GetDecimalDigits() )
6149 0 : : 0;
6150 : }
6151 :
6152 0 : void VCLXCurrencyField::setLast( double Value ) throw(::com::sun::star::uno::RuntimeException)
6153 : {
6154 0 : SolarMutexGuard aGuard;
6155 :
6156 0 : LongCurrencyField* pCurrencyField = (LongCurrencyField*) GetWindow();
6157 0 : if ( pCurrencyField )
6158 : pCurrencyField->SetLast(
6159 0 : ImplCalcLongValue( Value, pCurrencyField->GetDecimalDigits() ) );
6160 0 : }
6161 :
6162 0 : double VCLXCurrencyField::getLast() throw(::com::sun::star::uno::RuntimeException)
6163 : {
6164 0 : SolarMutexGuard aGuard;
6165 :
6166 0 : LongCurrencyField* pCurrencyField = (LongCurrencyField*) GetWindow();
6167 : return pCurrencyField
6168 0 : ? ImplCalcDoubleValue( (double)pCurrencyField->GetLast(), pCurrencyField->GetDecimalDigits() )
6169 0 : : 0;
6170 : }
6171 :
6172 0 : void VCLXCurrencyField::setSpinSize( double Value ) throw(::com::sun::star::uno::RuntimeException)
6173 : {
6174 0 : SolarMutexGuard aGuard;
6175 :
6176 0 : LongCurrencyField* pCurrencyField = (LongCurrencyField*) GetWindow();
6177 0 : if ( pCurrencyField )
6178 : pCurrencyField->SetSpinSize(
6179 0 : ImplCalcLongValue( Value, pCurrencyField->GetDecimalDigits() ) );
6180 0 : }
6181 :
6182 0 : double VCLXCurrencyField::getSpinSize() throw(::com::sun::star::uno::RuntimeException)
6183 : {
6184 0 : SolarMutexGuard aGuard;
6185 :
6186 0 : LongCurrencyField* pCurrencyField = (LongCurrencyField*) GetWindow();
6187 : return pCurrencyField
6188 0 : ? ImplCalcDoubleValue( (double)pCurrencyField->GetSpinSize(), pCurrencyField->GetDecimalDigits() )
6189 0 : : 0;
6190 : }
6191 :
6192 0 : void VCLXCurrencyField::setStrictFormat( sal_Bool bStrict ) throw(::com::sun::star::uno::RuntimeException)
6193 : {
6194 0 : VCLXFormattedSpinField::setStrictFormat( bStrict );
6195 0 : }
6196 :
6197 0 : sal_Bool VCLXCurrencyField::isStrictFormat() throw(::com::sun::star::uno::RuntimeException)
6198 : {
6199 0 : return VCLXFormattedSpinField::isStrictFormat();
6200 : }
6201 :
6202 :
6203 0 : void VCLXCurrencyField::setDecimalDigits( sal_Int16 Value ) throw(::com::sun::star::uno::RuntimeException)
6204 : {
6205 0 : SolarMutexGuard aGuard;
6206 :
6207 0 : LongCurrencyFormatter* pCurrencyFormatter = (LongCurrencyFormatter*) GetFormatter();
6208 0 : if ( pCurrencyFormatter )
6209 : {
6210 0 : double n = getValue();
6211 0 : pCurrencyFormatter->SetDecimalDigits( Value );
6212 0 : setValue( n );
6213 0 : }
6214 0 : }
6215 :
6216 0 : sal_Int16 VCLXCurrencyField::getDecimalDigits() throw(::com::sun::star::uno::RuntimeException)
6217 : {
6218 0 : SolarMutexGuard aGuard;
6219 :
6220 0 : LongCurrencyFormatter* pCurrencyFormatter = (LongCurrencyFormatter*) GetFormatter();
6221 0 : return pCurrencyFormatter ? pCurrencyFormatter->GetDecimalDigits() : 0;
6222 : }
6223 :
6224 0 : void VCLXCurrencyField::setProperty( const ::rtl::OUString& PropertyName, const ::com::sun::star::uno::Any& Value) throw(::com::sun::star::uno::RuntimeException)
6225 : {
6226 0 : SolarMutexGuard aGuard;
6227 :
6228 0 : if ( GetWindow() )
6229 : {
6230 0 : sal_Bool bVoid = Value.getValueType().getTypeClass() == ::com::sun::star::uno::TypeClass_VOID;
6231 :
6232 0 : sal_uInt16 nPropType = GetPropertyId( PropertyName );
6233 0 : switch ( nPropType )
6234 : {
6235 : case BASEPROPERTY_VALUE_DOUBLE:
6236 : {
6237 0 : if ( bVoid )
6238 : {
6239 0 : ((LongCurrencyField*)GetWindow())->EnableEmptyFieldValue( sal_True );
6240 0 : ((LongCurrencyField*)GetWindow())->SetEmptyFieldValue();
6241 : }
6242 : else
6243 : {
6244 0 : double d = 0;
6245 0 : if ( Value >>= d )
6246 0 : setValue( d );
6247 : }
6248 : }
6249 0 : break;
6250 : case BASEPROPERTY_VALUEMIN_DOUBLE:
6251 : {
6252 0 : double d = 0;
6253 0 : if ( Value >>= d )
6254 0 : setMin( d );
6255 : }
6256 0 : break;
6257 : case BASEPROPERTY_VALUEMAX_DOUBLE:
6258 : {
6259 0 : double d = 0;
6260 0 : if ( Value >>= d )
6261 0 : setMax( d );
6262 : }
6263 0 : break;
6264 : case BASEPROPERTY_VALUESTEP_DOUBLE:
6265 : {
6266 0 : double d = 0;
6267 0 : if ( Value >>= d )
6268 0 : setSpinSize( d );
6269 : }
6270 0 : break;
6271 : case BASEPROPERTY_DECIMALACCURACY:
6272 : {
6273 0 : sal_Int16 n = sal_Int16();
6274 0 : if ( Value >>= n )
6275 0 : setDecimalDigits( n );
6276 : }
6277 0 : break;
6278 : case BASEPROPERTY_CURRENCYSYMBOL:
6279 : {
6280 0 : ::rtl::OUString aString;
6281 0 : if ( Value >>= aString )
6282 0 : ((LongCurrencyField*)GetWindow())->SetCurrencySymbol( aString );
6283 : }
6284 0 : break;
6285 : case BASEPROPERTY_NUMSHOWTHOUSANDSEP:
6286 : {
6287 0 : sal_Bool b = sal_Bool();
6288 0 : if ( Value >>= b )
6289 0 : ((LongCurrencyField*)GetWindow())->SetUseThousandSep( b );
6290 : }
6291 0 : break;
6292 : default:
6293 : {
6294 0 : VCLXFormattedSpinField::setProperty( PropertyName, Value );
6295 : }
6296 : }
6297 0 : }
6298 0 : }
6299 :
6300 0 : ::com::sun::star::uno::Any VCLXCurrencyField::getProperty( const ::rtl::OUString& PropertyName ) throw(::com::sun::star::uno::RuntimeException)
6301 : {
6302 0 : SolarMutexGuard aGuard;
6303 :
6304 0 : ::com::sun::star::uno::Any aProp;
6305 0 : FormatterBase* pFormatter = GetFormatter();
6306 0 : if ( pFormatter )
6307 : {
6308 0 : sal_uInt16 nPropType = GetPropertyId( PropertyName );
6309 0 : switch ( nPropType )
6310 : {
6311 : case BASEPROPERTY_VALUE_DOUBLE:
6312 : {
6313 0 : aProp <<= (double) getValue();
6314 : }
6315 0 : break;
6316 : case BASEPROPERTY_VALUEMIN_DOUBLE:
6317 : {
6318 0 : aProp <<= (double) getMin();
6319 : }
6320 0 : break;
6321 : case BASEPROPERTY_VALUEMAX_DOUBLE:
6322 : {
6323 0 : aProp <<= (double) getMax();
6324 : }
6325 0 : break;
6326 : case BASEPROPERTY_VALUESTEP_DOUBLE:
6327 : {
6328 0 : aProp <<= (double) getSpinSize();
6329 : }
6330 0 : break;
6331 : case BASEPROPERTY_CURRENCYSYMBOL:
6332 : {
6333 0 : aProp <<= ::rtl::OUString( ((LongCurrencyField*)GetWindow())->GetCurrencySymbol() );
6334 : }
6335 0 : break;
6336 : case BASEPROPERTY_NUMSHOWTHOUSANDSEP:
6337 : {
6338 0 : aProp <<= (sal_Bool) ((LongCurrencyField*)GetWindow())->IsUseThousandSep();
6339 : }
6340 0 : break;
6341 : default:
6342 : {
6343 0 : aProp <<= VCLXFormattedSpinField::getProperty( PropertyName );
6344 : }
6345 : }
6346 : }
6347 0 : return aProp;
6348 : }
6349 :
6350 : // ----------------------------------------------------
6351 : // class VCLXPatternField
6352 : // ----------------------------------------------------
6353 :
6354 0 : void VCLXPatternField::ImplGetPropertyIds( std::list< sal_uInt16 > &rIds )
6355 : {
6356 : PushPropertyIds( rIds,
6357 : BASEPROPERTY_ALIGN,
6358 : BASEPROPERTY_BACKGROUNDCOLOR,
6359 : BASEPROPERTY_BORDER,
6360 : BASEPROPERTY_BORDERCOLOR,
6361 : BASEPROPERTY_DEFAULTCONTROL,
6362 : BASEPROPERTY_EDITMASK,
6363 : BASEPROPERTY_ENABLED,
6364 : BASEPROPERTY_ENABLEVISIBLE,
6365 : BASEPROPERTY_FONTDESCRIPTOR,
6366 : BASEPROPERTY_HELPTEXT,
6367 : BASEPROPERTY_HELPURL,
6368 : BASEPROPERTY_LITERALMASK,
6369 : BASEPROPERTY_MAXTEXTLEN,
6370 : BASEPROPERTY_PRINTABLE,
6371 : BASEPROPERTY_READONLY,
6372 : BASEPROPERTY_STRICTFORMAT,
6373 : BASEPROPERTY_TABSTOP,
6374 : BASEPROPERTY_TEXT,
6375 : BASEPROPERTY_HIDEINACTIVESELECTION,
6376 : BASEPROPERTY_VERTICALALIGN,
6377 : BASEPROPERTY_WRITING_MODE,
6378 : BASEPROPERTY_CONTEXT_WRITING_MODE,
6379 : BASEPROPERTY_MOUSE_WHEEL_BEHAVIOUR,
6380 0 : 0);
6381 0 : VCLXFormattedSpinField::ImplGetPropertyIds( rIds );
6382 0 : }
6383 :
6384 0 : VCLXPatternField::VCLXPatternField()
6385 : {
6386 0 : }
6387 :
6388 0 : VCLXPatternField::~VCLXPatternField()
6389 : {
6390 0 : }
6391 :
6392 : // ::com::sun::star::uno::XInterface
6393 0 : ::com::sun::star::uno::Any VCLXPatternField::queryInterface( const ::com::sun::star::uno::Type & rType ) throw(::com::sun::star::uno::RuntimeException)
6394 : {
6395 : ::com::sun::star::uno::Any aRet = ::cppu::queryInterface( rType,
6396 0 : (static_cast< ::com::sun::star::awt::XPatternField* >(this)) );
6397 0 : return (aRet.hasValue() ? aRet : VCLXFormattedSpinField::queryInterface( rType ));
6398 : }
6399 :
6400 : // ::com::sun::star::lang::XTypeProvider
6401 0 : IMPL_XTYPEPROVIDER_START( VCLXPatternField )
6402 0 : getCppuType( ( ::com::sun::star::uno::Reference< ::com::sun::star::awt::XPatternField>* ) NULL ),
6403 : VCLXFormattedSpinField::getTypes()
6404 0 : IMPL_XTYPEPROVIDER_END
6405 :
6406 0 : void VCLXPatternField::setMasks( const ::rtl::OUString& EditMask, const ::rtl::OUString& LiteralMask ) throw(::com::sun::star::uno::RuntimeException)
6407 : {
6408 0 : SolarMutexGuard aGuard;
6409 :
6410 0 : PatternField* pPatternField = (PatternField*) GetWindow();
6411 0 : if ( pPatternField )
6412 : {
6413 0 : pPatternField->SetMask( rtl::OUStringToOString(EditMask, RTL_TEXTENCODING_ASCII_US), LiteralMask );
6414 0 : }
6415 0 : }
6416 :
6417 0 : void VCLXPatternField::getMasks( ::rtl::OUString& EditMask, ::rtl::OUString& LiteralMask ) throw(::com::sun::star::uno::RuntimeException)
6418 : {
6419 0 : SolarMutexGuard aGuard;
6420 :
6421 0 : PatternField* pPatternField = (PatternField*) GetWindow();
6422 0 : if ( pPatternField )
6423 : {
6424 0 : EditMask = rtl::OStringToOUString(pPatternField->GetEditMask(), RTL_TEXTENCODING_ASCII_US);
6425 0 : LiteralMask = pPatternField->GetLiteralMask();
6426 0 : }
6427 0 : }
6428 :
6429 0 : void VCLXPatternField::setString( const ::rtl::OUString& Str ) throw(::com::sun::star::uno::RuntimeException)
6430 : {
6431 0 : SolarMutexGuard aGuard;
6432 :
6433 0 : PatternField* pPatternField = (PatternField*) GetWindow();
6434 0 : if ( pPatternField )
6435 : {
6436 0 : pPatternField->SetString( Str );
6437 0 : }
6438 0 : }
6439 :
6440 0 : ::rtl::OUString VCLXPatternField::getString() throw(::com::sun::star::uno::RuntimeException)
6441 : {
6442 0 : SolarMutexGuard aGuard;
6443 :
6444 0 : ::rtl::OUString aString;
6445 0 : PatternField* pPatternField = (PatternField*) GetWindow();
6446 0 : if ( pPatternField )
6447 0 : aString = pPatternField->GetString();
6448 0 : return aString;
6449 : }
6450 :
6451 0 : void VCLXPatternField::setStrictFormat( sal_Bool bStrict ) throw(::com::sun::star::uno::RuntimeException)
6452 : {
6453 0 : VCLXFormattedSpinField::setStrictFormat( bStrict );
6454 0 : }
6455 :
6456 0 : sal_Bool VCLXPatternField::isStrictFormat() throw(::com::sun::star::uno::RuntimeException)
6457 : {
6458 0 : return VCLXFormattedSpinField::isStrictFormat();
6459 : }
6460 :
6461 0 : void VCLXPatternField::setProperty( const ::rtl::OUString& PropertyName, const ::com::sun::star::uno::Any& Value) throw(::com::sun::star::uno::RuntimeException)
6462 : {
6463 0 : SolarMutexGuard aGuard;
6464 :
6465 0 : if ( GetWindow() )
6466 : {
6467 0 : sal_uInt16 nPropType = GetPropertyId( PropertyName );
6468 0 : switch ( nPropType )
6469 : {
6470 : case BASEPROPERTY_EDITMASK:
6471 : case BASEPROPERTY_LITERALMASK:
6472 : {
6473 0 : ::rtl::OUString aString;
6474 0 : if ( Value >>= aString )
6475 : {
6476 0 : ::rtl::OUString aEditMask, aLiteralMask;
6477 0 : getMasks( aEditMask, aLiteralMask );
6478 0 : if ( nPropType == BASEPROPERTY_EDITMASK )
6479 0 : aEditMask = aString;
6480 : else
6481 0 : aLiteralMask = aString;
6482 0 : setMasks( aEditMask, aLiteralMask );
6483 0 : }
6484 : }
6485 0 : break;
6486 : default:
6487 : {
6488 0 : VCLXFormattedSpinField::setProperty( PropertyName, Value );
6489 : }
6490 : }
6491 0 : }
6492 0 : }
6493 :
6494 0 : ::com::sun::star::uno::Any VCLXPatternField::getProperty( const ::rtl::OUString& PropertyName ) throw(::com::sun::star::uno::RuntimeException)
6495 : {
6496 0 : SolarMutexGuard aGuard;
6497 :
6498 0 : ::com::sun::star::uno::Any aProp;
6499 0 : if ( GetWindow() )
6500 : {
6501 0 : sal_uInt16 nPropType = GetPropertyId( PropertyName );
6502 0 : switch ( nPropType )
6503 : {
6504 : case BASEPROPERTY_EDITMASK:
6505 : case BASEPROPERTY_LITERALMASK:
6506 : {
6507 0 : ::rtl::OUString aEditMask, aLiteralMask;
6508 0 : getMasks( aEditMask, aLiteralMask );
6509 0 : if ( nPropType == BASEPROPERTY_EDITMASK )
6510 0 : aProp <<= aEditMask;
6511 : else
6512 0 : aProp <<= aLiteralMask;
6513 : }
6514 0 : break;
6515 : default:
6516 : {
6517 0 : aProp <<= VCLXFormattedSpinField::getProperty( PropertyName );
6518 : }
6519 : }
6520 : }
6521 0 : return aProp;
6522 : }
6523 :
6524 : // ----------------------------------------------------
6525 : // class VCLXToolBox
6526 : // ----------------------------------------------------
6527 731 : VCLXToolBox::VCLXToolBox()
6528 : {
6529 731 : }
6530 :
6531 48 : VCLXToolBox::~VCLXToolBox()
6532 : {
6533 48 : }
6534 :
6535 0 : ::com::sun::star::uno::Reference< ::com::sun::star::accessibility::XAccessibleContext > VCLXToolBox::CreateAccessibleContext()
6536 : {
6537 0 : return getAccessibleFactory().createAccessibleContext( this );
6538 : }
6539 :
6540 : // ----------------------------------------------------
6541 : // class VCLXFrame
6542 : // ----------------------------------------------------
6543 0 : VCLXFrame::VCLXFrame()
6544 : {
6545 0 : }
6546 :
6547 0 : void VCLXFrame::ImplGetPropertyIds( std::list< sal_uInt16 > &rIds )
6548 : {
6549 : PushPropertyIds( rIds,
6550 : BASEPROPERTY_BACKGROUNDCOLOR,
6551 : BASEPROPERTY_DEFAULTCONTROL,
6552 : BASEPROPERTY_ENABLED,
6553 : BASEPROPERTY_ENABLEVISIBLE,
6554 : BASEPROPERTY_FONTDESCRIPTOR,
6555 : BASEPROPERTY_GRAPHIC,
6556 : BASEPROPERTY_HELPTEXT,
6557 : BASEPROPERTY_HELPURL,
6558 : BASEPROPERTY_PRINTABLE,
6559 : BASEPROPERTY_LABEL,
6560 0 : 0);
6561 0 : VCLXContainer::ImplGetPropertyIds( rIds );
6562 0 : }
6563 :
6564 0 : VCLXFrame::~VCLXFrame()
6565 : {
6566 0 : }
6567 :
6568 0 : ::com::sun::star::uno::Any SAL_CALL VCLXFrame::queryInterface(const ::com::sun::star::uno::Type & rType )
6569 : throw(::com::sun::star::uno::RuntimeException)
6570 : {
6571 0 : return VCLXContainer::queryInterface( rType );
6572 : }
6573 :
6574 : // ::com::sun::star::lang::XTypeProvider
6575 0 : IMPL_XTYPEPROVIDER_START( VCLXFrame )
6576 : VCLXContainer::getTypes()
6577 0 : IMPL_XTYPEPROVIDER_END
6578 :
6579 : // ::com::sun::star::awt::XView
6580 0 : void SAL_CALL VCLXFrame::draw( sal_Int32 nX, sal_Int32 nY )
6581 : throw(::com::sun::star::uno::RuntimeException)
6582 : {
6583 0 : SolarMutexGuard aGuard;
6584 0 : Window* pWindow = GetWindow();
6585 :
6586 0 : if ( pWindow )
6587 : {
6588 0 : OutputDevice* pDev = VCLUnoHelper::GetOutputDevice( getGraphics() );
6589 0 : if ( !pDev )
6590 0 : pDev = pWindow->GetParent();
6591 :
6592 0 : Size aSize = pDev->PixelToLogic( pWindow->GetSizePixel() );
6593 0 : Point aPos = pDev->PixelToLogic( Point( nX, nY ) );
6594 :
6595 0 : pWindow->Draw( pDev, aPos, aSize, WINDOW_DRAW_NOCONTROLS );
6596 0 : }
6597 0 : }
6598 :
6599 : // ::com::sun::star::awt::XDevice,
6600 0 : ::com::sun::star::awt::DeviceInfo SAL_CALL VCLXFrame::getInfo()
6601 : throw(::com::sun::star::uno::RuntimeException)
6602 : {
6603 0 : ::com::sun::star::awt::DeviceInfo aInfo = VCLXDevice::getInfo();
6604 0 : return aInfo;
6605 : }
6606 :
6607 0 : void SAL_CALL VCLXFrame::setProperty(
6608 : const ::rtl::OUString& PropertyName,
6609 : const ::com::sun::star::uno::Any& Value )
6610 : throw(::com::sun::star::uno::RuntimeException)
6611 : {
6612 0 : SolarMutexGuard aGuard;
6613 :
6614 0 : VCLXContainer::setProperty( PropertyName, Value );
6615 0 : }
6616 :
6617 0 : void VCLXFrame::ProcessWindowEvent( const VclWindowEvent& rVclWindowEvent )
6618 : {
6619 0 : ::com::sun::star::uno::Reference< ::com::sun::star::awt::XWindow > xKeepAlive( this );
6620 0 : VCLXContainer::ProcessWindowEvent( rVclWindowEvent );
6621 108 : }
6622 :
6623 : /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
|