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 #include <sfx2/sidebar/propertypanel.hrc> 23 #include <sfx2/sidebar/Theme.hxx> 24 #include <sfx2/sidebar/ControlFactory.hxx> 25 #include "PosSizePropertyPanel.hxx" 26 #include "PosSizePropertyPanel.hrc" 27 #include <svx/sidebar/SidebarDialControl.hxx> 28 #include <svx/dialogs.hrc> 29 #include <svx/dialmgr.hxx> 30 #include <sfx2/dispatch.hxx> 31 #include <sfx2/bindings.hxx> 32 #include <sfx2/viewsh.hxx> 33 #include <sfx2/objsh.hxx> 34 #include <svx/dlgutil.hxx> 35 #include <unotools/viewoptions.hxx> 36 #include <vcl/virdev.hxx> 37 #include <vcl/svapp.hxx> 38 #include <vcl/field.hxx> 39 #include <vcl/fixed.hxx> 40 #include <vcl/toolbox.hxx> 41 #include <svx/svdview.hxx> 42 #include <svl/aeitem.hxx> 43 44 using namespace css; 45 using namespace cssu; 46 using ::sfx2::sidebar::Theme; 47 48 #define A2S(pString) (::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM(pString))) 49 #define USERITEM_NAME rtl::OUString::createFromAscii("FitItem") 50 #define NO_SELECT (65535) 51 52 53 54 namespace svx { namespace sidebar { 55 56 57 58 PosSizePropertyPanel::PosSizePropertyPanel( 59 Window* pParent, 60 const cssu::Reference<css::frame::XFrame>& rxFrame, 61 SfxBindings* pBindings) 62 : Control( 63 pParent, 64 SVX_RES(RID_SIDEBAR_POSSIZE_PANEL)), 65 mpFtPosX(new FixedText(this, SVX_RES(FT_SBSHAPE_HORIZONTAL))), 66 mpMtrPosX(new MetricField(this, SVX_RES(MF_SBSHAPE_HORIZONTAL))), 67 mpFtPosY(new FixedText(this, SVX_RES(FT_SBSHAPE_VERTICAL))), 68 mpMtrPosY(new MetricField(this, SVX_RES(MF_SBSHAPE_VERTICAL))), 69 mpFtWidth(new FixedText(this, SVX_RES(FT_WIDTH))), 70 mpMtrWidth(new MetricField(this, SVX_RES(MTR_FLD_WIDTH))), 71 mpFtHeight(new FixedText(this, SVX_RES(FT_HEIGHT))), 72 mpMtrHeight(new MetricField(this, SVX_RES(MTR_FLD_HEIGHT))), 73 mpCbxScale(new CheckBox(this, SVX_RES(CBX_SCALE))), 74 mpFtAngle(new FixedText(this, SVX_RES(FT_ANGLE))), 75 mpMtrAngle(new MetricBox(this, SVX_RES(MTR_FLD_ANGLE))), 76 mpDial(new SidebarDialControl(this, SVX_RES(DIAL_CONTROL))), 77 mpFtFlip(new FixedText(this, SVX_RES(FT_FLIP))), 78 mpFlipTbxBackground(sfx2::sidebar::ControlFactory::CreateToolBoxBackground(this)), 79 mpFlipTbx(sfx2::sidebar::ControlFactory::CreateToolBox(mpFlipTbxBackground.get(), SVX_RES(TBX_FLIP))), 80 maRect(), 81 mpView(0), 82 mlOldWidth(1), 83 mlOldHeight(1), 84 meRP(RP_LT), 85 maAnchorPos(), 86 mlRotX(0), 87 mlRotY(0), 88 maUIScale(), 89 mePoolUnit(), 90 meDlgUnit(), 91 maTransfPosXControl(SID_ATTR_TRANSFORM_POS_X, *pBindings, *this), 92 maTransfPosYControl(SID_ATTR_TRANSFORM_POS_Y, *pBindings, *this), 93 maTransfWidthControl(SID_ATTR_TRANSFORM_WIDTH, *pBindings, *this), 94 maTransfHeightControl(SID_ATTR_TRANSFORM_HEIGHT, *pBindings, *this), 95 maSvxAngleControl( SID_ATTR_TRANSFORM_ANGLE, *pBindings, *this), 96 maRotXControl(SID_ATTR_TRANSFORM_ROT_X, *pBindings, *this), 97 maRotYControl(SID_ATTR_TRANSFORM_ROT_Y, *pBindings, *this), 98 maProPosControl(SID_ATTR_TRANSFORM_PROTECT_POS, *pBindings, *this), 99 maProSizeControl(SID_ATTR_TRANSFORM_PROTECT_SIZE, *pBindings, *this), 100 maAutoWidthControl(SID_ATTR_TRANSFORM_AUTOWIDTH, *pBindings, *this), 101 maAutoHeightControl(SID_ATTR_TRANSFORM_AUTOHEIGHT, *pBindings, *this), 102 m_aMetricCtl(SID_ATTR_METRIC, *pBindings, *this), 103 maImgFlipHori(SVX_RES(IMG_HORI_FLIP)), 104 maImgFlipVert(SVX_RES(IMG_VERT_FLIP)), 105 mxFrame(rxFrame), 106 maContext(), 107 mpBindings(pBindings), 108 mbMtrPosXMirror(false), 109 mbSizeProtected(false), 110 mbPositionProtected(false), 111 mbAutoWidth(false), 112 mbAutoHeight(false), 113 mbAdjustEnabled(false), 114 mbIsFlip(false), 115 mbInDestructor(false) 116 { 117 Initialize(); 118 FreeResource(); 119 } 120 121 122 123 PosSizePropertyPanel::~PosSizePropertyPanel() 124 { 125 mbInDestructor = true; 126 127 // Destroy the background windows of the toolboxes. 128 mpFlipTbx.reset(); 129 mpFlipTbxBackground.reset(); 130 } 131 132 133 134 void PosSizePropertyPanel::ShowMenu (void) 135 { 136 if (mpBindings != NULL) 137 { 138 SfxDispatcher* pDispatcher = mpBindings->GetDispatcher(); 139 if (pDispatcher != NULL) 140 pDispatcher->Execute(SID_ATTR_TRANSFORM, SFX_CALLMODE_ASYNCHRON); 141 } 142 } 143 144 145 146 void PosSizePropertyPanel::Initialize() 147 { 148 //Position : Horizontal / Vertical 149 mpMtrPosX->SetModifyHdl( LINK( this, PosSizePropertyPanel, ChangePosXHdl ) ); 150 mpMtrPosY->SetModifyHdl( LINK( this, PosSizePropertyPanel, ChangePosYHdl ) ); 151 mpMtrPosX->SetAccessibleName(::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM("Horizontal"))); //wj acc 152 mpMtrPosY->SetAccessibleName(::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM("Vertical"))); //wj acc 153 154 //Size : Width / Height 155 mpMtrWidth->SetModifyHdl( LINK( this, PosSizePropertyPanel, ChangeWidthHdl ) ); 156 mpMtrHeight->SetModifyHdl( LINK( this, PosSizePropertyPanel, ChangeHeightHdl ) ); 157 mpMtrWidth->SetAccessibleName(::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM("Width"))); //wj acc 158 mpMtrHeight->SetAccessibleName(::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM("Height"))); //wj acc 159 160 //Size : Keep ratio 161 mpCbxScale->SetClickHdl( LINK( this, PosSizePropertyPanel, ClickAutoHdl ) ); 162 163 //rotation: 164 mpMtrAngle->SetModifyHdl(LINK( this, PosSizePropertyPanel, AngleModifiedHdl)); 165 mpMtrAngle->EnableAutocomplete( false ); 166 mpMtrAngle->SetAccessibleName(::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM("Rotation"))); //wj acc 167 168 //rotation control 169 mpDial->SetModifyHdl(LINK( this, PosSizePropertyPanel, RotationHdl)); 170 171 //flip: 172 mpFlipTbx->SetSelectHdl( LINK( this, PosSizePropertyPanel, FlipHdl) ); 173 mpFlipTbx->SetItemImage(FLIP_HORIZONTAL,maImgFlipHori); 174 mpFlipTbx->SetItemImage(FLIP_VERTICAL,maImgFlipVert); 175 mpFlipTbx->SetQuickHelpText(FLIP_HORIZONTAL,String(SVX_RES(STR_QH_HORI_FLIP))); //Add 176 mpFlipTbx->SetQuickHelpText(FLIP_VERTICAL,String(SVX_RES(STR_QH_VERT_FLIP))); //Add 177 178 mpMtrPosX->SetAccessibleRelationLabeledBy(mpFtPosX.get()); 179 mpMtrPosY->SetAccessibleRelationLabeledBy(mpFtPosY.get()); 180 mpMtrWidth->SetAccessibleRelationLabeledBy(mpFtWidth.get()); 181 mpMtrHeight->SetAccessibleRelationLabeledBy(mpFtHeight.get()); 182 mpMtrAngle->SetAccessibleRelationLabeledBy(mpFtAngle.get()); 183 #ifdef HAS_IA2 184 mpMtrAngle->SetMpSubEditAccLableBy(mpFtAngle.get()); 185 #endif 186 mpFlipTbx->SetAccessibleRelationLabeledBy(mpFtFlip.get()); 187 188 mpMtrAngle->InsertValue(0, FUNIT_CUSTOM); 189 mpMtrAngle->InsertValue(4500, FUNIT_CUSTOM); 190 mpMtrAngle->InsertValue(9000, FUNIT_CUSTOM); 191 mpMtrAngle->InsertValue(13500, FUNIT_CUSTOM); 192 mpMtrAngle->InsertValue(18000, FUNIT_CUSTOM); 193 mpMtrAngle->InsertValue(22500, FUNIT_CUSTOM); 194 mpMtrAngle->InsertValue(27000, FUNIT_CUSTOM); 195 mpMtrAngle->InsertValue(31500, FUNIT_CUSTOM); 196 mpMtrAngle->SetDropDownLineCount(8); 197 198 SfxViewShell* pCurSh = SfxViewShell::Current(); 199 if ( pCurSh ) 200 mpView = pCurSh->GetDrawView(); 201 else 202 mpView = NULL; 203 204 if ( mpView != NULL ) 205 { 206 maUIScale = mpView->GetModel()->GetUIScale(); 207 208 const SdrMarkList& rMarkList = mpView->GetMarkedObjectList(); 209 if(1 == rMarkList.GetMarkCount()) 210 { 211 const SdrObject* pObj = rMarkList.GetMark(0)->GetMarkedSdrObj(); 212 const SdrObjKind eKind((SdrObjKind)pObj->GetObjIdentifier()); 213 214 if((pObj->GetObjInventor() == SdrInventor) && (OBJ_TEXT == eKind || OBJ_TITLETEXT == eKind || OBJ_OUTLINETEXT == eKind) && ((SdrTextObj*)pObj)->HasText()) 215 { 216 mbAdjustEnabled = true; 217 } 218 } 219 } 220 221 mePoolUnit = maTransfWidthControl.GetCoreMetric(); 222 meDlgUnit = GetModuleFieldUnit(); 223 SetFieldUnit( *mpMtrPosX, meDlgUnit, true ); 224 SetFieldUnit( *mpMtrPosY, meDlgUnit, true ); 225 SetFieldUnit( *mpMtrWidth, meDlgUnit, true ); 226 SetFieldUnit( *mpMtrHeight, meDlgUnit, true ); 227 } 228 229 230 231 void PosSizePropertyPanel::SetupIcons(void) 232 { 233 if(Theme::GetBoolean(Theme::Bool_UseSymphonyIcons)) 234 { 235 // todo 236 } 237 else 238 { 239 // todo 240 } 241 } 242 243 244 245 PosSizePropertyPanel* PosSizePropertyPanel::Create ( 246 Window* pParent, 247 const cssu::Reference<css::frame::XFrame>& rxFrame, 248 SfxBindings* pBindings) 249 { 250 if (pParent == NULL) 251 throw lang::IllegalArgumentException(A2S("no parent Window given to PosSizePropertyPanel::Create"), NULL, 0); 252 if ( ! rxFrame.is()) 253 throw lang::IllegalArgumentException(A2S("no XFrame given to PosSizePropertyPanel::Create"), NULL, 1); 254 if (pBindings == NULL) 255 throw lang::IllegalArgumentException(A2S("no SfxBindings given to PosSizePropertyPanel::Create"), NULL, 2); 256 257 return new PosSizePropertyPanel( 258 pParent, 259 rxFrame, 260 pBindings); 261 } 262 263 264 265 void PosSizePropertyPanel::DataChanged( 266 const DataChangedEvent& rEvent) 267 { 268 (void)rEvent; 269 270 SetupIcons(); 271 } 272 273 274 275 void PosSizePropertyPanel::HandleContextChange( 276 const ::sfx2::sidebar::EnumContext aContext) 277 { 278 if(maContext == aContext) 279 { 280 // Nothing to do. 281 return; 282 } 283 284 maContext = aContext; 285 286 sal_Int32 nLayoutMode (0); 287 switch (maContext.GetCombinedContext_DI()) 288 { 289 case CombinedEnumContext(Application_WriterAndWeb, Context_Draw): 290 nLayoutMode = 0; 291 break; 292 293 case CombinedEnumContext(Application_WriterAndWeb, Context_Graphic): 294 case CombinedEnumContext(Application_WriterAndWeb, Context_Media): 295 case CombinedEnumContext(Application_WriterAndWeb, Context_Frame): 296 case CombinedEnumContext(Application_WriterAndWeb, Context_OLE): 297 case CombinedEnumContext(Application_WriterAndWeb, Context_Form): 298 nLayoutMode = 1; 299 break; 300 301 case CombinedEnumContext(Application_Calc, Context_Draw): 302 case CombinedEnumContext(Application_Calc, Context_Graphic): 303 case CombinedEnumContext(Application_DrawImpress, Context_Draw): 304 case CombinedEnumContext(Application_DrawImpress, Context_TextObject): 305 case CombinedEnumContext(Application_DrawImpress, Context_Graphic): 306 nLayoutMode = 2; 307 break; 308 309 case CombinedEnumContext(Application_Calc, Context_Chart): 310 case CombinedEnumContext(Application_Calc, Context_Form): 311 case CombinedEnumContext(Application_Calc, Context_Media): 312 case CombinedEnumContext(Application_Calc, Context_OLE): 313 case CombinedEnumContext(Application_Calc, Context_MultiObject): 314 case CombinedEnumContext(Application_DrawImpress, Context_Media): 315 case CombinedEnumContext(Application_DrawImpress, Context_Form): 316 case CombinedEnumContext(Application_DrawImpress, Context_OLE): 317 case CombinedEnumContext(Application_DrawImpress, Context_3DObject): 318 case CombinedEnumContext(Application_DrawImpress, Context_MultiObject): 319 nLayoutMode = 3; 320 break; 321 } 322 switch (nLayoutMode) 323 { 324 case 0: 325 { 326 mpMtrWidth->SetMin( 2 ); 327 mpMtrHeight->SetMin( 2 ); 328 mpFtPosX->Hide(); 329 mpMtrPosX->Hide(); 330 mpFtPosY->Hide(); 331 mpMtrPosY->Hide(); 332 333 //rotation 334 mpFtAngle->Show(); 335 mpMtrAngle->Show(); 336 mpDial->Show(); 337 338 //flip 339 mpFtFlip->Show(); 340 mpFlipTbx->Show(); 341 Size aTbxSize = mpFlipTbx->CalcWindowSizePixel(); 342 mpFlipTbx->SetOutputSizePixel( aTbxSize ); 343 mbIsFlip = true; 344 345 mpFtWidth->SetPosPixel(Point(LogicToPixel(Point(FT_POSITION_X_X,FT_POSITION_X_Y), MAP_APPFONT))); 346 mpMtrWidth->SetPosPixel(Point(LogicToPixel(Point(MF_POSITION_X_X,MF_POSITION_X_Y), MAP_APPFONT))); 347 mpFtHeight->SetPosPixel(Point(LogicToPixel(Point(FT_POSITION_Y_X,FT_POSITION_Y_Y), MAP_APPFONT))); 348 mpMtrHeight->SetPosPixel(Point(LogicToPixel(Point(MF_POSITION_Y_X,MF_POSITION_Y_Y), MAP_APPFONT))); 349 mpCbxScale->SetPosPixel(Point(LogicToPixel(Point(FT_WIDTH_X,FT_WIDTH_Y), MAP_APPFONT))); 350 351 mpFtAngle->SetPosPixel(Point(LogicToPixel(Point(FT_ANGLE_X,FT_ANGLE_Y), MAP_APPFONT))); 352 mpMtrAngle->SetPosPixel(Point(LogicToPixel(Point(MF_ANGLE_X2,MF_ANGLE_Y2), MAP_APPFONT))); 353 mpFlipTbx->SetPosPixel(Point(LogicToPixel(Point(FLIP_HORI_X2,FLIP_HORI_Y2), MAP_APPFONT))); 354 mpDial->SetPosPixel(Point(LogicToPixel(Point(ROTATE_CONTROL_X2,ROTATE_CONTROL_Y2), MAP_APPFONT))); 355 mpFtFlip->SetPosPixel(Point(LogicToPixel(Point(FT_FLIP_X2,FT_FLIP_Y2), MAP_APPFONT))); 356 357 Size aSize(GetOutputSizePixel().Width(),PS_SECTIONPAGE_HEIGHT2); 358 aSize = LogicToPixel( aSize, MapMode(MAP_APPFONT) ); 359 SetSizePixel(aSize); 360 } 361 break; 362 363 case 1: 364 { 365 mpMtrWidth->SetMin( 2 ); 366 mpMtrHeight->SetMin( 2 ); 367 mpFtPosX->Hide(); 368 mpMtrPosX->Hide(); 369 mpFtPosY->Hide(); 370 mpMtrPosY->Hide(); 371 372 //rotation 373 mpFtAngle->Hide(); 374 mpMtrAngle->Hide(); 375 mpDial->Hide(); 376 377 //flip 378 mpFlipTbx->Hide(); 379 mpFtFlip->Hide(); 380 mbIsFlip = false; 381 382 mpFtWidth->SetPosPixel(Point(LogicToPixel(Point(FT_POSITION_X_X,FT_POSITION_X_Y), MAP_APPFONT))); 383 mpMtrWidth->SetPosPixel(Point(LogicToPixel(Point(MF_POSITION_X_X,MF_POSITION_X_Y), MAP_APPFONT))); 384 mpFtHeight->SetPosPixel(Point(LogicToPixel(Point(FT_POSITION_Y_X,FT_POSITION_Y_Y), MAP_APPFONT))); 385 mpMtrHeight->SetPosPixel(Point(LogicToPixel(Point(MF_POSITION_Y_X,MF_POSITION_Y_Y), MAP_APPFONT))); 386 mpCbxScale->SetPosPixel(Point(LogicToPixel(Point(FT_WIDTH_X,FT_WIDTH_Y), MAP_APPFONT))); 387 388 Size aSize(GetOutputSizePixel().Width(),PS_SECTIONPAGE_HEIGHT3); 389 aSize = LogicToPixel( aSize, MapMode(MAP_APPFONT) ); 390 SetSizePixel(aSize); 391 } 392 break; 393 394 case 2: 395 { 396 mpMtrWidth->SetMin( 1 ); 397 mpMtrHeight->SetMin( 1 ); 398 mpFtPosX->Show(); 399 mpMtrPosX->Show(); 400 mpFtPosY->Show(); 401 mpMtrPosY->Show(); 402 403 //rotation 404 mpFtAngle->Show(); 405 mpMtrAngle->Show(); 406 mpDial->Show(); 407 408 //flip 409 mpFlipTbx->Show(); 410 mpFtFlip->Show(); 411 Size aTbxSize = mpFlipTbx->CalcWindowSizePixel(); 412 mpFlipTbx->SetOutputSizePixel( aTbxSize ); 413 mbIsFlip = true; 414 415 Size aSize(GetOutputSizePixel().Width(),PS_SECTIONPAGE_HEIGHT); 416 aSize = LogicToPixel( aSize, MapMode(MAP_APPFONT) ); 417 SetSizePixel(aSize); 418 } 419 break; 420 421 case 3: 422 { 423 mpMtrWidth->SetMin( 1 ); 424 mpMtrHeight->SetMin( 1 ); 425 mpFtPosX->Show(); 426 mpMtrPosX->Show(); 427 mpFtPosY->Show(); 428 mpMtrPosY->Show(); 429 430 //rotation 431 mpFtAngle->Hide(); 432 mpMtrAngle->Hide(); 433 mpDial->Hide(); 434 435 //flip 436 mpFlipTbx->Hide(); 437 mpFtFlip->Hide(); 438 mbIsFlip = false; 439 440 Size aSize(GetOutputSizePixel().Width(),PS_SECTIONPAGE_HEIGHT4); 441 aSize = LogicToPixel( aSize, MapMode(MAP_APPFONT) ); 442 SetSizePixel(aSize); 443 } 444 break; 445 } 446 447 //Added for windows classic theme 448 mpFlipTbx->SetBackground(Wallpaper()); 449 mpFlipTbx->SetPaintTransparent(true); 450 } 451 452 453 454 IMPL_LINK( PosSizePropertyPanel, ChangeWidthHdl, void*, /*pBox*/ ) 455 { 456 if( mpCbxScale->IsChecked() && 457 mpCbxScale->IsEnabled() ) 458 { 459 long nHeight = (long) ( ((double) mlOldHeight * (double) mpMtrWidth->GetValue()) / (double) mlOldWidth ); 460 if( nHeight <= mpMtrHeight->GetMax( FUNIT_NONE ) ) 461 { 462 mpMtrHeight->SetUserValue( nHeight, FUNIT_NONE ); 463 } 464 else 465 { 466 nHeight = (long)mpMtrHeight->GetMax( FUNIT_NONE ); 467 mpMtrHeight->SetUserValue( nHeight ); 468 const long nWidth = (long) ( ((double) mlOldWidth * (double) nHeight) / (double) mlOldHeight ); 469 mpMtrWidth->SetUserValue( nWidth, FUNIT_NONE ); 470 } 471 } 472 executeSize(); 473 return 0; 474 } 475 476 477 478 IMPL_LINK( PosSizePropertyPanel, ChangeHeightHdl, void *, EMPTYARG ) 479 { 480 if( mpCbxScale->IsChecked() && 481 mpCbxScale->IsEnabled() ) 482 { 483 long nWidth = (long) ( ((double)mlOldWidth * (double)mpMtrHeight->GetValue()) / (double)mlOldHeight ); 484 if( nWidth <= mpMtrWidth->GetMax( FUNIT_NONE ) ) 485 { 486 mpMtrWidth->SetUserValue( nWidth, FUNIT_NONE ); 487 } 488 else 489 { 490 nWidth = (long)mpMtrWidth->GetMax( FUNIT_NONE ); 491 mpMtrWidth->SetUserValue( nWidth ); 492 const long nHeight = (long) ( ((double)mlOldHeight * (double)nWidth) / (double)mlOldWidth ); 493 mpMtrHeight->SetUserValue( nHeight, FUNIT_NONE ); 494 } 495 } 496 executeSize(); 497 return 0; 498 } 499 500 501 502 IMPL_LINK( PosSizePropertyPanel, ChangePosXHdl, void *, EMPTYARG ) 503 { 504 executePosX(); 505 return 0; 506 } 507 508 509 510 IMPL_LINK( PosSizePropertyPanel, ChangePosYHdl, void *, EMPTYARG ) 511 { 512 executePosY(); 513 return 0; 514 } 515 516 517 518 IMPL_LINK( PosSizePropertyPanel, ClickAutoHdl, void *, EMPTYARG ) 519 { 520 if ( mpCbxScale->IsChecked() ) 521 { 522 mlOldWidth = Max( GetCoreValue( *mpMtrWidth, mePoolUnit ), 1L ); 523 mlOldHeight = Max( GetCoreValue( *mpMtrHeight, mePoolUnit ), 1L ); 524 } 525 526 // mpCbxScale must synchronized with that on Position and Size tabpage on Shape Properties dialog 527 SvtViewOptions aPageOpt( E_TABPAGE, String::CreateFromInt32( RID_SVXPAGE_POSITION_SIZE ) ); 528 aPageOpt.SetUserItem( USERITEM_NAME, ::com::sun::star::uno::makeAny( ::rtl::OUString( String::CreateFromInt32( mpCbxScale->IsChecked() ) ) ) ); 529 530 return 0; 531 } 532 533 534 535 IMPL_LINK( PosSizePropertyPanel, AngleModifiedHdl, void *, EMPTYARG ) 536 { 537 String sTmp = mpMtrAngle->GetText(); 538 bool bNegative = 0; 539 sal_Unicode nChar = sTmp.GetChar( 0 ); 540 541 if( nChar == '-' ) 542 { 543 bNegative = 1; 544 nChar = sTmp.GetChar( 1 ); 545 } 546 547 if( (nChar < '0') || (nChar > '9') ) 548 return 0; 549 double dTmp = sTmp.ToDouble(); 550 if(bNegative) 551 { 552 while(dTmp<0) 553 dTmp += 360; 554 } 555 sal_Int64 nTmp = dTmp*100; 556 557 SfxInt32Item aAngleItem( SID_ATTR_TRANSFORM_ANGLE,(sal_uInt32) nTmp); 558 SfxInt32Item aRotXItem( SID_ATTR_TRANSFORM_ROT_X,(sal_uInt32) mlRotX); 559 SfxInt32Item aRotYItem( SID_ATTR_TRANSFORM_ROT_Y,(sal_uInt32) mlRotY); 560 561 GetBindings()->GetDispatcher()->Execute( 562 SID_ATTR_TRANSFORM, SFX_CALLMODE_RECORD, &aAngleItem, &aRotXItem, &aRotYItem, 0L ); 563 564 return 0; 565 } 566 567 568 569 IMPL_LINK( PosSizePropertyPanel, RotationHdl, void *, EMPTYARG ) 570 { 571 sal_Int32 nTmp = mpDial->GetRotation(); 572 573 SfxInt32Item aAngleItem( SID_ATTR_TRANSFORM_ANGLE,(sal_uInt32) nTmp); 574 SfxInt32Item aRotXItem( SID_ATTR_TRANSFORM_ROT_X,(sal_uInt32) mlRotX); 575 SfxInt32Item aRotYItem( SID_ATTR_TRANSFORM_ROT_Y,(sal_uInt32) mlRotY); 576 577 GetBindings()->GetDispatcher()->Execute( 578 SID_ATTR_TRANSFORM, SFX_CALLMODE_RECORD, &aAngleItem, &aRotXItem, &aRotYItem, 0L ); 579 580 return 0; 581 } 582 583 584 585 IMPL_LINK( PosSizePropertyPanel, FlipHdl, ToolBox*, pBox ) 586 { 587 switch (pBox->GetCurItemId()) 588 { 589 case FLIP_HORIZONTAL: 590 { 591 SfxVoidItem aHoriItem (SID_FLIP_HORIZONTAL); 592 GetBindings()->GetDispatcher()->Execute( 593 SID_FLIP_HORIZONTAL, SFX_CALLMODE_RECORD, &aHoriItem, 0L ); 594 } 595 break; 596 case FLIP_VERTICAL: 597 { 598 SfxVoidItem aVertItem (SID_FLIP_VERTICAL ); 599 GetBindings()->GetDispatcher()->Execute( 600 SID_FLIP_VERTICAL, SFX_CALLMODE_RECORD, &aVertItem, 0L ); 601 } 602 break; 603 } 604 return 0; 605 } 606 607 608 609 void PosSizePropertyPanel::NotifyItemUpdate( 610 sal_uInt16 nSID, 611 SfxItemState eState, 612 const SfxPoolItem* pState) 613 { 614 mpFtAngle->Enable(); 615 mpMtrAngle->Enable(); 616 mpDial->Enable(); 617 mpFtFlip->Enable(); 618 mpFlipTbx->Enable(); 619 620 const SfxUInt32Item* pWidthItem; 621 const SfxUInt32Item* pHeightItem; 622 623 SfxViewShell* pCurSh = SfxViewShell::Current(); 624 if ( pCurSh ) 625 mpView = pCurSh->GetDrawView(); 626 else 627 mpView = NULL; 628 629 if ( mpView == NULL ) 630 return; 631 632 const SdrMarkList& rMarkList = mpView->GetMarkedObjectList(); 633 634 if(1 == rMarkList.GetMarkCount()) 635 { 636 const SdrObject* pObj = rMarkList.GetMark(0)->GetMarkedSdrObj(); 637 const SdrObjKind eKind((SdrObjKind)pObj->GetObjIdentifier()); 638 639 if((pObj->GetObjInventor() == SdrInventor) && (OBJ_TEXT == eKind || OBJ_TITLETEXT == eKind || OBJ_OUTLINETEXT == eKind) && ((SdrTextObj*)pObj)->HasText()) 640 mbAdjustEnabled = true; 641 else 642 mbAdjustEnabled = false; 643 } 644 else 645 mbAdjustEnabled = false; 646 647 switch (nSID) 648 { 649 case SID_ATTR_TRANSFORM_WIDTH: 650 if ( SFX_ITEM_AVAILABLE == eState ) 651 { 652 pWidthItem = dynamic_cast< const SfxUInt32Item* >(pState); 653 654 if(pWidthItem) 655 { 656 long mlOldWidth1 = pWidthItem->GetValue(); 657 658 mlOldWidth1 = Fraction( mlOldWidth1 ) / maUIScale; 659 SetMetricValue( *mpMtrWidth, mlOldWidth1, mePoolUnit ); 660 mlOldWidth = mlOldWidth1; 661 break; 662 } 663 } 664 665 mpMtrWidth->SetText( String()); 666 break; 667 668 case SID_ATTR_TRANSFORM_HEIGHT: 669 if ( SFX_ITEM_AVAILABLE == eState ) 670 { 671 pHeightItem = dynamic_cast< const SfxUInt32Item* >(pState); 672 673 if(pHeightItem) 674 { 675 long mlOldHeight1 = pHeightItem->GetValue(); 676 677 mlOldHeight1 = Fraction( mlOldHeight1 ) / maUIScale; 678 SetMetricValue( *mpMtrHeight, mlOldHeight1, mePoolUnit ); 679 mlOldHeight = mlOldHeight1; 680 break; 681 } 682 } 683 684 mpMtrHeight->SetText( String()); 685 break; 686 687 case SID_ATTR_TRANSFORM_POS_X: 688 if(SFX_ITEM_AVAILABLE == eState) 689 { 690 const SfxInt32Item* pItem = dynamic_cast< const SfxInt32Item* >(pState); 691 692 if(pItem) 693 { 694 long nTmp = pItem->GetValue(); 695 nTmp = Fraction( nTmp ) / maUIScale; 696 SetMetricValue( *mpMtrPosX, nTmp, mePoolUnit ); 697 break; 698 } 699 } 700 701 mpMtrPosX->SetText( String()); 702 break; 703 704 case SID_ATTR_TRANSFORM_POS_Y: 705 if(SFX_ITEM_AVAILABLE == eState) 706 { 707 const SfxInt32Item* pItem = dynamic_cast< const SfxInt32Item* >(pState); 708 709 if(pItem) 710 { 711 long nTmp = pItem->GetValue(); 712 nTmp = Fraction( nTmp ) / maUIScale; 713 SetMetricValue( *mpMtrPosY, nTmp, mePoolUnit ); 714 break; 715 } 716 } 717 718 mpMtrPosY->SetText( String()); 719 break; 720 721 case SID_ATTR_TRANSFORM_ROT_X: 722 if (SFX_ITEM_AVAILABLE == eState) 723 { 724 const SfxInt32Item* pItem = dynamic_cast< const SfxInt32Item* >(pState); 725 726 if(pItem) 727 { 728 mlRotX = pItem->GetValue(); 729 mlRotX = Fraction( mlRotX ) / maUIScale; 730 } 731 } 732 break; 733 734 case SID_ATTR_TRANSFORM_ROT_Y: 735 if (SFX_ITEM_AVAILABLE == eState) 736 { 737 const SfxInt32Item* pItem = dynamic_cast< const SfxInt32Item* >(pState); 738 739 if(pItem) 740 { 741 mlRotY = pItem->GetValue(); 742 mlRotY = Fraction( mlRotY ) / maUIScale; 743 } 744 } 745 break; 746 747 case SID_ATTR_TRANSFORM_PROTECT_POS: 748 if(SFX_ITEM_AVAILABLE == eState) 749 { 750 const SfxBoolItem* pItem = dynamic_cast< const SfxBoolItem* >(pState); 751 752 if(pItem) 753 { 754 // record the state of position protect 755 mbPositionProtected = pItem->GetValue(); 756 break; 757 } 758 } 759 760 mbPositionProtected = false; 761 break; 762 763 case SID_ATTR_TRANSFORM_PROTECT_SIZE: 764 if(SFX_ITEM_AVAILABLE == eState) 765 { 766 const SfxBoolItem* pItem = dynamic_cast< const SfxBoolItem* >(pState); 767 768 if(pItem) 769 { 770 // record the state of size protect 771 mbSizeProtected = pItem->GetValue(); 772 break; 773 } 774 } 775 776 mbSizeProtected = false; 777 break; 778 779 case SID_ATTR_TRANSFORM_AUTOWIDTH: 780 if(SFX_ITEM_AVAILABLE == eState) 781 { 782 const SfxBoolItem* pItem = dynamic_cast< const SfxBoolItem* >(pState); 783 784 if(pItem) 785 { 786 mbAutoWidth = pItem->GetValue(); 787 } 788 } 789 break; 790 791 case SID_ATTR_TRANSFORM_AUTOHEIGHT: 792 if(SFX_ITEM_AVAILABLE == eState) 793 { 794 const SfxBoolItem* pItem = dynamic_cast< const SfxBoolItem* >(pState); 795 796 if(pItem) 797 { 798 mbAutoHeight = pItem->GetValue(); 799 } 800 } 801 break; 802 803 case SID_ATTR_TRANSFORM_ANGLE: 804 if (eState >= SFX_ITEM_AVAILABLE) 805 { 806 const SfxInt32Item* pItem = dynamic_cast< const SfxInt32Item* >(pState); 807 808 if(pItem) 809 { 810 long nTmp = pItem->GetValue(); 811 812 mpMtrAngle->SetValue( nTmp ); 813 mpDial->SetRotation( nTmp ); 814 815 switch(nTmp) 816 { 817 case 0: 818 mpMtrAngle->SelectEntryPos(0); 819 break; 820 case 4500: 821 mpMtrAngle->SelectEntryPos(1); 822 break; 823 case 9000: 824 mpMtrAngle->SelectEntryPos(2); 825 break; 826 case 13500: 827 mpMtrAngle->SelectEntryPos(3); 828 break; 829 case 18000: 830 mpMtrAngle->SelectEntryPos(4); 831 break; 832 case 22500: 833 mpMtrAngle->SelectEntryPos(5); 834 break; 835 case 27000: 836 mpMtrAngle->SelectEntryPos(6); 837 break; 838 case 315000: 839 mpMtrAngle->SelectEntryPos(7); 840 } 841 842 break; 843 } 844 } 845 846 mpMtrAngle->SetText( String() ); 847 mpDial->SetRotation( 0 ); 848 break; 849 850 case SID_ATTR_METRIC: 851 MetricState( eState, pState ); 852 break; 853 854 default: 855 break; 856 } 857 858 const sal_Int32 nCombinedContext(maContext.GetCombinedContext_DI()); 859 860 switch (rMarkList.GetMarkCount()) 861 { 862 case 0: 863 break; 864 865 case 1: 866 { 867 const SdrObject* pObj = rMarkList.GetMark(0)->GetMarkedSdrObj(); 868 const SdrObjKind eKind((SdrObjKind)pObj->GetObjIdentifier()); 869 870 if(((nCombinedContext == CombinedEnumContext(Application_DrawImpress, Context_Draw) 871 || nCombinedContext == CombinedEnumContext(Application_DrawImpress, Context_TextObject) 872 ) && OBJ_EDGE == eKind) 873 || OBJ_CAPTION == eKind) 874 { 875 mpFtAngle->Disable(); 876 mpMtrAngle->Disable(); 877 mpDial->Disable(); 878 mpFlipTbx->Disable(); 879 mpFtFlip->Disable(); 880 } 881 break; 882 } 883 884 default: 885 { 886 sal_uInt16 nMarkObj = 0; 887 bool isNoEdge = true; 888 while(rMarkList.GetMark(nMarkObj)) 889 { 890 const SdrObject* pObj = rMarkList.GetMark(nMarkObj)->GetMarkedSdrObj(); 891 const SdrObjKind eKind((SdrObjKind)pObj->GetObjIdentifier()); 892 893 if(((nCombinedContext == CombinedEnumContext(Application_DrawImpress, Context_Draw) 894 || nCombinedContext == CombinedEnumContext(Application_DrawImpress, Context_TextObject) 895 ) && OBJ_EDGE == eKind) 896 || OBJ_CAPTION == eKind) 897 { 898 isNoEdge = false; 899 break; 900 } 901 nMarkObj++; 902 } 903 if(!isNoEdge) 904 { 905 mpFtAngle->Disable(); 906 mpMtrAngle->Disable(); 907 mpDial->Disable(); 908 mpFlipTbx->Disable(); 909 mpFtFlip->Disable(); 910 } 911 break; 912 } 913 } 914 915 if(nCombinedContext == CombinedEnumContext(Application_DrawImpress, Context_TextObject)) 916 { 917 mpFlipTbx->Disable(); 918 mpFtFlip->Disable(); 919 } 920 921 DisableControls(); 922 923 // mpCbxScale must synchronized with that on Position and Size tabpage on Shape Properties dialog 924 SvtViewOptions aPageOpt( E_TABPAGE, String::CreateFromInt32( RID_SVXPAGE_POSITION_SIZE ) ); 925 String sUserData; 926 ::com::sun::star::uno::Any aUserItem = aPageOpt.GetUserItem( USERITEM_NAME ); 927 ::rtl::OUString aTemp; 928 if ( aUserItem >>= aTemp ) 929 sUserData = String( aTemp ); 930 mpCbxScale->Check( (bool)sUserData.ToInt32() ); 931 } 932 933 934 935 SfxBindings* PosSizePropertyPanel::GetBindings() 936 { 937 return mpBindings; 938 } 939 940 941 942 void PosSizePropertyPanel::executeSize() 943 { 944 if ( mpMtrWidth->IsValueModified() || mpMtrHeight->IsValueModified()) 945 { 946 Fraction aUIScale = mpView->GetModel()->GetUIScale(); 947 948 // get Width 949 double nWidth = (double)mpMtrWidth->GetValue( meDlgUnit ); 950 nWidth = MetricField::ConvertDoubleValue( nWidth, mpMtrWidth->GetBaseValue(), mpMtrWidth->GetDecimalDigits(), meDlgUnit, FUNIT_100TH_MM ); 951 long lWidth = (long)(nWidth * (double)aUIScale); 952 lWidth = OutputDevice::LogicToLogic( lWidth, MAP_100TH_MM, (MapUnit)mePoolUnit ); 953 lWidth = (long)mpMtrWidth->Denormalize( lWidth ); 954 955 // get Height 956 double nHeight = (double)mpMtrHeight->GetValue( meDlgUnit ); 957 nHeight = MetricField::ConvertDoubleValue( nHeight, mpMtrHeight->GetBaseValue(), mpMtrHeight->GetDecimalDigits(), meDlgUnit, FUNIT_100TH_MM ); 958 long lHeight = (long)(nHeight * (double)aUIScale); 959 lHeight = OutputDevice::LogicToLogic( lHeight, MAP_100TH_MM, (MapUnit)mePoolUnit ); 960 lHeight = (long)mpMtrWidth->Denormalize( lHeight ); 961 962 // put Width & Height to itemset 963 SfxUInt32Item aWidthItem( SID_ATTR_TRANSFORM_WIDTH, (sal_uInt32) lWidth); 964 SfxUInt32Item aHeightItem( SID_ATTR_TRANSFORM_HEIGHT, (sal_uInt32) lHeight); 965 SfxAllEnumItem aPointItem (SID_ATTR_TRANSFORM_SIZE_POINT, (sal_uInt16)meRP); 966 const sal_Int32 nCombinedContext(maContext.GetCombinedContext()); 967 968 if( nCombinedContext == CombinedEnumContext(Application_Writer, Context_Graphic) // mnContextId == PROPERTY_CONTEXT_SW_GRAPHIC 969 || nCombinedContext == CombinedEnumContext(Application_Writer, Context_OLE) //mnContextId == PROPERTY_CONTEXT_SW_OLE 970 ) 971 // if( mnContextId == PROPERTY_CONTEXT_SW_GRAPHIC || mnContextId == PROPERTY_CONTEXT_SW_OLE ) 972 { 973 GetBindings()->GetDispatcher()->Execute(SID_ATTR_TRANSFORM, SFX_CALLMODE_RECORD, &aWidthItem, &aHeightItem, &aPointItem, 0L ); 974 } 975 else 976 { 977 if ( (mpMtrWidth->IsValueModified()) && (mpMtrHeight->IsValueModified())) 978 GetBindings()->GetDispatcher()->Execute(SID_ATTR_TRANSFORM, SFX_CALLMODE_RECORD, &aWidthItem, &aHeightItem, &aPointItem, 0L ); 979 else if( mpMtrWidth->IsValueModified()) 980 GetBindings()->GetDispatcher()->Execute(SID_ATTR_TRANSFORM, SFX_CALLMODE_RECORD, &aWidthItem, &aPointItem, 0L ); 981 else if ( mpMtrHeight->IsValueModified()) 982 GetBindings()->GetDispatcher()->Execute(SID_ATTR_TRANSFORM, SFX_CALLMODE_RECORD, &aHeightItem, &aPointItem, 0L ); 983 } 984 } 985 } 986 987 988 989 void PosSizePropertyPanel::executePosX() 990 { 991 if ( mpMtrPosX->IsValueModified()) 992 { 993 long lX = GetCoreValue( *mpMtrPosX, mePoolUnit ); 994 if( mbMtrPosXMirror ) 995 lX = -lX; 996 long lY = GetCoreValue( *mpMtrPosY, mePoolUnit ); 997 998 Size aPageSize; 999 Rectangle aRect; 1000 maRect = mpView->GetAllMarkedRect(); 1001 aRect = mpView->GetAllMarkedRect(); 1002 1003 Fraction aUIScale = mpView->GetModel()->GetUIScale(); 1004 lX += maAnchorPos.X(); 1005 lX = Fraction( lX ) * aUIScale; 1006 lY += maAnchorPos.Y(); 1007 lY = Fraction( lY ) * aUIScale; 1008 1009 SfxInt32Item aPosXItem( SID_ATTR_TRANSFORM_POS_X,(sal_uInt32) lX); 1010 SfxInt32Item aPosYItem( SID_ATTR_TRANSFORM_POS_Y,(sal_uInt32) lY); 1011 1012 GetBindings()->GetDispatcher()->Execute( 1013 SID_ATTR_TRANSFORM, SFX_CALLMODE_RECORD, &aPosXItem, 0L ); 1014 } 1015 } 1016 1017 1018 1019 void PosSizePropertyPanel::executePosY() 1020 { 1021 if ( mpMtrPosY->IsValueModified() ) 1022 { 1023 long lX = GetCoreValue( *mpMtrPosX, mePoolUnit ); 1024 long lY = GetCoreValue( *mpMtrPosY, mePoolUnit ); 1025 1026 Size aPageSize; 1027 Rectangle aRect; 1028 maRect = mpView->GetAllMarkedRect(); 1029 aRect = mpView->GetAllMarkedRect(); 1030 1031 Fraction aUIScale = mpView->GetModel()->GetUIScale(); 1032 lX += maAnchorPos.X(); 1033 lX = Fraction( lX ) * aUIScale; 1034 lY += maAnchorPos.Y(); 1035 lY = Fraction( lY ) * aUIScale; 1036 1037 SfxInt32Item aPosXItem( SID_ATTR_TRANSFORM_POS_X,(sal_uInt32) lX); 1038 SfxInt32Item aPosYItem( SID_ATTR_TRANSFORM_POS_Y,(sal_uInt32) lY); 1039 1040 GetBindings()->GetDispatcher()->Execute( 1041 SID_ATTR_TRANSFORM, SFX_CALLMODE_RECORD, &aPosYItem, 0L ); 1042 } 1043 } 1044 1045 1046 1047 void PosSizePropertyPanel::MetricState( SfxItemState eState, const SfxPoolItem* pState ) 1048 { 1049 bool bPosXBlank = false; 1050 bool bPosYBlank = false; 1051 bool bWidthBlank = false; 1052 bool bHeightBlank = false; 1053 String sNull = String::CreateFromAscii(""); 1054 meDlgUnit = GetCurrentUnit(eState,pState); 1055 1056 if( mpMtrPosX->GetText() == sNull ) 1057 bPosXBlank = true; 1058 SetFieldUnit( *mpMtrPosX, meDlgUnit, true ); 1059 if(bPosXBlank) 1060 mpMtrPosX->SetText(String()); 1061 1062 if( mpMtrPosY->GetText() == sNull ) 1063 bPosYBlank = true; 1064 SetFieldUnit( *mpMtrPosY, meDlgUnit, true ); 1065 if(bPosYBlank) 1066 mpMtrPosY->SetText(String()); 1067 1068 if( mpMtrWidth->GetText() == sNull ) 1069 bWidthBlank = true; 1070 SetFieldUnit( *mpMtrWidth, meDlgUnit, true ); 1071 if(bWidthBlank) 1072 mpMtrWidth->SetText(String()); 1073 1074 if( mpMtrHeight->GetText() == sNull ) 1075 bHeightBlank = true; 1076 SetFieldUnit( *mpMtrHeight, meDlgUnit, true ); 1077 if(bHeightBlank) 1078 mpMtrHeight->SetText(String()); 1079 } 1080 1081 1082 1083 FieldUnit PosSizePropertyPanel::GetCurrentUnit( SfxItemState eState, const SfxPoolItem* pState ) 1084 { 1085 FieldUnit eUnit = FUNIT_NONE; 1086 1087 if ( pState && eState >= SFX_ITEM_DEFAULT ) 1088 eUnit = (FieldUnit)( (const SfxUInt16Item*)pState )->GetValue(); 1089 else 1090 { 1091 SfxViewFrame* pFrame = SfxViewFrame::Current(); 1092 SfxObjectShell* pSh = NULL; 1093 if ( pFrame ) 1094 pSh = pFrame->GetObjectShell(); 1095 if ( pSh ) 1096 { 1097 SfxModule* pModule = pSh->GetModule(); 1098 if ( pModule ) 1099 { 1100 const SfxPoolItem* pItem = pModule->GetItem( SID_ATTR_METRIC ); 1101 if ( pItem ) 1102 eUnit = (FieldUnit)( (SfxUInt16Item*)pItem )->GetValue(); 1103 } 1104 else 1105 { 1106 DBG_ERRORFILE( "GetModuleFieldUnit(): no module found" ); 1107 } 1108 } 1109 } 1110 1111 return eUnit; 1112 } 1113 1114 1115 1116 void PosSizePropertyPanel::DisableControls() 1117 { 1118 if( mbPositionProtected ) 1119 { 1120 // the position is protected("Position protect" option in modal dialog is checked), 1121 // disable all the Position controls in sidebar 1122 mpFtPosX->Disable(); 1123 mpMtrPosX->Disable(); 1124 mpFtPosY->Disable(); 1125 mpMtrPosY->Disable(); 1126 mpFtAngle->Disable(); 1127 mpMtrAngle->Disable(); 1128 mpDial->Disable(); 1129 mpFtFlip->Disable(); 1130 mpFlipTbx->Disable(); 1131 1132 mpFtWidth->Disable(); 1133 mpMtrWidth->Disable(); 1134 mpFtHeight->Disable(); 1135 mpMtrHeight->Disable(); 1136 mpCbxScale->Disable(); 1137 } 1138 else 1139 { 1140 mpFtPosX->Enable(); 1141 mpMtrPosX->Enable(); 1142 mpFtPosY->Enable(); 1143 mpMtrPosY->Enable(); 1144 1145 //mpFtAngle->Enable(); 1146 //mpMtrAngle->Enable(); 1147 //mpDial->Enable(); 1148 //mpFtFlip->Enable(); 1149 //mpFlipTbx->Enable(); 1150 1151 if( mbSizeProtected ) 1152 { 1153 mpFtWidth->Disable(); 1154 mpMtrWidth->Disable(); 1155 mpFtHeight->Disable(); 1156 mpMtrHeight->Disable(); 1157 mpCbxScale->Disable(); 1158 } 1159 else 1160 { 1161 if( mbAdjustEnabled ) 1162 { 1163 if( mbAutoWidth ) 1164 { 1165 mpFtWidth->Disable(); 1166 mpMtrWidth->Disable(); 1167 mpCbxScale->Disable(); 1168 } 1169 else 1170 { 1171 mpFtWidth->Enable(); 1172 mpMtrWidth->Enable(); 1173 } 1174 if( mbAutoHeight ) 1175 { 1176 mpFtHeight->Disable(); 1177 mpMtrHeight->Disable(); 1178 mpCbxScale->Disable(); 1179 } 1180 else 1181 { 1182 mpFtHeight->Enable(); 1183 mpMtrHeight->Enable(); 1184 } 1185 if( !mbAutoWidth && !mbAutoHeight ) 1186 mpCbxScale->Enable(); 1187 } 1188 else 1189 { 1190 mpFtWidth->Enable(); 1191 mpMtrWidth->Enable(); 1192 mpFtHeight->Enable(); 1193 mpMtrHeight->Enable(); 1194 mpCbxScale->Enable(); 1195 } 1196 } 1197 } 1198 } 1199 1200 1201 } } // end of namespace svx::sidebar 1202