update dev300-m58
[ooovba.git] / sw / inc / tblsel.hxx
blob5b1b4161cf7d14ee86a30c468b8501ba7f26ea84
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.12 $
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
33 #include <svtools/svarray.hxx>
34 #include <swtable.hxx>
35 #include <swrect.hxx>
36 #include "swdllapi.h"
38 class SwCrsrShell;
39 class SwCursor;
40 class SwTableCursor;
41 class SwFrm;
42 class SwTabFrm;
43 class SwTableBox;
44 class SwTableLine;
45 class SwLayoutFrm;
46 class SwPaM;
47 class SwNode;
48 class SwTable;
49 class SwUndoTblMerge;
50 class SwCellFrm;
52 SV_DECL_PTRARR( SwCellFrms, SwCellFrm*, 16, 16 )
53 SV_DECL_PTRARR_SORT( SwSelBoxes, SwTableBoxPtr, 10, 20 )
56 //Sucht alle Boxen zusammen, die in der Tabelle selektiert sind.
57 //Je nach enum-Parameter wird die Selektion in der angegebenen Richtung
58 //erweitert.
59 //Die Boxen werden ueber das Layout zusammengsucht, es wird auch bei
60 //aufgespaltenen Tabellen korrekt gearbeitet (siehe: MakeSelUnions()).
61 typedef USHORT SwTblSearchType;
62 namespace nsSwTblSearchType
64 const SwTblSearchType TBLSEARCH_NONE = 0x1; // keine Erweiterung
65 const SwTblSearchType TBLSEARCH_ROW = 0x2; // erweiter auf Zeilen
66 const SwTblSearchType TBLSEARCH_COL = 0x3; // erweiter auf Spalten
68 // als Flag zu den anderen Werten!!
69 const SwTblSearchType TBLSEARCH_PROTECT = 0x8; // auch geschuetzte Boxen einsammeln
70 const SwTblSearchType TBLSEARCH_NO_UNION_CORRECT = 0x10; // die zusammenges. Union nicht korrigieren
73 SW_DLLPUBLIC void GetTblSel( const SwCrsrShell& rShell, SwSelBoxes& rBoxes,
74 const SwTblSearchType = nsSwTblSearchType::TBLSEARCH_NONE );
76 void GetTblSel( const SwCursor& rCrsr, SwSelBoxes& rBoxes,
77 const SwTblSearchType = nsSwTblSearchType::TBLSEARCH_NONE );
79 //wie vor, jedoch wird nicht von der Selektion sondern von den
80 //Start- EndFrms ausgegangen.
81 void GetTblSel( const SwLayoutFrm* pStart, const SwLayoutFrm* pEnd,
82 SwSelBoxes& rBoxes, SwCellFrms* pCells,
83 const SwTblSearchType = nsSwTblSearchType::TBLSEARCH_NONE );
85 // Desgleichen nocheinmal direkt per PaM's
86 void GetTblSelCrs( const SwCrsrShell& rShell, SwSelBoxes& rBoxes );
87 void GetTblSelCrs( const SwTableCursor& rTblCrsr, SwSelBoxes& rBoxes );
89 // suche fuer eine AutoSumme die beteiligten Boxen zusammen
90 BOOL GetAutoSumSel( const SwCrsrShell&, SwCellFrms& );
92 // check if the SelBoxes contains protected Boxes
93 BOOL HasProtectedCells( const SwSelBoxes& rBoxes );
95 // teste, ob die Selektion ausgeglichen ist
96 SV_DECL_PTRARR( SwChartBoxes, SwTableBoxPtr, 16, 16)
97 SV_DECL_PTRARR_DEL( SwChartLines, SwChartBoxes*, 25, 50)
99 BOOL ChkChartSel( const SwNode& rSttNd, const SwNode& rEndNd,
100 SwChartLines* pGetCLines = 0 );
102 // teste ob die Celle in die SSelection gehoert
103 // (wurde eine Funktion, damit GetTblSel() und MakeTblCrsr() immer
104 // das "gleiche Verstaendnis" fuer die Selektion haben)
105 BOOL IsFrmInTblSel( const SwRect& rUnion, const SwFrm* pCell );
107 // bestimme die Boxen, die zusammen gefasst werden sollen.
108 // Dabei wird auf Layout Basis das Rechteck "angepasst". D.H. es
109 // werden Boxen zugefuegt wenn welche an den Seiten ueberlappen
110 // Zusaetzlich wird die neue Box erzeugt und mit dem entsprechenden
111 // Inhalt gefuellt.
112 void GetMergeSel( const SwPaM& rPam, SwSelBoxes& rBoxes,
113 SwTableBox** ppMergeBox, SwUndoTblMerge* pUndo = 0 );
115 // teste ob die selektierten Boxen ein gueltiges Merge erlauben
116 USHORT CheckMergeSel( const SwPaM& rPam );
117 USHORT CheckMergeSel( const SwSelBoxes& rBoxes );
119 BOOL IsEmptyBox( const SwTableBox& rBox, SwPaM& rPam );
121 // teste ob ein Split oder InsertCol dazu fuehrt, das eine Box
122 // kleiner als MINLAY wird.
123 BOOL CheckSplitCells( const SwCrsrShell& rShell, USHORT nDiv,
124 const SwTblSearchType = nsSwTblSearchType::TBLSEARCH_NONE );
125 BOOL CheckSplitCells( const SwCursor& rCrsr, USHORT nDiv,
126 const SwTblSearchType = nsSwTblSearchType::TBLSEARCH_NONE );
128 //Fuer das Arbeiten auf TabSelektion auch fuer aufgespaltene Tabellen.
129 class SwSelUnion
131 SwRect aUnion; //Das die Sel umschliessende Rechteck.
132 SwTabFrm *pTable; //Die (Follow-)Table zu der Union.
134 public:
135 SwSelUnion( const SwRect &rRect, SwTabFrm *pTab ) :
136 aUnion( rRect ), pTable( pTab ) {}
138 const SwRect& GetUnion() const { return aUnion; }
139 SwRect& GetUnion() { return aUnion; }
140 const SwTabFrm *GetTable() const { return pTable; }
141 SwTabFrm *GetTable() { return pTable; }
144 SV_DECL_PTRARR_DEL( SwSelUnions, SwSelUnion*, 10, 20 )
146 //Ermittelt die von einer Tabellenselektion betroffenen Tabellen und die
147 //Union-Rechteckte der Selektionen - auch fuer aufgespaltene Tabellen.
148 //Wenn ein Parameter != nsSwTblSearchType::TBLSEARCH_NONE uebergeben wird, so wird die
149 //Selektion in der angegebenen Richtung erweitert.
150 void MakeSelUnions( SwSelUnions&, const SwLayoutFrm *pStart,
151 const SwLayoutFrm *pEnd,
152 const SwTblSearchType = nsSwTblSearchType::TBLSEARCH_NONE );
155 // -------------------------------------------------------------------
156 // Diese Klassen kopieren die aktuelle Tabellen-Selektion (rBoxes)
157 // unter Beibehaltung der Tabellen-Strubktur in eine eigene Struktur
159 class _FndBox;
160 class _FndLine;
162 SV_DECL_PTRARR_DEL( _FndBoxes, _FndBox*, 10, 20 )
163 SV_DECL_PTRARR_DEL( _FndLines, _FndLine*,10, 20 )
165 class _FndBox
167 SwTableBox* pBox;
168 _FndLines aLines;
169 _FndLine* pUpper;
171 SwTableLine *pLineBefore; //Zum Loeschen/Restaurieren des Layouts.
172 SwTableLine *pLineBehind;
174 public:
175 _FndBox( SwTableBox* pB, _FndLine* pFL ) :
176 pBox(pB), pUpper(pFL), pLineBefore( 0 ), pLineBehind( 0 ) {}
178 const _FndLines& GetLines() const { return aLines; }
179 _FndLines& GetLines() { return aLines; }
180 const SwTableBox* GetBox() const { return pBox; }
181 SwTableBox* GetBox() { return pBox; }
182 const _FndLine* GetUpper() const { return pUpper; }
183 _FndLine* GetUpper() { return pUpper; }
185 void SetTableLines( const SwSelBoxes &rBoxes, const SwTable &rTable );
186 void SetTableLines( const SwTable &rTable );
187 void DelFrms ( SwTable &rTable );
188 void MakeFrms( SwTable &rTable );
189 void MakeNewFrms( SwTable &rTable, const USHORT nNumber,
190 const BOOL bBehind );
191 BOOL AreLinesToRestore( const SwTable &rTable ) const;
193 void ClearLineBehind() { pLineBehind = 0; }
197 class _FndLine
199 SwTableLine* pLine;
200 _FndBoxes aBoxes;
201 _FndBox* pUpper;
202 public:
203 _FndLine(SwTableLine* pL, _FndBox* pFB=0) : pLine(pL), pUpper(pFB) {}
204 const _FndBoxes& GetBoxes() const { return aBoxes; }
205 _FndBoxes& GetBoxes() { return aBoxes; }
206 const SwTableLine* GetLine() const { return pLine; }
207 SwTableLine* GetLine() { return pLine; }
208 const _FndBox* GetUpper() const { return pUpper; }
209 _FndBox* GetUpper() { return pUpper; }
211 void SetUpper( _FndBox* pUp ) { pUpper = pUp; }
215 struct _FndPara
217 const SwSelBoxes& rBoxes;
218 _FndLine* pFndLine;
219 _FndBox* pFndBox;
221 _FndPara( const SwSelBoxes& rBxs, _FndBox* pFB )
222 : rBoxes(rBxs), pFndLine(0), pFndBox(pFB) {}
223 _FndPara( const _FndPara& rPara, _FndBox* pFB )
224 : rBoxes(rPara.rBoxes), pFndLine(rPara.pFndLine), pFndBox(pFB) {}
225 _FndPara( const _FndPara& rPara, _FndLine* pFL )
226 : rBoxes(rPara.rBoxes), pFndLine(pFL), pFndBox(rPara.pFndBox) {}
229 BOOL _FndBoxCopyCol( const SwTableBox*& rpBox, void* pPara );
230 SW_DLLPUBLIC BOOL _FndLineCopyCol( const SwTableLine*& rpLine, void* pPara );
233 #endif // _TBLSEL_HXX