Update ooo320-m1
[ooovba.git] / binfilter / inc / bf_sw / tblsel.hxx
blob384ae3f3007684f8a9e84ff8df426ab30f1398f6
1 /*************************************************************************
3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4 *
5 * Copyright 2008 by Sun Microsystems, Inc.
7 * OpenOffice.org - a multi-platform office productivity suite
9 * $RCSfile: tblsel.hxx,v $
10 * $Revision: 1.8 $
12 * This file is part of OpenOffice.org.
14 * OpenOffice.org is free software: you can redistribute it and/or modify
15 * it under the terms of the GNU Lesser General Public License version 3
16 * only, as published by the Free Software Foundation.
18 * OpenOffice.org is distributed in the hope that it will be useful,
19 * but WITHOUT ANY WARRANTY; without even the implied warranty of
20 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
21 * GNU Lesser General Public License version 3 for more details
22 * (a copy is included in the LICENSE file that accompanied this code).
24 * You should have received a copy of the GNU Lesser General Public License
25 * version 3 along with OpenOffice.org. If not, see
26 * <http://www.openoffice.org/license.html>
27 * for a copy of the LGPLv3 License.
29 ************************************************************************/
30 #ifndef _TBLSEL_HXX
31 #define _TBLSEL_HXX
34 #ifndef _SWTABLE_HXX
35 #include <swtable.hxx>
36 #endif
37 #ifndef _SWRECT_HXX
38 #include <swrect.hxx>
39 #endif
40 namespace binfilter {
42 class SwCrsrShell;
43 class SwCursor;
44 class SwTableCursor;
45 class SwFrm;
46 class SwTabFrm;
47 class SwTableBox;
48 class SwTableLine;
49 class SwLayoutFrm;
50 class SwPaM;
51 class SwNode;
52 class SwTable;
53 class SwCellFrm;
55 SV_DECL_PTRARR( SwCellFrms, SwCellFrm*, 16, 16 )
56 SV_DECL_PTRARR_SORT( SwSelBoxes, SwTableBoxPtr, 10, 20 )
59 //Sucht alle Boxen zusammen, die in der Tabelle selektiert sind.
60 //Je nach enum-Parameter wird die Selektion in der angegebenen Richtung
61 //erweitert.
62 //Die Boxen werden ueber das Layout zusammengsucht, es wird auch bei
63 //aufgespaltenen Tabellen korrekt gearbeitet (siehe: MakeSelUnions()).
64 enum SwTblSearchType
66 TBLSEARCH_NONE = 0x1, // keine Erweiterung
67 TBLSEARCH_ROW = 0x2, // erweiter auf Zeilen
68 TBLSEARCH_COL = 0x3, // erweiter auf Spalten
70 // als Flag zu den anderen Werten!!
71 TBLSEARCH_PROTECT = 0x8, // auch geschuetzte Boxen einsammeln
72 TBLSEARCH_NO_UNION_CORRECT = 0x10 // die zusammenges. Union nicht korrigieren
75 //wie vor, jedoch wird nicht von der Selektion sondern von den
76 //Start- EndFrms ausgegangen.
77 void GetTblSel( const SwLayoutFrm* pStart, const SwLayoutFrm* pEnd,
78 SwSelBoxes& rBoxes, const SwTblSearchType = TBLSEARCH_NONE );
80 // suche fuer eine AutoSumme die beteiligten Boxen zusammen
81 BOOL GetAutoSumSel( const SwCrsrShell&, SwCellFrms& );
83 // teste, ob die Selektion ausgeglichen ist
84 SV_DECL_PTRARR( SwChartBoxes, SwTableBoxPtr, 16, 16)//STRIP008 ;
85 SV_DECL_PTRARR_DEL( SwChartLines, SwChartBoxes*, 25, 50)//STRIP008 ;
87 BOOL ChkChartSel( const SwNode& rSttNd, const SwNode& rEndNd,
88 SwChartLines* pGetCLines = 0 );
90 // teste ob die Celle in die SSelection gehoert
91 // (wurde eine Funktion, damit GetTblSel() und MakeTblCrsr() immer
92 // das "gleiche Verstaendnis" fuer die Selektion haben)
93 BOOL IsFrmInTblSel( const SwRect& rUnion, const SwFrm* pCell );
95 // bestimme die Boxen, die zusammen gefasst werden sollen.
96 // Dabei wird auf Layout Basis das Rechteck "angepasst". D.H. es
97 // werden Boxen zugefuegt wenn welche an den Seiten ueberlappen
98 // Zusaetzlich wird die neue Box erzeugt und mit dem entsprechenden
99 // Inhalt gefuellt.
100 void GetMergeSel( const SwPaM& rPam, SwSelBoxes& rBoxes,
101 SwTableBox** ppMergeBox );
103 // teste ob die selektierten Boxen ein gueltiges Merge erlauben
104 USHORT CheckMergeSel( const SwPaM& rPam );
105 USHORT CheckMergeSel( const SwSelBoxes& rBoxes );
107 BOOL IsEmptyBox( const SwTableBox& rBox, SwPaM& rPam );
109 // teste ob ein Split oder InsertCol dazu fuehrt, das eine Box
110 // kleiner als MINLAY wird.
111 BOOL CheckSplitCells( const SwCrsrShell& rShell, USHORT nDiv,
112 const SwTblSearchType = TBLSEARCH_NONE );
113 BOOL CheckSplitCells( const SwCursor& rCrsr, USHORT nDiv,
114 const SwTblSearchType = TBLSEARCH_NONE );
116 //Fuer das Arbeiten auf TabSelektion auch fuer aufgespaltene Tabellen.
117 class SwSelUnion
119 SwRect aUnion; //Das die Sel umschliessende Rechteck.
120 SwTabFrm *pTable; //Die (Follow-)Table zu der Union.
122 public:
123 SwSelUnion( const SwRect &rRect, SwTabFrm *pTab ) :
124 aUnion( rRect ), pTable( pTab ) {}
126 const SwRect& GetUnion() const { return aUnion; }
127 SwRect& GetUnion() { return aUnion; }
128 const SwTabFrm *GetTable() const { return pTable; }
129 SwTabFrm *GetTable() { return pTable; }
132 SV_DECL_PTRARR_DEL( SwSelUnions, SwSelUnion*, 10, 20 )
134 //Ermittelt die von einer Tabellenselektion betroffenen Tabellen und die
135 //Union-Rechteckte der Selektionen - auch fuer aufgespaltene Tabellen.
136 //Wenn ein Parameter != TBLSEARCH_NONE uebergeben wird, so wird die
137 //Selektion in der angegebenen Richtung erweitert.
138 void MakeSelUnions( SwSelUnions&, const SwLayoutFrm *pStart,
139 const SwLayoutFrm *pEnd,
140 const SwTblSearchType = TBLSEARCH_NONE );
143 // -------------------------------------------------------------------
144 // Diese Klassen kopieren die aktuelle Tabellen-Selektion (rBoxes)
145 // unter Beibehaltung der Tabellen-Strubktur in eine eigene Struktur
147 class _FndBox;
148 class _FndLine;
150 SV_DECL_PTRARR_DEL( _FndBoxes, _FndBox*, 10, 20 )
151 SV_DECL_PTRARR_DEL( _FndLines, _FndLine*,10, 20 )
153 class _FndBox
155 SwTableBox* pBox;
156 _FndLines aLines;
157 _FndLine* pUpper;
159 SwTableLine *pLineBefore; //Zum Loeschen/Restaurieren des Layouts.
160 SwTableLine *pLineBehind;
162 public:
163 _FndBox( SwTableBox* pB, _FndLine* pFL ) :
164 pBox(pB), pUpper(pFL), pLineBefore( 0 ), pLineBehind( 0 ) {}
166 const _FndLines& GetLines() const { return aLines; }
167 _FndLines& GetLines() { return aLines; }
168 const SwTableBox* GetBox() const { return pBox; }
169 SwTableBox* GetBox() { return pBox; }
170 const _FndLine* GetUpper() const { return pUpper; }
171 _FndLine* GetUpper() { return pUpper; }
173 void SetTableLines( const SwSelBoxes &rBoxes, const SwTable &rTable );
174 void SetTableLines( const SwTable &rTable );
175 void DelFrms ( SwTable &rTable );
176 void MakeFrms( SwTable &rTable );
177 void MakeNewFrms( SwTable &rTable, const USHORT nNumber,
178 const BOOL bBehind );
179 BOOL AreLinesToRestore( const SwTable &rTable ) const;
181 //Auch die Charts zu der Tabelle muessen etwas von den Veraenderungen
182 //mitbekommen.
183 void SaveChartData( const SwTable &rTable );
184 void RestoreChartData( const SwTable &rTable );
188 class _FndLine
190 SwTableLine* pLine;
191 _FndBoxes aBoxes;
192 _FndBox* pUpper;
193 public:
194 _FndLine(SwTableLine* pL, _FndBox* pFB=0) : pLine(pL), pUpper(pFB) {}
195 const _FndBoxes& GetBoxes() const { return aBoxes; }
196 _FndBoxes& GetBoxes() { return aBoxes; }
197 const SwTableLine* GetLine() const { return pLine; }
198 SwTableLine* GetLine() { return pLine; }
199 const _FndBox* GetUpper() const { return pUpper; }
200 _FndBox* GetUpper() { return pUpper; }
202 void SetUpper( _FndBox* pUp ) { pUpper = pUp; }
206 struct _FndPara
208 _FndBox* pFndBox;
209 _FndLine* pFndLine;
210 const SwSelBoxes& rBoxes;
212 _FndPara( const SwSelBoxes& rBxs, _FndBox* pFB )
213 : rBoxes( rBxs ), pFndBox( pFB ) {}
214 _FndPara( const _FndPara& rPara, _FndBox* pFB )
215 : rBoxes(rPara.rBoxes), pFndLine(rPara.pFndLine), pFndBox(pFB) {}
216 _FndPara( const _FndPara& rPara, _FndLine* pFL )
217 : rBoxes(rPara.rBoxes), pFndLine(pFL), pFndBox(rPara.pFndBox) {}
220 BOOL _FndBoxCopyCol( const SwTableBox*& rpBox, void* pPara );
221 BOOL _FndLineCopyCol( const SwTableLine*& rpLine, void* pPara );
224 } //namespace binfilter
225 #endif // _TBLSEL_HXX