Changeset 655 in dev


Ignore:
Timestamp:
Jun 18, 2008, 11:03:59 PM (16 years ago)
Author:
dai_9181
Message:

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

Location:
trunk/ab5.0/abdev/abdev
Files:
1 added
1 deleted
22 edited

Legend:

Unmodified
Added
Removed
  • trunk/ab5.0/abdev/abdev/Caret.cpp

    r629 r655  
    155155}
    156156
    157 void GetScrollBaseCaretPos(int WndNum,int *pNaturalBaseX,int *pNaturalBaseY){
    158 
    159     HWND hEdit;
    160     hEdit=MdiInfo[WndNum]->pMdiTextEdit->hEdit;
     157void GetScrollBaseCaretPos(MDIINFO *pMdiInfo,int *pNaturalBaseX,int *pNaturalBaseY)
     158{
     159    HWND hEdit = pMdiInfo->pMdiTextEdit->hEdit;
    161160
    162161    //垂直スクロールバーの位置
     
    236235    x=MdiInfo[WndNum]->pMdiTextEdit->StartCaretPos.x;
    237236    y=MdiInfo[WndNum]->pMdiTextEdit->StartCaretPos.y;
    238     GetScrollBaseCaretPos(WndNum,&x,&y);
     237    GetScrollBaseCaretPos(MdiInfo[WndNum],&x,&y);
    239238
    240239    //エディタ画面左端のコントロールタブ
     
    466465    x=MdiInfo[WndNum]->pMdiTextEdit->StartCaretPos.x;
    467466    y=MdiInfo[WndNum]->pMdiTextEdit->StartCaretPos.y;
    468     GetScrollBaseCaretPos(WndNum,&x,&y);
     467    GetScrollBaseCaretPos(MdiInfo[WndNum],&x,&y);
    469468
    470469    //垂直方向
  • trunk/ab5.0/abdev/abdev/ClassTree.cpp

    r629 r655  
    2020    return lpdata%MAX_HASH;
    2121}
    22 void CClassTreeView::AddValidItem(HTREEITEM hItem,int iFileNum){
     22void CClassTreeView::AddValidItem(HTREEITEM hItem,HTREEITEM hFileTreeItem){
    2323    //ハッシュ値を取得
    2424    int key;
     
    4242
    4343    pth->hItem=hItem;
    44     pth->iFileNum=iFileNum;
     44    pth->hFileTreeItem = hFileTreeItem;
    4545    pth->pNextData=0;
    4646}
     
    8585
    8686void CClassTreeView::DeleteTreeHash(TREEHASH *pth){
    87     if(pth->hItem && (iNowFile==-1 || iNowFile==pth->iFileNum)){
     87    if(pth->hItem && (hNowFileTreeItem==(HTREEITEM)-1 || hNowFileTreeItem==pth->hFileTreeItem)){
    8888        if(pth->pNextData){
    8989            DeleteTreeHash(pth->pNextData);
     
    9696
    9797
    98 HTREEITEM CClassTreeView::insert(HTREEITEM hParentItem,int flag,char *lpszName,int iFileNum){
     98HTREEITEM CClassTreeView::insert(HTREEITEM hParentItem,int flag,char *lpszName,HTREEITEM hFileTreeItem){
    9999    char temporary[255];
    100100
     
    110110        if(lstrcmp(lpszName,tvItem.pszText)==0){
    111111            //既に挿入済みの場合
    112             AddValidItem(hNextItem,iFileNum);
     112            AddValidItem(hNextItem,hFileTreeItem);
    113113            return hNextItem;
    114114        }
     
    158158
    159159    hNextItem=TreeView_InsertItem(hTreeWnd,&tv);
    160     AddValidItem(hNextItem,iFileNum);
     160    AddValidItem(hNextItem,hFileTreeItem);
    161161    return hNextItem;
    162162}
     
    170170    while(bSearchingClasses) Sleep(10);
    171171
    172     iNowFile=-1;
     172    this->hNowFileTreeItem = (HTREEITEM)-1;
    173173
    174174    int i;
     
    186186    }
    187187}
    188 void CClassTreeView::init(HWND hwnd,int iFileNum){
     188void CClassTreeView::init(HWND hwnd,HTREEITEM hFileTreeItem){
    189189    hTreeWnd=hwnd;
    190190
    191     iNowFile=iFileNum;
     191    this->hNowFileTreeItem = hFileTreeItem;
    192192
    193193    int i;
     
    203203        TVI_ROOT,
    204204        CTV_ROOT,
    205         temporary,-1);
     205        temporary,(HTREEITEM)-1);
    206206}
    207207void CClassTreeView::InsertGlobalProcedureFolder(void){
     
    209209        hRootFolder,
    210210        CTV_FOLDER,
    211         "グローバル関数",-1);
    212 }
    213 
    214 HTREEITEM CClassTreeView::InsertGlobalProcedure(int flag,char *lpszName,int iFileNum){
     211        "グローバル関数",(HTREEITEM)-1);
     212}
     213
     214HTREEITEM CClassTreeView::InsertGlobalProcedure(int flag,char *lpszName,HTREEITEM hFileTreeItem){
    215215    return pobj_ClassTreeView->insert(
    216216        hGlobalProcedureFolder,
    217217        CTV_GLOBAL_PROC,
    218218        lpszName,
    219         iFileNum);
    220 }
    221 
    222 HTREEITEM CClassTreeView::insert_code_item(HTREEITEM hParentItem,int flag,char *lpszName,int iFileNum,char *pBuf,int p){
     219        hFileTreeItem);
     220}
     221
     222HTREEITEM CClassTreeView::insert_code_item(HTREEITEM hParentItem,int flag,char *lpszName,HTREEITEM hFileTreeItem,char *pBuf,int p){
    223223    int i4;
    224224    i4=NumberOfProcedures;
     
    226226    pProcInfo[i4].name=(char *)HeapAlloc(hHeap,0,lstrlen(lpszName)+1);
    227227    lstrcpy(pProcInfo[i4].name,lpszName);
    228     pProcInfo[i4].FileNum=iFileNum;
     228    pProcInfo[i4].hFileTreeItem = hFileTreeItem;
    229229
    230230    //コード位置
     
    237237        flag,
    238238        lpszName,
    239         iFileNum);
     239        hFileTreeItem);
    240240
    241241    pProcInfo[i4].hTreeItem=hTempItem;
     
    246246}
    247247
    248 void CClassTreeView::InsertClassFolder(char *lpszName,int iFileNum,char *pBuf,int p){
    249     hNowClassFolder=insert_code_item(hRootFolder,CTV_CLASS,lpszName,iFileNum,pBuf,p);
    250 }
    251 void CClassTreeView::InsertClassMember(int flag,char *lpszName,int iFileNum,char *pBuf,int p){
    252     insert_code_item(hNowClassFolder,flag,lpszName,iFileNum,pBuf,p);
     248void CClassTreeView::InsertClassFolder(char *lpszName,HTREEITEM hFileTreeItem,char *pBuf,int p){
     249    hNowClassFolder=insert_code_item(hRootFolder,CTV_CLASS,lpszName,hFileTreeItem,pBuf,p);
     250}
     251void CClassTreeView::InsertClassMember(int flag,char *lpszName,HTREEITEM hFileTreeItem,char *pBuf,int p){
     252    insert_code_item(hNowClassFolder,flag,lpszName,hFileTreeItem,pBuf,p);
    253253}
    254254
     
    258258
    259259
    260 void AnalysisClass(char *pBuf,int *p,int iFileNum){
     260void AnalysisClass(char *pBuf,int *p,HTREEITEM hFileTreeItem){
    261261    int i2;
    262262    i2=*p;
     
    272272    pobj_ClassTreeView->InsertClassFolder(
    273273        pobj_ClassInfo->ClassName,
    274         iFileNum,
     274        hFileTreeItem,
    275275        pBuf,
    276276        i2);
     
    307307            }
    308308        }
    309         pobj_ClassTreeView->InsertClassMember(flag,pobj_ClassInfo->pMemberInfo[i].pName,iFileNum,pBuf,pobj_ClassInfo->pMemberInfo[i].code_pos);
     309        pobj_ClassTreeView->InsertClassMember(flag,pobj_ClassInfo->pMemberInfo[i].pName,hFileTreeItem,pBuf,pobj_ClassInfo->pMemberInfo[i].code_pos);
    310310    }
    311311
     
    316316
    317317
    318 void SetClassTreeFromOneFile_Buf( char *pBuf, int iFileNum ){
     318void SetClassTreeFromOneFile_Buf( char *pBuf, HTREEITEM hFileTreeItem ){
    319319    int i2,i3,i4;
    320320    char temporary[GENERAL_SIZE];
     
    345345                // クラスの解析
    346346                /////////////////////////////
    347                 AnalysisClass(pBuf,&i4,iFileNum);
     347                AnalysisClass(pBuf,&i4,hFileTreeItem);
    348348
    349349                i2=i4-1;
     
    384384                pobj_ClassTreeView->pProcInfo[i4].name=(char *)HeapAlloc(hHeap,0,lstrlen(temporary)+1);
    385385                lstrcpy(pobj_ClassTreeView->pProcInfo[i4].name,temporary);
    386                 pobj_ClassTreeView->pProcInfo[i4].FileNum=iFileNum;
     386                pobj_ClassTreeView->pProcInfo[i4].hFileTreeItem = hFileTreeItem;
    387387
    388388                //定義行の選択範囲
     
    433433                    CTV_GLOBAL_PROC,
    434434                    pobj_ClassTreeView->pProcInfo[i4].name,
    435                     iFileNum);
     435                    hFileTreeItem);
    436436                pobj_ClassTreeView->pProcInfo[i4].hTreeItem=hTempItem;
    437437
     
    443443    }
    444444}
    445 void SetClassTreeFromOneFile(char *lpszFilePath,int iFileNum){
     445void SetClassTreeFromOneFile( const ActiveBasic::PM::FM::File &file){
    446446    int WndNum;
    447447    HWND hChild=GetWindow(hClient,GW_CHILD);
     
    451451        {
    452452            if(IS_DOCUMENT_TEXT(MdiInfo[WndNum]->DocType)){
    453                 if(lstrcmpi(MdiInfo[WndNum]->path.c_str(),lpszFilePath)==0) break;
     453                if(lstrcmpi(MdiInfo[WndNum]->path.c_str(),file.GetFullPath().c_str())==0) break;
    454454            }
    455455            hChild=GetNextWindow(hChild,GW_HWNDNEXT);
     
    464464    else{
    465465        //開かれていない場合
    466         pBuf=ReadBuffer(lpszFilePath);
     466        pBuf=ReadBuffer(file.GetFullPath());
    467467        if(!pBuf) pBuf=(char *)HeapAlloc(hHeap,HEAP_ZERO_MEMORY,1);
    468468    }
    469469
    470     SetClassTreeFromOneFile_Buf( pBuf, iFileNum );
     470    SetClassTreeFromOneFile_Buf( pBuf, file.GetTreeItemHandle() );
    471471
    472472    if(!hChild) HeapDefaultFree(pBuf);
    473473}
    474 
    475 void SetProcedureTreeData(void *temp_iFileNum){
    476     int i;
    477     char temporary[MAX_PATH];
     474void SetClassTreeFromAllFile( ActiveBasic::PM::FM::Folder &folder )
     475{
     476    BOOST_FOREACH( ActiveBasic::PM::FM::Folder &childFolder, folder.folders )
     477    {
     478        SetClassTreeFromAllFile( childFolder );
     479    }
     480
     481    BOOST_FOREACH( ActiveBasic::PM::FM::File &file, folder.files )
     482    {
     483        SetClassTreeFromOneFile( file );
     484    }
     485}
     486
     487void SetProcedureTreeData(void *temp_hFileTreeItem)
     488{
    478489    BOOL bExpand;
    479490    TVITEM tvItem;
    480491    SCROLLINFO si;
    481492
    482     int iFileNum;
    483     iFileNum=(int)temp_iFileNum;
     493    HTREEITEM hFileTreeItem = (HTREEITEM)temp_hFileTreeItem;
    484494
    485495    if(bSearchingClasses){
     
    504514
    505515        //プロシージャ情報のメモリを解放
    506         for(i=0;i<pobj_ClassTreeView->NumberOfProcedures;i++){
    507             if(iFileNum==-1 || iFileNum==pobj_ClassTreeView->pProcInfo[i].FileNum){
     516        for(int i=0;i<pobj_ClassTreeView->NumberOfProcedures;i++){
     517            if(hFileTreeItem==(HTREEITEM)-1 || hFileTreeItem==pobj_ClassTreeView->pProcInfo[i].hFileTreeItem){
    508518                HeapDefaultFree(pobj_ClassTreeView->pProcInfo[i].name);
    509519            }
     
    539549
    540550
    541     pobj_ClassTreeView->init(hProcedureTreeView,iFileNum);
     551    pobj_ClassTreeView->init(hProcedureTreeView,hFileTreeItem);
    542552
    543553    //ルートフォルダ
     
    553563    if( projectInfo.IsOpened() ){
    554564        // プロジェクトが開かれているとき
    555         if(iFileNum==-1){
     565        if(hFileTreeItem==(HTREEITEM)-1){
     566            boost::mutex::scoped_lock lock( projectInfo.fileSystem.mutex );
     567
    556568            //プロジェクトのすべてのファイルを解析
    557             for(i=0;i<projectInfo.pobj_DBFileInfo->iNum;i++){
    558                 projectInfo.pobj_DBFileInfo->ppobj_FileInfo[i]->GetFullPath(temporary);
    559 
    560                 SetClassTreeFromOneFile(temporary,i);
    561             }
     569            SetClassTreeFromAllFile( projectInfo.fileSystem.root );
    562570
    563571            //不要になったアイテムを除去
     
    569577            /////////////////////////////////
    570578
    571             projectInfo.pobj_DBFileInfo->ppobj_FileInfo[iFileNum]->GetFullPath(temporary);
    572 
    573             SetClassTreeFromOneFile(temporary,iFileNum);
     579            SetClassTreeFromOneFile( projectInfo.fileSystem.root.FindFile( hFileTreeItem ) );
    574580        }
    575581    }
     
    580586        int WndNum=GetWndNum(hChild);
    581587        char *pBuf=MdiInfo[WndNum]->pMdiTextEdit->buffer;
    582         SetClassTreeFromOneFile_Buf( pBuf, -1 );
     588        SetClassTreeFromOneFile_Buf( pBuf, (HTREEITEM)-1 );
    583589
    584590    }
     
    601607    if(bRetrySearchingClasses){
    602608        bRetrySearchingClasses=0;
    603         ResetClassTree(iFileNum);
     609        ResetClassTree(hFileTreeItem);
    604610    }
    605611
     
    617623    _endthread();
    618624}
    619 void ResetClassTree(int iFileNum){
    620     _beginthread(SetProcedureTreeData,0,(void *)iFileNum);
    621 }
     625void ResetClassTree(HTREEITEM hFileTreeItem){
     626    _beginthread(SetProcedureTreeData,0,(void *)hFileTreeItem);
     627}
  • trunk/ab5.0/abdev/abdev/Common.h

    r653 r655  
    406406#define PROJECT_VERSION 10
    407407
    408 class CFileInfo{
    409     std::string filepath;
    410 public:
    411     HTREEITEM m_hTreeItem;
    412     CFileInfo( const std::string &filepath, HTREEITEM hTreeItem );
    413 
    414     const std::string &GetPath() const
    415     {
    416         return filepath;
    417     }
    418 
    419     void GetFullPath(char *buffer);
    420 };
    421 class CDBFileInfo{
    422 public:
    423     int iNum;
    424     CFileInfo **ppobj_FileInfo;
    425 
    426     CDBFileInfo();
    427     ~CDBFileInfo();
    428 
    429     void add(char *path,HTREEITEM hTreeItem);
    430     void del(HTREEITEM hTreeItem);
    431     const std::string &GetPath(HTREEITEM hTreeItem);
    432     BOOL IsMainFile(HTREEITEM hTreeItem);
    433 
    434     BOOL dupli_check(char *path);
    435 };
    436 
    437408struct PROCINFO{
    438409    char *name;
    439     int FileNum;
    440410    HTREEITEM hTreeItem;
     411
     412    HTREEITEM hFileTreeItem;
    441413
    442414    int code_pos;
     
    597569int GetWndNum(HWND hChild);
    598570int GetNowWndNum(void);
    599 int GetFileNum(int WndNum);
    600571void SendTextEditResizeEvent(HWND hwnd);
    601572void RedrawAllWindow(void);
     
    761732void TextEdit_GetSel(int WndNum,CHARRANGE *pCharRange);
    762733void TextEdit_GetSelText(int WndNum,CHARRANGE *pCharRange,char *buffer);
    763 void GetScrollBaseCaretPos(int WndNum,int *pNaturalBaseX,int *pNaturalBaseY);
     734void GetScrollBaseCaretPos(MDIINFO *pMdiInfo,int *pNaturalBaseX,int *pNaturalBaseY);
    764735void GetNaturalBaseCaretPos(int WndNum,int *pScrollBaseX,int *pScrollBaseY);
    765736void TextEdit_SetSel(int WndNum,int StartIndex,int EndIndex,BOOL bShowCenter=0);
     
    883854struct TREEHASH{
    884855    HTREEITEM hItem;
    885     int iFileNum;
     856    HTREEITEM hFileTreeItem;
    886857    TREEHASH *pNextData;
    887858};
     
    896867class CClassTreeView{
    897868    HWND hTreeWnd;
    898     int iNowFile;
     869    HTREEITEM hNowFileTreeItem;
    899870    TREEHASH tree_data[MAX_HASH];
    900871
     
    904875    int hash_default(LONG_PTR lpdata);
    905876
    906     void AddValidItem(HTREEITEM hItem,int iFileNum);
     877    void AddValidItem(HTREEITEM hItem,HTREEITEM hFileTreeItem);
    907878    BOOL delete_check(HTREEITEM hItem);
    908879    void DeleteInvalidItems(HTREEITEM hItem);
    909880    void DeleteTreeHash(TREEHASH *pth);
    910881
    911     HTREEITEM insert(HTREEITEM hParentItem,int flag,char *lpszName,int iFileNum);
     882    HTREEITEM insert(HTREEITEM hParentItem,int flag,char *lpszName,HTREEITEM hFileTreeItem);
    912883
    913884public:
     
    922893    CClassTreeView();
    923894    ~CClassTreeView();
    924     void init(HWND hwnd,int iFileNum);
     895    void init(HWND hwnd,HTREEITEM hFileTreeItem);
    925896
    926897    void InsertRootFolder(void);
    927898    void InsertGlobalProcedureFolder(void);
    928     HTREEITEM InsertGlobalProcedure(int flag,char *lpszName,int iFileNum);
    929     HTREEITEM insert_code_item(HTREEITEM hParentItem,int flag,char *lpszName,int iFileNum,char *pBuf,int p);
    930     void InsertClassFolder(char *lpszName,int iFileNum,char *pBuf,int p);
    931     void InsertClassMember(int flag,char *lpszName,int iFileNum,char *pBuf,int p);
     899    HTREEITEM InsertGlobalProcedure(int flag,char *lpszName,HTREEITEM hFileTreeItem);
     900    HTREEITEM insert_code_item(HTREEITEM hParentItem,int flag,char *lpszName,HTREEITEM hFileTreeItem,char *pBuf,int p);
     901    void InsertClassFolder(char *lpszName,HTREEITEM hFileTreeItem,char *pBuf,int p);
     902    void InsertClassMember(int flag,char *lpszName,HTREEITEM hFileTreeItem,char *pBuf,int p);
    932903    void finish();
    933904};
    934905extern CClassTreeView *pobj_ClassTreeView;
    935 void ResetClassTree(int iFileNum);
     906void ResetClassTree(HTREEITEM hFileTreeItem);
    936907
    937908//ProjectControl.cpp
  • trunk/ab5.0/abdev/abdev/Complement.cpp

    r629 r655  
    391391    POINT pos;
    392392    pos=MdiInfo[WndNum]->pMdiTextEdit->StartCaretPos;
    393     GetScrollBaseCaretPos(WndNum,(int *)&pos.x,(int *)&pos.y);
     393    GetScrollBaseCaretPos(MdiInfo[WndNum],(int *)&pos.x,(int *)&pos.y);
    394394
    395395    pos.x=(pos.x-1)*font_width    +iControlTabSpace;
  • trunk/ab5.0/abdev/abdev/DrawBuffer.cpp

    r651 r655  
    311311    BaseX=0;
    312312    BaseY=0;
    313     GetScrollBaseCaretPos(WndNum,&BaseX,&BaseY);
     313    GetScrollBaseCaretPos(MdiInfo[WndNum],&BaseX,&BaseY);
    314314
    315315    if(pobj_nv->bEditor_CaretLine_BackGround){
  • trunk/ab5.0/abdev/abdev/FileTree.cpp

    r653 r655  
    2222                hTreeItem = pobj_FileTree->GetSelectedItem();
    2323
    24                 std::string tempPath = projectInfo.pobj_DBFileInfo->GetPath(hTreeItem);
     24                std::string tempPath = projectInfo.fileSystem.root.FindFile( hTreeItem ).GetRelationalPath();
    2525
    2626                //絶対パス、相対パスを表示
     
    107107                        hTreeItem=TreeView_GetSelection(hwnd);
    108108
    109                         std::string tempPath = projectInfo.pobj_DBFileInfo->GetPath(hTreeItem);
     109                        std::string tempPath = projectInfo.fileSystem.root.FindFile( hTreeItem ).GetRelationalPath();
    110110
    111111                        lstrcpy( temporary, tempPath.c_str() );
     
    194194}
    195195
    196 void FileListTreeViewCtrl::Reset( CDBFileInfo *pFileInfos )
    197 {
     196void FileListTreeViewCtrl::Reset( HTREEITEM hParent, ActiveBasic::PM::FM::Folder &folder )
     197{
     198    char temporary[MAX_PATH],temp2[MAX_PATH];
     199
     200    lstrcpy( temporary, folder.GetName().c_str() );
     201
    198202    TV_INSERTSTRUCT tv;
    199 
    200     this->DeleteAllItems();
    201 
    202203    tv.hInsertAfter=TVI_SORT;
    203204    tv.item.mask=TVIF_TEXT|TVIF_IMAGE|TVIF_SELECTEDIMAGE;
    204 
    205     tv.hParent=TVI_ROOT;
     205    tv.hParent = hParent;
    206206    tv.item.iImage=0;
    207207    tv.item.iSelectedImage=0;
    208     tv.item.pszText="Source Files";
    209     tv.hParent = this->InsertItem( &tv );
    210 
    211     int i;
    212     char temporary[MAX_PATH],temp2[MAX_PATH];
    213     for(i=0;i<pFileInfos->iNum;i++){
    214         _splitpath(pFileInfos->ppobj_FileInfo[i]->GetPath().c_str(),0,0,temporary,temp2);
     208    tv.item.pszText = temporary;
     209    HTREEITEM hFolder = this->InsertItem( &tv );
     210
     211    BOOST_FOREACH( ActiveBasic::PM::FM::Folder &childFolder, folder.folders )
     212    {
     213        this->Reset( hFolder, childFolder );
     214    }
     215
     216    BOOST_FOREACH( ActiveBasic::PM::FM::File &file, folder.files )
     217    {
     218        _splitpath(file.GetRelationalPath().c_str(),0,0,temporary,temp2);
    215219        lstrcat(temporary,temp2);
     220
     221        TV_INSERTSTRUCT tv;
     222        tv.hInsertAfter=TVI_SORT;
     223        tv.item.mask=TVIF_TEXT|TVIF_IMAGE|TVIF_SELECTEDIMAGE;
     224        tv.hParent = hFolder;
    216225        tv.item.iImage=2;
    217226        tv.item.iSelectedImage=2;
    218227        tv.item.pszText=temporary;
    219         pFileInfos->ppobj_FileInfo[i]->m_hTreeItem = this->InsertItem( &tv );
    220     }
    221 }
     228        file.SetTreeViewHandle( this->InsertItem( &tv ) );
     229    }
     230}
     231void FileListTreeViewCtrl::Reset( ActiveBasic::PM::FM::FileSystem &fileSystem )
     232{
     233    this->DeleteAllItems();
     234
     235    this->Reset( TVI_ROOT, fileSystem.root );
     236}
  • trunk/ab5.0/abdev/abdev/FileTree.h

    r653 r655  
    1 
    2 class CDBFileInfo;
    31
    42class FileListTreeViewCtrl
     
    1311
    1412    HTREEITEM Insert( const std::string &str );
    15     void Reset( CDBFileInfo *pFileInfos );
     13private:
     14    void Reset( HTREEITEM hParent, ActiveBasic::PM::FM::Folder &folder );
     15public:
     16    void Reset( ActiveBasic::PM::FM::FileSystem &fileSystem );
    1617};
    1718
  • trunk/ab5.0/abdev/abdev/ParameterHint.cpp

    r651 r655  
    3535    if( projectInfo.IsOpened() ){
    3636        //プロジェクトが開かれているとき
    37         lstrcpy(temporary,projectInfo.pobj_DBFileInfo->ppobj_FileInfo[0]->GetPath().c_str());
    38         lstrcpy( temporary, projectInfo.GetWorkDir().GetFullPath( temporary ).c_str() );
     37        lstrcpy(temporary,projectInfo.fileSystem.root.files[0].GetFullPath().c_str());
    3938
    4039        for(i=0;i<MdiInfo.size();i++){
  • trunk/ab5.0/abdev/abdev/ProjectControl.cpp

    r653 r655  
    135135                                // 対象ファイルを開く
    136136                                lstrcpy(temporary,
    137                                     projectInfo.pobj_DBFileInfo->ppobj_FileInfo[pobj_ClassTreeView->pProcInfo[i].FileNum]->GetPath().c_str());
     137                                    projectInfo.fileSystem.root.FindFile( pobj_ClassTreeView->pProcInfo[i].hFileTreeItem ).GetRelationalPath().c_str());
    138138                                lstrcpy( temporary, projectInfo.GetWorkDir().GetFullPath( temporary ).c_str() );
    139139                                hChild=OpenFileWithExtension(temporary);
     
    652652
    653653    //重複チェック
    654     if(projectInfo.pobj_DBFileInfo->dupli_check(path)){
     654    if( projectInfo.fileSystem.root.IsExistFile( path ) )
     655    {
    655656        //"\"%s\" ファイルは既にプロジェクト内に存在します。"
    656657        sprintf(temporary,STRING_DUPLICATIONERROR_FILE_IN_PROJECT,path);
     
    669670
    670671    //projectInfo.ppobj_DBFileInfoオブジェクトに追加
    671     projectInfo.pobj_DBFileInfo->add(path,hTreeItem);
     672    projectInfo.fileSystem.root.files.push_back( ActiveBasic::PM::FM::File( path, hTreeItem ) );
    672673
    673674
     
    675676
    676677    //ファイル操作によるクラスビューの再表示
    677     ResetClassTree(-1);
     678    ResetClassTree((HTREEITEM)-1);
    678679}
    679680void Project_File_Delete(HTREEITEM hTreeItem){
    680681    extern HANDLE hHeap;
    681682
    682     if(projectInfo.pobj_DBFileInfo->IsMainFile(hTreeItem)){
     683    /*if(projectInfo.pobj_DBFileInfo->IsMainFile(hTreeItem)){
    683684        //"このファイルはプロジェクトのメイン ファイルです。プロジェクト内から削除することはできません。"
    684685        MessageBox(hOwner,STRING_ERROR_CANT_MAINFILE,STRING_ERROR,MB_OK|MB_ICONEXCLAMATION);
    685686        return;
    686     }
     687    }*/
    687688
    688689    //ツリービューから削除
    689690    pobj_FileTree->DeleteItem( hTreeItem );
    690691
    691     //projectInfo.pobj_DBFileInfoオブジェクトから削除
    692     projectInfo.pobj_DBFileInfo->del(hTreeItem);
     692    // オブジェクトから削除
     693    projectInfo.fileSystem.root.Remove( hTreeItem );
    693694
    694695    projectInfo.modify=1;
    695696
    696697    //ファイル操作によるクラスビューの再表示
    697     ResetClassTree(-1);
     698    ResetClassTree((HTREEITEM)-1);
    698699}
    699700
     
    11271128
    11281129    //ファイル ツリー
    1129     pobj_FileTree->Reset( projectInfo.pobj_DBFileInfo );
     1130    pobj_FileTree->Reset( projectInfo.fileSystem );
    11301131
    11311132    //関数ツリー
    1132     ResetClassTree(-1);
     1133    ResetClassTree((HTREEITEM)-1);
    11331134
    11341135    /////////////////////
     
    15991600        if(IS_DOCUMENT_TEXT(MdiInfo[WndNum]->DocType)){
    16001601            if( MdiInfo[WndNum]->pMdiTextEdit->IsModified() ){
    1601                 for(i=0;i<projectInfo.pobj_DBFileInfo->iNum;i++){
    1602                     projectInfo.pobj_DBFileInfo->ppobj_FileInfo[i]->GetFullPath(temporary);
    1603                     if(lstrcmpi(MdiInfo[WndNum]->path.c_str(),temporary)==0) sw=1;
    1604                 }
     1602                sw = projectInfo.fileSystem.root.IsExistFile( MdiInfo[WndNum]->path );
    16051603            }
    16061604        }
     
    16381636    return 2;
    16391637}
     1638
     1639void MakeTextMdiWindowBuffer( ActiveBasic::PM::FM::Folder &folder, int WndNum, char *buffer )
     1640{
     1641    BOOST_FOREACH( ActiveBasic::PM::FM::Folder &childFolder, folder.folders )
     1642    {
     1643        MakeTextMdiWindowBuffer( childFolder, WndNum, buffer );
     1644    }
     1645
     1646    BOOST_FOREACH( ActiveBasic::PM::FM::File &file, folder.files )
     1647    {
     1648        if(lstrcmpi(MdiInfo[WndNum]->path.c_str(),file.GetFullPath().c_str())==0){
     1649            CHARRANGE CharRange;
     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            char temporary[1024];
     1662            sprintf(temporary,"text,\"%s\",%d,%d,%d,%d\r\n",
     1663                file.GetRelationalPath().c_str(),
     1664                pos.x,
     1665                pos.y,
     1666                CharRange.cpMin,
     1667                CharRange.cpMax);
     1668
     1669            lstrcat( buffer, temporary );
     1670            break;
     1671        }
     1672    }
     1673}
     1674
    16401675void MakeWorkFile(void){
    16411676    int i,i2,WndNum;
    16421677    char temporary[MAX_PATH],buffer[32767];
    16431678    HWND hChild;
    1644     CHARRANGE CharRange;
    16451679
    16461680    //ワークファイル(*.wrk)を作成
     
    16551689        WndNum=GetWndNum(hChild);
    16561690        if(IS_DOCUMENT_TEXT(MdiInfo[WndNum]->DocType)){
    1657             for(i=0;i<projectInfo.pobj_DBFileInfo->iNum;i++){
    1658                 projectInfo.pobj_DBFileInfo->ppobj_FileInfo[i]->GetFullPath(temporary);
    1659                 if(lstrcmpi(MdiInfo[WndNum]->path.c_str(),temporary)==0){
    1660                     TextEdit_GetSel(WndNum,&CharRange);
    1661 
    1662                     SCROLLINFO si;
    1663                     POINT pos;
    1664                     si.cbSize=sizeof(SCROLLINFO);
    1665                     si.fMask=SIF_POS;
    1666                     GetScrollInfo(MdiInfo[WndNum]->pMdiTextEdit->hEdit,SB_HORZ,&si);
    1667                     pos.x=si.nPos;
    1668                     GetScrollInfo(MdiInfo[WndNum]->pMdiTextEdit->hEdit,SB_VERT,&si);
    1669                     pos.y=si.nPos;
    1670 
    1671                     sprintf(buffer+i2,"text,\"%s\",%d,%d,%d,%d\r\n",
    1672                         projectInfo.pobj_DBFileInfo->ppobj_FileInfo[i]->GetPath().c_str(),
    1673                         pos.x,
    1674                         pos.y,
    1675                         CharRange.cpMin,
    1676                         CharRange.cpMax);
    1677                     i2+=lstrlen(buffer+i2);
    1678                     break;
    1679                 }
    1680             }
     1691            MakeTextMdiWindowBuffer( projectInfo.fileSystem.root, WndNum, buffer );
     1692            i2 = lstrlen( buffer );
    16811693        }
    16821694        else if(MdiInfo[WndNum]->DocType==WNDTYPE_RAD){
     
    17631775    WIN32_FIND_DATA wfd;
    17641776
    1765     if(projectInfo.pobj_DBFileInfo->iNum==0){
     1777    if( projectInfo.fileSystem.root.IsEmpty() )
     1778    {
    17661779        //"プログラム ファイルがプロジェクトに存在しません。"
    17671780        MessageBox(hOwner,STRING_ERROR_NOFILE,STRING_ERROR,MB_OK|MB_ICONEXCLAMATION);
     
    17871800    return 1;
    17881801}
     1802bool IsNeedCompileForProject( const ActiveBasic::PM::FM::Folder &folder, const FILETIME &exeTime )
     1803{
     1804    BOOST_FOREACH( const ActiveBasic::PM::FM::Folder &childFolder, folder.folders )
     1805    {
     1806        if( IsNeedCompileForProject( childFolder, exeTime ) )
     1807        {
     1808            return true;
     1809        }
     1810    }
     1811
     1812    BOOST_FOREACH( const ActiveBasic::PM::FM::File &file, folder.files )
     1813    {
     1814        HANDLE hFile=CreateFile(file.GetFullPath().c_str(),GENERIC_READ,FILE_SHARE_READ|FILE_SHARE_WRITE,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL);
     1815        FILETIME sourceTime;
     1816        GetFileTime(hFile,NULL,NULL,&sourceTime);
     1817        CloseHandle(hFile);
     1818
     1819        if(sourceTime.dwHighDateTime>exeTime.dwHighDateTime||
     1820            sourceTime.dwHighDateTime==exeTime.dwHighDateTime&&
     1821            sourceTime.dwLowDateTime>exeTime.dwLowDateTime) return true;
     1822    }
     1823
     1824    return false;
     1825}
     1826
    17891827BOOL IsNeedCompileForProject(BOOL bDebug){
    1790     int i2;
    17911828    char temporary[MAX_PATH];
    17921829    HANDLE hFind,hFile;
     
    18061843    CloseHandle(hFile);
    18071844
    1808     for(i2=0;i2<projectInfo.pobj_DBFileInfo->iNum;i2++){
    1809         projectInfo.pobj_DBFileInfo->ppobj_FileInfo[i2]->GetFullPath(temporary);
    1810         hFile=CreateFile(temporary,GENERIC_READ,FILE_SHARE_READ|FILE_SHARE_WRITE,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL);
    1811         GetFileTime(hFile,NULL,NULL,&SourceTime);
    1812         CloseHandle(hFile);
    1813 
    1814         if(SourceTime.dwHighDateTime>ExeTime.dwHighDateTime||
    1815             SourceTime.dwHighDateTime==ExeTime.dwHighDateTime&&
    1816             SourceTime.dwLowDateTime>ExeTime.dwLowDateTime) return 1;
     1845    if( IsNeedCompileForProject( projectInfo.fileSystem.root, ExeTime ) )
     1846    {
     1847        return 1;
    18171848    }
    18181849    if( !projectInfo.windowInfos.empty() )
  • trunk/ab5.0/abdev/abdev/Replace.cpp

    r629 r655  
    182182        if(MdiInfo[WndNum]->DocType==WNDTYPE_BASIC){
    183183            //クラスツリーを再表示
    184             ResetClassTree(GetFileNum(WndNum));
     184            HTREEITEM hFileTreeItem = projectInfo.fileSystem.root.IsExistFile( MdiInfo[WndNum]->path )
     185                ? projectInfo.fileSystem.root.FindFile( MdiInfo[WndNum]->path ).GetTreeItemHandle()
     186                : (HTREEITEM)-1;
     187            ResetClassTree( hFileTreeItem );
    185188        }
    186189    //}
  • trunk/ab5.0/abdev/abdev/Ruler.cpp

    r629 r655  
    2121}
    2222
    23 CRuler::CRuler(HWND hParent,int WndNum){
    24     m_WndNum=WndNum;
    25 
     23CRuler::CRuler(HWND hParent,MDIINFO *pMdiInfo)
     24    : pMdiInfo( pMdiInfo )
     25{
    2626    hRulerWnd=CreateWindowEx(0,"Ruler","Ruler",
    2727        WS_CHILD|WS_CLIPCHILDREN|WS_VISIBLE,
     
    5656    BaseX=0;
    5757    BaseY=0;
    58     GetScrollBaseCaretPos(m_WndNum,&BaseX,&BaseY);
     58    GetScrollBaseCaretPos(this->pMdiInfo,&BaseX,&BaseY);
    5959
    6060    int iControlTabSpace;
    61     iControlTabSpace=MdiInfo[m_WndNum]->pMdiTextEdit->iWidth_ControlTabSpace;
     61    iControlTabSpace=this->pMdiInfo->pMdiTextEdit->iWidth_ControlTabSpace;
    6262
    6363    HBRUSH hBrush,hOldBrush;
  • trunk/ab5.0/abdev/abdev/Ruler.h

    r3 r655  
    44LRESULT CALLBACK RulerProc(HWND hwnd,UINT message,WPARAM wParam,LPARAM lParam);
    55
    6 class CRuler{
    7     int m_WndNum;
     6class MDIINFO;
     7
     8class CRuler
     9{
     10    MDIINFO *pMdiInfo;
    811    HDC memdc;
    912    HBITMAP hMemBmp;
    1013public:
    1114    HWND hRulerWnd;
    12     CRuler(HWND hParent,int WndNum);
     15    CRuler(HWND hParent,MDIINFO *pMdiInfo);
    1316    ~CRuler();
    1417
  • trunk/ab5.0/abdev/abdev/SubOperation.cpp

    r629 r655  
    13711371    HeapDestroy(hHeap);
    13721372
    1373     //DLLを解放
    1374     FreeLibrary(hResInst);
    1375     FreeLibrary(hIconResInst);
    1376     FreeLibrary(hLib_LuxCtrl);
    1377 
    1378     //アルファブレンド用のAPIを解放
    1379     extern HINSTANCE hUser32Lib;
    1380     FreeLibrary(hUser32Lib);
    1381 
    1382 
    1383 
    1384 
    13851373    //////////////////////////////////////
    13861374    // バックアップ用ファイルを削除
     
    13891377    RemoveDirectoryStrong(szBackupDirPath);
    13901378
     1379    //DLLを解放
     1380    FreeLibrary(hResInst);
     1381    FreeLibrary(hIconResInst);
     1382    FreeLibrary(hLib_LuxCtrl);
     1383
     1384    //アルファブレンド用のAPIを解放
     1385    extern HINSTANCE hUser32Lib;
     1386    FreeLibrary(hUser32Lib);
    13911387}
    13921388
  • trunk/ab5.0/abdev/abdev/TextEditor_ImeEvent.cpp

    r629 r655  
    2121    CompForm.dwStyle=CFS_POINT;
    2222    pos=MdiInfo[WndNum]->pMdiTextEdit->StartCaretPos;
    23     GetScrollBaseCaretPos(WndNum,(int *)&pos.x,(int *)&pos.y);
     23    GetScrollBaseCaretPos(MdiInfo[WndNum],(int *)&pos.x,(int *)&pos.y);
    2424    CompForm.ptCurrentPos.x=pos.x*font_width+iControlTabSpace;
    2525    CompForm.ptCurrentPos.y=pos.y*font_height;
     
    6363        CompForm.dwStyle=CFS_POINT;
    6464        pos=MdiInfo[WndNum]->pMdiTextEdit->StartCaretPos;
    65         GetScrollBaseCaretPos(WndNum,(int *)&pos.x,(int *)&pos.y);
     65        GetScrollBaseCaretPos(MdiInfo[WndNum],(int *)&pos.x,(int *)&pos.y);
    6666        CompForm.ptCurrentPos.x=pos.x*font_width+iControlTabSpace;
    6767        CompForm.ptCurrentPos.y=pos.y*font_height;
  • trunk/ab5.0/abdev/abdev/WindowControl.cpp

    r629 r655  
    21762176    //重複チェック
    21772177    sprintf(temporary,"%s.sbp",NewWindow.name);
    2178     if(projectInfo.pobj_DBFileInfo->dupli_check(temporary)){
     2178    if(projectInfo.fileSystem.root.IsExistFile(temporary)){
    21792179        sprintf(temp2,"\"%s\" ファイルは既にプロジェクト内に存在します。",temporary);
    21802180        MessageBox(hOwner,temp2,APPLICATION_NAME,MB_OK|MB_ICONEXCLAMATION);
  • trunk/ab5.0/abdev/abdev/abdev.cpp

    r629 r655  
    113113    }
    114114
    115     int i;
    116     char temporary[MAX_PATH];
    117     for(i=0;i<projectInfo.pobj_DBFileInfo->iNum;i++){
    118 
    119         projectInfo.pobj_DBFileInfo->ppobj_FileInfo[i]->GetFullPath(temporary);
    120 
    121         if(lstrcmpi(MdiInfo[WndNum]->path.c_str(),temporary)==0) return i;
     115    for(int i=0;i<projectInfo.fileSystem.root.files.size();i++)
     116    {
     117        if(lstrcmpi(MdiInfo[WndNum]->path.c_str(),projectInfo.fileSystem.root.files[i].GetFullPath().c_str())==0) return i;
    122118    }
    123119    return -1;
     
    916912    MdiInfo[i]->pMdiTextEdit->hEdit=hEdit;
    917913    MdiInfo[i]->pMdiTextEdit->pobj_WebResult=new CWebResult(hChild);
    918     MdiInfo[i]->pMdiTextEdit->pobj_Ruler=new CRuler(hChild,i);
     914    MdiInfo[i]->pMdiTextEdit->pobj_Ruler=new CRuler(hChild,MdiInfo[i]);
    919915    MdiInfo[i]->pMdiTextEdit->hIcon=shfi.hIcon;
    920916    MdiInfo[i]->pMdiTextEdit->buffer=buffer;
     
    970966
    971967            // クラスビューを更新
    972             ResetClassTree(-1);
     968            ResetClassTree((HTREEITEM)-1);
    973969        }
    974970    }
     
    11631159
    11641160            if( !projectInfo.IsOpened() ){
    1165                 ResetClassTree(-1);
     1161                ResetClassTree((HTREEITEM)-1);
    11661162            }
    11671163
  • trunk/ab5.0/abdev/abdev/abdev.vcproj

    r651 r655  
    8282                LinkIncremental="1"
    8383                SuppressStartupBanner="true"
     84                AdditionalLibraryDirectories="..\..\jenga\lib\x86;..\lib\x86"
    8485                ProgramDatabaseFile="$(IntDir)\$(ProjectName).pdb"
    8586                SubSystem="2"
     
    180181                LinkIncremental="2"
    181182                SuppressStartupBanner="true"
     183                AdditionalLibraryDirectories="..\..\jenga\lib\x86;..\lib\x86"
    182184                GenerateDebugInformation="true"
    183185                ProgramDatabaseFile="$(IntDir)\$(ProjectName).pdb"
     
    279281                LinkIncremental="1"
    280282                SuppressStartupBanner="true"
     283                AdditionalLibraryDirectories="..\..\jenga\lib\x86;..\lib\x86"
    281284                ProgramDatabaseFile="$(IntDir)\$(ProjectName).pdb"
    282285                SubSystem="2"
     
    377380                LinkIncremental="2"
    378381                SuppressStartupBanner="true"
     382                AdditionalLibraryDirectories="..\..\jenga\lib\x86;..\lib\x86"
    379383                GenerateDebugInformation="true"
    380384                ProgramDatabaseFile="$(IntDir)\$(ProjectName).pdb"
     
    22082212                        >
    22092213                        <File
    2210                             RelativePath="CFileInfo.cpp"
    2211                             >
    2212                             <FileConfiguration
    2213                                 Name="TheText_Release|Win32"
    2214                                 >
    2215                                 <Tool
    2216                                     Name="VCCLCompilerTool"
    2217                                     PreprocessorDefinitions=""
    2218                                 />
    2219                             </FileConfiguration>
    2220                             <FileConfiguration
    2221                                 Name="Debug|Win32"
    2222                                 >
    2223                                 <Tool
    2224                                     Name="VCCLCompilerTool"
    2225                                     PreprocessorDefinitions=""
    2226                                 />
    2227                             </FileConfiguration>
    2228                             <FileConfiguration
    2229                                 Name="Release|Win32"
    2230                                 >
    2231                                 <Tool
    2232                                     Name="VCCLCompilerTool"
    2233                                     PreprocessorDefinitions=""
    2234                                 />
    2235                             </FileConfiguration>
    2236                             <FileConfiguration
    2237                                 Name="TheText_Debug|Win32"
    2238                                 >
    2239                                 <Tool
    2240                                     Name="VCCLCompilerTool"
    2241                                     PreprocessorDefinitions=""
    2242                                 />
    2243                             </FileConfiguration>
    2244                         </File>
    2245                         <File
    22462214                            RelativePath="FileTree.cpp"
    22472215                            >
     
    26892657                Name="ProjectManager"
    26902658                >
     2659                <File
     2660                    RelativePath=".\src\ProjectManager\FileManager.cpp"
     2661                    >
     2662                </File>
    26912663                <File
    26922664                    RelativePath=".\src\ProjectManager\ProjectManager.cpp"
  • trunk/ab5.0/abdev/abdev/include/ProjectManager/FileManager.h

    r653 r655  
    66class ItemBase
    77{
     8    HTREEITEM hTreeItem;
     9
     10public:
     11    ItemBase( HTREEITEM hTreeItem )
     12        : hTreeItem( hTreeItem )
     13    {
     14    }
     15
     16    HTREEITEM GetTreeItemHandle() const
     17    {
     18        return hTreeItem;
     19    }
     20    void SetTreeViewHandle( HTREEITEM hTreeItem )
     21    {
     22        this->hTreeItem = hTreeItem;
     23    }
    824};
    925
     
    1228{
    1329    std::string relationalPath;
     30
     31public:
     32    File( const std::string &relationalPath, HTREEITEM hTreeItem );
     33
     34    const std::string &GetRelationalPath() const
     35    {
     36        return relationalPath;
     37    }
     38    const std::string GetFullPath() const;
    1439};
    1540typedef std::vector<File> Files;
     
    2146    : public ItemBase
    2247{
     48    std::string name;
     49public:
    2350    Files files;
    2451    Folders folders;
     52
     53    Folder( const std::string &name, HTREEITEM hTreeItem )
     54        : ItemBase( hTreeItem )
     55        , name( name )
     56    {
     57    }
     58
     59    const std::string &GetName() const
     60    {
     61        return name;
     62    }
     63
     64    bool IsEmpty() const;
     65    void Clear();
     66    File &FindFile( HTREEITEM hTreeItem );
     67    File &FindFile( const std::string &path );
     68    bool IsExistFile( HTREEITEM hTreeItem ) const;
     69    bool IsExistFile( const std::string &path ) const;
     70    void Remove( HTREEITEM hTreeItem );
    2571};
    2672
    2773class FileSystem
    2874{
    29     Files files;
    30     //Folders folders;
     75public:
     76    Folder root;
     77    boost::mutex mutex;
     78
     79    FileSystem( const std::string &rootFolderName )
     80        : root( rootFolderName, NULL )
     81    {
     82    }
    3183};
    3284
  • trunk/ab5.0/abdev/abdev/include/ProjectManager/ProjectManager.h

    r624 r655  
    1010    Project()
    1111        : workDir( "" )
     12        , fileSystem( "Source Files" )
    1213    {
    1314    }
     
    4445    DWORD dwVersion;
    4546
    46     CDBFileInfo *pobj_DBFileInfo;
     47    FM::FileSystem fileSystem;
    4748
    4849    int NumberOfMenu;
  • trunk/ab5.0/abdev/abdev/src/MainFrame.cpp

    r640 r655  
    11361136
    11371137        //ソースファイル名をtemp2へ
    1138         projectInfo.pobj_DBFileInfo->ppobj_FileInfo[0]->GetFullPath(temp2);
     1138        lstrcpy( temp2, projectInfo.fileSystem.root.files[0].GetFullPath().c_str() );
    11391139
    11401140        //出力ファイル名をtemp3へ
     
    12141214
    12151215        //ソースファイル名をtemp2へ
    1216         projectInfo.pobj_DBFileInfo->ppobj_FileInfo[0]->GetFullPath(temp2);
     1216        lstrcpy( temp2, projectInfo.fileSystem.root.files[0].GetFullPath().c_str() );
    12171217
    12181218        //出力ファイル名をtemp3へ
     
    13341334
    13351335        //ソースファイル名をtemp2へ
    1336         projectInfo.pobj_DBFileInfo->ppobj_FileInfo[0]->GetFullPath(temp2);
     1336        lstrcpy( temp2, projectInfo.fileSystem.root.files[0].GetFullPath().c_str() );
    13371337
    13381338        //出力ファイル名をtemp3へ
  • trunk/ab5.0/abdev/abdev/src/ProjectManager/ProjectManager.cpp

    r651 r655  
    3333
    3434    //解析
    35     this->pobj_DBFileInfo=new CDBFileInfo();
     35    this->fileSystem.root.Clear();
    3636    bool isUseWindow = false;
    3737    for(i=0;;i++){
     
    200200                    }
    201201                    if(temporary[0]=='\0') break;
    202                     this->pobj_DBFileInfo->add(temporary,0);
     202                    this->fileSystem.root.files.push_back( ActiveBasic::PM::FM::File( temporary, 0 ) );
    203203
    204204                    if(buffer[i]=='\0') break;
     
    265265
    266266void 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}
    267301void Project::Save()
    268302{
    269     int i,i2,i3,WndNum;
     303    int i2,i3,WndNum;
    270304    char temporary[MAX_PATH],buffer[32767];
    271305    HWND hChild;
     
    280314        WndNum=GetWndNum(hChild);
    281315        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                     }
     316            if( MdiInfo[WndNum]->pMdiTextEdit->IsModified() )
     317            {
     318                if( this->fileSystem.root.IsExistFile( MdiInfo[WndNum]->path ) )
     319                {
     320                    SaveDocument(hChild,NULL);
    289321                }
    290322            }
     
    342374    sprintf(buffer+i2,"#SOURCE\r\n");
    343375    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     }
     376    MakeSourceListToProjectFile( this->fileSystem.root, buffer );
     377    i2 = lstrlen( buffer );
    348378
    349379    //保存
     
    469499        i2+=lstrlen(buffer+i2);
    470500    }
    471     if(this->pobj_DBFileInfo->iNum>1){
     501
     502    {
    472503        lstrcpy(buffer+i2,"\r\n");
    473504        i2+=lstrlen(buffer+i2);
    474505        lstrcpy(buffer+i2,"'プロジェクト内のプログラム ファイル\r\n");
    475506        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         }
     507        MakeIncludeListToProjectFile( this->fileSystem.root, buffer, true );
     508        i2 = lstrlen(buffer);
    483509    }
    484510    if( !this->windowInfos.empty() )
     
    548574        hChild=GetNextWindow(hChild,GW_HWNDNEXT);
    549575        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                 }
     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);
    561584            }
    562585        }
     
    593616
    594617    //ファイル情報のメモリを解放
    595     delete this->pobj_DBFileInfo;
     618    this->fileSystem.root.Clear();
    596619
    597620    //ブレークポイントのオブジェクトを解放
  • trunk/ab5.0/abdev/abdev/stdafx.h

    r651 r655  
    3333#include <boost/serialization/nvp.hpp>
    3434#include <boost/serialization/export.hpp>
     35#include <boost/thread/thread.hpp>
    3536
    3637#include <jenga/include/jenga.h>
     
    5455#include <Program.h>
    5556#include <ProjectManager/WindowManager.h>
     57#include <ProjectManager/FileManager.h>
    5658
    5759#include "Common.h"
    5860
    59 #include <ProjectManager/FileManager.h>
    6061#include <ProjectManager/ProjectManager.h>
Note: See TracChangeset for help on using the changeset viewer.