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