xref: /trunk/main/sw/source/ui/frmdlg/colmgr.cxx (revision efeef26f)
1 /**************************************************************
2  *
3  * Licensed to the Apache Software Foundation (ASF) under one
4  * or more contributor license agreements.  See the NOTICE file
5  * distributed with this work for additional information
6  * regarding copyright ownership.  The ASF licenses this file
7  * to you under the Apache License, Version 2.0 (the
8  * "License"); you may not use this file except in compliance
9  * with the License.  You may obtain a copy of the License at
10  *
11  *   http://www.apache.org/licenses/LICENSE-2.0
12  *
13  * Unless required by applicable law or agreed to in writing,
14  * software distributed under the License is distributed on an
15  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16  * KIND, either express or implied.  See the License for the
17  * specific language governing permissions and limitations
18  * under the License.
19  *
20  *************************************************************/
21 
22 
23 
24 // MARKER(update_precomp.py): autogen include statement, do not remove
25 #include "precompiled_sw.hxx"
26 
27 
28 
29 #include "hintids.hxx"
30 #include <editeng/lrspitem.hxx>
31 
32 #include "frmmgr.hxx"
33 #include "frmfmt.hxx"
34 #include "colmgr.hxx"
35 
36 
37 // PRIVATE METHODES ------------------------------------------------------
38 /*------------------------------------------------------------------------
39  Beschreibung:	Spaltenbreite auf aktuelle Breite einstellen
40 ------------------------------------------------------------------------*/
41 
42 
43 
FitToActualSize(SwFmtCol & rCol,sal_uInt16 nWidth)44 void FitToActualSize(SwFmtCol& rCol, sal_uInt16 nWidth)
45 {
46 	const sal_uInt16 nCount = rCol.GetColumns().Count();
47 	for(sal_uInt16 i = 0; i < nCount; ++i)
48 	{
49 		const sal_uInt16 nTmp = rCol.CalcColWidth(i, nWidth);
50 		rCol.GetColumns()[i]->SetWishWidth(nTmp);
51 	}
52 	rCol.SetWishWidth(nWidth);
53 }
54 
55 
56 // PUBLIC METHODES -------------------------------------------------------
57 /*------------------------------------------------------------------------
58  Beschreibung:	Setzen Spaltenanzahl und Gutterwidth
59 ------------------------------------------------------------------------*/
60 
61 
62 
SetCount(sal_uInt16 nCount,sal_uInt16 nGutterWidth)63 void SwColMgr::SetCount(sal_uInt16 nCount, sal_uInt16  nGutterWidth)
64 {
65 	aFmtCol.Init(nCount, nGutterWidth, nWidth);
66 	aFmtCol.SetWishWidth(nWidth);
67 	aFmtCol.SetGutterWidth(nGutterWidth, nWidth);
68 }
69 
70 
71 
GetGutterWidth(sal_uInt16 nPos) const72 sal_uInt16 SwColMgr::GetGutterWidth( sal_uInt16 nPos ) const
73 {
74 	sal_uInt16 nRet;
75 	if(nPos == USHRT_MAX )
76 		nRet = GetCount() > 1 ? aFmtCol.GetGutterWidth() : DEF_GUTTER_WIDTH;
77 	else
78 	{
79 		DBG_ASSERT(nPos < GetCount() - 1, "Spalte ueberindiziert" );
80 		const SwColumns& rCols = aFmtCol.GetColumns();
81 		nRet = rCols.GetObject(nPos)->GetRight() + rCols.GetObject(nPos + 1)->GetLeft();
82 	}
83 	return nRet;
84 }
85 
86 /*-----------------22.10.96 14.28-------------------
87 
88 --------------------------------------------------*/
89 
90 
SetGutterWidth(sal_uInt16 nGutterWidth,sal_uInt16 nPos)91 void SwColMgr::SetGutterWidth(sal_uInt16 nGutterWidth, sal_uInt16 nPos )
92 {
93 	if(nPos == USHRT_MAX)
94 		aFmtCol.SetGutterWidth(nGutterWidth, nWidth);
95 	else
96 	{
97 		DBG_ASSERT(nPos < GetCount() - 1, "Spalte ueberindiziert" );
98 		SwColumns& rCols = aFmtCol.GetColumns();
99 		sal_uInt16 nGutterWidth2 = nGutterWidth / 2;
100 		rCols.GetObject(nPos)->SetRight(nGutterWidth2);
101 		rCols.GetObject(nPos + 1)->SetLeft(nGutterWidth2);
102 	}
103 }
104 
105 /*------------------------------------------------------------------------
106  Beschreibung:	Hoehe Trennlinie
107 ------------------------------------------------------------------------*/
108 
109 
110 
GetLineHeightPercent() const111 short SwColMgr::GetLineHeightPercent() const
112 {
113 	return (short)aFmtCol.GetLineHeight();
114 }
115 
116 
117 
SetLineHeightPercent(short nPercent)118 void SwColMgr::SetLineHeightPercent(short nPercent)
119 {
120 	ASSERT(nPercent <= 100, LineHeight darf nur bis 100 % gross  sein);
121 	aFmtCol.SetLineHeight((sal_uInt8)nPercent);
122 }
123 /*------------------------------------------------------------------------
124  Beschreibung:	Spaltenbreite
125 ------------------------------------------------------------------------*/
126 
127 
128 
GetColWidth(sal_uInt16 nIdx) const129 sal_uInt16 SwColMgr::GetColWidth(sal_uInt16 nIdx) const
130 {
131 	ASSERT(nIdx < GetCount(), Spaltenarray ueberindiziert.);
132 	return aFmtCol.CalcPrtColWidth(nIdx, nWidth);
133 }
134 
135 
136 
SetColWidth(sal_uInt16 nIdx,sal_uInt16 nWd)137 void SwColMgr::SetColWidth(sal_uInt16 nIdx, sal_uInt16 nWd)
138 {
139 	ASSERT(nIdx < GetCount(), Spaltenarray ueberindiziert.);
140 	aFmtCol.GetColumns()[nIdx]->SetWishWidth(nWd);
141 
142 }
143 
144 /*--------------------------------------------------------------------
145 	Beschreibung: 	Groesse neu setzen
146  --------------------------------------------------------------------*/
147 
148 
149 
SetActualWidth(sal_uInt16 nW)150 void SwColMgr::SetActualWidth(sal_uInt16 nW)
151 {
152 	nWidth = nW;
153 	::FitToActualSize(aFmtCol, nW);
154 }
155 
156 /*--------------------------------------------------------------------
157 	Beschreibung: ctor
158  --------------------------------------------------------------------*/
159 
160 
161 
SwColMgr(const SfxItemSet & rSet,sal_uInt16 nActWidth)162 SwColMgr::SwColMgr(const SfxItemSet& rSet, sal_uInt16 nActWidth) :
163 	aFmtCol((const SwFmtCol&)rSet.Get(RES_COL)),
164 	nWidth(nActWidth)
165 {
166 	if(nWidth == USHRT_MAX)
167 	{
168 		nWidth = (sal_uInt16)((const SwFmtFrmSize&)rSet.Get(RES_FRM_SIZE)).GetWidth();
169 		if (nWidth < MINLAY)
170 			nWidth = USHRT_MAX;
171 		const SvxLRSpaceItem &rLR = (const SvxLRSpaceItem&)rSet.Get(RES_LR_SPACE);
172         nWidth = nWidth - (sal_uInt16)rLR.GetLeft();
173         nWidth = nWidth - (sal_uInt16)rLR.GetRight();
174 	}
175 	::FitToActualSize(aFmtCol, nWidth);
176 }
177 
178 
179 
180 
~SwColMgr()181 SwColMgr::~SwColMgr() {}
182 
183 
184 
185 
186 
187 
188