LCOV - code coverage report
Current view: top level - libreoffice/sw/source/ui/frmdlg - column.cxx (source / functions) Hit Total Coverage
Test: libreoffice_filtered.info Lines: 0 774 0.0 %
Date: 2012-12-27 Functions: 0 48 0.0 %
Legend: Lines: hit not hit

          Line data    Source code
       1             : /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
       2             : /*
       3             :  * This file is part of the LibreOffice project.
       4             :  *
       5             :  * This Source Code Form is subject to the terms of the Mozilla Public
       6             :  * License, v. 2.0. If a copy of the MPL was not distributed with this
       7             :  * file, You can obtain one at http://mozilla.org/MPL/2.0/.
       8             :  *
       9             :  * This file incorporates work covered by the following license notice:
      10             :  *
      11             :  *   Licensed to the Apache Software Foundation (ASF) under one or more
      12             :  *   contributor license agreements. See the NOTICE file distributed
      13             :  *   with this work for additional information regarding copyright
      14             :  *   ownership. The ASF licenses this file to you under the Apache
      15             :  *   License, Version 2.0 (the "License"); you may not use this file
      16             :  *   except in compliance with the License. You may obtain a copy of
      17             :  *   the License at http://www.apache.org/licenses/LICENSE-2.0 .
      18             :  */
      19             : 
      20             : #include "column.hxx"
      21             : 
      22             : #include "hintids.hxx"
      23             : #include <svx/dialogs.hrc>
      24             : #include <svx/dialmgr.hxx>
      25             : #include <svx/htmlmode.hxx>
      26             : #include <svx/xtable.hxx>
      27             : #include <svx/drawitem.hxx>
      28             : #include <editeng/borderline.hxx>
      29             : #include <editeng/boxitem.hxx>
      30             : #include <editeng/lrspitem.hxx>
      31             : #include <editeng/sizeitem.hxx>
      32             : #include "editeng/frmdiritem.hxx"
      33             : #include <svl/ctloptions.hxx>
      34             : #include <sfx2/dispatch.hxx>
      35             : #include <vcl/msgbox.hxx>
      36             : #include <swmodule.hxx>
      37             : #include <sal/macros.h>
      38             : 
      39             : #include <helpid.h>
      40             : #include "globals.hrc"
      41             : #include "swtypes.hxx"
      42             : #include "wrtsh.hxx"
      43             : #include "view.hxx"
      44             : #include "docsh.hxx"
      45             : #include "uitool.hxx"
      46             : #include "cmdid.h"
      47             : #include "viewopt.hxx"
      48             : #include "format.hxx"
      49             : #include "frmmgr.hxx"
      50             : #include "frmdlg.hxx"
      51             : #include "colmgr.hxx"
      52             : #include "prcntfld.hxx"
      53             : #include "paratr.hxx"
      54             : #include "frmui.hrc"
      55             : #include "poolfmt.hrc"
      56             : #include <section.hxx>
      57             : #include <docary.hxx>
      58             : #include <pagedesc.hxx>
      59             : 
      60             : #include "access.hrc"
      61             : 
      62             : //to match associated data in ColumnPage.ui
      63             : #define LISTBOX_SELECTION       0
      64             : #define LISTBOX_SECTION         1
      65             : #define LISTBOX_SECTIONS        2
      66             : #define LISTBOX_PAGE            3
      67             : #define LISTBOX_FRAME           4
      68             : 
      69             : using namespace ::com::sun::star;
      70             : 
      71             : #define FRAME_FORMAT_WIDTH 1000
      72             : 
      73             : /*--------------------------------------------------------------------
      74             :     Description:  static data
      75             :  --------------------------------------------------------------------*/
      76             : 
      77             : static const sal_uInt16 nVisCols = 3;
      78             : 
      79           0 : inline sal_Bool IsMarkInSameSection( SwWrtShell& rWrtSh, const SwSection* pSect )
      80             : {
      81           0 :     rWrtSh.SwapPam();
      82           0 :     sal_Bool bRet = pSect == rWrtSh.GetCurrSection();
      83           0 :     rWrtSh.SwapPam();
      84           0 :     return bRet;
      85             : }
      86             : 
      87           0 : SwColumnDlg::SwColumnDlg(Window* pParent, SwWrtShell& rSh)
      88             :     : SfxModalDialog(pParent, "ColumnDialog", "modules/swriter/ui/columndialog.ui")
      89             :     , rWrtShell(rSh)
      90             :     , pPageSet(0)
      91             :     , pSectionSet(0)
      92             :     , pSelectionSet(0)
      93             :     , pFrameSet(0)
      94             :     , nOldSelection(0)
      95             :     , nSelectionWidth(0)
      96             :     , bPageChanged(sal_False)
      97             :     , bSectionChanged(sal_False)
      98             :     , bSelSectionChanged(sal_False)
      99           0 :     , bFrameChanged(sal_False)
     100             : {
     101           0 :     SwRect aRect;
     102           0 :     rWrtShell.CalcBoundRect(aRect, FLY_AS_CHAR);
     103             : 
     104           0 :     nSelectionWidth = aRect.Width();
     105             : 
     106           0 :     SfxItemSet* pColPgSet = 0;
     107             :     static sal_uInt16 const aSectIds[] = { RES_COL, RES_COL,
     108             :                                                 RES_FRM_SIZE, RES_FRM_SIZE,
     109             :                                                 RES_COLUMNBALANCE, RES_FRAMEDIR,
     110             :                                                 0 };
     111             : 
     112           0 :     const SwSection* pCurrSection = rWrtShell.GetCurrSection();
     113           0 :     sal_uInt16 nFullSectCnt = rWrtShell.GetFullSelectedSectionCount();
     114           0 :     if( pCurrSection && ( !rWrtShell.HasSelection() || 0 != nFullSectCnt ))
     115             :     {
     116           0 :         nSelectionWidth = rSh.GetSectionWidth(*pCurrSection->GetFmt());
     117           0 :         if ( !nSelectionWidth )
     118           0 :             nSelectionWidth = USHRT_MAX;
     119           0 :         pSectionSet = new SfxItemSet( rWrtShell.GetAttrPool(), aSectIds );
     120           0 :         pSectionSet->Put( pCurrSection->GetFmt()->GetAttrSet() );
     121           0 :         pColPgSet = pSectionSet;
     122             :     }
     123             : 
     124           0 :     if( rWrtShell.HasSelection() && rWrtShell.IsInsRegionAvailable() &&
     125             :         ( !pCurrSection || ( 1 != nFullSectCnt &&
     126           0 :             IsMarkInSameSection( rWrtShell, pCurrSection ) )))
     127             :     {
     128           0 :         pSelectionSet = new SfxItemSet( rWrtShell.GetAttrPool(), aSectIds );
     129           0 :         pColPgSet = pSelectionSet;
     130             :     }
     131             : 
     132           0 :     if( rWrtShell.GetFlyFrmFmt() )
     133             :     {
     134           0 :         const SwFrmFmt* pFmt = rSh.GetFlyFrmFmt() ;
     135           0 :         pFrameSet = new SfxItemSet(rWrtShell.GetAttrPool(), aSectIds );
     136           0 :         pFrameSet->Put(pFmt->GetFrmSize());
     137           0 :         pFrameSet->Put(pFmt->GetCol());
     138           0 :         pColPgSet = pFrameSet;
     139             :     }
     140             : 
     141             : 
     142           0 :     const SwPageDesc* pPageDesc = rWrtShell.GetSelectedPageDescs();
     143           0 :     if( pPageDesc )
     144             :     {
     145           0 :         pPageSet = new SfxItemSet( rWrtShell.GetAttrPool(),
     146             :                                     RES_COL, RES_COL,
     147             :                                     RES_FRM_SIZE, RES_FRM_SIZE,
     148             :                                     RES_LR_SPACE, RES_LR_SPACE,
     149           0 :                                     0 );
     150             : 
     151           0 :         const SwFrmFmt &rFmt = pPageDesc->GetMaster();
     152           0 :         nPageWidth = rFmt.GetFrmSize().GetSize().Width();
     153             : 
     154           0 :         const SvxLRSpaceItem& rLRSpace = (const SvxLRSpaceItem&)rFmt.GetLRSpace();
     155           0 :         const SvxBoxItem& rBox = (const SvxBoxItem&) rFmt.GetBox();
     156           0 :         nPageWidth -= rLRSpace.GetLeft() + rLRSpace.GetRight() + rBox.GetDistance();
     157             : 
     158           0 :         pPageSet->Put(rFmt.GetCol());
     159           0 :         pPageSet->Put(rFmt.GetLRSpace());
     160           0 :         pColPgSet = pPageSet;
     161             :     }
     162             : 
     163             :     assert(pColPgSet);
     164             : 
     165             :     // create TabPage
     166           0 :     pTabPage = (SwColumnPage*) SwColumnPage::Create(get_content_area(), *pColPgSet);
     167           0 :     pTabPage->get<Window>("applytoft")->Show();
     168           0 :     pTabPage->get(m_pApplyToLB, "applytolb");
     169           0 :     m_pApplyToLB->Show();
     170             : 
     171           0 :     if (pCurrSection && (!rWrtShell.HasSelection() || 0 != nFullSectCnt))
     172             :     {
     173             :         m_pApplyToLB->RemoveEntry( m_pApplyToLB->GetEntryPos(
     174             :                                         (void*)(sal_IntPtr)( 1 >= nFullSectCnt
     175             :                                                     ? LISTBOX_SECTIONS
     176           0 :                                                     : LISTBOX_SECTION )));
     177             :     }
     178             :     else
     179             :     {
     180           0 :         m_pApplyToLB->RemoveEntry(m_pApplyToLB->GetEntryPos( (void*)(sal_IntPtr)LISTBOX_SECTION ));
     181           0 :         m_pApplyToLB->RemoveEntry(m_pApplyToLB->GetEntryPos( (void*)(sal_IntPtr)LISTBOX_SECTIONS ));
     182             :     }
     183             : 
     184           0 :     if (!( rWrtShell.HasSelection() && rWrtShell.IsInsRegionAvailable() &&
     185             :         ( !pCurrSection || ( 1 != nFullSectCnt &&
     186           0 :             IsMarkInSameSection( rWrtShell, pCurrSection ) ))))
     187           0 :         m_pApplyToLB->RemoveEntry(m_pApplyToLB->GetEntryPos( (void*)(sal_IntPtr)LISTBOX_SELECTION ));
     188             : 
     189           0 :     if (!rWrtShell.GetFlyFrmFmt())
     190           0 :         m_pApplyToLB->RemoveEntry(m_pApplyToLB->GetEntryPos( (void*) LISTBOX_FRAME ));
     191             : 
     192           0 :     sal_uInt16 nPagePos = m_pApplyToLB->GetEntryPos( (void*) LISTBOX_PAGE );
     193           0 :     if (pPageSet && pPageDesc)
     194             :     {
     195           0 :         String sPageStr = m_pApplyToLB->GetEntry(nPagePos);
     196           0 :         m_pApplyToLB->RemoveEntry(nPagePos);
     197           0 :         sPageStr += pPageDesc->GetName();
     198           0 :         m_pApplyToLB->InsertEntry( sPageStr, nPagePos );
     199           0 :         m_pApplyToLB->SetEntryData( nPagePos, (void*) LISTBOX_PAGE);
     200             :     }
     201             :     else
     202           0 :         m_pApplyToLB->RemoveEntry( nPagePos );
     203             : 
     204           0 :     m_pApplyToLB->SelectEntryPos(0);
     205           0 :     ObjectHdl(0);
     206             : 
     207           0 :     m_pApplyToLB->SetSelectHdl(LINK(this, SwColumnDlg, ObjectHdl));
     208           0 :     OKButton *pOK = get<OKButton>("ok");
     209           0 :     pOK->SetClickHdl(LINK(this, SwColumnDlg, OkHdl));
     210             :     //#i80458# if no columns can be set then disable OK
     211           0 :     if( !m_pApplyToLB->GetEntryCount() )
     212           0 :         pOK->Enable( sal_False );
     213             :     //#i97810# set focus to the TabPage
     214           0 :     pTabPage->ActivateColumnControl();
     215           0 :     pTabPage->Show();
     216           0 : }
     217             : 
     218           0 : SwColumnDlg::~SwColumnDlg()
     219             : {
     220           0 :     delete pTabPage;
     221           0 :     delete pPageSet;
     222           0 :     delete pSectionSet;
     223           0 :     delete pSelectionSet;
     224           0 : }
     225             : 
     226           0 : IMPL_LINK(SwColumnDlg, ObjectHdl, ListBox*, pBox)
     227             : {
     228           0 :     SfxItemSet* pSet = 0;
     229           0 :     switch(nOldSelection)
     230             :     {
     231             :         case LISTBOX_SELECTION  :
     232           0 :             pSet = pSelectionSet;
     233           0 :         break;
     234             :         case LISTBOX_SECTION    :
     235           0 :             pSet = pSectionSet;
     236           0 :             bSectionChanged = sal_True;
     237           0 :         break;
     238             :         case LISTBOX_SECTIONS   :
     239           0 :             pSet = pSectionSet;
     240           0 :             bSelSectionChanged = sal_True;
     241           0 :         break;
     242             :         case LISTBOX_PAGE       :
     243           0 :             pSet = pPageSet;
     244           0 :             bPageChanged = sal_True;
     245           0 :         break;
     246             :         case LISTBOX_FRAME:
     247           0 :             pSet = pFrameSet;
     248           0 :             bFrameChanged = sal_True;
     249           0 :         break;
     250             :     }
     251           0 :     if(pBox)
     252             :     {
     253           0 :         pTabPage->FillItemSet(*pSet);
     254             :     }
     255           0 :     nOldSelection = (long)m_pApplyToLB->GetEntryData(m_pApplyToLB->GetSelectEntryPos());
     256           0 :     long nWidth = nSelectionWidth;
     257           0 :     switch(nOldSelection)
     258             :     {
     259             :         case LISTBOX_SELECTION  :
     260           0 :             pSet = pSelectionSet;
     261           0 :             if( pSelectionSet )
     262           0 :                 pSet->Put(SwFmtFrmSize(ATT_VAR_SIZE, nWidth, nWidth));
     263           0 :         break;
     264             :         case LISTBOX_SECTION    :
     265             :         case LISTBOX_SECTIONS   :
     266           0 :             pSet = pSectionSet;
     267           0 :             pSet->Put(SwFmtFrmSize(ATT_VAR_SIZE, nWidth, nWidth));
     268           0 :         break;
     269             :         case LISTBOX_PAGE       :
     270           0 :             nWidth = nPageWidth;
     271           0 :             pSet = pPageSet;
     272           0 :             pSet->Put(SwFmtFrmSize(ATT_VAR_SIZE, nWidth, nWidth));
     273           0 :         break;
     274             :         case LISTBOX_FRAME:
     275           0 :             pSet = pFrameSet;
     276           0 :         break;
     277             :     }
     278             : 
     279           0 :     sal_Bool bIsSection = pSet == pSectionSet || pSet == pSelectionSet;
     280           0 :     pTabPage->ShowBalance(bIsSection);
     281           0 :     pTabPage->SetInSection(bIsSection);
     282           0 :     pTabPage->SetFrmMode(sal_True);
     283           0 :     pTabPage->SetPageWidth(nWidth);
     284           0 :     if( pSet )
     285           0 :         pTabPage->Reset(*pSet);
     286           0 :     return 0;
     287             : }
     288             : 
     289           0 : IMPL_LINK_NOARG(SwColumnDlg, OkHdl)
     290             : {
     291             :     // evaluate current selection
     292           0 :     SfxItemSet* pSet = 0;
     293           0 :     switch(nOldSelection)
     294             :     {
     295             :         case LISTBOX_SELECTION  :
     296           0 :             pSet = pSelectionSet;
     297           0 :         break;
     298             :         case LISTBOX_SECTION    :
     299           0 :             pSet = pSectionSet;
     300           0 :             bSectionChanged = sal_True;
     301           0 :         break;
     302             :         case LISTBOX_SECTIONS   :
     303           0 :             pSet = pSectionSet;
     304           0 :             bSelSectionChanged = sal_True;
     305           0 :         break;
     306             :         case LISTBOX_PAGE       :
     307           0 :             pSet = pPageSet;
     308           0 :             bPageChanged = sal_True;
     309           0 :         break;
     310             :         case LISTBOX_FRAME:
     311           0 :             pSet = pFrameSet;
     312           0 :             bFrameChanged = sal_True;
     313           0 :         break;
     314             :     }
     315           0 :     pTabPage->FillItemSet(*pSet);
     316             : 
     317           0 :     if(pSelectionSet && SFX_ITEM_SET == pSelectionSet->GetItemState(RES_COL))
     318             :     {
     319             :         //insert region with columns
     320           0 :         const SwFmtCol& rColItem = (const SwFmtCol&)pSelectionSet->Get(RES_COL);
     321             :         //only if there actually are columns!
     322           0 :         if(rColItem.GetNumCols() > 1)
     323           0 :             rWrtShell.GetView().GetViewFrame()->GetDispatcher()->Execute(
     324           0 :                 FN_INSERT_REGION, SFX_CALLMODE_ASYNCHRON, *pSelectionSet );
     325             :     }
     326             : 
     327           0 :     if(pSectionSet && pSectionSet->Count() && bSectionChanged )
     328             :     {
     329           0 :         const SwSection* pCurrSection = rWrtShell.GetCurrSection();
     330           0 :         const SwSectionFmt* pFmt = pCurrSection->GetFmt();
     331           0 :         sal_uInt16 nNewPos = rWrtShell.GetSectionFmtPos( *pFmt );
     332           0 :         SwSectionData aData(*pCurrSection);
     333           0 :         rWrtShell.UpdateSection( nNewPos, aData, pSectionSet );
     334             :     }
     335             : 
     336           0 :     if(pSectionSet && pSectionSet->Count() && bSelSectionChanged )
     337             :     {
     338           0 :         rWrtShell.SetSectionAttr( *pSectionSet );
     339             :     }
     340             : 
     341           0 :     if(pPageSet && SFX_ITEM_SET == pPageSet->GetItemState(RES_COL) && bPageChanged)
     342             :     {
     343             :         // deterine current PageDescriptor and fill the Set with it
     344           0 :         const sal_uInt16 nCurIdx = rWrtShell.GetCurPageDesc();
     345           0 :         SwPageDesc aPageDesc(rWrtShell.GetPageDesc(nCurIdx));
     346           0 :         SwFrmFmt &rFmt = aPageDesc.GetMaster();
     347           0 :         rFmt.SetFmtAttr(pPageSet->Get(RES_COL));
     348           0 :         rWrtShell.ChgPageDesc(nCurIdx, aPageDesc);
     349             :     }
     350           0 :     if(pFrameSet && SFX_ITEM_SET == pFrameSet->GetItemState(RES_COL) && bFrameChanged)
     351             :     {
     352           0 :         SfxItemSet aTmp(*pFrameSet->GetPool(), RES_COL, RES_COL);
     353           0 :         aTmp.Put(*pFrameSet);
     354           0 :         rWrtShell.StartAction();
     355           0 :         rWrtShell.Push();
     356           0 :         rWrtShell.SetFlyFrmAttr( aTmp );
     357             :         // undo the frame selction again
     358           0 :         if(rWrtShell.IsFrmSelected())
     359             :         {
     360           0 :             rWrtShell.UnSelectFrm();
     361           0 :             rWrtShell.LeaveSelFrmMode();
     362             :         }
     363           0 :         rWrtShell.Pop();
     364           0 :         rWrtShell.EndAction();
     365             :     }
     366           0 :     EndDialog(RET_OK);
     367           0 :     return 0;
     368             : }
     369             : 
     370             : #if OSL_DEBUG_LEVEL < 2
     371             : inline
     372             : #endif
     373           0 : sal_uInt16 GetMaxWidth( SwColMgr* pColMgr, sal_uInt16 nCols )
     374             : {
     375           0 :     sal_uInt16 nMax = pColMgr->GetActualSize();
     376           0 :     if( --nCols )
     377           0 :         nMax -= pColMgr->GetGutterWidth() * nCols;
     378           0 :     return nMax;
     379             : }
     380             : 
     381             : static sal_uInt16 aPageRg[] = {
     382             :     RES_COL, RES_COL,
     383             :     0
     384             : };
     385             : 
     386             : DBG_NAME(columnhdl)
     387             : 
     388           0 : void SwColumnPage::ResetColWidth()
     389             : {
     390           0 :     if( nCols )
     391             :     {
     392           0 :         sal_uInt16 nWidth = GetMaxWidth( pColMgr, nCols );
     393           0 :         nWidth = nWidth / nCols;
     394             : 
     395           0 :         for(sal_uInt16 i = 0; i < nCols; ++i)
     396           0 :             nColWidth[i] = (long) nWidth;
     397             :     }
     398             : 
     399           0 : }
     400             : 
     401             : /*--------------------------------------------------------------------
     402             :     Description:    Now as TabPage
     403             :  --------------------------------------------------------------------*/
     404           0 : SwColumnPage::SwColumnPage(Window *pParent, const SfxItemSet &rSet)
     405             :     : SfxTabPage(pParent, "ColumnPage", "modules/swriter/ui/columnpage.ui", rSet)
     406             :     , pColMgr(0)
     407             :     , nFirstVis(0)
     408             :     , nMinWidth(MINLAY)
     409             :     , pModifiedField(0)
     410             :     , bFormat(sal_False)
     411             :     , bFrm(sal_False)
     412             :     , bHtmlMode(sal_False)
     413           0 :     , bLockUpdate(sal_False)
     414             : {
     415           0 :     get(m_pCLNrEdt, "colsnf");
     416           0 :     get(m_pBalanceColsCB, "balance");
     417           0 :     get(m_pBtnBack, "back");
     418           0 :     get(m_pLbl1, "1");
     419           0 :     get(m_pLbl2, "2");
     420           0 :     get(m_pLbl3, "3");
     421           0 :     get(m_pBtnNext, "next");
     422           0 :     get(m_pAutoWidthBox, "autowidth");
     423           0 :     get(m_pLineTypeLbl, "linestyleft");
     424           0 :     get(m_pLineWidthLbl, "linewidthft");
     425           0 :     get(m_pLineWidthEdit, "linewidthmf");
     426           0 :     get(m_pLineColorLbl, "linecolorft");
     427           0 :     get(m_pLineHeightLbl, "lineheightft");
     428           0 :     get(m_pLineHeightEdit, "lineheightmf");
     429           0 :     get(m_pLinePosLbl, "lineposft");
     430           0 :     get(m_pLinePosDLB, "lineposlb");
     431           0 :     get(m_pTextDirectionFT, "textdirectionft");
     432           0 :     get(m_pTextDirectionLB, "textdirectionlb");
     433           0 :     get(m_pLineColorDLB, "colorlb");
     434           0 :     get(m_pLineTypeDLB, "linestylelb");
     435             : 
     436           0 :     get(m_pDefaultVS, "valueset");
     437           0 :     get(m_pPgeExampleWN, "pageexample");
     438           0 :     get(m_pFrmExampleWN, "frameexample");
     439             : 
     440           0 :     MetricField *pEd1 = get<MetricField>("width1mf");
     441           0 :     aEd1.set(pEd1);
     442           0 :     MetricField *pEd2 = get<MetricField>("width2mf");
     443           0 :     aEd2.set(pEd2);
     444           0 :     MetricField *pEd3 = get<MetricField>("width3mf");
     445           0 :     aEd3.set(pEd3);
     446           0 :     MetricField *pDistEd1 = get<MetricField>("spacing1mf");
     447           0 :     aDistEd1.set(pDistEd1);
     448           0 :     MetricField *pDistEd2 = get<MetricField>("spacing2mf");
     449           0 :     aDistEd2.set(pDistEd2);
     450             : 
     451           0 :     SetExchangeSupport();
     452             : 
     453           0 :     VclFrame *pSpacing = get<VclFrame>("spacing");
     454           0 :     m_pBtnNext->SetAccessibleRelationMemberOf(pSpacing->get_label_widget());
     455             : 
     456           0 :     Window *pWidth = get<Window>("widthft");
     457           0 :     pEd1->SetAccessibleRelationLabeledBy(pWidth);
     458           0 :     pEd2->SetAccessibleRelationLabeledBy(pWidth);
     459           0 :     pEd3->SetAccessibleRelationLabeledBy(pWidth);
     460             : 
     461           0 :     Window *pDist = get<Window>("distft");
     462           0 :     pDistEd1->SetAccessibleRelationLabeledBy(pDist);
     463           0 :     pDistEd2->SetAccessibleRelationLabeledBy(pDist);
     464             : 
     465           0 :     Window *pColumn = get<Window>("columnft");
     466           0 :     m_pBtnBack->SetAccessibleRelationLabeledBy(pColumn);
     467           0 :     m_pBtnNext->SetAccessibleRelationLabeledBy(pColumn);
     468             : 
     469           0 :     m_pDefaultVS->SetHelpId(HID_COLUMN_VALUESET);
     470           0 :     m_pDefaultVS->SetColCount( 5 );
     471             : 
     472           0 :     for (int i = 0; i < 5; ++i)
     473           0 :         m_pDefaultVS->InsertItem( i + 1, i );
     474             : 
     475           0 :     m_pDefaultVS->SetSelectHdl(LINK(this, SwColumnPage, SetDefaultsHdl));
     476             : 
     477             :     // announce Controls for additional region at the MoreButton
     478           0 :     Link aCLNrLk = LINK(this, SwColumnPage, ColModify);
     479           0 :     m_pCLNrEdt->SetLoseFocusHdl(aCLNrLk);
     480           0 :     m_pCLNrEdt->SetUpHdl(aCLNrLk);
     481           0 :     m_pCLNrEdt->SetDownHdl(aCLNrLk);
     482           0 :     Link aLk = LINK(this, SwColumnPage, GapModify);
     483           0 :     aDistEd1.SetUpHdl(aLk);
     484           0 :     aDistEd1.SetDownHdl(aLk);
     485           0 :     aDistEd1.SetLoseFocusHdl(aLk);
     486           0 :     aDistEd2.SetUpHdl(aLk);
     487           0 :     aDistEd2.SetDownHdl(aLk);
     488           0 :     aDistEd2.SetLoseFocusHdl(aLk);
     489             : 
     490           0 :     aLk = LINK(this, SwColumnPage, EdModify);
     491             : 
     492           0 :     aEd1.SetUpHdl(aLk);
     493           0 :     aEd1.SetDownHdl(aLk);
     494           0 :     aEd1.SetLoseFocusHdl(aLk);
     495             : 
     496           0 :     aEd2.SetUpHdl(aLk);
     497           0 :     aEd2.SetDownHdl(aLk);
     498           0 :     aEd2.SetLoseFocusHdl(aLk);
     499             : 
     500           0 :     aEd3.SetUpHdl(aLk);
     501           0 :     aEd3.SetDownHdl(aLk);
     502           0 :     aEd3.SetLoseFocusHdl(aLk);
     503             : 
     504           0 :     m_pBtnBack->SetClickHdl(LINK(this, SwColumnPage, Up));
     505           0 :     m_pBtnNext->SetClickHdl(LINK(this, SwColumnPage, Down));
     506           0 :     m_pAutoWidthBox->SetClickHdl(LINK(this, SwColumnPage, AutoWidthHdl));
     507             : 
     508           0 :     aLk = LINK( this, SwColumnPage, UpdateColMgr );
     509           0 :     m_pLineTypeDLB->SetSelectHdl( aLk );
     510           0 :     m_pLineWidthEdit->SetModifyHdl( aLk );
     511           0 :     m_pLineColorDLB->SetSelectHdl( aLk );
     512           0 :     m_pLineHeightEdit->SetModifyHdl( aLk );
     513           0 :     m_pLinePosDLB->SetSelectHdl( aLk );
     514             : 
     515             :     // Separator line
     516           0 :     m_pLineTypeDLB->SetUnit( FUNIT_POINT );
     517           0 :     m_pLineTypeDLB->SetSourceUnit( FUNIT_TWIP );
     518             : 
     519             :     // Fill the line styles listbox
     520           0 :     m_pLineTypeDLB->SetNone( SVX_RESSTR( RID_SVXSTR_NONE ) );
     521             :     m_pLineTypeDLB->InsertEntry(
     522             :         ::editeng::SvxBorderLine::getWidthImpl(table::BorderLineStyle::SOLID),
     523           0 :         table::BorderLineStyle::SOLID );
     524             :     m_pLineTypeDLB->InsertEntry(
     525             :         ::editeng::SvxBorderLine::getWidthImpl(table::BorderLineStyle::DOTTED),
     526           0 :         table::BorderLineStyle::DOTTED );
     527             :     m_pLineTypeDLB->InsertEntry(
     528             :         ::editeng::SvxBorderLine::getWidthImpl(table::BorderLineStyle::DASHED),
     529           0 :         table::BorderLineStyle::DASHED );
     530             : 
     531             :     long nLineWidth = static_cast<long>(MetricField::ConvertDoubleValue(
     532           0 :             m_pLineWidthEdit->GetValue( ),
     533           0 :             m_pLineWidthEdit->GetDecimalDigits( ),
     534           0 :             m_pLineWidthEdit->GetUnit(), MAP_TWIP ));
     535           0 :     m_pLineTypeDLB->SetWidth( nLineWidth );
     536             : 
     537             :     // Fill the color listbox
     538           0 :     SfxObjectShell* pDocSh = SfxObjectShell::Current();
     539           0 :     const SfxPoolItem*  pItem       = NULL;
     540           0 :     XColorListRef pColorList;
     541           0 :     if ( pDocSh )
     542             :     {
     543           0 :         pItem = pDocSh->GetItem( SID_COLOR_TABLE );
     544           0 :         if ( pItem != NULL )
     545           0 :             pColorList = ( (SvxColorListItem*)pItem )->GetColorList();
     546             :     }
     547             : 
     548           0 :     if ( pColorList.is() )
     549             :     {
     550           0 :         m_pLineColorDLB->SetUpdateMode( sal_False );
     551             : 
     552           0 :         for (long i = 0; i < pColorList->Count(); ++i )
     553             :         {
     554           0 :             XColorEntry* pEntry = pColorList->GetColor(i);
     555           0 :             m_pLineColorDLB->InsertEntry( pEntry->GetColor(), pEntry->GetName() );
     556             :         }
     557           0 :         m_pLineColorDLB->SetUpdateMode( sal_True );
     558             :     }
     559           0 :     m_pLineColorDLB->SelectEntryPos( 0 );
     560           0 : }
     561             : 
     562           0 : SwColumnPage::~SwColumnPage()
     563             : {
     564           0 :     delete pColMgr;
     565           0 : }
     566             : 
     567           0 : void SwColumnPage::SetPageWidth(long nPageWidth)
     568             : {
     569           0 :     long nNewMaxWidth = static_cast< long >(aEd1.NormalizePercent(nPageWidth));
     570             : 
     571           0 :     aDistEd1.SetMax(nNewMaxWidth, FUNIT_TWIP);
     572           0 :     aDistEd2.SetMax(nNewMaxWidth, FUNIT_TWIP);
     573           0 :     aEd1.SetMax(nNewMaxWidth, FUNIT_TWIP);
     574           0 :     aEd2.SetMax(nNewMaxWidth, FUNIT_TWIP);
     575           0 :     aEd3.SetMax(nNewMaxWidth, FUNIT_TWIP);
     576           0 : }
     577             : 
     578           0 : void SwColumnPage::Reset(const SfxItemSet &rSet)
     579             : {
     580           0 :     sal_uInt16 nHtmlMode = ::GetHtmlMode((const SwDocShell*)SfxObjectShell::Current());
     581           0 :     if(nHtmlMode & HTMLMODE_ON)
     582             :     {
     583           0 :         bHtmlMode = sal_True;
     584           0 :         m_pAutoWidthBox->Enable(sal_False);
     585             :     }
     586           0 :     FieldUnit aMetric = ::GetDfltMetric(bHtmlMode);
     587           0 :     aEd1.SetMetric(aMetric);
     588           0 :     aEd2.SetMetric(aMetric);
     589           0 :     aEd3.SetMetric(aMetric);
     590           0 :     aDistEd1.SetMetric(aMetric);
     591           0 :     aDistEd2.SetMetric(aMetric);
     592             : 
     593           0 :     delete pColMgr;
     594           0 :     pColMgr = new SwColMgr(rSet);
     595           0 :     nCols   = pColMgr->GetCount() ;
     596           0 :     m_pCLNrEdt->SetMax(Max((sal_uInt16)m_pCLNrEdt->GetMax(), (sal_uInt16)nCols));
     597           0 :     m_pCLNrEdt->SetLast(Max(nCols,(sal_uInt16)m_pCLNrEdt->GetMax()));
     598             : 
     599           0 :     if(bFrm)
     600             :     {
     601           0 :         if(bFormat)                     // there is no size here
     602           0 :             pColMgr->SetActualWidth(FRAME_FORMAT_WIDTH);
     603             :         else
     604             :         {
     605           0 :             const SwFmtFrmSize& rSize = (const SwFmtFrmSize&)rSet.Get(RES_FRM_SIZE);
     606           0 :             const SvxBoxItem& rBox = (const SvxBoxItem&) rSet.Get(RES_BOX);
     607           0 :             pColMgr->SetActualWidth((sal_uInt16)rSize.GetSize().Width() - rBox.GetDistance());
     608             :         }
     609             :     }
     610           0 :     if(m_pBalanceColsCB->IsVisible())
     611             :     {
     612             :         const SfxPoolItem* pItem;
     613           0 :         if( SFX_ITEM_SET == rSet.GetItemState( RES_COLUMNBALANCE, sal_False, &pItem ))
     614           0 :             m_pBalanceColsCB->Check(!((const SwFmtNoBalancedColumns*)pItem)->GetValue());
     615             :         else
     616           0 :             m_pBalanceColsCB->Check( sal_True );
     617             :     }
     618             : 
     619             :     //text direction
     620           0 :     if( SFX_ITEM_AVAILABLE <= rSet.GetItemState( RES_FRAMEDIR ) )
     621             :     {
     622           0 :         const SvxFrameDirectionItem& rItem = (const SvxFrameDirectionItem&)rSet.Get(RES_FRAMEDIR);
     623           0 :         sal_uIntPtr nVal  = rItem.GetValue();
     624           0 :         sal_uInt16 nPos = m_pTextDirectionLB->GetEntryPos( (void*) nVal );
     625           0 :         m_pTextDirectionLB->SelectEntryPos( nPos );
     626           0 :         m_pTextDirectionLB->SaveValue();
     627             :     }
     628             : 
     629           0 :     Init();
     630           0 :     ActivatePage( rSet );
     631           0 : }
     632             : 
     633             : /*--------------------------------------------------------------------
     634             :     Description:    create TabPage
     635             :  --------------------------------------------------------------------*/
     636           0 : SfxTabPage* SwColumnPage::Create(Window *pParent, const SfxItemSet &rSet)
     637             : {
     638           0 :     return new SwColumnPage(pParent, rSet);
     639             : }
     640             : 
     641             : /*--------------------------------------------------------------------
     642             :     Description:    stuff attributes into the Set when OK
     643             :  --------------------------------------------------------------------*/
     644           0 : sal_Bool SwColumnPage::FillItemSet(SfxItemSet &rSet)
     645             : {
     646           0 :     if(m_pCLNrEdt->HasChildPathFocus())
     647           0 :         m_pCLNrEdt->GetDownHdl().Call(m_pCLNrEdt);
     648             :     // set in ItemSet setzen
     649             :     // the current settings are already present
     650             :     //
     651             :     const SfxPoolItem* pOldItem;
     652           0 :     const SwFmtCol& rCol = pColMgr->GetColumns();
     653           0 :     if(0 == (pOldItem = GetOldItem( rSet, RES_COL )) ||
     654           0 :                 rCol != *pOldItem )
     655           0 :         rSet.Put(rCol);
     656             : 
     657           0 :     if(m_pBalanceColsCB->IsVisible() )
     658             :     {
     659           0 :         rSet.Put(SwFmtNoBalancedColumns(!m_pBalanceColsCB->IsChecked() ));
     660             :     }
     661             :     sal_uInt16 nPos;
     662           0 :     if( m_pTextDirectionLB->IsVisible() &&
     663           0 :         ( nPos = m_pTextDirectionLB->GetSelectEntryPos() ) !=
     664           0 :                                             m_pTextDirectionLB->GetSavedValue() )
     665             :     {
     666           0 :         sal_uInt32 nDirection = (sal_uInt32)(sal_IntPtr)m_pTextDirectionLB->GetEntryData( nPos );
     667           0 :         rSet.Put( SvxFrameDirectionItem( (SvxFrameDirection)nDirection, RES_FRAMEDIR));
     668             :     }
     669           0 :     return sal_True;
     670             : }
     671             : 
     672             : /*--------------------------------------------------------------------
     673             :     Description:    update ColumnManager
     674             :  --------------------------------------------------------------------*/
     675           0 : IMPL_LINK( SwColumnPage, UpdateColMgr, void *, /*pField*/ )
     676             : {
     677           0 :     long nGutterWidth = pColMgr->GetGutterWidth();
     678           0 :     if(nCols > 1)
     679             :     {
     680             :             // Determine whether the most narrow column is too narrow
     681             :             // for the adjusted column gap
     682           0 :         long nMin = nColWidth[0];
     683             :         sal_uInt16 i;
     684             : 
     685           0 :         for( i = 1; i < nCols; ++i)
     686           0 :             nMin = Min(nMin, nColWidth[i]);
     687             : 
     688           0 :         sal_Bool bAutoWidth = m_pAutoWidthBox->IsChecked();
     689           0 :         if(!bAutoWidth)
     690             :         {
     691           0 :             pColMgr->SetAutoWidth(sal_False);
     692             :                 // when the user didn't allocate the whole width,
     693             :                 // add the missing amount to the last column.
     694           0 :             long nSum = 0;
     695           0 :             for(i = 0; i < nCols; ++i)
     696           0 :                 nSum += nColWidth[i];
     697           0 :             nGutterWidth = 0;
     698           0 :             for(i = 0; i < nCols - 1; ++i)
     699           0 :                 nGutterWidth += nColDist[i];
     700           0 :             nSum += nGutterWidth;
     701             : 
     702           0 :             long nMaxW = pColMgr->GetActualSize();
     703             : 
     704           0 :             if( nSum < nMaxW  )
     705           0 :                 nColWidth[nCols - 1] += nMaxW - nSum;
     706             : 
     707           0 :             pColMgr->SetColWidth( 0, static_cast< sal_uInt16 >(nColWidth[0] + (sal_uInt16)nColDist[0]/2) );
     708           0 :             for( i = 1; i < nCols-1; ++i )
     709             :             {
     710           0 :                 long nActDist = (nColDist[i] + nColDist[i - 1]) / 2;
     711           0 :                 pColMgr->SetColWidth( i, (sal_uInt16)nColWidth[i] + (sal_uInt16)nActDist );
     712             :             }
     713           0 :             pColMgr->SetColWidth( nCols-1, static_cast< sal_uInt16 >(nColWidth[nCols-1] + nColDist[nCols -2]/2) );
     714             : 
     715             :         }
     716             : 
     717             :             // nothing is turned off
     718           0 :         const sal_uInt16 nPos = m_pLineTypeDLB->GetSelectEntryPos();
     719           0 :         sal_Bool bEnable = 0 != nPos;
     720           0 :         m_pLineHeightEdit->Enable( bEnable );
     721           0 :         m_pLineHeightLbl->Enable( bEnable );
     722             :         long nLineWidth = static_cast<long>(MetricField::ConvertDoubleValue(
     723           0 :                 m_pLineWidthEdit->GetValue( ),
     724           0 :                 m_pLineWidthEdit->GetDecimalDigits( ),
     725           0 :                 m_pLineWidthEdit->GetUnit(), MAP_TWIP ));
     726           0 :         if( !bEnable )
     727           0 :             pColMgr->SetNoLine();
     728           0 :         else if( LISTBOX_ENTRY_NOTFOUND != nPos )
     729             :         {
     730             :             pColMgr->SetLineWidthAndColor(
     731           0 :                     ::editeng::SvxBorderStyle( m_pLineTypeDLB->GetSelectEntryStyle( ) ),
     732             :                     nLineWidth,
     733           0 :                     m_pLineColorDLB->GetSelectEntryColor() );
     734             :             pColMgr->SetAdjust( SwColLineAdj(
     735           0 :                                     m_pLinePosDLB->GetSelectEntryPos() + 1) );
     736           0 :             pColMgr->SetLineHeightPercent((short)m_pLineHeightEdit->GetValue());
     737           0 :             bEnable = pColMgr->GetLineHeightPercent() != 100;
     738             :         }
     739           0 :         m_pLinePosLbl->Enable( bEnable );
     740           0 :         m_pLinePosDLB->Enable( bEnable );
     741             : 
     742           0 :         m_pLineTypeDLB->SetWidth( nLineWidth );
     743           0 :         m_pLineTypeDLB->SetColor( m_pLineColorDLB->GetSelectEntryColor( ) );
     744             :     }
     745             :     else
     746             :     {
     747           0 :         pColMgr->NoCols();
     748           0 :         nCols = 0;
     749             :     }
     750             : 
     751             :     //set maximum values
     752             :     m_pCLNrEdt->SetMax(Max(1L,
     753           0 :         Min(long(nMaxCols), long( pColMgr->GetActualSize() / (nGutterWidth + MINLAY)) )));
     754           0 :     m_pCLNrEdt->SetLast(m_pCLNrEdt->GetMax());
     755           0 :     m_pCLNrEdt->Reformat();
     756             : 
     757             :     //prompt example window
     758           0 :     if(!bLockUpdate)
     759             :     {
     760           0 :         if(bFrm)
     761             :         {
     762           0 :             m_pFrmExampleWN->SetColumns( pColMgr->GetColumns() );
     763           0 :             m_pFrmExampleWN->Invalidate();
     764             :         }
     765             :         else
     766           0 :             m_pPgeExampleWN->Invalidate();
     767             :     }
     768             : 
     769           0 :     return 0;
     770             : }
     771             : 
     772             : /*------------------------------------------------------------------------
     773             :  Description:   Initialisation
     774             : ------------------------------------------------------------------------*/
     775           0 : void SwColumnPage::Init()
     776             : {
     777           0 :     m_pCLNrEdt->SetValue(nCols);
     778             : 
     779           0 :     sal_Bool bAutoWidth = pColMgr->IsAutoWidth() || bHtmlMode;
     780           0 :     m_pAutoWidthBox->Check( bAutoWidth );
     781             : 
     782           0 :     sal_Int32 nColumnWidthSum = 0;
     783             :     // set the widths
     784             :     sal_uInt16 i;
     785           0 :     for(i = 0; i < nCols; ++i)
     786             :     {
     787           0 :         nColWidth[i] = pColMgr->GetColWidth(i);
     788           0 :         nColumnWidthSum += nColWidth[i];
     789           0 :         if(i < nCols - 1)
     790           0 :             nColDist[i] = pColMgr->GetGutterWidth(i);
     791             :     }
     792             : 
     793           0 :     if( 1 < nCols )
     794             :     {
     795             :         // #97495# make sure that the automatic column widht's are always equal
     796           0 :         if(bAutoWidth)
     797             :         {
     798           0 :             nColumnWidthSum /= nCols;
     799           0 :             for(i = 0; i < nCols; ++i)
     800           0 :                 nColWidth[i] = nColumnWidthSum;
     801             :         }
     802           0 :         SwColLineAdj eAdj = pColMgr->GetAdjust();
     803           0 :         if( COLADJ_NONE == eAdj )       // the dialog doesn't know a NONE!
     804             :         {
     805           0 :             eAdj = COLADJ_TOP;
     806             :             //without Adjust no line type
     807           0 :             m_pLineTypeDLB->SelectEntryPos( 0 );
     808           0 :             m_pLineHeightEdit->SetValue( 100 );
     809             :         }
     810             :         else
     811             :         {
     812             :             // Need to multiply by 100 because of the 2 decimals
     813           0 :             m_pLineWidthEdit->SetValue( pColMgr->GetLineWidth() * 100, FUNIT_TWIP );
     814           0 :             m_pLineColorDLB->SelectEntry( pColMgr->GetLineColor() );
     815           0 :             m_pLineTypeDLB->SelectEntry( pColMgr->GetLineStyle() );
     816           0 :             m_pLineTypeDLB->SetWidth( pColMgr->GetLineWidth( ) );
     817           0 :             m_pLineHeightEdit->SetValue( pColMgr->GetLineHeightPercent() );
     818             : 
     819             :         }
     820           0 :         m_pLinePosDLB->SelectEntryPos( static_cast< sal_uInt16 >(eAdj - 1) );
     821             :     }
     822             :     else
     823             :     {
     824           0 :         m_pLinePosDLB->SelectEntryPos( 0 );
     825           0 :         m_pLineTypeDLB->SelectEntryPos( 0 );
     826           0 :         m_pLineHeightEdit->SetValue( 100 );
     827             :     }
     828             : 
     829           0 :     UpdateCols();
     830           0 :     Update();
     831             : 
     832             :         // set maximum number of columns
     833             :         // values below 1 are not allowed
     834             :     m_pCLNrEdt->SetMax(Max(1L,
     835           0 :         Min(long(nMaxCols), long( pColMgr->GetActualSize() / nMinWidth) )));
     836           0 : }
     837             : 
     838             : /*------------------------------------------------------------------------
     839             :  Description:   The number of columns has changed -- here the controls for
     840             :                 editing of the columns are en- or disabled according to the
     841             :                 column number.
     842             :                 In case there are more than nVisCols (=3) all Edit are being
     843             :                 enabled and the buttons for scrolling too.
     844             :                 Otherwise Edits are being enabled according to the column
     845             :                 numbers; one column can not be edited.
     846             : ------------------------------------------------------------------------*/
     847           0 : void SwColumnPage::UpdateCols()
     848             : {
     849           0 :     sal_Bool bEnableBtns= sal_False;
     850           0 :     sal_Bool bEnable12  = sal_False;
     851           0 :     sal_Bool bEnable3   = sal_False;
     852           0 :     const sal_Bool bEdit = !m_pAutoWidthBox->IsChecked();
     853           0 :     if ( nCols > nVisCols )
     854             :     {
     855           0 :         bEnableBtns = sal_True && !bHtmlMode;
     856           0 :         bEnable12 = bEnable3 = bEdit;
     857             :     }
     858           0 :     else if( bEdit )
     859             :     {
     860             :         // here are purposely hardly any breaks
     861           0 :         switch(nCols)
     862             :         {
     863           0 :             case 3: bEnable3 = sal_True;
     864           0 :             case 2: bEnable12= sal_True; break;
     865             :             default: /* do nothing */;
     866             :         }
     867             :     }
     868           0 :     aEd1.Enable( bEnable12 );
     869           0 :     aDistEd1.Enable(nCols > 1);
     870           0 :     aEd2.Enable( bEnable12 );
     871           0 :     aDistEd2.Enable(bEnable3);
     872           0 :     aEd3.Enable( bEnable3  );
     873           0 :     m_pLbl1->Enable(bEnable12 );
     874           0 :     m_pLbl2->Enable(bEnable12 );
     875           0 :     m_pLbl3->Enable(bEnable3  );
     876           0 :     m_pBtnBack->Enable( bEnableBtns );
     877           0 :     m_pBtnNext->Enable( bEnableBtns );
     878             : 
     879           0 :     const sal_Bool bEnable = nCols > 1;
     880           0 :     if( !bEnable )
     881             :     {
     882           0 :         m_pLinePosDLB->Enable( sal_False );
     883           0 :         m_pLinePosLbl->Enable( sal_False );
     884             :     }
     885           0 :     m_pLineHeightEdit->Enable( bEnable );
     886           0 :     m_pLineHeightLbl->Enable( bEnable );
     887           0 :     m_pLineTypeDLB->Enable( bEnable );
     888           0 :     m_pLineTypeLbl->Enable( bEnable );
     889           0 :     m_pLineWidthLbl->Enable( bEnable );
     890           0 :     m_pLineWidthEdit->Enable( bEnable );
     891           0 :     m_pLineColorDLB->Enable( bEnable );
     892           0 :     m_pLineColorLbl->Enable( bEnable );
     893           0 :     m_pAutoWidthBox->Enable( bEnable && !bHtmlMode );
     894           0 : }
     895             : 
     896           0 : void SwColumnPage::SetLabels( sal_uInt16 nVis )
     897             : {
     898           0 :     rtl::OUString sLbl( '~' );
     899             : 
     900           0 :     String sLbl2( String::CreateFromInt32( nVis + 1 ));
     901           0 :     String tmp1(sLbl2);
     902           0 :     sLbl2.Insert(sLbl, sLbl2.Len() - 1);
     903           0 :     m_pLbl1->SetText(sLbl2);
     904             : 
     905           0 :     sLbl2 = String::CreateFromInt32( nVis + 2 );
     906           0 :     String tmp2(sLbl2);
     907           0 :     sLbl2.Insert(sLbl, sLbl2.Len() - 1);
     908           0 :     m_pLbl2->SetText(sLbl2);
     909             : 
     910           0 :     sLbl2 = String::CreateFromInt32( nVis + 3 );
     911           0 :     String tmp3(sLbl2);
     912           0 :     sLbl2.Insert(sLbl, sLbl2.Len() - 1);
     913           0 :     m_pLbl3->SetText(sLbl2);
     914           0 :     String sColumnWidth = SW_RESSTR( STR_ACCESS_COLUMN_WIDTH ) ;
     915           0 :     sColumnWidth.SearchAndReplaceAscii("%1", tmp1);
     916           0 :     aEd1.SetAccessibleName(sColumnWidth);
     917             : 
     918           0 :     sColumnWidth = SW_RESSTR( STR_ACCESS_COLUMN_WIDTH ) ;
     919           0 :     sColumnWidth.SearchAndReplaceAscii("%1", tmp2);
     920           0 :     aEd2.SetAccessibleName(sColumnWidth);
     921             : 
     922           0 :     sColumnWidth = SW_RESSTR( STR_ACCESS_COLUMN_WIDTH ) ;
     923           0 :     sColumnWidth.SearchAndReplaceAscii("%1", tmp3);
     924           0 :     aEd3.SetAccessibleName(sColumnWidth);
     925             : 
     926           0 :     String sDist = SW_RESSTR( STR_ACCESS_PAGESETUP_SPACING ) ;
     927           0 :     String sDist1 = sDist;
     928           0 :     sDist1.SearchAndReplaceAscii("%1", tmp1);
     929           0 :     sDist1.SearchAndReplaceAscii("%2", tmp2);
     930           0 :     aDistEd1.SetAccessibleName(sDist1);
     931             : 
     932           0 :     String sDist2 = sDist;
     933           0 :     sDist2.SearchAndReplaceAscii("%1", tmp2);
     934           0 :     sDist2.SearchAndReplaceAscii("%2", tmp3);
     935           0 :     aDistEd2.SetAccessibleName(sDist2);
     936           0 : }
     937             : 
     938             : /*------------------------------------------------------------------------
     939             :  Description:   Handler that is called at alteration of the column number.
     940             :                 An alteration of the column number overwrites potential
     941             :                 user's width settings; all columns are equally wide.
     942             : ------------------------------------------------------------------------*/
     943           0 : IMPL_LINK( SwColumnPage, ColModify, NumericField *, pNF )
     944             : {
     945           0 :     nCols = (sal_uInt16)m_pCLNrEdt->GetValue();
     946             :     //#107890# the handler is also called from LoseFocus()
     947             :     //then no change has been made and thus no action should be taken
     948             :     // #i17816# changing the displayed types within the ValueSet
     949             :     //from two columns to two columns with different settings doesn't invalidate the
     950             :     // example windows in ::ColModify()
     951           0 :     if (!pNF || pColMgr->GetCount() != nCols)
     952             :     {
     953           0 :         if(pNF)
     954           0 :             m_pDefaultVS->SetNoSelection();
     955           0 :         long nDist = static_cast< long >(aDistEd1.DenormalizePercent(aDistEd1.GetValue(FUNIT_TWIP)));
     956           0 :         pColMgr->SetCount(nCols, (sal_uInt16)nDist);
     957           0 :         for(sal_uInt16 i = 0; i < nCols; i++)
     958           0 :             nColDist[i] = nDist;
     959           0 :         nFirstVis = 0;
     960           0 :         SetLabels( nFirstVis );
     961           0 :         UpdateCols();
     962           0 :         ResetColWidth();
     963           0 :         Update();
     964             :     }
     965             : 
     966           0 :     return 0;
     967             : }
     968             : 
     969             : /*------------------------------------------------------------------------
     970             :  Description:   Modify handler for an alteration of the column width or
     971             :                 the column gap.
     972             :                 These changes take effect time-displaced. With an
     973             :                 alteration of the column width the automatic calculation
     974             :                 of the column width is overruled; only an alteration
     975             :                 of the column number leads back to that default.
     976             : ------------------------------------------------------------------------*/
     977           0 : IMPL_LINK( SwColumnPage, GapModify, PercentFieldWrap *, pFld )
     978             : {
     979           0 :     long nActValue = static_cast< long >(pFld->DenormalizePercent(pFld->GetValue(FUNIT_TWIP)));
     980           0 :     if(nCols < 2)
     981           0 :         return 0;
     982           0 :     if(m_pAutoWidthBox->IsChecked())
     983             :     {
     984           0 :         sal_uInt16 nMaxGap = pColMgr->GetActualSize() - nCols * MINLAY;
     985             :         OSL_ENSURE(nCols, "Abstand kann nicht ohne Spalten eingestellt werden");
     986           0 :         nMaxGap /= nCols - 1;
     987           0 :         if(nActValue > nMaxGap)
     988             :         {
     989           0 :             nActValue = nMaxGap;
     990           0 :             aDistEd1.SetPrcntValue(aDistEd1.NormalizePercent(nMaxGap), FUNIT_TWIP);
     991             :         }
     992           0 :         pColMgr->SetGutterWidth((sal_uInt16)nActValue);
     993           0 :         for(sal_uInt16 i = 0; i < nCols; i++)
     994           0 :             nColDist[i] = nActValue;
     995             : 
     996           0 :         ResetColWidth();
     997           0 :         UpdateCols();
     998             :     }
     999             :     else
    1000             : 
    1001             :     {
    1002           0 :         sal_uInt16 nOffset = 0;
    1003           0 :         if(pFld == &aDistEd2)
    1004             :         {
    1005           0 :             nOffset = 1;
    1006             :         }
    1007           0 :         long nDiff = nActValue - nColDist[nFirstVis + nOffset];
    1008           0 :         if(nDiff)
    1009             :         {
    1010           0 :             long nLeft = nColWidth[nFirstVis + nOffset];
    1011           0 :             long nRight = nColWidth[nFirstVis + nOffset + 1];
    1012           0 :             if(nLeft + nRight + 2 * MINLAY < nDiff)
    1013           0 :                 nDiff = nLeft + nRight - 2 * MINLAY;
    1014           0 :             if(nDiff < nRight - MINLAY)
    1015             :             {
    1016           0 :                 nRight -= nDiff;
    1017             :             }
    1018             :             else
    1019             :             {
    1020           0 :                 long nTemp = nDiff - nRight + MINLAY;
    1021           0 :                 nRight = MINLAY;
    1022           0 :                 if(nLeft > nTemp - MINLAY)
    1023             :                 {
    1024           0 :                     nLeft -= nTemp;
    1025           0 :                     nTemp = 0;
    1026             :                 }
    1027             :                 else
    1028             :                 {
    1029           0 :                     nTemp -= nLeft + MINLAY;
    1030           0 :                     nLeft = MINLAY;
    1031             :                 }
    1032           0 :                 nDiff = nTemp;
    1033             :             }
    1034           0 :             nColWidth[nFirstVis + nOffset] = nLeft;
    1035           0 :             nColWidth[nFirstVis + nOffset + 1] = nRight;
    1036           0 :             nColDist[nFirstVis + nOffset] += nDiff;
    1037             : 
    1038           0 :             pColMgr->SetColWidth( nFirstVis + nOffset, sal_uInt16(nLeft) );
    1039           0 :             pColMgr->SetColWidth( nFirstVis + nOffset + 1, sal_uInt16(nRight) );
    1040           0 :             pColMgr->SetGutterWidth( sal_uInt16(nColDist[nFirstVis + nOffset]), nFirstVis + nOffset );
    1041             :         }
    1042             : 
    1043             :     }
    1044           0 :     Update();
    1045           0 :     return 0;
    1046             : }
    1047             : 
    1048           0 : IMPL_LINK( SwColumnPage, EdModify, PercentFieldWrap *, pField )
    1049             : {
    1050           0 :     pModifiedField = pField;
    1051           0 :     Timeout();
    1052           0 :     return 0;
    1053             : }
    1054             : 
    1055             : /*------------------------------------------------------------------------
    1056             :  Description:   Handler behind the Checkbox for automatic width.
    1057             :                 When the box is checked no expicit values for the column
    1058             :                 width can be entered.
    1059             : ------------------------------------------------------------------------*/
    1060           0 : IMPL_LINK( SwColumnPage, AutoWidthHdl, CheckBox *, pBox )
    1061             : {
    1062           0 :     long nDist = static_cast< long >(aDistEd1.DenormalizePercent(aDistEd1.GetValue(FUNIT_TWIP)));
    1063           0 :     pColMgr->SetCount(nCols, (sal_uInt16)nDist);
    1064           0 :     for(sal_uInt16 i = 0; i < nCols; i++)
    1065           0 :         nColDist[i] = nDist;
    1066           0 :     if(pBox->IsChecked())
    1067             :     {
    1068           0 :         pColMgr->SetGutterWidth(sal_uInt16(nDist));
    1069           0 :         ResetColWidth();
    1070             :     }
    1071           0 :     pColMgr->SetAutoWidth(pBox->IsChecked(), sal_uInt16(nDist));
    1072           0 :     UpdateCols();
    1073           0 :     Update();
    1074           0 :     return 0;
    1075             : }
    1076             : 
    1077             : /*------------------------------------------------------------------------
    1078             :  Description:   scroll up the contents of the edits
    1079             : ------------------------------------------------------------------------*/
    1080           0 : IMPL_LINK_NOARG(SwColumnPage, Up)
    1081             : {
    1082           0 :     if( nFirstVis )
    1083             :     {
    1084           0 :         --nFirstVis;
    1085           0 :         SetLabels( nFirstVis );
    1086           0 :         Update();
    1087             :     }
    1088           0 :     return 0;
    1089             : }
    1090             : 
    1091             : /*------------------------------------------------------------------------
    1092             :  Description:   scroll down the contents of the edits.
    1093             : ------------------------------------------------------------------------*/
    1094           0 : IMPL_LINK_NOARG(SwColumnPage, Down)
    1095             : {
    1096           0 :     if( nFirstVis + nVisCols < nCols )
    1097             :     {
    1098           0 :         ++nFirstVis;
    1099           0 :         SetLabels( nFirstVis );
    1100           0 :         Update();
    1101             :     }
    1102           0 :     return 0;
    1103             : }
    1104             : 
    1105             : /*------------------------------------------------------------------------
    1106             :  Description:   relict from ancient times - now directly without time
    1107             :                 handler; triggered by an alteration of the column width
    1108             :                 or the column gap.
    1109             : ------------------------------------------------------------------------*/
    1110           0 : void SwColumnPage::Timeout()
    1111             : {
    1112             :     DBG_PROFSTART(columnhdl) ;
    1113           0 :     if(pModifiedField)
    1114             :     {
    1115             :             // find the changed column
    1116           0 :         sal_uInt16 nChanged = nFirstVis;
    1117           0 :         if(pModifiedField == &aEd2)
    1118           0 :             ++nChanged;
    1119           0 :         else if(pModifiedField == &aEd3)
    1120           0 :             nChanged += 2;
    1121             : 
    1122             :         long nNewWidth = (sal_uInt16)
    1123           0 :             pModifiedField->DenormalizePercent(pModifiedField->GetValue(FUNIT_TWIP));
    1124           0 :         long nDiff = nNewWidth - nColWidth[nChanged];
    1125             : 
    1126             :         // when it's the last column
    1127           0 :         if(nChanged == nCols - 1)
    1128             :         {
    1129           0 :             nColWidth[0] -= nDiff;
    1130           0 :             if(nColWidth[0] < (long)nMinWidth)
    1131             :             {
    1132           0 :                 nNewWidth -= nMinWidth - nColWidth[0];
    1133           0 :                 nColWidth[0] = nMinWidth;
    1134             :             }
    1135             : 
    1136             :         }
    1137           0 :         else if(nDiff)
    1138             :         {
    1139           0 :             nColWidth[nChanged + 1] -= nDiff;
    1140           0 :             if(nColWidth[nChanged + 1] < (long) nMinWidth)
    1141             :             {
    1142           0 :                 nNewWidth -= nMinWidth - nColWidth[nChanged + 1];
    1143           0 :                 nColWidth[nChanged + 1] = nMinWidth;
    1144             :             }
    1145             :         }
    1146           0 :         nColWidth[nChanged] = nNewWidth;
    1147           0 :         pModifiedField = 0;
    1148             :     }
    1149           0 :     Update();
    1150             :     DBG_PROFSTOP(columnhdl) ;
    1151           0 : }
    1152             : 
    1153             : /*------------------------------------------------------------------------
    1154             :  Description:   Update the view
    1155             : ------------------------------------------------------------------------*/
    1156           0 : void SwColumnPage::Update()
    1157             : {
    1158           0 :     m_pBalanceColsCB->Enable(nCols > 1);
    1159           0 :     if(nCols >= 2)
    1160             :     {
    1161           0 :         aEd1.SetPrcntValue(aEd1.NormalizePercent(nColWidth[nFirstVis]), FUNIT_TWIP);
    1162           0 :         aDistEd1.SetPrcntValue(aDistEd1.NormalizePercent(nColDist[nFirstVis]), FUNIT_TWIP);
    1163           0 :         aEd2.SetPrcntValue(aEd2.NormalizePercent(nColWidth[nFirstVis + 1]), FUNIT_TWIP);
    1164           0 :         if(nCols >= 3)
    1165             :         {
    1166           0 :             aDistEd2.SetPrcntValue(aDistEd2.NormalizePercent(nColDist[nFirstVis + 1]), FUNIT_TWIP);
    1167           0 :             aEd3.SetPrcntValue(aEd3.NormalizePercent(nColWidth[nFirstVis + 2]), FUNIT_TWIP);
    1168             :         }
    1169             :         else
    1170             :         {
    1171           0 :             aEd3.SetText(aEmptyStr);
    1172           0 :             aDistEd2.SetText(aEmptyStr);
    1173             :         }
    1174             :     }
    1175             :     else
    1176             :     {
    1177           0 :         aEd1.SetText(aEmptyStr);
    1178           0 :         aEd2.SetText(aEmptyStr);
    1179           0 :         aEd3.SetText(aEmptyStr);
    1180           0 :         aDistEd1.SetText(aEmptyStr);
    1181           0 :         aDistEd2.SetText(aEmptyStr);
    1182             :     }
    1183           0 :     UpdateColMgr(0);
    1184           0 : }
    1185             : 
    1186             : /*--------------------------------------------------------------------
    1187             :     Description:    Update Bsp
    1188             :  --------------------------------------------------------------------*/
    1189           0 : void SwColumnPage::ActivatePage(const SfxItemSet& rSet)
    1190             : {
    1191           0 :     if(!bFrm)
    1192             :     {
    1193           0 :         if( SFX_ITEM_SET == rSet.GetItemState( SID_ATTR_PAGE_SIZE ))
    1194             :         {
    1195             :             const SvxSizeItem& rSize = (const SvxSizeItem&)rSet.Get(
    1196           0 :                                                 SID_ATTR_PAGE_SIZE);
    1197             :             const SvxLRSpaceItem& rLRSpace = (const SvxLRSpaceItem&)rSet.Get(
    1198           0 :                                                                 RES_LR_SPACE );
    1199           0 :             const SvxBoxItem& rBox = (const SvxBoxItem&) rSet.Get(RES_BOX);
    1200           0 :             sal_uInt16 nActWidth = static_cast< sal_uInt16 >(rSize.GetSize().Width()
    1201           0 :                             - rLRSpace.GetLeft() - rLRSpace.GetRight() - rBox.GetDistance());
    1202             : 
    1203           0 :             if( pColMgr->GetActualSize() != nActWidth)
    1204             :             {
    1205           0 :                 pColMgr->SetActualWidth(nActWidth);
    1206           0 :                 ColModify( 0 );
    1207           0 :                 UpdateColMgr( 0 );
    1208             :             }
    1209             :         }
    1210           0 :         m_pFrmExampleWN->Hide();
    1211           0 :         m_pPgeExampleWN->UpdateExample( rSet, pColMgr );
    1212           0 :         m_pPgeExampleWN->Show();
    1213             : 
    1214             :     }
    1215             :     else
    1216             :     {
    1217           0 :         m_pPgeExampleWN->Hide();
    1218           0 :         m_pFrmExampleWN->Show();
    1219             : 
    1220             :         // Size
    1221           0 :         const SwFmtFrmSize& rSize = (const SwFmtFrmSize&)rSet.Get(RES_FRM_SIZE);
    1222           0 :         const SvxBoxItem& rBox = (const SvxBoxItem&) rSet.Get(RES_BOX);
    1223             : 
    1224           0 :         long nDistance = rBox.GetDistance();
    1225           0 :         const sal_uInt16 nTotalWish = bFormat ? FRAME_FORMAT_WIDTH : sal_uInt16(rSize.GetWidth() - 2 * nDistance);
    1226             : 
    1227             :         // set maximum values of column width
    1228           0 :         SetPageWidth(nTotalWish);
    1229             : 
    1230           0 :         if(pColMgr->GetActualSize() != nTotalWish)
    1231             :         {
    1232           0 :             pColMgr->SetActualWidth(nTotalWish);
    1233           0 :             Init();
    1234             :         }
    1235             :         sal_Bool bPercent;
    1236             :         // only relative data in frame format
    1237           0 :         if ( bFormat || (rSize.GetWidthPercent() && rSize.GetWidthPercent() != 0xff) )
    1238             :         {
    1239             :             // set value for 100%
    1240           0 :             aEd1.SetRefValue(nTotalWish);
    1241           0 :             aEd2.SetRefValue(nTotalWish);
    1242           0 :             aEd3.SetRefValue(nTotalWish);
    1243           0 :             aDistEd1.SetRefValue(nTotalWish);
    1244           0 :             aDistEd2.SetRefValue(nTotalWish);
    1245             : 
    1246             :             // switch to %-view
    1247           0 :             bPercent = sal_True;
    1248             :         }
    1249             :         else
    1250           0 :             bPercent = sal_False;
    1251             : 
    1252           0 :         aEd1.ShowPercent(bPercent);
    1253           0 :         aEd2.ShowPercent(bPercent);
    1254           0 :         aEd3.ShowPercent(bPercent);
    1255           0 :         aDistEd1.ShowPercent(bPercent);
    1256           0 :         aDistEd2.ShowPercent(bPercent);
    1257           0 :         aDistEd1.SetMetricFieldMin(0);
    1258           0 :         aDistEd2.SetMetricFieldMin(0);
    1259             :     }
    1260           0 :     Update();
    1261           0 : }
    1262             : 
    1263           0 : int SwColumnPage::DeactivatePage(SfxItemSet *_pSet)
    1264             : {
    1265           0 :     if(_pSet)
    1266           0 :         FillItemSet(*_pSet);
    1267             : 
    1268           0 :     return sal_True;
    1269             : }
    1270             : 
    1271           0 : sal_uInt16* SwColumnPage::GetRanges()
    1272             : {
    1273           0 :     return aPageRg;
    1274             : }
    1275             : 
    1276           0 : IMPL_LINK( SwColumnPage, SetDefaultsHdl, ValueSet *, pVS )
    1277             : {
    1278           0 :     sal_uInt16 nItem = pVS->GetSelectItemId();
    1279           0 :     if( nItem < 4 )
    1280             :     {
    1281           0 :         m_pCLNrEdt->SetValue( nItem );
    1282           0 :         m_pAutoWidthBox->Check();
    1283           0 :         aDistEd1.SetPrcntValue(0);
    1284           0 :         ColModify(0);
    1285             :     }
    1286             :     else
    1287             :     {
    1288           0 :         bLockUpdate = sal_True;
    1289           0 :         m_pCLNrEdt->SetValue( 2 );
    1290           0 :         m_pAutoWidthBox->Check(sal_False);
    1291           0 :         aDistEd1.SetPrcntValue(0);
    1292           0 :         ColModify(0);
    1293             :         // now set the width ratio to 2 : 1 or 1 : 2 respectively
    1294           0 :         sal_uInt16 nSmall = pColMgr->GetActualSize()  / 3;
    1295           0 :         if(nItem == 4)
    1296             :         {
    1297           0 :             aEd2.SetPrcntValue(aEd2.NormalizePercent(long(nSmall)), FUNIT_TWIP);
    1298           0 :             pModifiedField = &aEd2;
    1299             :         }
    1300             :         else
    1301             :         {
    1302           0 :             aEd1.SetPrcntValue(aEd1.NormalizePercent(long(nSmall)), FUNIT_TWIP);
    1303           0 :             pModifiedField = &aEd1;
    1304             :         }
    1305           0 :         bLockUpdate = sal_False;
    1306           0 :         Timeout();
    1307             : 
    1308             :     }
    1309           0 :     return 0;
    1310             : }
    1311             : 
    1312           0 : void SwColumnPage::SetFrmMode(sal_Bool bMod)
    1313             : {
    1314           0 :     bFrm = bMod;
    1315           0 : }
    1316             : 
    1317           0 : void SwColumnPage::SetInSection(sal_Bool bSet)
    1318             : {
    1319           0 :     if(!SW_MOD()->GetCTLOptions().IsCTLFontEnabled())
    1320           0 :         return;
    1321             : 
    1322           0 :     m_pTextDirectionFT->Show(bSet);
    1323           0 :     m_pTextDirectionLB->Show(bSet);
    1324             : }
    1325             : 
    1326           0 : void ColumnValueSet::UserDraw( const UserDrawEvent& rUDEvt )
    1327             : {
    1328           0 :     OutputDevice*  pDev = rUDEvt.GetDevice();
    1329           0 :     const StyleSettings& rStyleSettings = GetSettings().GetStyleSettings();
    1330             : 
    1331           0 :     Rectangle aRect = rUDEvt.GetRect();
    1332           0 :     sal_uInt16  nItemId = rUDEvt.GetItemId();
    1333           0 :     long nRectWidth = aRect.GetWidth();
    1334           0 :     long nRectHeight = aRect.GetHeight();
    1335             : 
    1336           0 :     Point aBLPos = aRect.TopLeft();
    1337           0 :     Color aFillColor(pDev->GetFillColor());
    1338           0 :     Color aLineColor(pDev->GetLineColor());
    1339           0 :     pDev->SetFillColor(rStyleSettings.GetFieldColor());
    1340           0 :     pDev->SetLineColor(SwViewOption::GetFontColor());
    1341             : 
    1342           0 :     long nStep = Abs(Abs(nRectHeight * 95 /100) / 11);
    1343           0 :     long nTop = (nRectHeight - 11 * nStep ) / 2;
    1344           0 :     sal_uInt16 nCols = 0;
    1345             :     long nStarts[3];
    1346             :     long nEnds[3];
    1347           0 :     nStarts[0] = nRectWidth * 10 / 100;
    1348           0 :     switch( nItemId )
    1349             :     {
    1350             :         case 1:
    1351           0 :             nEnds[0] = nRectWidth * 9 / 10;
    1352           0 :             nCols = 1;
    1353           0 :         break;
    1354           0 :         case 2: nCols = 2;
    1355           0 :             nEnds[0] = nRectWidth * 45 / 100;
    1356           0 :             nStarts[1] = nEnds[0] + nStep;
    1357           0 :             nEnds[1] = nRectWidth * 9 / 10;
    1358           0 :         break;
    1359           0 :         case 3: nCols = 3;
    1360           0 :             nEnds[0]    = nRectWidth * 30 / 100;
    1361           0 :             nStarts[1]  = nEnds[0] + nStep;
    1362           0 :             nEnds[1]    = nRectWidth * 63 / 100;
    1363           0 :             nStarts[2]  = nEnds[1] + nStep;
    1364           0 :             nEnds[2]    = nRectWidth * 9 / 10;
    1365           0 :         break;
    1366           0 :         case 4: nCols = 2;
    1367           0 :             nEnds[0] = nRectWidth * 63 / 100;
    1368           0 :             nStarts[1] = nEnds[0] + nStep;
    1369           0 :             nEnds[1] = nRectWidth * 9 / 10;
    1370           0 :         break;
    1371           0 :         case 5: nCols = 2;
    1372           0 :             nEnds[0] = nRectWidth * 30 / 100;
    1373           0 :             nStarts[1] = nEnds[0] + nStep;
    1374           0 :             nEnds[1] = nRectWidth * 9 / 10;
    1375           0 :         break;
    1376             :     }
    1377           0 :     for(sal_uInt16 j = 0; j < nCols; j++ )
    1378             :     {
    1379           0 :         Point aStart(aBLPos.X() + nStarts[j], 0);
    1380           0 :         Point aEnd(aBLPos.X() + nEnds[j], 0);
    1381           0 :         for( sal_uInt16 i = 0; i < 12; i ++)
    1382             :         {
    1383           0 :             aStart.Y() = aEnd.Y() = aBLPos.Y() + nTop + i * nStep;
    1384           0 :             pDev->DrawLine(aStart, aEnd);
    1385             :         }
    1386             :     }
    1387           0 :     pDev->SetFillColor(aFillColor);
    1388           0 :     pDev->SetLineColor(aLineColor);
    1389           0 : }
    1390             : 
    1391           0 : void ColumnValueSet::DataChanged( const DataChangedEvent& rDCEvt )
    1392             : {
    1393           0 :     if ( (rDCEvt.GetType() == DATACHANGED_SETTINGS) &&
    1394           0 :          (rDCEvt.GetFlags() & SETTINGS_STYLE) )
    1395             :     {
    1396           0 :         Format();
    1397             :     }
    1398           0 :     ValueSet::DataChanged( rDCEvt );
    1399           0 : }
    1400             : 
    1401           0 : extern "C" SAL_DLLPUBLIC_EXPORT Window* SAL_CALL makeColumnValueSet(Window *pParent, VclBuilder::stringmap &)
    1402             : {
    1403           0 :     return new ColumnValueSet(pParent);
    1404           0 : }
    1405             : 
    1406             : /* vim:set shiftwidth=4 softtabstop=4 expandtab: */

Generated by: LCOV version 1.10