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

Generated by: LCOV version 1.11