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