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

Generated by: LCOV version 1.11