source: dev/trunk/ab5.0/abdev/abdev/ProjectControl.cpp@ 623

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

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

File size: 60.8 KB
Line 
1#include "stdafx.h"
2
3#include "Common.h"
4
5using namespace ActiveBasic::IDE;
6
7#if defined(JPN)
8//日本語
9#include "pj_msg_jpn.h"
10#else
11//英語
12#include "pj_msg_eng.h"
13#endif
14
15HWND hProjectViewTab;
16HWND hProcedureTreeView,hMaterialTreeView;
17HIMAGELIST hProcedureTreeViewImageList,hMaterialTreeViewImageList;
18WNDPROC OldProcedureTreeViewProc,OldMaterialTreeViewProc;
19WNDPROC OldTabProc;
20
21LRESULT CALLBACK ProcedureTreeViewProc(HWND hwnd,UINT message,WPARAM wParam,LPARAM lParam){
22 if(message==WM_CHAR&&wParam==VK_RETURN){
23 SendMessage(hProjectViewTab,WM_COMMAND,IDM_PROCEDURETREE_SHOW,0);
24 //デフォルトのメッセージ処理をするとビープ音がしてしまうので避ける
25 return 0;
26 }
27 else if(message==WM_LBUTTONDBLCLK){
28 SendMessage(hProjectViewTab,WM_COMMAND,IDM_PROCEDURETREE_SHOW,0);
29 return 0;
30 }
31 return CallWindowProc(OldProcedureTreeViewProc,hwnd,message,wParam,lParam);
32}
33LRESULT CALLBACK MaterialTreeViewProc(HWND hwnd,UINT message,WPARAM wParam,LPARAM lParam){
34 if(message==WM_CHAR&&wParam==VK_RETURN){
35 SendMessage(hProjectViewTab,WM_COMMAND,IDM_MATERIALTREE_OPEN,0);
36 //デフォルトのメッセージ処理をするとビープ音がしてしまうので避ける
37 return 0;
38 }
39 if(message==WM_KEYDOWN&&wParam==VK_DELETE) SendMessage(hProjectViewTab,WM_COMMAND,IDM_MATERIALTREE_DELETE,0);
40 return CallWindowProc(OldMaterialTreeViewProc,hwnd,message,wParam,lParam);
41}
42LRESULT CALLBACK TabProc(HWND hwnd,UINT message,WPARAM wParam,LPARAM lParam){
43 extern HANDLE hHeap;
44 extern MDIINFO MdiInfo[MAX_WNDNUM];
45 extern LPSTR DefFileFilter;
46 int i,i2,WndNum;
47 char str[MAX_PATH],temporary[MAX_PATH];
48 HWND hTree,hChild;
49 HTREEITEM hTreeItem,hTreeItem2;
50 TV_HITTESTINFO tvHitTestInfo;
51 TVITEM tvItem;
52
53 switch(message){
54 case WM_CONTEXTMENU:
55 i=TabCtrl_GetCurSel(hwnd);
56 if(i==0){
57 //ファイルツリー
58 POINT pos;
59 pos.x=LOWORD(lParam);
60 pos.y=HIWORD(lParam);
61 pobj_FileTree->ContextMenu(&pos);
62 return 0;
63 }
64 else if(i==1) hTree=hProcedureTreeView;
65 else if(i==2) hTree=hMaterialTreeView;
66 tvHitTestInfo.pt.x=LOWORD(lParam);
67 tvHitTestInfo.pt.y=HIWORD(lParam);
68 ScreenToClient(hTree,&tvHitTestInfo.pt);
69 hTreeItem=TreeView_HitTest(hTree,&tvHitTestInfo);
70 if(hTreeItem){
71 TreeView_SelectItem(hTree,hTreeItem);
72 if(i==1){
73 extern HMENU hProcedureTreeMenuBase;
74 if(TreeView_GetRoot(hTree)!=hTreeItem)
75 TrackPopupMenu(GetSubMenu(hProcedureTreeMenuBase,1),TPM_LEFTALIGN,LOWORD(lParam),HIWORD(lParam),0,hwnd,0);
76 }
77 else if(i==2){
78 extern HMENU hMaterialTreeMenuBase;
79 hTreeItem2=TreeView_GetRoot(hTree);
80 for(i2=0;;i2++){
81 if(hTreeItem2==hTreeItem) break;
82 hTreeItem2=TreeView_GetNextSibling(hTree,hTreeItem2);
83 if(!hTreeItem2) break;
84 }
85 if(hTreeItem2){
86 if(i2==0)
87 TrackPopupMenu(GetSubMenu(hMaterialTreeMenuBase,0),TPM_LEFTALIGN,LOWORD(lParam),HIWORD(lParam),0,hwnd,0);
88 else if(i2==1)
89 TrackPopupMenu(GetSubMenu(hMaterialTreeMenuBase,2),TPM_LEFTALIGN,LOWORD(lParam),HIWORD(lParam),0,hwnd,0);
90 else if(i2==2)
91 TrackPopupMenu(GetSubMenu(hMaterialTreeMenuBase,4),TPM_LEFTALIGN,LOWORD(lParam),HIWORD(lParam),0,hwnd,0);
92 else if(i2==3)
93 TrackPopupMenu(GetSubMenu(hMaterialTreeMenuBase,6),TPM_LEFTALIGN,LOWORD(lParam),HIWORD(lParam),0,hwnd,0);
94 else if(i2==4)
95 TrackPopupMenu(GetSubMenu(hMaterialTreeMenuBase,8),TPM_LEFTALIGN,LOWORD(lParam),HIWORD(lParam),0,hwnd,0);
96 }
97 else{
98 hTreeItem=TreeView_GetNextItem(hTree,hTreeItem,TVGN_PARENT);
99 hTreeItem2=TreeView_GetRoot(hTree);
100 for(i2=0;;i2++){
101 if(hTreeItem2==hTreeItem) break;
102 hTreeItem2=TreeView_GetNextSibling(hTree,hTreeItem2);
103 if(!hTreeItem2) break;
104 }
105 if(hTreeItem2){
106 if(i2==0)
107 TrackPopupMenu(GetSubMenu(hMaterialTreeMenuBase,1),TPM_LEFTALIGN,LOWORD(lParam),HIWORD(lParam),0,hwnd,0);
108 else if(i2==1)
109 TrackPopupMenu(GetSubMenu(hMaterialTreeMenuBase,3),TPM_LEFTALIGN,LOWORD(lParam),HIWORD(lParam),0,hwnd,0);
110 else if(i2==2)
111 TrackPopupMenu(GetSubMenu(hMaterialTreeMenuBase,5),TPM_LEFTALIGN,LOWORD(lParam),HIWORD(lParam),0,hwnd,0);
112 else if(i2==3)
113 TrackPopupMenu(GetSubMenu(hMaterialTreeMenuBase,7),TPM_LEFTALIGN,LOWORD(lParam),HIWORD(lParam),0,hwnd,0);
114 else if(i2==4)
115 TrackPopupMenu(GetSubMenu(hMaterialTreeMenuBase,9),TPM_LEFTALIGN,LOWORD(lParam),HIWORD(lParam),0,hwnd,0);
116 }
117 }
118 }
119 }
120 break;
121 case WM_COMMAND:
122 switch(LOWORD(wParam)){
123
124 case IDM_PROCEDURETREE_SHOW:
125 extern BOOL bSearchingClasses;
126 if(bSearchingClasses){
127 pobj_ClassTreeView->bShowSwitch=1;
128 break;
129 }
130
131 hTreeItem=TreeView_GetSelection(hProcedureTreeView);
132 for(i=0;i<pobj_ClassTreeView->NumberOfProcedures;i++){
133 if(pobj_ClassTreeView->pProcInfo[i].hTreeItem==hTreeItem){
134
135 if( projectInfo.IsOpened() ){
136 // 対象ファイルを開く
137 lstrcpy(temporary,
138 projectInfo.pobj_DBFileInfo->ppobj_FileInfo[pobj_ClassTreeView->pProcInfo[i].FileNum]->m_path);
139 lstrcpy( temporary, projectInfo.GetWorkDir().GetFullPath( temporary ).c_str() );
140 hChild=OpenFileWithExtension(temporary);
141 }
142 else{
143 hChild = GetWindow(hClient,GW_CHILD);
144 }
145
146 //プロシージャの行を選択する
147 //ResetScrollbarが再描画時に呼び出されるので、再描画する
148 WndNum=GetWndNum(hChild);
149 InvalidateRect(MdiInfo[WndNum].pMdiTextEdit->hEdit,NULL,0);
150 UpdateWindow(MdiInfo[WndNum].pMdiTextEdit->hEdit);
151 TextEdit_SelectOneLine(WndNum,pobj_ClassTreeView->pProcInfo[i].code_pos,TRUE);
152
153 //タイマーをセット
154 // ※フォーカスをエディタにセットするため
155 // ※タイミングを遅らせてSetFocusを実行する必要あり
156 SetTimer(hwnd,100,10,NULL);
157
158 break;
159 }
160 }
161
162 break;
163
164 case IDM_MATERIALTREE_INSERTCURSOR:
165 Project_CursorResInsert();
166 break;
167 case IDM_MATERIALTREE_INSERTBITMAP:
168 Project_BitmapResInsert();
169 break;
170 case IDM_MATERIALTREE_INSERTICON:
171 Project_IconResInsert();
172 break;
173 case IDM_MATERIALTREE_INSERTMENU:
174 Project_Menu_Insert();
175 break;
176 case IDM_MATERIALTREE_INSERTWINDOW:
177 Project_Window_Insert();
178 break;
179 case IDM_MATERIALTREE_OPEN:
180 hTreeItem=TreeView_GetSelection(hMaterialTreeView);
181 for(i=0;i<static_cast<int>(projectInfo.windowInfos.size());i++){
182 if(projectInfo.windowInfos[i]->hTreeItem==hTreeItem){
183 NewRadWindow( *projectInfo.windowInfos[i] );
184 break;
185 }
186 }
187 for(i=0;i<projectInfo.NumberOfMenu;i++){
188 if(projectInfo.pMenuInfo[i].hTreeItem==hTreeItem){
189 NewMenuWindow(&projectInfo.pMenuInfo[i]);
190 break;
191 }
192 }
193 for(i=0;i<projectInfo.resourceManager.iconResources.size();i++){
194 if(projectInfo.resourceManager.iconResources[i].hTreeItem==hTreeItem){
195 NewIconEditWindow(
196 projectInfo.GetWorkDir().GetFullPath( projectInfo.resourceManager.iconResources[i].filepath ).c_str()
197 );
198 break;
199 }
200 }
201 break;
202 case IDM_MATERIALTREE_DELETE:
203 hTreeItem=TreeView_GetSelection(hMaterialTreeView);
204 for(i=0;i<projectInfo.resourceManager.cursorResources.size();i++){
205 if(projectInfo.resourceManager.cursorResources[i].hTreeItem==hTreeItem){
206
207 //"%s カーソルをプロジェクトから削除します。よろしいですか?"
208 sprintf(str,STRING_PJ_CHECK_DELETECURSOR,projectInfo.resourceManager.cursorResources[i].idName.c_str());
209 if(IDCANCEL==MessageBox(hOwner,str,APPLICATION_NAME,MB_OKCANCEL|MB_ICONEXCLAMATION)) break;
210
211 Project_Cursor_Delete(i);
212 break;
213 }
214 }
215 for(i=0;i<projectInfo.resourceManager.bitmapResources.size();i++){
216 if(projectInfo.resourceManager.bitmapResources[i].hTreeItem==hTreeItem){
217
218 //"%s ビットマップをプロジェクトから削除します。よろしいですか?"
219 sprintf(str,STRING_PJ_CHECK_DELETEBITMAP,projectInfo.resourceManager.bitmapResources[i].idName.c_str());
220 if(IDCANCEL==MessageBox(hOwner,str,APPLICATION_NAME,MB_OKCANCEL|MB_ICONEXCLAMATION)) break;
221
222 Project_Bitmap_Delete(i);
223 break;
224 }
225 }
226 for(i=0;i<projectInfo.resourceManager.iconResources.size();i++){
227 if(projectInfo.resourceManager.iconResources[i].hTreeItem==hTreeItem){
228
229 //"%s アイコンをプロジェクトから削除します。よろしいですか?"
230 sprintf(str,STRING_PJ_CHECK_DELETEICON,projectInfo.resourceManager.iconResources[i].idName.c_str());
231 if(IDCANCEL==MessageBox(hOwner,str,APPLICATION_NAME,MB_OKCANCEL|MB_ICONEXCLAMATION)) break;
232
233 Project_Icon_Delete(i);
234 break;
235 }
236 }
237 for(i=0;i<projectInfo.NumberOfMenu;i++){
238 if(projectInfo.pMenuInfo[i].hTreeItem==hTreeItem){
239
240 //"%s メニューをプロジェクトから削除します。よろしいですか?"
241 sprintf(str,STRING_PJ_CHECK_DELETEMENU,projectInfo.pMenuInfo[i].IdName);
242 if(IDCANCEL==MessageBox(hOwner,str,APPLICATION_NAME,MB_OKCANCEL|MB_ICONEXCLAMATION)) break;
243
244 Project_Menu_Delete(i);
245 break;
246 }
247 }
248 for(i=0;i<static_cast<int>(projectInfo.windowInfos.size());i++){
249 if(projectInfo.windowInfos[i]->hTreeItem==hTreeItem){
250
251 //"%s ウィンドウをプロジェクトから削除します。よろしいですか?"
252 sprintf(str,STRING_PJ_CHECK_DELETEWINDOW,projectInfo.windowInfos[i]->GetName().c_str());
253 if(IDCANCEL==MessageBox(hOwner,str,APPLICATION_NAME,MB_OKCANCEL|MB_ICONEXCLAMATION)) break;
254
255 Project_Window_Delete(i);
256 break;
257 }
258 }
259 break;
260 case IDM_MENUTREE_RENAMEID:
261 extern char NewIdName[MAX_PATH];
262 hTreeItem=TreeView_GetSelection(hMaterialTreeView);
263 for(i=0;i<projectInfo.resourceManager.cursorResources.size();i++){
264 if(projectInfo.resourceManager.cursorResources[i].hTreeItem==hTreeItem){
265 Project_Cursor_RenameID(i);
266 break;
267 }
268 }
269 for(i=0;i<projectInfo.resourceManager.bitmapResources.size();i++){
270 if(projectInfo.resourceManager.bitmapResources[i].hTreeItem==hTreeItem){
271 Project_Bitmap_RenameID(i);
272 break;
273 }
274 }
275 for(i=0;i<projectInfo.resourceManager.iconResources.size();i++){
276 if(projectInfo.resourceManager.iconResources[i].hTreeItem==hTreeItem){
277 Project_Icon_RenameID(i);
278 }
279 }
280 for(i=0;i<projectInfo.NumberOfMenu;i++){
281 if(projectInfo.pMenuInfo[i].hTreeItem==hTreeItem){
282 if(!DialogBoxParam(hResInst,MAKEINTRESOURCE(IDD_INPUTID),hOwner,(DLGPROC)DlgProject_MenuID_Input,(long)projectInfo.pMenuInfo[i].IdName)) break;
283
284 //重複チェック
285 for(i2=0;i2<projectInfo.NumberOfMenu;i2++){
286 if(i2==i) continue;
287 if(lstrcmp(NewIdName,projectInfo.pMenuInfo[i2].IdName)==0){
288 //"ID \"%s\" は既にプロジェクト内に存在します。"
289 sprintf(temporary,STRING_DUPLICATIONERROR_ID_IN_PROJECT,NewIdName);
290 MessageBox(hOwner,temporary,STRING_ERROR,MB_OK|MB_ICONEXCLAMATION);
291 return 0;
292 }
293 }
294
295 HeapDefaultFree(projectInfo.pMenuInfo[i].IdName);
296 projectInfo.pMenuInfo[i].IdName=(char *)HeapAlloc(hHeap,0,lstrlen(NewIdName)+1);
297 lstrcpy(projectInfo.pMenuInfo[i].IdName,NewIdName);
298
299 tvItem.hItem=hTreeItem;
300 tvItem.mask=TVIF_TEXT;
301 tvItem.pszText=projectInfo.pMenuInfo[i].IdName;
302 tvItem.cchTextMax=lstrlen(projectInfo.pMenuInfo[i].IdName)+1;
303 TreeView_SetItem(hMaterialTreeView,&tvItem);
304
305 projectInfo.ModifyOfMaterial=1;
306
307 TreeView_SortChildren(hMaterialTreeView,
308 TreeView_GetParent(hMaterialTreeView,hTreeItem),
309 0);
310 break;
311 }
312 }
313 break;
314 case IDM_MATERIALTREE_ICON_SETMAIN:
315 hTreeItem=TreeView_GetSelection(hMaterialTreeView);
316 for(i=0;i<projectInfo.resourceManager.iconResources.size();i++){
317 if(projectInfo.resourceManager.iconResources[i].hTreeItem==hTreeItem){
318 if(i==0) break;
319
320 ActiveBasic::Common::ResourceItem tempItem = projectInfo.resourceManager.iconResources[i];
321 Jenga::Common::EraseVectorItem<ActiveBasic::Common::ResourceItems>( projectInfo.resourceManager.iconResources, i );
322 projectInfo.resourceManager.iconResources.insert( projectInfo.resourceManager.iconResources.begin(), tempItem );
323
324 tvItem.hItem=projectInfo.resourceManager.iconResources[1].hTreeItem;
325 tvItem.mask=TVIF_TEXT;
326 lstrcpy( temporary, projectInfo.resourceManager.iconResources[1].idName.c_str() );
327 tvItem.pszText = temporary;
328 tvItem.cchTextMax=lstrlen(temporary)+1;
329 TreeView_SetItem(hMaterialTreeView,&tvItem);
330
331 tvItem.hItem=projectInfo.resourceManager.iconResources[0].hTreeItem;
332 tvItem.mask=TVIF_TEXT;
333 sprintf(temporary,"%s (Main)",projectInfo.resourceManager.iconResources[0].idName.c_str());
334 tvItem.pszText=temporary;
335 tvItem.cchTextMax=lstrlen(temporary)+1;
336 TreeView_SetItem(hMaterialTreeView,&tvItem);
337
338 projectInfo.ModifuOfResource=1;
339 break;
340 }
341 }
342 break;
343 }
344 break;
345 case WM_TIMER:
346 KillTimer(hwnd,wParam);
347
348 //フォーカスをエディタにセット
349 SetFocus(GetWindow(GetWindow(hClient,GW_CHILD),GW_CHILD));
350 break;
351 case WM_NOTIFY:
352 NMHDR *hdr;
353 hdr=(NMHDR *)lParam;
354 if(hdr->code==NM_DBLCLK){
355 if(hdr->hwndFrom==hProcedureTreeView) SendMessage(hwnd,WM_COMMAND,IDM_PROCEDURETREE_SHOW,0);
356 else if(hdr->hwndFrom==hMaterialTreeView) SendMessage(hwnd,WM_COMMAND,IDM_MATERIALTREE_OPEN,0);
357 }
358 if(hdr->code==TVN_ITEMEXPANDEDW||hdr->code==TVN_ITEMEXPANDED){
359 NMTREEVIEW *nmTreeView;
360 TVITEM tvItem;
361 nmTreeView=(NMTREEVIEW *)lParam;
362 tvItem.mask=TVIF_HANDLE|TVIF_IMAGE|TVIF_SELECTEDIMAGE;
363 tvItem.hItem=nmTreeView->itemNew.hItem;
364 TreeView_GetItem(nmTreeView->hdr.hwndFrom,&tvItem);
365 if(tvItem.iImage==0||tvItem.iImage==1){
366 if(nmTreeView->action==TVE_EXPAND){
367 tvItem.iImage=1;
368 tvItem.iSelectedImage=1;
369 }
370 else if(nmTreeView->action==TVE_COLLAPSE){
371 tvItem.iImage=0;
372 tvItem.iSelectedImage=0;
373 }
374 tvItem.hItem=nmTreeView->itemNew.hItem;
375 TreeView_SetItem(nmTreeView->hdr.hwndFrom,&tvItem);
376 }
377 }
378 break;
379 }
380 return CallWindowProc(OldTabProc,hwnd,message,wParam,lParam);
381}
382void ResizeProjectView_ToolWindow(void){
383 extern HWND hProjectView_ToolWindow;
384 RECT rect;
385 GetClientRect(hProjectView_ToolWindow,&rect);
386 SendMessage(hProjectView_ToolWindow,WM_SIZE,0,MAKELONG(rect.right,rect.bottom));
387}
388LRESULT CALLBACK ProjectView_ToolWindowProc(HWND hwnd,UINT message,WPARAM wParam,LPARAM lParam){
389 extern HWND hProjectView;
390 switch(message){
391 case WM_SIZE:
392 MoveWindow(hProjectView,0,0,
393 LOWORD(lParam),
394 HIWORD(lParam),1);
395 return 0;
396 case WM_CLOSE:
397 SendMessage(hOwner,WM_COMMAND,IDM_PROJECTVIEW,0);
398 return 0;
399 }
400 return DefWindowProc(hwnd,message,wParam,lParam);
401}
402void ShowFileView(){
403 TabCtrl_SetCurSel(hProjectViewTab,0);
404 ShowWindow(pobj_FileTree->hTree,SW_SHOW);
405 ShowWindow(hProcedureTreeView,SW_HIDE);
406 ShowWindow(hMaterialTreeView,SW_HIDE);
407}
408void ShowClassView(){
409 TabCtrl_SetCurSel(hProjectViewTab,1);
410 ShowWindow(pobj_FileTree->hTree,SW_HIDE);
411 ShowWindow(hMaterialTreeView,SW_HIDE);
412 ShowWindow(hProcedureTreeView,SW_SHOW);
413}
414void ShowMaterialView(){
415 TabCtrl_SetCurSel(hProjectViewTab,2);
416 ShowWindow(pobj_FileTree->hTree,SW_HIDE);
417 ShowWindow(hProcedureTreeView,SW_HIDE);
418 ShowWindow(hMaterialTreeView,SW_SHOW);
419}
420LRESULT CALLBACK ProjectViewProc(HWND hwnd,UINT message,WPARAM wParam,LPARAM lParam){
421 extern HINSTANCE hInst,hResInst;
422 extern HWND hTabOfProjectView;
423 extern HFONT hStatusFont;
424 extern HWND hProjectView_ToolWindow;
425 RECT rect;
426 HWND hButton;
427
428 switch(message){
429 case WM_CREATE:
430 hProjectViewTab=CreateWindow(WC_TABCONTROL,NULL,
431 WS_CHILD | WS_CLIPCHILDREN | WS_VISIBLE,
432 0,0,0,0,hwnd,0,hInst,0);
433 SendMessage(hProjectViewTab,WM_SETFONT,(long)hStatusFont,0);
434
435 hButton=CreateWindow("BUTTON","↓",WS_CHILD|WS_VISIBLE,
436 0,0,30,13,
437 hwnd,(HMENU)IDC_CLIP,hInst,0);
438 SendMessage(hButton,WM_SETFONT,(long)hStatusFont,0);
439
440 OldTabProc=(WNDPROC)GetWindowLongPtr(hProjectViewTab,GWLP_WNDPROC);
441 SetWindowLongPtr(hProjectViewTab,GWLP_WNDPROC,(long)TabProc);
442
443 //タブを設定
444 TC_ITEM tcItem;
445 tcItem.mask=TCIF_TEXT;
446 tcItem.pszText="File";
447 TabCtrl_InsertItem(hProjectViewTab,0,&tcItem);
448 tcItem.mask=TCIF_TEXT;
449 tcItem.pszText="Class";
450 TabCtrl_InsertItem(hProjectViewTab,1,&tcItem);
451 tcItem.mask=TCIF_TEXT;
452 tcItem.pszText="Material";
453 TabCtrl_InsertItem(hProjectViewTab,2,&tcItem);
454
455 //ファイルツリービューを作成
456 pobj_FileTree=new CFileTree(hProjectViewTab);
457
458 //クラスツリービューを作成
459 hProcedureTreeView=CreateWindowEx(WS_EX_CLIENTEDGE,WC_TREEVIEW,"",
460 WS_CHILD|TVS_HASLINES|TVS_HASBUTTONS|TVS_LINESATROOT|TVS_SHOWSELALWAYS,
461 0,0,0,0,
462 hProjectViewTab,0,hInst,0);
463 OldProcedureTreeViewProc=(WNDPROC)GetWindowLongPtr(hProcedureTreeView,GWLP_WNDPROC);
464 SetWindowLongPtr(hProcedureTreeView,GWLP_WNDPROC,(long)ProcedureTreeViewProc);
465 //イメージリスト読み込み、設定
466 hProcedureTreeViewImageList=ImageList_Create(16,16,ILC_COLOR24|ILC_MASK,8,0);
467 ImageList_AddIcon(hProcedureTreeViewImageList,LoadIcon(hResInst,MAKEINTRESOURCE(IDI_FOLDER_CLOSE)));
468 ImageList_AddIcon(hProcedureTreeViewImageList,LoadIcon(hResInst,MAKEINTRESOURCE(IDI_FOLDER_OPEN)));
469 ImageList_AddIcon(hProcedureTreeViewImageList,LoadIcon(hResInst,MAKEINTRESOURCE(IDI_PROCEDURE)));
470 ImageList_AddIcon(hProcedureTreeViewImageList,LoadIcon(hResInst,MAKEINTRESOURCE(IDI_PROGRAM_FOLDER)));
471 ImageList_AddIcon(hProcedureTreeViewImageList,LoadIcon(hResInst,MAKEINTRESOURCE(IDI_MEMBER_PUBLIC_VARIABLE)));
472 ImageList_AddIcon(hProcedureTreeViewImageList,LoadIcon(hResInst,MAKEINTRESOURCE(IDI_MEMBER_PUBLIC_FUNCTION)));
473 ImageList_AddIcon(hProcedureTreeViewImageList,LoadIcon(hResInst,MAKEINTRESOURCE(IDI_MEMBER_PRIVATE_VARIABLE)));
474 ImageList_AddIcon(hProcedureTreeViewImageList,LoadIcon(hResInst,MAKEINTRESOURCE(IDI_MEMBER_PRIVATE_FUNCTION)));
475 TreeView_SetImageList(hProcedureTreeView,hProcedureTreeViewImageList,TVSIL_NORMAL);
476
477 //マテリアルツリービューを作成
478 hMaterialTreeView=CreateWindowEx(WS_EX_CLIENTEDGE,WC_TREEVIEW,"",
479 WS_CHILD|TVS_HASLINES|TVS_HASBUTTONS|TVS_LINESATROOT|TVS_SHOWSELALWAYS,
480 0,0,0,0,
481 hProjectViewTab,0,hInst,0);
482 OldMaterialTreeViewProc=(WNDPROC)GetWindowLongPtr(hMaterialTreeView,GWLP_WNDPROC);
483 SetWindowLongPtr(hMaterialTreeView,GWLP_WNDPROC,(long)MaterialTreeViewProc);
484 //イメージリスト読み込み、設定
485 hMaterialTreeViewImageList=ImageList_Create(16,16,ILC_COLOR24|ILC_MASK,3,0);
486 ImageList_AddIcon(hMaterialTreeViewImageList,LoadIcon(hResInst,MAKEINTRESOURCE(IDI_FOLDER_CLOSE)));
487 ImageList_AddIcon(hMaterialTreeViewImageList,LoadIcon(hResInst,MAKEINTRESOURCE(IDI_FOLDER_OPEN)));
488 ImageList_AddIcon(hMaterialTreeViewImageList,LoadIcon(hResInst,MAKEINTRESOURCE(IDI_WINDOW)));
489 ImageList_AddIcon(hMaterialTreeViewImageList,LoadIcon(hResInst,MAKEINTRESOURCE(IDI_MENU)));
490 ImageList_AddIcon(hMaterialTreeViewImageList,LoadIcon(hResInst,MAKEINTRESOURCE(IDI_FILE_ICON)));
491 ImageList_AddIcon(hMaterialTreeViewImageList,LoadIcon(hResInst,MAKEINTRESOURCE(IDI_FILE_BMP)));
492 ImageList_AddIcon(hMaterialTreeViewImageList,LoadIcon(hResInst,MAKEINTRESOURCE(IDI_FILE_CURSOR)));
493 TreeView_SetImageList(hMaterialTreeView,hMaterialTreeViewImageList,TVSIL_NORMAL);
494
495 ShowWindow(pobj_FileTree->hTree,SW_SHOW);
496 GetClientRect(hwnd,&rect);
497 SendMessage(hwnd,WM_SIZE,0,MAKELONG(rect.right,rect.bottom));
498 return 0;
499 case WM_COMMAND:
500 switch(LOWORD(wParam)){
501 case IDC_CLIP:
502 if(pobj_nv->bClipProjectView==0){
503 pobj_nv->bClipProjectView=1;
504
505 SetWindowLongPtr(hwnd,GWL_EXSTYLE,WS_EX_STATICEDGE);
506 SetParent(hwnd,hOwner);
507 ResizeOwnerWnd();
508
509 ShowWindow(hProjectView_ToolWindow,SW_HIDE);
510 }
511 else{
512 pobj_nv->bClipProjectView=0;
513
514 SetWindowLongPtr(hwnd,GWL_EXSTYLE,0);
515
516 SetParent(hwnd,hProjectView_ToolWindow);
517
518 ResizeOwnerWnd();
519 ResizeProjectView_ToolWindow();
520
521 ShowWindow(hProjectView_ToolWindow,SW_SHOW);
522 }
523 return 0;
524 }
525 break;
526 case WM_NOTIFY:
527 NMHDR *hdr;
528 hdr=(NMHDR *)lParam;
529 if(hdr->hwndFrom==hProjectViewTab&&hdr->code==TCN_SELCHANGE){
530 switch( TabCtrl_GetCurSel(hProjectViewTab) ){
531 case 0:
532 ShowFileView();
533 break;
534 case 1:
535 ShowClassView();
536 break;
537 case 2:
538 ShowMaterialView();
539 break;
540 }
541 }
542 return 0;
543 case WM_PAINT:
544 PAINTSTRUCT ps;
545 HDC hdc;
546 HFONT hOldFont;
547 SIZE size;
548 HBRUSH hBrush,hOldBrush;
549 HPEN hPen,hOldPen;
550 char temporary[MAX_PATH];
551
552 if(pobj_nv->bClipProjectView==0) break;
553
554 hBrush=CreateSolidBrush(GetSysColor(COLOR_3DSHADOW));
555 hPen=CreatePen(PS_SOLID,0,GetSysColor(COLOR_3DSHADOW));
556
557 hdc=BeginPaint(hwnd,&ps);
558
559 hOldFont=(HFONT)SelectObject(hdc,hStatusFont);
560 if( projectInfo.IsOpened() ){
561 sprintf(temporary,"%s \'%s\'",STRING_PROJECT,projectInfo.GetName().c_str());
562 }
563 else{
564 lstrcpy( temporary, "現在のドキュメント" );
565 }
566
567 GetTextExtentPoint32(hdc,temporary,lstrlen(temporary),&size);
568 GetClientRect(hwnd,&rect);
569 rect.left++;
570 rect.top++;
571 rect.right--;
572 rect.bottom=size.cy+2;
573
574 hOldBrush=(HBRUSH)SelectObject(hdc,hBrush);
575 hOldPen=(HPEN)SelectObject(hdc,hPen);
576 Rectangle(hdc,rect.left,rect.top,rect.right,rect.bottom);
577 SelectObject(hdc,hOldBrush);
578 SelectObject(hdc,hPen);
579
580 rect.top++;
581 rect.bottom--;
582 SetBkMode(hdc,OPAQUE);
583 SetBkColor(hdc,GetSysColor(COLOR_3DSHADOW));
584 SetTextColor(hdc,GetSysColor(COLOR_3DHILIGHT));
585 DrawText(hdc,temporary,lstrlen(temporary),&rect,DT_CENTER|DT_VCENTER|DT_SINGLELINE);
586
587 EndPaint(hwnd,&ps);
588
589 DeleteObject(hBrush);
590 DeleteObject(hPen);
591 return 0;
592 case WM_SIZE:
593 if(pobj_nv->bClipProjectView){
594 MoveWindow(hProjectViewTab,
595 LEVER_THICK,
596 LEVER_THICK+11,
597 LOWORD(lParam)-LEVER_THICK*2,
598 HIWORD(lParam)-LEVER_THICK*2-21,1);
599
600 GetClientRect(hProjectViewTab,&rect);
601 TabCtrl_AdjustRect(hProjectViewTab,FALSE,&rect);
602 rect.left-=2;
603 rect.right++;
604 rect.bottom++;
605
606 pobj_FileTree->resize(rect.left,rect.top,rect.right-rect.left,rect.bottom-rect.top);
607 MoveWindow(hProcedureTreeView,
608 rect.left,rect.top,rect.right-rect.left,rect.bottom-rect.top,1);
609 MoveWindow(hMaterialTreeView,
610 rect.left,rect.top,rect.right-rect.left,rect.bottom-rect.top,1);
611
612 GetClientRect(GetDlgItem(hwnd,IDC_CLIP),&rect);
613 MoveWindow(GetDlgItem(hwnd,IDC_CLIP),LOWORD(lParam)-rect.right,HIWORD(lParam)-rect.bottom,rect.right,rect.bottom,1);
614 InvalidateRect(GetDlgItem(hwnd,IDC_CLIP),NULL,0);
615 }
616 else{
617 MoveWindow(hProjectViewTab,0,0,
618 LOWORD(lParam),
619 HIWORD(lParam)-15,1);
620
621 GetClientRect(hProjectViewTab,&rect);
622 TabCtrl_AdjustRect(hProjectViewTab,FALSE,&rect);
623
624 pobj_FileTree->resize(rect.left,rect.top,rect.right-rect.left,rect.bottom-rect.top);
625 MoveWindow(hProcedureTreeView,
626 rect.left,rect.top,rect.right-rect.left,rect.bottom-rect.top,1);
627 MoveWindow(hMaterialTreeView,
628 rect.left,rect.top,rect.right-rect.left,rect.bottom-rect.top,1);
629
630 GetClientRect(GetDlgItem(hwnd,IDC_CLIP),&rect);
631 MoveWindow(GetDlgItem(hwnd,IDC_CLIP),LOWORD(lParam)-rect.right,HIWORD(lParam)-rect.bottom,rect.right,rect.bottom,1);
632 }
633 return 0;
634 case WM_CLOSE:
635 SendMessage(hOwner,WM_COMMAND,IDM_PROJECTVIEW,0);
636 return 0;
637 case WM_DESTROY:
638 delete pobj_FileTree;
639 ImageList_Destroy(hProcedureTreeViewImageList);
640 ImageList_Destroy(hMaterialTreeViewImageList);
641 return 0;
642 }
643 return DefWindowProc(hwnd,message,wParam,lParam);
644}
645
646void Project_File_Insert(char *path){
647 extern HANDLE hHeap;
648 char temporary[MAX_PATH],temp2[MAX_PATH];
649
650 lstrcpy( path, projectInfo.GetWorkDir().GetRelationalPath( path ).c_str() );
651
652 //重複チェック
653 if(projectInfo.pobj_DBFileInfo->dupli_check(path)){
654 //"\"%s\" ファイルは既にプロジェクト内に存在します。"
655 sprintf(temporary,STRING_DUPLICATIONERROR_FILE_IN_PROJECT,path);
656 MessageBox(hOwner,temporary,APPLICATION_NAME,MB_OK|MB_ICONEXCLAMATION);
657 return;
658 }
659
660
661 //////////////////////
662 //ツリービューに追加
663 HTREEITEM hTreeItem;
664 _splitpath(path,0,0,temporary,temp2);
665 lstrcat(temporary,temp2);
666 hTreeItem=pobj_FileTree->insert(temporary);
667
668
669 //projectInfo.ppobj_DBFileInfoオブジェクトに追加
670 projectInfo.pobj_DBFileInfo->add(path,hTreeItem);
671
672
673 projectInfo.modify=1;
674
675 //ファイル操作によるクラスビューの再表示
676 ResetClassTree(-1);
677}
678void Project_File_Delete(HTREEITEM hTreeItem){
679 extern HANDLE hHeap;
680
681 if(projectInfo.pobj_DBFileInfo->IsMainFile(hTreeItem)){
682 //"このファイルはプロジェクトのメイン ファイルです。プロジェクト内から削除することはできません。"
683 MessageBox(hOwner,STRING_ERROR_CANT_MAINFILE,STRING_ERROR,MB_OK|MB_ICONEXCLAMATION);
684 return;
685 }
686
687 //ツリービューから削除
688 TreeView_DeleteItem(pobj_FileTree->hTree,hTreeItem);
689
690 //projectInfo.pobj_DBFileInfoオブジェクトから削除
691 projectInfo.pobj_DBFileInfo->del(hTreeItem);
692
693 projectInfo.modify=1;
694
695 //ファイル操作によるクラスビューの再表示
696 ResetClassTree(-1);
697}
698
699void MakeNewProject(){
700 extern HANDLE hHeap;
701 extern NEWPROJECTINFO NewProjectInfo;
702 int i;
703 char buffer[GENERAL_SIZE],dir[MAX_PATH],temporary[MAX_PATH],*pTemp;
704 HANDLE hFind;
705 WIN32_FIND_DATA wfd;
706
707 //既にプロジェクトが開かれている場合は閉じる
708 if( projectInfo.IsOpened() ){
709 if(!projectInfo.Close()) return;
710 }
711
712 //ワークディレクトリを作成
713 i=lstrlen(pobj_nv->ProjectSaveDir);
714 if(pobj_nv->ProjectSaveDir[i-1]=='\\'&&pobj_nv->ProjectSaveDir[i-2]!=':') pobj_nv->ProjectSaveDir[i-1]=0;
715 sprintf(dir,"%s\\%s\\",pobj_nv->ProjectSaveDir,NewProjectInfo.name);
716 i=0;
717 while(!(dir[i]==':'||(dir[i-1]=='\\'&&dir[i]=='\\'))) i++;
718 if(dir[i]==':') i++;
719 else{
720 i++;
721 while(dir[i]!='\\') i++;
722 }
723 for(i++;;i++){
724 if(dir[i]=='\\'){
725 lstrcpy(temporary,dir);
726 temporary[i]=0;
727 hFind=FindFirstFile(temporary,&wfd);
728 if(hFind==INVALID_HANDLE_VALUE){
729 if(!CreateDirectory(temporary,NULL)){
730 MessageBox(hOwner,"ディレクトリを作成できませんでした",APPLICATION_NAME,MB_OK|MB_ICONEXCLAMATION);
731 return;
732 }
733 }
734 else FindClose(hFind);
735 }
736 if(dir[i]=='\0') break;
737 }
738
739
740 //////////////////////////////////////
741 // プロジェクトファイル(*.pj)を作成
742 //////////////////////////////////////
743
744 // 出力先拡張子
745 const std::string outputFileExt
746 = ( NewProjectInfo.dwTypeID == IDC_DLL ) ? ".dll"
747 : ( NewProjectInfo.dwTypeID == IDC_SLL ) ? ".lib"
748 : ".exe";
749
750 //先頭の注釈
751 lstrcpy(buffer,"\' ActiveBasic Project file.\r\n\r\n");
752 i=lstrlen(buffer);
753
754 //プロジェクトのフォーマットバージョン
755 sprintf(buffer+i,"#VERSION=%d\r\n\r\n",PROJECT_VERSION);
756 i+=lstrlen(buffer+i);
757
758 //モジュールタイプ(EXEならば0、DLLならば1)
759 ActiveBasic::Common::TargetModuleType::EnumType moduleType
760 = ( NewProjectInfo.dwTypeID == IDC_DLL ) ? ActiveBasic::Common::TargetModuleType::Dll
761 : ( NewProjectInfo.dwTypeID == IDC_SLL ) ? ActiveBasic::Common::TargetModuleType::Sll
762 : ActiveBasic::Common::TargetModuleType::Exe;
763 lstrcpy(buffer+i,( (std::string)"#MODULETYPE=" + Jenga::Common::ToString( static_cast<int>(moduleType) ) + "\r\n\r\n" ).c_str());
764 i+=lstrlen(buffer+i);
765
766 //プロジェクト名
767 sprintf(buffer+i,"#NAME=%s\r\n\r\n",NewProjectInfo.name);
768 i+=lstrlen(buffer+i);
769
770 lstrcpy(buffer+i,"#PLATFORM=32\r\n\r\n");
771 i+=lstrlen(buffer+i);
772
773 //RADウィンドウの数
774 if(NewProjectInfo.dwTypeID==IDC_EXE_WINDOWBASE||
775 NewProjectInfo.dwTypeID==IDC_EXE_DIRECTX)
776 lstrcpy(buffer+i,"#USEWINDOW=1\r\n\r\n");
777 else lstrcpy(buffer+i,"#USEWINDOW=0\r\n\r\n");
778 i+=lstrlen(buffer+i);
779
780 //プロジェクトオプション
781 sprintf(buffer+i,"#OPTION=&H%08x\r\n\r\n",NewProjectInfo.dwOption);
782 i+=lstrlen(buffer+i);
783
784 //出力先(Release)
785 sprintf(buffer+i,"#OUTPUT_RELEASE=.\\%s%s\r\n\r\n",NewProjectInfo.name, outputFileExt.c_str());
786 i+=lstrlen(buffer+i);
787
788 //出力先(Debug)
789 sprintf(buffer+i,"#OUTPUT_DEBUG=.\\%s_debug%s\r\n\r\n",NewProjectInfo.name, outputFileExt.c_str());
790 i+=lstrlen(buffer+i);
791
792 //マニフェスト
793 sprintf(buffer+i,"#MANIFEST=%s.manifest.xml\r\n\r\n",NewProjectInfo.name);
794 i+=lstrlen(buffer+i);
795
796 //デバッグ用(コマンドライン)
797 lstrcpy(buffer+i,"#DEBUG_CMD_LINE=\r\n\r\n");
798 i+=lstrlen(buffer+i);
799
800 //デバッグ用(DLL用の実行ファイル)
801 lstrcpy(buffer+i,"#DEBUG_EXE_PATH=\r\n\r\n");
802 i+=lstrlen(buffer+i);
803
804 //リソースファイル
805 lstrcpy(buffer+i,"#RESOURCE=0\r\n\r\n");
806 i+=lstrlen(buffer+i);
807
808 //ソースファイル
809 sprintf(buffer+i,"#SOURCE\r\n%s.ab\r\n",NewProjectInfo.name);
810 i+=lstrlen(buffer+i);
811 if(NewProjectInfo.dwTypeID==IDC_EXE_WINDOWBASE||
812 NewProjectInfo.dwTypeID==IDC_EXE_DIRECTX){
813 lstrcpy(buffer+i,"MainWnd.ab\r\n");
814 i+=lstrlen(buffer+i);
815 }
816 if(NewProjectInfo.dwTypeID==IDC_EXE_DIRECTX){
817 lstrcpy(buffer+i,"dx_graphics.sbp\r\n");
818 i+=lstrlen(buffer+i);
819 lstrcpy(buffer+i,"dx_input.sbp\r\n");
820 i+=lstrlen(buffer+i);
821 lstrcpy(buffer+i,"dx_music.sbp\r\n");
822 i+=lstrlen(buffer+i);
823 }
824
825 //保存
826 sprintf(temporary,"%s%s.pj",dir,NewProjectInfo.name);
827 if(hFind=FindFirstFile(temporary,&wfd)){
828 if(hFind!=INVALID_HANDLE_VALUE){
829 FindClose(hFind);
830
831 //"指定したディレクトリにはすでにプロジェクトが存在します。上書きしますか?"
832 if(MessageBox(hOwner,STRING_ERROR_PROJECT_OVERWRITE,APPLICATION_NAME,MB_YESNO|MB_ICONEXCLAMATION)==IDNO) return;
833 }
834 }
835 if(!WriteBuffer(temporary,buffer,i)) return;
836
837
838 ///////////////////////////////////////////
839 //メインプログラムファイル(*.ab)を作成
840 if(NewProjectInfo.dwTypeID==IDC_EXE_WINDOWBASE){
841 sprintf(buffer,"#include \"%s.idx\"\r\n\r\n",NewProjectInfo.name);
842 i=lstrlen(buffer);
843 lstrcpy(buffer+i,"'---------------------------\r\n");
844 i+=lstrlen(buffer+i);
845 lstrcpy(buffer+i,"' Window Message Loop\r\n");
846 i+=lstrlen(buffer+i);
847 lstrcpy(buffer+i,"'---------------------------\r\n");
848 i+=lstrlen(buffer+i);
849 lstrcpy(buffer+i,"Dim msgMain As MSG, iResult As Long\r\n");
850 i+=lstrlen(buffer+i);
851 lstrcpy(buffer+i,"Do\r\n");
852 i+=lstrlen(buffer+i);
853 lstrcpy(buffer+i,"\tiResult=GetMessage(msgMain,0,0,0)\r\n");
854 i+=lstrlen(buffer+i);
855 lstrcpy(buffer+i,"\tIf iResult=0 or iResult=-1 Then Exit Do\r\n");
856 i+=lstrlen(buffer+i);
857 lstrcpy(buffer+i,"\tTranslateMessage(msgMain)\r\n");
858 i+=lstrlen(buffer+i);
859 lstrcpy(buffer+i,"\tDispatchMessage(msgMain)\r\n");
860 i+=lstrlen(buffer+i);
861 lstrcpy(buffer+i,"Loop\r\n\r\n");
862 i+=lstrlen(buffer+i);
863 lstrcpy(buffer+i,"' Call destructores and exit process\r\n");
864 i+=lstrlen(buffer+i);
865 lstrcpy(buffer+i,"End\r\n");
866 i+=lstrlen(buffer+i);
867 }
868 else if(NewProjectInfo.dwTypeID==IDC_EXE_PROMPTBASE){
869 sprintf(buffer,"#include \"%s.idx\"\r\n\r\n",NewProjectInfo.name);
870 i=lstrlen(buffer);
871 lstrcpy(buffer+i,"#N88BASIC\r\n\r\n");
872 i+=lstrlen(buffer+i);
873 lstrcpy(buffer+i,"' ↓ ここからプログラムが実行されます\r\n\r\n");
874 i+=lstrlen(buffer+i);
875 if(NewProjectInfo.ShowHelloWorld){
876 lstrcpy(buffer+i,"Print \"Hello World!\"\r\n");
877 i+=lstrlen(buffer+i);
878 }
879 }
880 else if(NewProjectInfo.dwTypeID==IDC_EXE_DOSPROMPTBASE){
881 sprintf(buffer,"#include \"%s.idx\"\r\n\r\n",NewProjectInfo.name);
882 i=lstrlen(buffer);
883 lstrcpy(buffer+i,"#console\r\n\r\n");
884 i+=lstrlen(buffer+i);
885 lstrcpy(buffer+i,"' ↓ ここからプログラムが実行されます\r\n\r\n");
886 i+=lstrlen(buffer+i);
887 if(NewProjectInfo.ShowHelloWorld){
888 lstrcpy(buffer+i,"Print \"Hello World!\"\r\n");
889 i+=lstrlen(buffer+i);
890 }
891 }
892 else if(NewProjectInfo.dwTypeID==IDC_EXE_NOBASE){
893 sprintf(buffer,"#include \"%s.idx\"\r\n\r\n",NewProjectInfo.name);
894 i=lstrlen(buffer);
895 lstrcpy(buffer+i,"' ↓ ここからプログラムが実行されます\r\n\r\n");
896 i+=lstrlen(buffer+i);
897 }
898 else if(NewProjectInfo.dwTypeID==IDC_EXE_DIRECTX){
899 const std::string mainExeDirectXAbpPath = ActiveBasic::Common::Environment::GetAbdevSystemDirPath() + "\\dx\\main_exe_directx.abp";
900 pTemp = ReadBuffer( mainExeDirectXAbpPath );
901
902 //#name#をプロジェクト名に置換
903 pTemp=PermutationWndPgmTemplate(pTemp,NewProjectInfo.name,0,0,0);
904 }
905 else if(NewProjectInfo.dwTypeID==IDC_DLL){
906 sprintf(buffer,"#include \"%s.idx\"\r\n\r\n",NewProjectInfo.name);
907 i=lstrlen(buffer);
908 lstrcpy(buffer+i,"'-------------------------------------------------------------------\r\n");
909 i+=lstrlen(buffer+i);
910 lstrcpy(buffer+i,"' メモ - このファイルには、DLLの構成要素を記述します。\r\n");
911 i+=lstrlen(buffer+i);
912 lstrcpy(buffer+i,"' (例:関数定義、グローバル変数、定数定義など)\r\n");
913 i+=lstrlen(buffer+i);
914 lstrcpy(buffer+i,"'\r\n");
915 i+=lstrlen(buffer+i);
916 lstrcpy(buffer+i,"' エクスポートが必要な関数には、\"Export\" 修飾子を指定します。\r\n");
917 i+=lstrlen(buffer+i);
918 lstrcpy(buffer+i,"' (例:Function Export FuncName() As Long)\r\n");
919 i+=lstrlen(buffer+i);
920 lstrcpy(buffer+i,"'-------------------------------------------------------------------\r\n");
921 i+=lstrlen(buffer+i);
922 lstrcpy(buffer+i,"\r\n");
923 i+=lstrlen(buffer+i);
924 lstrcpy(buffer+i,"Function Export DllMain(hinstDLL As HINSTANCE, fdwReason As DWord, lpvReserved As VoidPtr) As Long\r\n");
925 i+=lstrlen(buffer+i);
926 lstrcpy(buffer+i,"\t'DLLエントリポイント\r\n");
927 i+=lstrlen(buffer+i);
928 lstrcpy(buffer+i,"\tSelect Case fdwReason\r\n");
929 i+=lstrlen(buffer+i);
930 lstrcpy(buffer+i,"\t\tCase DLL_PROCESS_ATTACH\r\n");
931 i+=lstrlen(buffer+i);
932 lstrcpy(buffer+i,"\t\t\t'DLLがプロセス空間にロードされた時に実行されます。\r\n");
933 i+=lstrlen(buffer+i);
934 lstrcpy(buffer+i,"\t\t\t_System_StartupProgram()\r\n");
935 i+=lstrlen(buffer+i);
936 lstrcpy(buffer+i,"\t\t\tDllMain=1\r\n");
937 i+=lstrlen(buffer+i);
938 lstrcpy(buffer+i,"\t\tCase DLL_PROCESS_DETACH\r\n");
939 i+=lstrlen(buffer+i);
940 lstrcpy(buffer+i,"\t\t\t_System_Call_Destructor_of_GlobalObject()\r\n");
941 i+=lstrlen(buffer+i);
942 lstrcpy(buffer+i,"\tEnd Select\r\n");
943 i+=lstrlen(buffer+i);
944 lstrcpy(buffer+i,"End Function\r\n");
945 i+=lstrlen(buffer+i);
946 lstrcpy(buffer+i,"\r\n");
947 i+=lstrlen(buffer+i);
948 }
949 else if( NewProjectInfo.dwTypeID == IDC_SLL )
950 {
951 buffer[0] = 0;
952 }
953
954 //保存
955 if(NewProjectInfo.dwTypeID==IDC_EXE_DIRECTX){
956 sprintf(temporary,"%s%s.ab",dir,NewProjectInfo.name);
957 WriteBuffer(temporary,pTemp,lstrlen(pTemp));
958
959 HeapDefaultFree(pTemp);
960 }
961 else{
962 sprintf(temporary,"%s%s.ab",dir,NewProjectInfo.name);
963 if(!WriteBuffer(temporary,buffer,lstrlen(buffer))) return;
964 }
965
966
967 /////////////////////
968 // MainWnd.abを作成
969 /////////////////////
970
971 std::string mainWndSbpPath = "";
972 if(NewProjectInfo.dwTypeID==IDC_EXE_WINDOWBASE)
973 {
974 mainWndSbpPath = ActiveBasic::Common::Environment::GetAbdevSystemDirPath() + "\\MainWnd_exe_windowbase.sbp";
975 }
976 else if(NewProjectInfo.dwTypeID==IDC_EXE_DIRECTX)
977 {
978 mainWndSbpPath = ActiveBasic::Common::Environment::GetAbdevSystemDirPath() + "\\MainWnd_exe_directx.sbp";
979 }
980
981 if( !mainWndSbpPath.empty() ){
982 pTemp = ReadBuffer( mainWndSbpPath );
983
984 //#name#をプロジェクト名に置換
985 pTemp=PermutationWndPgmTemplate(pTemp,
986 NewProjectInfo.name,
987 "MainWnd",
988 "hMainWnd",
989 "MainWndProc");
990
991 if(NewProjectInfo.ShowHelloWorld){
992 //Hello World!表示
993 i=0;
994 lstrcpy(buffer+i,"\r\nSub MainWnd_Paint(hDC As HDC)\r\n");
995 i+=lstrlen(buffer+i);
996 lstrcpy(buffer+i,"\tDim rect As RECT\r\n");
997 i+=lstrlen(buffer+i);
998 lstrcpy(buffer+i,"\tGetClientRect(hMainWnd,rect)\r\n");
999 i+=lstrlen(buffer+i);
1000 lstrcpy(buffer+i,"\tDrawText(hDC,\"Hello World!\",-1,rect,DT_CENTER or DT_VCENTER or DT_SINGLELINE)\r\n");
1001 i+=lstrlen(buffer+i);
1002 lstrcpy(buffer+i,"End Sub\r\n");
1003 i+=lstrlen(buffer+i);
1004
1005 pTemp=(char *)HeapReAlloc(hHeap,0,pTemp,lstrlen(pTemp)+lstrlen(buffer)+1);
1006 lstrcat(pTemp,buffer);
1007 }
1008
1009 sprintf(temporary,"%sMainWnd.ab",dir,NewProjectInfo.name);
1010 WriteBuffer(temporary,pTemp,lstrlen(pTemp));
1011
1012 HeapDefaultFree(pTemp);
1013 }
1014
1015
1016 if(NewProjectInfo.dwTypeID==IDC_EXE_DIRECTX){
1017 ///////////////////////////
1018 // DirextX対応アプリのとき
1019 ///////////////////////////
1020
1021 //dx_graphics.sbpをコピー
1022 const std::string dxGraphicsSbpPath = ActiveBasic::Common::Environment::GetAbdevSystemDirPath() + "\\dx\\dx_graphics.sbp";
1023 pTemp = ReadBuffer( dxGraphicsSbpPath );
1024 sprintf(temporary,"%sdx_graphics.sbp",dir,NewProjectInfo.name);
1025 WriteBuffer(temporary,pTemp,lstrlen(pTemp));
1026 HeapDefaultFree(pTemp);
1027
1028 //dx_input.sbpをコピー
1029 const std::string dxInputSbpPath = ActiveBasic::Common::Environment::GetAbdevSystemDirPath() + "\\dx\\dx_input.sbp";
1030 pTemp = ReadBuffer( dxInputSbpPath );
1031 sprintf(temporary,"%sdx_input.sbp",dir,NewProjectInfo.name);
1032 WriteBuffer(temporary,pTemp,lstrlen(pTemp));
1033 HeapDefaultFree(pTemp);
1034
1035 //dx_music.sbpをコピー
1036 const std::string dxMusicSbpPath = ActiveBasic::Common::Environment::GetAbdevSystemDirPath() + "\\dx\\dx_music.sbp";
1037 pTemp = ReadBuffer( dxMusicSbpPath );
1038 sprintf(temporary,"%sdx_music.sbp",dir,NewProjectInfo.name);
1039 WriteBuffer(temporary,pTemp,lstrlen(pTemp));
1040 HeapDefaultFree(pTemp);
1041
1042 //dx9abm.dllをコピー
1043 sprintf(temporary,"%sRuntime\\dx9abm.dll",pj_editor_Dir);
1044 sprintf(buffer,"%sdx9abm.dll",dir,NewProjectInfo.name);
1045 CopyFile(temporary,buffer,0);
1046 }
1047
1048
1049 if(NewProjectInfo.dwTypeID==IDC_EXE_WINDOWBASE||
1050 NewProjectInfo.dwTypeID==IDC_EXE_DIRECTX){
1051 /////////////////////////////////////////
1052 // ウィンドウ定義ファイル(*.wnd)を作成
1053 /////////////////////////////////////////
1054 WindowInfos windowInfos;
1055 windowInfos.push_back( new WindowInfo() );
1056 windowInfos.back()->SetName( "MainWnd" );
1057 windowInfos.back()->SetHandleName( "hMainWnd" );
1058 windowInfos.back()->pos.x=CW_USEDEFAULT;
1059 windowInfos.back()->pos.y=CW_USEDEFAULT;
1060 windowInfos.back()->size.cx=480;
1061 windowInfos.back()->size.cy=360;
1062 windowInfos.back()->caption=NewProjectInfo.name;
1063 if(NewProjectInfo.dwTypeID==IDC_EXE_WINDOWBASE)
1064 windowInfos.back()->style=WS_OVERLAPPED|WS_CAPTION|WS_SYSMENU|WS_THICKFRAME|WS_MINIMIZEBOX|WS_MAXIMIZEBOX|WS_VISIBLE;
1065 else if(NewProjectInfo.dwTypeID==IDC_EXE_DIRECTX)
1066 windowInfos.back()->style=WS_OVERLAPPED|WS_THICKFRAME|WS_SYSMENU;
1067 windowInfos.back()->ExStyle=0;
1068 windowInfos.back()->MenuID=0;
1069 windowInfos.back()->id=0;
1070 windowInfos.back()->bgColor=COLOR_3DFACE;
1071 GetDefaultWindowFont(&windowInfos.back()->LogFont);
1072 windowInfos.back()->IconResName=0;
1073 windowInfos.back()->ClassName="NORMAL";
1074 windowInfos.back()->CallBackName="MainWndProc";
1075 windowInfos.back()->type=WNDTYPE_DEFAULT;
1076 windowInfos.back()->filepath="MainWnd.ab";
1077 sprintf(temporary,"%s%s.wnd",dir,NewProjectInfo.name);
1078
1079 projectInfo.NumberOfMenu=0;
1080 SaveWindowFile( temporary, windowInfos );
1081
1082 windowInfos.Clear();
1083 }
1084
1085
1086 ////////////////////////
1087 // ワークファイルを作成
1088 ////////////////////////
1089 lstrcpy(buffer,"case4\r\n\r\n");
1090 if(NewProjectInfo.dwTypeID==IDC_EXE_WINDOWBASE){
1091 lstrcat(buffer,"rad,MainWnd\r\n\r\n");
1092 }
1093 else{
1094 sprintf(buffer+lstrlen(buffer),"text,\"%s.ab\",0,0,0,0\r\n\r\n",NewProjectInfo.name);
1095 }
1096 lstrcat(buffer,"0\r\n0\r\n0\r\n0,0");
1097 //保存
1098 sprintf(temporary,"%s%s.wrk",dir,NewProjectInfo.name);
1099 if(!WriteBuffer(temporary,buffer,lstrlen(buffer))) return;
1100
1101
1102 //マニフェストを作成
1103 char temp2[MAX_PATH];
1104 const std::string manifestTempXmlPath = ActiveBasic::Common::Environment::GetAbdevSystemDirPath() + "\\manifest_temp.xml";
1105 sprintf(temp2,"%s%s.manifest.xml",dir,NewProjectInfo.name);
1106 CopyFile( manifestTempXmlPath.c_str(), temp2, 0 );
1107
1108
1109 sprintf(temporary,"%s%s.pj",dir,NewProjectInfo.name);
1110 projectInfo.Load(temporary);
1111 projectInfo.Save();
1112}
1113void SetTreeViewForProjectInfo(){
1114 extern HANDLE hHeap;
1115 extern HWND hProjectView;
1116 int i;
1117 char temporary[MAX_PATH];
1118 TV_INSERTSTRUCT tv;
1119
1120 sprintf(temporary,"%s ",projectInfo.GetName().c_str());
1121 lstrcat(temporary,STRING_PROJECT);
1122 SetWindowText(hProjectView,temporary);
1123
1124 tv.hInsertAfter=TVI_SORT;
1125 tv.item.mask=TVIF_TEXT|TVIF_IMAGE|TVIF_SELECTEDIMAGE;
1126
1127 //ファイル ツリー
1128 projectInfo.pobj_DBFileInfo->ResetTree();
1129
1130 //関数ツリー
1131 ResetClassTree(-1);
1132
1133 /////////////////////
1134 // マテリアル ツリー
1135
1136 //Cursorリソース フォルダ
1137 sprintf(temporary,"Cursor %s",STRING_RESOURCE);
1138 tv.hParent=TVI_ROOT;
1139 tv.item.iImage=0;
1140 tv.item.iSelectedImage=0;
1141 tv.item.pszText=temporary;
1142 tv.hParent=TreeView_InsertItem(hMaterialTreeView,&tv);
1143 hCursorTreeItemForProjectView = tv.hParent;
1144 for(i=0;i<projectInfo.resourceManager.cursorResources.size();i++){
1145 tv.item.iImage=6;
1146 tv.item.iSelectedImage=6;
1147 lstrcpy( temporary, projectInfo.resourceManager.cursorResources[i].idName.c_str() );
1148 tv.item.pszText=temporary;
1149 projectInfo.resourceManager.cursorResources[i].hTreeItem=TreeView_InsertItem(hMaterialTreeView,&tv);
1150 }
1151
1152 //Bitmapリソース フォルダ
1153 sprintf(temporary,"Bitmap %s",STRING_RESOURCE);
1154 tv.hParent=TVI_ROOT;
1155 tv.item.iImage=0;
1156 tv.item.iSelectedImage=0;
1157 tv.item.pszText=temporary;
1158 tv.hParent=TreeView_InsertItem(hMaterialTreeView,&tv);
1159 hBitmapTreeItemForProjectView = tv.hParent;
1160 for(i=0;i<projectInfo.resourceManager.bitmapResources.size();i++){
1161 tv.item.iImage=5;
1162 tv.item.iSelectedImage=5;
1163 lstrcpy( temporary, projectInfo.resourceManager.bitmapResources[i].idName.c_str() );
1164 tv.item.pszText=temporary;
1165 projectInfo.resourceManager.bitmapResources[i].hTreeItem=TreeView_InsertItem(hMaterialTreeView,&tv);
1166 }
1167
1168 //Iconリソース フォルダ
1169 sprintf(temporary,"Icon %s",STRING_RESOURCE);
1170 tv.hParent=TVI_ROOT;
1171 tv.item.iImage=0;
1172 tv.item.iSelectedImage=0;
1173 tv.item.pszText=temporary;
1174 tv.hParent=TreeView_InsertItem(hMaterialTreeView,&tv);
1175 hIconTreeItemForProjectView = tv.hParent;
1176 for(i=0;i<projectInfo.resourceManager.iconResources.size();i++){
1177 tv.item.iImage=4;
1178 tv.item.iSelectedImage=4;
1179 if(i==0){
1180 sprintf(temporary,"%s (Main)",projectInfo.resourceManager.iconResources[i].idName.c_str());
1181 }
1182 else
1183 {
1184 sprintf(temporary,"%s",projectInfo.resourceManager.iconResources[i].idName.c_str());
1185 }
1186 tv.item.pszText=temporary;
1187 projectInfo.resourceManager.iconResources[i].hTreeItem=TreeView_InsertItem(hMaterialTreeView,&tv);
1188 }
1189
1190 //Menuフォルダ
1191 tv.hParent=TVI_ROOT;
1192 tv.item.iImage=0;
1193 tv.item.iSelectedImage=0;
1194 tv.item.pszText="Menu";
1195 tv.hParent=TreeView_InsertItem(hMaterialTreeView,&tv);
1196 projectInfo.hMenuTreeItem=tv.hParent;
1197 for(i=0;i<projectInfo.NumberOfMenu;i++){
1198 tv.item.iImage=3;
1199 tv.item.iSelectedImage=3;
1200 tv.item.pszText=projectInfo.pMenuInfo[i].IdName;
1201 projectInfo.pMenuInfo[i].hTreeItem=TreeView_InsertItem(hMaterialTreeView,&tv);
1202 }
1203
1204 //Windowフォルダ
1205 tv.hParent=TVI_ROOT;
1206 tv.item.iImage=0;
1207 tv.item.iSelectedImage=0;
1208 tv.item.pszText="Window";
1209 tv.hParent=TreeView_InsertItem(hMaterialTreeView,&tv);
1210 projectInfo.hWindowTreeItem=tv.hParent;
1211 BOOST_FOREACH( WindowInfo *pWindowInfo, projectInfo.windowInfos )
1212 {
1213 tv.item.iImage=2;
1214 tv.item.iSelectedImage=2;
1215 char temporary[1024];
1216 lstrcpy( temporary, pWindowInfo->GetName().c_str() );
1217 tv.item.pszText = temporary;
1218 pWindowInfo->hTreeItem=TreeView_InsertItem(hMaterialTreeView,&tv);
1219 }
1220}
1221void OpenWorkfile( const std::string &path )
1222{
1223 extern HANDLE hHeap;
1224 int i,i2,i3;
1225 char *buffer,temporary[MAX_PATH],temp2[MAX_PATH];
1226
1227 //プロジェクト ビューを設定、表示
1228 extern HWND hProjectView;
1229 SetTreeViewForProjectInfo();
1230 if(!IsWindowVisible(hProjectView)) SendMessage(hOwner,WM_COMMAND,IDM_PROJECTVIEW,0);
1231
1232
1233 //メニュー状態を設定
1234 ResetState_DocMenu();
1235
1236
1237 //////////////////////////////////////////
1238 //ワークファイル(*.wrk)をオープン
1239 extern MDIINFO MdiInfo[MAX_WNDNUM];
1240 HTREEITEM hTreeItem;
1241 HANDLE hFind;
1242 WIN32_FIND_DATA wfd;
1243 HWND hChild;
1244 int WndNum;
1245 hFind=FindFirstFile(path.c_str(),&wfd);
1246 if(hFind!=INVALID_HANDLE_VALUE){
1247 FindClose(hFind);
1248 buffer=ReadBuffer(path);
1249 if(!buffer) return;
1250
1251 //解析、反映
1252 memcpy(temporary,buffer,5);
1253 temporary[5]=0;
1254 if(lstrcmp(temporary,"case4")==0){
1255
1256 LockWindowUpdate(hOwner);
1257 for(i=9,i2=0;;i++,i2++){
1258 if((buffer[i]=='\r'&&buffer[i+1]=='\n')||buffer[i]=='\0'){
1259 if(i2!=0){
1260 temporary[i2]=0;
1261 for(i3=0;;i3++){
1262 if(temporary[i3]==','||temporary[i3]=='\0') break;
1263 }
1264 if(temporary[i3]=='\0') goto EndToSetWorkFile;
1265 lstrcpy(temp2,temporary+i3+1);
1266 temporary[i3]=0;
1267 if(lstrcmpi(temporary,"text")==0){
1268 if(temp2[0]!='\"') goto EndToSetWorkFile;
1269
1270 //ファイルを開く
1271 i2=1;
1272 for(i3=0;;i2++,i3++){
1273 if(temp2[i2]=='\"'||temp2[i2]=='\0'){
1274 temporary[i3]=0;
1275 break;
1276 }
1277 temporary[i3]=temp2[i2];
1278 }
1279 lstrcpy( temporary, projectInfo.GetWorkDir().GetFullPath( temporary ).c_str() );
1280 hChild=OpenFileWithExtension(temporary);
1281 WndNum=GetWndNum(hChild);
1282 if(WndNum==-1){
1283 goto EndToSetWorkFile;
1284 }
1285
1286 //ResetScrollbarが再描画時に呼び出されるので、再描画する
1287 InvalidateRect(MdiInfo[WndNum].pMdiTextEdit->hEdit,NULL,0);
1288 UpdateWindow(MdiInfo[WndNum].pMdiTextEdit->hEdit);
1289
1290 if(temp2[i2]=='\0') goto EndToSetWorkFile;
1291 if(temp2[i2+1]!=',') goto EndToSetWorkFile;
1292
1293 //以前のスクロール位置を復元
1294 SCROLLINFO si;
1295 POINT pos;
1296 for(i2+=2,i3=0;;i2++,i3++){
1297 if(temp2[i2]==','||temp2[i2]=='\0'){
1298 temporary[i3]=0;
1299 break;
1300 }
1301 temporary[i3]=temp2[i2];
1302 }
1303 sscanf(temporary,"%d",&pos.x);
1304 if(temp2[i2]=='\0') goto EndToSetWorkFile;
1305 for(i2++,i3=0;;i2++,i3++){
1306 if(temp2[i2]==','||temp2[i2]=='\0'){
1307 temporary[i3]=0;
1308 break;
1309 }
1310 temporary[i3]=temp2[i2];
1311 }
1312 sscanf(temporary,"%d",&pos.y);
1313 si.cbSize=sizeof(SCROLLINFO);
1314 si.fMask=SIF_POS;
1315 si.nPos=pos.x;
1316 SetScrollInfo(MdiInfo[WndNum].pMdiTextEdit->hEdit,SB_HORZ,&si,1);
1317 si.nPos=pos.y;
1318 SetScrollInfo(MdiInfo[WndNum].pMdiTextEdit->hEdit,SB_VERT,&si,1);
1319
1320 if(temp2[i2]=='\0') goto EndToSetWorkFile;
1321
1322 //キャレット位置をセット
1323 for(i2++,i3=0;;i2++,i3++){
1324 if(temp2[i2]==','||temp2[i2]=='\0'){
1325 temporary[i3]=0;
1326 break;
1327 }
1328 temporary[i3]=temp2[i2];
1329 }
1330 sscanf(temporary,"%d",&pos.x);
1331 if(temp2[i2]=='\0') goto EndToSetWorkFile;
1332 for(i2++,i3=0;;i2++,i3++){
1333 if(temp2[i2]==','||temp2[i2]=='\0'){
1334 temporary[i3]=0;
1335 break;
1336 }
1337 temporary[i3]=temp2[i2];
1338 }
1339 sscanf(temporary,"%d",&pos.y);
1340 TextEdit_SetSel(WndNum,pos.x,pos.y);
1341 }
1342 else if(lstrcmpi(temporary,"rad")==0){
1343 for(i3=0;i3<static_cast<int>(projectInfo.windowInfos.size());i3++){
1344 if(lstrcmpi(projectInfo.windowInfos[i3]->GetName().c_str(),temp2)==0){
1345 NewRadWindow( *projectInfo.windowInfos[i3] );
1346 break;
1347 }
1348 }
1349 }
1350 else if(lstrcmpi(temporary,"menu")==0){
1351 for(i3=0;i3<projectInfo.NumberOfMenu;i3++){
1352 if(lstrcmpi(projectInfo.pMenuInfo[i3].IdName,temp2)==0){
1353 NewMenuWindow(&projectInfo.pMenuInfo[i3]);
1354 break;
1355 }
1356 }
1357 }
1358 else if(lstrcmpi(temporary,"icon")==0){
1359 for(i3=0;i3<projectInfo.resourceManager.iconResources.size();i3++){
1360 if(lstrcmpi(projectInfo.resourceManager.iconResources[i3].filepath.c_str(),temp2)==0){
1361 NewIconEditWindow( projectInfo.GetWorkDir().GetFullPath( temp2 ).c_str() );
1362 break;
1363 }
1364 }
1365 }
1366 i++;
1367 i2=-1;
1368 continue;
1369 }
1370 else break;
1371 }
1372 temporary[i2]=buffer[i];
1373 }
1374
1375 for(i+=2,i2=0;;i++,i2++){
1376 if((buffer[i]=='\r'&&buffer[i+1]=='\n')||buffer[i]=='\0'){
1377 temporary[i2]=0;
1378 break;
1379 }
1380 temporary[i2]=buffer[i];
1381 }
1382 sscanf(temporary,"%d",&i2);
1383
1384 switch( i2 ){
1385 case 0:
1386 ShowFileView();
1387 break;
1388 case 1:
1389 ShowClassView();
1390 break;
1391 case 2:
1392 ShowMaterialView();
1393 break;
1394 }
1395
1396 if(buffer[i]=='\0') goto EndToSetWorkFile;
1397
1398 for(i+=2,i2=0;;i++,i2++){
1399 if((buffer[i]=='\r'&&buffer[i+1]=='\n')||buffer[i]=='\0'){
1400 temporary[i2]=0;
1401 break;
1402 }
1403 temporary[i2]=buffer[i];
1404 }
1405 if(temporary[0]=='1') TreeView_Expand(pobj_FileTree->hTree,TreeView_GetRoot(pobj_FileTree->hTree),TVE_EXPAND);
1406
1407 for(i+=2,i2=0;;i++,i2++){
1408 if((buffer[i]=='\r'&&buffer[i+1]=='\n')||buffer[i]=='\0'){
1409 temporary[i2]=0;
1410 break;
1411 }
1412 temporary[i2]=buffer[i];
1413 }
1414 if(temporary[0]=='1') TreeView_Expand(hProcedureTreeView,TreeView_GetRoot(hProcedureTreeView),TVE_EXPAND);
1415
1416 for(i+=2,i2=0;;i++,i2++){
1417 if((buffer[i]=='\r'&&buffer[i+1]=='\n')||buffer[i]=='\0'){
1418 temporary[i2]=0;
1419 break;
1420 }
1421 temporary[i2]=buffer[i];
1422 }
1423 hTreeItem=TreeView_GetRoot(hMaterialTreeView);
1424 i2=0;
1425 while(hTreeItem){
1426 i2=GetOneParameter(temporary,i2,temp2);
1427 if(GetValue(temp2)) TreeView_Expand(hMaterialTreeView,hTreeItem,TVE_EXPAND);
1428 hTreeItem=TreeView_GetNextSibling(hMaterialTreeView,hTreeItem);
1429 }
1430 }
1431 else if(lstrcmp(temporary,"case3")==0){
1432 ////////////////////////////////////////
1433 // 古いフォーマットのワークファイル
1434
1435 LockWindowUpdate(hOwner);
1436 for(i=9,i2=0;;i++,i2++){
1437 if((buffer[i]=='\r'&&buffer[i+1]=='\n')||buffer[i]=='\0'){
1438 if(i2!=0){
1439 temporary[i2]=0;
1440 for(i3=0;;i3++){
1441 if(temporary[i3]==','||temporary[i3]=='\0') break;
1442 }
1443 if(temporary[i3]=='\0') goto EndToSetWorkFile;
1444 lstrcpy(temp2,temporary+i3+1);
1445 temporary[i3]=0;
1446 if(lstrcmpi(temporary,"text")==0){
1447 for(i3=0;;i3++){
1448 if(temp2[i3]==','||temp2[i3]=='\0') break;
1449 }
1450 if(temp2[i3]=='\0') goto EndToSetWorkFile;
1451 lstrcpy(temporary,temp2+i3+1);
1452 temp2[i3]=0;
1453 lstrcpy( temporary, projectInfo.GetWorkDir().GetFullPath( temporary ).c_str() );
1454 sscanf(temp2,"%d",&i3);
1455
1456 //ファイルを開く
1457 hChild=OpenFileWithExtension(temporary);
1458 WndNum=GetWndNum(hChild);
1459
1460 //キャレット位置をセット
1461 TextEdit_SetSel(WndNum,i3,i3);
1462 }
1463 else if(lstrcmpi(temporary,"rad")==0){
1464 for(i3=0;i3<static_cast<int>(projectInfo.windowInfos.size());i3++){
1465 if(lstrcmpi(projectInfo.windowInfos[i3]->GetName().c_str(),temp2)==0){
1466 NewRadWindow( *projectInfo.windowInfos[i3] );
1467 break;
1468 }
1469 }
1470 }
1471 else if(lstrcmpi(temporary,"menu")==0){
1472 for(i3=0;i3<projectInfo.NumberOfMenu;i3++){
1473 if(lstrcmpi(projectInfo.pMenuInfo[i3].IdName,temp2)==0){
1474 NewMenuWindow(&projectInfo.pMenuInfo[i3]);
1475 break;
1476 }
1477 }
1478 }
1479 else if(lstrcmpi(temporary,"icon")==0){
1480 for(i3=0;i3<projectInfo.resourceManager.iconResources.size();i3++){
1481 if(lstrcmpi(projectInfo.resourceManager.iconResources[i3].filepath.c_str(),temp2)==0){
1482 NewIconEditWindow( projectInfo.GetWorkDir().GetFullPath( temp2 ).c_str() );
1483 break;
1484 }
1485 }
1486 }
1487 i++;
1488 i2=-1;
1489 continue;
1490 }
1491 else break;
1492 }
1493 temporary[i2]=buffer[i];
1494 }
1495
1496 for(i+=2,i2=0;;i++,i2++){
1497 if((buffer[i]=='\r'&&buffer[i+1]=='\n')||buffer[i]=='\0'){
1498 temporary[i2]=0;
1499 break;
1500 }
1501 temporary[i2]=buffer[i];
1502 }
1503 sscanf(temporary,"%d",&i2);
1504
1505 switch( i2 ){
1506 case 0:
1507 ShowFileView();
1508 break;
1509 case 1:
1510 ShowClassView();
1511 break;
1512 case 2:
1513 ShowMaterialView();
1514 break;
1515 }
1516
1517 if(buffer[i]=='\0') goto EndToSetWorkFile;
1518
1519 for(i+=2,i2=0;;i++,i2++){
1520 if((buffer[i]=='\r'&&buffer[i+1]=='\n')||buffer[i]=='\0'){
1521 temporary[i2]=0;
1522 break;
1523 }
1524 temporary[i2]=buffer[i];
1525 }
1526 if(temporary[0]=='1') TreeView_Expand(pobj_FileTree->hTree,TreeView_GetRoot(pobj_FileTree->hTree),TVE_EXPAND);
1527
1528 for(i+=2,i2=0;;i++,i2++){
1529 if((buffer[i]=='\r'&&buffer[i+1]=='\n')||buffer[i]=='\0'){
1530 temporary[i2]=0;
1531 break;
1532 }
1533 temporary[i2]=buffer[i];
1534 }
1535 if(temporary[0]=='1') TreeView_Expand(hProcedureTreeView,TreeView_GetRoot(hProcedureTreeView),TVE_EXPAND);
1536
1537 for(i+=2,i2=0;;i++,i2++){
1538 if((buffer[i]=='\r'&&buffer[i+1]=='\n')||buffer[i]=='\0'){
1539 temporary[i2]=0;
1540 break;
1541 }
1542 temporary[i2]=buffer[i];
1543 }
1544 hTreeItem=TreeView_GetRoot(hMaterialTreeView);
1545 i2=0;
1546 while(hTreeItem){
1547 i2=GetOneParameter(temporary,i2,temp2);
1548 if(GetValue(temp2)) TreeView_Expand(hMaterialTreeView,hTreeItem,TVE_EXPAND);
1549 hTreeItem=TreeView_GetNextSibling(hMaterialTreeView,hTreeItem);
1550 }
1551 }
1552EndToSetWorkFile:
1553 LockWindowUpdate(NULL);
1554 HeapDefaultFree(buffer);
1555 }
1556
1557
1558 //ウィンドウ タイトルを変更
1559 sprintf(temporary,"%s - %s",projectInfo.GetName().c_str(),APPLICATION_NAME);
1560 SetWindowText(hOwner,temporary);
1561}
1562BOOL ProjectModifyCheck(BOOL bRun){
1563 extern MDIINFO MdiInfo[MAX_WNDNUM];
1564 int i,WndNum,sw;
1565 HWND hChild;
1566 char temporary[MAX_PATH];
1567 if(projectInfo.modify||projectInfo.ModifyOfMaterial||projectInfo.ModifuOfResource){
1568 if(bRun==0||pobj_nv->bSaveCheckProject){
1569 //"\"%s\" プロジェクトは変更されています。保存しますか?"
1570 sprintf(temporary,STRING_MODIFYCHECK_PROJECT,projectInfo.GetName().c_str());
1571 i=MessageBox(hOwner,temporary,APPLICATION_NAME,MB_YESNOCANCEL|MB_ICONEXCLAMATION);
1572
1573 if(i==IDCANCEL) return 0;
1574 if(i==IDYES)
1575 {
1576 projectInfo.Save();
1577 }
1578 }
1579 else
1580 {
1581 projectInfo.Save();
1582 }
1583 return 1;
1584 }
1585 hChild=GetWindow(hClient,GW_CHILD);
1586 while(hChild){
1587 WndNum=GetWndNum(hChild);
1588 sw=0;
1589 if(IS_DOCUMENT_TEXT(MdiInfo[WndNum].DocType)){
1590 if( MdiInfo[WndNum].pMdiTextEdit->IsModified() ){
1591 for(i=0;i<projectInfo.pobj_DBFileInfo->iNum;i++){
1592 projectInfo.pobj_DBFileInfo->ppobj_FileInfo[i]->GetFullPath(temporary);
1593 if(lstrcmpi(MdiInfo[WndNum].path,temporary)==0) sw=1;
1594 }
1595 }
1596 }
1597 else if(MdiInfo[WndNum].DocType==WNDTYPE_ICONEDIT){
1598 if(MdiInfo[WndNum].MdiIconEditInfo->bModify){
1599 for(i=0;i<projectInfo.resourceManager.iconResources.size();i++){
1600 lstrcpy(temporary,projectInfo.resourceManager.iconResources[i].filepath.c_str());
1601 lstrcpy( temporary, projectInfo.GetWorkDir().GetFullPath( temporary ).c_str() );
1602 if(lstrcmpi(MdiInfo[WndNum].path,temporary)==0) sw=1;
1603 }
1604 }
1605 }
1606
1607 if(sw){
1608 if(bRun==0||pobj_nv->bSaveCheckProject){
1609 //"\"%s\" プロジェクトは変更されています。保存しますか?"
1610 sprintf(temporary,STRING_MODIFYCHECK_PROJECT,projectInfo.GetName().c_str());
1611 i=MessageBox(hOwner,temporary,APPLICATION_NAME,MB_YESNOCANCEL|MB_ICONEXCLAMATION);
1612
1613 if(i==IDCANCEL) return 0;
1614 if(i==IDYES)
1615 {
1616 projectInfo.Save();
1617 }
1618 }
1619 else
1620 {
1621 projectInfo.Save();
1622 }
1623 return 1;
1624 }
1625 hChild=GetNextWindow(hChild,GW_HWNDNEXT);
1626 }
1627 return 2;
1628}
1629void MakeWorkFile(void){
1630 extern MDIINFO MdiInfo[MAX_WNDNUM];
1631 int i,i2,WndNum;
1632 char temporary[MAX_PATH],buffer[32767];
1633 HWND hChild;
1634 CHARRANGE CharRange;
1635
1636 //ワークファイル(*.wrk)を作成
1637 lstrcpy(buffer,"case4\r\n\r\n");
1638 i2=lstrlen(buffer);
1639
1640
1641 ///////////////////////
1642 //MDIウィンドウの並び
1643 hChild=GetWindow(GetWindow(hClient,GW_CHILD),GW_HWNDLAST);
1644 while(hChild){
1645 WndNum=GetWndNum(hChild);
1646 if(IS_DOCUMENT_TEXT(MdiInfo[WndNum].DocType)){
1647 for(i=0;i<projectInfo.pobj_DBFileInfo->iNum;i++){
1648 projectInfo.pobj_DBFileInfo->ppobj_FileInfo[i]->GetFullPath(temporary);
1649 if(lstrcmpi(MdiInfo[WndNum].path,temporary)==0){
1650 TextEdit_GetSel(WndNum,&CharRange);
1651
1652 SCROLLINFO si;
1653 POINT pos;
1654 si.cbSize=sizeof(SCROLLINFO);
1655 si.fMask=SIF_POS;
1656 GetScrollInfo(MdiInfo[WndNum].pMdiTextEdit->hEdit,SB_HORZ,&si);
1657 pos.x=si.nPos;
1658 GetScrollInfo(MdiInfo[WndNum].pMdiTextEdit->hEdit,SB_VERT,&si);
1659 pos.y=si.nPos;
1660
1661 sprintf(buffer+i2,"text,\"%s\",%d,%d,%d,%d\r\n",
1662 projectInfo.pobj_DBFileInfo->ppobj_FileInfo[i]->m_path,
1663 pos.x,
1664 pos.y,
1665 CharRange.cpMin,
1666 CharRange.cpMax);
1667 i2+=lstrlen(buffer+i2);
1668 break;
1669 }
1670 }
1671 }
1672 else if(MdiInfo[WndNum].DocType==WNDTYPE_RAD){
1673 BOOST_FOREACH( WindowInfo *pWindowInfo, projectInfo.windowInfos )
1674 {
1675 if(lstrcmpi(MdiInfo[WndNum].path,pWindowInfo->GetName().c_str())==0){
1676 sprintf(buffer+i2,"rad,%s\r\n",MdiInfo[WndNum].path);
1677 i2+=lstrlen(buffer+i2);
1678 break;
1679 }
1680 }
1681 }
1682 else if(MdiInfo[WndNum].DocType==WNDTYPE_MENU){
1683 for(i=0;i<projectInfo.NumberOfMenu;i++){
1684 if(lstrcmpi(MdiInfo[WndNum].path,projectInfo.pMenuInfo[i].IdName)==0){
1685 sprintf(buffer+i2,"menu,%s\r\n",MdiInfo[WndNum].path);
1686 i2+=lstrlen(buffer+i2);
1687 break;
1688 }
1689 }
1690 }
1691 else if(MdiInfo[WndNum].DocType==WNDTYPE_ICONEDIT){
1692 for(i=0;i<projectInfo.resourceManager.iconResources.size();i++){
1693 lstrcpy(temporary,projectInfo.resourceManager.iconResources[i].filepath.c_str());
1694 lstrcpy( temporary, projectInfo.GetWorkDir().GetFullPath( temporary ).c_str() );
1695 if(lstrcmpi(MdiInfo[WndNum].path,temporary)==0){
1696 sprintf(buffer+i2,"icon,%s\r\n",projectInfo.resourceManager.iconResources[i].filepath.c_str());
1697 i2+=lstrlen(buffer+i2);
1698 break;
1699 }
1700 }
1701 }
1702 hChild=GetNextWindow(hChild,GW_HWNDPREV);
1703 }
1704 lstrcpy(buffer+i2,"\r\n");
1705 i2+=2;
1706
1707
1708 //////////////////////////
1709 //ツリービューの展開状況
1710 sprintf(buffer+i2,"%d\r\n",TabCtrl_GetCurSel(hProjectViewTab));
1711 i2+=lstrlen(buffer+i2);
1712 TVITEM tvItem;
1713 memset(&tvItem,0,sizeof(TVITEM));
1714 tvItem.mask=TVIF_HANDLE|TVIF_STATE;
1715 tvItem.hItem=TreeView_GetRoot(pobj_FileTree->hTree);
1716 TreeView_GetItem(pobj_FileTree->hTree,&tvItem);
1717 if(tvItem.state&TVIS_EXPANDED) i=1;
1718 else i=0;
1719 sprintf(buffer+i2,"%d\r\n",i);
1720 i2+=lstrlen(buffer+i2);
1721
1722 tvItem.hItem=TreeView_GetRoot(hProcedureTreeView);
1723 TreeView_GetItem(hProcedureTreeView,&tvItem);
1724 if(tvItem.state&TVIS_EXPANDED) i=1;
1725 else i=0;
1726 sprintf(buffer+i2,"%d\r\n",i);
1727 i2+=lstrlen(buffer+i2);
1728
1729 tvItem.hItem=TreeView_GetRoot(hMaterialTreeView);
1730 while(tvItem.hItem){
1731 TreeView_GetItem(hMaterialTreeView,&tvItem);
1732 if(tvItem.state&TVIS_EXPANDED) i=1;
1733 else i=0;
1734 sprintf(buffer+i2,"%d",i);
1735 i2+=lstrlen(buffer+i2);
1736
1737 tvItem.hItem=TreeView_GetNextSibling(hMaterialTreeView,tvItem.hItem);
1738 if(tvItem.hItem){
1739 lstrcpy(buffer+i2,",");
1740 i2+=lstrlen(buffer+i2);
1741 }
1742 }
1743
1744
1745 //保存
1746 sprintf(temporary,"%s%s.wrk",projectInfo.GetWorkDir().GetPath().c_str(),projectInfo.GetName().c_str());
1747 WriteBuffer(temporary,buffer,i2);
1748}
1749
1750BOOL SetProjectToRun(void){
1751 HANDLE hFind;
1752 WIN32_FIND_DATA wfd;
1753
1754 if(projectInfo.pobj_DBFileInfo->iNum==0){
1755 //"プログラム ファイルがプロジェクトに存在しません。"
1756 MessageBox(hOwner,STRING_ERROR_NOFILE,STRING_ERROR,MB_OK|MB_ICONEXCLAMATION);
1757 return 0;
1758 }
1759
1760 extern ActiveBasic::Common::Platform::EnumType selectingPlatform;
1761 hFind=FindFirstFile( ActiveBasic::Common::Environment::GetCompilerExePath( selectingPlatform ).c_str(), &wfd );
1762 if(hFind==INVALID_HANDLE_VALUE){
1763 //"BasicCompiler.exe が見つかりません"
1764 MessageBox(hOwner,STRING_ERROR_NOBASICCOMPILER,STRING_ERROR,MB_OK|MB_ICONEXCLAMATION);
1765 return 0;
1766 }
1767 FindClose(hFind);
1768
1769 //プロジェクト構造のバージョンが違う時は、再保存する
1770 if(projectInfo.dwVersion<PROJECT_VERSION)
1771 projectInfo.ModifyOfMaterial=1;
1772
1773 //保存確認
1774 if(!ProjectModifyCheck(1)) return 0;
1775
1776 return 1;
1777}
1778BOOL IsNeedCompileForProject(BOOL bDebug){
1779 int i2;
1780 char temporary[MAX_PATH];
1781 HANDLE hFind,hFile;
1782 WIN32_FIND_DATA wfd;
1783 FILETIME SourceTime,ExeTime;
1784
1785 if(bDebug) lstrcpy(temporary,projectInfo.lpszOutput_Debug);
1786 else lstrcpy(temporary,projectInfo.lpszOutput_Release);
1787 lstrcpy( temporary, projectInfo.GetWorkDir().GetFullPath( temporary ).c_str() );
1788
1789 hFind=FindFirstFile(temporary,&wfd);
1790 if(hFind==INVALID_HANDLE_VALUE) return 1;
1791 FindClose(hFind);
1792
1793 hFile=CreateFile(temporary,GENERIC_READ,FILE_SHARE_READ|FILE_SHARE_WRITE,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL);
1794 GetFileTime(hFile,NULL,NULL,&ExeTime);
1795 CloseHandle(hFile);
1796
1797 for(i2=0;i2<projectInfo.pobj_DBFileInfo->iNum;i2++){
1798 projectInfo.pobj_DBFileInfo->ppobj_FileInfo[i2]->GetFullPath(temporary);
1799 hFile=CreateFile(temporary,GENERIC_READ,FILE_SHARE_READ|FILE_SHARE_WRITE,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL);
1800 GetFileTime(hFile,NULL,NULL,&SourceTime);
1801 CloseHandle(hFile);
1802
1803 if(SourceTime.dwHighDateTime>ExeTime.dwHighDateTime||
1804 SourceTime.dwHighDateTime==ExeTime.dwHighDateTime&&
1805 SourceTime.dwLowDateTime>ExeTime.dwLowDateTime) return 1;
1806 }
1807 if( !projectInfo.windowInfos.empty() )
1808 {
1809 //CallBack.wbp
1810 lstrcpy(temporary,"CallBack.wbp");
1811 lstrcpy( temporary, projectInfo.GetWorkDir().GetFullPath( temporary ).c_str() );
1812 hFile=CreateFile(temporary,GENERIC_READ,FILE_SHARE_READ|FILE_SHARE_WRITE,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL);
1813 GetFileTime(hFile,NULL,NULL,&SourceTime);
1814 CloseHandle(hFile);
1815 if(SourceTime.dwHighDateTime>ExeTime.dwHighDateTime||
1816 SourceTime.dwHighDateTime==ExeTime.dwHighDateTime&&
1817 SourceTime.dwLowDateTime>ExeTime.dwLowDateTime) return 1;
1818
1819 //MakeWindow.wbp
1820 lstrcpy(temporary,"MakeWindow.wbp");
1821 lstrcpy( temporary, projectInfo.GetWorkDir().GetFullPath( temporary ).c_str() );
1822 hFile=CreateFile(temporary,GENERIC_READ,FILE_SHARE_READ|FILE_SHARE_WRITE,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL);
1823 GetFileTime(hFile,NULL,NULL,&SourceTime);
1824 CloseHandle(hFile);
1825 if(SourceTime.dwHighDateTime>ExeTime.dwHighDateTime||
1826 SourceTime.dwHighDateTime==ExeTime.dwHighDateTime&&
1827 SourceTime.dwLowDateTime>ExeTime.dwLowDateTime) return 1;
1828 }
1829 return 0;
1830}
Note: See TracBrowser for help on using the repository browser.