Ignore:
Timestamp:
May 19, 2008, 5:41:26 PM (16 years ago)
Author:
dai_9181
Message:

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

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/ab5.0/abdev/abdev/src/ProjectManager/ProjectManager.cpp

    r615 r619  
    11#include "stdafx.h"
     2
     3using namespace ActiveBasic::IDE;
     4
     5void OpenWorkfile( const std::string &path );
     6
     7void 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
     272bool 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.