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