xref: /trunk/main/sw/source/ui/frmdlg/colmgr.cxx (revision cdf0e10c)
1 /*************************************************************************
2  *
3  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4  *
5  * Copyright 2000, 2010 Oracle and/or its affiliates.
6  *
7  * OpenOffice.org - a multi-platform office productivity suite
8  *
9  * This file is part of OpenOffice.org.
10  *
11  * OpenOffice.org is free software: you can redistribute it and/or modify
12  * it under the terms of the GNU Lesser General Public License version 3
13  * only, as published by the Free Software Foundation.
14  *
15  * OpenOffice.org is distributed in the hope that it will be useful,
16  * but WITHOUT ANY WARRANTY; without even the implied warranty of
17  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
18  * GNU Lesser General Public License version 3 for more details
19  * (a copy is included in the LICENSE file that accompanied this code).
20  *
21  * You should have received a copy of the GNU Lesser General Public License
22  * version 3 along with OpenOffice.org.  If not, see
23  * <http://www.openoffice.org/license.html>
24  * for a copy of the LGPLv3 License.
25  *
26  ************************************************************************/
27 
28 // MARKER(update_precomp.py): autogen include statement, do not remove
29 #include "precompiled_sw.hxx"
30 
31 
32 
33 #include "hintids.hxx"
34 #include <editeng/lrspitem.hxx>
35 
36 #include "frmmgr.hxx"
37 #include "frmfmt.hxx"
38 #include "colmgr.hxx"
39 
40 
41 // PRIVATE METHODES ------------------------------------------------------
42 /*------------------------------------------------------------------------
43  Beschreibung:	Spaltenbreite auf aktuelle Breite einstellen
44 ------------------------------------------------------------------------*/
45 
46 
47 
48 void FitToActualSize(SwFmtCol& rCol, sal_uInt16 nWidth)
49 {
50 	const sal_uInt16 nCount = rCol.GetColumns().Count();
51 	for(sal_uInt16 i = 0; i < nCount; ++i)
52 	{
53 		const sal_uInt16 nTmp = rCol.CalcColWidth(i, nWidth);
54 		rCol.GetColumns()[i]->SetWishWidth(nTmp);
55 	}
56 	rCol.SetWishWidth(nWidth);
57 }
58 
59 
60 // PUBLIC METHODES -------------------------------------------------------
61 /*------------------------------------------------------------------------
62  Beschreibung:	Setzen Spaltenanzahl und Gutterwidth
63 ------------------------------------------------------------------------*/
64 
65 
66 
67 void SwColMgr::SetCount(sal_uInt16 nCount, sal_uInt16  nGutterWidth)
68 {
69 	aFmtCol.Init(nCount, nGutterWidth, nWidth);
70 	aFmtCol.SetWishWidth(nWidth);
71 	aFmtCol.SetGutterWidth(nGutterWidth, nWidth);
72 }
73 
74 
75 
76 sal_uInt16 SwColMgr::GetGutterWidth( sal_uInt16 nPos ) const
77 {
78 	sal_uInt16 nRet;
79 	if(nPos == USHRT_MAX )
80 		nRet = GetCount() > 1 ? aFmtCol.GetGutterWidth() : DEF_GUTTER_WIDTH;
81 	else
82 	{
83 		DBG_ASSERT(nPos < GetCount() - 1, "Spalte ueberindiziert" );
84 		const SwColumns& rCols = aFmtCol.GetColumns();
85 		nRet = rCols.GetObject(nPos)->GetRight() + rCols.GetObject(nPos + 1)->GetLeft();
86 	}
87 	return nRet;
88 }
89 
90 /*-----------------22.10.96 14.28-------------------
91 
92 --------------------------------------------------*/
93 
94 
95 void SwColMgr::SetGutterWidth(sal_uInt16 nGutterWidth, sal_uInt16 nPos )
96 {
97 	if(nPos == USHRT_MAX)
98 		aFmtCol.SetGutterWidth(nGutterWidth, nWidth);
99 	else
100 	{
101 		DBG_ASSERT(nPos < GetCount() - 1, "Spalte ueberindiziert" );
102 		SwColumns& rCols = aFmtCol.GetColumns();
103 		sal_uInt16 nGutterWidth2 = nGutterWidth / 2;
104 		rCols.GetObject(nPos)->SetRight(nGutterWidth2);
105 		rCols.GetObject(nPos + 1)->SetLeft(nGutterWidth2);
106 	}
107 }
108 
109 /*------------------------------------------------------------------------
110  Beschreibung:	Hoehe Trennlinie
111 ------------------------------------------------------------------------*/
112 
113 
114 
115 short SwColMgr::GetLineHeightPercent() const
116 {
117 	return (short)aFmtCol.GetLineHeight();
118 }
119 
120 
121 
122 void SwColMgr::SetLineHeightPercent(short nPercent)
123 {
124 	ASSERT(nPercent <= 100, LineHeight darf nur bis 100 % gross  sein);
125 	aFmtCol.SetLineHeight((sal_uInt8)nPercent);
126 }
127 /*------------------------------------------------------------------------
128  Beschreibung:	Spaltenbreite
129 ------------------------------------------------------------------------*/
130 
131 
132 
133 sal_uInt16 SwColMgr::GetColWidth(sal_uInt16 nIdx) const
134 {
135 	ASSERT(nIdx < GetCount(), Spaltenarray ueberindiziert.);
136 	return aFmtCol.CalcPrtColWidth(nIdx, nWidth);
137 }
138 
139 
140 
141 void SwColMgr::SetColWidth(sal_uInt16 nIdx, sal_uInt16 nWd)
142 {
143 	ASSERT(nIdx < GetCount(), Spaltenarray ueberindiziert.);
144 	aFmtCol.GetColumns()[nIdx]->SetWishWidth(nWd);
145 
146 }
147 
148 /*--------------------------------------------------------------------
149 	Beschreibung: 	Groesse neu setzen
150  --------------------------------------------------------------------*/
151 
152 
153 
154 void SwColMgr::SetActualWidth(sal_uInt16 nW)
155 {
156 	nWidth = nW;
157 	::FitToActualSize(aFmtCol, nW);
158 }
159 
160 /*--------------------------------------------------------------------
161 	Beschreibung: ctor
162  --------------------------------------------------------------------*/
163 
164 
165 
166 SwColMgr::SwColMgr(const SfxItemSet& rSet, sal_uInt16 nActWidth) :
167 	aFmtCol((const SwFmtCol&)rSet.Get(RES_COL)),
168 	nWidth(nActWidth)
169 {
170 	if(nWidth == USHRT_MAX)
171 	{
172 		nWidth = (sal_uInt16)((const SwFmtFrmSize&)rSet.Get(RES_FRM_SIZE)).GetWidth();
173 		if (nWidth < MINLAY)
174 			nWidth = USHRT_MAX;
175 		const SvxLRSpaceItem &rLR = (const SvxLRSpaceItem&)rSet.Get(RES_LR_SPACE);
176         nWidth = nWidth - (sal_uInt16)rLR.GetLeft();
177         nWidth = nWidth - (sal_uInt16)rLR.GetRight();
178 	}
179 	::FitToActualSize(aFmtCol, nWidth);
180 }
181 
182 
183 
184 
185 SwColMgr::~SwColMgr() {}
186 
187 
188 
189 
190 
191 
192