source: dev/trunk/ab5.0/abdev/ProjectEditor/FileTree.cpp@ 475

Last change on this file since 475 was 475, checked in by dai_9181, 16 years ago

構成管理を変更中・・・(いったんコミット)

File size: 5.8 KB
Line 
1#include "stdafx.h"
2
3#include "common.h"
4
5CFileTree *pobj_FileTree;
6
7WNDPROC OldFileTreeViewProc;
8
9BOOL CALLBACK DlgProject_FileProperty(HWND hwnd,UINT message,WPARAM wParam,LPARAM lParam){
10 extern PROJECTINFO ProjectInfo;
11 HTREEITEM hTreeItem;
12 int i;
13 char temporary[MAX_PATH];
14 HANDLE hFile;
15 FILETIME LastWriteTime,LocalTime;
16 SYSTEMTIME SystemTime;
17
18 switch(message){
19 case WM_INITDIALOG:
20 SetPosCenter(hwnd);
21
22 hTreeItem=TreeView_GetSelection(pobj_FileTree->hTree);
23
24 char *path;
25 path=ProjectInfo.pobj_DBFileInfo->GetPath(hTreeItem);
26
27 //絶対パス、相対パスを表示
28 lstrcpy(temporary,path);
29 GetFullPath(temporary,ProjectInfo.dir);
30 SetDlgItemText(hwnd,IDC_USING_FILE,temporary);
31 SetDlgItemText(hwnd,IDC_DEFINED_FILE,path);
32
33 //最終更新日時を表示
34 hFile=CreateFile(temporary,GENERIC_READ,FILE_SHARE_READ|FILE_SHARE_WRITE,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL);
35 if(hFile==INVALID_HANDLE_VALUE){
36 //"エラー"
37 lstrcpy(temporary,STRING_ERROR);
38 }
39 else{
40 GetFileTime(hFile,NULL,NULL,&LastWriteTime);
41 FileTimeToLocalFileTime(&LastWriteTime,&LocalTime);
42 FileTimeToSystemTime(&LocalTime,&SystemTime);
43 if(SystemTime.wHour>=12){
44 //"午後 "
45 lstrcpy(temporary,STRING_AFTERNOON);
46 lstrcat(temporary," ");
47 SystemTime.wHour-=12;
48 }
49 else{
50 //"午前 "
51 lstrcpy(temporary,STRING_MORNING);
52 lstrcat(temporary," ");
53 }
54 sprintf(temporary+5,"%02d:%02d:%02d %04d/%02d/%02d",
55 SystemTime.wHour,SystemTime.wMinute,SystemTime.wSecond,
56 SystemTime.wYear,SystemTime.wMonth,SystemTime.wDay);
57 CloseHandle(hFile);
58 }
59 SetDlgItemText(hwnd,IDC_UPDATE_TIME,temporary);
60
61
62 //////////////
63 // 形式を表示
64 //////////////
65 i=GetFileExtension(path);
66
67 //"Basic プログラム"
68 if(i==FT_BASICPROGRAM) lstrcpy(temporary,STRING_FILETYPE_BASICPROGRAM);
69 //"サブ プログラム"
70 else if(i==FT_SUBPROGRAM) lstrcpy(temporary,STRING_FILETYPE_SUBPROGRAM);
71 //"テキスト ドキュメント"
72 else if(i==FT_TEXT) lstrcpy(temporary,STRING_FILETYPE_TEXT);
73 //"判別できません"
74 else lstrcpy(temporary,STRING_FILETYPE_UNKNOWN);
75
76 SetDlgItemText(hwnd,IDC_FILETYPE,temporary);
77
78 break;
79 case WM_COMMAND:
80 switch(LOWORD(wParam)){
81 case IDOK:
82 EndDialog(hwnd,0);
83 return 1;
84 case IDCANCEL:
85 EndDialog(hwnd,0);
86 return 1;
87 }
88 break;
89 }
90 return 0;
91}
92
93LRESULT CALLBACK FileTreeViewProc(HWND hwnd,UINT message,WPARAM wParam,LPARAM lParam){
94 HTREEITEM hTreeItem;
95 char temporary[MAX_PATH];
96 char *path;
97 switch(message){
98 case WM_COMMAND:
99 switch(LOWORD(wParam)){
100 case IDM_FILETREE_INSERT:
101 //"プロジェクトへ挿入するファイルを指定して下さい"
102 extern LPSTR DefFileFilter;
103 if(!GetFilePathDialog(hOwner,temporary,DefFileFilter,STRING_FILEOPENTITLE_INSERTEDPROJECT,1)) break;
104 Project_File_Insert(temporary);
105 break;
106 case IDM_FILETREE_OPEN:
107 hTreeItem=TreeView_GetSelection(hwnd);
108
109 path=ProjectInfo.pobj_DBFileInfo->GetPath(hTreeItem);
110 if(!path) break;
111
112 lstrcpy(temporary,path);
113 GetFullPath(temporary,ProjectInfo.dir);
114 OpenFileWithExtension(temporary);
115 break;
116 case IDM_FILETREE_DELETE:
117 hTreeItem=TreeView_GetSelection(hwnd);
118 Project_File_Delete(hTreeItem);
119 break;
120 case IDM_FILETREE_PROPERTY:
121 DialogBox(hResInst,MAKEINTRESOURCE(IDD_PROJECT_FILEPROPERTY),hOwner,(DLGPROC)DlgProject_FileProperty);
122 break;
123 }
124 return 0;
125 case WM_CHAR:
126 if(wParam==VK_RETURN){
127 SendMessage(hwnd,WM_COMMAND,IDM_FILETREE_OPEN,0);
128 //デフォルトのメッセージ処理をするとビープ音がしてしまうので避ける
129 return 0;
130 }
131 break;
132 case WM_KEYDOWN:
133 if(wParam==VK_DELETE){
134 SendMessage(hwnd,WM_COMMAND,IDM_FILETREE_DELETE,0);
135 }
136 break;
137 case WM_LBUTTONDBLCLK:
138 SendMessage(hwnd,WM_COMMAND,IDM_FILETREE_OPEN,0);
139 break;
140 }
141 return CallWindowProc(OldFileTreeViewProc,hwnd,message,wParam,lParam);
142}
143
144CFileTree::CFileTree(HWND hParent){
145 hTree=CreateWindowEx(WS_EX_CLIENTEDGE,WC_TREEVIEW,"",
146 WS_CHILD|TVS_HASLINES|TVS_HASBUTTONS|TVS_LINESATROOT|TVS_SHOWSELALWAYS,
147 0,0,0,0,
148 hParent,0,hInst,0);
149 OldFileTreeViewProc=(WNDPROC)GetWindowLongPtr(hTree,GWLP_WNDPROC);
150 SetWindowLongPtr(hTree,GWLP_WNDPROC,(long)FileTreeViewProc);
151
152 //イメージリスト読み込み、設定
153 hImageList=ImageList_Create(16,16,ILC_COLOR24|ILC_MASK,3,0);
154 ImageList_AddIcon(hImageList,LoadIcon(hResInst,MAKEINTRESOURCE(IDI_FOLDER_CLOSE)));
155 ImageList_AddIcon(hImageList,LoadIcon(hResInst,MAKEINTRESOURCE(IDI_FOLDER_OPEN)));
156 ImageList_AddIcon(hImageList,LoadIcon(hResInst,MAKEINTRESOURCE(IDI_TEXTDOCUMENT)));
157 TreeView_SetImageList(hTree,hImageList,TVSIL_NORMAL);
158}
159CFileTree::~CFileTree(){
160 DestroyWindow(hTree);
161 ImageList_Destroy(hImageList);
162}
163
164void CFileTree::ContextMenu(POINT *pPos){
165 //右クリックによるメニューを表示
166 TV_HITTESTINFO tvHitTestInfo;
167 tvHitTestInfo.pt=*pPos;
168 ScreenToClient(hTree,&tvHitTestInfo.pt);
169
170 HTREEITEM hTreeItem;
171 hTreeItem=TreeView_HitTest(hTree,&tvHitTestInfo);
172 if(hTreeItem){
173 TreeView_SelectItem(hTree,hTreeItem);
174
175 extern HMENU hFileTreeMenuBase;
176 if(TreeView_GetRoot(hTree)==hTreeItem)
177 TrackPopupMenu(GetSubMenu(hFileTreeMenuBase,0),TPM_LEFTALIGN,pPos->x,pPos->y,0,hTree,0);
178 else TrackPopupMenu(GetSubMenu(hFileTreeMenuBase,1),TPM_LEFTALIGN,pPos->x,pPos->y,0,hTree,0);
179 }
180}
181
182HTREEITEM CFileTree::insert(char *str){
183 //////////////////////
184 //ツリービューに追加
185
186 TV_INSERTSTRUCT tv;
187 tv.hInsertAfter=TVI_SORT;
188 tv.item.mask=TVIF_TEXT|TVIF_IMAGE|TVIF_SELECTEDIMAGE;
189 tv.item.iImage=2;
190 tv.item.iSelectedImage=2;
191 tv.hParent=TreeView_GetRoot(hTree);
192 tv.item.pszText=str;
193
194 return TreeView_InsertItem(hTree,&tv);
195}
196
197void CFileTree::resize(int x,int y,int cx,int cy){
198 MoveWindow(hTree,x,y,cx,cy,1);
199}
Note: See TracBrowser for help on using the repository browser.