diff options
Diffstat (limited to 'chart2/source/controller/main/SelectionHelper.hxx')
-rw-r--r-- | chart2/source/controller/main/SelectionHelper.hxx | 139 |
1 files changed, 139 insertions, 0 deletions
diff --git a/chart2/source/controller/main/SelectionHelper.hxx b/chart2/source/controller/main/SelectionHelper.hxx new file mode 100644 index 000000000000..b3516e2326a4 --- /dev/null +++ b/chart2/source/controller/main/SelectionHelper.hxx @@ -0,0 +1,139 @@ +/************************************************************************* + * + * 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. + * + ************************************************************************/ +#ifndef _CHART2_SELECTIONHELPER_HXX +#define _CHART2_SELECTIONHELPER_HXX + +#include "DrawViewWrapper.hxx" +#include "ObjectIdentifier.hxx" + +class SdrObject; +// header for enum SdrDragMode +#include <svx/svdtypes.hxx> +#include <com/sun/star/drawing/XShape.hpp> + +//............................................................................. +namespace chart +{ +//............................................................................. + +class ObjectIdentifier; + +//----------------------------------------------------------------------------- +/** +*/ +class Selection +{ +public: //methods + bool hasSelection(); + + rtl::OUString getSelectedCID(); + ::com::sun::star::uno::Reference< + ::com::sun::star::drawing::XShape > getSelectedAdditionalShape(); + ObjectIdentifier getSelectedOID() const; + + bool isResizeableObjectSelected(); + bool isRotateableObjectSelected( const ::com::sun::star::uno::Reference< + ::com::sun::star::frame::XModel >& xChartModel ); + bool isDragableObjectSelected(); + + bool isAdditionalShapeSelected() const; + + //returns true if selection has changed + bool setSelection( const ::rtl::OUString& rCID ); + bool setSelection( const ::com::sun::star::uno::Reference< + ::com::sun::star::drawing::XShape >& xShape ); + + void clearSelection(); + + //returns true if the selection has changed + bool maybeSwitchSelectionAfterSingleClickWasEnsured(); + void resetPossibleSelectionAfterSingleClickWasEnsured(); + + void remindSelectionBeforeMouseDown(); + bool isSelectionDifferentFromBeforeMouseDown(); + + void adaptSelectionToNewPos( const Point& rMousePos, DrawViewWrapper* pDrawViewWrapper + , bool bIsRightMouse, bool bWaitingForDoubleClick ); + + void applySelection( DrawViewWrapper* pDrawViewWrapper ); + +private: //member + //the selection could be given by a CID or by a shape + //if m_aSelectedObjectCID is not empty this indicates the selection + //the content of m_xSelectedShape is ignored in that case + //the strings are used for autogenerated chart specific objects + //the shape reference is used for additional shapes + ObjectIdentifier m_aSelectedOID; //only single object selection so far + ObjectIdentifier m_aSelectedOID_beforeMouseDown; + ObjectIdentifier m_aSelectedOID_selectOnlyIfNoDoubleClickIsFollowing; +}; + +class SelectionHelper : public MarkHandleProvider +{ +public: + static bool findNamedParent( SdrObject*& pInOutObject + , rtl::OUString& rOutName + , bool bGivenObjectMayBeResult ); + static bool findNamedParent( SdrObject*& pInOutObject + , ObjectIdentifier& rOutObject + , bool bGivenObjectMayBeResult ); + static SdrObject* getMarkHandlesObject( SdrObject* pObj ); + static E3dScene* getSceneToRotate( SdrObject* pObj ); + static bool isDragableObjectHitTwice( const Point& rMPos + , const rtl::OUString& rNameOfSelectedObject + , const DrawViewWrapper& rDrawViewWrapper ); + + static ::rtl::OUString getHitObjectCID( + const Point& rMPos, + DrawViewWrapper& rDrawViewWrapper, + bool bGetDiagramInsteadOf_Wall=false ); + + static bool isRotateableObject( const ::rtl::OUString& rCID + , const ::com::sun::star::uno::Reference< + ::com::sun::star::frame::XModel >& xChartModel ); + + + SelectionHelper( SdrObject* pSelectedObj ); + virtual ~SelectionHelper(); + + + //MarkHandleProvider: + virtual bool getMarkHandles( SdrHdlList& rHdlList ); + virtual bool getFrameDragSingles(); + + SdrObject* getObjectToMark();//sets also internally the mark object + //-> getMarkHandles will behave different if this method has found a Mark Object different from m_pSelectedObj + +private: + SdrObject* m_pSelectedObj;//hit and logically selected object + SdrObject* m_pMarkObj;//object that is marked instead to have more pretty handles +}; + +//............................................................................. +} //namespace chart +//............................................................................. +#endif |