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