void ParaLineSpacingControl::Rearrange()

in main/svx/source/sidebar/paragraph/ParaLineSpacingControl.cxx [185:510]


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();
}