Ignore:
Timestamp:
Mar 21, 2000, 6:30:46 PM (25 years ago)
Author:
cbratschi
Message:

bug fixes and improvements

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/comctl32/tooltips.cpp

    r3154 r3182  
    1 /* $Id: tooltips.cpp,v 1.4 2000-03-18 16:17:32 cbratschi Exp $ */
     1/* $Id: tooltips.cpp,v 1.5 2000-03-21 17:30:45 cbratschi Exp $ */
    22/*
    33 * Tool tip control
     
    7979}
    8080
    81 
    82 static VOID
    83 TOOLTIPS_GetTipText(HWND hwnd,TOOLTIPS_INFO *infoPtr,INT nTool)
     81static VOID TOOLTIPS_GetCallbackText(HWND hwnd,TOOLTIPS_INFO *infoPtr,TTTOOL_INFO *toolPtr)
     82{
     83  if (isUnicodeNotify(&infoPtr->header))
     84  {
     85    NMTTDISPINFOW ttnmdi;
     86
     87    /* fill NMHDR struct */
     88    ZeroMemory (&ttnmdi,sizeof(NMTTDISPINFOW));
     89    ttnmdi.hdr.hwndFrom = hwnd;
     90    ttnmdi.hdr.idFrom = toolPtr->uId;
     91    ttnmdi.hdr.code = TTN_GETDISPINFOW;
     92    ttnmdi.lpszText = (WCHAR*)&ttnmdi.szText;
     93    ttnmdi.uFlags = toolPtr->uFlags;
     94    ttnmdi.lParam = toolPtr->lParam;
     95    SendMessageA(toolPtr->hwnd,WM_NOTIFY,(WPARAM)toolPtr->uId,(LPARAM)&ttnmdi);
     96
     97    if ((ttnmdi.hinst) && (HIWORD((UINT)ttnmdi.lpszText) == 0))
     98    {
     99      LoadStringW(ttnmdi.hinst,(UINT)ttnmdi.lpszText,infoPtr->szTipText,INFOTIPSIZE);
     100      if (ttnmdi.uFlags & TTF_DI_SETITEM)
     101      {
     102        toolPtr->hinst = ttnmdi.hinst;
     103        toolPtr->lpszText = (LPWSTR)ttnmdi.lpszText;
     104      }
     105    } else
     106    {
     107      if (ttnmdi.lpszText != LPSTR_TEXTCALLBACKW)
     108      {
     109        if (!HIWORD(ttnmdi.lpszText) && (ttnmdi.lpszText != NULL))
     110        {
     111          //error
     112          infoPtr->szTipText[0] = '\0';
     113          return;
     114        }
     115        lstrcpynW(infoPtr->szTipText,ttnmdi.lpszText,INFOTIPSIZE);
     116        if (ttnmdi.uFlags & TTF_DI_SETITEM)
     117        {
     118          INT len = lstrlenW(ttnmdi.lpszText);
     119          toolPtr->hinst = 0;
     120          toolPtr->lpszText = (WCHAR*)COMCTL32_Alloc((len+1)*sizeof(WCHAR));
     121          lstrcpyW(toolPtr->lpszText,ttnmdi.lpszText);
     122        }
     123      } else
     124      {
     125        //ERR (tooltips, "recursive text callback!\n");
     126        infoPtr->szTipText[0] = '\0';
     127      }
     128    }
     129  } else
     130  {
     131    NMTTDISPINFOA ttnmdi;
     132
     133    /* fill NMHDR struct */
     134    ZeroMemory (&ttnmdi,sizeof(NMTTDISPINFOA));
     135    ttnmdi.hdr.hwndFrom = hwnd;
     136    ttnmdi.hdr.idFrom = toolPtr->uId;
     137    ttnmdi.hdr.code = TTN_GETDISPINFOA;
     138    ttnmdi.lpszText = (CHAR*)&ttnmdi.szText;
     139    ttnmdi.uFlags = toolPtr->uFlags;
     140    ttnmdi.lParam = toolPtr->lParam;
     141    SendMessageA(toolPtr->hwnd,WM_NOTIFY,(WPARAM)toolPtr->uId,(LPARAM)&ttnmdi);
     142
     143    if ((ttnmdi.hinst) && (HIWORD((UINT)ttnmdi.lpszText) == 0))
     144    {
     145      LoadStringW(ttnmdi.hinst,(UINT)ttnmdi.lpszText,infoPtr->szTipText,INFOTIPSIZE);
     146      if (ttnmdi.uFlags & TTF_DI_SETITEM)
     147      {
     148        toolPtr->hinst = ttnmdi.hinst;
     149        toolPtr->lpszText = (LPWSTR)ttnmdi.lpszText;
     150      }
     151    } else
     152    {
     153      if (ttnmdi.lpszText != LPSTR_TEXTCALLBACKA)
     154      {
     155        if (!HIWORD(ttnmdi.lpszText) && (ttnmdi.lpszText != NULL))
     156        {
     157          //error
     158          infoPtr->szTipText[0] = '\0';
     159          return;
     160        }
     161        lstrcpynAtoW(infoPtr->szTipText,ttnmdi.lpszText,INFOTIPSIZE);
     162        if (ttnmdi.uFlags & TTF_DI_SETITEM)
     163        {
     164          INT len = lstrlenA(ttnmdi.lpszText);
     165          toolPtr->hinst = 0;
     166          toolPtr->lpszText = (WCHAR*)COMCTL32_Alloc((len+1)*sizeof(WCHAR));
     167          lstrcpyAtoW(toolPtr->lpszText,ttnmdi.lpszText);
     168        }
     169      } else
     170      {
     171        //ERR (tooltips, "recursive text callback!\n");
     172        infoPtr->szTipText[0] = '\0';
     173      }
     174    }
     175  }
     176}
     177
     178static VOID TOOLTIPS_GetTipText(HWND hwnd,TOOLTIPS_INFO *infoPtr,INT nTool)
    84179{
    85180    TTTOOL_INFO *toolPtr = &infoPtr->tools[nTool];
     
    93188    {
    94189      if (toolPtr->lpszText == LPSTR_TEXTCALLBACKW)
    95       {
    96         NMTTDISPINFOA ttnmdi;
    97 
    98         /* fill NMHDR struct */
    99         ZeroMemory (&ttnmdi,sizeof(NMTTDISPINFOA));
    100         ttnmdi.hdr.hwndFrom = hwnd;
    101         ttnmdi.hdr.idFrom = toolPtr->uId;
    102         ttnmdi.hdr.code = TTN_GETDISPINFOA;
    103         ttnmdi.lpszText = (LPSTR)&ttnmdi.szText;
    104         ttnmdi.uFlags = toolPtr->uFlags;
    105         ttnmdi.lParam = toolPtr->lParam;
    106         SendMessageA (toolPtr->hwnd,WM_NOTIFY,(WPARAM)toolPtr->uId,(LPARAM)&ttnmdi);
    107 
    108         if ((ttnmdi.hinst) && (HIWORD((UINT)ttnmdi.szText) == 0))
    109         {
    110           LoadStringW (ttnmdi.hinst,(UINT)ttnmdi.szText,infoPtr->szTipText,INFOTIPSIZE);
    111           if (ttnmdi.uFlags & TTF_DI_SETITEM)
    112           {
    113             toolPtr->hinst = ttnmdi.hinst;
    114             toolPtr->lpszText = (LPWSTR)ttnmdi.szText;
    115           }
    116         } else if (ttnmdi.szText[0])
    117         {
    118           lstrcpynAtoW(infoPtr->szTipText,ttnmdi.szText,INFOTIPSIZE);
    119           if (ttnmdi.uFlags & TTF_DI_SETITEM)
    120           {
    121             INT len = lstrlenA(ttnmdi.szText);
    122             toolPtr->hinst = 0;
    123             toolPtr->lpszText = (WCHAR*)COMCTL32_Alloc((len+1)* sizeof(WCHAR));
    124             lstrcpyAtoW(toolPtr->lpszText,ttnmdi.szText);
    125           }
    126         } else if (ttnmdi.lpszText == 0)
    127         {
    128           /* no text available */
    129           infoPtr->szTipText[0] = '\0';
    130         } else if (ttnmdi.lpszText != LPSTR_TEXTCALLBACKA)
    131         {
    132           lstrcpynAtoW(infoPtr->szTipText,ttnmdi.lpszText,INFOTIPSIZE);
    133           if (ttnmdi.uFlags & TTF_DI_SETITEM)
    134           {
    135             INT len = lstrlenA(ttnmdi.lpszText);
    136             toolPtr->hinst = 0;
    137             toolPtr->lpszText = (WCHAR*)COMCTL32_Alloc((len+1)*sizeof(WCHAR));
    138             lstrcpyAtoW(toolPtr->lpszText,ttnmdi.lpszText);
    139           }
    140         } else
    141         {
    142           //ERR (tooltips, "recursive text callback!\n");
    143           infoPtr->szTipText[0] = '\0';
    144         }
    145       } else
     190        TOOLTIPS_GetCallbackText(hwnd,infoPtr,toolPtr);
     191      else
    146192      {
    147193        /* the item is a usual (unicode) text */
    148194        lstrcpynW(infoPtr->szTipText,toolPtr->lpszText,INFOTIPSIZE);
    149195      }
    150     }
    151     else
     196    } else
    152197    {
    153198      /* no text available */
    154199      infoPtr->szTipText[0] = '\0';
    155200    }
    156 
    157 //    TRACE (tooltips, "\"%s\"\n", debugstr_w(infoPtr->szTipText));
    158201}
    159202
     
    626669    }
    627670
    628 //    TRACE (tooltips, "tool %d\n", nTool);
    629 
    630671    return nTool;
    631672}
     
    638679
    639680    infoPtr->bActive = (BOOL)wParam;
    640 
    641 //    if (infoPtr->bActive)
    642 //      TRACE (tooltips, "activate!\n");
    643681
    644682    if (!(infoPtr->bActive) && (infoPtr->nCurrentTool != -1))
     
    12281266    if (nTool == -1) return 0;
    12291267
    1230     TOOLTIPS_GetTipText(hwnd,infoPtr,nTool); //CB: get text
     1268    TOOLTIPS_GetTipText(hwnd,infoPtr,nTool);
    12311269
    12321270    lstrcpyWtoA(lpToolInfo->lpszText,infoPtr->szTipText);
     
    12511289    if (nTool == -1) return 0;
    12521290
    1253     TOOLTIPS_GetTipText(hwnd,infoPtr,nTool); //CB: get text
     1291    TOOLTIPS_GetTipText(hwnd,infoPtr,nTool);
    12541292
    12551293    lstrcpyW(lpToolInfo->lpszText,infoPtr->szTipText);
Note: See TracChangeset for help on using the changeset viewer.