| /************************************************************** |
| * |
| * 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 |
| |