xref: /aoo41x/main/sw/source/ui/frmdlg/column.cxx (revision 4d7c9de0)
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 
IsMarkInSameSection(SwWrtShell & rWrtSh,const SwSection * pSect)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 
SwColumnDlg(Window * pParent,SwWrtShell & rSh)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 
~SwColumnDlg()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  * --------------------------------------------------*/
IMPL_LINK(SwColumnDlg,ObjectHdl,ListBox *,pBox)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  * --------------------------------------------------*/
IMPL_LINK(SwColumnDlg,OkHdl,OKButton *,EMPTYARG)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
GetMaxWidth(SwColMgr * pColMgr,sal_uInt16 nCols)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 
DBG_NAME(columnhdl)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 
ResetColWidth()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 
SwColumnPage(Window * pParent,const SfxItemSet & rSet)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 
520cdf0e10cSrcweir     for( i = 0; i < 5; i++)
521*ca62e2c2SSteve Yin 		//Solution:Set accessible name one be one
522*ca62e2c2SSteve Yin 		//aDefaultVS.InsertItem( i + 1, i );
523*ca62e2c2SSteve Yin 		{
524*ca62e2c2SSteve Yin 			String aItemText;
525*ca62e2c2SSteve Yin 			switch( i )
526*ca62e2c2SSteve Yin 			{
527*ca62e2c2SSteve Yin 				case 0:
528*ca62e2c2SSteve Yin 					aItemText =  SW_RESSTR( STR_COLUMN_VALUESET_ITEM0 ) ;
529*ca62e2c2SSteve Yin 					break;
530*ca62e2c2SSteve Yin 				case 1:
531*ca62e2c2SSteve Yin 					aItemText =  SW_RESSTR( STR_COLUMN_VALUESET_ITEM1 ) ;
532*ca62e2c2SSteve Yin 					break;
533*ca62e2c2SSteve Yin 				case 2:
534*ca62e2c2SSteve Yin 					aItemText =  SW_RESSTR( STR_COLUMN_VALUESET_ITEM2 ) ;
535*ca62e2c2SSteve Yin 					break;
536*ca62e2c2SSteve Yin 				case 3:
537*ca62e2c2SSteve Yin 					aItemText =  SW_RESSTR( STR_COLUMN_VALUESET_ITEM3 );
538*ca62e2c2SSteve Yin 					break;
539*ca62e2c2SSteve Yin 				case 4:
540*ca62e2c2SSteve Yin 					aItemText =  SW_RESSTR( STR_COLUMN_VALUESET_ITEM4 );
541*ca62e2c2SSteve Yin 					break;
542*ca62e2c2SSteve Yin 				default:
543*ca62e2c2SSteve Yin 					break;
544*ca62e2c2SSteve Yin 			}
545*ca62e2c2SSteve Yin 			aDefaultVS.InsertItem( i + 1,  aItemText, i );
546*ca62e2c2SSteve Yin 		}
547cdf0e10cSrcweir 
548cdf0e10cSrcweir 	aDefaultVS.SetSelectHdl(LINK(this, SwColumnPage, SetDefaultsHdl));
549cdf0e10cSrcweir 
550cdf0e10cSrcweir 	// Controls fuer Zusaetzebereich beim MoreButton anmelden
551cdf0e10cSrcweir     Link aCLNrLk = LINK(this, SwColumnPage, ColModify);
552cdf0e10cSrcweir     aCLNrEdt.SetLoseFocusHdl(aCLNrLk);
553cdf0e10cSrcweir     aCLNrEdt.SetUpHdl(aCLNrLk);
554cdf0e10cSrcweir     aCLNrEdt.SetDownHdl(aCLNrLk);
555cdf0e10cSrcweir     Link aLk = LINK(this, SwColumnPage, GapModify);
556cdf0e10cSrcweir 	aDistEd1.SetUpHdl(aLk);
557cdf0e10cSrcweir 	aDistEd1.SetDownHdl(aLk);
558cdf0e10cSrcweir 	aDistEd1.SetLoseFocusHdl(aLk);
559cdf0e10cSrcweir 	aDistEd2.SetUpHdl(aLk);
560cdf0e10cSrcweir 	aDistEd2.SetDownHdl(aLk);
561cdf0e10cSrcweir 	aDistEd2.SetLoseFocusHdl(aLk);
562cdf0e10cSrcweir 
563cdf0e10cSrcweir 	aLk = LINK(this, SwColumnPage, EdModify);
564cdf0e10cSrcweir 
565cdf0e10cSrcweir 	aEd1.SetUpHdl(aLk);
566cdf0e10cSrcweir 	aEd1.SetDownHdl(aLk);
567cdf0e10cSrcweir 	aEd1.SetLoseFocusHdl(aLk);
568cdf0e10cSrcweir 
569cdf0e10cSrcweir 	aEd2.SetUpHdl(aLk);
570cdf0e10cSrcweir 	aEd2.SetDownHdl(aLk);
571cdf0e10cSrcweir 	aEd2.SetLoseFocusHdl(aLk);
572cdf0e10cSrcweir 
573cdf0e10cSrcweir 	aEd3.SetUpHdl(aLk);
574cdf0e10cSrcweir 	aEd3.SetDownHdl(aLk);
575cdf0e10cSrcweir 	aEd3.SetLoseFocusHdl(aLk);
576cdf0e10cSrcweir 
577cdf0e10cSrcweir 	aBtnUp.SetClickHdl(LINK(this, SwColumnPage, Up));
578cdf0e10cSrcweir 	aBtnDown.SetClickHdl(LINK(this, SwColumnPage, Down));
579cdf0e10cSrcweir 	aAutoWidthBox.SetClickHdl(LINK(this, SwColumnPage, AutoWidthHdl));
580cdf0e10cSrcweir 
581cdf0e10cSrcweir 	aLk = LINK( this, SwColumnPage, UpdateColMgr );
582cdf0e10cSrcweir 	aLineTypeDLB.SetSelectHdl( aLk );
583cdf0e10cSrcweir 	aLineHeightEdit.SetModifyHdl( aLk );
584cdf0e10cSrcweir 	aLinePosDLB.SetSelectHdl( aLk );
585cdf0e10cSrcweir 
586cdf0e10cSrcweir 		// Trennlinie
587cdf0e10cSrcweir 	aLineTypeDLB.SetUnit( FUNIT_POINT );
588cdf0e10cSrcweir 	aLineTypeDLB.SetSourceUnit( FUNIT_TWIP );
589cdf0e10cSrcweir 	for( i = 0; i < nLineCount; ++i )
590cdf0e10cSrcweir 		aLineTypeDLB.InsertEntry( 100 * nLines[ i ] );
591cdf0e10cSrcweir }
592cdf0e10cSrcweir 
593cdf0e10cSrcweir 
594cdf0e10cSrcweir 
~SwColumnPage()595cdf0e10cSrcweir SwColumnPage::~SwColumnPage()
596cdf0e10cSrcweir {
597cdf0e10cSrcweir 	delete pColMgr;
598cdf0e10cSrcweir }
599cdf0e10cSrcweir 
600cdf0e10cSrcweir /*--------------------------------------------------------------------
601cdf0e10cSrcweir 	Beschreibung:
602cdf0e10cSrcweir  --------------------------------------------------------------------*/
603cdf0e10cSrcweir 
604cdf0e10cSrcweir 
SetPageWidth(long nPageWidth)605cdf0e10cSrcweir void SwColumnPage::SetPageWidth(long nPageWidth)
606cdf0e10cSrcweir {
607cdf0e10cSrcweir     long nNewMaxWidth = static_cast< long >(aEd1.NormalizePercent(nPageWidth));
608cdf0e10cSrcweir 
609cdf0e10cSrcweir 	aDistEd1.SetMax(nNewMaxWidth, FUNIT_TWIP);
610cdf0e10cSrcweir 	aDistEd2.SetMax(nNewMaxWidth, FUNIT_TWIP);
611cdf0e10cSrcweir 	aEd1.SetMax(nNewMaxWidth, FUNIT_TWIP);
612cdf0e10cSrcweir 	aEd2.SetMax(nNewMaxWidth, FUNIT_TWIP);
613cdf0e10cSrcweir 	aEd3.SetMax(nNewMaxWidth, FUNIT_TWIP);
614cdf0e10cSrcweir }
615cdf0e10cSrcweir 
616cdf0e10cSrcweir /*--------------------------------------------------------------------
617cdf0e10cSrcweir 	Beschreibung:
618cdf0e10cSrcweir  --------------------------------------------------------------------*/
619cdf0e10cSrcweir 
620cdf0e10cSrcweir 
621cdf0e10cSrcweir 
Reset(const SfxItemSet & rSet)622cdf0e10cSrcweir void SwColumnPage::Reset(const SfxItemSet &rSet)
623cdf0e10cSrcweir {
624cdf0e10cSrcweir 	sal_uInt16 nHtmlMode = ::GetHtmlMode((const SwDocShell*)SfxObjectShell::Current());
625cdf0e10cSrcweir 	if(nHtmlMode & HTMLMODE_ON)
626cdf0e10cSrcweir 	{
627cdf0e10cSrcweir 		bHtmlMode = sal_True;
628cdf0e10cSrcweir 		aAutoWidthBox.Enable(sal_False);
629cdf0e10cSrcweir 	}
630cdf0e10cSrcweir 	FieldUnit aMetric = ::GetDfltMetric(bHtmlMode);
631cdf0e10cSrcweir 	SetMetric(aEd1, aMetric);
632cdf0e10cSrcweir 	SetMetric(aEd2, aMetric);
633cdf0e10cSrcweir 	SetMetric(aEd3, aMetric);
634cdf0e10cSrcweir 	SetMetric(aDistEd1, aMetric);
635cdf0e10cSrcweir 	SetMetric(aDistEd2, aMetric);
636cdf0e10cSrcweir 
637cdf0e10cSrcweir 	delete pColMgr;
638cdf0e10cSrcweir 	pColMgr = new SwColMgr(rSet);
639cdf0e10cSrcweir 	nCols 	= pColMgr->GetCount() ;
640cdf0e10cSrcweir 	aCLNrEdt.SetMax(Max((sal_uInt16)aCLNrEdt.GetMax(), (sal_uInt16)nCols));
641cdf0e10cSrcweir 	aCLNrEdt.SetLast(Max(nCols,(sal_uInt16)aCLNrEdt.GetMax()));
642cdf0e10cSrcweir 
643cdf0e10cSrcweir 	if(bFrm)
644cdf0e10cSrcweir 	{
645cdf0e10cSrcweir 		if(bFormat)                     // hier gibt es keine Size
646cdf0e10cSrcweir 			pColMgr->SetActualWidth(FRAME_FORMAT_WIDTH);
647cdf0e10cSrcweir 		else
648cdf0e10cSrcweir 		{
649cdf0e10cSrcweir 			const SwFmtFrmSize& rSize = (const SwFmtFrmSize&)rSet.Get(RES_FRM_SIZE);
650cdf0e10cSrcweir 			const SvxBoxItem& rBox = (const SvxBoxItem&) rSet.Get(RES_BOX);
651cdf0e10cSrcweir 			pColMgr->SetActualWidth((sal_uInt16)rSize.GetSize().Width() - rBox.GetDistance());
652cdf0e10cSrcweir 		}
653cdf0e10cSrcweir 	}
654cdf0e10cSrcweir     if(aBalanceColsCB.IsVisible())
655cdf0e10cSrcweir 	{
656cdf0e10cSrcweir         const SfxPoolItem* pItem;
657cdf0e10cSrcweir         if( SFX_ITEM_SET == rSet.GetItemState( RES_COLUMNBALANCE, sal_False, &pItem ))
658cdf0e10cSrcweir 			aBalanceColsCB.Check(!((const SwFmtNoBalancedColumns*)pItem)->GetValue());
659cdf0e10cSrcweir 		else
660cdf0e10cSrcweir 			aBalanceColsCB.Check( sal_True );
661cdf0e10cSrcweir 	}
662cdf0e10cSrcweir 
663cdf0e10cSrcweir     //text direction
664cdf0e10cSrcweir     if( SFX_ITEM_AVAILABLE <= rSet.GetItemState( RES_FRAMEDIR ) )
665cdf0e10cSrcweir 	{
666cdf0e10cSrcweir         const SvxFrameDirectionItem& rItem = (const SvxFrameDirectionItem&)rSet.Get(RES_FRAMEDIR);
667cdf0e10cSrcweir         sal_uInt32 nVal  = rItem.GetValue();
668cdf0e10cSrcweir         sal_uInt16 nPos = aTextDirectionLB.GetEntryPos( (void*) nVal );
669cdf0e10cSrcweir         aTextDirectionLB.SelectEntryPos( nPos );
670cdf0e10cSrcweir         aTextDirectionLB.SaveValue();
671cdf0e10cSrcweir 	}
672cdf0e10cSrcweir 
673cdf0e10cSrcweir     Init();
674cdf0e10cSrcweir 	ActivatePage( rSet );
675cdf0e10cSrcweir }
676cdf0e10cSrcweir 
677cdf0e10cSrcweir /*--------------------------------------------------------------------
678cdf0e10cSrcweir 	Beschreibung:	TabPage erzeugen
679cdf0e10cSrcweir  --------------------------------------------------------------------*/
680cdf0e10cSrcweir 
681cdf0e10cSrcweir 
682cdf0e10cSrcweir 
Create(Window * pParent,const SfxItemSet & rSet)683cdf0e10cSrcweir SfxTabPage* SwColumnPage::Create(Window *pParent, const SfxItemSet &rSet)
684cdf0e10cSrcweir {
685cdf0e10cSrcweir 	return new SwColumnPage(pParent, rSet);
686cdf0e10cSrcweir }
687cdf0e10cSrcweir 
688cdf0e10cSrcweir /*--------------------------------------------------------------------
689cdf0e10cSrcweir 	Beschreibung:	Attribute in den Set stopfen bei OK
690cdf0e10cSrcweir  --------------------------------------------------------------------*/
691cdf0e10cSrcweir 
692cdf0e10cSrcweir 
693cdf0e10cSrcweir 
FillItemSet(SfxItemSet & rSet)694cdf0e10cSrcweir sal_Bool SwColumnPage::FillItemSet(SfxItemSet &rSet)
695cdf0e10cSrcweir {
696cdf0e10cSrcweir     if(aCLNrEdt.HasChildPathFocus())
697cdf0e10cSrcweir         aCLNrEdt.GetDownHdl().Call(&aCLNrEdt);
698cdf0e10cSrcweir     // Im ItemSet setzen
699cdf0e10cSrcweir 	// Die aktuellen Einstellungen sind
700cdf0e10cSrcweir 	// schon vorhanden
701cdf0e10cSrcweir 	//
702cdf0e10cSrcweir 	const SfxPoolItem* pOldItem;
703cdf0e10cSrcweir 	const SwFmtCol& rCol = pColMgr->GetColumns();
704cdf0e10cSrcweir 	if(0 == (pOldItem = GetOldItem( rSet, RES_COL )) ||
705cdf0e10cSrcweir 				rCol != *pOldItem )
706cdf0e10cSrcweir 		rSet.Put(rCol);
707cdf0e10cSrcweir 
708cdf0e10cSrcweir 	if(aBalanceColsCB.IsVisible() )
709cdf0e10cSrcweir 	{
710cdf0e10cSrcweir 		rSet.Put(SwFmtNoBalancedColumns(!aBalanceColsCB.IsChecked() ));
711cdf0e10cSrcweir 	}
712cdf0e10cSrcweir     sal_uInt16 nPos;
713cdf0e10cSrcweir     if( aTextDirectionLB.IsVisible() &&
714cdf0e10cSrcweir         ( nPos = aTextDirectionLB.GetSelectEntryPos() ) !=
715cdf0e10cSrcweir                                             aTextDirectionLB.GetSavedValue() )
716cdf0e10cSrcweir 	{
717cdf0e10cSrcweir         sal_uInt32 nDirection = (sal_uInt32)(sal_IntPtr)aTextDirectionLB.GetEntryData( nPos );
718cdf0e10cSrcweir         rSet.Put( SvxFrameDirectionItem( (SvxFrameDirection)nDirection, RES_FRAMEDIR));
719cdf0e10cSrcweir 	}
720cdf0e10cSrcweir     return sal_True;
721cdf0e10cSrcweir }
722cdf0e10cSrcweir 
723cdf0e10cSrcweir /*--------------------------------------------------------------------
724cdf0e10cSrcweir 	Beschreibung:	ColumnManager updaten
725cdf0e10cSrcweir  --------------------------------------------------------------------*/
726cdf0e10cSrcweir 
727cdf0e10cSrcweir 
728cdf0e10cSrcweir 
729cdf0e10cSrcweir IMPL_LINK( SwColumnPage, UpdateColMgr, void *, /*pField*/ )
730cdf0e10cSrcweir {
731cdf0e10cSrcweir 	long nGutterWidth = pColMgr->GetGutterWidth();
732cdf0e10cSrcweir 	if(nCols > 1)
733cdf0e10cSrcweir 	{
734cdf0e10cSrcweir 			// Ermitteln, ob die schmalste Spalte zu schmal ist
735cdf0e10cSrcweir 			// fuer den eingestellten Spaltenabstand
736cdf0e10cSrcweir 		long nMin = nColWidth[0];
737cdf0e10cSrcweir 		sal_uInt16 i;
738cdf0e10cSrcweir 
739cdf0e10cSrcweir 		for( i = 1; i < nCols; ++i)
740cdf0e10cSrcweir 			nMin = Min(nMin, nColWidth[i]);
741cdf0e10cSrcweir 
742cdf0e10cSrcweir 		sal_Bool bAutoWidth = aAutoWidthBox.IsChecked();
743cdf0e10cSrcweir 		if(!bAutoWidth)
744cdf0e10cSrcweir 		{
745cdf0e10cSrcweir 			pColMgr->SetAutoWidth(sal_False);
746cdf0e10cSrcweir 				// falls der Benutzer nicht die Gesamtbreite vergeben hat,
747cdf0e10cSrcweir 				// den fehlenden Betrag auf die letzte Spalte addieren.
748cdf0e10cSrcweir 			long nSum = 0;
749cdf0e10cSrcweir 			for(i = 0; i < nCols; ++i)
750cdf0e10cSrcweir 				nSum += nColWidth[i];
751cdf0e10cSrcweir 			nGutterWidth = 0;
752cdf0e10cSrcweir 			for(i = 0; i < nCols - 1; ++i)
753cdf0e10cSrcweir 				nGutterWidth += nColDist[i];
754cdf0e10cSrcweir 			nSum += nGutterWidth;
755cdf0e10cSrcweir 
756cdf0e10cSrcweir 			long nMaxW = pColMgr->GetActualSize();
757cdf0e10cSrcweir 
758cdf0e10cSrcweir 			if( nSum < nMaxW  )
759cdf0e10cSrcweir 				nColWidth[nCols - 1] += nMaxW - nSum;
760cdf0e10cSrcweir 
761cdf0e10cSrcweir             pColMgr->SetColWidth( 0, static_cast< sal_uInt16 >(nColWidth[0] + (sal_uInt16)nColDist[0]/2) );
762cdf0e10cSrcweir 			for( i = 1; i < nCols-1; ++i )
763cdf0e10cSrcweir 			{
764cdf0e10cSrcweir 				long nActDist = (nColDist[i] + nColDist[i - 1]) / 2;
765cdf0e10cSrcweir 				pColMgr->SetColWidth( i, (sal_uInt16)nColWidth[i] + (sal_uInt16)nActDist );
766cdf0e10cSrcweir 			}
767cdf0e10cSrcweir             pColMgr->SetColWidth( nCols-1, static_cast< sal_uInt16 >(nColWidth[nCols-1] + nColDist[nCols -2]/2) );
768cdf0e10cSrcweir 
769cdf0e10cSrcweir 		}
770cdf0e10cSrcweir 
771cdf0e10cSrcweir 			// keins ist ausgeschaltet
772cdf0e10cSrcweir         const sal_uInt16 nPos = aLineTypeDLB.GetSelectEntryPos();
773cdf0e10cSrcweir         sal_Bool bEnable = 0 != nPos;
774cdf0e10cSrcweir 		aLineHeightEdit.Enable( bEnable );
775cdf0e10cSrcweir 		aLineHeightLbl.Enable( bEnable );
776cdf0e10cSrcweir 		if( !bEnable )
777cdf0e10cSrcweir 			pColMgr->SetNoLine();
778cdf0e10cSrcweir 		else if( LISTBOX_ENTRY_NOTFOUND != nPos )
779cdf0e10cSrcweir 		{
780cdf0e10cSrcweir 			pColMgr->SetLineWidthAndColor(nLines[nPos - 1], Color(COL_BLACK) );
781cdf0e10cSrcweir 			pColMgr->SetAdjust( SwColLineAdj(
782cdf0e10cSrcweir 									aLinePosDLB.GetSelectEntryPos() + 1) );
783cdf0e10cSrcweir 			pColMgr->SetLineHeightPercent((short)aLineHeightEdit.GetValue());
784cdf0e10cSrcweir 			bEnable = pColMgr->GetLineHeightPercent() != 100;
785cdf0e10cSrcweir 		}
786cdf0e10cSrcweir 		aLinePosLbl.Enable( bEnable );
787cdf0e10cSrcweir 		aLinePosDLB.Enable( bEnable );
788cdf0e10cSrcweir 	}
789cdf0e10cSrcweir 	else
790cdf0e10cSrcweir 	{
791cdf0e10cSrcweir 		pColMgr->NoCols();
792cdf0e10cSrcweir         nCols = 0;
793cdf0e10cSrcweir 	}
794cdf0e10cSrcweir 
795cdf0e10cSrcweir 	//Maximalwerte setzen
796cdf0e10cSrcweir 	aCLNrEdt.SetMax(Max(1L,
797cdf0e10cSrcweir 		Min(long(nMaxCols), long( pColMgr->GetActualSize() / (nGutterWidth + MINLAY)) )));
798cdf0e10cSrcweir 	aCLNrEdt.SetLast(aCLNrEdt.GetMax());
799cdf0e10cSrcweir 	aCLNrEdt.Reformat();
800cdf0e10cSrcweir 
801cdf0e10cSrcweir 	//Beispielfenster anregen
802cdf0e10cSrcweir 	if(!bLockUpdate)
803cdf0e10cSrcweir 	{
804cdf0e10cSrcweir 		if(bFrm)
805cdf0e10cSrcweir 		{
806cdf0e10cSrcweir 			aFrmExampleWN.SetColumns( pColMgr->GetColumns() );
807cdf0e10cSrcweir 			aFrmExampleWN.Invalidate();
808cdf0e10cSrcweir 		}
809cdf0e10cSrcweir 		else
810cdf0e10cSrcweir 			aPgeExampleWN.Invalidate();
811cdf0e10cSrcweir 	}
812cdf0e10cSrcweir 
813cdf0e10cSrcweir 	return 0;
814cdf0e10cSrcweir }
815cdf0e10cSrcweir 
816cdf0e10cSrcweir /*------------------------------------------------------------------------
817cdf0e10cSrcweir  Beschreibung:	Initialisierung
818cdf0e10cSrcweir ------------------------------------------------------------------------*/
819cdf0e10cSrcweir 
820cdf0e10cSrcweir 
821cdf0e10cSrcweir 
Init()822cdf0e10cSrcweir void SwColumnPage::Init()
823cdf0e10cSrcweir {
824cdf0e10cSrcweir 	aCLNrEdt.SetValue(nCols);
825cdf0e10cSrcweir 
826cdf0e10cSrcweir     sal_Bool bAutoWidth = pColMgr->IsAutoWidth() || bHtmlMode;
827cdf0e10cSrcweir     aAutoWidthBox.Check( bAutoWidth );
828cdf0e10cSrcweir 
829cdf0e10cSrcweir     sal_Int32 nColumnWidthSum = 0;
830cdf0e10cSrcweir     // Setzen der Breiten
831cdf0e10cSrcweir     sal_uInt16 i;
832cdf0e10cSrcweir     for(i = 0; i < nCols; ++i)
833cdf0e10cSrcweir 	{
834cdf0e10cSrcweir 		nColWidth[i] = pColMgr->GetColWidth(i);
835cdf0e10cSrcweir         nColumnWidthSum += nColWidth[i];
836cdf0e10cSrcweir 		if(i < nCols - 1)
837cdf0e10cSrcweir 			nColDist[i] = pColMgr->GetGutterWidth(i);
838cdf0e10cSrcweir 	}
839cdf0e10cSrcweir 
840cdf0e10cSrcweir 	if( 1 < nCols )
841cdf0e10cSrcweir 	{
842cdf0e10cSrcweir         // #97495# make sure that the automatic column widht's are always equal
843cdf0e10cSrcweir         if(bAutoWidth)
844cdf0e10cSrcweir         {
845cdf0e10cSrcweir             nColumnWidthSum /= nCols;
846cdf0e10cSrcweir             for(i = 0; i < nCols; ++i)
847cdf0e10cSrcweir                 nColWidth[i] = nColumnWidthSum;
848cdf0e10cSrcweir         }
849cdf0e10cSrcweir         SwColLineAdj eAdj = pColMgr->GetAdjust();
850cdf0e10cSrcweir 		if( COLADJ_NONE == eAdj )		// der Dialog kennt kein NONE!
851cdf0e10cSrcweir 		{
852cdf0e10cSrcweir 			eAdj = COLADJ_TOP;
853cdf0e10cSrcweir 			//ohne Adjust auch kein Linientyp
854cdf0e10cSrcweir 			aLineTypeDLB.SelectEntryPos( 0 );
855cdf0e10cSrcweir 			aLineHeightEdit.SetValue( 100 );
856cdf0e10cSrcweir 		}
857cdf0e10cSrcweir 		else
858cdf0e10cSrcweir 		{
859cdf0e10cSrcweir 			aLineTypeDLB.SelectEntryPos( lcl_LineWidthToPos(( pColMgr->GetLineWidth() )) + 1);
860cdf0e10cSrcweir 			aLineHeightEdit.SetValue( pColMgr->GetLineHeightPercent() );
861cdf0e10cSrcweir 		}
862cdf0e10cSrcweir         aLinePosDLB.SelectEntryPos( static_cast< sal_uInt16 >(eAdj - 1) );
863cdf0e10cSrcweir 	}
864cdf0e10cSrcweir 	else
865cdf0e10cSrcweir 	{
866cdf0e10cSrcweir 		aLinePosDLB.SelectEntryPos( 0 );
867cdf0e10cSrcweir 		aLineTypeDLB.SelectEntryPos( 0 );
868cdf0e10cSrcweir 		aLineHeightEdit.SetValue( 100 );
869cdf0e10cSrcweir 	}
870cdf0e10cSrcweir 
871cdf0e10cSrcweir 	UpdateCols();
872cdf0e10cSrcweir 	Update();
873cdf0e10cSrcweir 
874cdf0e10cSrcweir 		// Maximale Spaltenzahl setzen
875cdf0e10cSrcweir 		// Werte kleiner als 1 sind nicht erlaubt
876cdf0e10cSrcweir 	aCLNrEdt.SetMax(Max(1L,
877cdf0e10cSrcweir 		Min(long(nMaxCols), long( pColMgr->GetActualSize() / nMinWidth) )));
878cdf0e10cSrcweir }
879cdf0e10cSrcweir 
880cdf0e10cSrcweir /*------------------------------------------------------------------------
881cdf0e10cSrcweir  Beschreibung:	Die Anzahl der Spalten hat sich veraendert -- hier werden
882cdf0e10cSrcweir 				die Controls fuer die Bearbeitung der Spalten entsprechend
883cdf0e10cSrcweir 				der Spaltenzahl en- oder disabled.
884cdf0e10cSrcweir 				Falls es mehr als nVisCols (= 3) Spalten gibt, werden
885cdf0e10cSrcweir 				alle Edit enabled und die Buttons fuer das Scrollen
886cdf0e10cSrcweir 				ebenfalls.
887cdf0e10cSrcweir 				Andernfalls werden die Edits jeweils fuer die entsprechenden
888cdf0e10cSrcweir 				Spaltenzahl enabled; eine Spalte kann nicht bearbeitet werden.
889cdf0e10cSrcweir ------------------------------------------------------------------------*/
890cdf0e10cSrcweir 
891cdf0e10cSrcweir 
892cdf0e10cSrcweir 
UpdateCols()893cdf0e10cSrcweir void SwColumnPage::UpdateCols()
894cdf0e10cSrcweir {
895cdf0e10cSrcweir 	sal_Bool bEnableBtns= sal_False;
896cdf0e10cSrcweir 	sal_Bool bEnable12	= sal_False;
897cdf0e10cSrcweir 	sal_Bool bEnable3	= sal_False;
898cdf0e10cSrcweir 	const sal_Bool bEdit = !aAutoWidthBox.IsChecked();
899cdf0e10cSrcweir 	if ( nCols > nVisCols )
900cdf0e10cSrcweir 	{
901cdf0e10cSrcweir 		bEnableBtns = sal_True && !bHtmlMode;
902cdf0e10cSrcweir 		bEnable12 = bEnable3 = bEdit;
903cdf0e10cSrcweir 	}
904cdf0e10cSrcweir 	else if( bEdit )
905cdf0e10cSrcweir 	{
906cdf0e10cSrcweir 		// hier gibt es absichtlich kaum noch breaks
907cdf0e10cSrcweir 		switch(nCols)
908cdf0e10cSrcweir 		{
909cdf0e10cSrcweir 			case 3: bEnable3 = sal_True;
910cdf0e10cSrcweir 			case 2: bEnable12= sal_True; break;
911cdf0e10cSrcweir 			default: /* do nothing */;
912cdf0e10cSrcweir 		}
913cdf0e10cSrcweir 	}
914cdf0e10cSrcweir 	aEd1.Enable( bEnable12 );
915cdf0e10cSrcweir 	aDistEd1.Enable(nCols > 1);
916cdf0e10cSrcweir 	aEd2.Enable( bEnable12 );
917cdf0e10cSrcweir 	aDistEd2.Enable(bEnable3);
918cdf0e10cSrcweir 	aEd3.Enable( bEnable3  );
919cdf0e10cSrcweir     aLbl1.Enable(bEnable12 );
920cdf0e10cSrcweir     aLbl2.Enable(bEnable12 );
921cdf0e10cSrcweir     aLbl3.Enable(bEnable3  );
922cdf0e10cSrcweir 	aBtnUp.Enable( bEnableBtns );
923cdf0e10cSrcweir 	aBtnDown.Enable( bEnableBtns );
924cdf0e10cSrcweir 
925cdf0e10cSrcweir 	const sal_Bool bEnable = nCols > 1;
926cdf0e10cSrcweir 	if( !bEnable )
927cdf0e10cSrcweir 	{
928cdf0e10cSrcweir 		aLinePosDLB.Enable( sal_False );
929cdf0e10cSrcweir 		aLinePosLbl.Enable( sal_False );
930cdf0e10cSrcweir 	}
931cdf0e10cSrcweir 	aLineHeightEdit.Enable( bEnable );
932cdf0e10cSrcweir 	aLineHeightLbl.Enable( bEnable );
933cdf0e10cSrcweir 	aLineTypeDLB.Enable( bEnable );
934cdf0e10cSrcweir 	aLineTypeLbl.Enable( bEnable );
935cdf0e10cSrcweir 	aAutoWidthBox.Enable( bEnable && !bHtmlMode );
936cdf0e10cSrcweir }
937cdf0e10cSrcweir 
SetLabels(sal_uInt16 nVis)938cdf0e10cSrcweir void SwColumnPage::SetLabels( sal_uInt16 nVis )
939cdf0e10cSrcweir {
940cdf0e10cSrcweir 	String sLbl( '~' );
941cdf0e10cSrcweir 
942cdf0e10cSrcweir 	String sLbl2( String::CreateFromInt32( nVis + 1 ));
943cdf0e10cSrcweir 	String tmp1(sLbl2);
944cdf0e10cSrcweir 	sLbl2.Insert(sLbl, sLbl2.Len() - 1);
945cdf0e10cSrcweir     aLbl1.SetText(sLbl2);
946cdf0e10cSrcweir 
947cdf0e10cSrcweir 	sLbl2 = String::CreateFromInt32( nVis + 2 );
948cdf0e10cSrcweir 	String tmp2(sLbl2);
949cdf0e10cSrcweir 	sLbl2.Insert(sLbl, sLbl2.Len() - 1);
950cdf0e10cSrcweir     aLbl2.SetText(sLbl2);
951cdf0e10cSrcweir 
952cdf0e10cSrcweir 	sLbl2 = String::CreateFromInt32( nVis + 3 );
953cdf0e10cSrcweir 	String tmp3(sLbl2);
954cdf0e10cSrcweir 	sLbl2.Insert(sLbl, sLbl2.Len() - 1);
955cdf0e10cSrcweir     aLbl3.SetText(sLbl2);
956cdf0e10cSrcweir 	String sColumnWidth = SW_RESSTR( STR_ACCESS_COLUMN_WIDTH ) ;
957cdf0e10cSrcweir 	sColumnWidth.SearchAndReplaceAscii("%1", tmp1);
958cdf0e10cSrcweir 	aEd1.SetAccessibleName(sColumnWidth);
959cdf0e10cSrcweir 
960cdf0e10cSrcweir 	sColumnWidth = SW_RESSTR( STR_ACCESS_COLUMN_WIDTH ) ;
961cdf0e10cSrcweir 	sColumnWidth.SearchAndReplaceAscii("%1", tmp2);
962cdf0e10cSrcweir 	aEd2.SetAccessibleName(sColumnWidth);
963cdf0e10cSrcweir 
964cdf0e10cSrcweir 	sColumnWidth = SW_RESSTR( STR_ACCESS_COLUMN_WIDTH ) ;
965cdf0e10cSrcweir 	sColumnWidth.SearchAndReplaceAscii("%1", tmp3);
966cdf0e10cSrcweir 	aEd3.SetAccessibleName(sColumnWidth);
967cdf0e10cSrcweir 
968cdf0e10cSrcweir 	String sDist = SW_RESSTR( STR_ACCESS_PAGESETUP_SPACING ) ;
969cdf0e10cSrcweir 	String sDist1 = sDist;
970cdf0e10cSrcweir 	sDist1.SearchAndReplaceAscii("%1", tmp1);
971cdf0e10cSrcweir 	sDist1.SearchAndReplaceAscii("%2", tmp2);
972cdf0e10cSrcweir 	aDistEd1.SetAccessibleName(sDist1);
973cdf0e10cSrcweir 
974cdf0e10cSrcweir 	String sDist2 = sDist;
975cdf0e10cSrcweir 	sDist2.SearchAndReplaceAscii("%1", tmp2);
976cdf0e10cSrcweir 	sDist2.SearchAndReplaceAscii("%2", tmp3);
977cdf0e10cSrcweir 	aDistEd2.SetAccessibleName(sDist2);
978cdf0e10cSrcweir }
979cdf0e10cSrcweir 
980cdf0e10cSrcweir /*------------------------------------------------------------------------
981cdf0e10cSrcweir  Beschreibung:	Handler, der bei einer Veraenderung der Spaltenzahl
982cdf0e10cSrcweir 				gerufen wird.
983cdf0e10cSrcweir 				Eine Aenderung der Spaltenzahl ueberschreibt eventuelle
984cdf0e10cSrcweir 				Breiteneinstellungen des Benutzers; alle Spalten sind
985cdf0e10cSrcweir 				gleich breit.
986cdf0e10cSrcweir ------------------------------------------------------------------------*/
987cdf0e10cSrcweir 
IMPL_LINK(SwColumnPage,ColModify,NumericField *,pNF)988cdf0e10cSrcweir IMPL_LINK( SwColumnPage, ColModify, NumericField *, pNF )
989cdf0e10cSrcweir {
990cdf0e10cSrcweir     nCols = (sal_uInt16)aCLNrEdt.GetValue();
991cdf0e10cSrcweir     //#107890# the handler is also called from LoseFocus()
992cdf0e10cSrcweir     //then no change has been made and thus no action should be taken
993cdf0e10cSrcweir 	// #i17816# changing the displayed types within the ValueSet
994cdf0e10cSrcweir 	//from two columns to two columns with different settings doesn't invalidate the
995cdf0e10cSrcweir 	// example windows in ::ColModify()
996*ca62e2c2SSteve Yin // the pColMgr->GetCount()'s return is some how bugged,
997*ca62e2c2SSteve Yin // it will return 0 when actual count is 1, so fix it.
998*ca62e2c2SSteve Yin     //if(!pNF ||(pColMgr->GetCount() != nCols))
999*ca62e2c2SSteve Yin 	int nTemp = pColMgr->GetCount();
1000*ca62e2c2SSteve Yin 	if(nTemp == 0) nTemp = 1;
1001*ca62e2c2SSteve Yin     if( nTemp != nCols )
1002cdf0e10cSrcweir     {
1003cdf0e10cSrcweir         if(pNF)
1004cdf0e10cSrcweir             aDefaultVS.SetNoSelection();
1005cdf0e10cSrcweir         long nDist = static_cast< long >(aDistEd1.DenormalizePercent(aDistEd1.GetValue(FUNIT_TWIP)));
1006cdf0e10cSrcweir         pColMgr->SetCount(nCols, (sal_uInt16)nDist);
1007cdf0e10cSrcweir         for(sal_uInt16 i = 0; i < nCols; i++)
1008cdf0e10cSrcweir             nColDist[i] = nDist;
1009cdf0e10cSrcweir         nFirstVis = 0;
1010cdf0e10cSrcweir         SetLabels( nFirstVis );
1011cdf0e10cSrcweir         UpdateCols();
1012cdf0e10cSrcweir         ResetColWidth();
1013cdf0e10cSrcweir         Update();
1014cdf0e10cSrcweir     }
1015cdf0e10cSrcweir 
1016cdf0e10cSrcweir 	return 0;
1017cdf0e10cSrcweir }
1018cdf0e10cSrcweir 
1019cdf0e10cSrcweir /*------------------------------------------------------------------------
1020cdf0e10cSrcweir  Beschreibung:	Modify- Handler fuer eine Aenderung der Spaltenbreite
1021cdf0e10cSrcweir 				oder des Spaltenabstandes.
1022cdf0e10cSrcweir 				Diese Aenderungen wirken sich erst zeitversetzt aus.
1023cdf0e10cSrcweir 				Durch eine Aenderung der Spaltenbreite wird die automatische
1024cdf0e10cSrcweir 				Berechnung der Spaltenbreite ausser Kraft gesetzt; erst
1025cdf0e10cSrcweir 				eine Aenderung der Spaltenzahl kehrt wieder zu diesem
1026cdf0e10cSrcweir 				Default zurueck.
1027cdf0e10cSrcweir ------------------------------------------------------------------------*/
1028cdf0e10cSrcweir 
1029cdf0e10cSrcweir 
1030cdf0e10cSrcweir 
IMPL_LINK(SwColumnPage,GapModify,PercentField *,pFld)1031cdf0e10cSrcweir IMPL_LINK( SwColumnPage, GapModify, PercentField *, pFld )
1032cdf0e10cSrcweir {
1033cdf0e10cSrcweir     long nActValue = static_cast< long >(pFld->DenormalizePercent(pFld->GetValue(FUNIT_TWIP)));
1034cdf0e10cSrcweir 	if(nCols < 2)
1035cdf0e10cSrcweir 		return 0;
1036cdf0e10cSrcweir 	if(aAutoWidthBox.IsChecked())
1037cdf0e10cSrcweir 	{
1038cdf0e10cSrcweir 		sal_uInt16 nMaxGap = pColMgr->GetActualSize() - nCols * MINLAY;
1039cdf0e10cSrcweir 		DBG_ASSERT(nCols, "Abstand kann nicht ohne Spalten eingestellt werden");
1040cdf0e10cSrcweir 		nMaxGap /= nCols - 1;
1041cdf0e10cSrcweir 		if(nActValue > nMaxGap)
1042cdf0e10cSrcweir 		{
1043cdf0e10cSrcweir 			nActValue = nMaxGap;
1044cdf0e10cSrcweir             aDistEd1.SetPrcntValue(aDistEd1.NormalizePercent(nMaxGap), FUNIT_TWIP);
1045cdf0e10cSrcweir 		}
1046cdf0e10cSrcweir 		pColMgr->SetGutterWidth((sal_uInt16)nActValue);
1047cdf0e10cSrcweir 		for(sal_uInt16 i = 0; i < nCols; i++)
1048cdf0e10cSrcweir 			nColDist[i] = nActValue;
1049cdf0e10cSrcweir 
1050cdf0e10cSrcweir 		ResetColWidth();
1051cdf0e10cSrcweir 		UpdateCols();
1052cdf0e10cSrcweir 	}
1053cdf0e10cSrcweir 	else
1054cdf0e10cSrcweir 
1055cdf0e10cSrcweir 	{
1056cdf0e10cSrcweir 		sal_uInt16 nOffset = 0;
1057cdf0e10cSrcweir 		if(pFld == &aDistEd2)
1058cdf0e10cSrcweir 		{
1059cdf0e10cSrcweir 			nOffset = 1;
1060cdf0e10cSrcweir 		}
1061cdf0e10cSrcweir 		long nDiff = nActValue - nColDist[nFirstVis + nOffset];
1062cdf0e10cSrcweir 		if(nDiff)
1063cdf0e10cSrcweir 		{
1064cdf0e10cSrcweir 			long nLeft = nColWidth[nFirstVis + nOffset];
1065cdf0e10cSrcweir 			long nRight = nColWidth[nFirstVis + nOffset + 1];
1066cdf0e10cSrcweir 			if(nLeft + nRight + 2 * MINLAY < nDiff)
1067cdf0e10cSrcweir 				nDiff = nLeft + nRight - 2 * MINLAY;
1068cdf0e10cSrcweir 			if(nDiff < nRight - MINLAY)
1069cdf0e10cSrcweir 			{
1070cdf0e10cSrcweir 				nRight -= nDiff;
1071cdf0e10cSrcweir 			}
1072cdf0e10cSrcweir 			else
1073cdf0e10cSrcweir 			{
1074cdf0e10cSrcweir 				long nTemp = nDiff - nRight + MINLAY;
1075cdf0e10cSrcweir 				nRight = MINLAY;
1076cdf0e10cSrcweir 				if(nLeft > nTemp - MINLAY)
1077cdf0e10cSrcweir 				{
1078cdf0e10cSrcweir 					nLeft -= nTemp;
1079cdf0e10cSrcweir 					nTemp = 0;
1080cdf0e10cSrcweir 				}
1081cdf0e10cSrcweir 				else
1082cdf0e10cSrcweir 				{
1083cdf0e10cSrcweir 					nTemp -= nLeft + MINLAY;
1084cdf0e10cSrcweir 					nLeft = MINLAY;
1085cdf0e10cSrcweir 				}
1086cdf0e10cSrcweir 				nDiff = nTemp;
1087cdf0e10cSrcweir 			}
1088cdf0e10cSrcweir 			nColWidth[nFirstVis + nOffset] = nLeft;
1089cdf0e10cSrcweir 			nColWidth[nFirstVis + nOffset + 1] = nRight;
1090cdf0e10cSrcweir 			nColDist[nFirstVis + nOffset] += nDiff;
1091cdf0e10cSrcweir 
1092cdf0e10cSrcweir 			pColMgr->SetColWidth( nFirstVis + nOffset, sal_uInt16(nLeft) );
1093cdf0e10cSrcweir 			pColMgr->SetColWidth( nFirstVis + nOffset + 1, sal_uInt16(nRight) );
1094cdf0e10cSrcweir 			pColMgr->SetGutterWidth( sal_uInt16(nColDist[nFirstVis + nOffset]), nFirstVis + nOffset );
1095cdf0e10cSrcweir 		}
1096cdf0e10cSrcweir 
1097cdf0e10cSrcweir 	}
1098cdf0e10cSrcweir 	Update();
1099cdf0e10cSrcweir 	return 0;
1100cdf0e10cSrcweir }
1101cdf0e10cSrcweir 
1102cdf0e10cSrcweir /*------------------------------------------------------------------------
1103cdf0e10cSrcweir  Beschreibung:
1104cdf0e10cSrcweir ------------------------------------------------------------------------*/
1105cdf0e10cSrcweir 
1106cdf0e10cSrcweir 
1107cdf0e10cSrcweir 
IMPL_LINK(SwColumnPage,EdModify,PercentField *,pField)1108cdf0e10cSrcweir IMPL_LINK( SwColumnPage, EdModify, PercentField *, pField )
1109cdf0e10cSrcweir {
1110cdf0e10cSrcweir 	pModifiedField = pField;
1111cdf0e10cSrcweir 	Timeout(0);
1112cdf0e10cSrcweir 	return 0;
1113cdf0e10cSrcweir }
1114cdf0e10cSrcweir /*------------------------------------------------------------------------
1115cdf0e10cSrcweir  Beschreibung:	Handler hinter der Checkbox fuer automatische Breite.
1116cdf0e10cSrcweir 				Ist die Box gecheckt, koennen keine expliziten Werte
1117cdf0e10cSrcweir 				fuer die Spaltenbreite eingegeben werden.
1118cdf0e10cSrcweir ------------------------------------------------------------------------*/
1119cdf0e10cSrcweir 
1120cdf0e10cSrcweir 
1121cdf0e10cSrcweir 
IMPL_LINK(SwColumnPage,AutoWidthHdl,CheckBox *,pBox)1122cdf0e10cSrcweir IMPL_LINK( SwColumnPage, AutoWidthHdl, CheckBox *, pBox )
1123cdf0e10cSrcweir {
1124cdf0e10cSrcweir     long nDist = static_cast< long >(aDistEd1.DenormalizePercent(aDistEd1.GetValue(FUNIT_TWIP)));
1125cdf0e10cSrcweir 	pColMgr->SetCount(nCols, (sal_uInt16)nDist);
1126cdf0e10cSrcweir 	for(sal_uInt16 i = 0; i < nCols; i++)
1127cdf0e10cSrcweir 		nColDist[i] = nDist;
1128cdf0e10cSrcweir 	if(pBox->IsChecked())
1129cdf0e10cSrcweir 	{
1130cdf0e10cSrcweir 		pColMgr->SetGutterWidth(sal_uInt16(nDist));
1131cdf0e10cSrcweir 		ResetColWidth();
1132cdf0e10cSrcweir 	}
1133cdf0e10cSrcweir 	pColMgr->SetAutoWidth(pBox->IsChecked(), sal_uInt16(nDist));
1134cdf0e10cSrcweir 	UpdateCols();
1135cdf0e10cSrcweir 	Update();
1136cdf0e10cSrcweir 	return 0;
1137cdf0e10cSrcweir }
1138cdf0e10cSrcweir 
1139cdf0e10cSrcweir /*------------------------------------------------------------------------
1140cdf0e10cSrcweir  Beschreibung:	Raufscrollen der Inhalte der Edits.
1141cdf0e10cSrcweir ------------------------------------------------------------------------*/
1142cdf0e10cSrcweir 
IMPL_LINK(SwColumnPage,Up,Button *,EMPTYARG)1143cdf0e10cSrcweir IMPL_LINK( SwColumnPage, Up, Button *, EMPTYARG )
1144cdf0e10cSrcweir {
1145cdf0e10cSrcweir 	if( nFirstVis )
1146cdf0e10cSrcweir 	{
1147cdf0e10cSrcweir 		--nFirstVis;
1148cdf0e10cSrcweir 		SetLabels( nFirstVis );
1149cdf0e10cSrcweir 		Update();
1150cdf0e10cSrcweir 	}
1151cdf0e10cSrcweir 	return 0;
1152cdf0e10cSrcweir }
1153cdf0e10cSrcweir /*------------------------------------------------------------------------
1154cdf0e10cSrcweir  Beschreibung:	Runterscrollen der Inhalte der Edits.
1155cdf0e10cSrcweir ------------------------------------------------------------------------*/
1156cdf0e10cSrcweir 
IMPL_LINK(SwColumnPage,Down,Button *,EMPTYARG)1157cdf0e10cSrcweir IMPL_LINK( SwColumnPage, Down, Button *, EMPTYARG )
1158cdf0e10cSrcweir {
1159cdf0e10cSrcweir 	if( nFirstVis + nVisCols < nCols )
1160cdf0e10cSrcweir 	{
1161cdf0e10cSrcweir 		++nFirstVis;
1162cdf0e10cSrcweir 		SetLabels( nFirstVis );
1163cdf0e10cSrcweir 		Update();
1164cdf0e10cSrcweir 	}
1165cdf0e10cSrcweir 	return 0;
1166cdf0e10cSrcweir }
1167cdf0e10cSrcweir /*------------------------------------------------------------------------
1168cdf0e10cSrcweir  Beschreibung:	Relikt aus alten Zeiten - jetzt direkt ohne time
1169cdf0e10cSrcweir  * 				Timer- Handler; angetriggert durch eine Aenderung der
1170cdf0e10cSrcweir 				Spaltenbreite oder des Spaltenabstandes.
1171cdf0e10cSrcweir ------------------------------------------------------------------------*/
1172cdf0e10cSrcweir 
IMPL_LINK(SwColumnPage,Timeout,Timer *,EMPTYARG)1173cdf0e10cSrcweir IMPL_LINK( SwColumnPage, Timeout, Timer *, EMPTYARG )
1174cdf0e10cSrcweir {
1175cdf0e10cSrcweir 	DBG_PROFSTART(columnhdl) ;
1176cdf0e10cSrcweir 	if(pModifiedField)
1177cdf0e10cSrcweir 	{
1178cdf0e10cSrcweir 			// Finden der veraenderten Spalte
1179cdf0e10cSrcweir 		sal_uInt16 nChanged = nFirstVis;
1180cdf0e10cSrcweir 		if(pModifiedField == &aEd2)
1181cdf0e10cSrcweir 			++nChanged;
1182cdf0e10cSrcweir 		else if(pModifiedField == &aEd3)
1183cdf0e10cSrcweir 			nChanged += 2;
1184cdf0e10cSrcweir 		/*else if(pModifiedField == &aEd4)
1185cdf0e10cSrcweir 			nChanged += 3;*/
1186cdf0e10cSrcweir 
1187cdf0e10cSrcweir 		long nNewWidth = (sal_uInt16)
1188cdf0e10cSrcweir 			pModifiedField->DenormalizePercent(pModifiedField->GetValue(FUNIT_TWIP));
1189cdf0e10cSrcweir 		long nDiff = nNewWidth - nColWidth[nChanged];
1190cdf0e10cSrcweir 
1191cdf0e10cSrcweir 		// wenn es die letzte Spalte ist
1192cdf0e10cSrcweir 		if(nChanged == nCols - 1)
1193cdf0e10cSrcweir 		{
1194cdf0e10cSrcweir 			nColWidth[0] -= nDiff;
1195cdf0e10cSrcweir 			if(nColWidth[0] < (long)nMinWidth)
1196cdf0e10cSrcweir 			{
1197cdf0e10cSrcweir 				nNewWidth -= nMinWidth - nColWidth[0];
1198cdf0e10cSrcweir 				nColWidth[0] = nMinWidth;
1199cdf0e10cSrcweir 			}
1200cdf0e10cSrcweir 
1201cdf0e10cSrcweir 		}
1202cdf0e10cSrcweir 		else if(nDiff)
1203cdf0e10cSrcweir 		{
1204cdf0e10cSrcweir 			nColWidth[nChanged + 1] -= nDiff;
1205cdf0e10cSrcweir 			if(nColWidth[nChanged + 1] < (long) nMinWidth)
1206cdf0e10cSrcweir 			{
1207cdf0e10cSrcweir 				nNewWidth -= nMinWidth - nColWidth[nChanged + 1];
1208cdf0e10cSrcweir 				nColWidth[nChanged + 1] = nMinWidth;
1209cdf0e10cSrcweir 			}
1210cdf0e10cSrcweir 		}
1211cdf0e10cSrcweir 		nColWidth[nChanged] = nNewWidth;
1212cdf0e10cSrcweir 		pModifiedField = 0;
1213cdf0e10cSrcweir 	}
1214cdf0e10cSrcweir 	Update();
1215cdf0e10cSrcweir 	DBG_PROFSTOP(columnhdl) ;
1216cdf0e10cSrcweir 	return 0;
1217cdf0e10cSrcweir }
1218cdf0e10cSrcweir /*------------------------------------------------------------------------
1219cdf0e10cSrcweir  Beschreibung:	Aktualisierung der Anzeige
1220cdf0e10cSrcweir ------------------------------------------------------------------------*/
1221cdf0e10cSrcweir 
1222cdf0e10cSrcweir 
1223cdf0e10cSrcweir 
Update()1224cdf0e10cSrcweir void SwColumnPage::Update()
1225cdf0e10cSrcweir {
1226cdf0e10cSrcweir 	aBalanceColsCB.Enable(nCols > 1);
1227cdf0e10cSrcweir 	if(nCols >= 2)
1228cdf0e10cSrcweir 	{
1229cdf0e10cSrcweir         aEd1.SetPrcntValue(aEd1.NormalizePercent(nColWidth[nFirstVis]), FUNIT_TWIP);
1230cdf0e10cSrcweir         aDistEd1.SetPrcntValue(aDistEd1.NormalizePercent(nColDist[nFirstVis]), FUNIT_TWIP);
1231cdf0e10cSrcweir         aEd2.SetPrcntValue(aEd2.NormalizePercent(nColWidth[nFirstVis + 1]), FUNIT_TWIP);
1232cdf0e10cSrcweir 		if(nCols >= 3)
1233cdf0e10cSrcweir 		{
1234cdf0e10cSrcweir             aDistEd2.SetPrcntValue(aDistEd2.NormalizePercent(nColDist[nFirstVis + 1]), FUNIT_TWIP);
1235cdf0e10cSrcweir             aEd3.SetPrcntValue(aEd3.NormalizePercent(nColWidth[nFirstVis + 2]), FUNIT_TWIP);
1236cdf0e10cSrcweir 		}
1237cdf0e10cSrcweir 		else
1238cdf0e10cSrcweir 		{
1239cdf0e10cSrcweir 			aEd3.SetText(aEmptyStr);
1240cdf0e10cSrcweir 			aDistEd2.SetText(aEmptyStr);
1241cdf0e10cSrcweir 		}
1242cdf0e10cSrcweir 	}
1243cdf0e10cSrcweir 	else
1244cdf0e10cSrcweir 	{
1245cdf0e10cSrcweir 		aEd1.SetText(aEmptyStr);
1246cdf0e10cSrcweir 		aEd2.SetText(aEmptyStr);
1247cdf0e10cSrcweir 		aEd3.SetText(aEmptyStr);
1248cdf0e10cSrcweir 		aDistEd1.SetText(aEmptyStr);
1249cdf0e10cSrcweir 		aDistEd2.SetText(aEmptyStr);
1250cdf0e10cSrcweir 	}
1251cdf0e10cSrcweir 	UpdateColMgr(0);
1252cdf0e10cSrcweir }
1253cdf0e10cSrcweir 
1254cdf0e10cSrcweir /*--------------------------------------------------------------------
1255cdf0e10cSrcweir 	Beschreibung:	Update Bsp
1256cdf0e10cSrcweir  --------------------------------------------------------------------*/
1257cdf0e10cSrcweir 
1258cdf0e10cSrcweir 
1259cdf0e10cSrcweir 
ActivatePage(const SfxItemSet & rSet)1260cdf0e10cSrcweir void SwColumnPage::ActivatePage(const SfxItemSet& rSet)
1261cdf0e10cSrcweir {
1262cdf0e10cSrcweir 	if(!bFrm)
1263cdf0e10cSrcweir 	{
1264cdf0e10cSrcweir 		if( SFX_ITEM_SET == rSet.GetItemState( SID_ATTR_PAGE_SIZE ))
1265cdf0e10cSrcweir 		{
1266cdf0e10cSrcweir 			const SvxSizeItem& rSize = (const SvxSizeItem&)rSet.Get(
1267cdf0e10cSrcweir 												SID_ATTR_PAGE_SIZE);
1268cdf0e10cSrcweir 			const SvxLRSpaceItem& rLRSpace = (const SvxLRSpaceItem&)rSet.Get(
1269cdf0e10cSrcweir 																RES_LR_SPACE );
1270cdf0e10cSrcweir 			const SvxBoxItem& rBox = (const SvxBoxItem&) rSet.Get(RES_BOX);
1271cdf0e10cSrcweir             sal_uInt16 nActWidth = static_cast< sal_uInt16 >(rSize.GetSize().Width()
1272cdf0e10cSrcweir                             - rLRSpace.GetLeft() - rLRSpace.GetRight() - rBox.GetDistance());
1273cdf0e10cSrcweir 
1274cdf0e10cSrcweir 			if( pColMgr->GetActualSize() != nActWidth)
1275cdf0e10cSrcweir 			{
1276cdf0e10cSrcweir 				pColMgr->SetActualWidth(nActWidth);
1277cdf0e10cSrcweir 				ColModify( 0 );
1278cdf0e10cSrcweir 				UpdateColMgr( 0 );
1279cdf0e10cSrcweir 			}
1280cdf0e10cSrcweir 		}
1281cdf0e10cSrcweir 		aFrmExampleWN.Hide();
1282cdf0e10cSrcweir 		aPgeExampleWN.UpdateExample( rSet, pColMgr );
1283cdf0e10cSrcweir 		aPgeExampleWN.Show();
1284cdf0e10cSrcweir 
1285cdf0e10cSrcweir 	}
1286cdf0e10cSrcweir 	else
1287cdf0e10cSrcweir 	{
1288cdf0e10cSrcweir 		aPgeExampleWN.Hide();
1289cdf0e10cSrcweir 		aFrmExampleWN.Show();
1290cdf0e10cSrcweir 
1291cdf0e10cSrcweir 		// Size
1292cdf0e10cSrcweir         const SwFmtFrmSize& rSize = (const SwFmtFrmSize&)rSet.Get(RES_FRM_SIZE);
1293cdf0e10cSrcweir         const SvxBoxItem& rBox = (const SvxBoxItem&) rSet.Get(RES_BOX);
1294cdf0e10cSrcweir 
1295cdf0e10cSrcweir         long nDistance = rBox.GetDistance();
1296cdf0e10cSrcweir 		const sal_uInt16 nTotalWish = bFormat ? FRAME_FORMAT_WIDTH : sal_uInt16(rSize.GetWidth() - 2 * nDistance);
1297cdf0e10cSrcweir 
1298cdf0e10cSrcweir 		// Maximalwerte der Spaltenbreiten setzen
1299cdf0e10cSrcweir 		SetPageWidth(nTotalWish);
1300cdf0e10cSrcweir 
1301cdf0e10cSrcweir 		if(pColMgr->GetActualSize() != nTotalWish)
1302cdf0e10cSrcweir 		{
1303cdf0e10cSrcweir 			pColMgr->SetActualWidth(nTotalWish);
1304cdf0e10cSrcweir 			Init();
1305cdf0e10cSrcweir 		}
1306cdf0e10cSrcweir 		sal_Bool bPercent;
1307cdf0e10cSrcweir 		// im Rahmenformat nur relative Angaben
1308cdf0e10cSrcweir 		if ( bFormat || (rSize.GetWidthPercent() && rSize.GetWidthPercent() != 0xff) )
1309cdf0e10cSrcweir 		{
1310cdf0e10cSrcweir 			// Wert fuer 100% setzen
1311cdf0e10cSrcweir 			aEd1.SetRefValue(nTotalWish);
1312cdf0e10cSrcweir 			aEd2.SetRefValue(nTotalWish);
1313cdf0e10cSrcweir 			aEd3.SetRefValue(nTotalWish);
1314cdf0e10cSrcweir 			aDistEd1.SetRefValue(nTotalWish);
1315cdf0e10cSrcweir 			aDistEd2.SetRefValue(nTotalWish);
1316cdf0e10cSrcweir 
1317cdf0e10cSrcweir 			// Auf %-Darstellung umschalten
1318cdf0e10cSrcweir 			bPercent = sal_True;
1319cdf0e10cSrcweir 		}
1320cdf0e10cSrcweir 		else
1321cdf0e10cSrcweir 			bPercent = sal_False;
1322cdf0e10cSrcweir 
1323cdf0e10cSrcweir 		aEd1.ShowPercent(bPercent);
1324cdf0e10cSrcweir 		aEd2.ShowPercent(bPercent);
1325cdf0e10cSrcweir 		aEd3.ShowPercent(bPercent);
1326cdf0e10cSrcweir 		aDistEd1.ShowPercent(bPercent);
1327cdf0e10cSrcweir 		aDistEd2.ShowPercent(bPercent);
1328cdf0e10cSrcweir 		aDistEd1.MetricField::SetMin(0);
1329cdf0e10cSrcweir 		aDistEd2.MetricField::SetMin(0);
1330cdf0e10cSrcweir 	}
1331cdf0e10cSrcweir 	Update();
1332cdf0e10cSrcweir }
1333cdf0e10cSrcweir 
1334cdf0e10cSrcweir /*--------------------------------------------------------------------
1335cdf0e10cSrcweir 	Beschreibung:
1336cdf0e10cSrcweir  --------------------------------------------------------------------*/
1337cdf0e10cSrcweir 
1338cdf0e10cSrcweir 
1339cdf0e10cSrcweir 
DeactivatePage(SfxItemSet * _pSet)1340cdf0e10cSrcweir int SwColumnPage::DeactivatePage(SfxItemSet *_pSet)
1341cdf0e10cSrcweir {
1342cdf0e10cSrcweir     if(_pSet)
1343cdf0e10cSrcweir         FillItemSet(*_pSet);
1344cdf0e10cSrcweir 
1345cdf0e10cSrcweir 	return sal_True;
1346cdf0e10cSrcweir }
1347cdf0e10cSrcweir 
1348cdf0e10cSrcweir 
1349cdf0e10cSrcweir 
GetRanges()1350cdf0e10cSrcweir sal_uInt16* SwColumnPage::GetRanges()
1351cdf0e10cSrcweir {
1352cdf0e10cSrcweir 	return aPageRg;
1353cdf0e10cSrcweir }
1354cdf0e10cSrcweir 
1355cdf0e10cSrcweir /*--------------------------------------------------------------------
1356cdf0e10cSrcweir 	Beschreibung:
1357cdf0e10cSrcweir  --------------------------------------------------------------------*/
1358cdf0e10cSrcweir 
1359cdf0e10cSrcweir 
1360cdf0e10cSrcweir 
IMPL_LINK(SwColumnPage,SetDefaultsHdl,ValueSet *,pVS)1361cdf0e10cSrcweir IMPL_LINK( SwColumnPage, SetDefaultsHdl, ValueSet *, pVS )
1362cdf0e10cSrcweir {
1363cdf0e10cSrcweir 	sal_uInt16 nItem = pVS->GetSelectItemId();
1364cdf0e10cSrcweir 	if( nItem < 4 )
1365cdf0e10cSrcweir 	{
1366cdf0e10cSrcweir 		aCLNrEdt.SetValue( nItem );
1367cdf0e10cSrcweir 		aAutoWidthBox.Check();
1368cdf0e10cSrcweir         aDistEd1.SetPrcntValue(0);
1369cdf0e10cSrcweir 		ColModify(0);
1370cdf0e10cSrcweir 	}
1371cdf0e10cSrcweir 	else
1372cdf0e10cSrcweir 	{
1373cdf0e10cSrcweir 		bLockUpdate = sal_True;
1374cdf0e10cSrcweir 		aCLNrEdt.SetValue( 2 );
1375cdf0e10cSrcweir 		aAutoWidthBox.Check(sal_False);
1376cdf0e10cSrcweir         aDistEd1.SetPrcntValue(0);
1377cdf0e10cSrcweir 		ColModify(0);
1378cdf0e10cSrcweir 		// jetzt noch das Breitenverhaeltnisse auf 2 : 1 bzw. 1 : 2 stellen
1379cdf0e10cSrcweir 		sal_uInt16 nSmall = pColMgr->GetActualSize()  / 3;
1380cdf0e10cSrcweir 		if(nItem == 4)
1381cdf0e10cSrcweir 		{
1382cdf0e10cSrcweir             aEd2.SetPrcntValue(aEd2.NormalizePercent(long(nSmall)), FUNIT_TWIP);
1383cdf0e10cSrcweir 			pModifiedField = &aEd2;
1384cdf0e10cSrcweir 		}
1385cdf0e10cSrcweir 		else
1386cdf0e10cSrcweir 		{
1387cdf0e10cSrcweir             aEd1.SetPrcntValue(aEd1.NormalizePercent(long(nSmall)), FUNIT_TWIP);
1388cdf0e10cSrcweir 			pModifiedField = &aEd1;
1389cdf0e10cSrcweir 		}
1390cdf0e10cSrcweir 		bLockUpdate = sal_False;
1391cdf0e10cSrcweir 		Timeout(0);
1392cdf0e10cSrcweir 
1393cdf0e10cSrcweir 	}
1394cdf0e10cSrcweir 	return 0;
1395cdf0e10cSrcweir }
1396cdf0e10cSrcweir 
1397cdf0e10cSrcweir /*-----------------25.10.96 11.41-------------------
1398cdf0e10cSrcweir 
1399cdf0e10cSrcweir --------------------------------------------------*/
1400cdf0e10cSrcweir 
1401cdf0e10cSrcweir 
SetFrmMode(sal_Bool bMod)1402cdf0e10cSrcweir void SwColumnPage::SetFrmMode(sal_Bool bMod)
1403cdf0e10cSrcweir {
1404cdf0e10cSrcweir 	bFrm = bMod;
1405cdf0e10cSrcweir }
1406cdf0e10cSrcweir /* -----------------------------2002/06/19 13:08------------------------------
1407cdf0e10cSrcweir 
1408cdf0e10cSrcweir  ---------------------------------------------------------------------------*/
SetInSection(sal_Bool bSet)1409cdf0e10cSrcweir void SwColumnPage::SetInSection(sal_Bool bSet)
1410cdf0e10cSrcweir {
1411cdf0e10cSrcweir     if(!SW_MOD()->GetCTLOptions().IsCTLFontEnabled())
1412cdf0e10cSrcweir         return;
1413cdf0e10cSrcweir 
1414cdf0e10cSrcweir     aVertFL.Show(bSet);
1415cdf0e10cSrcweir     aPropertiesFL.Show(bSet);
1416cdf0e10cSrcweir     aTextDirectionFT.Show(bSet);
1417cdf0e10cSrcweir     aTextDirectionLB.Show(bSet);
1418cdf0e10cSrcweir     if(bSet)
1419cdf0e10cSrcweir     {
1420cdf0e10cSrcweir         //resize line type FixedLine
1421cdf0e10cSrcweir         Point aLtPos = aFLLineType.GetPosPixel();
1422cdf0e10cSrcweir         Point aPropPos = aPropertiesFL.GetPosPixel();
1423cdf0e10cSrcweir         Size aSz = aFLLineType.GetSizePixel();
1424cdf0e10cSrcweir         aSz.Width() = aPropPos.X() - aLtPos.X() - LogicToPixel(Size(8, 8), MAP_APPFONT).Width();
1425cdf0e10cSrcweir         aFLLineType.SetSizePixel(aSz);
1426cdf0e10cSrcweir     }
1427cdf0e10cSrcweir     else
1428cdf0e10cSrcweir     {
1429cdf0e10cSrcweir         Size aSz = aFLLineType.GetSizePixel();
1430cdf0e10cSrcweir         aSz.Width() = LogicToPixel(Size(248, 248), MAP_APPFONT).Width();
1431cdf0e10cSrcweir         aFLLineType.SetSizePixel(aSz);
1432cdf0e10cSrcweir     }
1433cdf0e10cSrcweir }
1434cdf0e10cSrcweir 
1435cdf0e10cSrcweir /*-----------------07.03.97 08.33-------------------
1436cdf0e10cSrcweir 
1437cdf0e10cSrcweir --------------------------------------------------*/
1438cdf0e10cSrcweir 
1439cdf0e10cSrcweir 
UserDraw(const UserDrawEvent & rUDEvt)1440cdf0e10cSrcweir void ColumnValueSet::UserDraw( const UserDrawEvent& rUDEvt )
1441cdf0e10cSrcweir {
1442cdf0e10cSrcweir 	OutputDevice*  pDev = rUDEvt.GetDevice();
1443cdf0e10cSrcweir     const StyleSettings& rStyleSettings = GetSettings().GetStyleSettings();
1444cdf0e10cSrcweir 
1445cdf0e10cSrcweir 	Rectangle aRect = rUDEvt.GetRect();
1446cdf0e10cSrcweir 	sal_uInt16	nItemId = rUDEvt.GetItemId();
1447cdf0e10cSrcweir 	long nRectWidth = aRect.GetWidth();
1448cdf0e10cSrcweir 	long nRectHeight = aRect.GetHeight();
1449cdf0e10cSrcweir 
1450cdf0e10cSrcweir 	Point aBLPos = aRect.TopLeft();
1451cdf0e10cSrcweir     Color aFillColor(pDev->GetFillColor());
1452cdf0e10cSrcweir     Color aLineColor(pDev->GetLineColor());
1453cdf0e10cSrcweir     pDev->SetFillColor(rStyleSettings.GetFieldColor());
1454cdf0e10cSrcweir     pDev->SetLineColor(SwViewOption::GetFontColor());
1455cdf0e10cSrcweir 
1456cdf0e10cSrcweir 	long nStep = Abs(Abs(nRectHeight * 95 /100) / 11);
1457cdf0e10cSrcweir 	long nTop = (nRectHeight - 11 * nStep ) / 2;
1458cdf0e10cSrcweir     sal_uInt16 nCols = 0;
1459cdf0e10cSrcweir 	long nStarts[3];
1460cdf0e10cSrcweir 	long nEnds[3];
1461cdf0e10cSrcweir 	nStarts[0] = nRectWidth * 10 / 100;
1462cdf0e10cSrcweir 	switch( nItemId )
1463cdf0e10cSrcweir 	{
1464cdf0e10cSrcweir 		case 1:
1465cdf0e10cSrcweir 			nEnds[0] = nRectWidth * 9 / 10;
1466cdf0e10cSrcweir 			nCols = 1;
1467cdf0e10cSrcweir 		break;
1468cdf0e10cSrcweir 		case 2: nCols = 2;
1469cdf0e10cSrcweir 			nEnds[0] = nRectWidth * 45 / 100;
1470cdf0e10cSrcweir 			nStarts[1] = nEnds[0] + nStep;
1471cdf0e10cSrcweir 			nEnds[1] = nRectWidth * 9 / 10;
1472cdf0e10cSrcweir 		break;
1473cdf0e10cSrcweir 		case 3: nCols = 3;
1474cdf0e10cSrcweir 			nEnds[0] 	= nRectWidth * 30 / 100;
1475cdf0e10cSrcweir 			nStarts[1] 	= nEnds[0] + nStep;
1476cdf0e10cSrcweir 			nEnds[1] 	= nRectWidth * 63 / 100;
1477cdf0e10cSrcweir 			nStarts[2] 	= nEnds[1] + nStep;
1478cdf0e10cSrcweir 			nEnds[2] 	= nRectWidth * 9 / 10;
1479cdf0e10cSrcweir 		break;
1480cdf0e10cSrcweir 		case 4: nCols = 2;
1481cdf0e10cSrcweir 			nEnds[0] = nRectWidth * 63 / 100;
1482cdf0e10cSrcweir 			nStarts[1] = nEnds[0] + nStep;
1483cdf0e10cSrcweir 			nEnds[1] = nRectWidth * 9 / 10;
1484cdf0e10cSrcweir 		break;
1485cdf0e10cSrcweir 		case 5: nCols = 2;
1486cdf0e10cSrcweir 			nEnds[0] = nRectWidth * 30 / 100;
1487cdf0e10cSrcweir 			nStarts[1] = nEnds[0] + nStep;
1488cdf0e10cSrcweir 			nEnds[1] = nRectWidth * 9 / 10;
1489cdf0e10cSrcweir 		break;
1490cdf0e10cSrcweir 	}
1491cdf0e10cSrcweir 	for(sal_uInt16 j = 0; j < nCols; j++ )
1492cdf0e10cSrcweir 	{
1493cdf0e10cSrcweir 		Point aStart(aBLPos.X() + nStarts[j], 0);
1494cdf0e10cSrcweir 		Point aEnd(aBLPos.X() + nEnds[j], 0);
1495cdf0e10cSrcweir 		for( sal_uInt16 i = 0; i < 12; i ++)
1496cdf0e10cSrcweir 		{
1497cdf0e10cSrcweir 			aStart.Y() = aEnd.Y() = aBLPos.Y() + nTop + i * nStep;
1498cdf0e10cSrcweir 			pDev->DrawLine(aStart, aEnd);
1499cdf0e10cSrcweir 		}
1500cdf0e10cSrcweir 	}
1501cdf0e10cSrcweir     pDev->SetFillColor(aFillColor);
1502cdf0e10cSrcweir     pDev->SetLineColor(aLineColor);
1503cdf0e10cSrcweir }
1504cdf0e10cSrcweir 
1505cdf0e10cSrcweir /*-----------------07.03.97 08.48-------------------
1506cdf0e10cSrcweir 
1507cdf0e10cSrcweir --------------------------------------------------*/
1508cdf0e10cSrcweir 
~ColumnValueSet()1509cdf0e10cSrcweir ColumnValueSet::~ColumnValueSet()
1510cdf0e10cSrcweir {
1511cdf0e10cSrcweir }
1512cdf0e10cSrcweir /* -----------------------------02.04.2002 16:01------------------------------
1513cdf0e10cSrcweir 
1514cdf0e10cSrcweir  ---------------------------------------------------------------------------*/
DataChanged(const DataChangedEvent & rDCEvt)1515cdf0e10cSrcweir void ColumnValueSet::DataChanged( const DataChangedEvent& rDCEvt )
1516cdf0e10cSrcweir {
1517cdf0e10cSrcweir 	if ( (rDCEvt.GetType() == DATACHANGED_SETTINGS) &&
1518cdf0e10cSrcweir          (rDCEvt.GetFlags() & SETTINGS_STYLE) )
1519cdf0e10cSrcweir     {
1520cdf0e10cSrcweir         Format();
1521cdf0e10cSrcweir     }
1522cdf0e10cSrcweir     ValueSet::DataChanged( rDCEvt );
1523cdf0e10cSrcweir }
1524cdf0e10cSrcweir 
1525