LCOV - code coverage report
Current view: top level - svx/source/sidebar/possize - PosSizePropertyPanel.cxx (source / functions) Hit Total Coverage
Test: commit e02a6cb2c3e2b23b203b422e4e0680877f232636 Lines: 0 568 0.0 %
Date: 2014-04-14 Functions: 0 34 0.0 %
Legend: Lines: hit not hit

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

Generated by: LCOV version 1.10