Changeset 619 in dev for trunk/ab5.0/abdev/abdev/src/ProjectManager/ProjectManager.cpp
- Timestamp:
- May 19, 2008, 5:41:26 PM (17 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/ab5.0/abdev/abdev/src/ProjectManager/ProjectManager.cpp
r615 r619 1 1 #include "stdafx.h" 2 3 using namespace ActiveBasic::IDE; 4 5 void OpenWorkfile( const std::string &path ); 6 7 void Project::Open( 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,this->dir,temporary,0,0); 21 lstrcat(this->dir,temporary); 22 23 //ファイルを開く、保存の初期ディレクトリをセット 24 lstrcpy(pobj_nv->DefSaveDir,this->dir); 25 26 27 ////////////////////////////////////////// 28 // リソースデータ用領域を確保 29 this->res.pCursorResInfo=(RESITEMINFO *)HeapAlloc(hHeap,0,1); 30 this->res.NumberOfCursorRes=0; 31 this->res.pBitmapResInfo=(RESITEMINFO *)HeapAlloc(hHeap,0,1); 32 this->res.NumberOfBitmapRes=0; 33 this->res.pIconResInfo=(RESITEMINFO *)HeapAlloc(hHeap,0,1); 34 this->res.NumberOfIconRes=0; 35 36 37 ////////////////////////////////////////// 38 //プロジェクトファイル(*.pj)をオープン 39 buffer=ReadBuffer(path); 40 if(!buffer) return; 41 42 //解析 43 this->pobj_DBFileInfo=new CDBFileInfo(); 44 bool isUseWindow = false; 45 for(i=0;;i++){ 46 if(buffer[i]=='\0') break; 47 if(buffer[i]=='\r'&&buffer[i+1]=='\n'&&buffer[i+2]=='#'){ 48 for(i+=3,i2=0;;i++,i2++){ 49 if(!IsVariableChar(buffer[i])){ 50 temporary[i2]=0; 51 break; 52 } 53 temporary[i2]=buffer[i]; 54 } 55 if(lstrcmpi(temporary,"VERSION")==0&&buffer[i]=='='){ 56 for(i++,i2=0;;i++,i2++){ 57 if((buffer[i]=='\r'&&buffer[i+1]=='\n')||buffer[i]=='\0'){ 58 temporary[i2]=0; 59 if(buffer[i]=='\r'&&buffer[i+1]=='\n') i-=2; 60 break; 61 } 62 temporary[i2]=buffer[i]; 63 } 64 this->dwVersion=GetValue(temporary); 65 } 66 else if(lstrcmpi(temporary,"MODULETYPE")==0&&buffer[i]=='='){ 67 for(i++,i2=0;;i++,i2++){ 68 if((buffer[i]=='\r'&&buffer[i+1]=='\n')||buffer[i]=='\0'){ 69 temporary[i2]=0; 70 if(buffer[i]=='\r'&&buffer[i+1]=='\n') i-=2; 71 break; 72 } 73 temporary[i2]=buffer[i]; 74 } 75 this->moduleType = (ActiveBasic::Common::TargetModuleType::EnumType)atoi(temporary); 76 } 77 else if(lstrcmpi(temporary,"NAME")==0&&buffer[i]=='='){ 78 for(i++,i2=0;;i++,i2++){ 79 if((buffer[i]=='\r'&&buffer[i+1]=='\n')||buffer[i]=='\0'){ 80 temporary[i2]=0; 81 break; 82 } 83 temporary[i2]=buffer[i]; 84 } 85 this->name = temporary; 86 } 87 else if(lstrcmpi(temporary,"PLATFORM")==0&&buffer[i]=='='){ 88 for(i++,i2=0;;i++,i2++){ 89 if((buffer[i]=='\r'&&buffer[i+1]=='\n')||buffer[i]=='\0'){ 90 temporary[i2]=0; 91 if(buffer[i]=='\r'&&buffer[i+1]=='\n') i-=2; 92 break; 93 } 94 temporary[i2]=buffer[i]; 95 } 96 i2=atoi(temporary); 97 extern HWND hSelectCompilerCombo; 98 if(i2==32){ 99 //プラットフォームにWin32を選択 100 SendMessage(hSelectCompilerCombo,CB_SETCURSEL,0,0); 101 } 102 else if(i2==64){ 103 //プラットフォームにWin64を選択 104 SendMessage(hSelectCompilerCombo,CB_SETCURSEL,1,0); 105 } 106 SendMessage(hSelectCompilerCombo,WM_COMMAND,MAKELONG(0,CBN_SELCHANGE),0); 107 } 108 else if(lstrcmpi(temporary,"USEWINDOW")==0&&buffer[i]=='='){ 109 for(i++,i2=0;;i++,i2++){ 110 if((buffer[i]=='\r'&&buffer[i+1]=='\n')||buffer[i]=='\0'){ 111 temporary[i2]=0; 112 if(buffer[i]=='\r'&&buffer[i+1]=='\n') i-=2; 113 break; 114 } 115 temporary[i2]=buffer[i]; 116 } 117 if( atoi(temporary) > 0 ) 118 { 119 isUseWindow = true; 120 } 121 } 122 else if(lstrcmpi(temporary,"OPTION")==0&&buffer[i]=='='){ 123 for(i++,i2=0;;i++,i2++){ 124 if((buffer[i]=='\r'&&buffer[i+1]=='\n')||buffer[i]=='\0'){ 125 temporary[i2]=0; 126 if(buffer[i]=='\r'&&buffer[i+1]=='\n') i-=2; 127 break; 128 } 129 temporary[i2]=buffer[i]; 130 } 131 this->dwOption=GetValue(temporary); 132 } 133 else if(lstrcmpi(temporary,"OUTPUT_RELEASE")==0&&buffer[i]=='='){ 134 for(i++,i2=0;;i++,i2++){ 135 if((buffer[i]=='\r'&&buffer[i+1]=='\n')||buffer[i]=='\0'){ 136 temporary[i2]=0; 137 if(buffer[i]=='\r'&&buffer[i+1]=='\n') i-=2; 138 break; 139 } 140 temporary[i2]=buffer[i]; 141 } 142 lstrcpy(this->lpszOutput_Release,temporary); 143 } 144 else if(lstrcmpi(temporary,"OUTPUT_DEBUG")==0&&buffer[i]=='='){ 145 for(i++,i2=0;;i++,i2++){ 146 if((buffer[i]=='\r'&&buffer[i+1]=='\n')||buffer[i]=='\0'){ 147 temporary[i2]=0; 148 if(buffer[i]=='\r'&&buffer[i+1]=='\n') i-=2; 149 break; 150 } 151 temporary[i2]=buffer[i]; 152 } 153 lstrcpy(this->lpszOutput_Debug,temporary); 154 } 155 else if(lstrcmpi(temporary,"MANIFEST")==0&&buffer[i]=='='){ 156 for(i++,i2=0;;i++,i2++){ 157 if((buffer[i]=='\r'&&buffer[i+1]=='\n')||buffer[i]=='\0'){ 158 temporary[i2]=0; 159 if(buffer[i]=='\r'&&buffer[i+1]=='\n') i-=2; 160 break; 161 } 162 temporary[i2]=buffer[i]; 163 } 164 lstrcpy(this->szManifestPath,temporary); 165 } 166 else if(lstrcmpi(temporary,"DEBUG_CMD_LINE")==0&&buffer[i]=='='){ 167 for(i++,i2=0;;i++,i2++){ 168 if((buffer[i]=='\r'&&buffer[i+1]=='\n')||buffer[i]=='\0'){ 169 temporary[i2]=0; 170 if(buffer[i]=='\r'&&buffer[i+1]=='\n') i-=2; 171 break; 172 } 173 temporary[i2]=buffer[i]; 174 } 175 lstrcpy(this->szCmdLine,temporary); 176 } 177 else if(lstrcmpi(temporary,"DEBUG_EXE_PATH")==0&&buffer[i]=='='){ 178 for(i++,i2=0;;i++,i2++){ 179 if((buffer[i]=='\r'&&buffer[i+1]=='\n')||buffer[i]=='\0'){ 180 temporary[i2]=0; 181 if(buffer[i]=='\r'&&buffer[i+1]=='\n') i-=2; 182 break; 183 } 184 temporary[i2]=buffer[i]; 185 } 186 lstrcpy(this->szExePath,temporary); 187 } 188 else if(lstrcmpi(temporary,"RESOURCE")==0&&buffer[i]=='='){ 189 for(i++,i2=0;;i++,i2++){ 190 if((buffer[i]=='\r'&&buffer[i+1]=='\n')||buffer[i]=='\0'){ 191 temporary[i2]=0; 192 if(buffer[i]=='\r'&&buffer[i+1]=='\n') i-=2; 193 break; 194 } 195 temporary[i2]=buffer[i]; 196 } 197 if(temporary[0]!='\0'&&(!(temporary[0]=='0'&&temporary[1]=='\0'))){ 198 lstrcpy(this->ResourceFileName,temporary); 199 GetResourceData(); 200 } 201 else{ 202 sprintf(this->ResourceFileName,"%s.rc",this->GetName().c_str()); 203 } 204 } 205 else if(lstrcmpi(temporary,"SOURCE")==0&&buffer[i]=='\r'&&buffer[i+1]=='\n'){ 206 while(1){ 207 for(i+=2,i2=0;;i++,i2++){ 208 if((buffer[i]=='\r'&&buffer[i+1]=='\n')||buffer[i]=='\0'){ 209 temporary[i2]=0; 210 break; 211 } 212 temporary[i2]=buffer[i]; 213 } 214 if(temporary[0]=='\0') break; 215 this->pobj_DBFileInfo->add(temporary,0); 216 217 if(buffer[i]=='\0') break; 218 } 219 } 220 else{ 221 //不明なパラメータは無視 222 for(i++;;i++){ 223 if((buffer[i]=='\r'&&buffer[i+1]=='\n')||buffer[i]=='\0'){ 224 if(buffer[i]=='\r'&&buffer[i+1]=='\n') i-=2; 225 break; 226 } 227 } 228 } 229 if(buffer[i]=='\0') break; 230 } 231 } 232 HeapDefaultFree(buffer); 233 234 //古いバージョンファイルを考慮 235 if(this->dwVersion<=4){ 236 if( this->GetModuleType() == ActiveBasic::Common::TargetModuleType::Dll ) 237 { 238 sprintf(this->lpszOutput_Release,".\\%s.dll",this->GetName().c_str()); 239 } 240 else 241 { 242 sprintf(this->lpszOutput_Release,".\\%s.exe",this->GetName().c_str()); 243 } 244 sprintf(this->lpszOutput_Debug,".\\%s_debug.exe",this->GetName().c_str()); 245 } 246 247 //ブレークポイントを初期化 248 this->pobj_DBBreakPoint=new CDBBreakPoint(); 249 250 251 if( isUseWindow ) 252 { 253 ///////////////////////////////////////////// 254 //ウィンドウ定義ファイル(*.wnd)をオープン 255 sprintf(temp2,"%s%s.wnd",this->dir,this->GetName().c_str()); 256 if(!OpenWindowFile(temp2)) return; 257 } 258 else{ 259 this->windowInfos.Clear(); 260 261 this->NumberOfMenu=0; 262 this->pMenuInfo=(MENU_INFO *)HeapAlloc(hHeap,HEAP_ZERO_MEMORY,1); 263 } 264 265 OpenWorkfile( this->dir + this->GetName() + ".wrk" ); 266 267 this->modify=0; 268 this->ModifyOfMaterial=0; 269 this->ModifuOfResource=0; 270 } 271 272 bool Project::Close() 273 { 274 extern HANDLE hHeap; 275 extern MDIINFO MdiInfo[MAX_WNDNUM]; 276 int i,i2,WndNum; 277 HWND hChild,hCloseChild; 278 char temporary[MAX_PATH]; 279 280 281 //保存確認 282 i=ProjectModifyCheck(0); 283 if(i==0) return false; 284 else if(i==2) MakeWorkFile(); 285 286 //プロジェクトに関するMDIウィンドウをすべて閉じる 287 hChild=GetWindow(hClient,GW_CHILD); 288 while(hChild){ 289 hCloseChild=hChild; 290 hChild=GetNextWindow(hChild,GW_HWNDNEXT); 291 WndNum=GetWndNum(hCloseChild); 292 if(IS_DOCUMENT_TEXT(MdiInfo[WndNum].DocType)){ 293 for(i=0;i<this->pobj_DBFileInfo->iNum;i++){ 294 this->pobj_DBFileInfo->ppobj_FileInfo[i]->GetFullPath(temporary); 295 if(lstrcmpi(MdiInfo[WndNum].path,temporary)==0){ 296 297 //変更フラグをオフにする 298 MdiInfo[WndNum].pMdiTextEdit->UnModify(); 299 300 SendMessage(hCloseChild,WM_CLOSE,0,0); 301 break; 302 } 303 } 304 } 305 else if(MdiInfo[WndNum].DocType==WNDTYPE_RAD) 306 { 307 BOOST_FOREACH( const WindowInfo *pWindowInfo, windowInfos ) 308 { 309 if( pWindowInfo->GetName() == MdiInfo[WndNum].path ){ 310 SendMessage(hCloseChild,WM_CLOSE,0,0); 311 break; 312 } 313 } 314 } 315 else if(MdiInfo[WndNum].DocType==WNDTYPE_MENU){ 316 for(i=0;i<this->NumberOfMenu;i++){ 317 if(lstrcmp(MdiInfo[WndNum].path,this->pMenuInfo[i].IdName)==0){ 318 SendMessage(hCloseChild,WM_CLOSE,0,0); 319 break; 320 } 321 } 322 } 323 else if(MdiInfo[WndNum].DocType==WNDTYPE_ICONEDIT){ 324 for(i=0;this->res.NumberOfIconRes;i++){ 325 lstrcpy(temporary,this->res.pIconResInfo[i].path); 326 GetFullPath(temporary,this->dir); 327 if(lstrcmpi(MdiInfo[WndNum].path,temporary)==0){ 328 SendMessage(hCloseChild,WM_CLOSE,0,0); 329 break; 330 } 331 } 332 } 333 } 334 335 //ファイル情報のメモリを解放 336 delete this->pobj_DBFileInfo; 337 338 //ブレークポイントのオブジェクトを解放 339 delete this->pobj_DBBreakPoint; 340 341 //ウィンドウ情報のメモリを解放 342 BOOST_FOREACH( WindowInfo *pWindowInfo, windowInfos ) 343 { 344 HeapDefaultFree(pWindowInfo->caption); 345 HeapDefaultFree(pWindowInfo->ClassName); 346 HeapDefaultFree(pWindowInfo->CallBackName); 347 HeapDefaultFree(pWindowInfo->filepath); 348 if(pWindowInfo->MenuID) 349 HeapDefaultFree(pWindowInfo->MenuID); 350 if(pWindowInfo->IconResName) 351 HeapDefaultFree(pWindowInfo->IconResName); 352 353 //子ウィンドウのメモリを解放 354 for(i2=0;i2<pWindowInfo->childWindowInfos.size();i2++){ 355 HeapDefaultFree(pWindowInfo->childWindowInfos[i2]->IdName); 356 HeapDefaultFree(pWindowInfo->childWindowInfos[i2]->caption); 357 if(pWindowInfo->childWindowInfos[i2]->Control==CT_IMAGEBOX){ 358 //イメージ ボックスの場合 359 HeapDefaultFree(pWindowInfo->childWindowInfos[i2]->ImageCtrlInfo.path); 360 } 361 362 delete pWindowInfo->childWindowInfos[i2]; 363 } 364 pWindowInfo->childWindowInfos.clear(); 365 } 366 this->windowInfos.Clear(); 367 368 //メニュー情報のメモリを解放 369 HeapMenuDataFree(this->pMenuInfo,this->NumberOfMenu,0); 370 HeapDefaultFree(this->pMenuInfo); 371 372 //リソースのメモリを解放 373 for(i=0;i<this->res.NumberOfCursorRes;i++){ 374 HeapDefaultFree(this->res.pCursorResInfo[i].IdName); 375 HeapDefaultFree(this->res.pCursorResInfo[i].path); 376 } 377 HeapDefaultFree(this->res.pCursorResInfo); 378 for(i=0;i<this->res.NumberOfBitmapRes;i++){ 379 HeapDefaultFree(this->res.pBitmapResInfo[i].IdName); 380 HeapDefaultFree(this->res.pBitmapResInfo[i].path); 381 } 382 HeapDefaultFree(this->res.pBitmapResInfo); 383 for(i=0;i<this->res.NumberOfIconRes;i++){ 384 HeapDefaultFree(this->res.pIconResInfo[i].IdName); 385 HeapDefaultFree(this->res.pIconResInfo[i].path); 386 } 387 HeapDefaultFree(this->res.pIconResInfo); 388 389 //プロジェクト ビューを非表示にする 390 extern HWND hProjectView; 391 if(IsWindowVisible(hProjectView)) SendMessage(hOwner,WM_COMMAND,IDM_PROJECTVIEW,0); 392 SetWindowText(hProjectView,"Project View"); 393 394 extern HWND hProcedureTreeView; 395 extern HWND hMaterialTreeView; 396 TreeView_DeleteAllItems(pobj_FileTree->hTree); 397 TreeView_DeleteAllItems(hProcedureTreeView); 398 TreeView_DeleteAllItems(hMaterialTreeView); 399 400 //ウィンドウ タイトルを変更 401 SetWindowText(hOwner,APPLICATION_NAME); 402 403 this->name = ""; 404 405 //メニュー状態を設定 406 ResetState_DocMenu(); 407 408 return true; 409 }
Note:
See TracChangeset
for help on using the changeset viewer.