blob: 07a875ab8ce541fd34d4014dc178df691fd06dde [file] [log] [blame]
/**************************************************************
*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*
*************************************************************/
#include "precompiled_svx.hxx"
#include "ParaLineSpacingControl.hxx"
#include "ParaPropertyPanel.hrc"
#include <sfx2/sidebar/ResourceDefinitions.hrc>
#include <svx/dialogs.hrc>
#include <svx/dialmgr.hxx>
#include <unotools/viewoptions.hxx>
#include <editeng/kernitem.hxx>
#include <sfx2/bindings.hxx>
#include <sfx2/dispatch.hxx>
#include <sfx2/sidebar/Theme.hxx>
#include <svtools/unitconv.hxx>
#define _DEFAULT_LINE_SPACING 200
#define FIX_DIST_DEF 283
#define LINESPACE_1 100
#define LINESPACE_15 150
#define LINESPACE_2 200
#define LINESPACE_115 115
#define LLINESPACE_1 0
#define LLINESPACE_15 1
#define LLINESPACE_2 2
#define LLINESPACE_PROP 3
#define LLINESPACE_MIN 4
#define LLINESPACE_DURCH 5
#define LLINESPACE_FIX 6
#define DO_NOT_CUSTOM 0
#define USE_CUSTOM 1
namespace svx { namespace sidebar {
ParaLineSpacingControl::ParaLineSpacingControl(Window* pParent, svx::sidebar::ParaPropertyPanel& rPanel)
: PopupControl( pParent,SVX_RES(RID_POPUPPANEL_PARAPAGE_LINESPACING)),
mbUseLineSPCustom (0),
mbLineSPDisable (0),
mrParaPropertyPanel (rPanel),
mpBindings (NULL),
nMinFixDist (BEGIN_VALUE),
pActLineDistFld (&aLineDistAtPercentBox),
maLineSpacing (ValueSetWithTextControl::IMAGE_TEXT,this, SVX_RES(LINE_SPACING)),
maCustomFT (this, SVX_RES(FT_CUSTOM)),
maLSpacingFT (this, SVX_RES(FT_LINE_SPACING)),
aLineDist (this, SVX_RES(LB_LINE_SPACING)),
maOfFT (this, SVX_RES(FT_OF)),
aLineDistAtPercentBox (this, SVX_RES(ED_SBINDE_LINEDISTPERCENT)),
aLineDistAtMetricBox (this, SVX_RES(ED_SBINDE_LINEDISTPOINT)),
maSpacing1 (SVX_RES(IMG_SPACING1)),
maSpacing115 (SVX_RES(IMG_SPACING115)),
maSpacing15 (SVX_RES(IMG_SPACING15)),
maSpacing2 (SVX_RES(IMG_SPACING2)),
maSelSpacing1 (SVX_RES(IMG_SEL_SPACING1)),
maSelSpacing115 (SVX_RES(IMG_SEL_SPACING115)),
maSelSpacing15 (SVX_RES(IMG_SEL_SPACING15)),
maSelSpacing2 (SVX_RES(IMG_SEL_SPACING2)),
maImgCus (SVX_RES(IMG_CUSTOM)),
maImgCusGrey (SVX_RES(IMG_CUSTOM_GRAY)),
maStrCus (SVX_RES(STR_LCVALUE)),
mpImg (NULL),
mpImgSel (NULL),
mpStr (NULL),
mpStrTip (NULL),
maLine (SVX_RES(STR_LSPACING)),
maOf (SVX_RES(STR_LS_OF)),
maValue (0),
maPos (0)
{
initial();
FreeResource();
mpBindings = mrParaPropertyPanel.GetBindings();
// m_eLNSpaceUnit = mrParaPropertyPanel.maLNSpaceControl.GetCoreMetric();
m_eLNSpaceUnit = SFX_MAPUNIT_100TH_MM;
}
ParaLineSpacingControl::~ParaLineSpacingControl()
{
delete[] mpImg;
delete[] mpImgSel;
delete[] mpStr;
delete[] mpStrTip;
}
void ParaLineSpacingControl::initial()
{
maLineSpacing.SetStyle( maLineSpacing.GetStyle()| WB_3DLOOK | WB_NO_DIRECTSELECT );
maLineSpacing.SetControlBackground(
GetSettings().GetStyleSettings().GetHighContrastMode()
? GetSettings().GetStyleSettings().GetMenuColor()
: sfx2::sidebar::Theme::GetColor( sfx2::sidebar::Theme::Paint_PanelBackground ));
maLineSpacing.SetColor(
GetSettings().GetStyleSettings().GetHighContrastMode()
? GetSettings().GetStyleSettings().GetMenuColor()
: sfx2::sidebar::Theme::GetColor( sfx2::sidebar::Theme::Paint_PanelBackground ));
maLineSpacing.SetBackground(
GetSettings().GetStyleSettings().GetHighContrastMode()
? GetSettings().GetStyleSettings().GetMenuColor()
: sfx2::sidebar::Theme::GetColor( sfx2::sidebar::Theme::Paint_PanelBackground ));
mpImg = new Image[4];
mpImg[0] = maSpacing1;
mpImg[1] = maSpacing115;
mpImg[2] = maSpacing15;
mpImg[3] = maSpacing2;
mpImgSel = new Image[4];
mpImgSel[0] = maSelSpacing1;
mpImgSel[1] = maSelSpacing115;
mpImgSel[2] = maSelSpacing15;
mpImgSel[3] = maSelSpacing2;
mpStr = new XubString[4];
mpStr[0] = XubString(SVX_RES(STR_SPACING1));
mpStr[1] = XubString(SVX_RES(STR_SPACING115));
mpStr[2] = XubString(SVX_RES(STR_SPACING15));
mpStr[3] = XubString(SVX_RES(STR_SPACING2));
mpStrTip = new XubString[4];
mpStrTip[0] = XubString(SVX_RES(STR_LS_SINGLE));
mpStrTip[1] = XubString(SVX_RES(STR_LS_115));
mpStrTip[2] = XubString(SVX_RES(STR_LS_15));
mpStrTip[3] = XubString(SVX_RES(STR_LS_DOUBLE));
for (int i=0;i<4;i++)
maLineSpacing.AddItem(mpImg[i], &mpImgSel[i],mpStr[i],&mpStrTip[i]);
maLineSpacing.AddItem( maImgCus, 0, maStrCus, 0 );
SetAllNoSel();
Link aLink = LINK(this, ParaLineSpacingControl,VSSelHdl );
maLineSpacing.SetSelectHdl(aLink);
maLineSpacing.StartSelection();
maLineSpacing.Show();
aLink = LINK( this, ParaLineSpacingControl, LineSPDistHdl_Impl );
aLineDist.SetSelectHdl(aLink);
aLineDist.SelectEntryPos( LLINESPACE_1 ) ;
aLink = LINK( this, ParaLineSpacingControl, LineSPDistAtHdl_Impl );
aLineDistAtPercentBox.SetModifyHdl( aLink );
aLineDistAtMetricBox.SetModifyHdl( aLink );
}
void ParaLineSpacingControl::PopupModeEndCallback()
{
if( mbUseLineSPCustom )
{
//maLinePos = mpLineSPPage->maPos;
//maLineValue = mpLineSPPage->maValue;
SvtViewOptions aWinOpt( E_WINDOW, LSP_POS_GLOBAL_VALUE );
::com::sun::star::uno::Sequence < ::com::sun::star::beans::NamedValue > aSeq(1);
aSeq[0].Name = ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM("maLinePos") );
aSeq[0].Value <<= ::rtl::OUString( String::CreateFromInt64( maPos ));
aWinOpt.SetUserData( aSeq );
SvtViewOptions aWinOpt2( E_WINDOW, LSP_LV_GLOBAL_VALUE );
aSeq[0].Name = ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM("maLineValue") );
aSeq[0].Value <<= ::rtl::OUString( String::CreateFromInt64( maValue ));
aWinOpt2.SetUserData( aSeq );
}
}
void ParaLineSpacingControl::Rearrange(SfxItemState currSPState,FieldUnit currMetricUnit,SvxLineSpacingItem* currSPItem,const ::sfx2::sidebar::EnumContext currentContext)
{
SvtViewOptions aWinOpt( E_WINDOW, LSP_POS_GLOBAL_VALUE );
if ( aWinOpt.Exists() )
{
::com::sun::star::uno::Sequence < ::com::sun::star::beans::NamedValue > aSeq = aWinOpt.GetUserData();
::rtl::OUString aTmp;
if ( aSeq.getLength())
aSeq[0].Value >>= aTmp;
String aWinData( aTmp );
maPos = (sal_uInt16)aWinData.ToInt32();
}
SvtViewOptions aWinOpt2( E_WINDOW, LSP_LV_GLOBAL_VALUE );
if ( aWinOpt2.Exists() )
{
::com::sun::star::uno::Sequence < ::com::sun::star::beans::NamedValue > aSeq = aWinOpt2.GetUserData();
::rtl::OUString aTmp;
if ( aSeq.getLength())
aSeq[0].Value >>= aTmp;
String aWinData( aTmp );
maValue = (sal_uInt16)aWinData.ToInt32();
}
String sHelpText;
switch(maPos)
{
case LLINESPACE_1:
sHelpText += mpStrTip[0];
break;
case LLINESPACE_15:
sHelpText += mpStrTip[2];
break;
case LLINESPACE_2:
sHelpText += mpStrTip[3];
break;
case LLINESPACE_PROP:
sHelpText +=maLine;
sHelpText.Append(String("Proportion: ", 12, RTL_TEXTENCODING_ASCII_US));
sHelpText += maOf;
sHelpText.Append( String::CreateFromInt64( maValue ));
break;
case LLINESPACE_MIN:
sHelpText += maLine;
sHelpText.Append(String("At Least: ", 10, RTL_TEXTENCODING_ASCII_US));
sHelpText += maOf;
sHelpText.Append( String::CreateFromInt64( maValue ));
break;
case LLINESPACE_DURCH:
sHelpText += maLine;
sHelpText.Append(String("Leading: ", 9, RTL_TEXTENCODING_ASCII_US));
sHelpText += maOf;
sHelpText.Append( String::CreateFromInt64( maValue ));
break;
case LLINESPACE_FIX:
sHelpText += maLine;
sHelpText.Append(String("Fixed: ", 7, RTL_TEXTENCODING_ASCII_US));
sHelpText += maOf;
sHelpText.Append( String::CreateFromInt64( maValue ));
break;
}
if( !aWinOpt.Exists() && !aWinOpt2.Exists() )
mbLineSPDisable = sal_True;
else
mbLineSPDisable = sal_False;
if( mbLineSPDisable )
maLineSpacing.ReplaceItemImages(5, maImgCusGrey,0);
else
{
maLineSpacing.ReplaceItemImages(5, maImgCus,0);
maLineSpacing.SetItemText(5,sHelpText);
}
SfxItemState eState = currSPState;
SetFieldUnit( aLineDistAtMetricBox, currMetricUnit );
// mpLineSPPage->SetAllNoSel();
aLineDist.Enable();
pActLineDistFld->Enable();
pActLineDistFld->SetText( String() );
bool bValueSetFocus = sal_False; //wj
if( eState >= SFX_ITEM_AVAILABLE )
{
// SfxMapUnit eUnit = maLNSpaceControl.GetCoreMetric();
SfxMapUnit eUnit = SFX_MAPUNIT_100TH_MM;
m_eLNSpaceUnit = eUnit;
switch( currSPItem->GetLineSpaceRule() )
{
case SVX_LINE_SPACE_AUTO:
{
SvxInterLineSpace eInter = currSPItem->GetInterLineSpaceRule();
switch( eInter )
{
case SVX_INTER_LINE_SPACE_OFF:
{
aLineDist.SelectEntryPos( LLINESPACE_1 );
pActLineDistFld->Disable();
pActLineDistFld->SetText( String() );
mbUseLineSPCustom = DO_NOT_CUSTOM;
if ( LINESPACE_1 == currSPItem->GetPropLineSpace() )
{
maLineSpacing.SelectItem(1);
bValueSetFocus = sal_True; //wj
}
}
break;
case SVX_INTER_LINE_SPACE_PROP:
{
if ( LINESPACE_1 == currSPItem->GetPropLineSpace() )
{
aLineDist.SelectEntryPos( LLINESPACE_1 );
pActLineDistFld->Disable();
pActLineDistFld->SetText( String() );
mbUseLineSPCustom = DO_NOT_CUSTOM;
maLineSpacing.SelectItem(1);
bValueSetFocus = sal_True; //wj
break;
}
if ( LINESPACE_15 == currSPItem->GetPropLineSpace() )
{
aLineDist.SelectEntryPos( LLINESPACE_15 );
pActLineDistFld->Disable();
pActLineDistFld->SetText( String() );
mbUseLineSPCustom = DO_NOT_CUSTOM;
maLineSpacing.SelectItem(3);
bValueSetFocus = sal_True; //wj
break;
}
if ( LINESPACE_2 == currSPItem->GetPropLineSpace() )
{
aLineDist.SelectEntryPos( LLINESPACE_2 );
pActLineDistFld->Disable();
pActLineDistFld->SetText( String() );
mbUseLineSPCustom = DO_NOT_CUSTOM;
maLineSpacing.SelectItem(4);
bValueSetFocus = sal_True; //wj
break;
}
aLineDist.SelectEntryPos( LLINESPACE_PROP );
if(pActLineDistFld != &(aLineDistAtPercentBox))
{
pActLineDistFld->Disable();
pActLineDistFld->Hide();
pActLineDistFld = &(aLineDistAtPercentBox);
}
else
{
pActLineDistFld = &(aLineDistAtMetricBox);
pActLineDistFld->Disable();
pActLineDistFld->Hide();
pActLineDistFld = &(aLineDistAtPercentBox);
}
pActLineDistFld->Enable();
pActLineDistFld->Show();
aLineDistAtPercentBox.
SetValue( aLineDistAtPercentBox.Normalize(
currSPItem->GetPropLineSpace() ) );
if( currSPItem->GetPropLineSpace() == LINESPACE_115 )
{
mbUseLineSPCustom = DO_NOT_CUSTOM;
maLineSpacing.SelectItem(2);
bValueSetFocus = sal_True; //wj
}
else
{
mbUseLineSPCustom = USE_CUSTOM;
maLineSpacing.SetNoSelection();
maLineSpacing.SelectItem(0);
}
}
break;
case SVX_INTER_LINE_SPACE_FIX:
{
if(pActLineDistFld != &(aLineDistAtMetricBox))
{
pActLineDistFld->Disable();
pActLineDistFld->Hide();
pActLineDistFld = &(aLineDistAtMetricBox);
}
else
{
pActLineDistFld = &(aLineDistAtPercentBox);
pActLineDistFld->Disable();
pActLineDistFld->Hide();
pActLineDistFld = &(aLineDistAtMetricBox);
}
pActLineDistFld->Enable();
pActLineDistFld->Show();
maLineSpacing.SetNoSelection();
maLineSpacing.SelectItem(0);
SetMetricValue( aLineDistAtMetricBox,
currSPItem->GetInterLineSpace(), eUnit );
aLineDist.SelectEntryPos( LLINESPACE_DURCH );
mbUseLineSPCustom = USE_CUSTOM;
}
break;
default:
break;
}
}
break;
case SVX_LINE_SPACE_FIX:
{
if(pActLineDistFld != &(aLineDistAtMetricBox))
{
pActLineDistFld->Disable();
pActLineDistFld->Hide();
pActLineDistFld = &(aLineDistAtMetricBox);
}
else
{
pActLineDistFld = &(aLineDistAtPercentBox);
pActLineDistFld->Disable();
pActLineDistFld->Hide();
pActLineDistFld = &(aLineDistAtMetricBox);
}
pActLineDistFld->Enable();
pActLineDistFld->Show();
maLineSpacing.SetNoSelection();
maLineSpacing.SelectItem(0);
SetMetricValue(aLineDistAtMetricBox, currSPItem->GetLineHeight(), eUnit);
aLineDist.SelectEntryPos( LLINESPACE_FIX );
mbUseLineSPCustom = USE_CUSTOM;
}
break;
case SVX_LINE_SPACE_MIN:
{
if(pActLineDistFld != &(aLineDistAtMetricBox))
{
pActLineDistFld->Disable();
pActLineDistFld->Hide();
pActLineDistFld = &(aLineDistAtMetricBox);
}
else
{
pActLineDistFld = &(aLineDistAtPercentBox);
pActLineDistFld->Disable();
pActLineDistFld->Hide();
pActLineDistFld = &(aLineDistAtMetricBox);
}
pActLineDistFld->Enable();
pActLineDistFld->Show();
maLineSpacing.SetNoSelection();
maLineSpacing.SelectItem(0);
SetMetricValue(aLineDistAtMetricBox, currSPItem->GetLineHeight(), eUnit);
aLineDist.SelectEntryPos( LLINESPACE_MIN );
mbUseLineSPCustom = USE_CUSTOM;
}
break;
default:
break;
}
}
else if( eState == SFX_ITEM_DISABLED )
{
aLineDist.Disable();
pActLineDistFld->Enable(sal_False);
pActLineDistFld->SetText( String() );
maLineSpacing.SetNoSelection();
maLineSpacing.SelectItem(0);
mbUseLineSPCustom = DO_NOT_CUSTOM;
}
else
{
pActLineDistFld->Enable(sal_False);
pActLineDistFld->SetText( String() );
aLineDist.SetNoSelection();
maLineSpacing.SetNoSelection();
maLineSpacing.SelectItem(0);
mbUseLineSPCustom = DO_NOT_CUSTOM;
}
aLineDist.SaveValue();
const sal_uInt16 uCount = aLineDist.GetEntryCount();
if( uCount == LLINESPACE_FIX + 1 )
{
switch (currentContext.GetCombinedContext_DI())
{
case CombinedEnumContext(Application_DrawImpress, Context_Table):
case CombinedEnumContext(Application_DrawImpress, Context_DrawText):
case CombinedEnumContext(Application_DrawImpress, Context_Draw):
case CombinedEnumContext(Application_DrawImpress, Context_TextObject):
case CombinedEnumContext(Application_DrawImpress, Context_Graphic):
case CombinedEnumContext(Application_Calc, Context_DrawText):
case CombinedEnumContext(Application_WriterVariants, Context_DrawText):
case CombinedEnumContext(Application_WriterVariants, Context_Annotation):
{
aLineDist.RemoveEntry(LLINESPACE_FIX);
}
}
}
else if( uCount == LLINESPACE_FIX)
{
switch (currentContext.GetCombinedContext_DI())
{
case CombinedEnumContext(Application_WriterVariants, Context_Default):
case CombinedEnumContext(Application_WriterVariants, Context_Text):
case CombinedEnumContext(Application_WriterVariants, Context_Table):
{
aLineDist.InsertEntry(String::CreateFromAscii("Fixed"), LLINESPACE_FIX);
}
}
}
maLineSpacing.Format();
maLineSpacing.StartSelection();
}
void ParaLineSpacingControl::SetAllNoSel()
{
maLineSpacing.SelectItem(1);
maLineSpacing.SetNoSelection();
}
IMPL_LINK( ParaLineSpacingControl, LineSPDistHdl_Impl, ListBox*, pBox )
{
maLineSpacing.SetNoSelection();
maLineSpacing.SelectItem(0);
maLineSpacing.Format();
maLineSpacing.StartSelection();
switch( pBox->GetSelectEntryPos() )
{
case LLINESPACE_1:
case LLINESPACE_15:
case LLINESPACE_2:
pActLineDistFld->Enable(sal_False);
pActLineDistFld->SetText( String() );
break;
case LLINESPACE_DURCH:
aLineDistAtPercentBox.Hide();
pActLineDistFld = &aLineDistAtMetricBox;
aLineDistAtMetricBox.SetMin(0);
if ( !aLineDistAtMetricBox.GetText().Len() )
aLineDistAtMetricBox.SetValue(
aLineDistAtMetricBox.Normalize( 0 ) );
aLineDistAtPercentBox.Hide();
pActLineDistFld->Show();
pActLineDistFld->Enable();
break;
case LLINESPACE_MIN:
aLineDistAtPercentBox.Hide();
pActLineDistFld = &aLineDistAtMetricBox;
aLineDistAtMetricBox.SetMin(0);
if ( !aLineDistAtMetricBox.GetText().Len() )
aLineDistAtMetricBox.SetValue(
aLineDistAtMetricBox.Normalize( 0 ), FUNIT_TWIP );
aLineDistAtPercentBox.Hide();
pActLineDistFld->Show();
pActLineDistFld->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();
break;
case LLINESPACE_FIX:
{
aLineDistAtPercentBox.Hide();
pActLineDistFld = &aLineDistAtMetricBox;
sal_Int64 nTemp = aLineDistAtMetricBox.GetValue();
aLineDistAtMetricBox.SetMin(aLineDistAtMetricBox.Normalize(nMinFixDist), FUNIT_TWIP);
if ( aLineDistAtMetricBox.GetValue() != nTemp )
SetMetricValue( aLineDistAtMetricBox,
FIX_DIST_DEF, SFX_MAPUNIT_TWIP );
aLineDistAtPercentBox.Hide();
pActLineDistFld->Show();
pActLineDistFld->Enable();
}
break;
}
ExecuteLineSpace();
return 0;
}
IMPL_LINK( ParaLineSpacingControl, LineSPDistAtHdl_Impl, MetricField*, /* pBox */ )
{
ExecuteLineSpace();
return (0L);
}
void ParaLineSpacingControl::ExecuteLineSpace()
{
aLineDist.SaveValue();
maLineSpacing.SetNoSelection();
SvxLineSpacingItem aSpacing(_DEFAULT_LINE_SPACING, SID_ATTR_PARA_LINESPACE);
sal_uInt16 nPos = aLineDist.GetSelectEntryPos();
switch ( nPos )
{
case LLINESPACE_1:
case LLINESPACE_15:
case LLINESPACE_2:
{
SetLineSpace( aSpacing, nPos );
maPos = nPos;
}
break;
case LLINESPACE_PROP:
{
SetLineSpace( aSpacing, nPos,
aLineDistAtPercentBox.Denormalize(
(long)aLineDistAtPercentBox.GetValue() ) );
maPos = nPos;
maValue =aLineDistAtPercentBox.GetValue();
}
break;
case LLINESPACE_MIN:
case LLINESPACE_DURCH:
case LLINESPACE_FIX:
{
SetLineSpace( aSpacing, nPos,
GetCoreValue( aLineDistAtMetricBox, m_eLNSpaceUnit ) );
maPos = nPos;
maValue = GetCoreValue( aLineDistAtMetricBox, m_eLNSpaceUnit );
}
break;
default:
DBG_ERROR( "error!!" );
break;
}
mpBindings->GetDispatcher()->Execute(
SID_ATTR_PARA_LINESPACE, SFX_CALLMODE_RECORD, &aSpacing, 0L);
mbUseLineSPCustom = USE_CUSTOM;
}
void ParaLineSpacingControl::SetLineSpace( 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( LINESPACE_15 );
break;
case LLINESPACE_2:
rLineSpace.GetLineSpaceRule() = SVX_LINE_SPACE_AUTO;
rLineSpace.SetPropLineSpace( LINESPACE_2 );
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;
}
}
IMPL_LINK(ParaLineSpacingControl, VSSelHdl, void *, pControl)
{
maLineSpacing.SetNoSelection();
bool bClosePop = true;
if(pControl == &maLineSpacing)
{
sal_uInt16 iPos = maLineSpacing.GetSelectItemId();
switch ( iPos )
{
case 1:
ExecuteLineSpacing( 0, 0 );
break;
case 2:
ExecuteLineSpacing( 0, 3 );
break;
case 3:
ExecuteLineSpacing( 0, 1 );
break;
case 4:
ExecuteLineSpacing( 0, 2 );
break;
case 5:
{
if(!(mbLineSPDisable))
{
//maPos = mrParaPropertyPanel.maLinePos;
aLineDist.SelectEntryPos( maPos ) ;
aLineDist.SaveValue();
//maValue = mrParaPropertyPanel.maLineValue;
SvxLineSpacingItem aSpacing(_DEFAULT_LINE_SPACING, SID_ATTR_PARA_LINESPACE);
switch(maPos)
{
case LLINESPACE_1:
case LLINESPACE_15:
case LLINESPACE_2:
SetLineSpace( aSpacing, maPos );
break;
case LLINESPACE_PROP:
SetLineSpace( aSpacing, maPos,
aLineDistAtPercentBox.Denormalize( (long)maValue ) );
break;
case LLINESPACE_MIN:
case LLINESPACE_DURCH:
case LLINESPACE_FIX:
SetLineSpace( aSpacing, maPos, (long)maValue );
break;
}
mpBindings->GetDispatcher()->Execute(
SID_ATTR_PARA_LINESPACE, SFX_CALLMODE_RECORD, &aSpacing, 0L);
ExecuteLineSpacing( USE_CUSTOM, 0 );
}
else
bClosePop = sal_False;
}
break;
}
}
if(bClosePop)
mrParaPropertyPanel.EndSpacingPopupMode();
return 0;
}
void ParaLineSpacingControl::ExecuteLineSpacing( sal_uInt16 aIsCustom, sal_uInt16 aEntry )
{
if( !aIsCustom )
{
aLineDist.SelectEntryPos( aEntry ) ;
aLineDist.SaveValue();
SvxLineSpacingItem aSpacing(_DEFAULT_LINE_SPACING, SID_ATTR_PARA_LINESPACE);
sal_uInt16 nPos = aEntry;
if( aEntry == LLINESPACE_PROP )
SetLineSpace( aSpacing, nPos, aLineDistAtPercentBox.Denormalize( (long)115 ) );
else
SetLineSpace( aSpacing, nPos );
mpBindings->GetDispatcher()->Execute(
SID_ATTR_PARA_LINESPACE, SFX_CALLMODE_RECORD, &aSpacing, 0L);
}
if( !aIsCustom )
{
mbUseLineSPCustom = DO_NOT_CUSTOM;
mrParaPropertyPanel.EndSpacingPopupMode();
}
maLineSpacing.SetNoSelection();
}
}} // end of namespace sidebar