Changeset 2355 for trunk/src


Ignore:
Timestamp:
Jan 8, 2000, 3:43:27 AM (26 years ago)
Author:
phaller
Message:

Updated to WINE 2000/01/08

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:09 phaller Exp $ */
     1/* $Id: shlfolder.cpp,v 1.5 2000-01-08 02:43:27 phaller Exp $ */
    22/*
    33 * Shell Folder stuff
     
    66 * Copyright 1998, 1999                  Juergen Schmied
    77 *
    8  * IShellFolder with IDropTarget, IPersistFolder
     8 * IShellFolder2 and related interfaces
    99 *
    1010 */
     
    2929#include "wine/undocshell.h"
    3030#include "shell32_main.h"
     31#include "shresdef.h"
    3132
    3233#include <heapstring.h>
     
    3637
    3738#define MEM_DEBUG 1
     39
     40typedef struct
     41{
     42  int colnameid;
     43  int pcsFlags;
     44  int fmt;
     45  int cxChar;
     46
     47} shvheader;
    3848
    3949/***************************************************************************
     
    222232#define _IDropTarget_Offset ((int)(&(((IGenericSFImpl*)0)->lpvtblDropTarget)))
    223233#define _ICOM_THIS_From_IDropTarget(class, name) class* This = (class*)(((char*)name)-_IDropTarget_Offset);
     234
     235static 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
    224244
    225245/**************************************************************************
     
    10151035{
    10161036   ICOM_THIS(IGenericSFImpl, iface);
     1037
    10171038   TRACE("(%p)\n",This);
    1018    return E_NOTIMPL;
     1039
     1040   if (pSort) *pSort = 0;
     1041   if (pDisplay) *pDisplay = 0;
     1042
     1043   return S_OK;
    10191044}
    10201045static HRESULT WINAPI IShellFolder_fnGetDefaultColumnState(
     
    10241049{
    10251050   ICOM_THIS(IGenericSFImpl, iface);
     1051
    10261052   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;
    10281059}
    10291060static HRESULT WINAPI IShellFolder_fnGetDetailsEx(
     
    10441075{
    10451076   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;
    10481118}
    10491119static HRESULT WINAPI IShellFolder_fnMapNameToSCID(
     
    10911161extern struct ICOM_VTABLE(IShellFolder2) sfdvt;
    10921162
     1163static 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
    10931173/**************************************************************************
    10941174*  ISF_Desktop_Constructor
     
    14191499}
    14201500
     1501static 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}
     1509static 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}
     1517static 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}
     1532static 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}
     1547static 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}
     1558static 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}
     1606static 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
    14211616ICOM_VTABLE(IShellFolder2) sfdvt =
    14221617{
     
    14371632
    14381633   /* ShellFolder2 */
    1439    IShellFolder_fnGetDefaultSearchGUID,
    1440    IShellFolder_fnEnumSearches,
    1441    IShellFolder_fnGetDefaultColumn,
    1442    IShellFolder_fnGetDefaultColumnState,
    1443    IShellFolder_fnGetDetailsEx,
    1444    IShellFolder_fnGetDetailsOf,
    1445    IShellFolder_fnMapNameToSCID
     1634   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
    14461641};
    14471642
     
    14521647
    14531648extern struct ICOM_VTABLE(IShellFolder2) sfmcvt;
     1649
     1650static 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
    14541658
    14551659/**************************************************************************
     
    17601964   TRACE("-- (%p)->(%s)\n", This, szPath);
    17611965   return S_OK;
     1966}
     1967
     1968static 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}
     1976static 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}
     1984static 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}
     1999static 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}
     2014static 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 */
     2027static 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}
     2085static 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;
    17622093}
    17632094
     
    17802111
    17812112   /* ShellFolder2 */
    1782    IShellFolder_fnGetDefaultSearchGUID,
    1783    IShellFolder_fnEnumSearches,
    1784    IShellFolder_fnGetDefaultColumn,
    1785    IShellFolder_fnGetDefaultColumnState,
    1786    IShellFolder_fnGetDetailsEx,
    1787    IShellFolder_fnGetDetailsOf,
    1788    IShellFolder_fnMapNameToSCID
     2113   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
    17892120};
    17902121
Note: See TracChangeset for help on using the changeset viewer.