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

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

Projectクラスをリファクタリング中。

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