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