xref: /AOO41X/main/forms/source/component/ComboBox.hxx (revision 2d785d7ea953737df3731803a26e291d82066c5a)
1 /**************************************************************
2  *
3  * Licensed to the Apache Software Foundation (ASF) under one
4  * or more contributor license agreements.  See the NOTICE file
5  * distributed with this work for additional information
6  * regarding copyright ownership.  The ASF licenses this file
7  * to you under the Apache License, Version 2.0 (the
8  * "License"); you may not use this file except in compliance
9  * with the License.  You may obtain a copy of the License at
10  *
11  *   http://www.apache.org/licenses/LICENSE-2.0
12  *
13  * Unless required by applicable law or agreed to in writing,
14  * software distributed under the License is distributed on an
15  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16  * KIND, either express or implied.  See the License for the
17  * specific language governing permissions and limitations
18  * under the License.
19  *
20  *************************************************************/
21 
22 
23 
24 #ifndef _FORMS_COMBOBOX_HXX_
25 #define _FORMS_COMBOBOX_HXX_
26 
27 #include "FormComponent.hxx"
28 #include "errorbroadcaster.hxx"
29 #include "entrylisthelper.hxx"
30 #include "cachedrowset.hxx"
31 
32 /** === begin UNO includes === **/
33 #include <com/sun/star/util/XNumberFormatter.hpp>
34 #include <com/sun/star/sdb/XSQLErrorBroadcaster.hpp>
35 #include <com/sun/star/form/ListSourceType.hpp>
36 #include <com/sun/star/awt/XItemListener.hpp>
37 #include <com/sun/star/awt/XFocusListener.hpp>
38 /** === end UNO includes === **/
39 
40 #include <connectivity/formattedcolumnvalue.hxx>
41 
42 #include <cppuhelper/interfacecontainer.hxx>
43 
44 #include <vcl/timer.hxx>
45 
46 #include <tools/date.hxx>
47 
48 //.........................................................................
49 namespace frm
50 {
51 
52 //==================================================================
53 // OComboBoxModel
54 //==================================================================
55 class OComboBoxModel
56             :public OBoundControlModel
57             ,public OEntryListHelper
58             ,public OErrorBroadcaster
59 {
60     CachedRowSet                            m_aListRowSet;          // the row set to fill the list
61     ::com::sun::star::uno::Any              m_aBoundColumn;         // obsolet
62     ::rtl::OUString                         m_aListSource;          //
63     ::rtl::OUString                         m_aDefaultText;         // DefaultText
64     ::com::sun::star::uno::Any              m_aLastKnownValue;
65 
66     StringSequence                          m_aDesignModeStringItems;
67         // upon loading, in some cases we reset fill our string item list ourself. We don't want
68         // to lose the user's items then, so we remember them here.
69 
70 
71     ::com::sun::star::uno::Reference< ::com::sun::star::util::XNumberFormatter> m_xFormatter;
72 
73     ::com::sun::star::form::ListSourceType  m_eListSourceType;      // type der list source
74     sal_Bool                                m_bEmptyIsNull;         // LeerString wird als NULL interpretiert
75 
76     ::std::auto_ptr< ::dbtools::FormattedColumnValue >
77                                             m_pValueFormatter;
78 
79 
80 
81 protected:
82     virtual ::com::sun::star::uno::Sequence< ::com::sun::star::uno::Type>   _getTypes();
83 
84 public:
85     DECLARE_DEFAULT_LEAF_XTOR( OComboBoxModel );
86 
87     virtual void SAL_CALL disposing();
88 
89     // OPropertySetHelper
90     virtual void SAL_CALL getFastPropertyValue(::com::sun::star::uno::Any& rValue, sal_Int32 nHandle) const;
91     virtual void SAL_CALL setFastPropertyValue_NoBroadcast( sal_Int32 nHandle, const ::com::sun::star::uno::Any& rValue )
92                 throw (::com::sun::star::uno::Exception);
93     virtual sal_Bool SAL_CALL convertFastPropertyValue(
94                 ::com::sun::star::uno::Any& _rConvertedValue, ::com::sun::star::uno::Any& _rOldValue, sal_Int32 _nHandle, const ::com::sun::star::uno::Any& _rValue )
95                 throw (::com::sun::star::lang::IllegalArgumentException);
96 
97     // XLoadListener
98     virtual void SAL_CALL reloaded( const ::com::sun::star::lang::EventObject& aEvent ) throw(::com::sun::star::uno::RuntimeException);
99 
100     // XServiceInfo
101     IMPLEMENTATION_NAME(OComboBoxModel);
102     virtual StringSequence SAL_CALL getSupportedServiceNames() throw(::com::sun::star::uno::RuntimeException);
103 
104     // UNO
105     DECLARE_UNO3_AGG_DEFAULTS(OComboBoxModel, OBoundControlModel);
106     virtual ::com::sun::star::uno::Any SAL_CALL queryAggregation( const ::com::sun::star::uno::Type& _rType ) throw (::com::sun::star::uno::RuntimeException);
107 
108     // XPersistObject
109     virtual ::rtl::OUString SAL_CALL    getServiceName() throw(::com::sun::star::uno::RuntimeException);
110     virtual void SAL_CALL
111         write(const ::com::sun::star::uno::Reference< ::com::sun::star::io::XObjectOutputStream>& _rxOutStream) throw(::com::sun::star::io::IOException, ::com::sun::star::uno::RuntimeException);
112     virtual void SAL_CALL
113         read(const ::com::sun::star::uno::Reference< ::com::sun::star::io::XObjectInputStream>& _rxInStream) throw(::com::sun::star::io::IOException, ::com::sun::star::uno::RuntimeException);
114 
115     // OControlModel's property handling
116     virtual void describeFixedProperties(
117         ::com::sun::star::uno::Sequence< ::com::sun::star::beans::Property >& /* [out] */ _rProps
118     ) const;
119     virtual void describeAggregateProperties(
120         ::com::sun::star::uno::Sequence< ::com::sun::star::beans::Property >& /* [out] */ _rAggregateProps
121     ) const;
122 
123     // XEventListener
124     virtual void SAL_CALL disposing(const ::com::sun::star::lang::EventObject& Source) throw (::com::sun::star::uno::RuntimeException);
125 
126     // prevent method hiding
127     using OBoundControlModel::getFastPropertyValue;
128 
129 protected:
130     // OBoundControlModel overridables
131     virtual ::com::sun::star::uno::Any
132                             translateDbColumnToControlValue( );
133     virtual sal_Bool        commitControlValueToDbColumn( bool _bPostReset );
134 
135     virtual void            onConnectedDbColumn( const ::com::sun::star::uno::Reference< ::com::sun::star::uno::XInterface >& _rxForm );
136     virtual void            onDisconnectedDbColumn();
137 
138     virtual ::com::sun::star::uno::Any
139                             getDefaultForReset() const;
140 
141     virtual void            resetNoBroadcast();
142 
143     // OEntryListHelper overriables
144     virtual void    stringItemListChanged( ControlModelLock& _rInstanceLock );
145     virtual void    connectedExternalListSource( );
146     virtual void    disconnectedExternalListSource( );
147     virtual void    refreshInternalEntryList();
148 
149 protected:
150     void loadData( bool _bForce );
151 
152     DECLARE_XCLONEABLE();
153 };
154 
155 //==================================================================
156 // OComboBoxControl
157 //==================================================================
158 
159 class OComboBoxControl : public OBoundControl
160 {
161 public:
162     OComboBoxControl(const ::com::sun::star::uno::Reference< ::com::sun::star::lang::XMultiServiceFactory>& _rxFactory);
163 
164     // XServiceInfo
165     IMPLEMENTATION_NAME(OComboBoxControl);
166     virtual StringSequence SAL_CALL getSupportedServiceNames() throw(::com::sun::star::uno::RuntimeException);
167 };
168 
169 //.........................................................................
170 }
171 //.........................................................................
172 
173 #endif // _FORMS_COMBOBOX_HXX_
174 
175