Ignore:
Timestamp:
Mar 26, 2000, 6:34:57 PM (25 years ago)
Author:
cbratschi
Message:

merged with Corel WINE 20000324

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/comdlg32/finddlg32.cpp

    r1557 r3243  
    1 /* $Id: finddlg32.cpp,v 1.2 1999-11-02 20:37:43 sandervl Exp $ */
     1/* $Id: finddlg32.cpp,v 1.3 2000-03-26 16:31:44 cbratschi Exp $ */
    22/*
    33 *  Common Dialog Boxes interface (32 bit) (990815)
     
    55 *
    66 * Copyright 1998,1999 Bertho A. Stultiens
     7 *
     8 * Corel WINE 20000324 level
    79 */
    810
     
    2426/*-----------------------------------------------------------------------*/
    2527
    26 static UINT             FindReplaceMessage;
    27 static UINT             HelpMessage;
    28 
    29 #define FR_MASK (FR_DOWN | FR_MATCHCASE | FR_WHOLEWORD | FR_REPLACEALL | FR_REPLACE | FR_FINDNEXT | FR_DIALOGTERM)
     28static UINT             FindReplaceMessage;
     29static UINT             HelpMessage;
     30
     31#define FR_MASK (FR_DOWN | FR_MATCHCASE | FR_WHOLEWORD | FR_REPLACEALL | FR_REPLACE | FR_FINDNEXT | FR_DIALOGTERM)
    3032/* CRITICAL_SECTION COMDLG32_CritSect; */
    3133
     
    4951
    5052/***********************************************************************
    51  *      COMDLG32_FR_GetFlags                    [internal]
     53 *      COMDLG32_FR_GetFlags                    [internal]
    5254 * Returns the button state that needs to be reported to the caller.
    53  *      RETURNS
    54  *              Current state of check and radio buttons
     55 *      RETURNS
     56 *              Current state of check and radio buttons
    5557 */
    5658static DWORD COMDLG32_FR_GetFlags(HWND hDlgWnd)
    5759{
    58         DWORD flags = 0;
    59         if(IsDlgButtonChecked(hDlgWnd, rad2) == BST_CHECKED)
    60                 flags |= FR_DOWN;
    61         if(IsDlgButtonChecked(hDlgWnd, chx1) == BST_CHECKED)
    62                 flags |= FR_WHOLEWORD;
    63         if(IsDlgButtonChecked(hDlgWnd, chx2) == BST_CHECKED)
    64                 flags |= FR_MATCHCASE;
     60        DWORD flags = 0;
     61        if(IsDlgButtonChecked(hDlgWnd, rad2) == BST_CHECKED)
     62                flags |= FR_DOWN;
     63        if(IsDlgButtonChecked(hDlgWnd, chx1) == BST_CHECKED)
     64                flags |= FR_WHOLEWORD;
     65        if(IsDlgButtonChecked(hDlgWnd, chx2) == BST_CHECKED)
     66                flags |= FR_MATCHCASE;
    6567        return flags;
    6668}
    6769
    6870/***********************************************************************
    69  *      COMDLG32_FR_HandleWMCommand             [internal]
     71 *      COMDLG32_FR_HandleWMCommand             [internal]
    7072 * Handle WM_COMMAND messages...
    7173 */
    7274static void COMDLG32_FR_HandleWMCommand(HWND hDlgWnd, COMDLG32_FR_Data *pData, int Id, int NotifyCode)
    7375{
    74         DWORD flag;
    75 
    76         pData->user_fr.fra->Flags &= ~FR_MASK;  /* Clear return flags */
    77         if(pData->fr.Flags & FR_WINE_REPLACE)   /* Replace always goes down... */
    78                 pData->user_fr.fra->Flags |= FR_DOWN;
    79 
    80         if(NotifyCode == BN_CLICKED)
    81         {
    82                 switch(Id)
    83                 {
    84                 case IDOK: /* Find Next */
    85                         if(GetDlgItemTextA(hDlgWnd, edt1, pData->fr.lpstrFindWhat, pData->fr.wFindWhatLen) > 0)
     76        DWORD flag;
     77
     78        pData->user_fr.fra->Flags &= ~FR_MASK;  /* Clear return flags */
     79        if(pData->fr.Flags & FR_WINE_REPLACE)   /* Replace always goes down... */
     80                pData->user_fr.fra->Flags |= FR_DOWN;
     81
     82        if(NotifyCode == BN_CLICKED)
     83        {
     84                switch(Id)
     85                {
     86                case IDOK: /* Find Next */
     87                        if(GetDlgItemTextA(hDlgWnd, edt1, pData->fr.lpstrFindWhat, pData->fr.wFindWhatLen) > 0)
    8688                        {
    87                                 pData->user_fr.fra->Flags |= COMDLG32_FR_GetFlags(hDlgWnd) | FR_FINDNEXT;
     89                                pData->user_fr.fra->Flags |= COMDLG32_FR_GetFlags(hDlgWnd) | FR_FINDNEXT;
    8890                                if(pData->fr.Flags & FR_WINE_UNICODE)
    8991                                {
    90                                         lstrcpyAtoW(pData->user_fr.frw->lpstrFindWhat, pData->fr.lpstrFindWhat);
     92                                        lstrcpyAtoW(pData->user_fr.frw->lpstrFindWhat, pData->fr.lpstrFindWhat);
    9193                                }
    9294                                else
    9395                                {
    94                                         lstrcpyA(pData->user_fr.fra->lpstrFindWhat, pData->fr.lpstrFindWhat);
     96                                        lstrcpyA(pData->user_fr.fra->lpstrFindWhat, pData->fr.lpstrFindWhat);
    9597                                }
    96                                 SendMessageA(pData->fr.hwndOwner, FindReplaceMessage, 0, (LPARAM)pData->user_fr.fra);
     98                                SendMessageA(pData->fr.hwndOwner, FindReplaceMessage, 0, (LPARAM)pData->user_fr.fra);
    9799                        }
    98                         break;
    99 
    100                 case IDCANCEL:
    101                         pData->user_fr.fra->Flags |= COMDLG32_FR_GetFlags(hDlgWnd) | FR_DIALOGTERM;
    102                         SendMessageA(pData->fr.hwndOwner, FindReplaceMessage, 0, (LPARAM)pData->user_fr.fra);
    103                         DestroyWindow(hDlgWnd);
    104                         break;
     100                        break;
     101
     102                case IDCANCEL:
     103                        pData->user_fr.fra->Flags |= COMDLG32_FR_GetFlags(hDlgWnd) | FR_DIALOGTERM;
     104                        SendMessageA(pData->fr.hwndOwner, FindReplaceMessage, 0, (LPARAM)pData->user_fr.fra);
     105                        DestroyWindow(hDlgWnd);
     106                        break;
    105107
    106108                case psh2: /* Replace All */
    107                         flag = FR_REPLACEALL;
     109                        flag = FR_REPLACEALL;
    108110                        goto Replace;
    109111
    110112                case psh1: /* Replace */
    111                         flag = FR_REPLACE;
     113                        flag = FR_REPLACE;
    112114Replace:
    113                         if((pData->fr.Flags & FR_WINE_REPLACE)
     115                        if((pData->fr.Flags & FR_WINE_REPLACE)
    114116                        && GetDlgItemTextA(hDlgWnd, edt1, pData->fr.lpstrFindWhat, pData->fr.wFindWhatLen) > 0)
    115117                        {
    116                                 pData->fr.lpstrReplaceWith[0] = 0; /* In case the next GetDlgItemText Fails */
    117                                 GetDlgItemTextA(hDlgWnd, edt2, pData->fr.lpstrReplaceWith, pData->fr.wReplaceWithLen);
    118                                 pData->user_fr.fra->Flags |= COMDLG32_FR_GetFlags(hDlgWnd) | flag;
     118                                pData->fr.lpstrReplaceWith[0] = 0; /* In case the next GetDlgItemText Fails */
     119                                GetDlgItemTextA(hDlgWnd, edt2, pData->fr.lpstrReplaceWith, pData->fr.wReplaceWithLen);
     120                                pData->user_fr.fra->Flags |= COMDLG32_FR_GetFlags(hDlgWnd) | flag;
    119121                                if(pData->fr.Flags & FR_WINE_UNICODE)
    120122                                {
    121                                         lstrcpyAtoW(pData->user_fr.frw->lpstrFindWhat, pData->fr.lpstrFindWhat);
    122                                         lstrcpyAtoW(pData->user_fr.frw->lpstrReplaceWith, pData->fr.lpstrReplaceWith);
     123                                        lstrcpyAtoW(pData->user_fr.frw->lpstrFindWhat, pData->fr.lpstrFindWhat);
     124                                        lstrcpyAtoW(pData->user_fr.frw->lpstrReplaceWith, pData->fr.lpstrReplaceWith);
    123125                                }
    124126                                else
    125127                                {
    126                                         lstrcpyA(pData->user_fr.fra->lpstrFindWhat, pData->fr.lpstrFindWhat);
    127                                         lstrcpyA(pData->user_fr.fra->lpstrReplaceWith, pData->fr.lpstrReplaceWith);
     128                                        lstrcpyA(pData->user_fr.fra->lpstrFindWhat, pData->fr.lpstrFindWhat);
     129                                        lstrcpyA(pData->user_fr.fra->lpstrReplaceWith, pData->fr.lpstrReplaceWith);
    128130                                }
    129                                 SendMessageA(pData->fr.hwndOwner, FindReplaceMessage, 0, (LPARAM)pData->user_fr.fra);
     131                                SendMessageA(pData->fr.hwndOwner, FindReplaceMessage, 0, (LPARAM)pData->user_fr.fra);
    130132                        }
    131                         break;
    132 
    133                 case pshHelp:
    134                         pData->user_fr.fra->Flags |= COMDLG32_FR_GetFlags(hDlgWnd);
    135                         SendMessageA(pData->fr.hwndOwner, HelpMessage, (WPARAM)hDlgWnd, (LPARAM)pData->user_fr.fra);
    136                         break;
     133                        break;
     134
     135                case pshHelp:
     136                        pData->user_fr.fra->Flags |= COMDLG32_FR_GetFlags(hDlgWnd);
     137                        SendMessageA(pData->fr.hwndOwner, HelpMessage, (WPARAM)hDlgWnd, (LPARAM)pData->user_fr.fra);
     138                        break;
    137139                }
    138140        }
    139141        else if(NotifyCode == EN_CHANGE && Id == edt1)
    140         {
    141                 BOOL enable = SendDlgItemMessageA(hDlgWnd, edt1, WM_GETTEXTLENGTH, 0, 0) > 0;
    142                 EnableWindow(GetDlgItem(hDlgWnd, IDOK), enable);
     142        {
     143                BOOL enable = SendDlgItemMessageA(hDlgWnd, edt1, WM_GETTEXTLENGTH, 0, 0) > 0;
     144                EnableWindow(GetDlgItem(hDlgWnd, IDOK), enable);
    143145                if(pData->fr.Flags & FR_WINE_REPLACE)
    144146                {
    145                         EnableWindow(GetDlgItem(hDlgWnd, psh1), enable);
    146                         EnableWindow(GetDlgItem(hDlgWnd, psh2), enable);
    147                 }
    148         }
    149 }
    150 
    151 /***********************************************************************
    152  *      COMDLG32_FindReplaceDlgProc             [internal]
     147                        EnableWindow(GetDlgItem(hDlgWnd, psh1), enable);
     148                        EnableWindow(GetDlgItem(hDlgWnd, psh2), enable);
     149                }
     150        }
     151}
     152
     153/***********************************************************************
     154 *      COMDLG32_FindReplaceDlgProc             [internal]
    153155 * [Find/Replace]Text32[A/W] window procedure.
    154156 */
    155157static BOOL CALLBACK COMDLG32_FindReplaceDlgProc(HWND hDlgWnd, UINT iMsg, WPARAM wParam, LPARAM lParam)
    156158{
    157         COMDLG32_FR_Data *pdata = (COMDLG32_FR_Data *)GetPropA(hDlgWnd, (LPSTR)COMDLG32_Atom);
    158         BOOL retval = TRUE;;
    159 
    160         if(iMsg == WM_INITDIALOG)
     159        COMDLG32_FR_Data *pdata = (COMDLG32_FR_Data *)GetPropA(hDlgWnd, (LPSTR)COMDLG32_Atom);
     160        BOOL retval = TRUE;;
     161
     162        if(iMsg == WM_INITDIALOG)
    161163        {
    162164                pdata = (COMDLG32_FR_Data *)lParam;
    163                 if(!SetPropA(hDlgWnd, (LPSTR)COMDLG32_Atom, (HANDLE)pdata))
    164                 {
    165                         ERR("Could not Set prop; invent a gracefull exit?...\n");
    166                         DestroyWindow(hDlgWnd);
     165                if(!SetPropA(hDlgWnd, (LPSTR)COMDLG32_Atom, (HANDLE)pdata))
     166                {
     167                        ERR("Could not Set prop; invent a gracefull exit?...\n");
     168                        DestroyWindow(hDlgWnd);
    167169                        return FALSE;
    168170                }
    169                 SendDlgItemMessageA(hDlgWnd, edt1, EM_SETLIMITTEXT, (WPARAM)pdata->fr.wFindWhatLen, 0);
    170                 SendDlgItemMessageA(hDlgWnd, edt1, WM_SETTEXT, 0, (LPARAM)pdata->fr.lpstrFindWhat);
     171                SendDlgItemMessageA(hDlgWnd, edt1, EM_SETLIMITTEXT, (WPARAM)pdata->fr.wFindWhatLen, 0);
     172                SendDlgItemMessageA(hDlgWnd, edt1, WM_SETTEXT, 0, (LPARAM)pdata->fr.lpstrFindWhat);
    171173                if(pdata->fr.Flags & FR_WINE_REPLACE)
    172174                {
    173                         SendDlgItemMessageA(hDlgWnd, edt2, EM_SETLIMITTEXT, (WPARAM)pdata->fr.wReplaceWithLen, 0);
    174                         SendDlgItemMessageA(hDlgWnd, edt2, WM_SETTEXT, 0, (LPARAM)pdata->fr.lpstrReplaceWith);
    175                 }
    176 
    177                 if(!(pdata->fr.Flags & FR_SHOWHELP))
    178                         ShowWindow(GetDlgItem(hDlgWnd, pshHelp), SW_HIDE);
    179                 if(pdata->fr.Flags & FR_HIDEUPDOWN)
    180                 {
    181                         ShowWindow(GetDlgItem(hDlgWnd, rad1), SW_HIDE);
    182                         ShowWindow(GetDlgItem(hDlgWnd, rad2), SW_HIDE);
    183                         ShowWindow(GetDlgItem(hDlgWnd, grp1), SW_HIDE);
    184                 }
    185                 else if(pdata->fr.Flags & FR_NOUPDOWN)
    186                 {
    187                         EnableWindow(GetDlgItem(hDlgWnd, rad1), FALSE);
    188                         EnableWindow(GetDlgItem(hDlgWnd, rad2), FALSE);
    189                         EnableWindow(GetDlgItem(hDlgWnd, grp1), FALSE);
    190                 }
     175                        SendDlgItemMessageA(hDlgWnd, edt2, EM_SETLIMITTEXT, (WPARAM)pdata->fr.wReplaceWithLen, 0);
     176                        SendDlgItemMessageA(hDlgWnd, edt2, WM_SETTEXT, 0, (LPARAM)pdata->fr.lpstrReplaceWith);
     177                }
     178
     179                if(!(pdata->fr.Flags & FR_SHOWHELP))
     180                        ShowWindow(GetDlgItem(hDlgWnd, pshHelp), SW_HIDE);
     181                if(pdata->fr.Flags & FR_HIDEUPDOWN)
     182                {
     183                        ShowWindow(GetDlgItem(hDlgWnd, rad1), SW_HIDE);
     184                        ShowWindow(GetDlgItem(hDlgWnd, rad2), SW_HIDE);
     185                        ShowWindow(GetDlgItem(hDlgWnd, grp1), SW_HIDE);
     186                }
     187                else if(pdata->fr.Flags & FR_NOUPDOWN)
     188                {
     189                        EnableWindow(GetDlgItem(hDlgWnd, rad1), FALSE);
     190                        EnableWindow(GetDlgItem(hDlgWnd, rad2), FALSE);
     191                        EnableWindow(GetDlgItem(hDlgWnd, grp1), FALSE);
     192                }
    191193                else
    192194                {
    193                         SendDlgItemMessageA(hDlgWnd, rad1, BM_SETCHECK, pdata->fr.Flags & FR_DOWN ? 0 : BST_CHECKED, 0);
    194                         SendDlgItemMessageA(hDlgWnd, rad2, BM_SETCHECK, pdata->fr.Flags & FR_DOWN ? BST_CHECKED : 0, 0);
    195                 }
    196 
    197                 if(pdata->fr.Flags & FR_HIDEMATCHCASE)
    198                         ShowWindow(GetDlgItem(hDlgWnd, chx2), SW_HIDE);
    199                 else if(pdata->fr.Flags & FR_NOMATCHCASE)
    200                         EnableWindow(GetDlgItem(hDlgWnd, chx2), FALSE);
     195                        SendDlgItemMessageA(hDlgWnd, rad1, BM_SETCHECK, pdata->fr.Flags & FR_DOWN ? 0 : BST_CHECKED, 0);
     196                        SendDlgItemMessageA(hDlgWnd, rad2, BM_SETCHECK, pdata->fr.Flags & FR_DOWN ? BST_CHECKED : 0, 0);
     197                }
     198
     199                if(pdata->fr.Flags & FR_HIDEMATCHCASE)
     200                        ShowWindow(GetDlgItem(hDlgWnd, chx2), SW_HIDE);
     201                else if(pdata->fr.Flags & FR_NOMATCHCASE)
     202                        EnableWindow(GetDlgItem(hDlgWnd, chx2), FALSE);
    201203                else
    202                         SendDlgItemMessageA(hDlgWnd, chx2, BM_SETCHECK, pdata->fr.Flags & FR_MATCHCASE ? BST_CHECKED : 0, 0);
    203 
    204                 if(pdata->fr.Flags & FR_HIDEWHOLEWORD)
    205                         ShowWindow(GetDlgItem(hDlgWnd, chx1), SW_HIDE);
    206                 else if(pdata->fr.Flags & FR_NOWHOLEWORD)
    207                         EnableWindow(GetDlgItem(hDlgWnd, chx1), FALSE);
     204                        SendDlgItemMessageA(hDlgWnd, chx2, BM_SETCHECK, pdata->fr.Flags & FR_MATCHCASE ? BST_CHECKED : 0, 0);
     205
     206                if(pdata->fr.Flags & FR_HIDEWHOLEWORD)
     207                        ShowWindow(GetDlgItem(hDlgWnd, chx1), SW_HIDE);
     208                else if(pdata->fr.Flags & FR_NOWHOLEWORD)
     209                        EnableWindow(GetDlgItem(hDlgWnd, chx1), FALSE);
    208210                else
    209                         SendDlgItemMessageA(hDlgWnd, chx1, BM_SETCHECK, pdata->fr.Flags & FR_WHOLEWORD ? BST_CHECKED : 0, 0);
    210 
    211                 /* We did the init here, now call the hook if requested */
     211                        SendDlgItemMessageA(hDlgWnd, chx1, BM_SETCHECK, pdata->fr.Flags & FR_WHOLEWORD ? BST_CHECKED : 0, 0);
     212
     213                /* We did the init here, now call the hook if requested */
    212214#ifdef __WIN32OS2__
    213                 //SvL: If hooked and hook returns TRUE, then show dialog
    214                 //     -> if not hooked, just display it!
    215                 if(!(pdata->fr.Flags & FR_ENABLEHOOK) ||
    216                      pdata->fr.lpfnHook(hDlgWnd, iMsg, wParam, pdata->fr.lCustData))
     215                //SvL: If hooked and hook returns TRUE, then show dialog
     216                //     -> if not hooked, just display it!
     217                if(!(pdata->fr.Flags & FR_ENABLEHOOK) ||
     218                     pdata->fr.lpfnHook(hDlgWnd, iMsg, wParam, pdata->fr.lCustData))
    217219#else
    218                 if((pdata->fr.Flags & FR_ENABLEHOOK)
    219                      && pdata->fr.lpfnHook(hDlgWnd, iMsg, wParam, pdata->fr.lCustData))
     220                if((pdata->fr.Flags & FR_ENABLEHOOK)
     221                     && pdata->fr.lpfnHook(hDlgWnd, iMsg, wParam, pdata->fr.lCustData))
    220222#endif
    221                 {
    222                         ShowWindow(hDlgWnd, SW_SHOWNORMAL);
    223                         UpdateWindow(hDlgWnd);
    224                 }
    225                 /* else the caller is responsible for showing */
     223                {
     224                        ShowWindow(hDlgWnd, SW_SHOWNORMAL);
     225                        UpdateWindow(hDlgWnd);
     226                }
     227                /* else the caller is responsible for showing */
    226228                return TRUE;
    227229        }
    228230
    229         if(pdata && (pdata->fr.Flags & FR_ENABLEHOOK))
    230         {
    231                 retval = pdata->fr.lpfnHook(hDlgWnd, iMsg, wParam, lParam);
    232         }
    233         else
    234                 retval = FALSE;
    235 
    236         if(pdata && !retval)
    237         {
    238                 retval = TRUE;
    239                 switch(iMsg)
    240                 {
    241                 case WM_COMMAND:
    242                         COMDLG32_FR_HandleWMCommand(hDlgWnd, pdata, LOWORD(wParam), HIWORD(wParam));
    243                         break;
    244 
    245                 case WM_CLOSE:
    246                         COMDLG32_FR_HandleWMCommand(hDlgWnd, pdata, IDCANCEL, BN_CLICKED);
    247                         break;
    248 
    249                 case WM_HELP:
    250                         /* Heeeeelp! */
    251                         FIXME("Got WM_HELP. Who is gonna supply it?\n");
    252                         break;
    253 
    254                 case WM_CONTEXTMENU:
    255                         /* Heeeeelp! */
    256                         FIXME("Got WM_CONTEXTMENU. Who is gonna supply it?\n");
    257                         break;
    258                 /* FIXME: Handle F1 help */
    259 
    260                 default:
    261                         retval = FALSE; /* We did not handle the message */
    262                 }
     231        if(pdata && (pdata->fr.Flags & FR_ENABLEHOOK))
     232        {
     233                retval = pdata->fr.lpfnHook(hDlgWnd, iMsg, wParam, lParam);
     234        }
     235        else
     236                retval = FALSE;
     237
     238        if(pdata && !retval)
     239        {
     240                retval = TRUE;
     241                switch(iMsg)
     242                {
     243                case WM_COMMAND:
     244                        COMDLG32_FR_HandleWMCommand(hDlgWnd, pdata, LOWORD(wParam), HIWORD(wParam));
     245                        break;
     246
     247                case WM_CLOSE:
     248                        COMDLG32_FR_HandleWMCommand(hDlgWnd, pdata, IDCANCEL, BN_CLICKED);
     249                        break;
     250
     251                case WM_HELP:
     252                        /* Heeeeelp! */
     253                        FIXME("Got WM_HELP. Who is gonna supply it?\n");
     254                        break;
     255
     256                case WM_CONTEXTMENU:
     257                        /* Heeeeelp! */
     258                        FIXME("Got WM_CONTEXTMENU. Who is gonna supply it?\n");
     259                        break;
     260                /* FIXME: Handle F1 help */
     261
     262                default:
     263                        retval = FALSE; /* We did not handle the message */
     264                }
    263265        }
    264266
     
    269271        if(iMsg == WM_DESTROY)
    270272        {
    271                 RemovePropA(hDlgWnd, (LPSTR)COMDLG32_Atom);
    272                 HeapFree(GetProcessHeap(), 0, pdata);
     273                RemovePropA(hDlgWnd, (LPSTR)COMDLG32_Atom);
     274                HeapFree(GetProcessHeap(), 0, pdata);
    273275        }
    274276
     
    277279
    278280/***********************************************************************
    279  *      COMDLG32_FR_CheckPartial                [internal]
     281 *      COMDLG32_FR_CheckPartial                [internal]
    280282 * Check various fault conditions in the supplied parameters that
    281283 * cause an extended error to be reported.
    282  *      RETURNS
    283  *              TRUE: Succes
    284  *              FALSE: Failure
     284 *      RETURNS
     285 *              TRUE: Succes
     286 *              FALSE: Failure
    285287 */
    286288static BOOL COMDLG32_FR_CheckPartial(
    287         LPFINDREPLACEA pfr,     /* [in] Find structure */
    288         BOOL Replace            /* [in] True if called as replace */
     289        LPFINDREPLACEA pfr,     /* [in] Find structure */
     290        BOOL Replace            /* [in] True if called as replace */
    289291) {
    290         if(!pfr)
    291         {
    292                 COMDLG32_SetCommDlgExtendedError(CDERR_GENERALCODES);
    293                 return FALSE;
    294         }
     292        if(!pfr)
     293        {
     294                COMDLG32_SetCommDlgExtendedError(CDERR_GENERALCODES);
     295                return FALSE;
     296        }
    295297
    296298        if(pfr->lStructSize != sizeof(FINDREPLACEA))
    297299        {
    298                 COMDLG32_SetCommDlgExtendedError(CDERR_STRUCTSIZE);
    299                 return FALSE;
     300                COMDLG32_SetCommDlgExtendedError(CDERR_STRUCTSIZE);
     301                return FALSE;
    300302        }
    301303
    302304        if(!IsWindow(pfr->hwndOwner))
    303305        {
    304                 COMDLG32_SetCommDlgExtendedError(CDERR_DIALOGFAILURE);
    305                 return FALSE;
     306                COMDLG32_SetCommDlgExtendedError(CDERR_DIALOGFAILURE);
     307                return FALSE;
    306308        }
    307309
    308310#ifdef __WIN32OS2__
    309         //SvL: Notepad set this to 32
    310         if((!pfr->lpstrFindWhat)
     311        //SvL: Notepad set this to 32
     312        if((!pfr->lpstrFindWhat)
    311313#else
    312         if((pfr->wFindWhatLen < 80 || !pfr->lpstrFindWhat)
     314        if((pfr->wFindWhatLen < 80 || !pfr->lpstrFindWhat)
    313315#endif
    314316           ||(Replace && (pfr->wReplaceWithLen < 80 || !pfr->lpstrReplaceWith)))
    315317        {
    316                 COMDLG32_SetCommDlgExtendedError(FRERR_BUFFERLENGTHZERO);
    317                 return FALSE;
    318         }
    319 
    320         if((FindReplaceMessage = RegisterWindowMessageA(FINDMSGSTRING)) == 0)
    321         {
    322                 COMDLG32_SetCommDlgExtendedError(CDERR_REGISTERMSGFAIL);
    323                 return FALSE;
    324         }
    325         if((HelpMessage = RegisterWindowMessageA(HELPMSGSTRING)) == 0)
    326         {
    327                 COMDLG32_SetCommDlgExtendedError(CDERR_REGISTERMSGFAIL);
     318                COMDLG32_SetCommDlgExtendedError(FRERR_BUFFERLENGTHZERO);
     319                return FALSE;
     320        }
     321
     322        if((FindReplaceMessage = RegisterWindowMessageA(FINDMSGSTRING)) == 0)
     323        {
     324                COMDLG32_SetCommDlgExtendedError(CDERR_REGISTERMSGFAIL);
     325                return FALSE;
     326        }
     327        if((HelpMessage = RegisterWindowMessageA(HELPMSGSTRING)) == 0)
     328        {
     329                COMDLG32_SetCommDlgExtendedError(CDERR_REGISTERMSGFAIL);
    328330                return FALSE;
    329331        }
     
    331333        if((pfr->Flags & FR_ENABLEHOOK) && !pfr->lpfnHook)
    332334        {
    333                 COMDLG32_SetCommDlgExtendedError(CDERR_NOHOOK);
     335                COMDLG32_SetCommDlgExtendedError(CDERR_NOHOOK);
    334336                return FALSE;
    335337        }
     
    337339        if((pfr->Flags & (FR_ENABLETEMPLATE | FR_ENABLETEMPLATEHANDLE)) && !pfr->hInstance)
    338340        {
    339                 COMDLG32_SetCommDlgExtendedError(CDERR_NOHINSTANCE);
     341                COMDLG32_SetCommDlgExtendedError(CDERR_NOHINSTANCE);
    340342                return FALSE;
    341343        }
     
    343345        if((pfr->Flags & FR_ENABLETEMPLATE) && !pfr->lpTemplateName)
    344346        {
    345                 COMDLG32_SetCommDlgExtendedError(CDERR_NOTEMPLATE);
    346                 return FALSE;
    347         }
    348 
    349         return TRUE;
    350 }
    351 
    352 /***********************************************************************
    353  *      COMDLG32_FR_DoFindReplace               [internal]
     347                COMDLG32_SetCommDlgExtendedError(CDERR_NOTEMPLATE);
     348                return FALSE;
     349        }
     350
     351        return TRUE;
     352}
     353
     354/***********************************************************************
     355 *      COMDLG32_FR_DoFindReplace               [internal]
    354356 * Actual load and creation of the Find/Replace dialog.
    355  *      RETURNS
    356  *              Window handle to created dialog:Succes
    357  *              NULL:Failure
     357 *      RETURNS
     358 *              Window handle to created dialog:Succes
     359 *              NULL:Failure
    358360 */
    359361static HWND COMDLG32_FR_DoFindReplace(
    360         COMDLG32_FR_Data *pdata /* [in] Internal data structure */
     362        COMDLG32_FR_Data *pdata /* [in] Internal data structure */
    361363) {
    362         HWND hdlgwnd = 0;
     364        HWND hdlgwnd = 0;
    363365        HGLOBAL loadrc;
    364366        DWORD error;
    365367        LPDLGTEMPLATEW rcs;
    366368
    367         TRACE("hInst=%08x, Flags=%08lx\n", pdata->fr.hInstance, pdata->fr.Flags);
     369        TRACE("hInst=%08x, Flags=%08lx\n", pdata->fr.hInstance, pdata->fr.Flags);
    368370
    369371        if(!(pdata->fr.Flags & FR_ENABLETEMPLATEHANDLE))
    370372        {
    371                 HMODULE hmod = COMDLG32_hInstance;
    372                 HRSRC htemplate;
    373                 if(pdata->fr.Flags & FR_ENABLETEMPLATE)
    374                 {
    375                         hmod = (HMODULE)pdata->fr.hInstance;
     373                HMODULE hmod = COMDLG32_hInstance;
     374                HRSRC htemplate;
     375                if(pdata->fr.Flags & FR_ENABLETEMPLATE)
     376                {
     377                        hmod = (HMODULE)pdata->fr.hInstance;
    376378                        if(pdata->fr.Flags & FR_WINE_UNICODE)
    377379                        {
    378                                 htemplate = FindResourceW(hmod, (LPWSTR)pdata->fr.lpTemplateName, (LPWSTR)RT_DIALOGA);
     380                                htemplate = FindResourceW(hmod, (LPWSTR)pdata->fr.lpTemplateName, (LPWSTR)RT_DIALOGA);
    379381                        }
    380382                        else
    381383                        {
    382                                 htemplate = FindResourceA(hmod, pdata->fr.lpTemplateName, (LPCSTR)RT_DIALOGA);
     384                                htemplate = FindResourceA(hmod, pdata->fr.lpTemplateName, (LPCSTR)RT_DIALOGA);
    383385                        }
    384                 }
    385                 else
    386                 {
    387                         int rcid = pdata->fr.Flags & FR_WINE_REPLACE ? REPLACEDLGORD
    388                                                                      : FINDDLGORD;
    389                         htemplate = FindResourceA(hmod, MAKEINTRESOURCEA(rcid), (LPCSTR)RT_DIALOGA);
    390                 }
    391                 if(!htemplate)
    392                 {
    393                         error = CDERR_FINDRESFAILURE;
    394                         goto cleanup;
    395                 }
    396 
    397                 loadrc = LoadResource(hmod, htemplate);
     386                }
     387                else
     388                {
     389                        int rcid = pdata->fr.Flags & FR_WINE_REPLACE ? REPLACEDLGORD
     390                                                                     : FINDDLGORD;
     391                        htemplate = FindResourceA(hmod, MAKEINTRESOURCEA(rcid), (LPCSTR)RT_DIALOGA);
     392                }
     393                if(!htemplate)
     394                {
     395                        error = CDERR_FINDRESFAILURE;
     396                        goto cleanup;
     397                }
     398
     399                loadrc = LoadResource(hmod, htemplate);
    398400        }
    399401        else
    400402        {
    401                 loadrc = (HGLOBAL)pdata->fr.hInstance;
     403                loadrc = (HGLOBAL)pdata->fr.hInstance;
    402404        }
    403405
    404406        if(!loadrc)
    405407        {
    406                 error = CDERR_LOADRESFAILURE;
    407                 goto cleanup;
    408         }
     408                error = CDERR_LOADRESFAILURE;
     409                goto cleanup;
     410        }
    409411
    410412        if((rcs = (LPDLGTEMPLATEW)LockResource(loadrc)) == NULL)
    411413        {
    412                 error = CDERR_LOCKRESFAILURE;
    413                 goto cleanup;
     414                error = CDERR_LOCKRESFAILURE;
     415                goto cleanup;
    414416        }
    415417
    416418        hdlgwnd = CreateDialogIndirectParamA(COMDLG32_hInstance,
    417                                              rcs,
     419                                             rcs,
    418420                                             pdata->fr.hwndOwner,
    419421                                             (DLGPROC)COMDLG32_FindReplaceDlgProc,
    420422                                             (LPARAM)pdata);
    421         if(!hdlgwnd)
    422         {
    423                 error = CDERR_DIALOGFAILURE;
     423        if(!hdlgwnd)
     424        {
     425                error = CDERR_DIALOGFAILURE;
    424426cleanup:
    425                 COMDLG32_SetCommDlgExtendedError(error);
     427                COMDLG32_SetCommDlgExtendedError(error);
    426428                HeapFree(GetProcessHeap(), 0, pdata);
    427429        }
     
    430432
    431433/***********************************************************************
    432  *      FindText32A                             [COMDLG32.6]
    433  *      RETURNS
    434  *              Window handle to created dialog: Succes
    435  *              NULL: Failure
     434 *      FindText32A                             [COMDLG32.6]
     435 *      RETURNS
     436 *              Window handle to created dialog: Succes
     437 *              NULL: Failure
    436438 */
    437439HWND WINAPI FindTextA(
    438         LPFINDREPLACEA pfr      /* [in] Find/replace structure*/
     440        LPFINDREPLACEA pfr      /* [in] Find/replace structure*/
    439441) {
    440         COMDLG32_FR_Data *pdata;
     442        COMDLG32_FR_Data *pdata;
    441443
    442444        dprintf(("FindTextA: LPFINDREPLACE=%p\n", pfr));
    443445
    444         if(!COMDLG32_FR_CheckPartial(pfr, FALSE))
    445                 return 0;
    446 
    447         if((pdata = (COMDLG32_FR_Data *)COMDLG32_AllocMem(sizeof(COMDLG32_FR_Data))) == NULL)
    448                 return 0; /* Error has been set */
     446        if(!COMDLG32_FR_CheckPartial(pfr, FALSE))
     447                return 0;
     448
     449        if((pdata = (COMDLG32_FR_Data *)COMDLG32_AllocMem(sizeof(COMDLG32_FR_Data))) == NULL)
     450                return 0; /* Error has been set */
    449451
    450452        pdata->user_fr.fra = pfr;
    451453        pdata->fr = *pfr;
    452         return COMDLG32_FR_DoFindReplace(pdata);
    453 }
    454 
    455 /***********************************************************************
    456  *      ReplaceText32A                          [COMDLG32.19]
    457  *      RETURNS
    458  *              Window handle to created dialog: Succes
    459  *              NULL: Failure
     454        return COMDLG32_FR_DoFindReplace(pdata);
     455}
     456
     457/***********************************************************************
     458 *      ReplaceText32A                          [COMDLG32.19]
     459 *      RETURNS
     460 *              Window handle to created dialog: Succes
     461 *              NULL: Failure
    460462 */
    461463HWND WINAPI ReplaceTextA(
    462         LPFINDREPLACEA pfr      /* [in] Find/replace structure*/
     464        LPFINDREPLACEA pfr      /* [in] Find/replace structure*/
    463465) {
    464         COMDLG32_FR_Data *pdata;
     466        COMDLG32_FR_Data *pdata;
    465467
    466468        dprintf(("ReplaceTextA: LPFINDREPLACE=%p\n", pfr));
    467469
    468         if(!COMDLG32_FR_CheckPartial(pfr, TRUE))
    469                 return 0;
    470 
    471         if((pdata = (COMDLG32_FR_Data *)COMDLG32_AllocMem(sizeof(COMDLG32_FR_Data))) == NULL)
    472                 return 0; /* Error has been set */
     470        if(!COMDLG32_FR_CheckPartial(pfr, TRUE))
     471                return 0;
     472
     473        if((pdata = (COMDLG32_FR_Data *)COMDLG32_AllocMem(sizeof(COMDLG32_FR_Data))) == NULL)
     474                return 0; /* Error has been set */
    473475
    474476        pdata->user_fr.fra = pfr;
    475477        pdata->fr = *pfr;
    476         pdata->fr.Flags |= FR_WINE_REPLACE;
    477         return COMDLG32_FR_DoFindReplace(pdata);
    478 }
    479 
    480 /***********************************************************************
    481  *      FinfText32W                             [COMDLG32.7]
    482  *      RETURNS
    483  *              Window handle to created dialog: Succes
    484  *              NULL: Failure
     478        pdata->fr.Flags |= FR_WINE_REPLACE;
     479        return COMDLG32_FR_DoFindReplace(pdata);
     480}
     481
     482/***********************************************************************
     483 *      FinfText32W                             [COMDLG32.7]
     484 *      RETURNS
     485 *              Window handle to created dialog: Succes
     486 *              NULL: Failure
    485487 */
    486488HWND WINAPI FindTextW(
    487         LPFINDREPLACEW pfr      /* [in] Find/replace structure*/
     489        LPFINDREPLACEW pfr      /* [in] Find/replace structure*/
    488490) {
    489         COMDLG32_FR_Data *pdata;
     491        COMDLG32_FR_Data *pdata;
    490492
    491493        dprintf(("FindTextW: LPFINDREPLACE=%p\n", pfr));
    492494
    493         if(!COMDLG32_FR_CheckPartial((LPFINDREPLACEA)pfr, FALSE))
    494                 return 0;
    495 
    496         if((pdata = (COMDLG32_FR_Data *)COMDLG32_AllocMem(sizeof(COMDLG32_FR_Data)
    497                                                            + pfr->wFindWhatLen)) == NULL)
    498                 return 0; /* Error has been set */
     495        if(!COMDLG32_FR_CheckPartial((LPFINDREPLACEA)pfr, FALSE))
     496                return 0;
     497
     498        if((pdata = (COMDLG32_FR_Data *)COMDLG32_AllocMem(sizeof(COMDLG32_FR_Data)
     499                                                           + pfr->wFindWhatLen)) == NULL)
     500                return 0; /* Error has been set */
    499501
    500502        pdata->user_fr.frw = pfr;
    501         pdata->fr = *(LPFINDREPLACEA)pfr;       /* FINDREPLACEx have same size */
    502         pdata->fr.Flags |= FR_WINE_UNICODE;
    503         pdata->fr.lpstrFindWhat = (LPSTR)(((LPFINDREPLACEA)(pdata+1))+1);       /* Set string pointer */
     503        pdata->fr = *(LPFINDREPLACEA)pfr;       /* FINDREPLACEx have same size */
     504        pdata->fr.Flags |= FR_WINE_UNICODE;
     505        pdata->fr.lpstrFindWhat = (LPSTR)(((LPFINDREPLACEA)(pdata+1))+1);       /* Set string pointer */
    504506        lstrcpynWtoA(pdata->fr.lpstrFindWhat, pfr->lpstrFindWhat, pfr->wFindWhatLen);
    505507        return COMDLG32_FR_DoFindReplace(pdata);
     
    507509
    508510/***********************************************************************
    509  *      ReplaceTextW                            [COMDLG32.20]
    510  *      RETURNS
    511  *              Window handle to created dialog: Succes
    512  *              NULL: Failure
     511 *      ReplaceTextW                            [COMDLG32.20]
     512 *      RETURNS
     513 *              Window handle to created dialog: Succes
     514 *              NULL: Failure
    513515 */
    514516HWND WINAPI ReplaceTextW(
    515         LPFINDREPLACEW pfr      /* [in] Find/replace structure*/
     517        LPFINDREPLACEW pfr      /* [in] Find/replace structure*/
    516518) {
    517         COMDLG32_FR_Data *pdata;
     519        COMDLG32_FR_Data *pdata;
    518520
    519521        dprintf(("ReplaceTextW: LPFINDREPLACE=%p\n", pfr));
    520522
    521         if(!COMDLG32_FR_CheckPartial((LPFINDREPLACEA)pfr, FALSE))
    522                 return 0;
    523 
    524         if((pdata = (COMDLG32_FR_Data *)COMDLG32_AllocMem(sizeof(COMDLG32_FR_Data)
    525                                                            + pfr->wFindWhatLen
    526                                                            + pfr->wReplaceWithLen)) == NULL)
    527 
    528                 return 0; /* Error has been set */
     523        if(!COMDLG32_FR_CheckPartial((LPFINDREPLACEA)pfr, FALSE))
     524                return 0;
     525
     526        if((pdata = (COMDLG32_FR_Data *)COMDLG32_AllocMem(sizeof(COMDLG32_FR_Data)
     527                                                           + pfr->wFindWhatLen
     528                                                           + pfr->wReplaceWithLen)) == NULL)
     529
     530                return 0; /* Error has been set */
    529531
    530532        pdata->user_fr.frw = pfr;
    531         pdata->fr = *(LPFINDREPLACEA)pfr;       /* FINDREPLACEx have same size */
    532         pdata->fr.Flags |= FR_WINE_REPLACE | FR_WINE_UNICODE;
    533         pdata->fr.lpstrFindWhat = (LPSTR)(((LPFINDREPLACEA)(pdata+1))+1);       /* Set string pointers */
     533        pdata->fr = *(LPFINDREPLACEA)pfr;       /* FINDREPLACEx have same size */
     534        pdata->fr.Flags |= FR_WINE_REPLACE | FR_WINE_UNICODE;
     535        pdata->fr.lpstrFindWhat = (LPSTR)(((LPFINDREPLACEA)(pdata+1))+1);       /* Set string pointers */
    534536        pdata->fr.lpstrReplaceWith = (LPSTR)(((LPFINDREPLACEA)(pdata+1))+1) + pfr->wFindWhatLen;
    535537        lstrcpynWtoA(pdata->fr.lpstrFindWhat, pfr->lpstrFindWhat, pfr->wFindWhatLen);
Note: See TracChangeset for help on using the changeset viewer.