LCOV - code coverage report
Current view: top level - svx/source/sidebar/possize - PosSizePropertyPanel.cxx (source / functions) Hit Total Coverage
Test: commit 10e77ab3ff6f4314137acd6e2702a6e5c1ce1fae Lines: 1 567 0.2 %
Date: 2014-11-03 Functions: 2 35 5.7 %
Legend: Lines: hit not hit

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

Generated by: LCOV version 1.10