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

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

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

File size: 18.4 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->pobj_DBFileInfo=new CDBFileInfo();
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->pobj_DBFileInfo->add(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 Project::Save()
268{
269 int i,i2,i3,WndNum;
270 char temporary[MAX_PATH],buffer[32767];
271 HWND hChild;
272
273 SetStatusText( "プロジェクトを保存中..." );
274
275 //プロジェクトファイルのバージョンを設定
276 this->dwVersion=PROJECT_VERSION;
277
278 hChild=GetWindow(hClient,GW_CHILD);
279 while(hChild){
280 WndNum=GetWndNum(hChild);
281 if(IS_DOCUMENT_TEXT(MdiInfo[WndNum]->DocType)){
282 if( MdiInfo[WndNum]->pMdiTextEdit->IsModified() ){
283 for(i=0;i<this->pobj_DBFileInfo->iNum;i++){
284 this->pobj_DBFileInfo->ppobj_FileInfo[i]->GetFullPath(temporary);
285 if(lstrcmpi(MdiInfo[WndNum]->path.c_str(),temporary)==0){
286 SaveDocument(hChild,NULL);
287 break;
288 }
289 }
290 }
291 }
292 if(MdiInfo[WndNum]->DocType==WNDTYPE_ICONEDIT){
293 if(MdiInfo[WndNum]->MdiIconEditInfo->bModify){
294 BOOST_FOREACH( const ActiveBasic::Common::ResourceItem &resourceItem, resourceManager.iconResources )
295 {
296 lstrcpy(temporary,resourceItem.filepath.c_str());
297 lstrcpy( temporary, this->GetWorkDir().GetFullPath( temporary ).c_str() );
298 if(lstrcmpi(MdiInfo[WndNum]->path.c_str(),temporary)==0){
299 SaveDocument(hChild,NULL);
300 break;
301 }
302 }
303 }
304 }
305 hChild=GetNextWindow(hChild,GW_HWNDNEXT);
306 }
307
308
309 //////////////////////////////////////
310 //プロジェクトファイル(*.pj)を作成
311 lstrcpy(buffer,"\' ActiveBasic Project file.\r\n\r\n");
312 i2=lstrlen(buffer);
313 sprintf(buffer+i2,"#VERSION=%d\r\n\r\n",this->dwVersion);
314 i2+=lstrlen(buffer+i2);
315 sprintf(buffer+i2,"#MODULETYPE=%d\r\n\r\n",(int)this->GetModuleType());
316 i2+=lstrlen(buffer+i2);
317 sprintf(buffer+i2,"#NAME=%s\r\n\r\n",this->GetName().c_str());
318 i2+=lstrlen(buffer+i2);
319 extern HWND hSelectCompilerCombo;
320 if(SendMessage(hSelectCompilerCombo,CB_GETCURSEL,0,0)==0){
321 sprintf(buffer+i2,"#PLATFORM=32\r\n\r\n",this->GetName().c_str());
322 i2+=lstrlen(buffer+i2);
323 }
324 else{
325 sprintf(buffer+i2,"#PLATFORM=64\r\n\r\n",this->GetName().c_str());
326 i2+=lstrlen(buffer+i2);
327 }
328 sprintf(buffer+i2,"#USEWINDOW=%d\r\n\r\n",this->windowInfos.size());
329 i2+=lstrlen(buffer+i2);
330 sprintf(buffer+i2,"#OPTION=&H%08x\r\n\r\n",this->dwOption);
331 i2+=lstrlen(buffer+i2);
332 sprintf(buffer+i2,"#OUTPUT_RELEASE=%s\r\n\r\n",this->lpszOutput_Release);
333 i2+=lstrlen(buffer+i2);
334 sprintf(buffer+i2,"#OUTPUT_DEBUG=%s\r\n\r\n",this->lpszOutput_Debug);
335 i2+=lstrlen(buffer+i2);
336 sprintf(buffer+i2,"#MANIFEST=%s\r\n\r\n",this->szManifestPath);
337 i2+=lstrlen(buffer+i2);
338 sprintf(buffer+i2,"#DEBUG_CMD_LINE=%s\r\n\r\n",this->szCmdLine);
339 i2+=lstrlen(buffer+i2);
340 sprintf(buffer+i2,"#DEBUG_EXE_PATH=%s\r\n\r\n",this->szExePath);
341 i2+=lstrlen(buffer+i2);
342 sprintf(buffer+i2,"#SOURCE\r\n");
343 i2+=lstrlen(buffer+i2);
344 for(i=0;i<this->pobj_DBFileInfo->iNum;i++){
345 sprintf(buffer+i2,"%s\r\n",this->pobj_DBFileInfo->ppobj_FileInfo[i]->GetPath().c_str());
346 i2+=lstrlen(buffer+i2);
347 }
348
349 //保存
350 sprintf(temporary,"%s%s.pj",this->GetWorkDir().GetPath().c_str(),this->GetName().c_str());
351 WriteBuffer(temporary,buffer,i2);
352
353
354 //////////////////////////////////
355 // リソースファイル(*.rc、resource.ab)を作成
356 {
357 i2=0;
358 i3=101;
359 BOOST_FOREACH( const ActiveBasic::Common::ResourceItem &resourceItem, resourceManager.cursorResources )
360 {
361 sprintf(buffer+i2,"Const %s=%d\r\n",
362 resourceItem.idName.c_str(),
363 i3);
364 i2+=lstrlen(buffer+i2);
365
366 i3++;
367 }
368 BOOST_FOREACH( const ActiveBasic::Common::ResourceItem &resourceItem, resourceManager.bitmapResources )
369 {
370 sprintf(buffer+i2,"Const %s=%d\r\n",
371 resourceItem.idName.c_str(),
372 i3);
373 i2+=lstrlen(buffer+i2);
374
375 i3++;
376 }
377 BOOST_FOREACH( const ActiveBasic::Common::ResourceItem &resourceItem, resourceManager.iconResources )
378 {
379 sprintf(buffer+i2,"Const %s=%d\r\n",
380 resourceItem.idName.c_str(),
381 i3);
382 i2+=lstrlen(buffer+i2);
383
384 i3++;
385 }
386
387 //保存(resource.ab)
388 WriteBuffer(this->GetWorkDir().GetFullPath( "resource.ab" ),buffer,i2);
389
390 i2=0;
391 BOOST_FOREACH( const ActiveBasic::Common::ResourceItem &resourceItem, resourceManager.cursorResources )
392 {
393 sprintf(buffer+i2,"%s CURSOR \"%s\"\r\n",
394 resourceItem.idName.c_str(),
395 resourceItem.filepath.c_str());
396 i2+=lstrlen(buffer+i2);
397 }
398 BOOST_FOREACH( const ActiveBasic::Common::ResourceItem &resourceItem, resourceManager.bitmapResources )
399 {
400 sprintf(buffer+i2,"%s BITMAP \"%s\"\r\n",
401 resourceItem.idName.c_str(),
402 resourceItem.filepath.c_str());
403 i2+=lstrlen(buffer+i2);
404 }
405 BOOST_FOREACH( const ActiveBasic::Common::ResourceItem &resourceItem, resourceManager.iconResources )
406 {
407 sprintf(buffer+i2,"%s ICON \"%s\"\r\n",
408 resourceItem.idName.c_str(),
409 resourceItem.filepath.c_str());
410 i2+=lstrlen(buffer+i2);
411 }
412
413 //マニフェスト
414 if(this->dwOption&PJ_OP_RC_MANIFEST){
415 sprintf(buffer+i2,"CREATEPROCESS_MANIFEST_RESOURCE_ID RT_MANIFEST \"%s\"\r\n",
416 this->szManifestPath);
417 i2+=lstrlen(buffer+i2);
418 }
419
420 //保存
421 WriteBuffer(this->GetResourceFileFullPath(),buffer,i2);
422 }
423
424
425 ///////////////////////////////////////
426 //インデックスファイル(*.idx)を作成
427 buffer[0]=0;
428 lstrcpy(buffer,"' インデックス プログラム\r\n");
429 i2=lstrlen(buffer);
430 if(this->dwOption&PJ_OP_SOURCE_MASK){
431 if(this->dwOption&PJ_OP_STRICT){
432 /* #strictディレクティブは今は使われていない
433 lstrcpy(buffer+i2,"\r\n");
434 i2+=lstrlen(buffer+i2);
435 lstrcpy(buffer+i2,"#strict");
436 i2+=lstrlen(buffer+i2);
437 lstrcpy(buffer+i2,"\r\n");
438 i2+=lstrlen(buffer+i2);
439 */
440 }
441 lstrcpy(buffer+i2,"\r\n");
442 i2+=lstrlen(buffer+i2);
443 lstrcpy(buffer+i2,"'Win32APIの定義ファイル\r\n");
444 i2+=lstrlen(buffer+i2);
445 if(this->dwOption&PJ_OP_MMSYSTEM){
446 lstrcpy(buffer+i2,"#include <api_mmsys.sbp>\r\n");
447 i2+=lstrlen(buffer+i2);
448 }
449 if(this->dwOption&PJ_OP_COMMCTRL){
450 lstrcpy(buffer+i2,"#include <api_commctrl.sbp>\r\n");
451 i2+=lstrlen(buffer+i2);
452 }
453 if(this->dwOption&PJ_OP_RICHEDIT){
454 lstrcpy(buffer+i2,"#include <api_richedit.sbp>\r\n");
455 i2+=lstrlen(buffer+i2);
456 }
457 if(this->dwOption&PJ_OP_WINSOCK){
458 lstrcpy(buffer+i2,"#include <api_winsock2.sbp>\r\n");
459 i2+=lstrlen(buffer+i2);
460 }
461 }
462 if( !this->windowInfos.empty() )
463 {
464 lstrcpy(buffer+i2,"\r\n");
465 i2+=lstrlen(buffer+i2);
466 lstrcpy(buffer+i2,"'RADツールが生成するウィンドウ制御プログラム\r\n");
467 i2+=lstrlen(buffer+i2);
468 sprintf(buffer+i2,"#include \"Callback.wbp\"\r\n");
469 i2+=lstrlen(buffer+i2);
470 }
471 if(this->pobj_DBFileInfo->iNum>1){
472 lstrcpy(buffer+i2,"\r\n");
473 i2+=lstrlen(buffer+i2);
474 lstrcpy(buffer+i2,"'プロジェクト内のプログラム ファイル\r\n");
475 i2+=lstrlen(buffer+i2);
476 for(i=1;i<this->pobj_DBFileInfo->iNum;i++){
477 //メインファイルは含まない
478 sprintf(buffer+i2,"#include \"%s\"\r\n",this->pobj_DBFileInfo->ppobj_FileInfo[i]->GetPath().c_str());
479 i2+=lstrlen(buffer+i2);
480 lstrcpy(buffer+i2,"_ClearNamespaceImported\r\n");
481 i2+=lstrlen(buffer+i2);
482 }
483 }
484 if( !this->windowInfos.empty() )
485 {
486 lstrcpy(buffer+i2,"\r\n");
487 i2+=lstrlen(buffer+i2);
488 lstrcpy(buffer+i2,"'RADツールが生成するウィンドウ生成プログラム\r\n");
489 i2+=lstrlen(buffer+i2);
490 sprintf(buffer+i2,"#include \"MakeWindow.wbp\"\r\n");
491 i2+=lstrlen(buffer+i2);
492 }
493
494 //リソースファイル
495 lstrcpy(buffer+i2,"\r\n");
496 i2+=lstrlen(buffer+i2);
497 lstrcpy(buffer+i2,"'リソースファイル\r\n");
498 i2+=lstrlen(buffer+i2);
499 lstrcpy(buffer+i2,"#include \"resource.ab\"\r\n");
500 i2+=lstrlen(buffer+i2);
501 sprintf(buffer+i2,"#resource \"%s.rc\"\r\n",this->GetName().c_str());
502 i2+=lstrlen(buffer+i2);
503
504 //保存
505 sprintf(temporary,"%s%s.idx",this->GetWorkDir().GetPath().c_str(),this->GetName().c_str());
506 WriteBuffer(temporary,buffer,i2);
507
508
509 if( !this->windowInfos.empty() )
510 {
511 /////////////////////////////////////////////////////
512 //ウィンドウ関連ファイル(*.wnd)を作成、保存
513 if(this->ModifyOfMaterial){
514 sprintf(temporary,"%s%s.wnd",this->GetWorkDir().GetPath().c_str(),this->GetName().c_str());
515 SaveWindowFile( temporary, this->windowInfos );
516 }
517
518 //.wbpファイルを生成
519 SaveWindowProgram();
520 }
521
522
523 MakeWorkFile();
524
525 SetStatusText("");
526
527 this->modify=0;
528 this->ModifuOfResource=0;
529}
530
531bool Project::Close()
532{
533 extern HANDLE hHeap;
534 int i,WndNum;
535 HWND hChild,hCloseChild;
536 char temporary[MAX_PATH];
537
538
539 //保存確認
540 i=ProjectModifyCheck(0);
541 if(i==0) return false;
542 else if(i==2) MakeWorkFile();
543
544 //プロジェクトに関するMDIウィンドウをすべて閉じる
545 hChild=GetWindow(hClient,GW_CHILD);
546 while(hChild){
547 hCloseChild=hChild;
548 hChild=GetNextWindow(hChild,GW_HWNDNEXT);
549 WndNum=GetWndNum(hCloseChild);
550 if(IS_DOCUMENT_TEXT(MdiInfo[WndNum]->DocType)){
551 for(i=0;i<this->pobj_DBFileInfo->iNum;i++){
552 this->pobj_DBFileInfo->ppobj_FileInfo[i]->GetFullPath(temporary);
553 if(lstrcmpi(MdiInfo[WndNum]->path.c_str(),temporary)==0){
554
555 //変更フラグをオフにする
556 MdiInfo[WndNum]->pMdiTextEdit->UnModify();
557
558 SendMessage(hCloseChild,WM_CLOSE,0,0);
559 break;
560 }
561 }
562 }
563 else if(MdiInfo[WndNum]->DocType==WNDTYPE_RAD)
564 {
565 BOOST_FOREACH( const WindowInfo *pWindowInfo, windowInfos )
566 {
567 if( pWindowInfo->GetName() == MdiInfo[WndNum]->path ){
568 SendMessage(hCloseChild,WM_CLOSE,0,0);
569 break;
570 }
571 }
572 }
573 else if(MdiInfo[WndNum]->DocType==WNDTYPE_MENU){
574 for(i=0;i<this->NumberOfMenu;i++){
575 if( MdiInfo[WndNum]->path == this->pMenuInfo[i].IdName )
576 {
577 SendMessage(hCloseChild,WM_CLOSE,0,0);
578 break;
579 }
580 }
581 }
582 else if(MdiInfo[WndNum]->DocType==WNDTYPE_ICONEDIT){
583 for(i=0;this->resourceManager.iconResources.size();i++){
584 lstrcpy(temporary,this->resourceManager.iconResources[i].filepath.c_str());
585 lstrcpy( temporary, this->GetWorkDir().GetFullPath( temporary ).c_str() );
586 if(lstrcmpi(MdiInfo[WndNum]->path.c_str(),temporary)==0){
587 SendMessage(hCloseChild,WM_CLOSE,0,0);
588 break;
589 }
590 }
591 }
592 }
593
594 //ファイル情報のメモリを解放
595 delete this->pobj_DBFileInfo;
596
597 //ブレークポイントのオブジェクトを解放
598 delete this->pobj_DBBreakPoint;
599
600 //ウィンドウ情報のメモリを解放
601 BOOST_FOREACH( ActiveBasic::PM::WindowInfo *pWindowInfo, windowInfos )
602 {
603 //子ウィンドウのメモリを解放
604 BOOST_FOREACH( ActiveBasic::PM::ChildWindowInfo *pChildWindowInfo, pWindowInfo->childWindowInfos )
605 {
606 delete pChildWindowInfo;
607 }
608 pWindowInfo->childWindowInfos.clear();
609 }
610 this->windowInfos.Clear();
611
612 //メニュー情報のメモリを解放
613 HeapMenuDataFree(this->pMenuInfo,this->NumberOfMenu,0);
614 HeapDefaultFree(this->pMenuInfo);
615
616 //リソースのメモリを解放
617 this->resourceManager.Clear();
618
619 //プロジェクト ビューを非表示にする
620 extern HWND hProjectView;
621 if(IsWindowVisible(hProjectView)) SendMessage(hOwner,WM_COMMAND,IDM_PROJECTVIEW,0);
622 SetWindowText(hProjectView,"Project View");
623
624 extern HWND hProcedureTreeView;
625 extern HWND hMaterialTreeView;
626 pobj_FileTree->DeleteAllItems();
627 TreeView_DeleteAllItems(hProcedureTreeView);
628 TreeView_DeleteAllItems(hMaterialTreeView);
629
630 //ウィンドウ タイトルを変更
631 SetWindowText(hOwner,APPLICATION_NAME);
632
633 this->name = "";
634
635 //メニュー状態を設定
636 ResetState_DocMenu();
637
638 return true;
639}
Note: See TracBrowser for help on using the repository browser.