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 #ifndef INCLUDED_TOOLKIT_CONTROLS_UNOCONTROLS_HXX
21 #define INCLUDED_TOOLKIT_CONTROLS_UNOCONTROLS_HXX
22 
23 #include <config_options.h>
24 #include <toolkit/dllapi.h>
25 #include <com/sun/star/awt/XTextComponent.hpp>
26 #include <com/sun/star/awt/XTextListener.hpp>
27 #include <com/sun/star/awt/XLayoutConstrains.hpp>
28 #include <com/sun/star/awt/XTextLayoutConstrains.hpp>
29 #include <com/sun/star/awt/XButton.hpp>
30 #include <com/sun/star/awt/XToggleButton.hpp>
31 #include <com/sun/star/awt/XRadioButton.hpp>
32 #include <com/sun/star/awt/XItemListener.hpp>
33 #include <com/sun/star/awt/XCheckBox.hpp>
34 #include <com/sun/star/awt/XFixedHyperlink.hpp>
35 #include <com/sun/star/awt/XFixedText.hpp>
36 #include <com/sun/star/awt/XListBox.hpp>
37 #include <com/sun/star/awt/XComboBox.hpp>
38 #include <com/sun/star/awt/XDateField.hpp>
39 #include <com/sun/star/awt/XSpinField.hpp>
40 #include <com/sun/star/awt/XTimeField.hpp>
41 #include <com/sun/star/awt/XNumericField.hpp>
42 #include <com/sun/star/awt/XCurrencyField.hpp>
43 #include <com/sun/star/awt/XPatternField.hpp>
44 #include <com/sun/star/awt/XProgressBar.hpp>
45 #include <com/sun/star/awt/XItemList.hpp>
46 #include <toolkit/controls/unocontrolmodel.hxx>
47 #include <toolkit/controls/unocontrolbase.hxx>
48 #include <toolkit/helper/macros.hxx>
49 #include <cppuhelper/implbase5.hxx>
50 #include <cppuhelper/implbase4.hxx>
51 #include <cppuhelper/implbase1.hxx>
52 #include <comphelper/uno3.hxx>
53 #include <tools/gen.hxx>
54 
55 #include <memory>
56 #include <vector>
57 
58 #include <optional>
59 
60 namespace com::sun::star::graphic { class XGraphic; }
61 namespace com::sun::star::graphic { class XGraphicObject; }
62 
63 class ImageHelper
64 {
65 public:
66     // The routine will always attempt to return a valid XGraphic for the
67     // passed _rURL, additionally xOutGraphicObject will contain the
68     // associated XGraphicObject ( if url is valid for that ) and is set
69     // appropriately ( e.g. NULL if non GraphicObject scheme ) or a valid
70     // object if the rURL points to a valid object
71     static css::uno::Reference< css::graphic::XGraphic > getGraphicAndGraphicObjectFromURL_nothrow( css::uno::Reference< css::graphic::XGraphicObject >& xOutGraphicObject, const OUString& _rURL );
72     static css::uno::Reference< css::graphic::XGraphic > getGraphicFromURL_nothrow( const OUString& _rURL );
73 
74 };
75 
76 
77 
78 class UnoControlEditModel final : public UnoControlModel
79 {
80     css::uno::Any      ImplGetDefaultValue( sal_uInt16 nPropId ) const override;
81     ::cppu::IPropertyArrayHelper&   SAL_CALL getInfoHelper() override;
82 
83 public:
84                         UnoControlEditModel( const css::uno::Reference< css::uno::XComponentContext >& rxContext );
UnoControlEditModel(const UnoControlEditModel & rModel)85                         UnoControlEditModel( const UnoControlEditModel& rModel ) : UnoControlModel( rModel ) {}
86 
Clone() const87     rtl::Reference<UnoControlModel> Clone() const override { return new UnoControlEditModel( *this ); }
88 
89     // css::io::XPersistObject
90     OUString SAL_CALL getServiceName() override;
91 
92     // css::beans::XMultiPropertySet
93     css::uno::Reference< css::beans::XPropertySetInfo > SAL_CALL getPropertySetInfo(  ) override;
94 
95 
96     // XServiceInfo
97     OUString SAL_CALL getImplementationName() override;
98 
99     css::uno::Sequence<OUString> SAL_CALL getSupportedServiceNames() override;
100 };
101 
102 
103 
104 typedef ::cppu::ImplHelper4  <   css::awt::XTextComponent
105                              ,   css::awt::XTextListener
106                              ,   css::awt::XLayoutConstrains
107                              ,   css::awt::XTextLayoutConstrains
108                              >   UnoEditControl_Base;
109 class UNLESS_MERGELIBS(TOOLKIT_DLLPUBLIC) UnoEditControl    :public UnoControlBase
110                                             ,public UnoEditControl_Base
111 {
112 private:
113     TextListenerMultiplexer maTextListeners;
114 
115     // Not all fields derived from UnoEditCOntrol have the property "Text"
116     // They only support XTextComponent, so keep the text
117     // here, maybe there is no Peer when calling setText()...
118     OUString     maText;
119     sal_uInt16              mnMaxTextLen;
120 
121     bool            mbSetTextInPeer;
122     bool            mbSetMaxTextLenInPeer;
123     bool            mbHasTextProperty;
124 
125 public:
126 
127                                 UnoEditControl();
128     OUString             GetComponentServiceName() override;
129     TextListenerMultiplexer&    GetTextListeners()  { return maTextListeners; }
130 
131     void                        ImplSetPeerProperty( const OUString& rPropName, const css::uno::Any& rVal ) override;
132 
133     void SAL_CALL createPeer( const css::uno::Reference< css::awt::XToolkit >& Toolkit, const css::uno::Reference< css::awt::XWindowPeer >& Parent ) override;
134     void SAL_CALL disposing( const css::lang::EventObject& Source ) override { UnoControlBase::disposing( Source ); }
135     void SAL_CALL dispose(  ) override;
136 
137     // disambiguate XInterface
138     DECLARE_XINTERFACE()
139 
140     // XAggregation
141     css::uno::Any SAL_CALL queryAggregation( const css::uno::Type & rType ) override;
142 
143     // XTypeProvider
144     DECLARE_XTYPEPROVIDER()
145 
146     // XTextListener
147     void SAL_CALL textChanged( const css::awt::TextEvent& rEvent ) override;
148 
149     // XTextComponent
150     void SAL_CALL addTextListener( const css::uno::Reference< css::awt::XTextListener >& l ) override;
151     void SAL_CALL removeTextListener( const css::uno::Reference< css::awt::XTextListener >& l ) override;
152     void SAL_CALL setText( const OUString& aText ) override;
153     void SAL_CALL insertText( const css::awt::Selection& Sel, const OUString& Text ) override;
154     OUString SAL_CALL getText(  ) override;
155     OUString SAL_CALL getSelectedText(  ) override;
156     void SAL_CALL setSelection( const css::awt::Selection& aSelection ) override;
157     css::awt::Selection SAL_CALL getSelection(  ) override;
158     sal_Bool SAL_CALL isEditable(  ) override;
159     void SAL_CALL setEditable( sal_Bool bEditable ) override;
160     void SAL_CALL setMaxTextLen( sal_Int16 nLen ) override;
161     sal_Int16 SAL_CALL getMaxTextLen(  ) override;
162 
163     // XLayoutConstrains
164     css::awt::Size SAL_CALL getMinimumSize(  ) override;
165     css::awt::Size SAL_CALL getPreferredSize(  ) override;
166     css::awt::Size SAL_CALL calcAdjustedSize( const css::awt::Size& aNewSize ) override;
167 
168     // XTextLayoutConstrains
169     css::awt::Size SAL_CALL getMinimumSize( sal_Int16 nCols, sal_Int16 nLines ) override;
170     void SAL_CALL getColumnsAndLines( sal_Int16& nCols, sal_Int16& nLines ) override;
171 
172     // XServiceInfo
173     OUString SAL_CALL getImplementationName(  ) override;
174     css::uno::Sequence< OUString > SAL_CALL getSupportedServiceNames() override;
175 
176     sal_Bool SAL_CALL setModel(const css::uno::Reference< css::awt::XControlModel >& Model) override;
177 };
178 
179 
180 
181 class UnoControlFileControlModel final : public UnoControlModel
182 {
183     css::uno::Any      ImplGetDefaultValue( sal_uInt16 nPropId ) const override;
184     ::cppu::IPropertyArrayHelper& SAL_CALL getInfoHelper() override;
185 
186 public:
187                         UnoControlFileControlModel( const css::uno::Reference< css::uno::XComponentContext >& rxContext );
188                         UnoControlFileControlModel( const UnoControlFileControlModel& rModel ) : UnoControlModel( rModel ) {}
189 
190     rtl::Reference<UnoControlModel> Clone() const override { return new UnoControlFileControlModel( *this ); }
191 
192     // css::io::XPersistObject
193     OUString SAL_CALL getServiceName() override;
194 
195     // css::beans::XMultiPropertySet
196     css::uno::Reference< css::beans::XPropertySetInfo > SAL_CALL getPropertySetInfo(  ) override;
197 
198     // css::lang::XServiceInfo
199     OUString SAL_CALL getImplementationName() override;
200 
201     css::uno::Sequence<OUString> SAL_CALL getSupportedServiceNames() override;
202 };
203 
204 
205 
206 class UnoFileControl final : public UnoEditControl
207 {
208 public:
209                         UnoFileControl();
210     OUString     GetComponentServiceName() override;
211 
212     // css::lang::XServiceInfo
213     OUString SAL_CALL getImplementationName() override;
214 
215     css::uno::Sequence<OUString> SAL_CALL getSupportedServiceNames() override;
216 };
217 
218 
219 
220 class GraphicControlModel : public UnoControlModel
221 {
222 private:
223     bool                                                                                    mbAdjustingImagePosition;
224     bool                                                                                    mbAdjustingGraphic;
225 
226 protected:
227     GraphicControlModel( const css::uno::Reference< css::uno::XComponentContext >& rxContext )
228         :UnoControlModel( rxContext )
229         ,mbAdjustingImagePosition( false )
230         ,mbAdjustingGraphic( false )
231     {
232     }
233     GraphicControlModel( const GraphicControlModel& _rSource ) : UnoControlModel( _rSource ), mbAdjustingImagePosition( false ), mbAdjustingGraphic( false ) { }
234 
235     // ::cppu::OPropertySetHelper
236     void SAL_CALL setFastPropertyValue_NoBroadcast( sal_Int32 nHandle, const css::uno::Any& rValue ) override;
237 
238     // UnoControlModel
239     css::uno::Any ImplGetDefaultValue( sal_uInt16 nPropId ) const override;
240 
241 private:
242         GraphicControlModel& operator=( const GraphicControlModel& ) = delete;
243 };
244 
245 
246 
247 class UnoControlButtonModel final : public GraphicControlModel
248 {
249     css::uno::Any      ImplGetDefaultValue( sal_uInt16 nPropId ) const override;
250     ::cppu::IPropertyArrayHelper& SAL_CALL getInfoHelper() override;
251 
252 public:
253                         UnoControlButtonModel( const css::uno::Reference< css::uno::XComponentContext >& rxContext );
254                         UnoControlButtonModel( const UnoControlButtonModel& rModel ) : GraphicControlModel( rModel ) {}
255 
256     rtl::Reference<UnoControlModel> Clone() const override { return new UnoControlButtonModel( *this ); }
257 
258     // css::beans::XMultiPropertySet
259     css::uno::Reference< css::beans::XPropertySetInfo > SAL_CALL getPropertySetInfo(  ) override;
260 
261     // css::io::XPersistObject
262     OUString SAL_CALL getServiceName() override;
263 
264     // css::lang::XServiceInfo
265     OUString SAL_CALL getImplementationName() override;
266 
267     css::uno::Sequence<OUString> SAL_CALL getSupportedServiceNames() override;
268 };
269 
270 
271 
272 typedef ::cppu::AggImplInheritanceHelper4   <   UnoControlBase
273                                             ,   css::awt::XButton
274                                             ,   css::awt::XToggleButton
275                                             ,   css::awt::XLayoutConstrains
276                                             ,   css::awt::XItemListener
277                                             >   UnoButtonControl_Base;
278 class UnoButtonControl final : public UnoButtonControl_Base
279 {
280 private:
281     ActionListenerMultiplexer   maActionListeners;
282     ItemListenerMultiplexer     maItemListeners;
283     OUString             maActionCommand;
284 
285 public:
286 
287                         UnoButtonControl();
288     OUString     GetComponentServiceName() override;
289 
290     void SAL_CALL createPeer( const css::uno::Reference< css::awt::XToolkit >& Toolkit, const css::uno::Reference< css::awt::XWindowPeer >& Parent ) override;
291     void SAL_CALL dispose(  ) override;
292 
293     // css::awt::XButton
294     void SAL_CALL addActionListener( const css::uno::Reference< css::awt::XActionListener >& l ) override;
295     void SAL_CALL removeActionListener( const css::uno::Reference< css::awt::XActionListener >& l ) override;
296     void SAL_CALL setLabel( const OUString& Label ) override;
297     void SAL_CALL setActionCommand( const OUString& Command ) override;
298 
299     // css::awt::XToggleButton
300     // css::awt::XItemEventBroadcaster
301     void SAL_CALL addItemListener( const css::uno::Reference< css::awt::XItemListener >& l ) override;
302     void SAL_CALL removeItemListener( const css::uno::Reference< css::awt::XItemListener >& l ) override;
303 
304     // css::lang::XEventListener
305     virtual void SAL_CALL disposing( const css::lang::EventObject& Source ) override;
306 
307     // XItemListener
308     virtual void SAL_CALL itemStateChanged( const css::awt::ItemEvent& rEvent ) override;
309 
310     // css::awt::XLayoutConstrains
311     css::awt::Size SAL_CALL getMinimumSize(  ) override;
312     css::awt::Size SAL_CALL getPreferredSize(  ) override;
313     css::awt::Size SAL_CALL calcAdjustedSize( const css::awt::Size& aNewSize ) override;
314 
315     // css::lang::XServiceInfo
316     OUString SAL_CALL getImplementationName() override;
317 
318     css::uno::Sequence<OUString> SAL_CALL getSupportedServiceNames() override;
319 };
320 
321 
322 
323 class UnoControlImageControlModel final : public GraphicControlModel
324 {
325 private:
326     bool    mbAdjustingImageScaleMode;
327 
328     css::uno::Any      ImplGetDefaultValue( sal_uInt16 nPropId ) const override;
329     ::cppu::IPropertyArrayHelper& SAL_CALL getInfoHelper() override;
330 
331 public:
332                                     UnoControlImageControlModel( const css::uno::Reference< css::uno::XComponentContext >& rxContext );
333                                     UnoControlImageControlModel( const UnoControlImageControlModel& rModel ) : GraphicControlModel( rModel ), mbAdjustingImageScaleMode( false ) { }
334 
335     rtl::Reference<UnoControlModel> Clone() const override { return new UnoControlImageControlModel( *this ); }
336 
337     // css::beans::XMultiPropertySet
338     css::uno::Reference< css::beans::XPropertySetInfo > SAL_CALL getPropertySetInfo(  ) override;
339 
340     // css::io::XPersistObject
341     OUString SAL_CALL getServiceName() override;
342 
343     // css::lang::XServiceInfo
344     OUString SAL_CALL getImplementationName() override;
345 
346     css::uno::Sequence<OUString> SAL_CALL getSupportedServiceNames() override;
347 
348     // ::cppu::OPropertySetHelper
349     void SAL_CALL setFastPropertyValue_NoBroadcast( sal_Int32 nHandle, const css::uno::Any& rValue ) override;
350 };
351 
352 
353 
354 typedef ::cppu::AggImplInheritanceHelper1   <   UnoControlBase
355                                             ,   css::awt::XLayoutConstrains
356                                             >   UnoImageControlControl_Base;
357 class UnoImageControlControl final : public UnoImageControlControl_Base
358 {
359 private:
360     ActionListenerMultiplexer   maActionListeners;
361 
362 public:
363 
364                             UnoImageControlControl();
365     OUString         GetComponentServiceName() override;
366 
367     void SAL_CALL dispose(  ) override;
368 
369     // css::awt::XControl
370     sal_Bool SAL_CALL isTransparent(  ) override;
371 
372     // css::awt::XLayoutConstrains
373     css::awt::Size SAL_CALL getMinimumSize(  ) override;
374     css::awt::Size SAL_CALL getPreferredSize(  ) override;
375     css::awt::Size SAL_CALL calcAdjustedSize( const css::awt::Size& aNewSize ) override;
376 
377     // css::lang::XServiceInfo
378     OUString SAL_CALL getImplementationName() override;
379 
380     css::uno::Sequence<OUString> SAL_CALL getSupportedServiceNames() override;
381 };
382 
383 
384 
385 class UnoControlRadioButtonModel final : public GraphicControlModel
386 {
387     css::uno::Any      ImplGetDefaultValue( sal_uInt16 nPropId ) const override;
388     ::cppu::IPropertyArrayHelper&   SAL_CALL getInfoHelper() override;
389 
390 public:
391                         UnoControlRadioButtonModel( const css::uno::Reference< css::uno::XComponentContext >& rxContext );
392                         UnoControlRadioButtonModel( const UnoControlRadioButtonModel& rModel ) : GraphicControlModel( rModel ) {}
393 
394     rtl::Reference<UnoControlModel> Clone() const override { return new UnoControlRadioButtonModel( *this ); }
395 
396     // css::io::XPersistObject
397     OUString SAL_CALL getServiceName() override;
398 
399     // css::beans::XMultiPropertySet
400     css::uno::Reference< css::beans::XPropertySetInfo > SAL_CALL getPropertySetInfo(  ) override;
401 
402     // css::lang::XServiceInfo
403     OUString SAL_CALL getImplementationName() override;
404 
405     css::uno::Sequence<OUString> SAL_CALL getSupportedServiceNames() override;
406 };
407 
408 
409 
410 typedef ::cppu::AggImplInheritanceHelper4   <   UnoControlBase
411                                             ,   css::awt::XButton
412                                             ,   css::awt::XRadioButton
413                                             ,   css::awt::XItemListener
414                                             ,   css::awt::XLayoutConstrains
415                                             >   UnoRadioButtonControl_Base;
416 class UnoRadioButtonControl final : public UnoRadioButtonControl_Base
417 {
418 private:
419     ItemListenerMultiplexer     maItemListeners;
420     ActionListenerMultiplexer   maActionListeners;
421     OUString             maActionCommand;
422 
423 public:
424 
425                             UnoRadioButtonControl();
426     OUString         GetComponentServiceName() override;
427 
428     void SAL_CALL createPeer( const css::uno::Reference< css::awt::XToolkit >& Toolkit, const css::uno::Reference< css::awt::XWindowPeer >& Parent ) override;
429     void SAL_CALL dispose(  ) override;
430     void SAL_CALL disposing( const css::lang::EventObject& Source ) override { UnoControlBase::disposing( Source ); }
431 
432     // css::awt::XControl
433     sal_Bool SAL_CALL isTransparent(  ) override;
434 
435     // css::awt::XButton
436     void SAL_CALL addActionListener( const css::uno::Reference< css::awt::XActionListener >& l ) override;
437     void SAL_CALL removeActionListener( const css::uno::Reference< css::awt::XActionListener >& l ) override;
438     void SAL_CALL setActionCommand( const OUString& Command ) override;
439 
440     // css::awt::XRadioButton
441     void SAL_CALL addItemListener( const css::uno::Reference< css::awt::XItemListener >& l ) override;
442     void SAL_CALL removeItemListener( const css::uno::Reference< css::awt::XItemListener >& l ) override;
443     sal_Bool SAL_CALL getState(  ) override;
444     void SAL_CALL setState( sal_Bool b ) override;
445     void SAL_CALL setLabel( const OUString& Label ) override;
446 
447     // css::awt::XItemListener
448     void SAL_CALL itemStateChanged( const css::awt::ItemEvent& rEvent ) override;
449 
450     // css::awt::XLayoutConstrains
451     css::awt::Size SAL_CALL getMinimumSize(  ) override;
452     css::awt::Size SAL_CALL getPreferredSize(  ) override;
453     css::awt::Size SAL_CALL calcAdjustedSize( const css::awt::Size& aNewSize ) override;
454 
455     // css::lang::XServiceInfo
456     OUString SAL_CALL getImplementationName() override;
457 
458     css::uno::Sequence<OUString> SAL_CALL getSupportedServiceNames() override;
459 };
460 
461 
462 
463 class UnoControlCheckBoxModel final : public GraphicControlModel
464 {
465     css::uno::Any      ImplGetDefaultValue( sal_uInt16 nPropId ) const override;
466     ::cppu::IPropertyArrayHelper&   SAL_CALL getInfoHelper() override;
467 
468 public:
469                         UnoControlCheckBoxModel( const css::uno::Reference< css::uno::XComponentContext >& rxContext );
470                         UnoControlCheckBoxModel( const UnoControlCheckBoxModel& rModel ) : GraphicControlModel( rModel ) {}
471 
472     rtl::Reference<UnoControlModel> Clone() const override { return new UnoControlCheckBoxModel( *this ); }
473 
474     // css::io::XPersistObject
475     OUString SAL_CALL getServiceName() override;
476 
477     // css::beans::XMultiPropertySet
478     css::uno::Reference< css::beans::XPropertySetInfo > SAL_CALL getPropertySetInfo(  ) override;
479 
480     // css::lang::XServiceInfo
481     OUString SAL_CALL getImplementationName() override;
482 
483     css::uno::Sequence<OUString> SAL_CALL getSupportedServiceNames() override;
484 };
485 
486 
487 
488 typedef ::cppu::AggImplInheritanceHelper4   <   UnoControlBase
489                                             ,   css::awt::XButton
490                                             ,   css::awt::XCheckBox
491                                             ,   css::awt::XItemListener
492                                             ,   css::awt::XLayoutConstrains
493                                             >   UnoCheckBoxControl_Base;
494 class UnoCheckBoxControl final : public UnoCheckBoxControl_Base
495 {
496 private:
497     ItemListenerMultiplexer     maItemListeners;
498     ActionListenerMultiplexer   maActionListeners;
499     OUString             maActionCommand;
500 
501 public:
502 
503                             UnoCheckBoxControl();
504     OUString         GetComponentServiceName() override;
505 
506     void SAL_CALL createPeer( const css::uno::Reference< css::awt::XToolkit >& Toolkit, const css::uno::Reference< css::awt::XWindowPeer >& Parent ) override;
507     void SAL_CALL dispose(  ) override;
508     void SAL_CALL disposing( const css::lang::EventObject& Source ) override { UnoControlBase::disposing( Source ); }
509 
510     // css::awt::XControl
511     sal_Bool SAL_CALL isTransparent(  ) override;
512 
513     // css::awt::XButton
514     void SAL_CALL addActionListener( const css::uno::Reference< css::awt::XActionListener >& l ) override;
515     void SAL_CALL removeActionListener( const css::uno::Reference< css::awt::XActionListener >& l ) override;
516     void SAL_CALL setActionCommand( const OUString& Command ) override;
517 
518     virtual void SAL_CALL addItemListener( const css::uno::Reference< css::awt::XItemListener >& l ) override;
519     virtual void SAL_CALL removeItemListener( const css::uno::Reference< css::awt::XItemListener >& l ) override;
520 
521 
522     sal_Int16 SAL_CALL getState(  ) override;
523     void SAL_CALL setState( sal_Int16 n ) override;
524     void SAL_CALL setLabel( const OUString& Label ) override;
525     void SAL_CALL enableTriState( sal_Bool b ) override;
526 
527     // css::awt::XItemListener
528     void SAL_CALL itemStateChanged( const css::awt::ItemEvent& rEvent ) override;
529 
530     // css::awt::XLayoutConstrains
531     css::awt::Size SAL_CALL getMinimumSize(  ) override;
532     css::awt::Size SAL_CALL getPreferredSize(  ) override;
533     css::awt::Size SAL_CALL calcAdjustedSize( const css::awt::Size& aNewSize ) override;
534 
535     // css::lang::XServiceInfo
536     OUString SAL_CALL getImplementationName() override;
537 
538     css::uno::Sequence<OUString> SAL_CALL getSupportedServiceNames() override;
539 };
540 
541 
542 
543 class UnoControlFixedHyperlinkModel final : public UnoControlModel
544 {
545     css::uno::Any      ImplGetDefaultValue( sal_uInt16 nPropId ) const override;
546     ::cppu::IPropertyArrayHelper&   SAL_CALL getInfoHelper() override;
547 
548 public:
549     UnoControlFixedHyperlinkModel( const css::uno::Reference< css::uno::XComponentContext >& rxContext );
550     UnoControlFixedHyperlinkModel( const UnoControlFixedHyperlinkModel& rModel ) : UnoControlModel( rModel ) {}
551 
552     rtl::Reference<UnoControlModel> Clone() const override { return new UnoControlFixedHyperlinkModel( *this ); }
553 
554     // css::io::XPersistObject
555     OUString SAL_CALL getServiceName() override;
556 
557     // css::beans::XMultiPropertySet
558     css::uno::Reference< css::beans::XPropertySetInfo > SAL_CALL getPropertySetInfo(  ) override;
559 
560     // css::lang::XServiceInfo
561     DECLIMPL_SERVICEINFO_DERIVED( UnoControlFixedHyperlinkModel, UnoControlModel, "com.sun.star.awt.UnoControlFixedHyperlinkModel" )
562 };
563 
564 
565 
566 class UnoFixedHyperlinkControl final : public UnoControlBase,
567                                  public css::awt::XFixedHyperlink,
568                                  public css::awt::XLayoutConstrains
569 {
570 private:
571     ActionListenerMultiplexer   maActionListeners;
572 
573 public:
574     UnoFixedHyperlinkControl();
575 
576     OUString     GetComponentServiceName() override;
577 
578     css::uno::Any  SAL_CALL queryInterface( const css::uno::Type & rType ) override { return UnoControlBase::queryInterface(rType); }
579     css::uno::Any  SAL_CALL queryAggregation( const css::uno::Type & rType ) override;
580     void                        SAL_CALL acquire() noexcept override  { OWeakAggObject::acquire(); }
581     void                        SAL_CALL release() noexcept override  { OWeakAggObject::release(); }
582 
583     void SAL_CALL createPeer( const css::uno::Reference< css::awt::XToolkit >& Toolkit, const css::uno::Reference< css::awt::XWindowPeer >& Parent ) override;
584     void SAL_CALL dispose(  ) override;
585 
586     // css::lang::XTypeProvider
587     css::uno::Sequence< css::uno::Type >  SAL_CALL getTypes() override;
588     css::uno::Sequence< sal_Int8 >                     SAL_CALL getImplementationId() override;
589 
590     // css::awt::XControl
591     sal_Bool SAL_CALL isTransparent(  ) override;
592 
593     // css::awt::XFixedHyperlink
594     void SAL_CALL setText( const OUString& Text ) override;
595     OUString SAL_CALL getText(  ) override;
596     void SAL_CALL setURL( const OUString& URL ) override;
597     OUString SAL_CALL getURL(  ) override;
598     void SAL_CALL setAlignment( sal_Int16 nAlign ) override;
599     sal_Int16 SAL_CALL getAlignment(  ) override;
600     void SAL_CALL addActionListener( const css::uno::Reference< css::awt::XActionListener >& l ) override;
601     void SAL_CALL removeActionListener( const css::uno::Reference< css::awt::XActionListener >& l ) override;
602 
603     // css::awt::XLayoutConstrains
604     css::awt::Size SAL_CALL getMinimumSize(  ) override;
605     css::awt::Size SAL_CALL getPreferredSize(  ) override;
606     css::awt::Size SAL_CALL calcAdjustedSize( const css::awt::Size& aNewSize ) override;
607 
608     // css::lang::XServiceInfo
609     DECLIMPL_SERVICEINFO_DERIVED( UnoFixedHyperlinkControl, UnoControlBase, "com.sun.star.awt.UnoControlFixedHyperlink" )
610 };
611 
612 
613 
614 class UnoControlFixedTextModel final : public UnoControlModel
615 {
616     css::uno::Any      ImplGetDefaultValue( sal_uInt16 nPropId ) const override;
617     ::cppu::IPropertyArrayHelper&   SAL_CALL getInfoHelper() override;
618 
619 public:
620                         UnoControlFixedTextModel( const css::uno::Reference< css::uno::XComponentContext >& rxContext );
621                         UnoControlFixedTextModel( const UnoControlFixedTextModel& rModel ) : UnoControlModel( rModel ) {}
622 
623     rtl::Reference<UnoControlModel> Clone() const override { return new UnoControlFixedTextModel( *this ); }
624 
625     // css::io::XPersistObject
626     OUString SAL_CALL getServiceName() override;
627 
628     // css::beans::XMultiPropertySet
629     css::uno::Reference< css::beans::XPropertySetInfo > SAL_CALL getPropertySetInfo(  ) override;
630 
631     // css::lang::XServiceInfo
632     OUString SAL_CALL getImplementationName() override;
633 
634     css::uno::Sequence<OUString> SAL_CALL getSupportedServiceNames() override;
635 };
636 
637 
638 
639 class UnoFixedTextControl final : public UnoControlBase,
640                             public css::awt::XFixedText,
641                             public css::awt::XLayoutConstrains
642 {
643 public:
644                         UnoFixedTextControl();
645     OUString     GetComponentServiceName() override;
646 
647     css::uno::Any  SAL_CALL queryInterface( const css::uno::Type & rType ) override { return UnoControlBase::queryInterface(rType); }
648     css::uno::Any  SAL_CALL queryAggregation( const css::uno::Type & rType ) override;
649     void                        SAL_CALL acquire() noexcept override  { OWeakAggObject::acquire(); }
650     void                        SAL_CALL release() noexcept override  { OWeakAggObject::release(); }
651 
652     // css::lang::XTypeProvider
653     css::uno::Sequence< css::uno::Type >  SAL_CALL getTypes() override;
654     css::uno::Sequence< sal_Int8 >                     SAL_CALL getImplementationId() override;
655 
656     // css::awt::XControl
657     sal_Bool SAL_CALL isTransparent(  ) override;
658 
659     // css::awt::XFixedText
660     void SAL_CALL setText( const OUString& Text ) override;
661     OUString SAL_CALL getText(  ) override;
662     void SAL_CALL setAlignment( sal_Int16 nAlign ) override;
663     sal_Int16 SAL_CALL getAlignment(  ) override;
664 
665     // css::awt::XLayoutConstrains
666     css::awt::Size SAL_CALL getMinimumSize(  ) override;
667     css::awt::Size SAL_CALL getPreferredSize(  ) override;
668     css::awt::Size SAL_CALL calcAdjustedSize( const css::awt::Size& aNewSize ) override;
669 
670     // css::lang::XServiceInfo
671     OUString SAL_CALL getImplementationName() override;
672 
673     css::uno::Sequence<OUString> SAL_CALL getSupportedServiceNames() override;
674 };
675 
676 
677 
678 class UnoControlGroupBoxModel final : public UnoControlModel
679 {
680     css::uno::Any      ImplGetDefaultValue( sal_uInt16 nPropId ) const override;
681     ::cppu::IPropertyArrayHelper&   SAL_CALL getInfoHelper() override;
682 
683 public:
684                         UnoControlGroupBoxModel( const css::uno::Reference< css::uno::XComponentContext >& rxContext );
685                         UnoControlGroupBoxModel( const UnoControlGroupBoxModel& rModel ) : UnoControlModel( rModel ) {}
686 
687     rtl::Reference<UnoControlModel> Clone() const override { return new UnoControlGroupBoxModel( *this ); }
688 
689     // css::io::XPersistObject
690     OUString SAL_CALL getServiceName() override;
691 
692     // css::beans::XMultiPropertySet
693     css::uno::Reference< css::beans::XPropertySetInfo > SAL_CALL getPropertySetInfo(  ) override;
694 
695     // css::lang::XServiceInfo
696     OUString SAL_CALL getImplementationName() override;
697 
698     css::uno::Sequence<OUString> SAL_CALL getSupportedServiceNames() override;
699 };
700 
701 
702 
703 class UnoGroupBoxControl final : public UnoControlBase
704 {
705 public:
706                         UnoGroupBoxControl();
707     OUString     GetComponentServiceName() override;
708 
709     sal_Bool SAL_CALL isTransparent(  ) override;
710 
711     // css::lang::XServiceInfo
712     OUString SAL_CALL getImplementationName() override;
713 
714     css::uno::Sequence<OUString> SAL_CALL getSupportedServiceNames() override;
715 };
716 
717 
718 
719 struct UnoControlListBoxModel_Data;
720 typedef ::cppu::AggImplInheritanceHelper1   <   UnoControlModel
721                                             ,   css::awt::XItemList
722                                             >   UnoControlListBoxModel_Base;
723 class UnoControlListBoxModel : public UnoControlListBoxModel_Base
724 {
725 protected:
726     enum ConstructorMode
727     {
728         ConstructDefault,
729         ConstructWithoutProperties
730     };
731 
732 public:
733                         UnoControlListBoxModel(
734                             const css::uno::Reference< css::uno::XComponentContext >& rxContext,
735                             ConstructorMode const i_mode = ConstructDefault
736                         );
737                         UnoControlListBoxModel( const UnoControlListBoxModel& i_rSource );
738                         virtual ~UnoControlListBoxModel() override;
739 
740     rtl::Reference<UnoControlModel> Clone() const override { return new UnoControlListBoxModel( *this ); }
741 
742     virtual void        ImplNormalizePropertySequence(
743                             const sal_Int32                 _nCount,        /// the number of entries in the arrays
744                             sal_Int32*                      _pHandles,      /// the handles of the properties to set
745                             css::uno::Any*     _pValues,       /// the values of the properties to set
746                             sal_Int32*                      _pValidHandles  /// pointer to the valid handles, allowed to be adjusted
747                         )   const override;
748 
749     // css::beans::XMultiPropertySet
750     css::uno::Reference< css::beans::XPropertySetInfo > SAL_CALL getPropertySetInfo(  ) override;
751 
752     // css::io::XPersistObject
753     OUString SAL_CALL getServiceName() override;
754 
755     // css::lang::XServiceInfo
756     OUString SAL_CALL getImplementationName(  ) override;
757     css::uno::Sequence< OUString > SAL_CALL getSupportedServiceNames() override;
758 
759     // css::awt::XItemList
760     virtual ::sal_Int32 SAL_CALL getItemCount() override;
761     virtual void SAL_CALL insertItem( ::sal_Int32 Position, const OUString& ItemText, const OUString& ItemImageURL ) override;
762     virtual void SAL_CALL insertItemText( ::sal_Int32 Position, const OUString& ItemText ) override;
763     virtual void SAL_CALL insertItemImage( ::sal_Int32 Position, const OUString& ItemImageURL ) override;
764     virtual void SAL_CALL removeItem( ::sal_Int32 Position ) override;
765     virtual void SAL_CALL removeAllItems(  ) override;
766     virtual void SAL_CALL setItemText( ::sal_Int32 Position, const OUString& ItemText ) override;
767     virtual void SAL_CALL setItemImage( ::sal_Int32 Position, const OUString& ItemImageURL ) override;
768     virtual void SAL_CALL setItemTextAndImage( ::sal_Int32 Position, const OUString& ItemText, const OUString& ItemImageURL ) override;
769     virtual void SAL_CALL setItemData( ::sal_Int32 Position, const css::uno::Any& DataValue ) override;
770     virtual OUString SAL_CALL getItemText( ::sal_Int32 Position ) override;
771     virtual OUString SAL_CALL getItemImage( ::sal_Int32 Position ) override;
772     virtual css::beans::Pair< OUString, OUString > SAL_CALL getItemTextAndImage( ::sal_Int32 Position ) override;
773     virtual css::uno::Any SAL_CALL getItemData( ::sal_Int32 Position ) override;
774     virtual css::uno::Sequence< css::beans::Pair< OUString, OUString > > SAL_CALL getAllItems(  ) override;
775     virtual void SAL_CALL addItemListListener( const css::uno::Reference< css::awt::XItemListListener >& Listener ) override;
776     virtual void SAL_CALL removeItemListListener( const css::uno::Reference< css::awt::XItemListListener >& Listener ) override;
777 
778     // OPropertySetHelper
779     void SAL_CALL setFastPropertyValue_NoBroadcast( sal_Int32 nHandle, const css::uno::Any& rValue ) override;
780 
781 protected:
782     css::uno::Any      ImplGetDefaultValue( sal_uInt16 nPropId ) const override;
783     ::cppu::IPropertyArrayHelper&   SAL_CALL getInfoHelper() override;
784 
785 private:
786     void    impl_notifyItemListEvent_nolck(
787                 const sal_Int32 i_nItemPosition,
788                 const ::std::optional< OUString >& i_rItemText,
789                 const ::std::optional< OUString >& i_rItemImageURL,
790                 void ( SAL_CALL css::awt::XItemListListener::*NotificationMethod )( const css::awt::ItemListEvent& )
791             );
792 
793     void    impl_handleInsert(
794                 const sal_Int32 i_nItemPosition,
795                 const ::std::optional< OUString >& i_rItemText,
796                 const ::std::optional< OUString >& i_rItemImageURL,
797                 ::osl::ClearableMutexGuard& i_rClearBeforeNotify
798             );
799 
800     void    impl_handleRemove(
801                 const sal_Int32 i_nItemPosition,
802                 ::osl::ClearableMutexGuard& i_rClearBeforeNotify
803             );
804 
805     void    impl_handleModify(
806                 const sal_Int32 i_nItemPosition,
807                 const ::std::optional< OUString >& i_rItemText,
808                 const ::std::optional< OUString >& i_rItemImageURL,
809                 ::osl::ClearableMutexGuard& i_rClearBeforeNotify
810             );
811 
812     void    impl_getStringItemList( ::std::vector< OUString >& o_rStringItems ) const;
813     void    impl_setStringItemList_nolck( const ::std::vector< OUString >& i_rStringItems );
814 
815 protected:
816     std::unique_ptr<UnoControlListBoxModel_Data>  m_xData;
817     ::comphelper::OInterfaceContainerHelper2             m_aItemListListeners;
818 };
819 
820 
821 
822 typedef ::cppu::AggImplInheritanceHelper5   <   UnoControlBase
823                                             ,   css::awt::XListBox
824                                             ,   css::awt::XItemListener
825                                             ,   css::awt::XLayoutConstrains
826                                             ,   css::awt::XTextLayoutConstrains
827                                             ,   css::awt::XItemListListener
828                                             >   UnoListBoxControl_Base;
829 class UnoListBoxControl final : public UnoListBoxControl_Base
830 {
831 public:
832                         UnoListBoxControl();
833     OUString     GetComponentServiceName() override;
834 
835     void SAL_CALL createPeer( const css::uno::Reference< css::awt::XToolkit >& Toolkit, const css::uno::Reference< css::awt::XWindowPeer >& Parent ) override;
836     void SAL_CALL dispose(  ) override;
837     void SAL_CALL disposing( const css::lang::EventObject& Source ) override { UnoControlBase::disposing( Source ); }
838 
839     // css::awt::XListBox
840     void SAL_CALL addItemListener( const css::uno::Reference< css::awt::XItemListener >& l ) override;
841     void SAL_CALL removeItemListener( const css::uno::Reference< css::awt::XItemListener >& l ) override;
842     void SAL_CALL addActionListener( const css::uno::Reference< css::awt::XActionListener >& l ) override;
843     void SAL_CALL removeActionListener( const css::uno::Reference< css::awt::XActionListener >& l ) override;
844     void SAL_CALL addItem( const OUString& aItem, sal_Int16 nPos ) override;
845     void SAL_CALL addItems( const css::uno::Sequence< OUString >& aItems, sal_Int16 nPos ) override;
846     void SAL_CALL removeItems( sal_Int16 nPos, sal_Int16 nCount ) override;
847     sal_Int16 SAL_CALL getItemCount(  ) override;
848     OUString SAL_CALL getItem( sal_Int16 nPos ) override;
849     css::uno::Sequence< OUString > SAL_CALL getItems(  ) override;
850     sal_Int16 SAL_CALL getSelectedItemPos(  ) override;
851     css::uno::Sequence< sal_Int16 > SAL_CALL getSelectedItemsPos(  ) override;
852     OUString SAL_CALL getSelectedItem(  ) override;
853     css::uno::Sequence< OUString > SAL_CALL getSelectedItems(  ) override;
854     void SAL_CALL selectItemPos( sal_Int16 nPos, sal_Bool bSelect ) override;
855     void SAL_CALL selectItemsPos( const css::uno::Sequence< sal_Int16 >& aPositions, sal_Bool bSelect ) override;
856     void SAL_CALL selectItem( const OUString& aItem, sal_Bool bSelect ) override;
857     sal_Bool SAL_CALL isMutipleMode(  ) override;
858     void SAL_CALL setMultipleMode( sal_Bool bMulti ) override;
859     sal_Int16 SAL_CALL getDropDownLineCount(  ) override;
860     void SAL_CALL setDropDownLineCount( sal_Int16 nLines ) override;
861     void SAL_CALL makeVisible( sal_Int16 nEntry ) override;
862 
863     // css::awt::XItemListener
864     void SAL_CALL itemStateChanged( const css::awt::ItemEvent& rEvent ) override;
865 
866     // css::awt::XLayoutConstrains
867     css::awt::Size SAL_CALL getMinimumSize(  ) override;
868     css::awt::Size SAL_CALL getPreferredSize(  ) override;
869     css::awt::Size SAL_CALL calcAdjustedSize( const css::awt::Size& aNewSize ) override;
870 
871     // css::awt::XTextLayoutConstrains
872     css::awt::Size SAL_CALL getMinimumSize( sal_Int16 nCols, sal_Int16 nLines ) override;
873     void SAL_CALL getColumnsAndLines( sal_Int16& nCols, sal_Int16& nLines ) override;
874 
875     // XUnoControl
876     sal_Bool SAL_CALL setModel(const css::uno::Reference< css::awt::XControlModel >& Model) override;
877 
878     // XItemListListener
879     virtual void SAL_CALL listItemInserted( const css::awt::ItemListEvent& Event ) override;
880     virtual void SAL_CALL listItemRemoved( const css::awt::ItemListEvent& Event ) override;
881     virtual void SAL_CALL listItemModified( const css::awt::ItemListEvent& Event ) override;
882     virtual void SAL_CALL allItemsRemoved( const css::lang::EventObject& Event ) override;
883     virtual void SAL_CALL itemListChanged( const css::lang::EventObject& Event ) override;
884 
885     // css::lang::XServiceInfo
886     OUString SAL_CALL getImplementationName(  ) override;
887     css::uno::Sequence< OUString > SAL_CALL getSupportedServiceNames() override;
888 
889 private:
890     void                ImplUpdateSelectedItemsProperty();
891     virtual void        ImplSetPeerProperty( const OUString& rPropName, const css::uno::Any& rVal ) override;
892     virtual void        updateFromModel() override;
893 
894     ActionListenerMultiplexer   maActionListeners;
895     ItemListenerMultiplexer     maItemListeners;
896 };
897 
898 
899 
900 class UnoControlComboBoxModel final : public UnoControlListBoxModel
901 {
902     css::uno::Any      ImplGetDefaultValue( sal_uInt16 nPropId ) const override;
903     ::cppu::IPropertyArrayHelper&   SAL_CALL getInfoHelper() override;
904 
905 public:
906                         UnoControlComboBoxModel( const css::uno::Reference< css::uno::XComponentContext >& rxContext );
907                         UnoControlComboBoxModel( const UnoControlComboBoxModel& rModel ) : UnoControlListBoxModel( rModel ) {}
908 
909     rtl::Reference<UnoControlModel> Clone() const override { return new UnoControlComboBoxModel( *this ); }
910 
911     // css::io::XPersistObject
912     OUString SAL_CALL getServiceName() override;
913 
914     // css::beans::XMultiPropertySet
915     css::uno::Reference< css::beans::XPropertySetInfo > SAL_CALL getPropertySetInfo(  ) override;
916     // OPropertySetHelper
917     void SAL_CALL setFastPropertyValue_NoBroadcast( sal_Int32 nHandle, const css::uno::Any& rValue ) override;
918 
919     // css::lang::XServiceInfo
920     OUString SAL_CALL getImplementationName(  ) override;
921     css::uno::Sequence< OUString > SAL_CALL getSupportedServiceNames() override;
922 
923 };
924 
925 
926 
927 class UnoComboBoxControl final :  public UnoEditControl
928                         ,   public css::awt::XComboBox
929                         ,   public css::awt::XItemListener
930                         ,   public css::awt::XItemListListener
931 {
932 private:
933     ActionListenerMultiplexer   maActionListeners;
934     ItemListenerMultiplexer     maItemListeners;
935 
936 public:
937 
938                         UnoComboBoxControl();
939     OUString     GetComponentServiceName() override;
940 
941     void SAL_CALL createPeer( const css::uno::Reference< css::awt::XToolkit >& Toolkit, const css::uno::Reference< css::awt::XWindowPeer >& Parent ) override;
942     void SAL_CALL disposing( const css::lang::EventObject& Source ) override { UnoEditControl::disposing( Source ); }
943     void SAL_CALL dispose(  ) override;
944 
945     css::uno::Any  SAL_CALL queryInterface( const css::uno::Type & rType ) override { return UnoEditControl::queryInterface(rType); }
946     css::uno::Any  SAL_CALL queryAggregation( const css::uno::Type & rType ) override;
947     void                        SAL_CALL acquire() noexcept override  { OWeakAggObject::acquire(); }
948     void                        SAL_CALL release() noexcept override  { OWeakAggObject::release(); }
949 
950 
951     // css::lang::XTypeProvider
952     css::uno::Sequence< css::uno::Type >  SAL_CALL getTypes() override;
953     css::uno::Sequence< sal_Int8 >                     SAL_CALL getImplementationId() override;
954 
955     // css::awt::XComboBox
956     void SAL_CALL addItemListener( const css::uno::Reference< css::awt::XItemListener >& l ) override;
957     void SAL_CALL removeItemListener( const css::uno::Reference< css::awt::XItemListener >& l ) override;
958     void SAL_CALL addActionListener( const css::uno::Reference< css::awt::XActionListener >& l ) override;
959     void SAL_CALL removeActionListener( const css::uno::Reference< css::awt::XActionListener >& l ) override;
960     void SAL_CALL addItem( const OUString& aItem, sal_Int16 nPos ) override;
961     void SAL_CALL addItems( const css::uno::Sequence< OUString >& aItems, sal_Int16 nPos ) override;
962     void SAL_CALL removeItems( sal_Int16 nPos, sal_Int16 nCount ) override;
963     sal_Int16 SAL_CALL getItemCount(  ) override;
964     OUString SAL_CALL getItem( sal_Int16 nPos ) override;
965     css::uno::Sequence< OUString > SAL_CALL getItems(  ) override;
966     sal_Int16 SAL_CALL getDropDownLineCount(  ) override;
967     void SAL_CALL setDropDownLineCount( sal_Int16 nLines ) override;
968 
969     // XUnoControl
970     virtual sal_Bool SAL_CALL setModel(const css::uno::Reference< css::awt::XControlModel >& Model) override;
971 
972     // XItemListListener
973     virtual void SAL_CALL listItemInserted( const css::awt::ItemListEvent& Event ) override;
974     virtual void SAL_CALL listItemRemoved( const css::awt::ItemListEvent& Event ) override;
975     virtual void SAL_CALL listItemModified( const css::awt::ItemListEvent& Event ) override;
976     virtual void SAL_CALL allItemsRemoved( const css::lang::EventObject& Event ) override;
977     virtual void SAL_CALL itemListChanged( const css::lang::EventObject& Event ) override;
978 
979     // XItemListener
980     virtual void SAL_CALL itemStateChanged( const css::awt::ItemEvent& rEvent ) override;
981 
982     // css::lang::XServiceInfo
983     OUString SAL_CALL getImplementationName(  ) override;
984     css::uno::Sequence< OUString > SAL_CALL getSupportedServiceNames() override;
985 private:
986     virtual void        ImplSetPeerProperty( const OUString& rPropName, const css::uno::Any& rVal ) override;
987     virtual void        updateFromModel() override;
988 
989 };
990 
991 
992 
993 class UnoSpinFieldControl : public UnoEditControl,
994                             public css::awt::XSpinField
995 {
996 private:
997     SpinListenerMultiplexer     maSpinListeners;
998     bool                        mbRepeat;
999 
1000 public:
1001                                 UnoSpinFieldControl();
1002 
1003     css::uno::Any  SAL_CALL queryInterface( const css::uno::Type & rType ) override { return UnoEditControl::queryInterface(rType); }
1004     css::uno::Any  SAL_CALL queryAggregation( const css::uno::Type & rType ) override;
1005     void                        SAL_CALL acquire() noexcept override  { OWeakAggObject::acquire(); }
1006     void                        SAL_CALL release() noexcept override  { OWeakAggObject::release(); }
1007 
1008     // css::lang::XTypeProvider
1009     css::uno::Sequence< css::uno::Type >  SAL_CALL getTypes() override;
1010     css::uno::Sequence< sal_Int8 >                     SAL_CALL getImplementationId() override;
1011 
1012     void SAL_CALL createPeer( const css::uno::Reference< css::awt::XToolkit >& Toolkit, const css::uno::Reference< css::awt::XWindowPeer >& Parent ) override;
1013 
1014     // css::awt::XSpinField
1015     void SAL_CALL addSpinListener( const css::uno::Reference< css::awt::XSpinListener >& l ) override;
1016     void SAL_CALL removeSpinListener( const css::uno::Reference< css::awt::XSpinListener >& l ) override;
1017     void SAL_CALL up() override;
1018     void SAL_CALL down() override;
1019     void SAL_CALL first() override;
1020     void SAL_CALL last() override;
1021     void SAL_CALL enableRepeat( sal_Bool bRepeat ) override;
1022 
1023 
1024     // css::lang::XServiceInfo
1025     // No service info, only base class for other fields.
1026 };
1027 
1028 
1029 
1030 class UnoControlDateFieldModel final : public UnoControlModel
1031 {
1032     css::uno::Any      ImplGetDefaultValue( sal_uInt16 nPropId ) const override;
1033     ::cppu::IPropertyArrayHelper&   SAL_CALL getInfoHelper() override;
1034 
1035 public:
1036                 UnoControlDateFieldModel( const css::uno::Reference< css::uno::XComponentContext >& rxContext );
1037                 UnoControlDateFieldModel( const UnoControlDateFieldModel& rModel ) : UnoControlModel( rModel ) {}
1038 
1039     rtl::Reference<UnoControlModel> Clone() const override { return new UnoControlDateFieldModel( *this ); }
1040 
1041     // css::io::XPersistObject
1042     OUString SAL_CALL getServiceName() override;
1043 
1044     // css::beans::XMultiPropertySet
1045     css::uno::Reference< css::beans::XPropertySetInfo > SAL_CALL getPropertySetInfo(  ) override;
1046 
1047     // css::lang::XServiceInfo
1048     OUString SAL_CALL getImplementationName() override;
1049 
1050     css::uno::Sequence<OUString> SAL_CALL getSupportedServiceNames() override;
1051 };
1052 
1053 
1054 
1055 class UnoDateFieldControl final : public UnoSpinFieldControl,
1056                             public css::awt::XDateField
1057 {
1058 private:
1059     css::util::Date       mnFirst;
1060     css::util::Date       mnLast;
1061     TriState         mbLongFormat;
1062 public:
1063                             UnoDateFieldControl();
1064     OUString         GetComponentServiceName() override;
1065 
1066     css::uno::Any  SAL_CALL queryInterface( const css::uno::Type & rType ) override { return UnoSpinFieldControl::queryInterface(rType); }
1067     css::uno::Any  SAL_CALL queryAggregation( const css::uno::Type & rType ) override;
1068     void                        SAL_CALL acquire() noexcept override  { OWeakAggObject::acquire(); }
1069     void                        SAL_CALL release() noexcept override  { OWeakAggObject::release(); }
1070 
1071     // css::lang::XTypeProvider
1072     css::uno::Sequence< css::uno::Type >  SAL_CALL getTypes() override;
1073     css::uno::Sequence< sal_Int8 >                     SAL_CALL getImplementationId() override;
1074 
1075     void SAL_CALL createPeer( const css::uno::Reference< css::awt::XToolkit >& Toolkit, const css::uno::Reference< css::awt::XWindowPeer >& Parent ) override;
1076 
1077     // css::awt::XTextListener
1078     void SAL_CALL textChanged( const css::awt::TextEvent& rEvent ) override;
1079 
1080     //XDateField
1081     void SAL_CALL setDate( const css::util::Date& Date ) override;
1082     css::util::Date SAL_CALL getDate(  ) override;
1083     void SAL_CALL setMin( const css::util::Date& Date ) override;
1084     css::util::Date SAL_CALL getMin(  ) override;
1085     void SAL_CALL setMax( const css::util::Date& Date ) override;
1086     css::util::Date SAL_CALL getMax(  ) override;
1087     void SAL_CALL setFirst( const css::util::Date& Date ) override;
1088     css::util::Date SAL_CALL getFirst(  ) override;
1089     void SAL_CALL setLast( const css::util::Date& Date ) override;
1090     css::util::Date SAL_CALL getLast(  ) override;
1091     void SAL_CALL setLongFormat( sal_Bool bLong ) override;
1092     sal_Bool SAL_CALL isLongFormat(  ) override;
1093     void SAL_CALL setEmpty(  ) override;
1094     sal_Bool SAL_CALL isEmpty(  ) override;
1095     void SAL_CALL setStrictFormat( sal_Bool bStrict ) override;
1096     sal_Bool SAL_CALL isStrictFormat(  ) override;
1097 
1098     // css::lang::XServiceInfo
1099     OUString SAL_CALL getImplementationName() override;
1100 
1101     css::uno::Sequence<OUString> SAL_CALL getSupportedServiceNames() override;
1102 };
1103 
1104 
1105 
1106 class UnoControlTimeFieldModel final : public UnoControlModel
1107 {
1108     css::uno::Any      ImplGetDefaultValue( sal_uInt16 nPropId ) const override;
1109     ::cppu::IPropertyArrayHelper&   SAL_CALL getInfoHelper() override;
1110 
1111 public:
1112                         UnoControlTimeFieldModel( const css::uno::Reference< css::uno::XComponentContext >& rxContext );
1113                         UnoControlTimeFieldModel( const UnoControlTimeFieldModel& rModel ) : UnoControlModel( rModel ) {}
1114 
1115     rtl::Reference<UnoControlModel> Clone() const override { return new UnoControlTimeFieldModel( *this ); }
1116 
1117     // css::io::XPersistObject
1118     OUString SAL_CALL getServiceName() override;
1119 
1120     // css::beans::XMultiPropertySet
1121     css::uno::Reference< css::beans::XPropertySetInfo > SAL_CALL getPropertySetInfo(  ) override;
1122 
1123     // css::lang::XServiceInfo
1124     OUString SAL_CALL getImplementationName() override;
1125 
1126     css::uno::Sequence<OUString> SAL_CALL getSupportedServiceNames() override;
1127 };
1128 
1129 
1130 
1131 class UnoTimeFieldControl final : public UnoSpinFieldControl,
1132                             public css::awt::XTimeField
1133 {
1134 private:
1135     css::util::Time       mnFirst;
1136     css::util::Time       mnLast;
1137 
1138 public:
1139                         UnoTimeFieldControl();
1140     OUString     GetComponentServiceName() override;
1141 
1142     css::uno::Any  SAL_CALL queryInterface( const css::uno::Type & rType ) override { return UnoSpinFieldControl::queryInterface(rType); }
1143     css::uno::Any  SAL_CALL queryAggregation( const css::uno::Type & rType ) override;
1144     void                        SAL_CALL acquire() noexcept override  { OWeakAggObject::acquire(); }
1145     void                        SAL_CALL release() noexcept override  { OWeakAggObject::release(); }
1146 
1147     // css::lang::XTypeProvider
1148     css::uno::Sequence< css::uno::Type >  SAL_CALL getTypes() override;
1149     css::uno::Sequence< sal_Int8 >                     SAL_CALL getImplementationId() override;
1150 
1151     void SAL_CALL createPeer( const css::uno::Reference< css::awt::XToolkit >& Toolkit, const css::uno::Reference< css::awt::XWindowPeer >& Parent ) override;
1152 
1153     // css::awt::XTextListener
1154     void SAL_CALL textChanged( const css::awt::TextEvent& rEvent ) override;
1155 
1156     //XTimeField
1157     void SAL_CALL setTime( const css::util::Time& Time ) override;
1158     css::util::Time SAL_CALL getTime(  ) override;
1159     void SAL_CALL setMin( const css::util::Time& Time ) override;
1160     css::util::Time SAL_CALL getMin(  ) override;
1161     void SAL_CALL setMax( const css::util::Time& Time ) override;
1162     css::util::Time SAL_CALL getMax(  ) override;
1163     void SAL_CALL setFirst( const css::util::Time& Time ) override;
1164     css::util::Time SAL_CALL getFirst(  ) override;
1165     void SAL_CALL setLast( const css::util::Time& Time ) override;
1166     css::util::Time SAL_CALL getLast(  ) override;
1167     void SAL_CALL setEmpty(  ) override;
1168     sal_Bool SAL_CALL isEmpty(  ) override;
1169     void SAL_CALL setStrictFormat( sal_Bool bStrict ) override;
1170     sal_Bool SAL_CALL isStrictFormat(  ) override;
1171 
1172     // css::lang::XServiceInfo
1173     OUString SAL_CALL getImplementationName() override;
1174 
1175     css::uno::Sequence<OUString> SAL_CALL getSupportedServiceNames() override;
1176 };
1177 
1178 
1179 
1180 class UnoControlNumericFieldModel final : public UnoControlModel
1181 {
1182     css::uno::Any      ImplGetDefaultValue( sal_uInt16 nPropId ) const override;
1183     ::cppu::IPropertyArrayHelper&   SAL_CALL getInfoHelper() override;
1184 
1185 public:
1186                 UnoControlNumericFieldModel( const css::uno::Reference< css::uno::XComponentContext >& rxContext );
1187                 UnoControlNumericFieldModel( const UnoControlNumericFieldModel& rModel ) : UnoControlModel( rModel ) {}
1188 
1189     rtl::Reference<UnoControlModel> Clone() const override { return new UnoControlNumericFieldModel( *this ); }
1190 
1191     // css::io::XPersistObject
1192     OUString SAL_CALL getServiceName() override;
1193 
1194     // css::beans::XMultiPropertySet
1195     css::uno::Reference< css::beans::XPropertySetInfo > SAL_CALL getPropertySetInfo(  ) override;
1196 
1197     // css::lang::XServiceInfo
1198     OUString SAL_CALL getImplementationName() override;
1199 
1200     css::uno::Sequence<OUString> SAL_CALL getSupportedServiceNames() override;
1201 };
1202 
1203 
1204 
1205 class UnoNumericFieldControl final : public UnoSpinFieldControl,
1206                                 public css::awt::XNumericField
1207 {
1208 private:
1209     double mnFirst;
1210     double mnLast;
1211 
1212 public:
1213                         UnoNumericFieldControl();
1214     OUString     GetComponentServiceName() override;
1215 
1216     css::uno::Any  SAL_CALL queryInterface( const css::uno::Type & rType ) override { return UnoSpinFieldControl::queryInterface(rType); }
1217     css::uno::Any  SAL_CALL queryAggregation( const css::uno::Type & rType ) override;
1218     void                        SAL_CALL acquire() noexcept override  { OWeakAggObject::acquire(); }
1219     void                        SAL_CALL release() noexcept override  { OWeakAggObject::release(); }
1220 
1221     void SAL_CALL createPeer( const css::uno::Reference< css::awt::XToolkit >& Toolkit, const css::uno::Reference< css::awt::XWindowPeer >& Parent ) override;
1222 
1223     // css::lang::XTypeProvider
1224     css::uno::Sequence< css::uno::Type >  SAL_CALL getTypes() override;
1225     css::uno::Sequence< sal_Int8 >                     SAL_CALL getImplementationId() override;
1226 
1227     // css::awt::XTextListener
1228     void SAL_CALL textChanged( const css::awt::TextEvent& rEvent ) override;
1229 
1230     // css::awt::XNumericField
1231     void SAL_CALL setValue( double Value ) override;
1232     double SAL_CALL getValue(  ) override;
1233     void SAL_CALL setMin( double Value ) override;
1234     double SAL_CALL getMin(  ) override;
1235     void SAL_CALL setMax( double Value ) override;
1236     double SAL_CALL getMax(  ) override;
1237     void SAL_CALL setFirst( double Value ) override;
1238     double SAL_CALL getFirst(  ) override;
1239     void SAL_CALL setLast( double Value ) override;
1240     double SAL_CALL getLast(  ) override;
1241     void SAL_CALL setSpinSize( double Value ) override;
1242     double SAL_CALL getSpinSize(  ) override;
1243     void SAL_CALL setDecimalDigits( sal_Int16 nDigits ) override;
1244     sal_Int16 SAL_CALL getDecimalDigits(  ) override;
1245     void SAL_CALL setStrictFormat( sal_Bool bStrict ) override;
1246     sal_Bool SAL_CALL isStrictFormat(  ) override;
1247 
1248     // css::lang::XServiceInfo
1249     OUString SAL_CALL getImplementationName() override;
1250 
1251     css::uno::Sequence<OUString> SAL_CALL getSupportedServiceNames() override;
1252 };
1253 
1254 
1255 
1256 class UnoControlCurrencyFieldModel final : public UnoControlModel
1257 {
1258     css::uno::Any      ImplGetDefaultValue( sal_uInt16 nPropId ) const override;
1259     ::cppu::IPropertyArrayHelper&   SAL_CALL getInfoHelper() override;
1260 
1261 public:
1262                         UnoControlCurrencyFieldModel( const css::uno::Reference< css::uno::XComponentContext >& rxContext );
1263                         UnoControlCurrencyFieldModel( const UnoControlCurrencyFieldModel& rModel ) : UnoControlModel( rModel ) {}
1264 
1265     rtl::Reference<UnoControlModel> Clone() const override { return new UnoControlCurrencyFieldModel( *this ); }
1266 
1267     // css::io::XPersistObject
1268     OUString SAL_CALL getServiceName() override;
1269 
1270     // css::beans::XMultiPropertySet
1271     css::uno::Reference< css::beans::XPropertySetInfo > SAL_CALL getPropertySetInfo(  ) override;
1272 
1273     // css::lang::XServiceInfo
1274     OUString SAL_CALL getImplementationName() override;
1275 
1276     css::uno::Sequence<OUString> SAL_CALL getSupportedServiceNames() override;
1277 };
1278 
1279 
1280 
1281 class UnoCurrencyFieldControl final : public UnoSpinFieldControl,
1282                                 public css::awt::XCurrencyField
1283 {
1284 private:
1285     double mnFirst;
1286     double mnLast;
1287 
1288 public:
1289                         UnoCurrencyFieldControl();
1290     OUString     GetComponentServiceName() override;
1291 
1292     css::uno::Any  SAL_CALL queryInterface( const css::uno::Type & rType ) override { return UnoSpinFieldControl::queryInterface(rType); }
1293     css::uno::Any  SAL_CALL queryAggregation( const css::uno::Type & rType ) override;
1294     void                        SAL_CALL acquire() noexcept override  { OWeakAggObject::acquire(); }
1295     void                        SAL_CALL release() noexcept override  { OWeakAggObject::release(); }
1296 
1297     void SAL_CALL createPeer( const css::uno::Reference< css::awt::XToolkit >& Toolkit, const css::uno::Reference< css::awt::XWindowPeer >& Parent ) override;
1298 
1299     // css::lang::XTypeProvider
1300     css::uno::Sequence< css::uno::Type >  SAL_CALL getTypes() override;
1301     css::uno::Sequence< sal_Int8 >                     SAL_CALL getImplementationId() override;
1302 
1303     // css::awt::XTextListener
1304     void SAL_CALL textChanged( const css::awt::TextEvent& rEvent ) override;
1305 
1306     // css::awt::XCurrencyField
1307     void SAL_CALL setValue( double Value ) override;
1308     double SAL_CALL getValue(  ) override;
1309     void SAL_CALL setMin( double Value ) override;
1310     double SAL_CALL getMin(  ) override;
1311     void SAL_CALL setMax( double Value ) override;
1312     double SAL_CALL getMax(  ) override;
1313     void SAL_CALL setFirst( double Value ) override;
1314     double SAL_CALL getFirst(  ) override;
1315     void SAL_CALL setLast( double Value ) override;
1316     double SAL_CALL getLast(  ) override;
1317     void SAL_CALL setSpinSize( double Value ) override;
1318     double SAL_CALL getSpinSize(  ) override;
1319     void SAL_CALL setDecimalDigits( sal_Int16 nDigits ) override;
1320     sal_Int16 SAL_CALL getDecimalDigits(  ) override;
1321     void SAL_CALL setStrictFormat( sal_Bool bStrict ) override;
1322     sal_Bool SAL_CALL isStrictFormat(  ) override;
1323 
1324     // css::lang::XServiceInfo
1325     OUString SAL_CALL getImplementationName() override;
1326 
1327     css::uno::Sequence<OUString> SAL_CALL getSupportedServiceNames() override;
1328 };
1329 
1330 
1331 
1332 class UnoControlPatternFieldModel final : public UnoControlModel
1333 {
1334     css::uno::Any      ImplGetDefaultValue( sal_uInt16 nPropId ) const override;
1335     ::cppu::IPropertyArrayHelper&   SAL_CALL getInfoHelper() override;
1336 
1337 public:
1338                         UnoControlPatternFieldModel( const css::uno::Reference< css::uno::XComponentContext >& rxContext );
1339                         UnoControlPatternFieldModel( const UnoControlPatternFieldModel& rModel ) : UnoControlModel( rModel ) {}
1340 
1341     rtl::Reference<UnoControlModel> Clone() const override { return new UnoControlPatternFieldModel( *this ); }
1342 
1343     // css::io::XPersistObject
1344     OUString SAL_CALL getServiceName() override;
1345 
1346     // css::beans::XMultiPropertySet
1347     css::uno::Reference< css::beans::XPropertySetInfo > SAL_CALL getPropertySetInfo(  ) override;
1348 
1349     // css::lang::XServiceInfo
1350     OUString SAL_CALL getImplementationName() override;
1351 
1352     css::uno::Sequence<OUString> SAL_CALL getSupportedServiceNames() override;
1353 };
1354 
1355 
1356 
1357 class UnoPatternFieldControl final : public UnoSpinFieldControl,
1358                                 public css::awt::XPatternField
1359 {
1360     void            ImplSetPeerProperty( const OUString& rPropName, const css::uno::Any& rVal ) override;
1361 
1362 public:
1363                         UnoPatternFieldControl();
1364     OUString     GetComponentServiceName() override;
1365 
1366     css::uno::Any  SAL_CALL queryInterface( const css::uno::Type & rType ) override { return UnoSpinFieldControl::queryInterface(rType); }
1367     css::uno::Any  SAL_CALL queryAggregation( const css::uno::Type & rType ) override;
1368     void                        SAL_CALL acquire() noexcept override  { OWeakAggObject::acquire(); }
1369     void                        SAL_CALL release() noexcept override  { OWeakAggObject::release(); }
1370 
1371     // css::lang::XTypeProvider
1372     css::uno::Sequence< css::uno::Type >  SAL_CALL getTypes() override;
1373     css::uno::Sequence< sal_Int8 >                     SAL_CALL getImplementationId() override;
1374 
1375     // css::awt::XPatternField
1376     void SAL_CALL setMasks( const OUString& EditMask, const OUString& LiteralMask ) override;
1377     void SAL_CALL getMasks( OUString& EditMask, OUString& LiteralMask ) override;
1378     void SAL_CALL setString( const OUString& Str ) override;
1379     OUString SAL_CALL getString(  ) override;
1380     void SAL_CALL setStrictFormat( sal_Bool bStrict ) override;
1381     sal_Bool SAL_CALL isStrictFormat(  ) override;
1382 
1383     // css::lang::XServiceInfo
1384     OUString SAL_CALL getImplementationName() override;
1385 
1386     css::uno::Sequence<OUString> SAL_CALL getSupportedServiceNames() override;
1387 };
1388 
1389 
1390 
1391 class UnoControlProgressBarModel final : public UnoControlModel
1392 {
1393     css::uno::Any      ImplGetDefaultValue( sal_uInt16 nPropId ) const override;
1394     ::cppu::IPropertyArrayHelper&   SAL_CALL getInfoHelper() override;
1395 
1396 public:
1397                         UnoControlProgressBarModel( const css::uno::Reference< css::uno::XComponentContext >& rxContext );
1398                         UnoControlProgressBarModel( const UnoControlProgressBarModel& rModel ) : UnoControlModel( rModel ) {}
1399 
1400     rtl::Reference<UnoControlModel> Clone() const override { return new UnoControlProgressBarModel( *this ); }
1401 
1402     // css::beans::XMultiPropertySet
1403     css::uno::Reference< css::beans::XPropertySetInfo > SAL_CALL getPropertySetInfo(  ) override;
1404 
1405     // css::io::XPersistObject
1406     OUString SAL_CALL getServiceName() override;
1407 
1408     // XServiceInfo
1409     OUString SAL_CALL getImplementationName() override;
1410 
1411     css::uno::Sequence<OUString> SAL_CALL getSupportedServiceNames() override;
1412 };
1413 
1414 
1415 
1416 class UnoProgressBarControl final : public UnoControlBase,
1417                                 public css::awt::XProgressBar
1418 {
1419 public:
1420                                 UnoProgressBarControl();
1421     OUString             GetComponentServiceName() override;
1422 
1423     css::uno::Any  SAL_CALL queryInterface( const css::uno::Type & rType ) override { return UnoControlBase::queryInterface(rType); }
1424     css::uno::Any  SAL_CALL queryAggregation( const css::uno::Type & rType ) override;
1425     void                        SAL_CALL acquire() noexcept override  { OWeakAggObject::acquire(); }
1426     void                        SAL_CALL release() noexcept override  { OWeakAggObject::release(); }
1427 
1428     // css::lang::XTypeProvider
1429     css::uno::Sequence< css::uno::Type >  SAL_CALL getTypes() override;
1430     css::uno::Sequence< sal_Int8 >                     SAL_CALL getImplementationId() override;
1431 
1432     // css::awt::XProgressBar
1433     void SAL_CALL setForegroundColor( sal_Int32 nColor ) override;
1434     void SAL_CALL setBackgroundColor( sal_Int32 nColor ) override;
1435     void SAL_CALL setValue( sal_Int32 nValue ) override;
1436     void SAL_CALL setRange( sal_Int32 nMin, sal_Int32 nMax ) override;
1437     sal_Int32 SAL_CALL getValue() override;
1438 
1439     // css::lang::XServiceInfo
1440     OUString SAL_CALL getImplementationName() override;
1441 
1442     css::uno::Sequence<OUString> SAL_CALL getSupportedServiceNames() override;
1443 };
1444 
1445 
1446 
1447 class UnoControlFixedLineModel final : public UnoControlModel
1448 {
1449     css::uno::Any      ImplGetDefaultValue( sal_uInt16 nPropId ) const override;
1450     ::cppu::IPropertyArrayHelper&   SAL_CALL getInfoHelper() override;
1451 
1452 public:
1453                         UnoControlFixedLineModel( const css::uno::Reference< css::uno::XComponentContext >& rxContext );
1454                         UnoControlFixedLineModel( const UnoControlFixedLineModel& rModel ) : UnoControlModel( rModel ) {}
1455 
1456     rtl::Reference<UnoControlModel> Clone() const override { return new UnoControlFixedLineModel( *this ); }
1457 
1458     // css::beans::XMultiPropertySet
1459     css::uno::Reference< css::beans::XPropertySetInfo > SAL_CALL getPropertySetInfo(  ) override;
1460 
1461     // css::io::XPersistObject
1462     OUString SAL_CALL getServiceName() override;
1463 
1464     // css::lang::XServiceInfo
1465     OUString SAL_CALL getImplementationName() override;
1466 
1467     css::uno::Sequence<OUString> SAL_CALL getSupportedServiceNames() override;
1468 };
1469 
1470 
1471 
1472 class UnoFixedLineControl final : public UnoControlBase
1473 {
1474 public:
1475                         UnoFixedLineControl();
1476     OUString     GetComponentServiceName() override;
1477 
1478     sal_Bool SAL_CALL isTransparent(  ) override;
1479 
1480     // css::lang::XServiceInfo
1481     OUString SAL_CALL getImplementationName() override;
1482 
1483     css::uno::Sequence<OUString> SAL_CALL getSupportedServiceNames() override;
1484 };
1485 
1486 
1487 #endif // INCLUDED_TOOLKIT_CONTROLS_UNOCONTROLS_HXX
1488 
1489 /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
1490