xref: /trunk/main/forms/source/component/Grid.hxx (revision cdf0e10c4e3984b49a9502b011690b615761d4a3)
1 /*************************************************************************
2  *
3  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4  *
5  * Copyright 2000, 2010 Oracle and/or its affiliates.
6  *
7  * OpenOffice.org - a multi-platform office productivity suite
8  *
9  * This file is part of OpenOffice.org.
10  *
11  * OpenOffice.org is free software: you can redistribute it and/or modify
12  * it under the terms of the GNU Lesser General Public License version 3
13  * only, as published by the Free Software Foundation.
14  *
15  * OpenOffice.org is distributed in the hope that it will be useful,
16  * but WITHOUT ANY WARRANTY; without even the implied warranty of
17  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
18  * GNU Lesser General Public License version 3 for more details
19  * (a copy is included in the LICENSE file that accompanied this code).
20  *
21  * You should have received a copy of the GNU Lesser General Public License
22  * version 3 along with OpenOffice.org.  If not, see
23  * <http://www.openoffice.org/license.html>
24  * for a copy of the LGPLv3 License.
25  *
26  ************************************************************************/
27 
28 #include "errorbroadcaster.hxx"
29 #include "FormComponent.hxx"
30 #include "formcontrolfont.hxx"
31 #include "InterfaceContainer.hxx"
32 
33 /** === begin UNO includes === **/
34 #include <com/sun/star/form/XGridColumnFactory.hpp>
35 #include <com/sun/star/form/XLoadable.hpp>
36 #include <com/sun/star/sdb/XRowSetSupplier.hpp>
37 #include <com/sun/star/sdb/XRowSetChangeBroadcaster.hpp>
38 #include <com/sun/star/view/XSelectionSupplier.hpp>
39 /** === end UNO includes === **/
40 
41 #include <comphelper/proparrhlp.hxx>
42 #include <cppuhelper/implbase7.hxx>
43 #include <tools/link.hxx>
44 
45 //.........................................................................
46 namespace frm
47 {
48 //.........................................................................
49 
50 class OGridColumn;
51 
52 //==================================================================
53 // ColumnDescription
54 //==================================================================
55 
56     struct ColumnDescription : public ElementDescription
57     {
58     public:
59         OGridColumn*                pColumn;        // not owned by this instance! only to prevent duplicate XUnoTunnel usage
60     };
61 
62 //==================================================================
63 // OGridControlModel
64 //==================================================================
65 typedef ::cppu::ImplHelper7 <   ::com::sun::star::awt::XControlModel
66                             ,   ::com::sun::star::form::XGridColumnFactory
67                             ,   ::com::sun::star::form::XReset
68                             ,   ::com::sun::star::view::XSelectionSupplier
69                             ,   ::com::sun::star::sdb::XSQLErrorListener
70                             ,   ::com::sun::star::sdb::XRowSetSupplier
71                             ,   ::com::sun::star::sdb::XRowSetChangeBroadcaster
72                             >   OGridControlModel_BASE;
73 
74 class OGridControlModel :public OControlModel
75                         ,public OInterfaceContainer
76                         ,public OErrorBroadcaster
77                         ,public FontControlModel
78                         ,public OGridControlModel_BASE
79 {
80     ::cppu::OInterfaceContainerHelper       m_aSelectListeners,
81                                             m_aResetListeners,
82                                             m_aRowSetChangeListeners;
83 
84 // [properties]
85     ::com::sun::star::uno::Any              m_aRowHeight;           // Zeilenhoehe
86     ::com::sun::star::uno::Any              m_aTabStop;
87     ::com::sun::star::uno::Any              m_aBackgroundColor;
88     ::com::sun::star::uno::Any              m_aCursorColor;             // transient
89     ::com::sun::star::uno::Any              m_aBorderColor;
90     ::rtl::OUString                         m_aDefaultControl;
91     ::rtl::OUString                         m_sHelpText;
92 // [properties]
93 
94     ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySet >       m_xSelection;
95 
96 // [properties]
97     ::rtl::OUString             m_sHelpURL;                 // URL
98     sal_Int16                   m_nBorder;
99     sal_Int16                   m_nWritingMode;
100     sal_Int16                   m_nContextWritingMode;
101     sal_Bool                    m_bEnableVisible    : 1;
102     sal_Bool                    m_bEnable           : 1;
103     sal_Bool                    m_bNavigation       : 1;
104     sal_Bool                    m_bRecordMarker     : 1;
105     sal_Bool                    m_bPrintable        : 1;
106     sal_Bool                    m_bAlwaysShowCursor : 1;    // transient
107     sal_Bool                    m_bDisplaySynchron  : 1;    // transient
108 // [properties]
109 
110 protected:
111     void _reset();
112 
113 public:
114     DECLARE_DEFAULT_LEAF_XTOR( OGridControlModel );
115 
116     // UNO Anbindung
117     DECLARE_UNO3_AGG_DEFAULTS(OGridControlModel, OControlModel);
118     virtual ::com::sun::star::uno::Any SAL_CALL queryAggregation( const ::com::sun::star::uno::Type& _rType ) throw (::com::sun::star::uno::RuntimeException);
119 
120     // XChild
121     virtual void SAL_CALL setParent(const InterfaceRef& Parent) throw(::com::sun::star::lang::NoSupportException, ::com::sun::star::uno::RuntimeException);
122 
123     // XServiceInfo
124     IMPLEMENTATION_NAME(OGridControlModel);
125     virtual StringSequence SAL_CALL getSupportedServiceNames() throw(::com::sun::star::uno::RuntimeException);
126 
127     // XTypeProvider
128     virtual ::com::sun::star::uno::Sequence< ::com::sun::star::uno::Type > SAL_CALL getTypes(  ) throw(::com::sun::star::uno::RuntimeException);
129 
130     // OComponentHelper
131     virtual void SAL_CALL disposing();
132 
133     // XEventListener
134     virtual void SAL_CALL disposing(const ::com::sun::star::lang::EventObject& _rSource) throw(::com::sun::star::uno::RuntimeException);
135 
136     // XReset
137     virtual void SAL_CALL reset() throw ( ::com::sun::star::uno::RuntimeException);
138     virtual void SAL_CALL addResetListener(const ::com::sun::star::uno::Reference< ::com::sun::star::form::XResetListener>& _rxListener) throw ( ::com::sun::star::uno::RuntimeException);
139     virtual void SAL_CALL removeResetListener(const ::com::sun::star::uno::Reference< ::com::sun::star::form::XResetListener>& _rxListener) throw ( ::com::sun::star::uno::RuntimeException);
140 
141     // XSelectionSupplier
142     virtual sal_Bool SAL_CALL select(const ::com::sun::star::uno::Any& aElement) throw(::com::sun::star::lang::IllegalArgumentException, ::com::sun::star::uno::RuntimeException);
143     virtual ::com::sun::star::uno::Any SAL_CALL getSelection() throw(::com::sun::star::uno::RuntimeException);
144     virtual void SAL_CALL addSelectionChangeListener(const ::com::sun::star::uno::Reference< ::com::sun::star::view::XSelectionChangeListener >& xListener) throw(::com::sun::star::uno::RuntimeException);
145     virtual void SAL_CALL removeSelectionChangeListener(const ::com::sun::star::uno::Reference< ::com::sun::star::view::XSelectionChangeListener >& xListener) throw(::com::sun::star::uno::RuntimeException);
146 
147     // XGridColumnFactory
148     virtual ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySet> SAL_CALL createColumn(const ::rtl::OUString& ColumnType) throw ( :: com::sun::star::lang::IllegalArgumentException, ::com::sun::star::uno::RuntimeException);
149     virtual StringSequence SAL_CALL getColumnTypes() throw ( ::com::sun::star::uno::RuntimeException);
150 
151     // XPersistObject
152     virtual ::rtl::OUString SAL_CALL getServiceName() throw ( ::com::sun::star::uno::RuntimeException);
153     virtual void SAL_CALL write(const ::com::sun::star::uno::Reference< ::com::sun::star::io::XObjectOutputStream>& _rxOutStream) throw ( ::com::sun::star::io::IOException, ::com::sun::star::uno::RuntimeException);
154     virtual void SAL_CALL read(const ::com::sun::star::uno::Reference< ::com::sun::star::io::XObjectInputStream>& _rxInStream) throw ( ::com::sun::star::io::IOException, ::com::sun::star::uno::RuntimeException);
155 
156     // XPropertySet
157     virtual void SAL_CALL getFastPropertyValue(::com::sun::star::uno::Any& rValue, sal_Int32 nHandle ) const;
158     virtual sal_Bool SAL_CALL convertFastPropertyValue(::com::sun::star::uno::Any& rConvertedValue, ::com::sun::star::uno::Any& rOldValue,
159                                           sal_Int32 nHandle, const ::com::sun::star::uno::Any& rValue )
160                                         throw(::com::sun::star::lang::IllegalArgumentException);
161     virtual void SAL_CALL setFastPropertyValue_NoBroadcast(sal_Int32 nHandle, const ::com::sun::star::uno::Any& rValue) throw ( ::com::sun::star::uno::Exception);
162 
163     // XPropertyState
164     virtual ::com::sun::star::uno::Any getPropertyDefaultByHandle( sal_Int32 nHandle ) const;
165 
166     // XSQLErrorListener
167     virtual void SAL_CALL errorOccured( const ::com::sun::star::sdb::SQLErrorEvent& _rEvent ) throw (::com::sun::star::uno::RuntimeException);
168 
169     // XRowSetSupplier
170     virtual ::com::sun::star::uno::Reference< ::com::sun::star::sdbc::XRowSet > SAL_CALL getRowSet(  ) throw (::com::sun::star::uno::RuntimeException);
171     virtual void SAL_CALL setRowSet( const ::com::sun::star::uno::Reference< ::com::sun::star::sdbc::XRowSet >& xDataSource ) throw (::com::sun::star::uno::RuntimeException);
172 
173     // XRowSetChangeBroadcaster
174     virtual void SAL_CALL addRowSetChangeListener( const ::com::sun::star::uno::Reference< ::com::sun::star::sdb::XRowSetChangeListener >& i_Listener ) throw (::com::sun::star::uno::RuntimeException);
175     virtual void SAL_CALL removeRowSetChangeListener( const ::com::sun::star::uno::Reference< ::com::sun::star::sdb::XRowSetChangeListener >& i_Listener ) throw (::com::sun::star::uno::RuntimeException);
176 
177     // OControlModel's property handling
178     virtual void describeFixedProperties(
179         ::com::sun::star::uno::Sequence< ::com::sun::star::beans::Property >& /* [out] */ _rProps
180     ) const;
181 
182     // prevent method hiding
183     using OControlModel::disposing;
184     using OControlModel::getFastPropertyValue;
185 
186 protected:
187     DECLARE_XCLONEABLE();
188 
189 protected:
190     virtual void approveNewElement(
191             const ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySet >& _rxObject,
192             ElementDescription* _pElement
193         );
194 
195     ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySet>  createColumn(sal_Int32 nTypeId) const;
196 
197     OGridColumn* getColumnImplementation(const InterfaceRef& _rxIFace) const;
198 
199     virtual ElementDescription* createElementMetaData( );
200 
201 protected:
202     virtual void implRemoved(const InterfaceRef& _rxObject);
203     virtual void implInserted( const ElementDescription* _pElement );
204     virtual void impl_replacedElement(
205                     const ::com::sun::star::container::ContainerEvent& _rEvent,
206                     ::osl::ClearableMutexGuard& _rInstanceLock
207                 );
208 
209     void gotColumn(const ::com::sun::star::uno::Reference< ::com::sun::star::uno::XInterface >& _rxColumn);
210     void lostColumn(const ::com::sun::star::uno::Reference< ::com::sun::star::uno::XInterface >& _rxColumn);
211 
212     void cloneColumns( const OGridControlModel* _pOriginalContainer );
213 };
214 
215 //.........................................................................
216 }   // namespace frm
217 //.........................................................................
218 
219 
220