xref: /trunk/main/cui/source/tabpages/measure.cxx (revision 2ee96f1c)
1 /**************************************************************
2  *
3  * Licensed to the Apache Software Foundation (ASF) under one
4  * or more contributor license agreements.  See the NOTICE file
5  * distributed with this work for additional information
6  * regarding copyright ownership.  The ASF licenses this file
7  * to you under the Apache License, Version 2.0 (the
8  * "License"); you may not use this file except in compliance
9  * with the License.  You may obtain a copy of the License at
10  *
11  *   http://www.apache.org/licenses/LICENSE-2.0
12  *
13  * Unless required by applicable law or agreed to in writing,
14  * software distributed under the License is distributed on an
15  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16  * KIND, either express or implied.  See the License for the
17  * specific language governing permissions and limitations
18  * under the License.
19  *
20  *************************************************************/
21 
22 
23 
24 // MARKER(update_precomp.py): autogen include statement, do not remove
25 #include "precompiled_cui.hxx"
26 
27 // include ---------------------------------------------------------------
28 #include <sfx2/app.hxx>
29 #include <sfx2/module.hxx>
30 #include <tools/shl.hxx>
31 
32 #include <cuires.hrc>
33 
34 #define _SVX_MEASURE_CXX
35 
36 #include <svx/svdomeas.hxx>
37 #include <svx/svdattr.hxx>
38 #include <svx/svdattrx.hxx>
39 #include <svx/svdview.hxx>
40 #include <svx/dialogs.hrc>
41 #include <svx/dialmgr.hxx>
42 #include "svx/measctrl.hxx"
43 #include "measure.hxx"
44 #include "measure.hrc"
45 #include <dialmgr.hxx>
46 #include "svx/dlgutil.hxx"
47 #include <svx/strarray.hxx>
48 #include <sfx2/request.hxx> //add CHINA001
49 #include "svx/ofaitem.hxx" //add CHINA001
50 
51 static sal_uInt16 pRanges[] =
52 {
53 	SDRATTR_MEASURE_FIRST,
54 	SDRATTR_MEASURE_LAST,
55 	0
56 };
57 
58 /*************************************************************************
59 |*
60 |* Dialog to change measure-attributes
61 |*
62 \************************************************************************/
63 
SvxMeasureDialog(Window * pParent,const SfxItemSet & rInAttrs,const SdrView * pSdrView)64 SvxMeasureDialog::SvxMeasureDialog( Window* pParent, const SfxItemSet& rInAttrs,
65 								const SdrView* pSdrView ) :
66 		SfxSingleTabDialog( pParent, rInAttrs, RID_SVXPAGE_MEASURE )
67 {
68     SvxMeasurePage* _pPage = new SvxMeasurePage( this, rInAttrs );
69 
70     _pPage->SetView( pSdrView );
71     _pPage->Construct();
72 
73     SetTabPage( _pPage );
74     SetText( _pPage->GetText() );
75 }
76 
77 /*************************************************************************
78 |*
79 |* Dtor
80 |*
81 \************************************************************************/
82 
~SvxMeasureDialog()83 SvxMeasureDialog::~SvxMeasureDialog()
84 {
85 }
86 
87 /*************************************************************************
88 |*
89 |* Tabpage for changing measure-attributes
90 |*
91 \************************************************************************/
92 
SvxMeasurePage(Window * pWindow,const SfxItemSet & rInAttrs)93 SvxMeasurePage::SvxMeasurePage( Window* pWindow, const SfxItemSet& rInAttrs ) :
94 				SvxTabPage		( pWindow, CUI_RES( RID_SVXPAGE_MEASURE ),
95 								  rInAttrs ),
96 
97         aFlLine                 ( this, CUI_RES( FL_LINE ) ),
98 		aFtLineDist				( this, CUI_RES( FT_LINE_DIST ) ),
99 		aMtrFldLineDist			( this, CUI_RES( MTR_LINE_DIST ) ),
100 		aFtHelplineOverhang		( this, CUI_RES( FT_HELPLINE_OVERHANG ) ),
101 		aMtrFldHelplineOverhang	( this, CUI_RES( MTR_FLD_HELPLINE_OVERHANG ) ),
102 		aFtHelplineDist			( this, CUI_RES( FT_HELPLINE_DIST ) ),
103 		aMtrFldHelplineDist		( this, CUI_RES( MTR_FLD_HELPLINE_DIST ) ),
104 		aFtHelpline1Len			( this, CUI_RES( FT_HELPLINE1_LEN ) ),
105 		aMtrFldHelpline1Len		( this, CUI_RES( MTR_FLD_HELPLINE1_LEN ) ),
106 		aFtHelpline2Len			( this, CUI_RES( FT_HELPLINE2_LEN ) ),
107 		aMtrFldHelpline2Len		( this, CUI_RES( MTR_FLD_HELPLINE2_LEN ) ),
108 		aTsbBelowRefEdge		( this, CUI_RES( TSB_BELOW_REF_EDGE ) ),
109 		aFtDecimalPlaces		( this, CUI_RES( FT_DECIMALPLACES ) ),
110 		aMtrFldDecimalPlaces	( this, CUI_RES( MTR_FLD_DECIMALPLACES ) ),
111 
112 		aFlLabel    			( this, CUI_RES( FL_LABEL ) ),
113         aFtPosition             ( this, CUI_RES( FT_POSITION ) ),
114         aCtlPosition            ( this, CUI_RES( CTL_POSITION ) ),
115         aTsbAutoPosV            ( this, CUI_RES( TSB_AUTOPOSV ) ),
116         aTsbAutoPosH            ( this, CUI_RES( TSB_AUTOPOSH ) ),
117         aTsbShowUnit            ( this, CUI_RES( TSB_SHOW_UNIT ) ),
118         aLbUnit                 ( this, CUI_RES( LB_UNIT ) ),
119         aTsbParallel            ( this, CUI_RES( TSB_PARALLEL ) ),
120         aCtlPreview             ( this, CUI_RES( CTL_PREVIEW ), rInAttrs ),
121 
122         aFlVert                 ( this, CUI_RES( FL_VERT ) ),
123         rOutAttrs               ( rInAttrs ),
124         aAttrSet                ( *rInAttrs.GetPool() ),
125         pView( 0 ),
126 
127         bPositionModified       ( sal_False )
128 {
129 	aCtlPreview.SetAccessibleName(aCtlPreview.GetHelpText());
130 	FillUnitLB();
131 
132 	FreeResource();
133 
134 	const FieldUnit eFUnit = GetModuleFieldUnit( rInAttrs );
135 	SetFieldUnit( aMtrFldLineDist, eFUnit );
136 	SetFieldUnit( aMtrFldHelplineOverhang, eFUnit );
137 	SetFieldUnit( aMtrFldHelplineDist, eFUnit );
138 	SetFieldUnit( aMtrFldHelpline1Len, eFUnit );
139 	SetFieldUnit( aMtrFldHelpline2Len, eFUnit );
140 	if( eFUnit == FUNIT_MM )
141 	{
142 		aMtrFldLineDist.SetSpinSize( 50 );
143 		aMtrFldHelplineOverhang.SetSpinSize( 50 );
144 		aMtrFldHelplineDist.SetSpinSize( 50 );
145 		aMtrFldHelpline1Len.SetSpinSize( 50 );
146 		aMtrFldHelpline2Len.SetSpinSize( 50 );
147 	}
148 
149 	aTsbAutoPosV.SetClickHdl( LINK( this, SvxMeasurePage, ClickAutoPosHdl_Impl ) );
150 	aTsbAutoPosH.SetClickHdl( LINK( this, SvxMeasurePage, ClickAutoPosHdl_Impl ) );
151 
152 	// set background and border of iconchoicectrl
153 	const StyleSettings& rStyles = Application::GetSettings().GetStyleSettings();
154 	aCtlPreview.SetBackground ( rStyles.GetWindowColor() );
155 	aCtlPreview.SetBorderStyle(WINDOW_BORDER_MONO);
156 
157 	Link aLink( LINK( this, SvxMeasurePage, ChangeAttrHdl_Impl ) );
158 	aMtrFldLineDist.SetModifyHdl( aLink );
159 	aMtrFldHelplineOverhang.SetModifyHdl( aLink );
160 	aMtrFldHelplineDist.SetModifyHdl( aLink );
161 	aMtrFldHelpline1Len.SetModifyHdl( aLink );
162 	aMtrFldHelpline2Len.SetModifyHdl( aLink );
163 	aMtrFldDecimalPlaces.SetModifyHdl( aLink );
164 	aTsbBelowRefEdge.SetClickHdl( aLink );
165 	aTsbParallel.SetClickHdl( aLink );
166 	aTsbShowUnit.SetClickHdl( aLink );
167 	aLbUnit.SetSelectHdl( aLink );
168 	aLbUnit.SetAccessibleName(GetNonMnemonicString(aTsbShowUnit.GetText()));
169 	aCtlPosition.SetAccessibleRelationMemberOf( &aFlLabel );
170 	aLbUnit.SetAccessibleRelationLabeledBy( &aTsbShowUnit );
171 }
172 
173 /*************************************************************************
174 |*
175 |* Dtor
176 |*
177 \************************************************************************/
178 
~SvxMeasurePage()179 SvxMeasurePage::~SvxMeasurePage()
180 {
181 }
182 
183 /*************************************************************************
184 |*
185 |* read the delivered Item-Set
186 |*
187 \************************************************************************/
188 
Reset(const SfxItemSet & rAttrs)189 void __EXPORT SvxMeasurePage::Reset( const SfxItemSet& rAttrs )
190 {
191 	SfxItemPool* pPool = rAttrs.GetPool();
192 	DBG_ASSERT( pPool, "Wo ist der Pool" );
193 	eUnit = pPool->GetMetric( SDRATTR_MEASURELINEDIST );
194 
195 	const SfxPoolItem* pItem = GetItem( rAttrs, SDRATTR_MEASURELINEDIST );
196 
197 	// SdrMeasureLineDistItem
198     if( pItem == NULL )
199         pItem = &pPool->GetDefaultItem( SDRATTR_MEASURELINEDIST );
200 	if( pItem )
201 	{
202 		long nValue = ( ( const SdrMeasureLineDistItem* )pItem )->GetValue();
203 		SetMetricValue( aMtrFldLineDist, nValue, eUnit );
204 	}
205 	else
206 	{
207 		aMtrFldLineDist.SetText( String() );
208 	}
209 	aMtrFldLineDist.SaveValue();
210 
211 	// SdrMeasureHelplineOverhangItem
212 	pItem = GetItem( rAttrs, SDRATTR_MEASUREHELPLINEOVERHANG );
213     if( pItem == NULL )
214         pItem = &pPool->GetDefaultItem( SDRATTR_MEASUREHELPLINEOVERHANG );
215 	if( pItem )
216 	{
217 		long nValue = ( ( const SdrMeasureHelplineOverhangItem* )pItem )->GetValue();
218 		SetMetricValue( aMtrFldHelplineOverhang, nValue, eUnit );
219 	}
220 	else
221 	{
222 		aMtrFldHelplineOverhang.SetText( String() );
223 	}
224 	aMtrFldHelplineOverhang.SaveValue();
225 
226 	// SdrMeasureHelplineDistItem
227 	pItem = GetItem( rAttrs, SDRATTR_MEASUREHELPLINEDIST );
228     if( pItem == NULL )
229         pItem = &pPool->GetDefaultItem( SDRATTR_MEASUREHELPLINEDIST );
230 	if( pItem )
231 	{
232 		long nValue = ( ( const SdrMeasureHelplineDistItem* )pItem )->GetValue();
233 		SetMetricValue( aMtrFldHelplineDist, nValue, eUnit );
234 	}
235 	else
236 	{
237 		aMtrFldHelplineDist.SetText( String() );
238 	}
239 	aMtrFldHelplineDist.SaveValue();
240 
241 	// SdrMeasureHelpline1LenItem
242 	pItem = GetItem( rAttrs, SDRATTR_MEASUREHELPLINE1LEN );
243     if( pItem == NULL )
244         pItem = &pPool->GetDefaultItem( SDRATTR_MEASUREHELPLINE1LEN );
245 	if( pItem )
246 	{
247 		long nValue = ( ( const SdrMeasureHelpline1LenItem* )pItem )->GetValue();
248 		SetMetricValue( aMtrFldHelpline1Len, nValue, eUnit );
249 	}
250 	else
251 	{
252 		aMtrFldHelpline1Len.SetText( String() );
253 	}
254 	aMtrFldHelpline1Len.SaveValue();
255 
256 	// SdrMeasureHelpline2LenItem
257 	pItem = GetItem( rAttrs, SDRATTR_MEASUREHELPLINE2LEN );
258     if( pItem == NULL )
259         pItem = &pPool->GetDefaultItem( SDRATTR_MEASUREHELPLINE2LEN );
260 	if( pItem )
261 	{
262 		long nValue = ( ( const SdrMeasureHelpline2LenItem* )pItem )->GetValue();
263 		SetMetricValue( aMtrFldHelpline2Len, nValue, eUnit );
264 	}
265 	else
266 	{
267 		aMtrFldHelpline2Len.SetText( String() );
268 	}
269 	aMtrFldHelpline2Len.SaveValue();
270 
271 	// SdrMeasureBelowRefEdgeItem
272 	if( rAttrs.GetItemState( SDRATTR_MEASUREBELOWREFEDGE ) != SFX_ITEM_DONTCARE )
273 	{
274 		aTsbBelowRefEdge.SetState( ( ( const SdrMeasureBelowRefEdgeItem& )rAttrs.Get( SDRATTR_MEASUREBELOWREFEDGE ) ).
275 						GetValue() ? STATE_CHECK : STATE_NOCHECK );
276 		aTsbBelowRefEdge.EnableTriState( sal_False );
277 	}
278 	else
279 	{
280 		aTsbBelowRefEdge.SetState( STATE_DONTKNOW );
281 	}
282 	aTsbBelowRefEdge.SaveValue();
283 
284 	// SdrMeasureDecimalPlacesItem
285 	pItem = GetItem( rAttrs, SDRATTR_MEASUREDECIMALPLACES );
286     if( pItem == NULL )
287         pItem = &pPool->GetDefaultItem( SDRATTR_MEASUREDECIMALPLACES );
288 	if( pItem )
289 	{
290 		sal_Int16 nValue = ( ( const SdrMeasureDecimalPlacesItem* )pItem )->GetValue();
291 		aMtrFldDecimalPlaces.SetValue( nValue );
292 	}
293 	else
294 	{
295 		aMtrFldDecimalPlaces.SetText( String() );
296 	}
297 	aMtrFldDecimalPlaces.SaveValue();
298 
299 	// SdrMeasureTextRota90Item
300 	// Attention: negate !
301 	if( rAttrs.GetItemState( SDRATTR_MEASURETEXTROTA90 ) != SFX_ITEM_DONTCARE )
302 	{
303 		aTsbParallel.SetState( ( ( const SdrMeasureTextRota90Item& )rAttrs.Get( SDRATTR_MEASURETEXTROTA90 ) ).
304 						GetValue() ? STATE_NOCHECK : STATE_CHECK );
305 		aTsbParallel.EnableTriState( sal_False );
306 	}
307 	else
308 	{
309 		aTsbParallel.SetState( STATE_DONTKNOW );
310 	}
311 	aTsbParallel.SaveValue();
312 
313 	// SdrMeasureShowUnitItem
314 	if( rAttrs.GetItemState( SDRATTR_MEASURESHOWUNIT ) != SFX_ITEM_DONTCARE )
315 	{
316 		aTsbShowUnit.SetState( ( ( const SdrMeasureShowUnitItem& )rAttrs.Get( SDRATTR_MEASURESHOWUNIT ) ).
317 						GetValue() ? STATE_CHECK : STATE_NOCHECK );
318 		aTsbShowUnit.EnableTriState( sal_False );
319 	}
320 	else
321 	{
322 		aTsbShowUnit.SetState( STATE_DONTKNOW );
323 	}
324 	aTsbShowUnit.SaveValue();
325 
326 	// SdrMeasureUnitItem
327 	if( rAttrs.GetItemState( SDRATTR_MEASUREUNIT ) != SFX_ITEM_DONTCARE )
328 	{
329 		long nFieldUnit = (long) ( ( const SdrMeasureUnitItem& )rAttrs.
330 									Get( SDRATTR_MEASUREUNIT ) ).GetValue();
331 
332 		for( sal_uInt16 i = 0; i < aLbUnit.GetEntryCount(); ++i )
333 		{
334 			if ( (long)aLbUnit.GetEntryData( i ) == nFieldUnit )
335 			{
336 				aLbUnit.SelectEntryPos( i );
337 				break;
338 			}
339 		}
340 	}
341 	else
342 	{
343 		aLbUnit.SetNoSelection();
344 	}
345 	aLbUnit.SaveValue();
346 
347 	// Position
348 	if ( rAttrs.GetItemState( SDRATTR_MEASURETEXTVPOS ) != SFX_ITEM_DONTCARE )
349 	{
350 		SdrMeasureTextVPos eVPos = (SdrMeasureTextVPos)
351 					( ( const SdrMeasureTextVPosItem& )rAttrs.Get( SDRATTR_MEASURETEXTVPOS ) ).GetValue();
352 		{
353 			if ( rAttrs.GetItemState( SDRATTR_MEASURETEXTHPOS ) != SFX_ITEM_DONTCARE )
354 			{
355 				aTsbAutoPosV.EnableTriState( sal_False );
356 				aTsbAutoPosH.EnableTriState( sal_False );
357 
358 				SdrMeasureTextHPos eHPos = (SdrMeasureTextHPos)
359 							( ( const SdrMeasureTextHPosItem& )rAttrs.Get( SDRATTR_MEASURETEXTHPOS ) ).GetValue();
360 				RECT_POINT eRP = RP_MM;
361 				switch( eVPos )
362 				{
363 				case SDRMEASURE_ABOVE:
364 					switch( eHPos )
365 					{
366 					case SDRMEASURE_TEXTLEFTOUTSIDE:	eRP = RP_LT; break;
367 					case SDRMEASURE_TEXTINSIDE:			eRP = RP_MT; break;
368 					case SDRMEASURE_TEXTRIGHTOUTSIDE:	eRP = RP_RT; break;
369 					case SDRMEASURE_TEXTHAUTO:			eRP = RP_MT; break;
370 					}
371 					break;
372 				case SDRMEASURETEXT_VERTICALCENTERED:
373 					switch( eHPos )
374 					{
375 					case SDRMEASURE_TEXTLEFTOUTSIDE:	eRP = RP_LM; break;
376 					case SDRMEASURE_TEXTINSIDE:			eRP = RP_MM; break;
377 					case SDRMEASURE_TEXTRIGHTOUTSIDE:	eRP = RP_RM; break;
378 					case SDRMEASURE_TEXTHAUTO:			eRP = RP_MM; break;
379 					}
380 					break;
381 				case SDRMEASURE_BELOW:
382 					switch( eHPos )
383 					{
384 					case SDRMEASURE_TEXTLEFTOUTSIDE:	eRP = RP_LB; break;
385 					case SDRMEASURE_TEXTINSIDE:			eRP = RP_MB; break;
386 					case SDRMEASURE_TEXTRIGHTOUTSIDE:	eRP = RP_RB; break;
387 					case SDRMEASURE_TEXTHAUTO:			eRP = RP_MB; break;
388 					}
389 					break;
390 				case SDRMEASURE_TEXTVAUTO:
391 					switch( eHPos )
392 					{
393 					case SDRMEASURE_TEXTLEFTOUTSIDE:	eRP = RP_LM; break;
394 					case SDRMEASURE_TEXTINSIDE:			eRP = RP_MM; break;
395 					case SDRMEASURE_TEXTRIGHTOUTSIDE:	eRP = RP_RM; break;
396 					case SDRMEASURE_TEXTHAUTO:			eRP = RP_MM; break;
397 					}
398 					break;
399                  default: ;//prevent warning
400 				}
401 
402 				CTL_STATE nState = 0;
403 
404 				if( eHPos == SDRMEASURE_TEXTHAUTO )
405 				{
406 					aTsbAutoPosH.SetState( STATE_CHECK );
407 					nState = CS_NOHORZ;
408 				}
409 
410 				if( eVPos == SDRMEASURE_TEXTVAUTO )
411 				{
412 					aTsbAutoPosV.SetState( STATE_CHECK );
413 					nState |= CS_NOVERT;
414 				}
415 
416 				aCtlPosition.SetState( nState );
417 				aCtlPosition.SetActualRP( eRP );
418 			}
419 		}
420 	}
421 	else
422 	{
423 		aCtlPosition.Reset();
424 		aTsbAutoPosV.SetState( STATE_DONTKNOW );
425 		aTsbAutoPosH.SetState( STATE_DONTKNOW );
426 	}
427 
428 	// put the attributes to the preview-control,
429 	// otherwise the control don't know about
430 	// the settings of the dialog (#67930)
431 	ChangeAttrHdl_Impl( &aTsbShowUnit );
432 	aCtlPreview.SetAttributes( rAttrs );
433 
434 	bPositionModified = sal_False;
435 }
436 
437 /*************************************************************************
438 |*
439 |* Fill the delivered Item-Set with dialogbox-attributes
440 |*
441 \************************************************************************/
442 
FillItemSet(SfxItemSet & rAttrs)443 sal_Bool SvxMeasurePage::FillItemSet( SfxItemSet& rAttrs)
444 {
445 	sal_Bool	 bModified = sal_False;
446 	sal_Int32	 nValue;
447 	TriState eState;
448 
449 	if( aMtrFldLineDist.GetText() != aMtrFldLineDist.GetSavedValue() )
450 	{
451 		nValue = GetCoreValue( aMtrFldLineDist, eUnit );
452 		rAttrs.Put( SdrMeasureLineDistItem( nValue ) );
453 		bModified = sal_True;
454 	}
455 
456 	if( aMtrFldHelplineOverhang.GetText() != aMtrFldHelplineOverhang.GetSavedValue() )
457 	{
458 		nValue = GetCoreValue( aMtrFldHelplineOverhang, eUnit );
459 		rAttrs.Put( SdrMeasureHelplineOverhangItem( nValue ) );
460 		bModified = sal_True;
461 	}
462 
463 	if( aMtrFldHelplineDist.GetText() != aMtrFldHelplineDist.GetSavedValue() )
464 	{
465 		nValue = GetCoreValue( aMtrFldHelplineDist, eUnit );
466 		rAttrs.Put( SdrMeasureHelplineDistItem( nValue ) );
467 		bModified = sal_True;
468 	}
469 
470 	if( aMtrFldHelpline1Len.GetText() != aMtrFldHelpline1Len.GetSavedValue() )
471 	{
472 		nValue = GetCoreValue( aMtrFldHelpline1Len, eUnit );
473 		rAttrs.Put( SdrMeasureHelpline1LenItem( nValue ) );
474 		bModified = sal_True;
475 	}
476 
477 	if( aMtrFldHelpline2Len.GetText() != aMtrFldHelpline2Len.GetSavedValue() )
478 	{
479 		nValue = GetCoreValue( aMtrFldHelpline2Len, eUnit );
480 		rAttrs.Put( SdrMeasureHelpline2LenItem( nValue ) );
481 		bModified = sal_True;
482 	}
483 
484 	eState = aTsbBelowRefEdge.GetState();
485 	if( eState != aTsbBelowRefEdge.GetSavedValue() )
486 	{
487 		rAttrs.Put( SdrMeasureBelowRefEdgeItem( (sal_Bool) STATE_CHECK == eState ) );
488 		bModified = sal_True;
489 	}
490 
491 	if( aMtrFldDecimalPlaces.GetText() != aMtrFldDecimalPlaces.GetSavedValue() )
492 	{
493 		nValue = static_cast<sal_Int32>(aMtrFldDecimalPlaces.GetValue());
494 		rAttrs.Put(
495             SdrMeasureDecimalPlacesItem(
496                 sal::static_int_cast< sal_Int16 >( nValue ) ) );
497 		bModified = sal_True;
498 	}
499 
500 	eState = aTsbParallel.GetState();
501 	if( eState != aTsbParallel.GetSavedValue() )
502 	{
503 		rAttrs.Put( SdrMeasureTextRota90Item( (sal_Bool) STATE_NOCHECK == eState ) );
504 		bModified = sal_True;
505 	}
506 
507 	eState = aTsbShowUnit.GetState();
508 	if( eState != aTsbShowUnit.GetSavedValue() )
509 	{
510 		rAttrs.Put( SdrMeasureShowUnitItem( (sal_Bool) STATE_CHECK == eState ) );
511 		bModified = sal_True;
512 	}
513 
514 	sal_uInt16 nPos = aLbUnit.GetSelectEntryPos();
515 	if( nPos != aLbUnit.GetSavedValue() )
516 	{
517 		if( nPos != LISTBOX_ENTRY_NOTFOUND )
518 		{
519 			sal_uInt16 nFieldUnit = (sal_uInt16)(long)aLbUnit.GetEntryData( nPos );
520             FieldUnit _eUnit = (FieldUnit) nFieldUnit;
521             rAttrs.Put( SdrMeasureUnitItem( _eUnit ) );
522 			bModified = sal_True;
523 		}
524 	}
525 
526 //enum SdrMeasureTextHPos {SDRMEASURE_TEXTHAUTO,SDRMEASURE_TEXTLEFTOUTSIDE,SDRMEASURE_TEXTINSIDE,SDRMEASURE_TEXTRIGHTOUTSIDE};
527 //enum SdrMeasureTextVPos {SDRMEASURE_TEXTVAUTO,SDRMEASURE_ABOVE,SDRMEASURETEXT_VERTICALCENTERED,SDRMEASURE_BELOW};
528 
529 	if( bPositionModified )
530 	{
531 		// Position
532 		SdrMeasureTextVPos eVPos, eOldVPos;
533 		SdrMeasureTextHPos eHPos, eOldHPos;
534 
535 		RECT_POINT eRP = aCtlPosition.GetActualRP();
536 		switch( eRP )
537 		{
538 			default:
539 			case RP_LT: eVPos = SDRMEASURE_ABOVE;
540 						eHPos = SDRMEASURE_TEXTLEFTOUTSIDE; break;
541 			case RP_LM: eVPos = SDRMEASURETEXT_VERTICALCENTERED;
542 						eHPos = SDRMEASURE_TEXTLEFTOUTSIDE; break;
543 			case RP_LB: eVPos = SDRMEASURE_BELOW;
544 						eHPos = SDRMEASURE_TEXTLEFTOUTSIDE; break;
545 			case RP_MT: eVPos = SDRMEASURE_ABOVE;
546 						eHPos = SDRMEASURE_TEXTINSIDE; break;
547 			case RP_MM: eVPos = SDRMEASURETEXT_VERTICALCENTERED;
548 						eHPos = SDRMEASURE_TEXTINSIDE; break;
549 			case RP_MB: eVPos = SDRMEASURE_BELOW;
550 						eHPos = SDRMEASURE_TEXTINSIDE; break;
551 			case RP_RT: eVPos = SDRMEASURE_ABOVE;
552 						eHPos = SDRMEASURE_TEXTRIGHTOUTSIDE; break;
553 			case RP_RM: eVPos = SDRMEASURETEXT_VERTICALCENTERED;
554 						eHPos = SDRMEASURE_TEXTRIGHTOUTSIDE; break;
555 			case RP_RB: eVPos = SDRMEASURE_BELOW;
556 						eHPos = SDRMEASURE_TEXTRIGHTOUTSIDE; break;
557 		}
558 		if( aTsbAutoPosH.GetState() == STATE_CHECK )
559 			eHPos = SDRMEASURE_TEXTHAUTO;
560 
561 		if( aTsbAutoPosV.GetState() == STATE_CHECK )
562 			eVPos = SDRMEASURE_TEXTVAUTO;
563 
564 		if ( rAttrs.GetItemState( SDRATTR_MEASURETEXTVPOS ) != SFX_ITEM_DONTCARE )
565 		{
566 			eOldVPos = (SdrMeasureTextVPos)
567 						( ( const SdrMeasureTextVPosItem& )rOutAttrs.Get( SDRATTR_MEASURETEXTVPOS ) ).GetValue();
568 			if( eOldVPos != eVPos )
569 			{
570 				rAttrs.Put( SdrMeasureTextVPosItem( eVPos ) );
571 				bModified = sal_True;
572 			}
573 		}
574 		else
575 		{
576 			rAttrs.Put( SdrMeasureTextVPosItem( eVPos ) );
577 			bModified = sal_True;
578 		}
579 
580 		if ( rAttrs.GetItemState( SDRATTR_MEASURETEXTHPOS ) != SFX_ITEM_DONTCARE )
581 		{
582 			eOldHPos = (SdrMeasureTextHPos)
583 						( ( const SdrMeasureTextHPosItem& )rOutAttrs.Get( SDRATTR_MEASURETEXTHPOS ) ).GetValue();
584 			if( eOldHPos != eHPos )
585 			{
586 				rAttrs.Put( SdrMeasureTextHPosItem( eHPos ) );
587 				bModified = sal_True;
588 			}
589 		}
590 		else
591 		{
592 			rAttrs.Put( SdrMeasureTextHPosItem( eHPos ) );
593 			bModified = sal_True;
594 		}
595 	}
596 
597 	return( bModified );
598 }
599 
600 /*************************************************************************
601 |*
602 |* The View have to set at the measure-object to be able to notify
603 |* unit and floatingpoint-values
604 |*
605 \************************************************************************/
606 
Construct()607 void SvxMeasurePage::Construct()
608 {
609 	DBG_ASSERT( pView, "Keine gueltige View Uebergeben!" );
610 
611 	aCtlPreview.pMeasureObj->SetModel( pView->GetModel() );
612 	aCtlPreview.Invalidate();
613 }
614 
615 /*************************************************************************
616 |*
617 |* create the tabpage
618 |*
619 \************************************************************************/
620 
Create(Window * pWindow,const SfxItemSet & rAttrs)621 SfxTabPage* SvxMeasurePage::Create( Window* pWindow,
622 				const SfxItemSet& rAttrs )
623 {
624 	return( new SvxMeasurePage( pWindow, rAttrs ) );
625 }
626 
627 /*************************************************************************
628 |*
629 |*
630 |*
631 \************************************************************************/
632 
GetRanges()633 sal_uInt16*	SvxMeasurePage::GetRanges()
634 {
635 	return( pRanges );
636 }
637 
638 /*************************************************************************
639 |*
640 |*
641 |*
642 \************************************************************************/
643 
PointChanged(Window * pWindow,RECT_POINT)644 void SvxMeasurePage::PointChanged( Window* pWindow, RECT_POINT /*eRP*/ )
645 {
646 	ChangeAttrHdl_Impl( pWindow );
647 }
648 
649 /*************************************************************************
650 |*
651 |*
652 |*
653 \************************************************************************/
654 
IMPL_LINK(SvxMeasurePage,ClickAutoPosHdl_Impl,void *,p)655 IMPL_LINK( SvxMeasurePage, ClickAutoPosHdl_Impl, void *, p )
656 {
657 	if( aTsbAutoPosH.GetState() == STATE_CHECK )
658 	{
659 		switch( aCtlPosition.GetActualRP() )
660 		{
661 			case RP_LT:
662 			case RP_RT:
663 				aCtlPosition.SetActualRP( RP_MT );
664 			break;
665 
666 			case RP_LM:
667 			case RP_RM:
668 				aCtlPosition.SetActualRP( RP_MM );
669 			break;
670 
671 			case RP_LB:
672 			case RP_RB:
673 				aCtlPosition.SetActualRP( RP_MB );
674 			break;
675             default: ;//prevent warning
676 		}
677 	}
678 	if( aTsbAutoPosV.GetState() == STATE_CHECK )
679 	{
680 		switch( aCtlPosition.GetActualRP() )
681 		{
682 			case RP_LT:
683 			case RP_LB:
684 				aCtlPosition.SetActualRP( RP_LM );
685 			break;
686 
687 			case RP_MT:
688 			case RP_MB:
689 				aCtlPosition.SetActualRP( RP_MM );
690 			break;
691 
692 			case RP_RT:
693 			case RP_RB:
694 				aCtlPosition.SetActualRP( RP_RM );
695 			break;
696             default: ;//prevent warning
697 		}
698 	}
699 	ChangeAttrHdl_Impl( p );
700 
701 	return( 0L );
702 }
703 
704 /*************************************************************************
705 |*
706 |*
707 |*
708 \************************************************************************/
709 
IMPL_LINK(SvxMeasurePage,ChangeAttrHdl_Impl,void *,p)710 IMPL_LINK( SvxMeasurePage, ChangeAttrHdl_Impl, void *, p )
711 {
712 
713 	if( p == &aMtrFldLineDist )
714 	{
715 		sal_Int32 nValue = GetCoreValue( aMtrFldLineDist, eUnit );
716 		aAttrSet.Put( SdrMeasureLineDistItem( nValue ) );
717 	}
718 
719 	if( p == &aMtrFldHelplineOverhang )
720 	{
721 		sal_Int32 nValue = GetCoreValue( aMtrFldHelplineOverhang, eUnit );
722 		aAttrSet.Put( SdrMeasureHelplineOverhangItem( nValue) );
723 	}
724 
725 	if( p == &aMtrFldHelplineDist )
726 	{
727 		sal_Int32 nValue = GetCoreValue( aMtrFldHelplineDist, eUnit );
728 		aAttrSet.Put( SdrMeasureHelplineDistItem( nValue) );
729 	}
730 
731 	if( p == &aMtrFldHelpline1Len )
732 	{
733 		sal_Int32 nValue = GetCoreValue( aMtrFldHelpline1Len, eUnit );
734 		aAttrSet.Put( SdrMeasureHelpline1LenItem( nValue ) );
735 	}
736 
737 	if( p == &aMtrFldHelpline2Len )
738 	{
739 		sal_Int32 nValue = GetCoreValue( aMtrFldHelpline2Len, eUnit );
740 		aAttrSet.Put( SdrMeasureHelpline2LenItem( nValue ) );
741 	}
742 
743 	if( p == &aTsbBelowRefEdge )
744 	{
745 		TriState eState = aTsbBelowRefEdge.GetState();
746 		if( eState != STATE_DONTKNOW )
747 			aAttrSet.Put( SdrMeasureBelowRefEdgeItem( (sal_Bool) STATE_CHECK == eState ) );
748 	}
749 
750 	if( p == &aMtrFldDecimalPlaces )
751 	{
752 		sal_Int16 nValue = sal::static_int_cast< sal_Int16 >(
753             aMtrFldDecimalPlaces.GetValue() );
754 		aAttrSet.Put( SdrMeasureDecimalPlacesItem( nValue ) );
755 	}
756 
757 	if( p == &aTsbParallel )
758 	{
759 		TriState eState = aTsbParallel.GetState();
760 		if( eState != STATE_DONTKNOW )
761 			aAttrSet.Put( SdrMeasureTextRota90Item( (sal_Bool) !STATE_CHECK == eState ) );
762 	}
763 
764 	if( p == &aTsbShowUnit )
765 	{
766 		TriState eState = aTsbShowUnit.GetState();
767 		if( eState != STATE_DONTKNOW )
768 			aAttrSet.Put( SdrMeasureShowUnitItem( (sal_Bool) STATE_CHECK == eState ) );
769 	}
770 
771 	if( p == &aLbUnit )
772 	{
773 		sal_uInt16 nPos = aLbUnit.GetSelectEntryPos();
774 		if( nPos != LISTBOX_ENTRY_NOTFOUND )
775 		{
776 			sal_uInt16 nFieldUnit = (sal_uInt16)(long)aLbUnit.GetEntryData( nPos );
777             FieldUnit _eUnit = (FieldUnit) nFieldUnit;
778             aAttrSet.Put( SdrMeasureUnitItem( _eUnit ) );
779 		}
780 	}
781 
782 	if( p == &aTsbAutoPosV || p == &aTsbAutoPosH || p == &aCtlPosition )
783 	{
784 		bPositionModified = sal_True;
785 
786 		// Position
787 		RECT_POINT eRP = aCtlPosition.GetActualRP();
788 		SdrMeasureTextVPos eVPos;
789 		SdrMeasureTextHPos eHPos;
790 
791 		switch( eRP )
792 		{
793 			default:
794 			case RP_LT: eVPos = SDRMEASURE_ABOVE;
795 						eHPos = SDRMEASURE_TEXTLEFTOUTSIDE; break;
796 			case RP_LM: eVPos = SDRMEASURETEXT_VERTICALCENTERED;
797 						eHPos = SDRMEASURE_TEXTLEFTOUTSIDE; break;
798 			case RP_LB: eVPos = SDRMEASURE_BELOW;
799 						eHPos = SDRMEASURE_TEXTLEFTOUTSIDE; break;
800 			case RP_MT: eVPos = SDRMEASURE_ABOVE;
801 						eHPos = SDRMEASURE_TEXTINSIDE; break;
802 			case RP_MM: eVPos = SDRMEASURETEXT_VERTICALCENTERED;
803 						eHPos = SDRMEASURE_TEXTINSIDE; break;
804 			case RP_MB: eVPos = SDRMEASURE_BELOW;
805 						eHPos = SDRMEASURE_TEXTINSIDE; break;
806 			case RP_RT: eVPos = SDRMEASURE_ABOVE;
807 						eHPos = SDRMEASURE_TEXTRIGHTOUTSIDE; break;
808 			case RP_RM: eVPos = SDRMEASURETEXT_VERTICALCENTERED;
809 						eHPos = SDRMEASURE_TEXTRIGHTOUTSIDE; break;
810 			case RP_RB: eVPos = SDRMEASURE_BELOW;
811 						eHPos = SDRMEASURE_TEXTRIGHTOUTSIDE; break;
812 		}
813 
814 		CTL_STATE nState = 0;
815 
816 		if( aTsbAutoPosH.GetState() == STATE_CHECK )
817 		{
818 			eHPos = SDRMEASURE_TEXTHAUTO;
819 			nState = CS_NOHORZ;
820 		}
821 
822 		if( aTsbAutoPosV.GetState() == STATE_CHECK )
823 		{
824 			eVPos = SDRMEASURE_TEXTVAUTO;
825 			nState |= CS_NOVERT;
826 		}
827 
828 		if( p == &aTsbAutoPosV || p == &aTsbAutoPosH )
829 			aCtlPosition.SetState( nState );
830 
831 		aAttrSet.Put( SdrMeasureTextVPosItem( eVPos ) );
832 		aAttrSet.Put( SdrMeasureTextHPosItem( eHPos ) );
833 	}
834 
835 	aCtlPreview.SetAttributes( aAttrSet );
836 	aCtlPreview.Invalidate();
837 
838 	return( 0L );
839 }
840 
841 /*************************************************************************
842 |*
843 |*
844 |*
845 \************************************************************************/
846 
FillUnitLB()847 void SvxMeasurePage::FillUnitLB()
848 {
849 	// fill ListBox with metrics
850 	SvxStringArray aMetricArr( SVX_RES( RID_SVXSTR_FIELDUNIT_TABLE ) );
851 
852 	long nUnit = FUNIT_NONE;
853 	String aStrMetric( CUI_RES( STR_MEASURE_AUTOMATIC ) );
854 	sal_uInt16 nPos = aLbUnit.InsertEntry( aStrMetric );
855 	aLbUnit.SetEntryData( nPos, (void*)nUnit );
856 
857 	for( sal_uInt16 i = 0; i < aMetricArr.Count(); ++i )
858 	{
859 		aStrMetric = aMetricArr.GetStringByPos( i );
860 		nUnit = aMetricArr.GetValue( i );
861 		nPos = aLbUnit.InsertEntry( aStrMetric );
862 		aLbUnit.SetEntryData( nPos, (void*)nUnit );
863 	}
864 }
PageCreated(SfxAllItemSet aSet)865 void SvxMeasurePage::PageCreated (SfxAllItemSet aSet) //add CHINA001
866 {
867 	SFX_ITEMSET_ARG (&aSet,pOfaPtrItem,OfaPtrItem,SID_OBJECT_LIST,sal_False);
868 
869 	if (pOfaPtrItem)
870 		SetView( static_cast<SdrView *>(pOfaPtrItem->GetValue()));
871 
872 	Construct();
873 }
874 
875