ce219689ca
HTMLMODE_FIRSTLINE was disabled in all HTML export modes. It seems to have been used to add first line indent for paragraphs in Netscape version 3 but all currently available export modes use CSS for that.
2337 lines
76 KiB
C++
2337 lines
76 KiB
C++
/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
|
|
/*************************************************************************
|
|
*
|
|
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
|
*
|
|
* Copyright 2000, 2010 Oracle and/or its affiliates.
|
|
*
|
|
* OpenOffice.org - a multi-platform office productivity suite
|
|
*
|
|
* This file is part of OpenOffice.org.
|
|
*
|
|
* OpenOffice.org is free software: you can redistribute it and/or modify
|
|
* it under the terms of the GNU Lesser General Public License version 3
|
|
* only, as published by the Free Software Foundation.
|
|
*
|
|
* OpenOffice.org is distributed in the hope that it will be useful,
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
* GNU Lesser General Public License version 3 for more details
|
|
* (a copy is included in the LICENSE file that accompanied this code).
|
|
*
|
|
* You should have received a copy of the GNU Lesser General Public License
|
|
* version 3 along with OpenOffice.org. If not, see
|
|
* <http://www.openoffice.org/license.html>
|
|
* for a copy of the LGPLv3 License.
|
|
*
|
|
************************************************************************/
|
|
|
|
#include <svl/style.hxx>
|
|
#include <sfx2/app.hxx>
|
|
#include <sfx2/objsh.hxx>
|
|
#include <sfx2/module.hxx>
|
|
#include <vcl/mnemonic.hxx>
|
|
#include <svx/dialogs.hrc>
|
|
|
|
#define _SVX_PARAGRPH_CXX 0
|
|
|
|
#include <svl/languageoptions.hxx>
|
|
#include <svl/cjkoptions.hxx>
|
|
#include <editeng/pgrditem.hxx>
|
|
#include <cuires.hrc>
|
|
#include "paragrph.hrc"
|
|
#include "paragrph.hxx"
|
|
#include <editeng/frmdiritem.hxx>
|
|
#include <editeng/lspcitem.hxx>
|
|
#include <editeng/adjitem.hxx>
|
|
#include <editeng/orphitem.hxx>
|
|
#include <editeng/widwitem.hxx>
|
|
#include <editeng/tstpitem.hxx>
|
|
#include <editeng/pmdlitem.hxx>
|
|
#include <editeng/spltitem.hxx>
|
|
#include <editeng/hyznitem.hxx>
|
|
#include <editeng/ulspitem.hxx>
|
|
#include <editeng/lrspitem.hxx>
|
|
#include <editeng/brkitem.hxx>
|
|
#include <editeng/keepitem.hxx>
|
|
#include "svx/dlgutil.hxx"
|
|
#include <dialmgr.hxx>
|
|
#include "svx/htmlmode.hxx"
|
|
#include <editeng/paravertalignitem.hxx>
|
|
#include <svl/eitem.hxx>
|
|
#include <sfx2/request.hxx>
|
|
#include <svl/intitem.hxx>
|
|
|
|
// static ----------------------------------------------------------------
|
|
|
|
static sal_uInt16 pStdRanges[] =
|
|
{
|
|
SID_ATTR_PARA_LINESPACE, // 10033
|
|
SID_ATTR_PARA_LINESPACE,
|
|
SID_ATTR_LRSPACE, // 10048 -
|
|
SID_ATTR_ULSPACE, // 10049
|
|
SID_ATTR_PARA_REGISTER, // 10413
|
|
SID_ATTR_PARA_REGISTER,
|
|
0
|
|
};
|
|
|
|
static sal_uInt16 pAlignRanges[] =
|
|
{
|
|
SID_ATTR_PARA_ADJUST, // 10027
|
|
SID_ATTR_PARA_ADJUST,
|
|
0
|
|
};
|
|
|
|
static sal_uInt16 pExtRanges[] =
|
|
{
|
|
SID_ATTR_PARA_PAGEBREAK, // 10037 -
|
|
SID_ATTR_PARA_WIDOWS, // 10041
|
|
SID_ATTR_PARA_MODEL, // 10065 -
|
|
SID_ATTR_PARA_KEEP, // 10066
|
|
0
|
|
};
|
|
|
|
// define ----------------------------------------------------------------
|
|
|
|
#define MAX_DURCH 5670 // 10 cm ist sinnvoll als maximaler Durchschuss
|
|
// laut BP
|
|
#define FIX_DIST_DEF 283 // Standard-Fix-Abstand 0,5cm
|
|
|
|
// enum ------------------------------------------------------------------
|
|
|
|
enum LineSpaceList
|
|
{
|
|
LLINESPACE_1 = 0,
|
|
LLINESPACE_15 = 1,
|
|
LLINESPACE_2 = 2,
|
|
LLINESPACE_PROP = 3,
|
|
LLINESPACE_MIN = 4,
|
|
LLINESPACE_DURCH= 5,
|
|
LLINESPACE_FIX = 6,
|
|
LLINESPACE_END
|
|
};
|
|
|
|
// C-Funktion ------------------------------------------------------------
|
|
|
|
void SetLineSpace_Impl( SvxLineSpacingItem&, int, long lValue = 0 );
|
|
|
|
void SetLineSpace_Impl( SvxLineSpacingItem& rLineSpace,
|
|
int eSpace, long lValue )
|
|
{
|
|
switch ( eSpace )
|
|
{
|
|
case LLINESPACE_1:
|
|
rLineSpace.GetLineSpaceRule() = SVX_LINE_SPACE_AUTO;
|
|
rLineSpace.GetInterLineSpaceRule() = SVX_INTER_LINE_SPACE_OFF;
|
|
break;
|
|
|
|
case LLINESPACE_15:
|
|
rLineSpace.GetLineSpaceRule() = SVX_LINE_SPACE_AUTO;
|
|
rLineSpace.SetPropLineSpace( 150 );
|
|
break;
|
|
|
|
case LLINESPACE_2:
|
|
rLineSpace.GetLineSpaceRule() = SVX_LINE_SPACE_AUTO;
|
|
rLineSpace.SetPropLineSpace( 200 );
|
|
break;
|
|
|
|
case LLINESPACE_PROP:
|
|
rLineSpace.GetLineSpaceRule() = SVX_LINE_SPACE_AUTO;
|
|
rLineSpace.SetPropLineSpace( (sal_uInt8)lValue );
|
|
break;
|
|
|
|
case LLINESPACE_MIN:
|
|
rLineSpace.SetLineHeight( (sal_uInt16)lValue );
|
|
rLineSpace.GetInterLineSpaceRule() = SVX_INTER_LINE_SPACE_OFF;
|
|
break;
|
|
|
|
case LLINESPACE_DURCH:
|
|
rLineSpace.GetLineSpaceRule() = SVX_LINE_SPACE_AUTO;
|
|
rLineSpace.SetInterLineSpace( (sal_uInt16)lValue );
|
|
break;
|
|
|
|
case LLINESPACE_FIX:
|
|
rLineSpace.SetLineHeight((sal_uInt16)lValue);
|
|
rLineSpace.GetLineSpaceRule() = SVX_LINE_SPACE_FIX;
|
|
rLineSpace.GetInterLineSpaceRule() = SVX_INTER_LINE_SPACE_OFF;
|
|
break;
|
|
}
|
|
}
|
|
|
|
|
|
sal_uInt16 GetHtmlMode_Impl(const SfxItemSet& rSet)
|
|
{
|
|
sal_uInt16 nHtmlMode = 0;
|
|
const SfxPoolItem* pItem = 0;
|
|
SfxObjectShell* pShell;
|
|
if(SFX_ITEM_SET == rSet.GetItemState(SID_HTML_MODE, sal_False, &pItem) ||
|
|
( 0 != (pShell = SfxObjectShell::Current()) &&
|
|
0 != (pItem = pShell->GetItem(SID_HTML_MODE))))
|
|
{
|
|
nHtmlMode = ((SfxUInt16Item*)pItem)->GetValue();
|
|
}
|
|
return nHtmlMode;
|
|
|
|
}
|
|
|
|
// class SvxStdParagraphTabPage ------------------------------------------
|
|
|
|
IMPL_LINK_NOARG(SvxStdParagraphTabPage, ELRLoseFocusHdl)
|
|
{
|
|
SfxItemPool* pPool = GetItemSet().GetPool();
|
|
DBG_ASSERT( pPool, "Wo ist der Pool" );
|
|
FieldUnit eUnit =
|
|
MapToFieldUnit( pPool->GetMetric( GetWhich( SID_ATTR_LRSPACE ) ) );
|
|
|
|
sal_Int64 nL = aLeftIndent.Denormalize( aLeftIndent.GetValue( eUnit ) );
|
|
sal_Int64 nR = aRightIndent.Denormalize( aRightIndent.GetValue( eUnit ) );
|
|
String aTmp = aFLineIndent.GetText();
|
|
|
|
// Erstzeilen Einzug
|
|
if( aLeftIndent.GetMin() < 0 )
|
|
aFLineIndent.SetMin( -99999, FUNIT_MM );
|
|
else
|
|
aFLineIndent.SetMin( aFLineIndent.Normalize( -nL ), eUnit );
|
|
|
|
// Check nur fuer konkrete Breite (Shell)
|
|
sal_Int64 nTmp = nWidth - nL - nR - MM50;
|
|
aFLineIndent.SetMax( aFLineIndent.Normalize( nTmp ), eUnit );
|
|
|
|
if ( !aTmp.Len() )
|
|
aFLineIndent.SetEmptyFieldValue();
|
|
// Maximum Links Rechts
|
|
aTmp = aLeftIndent.GetText();
|
|
nTmp = nWidth - nR - MM50;
|
|
aLeftIndent.SetMax( aLeftIndent.Normalize( nTmp ), eUnit );
|
|
|
|
if ( !aTmp.Len() )
|
|
aLeftIndent.SetEmptyFieldValue();
|
|
aTmp = aRightIndent.GetText();
|
|
nTmp = nWidth - nL - MM50;
|
|
aRightIndent.SetMax( aRightIndent.Normalize( nTmp ), eUnit );
|
|
|
|
if ( !aTmp.Len() )
|
|
aRightIndent.SetEmptyFieldValue();
|
|
return 0;
|
|
}
|
|
|
|
// -----------------------------------------------------------------------
|
|
|
|
SfxTabPage* SvxStdParagraphTabPage::Create( Window* pParent,
|
|
const SfxItemSet& rSet)
|
|
{
|
|
return new SvxStdParagraphTabPage( pParent, rSet );
|
|
}
|
|
|
|
// -----------------------------------------------------------------------
|
|
|
|
sal_Bool SvxStdParagraphTabPage::FillItemSet( SfxItemSet& rOutSet )
|
|
{
|
|
SfxItemState eState = SFX_ITEM_UNKNOWN;
|
|
const SfxPoolItem* pOld = 0;
|
|
SfxItemPool* pPool = rOutSet.GetPool();
|
|
DBG_ASSERT( pPool, "Wo ist der Pool" );
|
|
|
|
sal_Bool bModified = sal_False;
|
|
sal_uInt16 nWhich;
|
|
sal_uInt16 nPos = aLineDist.GetSelectEntryPos();
|
|
|
|
if ( LISTBOX_ENTRY_NOTFOUND != nPos &&
|
|
( nPos != aLineDist.GetSavedValue() ||
|
|
aLineDistAtPercentBox.IsValueModified() ||
|
|
aLineDistAtMetricBox.IsValueModified() ) )
|
|
{
|
|
nWhich = GetWhich( SID_ATTR_PARA_LINESPACE );
|
|
SfxMapUnit eUnit = pPool->GetMetric( nWhich );
|
|
SvxLineSpacingItem aSpacing(
|
|
(const SvxLineSpacingItem&)GetItemSet().Get( nWhich ) );
|
|
|
|
switch ( nPos )
|
|
{
|
|
case LLINESPACE_1:
|
|
case LLINESPACE_15:
|
|
case LLINESPACE_2:
|
|
SetLineSpace_Impl( aSpacing, nPos );
|
|
break;
|
|
|
|
case LLINESPACE_PROP:
|
|
SetLineSpace_Impl( aSpacing, nPos,
|
|
static_cast<long>(aLineDistAtPercentBox.Denormalize(
|
|
aLineDistAtPercentBox.GetValue() )) );
|
|
break;
|
|
|
|
case LLINESPACE_MIN:
|
|
case LLINESPACE_DURCH:
|
|
case LLINESPACE_FIX:
|
|
SetLineSpace_Impl( aSpacing, nPos,
|
|
GetCoreValue( aLineDistAtMetricBox, eUnit ) );
|
|
break;
|
|
|
|
default:
|
|
OSL_FAIL( "unbekannter Type fuer Zeilenabstand." );
|
|
break;
|
|
}
|
|
eState = GetItemSet().GetItemState( nWhich );
|
|
pOld = GetOldItem( rOutSet, SID_ATTR_PARA_LINESPACE );
|
|
|
|
if ( !pOld || !( *(const SvxLineSpacingItem*)pOld == aSpacing ) ||
|
|
SFX_ITEM_DONTCARE == eState )
|
|
{
|
|
rOutSet.Put( aSpacing );
|
|
bModified = sal_True;
|
|
}
|
|
}
|
|
|
|
if ( aTopDist.IsValueModified() || aBottomDist.IsValueModified()
|
|
|| aContextualCB.GetSavedValue() != aContextualCB.IsChecked())
|
|
{
|
|
nWhich = GetWhich( SID_ATTR_ULSPACE );
|
|
SfxMapUnit eUnit = pPool->GetMetric( nWhich );
|
|
pOld = GetOldItem( rOutSet, SID_ATTR_ULSPACE );
|
|
SvxULSpaceItem aMargin( nWhich );
|
|
|
|
if ( bRelativeMode )
|
|
{
|
|
DBG_ASSERT( GetItemSet().GetParent(), "No ParentSet" );
|
|
|
|
const SvxULSpaceItem& rOldItem =
|
|
(const SvxULSpaceItem&)GetItemSet().GetParent()->Get( nWhich );
|
|
|
|
if ( aTopDist.IsRelative() )
|
|
aMargin.SetUpper( rOldItem.GetUpper(),
|
|
(sal_uInt16)aTopDist.GetValue() );
|
|
else
|
|
aMargin.SetUpper( (sal_uInt16)GetCoreValue( aTopDist, eUnit ) );
|
|
|
|
if ( aBottomDist.IsRelative() )
|
|
aMargin.SetLower( rOldItem.GetLower(),
|
|
(sal_uInt16)aBottomDist.GetValue() );
|
|
else
|
|
aMargin.SetLower( (sal_uInt16)GetCoreValue( aBottomDist, eUnit ) );
|
|
|
|
}
|
|
else
|
|
{
|
|
aMargin.SetUpper( (sal_uInt16)GetCoreValue( aTopDist, eUnit ) );
|
|
aMargin.SetLower( (sal_uInt16)GetCoreValue( aBottomDist, eUnit ) );
|
|
}
|
|
aMargin.SetContextValue(aContextualCB.IsChecked());
|
|
eState = GetItemSet().GetItemState( nWhich );
|
|
|
|
if ( !pOld || !( *(const SvxULSpaceItem*)pOld == aMargin ) ||
|
|
SFX_ITEM_DONTCARE == eState )
|
|
{
|
|
rOutSet.Put( aMargin );
|
|
bModified = sal_True;
|
|
}
|
|
}
|
|
bool bNullTab = false;
|
|
|
|
if ( aLeftIndent.IsValueModified() ||
|
|
aFLineIndent.IsValueModified() ||
|
|
aRightIndent.IsValueModified()
|
|
|| aAutoCB.GetSavedValue() != aAutoCB.IsChecked() )
|
|
{
|
|
nWhich = GetWhich( SID_ATTR_LRSPACE );
|
|
SfxMapUnit eUnit = pPool->GetMetric( nWhich );
|
|
SvxLRSpaceItem aMargin( nWhich );
|
|
pOld = GetOldItem( rOutSet, SID_ATTR_LRSPACE );
|
|
|
|
if ( bRelativeMode )
|
|
{
|
|
DBG_ASSERT( GetItemSet().GetParent(), "No ParentSet" );
|
|
|
|
const SvxLRSpaceItem& rOldItem =
|
|
(const SvxLRSpaceItem&)GetItemSet().GetParent()->Get( nWhich );
|
|
|
|
if ( aLeftIndent.IsRelative() )
|
|
aMargin.SetTxtLeft( rOldItem.GetTxtLeft(),
|
|
(sal_uInt16)aLeftIndent.GetValue() );
|
|
else
|
|
aMargin.SetTxtLeft( GetCoreValue( aLeftIndent, eUnit ) );
|
|
|
|
if ( aRightIndent.IsRelative() )
|
|
aMargin.SetRight( rOldItem.GetRight(),
|
|
(sal_uInt16)aRightIndent.GetValue() );
|
|
else
|
|
aMargin.SetRight( GetCoreValue( aRightIndent, eUnit ) );
|
|
|
|
if ( aFLineIndent.IsRelative() )
|
|
aMargin.SetTxtFirstLineOfst( rOldItem.GetTxtFirstLineOfst(),
|
|
(sal_uInt16)aFLineIndent.GetValue() );
|
|
else
|
|
aMargin.SetTxtFirstLineOfst(
|
|
(sal_uInt16)GetCoreValue( aFLineIndent, eUnit ) );
|
|
}
|
|
else
|
|
{
|
|
aMargin.SetTxtLeft( GetCoreValue( aLeftIndent, eUnit ) );
|
|
aMargin.SetRight( GetCoreValue( aRightIndent, eUnit ) );
|
|
aMargin.SetTxtFirstLineOfst(
|
|
(sal_uInt16)GetCoreValue( aFLineIndent, eUnit ) );
|
|
}
|
|
aMargin.SetAutoFirst(aAutoCB.IsChecked());
|
|
if ( aMargin.GetTxtFirstLineOfst() < 0 )
|
|
bNullTab = true;
|
|
eState = GetItemSet().GetItemState( nWhich );
|
|
|
|
if ( !pOld || !( *(const SvxLRSpaceItem*)pOld == aMargin ) ||
|
|
SFX_ITEM_DONTCARE == eState )
|
|
{
|
|
rOutSet.Put( aMargin );
|
|
bModified = sal_True;
|
|
}
|
|
}
|
|
|
|
if ( bNullTab )
|
|
{
|
|
MapUnit eUnit = (MapUnit)pPool->GetMetric( GetWhich( SID_ATTR_TABSTOP ) );
|
|
if ( MAP_100TH_MM != eUnit )
|
|
{
|
|
|
|
// negativer Erstzeileneinzug -> ggf. Null Default-Tabstop setzen
|
|
sal_uInt16 _nWhich = GetWhich( SID_ATTR_TABSTOP );
|
|
const SfxItemSet& rInSet = GetItemSet();
|
|
|
|
if ( rInSet.GetItemState( _nWhich ) >= SFX_ITEM_AVAILABLE )
|
|
{
|
|
const SvxTabStopItem& rTabItem =
|
|
(const SvxTabStopItem&)rInSet.Get( _nWhich );
|
|
SvxTabStopItem aNullTab( rTabItem );
|
|
SvxTabStop aNull( 0, SVX_TAB_ADJUST_DEFAULT );
|
|
aNullTab.Insert( aNull );
|
|
rOutSet.Put( aNullTab );
|
|
}
|
|
}
|
|
}
|
|
if( aRegisterCB.IsVisible())
|
|
{
|
|
const SfxBoolItem* pBoolItem = (SfxBoolItem*)GetOldItem(
|
|
rOutSet, SID_ATTR_PARA_REGISTER);
|
|
SfxBoolItem* pRegItem = (SfxBoolItem*)pBoolItem->Clone();
|
|
sal_uInt16 _nWhich = GetWhich( SID_ATTR_PARA_REGISTER );
|
|
sal_Bool bSet = pRegItem->GetValue();
|
|
|
|
if(aRegisterCB.IsChecked() != bSet )
|
|
{
|
|
pRegItem->SetValue(!bSet);
|
|
rOutSet.Put(*pRegItem);
|
|
bModified = sal_True;
|
|
}
|
|
else if ( SFX_ITEM_DEFAULT == GetItemSet().GetItemState( _nWhich, sal_False ) )
|
|
rOutSet.ClearItem(_nWhich);
|
|
delete pRegItem;
|
|
}
|
|
|
|
return bModified;
|
|
}
|
|
|
|
// -----------------------------------------------------------------------
|
|
|
|
void SvxStdParagraphTabPage::Reset( const SfxItemSet& rSet )
|
|
{
|
|
SfxItemPool* pPool = rSet.GetPool();
|
|
DBG_ASSERT( pPool, "Wo ist der Pool?" );
|
|
String aEmpty;
|
|
|
|
// Metrik einstellen
|
|
FieldUnit eFUnit = GetModuleFieldUnit( rSet );
|
|
|
|
bool bApplyCharUnit = GetApplyCharUnit( rSet );
|
|
|
|
SvtCJKOptions aCJKOptions;
|
|
if(aCJKOptions.IsAsianTypographyEnabled() && bApplyCharUnit )
|
|
eFUnit = FUNIT_CHAR;
|
|
|
|
SetFieldUnit( aLeftIndent, eFUnit );
|
|
SetFieldUnit( aRightIndent, eFUnit );
|
|
SetFieldUnit( aFLineIndent, eFUnit );
|
|
if ( eFUnit == FUNIT_CHAR )
|
|
{
|
|
SetFieldUnit( aTopDist, FUNIT_LINE );
|
|
SetFieldUnit( aBottomDist, FUNIT_LINE );
|
|
SetFieldUnit( aLineDistAtMetricBox, FUNIT_POINT );
|
|
}
|
|
else
|
|
{
|
|
SetFieldUnit( aTopDist, eFUnit );
|
|
SetFieldUnit( aBottomDist, eFUnit );
|
|
SetFieldUnit( aLineDistAtMetricBox, eFUnit );
|
|
}
|
|
|
|
sal_uInt16 _nWhich = GetWhich( SID_ATTR_LRSPACE );
|
|
SfxItemState eItemState = rSet.GetItemState( _nWhich );
|
|
|
|
if ( eItemState >= SFX_ITEM_AVAILABLE )
|
|
{
|
|
SfxMapUnit eUnit = pPool->GetMetric( _nWhich );
|
|
|
|
if ( bRelativeMode )
|
|
{
|
|
const SvxLRSpaceItem& rOldItem =
|
|
(const SvxLRSpaceItem&)rSet.Get( _nWhich );
|
|
|
|
if ( rOldItem.GetPropLeft() != 100 )
|
|
{
|
|
aLeftIndent.SetRelative( sal_True );
|
|
aLeftIndent.SetValue( rOldItem.GetPropLeft() );
|
|
}
|
|
else
|
|
{
|
|
aLeftIndent.SetRelative();
|
|
SetFieldUnit( aLeftIndent, eFUnit );
|
|
SetMetricValue( aLeftIndent, rOldItem.GetTxtLeft(), eUnit );
|
|
}
|
|
|
|
if ( rOldItem.GetPropRight() != 100 )
|
|
{
|
|
aRightIndent.SetRelative( sal_True );
|
|
aRightIndent.SetValue( rOldItem.GetPropRight() );
|
|
}
|
|
else
|
|
{
|
|
aRightIndent.SetRelative();
|
|
SetFieldUnit( aRightIndent, eFUnit );
|
|
SetMetricValue( aRightIndent, rOldItem.GetRight(), eUnit );
|
|
}
|
|
|
|
if ( rOldItem.GetPropTxtFirstLineOfst() != 100 )
|
|
{
|
|
aFLineIndent.SetRelative( sal_True );
|
|
aFLineIndent.SetValue( rOldItem.GetPropTxtFirstLineOfst() );
|
|
}
|
|
else
|
|
{
|
|
aFLineIndent.SetRelative();
|
|
aFLineIndent.SetMin(-9999);
|
|
SetFieldUnit( aFLineIndent, eFUnit );
|
|
SetMetricValue( aFLineIndent, rOldItem.GetTxtFirstLineOfst(),
|
|
eUnit );
|
|
}
|
|
aAutoCB.Check(rOldItem.IsAutoFirst());
|
|
}
|
|
else
|
|
{
|
|
const SvxLRSpaceItem& rSpace =
|
|
(const SvxLRSpaceItem&)rSet.Get( _nWhich );
|
|
|
|
SetMetricValue( aLeftIndent, rSpace.GetTxtLeft(), eUnit );
|
|
SetMetricValue( aRightIndent, rSpace.GetRight(), eUnit );
|
|
SetMetricValue( aFLineIndent, rSpace.GetTxtFirstLineOfst(), eUnit );
|
|
aAutoCB.Check(rSpace.IsAutoFirst());
|
|
}
|
|
AutoHdl_Impl(&aAutoCB);
|
|
}
|
|
else
|
|
{
|
|
aLeftIndent.SetEmptyFieldValue();
|
|
aRightIndent.SetEmptyFieldValue();
|
|
aFLineIndent.SetEmptyFieldValue();
|
|
}
|
|
|
|
_nWhich = GetWhich( SID_ATTR_ULSPACE );
|
|
eItemState = rSet.GetItemState( _nWhich );
|
|
|
|
if ( eItemState >= SFX_ITEM_AVAILABLE )
|
|
{
|
|
SfxMapUnit eUnit = pPool->GetMetric( _nWhich );
|
|
|
|
const SvxULSpaceItem& rOldItem =
|
|
(const SvxULSpaceItem&)rSet.Get( _nWhich );
|
|
if ( bRelativeMode )
|
|
{
|
|
|
|
if ( rOldItem.GetPropUpper() != 100 )
|
|
{
|
|
aTopDist.SetRelative( sal_True );
|
|
aTopDist.SetValue( rOldItem.GetPropUpper() );
|
|
}
|
|
else
|
|
{
|
|
aTopDist.SetRelative();
|
|
if ( eFUnit == FUNIT_CHAR )
|
|
SetFieldUnit( aTopDist, FUNIT_LINE );
|
|
else
|
|
SetFieldUnit( aTopDist, eFUnit );
|
|
SetMetricValue( aTopDist, rOldItem.GetUpper(), eUnit );
|
|
}
|
|
|
|
if ( rOldItem.GetPropLower() != 100 )
|
|
{
|
|
aBottomDist.SetRelative( sal_True );
|
|
aBottomDist.SetValue( rOldItem.GetPropLower() );
|
|
}
|
|
else
|
|
{
|
|
aBottomDist.SetRelative();
|
|
if ( eFUnit == FUNIT_CHAR )
|
|
SetFieldUnit( aBottomDist, FUNIT_LINE );
|
|
else
|
|
SetFieldUnit( aBottomDist, eFUnit );
|
|
SetMetricValue( aBottomDist, rOldItem.GetLower(), eUnit );
|
|
}
|
|
}
|
|
else
|
|
{
|
|
SetMetricValue( aTopDist, rOldItem.GetUpper(), eUnit );
|
|
SetMetricValue( aBottomDist, rOldItem.GetLower(), eUnit );
|
|
}
|
|
aContextualCB.Check(rOldItem.GetContext());
|
|
}
|
|
else
|
|
{
|
|
aTopDist.SetEmptyFieldValue();
|
|
aBottomDist.SetEmptyFieldValue();
|
|
}
|
|
|
|
_nWhich = GetWhich( SID_ATTR_PARA_LINESPACE );
|
|
eItemState = rSet.GetItemState( _nWhich );
|
|
|
|
if ( eItemState >= SFX_ITEM_AVAILABLE )
|
|
SetLineSpacing_Impl( (const SvxLineSpacingItem &)rSet.Get( _nWhich ) );
|
|
else
|
|
aLineDist.SetNoSelection();
|
|
|
|
|
|
_nWhich = GetWhich( SID_ATTR_PARA_REGISTER );
|
|
eItemState = rSet.GetItemState( _nWhich );
|
|
|
|
if ( eItemState >= SFX_ITEM_AVAILABLE )
|
|
aRegisterCB.Check( ((const SfxBoolItem &)rSet.Get( _nWhich )).GetValue());
|
|
aRegisterCB.SaveValue();
|
|
sal_uInt16 nHtmlMode = GetHtmlMode_Impl(rSet);
|
|
if(nHtmlMode & HTMLMODE_ON)
|
|
{
|
|
aRegisterCB.Hide();
|
|
aRegisterFL.Hide();
|
|
aAutoCB.Hide();
|
|
if(!(nHtmlMode & HTMLMODE_SOME_STYLES)) // IE oder SW
|
|
{
|
|
aRightLabel.Disable();
|
|
aRightIndent.Disable();
|
|
aTopDist.Disable(); //HTML3.2 und NS 3.0
|
|
aBottomDist.Disable();
|
|
aFLineIndent.Disable();
|
|
aFLineLabel.Disable();
|
|
}
|
|
}
|
|
|
|
ELRLoseFocusHdl( NULL );
|
|
aAutoCB.SaveValue();
|
|
aContextualCB.SaveValue();
|
|
aLineDist.SaveValue();
|
|
}
|
|
|
|
// -----------------------------------------------------------------------
|
|
|
|
void SvxStdParagraphTabPage::EnableRelativeMode()
|
|
{
|
|
DBG_ASSERT( GetItemSet().GetParent(), "RelativeMode, but no parent-set!" );
|
|
|
|
aLeftIndent.EnableRelativeMode( 0, 999 );
|
|
aFLineIndent.EnableRelativeMode( 0, 999 );
|
|
aRightIndent.EnableRelativeMode( 0, 999 );
|
|
aTopDist.EnableRelativeMode( 0, 999 );
|
|
aBottomDist.EnableRelativeMode( 0, 999 );
|
|
bRelativeMode = sal_True;
|
|
}
|
|
|
|
// -----------------------------------------------------------------------
|
|
|
|
int SvxStdParagraphTabPage::DeactivatePage( SfxItemSet* _pSet )
|
|
{
|
|
ELRLoseFocusHdl( NULL );
|
|
|
|
if ( _pSet )
|
|
FillItemSet( *_pSet );
|
|
return LEAVE_PAGE;
|
|
}
|
|
|
|
// -----------------------------------------------------------------------
|
|
|
|
SvxStdParagraphTabPage::SvxStdParagraphTabPage( Window* pParent,
|
|
const SfxItemSet& rAttr ) :
|
|
|
|
SfxTabPage( pParent, CUI_RES( RID_SVXPAGE_STD_PARAGRAPH ), rAttr ),
|
|
|
|
aIndentFrm ( this, CUI_RES( FL_INDENT ) ),
|
|
aLeftLabel ( this, CUI_RES( FT_LEFTINDENT ) ),
|
|
aLeftIndent ( this, CUI_RES( ED_LEFTINDENT ) ),
|
|
aRightLabel ( this, CUI_RES( FT_RIGHTINDENT ) ),
|
|
aRightIndent ( this, CUI_RES( ED_RIGHTINDENT ) ),
|
|
|
|
aFLineLabel ( this, CUI_RES( FT_FLINEINDENT ) ),
|
|
aFLineIndent ( this, CUI_RES( ED_FLINEINDENT ) ),
|
|
aAutoCB ( this, CUI_RES( CB_AUTO ) ),
|
|
aDistFrm ( this, CUI_RES( FL_DIST ) ),
|
|
aTopLabel ( this, CUI_RES( FT_TOPDIST ) ),
|
|
aTopDist ( this, CUI_RES( ED_TOPDIST ) ),
|
|
aBottomLabel ( this, CUI_RES( FT_BOTTOMDIST ) ),
|
|
aBottomDist ( this, CUI_RES( ED_BOTTOMDIST ) ),
|
|
aContextualCB ( this, CUI_RES( CB_CONTEXTUALSPACING ) ),
|
|
|
|
aLineDistFrm ( this, CUI_RES( FL_LINEDIST ) ),
|
|
aLineDist ( this, CUI_RES( LB_LINEDIST ) ),
|
|
aLineDistAtLabel ( this, CUI_RES( FT_LINEDIST ) ),
|
|
aLineDistAtPercentBox ( this, CUI_RES( ED_LINEDISTPERCENT ) ),
|
|
aLineDistAtMetricBox ( this, CUI_RES( ED_LINEDISTMETRIC ) ),
|
|
sAbsDist ( CUI_RES(ST_LINEDIST_ABS) ),
|
|
aExampleWin ( this, CUI_RES( WN_EXAMPLE ) ),
|
|
aRegisterFL ( this, CUI_RES( FL_REGISTER ) ),
|
|
aRegisterCB ( this, CUI_RES( CB_REGISTER ) ),
|
|
pActLineDistFld ( &aLineDistAtPercentBox ),
|
|
nAbst ( MAX_DURCH ),
|
|
nWidth ( 11905 /*567 * 50*/ ),
|
|
nMinFixDist(0L),
|
|
|
|
bRelativeMode ( sal_False ),
|
|
bNegativeIndents(sal_False)
|
|
|
|
{
|
|
// diese Page braucht ExchangeSupport
|
|
SetExchangeSupport();
|
|
|
|
aLineDistAtMetricBox.Hide();
|
|
FreeResource();
|
|
Init_Impl();
|
|
aFLineIndent.SetMin(-9999); // wird default auf 0 gesetzt
|
|
|
|
aExampleWin.SetAccessibleName(String(CUI_RES(STR_EXAMPLE)));
|
|
|
|
}
|
|
|
|
|
|
// -----------------------------------------------------------------------
|
|
|
|
void SvxStdParagraphTabPage::EnableNegativeMode()
|
|
{
|
|
aLeftIndent.SetMin(-9999);
|
|
aRightIndent.SetMin(-9999);
|
|
aRightIndent.EnableNegativeMode();
|
|
aLeftIndent.EnableNegativeMode();
|
|
bNegativeIndents = sal_True;
|
|
}
|
|
|
|
// -----------------------------------------------------------------------
|
|
|
|
sal_uInt16* SvxStdParagraphTabPage::GetRanges()
|
|
{
|
|
return pStdRanges;
|
|
}
|
|
|
|
// -----------------------------------------------------------------------
|
|
|
|
void SvxStdParagraphTabPage::SetLineSpacing_Impl
|
|
(
|
|
const SvxLineSpacingItem &rAttr
|
|
)
|
|
{
|
|
SfxMapUnit eUnit = GetItemSet().GetPool()->GetMetric( rAttr.Which() );
|
|
|
|
switch( rAttr.GetLineSpaceRule() )
|
|
{
|
|
case SVX_LINE_SPACE_AUTO:
|
|
{
|
|
SvxInterLineSpace eInter = rAttr.GetInterLineSpaceRule();
|
|
|
|
switch( eInter )
|
|
{
|
|
// Default einzeilig
|
|
case SVX_INTER_LINE_SPACE_OFF:
|
|
aLineDist.SelectEntryPos( LLINESPACE_1 );
|
|
break;
|
|
|
|
// Default einzeilig
|
|
case SVX_INTER_LINE_SPACE_PROP:
|
|
if ( 100 == rAttr.GetPropLineSpace() )
|
|
{
|
|
aLineDist.SelectEntryPos( LLINESPACE_1 );
|
|
break;
|
|
}
|
|
// 1.5zeilig
|
|
if ( 150 == rAttr.GetPropLineSpace() )
|
|
{
|
|
aLineDist.SelectEntryPos( LLINESPACE_15 );
|
|
break;
|
|
}
|
|
// 2zeilig
|
|
if ( 200 == rAttr.GetPropLineSpace() )
|
|
{
|
|
aLineDist.SelectEntryPos( LLINESPACE_2 );
|
|
break;
|
|
}
|
|
// eingestellter Prozentwert
|
|
aLineDistAtPercentBox.
|
|
SetValue( aLineDistAtPercentBox.Normalize(
|
|
rAttr.GetPropLineSpace() ) );
|
|
aLineDist.SelectEntryPos( LLINESPACE_PROP );
|
|
break;
|
|
|
|
case SVX_INTER_LINE_SPACE_FIX:
|
|
SetMetricValue( aLineDistAtMetricBox,
|
|
rAttr.GetInterLineSpace(), eUnit );
|
|
aLineDist.SelectEntryPos( LLINESPACE_DURCH );
|
|
break;
|
|
default: ;//prevent warning
|
|
}
|
|
}
|
|
break;
|
|
case SVX_LINE_SPACE_FIX:
|
|
SetMetricValue(aLineDistAtMetricBox, rAttr.GetLineHeight(), eUnit);
|
|
aLineDist.SelectEntryPos( LLINESPACE_FIX );
|
|
break;
|
|
|
|
case SVX_LINE_SPACE_MIN:
|
|
SetMetricValue(aLineDistAtMetricBox, rAttr.GetLineHeight(), eUnit);
|
|
aLineDist.SelectEntryPos( LLINESPACE_MIN );
|
|
break;
|
|
default: ;//prevent warning
|
|
}
|
|
LineDistHdl_Impl( &aLineDist );
|
|
}
|
|
|
|
// -----------------------------------------------------------------------
|
|
|
|
IMPL_LINK( SvxStdParagraphTabPage, LineDistHdl_Impl, ListBox *, pBox )
|
|
{
|
|
switch( pBox->GetSelectEntryPos() )
|
|
{
|
|
case LLINESPACE_1:
|
|
case LLINESPACE_15:
|
|
case LLINESPACE_2:
|
|
aLineDistAtLabel.Enable(sal_False);
|
|
pActLineDistFld->Enable(sal_False);
|
|
pActLineDistFld->SetText( String() );
|
|
break;
|
|
|
|
case LLINESPACE_DURCH:
|
|
// Setzen eines sinnvollen Defaults?
|
|
// MS Begrenzen min(10, aPageSize)
|
|
aLineDistAtPercentBox.Hide();
|
|
pActLineDistFld = &aLineDistAtMetricBox;
|
|
aLineDistAtMetricBox.SetMin(0);
|
|
|
|
|
|
if ( !aLineDistAtMetricBox.GetText().Len() )
|
|
aLineDistAtMetricBox.SetValue(
|
|
aLineDistAtMetricBox.Normalize( 1 ) );
|
|
aLineDistAtPercentBox.Hide();
|
|
pActLineDistFld->Show();
|
|
pActLineDistFld->Enable();
|
|
aLineDistAtLabel.Enable();
|
|
break;
|
|
|
|
case LLINESPACE_MIN:
|
|
aLineDistAtPercentBox.Hide();
|
|
pActLineDistFld = &aLineDistAtMetricBox;
|
|
aLineDistAtMetricBox.SetMin(0);
|
|
|
|
if ( !aLineDistAtMetricBox.GetText().Len() )
|
|
aLineDistAtMetricBox.SetValue(
|
|
aLineDistAtMetricBox.Normalize( 10 ), FUNIT_TWIP );
|
|
aLineDistAtPercentBox.Hide();
|
|
pActLineDistFld->Show();
|
|
pActLineDistFld->Enable();
|
|
aLineDistAtLabel.Enable();
|
|
break;
|
|
|
|
case LLINESPACE_PROP:
|
|
aLineDistAtMetricBox.Hide();
|
|
pActLineDistFld = &aLineDistAtPercentBox;
|
|
|
|
if ( !aLineDistAtPercentBox.GetText().Len() )
|
|
aLineDistAtPercentBox.SetValue(
|
|
aLineDistAtPercentBox.Normalize( 100 ), FUNIT_TWIP );
|
|
aLineDistAtMetricBox.Hide();
|
|
pActLineDistFld->Show();
|
|
pActLineDistFld->Enable();
|
|
aLineDistAtLabel.Enable();
|
|
break;
|
|
case LLINESPACE_FIX:
|
|
{
|
|
aLineDistAtPercentBox.Hide();
|
|
pActLineDistFld = &aLineDistAtMetricBox;
|
|
sal_Int64 nTemp = aLineDistAtMetricBox.GetValue();
|
|
aLineDistAtMetricBox.SetMin(aLineDistAtMetricBox.Normalize(nMinFixDist), FUNIT_TWIP);
|
|
|
|
// wurde der Wert beim SetMin veraendert, dann ist es Zeit
|
|
// fuer den default
|
|
if ( aLineDistAtMetricBox.GetValue() != nTemp )
|
|
SetMetricValue( aLineDistAtMetricBox,
|
|
FIX_DIST_DEF, SFX_MAPUNIT_TWIP ); // fix gibt's nur im Writer
|
|
aLineDistAtPercentBox.Hide();
|
|
pActLineDistFld->Show();
|
|
pActLineDistFld->Enable();
|
|
aLineDistAtLabel.Enable();
|
|
}
|
|
break;
|
|
}
|
|
UpdateExample_Impl( sal_True );
|
|
return 0;
|
|
}
|
|
|
|
// -----------------------------------------------------------------------
|
|
|
|
IMPL_LINK_NOARG_INLINE_START(SvxStdParagraphTabPage, ModifyHdl_Impl)
|
|
{
|
|
UpdateExample_Impl();
|
|
return 0;
|
|
}
|
|
IMPL_LINK_NOARG_INLINE_END(SvxStdParagraphTabPage, ModifyHdl_Impl)
|
|
|
|
// -----------------------------------------------------------------------
|
|
|
|
void SvxStdParagraphTabPage::Init_Impl()
|
|
{
|
|
aLineDist.SetSelectHdl(
|
|
LINK( this, SvxStdParagraphTabPage, LineDistHdl_Impl ) );
|
|
|
|
Link aLink = LINK( this, SvxStdParagraphTabPage, ELRLoseFocusHdl );
|
|
aFLineIndent.SetLoseFocusHdl( aLink );
|
|
aLeftIndent.SetLoseFocusHdl( aLink );
|
|
aRightIndent.SetLoseFocusHdl( aLink );
|
|
|
|
aLink = LINK( this, SvxStdParagraphTabPage, ModifyHdl_Impl );
|
|
aFLineIndent.SetModifyHdl( aLink );
|
|
aLeftIndent.SetModifyHdl( aLink );
|
|
aRightIndent.SetModifyHdl( aLink );
|
|
aTopDist.SetModifyHdl( aLink );
|
|
aBottomDist.SetModifyHdl( aLink );
|
|
|
|
aAutoCB.SetClickHdl( LINK( this, SvxStdParagraphTabPage, AutoHdl_Impl ));
|
|
SfxItemPool* pPool = GetItemSet().GetPool();
|
|
DBG_ASSERT( pPool, "Wo ist der Pool" );
|
|
FieldUnit eUnit =
|
|
MapToFieldUnit( pPool->GetMetric( GetWhich( SID_ATTR_LRSPACE ) ) );
|
|
|
|
aTopDist.SetMax( aTopDist.Normalize( nAbst ), eUnit );
|
|
aBottomDist.SetMax( aBottomDist.Normalize( nAbst ), eUnit );
|
|
aLineDistAtMetricBox.SetMax(
|
|
aLineDistAtMetricBox.Normalize( nAbst ), eUnit );
|
|
}
|
|
|
|
// -----------------------------------------------------------------------
|
|
|
|
void SvxStdParagraphTabPage::UpdateExample_Impl( sal_Bool bAll )
|
|
{
|
|
aExampleWin.SetFirstLineOfst(
|
|
(short)aFLineIndent.Denormalize( aFLineIndent.GetValue( FUNIT_TWIP ) ) );
|
|
aExampleWin.SetLeftMargin(
|
|
static_cast<long>(aLeftIndent.Denormalize( aLeftIndent.GetValue( FUNIT_TWIP ) ) ) );
|
|
aExampleWin.SetRightMargin(
|
|
static_cast<long>(aRightIndent.Denormalize( aRightIndent.GetValue( FUNIT_TWIP ) ) ) );
|
|
aExampleWin.SetUpper(
|
|
(sal_uInt16)aTopDist.Denormalize( aTopDist.GetValue( FUNIT_TWIP ) ) );
|
|
aExampleWin.SetLower(
|
|
(sal_uInt16)aBottomDist.Denormalize( aBottomDist.GetValue( FUNIT_TWIP ) ) );
|
|
|
|
|
|
|
|
sal_uInt16 nPos = aLineDist.GetSelectEntryPos();
|
|
|
|
switch ( nPos )
|
|
{
|
|
case LLINESPACE_1:
|
|
case LLINESPACE_15:
|
|
case LLINESPACE_2:
|
|
aExampleWin.SetLineSpace( (SvxPrevLineSpace)nPos );
|
|
break;
|
|
|
|
case LLINESPACE_PROP:
|
|
aExampleWin.SetLineSpace( (SvxPrevLineSpace)nPos,
|
|
(sal_uInt16)aLineDistAtPercentBox.Denormalize(
|
|
aLineDistAtPercentBox.GetValue() ) );
|
|
break;
|
|
|
|
case LLINESPACE_MIN:
|
|
case LLINESPACE_DURCH:
|
|
case LLINESPACE_FIX:
|
|
aExampleWin.SetLineSpace( (SvxPrevLineSpace)nPos,
|
|
(sal_uInt16)GetCoreValue( aLineDistAtMetricBox, SFX_MAPUNIT_TWIP ) );
|
|
break;
|
|
}
|
|
aExampleWin.Draw( bAll );
|
|
}
|
|
|
|
// -----------------------------------------------------------------------
|
|
|
|
void SvxStdParagraphTabPage::EnableRegisterMode()
|
|
{
|
|
aRegisterCB.Show();
|
|
aRegisterFL.Show();
|
|
}
|
|
|
|
void SvxStdParagraphTabPage::EnableContextualMode()
|
|
{
|
|
aContextualCB.Show();
|
|
}
|
|
|
|
IMPL_LINK( SvxStdParagraphTabPage, AutoHdl_Impl, CheckBox*, pBox )
|
|
{
|
|
sal_Bool bEnable = !pBox->IsChecked();
|
|
aFLineLabel .Enable(bEnable);
|
|
aFLineIndent.Enable(bEnable);
|
|
return 0;
|
|
}
|
|
|
|
void SvxStdParagraphTabPage::SetPageWidth( sal_uInt16 nPageWidth )
|
|
{
|
|
nWidth = nPageWidth;
|
|
}
|
|
|
|
|
|
void SvxStdParagraphTabPage::EnableAutoFirstLine()
|
|
{
|
|
aAutoCB.Show();
|
|
}
|
|
|
|
|
|
void SvxStdParagraphTabPage::EnableAbsLineDist(long nMinTwip)
|
|
{
|
|
aLineDist.InsertEntry(sAbsDist);
|
|
nMinFixDist = nMinTwip;
|
|
}
|
|
|
|
|
|
void SvxStdParagraphTabPage::PageCreated(SfxAllItemSet aSet)
|
|
{
|
|
|
|
/* different bit represent call to different method of SvxStdParagraphTabPage
|
|
0x0001 --->EnableRelativeMode()
|
|
0x0002 --->EnableRegisterMode()
|
|
0x0004 --->EnableAutoFirstLine()
|
|
0x0008 --->EnableNegativeMode()
|
|
0x0010 --->EnableContextualMode()
|
|
*/
|
|
SFX_ITEMSET_ARG (&aSet,pPageWidthItem,SfxUInt16Item,SID_SVXSTDPARAGRAPHTABPAGE_PAGEWIDTH,sal_False);
|
|
SFX_ITEMSET_ARG (&aSet,pFlagSetItem,SfxUInt32Item,SID_SVXSTDPARAGRAPHTABPAGE_FLAGSET,sal_False);
|
|
SFX_ITEMSET_ARG (&aSet,pLineDistItem,SfxUInt32Item,SID_SVXSTDPARAGRAPHTABPAGE_ABSLINEDIST,sal_False);
|
|
|
|
if (pPageWidthItem)
|
|
SetPageWidth(pPageWidthItem->GetValue());
|
|
|
|
if (pFlagSetItem )
|
|
if (( 0x0001 & pFlagSetItem->GetValue())== 0x0001 )
|
|
EnableRelativeMode();
|
|
|
|
if (pFlagSetItem)
|
|
if (( 0x0002 & pFlagSetItem->GetValue())== 0x0002 )
|
|
EnableRegisterMode();
|
|
|
|
if (pFlagSetItem)
|
|
if ( ( 0x0004 & pFlagSetItem->GetValue())== 0x0004 )
|
|
EnableAutoFirstLine();
|
|
|
|
if(pLineDistItem)
|
|
EnableAbsLineDist(pLineDistItem->GetValue());
|
|
|
|
if (pFlagSetItem)
|
|
if (( 0x0008 & pFlagSetItem->GetValue()) == 0x0008 )
|
|
EnableNegativeMode();
|
|
|
|
if (pFlagSetItem)
|
|
if (( 0x0010 & pFlagSetItem->GetValue()) == 0x0010 )
|
|
EnableContextualMode();
|
|
}
|
|
|
|
|
|
#define LASTLINEPOS_DEFAULT 0
|
|
#define LASTLINEPOS_LEFT 1
|
|
|
|
#define LASTLINECOUNT_OLD 3
|
|
#define LASTLINECOUNT_NEW 4
|
|
|
|
// class SvxParaAlignTabPage ------------------------------------------------
|
|
|
|
SvxParaAlignTabPage::SvxParaAlignTabPage( Window* pParent, const SfxItemSet& rSet )
|
|
: SfxTabPage(pParent, CUI_RES( RID_SVXPAGE_ALIGN_PARAGRAPH ),rSet),
|
|
aAlignFrm ( this, CUI_RES( FL_ALIGN ) ),
|
|
aLeft ( this, CUI_RES( BTN_LEFTALIGN ) ),
|
|
aRight ( this, CUI_RES( BTN_RIGHTALIGN ) ),
|
|
aCenter ( this, CUI_RES( BTN_CENTERALIGN ) ),
|
|
aJustify ( this, CUI_RES( BTN_JUSTIFYALIGN ) ),
|
|
aLastLineFT ( this, CUI_RES( FT_LASTLINE ) ),
|
|
aLastLineLB ( this, CUI_RES( LB_LASTLINE ) ),
|
|
aExpandCB ( this, CUI_RES( CB_EXPAND ) ),
|
|
aSnapToGridCB ( this, CUI_RES( CB_SNAP ) ),
|
|
aExampleWin ( this, CUI_RES( WN_EXAMPLE ) ),
|
|
|
|
aVertAlignFL ( this, CUI_RES( FL_VERTALIGN ) ),
|
|
aVertAlignFT ( this, CUI_RES( FT_VERTALIGN ) ),
|
|
aVertAlignLB ( this, CUI_RES( LB_VERTALIGN ) ),
|
|
|
|
aPropertiesFL ( this, CUI_RES( FL_PROPERTIES )),
|
|
aTextDirectionFT ( this, CUI_RES( FT_TEXTDIRECTION )),
|
|
aTextDirectionLB ( this, CUI_RES( LB_TEXTDIRECTION ))
|
|
{
|
|
SvtLanguageOptions aLangOptions;
|
|
sal_uInt16 nLastLinePos = LASTLINEPOS_DEFAULT;
|
|
|
|
if ( aLangOptions.IsAsianTypographyEnabled() )
|
|
{
|
|
String sLeft(CUI_RES(ST_LEFTALIGN_ASIAN));
|
|
aLeft.SetText(sLeft);
|
|
aRight.SetText(String(CUI_RES(ST_RIGHTALIGN_ASIAN)));
|
|
sLeft = MnemonicGenerator::EraseAllMnemonicChars( sLeft );
|
|
|
|
if ( aLastLineLB.GetEntryCount() == LASTLINECOUNT_OLD )
|
|
{
|
|
aLastLineLB.RemoveEntry( 0 );
|
|
aLastLineLB.InsertEntry( sLeft, 0 );
|
|
}
|
|
else
|
|
nLastLinePos = LASTLINEPOS_LEFT;
|
|
}
|
|
// remove "Default" or "Left" entry, depends on CJKOptions
|
|
if ( aLastLineLB.GetEntryCount() == LASTLINECOUNT_NEW )
|
|
aLastLineLB.RemoveEntry( nLastLinePos );
|
|
|
|
FreeResource();
|
|
Link aLink = LINK( this, SvxParaAlignTabPage, AlignHdl_Impl );
|
|
aLeft.SetClickHdl( aLink );
|
|
aRight.SetClickHdl( aLink );
|
|
aCenter.SetClickHdl( aLink );
|
|
aJustify.SetClickHdl( aLink );
|
|
aLastLineLB.SetSelectHdl( LINK( this, SvxParaAlignTabPage, LastLineHdl_Impl ) );
|
|
aTextDirectionLB.SetSelectHdl( LINK( this, SvxParaAlignTabPage, TextDirectionHdl_Impl ) );
|
|
|
|
sal_uInt16 nHtmlMode = GetHtmlMode_Impl(rSet);
|
|
if(!(nHtmlMode & HTMLMODE_ON) || (0 != (nHtmlMode & HTMLMODE_SOME_STYLES)) )
|
|
{
|
|
if( aLangOptions.IsCTLFontEnabled() )
|
|
{
|
|
aTextDirectionLB.InsertEntryValue( CUI_RESSTR( RID_SVXSTR_FRAMEDIR_LTR ), FRMDIR_HORI_LEFT_TOP );
|
|
aTextDirectionLB.InsertEntryValue( CUI_RESSTR( RID_SVXSTR_FRAMEDIR_RTL ), FRMDIR_HORI_RIGHT_TOP );
|
|
aTextDirectionLB.InsertEntryValue( CUI_RESSTR( RID_SVXSTR_FRAMEDIR_SUPER ), FRMDIR_ENVIRONMENT );
|
|
|
|
aPropertiesFL.Show();
|
|
aTextDirectionFT.Show();
|
|
aTextDirectionLB.Show();
|
|
}
|
|
}
|
|
|
|
aExampleWin.SetAccessibleName(String(CUI_RES(STR_EXAMPLE)));
|
|
|
|
}
|
|
|
|
SvxParaAlignTabPage::~SvxParaAlignTabPage()
|
|
{
|
|
}
|
|
|
|
int SvxParaAlignTabPage::DeactivatePage( SfxItemSet* _pSet )
|
|
{
|
|
if ( _pSet )
|
|
FillItemSet( *_pSet );
|
|
return LEAVE_PAGE;
|
|
}
|
|
|
|
SfxTabPage* SvxParaAlignTabPage::Create( Window* pParent, const SfxItemSet& rSet )
|
|
{
|
|
return new SvxParaAlignTabPage(pParent, rSet);
|
|
}
|
|
|
|
sal_uInt16* SvxParaAlignTabPage::GetRanges()
|
|
{
|
|
return pAlignRanges;
|
|
|
|
}
|
|
|
|
sal_Bool SvxParaAlignTabPage::FillItemSet( SfxItemSet& rOutSet )
|
|
{
|
|
sal_Bool bModified = sal_False;
|
|
|
|
bool bAdj = false, bChecked = false;
|
|
SvxAdjust eAdjust = SVX_ADJUST_LEFT;
|
|
|
|
if ( aLeft.IsChecked() )
|
|
{
|
|
eAdjust = SVX_ADJUST_LEFT;
|
|
bAdj = !aLeft.GetSavedValue();
|
|
bChecked = true;
|
|
}
|
|
else if ( aRight.IsChecked() )
|
|
{
|
|
eAdjust = SVX_ADJUST_RIGHT;
|
|
bAdj = !aRight.GetSavedValue();
|
|
bChecked = true;
|
|
}
|
|
else if ( aCenter.IsChecked() )
|
|
{
|
|
eAdjust = SVX_ADJUST_CENTER;
|
|
bAdj = !aCenter.GetSavedValue();
|
|
bChecked = true;
|
|
}
|
|
else if ( aJustify.IsChecked() )
|
|
{
|
|
eAdjust = SVX_ADJUST_BLOCK;
|
|
bAdj = !aJustify.GetSavedValue() ||
|
|
aExpandCB.IsChecked() != aExpandCB.GetSavedValue() ||
|
|
aLastLineLB.GetSelectEntryPos() != aLastLineLB.GetSavedValue();
|
|
bChecked = true;
|
|
}
|
|
sal_uInt16 _nWhich = GetWhich( SID_ATTR_PARA_ADJUST );
|
|
|
|
if ( bAdj )
|
|
{
|
|
const SvxAdjustItem* pOld =
|
|
(const SvxAdjustItem*)GetOldItem( rOutSet, SID_ATTR_PARA_ADJUST );
|
|
SvxAdjust eOneWord = aExpandCB.IsChecked() ? SVX_ADJUST_BLOCK
|
|
: SVX_ADJUST_LEFT;
|
|
sal_uInt16 nLBPos = aLastLineLB.GetSelectEntryPos();
|
|
SvxAdjust eLastBlock = SVX_ADJUST_LEFT;
|
|
|
|
if ( 1 == nLBPos )
|
|
eLastBlock = SVX_ADJUST_CENTER;
|
|
else if ( 2 == nLBPos )
|
|
eLastBlock = SVX_ADJUST_BLOCK;
|
|
|
|
bool bNothingWasChecked =
|
|
!aLeft.GetSavedValue() && !aRight.GetSavedValue() &&
|
|
!aCenter.GetSavedValue() && !aJustify.GetSavedValue();
|
|
|
|
if ( !pOld || pOld->GetAdjust() != eAdjust ||
|
|
pOld->GetOneWord() != eOneWord ||
|
|
pOld->GetLastBlock() != eLastBlock ||
|
|
( bChecked && bNothingWasChecked ) )
|
|
{
|
|
bModified = sal_True;
|
|
SvxAdjustItem aAdj(
|
|
(const SvxAdjustItem&)GetItemSet().Get( _nWhich ) );
|
|
aAdj.SetAdjust( eAdjust );
|
|
aAdj.SetOneWord( eOneWord );
|
|
aAdj.SetLastBlock( eLastBlock );
|
|
rOutSet.Put( aAdj );
|
|
}
|
|
}
|
|
if(aSnapToGridCB.IsChecked() != aSnapToGridCB.GetSavedValue())
|
|
{
|
|
rOutSet.Put(SvxParaGridItem(aSnapToGridCB.IsChecked(), GetWhich( SID_ATTR_PARA_SNAPTOGRID )));
|
|
bModified = sal_True;
|
|
}
|
|
if(aVertAlignLB.GetSavedValue() != aVertAlignLB.GetSelectEntryPos())
|
|
{
|
|
rOutSet.Put(SvxParaVertAlignItem(aVertAlignLB.GetSelectEntryPos(), GetWhich( SID_PARA_VERTALIGN )));
|
|
bModified = sal_True;
|
|
}
|
|
|
|
if( aTextDirectionLB.IsVisible() )
|
|
{
|
|
SvxFrameDirection eDir = aTextDirectionLB.GetSelectEntryValue();
|
|
if( eDir != aTextDirectionLB.GetSavedValue() )
|
|
{
|
|
rOutSet.Put( SvxFrameDirectionItem( eDir, GetWhich( SID_ATTR_FRAMEDIRECTION ) ) );
|
|
bModified = sal_True;
|
|
}
|
|
}
|
|
|
|
return bModified;
|
|
}
|
|
|
|
void SvxParaAlignTabPage::Reset( const SfxItemSet& rSet )
|
|
{
|
|
sal_uInt16 _nWhich = GetWhich( SID_ATTR_PARA_ADJUST );
|
|
SfxItemState eItemState = rSet.GetItemState( _nWhich );
|
|
|
|
sal_uInt16 nLBSelect = 0;
|
|
if ( eItemState >= SFX_ITEM_AVAILABLE )
|
|
{
|
|
const SvxAdjustItem& rAdj = (const SvxAdjustItem&)rSet.Get( _nWhich );
|
|
|
|
switch ( rAdj.GetAdjust() /*!!! VB fragen rAdj.GetLastBlock()*/ )
|
|
{
|
|
case SVX_ADJUST_LEFT: aLeft.Check(); break;
|
|
|
|
case SVX_ADJUST_RIGHT: aRight.Check(); break;
|
|
|
|
case SVX_ADJUST_CENTER: aCenter.Check(); break;
|
|
|
|
case SVX_ADJUST_BLOCK: aJustify.Check(); break;
|
|
default: ; //prevent warning
|
|
}
|
|
sal_Bool bEnable = aJustify.IsChecked();
|
|
aLastLineFT.Enable(bEnable);
|
|
aLastLineLB.Enable(bEnable);
|
|
aExpandCB .Enable(bEnable);
|
|
|
|
aExpandCB.Check(SVX_ADJUST_BLOCK == rAdj.GetOneWord());
|
|
switch(rAdj.GetLastBlock())
|
|
{
|
|
case SVX_ADJUST_LEFT: nLBSelect = 0; break;
|
|
|
|
case SVX_ADJUST_CENTER: nLBSelect = 1; break;
|
|
|
|
case SVX_ADJUST_BLOCK: nLBSelect = 2; break;
|
|
default: ; //prevent warning
|
|
}
|
|
}
|
|
else
|
|
{
|
|
aLeft.Check( sal_False );
|
|
aRight.Check( sal_False );
|
|
aCenter.Check( sal_False );
|
|
aJustify.Check( sal_False );
|
|
}
|
|
aLastLineLB.SelectEntryPos(nLBSelect);
|
|
|
|
sal_uInt16 nHtmlMode = GetHtmlMode_Impl(rSet);
|
|
if(nHtmlMode & HTMLMODE_ON)
|
|
{
|
|
aLastLineLB.Hide();
|
|
aLastLineFT.Hide();
|
|
aExpandCB.Hide();
|
|
if(!(nHtmlMode & HTMLMODE_FULL_STYLES) )
|
|
aJustify.Disable();
|
|
aSnapToGridCB.Show(sal_False);
|
|
}
|
|
_nWhich = GetWhich(SID_ATTR_PARA_SNAPTOGRID);
|
|
eItemState = rSet.GetItemState( _nWhich );
|
|
if ( eItemState >= SFX_ITEM_AVAILABLE )
|
|
{
|
|
const SvxParaGridItem& rSnap = (const SvxParaGridItem&)rSet.Get( _nWhich );
|
|
aSnapToGridCB.Check(rSnap.GetValue());
|
|
}
|
|
|
|
_nWhich = GetWhich( SID_PARA_VERTALIGN );
|
|
eItemState = rSet.GetItemState( _nWhich );
|
|
|
|
if ( eItemState >= SFX_ITEM_AVAILABLE )
|
|
{
|
|
aVertAlignLB.Show();
|
|
aVertAlignFL.Show();
|
|
aVertAlignFT.Show();
|
|
|
|
const SvxParaVertAlignItem& rAlign = (const SvxParaVertAlignItem&)rSet.Get( _nWhich );
|
|
aVertAlignLB.SelectEntryPos(rAlign.GetValue());
|
|
}
|
|
|
|
_nWhich = GetWhich( SID_ATTR_FRAMEDIRECTION );
|
|
//text direction
|
|
if( SFX_ITEM_AVAILABLE <= rSet.GetItemState( _nWhich ) )
|
|
{
|
|
const SvxFrameDirectionItem& rFrameDirItem = ( const SvxFrameDirectionItem& ) rSet.Get( _nWhich );
|
|
aTextDirectionLB.SelectEntryValue( (SvxFrameDirection)rFrameDirItem.GetValue() );
|
|
aTextDirectionLB.SaveValue();
|
|
}
|
|
|
|
aSnapToGridCB.SaveValue();
|
|
aVertAlignLB.SaveValue();
|
|
aLeft.SaveValue();
|
|
aRight.SaveValue();
|
|
aCenter.SaveValue();
|
|
aJustify.SaveValue();
|
|
aLastLineLB.SaveValue();
|
|
aExpandCB.SaveValue();
|
|
|
|
UpdateExample_Impl(sal_True);
|
|
}
|
|
|
|
IMPL_LINK_NOARG(SvxParaAlignTabPage, AlignHdl_Impl)
|
|
{
|
|
sal_Bool bJustify = aJustify.IsChecked();
|
|
aLastLineFT.Enable(bJustify);
|
|
aLastLineLB.Enable(bJustify);
|
|
aExpandCB.Enable(bJustify);
|
|
UpdateExample_Impl(sal_False);
|
|
return 0;
|
|
}
|
|
|
|
IMPL_LINK_NOARG(SvxParaAlignTabPage, LastLineHdl_Impl)
|
|
{
|
|
UpdateExample_Impl(sal_False);
|
|
return 0;
|
|
}
|
|
|
|
IMPL_LINK_NOARG(SvxParaAlignTabPage, TextDirectionHdl_Impl)
|
|
{
|
|
SvxFrameDirection eDir = aTextDirectionLB.GetSelectEntryValue();
|
|
switch ( eDir )
|
|
{
|
|
// check the default alignment for this text direction
|
|
case FRMDIR_HORI_LEFT_TOP : aLeft.Check( sal_True ); break;
|
|
case FRMDIR_HORI_RIGHT_TOP : aRight.Check( sal_True ); break;
|
|
case FRMDIR_ENVIRONMENT : /* do nothing */ break;
|
|
default:
|
|
{
|
|
SAL_WARN( "cui.tabpages", "SvxParaAlignTabPage::TextDirectionHdl_Impl(): other directions not supported" );
|
|
}
|
|
}
|
|
|
|
return 0;
|
|
}
|
|
|
|
void SvxParaAlignTabPage::UpdateExample_Impl( sal_Bool bAll )
|
|
{
|
|
if ( aLeft.IsChecked() )
|
|
aExampleWin.SetAdjust( SVX_ADJUST_LEFT );
|
|
else if ( aRight.IsChecked() )
|
|
aExampleWin.SetAdjust( SVX_ADJUST_RIGHT );
|
|
else if ( aCenter.IsChecked() )
|
|
aExampleWin.SetAdjust( SVX_ADJUST_CENTER );
|
|
else if ( aJustify.IsChecked() )
|
|
{
|
|
aExampleWin.SetAdjust( SVX_ADJUST_BLOCK );
|
|
SvxAdjust eLastBlock = SVX_ADJUST_LEFT;
|
|
sal_uInt16 nLBPos = aLastLineLB.GetSelectEntryPos();
|
|
if(nLBPos == 1)
|
|
eLastBlock = SVX_ADJUST_CENTER;
|
|
else if(nLBPos == 2)
|
|
eLastBlock = SVX_ADJUST_BLOCK;
|
|
aExampleWin.SetLastLine( eLastBlock );
|
|
}
|
|
|
|
aExampleWin.Draw( bAll );
|
|
}
|
|
|
|
// Erweiterungen fuer den Blocksatz einschalten
|
|
void SvxParaAlignTabPage::EnableJustifyExt()
|
|
{
|
|
aLastLineFT.Show();
|
|
aLastLineLB.Show();
|
|
aExpandCB .Show();
|
|
SvtLanguageOptions aCJKOptions;
|
|
if(aCJKOptions.IsAsianTypographyEnabled())
|
|
aSnapToGridCB.Show();
|
|
|
|
}
|
|
|
|
void SvxParaAlignTabPage::PageCreated (SfxAllItemSet aSet)
|
|
{
|
|
SFX_ITEMSET_ARG (&aSet,pBoolItem,SfxBoolItem,SID_SVXPARAALIGNTABPAGE_ENABLEJUSTIFYEXT,sal_False);
|
|
if (pBoolItem)
|
|
if(pBoolItem->GetValue())
|
|
EnableJustifyExt();
|
|
}
|
|
|
|
SfxTabPage* SvxExtParagraphTabPage::Create( Window* pParent,
|
|
const SfxItemSet& rSet )
|
|
{
|
|
return new SvxExtParagraphTabPage( pParent, rSet );
|
|
}
|
|
|
|
// -----------------------------------------------------------------------
|
|
|
|
sal_Bool SvxExtParagraphTabPage::FillItemSet( SfxItemSet& rOutSet )
|
|
{
|
|
sal_Bool bModified = sal_False;
|
|
sal_uInt16 _nWhich = GetWhich( SID_ATTR_PARA_HYPHENZONE );
|
|
const TriState eHyphenState = aHyphenBox.GetState();
|
|
const SfxPoolItem* pOld = GetOldItem( rOutSet, SID_ATTR_PARA_HYPHENZONE );
|
|
|
|
if ( eHyphenState != aHyphenBox.GetSavedValue() ||
|
|
aExtHyphenBeforeBox.IsValueModified() ||
|
|
aExtHyphenAfterBox.IsValueModified() ||
|
|
aMaxHyphenEdit.IsValueModified() )
|
|
{
|
|
SvxHyphenZoneItem aHyphen(
|
|
(const SvxHyphenZoneItem&)GetItemSet().Get( _nWhich ) );
|
|
aHyphen.SetHyphen( eHyphenState == STATE_CHECK );
|
|
|
|
if ( eHyphenState == STATE_CHECK )
|
|
{
|
|
aHyphen.GetMinLead() = (sal_uInt8)aExtHyphenBeforeBox.GetValue();
|
|
aHyphen.GetMinTrail() = (sal_uInt8)aExtHyphenAfterBox.GetValue();
|
|
}
|
|
aHyphen.GetMaxHyphens() = (sal_uInt8)aMaxHyphenEdit.GetValue();
|
|
|
|
if ( !pOld ||
|
|
!( *(SvxHyphenZoneItem*)pOld == aHyphen ) ||
|
|
eHyphenState != aHyphenBox.GetSavedValue())
|
|
{
|
|
rOutSet.Put( aHyphen );
|
|
bModified = sal_True;
|
|
}
|
|
}
|
|
|
|
if (aPagenumEdit.IsEnabled() && aPagenumEdit.IsValueModified())
|
|
{
|
|
SfxUInt16Item aPageNum( SID_ATTR_PARA_PAGENUM,
|
|
(sal_uInt16)aPagenumEdit.GetValue() );
|
|
|
|
pOld = GetOldItem( rOutSet, SID_ATTR_PARA_PAGENUM );
|
|
|
|
if ( !pOld || ( (const SfxUInt16Item*)pOld )->GetValue() != aPageNum.GetValue() )
|
|
{
|
|
rOutSet.Put( aPageNum );
|
|
bModified = sal_True;
|
|
}
|
|
}
|
|
|
|
// Seitenumbruch
|
|
|
|
TriState eState = aApplyCollBtn.GetState();
|
|
bool bIsPageModel = false;
|
|
|
|
_nWhich = GetWhich( SID_ATTR_PARA_MODEL );
|
|
String sPage;
|
|
if ( eState != aApplyCollBtn.GetSavedValue() ||
|
|
( STATE_CHECK == eState &&
|
|
aApplyCollBox.GetSelectEntryPos() != aApplyCollBox.GetSavedValue() ) )
|
|
{
|
|
if ( eState == STATE_CHECK )
|
|
{
|
|
sPage = aApplyCollBox.GetSelectEntry();
|
|
bIsPageModel = 0 != sPage.Len();
|
|
}
|
|
pOld = GetOldItem( rOutSet, SID_ATTR_PARA_MODEL );
|
|
|
|
if ( !pOld || ( (const SvxPageModelItem*)pOld )->GetValue() != sPage )
|
|
{
|
|
rOutSet.Put( SvxPageModelItem( sPage, sal_False, _nWhich ) );
|
|
bModified = sal_True;
|
|
}
|
|
else
|
|
bIsPageModel = false;
|
|
}
|
|
else if(STATE_CHECK == eState && aApplyCollBtn.IsEnabled())
|
|
bIsPageModel = true;
|
|
else
|
|
rOutSet.Put( SvxPageModelItem( sPage, sal_False, _nWhich ) );
|
|
|
|
_nWhich = GetWhich( SID_ATTR_PARA_PAGEBREAK );
|
|
|
|
if ( bIsPageModel )
|
|
// wird PageModel eingeschaltet, dann immer PageBreak ausschalten
|
|
rOutSet.Put( SvxFmtBreakItem( SVX_BREAK_NONE, _nWhich ) );
|
|
else
|
|
{
|
|
eState = aPageBreakBox.GetState();
|
|
SfxItemState eModelState = GetItemSet().GetItemState(SID_ATTR_PARA_MODEL, sal_False);
|
|
|
|
if ( (eModelState == SFX_ITEM_SET && STATE_CHECK == aPageBreakBox.GetState()) ||
|
|
eState != aPageBreakBox.GetSavedValue() ||
|
|
aBreakTypeLB.GetSelectEntryPos() != aBreakTypeLB.GetSavedValue() ||
|
|
aBreakPositionLB.GetSelectEntryPos() != aBreakPositionLB.GetSavedValue() )
|
|
{
|
|
const SvxFmtBreakItem rOldBreak(
|
|
(const SvxFmtBreakItem&)GetItemSet().Get( _nWhich ));
|
|
SvxFmtBreakItem aBreak(rOldBreak.GetBreak(), rOldBreak.Which());
|
|
|
|
switch ( eState )
|
|
{
|
|
case STATE_CHECK:
|
|
{
|
|
sal_Bool bBefore = aBreakPositionLB.GetSelectEntryPos() == 0;
|
|
|
|
if ( aBreakTypeLB.GetSelectEntryPos() == 0 )
|
|
{
|
|
if ( bBefore )
|
|
aBreak.SetValue( SVX_BREAK_PAGE_BEFORE );
|
|
else
|
|
aBreak.SetValue( SVX_BREAK_PAGE_AFTER );
|
|
}
|
|
else
|
|
{
|
|
if ( bBefore )
|
|
aBreak.SetValue( SVX_BREAK_COLUMN_BEFORE );
|
|
else
|
|
aBreak.SetValue( SVX_BREAK_COLUMN_AFTER );
|
|
}
|
|
break;
|
|
}
|
|
|
|
case STATE_NOCHECK:
|
|
aBreak.SetValue( SVX_BREAK_NONE );
|
|
break;
|
|
default: ; //prevent warning
|
|
}
|
|
pOld = GetOldItem( rOutSet, SID_ATTR_PARA_PAGEBREAK );
|
|
|
|
if ( eState != aPageBreakBox.GetSavedValue() ||
|
|
!pOld || !( *(const SvxFmtBreakItem*)pOld == aBreak ) )
|
|
{
|
|
bModified = sal_True;
|
|
rOutSet.Put( aBreak );
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
// Absatztrennung
|
|
_nWhich = GetWhich( SID_ATTR_PARA_SPLIT );
|
|
eState = aKeepTogetherBox.GetState();
|
|
|
|
if ( eState != aKeepTogetherBox.GetSavedValue() )
|
|
{
|
|
pOld = GetOldItem( rOutSet, SID_ATTR_PARA_SPLIT );
|
|
|
|
if ( !pOld || ( (const SvxFmtSplitItem*)pOld )->GetValue() !=
|
|
( eState == STATE_NOCHECK ) )
|
|
{
|
|
rOutSet.Put( SvxFmtSplitItem( eState == STATE_NOCHECK, _nWhich ) );
|
|
bModified = sal_True;
|
|
}
|
|
}
|
|
|
|
// Absaetze zusammenhalten
|
|
_nWhich = GetWhich( SID_ATTR_PARA_KEEP );
|
|
eState = aKeepParaBox.GetState();
|
|
|
|
if ( eState != aKeepParaBox.GetSavedValue() )
|
|
{
|
|
pOld = GetOldItem( rOutSet, SID_ATTR_PARA_KEEP );
|
|
|
|
// hat sich der Status geaendert, muss immer geputtet werden
|
|
rOutSet.Put( SvxFmtKeepItem( eState == STATE_CHECK, _nWhich ) );
|
|
bModified = sal_True;
|
|
}
|
|
|
|
// Witwen und Waisen
|
|
_nWhich = GetWhich( SID_ATTR_PARA_WIDOWS );
|
|
eState = aWidowBox.GetState();
|
|
|
|
if ( eState != aWidowBox.GetSavedValue() ||
|
|
aWidowRowNo.IsValueModified() )
|
|
{
|
|
SvxWidowsItem rItem( eState == STATE_CHECK ?
|
|
(sal_uInt8)aWidowRowNo.GetValue() : 0, _nWhich );
|
|
pOld = GetOldItem( rOutSet, SID_ATTR_PARA_WIDOWS );
|
|
|
|
if ( eState != aWidowBox.GetSavedValue() || !pOld || !( *(const SvxWidowsItem*)pOld == rItem ) )
|
|
{
|
|
rOutSet.Put( rItem );
|
|
bModified = sal_True;
|
|
}
|
|
}
|
|
|
|
_nWhich = GetWhich( SID_ATTR_PARA_ORPHANS );
|
|
eState = aOrphanBox.GetState();
|
|
|
|
if ( eState != aOrphanBox.GetSavedValue() ||
|
|
aOrphanRowNo.IsValueModified() )
|
|
{
|
|
SvxOrphansItem rItem( eState == STATE_CHECK ?
|
|
(sal_uInt8)aOrphanRowNo.GetValue() : 0, _nWhich );
|
|
pOld = GetOldItem( rOutSet, SID_ATTR_PARA_ORPHANS );
|
|
|
|
if ( eState != aOrphanBox.GetSavedValue() ||
|
|
!pOld ||
|
|
!( *(const SvxOrphansItem*)pOld == rItem ) )
|
|
{
|
|
rOutSet.Put( rItem );
|
|
bModified = sal_True;
|
|
}
|
|
}
|
|
|
|
return bModified;
|
|
}
|
|
|
|
// -----------------------------------------------------------------------
|
|
|
|
void SvxExtParagraphTabPage::Reset( const SfxItemSet& rSet )
|
|
{
|
|
sal_uInt16 _nWhich = GetWhich( SID_ATTR_PARA_HYPHENZONE );
|
|
SfxItemState eItemState = rSet.GetItemState( _nWhich );
|
|
|
|
sal_Bool bItemAvailable = eItemState >= SFX_ITEM_AVAILABLE;
|
|
sal_Bool bIsHyphen = sal_False;
|
|
if( !bHtmlMode && bItemAvailable )
|
|
{
|
|
const SvxHyphenZoneItem& rHyphen =
|
|
(const SvxHyphenZoneItem&)rSet.Get( _nWhich );
|
|
aHyphenBox.EnableTriState( sal_False );
|
|
|
|
bIsHyphen = rHyphen.IsHyphen();
|
|
aHyphenBox.SetState( bIsHyphen ? STATE_CHECK : STATE_NOCHECK );
|
|
|
|
aExtHyphenBeforeBox.SetValue( rHyphen.GetMinLead() );
|
|
aExtHyphenAfterBox.SetValue( rHyphen.GetMinTrail() );
|
|
aMaxHyphenEdit.SetValue( rHyphen.GetMaxHyphens() );
|
|
}
|
|
else
|
|
{
|
|
aHyphenBox.SetState( STATE_DONTKNOW );
|
|
}
|
|
sal_Bool bEnable = bItemAvailable && bIsHyphen;
|
|
aExtHyphenBeforeBox.Enable(bEnable);
|
|
aExtHyphenAfterBox.Enable(bEnable);
|
|
aBeforeText.Enable(bEnable);
|
|
aAfterText.Enable(bEnable);
|
|
aMaxHyphenLabel.Enable(bEnable);
|
|
aMaxHyphenEdit.Enable(bEnable);
|
|
|
|
_nWhich = GetWhich( SID_ATTR_PARA_PAGENUM );
|
|
|
|
if ( rSet.GetItemState(_nWhich) >= SFX_ITEM_AVAILABLE )
|
|
{
|
|
const sal_uInt16 nPageNum =
|
|
( (const SfxUInt16Item&)rSet.Get( _nWhich ) ).GetValue();
|
|
aPagenumEdit.SetValue( nPageNum );
|
|
}
|
|
|
|
if ( bPageBreak )
|
|
{
|
|
// zuerst PageModel behandeln
|
|
_nWhich = GetWhich( SID_ATTR_PARA_MODEL );
|
|
sal_Bool bIsPageModel = sal_False;
|
|
eItemState = rSet.GetItemState( _nWhich );
|
|
|
|
if ( eItemState >= SFX_ITEM_SET )
|
|
{
|
|
aApplyCollBtn.EnableTriState( sal_False );
|
|
|
|
const SvxPageModelItem& rModel =
|
|
(const SvxPageModelItem&)rSet.Get( _nWhich );
|
|
String aStr( rModel.GetValue() );
|
|
|
|
if ( aStr.Len() &&
|
|
aApplyCollBox.GetEntryPos( aStr ) != LISTBOX_ENTRY_NOTFOUND )
|
|
{
|
|
aApplyCollBox.SelectEntry( aStr );
|
|
aApplyCollBtn.SetState( STATE_CHECK );
|
|
bIsPageModel = sal_True;
|
|
|
|
aPageBreakBox.Enable();
|
|
aPageBreakBox.EnableTriState( sal_False );
|
|
aBreakTypeFT.Enable();
|
|
aBreakTypeLB.Enable();
|
|
aBreakPositionFT.Enable();
|
|
aBreakPositionLB.Enable();
|
|
aApplyCollBtn.Enable();
|
|
aPageBreakBox.SetState( STATE_CHECK );
|
|
|
|
//select page break
|
|
aBreakTypeLB.SelectEntryPos(0);
|
|
//select break before
|
|
aBreakPositionLB.SelectEntryPos(0);
|
|
}
|
|
else
|
|
{
|
|
aApplyCollBox.SetNoSelection();
|
|
aApplyCollBtn.SetState( STATE_NOCHECK );
|
|
}
|
|
}
|
|
else if ( SFX_ITEM_DONTCARE == eItemState )
|
|
{
|
|
aApplyCollBtn.EnableTriState( sal_True );
|
|
aApplyCollBtn.SetState( STATE_DONTKNOW );
|
|
aApplyCollBox.SetNoSelection();
|
|
}
|
|
else
|
|
{
|
|
aApplyCollBtn.Enable(sal_False);
|
|
aApplyCollBox.Enable(sal_False);
|
|
aPagenumEdit.Enable(sal_False);
|
|
aPagenumText.Enable(sal_False);
|
|
}
|
|
|
|
if ( !bIsPageModel )
|
|
{
|
|
_nWhich = GetWhich( SID_ATTR_PARA_PAGEBREAK );
|
|
eItemState = rSet.GetItemState( _nWhich );
|
|
|
|
if ( eItemState >= SFX_ITEM_AVAILABLE )
|
|
{
|
|
const SvxFmtBreakItem& rPageBreak =
|
|
(const SvxFmtBreakItem&)rSet.Get( _nWhich );
|
|
|
|
SvxBreak eBreak = (SvxBreak)rPageBreak.GetValue();
|
|
|
|
// PageBreak nicht ueber CTRL-RETURN,
|
|
// dann kann CheckBox frei gegeben werden
|
|
aPageBreakBox.Enable();
|
|
aPageBreakBox.EnableTriState( sal_False );
|
|
aBreakTypeFT.Enable();
|
|
aBreakTypeLB.Enable();
|
|
aBreakPositionFT.Enable();
|
|
aBreakPositionLB.Enable();
|
|
|
|
aPageBreakBox.SetState( STATE_CHECK );
|
|
|
|
sal_Bool _bEnable = eBreak != SVX_BREAK_NONE &&
|
|
eBreak != SVX_BREAK_COLUMN_BEFORE &&
|
|
eBreak != SVX_BREAK_COLUMN_AFTER;
|
|
aApplyCollBtn.Enable(_bEnable);
|
|
if(!_bEnable)
|
|
{
|
|
aApplyCollBox.Enable(_bEnable);
|
|
aPagenumEdit.Enable(_bEnable);
|
|
}
|
|
|
|
if ( eBreak == SVX_BREAK_NONE )
|
|
aPageBreakBox.SetState( STATE_NOCHECK );
|
|
|
|
sal_uInt16 nType = 0; // selection position in break type ListBox : Page
|
|
sal_uInt16 nPosition = 0; // selection position in break position ListBox : Before
|
|
switch ( eBreak )
|
|
{
|
|
case SVX_BREAK_PAGE_BEFORE:
|
|
break;
|
|
case SVX_BREAK_PAGE_AFTER:
|
|
nPosition = 1;
|
|
break;
|
|
case SVX_BREAK_COLUMN_BEFORE:
|
|
nType = 1;
|
|
break;
|
|
case SVX_BREAK_COLUMN_AFTER:
|
|
nType = 1;
|
|
nPosition = 1;
|
|
break;
|
|
default: ;//prevent warning
|
|
}
|
|
aBreakTypeLB.SelectEntryPos(nType);
|
|
aBreakPositionLB.SelectEntryPos(nPosition);
|
|
}
|
|
else if ( SFX_ITEM_DONTCARE == eItemState )
|
|
aPageBreakBox.SetState( STATE_DONTKNOW );
|
|
else
|
|
{
|
|
aPageBreakBox.Enable(sal_False);
|
|
aBreakTypeFT.Enable(sal_False);
|
|
aBreakTypeLB.Enable(sal_False);
|
|
aBreakPositionFT.Enable(sal_False);
|
|
aBreakPositionLB.Enable(sal_False);
|
|
}
|
|
}
|
|
|
|
PageBreakPosHdl_Impl( &aBreakPositionLB );
|
|
PageBreakHdl_Impl( &aPageBreakBox );
|
|
}
|
|
|
|
_nWhich = GetWhich( SID_ATTR_PARA_KEEP );
|
|
eItemState = rSet.GetItemState( _nWhich );
|
|
|
|
if ( eItemState >= SFX_ITEM_AVAILABLE )
|
|
{
|
|
aKeepParaBox.EnableTriState( sal_False );
|
|
const SvxFmtKeepItem& rKeep =
|
|
(const SvxFmtKeepItem&)rSet.Get( _nWhich );
|
|
|
|
if ( rKeep.GetValue() )
|
|
aKeepParaBox.SetState( STATE_CHECK );
|
|
else
|
|
aKeepParaBox.SetState( STATE_NOCHECK );
|
|
}
|
|
else if ( SFX_ITEM_DONTCARE == eItemState )
|
|
aKeepParaBox.SetState( STATE_DONTKNOW );
|
|
else
|
|
aKeepParaBox.Enable(sal_False);
|
|
|
|
_nWhich = GetWhich( SID_ATTR_PARA_SPLIT );
|
|
eItemState = rSet.GetItemState( _nWhich );
|
|
|
|
if ( eItemState >= SFX_ITEM_AVAILABLE )
|
|
{
|
|
const SvxFmtSplitItem& rSplit =
|
|
(const SvxFmtSplitItem&)rSet.Get( _nWhich );
|
|
aKeepTogetherBox.EnableTriState( sal_False );
|
|
|
|
if ( !rSplit.GetValue() )
|
|
aKeepTogetherBox.SetState( STATE_CHECK );
|
|
else
|
|
{
|
|
aKeepTogetherBox.SetState( STATE_NOCHECK );
|
|
|
|
// Witwen und Waisen
|
|
aWidowBox.Enable();
|
|
_nWhich = GetWhich( SID_ATTR_PARA_WIDOWS );
|
|
SfxItemState eTmpState = rSet.GetItemState( _nWhich );
|
|
|
|
if ( eTmpState >= SFX_ITEM_AVAILABLE )
|
|
{
|
|
const SvxWidowsItem& rWidow =
|
|
(const SvxWidowsItem&)rSet.Get( _nWhich );
|
|
aWidowBox.EnableTriState( sal_False );
|
|
const sal_uInt16 nLines = rWidow.GetValue();
|
|
|
|
sal_Bool _bEnable = nLines > 0;
|
|
aWidowRowNo.SetValue( aWidowRowNo.Normalize( nLines ) );
|
|
aWidowBox.SetState( _bEnable ? STATE_CHECK : STATE_NOCHECK);
|
|
aWidowRowNo.Enable(_bEnable);
|
|
aWidowRowLabel.Enable(_bEnable);
|
|
|
|
}
|
|
else if ( SFX_ITEM_DONTCARE == eTmpState )
|
|
aWidowBox.SetState( STATE_DONTKNOW );
|
|
else
|
|
aWidowBox.Enable(sal_False);
|
|
|
|
aOrphanBox.Enable();
|
|
_nWhich = GetWhich( SID_ATTR_PARA_ORPHANS );
|
|
eTmpState = rSet.GetItemState( _nWhich );
|
|
|
|
if ( eTmpState >= SFX_ITEM_AVAILABLE )
|
|
{
|
|
const SvxOrphansItem& rOrphan =
|
|
(const SvxOrphansItem&)rSet.Get( _nWhich );
|
|
const sal_uInt16 nLines = rOrphan.GetValue();
|
|
aOrphanBox.EnableTriState( sal_False );
|
|
|
|
sal_Bool _bEnable = nLines > 0;
|
|
aOrphanBox.SetState( _bEnable ? STATE_CHECK : STATE_NOCHECK);
|
|
aOrphanRowNo.SetValue( aOrphanRowNo.Normalize( nLines ) );
|
|
aOrphanRowNo.Enable(_bEnable);
|
|
aOrphanRowLabel.Enable(_bEnable);
|
|
|
|
}
|
|
else if ( SFX_ITEM_DONTCARE == eTmpState )
|
|
aOrphanBox.SetState( STATE_DONTKNOW );
|
|
else
|
|
aOrphanBox.Enable(sal_False);
|
|
}
|
|
}
|
|
else if ( SFX_ITEM_DONTCARE == eItemState )
|
|
aKeepTogetherBox.SetState( STATE_DONTKNOW );
|
|
else
|
|
aKeepTogetherBox.Enable(sal_False);
|
|
|
|
// damit alles richt enabled wird
|
|
KeepTogetherHdl_Impl( 0 );
|
|
WidowHdl_Impl( 0 );
|
|
OrphanHdl_Impl( 0 );
|
|
|
|
aHyphenBox.SaveValue();
|
|
aExtHyphenBeforeBox.SaveValue();
|
|
aExtHyphenAfterBox.SaveValue();
|
|
aMaxHyphenEdit.SaveValue();
|
|
aPageBreakBox.SaveValue();
|
|
aBreakPositionLB.SaveValue();
|
|
aBreakTypeLB.SaveValue();
|
|
aApplyCollBtn.SaveValue();
|
|
aApplyCollBox.SaveValue();
|
|
aPagenumEdit.SaveValue();
|
|
aKeepTogetherBox.SaveValue();
|
|
aKeepParaBox.SaveValue();
|
|
aWidowBox.SaveValue();
|
|
aOrphanBox.SaveValue();
|
|
}
|
|
|
|
// -----------------------------------------------------------------------
|
|
|
|
int SvxExtParagraphTabPage::DeactivatePage( SfxItemSet* _pSet )
|
|
{
|
|
if ( _pSet )
|
|
FillItemSet( *_pSet );
|
|
return LEAVE_PAGE;
|
|
}
|
|
|
|
// -----------------------------------------------------------------------
|
|
|
|
void SvxExtParagraphTabPage::DisablePageBreak()
|
|
{
|
|
bPageBreak = sal_False;
|
|
aPageBreakBox.Enable(sal_False);
|
|
aBreakTypeLB.RemoveEntry(0);
|
|
aBreakPositionFT.Enable(sal_False);
|
|
aBreakPositionLB.Enable(sal_False);
|
|
aApplyCollBtn.Enable(sal_False);
|
|
aApplyCollBox.Enable(sal_False);
|
|
aPagenumEdit.Enable(sal_False);
|
|
}
|
|
|
|
// -----------------------------------------------------------------------
|
|
|
|
SvxExtParagraphTabPage::SvxExtParagraphTabPage( Window* pParent, const SfxItemSet& rAttr ) :
|
|
|
|
SfxTabPage( pParent, CUI_RES( RID_SVXPAGE_EXT_PARAGRAPH ), rAttr ),
|
|
|
|
aExtFL ( this, CUI_RES( FL_HYPHEN ) ),
|
|
aHyphenBox ( this, CUI_RES( BTN_HYPHEN ) ),
|
|
aBeforeText ( this, CUI_RES( FT_HYPHENBEFORE ) ),
|
|
aExtHyphenBeforeBox ( this, CUI_RES( ED_HYPHENBEFORE ) ),
|
|
aAfterText ( this, CUI_RES( FT_HYPHENAFTER ) ),
|
|
aExtHyphenAfterBox ( this, CUI_RES( ED_HYPHENAFTER ) ),
|
|
aMaxHyphenLabel ( this, CUI_RES( FT_MAXHYPH ) ),
|
|
aMaxHyphenEdit ( this, CUI_RES( ED_MAXHYPH ) ),
|
|
aBreaksFL ( this, CUI_RES( FL_BREAKS ) ),
|
|
aPageBreakBox ( this, CUI_RES( BTN_PAGEBREAK ) ),
|
|
aBreakTypeFT ( this, CUI_RES( FT_BREAKTYPE )),
|
|
aBreakTypeLB ( this, CUI_RES( LB_BREAKTYPE )),
|
|
aBreakPositionFT ( this, CUI_RES( FT_BREAKPOSITION )),
|
|
aBreakPositionLB ( this, CUI_RES( LB_BREAKPOSITION )),
|
|
aApplyCollBtn ( this, CUI_RES( BTN_PAGECOLL ) ),
|
|
aApplyCollBox ( this, CUI_RES( LB_PAGECOLL ) ),
|
|
aPagenumText ( this, CUI_RES( FT_PAGENUM ) ),
|
|
aPagenumEdit ( this, CUI_RES( ED_PAGENUM ) ),
|
|
aExtendFL ( this, CUI_RES( FL_OPTIONS ) ),
|
|
aKeepTogetherBox ( this, CUI_RES( BTN_KEEPTOGETHER ) ),
|
|
aKeepParaBox ( this, CUI_RES( CB_KEEPTOGETHER ) ),
|
|
aOrphanBox ( this, CUI_RES( BTN_ORPHANS ) ),
|
|
aOrphanRowNo ( this, CUI_RES( ED_ORPHANS ) ),
|
|
aOrphanRowLabel ( this, CUI_RES( FT_ORPHANS ) ),
|
|
aWidowBox ( this, CUI_RES( BTN_WIDOWS ) ),
|
|
aWidowRowNo ( this, CUI_RES( ED_WIDOWS ) ),
|
|
aWidowRowLabel ( this, CUI_RES( FT_WIDOWS ) ),
|
|
bPageBreak ( sal_True ),
|
|
bHtmlMode ( sal_False ),
|
|
nStdPos ( 0 )
|
|
{
|
|
FreeResource();
|
|
|
|
aApplyCollBox.SetAccessibleRelationLabeledBy(&aApplyCollBtn);
|
|
aApplyCollBox.SetAccessibleName(String(CUI_RES(STR_PAGE_STYLE)));
|
|
aOrphanRowNo.SetAccessibleRelationLabeledBy(&aOrphanBox);
|
|
aWidowRowNo.SetAccessibleRelationLabeledBy(&aWidowBox);
|
|
|
|
// diese Page braucht ExchangeSupport
|
|
SetExchangeSupport();
|
|
|
|
aHyphenBox.SetClickHdl( LINK( this, SvxExtParagraphTabPage, HyphenClickHdl_Impl ) );
|
|
aPageBreakBox.SetClickHdl( LINK( this, SvxExtParagraphTabPage, PageBreakHdl_Impl ) );
|
|
aKeepTogetherBox.SetClickHdl( LINK( this, SvxExtParagraphTabPage, KeepTogetherHdl_Impl ) );
|
|
aWidowBox.SetClickHdl( LINK( this, SvxExtParagraphTabPage, WidowHdl_Impl ) );
|
|
aOrphanBox.SetClickHdl( LINK( this, SvxExtParagraphTabPage, OrphanHdl_Impl ) );
|
|
aApplyCollBtn.SetClickHdl( LINK( this, SvxExtParagraphTabPage, ApplyCollClickHdl_Impl ) );
|
|
aBreakTypeLB.SetSelectHdl( LINK( this, SvxExtParagraphTabPage, PageBreakTypeHdl_Impl ) );
|
|
aBreakPositionLB.SetSelectHdl( LINK( this, SvxExtParagraphTabPage, PageBreakPosHdl_Impl ) );
|
|
|
|
SfxObjectShell* pSh = SfxObjectShell::Current();
|
|
if ( pSh )
|
|
{
|
|
SfxStyleSheetBasePool* pPool = pSh->GetStyleSheetPool();
|
|
pPool->SetSearchMask( SFX_STYLE_FAMILY_PAGE );
|
|
SfxStyleSheetBase* pStyle = pPool->First();
|
|
String aStdName;
|
|
|
|
while( pStyle )
|
|
{
|
|
if ( aStdName.Len() == 0 )
|
|
// first style == standard style
|
|
aStdName = pStyle->GetName();
|
|
aApplyCollBox.InsertEntry( pStyle->GetName() );
|
|
pStyle = pPool->Next();
|
|
}
|
|
nStdPos = aApplyCollBox.GetEntryPos( aStdName );
|
|
}
|
|
|
|
sal_uInt16 nHtmlMode = GetHtmlMode_Impl( rAttr );
|
|
if ( nHtmlMode & HTMLMODE_ON )
|
|
{
|
|
bHtmlMode = sal_True;
|
|
aHyphenBox .Enable(sal_False);
|
|
aBeforeText .Enable(sal_False);
|
|
aExtHyphenBeforeBox .Enable(sal_False);
|
|
aAfterText .Enable(sal_False);
|
|
aExtHyphenAfterBox .Enable(sal_False);
|
|
aMaxHyphenLabel .Enable(sal_False);
|
|
aMaxHyphenEdit .Enable(sal_False);
|
|
aExtFL .Enable(sal_False);
|
|
aPagenumText .Enable(sal_False);
|
|
aPagenumEdit .Enable(sal_False);
|
|
// no column break in HTML
|
|
aBreakTypeLB.RemoveEntry(1);
|
|
}
|
|
}
|
|
|
|
// -----------------------------------------------------------------------
|
|
|
|
SvxExtParagraphTabPage::~SvxExtParagraphTabPage()
|
|
{
|
|
}
|
|
|
|
// -----------------------------------------------------------------------
|
|
|
|
sal_uInt16* SvxExtParagraphTabPage::GetRanges()
|
|
{
|
|
return pExtRanges;
|
|
}
|
|
|
|
// -----------------------------------------------------------------------
|
|
|
|
IMPL_LINK_NOARG(SvxExtParagraphTabPage, PageBreakHdl_Impl)
|
|
{
|
|
switch ( aPageBreakBox.GetState() )
|
|
{
|
|
case STATE_CHECK:
|
|
aBreakTypeFT.Enable();
|
|
aBreakTypeLB.Enable();
|
|
aBreakPositionFT.Enable();
|
|
aBreakPositionLB.Enable();
|
|
|
|
if ( 0 == aBreakTypeLB.GetSelectEntryPos()&&
|
|
0 == aBreakPositionLB.GetSelectEntryPos() )
|
|
{
|
|
aApplyCollBtn.Enable();
|
|
|
|
sal_Bool bEnable = STATE_CHECK == aApplyCollBtn.GetState() &&
|
|
aApplyCollBox.GetEntryCount();
|
|
aApplyCollBox.Enable(bEnable);
|
|
if(!bHtmlMode)
|
|
{
|
|
aPagenumText.Enable(bEnable);
|
|
aPagenumEdit.Enable(bEnable);
|
|
}
|
|
}
|
|
break;
|
|
|
|
case STATE_NOCHECK:
|
|
case STATE_DONTKNOW:
|
|
aApplyCollBtn.SetState( STATE_NOCHECK );
|
|
aApplyCollBtn.Enable(sal_False);
|
|
aApplyCollBox.Enable(sal_False);
|
|
aPagenumText.Enable(sal_False);
|
|
aPagenumEdit.Enable(sal_False);
|
|
aBreakTypeFT.Enable(sal_False);
|
|
aBreakTypeLB.Enable(sal_False);
|
|
aBreakPositionFT.Enable(sal_False);
|
|
aBreakPositionLB.Enable(sal_False);
|
|
break;
|
|
}
|
|
return 0;
|
|
}
|
|
|
|
// -----------------------------------------------------------------------
|
|
|
|
IMPL_LINK_NOARG(SvxExtParagraphTabPage, KeepTogetherHdl_Impl)
|
|
{
|
|
sal_Bool bEnable = aKeepTogetherBox.GetState() == STATE_NOCHECK;
|
|
aWidowBox.Enable(bEnable);
|
|
aOrphanBox.Enable(bEnable);
|
|
|
|
return 0;
|
|
}
|
|
|
|
// -----------------------------------------------------------------------
|
|
|
|
IMPL_LINK_NOARG(SvxExtParagraphTabPage, WidowHdl_Impl)
|
|
{
|
|
switch ( aWidowBox.GetState() )
|
|
{
|
|
case STATE_CHECK:
|
|
aWidowRowNo.Enable();
|
|
aWidowRowLabel.Enable();
|
|
aKeepTogetherBox.Enable(sal_False);
|
|
break;
|
|
|
|
case STATE_NOCHECK:
|
|
if ( aOrphanBox.GetState() == STATE_NOCHECK )
|
|
aKeepTogetherBox.Enable();
|
|
|
|
// kein break
|
|
case STATE_DONTKNOW:
|
|
aWidowRowNo.Enable(sal_False);
|
|
aWidowRowLabel.Enable(sal_False);
|
|
break;
|
|
}
|
|
return 0;
|
|
}
|
|
|
|
// -----------------------------------------------------------------------
|
|
|
|
IMPL_LINK_NOARG(SvxExtParagraphTabPage, OrphanHdl_Impl)
|
|
{
|
|
switch( aOrphanBox.GetState() )
|
|
{
|
|
case STATE_CHECK:
|
|
aOrphanRowNo.Enable();
|
|
aOrphanRowLabel.Enable();
|
|
aKeepTogetherBox.Enable(sal_False);
|
|
break;
|
|
|
|
case STATE_NOCHECK:
|
|
if ( aWidowBox.GetState() == STATE_NOCHECK )
|
|
aKeepTogetherBox.Enable();
|
|
|
|
// kein break
|
|
case STATE_DONTKNOW:
|
|
aOrphanRowNo.Enable(sal_False);
|
|
aOrphanRowLabel.Enable(sal_False);
|
|
break;
|
|
}
|
|
return 0;
|
|
}
|
|
|
|
// -----------------------------------------------------------------------
|
|
|
|
IMPL_LINK_NOARG(SvxExtParagraphTabPage, HyphenClickHdl_Impl)
|
|
{
|
|
|
|
sal_Bool bEnable = aHyphenBox.GetState() == STATE_CHECK;
|
|
aBeforeText.Enable(bEnable);
|
|
aExtHyphenBeforeBox.Enable(bEnable);
|
|
aAfterText.Enable(bEnable);
|
|
aExtHyphenAfterBox.Enable(bEnable);
|
|
aMaxHyphenLabel.Enable(bEnable);
|
|
aMaxHyphenEdit.Enable(bEnable);
|
|
aHyphenBox.SetState( bEnable ? STATE_CHECK : STATE_NOCHECK);
|
|
|
|
return 0;
|
|
}
|
|
|
|
// -----------------------------------------------------------------------
|
|
|
|
IMPL_LINK_NOARG(SvxExtParagraphTabPage, ApplyCollClickHdl_Impl)
|
|
{
|
|
sal_Bool bEnable = sal_False;
|
|
if ( aApplyCollBtn.GetState() == STATE_CHECK &&
|
|
aApplyCollBox.GetEntryCount() )
|
|
{
|
|
bEnable = sal_True;
|
|
aApplyCollBox.SelectEntryPos( nStdPos );
|
|
}
|
|
else
|
|
{
|
|
aApplyCollBox.SetNoSelection();
|
|
}
|
|
aApplyCollBox.Enable(bEnable);
|
|
if(!bHtmlMode)
|
|
{
|
|
aPagenumText.Enable(bEnable);
|
|
aPagenumEdit.Enable(bEnable);
|
|
}
|
|
return 0;
|
|
}
|
|
|
|
// -----------------------------------------------------------------------
|
|
|
|
IMPL_LINK( SvxExtParagraphTabPage, PageBreakPosHdl_Impl, ListBox *, pListBox )
|
|
{
|
|
if ( 0 == pListBox->GetSelectEntryPos() )
|
|
{
|
|
aApplyCollBtn.Enable();
|
|
|
|
sal_Bool bEnable = aApplyCollBtn.GetState() == STATE_CHECK &&
|
|
aApplyCollBox.GetEntryCount();
|
|
|
|
aApplyCollBox.Enable(bEnable);
|
|
if(!bHtmlMode)
|
|
{
|
|
aPagenumText.Enable(bEnable);
|
|
aPagenumEdit.Enable(bEnable);
|
|
}
|
|
}
|
|
else if ( 1 == pListBox->GetSelectEntryPos() )
|
|
{
|
|
aApplyCollBtn.SetState( STATE_NOCHECK );
|
|
aApplyCollBtn.Enable(sal_False);
|
|
aApplyCollBox.Enable(sal_False);
|
|
aPagenumText.Enable(sal_False);
|
|
aPagenumEdit.Enable(sal_False);
|
|
}
|
|
return 0;
|
|
}
|
|
|
|
// -----------------------------------------------------------------------
|
|
|
|
IMPL_LINK( SvxExtParagraphTabPage, PageBreakTypeHdl_Impl, ListBox *, pListBox )
|
|
{
|
|
//column break or break break after
|
|
sal_uInt16 nBreakPos = aBreakPositionLB.GetSelectEntryPos();
|
|
if ( pListBox->GetSelectEntryPos() == 1 || 1 == nBreakPos)
|
|
{
|
|
aApplyCollBtn.SetState( STATE_NOCHECK );
|
|
aApplyCollBtn.Enable(sal_False);
|
|
aApplyCollBox.Enable(sal_False);
|
|
aPagenumText.Enable(sal_False);
|
|
aPagenumEdit.Enable(sal_False);
|
|
}
|
|
else
|
|
PageBreakPosHdl_Impl( &aBreakPositionLB );
|
|
return 0;
|
|
}
|
|
|
|
void SvxExtParagraphTabPage::PageCreated(SfxAllItemSet aSet)
|
|
{
|
|
|
|
|
|
SFX_ITEMSET_ARG (&aSet,pDisablePageBreakItem,SfxBoolItem,SID_DISABLE_SVXEXTPARAGRAPHTABPAGE_PAGEBREAK,sal_False);
|
|
|
|
if (pDisablePageBreakItem)
|
|
if ( pDisablePageBreakItem->GetValue())
|
|
DisablePageBreak();
|
|
|
|
|
|
}
|
|
|
|
SvxAsianTabPage::SvxAsianTabPage( Window* pParent, const SfxItemSet& rSet ) :
|
|
SfxTabPage(pParent, CUI_RES( RID_SVXPAGE_PARA_ASIAN ), rSet),
|
|
aOptionsFL( this, CUI_RES(FL_AS_OPTIONS )),
|
|
aForbiddenRulesCB( this, CUI_RES(CB_AS_FORBIDDEN )),
|
|
aHangingPunctCB( this, CUI_RES(CB_AS_HANG_PUNC )),
|
|
aScriptSpaceCB( this, CUI_RES(CB_AS_SCRIPT_SPACE ))//,
|
|
|
|
{
|
|
FreeResource();
|
|
|
|
Link aLink = LINK( this, SvxAsianTabPage, ClickHdl_Impl );
|
|
aHangingPunctCB.SetClickHdl( aLink );
|
|
aScriptSpaceCB.SetClickHdl( aLink );
|
|
aForbiddenRulesCB.SetClickHdl( aLink );
|
|
|
|
}
|
|
|
|
SvxAsianTabPage::~SvxAsianTabPage()
|
|
{
|
|
}
|
|
|
|
SfxTabPage* SvxAsianTabPage::Create( Window* pParent, const SfxItemSet& rSet )
|
|
{
|
|
return new SvxAsianTabPage(pParent, rSet);
|
|
}
|
|
|
|
sal_uInt16* SvxAsianTabPage::GetRanges()
|
|
{
|
|
static sal_uInt16 pRanges[] =
|
|
{
|
|
SID_ATTR_PARA_SCRIPTSPACE, SID_ATTR_PARA_FORBIDDEN_RULES,
|
|
0
|
|
};
|
|
return pRanges;
|
|
}
|
|
|
|
sal_Bool SvxAsianTabPage::FillItemSet( SfxItemSet& rSet )
|
|
{
|
|
sal_Bool bRet = sal_False;
|
|
SfxItemPool* pPool = rSet.GetPool();
|
|
if(aScriptSpaceCB.IsChecked() != aScriptSpaceCB.GetSavedValue())
|
|
{
|
|
SfxBoolItem* pNewItem = (SfxBoolItem*)rSet.Get(
|
|
pPool->GetWhich(SID_ATTR_PARA_SCRIPTSPACE)).Clone();
|
|
pNewItem->SetValue(aScriptSpaceCB.IsChecked());
|
|
rSet.Put(*pNewItem);
|
|
delete pNewItem;
|
|
bRet = sal_True;
|
|
}
|
|
if(aHangingPunctCB.IsChecked() != aHangingPunctCB.GetSavedValue())
|
|
{
|
|
SfxBoolItem* pNewItem = (SfxBoolItem*)rSet.Get(
|
|
pPool->GetWhich(SID_ATTR_PARA_HANGPUNCTUATION)).Clone();
|
|
pNewItem->SetValue(aHangingPunctCB.IsChecked());
|
|
rSet.Put(*pNewItem);
|
|
delete pNewItem;
|
|
bRet = sal_True;
|
|
}
|
|
if(aForbiddenRulesCB.IsChecked() != aForbiddenRulesCB.GetSavedValue())
|
|
{
|
|
SfxBoolItem* pNewItem = (SfxBoolItem*)rSet.Get(
|
|
pPool->GetWhich(SID_ATTR_PARA_FORBIDDEN_RULES)).Clone();
|
|
pNewItem->SetValue(aForbiddenRulesCB.IsChecked());
|
|
rSet.Put(*pNewItem);
|
|
delete pNewItem;
|
|
bRet = sal_True;
|
|
}
|
|
return bRet;
|
|
}
|
|
|
|
void lcl_SetBox(const SfxItemSet& rSet, sal_uInt16 nSlotId, TriStateBox& rBox)
|
|
{
|
|
sal_uInt16 _nWhich = rSet.GetPool()->GetWhich(nSlotId);
|
|
SfxItemState eState = rSet.GetItemState(_nWhich, sal_True);
|
|
if(!eState || eState == SFX_ITEM_DISABLED )
|
|
rBox.Enable(sal_False);
|
|
else if(eState >= SFX_ITEM_AVAILABLE)
|
|
{
|
|
rBox.EnableTriState( sal_False );
|
|
rBox.Check(((const SfxBoolItem&)rSet.Get(_nWhich)).GetValue());
|
|
}
|
|
else
|
|
rBox.SetState( STATE_DONTKNOW );
|
|
rBox.SaveValue();
|
|
}
|
|
|
|
|
|
void SvxAsianTabPage::Reset( const SfxItemSet& rSet )
|
|
{
|
|
lcl_SetBox(rSet, SID_ATTR_PARA_FORBIDDEN_RULES, aForbiddenRulesCB );
|
|
lcl_SetBox(rSet, SID_ATTR_PARA_HANGPUNCTUATION, aHangingPunctCB );
|
|
|
|
//character distance not yet available
|
|
lcl_SetBox(rSet, SID_ATTR_PARA_SCRIPTSPACE, aScriptSpaceCB );
|
|
}
|
|
|
|
IMPL_LINK( SvxAsianTabPage, ClickHdl_Impl, TriStateBox*, pBox )
|
|
{
|
|
pBox->EnableTriState( sal_False );
|
|
return 0;
|
|
}
|
|
|
|
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
|