1 /************************************************************************* 2 * 3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. 4 * 5 * Copyright 2000, 2010 Oracle and/or its affiliates. 6 * 7 * OpenOffice.org - a multi-platform office productivity suite 8 * 9 * This file is part of OpenOffice.org. 10 * 11 * OpenOffice.org is free software: you can redistribute it and/or modify 12 * it under the terms of the GNU Lesser General Public License version 3 13 * only, as published by the Free Software Foundation. 14 * 15 * OpenOffice.org is distributed in the hope that it will be useful, 16 * but WITHOUT ANY WARRANTY; without even the implied warranty of 17 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 18 * GNU Lesser General Public License version 3 for more details 19 * (a copy is included in the LICENSE file that accompanied this code). 20 * 21 * You should have received a copy of the GNU Lesser General Public License 22 * version 3 along with OpenOffice.org. If not, see 23 * <http://www.openoffice.org/license.html> 24 * for a copy of the LGPLv3 License. 25 * 26 ************************************************************************/ 27 #ifndef _CONTTREE_HXX 28 #define _CONTTREE_HXX 29 30 #include <svtools/svtreebx.hxx> 31 #include "swcont.hxx" 32 33 class SwWrtShell; 34 class SwContentType; 35 class SwNavigationPI; 36 class SwNavigationConfig; 37 class Menu; 38 class ToolBox; 39 class SwGlblDocContents; 40 class SwGlblDocContent; 41 class SfxObjectShell; 42 43 44 #define EDIT_MODE_EDIT 0 45 #define EDIT_MODE_UPD_IDX 1 46 #define EDIT_MODE_RMV_IDX 2 47 #define EDIT_UNPROTECT_TABLE 3 48 #define EDIT_MODE_DELETE 4 49 #define EDIT_MODE_RENAME 5 50 51 //---------------------------------------------------------------------------- 52 //---------------------------------------------------------------------------- 53 54 class SwContentTree : public SvTreeListBox 55 { 56 ImageList aEntryImages; 57 String sSpace; 58 AutoTimer aUpdTimer; 59 60 SwContentType* aActiveContentArr[CONTENT_TYPE_MAX]; 61 SwContentType* aHiddenContentArr[CONTENT_TYPE_MAX]; 62 String aContextStrings[CONTEXT_COUNT + 1]; 63 String sRemoveIdx; 64 String sUpdateIdx; 65 String sUnprotTbl; 66 String sRename; 67 String sReadonlyIdx; 68 String sInvisible; 69 String sPostItShow; 70 String sPostItHide; 71 String sPostItDelete; 72 73 SwWrtShell* pHiddenShell; // gedropptes Doc 74 SwWrtShell* pActiveShell; // die aktive oder eine konst. offene View 75 SwNavigationConfig* pConfig; 76 77 sal_Int32 nActiveBlock; 78 sal_uInt16 nHiddenBlock; 79 sal_uInt16 nRootType; 80 sal_uInt16 nLastSelType; 81 sal_uInt8 nOutlineLevel; 82 83 sal_Bool bIsActive :1; 84 sal_Bool bIsConstant :1; 85 sal_Bool bIsHidden :1; 86 sal_Bool bDocChgdInDragging :1; 87 sal_Bool bIsInternalDrag :1; 88 sal_Bool bIsRoot :1; 89 sal_Bool bIsIdleClear :1; 90 sal_Bool bIsLastReadOnly :1; 91 sal_Bool bIsOutlineMoveable :1; 92 sal_Bool bViewHasChanged :1; 93 sal_Bool bIsImageListInitialized : 1; 94 95 static sal_Bool bIsInDrag; 96 97 void FindActiveTypeAndRemoveUserData(); 98 99 using SvLBox::ExecuteDrop; 100 using SvTreeListBox::EditEntry; 101 using SvListView::Expand; 102 using SvListView::Collapse; 103 using SvListView::Select; 104 105 protected: 106 // virtual void Command( const CommandEvent& rCEvt ); 107 virtual void RequestHelp( const HelpEvent& rHEvt ); 108 virtual void InitEntry(SvLBoxEntry*,const XubString&,const Image&,const Image&,SvLBoxButtonKind); 109 virtual void DataChanged( const DataChangedEvent& rDCEvt ); 110 111 SwNavigationPI* GetParentWindow(){return 112 (SwNavigationPI*)Window::GetParent();} 113 114 virtual void StartDrag( sal_Int8 nAction, const Point& rPosPixel ); 115 virtual void DragFinished( sal_Int8 ); 116 virtual sal_Int8 AcceptDrop( const AcceptDropEvent& rEvt ); 117 118 virtual sal_Int8 ExecuteDrop( const ExecuteDropEvent& rEvt ); 119 120 sal_Bool FillTransferData( TransferDataContainer& rTransfer, 121 sal_Int8& rDragMode ); 122 sal_Bool HasContentChanged(); 123 124 virtual DragDropMode NotifyStartDrag( TransferDataContainer& rData, 125 SvLBoxEntry* ); 126 virtual sal_Bool NotifyAcceptDrop( SvLBoxEntry* ); 127 128 virtual sal_Bool NotifyMoving( SvLBoxEntry* pTarget, 129 SvLBoxEntry* pEntry, 130 SvLBoxEntry*& rpNewParent, 131 sal_uLong& rNewChildPos 132 ); 133 virtual sal_Bool NotifyCopying( SvLBoxEntry* pTarget, 134 SvLBoxEntry* pEntry, 135 SvLBoxEntry*& rpNewParent, 136 sal_uLong& rNewChildPos 137 ); 138 virtual void MouseButtonDown( const MouseEvent& rMEvt ); 139 140 void EditEntry( SvLBoxEntry* pEntry, sal_uInt8 nMode ); 141 142 void GotoContent(SwContent* pCnt); 143 static void SetInDrag(sal_Bool bSet) {bIsInDrag = bSet;} 144 145 virtual PopupMenu* CreateContextMenu( void ); 146 virtual void ExcecuteContextMenuAction( sal_uInt16 nSelectedPopupEntry ); 147 148 public: 149 SwContentTree(Window* pParent, const ResId& rResId); 150 ~SwContentTree(); 151 152 sal_Bool ToggleToRoot(); 153 sal_Bool IsRoot() const {return bIsRoot;} 154 sal_uInt16 GetRootType() const {return nRootType;} 155 void SetRootType(sal_uInt16 nType); 156 void Display( sal_Bool bActiveView ); 157 void Clear(); 158 void SetHiddenShell(SwWrtShell* pSh); 159 void ShowHiddenShell(); 160 void ShowActualView(); 161 void SetActiveShell(SwWrtShell* pSh); 162 void SetConstantShell(SwWrtShell* pSh); 163 164 SwWrtShell* GetWrtShell() 165 {return bIsActive||bIsConstant ? 166 pActiveShell : 167 pHiddenShell;} 168 169 static sal_Bool IsInDrag() {return bIsInDrag;} 170 sal_Bool IsInternalDrag() const {return bIsInternalDrag != 0;} 171 172 sal_Int32 GetActiveBlock() const {return nActiveBlock;} 173 174 sal_uInt8 GetOutlineLevel()const {return nOutlineLevel;} 175 void SetOutlineLevel(sal_uInt8 nSet); 176 177 sal_Bool Expand( SvLBoxEntry* pParent ); 178 179 sal_Bool Collapse( SvLBoxEntry* pParent ); 180 181 void ExecCommand(sal_uInt16 nCmd, sal_Bool bModifier); 182 183 void ShowTree(); 184 void HideTree(); 185 186 sal_Bool IsConstantView() {return bIsConstant;} 187 sal_Bool IsActiveView() {return bIsActive;} 188 sal_Bool IsHiddenView() {return bIsHidden;} 189 190 const SwWrtShell* GetActiveWrtShell() {return pActiveShell;} 191 SwWrtShell* GetHiddenWrtShell() {return pHiddenShell;} 192 193 DECL_LINK( ContentDoubleClickHdl, SwContentTree * ); 194 // DECL_LINK( PopupHdl, Menu* ); 195 DECL_LINK( TimerUpdate, Timer * ); 196 197 virtual long GetTabPos( SvLBoxEntry*, SvLBoxTab* ); 198 virtual void RequestingChilds( SvLBoxEntry* pParent ); 199 virtual void GetFocus(); 200 virtual void KeyInput(const KeyEvent& rKEvt); 201 202 virtual sal_Bool Select( SvLBoxEntry* pEntry, sal_Bool bSelect=sal_True ); 203 }; 204 205 206 //---------------------------------------------------------------------------- 207 // TreeListBox fuer Globaldokumente 208 //---------------------------------------------------------------------------- 209 210 class SwLBoxString : public SvLBoxString 211 { 212 public: 213 214 SwLBoxString( SvLBoxEntry* pEntry, sal_uInt16 nFlags, 215 const String& rStr ) : SvLBoxString(pEntry,nFlags,rStr) 216 { 217 } 218 219 virtual void Paint( const Point& rPos, SvLBox& rDev, sal_uInt16 nFlags, 220 SvLBoxEntry* pEntry); 221 }; 222 223 namespace sfx2 { class DocumentInserter; } 224 namespace sfx2 { class FileDialogHelper; } 225 226 class SwGlobalTree : public SvTreeListBox 227 { 228 private: 229 AutoTimer aUpdateTimer; 230 String aContextStrings[GLOBAL_CONTEXT_COUNT]; 231 232 ImageList aEntryImages; 233 234 SwWrtShell* pActiveShell; // 235 SvLBoxEntry* pEmphasisEntry; // Drag'n Drop-Emphasis 236 SvLBoxEntry* pDDSource; // Quelle beim DnD 237 SwGlblDocContents* pSwGlblDocContents; // Array mit sortierten Inhalten 238 239 Window* pDefParentWin; 240 SwGlblDocContent* pDocContent; 241 sfx2::DocumentInserter* pDocInserter; 242 243 sal_Bool bIsInternalDrag :1; 244 sal_Bool bLastEntryEmphasis :1; // Drag'n Drop 245 sal_Bool bIsImageListInitialized : 1; 246 247 static const SfxObjectShell* pShowShell; 248 249 void InsertRegion( const SwGlblDocContent* _pContent, 250 const com::sun::star::uno::Sequence< ::rtl::OUString >& _rFiles ); 251 252 DECL_LINK( DialogClosedHdl, sfx2::FileDialogHelper* ); 253 254 using SvLBox::DoubleClickHdl; 255 using SvLBox::ExecuteDrop; 256 using Window::Update; 257 258 protected: 259 260 virtual sal_Int8 AcceptDrop( const AcceptDropEvent& rEvt ); 261 262 virtual sal_Int8 ExecuteDrop( const ExecuteDropEvent& rEvt ); 263 264 virtual void DataChanged( const DataChangedEvent& rDCEvt ); 265 266 virtual void RequestHelp( const HelpEvent& rHEvt ); 267 268 virtual long GetTabPos( SvLBoxEntry*, SvLBoxTab* ); 269 virtual sal_Bool NotifyMoving( SvLBoxEntry* pTarget, 270 SvLBoxEntry* pEntry, 271 SvLBoxEntry*& rpNewParent, 272 sal_uLong& rNewChildPos 273 ); 274 virtual sal_Bool NotifyCopying( SvLBoxEntry* pTarget, 275 SvLBoxEntry* pEntry, 276 SvLBoxEntry*& rpNewParent, 277 sal_uLong& rNewChildPos 278 ); 279 280 virtual void StartDrag( sal_Int8 nAction, const Point& rPosPixel ); 281 virtual void DragFinished( sal_Int8 ); 282 virtual DragDropMode NotifyStartDrag( TransferDataContainer& rData, 283 SvLBoxEntry* ); 284 virtual sal_Bool NotifyAcceptDrop( SvLBoxEntry* ); 285 286 virtual void MouseButtonDown( const MouseEvent& rMEvt ); 287 virtual void KeyInput(const KeyEvent& rKEvt); 288 virtual void GetFocus(); 289 virtual void SelectHdl(); 290 virtual void DeselectHdl(); 291 virtual void InitEntry(SvLBoxEntry*,const XubString&,const Image&,const Image&,SvLBoxButtonKind); 292 293 void Clear(); 294 295 DECL_LINK( PopupHdl, Menu* ); 296 DECL_LINK( Timeout, Timer* ); 297 DECL_LINK( DoubleClickHdl, SwGlobalTree * ); 298 299 sal_Bool IsInternalDrag() const {return bIsInternalDrag != 0;} 300 SwNavigationPI* GetParentWindow() 301 { return (SwNavigationPI*)Window::GetParent(); } 302 303 void OpenDoc(const SwGlblDocContent*); 304 void GotoContent(const SwGlblDocContent*); 305 sal_uInt16 GetEnableFlags() const; 306 307 static const SfxObjectShell* GetShowShell() {return pShowShell;} 308 static void SetShowShell(const SfxObjectShell*pSet) {pShowShell = pSet;} 309 DECL_STATIC_LINK(SwGlobalTree, ShowFrameHdl, SwGlobalTree*); 310 311 virtual PopupMenu* CreateContextMenu( void ); 312 virtual void ExcecuteContextMenuAction( sal_uInt16 nSelectedPopupEntry ); 313 314 public: 315 SwGlobalTree(Window* pParent, const ResId& rResId); 316 virtual ~SwGlobalTree(); 317 318 void TbxMenuHdl(sal_uInt16 nTbxId, ToolBox* pBox); 319 void InsertRegion( const SwGlblDocContent* pCont, 320 const String* pFileName = 0 ); 321 void EditContent(const SwGlblDocContent* pCont ); 322 323 void ShowTree(); 324 void HideTree(); 325 326 void ExecCommand(sal_uInt16 nCmd); 327 328 void Display(sal_Bool bOnlyUpdateUserData = sal_False); 329 330 sal_Bool Update(sal_Bool bHard); 331 }; 332 333 #endif 334 335