1*b1cdbd2cSJim Jagielski /************************************************************** 2*b1cdbd2cSJim Jagielski * 3*b1cdbd2cSJim Jagielski * Licensed to the Apache Software Foundation (ASF) under one 4*b1cdbd2cSJim Jagielski * or more contributor license agreements. See the NOTICE file 5*b1cdbd2cSJim Jagielski * distributed with this work for additional information 6*b1cdbd2cSJim Jagielski * regarding copyright ownership. The ASF licenses this file 7*b1cdbd2cSJim Jagielski * to you under the Apache License, Version 2.0 (the 8*b1cdbd2cSJim Jagielski * "License"); you may not use this file except in compliance 9*b1cdbd2cSJim Jagielski * with the License. You may obtain a copy of the License at 10*b1cdbd2cSJim Jagielski * 11*b1cdbd2cSJim Jagielski * http://www.apache.org/licenses/LICENSE-2.0 12*b1cdbd2cSJim Jagielski * 13*b1cdbd2cSJim Jagielski * Unless required by applicable law or agreed to in writing, 14*b1cdbd2cSJim Jagielski * software distributed under the License is distributed on an 15*b1cdbd2cSJim Jagielski * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 16*b1cdbd2cSJim Jagielski * KIND, either express or implied. See the License for the 17*b1cdbd2cSJim Jagielski * specific language governing permissions and limitations 18*b1cdbd2cSJim Jagielski * under the License. 19*b1cdbd2cSJim Jagielski * 20*b1cdbd2cSJim Jagielski *************************************************************/ 21*b1cdbd2cSJim Jagielski 22*b1cdbd2cSJim Jagielski 23*b1cdbd2cSJim Jagielski #ifndef _CHART2_SELECTIONHELPER_HXX 24*b1cdbd2cSJim Jagielski #define _CHART2_SELECTIONHELPER_HXX 25*b1cdbd2cSJim Jagielski 26*b1cdbd2cSJim Jagielski #include "DrawViewWrapper.hxx" 27*b1cdbd2cSJim Jagielski #include "ObjectIdentifier.hxx" 28*b1cdbd2cSJim Jagielski 29*b1cdbd2cSJim Jagielski class SdrObject; 30*b1cdbd2cSJim Jagielski // header for enum SdrDragMode 31*b1cdbd2cSJim Jagielski #include <svx/svdtypes.hxx> 32*b1cdbd2cSJim Jagielski #include <com/sun/star/drawing/XShape.hpp> 33*b1cdbd2cSJim Jagielski 34*b1cdbd2cSJim Jagielski //............................................................................. 35*b1cdbd2cSJim Jagielski namespace chart 36*b1cdbd2cSJim Jagielski { 37*b1cdbd2cSJim Jagielski //............................................................................. 38*b1cdbd2cSJim Jagielski 39*b1cdbd2cSJim Jagielski class ObjectIdentifier; 40*b1cdbd2cSJim Jagielski 41*b1cdbd2cSJim Jagielski //----------------------------------------------------------------------------- 42*b1cdbd2cSJim Jagielski /** 43*b1cdbd2cSJim Jagielski */ 44*b1cdbd2cSJim Jagielski class Selection 45*b1cdbd2cSJim Jagielski { 46*b1cdbd2cSJim Jagielski public: //methods 47*b1cdbd2cSJim Jagielski bool hasSelection(); 48*b1cdbd2cSJim Jagielski 49*b1cdbd2cSJim Jagielski rtl::OUString getSelectedCID(); 50*b1cdbd2cSJim Jagielski ::com::sun::star::uno::Reference< 51*b1cdbd2cSJim Jagielski ::com::sun::star::drawing::XShape > getSelectedAdditionalShape(); 52*b1cdbd2cSJim Jagielski ObjectIdentifier getSelectedOID() const; 53*b1cdbd2cSJim Jagielski 54*b1cdbd2cSJim Jagielski bool isResizeableObjectSelected(); 55*b1cdbd2cSJim Jagielski bool isRotateableObjectSelected( const ::com::sun::star::uno::Reference< 56*b1cdbd2cSJim Jagielski ::com::sun::star::frame::XModel >& xChartModel ); 57*b1cdbd2cSJim Jagielski bool isDragableObjectSelected(); 58*b1cdbd2cSJim Jagielski 59*b1cdbd2cSJim Jagielski bool isAdditionalShapeSelected() const; 60*b1cdbd2cSJim Jagielski 61*b1cdbd2cSJim Jagielski //returns true if selection has changed 62*b1cdbd2cSJim Jagielski bool setSelection( const ::rtl::OUString& rCID ); 63*b1cdbd2cSJim Jagielski bool setSelection( const ::com::sun::star::uno::Reference< 64*b1cdbd2cSJim Jagielski ::com::sun::star::drawing::XShape >& xShape ); 65*b1cdbd2cSJim Jagielski 66*b1cdbd2cSJim Jagielski void clearSelection(); 67*b1cdbd2cSJim Jagielski 68*b1cdbd2cSJim Jagielski //returns true if the selection has changed 69*b1cdbd2cSJim Jagielski bool maybeSwitchSelectionAfterSingleClickWasEnsured(); 70*b1cdbd2cSJim Jagielski void resetPossibleSelectionAfterSingleClickWasEnsured(); 71*b1cdbd2cSJim Jagielski 72*b1cdbd2cSJim Jagielski void remindSelectionBeforeMouseDown(); 73*b1cdbd2cSJim Jagielski bool isSelectionDifferentFromBeforeMouseDown(); 74*b1cdbd2cSJim Jagielski 75*b1cdbd2cSJim Jagielski void adaptSelectionToNewPos( const Point& rMousePos, DrawViewWrapper* pDrawViewWrapper 76*b1cdbd2cSJim Jagielski , bool bIsRightMouse, bool bWaitingForDoubleClick ); 77*b1cdbd2cSJim Jagielski 78*b1cdbd2cSJim Jagielski void applySelection( DrawViewWrapper* pDrawViewWrapper ); 79*b1cdbd2cSJim Jagielski 80*b1cdbd2cSJim Jagielski private: //member 81*b1cdbd2cSJim Jagielski //the selection could be given by a CID or by a shape 82*b1cdbd2cSJim Jagielski //if m_aSelectedObjectCID is not empty this indicates the selection 83*b1cdbd2cSJim Jagielski //the content of m_xSelectedShape is ignored in that case 84*b1cdbd2cSJim Jagielski //the strings are used for autogenerated chart specific objects 85*b1cdbd2cSJim Jagielski //the shape reference is used for additional shapes 86*b1cdbd2cSJim Jagielski ObjectIdentifier m_aSelectedOID; //only single object selection so far 87*b1cdbd2cSJim Jagielski ObjectIdentifier m_aSelectedOID_beforeMouseDown; 88*b1cdbd2cSJim Jagielski ObjectIdentifier m_aSelectedOID_selectOnlyIfNoDoubleClickIsFollowing; 89*b1cdbd2cSJim Jagielski }; 90*b1cdbd2cSJim Jagielski 91*b1cdbd2cSJim Jagielski class SelectionHelper : public MarkHandleProvider 92*b1cdbd2cSJim Jagielski { 93*b1cdbd2cSJim Jagielski public: 94*b1cdbd2cSJim Jagielski static bool findNamedParent( SdrObject*& pInOutObject 95*b1cdbd2cSJim Jagielski , rtl::OUString& rOutName 96*b1cdbd2cSJim Jagielski , bool bGivenObjectMayBeResult ); 97*b1cdbd2cSJim Jagielski static bool findNamedParent( SdrObject*& pInOutObject 98*b1cdbd2cSJim Jagielski , ObjectIdentifier& rOutObject 99*b1cdbd2cSJim Jagielski , bool bGivenObjectMayBeResult ); 100*b1cdbd2cSJim Jagielski static SdrObject* getMarkHandlesObject( SdrObject* pObj ); 101*b1cdbd2cSJim Jagielski static E3dScene* getSceneToRotate( SdrObject* pObj ); 102*b1cdbd2cSJim Jagielski static bool isDragableObjectHitTwice( const Point& rMPos 103*b1cdbd2cSJim Jagielski , const rtl::OUString& rNameOfSelectedObject 104*b1cdbd2cSJim Jagielski , const DrawViewWrapper& rDrawViewWrapper ); 105*b1cdbd2cSJim Jagielski 106*b1cdbd2cSJim Jagielski static ::rtl::OUString getHitObjectCID( 107*b1cdbd2cSJim Jagielski const Point& rMPos, 108*b1cdbd2cSJim Jagielski DrawViewWrapper& rDrawViewWrapper, 109*b1cdbd2cSJim Jagielski bool bGetDiagramInsteadOf_Wall=false ); 110*b1cdbd2cSJim Jagielski 111*b1cdbd2cSJim Jagielski static bool isRotateableObject( const ::rtl::OUString& rCID 112*b1cdbd2cSJim Jagielski , const ::com::sun::star::uno::Reference< 113*b1cdbd2cSJim Jagielski ::com::sun::star::frame::XModel >& xChartModel ); 114*b1cdbd2cSJim Jagielski 115*b1cdbd2cSJim Jagielski 116*b1cdbd2cSJim Jagielski SelectionHelper( SdrObject* pSelectedObj ); 117*b1cdbd2cSJim Jagielski virtual ~SelectionHelper(); 118*b1cdbd2cSJim Jagielski 119*b1cdbd2cSJim Jagielski 120*b1cdbd2cSJim Jagielski //MarkHandleProvider: 121*b1cdbd2cSJim Jagielski virtual bool getMarkHandles( SdrHdlList& rHdlList ); 122*b1cdbd2cSJim Jagielski virtual bool getFrameDragSingles(); 123*b1cdbd2cSJim Jagielski 124*b1cdbd2cSJim Jagielski SdrObject* getObjectToMark();//sets also internally the mark object 125*b1cdbd2cSJim Jagielski //-> getMarkHandles will behave different if this method has found a Mark Object different from m_pSelectedObj 126*b1cdbd2cSJim Jagielski 127*b1cdbd2cSJim Jagielski private: 128*b1cdbd2cSJim Jagielski SdrObject* m_pSelectedObj;//hit and logically selected object 129*b1cdbd2cSJim Jagielski SdrObject* m_pMarkObj;//object that is marked instead to have more pretty handles 130*b1cdbd2cSJim Jagielski }; 131*b1cdbd2cSJim Jagielski 132*b1cdbd2cSJim Jagielski //............................................................................. 133*b1cdbd2cSJim Jagielski } //namespace chart 134*b1cdbd2cSJim Jagielski //............................................................................. 135*b1cdbd2cSJim Jagielski #endif 136