Ignore:
Timestamp:
Nov 2, 1999, 9:38:48 PM (26 years ago)
Author:
phaller
Message:

Add: update to wine/shell32 1999/11/02 #4

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/shell32/shlview.cpp

    r1431 r1558  
    1 /* $Id: shlview.cpp,v 1.3 1999-10-24 22:50:46 sandervl Exp $ */
     1/* $Id: shlview.cpp,v 1.4 1999-11-02 20:38:48 phaller Exp $ */
    22/*
    3  *      ShellView
     3 * ShellView
    44 *
    5  *      Copyright 1998,1999     <juergen.schmied@metronet.de>
     5 * Copyright 1998,1999                   <juergen.schmied@metronet.de>
    66 *
    77 *  FIXME: when the ShellView_WndProc gets a WM_NCDESTROY should we do a
     
    2828#include "wine/obj_dragdrop.h"
    2929#include "wine/undocshell.h"
    30 #include "docobj.h"
    3130#include "shresdef.h"
    3231#include "spy.h"
     
    3433#include "winerror.h"
    3534
     35#include "docobj.h"
    3636#include "pidl.h"
    3737#include "shell32_main.h"
     
    4141DEFAULT_DEBUG_CHANNEL(shell)
    4242
    43 
    4443typedef struct
    45 {       ICOM_VTABLE(IShellView)* lpvtbl;
    46         DWORD           ref;
    47         ICOM_VTABLE(IOleCommandTarget)* lpvtblOleCommandTarget;
    48         ICOM_VTABLE(IDropTarget)*       lpvtblDropTarget;
    49         ICOM_VTABLE(IDropSource)*       lpvtblDropSource;
    50         ICOM_VTABLE(IViewObject)*       lpvtblViewObject;
    51         IShellFolder*   pSFParent;
    52         IShellBrowser*  pShellBrowser;
    53         ICommDlgBrowser*        pCommDlgBrowser;
    54         HWND            hWnd;
    55         HWND            hWndList;
    56         HWND            hWndParent;
    57         FOLDERSETTINGS  FolderSettings;
    58         HMENU           hMenu;
    59         UINT            uState;
    60         UINT            cidl;
    61         LPITEMIDLIST    *apidl;
     44{   BOOL    bIsAscending;
     45    INT     nHeaderID;
     46    INT     nLastHeaderID;
     47}LISTVIEW_SORT_INFO, *LPLISTVIEW_SORT_INFO;
     48
     49typedef struct
     50{  ICOM_VTABLE(IShellView)* lpvtbl;
     51   DWORD    ref;
     52   ICOM_VTABLE(IOleCommandTarget)*       lpvtblOleCommandTarget;
     53   ICOM_VTABLE(IDropTarget)*             lpvtblDropTarget;
     54   ICOM_VTABLE(IDropSource)*             lpvtblDropSource;
     55   ICOM_VTABLE(IViewObject)*             lpvtblViewObject;
     56   IShellFolder*  pSFParent;
     57   IShellBrowser* pShellBrowser;
     58   ICommDlgBrowser*                      pCommDlgBrowser;
     59   HWND     hWnd;
     60   HWND     hWndList;
     61   HWND     hWndParent;
     62   FOLDERSETTINGS FolderSettings;
     63   HMENU    hMenu;
     64   UINT     uState;
     65   UINT     cidl;
     66   LPITEMIDLIST   *apidl;
     67   LISTVIEW_SORT_INFO ListViewSortInfo;
    6268} IShellViewImpl;
    6369
     
    7884#define _IViewObject_Offset ((int)(&(((IShellViewImpl*)0)->lpvtblViewObject)))
    7985#define _ICOM_THIS_From_IViewObject(myClass, name) myClass* This = (myClass*)(((char*)name)-_IViewObject_Offset);
     86
     87/* ListView Header ID's */
     88#define LISTVIEW_COLUMN_NAME 0
     89#define LISTVIEW_COLUMN_SIZE 1
     90#define LISTVIEW_COLUMN_TYPE 2
     91#define LISTVIEW_COLUMN_TIME 3
     92#define LISTVIEW_COLUMN_ATTRIB 4
    8093
    8194/*menu items */
     
    94107#define WM_SETTINGCHANGE                WM_WININICHANGE
    95108extern void WINAPI _InsertMenuItem (HMENU hmenu, UINT indexMenu, BOOL fByPosition,
    96                         UINT wID, UINT fType, LPSTR dwTypeData, UINT fState);
     109         UINT wID, UINT fType, LPSTR dwTypeData, UINT fState);
    97110
    98111/*
     
    120133
    121134/**********************************************************
    122  *      IShellView_Constructor
     135 * IShellView_Constructor
    123136 */
    124137IShellView * IShellView_Constructor( IShellFolder * pFolder)
    125 {       IShellViewImpl * sv;
    126         sv=(IShellViewImpl*)HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(IShellViewImpl));
    127         sv->ref=1;
    128         sv->lpvtbl=&svvt;
    129         sv->lpvtblOleCommandTarget=&ctvt;
    130         sv->lpvtblDropTarget=&dtvt;
    131         sv->lpvtblDropSource=&dsvt;
    132         sv->lpvtblViewObject=&vovt;
    133 
    134         sv->pSFParent   = pFolder;
    135 
    136         if(pFolder)
    137           IShellFolder_AddRef(pFolder);
    138 
    139         TRACE("(%p)->(%p)\n",sv, pFolder);
    140         shell32_ObjCount++;
    141         return (IShellView *) sv;
     138{  IShellViewImpl * sv;
     139   sv=(IShellViewImpl*)HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(IShellViewImpl));
     140   sv->ref=1;
     141   sv->lpvtbl=&svvt;
     142   sv->lpvtblOleCommandTarget=&ctvt;
     143   sv->lpvtblDropTarget=&dtvt;
     144   sv->lpvtblDropSource=&dsvt;
     145   sv->lpvtblViewObject=&vovt;
     146
     147   sv->pSFParent  = pFolder;
     148
     149   if(pFolder)
     150     IShellFolder_AddRef(pFolder);
     151
     152   TRACE("(%p)->(%p)\n",sv, pFolder);
     153   shell32_ObjCount++;
     154   return (IShellView *) sv;
    142155}
    143156
     
    147160 */
    148161static BOOL IsInCommDlg(IShellViewImpl * This)
    149 {       return(This->pCommDlgBrowser != NULL);
     162{  return(This->pCommDlgBrowser != NULL);
    150163}
    151164
    152165static HRESULT IncludeObject(IShellViewImpl * This, LPCITEMIDLIST pidl)
    153166{
    154         HRESULT ret = S_OK;
    155        
    156         if ( IsInCommDlg(This) )
    157         {
    158           TRACE("ICommDlgBrowser::IncludeObject pidl=%p\n", pidl);
    159           ret = ICommDlgBrowser_IncludeObject(This->pCommDlgBrowser, (IShellView*)This, pidl);
    160           TRACE("--0x%08lx\n", ret);
    161         }
    162         return ret;
     167   HRESULT ret = S_OK;
     168
     169   if ( IsInCommDlg(This) )
     170   {
     171     TRACE("ICommDlgBrowser::IncludeObject pidl=%p\n", pidl);
     172     ret = ICommDlgBrowser_IncludeObject(This->pCommDlgBrowser, (IShellView*)This, pidl);
     173     TRACE("--0x%08lx\n", ret);
     174   }
     175   return ret;
    163176}
    164177
    165178static HRESULT OnDefaultCommand(IShellViewImpl * This)
    166179{
    167         HRESULT ret = S_FALSE;
    168        
    169         if (IsInCommDlg(This))
    170         {
    171           TRACE("ICommDlgBrowser::OnDefaultCommand\n");
    172           ret = ICommDlgBrowser_OnDefaultCommand(This->pCommDlgBrowser, (IShellView*)This);
    173           TRACE("--\n");
    174         }
    175         return ret;
     180   HRESULT ret = S_FALSE;
     181
     182   if (IsInCommDlg(This))
     183   {
     184     TRACE("ICommDlgBrowser::OnDefaultCommand\n");
     185     ret = ICommDlgBrowser_OnDefaultCommand(This->pCommDlgBrowser, (IShellView*)This);
     186     TRACE("--\n");
     187   }
     188   return ret;
    176189}
    177190
    178191static HRESULT OnStateChange(IShellViewImpl * This, UINT uFlags)
    179192{
    180         HRESULT ret = S_FALSE;
    181 
    182         if (IsInCommDlg(This))
    183         {
    184           TRACE("ICommDlgBrowser::OnStateChange flags=%x\n", uFlags);
    185           ret = ICommDlgBrowser_OnStateChange(This->pCommDlgBrowser, (IShellView*)This, uFlags);
    186           TRACE("--\n");
    187         }
    188         return ret;
     193   HRESULT ret = S_FALSE;
     194
     195   if (IsInCommDlg(This))
     196   {
     197     TRACE("ICommDlgBrowser::OnStateChange flags=%x\n", uFlags);
     198     ret = ICommDlgBrowser_OnStateChange(This->pCommDlgBrowser, (IShellView*)This, uFlags);
     199     TRACE("--\n");
     200   }
     201   return ret;
    189202}
    190203/**********************************************************
     
    193206 */
    194207/**********************************************************
    195  *      set the toolbar buttons
     208 * set the toolbar buttons
    196209 */
    197210static void CheckToolbar(IShellViewImpl * This)
    198211{
    199         LRESULT result;
    200 
    201         TRACE("\n");
    202        
    203         IShellBrowser_SendControlMsg(This->pShellBrowser, FCW_TOOLBAR, TB_CHECKBUTTON,
    204                 FCIDM_TB_SMALLICON, (This->FolderSettings.ViewMode==FVM_LIST)? TRUE : FALSE, &result);
    205         IShellBrowser_SendControlMsg(This->pShellBrowser, FCW_TOOLBAR, TB_CHECKBUTTON,
    206                 FCIDM_TB_REPORTVIEW, (This->FolderSettings.ViewMode==FVM_DETAILS)? TRUE : FALSE, &result);
    207         IShellBrowser_SendControlMsg(This->pShellBrowser, FCW_TOOLBAR, TB_ENABLEBUTTON,
    208                 FCIDM_TB_SMALLICON, TRUE, &result);
    209         IShellBrowser_SendControlMsg(This->pShellBrowser, FCW_TOOLBAR, TB_ENABLEBUTTON,
    210                 FCIDM_TB_REPORTVIEW, TRUE, &result);
    211 }
    212 
    213 /**********************************************************
    214  *      change the style of the listview control
     212   LRESULT result;
     213
     214   TRACE("\n");
     215
     216   IShellBrowser_SendControlMsg(This->pShellBrowser, FCW_TOOLBAR, TB_CHECKBUTTON,
     217      FCIDM_TB_SMALLICON, (This->FolderSettings.ViewMode==FVM_LIST)? TRUE : FALSE, &result);
     218   IShellBrowser_SendControlMsg(This->pShellBrowser, FCW_TOOLBAR, TB_CHECKBUTTON,
     219      FCIDM_TB_REPORTVIEW, (This->FolderSettings.ViewMode==FVM_DETAILS)? TRUE : FALSE, &result);
     220   IShellBrowser_SendControlMsg(This->pShellBrowser, FCW_TOOLBAR, TB_ENABLEBUTTON,
     221      FCIDM_TB_SMALLICON, TRUE, &result);
     222   IShellBrowser_SendControlMsg(This->pShellBrowser, FCW_TOOLBAR, TB_ENABLEBUTTON,
     223      FCIDM_TB_REPORTVIEW, TRUE, &result);
     224}
     225
     226/**********************************************************
     227 * change the style of the listview control
    215228 */
    216229
    217230static void SetStyle(IShellViewImpl * This, DWORD dwAdd, DWORD dwRemove)
    218231{
    219         DWORD tmpstyle;
    220 
    221         TRACE("(%p)\n", This);
    222 
    223         tmpstyle = GetWindowLongA(This->hWndList, GWL_STYLE);
    224         SetWindowLongA(This->hWndList, GWL_STYLE, dwAdd | (tmpstyle & ~dwRemove));
     232   DWORD tmpstyle;
     233
     234   TRACE("(%p)\n", This);
     235
     236   tmpstyle = GetWindowLongA(This->hWndList, GWL_STYLE);
     237   SetWindowLongA(This->hWndList, GWL_STYLE, dwAdd | (tmpstyle & ~dwRemove));
    225238}
    226239
     
    230243*/
    231244static BOOL ShellView_CreateList (IShellViewImpl * This)
    232 {       DWORD dwStyle;
    233 
    234         TRACE("%p\n",This);
    235 
    236         dwStyle = WS_TABSTOP | WS_VISIBLE | WS_CHILD | WS_BORDER | WS_CHILDWINDOW | WS_CLIPSIBLINGS | WS_CLIPCHILDREN |
    237                   LVS_SHAREIMAGELISTS | LVS_EDITLABELS | LVS_ALIGNLEFT | LVS_AUTOARRANGE;
    238 
    239         switch (This->FolderSettings.ViewMode)
    240         {
    241           case FVM_ICON:        dwStyle |= LVS_ICON;            break;
    242           case FVM_DETAILS:     dwStyle |= LVS_REPORT;          break;
    243           case FVM_SMALLICON:   dwStyle |= LVS_SMALLICON;       break;
    244           case FVM_LIST:        dwStyle |= LVS_LIST;            break;
    245           default:              dwStyle |= LVS_LIST;            break;
    246         }
    247 
    248         if (This->FolderSettings.fFlags && FWF_AUTOARRANGE)     dwStyle |= LVS_AUTOARRANGE;
    249         /*if (This->FolderSettings.fFlags && FWF_DESKTOP); used from explorer*/
    250         if (This->FolderSettings.fFlags && FWF_SINGLESEL)       dwStyle |= LVS_SINGLESEL;
    251 
    252         This->hWndList=CreateWindowExA( WS_EX_CLIENTEDGE,
    253                                         WC_LISTVIEWA,
    254                                         NULL,
    255                                         dwStyle,
    256                                         0,0,0,0,
    257                                         This->hWnd,
    258                                         (HMENU)ID_LISTVIEW,
    259                                         shell32_hInstance,
    260                                         NULL);
    261 
    262         if(!This->hWndList)
    263           return FALSE;
    264 
    265         /*  UpdateShellSettings(); */
    266         return TRUE;
     245{  DWORD dwStyle;
     246
     247   TRACE("%p\n",This);
     248
     249   dwStyle = WS_TABSTOP | WS_VISIBLE | WS_CHILDWINDOW | WS_CLIPSIBLINGS | WS_CLIPCHILDREN |
     250        LVS_SHAREIMAGELISTS | LVS_EDITLABELS | LVS_ALIGNLEFT | LVS_AUTOARRANGE;
     251
     252   switch (This->FolderSettings.ViewMode)
     253   {
     254     case FVM_ICON:                      dwStyle |= LVS_ICON;    break;
     255     case FVM_DETAILS:                   dwStyle |= LVS_REPORT;     break;
     256     case FVM_SMALLICON:                 dwStyle |= LVS_SMALLICON;  break;
     257     case FVM_LIST:                      dwStyle |= LVS_LIST;    break;
     258     default:     dwStyle |= LVS_LIST;      break;
     259   }
     260
     261   if (This->FolderSettings.fFlags && FWF_AUTOARRANGE)  dwStyle |= LVS_AUTOARRANGE;
     262   /*if (This->FolderSettings.fFlags && FWF_DESKTOP); used from explorer*/
     263   if (This->FolderSettings.fFlags && FWF_SINGLESEL) dwStyle |= LVS_SINGLESEL;
     264
     265   This->hWndList=CreateWindowExA( WS_EX_CLIENTEDGE,
     266               WC_LISTVIEWA,
     267               NULL,
     268               dwStyle,
     269               0,0,0,0,
     270               This->hWnd,
     271               (HMENU)ID_LISTVIEW,
     272               shell32_hInstance,
     273               NULL);
     274
     275   if(!This->hWndList)
     276     return FALSE;
     277
     278        This->ListViewSortInfo.bIsAscending = TRUE;
     279        This->ListViewSortInfo.nHeaderID = -1;
     280        This->ListViewSortInfo.nLastHeaderID = -1;
     281
     282   /*  UpdateShellSettings(); */
     283   return TRUE;
    267284}
    268285/**********************************************************
     
    271288static BOOL ShellView_InitList(IShellViewImpl * This)
    272289{
    273         LVCOLUMNA lvColumn;
    274         CHAR        szString[50];
    275 
    276         TRACE("%p\n",This);
    277 
    278         ListView_DeleteAllItems(This->hWndList);
    279 
    280         /*initialize the columns */
    281         lvColumn.mask = LVCF_FMT | LVCF_WIDTH | LVCF_TEXT;      /*  |  LVCF_SUBITEM;*/
    282         lvColumn.fmt = LVCFMT_LEFT;
    283         lvColumn.pszText = szString;
    284 
    285         lvColumn.cx = 120;
    286         LoadStringA(shell32_hInstance, IDS_SHV_COLUMN1, szString, sizeof(szString));
    287         ListView_InsertColumnA(This->hWndList, 0, &lvColumn);
    288 
    289         lvColumn.cx = 80;
    290         LoadStringA(shell32_hInstance, IDS_SHV_COLUMN2, szString, sizeof(szString));
    291         ListView_InsertColumnA(This->hWndList, 1, &lvColumn);
    292 
    293         lvColumn.cx = 170;
    294         LoadStringA(shell32_hInstance, IDS_SHV_COLUMN3, szString, sizeof(szString));
    295         ListView_InsertColumnA(This->hWndList, 2, &lvColumn);
    296 
    297         lvColumn.cx = 60;
    298         LoadStringA(shell32_hInstance, IDS_SHV_COLUMN4, szString, sizeof(szString));
    299         ListView_InsertColumnA(This->hWndList, 3, &lvColumn);
    300 
    301         ListView_SetImageList(This->hWndList, ShellSmallIconList, LVSIL_SMALL);
    302         ListView_SetImageList(This->hWndList, ShellBigIconList, LVSIL_NORMAL);
    303 
    304         return TRUE;
     290   LVCOLUMNA lvColumn;
     291   CHAR        szString[50];
     292
     293   TRACE("%p\n",This);
     294
     295   ListView_DeleteAllItems(This->hWndList);
     296
     297   /*initialize the columns */
     298   lvColumn.mask = LVCF_FMT | LVCF_WIDTH | LVCF_TEXT;   /*  |  LVCF_SUBITEM;*/
     299   lvColumn.fmt = LVCFMT_LEFT;
     300   lvColumn.pszText = szString;
     301
     302   lvColumn.cx = 120;
     303   LoadStringA(shell32_hInstance, IDS_SHV_COLUMN1, szString, sizeof(szString));
     304   ListView_InsertColumnA(This->hWndList, 0, &lvColumn);
     305
     306   lvColumn.cx = 80;
     307   LoadStringA(shell32_hInstance, IDS_SHV_COLUMN2, szString, sizeof(szString));
     308   ListView_InsertColumnA(This->hWndList, 1, &lvColumn);
     309
     310   lvColumn.cx = 170;
     311   LoadStringA(shell32_hInstance, IDS_SHV_COLUMN3, szString, sizeof(szString));
     312   ListView_InsertColumnA(This->hWndList, 2, &lvColumn);
     313
     314   lvColumn.cx = 60;
     315   LoadStringA(shell32_hInstance, IDS_SHV_COLUMN4, szString, sizeof(szString));
     316   ListView_InsertColumnA(This->hWndList, 3, &lvColumn);
     317
     318   ListView_SetImageList(This->hWndList, ShellSmallIconList, LVSIL_SMALL);
     319   ListView_SetImageList(This->hWndList, ShellBigIconList, LVSIL_NORMAL);
     320
     321   return TRUE;
    305322}
    306323/**********************************************************
     
    312329static INT CALLBACK ShellView_CompareItems(LPVOID lParam1, LPVOID lParam2, LPARAM lpData)
    313330{
    314         int ret;
    315         TRACE("pidl1=%p pidl2=%p lpsf=%p\n", lParam1, lParam2, (LPVOID) lpData);
    316 
    317         if(!lpData) return 0;
    318 
    319         ret =  (SHORT) SCODE_CODE(IShellFolder_CompareIDs((LPSHELLFOLDER)lpData, 0, (LPITEMIDLIST)lParam1, (LPITEMIDLIST)lParam2));
    320         TRACE("ret=%i\n",ret);
    321         return ret;
     331   int ret;
     332   TRACE("pidl1=%p pidl2=%p lpsf=%p\n", lParam1, lParam2, (LPVOID) lpData);
     333
     334   if(!lpData) return 0;
     335
     336   ret =  (SHORT) SCODE_CODE(IShellFolder_CompareIDs((LPSHELLFOLDER)lpData, 0, (LPITEMIDLIST)lParam1, (LPITEMIDLIST)lParam2));
     337   TRACE("ret=%i\n",ret);
     338   return ret;
     339}
     340
     341
     342/*************************************************************************
     343 * ShellView_ListViewCompareItems
     344 *
     345 * Compare Function for the Listview (FileOpen Dialog)
     346 *
     347 * PARAMS
     348 *     lParam1       [I] the first ItemIdList to compare with
     349 *     lParam2       [I] the second ItemIdList to compare with
     350 *     lpData        [I] The column ID for the header Ctrl to process
     351 *
     352 * RETURNS
     353 *     A negative value if the first item should precede the second,
     354 *     a positive value if the first item should follow the second,
     355 *     or zero if the two items are equivalent
     356 *
     357 * NOTES
     358 *
     359 */
     360static INT CALLBACK ShellView_ListViewCompareItems(LPVOID lParam1, LPVOID lParam2, LPARAM lpData)
     361{
     362    INT nDiff=0;
     363    FILETIME fd1, fd2;
     364    char strName1[MAX_PATH], strName2[MAX_PATH];
     365    BOOL bIsFolder1, bIsFolder2,bIsBothFolder;
     366    LPITEMIDLIST pItemIdList1 = (LPITEMIDLIST) lParam1;
     367    LPITEMIDLIST pItemIdList2 = (LPITEMIDLIST) lParam2;
     368    LISTVIEW_SORT_INFO *pSortInfo = (LPLISTVIEW_SORT_INFO) lpData;
     369
     370
     371    bIsFolder1 = _ILIsFolder(pItemIdList1);
     372    bIsFolder2 = _ILIsFolder(pItemIdList2);
     373    bIsBothFolder = bIsFolder1 && bIsFolder2;
     374
     375    /* When sorting between a File and a Folder, the Folder gets sorted first */
     376    if( (bIsFolder1 || bIsFolder2) && !bIsBothFolder)
     377    {
     378        nDiff = bIsFolder1 ? -1 : 1;
     379    }
     380    else
     381    {
     382        /* Sort by Time: Folders or Files can be sorted */
     383
     384        if(pSortInfo->nHeaderID == LISTVIEW_COLUMN_TIME)
     385        {
     386            _ILGetFileDateTime(pItemIdList1, &fd1);
     387            _ILGetFileDateTime(pItemIdList2, &fd2);
     388            nDiff = CompareFileTime(&fd2, &fd1);
     389        }
     390        /* Sort by Attribute: Folder or Files can be sorted */
     391        else if(pSortInfo->nHeaderID == LISTVIEW_COLUMN_ATTRIB)
     392        {
     393            _ILGetAttributeStr(pItemIdList1, strName1, MAX_PATH);
     394            _ILGetAttributeStr(pItemIdList2, strName2, MAX_PATH);
     395            nDiff = strcmp(strName1, strName2);
     396        }
     397        /* Sort by FileName: Folder or Files can be sorted */
     398        else if(pSortInfo->nHeaderID == LISTVIEW_COLUMN_NAME || bIsBothFolder)
     399        {
     400            /* Sort by Text */
     401            _ILSimpleGetText(pItemIdList1, strName1, MAX_PATH);
     402            _ILSimpleGetText(pItemIdList2, strName2, MAX_PATH);
     403            nDiff = strcmp(strName1, strName2);
     404        }
     405        /* Sort by File Size, Only valid for Files */
     406        else if(pSortInfo->nHeaderID == LISTVIEW_COLUMN_SIZE)
     407        {
     408            nDiff = (INT)(_ILGetFileSize(pItemIdList1, NULL, 0) - _ILGetFileSize(pItemIdList2, NULL, 0));
     409        }
     410        /* Sort by File Type, Only valid for Files */
     411        else if(pSortInfo->nHeaderID == LISTVIEW_COLUMN_TYPE)
     412        {
     413            /* Sort by Type */
     414            _ILGetFileType(pItemIdList1, strName1, MAX_PATH);
     415            _ILGetFileType(pItemIdList2, strName2, MAX_PATH);
     416            nDiff = strcmp(strName1, strName2);
     417        }
     418    }
     419    /*  If the Date, FileSize, FileType, Attrib was the same, sort by FileName */
     420
     421    if(nDiff == 0)
     422    {
     423        _ILSimpleGetText(pItemIdList1, strName1, MAX_PATH);
     424        _ILSimpleGetText(pItemIdList2, strName2, MAX_PATH);
     425        nDiff = strcmp(strName1, strName2);
     426    }
     427
     428    if(!pSortInfo->bIsAscending)
     429    {
     430        nDiff = -nDiff;
     431    }
     432
     433    return nDiff;
     434
    322435}
    323436
     
    331444static HRESULT ShellView_FillList(IShellViewImpl * This)
    332445{
    333         LPENUMIDLIST    pEnumIDList;
    334         LPITEMIDLIST    pidl;
    335         DWORD           dwFetched;
    336         UINT            i;
    337         LVITEMA lvItem;
    338         HRESULT         hRes;
    339         HDPA            hdpa;
    340 
    341         TRACE("%p\n",This);
    342 
    343         /* get the itemlist from the shfolder*/
    344         hRes = IShellFolder_EnumObjects(This->pSFParent,This->hWnd, SHCONTF_NONFOLDERS | SHCONTF_FOLDERS, &pEnumIDList);
    345         if (hRes != S_OK)
    346         {
    347           if (hRes==S_FALSE)
    348             return(NOERROR);
    349           return(hRes);
    350         }
    351 
    352         /* create a pointer array */   
    353         hdpa = pDPA_Create(16);
    354         if (!hdpa)
    355         {
    356           return(E_OUTOFMEMORY);
    357         }
    358 
    359         /* copy the items into the array*/
    360         while((S_OK == IEnumIDList_Next(pEnumIDList,1, &pidl, &dwFetched)) && dwFetched)
    361         {
    362           if (pDPA_InsertPtr(hdpa, 0x7fff, pidl) == -1)
    363           {
    364             SHFree(pidl);
    365           }
    366         }
    367 
    368         /*sort the array*/
    369         pDPA_Sort(hdpa, (PFNDPACOMPARE)ShellView_CompareItems, (LPARAM)This->pSFParent);
    370 
    371         /*turn the listview's redrawing off*/
    372         SendMessageA(This->hWndList, WM_SETREDRAW, FALSE, 0);
    373 
    374         for (i=0; i < DPA_GetPtrCount(hdpa); ++i)       /* DPA_GetPtrCount is a macro*/
    375         {
    376           pidl = (LPITEMIDLIST)DPA_GetPtr(hdpa, i);
    377           if (IncludeObject(This, pidl) == S_OK)        /* in a commdlg This works as a filemask*/
    378           {
    379             ZeroMemory(&lvItem, sizeof(lvItem));        /* create the listviewitem*/
    380             lvItem.mask = LVIF_TEXT | LVIF_IMAGE | LVIF_PARAM;          /*set the mask*/
    381             lvItem.iItem = ListView_GetItemCount(This->hWndList);       /*add the item to the end of the list*/
    382             lvItem.lParam = (LPARAM) pidl;                              /*set the item's data*/
    383             lvItem.pszText = LPSTR_TEXTCALLBACKA;                       /*get text on a callback basis*/
    384             lvItem.iImage = I_IMAGECALLBACK;                            /*get the image on a callback basis*/
    385             ListView_InsertItemA(This->hWndList, &lvItem);
    386           }
    387           else
    388             SHFree(pidl);       /* the listview has the COPY*/
    389         }
    390 
    391         /*turn the listview's redrawing back on and force it to draw*/
    392         SendMessageA(This->hWndList, WM_SETREDRAW, TRUE, 0);
    393         InvalidateRect(This->hWndList, NULL, TRUE);
    394         UpdateWindow(This->hWndList);
    395 
    396         IEnumIDList_Release(pEnumIDList); /* destroy the list*/
    397         pDPA_Destroy(hdpa);
    398        
    399         return S_OK;
     446   LPENUMIDLIST   pEnumIDList;
     447   LPITEMIDLIST   pidl;
     448   DWORD    dwFetched;
     449   UINT     i;
     450   LVITEMA  lvItem;
     451   HRESULT     hRes;
     452   HDPA     hdpa;
     453
     454   TRACE("%p\n",This);
     455
     456   /* get the itemlist from the shfolder*/
     457   hRes = IShellFolder_EnumObjects(This->pSFParent,This->hWnd, SHCONTF_NONFOLDERS | SHCONTF_FOLDERS, &pEnumIDList);
     458   if (hRes != S_OK)
     459   {
     460     if (hRes==S_FALSE)
     461       return(NOERROR);
     462     return(hRes);
     463   }
     464
     465   /* create a pointer array */
     466   hdpa = pDPA_Create(16);
     467   if (!hdpa)
     468   {
     469     return(E_OUTOFMEMORY);
     470   }
     471
     472   /* copy the items into the array*/
     473   while((S_OK == IEnumIDList_Next(pEnumIDList,1, &pidl, &dwFetched)) && dwFetched)
     474   {
     475     if (pDPA_InsertPtr(hdpa, 0x7fff, pidl) == -1)
     476     {
     477       SHFree(pidl);
     478     }
     479   }
     480
     481   /*sort the array*/
     482   pDPA_Sort(hdpa, (PFNDPACOMPARE)ShellView_CompareItems, (LPARAM)This->pSFParent);
     483
     484   /*turn the listview's redrawing off*/
     485   SendMessageA(This->hWndList, WM_SETREDRAW, FALSE, 0);
     486
     487   for (i=0; i < DPA_GetPtrCount(hdpa); ++i)   /* DPA_GetPtrCount is a macro*/
     488   {
     489     pidl = (LPITEMIDLIST)DPA_GetPtr(hdpa, i);
     490     if (IncludeObject(This, pidl) == S_OK) /* in a commdlg This works as a filemask*/
     491     {
     492       ZeroMemory(&lvItem, sizeof(lvItem)); /* create the listviewitem*/
     493       lvItem.mask = LVIF_TEXT | LVIF_IMAGE | LVIF_PARAM;     /*set the mask*/
     494       lvItem.iItem = ListView_GetItemCount(This->hWndList);  /*add the item to the end of the list*/
     495       lvItem.lParam = (LPARAM) pidl;             /*set the item's data*/
     496       lvItem.pszText = LPSTR_TEXTCALLBACKA;         /*get text on a callback basis*/
     497       lvItem.iImage = I_IMAGECALLBACK;           /*get the image on a callback basis*/
     498       ListView_InsertItemA(This->hWndList, &lvItem);
     499     }
     500     else
     501       SHFree(pidl);                     /* the listview has the COPY*/
     502   }
     503
     504   /*turn the listview's redrawing back on and force it to draw*/
     505   SendMessageA(This->hWndList, WM_SETREDRAW, TRUE, 0);
     506   InvalidateRect(This->hWndList, NULL, TRUE);
     507   UpdateWindow(This->hWndList);
     508
     509   IEnumIDList_Release(pEnumIDList); /* destroy the list*/
     510   pDPA_Destroy(hdpa);
     511
     512   return S_OK;
    400513}
    401514
     
    406519{
    407520#if 0
    408         IDropTarget* pdt;
     521   IDropTarget* pdt;
    409522#endif
    410         TRACE("%p\n",This);
    411 
    412         if(ShellView_CreateList(This))
    413         {
    414           if(ShellView_InitList(This))
    415           {
    416             ShellView_FillList(This);
    417           }
    418         }
    419        
     523   TRACE("%p\n",This);
     524
     525   if(ShellView_CreateList(This))
     526   {
     527     if(ShellView_InitList(This))
     528     {
     529       ShellView_FillList(This);
     530     }
     531   }
     532
    420533#if 0
    421         /* This makes a chrash since we havn't called OleInititialize. But if we
    422         do this call in DllMain it breaks some apps. The native shell32 does not
    423         call OleInitialize and not even depend on ole32.dll.
    424         But for some apps it works...*/
    425         if (SUCCEEDED(IShellFolder_CreateViewObject(This->pSFParent, This->hWnd, &IID_IDropTarget, (LPVOID*)&pdt)))
    426         {
    427           pRegisterDragDrop(This->hWnd, pdt);
    428           IDropTarget_Release(pdt);
    429         }
     534   /* This makes a chrash since we havn't called OleInititialize. But if we
     535   do this call in DllMain it breaks some apps. The native shell32 does not
     536   call OleInitialize and not even depend on ole32.dll.
     537   But for some apps it works...*/
     538   if (SUCCEEDED(IShellFolder_CreateViewObject(This->pSFParent, This->hWnd, &IID_IDropTarget, (LPVOID*)&pdt)))
     539   {
     540     pRegisterDragDrop(This->hWnd, pdt);
     541     IDropTarget_Release(pdt);
     542   }
    430543#endif
    431         return S_OK;
    432 }
    433 
    434 /**********************************************************
    435  *      #### Handling of the menus ####
     544   return S_OK;
     545}
     546
     547/**********************************************************
     548 * #### Handling of the menus ####
    436549 */
    437550
     
    440553*/
    441554static HMENU ShellView_BuildFileMenu(IShellViewImpl * This)
    442 {       CHAR    szText[MAX_PATH];
    443         MENUITEMINFOA   mii;
    444         int     nTools,i;
    445         HMENU   hSubMenu;
    446 
    447         TRACE("(%p)\n",This);
    448 
    449         hSubMenu = CreatePopupMenu();
    450         if(hSubMenu)
    451         { /*get the number of items in our global array*/
    452           for(nTools = 0; Tools[nTools].idCommand != -1; nTools++){}
    453 
    454           /*add the menu items*/
    455           for(i = 0; i < nTools; i++)
    456           {
    457             LoadStringA(shell32_hInstance, Tools[i].idMenuString, szText, MAX_PATH);
    458 
    459             ZeroMemory(&mii, sizeof(mii));
    460             mii.cbSize = sizeof(mii);
    461             mii.fMask = MIIM_TYPE | MIIM_ID | MIIM_STATE;
    462 
    463             if(TBSTYLE_SEP != Tools[i].bStyle) /* no seperator*/
    464             {
    465               mii.fType = MFT_STRING;
    466               mii.fState = MFS_ENABLED;
    467               mii.dwTypeData = szText;
    468               mii.wID = Tools[i].idCommand;
    469             }
    470             else
    471             {
    472               mii.fType = MFT_SEPARATOR;
    473             }
    474             /* tack This item onto the end of the menu */
    475             InsertMenuItemA(hSubMenu, (UINT)-1, TRUE, &mii);
    476           }
    477         }
    478         TRACE("-- return (menu=0x%x)\n",hSubMenu);
    479         return hSubMenu;
     555{  CHAR  szText[MAX_PATH];
     556   MENUITEMINFOA  mii;
     557   int   nTools,i;
     558   HMENU hSubMenu;
     559
     560   TRACE("(%p)\n",This);
     561
     562   hSubMenu = CreatePopupMenu();
     563   if(hSubMenu)
     564   { /*get the number of items in our global array*/
     565     for(nTools = 0; Tools[nTools].idCommand != -1; nTools++){}
     566
     567     /*add the menu items*/
     568     for(i = 0; i < nTools; i++)
     569     {
     570       LoadStringA(shell32_hInstance, Tools[i].idMenuString, szText, MAX_PATH);
     571
     572       ZeroMemory(&mii, sizeof(mii));
     573       mii.cbSize = sizeof(mii);
     574       mii.fMask = MIIM_TYPE | MIIM_ID | MIIM_STATE;
     575
     576       if(TBSTYLE_SEP != Tools[i].bStyle) /* no seperator*/
     577       {
     578         mii.fType = MFT_STRING;
     579         mii.fState = MFS_ENABLED;
     580         mii.dwTypeData = szText;
     581         mii.wID = Tools[i].idCommand;
     582       }
     583       else
     584       {
     585         mii.fType = MFT_SEPARATOR;
     586       }
     587       /* tack This item onto the end of the menu */
     588       InsertMenuItemA(hSubMenu, (UINT)-1, TRUE, &mii);
     589     }
     590   }
     591   TRACE("-- return (menu=0x%x)\n",hSubMenu);
     592   return hSubMenu;
    480593}
    481594/**********************************************************
     
    483596*/
    484597static void ShellView_MergeFileMenu(IShellViewImpl * This, HMENU hSubMenu)
    485 {       TRACE("(%p)->(submenu=0x%08x) stub\n",This,hSubMenu);
    486 
    487         if(hSubMenu)
    488         { /*insert This item at the beginning of the menu */
    489           _InsertMenuItem(hSubMenu, 0, TRUE, 0, MFT_SEPARATOR, NULL, MFS_ENABLED);
    490           _InsertMenuItem(hSubMenu, 0, TRUE, IDM_MYFILEITEM, MFT_STRING, "dummy45", MFS_ENABLED);
    491 
    492         }
    493         TRACE("--\n"); 
     598{  TRACE("(%p)->(submenu=0x%08x) stub\n",This,hSubMenu);
     599
     600   if(hSubMenu)
     601   { /*insert This item at the beginning of the menu */
     602     _InsertMenuItem(hSubMenu, 0, TRUE, 0, MFT_SEPARATOR, NULL, MFS_ENABLED);
     603     _InsertMenuItem(hSubMenu, 0, TRUE, IDM_MYFILEITEM, MFT_STRING, "dummy45", MFS_ENABLED);
     604
     605   }
     606   TRACE("--\n");
    494607}
    495608
     
    499612
    500613static void ShellView_MergeViewMenu(IShellViewImpl * This, HMENU hSubMenu)
    501 {       MENUITEMINFOA   mii;
    502 
    503         TRACE("(%p)->(submenu=0x%08x)\n",This,hSubMenu);
    504 
    505         if(hSubMenu)
    506         { /*add a separator at the correct position in the menu*/
    507           _InsertMenuItem(hSubMenu, FCIDM_MENU_VIEW_SEP_OPTIONS, FALSE, 0, MFT_SEPARATOR, NULL, MFS_ENABLED);
    508 
    509           ZeroMemory(&mii, sizeof(mii));
    510           mii.cbSize = sizeof(mii);
    511           mii.fMask = MIIM_SUBMENU | MIIM_TYPE | MIIM_DATA;;
    512           mii.fType = MFT_STRING;
    513           mii.dwTypeData = "View";
    514           mii.hSubMenu = LoadMenuA(shell32_hInstance, "MENU_001");
    515           InsertMenuItemA(hSubMenu, FCIDM_MENU_VIEW_SEP_OPTIONS, FALSE, &mii);
    516         }
     614{  MENUITEMINFOA  mii;
     615
     616   TRACE("(%p)->(submenu=0x%08x)\n",This,hSubMenu);
     617
     618   if(hSubMenu)
     619   { /*add a separator at the correct position in the menu*/
     620     _InsertMenuItem(hSubMenu, FCIDM_MENU_VIEW_SEP_OPTIONS, FALSE, 0, MFT_SEPARATOR, NULL, MFS_ENABLED);
     621
     622     ZeroMemory(&mii, sizeof(mii));
     623     mii.cbSize = sizeof(mii);
     624     mii.fMask = MIIM_SUBMENU | MIIM_TYPE | MIIM_DATA;;
     625     mii.fType = MFT_STRING;
     626     mii.dwTypeData = "View";
     627     mii.hSubMenu = LoadMenuA(shell32_hInstance, "MENU_001");
     628     InsertMenuItemA(hSubMenu, FCIDM_MENU_VIEW_SEP_OPTIONS, FALSE, &mii);
     629   }
    517630}
    518631
     
    525638static UINT ShellView_GetSelections(IShellViewImpl * This)
    526639{
    527         LVITEMA lvItem;
    528         UINT    i = 0;
    529 
    530         if (This->apidl)
    531         {
    532           SHFree(This->apidl);
    533         }
    534 
    535         This->cidl = ListView_GetSelectedCount(This->hWndList);
    536         This->apidl = (LPITEMIDLIST*)SHAlloc(This->cidl * sizeof(LPITEMIDLIST));
    537 
    538         TRACE("selected=%i\n", This->cidl);
    539        
    540         if(This->apidl)
    541         {
    542           TRACE("-- Items selected =%u\n", This->cidl);
    543 
    544           ZeroMemory(&lvItem, sizeof(lvItem));
    545           lvItem.mask = LVIF_STATE | LVIF_PARAM;
    546           lvItem.stateMask = LVIS_SELECTED;
    547 
    548           while(ListView_GetItemA(This->hWndList, &lvItem) && (i < This->cidl))
    549           {
    550             if(lvItem.state & LVIS_SELECTED)
    551             {
    552               This->apidl[i] = (LPITEMIDLIST)lvItem.lParam;
    553               i++;
    554               TRACE("-- selected Item found\n");
    555             }
    556             lvItem.iItem++;
    557           }
    558         }
    559         return This->cidl;
    560 
    561 }
    562 /**********************************************************
    563  *      ShellView_DoContextMenu()
     640   LVITEMA  lvItem;
     641   UINT  i = 0;
     642
     643   if (This->apidl)
     644   {
     645     SHFree(This->apidl);
     646   }
     647
     648   This->cidl = ListView_GetSelectedCount(This->hWndList);
     649   This->apidl = (LPITEMIDLIST*)SHAlloc(This->cidl * sizeof(LPITEMIDLIST));
     650
     651   TRACE("selected=%i\n", This->cidl);
     652
     653   if(This->apidl)
     654   {
     655     TRACE("-- Items selected =%u\n", This->cidl);
     656
     657     ZeroMemory(&lvItem, sizeof(lvItem));
     658     lvItem.mask = LVIF_STATE | LVIF_PARAM;
     659     lvItem.stateMask = LVIS_SELECTED;
     660
     661     while(ListView_GetItemA(This->hWndList, &lvItem) && (i < This->cidl))
     662     {
     663       if(lvItem.state & LVIS_SELECTED)
     664       {
     665         This->apidl[i] = (LPITEMIDLIST)lvItem.lParam;
     666         i++;
     667         TRACE("-- selected Item found\n");
     668       }
     669       lvItem.iItem++;
     670     }
     671   }
     672   return This->cidl;
     673
     674}
     675/**********************************************************
     676 * ShellView_DoContextMenu()
    564677 */
    565678static void ShellView_DoContextMenu(IShellViewImpl * This, WORD x, WORD y, BOOL bDefault)
    566 {       UINT    uCommand;
    567         DWORD   wFlags;
    568         HMENU   hMenu;
    569         BOOL    fExplore = FALSE;
    570         HWND    hwndTree = 0;
    571         LPCONTEXTMENU   pContextMenu = NULL;
    572         IContextMenu *  pCM = NULL;
    573         CMINVOKECOMMANDINFO     cmi;
    574        
    575         TRACE("(%p)->(0x%08x 0x%08x 0x%08x) stub\n",This, x, y, bDefault);
    576 
    577         /* look, what's selected and create a context menu object of it*/
    578         if( ShellView_GetSelections(This) )
    579         {
    580           IShellFolder_GetUIObjectOf( This->pSFParent, This->hWndParent, This->cidl, This->apidl,
    581                                         (REFIID)&IID_IContextMenu, NULL, (LPVOID *)&pContextMenu);
    582 
    583           if(pContextMenu)
    584           {
    585             TRACE("-- pContextMenu\n");
    586             hMenu = CreatePopupMenu();
    587 
    588             if( hMenu )
    589             {
    590               /* See if we are in Explore or Open mode. If the browser's tree is present, we are in Explore mode.*/
    591               if(SUCCEEDED(IShellBrowser_GetControlWindow(This->pShellBrowser,FCW_TREE, &hwndTree)) && hwndTree)
    592               {
    593                 TRACE("-- explore mode\n");
    594                 fExplore = TRUE;
    595               }
    596 
    597               /* build the flags depending on what we can do with the selected item */
    598               wFlags = CMF_NORMAL | (This->cidl != 1 ? 0 : CMF_CANRENAME) | (fExplore ? CMF_EXPLORE : 0);
    599 
    600               /* let the ContextMenu merge its items in */
    601               if (SUCCEEDED(IContextMenu_QueryContextMenu( pContextMenu, hMenu, 0, FCIDM_SHVIEWFIRST, FCIDM_SHVIEWLAST, wFlags )))
    602               {
    603                 if( bDefault )
    604                 {
    605                   TRACE("-- get menu default command\n");
    606                   uCommand = GetMenuDefaultItem(hMenu, FALSE, GMDI_GOINTOPOPUPS);
    607                 }
    608                 else
    609                 {
    610                   TRACE("-- track popup\n");
    611                   uCommand = TrackPopupMenu( hMenu,TPM_LEFTALIGN | TPM_RETURNCMD,x,y,0,This->hWnd,NULL);
    612                 }               
    613 
    614                 if(uCommand > 0)
    615                 {
    616                   TRACE("-- uCommand=%u\n", uCommand);
    617                   if (IsInCommDlg(This) && ((uCommand==IDM_EXPLORE) || (uCommand==IDM_OPEN)))
    618                   {
    619                     TRACE("-- dlg: OnDefaultCommand\n");
    620                     OnDefaultCommand(This);
    621                   }
    622                   else
    623                   {
    624                     TRACE("-- explore -- invoke command\n");
    625                     ZeroMemory(&cmi, sizeof(cmi));
    626                     cmi.cbSize = sizeof(cmi);
    627                     cmi.hwnd = This->hWndParent;
    628                     cmi.lpVerb = (LPCSTR)MAKEINTRESOURCEA(uCommand);
    629                     IContextMenu_InvokeCommand(pContextMenu, &cmi);
    630                   }
    631                 }
    632                 DestroyMenu(hMenu);
    633               }
    634             }
    635             if (pContextMenu)
    636               IContextMenu_Release(pContextMenu);
    637           }
    638         }
    639         else    /* background context menu */
    640         {
    641           hMenu = CreatePopupMenu();
    642 
    643           pCM = ISvBgCm_Constructor();
    644           IContextMenu_QueryContextMenu(pCM, hMenu, 0, FCIDM_SHVIEWFIRST, FCIDM_SHVIEWLAST, 0);
    645 
    646           uCommand = TrackPopupMenu( hMenu, TPM_LEFTALIGN | TPM_RETURNCMD,x,y,0,This->hWnd,NULL);
    647           DestroyMenu(hMenu);
    648 
    649           TRACE("-- (%p)->(uCommand=0x%08x )\n",This, uCommand);
    650 
    651           ZeroMemory(&cmi, sizeof(cmi));
    652           cmi.cbSize = sizeof(cmi);
    653           cmi.lpVerb = (LPCSTR)MAKEINTRESOURCEA(uCommand);
    654           cmi.hwnd = This->hWndParent;
    655           IContextMenu_InvokeCommand(pCM, &cmi);
    656 
    657           IContextMenu_Release(pCM);
    658         }
    659 }
    660 
    661 /**********************************************************
    662  *      ##### message handling #####
     679{  UINT  uCommand;
     680   DWORD wFlags;
     681   HMENU hMenu;
     682   BOOL  fExplore = FALSE;
     683   HWND  hwndTree = 0;
     684   LPCONTEXTMENU  pContextMenu = NULL;
     685   IContextMenu * pCM = NULL;
     686   CMINVOKECOMMANDINFO                   cmi;
     687
     688   TRACE("(%p)->(0x%08x 0x%08x 0x%08x) stub\n",This, x, y, bDefault);
     689
     690   /* look, what's selected and create a context menu object of it*/
     691   if( ShellView_GetSelections(This) )
     692   {
     693     IShellFolder_GetUIObjectOf( This->pSFParent, This->hWndParent, This->cidl, This->apidl,
     694               (REFIID)&IID_IContextMenu, NULL, (LPVOID *)&pContextMenu);
     695
     696     if(pContextMenu)
     697     {
     698       TRACE("-- pContextMenu\n");
     699       hMenu = CreatePopupMenu();
     700
     701       if( hMenu )
     702       {
     703         /* See if we are in Explore or Open mode. If the browser's tree is present, we are in Explore mode.*/
     704         if(SUCCEEDED(IShellBrowser_GetControlWindow(This->pShellBrowser,FCW_TREE, &hwndTree)) && hwndTree)
     705         {
     706           TRACE("-- explore mode\n");
     707           fExplore = TRUE;
     708         }
     709
     710         /* build the flags depending on what we can do with the selected item */
     711         wFlags = CMF_NORMAL | (This->cidl != 1 ? 0 : CMF_CANRENAME) | (fExplore ? CMF_EXPLORE : 0);
     712
     713         /* let the ContextMenu merge its items in */
     714         if (SUCCEEDED(IContextMenu_QueryContextMenu( pContextMenu, hMenu, 0, FCIDM_SHVIEWFIRST, FCIDM_SHVIEWLAST, wFlags )))
     715         {
     716      if( bDefault )
     717      {
     718        TRACE("-- get menu default command\n");
     719        uCommand = GetMenuDefaultItem(hMenu, FALSE, GMDI_GOINTOPOPUPS);
     720      }
     721      else
     722      {
     723        TRACE("-- track popup\n");
     724        uCommand = TrackPopupMenu( hMenu,TPM_LEFTALIGN | TPM_RETURNCMD,x,y,0,This->hWnd,NULL);
     725      }
     726
     727      if(uCommand > 0)
     728      {
     729        TRACE("-- uCommand=%u\n", uCommand);
     730        if (IsInCommDlg(This) && ((uCommand==IDM_EXPLORE) || (uCommand==IDM_OPEN)))
     731        {
     732          TRACE("-- dlg: OnDefaultCommand\n");
     733          OnDefaultCommand(This);
     734        }
     735        else
     736        {
     737          TRACE("-- explore -- invoke command\n");
     738          ZeroMemory(&cmi, sizeof(cmi));
     739          cmi.cbSize = sizeof(cmi);
     740          cmi.hwnd = This->hWndParent;
     741          cmi.lpVerb = (LPCSTR)MAKEINTRESOURCEA(uCommand);
     742          IContextMenu_InvokeCommand(pContextMenu, &cmi);
     743        }
     744      }
     745      DestroyMenu(hMenu);
     746         }
     747       }
     748       if (pContextMenu)
     749         IContextMenu_Release(pContextMenu);
     750     }
     751   }
     752   else  /* background context menu */
     753   {
     754     hMenu = CreatePopupMenu();
     755
     756     pCM = ISvBgCm_Constructor();
     757     IContextMenu_QueryContextMenu(pCM, hMenu, 0, FCIDM_SHVIEWFIRST, FCIDM_SHVIEWLAST, 0);
     758
     759     uCommand = TrackPopupMenu( hMenu, TPM_LEFTALIGN | TPM_RETURNCMD,x,y,0,This->hWnd,NULL);
     760     DestroyMenu(hMenu);
     761
     762     TRACE("-- (%p)->(uCommand=0x%08x )\n",This, uCommand);
     763
     764     ZeroMemory(&cmi, sizeof(cmi));
     765     cmi.cbSize = sizeof(cmi);
     766     cmi.lpVerb = (LPCSTR)MAKEINTRESOURCEA(uCommand);
     767     cmi.hwnd = This->hWndParent;
     768     IContextMenu_InvokeCommand(pCM, &cmi);
     769
     770     IContextMenu_Release(pCM);
     771   }
     772}
     773
     774/**********************************************************
     775 * ##### message handling #####
    663776 */
    664777
     
    668781static LRESULT ShellView_OnSize(IShellViewImpl * This, WORD wWidth, WORD wHeight)
    669782{
    670         TRACE("%p width=%u height=%u\n",This, wWidth,wHeight);
    671 
    672         /*resize the ListView to fit our window*/
    673         if(This->hWndList)
    674         {
    675           MoveWindow(This->hWndList, 0, 0, wWidth, wHeight, TRUE);
    676         }
    677 
    678         return S_OK;
     783   TRACE("%p width=%u height=%u\n",This, wWidth,wHeight);
     784
     785   /*resize the ListView to fit our window*/
     786   if(This->hWndList)
     787   {
     788     MoveWindow(This->hWndList, 0, 0, wWidth, wHeight, TRUE);
     789   }
     790
     791   return S_OK;
    679792}
    680793/**********************************************************
     
    686799static void ShellView_OnDeactivate(IShellViewImpl * This)
    687800{
    688         TRACE("%p\n",This);
    689 
    690         if(This->uState != SVUIA_DEACTIVATE)
    691         {
    692           if(This->hMenu)
    693           {
    694             IShellBrowser_SetMenuSB(This->pShellBrowser,0, 0, 0);
    695             IShellBrowser_RemoveMenusSB(This->pShellBrowser,This->hMenu);
    696             DestroyMenu(This->hMenu);
    697             This->hMenu = 0;
    698           }
    699 
    700           This->uState = SVUIA_DEACTIVATE;
    701         }
     801   TRACE("%p\n",This);
     802
     803   if(This->uState != SVUIA_DEACTIVATE)
     804   {
     805     if(This->hMenu)
     806     {
     807       IShellBrowser_SetMenuSB(This->pShellBrowser,0, 0, 0);
     808       IShellBrowser_RemoveMenusSB(This->pShellBrowser,This->hMenu);
     809       DestroyMenu(This->hMenu);
     810       This->hMenu = 0;
     811     }
     812
     813     This->uState = SVUIA_DEACTIVATE;
     814   }
    702815}
    703816
     
    706819*/
    707820static LRESULT ShellView_OnActivate(IShellViewImpl * This, UINT uState)
    708 {       OLEMENUGROUPWIDTHS   omw = { {0, 0, 0, 0, 0, 0} };
    709         MENUITEMINFOA         mii;
    710         CHAR                szText[MAX_PATH];
    711 
    712         TRACE("%p uState=%x\n",This,uState);
    713 
    714         /*don't do anything if the state isn't really changing */
    715         if(This->uState == uState)
    716         {
    717           return S_OK;
    718         }
    719 
    720         ShellView_OnDeactivate(This);
    721 
    722         /*only do This if we are active */
    723         if(uState != SVUIA_DEACTIVATE)
    724         {
    725           /*merge the menus */
    726           This->hMenu = CreateMenu();
    727 
    728           if(This->hMenu)
    729           {
    730             IShellBrowser_InsertMenusSB(This->pShellBrowser, This->hMenu, &omw);
    731             TRACE("-- after fnInsertMenusSB\n");
    732 
    733             /*build the top level menu get the menu item's text*/
    734             strcpy(szText,"dummy 31");
    735 
    736             ZeroMemory(&mii, sizeof(mii));
    737             mii.cbSize = sizeof(mii);
    738             mii.fMask = MIIM_SUBMENU | MIIM_TYPE | MIIM_STATE;
    739             mii.fType = MFT_STRING;
    740             mii.fState = MFS_ENABLED;
    741             mii.dwTypeData = szText;
    742             mii.hSubMenu = ShellView_BuildFileMenu(This);
    743 
    744             /*insert our menu into the menu bar*/
    745             if(mii.hSubMenu)
    746             {
    747               InsertMenuItemA(This->hMenu, FCIDM_MENU_HELP, FALSE, &mii);
    748             }
    749 
    750             /*get the view menu so we can merge with it*/
    751             ZeroMemory(&mii, sizeof(mii));
    752             mii.cbSize = sizeof(mii);
    753             mii.fMask = MIIM_SUBMENU;
    754 
    755             if(GetMenuItemInfoA(This->hMenu, FCIDM_MENU_VIEW, FALSE, &mii))
    756             {
    757               ShellView_MergeViewMenu(This, mii.hSubMenu);
    758             }
    759 
    760             /*add the items that should only be added if we have the focus*/
    761             if(SVUIA_ACTIVATE_FOCUS == uState)
    762             {
    763               /*get the file menu so we can merge with it */
    764               ZeroMemory(&mii, sizeof(mii));
    765               mii.cbSize = sizeof(mii);
    766               mii.fMask = MIIM_SUBMENU;
    767 
    768               if(GetMenuItemInfoA(This->hMenu, FCIDM_MENU_FILE, FALSE, &mii))
    769               {
    770                 ShellView_MergeFileMenu(This, mii.hSubMenu);
    771               }
    772             }
    773             TRACE("-- before fnSetMenuSB\n");
    774             IShellBrowser_SetMenuSB(This->pShellBrowser, This->hMenu, 0, This->hWnd);
    775           }
    776         }
    777         This->uState = uState;
    778         TRACE("--\n");
    779         return S_OK;
     821{  OLEMENUGROUPWIDTHS   omw = { {0, 0, 0, 0, 0, 0} };
     822   MENUITEMINFOA         mii;
     823   CHAR                szText[MAX_PATH];
     824
     825   TRACE("%p uState=%x\n",This,uState);
     826
     827   /*don't do anything if the state isn't really changing */
     828   if(This->uState == uState)
     829   {
     830     return S_OK;
     831   }
     832
     833   ShellView_OnDeactivate(This);
     834
     835   /*only do This if we are active */
     836   if(uState != SVUIA_DEACTIVATE)
     837   {
     838     /*merge the menus */
     839     This->hMenu = CreateMenu();
     840
     841     if(This->hMenu)
     842     {
     843       IShellBrowser_InsertMenusSB(This->pShellBrowser, This->hMenu, &omw);
     844       TRACE("-- after fnInsertMenusSB\n");
     845
     846       /*build the top level menu get the menu item's text*/
     847       strcpy(szText,"dummy 31");
     848
     849       ZeroMemory(&mii, sizeof(mii));
     850       mii.cbSize = sizeof(mii);
     851       mii.fMask = MIIM_SUBMENU | MIIM_TYPE | MIIM_STATE;
     852       mii.fType = MFT_STRING;
     853       mii.fState = MFS_ENABLED;
     854       mii.dwTypeData = szText;
     855       mii.hSubMenu = ShellView_BuildFileMenu(This);
     856
     857       /*insert our menu into the menu bar*/
     858       if(mii.hSubMenu)
     859       {
     860         InsertMenuItemA(This->hMenu, FCIDM_MENU_HELP, FALSE, &mii);
     861       }
     862
     863       /*get the view menu so we can merge with it*/
     864       ZeroMemory(&mii, sizeof(mii));
     865       mii.cbSize = sizeof(mii);
     866       mii.fMask = MIIM_SUBMENU;
     867
     868       if(GetMenuItemInfoA(This->hMenu, FCIDM_MENU_VIEW, FALSE, &mii))
     869       {
     870         ShellView_MergeViewMenu(This, mii.hSubMenu);
     871       }
     872
     873       /*add the items that should only be added if we have the focus*/
     874       if(SVUIA_ACTIVATE_FOCUS == uState)
     875       {
     876         /*get the file menu so we can merge with it */
     877         ZeroMemory(&mii, sizeof(mii));
     878         mii.cbSize = sizeof(mii);
     879         mii.fMask = MIIM_SUBMENU;
     880
     881         if(GetMenuItemInfoA(This->hMenu, FCIDM_MENU_FILE, FALSE, &mii))
     882         {
     883           ShellView_MergeFileMenu(This, mii.hSubMenu);
     884         }
     885       }
     886       TRACE("-- before fnSetMenuSB\n");
     887       IShellBrowser_SetMenuSB(This->pShellBrowser, This->hMenu, 0, This->hWnd);
     888     }
     889   }
     890   This->uState = uState;
     891   TRACE("--\n");
     892   return S_OK;
    780893}
    781894
     
    786899static LRESULT ShellView_OnSetFocus(IShellViewImpl * This)
    787900{
    788         TRACE("%p\n",This);
    789 
    790         /* Tell the browser one of our windows has received the focus. This
    791         should always be done before merging menus (OnActivate merges the
    792         menus) if one of our windows has the focus.*/
    793 
    794         IShellBrowser_OnViewWindowActive(This->pShellBrowser,(IShellView*) This);
    795         ShellView_OnActivate(This, SVUIA_ACTIVATE_FOCUS);
    796 
    797         /* Set the focus to the listview */
    798         SetFocus(This->hWndList);
    799 
    800         /* Notify the ICommDlgBrowser interface */
    801         OnStateChange(This,CDBOSC_SETFOCUS);
    802 
    803         return 0;
     901   TRACE("%p\n",This);
     902
     903   /* Tell the browser one of our windows has received the focus. This
     904   should always be done before merging menus (OnActivate merges the
     905   menus) if one of our windows has the focus.*/
     906
     907   IShellBrowser_OnViewWindowActive(This->pShellBrowser,(IShellView*) This);
     908   ShellView_OnActivate(This, SVUIA_ACTIVATE_FOCUS);
     909
     910   /* Set the focus to the listview */
     911   SetFocus(This->hWndList);
     912
     913   /* Notify the ICommDlgBrowser interface */
     914   OnStateChange(This,CDBOSC_SETFOCUS);
     915
     916   return 0;
    804917}
    805918
     
    809922static LRESULT ShellView_OnKillFocus(IShellViewImpl * This)
    810923{
    811         TRACE("(%p) stub\n",This);
    812 
    813         ShellView_OnActivate(This, SVUIA_ACTIVATE_NOFOCUS);
    814         /* Notify the ICommDlgBrowser */
    815         OnStateChange(This,CDBOSC_KILLFOCUS);
    816 
    817         return 0;
     924   TRACE("(%p) stub\n",This);
     925
     926   ShellView_OnActivate(This, SVUIA_ACTIVATE_NOFOCUS);
     927   /* Notify the ICommDlgBrowser */
     928   OnStateChange(This,CDBOSC_KILLFOCUS);
     929
     930   return 0;
    818931}
    819932
    820933/**********************************************************
    821934* ShellView_OnCommand()
     935*
     936* NOTES
     937*  the CmdID's are the ones from the context menu
    822938*/
    823939static LRESULT ShellView_OnCommand(IShellViewImpl * This,DWORD dwCmdID, DWORD dwCmd, HWND hwndCmd)
    824940{
    825         TRACE("(%p)->(0x%08lx 0x%08lx 0x%08x) stub\n",This, dwCmdID, dwCmd, hwndCmd);
    826 
    827         switch(dwCmdID)
    828         {
    829           case FCIDM_SHVIEW_SMALLICON:
    830             This->FolderSettings.ViewMode = FVM_SMALLICON;
    831             SetStyle (This, LVS_SMALLICON, LVS_TYPEMASK);
    832             break;
    833 
    834           case FCIDM_SHVIEW_BIGICON:
    835             This->FolderSettings.ViewMode = FVM_ICON;
    836             SetStyle (This, LVS_ICON, LVS_TYPEMASK);
    837             break;
    838 
    839           case FCIDM_SHVIEW_LISTVIEW:
    840             This->FolderSettings.ViewMode = FVM_LIST;
    841             SetStyle (This, LVS_LIST, LVS_TYPEMASK);
    842             break;
    843 
    844           case FCIDM_SHVIEW_REPORTVIEW:
    845             This->FolderSettings.ViewMode = FVM_DETAILS;
    846             SetStyle (This, LVS_REPORT, LVS_TYPEMASK);
    847             break;
    848 
    849           default:
    850             TRACE("-- COMMAND 0x%04lx unhandled\n", dwCmdID);
    851         }
    852         return 0;
     941   TRACE("(%p)->(0x%08lx 0x%08lx 0x%08x) stub\n",This, dwCmdID, dwCmd, hwndCmd);
     942
     943   switch(dwCmdID)
     944   {
     945     case FCIDM_SHVIEW_SMALLICON:
     946       This->FolderSettings.ViewMode = FVM_SMALLICON;
     947       SetStyle (This, LVS_SMALLICON, LVS_TYPEMASK);
     948       break;
     949
     950     case FCIDM_SHVIEW_BIGICON:
     951       This->FolderSettings.ViewMode = FVM_ICON;
     952       SetStyle (This, LVS_ICON, LVS_TYPEMASK);
     953       break;
     954
     955     case FCIDM_SHVIEW_LISTVIEW:
     956       This->FolderSettings.ViewMode = FVM_LIST;
     957       SetStyle (This, LVS_LIST, LVS_TYPEMASK);
     958       break;
     959
     960     case FCIDM_SHVIEW_REPORTVIEW:
     961       This->FolderSettings.ViewMode = FVM_DETAILS;
     962       SetStyle (This, LVS_REPORT, LVS_TYPEMASK);
     963       break;
     964
     965     /* the menu-ID's for sorting are 0x30... see shrec.rc */
     966     case 0x30:
     967     case 0x31:
     968     case 0x32:
     969     case 0x33:
     970       ListView_SortItems(This->hWndList, ShellView_ListViewCompareItems, (LPARAM) (dwCmdID - 0x30));
     971       break;
     972
     973     default:
     974       TRACE("-- COMMAND 0x%04lx unhandled\n", dwCmdID);
     975   }
     976   return 0;
    853977}
    854978
     
    858982
    859983static LRESULT ShellView_OnNotify(IShellViewImpl * This, UINT CtlID, LPNMHDR lpnmh)
    860 {       NM_LISTVIEW *lpnmlv = (NM_LISTVIEW*)lpnmh;
    861         NMLVDISPINFOA *lpdi = (NMLVDISPINFOA *)lpnmh;
    862         LPITEMIDLIST pidl;
    863         STRRET   str;
    864 
    865         TRACE("%p CtlID=%u lpnmh->code=%x\n",This,CtlID,lpnmh->code);
    866 
    867         switch(lpnmh->code)
    868         {
    869           case NM_SETFOCUS:
    870             TRACE("-- NM_SETFOCUS %p\n",This);
    871             ShellView_OnSetFocus(This);
    872             break;
    873 
    874           case NM_KILLFOCUS:
    875             TRACE("-- NM_KILLFOCUS %p\n",This);
    876             ShellView_OnDeactivate(This);
    877             /* Notify the ICommDlgBrowser interface */
    878             OnStateChange(This,CDBOSC_KILLFOCUS);
    879             break;
    880 
    881           case HDN_ENDTRACKA:
    882             TRACE("-- HDN_ENDTRACKA %p\n",This);
    883             /*nColumn1 = ListView_GetColumnWidth(This->hWndList, 0);
    884             nColumn2 = ListView_GetColumnWidth(This->hWndList, 1);*/
    885             break;
    886 
    887           case LVN_DELETEITEM:
    888             TRACE("-- LVN_DELETEITEM %p\n",This);
    889             SHFree((LPITEMIDLIST)lpnmlv->lParam);     /*delete the pidl because we made a copy of it*/
    890             break;
    891 
    892           case LVN_ITEMACTIVATE:
    893             TRACE("-- LVN_ITEMACTIVATE %p\n",This);
    894             OnStateChange(This, CDBOSC_SELCHANGE);  /* the browser will get the IDataObject now */
    895             ShellView_DoContextMenu(This, 0, 0, TRUE);
    896             break;
    897 
    898           case LVN_GETDISPINFOA:
    899             TRACE("-- LVN_GETDISPINFOA %p\n",This);
    900             pidl = (LPITEMIDLIST)lpdi->item.lParam;
    901 
    902 
    903             if(lpdi->item.iSubItem)               /*is the sub-item information being requested?*/
    904             { if(lpdi->item.mask & LVIF_TEXT)    /*is the text being requested?*/
    905               { if(_ILIsValue(pidl))    /*is This a value or a folder?*/
    906                 { switch (lpdi->item.iSubItem)
    907                   { case 1:     /* size */
    908                       _ILGetFileSize (pidl, lpdi->item.pszText, lpdi->item.cchTextMax);
    909                       break;
    910                     case 2:     /* extension */
    911                       { char sTemp[64];
    912                         if (_ILGetExtension (pidl, sTemp, 64))
    913                         { if (!( HCR_MapTypeToValue(sTemp, sTemp, 64, TRUE)
    914                                  && HCR_MapTypeToValue(sTemp, lpdi->item.pszText, lpdi->item.cchTextMax, FALSE )))
    915                           { lstrcpynA (lpdi->item.pszText, sTemp, lpdi->item.cchTextMax);
    916                             strncat (lpdi->item.pszText, "-file", lpdi->item.cchTextMax);
    917                           }
    918                         }
    919                         else    /* no extension found */
    920                         { lpdi->item.pszText[0]=0x00;
    921                         }
    922                       }
    923                       break;
    924                     case 3:     /* date */
    925                       _ILGetFileDate (pidl, lpdi->item.pszText, lpdi->item.cchTextMax);
    926                       break;
    927                   }
    928                 }
    929                 else  /*its a folder*/
    930                 { switch (lpdi->item.iSubItem)
    931                   { case 1:
    932                       strcpy(lpdi->item.pszText, "");
    933                       break;
    934                     case 2:
    935                       lstrcpynA (lpdi->item.pszText, "Folder", lpdi->item.cchTextMax);
    936                       break;
    937                     case 3:
    938                       _ILGetFileDate (pidl, lpdi->item.pszText, lpdi->item.cchTextMax);
    939                       break;
    940                   }
    941                 }
    942                 TRACE("-- text=%s\n",lpdi->item.pszText);               
    943               }
    944             }
    945             else           /*the item text is being requested*/
    946             {
    947               if(lpdi->item.mask & LVIF_TEXT)      /*is the text being requested?*/
    948               {
    949                 if(SUCCEEDED(IShellFolder_GetDisplayNameOf(This->pSFParent,pidl, SHGDN_NORMAL | SHGDN_INFOLDER, &str)))
    950                 {
    951                   StrRetToStrNA(lpdi->item.pszText, lpdi->item.cchTextMax, &str, pidl);
    952                 }
    953                 TRACE("-- text=%s\n",lpdi->item.pszText);
    954               }
    955 
    956               if(lpdi->item.mask & LVIF_IMAGE)          /*is the image being requested?*/
    957               {
    958                 lpdi->item.iImage = SHMapPIDLToSystemImageListIndex(This->pSFParent, pidl, 0);
    959               }
    960             }
    961             break;
    962 
    963           case LVN_ITEMCHANGED:
    964             TRACE("-- LVN_ITEMCHANGED %p\n",This);
    965             OnStateChange(This, CDBOSC_SELCHANGE);  /* the browser will get the IDataObject now */
    966             break;
    967 
    968           case LVN_BEGINDRAG:
    969           case LVN_BEGINRDRAG:
    970 
    971             if (ShellView_GetSelections(This))
    972             {
    973               IDataObject * pda;
    974               DWORD dwAttributes;
    975               DWORD dwEffect = DROPEFFECT_COPY | DROPEFFECT_MOVE;
    976        
    977               if (SUCCEEDED(IShellFolder_GetUIObjectOf(This->pSFParent, This->hWnd, This->cidl, This->apidl, &IID_IDataObject,0,(LPVOID *)&pda)))
    978               {
    979                 IDropSource * pds = (IDropSource*)&(This->lpvtblDropSource);    /* own DropSource interface */
    980 
    981                 if (SUCCEEDED(IShellFolder_GetAttributesOf(This->pSFParent, This->cidl, This->apidl, &dwAttributes)))
    982                 {
    983                   if (dwAttributes & SFGAO_CANLINK)
    984                   {
    985                     dwEffect |= DROPEFFECT_LINK;
    986                   }
    987                 }
    988                
    989                 if (pds)
    990                 {
    991                   DWORD dwEffect;
    992                   pDoDragDrop(pda, pds, dwEffect, &dwEffect);
    993                 }
    994 
    995                 IDataObject_Release(pda);
    996               }
    997             }
    998             break;
    999 
    1000           case LVN_BEGINLABELEDITA:
    1001           case LVN_ENDLABELEDITA:
    1002              FIXME("labeledit\n");
    1003              break;
    1004        
    1005           default:
    1006 //          TRACE("-- %p WM_COMMAND %s unhandled\n", This, SPY_GetMsgName(lpnmh->code));
    1007             break;;
    1008         }
    1009         return 0;
     984{  LPNMLISTVIEW  lpnmlv = (LPNMLISTVIEW)lpnmh;
     985   NMLVDISPINFOA *lpdi = (NMLVDISPINFOA *)lpnmh;
     986   LPITEMIDLIST pidl;
     987   STRRET   str;
     988
     989   TRACE("%p CtlID=%u lpnmh->code=%x\n",This,CtlID,lpnmh->code);
     990
     991   switch(lpnmh->code)
     992   {
     993     case NM_SETFOCUS:
     994       TRACE("-- NM_SETFOCUS %p\n",This);
     995       ShellView_OnSetFocus(This);
     996       break;
     997
     998     case NM_KILLFOCUS:
     999       TRACE("-- NM_KILLFOCUS %p\n",This);
     1000       ShellView_OnDeactivate(This);
     1001       /* Notify the ICommDlgBrowser interface */
     1002       OnStateChange(This,CDBOSC_KILLFOCUS);
     1003       break;
     1004
     1005     case HDN_ENDTRACKA:
     1006       TRACE("-- HDN_ENDTRACKA %p\n",This);
     1007       /*nColumn1 = ListView_GetColumnWidth(This->hWndList, 0);
     1008       nColumn2 = ListView_GetColumnWidth(This->hWndList, 1);*/
     1009       break;
     1010
     1011     case LVN_DELETEITEM:
     1012       TRACE("-- LVN_DELETEITEM %p\n",This);
     1013       SHFree((LPITEMIDLIST)lpnmlv->lParam);     /*delete the pidl because we made a copy of it*/
     1014       break;
     1015
     1016     case LVN_ITEMACTIVATE:
     1017       TRACE("-- LVN_ITEMACTIVATE %p\n",This);
     1018       OnStateChange(This, CDBOSC_SELCHANGE);  /* the browser will get the IDataObject now */
     1019       ShellView_DoContextMenu(This, 0, 0, TRUE);
     1020       break;
     1021
     1022     case LVN_COLUMNCLICK:
     1023     {
     1024            This->ListViewSortInfo.nHeaderID = lpnmlv->iSubItem;
     1025            if(This->ListViewSortInfo.nLastHeaderID == This->ListViewSortInfo.nHeaderID)
     1026            {
     1027                This->ListViewSortInfo.bIsAscending = !This->ListViewSortInfo.bIsAscending;
     1028            }
     1029            else
     1030            {
     1031                This->ListViewSortInfo.bIsAscending = TRUE;
     1032            }
     1033            This->ListViewSortInfo.nLastHeaderID = This->ListViewSortInfo.nHeaderID;
     1034
     1035       ListView_SortItems(lpnmlv->hdr.hwndFrom, ShellView_ListViewCompareItems, (LPARAM) (&(This->ListViewSortInfo)));
     1036
     1037       break;
     1038     }
     1039
     1040     case LVN_GETDISPINFOA:
     1041       TRACE("-- LVN_GETDISPINFOA %p\n",This);
     1042       pidl = (LPITEMIDLIST)lpdi->item.lParam;
     1043
     1044
     1045       if(lpdi->item.iSubItem)                /*is the sub-item information being requested?*/
     1046       { if(lpdi->item.mask & LVIF_TEXT)  /*is the text being requested?*/
     1047         { if(_ILIsValue(pidl))          /*is This a value or a folder?*/
     1048           { switch (lpdi->item.iSubItem)
     1049        { case 1: /* size */
     1050            _ILGetFileSize (pidl, lpdi->item.pszText, lpdi->item.cchTextMax);
     1051            break;
     1052          case 2: /* extension */
     1053            {  char sTemp[64];
     1054              if (_ILGetExtension (pidl, sTemp, 64))
     1055         { if (!( HCR_MapTypeToValue(sTemp, sTemp, 64, TRUE)
     1056                  && HCR_MapTypeToValue(sTemp, lpdi->item.pszText, lpdi->item.cchTextMax, FALSE )))
     1057           { lstrcpynA (lpdi->item.pszText, sTemp, lpdi->item.cchTextMax);
     1058             strncat (lpdi->item.pszText, "-file", lpdi->item.cchTextMax);
     1059           }
     1060         }
     1061         else  /* no extension found */
     1062         { lpdi->item.pszText[0]=0x00;
     1063         }
     1064            }
     1065            break;
     1066          case 3: /* date */
     1067            _ILGetFileDate (pidl, lpdi->item.pszText, lpdi->item.cchTextMax);
     1068            break;
     1069        }
     1070           }
     1071           else  /*its a folder*/
     1072           { switch (lpdi->item.iSubItem)
     1073        { case 1:
     1074            strcpy(lpdi->item.pszText, "");
     1075            break;
     1076               case 2:
     1077            lstrcpynA (lpdi->item.pszText, "Folder", lpdi->item.cchTextMax);
     1078            break;
     1079          case 3:
     1080            _ILGetFileDate (pidl, lpdi->item.pszText, lpdi->item.cchTextMax);
     1081            break;
     1082        }
     1083           }
     1084           TRACE("-- text=%s\n",lpdi->item.pszText);
     1085         }
     1086       }
     1087       else    /*the item text is being requested*/
     1088       {
     1089         if(lpdi->item.mask & LVIF_TEXT)    /*is the text being requested?*/
     1090         {
     1091           if(SUCCEEDED(IShellFolder_GetDisplayNameOf(This->pSFParent,pidl, SHGDN_NORMAL | SHGDN_INFOLDER, &str)))
     1092           {
     1093        StrRetToStrNA(lpdi->item.pszText, lpdi->item.cchTextMax, &str, pidl);
     1094           }
     1095           TRACE("-- text=%s\n",lpdi->item.pszText);
     1096         }
     1097
     1098         if(lpdi->item.mask & LVIF_IMAGE)      /*is the image being requested?*/
     1099         {
     1100           lpdi->item.iImage = SHMapPIDLToSystemImageListIndex(This->pSFParent, pidl, 0);
     1101         }
     1102       }
     1103       break;
     1104
     1105     case LVN_ITEMCHANGED:
     1106       TRACE("-- LVN_ITEMCHANGED %p\n",This);
     1107       OnStateChange(This, CDBOSC_SELCHANGE);  /* the browser will get the IDataObject now */
     1108       break;
     1109
     1110     case LVN_BEGINDRAG:
     1111     case LVN_BEGINRDRAG:
     1112
     1113       if (ShellView_GetSelections(This))
     1114       {
     1115         IDataObject * pda;
     1116         DWORD dwAttributes;
     1117         DWORD dwEffect = DROPEFFECT_COPY | DROPEFFECT_MOVE;
     1118
     1119         if (SUCCEEDED(IShellFolder_GetUIObjectOf(This->pSFParent, This->hWnd, This->cidl, This->apidl, &IID_IDataObject,0,(LPVOID *)&pda)))
     1120         {
     1121           IDropSource * pds = (IDropSource*)&(This->lpvtblDropSource);   /* own DropSource interface */
     1122
     1123      if (SUCCEEDED(IShellFolder_GetAttributesOf(This->pSFParent, This->cidl, This->apidl, &dwAttributes)))
     1124      {
     1125        if (dwAttributes & SFGAO_CANLINK)
     1126        {
     1127          dwEffect |= DROPEFFECT_LINK;
     1128        }
     1129      }
     1130
     1131           if (pds)
     1132           {
     1133             DWORD dwEffect;
     1134        pDoDragDrop(pda, pds, dwEffect, &dwEffect);
     1135      }
     1136
     1137           IDataObject_Release(pda);
     1138         }
     1139       }
     1140       break;
     1141
     1142     case LVN_BEGINLABELEDITA:
     1143     case LVN_ENDLABELEDITA:
     1144        FIXME("labeledit\n");
     1145        break;
     1146
     1147     default:
     1148//     TRACE("-- %p WM_COMMAND %s unhandled\n", This, SPY_GetMsgName(lpnmh->code));
     1149       break;;
     1150   }
     1151   return 0;
    10101152}
    10111153
     
    10161158static LRESULT CALLBACK ShellView_WndProc(HWND hWnd, UINT uMessage, WPARAM wParam, LPARAM lParam)
    10171159{
    1018         IShellViewImpl * pThis = (IShellViewImpl*)GetWindowLongA(hWnd, GWL_USERDATA);
    1019         LPCREATESTRUCTA lpcs;
    1020 
    1021         TRACE("(hwnd=%x msg=%x wparm=%x lparm=%lx)\n",hWnd, uMessage, wParam, lParam);
    1022 
    1023         switch (uMessage)
    1024         {
    1025           case WM_NCCREATE:
    1026             lpcs = (LPCREATESTRUCTA)lParam;
    1027             pThis = (IShellViewImpl*)(lpcs->lpCreateParams);
    1028             SetWindowLongA(hWnd, GWL_USERDATA, (LONG)pThis);
    1029             pThis->hWnd = hWnd;        /*set the window handle*/
    1030             break;
    1031 
    1032           case WM_SIZE:         return ShellView_OnSize(pThis,LOWORD(lParam), HIWORD(lParam));
    1033           case WM_SETFOCUS:     return ShellView_OnSetFocus(pThis);
    1034           case WM_KILLFOCUS:    return ShellView_OnKillFocus(pThis);
    1035           case WM_CREATE:       return ShellView_OnCreate(pThis);
    1036           case WM_ACTIVATE:     return ShellView_OnActivate(pThis, SVUIA_ACTIVATE_FOCUS);
    1037           case WM_NOTIFY:       return ShellView_OnNotify(pThis,(UINT)wParam, (LPNMHDR)lParam);
    1038           case WM_COMMAND:      return ShellView_OnCommand(pThis,
    1039                                         GET_WM_COMMAND_ID(wParam, lParam),
    1040                                         GET_WM_COMMAND_CMD(wParam, lParam),
    1041                                         GET_WM_COMMAND_HWND(wParam, lParam));
    1042 
    1043           case WM_CONTEXTMENU:  ShellView_DoContextMenu(pThis, LOWORD(lParam), HIWORD(lParam), FALSE);
    1044                                 return 0;
    1045 
    1046           case WM_SHOWWINDOW:   UpdateWindow(pThis->hWndList);
    1047                                 break;
    1048 
    1049           case WM_GETDLGCODE:   return SendMessageA(pThis->hWndList,uMessage,0,0);
    1050 
    1051           case WM_DESTROY:      pRevokeDragDrop(pThis->hWnd);
    1052                                 break;
    1053         }
    1054 
    1055         return DefWindowProcA (hWnd, uMessage, wParam, lParam);
     1160   IShellViewImpl * pThis = (IShellViewImpl*)GetWindowLongA(hWnd, GWL_USERDATA);
     1161   LPCREATESTRUCTA lpcs;
     1162
     1163   TRACE("(hwnd=%x msg=%x wparm=%x lparm=%lx)\n",hWnd, uMessage, wParam, lParam);
     1164
     1165   switch (uMessage)
     1166   {
     1167     case WM_NCCREATE:
     1168       lpcs = (LPCREATESTRUCTA)lParam;
     1169       pThis = (IShellViewImpl*)(lpcs->lpCreateParams);
     1170       SetWindowLongA(hWnd, GWL_USERDATA, (LONG)pThis);
     1171       pThis->hWnd = hWnd;        /*set the window handle*/
     1172       break;
     1173
     1174     case WM_SIZE:                          return ShellView_OnSize(pThis,LOWORD(lParam), HIWORD(lParam));
     1175     case WM_SETFOCUS:                   return ShellView_OnSetFocus(pThis);
     1176     case WM_KILLFOCUS:                  return ShellView_OnKillFocus(pThis);
     1177     case WM_CREATE:                     return ShellView_OnCreate(pThis);
     1178     case WM_ACTIVATE:                   return ShellView_OnActivate(pThis, SVUIA_ACTIVATE_FOCUS);
     1179     case WM_NOTIFY:                     return ShellView_OnNotify(pThis,(UINT)wParam, (LPNMHDR)lParam);
     1180     case WM_COMMAND:      return ShellView_OnCommand(pThis,
     1181               GET_WM_COMMAND_ID(wParam, lParam),
     1182               GET_WM_COMMAND_CMD(wParam, lParam),
     1183               GET_WM_COMMAND_HWND(wParam, lParam));
     1184
     1185     case WM_CONTEXTMENU:  ShellView_DoContextMenu(pThis, LOWORD(lParam), HIWORD(lParam), FALSE);
     1186                           return 0;
     1187
     1188     case WM_SHOWWINDOW:                 UpdateWindow(pThis->hWndList);
     1189            break;
     1190
     1191     case WM_GETDLGCODE:                 return SendMessageA(pThis->hWndList,uMessage,0,0);
     1192
     1193     case WM_DESTROY:                    pRevokeDragDrop(pThis->hWnd);
     1194                           break;
     1195   }
     1196
     1197   return DefWindowProcA (hWnd, uMessage, wParam, lParam);
    10561198}
    10571199/**********************************************************
     
    10661208static HRESULT WINAPI IShellView_fnQueryInterface(IShellView * iface,REFIID riid, LPVOID *ppvObj)
    10671209{
    1068         ICOM_THIS(IShellViewImpl, iface);
    1069 
    1070         char    xriid[50];
    1071         WINE_StringFromCLSID((LPCLSID)riid,xriid);
    1072         TRACE("(%p)->(\n\tIID:\t%s,%p)\n",This,xriid,ppvObj);
    1073 
    1074         *ppvObj = NULL;
    1075 
    1076         if(IsEqualIID(riid, &IID_IUnknown))
    1077         {
    1078           *ppvObj = This;
    1079         }
    1080         else if(IsEqualIID(riid, &IID_IShellView))
    1081         {
    1082           *ppvObj = (IShellView*)This;
    1083         }
    1084         else if(IsEqualIID(riid, &IID_IOleCommandTarget))
    1085         {
    1086           *ppvObj = (IOleCommandTarget*)&(This->lpvtblOleCommandTarget);
    1087         }
    1088         else if(IsEqualIID(riid, &IID_IDropTarget))
    1089         {
    1090           *ppvObj = (IDropTarget*)&(This->lpvtblDropTarget);
    1091         }
    1092         else if(IsEqualIID(riid, &IID_IDropSource))
    1093         {
    1094           *ppvObj = (IDropSource*)&(This->lpvtblDropSource);
    1095         }
    1096         else if(IsEqualIID(riid, &IID_IViewObject))
    1097         {
    1098           *ppvObj = (IViewObject*)&(This->lpvtblViewObject);
    1099         }
    1100 
    1101         if(*ppvObj)
    1102         {
    1103           IUnknown_AddRef( (IUnknown*)*ppvObj );
    1104           TRACE("-- Interface: (%p)->(%p)\n",ppvObj,*ppvObj);
    1105           return S_OK;
    1106         }
    1107         TRACE("-- Interface: E_NOINTERFACE\n");
    1108         return E_NOINTERFACE;
     1210   ICOM_THIS(IShellViewImpl, iface);
     1211
     1212   char    xriid[50];
     1213   WINE_StringFromCLSID((LPCLSID)riid,xriid);
     1214   TRACE("(%p)->(\n\tIID:\t%s,%p)\n",This,xriid,ppvObj);
     1215
     1216   *ppvObj = NULL;
     1217
     1218   if(IsEqualIID(riid, &IID_IUnknown))
     1219   {
     1220     *ppvObj = This;
     1221   }
     1222   else if(IsEqualIID(riid, &IID_IShellView))
     1223   {
     1224     *ppvObj = (IShellView*)This;
     1225   }
     1226   else if(IsEqualIID(riid, &IID_IOleCommandTarget))
     1227   {
     1228     *ppvObj = (IOleCommandTarget*)&(This->lpvtblOleCommandTarget);
     1229   }
     1230   else if(IsEqualIID(riid, &IID_IDropTarget))
     1231   {
     1232     *ppvObj = (IDropTarget*)&(This->lpvtblDropTarget);
     1233   }
     1234   else if(IsEqualIID(riid, &IID_IDropSource))
     1235   {
     1236     *ppvObj = (IDropSource*)&(This->lpvtblDropSource);
     1237   }
     1238   else if(IsEqualIID(riid, &IID_IViewObject))
     1239   {
     1240     *ppvObj = (IViewObject*)&(This->lpvtblViewObject);
     1241   }
     1242
     1243   if(*ppvObj)
     1244   {
     1245     IUnknown_AddRef( (IUnknown*)*ppvObj );
     1246     TRACE("-- Interface: (%p)->(%p)\n",ppvObj,*ppvObj);
     1247     return S_OK;
     1248   }
     1249   TRACE("-- Interface: E_NOINTERFACE\n");
     1250   return E_NOINTERFACE;
    11091251}
    11101252
     
    11141256static ULONG WINAPI IShellView_fnAddRef(IShellView * iface)
    11151257{
    1116         ICOM_THIS(IShellViewImpl, iface);
    1117 
    1118         TRACE("(%p)->(count=%lu)\n",This,This->ref);
    1119 
    1120         shell32_ObjCount++;
    1121         return ++(This->ref);
     1258   ICOM_THIS(IShellViewImpl, iface);
     1259
     1260   TRACE("(%p)->(count=%lu)\n",This,This->ref);
     1261
     1262   shell32_ObjCount++;
     1263   return ++(This->ref);
    11221264}
    11231265/**********************************************************
     
    11261268static ULONG WINAPI IShellView_fnRelease(IShellView * iface)
    11271269{
    1128         ICOM_THIS(IShellViewImpl, iface);
    1129 
    1130         TRACE("(%p)->()\n",This);
    1131 
    1132         shell32_ObjCount--;
    1133 
    1134         if (!--(This->ref))
    1135         {
    1136           TRACE(" destroying IShellView(%p)\n",This);
    1137 
    1138           if(This->pSFParent)
    1139             IShellFolder_Release(This->pSFParent);
    1140 
    1141           if (This->apidl)
    1142             SHFree(This->apidl);
    1143 
    1144           if (This->pCommDlgBrowser)
    1145             ICommDlgBrowser_Release(This->pCommDlgBrowser);
    1146 
    1147           HeapFree(GetProcessHeap(),0,This);
    1148           return 0;
    1149         }
    1150         return This->ref;
     1270   ICOM_THIS(IShellViewImpl, iface);
     1271
     1272   TRACE("(%p)->()\n",This);
     1273
     1274   shell32_ObjCount--;
     1275
     1276   if (!--(This->ref))
     1277   {
     1278     TRACE(" destroying IShellView(%p)\n",This);
     1279
     1280     if(This->pSFParent)
     1281       IShellFolder_Release(This->pSFParent);
     1282
     1283     if (This->apidl)
     1284       SHFree(This->apidl);
     1285
     1286     if (This->pCommDlgBrowser)
     1287       ICommDlgBrowser_Release(This->pCommDlgBrowser);
     1288
     1289     HeapFree(GetProcessHeap(),0,This);
     1290     return 0;
     1291   }
     1292   return This->ref;
    11511293}
    11521294
     
    11561298static HRESULT WINAPI IShellView_fnGetWindow(IShellView * iface,HWND * phWnd)
    11571299{
    1158         ICOM_THIS(IShellViewImpl, iface);
    1159 
    1160         TRACE("(%p)\n",This);
    1161 
    1162         *phWnd = This->hWnd;
    1163 
    1164         return S_OK;
     1300   ICOM_THIS(IShellViewImpl, iface);
     1301
     1302   TRACE("(%p)\n",This);
     1303
     1304   *phWnd = This->hWnd;
     1305
     1306   return S_OK;
    11651307}
    11661308
    11671309static HRESULT WINAPI IShellView_fnContextSensitiveHelp(IShellView * iface,BOOL fEnterMode)
    11681310{
    1169         ICOM_THIS(IShellViewImpl, iface);
    1170 
    1171         FIXME("(%p) stub\n",This);
    1172 
    1173         return E_NOTIMPL;
     1311   ICOM_THIS(IShellViewImpl, iface);
     1312
     1313   FIXME("(%p) stub\n",This);
     1314
     1315   return E_NOTIMPL;
    11741316}
    11751317
     
    11821324static HRESULT WINAPI IShellView_fnTranslateAccelerator(IShellView * iface,LPMSG lpmsg)
    11831325{
    1184         ICOM_THIS(IShellViewImpl, iface);
    1185 
    1186         FIXME("(%p)->(%p: hwnd=%x msg=%x lp=%lx wp=%x) stub\n",This,lpmsg, lpmsg->hwnd, lpmsg->message, lpmsg->lParam, lpmsg->wParam);
    1187 
    1188        
    1189         switch (lpmsg->message)
    1190         { case WM_KEYDOWN:      TRACE("-- key=0x04%x",lpmsg->wParam) ;
    1191         }
    1192         return NOERROR;
     1326   ICOM_THIS(IShellViewImpl, iface);
     1327
     1328   FIXME("(%p)->(%p: hwnd=%x msg=%x lp=%lx wp=%x) stub\n",This,lpmsg, lpmsg->hwnd, lpmsg->message, lpmsg->lParam, lpmsg->wParam);
     1329
     1330
     1331   switch (lpmsg->message)
     1332   { case WM_KEYDOWN:                    TRACE("-- key=0x04%x",lpmsg->wParam) ;
     1333   }
     1334   return NOERROR;
    11931335}
    11941336
    11951337static HRESULT WINAPI IShellView_fnEnableModeless(IShellView * iface,BOOL fEnable)
    11961338{
    1197         ICOM_THIS(IShellViewImpl, iface);
    1198 
    1199         FIXME("(%p) stub\n",This);
    1200 
    1201         return E_NOTIMPL;
     1339   ICOM_THIS(IShellViewImpl, iface);
     1340
     1341   FIXME("(%p) stub\n",This);
     1342
     1343   return E_NOTIMPL;
    12021344}
    12031345
    12041346static HRESULT WINAPI IShellView_fnUIActivate(IShellView * iface,UINT uState)
    12051347{
    1206         ICOM_THIS(IShellViewImpl, iface);
    1207 
    1208         CHAR    szName[MAX_PATH];
    1209         LRESULT lResult;
    1210         int     nPartArray[1] = {-1};
    1211 
    1212         TRACE("(%p)->(state=%x) stub\n",This, uState);
    1213 
    1214         /*don't do anything if the state isn't really changing*/
    1215         if(This->uState == uState)
    1216         {
    1217           return S_OK;
    1218         }
    1219 
    1220         /*OnActivate handles the menu merging and internal state*/
    1221         ShellView_OnActivate(This, uState);
    1222 
    1223         /*only do This if we are active*/
    1224         if(uState != SVUIA_DEACTIVATE)
    1225         {
    1226 
    1227           IShellFolder_GetFolderPath( This->pSFParent, szName, sizeof(szName) );
    1228 
    1229           /* set the number of parts */
    1230           IShellBrowser_SendControlMsg(This->pShellBrowser, FCW_STATUS, SB_SETPARTS, 1,
    1231                                                         (LPARAM)nPartArray, &lResult);
    1232 
    1233           /* set the text for the parts */
    1234           IShellBrowser_SendControlMsg(This->pShellBrowser, FCW_STATUS, SB_SETTEXTA,
    1235                                                         0, (LPARAM)szName, &lResult);
    1236         }
    1237 
    1238         return S_OK;
     1348   ICOM_THIS(IShellViewImpl, iface);
     1349
     1350   CHAR  szName[MAX_PATH];
     1351   LRESULT  lResult;
     1352   int   nPartArray[1] = {-1};
     1353
     1354   TRACE("(%p)->(state=%x) stub\n",This, uState);
     1355
     1356   /*don't do anything if the state isn't really changing*/
     1357   if(This->uState == uState)
     1358   {
     1359     return S_OK;
     1360   }
     1361
     1362   /*OnActivate handles the menu merging and internal state*/
     1363   ShellView_OnActivate(This, uState);
     1364
     1365   /*only do This if we are active*/
     1366   if(uState != SVUIA_DEACTIVATE)
     1367   {
     1368
     1369     IShellFolder_GetFolderPath( This->pSFParent, szName, sizeof(szName) );
     1370
     1371     /* set the number of parts */
     1372     IShellBrowser_SendControlMsg(This->pShellBrowser, FCW_STATUS, SB_SETPARTS, 1,
     1373                                         (LPARAM)nPartArray, &lResult);
     1374
     1375     /* set the text for the parts */
     1376     IShellBrowser_SendControlMsg(This->pShellBrowser, FCW_STATUS, SB_SETTEXTA,
     1377                                         0, (LPARAM)szName, &lResult);
     1378   }
     1379
     1380   return S_OK;
    12391381}
    12401382
    12411383static HRESULT WINAPI IShellView_fnRefresh(IShellView * iface)
    12421384{
    1243         ICOM_THIS(IShellViewImpl, iface);
    1244 
    1245         TRACE("(%p)\n",This);
    1246 
    1247         ListView_DeleteAllItems(This->hWndList);
    1248         ShellView_FillList(This);
    1249 
    1250         return S_OK;
     1385   ICOM_THIS(IShellViewImpl, iface);
     1386
     1387   TRACE("(%p)\n",This);
     1388
     1389   ListView_DeleteAllItems(This->hWndList);
     1390   ShellView_FillList(This);
     1391
     1392   return S_OK;
    12511393}
    12521394
    12531395static HRESULT WINAPI IShellView_fnCreateViewWindow(
    1254         IShellView * iface,
    1255         IShellView *lpPrevView,
    1256         LPCFOLDERSETTINGS lpfs,
    1257         IShellBrowser * psb,
    1258         RECT * prcView,
    1259         HWND  *phWnd)
    1260 {
    1261         ICOM_THIS(IShellViewImpl, iface);
    1262 
    1263         WNDCLASSA wc;
    1264         *phWnd = 0;
    1265 
    1266        
    1267         TRACE("(%p)->(shlview=%p set=%p shlbrs=%p rec=%p hwnd=%p) incomplete\n",This, lpPrevView,lpfs, psb, prcView, phWnd);
    1268         TRACE("-- vmode=%x flags=%x left=%i top=%i right=%i bottom=%i\n",lpfs->ViewMode, lpfs->fFlags ,prcView->left,prcView->top, prcView->right, prcView->bottom);
    1269 
    1270         /*set up the member variables*/
    1271         This->pShellBrowser = psb;
    1272         This->FolderSettings = *lpfs;
    1273 
    1274         /*get our parent window*/
    1275         IShellBrowser_AddRef(This->pShellBrowser);
    1276         IShellBrowser_GetWindow(This->pShellBrowser, &(This->hWndParent));
    1277 
    1278         /* try to get the ICommDlgBrowserInterface, adds a reference !!! */
    1279         This->pCommDlgBrowser=NULL;
    1280         if ( SUCCEEDED (IShellBrowser_QueryInterface( This->pShellBrowser,
    1281                         (REFIID)&IID_ICommDlgBrowser, (LPVOID*) &This->pCommDlgBrowser)))
    1282         {
    1283           TRACE("-- CommDlgBrowser\n");
    1284         }
    1285 
    1286         /*if our window class has not been registered, then do so*/
     1396   IShellView * iface,
     1397   IShellView *lpPrevView,
     1398   LPCFOLDERSETTINGS lpfs,
     1399   IShellBrowser * psb,
     1400   RECT * prcView,
     1401   HWND  *phWnd)
     1402{
     1403   ICOM_THIS(IShellViewImpl, iface);
     1404
     1405   WNDCLASSA wc;
     1406   *phWnd = 0;
     1407
     1408
     1409   TRACE("(%p)->(shlview=%p set=%p shlbrs=%p rec=%p hwnd=%p) incomplete\n",This, lpPrevView,lpfs, psb, prcView, phWnd);
     1410   TRACE("-- vmode=%x flags=%x left=%i top=%i right=%i bottom=%i\n",lpfs->ViewMode, lpfs->fFlags ,prcView->left,prcView->top, prcView->right, prcView->bottom);
     1411
     1412   /*set up the member variables*/
     1413   This->pShellBrowser = psb;
     1414   This->FolderSettings = *lpfs;
     1415
     1416   /*get our parent window*/
     1417   IShellBrowser_AddRef(This->pShellBrowser);
     1418   IShellBrowser_GetWindow(This->pShellBrowser, &(This->hWndParent));
     1419
     1420   /* try to get the ICommDlgBrowserInterface, adds a reference !!! */
     1421   This->pCommDlgBrowser=NULL;
     1422   if ( SUCCEEDED (IShellBrowser_QueryInterface( This->pShellBrowser,
     1423         (REFIID)&IID_ICommDlgBrowser, (LPVOID*) &This->pCommDlgBrowser)))
     1424   {
     1425     TRACE("-- CommDlgBrowser\n");
     1426   }
     1427
     1428   /*if our window class has not been registered, then do so*/
    12871429//SvL: Don't check this now
    1288 //      if(!GetClassInfoA(shell32_hInstance, SV_CLASS_NAME, &wc))
    1289 //      {
    1290           ZeroMemory(&wc, sizeof(wc));
    1291           wc.style              = CS_HREDRAW | CS_VREDRAW;
    1292           wc.lpfnWndProc        = (WNDPROC) ShellView_WndProc;
    1293           wc.cbClsExtra         = 0;
    1294           wc.cbWndExtra         = 0;
    1295           wc.hInstance          = shell32_hInstance;
    1296           wc.hIcon              = 0;
    1297           wc.hCursor            = LoadCursorA (0, IDC_ARROWA);
    1298           wc.hbrBackground      = (HBRUSH) (COLOR_WINDOW + 1);
    1299           wc.lpszMenuName       = NULL;
    1300           wc.lpszClassName      = SV_CLASS_NAME;
    1301 
    1302           if(!RegisterClassA(&wc))
    1303             return E_FAIL;
    1304 //      }
    1305 
    1306         *phWnd = CreateWindowExA(0,
    1307                                 SV_CLASS_NAME,
    1308                                 NULL,
    1309                                 WS_CHILD | WS_VISIBLE | WS_CLIPSIBLINGS | WS_TABSTOP,
    1310                                 prcView->left,
    1311                                 prcView->top,
    1312                                 prcView->right - prcView->left,
    1313                                 prcView->bottom - prcView->top,
    1314                                 This->hWndParent,
    1315                                 0,
    1316                                 shell32_hInstance,
    1317                                 (LPVOID)This);
    1318 
    1319         CheckToolbar(This);
    1320        
    1321         if(!*phWnd)
    1322           return E_FAIL;
    1323 
    1324         return S_OK;
     1430// if(!GetClassInfoA(shell32_hInstance, SV_CLASS_NAME, &wc))
     1431// {
     1432     ZeroMemory(&wc, sizeof(wc));
     1433     wc.style     = CS_HREDRAW | CS_VREDRAW;
     1434     wc.lpfnWndProc                      = (WNDPROC) ShellView_WndProc;
     1435     wc.cbClsExtra                          = 0;
     1436     wc.cbWndExtra                          = 0;
     1437     wc.hInstance                        = shell32_hInstance;
     1438     wc.hIcon     = 0;
     1439     wc.hCursor                          = LoadCursorA (0, IDC_ARROWA);
     1440     wc.hbrBackground                    = (HBRUSH) (COLOR_WINDOW + 1);
     1441     wc.lpszMenuName                     = NULL;
     1442     wc.lpszClassName                    = SV_CLASS_NAME;
     1443
     1444     if(!RegisterClassA(&wc))
     1445       return E_FAIL;
     1446// }
     1447
     1448   *phWnd = CreateWindowExA(0,
     1449            SV_CLASS_NAME,
     1450            NULL,
     1451            WS_CHILD | WS_VISIBLE | WS_CLIPSIBLINGS | WS_TABSTOP,
     1452            prcView->left,
     1453            prcView->top,
     1454            prcView->right - prcView->left,
     1455            prcView->bottom - prcView->top,
     1456            This->hWndParent,
     1457            0,
     1458            shell32_hInstance,
     1459            (LPVOID)This);
     1460
     1461   CheckToolbar(This);
     1462
     1463   if(!*phWnd)
     1464     return E_FAIL;
     1465
     1466   return S_OK;
    13251467}
    13261468
    13271469static HRESULT WINAPI IShellView_fnDestroyViewWindow(IShellView * iface)
    13281470{
    1329         ICOM_THIS(IShellViewImpl, iface);
    1330 
    1331         TRACE("(%p)\n",This);
    1332 
    1333         /*Make absolutely sure all our UI is cleaned up.*/
    1334         IShellView_UIActivate((IShellView*)This, SVUIA_DEACTIVATE);
    1335 
    1336         if(This->hMenu)
    1337         {
    1338           DestroyMenu(This->hMenu);
    1339         }
    1340 
    1341         DestroyWindow(This->hWnd);
    1342         IShellBrowser_Release(This->pShellBrowser);
    1343 
    1344         return S_OK;
     1471   ICOM_THIS(IShellViewImpl, iface);
     1472
     1473   TRACE("(%p)\n",This);
     1474
     1475   /*Make absolutely sure all our UI is cleaned up.*/
     1476   IShellView_UIActivate((IShellView*)This, SVUIA_DEACTIVATE);
     1477
     1478   if(This->hMenu)
     1479   {
     1480     DestroyMenu(This->hMenu);
     1481   }
     1482
     1483   DestroyWindow(This->hWnd);
     1484   IShellBrowser_Release(This->pShellBrowser);
     1485
     1486   return S_OK;
    13451487}
    13461488
    13471489static HRESULT WINAPI IShellView_fnGetCurrentInfo(IShellView * iface, LPFOLDERSETTINGS lpfs)
    13481490{
    1349         ICOM_THIS(IShellViewImpl, iface);
    1350 
    1351         TRACE("(%p)->(%p) vmode=%x flags=%x\n",This, lpfs,
    1352                 This->FolderSettings.ViewMode, This->FolderSettings.fFlags);
    1353 
    1354         if (!lpfs) return E_INVALIDARG;
    1355 
    1356         *lpfs = This->FolderSettings;
    1357         return NOERROR;
     1491   ICOM_THIS(IShellViewImpl, iface);
     1492
     1493   TRACE("(%p)->(%p) vmode=%x flags=%x\n",This, lpfs,
     1494      This->FolderSettings.ViewMode, This->FolderSettings.fFlags);
     1495
     1496   if (!lpfs) return E_INVALIDARG;
     1497
     1498   *lpfs = This->FolderSettings;
     1499   return NOERROR;
    13581500}
    13591501
    13601502static HRESULT WINAPI IShellView_fnAddPropertySheetPages(IShellView * iface, DWORD dwReserved,LPFNADDPROPSHEETPAGE lpfn, LPARAM lparam)
    13611503{
    1362         ICOM_THIS(IShellViewImpl, iface);
    1363 
    1364         FIXME("(%p) stub\n",This);
    1365 
    1366         return E_NOTIMPL;
     1504   ICOM_THIS(IShellViewImpl, iface);
     1505
     1506   FIXME("(%p) stub\n",This);
     1507
     1508   return E_NOTIMPL;
    13671509}
    13681510
    13691511static HRESULT WINAPI IShellView_fnSaveViewState(IShellView * iface)
    13701512{
    1371         ICOM_THIS(IShellViewImpl, iface);
    1372 
    1373         FIXME("(%p) stub\n",This);
    1374 
    1375         return S_OK;
     1513   ICOM_THIS(IShellViewImpl, iface);
     1514
     1515   FIXME("(%p) stub\n",This);
     1516
     1517   return S_OK;
    13761518}
    13771519
    13781520static HRESULT WINAPI IShellView_fnSelectItem(IShellView * iface, LPCITEMIDLIST pidlItem, UINT uFlags)
    1379 {       ICOM_THIS(IShellViewImpl, iface);
    1380        
    1381         FIXME("(%p)->(pidl=%p, 0x%08x) stub\n",This, pidlItem, uFlags);
    1382 
    1383         return E_NOTIMPL;
     1521{  ICOM_THIS(IShellViewImpl, iface);
     1522
     1523   FIXME("(%p)->(pidl=%p, 0x%08x) stub\n",This, pidlItem, uFlags);
     1524
     1525   return E_NOTIMPL;
    13841526}
    13851527
    13861528static HRESULT WINAPI IShellView_fnGetItemObject(IShellView * iface, UINT uItem, REFIID riid, LPVOID *ppvOut)
    13871529{
    1388         ICOM_THIS(IShellViewImpl, iface);
    1389 
    1390         char    xriid[50];
    1391        
    1392         WINE_StringFromCLSID((LPCLSID)riid,xriid);
    1393         TRACE("(%p)->(uItem=0x%08x,\n\tIID=%s, ppv=%p)\n",This, uItem, xriid, ppvOut);
    1394 
    1395         *ppvOut = NULL;
    1396 
    1397         switch(uItem)
    1398         {
    1399           case SVGIO_BACKGROUND:
    1400             *ppvOut = ISvBgCm_Constructor();
    1401             break;
    1402 
    1403           case SVGIO_SELECTION:
    1404             ShellView_GetSelections(This);
    1405             IShellFolder_GetUIObjectOf(This->pSFParent, This->hWnd, This->cidl, This->apidl, riid, 0, ppvOut);
    1406             break;
    1407         }
    1408         TRACE("-- (%p)->(interface=%p)\n",This, *ppvOut);
    1409 
    1410         if(!*ppvOut) return E_OUTOFMEMORY;
    1411 
    1412         return S_OK;
     1530   ICOM_THIS(IShellViewImpl, iface);
     1531
     1532   char    xriid[50];
     1533
     1534   WINE_StringFromCLSID((LPCLSID)riid,xriid);
     1535   TRACE("(%p)->(uItem=0x%08x,\n\tIID=%s, ppv=%p)\n",This, uItem, xriid, ppvOut);
     1536
     1537   *ppvOut = NULL;
     1538
     1539   switch(uItem)
     1540   {
     1541     case SVGIO_BACKGROUND:
     1542       *ppvOut = ISvBgCm_Constructor();
     1543       break;
     1544
     1545     case SVGIO_SELECTION:
     1546       ShellView_GetSelections(This);
     1547       IShellFolder_GetUIObjectOf(This->pSFParent, This->hWnd, This->cidl, This->apidl, riid, 0, ppvOut);
     1548       break;
     1549   }
     1550   TRACE("-- (%p)->(interface=%p)\n",This, *ppvOut);
     1551
     1552   if(!*ppvOut) return E_OUTOFMEMORY;
     1553
     1554   return S_OK;
    14131555}
    14141556
    14151557struct ICOM_VTABLE(IShellView) svvt =
    1416 {       
    1417         ICOM_MSVTABLE_COMPAT_DummyRTTIVALUE
    1418         IShellView_fnQueryInterface,
    1419         IShellView_fnAddRef,
    1420         IShellView_fnRelease,
    1421         IShellView_fnGetWindow,
    1422         IShellView_fnContextSensitiveHelp,
    1423         IShellView_fnTranslateAccelerator,
    1424         IShellView_fnEnableModeless,
    1425         IShellView_fnUIActivate,
    1426         IShellView_fnRefresh,
    1427         IShellView_fnCreateViewWindow,
    1428         IShellView_fnDestroyViewWindow,
    1429         IShellView_fnGetCurrentInfo,
    1430         IShellView_fnAddPropertySheetPages,
    1431         IShellView_fnSaveViewState,
    1432         IShellView_fnSelectItem,
    1433         IShellView_fnGetItemObject
     1558{
     1559   ICOM_MSVTABLE_COMPAT_DummyRTTIVALUE
     1560   IShellView_fnQueryInterface,
     1561   IShellView_fnAddRef,
     1562   IShellView_fnRelease,
     1563   IShellView_fnGetWindow,
     1564   IShellView_fnContextSensitiveHelp,
     1565   IShellView_fnTranslateAccelerator,
     1566   IShellView_fnEnableModeless,
     1567   IShellView_fnUIActivate,
     1568   IShellView_fnRefresh,
     1569   IShellView_fnCreateViewWindow,
     1570   IShellView_fnDestroyViewWindow,
     1571   IShellView_fnGetCurrentInfo,
     1572   IShellView_fnAddPropertySheetPages,
     1573   IShellView_fnSaveViewState,
     1574   IShellView_fnSelectItem,
     1575   IShellView_fnGetItemObject
    14341576};
    14351577
     
    14391581 */
    14401582static HRESULT WINAPI ISVOleCmdTarget_QueryInterface(
    1441         IOleCommandTarget *     iface,
    1442         REFIID                  iid,
    1443         LPVOID*                 ppvObj)
    1444 {
    1445         _ICOM_THIS_From_IOleCommandTarget(IShellViewImpl, iface);
    1446 
    1447         return IShellFolder_QueryInterface((IShellFolder*)This, iid, ppvObj);
     1583   IOleCommandTarget *                   iface,
     1584   REFIID         iid,
     1585   LPVOID*        ppvObj)
     1586{
     1587   _ICOM_THIS_From_IOleCommandTarget(IShellViewImpl, iface);
     1588
     1589   return IShellFolder_QueryInterface((IShellFolder*)This, iid, ppvObj);
    14481590}
    14491591
     
    14521594 */
    14531595static ULONG WINAPI ISVOleCmdTarget_AddRef(
    1454         IOleCommandTarget *     iface)
    1455 {
    1456         _ICOM_THIS_From_IOleCommandTarget(IShellFolder, iface);
    1457 
    1458         return IShellFolder_AddRef((IShellFolder*)This);
     1596   IOleCommandTarget *                   iface)
     1597{
     1598   _ICOM_THIS_From_IOleCommandTarget(IShellFolder, iface);
     1599
     1600   return IShellFolder_AddRef((IShellFolder*)This);
    14591601}
    14601602
     
    14631605 */
    14641606static ULONG WINAPI ISVOleCmdTarget_Release(
    1465         IOleCommandTarget *     iface)
    1466 {
    1467         _ICOM_THIS_From_IOleCommandTarget(IShellViewImpl, iface);
    1468 
    1469         return IShellFolder_Release((IShellFolder*)This);
     1607   IOleCommandTarget *                   iface)
     1608{
     1609   _ICOM_THIS_From_IOleCommandTarget(IShellViewImpl, iface);
     1610
     1611   return IShellFolder_Release((IShellFolder*)This);
    14701612}
    14711613
     
    14741616 */
    14751617static HRESULT WINAPI ISVOleCmdTarget_QueryStatus(
    1476         IOleCommandTarget *iface,
    1477         const GUID* pguidCmdGroup,
    1478         ULONG cCmds,
    1479         OLECMD * prgCmds,
    1480         OLECMDTEXT* pCmdText)
    1481 {
    1482         char    xguid[50];
    1483 
    1484         _ICOM_THIS_From_IOleCommandTarget(IShellViewImpl, iface);
    1485 
    1486         WINE_StringFromCLSID((LPCLSID)pguidCmdGroup,xguid);
    1487 
    1488         FIXME("(%p)->(%p(%s) 0x%08lx %p %p\n", This, pguidCmdGroup, xguid, cCmds, prgCmds, pCmdText);
    1489         return E_NOTIMPL;
     1618   IOleCommandTarget *iface,
     1619   const GUID* pguidCmdGroup,
     1620   ULONG cCmds,
     1621   OLECMD * prgCmds,
     1622   OLECMDTEXT* pCmdText)
     1623{
     1624   char    xguid[50];
     1625
     1626   _ICOM_THIS_From_IOleCommandTarget(IShellViewImpl, iface);
     1627
     1628   WINE_StringFromCLSID((LPCLSID)pguidCmdGroup,xguid);
     1629
     1630   FIXME("(%p)->(%p(%s) 0x%08lx %p %p\n", This, pguidCmdGroup, xguid, cCmds, prgCmds, pCmdText);
     1631   return E_NOTIMPL;
    14901632}
    14911633
     
    14961638 */
    14971639static HRESULT WINAPI ISVOleCmdTarget_Exec(
    1498         IOleCommandTarget *iface,
    1499         const GUID* pguidCmdGroup,
    1500         DWORD nCmdID,
    1501         DWORD nCmdexecopt,
    1502         VARIANT* pvaIn,
    1503         VARIANT* pvaOut)
    1504 {
    1505         char    xguid[50];
    1506 
    1507         _ICOM_THIS_From_IOleCommandTarget(IShellViewImpl, iface);
    1508 
    1509         WINE_StringFromCLSID((LPCLSID)pguidCmdGroup,xguid);
    1510 
    1511         FIXME("(%p)->(\n\tTarget GUID:%s Command:0x%08lx Opt:0x%08lx %p %p)\n", This, xguid, nCmdID, nCmdexecopt, pvaIn, pvaOut);
    1512         return E_NOTIMPL;
     1640   IOleCommandTarget *iface,
     1641   const GUID* pguidCmdGroup,
     1642   DWORD nCmdID,
     1643   DWORD nCmdexecopt,
     1644   VARIANT* pvaIn,
     1645   VARIANT* pvaOut)
     1646{
     1647   char    xguid[50];
     1648
     1649   _ICOM_THIS_From_IOleCommandTarget(IShellViewImpl, iface);
     1650
     1651   WINE_StringFromCLSID((LPCLSID)pguidCmdGroup,xguid);
     1652
     1653   FIXME("(%p)->(\n\tTarget GUID:%s Command:0x%08lx Opt:0x%08lx %p %p)\n", This, xguid, nCmdID, nCmdexecopt, pvaIn, pvaOut);
     1654   return E_NOTIMPL;
    15131655}
    15141656
    15151657ICOM_VTABLE(IOleCommandTarget) ctvt =
    15161658{
    1517         ICOM_MSVTABLE_COMPAT_DummyRTTIVALUE
    1518         ISVOleCmdTarget_QueryInterface,
    1519         ISVOleCmdTarget_AddRef,
    1520         ISVOleCmdTarget_Release,
    1521         ISVOleCmdTarget_QueryStatus,
    1522         ISVOleCmdTarget_Exec
     1659   ICOM_MSVTABLE_COMPAT_DummyRTTIVALUE
     1660   ISVOleCmdTarget_QueryInterface,
     1661   ISVOleCmdTarget_AddRef,
     1662   ISVOleCmdTarget_Release,
     1663   ISVOleCmdTarget_QueryStatus,
     1664   ISVOleCmdTarget_Exec
    15231665};
    15241666
     
    15281670
    15291671static HRESULT WINAPI ISVDropTarget_QueryInterface(
    1530         IDropTarget *iface,
    1531         REFIID riid,
    1532         LPVOID *ppvObj)
    1533 {
    1534         char    xriid[50];
    1535 
    1536         _ICOM_THIS_From_IDropTarget(IShellViewImpl, iface);
    1537 
    1538         WINE_StringFromCLSID((LPCLSID)riid,xriid);
    1539 
    1540         TRACE("(%p)->(\n\tIID:\t%s,%p)\n",This,xriid,ppvObj);
    1541 
    1542         return IShellFolder_QueryInterface((IShellFolder*)This, riid, ppvObj);
     1672   IDropTarget *iface,
     1673   REFIID riid,
     1674   LPVOID *ppvObj)
     1675{
     1676   char  xriid[50];
     1677
     1678   _ICOM_THIS_From_IDropTarget(IShellViewImpl, iface);
     1679
     1680   WINE_StringFromCLSID((LPCLSID)riid,xriid);
     1681
     1682   TRACE("(%p)->(\n\tIID:\t%s,%p)\n",This,xriid,ppvObj);
     1683
     1684   return IShellFolder_QueryInterface((IShellFolder*)This, riid, ppvObj);
    15431685}
    15441686
    15451687static ULONG WINAPI ISVDropTarget_AddRef( IDropTarget *iface)
    15461688{
    1547         _ICOM_THIS_From_IDropTarget(IShellViewImpl, iface);
    1548 
    1549         TRACE("(%p)->(count=%lu)\n",This,This->ref);
    1550 
    1551         return IShellFolder_AddRef((IShellFolder*)This);
     1689   _ICOM_THIS_From_IDropTarget(IShellViewImpl, iface);
     1690
     1691   TRACE("(%p)->(count=%lu)\n",This,This->ref);
     1692
     1693   return IShellFolder_AddRef((IShellFolder*)This);
    15521694}
    15531695
    15541696static ULONG WINAPI ISVDropTarget_Release( IDropTarget *iface)
    15551697{
    1556         _ICOM_THIS_From_IDropTarget(IShellViewImpl, iface);
    1557 
    1558         TRACE("(%p)->(count=%lu)\n",This,This->ref);
    1559 
    1560         return IShellFolder_Release((IShellFolder*)This);
     1698   _ICOM_THIS_From_IDropTarget(IShellViewImpl, iface);
     1699
     1700   TRACE("(%p)->(count=%lu)\n",This,This->ref);
     1701
     1702   return IShellFolder_Release((IShellFolder*)This);
    15611703}
    15621704
    15631705static HRESULT WINAPI ISVDropTarget_DragEnter(
    1564         IDropTarget     *iface,
    1565         IDataObject     *pDataObject,
    1566         DWORD           grfKeyState,
    1567         POINTL          pt,
    1568         DWORD           *pdwEffect)
    1569 {       
    1570 
    1571         _ICOM_THIS_From_IDropTarget(IShellViewImpl, iface);
    1572 
    1573         FIXME("Stub: This=%p, DataObject=%p\n",This,pDataObject);
    1574 
    1575         return E_NOTIMPL;
     1706   IDropTarget    *iface,
     1707   IDataObject *pDataObject,
     1708   DWORD    grfKeyState,
     1709   POINTL      pt,
     1710   DWORD    *pdwEffect)
     1711{
     1712
     1713   _ICOM_THIS_From_IDropTarget(IShellViewImpl, iface);
     1714
     1715   FIXME("Stub: This=%p, DataObject=%p\n",This,pDataObject);
     1716
     1717   return E_NOTIMPL;
    15761718}
    15771719
    15781720static HRESULT WINAPI ISVDropTarget_DragOver(
    1579         IDropTarget     *iface,
    1580         DWORD           grfKeyState,
    1581         POINTL          pt,
    1582         DWORD           *pdwEffect)
    1583 {
    1584         _ICOM_THIS_From_IDropTarget(IShellViewImpl, iface);
    1585 
    1586         FIXME("Stub: This=%p\n",This);
    1587 
    1588         return E_NOTIMPL;
     1721   IDropTarget *iface,
     1722   DWORD    grfKeyState,
     1723   POINTL      pt,
     1724   DWORD    *pdwEffect)
     1725{
     1726   _ICOM_THIS_From_IDropTarget(IShellViewImpl, iface);
     1727
     1728   FIXME("Stub: This=%p\n",This);
     1729
     1730   return E_NOTIMPL;
    15891731}
    15901732
    15911733static HRESULT WINAPI ISVDropTarget_DragLeave(
    1592         IDropTarget     *iface)
    1593 {
    1594         _ICOM_THIS_From_IDropTarget(IShellViewImpl, iface);
    1595 
    1596         FIXME("Stub: This=%p\n",This);
    1597 
    1598         return E_NOTIMPL;
     1734   IDropTarget *iface)
     1735{
     1736   _ICOM_THIS_From_IDropTarget(IShellViewImpl, iface);
     1737
     1738   FIXME("Stub: This=%p\n",This);
     1739
     1740   return E_NOTIMPL;
    15991741}
    16001742
    16011743static HRESULT WINAPI ISVDropTarget_Drop(
    1602         IDropTarget     *iface,
    1603         IDataObject*    pDataObject,
    1604         DWORD           grfKeyState,
    1605         POINTL          pt,
    1606         DWORD           *pdwEffect)
    1607 {
    1608         _ICOM_THIS_From_IDropTarget(IShellViewImpl, iface);
    1609 
    1610         FIXME("Stub: This=%p\n",This);
    1611 
    1612         return E_NOTIMPL;
     1744   IDropTarget *iface,
     1745   IDataObject*   pDataObject,
     1746   DWORD    grfKeyState,
     1747   POINTL      pt,
     1748   DWORD    *pdwEffect)
     1749{
     1750   _ICOM_THIS_From_IDropTarget(IShellViewImpl, iface);
     1751
     1752   FIXME("Stub: This=%p\n",This);
     1753
     1754   return E_NOTIMPL;
    16131755}
    16141756
    16151757struct ICOM_VTABLE(IDropTarget) dtvt =
    16161758{
    1617         ICOM_MSVTABLE_COMPAT_DummyRTTIVALUE
    1618         ISVDropTarget_QueryInterface,
    1619         ISVDropTarget_AddRef,
    1620         ISVDropTarget_Release,
    1621         ISVDropTarget_DragEnter,
    1622         ISVDropTarget_DragOver,
    1623         ISVDropTarget_DragLeave,
    1624         ISVDropTarget_Drop
     1759   ICOM_MSVTABLE_COMPAT_DummyRTTIVALUE
     1760   ISVDropTarget_QueryInterface,
     1761   ISVDropTarget_AddRef,
     1762   ISVDropTarget_Release,
     1763   ISVDropTarget_DragEnter,
     1764   ISVDropTarget_DragOver,
     1765   ISVDropTarget_DragLeave,
     1766   ISVDropTarget_Drop
    16251767};
    16261768
     
    16301772
    16311773static HRESULT WINAPI ISVDropSource_QueryInterface(
    1632         IDropSource *iface,
    1633         REFIID riid,
    1634         LPVOID *ppvObj)
    1635 {
    1636         char    xriid[50];
    1637 
    1638         _ICOM_THIS_From_IDropSource(IShellViewImpl, iface);
    1639 
    1640         WINE_StringFromCLSID((LPCLSID)riid,xriid);
    1641 
    1642         TRACE("(%p)->(\n\tIID:\t%s,%p)\n",This,xriid,ppvObj);
    1643 
    1644         return IShellFolder_QueryInterface((IShellFolder*)This, riid, ppvObj);
     1774   IDropSource *iface,
     1775   REFIID riid,
     1776   LPVOID *ppvObj)
     1777{
     1778   char  xriid[50];
     1779
     1780   _ICOM_THIS_From_IDropSource(IShellViewImpl, iface);
     1781
     1782   WINE_StringFromCLSID((LPCLSID)riid,xriid);
     1783
     1784   TRACE("(%p)->(\n\tIID:\t%s,%p)\n",This,xriid,ppvObj);
     1785
     1786   return IShellFolder_QueryInterface((IShellFolder*)This, riid, ppvObj);
    16451787}
    16461788
    16471789static ULONG WINAPI ISVDropSource_AddRef( IDropSource *iface)
    16481790{
    1649         _ICOM_THIS_From_IDropSource(IShellViewImpl, iface);
    1650 
    1651         TRACE("(%p)->(count=%lu)\n",This,This->ref);
    1652 
    1653         return IShellFolder_AddRef((IShellFolder*)This);
     1791   _ICOM_THIS_From_IDropSource(IShellViewImpl, iface);
     1792
     1793   TRACE("(%p)->(count=%lu)\n",This,This->ref);
     1794
     1795   return IShellFolder_AddRef((IShellFolder*)This);
    16541796}
    16551797
    16561798static ULONG WINAPI ISVDropSource_Release( IDropSource *iface)
    16571799{
    1658         _ICOM_THIS_From_IDropSource(IShellViewImpl, iface);
    1659 
    1660         TRACE("(%p)->(count=%lu)\n",This,This->ref);
    1661 
    1662         return IShellFolder_Release((IShellFolder*)This);
     1800   _ICOM_THIS_From_IDropSource(IShellViewImpl, iface);
     1801
     1802   TRACE("(%p)->(count=%lu)\n",This,This->ref);
     1803
     1804   return IShellFolder_Release((IShellFolder*)This);
    16631805}
    16641806static HRESULT WINAPI ISVDropSource_QueryContinueDrag(
    1665         IDropSource *iface,
    1666         BOOL fEscapePressed,
    1667         DWORD grfKeyState)
    1668 {
    1669         _ICOM_THIS_From_IDropSource(IShellViewImpl, iface);
    1670         TRACE("(%p)\n",This);
    1671 
    1672         if (fEscapePressed)
    1673           return DRAGDROP_S_CANCEL;
    1674         else if (!(grfKeyState & MK_LBUTTON) && !(grfKeyState & MK_RBUTTON))
    1675           return DRAGDROP_S_DROP;
    1676         else
    1677           return NOERROR;
     1807   IDropSource *iface,
     1808   BOOL fEscapePressed,
     1809   DWORD grfKeyState)
     1810{
     1811   _ICOM_THIS_From_IDropSource(IShellViewImpl, iface);
     1812   TRACE("(%p)\n",This);
     1813
     1814   if (fEscapePressed)
     1815     return DRAGDROP_S_CANCEL;
     1816   else if (!(grfKeyState & MK_LBUTTON) && !(grfKeyState & MK_RBUTTON))
     1817     return DRAGDROP_S_DROP;
     1818   else
     1819     return NOERROR;
    16781820}
    16791821
    16801822static HRESULT WINAPI ISVDropSource_GiveFeedback(
    1681         IDropSource *iface,
    1682         DWORD dwEffect)
    1683 {
    1684         _ICOM_THIS_From_IDropSource(IShellViewImpl, iface);
    1685         TRACE("(%p)\n",This);
    1686 
    1687         return DRAGDROP_S_USEDEFAULTCURSORS;
     1823   IDropSource *iface,
     1824   DWORD dwEffect)
     1825{
     1826   _ICOM_THIS_From_IDropSource(IShellViewImpl, iface);
     1827   TRACE("(%p)\n",This);
     1828
     1829   return DRAGDROP_S_USEDEFAULTCURSORS;
    16881830}
    16891831
    16901832struct ICOM_VTABLE(IDropSource) dsvt =
    16911833{
    1692         ICOM_MSVTABLE_COMPAT_DummyRTTIVALUE
    1693         ISVDropSource_QueryInterface,
    1694         ISVDropSource_AddRef,
    1695         ISVDropSource_Release,
    1696         ISVDropSource_QueryContinueDrag,
    1697         ISVDropSource_GiveFeedback
     1834   ICOM_MSVTABLE_COMPAT_DummyRTTIVALUE
     1835   ISVDropSource_QueryInterface,
     1836   ISVDropSource_AddRef,
     1837   ISVDropSource_Release,
     1838   ISVDropSource_QueryContinueDrag,
     1839   ISVDropSource_GiveFeedback
    16981840};
    16991841/**********************************************************
     
    17021844
    17031845static HRESULT WINAPI ISVViewObject_QueryInterface(
    1704         IViewObject *iface,
    1705         REFIID riid,
    1706         LPVOID *ppvObj)
    1707 {
    1708         char    xriid[50];
    1709 
    1710         _ICOM_THIS_From_IViewObject(IShellViewImpl, iface);
    1711 
    1712         WINE_StringFromCLSID((LPCLSID)riid,xriid);
    1713 
    1714         TRACE("(%p)->(\n\tIID:\t%s,%p)\n",This,xriid,ppvObj);
    1715 
    1716         return IShellFolder_QueryInterface((IShellFolder*)This, riid, ppvObj);
     1846   IViewObject *iface,
     1847   REFIID riid,
     1848   LPVOID *ppvObj)
     1849{
     1850   char  xriid[50];
     1851
     1852   _ICOM_THIS_From_IViewObject(IShellViewImpl, iface);
     1853
     1854   WINE_StringFromCLSID((LPCLSID)riid,xriid);
     1855
     1856   TRACE("(%p)->(\n\tIID:\t%s,%p)\n",This,xriid,ppvObj);
     1857
     1858   return IShellFolder_QueryInterface((IShellFolder*)This, riid, ppvObj);
    17171859}
    17181860
    17191861static ULONG WINAPI ISVViewObject_AddRef( IViewObject *iface)
    17201862{
    1721         _ICOM_THIS_From_IViewObject(IShellViewImpl, iface);
    1722 
    1723         TRACE("(%p)->(count=%lu)\n",This,This->ref);
    1724 
    1725         return IShellFolder_AddRef((IShellFolder*)This);
     1863   _ICOM_THIS_From_IViewObject(IShellViewImpl, iface);
     1864
     1865   TRACE("(%p)->(count=%lu)\n",This,This->ref);
     1866
     1867   return IShellFolder_AddRef((IShellFolder*)This);
    17261868}
    17271869
    17281870static ULONG WINAPI ISVViewObject_Release( IViewObject *iface)
    17291871{
    1730         _ICOM_THIS_From_IViewObject(IShellViewImpl, iface);
    1731 
    1732         TRACE("(%p)->(count=%lu)\n",This,This->ref);
    1733 
    1734         return IShellFolder_Release((IShellFolder*)This);
     1872   _ICOM_THIS_From_IViewObject(IShellViewImpl, iface);
     1873
     1874   TRACE("(%p)->(count=%lu)\n",This,This->ref);
     1875
     1876   return IShellFolder_Release((IShellFolder*)This);
    17351877}
    17361878
    17371879static HRESULT WINAPI ISVViewObject_Draw(
    1738         IViewObject     *iface,
    1739         DWORD dwDrawAspect,
    1740         LONG lindex,
    1741         void* pvAspect,
    1742         DVTARGETDEVICE* ptd,
    1743         HDC hdcTargetDev,
    1744         HDC hdcDraw,
    1745         LPCRECTL lprcBounds,
    1746         LPCRECTL lprcWBounds,
    1747         IVO_ContCallback pfnContinue,
    1748         DWORD dwContinue)
    1749 {       
    1750 
    1751         _ICOM_THIS_From_IViewObject(IShellViewImpl, iface);
    1752 
    1753         FIXME("Stub: This=%p\n",This);
    1754 
    1755         return E_NOTIMPL;
     1880   IViewObject    *iface,
     1881   DWORD dwDrawAspect,
     1882   LONG lindex,
     1883   void* pvAspect,
     1884   DVTARGETDEVICE* ptd,
     1885   HDC hdcTargetDev,
     1886   HDC hdcDraw,
     1887   LPCRECTL lprcBounds,
     1888   LPCRECTL lprcWBounds,
     1889   IVO_ContCallback pfnContinue,
     1890   DWORD dwContinue)
     1891{
     1892
     1893   _ICOM_THIS_From_IViewObject(IShellViewImpl, iface);
     1894
     1895   FIXME("Stub: This=%p\n",This);
     1896
     1897   return E_NOTIMPL;
    17561898}
    17571899static HRESULT WINAPI ISVViewObject_GetColorSet(
    1758         IViewObject     *iface,
    1759         DWORD dwDrawAspect,
    1760         LONG lindex,
    1761         void *pvAspect,
    1762         DVTARGETDEVICE* ptd,
    1763         HDC hicTargetDevice,
    1764         tagLOGPALETTE** ppColorSet)
    1765 {       
    1766 
    1767         _ICOM_THIS_From_IViewObject(IShellViewImpl, iface);
    1768 
    1769         FIXME("Stub: This=%p\n",This);
    1770 
    1771         return E_NOTIMPL;
     1900   IViewObject    *iface,
     1901   DWORD dwDrawAspect,
     1902   LONG lindex,
     1903   void *pvAspect,
     1904   DVTARGETDEVICE* ptd,
     1905   HDC hicTargetDevice,
     1906   tagLOGPALETTE** ppColorSet)
     1907{
     1908
     1909   _ICOM_THIS_From_IViewObject(IShellViewImpl, iface);
     1910
     1911   FIXME("Stub: This=%p\n",This);
     1912
     1913   return E_NOTIMPL;
    17721914}
    17731915static HRESULT WINAPI ISVViewObject_Freeze(
    1774         IViewObject     *iface,
    1775         DWORD dwDrawAspect,
    1776         LONG lindex,
    1777         void* pvAspect,
    1778         DWORD* pdwFreeze)
    1779 {       
    1780 
    1781         _ICOM_THIS_From_IViewObject(IShellViewImpl, iface);
    1782 
    1783         FIXME("Stub: This=%p\n",This);
    1784 
    1785         return E_NOTIMPL;
     1916   IViewObject    *iface,
     1917   DWORD dwDrawAspect,
     1918   LONG lindex,
     1919   void* pvAspect,
     1920   DWORD* pdwFreeze)
     1921{
     1922
     1923   _ICOM_THIS_From_IViewObject(IShellViewImpl, iface);
     1924
     1925   FIXME("Stub: This=%p\n",This);
     1926
     1927   return E_NOTIMPL;
    17861928}
    17871929static HRESULT WINAPI ISVViewObject_Unfreeze(
    1788         IViewObject     *iface,
    1789         DWORD dwFreeze)
    1790 {       
    1791 
    1792         _ICOM_THIS_From_IViewObject(IShellViewImpl, iface);
    1793 
    1794         FIXME("Stub: This=%p\n",This);
    1795 
    1796         return E_NOTIMPL;
     1930   IViewObject    *iface,
     1931   DWORD dwFreeze)
     1932{
     1933
     1934   _ICOM_THIS_From_IViewObject(IShellViewImpl, iface);
     1935
     1936   FIXME("Stub: This=%p\n",This);
     1937
     1938   return E_NOTIMPL;
    17971939}
    17981940static HRESULT WINAPI ISVViewObject_SetAdvise(
    1799         IViewObject     *iface,
    1800         DWORD aspects,
    1801         DWORD advf,
    1802         IAdviseSink* pAdvSink)
    1803 {       
    1804 
    1805         _ICOM_THIS_From_IViewObject(IShellViewImpl, iface);
    1806 
    1807         FIXME("Stub: This=%p\n",This);
    1808 
    1809         return E_NOTIMPL;
     1941   IViewObject    *iface,
     1942   DWORD aspects,
     1943   DWORD advf,
     1944   IAdviseSink* pAdvSink)
     1945{
     1946
     1947   _ICOM_THIS_From_IViewObject(IShellViewImpl, iface);
     1948
     1949   FIXME("Stub: This=%p\n",This);
     1950
     1951   return E_NOTIMPL;
    18101952}
    18111953static HRESULT WINAPI ISVViewObject_GetAdvise(
    1812         IViewObject     *iface,
    1813         DWORD* pAspects,
    1814         DWORD* pAdvf,
    1815         IAdviseSink** ppAdvSink)
    1816 {       
    1817 
    1818         _ICOM_THIS_From_IViewObject(IShellViewImpl, iface);
    1819 
    1820         FIXME("Stub: This=%p\n",This);
    1821 
    1822         return E_NOTIMPL;
     1954   IViewObject    *iface,
     1955   DWORD* pAspects,
     1956   DWORD* pAdvf,
     1957   IAdviseSink** ppAdvSink)
     1958{
     1959
     1960   _ICOM_THIS_From_IViewObject(IShellViewImpl, iface);
     1961
     1962   FIXME("Stub: This=%p\n",This);
     1963
     1964   return E_NOTIMPL;
    18231965}
    18241966
     
    18261968struct ICOM_VTABLE(IViewObject) vovt =
    18271969{
    1828         ICOM_MSVTABLE_COMPAT_DummyRTTIVALUE
    1829         ISVViewObject_QueryInterface,
    1830         ISVViewObject_AddRef,
    1831         ISVViewObject_Release,
    1832         ISVViewObject_Draw,
    1833         ISVViewObject_GetColorSet,
    1834         ISVViewObject_Freeze,
    1835         ISVViewObject_Unfreeze,
    1836         ISVViewObject_SetAdvise,
    1837         ISVViewObject_GetAdvise
     1970   ICOM_MSVTABLE_COMPAT_DummyRTTIVALUE
     1971   ISVViewObject_QueryInterface,
     1972   ISVViewObject_AddRef,
     1973   ISVViewObject_Release,
     1974   ISVViewObject_Draw,
     1975   ISVViewObject_GetColorSet,
     1976   ISVViewObject_Freeze,
     1977   ISVViewObject_Unfreeze,
     1978   ISVViewObject_SetAdvise,
     1979   ISVViewObject_GetAdvise
    18381980};
    18391981
Note: See TracChangeset for help on using the changeset viewer.