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