xref: /trunk/main/sc/inc/cellsuno.hxx (revision 38d50f7b)
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 SC_CELLSUNO_HXX
25 #define SC_CELLSUNO_HXX
26 
27 #include "global.hxx"			// ScRange, ScAddress
28 #include "rangelst.hxx"			// ScRangeList
29 
30 #include "formula/grammar.hxx"
31 #include <svl/lstner.hxx>
32 #include <svl/listener.hxx>
33 #include <svl/itemprop.hxx>
34 #include <com/sun/star/table/XTableChartsSupplier.hpp>
35 #include <com/sun/star/chart/XChartDataArray.hpp>
36 #include <com/sun/star/text/XTextFieldsSupplier.hpp>
37 #include <com/sun/star/drawing/XDrawPageSupplier.hpp>
38 #include <com/sun/star/sheet/XSheetCellRange.hpp>
39 #include <com/sun/star/sheet/XFormulaQuery.hpp>
40 #include <com/sun/star/sheet/XCellRangeAddressable.hpp>
41 #include <com/sun/star/sheet/XSheetOperation.hpp>
42 #include <com/sun/star/sheet/XSheetCellRangeContainer.hpp>
43 #include <com/sun/star/sheet/XCellFormatRangesSupplier.hpp>
44 #include <com/sun/star/sheet/XUniqueCellFormatRangesSupplier.hpp>
45 #include <com/sun/star/sheet/XCellRangesQuery.hpp>
46 #include <com/sun/star/sheet/XSheetFilterableEx.hpp>
47 #include <com/sun/star/sheet/XSpreadsheet.hpp>
48 #include <com/sun/star/sheet/XSheetPageBreak.hpp>
49 #include <com/sun/star/sheet/XCellRangeMovement.hpp>
50 #include <com/sun/star/text/XText.hpp>
51 #include <com/sun/star/sheet/XPrintAreas.hpp>
52 #include <com/sun/star/sheet/XSheetLinkable.hpp>
53 #include <com/sun/star/sheet/XSubTotalCalculatable.hpp>
54 #include <com/sun/star/sheet/XArrayFormulaRange.hpp>
55 #include <com/sun/star/sheet/XCellRangeData.hpp>
56 #include <com/sun/star/sheet/XCellRangeFormula.hpp>
57 #include <com/sun/star/sheet/XCellSeries.hpp>
58 #include <com/sun/star/sheet/XMultipleOperation.hpp>
59 #include <com/sun/star/sheet/XFormulaTokens.hpp>
60 #include <com/sun/star/sheet/XArrayFormulaTokens.hpp>
61 #include <com/sun/star/sheet/XCellAddressable.hpp>
62 #include <com/sun/star/util/XReplaceable.hpp>
63 #include <com/sun/star/util/XIndent.hpp>
64 #include <com/sun/star/lang/XServiceInfo.hpp>
65 #include <com/sun/star/container/XNameContainer.hpp>
66 #include <com/sun/star/util/XMergeable.hpp>
67 #include <com/sun/star/table/XAutoFormattable.hpp>
68 #include <com/sun/star/util/XSortable.hpp>
69 #include <com/sun/star/util/XImportable.hpp>
70 #include <com/sun/star/table/XColumnRowRange.hpp>
71 #include <com/sun/star/table/BorderLine.hpp>
72 #include <com/sun/star/table/TableBorder.hpp>
73 #include <com/sun/star/sheet/XDataPilotTablesSupplier.hpp>
74 #include <com/sun/star/sheet/XSheetAnnotationAnchor.hpp>
75 #include <com/sun/star/sheet/XScenariosSupplier.hpp>
76 #include <com/sun/star/sheet/XSheetAnnotationsSupplier.hpp>
77 #include <com/sun/star/sheet/XSheetAuditing.hpp>
78 #include <com/sun/star/sheet/XSheetOutline.hpp>
79 #include <com/sun/star/util/XProtectable.hpp>
80 #include <com/sun/star/sheet/XScenario.hpp>
81 #include <com/sun/star/sheet/XScenarioEnhanced.hpp>
82 #include <com/sun/star/util/XModifyBroadcaster.hpp>
83 #include <com/sun/star/beans/XPropertyState.hpp>
84 #include <com/sun/star/beans/XMultiPropertySet.hpp>
85 #include <com/sun/star/lang/XUnoTunnel.hpp>
86 #include <com/sun/star/document/XActionLockable.hpp>
87 #include <com/sun/star/beans/XTolerantMultiPropertySet.hpp>
88 #include <com/sun/star/sheet/XExternalSheetName.hpp>
89 #include <com/sun/star/document/XEventsSupplier.hpp>
90 #include <cppuhelper/implbase2.hxx>
91 #include <cppuhelper/implbase3.hxx>
92 
93 #ifndef __SGI_STL_VECTOR
94 #include <vector>
95 #endif
96 
97 class ScDocShell;
98 class ScMarkData;
99 class ScMemChart;
100 class ScPrintRangeSaver;
101 class ScAttrRectIterator;
102 class ScCellRangeObj;
103 class SvxUnoText;
104 class ScLinkListener;
105 class ScPatternAttr;
106 class SvxBorderLine;
107 class SvxBoxItem;
108 class SvxBoxInfoItem;
109 class SvxItemPropertySet;
110 
111 class ScLinkListener : public SvtListener
112 {
113 	Link	aLink;
114 public:
ScLinkListener(const Link & rL)115 					ScLinkListener(const Link& rL) : aLink(rL) {}
116 	virtual			~ScLinkListener();
117 	virtual void	Notify( SvtBroadcaster& rBC, const SfxHint& rHint );
118 };
119 
120 typedef ::com::sun::star::uno::Reference<
121 			::com::sun::star::util::XModifyListener >* XModifyListenerPtr;
122 SV_DECL_PTRARR_DEL( XModifyListenerArr_Impl, XModifyListenerPtr, 4, 4 )
123 
124 class ScNamedEntry;
125 typedef ScNamedEntry* ScNamedEntryPtr;
126 SV_DECL_PTRARR_DEL( ScNamedEntryArr_Impl, ScNamedEntryPtr, 4, 4 )
127 
128 
129 //	ScCellRangesBase - Basisklasse fuer ScCellRangesObj (mit Index-Access)
130 //									und ScCellRangeObj (ohne Index-Access)
131 
132 //	XServiceInfo ist in den Ableitungen implementiert
133 
134 class ScHelperFunctions
135 {
136 public:
137     static const SvxBorderLine* GetBorderLine( SvxBorderLine& rLine, const com::sun::star::table::BorderLine& rStruct );
138     static void FillBoxItems( SvxBoxItem& rOuter, SvxBoxInfoItem& rInner, const com::sun::star::table::TableBorder& rBorder );
139     static void FillBorderLine( com::sun::star::table::BorderLine& rStruct, const SvxBorderLine* pLine );
140     static void FillTableBorder( com::sun::star::table::TableBorder& rBorder,
141 							const SvxBoxItem& rOuter, const SvxBoxInfoItem& rInner );
142     static void ApplyBorder( ScDocShell* pDocShell, const ScRangeList& rRanges,
143 						const SvxBoxItem& rOuter, const SvxBoxInfoItem& rInner );
144 };
145 
146 namespace ooo
147 {
148     namespace vba {
149         namespace excel {
150 	class ScVbaCellRangeAccess;  // Vba Helper class
151     }
152     }
153 }
154 
155 class SC_DLLPUBLIC ScCellRangesBase : public com::sun::star::beans::XPropertySet,
156 						 public com::sun::star::beans::XMultiPropertySet,
157 						 public com::sun::star::beans::XPropertyState,
158 						 public com::sun::star::sheet::XSheetOperation,
159 						 public com::sun::star::chart::XChartDataArray,
160 						 public com::sun::star::util::XIndent,
161 						 public com::sun::star::sheet::XCellRangesQuery,
162 						 public com::sun::star::sheet::XFormulaQuery,
163 						 public com::sun::star::util::XReplaceable,
164 						 public com::sun::star::util::XModifyBroadcaster,
165 						 public com::sun::star::lang::XServiceInfo,
166 						 public com::sun::star::lang::XUnoTunnel,
167 						 public com::sun::star::lang::XTypeProvider,
168                          public com::sun::star::beans::XTolerantMultiPropertySet,
169 						 public cppu::OWeakObject,
170 						 public SfxListener
171 {
172 	friend class ScTabViewObj;		// fuer select()
173 	friend class ScTableSheetObj;	// fuer createCursorByRange()
174  	friend class ooo::vba::excel::ScVbaCellRangeAccess;
175 
176 private:
177 	const SfxItemPropertySet* pPropSet;
178 	ScDocShell*				pDocShell;
179 	ScLinkListener*			pValueListener;
180 	ScPatternAttr*			pCurrentFlat;
181 	ScPatternAttr*			pCurrentDeep;
182 	SfxItemSet*				pCurrentDataSet;
183 	SfxItemSet*				pNoDfltCurrentDataSet;
184 	ScMarkData*				pMarkData;
185 	ScRangeList				aRanges;
186     sal_Int64               nObjectId;
187 	sal_Bool					bChartColAsHdr;
188 	sal_Bool					bChartRowAsHdr;
189 	sal_Bool					bCursorOnly;
190 	sal_Bool					bGotDataChangedHint;
191 	XModifyListenerArr_Impl aValueListeners;
192 
193 	DECL_LINK( ValueListenerHdl, SfxHint* );
194 
195 private:
196 	void			PaintRanges_Impl( sal_uInt16 nPart );
197 	ScRangeListRef	GetLimitedChartRanges_Impl( long nDataColumns, long nDataRows ) const;
198 	void			ForceChartListener_Impl();
199     ScMemChart*     CreateMemChart_Impl() const;
200 
201 	const ScPatternAttr*	GetCurrentAttrsFlat();
202 	const ScPatternAttr*	GetCurrentAttrsDeep();
203 	SfxItemSet*				GetCurrentDataSet(bool bNoDflt = false);
204     void                    ForgetMarkData();
205 	void					ForgetCurrentAttrs();
206 
207 	com::sun::star::uno::Reference<com::sun::star::sheet::XSheetCellRanges>
208 							QueryDifferences_Impl(const com::sun::star::table::CellAddress& aCompare,
209 													sal_Bool bColumnDiff);
210 	com::sun::star::uno::Reference<com::sun::star::uno::XInterface>
211 							Find_Impl(const com::sun::star::uno::Reference<
212 										com::sun::star::util::XSearchDescriptor>& xDesc,
213 									const ScAddress* pLastPos);
214 
215 protected:
216     const ScMarkData*       GetMarkData();
217 
218 	// GetItemPropertyMap for derived classes must contain all entries, including base class
219 	virtual const SfxItemPropertyMap* GetItemPropertyMap();
220 	virtual ::com::sun::star::beans::PropertyState GetOnePropertyState(
221                                 sal_uInt16 nItemWhich, const SfxItemPropertySimpleEntry* pEntry );
222     virtual void            GetOnePropertyValue( const SfxItemPropertySimpleEntry* pEntry,
223 								::com::sun::star::uno::Any& )
224 								throw(::com::sun::star::uno::RuntimeException);
225     virtual void            SetOnePropertyValue( const SfxItemPropertySimpleEntry* pEntry,
226 												const ::com::sun::star::uno::Any& aValue )
227 								throw(::com::sun::star::lang::IllegalArgumentException,
228 										::com::sun::star::uno::RuntimeException);
229 
230 public:
231 							ScCellRangesBase();		// fuer SMART_REFLECTION Krempel
232 							ScCellRangesBase(ScDocShell* pDocSh, const ScRange& rR);
233 							ScCellRangesBase(ScDocShell* pDocSh, const ScRangeList& rR);
234 	virtual					~ScCellRangesBase();
235 
236 	virtual ::com::sun::star::uno::Any SAL_CALL queryInterface(
237 								const ::com::sun::star::uno::Type & rType )
238 									throw(::com::sun::star::uno::RuntimeException);
239 	virtual void SAL_CALL	acquire() throw();
240 	virtual void SAL_CALL	release() throw();
241 
242 	virtual void			Notify( SfxBroadcaster& rBC, const SfxHint& rHint );
243 	virtual void			RefChanged();
244 
245 							// aus Ableitungen, aber auch per getImplementation
GetDocShell() const246 	ScDocShell*				GetDocShell() const		{ return pDocShell; }
247 	ScDocument*				GetDocument() const;
GetRangeList() const248 	const ScRangeList&		GetRangeList() const	{ return aRanges; }
249 	void					AddRange(const ScRange& rRange, const sal_Bool bMergeRanges);
250 
251 							// per Service erzeugtes Objekt zum Leben erwecken:
252 	void					InitInsertRange(ScDocShell* pDocSh, const ScRange& rR);
253 
254 	void					SetNewRange(const ScRange& rNew);	// fuer Cursor
255 	void					SetNewRanges(const ScRangeList& rNew);
256 
257 	void					SetCursorOnly(sal_Bool bSet);
IsCursorOnly() const258 	sal_Bool					IsCursorOnly() const			{ return bCursorOnly; }
259 
260 							// XSheetOperation
261 	virtual double SAL_CALL	computeFunction( ::com::sun::star::sheet::GeneralFunction nFunction )
262 								throw(::com::sun::star::uno::Exception,
263 										::com::sun::star::uno::RuntimeException);
264 	virtual void SAL_CALL	clearContents( sal_Int32 nContentFlags )
265 								throw(::com::sun::star::uno::RuntimeException);
266 
267 							// XPropertySet
268 	virtual ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySetInfo >
269 							SAL_CALL getPropertySetInfo()
270 								throw(::com::sun::star::uno::RuntimeException);
271 	virtual void SAL_CALL	setPropertyValue( const ::rtl::OUString& aPropertyName,
272 									const ::com::sun::star::uno::Any& aValue )
273 								throw(::com::sun::star::beans::UnknownPropertyException,
274 									::com::sun::star::beans::PropertyVetoException,
275 									::com::sun::star::lang::IllegalArgumentException,
276 									::com::sun::star::lang::WrappedTargetException,
277 									::com::sun::star::uno::RuntimeException);
278 	virtual ::com::sun::star::uno::Any SAL_CALL getPropertyValue(
279 									const ::rtl::OUString& PropertyName )
280 								throw(::com::sun::star::beans::UnknownPropertyException,
281 									::com::sun::star::lang::WrappedTargetException,
282 									::com::sun::star::uno::RuntimeException);
283 	virtual void SAL_CALL	addPropertyChangeListener( const ::rtl::OUString& aPropertyName,
284 									const ::com::sun::star::uno::Reference<
285 										::com::sun::star::beans::XPropertyChangeListener >& xListener )
286 								throw(::com::sun::star::beans::UnknownPropertyException,
287 									::com::sun::star::lang::WrappedTargetException,
288 									::com::sun::star::uno::RuntimeException);
289 	virtual void SAL_CALL	removePropertyChangeListener( const ::rtl::OUString& aPropertyName,
290 									const ::com::sun::star::uno::Reference<
291 										::com::sun::star::beans::XPropertyChangeListener >& aListener )
292 								throw(::com::sun::star::beans::UnknownPropertyException,
293 									::com::sun::star::lang::WrappedTargetException,
294 									::com::sun::star::uno::RuntimeException);
295 	virtual void SAL_CALL	addVetoableChangeListener( const ::rtl::OUString& PropertyName,
296 									const ::com::sun::star::uno::Reference<
297 										::com::sun::star::beans::XVetoableChangeListener >& aListener )
298 								throw(::com::sun::star::beans::UnknownPropertyException,
299 									::com::sun::star::lang::WrappedTargetException,
300 									::com::sun::star::uno::RuntimeException);
301 	virtual void SAL_CALL	removeVetoableChangeListener( const ::rtl::OUString& PropertyName,
302 									const ::com::sun::star::uno::Reference<
303 										::com::sun::star::beans::XVetoableChangeListener >& aListener )
304 								throw(::com::sun::star::beans::UnknownPropertyException,
305 									::com::sun::star::lang::WrappedTargetException,
306 									::com::sun::star::uno::RuntimeException);
307 
308 							// XMultiPropertySet
309 	virtual void SAL_CALL	setPropertyValues( const ::com::sun::star::uno::Sequence< ::rtl::OUString >& aPropertyNames,
310 									const ::com::sun::star::uno::Sequence< ::com::sun::star::uno::Any >& aValues )
311 								throw (::com::sun::star::beans::PropertyVetoException,
312 									::com::sun::star::lang::IllegalArgumentException,
313 									::com::sun::star::lang::WrappedTargetException,
314 									::com::sun::star::uno::RuntimeException);
315 	virtual ::com::sun::star::uno::Sequence< ::com::sun::star::uno::Any > SAL_CALL
316 							getPropertyValues( const ::com::sun::star::uno::Sequence< ::rtl::OUString >& aPropertyNames )
317 								throw (::com::sun::star::uno::RuntimeException);
318 	virtual void SAL_CALL addPropertiesChangeListener( const ::com::sun::star::uno::Sequence< ::rtl::OUString >& aPropertyNames,
319 									const ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertiesChangeListener >& xListener )
320 								throw (::com::sun::star::uno::RuntimeException);
321 	virtual void SAL_CALL removePropertiesChangeListener( const ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertiesChangeListener >& xListener )
322 								throw (::com::sun::star::uno::RuntimeException);
323 	virtual void SAL_CALL firePropertiesChangeEvent( const ::com::sun::star::uno::Sequence< ::rtl::OUString >& aPropertyNames,
324 									const ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertiesChangeListener >& xListener )
325 								throw (::com::sun::star::uno::RuntimeException);
326 
327                             // XTolerantMultiPropertySet
328     virtual ::com::sun::star::uno::Sequence< ::com::sun::star::beans::SetPropertyTolerantFailed > SAL_CALL
329         setPropertyValuesTolerant( const ::com::sun::star::uno::Sequence< ::rtl::OUString >& aPropertyNames,
330                                     const ::com::sun::star::uno::Sequence< ::com::sun::star::uno::Any >& aValues )
331                                     throw (::com::sun::star::lang::IllegalArgumentException, ::com::sun::star::uno::RuntimeException);
332     virtual ::com::sun::star::uno::Sequence< ::com::sun::star::beans::GetPropertyTolerantResult > SAL_CALL
333         getPropertyValuesTolerant( const ::com::sun::star::uno::Sequence< ::rtl::OUString >& aPropertyNames )
334                                     throw (::com::sun::star::uno::RuntimeException);
335     virtual ::com::sun::star::uno::Sequence< ::com::sun::star::beans::GetDirectPropertyTolerantResult > SAL_CALL
336         getDirectPropertyValuesTolerant( const ::com::sun::star::uno::Sequence< ::rtl::OUString >& aPropertyNames )
337                                     throw (::com::sun::star::uno::RuntimeException);
338 
339 							// XPropertyState
340 	virtual ::com::sun::star::beans::PropertyState SAL_CALL getPropertyState(
341 									const ::rtl::OUString& PropertyName )
342 								throw(::com::sun::star::beans::UnknownPropertyException,
343 									::com::sun::star::uno::RuntimeException);
344 	virtual ::com::sun::star::uno::Sequence< ::com::sun::star::beans::PropertyState > SAL_CALL
345 							getPropertyStates( const ::com::sun::star::uno::Sequence<
346 										::rtl::OUString >& aPropertyName )
347 								throw(::com::sun::star::beans::UnknownPropertyException,
348 									::com::sun::star::uno::RuntimeException);
349 	virtual void SAL_CALL	setPropertyToDefault( const ::rtl::OUString& PropertyName )
350 								throw(::com::sun::star::beans::UnknownPropertyException,
351 									::com::sun::star::uno::RuntimeException);
352 	virtual ::com::sun::star::uno::Any SAL_CALL getPropertyDefault(
353 									const ::rtl::OUString& aPropertyName )
354 								throw(::com::sun::star::beans::UnknownPropertyException,
355 									::com::sun::star::lang::WrappedTargetException,
356 									::com::sun::star::uno::RuntimeException);
357 
358 							// XIndent
359 	virtual void SAL_CALL	decrementIndent() throw(::com::sun::star::uno::RuntimeException);
360 	virtual void SAL_CALL	incrementIndent() throw(::com::sun::star::uno::RuntimeException);
361 
362 							// XChartData
363 	virtual void SAL_CALL	addChartDataChangeEventListener(
364 								const ::com::sun::star::uno::Reference<
365 									::com::sun::star::chart::XChartDataChangeEventListener >& aListener )
366 								throw(::com::sun::star::uno::RuntimeException);
367 	virtual void SAL_CALL	removeChartDataChangeEventListener( const ::com::sun::star::uno::Reference<
368 									::com::sun::star::chart::XChartDataChangeEventListener >& aListener )
369 								throw(::com::sun::star::uno::RuntimeException);
370 	virtual double SAL_CALL	getNotANumber() throw(::com::sun::star::uno::RuntimeException);
371 	virtual sal_Bool SAL_CALL isNotANumber( double nNumber )
372 								throw(::com::sun::star::uno::RuntimeException);
373 
374 							// XChartDataArray
375 	virtual ::com::sun::star::uno::Sequence< ::com::sun::star::uno::Sequence< double > > SAL_CALL
376 							getData() throw(::com::sun::star::uno::RuntimeException);
377 	virtual void SAL_CALL	setData( const ::com::sun::star::uno::Sequence<
378 								::com::sun::star::uno::Sequence< double > >& aData )
379 									throw(::com::sun::star::uno::RuntimeException);
380 	virtual ::com::sun::star::uno::Sequence< ::rtl::OUString > SAL_CALL getRowDescriptions()
381 								throw(::com::sun::star::uno::RuntimeException);
382 	virtual void SAL_CALL setRowDescriptions( const ::com::sun::star::uno::Sequence<
383 								::rtl::OUString >& aRowDescriptions )
384 									throw(::com::sun::star::uno::RuntimeException);
385 	virtual ::com::sun::star::uno::Sequence< ::rtl::OUString > SAL_CALL getColumnDescriptions()
386 								throw(::com::sun::star::uno::RuntimeException);
387 	virtual void SAL_CALL	setColumnDescriptions( const ::com::sun::star::uno::Sequence<
388 								::rtl::OUString >& aColumnDescriptions )
389 									throw(::com::sun::star::uno::RuntimeException);
390 
391 							// XCellRangesQuery
392 	virtual ::com::sun::star::uno::Reference< ::com::sun::star::sheet::XSheetCellRanges > SAL_CALL
393 							queryVisibleCells() throw(::com::sun::star::uno::RuntimeException);
394 	virtual ::com::sun::star::uno::Reference< ::com::sun::star::sheet::XSheetCellRanges > SAL_CALL
395 							queryEmptyCells() throw(::com::sun::star::uno::RuntimeException);
396 	virtual ::com::sun::star::uno::Reference< ::com::sun::star::sheet::XSheetCellRanges > SAL_CALL
397 							queryContentCells( sal_Int16 nContentFlags )
398 								throw(::com::sun::star::uno::RuntimeException);
399 	virtual ::com::sun::star::uno::Reference< ::com::sun::star::sheet::XSheetCellRanges > SAL_CALL
400 							queryFormulaCells( sal_Int32 nResultFlags )
401 								throw(::com::sun::star::uno::RuntimeException);
402 	virtual ::com::sun::star::uno::Reference< ::com::sun::star::sheet::XSheetCellRanges > SAL_CALL
403 							queryColumnDifferences(
404 								const ::com::sun::star::table::CellAddress& aCompare )
405 									throw(::com::sun::star::uno::RuntimeException);
406 	virtual ::com::sun::star::uno::Reference< ::com::sun::star::sheet::XSheetCellRanges > SAL_CALL
407 							queryRowDifferences(
408 								const ::com::sun::star::table::CellAddress& aCompare )
409 									throw(::com::sun::star::uno::RuntimeException);
410 	virtual ::com::sun::star::uno::Reference< ::com::sun::star::sheet::XSheetCellRanges > SAL_CALL
411 							queryIntersection(
412 								const ::com::sun::star::table::CellRangeAddress& aRange )
413 									throw(::com::sun::star::uno::RuntimeException);
414 
415 							// XFormulaQuery
416 	virtual ::com::sun::star::uno::Reference< ::com::sun::star::sheet::XSheetCellRanges > SAL_CALL
417 							queryDependents( sal_Bool bRecursive )
418 								throw(::com::sun::star::uno::RuntimeException);
419 	virtual ::com::sun::star::uno::Reference< ::com::sun::star::sheet::XSheetCellRanges > SAL_CALL
420 							queryPrecedents( sal_Bool bRecursive )
421 								throw(::com::sun::star::uno::RuntimeException);
422 
423 							// XSearchable
424 	virtual ::com::sun::star::uno::Reference< ::com::sun::star::util::XSearchDescriptor > SAL_CALL
425 							createSearchDescriptor()
426 								throw(::com::sun::star::uno::RuntimeException);
427 	virtual ::com::sun::star::uno::Reference< ::com::sun::star::container::XIndexAccess > SAL_CALL
428 							findAll( const ::com::sun::star::uno::Reference<
429 								::com::sun::star::util::XSearchDescriptor >& xDesc )
430 									throw(::com::sun::star::uno::RuntimeException);
431 	virtual ::com::sun::star::uno::Reference< ::com::sun::star::uno::XInterface > SAL_CALL
432 							findFirst( const ::com::sun::star::uno::Reference<
433 								::com::sun::star::util::XSearchDescriptor >& xDesc )
434 									throw(::com::sun::star::uno::RuntimeException);
435 	virtual ::com::sun::star::uno::Reference< ::com::sun::star::uno::XInterface > SAL_CALL
436 							findNext( const ::com::sun::star::uno::Reference<
437 										::com::sun::star::uno::XInterface >& xStartAt,
438 									  const ::com::sun::star::uno::Reference<
439 										::com::sun::star::util::XSearchDescriptor >& xDesc )
440 									throw(::com::sun::star::uno::RuntimeException);
441 
442 							// XReplaceable
443 	virtual ::com::sun::star::uno::Reference< ::com::sun::star::util::XReplaceDescriptor > SAL_CALL
444 							createReplaceDescriptor() throw(::com::sun::star::uno::RuntimeException);
445 	virtual sal_Int32 SAL_CALL replaceAll( const ::com::sun::star::uno::Reference<
446 								::com::sun::star::util::XSearchDescriptor >& xDesc )
447 									throw(::com::sun::star::uno::RuntimeException);
448 
449 							// XModifyBroadcaster
450 	virtual void SAL_CALL	addModifyListener( const ::com::sun::star::uno::Reference<
451 									::com::sun::star::util::XModifyListener >& aListener )
452 								throw (::com::sun::star::uno::RuntimeException);
453 	virtual void SAL_CALL	removeModifyListener( const ::com::sun::star::uno::Reference<
454 									::com::sun::star::util::XModifyListener >& aListener )
455 								throw (::com::sun::star::uno::RuntimeException);
456 
457 							// XServiceInfo
458 	virtual ::rtl::OUString SAL_CALL getImplementationName()
459 								throw(::com::sun::star::uno::RuntimeException);
460 	virtual sal_Bool SAL_CALL supportsService( const ::rtl::OUString& ServiceName )
461 								throw(::com::sun::star::uno::RuntimeException);
462 	virtual ::com::sun::star::uno::Sequence< ::rtl::OUString > SAL_CALL getSupportedServiceNames()
463 								throw(::com::sun::star::uno::RuntimeException);
464 
465 							// XUnoTunnel
466 	virtual sal_Int64 SAL_CALL getSomething( const ::com::sun::star::uno::Sequence<
467 									sal_Int8 >& aIdentifier )
468 								throw(::com::sun::star::uno::RuntimeException);
469 
470 	static const com::sun::star::uno::Sequence<sal_Int8>& getUnoTunnelId();
471 	static ScCellRangesBase* getImplementation( const com::sun::star::uno::Reference<
472 									com::sun::star::uno::XInterface> xObj );
473 
474 							// XTypeProvider
475 	virtual ::com::sun::star::uno::Sequence< ::com::sun::star::uno::Type > SAL_CALL getTypes()
476 								throw(::com::sun::star::uno::RuntimeException);
477 	virtual ::com::sun::star::uno::Sequence< sal_Int8 > SAL_CALL getImplementationId()
478 								throw(::com::sun::star::uno::RuntimeException);
479 };
480 
481 
482 class SC_DLLPUBLIC ScCellRangesObj : public ScCellRangesBase,
483 						public com::sun::star::sheet::XSheetCellRangeContainer,
484 						public com::sun::star::container::XNameContainer,
485 						public com::sun::star::container::XEnumerationAccess
486 {
487 private:
488 	ScNamedEntryArr_Impl	aNamedEntries;
489 
490     ScCellRangeObj*         GetObjectByIndex_Impl(sal_Int32 nIndex) const;
491 
492 public:
493 							ScCellRangesObj(ScDocShell* pDocSh, const ScRangeList& rR);
494 	virtual					~ScCellRangesObj();
495 
496 	virtual ::com::sun::star::uno::Any SAL_CALL queryInterface(
497 								const ::com::sun::star::uno::Type & rType )
498 									throw(::com::sun::star::uno::RuntimeException);
499 	virtual void SAL_CALL	acquire() throw();
500 	virtual void SAL_CALL	release() throw();
501 
502 	virtual void			RefChanged();
503 
504 							// XSheetCellRanges
505 	virtual ::com::sun::star::uno::Reference< ::com::sun::star::container::XEnumerationAccess > SAL_CALL
506 							getCells() throw(::com::sun::star::uno::RuntimeException);
507 	virtual ::rtl::OUString SAL_CALL getRangeAddressesAsString()
508 								throw(::com::sun::star::uno::RuntimeException);
509 	virtual ::com::sun::star::uno::Sequence< ::com::sun::star::table::CellRangeAddress > SAL_CALL
510 							getRangeAddresses() throw(::com::sun::star::uno::RuntimeException);
511 
512 							// XSheetCellRangeContainer
513 	virtual void SAL_CALL	addRangeAddress( const ::com::sun::star::table::CellRangeAddress& rRange,
514 										sal_Bool bMergeRanges )
515 									throw(::com::sun::star::uno::RuntimeException);
516 	virtual void SAL_CALL	removeRangeAddress( const ::com::sun::star::table::CellRangeAddress& rRange )
517 								throw(::com::sun::star::container::NoSuchElementException,
518 									::com::sun::star::uno::RuntimeException);
519 	virtual void SAL_CALL	addRangeAddresses( const ::com::sun::star::uno::Sequence<
520 										::com::sun::star::table::CellRangeAddress >& rRanges,
521 										sal_Bool bMergeRanges )
522 									throw(::com::sun::star::uno::RuntimeException);
523 	virtual void SAL_CALL	removeRangeAddresses( const ::com::sun::star::uno::Sequence<
524 										::com::sun::star::table::CellRangeAddress >& rRanges )
525 								throw(::com::sun::star::container::NoSuchElementException,
526 									::com::sun::star::uno::RuntimeException);
527 
528 							// XNameContainer
529 	virtual void SAL_CALL	insertByName( const ::rtl::OUString& aName,
530 								const ::com::sun::star::uno::Any& aElement )
531 									throw(::com::sun::star::lang::IllegalArgumentException,
532 										::com::sun::star::container::ElementExistException,
533 										::com::sun::star::lang::WrappedTargetException,
534 										::com::sun::star::uno::RuntimeException);
535 	virtual void SAL_CALL	removeByName( const ::rtl::OUString& Name )
536 								throw(::com::sun::star::container::NoSuchElementException,
537 									::com::sun::star::lang::WrappedTargetException,
538 									::com::sun::star::uno::RuntimeException);
539 
540 							// XNameReplace
541 	virtual void SAL_CALL	replaceByName( const ::rtl::OUString& aName,
542 								const ::com::sun::star::uno::Any& aElement )
543 									throw(::com::sun::star::lang::IllegalArgumentException,
544 										::com::sun::star::container::NoSuchElementException,
545 										::com::sun::star::lang::WrappedTargetException,
546 										::com::sun::star::uno::RuntimeException);
547 
548 							// XNameAccess
549 	virtual ::com::sun::star::uno::Any SAL_CALL getByName( const ::rtl::OUString& aName )
550 								throw(::com::sun::star::container::NoSuchElementException,
551 									::com::sun::star::lang::WrappedTargetException,
552 									::com::sun::star::uno::RuntimeException);
553 	virtual ::com::sun::star::uno::Sequence< ::rtl::OUString > SAL_CALL getElementNames()
554 								throw(::com::sun::star::uno::RuntimeException);
555 	virtual sal_Bool SAL_CALL hasByName( const ::rtl::OUString& aName )
556 								throw(::com::sun::star::uno::RuntimeException);
557 
558 							// XIndexAccess
559 	virtual sal_Int32 SAL_CALL getCount() throw(::com::sun::star::uno::RuntimeException);
560 	virtual ::com::sun::star::uno::Any SAL_CALL getByIndex( sal_Int32 Index )
561 								throw(::com::sun::star::lang::IndexOutOfBoundsException,
562 									::com::sun::star::lang::WrappedTargetException,
563 									::com::sun::star::uno::RuntimeException);
564 
565 							// XElementAccess
566 	virtual ::com::sun::star::uno::Type SAL_CALL getElementType()
567 								throw(::com::sun::star::uno::RuntimeException);
568 	virtual sal_Bool SAL_CALL hasElements() throw(::com::sun::star::uno::RuntimeException);
569 
570 							// XEnumerationAccess
571 	virtual ::com::sun::star::uno::Reference< ::com::sun::star::container::XEnumeration > SAL_CALL
572 							createEnumeration() throw(::com::sun::star::uno::RuntimeException);
573 
574 							// XServiceInfo
575 	virtual ::rtl::OUString SAL_CALL getImplementationName()
576 								throw(::com::sun::star::uno::RuntimeException);
577 	virtual sal_Bool SAL_CALL supportsService( const ::rtl::OUString& ServiceName )
578 								throw(::com::sun::star::uno::RuntimeException);
579 	virtual ::com::sun::star::uno::Sequence< ::rtl::OUString > SAL_CALL getSupportedServiceNames()
580 								throw(::com::sun::star::uno::RuntimeException);
581 
582 							// XTypeProvider
583 	virtual ::com::sun::star::uno::Sequence< ::com::sun::star::uno::Type > SAL_CALL getTypes()
584 								throw(::com::sun::star::uno::RuntimeException);
585 	virtual ::com::sun::star::uno::Sequence< sal_Int8 > SAL_CALL getImplementationId()
586 								throw(::com::sun::star::uno::RuntimeException);
587 };
588 
589 
590 class SC_DLLPUBLIC ScCellRangeObj : public ScCellRangesBase,
591 					   public com::sun::star::sheet::XCellRangeAddressable,
592 					   public com::sun::star::sheet::XSheetCellRange,
593 					   public com::sun::star::sheet::XArrayFormulaRange,
594 					   public com::sun::star::sheet::XArrayFormulaTokens,
595 					   public com::sun::star::sheet::XCellRangeData,
596 					   public com::sun::star::sheet::XCellRangeFormula,
597 					   public com::sun::star::sheet::XMultipleOperation,
598 					   public com::sun::star::util::XMergeable,
599 					   public com::sun::star::sheet::XCellSeries,
600 					   public com::sun::star::table::XAutoFormattable,
601 					   public com::sun::star::util::XSortable,
602 					   public com::sun::star::sheet::XSheetFilterableEx,
603 					   public com::sun::star::sheet::XSubTotalCalculatable,
604 					   public com::sun::star::util::XImportable,
605 					   public com::sun::star::sheet::XCellFormatRangesSupplier,
606 					   public com::sun::star::sheet::XUniqueCellFormatRangesSupplier,
607 					   public com::sun::star::table::XColumnRowRange
608 {
609 private:
610 	const SfxItemPropertySet*		pRangePropSet;
611 	ScRange					aRange;
612 
613 protected:
GetRange() const614 	const ScRange&			GetRange() const	{ return aRange; }
615 	virtual const SfxItemPropertyMap* GetItemPropertyMap();
616     virtual void GetOnePropertyValue( const SfxItemPropertySimpleEntry* pEntry,
617 								::com::sun::star::uno::Any& )
618 								throw(::com::sun::star::uno::RuntimeException);
619     virtual void            SetOnePropertyValue( const SfxItemPropertySimpleEntry* pEntry,
620 												const ::com::sun::star::uno::Any& aValue )
621 								throw(::com::sun::star::lang::IllegalArgumentException,
622 										::com::sun::star::uno::RuntimeException);
623 
624 	::com::sun::star::uno::Reference< ::com::sun::star::table::XCell >
625 							GetCellByPosition_Impl( sal_Int32 nColumn, sal_Int32 nRow )
626 								throw(::com::sun::star::lang::IndexOutOfBoundsException,
627 									::com::sun::star::uno::RuntimeException);
628 
629             void            SetArrayFormula_Impl( const rtl::OUString& rFormula,
630                                 const rtl::OUString& rFormulaNmsp,
631                                 const formula::FormulaGrammar::Grammar eGrammar )
632                                     throw(::com::sun::star::uno::RuntimeException);
633 
634 public:
635 							ScCellRangeObj(ScDocShell* pDocSh, const ScRange& rR);
636 	virtual					~ScCellRangeObj();
637 
638 							// uses ObjectShell from document, if set (returns NULL otherwise)
639 	static com::sun::star::uno::Reference<com::sun::star::table::XCellRange>
640 							CreateRangeFromDoc( ScDocument* pDoc, const ScRange& rR );
641 
642 	virtual ::com::sun::star::uno::Any SAL_CALL queryInterface(
643 								const ::com::sun::star::uno::Type & rType )
644 									throw(::com::sun::star::uno::RuntimeException);
645 	virtual void SAL_CALL	acquire() throw();
646 	virtual void SAL_CALL	release() throw();
647 
648 	virtual void			RefChanged();
649 
650                             // via getImplementation()
651     virtual void            SetArrayFormulaWithGrammar( const ::rtl::OUString& rFormula,
652                                     const ::rtl::OUString& rFormulaNmsp,
653                                     const formula::FormulaGrammar::Grammar )
654                                 throw(::com::sun::star::uno::RuntimeException);
655 
656 	// XCellRange ist Basisklasse von XSheetCellRange und XSheetOperation
657 //	operator XCellRangeRef() const	{ return (XSheetCellRange*)this; }
658 
659 							// XCellRangeAddressable
660 	virtual ::com::sun::star::table::CellRangeAddress SAL_CALL getRangeAddress()
661 								throw(::com::sun::star::uno::RuntimeException);
662 
663 							// XSheetCellRange
664 	virtual ::com::sun::star::uno::Reference< ::com::sun::star::sheet::XSpreadsheet > SAL_CALL
665 							getSpreadsheet() throw(::com::sun::star::uno::RuntimeException);
666 
667 							// XArrayFormulaRange
668 	virtual ::rtl::OUString SAL_CALL getArrayFormula() throw(::com::sun::star::uno::RuntimeException);
669 	virtual void SAL_CALL 	setArrayFormula( const ::rtl::OUString& aFormula )
670 								throw(::com::sun::star::uno::RuntimeException);
671 
672                             // XArrayFormulaTokens
673     virtual ::com::sun::star::uno::Sequence< ::com::sun::star::sheet::FormulaToken > SAL_CALL getArrayTokens()
674                                 throw (::com::sun::star::uno::RuntimeException);
675     virtual void SAL_CALL   setArrayTokens( const ::com::sun::star::uno::Sequence<
676                                     ::com::sun::star::sheet::FormulaToken >& aTokens )
677                                 throw (::com::sun::star::uno::RuntimeException);
678 
679 							// XCellRangeData
680 	virtual ::com::sun::star::uno::Sequence< ::com::sun::star::uno::Sequence<
681 							::com::sun::star::uno::Any > > SAL_CALL getDataArray()
682 								throw(::com::sun::star::uno::RuntimeException);
683 	virtual void SAL_CALL	setDataArray( const ::com::sun::star::uno::Sequence<
684 								::com::sun::star::uno::Sequence<
685 									::com::sun::star::uno::Any > >& aArray )
686 								throw(::com::sun::star::uno::RuntimeException);
687 
688 							// XCellRangeFormula
689 	virtual ::com::sun::star::uno::Sequence< ::com::sun::star::uno::Sequence<
690 							::rtl::OUString > > SAL_CALL getFormulaArray()
691 								throw (::com::sun::star::uno::RuntimeException);
692 	virtual void SAL_CALL	setFormulaArray( const ::com::sun::star::uno::Sequence<
693 								::com::sun::star::uno::Sequence< ::rtl::OUString > >& aArray )
694 								throw (::com::sun::star::uno::RuntimeException);
695 
696 							// XMultipleOperation
697 	virtual void SAL_CALL	setTableOperation(
698 								const ::com::sun::star::table::CellRangeAddress& aFormulaRange,
699 								::com::sun::star::sheet::TableOperationMode nMode,
700 								const ::com::sun::star::table::CellAddress& aColumnCell,
701 								const ::com::sun::star::table::CellAddress& aRowCell )
702 									throw(::com::sun::star::uno::RuntimeException);
703 
704 							// XMergeable
705 	virtual void SAL_CALL	merge( sal_Bool bMerge ) throw(::com::sun::star::uno::RuntimeException);
706 	virtual sal_Bool SAL_CALL getIsMerged() throw(::com::sun::star::uno::RuntimeException);
707 
708 							// XCellSeries
709 	virtual void SAL_CALL	fillSeries( ::com::sun::star::sheet::FillDirection nFillDirection,
710 								::com::sun::star::sheet::FillMode nFillMode,
711 								::com::sun::star::sheet::FillDateMode nFillDateMode,
712 								double fStep, double fEndValue )
713 									throw(::com::sun::star::uno::RuntimeException);
714 	virtual void SAL_CALL	fillAuto( ::com::sun::star::sheet::FillDirection nFillDirection,
715 								sal_Int32 nSourceCount )
716 									throw(::com::sun::star::uno::RuntimeException);
717 
718 							// XAutoFormattable
719 	virtual void SAL_CALL	autoFormat( const ::rtl::OUString& aName )
720 								throw(::com::sun::star::lang::IllegalArgumentException,
721 									::com::sun::star::uno::RuntimeException);
722 
723 							// XSortable
724 	virtual ::com::sun::star::uno::Sequence< ::com::sun::star::beans::PropertyValue > SAL_CALL
725 							createSortDescriptor() throw(::com::sun::star::uno::RuntimeException);
726 	virtual void SAL_CALL	sort( const ::com::sun::star::uno::Sequence<
727 								::com::sun::star::beans::PropertyValue >& xDescriptor )
728 									throw(::com::sun::star::uno::RuntimeException);
729 
730 							// XSheetFilterableEx
731 	virtual ::com::sun::star::uno::Reference< ::com::sun::star::sheet::XSheetFilterDescriptor > SAL_CALL
732 							createFilterDescriptorByObject( const ::com::sun::star::uno::Reference<
733 								::com::sun::star::sheet::XSheetFilterable >& xObject )
734 									throw(::com::sun::star::uno::RuntimeException);
735 
736 							// XSheetFilterable
737 	virtual ::com::sun::star::uno::Reference< ::com::sun::star::sheet::XSheetFilterDescriptor > SAL_CALL
738 							createFilterDescriptor( sal_Bool bEmpty )
739 								throw(::com::sun::star::uno::RuntimeException);
740 	virtual void SAL_CALL	filter( const ::com::sun::star::uno::Reference<
741 								::com::sun::star::sheet::XSheetFilterDescriptor >& xDescriptor )
742 									throw(::com::sun::star::uno::RuntimeException);
743 
744 							// XSubTotalCalculatable
745 	virtual ::com::sun::star::uno::Reference< ::com::sun::star::sheet::XSubTotalDescriptor > SAL_CALL
746 							createSubTotalDescriptor( sal_Bool bEmpty )
747 								throw(::com::sun::star::uno::RuntimeException);
748 	virtual void SAL_CALL	applySubTotals( const ::com::sun::star::uno::Reference<
749 								::com::sun::star::sheet::XSubTotalDescriptor >& xDescriptor,
750 								sal_Bool bReplace ) throw(::com::sun::star::uno::RuntimeException);
751 	virtual void SAL_CALL	removeSubTotals() throw(::com::sun::star::uno::RuntimeException);
752 
753 							// XImportable
754 	virtual ::com::sun::star::uno::Sequence< ::com::sun::star::beans::PropertyValue > SAL_CALL
755 							createImportDescriptor( sal_Bool bEmpty )
756 								throw(::com::sun::star::uno::RuntimeException);
757 	virtual void SAL_CALL	doImport( const ::com::sun::star::uno::Sequence<
758 								::com::sun::star::beans::PropertyValue >& aDescriptor )
759 									throw(::com::sun::star::uno::RuntimeException);
760 
761 							// XCellFormatRangesSupplier
762 	virtual ::com::sun::star::uno::Reference< ::com::sun::star::container::XIndexAccess > SAL_CALL
763 							getCellFormatRanges() throw(::com::sun::star::uno::RuntimeException);
764 
765 							// XUniqueCellFormatRangesSupplier
766 	virtual ::com::sun::star::uno::Reference< ::com::sun::star::container::XIndexAccess > SAL_CALL
767 							getUniqueCellFormatRanges() throw(::com::sun::star::uno::RuntimeException);
768 
769 							// XColumnRowRange
770 	virtual ::com::sun::star::uno::Reference< ::com::sun::star::table::XTableColumns > SAL_CALL
771 							getColumns() throw(::com::sun::star::uno::RuntimeException);
772 	virtual ::com::sun::star::uno::Reference< ::com::sun::star::table::XTableRows > SAL_CALL
773 							getRows() throw(::com::sun::star::uno::RuntimeException);
774 
775 							// XCellRange
776 	virtual ::com::sun::star::uno::Reference< ::com::sun::star::table::XCell > SAL_CALL
777 							getCellByPosition( sal_Int32 nColumn, sal_Int32 nRow )
778 								throw(::com::sun::star::lang::IndexOutOfBoundsException,
779 									::com::sun::star::uno::RuntimeException);
780 	virtual ::com::sun::star::uno::Reference< ::com::sun::star::table::XCellRange > SAL_CALL
781 							getCellRangeByPosition( sal_Int32 nLeft, sal_Int32 nTop,
782 								sal_Int32 nRight, sal_Int32 nBottom )
783 									throw(::com::sun::star::lang::IndexOutOfBoundsException,
784 										::com::sun::star::uno::RuntimeException);
785 	virtual ::com::sun::star::uno::Reference< ::com::sun::star::table::XCellRange > SAL_CALL
786 							getCellRangeByName( const ::rtl::OUString& aRange )
787 								throw(::com::sun::star::uno::RuntimeException);
788 	::com::sun::star::uno::Reference< ::com::sun::star::table::XCellRange >
789 							getCellRangeByName( const ::rtl::OUString& aRange,  const ScAddress::Details& rDetails )
790 								throw(::com::sun::star::uno::RuntimeException);
791 
792 							// XPropertySet ueberladen wegen Range-Properties
793 	virtual ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySetInfo >
794 							SAL_CALL getPropertySetInfo()
795 								throw(::com::sun::star::uno::RuntimeException);
796 
797 							// XServiceInfo
798 	virtual ::rtl::OUString SAL_CALL getImplementationName()
799 								throw(::com::sun::star::uno::RuntimeException);
800 	virtual sal_Bool SAL_CALL supportsService( const ::rtl::OUString& ServiceName )
801 								throw(::com::sun::star::uno::RuntimeException);
802 	virtual ::com::sun::star::uno::Sequence< ::rtl::OUString > SAL_CALL getSupportedServiceNames()
803 								throw(::com::sun::star::uno::RuntimeException);
804 
805 							// XTypeProvider
806 	virtual ::com::sun::star::uno::Sequence< ::com::sun::star::uno::Type > SAL_CALL getTypes()
807 								throw(::com::sun::star::uno::RuntimeException);
808 	virtual ::com::sun::star::uno::Sequence< sal_Int8 > SAL_CALL getImplementationId()
809 								throw(::com::sun::star::uno::RuntimeException);
810 };
811 
812 
813 //!	really derive cell from range?
814 
815 class SC_DLLPUBLIC ScCellObj : public ScCellRangeObj,
816 				  public com::sun::star::text::XText,
817 				  public com::sun::star::container::XEnumerationAccess,
818 				  public com::sun::star::table::XCell,
819                   public com::sun::star::sheet::XFormulaTokens,
820 				  public com::sun::star::sheet::XCellAddressable,
821 				  public com::sun::star::sheet::XSheetAnnotationAnchor,
822 				  public com::sun::star::text::XTextFieldsSupplier,
823 					public com::sun::star::document::XActionLockable
824 {
825 private:
826 	SvxUnoText*				pUnoText;
827 	const SfxItemPropertySet*	pCellPropSet;
828 	ScAddress				aCellPos;
829 	sal_Int16				nActionLockCount;
830 
831 private:
832 	String		GetInputString_Impl(sal_Bool bEnglish) const;
833 	String		GetOutputString_Impl() const;
834 	void		SetString_Impl(const String& rString, sal_Bool bInterpret, sal_Bool bEnglish);
835 	double		GetValue_Impl() const;
836 	void		SetValue_Impl(double fValue);
837 	com::sun::star::table::CellContentType GetResultType_Impl();
838 
839 protected:
840 	virtual const SfxItemPropertyMap* GetItemPropertyMap();
841     virtual void GetOnePropertyValue( const SfxItemPropertySimpleEntry* pEntry,
842 								::com::sun::star::uno::Any& )
843 								throw(::com::sun::star::uno::RuntimeException);
844     virtual void            SetOnePropertyValue( const SfxItemPropertySimpleEntry* pEntry,
845 												const ::com::sun::star::uno::Any& aValue )
846 								throw(::com::sun::star::lang::IllegalArgumentException,
847 										::com::sun::star::uno::RuntimeException);
848 
849 public:
850     static const SvxItemPropertySet* GetEditPropertySet();
851     static const SfxItemPropertyMap* GetCellPropertyMap();
852 
853 							ScCellObj(ScDocShell* pDocSh, const ScAddress& rP);
854 	virtual					~ScCellObj();
855 
856 	virtual ::com::sun::star::uno::Any SAL_CALL queryInterface(
857 								const ::com::sun::star::uno::Type & rType )
858 									throw(::com::sun::star::uno::RuntimeException);
859 	virtual void SAL_CALL	acquire() throw();
860 	virtual void SAL_CALL	release() throw();
861 
862 	virtual void			RefChanged();
863 
864 	SvxUnoText&				GetUnoText();
865 
866 							// XML import needs to set results at formula cells,
867 							// not meant for any other purpose.
868 	void					SetFormulaResultString( const ::rtl::OUString& rResult );
869 	void					SetFormulaResultDouble( double fResult );
870     void                    SetFormulaWithGrammar( const ::rtl::OUString& rFormula,
871                                 const ::rtl::OUString& rFormulaNmsp, const formula::FormulaGrammar::Grammar );
GetPosition() const872 	const ScAddress&		GetPosition() const { return aCellPos; }
873 
874     void                    InputEnglishString( const ::rtl::OUString& rText );
875 
876 							// XText
877 	virtual void SAL_CALL	insertTextContent( const ::com::sun::star::uno::Reference<
878 									::com::sun::star::text::XTextRange >& xRange,
879 								const ::com::sun::star::uno::Reference<
880 									::com::sun::star::text::XTextContent >& xContent,
881 								sal_Bool bAbsorb )
882 									throw(::com::sun::star::lang::IllegalArgumentException,
883 									::com::sun::star::uno::RuntimeException);
884 	virtual void SAL_CALL	removeTextContent( const ::com::sun::star::uno::Reference<
885 								::com::sun::star::text::XTextContent >& xContent )
886 									throw(::com::sun::star::container::NoSuchElementException,
887 											::com::sun::star::uno::RuntimeException);
888 
889 							// XSimpleText
890 	virtual ::com::sun::star::uno::Reference< ::com::sun::star::text::XTextCursor > SAL_CALL
891 							createTextCursor() throw(::com::sun::star::uno::RuntimeException);
892 	virtual ::com::sun::star::uno::Reference< ::com::sun::star::text::XTextCursor > SAL_CALL
893 							createTextCursorByRange( const ::com::sun::star::uno::Reference<
894 										::com::sun::star::text::XTextRange >& aTextPosition )
895 									throw(::com::sun::star::uno::RuntimeException);
896 	virtual void SAL_CALL	insertString( const ::com::sun::star::uno::Reference<
897 										::com::sun::star::text::XTextRange >& xRange,
898 										const ::rtl::OUString& aString, sal_Bool bAbsorb )
899 									throw(::com::sun::star::uno::RuntimeException);
900 	virtual void SAL_CALL	insertControlCharacter( const ::com::sun::star::uno::Reference<
901 										::com::sun::star::text::XTextRange >& xRange,
902 										sal_Int16 nControlCharacter, sal_Bool bAbsorb )
903 									throw(::com::sun::star::lang::IllegalArgumentException,
904 										::com::sun::star::uno::RuntimeException);
905 
906 							// XTextRange
907 	virtual ::com::sun::star::uno::Reference< ::com::sun::star::text::XText > SAL_CALL
908 							getText() throw(::com::sun::star::uno::RuntimeException);
909 	virtual ::com::sun::star::uno::Reference< ::com::sun::star::text::XTextRange > SAL_CALL
910 							getStart() throw(::com::sun::star::uno::RuntimeException);
911 	virtual ::com::sun::star::uno::Reference< ::com::sun::star::text::XTextRange > SAL_CALL
912 							getEnd() throw(::com::sun::star::uno::RuntimeException);
913 	virtual ::rtl::OUString SAL_CALL getString() throw(::com::sun::star::uno::RuntimeException);
914 	virtual void SAL_CALL	setString( const ::rtl::OUString& aString )
915 									throw(::com::sun::star::uno::RuntimeException);
916 
917 							// XEnumerationAccess
918 	virtual ::com::sun::star::uno::Reference< ::com::sun::star::container::XEnumeration > SAL_CALL
919 							createEnumeration() throw(::com::sun::star::uno::RuntimeException);
920 
921 							// XElementAccess
922 	virtual ::com::sun::star::uno::Type SAL_CALL getElementType()
923 								throw(::com::sun::star::uno::RuntimeException);
924 	virtual sal_Bool SAL_CALL hasElements() throw(::com::sun::star::uno::RuntimeException);
925 
926 							// XCell
927 	virtual ::rtl::OUString SAL_CALL getFormula() throw(::com::sun::star::uno::RuntimeException);
928 	virtual void SAL_CALL	setFormula( const ::rtl::OUString& aFormula )
929 								throw(::com::sun::star::uno::RuntimeException);
930 	virtual double SAL_CALL getValue() throw(::com::sun::star::uno::RuntimeException);
931 	virtual void SAL_CALL	setValue( double nValue ) throw(::com::sun::star::uno::RuntimeException);
932 	virtual ::com::sun::star::table::CellContentType SAL_CALL getType()
933 								throw(::com::sun::star::uno::RuntimeException);
934 	virtual sal_Int32 SAL_CALL getError() throw(::com::sun::star::uno::RuntimeException);
935 
936                             // XFormulaTokens
937     virtual ::com::sun::star::uno::Sequence< ::com::sun::star::sheet::FormulaToken > SAL_CALL getTokens()
938                                 throw (::com::sun::star::uno::RuntimeException);
939     virtual void SAL_CALL   setTokens( const ::com::sun::star::uno::Sequence<
940                                     ::com::sun::star::sheet::FormulaToken >& aTokens )
941                                 throw (::com::sun::star::uno::RuntimeException);
942 
943 							// XCellAddressable
944 	virtual ::com::sun::star::table::CellAddress SAL_CALL getCellAddress()
945 								throw(::com::sun::star::uno::RuntimeException);
946 
947 							// XSheetAnnotationAnchor
948 	virtual ::com::sun::star::uno::Reference< ::com::sun::star::sheet::XSheetAnnotation > SAL_CALL
949 							getAnnotation() throw(::com::sun::star::uno::RuntimeException);
950 
951 							// XTextFieldsSupplier
952 	virtual ::com::sun::star::uno::Reference< ::com::sun::star::container::XEnumerationAccess > SAL_CALL
953 							getTextFields() throw(::com::sun::star::uno::RuntimeException);
954 	virtual ::com::sun::star::uno::Reference< ::com::sun::star::container::XNameAccess > SAL_CALL
955 							getTextFieldMasters() throw(::com::sun::star::uno::RuntimeException);
956 
957 							// XPropertySet ueberladen wegen Zell-Properties
958 	virtual ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySetInfo >
959 							SAL_CALL getPropertySetInfo()
960 								throw(::com::sun::star::uno::RuntimeException);
961 
962 							// XServiceInfo
963 	virtual ::rtl::OUString SAL_CALL getImplementationName()
964 								throw(::com::sun::star::uno::RuntimeException);
965 	virtual sal_Bool SAL_CALL supportsService( const ::rtl::OUString& ServiceName )
966 								throw(::com::sun::star::uno::RuntimeException);
967 	virtual ::com::sun::star::uno::Sequence< ::rtl::OUString > SAL_CALL getSupportedServiceNames()
968 								throw(::com::sun::star::uno::RuntimeException);
969 
970 							// XTypeProvider
971 	virtual ::com::sun::star::uno::Sequence< ::com::sun::star::uno::Type > SAL_CALL getTypes()
972 								throw(::com::sun::star::uno::RuntimeException);
973 	virtual ::com::sun::star::uno::Sequence< sal_Int8 > SAL_CALL getImplementationId()
974 								throw(::com::sun::star::uno::RuntimeException);
975 
976 							// XActionLockable
977 	virtual sal_Bool SAL_CALL isActionLocked() throw(::com::sun::star::uno::RuntimeException);
978 	virtual void SAL_CALL	addActionLock() throw(::com::sun::star::uno::RuntimeException);
979 	virtual void SAL_CALL	removeActionLock() throw(::com::sun::star::uno::RuntimeException);
980 	virtual void SAL_CALL	setActionLocks( sal_Int16 nLock )
981 								throw(::com::sun::star::uno::RuntimeException);
982 	virtual sal_Int16 SAL_CALL resetActionLocks() throw(::com::sun::star::uno::RuntimeException);
983 
984 	static String		GetOutputString_Impl(ScDocument* pDoc, const ScAddress& aPos);
985 };
986 
987 
988 class ScTableSheetObj : public ScCellRangeObj,
989 						public com::sun::star::sheet::XSpreadsheet,
990 						public com::sun::star::container::XNamed,
991 						public com::sun::star::sheet::XSheetPageBreak,
992 						public com::sun::star::sheet::XCellRangeMovement,
993 						public com::sun::star::table::XTableChartsSupplier,
994 						public com::sun::star::sheet::XDataPilotTablesSupplier,
995 						public com::sun::star::sheet::XScenariosSupplier,
996 						public com::sun::star::sheet::XSheetAnnotationsSupplier,
997 						public com::sun::star::drawing::XDrawPageSupplier,
998 						public com::sun::star::sheet::XPrintAreas,
999 						public com::sun::star::sheet::XSheetLinkable,
1000 						public com::sun::star::sheet::XSheetAuditing,
1001 						public com::sun::star::sheet::XSheetOutline,
1002 						public com::sun::star::util::XProtectable,
1003 						public com::sun::star::sheet::XScenario,
1004 						public com::sun::star::sheet::XScenarioEnhanced,
1005                         public com::sun::star::sheet::XExternalSheetName,
1006                         public com::sun::star::document::XEventsSupplier
1007 {
1008 	friend class ScTableSheetsObj;		// fuer insertByName()
1009 
1010 private:
1011 	const SfxItemPropertySet*		pSheetPropSet;
1012 
1013 	SCTAB					GetTab_Impl() const;
1014 	void					PrintAreaUndo_Impl( ScPrintRangeSaver* pOldRanges );
1015 
1016 protected:
1017 	virtual const SfxItemPropertyMap* GetItemPropertyMap();
1018     virtual void GetOnePropertyValue( const SfxItemPropertySimpleEntry* pEntry,
1019 								::com::sun::star::uno::Any& )
1020 								throw(::com::sun::star::uno::RuntimeException);
1021     virtual void            SetOnePropertyValue( const SfxItemPropertySimpleEntry* pEntry,
1022 												const ::com::sun::star::uno::Any& aValue )
1023 								throw(::com::sun::star::lang::IllegalArgumentException,
1024 										::com::sun::star::uno::RuntimeException);
1025 
1026 public:
1027 							ScTableSheetObj(ScDocShell* pDocSh, SCTAB nTab);
1028 	virtual					~ScTableSheetObj();
1029 
1030 	void					InitInsertSheet(ScDocShell* pDocSh, SCTAB nTab);
1031 
1032 	virtual ::com::sun::star::uno::Any SAL_CALL queryInterface(
1033 								const ::com::sun::star::uno::Type & rType )
1034 									throw(::com::sun::star::uno::RuntimeException);
1035 	virtual void SAL_CALL	acquire() throw();
1036 	virtual void SAL_CALL	release() throw();
1037 
1038 							// XSpreadsheet
1039 	virtual ::com::sun::star::uno::Reference< ::com::sun::star::sheet::XSheetCellCursor >
1040 							SAL_CALL createCursor() throw(::com::sun::star::uno::RuntimeException);
1041 	virtual ::com::sun::star::uno::Reference< ::com::sun::star::sheet::XSheetCellCursor > SAL_CALL
1042 							createCursorByRange( const ::com::sun::star::uno::Reference<
1043 								::com::sun::star::sheet::XSheetCellRange >& aRange )
1044 									throw(::com::sun::star::uno::RuntimeException);
1045 
1046 							// XSheetCellRange
1047 	virtual ::com::sun::star::uno::Reference< ::com::sun::star::sheet::XSpreadsheet > SAL_CALL
1048 							getSpreadsheet() throw(::com::sun::star::uno::RuntimeException);
1049 
1050 							// XCellRange
1051 	virtual ::com::sun::star::uno::Reference< ::com::sun::star::table::XCell > SAL_CALL
1052 							getCellByPosition( sal_Int32 nColumn, sal_Int32 nRow )
1053 								throw(::com::sun::star::lang::IndexOutOfBoundsException,
1054 									::com::sun::star::uno::RuntimeException);
1055 	virtual ::com::sun::star::uno::Reference< ::com::sun::star::table::XCellRange > SAL_CALL
1056 							getCellRangeByPosition( sal_Int32 nLeft, sal_Int32 nTop,
1057 								sal_Int32 nRight, sal_Int32 nBottom )
1058 									throw(::com::sun::star::lang::IndexOutOfBoundsException,
1059 										::com::sun::star::uno::RuntimeException);
1060     using ScCellRangeObj::getCellRangeByName;
1061 	virtual ::com::sun::star::uno::Reference< ::com::sun::star::table::XCellRange > SAL_CALL
1062 							getCellRangeByName( const ::rtl::OUString& aRange )
1063 								throw(::com::sun::star::uno::RuntimeException);
1064 
1065 							// XNamed
1066 	virtual ::rtl::OUString SAL_CALL getName() throw(::com::sun::star::uno::RuntimeException);
1067 	virtual void SAL_CALL	setName( const ::rtl::OUString& aName )
1068 								throw(::com::sun::star::uno::RuntimeException);
1069 
1070 							// XSheetPageBreak
1071 	virtual ::com::sun::star::uno::Sequence< ::com::sun::star::sheet::TablePageBreakData > SAL_CALL
1072 							getColumnPageBreaks() throw(::com::sun::star::uno::RuntimeException);
1073 	virtual ::com::sun::star::uno::Sequence< ::com::sun::star::sheet::TablePageBreakData > SAL_CALL
1074 							getRowPageBreaks() throw(::com::sun::star::uno::RuntimeException);
1075 	virtual void SAL_CALL	removeAllManualPageBreaks() throw(::com::sun::star::uno::RuntimeException);
1076 
1077 							// XCellRangeMovement
1078 	virtual void SAL_CALL	insertCells( const ::com::sun::star::table::CellRangeAddress& aRange,
1079 								::com::sun::star::sheet::CellInsertMode nMode )
1080 									throw(::com::sun::star::uno::RuntimeException);
1081 	virtual void SAL_CALL	removeRange( const ::com::sun::star::table::CellRangeAddress& aRange,
1082 								::com::sun::star::sheet::CellDeleteMode nMode )
1083 									throw(::com::sun::star::uno::RuntimeException);
1084 	virtual void SAL_CALL	moveRange( const ::com::sun::star::table::CellAddress& aDestination,
1085 								const ::com::sun::star::table::CellRangeAddress& aSource )
1086 									throw(::com::sun::star::uno::RuntimeException);
1087 	virtual void SAL_CALL	copyRange( const ::com::sun::star::table::CellAddress& aDestination,
1088 								const ::com::sun::star::table::CellRangeAddress& aSource )
1089 									throw(::com::sun::star::uno::RuntimeException);
1090 
1091 							// XTableChartsSupplier
1092 	virtual ::com::sun::star::uno::Reference< ::com::sun::star::table::XTableCharts > SAL_CALL
1093 							getCharts() throw(::com::sun::star::uno::RuntimeException);
1094 
1095 							// XDataPilotTablesSupplier
1096 	virtual ::com::sun::star::uno::Reference< ::com::sun::star::sheet::XDataPilotTables > SAL_CALL
1097 							getDataPilotTables() throw(::com::sun::star::uno::RuntimeException);
1098 
1099 							// XScenariosSupplier
1100 	virtual ::com::sun::star::uno::Reference< ::com::sun::star::sheet::XScenarios > SAL_CALL
1101 							getScenarios() throw(::com::sun::star::uno::RuntimeException);
1102 
1103 							// XSheetAnnotationsSupplier
1104 	virtual ::com::sun::star::uno::Reference< ::com::sun::star::sheet::XSheetAnnotations > SAL_CALL
1105 							getAnnotations() throw(::com::sun::star::uno::RuntimeException);
1106 
1107 							// XDrawPageSupplier
1108 	virtual ::com::sun::star::uno::Reference< ::com::sun::star::drawing::XDrawPage > SAL_CALL
1109 							getDrawPage() throw(::com::sun::star::uno::RuntimeException);
1110 
1111 							// XPrintAreas
1112 	virtual ::com::sun::star::uno::Sequence< ::com::sun::star::table::CellRangeAddress > SAL_CALL
1113 							getPrintAreas() throw(::com::sun::star::uno::RuntimeException);
1114 	virtual void SAL_CALL setPrintAreas( const ::com::sun::star::uno::Sequence<
1115 								::com::sun::star::table::CellRangeAddress >& aPrintAreas )
1116 									throw(::com::sun::star::uno::RuntimeException);
1117 	virtual sal_Bool SAL_CALL getPrintTitleColumns() throw(::com::sun::star::uno::RuntimeException);
1118 	virtual void SAL_CALL	setPrintTitleColumns( sal_Bool bPrintTitleColumns )
1119 								throw(::com::sun::star::uno::RuntimeException);
1120 	virtual ::com::sun::star::table::CellRangeAddress SAL_CALL getTitleColumns()
1121 								throw(::com::sun::star::uno::RuntimeException);
1122 	virtual void SAL_CALL	setTitleColumns(
1123 								const ::com::sun::star::table::CellRangeAddress& aTitleColumns )
1124 									throw(::com::sun::star::uno::RuntimeException);
1125 	virtual sal_Bool SAL_CALL getPrintTitleRows() throw(::com::sun::star::uno::RuntimeException);
1126 	virtual void SAL_CALL	setPrintTitleRows( sal_Bool bPrintTitleRows )
1127 								throw(::com::sun::star::uno::RuntimeException);
1128 	virtual ::com::sun::star::table::CellRangeAddress SAL_CALL getTitleRows()
1129 								throw(::com::sun::star::uno::RuntimeException);
1130 	virtual void SAL_CALL	setTitleRows(
1131 								const ::com::sun::star::table::CellRangeAddress& aTitleRows )
1132 									throw(::com::sun::star::uno::RuntimeException);
1133 
1134 							// XSheetLinkable
1135 	virtual ::com::sun::star::sheet::SheetLinkMode SAL_CALL getLinkMode()
1136 								throw(::com::sun::star::uno::RuntimeException);
1137 	virtual void SAL_CALL	setLinkMode( ::com::sun::star::sheet::SheetLinkMode nLinkMode )
1138 								throw(::com::sun::star::uno::RuntimeException);
1139 	virtual ::rtl::OUString SAL_CALL getLinkUrl() throw(::com::sun::star::uno::RuntimeException);
1140 	virtual void SAL_CALL	setLinkUrl( const ::rtl::OUString& aLinkUrl )
1141 								throw(::com::sun::star::uno::RuntimeException);
1142 	virtual ::rtl::OUString SAL_CALL getLinkSheetName() throw(::com::sun::star::uno::RuntimeException);
1143 	virtual void SAL_CALL	setLinkSheetName( const ::rtl::OUString& aLinkSheetName )
1144 								throw(::com::sun::star::uno::RuntimeException);
1145 	virtual void SAL_CALL	link( const ::rtl::OUString& aUrl,
1146 								const ::rtl::OUString& aSheetName,
1147 								const ::rtl::OUString& aFilterName,
1148 								const ::rtl::OUString& aFilterOptions,
1149 								::com::sun::star::sheet::SheetLinkMode nMode )
1150 									throw(::com::sun::star::uno::RuntimeException);
1151 
1152 							// XSheetAuditing
1153 	virtual sal_Bool SAL_CALL hideDependents( const ::com::sun::star::table::CellAddress& aPosition )
1154 								throw(::com::sun::star::uno::RuntimeException);
1155 	virtual sal_Bool SAL_CALL hidePrecedents( const ::com::sun::star::table::CellAddress& aPosition )
1156 								throw(::com::sun::star::uno::RuntimeException);
1157 	virtual sal_Bool SAL_CALL showDependents( const ::com::sun::star::table::CellAddress& aPosition )
1158 								throw(::com::sun::star::uno::RuntimeException);
1159 	virtual sal_Bool SAL_CALL showPrecedents( const ::com::sun::star::table::CellAddress& aPosition )
1160 								throw(::com::sun::star::uno::RuntimeException);
1161 	virtual sal_Bool SAL_CALL showErrors( const ::com::sun::star::table::CellAddress& aPosition )
1162 								throw(::com::sun::star::uno::RuntimeException);
1163 	virtual sal_Bool SAL_CALL showInvalid() throw(::com::sun::star::uno::RuntimeException);
1164 	virtual void SAL_CALL	clearArrows() throw(::com::sun::star::uno::RuntimeException);
1165 
1166 							// XSheetOutline
1167 	virtual void SAL_CALL	group( const ::com::sun::star::table::CellRangeAddress& aRange,
1168 								::com::sun::star::table::TableOrientation nOrientation )
1169 									throw(::com::sun::star::uno::RuntimeException);
1170 	virtual void SAL_CALL	ungroup( const ::com::sun::star::table::CellRangeAddress& aRange,
1171 								::com::sun::star::table::TableOrientation nOrientation )
1172 									throw(::com::sun::star::uno::RuntimeException);
1173 	virtual void SAL_CALL	autoOutline( const ::com::sun::star::table::CellRangeAddress& aRange )
1174 								throw(::com::sun::star::uno::RuntimeException);
1175 	virtual void SAL_CALL	clearOutline() throw(::com::sun::star::uno::RuntimeException);
1176 	virtual void SAL_CALL	hideDetail( const ::com::sun::star::table::CellRangeAddress& aRange )
1177 								throw(::com::sun::star::uno::RuntimeException);
1178 	virtual void SAL_CALL	showDetail( const ::com::sun::star::table::CellRangeAddress& aRange )
1179 								throw(::com::sun::star::uno::RuntimeException);
1180 	virtual void SAL_CALL	showLevel( sal_Int16 nLevel,
1181 								::com::sun::star::table::TableOrientation nOrientation )
1182 									throw(::com::sun::star::uno::RuntimeException);
1183 
1184 							// XProtectable
1185 	virtual void SAL_CALL	protect( const ::rtl::OUString& aPassword )
1186 								throw(::com::sun::star::uno::RuntimeException);
1187 	virtual void SAL_CALL	unprotect( const ::rtl::OUString& aPassword )
1188 								throw(::com::sun::star::lang::IllegalArgumentException,
1189 									::com::sun::star::uno::RuntimeException);
1190 	virtual sal_Bool SAL_CALL isProtected() throw(::com::sun::star::uno::RuntimeException);
1191 
1192 							// XScenario
1193 	virtual sal_Bool SAL_CALL getIsScenario() throw(::com::sun::star::uno::RuntimeException);
1194 	virtual ::rtl::OUString SAL_CALL getScenarioComment() throw(::com::sun::star::uno::RuntimeException);
1195 	virtual void SAL_CALL	setScenarioComment( const ::rtl::OUString& aScenarioComment )
1196 								throw(::com::sun::star::uno::RuntimeException);
1197 	virtual void SAL_CALL	addRanges( const ::com::sun::star::uno::Sequence<
1198 								::com::sun::star::table::CellRangeAddress >& aRanges )
1199 									throw(::com::sun::star::uno::RuntimeException);
1200 	virtual void SAL_CALL	apply() throw(::com::sun::star::uno::RuntimeException);
1201 							// XScenarioEnhanced
1202     virtual ::com::sun::star::uno::Sequence< ::com::sun::star::table::CellRangeAddress > SAL_CALL
1203                             getRanges(  )
1204                                     throw(::com::sun::star::uno::RuntimeException);
1205 
1206                             // XExternalSheetName
1207     virtual void SAL_CALL   setExternalName( const ::rtl::OUString& aUrl, const ::rtl::OUString& aSheetName )
1208                                 throw (::com::sun::star::container::ElementExistException,
1209                                        ::com::sun::star::uno::RuntimeException);
1210 
1211                             // XEventsSupplier
1212     virtual ::com::sun::star::uno::Reference< ::com::sun::star::container::XNameReplace > SAL_CALL getEvents()
1213                                 throw (::com::sun::star::uno::RuntimeException);
1214 
1215 							// XPropertySet ueberladen wegen Sheet-Properties
1216 	virtual ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySetInfo >
1217 							SAL_CALL getPropertySetInfo()
1218 								throw(::com::sun::star::uno::RuntimeException);
1219 
1220 							// XServiceInfo
1221 	virtual ::rtl::OUString SAL_CALL getImplementationName()
1222 								throw(::com::sun::star::uno::RuntimeException);
1223 	virtual sal_Bool SAL_CALL supportsService( const ::rtl::OUString& ServiceName )
1224 								throw(::com::sun::star::uno::RuntimeException);
1225 	virtual ::com::sun::star::uno::Sequence< ::rtl::OUString > SAL_CALL getSupportedServiceNames()
1226 								throw(::com::sun::star::uno::RuntimeException);
1227 
1228 							// XUnoTunnel
1229 	virtual sal_Int64 SAL_CALL getSomething( const ::com::sun::star::uno::Sequence<
1230 									sal_Int8 >& aIdentifier )
1231 								throw(::com::sun::star::uno::RuntimeException);
1232 
1233 	static const com::sun::star::uno::Sequence<sal_Int8>& getUnoTunnelId();
1234 	static ScTableSheetObj* getImplementation( const com::sun::star::uno::Reference<
1235 									com::sun::star::uno::XInterface> xObj );
1236 
1237 							// XTypeProvider
1238 	virtual ::com::sun::star::uno::Sequence< ::com::sun::star::uno::Type > SAL_CALL getTypes()
1239 								throw(::com::sun::star::uno::RuntimeException);
1240 	virtual ::com::sun::star::uno::Sequence< sal_Int8 > SAL_CALL getImplementationId()
1241 								throw(::com::sun::star::uno::RuntimeException);
1242 };
1243 
1244 
1245 class ScTableColumnObj : public ScCellRangeObj,
1246 						 public com::sun::star::container::XNamed
1247 {
1248 private:
1249 	const SfxItemPropertySet*		pColPropSet;
1250 
1251 protected:
1252 	virtual const SfxItemPropertyMap* GetItemPropertyMap();
1253     virtual void GetOnePropertyValue( const SfxItemPropertySimpleEntry* pEntry,
1254 								::com::sun::star::uno::Any& )
1255 								throw(::com::sun::star::uno::RuntimeException);
1256     virtual void            SetOnePropertyValue( const SfxItemPropertySimpleEntry* pEntry,
1257 												const ::com::sun::star::uno::Any& aValue )
1258 								throw(::com::sun::star::lang::IllegalArgumentException,
1259 										::com::sun::star::uno::RuntimeException);
1260 
1261 public:
1262 							ScTableColumnObj(ScDocShell* pDocSh, SCCOL nCol, SCTAB nTab);
1263 	virtual					~ScTableColumnObj();
1264 
1265 	virtual ::com::sun::star::uno::Any SAL_CALL queryInterface(
1266 								const ::com::sun::star::uno::Type & rType )
1267 									throw(::com::sun::star::uno::RuntimeException);
1268 	virtual void SAL_CALL	acquire() throw();
1269 	virtual void SAL_CALL	release() throw();
1270 
1271 							// XNamed
1272 	virtual ::rtl::OUString SAL_CALL getName() throw(::com::sun::star::uno::RuntimeException);
1273 	virtual void SAL_CALL	setName( const ::rtl::OUString& aName )
1274 								throw(::com::sun::star::uno::RuntimeException);
1275 
1276 							// XPropertySet ueberladen wegen Spalten-Properties
1277 	virtual ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySetInfo >
1278 							SAL_CALL getPropertySetInfo()
1279 								throw(::com::sun::star::uno::RuntimeException);
1280 
1281 							// XServiceInfo
1282 	virtual ::rtl::OUString SAL_CALL getImplementationName()
1283 								throw(::com::sun::star::uno::RuntimeException);
1284 	virtual sal_Bool SAL_CALL supportsService( const ::rtl::OUString& ServiceName )
1285 								throw(::com::sun::star::uno::RuntimeException);
1286 	virtual ::com::sun::star::uno::Sequence< ::rtl::OUString > SAL_CALL getSupportedServiceNames()
1287 								throw(::com::sun::star::uno::RuntimeException);
1288 
1289 							// XTypeProvider
1290 	virtual ::com::sun::star::uno::Sequence< ::com::sun::star::uno::Type > SAL_CALL getTypes()
1291 								throw(::com::sun::star::uno::RuntimeException);
1292 	virtual ::com::sun::star::uno::Sequence< sal_Int8 > SAL_CALL getImplementationId()
1293 								throw(::com::sun::star::uno::RuntimeException);
1294 };
1295 
1296 
1297 class ScTableRowObj : public ScCellRangeObj
1298 {
1299 private:
1300 	const SfxItemPropertySet*		pRowPropSet;
1301 
1302 protected:
1303 	virtual const SfxItemPropertyMap* GetItemPropertyMap();
1304     virtual void GetOnePropertyValue( const SfxItemPropertySimpleEntry* pEntry,
1305 								::com::sun::star::uno::Any& )
1306 								throw(::com::sun::star::uno::RuntimeException);
1307     virtual void            SetOnePropertyValue( const SfxItemPropertySimpleEntry* pEntry,
1308 												const ::com::sun::star::uno::Any& aValue )
1309 								throw(::com::sun::star::lang::IllegalArgumentException,
1310 										::com::sun::star::uno::RuntimeException);
1311 
1312 public:
1313 							ScTableRowObj(ScDocShell* pDocSh, SCROW nRow, SCTAB nTab);
1314 	virtual					~ScTableRowObj();
1315 
1316 							// XPropertySet ueberladen wegen Zeilen-Properties
1317 	virtual ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySetInfo >
1318 							SAL_CALL getPropertySetInfo()
1319 								throw(::com::sun::star::uno::RuntimeException);
1320 
1321 							// XServiceInfo
1322 	virtual ::rtl::OUString SAL_CALL getImplementationName()
1323 								throw(::com::sun::star::uno::RuntimeException);
1324 	virtual sal_Bool SAL_CALL supportsService( const ::rtl::OUString& ServiceName )
1325 								throw(::com::sun::star::uno::RuntimeException);
1326 	virtual ::com::sun::star::uno::Sequence< ::rtl::OUString > SAL_CALL getSupportedServiceNames()
1327 								throw(::com::sun::star::uno::RuntimeException);
1328 };
1329 
1330 
1331 class ScCellsObj : public cppu::WeakImplHelper2<
1332 							com::sun::star::container::XEnumerationAccess,
1333 							com::sun::star::lang::XServiceInfo >,
1334 						public SfxListener
1335 {
1336 private:
1337 	ScDocShell*				pDocShell;
1338 	ScRangeList				aRanges;
1339 
1340 public:
1341 							ScCellsObj(ScDocShell* pDocSh, const ScRangeList& rR);
1342 	virtual					~ScCellsObj();
1343 
1344 	virtual void			Notify( SfxBroadcaster& rBC, const SfxHint& rHint );
1345 
1346 							// XEnumerationAccess
1347 	virtual ::com::sun::star::uno::Reference< ::com::sun::star::container::XEnumeration > SAL_CALL
1348 							createEnumeration() throw(::com::sun::star::uno::RuntimeException);
1349 
1350 							// XElementAccess
1351 	virtual ::com::sun::star::uno::Type SAL_CALL getElementType()
1352 								throw(::com::sun::star::uno::RuntimeException);
1353 	virtual sal_Bool SAL_CALL hasElements() throw(::com::sun::star::uno::RuntimeException);
1354 
1355 							// XServiceInfo
1356 	virtual ::rtl::OUString SAL_CALL getImplementationName()
1357 								throw(::com::sun::star::uno::RuntimeException);
1358 	virtual sal_Bool SAL_CALL supportsService( const ::rtl::OUString& ServiceName )
1359 								throw(::com::sun::star::uno::RuntimeException);
1360 	virtual ::com::sun::star::uno::Sequence< ::rtl::OUString > SAL_CALL getSupportedServiceNames()
1361 								throw(::com::sun::star::uno::RuntimeException);
1362 };
1363 
1364 
1365 class ScCellsEnumeration : public cppu::WeakImplHelper2<
1366 								com::sun::star::container::XEnumeration,
1367 								com::sun::star::lang::XServiceInfo >,
1368 							public SfxListener
1369 {
1370 private:
1371 	ScDocShell*				pDocShell;
1372 	ScRangeList				aRanges;
1373 	ScAddress				aPos;
1374 	ScMarkData*				pMark;
1375 	sal_Bool					bAtEnd;
1376 
1377 private:
1378 	void					Advance_Impl();
1379 	void					CheckPos_Impl();
1380 
1381 public:
1382 							ScCellsEnumeration(ScDocShell* pDocSh, const ScRangeList& rR);
1383 	virtual					~ScCellsEnumeration();
1384 
1385 	virtual void			Notify( SfxBroadcaster& rBC, const SfxHint& rHint );
1386 
1387 							// XEnumeration
1388 	virtual sal_Bool SAL_CALL hasMoreElements() throw(::com::sun::star::uno::RuntimeException);
1389 	virtual ::com::sun::star::uno::Any SAL_CALL nextElement()
1390 								throw(::com::sun::star::container::NoSuchElementException,
1391 										::com::sun::star::lang::WrappedTargetException,
1392 										::com::sun::star::uno::RuntimeException);
1393 
1394 							// XServiceInfo
1395 	virtual ::rtl::OUString SAL_CALL getImplementationName()
1396 								throw(::com::sun::star::uno::RuntimeException);
1397 	virtual sal_Bool SAL_CALL supportsService( const ::rtl::OUString& ServiceName )
1398 								throw(::com::sun::star::uno::RuntimeException);
1399 	virtual ::com::sun::star::uno::Sequence< ::rtl::OUString > SAL_CALL getSupportedServiceNames()
1400 								throw(::com::sun::star::uno::RuntimeException);
1401 };
1402 
1403 class ScCellFormatsObj : public cppu::WeakImplHelper3<
1404 							com::sun::star::container::XIndexAccess,
1405 							com::sun::star::container::XEnumerationAccess,
1406 							com::sun::star::lang::XServiceInfo >,
1407 						public SfxListener
1408 {
1409 private:
1410 	ScDocShell*				pDocShell;
1411 	ScRange					aTotalRange;
1412 
1413 private:
1414 	ScCellRangeObj*			GetObjectByIndex_Impl(long nIndex) const;
1415 
1416 public:
1417 							ScCellFormatsObj(ScDocShell* pDocSh, const ScRange& rR);
1418 	virtual					~ScCellFormatsObj();
1419 
1420 	virtual void			Notify( SfxBroadcaster& rBC, const SfxHint& rHint );
1421 
1422 							// XIndexAccess
1423 	virtual sal_Int32 SAL_CALL getCount() throw(::com::sun::star::uno::RuntimeException);
1424 	virtual ::com::sun::star::uno::Any SAL_CALL getByIndex( sal_Int32 Index )
1425 								throw(::com::sun::star::lang::IndexOutOfBoundsException,
1426 									::com::sun::star::lang::WrappedTargetException,
1427 									::com::sun::star::uno::RuntimeException);
1428 
1429 							// XEnumerationAccess
1430 	virtual ::com::sun::star::uno::Reference< ::com::sun::star::container::XEnumeration > SAL_CALL
1431 							createEnumeration() throw(::com::sun::star::uno::RuntimeException);
1432 
1433 							// XElementAccess
1434 	virtual ::com::sun::star::uno::Type SAL_CALL getElementType()
1435 								throw(::com::sun::star::uno::RuntimeException);
1436 	virtual sal_Bool SAL_CALL hasElements() throw(::com::sun::star::uno::RuntimeException);
1437 
1438 							// XServiceInfo
1439 	virtual ::rtl::OUString SAL_CALL getImplementationName()
1440 								throw(::com::sun::star::uno::RuntimeException);
1441 	virtual sal_Bool SAL_CALL supportsService( const ::rtl::OUString& ServiceName )
1442 								throw(::com::sun::star::uno::RuntimeException);
1443 	virtual ::com::sun::star::uno::Sequence< ::rtl::OUString > SAL_CALL getSupportedServiceNames()
1444 								throw(::com::sun::star::uno::RuntimeException);
1445 };
1446 
1447 
1448 class ScCellFormatsEnumeration : public cppu::WeakImplHelper2<
1449 									com::sun::star::container::XEnumeration,
1450 									com::sun::star::lang::XServiceInfo >,
1451 								 public SfxListener
1452 {
1453 private:
1454 	ScDocShell*				pDocShell;
1455 	SCTAB					nTab;
1456 	ScAttrRectIterator*		pIter;
1457 	ScRange					aNext;
1458 	sal_Bool					bAtEnd;
1459 	sal_Bool					bDirty;
1460 
1461 private:
1462 	void					Advance_Impl();
1463 	ScCellRangeObj*			NextObject_Impl();
1464 
1465 public:
1466 							ScCellFormatsEnumeration(ScDocShell* pDocSh, const ScRange& rR);
1467 	virtual					~ScCellFormatsEnumeration();
1468 
1469 	virtual void			Notify( SfxBroadcaster& rBC, const SfxHint& rHint );
1470 
1471 							// XEnumeration
1472 	virtual sal_Bool SAL_CALL hasMoreElements() throw(::com::sun::star::uno::RuntimeException);
1473 	virtual ::com::sun::star::uno::Any SAL_CALL nextElement()
1474 								throw(::com::sun::star::container::NoSuchElementException,
1475 										::com::sun::star::lang::WrappedTargetException,
1476 										::com::sun::star::uno::RuntimeException);
1477 
1478 							// XServiceInfo
1479 	virtual ::rtl::OUString SAL_CALL getImplementationName()
1480 								throw(::com::sun::star::uno::RuntimeException);
1481 	virtual sal_Bool SAL_CALL supportsService( const ::rtl::OUString& ServiceName )
1482 								throw(::com::sun::star::uno::RuntimeException);
1483 	virtual ::com::sun::star::uno::Sequence< ::rtl::OUString > SAL_CALL getSupportedServiceNames()
1484 								throw(::com::sun::star::uno::RuntimeException);
1485 };
1486 
1487 typedef std::vector< ScRangeList > ScMyRangeLists;
1488 
1489 class ScUniqueCellFormatsObj : public cppu::WeakImplHelper3<
1490 							com::sun::star::container::XIndexAccess,
1491 							com::sun::star::container::XEnumerationAccess,
1492 							com::sun::star::lang::XServiceInfo >,
1493 						public SfxListener
1494 {
1495 private:
1496 	ScDocShell*						pDocShell;
1497 	ScRange							aTotalRange;
1498 	ScMyRangeLists					aRangeLists;
1499 
1500 private:
1501 	void							GetObjects_Impl();
1502 
1503 public:
1504 							ScUniqueCellFormatsObj(ScDocShell* pDocSh, const ScRange& rR);
1505 	virtual					~ScUniqueCellFormatsObj();
1506 
1507 	virtual void			Notify( SfxBroadcaster& rBC, const SfxHint& rHint );
1508 
1509 							// XIndexAccess
1510 	virtual sal_Int32 SAL_CALL getCount() throw(::com::sun::star::uno::RuntimeException);
1511 	virtual ::com::sun::star::uno::Any SAL_CALL getByIndex( sal_Int32 Index )
1512 								throw(::com::sun::star::lang::IndexOutOfBoundsException,
1513 									::com::sun::star::lang::WrappedTargetException,
1514 									::com::sun::star::uno::RuntimeException);
1515 
1516 							// XEnumerationAccess
1517 	virtual ::com::sun::star::uno::Reference< ::com::sun::star::container::XEnumeration > SAL_CALL
1518 							createEnumeration() throw(::com::sun::star::uno::RuntimeException);
1519 
1520 							// XElementAccess
1521 	virtual ::com::sun::star::uno::Type SAL_CALL getElementType()
1522 								throw(::com::sun::star::uno::RuntimeException);
1523 	virtual sal_Bool SAL_CALL hasElements() throw(::com::sun::star::uno::RuntimeException);
1524 
1525 							// XServiceInfo
1526 	virtual ::rtl::OUString SAL_CALL getImplementationName()
1527 								throw(::com::sun::star::uno::RuntimeException);
1528 	virtual sal_Bool SAL_CALL supportsService( const ::rtl::OUString& ServiceName )
1529 								throw(::com::sun::star::uno::RuntimeException);
1530 	virtual ::com::sun::star::uno::Sequence< ::rtl::OUString > SAL_CALL getSupportedServiceNames()
1531 								throw(::com::sun::star::uno::RuntimeException);
1532 };
1533 
1534 class ScUniqueCellFormatsEnumeration : public cppu::WeakImplHelper2<
1535 									com::sun::star::container::XEnumeration,
1536 									com::sun::star::lang::XServiceInfo >,
1537 								 public SfxListener
1538 {
1539 private:
1540 	ScMyRangeLists					aRangeLists;
1541 	ScDocShell*						pDocShell;
1542 	sal_Int32						nCurrentPosition;
1543 
1544 public:
1545 							ScUniqueCellFormatsEnumeration(ScDocShell* pDocShell, const ScMyRangeLists& rRangeLists);
1546 	virtual					~ScUniqueCellFormatsEnumeration();
1547 
1548 	virtual void			Notify( SfxBroadcaster& rBC, const SfxHint& rHint );
1549 
1550 							// XEnumeration
1551 	virtual sal_Bool SAL_CALL hasMoreElements() throw(::com::sun::star::uno::RuntimeException);
1552 	virtual ::com::sun::star::uno::Any SAL_CALL nextElement()
1553 								throw(::com::sun::star::container::NoSuchElementException,
1554 										::com::sun::star::lang::WrappedTargetException,
1555 										::com::sun::star::uno::RuntimeException);
1556 
1557 							// XServiceInfo
1558 	virtual ::rtl::OUString SAL_CALL getImplementationName()
1559 								throw(::com::sun::star::uno::RuntimeException);
1560 	virtual sal_Bool SAL_CALL supportsService( const ::rtl::OUString& ServiceName )
1561 								throw(::com::sun::star::uno::RuntimeException);
1562 	virtual ::com::sun::star::uno::Sequence< ::rtl::OUString > SAL_CALL getSupportedServiceNames()
1563 								throw(::com::sun::star::uno::RuntimeException);
1564 };
1565 
1566 
1567 #endif
1568 
1569