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 ************************************************************************/
33 #include <svtools/svarray.hxx>
34 #include <swtable.hxx>
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
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
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.
131 SwRect aUnion
; //Das die Sel umschliessende Rechteck.
132 SwTabFrm
*pTable
; //Die (Follow-)Table zu der Union.
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
162 SV_DECL_PTRARR_DEL( _FndBoxes
, _FndBox
*, 10, 20 )
163 SV_DECL_PTRARR_DEL( _FndLines
, _FndLine
*,10, 20 )
171 SwTableLine
*pLineBefore
; //Zum Loeschen/Restaurieren des Layouts.
172 SwTableLine
*pLineBehind
;
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; }
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
; }
217 const SwSelBoxes
& rBoxes
;
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