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