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