1 /*************************************************************************
3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
5 * Copyright 2008 by Sun Microsystems, Inc.
7 * OpenOffice.org - a multi-platform office productivity suite
9 * $RCSfile: standardcontrol.hxx,v $
12 * This file is part of OpenOffice.org.
14 * OpenOffice.org is free software: you can redistribute it and/or modify
15 * it under the terms of the GNU Lesser General Public License version 3
16 * only, as published by the Free Software Foundation.
18 * OpenOffice.org is distributed in the hope that it will be useful,
19 * but WITHOUT ANY WARRANTY; without even the implied warranty of
20 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
21 * GNU Lesser General Public License version 3 for more details
22 * (a copy is included in the LICENSE file that accompanied this code).
24 * You should have received a copy of the GNU Lesser General Public License
25 * version 3 along with OpenOffice.org. If not, see
26 * <http://www.openoffice.org/license.html>
27 * for a copy of the LGPLv3 License.
29 ************************************************************************/
31 #ifndef _EXTENSIONS_PROPCTRLR_STANDARDCONTROL_HXX_
32 #define _EXTENSIONS_PROPCTRLR_STANDARDCONTROL_HXX_
34 #include "commoncontrol.hxx"
35 #include "pcrcommon.hxx"
37 /** === begin UNO includes === **/
38 #include <com/sun/star/inspection/XNumericControl.hpp>
39 #include <com/sun/star/inspection/XStringListControl.hpp>
40 #include <com/sun/star/inspection/XHyperlinkControl.hpp>
41 #include <com/sun/star/uno/Sequence.hxx>
42 /** === end UNO includes === **/
43 #include <vcl/field.hxx>
44 #include <vcl/longcurr.hxx>
45 #include <svtools/ctrlbox.hxx>
46 #include <vcl/lstbox.hxx>
47 #include <vcl/combobox.hxx>
48 #include <svtools/calendar.hxx>
49 #include <svtools/fmtfield.hxx>
55 //............................................................................
58 //............................................................................
60 //========================================================================
61 //= ListLikeControlWithModifyHandler
62 //========================================================================
63 /** Very small helper class which adds a SetModifyHdl to a ListBox-derived class,
64 thus giving this class the same API (as far as the CommonBehaviourControl is concerned)
67 template< class LISTBOX_WINDOW
>
68 class ListLikeControlWithModifyHandler
: public ControlWindow
< LISTBOX_WINDOW
>
71 typedef ControlWindow
< LISTBOX_WINDOW
> ListBoxType
;
74 ListLikeControlWithModifyHandler( Window
* _pParent
, WinBits _nStyle
)
75 :ListBoxType( _pParent
, _nStyle
)
79 void SetModifyHdl( const Link
& _rLink
) { ListBoxType::SetSelectHdl( _rLink
); }
82 long PreNotify( NotifyEvent
& _rNEvt
);
85 //------------------------------------------------------------------------
86 template< class LISTBOX_WINDOW
>
87 long ListLikeControlWithModifyHandler
< LISTBOX_WINDOW
>::PreNotify( NotifyEvent
& _rNEvt
)
89 if ( _rNEvt
.GetType() == EVENT_KEYINPUT
)
91 const ::KeyEvent
* pKeyEvent
= _rNEvt
.GetKeyEvent();
92 if ( ( pKeyEvent
->GetKeyCode().GetModifier() == 0 )
93 && ( ( pKeyEvent
->GetKeyCode().GetCode() == KEY_PAGEUP
)
94 || ( pKeyEvent
->GetKeyCode().GetCode() == KEY_PAGEDOWN
)
98 if ( !ListBoxType::IsInDropDown() )
100 // don't give the base class a chance to consume the event, in the property browser, it is
101 // intended to scroll the complete property page
102 return ListBoxType::GetParent()->PreNotify( _rNEvt
);
106 return ListBoxType::PreNotify( _rNEvt
);
109 //========================================================================
111 //========================================================================
112 typedef CommonBehaviourControl
< ::com::sun::star::inspection::XPropertyControl
, ControlWindow
< TimeField
> > OTimeControl_Base
;
113 class OTimeControl
: public OTimeControl_Base
116 OTimeControl( Window
* pParent
, WinBits nWinStyle
);
119 virtual ::com::sun::star::uno::Any SAL_CALL
getValue() throw (::com::sun::star::uno::RuntimeException
);
120 virtual void SAL_CALL
setValue( const ::com::sun::star::uno::Any
& _value
) throw (::com::sun::star::beans::IllegalTypeException
, ::com::sun::star::uno::RuntimeException
);
121 virtual ::com::sun::star::uno::Type SAL_CALL
getValueType() throw (::com::sun::star::uno::RuntimeException
);
124 //========================================================================
126 //========================================================================
127 typedef CommonBehaviourControl
< ::com::sun::star::inspection::XPropertyControl
, ControlWindow
< CalendarField
> > ODateControl_Base
;
128 class ODateControl
: public ODateControl_Base
131 ODateControl( Window
* pParent
, WinBits nWinStyle
);
134 virtual ::com::sun::star::uno::Any SAL_CALL
getValue() throw (::com::sun::star::uno::RuntimeException
);
135 virtual void SAL_CALL
setValue( const ::com::sun::star::uno::Any
& _value
) throw (::com::sun::star::beans::IllegalTypeException
, ::com::sun::star::uno::RuntimeException
);
136 virtual ::com::sun::star::uno::Type SAL_CALL
getValueType() throw (::com::sun::star::uno::RuntimeException
);
139 //========================================================================
141 //========================================================================
142 typedef CommonBehaviourControl
< ::com::sun::star::inspection::XPropertyControl
, ControlWindow
< Edit
> > OEditControl_Base
;
143 class OEditControl
: public OEditControl_Base
146 sal_Bool m_bIsPassword
: 1;
149 OEditControl( Window
* _pParent
, sal_Bool _bPassWord
, WinBits nWinStyle
);
152 virtual ::com::sun::star::uno::Any SAL_CALL
getValue() throw (::com::sun::star::uno::RuntimeException
);
153 virtual void SAL_CALL
setValue( const ::com::sun::star::uno::Any
& _value
) throw (::com::sun::star::beans::IllegalTypeException
, ::com::sun::star::uno::RuntimeException
);
154 virtual ::com::sun::star::uno::Type SAL_CALL
getValueType() throw (::com::sun::star::uno::RuntimeException
);
157 virtual void modified();
160 //========================================================================
162 //========================================================================
163 typedef CommonBehaviourControl
< ::com::sun::star::inspection::XPropertyControl
, ControlWindow
< FormattedField
> > ODateTimeControl_Base
;
164 class ODateTimeControl
: public ODateTimeControl_Base
167 ODateTimeControl( Window
* pParent
,WinBits nWinStyle
);
170 virtual ::com::sun::star::uno::Any SAL_CALL
getValue() throw (::com::sun::star::uno::RuntimeException
);
171 virtual void SAL_CALL
setValue( const ::com::sun::star::uno::Any
& _value
) throw (::com::sun::star::beans::IllegalTypeException
, ::com::sun::star::uno::RuntimeException
);
172 virtual ::com::sun::star::uno::Type SAL_CALL
getValueType() throw (::com::sun::star::uno::RuntimeException
);
175 //========================================================================
177 //========================================================================
178 class HyperlinkInput
: public Edit
181 Point m_aMouseButtonDownPos
;
182 Link m_aClickHandler
;
185 HyperlinkInput( Window
* _pParent
, WinBits _nWinStyle
);
187 /** sets the handler which will (asynchronously, with locked SolarMutex) be called
188 when the hyperlink has been clicked by the user
190 void SetClickHdl( const Link
& _rHdl
) { m_aClickHandler
= _rHdl
; }
191 const Link
& GetClickHdl( ) const { return m_aClickHandler
; }
194 virtual void MouseMove( const MouseEvent
& rMEvt
);
195 virtual void MouseButtonDown( const MouseEvent
& rMEvt
);
196 virtual void MouseButtonUp( const MouseEvent
& rMEvt
);
197 virtual void Tracking( const TrackingEvent
& rTEvt
);
200 void impl_checkEndClick( const MouseEvent rMEvt
);
201 bool impl_textHitTest( const Point
& _rWindowPos
);
204 //========================================================================
205 //= OHyperlinkControl
206 //========================================================================
207 typedef CommonBehaviourControl
< ::com::sun::star::inspection::XHyperlinkControl
, ControlWindow
< HyperlinkInput
> > OHyperlinkControl_Base
;
208 class OHyperlinkControl
: public OHyperlinkControl_Base
211 ::cppu::OInterfaceContainerHelper m_aActionListeners
;
214 OHyperlinkControl( Window
* _pParent
, WinBits _nWinStyle
);
217 virtual ::com::sun::star::uno::Any SAL_CALL
getValue() throw (::com::sun::star::uno::RuntimeException
);
218 virtual void SAL_CALL
setValue( const ::com::sun::star::uno::Any
& _value
) throw (::com::sun::star::beans::IllegalTypeException
, ::com::sun::star::uno::RuntimeException
);
219 virtual ::com::sun::star::uno::Type SAL_CALL
getValueType() throw (::com::sun::star::uno::RuntimeException
);
222 virtual void SAL_CALL
addActionListener( const ::com::sun::star::uno::Reference
< ::com::sun::star::awt::XActionListener
>& listener
) throw (::com::sun::star::uno::RuntimeException
);
223 virtual void SAL_CALL
removeActionListener( const ::com::sun::star::uno::Reference
< ::com::sun::star::awt::XActionListener
>& listener
) throw (::com::sun::star::uno::RuntimeException
);
227 virtual void SAL_CALL
disposing();
230 DECL_LINK( OnHyperlinkClicked
, void* );
233 //========================================================================
234 //= CustomConvertibleNumericField
235 //========================================================================
236 class CustomConvertibleNumericField
: public ControlWindow
< MetricField
>
238 typedef ControlWindow
< MetricField
> BaseClass
;
241 CustomConvertibleNumericField( Window
* _pParent
, WinBits _nStyle
)
242 :BaseClass( _pParent
, _nStyle
)
246 sal_Int64
GetLastValue() const { return mnLastValue
; }
249 //========================================================================
251 //========================================================================
252 typedef CommonBehaviourControl
< ::com::sun::star::inspection::XNumericControl
, CustomConvertibleNumericField
> ONumericControl_Base
;
253 class ONumericControl
: public ONumericControl_Base
256 FieldUnit m_eValueUnit
;
257 sal_Int16 m_nFieldToUNOValueFactor
;
260 ONumericControl( Window
* pParent
, WinBits nWinStyle
);
263 virtual ::com::sun::star::uno::Any SAL_CALL
getValue() throw (::com::sun::star::uno::RuntimeException
);
264 virtual void SAL_CALL
setValue( const ::com::sun::star::uno::Any
& _value
) throw (::com::sun::star::beans::IllegalTypeException
, ::com::sun::star::uno::RuntimeException
);
265 virtual ::com::sun::star::uno::Type SAL_CALL
getValueType() throw (::com::sun::star::uno::RuntimeException
);
268 virtual ::sal_Int16 SAL_CALL
getDecimalDigits() throw (::com::sun::star::uno::RuntimeException
);
269 virtual void SAL_CALL
setDecimalDigits( ::sal_Int16 _decimaldigits
) throw (::com::sun::star::uno::RuntimeException
);
270 virtual ::com::sun::star::beans::Optional
< double > SAL_CALL
getMinValue() throw (::com::sun::star::uno::RuntimeException
);
271 virtual void SAL_CALL
setMinValue( const ::com::sun::star::beans::Optional
< double >& _minvalue
) throw (::com::sun::star::uno::RuntimeException
);
272 virtual ::com::sun::star::beans::Optional
< double > SAL_CALL
getMaxValue() throw (::com::sun::star::uno::RuntimeException
);
273 virtual void SAL_CALL
setMaxValue( const ::com::sun::star::beans::Optional
< double >& _maxvalue
) throw (::com::sun::star::uno::RuntimeException
);
274 virtual ::sal_Int16 SAL_CALL
getDisplayUnit() throw (::com::sun::star::uno::RuntimeException
);
275 virtual void SAL_CALL
setDisplayUnit( ::sal_Int16 _displayunit
) throw (::com::sun::star::lang::IllegalArgumentException
, ::com::sun::star::uno::RuntimeException
);
276 virtual ::sal_Int16 SAL_CALL
getValueUnit() throw (::com::sun::star::uno::RuntimeException
);
277 virtual void SAL_CALL
setValueUnit( ::sal_Int16 _valueunit
) throw (::com::sun::star::uno::RuntimeException
);
280 /** converts an API value (<code>double</code>, as passed into <code>set[Max|Min|]Value) into
281 a <code>long</code> value which can be passed to our NumericField.
283 The conversion respects our decimal digits as well as our value factor (<member>m_nFieldToUNOValueFactor</member>).
285 long impl_apiValueToFieldValue_nothrow( double _nApiValue
) const;
287 /** converts a control value, as obtained from our Numeric field, into a value which can passed
288 to outer callers via our UNO API.
290 double impl_fieldValueToApiValue_nothrow( sal_Int64 _nFieldValue
) const;
293 //========================================================================
295 //========================================================================
296 typedef CommonBehaviourControl
< ::com::sun::star::inspection::XStringListControl
297 , ListLikeControlWithModifyHandler
< ColorListBox
>
298 > OColorControl_Base
;
299 class OColorControl
: public OColorControl_Base
302 ::std::set
< ::rtl::OUString
> m_aNonColorEntries
;
305 OColorControl( Window
* pParent
, WinBits nWinStyle
);
308 virtual ::com::sun::star::uno::Any SAL_CALL
getValue() throw (::com::sun::star::uno::RuntimeException
);
309 virtual void SAL_CALL
setValue( const ::com::sun::star::uno::Any
& _value
) throw (::com::sun::star::beans::IllegalTypeException
, ::com::sun::star::uno::RuntimeException
);
310 virtual ::com::sun::star::uno::Type SAL_CALL
getValueType() throw (::com::sun::star::uno::RuntimeException
);
312 // XStringListControl
313 virtual void SAL_CALL
clearList( ) throw (::com::sun::star::uno::RuntimeException
);
314 virtual void SAL_CALL
prependListEntry( const ::rtl::OUString
& NewEntry
) throw (::com::sun::star::uno::RuntimeException
);
315 virtual void SAL_CALL
appendListEntry( const ::rtl::OUString
& NewEntry
) throw (::com::sun::star::uno::RuntimeException
);
316 virtual ::com::sun::star::uno::Sequence
< ::rtl::OUString
> SAL_CALL
getListEntries( ) throw (::com::sun::star::uno::RuntimeException
);
319 virtual void modified();
322 //========================================================================
324 //========================================================================
325 typedef CommonBehaviourControl
< ::com::sun::star::inspection::XStringListControl
326 , ListLikeControlWithModifyHandler
< ListBox
>
327 > OListboxControl_Base
;
328 class OListboxControl
: public OListboxControl_Base
331 OListboxControl( Window
* pParent
, WinBits nWinStyle
);
334 virtual ::com::sun::star::uno::Any SAL_CALL
getValue() throw (::com::sun::star::uno::RuntimeException
);
335 virtual void SAL_CALL
setValue( const ::com::sun::star::uno::Any
& _value
) throw (::com::sun::star::beans::IllegalTypeException
, ::com::sun::star::uno::RuntimeException
);
336 virtual ::com::sun::star::uno::Type SAL_CALL
getValueType() throw (::com::sun::star::uno::RuntimeException
);
338 // XStringListControl
339 virtual void SAL_CALL
clearList( ) throw (::com::sun::star::uno::RuntimeException
);
340 virtual void SAL_CALL
prependListEntry( const ::rtl::OUString
& NewEntry
) throw (::com::sun::star::uno::RuntimeException
);
341 virtual void SAL_CALL
appendListEntry( const ::rtl::OUString
& NewEntry
) throw (::com::sun::star::uno::RuntimeException
);
342 virtual ::com::sun::star::uno::Sequence
< ::rtl::OUString
> SAL_CALL
getListEntries( ) throw (::com::sun::star::uno::RuntimeException
);
345 virtual void modified();
348 //========================================================================
350 //========================================================================
351 typedef CommonBehaviourControl
< ::com::sun::star::inspection::XStringListControl
, ControlWindow
< ComboBox
> > OComboboxControl_Base
;
352 class OComboboxControl
: public OComboboxControl_Base
355 OComboboxControl( Window
* pParent
, WinBits nWinStyle
);
358 virtual ::com::sun::star::uno::Any SAL_CALL
getValue() throw (::com::sun::star::uno::RuntimeException
);
359 virtual void SAL_CALL
setValue( const ::com::sun::star::uno::Any
& _value
) throw (::com::sun::star::beans::IllegalTypeException
, ::com::sun::star::uno::RuntimeException
);
360 virtual ::com::sun::star::uno::Type SAL_CALL
getValueType() throw (::com::sun::star::uno::RuntimeException
);
362 // XStringListControl
363 virtual void SAL_CALL
clearList( ) throw (::com::sun::star::uno::RuntimeException
);
364 virtual void SAL_CALL
prependListEntry( const ::rtl::OUString
& NewEntry
) throw (::com::sun::star::uno::RuntimeException
);
365 virtual void SAL_CALL
appendListEntry( const ::rtl::OUString
& NewEntry
) throw (::com::sun::star::uno::RuntimeException
);
366 virtual ::com::sun::star::uno::Sequence
< ::rtl::OUString
> SAL_CALL
getListEntries( ) throw (::com::sun::star::uno::RuntimeException
);
369 DECL_LINK( OnEntrySelected
, void* );
372 //========================================================================
373 //= DropDownEditControl
374 //========================================================================
375 enum MultiLineOperationMode
380 //========================================================================
381 //= DropDownEditControl
382 //========================================================================
383 class OMultilineFloatingEdit
;
384 typedef ControlWindow
< Edit
> DropDownEditControl_Base
;
385 /** an Edit field which can be used as ControlWindow, and has a drop-down button
387 class DropDownEditControl
: public DropDownEditControl_Base
390 OMultilineFloatingEdit
* m_pFloatingEdit
;
391 MultiLineEdit
* m_pImplEdit
;
392 PushButton
* m_pDropdownButton
;
393 MultiLineOperationMode m_nOperationMode
;
394 sal_Bool m_bDropdown
: 1;
397 DropDownEditControl( Window
* _pParent
, WinBits _nStyle
);
398 ~DropDownEditControl();
400 void setOperationMode( MultiLineOperationMode _eMode
) { m_nOperationMode
= _eMode
; }
401 MultiLineOperationMode
getOperationMode() const { return m_nOperationMode
; }
403 void SetTextValue( const ::rtl::OUString
& _rText
);
404 ::rtl::OUString
GetTextValue() const;
406 void SetStringListValue( const StlSyntaxSequence
< ::rtl::OUString
>& _rStrings
);
407 StlSyntaxSequence
< ::rtl::OUString
>
408 GetStringListValue() const;
410 // ControlWindow overridables
411 virtual void setControlHelper( ControlHelper
& _rControlHelper
);
414 // Window overridables
415 virtual long PreNotify( NotifyEvent
& rNEvt
);
416 virtual void Resize();
419 long FindPos(long nSinglePos
);
422 DECL_LINK( ReturnHdl
, OMultilineFloatingEdit
* );
423 DECL_LINK( DropDownHdl
, PushButton
* );
425 sal_Bool
ShowDropDown( sal_Bool bShow
);
428 //========================================================================
429 //= OMultilineEditControl
430 //========================================================================
431 typedef CommonBehaviourControl
< ::com::sun::star::inspection::XPropertyControl
, DropDownEditControl
> OMultilineEditControl_Base
;
432 class OMultilineEditControl
: public OMultilineEditControl_Base
435 OMultilineEditControl( Window
* pParent
, MultiLineOperationMode _eMode
, WinBits nWinStyle
);
438 virtual ::com::sun::star::uno::Any SAL_CALL
getValue() throw (::com::sun::star::uno::RuntimeException
);
439 virtual void SAL_CALL
setValue( const ::com::sun::star::uno::Any
& _value
) throw (::com::sun::star::beans::IllegalTypeException
, ::com::sun::star::uno::RuntimeException
);
440 virtual ::com::sun::star::uno::Type SAL_CALL
getValueType() throw (::com::sun::star::uno::RuntimeException
);
443 //............................................................................
445 //............................................................................
447 #endif // _EXTENSIONS_PROPCTRLR_STANDARDCONTROL_HXX_