LCOV - code coverage report
Current view: top level - cui/source/tabpages - paragrph.cxx (source / functions) Hit Total Coverage
Test: commit e02a6cb2c3e2b23b203b422e4e0680877f232636 Lines: 0 1239 0.0 %
Date: 2014-04-14 Functions: 0 84 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 <svl/style.hxx>
      21             : #include <sfx2/app.hxx>
      22             : #include <sfx2/dialoghelper.hxx>
      23             : #include <sfx2/objsh.hxx>
      24             : #include <sfx2/module.hxx>
      25             : #include <vcl/mnemonic.hxx>
      26             : #include <svx/dialogs.hrc>
      27             : 
      28             : #include <svl/languageoptions.hxx>
      29             : #include <svl/cjkoptions.hxx>
      30             : #include <editeng/pgrditem.hxx>
      31             : #include <cuires.hrc>
      32             : #include "paragrph.hrc"
      33             : #include "paragrph.hxx"
      34             : #include <editeng/frmdiritem.hxx>
      35             : #include <editeng/lspcitem.hxx>
      36             : #include <editeng/adjustitem.hxx>
      37             : #include <editeng/orphitem.hxx>
      38             : #include <editeng/widwitem.hxx>
      39             : #include <editeng/tstpitem.hxx>
      40             : #include <editeng/pmdlitem.hxx>
      41             : #include <editeng/spltitem.hxx>
      42             : #include <editeng/hyphenzoneitem.hxx>
      43             : #include <editeng/ulspitem.hxx>
      44             : #include <editeng/lrspitem.hxx>
      45             : #include <editeng/formatbreakitem.hxx>
      46             : #include <editeng/keepitem.hxx>
      47             : #include "svx/dlgutil.hxx"
      48             : #include <dialmgr.hxx>
      49             : #include <sfx2/htmlmode.hxx>
      50             : #include <editeng/paravertalignitem.hxx>
      51             : #include <svl/eitem.hxx>
      52             : #include <sfx2/request.hxx>
      53             : #include <svl/intitem.hxx>
      54             : 
      55             : static sal_uInt16 pStdRanges[] =
      56             : {
      57             :     SID_ATTR_PARA_LINESPACE,        // 10033
      58             :     SID_ATTR_PARA_LINESPACE,
      59             :     SID_ATTR_LRSPACE,               // 10048 -
      60             :     SID_ATTR_ULSPACE,               // 10049
      61             :     SID_ATTR_PARA_REGISTER,         // 10413
      62             :     SID_ATTR_PARA_REGISTER,
      63             :     0
      64             : };
      65             : 
      66             : static sal_uInt16 pAlignRanges[] =
      67             : {
      68             :     SID_ATTR_PARA_ADJUST,           // 10027
      69             :     SID_ATTR_PARA_ADJUST,
      70             :     0
      71             : };
      72             : 
      73             : static sal_uInt16 pExtRanges[] =
      74             : {
      75             :     SID_ATTR_PARA_PAGEBREAK,        // 10037 -
      76             :     SID_ATTR_PARA_WIDOWS,           // 10041
      77             :     SID_ATTR_PARA_MODEL,            // 10065 -
      78             :     SID_ATTR_PARA_KEEP,             // 10066
      79             :     0
      80             : };
      81             : 
      82             : #define MAX_DURCH 5670      // 10 cm makes sense as maximum interline lead
      83             :                             // according to BP
      84             : #define FIX_DIST_DEF 283    // standard fix distance 0,5 cm
      85             : 
      86             : enum LineSpaceList
      87             : {
      88             :     LLINESPACE_1    = 0,
      89             :     LLINESPACE_15   = 1,
      90             :     LLINESPACE_2    = 2,
      91             :     LLINESPACE_PROP = 3,
      92             :     LLINESPACE_MIN  = 4,
      93             :     LLINESPACE_DURCH= 5,
      94             :     LLINESPACE_FIX  = 6,
      95             :     LLINESPACE_END
      96             : };
      97             : 
      98             : void SetLineSpace_Impl( SvxLineSpacingItem&, int, long lValue = 0 );
      99             : 
     100           0 : void SetLineSpace_Impl( SvxLineSpacingItem& rLineSpace,
     101             :                         int eSpace, long lValue )
     102             : {
     103           0 :     switch ( eSpace )
     104             :     {
     105             :         case LLINESPACE_1:
     106           0 :             rLineSpace.GetLineSpaceRule() = SVX_LINE_SPACE_AUTO;
     107           0 :             rLineSpace.GetInterLineSpaceRule() = SVX_INTER_LINE_SPACE_OFF;
     108           0 :             break;
     109             : 
     110             :         case LLINESPACE_15:
     111           0 :             rLineSpace.GetLineSpaceRule() = SVX_LINE_SPACE_AUTO;
     112           0 :             rLineSpace.SetPropLineSpace( 150 );
     113           0 :             break;
     114             : 
     115             :         case LLINESPACE_2:
     116           0 :             rLineSpace.GetLineSpaceRule() = SVX_LINE_SPACE_AUTO;
     117           0 :             rLineSpace.SetPropLineSpace( 200 );
     118           0 :             break;
     119             : 
     120             :         case LLINESPACE_PROP:
     121           0 :             rLineSpace.GetLineSpaceRule() = SVX_LINE_SPACE_AUTO;
     122           0 :             rLineSpace.SetPropLineSpace( (sal_uInt8)lValue );
     123           0 :             break;
     124             : 
     125             :         case LLINESPACE_MIN:
     126           0 :             rLineSpace.SetLineHeight( (sal_uInt16)lValue );
     127           0 :             rLineSpace.GetInterLineSpaceRule() = SVX_INTER_LINE_SPACE_OFF;
     128           0 :             break;
     129             : 
     130             :         case LLINESPACE_DURCH:
     131           0 :             rLineSpace.GetLineSpaceRule() = SVX_LINE_SPACE_AUTO;
     132           0 :             rLineSpace.SetInterLineSpace( (sal_uInt16)lValue );
     133           0 :             break;
     134             : 
     135             :         case LLINESPACE_FIX:
     136           0 :             rLineSpace.SetLineHeight((sal_uInt16)lValue);
     137           0 :             rLineSpace.GetLineSpaceRule() = SVX_LINE_SPACE_FIX;
     138           0 :             rLineSpace.GetInterLineSpaceRule() = SVX_INTER_LINE_SPACE_OFF;
     139           0 :         break;
     140             :     }
     141           0 : }
     142             : 
     143           0 : sal_uInt16 GetHtmlMode_Impl(const SfxItemSet& rSet)
     144             : {
     145           0 :     sal_uInt16 nHtmlMode = 0;
     146           0 :     const SfxPoolItem* pItem = 0;
     147             :     SfxObjectShell* pShell;
     148           0 :     if(SFX_ITEM_SET == rSet.GetItemState(SID_HTML_MODE, false, &pItem) ||
     149           0 :         ( 0 != (pShell = SfxObjectShell::Current()) &&
     150           0 :                     0 != (pItem = pShell->GetItem(SID_HTML_MODE))))
     151             :     {
     152           0 :         nHtmlMode = ((SfxUInt16Item*)pItem)->GetValue();
     153             :     }
     154           0 :     return nHtmlMode;
     155             : 
     156             : }
     157             : 
     158           0 : IMPL_LINK_NOARG(SvxStdParagraphTabPage, ELRLoseFocusHdl)
     159             : {
     160           0 :     SfxItemPool* pPool = GetItemSet().GetPool();
     161             :     DBG_ASSERT( pPool, "Wo ist der Pool" );
     162             :     FieldUnit eUnit =
     163           0 :         MapToFieldUnit( pPool->GetMetric( GetWhich( SID_ATTR_LRSPACE ) ) );
     164             : 
     165           0 :     sal_Int64 nL = m_pLeftIndent->Denormalize( m_pLeftIndent->GetValue( eUnit ) );
     166           0 :     sal_Int64 nR = m_pRightIndent->Denormalize( m_pRightIndent->GetValue( eUnit ) );
     167           0 :     OUString aTmp = m_pFLineIndent->GetText();
     168             : 
     169           0 :     if( m_pLeftIndent->GetMin() < 0 )
     170           0 :         m_pFLineIndent->SetMin( -99999, FUNIT_MM );
     171             :     else
     172           0 :         m_pFLineIndent->SetMin( m_pFLineIndent->Normalize( -nL ), eUnit );
     173             : 
     174             :     // Check only for concrete width (Shell)
     175           0 :     sal_Int64 nTmp = nWidth - nL - nR - MM50;
     176           0 :     m_pFLineIndent->SetMax( m_pFLineIndent->Normalize( nTmp ), eUnit );
     177             : 
     178           0 :     if ( aTmp.isEmpty() )
     179           0 :         m_pFLineIndent->SetEmptyFieldValue();
     180             :     // maximum left right
     181           0 :     aTmp = m_pLeftIndent->GetText();
     182           0 :     nTmp = nWidth - nR - MM50;
     183           0 :     m_pLeftIndent->SetMax( m_pLeftIndent->Normalize( nTmp ), eUnit );
     184             : 
     185           0 :     if ( aTmp.isEmpty() )
     186           0 :         m_pLeftIndent->SetEmptyFieldValue();
     187           0 :     aTmp = m_pRightIndent->GetText();
     188           0 :     nTmp = nWidth - nL - MM50;
     189           0 :     m_pRightIndent->SetMax( m_pRightIndent->Normalize( nTmp ), eUnit );
     190             : 
     191           0 :     if ( aTmp.isEmpty() )
     192           0 :         m_pRightIndent->SetEmptyFieldValue();
     193           0 :     return 0;
     194             : }
     195             : 
     196           0 : SfxTabPage* SvxStdParagraphTabPage::Create( Window* pParent, const SfxItemSet& rSet)
     197             : {
     198           0 :     return new SvxStdParagraphTabPage( pParent, rSet );
     199             : }
     200             : 
     201           0 : bool SvxStdParagraphTabPage::FillItemSet( SfxItemSet& rOutSet )
     202             : {
     203           0 :     SfxItemState eState = SFX_ITEM_UNKNOWN;
     204           0 :     const SfxPoolItem* pOld = 0;
     205           0 :     SfxItemPool* pPool = rOutSet.GetPool();
     206             :     DBG_ASSERT( pPool, "Wo ist der Pool" );
     207             : 
     208           0 :     sal_Bool bModified = sal_False;
     209             :     sal_uInt16 nWhich;
     210           0 :     sal_Int32 nPos = m_pLineDist->GetSelectEntryPos();
     211             : 
     212           0 :     if ( LISTBOX_ENTRY_NOTFOUND != nPos &&
     213           0 :          ( nPos != m_pLineDist->GetSavedValue() ||
     214           0 :            m_pLineDistAtPercentBox->IsValueModified() ||
     215           0 :            m_pLineDistAtMetricBox->IsValueModified() ) )
     216             :     {
     217           0 :         nWhich = GetWhich( SID_ATTR_PARA_LINESPACE );
     218           0 :         SfxMapUnit eUnit = pPool->GetMetric( nWhich );
     219             :         SvxLineSpacingItem aSpacing(
     220           0 :             (const SvxLineSpacingItem&)GetItemSet().Get( nWhich ) );
     221             : 
     222           0 :         switch ( nPos )
     223             :         {
     224             :             case LLINESPACE_1:
     225             :             case LLINESPACE_15:
     226             :             case LLINESPACE_2:
     227           0 :                 SetLineSpace_Impl( aSpacing, nPos );
     228           0 :                 break;
     229             : 
     230             :             case LLINESPACE_PROP:
     231             :                 SetLineSpace_Impl( aSpacing, nPos,
     232             :                                    static_cast<long>(m_pLineDistAtPercentBox->Denormalize(
     233           0 :                                    m_pLineDistAtPercentBox->GetValue() )) );
     234           0 :                 break;
     235             : 
     236             :             case LLINESPACE_MIN:
     237             :             case LLINESPACE_DURCH:
     238             :             case LLINESPACE_FIX:
     239             :                 SetLineSpace_Impl( aSpacing, nPos,
     240           0 :                     GetCoreValue( *m_pLineDistAtMetricBox, eUnit ) );
     241           0 :             break;
     242             : 
     243             :             default:
     244             :                 OSL_FAIL( "unbekannter Type fuer Zeilenabstand." );
     245           0 :                 break;
     246             :         }
     247           0 :         eState = GetItemSet().GetItemState( nWhich );
     248           0 :         pOld = GetOldItem( rOutSet, SID_ATTR_PARA_LINESPACE );
     249             : 
     250           0 :         if ( !pOld || !( *(const SvxLineSpacingItem*)pOld == aSpacing ) ||
     251             :              SFX_ITEM_DONTCARE == eState )
     252             :         {
     253           0 :             rOutSet.Put( aSpacing );
     254           0 :             bModified = sal_True;
     255           0 :         }
     256             :     }
     257             : 
     258           0 :     if ( m_pTopDist->IsValueModified() || m_pBottomDist->IsValueModified()
     259           0 :          || m_pContextualCB->GetSavedValue() != TriState(m_pContextualCB->IsChecked()))
     260             :     {
     261           0 :         nWhich = GetWhich( SID_ATTR_ULSPACE );
     262           0 :         SfxMapUnit eUnit = pPool->GetMetric( nWhich );
     263           0 :         pOld = GetOldItem( rOutSet, SID_ATTR_ULSPACE );
     264           0 :         SvxULSpaceItem aMargin( nWhich );
     265             : 
     266           0 :         if ( bRelativeMode )
     267             :         {
     268             :             DBG_ASSERT( GetItemSet().GetParent(), "No ParentSet" );
     269             : 
     270             :             const SvxULSpaceItem& rOldItem =
     271           0 :                 (const SvxULSpaceItem&)GetItemSet().GetParent()->Get( nWhich );
     272             : 
     273           0 :             if ( m_pTopDist->IsRelative() )
     274           0 :                 aMargin.SetUpper( rOldItem.GetUpper(),
     275           0 :                                   (sal_uInt16)m_pTopDist->GetValue() );
     276             :             else
     277           0 :                 aMargin.SetUpper( (sal_uInt16)GetCoreValue( *m_pTopDist, eUnit ) );
     278             : 
     279           0 :             if ( m_pBottomDist->IsRelative() )
     280           0 :                 aMargin.SetLower( rOldItem.GetLower(),
     281           0 :                                   (sal_uInt16)m_pBottomDist->GetValue() );
     282             :             else
     283           0 :                 aMargin.SetLower( (sal_uInt16)GetCoreValue( *m_pBottomDist, eUnit ) );
     284             : 
     285             :         }
     286             :         else
     287             :         {
     288           0 :             aMargin.SetUpper( (sal_uInt16)GetCoreValue( *m_pTopDist, eUnit ) );
     289           0 :             aMargin.SetLower( (sal_uInt16)GetCoreValue( *m_pBottomDist, eUnit ) );
     290             :         }
     291           0 :         aMargin.SetContextValue(m_pContextualCB->IsChecked());
     292           0 :         eState = GetItemSet().GetItemState( nWhich );
     293             : 
     294           0 :         if ( !pOld || !( *(const SvxULSpaceItem*)pOld == aMargin ) ||
     295             :              SFX_ITEM_DONTCARE == eState )
     296             :         {
     297           0 :             rOutSet.Put( aMargin );
     298           0 :             bModified = sal_True;
     299           0 :         }
     300             :     }
     301           0 :     bool bNullTab = false;
     302             : 
     303           0 :     if ( m_pLeftIndent->IsValueModified() ||
     304           0 :          m_pFLineIndent->IsValueModified() ||
     305           0 :          m_pRightIndent->IsValueModified()
     306           0 :          ||  m_pAutoCB->GetSavedValue() != TriState(m_pAutoCB->IsChecked()) )
     307             :     {
     308           0 :         nWhich = GetWhich( SID_ATTR_LRSPACE );
     309           0 :         SfxMapUnit eUnit = pPool->GetMetric( nWhich );
     310           0 :         SvxLRSpaceItem aMargin( nWhich );
     311           0 :         pOld = GetOldItem( rOutSet, SID_ATTR_LRSPACE );
     312             : 
     313           0 :         if ( bRelativeMode )
     314             :         {
     315             :             DBG_ASSERT( GetItemSet().GetParent(), "No ParentSet" );
     316             : 
     317             :             const SvxLRSpaceItem& rOldItem =
     318           0 :                 (const SvxLRSpaceItem&)GetItemSet().GetParent()->Get( nWhich );
     319             : 
     320           0 :             if ( m_pLeftIndent->IsRelative() )
     321             :                 aMargin.SetTxtLeft( rOldItem.GetTxtLeft(),
     322           0 :                                     (sal_uInt16)m_pLeftIndent->GetValue() );
     323             :             else
     324           0 :                 aMargin.SetTxtLeft( GetCoreValue( *m_pLeftIndent, eUnit ) );
     325             : 
     326           0 :             if ( m_pRightIndent->IsRelative() )
     327             :                 aMargin.SetRight( rOldItem.GetRight(),
     328           0 :                                   (sal_uInt16)m_pRightIndent->GetValue() );
     329             :             else
     330           0 :                 aMargin.SetRight( GetCoreValue( *m_pRightIndent, eUnit ) );
     331             : 
     332           0 :             if ( m_pFLineIndent->IsRelative() )
     333           0 :                 aMargin.SetTxtFirstLineOfst( rOldItem.GetTxtFirstLineOfst(),
     334           0 :                                              (sal_uInt16)m_pFLineIndent->GetValue() );
     335             :             else
     336             :                 aMargin.SetTxtFirstLineOfst(
     337           0 :                     (sal_uInt16)GetCoreValue( *m_pFLineIndent, eUnit ) );
     338             :         }
     339             :         else
     340             :         {
     341           0 :             aMargin.SetTxtLeft( GetCoreValue( *m_pLeftIndent, eUnit ) );
     342           0 :             aMargin.SetRight( GetCoreValue( *m_pRightIndent, eUnit ) );
     343             :             aMargin.SetTxtFirstLineOfst(
     344           0 :                 (sal_uInt16)GetCoreValue( *m_pFLineIndent, eUnit ) );
     345             :         }
     346           0 :         aMargin.SetAutoFirst(m_pAutoCB->IsChecked());
     347           0 :         if ( aMargin.GetTxtFirstLineOfst() < 0 )
     348           0 :             bNullTab = true;
     349           0 :         eState = GetItemSet().GetItemState( nWhich );
     350             : 
     351           0 :         if ( !pOld || !( *(const SvxLRSpaceItem*)pOld == aMargin ) ||
     352             :              SFX_ITEM_DONTCARE == eState )
     353             :         {
     354           0 :             rOutSet.Put( aMargin );
     355           0 :             bModified = sal_True;
     356           0 :         }
     357             :     }
     358             : 
     359           0 :     if ( bNullTab )
     360             :     {
     361           0 :         MapUnit eUnit = (MapUnit)pPool->GetMetric( GetWhich( SID_ATTR_TABSTOP ) );
     362           0 :         if ( MAP_100TH_MM != eUnit )
     363             :         {
     364             : 
     365             :             // negative first line indent -> set null default tabstob if applicable
     366           0 :             sal_uInt16 _nWhich = GetWhich( SID_ATTR_TABSTOP );
     367           0 :             const SfxItemSet& rInSet = GetItemSet();
     368             : 
     369           0 :             if ( rInSet.GetItemState( _nWhich ) >= SFX_ITEM_AVAILABLE )
     370             :             {
     371             :                 const SvxTabStopItem& rTabItem =
     372           0 :                     (const SvxTabStopItem&)rInSet.Get( _nWhich );
     373           0 :                 SvxTabStopItem aNullTab( rTabItem );
     374           0 :                 SvxTabStop aNull( 0, SVX_TAB_ADJUST_DEFAULT );
     375           0 :                 aNullTab.Insert( aNull );
     376           0 :                 rOutSet.Put( aNullTab );
     377             :             }
     378             :         }
     379             :     }
     380           0 :     if( m_pRegisterCB->IsVisible())
     381             :     {
     382             :         const SfxBoolItem* pBoolItem = (SfxBoolItem*)GetOldItem(
     383           0 :                             rOutSet, SID_ATTR_PARA_REGISTER);
     384           0 :         if (!pBoolItem)
     385           0 :             return bModified;
     386           0 :         SfxBoolItem* pRegItem = (SfxBoolItem*)pBoolItem->Clone();
     387           0 :         sal_uInt16 _nWhich = GetWhich( SID_ATTR_PARA_REGISTER );
     388           0 :         bool bSet = pRegItem->GetValue();
     389             : 
     390           0 :         if(m_pRegisterCB->IsChecked() != bSet )
     391             :         {
     392           0 :             pRegItem->SetValue(!bSet);
     393           0 :             rOutSet.Put(*pRegItem);
     394           0 :             bModified = sal_True;
     395             :         }
     396           0 :         else if ( SFX_ITEM_DEFAULT == GetItemSet().GetItemState( _nWhich, false ) )
     397           0 :             rOutSet.ClearItem(_nWhich);
     398           0 :         delete pRegItem;
     399             :     }
     400             : 
     401           0 :     return bModified;
     402             : }
     403             : 
     404           0 : void SvxStdParagraphTabPage::Reset( const SfxItemSet& rSet )
     405             : {
     406           0 :     SfxItemPool* pPool = rSet.GetPool();
     407             :     DBG_ASSERT( pPool, "Wo ist der Pool?" );
     408             : 
     409             :     // adjust metric
     410           0 :     FieldUnit eFUnit = GetModuleFieldUnit( rSet );
     411             : 
     412           0 :     bool bApplyCharUnit = GetApplyCharUnit( rSet );
     413             : 
     414           0 :     SvtCJKOptions aCJKOptions;
     415           0 :     if(aCJKOptions.IsAsianTypographyEnabled() && bApplyCharUnit )
     416           0 :         eFUnit = FUNIT_CHAR;
     417             : 
     418           0 :     SetFieldUnit( *m_pLeftIndent, eFUnit );
     419           0 :     SetFieldUnit( *m_pRightIndent, eFUnit );
     420           0 :     SetFieldUnit( *m_pFLineIndent, eFUnit );
     421           0 :     if ( eFUnit == FUNIT_CHAR )
     422             :     {
     423           0 :         SetFieldUnit( *m_pTopDist, FUNIT_LINE );
     424           0 :         SetFieldUnit( *m_pBottomDist, FUNIT_LINE );
     425           0 :         SetFieldUnit( *m_pLineDistAtMetricBox, FUNIT_POINT );
     426             :     }
     427             :     else
     428             :     {
     429           0 :         SetFieldUnit( *m_pTopDist, eFUnit );
     430           0 :         SetFieldUnit( *m_pBottomDist, eFUnit );
     431           0 :         SetFieldUnit( *m_pLineDistAtMetricBox, eFUnit );
     432             :     }
     433             : 
     434           0 :     ELRLoseFocusHdl( NULL ); // reset min/max values
     435             : 
     436           0 :     sal_uInt16 _nWhich = GetWhich( SID_ATTR_LRSPACE );
     437           0 :     SfxItemState eItemState = rSet.GetItemState( _nWhich );
     438             : 
     439           0 :     if ( eItemState >= SFX_ITEM_AVAILABLE )
     440             :     {
     441           0 :         SfxMapUnit eUnit = pPool->GetMetric( _nWhich );
     442             : 
     443           0 :         if ( bRelativeMode )
     444             :         {
     445             :             const SvxLRSpaceItem& rOldItem =
     446           0 :                 (const SvxLRSpaceItem&)rSet.Get( _nWhich );
     447             : 
     448           0 :             if ( rOldItem.GetPropLeft() != 100 )
     449             :             {
     450           0 :                 m_pLeftIndent->SetRelative( true );
     451           0 :                 m_pLeftIndent->SetValue( rOldItem.GetPropLeft() );
     452             :             }
     453             :             else
     454             :             {
     455           0 :                 m_pLeftIndent->SetRelative();
     456           0 :                 SetFieldUnit( *m_pLeftIndent, eFUnit );
     457           0 :                 SetMetricValue( *m_pLeftIndent, rOldItem.GetTxtLeft(), eUnit );
     458             :             }
     459             : 
     460           0 :             if ( rOldItem.GetPropRight() != 100 )
     461             :             {
     462           0 :                 m_pRightIndent->SetRelative( true );
     463           0 :                 m_pRightIndent->SetValue( rOldItem.GetPropRight() );
     464             :             }
     465             :             else
     466             :             {
     467           0 :                 m_pRightIndent->SetRelative();
     468           0 :                 SetFieldUnit( *m_pRightIndent, eFUnit );
     469           0 :                 SetMetricValue( *m_pRightIndent, rOldItem.GetRight(), eUnit );
     470             :             }
     471             : 
     472           0 :             if ( rOldItem.GetPropTxtFirstLineOfst() != 100 )
     473             :             {
     474           0 :                 m_pFLineIndent->SetRelative( true );
     475           0 :                 m_pFLineIndent->SetValue( rOldItem.GetPropTxtFirstLineOfst() );
     476             :             }
     477             :             else
     478             :             {
     479           0 :                 m_pFLineIndent->SetRelative();
     480           0 :                 m_pFLineIndent->SetMin(-9999);
     481           0 :                 SetFieldUnit( *m_pFLineIndent, eFUnit );
     482           0 :                 SetMetricValue( *m_pFLineIndent, rOldItem.GetTxtFirstLineOfst(),
     483           0 :                                 eUnit );
     484             :             }
     485           0 :             m_pAutoCB->Check(rOldItem.IsAutoFirst());
     486             :         }
     487             :         else
     488             :         {
     489             :             const SvxLRSpaceItem& rSpace =
     490           0 :                 (const SvxLRSpaceItem&)rSet.Get( _nWhich );
     491             : 
     492           0 :             SetMetricValue( *m_pLeftIndent, rSpace.GetTxtLeft(), eUnit );
     493           0 :             SetMetricValue( *m_pRightIndent, rSpace.GetRight(), eUnit );
     494           0 :             SetMetricValue( *m_pFLineIndent, rSpace.GetTxtFirstLineOfst(), eUnit );
     495           0 :             m_pAutoCB->Check(rSpace.IsAutoFirst());
     496             :         }
     497           0 :         AutoHdl_Impl(m_pAutoCB);
     498             :     }
     499             :     else
     500             :     {
     501           0 :         m_pLeftIndent->SetEmptyFieldValue();
     502           0 :         m_pRightIndent->SetEmptyFieldValue();
     503           0 :         m_pFLineIndent->SetEmptyFieldValue();
     504             :     }
     505             : 
     506           0 :     _nWhich = GetWhich( SID_ATTR_ULSPACE );
     507           0 :     eItemState = rSet.GetItemState( _nWhich );
     508             : 
     509           0 :     if ( eItemState >= SFX_ITEM_AVAILABLE )
     510             :     {
     511           0 :         SfxMapUnit eUnit = pPool->GetMetric( _nWhich );
     512             : 
     513             :         const SvxULSpaceItem& rOldItem =
     514           0 :             (const SvxULSpaceItem&)rSet.Get( _nWhich );
     515           0 :         if ( bRelativeMode )
     516             :         {
     517             : 
     518           0 :             if ( rOldItem.GetPropUpper() != 100 )
     519             :             {
     520           0 :                 m_pTopDist->SetRelative( true );
     521           0 :                 m_pTopDist->SetValue( rOldItem.GetPropUpper() );
     522             :             }
     523             :             else
     524             :             {
     525           0 :                 m_pTopDist->SetRelative();
     526           0 :                 if ( eFUnit == FUNIT_CHAR )
     527           0 :                     SetFieldUnit( *m_pTopDist, FUNIT_LINE );
     528             :                 else
     529           0 :                     SetFieldUnit( *m_pTopDist, eFUnit );
     530           0 :                 SetMetricValue( *m_pTopDist, rOldItem.GetUpper(), eUnit );
     531             :             }
     532             : 
     533           0 :             if ( rOldItem.GetPropLower() != 100 )
     534             :             {
     535           0 :                 m_pBottomDist->SetRelative( true );
     536           0 :                 m_pBottomDist->SetValue( rOldItem.GetPropLower() );
     537             :             }
     538             :             else
     539             :             {
     540           0 :                 m_pBottomDist->SetRelative();
     541           0 :                 if ( eFUnit == FUNIT_CHAR )
     542           0 :                     SetFieldUnit( *m_pBottomDist, FUNIT_LINE );
     543             :                 else
     544           0 :                     SetFieldUnit( *m_pBottomDist, eFUnit );
     545           0 :                 SetMetricValue( *m_pBottomDist, rOldItem.GetLower(), eUnit );
     546             :             }
     547             :         }
     548             :         else
     549             :         {
     550           0 :             SetMetricValue( *m_pTopDist, rOldItem.GetUpper(), eUnit );
     551           0 :             SetMetricValue( *m_pBottomDist, rOldItem.GetLower(), eUnit );
     552             :         }
     553           0 :         m_pContextualCB->Check(rOldItem.GetContext());
     554             :     }
     555             :     else
     556             :     {
     557           0 :         m_pTopDist->SetEmptyFieldValue();
     558           0 :         m_pBottomDist->SetEmptyFieldValue();
     559             :     }
     560             : 
     561           0 :     _nWhich = GetWhich( SID_ATTR_PARA_LINESPACE );
     562           0 :     eItemState = rSet.GetItemState( _nWhich );
     563             : 
     564           0 :     if ( eItemState >= SFX_ITEM_AVAILABLE )
     565           0 :         SetLineSpacing_Impl( (const SvxLineSpacingItem &)rSet.Get( _nWhich ) );
     566             :     else
     567           0 :         m_pLineDist->SetNoSelection();
     568             : 
     569           0 :     _nWhich = GetWhich( SID_ATTR_PARA_REGISTER );
     570           0 :     eItemState = rSet.GetItemState( _nWhich );
     571             : 
     572           0 :     if ( eItemState >= SFX_ITEM_AVAILABLE )
     573           0 :         m_pRegisterCB->Check( ((const SfxBoolItem &)rSet.Get( _nWhich )).GetValue());
     574           0 :     m_pRegisterCB->SaveValue();
     575           0 :     sal_uInt16 nHtmlMode = GetHtmlMode_Impl(rSet);
     576           0 :     if(nHtmlMode & HTMLMODE_ON)
     577             :     {
     578           0 :         m_pRegisterFL->Hide();
     579           0 :         m_pRegisterCB->Hide();
     580           0 :         m_pAutoCB->Hide();
     581             : 
     582           0 :         if(!(nHtmlMode & HTMLMODE_SOME_STYLES)) // IE or SW
     583             :         {
     584           0 :             m_pRightLabel->Disable();
     585           0 :             m_pRightIndent->Disable();
     586           0 :             m_pTopDist->Disable();  //HTML3.2 and NS 3.0
     587           0 :             m_pBottomDist->Disable();
     588           0 :             m_pFLineIndent->Disable();
     589           0 :             m_pFLineLabel->Disable();
     590             :         }
     591             :     }
     592             : 
     593           0 :     m_pAutoCB->SaveValue();
     594           0 :     m_pContextualCB->SaveValue();
     595           0 :     m_pLineDist->SaveValue();
     596           0 : }
     597             : 
     598           0 : void SvxStdParagraphTabPage::EnableRelativeMode()
     599             : {
     600             :     DBG_ASSERT( GetItemSet().GetParent(), "RelativeMode, but no parent-set!" );
     601             : 
     602           0 :     m_pLeftIndent->EnableRelativeMode( 0, 999 );
     603           0 :     m_pFLineIndent->EnableRelativeMode( 0, 999 );
     604           0 :     m_pRightIndent->EnableRelativeMode( 0, 999 );
     605           0 :     m_pTopDist->EnableRelativeMode( 0, 999 );
     606           0 :     m_pBottomDist->EnableRelativeMode( 0, 999 );
     607           0 :     bRelativeMode = sal_True;
     608           0 : }
     609             : 
     610           0 : int SvxStdParagraphTabPage::DeactivatePage( SfxItemSet* _pSet )
     611             : {
     612           0 :     ELRLoseFocusHdl( NULL );
     613             : 
     614           0 :     if ( _pSet )
     615           0 :         FillItemSet( *_pSet );
     616           0 :     return LEAVE_PAGE;
     617             : }
     618             : 
     619           0 : SvxStdParagraphTabPage::SvxStdParagraphTabPage( Window* pParent,  const SfxItemSet& rAttr ) :
     620             :     SfxTabPage( pParent, "ParaIndentSpacing","cui/ui/paraindentspacing.ui", rAttr ),
     621             : 
     622             :     nAbst           ( MAX_DURCH ),
     623             :     nWidth          ( 11905 /*567 * 50*/ ),
     624             :     nMinFixDist(0L),
     625             : 
     626             :     bRelativeMode   ( sal_False ),
     627           0 :     bNegativeIndents(sal_False)
     628             : 
     629             : {
     630           0 :     get(m_pLeftIndent,"spinED_LEFTINDENT");
     631           0 :     get(m_pRightIndent,"spinED_RIGHTINDENT");
     632           0 :     get(m_pRightLabel,"labelFT_RIGHTINDENT");
     633           0 :     get(m_pFLineLabel,"labelFT_FLINEINDENT");
     634           0 :     get(m_pFLineIndent,"spinED_FLINEINDENT");
     635           0 :     get(m_pAutoCB,"checkCB_AUTO");
     636             : 
     637           0 :     get(m_pTopDist,"spinED_TOPDIST");
     638           0 :     get(m_pBottomDist,"spinED_BOTTOMDIST");
     639           0 :     get(m_pContextualCB,"checkCB_CONTEXTUALSPACING");
     640             : 
     641           0 :     get(m_pLineDist,"comboLB_LINEDIST");
     642           0 :     get(m_pLineDistAtPercentBox,"spinED_LINEDISTPERCENT");
     643           0 :     get(m_pLineDistAtMetricBox,"spinED_LINEDISTMETRIC");
     644           0 :     get(m_pLineDistAtLabel,"labelFT_LINEDIST");
     645             : 
     646           0 :     get(m_pAbsDist,"labelST_LINEDIST_ABS");
     647           0 :     sAbsDist = m_pAbsDist->GetText();
     648             : 
     649           0 :     get(m_pRegisterFL,"frameFL_REGISTER");
     650           0 :     get(m_pRegisterCB,"checkCB_REGISTER");
     651             : 
     652           0 :     get(m_pExampleWin,"drawingareaWN_EXAMPLE");
     653             : 
     654             :     // this page needs ExchangeSupport
     655           0 :     SetExchangeSupport();
     656             : 
     657           0 :     m_pLineDistAtMetricBox->Hide();
     658             : 
     659           0 :     Init_Impl();
     660           0 :     m_pFLineIndent->SetMin(-9999);    // is set to 0 on default
     661             : 
     662           0 :     setPreviewsToSamePlace(pParent, this);
     663           0 : }
     664             : 
     665           0 : SvxStdParagraphTabPage::~SvxStdParagraphTabPage()
     666             : {
     667           0 : }
     668             : 
     669           0 : void SvxStdParagraphTabPage::EnableNegativeMode()
     670             : {
     671           0 :     m_pLeftIndent->SetMin(-9999);
     672           0 :     m_pRightIndent->SetMin(-9999);
     673           0 :     m_pRightIndent->EnableNegativeMode();
     674           0 :     m_pLeftIndent->EnableNegativeMode();
     675           0 :     bNegativeIndents = sal_True;
     676           0 : }
     677             : 
     678           0 : sal_uInt16* SvxStdParagraphTabPage::GetRanges()
     679             : {
     680           0 :     return pStdRanges;
     681             : }
     682             : 
     683           0 : void SvxStdParagraphTabPage::SetLineSpacing_Impl
     684             : (
     685             :     const SvxLineSpacingItem &rAttr
     686             : )
     687             : {
     688           0 :     SfxMapUnit eUnit = GetItemSet().GetPool()->GetMetric( rAttr.Which() );
     689             : 
     690           0 :     switch( rAttr.GetLineSpaceRule() )
     691             :     {
     692             :         case SVX_LINE_SPACE_AUTO:
     693             :         {
     694           0 :             SvxInterLineSpace eInter = rAttr.GetInterLineSpaceRule();
     695             : 
     696           0 :             switch( eInter )
     697             :             {
     698             :                 // Default single line spacing
     699             :                 case SVX_INTER_LINE_SPACE_OFF:
     700           0 :                     m_pLineDist->SelectEntryPos( LLINESPACE_1 );
     701           0 :                     break;
     702             : 
     703             :                 // Default single line spacing
     704             :                 case SVX_INTER_LINE_SPACE_PROP:
     705           0 :                     if ( 100 == rAttr.GetPropLineSpace() )
     706             :                     {
     707           0 :                         m_pLineDist->SelectEntryPos( LLINESPACE_1 );
     708           0 :                         break;
     709             :                     }
     710             :                     // 1.5 line spacing
     711           0 :                     if ( 150 == rAttr.GetPropLineSpace() )
     712             :                     {
     713           0 :                         m_pLineDist->SelectEntryPos( LLINESPACE_15 );
     714           0 :                         break;
     715             :                     }
     716             :                     // double line spacing
     717           0 :                     if ( 200 == rAttr.GetPropLineSpace() )
     718             :                     {
     719           0 :                         m_pLineDist->SelectEntryPos( LLINESPACE_2 );
     720           0 :                         break;
     721             :                     }
     722             :                     // the set per cent value
     723           0 :                     m_pLineDistAtPercentBox->SetValue( m_pLineDistAtPercentBox->Normalize(rAttr.GetPropLineSpace() ) );
     724           0 :                     m_pLineDist->SelectEntryPos( LLINESPACE_PROP );
     725           0 :                     break;
     726             : 
     727             :                 case SVX_INTER_LINE_SPACE_FIX:
     728           0 :                     SetMetricValue( *m_pLineDistAtMetricBox, rAttr.GetInterLineSpace(), eUnit );
     729           0 :                     m_pLineDist->SelectEntryPos( LLINESPACE_DURCH );
     730           0 :                     break;
     731             :                 default: ;//prevent warning
     732             :             }
     733             :         }
     734           0 :         break;
     735             :         case SVX_LINE_SPACE_FIX:
     736           0 :             SetMetricValue(*m_pLineDistAtMetricBox, rAttr.GetLineHeight(), eUnit);
     737           0 :             m_pLineDist->SelectEntryPos( LLINESPACE_FIX );
     738           0 :         break;
     739             : 
     740             :         case SVX_LINE_SPACE_MIN:
     741           0 :             SetMetricValue(*m_pLineDistAtMetricBox, rAttr.GetLineHeight(), eUnit);
     742           0 :             m_pLineDist->SelectEntryPos( LLINESPACE_MIN );
     743           0 :             break;
     744             :         default: ;//prevent warning
     745             :     }
     746           0 :     LineDistHdl_Impl( m_pLineDist );
     747           0 : }
     748             : 
     749           0 : IMPL_LINK( SvxStdParagraphTabPage, LineDistHdl_Impl, ListBox *, pBox )
     750             : {
     751           0 :     switch( pBox->GetSelectEntryPos() )
     752             :     {
     753             :         case LLINESPACE_1:
     754             :         case LLINESPACE_15:
     755             :         case LLINESPACE_2:
     756           0 :             m_pLineDistAtLabel->Enable(false);
     757           0 :             m_pLineDistAtPercentBox->Enable(false);
     758           0 :             m_pLineDistAtPercentBox->SetText( OUString() );
     759           0 :             m_pLineDistAtMetricBox->Enable(false);
     760           0 :             m_pLineDistAtMetricBox->SetText( OUString() );
     761           0 :             break;
     762             : 
     763             :         case LLINESPACE_DURCH:
     764             :             // setting a sensible default?
     765             :             // limit MS min(10, aPageSize)
     766           0 :             m_pLineDistAtMetricBox->SetMin(0);
     767             : 
     768           0 :             if ( m_pLineDistAtMetricBox->GetText().isEmpty() )
     769           0 :                 m_pLineDistAtMetricBox->SetValue( m_pLineDistAtMetricBox->Normalize( 1 ) );
     770           0 :             m_pLineDistAtPercentBox->Hide();
     771           0 :             m_pLineDistAtMetricBox->Show();
     772           0 :             m_pLineDistAtMetricBox->Enable();
     773           0 :             m_pLineDistAtLabel->Enable();
     774           0 :             break;
     775             : 
     776             :         case LLINESPACE_MIN:
     777           0 :             m_pLineDistAtMetricBox->SetMin(0);
     778             : 
     779           0 :             if ( m_pLineDistAtMetricBox->GetText().isEmpty() )
     780           0 :                 m_pLineDistAtMetricBox->SetValue( m_pLineDistAtMetricBox->Normalize( 10 ), FUNIT_TWIP );
     781           0 :             m_pLineDistAtPercentBox->Hide();
     782           0 :             m_pLineDistAtMetricBox->Show();
     783           0 :             m_pLineDistAtMetricBox->Enable();
     784           0 :             m_pLineDistAtLabel->Enable();
     785           0 :             break;
     786             : 
     787             :         case LLINESPACE_PROP:
     788             : 
     789           0 :             if ( m_pLineDistAtPercentBox->GetText().isEmpty() )
     790           0 :                 m_pLineDistAtPercentBox->SetValue( m_pLineDistAtPercentBox->Normalize( 100 ), FUNIT_TWIP );
     791           0 :             m_pLineDistAtMetricBox->Hide();
     792           0 :             m_pLineDistAtPercentBox->Show();
     793           0 :             m_pLineDistAtPercentBox->Enable();
     794           0 :             m_pLineDistAtLabel->Enable();
     795           0 :             break;
     796             :         case LLINESPACE_FIX:
     797             :         {
     798           0 :             sal_Int64 nTemp = m_pLineDistAtMetricBox->GetValue();
     799           0 :             m_pLineDistAtMetricBox->SetMin(m_pLineDistAtMetricBox->Normalize(nMinFixDist), FUNIT_TWIP);
     800             : 
     801             :             // if the value has been changed at SetMin,
     802             :             // it is time for the default
     803           0 :             if ( m_pLineDistAtMetricBox->GetValue() != nTemp )
     804           0 :                 SetMetricValue( *m_pLineDistAtMetricBox, FIX_DIST_DEF, SFX_MAPUNIT_TWIP ); // fix is only in Writer
     805           0 :             m_pLineDistAtPercentBox->Hide();
     806           0 :             m_pLineDistAtMetricBox->Show();
     807           0 :             m_pLineDistAtMetricBox->Enable();
     808           0 :             m_pLineDistAtLabel->Enable();
     809             :         }
     810           0 :         break;
     811             :     }
     812           0 :     UpdateExample_Impl( sal_True );
     813           0 :     return 0;
     814             : }
     815             : 
     816           0 : IMPL_LINK_NOARG_INLINE_START(SvxStdParagraphTabPage, ModifyHdl_Impl)
     817             : {
     818           0 :     UpdateExample_Impl();
     819           0 :     return 0;
     820             : }
     821           0 : IMPL_LINK_NOARG_INLINE_END(SvxStdParagraphTabPage, ModifyHdl_Impl)
     822             : 
     823           0 : void SvxStdParagraphTabPage::Init_Impl()
     824             : {
     825             :     m_pLineDist->SetSelectHdl(
     826           0 :         LINK( this, SvxStdParagraphTabPage, LineDistHdl_Impl ) );
     827             : 
     828           0 :     Link aLink = LINK( this, SvxStdParagraphTabPage, ELRLoseFocusHdl );
     829           0 :     m_pFLineIndent->SetLoseFocusHdl( aLink );
     830           0 :     m_pLeftIndent->SetLoseFocusHdl( aLink );
     831           0 :     m_pRightIndent->SetLoseFocusHdl( aLink );
     832             : 
     833           0 :     aLink = LINK( this, SvxStdParagraphTabPage, ModifyHdl_Impl );
     834           0 :     m_pFLineIndent->SetModifyHdl( aLink );
     835           0 :     m_pLeftIndent->SetModifyHdl( aLink );
     836           0 :     m_pRightIndent->SetModifyHdl( aLink );
     837           0 :     m_pTopDist->SetModifyHdl( aLink );
     838           0 :     m_pBottomDist->SetModifyHdl( aLink );
     839             : 
     840           0 :     m_pAutoCB->SetClickHdl( LINK( this, SvxStdParagraphTabPage, AutoHdl_Impl ));
     841           0 :     SfxItemPool* pPool = GetItemSet().GetPool();
     842             :     DBG_ASSERT( pPool, "Wo ist der Pool" );
     843           0 :     FieldUnit eUnit = MapToFieldUnit( pPool->GetMetric( GetWhich( SID_ATTR_LRSPACE ) ) );
     844             : 
     845           0 :     m_pTopDist->SetMax( m_pTopDist->Normalize( nAbst ), eUnit );
     846           0 :     m_pBottomDist->SetMax( m_pBottomDist->Normalize( nAbst ), eUnit );
     847           0 :     m_pLineDistAtMetricBox->SetMax( m_pLineDistAtMetricBox->Normalize( nAbst ), eUnit );
     848           0 : }
     849             : 
     850           0 : void SvxStdParagraphTabPage::UpdateExample_Impl( sal_Bool bAll )
     851             : {
     852           0 :     m_pExampleWin->SetFirstLineOfst( (short)m_pFLineIndent->Denormalize( m_pFLineIndent->GetValue( FUNIT_TWIP ) ) );
     853           0 :     m_pExampleWin->SetLeftMargin( static_cast<long>(m_pLeftIndent->Denormalize( m_pLeftIndent->GetValue( FUNIT_TWIP ) ) ) );
     854           0 :     m_pExampleWin->SetRightMargin( static_cast<long>(m_pRightIndent->Denormalize( m_pRightIndent->GetValue( FUNIT_TWIP ) ) ) );
     855           0 :     m_pExampleWin->SetUpper( (sal_uInt16)m_pTopDist->Denormalize( m_pTopDist->GetValue( FUNIT_TWIP ) ) );
     856           0 :     m_pExampleWin->SetLower( (sal_uInt16)m_pBottomDist->Denormalize( m_pBottomDist->GetValue( FUNIT_TWIP ) ) );
     857             : 
     858           0 :     sal_Int32 nPos = m_pLineDist->GetSelectEntryPos();
     859             : 
     860           0 :     switch ( nPos )
     861             :     {
     862             :         case LLINESPACE_1:
     863             :         case LLINESPACE_15:
     864             :         case LLINESPACE_2:
     865           0 :             m_pExampleWin->SetLineSpace( (SvxPrevLineSpace)nPos );
     866           0 :             break;
     867             : 
     868             :         case LLINESPACE_PROP:
     869             :             m_pExampleWin->SetLineSpace( (SvxPrevLineSpace)nPos,
     870           0 :                 (sal_uInt16)m_pLineDistAtPercentBox->Denormalize( m_pLineDistAtPercentBox->GetValue() ) );
     871           0 :             break;
     872             : 
     873             :         case LLINESPACE_MIN:
     874             :         case LLINESPACE_DURCH:
     875             :         case LLINESPACE_FIX:
     876             :             m_pExampleWin->SetLineSpace( (SvxPrevLineSpace)nPos,
     877           0 :                 (sal_uInt16)GetCoreValue( *m_pLineDistAtMetricBox, SFX_MAPUNIT_TWIP ) );
     878           0 :             break;
     879             :     }
     880           0 :     m_pExampleWin->Draw( bAll );
     881           0 : }
     882             : 
     883           0 : void SvxStdParagraphTabPage::EnableRegisterMode()
     884             : {
     885           0 :     m_pRegisterCB->Show();
     886           0 :     m_pRegisterFL->Show();
     887           0 : }
     888             : 
     889           0 : void SvxStdParagraphTabPage::EnableContextualMode()
     890             : {
     891           0 :     m_pContextualCB->Show();
     892           0 : }
     893             : 
     894           0 : IMPL_LINK( SvxStdParagraphTabPage, AutoHdl_Impl, CheckBox*, pBox )
     895             : {
     896           0 :     sal_Bool bEnable = !pBox->IsChecked();
     897           0 :     m_pFLineLabel->Enable(bEnable);
     898           0 :     m_pFLineIndent->Enable(bEnable);
     899           0 :     return 0;
     900             : }
     901             : 
     902           0 : void SvxStdParagraphTabPage::SetPageWidth( sal_uInt16 nPageWidth )
     903             : {
     904           0 :     nWidth = nPageWidth;
     905           0 : }
     906             : 
     907           0 : void SvxStdParagraphTabPage::EnableAutoFirstLine()
     908             : {
     909           0 :     m_pAutoCB->Show();
     910           0 : }
     911             : 
     912           0 : void    SvxStdParagraphTabPage::EnableAbsLineDist(long nMinTwip)
     913             : {
     914           0 :     m_pLineDist->InsertEntry(sAbsDist);
     915           0 :     nMinFixDist = nMinTwip;
     916           0 : }
     917             : 
     918           0 : void    SvxStdParagraphTabPage::PageCreated(SfxAllItemSet aSet)
     919             : {
     920             : 
     921             : /* different bit represent call to different method of SvxStdParagraphTabPage
     922             :                         0x0001 --->EnableRelativeMode()
     923             :                         0x0002 --->EnableRegisterMode()
     924             :                         0x0004 --->EnableAutoFirstLine()
     925             :                         0x0008 --->EnableNegativeMode()
     926             :                         0x0010 --->EnableContextualMode()
     927             :             */
     928           0 :     SFX_ITEMSET_ARG (&aSet,pPageWidthItem,SfxUInt16Item,SID_SVXSTDPARAGRAPHTABPAGE_PAGEWIDTH,false);
     929           0 :     SFX_ITEMSET_ARG (&aSet,pFlagSetItem,SfxUInt32Item,SID_SVXSTDPARAGRAPHTABPAGE_FLAGSET,false);
     930           0 :     SFX_ITEMSET_ARG (&aSet,pLineDistItem,SfxUInt32Item,SID_SVXSTDPARAGRAPHTABPAGE_ABSLINEDIST,false);
     931             : 
     932           0 :     if (pPageWidthItem)
     933           0 :         SetPageWidth(pPageWidthItem->GetValue());
     934             : 
     935           0 :     if (pFlagSetItem )
     936           0 :         if (( 0x0001 & pFlagSetItem->GetValue())== 0x0001 )
     937           0 :             EnableRelativeMode();
     938             : 
     939           0 :     if (pFlagSetItem)
     940           0 :         if (( 0x0002 & pFlagSetItem->GetValue())== 0x0002 )
     941           0 :                 EnableRegisterMode();
     942             : 
     943           0 :     if (pFlagSetItem)
     944           0 :         if ( ( 0x0004 & pFlagSetItem->GetValue())== 0x0004 )
     945           0 :             EnableAutoFirstLine();
     946             : 
     947           0 :     if(pLineDistItem)
     948           0 :         EnableAbsLineDist(pLineDistItem->GetValue());
     949             : 
     950           0 :     if (pFlagSetItem)
     951           0 :         if  (( 0x0008 & pFlagSetItem->GetValue()) == 0x0008 )
     952           0 :                 EnableNegativeMode();
     953             : 
     954           0 :     if (pFlagSetItem)
     955           0 :         if  (( 0x0010 & pFlagSetItem->GetValue()) == 0x0010 )
     956           0 :                 EnableContextualMode();
     957           0 : }
     958             : 
     959             : #define LASTLINEPOS_DEFAULT     0
     960             : #define LASTLINEPOS_LEFT        1
     961             : 
     962             : #define LASTLINECOUNT_OLD       3
     963             : #define LASTLINECOUNT_NEW       4
     964             : 
     965           0 : SvxParaAlignTabPage::SvxParaAlignTabPage( Window* pParent, const SfxItemSet& rSet )
     966             : 
     967           0 :     : SfxTabPage(pParent, "ParaAlignPage", "cui/ui/paragalignpage.ui",rSet)
     968             : {
     969           0 :     get(m_pLeft,"radioBTN_LEFTALIGN");
     970           0 :     get(m_pRight,"radioBTN_RIGHTALIGN");
     971           0 :     get(m_pCenter,"radioBTN_CENTERALIGN");
     972           0 :     get(m_pJustify,"radioBTN_JUSTIFYALIGN");
     973           0 :     get(m_pLeftBottom,"labelST_LEFTALIGN_ASIAN");
     974           0 :     get(m_pRightTop,"labelST_RIGHTALIGN_ASIAN");
     975             : 
     976           0 :     get(m_pLastLineFT,"labelLB_LASTLINE");
     977           0 :     get(m_pLastLineLB,"comboLB_LASTLINE");
     978           0 :     get(m_pExpandCB,"checkCB_EXPAND");
     979           0 :     get(m_pSnapToGridCB,"checkCB_SNAP");
     980           0 :     get(m_pExampleWin,"drawingareaWN_EXAMPLE");
     981             : 
     982           0 :     get(m_pVertAlignLB,"comboLB_VERTALIGN");
     983           0 :     get(m_pVertAlignFL,"frameFL_VERTALIGN");
     984             : 
     985           0 :     get(m_pPropertiesFL,"framePROPERTIES");
     986           0 :     get(m_pTextDirectionLB,"comboLB_TEXTDIRECTION");
     987             : 
     988           0 :     SvtLanguageOptions aLangOptions;
     989           0 :     sal_uInt16 nLastLinePos = LASTLINEPOS_DEFAULT;
     990             : 
     991           0 :     if ( aLangOptions.IsAsianTypographyEnabled() )
     992             :     {
     993           0 :         m_pLeft->SetText(m_pLeftBottom->GetText());
     994           0 :         m_pRight->SetText(m_pRightTop->GetText());
     995             : 
     996           0 :         OUString sLeft(m_pLeft->GetText());
     997           0 :         sLeft = MnemonicGenerator::EraseAllMnemonicChars( sLeft );
     998             : 
     999           0 :         if ( m_pLastLineLB->GetEntryCount() == LASTLINECOUNT_OLD )
    1000             :         {
    1001           0 :             m_pLastLineLB->RemoveEntry( 0 );
    1002           0 :             m_pLastLineLB->InsertEntry( sLeft, 0 );
    1003             :         }
    1004             :         else
    1005           0 :             nLastLinePos = LASTLINEPOS_LEFT;
    1006             :     }
    1007             : 
    1008             :     // remove "Default" or "Left" entry, depends on CJKOptions
    1009           0 :     if ( m_pLastLineLB->GetEntryCount() == LASTLINECOUNT_NEW )
    1010           0 :         m_pLastLineLB->RemoveEntry( nLastLinePos );
    1011             : 
    1012           0 :     Link aLink = LINK( this, SvxParaAlignTabPage, AlignHdl_Impl );
    1013           0 :     m_pLeft->SetClickHdl( aLink );
    1014           0 :     m_pRight->SetClickHdl( aLink );
    1015           0 :     m_pCenter->SetClickHdl( aLink );
    1016           0 :     m_pJustify->SetClickHdl( aLink );
    1017           0 :     m_pLastLineLB->SetSelectHdl( LINK( this, SvxParaAlignTabPage, LastLineHdl_Impl ) );
    1018           0 :     m_pTextDirectionLB->SetSelectHdl( LINK( this, SvxParaAlignTabPage, TextDirectionHdl_Impl ) );
    1019             : 
    1020           0 :     sal_uInt16 nHtmlMode = GetHtmlMode_Impl(rSet);
    1021           0 :     if(!(nHtmlMode & HTMLMODE_ON) || (0 != (nHtmlMode & HTMLMODE_SOME_STYLES)) )
    1022             :     {
    1023           0 :         if( aLangOptions.IsCTLFontEnabled() )
    1024             :         {
    1025           0 :             m_pTextDirectionLB->InsertEntryValue( CUI_RESSTR( RID_SVXSTR_FRAMEDIR_LTR ), FRMDIR_HORI_LEFT_TOP );
    1026           0 :             m_pTextDirectionLB->InsertEntryValue( CUI_RESSTR( RID_SVXSTR_FRAMEDIR_RTL ), FRMDIR_HORI_RIGHT_TOP );
    1027           0 :             m_pTextDirectionLB->InsertEntryValue( CUI_RESSTR( RID_SVXSTR_FRAMEDIR_SUPER ), FRMDIR_ENVIRONMENT );
    1028             : 
    1029           0 :             m_pPropertiesFL->Show();
    1030             :         }
    1031             :     }
    1032             : 
    1033           0 :     setPreviewsToSamePlace(pParent, this);
    1034           0 : }
    1035             : 
    1036           0 : SvxParaAlignTabPage::~SvxParaAlignTabPage()
    1037             : {
    1038           0 : }
    1039             : 
    1040           0 : int SvxParaAlignTabPage::DeactivatePage( SfxItemSet* _pSet )
    1041             : {
    1042           0 :     if ( _pSet )
    1043           0 :         FillItemSet( *_pSet );
    1044           0 :     return LEAVE_PAGE;
    1045             : }
    1046             : 
    1047           0 : SfxTabPage* SvxParaAlignTabPage::Create( Window* pParent, const SfxItemSet& rSet )
    1048             : {
    1049           0 :     return new SvxParaAlignTabPage(pParent, rSet);
    1050             : }
    1051             : 
    1052           0 : sal_uInt16* SvxParaAlignTabPage::GetRanges()
    1053             : {
    1054           0 :     return pAlignRanges;
    1055             : }
    1056             : 
    1057           0 : bool SvxParaAlignTabPage::FillItemSet( SfxItemSet& rOutSet )
    1058             : {
    1059           0 :     sal_Bool bModified = sal_False;
    1060             : 
    1061           0 :     bool bAdj = false, bChecked = false;
    1062           0 :     SvxAdjust eAdjust = SVX_ADJUST_LEFT;
    1063             : 
    1064           0 :     if ( m_pLeft->IsChecked() )
    1065             :     {
    1066           0 :         eAdjust = SVX_ADJUST_LEFT;
    1067           0 :         bAdj = !m_pLeft->GetSavedValue();
    1068           0 :         bChecked = true;
    1069             :     }
    1070           0 :     else if ( m_pRight->IsChecked() )
    1071             :     {
    1072           0 :         eAdjust = SVX_ADJUST_RIGHT;
    1073           0 :         bAdj = !m_pRight->GetSavedValue();
    1074           0 :         bChecked = true;
    1075             :     }
    1076           0 :     else if ( m_pCenter->IsChecked() )
    1077             :     {
    1078           0 :         eAdjust = SVX_ADJUST_CENTER;
    1079           0 :         bAdj = !m_pCenter->GetSavedValue();
    1080           0 :         bChecked = true;
    1081             :     }
    1082           0 :     else if ( m_pJustify->IsChecked() )
    1083             :     {
    1084           0 :         eAdjust = SVX_ADJUST_BLOCK;
    1085           0 :         bAdj = !m_pJustify->GetSavedValue() ||
    1086           0 :             TriState(m_pExpandCB->IsChecked()) != m_pExpandCB->GetSavedValue() ||
    1087           0 :             m_pLastLineLB->GetSelectEntryPos() != m_pLastLineLB->GetSavedValue();
    1088           0 :         bChecked = true;
    1089             :     }
    1090           0 :     sal_uInt16 _nWhich = GetWhich( SID_ATTR_PARA_ADJUST );
    1091             : 
    1092           0 :     if ( bAdj )
    1093             :     {
    1094           0 :         const SvxAdjustItem* pOld = (const SvxAdjustItem*)GetOldItem( rOutSet, SID_ATTR_PARA_ADJUST );
    1095             : 
    1096           0 :         SvxAdjust eOneWord = m_pExpandCB->IsChecked() ? SVX_ADJUST_BLOCK : SVX_ADJUST_LEFT;
    1097             : 
    1098           0 :         sal_Int32 nLBPos = m_pLastLineLB->GetSelectEntryPos();
    1099           0 :         SvxAdjust eLastBlock = SVX_ADJUST_LEFT;
    1100             : 
    1101           0 :         if ( 1 == nLBPos )
    1102           0 :             eLastBlock = SVX_ADJUST_CENTER;
    1103           0 :         else if ( 2 == nLBPos )
    1104           0 :             eLastBlock = SVX_ADJUST_BLOCK;
    1105             : 
    1106             :         bool bNothingWasChecked =
    1107           0 :             !m_pLeft->GetSavedValue() && !m_pRight->GetSavedValue() &&
    1108           0 :             !m_pCenter->GetSavedValue() && !m_pJustify->GetSavedValue();
    1109             : 
    1110           0 :         if ( !pOld || pOld->GetAdjust() != eAdjust ||
    1111           0 :              pOld->GetOneWord() != eOneWord ||
    1112           0 :              pOld->GetLastBlock() != eLastBlock ||
    1113           0 :              ( bChecked && bNothingWasChecked ) )
    1114             :         {
    1115           0 :             bModified = sal_True;
    1116             :             SvxAdjustItem aAdj(
    1117           0 :                 (const SvxAdjustItem&)GetItemSet().Get( _nWhich ) );
    1118           0 :             aAdj.SetAdjust( eAdjust );
    1119           0 :             aAdj.SetOneWord( eOneWord );
    1120           0 :             aAdj.SetLastBlock( eLastBlock );
    1121           0 :             rOutSet.Put( aAdj );
    1122             :         }
    1123             :     }
    1124           0 :     if(TriState(m_pSnapToGridCB->IsChecked()) != m_pSnapToGridCB->GetSavedValue())
    1125             :     {
    1126           0 :         rOutSet.Put(SvxParaGridItem(m_pSnapToGridCB->IsChecked(), GetWhich( SID_ATTR_PARA_SNAPTOGRID )));
    1127           0 :         bModified = sal_True;
    1128             :     }
    1129           0 :     if(m_pVertAlignLB->GetSavedValue() != m_pVertAlignLB->GetSelectEntryPos())
    1130             :     {
    1131           0 :         rOutSet.Put(SvxParaVertAlignItem(m_pVertAlignLB->GetSelectEntryPos(), GetWhich( SID_PARA_VERTALIGN )));
    1132           0 :         bModified = sal_True;
    1133             :     }
    1134             : 
    1135           0 :     if( m_pTextDirectionLB->IsVisible() )
    1136             :     {
    1137           0 :         SvxFrameDirection eDir = m_pTextDirectionLB->GetSelectEntryValue();
    1138           0 :         if( eDir != m_pTextDirectionLB->GetSavedValue() )
    1139             :         {
    1140           0 :             rOutSet.Put( SvxFrameDirectionItem( eDir, GetWhich( SID_ATTR_FRAMEDIRECTION ) ) );
    1141           0 :             bModified = sal_True;
    1142             :         }
    1143             :     }
    1144             : 
    1145           0 :     return bModified;
    1146             : }
    1147             : 
    1148           0 : void SvxParaAlignTabPage::Reset( const SfxItemSet& rSet )
    1149             : {
    1150           0 :     sal_uInt16 _nWhich = GetWhich( SID_ATTR_PARA_ADJUST );
    1151           0 :     SfxItemState eItemState = rSet.GetItemState( _nWhich );
    1152             : 
    1153           0 :     sal_Int32 nLBSelect = 0;
    1154           0 :     if ( eItemState >= SFX_ITEM_AVAILABLE )
    1155             :     {
    1156           0 :         const SvxAdjustItem& rAdj = (const SvxAdjustItem&)rSet.Get( _nWhich );
    1157             : 
    1158           0 :         switch ( rAdj.GetAdjust() /*!!! ask VB rAdj.GetLastBlock()*/ )
    1159             :         {
    1160           0 :             case SVX_ADJUST_LEFT: m_pLeft->Check(); break;
    1161             : 
    1162           0 :             case SVX_ADJUST_RIGHT: m_pRight->Check(); break;
    1163             : 
    1164           0 :             case SVX_ADJUST_CENTER: m_pCenter->Check(); break;
    1165             : 
    1166           0 :             case SVX_ADJUST_BLOCK: m_pJustify->Check(); break;
    1167             :             default: ; //prevent warning
    1168             :         }
    1169           0 :         sal_Bool bEnable = m_pJustify->IsChecked();
    1170           0 :         m_pLastLineFT->Enable(bEnable);
    1171           0 :         m_pLastLineLB->Enable(bEnable);
    1172           0 :         m_pExpandCB->Enable(bEnable);
    1173             : 
    1174           0 :         m_pExpandCB->Check(SVX_ADJUST_BLOCK == rAdj.GetOneWord());
    1175           0 :         switch(rAdj.GetLastBlock())
    1176             :         {
    1177           0 :             case SVX_ADJUST_LEFT:  nLBSelect = 0; break;
    1178             : 
    1179           0 :             case SVX_ADJUST_CENTER: nLBSelect = 1;  break;
    1180             : 
    1181           0 :             case SVX_ADJUST_BLOCK: nLBSelect = 2;  break;
    1182             :             default: ; //prevent warning
    1183             :         }
    1184             :     }
    1185             :     else
    1186             :     {
    1187           0 :         m_pLeft->Check( false );
    1188           0 :         m_pRight->Check( false );
    1189           0 :         m_pCenter->Check( false );
    1190           0 :         m_pJustify->Check( false );
    1191             :     }
    1192           0 :     m_pLastLineLB->SelectEntryPos(nLBSelect);
    1193             : 
    1194           0 :     sal_uInt16 nHtmlMode = GetHtmlMode_Impl(rSet);
    1195           0 :     if(nHtmlMode & HTMLMODE_ON)
    1196             :     {
    1197           0 :         m_pLastLineLB->Hide();
    1198           0 :         m_pLastLineFT->Hide();
    1199           0 :         m_pExpandCB->Hide();
    1200           0 :         if(!(nHtmlMode & HTMLMODE_FULL_STYLES) )
    1201           0 :             m_pJustify->Disable();
    1202           0 :         m_pSnapToGridCB->Show(false);
    1203             :     }
    1204           0 :     _nWhich = GetWhich(SID_ATTR_PARA_SNAPTOGRID);
    1205           0 :     eItemState = rSet.GetItemState( _nWhich );
    1206           0 :     if ( eItemState >= SFX_ITEM_AVAILABLE )
    1207             :     {
    1208           0 :         const SvxParaGridItem& rSnap = (const SvxParaGridItem&)rSet.Get( _nWhich );
    1209           0 :         m_pSnapToGridCB->Check(rSnap.GetValue());
    1210             :     }
    1211             : 
    1212           0 :     _nWhich = GetWhich( SID_PARA_VERTALIGN );
    1213           0 :     eItemState = rSet.GetItemState( _nWhich );
    1214             : 
    1215           0 :     if ( eItemState >= SFX_ITEM_AVAILABLE )
    1216             :     {
    1217           0 :         m_pVertAlignFL->Show();
    1218             : 
    1219           0 :         const SvxParaVertAlignItem& rAlign = (const SvxParaVertAlignItem&)rSet.Get( _nWhich );
    1220             : 
    1221           0 :         m_pVertAlignLB->SelectEntryPos(rAlign.GetValue());
    1222             :     }
    1223             : 
    1224           0 :     _nWhich = GetWhich( SID_ATTR_FRAMEDIRECTION );
    1225             :     //text direction
    1226           0 :     if( SFX_ITEM_AVAILABLE <= rSet.GetItemState( _nWhich ) )
    1227             :     {
    1228           0 :         const SvxFrameDirectionItem& rFrameDirItem = ( const SvxFrameDirectionItem& ) rSet.Get( _nWhich );
    1229           0 :         m_pTextDirectionLB->SelectEntryValue( (SvxFrameDirection)rFrameDirItem.GetValue() );
    1230           0 :         m_pTextDirectionLB->SaveValue();
    1231             :     }
    1232             : 
    1233           0 :     m_pSnapToGridCB->SaveValue();
    1234           0 :     m_pVertAlignLB->SaveValue();
    1235           0 :     m_pLeft->SaveValue();
    1236           0 :     m_pRight->SaveValue();
    1237           0 :     m_pCenter->SaveValue();
    1238           0 :     m_pJustify->SaveValue();
    1239           0 :     m_pLastLineLB->SaveValue();
    1240           0 :     m_pExpandCB->SaveValue();
    1241             : 
    1242           0 :     UpdateExample_Impl(sal_True);
    1243           0 : }
    1244             : 
    1245           0 : IMPL_LINK_NOARG(SvxParaAlignTabPage, AlignHdl_Impl)
    1246             : {
    1247           0 :     sal_Bool bJustify = m_pJustify->IsChecked();
    1248           0 :     m_pLastLineFT->Enable(bJustify);
    1249           0 :     m_pLastLineLB->Enable(bJustify);
    1250           0 :     m_pExpandCB->Enable(bJustify);
    1251           0 :     UpdateExample_Impl(sal_False);
    1252           0 :     return 0;
    1253             : }
    1254             : 
    1255           0 : IMPL_LINK_NOARG(SvxParaAlignTabPage, LastLineHdl_Impl)
    1256             : {
    1257           0 :     UpdateExample_Impl(sal_False);
    1258           0 :     return 0;
    1259             : }
    1260             : 
    1261           0 : IMPL_LINK_NOARG(SvxParaAlignTabPage, TextDirectionHdl_Impl)
    1262             : {
    1263           0 :     SvxFrameDirection eDir = m_pTextDirectionLB->GetSelectEntryValue();
    1264           0 :     switch ( eDir )
    1265             :     {
    1266             :         // check the default alignment for this text direction
    1267           0 :         case FRMDIR_HORI_LEFT_TOP :     m_pLeft->Check( true ); break;
    1268           0 :         case FRMDIR_HORI_RIGHT_TOP :    m_pRight->Check( true ); break;
    1269           0 :         case FRMDIR_ENVIRONMENT :       /* do nothing */ break;
    1270             :         default:
    1271             :         {
    1272             :             SAL_WARN( "cui.tabpages", "SvxParaAlignTabPage::TextDirectionHdl_Impl(): other directions not supported" );
    1273             :         }
    1274             :     }
    1275             : 
    1276           0 :     return 0;
    1277             : }
    1278             : 
    1279           0 : void SvxParaAlignTabPage::UpdateExample_Impl( sal_Bool bAll )
    1280             : {
    1281           0 :     if ( m_pLeft->IsChecked() )
    1282           0 :         m_pExampleWin->SetAdjust( SVX_ADJUST_LEFT );
    1283           0 :     else if ( m_pRight->IsChecked() )
    1284           0 :         m_pExampleWin->SetAdjust( SVX_ADJUST_RIGHT );
    1285           0 :     else if ( m_pCenter->IsChecked() )
    1286           0 :         m_pExampleWin->SetAdjust( SVX_ADJUST_CENTER );
    1287           0 :     else if ( m_pJustify->IsChecked() )
    1288             :     {
    1289           0 :         m_pExampleWin->SetAdjust( SVX_ADJUST_BLOCK );
    1290           0 :         SvxAdjust eLastBlock = SVX_ADJUST_LEFT;
    1291           0 :         sal_Int32 nLBPos = m_pLastLineLB->GetSelectEntryPos();
    1292           0 :         if(nLBPos == 1)
    1293           0 :             eLastBlock = SVX_ADJUST_CENTER;
    1294           0 :         else if(nLBPos == 2)
    1295           0 :             eLastBlock = SVX_ADJUST_BLOCK;
    1296           0 :         m_pExampleWin->SetLastLine( eLastBlock );
    1297             :     }
    1298             : 
    1299           0 :     m_pExampleWin->Draw( bAll );
    1300           0 : }
    1301             : 
    1302           0 : void SvxParaAlignTabPage::EnableJustifyExt()
    1303             : {
    1304           0 :     m_pLastLineFT->Show();
    1305           0 :     m_pLastLineLB->Show();
    1306           0 :     m_pExpandCB->Show();
    1307           0 :     SvtLanguageOptions aCJKOptions;
    1308           0 :     if(aCJKOptions.IsAsianTypographyEnabled())
    1309           0 :         m_pSnapToGridCB->Show();
    1310             : 
    1311           0 : }
    1312             : 
    1313           0 : void SvxParaAlignTabPage::PageCreated (SfxAllItemSet aSet)
    1314             : {
    1315           0 :     SFX_ITEMSET_ARG (&aSet,pBoolItem,SfxBoolItem,SID_SVXPARAALIGNTABPAGE_ENABLEJUSTIFYEXT,false);
    1316           0 :     if (pBoolItem)
    1317           0 :         if(pBoolItem->GetValue())
    1318           0 :             EnableJustifyExt();
    1319           0 : }
    1320             : 
    1321           0 : SfxTabPage* SvxExtParagraphTabPage::Create( Window* pParent,
    1322             :                                             const SfxItemSet& rSet )
    1323             : {
    1324           0 :     return new SvxExtParagraphTabPage( pParent, rSet );
    1325             : }
    1326             : 
    1327           0 : bool SvxExtParagraphTabPage::FillItemSet( SfxItemSet& rOutSet )
    1328             : {
    1329           0 :     sal_Bool bModified = sal_False;
    1330           0 :     sal_uInt16 _nWhich = GetWhich( SID_ATTR_PARA_HYPHENZONE );
    1331           0 :     const TriState eHyphenState = m_pHyphenBox->GetState();
    1332           0 :     const SfxPoolItem* pOld = GetOldItem( rOutSet, SID_ATTR_PARA_HYPHENZONE );
    1333             : 
    1334           0 :     if ( eHyphenState != m_pHyphenBox->GetSavedValue()     ||
    1335           0 :          m_pExtHyphenBeforeBox->IsValueModified()          ||
    1336           0 :          m_pExtHyphenAfterBox->IsValueModified()           ||
    1337           0 :          m_pMaxHyphenEdit->IsValueModified() )
    1338             :     {
    1339             :         SvxHyphenZoneItem aHyphen(
    1340           0 :             (const SvxHyphenZoneItem&)GetItemSet().Get( _nWhich ) );
    1341           0 :         aHyphen.SetHyphen( eHyphenState == TRISTATE_TRUE );
    1342             : 
    1343           0 :         if ( eHyphenState == TRISTATE_TRUE )
    1344             :         {
    1345           0 :             aHyphen.GetMinLead() = (sal_uInt8)m_pExtHyphenBeforeBox->GetValue();
    1346           0 :             aHyphen.GetMinTrail() = (sal_uInt8)m_pExtHyphenAfterBox->GetValue();
    1347             :         }
    1348           0 :         aHyphen.GetMaxHyphens() = (sal_uInt8)m_pMaxHyphenEdit->GetValue();
    1349             : 
    1350           0 :         if ( !pOld ||
    1351           0 :             !( *(SvxHyphenZoneItem*)pOld == aHyphen ) ||
    1352           0 :                 eHyphenState != m_pHyphenBox->GetSavedValue())
    1353             :         {
    1354           0 :             rOutSet.Put( aHyphen );
    1355           0 :             bModified = sal_True;
    1356           0 :         }
    1357             :     }
    1358             : 
    1359           0 :     if (m_pPagenumEdit->IsEnabled() && m_pPagenumEdit->IsValueModified())
    1360             :     {
    1361             :         SfxUInt16Item aPageNum( SID_ATTR_PARA_PAGENUM,
    1362           0 :                                 (sal_uInt16)m_pPagenumEdit->GetValue() );
    1363             : 
    1364           0 :         pOld = GetOldItem( rOutSet, SID_ATTR_PARA_PAGENUM );
    1365             : 
    1366           0 :         if ( !pOld || ( (const SfxUInt16Item*)pOld )->GetValue() != aPageNum.GetValue() )
    1367             :         {
    1368           0 :             rOutSet.Put( aPageNum );
    1369           0 :             bModified = sal_True;
    1370           0 :         }
    1371             :     }
    1372             : 
    1373             :     // pagebreak
    1374             : 
    1375           0 :     TriState eState = m_pApplyCollBtn->GetState();
    1376           0 :     bool bIsPageModel = false;
    1377             : 
    1378           0 :     _nWhich = GetWhich( SID_ATTR_PARA_MODEL );
    1379           0 :     OUString sPage;
    1380           0 :     if ( eState != m_pApplyCollBtn->GetSavedValue() ||
    1381           0 :          ( TRISTATE_TRUE == eState &&
    1382           0 :            m_pApplyCollBox->GetSelectEntryPos() != m_pApplyCollBox->GetSavedValue() ) )
    1383             :     {
    1384           0 :         if ( eState == TRISTATE_TRUE )
    1385             :         {
    1386           0 :             sPage = m_pApplyCollBox->GetSelectEntry();
    1387           0 :             bIsPageModel = !sPage.isEmpty();
    1388             :         }
    1389           0 :         pOld = GetOldItem( rOutSet, SID_ATTR_PARA_MODEL );
    1390             : 
    1391           0 :         if ( !pOld || ( (const SvxPageModelItem*)pOld )->GetValue() != sPage )
    1392             :         {
    1393           0 :             rOutSet.Put( SvxPageModelItem( sPage, false, _nWhich ) );
    1394           0 :             bModified = sal_True;
    1395             :         }
    1396             :         else
    1397           0 :             bIsPageModel = false;
    1398             :     }
    1399           0 :     else if(TRISTATE_TRUE == eState && m_pApplyCollBtn->IsEnabled())
    1400           0 :         bIsPageModel = true;
    1401             :     else
    1402           0 :         rOutSet.Put( SvxPageModelItem( sPage, false, _nWhich ) );
    1403             : 
    1404           0 :     _nWhich = GetWhich( SID_ATTR_PARA_PAGEBREAK );
    1405             : 
    1406           0 :     if ( bIsPageModel )
    1407             :         // if PageModel is turned on, always turn off PageBreak
    1408           0 :         rOutSet.Put( SvxFmtBreakItem( SVX_BREAK_NONE, _nWhich ) );
    1409             :     else
    1410             :     {
    1411           0 :         eState = m_pPageBreakBox->GetState();
    1412           0 :         SfxItemState eModelState = GetItemSet().GetItemState(SID_ATTR_PARA_MODEL, false);
    1413             : 
    1414           0 :         if ( (eModelState == SFX_ITEM_SET && TRISTATE_TRUE == m_pPageBreakBox->GetState()) ||
    1415           0 :              eState != m_pPageBreakBox->GetSavedValue()                ||
    1416           0 :              m_pBreakTypeLB->GetSelectEntryPos() != m_pBreakTypeLB->GetSavedValue()   ||
    1417           0 :              m_pBreakPositionLB->GetSelectEntryPos() != m_pBreakPositionLB->GetSavedValue() )
    1418             :         {
    1419             :             const SvxFmtBreakItem rOldBreak(
    1420           0 :                     (const SvxFmtBreakItem&)GetItemSet().Get( _nWhich ));
    1421           0 :             SvxFmtBreakItem aBreak(rOldBreak.GetBreak(), rOldBreak.Which());
    1422             : 
    1423           0 :             switch ( eState )
    1424             :             {
    1425             :                 case TRISTATE_TRUE:
    1426             :                 {
    1427           0 :                     sal_Bool bBefore = m_pBreakPositionLB->GetSelectEntryPos() == 0;
    1428             : 
    1429           0 :                     if ( m_pBreakTypeLB->GetSelectEntryPos() == 0 )
    1430             :                     {
    1431           0 :                         if ( bBefore )
    1432           0 :                             aBreak.SetValue( SVX_BREAK_PAGE_BEFORE );
    1433             :                         else
    1434           0 :                             aBreak.SetValue( SVX_BREAK_PAGE_AFTER );
    1435             :                     }
    1436             :                     else
    1437             :                     {
    1438           0 :                         if ( bBefore )
    1439           0 :                             aBreak.SetValue( SVX_BREAK_COLUMN_BEFORE );
    1440             :                         else
    1441           0 :                             aBreak.SetValue( SVX_BREAK_COLUMN_AFTER );
    1442             :                     }
    1443           0 :                     break;
    1444             :                 }
    1445             : 
    1446             :                 case TRISTATE_FALSE:
    1447           0 :                     aBreak.SetValue( SVX_BREAK_NONE );
    1448           0 :                     break;
    1449             :                 default: ; //prevent warning
    1450             :             }
    1451           0 :             pOld = GetOldItem( rOutSet, SID_ATTR_PARA_PAGEBREAK );
    1452             : 
    1453           0 :             if ( eState != m_pPageBreakBox->GetSavedValue()                ||
    1454           0 :                     !pOld || !( *(const SvxFmtBreakItem*)pOld == aBreak ) )
    1455             :             {
    1456           0 :                 bModified = sal_True;
    1457           0 :                 rOutSet.Put( aBreak );
    1458           0 :             }
    1459             :         }
    1460             :     }
    1461             : 
    1462             :     // paragraph split
    1463           0 :     _nWhich = GetWhich( SID_ATTR_PARA_SPLIT );
    1464           0 :     eState = m_pKeepTogetherBox->GetState();
    1465             : 
    1466           0 :     if ( eState != m_pKeepTogetherBox->GetSavedValue() )
    1467             :     {
    1468           0 :         pOld = GetOldItem( rOutSet, SID_ATTR_PARA_SPLIT );
    1469             : 
    1470           0 :         if ( !pOld || ( (const SvxFmtSplitItem*)pOld )->GetValue() !=
    1471           0 :                       ( eState == TRISTATE_FALSE ) )
    1472             :         {
    1473           0 :             rOutSet.Put( SvxFmtSplitItem( eState == TRISTATE_FALSE, _nWhich ) );
    1474           0 :             bModified = sal_True;
    1475             :         }
    1476             :     }
    1477             : 
    1478             :     // keep paragraphs
    1479           0 :     _nWhich = GetWhich( SID_ATTR_PARA_KEEP );
    1480           0 :     eState = m_pKeepParaBox->GetState();
    1481             : 
    1482           0 :     if ( eState != m_pKeepParaBox->GetSavedValue() )
    1483             :     {
    1484             :         // if the status has changed, putting is necessary
    1485           0 :         rOutSet.Put( SvxFmtKeepItem( eState == TRISTATE_TRUE, _nWhich ) );
    1486           0 :         bModified = sal_True;
    1487             :     }
    1488             : 
    1489             :     // widows and orphans
    1490           0 :     _nWhich = GetWhich( SID_ATTR_PARA_WIDOWS );
    1491           0 :     eState = m_pWidowBox->GetState();
    1492             : 
    1493           0 :     if ( eState != m_pWidowBox->GetSavedValue() ||
    1494           0 :          m_pWidowRowNo->IsValueModified() )
    1495             :     {
    1496             :         SvxWidowsItem rItem( eState == TRISTATE_TRUE ?
    1497           0 :                              (sal_uInt8)m_pWidowRowNo->GetValue() : 0, _nWhich );
    1498           0 :         pOld = GetOldItem( rOutSet, SID_ATTR_PARA_WIDOWS );
    1499             : 
    1500           0 :         if ( eState != m_pWidowBox->GetSavedValue() || !pOld || !( *(const SvxWidowsItem*)pOld == rItem ) )
    1501             :         {
    1502           0 :             rOutSet.Put( rItem );
    1503           0 :             bModified = sal_True;
    1504           0 :         }
    1505             :     }
    1506             : 
    1507           0 :     _nWhich = GetWhich( SID_ATTR_PARA_ORPHANS );
    1508           0 :     eState = m_pOrphanBox->GetState();
    1509             : 
    1510           0 :     if ( eState != m_pOrphanBox->GetSavedValue() ||
    1511           0 :          m_pOrphanRowNo->IsValueModified() )
    1512             :     {
    1513             :         SvxOrphansItem rItem( eState == TRISTATE_TRUE ?
    1514           0 :                              (sal_uInt8)m_pOrphanRowNo->GetValue() : 0, _nWhich );
    1515           0 :         pOld = GetOldItem( rOutSet, SID_ATTR_PARA_ORPHANS );
    1516             : 
    1517           0 :         if ( eState != m_pOrphanBox->GetSavedValue() ||
    1518           0 :                 !pOld ||
    1519           0 :                     !( *(const SvxOrphansItem*)pOld == rItem ) )
    1520             :         {
    1521           0 :             rOutSet.Put( rItem );
    1522           0 :             bModified = sal_True;
    1523           0 :         }
    1524             :     }
    1525             : 
    1526           0 :     return bModified;
    1527             : }
    1528             : 
    1529           0 : void SvxExtParagraphTabPage::Reset( const SfxItemSet& rSet )
    1530             : {
    1531           0 :     sal_uInt16 _nWhich = GetWhich( SID_ATTR_PARA_HYPHENZONE );
    1532           0 :     SfxItemState eItemState = rSet.GetItemState( _nWhich );
    1533             : 
    1534           0 :     sal_Bool bItemAvailable = eItemState >= SFX_ITEM_AVAILABLE;
    1535           0 :     sal_Bool bIsHyphen = sal_False;
    1536           0 :     if( !bHtmlMode && bItemAvailable )
    1537             :     {
    1538             :         const SvxHyphenZoneItem& rHyphen =
    1539           0 :             (const SvxHyphenZoneItem&)rSet.Get( _nWhich );
    1540           0 :         m_pHyphenBox->EnableTriState( false );
    1541             : 
    1542           0 :         bIsHyphen = rHyphen.IsHyphen();
    1543           0 :         m_pHyphenBox->SetState( bIsHyphen ? TRISTATE_TRUE : TRISTATE_FALSE );
    1544             : 
    1545           0 :         m_pExtHyphenBeforeBox->SetValue( rHyphen.GetMinLead() );
    1546           0 :         m_pExtHyphenAfterBox->SetValue( rHyphen.GetMinTrail() );
    1547           0 :         m_pMaxHyphenEdit->SetValue( rHyphen.GetMaxHyphens() );
    1548             :     }
    1549             :     else
    1550             :     {
    1551           0 :         m_pHyphenBox->SetState( TRISTATE_INDET );
    1552             :     }
    1553           0 :     sal_Bool bEnable = bItemAvailable && bIsHyphen;
    1554           0 :     m_pExtHyphenBeforeBox->Enable(bEnable);
    1555           0 :     m_pExtHyphenAfterBox->Enable(bEnable);
    1556           0 :     m_pBeforeText->Enable(bEnable);
    1557           0 :     m_pAfterText->Enable(bEnable);
    1558           0 :     m_pMaxHyphenLabel->Enable(bEnable);
    1559           0 :     m_pMaxHyphenEdit->Enable(bEnable);
    1560             : 
    1561           0 :     _nWhich = GetWhich( SID_ATTR_PARA_PAGENUM );
    1562             : 
    1563           0 :     if ( rSet.GetItemState(_nWhich) >= SFX_ITEM_AVAILABLE )
    1564             :     {
    1565             :         const sal_uInt16 nPageNum =
    1566           0 :             ( (const SfxUInt16Item&)rSet.Get( _nWhich ) ).GetValue();
    1567           0 :         m_pPagenumEdit->SetValue( nPageNum );
    1568             :     }
    1569             : 
    1570           0 :     if ( bPageBreak )
    1571             :     {
    1572             :         // first handle PageModel
    1573           0 :         _nWhich = GetWhich( SID_ATTR_PARA_MODEL );
    1574           0 :         sal_Bool bIsPageModel = sal_False;
    1575           0 :         eItemState = rSet.GetItemState( _nWhich );
    1576             : 
    1577           0 :         if ( eItemState >= SFX_ITEM_SET )
    1578             :         {
    1579           0 :             m_pApplyCollBtn->EnableTriState( false );
    1580             : 
    1581             :             const SvxPageModelItem& rModel =
    1582           0 :                 (const SvxPageModelItem&)rSet.Get( _nWhich );
    1583           0 :             OUString aStr( rModel.GetValue() );
    1584             : 
    1585           0 :             if ( !aStr.isEmpty() &&
    1586           0 :                  m_pApplyCollBox->GetEntryPos( aStr ) != LISTBOX_ENTRY_NOTFOUND )
    1587             :             {
    1588           0 :                 m_pApplyCollBox->SelectEntry( aStr );
    1589           0 :                 m_pApplyCollBtn->SetState( TRISTATE_TRUE );
    1590           0 :                 bIsPageModel = sal_True;
    1591             : 
    1592           0 :                 m_pPageBreakBox->Enable();
    1593           0 :                 m_pPageBreakBox->EnableTriState( false );
    1594           0 :                 m_pBreakTypeFT->Enable();
    1595           0 :                 m_pBreakTypeLB->Enable();
    1596           0 :                 m_pBreakPositionFT->Enable();
    1597           0 :                 m_pBreakPositionLB->Enable();
    1598           0 :                 m_pApplyCollBtn->Enable();
    1599           0 :                 m_pPageBreakBox->SetState( TRISTATE_TRUE );
    1600             : 
    1601             :                 //select page break
    1602           0 :                 m_pBreakTypeLB->SelectEntryPos(0);
    1603             :                 //select break before
    1604           0 :                 m_pBreakPositionLB->SelectEntryPos(0);
    1605             :             }
    1606             :             else
    1607             :             {
    1608           0 :                 m_pApplyCollBox->SetNoSelection();
    1609           0 :                 m_pApplyCollBtn->SetState( TRISTATE_FALSE );
    1610           0 :             }
    1611             :         }
    1612           0 :         else if ( SFX_ITEM_DONTCARE == eItemState )
    1613             :         {
    1614           0 :             m_pApplyCollBtn->EnableTriState( true );
    1615           0 :             m_pApplyCollBtn->SetState( TRISTATE_INDET );
    1616           0 :             m_pApplyCollBox->SetNoSelection();
    1617             :         }
    1618             :         else
    1619             :         {
    1620           0 :             m_pApplyCollBtn->Enable(false);
    1621           0 :             m_pApplyCollBox->Enable(false);
    1622           0 :             m_pPagenumEdit->Enable(false);
    1623           0 :             m_pPagenumText->Enable(false);
    1624             :         }
    1625             : 
    1626           0 :         if ( !bIsPageModel )
    1627             :         {
    1628           0 :             _nWhich = GetWhich( SID_ATTR_PARA_PAGEBREAK );
    1629           0 :             eItemState = rSet.GetItemState( _nWhich );
    1630             : 
    1631           0 :             if ( eItemState >= SFX_ITEM_AVAILABLE )
    1632             :             {
    1633             :                 const SvxFmtBreakItem& rPageBreak =
    1634           0 :                     (const SvxFmtBreakItem&)rSet.Get( _nWhich );
    1635             : 
    1636           0 :                 SvxBreak eBreak = (SvxBreak)rPageBreak.GetValue();
    1637             : 
    1638             :                 // PageBreak not via CTRL-RETURN,
    1639             :                 // then CheckBox can be freed
    1640           0 :                 m_pPageBreakBox->Enable();
    1641           0 :                 m_pPageBreakBox->EnableTriState( false );
    1642           0 :                 m_pBreakTypeFT->Enable();
    1643           0 :                 m_pBreakTypeLB->Enable();
    1644           0 :                 m_pBreakPositionFT->Enable();
    1645           0 :                 m_pBreakPositionLB->Enable();
    1646             : 
    1647           0 :                 m_pPageBreakBox->SetState( TRISTATE_TRUE );
    1648             : 
    1649           0 :                 sal_Bool _bEnable =     eBreak != SVX_BREAK_NONE &&
    1650           0 :                                 eBreak != SVX_BREAK_COLUMN_BEFORE &&
    1651           0 :                                 eBreak != SVX_BREAK_COLUMN_AFTER;
    1652           0 :                 m_pApplyCollBtn->Enable(_bEnable);
    1653           0 :                 if(!_bEnable)
    1654             :                 {
    1655           0 :                     m_pApplyCollBox->Enable(_bEnable);
    1656           0 :                     m_pPagenumEdit->Enable(_bEnable);
    1657             :                 }
    1658             : 
    1659           0 :                 if ( eBreak == SVX_BREAK_NONE )
    1660           0 :                     m_pPageBreakBox->SetState( TRISTATE_FALSE );
    1661             : 
    1662           0 :                 sal_Int32 nType = 0; // selection position in break type ListBox : Page
    1663           0 :                 sal_Int32 nPosition = 0; //  selection position in break position ListBox : Before
    1664           0 :                 switch ( eBreak )
    1665             :                 {
    1666             :                     case SVX_BREAK_PAGE_BEFORE:
    1667           0 :                         break;
    1668             :                     case SVX_BREAK_PAGE_AFTER:
    1669           0 :                         nPosition = 1;
    1670           0 :                         break;
    1671             :                     case SVX_BREAK_COLUMN_BEFORE:
    1672           0 :                         nType = 1;
    1673           0 :                         break;
    1674             :                     case SVX_BREAK_COLUMN_AFTER:
    1675           0 :                         nType = 1;
    1676           0 :                         nPosition = 1;
    1677           0 :                         break;
    1678             :                     default: ;//prevent warning
    1679             :                 }
    1680           0 :                 m_pBreakTypeLB->SelectEntryPos(nType);
    1681           0 :                 m_pBreakPositionLB->SelectEntryPos(nPosition);
    1682             :             }
    1683           0 :             else if ( SFX_ITEM_DONTCARE == eItemState )
    1684           0 :                 m_pPageBreakBox->SetState( TRISTATE_INDET );
    1685             :             else
    1686             :             {
    1687           0 :                 m_pPageBreakBox->Enable(false);
    1688           0 :                 m_pBreakTypeFT->Enable(false);
    1689           0 :                 m_pBreakTypeLB->Enable(false);
    1690           0 :                 m_pBreakPositionFT->Enable(false);
    1691           0 :                 m_pBreakPositionLB->Enable(false);
    1692             :             }
    1693             :         }
    1694             : 
    1695           0 :         PageBreakPosHdl_Impl( m_pBreakPositionLB );
    1696           0 :         PageBreakHdl_Impl( m_pPageBreakBox );
    1697             :     }
    1698             : 
    1699           0 :     _nWhich = GetWhich( SID_ATTR_PARA_KEEP );
    1700           0 :     eItemState = rSet.GetItemState( _nWhich );
    1701             : 
    1702           0 :     if ( eItemState >= SFX_ITEM_AVAILABLE )
    1703             :     {
    1704           0 :         m_pKeepParaBox->EnableTriState( false );
    1705             :         const SvxFmtKeepItem& rKeep =
    1706           0 :             (const SvxFmtKeepItem&)rSet.Get( _nWhich );
    1707             : 
    1708           0 :         if ( rKeep.GetValue() )
    1709           0 :             m_pKeepParaBox->SetState( TRISTATE_TRUE );
    1710             :         else
    1711           0 :             m_pKeepParaBox->SetState( TRISTATE_FALSE );
    1712             :     }
    1713           0 :     else if ( SFX_ITEM_DONTCARE == eItemState )
    1714           0 :         m_pKeepParaBox->SetState( TRISTATE_INDET );
    1715             :     else
    1716           0 :         m_pKeepParaBox->Enable(false);
    1717             : 
    1718           0 :     _nWhich = GetWhich( SID_ATTR_PARA_SPLIT );
    1719           0 :     eItemState = rSet.GetItemState( _nWhich );
    1720             : 
    1721           0 :     if ( eItemState >= SFX_ITEM_AVAILABLE )
    1722             :     {
    1723             :         const SvxFmtSplitItem& rSplit =
    1724           0 :             (const SvxFmtSplitItem&)rSet.Get( _nWhich );
    1725           0 :         m_pKeepTogetherBox->EnableTriState( false );
    1726             : 
    1727           0 :         if ( !rSplit.GetValue() )
    1728           0 :             m_pKeepTogetherBox->SetState( TRISTATE_TRUE );
    1729             :         else
    1730             :         {
    1731           0 :             m_pKeepTogetherBox->SetState( TRISTATE_FALSE );
    1732             : 
    1733             :             // widows and orphans
    1734           0 :             m_pWidowBox->Enable();
    1735           0 :             _nWhich = GetWhich( SID_ATTR_PARA_WIDOWS );
    1736           0 :             SfxItemState eTmpState = rSet.GetItemState( _nWhich );
    1737             : 
    1738           0 :             if ( eTmpState >= SFX_ITEM_AVAILABLE )
    1739             :             {
    1740             :                 const SvxWidowsItem& rWidow =
    1741           0 :                     (const SvxWidowsItem&)rSet.Get( _nWhich );
    1742           0 :                 m_pWidowBox->EnableTriState( false );
    1743           0 :                 const sal_uInt16 nLines = rWidow.GetValue();
    1744             : 
    1745           0 :                 sal_Bool _bEnable = nLines > 0;
    1746           0 :                 m_pWidowRowNo->SetValue( m_pWidowRowNo->Normalize( nLines ) );
    1747           0 :                 m_pWidowBox->SetState( _bEnable ? TRISTATE_TRUE : TRISTATE_FALSE);
    1748           0 :                 m_pWidowRowNo->Enable(_bEnable);
    1749             :                 //m_pWidowRowLabel->Enable(_bEnable);
    1750             : 
    1751             :             }
    1752           0 :             else if ( SFX_ITEM_DONTCARE == eTmpState )
    1753           0 :                 m_pWidowBox->SetState( TRISTATE_INDET );
    1754             :             else
    1755           0 :                 m_pWidowBox->Enable(false);
    1756             : 
    1757           0 :             m_pOrphanBox->Enable();
    1758           0 :             _nWhich = GetWhich( SID_ATTR_PARA_ORPHANS );
    1759           0 :             eTmpState = rSet.GetItemState( _nWhich );
    1760             : 
    1761           0 :             if ( eTmpState >= SFX_ITEM_AVAILABLE )
    1762             :             {
    1763             :                 const SvxOrphansItem& rOrphan =
    1764           0 :                     (const SvxOrphansItem&)rSet.Get( _nWhich );
    1765           0 :                 const sal_uInt16 nLines = rOrphan.GetValue();
    1766           0 :                 m_pOrphanBox->EnableTriState( false );
    1767             : 
    1768           0 :                 sal_Bool _bEnable = nLines > 0;
    1769           0 :                 m_pOrphanBox->SetState( _bEnable ? TRISTATE_TRUE : TRISTATE_FALSE);
    1770           0 :                 m_pOrphanRowNo->SetValue( m_pOrphanRowNo->Normalize( nLines ) );
    1771           0 :                 m_pOrphanRowNo->Enable(_bEnable);
    1772           0 :                 m_pOrphanRowLabel->Enable(_bEnable);
    1773             : 
    1774             :             }
    1775           0 :             else if ( SFX_ITEM_DONTCARE == eTmpState )
    1776           0 :                 m_pOrphanBox->SetState( TRISTATE_INDET );
    1777             :             else
    1778           0 :                 m_pOrphanBox->Enable(false);
    1779             :         }
    1780             :     }
    1781           0 :     else if ( SFX_ITEM_DONTCARE == eItemState )
    1782           0 :         m_pKeepTogetherBox->SetState( TRISTATE_INDET );
    1783             :     else
    1784           0 :         m_pKeepTogetherBox->Enable(false);
    1785             : 
    1786             :     // so that everything is enabled correctly
    1787           0 :     KeepTogetherHdl_Impl( 0 );
    1788           0 :     WidowHdl_Impl( 0 );
    1789           0 :     OrphanHdl_Impl( 0 );
    1790             : 
    1791           0 :     m_pHyphenBox->SaveValue();
    1792           0 :     m_pExtHyphenBeforeBox->SaveValue();
    1793           0 :     m_pExtHyphenAfterBox->SaveValue();
    1794           0 :     m_pMaxHyphenEdit->SaveValue();
    1795           0 :     m_pPageBreakBox->SaveValue();
    1796           0 :     m_pBreakPositionLB->SaveValue();
    1797           0 :     m_pBreakTypeLB->SaveValue();
    1798           0 :     m_pApplyCollBtn->SaveValue();
    1799           0 :     m_pApplyCollBox->SaveValue();
    1800           0 :     m_pPagenumEdit->SaveValue();
    1801           0 :     m_pKeepTogetherBox->SaveValue();
    1802           0 :     m_pKeepParaBox->SaveValue();
    1803           0 :     m_pWidowBox->SaveValue();
    1804           0 :     m_pOrphanBox->SaveValue();
    1805           0 : }
    1806             : 
    1807           0 : int SvxExtParagraphTabPage::DeactivatePage( SfxItemSet* _pSet )
    1808             : {
    1809           0 :     if ( _pSet )
    1810           0 :         FillItemSet( *_pSet );
    1811           0 :     return LEAVE_PAGE;
    1812             : }
    1813             : 
    1814           0 : void SvxExtParagraphTabPage::DisablePageBreak()
    1815             : {
    1816           0 :     bPageBreak = sal_False;
    1817           0 :     m_pPageBreakBox->Enable(false);
    1818           0 :     m_pBreakTypeLB->RemoveEntry(0);
    1819           0 :     m_pBreakPositionFT->Enable(false);
    1820           0 :     m_pBreakPositionLB->Enable(false);
    1821           0 :     m_pApplyCollBtn->Enable(false);
    1822           0 :     m_pApplyCollBox->Enable(false);
    1823           0 :     m_pPagenumEdit->Enable(false);
    1824           0 : }
    1825             : 
    1826           0 : SvxExtParagraphTabPage::SvxExtParagraphTabPage( Window* pParent, const SfxItemSet& rAttr ) :
    1827             :     SfxTabPage( pParent, "TextFlowPage","cui/ui/textflowpage.ui", rAttr ),
    1828             : 
    1829             :     bPageBreak  ( sal_True ),
    1830             :     bHtmlMode   ( sal_False ),
    1831           0 :     nStdPos     ( 0 )
    1832             : {
    1833             :     // Hyphenation
    1834           0 :     get(m_pHyphenBox,"checkAuto");
    1835           0 :     get(m_pExtHyphenBeforeBox,"spinLineEnd");
    1836           0 :     get(m_pExtHyphenAfterBox,"spinLineBegin");
    1837           0 :     get(m_pMaxHyphenEdit,"spinMaxNum");
    1838           0 :     get(m_pBeforeText,"labelLineBegin");
    1839           0 :     get(m_pAfterText,"labelLineEnd");
    1840           0 :     get(m_pMaxHyphenLabel,"labelMaxNum");
    1841             : 
    1842             :     //Page break
    1843           0 :     get(m_pPageBreakBox,"checkInsert");
    1844           0 :     get(m_pBreakTypeLB,"comboBreakType");
    1845           0 :     get(m_pBreakPositionLB,"comboBreakPosition");
    1846           0 :     get(m_pApplyCollBtn,"checkPageStyle");
    1847           0 :     get(m_pApplyCollBox,"comboPageStyle");
    1848           0 :     get(m_pPagenumEdit,"spinPageNumber");
    1849           0 :     get(m_pBreakTypeFT,"labelType");
    1850           0 :     get(m_pBreakPositionFT,"labelPosition");
    1851           0 :     get(m_pPagenumText,"labelPageNum");
    1852             : 
    1853             :     // Options
    1854           0 :     get(m_pKeepTogetherBox,"checkSplitPara");
    1855           0 :     get(m_pKeepParaBox,"checkKeepPara");
    1856             : 
    1857           0 :     get(m_pOrphanBox,"checkOrphan");
    1858           0 :     get(m_pOrphanRowNo,"spinOrphan");
    1859           0 :     get(m_pOrphanRowLabel,"labelOrphan");
    1860             : 
    1861           0 :     get(m_pWidowBox,"checkWidow");
    1862           0 :     get(m_pWidowRowNo,"spinWidow");
    1863           0 :     get(m_pWidowRowLabel,"labelWidow");
    1864             : 
    1865           0 :     m_pApplyCollBox->SetAccessibleRelationLabeledBy(m_pApplyCollBtn);
    1866           0 :     m_pApplyCollBox->SetAccessibleName(CUI_RES(STR_PAGE_STYLE));
    1867             : 
    1868           0 :     m_pOrphanRowNo->SetAccessibleRelationLabeledBy(m_pOrphanBox);
    1869           0 :     m_pWidowRowNo->SetAccessibleRelationLabeledBy(m_pWidowBox);
    1870             : 
    1871             :     // this page needs ExchangeSupport
    1872           0 :     SetExchangeSupport();
    1873             : 
    1874           0 :     m_pHyphenBox->SetClickHdl(         LINK( this, SvxExtParagraphTabPage, HyphenClickHdl_Impl ) );
    1875           0 :     m_pPageBreakBox->SetClickHdl(      LINK( this, SvxExtParagraphTabPage, PageBreakHdl_Impl ) );
    1876           0 :     m_pKeepTogetherBox->SetClickHdl(   LINK( this, SvxExtParagraphTabPage, KeepTogetherHdl_Impl ) );
    1877           0 :     m_pWidowBox->SetClickHdl(          LINK( this, SvxExtParagraphTabPage, WidowHdl_Impl ) );
    1878           0 :     m_pOrphanBox->SetClickHdl(         LINK( this, SvxExtParagraphTabPage, OrphanHdl_Impl ) );
    1879           0 :     m_pApplyCollBtn->SetClickHdl(      LINK( this, SvxExtParagraphTabPage, ApplyCollClickHdl_Impl ) );
    1880           0 :     m_pBreakTypeLB->SetSelectHdl(      LINK( this, SvxExtParagraphTabPage, PageBreakTypeHdl_Impl ) );
    1881           0 :     m_pBreakPositionLB->SetSelectHdl(  LINK( this, SvxExtParagraphTabPage, PageBreakPosHdl_Impl ) );
    1882             : 
    1883           0 :     SfxObjectShell* pSh = SfxObjectShell::Current();
    1884           0 :     if ( pSh )
    1885             :     {
    1886           0 :         SfxStyleSheetBasePool* pPool = pSh->GetStyleSheetPool();
    1887           0 :         pPool->SetSearchMask( SFX_STYLE_FAMILY_PAGE );
    1888           0 :         SfxStyleSheetBase* pStyle = pPool->First();
    1889           0 :         OUString aStdName;
    1890             : 
    1891           0 :         while( pStyle )
    1892             :         {
    1893           0 :             if ( aStdName.isEmpty() )
    1894             :                 // first style == standard style
    1895           0 :                 aStdName = pStyle->GetName();
    1896           0 :             m_pApplyCollBox->InsertEntry( pStyle->GetName() );
    1897           0 :             pStyle = pPool->Next();
    1898             :         }
    1899           0 :         nStdPos = m_pApplyCollBox->GetEntryPos( aStdName );
    1900             :     }
    1901             : 
    1902           0 :     sal_uInt16 nHtmlMode = GetHtmlMode_Impl( rAttr );
    1903           0 :     if ( nHtmlMode & HTMLMODE_ON )
    1904             :     {
    1905           0 :         bHtmlMode = sal_True;
    1906           0 :         m_pHyphenBox           ->Enable(false);
    1907           0 :         m_pBeforeText          ->Enable(false);
    1908           0 :         m_pExtHyphenBeforeBox  ->Enable(false);
    1909           0 :         m_pAfterText           ->Enable(false);
    1910           0 :         m_pExtHyphenAfterBox   ->Enable(false);
    1911           0 :         m_pMaxHyphenLabel      ->Enable(false);
    1912           0 :         m_pMaxHyphenEdit       ->Enable(false);
    1913           0 :         m_pPagenumText         ->Enable(false);
    1914           0 :         m_pPagenumEdit         ->Enable(false);
    1915             :         // no column break in HTML
    1916           0 :         m_pBreakTypeLB->RemoveEntry(1);
    1917             :     }
    1918           0 : }
    1919             : 
    1920           0 : SvxExtParagraphTabPage::~SvxExtParagraphTabPage()
    1921             : {
    1922           0 : }
    1923             : 
    1924           0 : sal_uInt16* SvxExtParagraphTabPage::GetRanges()
    1925             : {
    1926           0 :     return pExtRanges;
    1927             : }
    1928             : 
    1929           0 : IMPL_LINK_NOARG(SvxExtParagraphTabPage, PageBreakHdl_Impl)
    1930             : {
    1931           0 :     switch ( m_pPageBreakBox->GetState() )
    1932             :     {
    1933             :         case TRISTATE_TRUE:
    1934           0 :             m_pBreakTypeFT->Enable();
    1935           0 :             m_pBreakTypeLB->Enable();
    1936           0 :             m_pBreakPositionFT->Enable();
    1937           0 :             m_pBreakPositionLB->Enable();
    1938             : 
    1939           0 :             if ( 0 == m_pBreakTypeLB->GetSelectEntryPos()&&
    1940           0 :                 0 == m_pBreakPositionLB->GetSelectEntryPos() )
    1941             :             {
    1942           0 :                 m_pApplyCollBtn->Enable();
    1943             : 
    1944           0 :                 sal_Bool bEnable = TRISTATE_TRUE == m_pApplyCollBtn->GetState() &&
    1945           0 :                                             m_pApplyCollBox->GetEntryCount();
    1946           0 :                 m_pApplyCollBox->Enable(bEnable);
    1947           0 :                 if(!bHtmlMode)
    1948             :                 {
    1949           0 :                     m_pPagenumText->Enable(bEnable);
    1950           0 :                     m_pPagenumEdit->Enable(bEnable);
    1951             :                 }
    1952             :             }
    1953           0 :             break;
    1954             : 
    1955             :         case TRISTATE_FALSE:
    1956             :         case TRISTATE_INDET:
    1957           0 :             m_pApplyCollBtn->SetState( TRISTATE_FALSE );
    1958           0 :             m_pApplyCollBtn->Enable(false);
    1959           0 :             m_pApplyCollBox->Enable(false);
    1960           0 :             m_pPagenumText->Enable(false);
    1961           0 :             m_pPagenumEdit->Enable(false);
    1962           0 :             m_pBreakTypeFT->Enable(false);
    1963           0 :             m_pBreakTypeLB->Enable(false);
    1964           0 :             m_pBreakPositionFT->Enable(false);
    1965           0 :             m_pBreakPositionLB->Enable(false);
    1966           0 :             break;
    1967             :     }
    1968           0 :     return 0;
    1969             : }
    1970             : 
    1971           0 : IMPL_LINK_NOARG(SvxExtParagraphTabPage, KeepTogetherHdl_Impl)
    1972             : {
    1973           0 :     sal_Bool bEnable = m_pKeepTogetherBox->GetState() == TRISTATE_FALSE;
    1974           0 :     m_pWidowBox->Enable(bEnable);
    1975           0 :     m_pOrphanBox->Enable(bEnable);
    1976             : 
    1977           0 :     return 0;
    1978             : }
    1979             : 
    1980           0 : IMPL_LINK_NOARG(SvxExtParagraphTabPage, WidowHdl_Impl)
    1981             : {
    1982           0 :     switch ( m_pWidowBox->GetState() )
    1983             :     {
    1984             :         case TRISTATE_TRUE:
    1985           0 :             m_pWidowRowNo->Enable();
    1986           0 :             m_pWidowRowLabel->Enable();
    1987           0 :             m_pKeepTogetherBox->Enable(false);
    1988           0 :             break;
    1989             : 
    1990             :         case TRISTATE_FALSE:
    1991           0 :             if ( m_pOrphanBox->GetState() == TRISTATE_FALSE )
    1992           0 :                 m_pKeepTogetherBox->Enable();
    1993             : 
    1994             :         // no break
    1995             :         case TRISTATE_INDET:
    1996           0 :             m_pWidowRowNo->Enable(false);
    1997           0 :             m_pWidowRowLabel->Enable(false);
    1998           0 :             break;
    1999             :     }
    2000           0 :     return 0;
    2001             : }
    2002             : 
    2003           0 : IMPL_LINK_NOARG(SvxExtParagraphTabPage, OrphanHdl_Impl)
    2004             : {
    2005           0 :     switch( m_pOrphanBox->GetState() )
    2006             :     {
    2007             :         case TRISTATE_TRUE:
    2008           0 :             m_pOrphanRowNo->Enable();
    2009           0 :             m_pOrphanRowLabel->Enable();
    2010           0 :             m_pKeepTogetherBox->Enable(false);
    2011           0 :             break;
    2012             : 
    2013             :         case TRISTATE_FALSE:
    2014           0 :             if ( m_pWidowBox->GetState() == TRISTATE_FALSE )
    2015           0 :                 m_pKeepTogetherBox->Enable();
    2016             : 
    2017             :         // no break
    2018             :         case TRISTATE_INDET:
    2019           0 :             m_pOrphanRowNo->Enable(false);
    2020           0 :             m_pOrphanRowLabel->Enable(false);
    2021           0 :             break;
    2022             :     }
    2023           0 :     return 0;
    2024             : }
    2025             : 
    2026           0 : IMPL_LINK_NOARG(SvxExtParagraphTabPage, HyphenClickHdl_Impl)
    2027             : {
    2028             : 
    2029           0 :     sal_Bool bEnable = m_pHyphenBox->GetState() == TRISTATE_TRUE;
    2030           0 :     m_pBeforeText->Enable(bEnable);
    2031           0 :     m_pExtHyphenBeforeBox->Enable(bEnable);
    2032           0 :     m_pAfterText->Enable(bEnable);
    2033           0 :     m_pExtHyphenAfterBox->Enable(bEnable);
    2034           0 :     m_pMaxHyphenLabel->Enable(bEnable);
    2035           0 :     m_pMaxHyphenEdit->Enable(bEnable);
    2036           0 :     m_pHyphenBox->SetState( bEnable ? TRISTATE_TRUE : TRISTATE_FALSE);
    2037             : 
    2038           0 :     return 0;
    2039             : }
    2040             : 
    2041           0 : IMPL_LINK_NOARG(SvxExtParagraphTabPage, ApplyCollClickHdl_Impl)
    2042             : {
    2043           0 :     sal_Bool bEnable = sal_False;
    2044           0 :     if ( m_pApplyCollBtn->GetState() == TRISTATE_TRUE &&
    2045           0 :          m_pApplyCollBox->GetEntryCount() )
    2046             :     {
    2047           0 :         bEnable = sal_True;
    2048           0 :         m_pApplyCollBox->SelectEntryPos( nStdPos );
    2049             :     }
    2050             :     else
    2051             :     {
    2052           0 :         m_pApplyCollBox->SetNoSelection();
    2053             :     }
    2054           0 :     m_pApplyCollBox->Enable(bEnable);
    2055           0 :     if(!bHtmlMode)
    2056             :     {
    2057           0 :         m_pPagenumText->Enable(bEnable);
    2058           0 :         m_pPagenumEdit->Enable(bEnable);
    2059             :     }
    2060           0 :     return 0;
    2061             : }
    2062             : 
    2063           0 : IMPL_LINK( SvxExtParagraphTabPage, PageBreakPosHdl_Impl, ListBox *, pListBox )
    2064             : {
    2065           0 :     if ( 0 == pListBox->GetSelectEntryPos() )
    2066             :     {
    2067           0 :         m_pApplyCollBtn->Enable();
    2068             : 
    2069           0 :         sal_Bool bEnable = m_pApplyCollBtn->GetState() == TRISTATE_TRUE &&
    2070           0 :                                     m_pApplyCollBox->GetEntryCount();
    2071             : 
    2072           0 :         m_pApplyCollBox->Enable(bEnable);
    2073           0 :         if(!bHtmlMode)
    2074             :         {
    2075           0 :             m_pPagenumText->Enable(bEnable);
    2076           0 :             m_pPagenumEdit->Enable(bEnable);
    2077             :         }
    2078             :     }
    2079           0 :     else if ( 1 == pListBox->GetSelectEntryPos() )
    2080             :     {
    2081           0 :         m_pApplyCollBtn->SetState( TRISTATE_FALSE );
    2082           0 :         m_pApplyCollBtn->Enable(false);
    2083           0 :         m_pApplyCollBox->Enable(false);
    2084           0 :         m_pPagenumText->Enable(false);
    2085           0 :         m_pPagenumEdit->Enable(false);
    2086             :     }
    2087           0 :     return 0;
    2088             : }
    2089             : 
    2090           0 : IMPL_LINK( SvxExtParagraphTabPage, PageBreakTypeHdl_Impl, ListBox *, pListBox )
    2091             : {
    2092             :     //column break or break break after
    2093           0 :     sal_Int32 nBreakPos = m_pBreakPositionLB->GetSelectEntryPos();
    2094           0 :     if ( pListBox->GetSelectEntryPos() == 1 || 1 == nBreakPos)
    2095             :     {
    2096           0 :         m_pApplyCollBtn->SetState( TRISTATE_FALSE );
    2097           0 :         m_pApplyCollBtn->Enable(false);
    2098           0 :         m_pApplyCollBox->Enable(false);
    2099           0 :         m_pPagenumText->Enable(false);
    2100           0 :         m_pPagenumEdit->Enable(false);
    2101             :     }
    2102             :     else
    2103           0 :         PageBreakPosHdl_Impl( m_pBreakPositionLB );
    2104           0 :     return 0;
    2105             : }
    2106             : 
    2107           0 : void SvxExtParagraphTabPage::PageCreated(SfxAllItemSet aSet)
    2108             : {
    2109           0 :     SFX_ITEMSET_ARG (&aSet,pDisablePageBreakItem,SfxBoolItem,SID_DISABLE_SVXEXTPARAGRAPHTABPAGE_PAGEBREAK,false);
    2110             : 
    2111           0 :     if (pDisablePageBreakItem)
    2112           0 :         if ( pDisablePageBreakItem->GetValue())
    2113           0 :                     DisablePageBreak();
    2114           0 : }
    2115             : 
    2116           0 : SvxAsianTabPage::SvxAsianTabPage( Window* pParent, const SfxItemSet& rSet ) :
    2117           0 :     SfxTabPage(pParent, "AsianTypography","cui/ui/asiantypography.ui", rSet)
    2118             : 
    2119             : {
    2120           0 :     get(m_pForbiddenRulesCB,"checkForbidList");
    2121           0 :     get(m_pHangingPunctCB,"checkHangPunct");
    2122           0 :     get(m_pScriptSpaceCB,"checkApplySpacing");
    2123             : 
    2124           0 :     Link aLink = LINK( this, SvxAsianTabPage, ClickHdl_Impl );
    2125           0 :     m_pHangingPunctCB->SetClickHdl( aLink );
    2126           0 :     m_pScriptSpaceCB->SetClickHdl( aLink );
    2127           0 :     m_pForbiddenRulesCB->SetClickHdl( aLink );
    2128             : 
    2129           0 : }
    2130             : 
    2131           0 : SvxAsianTabPage::~SvxAsianTabPage()
    2132             : {
    2133           0 : }
    2134             : 
    2135           0 : SfxTabPage* SvxAsianTabPage::Create(    Window* pParent, const SfxItemSet& rSet )
    2136             : {
    2137           0 :     return new SvxAsianTabPage(pParent, rSet);
    2138             : }
    2139             : 
    2140           0 : sal_uInt16*     SvxAsianTabPage::GetRanges()
    2141             : {
    2142             :     static sal_uInt16 pRanges[] =
    2143             :     {
    2144             :         SID_ATTR_PARA_SCRIPTSPACE, SID_ATTR_PARA_FORBIDDEN_RULES,
    2145             :         0
    2146             :     };
    2147           0 :     return pRanges;
    2148             : }
    2149             : 
    2150           0 : bool SvxAsianTabPage::FillItemSet( SfxItemSet& rSet )
    2151             : {
    2152           0 :     sal_Bool bRet = sal_False;
    2153           0 :     SfxItemPool* pPool = rSet.GetPool();
    2154           0 :     if (m_pScriptSpaceCB->IsEnabled() && TriState(m_pScriptSpaceCB->IsChecked()) != m_pScriptSpaceCB->GetSavedValue())
    2155             :     {
    2156             :         SfxBoolItem* pNewItem = (SfxBoolItem*)rSet.Get(
    2157           0 :             pPool->GetWhich(SID_ATTR_PARA_SCRIPTSPACE)).Clone();
    2158           0 :         pNewItem->SetValue(m_pScriptSpaceCB->IsChecked());
    2159           0 :         rSet.Put(*pNewItem);
    2160           0 :         delete pNewItem;
    2161           0 :         bRet = sal_True;
    2162             :     }
    2163           0 :     if (m_pHangingPunctCB->IsEnabled() && TriState(m_pHangingPunctCB->IsChecked()) != m_pHangingPunctCB->GetSavedValue())
    2164             :     {
    2165             :         SfxBoolItem* pNewItem = (SfxBoolItem*)rSet.Get(
    2166           0 :             pPool->GetWhich(SID_ATTR_PARA_HANGPUNCTUATION)).Clone();
    2167           0 :         pNewItem->SetValue(m_pHangingPunctCB->IsChecked());
    2168           0 :         rSet.Put(*pNewItem);
    2169           0 :         delete pNewItem;
    2170           0 :         bRet = sal_True;
    2171             :     }
    2172           0 :     if (m_pForbiddenRulesCB->IsEnabled() && TriState(m_pForbiddenRulesCB->IsChecked()) != m_pForbiddenRulesCB->GetSavedValue())
    2173             :     {
    2174             :         SfxBoolItem* pNewItem = (SfxBoolItem*)rSet.Get(
    2175           0 :             pPool->GetWhich(SID_ATTR_PARA_FORBIDDEN_RULES)).Clone();
    2176           0 :         pNewItem->SetValue(m_pForbiddenRulesCB->IsChecked());
    2177           0 :         rSet.Put(*pNewItem);
    2178           0 :         delete pNewItem;
    2179           0 :         bRet = sal_True;
    2180             :     }
    2181           0 :     return bRet;
    2182             : }
    2183             : 
    2184           0 : static void lcl_SetBox(const SfxItemSet& rSet, sal_uInt16 nSlotId, CheckBox& rBox)
    2185             : {
    2186           0 :     sal_uInt16 _nWhich = rSet.GetPool()->GetWhich(nSlotId);
    2187           0 :     SfxItemState eState = rSet.GetItemState(_nWhich, true);
    2188           0 :     if(!eState || eState == SFX_ITEM_DISABLED )
    2189           0 :         rBox.Enable(false);
    2190           0 :     else if(eState >= SFX_ITEM_AVAILABLE)
    2191             :     {
    2192           0 :         rBox.EnableTriState( false );
    2193           0 :         rBox.Check(((const SfxBoolItem&)rSet.Get(_nWhich)).GetValue());
    2194             :     }
    2195             :     else
    2196           0 :         rBox.SetState( TRISTATE_INDET );
    2197           0 :     rBox.SaveValue();
    2198           0 : }
    2199             : 
    2200           0 : void SvxAsianTabPage::Reset( const SfxItemSet& rSet )
    2201             : {
    2202           0 :     lcl_SetBox(rSet, SID_ATTR_PARA_FORBIDDEN_RULES, *m_pForbiddenRulesCB );
    2203           0 :     lcl_SetBox(rSet, SID_ATTR_PARA_HANGPUNCTUATION, *m_pHangingPunctCB );
    2204             : 
    2205             :     //character distance not yet available
    2206           0 :     lcl_SetBox(rSet, SID_ATTR_PARA_SCRIPTSPACE, *m_pScriptSpaceCB );
    2207           0 : }
    2208             : 
    2209           0 : IMPL_LINK( SvxAsianTabPage, ClickHdl_Impl, CheckBox*, pBox )
    2210             : {
    2211           0 :     pBox->EnableTriState( false );
    2212           0 :     return 0;
    2213           0 : }
    2214             : 
    2215             : /* vim:set shiftwidth=4 softtabstop=4 expandtab: */

Generated by: LCOV version 1.10