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