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