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_XMLDETECTIVECONTEXT_HXX
25 #define SC_XMLDETECTIVECONTEXT_HXX
26 
27 #include <xmloff/xmlimp.hxx>
28 #include <com/sun/star/table/CellRangeAddress.hpp>
29 #include "detfunc.hxx"
30 #include "detdata.hxx"
31 
32 #include <list>
33 
34 class ScXMLImport;
35 
36 
37 //___________________________________________________________________
38 
39 struct ScMyImpDetectiveObj
40 {
41 	ScRange						aSourceRange;
42 	ScDetectiveObjType			eObjType;
43 	sal_Bool					bHasError;
44 
45 								ScMyImpDetectiveObj();
46 };
47 
48 typedef ::std::vector< ScMyImpDetectiveObj > ScMyImpDetectiveObjVec;
49 
50 
51 //___________________________________________________________________
52 
53 struct ScMyImpDetectiveOp
54 {
55 	ScAddress					aPosition;
56 	ScDetOpType					eOpType;
57 	sal_Int32					nIndex;
58 
ScMyImpDetectiveOpScMyImpDetectiveOp59 	inline						ScMyImpDetectiveOp() : nIndex( -1 )	{}
60 	sal_Bool					operator<(const ScMyImpDetectiveOp& rDetOp) const;
61 };
62 
63 typedef ::std::list< ScMyImpDetectiveOp > ScMyImpDetectiveOpList;
64 
65 class ScMyImpDetectiveOpArray
66 {
67 private:
68 	ScMyImpDetectiveOpList		aDetectiveOpList;
69 
70 public:
ScMyImpDetectiveOpArray()71 	inline						ScMyImpDetectiveOpArray() :
72 									aDetectiveOpList()	{}
73 
AddDetectiveOp(const ScMyImpDetectiveOp & rDetOp)74 	inline void					AddDetectiveOp( const ScMyImpDetectiveOp& rDetOp )
75 									{ aDetectiveOpList.push_back( rDetOp ); }
76 
77 	void						Sort();
78 	sal_Bool					GetFirstOp( ScMyImpDetectiveOp& rDetOp );
79 };
80 
81 
82 //___________________________________________________________________
83 
84 class ScXMLDetectiveContext : public SvXMLImportContext
85 {
86 private:
87 	ScMyImpDetectiveObjVec*		pDetectiveObjVec;
88 
GetScImport() const89 	const ScXMLImport&			GetScImport() const	{ return (const ScXMLImport&)GetImport(); }
GetScImport()90 	ScXMLImport&				GetScImport()		{ return (ScXMLImport&)GetImport(); }
91 
92 public:
93 								ScXMLDetectiveContext(
94 									ScXMLImport& rImport,
95 									sal_uInt16 nPrfx,
96 									const ::rtl::OUString& rLName,
97 									ScMyImpDetectiveObjVec* pNewDetectiveObjVec
98 									);
99 	virtual						~ScXMLDetectiveContext();
100 
101 	virtual SvXMLImportContext*	CreateChildContext(
102 									sal_uInt16 nPrefix,
103 									const ::rtl::OUString& rLocalName,
104 									const ::com::sun::star::uno::Reference< ::com::sun::star::xml::sax::XAttributeList >& xAttrList
105 									);
106 	virtual void				EndElement();
107 };
108 
109 
110 //___________________________________________________________________
111 
112 class ScXMLDetectiveHighlightedContext : public SvXMLImportContext
113 {
114 private:
115 	ScMyImpDetectiveObjVec*		pDetectiveObjVec;
116 	ScMyImpDetectiveObj			aDetectiveObj;
117 	sal_Bool					bValid;
118 
GetScImport() const119 	const ScXMLImport&			GetScImport() const	{ return (const ScXMLImport&)GetImport(); }
GetScImport()120 	ScXMLImport&				GetScImport()		{ return (ScXMLImport&)GetImport(); }
121 
122 public:
123 								ScXMLDetectiveHighlightedContext(
124 									ScXMLImport& rImport,
125 									sal_uInt16 nPrfx,
126 									const ::rtl::OUString& rLName,
127 									const ::com::sun::star::uno::Reference< ::com::sun::star::xml::sax::XAttributeList >& xAttrList,
128 									ScMyImpDetectiveObjVec* pNewDetectiveObjVec
129 									);
130 	virtual						~ScXMLDetectiveHighlightedContext();
131 
132 	virtual SvXMLImportContext*	CreateChildContext(
133 									sal_uInt16 nPrefix,
134 									const ::rtl::OUString& rLocalName,
135 									const ::com::sun::star::uno::Reference< ::com::sun::star::xml::sax::XAttributeList >& xAttrList
136 									);
137 	virtual void				EndElement();
138 };
139 
140 
141 //___________________________________________________________________
142 
143 class ScXMLDetectiveOperationContext : public SvXMLImportContext
144 {
145 private:
146 	ScMyImpDetectiveOp			aDetectiveOp;
147 	sal_Bool					bHasType;
148 
GetScImport() const149 	const ScXMLImport&			GetScImport() const	{ return (const ScXMLImport&)GetImport(); }
GetScImport()150 	ScXMLImport&				GetScImport()		{ return (ScXMLImport&)GetImport(); }
151 
152 public:
153 								ScXMLDetectiveOperationContext(
154 									ScXMLImport& rImport,
155 									sal_uInt16 nPrfx,
156 									const ::rtl::OUString& rLName,
157 									const ::com::sun::star::uno::Reference< ::com::sun::star::xml::sax::XAttributeList >& xAttrList
158 									);
159 	virtual						~ScXMLDetectiveOperationContext();
160 
161 	virtual SvXMLImportContext*	CreateChildContext(
162 									sal_uInt16 nPrefix,
163 									const ::rtl::OUString& rLocalName,
164 									const ::com::sun::star::uno::Reference< ::com::sun::star::xml::sax::XAttributeList >& xAttrList
165 									);
166 	virtual void				EndElement();
167 };
168 
169 
170 #endif
171 
172