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

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

File:
1 edited

Legend:

Unmodified
Added
Removed
  • 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() )
Note: See TracChangeset for help on using the changeset viewer.