1 /* 2 * This file is licensed under the GNU General Public License, version 3 3 * http://www.gnu.org/licenses/gpl-3.0.html 4 */ 5 6 #ifndef WORKSPACEBROWSERBUILDER_H 7 #define WORKSPACEBROWSERBUILDER_H 8 9 #include <sdk.h> 10 #ifndef CB_PRECOMP 11 #include <wx/thread.h> 12 #include <wx/treectrl.h> 13 #include <wx/imaglist.h> 14 #endif 15 16 #include "tokenf.h" 17 #include "parserf.h" 18 #include "fpimagelist.h" 19 20 enum SpecialFolder 21 { 22 sfToken = 0x0001, // token node 23 sfRoot = 0x0002, // root node 24 sfGFuncs = 0x0004, // global funcs node 25 sfOthers = 0x0010, // preprocessor symbols node 26 sfFile = 0x0020, // file node 27 }; 28 29 enum BrowserDisplayFilter 30 { 31 bdfFile = 0, 32 bdfProject, 33 bdfWorkspace, 34 }; 35 36 struct BrowserOptions 37 { 38 BrowserDisplayFilter displayFilter; // default: bdfWorkspace 39 bool visibleBottomTree; 40 bool sortAlphabetically; 41 bool showLocalVariables; 42 bool showIncludeSeparately; 43 }; 44 45 class TreeDataF : public wxTreeItemData 46 { 47 public: 48 TreeDataF(SpecialFolder sf = sfToken, TokenF* token = 0) m_pToken(token)49 : m_pToken(token), 50 m_SpecialFolder(sf) 51 { 52 } 53 TokenF* m_pToken; 54 SpecialFolder m_SpecialFolder; 55 }; 56 57 class WorkspaceBrowserBuilder 58 { 59 public: 60 WorkspaceBrowserBuilder(ParserF* parser, wxTreeCtrl* treeTop, wxTreeCtrl* treeBottom); 61 virtual ~WorkspaceBrowserBuilder(); 62 63 void Init(const wxString& active_filename, 64 cbProject* active_project, 65 const BrowserOptions& options); 66 void ExpandTop(); 67 void ExpandTopNode(wxTreeItemId node); 68 void CollapsTopNode(wxTreeItemId node); 69 void SelectItem(TokenF* item); 70 bool SelectNode(wxTreeItemId node); 71 void DeleteTopRootChildren(); 72 void MakeExpandedNodesArray(wxArrayString &expandedBottomNodes); 73 void ExpandBottomNodes(wxArrayString &expandedBottomNodes); 74 int GetTokenKindImageIdx(TokenF* token); 75 void SelectSymbol(const wxString& filename, int line); 76 void MarkSymbol(const wxString& filename, int line); 77 void MakeVisibleCurrent(); 78 void SetActiveProject(cbProject* prj); 79 80 bool m_AtWork; 81 82 protected: 83 void BuildTree(); 84 wxTreeItemId AddNodeIfNotThere(wxTreeCtrl* tree, wxTreeItemId parent, const wxString& name, int imgIndex = -1, TreeDataF* data = 0, bool sorted = true); 85 void AddTreeChildren(wxTreeCtrl* tree, wxTreeItemId parent, int tokenKindMask); 86 bool AddFileNodes(wxTreeCtrl* tree, wxTreeItemId parent, wxString file, int tokenKindMask); 87 bool AddChildrenNodes(wxTreeCtrl* tree, wxTreeItemId parent, TokenF* token, int tokenKindMask); 88 int AddInterfaceNode(wxTreeCtrl* tree, wxTreeItemId parent, TokenF* parToken); 89 int AddTypeChildren(wxTreeCtrl* tree, wxTreeItemId parent, TokensArrayF* pTokens); 90 wxTreeItemId FindItemByName(wxTreeCtrl* tree, wxString name, wxString name2=wxString()); 91 void CreateSpecialFolders(); 92 bool FileHasTokens(const wxString& fileName, int tokenKindMask); 93 bool HasGlobalFunctionsOthers(int tokenKindMask); 94 bool HasChildren(TokenF* tokenParent, int tokenKindMask); 95 void MarkItem(wxTreeCtrl* tree, wxTreeItemId& item, bool mark=true); 96 bool SelectBottomSymbol(const wxString& filename, int line); 97 bool MarkBottomSymbol(const wxString& filename, int line); 98 void UnmarkBottomSymbol(); 99 void MarkChildSymbol(wxTreeCtrl* tree, wxTreeItemId& root, int line, bool mark=true); 100 bool MarkGlobalSymbol(wxTreeCtrl* tree, wxTreeItemId& root, const wxString& filename, int line); 101 bool IsLineInGlobals(const wxString& file, int line); 102 void AddIncludeFiles(wxTreeCtrl* tree, wxTreeItemId parent); 103 104 ParserF* m_pParser; 105 wxTreeCtrl* m_pTreeTop; 106 wxTreeCtrl* m_pTreeBottom; 107 FPImageList* m_pImlist; 108 109 wxString m_ActiveFilename; 110 cbProject* m_pActiveProject; 111 BrowserOptions m_Options; 112 wxArrayString m_ExpandedNodes; 113 114 private: 115 }; 116 117 #endif // WORKSPACEBROWSERBUILDER_H 118