diff options
Diffstat (limited to 'extensions/source/propctrlr/standardcontrol.hxx')
-rw-r--r-- | extensions/source/propctrlr/standardcontrol.hxx | 445 |
1 files changed, 445 insertions, 0 deletions
diff --git a/extensions/source/propctrlr/standardcontrol.hxx b/extensions/source/propctrlr/standardcontrol.hxx new file mode 100644 index 000000000000..9ee46e110bc6 --- /dev/null +++ b/extensions/source/propctrlr/standardcontrol.hxx @@ -0,0 +1,445 @@ +/************************************************************************* + * + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * Copyright 2000, 2010 Oracle and/or its affiliates. + * + * OpenOffice.org - a multi-platform office productivity suite + * + * This file is part of OpenOffice.org. + * + * OpenOffice.org is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License version 3 + * only, as published by the Free Software Foundation. + * + * OpenOffice.org is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License version 3 for more details + * (a copy is included in the LICENSE file that accompanied this code). + * + * You should have received a copy of the GNU Lesser General Public License + * version 3 along with OpenOffice.org. If not, see + * <http://www.openoffice.org/license.html> + * for a copy of the LGPLv3 License. + * + ************************************************************************/ + +#ifndef _EXTENSIONS_PROPCTRLR_STANDARDCONTROL_HXX_ +#define _EXTENSIONS_PROPCTRLR_STANDARDCONTROL_HXX_ + +#include "commoncontrol.hxx" +#include "pcrcommon.hxx" + +/** === begin UNO includes === **/ +#include <com/sun/star/inspection/XNumericControl.hpp> +#include <com/sun/star/inspection/XStringListControl.hpp> +#include <com/sun/star/inspection/XHyperlinkControl.hpp> +#include <com/sun/star/uno/Sequence.hxx> +/** === end UNO includes === **/ +#include <vcl/field.hxx> +#include <vcl/longcurr.hxx> +#include <svtools/ctrlbox.hxx> +#include <vcl/lstbox.hxx> +#include <vcl/combobox.hxx> +#include <svtools/calendar.hxx> +#include <svtools/fmtfield.hxx> + +#include <set> + +class PushButton; +class MultiLineEdit; +//............................................................................ +namespace pcr +{ +//............................................................................ + + //======================================================================== + //= ListLikeControlWithModifyHandler + //======================================================================== + /** Very small helper class which adds a SetModifyHdl to a ListBox-derived class, + thus giving this class the same API (as far as the CommonBehaviourControl is concerned) + as all other windows. + */ + template< class LISTBOX_WINDOW > + class ListLikeControlWithModifyHandler : public ControlWindow< LISTBOX_WINDOW > + { + protected: + typedef ControlWindow< LISTBOX_WINDOW > ListBoxType; + + public: + ListLikeControlWithModifyHandler( Window* _pParent, WinBits _nStyle ) + :ListBoxType( _pParent, _nStyle ) + { + } + + void SetModifyHdl( const Link& _rLink ) { ListBoxType::SetSelectHdl( _rLink ); } + + protected: + long PreNotify( NotifyEvent& _rNEvt ); + }; + + //------------------------------------------------------------------------ + template< class LISTBOX_WINDOW > + long ListLikeControlWithModifyHandler< LISTBOX_WINDOW >::PreNotify( NotifyEvent& _rNEvt ) + { + if ( _rNEvt.GetType() == EVENT_KEYINPUT ) + { + const ::KeyEvent* pKeyEvent = _rNEvt.GetKeyEvent(); + if ( ( pKeyEvent->GetKeyCode().GetModifier() == 0 ) + && ( ( pKeyEvent->GetKeyCode().GetCode() == KEY_PAGEUP ) + || ( pKeyEvent->GetKeyCode().GetCode() == KEY_PAGEDOWN ) + ) + ) + { + if ( !ListBoxType::IsInDropDown() ) + { + // don't give the base class a chance to consume the event, in the property browser, it is + // intended to scroll the complete property page + return ListBoxType::GetParent()->PreNotify( _rNEvt ); + } + } + } + return ListBoxType::PreNotify( _rNEvt ); + } + + //======================================================================== + //= OTimeControl + //======================================================================== + typedef CommonBehaviourControl< ::com::sun::star::inspection::XPropertyControl, ControlWindow< TimeField > > OTimeControl_Base; + class OTimeControl : public OTimeControl_Base + { + public: + OTimeControl( Window* pParent, WinBits nWinStyle ); + + // XPropertyControl + virtual ::com::sun::star::uno::Any SAL_CALL getValue() throw (::com::sun::star::uno::RuntimeException); + virtual void SAL_CALL setValue( const ::com::sun::star::uno::Any& _value ) throw (::com::sun::star::beans::IllegalTypeException, ::com::sun::star::uno::RuntimeException); + virtual ::com::sun::star::uno::Type SAL_CALL getValueType() throw (::com::sun::star::uno::RuntimeException); + }; + + //======================================================================== + //= ODateControl + //======================================================================== + typedef CommonBehaviourControl< ::com::sun::star::inspection::XPropertyControl, ControlWindow< CalendarField > > ODateControl_Base; + class ODateControl : public ODateControl_Base + { + public: + ODateControl( Window* pParent, WinBits nWinStyle ); + + // XPropertyControl + virtual ::com::sun::star::uno::Any SAL_CALL getValue() throw (::com::sun::star::uno::RuntimeException); + virtual void SAL_CALL setValue( const ::com::sun::star::uno::Any& _value ) throw (::com::sun::star::beans::IllegalTypeException, ::com::sun::star::uno::RuntimeException); + virtual ::com::sun::star::uno::Type SAL_CALL getValueType() throw (::com::sun::star::uno::RuntimeException); + }; + + //======================================================================== + //= OEditControl + //======================================================================== + typedef CommonBehaviourControl< ::com::sun::star::inspection::XPropertyControl, ControlWindow< Edit > > OEditControl_Base; + class OEditControl : public OEditControl_Base + { + protected: + sal_Bool m_bIsPassword : 1; + + public: + OEditControl( Window* _pParent, sal_Bool _bPassWord, WinBits nWinStyle ); + + // XPropertyControl + virtual ::com::sun::star::uno::Any SAL_CALL getValue() throw (::com::sun::star::uno::RuntimeException); + virtual void SAL_CALL setValue( const ::com::sun::star::uno::Any& _value ) throw (::com::sun::star::beans::IllegalTypeException, ::com::sun::star::uno::RuntimeException); + virtual ::com::sun::star::uno::Type SAL_CALL getValueType() throw (::com::sun::star::uno::RuntimeException); + + protected: + virtual void modified(); + }; + + //======================================================================== + //= ODateTimeControl + //======================================================================== + typedef CommonBehaviourControl< ::com::sun::star::inspection::XPropertyControl, ControlWindow< FormattedField > > ODateTimeControl_Base; + class ODateTimeControl : public ODateTimeControl_Base + { + public: + ODateTimeControl( Window* pParent,WinBits nWinStyle ); + + // XPropertyControl + virtual ::com::sun::star::uno::Any SAL_CALL getValue() throw (::com::sun::star::uno::RuntimeException); + virtual void SAL_CALL setValue( const ::com::sun::star::uno::Any& _value ) throw (::com::sun::star::beans::IllegalTypeException, ::com::sun::star::uno::RuntimeException); + virtual ::com::sun::star::uno::Type SAL_CALL getValueType() throw (::com::sun::star::uno::RuntimeException); + }; + + //======================================================================== + //= HyperlinkInput + //======================================================================== + class HyperlinkInput : public Edit + { + private: + Point m_aMouseButtonDownPos; + Link m_aClickHandler; + + public: + HyperlinkInput( Window* _pParent, WinBits _nWinStyle ); + + /** sets the handler which will (asynchronously, with locked SolarMutex) be called + when the hyperlink has been clicked by the user + */ + void SetClickHdl( const Link& _rHdl ) { m_aClickHandler = _rHdl; } + const Link& GetClickHdl( ) const { return m_aClickHandler; } + + protected: + virtual void MouseMove( const MouseEvent& rMEvt ); + virtual void MouseButtonDown( const MouseEvent& rMEvt ); + virtual void MouseButtonUp( const MouseEvent& rMEvt ); + virtual void Tracking( const TrackingEvent& rTEvt ); + + private: + void impl_checkEndClick( const MouseEvent rMEvt ); + bool impl_textHitTest( const Point& _rWindowPos ); + }; + + //======================================================================== + //= OHyperlinkControl + //======================================================================== + typedef CommonBehaviourControl< ::com::sun::star::inspection::XHyperlinkControl, ControlWindow< HyperlinkInput > > OHyperlinkControl_Base; + class OHyperlinkControl : public OHyperlinkControl_Base + { + private: + ::cppu::OInterfaceContainerHelper m_aActionListeners; + + public: + OHyperlinkControl( Window* _pParent, WinBits _nWinStyle ); + + // XPropertyControl + virtual ::com::sun::star::uno::Any SAL_CALL getValue() throw (::com::sun::star::uno::RuntimeException); + virtual void SAL_CALL setValue( const ::com::sun::star::uno::Any& _value ) throw (::com::sun::star::beans::IllegalTypeException, ::com::sun::star::uno::RuntimeException); + virtual ::com::sun::star::uno::Type SAL_CALL getValueType() throw (::com::sun::star::uno::RuntimeException); + + // XHyperlinkControl + virtual void SAL_CALL addActionListener( const ::com::sun::star::uno::Reference< ::com::sun::star::awt::XActionListener >& listener ) throw (::com::sun::star::uno::RuntimeException); + virtual void SAL_CALL removeActionListener( const ::com::sun::star::uno::Reference< ::com::sun::star::awt::XActionListener >& listener ) throw (::com::sun::star::uno::RuntimeException); + + protected: + // XComponent + virtual void SAL_CALL disposing(); + + protected: + DECL_LINK( OnHyperlinkClicked, void* ); + }; + + //======================================================================== + //= CustomConvertibleNumericField + //======================================================================== + class CustomConvertibleNumericField : public ControlWindow< MetricField > + { + typedef ControlWindow< MetricField > BaseClass; + + public: + CustomConvertibleNumericField( Window* _pParent, WinBits _nStyle ) + :BaseClass( _pParent, _nStyle ) + { + } + + sal_Int64 GetLastValue() const { return mnLastValue; } + }; + + //======================================================================== + //= ONumericControl + //======================================================================== + typedef CommonBehaviourControl< ::com::sun::star::inspection::XNumericControl, CustomConvertibleNumericField > ONumericControl_Base; + class ONumericControl : public ONumericControl_Base + { + private: + FieldUnit m_eValueUnit; + sal_Int16 m_nFieldToUNOValueFactor; + + public: + ONumericControl( Window* pParent, WinBits nWinStyle ); + + // XPropertyControl + virtual ::com::sun::star::uno::Any SAL_CALL getValue() throw (::com::sun::star::uno::RuntimeException); + virtual void SAL_CALL setValue( const ::com::sun::star::uno::Any& _value ) throw (::com::sun::star::beans::IllegalTypeException, ::com::sun::star::uno::RuntimeException); + virtual ::com::sun::star::uno::Type SAL_CALL getValueType() throw (::com::sun::star::uno::RuntimeException); + + // XNumericControl + virtual ::sal_Int16 SAL_CALL getDecimalDigits() throw (::com::sun::star::uno::RuntimeException); + virtual void SAL_CALL setDecimalDigits( ::sal_Int16 _decimaldigits ) throw (::com::sun::star::uno::RuntimeException); + virtual ::com::sun::star::beans::Optional< double > SAL_CALL getMinValue() throw (::com::sun::star::uno::RuntimeException); + virtual void SAL_CALL setMinValue( const ::com::sun::star::beans::Optional< double >& _minvalue ) throw (::com::sun::star::uno::RuntimeException); + virtual ::com::sun::star::beans::Optional< double > SAL_CALL getMaxValue() throw (::com::sun::star::uno::RuntimeException); + virtual void SAL_CALL setMaxValue( const ::com::sun::star::beans::Optional< double >& _maxvalue ) throw (::com::sun::star::uno::RuntimeException); + virtual ::sal_Int16 SAL_CALL getDisplayUnit() throw (::com::sun::star::uno::RuntimeException); + virtual void SAL_CALL setDisplayUnit( ::sal_Int16 _displayunit ) throw (::com::sun::star::lang::IllegalArgumentException, ::com::sun::star::uno::RuntimeException); + virtual ::sal_Int16 SAL_CALL getValueUnit() throw (::com::sun::star::uno::RuntimeException); + virtual void SAL_CALL setValueUnit( ::sal_Int16 _valueunit ) throw (::com::sun::star::uno::RuntimeException); + + private: + /** converts an API value (<code>double</code>, as passed into <code>set[Max|Min|]Value) into + a <code>long</code> value which can be passed to our NumericField. + + The conversion respects our decimal digits as well as our value factor (<member>m_nFieldToUNOValueFactor</member>). + */ + long impl_apiValueToFieldValue_nothrow( double _nApiValue ) const; + + /** converts a control value, as obtained from our Numeric field, into a value which can passed + to outer callers via our UNO API. + */ + double impl_fieldValueToApiValue_nothrow( sal_Int64 _nFieldValue ) const; + }; + + //======================================================================== + //= OColorControl + //======================================================================== + typedef CommonBehaviourControl < ::com::sun::star::inspection::XStringListControl + , ListLikeControlWithModifyHandler< ColorListBox > + > OColorControl_Base; + class OColorControl : public OColorControl_Base + { + private: + ::std::set< ::rtl::OUString > m_aNonColorEntries; + + public: + OColorControl( Window* pParent, WinBits nWinStyle ); + + // XPropertyControl + virtual ::com::sun::star::uno::Any SAL_CALL getValue() throw (::com::sun::star::uno::RuntimeException); + virtual void SAL_CALL setValue( const ::com::sun::star::uno::Any& _value ) throw (::com::sun::star::beans::IllegalTypeException, ::com::sun::star::uno::RuntimeException); + virtual ::com::sun::star::uno::Type SAL_CALL getValueType() throw (::com::sun::star::uno::RuntimeException); + + // XStringListControl + virtual void SAL_CALL clearList( ) throw (::com::sun::star::uno::RuntimeException); + virtual void SAL_CALL prependListEntry( const ::rtl::OUString& NewEntry ) throw (::com::sun::star::uno::RuntimeException); + virtual void SAL_CALL appendListEntry( const ::rtl::OUString& NewEntry ) throw (::com::sun::star::uno::RuntimeException); + virtual ::com::sun::star::uno::Sequence< ::rtl::OUString > SAL_CALL getListEntries( ) throw (::com::sun::star::uno::RuntimeException); + + protected: + virtual void modified(); + }; + + //======================================================================== + //= OListboxControl + //======================================================================== + typedef CommonBehaviourControl < ::com::sun::star::inspection::XStringListControl + , ListLikeControlWithModifyHandler< ListBox > + > OListboxControl_Base; + class OListboxControl : public OListboxControl_Base + { + public: + OListboxControl( Window* pParent, WinBits nWinStyle ); + + // XPropertyControl + virtual ::com::sun::star::uno::Any SAL_CALL getValue() throw (::com::sun::star::uno::RuntimeException); + virtual void SAL_CALL setValue( const ::com::sun::star::uno::Any& _value ) throw (::com::sun::star::beans::IllegalTypeException, ::com::sun::star::uno::RuntimeException); + virtual ::com::sun::star::uno::Type SAL_CALL getValueType() throw (::com::sun::star::uno::RuntimeException); + + // XStringListControl + virtual void SAL_CALL clearList( ) throw (::com::sun::star::uno::RuntimeException); + virtual void SAL_CALL prependListEntry( const ::rtl::OUString& NewEntry ) throw (::com::sun::star::uno::RuntimeException); + virtual void SAL_CALL appendListEntry( const ::rtl::OUString& NewEntry ) throw (::com::sun::star::uno::RuntimeException); + virtual ::com::sun::star::uno::Sequence< ::rtl::OUString > SAL_CALL getListEntries( ) throw (::com::sun::star::uno::RuntimeException); + + protected: + virtual void modified(); + }; + + //======================================================================== + //= OComboboxControl + //======================================================================== + typedef CommonBehaviourControl< ::com::sun::star::inspection::XStringListControl, ControlWindow< ComboBox > > OComboboxControl_Base; + class OComboboxControl : public OComboboxControl_Base + { + public: + OComboboxControl( Window* pParent, WinBits nWinStyle ); + + // XPropertyControl + virtual ::com::sun::star::uno::Any SAL_CALL getValue() throw (::com::sun::star::uno::RuntimeException); + virtual void SAL_CALL setValue( const ::com::sun::star::uno::Any& _value ) throw (::com::sun::star::beans::IllegalTypeException, ::com::sun::star::uno::RuntimeException); + virtual ::com::sun::star::uno::Type SAL_CALL getValueType() throw (::com::sun::star::uno::RuntimeException); + + // XStringListControl + virtual void SAL_CALL clearList( ) throw (::com::sun::star::uno::RuntimeException); + virtual void SAL_CALL prependListEntry( const ::rtl::OUString& NewEntry ) throw (::com::sun::star::uno::RuntimeException); + virtual void SAL_CALL appendListEntry( const ::rtl::OUString& NewEntry ) throw (::com::sun::star::uno::RuntimeException); + virtual ::com::sun::star::uno::Sequence< ::rtl::OUString > SAL_CALL getListEntries( ) throw (::com::sun::star::uno::RuntimeException); + + protected: + DECL_LINK( OnEntrySelected, void* ); + }; + + //======================================================================== + //= DropDownEditControl + //======================================================================== + enum MultiLineOperationMode + { + eStringList, + eMultiLineText + }; + //======================================================================== + //= DropDownEditControl + //======================================================================== + class OMultilineFloatingEdit; + typedef ControlWindow< Edit > DropDownEditControl_Base; + /** an Edit field which can be used as ControlWindow, and has a drop-down button + */ + class DropDownEditControl : public DropDownEditControl_Base + { + private: + OMultilineFloatingEdit* m_pFloatingEdit; + MultiLineEdit* m_pImplEdit; + PushButton* m_pDropdownButton; + MultiLineOperationMode m_nOperationMode; + sal_Bool m_bDropdown : 1; + + public: + DropDownEditControl( Window* _pParent, WinBits _nStyle ); + ~DropDownEditControl(); + + void setOperationMode( MultiLineOperationMode _eMode ) { m_nOperationMode = _eMode; } + MultiLineOperationMode getOperationMode() const { return m_nOperationMode; } + + void SetTextValue( const ::rtl::OUString& _rText ); + ::rtl::OUString GetTextValue() const; + + void SetStringListValue( const StlSyntaxSequence< ::rtl::OUString >& _rStrings ); + StlSyntaxSequence< ::rtl::OUString > + GetStringListValue() const; + + // ControlWindow overridables + virtual void setControlHelper( ControlHelper& _rControlHelper ); + + protected: + // Window overridables + virtual long PreNotify( NotifyEvent& rNEvt ); + virtual void Resize(); + + protected: + long FindPos(long nSinglePos); + + private: + DECL_LINK( ReturnHdl, OMultilineFloatingEdit* ); + DECL_LINK( DropDownHdl, PushButton* ); + + sal_Bool ShowDropDown( sal_Bool bShow ); + }; + + //======================================================================== + //= OMultilineEditControl + //======================================================================== + typedef CommonBehaviourControl< ::com::sun::star::inspection::XPropertyControl, DropDownEditControl > OMultilineEditControl_Base; + class OMultilineEditControl : public OMultilineEditControl_Base + { + public: + OMultilineEditControl( Window* pParent, MultiLineOperationMode _eMode, WinBits nWinStyle ); + + // XPropertyControl + virtual ::com::sun::star::uno::Any SAL_CALL getValue() throw (::com::sun::star::uno::RuntimeException); + virtual void SAL_CALL setValue( const ::com::sun::star::uno::Any& _value ) throw (::com::sun::star::beans::IllegalTypeException, ::com::sun::star::uno::RuntimeException); + virtual ::com::sun::star::uno::Type SAL_CALL getValueType() throw (::com::sun::star::uno::RuntimeException); + }; + +//............................................................................ +} // namespace pcr +//............................................................................ + +#endif // _EXTENSIONS_PROPCTRLR_STANDARDCONTROL_HXX_ + |