Changeset 3243 for trunk/src/shell32/pidl.cpp
- Timestamp:
- Mar 26, 2000, 6:34:57 PM (25 years ago)
- 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 phallerExp $ */1 /* $Id: pidl.cpp,v 1.6 2000-03-26 16:34:42 cbratschi Exp $ */ 2 2 3 3 /* … … 14 14 * a pidl == NULL means desktop and is legal 15 15 * 16 * Corel WINE 20000324 level 16 17 */ 17 18 … … 92 93 MESSAGE ("empty pidl (Desktop)\n"); 93 94 } 95 pcheck(pidl); 94 96 } 95 97 … … 892 894 * SHGetDataFromIDListA [SHELL32.247] 893 895 * 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 894 899 */ 895 900 … … 900 905 int, len) 901 906 { 907 DWORD type; 908 902 909 TRACE_(shell)("sf=%p pidl=%p 0x%04x %p 0x%04x stub\n",psf,pidl,nFormat,dest,len); 903 910 … … 908 915 case SHGDFIL_FINDDATA: 909 916 { 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); 923 928 } 924 929 return NOERROR; … … 946 951 int, len) 947 952 { 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; 972 984 } 973 985 … … 999 1011 1000 1012 pdump(pidl); 1001 1013 #ifdef SHELL_NO_DESKTOP 1002 1014 if(_ILIsDesktop(pidl)) 1003 1015 { … … 1005 1017 } 1006 1018 else 1019 #endif 1007 1020 { 1008 1021 if (SHGetDesktopFolder(&shellfolder)==S_OK) … … 1075 1088 1076 1089 SHFree (pidlParent); 1090 if (psf) IShellFolder_Release(psf); 1077 1091 } 1078 1092 … … 1116 1130 ODINFUNCTION0(LPITEMIDLIST,_ILCreateMyComputer) 1117 1131 { 1118 return _ILCreate(PT_MYCOMP, & IID_MyComputer, sizeof(GUID));1132 return _ILCreate(PT_MYCOMP, &CLSID_MyComputer, sizeof(GUID)); 1119 1133 } 1120 1134 1121 1135 ODINFUNCTION0(LPITEMIDLIST,_ILCreateIExplore) 1122 1136 { 1123 return _ILCreate(PT_MYCOMP, & IID_IExplore, sizeof(GUID));1137 return _ILCreate(PT_MYCOMP, &CLSID_Internet, sizeof(GUID)); 1124 1138 } 1125 1139 1126 1140 ODINFUNCTION0(LPITEMIDLIST,_ILCreateControl) 1127 1141 { 1128 return _ILCreate(PT_SPECIAL, & IID_Control, sizeof(GUID));1142 return _ILCreate(PT_SPECIAL, &CLSID_ControlPanel, sizeof(GUID)); 1129 1143 } 1130 1144 1131 1145 ODINFUNCTION0(LPITEMIDLIST,_ILCreatePrinter) 1132 1146 { 1133 return _ILCreate(PT_SPECIAL, & IID_Printer, sizeof(GUID));1147 return _ILCreate(PT_SPECIAL, &CLSID_Printers, sizeof(GUID)); 1134 1148 } 1135 1149 1136 1150 ODINFUNCTION0(LPITEMIDLIST,_ILCreateNetwork) 1137 1151 { 1138 return _ILCreate(PT_MYCOMP, & IID_Network, sizeof(GUID));1152 return _ILCreate(PT_MYCOMP, &CLSID_NetworkPlaces, sizeof(GUID)); 1139 1153 } 1140 1154 1141 1155 ODINFUNCTION0(LPITEMIDLIST,_ILCreateBitBucket) 1142 1156 { 1143 return _ILCreate(PT_MYCOMP, & IID_BitBucket, sizeof(GUID));1157 return _ILCreate(PT_MYCOMP, &CLSID_RecycleBin, sizeof(GUID)); 1144 1158 } 1145 1159 … … 1357 1371 1358 1372 if (iid) 1359 return IsEqualIID(iid, & IID_MyComputer);1373 return IsEqualIID(iid, &CLSID_MyComputer); 1360 1374 return FALSE; 1361 1375 } … … 1440 1454 pData = _ILGetDataPointer(pidl); 1441 1455 1442 if ( !pData)1456 if (_ILIsDesktop(pidl)) 1443 1457 { 1444 1458 /* desktop */ … … 1621 1635 UINT, uOutSize) 1622 1636 { 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; 1630 1658 } 1631 1659 … … 1665 1693 } 1666 1694 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 */ 1714 DWORD _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 } 1668 1765 1669 1766 ODINFUNCTION3(BOOL,_ILGetExtension,LPCITEMIDLIST, pidl, … … 1737 1834 1738 1835 /************************************************************************* 1739 * _ILGet AttributeStr1836 * _ILGetFileAttributes 1740 1837 * 1741 1838 * Given the ItemIdList, get the Attrib string format … … 1747 1844 * 1748 1845 * RETURNS 1749 * True if successful1750 * 1751 * NOTES 1752 * 1753 */ 1754 ODINFUNCTION3(BOOL, _ILGet AttributeStr, LPCITEMIDLIST, pidl,1846 * Attributes 1847 * 1848 * NOTES 1849 * 1850 */ 1851 ODINFUNCTION3(BOOL, _ILGetFileAttributes, LPCITEMIDLIST, pidl, 1755 1852 LPSTR, pOut, 1756 1853 UINT, uOutSize) 1757 1854 { 1758 1855 LPPIDLDATA pData =_ILGetDataPointer(pidl); 1759 WORD wAttrib ;1856 WORD wAttrib = 0; 1760 1857 int i; 1761 1858 1762 /* Need At Least 6 characters to represent the Attrib String */1763 if(uOutSize < 6)1764 {1765 return FALSE;1766 }1767 1859 switch(pData->type) 1768 1860 { … … 1773 1865 wAttrib = pData->u.file.uFileAttribs; 1774 1866 break; 1775 default:1776 return FALSE;1777 1867 } 1778 i=0; 1779 if(wAttrib & FILE_ATTRIBUTE_READONLY) 1868 if(uOutSize >= 6) 1780 1869 { 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; 1782 1892 } 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.