1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
|
/**************************************************************
*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*
*************************************************************/
#ifndef _TBLSEL_HXX
#define _TBLSEL_HXX
#include <svl/svarray.hxx>
#include <swtable.hxx>
#include <swrect.hxx>
#include "swdllapi.h"
class SwCrsrShell;
class SwCursor;
class SwTableCursor;
class SwFrm;
class SwTabFrm;
class SwTableBox;
class SwTableLine;
class SwLayoutFrm;
class SwPaM;
class SwNode;
class SwTable;
class SwUndoTblMerge;
class SwCellFrm;
SV_DECL_PTRARR( SwCellFrms, SwCellFrm*, 16, 16 )
SV_DECL_PTRARR_SORT( SwSelBoxes, SwTableBoxPtr, 10, 20 )
//Sucht alle Boxen zusammen, die in der Tabelle selektiert sind.
//Je nach enum-Parameter wird die Selektion in der angegebenen Richtung
//erweitert.
//Die Boxen werden ueber das Layout zusammengsucht, es wird auch bei
//aufgespaltenen Tabellen korrekt gearbeitet (siehe: MakeSelUnions()).
typedef sal_uInt16 SwTblSearchType;
namespace nsSwTblSearchType
{
const SwTblSearchType TBLSEARCH_NONE = 0x1; // keine Erweiterung
const SwTblSearchType TBLSEARCH_ROW = 0x2; // erweiter auf Zeilen
const SwTblSearchType TBLSEARCH_COL = 0x3; // erweiter auf Spalten
// als Flag zu den anderen Werten!!
const SwTblSearchType TBLSEARCH_PROTECT = 0x8; // auch geschuetzte Boxen einsammeln
const SwTblSearchType TBLSEARCH_NO_UNION_CORRECT = 0x10; // die zusammenges. Union nicht korrigieren
}
SW_DLLPUBLIC void GetTblSel( const SwCrsrShell& rShell, SwSelBoxes& rBoxes,
const SwTblSearchType = nsSwTblSearchType::TBLSEARCH_NONE );
void GetTblSel( const SwCursor& rCrsr, SwSelBoxes& rBoxes,
const SwTblSearchType = nsSwTblSearchType::TBLSEARCH_NONE );
//wie vor, jedoch wird nicht von der Selektion sondern von den
//Start- EndFrms ausgegangen.
void GetTblSel( const SwLayoutFrm* pStart, const SwLayoutFrm* pEnd,
SwSelBoxes& rBoxes, SwCellFrms* pCells,
const SwTblSearchType = nsSwTblSearchType::TBLSEARCH_NONE );
// Desgleichen nocheinmal direkt per PaM's
void GetTblSelCrs( const SwCrsrShell& rShell, SwSelBoxes& rBoxes );
void GetTblSelCrs( const SwTableCursor& rTblCrsr, SwSelBoxes& rBoxes );
// suche fuer eine AutoSumme die beteiligten Boxen zusammen
sal_Bool GetAutoSumSel( const SwCrsrShell&, SwCellFrms& );
// check if the SelBoxes contains protected Boxes
sal_Bool HasProtectedCells( const SwSelBoxes& rBoxes );
// teste, ob die Selektion ausgeglichen ist
SV_DECL_PTRARR( SwChartBoxes, SwTableBoxPtr, 16, 16)
SV_DECL_PTRARR_DEL( SwChartLines, SwChartBoxes*, 25, 50)
sal_Bool ChkChartSel( const SwNode& rSttNd, const SwNode& rEndNd,
SwChartLines* pGetCLines = 0 );
// teste ob die Celle in die SSelection gehoert
// (wurde eine Funktion, damit GetTblSel() und MakeTblCrsr() immer
// das "gleiche Verstaendnis" fuer die Selektion haben)
sal_Bool IsFrmInTblSel( const SwRect& rUnion, const SwFrm* pCell );
// bestimme die Boxen, die zusammen gefasst werden sollen.
// Dabei wird auf Layout Basis das Rechteck "angepasst". D.H. es
// werden Boxen zugefuegt wenn welche an den Seiten ueberlappen
// Zusaetzlich wird die neue Box erzeugt und mit dem entsprechenden
// Inhalt gefuellt.
void GetMergeSel( const SwPaM& rPam, SwSelBoxes& rBoxes,
SwTableBox** ppMergeBox, SwUndoTblMerge* pUndo = 0 );
// teste ob die selektierten Boxen ein gueltiges Merge erlauben
sal_uInt16 CheckMergeSel( const SwPaM& rPam );
sal_uInt16 CheckMergeSel( const SwSelBoxes& rBoxes );
sal_Bool IsEmptyBox( const SwTableBox& rBox, SwPaM& rPam );
// teste ob ein Split oder InsertCol dazu fuehrt, das eine Box
// kleiner als MINLAY wird.
sal_Bool CheckSplitCells( const SwCrsrShell& rShell, sal_uInt16 nDiv,
const SwTblSearchType = nsSwTblSearchType::TBLSEARCH_NONE );
sal_Bool CheckSplitCells( const SwCursor& rCrsr, sal_uInt16 nDiv,
const SwTblSearchType = nsSwTblSearchType::TBLSEARCH_NONE );
//Fuer das Arbeiten auf TabSelektion auch fuer aufgespaltene Tabellen.
class SwSelUnion
{
SwRect aUnion; //Das die Sel umschliessende Rechteck.
SwTabFrm *pTable; //Die (Follow-)Table zu der Union.
public:
SwSelUnion( const SwRect &rRect, SwTabFrm *pTab ) :
aUnion( rRect ), pTable( pTab ) {}
const SwRect& GetUnion() const { return aUnion; }
SwRect& GetUnion() { return aUnion; }
const SwTabFrm *GetTable() const { return pTable; }
SwTabFrm *GetTable() { return pTable; }
};
SV_DECL_PTRARR_DEL( SwSelUnions, SwSelUnion*, 10, 20 )
//Ermittelt die von einer Tabellenselektion betroffenen Tabellen und die
//Union-Rechteckte der Selektionen - auch fuer aufgespaltene Tabellen.
//Wenn ein Parameter != nsSwTblSearchType::TBLSEARCH_NONE uebergeben wird, so wird die
//Selektion in der angegebenen Richtung erweitert.
void MakeSelUnions( SwSelUnions&, const SwLayoutFrm *pStart,
const SwLayoutFrm *pEnd,
const SwTblSearchType = nsSwTblSearchType::TBLSEARCH_NONE );
// -------------------------------------------------------------------
// Diese Klassen kopieren die aktuelle Tabellen-Selektion (rBoxes)
// unter Beibehaltung der Tabellen-Strubktur in eine eigene Struktur
class _FndBox;
class _FndLine;
SV_DECL_PTRARR_DEL( _FndBoxes, _FndBox*, 10, 20 )
SV_DECL_PTRARR_DEL( _FndLines, _FndLine*,10, 20 )
class _FndBox
{
SwTableBox* pBox;
_FndLines aLines;
_FndLine* pUpper;
SwTableLine *pLineBefore; //Zum Loeschen/Restaurieren des Layouts.
SwTableLine *pLineBehind;
public:
_FndBox( SwTableBox* pB, _FndLine* pFL ) :
pBox(pB), pUpper(pFL), pLineBefore( 0 ), pLineBehind( 0 ) {}
const _FndLines& GetLines() const { return aLines; }
_FndLines& GetLines() { return aLines; }
const SwTableBox* GetBox() const { return pBox; }
SwTableBox* GetBox() { return pBox; }
const _FndLine* GetUpper() const { return pUpper; }
_FndLine* GetUpper() { return pUpper; }
void SetTableLines( const SwSelBoxes &rBoxes, const SwTable &rTable );
void SetTableLines( const SwTable &rTable );
//Solution:Add an input param to identify if acc table should be disposed
//void DelFrms ( SwTable &rTable );
void DelFrms ( SwTable &rTable,sal_Bool bAccTableDispose = sal_False );
void MakeFrms( SwTable &rTable );
void MakeNewFrms( SwTable &rTable, const sal_uInt16 nNumber,
const sal_Bool bBehind );
sal_Bool AreLinesToRestore( const SwTable &rTable ) const;
void ClearLineBehind() { pLineBehind = 0; }
};
class _FndLine
{
SwTableLine* pLine;
_FndBoxes aBoxes;
_FndBox* pUpper;
public:
_FndLine(SwTableLine* pL, _FndBox* pFB=0) : pLine(pL), pUpper(pFB) {}
const _FndBoxes& GetBoxes() const { return aBoxes; }
_FndBoxes& GetBoxes() { return aBoxes; }
const SwTableLine* GetLine() const { return pLine; }
SwTableLine* GetLine() { return pLine; }
const _FndBox* GetUpper() const { return pUpper; }
_FndBox* GetUpper() { return pUpper; }
void SetUpper( _FndBox* pUp ) { pUpper = pUp; }
};
struct _FndPara
{
const SwSelBoxes& rBoxes;
_FndLine* pFndLine;
_FndBox* pFndBox;
_FndPara( const SwSelBoxes& rBxs, _FndBox* pFB )
: rBoxes(rBxs), pFndLine(0), pFndBox(pFB) {}
_FndPara( const _FndPara& rPara, _FndBox* pFB )
: rBoxes(rPara.rBoxes), pFndLine(rPara.pFndLine), pFndBox(pFB) {}
_FndPara( const _FndPara& rPara, _FndLine* pFL )
: rBoxes(rPara.rBoxes), pFndLine(pFL), pFndBox(rPara.pFndBox) {}
};
sal_Bool _FndBoxCopyCol( const SwTableBox*& rpBox, void* pPara );
SW_DLLPUBLIC sal_Bool _FndLineCopyCol( const SwTableLine*& rpLine, void* pPara );
#endif // _TBLSEL_HXX
|