| /************************************************************** |
| * |
| * Licensed to the Apache Software Foundation (ASF) under one |
| * or more contributor license agreements. See the NOTICE file |
| * distributed with this work for additional information |
| * regarding copyright ownership. The ASF licenses this file |
| * to you under the Apache License, Version 2.0 (the |
| * "License"); you may not use this file except in compliance |
| * with the License. You may obtain a copy of the License at |
| * |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, |
| * software distributed under the License is distributed on an |
| * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY |
| * KIND, either express or implied. See the License for the |
| * specific language governing permissions and limitations |
| * under the License. |
| * |
| *************************************************************/ |
| |
| |
| |
| // MARKER(update_precomp.py): autogen include statement, do not remove |
| #include "precompiled_chart2.hxx" |
| #include "ChartController.hxx" |
| |
| #include "macros.hxx" |
| #include "ChartWindow.hxx" |
| #include "DrawViewWrapper.hxx" |
| #include "PositionAndSizeHelper.hxx" |
| #include "ChartModelHelper.hxx" |
| #include "UndoGuard.hxx" |
| #include "Strings.hrc" |
| #include "ObjectNameProvider.hxx" |
| #include "DiagramHelper.hxx" |
| #include "chartview/ExplicitValueProvider.hxx" |
| #include "CommonConverters.hxx" |
| #include <svx/ActionDescriptionProvider.hxx> |
| |
| // header for define RET_OK |
| #include <vcl/msgbox.hxx> |
| #include <svx/svxids.hrc> |
| #include <svx/rectenum.hxx> |
| #include <svl/aeitem.hxx> |
| #include <svx/svxdlg.hxx> |
| #include <svx/dialogs.hrc> |
| #include <vcl/svapp.hxx> |
| #include <vos/mutex.hxx> |
| |
| //............................................................................. |
| namespace chart |
| { |
| //............................................................................. |
| using namespace ::com::sun::star; |
| using namespace ::com::sun::star::chart2; |
| |
| //----------------------------------------------------------------------------- |
| //----------------------------------------------------------------------------- |
| |
| void lcl_getPositionAndSizeFromItemSet( const SfxItemSet& rItemSet, awt::Rectangle& rPosAndSize, const awt::Size aOriginalSize ) |
| { |
| long nPosX(0); |
| long nPosY(0); |
| long nSizX(0); |
| long nSizY(0); |
| |
| RECT_POINT eRP = (RECT_POINT)RP_LT; |
| |
| const SfxPoolItem* pPoolItem=NULL; |
| //read position |
| if (SFX_ITEM_SET==rItemSet.GetItemState(SID_ATTR_TRANSFORM_POS_X,sal_True,&pPoolItem)) |
| nPosX=((const SfxInt32Item*)pPoolItem)->GetValue(); |
| if (SFX_ITEM_SET==rItemSet.GetItemState(SID_ATTR_TRANSFORM_POS_Y,sal_True,&pPoolItem)) |
| nPosY=((const SfxInt32Item*)pPoolItem)->GetValue(); |
| //read size |
| if (SFX_ITEM_SET==rItemSet.GetItemState(SID_ATTR_TRANSFORM_WIDTH,sal_True,&pPoolItem)) |
| nSizX=((const SfxUInt32Item*)pPoolItem)->GetValue(); |
| if (SFX_ITEM_SET==rItemSet.GetItemState(SID_ATTR_TRANSFORM_HEIGHT,sal_True,&pPoolItem)) |
| nSizY=((const SfxUInt32Item*)pPoolItem)->GetValue(); |
| if (SFX_ITEM_SET==rItemSet.GetItemState(SID_ATTR_TRANSFORM_SIZE_POINT,sal_True,&pPoolItem)) |
| eRP=(RECT_POINT)((const SfxAllEnumItem*)pPoolItem)->GetValue(); |
| |
| switch( eRP ) |
| { |
| case RP_LT: |
| break; |
| case RP_MT: |
| nPosX += ( aOriginalSize.Width - nSizX ) / 2; |
| break; |
| case RP_RT: |
| nPosX += aOriginalSize.Width - nSizX; |
| break; |
| case RP_LM: |
| nPosY += ( aOriginalSize.Height - nSizY ) / 2; |
| break; |
| case RP_MM: |
| nPosX += ( aOriginalSize.Width - nSizX ) / 2; |
| nPosY += ( aOriginalSize.Height - nSizY ) / 2; |
| break; |
| case RP_RM: |
| nPosX += aOriginalSize.Width - nSizX; |
| nPosY += ( aOriginalSize.Height - nSizY ) / 2; |
| break; |
| case RP_LB: |
| nPosY += aOriginalSize.Height - nSizY; |
| break; |
| case RP_MB: |
| nPosX += ( aOriginalSize.Width - nSizX ) / 2; |
| nPosY += aOriginalSize.Height - nSizY; |
| break; |
| case RP_RB: |
| nPosX += aOriginalSize.Width - nSizX; |
| nPosY += aOriginalSize.Height - nSizY; |
| break; |
| default: |
| break; |
| } |
| |
| rPosAndSize = awt::Rectangle(nPosX,nPosY,nSizX,nSizY); |
| } |
| |
| void SAL_CALL ChartController::executeDispatch_PositionAndSize() |
| { |
| const ::rtl::OUString aCID( m_aSelection.getSelectedCID() ); |
| |
| if( aCID.isEmpty() ) |
| return; |
| |
| awt::Size aSelectedSize; |
| ExplicitValueProvider* pProvider( ExplicitValueProvider::getExplicitValueProvider( m_xChartView ) ); |
| if( pProvider ) |
| aSelectedSize = ToSize( ( pProvider->getRectangleOfObject( aCID ) ) ); |
| |
| ObjectType eObjectType = ObjectIdentifier::getObjectType( aCID ); |
| |
| UndoGuard aUndoGuard( |
| ActionDescriptionProvider::createDescription( |
| ActionDescriptionProvider::POS_SIZE, |
| ObjectNameProvider::getName( eObjectType)), |
| m_xUndoManager ); |
| |
| SfxAbstractTabDialog * pDlg = NULL; |
| try |
| { |
| SfxItemSet aItemSet = m_pDrawViewWrapper->getPositionAndSizeItemSetFromMarkedObject(); |
| |
| //prepare and open dialog |
| SdrView* pSdrView = m_pDrawViewWrapper; |
| bool bResizePossible = m_aSelection.isResizeableObjectSelected(); |
| |
| ::vos::OGuard aGuard( Application::GetSolarMutex()); |
| SvxAbstractDialogFactory * pFact = SvxAbstractDialogFactory::Create(); |
| DBG_ASSERT( pFact, "No dialog factory" ); |
| pDlg = pFact->CreateSchTransformTabDialog( |
| m_pChartWindow, &aItemSet, pSdrView, RID_SCH_TransformTabDLG_SVXPAGE_ANGLE, bResizePossible ); |
| DBG_ASSERT( pDlg, "Couldn't create SchTransformTabDialog" ); |
| |
| |
| if( pDlg->Execute() == RET_OK ) |
| { |
| const SfxItemSet* pOutItemSet = pDlg->GetOutputItemSet(); |
| if(pOutItemSet) |
| { |
| awt::Rectangle aObjectRect; |
| aItemSet.Put(*pOutItemSet);//overwrite old values with new values (-> all items are set) |
| lcl_getPositionAndSizeFromItemSet( aItemSet, aObjectRect, aSelectedSize ); |
| awt::Size aPageSize( ChartModelHelper::getPageSize( getModel() ) ); |
| awt::Rectangle aPageRect( 0,0,aPageSize.Width,aPageSize.Height ); |
| |
| bool bChanged = false; |
| if ( eObjectType == OBJECTTYPE_LEGEND ) |
| bChanged = DiagramHelper::switchDiagramPositioningToExcludingPositioning( getModel(), false , true ); |
| |
| bool bMoved = PositionAndSizeHelper::moveObject( m_aSelection.getSelectedCID(), getModel() |
| , aObjectRect, aPageRect ); |
| if( bMoved || bChanged ) |
| aUndoGuard.commit(); |
| } |
| } |
| delete pDlg; |
| } |
| catch( uno::Exception& e) |
| { |
| delete pDlg; |
| ASSERT_EXCEPTION( e ); |
| } |
| } |
| |
| //............................................................................. |
| } //namespace chart |
| //............................................................................. |