root/trunk/FileTreeCtrl.h

Revision 5, 5.5 kB (checked in by qbert, 6 years ago)

Initial ( and last :( ) commit

Line 
1 #if !defined(AFX_TABTREECTRL_H__AC2374B6_5047_4F92_96F4_7D5DEAE9BDCE__INCLUDED_)
2 #define AFX_TABTREECTRL_H__AC2374B6_5047_4F92_96F4_7D5DEAE9BDCE__INCLUDED_
3
4 #if _MSC_VER > 1000
5 #pragma once
6 #endif // _MSC_VER > 1000
7 // FileTreeCtrl.h : header file
8 //
9
10 /////////////////////////////////////////////////////////////////////////////
11 // CFileTreeCtrl window
12
13 class CFileTreeCtrl : public CXTTreeCtrl
14 {
15 // Construction
16 public:
17     CFileTreeCtrl();
18
19 // Attributes
20 protected:
21     CImageList  m_imageList;
22     CBitmap     m_bitmap;
23     HTREEITEM rootItem;
24     map<string,HTREEITEM> projectMap;
25     ProjectSettings * project;
26 // Operations
27 public:
28
29 // Overrides
30     // ClassWizard generated virtual function overrides
31     //{{AFX_VIRTUAL(CFileTreeCtrl)
32     protected:
33     virtual BOOL PreCreateWindow(CREATESTRUCT& cs);
34     //}}AFX_VIRTUAL
35     public:
36
37         HTREEITEM GetFirstProjectFolder()
38         {
39            
40
41             vector<string> folders;
42             Split(project->GetCache("ProjectFolders"),",",folders );
43
44             if ( !folders.size() ) return NULL;
45             return projectMap[folders[0] ];
46            
47
48         }
49
50     string GetSelFolderPath(HTREEITEM hCurSel = NULL);
51
52     bool FolderIsSelected()
53     {
54         HTREEITEM hCurSel = GetNextItem(TVI_ROOT, TVGN_CARET);
55         return IsFolder(hCurSel);
56        
57     }
58
59     bool ProjectIsSelected()
60     {
61         if ( !Globals::currentProject ) return false;
62
63         string pname = Globals::currentProject->name;
64         HTREEITEM selItem = GetNextItem(TVI_ROOT, TVGN_CARET) ;
65
66         int image1 = -1, image2 = -1;
67         this->GetItemImage(selItem,image1,image2);
68
69         if ( image1 == 1 && GetSelTreeCtrlItem(this) != pname) return true;
70
71         return false;
72     }
73
74     bool IsProject(HTREEITEM item)
75     {
76
77         int image1 = -1, image2 = -1;
78         this->GetItemImage(item,image1,image2);
79        
80         if ( image1 == 1 ) return true;
81        
82         return false;
83
84     }
85
86     bool IsFolder(HTREEITEM item );
87
88
89     void NewFolder(const string& name, bool useDefault = false)
90     {
91        
92         HTREEITEM selItem = NULL;
93         string pname = Globals::currentProject->name;
94
95         if ( useDefault )
96         {
97             selItem = GetFirstProjectFolder();
98         }
99         else selItem = GetNextItem(TVI_ROOT, TVGN_CARET) ;
100
101             string parentFolder = GetSelFolderPath(selItem );
102            
103             CString x = GetItemText(selItem);
104             string folderName = x.GetBuffer(0);
105        
106
107             HTREEITEM parent = projectMap[folderName];
108             HTREEITEM newFolder = InsertItem(name.c_str(),2,3,parent);
109             string folder;
110
111             if (parentFolder == "Work Desktop" || folder == pname)
112             {
113                 folder = name;
114             }
115             else
116             {
117                 folder = parentFolder + "//" + name;
118             }
119            
120            
121
122             projectMap[name] = newFolder;
123             Globals::currentProject->AddFolder(folder);
124            
125             Expand(parent,TVE_EXPAND);
126
127        
128        
129     }
130
131     void InitTree(vector<string>& folders)
132     {
133
134         string pname = Globals::currentProject->name;
135         rootItem = InsertItem(pname.c_str(),1,1);
136            
137        
138         for ( int i = 0;i < folders.size(); i++ )
139         {
140             CreateTreeItem(folders[i] );
141            
142         }
143        
144         projectMap[pname] = rootItem;
145         Expand(rootItem,TVE_EXPAND);
146     }
147
148     void CreateTreeItem(const string& path)
149     {
150         vector<string> pathList;
151         Split(path,"//",pathList);
152         HTREEITEM lastItem = rootItem;
153        
154         for ( int i = 0; i < pathList.size(); i++)
155         {
156             string temp = pathList[i];
157            
158             HTREEITEM item = NULL;         
159            
160             if ( projectMap.find(temp ) != NULL ) item = projectMap[temp];
161            
162             if ( item)
163             {
164            
165             }
166             else
167             {
168                 item = InsertItem(temp.c_str(),2,3,lastItem);
169                 projectMap[temp] = item;
170            
171             }
172             lastItem = item;
173         }
174        
175        
176        
177        
178     }
179
180     void StartProject(ProjectSettings* p)
181     {
182         project = p;
183         DeleteAllItems();
184         projectMap.clear();
185
186         vector<string> folders;
187         Split(project->GetCache("ProjectFolders"),",",folders );
188         InitTree(folders);
189
190
191         vector<string> projects;
192         Split(project->GetCache("AddOnProjects"),",",projects);
193
194         InitExtraProjects(projects);
195
196         AddInitialFiles();
197
198
199     }
200
201     void InitExtraProjects(const vector<string> & p )
202     {
203         for ( int i = 0 ; i < p.size(); i++ )
204         {
205             string name = StripFileName(p[i]);
206             StripExtension(name);
207             InsertProject(name.c_str() );
208         }
209     }
210
211     void AddInitialFiles()
212     {
213         vector<string> files;
214         Split(project->GetCache("files"),",",files);
215
216
217         for ( int i = 0;i < files.size(); i++)
218         {
219             string folder = project->GetCache(files[i] + "_folderForFile");
220         //  ElephantMessageBox(folder.c_str());
221         //  ElephantMessageBox(files[i].c_str());
222             HTREEITEM fold = projectMap[StripFileName( folder ) ];
223             HTREEITEM addedItem = InsertItem(StripFileName(files[i]) .c_str(),0,0,fold);
224             this->SetItemData(addedItem,( DWORD) strdup(files[i].c_str() ));
225         }
226
227     }
228
229     void AddFile(const string& path,bool create = false, bool useDefaultFolder = false);
230     void RemoveFolder();
231    
232     void InsertProject(const string& pname )
233     {
234         this->InsertItem(pname.c_str(),1,1 );
235        
236     }
237     void RemoveFile();
238    
239 // Implementation
240 public:
241     virtual ~CFileTreeCtrl();
242
243     // Generated message map functions
244 protected:
245     //{{AFX_MSG(CFileTreeCtrl)
246     afx_msg int OnCreate(LPCREATESTRUCT lpCreateStruct);
247     afx_msg void OnEndlabeledit(NMHDR* pNMHDR, LRESULT* pResult);
248     //}}AFX_MSG
249     afx_msg void OnKeyUp(UINT nChar, UINT nRepCnt, UINT nFlags);
250     afx_msg void OnRButtonDown(UINT nFlags, CPoint point);
251     afx_msg void OnLButtonDblClk(UINT nFlags, CPoint point);
252     DECLARE_MESSAGE_MAP()
253 };
254
255 /////////////////////////////////////////////////////////////////////////////
256
257 //{{AFX_INSERT_LOCATION}}
258 // Microsoft Visual C++ will insert additional declarations immediately before the previous line.
259
260 #endif // !defined(AFX_TABTREECTRL_H__AC2374B6_5047_4F92_96F4_7D5DEAE9BDCE__INCLUDED_)
Note: See TracBrowser for help on using the browser.