LCOV - code coverage report
Current view: top level - sw/source/ui/table - tabledlg.cxx (source / functions) Hit Total Coverage
Test: commit 10e77ab3ff6f4314137acd6e2702a6e5c1ce1fae Lines: 0 1020 0.0 %
Date: 2014-11-03 Functions: 0 64 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 <hintids.hxx>
      21             : #include <comphelper/string.hxx>
      22             : #include <vcl/layout.hxx>
      23             : #include <vcl/msgbox.hxx>
      24             : #include <svl/stritem.hxx>
      25             : #include <svl/intitem.hxx>
      26             : #include <editeng/keepitem.hxx>
      27             : #include <editeng/formatbreakitem.hxx>
      28             : #include <editeng/ulspitem.hxx>
      29             : #include <editeng/frmdiritem.hxx>
      30             : #include <svl/ctloptions.hxx>
      31             : #include <swmodule.hxx>
      32             : #include <fmtornt.hxx>
      33             : #include <fmtpdsc.hxx>
      34             : #include <fmtlsplt.hxx>
      35             : 
      36             : #include <svtools/htmlcfg.hxx>
      37             : #include <fmtrowsplt.hxx>
      38             : #include <sfx2/htmlmode.hxx>
      39             : 
      40             : #include "access.hrc"
      41             : 
      42             : #include <docsh.hxx>
      43             : #include <wrtsh.hxx>
      44             : #include <view.hxx>
      45             : #include <viewopt.hxx>
      46             : #include <uitool.hxx>
      47             : #include <frmatr.hxx>
      48             : #include <tabledlg.hxx>
      49             : #include <../../uibase/table/tablepg.hxx>
      50             : #include <tablemgr.hxx>
      51             : #include <pagedesc.hxx>
      52             : #include <uiitems.hxx>
      53             : #include <poolfmt.hxx>
      54             : #include <SwStyleNameMapper.hxx>
      55             : 
      56             : #include <app.hrc>
      57             : #include <cmdid.h>
      58             : #include <table.hrc>
      59             : #include <svx/svxids.hrc>
      60             : #include <svx/dialogs.hrc>
      61             : #include <svx/flagsdef.hxx>
      62             : #include <svx/svxdlg.hxx>
      63             : 
      64             : using namespace ::com::sun::star;
      65             : 
      66           0 : SwFormatTablePage::SwFormatTablePage(vcl::Window* pParent, const SfxItemSet& rSet)
      67             :     : SfxTabPage(pParent, "FormatTablePage", "modules/swriter/ui/formattablepage.ui", &rSet)
      68             :     , m_aTextFilter(" .<>")
      69             :     , pTblData(0)
      70             :     , nSaveWidth(0)
      71             :     , nMinTableWidth(MINLAY)
      72             :     , bModified(false)
      73             :     , bFull(false)
      74           0 :     , bHtmlMode(false)
      75             : {
      76           0 :     get(m_pNameED, "name");
      77           0 :     get(m_pWidthFT, "widthft");
      78           0 :     m_aWidthMF.set(get<MetricField>("widthmf"));
      79           0 :     m_aLeftMF.set(get<MetricField>("leftmf"));
      80           0 :     m_aRightMF.set(get<MetricField>("rightmf"));
      81           0 :     get(m_pRelWidthCB, "relwidth");
      82           0 :     get(m_pFullBtn, "full");
      83           0 :     get(m_pLeftBtn, "left");
      84           0 :     get(m_pFromLeftBtn, "fromleft");
      85           0 :     get(m_pRightBtn, "right");
      86           0 :     get(m_pCenterBtn, "center");
      87           0 :     get(m_pFreeBtn, "free");
      88           0 :     get(m_pLeftFT, "leftft");
      89           0 :     get(m_pRightFT, "rightft");
      90           0 :     get(m_pTopFT, "aboveft");
      91           0 :     get(m_pTopMF, "abovemf");
      92           0 :     get(m_pBottomFT, "belowft");
      93           0 :     get(m_pBottomMF, "belowmf");
      94           0 :     get(m_pTextDirectionLB, "textdirection");
      95             : 
      96           0 :     SetExchangeSupport();
      97             : 
      98             :     const SfxPoolItem* pItem;
      99           0 :     if(SfxItemState::SET == rSet.GetItemState(SID_HTML_MODE, false, &pItem))
     100           0 :         bHtmlMode = 0 != (((const SfxUInt16Item*)pItem)->GetValue() & HTMLMODE_ON);
     101             : 
     102           0 :     bool bCTL = SW_MOD()->GetCTLOptions().IsCTLFontEnabled();
     103           0 :     get<VclContainer>("properties")->Show(!bHtmlMode && bCTL);
     104             : 
     105           0 :     Init();
     106           0 : }
     107             : 
     108           0 : void  SwFormatTablePage::Init()
     109             : {
     110           0 :     m_aLeftMF.SetMetricFieldMin(-999999);
     111           0 :     m_aRightMF.SetMetricFieldMin(-999999);
     112             : 
     113             :     //handler
     114           0 :     Link aLk = LINK( this, SwFormatTablePage, AutoClickHdl );
     115           0 :     m_pFullBtn->SetClickHdl( aLk );
     116           0 :     m_pFreeBtn->SetClickHdl( aLk );
     117           0 :     m_pLeftBtn->SetClickHdl( aLk );
     118           0 :     m_pFromLeftBtn->SetClickHdl( aLk );
     119           0 :     m_pRightBtn->SetClickHdl( aLk );
     120           0 :     m_pCenterBtn->SetClickHdl( aLk );
     121             : 
     122           0 :     aLk = LINK( this, SwFormatTablePage, UpDownLoseFocusHdl );
     123           0 :     m_pTopMF->SetUpHdl( aLk );
     124           0 :     m_pBottomMF->SetUpHdl( aLk );
     125           0 :     m_aRightMF.SetUpHdl( aLk );
     126           0 :     m_aLeftMF.SetUpHdl( aLk );
     127           0 :     m_aWidthMF.SetUpHdl( aLk );
     128             : 
     129           0 :     m_pTopMF->SetDownHdl( aLk );
     130           0 :     m_pBottomMF->SetDownHdl( aLk );
     131           0 :     m_aRightMF.SetDownHdl( aLk );
     132           0 :     m_aLeftMF.SetDownHdl( aLk );
     133           0 :     m_aWidthMF.SetDownHdl( aLk );
     134             : 
     135           0 :     m_pTopMF->SetLoseFocusHdl( aLk );
     136           0 :     m_pBottomMF->SetLoseFocusHdl( aLk );
     137           0 :     m_aRightMF.SetLoseFocusHdl( aLk );
     138           0 :     m_aLeftMF.SetLoseFocusHdl( aLk );
     139           0 :     m_aWidthMF.SetLoseFocusHdl( aLk );
     140             : 
     141           0 :     m_pRelWidthCB->SetClickHdl(LINK( this, SwFormatTablePage, RelWidthClickHdl ));
     142           0 : }
     143             : 
     144           0 : IMPL_LINK( SwFormatTablePage, RelWidthClickHdl, CheckBox *, pBtn )
     145             : {
     146             :     OSL_ENSURE(pTblData, "table data not available?");
     147           0 :     bool bIsChecked = pBtn->IsChecked();
     148           0 :     sal_Int64 nLeft  = m_aLeftMF.DenormalizePercent(m_aLeftMF.GetValue(FUNIT_TWIP ));
     149           0 :     sal_Int64 nRight = m_aRightMF.DenormalizePercent(m_aRightMF.GetValue(FUNIT_TWIP ));
     150           0 :     m_aWidthMF.ShowPercent(bIsChecked);
     151           0 :     m_aLeftMF.ShowPercent(bIsChecked);
     152           0 :     m_aRightMF.ShowPercent(bIsChecked);
     153             : 
     154           0 :     if (bIsChecked)
     155             :     {
     156           0 :         m_aWidthMF.SetRefValue(pTblData->GetSpace());
     157           0 :         m_aLeftMF.SetRefValue(pTblData->GetSpace());
     158           0 :         m_aRightMF.SetRefValue(pTblData->GetSpace());
     159           0 :         m_aLeftMF.SetMetricFieldMin(0); //will be overwritten by the Percentfield
     160           0 :         m_aRightMF.SetMetricFieldMin(0); //dito
     161           0 :         m_aLeftMF.SetMetricFieldMax(99);
     162           0 :         m_aRightMF.SetMetricFieldMax(99);
     163           0 :         m_aLeftMF.SetPrcntValue(m_aLeftMF.NormalizePercent(nLeft ), FUNIT_TWIP );
     164           0 :         m_aRightMF.SetPrcntValue(m_aRightMF.NormalizePercent(nRight ), FUNIT_TWIP );
     165             :     }
     166             :     else
     167           0 :         ModifyHdl(m_aLeftMF.get());    //correct values again
     168             : 
     169           0 :     if(m_pFreeBtn->IsChecked())
     170             :     {
     171           0 :         bool bEnable = !pBtn->IsChecked();
     172           0 :         m_aRightMF.Enable(bEnable);
     173           0 :         m_pRightFT->Enable(bEnable);
     174             :     }
     175           0 :     bModified = true;
     176             : 
     177           0 :     return 0;
     178             : }
     179             : 
     180           0 : IMPL_LINK( SwFormatTablePage, AutoClickHdl, CheckBox *, pBox )
     181             : {
     182           0 :     bool bRestore = true,
     183           0 :          bLeftEnable = false,
     184           0 :          bRightEnable= false,
     185           0 :          bWidthEnable= false,
     186           0 :          bOthers = true;
     187           0 :     if ((RadioButton *)pBox == m_pFullBtn)
     188             :     {
     189           0 :         m_aLeftMF.SetPrcntValue(0);
     190           0 :         m_aRightMF.SetPrcntValue(0);
     191           0 :         nSaveWidth = static_cast< SwTwips >(m_aWidthMF.DenormalizePercent(m_aWidthMF.GetValue(FUNIT_TWIP )));
     192           0 :         m_aWidthMF.SetPrcntValue(m_aWidthMF.NormalizePercent(pTblData->GetSpace() ), FUNIT_TWIP );
     193           0 :         bFull = true;
     194           0 :         bRestore = false;
     195             :     }
     196           0 :     else if ((RadioButton *)pBox == m_pLeftBtn)
     197             :     {
     198           0 :         bRightEnable = bWidthEnable = true;
     199           0 :         m_aLeftMF.SetPrcntValue(0);
     200             :     }
     201           0 :     else if ((RadioButton *) pBox == m_pFromLeftBtn)
     202             :     {
     203           0 :         bLeftEnable = bWidthEnable = true;
     204           0 :         m_aRightMF.SetPrcntValue(0);
     205             :     }
     206           0 :     else if ((RadioButton *) pBox == m_pRightBtn)
     207             :     {
     208           0 :         bLeftEnable = bWidthEnable = true;
     209           0 :         m_aRightMF.SetPrcntValue(0);
     210             :     }
     211           0 :     else if ((RadioButton *) pBox == m_pCenterBtn)
     212             :     {
     213           0 :         bLeftEnable = bWidthEnable = true;
     214             :     }
     215           0 :     else if ((RadioButton *) pBox == m_pFreeBtn)
     216             :     {
     217           0 :         RightModify();
     218           0 :         bLeftEnable = true;
     219           0 :         bWidthEnable = true;
     220           0 :         bOthers = false;
     221             :     }
     222           0 :     m_aLeftMF.Enable(bLeftEnable);
     223           0 :     m_pLeftFT->Enable(bLeftEnable);
     224           0 :     m_aWidthMF.Enable(bWidthEnable);
     225           0 :     m_pWidthFT->Enable(bWidthEnable);
     226           0 :     if ( bOthers )
     227             :     {
     228           0 :         m_aRightMF.Enable(bRightEnable);
     229           0 :         m_pRightFT->Enable(bRightEnable);
     230           0 :         m_pRelWidthCB->Enable(bWidthEnable);
     231             :     }
     232             : 
     233           0 :     if(bFull && bRestore)
     234             :     {
     235             :         //After being switched on automatic, the width was pinned
     236             :         //in order to restore the width while switching back to.
     237           0 :         bFull = false;
     238           0 :         m_aWidthMF.SetPrcntValue(m_aWidthMF.NormalizePercent(nSaveWidth ), FUNIT_TWIP );
     239             :     }
     240           0 :     ModifyHdl(m_aWidthMF.get());
     241           0 :     bModified = true;
     242           0 :     return 0;
     243             : }
     244             : 
     245           0 : void SwFormatTablePage::RightModify()
     246             : {
     247           0 :     if(m_pFreeBtn->IsChecked())
     248             :     {
     249           0 :         bool bEnable = m_aRightMF.GetValue() == 0;
     250           0 :         m_pRelWidthCB->Enable(bEnable);
     251           0 :         if ( !bEnable )
     252             :         {
     253           0 :             m_pRelWidthCB->Check(false);
     254           0 :             RelWidthClickHdl(m_pRelWidthCB);
     255             :         }
     256           0 :         bEnable = m_pRelWidthCB->IsChecked();
     257           0 :         m_aRightMF.Enable(!bEnable);
     258           0 :         m_pRightFT->Enable(!bEnable);
     259             :     }
     260           0 : }
     261             : 
     262           0 : IMPL_LINK_INLINE_START( SwFormatTablePage, UpDownLoseFocusHdl, MetricField *, pEdit )
     263             : {
     264           0 :     if( m_aRightMF.get() == pEdit)
     265           0 :         RightModify();
     266           0 :     ModifyHdl( pEdit );
     267           0 :     return 0;
     268             : }
     269           0 : IMPL_LINK_INLINE_END( SwFormatTablePage, UpDownLoseFocusHdl, MetricField *, pEdit )
     270             : 
     271           0 : void  SwFormatTablePage::ModifyHdl(const Edit * pEdit)
     272             : {
     273             : 
     274           0 :     SwTwips nCurWidth  = static_cast< SwTwips >(m_aWidthMF.DenormalizePercent(m_aWidthMF.GetValue( FUNIT_TWIP )));
     275           0 :     SwTwips nPrevWidth = nCurWidth;
     276           0 :     SwTwips nRight = static_cast< SwTwips >(m_aRightMF.DenormalizePercent(m_aRightMF.GetValue( FUNIT_TWIP )));
     277           0 :     SwTwips nLeft  = static_cast< SwTwips >(m_aLeftMF.DenormalizePercent(m_aLeftMF.GetValue( FUNIT_TWIP )));
     278             :     SwTwips nDiff;
     279             : 
     280           0 :     if (pEdit == m_aWidthMF.get())
     281             :     {
     282           0 :         if( nCurWidth < MINLAY )
     283           0 :             nCurWidth = MINLAY;
     284           0 :         nDiff = nRight + nLeft + nCurWidth - pTblData->GetSpace() ;
     285             :         //right aligned: only change the left margin
     286           0 :         if(m_pRightBtn->IsChecked())
     287           0 :             nLeft -= nDiff;
     288             :         //left aligned: only change the right margin
     289           0 :         else if(m_pLeftBtn->IsChecked())
     290           0 :             nRight -= nDiff;
     291             :         //left margin and width allowed - first right - then left
     292           0 :         else if(m_pFromLeftBtn->IsChecked())
     293             :         {
     294           0 :             if( nRight >= nDiff )
     295           0 :                 nRight -= nDiff;
     296             :             else
     297             :             {
     298           0 :                 nDiff -= nRight;
     299           0 :                 nRight = 0;
     300           0 :                 if(nLeft >= nDiff)
     301           0 :                     nLeft -= nDiff;
     302             :                 else
     303             :                 {
     304           0 :                     nRight += nLeft - nDiff;
     305           0 :                     nLeft = 0;
     306           0 :                     nCurWidth = pTblData->GetSpace();
     307             :                 }
     308             : 
     309             :             }
     310             :         }
     311             :         //centered: change both sides equally
     312           0 :         else if(m_pCenterBtn->IsChecked())
     313             :         {
     314           0 :             if((nLeft != nRight))
     315             :             {
     316           0 :                 nDiff += nLeft + nRight;
     317           0 :                 nLeft = nDiff/2;
     318           0 :                 nRight = nDiff/2;
     319             :             }
     320             :             else
     321             :             {
     322           0 :                     nLeft -= nDiff/2;
     323           0 :                     nRight -= nDiff/2;
     324             :             }
     325             :         }
     326             :         //free alignment: decrease both margins
     327           0 :         else if(m_pFreeBtn->IsChecked())
     328             :         {
     329           0 :             nLeft -= nDiff/2;
     330           0 :             nRight -= nDiff/2;
     331             :         }
     332             :     }
     333           0 :     if (pEdit == m_aRightMF.get())
     334             :     {
     335             : 
     336           0 :         if( nRight + nLeft > pTblData->GetSpace() - MINLAY )
     337           0 :             nRight = pTblData->GetSpace() -nLeft - MINLAY;
     338             : 
     339           0 :         nCurWidth = pTblData->GetSpace() - nLeft - nRight;
     340             :     }
     341           0 :     if (pEdit == m_aLeftMF.get())
     342             :     {
     343           0 :         if(!m_pFromLeftBtn->IsChecked())
     344             :         {
     345           0 :             bool bCenter = m_pCenterBtn->IsChecked();
     346           0 :             if( bCenter )
     347           0 :                 nRight = nLeft;
     348           0 :             if(nRight + nLeft > pTblData->GetSpace() - MINLAY )
     349             :             {
     350           0 :                 nLeft  = bCenter ?  (pTblData->GetSpace() - MINLAY) /2 :
     351           0 :                                     (pTblData->GetSpace() - MINLAY) - nRight;
     352           0 :                 nRight = bCenter ?  (pTblData->GetSpace() - MINLAY) /2 : nRight;
     353             :             }
     354           0 :             nCurWidth = pTblData->GetSpace() - nLeft - nRight;
     355             :         }
     356             :         else
     357             :         {
     358             :             //Upon changes on the left side the right margin will be changed at first,
     359             :             //thereafter the width.
     360           0 :             nDiff = nRight + nLeft + nCurWidth - pTblData->GetSpace() ;
     361             : 
     362           0 :             nRight -= nDiff;
     363           0 :             nCurWidth = pTblData->GetSpace() - nLeft - nRight;
     364             :         }
     365             :     }
     366           0 :     if (nCurWidth != nPrevWidth )
     367           0 :         m_aWidthMF.SetPrcntValue( m_aWidthMF.NormalizePercent( nCurWidth ), FUNIT_TWIP );
     368           0 :     m_aRightMF.SetPrcntValue( m_aRightMF.NormalizePercent( nRight ), FUNIT_TWIP );
     369           0 :     m_aLeftMF.SetPrcntValue( m_aLeftMF.NormalizePercent( nLeft ), FUNIT_TWIP );
     370           0 :     bModified = true;
     371           0 : }
     372             : 
     373           0 : SfxTabPage*  SwFormatTablePage::Create( vcl::Window* pParent,
     374             :                                    const SfxItemSet* rAttrSet)
     375             : {
     376           0 :     return new SwFormatTablePage( pParent, *rAttrSet );
     377             : }
     378             : 
     379           0 : bool  SwFormatTablePage::FillItemSet( SfxItemSet* rCoreSet )
     380             : {
     381             :     //Test if one of the controls still has the focus
     382           0 :     if (m_aWidthMF.HasFocus())
     383           0 :         ModifyHdl(m_aWidthMF.get());
     384           0 :     else if (m_aLeftMF.HasFocus())
     385           0 :         ModifyHdl(m_aLeftMF.get());
     386           0 :     else if(m_aRightMF.HasFocus())
     387           0 :         ModifyHdl(m_aRightMF.get());
     388           0 :     else if(m_pTopMF->HasFocus())
     389           0 :         ModifyHdl(m_pTopMF);
     390           0 :     else if(m_pBottomMF->HasFocus())
     391           0 :         ModifyHdl(m_pBottomMF);
     392             : 
     393           0 :     if(bModified)
     394             :     {
     395           0 :         if( m_pBottomMF->IsValueChangedFromSaved() ||
     396           0 :             m_pTopMF->IsValueChangedFromSaved() )
     397             :         {
     398           0 :             SvxULSpaceItem aULSpace(RES_UL_SPACE);
     399           0 :             aULSpace.SetUpper( m_pTopMF->Denormalize(m_pTopMF->GetValue( FUNIT_TWIP )));
     400           0 :             aULSpace.SetLower( m_pBottomMF->Denormalize(m_pBottomMF->GetValue( FUNIT_TWIP )));
     401           0 :             rCoreSet->Put(aULSpace);
     402             :         }
     403             : 
     404             :     }
     405           0 :     if(m_pNameED->IsValueChangedFromSaved())
     406             :     {
     407           0 :         rCoreSet->Put(SfxStringItem( FN_PARAM_TABLE_NAME, m_pNameED->GetText()));
     408           0 :         bModified = true;
     409             :     }
     410             : 
     411           0 :     if( m_pTextDirectionLB->IsVisible() )
     412             :     {
     413           0 :         const sal_Int32 nPos = m_pTextDirectionLB->GetSelectEntryPos();
     414           0 :         if ( m_pTextDirectionLB->IsValueChangedFromSaved() )
     415             :         {
     416             :             const sal_uInt32 nDirection =
     417           0 :                              (sal_uInt32)(sal_uIntPtr)m_pTextDirectionLB->GetEntryData( nPos );
     418           0 :             rCoreSet->Put( SvxFrameDirectionItem( (SvxFrameDirection)nDirection, RES_FRAMEDIR));
     419           0 :             bModified = true;
     420             :         }
     421             :     }
     422             : 
     423           0 :     return bModified;
     424             : }
     425             : 
     426           0 : void  SwFormatTablePage::Reset( const SfxItemSet* )
     427             : {
     428           0 :     const SfxItemSet& rSet = GetItemSet();
     429             :     const SfxPoolItem*  pItem;
     430             : 
     431           0 :     if(bHtmlMode)
     432             :     {
     433           0 :         m_pNameED->Disable();
     434           0 :         m_pTopFT->Hide();
     435           0 :         m_pTopMF->Hide();
     436           0 :         m_pBottomFT->Hide();
     437           0 :         m_pBottomMF->Hide();
     438           0 :         m_pFreeBtn->Enable(false);
     439             :     }
     440           0 :     FieldUnit aMetric = ::GetDfltMetric(bHtmlMode);
     441           0 :     m_aWidthMF.SetMetric(aMetric);
     442           0 :     m_aRightMF.SetMetric(aMetric);
     443           0 :     m_aLeftMF.SetMetric(aMetric);
     444           0 :     SetMetric(*m_pTopMF, aMetric);
     445           0 :     SetMetric(*m_pBottomMF, aMetric);
     446             : 
     447             :     //Name
     448           0 :     if(SfxItemState::SET == rSet.GetItemState( FN_PARAM_TABLE_NAME, false, &pItem ))
     449             :     {
     450           0 :         m_pNameED->SetText(((const SfxStringItem*)pItem)->GetValue());
     451           0 :         m_pNameED->SaveValue();
     452             :     }
     453             : 
     454           0 :     if(SfxItemState::SET == rSet.GetItemState( FN_TABLE_REP, false, &pItem ))
     455             :     {
     456           0 :         pTblData = (SwTableRep*)((const SwPtrItem*) pItem)->GetValue();
     457           0 :         nMinTableWidth = pTblData->GetColCount() * MINLAY;
     458             : 
     459           0 :         if(pTblData->GetWidthPercent())
     460             :         {
     461           0 :             m_pRelWidthCB->Check(true);
     462           0 :             RelWidthClickHdl(m_pRelWidthCB);
     463           0 :             m_aWidthMF.SetPrcntValue(pTblData->GetWidthPercent(), FUNIT_CUSTOM);
     464             : 
     465           0 :             m_aWidthMF.SaveValue();
     466           0 :             nSaveWidth = static_cast< SwTwips >(m_aWidthMF.GetValue(FUNIT_CUSTOM));
     467             :         }
     468             :         else
     469             :         {
     470             :             m_aWidthMF.SetPrcntValue(m_aWidthMF.NormalizePercent(
     471           0 :                     pTblData->GetWidth()), FUNIT_TWIP);
     472           0 :             m_aWidthMF.SaveValue();
     473           0 :             nSaveWidth = pTblData->GetWidth();
     474           0 :             nMinTableWidth = std::min( nSaveWidth, nMinTableWidth );
     475             :         }
     476             : 
     477           0 :         m_aWidthMF.SetRefValue(pTblData->GetSpace());
     478           0 :         m_aWidthMF.SetLast(m_aWidthMF.NormalizePercent( pTblData->GetSpace() ));
     479           0 :         m_aLeftMF.SetLast(m_aLeftMF.NormalizePercent( pTblData->GetSpace() ));
     480           0 :         m_aRightMF.SetLast(m_aRightMF.NormalizePercent( pTblData->GetSpace() ));
     481             : 
     482             :         m_aLeftMF.SetPrcntValue(m_aLeftMF.NormalizePercent(
     483           0 :                     pTblData->GetLeftSpace()), FUNIT_TWIP);
     484             :         m_aRightMF.SetPrcntValue(m_aRightMF.NormalizePercent(
     485           0 :                     pTblData->GetRightSpace()), FUNIT_TWIP);
     486           0 :         m_aLeftMF.SaveValue();
     487           0 :         m_aRightMF.SaveValue();
     488             : 
     489           0 :         bool bSetRight = false, bSetLeft = false;
     490           0 :         switch( pTblData->GetAlign() )
     491             :         {
     492             :             case text::HoriOrientation::NONE:
     493           0 :                 m_pFreeBtn->Check();
     494           0 :                 if(m_pRelWidthCB->IsChecked())
     495           0 :                     bSetRight = true;
     496           0 :             break;
     497             :             case text::HoriOrientation::FULL:
     498             :             {
     499           0 :                 bSetRight = bSetLeft = true;
     500           0 :                 m_pFullBtn->Check();
     501           0 :                 m_aWidthMF.Enable(false);
     502           0 :                 m_pRelWidthCB->Enable(false);
     503           0 :                 m_pWidthFT->Enable(false);
     504             :             }
     505           0 :             break;
     506             :             case text::HoriOrientation::LEFT:
     507             :             {
     508           0 :                 bSetLeft = true;
     509           0 :                 m_pLeftBtn->Check();
     510             :             }
     511           0 :             break;
     512             :             case text::HoriOrientation::LEFT_AND_WIDTH :
     513             :             {
     514           0 :                 bSetRight = true;
     515           0 :                 m_pFromLeftBtn->Check();
     516             :             }
     517           0 :             break;
     518             :             case text::HoriOrientation::RIGHT:
     519             :             {
     520           0 :                 bSetRight = true;
     521           0 :                 m_pRightBtn->Check();
     522             :             }
     523           0 :             break;
     524             :             case text::HoriOrientation::CENTER:
     525             :             {
     526           0 :                 bSetRight = true;
     527           0 :                 m_pCenterBtn->Check();
     528             :             }
     529           0 :             break;
     530             :         }
     531           0 :         if ( bSetRight )
     532             :         {
     533           0 :             m_aRightMF.Enable(false);
     534           0 :             m_pRightFT->Enable(false);
     535             :         }
     536           0 :         if ( bSetLeft )
     537             :         {
     538           0 :             m_aLeftMF.Enable(false);
     539           0 :             m_pLeftFT->Enable(false);
     540             :         }
     541             : 
     542             :     }
     543             : 
     544             :     //Margins
     545           0 :     if(SfxItemState::SET == rSet.GetItemState( RES_UL_SPACE, false,&pItem ))
     546             :     {
     547             :         m_pTopMF->SetValue(m_pTopMF->Normalize(
     548           0 :                         ((const SvxULSpaceItem*)pItem)->GetUpper()), FUNIT_TWIP);
     549             :         m_pBottomMF->SetValue(m_pBottomMF->Normalize(
     550           0 :                         ((const SvxULSpaceItem*)pItem)->GetLower()), FUNIT_TWIP);
     551           0 :         m_pTopMF->SaveValue();
     552           0 :         m_pBottomMF->SaveValue();
     553             :     }
     554             : 
     555             :     //Text direction
     556           0 :     if( SfxItemState::SET == rSet.GetItemState( RES_FRAMEDIR, true, &pItem ) )
     557             :     {
     558           0 :         sal_uIntPtr nVal  = ((SvxFrameDirectionItem*)pItem)->GetValue();
     559           0 :         const sal_Int32 nPos = m_pTextDirectionLB->GetEntryPos( (void*) nVal );
     560           0 :         m_pTextDirectionLB->SelectEntryPos( nPos );
     561           0 :         m_pTextDirectionLB->SaveValue();
     562             :     }
     563             : 
     564           0 :     m_aWidthMF.SetMax( 2*m_aWidthMF.NormalizePercent( pTblData->GetSpace() ), FUNIT_TWIP );
     565           0 :     m_aRightMF.SetMax( m_aRightMF.NormalizePercent( pTblData->GetSpace() ), FUNIT_TWIP );
     566           0 :     m_aLeftMF.SetMax( m_aLeftMF.NormalizePercent( pTblData->GetSpace() ), FUNIT_TWIP );
     567           0 :     m_aWidthMF.SetMin( m_aWidthMF.NormalizePercent( nMinTableWidth ), FUNIT_TWIP );
     568             : 
     569           0 : }
     570             : 
     571           0 : void    SwFormatTablePage::ActivatePage( const SfxItemSet& rSet )
     572             : {
     573             :     OSL_ENSURE(pTblData, "table data not available?");
     574           0 :     if(SfxItemState::SET == rSet.GetItemState( FN_TABLE_REP ))
     575             :     {
     576           0 :         SwTwips nCurWidth = text::HoriOrientation::FULL != pTblData->GetAlign() ?
     577           0 :                                         pTblData->GetWidth() :
     578           0 :                                             pTblData->GetSpace();
     579           0 :         if(pTblData->GetWidthPercent() == 0 &&
     580           0 :                 nCurWidth != m_aWidthMF.DenormalizePercent(m_aWidthMF.GetValue(FUNIT_TWIP )))
     581             :         {
     582             :             m_aWidthMF.SetPrcntValue(m_aWidthMF.NormalizePercent(
     583           0 :                             nCurWidth), FUNIT_TWIP);
     584           0 :             m_aWidthMF.SaveValue();
     585           0 :             nSaveWidth = nCurWidth;
     586             :             m_aLeftMF.SetPrcntValue(m_aLeftMF.NormalizePercent(
     587           0 :                             pTblData->GetLeftSpace()), FUNIT_TWIP);
     588           0 :             m_aLeftMF.SaveValue();
     589             :             m_aRightMF.SetPrcntValue(m_aRightMF.NormalizePercent(
     590           0 :                             pTblData->GetRightSpace()), FUNIT_TWIP);
     591           0 :             m_aRightMF.SaveValue();
     592             :         }
     593             :     }
     594             : 
     595           0 : }
     596             : 
     597           0 : int  SwFormatTablePage::DeactivatePage( SfxItemSet* _pSet )
     598             : {
     599             :     //os: VCL doesn't take care of making the active widget
     600             :     //in the dialog lose the focus
     601           0 :     m_pNameED->GrabFocus();
     602             :     //test the table name for spaces
     603           0 :     OUString sTblName = m_pNameED->GetText();
     604           0 :     if(sTblName.indexOf(' ') != -1)
     605             :     {
     606           0 :         MessageDialog(this, SW_RES(STR_WRONG_TABLENAME), VCL_MESSAGE_INFO).Execute();
     607           0 :         m_pNameED->GrabFocus();
     608           0 :         return KEEP_PAGE;
     609             :     }
     610           0 :     if(_pSet)
     611             :     {
     612           0 :         FillItemSet(_pSet);
     613           0 :         if(bModified)
     614             :         {
     615           0 :             SwTwips lLeft  = static_cast< SwTwips >(m_aLeftMF.DenormalizePercent(m_aLeftMF.GetValue( FUNIT_TWIP )));
     616           0 :             SwTwips lRight = static_cast< SwTwips >(m_aRightMF.DenormalizePercent(m_aRightMF.GetValue( FUNIT_TWIP )));
     617             : 
     618           0 :             if( m_aLeftMF.GetText() != m_aLeftMF.GetSavedValue() ||
     619           0 :                 m_aRightMF.GetText() != m_aRightMF.GetSavedValue() )
     620             :             {
     621           0 :                 pTblData->SetWidthChanged();
     622           0 :                 pTblData->SetLeftSpace( lLeft);
     623           0 :                 pTblData->SetRightSpace( lRight);
     624             :             }
     625             : 
     626             :             SwTwips lWidth;
     627           0 :             if (m_pRelWidthCB->IsChecked() && m_pRelWidthCB->IsEnabled())
     628             :             {
     629           0 :                 lWidth = pTblData->GetSpace() - lRight - lLeft;
     630           0 :                 const sal_uInt16 nPercentWidth = m_aWidthMF.GetValue(FUNIT_CUSTOM);
     631           0 :                 if(pTblData->GetWidthPercent() != nPercentWidth)
     632             :                 {
     633           0 :                     pTblData->SetWidthPercent(nPercentWidth);
     634           0 :                     pTblData->SetWidthChanged();
     635             :                 }
     636             :             }
     637             :             else
     638             :             {
     639           0 :                 pTblData->SetWidthPercent(0);
     640           0 :                 lWidth = static_cast< SwTwips >(m_aWidthMF.DenormalizePercent(m_aWidthMF.GetValue( FUNIT_TWIP )));
     641             :             }
     642           0 :             pTblData->SetWidth(lWidth);
     643             : 
     644           0 :             SwTwips nColSum = 0;
     645             : 
     646           0 :             for( sal_uInt16 i = 0; i < pTblData->GetColCount(); i++)
     647             :             {
     648           0 :                 nColSum += pTblData->GetColumns()[i].nWidth;
     649             :             }
     650           0 :             if(nColSum != pTblData->GetWidth())
     651             :             {
     652             :                 SwTwips nMinWidth = std::min( (long)MINLAY,
     653           0 :                                     (long) (pTblData->GetWidth() /
     654           0 :                                             pTblData->GetColCount() - 1));
     655           0 :                 SwTwips nDiff = nColSum - pTblData->GetWidth();
     656           0 :                 while ( std::abs(nDiff) > pTblData->GetColCount() + 1 )
     657             :                 {
     658           0 :                     SwTwips nSub = nDiff / pTblData->GetColCount();
     659           0 :                     for( sal_uInt16 i = 0; i < pTblData->GetColCount(); i++)
     660             :                     {
     661           0 :                         if(pTblData->GetColumns()[i].nWidth - nMinWidth > nSub)
     662             :                         {
     663           0 :                             pTblData->GetColumns()[i].nWidth -= nSub;
     664           0 :                             nDiff -= nSub;
     665             :                         }
     666             :                         else
     667             :                         {
     668           0 :                             nDiff -= pTblData->GetColumns()[i].nWidth - nMinWidth;
     669           0 :                             pTblData->GetColumns()[i].nWidth = nMinWidth;
     670             :                         }
     671             : 
     672             :                     }
     673             :                 }
     674             :             }
     675             : 
     676           0 :             sal_Int16 nAlign = 0;
     677           0 :             if(m_pRightBtn->IsChecked())
     678           0 :                 nAlign = text::HoriOrientation::RIGHT;
     679           0 :             else if(m_pLeftBtn->IsChecked())
     680           0 :                 nAlign = text::HoriOrientation::LEFT;
     681           0 :             else if(m_pFromLeftBtn->IsChecked())
     682           0 :                 nAlign = text::HoriOrientation::LEFT_AND_WIDTH;
     683           0 :             else if(m_pCenterBtn->IsChecked())
     684           0 :                 nAlign = text::HoriOrientation::CENTER;
     685           0 :             else if(m_pFreeBtn->IsChecked())
     686           0 :                 nAlign = text::HoriOrientation::NONE;
     687           0 :             else if(m_pFullBtn->IsChecked())
     688             :             {
     689           0 :                 nAlign = text::HoriOrientation::FULL;
     690           0 :                 lWidth = lAutoWidth;
     691             :             }
     692           0 :             if(nAlign != pTblData->GetAlign())
     693             :             {
     694           0 :                 pTblData->SetWidthChanged();
     695           0 :                 pTblData->SetAlign(nAlign);
     696             :             }
     697             : 
     698           0 :             if(pTblData->GetWidth() != lWidth )
     699             :             {
     700           0 :                 pTblData->SetWidthChanged();
     701             :                 pTblData->SetWidth(
     702           0 :                     nAlign == text::HoriOrientation::FULL ? pTblData->GetSpace() : lWidth );
     703             :             }
     704           0 :             if(pTblData->HasWidthChanged())
     705           0 :                 _pSet->Put(SwPtrItem(FN_TABLE_REP, pTblData));
     706             :         }
     707             :     }
     708           0 :     return sal_True;
     709             : }
     710             : 
     711             : //Description: Page column configuration
     712           0 : SwTableColumnPage::SwTableColumnPage(vcl::Window* pParent, const SfxItemSet& rSet)
     713             :     : SfxTabPage(pParent, "TableColumnPage",
     714             :         "modules/swriter/ui/tablecolumnpage.ui", &rSet)
     715             :     , pTblData(0)
     716             :     , nTableWidth(0)
     717             :     , nMinWidth(MINLAY)
     718             :     , nNoOfCols(0)
     719             :     , nNoOfVisibleCols(0)
     720             :     , bModified(false)
     721             :     , bModifyTbl(false)
     722           0 :     , bPercentMode(false)
     723             : {
     724           0 :     get(m_pModifyTableCB, "adaptwidth");
     725           0 :     get(m_pProportionalCB, "adaptcolumns");
     726           0 :     get(m_pSpaceFT, "spaceft");
     727           0 :     get(m_pSpaceED, "space-nospin");
     728           0 :     get(m_pUpBtn, "next");
     729           0 :     get(m_pDownBtn, "back");
     730             : 
     731           0 :     m_aFieldArr[0].set(get<MetricField>("width1"));
     732           0 :     m_aFieldArr[1].set(get<MetricField>("width2"));
     733           0 :     m_aFieldArr[2].set(get<MetricField>("width3"));
     734           0 :     m_aFieldArr[3].set(get<MetricField>("width4"));
     735           0 :     m_aFieldArr[4].set(get<MetricField>("width5"));
     736           0 :     m_aFieldArr[5].set(get<MetricField>("width6"));
     737             : 
     738           0 :     m_pTextArr[0] = get<FixedText>("1");
     739           0 :     m_pTextArr[1] = get<FixedText>("2");
     740           0 :     m_pTextArr[2] = get<FixedText>("3");
     741           0 :     m_pTextArr[3] = get<FixedText>("4");
     742           0 :     m_pTextArr[4] = get<FixedText>("5");
     743           0 :     m_pTextArr[5] = get<FixedText>("6");
     744             : 
     745           0 :     SetExchangeSupport();
     746             : 
     747             :     const SfxPoolItem* pItem;
     748           0 :     Init((SfxItemState::SET == rSet.GetItemState( SID_HTML_MODE, false,&pItem )
     749           0 :         && ((const SfxUInt16Item*)pItem)->GetValue() & HTMLMODE_ON));
     750           0 : }
     751             : 
     752             : //Description: Page column configuration
     753           0 :  SwTableColumnPage::~SwTableColumnPage()
     754             : {
     755           0 : }
     756             : 
     757           0 : SfxTabPage*   SwTableColumnPage::Create( vcl::Window* pParent,
     758             :                                 const SfxItemSet* rAttrSet)
     759             : {
     760           0 :     return new SwTableColumnPage( pParent, *rAttrSet );
     761             : }
     762             : 
     763           0 : void  SwTableColumnPage::Reset( const SfxItemSet* )
     764             : {
     765           0 :     const SfxItemSet& rSet = GetItemSet();
     766             : 
     767             :     const SfxPoolItem* pItem;
     768           0 :     if(SfxItemState::SET == rSet.GetItemState( FN_TABLE_REP, false, &pItem ))
     769             :     {
     770           0 :         pTblData = (SwTableRep*)((const SwPtrItem*) pItem)->GetValue();
     771           0 :         nNoOfVisibleCols = pTblData->GetColCount();
     772           0 :         nNoOfCols = pTblData->GetAllColCount();
     773           0 :         nTableWidth = pTblData->GetAlign() != text::HoriOrientation::FULL &&
     774           0 :                             pTblData->GetAlign() != text::HoriOrientation::LEFT_AND_WIDTH?
     775           0 :                         pTblData->GetWidth() : pTblData->GetSpace();
     776             : 
     777           0 :         for( sal_uInt16 i = 0; i < nNoOfCols; i++ )
     778             :         {
     779           0 :             if( pTblData->GetColumns()[i].nWidth  < nMinWidth )
     780           0 :                     nMinWidth = pTblData->GetColumns()[i].nWidth;
     781             :         }
     782           0 :         sal_Int64 nMinTwips = m_aFieldArr[0].NormalizePercent( nMinWidth );
     783           0 :         sal_Int64 nMaxTwips = m_aFieldArr[0].NormalizePercent( nTableWidth );
     784           0 :         for( sal_uInt16 i = 0; (i < MET_FIELDS) && (i < nNoOfVisibleCols); i++ )
     785             :         {
     786           0 :             m_aFieldArr[i].SetPrcntValue( m_aFieldArr[i].NormalizePercent(
     787           0 :                                                 GetVisibleWidth(i) ), FUNIT_TWIP );
     788           0 :             m_aFieldArr[i].SetMin( nMinTwips , FUNIT_TWIP );
     789           0 :             m_aFieldArr[i].SetMax( nMaxTwips , FUNIT_TWIP );
     790           0 :             m_aFieldArr[i].Enable();
     791           0 :             m_pTextArr[i]->Enable();
     792             :         }
     793             : 
     794           0 :         if( nNoOfVisibleCols > MET_FIELDS )
     795           0 :             m_pUpBtn->Enable();
     796             : 
     797           0 :         for( sal_uInt16 i = nNoOfVisibleCols; i < MET_FIELDS; ++i )
     798             :         {
     799           0 :             m_aFieldArr[i].SetText( OUString() );
     800           0 :             m_pTextArr[i]->Disable();
     801             :         }
     802             :     }
     803           0 :     ActivatePage(rSet);
     804             : 
     805           0 : }
     806             : 
     807           0 : void  SwTableColumnPage::Init(bool bWeb)
     808             : {
     809           0 :     FieldUnit aMetric = ::GetDfltMetric(bWeb);
     810           0 :     Link aLkUp = LINK( this, SwTableColumnPage, UpHdl );
     811           0 :     Link aLkDown = LINK( this, SwTableColumnPage, DownHdl );
     812           0 :     Link aLkLF = LINK( this, SwTableColumnPage, LoseFocusHdl );
     813           0 :     for( sal_uInt16 i = 0; i < MET_FIELDS; i++ )
     814             :     {
     815           0 :         aValueTbl[i] = i;
     816           0 :         m_aFieldArr[i].SetMetric(aMetric);
     817           0 :         m_aFieldArr[i].SetUpHdl( aLkUp );
     818           0 :         m_aFieldArr[i].SetDownHdl( aLkDown );
     819           0 :         m_aFieldArr[i].SetLoseFocusHdl( aLkLF );
     820             :     }
     821           0 :     SetMetric(*m_pSpaceED, aMetric);
     822             : 
     823           0 :     Link aLk = LINK( this, SwTableColumnPage, AutoClickHdl );
     824           0 :     m_pUpBtn->SetClickHdl( aLk );
     825           0 :     m_pDownBtn->SetClickHdl( aLk );
     826             : 
     827           0 :     aLk = LINK( this, SwTableColumnPage, ModeHdl );
     828           0 :     m_pModifyTableCB->SetClickHdl( aLk );
     829           0 :     m_pProportionalCB->SetClickHdl( aLk );
     830           0 : }
     831             : 
     832           0 : IMPL_LINK( SwTableColumnPage, AutoClickHdl, CheckBox *, pBox )
     833             : {
     834             :     //move display window
     835           0 :     if(pBox == (CheckBox *)m_pDownBtn)
     836             :     {
     837           0 :         if(aValueTbl[0] > 0)
     838             :         {
     839           0 :             for( sal_uInt16 i=0; i < MET_FIELDS; i++ )
     840           0 :                 aValueTbl[i] -= 1;
     841             :         }
     842             :     }
     843           0 :     if (pBox == (CheckBox *)m_pUpBtn)
     844             :     {
     845           0 :         if( aValueTbl[ MET_FIELDS -1 ] < nNoOfVisibleCols -1  )
     846             :         {
     847           0 :             for(sal_uInt16 i=0;i < MET_FIELDS;i++)
     848           0 :                 aValueTbl[i] += 1;
     849             :         }
     850             :     }
     851           0 :     for( sal_uInt16 i = 0; (i < nNoOfVisibleCols ) && ( i < MET_FIELDS); i++ )
     852             :     {
     853           0 :         OUString sEntry('~');
     854           0 :         OUString sIndex = OUString::number( aValueTbl[i] + 1 );
     855           0 :         sEntry += sIndex;
     856           0 :         m_pTextArr[i]->SetText( sEntry );
     857             : 
     858             :         //added by menghu for SODC_5143,12/12/2006
     859           0 :         OUString sColumnWidth = SW_RESSTR( STR_ACCESS_COLUMN_WIDTH);
     860           0 :         sColumnWidth = sColumnWidth.replaceFirst( "%1", sIndex );
     861           0 :         m_aFieldArr[i].SetAccessibleName( sColumnWidth );
     862           0 :     }
     863             : 
     864           0 :     m_pDownBtn->Enable(aValueTbl[0] > 0);
     865           0 :     m_pUpBtn->Enable(aValueTbl[ MET_FIELDS -1 ] < nNoOfVisibleCols -1 );
     866           0 :     UpdateCols(0);
     867           0 :     return 0;
     868             : }
     869             : 
     870           0 : IMPL_LINK_INLINE_START( SwTableColumnPage, UpHdl, MetricField*, pEdit )
     871             : {
     872           0 :     bModified = true;
     873           0 :     ModifyHdl( pEdit );
     874           0 :     return 0;
     875             : }
     876           0 : IMPL_LINK_INLINE_END( SwTableColumnPage, UpHdl, MetricField*, pEdit )
     877             : 
     878           0 : IMPL_LINK_INLINE_START( SwTableColumnPage, DownHdl, MetricField*, pEdit )
     879             : {
     880           0 :     bModified = true;
     881           0 :     ModifyHdl( pEdit );
     882           0 :     return 0;
     883             : }
     884           0 : IMPL_LINK_INLINE_END( SwTableColumnPage, DownHdl, MetricField*, pEdit )
     885             : 
     886           0 : IMPL_LINK_INLINE_START( SwTableColumnPage, LoseFocusHdl, MetricField*, pEdit )
     887             : {
     888           0 :     if (pEdit->IsModified())
     889             :     {
     890           0 :         bModified = true;
     891           0 :         ModifyHdl( pEdit );
     892             :     }
     893           0 :     return 0;
     894             : }
     895           0 : IMPL_LINK_INLINE_END( SwTableColumnPage, LoseFocusHdl, MetricField*, pEdit )
     896             : 
     897           0 : IMPL_LINK( SwTableColumnPage, ModeHdl, CheckBox*, pBox )
     898             : {
     899           0 :     bool bCheck = pBox->IsChecked();
     900           0 :     if (pBox == m_pProportionalCB)
     901             :     {
     902           0 :         if(bCheck)
     903           0 :             m_pModifyTableCB->Check();
     904           0 :         m_pModifyTableCB->Enable(!bCheck && bModifyTbl);
     905             :     }
     906           0 :     return 0;
     907             : }
     908             : 
     909           0 : bool  SwTableColumnPage::FillItemSet( SfxItemSet* )
     910             : {
     911           0 :     for( sal_uInt16 i = 0; i < MET_FIELDS; i++ )
     912             :     {
     913           0 :         if (m_aFieldArr[i].HasFocus())
     914             :         {
     915           0 :             LoseFocusHdl(m_aFieldArr[i].get());
     916           0 :             break;
     917             :         }
     918             :     }
     919             : 
     920           0 :     if(bModified)
     921             :     {
     922           0 :         pTblData->SetColsChanged();
     923             :     }
     924           0 :     return bModified;
     925             : }
     926             : 
     927           0 : void   SwTableColumnPage::ModifyHdl( MetricField* pField )
     928             : {
     929           0 :         PercentField *pEdit = NULL;
     930             :         sal_uInt16 i;
     931             : 
     932           0 :         for( i = 0; i < MET_FIELDS; i++)
     933             :         {
     934           0 :             if (pField == m_aFieldArr[i].get())
     935             :             {
     936           0 :                 pEdit = &m_aFieldArr[i];
     937           0 :                 break;
     938             :             }
     939             :         }
     940             : 
     941           0 :         if (MET_FIELDS <= i || !pEdit)
     942             :         {
     943             :             OSL_ENSURE(false, "cannot happen.");
     944           0 :             return;
     945             :         }
     946             : 
     947           0 :         SetVisibleWidth(aValueTbl[i], static_cast< SwTwips >(pEdit->DenormalizePercent(pEdit->GetValue( FUNIT_TWIP ))) );
     948             : 
     949           0 :         UpdateCols( aValueTbl[i] );
     950             : }
     951             : 
     952           0 : void   SwTableColumnPage::UpdateCols( sal_uInt16 nAktPos )
     953             : {
     954           0 :     SwTwips nSum = 0;
     955             : 
     956           0 :     for( sal_uInt16 i = 0; i < nNoOfCols; i++ )
     957             :     {
     958           0 :         nSum += (pTblData->GetColumns())[i].nWidth;
     959             :     }
     960           0 :     SwTwips nDiff = nSum - nTableWidth;
     961             : 
     962           0 :     bool bModifyTable = m_pModifyTableCB->IsChecked();
     963           0 :     bool bProp =    m_pProportionalCB->IsChecked();
     964             : 
     965           0 :     if(!bModifyTable && !bProp )
     966             :     {
     967             :         //The table width is constant, the difference is balanced with the other columns
     968           0 :         sal_uInt16 nLoopCount = 0;
     969           0 :         while( nDiff )
     970             :         {
     971           0 :             if( ++nAktPos == nNoOfVisibleCols)
     972             :             {
     973           0 :                 nAktPos = 0;
     974           0 :                 ++nLoopCount;
     975             :                 //#i101353# in small tables it might not be possible to balance column width
     976           0 :                 if( nLoopCount > 1 )
     977           0 :                     break;
     978             :             }
     979           0 :             if( nDiff < 0 )
     980             :             {
     981           0 :                 SetVisibleWidth(nAktPos, GetVisibleWidth(nAktPos) -nDiff);
     982           0 :                 nDiff = 0;
     983             :             }
     984           0 :             else if( GetVisibleWidth(nAktPos) >= nDiff + nMinWidth )
     985             :             {
     986           0 :                 SetVisibleWidth(nAktPos, GetVisibleWidth(nAktPos) -nDiff);
     987           0 :                 nDiff = 0;
     988             :             }
     989           0 :             if( nDiff > 0 && GetVisibleWidth(nAktPos) > nMinWidth )
     990             :             {
     991           0 :                 if( nDiff >= (GetVisibleWidth(nAktPos) - nMinWidth) )
     992             :                 {
     993           0 :                     nDiff -= (GetVisibleWidth(nAktPos) - nMinWidth);
     994           0 :                     SetVisibleWidth(nAktPos, nMinWidth);
     995             :                 }
     996             :                 else
     997             :                 {
     998           0 :                     nDiff = 0;
     999           0 :                     SetVisibleWidth(nAktPos, GetVisibleWidth(nAktPos) -nDiff);
    1000             :                 }
    1001             :                 OSL_ENSURE(nDiff >= 0, "nDiff < 0 cannot be here!");
    1002             :             }
    1003           0 :         }
    1004             :     }
    1005           0 :     else if(bModifyTable && !bProp)
    1006             :     {
    1007             :         //Difference is balanced by the width of the table,
    1008             :         //other columns remain unchanged.
    1009             :         OSL_ENSURE(nDiff <= pTblData->GetSpace() - nTableWidth, "wrong maximum" );
    1010           0 :         SwTwips nActSpace = pTblData->GetSpace() - nTableWidth;
    1011           0 :         if(nDiff > nActSpace)
    1012             :         {
    1013           0 :             nTableWidth = pTblData->GetSpace();
    1014           0 :             SetVisibleWidth(nAktPos, GetVisibleWidth(nAktPos) - nDiff + nActSpace );
    1015             :         }
    1016             :         else
    1017             :         {
    1018           0 :             nTableWidth += nDiff;
    1019           0 :         }
    1020             :     }
    1021           0 :     else if(bModifyTable && bProp)
    1022             :     {
    1023             :         //All columns will be changed proportionally with,
    1024             :         //the table width is adjusted accordingly.
    1025             :         OSL_ENSURE(nDiff * nNoOfVisibleCols <= pTblData->GetSpace() - nTableWidth, "wrong maximum" );
    1026           0 :         long nAdd = nDiff;
    1027           0 :         if(nDiff * nNoOfVisibleCols > pTblData->GetSpace() - nTableWidth)
    1028             :         {
    1029           0 :             nAdd = (pTblData->GetSpace() - nTableWidth) / nNoOfVisibleCols;
    1030           0 :             SetVisibleWidth(nAktPos, GetVisibleWidth(nAktPos) - nDiff + nAdd );
    1031           0 :             nDiff = nAdd;
    1032             :         }
    1033           0 :         if(nAdd)
    1034           0 :             for( sal_uInt16 i = 0; i < nNoOfVisibleCols; i++ )
    1035             :             {
    1036           0 :                 if(i == nAktPos)
    1037           0 :                     continue;
    1038             :                 SwTwips nVisWidth;
    1039           0 :                 if((nVisWidth = GetVisibleWidth(i)) + nDiff < MINLAY)
    1040             :                 {
    1041           0 :                     nAdd += nVisWidth - MINLAY;
    1042           0 :                     SetVisibleWidth(i, MINLAY);
    1043             :                 }
    1044             :                 else
    1045             :                 {
    1046           0 :                     SetVisibleWidth(i, nVisWidth + nDiff);
    1047           0 :                     nAdd += nDiff;
    1048             :                 }
    1049             : 
    1050             :             }
    1051           0 :         nTableWidth += nAdd;
    1052             :     }
    1053             : 
    1054           0 :     if(!bPercentMode)
    1055           0 :         m_pSpaceED->SetValue(m_pSpaceED->Normalize( pTblData->GetSpace() - nTableWidth) , FUNIT_TWIP);
    1056             : 
    1057           0 :     for( sal_uInt16 i = 0; ( i < nNoOfVisibleCols ) && ( i < MET_FIELDS ); i++)
    1058             :     {
    1059           0 :         m_aFieldArr[i].SetPrcntValue(m_aFieldArr[i].NormalizePercent(
    1060           0 :                         GetVisibleWidth(aValueTbl[i]) ), FUNIT_TWIP);
    1061           0 :         m_aFieldArr[i].ClearModifyFlag();
    1062             :     }
    1063           0 : }
    1064             : 
    1065           0 : void    SwTableColumnPage::ActivatePage( const SfxItemSet& )
    1066             : {
    1067           0 :     bPercentMode = pTblData->GetWidthPercent() != 0;
    1068           0 :     for( sal_uInt16 i = 0; (i < MET_FIELDS) && (i < nNoOfVisibleCols); i++ )
    1069             :     {
    1070           0 :         m_aFieldArr[i].SetRefValue(pTblData->GetWidth());
    1071           0 :         m_aFieldArr[i].ShowPercent( bPercentMode );
    1072             :     }
    1073             : 
    1074           0 :     const sal_uInt16 nTblAlign = pTblData->GetAlign();
    1075           0 :     if((text::HoriOrientation::FULL != nTblAlign && nTableWidth != pTblData->GetWidth()) ||
    1076           0 :     (text::HoriOrientation::FULL == nTblAlign && nTableWidth != pTblData->GetSpace()))
    1077             :     {
    1078             :         nTableWidth = text::HoriOrientation::FULL == nTblAlign ?
    1079           0 :                                     pTblData->GetSpace() :
    1080           0 :                                         pTblData->GetWidth();
    1081           0 :         UpdateCols(0);
    1082             :     }
    1083           0 :     bModifyTbl = true;
    1084           0 :     if(pTblData->GetWidthPercent() ||
    1085           0 :                 text::HoriOrientation::FULL == nTblAlign ||
    1086           0 :                         pTblData->IsLineSelected()  )
    1087           0 :         bModifyTbl = false;
    1088           0 :     if(bPercentMode)
    1089             :     {
    1090           0 :         m_pModifyTableCB->Check(false);
    1091           0 :         m_pProportionalCB->Check(false);
    1092             :     }
    1093           0 :     else if( !bModifyTbl )
    1094             :     {
    1095           0 :         m_pProportionalCB->Check(false);
    1096           0 :         m_pModifyTableCB->Check(false);
    1097             :     }
    1098           0 :     m_pSpaceFT->Enable(!bPercentMode);
    1099           0 :     m_pSpaceED->Enable(!bPercentMode);
    1100           0 :     m_pModifyTableCB->Enable( !bPercentMode && bModifyTbl );
    1101           0 :     m_pProportionalCB->Enable(!bPercentMode && bModifyTbl );
    1102             : 
    1103             :     m_pSpaceED->SetValue(m_pSpaceED->Normalize(
    1104           0 :                 pTblData->GetSpace() - nTableWidth) , FUNIT_TWIP);
    1105             : 
    1106           0 : }
    1107             : 
    1108           0 : int  SwTableColumnPage::DeactivatePage( SfxItemSet* _pSet )
    1109             : {
    1110           0 :     if(_pSet)
    1111             :     {
    1112           0 :         FillItemSet(_pSet);
    1113           0 :         if(text::HoriOrientation::FULL != pTblData->GetAlign() && pTblData->GetWidth() != nTableWidth)
    1114             :         {
    1115           0 :             pTblData->SetWidth(nTableWidth);
    1116           0 :             SwTwips nDiff = pTblData->GetSpace() - pTblData->GetWidth() -
    1117           0 :                             pTblData->GetLeftSpace() - pTblData->GetRightSpace();
    1118           0 :             switch( pTblData->GetAlign()  )
    1119             :             {
    1120             :                 case text::HoriOrientation::RIGHT:
    1121           0 :                     pTblData->SetLeftSpace(pTblData->GetLeftSpace() + nDiff);
    1122           0 :                 break;
    1123             :                 case text::HoriOrientation::LEFT:
    1124           0 :                     pTblData->SetRightSpace(pTblData->GetRightSpace() + nDiff);
    1125           0 :                 break;
    1126             :                 case text::HoriOrientation::NONE:
    1127             :                 {
    1128           0 :                     SwTwips nDiff2 = nDiff/2;
    1129           0 :                     if( nDiff > 0 ||
    1130           0 :                         (-nDiff2 < pTblData->GetRightSpace() && - nDiff2 < pTblData->GetLeftSpace()))
    1131             :                     {
    1132           0 :                         pTblData->SetRightSpace(pTblData->GetRightSpace() + nDiff2);
    1133           0 :                         pTblData->SetLeftSpace(pTblData->GetLeftSpace() + nDiff2);
    1134             :                     }
    1135             :                     else
    1136             :                     {
    1137           0 :                         if(pTblData->GetRightSpace() > pTblData->GetLeftSpace())
    1138             :                         {
    1139           0 :                             pTblData->SetLeftSpace(0);
    1140           0 :                             pTblData->SetRightSpace(pTblData->GetSpace() - pTblData->GetWidth());
    1141             :                         }
    1142             :                         else
    1143             :                         {
    1144           0 :                             pTblData->SetRightSpace(0);
    1145           0 :                             pTblData->SetLeftSpace(pTblData->GetSpace() - pTblData->GetWidth());
    1146             :                         }
    1147             :                     }
    1148             :                 }
    1149           0 :                 break;
    1150             :                 case text::HoriOrientation::CENTER:
    1151           0 :                     pTblData->SetRightSpace(pTblData->GetRightSpace() + nDiff/2);
    1152           0 :                     pTblData->SetLeftSpace(pTblData->GetLeftSpace() + nDiff/2);
    1153           0 :                 break;
    1154             :                 case text::HoriOrientation::LEFT_AND_WIDTH :
    1155           0 :                     if(nDiff > pTblData->GetRightSpace())
    1156             :                     {
    1157           0 :                         pTblData->SetLeftSpace(pTblData->GetSpace() - pTblData->GetWidth());
    1158             :                     }
    1159             :                     pTblData->SetRightSpace(
    1160           0 :                         pTblData->GetSpace() - pTblData->GetWidth() - pTblData->GetLeftSpace());
    1161           0 :                 break;
    1162             :             }
    1163           0 :             pTblData->SetWidthChanged();
    1164             :         }
    1165           0 :         _pSet->Put(SwPtrItem( FN_TABLE_REP, pTblData ));
    1166             :     }
    1167           0 :     return sal_True;
    1168             : }
    1169             : 
    1170           0 : SwTwips  SwTableColumnPage::GetVisibleWidth(sal_uInt16 nPos)
    1171             : {
    1172           0 :     sal_uInt16 i=0;
    1173             : 
    1174           0 :     while( nPos )
    1175             :     {
    1176           0 :         if(pTblData->GetColumns()[i].bVisible && nPos)
    1177           0 :             nPos--;
    1178           0 :         i++;
    1179             :     }
    1180           0 :     SwTwips nReturn = pTblData->GetColumns()[i].nWidth;
    1181             :     OSL_ENSURE(i < nNoOfCols, "Array index out of range");
    1182           0 :     while(!pTblData->GetColumns()[i].bVisible && (i + 1) < nNoOfCols)
    1183           0 :         nReturn += pTblData->GetColumns()[++i].nWidth;
    1184             : 
    1185           0 :     return nReturn;
    1186             : }
    1187             : 
    1188           0 : void SwTableColumnPage::SetVisibleWidth(sal_uInt16 nPos, SwTwips nNewWidth)
    1189             : {
    1190           0 :     sal_uInt16 i=0;
    1191           0 :     while( nPos )
    1192             :     {
    1193           0 :         if(pTblData->GetColumns()[i].bVisible && nPos)
    1194           0 :             nPos--;
    1195           0 :         i++;
    1196             :     }
    1197             :     OSL_ENSURE(i < nNoOfCols, "Array index out of range");
    1198           0 :     pTblData->GetColumns()[i].nWidth = nNewWidth;
    1199           0 :     while(!pTblData->GetColumns()[i].bVisible && (i + 1) < nNoOfCols)
    1200           0 :         pTblData->GetColumns()[++i].nWidth = 0;
    1201             : 
    1202           0 : }
    1203             : 
    1204           0 : SwTableTabDlg::SwTableTabDlg(vcl::Window* pParent, SfxItemPool&,
    1205             :     const SfxItemSet* pItemSet, SwWrtShell* pSh)
    1206             :     : SfxTabDialog(0, pParent, "TablePropertiesDialog",
    1207             :         "modules/swriter/ui/tableproperties.ui", pItemSet)
    1208             :     , pShell(pSh)
    1209           0 :     , m_nHtmlMode(::GetHtmlMode(pSh->GetView().GetDocShell()))
    1210             : {
    1211           0 :     SfxAbstractDialogFactory* pFact = SfxAbstractDialogFactory::Create();
    1212             :     OSL_ENSURE(pFact, "Dialog creation failed!");
    1213           0 :     AddTabPage("table", &SwFormatTablePage::Create, 0);
    1214           0 :     m_nTextFlowId = AddTabPage("textflow", &SwTextFlowPage::Create, 0);
    1215           0 :     AddTabPage("columns", &SwTableColumnPage::Create, 0);
    1216           0 :     m_nBackgroundId = AddTabPage("background", pFact->GetTabPageCreatorFunc(RID_SVXPAGE_BACKGROUND), 0);
    1217           0 :     m_nBorderId = AddTabPage("borders", pFact->GetTabPageCreatorFunc(RID_SVXPAGE_BORDER), 0);
    1218           0 : }
    1219             : 
    1220           0 : void  SwTableTabDlg::PageCreated(sal_uInt16 nId, SfxTabPage& rPage)
    1221             : {
    1222           0 :     SfxAllItemSet aSet(*(GetInputSetImpl()->GetPool()));
    1223           0 :     if (nId == m_nBackgroundId)
    1224             :     {
    1225           0 :         sal_Int32 nFlagType = SVX_SHOW_TBLCTL;
    1226           0 :         if(!( m_nHtmlMode & HTMLMODE_ON ) ||
    1227           0 :             m_nHtmlMode & HTMLMODE_SOME_STYLES)
    1228           0 :             nFlagType |= SVX_SHOW_SELECTOR;
    1229           0 :         aSet.Put (SfxUInt32Item(SID_FLAG_TYPE, nFlagType));
    1230           0 :         rPage.PageCreated(aSet);
    1231             :     }
    1232           0 :     else if (nId == m_nBorderId)
    1233             :     {
    1234           0 :         aSet.Put (SfxUInt16Item(SID_SWMODE_TYPE,SW_BORDER_MODE_TABLE));
    1235           0 :         rPage.PageCreated(aSet);
    1236             :     }
    1237           0 :     else if (nId == m_nTextFlowId)
    1238             :     {
    1239           0 :         ((SwTextFlowPage&)rPage).SetShell(pShell);
    1240           0 :         const sal_uInt16 eType = pShell->GetFrmType(0,true);
    1241           0 :         if( !(FRMTYPE_BODY & eType) )
    1242           0 :             ((SwTextFlowPage&)rPage).DisablePageBreak();
    1243           0 :     }
    1244           0 : }
    1245             : 
    1246           0 : SwTextFlowPage::SwTextFlowPage(vcl::Window* pParent, const SfxItemSet& rSet)
    1247             :     : SfxTabPage(pParent, "TableTextFlowPage",
    1248             :         "modules/swriter/ui/tabletextflowpage.ui", &rSet)
    1249             :     , pShell(0)
    1250             :     , bPageBreak(true)
    1251           0 :     , bHtmlMode(false)
    1252             : {
    1253           0 :     get(m_pPgBrkCB, "break");
    1254             : 
    1255           0 :     get(m_pPgBrkRB, "page");
    1256           0 :     get(m_pColBrkRB, "column");
    1257             : 
    1258           0 :     get(m_pPgBrkBeforeRB, "before");
    1259           0 :     get(m_pPgBrkAfterRB, "after");
    1260             : 
    1261           0 :     get(m_pPageCollCB, "pagestyle");
    1262           0 :     get(m_pPageCollLB, "pagestylelb");
    1263           0 :     get(m_pPageNoFT, "pagenoft");
    1264           0 :     get(m_pPageNoNF, "pagenonf");
    1265             : 
    1266           0 :     get(m_pSplitCB, "split");
    1267           0 :     get(m_pSplitRowCB, "splitrow");
    1268           0 :     get(m_pKeepCB, "keep");
    1269           0 :     get(m_pHeadLineCB, "headline");
    1270             : 
    1271           0 :     get(m_pRepeatHeaderCombo, "repeatheader");
    1272           0 :     get(m_pRepeatHeaderNF, "repeatheadernf");
    1273             : 
    1274           0 :     get(m_pTextDirectionLB, "textdirection");
    1275           0 :     get(m_pVertOrientLB, "vertorient");
    1276             : 
    1277           0 :     m_pPgBrkRB->SetAccessibleRelationMemberOf(m_pPgBrkCB);
    1278           0 :     m_pColBrkRB->SetAccessibleRelationMemberOf(m_pPgBrkCB);
    1279           0 :     m_pPgBrkBeforeRB->SetAccessibleRelationMemberOf(m_pPgBrkCB);
    1280           0 :     m_pPgBrkAfterRB->SetAccessibleRelationMemberOf(m_pPgBrkCB);
    1281           0 :     m_pPageCollLB->SetAccessibleName(m_pPageCollCB->GetText());
    1282             : 
    1283           0 :     m_pPgBrkCB->SetClickHdl(LINK(this, SwTextFlowPage, PageBreakHdl_Impl));
    1284             :     m_pPgBrkBeforeRB->SetClickHdl(
    1285           0 :         LINK( this, SwTextFlowPage, PageBreakPosHdl_Impl ) );
    1286             :     m_pPgBrkAfterRB->SetClickHdl(
    1287           0 :         LINK( this, SwTextFlowPage, PageBreakPosHdl_Impl ) );
    1288             :     m_pPageCollCB->SetClickHdl(
    1289           0 :         LINK( this, SwTextFlowPage, ApplyCollClickHdl_Impl ) );
    1290             :     m_pColBrkRB->SetClickHdl(
    1291           0 :         LINK( this, SwTextFlowPage, PageBreakTypeHdl_Impl ) );
    1292             :     m_pPgBrkRB->SetClickHdl(
    1293           0 :         LINK( this, SwTextFlowPage, PageBreakTypeHdl_Impl ) );
    1294             :     m_pSplitCB->SetClickHdl(
    1295           0 :         LINK( this, SwTextFlowPage, SplitHdl_Impl));
    1296             :     m_pSplitRowCB->SetClickHdl(
    1297           0 :         LINK( this, SwTextFlowPage, SplitRowHdl_Impl));
    1298           0 :     m_pHeadLineCB->SetClickHdl( LINK( this, SwTextFlowPage, HeadLineCBClickHdl ) );
    1299             : 
    1300             : #ifndef SW_FILEFORMAT_40
    1301             :     const SfxPoolItem *pItem;
    1302           0 :     if(SfxItemState::SET == rSet.GetItemState( SID_HTML_MODE, false,&pItem )
    1303           0 :         && ((const SfxUInt16Item*)pItem)->GetValue() & HTMLMODE_ON)
    1304             : #endif
    1305             :     {
    1306           0 :         m_pKeepCB->Hide();
    1307           0 :         m_pSplitCB->Hide();
    1308           0 :         m_pSplitRowCB->Hide();
    1309             :     }
    1310             : 
    1311           0 :     HeadLineCBClickHdl();
    1312           0 : }
    1313             : 
    1314           0 :  SwTextFlowPage::~SwTextFlowPage()
    1315             : {
    1316           0 : }
    1317             : 
    1318           0 : SfxTabPage*   SwTextFlowPage::Create( vcl::Window* pParent,
    1319             :                                 const SfxItemSet* rAttrSet)
    1320             : {
    1321           0 :     return new SwTextFlowPage(pParent, *rAttrSet);
    1322             : }
    1323             : 
    1324           0 : bool  SwTextFlowPage::FillItemSet( SfxItemSet* rSet )
    1325             : {
    1326           0 :     bool bModified = false;
    1327             : 
    1328             :     //Repeat Heading
    1329           0 :     if(m_pHeadLineCB->IsValueChangedFromSaved() ||
    1330           0 :        m_pRepeatHeaderNF->IsValueChangedFromSaved() )
    1331             :     {
    1332             :         bModified |= 0 != rSet->Put(
    1333           0 :             SfxUInt16Item(FN_PARAM_TABLE_HEADLINE, m_pHeadLineCB->IsChecked()? sal_uInt16(m_pRepeatHeaderNF->GetValue()) : 0 ));
    1334             :     }
    1335           0 :     if(m_pKeepCB->IsValueChangedFromSaved())
    1336           0 :         bModified |= 0 != rSet->Put( SvxFmtKeepItem( m_pKeepCB->IsChecked(), RES_KEEP));
    1337             : 
    1338           0 :     if(m_pSplitCB->IsValueChangedFromSaved())
    1339           0 :         bModified |= 0 != rSet->Put( SwFmtLayoutSplit( m_pSplitCB->IsChecked()));
    1340             : 
    1341           0 :     if(m_pSplitRowCB->IsValueChangedFromSaved())
    1342           0 :         bModified |= 0 != rSet->Put( SwFmtRowSplit( m_pSplitRowCB->IsChecked()));
    1343             : 
    1344           0 :     const SvxFmtBreakItem* pBreak = (const SvxFmtBreakItem*)GetOldItem( *rSet, RES_BREAK );
    1345           0 :     const SwFmtPageDesc* pDesc = (const SwFmtPageDesc*) GetOldItem( *rSet, RES_PAGEDESC );
    1346             : 
    1347           0 :     bool bState = m_pPageCollCB->IsChecked();
    1348             : 
    1349             :     //If we have a page style, then there's no break
    1350           0 :     bool bPageItemPut = false;
    1351           0 :     if ( bState != (m_pPageCollCB->GetSavedValue() == 1) ||
    1352           0 :          ( bState &&
    1353           0 :            m_pPageCollLB->IsValueChangedFromSaved() )
    1354           0 :            || (m_pPageNoNF->IsEnabled() && m_pPageNoNF->IsValueModified()) )
    1355             :     {
    1356           0 :         OUString sPage;
    1357             : 
    1358           0 :         if ( bState )
    1359             :         {
    1360           0 :             sPage = m_pPageCollLB->GetSelectEntry();
    1361             :         }
    1362           0 :         sal_uInt16 nPgNum = static_cast< sal_uInt16 >(m_pPageNoNF->GetValue());
    1363           0 :         if ( !pDesc || !pDesc->GetPageDesc() ||
    1364           0 :             ( pDesc->GetPageDesc() && ((pDesc->GetPageDesc()->GetName() != sPage) ||
    1365           0 :                     !comphelper::string::equals(m_pPageNoNF->GetSavedValue(), nPgNum))))
    1366             :         {
    1367           0 :             SwFmtPageDesc aFmt( pShell->FindPageDescByName( sPage, true ) );
    1368           0 :             aFmt.SetNumOffset(bState ? nPgNum : 0);
    1369           0 :             bModified |= 0 != rSet->Put( aFmt );
    1370           0 :             bPageItemPut = bState;
    1371           0 :         }
    1372             :     }
    1373           0 :     bool bIsChecked = m_pPgBrkCB->IsChecked();
    1374           0 :     if ( !bPageItemPut &&
    1375           0 :         (   bState != (m_pPageCollCB->GetSavedValue() == 1) ||
    1376           0 :             bIsChecked != (m_pPgBrkCB->GetSavedValue() ==1) ||
    1377           0 :             m_pPgBrkBeforeRB->IsValueChangedFromSaved()    ||
    1378           0 :             m_pPgBrkRB->IsValueChangedFromSaved() ))
    1379             :     {
    1380             :         SvxFmtBreakItem aBreak(
    1381           0 :             (const SvxFmtBreakItem&)GetItemSet().Get( RES_BREAK ) );
    1382             : 
    1383           0 :         if(bIsChecked)
    1384             :         {
    1385           0 :             bool bBefore = m_pPgBrkBeforeRB->IsChecked();
    1386             : 
    1387           0 :             if ( m_pPgBrkRB->IsChecked() )
    1388             :             {
    1389           0 :                 if ( bBefore )
    1390           0 :                     aBreak.SetValue( SVX_BREAK_PAGE_BEFORE );
    1391             :                 else
    1392           0 :                     aBreak.SetValue( SVX_BREAK_PAGE_AFTER );
    1393             :             }
    1394             :             else
    1395             :             {
    1396           0 :                 if ( bBefore )
    1397           0 :                     aBreak.SetValue( SVX_BREAK_COLUMN_BEFORE );
    1398             :                 else
    1399           0 :                     aBreak.SetValue( SVX_BREAK_COLUMN_AFTER );
    1400             :             }
    1401             :         }
    1402             :         else
    1403             :         {
    1404           0 :                 aBreak.SetValue( SVX_BREAK_NONE );
    1405             :         }
    1406             : 
    1407           0 :         if ( !pBreak || !( *(const SvxFmtBreakItem*)pBreak == aBreak ) )
    1408             :         {
    1409           0 :             bModified |= 0 != rSet->Put( aBreak );
    1410           0 :         }
    1411             :     }
    1412             : 
    1413           0 :     if(m_pTextDirectionLB->IsValueChangedFromSaved())
    1414             :     {
    1415             :           bModified |= 0 != rSet->Put(
    1416             :                     SvxFrameDirectionItem(
    1417           0 :                         (SvxFrameDirection)(sal_uLong)m_pTextDirectionLB->GetEntryData(m_pTextDirectionLB->GetSelectEntryPos())
    1418           0 :                         , FN_TABLE_BOX_TEXTORIENTATION));
    1419             :     }
    1420             : 
    1421           0 :     if(m_pVertOrientLB->IsValueChangedFromSaved())
    1422             :     {
    1423           0 :         sal_uInt16 nOrient = USHRT_MAX;
    1424           0 :         switch(m_pVertOrientLB->GetSelectEntryPos())
    1425             :         {
    1426           0 :             case 0 : nOrient = text::VertOrientation::NONE; break;
    1427           0 :             case 1 : nOrient = text::VertOrientation::CENTER; break;
    1428           0 :             case 2 : nOrient = text::VertOrientation::BOTTOM; break;
    1429             :         }
    1430           0 :         if(nOrient != USHRT_MAX)
    1431           0 :             bModified |= 0 != rSet->Put(SfxUInt16Item(FN_TABLE_SET_VERT_ALIGN, nOrient));
    1432             :     }
    1433             : 
    1434           0 :     return bModified;
    1435             : 
    1436             : }
    1437             : 
    1438           0 : void   SwTextFlowPage::Reset( const SfxItemSet* rSet )
    1439             : {
    1440             :     const SfxPoolItem* pItem;
    1441           0 :     SvxHtmlOptions& rHtmlOpt = SvxHtmlOptions::Get();
    1442           0 :     bool bFlowAllowed = !bHtmlMode || rHtmlOpt.IsPrintLayoutExtension();
    1443           0 :     if(bFlowAllowed)
    1444             :     {
    1445             :         //Inserting of the existing page templates in the list box
    1446           0 :         const sal_uInt16 nCount = pShell->GetPageDescCnt();
    1447             : 
    1448           0 :         for( sal_uInt16 i = 0; i < nCount; ++i)
    1449             :         {
    1450           0 :             const SwPageDesc &rPageDesc = pShell->GetPageDesc(i);
    1451           0 :             m_pPageCollLB->InsertEntry(rPageDesc.GetName());
    1452             :         }
    1453             : 
    1454           0 :         OUString aFmtName;
    1455           0 :         for(sal_uInt16 i = RES_POOLPAGE_BEGIN; i < RES_POOLPAGE_END; ++i)
    1456           0 :             if( LISTBOX_ENTRY_NOTFOUND == m_pPageCollLB->GetEntryPos(
    1457           0 :                     aFmtName = SwStyleNameMapper::GetUIName( i, aFmtName ) ))
    1458           0 :                 m_pPageCollLB->InsertEntry( aFmtName );
    1459             : 
    1460           0 :         if(SfxItemState::SET == rSet->GetItemState( RES_KEEP, false, &pItem ))
    1461             :         {
    1462           0 :             m_pKeepCB->Check( ((const SvxFmtKeepItem*)pItem)->GetValue() );
    1463           0 :             m_pKeepCB->SaveValue();
    1464             :         }
    1465           0 :         if(SfxItemState::SET == rSet->GetItemState( RES_LAYOUT_SPLIT, false, &pItem ))
    1466             :         {
    1467           0 :             m_pSplitCB->Check( ((const SwFmtLayoutSplit*)pItem)->GetValue() );
    1468             :         }
    1469             :         else
    1470           0 :             m_pSplitCB->Check();
    1471             : 
    1472           0 :         m_pSplitCB->SaveValue();
    1473           0 :         SplitHdl_Impl(m_pSplitCB);
    1474             : 
    1475           0 :         if(SfxItemState::SET == rSet->GetItemState( RES_ROW_SPLIT, false, &pItem ))
    1476             :         {
    1477           0 :             m_pSplitRowCB->Check( ((const SwFmtRowSplit*)pItem)->GetValue() );
    1478             :         }
    1479             :         else
    1480           0 :             m_pSplitRowCB->SetState(TRISTATE_INDET);
    1481           0 :         m_pSplitRowCB->SaveValue();
    1482             : 
    1483           0 :         if(bPageBreak)
    1484             :         {
    1485           0 :             if(SfxItemState::SET == rSet->GetItemState( RES_PAGEDESC, false, &pItem ))
    1486             :             {
    1487           0 :                 OUString sPageDesc;
    1488           0 :                 const SwPageDesc* pDesc = ((const SwFmtPageDesc*)pItem)->GetPageDesc();
    1489             : 
    1490             :                 //m_pPageNoNF->SetValue(((const SwFmtPageDesc*)pItem)->GetNumOffset());
    1491           0 :                 ::boost::optional<sal_uInt16> oNumOffset = ((const SwFmtPageDesc*)pItem)->GetNumOffset();
    1492           0 :                 if (oNumOffset)
    1493           0 :                     m_pPageNoNF->SetValue(oNumOffset.get());
    1494             :                 else
    1495           0 :                     m_pPageNoNF->Enable(false);
    1496             : 
    1497           0 :                 if(pDesc)
    1498           0 :                     sPageDesc = pDesc->GetName();
    1499           0 :                 if ( !sPageDesc.isEmpty() &&
    1500           0 :                         m_pPageCollLB->GetEntryPos( sPageDesc ) != LISTBOX_ENTRY_NOTFOUND )
    1501             :                 {
    1502           0 :                     m_pPageCollLB->SelectEntry( sPageDesc );
    1503           0 :                     m_pPageCollCB->Check();
    1504             : 
    1505           0 :                     m_pPgBrkCB->Enable();
    1506           0 :                     m_pPgBrkRB->Enable();
    1507           0 :                     m_pColBrkRB->Enable();
    1508           0 :                     m_pPgBrkBeforeRB->Enable();
    1509           0 :                     m_pPgBrkAfterRB->Enable();
    1510           0 :                     m_pPageCollCB->Enable();
    1511           0 :                     m_pPgBrkCB->Check();
    1512             : 
    1513           0 :                     m_pPgBrkCB->Check( true );
    1514           0 :                     m_pColBrkRB->Check( false );
    1515           0 :                     m_pPgBrkBeforeRB->Check( true );
    1516           0 :                     m_pPgBrkAfterRB->Check( false );
    1517             :                 }
    1518             :                 else
    1519             :                 {
    1520           0 :                     m_pPageCollLB->SetNoSelection();
    1521           0 :                     m_pPageCollCB->Check(false);
    1522           0 :                 }
    1523             :             }
    1524             : 
    1525           0 :             if(SfxItemState::SET == rSet->GetItemState( RES_BREAK, false, &pItem ))
    1526             :             {
    1527           0 :                 const SvxFmtBreakItem* pPageBreak = (const SvxFmtBreakItem*)pItem;
    1528           0 :                 SvxBreak eBreak = (SvxBreak)pPageBreak->GetValue();
    1529             : 
    1530           0 :                 if ( eBreak != SVX_BREAK_NONE )
    1531             :                 {
    1532           0 :                     m_pPgBrkCB->Check();
    1533           0 :                     m_pPageCollCB->Enable(false);
    1534           0 :                     m_pPageCollLB->Enable(false);
    1535           0 :                     m_pPageNoFT->Enable(false);
    1536           0 :                     m_pPageNoNF->Enable(false);
    1537             :                 }
    1538           0 :                 switch ( eBreak )
    1539             :                 {
    1540             :                     case SVX_BREAK_PAGE_BEFORE:
    1541           0 :                         m_pPgBrkRB->Check( true );
    1542           0 :                         m_pColBrkRB->Check( false );
    1543           0 :                         m_pPgBrkBeforeRB->Check( true );
    1544           0 :                         m_pPgBrkAfterRB->Check( false );
    1545           0 :                         break;
    1546             :                     case SVX_BREAK_PAGE_AFTER:
    1547           0 :                         m_pPgBrkRB->Check( true );
    1548           0 :                         m_pColBrkRB->Check( false );
    1549           0 :                         m_pPgBrkBeforeRB->Check( false );
    1550           0 :                         m_pPgBrkAfterRB->Check( true );
    1551           0 :                         break;
    1552             :                     case SVX_BREAK_COLUMN_BEFORE:
    1553           0 :                         m_pPgBrkRB->Check( false );
    1554           0 :                         m_pColBrkRB->Check( true );
    1555           0 :                         m_pPgBrkBeforeRB->Check( true );
    1556           0 :                         m_pPgBrkAfterRB->Check( false );
    1557           0 :                         break;
    1558             :                     case SVX_BREAK_COLUMN_AFTER:
    1559           0 :                         m_pPgBrkRB->Check( false );
    1560           0 :                         m_pColBrkRB->Check( true );
    1561           0 :                         m_pPgBrkBeforeRB->Check( false );
    1562           0 :                         m_pPgBrkAfterRB->Check( true );
    1563           0 :                         break;
    1564             :                     default:; //prevent warning
    1565             :                 }
    1566             : 
    1567             :             }
    1568           0 :             if ( m_pPgBrkBeforeRB->IsChecked() )
    1569           0 :                 PageBreakPosHdl_Impl(m_pPgBrkBeforeRB);
    1570           0 :             else if ( m_pPgBrkAfterRB->IsChecked() )
    1571           0 :                 PageBreakPosHdl_Impl(m_pPgBrkAfterRB);
    1572           0 :             PageBreakHdl_Impl( m_pPgBrkCB );
    1573           0 :         }
    1574             :     }
    1575             :     else
    1576             :     {
    1577           0 :         m_pPgBrkRB->Enable(false);
    1578           0 :         m_pColBrkRB->Enable(false);
    1579           0 :         m_pPgBrkBeforeRB->Enable(false);
    1580           0 :         m_pPgBrkAfterRB->Enable(false);
    1581           0 :         m_pKeepCB->Enable(false);
    1582           0 :         m_pSplitCB->Enable(false);
    1583           0 :         m_pPgBrkCB->Enable(false);
    1584           0 :         m_pPageCollCB->Enable(false);
    1585           0 :         m_pPageCollLB->Enable(false);
    1586             :     }
    1587             : 
    1588           0 :     if(SfxItemState::SET == rSet->GetItemState( FN_PARAM_TABLE_HEADLINE, false, &pItem ))
    1589             :     {
    1590           0 :         sal_uInt16 nRep = ((const SfxUInt16Item*)pItem)->GetValue();
    1591           0 :         m_pHeadLineCB->Check( nRep > 0 );
    1592           0 :         m_pHeadLineCB->SaveValue();
    1593           0 :         m_pRepeatHeaderNF->SetValue( nRep );
    1594           0 :         m_pRepeatHeaderNF->SetMin( 1 );
    1595           0 :         m_pRepeatHeaderNF->SaveValue();
    1596             :     }
    1597           0 :     if ( rSet->GetItemState(FN_TABLE_BOX_TEXTORIENTATION) > SfxItemState::DEFAULT )
    1598             :     {
    1599           0 :         sal_uLong nDirection = ((const SvxFrameDirectionItem&)rSet->Get(FN_TABLE_BOX_TEXTORIENTATION)).GetValue();
    1600           0 :         m_pTextDirectionLB->SelectEntryPos(m_pTextDirectionLB->GetEntryPos( (const void*)nDirection ));
    1601             :     }
    1602             : 
    1603           0 :     if ( rSet->GetItemState(FN_TABLE_SET_VERT_ALIGN) > SfxItemState::DEFAULT )
    1604             :     {
    1605           0 :         sal_uInt16 nVert = ((const SfxUInt16Item&)rSet->Get(FN_TABLE_SET_VERT_ALIGN)).GetValue();
    1606           0 :         sal_uInt16 nPos = 0;
    1607           0 :         switch(nVert)
    1608             :         {
    1609           0 :             case text::VertOrientation::NONE:     nPos = 0;   break;
    1610           0 :             case text::VertOrientation::CENTER:   nPos = 1;   break;
    1611           0 :             case text::VertOrientation::BOTTOM:   nPos = 2;   break;
    1612             :         }
    1613           0 :         m_pVertOrientLB->SelectEntryPos(nPos);
    1614             :     }
    1615             : 
    1616           0 :     m_pPageCollCB->SaveValue();
    1617           0 :     m_pPageCollLB->SaveValue();
    1618           0 :     m_pPgBrkCB->SaveValue();
    1619           0 :     m_pPgBrkRB->SaveValue();
    1620           0 :     m_pColBrkRB->SaveValue();
    1621           0 :     m_pPgBrkBeforeRB->SaveValue();
    1622           0 :     m_pPgBrkAfterRB->SaveValue();
    1623           0 :     m_pPageNoNF->SaveValue();
    1624           0 :     m_pTextDirectionLB->SaveValue();
    1625           0 :     m_pVertOrientLB->SaveValue();
    1626             : 
    1627           0 :     HeadLineCBClickHdl();
    1628           0 : }
    1629             : 
    1630           0 : void SwTextFlowPage::SetShell(SwWrtShell* pSh)
    1631             : {
    1632           0 :     pShell = pSh;
    1633           0 :     bHtmlMode = 0 != (::GetHtmlMode(pShell->GetView().GetDocShell()) & HTMLMODE_ON);
    1634           0 :     if(bHtmlMode)
    1635             :     {
    1636           0 :         m_pPageNoNF->Enable(false);
    1637           0 :         m_pPageNoFT->Enable(false);
    1638             :     }
    1639           0 : }
    1640             : 
    1641           0 : IMPL_LINK_NOARG(SwTextFlowPage, PageBreakHdl_Impl)
    1642             : {
    1643           0 :     if( m_pPgBrkCB->IsChecked() )
    1644             :     {
    1645           0 :             m_pPgBrkRB->       Enable();
    1646           0 :             m_pColBrkRB->      Enable();
    1647           0 :             m_pPgBrkBeforeRB-> Enable();
    1648           0 :             m_pPgBrkAfterRB->  Enable();
    1649             : 
    1650           0 :             if ( m_pPgBrkRB->IsChecked() && m_pPgBrkBeforeRB->IsChecked() )
    1651             :             {
    1652           0 :                 m_pPageCollCB->Enable();
    1653             : 
    1654           0 :                 bool bEnable = m_pPageCollCB->IsChecked() &&
    1655           0 :                                             m_pPageCollLB->GetEntryCount();
    1656           0 :                 m_pPageCollLB->Enable(bEnable);
    1657           0 :                 if(!bHtmlMode)
    1658             :                 {
    1659           0 :                     m_pPageNoFT->Enable(bEnable);
    1660           0 :                     m_pPageNoNF->Enable(bEnable);
    1661             :                 }
    1662             :             }
    1663             :     }
    1664             :     else
    1665             :     {
    1666           0 :             m_pPageCollCB->Check( false );
    1667           0 :             m_pPageCollCB->Enable(false);
    1668           0 :             m_pPageCollLB->Enable(false);
    1669           0 :             m_pPageNoFT->Enable(false);
    1670           0 :             m_pPageNoNF->Enable(false);
    1671           0 :             m_pPgBrkRB->       Enable(false);
    1672           0 :             m_pColBrkRB->      Enable(false);
    1673           0 :             m_pPgBrkBeforeRB-> Enable(false);
    1674           0 :             m_pPgBrkAfterRB->  Enable(false);
    1675             :     }
    1676           0 :     return 0;
    1677             : }
    1678             : 
    1679           0 : IMPL_LINK_NOARG(SwTextFlowPage, ApplyCollClickHdl_Impl)
    1680             : {
    1681           0 :     bool bEnable = false;
    1682           0 :     if ( m_pPageCollCB->IsChecked() &&
    1683           0 :          m_pPageCollLB->GetEntryCount() )
    1684             :     {
    1685           0 :         bEnable = true;
    1686           0 :         m_pPageCollLB->SelectEntryPos( 0 );
    1687             :     }
    1688             :     else
    1689             :     {
    1690           0 :         m_pPageCollLB->SetNoSelection();
    1691             :     }
    1692           0 :     m_pPageCollLB->Enable(bEnable);
    1693           0 :     if(!bHtmlMode)
    1694             :     {
    1695           0 :         m_pPageNoFT->Enable(bEnable);
    1696           0 :         m_pPageNoNF->Enable(bEnable);
    1697             :     }
    1698           0 :     return 0;
    1699             : }
    1700             : 
    1701           0 : IMPL_LINK( SwTextFlowPage, PageBreakPosHdl_Impl, RadioButton*, pBtn )
    1702             : {
    1703           0 :     if ( m_pPgBrkCB->IsChecked() )
    1704             :     {
    1705           0 :         if ( pBtn == m_pPgBrkBeforeRB && m_pPgBrkRB->IsChecked() )
    1706             :         {
    1707           0 :             m_pPageCollCB->Enable();
    1708             : 
    1709           0 :             bool bEnable = m_pPageCollCB->IsChecked()  &&
    1710           0 :                                         m_pPageCollLB->GetEntryCount();
    1711             : 
    1712           0 :             m_pPageCollLB->Enable(bEnable);
    1713           0 :             if(!bHtmlMode)
    1714             :             {
    1715           0 :                 m_pPageNoFT->Enable(bEnable);
    1716           0 :                 m_pPageNoNF->Enable(bEnable);
    1717             :             }
    1718             :         }
    1719           0 :         else if (pBtn == m_pPgBrkAfterRB)
    1720             :         {
    1721           0 :             m_pPageCollCB->Check( false );
    1722           0 :             m_pPageCollCB->Enable(false);
    1723           0 :             m_pPageCollLB->Enable(false);
    1724           0 :             m_pPageNoFT->Enable(false);
    1725           0 :             m_pPageNoNF->Enable(false);
    1726             :         }
    1727             :     }
    1728           0 :     return 0;
    1729             : }
    1730             : 
    1731           0 : IMPL_LINK( SwTextFlowPage, PageBreakTypeHdl_Impl, RadioButton*, pBtn )
    1732             : {
    1733           0 :     if ( pBtn == m_pColBrkRB || m_pPgBrkAfterRB->IsChecked() )
    1734             :     {
    1735           0 :         m_pPageCollCB->Check(false);
    1736           0 :         m_pPageCollCB->Enable(false);
    1737           0 :         m_pPageCollLB->Enable(false);
    1738           0 :         m_pPageNoFT->Enable(false);
    1739           0 :         m_pPageNoNF->Enable(false);
    1740             :     }
    1741           0 :     else if ( m_pPgBrkBeforeRB->IsChecked() )
    1742           0 :         PageBreakPosHdl_Impl(m_pPgBrkBeforeRB);
    1743           0 :     return 0;
    1744             : }
    1745             : 
    1746           0 : IMPL_LINK( SwTextFlowPage, SplitHdl_Impl, CheckBox*, pBox )
    1747             : {
    1748           0 :     m_pSplitRowCB->Enable(pBox->IsChecked());
    1749           0 :     return 0;
    1750             : }
    1751             : 
    1752           0 : IMPL_LINK( SwTextFlowPage, SplitRowHdl_Impl, TriStateBox*, pBox )
    1753             : {
    1754           0 :     pBox->EnableTriState(false);
    1755           0 :     return 0;
    1756             : }
    1757             : 
    1758           0 : IMPL_LINK_NOARG(SwTextFlowPage, HeadLineCBClickHdl)
    1759             : {
    1760           0 :     m_pRepeatHeaderCombo->Enable(m_pHeadLineCB->IsChecked());
    1761             : 
    1762           0 :     return 0;
    1763             : }
    1764             : 
    1765           0 : void SwTextFlowPage::DisablePageBreak()
    1766             : {
    1767           0 :     bPageBreak = false;
    1768           0 :     m_pPgBrkCB->Disable();
    1769           0 :     m_pPgBrkRB->Disable();
    1770           0 :     m_pColBrkRB->Disable();
    1771           0 :     m_pPgBrkBeforeRB->Disable();
    1772           0 :     m_pPgBrkAfterRB->Disable();
    1773           0 :     m_pPageCollCB->Disable();
    1774           0 :     m_pPageCollLB->Disable();
    1775           0 :     m_pPageNoFT->Disable();
    1776           0 :     m_pPageNoNF->Disable();
    1777           0 : }
    1778             : 
    1779             : /* vim:set shiftwidth=4 softtabstop=4 expandtab: */

Generated by: LCOV version 1.10