1 /*************************************************************************
3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
5 * Copyright 2008 by Sun Microsystems, Inc.
7 * OpenOffice.org - a multi-platform office productivity suite
9 * $RCSfile: tblsel.hxx,v $
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 ************************************************************************/
35 #include <swtable.hxx>
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
62 //Die Boxen werden ueber das Layout zusammengsucht, es wird auch bei
63 //aufgespaltenen Tabellen korrekt gearbeitet (siehe: MakeSelUnions()).
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
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.
119 SwRect aUnion
; //Das die Sel umschliessende Rechteck.
120 SwTabFrm
*pTable
; //Die (Follow-)Table zu der Union.
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
150 SV_DECL_PTRARR_DEL( _FndBoxes
, _FndBox
*, 10, 20 )
151 SV_DECL_PTRARR_DEL( _FndLines
, _FndLine
*,10, 20 )
159 SwTableLine
*pLineBefore
; //Zum Loeschen/Restaurieren des Layouts.
160 SwTableLine
*pLineBehind
;
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
183 void SaveChartData( const SwTable
&rTable
);
184 void RestoreChartData( const SwTable
&rTable
);
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
; }
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