- Timestamp:
- Jan 8, 2000, 3:43:27 AM (26 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/shell32/shlfolder.cpp
r1695 r2355 1 /* $Id: shlfolder.cpp,v 1. 4 1999-11-10 22:13:09phaller Exp $ */1 /* $Id: shlfolder.cpp,v 1.5 2000-01-08 02:43:27 phaller Exp $ */ 2 2 /* 3 3 * Shell Folder stuff … … 6 6 * Copyright 1998, 1999 Juergen Schmied 7 7 * 8 * IShellFolder with IDropTarget, IPersistFolder8 * IShellFolder2 and related interfaces 9 9 * 10 10 */ … … 29 29 #include "wine/undocshell.h" 30 30 #include "shell32_main.h" 31 #include "shresdef.h" 31 32 32 33 #include <heapstring.h> … … 36 37 37 38 #define MEM_DEBUG 1 39 40 typedef struct 41 { 42 int colnameid; 43 int pcsFlags; 44 int fmt; 45 int cxChar; 46 47 } shvheader; 38 48 39 49 /*************************************************************************** … … 222 232 #define _IDropTarget_Offset ((int)(&(((IGenericSFImpl*)0)->lpvtblDropTarget))) 223 233 #define _ICOM_THIS_From_IDropTarget(class, name) class* This = (class*)(((char*)name)-_IDropTarget_Offset); 234 235 static shvheader GenericSFHeader [] = 236 { 237 { IDS_SHV_COLUMN1, SHCOLSTATE_TYPE_STR | SHCOLSTATE_ONBYDEFAULT, LVCFMT_RIGHT, 15 }, 238 { IDS_SHV_COLUMN2, SHCOLSTATE_TYPE_STR | SHCOLSTATE_ONBYDEFAULT, LVCFMT_RIGHT, 10 }, 239 { IDS_SHV_COLUMN3, SHCOLSTATE_TYPE_STR | SHCOLSTATE_ONBYDEFAULT, LVCFMT_RIGHT, 10 }, 240 { IDS_SHV_COLUMN4, SHCOLSTATE_TYPE_DATE | SHCOLSTATE_ONBYDEFAULT, LVCFMT_RIGHT, 12 }, 241 { IDS_SHV_COLUMN5, SHCOLSTATE_TYPE_STR | SHCOLSTATE_ONBYDEFAULT, LVCFMT_RIGHT, 5 } 242 }; 243 #define GENERICSHELLVIEWCOLUMNS 5 224 244 225 245 /************************************************************************** … … 1015 1035 { 1016 1036 ICOM_THIS(IGenericSFImpl, iface); 1037 1017 1038 TRACE("(%p)\n",This); 1018 return E_NOTIMPL; 1039 1040 if (pSort) *pSort = 0; 1041 if (pDisplay) *pDisplay = 0; 1042 1043 return S_OK; 1019 1044 } 1020 1045 static HRESULT WINAPI IShellFolder_fnGetDefaultColumnState( … … 1024 1049 { 1025 1050 ICOM_THIS(IGenericSFImpl, iface); 1051 1026 1052 TRACE("(%p)\n",This); 1027 return E_NOTIMPL; 1053 1054 if (!pcsFlags || iColumn >= GENERICSHELLVIEWCOLUMNS ) return E_INVALIDARG; 1055 1056 *pcsFlags = GenericSFHeader[iColumn].pcsFlags; 1057 1058 return S_OK; 1028 1059 } 1029 1060 static HRESULT WINAPI IShellFolder_fnGetDetailsEx( … … 1044 1075 { 1045 1076 ICOM_THIS(IGenericSFImpl, iface); 1046 TRACE("(%p)\n",This); 1047 return E_NOTIMPL; 1077 HRESULT hr = E_FAIL; 1078 1079 TRACE("(%p)->(%p %i %p)\n",This, pidl, iColumn, psd); 1080 1081 if (!psd || iColumn >= GENERICSHELLVIEWCOLUMNS ) return E_INVALIDARG; 1082 1083 if (!pidl) 1084 { 1085 /* the header titles */ 1086 psd->fmt = GenericSFHeader[iColumn].fmt; 1087 psd->cxChar = GenericSFHeader[iColumn].cxChar; 1088 psd->str.uType = STRRET_CSTRA; 1089 LoadStringA(shell32_hInstance, GenericSFHeader[iColumn].colnameid, psd->str.u.cStr, MAX_PATH); 1090 return S_OK; 1091 } 1092 else 1093 { 1094 /* the data from the pidl */ 1095 switch(iColumn) 1096 { 1097 case 0: /* name */ 1098 hr = IShellFolder_GetDisplayNameOf(iface, pidl, SHGDN_NORMAL | SHGDN_INFOLDER, &psd->str); 1099 break; 1100 case 1: /* size */ 1101 _ILGetFileSize (pidl, psd->str.u.cStr, MAX_PATH); 1102 break; 1103 case 2: /* type */ 1104 _ILGetFileType(pidl, psd->str.u.cStr, MAX_PATH); 1105 break; 1106 case 3: /* date */ 1107 _ILGetFileDate(pidl, psd->str.u.cStr, MAX_PATH); 1108 break; 1109 case 4: /* attributes */ 1110 _ILGetAttributeStr(pidl, psd->str.u.cStr, MAX_PATH); 1111 break; 1112 } 1113 hr = S_OK; 1114 psd->str.uType = STRRET_CSTRA; 1115 } 1116 1117 return hr; 1048 1118 } 1049 1119 static HRESULT WINAPI IShellFolder_fnMapNameToSCID( … … 1091 1161 extern struct ICOM_VTABLE(IShellFolder2) sfdvt; 1092 1162 1163 static shvheader DesktopSFHeader [] = 1164 { 1165 { IDS_SHV_COLUMN1, SHCOLSTATE_TYPE_STR | SHCOLSTATE_ONBYDEFAULT, LVCFMT_RIGHT, 15 }, 1166 { IDS_SHV_COLUMN2, SHCOLSTATE_TYPE_STR | SHCOLSTATE_ONBYDEFAULT, LVCFMT_RIGHT, 10 }, 1167 { IDS_SHV_COLUMN3, SHCOLSTATE_TYPE_STR | SHCOLSTATE_ONBYDEFAULT, LVCFMT_RIGHT, 10 }, 1168 { IDS_SHV_COLUMN4, SHCOLSTATE_TYPE_DATE | SHCOLSTATE_ONBYDEFAULT, LVCFMT_RIGHT, 12 }, 1169 { IDS_SHV_COLUMN5, SHCOLSTATE_TYPE_STR | SHCOLSTATE_ONBYDEFAULT, LVCFMT_RIGHT, 5 } 1170 }; 1171 #define DESKTOPSHELLVIEWCOLUMNS 5 1172 1093 1173 /************************************************************************** 1094 1174 * ISF_Desktop_Constructor … … 1419 1499 } 1420 1500 1501 static HRESULT WINAPI ISF_Desktop_fnGetDefaultSearchGUID( 1502 IShellFolder2 * iface, 1503 GUID *pguid) 1504 { 1505 ICOM_THIS(IGenericSFImpl, iface); 1506 FIXME("(%p)\n",This); 1507 return E_NOTIMPL; 1508 } 1509 static HRESULT WINAPI ISF_Desktop_fnEnumSearches( 1510 IShellFolder2 * iface, 1511 IEnumExtraSearch **ppenum) 1512 { 1513 ICOM_THIS(IGenericSFImpl, iface); 1514 FIXME("(%p)\n",This); 1515 return E_NOTIMPL; 1516 } 1517 static HRESULT WINAPI ISF_Desktop_fnGetDefaultColumn( 1518 IShellFolder2 * iface, 1519 DWORD dwRes, 1520 ULONG *pSort, 1521 ULONG *pDisplay) 1522 { 1523 ICOM_THIS(IGenericSFImpl, iface); 1524 1525 TRACE("(%p)\n",This); 1526 1527 if (pSort) *pSort = 0; 1528 if (pDisplay) *pDisplay = 0; 1529 1530 return S_OK; 1531 } 1532 static HRESULT WINAPI ISF_Desktop_fnGetDefaultColumnState( 1533 IShellFolder2 * iface, 1534 UINT iColumn, 1535 DWORD *pcsFlags) 1536 { 1537 ICOM_THIS(IGenericSFImpl, iface); 1538 1539 TRACE("(%p)\n",This); 1540 1541 if (!pcsFlags || iColumn >= DESKTOPSHELLVIEWCOLUMNS ) return E_INVALIDARG; 1542 1543 *pcsFlags = DesktopSFHeader[iColumn].pcsFlags; 1544 1545 return S_OK; 1546 } 1547 static HRESULT WINAPI ISF_Desktop_fnGetDetailsEx( 1548 IShellFolder2 * iface, 1549 LPCITEMIDLIST pidl, 1550 const SHCOLUMNID *pscid, 1551 VARIANT *pv) 1552 { 1553 ICOM_THIS(IGenericSFImpl, iface); 1554 FIXME("(%p)\n",This); 1555 1556 return E_NOTIMPL; 1557 } 1558 static HRESULT WINAPI ISF_Desktop_fnGetDetailsOf( 1559 IShellFolder2 * iface, 1560 LPCITEMIDLIST pidl, 1561 UINT iColumn, 1562 SHELLDETAILS *psd) 1563 { 1564 ICOM_THIS(IGenericSFImpl, iface); 1565 HRESULT hr = E_FAIL;; 1566 1567 TRACE("(%p)->(%p %i %p)\n",This, pidl, iColumn, psd); 1568 1569 if (!psd || iColumn >= DESKTOPSHELLVIEWCOLUMNS ) return E_INVALIDARG; 1570 1571 if (!pidl) 1572 { 1573 psd->fmt = DesktopSFHeader[iColumn].fmt; 1574 psd->cxChar = DesktopSFHeader[iColumn].cxChar; 1575 psd->str.uType = STRRET_CSTRA; 1576 LoadStringA(shell32_hInstance, DesktopSFHeader[iColumn].colnameid, psd->str.u.cStr, MAX_PATH); 1577 return S_OK; 1578 } 1579 else 1580 { 1581 /* the data from the pidl */ 1582 switch(iColumn) 1583 { 1584 case 0: /* name */ 1585 hr = IShellFolder_GetDisplayNameOf(iface, pidl, SHGDN_NORMAL | SHGDN_INFOLDER, &psd->str); 1586 break; 1587 case 1: /* size */ 1588 _ILGetFileSize (pidl, psd->str.u.cStr, MAX_PATH); 1589 break; 1590 case 2: /* type */ 1591 _ILGetFileType(pidl, psd->str.u.cStr, MAX_PATH); 1592 break; 1593 case 3: /* date */ 1594 _ILGetFileDate(pidl, psd->str.u.cStr, MAX_PATH); 1595 break; 1596 case 4: /* attributes */ 1597 _ILGetAttributeStr(pidl, psd->str.u.cStr, MAX_PATH); 1598 break; 1599 } 1600 hr = S_OK; 1601 psd->str.uType = STRRET_CSTRA; 1602 } 1603 1604 return hr; 1605 } 1606 static HRESULT WINAPI ISF_Desktop_fnMapNameToSCID( 1607 IShellFolder2 * iface, 1608 LPCWSTR pwszName, 1609 SHCOLUMNID *pscid) 1610 { 1611 ICOM_THIS(IGenericSFImpl, iface); 1612 FIXME("(%p)\n",This); 1613 return E_NOTIMPL; 1614 } 1615 1421 1616 ICOM_VTABLE(IShellFolder2) sfdvt = 1422 1617 { … … 1437 1632 1438 1633 /* ShellFolder2 */ 1439 IS hellFolder_fnGetDefaultSearchGUID,1440 IS hellFolder_fnEnumSearches,1441 IS hellFolder_fnGetDefaultColumn,1442 IS hellFolder_fnGetDefaultColumnState,1443 IS hellFolder_fnGetDetailsEx,1444 IS hellFolder_fnGetDetailsOf,1445 IS hellFolder_fnMapNameToSCID1634 ISF_Desktop_fnGetDefaultSearchGUID, 1635 ISF_Desktop_fnEnumSearches, 1636 ISF_Desktop_fnGetDefaultColumn, 1637 ISF_Desktop_fnGetDefaultColumnState, 1638 ISF_Desktop_fnGetDetailsEx, 1639 ISF_Desktop_fnGetDetailsOf, 1640 ISF_Desktop_fnMapNameToSCID 1446 1641 }; 1447 1642 … … 1452 1647 1453 1648 extern struct ICOM_VTABLE(IShellFolder2) sfmcvt; 1649 1650 static shvheader MyComputerSFHeader [] = 1651 { 1652 { IDS_SHV_COLUMN1, SHCOLSTATE_TYPE_STR | SHCOLSTATE_ONBYDEFAULT, LVCFMT_RIGHT, 15 }, 1653 { IDS_SHV_COLUMN3, SHCOLSTATE_TYPE_STR | SHCOLSTATE_ONBYDEFAULT, LVCFMT_RIGHT, 10 }, 1654 { IDS_SHV_COLUMN6, SHCOLSTATE_TYPE_STR | SHCOLSTATE_ONBYDEFAULT, LVCFMT_RIGHT, 10 }, 1655 { IDS_SHV_COLUMN7, SHCOLSTATE_TYPE_STR | SHCOLSTATE_ONBYDEFAULT, LVCFMT_RIGHT, 10 }, 1656 }; 1657 #define MYCOMPUTERSHELLVIEWCOLUMNS 4 1454 1658 1455 1659 /************************************************************************** … … 1760 1964 TRACE("-- (%p)->(%s)\n", This, szPath); 1761 1965 return S_OK; 1966 } 1967 1968 static HRESULT WINAPI ISF_MyComputer_fnGetDefaultSearchGUID( 1969 IShellFolder2 * iface, 1970 GUID *pguid) 1971 { 1972 ICOM_THIS(IGenericSFImpl, iface); 1973 FIXME("(%p)\n",This); 1974 return E_NOTIMPL; 1975 } 1976 static HRESULT WINAPI ISF_MyComputer_fnEnumSearches( 1977 IShellFolder2 * iface, 1978 IEnumExtraSearch **ppenum) 1979 { 1980 ICOM_THIS(IGenericSFImpl, iface); 1981 FIXME("(%p)\n",This); 1982 return E_NOTIMPL; 1983 } 1984 static HRESULT WINAPI ISF_MyComputer_fnGetDefaultColumn( 1985 IShellFolder2 * iface, 1986 DWORD dwRes, 1987 ULONG *pSort, 1988 ULONG *pDisplay) 1989 { 1990 ICOM_THIS(IGenericSFImpl, iface); 1991 1992 TRACE("(%p)\n",This); 1993 1994 if (pSort) *pSort = 0; 1995 if (pDisplay) *pDisplay = 0; 1996 1997 return S_OK; 1998 } 1999 static HRESULT WINAPI ISF_MyComputer_fnGetDefaultColumnState( 2000 IShellFolder2 * iface, 2001 UINT iColumn, 2002 DWORD *pcsFlags) 2003 { 2004 ICOM_THIS(IGenericSFImpl, iface); 2005 2006 TRACE("(%p)\n",This); 2007 2008 if (!pcsFlags || iColumn >= MYCOMPUTERSHELLVIEWCOLUMNS ) return E_INVALIDARG; 2009 2010 *pcsFlags = MyComputerSFHeader[iColumn].pcsFlags; 2011 2012 return S_OK; 2013 } 2014 static HRESULT WINAPI ISF_MyComputer_fnGetDetailsEx( 2015 IShellFolder2 * iface, 2016 LPCITEMIDLIST pidl, 2017 const SHCOLUMNID *pscid, 2018 VARIANT *pv) 2019 { 2020 ICOM_THIS(IGenericSFImpl, iface); 2021 FIXME("(%p)\n",This); 2022 2023 return E_NOTIMPL; 2024 } 2025 2026 /* fixme: drive size >4GB is rolling over */ 2027 static HRESULT WINAPI ISF_MyComputer_fnGetDetailsOf( 2028 IShellFolder2 * iface, 2029 LPCITEMIDLIST pidl, 2030 UINT iColumn, 2031 SHELLDETAILS *psd) 2032 { 2033 ICOM_THIS(IGenericSFImpl, iface); 2034 HRESULT hr; 2035 2036 TRACE("(%p)->(%p %i %p)\n",This, pidl, iColumn, psd); 2037 2038 if (!psd || iColumn >= MYCOMPUTERSHELLVIEWCOLUMNS ) return E_INVALIDARG; 2039 2040 if (!pidl) 2041 { 2042 psd->fmt = MyComputerSFHeader[iColumn].fmt; 2043 psd->cxChar = MyComputerSFHeader[iColumn].cxChar; 2044 psd->str.uType = STRRET_CSTRA; 2045 LoadStringA(shell32_hInstance, MyComputerSFHeader[iColumn].colnameid, psd->str.u.cStr, MAX_PATH); 2046 return S_OK; 2047 } 2048 else 2049 { 2050 char szPath[MAX_PATH]; 2051 ULARGE_INTEGER ulBytes; 2052 2053 psd->str.u.cStr[0] = 0x00; 2054 psd->str.uType = STRRET_CSTRA; 2055 switch(iColumn) 2056 { 2057 case 0: /* name */ 2058 hr = IShellFolder_GetDisplayNameOf(iface, pidl, SHGDN_NORMAL | SHGDN_INFOLDER, &psd->str); 2059 break; 2060 case 1: /* type */ 2061 _ILGetFileType(pidl, psd->str.u.cStr, MAX_PATH); 2062 break; 2063 case 2: /* total size */ 2064 if (_ILIsDrive(pidl)) 2065 { 2066 _ILSimpleGetText(pidl, szPath, MAX_PATH); 2067 GetDiskFreeSpaceExA(szPath, NULL, &ulBytes, NULL); 2068 StrFormatByteSizeA(ulBytes.s.LowPart, psd->str.u.cStr, MAX_PATH); 2069 } 2070 break; 2071 case 3: /* free size */ 2072 if (_ILIsDrive(pidl)) 2073 { 2074 _ILSimpleGetText(pidl, szPath, MAX_PATH); 2075 GetDiskFreeSpaceExA(szPath, &ulBytes, NULL, NULL); 2076 StrFormatByteSizeA(ulBytes.s.LowPart, psd->str.u.cStr, MAX_PATH); 2077 } 2078 break; 2079 } 2080 hr = S_OK; 2081 } 2082 2083 return hr; 2084 } 2085 static HRESULT WINAPI ISF_MyComputer_fnMapNameToSCID( 2086 IShellFolder2 * iface, 2087 LPCWSTR pwszName, 2088 SHCOLUMNID *pscid) 2089 { 2090 ICOM_THIS(IGenericSFImpl, iface); 2091 FIXME("(%p)\n",This); 2092 return E_NOTIMPL; 1762 2093 } 1763 2094 … … 1780 2111 1781 2112 /* ShellFolder2 */ 1782 IS hellFolder_fnGetDefaultSearchGUID,1783 IS hellFolder_fnEnumSearches,1784 IS hellFolder_fnGetDefaultColumn,1785 IS hellFolder_fnGetDefaultColumnState,1786 IS hellFolder_fnGetDetailsEx,1787 IS hellFolder_fnGetDetailsOf,1788 IS hellFolder_fnMapNameToSCID2113 ISF_MyComputer_fnGetDefaultSearchGUID, 2114 ISF_MyComputer_fnEnumSearches, 2115 ISF_MyComputer_fnGetDefaultColumn, 2116 ISF_MyComputer_fnGetDefaultColumnState, 2117 ISF_MyComputer_fnGetDetailsEx, 2118 ISF_MyComputer_fnGetDetailsOf, 2119 ISF_MyComputer_fnMapNameToSCID 1789 2120 }; 1790 2121
Note:
See TracChangeset
for help on using the changeset viewer.