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

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

・BreakPoint周りをリファクタリング
・FileTree周りをリファクタリング

File size: 5.9 KB
Line 
1#include "stdafx.h"
2
3#include "common.h"
4
5FileListTreeViewCtrl *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 {
20 SetPosCenter(hwnd);
21
22 hTreeItem = pobj_FileTree->GetSelectedItem();
23
24 std::string tempPath = projectInfo.pobj_DBFileInfo->GetPath(hTreeItem);
25
26 //絶対パス、相対パスを表示
27 lstrcpy( temporary, tempPath.c_str() );
28 lstrcpy( temporary, projectInfo.GetWorkDir().GetFullPath( temporary ).c_str() );
29 SetDlgItemText(hwnd,IDC_USING_FILE,temporary);
30 SetDlgItemText(hwnd,IDC_DEFINED_FILE,tempPath.c_str());
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(tempPath.c_str());
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 }
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 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 {
107 hTreeItem=TreeView_GetSelection(hwnd);
108
109 std::string tempPath = projectInfo.pobj_DBFileInfo->GetPath(hTreeItem);
110
111 lstrcpy( temporary, tempPath.c_str() );
112 lstrcpy( temporary, projectInfo.GetWorkDir().GetFullPath( temporary ).c_str() );
113 OpenFileWithExtension(temporary);
114 break;
115 }
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
144FileListTreeViewCtrl::FileListTreeViewCtrl( HWND hParent )
145 : CTreeViewCtrl()
146{
147 this->Create( hParent, NULL, NULL,
148 WS_CHILD | TVS_HASBUTTONS | TVS_HASLINES | TVS_LINESATROOT | TVS_SHOWSELALWAYS,
149 WS_EX_CLIENTEDGE
150 );
151
152 OldFileTreeViewProc=(WNDPROC)this->GetWindowLongPtr(GWLP_WNDPROC);
153 this->SetWindowLongPtr(GWLP_WNDPROC,(long)FileTreeViewProc);
154
155 //イメージリスト読み込み、設定
156 hImageList=ImageList_Create(16,16,ILC_COLOR24|ILC_MASK,3,0);
157 ImageList_AddIcon(hImageList,LoadIcon(hResInst,MAKEINTRESOURCE(IDI_FOLDER_CLOSE)));
158 ImageList_AddIcon(hImageList,LoadIcon(hResInst,MAKEINTRESOURCE(IDI_FOLDER_OPEN)));
159 ImageList_AddIcon(hImageList,LoadIcon(hResInst,MAKEINTRESOURCE(IDI_TEXTDOCUMENT)));
160 this->SetImageList(hImageList,TVSIL_NORMAL);
161}
162FileListTreeViewCtrl::~FileListTreeViewCtrl()
163{
164 this->DestroyWindow();
165 ImageList_Destroy(hImageList);
166}
167
168void FileListTreeViewCtrl::ContextMenu(POINT *pPos)
169{
170 //右クリックによるメニューを表示
171 TV_HITTESTINFO tvHitTestInfo;
172 tvHitTestInfo.pt=*pPos;
173 this->ScreenToClient(&tvHitTestInfo.pt);
174
175 HTREEITEM hTreeItem = this->HitTest(&tvHitTestInfo);
176 if(hTreeItem){
177 this->SelectItem(hTreeItem);
178
179 extern HMENU hFileTreeMenuBase;
180 if(this->GetRootItem()==hTreeItem)
181 {
182 TrackPopupMenu(GetSubMenu(hFileTreeMenuBase,0),TPM_LEFTALIGN,pPos->x,pPos->y,0,this->m_hWnd,0);
183 }
184 else
185 {
186 TrackPopupMenu(GetSubMenu(hFileTreeMenuBase,1),TPM_LEFTALIGN,pPos->x,pPos->y,0,this->m_hWnd,0);
187 }
188 }
189}
190
191HTREEITEM FileListTreeViewCtrl::insert(char *str){
192 //////////////////////
193 //ツリービューに追加
194
195 TV_INSERTSTRUCT tv;
196 tv.hInsertAfter=TVI_SORT;
197 tv.item.mask=TVIF_TEXT|TVIF_IMAGE|TVIF_SELECTEDIMAGE;
198 tv.item.iImage=2;
199 tv.item.iSelectedImage=2;
200 tv.hParent=this->GetRootItem();
201 tv.item.pszText=str;
202
203 return this->InsertItem(&tv);
204}
Note: See TracBrowser for help on using the repository browser.