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 24*b1cdbd2cSJim Jagielski #ifndef _SDTREELB_HXX 25*b1cdbd2cSJim Jagielski #define _SDTREELB_HXX 26*b1cdbd2cSJim Jagielski 27*b1cdbd2cSJim Jagielski #include <svtools/transfer.hxx> 28*b1cdbd2cSJim Jagielski 29*b1cdbd2cSJim Jagielski #ifndef _SD_SDRESID_HXX 30*b1cdbd2cSJim Jagielski #include "sdresid.hxx" 31*b1cdbd2cSJim Jagielski #endif 32*b1cdbd2cSJim Jagielski #include "pres.hxx" 33*b1cdbd2cSJim Jagielski #include "sddllapi.h" 34*b1cdbd2cSJim Jagielski #include <tools/string.hxx> 35*b1cdbd2cSJim Jagielski #include <svtools/svtreebx.hxx> 36*b1cdbd2cSJim Jagielski #include <svl/urlbmk.hxx> 37*b1cdbd2cSJim Jagielski #include <tools/ref.hxx> 38*b1cdbd2cSJim Jagielski #include "sdxfer.hxx" 39*b1cdbd2cSJim Jagielski #include <vector> 40*b1cdbd2cSJim Jagielski using namespace std; 41*b1cdbd2cSJim Jagielski #include <boost/scoped_ptr.hpp> 42*b1cdbd2cSJim Jagielski #include <boost/function.hpp> 43*b1cdbd2cSJim Jagielski 44*b1cdbd2cSJim Jagielski class SdDrawDocument; 45*b1cdbd2cSJim Jagielski class SfxMedium; 46*b1cdbd2cSJim Jagielski class SfxViewFrame; 47*b1cdbd2cSJim Jagielski class SdNavigatorWin; 48*b1cdbd2cSJim Jagielski class SdrObject; 49*b1cdbd2cSJim Jagielski class SdrObjList; 50*b1cdbd2cSJim Jagielski class SdPage; 51*b1cdbd2cSJim Jagielski class SvLBoxEntry; 52*b1cdbd2cSJim Jagielski 53*b1cdbd2cSJim Jagielski namespace sd { 54*b1cdbd2cSJim Jagielski class ViewShell; 55*b1cdbd2cSJim Jagielski 56*b1cdbd2cSJim Jagielski class DrawDocShell; 57*b1cdbd2cSJim Jagielski #ifndef SV_DECL_DRAW_DOC_SHELL_DEFINED 58*b1cdbd2cSJim Jagielski #define SV_DECL_DRAW_DOC_SHELL_DEFINED 59*b1cdbd2cSJim Jagielski SV_DECL_REF(DrawDocShell) 60*b1cdbd2cSJim Jagielski #endif 61*b1cdbd2cSJim Jagielski } 62*b1cdbd2cSJim Jagielski 63*b1cdbd2cSJim Jagielski /************************************************************************* 64*b1cdbd2cSJim Jagielski |* 65*b1cdbd2cSJim Jagielski |* Effekte-Tab-Dialog 66*b1cdbd2cSJim Jagielski |* 67*b1cdbd2cSJim Jagielski \************************************************************************/ 68*b1cdbd2cSJim Jagielski 69*b1cdbd2cSJim Jagielski class SD_DLLPUBLIC SdPageObjsTLB : public SvTreeListBox 70*b1cdbd2cSJim Jagielski { 71*b1cdbd2cSJim Jagielski private: 72*b1cdbd2cSJim Jagielski 73*b1cdbd2cSJim Jagielski static sal_Bool SD_DLLPRIVATE bIsInDrag; // static, falls der Navigator im ExecuteDrag geloescht wird 74*b1cdbd2cSJim Jagielski 75*b1cdbd2cSJim Jagielski //Solution: set contenttree in SdNavigatorWin 76*b1cdbd2cSJim Jagielski sal_Bool bisInSdNavigatorWin; 77*b1cdbd2cSJim Jagielski public: 78*b1cdbd2cSJim Jagielski 79*b1cdbd2cSJim Jagielski // nested class to implement the TransferableHelper 80*b1cdbd2cSJim Jagielski class SdPageObjsTransferable : public SdTransferable 81*b1cdbd2cSJim Jagielski { 82*b1cdbd2cSJim Jagielski public: 83*b1cdbd2cSJim Jagielski SdPageObjsTransferable( 84*b1cdbd2cSJim Jagielski SdPageObjsTLB& rParent, 85*b1cdbd2cSJim Jagielski const INetBookmark& rBookmark, 86*b1cdbd2cSJim Jagielski ::sd::DrawDocShell& rDocShell, 87*b1cdbd2cSJim Jagielski NavigatorDragType eDragType, 88*b1cdbd2cSJim Jagielski const ::com::sun::star::uno::Any& rTreeListBoxData ); 89*b1cdbd2cSJim Jagielski ::sd::DrawDocShell& GetDocShell() const; 90*b1cdbd2cSJim Jagielski NavigatorDragType GetDragType() const; 91*b1cdbd2cSJim Jagielski 92*b1cdbd2cSJim Jagielski static const ::com::sun::star::uno::Sequence< sal_Int8 >& getUnoTunnelId(); 93*b1cdbd2cSJim Jagielski static SdPageObjsTransferable* getImplementation( const ::com::sun::star::uno::Reference< ::com::sun::star::uno::XInterface >& rxData ) throw(); 94*b1cdbd2cSJim Jagielski /** Return a temporary transferable data flavor that is used 95*b1cdbd2cSJim Jagielski internally in the navigator for reordering entries. Its 96*b1cdbd2cSJim Jagielski lifetime ends with the office application. 97*b1cdbd2cSJim Jagielski */ 98*b1cdbd2cSJim Jagielski static sal_uInt32 GetListBoxDropFormatId (void); 99*b1cdbd2cSJim Jagielski 100*b1cdbd2cSJim Jagielski private: 101*b1cdbd2cSJim Jagielski /** Temporary drop flavor id that is used internally in the 102*b1cdbd2cSJim Jagielski navigator. 103*b1cdbd2cSJim Jagielski */ 104*b1cdbd2cSJim Jagielski static sal_uInt32 mnListBoxDropFormatId; 105*b1cdbd2cSJim Jagielski 106*b1cdbd2cSJim Jagielski SdPageObjsTLB& mrParent; 107*b1cdbd2cSJim Jagielski INetBookmark maBookmark; 108*b1cdbd2cSJim Jagielski ::sd::DrawDocShell& mrDocShell; 109*b1cdbd2cSJim Jagielski NavigatorDragType meDragType; 110*b1cdbd2cSJim Jagielski const ::com::sun::star::uno::Any maTreeListBoxData; 111*b1cdbd2cSJim Jagielski SD_DLLPRIVATE virtual ~SdPageObjsTransferable(); 112*b1cdbd2cSJim Jagielski 113*b1cdbd2cSJim Jagielski SD_DLLPRIVATE virtual void AddSupportedFormats(); 114*b1cdbd2cSJim Jagielski SD_DLLPRIVATE virtual sal_Bool GetData( const ::com::sun::star::datatransfer::DataFlavor& rFlavor ); 115*b1cdbd2cSJim Jagielski SD_DLLPRIVATE virtual void DragFinished( sal_Int8 nDropAction ); 116*b1cdbd2cSJim Jagielski 117*b1cdbd2cSJim Jagielski SD_DLLPRIVATE virtual sal_Int64 SAL_CALL getSomething( const ::com::sun::star::uno::Sequence< sal_Int8 >& rId ) throw( ::com::sun::star::uno::RuntimeException ); 118*b1cdbd2cSJim Jagielski }; 119*b1cdbd2cSJim Jagielski 120*b1cdbd2cSJim Jagielski friend class SdPageObjsTLB::SdPageObjsTransferable; 121*b1cdbd2cSJim Jagielski 122*b1cdbd2cSJim Jagielski /** Determine whether the specified page belongs to the current show 123*b1cdbd2cSJim Jagielski which is either the standard show or a custom show. 124*b1cdbd2cSJim Jagielski @param pPage 125*b1cdbd2cSJim Jagielski Pointer to the page for which to check whether it belongs to the 126*b1cdbd2cSJim Jagielski show. 127*b1cdbd2cSJim Jagielski @return 128*b1cdbd2cSJim Jagielski Returns <FALSE/> if there is no custom show or if the current 129*b1cdbd2cSJim Jagielski show does not contain the specified page at least once. 130*b1cdbd2cSJim Jagielski */ 131*b1cdbd2cSJim Jagielski bool PageBelongsToCurrentShow (const SdPage* pPage) const; 132*b1cdbd2cSJim Jagielski 133*b1cdbd2cSJim Jagielski protected: 134*b1cdbd2cSJim Jagielski 135*b1cdbd2cSJim Jagielski Window* mpParent; 136*b1cdbd2cSJim Jagielski const SdDrawDocument* mpDoc; 137*b1cdbd2cSJim Jagielski SdDrawDocument* mpBookmarkDoc; 138*b1cdbd2cSJim Jagielski SfxMedium* mpMedium; 139*b1cdbd2cSJim Jagielski SfxMedium* mpOwnMedium; 140*b1cdbd2cSJim Jagielski Image maImgOle; 141*b1cdbd2cSJim Jagielski Image maImgGraphic; 142*b1cdbd2cSJim Jagielski Image maImgOleH; 143*b1cdbd2cSJim Jagielski Image maImgGraphicH; 144*b1cdbd2cSJim Jagielski sal_Bool mbLinkableSelected; 145*b1cdbd2cSJim Jagielski sal_Bool mbDragEnabled; 146*b1cdbd2cSJim Jagielski String maDocName; 147*b1cdbd2cSJim Jagielski ::sd::DrawDocShellRef mxBookmarkDocShRef; // Zum Laden von Bookmarks 148*b1cdbd2cSJim Jagielski ::sd::DrawDocShell* mpDropDocSh; 149*b1cdbd2cSJim Jagielski SdNavigatorWin* mpDropNavWin; 150*b1cdbd2cSJim Jagielski SfxViewFrame* mpFrame; 151*b1cdbd2cSJim Jagielski vector<String> maTreeItem; 152*b1cdbd2cSJim Jagielski sal_Bool mbSaveTreeItemState; 153*b1cdbd2cSJim Jagielski String maSelectionEntryText; 154*b1cdbd2cSJim Jagielski 155*b1cdbd2cSJim Jagielski // DragSourceHelper 156*b1cdbd2cSJim Jagielski virtual void StartDrag( sal_Int8 nAction, const Point& rPosPixel ); 157*b1cdbd2cSJim Jagielski 158*b1cdbd2cSJim Jagielski // DropTargetHelper 159*b1cdbd2cSJim Jagielski virtual sal_Int8 AcceptDrop( const AcceptDropEvent& rEvt ); 160*b1cdbd2cSJim Jagielski virtual sal_Int8 ExecuteDrop( const ExecuteDropEvent& rEvt ); 161*b1cdbd2cSJim Jagielski 162*b1cdbd2cSJim Jagielski virtual void RequestingChilds( SvLBoxEntry* pParent ); 163*b1cdbd2cSJim Jagielski 164*b1cdbd2cSJim Jagielski void DoDrag(); 165*b1cdbd2cSJim Jagielski void OnDragFinished( sal_uInt8 nDropAction ); 166*b1cdbd2cSJim Jagielski 167*b1cdbd2cSJim Jagielski /** Return the name of the object. When the object has no user supplied 168*b1cdbd2cSJim Jagielski name and the bCreate flag is <TRUE/> then a name is created 169*b1cdbd2cSJim Jagielski automatically. Additionally the mbShowAllShapes flag is taken into 170*b1cdbd2cSJim Jagielski account when there is no user supplied name. When this flag is 171*b1cdbd2cSJim Jagielski <FALSE/> then no name is created. 172*b1cdbd2cSJim Jagielski @param pObject 173*b1cdbd2cSJim Jagielski When this is NULL then an empty string is returned, regardless 174*b1cdbd2cSJim Jagielski of the value of bCreate. 175*b1cdbd2cSJim Jagielski @param bCreate 176*b1cdbd2cSJim Jagielski This flag controls for objects without user supplied name 177*b1cdbd2cSJim Jagielski whether a name is created. When a name is created then this 178*b1cdbd2cSJim Jagielski name is not stored in the object. 179*b1cdbd2cSJim Jagielski */ 180*b1cdbd2cSJim Jagielski String GetObjectName ( 181*b1cdbd2cSJim Jagielski const SdrObject* pObject, 182*b1cdbd2cSJim Jagielski const bool bCreate = true) const; 183*b1cdbd2cSJim Jagielski void CloseBookmarkDoc(); 184*b1cdbd2cSJim Jagielski DECL_STATIC_LINK(SdPageObjsTLB, ExecDragHdl, void*); 185*b1cdbd2cSJim Jagielski 186*b1cdbd2cSJim Jagielski /** Handle the reordering of entries in the navigator. This method 187*b1cdbd2cSJim Jagielski reorders both the involved shapes in their page as well as the 188*b1cdbd2cSJim Jagielski associated list box entries. 189*b1cdbd2cSJim Jagielski */ 190*b1cdbd2cSJim Jagielski virtual sal_Bool NotifyMoving( 191*b1cdbd2cSJim Jagielski SvLBoxEntry* pTarget, 192*b1cdbd2cSJim Jagielski SvLBoxEntry* pEntry, 193*b1cdbd2cSJim Jagielski SvLBoxEntry*& rpNewParent, 194*b1cdbd2cSJim Jagielski sal_uLong& rNewChildPos); 195*b1cdbd2cSJim Jagielski 196*b1cdbd2cSJim Jagielski using Window::GetDropTarget; 197*b1cdbd2cSJim Jagielski virtual SvLBoxEntry* GetDropTarget (const Point& rLocation); 198*b1cdbd2cSJim Jagielski virtual void InitEntry(SvLBoxEntry*,const XubString&,const Image&,const Image&,SvLBoxButtonKind ); 199*b1cdbd2cSJim Jagielski 200*b1cdbd2cSJim Jagielski public: 201*b1cdbd2cSJim Jagielski 202*b1cdbd2cSJim Jagielski SdPageObjsTLB( Window* pParent, const SdResId& rSdResId ); 203*b1cdbd2cSJim Jagielski ~SdPageObjsTLB(); 204*b1cdbd2cSJim Jagielski // helper function for GetEntryAltText and GetEntryLongDescription 205*b1cdbd2cSJim Jagielski String getAltLongDescText( SvLBoxEntry* pEntry , sal_Bool isAltText) const; 206*b1cdbd2cSJim Jagielski String GetEntryAltText( SvLBoxEntry* pEntry ) const; 207*b1cdbd2cSJim Jagielski String GetEntryLongDescription( SvLBoxEntry* pEntry ) const; 208*b1cdbd2cSJim Jagielski virtual void SelectHdl(); 209*b1cdbd2cSJim Jagielski virtual void KeyInput( const KeyEvent& rKEvt ); 210*b1cdbd2cSJim Jagielski SetViewFrame(SfxViewFrame * pViewFrame)211*b1cdbd2cSJim Jagielski void SetViewFrame( SfxViewFrame* pViewFrame ) { mpFrame = pViewFrame; } GetViewFrame() const212*b1cdbd2cSJim Jagielski SfxViewFrame* GetViewFrame() const { return mpFrame; } 213*b1cdbd2cSJim Jagielski 214*b1cdbd2cSJim Jagielski void Fill( const SdDrawDocument*, sal_Bool bAllPages, const String& rDocName ); 215*b1cdbd2cSJim Jagielski void Fill( const SdDrawDocument*, SfxMedium* pSfxMedium, const String& rDocName ); 216*b1cdbd2cSJim Jagielski void SetShowAllShapes (const bool bShowAllShapes, const bool bFill); 217*b1cdbd2cSJim Jagielski bool GetShowAllShapes (void) const; 218*b1cdbd2cSJim Jagielski sal_Bool IsEqualToDoc( const SdDrawDocument* pInDoc = NULL ); 219*b1cdbd2cSJim Jagielski sal_Bool HasSelectedChilds( const String& rName ); 220*b1cdbd2cSJim Jagielski sal_Bool SelectEntry( const String& rName ); 221*b1cdbd2cSJim Jagielski String GetSelectEntry(); 222*b1cdbd2cSJim Jagielski //Solution: Mark Current Entry 223*b1cdbd2cSJim Jagielski void MarkCurEntry( const String& rName ); SetSdNavigatorWinFlag(sal_Bool isInSdNavigatorWin)224*b1cdbd2cSJim Jagielski void SetSdNavigatorWinFlag(sal_Bool isInSdNavigatorWin){bisInSdNavigatorWin =isInSdNavigatorWin;}; 225*b1cdbd2cSJim Jagielski void FreshCurEntry(); 226*b1cdbd2cSJim Jagielski 227*b1cdbd2cSJim Jagielski void Clear(); SetSaveTreeItemStateFlag(sal_Bool bState)228*b1cdbd2cSJim Jagielski void SetSaveTreeItemStateFlag(sal_Bool bState){mbSaveTreeItemState = bState;} 229*b1cdbd2cSJim Jagielski void SaveExpandedTreeItemState(SvLBoxEntry* pEntry, vector<String>& vectTreeItem); 230*b1cdbd2cSJim Jagielski List* GetSelectEntryList( sal_uInt16 nDepth ); 231*b1cdbd2cSJim Jagielski SdDrawDocument* GetBookmarkDoc(SfxMedium* pMedium = NULL); GetDropDocSh()232*b1cdbd2cSJim Jagielski ::sd::DrawDocShell* GetDropDocSh() { return(mpDropDocSh); } 233*b1cdbd2cSJim Jagielski IsLinkableSelected() const234*b1cdbd2cSJim Jagielski sal_Bool IsLinkableSelected() const { return mbLinkableSelected; } 235*b1cdbd2cSJim Jagielski 236*b1cdbd2cSJim Jagielski static sal_Bool IsInDrag(); 237*b1cdbd2cSJim Jagielski using SvLBox::ExecuteDrop; 238*b1cdbd2cSJim Jagielski 239*b1cdbd2cSJim Jagielski using SvTreeListBox::SelectEntry; 240*b1cdbd2cSJim Jagielski 241*b1cdbd2cSJim Jagielski /** Return the view shell that is linked to the given doc shell. 242*b1cdbd2cSJim Jagielski Call this method when the there is a chance that the doc shell 243*b1cdbd2cSJim Jagielski has been disconnected from the view shell (but not the other 244*b1cdbd2cSJim Jagielski way round.) 245*b1cdbd2cSJim Jagielski @return 246*b1cdbd2cSJim Jagielski May return <NULL/> when the link between view shell and 247*b1cdbd2cSJim Jagielski doc shell has been severed. 248*b1cdbd2cSJim Jagielski */ 249*b1cdbd2cSJim Jagielski static ::sd::ViewShell* GetViewShellForDocShell (::sd::DrawDocShell &rDocShell); 250*b1cdbd2cSJim Jagielski 251*b1cdbd2cSJim Jagielski private: 252*b1cdbd2cSJim Jagielski /** This flag controls whether all shapes are shown as children of pages 253*b1cdbd2cSJim Jagielski and group shapes or only the named shapes. 254*b1cdbd2cSJim Jagielski */ 255*b1cdbd2cSJim Jagielski bool mbShowAllShapes; 256*b1cdbd2cSJim Jagielski /** This flag controls whether to show all pages. 257*b1cdbd2cSJim Jagielski */ 258*b1cdbd2cSJim Jagielski bool mbShowAllPages; 259*b1cdbd2cSJim Jagielski 260*b1cdbd2cSJim Jagielski /** Return <TRUE/> when the current transferable may be dropped at the 261*b1cdbd2cSJim Jagielski given list box entry. 262*b1cdbd2cSJim Jagielski */ 263*b1cdbd2cSJim Jagielski bool IsDropAllowed (SvLBoxEntry* pEntry); 264*b1cdbd2cSJim Jagielski 265*b1cdbd2cSJim Jagielski /** This inner class is defined in sdtreelb.cxx and is basically a 266*b1cdbd2cSJim Jagielski container for the icons used in the list box for the entries. 267*b1cdbd2cSJim Jagielski */ 268*b1cdbd2cSJim Jagielski class IconProvider; 269*b1cdbd2cSJim Jagielski 270*b1cdbd2cSJim Jagielski /** Add one list box entry for the parent of the given shapes and one child entry for 271*b1cdbd2cSJim Jagielski each of the given shapes. 272*b1cdbd2cSJim Jagielski @param rList 273*b1cdbd2cSJim Jagielski The container of shapes that are to be inserted. 274*b1cdbd2cSJim Jagielski @param pShape 275*b1cdbd2cSJim Jagielski The parent shape or NULL when the parent is a page. 276*b1cdbd2cSJim Jagielski @param rsName 277*b1cdbd2cSJim Jagielski The name to be displayed for the new parent node. 278*b1cdbd2cSJim Jagielski @param bIsExcluded 279*b1cdbd2cSJim Jagielski Some pages can be excluded (from the show?). 280*b1cdbd2cSJim Jagielski @param pParentEntry 281*b1cdbd2cSJim Jagielski The parent entry of the new parent entry. 282*b1cdbd2cSJim Jagielski @param rIconProvider 283*b1cdbd2cSJim Jagielski Icons used to visualize the different shape and page types. 284*b1cdbd2cSJim Jagielski */ 285*b1cdbd2cSJim Jagielski void AddShapeList ( 286*b1cdbd2cSJim Jagielski const SdrObjList& rList, 287*b1cdbd2cSJim Jagielski SdrObject* pShape, 288*b1cdbd2cSJim Jagielski const ::rtl::OUString& rsName, 289*b1cdbd2cSJim Jagielski const bool bIsExcluded, 290*b1cdbd2cSJim Jagielski SvLBoxEntry* pParentEntry, 291*b1cdbd2cSJim Jagielski const IconProvider& rIconProvider); 292*b1cdbd2cSJim Jagielski 293*b1cdbd2cSJim Jagielski /** Add the given object to a transferable object so that the object can 294*b1cdbd2cSJim Jagielski be dragged and dropped without having a name. 295*b1cdbd2cSJim Jagielski */ 296*b1cdbd2cSJim Jagielski void AddShapeToTransferable ( 297*b1cdbd2cSJim Jagielski SdTransferable& rTransferable, 298*b1cdbd2cSJim Jagielski SdrObject& rObject) const; 299*b1cdbd2cSJim Jagielski }; 300*b1cdbd2cSJim Jagielski 301*b1cdbd2cSJim Jagielski #endif // _SDTREELB_HXX 302