/************************************************************** * * 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. * *************************************************************/ #ifndef _CHART2_SELECTIONHELPER_HXX #define _CHART2_SELECTIONHELPER_HXX #include "DrawViewWrapper.hxx" #include "ObjectIdentifier.hxx" class SdrObject; // header for enum SdrDragMode #include #include //............................................................................. 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