Changeset 80 in dev for ProjectEditor/Search.cpp


Ignore:
Timestamp:
Mar 26, 2007, 6:33:06 AM (18 years ago)
Author:
dai_9181
Message:

TheText用のリソースを追加。
単語単位での検索を可能にした。

File:
1 edited

Legend:

Unmodified
Added
Removed
  • ProjectEditor/Search.cpp

    r24 r80  
    44int FindPosCounter;
    55
    6 char *CompareSuper(HWND hDlg,char *buffer,char *szFind,BOOL IsBigSmall,BOOL IsRegExp,int *pLength){
     6char *CompareSuper(HWND hDlg,char *buffer,char *szFind,BOOL IsBigSmall,bool isWordUnit,BOOL IsRegExp,int *pLength ){
    77    char *pTemp;
    88
     
    1111    if(IsRegExp){
    1212        //正規表現を有効にしながら検索
    13         pTemp=obj_RegExp.compare(hDlg,buffer,szFind,IsBigSmall,pLength);
     13        pTemp=obj_RegExp.compare(hDlg,buffer,szFind,IsBigSmall, isWordUnit, pLength);
    1414    }
    1515    else{
    1616        //通常の検索
    17         pTemp=ComparisonString(buffer,szFind,IsBigSmall);
     17        pTemp=ComparisonString(buffer,szFind,IsBigSmall?true:false, isWordUnit );
    1818
    1919        *pLength=lstrlen(szFind);
     
    2323}
    2424
    25 void SetSearchData(HWND hDlg,char *str,_int8 IsBigSmall){
     25void SetSearchData(HWND hDlg,char *str,_int8 IsBigSmall, bool isWordUnit){
    2626    extern HANDLE hHeap;
    2727    extern MDIINFO MdiInfo[MAX_WNDNUM];
     
    4646    i3=1;
    4747    while(1){
    48         FindStr=CompareSuper(hDlg,buffer+i,str,IsBigSmall,pobj_nv->bRegExp,&length);
     48        FindStr=CompareSuper(hDlg,buffer+i,str,IsBigSmall, isWordUnit, pobj_nv->bRegExp,&length);
    4949        if(FindStr==(char *)-1){
    5050            //エラー
     
    136136    return 0;
    137137}
    138 BOOL StartSearch(HWND hDlg,char *FindString,_int8 IsBigSmall,BOOL IsShowMessage){
     138BOOL StartSearch(HWND hDlg,char *FindString,_int8 IsBigSmall, bool isWordUnit, BOOL IsShowMessage){
    139139    extern MDIINFO MdiInfo[MAX_WNDNUM];
    140140    int i;
     
    155155    int length;
    156156
    157     i=(int)CompareSuper(hDlg,pBuf+i,FindString,IsBigSmall,pobj_nv->bRegExp,&length);
     157    i=(int)CompareSuper(hDlg,pBuf+i,FindString,IsBigSmall, isWordUnit, pobj_nv->bRegExp,&length);
    158158    if(i==-1){
    159159        //エラー
     
    173173        if(!IsShowMessage) return 0;
    174174
    175         i=(int)CompareSuper(hDlg,pBuf,FindString,IsBigSmall,pobj_nv->bRegExp,&length);
     175        i=(int)CompareSuper(hDlg,pBuf,FindString,IsBigSmall, isWordUnit, pobj_nv->bRegExp,&length);
    176176        if(i==-1){
    177177            //エラー
     
    223223            //大文字・小文字
    224224            if(pobj_nv->bFindStrBigSmall) SendDlgItemMessage(hwnd,IDC_ISBIGSMALL,BM_SETCHECK,BST_CHECKED,0);
     225
     226            // 単語単位
     227            if( pobj_nv->isWordUnit ){
     228                SendDlgItemMessage( hwnd, IDC_ISWORDUNIT, BM_SETCHECK, BST_CHECKED, 0 );
     229            }
    225230
    226231            //正規表現
     
    263268                    else pobj_nv->bFindStrBigSmall=0;
    264269
     270                    // 単語単位
     271                    pobj_nv->isWordUnit =
     272                        ( SendDlgItemMessage( hwnd, IDC_ISWORDUNIT, BM_GETCHECK, 0, 0 ) != 0 );
     273
    265274                    //正規表現
    266275                    if(SendDlgItemMessage(hwnd,IDC_REGEXP,BM_GETCHECK,0,0)) pobj_nv->bRegExp=1;
    267276                    else pobj_nv->bRegExp=0;
    268277
    269                     StartSearch(hwnd,temporary,pobj_nv->bFindStrBigSmall,1);
     278                    StartSearch(hwnd,temporary,pobj_nv->bFindStrBigSmall, pobj_nv->isWordUnit, 1);
    270279                    return 1;
    271280                case IDC_FINDALL:
     
    278287                    else pobj_nv->bFindStrBigSmall=0;
    279288
     289                    // 単語単位
     290                    pobj_nv->isWordUnit =
     291                        ( SendDlgItemMessage( hwnd, IDC_ISWORDUNIT, BM_GETCHECK, 0, 0 ) != 0 );
     292
    280293                    //正規表現
    281294                    if(SendDlgItemMessage(hwnd,IDC_REGEXP,BM_GETCHECK,0,0)) pobj_nv->bRegExp=1;
     
    287300                    FindPosCounter=sizeof(long);
    288301                    pFindPos=(long *)HeapAlloc(hHeap,0,FindPosCounter);
    289                     SetSearchData(FindAllDlg,temporary,pobj_nv->bFindStrBigSmall);
     302                    SetSearchData(FindAllDlg,temporary,pobj_nv->bFindStrBigSmall, pobj_nv->isWordUnit );
    290303                case IDCANCEL:
    291304                    EndDialog(hwnd,0);
     
    311324            if(pobj_nv->bFindStrBigSmall) SendDlgItemMessage(hwnd,IDC_ISBIGSMALL,BM_SETCHECK,BST_CHECKED,0);
    312325
     326            // 単語単位
     327            if( pobj_nv->isWordUnit ){
     328                SendDlgItemMessage( hwnd, IDC_ISWORDUNIT, BM_SETCHECK, BST_CHECKED, 0 );
     329            }
     330
    313331            //正規表現
    314332            if(pobj_nv->bRegExp) SendDlgItemMessage(hwnd,IDC_REGEXP,BM_SETCHECK,BST_CHECKED,0);
     
    356374                    else pobj_nv->bFindStrBigSmall=0;
    357375
     376                    // 単語単位
     377                    pobj_nv->isWordUnit =
     378                        ( SendDlgItemMessage( hwnd, IDC_ISWORDUNIT, BM_GETCHECK, 0, 0 ) != 0 );
     379
    358380                    //正規表現
    359381                    if(SendDlgItemMessage(hwnd,IDC_REGEXP,BM_GETCHECK,0,0)) pobj_nv->bRegExp=1;
     
    364386                    AddFindData(GetDlgItem(hwnd,IDC_FINDSTR),pobj_nv->FindStr,temporary);
    365387
    366                     StartSearch(hwnd,temporary,pobj_nv->bFindStrBigSmall,1);
     388                    StartSearch(hwnd,temporary,pobj_nv->bFindStrBigSmall, pobj_nv->isWordUnit, 1);
    367389                    return 1;
    368390                case IDC_PERMUTATIONNEXT:
     
    374396                    if(SendDlgItemMessage(hwnd,IDC_ISBIGSMALL,BM_GETCHECK,0,0)) pobj_nv->bFindStrBigSmall=1;
    375397                    else pobj_nv->bFindStrBigSmall=0;
     398
     399                    // 単語単位
     400                    pobj_nv->isWordUnit =
     401                        ( SendDlgItemMessage( hwnd, IDC_ISWORDUNIT, BM_GETCHECK, 0, 0 ) != 0 );
    376402
    377403                    //正規表現
     
    399425
    400426                    int length;
    401                     i=(int)CompareSuper(hwnd,pTemp,temporary,pobj_nv->bFindStrBigSmall,pobj_nv->bRegExp,&length);
     427                    i=(int)CompareSuper(hwnd,pTemp,temporary,pobj_nv->bFindStrBigSmall, pobj_nv->isWordUnit, pobj_nv->bRegExp,&length);
    402428                    if(i==-1){
    403429                        HeapDefaultFree(pTemp);
     
    441467                    else pobj_nv->bFindStrBigSmall=0;
    442468
     469                    // 単語単位
     470                    pobj_nv->isWordUnit =
     471                        ( SendDlgItemMessage( hwnd, IDC_ISWORDUNIT, BM_GETCHECK, 0, 0 ) != 0 );
     472
    443473                    //正規表現
    444474                    if(SendDlgItemMessage(hwnd,IDC_REGEXP,BM_GETCHECK,0,0)) pobj_nv->bRegExp=1;
     
    462492                    TextEdit_SetSel(WndNum,0,0,TRUE);
    463493
    464                     while(StartSearch(hwnd,temporary,pobj_nv->bFindStrBigSmall,0)){
     494                    while(StartSearch(hwnd,temporary,pobj_nv->bFindStrBigSmall, pobj_nv->isWordUnit, 0)){
    465495                        if(pobj_nv->bRegExp){
    466496                            //選択されている文字列を取得
Note: See TracChangeset for help on using the changeset viewer.