source: dev/trunk/ab5.0/abdev/abdev/src/ProjectManager/ProjectManager.cpp@ 681

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

FileManager周りをリファクタリング

File size: 18.9 KB
Line 
1#include "stdafx.h"
2
3using namespace ActiveBasic::PM;
4
5void OpenWorkfile( const std::string &path );
6
7void Project::Load( char *path )
8{
9 extern HANDLE hHeap;
10 int i,i2;
11 char *buffer,temporary[MAX_PATH],temp2[MAX_PATH];
12
13 //既にプロジェクトが開かれている場合は閉じる
14 if( this->IsOpened() ){
15 if(!this->Close()) return;
16 }
17 //memset(&projectInfo,0,sizeof(PROJECTINFO));
18
19 //プロジェクトの作業ディレクトリを取得
20 _splitpath(path,temporary,temp2,0,0);
21 lstrcat( temporary, temp2 );
22 this->workDir = Jenga::Common::Directory( temporary );
23
24 //ファイルを開く、保存の初期ディレクトリをセット
25 lstrcpy(pobj_nv->DefSaveDir,this->GetWorkDir().GetPath().c_str());
26
27
28
29 //////////////////////////////////////////
30 //プロジェクトファイル(*.pj)をオープン
31 buffer=ReadBuffer(path);
32 if(!buffer) return;
33
34 //解析
35 this->fileSystem.root.Clear();
36 bool isUseWindow = false;
37 for(i=0;;i++){
38 if(buffer[i]=='\0') break;
39 if(buffer[i]=='\r'&&buffer[i+1]=='\n'&&buffer[i+2]=='#'){
40 for(i+=3,i2=0;;i++,i2++){
41 if(!IsVariableChar(buffer[i])){
42 temporary[i2]=0;
43 break;
44 }
45 temporary[i2]=buffer[i];
46 }
47 if(lstrcmpi(temporary,"VERSION")==0&&buffer[i]=='='){
48 for(i++,i2=0;;i++,i2++){
49 if((buffer[i]=='\r'&&buffer[i+1]=='\n')||buffer[i]=='\0'){
50 temporary[i2]=0;
51 if(buffer[i]=='\r'&&buffer[i+1]=='\n') i-=2;
52 break;
53 }
54 temporary[i2]=buffer[i];
55 }
56 this->dwVersion=GetValue(temporary);
57 }
58 else if(lstrcmpi(temporary,"MODULETYPE")==0&&buffer[i]=='='){
59 for(i++,i2=0;;i++,i2++){
60 if((buffer[i]=='\r'&&buffer[i+1]=='\n')||buffer[i]=='\0'){
61 temporary[i2]=0;
62 if(buffer[i]=='\r'&&buffer[i+1]=='\n') i-=2;
63 break;
64 }
65 temporary[i2]=buffer[i];
66 }
67 this->moduleType = (ActiveBasic::Common::TargetModuleType::EnumType)atoi(temporary);
68 }
69 else if(lstrcmpi(temporary,"NAME")==0&&buffer[i]=='='){
70 for(i++,i2=0;;i++,i2++){
71 if((buffer[i]=='\r'&&buffer[i+1]=='\n')||buffer[i]=='\0'){
72 temporary[i2]=0;
73 break;
74 }
75 temporary[i2]=buffer[i];
76 }
77 this->name = temporary;
78 }
79 else if(lstrcmpi(temporary,"PLATFORM")==0&&buffer[i]=='='){
80 for(i++,i2=0;;i++,i2++){
81 if((buffer[i]=='\r'&&buffer[i+1]=='\n')||buffer[i]=='\0'){
82 temporary[i2]=0;
83 if(buffer[i]=='\r'&&buffer[i+1]=='\n') i-=2;
84 break;
85 }
86 temporary[i2]=buffer[i];
87 }
88 i2=atoi(temporary);
89 extern HWND hSelectCompilerCombo;
90 if(i2==32){
91 //プラットフォームにWin32を選択
92 SendMessage(hSelectCompilerCombo,CB_SETCURSEL,0,0);
93 }
94 else if(i2==64){
95 //プラットフォームにWin64を選択
96 SendMessage(hSelectCompilerCombo,CB_SETCURSEL,1,0);
97 }
98 SendMessage(hSelectCompilerCombo,WM_COMMAND,MAKELONG(0,CBN_SELCHANGE),0);
99 }
100 else if(lstrcmpi(temporary,"USEWINDOW")==0&&buffer[i]=='='){
101 for(i++,i2=0;;i++,i2++){
102 if((buffer[i]=='\r'&&buffer[i+1]=='\n')||buffer[i]=='\0'){
103 temporary[i2]=0;
104 if(buffer[i]=='\r'&&buffer[i+1]=='\n') i-=2;
105 break;
106 }
107 temporary[i2]=buffer[i];
108 }
109 if( atoi(temporary) > 0 )
110 {
111 isUseWindow = true;
112 }
113 }
114 else if(lstrcmpi(temporary,"OPTION")==0&&buffer[i]=='='){
115 for(i++,i2=0;;i++,i2++){
116 if((buffer[i]=='\r'&&buffer[i+1]=='\n')||buffer[i]=='\0'){
117 temporary[i2]=0;
118 if(buffer[i]=='\r'&&buffer[i+1]=='\n') i-=2;
119 break;
120 }
121 temporary[i2]=buffer[i];
122 }
123 this->dwOption=GetValue(temporary);
124 }
125 else if(lstrcmpi(temporary,"OUTPUT_RELEASE")==0&&buffer[i]=='='){
126 for(i++,i2=0;;i++,i2++){
127 if((buffer[i]=='\r'&&buffer[i+1]=='\n')||buffer[i]=='\0'){
128 temporary[i2]=0;
129 if(buffer[i]=='\r'&&buffer[i+1]=='\n') i-=2;
130 break;
131 }
132 temporary[i2]=buffer[i];
133 }
134 lstrcpy(this->lpszOutput_Release,temporary);
135 }
136 else if(lstrcmpi(temporary,"OUTPUT_DEBUG")==0&&buffer[i]=='='){
137 for(i++,i2=0;;i++,i2++){
138 if((buffer[i]=='\r'&&buffer[i+1]=='\n')||buffer[i]=='\0'){
139 temporary[i2]=0;
140 if(buffer[i]=='\r'&&buffer[i+1]=='\n') i-=2;
141 break;
142 }
143 temporary[i2]=buffer[i];
144 }
145 lstrcpy(this->lpszOutput_Debug,temporary);
146 }
147 else if(lstrcmpi(temporary,"MANIFEST")==0&&buffer[i]=='='){
148 for(i++,i2=0;;i++,i2++){
149 if((buffer[i]=='\r'&&buffer[i+1]=='\n')||buffer[i]=='\0'){
150 temporary[i2]=0;
151 if(buffer[i]=='\r'&&buffer[i+1]=='\n') i-=2;
152 break;
153 }
154 temporary[i2]=buffer[i];
155 }
156 lstrcpy(this->szManifestPath,temporary);
157 }
158 else if(lstrcmpi(temporary,"DEBUG_CMD_LINE")==0&&buffer[i]=='='){
159 for(i++,i2=0;;i++,i2++){
160 if((buffer[i]=='\r'&&buffer[i+1]=='\n')||buffer[i]=='\0'){
161 temporary[i2]=0;
162 if(buffer[i]=='\r'&&buffer[i+1]=='\n') i-=2;
163 break;
164 }
165 temporary[i2]=buffer[i];
166 }
167 lstrcpy(this->szCmdLine,temporary);
168 }
169 else if(lstrcmpi(temporary,"DEBUG_EXE_PATH")==0&&buffer[i]=='='){
170 for(i++,i2=0;;i++,i2++){
171 if((buffer[i]=='\r'&&buffer[i+1]=='\n')||buffer[i]=='\0'){
172 temporary[i2]=0;
173 if(buffer[i]=='\r'&&buffer[i+1]=='\n') i-=2;
174 break;
175 }
176 temporary[i2]=buffer[i];
177 }
178 lstrcpy(this->szExePath,temporary);
179 }
180 else if(lstrcmpi(temporary,"RESOURCE")==0&&buffer[i]=='='){
181 for(i++,i2=0;;i++,i2++){
182 if((buffer[i]=='\r'&&buffer[i+1]=='\n')||buffer[i]=='\0'){
183 temporary[i2]=0;
184 if(buffer[i]=='\r'&&buffer[i+1]=='\n') i-=2;
185 break;
186 }
187 temporary[i2]=buffer[i];
188 }
189
190 // このパラメータは使用しなくなった
191 }
192 else if(lstrcmpi(temporary,"SOURCE")==0&&buffer[i]=='\r'&&buffer[i+1]=='\n'){
193 while(1){
194 for(i+=2,i2=0;;i++,i2++){
195 if((buffer[i]=='\r'&&buffer[i+1]=='\n')||buffer[i]=='\0'){
196 temporary[i2]=0;
197 break;
198 }
199 temporary[i2]=buffer[i];
200 }
201 if(temporary[0]=='\0') break;
202 this->fileSystem.root.files.push_back( ActiveBasic::PM::FM::File( temporary, 0 ) );
203
204 if(buffer[i]=='\0') break;
205 }
206 }
207 else{
208 //不明なパラメータは無視
209 for(i++;;i++){
210 if((buffer[i]=='\r'&&buffer[i+1]=='\n')||buffer[i]=='\0'){
211 if(buffer[i]=='\r'&&buffer[i+1]=='\n') i-=2;
212 break;
213 }
214 }
215 }
216 if(buffer[i]=='\0') break;
217 }
218 }
219 HeapDefaultFree(buffer);
220
221 //古いバージョンファイルを考慮
222 if(this->dwVersion<=4){
223 if( this->GetModuleType() == ActiveBasic::Common::TargetModuleType::Dll )
224 {
225 sprintf(this->lpszOutput_Release,".\\%s.dll",this->GetName().c_str());
226 }
227 else
228 {
229 sprintf(this->lpszOutput_Release,".\\%s.exe",this->GetName().c_str());
230 }
231 sprintf(this->lpszOutput_Debug,".\\%s_debug.exe",this->GetName().c_str());
232 }
233
234 // リソースを読み込む
235 Jenga::Common::Path resourcePath( this->GetResourceFileFullPath() );
236 if( resourcePath.IsExistFile() )
237 {
238 this->resourceManager.Load( this->GetResourceFileFullPath() );
239 }
240
241 //ブレークポイントを初期化
242 this->pobj_DBBreakPoint=new CDBBreakPoint();
243
244
245 if( isUseWindow )
246 {
247 /////////////////////////////////////////////
248 //ウィンドウ定義ファイル(*.wnd)をオープン
249 sprintf(temp2,"%s%s.wnd",this->GetWorkDir().GetPath().c_str(),this->GetName().c_str());
250 if(!OpenWindowFile(temp2)) return;
251 }
252 else{
253 this->windowInfos.Clear();
254
255 this->NumberOfMenu=0;
256 this->pMenuInfo=(MENU_INFO *)HeapAlloc(hHeap,HEAP_ZERO_MEMORY,1);
257 }
258
259 OpenWorkfile( this->GetWorkDir().GetPath() + this->GetName() + ".wrk" );
260
261 this->modify=0;
262 this->ModifyOfMaterial=0;
263 this->ModifuOfResource=0;
264}
265
266void SetStatusText(char *MenuText);
267void MakeSourceListToProjectFile( const ActiveBasic::PM::FM::Folder &folder, char *buffer )
268{
269 BOOST_FOREACH( const ActiveBasic::PM::FM::Folder &childFolder, folder.folders )
270 {
271 MakeSourceListToProjectFile( childFolder, buffer );
272 }
273
274 BOOST_FOREACH( const ActiveBasic::PM::FM::File &file, folder.files )
275 {
276 lstrcat( buffer, file.GetRelationalPath().c_str() );
277 lstrcat( buffer, "\r\n" );
278 }
279}
280void MakeIncludeListToProjectFile( const ActiveBasic::PM::FM::Folder &folder, char *buffer, bool isRoot )
281{
282 BOOST_FOREACH( const ActiveBasic::PM::FM::Folder &childFolder, folder.folders )
283 {
284 MakeIncludeListToProjectFile( childFolder, buffer, false );
285 }
286
287 bool isFirst = true;
288 BOOST_FOREACH( const ActiveBasic::PM::FM::File &file, folder.files )
289 {
290 if( isRoot && isFirst )
291 {
292 // メインファイルは除く
293 isFirst = false;
294 continue;
295 }
296
297 sprintf(buffer+lstrlen(buffer),"#include \"%s\"\r\n",file.GetRelationalPath().c_str());
298 lstrcpy(buffer+lstrlen(buffer),"_ClearNamespaceImported\r\n");
299 }
300}
301void Project::Save()
302{
303 int i2,i3,WndNum;
304 char temporary[MAX_PATH],buffer[32767];
305 HWND hChild;
306
307 SetStatusText( "プロジェクトを保存中..." );
308
309 //プロジェクトファイルのバージョンを設定
310 this->dwVersion=PROJECT_VERSION;
311
312 hChild=GetWindow(hClient,GW_CHILD);
313 while(hChild){
314 WndNum=GetWndNum(hChild);
315 if(IS_DOCUMENT_TEXT(MdiInfo[WndNum]->DocType)){
316 if( MdiInfo[WndNum]->pMdiTextEdit->IsModified() )
317 {
318 if( this->fileSystem.root.IsExistFile( MdiInfo[WndNum]->path ) )
319 {
320 SaveDocument(hChild,NULL);
321 }
322 }
323 }
324 if(MdiInfo[WndNum]->DocType==WNDTYPE_ICONEDIT){
325 if(MdiInfo[WndNum]->MdiIconEditInfo->bModify){
326 BOOST_FOREACH( const ActiveBasic::Common::ResourceItem &resourceItem, resourceManager.iconResources )
327 {
328 lstrcpy(temporary,resourceItem.filepath.c_str());
329 lstrcpy( temporary, this->GetWorkDir().GetFullPath( temporary ).c_str() );
330 if(lstrcmpi(MdiInfo[WndNum]->path.c_str(),temporary)==0){
331 SaveDocument(hChild,NULL);
332 break;
333 }
334 }
335 }
336 }
337 hChild=GetNextWindow(hChild,GW_HWNDNEXT);
338 }
339
340
341 //////////////////////////////////////
342 //プロジェクトファイル(*.pj)を作成
343 lstrcpy(buffer,"\' ActiveBasic Project file.\r\n\r\n");
344 i2=lstrlen(buffer);
345 sprintf(buffer+i2,"#VERSION=%d\r\n\r\n",this->dwVersion);
346 i2+=lstrlen(buffer+i2);
347 sprintf(buffer+i2,"#MODULETYPE=%d\r\n\r\n",(int)this->GetModuleType());
348 i2+=lstrlen(buffer+i2);
349 sprintf(buffer+i2,"#NAME=%s\r\n\r\n",this->GetName().c_str());
350 i2+=lstrlen(buffer+i2);
351 extern HWND hSelectCompilerCombo;
352 if(SendMessage(hSelectCompilerCombo,CB_GETCURSEL,0,0)==0){
353 sprintf(buffer+i2,"#PLATFORM=32\r\n\r\n",this->GetName().c_str());
354 i2+=lstrlen(buffer+i2);
355 }
356 else{
357 sprintf(buffer+i2,"#PLATFORM=64\r\n\r\n",this->GetName().c_str());
358 i2+=lstrlen(buffer+i2);
359 }
360 sprintf(buffer+i2,"#USEWINDOW=%d\r\n\r\n",this->windowInfos.size());
361 i2+=lstrlen(buffer+i2);
362 sprintf(buffer+i2,"#OPTION=&H%08x\r\n\r\n",this->dwOption);
363 i2+=lstrlen(buffer+i2);
364 sprintf(buffer+i2,"#OUTPUT_RELEASE=%s\r\n\r\n",this->lpszOutput_Release);
365 i2+=lstrlen(buffer+i2);
366 sprintf(buffer+i2,"#OUTPUT_DEBUG=%s\r\n\r\n",this->lpszOutput_Debug);
367 i2+=lstrlen(buffer+i2);
368 sprintf(buffer+i2,"#MANIFEST=%s\r\n\r\n",this->szManifestPath);
369 i2+=lstrlen(buffer+i2);
370 sprintf(buffer+i2,"#DEBUG_CMD_LINE=%s\r\n\r\n",this->szCmdLine);
371 i2+=lstrlen(buffer+i2);
372 sprintf(buffer+i2,"#DEBUG_EXE_PATH=%s\r\n\r\n",this->szExePath);
373 i2+=lstrlen(buffer+i2);
374 sprintf(buffer+i2,"#SOURCE\r\n");
375 i2+=lstrlen(buffer+i2);
376 MakeSourceListToProjectFile( this->fileSystem.root, buffer );
377 i2 = lstrlen( buffer );
378
379 //保存
380 sprintf(temporary,"%s%s.pj",this->GetWorkDir().GetPath().c_str(),this->GetName().c_str());
381 WriteBuffer(temporary,buffer,i2);
382
383
384 //////////////////////////////////
385 // リソースファイル(*.rc、resource.ab)を作成
386 {
387 i2=0;
388 i3=101;
389 BOOST_FOREACH( const ActiveBasic::Common::ResourceItem &resourceItem, resourceManager.cursorResources )
390 {
391 sprintf(buffer+i2,"Const %s=%d\r\n",
392 resourceItem.idName.c_str(),
393 i3);
394 i2+=lstrlen(buffer+i2);
395
396 i3++;
397 }
398 BOOST_FOREACH( const ActiveBasic::Common::ResourceItem &resourceItem, resourceManager.bitmapResources )
399 {
400 sprintf(buffer+i2,"Const %s=%d\r\n",
401 resourceItem.idName.c_str(),
402 i3);
403 i2+=lstrlen(buffer+i2);
404
405 i3++;
406 }
407 BOOST_FOREACH( const ActiveBasic::Common::ResourceItem &resourceItem, resourceManager.iconResources )
408 {
409 sprintf(buffer+i2,"Const %s=%d\r\n",
410 resourceItem.idName.c_str(),
411 i3);
412 i2+=lstrlen(buffer+i2);
413
414 i3++;
415 }
416
417 //保存(resource.ab)
418 WriteBuffer(this->GetWorkDir().GetFullPath( "resource.ab" ),buffer,i2);
419
420 i2=0;
421 BOOST_FOREACH( const ActiveBasic::Common::ResourceItem &resourceItem, resourceManager.cursorResources )
422 {
423 sprintf(buffer+i2,"%s CURSOR \"%s\"\r\n",
424 resourceItem.idName.c_str(),
425 resourceItem.filepath.c_str());
426 i2+=lstrlen(buffer+i2);
427 }
428 BOOST_FOREACH( const ActiveBasic::Common::ResourceItem &resourceItem, resourceManager.bitmapResources )
429 {
430 sprintf(buffer+i2,"%s BITMAP \"%s\"\r\n",
431 resourceItem.idName.c_str(),
432 resourceItem.filepath.c_str());
433 i2+=lstrlen(buffer+i2);
434 }
435 BOOST_FOREACH( const ActiveBasic::Common::ResourceItem &resourceItem, resourceManager.iconResources )
436 {
437 sprintf(buffer+i2,"%s ICON \"%s\"\r\n",
438 resourceItem.idName.c_str(),
439 resourceItem.filepath.c_str());
440 i2+=lstrlen(buffer+i2);
441 }
442
443 //マニフェスト
444 if(this->dwOption&PJ_OP_RC_MANIFEST){
445 sprintf(buffer+i2,"CREATEPROCESS_MANIFEST_RESOURCE_ID RT_MANIFEST \"%s\"\r\n",
446 this->szManifestPath);
447 i2+=lstrlen(buffer+i2);
448 }
449
450 //保存
451 WriteBuffer(this->GetResourceFileFullPath(),buffer,i2);
452 }
453
454
455 ///////////////////////////////////////
456 //インデックスファイル(*.idx)を作成
457 buffer[0]=0;
458 lstrcpy(buffer,"' インデックス プログラム\r\n");
459 i2=lstrlen(buffer);
460 if(this->dwOption&PJ_OP_SOURCE_MASK){
461 if(this->dwOption&PJ_OP_STRICT){
462 /* #strictディレクティブは今は使われていない
463 lstrcpy(buffer+i2,"\r\n");
464 i2+=lstrlen(buffer+i2);
465 lstrcpy(buffer+i2,"#strict");
466 i2+=lstrlen(buffer+i2);
467 lstrcpy(buffer+i2,"\r\n");
468 i2+=lstrlen(buffer+i2);
469 */
470 }
471 lstrcpy(buffer+i2,"\r\n");
472 i2+=lstrlen(buffer+i2);
473 lstrcpy(buffer+i2,"'Win32APIの定義ファイル\r\n");
474 i2+=lstrlen(buffer+i2);
475 if(this->dwOption&PJ_OP_MMSYSTEM){
476 lstrcpy(buffer+i2,"#include <api_mmsys.sbp>\r\n");
477 i2+=lstrlen(buffer+i2);
478 }
479 if(this->dwOption&PJ_OP_COMMCTRL){
480 lstrcpy(buffer+i2,"#include <api_commctrl.sbp>\r\n");
481 i2+=lstrlen(buffer+i2);
482 }
483 if(this->dwOption&PJ_OP_RICHEDIT){
484 lstrcpy(buffer+i2,"#include <api_richedit.sbp>\r\n");
485 i2+=lstrlen(buffer+i2);
486 }
487 if(this->dwOption&PJ_OP_WINSOCK){
488 lstrcpy(buffer+i2,"#include <api_winsock2.sbp>\r\n");
489 i2+=lstrlen(buffer+i2);
490 }
491 }
492 if( !this->windowInfos.empty() )
493 {
494 lstrcpy(buffer+i2,"\r\n");
495 i2+=lstrlen(buffer+i2);
496 lstrcpy(buffer+i2,"'RADツールが生成するウィンドウ制御プログラム\r\n");
497 i2+=lstrlen(buffer+i2);
498 sprintf(buffer+i2,"#include \"Callback.wbp\"\r\n");
499 i2+=lstrlen(buffer+i2);
500 }
501
502 {
503 lstrcpy(buffer+i2,"\r\n");
504 i2+=lstrlen(buffer+i2);
505 lstrcpy(buffer+i2,"'プロジェクト内のプログラム ファイル\r\n");
506 i2+=lstrlen(buffer+i2);
507 MakeIncludeListToProjectFile( this->fileSystem.root, buffer, true );
508 i2 = lstrlen(buffer);
509 }
510 if( !this->windowInfos.empty() )
511 {
512 lstrcpy(buffer+i2,"\r\n");
513 i2+=lstrlen(buffer+i2);
514 lstrcpy(buffer+i2,"'RADツールが生成するウィンドウ生成プログラム\r\n");
515 i2+=lstrlen(buffer+i2);
516 sprintf(buffer+i2,"#include \"MakeWindow.wbp\"\r\n");
517 i2+=lstrlen(buffer+i2);
518 }
519
520 //リソースファイル
521 lstrcpy(buffer+i2,"\r\n");
522 i2+=lstrlen(buffer+i2);
523 lstrcpy(buffer+i2,"'リソースファイル\r\n");
524 i2+=lstrlen(buffer+i2);
525 lstrcpy(buffer+i2,"#include \"resource.ab\"\r\n");
526 i2+=lstrlen(buffer+i2);
527 sprintf(buffer+i2,"#resource \"%s.rc\"\r\n",this->GetName().c_str());
528 i2+=lstrlen(buffer+i2);
529
530 //保存
531 sprintf(temporary,"%s%s.idx",this->GetWorkDir().GetPath().c_str(),this->GetName().c_str());
532 WriteBuffer(temporary,buffer,i2);
533
534
535 if( !this->windowInfos.empty() )
536 {
537 /////////////////////////////////////////////////////
538 //ウィンドウ関連ファイル(*.wnd)を作成、保存
539 if(this->ModifyOfMaterial){
540 sprintf(temporary,"%s%s.wnd",this->GetWorkDir().GetPath().c_str(),this->GetName().c_str());
541 SaveWindowFile( temporary, this->windowInfos );
542 }
543
544 //.wbpファイルを生成
545 SaveWindowProgram();
546 }
547
548
549 MakeWorkFile();
550
551 SetStatusText("");
552
553 this->modify=0;
554 this->ModifuOfResource=0;
555}
556
557bool Project::Close()
558{
559 extern HANDLE hHeap;
560 int i,WndNum;
561 HWND hChild,hCloseChild;
562 char temporary[MAX_PATH];
563
564
565 //保存確認
566 i=ProjectModifyCheck(0);
567 if(i==0) return false;
568 else if(i==2) MakeWorkFile();
569
570 //プロジェクトに関するMDIウィンドウをすべて閉じる
571 hChild=GetWindow(hClient,GW_CHILD);
572 while(hChild){
573 hCloseChild=hChild;
574 hChild=GetNextWindow(hChild,GW_HWNDNEXT);
575 WndNum=GetWndNum(hCloseChild);
576 if(IS_DOCUMENT_TEXT(MdiInfo[WndNum]->DocType))
577 {
578 if( this->fileSystem.root.IsExistFile( MdiInfo[WndNum]->path ) )
579 {
580 //変更フラグをオフにする
581 MdiInfo[WndNum]->pMdiTextEdit->UnModify();
582
583 SendMessage(hCloseChild,WM_CLOSE,0,0);
584 }
585 }
586 else if(MdiInfo[WndNum]->DocType==WNDTYPE_RAD)
587 {
588 BOOST_FOREACH( const WindowInfo *pWindowInfo, windowInfos )
589 {
590 if( pWindowInfo->GetName() == MdiInfo[WndNum]->path ){
591 SendMessage(hCloseChild,WM_CLOSE,0,0);
592 break;
593 }
594 }
595 }
596 else if(MdiInfo[WndNum]->DocType==WNDTYPE_MENU){
597 for(i=0;i<this->NumberOfMenu;i++){
598 if( MdiInfo[WndNum]->path == this->pMenuInfo[i].IdName )
599 {
600 SendMessage(hCloseChild,WM_CLOSE,0,0);
601 break;
602 }
603 }
604 }
605 else if(MdiInfo[WndNum]->DocType==WNDTYPE_ICONEDIT){
606 for(i=0;this->resourceManager.iconResources.size();i++){
607 lstrcpy(temporary,this->resourceManager.iconResources[i].filepath.c_str());
608 lstrcpy( temporary, this->GetWorkDir().GetFullPath( temporary ).c_str() );
609 if(lstrcmpi(MdiInfo[WndNum]->path.c_str(),temporary)==0){
610 SendMessage(hCloseChild,WM_CLOSE,0,0);
611 break;
612 }
613 }
614 }
615 }
616
617 //ファイル情報のメモリを解放
618 this->fileSystem.root.Clear();
619
620 //ブレークポイントのオブジェクトを解放
621 delete this->pobj_DBBreakPoint;
622
623 //ウィンドウ情報のメモリを解放
624 BOOST_FOREACH( ActiveBasic::PM::WindowInfo *pWindowInfo, windowInfos )
625 {
626 //子ウィンドウのメモリを解放
627 BOOST_FOREACH( ActiveBasic::PM::ChildWindowInfo *pChildWindowInfo, pWindowInfo->childWindowInfos )
628 {
629 delete pChildWindowInfo;
630 }
631 pWindowInfo->childWindowInfos.clear();
632 }
633 this->windowInfos.Clear();
634
635 //メニュー情報のメモリを解放
636 HeapMenuDataFree(this->pMenuInfo,this->NumberOfMenu,0);
637 HeapDefaultFree(this->pMenuInfo);
638
639 //リソースのメモリを解放
640 this->resourceManager.Clear();
641
642 //プロジェクト ビューを非表示にする
643 extern HWND hProjectView;
644 if(IsWindowVisible(hProjectView)) SendMessage(hOwner,WM_COMMAND,IDM_PROJECTVIEW,0);
645 SetWindowText(hProjectView,"Project View");
646
647 extern HWND hProcedureTreeView;
648 extern HWND hMaterialTreeView;
649 pobj_FileTree->DeleteAllItems();
650 TreeView_DeleteAllItems(hProcedureTreeView);
651 TreeView_DeleteAllItems(hMaterialTreeView);
652
653 //ウィンドウ タイトルを変更
654 SetWindowText(hOwner,APPLICATION_NAME);
655
656 this->name = "";
657
658 //メニュー状態を設定
659 ResetState_DocMenu();
660
661 return true;
662}
Note: See TracBrowser for help on using the repository browser.