xref: /aoo41x/main/sw/source/core/inc/docsort.hxx (revision cdf0e10c)
1*cdf0e10cSrcweir /*************************************************************************
2*cdf0e10cSrcweir  *
3*cdf0e10cSrcweir  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4*cdf0e10cSrcweir  *
5*cdf0e10cSrcweir  * Copyright 2000, 2010 Oracle and/or its affiliates.
6*cdf0e10cSrcweir  *
7*cdf0e10cSrcweir  * OpenOffice.org - a multi-platform office productivity suite
8*cdf0e10cSrcweir  *
9*cdf0e10cSrcweir  * This file is part of OpenOffice.org.
10*cdf0e10cSrcweir  *
11*cdf0e10cSrcweir  * OpenOffice.org is free software: you can redistribute it and/or modify
12*cdf0e10cSrcweir  * it under the terms of the GNU Lesser General Public License version 3
13*cdf0e10cSrcweir  * only, as published by the Free Software Foundation.
14*cdf0e10cSrcweir  *
15*cdf0e10cSrcweir  * OpenOffice.org is distributed in the hope that it will be useful,
16*cdf0e10cSrcweir  * but WITHOUT ANY WARRANTY; without even the implied warranty of
17*cdf0e10cSrcweir  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
18*cdf0e10cSrcweir  * GNU Lesser General Public License version 3 for more details
19*cdf0e10cSrcweir  * (a copy is included in the LICENSE file that accompanied this code).
20*cdf0e10cSrcweir  *
21*cdf0e10cSrcweir  * You should have received a copy of the GNU Lesser General Public License
22*cdf0e10cSrcweir  * version 3 along with OpenOffice.org.  If not, see
23*cdf0e10cSrcweir  * <http://www.openoffice.org/license.html>
24*cdf0e10cSrcweir  * for a copy of the LGPLv3 License.
25*cdf0e10cSrcweir  *
26*cdf0e10cSrcweir  ************************************************************************/
27*cdf0e10cSrcweir #ifndef _SORT_HXX
28*cdf0e10cSrcweir #define _SORT_HXX
29*cdf0e10cSrcweir 
30*cdf0e10cSrcweir #include <svl/svarray.hxx>
31*cdf0e10cSrcweir #include <ndindex.hxx>
32*cdf0e10cSrcweir 
33*cdf0e10cSrcweir 
34*cdf0e10cSrcweir class SwDoc;
35*cdf0e10cSrcweir class SwTableBox;
36*cdf0e10cSrcweir class SwUndoSort;
37*cdf0e10cSrcweir class FlatFndBox;
38*cdf0e10cSrcweir struct SwSortOptions;
39*cdf0e10cSrcweir struct SwSortElement;
40*cdf0e10cSrcweir class _FndBox;
41*cdf0e10cSrcweir class _FndLine;
42*cdf0e10cSrcweir class CollatorWrapper;
43*cdf0e10cSrcweir class LocaleDataWrapper;
44*cdf0e10cSrcweir 
45*cdf0e10cSrcweir 
46*cdf0e10cSrcweir namespace com { namespace sun { namespace star { namespace lang {
47*cdf0e10cSrcweir 	struct Locale;
48*cdf0e10cSrcweir }}}}
49*cdf0e10cSrcweir 
50*cdf0e10cSrcweir /*--------------------------------------------------------------------
51*cdf0e10cSrcweir 	Beschreibung: Liste aller sortierten Elemente
52*cdf0e10cSrcweir  --------------------------------------------------------------------*/
53*cdf0e10cSrcweir typedef const _FndBox* 		_FndBoxPtr;
54*cdf0e10cSrcweir typedef SwSortElement* 		SwSortElementPtr;
55*cdf0e10cSrcweir typedef const SwTableBox* 	SwMovedBoxPtr;
56*cdf0e10cSrcweir 
57*cdf0e10cSrcweir SV_DECL_PTRARR_SORT(SwSortElements, SwSortElementPtr, 0, 1 )
58*cdf0e10cSrcweir SV_DECL_PTRARR(SwMovedBoxes, 		SwMovedBoxPtr, 10, 10 )
59*cdf0e10cSrcweir 
60*cdf0e10cSrcweir /*--------------------------------------------------------------------
61*cdf0e10cSrcweir 	Beschreibung: Funktionen zum Moven von Boxen
62*cdf0e10cSrcweir  --------------------------------------------------------------------*/
63*cdf0e10cSrcweir 
64*cdf0e10cSrcweir void MoveCol(SwDoc* pDoc, const FlatFndBox& rBox,
65*cdf0e10cSrcweir 			 sal_uInt16 nS, sal_uInt16 nT, SwMovedBoxes& rMovedList, SwUndoSort* pUD=0);
66*cdf0e10cSrcweir void MoveRow(SwDoc* pDoc, const FlatFndBox& rBox,
67*cdf0e10cSrcweir 			 sal_uInt16 nS, sal_uInt16 nT, SwMovedBoxes& rMovedList, SwUndoSort* pUD=0);
68*cdf0e10cSrcweir void MoveCell(SwDoc* pDoc, const SwTableBox* pSource,
69*cdf0e10cSrcweir 			  const SwTableBox* pTar, sal_Bool bMovedBefore, SwUndoSort* pUD=0);
70*cdf0e10cSrcweir 
71*cdf0e10cSrcweir /*-------------------------------------------------------------------
72*cdf0e10cSrcweir 	Beschreibung: Elemente zum Sortieren von Text und Tabellen-Inhalt
73*cdf0e10cSrcweir  --------------------------------------------------------------------*/
74*cdf0e10cSrcweir 
75*cdf0e10cSrcweir struct SwSortElement
76*cdf0e10cSrcweir {
77*cdf0e10cSrcweir 	static SwSortOptions*		pOptions;
78*cdf0e10cSrcweir 	static SwDoc*				pDoc;
79*cdf0e10cSrcweir 	static const FlatFndBox*	pBox;
80*cdf0e10cSrcweir 	static CollatorWrapper*		pSortCollator;
81*cdf0e10cSrcweir 	static ::com::sun::star::lang::Locale* pLocale;
82*cdf0e10cSrcweir 	static String*				pLastAlgorithm;
83*cdf0e10cSrcweir 	static LocaleDataWrapper* 	pLclData;
84*cdf0e10cSrcweir 
85*cdf0e10cSrcweir 	static void Init( SwDoc*, const SwSortOptions& rOpt, FlatFndBox* = 0 );
86*cdf0e10cSrcweir 	static void Finit();
87*cdf0e10cSrcweir 
88*cdf0e10cSrcweir 	virtual ~SwSortElement();
89*cdf0e10cSrcweir 
90*cdf0e10cSrcweir 	virtual	String GetKey(sal_uInt16 nKey ) const = 0;
91*cdf0e10cSrcweir 	virtual	double GetValue(sal_uInt16 nKey ) const;
92*cdf0e10cSrcweir 
93*cdf0e10cSrcweir 	sal_Bool operator==(const SwSortElement& );
94*cdf0e10cSrcweir 	sal_Bool operator<(const SwSortElement& );
95*cdf0e10cSrcweir 
96*cdf0e10cSrcweir 	double StrToDouble(const String& rStr) const;
97*cdf0e10cSrcweir };
98*cdf0e10cSrcweir 
99*cdf0e10cSrcweir /*--------------------------------------------------------------------
100*cdf0e10cSrcweir 	Beschreibung: Sortieren Text
101*cdf0e10cSrcweir  --------------------------------------------------------------------*/
102*cdf0e10cSrcweir 
103*cdf0e10cSrcweir struct SwSortTxtElement : public SwSortElement
104*cdf0e10cSrcweir {
105*cdf0e10cSrcweir 	// fuer Text
106*cdf0e10cSrcweir 	sal_uLong 			nOrg;
107*cdf0e10cSrcweir 	SwNodeIndex		aPos;
108*cdf0e10cSrcweir 
109*cdf0e10cSrcweir 	SwSortTxtElement( const SwNodeIndex& rPos );
110*cdf0e10cSrcweir 	virtual ~SwSortTxtElement();
111*cdf0e10cSrcweir 
112*cdf0e10cSrcweir 	virtual String GetKey( sal_uInt16 nKey ) const;
113*cdf0e10cSrcweir };
114*cdf0e10cSrcweir 
115*cdf0e10cSrcweir /*--------------------------------------------------------------------
116*cdf0e10cSrcweir 	Beschreibung: Sortieren Tabelle
117*cdf0e10cSrcweir  --------------------------------------------------------------------*/
118*cdf0e10cSrcweir 
119*cdf0e10cSrcweir struct SwSortBoxElement : public SwSortElement
120*cdf0e10cSrcweir {
121*cdf0e10cSrcweir 	sal_uInt16 						nRow;
122*cdf0e10cSrcweir 
123*cdf0e10cSrcweir 	SwSortBoxElement( sal_uInt16 nRC );
124*cdf0e10cSrcweir 	virtual ~SwSortBoxElement();
125*cdf0e10cSrcweir 
126*cdf0e10cSrcweir 	virtual String GetKey( sal_uInt16 nKey ) const;
127*cdf0e10cSrcweir 	virtual	double GetValue( sal_uInt16 nKey ) const;
128*cdf0e10cSrcweir };
129*cdf0e10cSrcweir 
130*cdf0e10cSrcweir 
131*cdf0e10cSrcweir /*--------------------------------------------------------------------
132*cdf0e10cSrcweir 	Beschreibung: SymFndBoxes stellt ein zweidimensionales
133*cdf0e10cSrcweir 				  Array von FndBoxes dar
134*cdf0e10cSrcweir  --------------------------------------------------------------------*/
135*cdf0e10cSrcweir 
136*cdf0e10cSrcweir class FlatFndBox
137*cdf0e10cSrcweir {
138*cdf0e10cSrcweir public:
139*cdf0e10cSrcweir 	FlatFndBox(SwDoc* pDocPtr, const _FndBox& rBox);
140*cdf0e10cSrcweir 	~FlatFndBox();
141*cdf0e10cSrcweir 
142*cdf0e10cSrcweir 	sal_Bool 				IsSymmetric() const { return bSym; 	}
143*cdf0e10cSrcweir 	sal_uInt16				GetRows()	  const { return nRows;	}
144*cdf0e10cSrcweir 	sal_uInt16				GetCols()	  const { return nCols;	}
145*cdf0e10cSrcweir 
146*cdf0e10cSrcweir 	const _FndBox* 		GetBox(sal_uInt16 nCol, sal_uInt16 nRow) const;
147*cdf0e10cSrcweir 
148*cdf0e10cSrcweir 	inline sal_Bool			HasItemSets() const;
149*cdf0e10cSrcweir 	const SfxItemSet* 	GetItemSet(sal_uInt16 nCol, sal_uInt16 nRow) const;
150*cdf0e10cSrcweir 
151*cdf0e10cSrcweir private:
152*cdf0e10cSrcweir 
153*cdf0e10cSrcweir 	sal_Bool 				CheckLineSymmetry(const _FndBox& rBox);
154*cdf0e10cSrcweir 	sal_Bool 				CheckBoxSymmetry(const _FndLine& rLn);
155*cdf0e10cSrcweir 	sal_uInt16 				GetColCount(const _FndBox& rBox);
156*cdf0e10cSrcweir 	sal_uInt16 				GetRowCount(const _FndBox& rBox);
157*cdf0e10cSrcweir 	void 		   		FillFlat(const _FndBox&, sal_Bool bLastBox=sal_False);
158*cdf0e10cSrcweir 
159*cdf0e10cSrcweir 	SwDoc*				pDoc;
160*cdf0e10cSrcweir 	const _FndBox&		rBoxRef;
161*cdf0e10cSrcweir 	_FndBoxPtr* 		pArr;
162*cdf0e10cSrcweir 	SfxItemSet** 		ppItemSets;
163*cdf0e10cSrcweir 
164*cdf0e10cSrcweir 	sal_uInt16 	 			nRows;
165*cdf0e10cSrcweir 	sal_uInt16   	   		nCols;
166*cdf0e10cSrcweir 
167*cdf0e10cSrcweir 	sal_uInt16 				nRow;
168*cdf0e10cSrcweir 	sal_uInt16 				nCol;
169*cdf0e10cSrcweir 
170*cdf0e10cSrcweir 	sal_Bool				bSym;
171*cdf0e10cSrcweir };
172*cdf0e10cSrcweir 
173*cdf0e10cSrcweir 
174*cdf0e10cSrcweir inline sal_Bool FlatFndBox::HasItemSets() const	{ return 0 != ppItemSets; }
175*cdf0e10cSrcweir 
176*cdf0e10cSrcweir #endif // _NDSORT_HXX
177