xref: /aoo41x/main/sw/source/ui/frmdlg/column.cxx (revision cdf0e10c)
1*cdf0e10cSrcweir /*************************************************************************
2*cdf0e10cSrcweir  *
3*cdf0e10cSrcweir  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4*cdf0e10cSrcweir  *
5*cdf0e10cSrcweir  * Copyright 2000, 2010 Oracle and/or its affiliates.
6*cdf0e10cSrcweir  *
7*cdf0e10cSrcweir  * OpenOffice.org - a multi-platform office productivity suite
8*cdf0e10cSrcweir  *
9*cdf0e10cSrcweir  * This file is part of OpenOffice.org.
10*cdf0e10cSrcweir  *
11*cdf0e10cSrcweir  * OpenOffice.org is free software: you can redistribute it and/or modify
12*cdf0e10cSrcweir  * it under the terms of the GNU Lesser General Public License version 3
13*cdf0e10cSrcweir  * only, as published by the Free Software Foundation.
14*cdf0e10cSrcweir  *
15*cdf0e10cSrcweir  * OpenOffice.org is distributed in the hope that it will be useful,
16*cdf0e10cSrcweir  * but WITHOUT ANY WARRANTY; without even the implied warranty of
17*cdf0e10cSrcweir  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
18*cdf0e10cSrcweir  * GNU Lesser General Public License version 3 for more details
19*cdf0e10cSrcweir  * (a copy is included in the LICENSE file that accompanied this code).
20*cdf0e10cSrcweir  *
21*cdf0e10cSrcweir  * You should have received a copy of the GNU Lesser General Public License
22*cdf0e10cSrcweir  * version 3 along with OpenOffice.org.  If not, see
23*cdf0e10cSrcweir  * <http://www.openoffice.org/license.html>
24*cdf0e10cSrcweir  * for a copy of the LGPLv3 License.
25*cdf0e10cSrcweir  *
26*cdf0e10cSrcweir  ************************************************************************/
27*cdf0e10cSrcweir 
28*cdf0e10cSrcweir // MARKER(update_precomp.py): autogen include statement, do not remove
29*cdf0e10cSrcweir #include "precompiled_sw.hxx"
30*cdf0e10cSrcweir 
31*cdf0e10cSrcweir #ifdef SW_DLLIMPLEMENTATION
32*cdf0e10cSrcweir #undef SW_DLLIMPLEMENTATION
33*cdf0e10cSrcweir #endif
34*cdf0e10cSrcweir 
35*cdf0e10cSrcweir #include "column.hxx"
36*cdf0e10cSrcweir 
37*cdf0e10cSrcweir #include "hintids.hxx"
38*cdf0e10cSrcweir #include <svx/htmlmode.hxx>
39*cdf0e10cSrcweir #include <editeng/borderline.hxx>
40*cdf0e10cSrcweir #include <editeng/boxitem.hxx>
41*cdf0e10cSrcweir #include <editeng/lrspitem.hxx>
42*cdf0e10cSrcweir #include <editeng/sizeitem.hxx>
43*cdf0e10cSrcweir #include "editeng/frmdiritem.hxx"
44*cdf0e10cSrcweir #include <svl/ctloptions.hxx>
45*cdf0e10cSrcweir #include <sfx2/dispatch.hxx>
46*cdf0e10cSrcweir #include <vcl/msgbox.hxx>
47*cdf0e10cSrcweir #include <swmodule.hxx>
48*cdf0e10cSrcweir 
49*cdf0e10cSrcweir #include <helpid.h>
50*cdf0e10cSrcweir #include "globals.hrc"
51*cdf0e10cSrcweir #include "swtypes.hxx"
52*cdf0e10cSrcweir #include "wrtsh.hxx"
53*cdf0e10cSrcweir #include "view.hxx"
54*cdf0e10cSrcweir #include "docsh.hxx"
55*cdf0e10cSrcweir #include "uitool.hxx"
56*cdf0e10cSrcweir #include "cmdid.h"
57*cdf0e10cSrcweir #include "viewopt.hxx"
58*cdf0e10cSrcweir #include "format.hxx"
59*cdf0e10cSrcweir #include "frmmgr.hxx"
60*cdf0e10cSrcweir #include "frmdlg.hxx"
61*cdf0e10cSrcweir #include "colmgr.hxx"
62*cdf0e10cSrcweir #include "prcntfld.hxx"
63*cdf0e10cSrcweir #include "paratr.hxx"
64*cdf0e10cSrcweir #include "frmui.hrc"
65*cdf0e10cSrcweir #include "poolfmt.hrc"
66*cdf0e10cSrcweir #include "column.hrc"
67*cdf0e10cSrcweir #include <section.hxx>
68*cdf0e10cSrcweir #include <docary.hxx>
69*cdf0e10cSrcweir #include <pagedesc.hxx>
70*cdf0e10cSrcweir 
71*cdf0e10cSrcweir #include "access.hrc"
72*cdf0e10cSrcweir 
73*cdf0e10cSrcweir #define FRAME_FORMAT_WIDTH 1000
74*cdf0e10cSrcweir 
75*cdf0e10cSrcweir // sw/inc/fmtclds.hxx
76*cdf0e10cSrcweir SV_IMPL_PTRARR( SwColumns, SwColumnPtr )
77*cdf0e10cSrcweir 
78*cdf0e10cSrcweir /*--------------------------------------------------------------------
79*cdf0e10cSrcweir 	Beschreibung:  Statische Daten
80*cdf0e10cSrcweir  --------------------------------------------------------------------*/
81*cdf0e10cSrcweir 
82*cdf0e10cSrcweir static const sal_uInt16 __FAR_DATA nLines[] = {
83*cdf0e10cSrcweir 	DEF_LINE_WIDTH_0,
84*cdf0e10cSrcweir 	DEF_LINE_WIDTH_1,
85*cdf0e10cSrcweir 	DEF_LINE_WIDTH_2,
86*cdf0e10cSrcweir 	DEF_LINE_WIDTH_3,
87*cdf0e10cSrcweir 	DEF_LINE_WIDTH_4
88*cdf0e10cSrcweir };
89*cdf0e10cSrcweir 
90*cdf0e10cSrcweir static const sal_uInt16 nLineCount = sizeof(nLines) / sizeof(nLines[0]);
91*cdf0e10cSrcweir static const sal_uInt16 nVisCols = 3;
92*cdf0e10cSrcweir 
93*cdf0e10cSrcweir inline sal_Bool IsMarkInSameSection( SwWrtShell& rWrtSh, const SwSection* pSect )
94*cdf0e10cSrcweir {
95*cdf0e10cSrcweir 	rWrtSh.SwapPam();
96*cdf0e10cSrcweir 	sal_Bool bRet = pSect == rWrtSh.GetCurrSection();
97*cdf0e10cSrcweir 	rWrtSh.SwapPam();
98*cdf0e10cSrcweir 	return bRet;
99*cdf0e10cSrcweir }
100*cdf0e10cSrcweir 
101*cdf0e10cSrcweir /*--------------------------------------------------------------------
102*cdf0e10cSrcweir 	Beschreibung:
103*cdf0e10cSrcweir  --------------------------------------------------------------------*/
104*cdf0e10cSrcweir 
105*cdf0e10cSrcweir SwColumnDlg::SwColumnDlg(Window* pParent, SwWrtShell& rSh) :
106*cdf0e10cSrcweir 	SfxModalDialog(pParent, SW_RES(DLG_COLUMN)),
107*cdf0e10cSrcweir 	aOK(this, 		SW_RES(PB_OK)),
108*cdf0e10cSrcweir 	aCancel(this, 	SW_RES(PB_CANCEL)),
109*cdf0e10cSrcweir 	aHelp(this, 	SW_RES(PB_HELP)),
110*cdf0e10cSrcweir 	aApplyToFT(this, SW_RES(FT_APPLY_TO)),
111*cdf0e10cSrcweir 	aApplyToLB(this, SW_RES(LB_APPLY_TO)),
112*cdf0e10cSrcweir 	rWrtShell(rSh),
113*cdf0e10cSrcweir 	pPageSet(0),
114*cdf0e10cSrcweir 	pSectionSet(0),
115*cdf0e10cSrcweir 	pSelectionSet(0),
116*cdf0e10cSrcweir 	pFrameSet(0),
117*cdf0e10cSrcweir 	nOldSelection(0),
118*cdf0e10cSrcweir     nSelectionWidth(0),
119*cdf0e10cSrcweir 	bPageChanged(sal_False),
120*cdf0e10cSrcweir 	bSectionChanged(sal_False),
121*cdf0e10cSrcweir 	bSelSectionChanged(sal_False),
122*cdf0e10cSrcweir 	bFrameChanged(sal_False)
123*cdf0e10cSrcweir {
124*cdf0e10cSrcweir 	FreeResource();
125*cdf0e10cSrcweir 
126*cdf0e10cSrcweir 	SwRect aRect;
127*cdf0e10cSrcweir     rWrtShell.CalcBoundRect(aRect, FLY_AS_CHAR);
128*cdf0e10cSrcweir 
129*cdf0e10cSrcweir 	nSelectionWidth = aRect.Width();
130*cdf0e10cSrcweir 
131*cdf0e10cSrcweir 	SfxItemSet* pColPgSet = 0;
132*cdf0e10cSrcweir 	static sal_uInt16 __READONLY_DATA aSectIds[] = { RES_COL, RES_COL,
133*cdf0e10cSrcweir 												RES_FRM_SIZE, RES_FRM_SIZE,
134*cdf0e10cSrcweir                                                 RES_COLUMNBALANCE, RES_FRAMEDIR,
135*cdf0e10cSrcweir 												0 };
136*cdf0e10cSrcweir 
137*cdf0e10cSrcweir 	const SwSection* pCurrSection = rWrtShell.GetCurrSection();
138*cdf0e10cSrcweir 	sal_uInt16 nFullSectCnt = rWrtShell.GetFullSelectedSectionCount();
139*cdf0e10cSrcweir 	if( pCurrSection && ( !rWrtShell.HasSelection() || 0 != nFullSectCnt ))
140*cdf0e10cSrcweir 	{
141*cdf0e10cSrcweir 		nSelectionWidth = rSh.GetSectionWidth(*pCurrSection->GetFmt());
142*cdf0e10cSrcweir 		if ( !nSelectionWidth )
143*cdf0e10cSrcweir 			nSelectionWidth = USHRT_MAX;
144*cdf0e10cSrcweir 		pSectionSet = new SfxItemSet( rWrtShell.GetAttrPool(), aSectIds );
145*cdf0e10cSrcweir 		pSectionSet->Put( pCurrSection->GetFmt()->GetAttrSet() );
146*cdf0e10cSrcweir 		pColPgSet = pSectionSet;
147*cdf0e10cSrcweir 		aApplyToLB.RemoveEntry( aApplyToLB.GetEntryPos(
148*cdf0e10cSrcweir 										(void*)( 1 >= nFullSectCnt
149*cdf0e10cSrcweir 													? LISTBOX_SECTIONS
150*cdf0e10cSrcweir 													: LISTBOX_SECTION )));
151*cdf0e10cSrcweir 	}
152*cdf0e10cSrcweir 	else
153*cdf0e10cSrcweir 	{
154*cdf0e10cSrcweir 		aApplyToLB.RemoveEntry(aApplyToLB.GetEntryPos( (void*) LISTBOX_SECTION ));
155*cdf0e10cSrcweir 		aApplyToLB.RemoveEntry(aApplyToLB.GetEntryPos( (void*) LISTBOX_SECTIONS ));
156*cdf0e10cSrcweir 	}
157*cdf0e10cSrcweir 
158*cdf0e10cSrcweir 	if( rWrtShell.HasSelection() && rWrtShell.IsInsRegionAvailable() &&
159*cdf0e10cSrcweir 		( !pCurrSection || ( 1 != nFullSectCnt &&
160*cdf0e10cSrcweir 			IsMarkInSameSection( rWrtShell, pCurrSection ) )))
161*cdf0e10cSrcweir 	{
162*cdf0e10cSrcweir 		pSelectionSet = new SfxItemSet( rWrtShell.GetAttrPool(), aSectIds );
163*cdf0e10cSrcweir 		pColPgSet = pSelectionSet;
164*cdf0e10cSrcweir 	}
165*cdf0e10cSrcweir 	else
166*cdf0e10cSrcweir 		aApplyToLB.RemoveEntry(aApplyToLB.GetEntryPos( (void*) LISTBOX_SELECTION ));
167*cdf0e10cSrcweir 
168*cdf0e10cSrcweir 	if( rWrtShell.GetFlyFrmFmt() )
169*cdf0e10cSrcweir 	{
170*cdf0e10cSrcweir 		const SwFrmFmt* pFmt = rSh.GetFlyFrmFmt() ;
171*cdf0e10cSrcweir 		pFrameSet = new SfxItemSet(rWrtShell.GetAttrPool(), aSectIds );
172*cdf0e10cSrcweir 		pFrameSet->Put(pFmt->GetFrmSize());
173*cdf0e10cSrcweir 		pFrameSet->Put(pFmt->GetCol());
174*cdf0e10cSrcweir 		pColPgSet = pFrameSet;
175*cdf0e10cSrcweir 	}
176*cdf0e10cSrcweir 	else
177*cdf0e10cSrcweir 		aApplyToLB.RemoveEntry(aApplyToLB.GetEntryPos( (void*) LISTBOX_FRAME ));
178*cdf0e10cSrcweir 
179*cdf0e10cSrcweir 
180*cdf0e10cSrcweir 	sal_uInt16 nPagePos = aApplyToLB.GetEntryPos( (void*) LISTBOX_PAGE );
181*cdf0e10cSrcweir 	const SwPageDesc* pPageDesc = rWrtShell.GetSelectedPageDescs();
182*cdf0e10cSrcweir 	if( pPageDesc )
183*cdf0e10cSrcweir 	{
184*cdf0e10cSrcweir 		pPageSet = new SfxItemSet( rWrtShell.GetAttrPool(),
185*cdf0e10cSrcweir 									RES_COL, RES_COL,
186*cdf0e10cSrcweir 									RES_FRM_SIZE, RES_FRM_SIZE,
187*cdf0e10cSrcweir 									RES_LR_SPACE, RES_LR_SPACE,
188*cdf0e10cSrcweir 									0 );
189*cdf0e10cSrcweir 
190*cdf0e10cSrcweir 		String sPageStr = aApplyToLB.GetEntry(nPagePos);
191*cdf0e10cSrcweir 		aApplyToLB.RemoveEntry( nPagePos );
192*cdf0e10cSrcweir 		sPageStr += pPageDesc->GetName();
193*cdf0e10cSrcweir 		aApplyToLB.InsertEntry( sPageStr, nPagePos );
194*cdf0e10cSrcweir 		aApplyToLB.SetEntryData( nPagePos, (void*) LISTBOX_PAGE);
195*cdf0e10cSrcweir 
196*cdf0e10cSrcweir 		const SwFrmFmt &rFmt = pPageDesc->GetMaster();
197*cdf0e10cSrcweir 		nPageWidth = rFmt.GetFrmSize().GetSize().Width();
198*cdf0e10cSrcweir 
199*cdf0e10cSrcweir 		const SvxLRSpaceItem& rLRSpace = (const SvxLRSpaceItem&)rFmt.GetLRSpace();
200*cdf0e10cSrcweir         const SvxBoxItem& rBox = (const SvxBoxItem&) rFmt.GetBox();
201*cdf0e10cSrcweir         nPageWidth -= rLRSpace.GetLeft() + rLRSpace.GetRight() + rBox.GetDistance();
202*cdf0e10cSrcweir 
203*cdf0e10cSrcweir 		pPageSet->Put(rFmt.GetCol());
204*cdf0e10cSrcweir 		pPageSet->Put(rFmt.GetLRSpace());
205*cdf0e10cSrcweir 		pColPgSet = pPageSet;
206*cdf0e10cSrcweir 	}
207*cdf0e10cSrcweir 	else
208*cdf0e10cSrcweir 		aApplyToLB.RemoveEntry( nPagePos );
209*cdf0e10cSrcweir 
210*cdf0e10cSrcweir 
211*cdf0e10cSrcweir 	ASSERT( pColPgSet, "" );
212*cdf0e10cSrcweir 	// TabPage erzeugen
213*cdf0e10cSrcweir 	SwColumnPage* pPage = (SwColumnPage*) SwColumnPage::Create( this,
214*cdf0e10cSrcweir 																*pColPgSet );
215*cdf0e10cSrcweir 	pTabPage = pPage;
216*cdf0e10cSrcweir 
217*cdf0e10cSrcweir 	//Groesse anpassen
218*cdf0e10cSrcweir 	Size aPageSize(pTabPage->GetSizePixel());
219*cdf0e10cSrcweir 	Size aDlgSize(GetOutputSizePixel());
220*cdf0e10cSrcweir 	aDlgSize.Height() = aPageSize.Height();
221*cdf0e10cSrcweir 	SetOutputSizePixel(aDlgSize);
222*cdf0e10cSrcweir 	pTabPage->Show();
223*cdf0e10cSrcweir 
224*cdf0e10cSrcweir 	aApplyToLB.SelectEntryPos(0);
225*cdf0e10cSrcweir 	ObjectHdl(0);
226*cdf0e10cSrcweir 
227*cdf0e10cSrcweir 	aApplyToLB.SetSelectHdl(LINK(this, SwColumnDlg, ObjectHdl));
228*cdf0e10cSrcweir 	aOK.SetClickHdl(LINK(this, SwColumnDlg, OkHdl));
229*cdf0e10cSrcweir     //#i80458# if no columns can be set then disable OK
230*cdf0e10cSrcweir     if( !aApplyToLB.GetEntryCount() )
231*cdf0e10cSrcweir         aOK.Enable( sal_False );
232*cdf0e10cSrcweir     //#i97810# set focus to the TabPage
233*cdf0e10cSrcweir     pTabPage->ActivateColumnControl();
234*cdf0e10cSrcweir }
235*cdf0e10cSrcweir 
236*cdf0e10cSrcweir /*--------------------------------------------------------------------
237*cdf0e10cSrcweir 	Beschreibung:
238*cdf0e10cSrcweir  --------------------------------------------------------------------*/
239*cdf0e10cSrcweir 
240*cdf0e10cSrcweir SwColumnDlg::~SwColumnDlg()
241*cdf0e10cSrcweir {
242*cdf0e10cSrcweir 	delete pTabPage;
243*cdf0e10cSrcweir 	delete pPageSet;
244*cdf0e10cSrcweir 	delete pSectionSet;
245*cdf0e10cSrcweir 	delete pSelectionSet;
246*cdf0e10cSrcweir }
247*cdf0e10cSrcweir 
248*cdf0e10cSrcweir /* -----------------26.05.99 11:40-------------------
249*cdf0e10cSrcweir  *
250*cdf0e10cSrcweir  * --------------------------------------------------*/
251*cdf0e10cSrcweir IMPL_LINK(SwColumnDlg, ObjectHdl, ListBox*, pBox)
252*cdf0e10cSrcweir {
253*cdf0e10cSrcweir 	SfxItemSet* pSet = 0;
254*cdf0e10cSrcweir 	switch(nOldSelection)
255*cdf0e10cSrcweir 	{
256*cdf0e10cSrcweir 		case LISTBOX_SELECTION  :
257*cdf0e10cSrcweir 			pSet = pSelectionSet;
258*cdf0e10cSrcweir 		break;
259*cdf0e10cSrcweir 		case LISTBOX_SECTION	:
260*cdf0e10cSrcweir 			pSet = pSectionSet;
261*cdf0e10cSrcweir 			bSectionChanged = sal_True;
262*cdf0e10cSrcweir 		break;
263*cdf0e10cSrcweir 		case LISTBOX_SECTIONS	:
264*cdf0e10cSrcweir 			pSet = pSectionSet;
265*cdf0e10cSrcweir 			bSelSectionChanged = sal_True;
266*cdf0e10cSrcweir 		break;
267*cdf0e10cSrcweir 		case LISTBOX_PAGE		:
268*cdf0e10cSrcweir 			pSet = pPageSet;
269*cdf0e10cSrcweir 			bPageChanged = sal_True;
270*cdf0e10cSrcweir 		break;
271*cdf0e10cSrcweir 		case LISTBOX_FRAME:
272*cdf0e10cSrcweir 			pSet = pFrameSet;
273*cdf0e10cSrcweir 			bFrameChanged = sal_True;
274*cdf0e10cSrcweir 		break;
275*cdf0e10cSrcweir 	}
276*cdf0e10cSrcweir 	if(pBox)
277*cdf0e10cSrcweir 	{
278*cdf0e10cSrcweir 		pTabPage->FillItemSet(*pSet);
279*cdf0e10cSrcweir 	}
280*cdf0e10cSrcweir 	nOldSelection = (long)aApplyToLB.GetEntryData(aApplyToLB.GetSelectEntryPos());
281*cdf0e10cSrcweir 	long nWidth = nSelectionWidth;
282*cdf0e10cSrcweir 	switch(nOldSelection)
283*cdf0e10cSrcweir 	{
284*cdf0e10cSrcweir 		case LISTBOX_SELECTION  :
285*cdf0e10cSrcweir 			pSet = pSelectionSet;
286*cdf0e10cSrcweir             if( pSelectionSet )
287*cdf0e10cSrcweir 			    pSet->Put(SwFmtFrmSize(ATT_VAR_SIZE, nWidth, nWidth));
288*cdf0e10cSrcweir 		break;
289*cdf0e10cSrcweir 		case LISTBOX_SECTION	:
290*cdf0e10cSrcweir 		case LISTBOX_SECTIONS	:
291*cdf0e10cSrcweir 			pSet = pSectionSet;
292*cdf0e10cSrcweir 			pSet->Put(SwFmtFrmSize(ATT_VAR_SIZE, nWidth, nWidth));
293*cdf0e10cSrcweir 		break;
294*cdf0e10cSrcweir 		case LISTBOX_PAGE		:
295*cdf0e10cSrcweir 			nWidth = nPageWidth;
296*cdf0e10cSrcweir 			pSet = pPageSet;
297*cdf0e10cSrcweir 			pSet->Put(SwFmtFrmSize(ATT_VAR_SIZE, nWidth, nWidth));
298*cdf0e10cSrcweir 		break;
299*cdf0e10cSrcweir 		case LISTBOX_FRAME:
300*cdf0e10cSrcweir 			pSet = pFrameSet;
301*cdf0e10cSrcweir 		break;
302*cdf0e10cSrcweir 	}
303*cdf0e10cSrcweir 
304*cdf0e10cSrcweir     sal_Bool bIsSection = pSet == pSectionSet || pSet == pSelectionSet;
305*cdf0e10cSrcweir     pTabPage->ShowBalance(bIsSection);
306*cdf0e10cSrcweir     pTabPage->SetInSection(bIsSection);
307*cdf0e10cSrcweir     pTabPage->SetFrmMode(sal_True);
308*cdf0e10cSrcweir 	pTabPage->SetPageWidth(nWidth);
309*cdf0e10cSrcweir 	if( pSet )
310*cdf0e10cSrcweir         pTabPage->Reset(*pSet);
311*cdf0e10cSrcweir 	return 0;
312*cdf0e10cSrcweir }
313*cdf0e10cSrcweir /* -----------------26.05.99 12:32-------------------
314*cdf0e10cSrcweir  *
315*cdf0e10cSrcweir  * --------------------------------------------------*/
316*cdf0e10cSrcweir IMPL_LINK(SwColumnDlg, OkHdl, OKButton*, EMPTYARG)
317*cdf0e10cSrcweir {
318*cdf0e10cSrcweir 	//aktuelle Selektion auswerten
319*cdf0e10cSrcweir 	SfxItemSet* pSet = 0;
320*cdf0e10cSrcweir 	switch(nOldSelection)
321*cdf0e10cSrcweir 	{
322*cdf0e10cSrcweir 		case LISTBOX_SELECTION  :
323*cdf0e10cSrcweir 			pSet = pSelectionSet;
324*cdf0e10cSrcweir 		break;
325*cdf0e10cSrcweir 		case LISTBOX_SECTION	:
326*cdf0e10cSrcweir 			pSet = pSectionSet;
327*cdf0e10cSrcweir 			bSectionChanged = sal_True;
328*cdf0e10cSrcweir 		break;
329*cdf0e10cSrcweir 		case LISTBOX_SECTIONS	:
330*cdf0e10cSrcweir 			pSet = pSectionSet;
331*cdf0e10cSrcweir 			bSelSectionChanged = sal_True;
332*cdf0e10cSrcweir 		break;
333*cdf0e10cSrcweir 		case LISTBOX_PAGE		:
334*cdf0e10cSrcweir 			pSet = pPageSet;
335*cdf0e10cSrcweir 			bPageChanged = sal_True;
336*cdf0e10cSrcweir 		break;
337*cdf0e10cSrcweir 		case LISTBOX_FRAME:
338*cdf0e10cSrcweir 			pSet = pFrameSet;
339*cdf0e10cSrcweir 			bFrameChanged = sal_True;
340*cdf0e10cSrcweir 		break;
341*cdf0e10cSrcweir 	}
342*cdf0e10cSrcweir 	pTabPage->FillItemSet(*pSet);
343*cdf0e10cSrcweir 
344*cdf0e10cSrcweir 	if(pSelectionSet && SFX_ITEM_SET == pSelectionSet->GetItemState(RES_COL))
345*cdf0e10cSrcweir 	{
346*cdf0e10cSrcweir 		//Bereich mit Spalten einfuegen
347*cdf0e10cSrcweir 		const SwFmtCol& rColItem = (const SwFmtCol&)pSelectionSet->Get(RES_COL);
348*cdf0e10cSrcweir 		//nur, wenn es auch Spalten gibt!
349*cdf0e10cSrcweir 		if(rColItem.GetNumCols() > 1)
350*cdf0e10cSrcweir 			rWrtShell.GetView().GetViewFrame()->GetDispatcher()->Execute(
351*cdf0e10cSrcweir                 FN_INSERT_REGION, SFX_CALLMODE_ASYNCHRON, *pSelectionSet );
352*cdf0e10cSrcweir 	}
353*cdf0e10cSrcweir 
354*cdf0e10cSrcweir 	if(pSectionSet && pSectionSet->Count() && bSectionChanged )
355*cdf0e10cSrcweir 	{
356*cdf0e10cSrcweir 		const SwSection* pCurrSection = rWrtShell.GetCurrSection();
357*cdf0e10cSrcweir 		const SwSectionFmt* pFmt = pCurrSection->GetFmt();
358*cdf0e10cSrcweir 		sal_uInt16 nNewPos = rWrtShell.GetSectionFmtPos( *pFmt );
359*cdf0e10cSrcweir         SwSectionData aData(*pCurrSection);
360*cdf0e10cSrcweir         rWrtShell.UpdateSection( nNewPos, aData, pSectionSet );
361*cdf0e10cSrcweir 	}
362*cdf0e10cSrcweir 
363*cdf0e10cSrcweir 	if(pSectionSet && pSectionSet->Count() && bSelSectionChanged )
364*cdf0e10cSrcweir 	{
365*cdf0e10cSrcweir 		rWrtShell.SetSectionAttr( *pSectionSet );
366*cdf0e10cSrcweir 	}
367*cdf0e10cSrcweir 
368*cdf0e10cSrcweir 	if(pPageSet && SFX_ITEM_SET == pPageSet->GetItemState(RES_COL) && bPageChanged)
369*cdf0e10cSrcweir 	{
370*cdf0e10cSrcweir 		// aktuellen PageDescriptor ermitteln und damit den Set fuellen
371*cdf0e10cSrcweir 		const sal_uInt16 nCurIdx = rWrtShell.GetCurPageDesc();
372*cdf0e10cSrcweir 		SwPageDesc aPageDesc(rWrtShell.GetPageDesc(nCurIdx));
373*cdf0e10cSrcweir 		SwFrmFmt &rFmt = aPageDesc.GetMaster();
374*cdf0e10cSrcweir         rFmt.SetFmtAttr(pPageSet->Get(RES_COL));
375*cdf0e10cSrcweir 		rWrtShell.ChgPageDesc(nCurIdx, aPageDesc);
376*cdf0e10cSrcweir 	}
377*cdf0e10cSrcweir 	if(pFrameSet && SFX_ITEM_SET == pFrameSet->GetItemState(RES_COL) && bFrameChanged)
378*cdf0e10cSrcweir 	{
379*cdf0e10cSrcweir 		SfxItemSet aTmp(*pFrameSet->GetPool(), RES_COL, RES_COL);
380*cdf0e10cSrcweir 		aTmp.Put(*pFrameSet);
381*cdf0e10cSrcweir 		rWrtShell.StartAction();
382*cdf0e10cSrcweir 		rWrtShell.Push();
383*cdf0e10cSrcweir 		rWrtShell.SetFlyFrmAttr( aTmp );
384*cdf0e10cSrcweir 		//die Rahmenselektion wieder aufheben
385*cdf0e10cSrcweir 		if(rWrtShell.IsFrmSelected())
386*cdf0e10cSrcweir 		{
387*cdf0e10cSrcweir 			rWrtShell.UnSelectFrm();
388*cdf0e10cSrcweir 			rWrtShell.LeaveSelFrmMode();
389*cdf0e10cSrcweir 		}
390*cdf0e10cSrcweir 		rWrtShell.Pop();
391*cdf0e10cSrcweir 		rWrtShell.EndAction();
392*cdf0e10cSrcweir 	}
393*cdf0e10cSrcweir 	EndDialog(RET_OK);
394*cdf0e10cSrcweir 	return 0;
395*cdf0e10cSrcweir }
396*cdf0e10cSrcweir 
397*cdf0e10cSrcweir /*--------------------------------------------------------------------
398*cdf0e10cSrcweir 	Beschreibung:
399*cdf0e10cSrcweir  --------------------------------------------------------------------*/
400*cdf0e10cSrcweir 
401*cdf0e10cSrcweir #if OSL_DEBUG_LEVEL < 2
402*cdf0e10cSrcweir inline
403*cdf0e10cSrcweir #endif
404*cdf0e10cSrcweir sal_uInt16 GetMaxWidth( SwColMgr* pColMgr, sal_uInt16 nCols )
405*cdf0e10cSrcweir {
406*cdf0e10cSrcweir 	sal_uInt16 nMax = pColMgr->GetActualSize();
407*cdf0e10cSrcweir 	if( --nCols )
408*cdf0e10cSrcweir 		nMax -= pColMgr->GetGutterWidth() * nCols;
409*cdf0e10cSrcweir 	return nMax;
410*cdf0e10cSrcweir }
411*cdf0e10cSrcweir 
412*cdf0e10cSrcweir static sal_uInt16 __FAR_DATA aPageRg[] = {
413*cdf0e10cSrcweir 	RES_COL, RES_COL,
414*cdf0e10cSrcweir 	0
415*cdf0e10cSrcweir };
416*cdf0e10cSrcweir 
417*cdf0e10cSrcweir 
418*cdf0e10cSrcweir DBG_NAME(columnhdl)
419*cdf0e10cSrcweir 
420*cdf0e10cSrcweir 
421*cdf0e10cSrcweir 
422*cdf0e10cSrcweir sal_uInt16 lcl_LineWidthToPos(sal_uLong nWidth)
423*cdf0e10cSrcweir {
424*cdf0e10cSrcweir 	const sal_uInt16 nUShortWidth = (sal_uInt16)nWidth;
425*cdf0e10cSrcweir 	for(sal_uInt16 i = 0; i < nLineCount; ++i)
426*cdf0e10cSrcweir 		if(nUShortWidth == nLines[i])
427*cdf0e10cSrcweir 			return i;
428*cdf0e10cSrcweir 	return 0;
429*cdf0e10cSrcweir }
430*cdf0e10cSrcweir 
431*cdf0e10cSrcweir 
432*cdf0e10cSrcweir 
433*cdf0e10cSrcweir void SwColumnPage::ResetColWidth()
434*cdf0e10cSrcweir {
435*cdf0e10cSrcweir 	if( nCols )
436*cdf0e10cSrcweir 	{
437*cdf0e10cSrcweir 		sal_uInt16 nWidth = GetMaxWidth( pColMgr, nCols );
438*cdf0e10cSrcweir         nWidth = nWidth / nCols;
439*cdf0e10cSrcweir 
440*cdf0e10cSrcweir 		for(sal_uInt16 i = 0; i < nCols; ++i)
441*cdf0e10cSrcweir 			nColWidth[i] = (long) nWidth;
442*cdf0e10cSrcweir 	}
443*cdf0e10cSrcweir 
444*cdf0e10cSrcweir }
445*cdf0e10cSrcweir 
446*cdf0e10cSrcweir /*--------------------------------------------------------------------
447*cdf0e10cSrcweir 	Beschreibung:	Jetzt als TabPage
448*cdf0e10cSrcweir  --------------------------------------------------------------------*/
449*cdf0e10cSrcweir 
450*cdf0e10cSrcweir 
451*cdf0e10cSrcweir 
452*cdf0e10cSrcweir SwColumnPage::SwColumnPage(Window *pParent, const SfxItemSet &rSet)
453*cdf0e10cSrcweir 
454*cdf0e10cSrcweir 	: SfxTabPage(pParent, SW_RES(TP_COLUMN), rSet),
455*cdf0e10cSrcweir 
456*cdf0e10cSrcweir     aFLGroup(this,          SW_RES(FL_COLUMNS )),
457*cdf0e10cSrcweir     aClNrLbl(this,          SW_RES(FT_NUMBER  )),
458*cdf0e10cSrcweir     aCLNrEdt(this,          SW_RES(ED_NUMBER  )),
459*cdf0e10cSrcweir     aDefaultVS(this,        SW_RES(VS_DEFAULTS)),
460*cdf0e10cSrcweir     aBalanceColsCB(this,    SW_RES(CB_BALANCECOLS)),
461*cdf0e10cSrcweir 
462*cdf0e10cSrcweir     aFLLayout(this,         SW_RES(FL_LAYOUT)),
463*cdf0e10cSrcweir     aBtnUp(this,            SW_RES(BTN_DOWN)),
464*cdf0e10cSrcweir     aColumnFT(this,         SW_RES(FT_COLUMN)),
465*cdf0e10cSrcweir     aWidthFT(this,          SW_RES(FT_WIDTH)),
466*cdf0e10cSrcweir     aDistFT(this,           SW_RES(FT_DIST)),
467*cdf0e10cSrcweir     aLbl1(this,             SW_RES(FT_1)),
468*cdf0e10cSrcweir     aEd1(this,              SW_RES(ED_1)),
469*cdf0e10cSrcweir     aDistEd1(this,          SW_RES(ED_DIST1)),
470*cdf0e10cSrcweir     aLbl2(this,             SW_RES(FT_2)),
471*cdf0e10cSrcweir     aEd2(this,              SW_RES(ED_2)),
472*cdf0e10cSrcweir     aDistEd2(this,          SW_RES(ED_DIST2)),
473*cdf0e10cSrcweir     aLbl3(this,             SW_RES(FT_3)),
474*cdf0e10cSrcweir     aEd3(this,              SW_RES(ED_3)),
475*cdf0e10cSrcweir     aBtnDown(this,          SW_RES(BTN_UP)),
476*cdf0e10cSrcweir     aAutoWidthBox(this,     SW_RES(CB_AUTO_WIDTH)),
477*cdf0e10cSrcweir 
478*cdf0e10cSrcweir     aFLLineType(this,       SW_RES(FL_LINETYPE)),
479*cdf0e10cSrcweir     aLineTypeLbl(this,      SW_RES(FT_STYLE)),
480*cdf0e10cSrcweir     aLineTypeDLB(this,      SW_RES(LB_STYLE)),
481*cdf0e10cSrcweir     aLineHeightLbl(this,    SW_RES(FT_HEIGHT)),
482*cdf0e10cSrcweir     aLineHeightEdit(this,   SW_RES(ED_HEIGHT)),
483*cdf0e10cSrcweir     aLinePosLbl(this,       SW_RES(FT_POSITION)),
484*cdf0e10cSrcweir     aLinePosDLB(this,       SW_RES(LB_POSITION)),
485*cdf0e10cSrcweir 
486*cdf0e10cSrcweir     aVertFL(this,         SW_RES(FL_VERT)),
487*cdf0e10cSrcweir     aPropertiesFL(  this,    SW_RES( FL_PROPERTIES    )),
488*cdf0e10cSrcweir     aTextDirectionFT( this,  SW_RES( FT_TEXTDIRECTION )),
489*cdf0e10cSrcweir     aTextDirectionLB( this,  SW_RES( LB_TEXTDIRECTION )),
490*cdf0e10cSrcweir 
491*cdf0e10cSrcweir     aPgeExampleWN(this,     SW_RES(WN_BSP)),
492*cdf0e10cSrcweir     aFrmExampleWN(this,     SW_RES(WN_BSP)),
493*cdf0e10cSrcweir 
494*cdf0e10cSrcweir     pColMgr(0),
495*cdf0e10cSrcweir 
496*cdf0e10cSrcweir     nFirstVis(0),
497*cdf0e10cSrcweir     nMinWidth(MINLAY),
498*cdf0e10cSrcweir     pModifiedField(0),
499*cdf0e10cSrcweir     bFormat(sal_False),
500*cdf0e10cSrcweir 	bFrm(sal_False),
501*cdf0e10cSrcweir 	bHtmlMode(sal_False),
502*cdf0e10cSrcweir 	bLockUpdate(sal_False)
503*cdf0e10cSrcweir {
504*cdf0e10cSrcweir     sal_uInt16 i;
505*cdf0e10cSrcweir 
506*cdf0e10cSrcweir 	FreeResource();
507*cdf0e10cSrcweir 	SetExchangeSupport();
508*cdf0e10cSrcweir 
509*cdf0e10cSrcweir 	aBtnDown.SetAccessibleRelationMemberOf(&aFLLayout);
510*cdf0e10cSrcweir 	aEd1.SetAccessibleRelationLabeledBy(&aWidthFT);
511*cdf0e10cSrcweir 	aEd2.SetAccessibleRelationLabeledBy(&aWidthFT);
512*cdf0e10cSrcweir 	aEd3.SetAccessibleRelationLabeledBy(&aWidthFT);
513*cdf0e10cSrcweir 	aDistEd1.SetAccessibleRelationLabeledBy(&aDistFT);
514*cdf0e10cSrcweir 	aDistEd2.SetAccessibleRelationLabeledBy(&aDistFT);
515*cdf0e10cSrcweir 	aBtnUp.SetAccessibleRelationLabeledBy(&aColumnFT);
516*cdf0e10cSrcweir 	aBtnDown.SetAccessibleRelationLabeledBy(&aColumnFT);
517*cdf0e10cSrcweir 
518*cdf0e10cSrcweir     aDefaultVS.SetHelpId(HID_COLUMN_VALUESET);
519*cdf0e10cSrcweir     aDefaultVS.SetColCount( 5 );
520*cdf0e10cSrcweir 	aDefaultVS.SetStyle(  aDefaultVS.GetStyle()
521*cdf0e10cSrcweir 							| WB_ITEMBORDER
522*cdf0e10cSrcweir 							| WB_DOUBLEBORDER );
523*cdf0e10cSrcweir 
524*cdf0e10cSrcweir     for( i = 0; i < 5; i++)
525*cdf0e10cSrcweir 		aDefaultVS.InsertItem( i + 1, i );
526*cdf0e10cSrcweir 
527*cdf0e10cSrcweir 	aDefaultVS.SetSelectHdl(LINK(this, SwColumnPage, SetDefaultsHdl));
528*cdf0e10cSrcweir 
529*cdf0e10cSrcweir 	// Controls fuer Zusaetzebereich beim MoreButton anmelden
530*cdf0e10cSrcweir     Link aCLNrLk = LINK(this, SwColumnPage, ColModify);
531*cdf0e10cSrcweir     aCLNrEdt.SetLoseFocusHdl(aCLNrLk);
532*cdf0e10cSrcweir     aCLNrEdt.SetUpHdl(aCLNrLk);
533*cdf0e10cSrcweir     aCLNrEdt.SetDownHdl(aCLNrLk);
534*cdf0e10cSrcweir     Link aLk = LINK(this, SwColumnPage, GapModify);
535*cdf0e10cSrcweir 	aDistEd1.SetUpHdl(aLk);
536*cdf0e10cSrcweir 	aDistEd1.SetDownHdl(aLk);
537*cdf0e10cSrcweir 	aDistEd1.SetLoseFocusHdl(aLk);
538*cdf0e10cSrcweir 	aDistEd2.SetUpHdl(aLk);
539*cdf0e10cSrcweir 	aDistEd2.SetDownHdl(aLk);
540*cdf0e10cSrcweir 	aDistEd2.SetLoseFocusHdl(aLk);
541*cdf0e10cSrcweir 
542*cdf0e10cSrcweir 	aLk = LINK(this, SwColumnPage, EdModify);
543*cdf0e10cSrcweir 
544*cdf0e10cSrcweir 	aEd1.SetUpHdl(aLk);
545*cdf0e10cSrcweir 	aEd1.SetDownHdl(aLk);
546*cdf0e10cSrcweir 	aEd1.SetLoseFocusHdl(aLk);
547*cdf0e10cSrcweir 
548*cdf0e10cSrcweir 	aEd2.SetUpHdl(aLk);
549*cdf0e10cSrcweir 	aEd2.SetDownHdl(aLk);
550*cdf0e10cSrcweir 	aEd2.SetLoseFocusHdl(aLk);
551*cdf0e10cSrcweir 
552*cdf0e10cSrcweir 	aEd3.SetUpHdl(aLk);
553*cdf0e10cSrcweir 	aEd3.SetDownHdl(aLk);
554*cdf0e10cSrcweir 	aEd3.SetLoseFocusHdl(aLk);
555*cdf0e10cSrcweir 
556*cdf0e10cSrcweir 	aBtnUp.SetClickHdl(LINK(this, SwColumnPage, Up));
557*cdf0e10cSrcweir 	aBtnDown.SetClickHdl(LINK(this, SwColumnPage, Down));
558*cdf0e10cSrcweir 	aAutoWidthBox.SetClickHdl(LINK(this, SwColumnPage, AutoWidthHdl));
559*cdf0e10cSrcweir 
560*cdf0e10cSrcweir 	aLk = LINK( this, SwColumnPage, UpdateColMgr );
561*cdf0e10cSrcweir 	aLineTypeDLB.SetSelectHdl( aLk );
562*cdf0e10cSrcweir 	aLineHeightEdit.SetModifyHdl( aLk );
563*cdf0e10cSrcweir 	aLinePosDLB.SetSelectHdl( aLk );
564*cdf0e10cSrcweir 
565*cdf0e10cSrcweir 		// Trennlinie
566*cdf0e10cSrcweir 	aLineTypeDLB.SetUnit( FUNIT_POINT );
567*cdf0e10cSrcweir 	aLineTypeDLB.SetSourceUnit( FUNIT_TWIP );
568*cdf0e10cSrcweir 	for( i = 0; i < nLineCount; ++i )
569*cdf0e10cSrcweir 		aLineTypeDLB.InsertEntry( 100 * nLines[ i ] );
570*cdf0e10cSrcweir }
571*cdf0e10cSrcweir 
572*cdf0e10cSrcweir 
573*cdf0e10cSrcweir 
574*cdf0e10cSrcweir SwColumnPage::~SwColumnPage()
575*cdf0e10cSrcweir {
576*cdf0e10cSrcweir 	delete pColMgr;
577*cdf0e10cSrcweir }
578*cdf0e10cSrcweir 
579*cdf0e10cSrcweir /*--------------------------------------------------------------------
580*cdf0e10cSrcweir 	Beschreibung:
581*cdf0e10cSrcweir  --------------------------------------------------------------------*/
582*cdf0e10cSrcweir 
583*cdf0e10cSrcweir 
584*cdf0e10cSrcweir void SwColumnPage::SetPageWidth(long nPageWidth)
585*cdf0e10cSrcweir {
586*cdf0e10cSrcweir     long nNewMaxWidth = static_cast< long >(aEd1.NormalizePercent(nPageWidth));
587*cdf0e10cSrcweir 
588*cdf0e10cSrcweir 	aDistEd1.SetMax(nNewMaxWidth, FUNIT_TWIP);
589*cdf0e10cSrcweir 	aDistEd2.SetMax(nNewMaxWidth, FUNIT_TWIP);
590*cdf0e10cSrcweir 	aEd1.SetMax(nNewMaxWidth, FUNIT_TWIP);
591*cdf0e10cSrcweir 	aEd2.SetMax(nNewMaxWidth, FUNIT_TWIP);
592*cdf0e10cSrcweir 	aEd3.SetMax(nNewMaxWidth, FUNIT_TWIP);
593*cdf0e10cSrcweir }
594*cdf0e10cSrcweir 
595*cdf0e10cSrcweir /*--------------------------------------------------------------------
596*cdf0e10cSrcweir 	Beschreibung:
597*cdf0e10cSrcweir  --------------------------------------------------------------------*/
598*cdf0e10cSrcweir 
599*cdf0e10cSrcweir 
600*cdf0e10cSrcweir 
601*cdf0e10cSrcweir void SwColumnPage::Reset(const SfxItemSet &rSet)
602*cdf0e10cSrcweir {
603*cdf0e10cSrcweir 	sal_uInt16 nHtmlMode = ::GetHtmlMode((const SwDocShell*)SfxObjectShell::Current());
604*cdf0e10cSrcweir 	if(nHtmlMode & HTMLMODE_ON)
605*cdf0e10cSrcweir 	{
606*cdf0e10cSrcweir 		bHtmlMode = sal_True;
607*cdf0e10cSrcweir 		aAutoWidthBox.Enable(sal_False);
608*cdf0e10cSrcweir 	}
609*cdf0e10cSrcweir 	FieldUnit aMetric = ::GetDfltMetric(bHtmlMode);
610*cdf0e10cSrcweir 	SetMetric(aEd1, aMetric);
611*cdf0e10cSrcweir 	SetMetric(aEd2, aMetric);
612*cdf0e10cSrcweir 	SetMetric(aEd3, aMetric);
613*cdf0e10cSrcweir 	SetMetric(aDistEd1, aMetric);
614*cdf0e10cSrcweir 	SetMetric(aDistEd2, aMetric);
615*cdf0e10cSrcweir 
616*cdf0e10cSrcweir 	delete pColMgr;
617*cdf0e10cSrcweir 	pColMgr = new SwColMgr(rSet);
618*cdf0e10cSrcweir 	nCols 	= pColMgr->GetCount() ;
619*cdf0e10cSrcweir 	aCLNrEdt.SetMax(Max((sal_uInt16)aCLNrEdt.GetMax(), (sal_uInt16)nCols));
620*cdf0e10cSrcweir 	aCLNrEdt.SetLast(Max(nCols,(sal_uInt16)aCLNrEdt.GetMax()));
621*cdf0e10cSrcweir 
622*cdf0e10cSrcweir 	if(bFrm)
623*cdf0e10cSrcweir 	{
624*cdf0e10cSrcweir 		if(bFormat)                     // hier gibt es keine Size
625*cdf0e10cSrcweir 			pColMgr->SetActualWidth(FRAME_FORMAT_WIDTH);
626*cdf0e10cSrcweir 		else
627*cdf0e10cSrcweir 		{
628*cdf0e10cSrcweir 			const SwFmtFrmSize& rSize = (const SwFmtFrmSize&)rSet.Get(RES_FRM_SIZE);
629*cdf0e10cSrcweir 			const SvxBoxItem& rBox = (const SvxBoxItem&) rSet.Get(RES_BOX);
630*cdf0e10cSrcweir 			pColMgr->SetActualWidth((sal_uInt16)rSize.GetSize().Width() - rBox.GetDistance());
631*cdf0e10cSrcweir 		}
632*cdf0e10cSrcweir 	}
633*cdf0e10cSrcweir     if(aBalanceColsCB.IsVisible())
634*cdf0e10cSrcweir 	{
635*cdf0e10cSrcweir         const SfxPoolItem* pItem;
636*cdf0e10cSrcweir         if( SFX_ITEM_SET == rSet.GetItemState( RES_COLUMNBALANCE, sal_False, &pItem ))
637*cdf0e10cSrcweir 			aBalanceColsCB.Check(!((const SwFmtNoBalancedColumns*)pItem)->GetValue());
638*cdf0e10cSrcweir 		else
639*cdf0e10cSrcweir 			aBalanceColsCB.Check( sal_True );
640*cdf0e10cSrcweir 	}
641*cdf0e10cSrcweir 
642*cdf0e10cSrcweir     //text direction
643*cdf0e10cSrcweir     if( SFX_ITEM_AVAILABLE <= rSet.GetItemState( RES_FRAMEDIR ) )
644*cdf0e10cSrcweir 	{
645*cdf0e10cSrcweir         const SvxFrameDirectionItem& rItem = (const SvxFrameDirectionItem&)rSet.Get(RES_FRAMEDIR);
646*cdf0e10cSrcweir         sal_uInt32 nVal  = rItem.GetValue();
647*cdf0e10cSrcweir         sal_uInt16 nPos = aTextDirectionLB.GetEntryPos( (void*) nVal );
648*cdf0e10cSrcweir         aTextDirectionLB.SelectEntryPos( nPos );
649*cdf0e10cSrcweir         aTextDirectionLB.SaveValue();
650*cdf0e10cSrcweir 	}
651*cdf0e10cSrcweir 
652*cdf0e10cSrcweir     Init();
653*cdf0e10cSrcweir 	ActivatePage( rSet );
654*cdf0e10cSrcweir }
655*cdf0e10cSrcweir 
656*cdf0e10cSrcweir /*--------------------------------------------------------------------
657*cdf0e10cSrcweir 	Beschreibung:	TabPage erzeugen
658*cdf0e10cSrcweir  --------------------------------------------------------------------*/
659*cdf0e10cSrcweir 
660*cdf0e10cSrcweir 
661*cdf0e10cSrcweir 
662*cdf0e10cSrcweir SfxTabPage* SwColumnPage::Create(Window *pParent, const SfxItemSet &rSet)
663*cdf0e10cSrcweir {
664*cdf0e10cSrcweir 	return new SwColumnPage(pParent, rSet);
665*cdf0e10cSrcweir }
666*cdf0e10cSrcweir 
667*cdf0e10cSrcweir /*--------------------------------------------------------------------
668*cdf0e10cSrcweir 	Beschreibung:	Attribute in den Set stopfen bei OK
669*cdf0e10cSrcweir  --------------------------------------------------------------------*/
670*cdf0e10cSrcweir 
671*cdf0e10cSrcweir 
672*cdf0e10cSrcweir 
673*cdf0e10cSrcweir sal_Bool SwColumnPage::FillItemSet(SfxItemSet &rSet)
674*cdf0e10cSrcweir {
675*cdf0e10cSrcweir     if(aCLNrEdt.HasChildPathFocus())
676*cdf0e10cSrcweir         aCLNrEdt.GetDownHdl().Call(&aCLNrEdt);
677*cdf0e10cSrcweir     // Im ItemSet setzen
678*cdf0e10cSrcweir 	// Die aktuellen Einstellungen sind
679*cdf0e10cSrcweir 	// schon vorhanden
680*cdf0e10cSrcweir 	//
681*cdf0e10cSrcweir 	const SfxPoolItem* pOldItem;
682*cdf0e10cSrcweir 	const SwFmtCol& rCol = pColMgr->GetColumns();
683*cdf0e10cSrcweir 	if(0 == (pOldItem = GetOldItem( rSet, RES_COL )) ||
684*cdf0e10cSrcweir 				rCol != *pOldItem )
685*cdf0e10cSrcweir 		rSet.Put(rCol);
686*cdf0e10cSrcweir 
687*cdf0e10cSrcweir 	if(aBalanceColsCB.IsVisible() )
688*cdf0e10cSrcweir 	{
689*cdf0e10cSrcweir 		rSet.Put(SwFmtNoBalancedColumns(!aBalanceColsCB.IsChecked() ));
690*cdf0e10cSrcweir 	}
691*cdf0e10cSrcweir     sal_uInt16 nPos;
692*cdf0e10cSrcweir     if( aTextDirectionLB.IsVisible() &&
693*cdf0e10cSrcweir         ( nPos = aTextDirectionLB.GetSelectEntryPos() ) !=
694*cdf0e10cSrcweir                                             aTextDirectionLB.GetSavedValue() )
695*cdf0e10cSrcweir 	{
696*cdf0e10cSrcweir         sal_uInt32 nDirection = (sal_uInt32)(sal_IntPtr)aTextDirectionLB.GetEntryData( nPos );
697*cdf0e10cSrcweir         rSet.Put( SvxFrameDirectionItem( (SvxFrameDirection)nDirection, RES_FRAMEDIR));
698*cdf0e10cSrcweir 	}
699*cdf0e10cSrcweir     return sal_True;
700*cdf0e10cSrcweir }
701*cdf0e10cSrcweir 
702*cdf0e10cSrcweir /*--------------------------------------------------------------------
703*cdf0e10cSrcweir 	Beschreibung:	ColumnManager updaten
704*cdf0e10cSrcweir  --------------------------------------------------------------------*/
705*cdf0e10cSrcweir 
706*cdf0e10cSrcweir 
707*cdf0e10cSrcweir 
708*cdf0e10cSrcweir IMPL_LINK( SwColumnPage, UpdateColMgr, void *, /*pField*/ )
709*cdf0e10cSrcweir {
710*cdf0e10cSrcweir 	long nGutterWidth = pColMgr->GetGutterWidth();
711*cdf0e10cSrcweir 	if(nCols > 1)
712*cdf0e10cSrcweir 	{
713*cdf0e10cSrcweir 			// Ermitteln, ob die schmalste Spalte zu schmal ist
714*cdf0e10cSrcweir 			// fuer den eingestellten Spaltenabstand
715*cdf0e10cSrcweir 		long nMin = nColWidth[0];
716*cdf0e10cSrcweir 		sal_uInt16 i;
717*cdf0e10cSrcweir 
718*cdf0e10cSrcweir 		for( i = 1; i < nCols; ++i)
719*cdf0e10cSrcweir 			nMin = Min(nMin, nColWidth[i]);
720*cdf0e10cSrcweir 
721*cdf0e10cSrcweir 		sal_Bool bAutoWidth = aAutoWidthBox.IsChecked();
722*cdf0e10cSrcweir 		if(!bAutoWidth)
723*cdf0e10cSrcweir 		{
724*cdf0e10cSrcweir 			pColMgr->SetAutoWidth(sal_False);
725*cdf0e10cSrcweir 				// falls der Benutzer nicht die Gesamtbreite vergeben hat,
726*cdf0e10cSrcweir 				// den fehlenden Betrag auf die letzte Spalte addieren.
727*cdf0e10cSrcweir 			long nSum = 0;
728*cdf0e10cSrcweir 			for(i = 0; i < nCols; ++i)
729*cdf0e10cSrcweir 				nSum += nColWidth[i];
730*cdf0e10cSrcweir 			nGutterWidth = 0;
731*cdf0e10cSrcweir 			for(i = 0; i < nCols - 1; ++i)
732*cdf0e10cSrcweir 				nGutterWidth += nColDist[i];
733*cdf0e10cSrcweir 			nSum += nGutterWidth;
734*cdf0e10cSrcweir 
735*cdf0e10cSrcweir 			long nMaxW = pColMgr->GetActualSize();
736*cdf0e10cSrcweir 
737*cdf0e10cSrcweir 			if( nSum < nMaxW  )
738*cdf0e10cSrcweir 				nColWidth[nCols - 1] += nMaxW - nSum;
739*cdf0e10cSrcweir 
740*cdf0e10cSrcweir             pColMgr->SetColWidth( 0, static_cast< sal_uInt16 >(nColWidth[0] + (sal_uInt16)nColDist[0]/2) );
741*cdf0e10cSrcweir 			for( i = 1; i < nCols-1; ++i )
742*cdf0e10cSrcweir 			{
743*cdf0e10cSrcweir 				long nActDist = (nColDist[i] + nColDist[i - 1]) / 2;
744*cdf0e10cSrcweir 				pColMgr->SetColWidth( i, (sal_uInt16)nColWidth[i] + (sal_uInt16)nActDist );
745*cdf0e10cSrcweir 			}
746*cdf0e10cSrcweir             pColMgr->SetColWidth( nCols-1, static_cast< sal_uInt16 >(nColWidth[nCols-1] + nColDist[nCols -2]/2) );
747*cdf0e10cSrcweir 
748*cdf0e10cSrcweir 		}
749*cdf0e10cSrcweir 
750*cdf0e10cSrcweir 			// keins ist ausgeschaltet
751*cdf0e10cSrcweir         const sal_uInt16 nPos = aLineTypeDLB.GetSelectEntryPos();
752*cdf0e10cSrcweir         sal_Bool bEnable = 0 != nPos;
753*cdf0e10cSrcweir 		aLineHeightEdit.Enable( bEnable );
754*cdf0e10cSrcweir 		aLineHeightLbl.Enable( bEnable );
755*cdf0e10cSrcweir 		if( !bEnable )
756*cdf0e10cSrcweir 			pColMgr->SetNoLine();
757*cdf0e10cSrcweir 		else if( LISTBOX_ENTRY_NOTFOUND != nPos )
758*cdf0e10cSrcweir 		{
759*cdf0e10cSrcweir 			pColMgr->SetLineWidthAndColor(nLines[nPos - 1], Color(COL_BLACK) );
760*cdf0e10cSrcweir 			pColMgr->SetAdjust( SwColLineAdj(
761*cdf0e10cSrcweir 									aLinePosDLB.GetSelectEntryPos() + 1) );
762*cdf0e10cSrcweir 			pColMgr->SetLineHeightPercent((short)aLineHeightEdit.GetValue());
763*cdf0e10cSrcweir 			bEnable = pColMgr->GetLineHeightPercent() != 100;
764*cdf0e10cSrcweir 		}
765*cdf0e10cSrcweir 		aLinePosLbl.Enable( bEnable );
766*cdf0e10cSrcweir 		aLinePosDLB.Enable( bEnable );
767*cdf0e10cSrcweir 	}
768*cdf0e10cSrcweir 	else
769*cdf0e10cSrcweir 	{
770*cdf0e10cSrcweir 		pColMgr->NoCols();
771*cdf0e10cSrcweir         nCols = 0;
772*cdf0e10cSrcweir 	}
773*cdf0e10cSrcweir 
774*cdf0e10cSrcweir 	//Maximalwerte setzen
775*cdf0e10cSrcweir 	aCLNrEdt.SetMax(Max(1L,
776*cdf0e10cSrcweir 		Min(long(nMaxCols), long( pColMgr->GetActualSize() / (nGutterWidth + MINLAY)) )));
777*cdf0e10cSrcweir 	aCLNrEdt.SetLast(aCLNrEdt.GetMax());
778*cdf0e10cSrcweir 	aCLNrEdt.Reformat();
779*cdf0e10cSrcweir 
780*cdf0e10cSrcweir 	//Beispielfenster anregen
781*cdf0e10cSrcweir 	if(!bLockUpdate)
782*cdf0e10cSrcweir 	{
783*cdf0e10cSrcweir 		if(bFrm)
784*cdf0e10cSrcweir 		{
785*cdf0e10cSrcweir 			aFrmExampleWN.SetColumns( pColMgr->GetColumns() );
786*cdf0e10cSrcweir 			aFrmExampleWN.Invalidate();
787*cdf0e10cSrcweir 		}
788*cdf0e10cSrcweir 		else
789*cdf0e10cSrcweir 			aPgeExampleWN.Invalidate();
790*cdf0e10cSrcweir 	}
791*cdf0e10cSrcweir 
792*cdf0e10cSrcweir 	return 0;
793*cdf0e10cSrcweir }
794*cdf0e10cSrcweir 
795*cdf0e10cSrcweir /*------------------------------------------------------------------------
796*cdf0e10cSrcweir  Beschreibung:	Initialisierung
797*cdf0e10cSrcweir ------------------------------------------------------------------------*/
798*cdf0e10cSrcweir 
799*cdf0e10cSrcweir 
800*cdf0e10cSrcweir 
801*cdf0e10cSrcweir void SwColumnPage::Init()
802*cdf0e10cSrcweir {
803*cdf0e10cSrcweir 	aCLNrEdt.SetValue(nCols);
804*cdf0e10cSrcweir 
805*cdf0e10cSrcweir     sal_Bool bAutoWidth = pColMgr->IsAutoWidth() || bHtmlMode;
806*cdf0e10cSrcweir     aAutoWidthBox.Check( bAutoWidth );
807*cdf0e10cSrcweir 
808*cdf0e10cSrcweir     sal_Int32 nColumnWidthSum = 0;
809*cdf0e10cSrcweir     // Setzen der Breiten
810*cdf0e10cSrcweir     sal_uInt16 i;
811*cdf0e10cSrcweir     for(i = 0; i < nCols; ++i)
812*cdf0e10cSrcweir 	{
813*cdf0e10cSrcweir 		nColWidth[i] = pColMgr->GetColWidth(i);
814*cdf0e10cSrcweir         nColumnWidthSum += nColWidth[i];
815*cdf0e10cSrcweir 		if(i < nCols - 1)
816*cdf0e10cSrcweir 			nColDist[i] = pColMgr->GetGutterWidth(i);
817*cdf0e10cSrcweir 	}
818*cdf0e10cSrcweir 
819*cdf0e10cSrcweir 	if( 1 < nCols )
820*cdf0e10cSrcweir 	{
821*cdf0e10cSrcweir         // #97495# make sure that the automatic column widht's are always equal
822*cdf0e10cSrcweir         if(bAutoWidth)
823*cdf0e10cSrcweir         {
824*cdf0e10cSrcweir             nColumnWidthSum /= nCols;
825*cdf0e10cSrcweir             for(i = 0; i < nCols; ++i)
826*cdf0e10cSrcweir                 nColWidth[i] = nColumnWidthSum;
827*cdf0e10cSrcweir         }
828*cdf0e10cSrcweir         SwColLineAdj eAdj = pColMgr->GetAdjust();
829*cdf0e10cSrcweir 		if( COLADJ_NONE == eAdj )		// der Dialog kennt kein NONE!
830*cdf0e10cSrcweir 		{
831*cdf0e10cSrcweir 			eAdj = COLADJ_TOP;
832*cdf0e10cSrcweir 			//ohne Adjust auch kein Linientyp
833*cdf0e10cSrcweir 			aLineTypeDLB.SelectEntryPos( 0 );
834*cdf0e10cSrcweir 			aLineHeightEdit.SetValue( 100 );
835*cdf0e10cSrcweir 		}
836*cdf0e10cSrcweir 		else
837*cdf0e10cSrcweir 		{
838*cdf0e10cSrcweir 			aLineTypeDLB.SelectEntryPos( lcl_LineWidthToPos(( pColMgr->GetLineWidth() )) + 1);
839*cdf0e10cSrcweir 			aLineHeightEdit.SetValue( pColMgr->GetLineHeightPercent() );
840*cdf0e10cSrcweir 		}
841*cdf0e10cSrcweir         aLinePosDLB.SelectEntryPos( static_cast< sal_uInt16 >(eAdj - 1) );
842*cdf0e10cSrcweir 	}
843*cdf0e10cSrcweir 	else
844*cdf0e10cSrcweir 	{
845*cdf0e10cSrcweir 		aLinePosDLB.SelectEntryPos( 0 );
846*cdf0e10cSrcweir 		aLineTypeDLB.SelectEntryPos( 0 );
847*cdf0e10cSrcweir 		aLineHeightEdit.SetValue( 100 );
848*cdf0e10cSrcweir 	}
849*cdf0e10cSrcweir 
850*cdf0e10cSrcweir 	UpdateCols();
851*cdf0e10cSrcweir 	Update();
852*cdf0e10cSrcweir 
853*cdf0e10cSrcweir 		// Maximale Spaltenzahl setzen
854*cdf0e10cSrcweir 		// Werte kleiner als 1 sind nicht erlaubt
855*cdf0e10cSrcweir 	aCLNrEdt.SetMax(Max(1L,
856*cdf0e10cSrcweir 		Min(long(nMaxCols), long( pColMgr->GetActualSize() / nMinWidth) )));
857*cdf0e10cSrcweir }
858*cdf0e10cSrcweir 
859*cdf0e10cSrcweir /*------------------------------------------------------------------------
860*cdf0e10cSrcweir  Beschreibung:	Die Anzahl der Spalten hat sich veraendert -- hier werden
861*cdf0e10cSrcweir 				die Controls fuer die Bearbeitung der Spalten entsprechend
862*cdf0e10cSrcweir 				der Spaltenzahl en- oder disabled.
863*cdf0e10cSrcweir 				Falls es mehr als nVisCols (= 3) Spalten gibt, werden
864*cdf0e10cSrcweir 				alle Edit enabled und die Buttons fuer das Scrollen
865*cdf0e10cSrcweir 				ebenfalls.
866*cdf0e10cSrcweir 				Andernfalls werden die Edits jeweils fuer die entsprechenden
867*cdf0e10cSrcweir 				Spaltenzahl enabled; eine Spalte kann nicht bearbeitet werden.
868*cdf0e10cSrcweir ------------------------------------------------------------------------*/
869*cdf0e10cSrcweir 
870*cdf0e10cSrcweir 
871*cdf0e10cSrcweir 
872*cdf0e10cSrcweir void SwColumnPage::UpdateCols()
873*cdf0e10cSrcweir {
874*cdf0e10cSrcweir 	sal_Bool bEnableBtns= sal_False;
875*cdf0e10cSrcweir 	sal_Bool bEnable12	= sal_False;
876*cdf0e10cSrcweir 	sal_Bool bEnable3	= sal_False;
877*cdf0e10cSrcweir 	const sal_Bool bEdit = !aAutoWidthBox.IsChecked();
878*cdf0e10cSrcweir 	if ( nCols > nVisCols )
879*cdf0e10cSrcweir 	{
880*cdf0e10cSrcweir 		bEnableBtns = sal_True && !bHtmlMode;
881*cdf0e10cSrcweir 		bEnable12 = bEnable3 = bEdit;
882*cdf0e10cSrcweir 	}
883*cdf0e10cSrcweir 	else if( bEdit )
884*cdf0e10cSrcweir 	{
885*cdf0e10cSrcweir 		// hier gibt es absichtlich kaum noch breaks
886*cdf0e10cSrcweir 		switch(nCols)
887*cdf0e10cSrcweir 		{
888*cdf0e10cSrcweir 			case 3: bEnable3 = sal_True;
889*cdf0e10cSrcweir 			case 2: bEnable12= sal_True; break;
890*cdf0e10cSrcweir 			default: /* do nothing */;
891*cdf0e10cSrcweir 		}
892*cdf0e10cSrcweir 	}
893*cdf0e10cSrcweir 	aEd1.Enable( bEnable12 );
894*cdf0e10cSrcweir 	aDistEd1.Enable(nCols > 1);
895*cdf0e10cSrcweir 	aEd2.Enable( bEnable12 );
896*cdf0e10cSrcweir 	aDistEd2.Enable(bEnable3);
897*cdf0e10cSrcweir 	aEd3.Enable( bEnable3  );
898*cdf0e10cSrcweir     aLbl1.Enable(bEnable12 );
899*cdf0e10cSrcweir     aLbl2.Enable(bEnable12 );
900*cdf0e10cSrcweir     aLbl3.Enable(bEnable3  );
901*cdf0e10cSrcweir 	aBtnUp.Enable( bEnableBtns );
902*cdf0e10cSrcweir 	aBtnDown.Enable( bEnableBtns );
903*cdf0e10cSrcweir 
904*cdf0e10cSrcweir 	const sal_Bool bEnable = nCols > 1;
905*cdf0e10cSrcweir 	if( !bEnable )
906*cdf0e10cSrcweir 	{
907*cdf0e10cSrcweir 		aLinePosDLB.Enable( sal_False );
908*cdf0e10cSrcweir 		aLinePosLbl.Enable( sal_False );
909*cdf0e10cSrcweir 	}
910*cdf0e10cSrcweir 	aLineHeightEdit.Enable( bEnable );
911*cdf0e10cSrcweir 	aLineHeightLbl.Enable( bEnable );
912*cdf0e10cSrcweir 	aLineTypeDLB.Enable( bEnable );
913*cdf0e10cSrcweir 	aLineTypeLbl.Enable( bEnable );
914*cdf0e10cSrcweir 	aAutoWidthBox.Enable( bEnable && !bHtmlMode );
915*cdf0e10cSrcweir }
916*cdf0e10cSrcweir 
917*cdf0e10cSrcweir void SwColumnPage::SetLabels( sal_uInt16 nVis )
918*cdf0e10cSrcweir {
919*cdf0e10cSrcweir 	String sLbl( '~' );
920*cdf0e10cSrcweir 
921*cdf0e10cSrcweir 	String sLbl2( String::CreateFromInt32( nVis + 1 ));
922*cdf0e10cSrcweir 	String tmp1(sLbl2);
923*cdf0e10cSrcweir 	sLbl2.Insert(sLbl, sLbl2.Len() - 1);
924*cdf0e10cSrcweir     aLbl1.SetText(sLbl2);
925*cdf0e10cSrcweir 
926*cdf0e10cSrcweir 	sLbl2 = String::CreateFromInt32( nVis + 2 );
927*cdf0e10cSrcweir 	String tmp2(sLbl2);
928*cdf0e10cSrcweir 	sLbl2.Insert(sLbl, sLbl2.Len() - 1);
929*cdf0e10cSrcweir     aLbl2.SetText(sLbl2);
930*cdf0e10cSrcweir 
931*cdf0e10cSrcweir 	sLbl2 = String::CreateFromInt32( nVis + 3 );
932*cdf0e10cSrcweir 	String tmp3(sLbl2);
933*cdf0e10cSrcweir 	sLbl2.Insert(sLbl, sLbl2.Len() - 1);
934*cdf0e10cSrcweir     aLbl3.SetText(sLbl2);
935*cdf0e10cSrcweir 	String sColumnWidth = SW_RESSTR( STR_ACCESS_COLUMN_WIDTH ) ;
936*cdf0e10cSrcweir 	sColumnWidth.SearchAndReplaceAscii("%1", tmp1);
937*cdf0e10cSrcweir 	aEd1.SetAccessibleName(sColumnWidth);
938*cdf0e10cSrcweir 
939*cdf0e10cSrcweir 	sColumnWidth = SW_RESSTR( STR_ACCESS_COLUMN_WIDTH ) ;
940*cdf0e10cSrcweir 	sColumnWidth.SearchAndReplaceAscii("%1", tmp2);
941*cdf0e10cSrcweir 	aEd2.SetAccessibleName(sColumnWidth);
942*cdf0e10cSrcweir 
943*cdf0e10cSrcweir 	sColumnWidth = SW_RESSTR( STR_ACCESS_COLUMN_WIDTH ) ;
944*cdf0e10cSrcweir 	sColumnWidth.SearchAndReplaceAscii("%1", tmp3);
945*cdf0e10cSrcweir 	aEd3.SetAccessibleName(sColumnWidth);
946*cdf0e10cSrcweir 
947*cdf0e10cSrcweir 	String sDist = SW_RESSTR( STR_ACCESS_PAGESETUP_SPACING ) ;
948*cdf0e10cSrcweir 	String sDist1 = sDist;
949*cdf0e10cSrcweir 	sDist1.SearchAndReplaceAscii("%1", tmp1);
950*cdf0e10cSrcweir 	sDist1.SearchAndReplaceAscii("%2", tmp2);
951*cdf0e10cSrcweir 	aDistEd1.SetAccessibleName(sDist1);
952*cdf0e10cSrcweir 
953*cdf0e10cSrcweir 	String sDist2 = sDist;
954*cdf0e10cSrcweir 	sDist2.SearchAndReplaceAscii("%1", tmp2);
955*cdf0e10cSrcweir 	sDist2.SearchAndReplaceAscii("%2", tmp3);
956*cdf0e10cSrcweir 	aDistEd2.SetAccessibleName(sDist2);
957*cdf0e10cSrcweir }
958*cdf0e10cSrcweir 
959*cdf0e10cSrcweir /*------------------------------------------------------------------------
960*cdf0e10cSrcweir  Beschreibung:	Handler, der bei einer Veraenderung der Spaltenzahl
961*cdf0e10cSrcweir 				gerufen wird.
962*cdf0e10cSrcweir 				Eine Aenderung der Spaltenzahl ueberschreibt eventuelle
963*cdf0e10cSrcweir 				Breiteneinstellungen des Benutzers; alle Spalten sind
964*cdf0e10cSrcweir 				gleich breit.
965*cdf0e10cSrcweir ------------------------------------------------------------------------*/
966*cdf0e10cSrcweir 
967*cdf0e10cSrcweir IMPL_LINK( SwColumnPage, ColModify, NumericField *, pNF )
968*cdf0e10cSrcweir {
969*cdf0e10cSrcweir     nCols = (sal_uInt16)aCLNrEdt.GetValue();
970*cdf0e10cSrcweir     //#107890# the handler is also called from LoseFocus()
971*cdf0e10cSrcweir     //then no change has been made and thus no action should be taken
972*cdf0e10cSrcweir 	// #i17816# changing the displayed types within the ValueSet
973*cdf0e10cSrcweir 	//from two columns to two columns with different settings doesn't invalidate the
974*cdf0e10cSrcweir 	// example windows in ::ColModify()
975*cdf0e10cSrcweir     if(!pNF ||(pColMgr->GetCount() != nCols))
976*cdf0e10cSrcweir     {
977*cdf0e10cSrcweir         if(pNF)
978*cdf0e10cSrcweir             aDefaultVS.SetNoSelection();
979*cdf0e10cSrcweir         long nDist = static_cast< long >(aDistEd1.DenormalizePercent(aDistEd1.GetValue(FUNIT_TWIP)));
980*cdf0e10cSrcweir         pColMgr->SetCount(nCols, (sal_uInt16)nDist);
981*cdf0e10cSrcweir         for(sal_uInt16 i = 0; i < nCols; i++)
982*cdf0e10cSrcweir             nColDist[i] = nDist;
983*cdf0e10cSrcweir         nFirstVis = 0;
984*cdf0e10cSrcweir         SetLabels( nFirstVis );
985*cdf0e10cSrcweir         UpdateCols();
986*cdf0e10cSrcweir         ResetColWidth();
987*cdf0e10cSrcweir         Update();
988*cdf0e10cSrcweir     }
989*cdf0e10cSrcweir 
990*cdf0e10cSrcweir 	return 0;
991*cdf0e10cSrcweir }
992*cdf0e10cSrcweir 
993*cdf0e10cSrcweir /*------------------------------------------------------------------------
994*cdf0e10cSrcweir  Beschreibung:	Modify- Handler fuer eine Aenderung der Spaltenbreite
995*cdf0e10cSrcweir 				oder des Spaltenabstandes.
996*cdf0e10cSrcweir 				Diese Aenderungen wirken sich erst zeitversetzt aus.
997*cdf0e10cSrcweir 				Durch eine Aenderung der Spaltenbreite wird die automatische
998*cdf0e10cSrcweir 				Berechnung der Spaltenbreite ausser Kraft gesetzt; erst
999*cdf0e10cSrcweir 				eine Aenderung der Spaltenzahl kehrt wieder zu diesem
1000*cdf0e10cSrcweir 				Default zurueck.
1001*cdf0e10cSrcweir ------------------------------------------------------------------------*/
1002*cdf0e10cSrcweir 
1003*cdf0e10cSrcweir 
1004*cdf0e10cSrcweir 
1005*cdf0e10cSrcweir IMPL_LINK( SwColumnPage, GapModify, PercentField *, pFld )
1006*cdf0e10cSrcweir {
1007*cdf0e10cSrcweir     long nActValue = static_cast< long >(pFld->DenormalizePercent(pFld->GetValue(FUNIT_TWIP)));
1008*cdf0e10cSrcweir 	if(nCols < 2)
1009*cdf0e10cSrcweir 		return 0;
1010*cdf0e10cSrcweir 	if(aAutoWidthBox.IsChecked())
1011*cdf0e10cSrcweir 	{
1012*cdf0e10cSrcweir 		sal_uInt16 nMaxGap = pColMgr->GetActualSize() - nCols * MINLAY;
1013*cdf0e10cSrcweir 		DBG_ASSERT(nCols, "Abstand kann nicht ohne Spalten eingestellt werden");
1014*cdf0e10cSrcweir 		nMaxGap /= nCols - 1;
1015*cdf0e10cSrcweir 		if(nActValue > nMaxGap)
1016*cdf0e10cSrcweir 		{
1017*cdf0e10cSrcweir 			nActValue = nMaxGap;
1018*cdf0e10cSrcweir             aDistEd1.SetPrcntValue(aDistEd1.NormalizePercent(nMaxGap), FUNIT_TWIP);
1019*cdf0e10cSrcweir 		}
1020*cdf0e10cSrcweir 		pColMgr->SetGutterWidth((sal_uInt16)nActValue);
1021*cdf0e10cSrcweir 		for(sal_uInt16 i = 0; i < nCols; i++)
1022*cdf0e10cSrcweir 			nColDist[i] = nActValue;
1023*cdf0e10cSrcweir 
1024*cdf0e10cSrcweir 		ResetColWidth();
1025*cdf0e10cSrcweir 		UpdateCols();
1026*cdf0e10cSrcweir 	}
1027*cdf0e10cSrcweir 	else
1028*cdf0e10cSrcweir 
1029*cdf0e10cSrcweir 	{
1030*cdf0e10cSrcweir 		sal_uInt16 nOffset = 0;
1031*cdf0e10cSrcweir 		if(pFld == &aDistEd2)
1032*cdf0e10cSrcweir 		{
1033*cdf0e10cSrcweir 			nOffset = 1;
1034*cdf0e10cSrcweir 		}
1035*cdf0e10cSrcweir 		long nDiff = nActValue - nColDist[nFirstVis + nOffset];
1036*cdf0e10cSrcweir 		if(nDiff)
1037*cdf0e10cSrcweir 		{
1038*cdf0e10cSrcweir 			long nLeft = nColWidth[nFirstVis + nOffset];
1039*cdf0e10cSrcweir 			long nRight = nColWidth[nFirstVis + nOffset + 1];
1040*cdf0e10cSrcweir 			if(nLeft + nRight + 2 * MINLAY < nDiff)
1041*cdf0e10cSrcweir 				nDiff = nLeft + nRight - 2 * MINLAY;
1042*cdf0e10cSrcweir 			if(nDiff < nRight - MINLAY)
1043*cdf0e10cSrcweir 			{
1044*cdf0e10cSrcweir 				nRight -= nDiff;
1045*cdf0e10cSrcweir 			}
1046*cdf0e10cSrcweir 			else
1047*cdf0e10cSrcweir 			{
1048*cdf0e10cSrcweir 				long nTemp = nDiff - nRight + MINLAY;
1049*cdf0e10cSrcweir 				nRight = MINLAY;
1050*cdf0e10cSrcweir 				if(nLeft > nTemp - MINLAY)
1051*cdf0e10cSrcweir 				{
1052*cdf0e10cSrcweir 					nLeft -= nTemp;
1053*cdf0e10cSrcweir 					nTemp = 0;
1054*cdf0e10cSrcweir 				}
1055*cdf0e10cSrcweir 				else
1056*cdf0e10cSrcweir 				{
1057*cdf0e10cSrcweir 					nTemp -= nLeft + MINLAY;
1058*cdf0e10cSrcweir 					nLeft = MINLAY;
1059*cdf0e10cSrcweir 				}
1060*cdf0e10cSrcweir 				nDiff = nTemp;
1061*cdf0e10cSrcweir 			}
1062*cdf0e10cSrcweir 			nColWidth[nFirstVis + nOffset] = nLeft;
1063*cdf0e10cSrcweir 			nColWidth[nFirstVis + nOffset + 1] = nRight;
1064*cdf0e10cSrcweir 			nColDist[nFirstVis + nOffset] += nDiff;
1065*cdf0e10cSrcweir 
1066*cdf0e10cSrcweir 			pColMgr->SetColWidth( nFirstVis + nOffset, sal_uInt16(nLeft) );
1067*cdf0e10cSrcweir 			pColMgr->SetColWidth( nFirstVis + nOffset + 1, sal_uInt16(nRight) );
1068*cdf0e10cSrcweir 			pColMgr->SetGutterWidth( sal_uInt16(nColDist[nFirstVis + nOffset]), nFirstVis + nOffset );
1069*cdf0e10cSrcweir 		}
1070*cdf0e10cSrcweir 
1071*cdf0e10cSrcweir 	}
1072*cdf0e10cSrcweir 	Update();
1073*cdf0e10cSrcweir 	return 0;
1074*cdf0e10cSrcweir }
1075*cdf0e10cSrcweir 
1076*cdf0e10cSrcweir /*------------------------------------------------------------------------
1077*cdf0e10cSrcweir  Beschreibung:
1078*cdf0e10cSrcweir ------------------------------------------------------------------------*/
1079*cdf0e10cSrcweir 
1080*cdf0e10cSrcweir 
1081*cdf0e10cSrcweir 
1082*cdf0e10cSrcweir IMPL_LINK( SwColumnPage, EdModify, PercentField *, pField )
1083*cdf0e10cSrcweir {
1084*cdf0e10cSrcweir 	pModifiedField = pField;
1085*cdf0e10cSrcweir 	Timeout(0);
1086*cdf0e10cSrcweir 	return 0;
1087*cdf0e10cSrcweir }
1088*cdf0e10cSrcweir /*------------------------------------------------------------------------
1089*cdf0e10cSrcweir  Beschreibung:	Handler hinter der Checkbox fuer automatische Breite.
1090*cdf0e10cSrcweir 				Ist die Box gecheckt, koennen keine expliziten Werte
1091*cdf0e10cSrcweir 				fuer die Spaltenbreite eingegeben werden.
1092*cdf0e10cSrcweir ------------------------------------------------------------------------*/
1093*cdf0e10cSrcweir 
1094*cdf0e10cSrcweir 
1095*cdf0e10cSrcweir 
1096*cdf0e10cSrcweir IMPL_LINK( SwColumnPage, AutoWidthHdl, CheckBox *, pBox )
1097*cdf0e10cSrcweir {
1098*cdf0e10cSrcweir     long nDist = static_cast< long >(aDistEd1.DenormalizePercent(aDistEd1.GetValue(FUNIT_TWIP)));
1099*cdf0e10cSrcweir 	pColMgr->SetCount(nCols, (sal_uInt16)nDist);
1100*cdf0e10cSrcweir 	for(sal_uInt16 i = 0; i < nCols; i++)
1101*cdf0e10cSrcweir 		nColDist[i] = nDist;
1102*cdf0e10cSrcweir 	if(pBox->IsChecked())
1103*cdf0e10cSrcweir 	{
1104*cdf0e10cSrcweir 		pColMgr->SetGutterWidth(sal_uInt16(nDist));
1105*cdf0e10cSrcweir 		ResetColWidth();
1106*cdf0e10cSrcweir 	}
1107*cdf0e10cSrcweir 	pColMgr->SetAutoWidth(pBox->IsChecked(), sal_uInt16(nDist));
1108*cdf0e10cSrcweir 	UpdateCols();
1109*cdf0e10cSrcweir 	Update();
1110*cdf0e10cSrcweir 	return 0;
1111*cdf0e10cSrcweir }
1112*cdf0e10cSrcweir 
1113*cdf0e10cSrcweir /*------------------------------------------------------------------------
1114*cdf0e10cSrcweir  Beschreibung:	Raufscrollen der Inhalte der Edits.
1115*cdf0e10cSrcweir ------------------------------------------------------------------------*/
1116*cdf0e10cSrcweir 
1117*cdf0e10cSrcweir IMPL_LINK( SwColumnPage, Up, Button *, EMPTYARG )
1118*cdf0e10cSrcweir {
1119*cdf0e10cSrcweir 	if( nFirstVis )
1120*cdf0e10cSrcweir 	{
1121*cdf0e10cSrcweir 		--nFirstVis;
1122*cdf0e10cSrcweir 		SetLabels( nFirstVis );
1123*cdf0e10cSrcweir 		Update();
1124*cdf0e10cSrcweir 	}
1125*cdf0e10cSrcweir 	return 0;
1126*cdf0e10cSrcweir }
1127*cdf0e10cSrcweir /*------------------------------------------------------------------------
1128*cdf0e10cSrcweir  Beschreibung:	Runterscrollen der Inhalte der Edits.
1129*cdf0e10cSrcweir ------------------------------------------------------------------------*/
1130*cdf0e10cSrcweir 
1131*cdf0e10cSrcweir IMPL_LINK( SwColumnPage, Down, Button *, EMPTYARG )
1132*cdf0e10cSrcweir {
1133*cdf0e10cSrcweir 	if( nFirstVis + nVisCols < nCols )
1134*cdf0e10cSrcweir 	{
1135*cdf0e10cSrcweir 		++nFirstVis;
1136*cdf0e10cSrcweir 		SetLabels( nFirstVis );
1137*cdf0e10cSrcweir 		Update();
1138*cdf0e10cSrcweir 	}
1139*cdf0e10cSrcweir 	return 0;
1140*cdf0e10cSrcweir }
1141*cdf0e10cSrcweir /*------------------------------------------------------------------------
1142*cdf0e10cSrcweir  Beschreibung:	Relikt aus alten Zeiten - jetzt direkt ohne time
1143*cdf0e10cSrcweir  * 				Timer- Handler; angetriggert durch eine Aenderung der
1144*cdf0e10cSrcweir 				Spaltenbreite oder des Spaltenabstandes.
1145*cdf0e10cSrcweir ------------------------------------------------------------------------*/
1146*cdf0e10cSrcweir 
1147*cdf0e10cSrcweir IMPL_LINK( SwColumnPage, Timeout, Timer *, EMPTYARG )
1148*cdf0e10cSrcweir {
1149*cdf0e10cSrcweir 	DBG_PROFSTART(columnhdl) ;
1150*cdf0e10cSrcweir 	if(pModifiedField)
1151*cdf0e10cSrcweir 	{
1152*cdf0e10cSrcweir 			// Finden der veraenderten Spalte
1153*cdf0e10cSrcweir 		sal_uInt16 nChanged = nFirstVis;
1154*cdf0e10cSrcweir 		if(pModifiedField == &aEd2)
1155*cdf0e10cSrcweir 			++nChanged;
1156*cdf0e10cSrcweir 		else if(pModifiedField == &aEd3)
1157*cdf0e10cSrcweir 			nChanged += 2;
1158*cdf0e10cSrcweir 		/*else if(pModifiedField == &aEd4)
1159*cdf0e10cSrcweir 			nChanged += 3;*/
1160*cdf0e10cSrcweir 
1161*cdf0e10cSrcweir 		long nNewWidth = (sal_uInt16)
1162*cdf0e10cSrcweir 			pModifiedField->DenormalizePercent(pModifiedField->GetValue(FUNIT_TWIP));
1163*cdf0e10cSrcweir 		long nDiff = nNewWidth - nColWidth[nChanged];
1164*cdf0e10cSrcweir 
1165*cdf0e10cSrcweir 		// wenn es die letzte Spalte ist
1166*cdf0e10cSrcweir 		if(nChanged == nCols - 1)
1167*cdf0e10cSrcweir 		{
1168*cdf0e10cSrcweir 			nColWidth[0] -= nDiff;
1169*cdf0e10cSrcweir 			if(nColWidth[0] < (long)nMinWidth)
1170*cdf0e10cSrcweir 			{
1171*cdf0e10cSrcweir 				nNewWidth -= nMinWidth - nColWidth[0];
1172*cdf0e10cSrcweir 				nColWidth[0] = nMinWidth;
1173*cdf0e10cSrcweir 			}
1174*cdf0e10cSrcweir 
1175*cdf0e10cSrcweir 		}
1176*cdf0e10cSrcweir 		else if(nDiff)
1177*cdf0e10cSrcweir 		{
1178*cdf0e10cSrcweir 			nColWidth[nChanged + 1] -= nDiff;
1179*cdf0e10cSrcweir 			if(nColWidth[nChanged + 1] < (long) nMinWidth)
1180*cdf0e10cSrcweir 			{
1181*cdf0e10cSrcweir 				nNewWidth -= nMinWidth - nColWidth[nChanged + 1];
1182*cdf0e10cSrcweir 				nColWidth[nChanged + 1] = nMinWidth;
1183*cdf0e10cSrcweir 			}
1184*cdf0e10cSrcweir 		}
1185*cdf0e10cSrcweir 		nColWidth[nChanged] = nNewWidth;
1186*cdf0e10cSrcweir 		pModifiedField = 0;
1187*cdf0e10cSrcweir 	}
1188*cdf0e10cSrcweir 	Update();
1189*cdf0e10cSrcweir 	DBG_PROFSTOP(columnhdl) ;
1190*cdf0e10cSrcweir 	return 0;
1191*cdf0e10cSrcweir }
1192*cdf0e10cSrcweir /*------------------------------------------------------------------------
1193*cdf0e10cSrcweir  Beschreibung:	Aktualisierung der Anzeige
1194*cdf0e10cSrcweir ------------------------------------------------------------------------*/
1195*cdf0e10cSrcweir 
1196*cdf0e10cSrcweir 
1197*cdf0e10cSrcweir 
1198*cdf0e10cSrcweir void SwColumnPage::Update()
1199*cdf0e10cSrcweir {
1200*cdf0e10cSrcweir 	aBalanceColsCB.Enable(nCols > 1);
1201*cdf0e10cSrcweir 	if(nCols >= 2)
1202*cdf0e10cSrcweir 	{
1203*cdf0e10cSrcweir         aEd1.SetPrcntValue(aEd1.NormalizePercent(nColWidth[nFirstVis]), FUNIT_TWIP);
1204*cdf0e10cSrcweir         aDistEd1.SetPrcntValue(aDistEd1.NormalizePercent(nColDist[nFirstVis]), FUNIT_TWIP);
1205*cdf0e10cSrcweir         aEd2.SetPrcntValue(aEd2.NormalizePercent(nColWidth[nFirstVis + 1]), FUNIT_TWIP);
1206*cdf0e10cSrcweir 		if(nCols >= 3)
1207*cdf0e10cSrcweir 		{
1208*cdf0e10cSrcweir             aDistEd2.SetPrcntValue(aDistEd2.NormalizePercent(nColDist[nFirstVis + 1]), FUNIT_TWIP);
1209*cdf0e10cSrcweir             aEd3.SetPrcntValue(aEd3.NormalizePercent(nColWidth[nFirstVis + 2]), FUNIT_TWIP);
1210*cdf0e10cSrcweir 		}
1211*cdf0e10cSrcweir 		else
1212*cdf0e10cSrcweir 		{
1213*cdf0e10cSrcweir 			aEd3.SetText(aEmptyStr);
1214*cdf0e10cSrcweir 			aDistEd2.SetText(aEmptyStr);
1215*cdf0e10cSrcweir 		}
1216*cdf0e10cSrcweir 	}
1217*cdf0e10cSrcweir 	else
1218*cdf0e10cSrcweir 	{
1219*cdf0e10cSrcweir 		aEd1.SetText(aEmptyStr);
1220*cdf0e10cSrcweir 		aEd2.SetText(aEmptyStr);
1221*cdf0e10cSrcweir 		aEd3.SetText(aEmptyStr);
1222*cdf0e10cSrcweir 		aDistEd1.SetText(aEmptyStr);
1223*cdf0e10cSrcweir 		aDistEd2.SetText(aEmptyStr);
1224*cdf0e10cSrcweir 	}
1225*cdf0e10cSrcweir 	UpdateColMgr(0);
1226*cdf0e10cSrcweir }
1227*cdf0e10cSrcweir 
1228*cdf0e10cSrcweir /*--------------------------------------------------------------------
1229*cdf0e10cSrcweir 	Beschreibung:	Update Bsp
1230*cdf0e10cSrcweir  --------------------------------------------------------------------*/
1231*cdf0e10cSrcweir 
1232*cdf0e10cSrcweir 
1233*cdf0e10cSrcweir 
1234*cdf0e10cSrcweir void SwColumnPage::ActivatePage(const SfxItemSet& rSet)
1235*cdf0e10cSrcweir {
1236*cdf0e10cSrcweir 	if(!bFrm)
1237*cdf0e10cSrcweir 	{
1238*cdf0e10cSrcweir 		if( SFX_ITEM_SET == rSet.GetItemState( SID_ATTR_PAGE_SIZE ))
1239*cdf0e10cSrcweir 		{
1240*cdf0e10cSrcweir 			const SvxSizeItem& rSize = (const SvxSizeItem&)rSet.Get(
1241*cdf0e10cSrcweir 												SID_ATTR_PAGE_SIZE);
1242*cdf0e10cSrcweir 			const SvxLRSpaceItem& rLRSpace = (const SvxLRSpaceItem&)rSet.Get(
1243*cdf0e10cSrcweir 																RES_LR_SPACE );
1244*cdf0e10cSrcweir 			const SvxBoxItem& rBox = (const SvxBoxItem&) rSet.Get(RES_BOX);
1245*cdf0e10cSrcweir             sal_uInt16 nActWidth = static_cast< sal_uInt16 >(rSize.GetSize().Width()
1246*cdf0e10cSrcweir                             - rLRSpace.GetLeft() - rLRSpace.GetRight() - rBox.GetDistance());
1247*cdf0e10cSrcweir 
1248*cdf0e10cSrcweir 			if( pColMgr->GetActualSize() != nActWidth)
1249*cdf0e10cSrcweir 			{
1250*cdf0e10cSrcweir 				pColMgr->SetActualWidth(nActWidth);
1251*cdf0e10cSrcweir 				ColModify( 0 );
1252*cdf0e10cSrcweir 				UpdateColMgr( 0 );
1253*cdf0e10cSrcweir 			}
1254*cdf0e10cSrcweir 		}
1255*cdf0e10cSrcweir 		aFrmExampleWN.Hide();
1256*cdf0e10cSrcweir 		aPgeExampleWN.UpdateExample( rSet, pColMgr );
1257*cdf0e10cSrcweir 		aPgeExampleWN.Show();
1258*cdf0e10cSrcweir 
1259*cdf0e10cSrcweir 	}
1260*cdf0e10cSrcweir 	else
1261*cdf0e10cSrcweir 	{
1262*cdf0e10cSrcweir 		aPgeExampleWN.Hide();
1263*cdf0e10cSrcweir 		aFrmExampleWN.Show();
1264*cdf0e10cSrcweir 
1265*cdf0e10cSrcweir 		// Size
1266*cdf0e10cSrcweir         const SwFmtFrmSize& rSize = (const SwFmtFrmSize&)rSet.Get(RES_FRM_SIZE);
1267*cdf0e10cSrcweir         const SvxBoxItem& rBox = (const SvxBoxItem&) rSet.Get(RES_BOX);
1268*cdf0e10cSrcweir 
1269*cdf0e10cSrcweir         long nDistance = rBox.GetDistance();
1270*cdf0e10cSrcweir 		const sal_uInt16 nTotalWish = bFormat ? FRAME_FORMAT_WIDTH : sal_uInt16(rSize.GetWidth() - 2 * nDistance);
1271*cdf0e10cSrcweir 
1272*cdf0e10cSrcweir 		// Maximalwerte der Spaltenbreiten setzen
1273*cdf0e10cSrcweir 		SetPageWidth(nTotalWish);
1274*cdf0e10cSrcweir 
1275*cdf0e10cSrcweir 		if(pColMgr->GetActualSize() != nTotalWish)
1276*cdf0e10cSrcweir 		{
1277*cdf0e10cSrcweir 			pColMgr->SetActualWidth(nTotalWish);
1278*cdf0e10cSrcweir 			Init();
1279*cdf0e10cSrcweir 		}
1280*cdf0e10cSrcweir 		sal_Bool bPercent;
1281*cdf0e10cSrcweir 		// im Rahmenformat nur relative Angaben
1282*cdf0e10cSrcweir 		if ( bFormat || (rSize.GetWidthPercent() && rSize.GetWidthPercent() != 0xff) )
1283*cdf0e10cSrcweir 		{
1284*cdf0e10cSrcweir 			// Wert fuer 100% setzen
1285*cdf0e10cSrcweir 			aEd1.SetRefValue(nTotalWish);
1286*cdf0e10cSrcweir 			aEd2.SetRefValue(nTotalWish);
1287*cdf0e10cSrcweir 			aEd3.SetRefValue(nTotalWish);
1288*cdf0e10cSrcweir 			aDistEd1.SetRefValue(nTotalWish);
1289*cdf0e10cSrcweir 			aDistEd2.SetRefValue(nTotalWish);
1290*cdf0e10cSrcweir 
1291*cdf0e10cSrcweir 			// Auf %-Darstellung umschalten
1292*cdf0e10cSrcweir 			bPercent = sal_True;
1293*cdf0e10cSrcweir 		}
1294*cdf0e10cSrcweir 		else
1295*cdf0e10cSrcweir 			bPercent = sal_False;
1296*cdf0e10cSrcweir 
1297*cdf0e10cSrcweir 		aEd1.ShowPercent(bPercent);
1298*cdf0e10cSrcweir 		aEd2.ShowPercent(bPercent);
1299*cdf0e10cSrcweir 		aEd3.ShowPercent(bPercent);
1300*cdf0e10cSrcweir 		aDistEd1.ShowPercent(bPercent);
1301*cdf0e10cSrcweir 		aDistEd2.ShowPercent(bPercent);
1302*cdf0e10cSrcweir 		aDistEd1.MetricField::SetMin(0);
1303*cdf0e10cSrcweir 		aDistEd2.MetricField::SetMin(0);
1304*cdf0e10cSrcweir 	}
1305*cdf0e10cSrcweir 	Update();
1306*cdf0e10cSrcweir }
1307*cdf0e10cSrcweir 
1308*cdf0e10cSrcweir /*--------------------------------------------------------------------
1309*cdf0e10cSrcweir 	Beschreibung:
1310*cdf0e10cSrcweir  --------------------------------------------------------------------*/
1311*cdf0e10cSrcweir 
1312*cdf0e10cSrcweir 
1313*cdf0e10cSrcweir 
1314*cdf0e10cSrcweir int SwColumnPage::DeactivatePage(SfxItemSet *_pSet)
1315*cdf0e10cSrcweir {
1316*cdf0e10cSrcweir     if(_pSet)
1317*cdf0e10cSrcweir         FillItemSet(*_pSet);
1318*cdf0e10cSrcweir 
1319*cdf0e10cSrcweir 	return sal_True;
1320*cdf0e10cSrcweir }
1321*cdf0e10cSrcweir 
1322*cdf0e10cSrcweir 
1323*cdf0e10cSrcweir 
1324*cdf0e10cSrcweir sal_uInt16* SwColumnPage::GetRanges()
1325*cdf0e10cSrcweir {
1326*cdf0e10cSrcweir 	return aPageRg;
1327*cdf0e10cSrcweir }
1328*cdf0e10cSrcweir 
1329*cdf0e10cSrcweir /*--------------------------------------------------------------------
1330*cdf0e10cSrcweir 	Beschreibung:
1331*cdf0e10cSrcweir  --------------------------------------------------------------------*/
1332*cdf0e10cSrcweir 
1333*cdf0e10cSrcweir 
1334*cdf0e10cSrcweir 
1335*cdf0e10cSrcweir IMPL_LINK( SwColumnPage, SetDefaultsHdl, ValueSet *, pVS )
1336*cdf0e10cSrcweir {
1337*cdf0e10cSrcweir 	sal_uInt16 nItem = pVS->GetSelectItemId();
1338*cdf0e10cSrcweir 	if( nItem < 4 )
1339*cdf0e10cSrcweir 	{
1340*cdf0e10cSrcweir 		aCLNrEdt.SetValue( nItem );
1341*cdf0e10cSrcweir 		aAutoWidthBox.Check();
1342*cdf0e10cSrcweir         aDistEd1.SetPrcntValue(0);
1343*cdf0e10cSrcweir 		ColModify(0);
1344*cdf0e10cSrcweir 	}
1345*cdf0e10cSrcweir 	else
1346*cdf0e10cSrcweir 	{
1347*cdf0e10cSrcweir 		bLockUpdate = sal_True;
1348*cdf0e10cSrcweir 		aCLNrEdt.SetValue( 2 );
1349*cdf0e10cSrcweir 		aAutoWidthBox.Check(sal_False);
1350*cdf0e10cSrcweir         aDistEd1.SetPrcntValue(0);
1351*cdf0e10cSrcweir 		ColModify(0);
1352*cdf0e10cSrcweir 		// jetzt noch das Breitenverhaeltnisse auf 2 : 1 bzw. 1 : 2 stellen
1353*cdf0e10cSrcweir 		sal_uInt16 nSmall = pColMgr->GetActualSize()  / 3;
1354*cdf0e10cSrcweir 		if(nItem == 4)
1355*cdf0e10cSrcweir 		{
1356*cdf0e10cSrcweir             aEd2.SetPrcntValue(aEd2.NormalizePercent(long(nSmall)), FUNIT_TWIP);
1357*cdf0e10cSrcweir 			pModifiedField = &aEd2;
1358*cdf0e10cSrcweir 		}
1359*cdf0e10cSrcweir 		else
1360*cdf0e10cSrcweir 		{
1361*cdf0e10cSrcweir             aEd1.SetPrcntValue(aEd1.NormalizePercent(long(nSmall)), FUNIT_TWIP);
1362*cdf0e10cSrcweir 			pModifiedField = &aEd1;
1363*cdf0e10cSrcweir 		}
1364*cdf0e10cSrcweir 		bLockUpdate = sal_False;
1365*cdf0e10cSrcweir 		Timeout(0);
1366*cdf0e10cSrcweir 
1367*cdf0e10cSrcweir 	}
1368*cdf0e10cSrcweir 	return 0;
1369*cdf0e10cSrcweir }
1370*cdf0e10cSrcweir 
1371*cdf0e10cSrcweir /*-----------------25.10.96 11.41-------------------
1372*cdf0e10cSrcweir 
1373*cdf0e10cSrcweir --------------------------------------------------*/
1374*cdf0e10cSrcweir 
1375*cdf0e10cSrcweir 
1376*cdf0e10cSrcweir void SwColumnPage::SetFrmMode(sal_Bool bMod)
1377*cdf0e10cSrcweir {
1378*cdf0e10cSrcweir 	bFrm = bMod;
1379*cdf0e10cSrcweir }
1380*cdf0e10cSrcweir /* -----------------------------2002/06/19 13:08------------------------------
1381*cdf0e10cSrcweir 
1382*cdf0e10cSrcweir  ---------------------------------------------------------------------------*/
1383*cdf0e10cSrcweir void SwColumnPage::SetInSection(sal_Bool bSet)
1384*cdf0e10cSrcweir {
1385*cdf0e10cSrcweir     if(!SW_MOD()->GetCTLOptions().IsCTLFontEnabled())
1386*cdf0e10cSrcweir         return;
1387*cdf0e10cSrcweir 
1388*cdf0e10cSrcweir     aVertFL.Show(bSet);
1389*cdf0e10cSrcweir     aPropertiesFL.Show(bSet);
1390*cdf0e10cSrcweir     aTextDirectionFT.Show(bSet);
1391*cdf0e10cSrcweir     aTextDirectionLB.Show(bSet);
1392*cdf0e10cSrcweir     if(bSet)
1393*cdf0e10cSrcweir     {
1394*cdf0e10cSrcweir         //resize line type FixedLine
1395*cdf0e10cSrcweir         Point aLtPos = aFLLineType.GetPosPixel();
1396*cdf0e10cSrcweir         Point aPropPos = aPropertiesFL.GetPosPixel();
1397*cdf0e10cSrcweir         Size aSz = aFLLineType.GetSizePixel();
1398*cdf0e10cSrcweir         aSz.Width() = aPropPos.X() - aLtPos.X() - LogicToPixel(Size(8, 8), MAP_APPFONT).Width();
1399*cdf0e10cSrcweir         aFLLineType.SetSizePixel(aSz);
1400*cdf0e10cSrcweir     }
1401*cdf0e10cSrcweir     else
1402*cdf0e10cSrcweir     {
1403*cdf0e10cSrcweir         Size aSz = aFLLineType.GetSizePixel();
1404*cdf0e10cSrcweir         aSz.Width() = LogicToPixel(Size(248, 248), MAP_APPFONT).Width();
1405*cdf0e10cSrcweir         aFLLineType.SetSizePixel(aSz);
1406*cdf0e10cSrcweir     }
1407*cdf0e10cSrcweir }
1408*cdf0e10cSrcweir 
1409*cdf0e10cSrcweir /*-----------------07.03.97 08.33-------------------
1410*cdf0e10cSrcweir 
1411*cdf0e10cSrcweir --------------------------------------------------*/
1412*cdf0e10cSrcweir 
1413*cdf0e10cSrcweir 
1414*cdf0e10cSrcweir void ColumnValueSet::UserDraw( const UserDrawEvent& rUDEvt )
1415*cdf0e10cSrcweir {
1416*cdf0e10cSrcweir 	OutputDevice*  pDev = rUDEvt.GetDevice();
1417*cdf0e10cSrcweir     const StyleSettings& rStyleSettings = GetSettings().GetStyleSettings();
1418*cdf0e10cSrcweir 
1419*cdf0e10cSrcweir 	Rectangle aRect = rUDEvt.GetRect();
1420*cdf0e10cSrcweir 	sal_uInt16	nItemId = rUDEvt.GetItemId();
1421*cdf0e10cSrcweir 	long nRectWidth = aRect.GetWidth();
1422*cdf0e10cSrcweir 	long nRectHeight = aRect.GetHeight();
1423*cdf0e10cSrcweir 
1424*cdf0e10cSrcweir 	Point aBLPos = aRect.TopLeft();
1425*cdf0e10cSrcweir     Color aFillColor(pDev->GetFillColor());
1426*cdf0e10cSrcweir     Color aLineColor(pDev->GetLineColor());
1427*cdf0e10cSrcweir     pDev->SetFillColor(rStyleSettings.GetFieldColor());
1428*cdf0e10cSrcweir     pDev->SetLineColor(SwViewOption::GetFontColor());
1429*cdf0e10cSrcweir 
1430*cdf0e10cSrcweir 	long nStep = Abs(Abs(nRectHeight * 95 /100) / 11);
1431*cdf0e10cSrcweir 	long nTop = (nRectHeight - 11 * nStep ) / 2;
1432*cdf0e10cSrcweir     sal_uInt16 nCols = 0;
1433*cdf0e10cSrcweir 	long nStarts[3];
1434*cdf0e10cSrcweir 	long nEnds[3];
1435*cdf0e10cSrcweir 	nStarts[0] = nRectWidth * 10 / 100;
1436*cdf0e10cSrcweir 	switch( nItemId )
1437*cdf0e10cSrcweir 	{
1438*cdf0e10cSrcweir 		case 1:
1439*cdf0e10cSrcweir 			nEnds[0] = nRectWidth * 9 / 10;
1440*cdf0e10cSrcweir 			nCols = 1;
1441*cdf0e10cSrcweir 		break;
1442*cdf0e10cSrcweir 		case 2: nCols = 2;
1443*cdf0e10cSrcweir 			nEnds[0] = nRectWidth * 45 / 100;
1444*cdf0e10cSrcweir 			nStarts[1] = nEnds[0] + nStep;
1445*cdf0e10cSrcweir 			nEnds[1] = nRectWidth * 9 / 10;
1446*cdf0e10cSrcweir 		break;
1447*cdf0e10cSrcweir 		case 3: nCols = 3;
1448*cdf0e10cSrcweir 			nEnds[0] 	= nRectWidth * 30 / 100;
1449*cdf0e10cSrcweir 			nStarts[1] 	= nEnds[0] + nStep;
1450*cdf0e10cSrcweir 			nEnds[1] 	= nRectWidth * 63 / 100;
1451*cdf0e10cSrcweir 			nStarts[2] 	= nEnds[1] + nStep;
1452*cdf0e10cSrcweir 			nEnds[2] 	= nRectWidth * 9 / 10;
1453*cdf0e10cSrcweir 		break;
1454*cdf0e10cSrcweir 		case 4: nCols = 2;
1455*cdf0e10cSrcweir 			nEnds[0] = nRectWidth * 63 / 100;
1456*cdf0e10cSrcweir 			nStarts[1] = nEnds[0] + nStep;
1457*cdf0e10cSrcweir 			nEnds[1] = nRectWidth * 9 / 10;
1458*cdf0e10cSrcweir 		break;
1459*cdf0e10cSrcweir 		case 5: nCols = 2;
1460*cdf0e10cSrcweir 			nEnds[0] = nRectWidth * 30 / 100;
1461*cdf0e10cSrcweir 			nStarts[1] = nEnds[0] + nStep;
1462*cdf0e10cSrcweir 			nEnds[1] = nRectWidth * 9 / 10;
1463*cdf0e10cSrcweir 		break;
1464*cdf0e10cSrcweir 	}
1465*cdf0e10cSrcweir 	for(sal_uInt16 j = 0; j < nCols; j++ )
1466*cdf0e10cSrcweir 	{
1467*cdf0e10cSrcweir 		Point aStart(aBLPos.X() + nStarts[j], 0);
1468*cdf0e10cSrcweir 		Point aEnd(aBLPos.X() + nEnds[j], 0);
1469*cdf0e10cSrcweir 		for( sal_uInt16 i = 0; i < 12; i ++)
1470*cdf0e10cSrcweir 		{
1471*cdf0e10cSrcweir 			aStart.Y() = aEnd.Y() = aBLPos.Y() + nTop + i * nStep;
1472*cdf0e10cSrcweir 			pDev->DrawLine(aStart, aEnd);
1473*cdf0e10cSrcweir 		}
1474*cdf0e10cSrcweir 	}
1475*cdf0e10cSrcweir     pDev->SetFillColor(aFillColor);
1476*cdf0e10cSrcweir     pDev->SetLineColor(aLineColor);
1477*cdf0e10cSrcweir }
1478*cdf0e10cSrcweir 
1479*cdf0e10cSrcweir /*-----------------07.03.97 08.48-------------------
1480*cdf0e10cSrcweir 
1481*cdf0e10cSrcweir --------------------------------------------------*/
1482*cdf0e10cSrcweir 
1483*cdf0e10cSrcweir ColumnValueSet::~ColumnValueSet()
1484*cdf0e10cSrcweir {
1485*cdf0e10cSrcweir }
1486*cdf0e10cSrcweir /* -----------------------------02.04.2002 16:01------------------------------
1487*cdf0e10cSrcweir 
1488*cdf0e10cSrcweir  ---------------------------------------------------------------------------*/
1489*cdf0e10cSrcweir void ColumnValueSet::DataChanged( const DataChangedEvent& rDCEvt )
1490*cdf0e10cSrcweir {
1491*cdf0e10cSrcweir 	if ( (rDCEvt.GetType() == DATACHANGED_SETTINGS) &&
1492*cdf0e10cSrcweir          (rDCEvt.GetFlags() & SETTINGS_STYLE) )
1493*cdf0e10cSrcweir     {
1494*cdf0e10cSrcweir         Format();
1495*cdf0e10cSrcweir     }
1496*cdf0e10cSrcweir     ValueSet::DataChanged( rDCEvt );
1497*cdf0e10cSrcweir }
1498*cdf0e10cSrcweir 
1499