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/shell32/pidl.cpp

    r2354 r3243  
    1 /* $Id: pidl.cpp,v 1.5 2000-01-08 02:28:54 phaller Exp $ */
     1/* $Id: pidl.cpp,v 1.6 2000-03-26 16:34:42 cbratschi Exp $ */
    22
    33/*
     
    1414 *  a pidl == NULL means desktop and is legal
    1515 *
     16 * Corel WINE 20000324 level
    1617 */
    1718
     
    9293       MESSAGE ("empty pidl (Desktop)\n");
    9394     }
     95     pcheck(pidl);
    9496   }
    9597
     
    892894 * SHGetDataFromIDListA [SHELL32.247]
    893895 *
     896 * NOTES
     897 *  the pidl can be a simple one. since we cant get the path out of the pidl
     898 *  we have to take all data from the pidl
    894899 */
    895900
     
    900905                                           int,           len)
    901906{
     907   DWORD type;
     908
    902909   TRACE_(shell)("sf=%p pidl=%p 0x%04x %p 0x%04x stub\n",psf,pidl,nFormat,dest,len);
    903910
     
    908915     case SHGDFIL_FINDDATA:
    909916       {
    910           WIN32_FIND_DATAA * pfd = (WIN32_FIND_DATAA*)dest;
    911           CHAR pszPath[MAX_PATH];
    912           HANDLE  handle;
    913 
    914           if ( len < sizeof (WIN32_FIND_DATAA)) {
    915        ERR_(shell)("%d does not find sizeof(finddata)\n",len);
    916             return E_INVALIDARG;
    917           }
    918 
    919           SHGetPathFromIDListA(pidl, pszPath);
    920 
    921           if ((handle  = FindFirstFileA ( pszPath, pfd)))
    922             FindClose (handle);
     917               WIN32_FIND_DATAA * pfd = (WIN32_FIND_DATAA*)dest;
     918
     919               if ( len < sizeof (WIN32_FIND_DATAA)) return E_INVALIDARG;
     920
     921               ZeroMemory(pfd, sizeof (WIN32_FIND_DATAA));
     922               _ILGetFileDateTime( pidl, &(pfd->ftLastWriteTime));
     923               pfd->dwFileAttributes = _ILGetFileAttributes(pidl, NULL, 0);
     924               pfd->nFileSizeLow = _ILGetFileSize ( pidl, NULL, 0);
     925               type   = _ILGetDataPointer(pidl)->type;
     926               lstrcpynA(pfd->cFileName,_ILGetTextPointer(type,_ILGetDataPointer(pidl)), MAX_PATH);
     927               lstrcpynA(pfd->cAlternateFileName,_ILGetSTextPointer(type,_ILGetDataPointer(pidl)), 14);
    923928       }
    924929       return NOERROR;
     
    946951                                           int,           len)
    947952{
    948    if (! psf || !dest )  return E_INVALIDARG;
    949 
    950    switch (nFormat)
    951    {
    952      case SHGDFIL_FINDDATA:
    953        {
    954           WIN32_FIND_DATAW * pfd = (WIN32_FIND_DATAW*)dest;
    955           WCHAR   pszPath[MAX_PATH];
    956           HANDLE  handle;
    957 
    958           if ( len < sizeof (WIN32_FIND_DATAW)) {
    959        ERR_(shell)("%d does not find sizeof(finddata)\n",len);
    960             return E_INVALIDARG;
    961           }
    962           SHGetPathFromIDListW(pidl, pszPath);
    963           if ((handle  = FindFirstFileW ( pszPath, pfd)))
    964             FindClose (handle);
    965        }
    966        return NOERROR;
    967      default: /* fallthrough */
    968        break;
    969    }
    970    FIXME_(shell)("(sf=%p pidl=%p nFormat=0x%04x %p 0x%04x), unhandled.\n",psf,pidl,nFormat,dest,len);
    971    return SHGetDataFromIDListA( psf, pidl, nFormat, dest, len);
     953        DWORD type;
     954
     955        if (! psf || !dest )  return E_INVALIDARG;
     956
     957        switch (nFormat)
     958        {
     959          case SHGDFIL_FINDDATA:
     960            {
     961               WIN32_FIND_DATAW * pfd = (WIN32_FIND_DATAW*)dest;
     962
     963               if ( len < sizeof (WIN32_FIND_DATAW)) return E_INVALIDARG;
     964
     965               ZeroMemory(pfd, sizeof (WIN32_FIND_DATAA));
     966               _ILGetFileDateTime( pidl, &(pfd->ftLastWriteTime));
     967               pfd->dwFileAttributes = _ILGetFileAttributes(pidl, NULL, 0);
     968               pfd->nFileSizeLow = _ILGetFileSize ( pidl, NULL, 0);
     969               type   = _ILGetDataPointer(pidl)->type;
     970               lstrcpynAtoW(pfd->cFileName,_ILGetTextPointer(type,_ILGetDataPointer(pidl)), MAX_PATH);
     971               lstrcpynAtoW(pfd->cAlternateFileName,_ILGetSTextPointer(type,_ILGetDataPointer(pidl)), 14);
     972            }
     973            return NOERROR;
     974          case SHGDFIL_NETRESOURCE:
     975          case SHGDFIL_DESCRIPTIONID:
     976            FIXME_(shell)("SHGDFIL %i stub\n", nFormat);
     977            break;
     978
     979          default:
     980            ERR_(shell)("Unknown SHGDFIL %i, please report\n", nFormat);
     981        }
     982
     983        return E_INVALIDARG;
    972984}
    973985
     
    9991011
    10001012   pdump(pidl);
    1001 
     1013#ifdef SHELL_NO_DESKTOP
    10021014   if(_ILIsDesktop(pidl))
    10031015   {
     
    10051017   }
    10061018   else
     1019#endif
    10071020   {
    10081021     if (SHGetDesktopFolder(&shellfolder)==S_OK)
     
    10751088
    10761089     SHFree (pidlParent);
     1090     if (psf) IShellFolder_Release(psf);
    10771091   }
    10781092
     
    11161130ODINFUNCTION0(LPITEMIDLIST,_ILCreateMyComputer)
    11171131{
    1118   return _ILCreate(PT_MYCOMP, &IID_MyComputer, sizeof(GUID));
     1132  return _ILCreate(PT_MYCOMP, &CLSID_MyComputer, sizeof(GUID));
    11191133}
    11201134
    11211135ODINFUNCTION0(LPITEMIDLIST,_ILCreateIExplore)
    11221136{
    1123    return _ILCreate(PT_MYCOMP, &IID_IExplore, sizeof(GUID));
     1137   return _ILCreate(PT_MYCOMP, &CLSID_Internet, sizeof(GUID));
    11241138}
    11251139
    11261140ODINFUNCTION0(LPITEMIDLIST,_ILCreateControl)
    11271141{
    1128    return _ILCreate(PT_SPECIAL, &IID_Control, sizeof(GUID));
     1142   return _ILCreate(PT_SPECIAL, &CLSID_ControlPanel, sizeof(GUID));
    11291143}
    11301144
    11311145ODINFUNCTION0(LPITEMIDLIST,_ILCreatePrinter)
    11321146{
    1133    return _ILCreate(PT_SPECIAL, &IID_Printer, sizeof(GUID));
     1147   return _ILCreate(PT_SPECIAL, &CLSID_Printers, sizeof(GUID));
    11341148}
    11351149
    11361150ODINFUNCTION0(LPITEMIDLIST,_ILCreateNetwork)
    11371151{
    1138    return _ILCreate(PT_MYCOMP, &IID_Network, sizeof(GUID));
     1152   return _ILCreate(PT_MYCOMP, &CLSID_NetworkPlaces, sizeof(GUID));
    11391153}
    11401154
    11411155ODINFUNCTION0(LPITEMIDLIST,_ILCreateBitBucket)
    11421156{
    1143    return _ILCreate(PT_MYCOMP, &IID_BitBucket, sizeof(GUID));
     1157   return _ILCreate(PT_MYCOMP, &CLSID_RecycleBin, sizeof(GUID));
    11441158}
    11451159
     
    13571371
    13581372   if (iid)
    1359      return IsEqualIID(iid, &IID_MyComputer);
     1373     return IsEqualIID(iid, &CLSID_MyComputer);
    13601374   return FALSE;
    13611375}
     
    14401454   pData = _ILGetDataPointer(pidl);
    14411455
    1442    if (!pData)
     1456   if (_ILIsDesktop(pidl))
    14431457   {
    14441458    /* desktop */
     
    16211635                                    UINT,          uOutSize)
    16221636{
    1623    FILETIME ft;
    1624    SYSTEMTIME time;
    1625 
    1626    if (! _ILGetFileDateTime( pidl, &ft )) return FALSE;
    1627 
    1628    FileTimeToSystemTime (&ft, &time);
    1629    return GetDateFormatA(LOCALE_USER_DEFAULT,DATE_SHORTDATE,&time, NULL,  pOut, uOutSize);
     1637        FILETIME ft;
     1638        FILETIME lft;
     1639        SYSTEMTIME time;
     1640        char strTime[16];
     1641        UINT nTempSize=16;
     1642
     1643        if (! _ILGetFileDateTime( pidl, &ft )) return FALSE;
     1644
     1645        FileTimeToLocalFileTime(&ft, &lft);
     1646        FileTimeToSystemTime (&lft, &time);
     1647
     1648        if(GetDateFormatA(LOCALE_USER_DEFAULT,DATE_SHORTDATE,&time, NULL,  pOut, uOutSize) > 0)
     1649        {
     1650            if(GetTimeFormatA(LOCALE_USER_DEFAULT, TIME_NOSECONDS, &time, NULL, strTime, nTempSize) > 0)
     1651            {
     1652                strcat(pOut," ");
     1653                strcat(pOut, strTime);
     1654                return TRUE;
     1655            }
     1656        }
     1657        return FALSE;
    16301658}
    16311659
     
    16651693}
    16661694
    1667 
     1695/*************************************************************************
     1696 * _ILGetFileSizeKB
     1697 *
     1698 * Given the ItemIdList, get the FileSize in KiloByte
     1699 *
     1700 * PARAMS
     1701 *      pidl    [I] The ItemIDList
     1702 *      pOut    [I] The buffer to save the result
     1703 *      uOutsize [I] The size of the buffer
     1704 *
     1705 * RETURNS
     1706 *     The FileSize in KiloBytes
     1707 *
     1708 * NOTES
     1709 *      - pOut can be null when no string is needed
     1710 *      - Standard files in explorer or FileOpen have the file size in
     1711 *          Kilobyte
     1712 *
     1713 */
     1714DWORD _ILGetFileSizeKB (LPCITEMIDLIST pidl, LPSTR pOut, UINT uOutSize)
     1715{
     1716    LPPIDLDATA pdata =_ILGetDataPointer(pidl);
     1717    DWORD dwSize;
     1718    char tempSizeStr[24];
     1719    char kbStr[] = "KB";
     1720    int nTempSizeLen, nNumOfComma;
     1721    int i,j,k;
     1722
     1723    switch (pdata->type)
     1724    {
     1725        case PT_VALUE:
     1726        {
     1727            if(pdata->u.file.dwFileSize >= 1024)
     1728            {
     1729                dwSize = pdata->u.file.dwFileSize / 1024;
     1730            }
     1731            else if(pdata->u.file.dwFileSize > 0)
     1732            {
     1733                dwSize = 1;
     1734            }
     1735            else
     1736            {
     1737                dwSize = 0;
     1738            }
     1739
     1740            if (pOut)
     1741            {
     1742                sprintf(tempSizeStr,"%0ld",dwSize);
     1743                nTempSizeLen = strlen(tempSizeStr);
     1744                nNumOfComma = nTempSizeLen / 4;
     1745                uOutSize = nNumOfComma + strlen(tempSizeStr);
     1746                for(i=nTempSizeLen, j=uOutSize, k=0; j >= 0; j--, k++)
     1747                {
     1748                    if((k %4) == 0 && k != 0)
     1749                    {
     1750                        pOut[j] = ',';
     1751                        k = 0;
     1752                    }
     1753                    else
     1754                    {
     1755                        pOut[j] = tempSizeStr[i--];
     1756                    }
     1757                }
     1758                strcat(pOut,kbStr);
     1759            }
     1760            return dwSize;
     1761        }
     1762    }
     1763    return 0;
     1764}
    16681765
    16691766ODINFUNCTION3(BOOL,_ILGetExtension,LPCITEMIDLIST, pidl,
     
    17371834
    17381835/*************************************************************************
    1739  * _ILGetAttributeStr
     1836 * _ILGetFileAttributes
    17401837 *
    17411838 * Given the ItemIdList, get the Attrib string format
     
    17471844 *
    17481845 * RETURNS
    1749  *     True if successful
    1750  *
    1751  * NOTES
    1752  *
    1753  */
    1754 ODINFUNCTION3(BOOL, _ILGetAttributeStr, LPCITEMIDLIST, pidl,
     1846 *     Attributes
     1847 *
     1848 * NOTES
     1849 *
     1850 */
     1851ODINFUNCTION3(BOOL, _ILGetFileAttributes, LPCITEMIDLIST, pidl,
    17551852                                        LPSTR,         pOut,
    17561853                                        UINT,          uOutSize)
    17571854{
    17581855    LPPIDLDATA pData =_ILGetDataPointer(pidl);
    1759     WORD wAttrib;
     1856    WORD wAttrib = 0;
    17601857    int i;
    17611858
    1762     /* Need At Least 6 characters to represent the Attrib String */
    1763     if(uOutSize < 6)
    1764     {
    1765         return FALSE;
    1766     }
    17671859    switch(pData->type)
    17681860    {
     
    17731865            wAttrib = pData->u.file.uFileAttribs;
    17741866            break;
    1775         default:
    1776             return FALSE;
    17771867    }
    1778     i=0;
    1779     if(wAttrib & FILE_ATTRIBUTE_READONLY)
     1868    if(uOutSize >= 6)
    17801869    {
    1781         pOut[i++] = 'R';
     1870      i=0;
     1871      if(wAttrib & FILE_ATTRIBUTE_READONLY)
     1872      {
     1873          pOut[i++] = 'R';
     1874      }
     1875      if(wAttrib & FILE_ATTRIBUTE_HIDDEN)
     1876      {
     1877          pOut[i++] = 'H';
     1878      }
     1879      if(wAttrib & FILE_ATTRIBUTE_SYSTEM)
     1880      {
     1881          pOut[i++] = 'S';
     1882      }
     1883      if(wAttrib & FILE_ATTRIBUTE_ARCHIVE)
     1884      {
     1885          pOut[i++] = 'A';
     1886      }
     1887      if(wAttrib & FILE_ATTRIBUTE_COMPRESSED)
     1888      {
     1889          pOut[i++] = 'C';
     1890      }
     1891      pOut[i] = 0x00;
    17821892    }
    1783     if(wAttrib & FILE_ATTRIBUTE_HIDDEN)
    1784     {
    1785         pOut[i++] = 'H';
    1786     }
    1787     if(wAttrib & FILE_ATTRIBUTE_SYSTEM)
    1788     {
    1789         pOut[i++] = 'S';
    1790     }
    1791     if(wAttrib & FILE_ATTRIBUTE_ARCHIVE)
    1792     {
    1793         pOut[i++] = 'A';
    1794     }
    1795     if(wAttrib & FILE_ATTRIBUTE_COMPRESSED)
    1796     {
    1797         pOut[i++] = 'C';
    1798     }
    1799     pOut[i] = 0x00;
    1800     return TRUE;
    1801 }
    1802 
     1893    return wAttrib;
     1894}
     1895
Note: See TracChangeset for help on using the changeset viewer.