diff options
Diffstat (limited to 'cui/source/tabpages/transfrm.cxx')
-rw-r--r-- | cui/source/tabpages/transfrm.cxx | 1705 |
1 files changed, 0 insertions, 1705 deletions
diff --git a/cui/source/tabpages/transfrm.cxx b/cui/source/tabpages/transfrm.cxx deleted file mode 100644 index 0f2409b64..000000000 --- a/cui/source/tabpages/transfrm.cxx +++ /dev/null @@ -1,1705 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * This file is part of OpenOffice.org. - * - * OpenOffice.org is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License version 3 - * only, as published by the Free Software Foundation. - * - * OpenOffice.org is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License version 3 for more details - * (a copy is included in the LICENSE file that accompanied this code). - * - * You should have received a copy of the GNU Lesser General Public License - * version 3 along with OpenOffice.org. If not, see - * <http://www.openoffice.org/license.html> - * for a copy of the LGPLv3 License. - * - ************************************************************************/ - -// include --------------------------------------------------------------- - -#include <tools/shl.hxx> -#include <sfx2/app.hxx> -#include <svx/svdview.hxx> -#include <svx/svdobj.hxx> -#include <svx/svdpagv.hxx> -#include <svx/svdotext.hxx> -#include <svx/sderitm.hxx> -#include <svx/dialogs.hrc> -#include <cuires.hrc> -#include "transfrm.hrc" -#include <editeng/sizeitem.hxx> - -#include "transfrm.hxx" -#include <dialmgr.hxx> -#include "svx/dlgutil.hxx" -#include <editeng/svxenum.hxx> -#include "svx/anchorid.hxx" -#include <sfx2/module.hxx> -#include <svl/rectitem.hxx> -#include <svl/aeitem.hxx> -#include <swpossizetabpage.hxx> - -// Toleranz fuer WorkingArea -#define DIFF 1000 - -// static ---------------------------------------------------------------- - -static sal_uInt16 pPosSizeRanges[] = -{ - SID_ATTR_TRANSFORM_POS_X, - SID_ATTR_TRANSFORM_POS_Y, - SID_ATTR_TRANSFORM_PROTECT_POS, - SID_ATTR_TRANSFORM_PROTECT_POS, - SID_ATTR_TRANSFORM_INTERN, - SID_ATTR_TRANSFORM_INTERN, - SID_ATTR_TRANSFORM_ANCHOR, - SID_ATTR_TRANSFORM_VERT_ORIENT, - SID_ATTR_TRANSFORM_WIDTH, - SID_ATTR_TRANSFORM_SIZE_POINT, - SID_ATTR_TRANSFORM_PROTECT_POS, - SID_ATTR_TRANSFORM_INTERN, - SID_ATTR_TRANSFORM_AUTOWIDTH, - SID_ATTR_TRANSFORM_AUTOHEIGHT, - 0 -}; - -static sal_uInt16 pAngleRanges[] = -{ - SID_ATTR_TRANSFORM_ROT_X, - SID_ATTR_TRANSFORM_ANGLE, - SID_ATTR_TRANSFORM_INTERN, - SID_ATTR_TRANSFORM_INTERN, - 0 -}; - -static sal_uInt16 pSlantRanges[] = -{ - SDRATTR_ECKENRADIUS, - SDRATTR_ECKENRADIUS, - SID_ATTR_TRANSFORM_SHEAR, - SID_ATTR_TRANSFORM_SHEAR_VERTICAL, - SID_ATTR_TRANSFORM_INTERN, - SID_ATTR_TRANSFORM_INTERN, - 0 -}; - -void lcl_ConvertRect(basegfx::B2DRange& rRange, const sal_uInt16 nDigits, const MapUnit ePoolUnit, const FieldUnit eDlgUnit) -{ - const basegfx::B2DPoint aTopLeft( - (double)MetricField::ConvertValue(basegfx::fround(rRange.getMinX()), nDigits, ePoolUnit, eDlgUnit), - (double)MetricField::ConvertValue(basegfx::fround(rRange.getMinY()), nDigits, ePoolUnit, eDlgUnit)); - const basegfx::B2DPoint aBottomRight( - (double)MetricField::ConvertValue(basegfx::fround(rRange.getMaxX()), nDigits, ePoolUnit, eDlgUnit), - (double)MetricField::ConvertValue(basegfx::fround(rRange.getMaxY()), nDigits, ePoolUnit, eDlgUnit)); - - rRange = basegfx::B2DRange(aTopLeft, aBottomRight); -} - -void lcl_ScaleRect(basegfx::B2DRange& rRange, const Fraction aUIScale) -{ - const double fFactor(1.0 / double(aUIScale)); - rRange = basegfx::B2DRange(rRange.getMinimum() * fFactor, rRange.getMaximum() * fFactor); -} - -/************************************************************************* -|* -|* Konstruktor des Tab-Dialogs: Fuegt die Seiten zum Dialog hinzu -|* -\************************************************************************/ - -SvxTransformTabDialog::SvxTransformTabDialog( Window* pParent, const SfxItemSet* pAttr, - const SdrView* pSdrView, sal_uInt16 nAnchorTypes ) : - SfxTabDialog( pParent, CUI_RES( RID_SVXDLG_TRANSFORM ), pAttr ), - pView ( pSdrView ), - nAnchorCtrls(nAnchorTypes) -{ - DBG_ASSERT(pView, "no valid view (!)"); - FreeResource(); - - //different positioning page in Writer - if(nAnchorCtrls & 0x00ff) - { - AddTabPage(RID_SVXPAGE_SWPOSSIZE, SvxSwPosSizeTabPage::Create, SvxSwPosSizeTabPage::GetRanges); - RemoveTabPage(RID_SVXPAGE_POSITION_SIZE); - } - else - { - AddTabPage(RID_SVXPAGE_POSITION_SIZE, SvxPositionSizeTabPage::Create, SvxPositionSizeTabPage::GetRanges); - RemoveTabPage(RID_SVXPAGE_SWPOSSIZE); - } - - AddTabPage(RID_SVXPAGE_ANGLE, SvxAngleTabPage::Create, SvxAngleTabPage::GetRanges); - AddTabPage(RID_SVXPAGE_SLANT, SvxSlantTabPage::Create, SvxSlantTabPage::GetRanges); -} - -// ----------------------------------------------------------------------- - -SvxTransformTabDialog::~SvxTransformTabDialog() -{ -} - -// ----------------------------------------------------------------------- - -void SvxTransformTabDialog::PageCreated(sal_uInt16 nId, SfxTabPage &rPage) -{ - switch(nId) - { - case RID_SVXPAGE_POSITION_SIZE: - { - SvxPositionSizeTabPage& rSvxPos = static_cast<SvxPositionSizeTabPage&>(rPage); - rSvxPos.SetView(pView); - rSvxPos.Construct(); - - if(nAnchorCtrls & SVX_OBJ_NORESIZE) - { - rSvxPos.DisableResize(); - } - - if(nAnchorCtrls & SVX_OBJ_NOPROTECT) - { - rSvxPos.DisableProtect(); - rSvxPos.UpdateControlStates(); - } - - break; - } - case RID_SVXPAGE_SWPOSSIZE : - { - SvxSwPosSizeTabPage& rSwPos = static_cast<SvxSwPosSizeTabPage&>(rPage); - - rSwPos.EnableAnchorTypes(nAnchorCtrls); - rSwPos.SetValidateFramePosLink(aValidateLink); - rSwPos.SetView(pView); - - break; - } - - case RID_SVXPAGE_ANGLE: - { - SvxAngleTabPage& rSvxAng = static_cast<SvxAngleTabPage&>(rPage); - - rSvxAng.SetView( pView ); - rSvxAng.Construct(); - - break; - } - - case RID_SVXPAGE_SLANT: - { - SvxSlantTabPage& rSvxSlnt = static_cast<SvxSlantTabPage&>(rPage); - - rSvxSlnt.SetView( pView ); - rSvxSlnt.Construct(); - - break; - } - } -} - -// ----------------------------------------------------------------------- - -void SvxTransformTabDialog::SetValidateFramePosLink(const Link& rLink) -{ - aValidateLink = rLink; -} - -/************************************************************************* -|* -|* Dialog zum Aendern der Position des Drehwinkels und des Drehwinkels -|* der Grafikobjekte -|* -\************************************************************************/ - -SvxAngleTabPage::SvxAngleTabPage( Window* pParent, const SfxItemSet& rInAttrs ) : - SvxTabPage ( pParent, CUI_RES( RID_SVXPAGE_ANGLE ), rInAttrs ), - aFlPosition ( this, CUI_RES( FL_POSITION ) ), - aFtPosX ( this, CUI_RES( FT_POS_X ) ), - aMtrPosX ( this, CUI_RES( MTR_FLD_POS_X ) ), - aFtPosY ( this, CUI_RES( FT_POS_Y ) ), - aMtrPosY ( this, CUI_RES( MTR_FLD_POS_Y ) ), - aFtPosPresets ( this, CUI_RES(FT_POSPRESETS) ), - aCtlRect ( this, CUI_RES( CTL_RECT ) ), - - aFlAngle ( this, CUI_RES( FL_ANGLE ) ), - aFtAngle ( this, CUI_RES( FT_ANGLE ) ), - aMtrAngle ( this, CUI_RES( MTR_FLD_ANGLE ) ), - aFtAnglePresets ( this, CUI_RES(FT_ANGLEPRESETS) ), - aCtlAngle ( this, CUI_RES( CTL_ANGLE ), - RP_RB, 200, 80, CS_ANGLE ), - rOutAttrs ( rInAttrs ) -{ - FreeResource(); - - // calculate PoolUnit - SfxItemPool* pPool = rOutAttrs.GetPool(); - DBG_ASSERT( pPool, "no pool (!)" ); - ePoolUnit = pPool->GetMetric(SID_ATTR_TRANSFORM_POS_X); - - aMtrAngle.SetModifyHdl(LINK( this, SvxAngleTabPage, ModifiedHdl)); - - aCtlRect.SetAccessibleRelationLabeledBy(&aFtPosPresets); - aCtlRect.SetAccessibleRelationMemberOf(&aFlPosition); - aCtlAngle.SetAccessibleRelationLabeledBy(&aFtAnglePresets); - aCtlAngle.SetAccessibleRelationMemberOf(&aFlAngle); -} - -// ----------------------------------------------------------------------- - -void SvxAngleTabPage::Construct() -{ - DBG_ASSERT(pView, "No valid view (!)"); - eDlgUnit = GetModuleFieldUnit(GetItemSet()); - SetFieldUnit(aMtrPosX, eDlgUnit, sal_True); - SetFieldUnit(aMtrPosY, eDlgUnit, sal_True); - - if(FUNIT_MILE == eDlgUnit || FUNIT_KM == eDlgUnit) - { - aMtrPosX.SetDecimalDigits( 3 ); - aMtrPosY.SetDecimalDigits( 3 ); - } - - { // #i75273# - Rectangle aTempRect(pView->GetAllMarkedRect()); - pView->GetSdrPageView()->LogicToPagePos(aTempRect); - maRange = basegfx::B2DRange(aTempRect.Left(), aTempRect.Top(), aTempRect.Right(), aTempRect.Bottom()); - } - - // Take anchor into account (Writer) - const SdrMarkList& rMarkList = pView->GetMarkedObjectList(); - - if(rMarkList.GetMarkCount()) - { - const SdrObject* pObj = rMarkList.GetMark(0)->GetMarkedSdrObj(); - maAnchor = basegfx::B2DPoint(pObj->GetAnchorPos().X(), pObj->GetAnchorPos().Y()); - - if(!maAnchor.equalZero()) // -> Writer - { - maRange = basegfx::B2DRange(maRange.getMinimum() - maAnchor, maRange.getMaximum() - maAnchor); - } - } - - // take scale into account - const Fraction aUIScale(pView->GetModel()->GetUIScale()); - lcl_ScaleRect(maRange, aUIScale); - - // take UI units into account - sal_uInt16 nDigits(aMtrPosX.GetDecimalDigits()); - lcl_ConvertRect(maRange, nDigits, (MapUnit)ePoolUnit, eDlgUnit); - - if(!pView->IsRotateAllowed()) - { - aFlPosition.Disable(); - aFtPosX.Disable(); - aMtrPosX.Disable(); - aFtPosY.Disable(); - aMtrPosY.Disable(); - aFtPosPresets.Disable(); - aCtlRect.Disable(); - aFlAngle.Disable(); - aFtAngle.Disable(); - aMtrAngle.Disable(); - aFtAnglePresets.Disable(); - aCtlAngle.Disable(); - } -} - -// ----------------------------------------------------------------------- - -sal_Bool SvxAngleTabPage::FillItemSet(SfxItemSet& rSet) -{ - sal_Bool bModified = sal_False; - - if(aMtrAngle.IsValueModified() || aMtrPosX.IsValueModified() || aMtrPosY.IsValueModified()) - { - const double fUIScale(double(pView->GetModel()->GetUIScale())); - const double fTmpX((GetCoreValue(aMtrPosX, ePoolUnit) + maAnchor.getX()) * fUIScale); - const double fTmpY((GetCoreValue(aMtrPosY, ePoolUnit) + maAnchor.getY()) * fUIScale); - - rSet.Put(SfxInt32Item(GetWhich(SID_ATTR_TRANSFORM_ANGLE), static_cast<sal_Int32>(aMtrAngle.GetValue()))); - rSet.Put(SfxInt32Item(GetWhich(SID_ATTR_TRANSFORM_ROT_X), basegfx::fround(fTmpX))); - rSet.Put(SfxInt32Item(GetWhich(SID_ATTR_TRANSFORM_ROT_Y), basegfx::fround(fTmpY))); - - bModified |= sal_True; - } - - return bModified; -} - -// ----------------------------------------------------------------------- - -void SvxAngleTabPage::Reset(const SfxItemSet& rAttrs) -{ - const double fUIScale(double(pView->GetModel()->GetUIScale())); - - const SfxPoolItem* pItem = GetItem( rAttrs, SID_ATTR_TRANSFORM_ROT_X ); - if(pItem) - { - const double fTmp(((double)((const SfxInt32Item*)pItem)->GetValue() - maAnchor.getX()) / fUIScale); - SetMetricValue(aMtrPosX, basegfx::fround(fTmp), ePoolUnit); - } - else - { - aMtrPosX.SetText( String() ); - } - - pItem = GetItem(rAttrs, SID_ATTR_TRANSFORM_ROT_Y); - if(pItem) - { - const double fTmp(((double)((const SfxInt32Item*)pItem)->GetValue() - maAnchor.getY()) / fUIScale); - SetMetricValue(aMtrPosY, basegfx::fround(fTmp), ePoolUnit); - } - else - { - aMtrPosX.SetText( String() ); - } - - pItem = GetItem( rAttrs, SID_ATTR_TRANSFORM_ANGLE ); - if(pItem) - { - aMtrAngle.SetValue(((const SfxInt32Item*)pItem)->GetValue()); - } - else - { - aMtrAngle.SetText( String() ); - } - - aMtrAngle.SaveValue(); - ModifiedHdl(this); -} - -// ----------------------------------------------------------------------- - -SfxTabPage* SvxAngleTabPage::Create( Window* pWindow, const SfxItemSet& rSet) -{ - return(new SvxAngleTabPage(pWindow, rSet)); -} - -//------------------------------------------------------------------------ - -sal_uInt16* SvxAngleTabPage::GetRanges() -{ - return(pAngleRanges); -} - -// ----------------------------------------------------------------------- - -void SvxAngleTabPage::ActivatePage(const SfxItemSet& /*rSet*/) -{ -} - -// ----------------------------------------------------------------------- - -int SvxAngleTabPage::DeactivatePage( SfxItemSet* _pSet ) -{ - if(_pSet) - { - FillItemSet(*_pSet); - } - - return LEAVE_PAGE; -} - -//------------------------------------------------------------------------ - -void SvxAngleTabPage::PointChanged(Window* pWindow, RECT_POINT eRP) -{ - if(pWindow == &aCtlRect) - { - switch(eRP) - { - case RP_LT: - { - aMtrPosX.SetUserValue( basegfx::fround64(maRange.getMinX()), FUNIT_NONE ); - aMtrPosY.SetUserValue( basegfx::fround64(maRange.getMinY()), FUNIT_NONE ); - break; - } - case RP_MT: - { - aMtrPosX.SetUserValue( basegfx::fround64(maRange.getCenter().getX()), FUNIT_NONE ); - aMtrPosY.SetUserValue( basegfx::fround64(maRange.getMinY()), FUNIT_NONE ); - break; - } - case RP_RT: - { - aMtrPosX.SetUserValue( basegfx::fround64(maRange.getMaxX()), FUNIT_NONE ); - aMtrPosY.SetUserValue( basegfx::fround64(maRange.getMinY()), FUNIT_NONE ); - break; - } - case RP_LM: - { - aMtrPosX.SetUserValue( basegfx::fround64(maRange.getMinX()), FUNIT_NONE ); - aMtrPosY.SetUserValue( basegfx::fround64(maRange.getCenter().getY()), FUNIT_NONE ); - break; - } - case RP_MM: - { - aMtrPosX.SetUserValue( basegfx::fround64(maRange.getCenter().getX()), FUNIT_NONE ); - aMtrPosY.SetUserValue( basegfx::fround64(maRange.getCenter().getY()), FUNIT_NONE ); - break; - } - case RP_RM: - { - aMtrPosX.SetUserValue( basegfx::fround64(maRange.getMaxX()), FUNIT_NONE ); - aMtrPosY.SetUserValue( basegfx::fround64(maRange.getCenter().getY()), FUNIT_NONE ); - break; - } - case RP_LB: - { - aMtrPosX.SetUserValue( basegfx::fround64(maRange.getMinX()), FUNIT_NONE ); - aMtrPosY.SetUserValue( basegfx::fround64(maRange.getMaxY()), FUNIT_NONE ); - break; - } - case RP_MB: - { - aMtrPosX.SetUserValue( basegfx::fround64(maRange.getCenter().getX()), FUNIT_NONE ); - aMtrPosY.SetUserValue( basegfx::fround64(maRange.getMaxY()), FUNIT_NONE ); - break; - } - case RP_RB: - { - aMtrPosX.SetUserValue( basegfx::fround64(maRange.getMaxX()), FUNIT_NONE ); - aMtrPosY.SetUserValue( basegfx::fround64(maRange.getMaxY()), FUNIT_NONE ); - break; - } - } - } - else if(pWindow == &aCtlAngle) - { - switch( eRP ) - { - case RP_LT: aMtrAngle.SetUserValue( 13500, FUNIT_NONE ); break; - case RP_MT: aMtrAngle.SetUserValue( 9000, FUNIT_NONE ); break; - case RP_RT: aMtrAngle.SetUserValue( 4500, FUNIT_NONE ); break; - case RP_LM: aMtrAngle.SetUserValue( 18000, FUNIT_NONE ); break; - case RP_RM: aMtrAngle.SetUserValue( 0, FUNIT_NONE ); break; - case RP_LB: aMtrAngle.SetUserValue( 22500, FUNIT_NONE ); break; - case RP_MB: aMtrAngle.SetUserValue( 27000, FUNIT_NONE ); break; - case RP_RB: aMtrAngle.SetUserValue( 31500, FUNIT_NONE ); break; - case RP_MM: break; - } - } -} - -//------------------------------------------------------------------------ - -IMPL_LINK( SvxAngleTabPage, ModifiedHdl, void *, EMPTYARG ) -{ - switch(aMtrAngle.GetValue()) - { - case 13500: aCtlAngle.SetActualRP( RP_LT ); break; - case 9000: aCtlAngle.SetActualRP( RP_MT ); break; - case 4500: aCtlAngle.SetActualRP( RP_RT ); break; - case 18000: aCtlAngle.SetActualRP( RP_LM ); break; - case 0: aCtlAngle.SetActualRP( RP_RM ); break; - case 22500: aCtlAngle.SetActualRP( RP_LB ); break; - case 27000: aCtlAngle.SetActualRP( RP_MB ); break; - case 31500: aCtlAngle.SetActualRP( RP_RB ); break; - default: aCtlAngle.SetActualRP( RP_MM ); break; - } - - return( 0L ); -} - -/************************************************************************* -|* -|* Dialog zum Aendern des Eckenradius und zum Schraegstellen -|* -\************************************************************************/ - -SvxSlantTabPage::SvxSlantTabPage( Window* pParent, const SfxItemSet& rInAttrs ) : - SvxTabPage ( pParent, CUI_RES( RID_SVXPAGE_SLANT ), rInAttrs ), - - aFlRadius ( this, CUI_RES( FL_RADIUS ) ), - aFtRadius ( this, CUI_RES( FT_RADIUS ) ), - aMtrRadius ( this, CUI_RES( MTR_FLD_RADIUS ) ), - aFlAngle ( this, CUI_RES( FL_SLANT ) ), - aFtAngle ( this, CUI_RES( FT_ANGLE ) ), - aMtrAngle ( this, CUI_RES( MTR_FLD_ANGLE ) ), - rOutAttrs ( rInAttrs ) -{ - FreeResource(); - - // this page needs ExchangeSupport - SetExchangeSupport(); - - // evaluate PoolUnit - SfxItemPool* pPool = rOutAttrs.GetPool(); - DBG_ASSERT( pPool, "no pool (!)" ); - ePoolUnit = pPool->GetMetric( SID_ATTR_TRANSFORM_POS_X ); -} - -// ----------------------------------------------------------------------- - -void SvxSlantTabPage::Construct() -{ - // get the range - DBG_ASSERT(pView, "no valid view (!)"); - eDlgUnit = GetModuleFieldUnit(GetItemSet()); - SetFieldUnit(aMtrRadius, eDlgUnit, sal_True); - - { // #i75273# - Rectangle aTempRect(pView->GetAllMarkedRect()); - pView->GetSdrPageView()->LogicToPagePos(aTempRect); - maRange = basegfx::B2DRange(aTempRect.Left(), aTempRect.Top(), aTempRect.Right(), aTempRect.Bottom()); - } -} - -// ----------------------------------------------------------------------- - -sal_Bool SvxSlantTabPage::FillItemSet(SfxItemSet& rAttrs) -{ - sal_Bool bModified = sal_False; - String aStr = aMtrRadius.GetText(); - - if( aStr != aMtrRadius.GetSavedValue() ) - { - Fraction aUIScale = pView->GetModel()->GetUIScale(); - long nTmp = GetCoreValue( aMtrRadius, ePoolUnit ); - nTmp = Fraction( nTmp ) * aUIScale; - - rAttrs.Put( SdrEckenradiusItem( nTmp ) ); - bModified = sal_True; - } - - aStr = aMtrAngle.GetText(); - - if( aStr != aMtrAngle.GetSavedValue() ) - { - sal_Int32 nValue = static_cast<sal_Int32>(aMtrAngle.GetValue()); - rAttrs.Put( SfxInt32Item( SID_ATTR_TRANSFORM_SHEAR, nValue ) ); - bModified = sal_True; - } - - if( bModified ) - { - // Referenzpunkt setzen - // #75897# - Rectangle aObjectRect(pView->GetAllMarkedRect()); - pView->GetSdrPageView()->LogicToPagePos(aObjectRect); - Point aPt = aObjectRect.Center(); - - rAttrs.Put(SfxInt32Item(SID_ATTR_TRANSFORM_SHEAR_X, aPt.X())); - rAttrs.Put(SfxInt32Item(SID_ATTR_TRANSFORM_SHEAR_Y, aPt.Y())); - rAttrs.Put( SfxBoolItem( SID_ATTR_TRANSFORM_SHEAR_VERTICAL, sal_False ) ); - } - - return( bModified ); -} - -// ----------------------------------------------------------------------- - -void SvxSlantTabPage::Reset(const SfxItemSet& rAttrs) -{ - // if the view has selected objects, items with SFX_ITEM_DEFAULT need to be disabled - const SfxPoolItem* pItem; - - // Eckenradius - if(!pView->IsEdgeRadiusAllowed()) - { - aFlRadius.Disable(); - aFtRadius.Disable(); - aMtrRadius.Disable(); - aMtrRadius.SetText( String() ); - } - else - { - pItem = GetItem( rAttrs, SDRATTR_ECKENRADIUS ); - - if( pItem ) - { - const double fUIScale(double(pView->GetModel()->GetUIScale())); - const double fTmp((double)((const SdrEckenradiusItem*)pItem)->GetValue() / fUIScale); - SetMetricValue(aMtrRadius, basegfx::fround(fTmp), ePoolUnit); - } - else - { - aMtrRadius.SetText( String() ); - } - } - - aMtrRadius.SaveValue(); - - // Schraegstellen: Winkel - if( !pView->IsShearAllowed() ) - { - aFlAngle.Disable(); - aFtAngle.Disable(); - aMtrAngle.Disable(); - aMtrAngle.SetText( String() ); - } - else - { - pItem = GetItem( rAttrs, SID_ATTR_TRANSFORM_SHEAR ); - - if( pItem ) - { - aMtrAngle.SetValue( ( (const SfxInt32Item*)pItem )->GetValue() ); - } - else - { - aMtrAngle.SetText( String() ); - } - } - - aMtrAngle.SaveValue(); -} - -// ----------------------------------------------------------------------- - -SfxTabPage* SvxSlantTabPage::Create( Window* pWindow, const SfxItemSet& rOutAttrs ) -{ - return( new SvxSlantTabPage( pWindow, rOutAttrs ) ); -} - -//------------------------------------------------------------------------ - -sal_uInt16* SvxSlantTabPage::GetRanges() -{ - return( pSlantRanges ); -} - -// ----------------------------------------------------------------------- - -void SvxSlantTabPage::ActivatePage( const SfxItemSet& rSet ) -{ - SfxRectangleItem* pRectItem = NULL; - - if( SFX_ITEM_SET == rSet.GetItemState( GetWhich( SID_ATTR_TRANSFORM_INTERN ) , sal_False, (const SfxPoolItem**) &pRectItem ) ) - { - const Rectangle aTempRect(pRectItem->GetValue()); - maRange = basegfx::B2DRange(aTempRect.Left(), aTempRect.Top(), aTempRect.Right(), aTempRect.Bottom()); - } -} - -// ----------------------------------------------------------------------- - -int SvxSlantTabPage::DeactivatePage( SfxItemSet* _pSet ) -{ - if(_pSet) - { - FillItemSet(*_pSet); - } - - return LEAVE_PAGE; -} - -//------------------------------------------------------------------------ - -void SvxSlantTabPage::PointChanged( Window* , RECT_POINT ) -{ -} - -/************************************************************************* -|* -|* Dialog for changing position and size of graphic objects -|* -\************************************************************************/ - -SvxPositionSizeTabPage::SvxPositionSizeTabPage( Window* pParent, const SfxItemSet& rInAttrs ) : - SvxTabPage ( pParent, CUI_RES( RID_SVXPAGE_POSITION_SIZE ), rInAttrs ), - maFlPosition ( this, CUI_RES( FL_POSITION ) ), - maFtPosX ( this, CUI_RES( FT_POS_X ) ), - maMtrPosX ( this, CUI_RES( MTR_FLD_POS_X ) ), - maFtPosY ( this, CUI_RES( FT_POS_Y ) ), - maMtrPosY ( this, CUI_RES( MTR_FLD_POS_Y ) ), - maFtPosReference ( this, CUI_RES( FT_POSREFERENCE ) ), - maCtlPos ( this, CUI_RES( CTL_POSRECT ), RP_LT ), - - maFlSize ( this, CUI_RES( FL_SIZE ) ), - maFtWidth ( this, CUI_RES( FT_WIDTH ) ), - maMtrWidth ( this, CUI_RES( MTR_FLD_WIDTH ) ), - maFtHeight ( this, CUI_RES( FT_HEIGHT ) ), - maMtrHeight ( this, CUI_RES( MTR_FLD_HEIGHT ) ), - maCbxScale ( this, CUI_RES( CBX_SCALE ) ), - maFtSizeReference ( this, CUI_RES( FT_SIZEREFERENCE) ), - maCtlSize ( this, CUI_RES( CTL_SIZERECT ), RP_LT ), - - maFlProtect ( this, CUI_RES( FL_PROTECT) ), - maTsbPosProtect ( this, CUI_RES( TSB_POSPROTECT ) ), - maTsbSizeProtect ( this, CUI_RES( TSB_SIZEPROTECT ) ), - - - maFlAdjust ( this, CUI_RES( FL_ADJUST ) ), - maTsbAutoGrowWidth ( this, CUI_RES( TSB_AUTOGROW_WIDTH ) ), - maTsbAutoGrowHeight ( this, CUI_RES( TSB_AUTOGROW_HEIGHT ) ), - - maFlDivider (this, CUI_RES( FL_DIVIDER ) ), - - mrOutAttrs ( rInAttrs ), - mnProtectSizeState( STATE_NOCHECK ), - mbPageDisabled ( sal_False ), - mbProtectDisabled( false ), - mbSizeDisabled( false ), - mbAdjustDisabled( true ) -{ - FreeResource(); - - // this pege needs ExchangeSupport - SetExchangeSupport(); - - // evaluate PoolUnit - SfxItemPool* pPool = mrOutAttrs.GetPool(); - DBG_ASSERT( pPool, "no pool (!)" ); - mePoolUnit = pPool->GetMetric( SID_ATTR_TRANSFORM_POS_X ); - - meRP = RP_LT; // s.o. - - maMtrWidth.SetModifyHdl( LINK( this, SvxPositionSizeTabPage, ChangeWidthHdl ) ); - maMtrHeight.SetModifyHdl( LINK( this, SvxPositionSizeTabPage, ChangeHeightHdl ) ); - maCbxScale.SetClickHdl( LINK( this, SvxPositionSizeTabPage, ClickAutoHdl ) ); - - maTsbAutoGrowWidth.Disable(); - maTsbAutoGrowHeight.Disable(); - maFlAdjust.Disable(); - - // #i2379# disable controls when protected - maTsbPosProtect.SetClickHdl( LINK( this, SvxPositionSizeTabPage, ChangePosProtectHdl ) ); - maTsbSizeProtect.SetClickHdl( LINK( this, SvxPositionSizeTabPage, ChangeSizeProtectHdl ) ); - - maCtlPos.SetAccessibleRelationMemberOf( &maFlPosition ); - maCtlSize.SetAccessibleRelationMemberOf( &maFlSize ); - maCtlPos.SetAccessibleRelationLabeledBy( &maFtPosReference ); - maCtlSize.SetAccessibleRelationLabeledBy( &maFtSizeReference ); -} - -// ----------------------------------------------------------------------- - -void SvxPositionSizeTabPage::Construct() -{ - // get range and work area - DBG_ASSERT( mpView, "no valid view (!)" ); - meDlgUnit = GetModuleFieldUnit( GetItemSet() ); - SetFieldUnit( maMtrPosX, meDlgUnit, sal_True ); - SetFieldUnit( maMtrPosY, meDlgUnit, sal_True ); - SetFieldUnit( maMtrWidth, meDlgUnit, sal_True ); - SetFieldUnit( maMtrHeight, meDlgUnit, sal_True ); - - if(FUNIT_MILE == meDlgUnit || FUNIT_KM == meDlgUnit) - { - maMtrPosX.SetDecimalDigits( 3 ); - maMtrPosY.SetDecimalDigits( 3 ); - maMtrWidth.SetDecimalDigits( 3 ); - maMtrHeight.SetDecimalDigits( 3 ); - } - - { // #i75273# - Rectangle aTempRect(mpView->GetAllMarkedRect()); - mpView->GetSdrPageView()->LogicToPagePos(aTempRect); - maRange = basegfx::B2DRange(aTempRect.Left(), aTempRect.Top(), aTempRect.Right(), aTempRect.Bottom()); - } - - { // #i75273# - Rectangle aTempRect(mpView->GetWorkArea()); - mpView->GetSdrPageView()->LogicToPagePos(aTempRect); - maWorkRange = basegfx::B2DRange(aTempRect.Left(), aTempRect.Top(), aTempRect.Right(), aTempRect.Bottom()); - } - - // take anchor into account (Writer) - const SdrMarkList& rMarkList = mpView->GetMarkedObjectList(); - - if(rMarkList.GetMarkCount()) - { - const SdrObject* pObj = rMarkList.GetMark(0)->GetMarkedSdrObj(); - maAnchor = basegfx::B2DPoint(pObj->GetAnchorPos().X(), pObj->GetAnchorPos().Y()); - - if(!maAnchor.equalZero()) // -> Writer - { - for(sal_uInt16 i(1); i < rMarkList.GetMarkCount(); i++) - { - pObj = rMarkList.GetMark(i)->GetMarkedSdrObj(); - - if(maAnchor != basegfx::B2DPoint(pObj->GetAnchorPos().X(), pObj->GetAnchorPos().Y())) - { - // diferent anchor positions - maMtrPosX.SetText( String() ); - maMtrPosY.SetText( String() ); - mbPageDisabled = sal_True; - return; - } - } - - // translate ranges about anchor - maRange = basegfx::B2DRange(maRange.getMinimum() - maAnchor, maRange.getMaximum() - maAnchor); - maWorkRange = basegfx::B2DRange(maWorkRange.getMinimum() - maAnchor, maWorkRange.getMaximum() - maAnchor); - } - } - - // this should happen via SID_ATTR_TRANSFORM_AUTOSIZE - if(1 == rMarkList.GetMarkCount()) - { - const SdrObject* pObj = rMarkList.GetMark(0)->GetMarkedSdrObj(); - const SdrObjKind eKind((SdrObjKind)pObj->GetObjIdentifier()); - - if((pObj->GetObjInventor() == SdrInventor) && (OBJ_TEXT == eKind || OBJ_TITLETEXT == eKind || OBJ_OUTLINETEXT == eKind) && ((SdrTextObj*)pObj)->HasText()) - { - mbAdjustDisabled = false; - maFlAdjust.Enable(); - maTsbAutoGrowWidth.Enable(); - maTsbAutoGrowHeight.Enable(); - maTsbAutoGrowWidth.SetClickHdl( LINK( this, SvxPositionSizeTabPage, ClickSizeProtectHdl ) ); - maTsbAutoGrowHeight.SetClickHdl( LINK( this, SvxPositionSizeTabPage, ClickSizeProtectHdl ) ); - - // is used as flag to evaluate if its selectable - maTsbAutoGrowWidth.EnableTriState( sal_False ); - maTsbAutoGrowHeight.EnableTriState( sal_False ); - } - } - - // take scale into account - const Fraction aUIScale(mpView->GetModel()->GetUIScale()); - lcl_ScaleRect( maWorkRange, aUIScale ); - lcl_ScaleRect( maRange, aUIScale ); - - // take UI units into account - const sal_uInt16 nDigits(maMtrPosX.GetDecimalDigits()); - lcl_ConvertRect( maWorkRange, nDigits, (MapUnit) mePoolUnit, meDlgUnit ); - lcl_ConvertRect( maRange, nDigits, (MapUnit) mePoolUnit, meDlgUnit ); - - SetMinMaxPosition(); -} - -// ----------------------------------------------------------------------- - -sal_Bool SvxPositionSizeTabPage::FillItemSet( SfxItemSet& rOutAttrs ) -{ - sal_Bool bModified(sal_False); - - if ( maMtrWidth.HasFocus() ) - { - ChangeWidthHdl( this ); - } - - if ( maMtrHeight.HasFocus() ) - { - ChangeHeightHdl( this ); - } - - if( !mbPageDisabled ) - { - if ( maMtrPosX.IsValueModified() || maMtrPosY.IsValueModified() ) - { - const double fUIScale(double(mpView->GetModel()->GetUIScale())); - double fX((GetCoreValue( maMtrPosX, mePoolUnit ) + maAnchor.getX()) * fUIScale); - double fY((GetCoreValue( maMtrPosY, mePoolUnit ) + maAnchor.getY()) * fUIScale); - - { // #i75273# - Rectangle aTempRect(mpView->GetAllMarkedRect()); - mpView->GetSdrPageView()->LogicToPagePos(aTempRect); - maRange = basegfx::B2DRange(aTempRect.Left(), aTempRect.Top(), aTempRect.Right(), aTempRect.Bottom()); - } - - // #101581# GetTopLeftPosition(...) needs coordinates after UI scaling, in real PagePositions - GetTopLeftPosition(fX, fY, maRange); - - rOutAttrs.Put(SfxInt32Item(GetWhich(SID_ATTR_TRANSFORM_POS_X), basegfx::fround(fX))); - rOutAttrs.Put(SfxInt32Item(GetWhich(SID_ATTR_TRANSFORM_POS_Y), basegfx::fround(fY))); - - bModified |= sal_True; - } - - if ( maTsbPosProtect.GetState() != maTsbPosProtect.GetSavedValue() ) - { - if( maTsbPosProtect.GetState() == STATE_DONTKNOW ) - { - rOutAttrs.InvalidateItem( SID_ATTR_TRANSFORM_PROTECT_POS ); - } - else - { - rOutAttrs.Put( - SfxBoolItem( GetWhich( SID_ATTR_TRANSFORM_PROTECT_POS ), - maTsbPosProtect.GetState() == STATE_CHECK ? sal_True : sal_False ) ); - } - - bModified |= sal_True; - } - } - - if ( maMtrWidth.IsValueModified() || maMtrHeight.IsValueModified() ) - { - Fraction aUIScale = mpView->GetModel()->GetUIScale(); - - // get Width - double nWidth = static_cast<double>(maMtrWidth.GetValue( meDlgUnit )); - nWidth = MetricField::ConvertDoubleValue( nWidth, maMtrWidth.GetBaseValue(), maMtrWidth.GetDecimalDigits(), meDlgUnit, FUNIT_100TH_MM ); - long lWidth = long(nWidth * (double)aUIScale); - lWidth = OutputDevice::LogicToLogic( lWidth, MAP_100TH_MM, (MapUnit)mePoolUnit ); - lWidth = static_cast<long>(maMtrWidth.Denormalize( lWidth )); - - // get Height - double nHeight = static_cast<double>(maMtrHeight.GetValue( meDlgUnit )); - nHeight = MetricField::ConvertDoubleValue( nHeight, maMtrHeight.GetBaseValue(), maMtrHeight.GetDecimalDigits(), meDlgUnit, FUNIT_100TH_MM ); - long lHeight = long(nHeight * (double)aUIScale); - lHeight = OutputDevice::LogicToLogic( lHeight, MAP_100TH_MM, (MapUnit)mePoolUnit ); - lHeight = static_cast<long>(maMtrWidth.Denormalize( lHeight )); - - // put Width & Height to itemset - rOutAttrs.Put( SfxUInt32Item( GetWhich( SID_ATTR_TRANSFORM_WIDTH ), - (sal_uInt32) lWidth ) ); - rOutAttrs.Put( SfxUInt32Item( GetWhich( SID_ATTR_TRANSFORM_HEIGHT ), - (sal_uInt32) lHeight ) ); - rOutAttrs.Put( SfxAllEnumItem( GetWhich( SID_ATTR_TRANSFORM_SIZE_POINT ), sal::static_int_cast< sal_uInt16 >( meRP ) ) ); - bModified |= sal_True; - } - - if ( maTsbSizeProtect.GetState() != maTsbSizeProtect.GetSavedValue() ) - { - if ( maTsbSizeProtect.GetState() == STATE_DONTKNOW ) - rOutAttrs.InvalidateItem( SID_ATTR_TRANSFORM_PROTECT_SIZE ); - else - rOutAttrs.Put( - SfxBoolItem( GetWhich( SID_ATTR_TRANSFORM_PROTECT_SIZE ), - maTsbSizeProtect.GetState() == STATE_CHECK ? sal_True : sal_False ) ); - bModified |= sal_True; - } - - if ( maTsbAutoGrowWidth.GetState() != maTsbAutoGrowWidth.GetSavedValue() ) - { - if ( !maTsbAutoGrowWidth.IsTriStateEnabled() ) - { - if( maTsbAutoGrowWidth.GetState() == STATE_DONTKNOW ) - rOutAttrs.InvalidateItem( SID_ATTR_TRANSFORM_AUTOWIDTH ); - else - rOutAttrs.Put( - SfxBoolItem( GetWhich( SID_ATTR_TRANSFORM_AUTOWIDTH ), - maTsbAutoGrowWidth.GetState() == STATE_CHECK ? sal_True : sal_False ) ); - } - bModified |= sal_True; - } - - if ( maTsbAutoGrowHeight.GetState() != maTsbAutoGrowHeight.GetSavedValue() ) - { - if ( !maTsbAutoGrowHeight.IsTriStateEnabled() ) - { - if( maTsbAutoGrowHeight.GetState() == STATE_DONTKNOW ) - rOutAttrs.InvalidateItem( SID_ATTR_TRANSFORM_AUTOHEIGHT ); - else - rOutAttrs.Put( - SfxBoolItem( GetWhich( SID_ATTR_TRANSFORM_AUTOHEIGHT ), - maTsbAutoGrowHeight.GetState() == STATE_CHECK ? sal_True : sal_False ) ); - } - bModified |= sal_True; - } - - - return bModified; -} - -// ----------------------------------------------------------------------- - -void SvxPositionSizeTabPage::Reset( const SfxItemSet& ) -{ - const SfxPoolItem* pItem; - const double fUIScale(double(mpView->GetModel()->GetUIScale())); - - if ( !mbPageDisabled ) - { - pItem = GetItem( mrOutAttrs, SID_ATTR_TRANSFORM_POS_X ); - if ( pItem ) - { - const double fTmp((((const SfxInt32Item*)pItem)->GetValue() - maAnchor.getX()) / fUIScale); - SetMetricValue(maMtrPosX, basegfx::fround(fTmp), mePoolUnit); - } - - pItem = GetItem( mrOutAttrs, SID_ATTR_TRANSFORM_POS_Y ); - if ( pItem ) - { - const double fTmp((((const SfxInt32Item*)pItem)->GetValue() - maAnchor.getY()) / fUIScale); - SetMetricValue(maMtrPosY, basegfx::fround(fTmp), mePoolUnit); - } - - pItem = GetItem( mrOutAttrs, SID_ATTR_TRANSFORM_PROTECT_POS ); - if ( pItem ) - { - sal_Bool bProtected = ( ( const SfxBoolItem* )pItem )->GetValue(); - maTsbPosProtect.SetState( bProtected ? STATE_CHECK : STATE_NOCHECK ); - maTsbPosProtect.EnableTriState( sal_False ); - } - else - { - maTsbPosProtect.SetState( STATE_DONTKNOW ); - } - - maTsbPosProtect.SaveValue(); - maCtlPos.Reset(); - - // #i2379# Disable controls for protected objects - ChangePosProtectHdl( this ); - } - - { // #i75273# set width - pItem = GetItem( mrOutAttrs, SID_ATTR_TRANSFORM_WIDTH ); - mfOldWidth = std::max( pItem ? (double)((const SfxUInt32Item*)pItem)->GetValue() : 0.0, 1.0 ); - double fTmpWidth((OutputDevice::LogicToLogic(static_cast<sal_Int32>(mfOldWidth), (MapUnit)mePoolUnit, MAP_100TH_MM)) / fUIScale); - - if(maMtrWidth.GetDecimalDigits()) - fTmpWidth *= pow(10.0, maMtrWidth.GetDecimalDigits()); - - fTmpWidth = MetricField::ConvertDoubleValue(fTmpWidth, maMtrWidth.GetBaseValue(), maMtrWidth.GetDecimalDigits(), FUNIT_100TH_MM, meDlgUnit); - maMtrWidth.SetValue(static_cast<sal_Int64>(fTmpWidth), meDlgUnit); - } - - { // #i75273# set height - pItem = GetItem( mrOutAttrs, SID_ATTR_TRANSFORM_HEIGHT ); - mfOldHeight = std::max( pItem ? (double)((const SfxUInt32Item*)pItem)->GetValue() : 0.0, 1.0 ); - double fTmpHeight((OutputDevice::LogicToLogic(static_cast<sal_Int32>(mfOldHeight), (MapUnit)mePoolUnit, MAP_100TH_MM)) / fUIScale); - - if(maMtrHeight.GetDecimalDigits()) - fTmpHeight *= pow(10.0, maMtrHeight.GetDecimalDigits()); - - fTmpHeight = MetricField::ConvertDoubleValue(fTmpHeight, maMtrHeight.GetBaseValue(), maMtrHeight.GetDecimalDigits(), FUNIT_100TH_MM, meDlgUnit); - maMtrHeight.SetValue(static_cast<sal_Int64>(fTmpHeight), meDlgUnit); - } - - pItem = GetItem( mrOutAttrs, SID_ATTR_TRANSFORM_PROTECT_SIZE ); - if ( pItem ) - { - maTsbSizeProtect.SetState( ( (const SfxBoolItem*)pItem )->GetValue() - ? STATE_CHECK : STATE_NOCHECK ); - maTsbSizeProtect.EnableTriState( sal_False ); - } - else - maTsbSizeProtect.SetState( STATE_DONTKNOW ); - - pItem = GetItem( mrOutAttrs, SID_ATTR_TRANSFORM_AUTOWIDTH ); - if ( pItem ) - { - maTsbAutoGrowWidth.SetState( ( ( const SfxBoolItem* )pItem )->GetValue() - ? STATE_CHECK : STATE_NOCHECK ); - } - else - maTsbAutoGrowWidth.SetState( STATE_DONTKNOW ); - - pItem = GetItem( mrOutAttrs, SID_ATTR_TRANSFORM_AUTOHEIGHT ); - if ( pItem ) - { - maTsbAutoGrowHeight.SetState( ( ( const SfxBoolItem* )pItem )->GetValue() - ? STATE_CHECK : STATE_NOCHECK ); - } - else - maTsbAutoGrowHeight.SetState( STATE_DONTKNOW ); - - // Ist Abgleich gesetzt? - String aStr = GetUserData(); - maCbxScale.Check( (sal_Bool)aStr.ToInt32() ); - - maTsbSizeProtect.SaveValue(); - maTsbAutoGrowWidth.SaveValue(); - maTsbAutoGrowHeight.SaveValue(); - ClickSizeProtectHdl( NULL ); - - // #i2379# Disable controls for protected objects - ChangeSizeProtectHdl( this ); -} - -// ----------------------------------------------------------------------- - -SfxTabPage* SvxPositionSizeTabPage::Create( Window* pWindow, const SfxItemSet& rOutAttrs ) -{ - return( new SvxPositionSizeTabPage( pWindow, rOutAttrs ) ); -} - -//------------------------------------------------------------------------ - -sal_uInt16* SvxPositionSizeTabPage::GetRanges() -{ - return( pPosSizeRanges ); -} - -// ----------------------------------------------------------------------- - -void SvxPositionSizeTabPage::ActivatePage( const SfxItemSet& rSet ) -{ - SfxRectangleItem* pRectItem = NULL; - - if( SFX_ITEM_SET == rSet.GetItemState( GetWhich( SID_ATTR_TRANSFORM_INTERN ) , sal_False, (const SfxPoolItem**) &pRectItem ) ) - { - { // #i75273# - const Rectangle aTempRect(pRectItem->GetValue()); - maRange = basegfx::B2DRange(aTempRect.Left(), aTempRect.Top(), aTempRect.Right(), aTempRect.Bottom()); - } - - SetMinMaxPosition(); - } -} - -// ----------------------------------------------------------------------- - -int SvxPositionSizeTabPage::DeactivatePage( SfxItemSet* _pSet ) -{ - if( _pSet ) - { - double fX((double)maMtrPosX.GetValue()); - double fY((double)maMtrPosY.GetValue()); - - GetTopLeftPosition(fX, fY, maRange); - const Rectangle aOutRectangle( - basegfx::fround(fX), basegfx::fround(fY), - basegfx::fround(fX + maRange.getWidth()), basegfx::fround(fY + maRange.getHeight())); - _pSet->Put(SfxRectangleItem(SID_ATTR_TRANSFORM_INTERN, aOutRectangle)); - - FillItemSet(*_pSet); - } - - return LEAVE_PAGE; -} - -//------------------------------------------------------------------------ - -IMPL_LINK( SvxPositionSizeTabPage, ChangePosProtectHdl, void *, EMPTYARG ) -{ - // #106572# Remember user's last choice - maTsbSizeProtect.SetState( maTsbPosProtect.GetState() == STATE_CHECK ? STATE_CHECK : mnProtectSizeState ); - UpdateControlStates(); - return( 0L ); -} - -//------------------------------------------------------------------------ - -void SvxPositionSizeTabPage::UpdateControlStates() -{ - const bool bPosProtect = maTsbPosProtect.GetState() == STATE_CHECK; - const bool bSizeProtect = maTsbSizeProtect.GetState() == STATE_CHECK; - const bool bHeightChecked = !maTsbAutoGrowHeight.IsTriStateEnabled() && (maTsbAutoGrowHeight.GetState() == STATE_CHECK); - const bool bWidthChecked = !maTsbAutoGrowWidth.IsTriStateEnabled() && (maTsbAutoGrowWidth.GetState() == STATE_CHECK); - - maFlPosition.Enable( !bPosProtect && !mbPageDisabled ); - maFtPosX.Enable( !bPosProtect && !mbPageDisabled ); - maMtrPosX.Enable( !bPosProtect && !mbPageDisabled ); - maFtPosY.Enable( !bPosProtect && !mbPageDisabled ); - maMtrPosY.Enable( !bPosProtect && !mbPageDisabled ); - maFtPosReference.Enable( !bPosProtect && !mbPageDisabled ); - maCtlPos.Enable( !bPosProtect ); - maTsbPosProtect.Enable( !mbProtectDisabled && !mbPageDisabled ); - - maFlSize.Enable( !mbSizeDisabled && !bSizeProtect ); - maCtlSize.Enable( !mbSizeDisabled && !bSizeProtect && (!bHeightChecked || !bWidthChecked) ); - maFtWidth.Enable( !mbSizeDisabled && !bSizeProtect && !bWidthChecked ); - maMtrWidth.Enable( !mbSizeDisabled && !bSizeProtect && !bWidthChecked ); - maFtHeight.Enable( !mbSizeDisabled && !bSizeProtect && !bHeightChecked ); - maMtrHeight.Enable( !mbSizeDisabled && !bSizeProtect && !bHeightChecked ); - maCbxScale.Enable( !mbSizeDisabled && !bSizeProtect && !bHeightChecked && !bWidthChecked ); - maFtSizeReference.Enable( !mbSizeDisabled && !bSizeProtect ); - maFlProtect.Enable( !mbProtectDisabled ); - maTsbSizeProtect.Enable( !mbProtectDisabled && !bPosProtect ); - - maFlAdjust.Enable( !mbSizeDisabled && !bSizeProtect && !mbAdjustDisabled ); - maTsbAutoGrowWidth.Enable( !mbSizeDisabled && !bSizeProtect && !mbAdjustDisabled ); - maTsbAutoGrowHeight.Enable( !mbSizeDisabled && !bSizeProtect && !mbAdjustDisabled ); - - maCtlSize.Invalidate(); - maCtlPos.Invalidate(); - -} - -//------------------------------------------------------------------------ - -IMPL_LINK( SvxPositionSizeTabPage, ChangeSizeProtectHdl, void *, EMPTYARG ) -{ - if( maTsbSizeProtect.IsEnabled() ) - { - // #106572# Remember user's last choice - - // Note: this works only as long as the dialog is open. When - // the user closes the dialog, there is no way to remember - // whether size was enabled or disabled befor pos protect was - // clicked. Thus, if pos protect is selected, the dialog is - // closed and reopened again, unchecking pos protect will - // always uncheck size protect, too. That's life. - mnProtectSizeState = maTsbSizeProtect.GetState(); - } - - UpdateControlStates(); - - return( 0L ); -} - -//------------------------------------------------------------------------ - -IMPL_LINK_INLINE_START( SvxPositionSizeTabPage, ChangePosXHdl, void *, EMPTYARG ) -{ - return( 0L ); -} -IMPL_LINK_INLINE_END( SvxPositionSizeTabPage, ChangePosXHdl, void *, EMPTYARG ) - -//------------------------------------------------------------------------ - -IMPL_LINK_INLINE_START( SvxPositionSizeTabPage, ChangePosYHdl, void *, EMPTYARG ) -{ - return( 0L ); -} -IMPL_LINK_INLINE_END( SvxPositionSizeTabPage, ChangePosYHdl, void *, EMPTYARG ) - -//------------------------------------------------------------------------ - -void SvxPositionSizeTabPage::SetMinMaxPosition() -{ - // position - double fLeft(maWorkRange.getMinX()); - double fTop(maWorkRange.getMinY()); - double fRight(maWorkRange.getMaxX()); - double fBottom(maWorkRange.getMaxY()); - - switch ( maCtlPos.GetActualRP() ) - { - case RP_LT: - { - fRight -= maRange.getWidth(); - fBottom -= maRange.getHeight(); - break; - } - case RP_MT: - { - fLeft += maRange.getWidth() / 2.0; - fRight -= maRange.getWidth() / 2.0; - fBottom -= maRange.getHeight(); - break; - } - case RP_RT: - { - fLeft += maRange.getWidth(); - fBottom -= maRange.getHeight(); - break; - } - case RP_LM: - { - fRight -= maRange.getWidth(); - fTop += maRange.getHeight() / 2.0; - fBottom -= maRange.getHeight() / 2.0; - break; - } - case RP_MM: - { - fLeft += maRange.getWidth() / 2.0; - fRight -= maRange.getWidth() / 2.0; - fTop += maRange.getHeight() / 2.0; - fBottom -= maRange.getHeight() / 2.0; - break; - } - case RP_RM: - { - fLeft += maRange.getWidth(); - fTop += maRange.getHeight() / 2.0; - fBottom -= maRange.getHeight() / 2.0; - break; - } - case RP_LB: - { - fRight -= maRange.getWidth(); - fTop += maRange.getHeight(); - break; - } - case RP_MB: - { - fLeft += maRange.getWidth() / 2.0; - fRight -= maRange.getWidth() / 2.0; - fTop += maRange.getHeight(); - break; - } - case RP_RB: - { - fLeft += maRange.getWidth(); - fTop += maRange.getHeight(); - break; - } - } - - const double fMaxLong((double)(MetricField::ConvertValue( LONG_MAX, 0, MAP_100TH_MM, meDlgUnit ) - 1L)); - fLeft = (fLeft > fMaxLong) ? fMaxLong : (fLeft < -fMaxLong) ? -fMaxLong : fLeft; - fRight = (fRight > fMaxLong) ? fMaxLong : (fRight < -fMaxLong) ? -fMaxLong : fRight; - fTop = (fTop > fMaxLong) ? fMaxLong : (fTop < -fMaxLong) ? -fMaxLong : fTop; - fBottom = (fBottom > fMaxLong) ? fMaxLong : (fBottom < -fMaxLong) ? -fMaxLong : fBottom; - - // #i75273# normalizing when setting the min/max values was wrong, removed - maMtrPosX.SetMin(basegfx::fround64(fLeft)); - maMtrPosX.SetFirst(basegfx::fround64(fLeft)); - maMtrPosX.SetMax(basegfx::fround64(fRight)); - maMtrPosX.SetLast(basegfx::fround64(fRight)); - maMtrPosY.SetMin(basegfx::fround64(fTop)); - maMtrPosY.SetFirst(basegfx::fround64(fTop)); - maMtrPosY.SetMax(basegfx::fround64(fBottom)); - maMtrPosY.SetLast(basegfx::fround64(fBottom)); - - // size - fLeft = maWorkRange.getMinX(); - fTop = maWorkRange.getMinY(); - fRight = maWorkRange.getMaxX(); - fBottom = maWorkRange.getMaxY(); - double fNewX(0); - double fNewY(0); - - switch ( maCtlSize.GetActualRP() ) - { - case RP_LT: - { - fNewX = maWorkRange.getWidth() - ( maRange.getMinX() - fLeft ); - fNewY = maWorkRange.getHeight() - ( maRange.getMinY() - fTop ); - break; - } - case RP_MT: - { - fNewX = std::min( maRange.getCenter().getX() - fLeft, fRight - maRange.getCenter().getX() ) * 2.0; - fNewY = maWorkRange.getHeight() - ( maRange.getMinY() - fTop ); - break; - } - case RP_RT: - { - fNewX = maWorkRange.getWidth() - ( fRight - maRange.getMaxX() ); - fNewY = maWorkRange.getHeight() - ( maRange.getMinY() - fTop ); - break; - } - case RP_LM: - { - fNewX = maWorkRange.getWidth() - ( maRange.getMinX() - fLeft ); - fNewY = std::min( maRange.getCenter().getY() - fTop, fBottom - maRange.getCenter().getY() ) * 2.0; - break; - } - case RP_MM: - { - const double f1(maRange.getCenter().getX() - fLeft); - const double f2(fRight - maRange.getCenter().getX()); - const double f3(std::min(f1, f2)); - const double f4(maRange.getCenter().getY() - fTop); - const double f5(fBottom - maRange.getCenter().getY()); - const double f6(std::min(f4, f5)); - - fNewX = f3 * 2.0; - fNewY = f6 * 3.0; - - break; - } - case RP_RM: - { - fNewX = maWorkRange.getWidth() - ( fRight - maRange.getMaxX() ); - fNewY = std::min( maRange.getCenter().getY() - fTop, fBottom - maRange.getCenter().getY() ) * 2.0; - break; - } - case RP_LB: - { - fNewX = maWorkRange.getWidth() - ( maRange.getMinX() - fLeft ); - fNewY = maWorkRange.getHeight() - ( fBottom - maRange.getMaxY() ); - break; - } - case RP_MB: - { - fNewX = std::min( maRange.getCenter().getX() - fLeft, fRight - maRange.getCenter().getX() ) * 2.0; - fNewY = maWorkRange.getHeight() - ( maRange.getMaxY() - fBottom ); - break; - } - case RP_RB: - { - fNewX = maWorkRange.getWidth() - ( fRight - maRange.getMaxX() ); - fNewY = maWorkRange.getHeight() - ( fBottom - maRange.getMaxY() ); - break; - } - } - - // #i75273# normalizing when setting the min/max values was wrong, removed - maMtrWidth.SetMax(basegfx::fround64(fNewX)); - maMtrWidth.SetLast(basegfx::fround64(fNewX)); - maMtrHeight.SetMax(basegfx::fround64(fNewY)); - maMtrHeight.SetLast(basegfx::fround64(fNewY)); -} - -//------------------------------------------------------------------------ - -void SvxPositionSizeTabPage::GetTopLeftPosition(double& rfX, double& rfY, const basegfx::B2DRange& rRange) -{ - switch (maCtlPos.GetActualRP()) - { - case RP_LT: - { - break; - } - case RP_MT: - { - rfX -= rRange.getCenter().getX() - rRange.getMinX(); - break; - } - case RP_RT: - { - rfX -= rRange.getWidth(); - break; - } - case RP_LM: - { - rfY -= rRange.getCenter().getY() - rRange.getMinY(); - break; - } - case RP_MM: - { - rfX -= rRange.getCenter().getX() - rRange.getMinX(); - rfY -= rRange.getCenter().getY() - rRange.getMinY(); - break; - } - case RP_RM: - { - rfX -= rRange.getWidth(); - rfY -= rRange.getCenter().getY() - rRange.getMinY(); - break; - } - case RP_LB: - { - rfY -= rRange.getHeight(); - break; - } - case RP_MB: - { - rfX -= rRange.getCenter().getX() - rRange.getMinX(); - rfY -= rRange.getHeight(); - break; - } - case RP_RB: - { - rfX -= rRange.getWidth(); - rfY -= rRange.getHeight(); - break; - } - } -} - -//------------------------------------------------------------------------ - -void SvxPositionSizeTabPage::PointChanged( Window* pWindow, RECT_POINT eRP ) -{ - if( pWindow == &maCtlPos ) - { - SetMinMaxPosition(); - switch( eRP ) - { - case RP_LT: - { - maMtrPosX.SetValue( basegfx::fround64(maRange.getMinX()) ); - maMtrPosY.SetValue( basegfx::fround64(maRange.getMinY()) ); - break; - } - case RP_MT: - { - maMtrPosX.SetValue( basegfx::fround64(maRange.getCenter().getX()) ); - maMtrPosY.SetValue( basegfx::fround64(maRange.getMinY()) ); - break; - } - case RP_RT: - { - maMtrPosX.SetValue( basegfx::fround64(maRange.getMaxX()) ); - maMtrPosY.SetValue( basegfx::fround64(maRange.getMinY()) ); - break; - } - case RP_LM: - { - maMtrPosX.SetValue( basegfx::fround64(maRange.getMinX()) ); - maMtrPosY.SetValue( basegfx::fround64(maRange.getCenter().getY()) ); - break; - } - case RP_MM: - { - maMtrPosX.SetValue( basegfx::fround64(maRange.getCenter().getX()) ); - maMtrPosY.SetValue( basegfx::fround64(maRange.getCenter().getY()) ); - break; - } - case RP_RM: - { - maMtrPosX.SetValue( basegfx::fround64(maRange.getMaxX()) ); - maMtrPosY.SetValue( basegfx::fround64(maRange.getCenter().getY()) ); - break; - } - case RP_LB: - { - maMtrPosX.SetValue( basegfx::fround64(maRange.getMinX()) ); - maMtrPosY.SetValue( basegfx::fround64(maRange.getMaxY()) ); - break; - } - case RP_MB: - { - maMtrPosX.SetValue( basegfx::fround64(maRange.getCenter().getX()) ); - maMtrPosY.SetValue( basegfx::fround64(maRange.getMaxY()) ); - break; - } - case RP_RB: - { - maMtrPosX.SetValue( basegfx::fround64(maRange.getMaxX()) ); - maMtrPosY.SetValue( basegfx::fround64(maRange.getMaxY()) ); - break; - } - } - } - else - { - meRP = eRP; - - Rectangle aTmpRect( GetRect() ); - SetMinMaxPosition(); - } -} - -//------------------------------------------------------------------------ - -void SvxPositionSizeTabPage::DisableResize() -{ - mbSizeDisabled = true; -} - -//------------------------------------------------------------------------ - -void SvxPositionSizeTabPage::DisableProtect() -{ - mbProtectDisabled = true; -} - -//------------------------------------------------------------------------ - -Rectangle SvxPositionSizeTabPage::GetRect() -{ - double fLeft(maRange.getMinX()); - double fTop(maRange.getMinY()); - double fRight(fLeft + (double)maMtrWidth.GetValue()); - double fBottom(fTop + (double)maMtrHeight.GetValue()); - - switch ( maCtlSize.GetActualRP() ) - { - case RP_LT: - { - break; - } - case RP_MT: - { - fLeft = maRange.getMinX() - ( fRight - maRange.getMaxX() ) / 2.0; - break; - } - case RP_RT: - { - fLeft = maRange.getMinX() - ( fRight - maRange.getMaxX() ); - break; - } - case RP_LM: - { - fTop = maRange.getMinY() - ( fBottom - maRange.getMaxY() ) / 2.0; - break; - } - case RP_MM: - { - fLeft = maRange.getMinX() - ( fRight - maRange.getMaxX() ) / 2.0; - fTop = maRange.getMinY() - ( fBottom - maRange.getMaxY() ) / 2.0; - break; - } - case RP_RM: - { - fLeft = maRange.getMinX() - ( fRight - maRange.getMaxX() ); - fTop = maRange.getMinY() - ( fBottom - maRange.getMaxY() ) / 2.0; - break; - } - case RP_LB: - { - fTop = maRange.getMinY() - ( fBottom - maRange.getMaxY() ); - break; - } - case RP_MB: - { - fLeft = maRange.getMinX() - ( fRight - maRange.getMaxX() ) / 2.0; - fTop = maRange.getMinY() - ( fBottom - maRange.getMaxY() ); - break; - } - case RP_RB: - { - fLeft = maRange.getMinX() - ( fRight - maRange.getMaxX() ); - fTop = maRange.getMinY() - ( fBottom - maRange.getMaxY() ); - break; - } - } - - return Rectangle(basegfx::fround(fLeft), basegfx::fround(fTop), basegfx::fround(fRight), basegfx::fround(fBottom)); -} - -//------------------------------------------------------------------------ - -IMPL_LINK( SvxPositionSizeTabPage, ChangeWidthHdl, void *, EMPTYARG ) -{ - if( maCbxScale.IsChecked() && maCbxScale.IsEnabled() ) - { - sal_Int64 nHeight(basegfx::fround64((mfOldHeight * (double)maMtrWidth.GetValue()) / mfOldWidth)); - - if(nHeight <= maMtrHeight.GetMax(FUNIT_NONE)) - { - maMtrHeight.SetUserValue(nHeight, FUNIT_NONE); - } - else - { - nHeight = maMtrHeight.GetMax(FUNIT_NONE); - maMtrHeight.SetUserValue(nHeight); - - const sal_Int64 nWidth(basegfx::fround64((mfOldWidth * (double)nHeight) / mfOldHeight)); - maMtrWidth.SetUserValue(nWidth, FUNIT_NONE); - } - } - - return( 0L ); -} - -//------------------------------------------------------------------------ - -IMPL_LINK( SvxPositionSizeTabPage, ChangeHeightHdl, void *, EMPTYARG ) -{ - if( maCbxScale.IsChecked() && maCbxScale.IsEnabled() ) - { - sal_Int64 nWidth(basegfx::fround64((mfOldWidth * (double)maMtrHeight.GetValue()) / mfOldHeight)); - - if(nWidth <= maMtrWidth.GetMax(FUNIT_NONE)) - { - maMtrWidth.SetUserValue(nWidth, FUNIT_NONE); - } - else - { - nWidth = maMtrWidth.GetMax(FUNIT_NONE); - maMtrWidth.SetUserValue(nWidth); - - const sal_Int64 nHeight(basegfx::fround64((mfOldHeight * (double)nWidth) / mfOldWidth)); - maMtrHeight.SetUserValue(nHeight, FUNIT_NONE); - } - } - - return( 0L ); -} - -//------------------------------------------------------------------------ - -IMPL_LINK( SvxPositionSizeTabPage, ClickSizeProtectHdl, void *, EMPTYARG ) -{ - UpdateControlStates(); - return( 0L ); -} - -//------------------------------------------------------------------------ - -IMPL_LINK( SvxPositionSizeTabPage, ClickAutoHdl, void *, EMPTYARG ) -{ - if( maCbxScale.IsChecked() ) - { - mfOldWidth = std::max( (double)GetCoreValue( maMtrWidth, mePoolUnit ), 1.0 ); - mfOldHeight = std::max( (double)GetCoreValue( maMtrHeight, mePoolUnit ), 1.0 ); - } - - return( 0L ); -} - -//------------------------------------------------------------------------ - -void SvxPositionSizeTabPage::FillUserData() -{ - // Abgleich wird in der Ini-Datei festgehalten - UniString aStr = UniString::CreateFromInt32( (sal_Int32) maCbxScale.IsChecked() ); - SetUserData( aStr ); -} - -// eof - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ |