xref: /trunk/main/forms/source/component/Pattern.cxx (revision 24acc546)
1*24acc546SAndrew Rist /**************************************************************
2cdf0e10cSrcweir  *
3*24acc546SAndrew Rist  * Licensed to the Apache Software Foundation (ASF) under one
4*24acc546SAndrew Rist  * or more contributor license agreements.  See the NOTICE file
5*24acc546SAndrew Rist  * distributed with this work for additional information
6*24acc546SAndrew Rist  * regarding copyright ownership.  The ASF licenses this file
7*24acc546SAndrew Rist  * to you under the Apache License, Version 2.0 (the
8*24acc546SAndrew Rist  * "License"); you may not use this file except in compliance
9*24acc546SAndrew Rist  * with the License.  You may obtain a copy of the License at
10*24acc546SAndrew Rist  *
11*24acc546SAndrew Rist  *   http://www.apache.org/licenses/LICENSE-2.0
12*24acc546SAndrew Rist  *
13*24acc546SAndrew Rist  * Unless required by applicable law or agreed to in writing,
14*24acc546SAndrew Rist  * software distributed under the License is distributed on an
15*24acc546SAndrew Rist  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16*24acc546SAndrew Rist  * KIND, either express or implied.  See the License for the
17*24acc546SAndrew Rist  * specific language governing permissions and limitations
18*24acc546SAndrew Rist  * under the License.
19*24acc546SAndrew Rist  *
20*24acc546SAndrew Rist  *************************************************************/
21*24acc546SAndrew Rist 
22*24acc546SAndrew Rist 
23cdf0e10cSrcweir 
24cdf0e10cSrcweir // MARKER(update_precomp.py): autogen include statement, do not remove
25cdf0e10cSrcweir #include "precompiled_forms.hxx"
26cdf0e10cSrcweir 
27cdf0e10cSrcweir #include "Pattern.hxx"
28cdf0e10cSrcweir 
29cdf0e10cSrcweir /** === begin UNO includes === **/
30cdf0e10cSrcweir /** === end UNO includes === **/
31cdf0e10cSrcweir 
32cdf0e10cSrcweir //.........................................................................
33cdf0e10cSrcweir namespace frm
34cdf0e10cSrcweir {
35cdf0e10cSrcweir //.........................................................................
36cdf0e10cSrcweir 
37cdf0e10cSrcweir     /** === begin UNO using === **/
38cdf0e10cSrcweir     using ::com::sun::star::uno::Reference;
39cdf0e10cSrcweir     using ::com::sun::star::lang::XMultiServiceFactory;
40cdf0e10cSrcweir     using ::com::sun::star::uno::Sequence;
41cdf0e10cSrcweir     using ::com::sun::star::uno::Type;
42cdf0e10cSrcweir     using ::com::sun::star::beans::Property;
43cdf0e10cSrcweir     using ::com::sun::star::uno::Exception;
44cdf0e10cSrcweir     using ::com::sun::star::uno::XInterface;
45cdf0e10cSrcweir     using ::com::sun::star::uno::Any;
46cdf0e10cSrcweir     using ::com::sun::star::uno::makeAny;
47cdf0e10cSrcweir     using ::com::sun::star::sdbc::XRowSet;
48cdf0e10cSrcweir     using ::com::sun::star::uno::UNO_QUERY;
49cdf0e10cSrcweir 	/** === end UNO using === **/
50cdf0e10cSrcweir     namespace FormComponentType = ::com::sun::star::form::FormComponentType;
51cdf0e10cSrcweir 
52cdf0e10cSrcweir //==================================================================
53cdf0e10cSrcweir // OPatternControl
54cdf0e10cSrcweir //==================================================================
55cdf0e10cSrcweir //------------------------------------------------------------------
OPatternControl(const Reference<XMultiServiceFactory> & _rxFactory)56cdf0e10cSrcweir OPatternControl::OPatternControl(const Reference<XMultiServiceFactory>& _rxFactory)
57cdf0e10cSrcweir     :OBoundControl(_rxFactory, VCL_CONTROL_PATTERNFIELD)
58cdf0e10cSrcweir {
59cdf0e10cSrcweir }
60cdf0e10cSrcweir 
61cdf0e10cSrcweir //------------------------------------------------------------------
OPatternControl_CreateInstance(const Reference<XMultiServiceFactory> & _rxFactory)62cdf0e10cSrcweir InterfaceRef SAL_CALL OPatternControl_CreateInstance(const Reference<XMultiServiceFactory>& _rxFactory)
63cdf0e10cSrcweir {
64cdf0e10cSrcweir     return *(new OPatternControl(_rxFactory));
65cdf0e10cSrcweir }
66cdf0e10cSrcweir 
67cdf0e10cSrcweir //------------------------------------------------------------------------------
_getTypes()68cdf0e10cSrcweir Sequence<Type> OPatternControl::_getTypes()
69cdf0e10cSrcweir {
70cdf0e10cSrcweir     return OBoundControl::_getTypes();
71cdf0e10cSrcweir }
72cdf0e10cSrcweir 
73cdf0e10cSrcweir //------------------------------------------------------------------------------
getSupportedServiceNames()74cdf0e10cSrcweir StringSequence OPatternControl::getSupportedServiceNames() throw()
75cdf0e10cSrcweir {
76cdf0e10cSrcweir     StringSequence aSupported = OBoundControl::getSupportedServiceNames();
77cdf0e10cSrcweir     aSupported.realloc(aSupported.getLength() + 1);
78cdf0e10cSrcweir 
79cdf0e10cSrcweir     ::rtl::OUString*pArray = aSupported.getArray();
80cdf0e10cSrcweir     pArray[aSupported.getLength()-1] = FRM_SUN_CONTROL_PATTERNFIELD;
81cdf0e10cSrcweir     return aSupported;
82cdf0e10cSrcweir }
83cdf0e10cSrcweir 
84cdf0e10cSrcweir //==================================================================
85cdf0e10cSrcweir // OPatternModel
86cdf0e10cSrcweir //==================================================================
87cdf0e10cSrcweir //------------------------------------------------------------------
OPatternModel_CreateInstance(const Reference<XMultiServiceFactory> & _rxFactory)88cdf0e10cSrcweir InterfaceRef SAL_CALL OPatternModel_CreateInstance(const Reference<XMultiServiceFactory>& _rxFactory)
89cdf0e10cSrcweir {
90cdf0e10cSrcweir     return *(new OPatternModel(_rxFactory));
91cdf0e10cSrcweir }
92cdf0e10cSrcweir 
93cdf0e10cSrcweir //------------------------------------------------------------------------------
_getTypes()94cdf0e10cSrcweir Sequence<Type> OPatternModel::_getTypes()
95cdf0e10cSrcweir {
96cdf0e10cSrcweir     return OEditBaseModel::_getTypes();
97cdf0e10cSrcweir }
98cdf0e10cSrcweir 
99cdf0e10cSrcweir //------------------------------------------------------------------
DBG_NAME(OPatternModel)100cdf0e10cSrcweir DBG_NAME( OPatternModel )
101cdf0e10cSrcweir //------------------------------------------------------------------
102cdf0e10cSrcweir OPatternModel::OPatternModel(const Reference<XMultiServiceFactory>& _rxFactory)
103cdf0e10cSrcweir     :OEditBaseModel( _rxFactory, VCL_CONTROLMODEL_PATTERNFIELD, FRM_SUN_CONTROL_PATTERNFIELD, sal_False, sal_False )
104cdf0e10cSrcweir                                     // use the old control name for compytibility reasons
105cdf0e10cSrcweir {
106cdf0e10cSrcweir 	DBG_CTOR( OPatternModel, NULL );
107cdf0e10cSrcweir 
108cdf0e10cSrcweir     m_nClassId = FormComponentType::PATTERNFIELD;
109cdf0e10cSrcweir 	initValueProperty( PROPERTY_TEXT, PROPERTY_ID_TEXT );
110cdf0e10cSrcweir }
111cdf0e10cSrcweir 
112cdf0e10cSrcweir //------------------------------------------------------------------
OPatternModel(const OPatternModel * _pOriginal,const Reference<XMultiServiceFactory> & _rxFactory)113cdf0e10cSrcweir OPatternModel::OPatternModel( const OPatternModel* _pOriginal, const Reference<XMultiServiceFactory>& _rxFactory )
114cdf0e10cSrcweir     :OEditBaseModel( _pOriginal, _rxFactory )
115cdf0e10cSrcweir {
116cdf0e10cSrcweir 	DBG_CTOR( OPatternModel, NULL );
117cdf0e10cSrcweir }
118cdf0e10cSrcweir 
119cdf0e10cSrcweir //------------------------------------------------------------------
~OPatternModel()120cdf0e10cSrcweir OPatternModel::~OPatternModel()
121cdf0e10cSrcweir {
122cdf0e10cSrcweir 	DBG_DTOR( OPatternModel, NULL );
123cdf0e10cSrcweir }
124cdf0e10cSrcweir 
125cdf0e10cSrcweir // XCloneable
126cdf0e10cSrcweir //------------------------------------------------------------------------------
IMPLEMENT_DEFAULT_CLONING(OPatternModel)127cdf0e10cSrcweir IMPLEMENT_DEFAULT_CLONING( OPatternModel )
128cdf0e10cSrcweir 
129cdf0e10cSrcweir // XServiceInfo
130cdf0e10cSrcweir //------------------------------------------------------------------------------
131cdf0e10cSrcweir StringSequence SAL_CALL OPatternModel::getSupportedServiceNames() throw()
132cdf0e10cSrcweir {
133cdf0e10cSrcweir     StringSequence aSupported = OBoundControlModel::getSupportedServiceNames();
134cdf0e10cSrcweir     aSupported.realloc(aSupported.getLength() + 2);
135cdf0e10cSrcweir 
136cdf0e10cSrcweir     ::rtl::OUString*pArray = aSupported.getArray();
137cdf0e10cSrcweir     pArray[aSupported.getLength()-2] = FRM_SUN_COMPONENT_DATABASE_PATTERNFIELD;
138cdf0e10cSrcweir     pArray[aSupported.getLength()-1] = FRM_SUN_COMPONENT_PATTERNFIELD;
139cdf0e10cSrcweir     return aSupported;
140cdf0e10cSrcweir }
141cdf0e10cSrcweir 
142cdf0e10cSrcweir 
143cdf0e10cSrcweir //------------------------------------------------------------------------------
describeFixedProperties(Sequence<Property> & _rProps) const144cdf0e10cSrcweir void OPatternModel::describeFixedProperties( Sequence< Property >& _rProps ) const
145cdf0e10cSrcweir {
146cdf0e10cSrcweir     BEGIN_DESCRIBE_PROPERTIES( 4, OEditBaseModel )
147cdf0e10cSrcweir         DECL_PROP2(DEFAULT_TEXT,    ::rtl::OUString,    BOUND, MAYBEDEFAULT);
148cdf0e10cSrcweir         DECL_BOOL_PROP1(EMPTY_IS_NULL,                  BOUND);
149cdf0e10cSrcweir         DECL_PROP1(TABINDEX,        sal_Int16,          BOUND);
150cdf0e10cSrcweir         DECL_PROP2(FILTERPROPOSAL,  sal_Bool,           BOUND, MAYBEDEFAULT);
151cdf0e10cSrcweir     END_DESCRIBE_PROPERTIES();
152cdf0e10cSrcweir }
153cdf0e10cSrcweir 
154cdf0e10cSrcweir //------------------------------------------------------------------------------
getServiceName()155cdf0e10cSrcweir ::rtl::OUString SAL_CALL OPatternModel::getServiceName() throw ( ::com::sun::star::uno::RuntimeException)
156cdf0e10cSrcweir {
157cdf0e10cSrcweir     return FRM_COMPONENT_PATTERNFIELD;  // old (non-sun) name for compatibility !
158cdf0e10cSrcweir }
159cdf0e10cSrcweir 
160cdf0e10cSrcweir //------------------------------------------------------------------------------
commitControlValueToDbColumn(bool)161cdf0e10cSrcweir sal_Bool OPatternModel::commitControlValueToDbColumn( bool /*_bPostReset*/ )
162cdf0e10cSrcweir {
163cdf0e10cSrcweir     Any aNewValue( m_xAggregateFastSet->getFastPropertyValue( getValuePropertyAggHandle() ) );
164cdf0e10cSrcweir 
165cdf0e10cSrcweir     if ( aNewValue != m_aLastKnownValue )
166cdf0e10cSrcweir     {
167cdf0e10cSrcweir         ::rtl::OUString sNewValue;
168cdf0e10cSrcweir         aNewValue >>= sNewValue;
169cdf0e10cSrcweir 
170cdf0e10cSrcweir 		if  (   !aNewValue.hasValue()
171cdf0e10cSrcweir             ||  (   !sNewValue.getLength()      // an empty string
172cdf0e10cSrcweir                 &&  m_bEmptyIsNull              // which should be interpreted as NULL
173cdf0e10cSrcweir                 )
174cdf0e10cSrcweir             )
175cdf0e10cSrcweir         {
176cdf0e10cSrcweir             m_xColumnUpdate->updateNull();
177cdf0e10cSrcweir         }
178cdf0e10cSrcweir         else
179cdf0e10cSrcweir         {
180cdf0e10cSrcweir             OSL_ENSURE( m_pFormattedValue.get(), "OPatternModel::commitControlValueToDbColumn: no value helper!" );
181cdf0e10cSrcweir             if ( !m_pFormattedValue.get() )
182cdf0e10cSrcweir                 return sal_False;
183cdf0e10cSrcweir 
184cdf0e10cSrcweir             if ( !m_pFormattedValue->setFormattedValue( sNewValue ) )
185cdf0e10cSrcweir                 return sal_False;
186cdf0e10cSrcweir         }
187cdf0e10cSrcweir 
188cdf0e10cSrcweir         m_aLastKnownValue = aNewValue;
189cdf0e10cSrcweir     }
190cdf0e10cSrcweir 
191cdf0e10cSrcweir     return sal_True;
192cdf0e10cSrcweir }
193cdf0e10cSrcweir 
194cdf0e10cSrcweir //------------------------------------------------------------------------------
onConnectedDbColumn(const Reference<XInterface> & _rxForm)195cdf0e10cSrcweir void OPatternModel::onConnectedDbColumn( const Reference< XInterface >& _rxForm )
196cdf0e10cSrcweir {
197cdf0e10cSrcweir     OEditBaseModel::onConnectedDbColumn( _rxForm );
198cdf0e10cSrcweir 
199cdf0e10cSrcweir     Reference< XPropertySet > xField( getField() );
200cdf0e10cSrcweir     if ( !xField.is() )
201cdf0e10cSrcweir         return;
202cdf0e10cSrcweir 
203cdf0e10cSrcweir     m_pFormattedValue.reset( new ::dbtools::FormattedColumnValue( getContext(), Reference< XRowSet >( _rxForm, UNO_QUERY ), xField ) );
204cdf0e10cSrcweir }
205cdf0e10cSrcweir 
206cdf0e10cSrcweir //------------------------------------------------------------------------------
onDisconnectedDbColumn()207cdf0e10cSrcweir void OPatternModel::onDisconnectedDbColumn()
208cdf0e10cSrcweir {
209cdf0e10cSrcweir     OEditBaseModel::onDisconnectedDbColumn();
210cdf0e10cSrcweir     m_pFormattedValue.reset();
211cdf0e10cSrcweir }
212cdf0e10cSrcweir 
213cdf0e10cSrcweir // XPropertyChangeListener
214cdf0e10cSrcweir //------------------------------------------------------------------------------
translateDbColumnToControlValue()215cdf0e10cSrcweir Any OPatternModel::translateDbColumnToControlValue()
216cdf0e10cSrcweir {
217cdf0e10cSrcweir     OSL_PRECOND( m_pFormattedValue.get(), "OPatternModel::translateDbColumnToControlValue: no value helper!" );
218cdf0e10cSrcweir 
219cdf0e10cSrcweir     if ( m_pFormattedValue.get() )
220cdf0e10cSrcweir     {
221cdf0e10cSrcweir         ::rtl::OUString sValue( m_pFormattedValue->getFormattedValue() );
222cdf0e10cSrcweir         if  (   !sValue.getLength()
223cdf0e10cSrcweir             &&  m_pFormattedValue->getColumn().is()
224cdf0e10cSrcweir             &&  m_pFormattedValue->getColumn()->wasNull()
225cdf0e10cSrcweir             )
226cdf0e10cSrcweir         {
227cdf0e10cSrcweir             m_aLastKnownValue.clear();
228cdf0e10cSrcweir         }
229cdf0e10cSrcweir         else
230cdf0e10cSrcweir         {
231cdf0e10cSrcweir 	        m_aLastKnownValue <<= sValue;
232cdf0e10cSrcweir         }
233cdf0e10cSrcweir     }
234cdf0e10cSrcweir     else
235cdf0e10cSrcweir         m_aLastKnownValue.clear();
236cdf0e10cSrcweir 
237cdf0e10cSrcweir     return m_aLastKnownValue.hasValue() ? m_aLastKnownValue : makeAny( ::rtl::OUString() );
238cdf0e10cSrcweir         // (m_aLastKnownValue is alllowed to be VOID, the control value isn't)
239cdf0e10cSrcweir }
240cdf0e10cSrcweir 
241cdf0e10cSrcweir // XReset
242cdf0e10cSrcweir //------------------------------------------------------------------------------
getDefaultForReset() const243cdf0e10cSrcweir Any OPatternModel::getDefaultForReset() const
244cdf0e10cSrcweir {
245cdf0e10cSrcweir     return makeAny( m_aDefaultText );
246cdf0e10cSrcweir }
247cdf0e10cSrcweir 
248cdf0e10cSrcweir //------------------------------------------------------------------------------
resetNoBroadcast()249cdf0e10cSrcweir void OPatternModel::resetNoBroadcast()
250cdf0e10cSrcweir {
251cdf0e10cSrcweir     OEditBaseModel::resetNoBroadcast();
252cdf0e10cSrcweir     m_aLastKnownValue.clear();
253cdf0e10cSrcweir }
254cdf0e10cSrcweir 
255cdf0e10cSrcweir //.........................................................................
256cdf0e10cSrcweir }   // namespace frm
257cdf0e10cSrcweir //.........................................................................
258cdf0e10cSrcweir 
259