1 /*************************************************************************
3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
5 * Copyright 2008 by Sun Microsystems, Inc.
7 * OpenOffice.org - a multi-platform office productivity suite
9 * $RCSfile: conttree.hxx,v $
12 * This file is part of OpenOffice.org.
14 * OpenOffice.org is free software: you can redistribute it and/or modify
15 * it under the terms of the GNU Lesser General Public License version 3
16 * only, as published by the Free Software Foundation.
18 * OpenOffice.org is distributed in the hope that it will be useful,
19 * but WITHOUT ANY WARRANTY; without even the implied warranty of
20 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
21 * GNU Lesser General Public License version 3 for more details
22 * (a copy is included in the LICENSE file that accompanied this code).
24 * You should have received a copy of the GNU Lesser General Public License
25 * version 3 along with OpenOffice.org. If not, see
26 * <http://www.openoffice.org/license.html>
27 * for a copy of the LGPLv3 License.
29 ************************************************************************/
33 #include <svtools/svtreebx.hxx>
37 //using namespace std;
42 class SwNavigationConfig
;
45 class SwGlblDocContents
;
46 class SwGlblDocContent
;
50 #define EDIT_MODE_EDIT 0
51 #define EDIT_MODE_UPD_IDX 1
52 #define EDIT_MODE_RMV_IDX 2
53 #define EDIT_UNPROTECT_TABLE 3
54 #define EDIT_MODE_DELETE 4
55 #define EDIT_MODE_RENAME 5
57 //----------------------------------------------------------------------------
58 //----------------------------------------------------------------------------
60 class SwContentTree
: public SvTreeListBox
62 ImageList aEntryImages
;
66 SwContentType
* aActiveContentArr
[CONTENT_TYPE_MAX
];
67 SwContentType
* aHiddenContentArr
[CONTENT_TYPE_MAX
];
68 String aContextStrings
[CONTEXT_COUNT
+ 1];
79 SwWrtShell
* pHiddenShell
; // gedropptes Doc
80 SwWrtShell
* pActiveShell
; // die aktive oder eine konst. offene View
81 SwNavigationConfig
* pConfig
;
83 std::map
< void*, sal_Bool
> mOutLineNodeMap
;
85 sal_Int32 nActiveBlock
;
94 BOOL bDocChgdInDragging
:1;
95 BOOL bIsInternalDrag
:1;
98 BOOL bIsLastReadOnly
:1;
99 BOOL bIsOutlineMoveable
:1;
100 BOOL bViewHasChanged
:1;
101 BOOL bIsImageListInitialized
: 1;
103 static BOOL bIsInDrag
;
105 void FindActiveTypeAndRemoveUserData();
107 using SvLBox::ExecuteDrop
;
108 using SvTreeListBox::EditEntry
;
109 using SvListView::Expand
;
110 using SvListView::Collapse
;
111 using SvListView::Select
;
114 // virtual void Command( const CommandEvent& rCEvt );
115 virtual void RequestHelp( const HelpEvent
& rHEvt
);
116 virtual void InitEntry(SvLBoxEntry
*,const XubString
&,const Image
&,const Image
&,SvLBoxButtonKind
);
117 virtual void DataChanged( const DataChangedEvent
& rDCEvt
);
119 SwNavigationPI
* GetParentWindow(){return
120 (SwNavigationPI
*)Window::GetParent();}
122 virtual void StartDrag( sal_Int8 nAction
, const Point
& rPosPixel
);
123 virtual void DragFinished( sal_Int8
);
124 virtual sal_Int8
AcceptDrop( const AcceptDropEvent
& rEvt
);
126 virtual sal_Int8
ExecuteDrop( const ExecuteDropEvent
& rEvt
);
128 sal_Bool
FillTransferData( TransferDataContainer
& rTransfer
,
129 sal_Int8
& rDragMode
);
130 BOOL
HasContentChanged();
132 virtual DragDropMode
NotifyStartDrag( TransferDataContainer
& rData
,
134 virtual BOOL
NotifyAcceptDrop( SvLBoxEntry
* );
136 virtual BOOL
NotifyMoving( SvLBoxEntry
* pTarget
,
138 SvLBoxEntry
*& rpNewParent
,
141 virtual BOOL
NotifyCopying( SvLBoxEntry
* pTarget
,
143 SvLBoxEntry
*& rpNewParent
,
146 virtual void MouseButtonDown( const MouseEvent
& rMEvt
);
148 void EditEntry( SvLBoxEntry
* pEntry
, BYTE nMode
);
150 void GotoContent(SwContent
* pCnt
);
151 static void SetInDrag(BOOL bSet
) {bIsInDrag
= bSet
;}
153 virtual PopupMenu
* CreateContextMenu( void );
154 virtual void ExcecuteContextMenuAction( USHORT nSelectedPopupEntry
);
157 SwContentTree(Window
* pParent
, const ResId
& rResId
);
161 BOOL
IsRoot() const {return bIsRoot
;}
162 USHORT
GetRootType() const {return nRootType
;}
163 void SetRootType(USHORT nType
);
164 void Display( BOOL bActiveView
);
166 void SetHiddenShell(SwWrtShell
* pSh
);
167 void ShowHiddenShell();
168 void ShowActualView();
169 void SetActiveShell(SwWrtShell
* pSh
);
170 void SetConstantShell(SwWrtShell
* pSh
);
172 SwWrtShell
* GetWrtShell()
173 {return bIsActive
||bIsConstant
?
177 static BOOL
IsInDrag() {return bIsInDrag
;}
178 BOOL
IsInternalDrag() const {return bIsInternalDrag
!= 0;}
180 sal_Int32
GetActiveBlock() const {return nActiveBlock
;}
182 BYTE
GetOutlineLevel()const {return nOutlineLevel
;}
183 void SetOutlineLevel(BYTE nSet
);
185 BOOL
Expand( SvLBoxEntry
* pParent
);
187 BOOL
Collapse( SvLBoxEntry
* pParent
);
189 void ExecCommand(USHORT nCmd
, BOOL bModifier
);
194 BOOL
IsConstantView() {return bIsConstant
;}
195 BOOL
IsActiveView() {return bIsActive
;}
196 BOOL
IsHiddenView() {return bIsHidden
;}
198 const SwWrtShell
* GetActiveWrtShell() {return pActiveShell
;}
199 SwWrtShell
* GetHiddenWrtShell() {return pHiddenShell
;}
201 DECL_LINK( ContentDoubleClickHdl
, SwContentTree
* );
202 // DECL_LINK( PopupHdl, Menu* );
203 DECL_LINK( TimerUpdate
, Timer
* );
205 virtual long GetTabPos( SvLBoxEntry
*, SvLBoxTab
* );
206 virtual void RequestingChilds( SvLBoxEntry
* pParent
);
207 virtual void GetFocus();
208 virtual void KeyInput(const KeyEvent
& rKEvt
);
210 virtual BOOL
Select( SvLBoxEntry
* pEntry
, BOOL bSelect
=TRUE
);
214 //----------------------------------------------------------------------------
215 // TreeListBox fuer Globaldokumente
216 //----------------------------------------------------------------------------
218 class SwLBoxString
: public SvLBoxString
222 SwLBoxString( SvLBoxEntry
* pEntry
, USHORT nFlags
,
223 const String
& rStr
) : SvLBoxString(pEntry
,nFlags
,rStr
)
227 virtual void Paint( const Point
& rPos
, SvLBox
& rDev
, USHORT nFlags
,
228 SvLBoxEntry
* pEntry
);
231 namespace sfx2
{ class DocumentInserter
; }
232 namespace sfx2
{ class FileDialogHelper
; }
234 class SwGlobalTree
: public SvTreeListBox
237 AutoTimer aUpdateTimer
;
238 String aContextStrings
[GLOBAL_CONTEXT_COUNT
];
240 ImageList aEntryImages
;
242 SwWrtShell
* pActiveShell
; //
243 SvLBoxEntry
* pEmphasisEntry
; // Drag'n Drop-Emphasis
244 SvLBoxEntry
* pDDSource
; // Quelle beim DnD
245 SwGlblDocContents
* pSwGlblDocContents
; // Array mit sortierten Inhalten
247 Window
* pDefParentWin
;
248 SwGlblDocContent
* pDocContent
;
249 sfx2::DocumentInserter
* pDocInserter
;
251 BOOL bIsInternalDrag
:1;
252 BOOL bLastEntryEmphasis
:1; // Drag'n Drop
253 BOOL bIsImageListInitialized
: 1;
255 static const SfxObjectShell
* pShowShell
;
257 void InsertRegion( const SwGlblDocContent
* _pContent
,
258 const com::sun::star::uno::Sequence
< ::rtl::OUString
>& _rFiles
);
260 DECL_LINK( DialogClosedHdl
, sfx2::FileDialogHelper
* );
262 using SvLBox::DoubleClickHdl
;
263 using SvLBox::ExecuteDrop
;
264 using Window::Update
;
268 virtual sal_Int8
AcceptDrop( const AcceptDropEvent
& rEvt
);
270 virtual sal_Int8
ExecuteDrop( const ExecuteDropEvent
& rEvt
);
272 virtual void DataChanged( const DataChangedEvent
& rDCEvt
);
274 virtual void RequestHelp( const HelpEvent
& rHEvt
);
276 virtual long GetTabPos( SvLBoxEntry
*, SvLBoxTab
* );
277 virtual BOOL
NotifyMoving( SvLBoxEntry
* pTarget
,
279 SvLBoxEntry
*& rpNewParent
,
282 virtual BOOL
NotifyCopying( SvLBoxEntry
* pTarget
,
284 SvLBoxEntry
*& rpNewParent
,
288 virtual void StartDrag( sal_Int8 nAction
, const Point
& rPosPixel
);
289 virtual void DragFinished( sal_Int8
);
290 virtual DragDropMode
NotifyStartDrag( TransferDataContainer
& rData
,
292 virtual BOOL
NotifyAcceptDrop( SvLBoxEntry
* );
294 virtual void MouseButtonDown( const MouseEvent
& rMEvt
);
295 virtual void KeyInput(const KeyEvent
& rKEvt
);
296 virtual void GetFocus();
297 virtual void SelectHdl();
298 virtual void DeselectHdl();
299 virtual void InitEntry(SvLBoxEntry
*,const XubString
&,const Image
&,const Image
&,SvLBoxButtonKind
);
303 DECL_LINK( PopupHdl
, Menu
* );
304 DECL_LINK( Timeout
, Timer
* );
305 DECL_LINK( DoubleClickHdl
, SwGlobalTree
* );
307 BOOL
IsInternalDrag() const {return bIsInternalDrag
!= 0;}
308 SwNavigationPI
* GetParentWindow()
309 { return (SwNavigationPI
*)Window::GetParent(); }
311 void OpenDoc(const SwGlblDocContent
*);
312 void GotoContent(const SwGlblDocContent
*);
313 USHORT
GetEnableFlags() const;
315 static const SfxObjectShell
* GetShowShell() {return pShowShell
;}
316 static void SetShowShell(const SfxObjectShell
*pSet
) {pShowShell
= pSet
;}
317 DECL_STATIC_LINK(SwGlobalTree
, ShowFrameHdl
, SwGlobalTree
*);
319 virtual PopupMenu
* CreateContextMenu( void );
320 virtual void ExcecuteContextMenuAction( USHORT nSelectedPopupEntry
);
323 SwGlobalTree(Window
* pParent
, const ResId
& rResId
);
324 virtual ~SwGlobalTree();
326 void TbxMenuHdl(USHORT nTbxId
, ToolBox
* pBox
);
327 void InsertRegion( const SwGlblDocContent
* pCont
,
328 const String
* pFileName
= 0 );
329 void EditContent(const SwGlblDocContent
* pCont
);
334 void ExecCommand(USHORT nCmd
);
336 void Display(BOOL bOnlyUpdateUserData
= FALSE
);
338 BOOL
Update(BOOL bHard
);