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