xref: /AOO41X/main/svx/source/sidebar/paragraph/ParaLineSpacingControl.cxx (revision 766ce4d0f35a6d5b4b7c65174e638ff2dfbd4ec1)
1*766ce4d0SZheng Fan /**************************************************************
2*766ce4d0SZheng Fan  *
3*766ce4d0SZheng Fan  * Licensed to the Apache Software Foundation (ASF) under one
4*766ce4d0SZheng Fan  * or more contributor license agreements.  See the NOTICE file
5*766ce4d0SZheng Fan  * distributed with this work for additional information
6*766ce4d0SZheng Fan  * regarding copyright ownership.  The ASF licenses this file
7*766ce4d0SZheng Fan  * to you under the Apache License, Version 2.0 (the
8*766ce4d0SZheng Fan  * "License"); you may not use this file except in compliance
9*766ce4d0SZheng Fan  * with the License.  You may obtain a copy of the License at
10*766ce4d0SZheng Fan  *
11*766ce4d0SZheng Fan  *   http://www.apache.org/licenses/LICENSE-2.0
12*766ce4d0SZheng Fan  *
13*766ce4d0SZheng Fan  * Unless required by applicable law or agreed to in writing,
14*766ce4d0SZheng Fan  * software distributed under the License is distributed on an
15*766ce4d0SZheng Fan  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16*766ce4d0SZheng Fan  * KIND, either express or implied.  See the License for the
17*766ce4d0SZheng Fan  * specific language governing permissions and limitations
18*766ce4d0SZheng Fan  * under the License.
19*766ce4d0SZheng Fan  *
20*766ce4d0SZheng Fan  *************************************************************/
21*766ce4d0SZheng Fan 
22*766ce4d0SZheng Fan #include "precompiled_svx.hxx"
23*766ce4d0SZheng Fan #include "ParaLineSpacingControl.hxx"
24*766ce4d0SZheng Fan #include "ParaPropertyPanel.hrc"
25*766ce4d0SZheng Fan #include <sfx2/sidebar/propertypanel.hrc>
26*766ce4d0SZheng Fan #include <svx/dialogs.hrc>
27*766ce4d0SZheng Fan #include <svx/dialmgr.hxx>
28*766ce4d0SZheng Fan #include <unotools/viewoptions.hxx>
29*766ce4d0SZheng Fan #include <editeng/kernitem.hxx>
30*766ce4d0SZheng Fan #include <sfx2/bindings.hxx>
31*766ce4d0SZheng Fan #include <sfx2/dispatch.hxx>
32*766ce4d0SZheng Fan #include <sfx2/sidebar/Theme.hxx>
33*766ce4d0SZheng Fan #include <svtools/unitconv.hxx>
34*766ce4d0SZheng Fan 
35*766ce4d0SZheng Fan #define _DEFAULT_LINE_SPACING  200
36*766ce4d0SZheng Fan #define FIX_DIST_DEF           283
37*766ce4d0SZheng Fan #define LINESPACE_1            100
38*766ce4d0SZheng Fan #define LINESPACE_15           150
39*766ce4d0SZheng Fan #define LINESPACE_2            200
40*766ce4d0SZheng Fan #define LINESPACE_115          115
41*766ce4d0SZheng Fan 
42*766ce4d0SZheng Fan #define LLINESPACE_1          0
43*766ce4d0SZheng Fan #define LLINESPACE_15         1
44*766ce4d0SZheng Fan #define LLINESPACE_2          2
45*766ce4d0SZheng Fan #define LLINESPACE_PROP       3
46*766ce4d0SZheng Fan #define LLINESPACE_MIN        4
47*766ce4d0SZheng Fan #define LLINESPACE_DURCH      5
48*766ce4d0SZheng Fan #define LLINESPACE_FIX        6
49*766ce4d0SZheng Fan 
50*766ce4d0SZheng Fan #define DO_NOT_CUSTOM          0
51*766ce4d0SZheng Fan #define USE_CUSTOM             1
52*766ce4d0SZheng Fan 
53*766ce4d0SZheng Fan namespace svx { namespace sidebar {
54*766ce4d0SZheng Fan 
55*766ce4d0SZheng Fan 
56*766ce4d0SZheng Fan ParaLineSpacingControl::ParaLineSpacingControl(Window* pParent, svx::sidebar::ParaPropertyPanel& rPanel)
57*766ce4d0SZheng Fan :	PopupControl( pParent,SVX_RES(RID_POPUPPANEL_PARAPAGE_LINESPACING))
58*766ce4d0SZheng Fan ,	mrParaPropertyPanel(rPanel)
59*766ce4d0SZheng Fan ,	mpBindings(NULL)
60*766ce4d0SZheng Fan ,aLineDist				( this, SVX_RES( LB_LINE_SPACING )),
61*766ce4d0SZheng Fan aLineDistAtPercentBox	( this, SVX_RES( ED_SBINDE_LINEDISTPERCENT ) ),
62*766ce4d0SZheng Fan aLineDistAtMetricBox	( this, SVX_RES( ED_SBINDE_LINEDISTPOINT ) ),
63*766ce4d0SZheng Fan maCustomFT        ( this, SVX_RES( FT_CUSTOM ) ),
64*766ce4d0SZheng Fan maLSpacingFT      ( this, SVX_RES( FT_LINE_SPACING ) ),
65*766ce4d0SZheng Fan maOfFT            ( this, SVX_RES( FT_OF ) ),
66*766ce4d0SZheng Fan maSpacing1       (SVX_RES(IMG_SPACING1)),
67*766ce4d0SZheng Fan maSpacing115     (SVX_RES(IMG_SPACING115)),
68*766ce4d0SZheng Fan maSpacing15      (SVX_RES(IMG_SPACING15)),
69*766ce4d0SZheng Fan maSpacing2       (SVX_RES(IMG_SPACING2)),
70*766ce4d0SZheng Fan maLPCustom       (SVX_RES(IMG_SPACINGLCUSTOM)),
71*766ce4d0SZheng Fan maSelSpacing1    (SVX_RES(IMG_SEL_SPACING1)),
72*766ce4d0SZheng Fan maSelSpacing115  (SVX_RES(IMG_SEL_SPACING115)),
73*766ce4d0SZheng Fan maSelSpacing15   (SVX_RES(IMG_SEL_SPACING15)),
74*766ce4d0SZheng Fan maSelSpacing2    (SVX_RES(IMG_SEL_SPACING2)),
75*766ce4d0SZheng Fan maImgCusGrey	 (SVX_RES(IMG_CUSTOM_GRAY)),
76*766ce4d0SZheng Fan maImgCus		 (SVX_RES(IMG_CUSTOM)),
77*766ce4d0SZheng Fan maStrCus		 (SVX_RES(STR_LCVALUE)),
78*766ce4d0SZheng Fan pActLineDistFld 		( &aLineDistAtPercentBox ),
79*766ce4d0SZheng Fan nMinFixDist			    ( BEGIN_VALUE ),
80*766ce4d0SZheng Fan maValue                 ( 0 ),
81*766ce4d0SZheng Fan maPos                   ( 0 ),
82*766ce4d0SZheng Fan maLineSpacing		(ValueSetWithTextControl::IMAGE_TEXT,this, SVX_RES( LINE_SPACING ) ),
83*766ce4d0SZheng Fan mpImg			(NULL),
84*766ce4d0SZheng Fan mpImgSel		(NULL),
85*766ce4d0SZheng Fan mpStr			(NULL),
86*766ce4d0SZheng Fan mpStrTip		(NULL),
87*766ce4d0SZheng Fan maLine			(SVX_RES(STR_LSPACING)),
88*766ce4d0SZheng Fan maOf			(SVX_RES(STR_LS_OF))
89*766ce4d0SZheng Fan , mbUseLineSPCustom             (0)
90*766ce4d0SZheng Fan , mbLineSPDisable               (0)
91*766ce4d0SZheng Fan {
92*766ce4d0SZheng Fan 	initial();
93*766ce4d0SZheng Fan 	FreeResource();
94*766ce4d0SZheng Fan 	mpBindings = mrParaPropertyPanel.GetBindings();
95*766ce4d0SZheng Fan //	m_eLNSpaceUnit = mrParaPropertyPanel.maLNSpaceControl.GetCoreMetric();
96*766ce4d0SZheng Fan 	m_eLNSpaceUnit = SFX_MAPUNIT_100TH_MM;
97*766ce4d0SZheng Fan }
98*766ce4d0SZheng Fan ParaLineSpacingControl::~ParaLineSpacingControl()
99*766ce4d0SZheng Fan {
100*766ce4d0SZheng Fan 	delete[] mpImg;
101*766ce4d0SZheng Fan 	delete[] mpImgSel;
102*766ce4d0SZheng Fan 	delete[] mpStr;
103*766ce4d0SZheng Fan 	delete[] mpStrTip;
104*766ce4d0SZheng Fan }
105*766ce4d0SZheng Fan 
106*766ce4d0SZheng Fan void ParaLineSpacingControl::initial()
107*766ce4d0SZheng Fan {
108*766ce4d0SZheng Fan 	//maLineSpacing.SetStyle( maLineSpacing.GetStyle()| WB_3DLOOK |  WB_NO_DIRECTSELECT  );
109*766ce4d0SZheng Fan 	//maLineSpacing.SetControlBackground(GetSettings().GetStyleSettings().GetMenuColor());
110*766ce4d0SZheng Fan 	//maLineSpacing.SetColor(GetSettings().GetStyleSettings().GetMenuColor());
111*766ce4d0SZheng Fan 	//maLineSpacing.SetMinFont();
112*766ce4d0SZheng Fan 
113*766ce4d0SZheng Fan 	maLineSpacing.SetControlBackground(GetSettings().GetStyleSettings().GetHighContrastMode()?
114*766ce4d0SZheng Fan 	GetSettings().GetStyleSettings().GetMenuColor():
115*766ce4d0SZheng Fan 	sfx2::sidebar::Theme::GetColor( sfx2::sidebar::Theme::Paint_PanelBackground ));
116*766ce4d0SZheng Fan 	maLineSpacing.SetColor(GetSettings().GetStyleSettings().GetHighContrastMode()?
117*766ce4d0SZheng Fan 	GetSettings().GetStyleSettings().GetMenuColor():
118*766ce4d0SZheng Fan 	sfx2::sidebar::Theme::GetColor( sfx2::sidebar::Theme::Paint_PanelBackground ));
119*766ce4d0SZheng Fan 	maLineSpacing.SetBackground(GetSettings().GetStyleSettings().GetHighContrastMode()?
120*766ce4d0SZheng Fan 	GetSettings().GetStyleSettings().GetMenuColor():
121*766ce4d0SZheng Fan 	sfx2::sidebar::Theme::GetColor( sfx2::sidebar::Theme::Paint_PanelBackground ));
122*766ce4d0SZheng Fan 	//maFTSpacing.SetBackground(GetSettings().GetStyleSettings().GetHighContrastMode()?
123*766ce4d0SZheng Fan 	//GetSettings().GetStyleSettings().GetMenuColor():
124*766ce4d0SZheng Fan 	//sfx2::sidebar::Theme::GetColor( sfx2::sidebar::Theme::Paint_PanelBackground ));
125*766ce4d0SZheng Fan 	//maFTBy.SetBackground(GetSettings().GetStyleSettings().GetHighContrastMode()?
126*766ce4d0SZheng Fan 	//GetSettings().GetStyleSettings().GetMenuColor():
127*766ce4d0SZheng Fan 	//sfx2::sidebar::Theme::GetColor( sfx2::sidebar::Theme::Paint_PanelBackground ));
128*766ce4d0SZheng Fan 
129*766ce4d0SZheng Fan 	mpImg = new Image[4];
130*766ce4d0SZheng Fan 	mpImg[0] = maSpacing1;
131*766ce4d0SZheng Fan 	mpImg[1] = maSpacing115;
132*766ce4d0SZheng Fan 	mpImg[2] = maSpacing15;
133*766ce4d0SZheng Fan 	mpImg[3] = maSpacing2;
134*766ce4d0SZheng Fan 
135*766ce4d0SZheng Fan 	mpImgSel = new Image[4];
136*766ce4d0SZheng Fan 	mpImgSel[0] = maSelSpacing1;
137*766ce4d0SZheng Fan 	mpImgSel[1] = maSelSpacing115;
138*766ce4d0SZheng Fan 	mpImgSel[2] = maSelSpacing15;
139*766ce4d0SZheng Fan 	mpImgSel[3] = maSelSpacing2;
140*766ce4d0SZheng Fan 
141*766ce4d0SZheng Fan 	mpStr = new XubString[4];
142*766ce4d0SZheng Fan 	mpStr[0] = XubString(SVX_RES(STR_SPACING1));
143*766ce4d0SZheng Fan 	mpStr[1] = XubString(SVX_RES(STR_SPACING115));
144*766ce4d0SZheng Fan 	mpStr[2] = XubString(SVX_RES(STR_SPACING15));
145*766ce4d0SZheng Fan 	mpStr[3] = XubString(SVX_RES(STR_SPACING2));
146*766ce4d0SZheng Fan 
147*766ce4d0SZheng Fan 	mpStrTip = new XubString[4];
148*766ce4d0SZheng Fan 	mpStrTip[0] = XubString(SVX_RES(STR_LS_SINGLE));
149*766ce4d0SZheng Fan 	mpStrTip[1] = XubString(SVX_RES(STR_LS_115));
150*766ce4d0SZheng Fan 	mpStrTip[2] = XubString(SVX_RES(STR_LS_15));
151*766ce4d0SZheng Fan 	mpStrTip[3] = XubString(SVX_RES(STR_LS_DOUBLE));
152*766ce4d0SZheng Fan 	for (int i=0;i<4;i++)
153*766ce4d0SZheng Fan 		maLineSpacing.AddItem(mpImg[i], &mpImgSel[i],mpStr[i],&mpStrTip[i]);
154*766ce4d0SZheng Fan 
155*766ce4d0SZheng Fan 	maLineSpacing.InsertCustom(maImgCus, maImgCusGrey, maStrCus);
156*766ce4d0SZheng Fan 	maLineSpacing.SetCustomTip(maStrCus); //Add
157*766ce4d0SZheng Fan 
158*766ce4d0SZheng Fan 	SetAllNoSel();
159*766ce4d0SZheng Fan 	Link aLink = LINK(this, ParaLineSpacingControl,VSSelHdl );
160*766ce4d0SZheng Fan 	maLineSpacing.SetSelectHdl(aLink);
161*766ce4d0SZheng Fan 	maLineSpacing.StartSelection();
162*766ce4d0SZheng Fan 	maLineSpacing.Show();
163*766ce4d0SZheng Fan 
164*766ce4d0SZheng Fan 	aLink = LINK( this, ParaLineSpacingControl, LineSPDistHdl_Impl );
165*766ce4d0SZheng Fan 	aLineDist.SetSelectHdl(aLink);
166*766ce4d0SZheng Fan 	aLineDist.SelectEntryPos( LLINESPACE_1 ) ;
167*766ce4d0SZheng Fan 	aLink = LINK( this, ParaLineSpacingControl, LineSPDistAtHdl_Impl );
168*766ce4d0SZheng Fan 	aLineDistAtPercentBox.SetModifyHdl( aLink );
169*766ce4d0SZheng Fan 	aLineDistAtMetricBox.SetModifyHdl( aLink );
170*766ce4d0SZheng Fan }
171*766ce4d0SZheng Fan void ParaLineSpacingControl::ToGetFocus(bool bType)
172*766ce4d0SZheng Fan {
173*766ce4d0SZheng Fan 	if(!bType)
174*766ce4d0SZheng Fan 		aLineDist.GrabFocus();
175*766ce4d0SZheng Fan 	else
176*766ce4d0SZheng Fan 		maLineSpacing.GrabFocus();	//wj
177*766ce4d0SZheng Fan }
178*766ce4d0SZheng Fan 
179*766ce4d0SZheng Fan void ParaLineSpacingControl::PopupModeEndCallback()
180*766ce4d0SZheng Fan {
181*766ce4d0SZheng Fan 	if( mbUseLineSPCustom )
182*766ce4d0SZheng Fan 	{
183*766ce4d0SZheng Fan 		//maLinePos = mpLineSPPage->maPos;
184*766ce4d0SZheng Fan 	    //maLineValue = mpLineSPPage->maValue;
185*766ce4d0SZheng Fan 
186*766ce4d0SZheng Fan 		SvtViewOptions aWinOpt( E_WINDOW, LSP_POS_GLOBAL_VALUE );
187*766ce4d0SZheng Fan 		::com::sun::star::uno::Sequence < ::com::sun::star::beans::NamedValue > aSeq(1);
188*766ce4d0SZheng Fan 		aSeq[0].Name = ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM("maLinePos") );
189*766ce4d0SZheng Fan 		aSeq[0].Value <<= ::rtl::OUString( String::CreateFromInt64( maPos ));
190*766ce4d0SZheng Fan 		aWinOpt.SetUserData( aSeq );
191*766ce4d0SZheng Fan 
192*766ce4d0SZheng Fan 		SvtViewOptions aWinOpt2( E_WINDOW, LSP_LV_GLOBAL_VALUE );
193*766ce4d0SZheng Fan 		aSeq[0].Name = ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM("maLineValue") );
194*766ce4d0SZheng Fan 		aSeq[0].Value <<= ::rtl::OUString( String::CreateFromInt64( maValue ));
195*766ce4d0SZheng Fan 		aWinOpt2.SetUserData( aSeq );
196*766ce4d0SZheng Fan 	}
197*766ce4d0SZheng Fan }
198*766ce4d0SZheng Fan 
199*766ce4d0SZheng Fan void ParaLineSpacingControl::Rearrange(SfxItemState currSPState,FieldUnit currMetricUnit,SvxLineSpacingItem* currSPItem,const ::sfx2::sidebar::EnumContext currentContext)
200*766ce4d0SZheng Fan {
201*766ce4d0SZheng Fan 	SvtViewOptions aWinOpt( E_WINDOW, LSP_POS_GLOBAL_VALUE );
202*766ce4d0SZheng Fan     if ( aWinOpt.Exists() )
203*766ce4d0SZheng Fan 	{
204*766ce4d0SZheng Fan 		::com::sun::star::uno::Sequence < ::com::sun::star::beans::NamedValue > aSeq = aWinOpt.GetUserData();
205*766ce4d0SZheng Fan 		::rtl::OUString aTmp;
206*766ce4d0SZheng Fan 		if ( aSeq.getLength())
207*766ce4d0SZheng Fan 			aSeq[0].Value >>= aTmp;
208*766ce4d0SZheng Fan 
209*766ce4d0SZheng Fan 		String aWinData( aTmp );
210*766ce4d0SZheng Fan 		maPos = (sal_uInt16)aWinData.ToInt32();
211*766ce4d0SZheng Fan 	}
212*766ce4d0SZheng Fan 
213*766ce4d0SZheng Fan 	SvtViewOptions aWinOpt2( E_WINDOW, LSP_LV_GLOBAL_VALUE );
214*766ce4d0SZheng Fan     if ( aWinOpt2.Exists() )
215*766ce4d0SZheng Fan 	{
216*766ce4d0SZheng Fan 		::com::sun::star::uno::Sequence < ::com::sun::star::beans::NamedValue > aSeq = aWinOpt2.GetUserData();
217*766ce4d0SZheng Fan 		::rtl::OUString aTmp;
218*766ce4d0SZheng Fan 		if ( aSeq.getLength())
219*766ce4d0SZheng Fan 			aSeq[0].Value >>= aTmp;
220*766ce4d0SZheng Fan 
221*766ce4d0SZheng Fan 		String aWinData( aTmp );
222*766ce4d0SZheng Fan 		maValue = (sal_uInt16)aWinData.ToInt32();
223*766ce4d0SZheng Fan 	}
224*766ce4d0SZheng Fan 	String sHelpText;
225*766ce4d0SZheng Fan 	switch(maPos)
226*766ce4d0SZheng Fan 	{
227*766ce4d0SZheng Fan 		case LLINESPACE_1:
228*766ce4d0SZheng Fan 			sHelpText += mpStrTip[0];
229*766ce4d0SZheng Fan 			break;
230*766ce4d0SZheng Fan 		case LLINESPACE_15:
231*766ce4d0SZheng Fan 			sHelpText += mpStrTip[2];
232*766ce4d0SZheng Fan 			break;
233*766ce4d0SZheng Fan 		case LLINESPACE_2:
234*766ce4d0SZheng Fan 			sHelpText += mpStrTip[3];
235*766ce4d0SZheng Fan 			break;
236*766ce4d0SZheng Fan 		case LLINESPACE_PROP:
237*766ce4d0SZheng Fan 			sHelpText +=maLine;
238*766ce4d0SZheng Fan 			sHelpText.Append(String("Proportion: ", 12, RTL_TEXTENCODING_ASCII_US));
239*766ce4d0SZheng Fan 			sHelpText += maOf;
240*766ce4d0SZheng Fan 			sHelpText.Append( String::CreateFromInt64( maValue ));
241*766ce4d0SZheng Fan 			break;
242*766ce4d0SZheng Fan 		case LLINESPACE_MIN:
243*766ce4d0SZheng Fan 			sHelpText += maLine;
244*766ce4d0SZheng Fan 			sHelpText.Append(String("At Least: ", 10, RTL_TEXTENCODING_ASCII_US));
245*766ce4d0SZheng Fan 			sHelpText += maOf;
246*766ce4d0SZheng Fan 			sHelpText.Append( String::CreateFromInt64( maValue ));
247*766ce4d0SZheng Fan 			break;
248*766ce4d0SZheng Fan 		case LLINESPACE_DURCH:
249*766ce4d0SZheng Fan 			sHelpText += maLine;
250*766ce4d0SZheng Fan 			sHelpText.Append(String("Leading: ", 9, RTL_TEXTENCODING_ASCII_US));
251*766ce4d0SZheng Fan 			sHelpText += maOf;
252*766ce4d0SZheng Fan 			sHelpText.Append( String::CreateFromInt64( maValue ));
253*766ce4d0SZheng Fan 			break;
254*766ce4d0SZheng Fan 		case LLINESPACE_FIX:
255*766ce4d0SZheng Fan 			sHelpText += maLine;
256*766ce4d0SZheng Fan 			sHelpText.Append(String("Fixed: ", 7, RTL_TEXTENCODING_ASCII_US));
257*766ce4d0SZheng Fan 			sHelpText += maOf;
258*766ce4d0SZheng Fan 			sHelpText.Append( String::CreateFromInt64( maValue ));
259*766ce4d0SZheng Fan 			break;
260*766ce4d0SZheng Fan 	}
261*766ce4d0SZheng Fan 	if( !aWinOpt.Exists() && !aWinOpt2.Exists() )
262*766ce4d0SZheng Fan 		mbLineSPDisable = sal_True;
263*766ce4d0SZheng Fan 	else
264*766ce4d0SZheng Fan 		mbLineSPDisable = sal_False;
265*766ce4d0SZheng Fan 
266*766ce4d0SZheng Fan 	if( mbLineSPDisable )
267*766ce4d0SZheng Fan 		maLineSpacing.SetCusEnable(0);
268*766ce4d0SZheng Fan 	else
269*766ce4d0SZheng Fan 	{
270*766ce4d0SZheng Fan 		maLineSpacing.SetCusEnable(1);
271*766ce4d0SZheng Fan 		maLineSpacing.SetCustomTip(sHelpText,sal_True);//Modify for Sym2_7266
272*766ce4d0SZheng Fan 	}
273*766ce4d0SZheng Fan 
274*766ce4d0SZheng Fan 	SfxItemState eState = currSPState;
275*766ce4d0SZheng Fan 
276*766ce4d0SZheng Fan 	SetFieldUnit( aLineDistAtMetricBox, currMetricUnit );
277*766ce4d0SZheng Fan 
278*766ce4d0SZheng Fan //	mpLineSPPage->SetAllNoSel();
279*766ce4d0SZheng Fan 	aLineDist.Enable();
280*766ce4d0SZheng Fan 	pActLineDistFld->Enable();
281*766ce4d0SZheng Fan 	pActLineDistFld->SetText( String() );
282*766ce4d0SZheng Fan 	bool bValueSetFocus = sal_False;		//wj
283*766ce4d0SZheng Fan 
284*766ce4d0SZheng Fan 	if( eState >= SFX_ITEM_AVAILABLE )
285*766ce4d0SZheng Fan 	{
286*766ce4d0SZheng Fan 	//	SfxMapUnit eUnit = maLNSpaceControl.GetCoreMetric();
287*766ce4d0SZheng Fan 		SfxMapUnit eUnit = SFX_MAPUNIT_100TH_MM;
288*766ce4d0SZheng Fan 		m_eLNSpaceUnit = eUnit;
289*766ce4d0SZheng Fan 
290*766ce4d0SZheng Fan 		switch( currSPItem->GetLineSpaceRule() )
291*766ce4d0SZheng Fan 		{
292*766ce4d0SZheng Fan 		case SVX_LINE_SPACE_AUTO:
293*766ce4d0SZheng Fan 			{
294*766ce4d0SZheng Fan 				SvxInterLineSpace eInter = currSPItem->GetInterLineSpaceRule();
295*766ce4d0SZheng Fan 
296*766ce4d0SZheng Fan 				switch( eInter )
297*766ce4d0SZheng Fan 				{
298*766ce4d0SZheng Fan 				case SVX_INTER_LINE_SPACE_OFF:
299*766ce4d0SZheng Fan 					{
300*766ce4d0SZheng Fan 						aLineDist.SelectEntryPos( LLINESPACE_1 );
301*766ce4d0SZheng Fan 						pActLineDistFld->Disable();
302*766ce4d0SZheng Fan 						pActLineDistFld->SetText( String() );
303*766ce4d0SZheng Fan 						mbUseLineSPCustom = DO_NOT_CUSTOM;
304*766ce4d0SZheng Fan 						if ( LINESPACE_1 == currSPItem->GetPropLineSpace() )
305*766ce4d0SZheng Fan 						{
306*766ce4d0SZheng Fan 							maLineSpacing.SetSelItem(1);
307*766ce4d0SZheng Fan 							bValueSetFocus = sal_True;	//wj
308*766ce4d0SZheng Fan 						}
309*766ce4d0SZheng Fan 					}
310*766ce4d0SZheng Fan 					break;
311*766ce4d0SZheng Fan 
312*766ce4d0SZheng Fan 				case SVX_INTER_LINE_SPACE_PROP:
313*766ce4d0SZheng Fan 					{
314*766ce4d0SZheng Fan 						if ( LINESPACE_1 == currSPItem->GetPropLineSpace() )
315*766ce4d0SZheng Fan 						{
316*766ce4d0SZheng Fan 							aLineDist.SelectEntryPos( LLINESPACE_1 );
317*766ce4d0SZheng Fan 							pActLineDistFld->Disable();
318*766ce4d0SZheng Fan 							pActLineDistFld->SetText( String() );
319*766ce4d0SZheng Fan 							mbUseLineSPCustom = DO_NOT_CUSTOM;
320*766ce4d0SZheng Fan 							maLineSpacing.SetSelItem(1);
321*766ce4d0SZheng Fan 							bValueSetFocus = sal_True;	//wj
322*766ce4d0SZheng Fan 							break;
323*766ce4d0SZheng Fan 						}
324*766ce4d0SZheng Fan 						if ( LINESPACE_15 == currSPItem->GetPropLineSpace() )
325*766ce4d0SZheng Fan 						{
326*766ce4d0SZheng Fan 							aLineDist.SelectEntryPos( LLINESPACE_15 );
327*766ce4d0SZheng Fan 							pActLineDistFld->Disable();
328*766ce4d0SZheng Fan 							pActLineDistFld->SetText( String() );
329*766ce4d0SZheng Fan 
330*766ce4d0SZheng Fan 							mbUseLineSPCustom = DO_NOT_CUSTOM;
331*766ce4d0SZheng Fan 							maLineSpacing.SetSelItem(3);
332*766ce4d0SZheng Fan 							bValueSetFocus = sal_True;	//wj
333*766ce4d0SZheng Fan 							break;
334*766ce4d0SZheng Fan 						}
335*766ce4d0SZheng Fan 						if ( LINESPACE_2 == currSPItem->GetPropLineSpace() )
336*766ce4d0SZheng Fan 						{
337*766ce4d0SZheng Fan 							aLineDist.SelectEntryPos( LLINESPACE_2 );
338*766ce4d0SZheng Fan 							pActLineDistFld->Disable();
339*766ce4d0SZheng Fan 							pActLineDistFld->SetText( String() );
340*766ce4d0SZheng Fan 
341*766ce4d0SZheng Fan 							mbUseLineSPCustom = DO_NOT_CUSTOM;
342*766ce4d0SZheng Fan 							maLineSpacing.SetSelItem(4);
343*766ce4d0SZheng Fan 							bValueSetFocus = sal_True;	//wj
344*766ce4d0SZheng Fan 							break;
345*766ce4d0SZheng Fan 						}
346*766ce4d0SZheng Fan 
347*766ce4d0SZheng Fan 						aLineDist.SelectEntryPos( LLINESPACE_PROP );
348*766ce4d0SZheng Fan 						if(pActLineDistFld != &(aLineDistAtPercentBox))
349*766ce4d0SZheng Fan 						{
350*766ce4d0SZheng Fan 							pActLineDistFld->Disable();
351*766ce4d0SZheng Fan 							pActLineDistFld->Hide();
352*766ce4d0SZheng Fan 							pActLineDistFld = &(aLineDistAtPercentBox);
353*766ce4d0SZheng Fan 						}
354*766ce4d0SZheng Fan 						else
355*766ce4d0SZheng Fan 						{
356*766ce4d0SZheng Fan 							pActLineDistFld = &(aLineDistAtMetricBox);
357*766ce4d0SZheng Fan 							pActLineDistFld->Disable();
358*766ce4d0SZheng Fan 							pActLineDistFld->Hide();
359*766ce4d0SZheng Fan 							pActLineDistFld = &(aLineDistAtPercentBox);
360*766ce4d0SZheng Fan 						}
361*766ce4d0SZheng Fan 						pActLineDistFld->Enable();
362*766ce4d0SZheng Fan 						pActLineDistFld->Show();
363*766ce4d0SZheng Fan 						aLineDistAtPercentBox.
364*766ce4d0SZheng Fan 							SetValue( aLineDistAtPercentBox.Normalize(
365*766ce4d0SZheng Fan 							currSPItem->GetPropLineSpace() ) );
366*766ce4d0SZheng Fan 
367*766ce4d0SZheng Fan 						if( currSPItem->GetPropLineSpace() == LINESPACE_115 )
368*766ce4d0SZheng Fan 						{
369*766ce4d0SZheng Fan 							mbUseLineSPCustom = DO_NOT_CUSTOM;
370*766ce4d0SZheng Fan 							maLineSpacing.SetSelItem(2);
371*766ce4d0SZheng Fan 							bValueSetFocus = sal_True;	//wj
372*766ce4d0SZheng Fan 						}
373*766ce4d0SZheng Fan 						else
374*766ce4d0SZheng Fan 						{
375*766ce4d0SZheng Fan 							mbUseLineSPCustom = USE_CUSTOM;
376*766ce4d0SZheng Fan 							maLineSpacing.SetSelItem(0);
377*766ce4d0SZheng Fan 						}
378*766ce4d0SZheng Fan 					}
379*766ce4d0SZheng Fan 					break;
380*766ce4d0SZheng Fan 
381*766ce4d0SZheng Fan 				case SVX_INTER_LINE_SPACE_FIX:
382*766ce4d0SZheng Fan 					{
383*766ce4d0SZheng Fan 						if(pActLineDistFld != &(aLineDistAtMetricBox))
384*766ce4d0SZheng Fan 						{
385*766ce4d0SZheng Fan 							pActLineDistFld->Disable();
386*766ce4d0SZheng Fan 							pActLineDistFld->Hide();
387*766ce4d0SZheng Fan 							pActLineDistFld = &(aLineDistAtMetricBox);
388*766ce4d0SZheng Fan 						}
389*766ce4d0SZheng Fan 						else
390*766ce4d0SZheng Fan 						{
391*766ce4d0SZheng Fan 							pActLineDistFld = &(aLineDistAtPercentBox);
392*766ce4d0SZheng Fan 							pActLineDistFld->Disable();
393*766ce4d0SZheng Fan 							pActLineDistFld->Hide();
394*766ce4d0SZheng Fan 							pActLineDistFld = &(aLineDistAtMetricBox);
395*766ce4d0SZheng Fan 						}
396*766ce4d0SZheng Fan 						pActLineDistFld->Enable();
397*766ce4d0SZheng Fan 						pActLineDistFld->Show();
398*766ce4d0SZheng Fan 						maLineSpacing.SetSelItem(0);
399*766ce4d0SZheng Fan 
400*766ce4d0SZheng Fan 						SetMetricValue( aLineDistAtMetricBox,
401*766ce4d0SZheng Fan 							currSPItem->GetInterLineSpace(), eUnit );
402*766ce4d0SZheng Fan 						aLineDist.SelectEntryPos( LLINESPACE_DURCH );
403*766ce4d0SZheng Fan 
404*766ce4d0SZheng Fan 						mbUseLineSPCustom = USE_CUSTOM;
405*766ce4d0SZheng Fan 					}
406*766ce4d0SZheng Fan 					break;
407*766ce4d0SZheng Fan 				}
408*766ce4d0SZheng Fan 			}
409*766ce4d0SZheng Fan 			break;
410*766ce4d0SZheng Fan 		case SVX_LINE_SPACE_FIX:
411*766ce4d0SZheng Fan 			{
412*766ce4d0SZheng Fan 				if(pActLineDistFld != &(aLineDistAtMetricBox))
413*766ce4d0SZheng Fan 				{
414*766ce4d0SZheng Fan 					pActLineDistFld->Disable();
415*766ce4d0SZheng Fan 					pActLineDistFld->Hide();
416*766ce4d0SZheng Fan 					pActLineDistFld = &(aLineDistAtMetricBox);
417*766ce4d0SZheng Fan 				}
418*766ce4d0SZheng Fan 				else
419*766ce4d0SZheng Fan 				{
420*766ce4d0SZheng Fan 					pActLineDistFld = &(aLineDistAtPercentBox);
421*766ce4d0SZheng Fan 					pActLineDistFld->Disable();
422*766ce4d0SZheng Fan 					pActLineDistFld->Hide();
423*766ce4d0SZheng Fan 					pActLineDistFld = &(aLineDistAtMetricBox);
424*766ce4d0SZheng Fan 				}
425*766ce4d0SZheng Fan 				pActLineDistFld->Enable();
426*766ce4d0SZheng Fan 				pActLineDistFld->Show();
427*766ce4d0SZheng Fan 				maLineSpacing.SetSelItem(0);
428*766ce4d0SZheng Fan 
429*766ce4d0SZheng Fan 				SetMetricValue(aLineDistAtMetricBox, currSPItem->GetLineHeight(), eUnit);
430*766ce4d0SZheng Fan 				aLineDist.SelectEntryPos( LLINESPACE_FIX );
431*766ce4d0SZheng Fan 
432*766ce4d0SZheng Fan 				mbUseLineSPCustom = USE_CUSTOM;
433*766ce4d0SZheng Fan 			}
434*766ce4d0SZheng Fan 			break;
435*766ce4d0SZheng Fan 
436*766ce4d0SZheng Fan 		case SVX_LINE_SPACE_MIN:
437*766ce4d0SZheng Fan 			{
438*766ce4d0SZheng Fan 				if(pActLineDistFld != &(aLineDistAtMetricBox))
439*766ce4d0SZheng Fan 				{
440*766ce4d0SZheng Fan 					pActLineDistFld->Disable();
441*766ce4d0SZheng Fan 					pActLineDistFld->Hide();
442*766ce4d0SZheng Fan 					pActLineDistFld = &(aLineDistAtMetricBox);
443*766ce4d0SZheng Fan 				}
444*766ce4d0SZheng Fan 				else
445*766ce4d0SZheng Fan 				{
446*766ce4d0SZheng Fan 					pActLineDistFld = &(aLineDistAtPercentBox);
447*766ce4d0SZheng Fan 					pActLineDistFld->Disable();
448*766ce4d0SZheng Fan 					pActLineDistFld->Hide();
449*766ce4d0SZheng Fan 					pActLineDistFld = &(aLineDistAtMetricBox);
450*766ce4d0SZheng Fan 				}
451*766ce4d0SZheng Fan 				pActLineDistFld->Enable();
452*766ce4d0SZheng Fan 				pActLineDistFld->Show();
453*766ce4d0SZheng Fan 				maLineSpacing.SetSelItem(0);
454*766ce4d0SZheng Fan 
455*766ce4d0SZheng Fan 				SetMetricValue(aLineDistAtMetricBox, currSPItem->GetLineHeight(), eUnit);
456*766ce4d0SZheng Fan 				aLineDist.SelectEntryPos( LLINESPACE_MIN );
457*766ce4d0SZheng Fan 				mbUseLineSPCustom = USE_CUSTOM;
458*766ce4d0SZheng Fan 			}
459*766ce4d0SZheng Fan 			break;
460*766ce4d0SZheng Fan 		}
461*766ce4d0SZheng Fan 	}
462*766ce4d0SZheng Fan 	else if( eState == SFX_ITEM_DISABLED )
463*766ce4d0SZheng Fan 	{
464*766ce4d0SZheng Fan 		aLineDist.Disable();
465*766ce4d0SZheng Fan 		pActLineDistFld->Enable(sal_False);
466*766ce4d0SZheng Fan 		pActLineDistFld->SetText( String() );
467*766ce4d0SZheng Fan 		maLineSpacing.SetSelItem(0);
468*766ce4d0SZheng Fan 
469*766ce4d0SZheng Fan 	    mbUseLineSPCustom = DO_NOT_CUSTOM;
470*766ce4d0SZheng Fan 	}
471*766ce4d0SZheng Fan 	else
472*766ce4d0SZheng Fan 	{
473*766ce4d0SZheng Fan 		pActLineDistFld->Enable(sal_False);
474*766ce4d0SZheng Fan 		pActLineDistFld->SetText( String() );
475*766ce4d0SZheng Fan 		aLineDist.SetNoSelection();
476*766ce4d0SZheng Fan 		maLineSpacing.SetSelItem(0);
477*766ce4d0SZheng Fan 		mbUseLineSPCustom = DO_NOT_CUSTOM;
478*766ce4d0SZheng Fan 	}
479*766ce4d0SZheng Fan 
480*766ce4d0SZheng Fan 	aLineDist.SaveValue();
481*766ce4d0SZheng Fan 
482*766ce4d0SZheng Fan 	/*sal_uInt16 nID = pBox->GetCurItemId();
483*766ce4d0SZheng Fan 	pBox->SetItemDown(nID, sal_True);
484*766ce4d0SZheng Fan 
485*766ce4d0SZheng Fan 	Size aFloatSz = GetOutputSizePixel();
486*766ce4d0SZheng Fan 
487*766ce4d0SZheng Fan 	GetLineSPFloatWin()->SetSizePixel( aFloatSz );
488*766ce4d0SZheng Fan 
489*766ce4d0SZheng Fan 	Point aPos=maLineSPTbx->GetPosPixel();
490*766ce4d0SZheng Fan 	aPos.setX(aPos.getX());
491*766ce4d0SZheng Fan 	aPos = OutputToScreenPixel( aPos );
492*766ce4d0SZheng Fan 	Size aSize = maLineSPTbx->GetSizePixel();
493*766ce4d0SZheng Fan 	Rectangle aRect( aPos, aSize );
494*766ce4d0SZheng Fan 
495*766ce4d0SZheng Fan 	GetLineSPFloatWin()->StartPopupMode( aRect, FLOATWIN_POPUPMODE_DOWN | FLOATWIN_POPUPMODE_NOFOCUSCLOSE);
496*766ce4d0SZheng Fan 	GetLineSPFloatWin()->SetPopupModeFlags(GetLineSPFloatWin()->GetPopupModeFlags() | FLOATWIN_POPUPMODE_NOAPPFOCUSCLOSE );
497*766ce4d0SZheng Fan 
498*766ce4d0SZheng Fan 	pLineSPPage->ToGetFocus(bValueSetFocus);
499*766ce4d0SZheng Fan 	*/
500*766ce4d0SZheng Fan 	sal_uInt16 uCount = aLineDist.GetEntryCount();
501*766ce4d0SZheng Fan 	if( uCount == LLINESPACE_FIX + 1 )
502*766ce4d0SZheng Fan 	{
503*766ce4d0SZheng Fan 		switch (currentContext.GetCombinedContext())
504*766ce4d0SZheng Fan 		{
505*766ce4d0SZheng Fan 			case CombinedEnumContext(Application_Impress, Context_Table):
506*766ce4d0SZheng Fan         		case CombinedEnumContext(Application_Draw, Context_Table):
507*766ce4d0SZheng Fan 			case CombinedEnumContext(Application_Writer, Context_DrawText):
508*766ce4d0SZheng Fan 			case CombinedEnumContext(Application_Calc, Context_DrawText):
509*766ce4d0SZheng Fan 			case CombinedEnumContext(Application_Draw, Context_DrawText):
510*766ce4d0SZheng Fan         		case CombinedEnumContext(Application_Impress, Context_DrawText):
511*766ce4d0SZheng Fan 			case CombinedEnumContext(Application_Writer, Context_Annotation):
512*766ce4d0SZheng Fan 			case CombinedEnumContext(Application_Draw, Context_Draw):
513*766ce4d0SZheng Fan 		        case CombinedEnumContext(Application_Draw, Context_TextObject):
514*766ce4d0SZheng Fan 		        case CombinedEnumContext(Application_Draw, Context_Graphic):
515*766ce4d0SZheng Fan 		        case CombinedEnumContext(Application_Impress, Context_Draw):
516*766ce4d0SZheng Fan 		        case CombinedEnumContext(Application_Impress, Context_TextObject):
517*766ce4d0SZheng Fan 		        case CombinedEnumContext(Application_Impress, Context_Graphic):
518*766ce4d0SZheng Fan 			{
519*766ce4d0SZheng Fan 				aLineDist.RemoveEntry(LLINESPACE_FIX);
520*766ce4d0SZheng Fan 			}
521*766ce4d0SZheng Fan 		}
522*766ce4d0SZheng Fan 	}
523*766ce4d0SZheng Fan 	else if( uCount == LLINESPACE_FIX)
524*766ce4d0SZheng Fan 	{
525*766ce4d0SZheng Fan 		switch (currentContext.GetCombinedContext())
526*766ce4d0SZheng Fan 		{
527*766ce4d0SZheng Fan 			case CombinedEnumContext(Application_Writer, Context_Default):
528*766ce4d0SZheng Fan 			case CombinedEnumContext(Application_Writer, Context_Text):
529*766ce4d0SZheng Fan 			case CombinedEnumContext(Application_Writer, Context_Table):
530*766ce4d0SZheng Fan 			{
531*766ce4d0SZheng Fan 				aLineDist.InsertEntry(String::CreateFromAscii("Fixed"), LLINESPACE_FIX);
532*766ce4d0SZheng Fan 			}
533*766ce4d0SZheng Fan 		}
534*766ce4d0SZheng Fan 	}
535*766ce4d0SZheng Fan 	maLineSpacing.Format();
536*766ce4d0SZheng Fan 	maLineSpacing.StartSelection();
537*766ce4d0SZheng Fan }
538*766ce4d0SZheng Fan 
539*766ce4d0SZheng Fan void ParaLineSpacingControl::SetAllNoSel()
540*766ce4d0SZheng Fan {
541*766ce4d0SZheng Fan 	maLineSpacing.SelectItem(1);	//modified by wj for sym2_5397
542*766ce4d0SZheng Fan 	maLineSpacing.SetNoSelection();
543*766ce4d0SZheng Fan }
544*766ce4d0SZheng Fan 
545*766ce4d0SZheng Fan IMPL_LINK( ParaLineSpacingControl, LineSPDistHdl_Impl, ListBox*, pBox )
546*766ce4d0SZheng Fan {
547*766ce4d0SZheng Fan 	maLineSpacing.SetNoSelection();
548*766ce4d0SZheng Fan 	maLineSpacing.SetSelItem(0);
549*766ce4d0SZheng Fan 	maLineSpacing.Format();
550*766ce4d0SZheng Fan 	maLineSpacing.StartSelection();
551*766ce4d0SZheng Fan 
552*766ce4d0SZheng Fan 	switch( pBox->GetSelectEntryPos() )
553*766ce4d0SZheng Fan 	{
554*766ce4d0SZheng Fan 		case LLINESPACE_1:
555*766ce4d0SZheng Fan 		case LLINESPACE_15:
556*766ce4d0SZheng Fan 		case LLINESPACE_2:
557*766ce4d0SZheng Fan 			pActLineDistFld->Enable(sal_False);
558*766ce4d0SZheng Fan 			pActLineDistFld->SetText( String() );
559*766ce4d0SZheng Fan 			break;
560*766ce4d0SZheng Fan 
561*766ce4d0SZheng Fan 		case LLINESPACE_DURCH:
562*766ce4d0SZheng Fan 			aLineDistAtPercentBox.Hide();
563*766ce4d0SZheng Fan 			pActLineDistFld = &aLineDistAtMetricBox;
564*766ce4d0SZheng Fan 			aLineDistAtMetricBox.SetMin(0);
565*766ce4d0SZheng Fan 
566*766ce4d0SZheng Fan 
567*766ce4d0SZheng Fan 			if ( !aLineDistAtMetricBox.GetText().Len() )
568*766ce4d0SZheng Fan 				aLineDistAtMetricBox.SetValue(
569*766ce4d0SZheng Fan 					aLineDistAtMetricBox.Normalize( 0 ) );
570*766ce4d0SZheng Fan 			aLineDistAtPercentBox.Hide();
571*766ce4d0SZheng Fan 			pActLineDistFld->Show();
572*766ce4d0SZheng Fan 			pActLineDistFld->Enable();
573*766ce4d0SZheng Fan 			break;
574*766ce4d0SZheng Fan 
575*766ce4d0SZheng Fan 		case LLINESPACE_MIN:
576*766ce4d0SZheng Fan 			aLineDistAtPercentBox.Hide();
577*766ce4d0SZheng Fan 			pActLineDistFld = &aLineDistAtMetricBox;
578*766ce4d0SZheng Fan 			aLineDistAtMetricBox.SetMin(0);
579*766ce4d0SZheng Fan 
580*766ce4d0SZheng Fan 			if ( !aLineDistAtMetricBox.GetText().Len() )
581*766ce4d0SZheng Fan 				aLineDistAtMetricBox.SetValue(
582*766ce4d0SZheng Fan 					aLineDistAtMetricBox.Normalize( 0 ), FUNIT_TWIP );
583*766ce4d0SZheng Fan 			aLineDistAtPercentBox.Hide();
584*766ce4d0SZheng Fan 			pActLineDistFld->Show();
585*766ce4d0SZheng Fan 			pActLineDistFld->Enable();
586*766ce4d0SZheng Fan 			break;
587*766ce4d0SZheng Fan 
588*766ce4d0SZheng Fan 		case LLINESPACE_PROP:
589*766ce4d0SZheng Fan 			aLineDistAtMetricBox.Hide();
590*766ce4d0SZheng Fan 			pActLineDistFld = &aLineDistAtPercentBox;
591*766ce4d0SZheng Fan 
592*766ce4d0SZheng Fan 			if ( !aLineDistAtPercentBox.GetText().Len() )
593*766ce4d0SZheng Fan 				aLineDistAtPercentBox.SetValue(
594*766ce4d0SZheng Fan 					aLineDistAtPercentBox.Normalize( 100 ), FUNIT_TWIP );
595*766ce4d0SZheng Fan 			aLineDistAtMetricBox.Hide();
596*766ce4d0SZheng Fan 			pActLineDistFld->Show();
597*766ce4d0SZheng Fan 			pActLineDistFld->Enable();
598*766ce4d0SZheng Fan 			break;
599*766ce4d0SZheng Fan 		case LLINESPACE_FIX:
600*766ce4d0SZheng Fan 		{
601*766ce4d0SZheng Fan 			aLineDistAtPercentBox.Hide();
602*766ce4d0SZheng Fan 			pActLineDistFld = &aLineDistAtMetricBox;
603*766ce4d0SZheng Fan 			sal_Int64 nTemp = aLineDistAtMetricBox.GetValue();
604*766ce4d0SZheng Fan 			aLineDistAtMetricBox.SetMin(aLineDistAtMetricBox.Normalize(nMinFixDist), FUNIT_TWIP);
605*766ce4d0SZheng Fan 
606*766ce4d0SZheng Fan 			if ( aLineDistAtMetricBox.GetValue() != nTemp )
607*766ce4d0SZheng Fan 				SetMetricValue( aLineDistAtMetricBox,
608*766ce4d0SZheng Fan 									FIX_DIST_DEF, SFX_MAPUNIT_TWIP );
609*766ce4d0SZheng Fan 			aLineDistAtPercentBox.Hide();
610*766ce4d0SZheng Fan 			pActLineDistFld->Show();
611*766ce4d0SZheng Fan 			pActLineDistFld->Enable();
612*766ce4d0SZheng Fan 		}
613*766ce4d0SZheng Fan 		break;
614*766ce4d0SZheng Fan 	}
615*766ce4d0SZheng Fan 	ExecuteLineSpace();
616*766ce4d0SZheng Fan 	return 0;
617*766ce4d0SZheng Fan }
618*766ce4d0SZheng Fan 
619*766ce4d0SZheng Fan IMPL_LINK( ParaLineSpacingControl, LineSPDistAtHdl_Impl, MetricField*, pBox )
620*766ce4d0SZheng Fan {
621*766ce4d0SZheng Fan 	ExecuteLineSpace();
622*766ce4d0SZheng Fan 	return (0L);
623*766ce4d0SZheng Fan }
624*766ce4d0SZheng Fan 
625*766ce4d0SZheng Fan void ParaLineSpacingControl::ExecuteLineSpace()
626*766ce4d0SZheng Fan {
627*766ce4d0SZheng Fan 	aLineDist.SaveValue();
628*766ce4d0SZheng Fan 	maLineSpacing.SetNoSelection();
629*766ce4d0SZheng Fan 
630*766ce4d0SZheng Fan 	SvxLineSpacingItem aSpacing(_DEFAULT_LINE_SPACING, SID_ATTR_PARA_LINESPACE);
631*766ce4d0SZheng Fan 	sal_uInt16 nPos = aLineDist.GetSelectEntryPos();
632*766ce4d0SZheng Fan 
633*766ce4d0SZheng Fan 	switch ( nPos )
634*766ce4d0SZheng Fan 	{
635*766ce4d0SZheng Fan 		case LLINESPACE_1:
636*766ce4d0SZheng Fan 		case LLINESPACE_15:
637*766ce4d0SZheng Fan 		case LLINESPACE_2:
638*766ce4d0SZheng Fan 			{
639*766ce4d0SZheng Fan 				SetLineSpace( aSpacing, nPos );
640*766ce4d0SZheng Fan 				maPos = nPos;
641*766ce4d0SZheng Fan 			}
642*766ce4d0SZheng Fan 			break;
643*766ce4d0SZheng Fan 
644*766ce4d0SZheng Fan 		case LLINESPACE_PROP:
645*766ce4d0SZheng Fan 			{
646*766ce4d0SZheng Fan 				SetLineSpace( aSpacing, nPos,
647*766ce4d0SZheng Fan 					aLineDistAtPercentBox.Denormalize(
648*766ce4d0SZheng Fan 					(long)aLineDistAtPercentBox.GetValue() ) );
649*766ce4d0SZheng Fan 				maPos = nPos;
650*766ce4d0SZheng Fan 				maValue =aLineDistAtPercentBox.GetValue();
651*766ce4d0SZheng Fan 			}
652*766ce4d0SZheng Fan 			break;
653*766ce4d0SZheng Fan 
654*766ce4d0SZheng Fan 		case LLINESPACE_MIN:
655*766ce4d0SZheng Fan 		case LLINESPACE_DURCH:
656*766ce4d0SZheng Fan 		case LLINESPACE_FIX:
657*766ce4d0SZheng Fan 			{
658*766ce4d0SZheng Fan 				SetLineSpace( aSpacing, nPos,
659*766ce4d0SZheng Fan 					GetCoreValue( aLineDistAtMetricBox, m_eLNSpaceUnit ) );
660*766ce4d0SZheng Fan 				maPos = nPos;
661*766ce4d0SZheng Fan 				maValue = GetCoreValue( aLineDistAtMetricBox, m_eLNSpaceUnit );
662*766ce4d0SZheng Fan 			}
663*766ce4d0SZheng Fan 		break;
664*766ce4d0SZheng Fan 
665*766ce4d0SZheng Fan 		default:
666*766ce4d0SZheng Fan 			DBG_ERROR( "error!!" );
667*766ce4d0SZheng Fan 			break;
668*766ce4d0SZheng Fan 	}
669*766ce4d0SZheng Fan 
670*766ce4d0SZheng Fan 	mpBindings->GetDispatcher()->Execute(
671*766ce4d0SZheng Fan 			SID_ATTR_PARA_LINESPACE, SFX_CALLMODE_RECORD, &aSpacing, 0L);
672*766ce4d0SZheng Fan 
673*766ce4d0SZheng Fan 	mbUseLineSPCustom = USE_CUSTOM;
674*766ce4d0SZheng Fan }
675*766ce4d0SZheng Fan 
676*766ce4d0SZheng Fan void ParaLineSpacingControl::SetLineSpace( SvxLineSpacingItem& rLineSpace,
677*766ce4d0SZheng Fan 						int eSpace, long lValue )
678*766ce4d0SZheng Fan {
679*766ce4d0SZheng Fan 	switch ( eSpace )
680*766ce4d0SZheng Fan 	{
681*766ce4d0SZheng Fan 		case LLINESPACE_1:
682*766ce4d0SZheng Fan 			rLineSpace.GetLineSpaceRule() = SVX_LINE_SPACE_AUTO;
683*766ce4d0SZheng Fan 			rLineSpace.GetInterLineSpaceRule() = SVX_INTER_LINE_SPACE_OFF;
684*766ce4d0SZheng Fan 			break;
685*766ce4d0SZheng Fan 
686*766ce4d0SZheng Fan 		case LLINESPACE_15:
687*766ce4d0SZheng Fan 			rLineSpace.GetLineSpaceRule() = SVX_LINE_SPACE_AUTO;
688*766ce4d0SZheng Fan 			rLineSpace.SetPropLineSpace( LINESPACE_15 );
689*766ce4d0SZheng Fan 			break;
690*766ce4d0SZheng Fan 
691*766ce4d0SZheng Fan 		case LLINESPACE_2:
692*766ce4d0SZheng Fan 			rLineSpace.GetLineSpaceRule() = SVX_LINE_SPACE_AUTO;
693*766ce4d0SZheng Fan 			rLineSpace.SetPropLineSpace( LINESPACE_2 );
694*766ce4d0SZheng Fan 			break;
695*766ce4d0SZheng Fan 
696*766ce4d0SZheng Fan 		case LLINESPACE_PROP:
697*766ce4d0SZheng Fan 			rLineSpace.GetLineSpaceRule() = SVX_LINE_SPACE_AUTO;
698*766ce4d0SZheng Fan 			rLineSpace.SetPropLineSpace( (sal_uInt8)lValue );
699*766ce4d0SZheng Fan 			break;
700*766ce4d0SZheng Fan 
701*766ce4d0SZheng Fan 		case LLINESPACE_MIN:
702*766ce4d0SZheng Fan 			rLineSpace.SetLineHeight( (sal_uInt16)lValue );
703*766ce4d0SZheng Fan 			rLineSpace.GetInterLineSpaceRule() = SVX_INTER_LINE_SPACE_OFF;
704*766ce4d0SZheng Fan 			break;
705*766ce4d0SZheng Fan 
706*766ce4d0SZheng Fan 		case LLINESPACE_DURCH:
707*766ce4d0SZheng Fan 			rLineSpace.GetLineSpaceRule() = SVX_LINE_SPACE_AUTO;
708*766ce4d0SZheng Fan 			rLineSpace.SetInterLineSpace( (sal_uInt16)lValue );
709*766ce4d0SZheng Fan 			break;
710*766ce4d0SZheng Fan 
711*766ce4d0SZheng Fan 		case LLINESPACE_FIX:
712*766ce4d0SZheng Fan 			rLineSpace.SetLineHeight((sal_uInt16)lValue);
713*766ce4d0SZheng Fan 			rLineSpace.GetLineSpaceRule() = SVX_LINE_SPACE_FIX;
714*766ce4d0SZheng Fan 			rLineSpace.GetInterLineSpaceRule() = SVX_INTER_LINE_SPACE_OFF;
715*766ce4d0SZheng Fan 		break;
716*766ce4d0SZheng Fan 	}
717*766ce4d0SZheng Fan }
718*766ce4d0SZheng Fan 
719*766ce4d0SZheng Fan IMPL_LINK(ParaLineSpacingControl, VSSelHdl, void *, pControl)
720*766ce4d0SZheng Fan {
721*766ce4d0SZheng Fan 	maLineSpacing.SetNoSelection();
722*766ce4d0SZheng Fan 	bool bClosePop = true;
723*766ce4d0SZheng Fan 	if(pControl == &maLineSpacing)
724*766ce4d0SZheng Fan 	{
725*766ce4d0SZheng Fan 		sal_uInt16 iPos = maLineSpacing.GetSelectItemId();
726*766ce4d0SZheng Fan 		short nKern = 0;
727*766ce4d0SZheng Fan 		long nVal = 0;
728*766ce4d0SZheng Fan 		switch ( iPos )
729*766ce4d0SZheng Fan 		{
730*766ce4d0SZheng Fan 			case 1:
731*766ce4d0SZheng Fan 				ExecuteLineSpacing( 0, 0 );
732*766ce4d0SZheng Fan 				break;
733*766ce4d0SZheng Fan 			case 2:
734*766ce4d0SZheng Fan 				ExecuteLineSpacing( 0, 3 );
735*766ce4d0SZheng Fan 				break;
736*766ce4d0SZheng Fan 			case 3:
737*766ce4d0SZheng Fan 				ExecuteLineSpacing( 0, 1 );
738*766ce4d0SZheng Fan 				break;
739*766ce4d0SZheng Fan 			case 4:
740*766ce4d0SZheng Fan 				ExecuteLineSpacing( 0, 2 );
741*766ce4d0SZheng Fan 				break;
742*766ce4d0SZheng Fan 			case 5:
743*766ce4d0SZheng Fan 				{
744*766ce4d0SZheng Fan 					if(!(mbLineSPDisable))
745*766ce4d0SZheng Fan 					{
746*766ce4d0SZheng Fan 						//maPos = mrParaPropertyPanel.maLinePos;
747*766ce4d0SZheng Fan 						aLineDist.SelectEntryPos( maPos ) ;
748*766ce4d0SZheng Fan 						aLineDist.SaveValue();
749*766ce4d0SZheng Fan 						//maValue = mrParaPropertyPanel.maLineValue;
750*766ce4d0SZheng Fan 
751*766ce4d0SZheng Fan 						SvxLineSpacingItem aSpacing(_DEFAULT_LINE_SPACING, SID_ATTR_PARA_LINESPACE);
752*766ce4d0SZheng Fan 						switch(maPos)
753*766ce4d0SZheng Fan 						{
754*766ce4d0SZheng Fan 						case LLINESPACE_1:
755*766ce4d0SZheng Fan 						case LLINESPACE_15:
756*766ce4d0SZheng Fan 						case LLINESPACE_2:
757*766ce4d0SZheng Fan 							SetLineSpace( aSpacing, maPos );
758*766ce4d0SZheng Fan 							break;
759*766ce4d0SZheng Fan 
760*766ce4d0SZheng Fan 						case LLINESPACE_PROP:
761*766ce4d0SZheng Fan 							SetLineSpace( aSpacing, maPos,
762*766ce4d0SZheng Fan 								aLineDistAtPercentBox.Denormalize( (long)maValue ) );
763*766ce4d0SZheng Fan 							break;
764*766ce4d0SZheng Fan 
765*766ce4d0SZheng Fan 						case LLINESPACE_MIN:
766*766ce4d0SZheng Fan 						case LLINESPACE_DURCH:
767*766ce4d0SZheng Fan 						case LLINESPACE_FIX:
768*766ce4d0SZheng Fan 							SetLineSpace( aSpacing, maPos, (long)maValue );
769*766ce4d0SZheng Fan 							break;
770*766ce4d0SZheng Fan 						}
771*766ce4d0SZheng Fan 
772*766ce4d0SZheng Fan 						mpBindings->GetDispatcher()->Execute(
773*766ce4d0SZheng Fan 							SID_ATTR_PARA_LINESPACE, SFX_CALLMODE_RECORD, &aSpacing, 0L);
774*766ce4d0SZheng Fan 
775*766ce4d0SZheng Fan 						ExecuteLineSpacing( USE_CUSTOM, 0 );
776*766ce4d0SZheng Fan 					}
777*766ce4d0SZheng Fan 					else
778*766ce4d0SZheng Fan 						bClosePop = sal_False;
779*766ce4d0SZheng Fan 				}
780*766ce4d0SZheng Fan 				break;
781*766ce4d0SZheng Fan 		}
782*766ce4d0SZheng Fan 	}
783*766ce4d0SZheng Fan 	if(bClosePop)
784*766ce4d0SZheng Fan 		mrParaPropertyPanel.EndSpacingPopupMode();
785*766ce4d0SZheng Fan 	return 0;
786*766ce4d0SZheng Fan }
787*766ce4d0SZheng Fan 
788*766ce4d0SZheng Fan void ParaLineSpacingControl::ExecuteLineSpacing( sal_uInt16 aIsCustom, sal_uInt16 aEntry )
789*766ce4d0SZheng Fan {
790*766ce4d0SZheng Fan 	if( !aIsCustom )
791*766ce4d0SZheng Fan 	{
792*766ce4d0SZheng Fan 		aLineDist.SelectEntryPos( aEntry ) ;
793*766ce4d0SZheng Fan 		aLineDist.SaveValue();
794*766ce4d0SZheng Fan 		SvxLineSpacingItem aSpacing(_DEFAULT_LINE_SPACING, SID_ATTR_PARA_LINESPACE);
795*766ce4d0SZheng Fan 		sal_uInt16 nPos = aEntry;
796*766ce4d0SZheng Fan 		if( aEntry == LLINESPACE_PROP )
797*766ce4d0SZheng Fan 			SetLineSpace( aSpacing, nPos, aLineDistAtPercentBox.Denormalize( (long)115 ) );
798*766ce4d0SZheng Fan 		else
799*766ce4d0SZheng Fan 			SetLineSpace( aSpacing, nPos );
800*766ce4d0SZheng Fan 
801*766ce4d0SZheng Fan 		mpBindings->GetDispatcher()->Execute(
802*766ce4d0SZheng Fan 			SID_ATTR_PARA_LINESPACE, SFX_CALLMODE_RECORD, &aSpacing, 0L);
803*766ce4d0SZheng Fan 	}
804*766ce4d0SZheng Fan 
805*766ce4d0SZheng Fan 	if( !aIsCustom )
806*766ce4d0SZheng Fan 	{
807*766ce4d0SZheng Fan 		mbUseLineSPCustom = DO_NOT_CUSTOM;
808*766ce4d0SZheng Fan 		mrParaPropertyPanel.EndSpacingPopupMode();
809*766ce4d0SZheng Fan 	}
810*766ce4d0SZheng Fan 	maLineSpacing.SetNoSelection();
811*766ce4d0SZheng Fan }
812*766ce4d0SZheng Fan 
813*766ce4d0SZheng Fan }} // end of namespace sidebar
814*766ce4d0SZheng Fan 
815