xref: /trunk/main/sw/source/ui/frmdlg/column.cxx (revision cf6516809c57e1bb0a940545cca99cdad54d4ce2)
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
10cdf0e10cSrcweir  *
11efeef26fSAndrew Rist  *   http://www.apache.org/licenses/LICENSE-2.0
12cdf0e10cSrcweir  *
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.
19cdf0e10cSrcweir  *
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 }
1524