Changeset 6709 for trunk/src/shell32/shlview.c
- Timestamp:
- Sep 15, 2001, 11:26:26 AM (24 years ago)
- File:
-
- 1 edited
-
trunk/src/shell32/shlview.c (modified) (46 diffs)
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/shell32/shlview.c
r6650 r6709 1 /* $Id: shlview.c,v 1.3 2001-09-05 13:46:59 bird Exp $ */2 1 /* 3 * ShellView2 * ShellView 4 3 * 5 * Copyright 1998,1999<juergen.schmied@debitel.net>4 * Copyright 1998,1999 <juergen.schmied@debitel.net> 6 5 * 7 6 * This is the view visualizing the data provied by the shellfolder. 8 * No direct access to data from pidls should be done from here. 9 * 7 * No direct access to data from pidls should be done from here. 8 * 10 9 * FIXME: The order by part of the background context menu should be 11 10 * buily according to the columns shown. … … 21 20 * 22 21 * FIXME: when the ShellView_WndProc gets a WM_NCDESTROY should we do a 23 * Release() ??? 22 * Release() ??? 24 23 */ 25 24 … … 50 49 }LISTVIEW_SORT_INFO, *LPLISTVIEW_SORT_INFO; 51 50 52 typedef struct 53 { ICOM_VFIELD(IShellView);54 DWORDref;55 ICOM_VTABLE(IOleCommandTarget)*lpvtblOleCommandTarget;56 ICOM_VTABLE(IDropTarget)*lpvtblDropTarget;57 ICOM_VTABLE(IDropSource)*lpvtblDropSource;58 ICOM_VTABLE(IViewObject)*lpvtblViewObject;59 IShellFolder*pSFParent;60 IShellFolder2*pSF2Parent;61 IShellBrowser*pShellBrowser;62 ICommDlgBrowser*pCommDlgBrowser;63 HWND hWnd;/* SHELLDLL_DefView */64 HWND hWndList;/* ListView control */65 HWNDhWndParent;66 FOLDERSETTINGSFolderSettings;67 HMENUhMenu;68 UINTuState;69 UINTcidl;70 LPITEMIDLIST*apidl;51 typedef struct 52 { ICOM_VFIELD(IShellView); 53 DWORD ref; 54 ICOM_VTABLE(IOleCommandTarget)* lpvtblOleCommandTarget; 55 ICOM_VTABLE(IDropTarget)* lpvtblDropTarget; 56 ICOM_VTABLE(IDropSource)* lpvtblDropSource; 57 ICOM_VTABLE(IViewObject)* lpvtblViewObject; 58 IShellFolder* pSFParent; 59 IShellFolder2* pSF2Parent; 60 IShellBrowser* pShellBrowser; 61 ICommDlgBrowser* pCommDlgBrowser; 62 HWND hWnd; /* SHELLDLL_DefView */ 63 HWND hWndList; /* ListView control */ 64 HWND hWndParent; 65 FOLDERSETTINGS FolderSettings; 66 HMENU hMenu; 67 UINT uState; 68 UINT cidl; 69 LPITEMIDLIST *apidl; 71 70 LISTVIEW_SORT_INFO ListViewSortInfo; 72 HANDLE hNotify;/* change notification handle */73 HANDLEhAccel;71 HANDLE hNotify; /* change notification handle */ 72 HANDLE hAccel; 74 73 } IShellViewImpl; 75 74 … … 77 76 78 77 static struct ICOM_VTABLE(IOleCommandTarget) ctvt; 79 #define _IOleCommandTarget_Offset ((int)(&(((IShellViewImpl*)0)->lpvtblOleCommandTarget))) 80 #define _ICOM_THIS_From_IOleCommandTarget(class, name) class* This = (class*)(((char*)name)-_IOleCommandTarget_Offset); 78 #define _IOleCommandTarget_Offset ((int)(&(((IShellViewImpl*)0)->lpvtblOleCommandTarget))) 79 #define _ICOM_THIS_From_IOleCommandTarget(class, name) class* This = (class*)(((char*)name)-_IOleCommandTarget_Offset); 81 80 82 81 static struct ICOM_VTABLE(IDropTarget) dtvt; 83 #define _IDropTarget_Offset ((int)(&(((IShellViewImpl*)0)->lpvtblDropTarget))) 84 #define _ICOM_THIS_From_IDropTarget(class, name) class* This = (class*)(((char*)name)-_IDropTarget_Offset); 82 #define _IDropTarget_Offset ((int)(&(((IShellViewImpl*)0)->lpvtblDropTarget))) 83 #define _ICOM_THIS_From_IDropTarget(class, name) class* This = (class*)(((char*)name)-_IDropTarget_Offset); 85 84 86 85 static struct ICOM_VTABLE(IDropSource) dsvt; 87 #define _IDropSource_Offset ((int)(&(((IShellViewImpl*)0)->lpvtblDropSource))) 88 #define _ICOM_THIS_From_IDropSource(class, name) class* This = (class*)(((char*)name)-_IDropSource_Offset); 86 #define _IDropSource_Offset ((int)(&(((IShellViewImpl*)0)->lpvtblDropSource))) 87 #define _ICOM_THIS_From_IDropSource(class, name) class* This = (class*)(((char*)name)-_IDropSource_Offset); 89 88 90 89 static struct ICOM_VTABLE(IViewObject) vovt; 91 #define _IViewObject_Offset ((int)(&(((IShellViewImpl*)0)->lpvtblViewObject))) 92 #define _ICOM_THIS_From_IViewObject(class, name) class* This = (class*)(((char*)name)-_IViewObject_Offset); 90 #define _IViewObject_Offset ((int)(&(((IShellViewImpl*)0)->lpvtblViewObject))) 91 #define _ICOM_THIS_From_IViewObject(class, name) class* This = (class*)(((char*)name)-_IViewObject_Offset); 93 92 94 93 /* ListView Header ID's */ … … 113 112 #define GET_WM_COMMAND_CMD(wp, lp) HIWORD(wp) 114 113 115 extern void WINAPI _InsertMenuItem (HMENU hmenu, UINT indexMenu, BOOL fByPosition, 116 UINT wID, UINT fType, LPSTR dwTypeData, UINT fState);114 extern void WINAPI _InsertMenuItem (HMENU hmenu, UINT indexMenu, BOOL fByPosition, 115 UINT wID, UINT fType, LPSTR dwTypeData, UINT fState); 117 116 118 117 /* … … 128 127 } MYTOOLINFO, *LPMYTOOLINFO; 129 128 130 MYTOOLINFO Tools[] = 129 MYTOOLINFO Tools[] = 131 130 { 132 131 { FCIDM_SHVIEW_BIGICON, 0, 0, IDS_VIEW_LARGE, TBSTATE_ENABLED, TBSTYLE_BUTTON }, … … 144 143 145 144 /********************************************************** 146 * IShellView_Constructor145 * IShellView_Constructor 147 146 */ 148 147 IShellView * IShellView_Constructor( IShellFolder * pFolder) 149 { IShellViewImpl * sv;150 sv=(IShellViewImpl*)HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(IShellViewImpl));151 sv->ref=1;152 ICOM_VTBL(sv)=&svvt;153 sv->lpvtblOleCommandTarget=&ctvt;154 sv->lpvtblDropTarget=&dtvt;155 sv->lpvtblDropSource=&dsvt;156 sv->lpvtblViewObject=&vovt;157 158 sv->pSFParent = pFolder;159 if(pFolder) IShellFolder_AddRef(pFolder);160 IShellFolder_QueryInterface(sv->pSFParent, &IID_IShellFolder2, (LPVOID*)&sv->pSF2Parent);161 162 TRACE("(%p)->(%p)\n",sv, pFolder);163 shell32_ObjCount++;164 return (IShellView *) sv;148 { IShellViewImpl * sv; 149 sv=(IShellViewImpl*)HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(IShellViewImpl)); 150 sv->ref=1; 151 ICOM_VTBL(sv)=&svvt; 152 sv->lpvtblOleCommandTarget=&ctvt; 153 sv->lpvtblDropTarget=&dtvt; 154 sv->lpvtblDropSource=&dsvt; 155 sv->lpvtblViewObject=&vovt; 156 157 sv->pSFParent = pFolder; 158 if(pFolder) IShellFolder_AddRef(pFolder); 159 IShellFolder_QueryInterface(sv->pSFParent, &IID_IShellFolder2, (LPVOID*)&sv->pSF2Parent); 160 161 TRACE("(%p)->(%p)\n",sv, pFolder); 162 shell32_ObjCount++; 163 return (IShellView *) sv; 165 164 } 166 165 … … 170 169 */ 171 170 static BOOL IsInCommDlg(IShellViewImpl * This) 172 { return(This->pCommDlgBrowser != NULL);171 { return(This->pCommDlgBrowser != NULL); 173 172 } 174 173 175 174 static HRESULT IncludeObject(IShellViewImpl * This, LPCITEMIDLIST pidl) 176 175 { 177 HRESULT ret = S_OK;178 179 if ( IsInCommDlg(This) )180 {181 TRACE("ICommDlgBrowser::IncludeObject pidl=%p\n", pidl);182 ret = ICommDlgBrowser_IncludeObject(This->pCommDlgBrowser, (IShellView*)This, pidl);183 TRACE("--0x%08lx\n", ret);184 }185 return ret;176 HRESULT ret = S_OK; 177 178 if ( IsInCommDlg(This) ) 179 { 180 TRACE("ICommDlgBrowser::IncludeObject pidl=%p\n", pidl); 181 ret = ICommDlgBrowser_IncludeObject(This->pCommDlgBrowser, (IShellView*)This, pidl); 182 TRACE("--0x%08lx\n", ret); 183 } 184 return ret; 186 185 } 187 186 188 187 static HRESULT OnDefaultCommand(IShellViewImpl * This) 189 188 { 190 HRESULT ret = S_FALSE;191 192 if (IsInCommDlg(This))193 {194 TRACE("ICommDlgBrowser::OnDefaultCommand\n");195 ret = ICommDlgBrowser_OnDefaultCommand(This->pCommDlgBrowser, (IShellView*)This);196 TRACE("--\n");197 }198 return ret;189 HRESULT ret = S_FALSE; 190 191 if (IsInCommDlg(This)) 192 { 193 TRACE("ICommDlgBrowser::OnDefaultCommand\n"); 194 ret = ICommDlgBrowser_OnDefaultCommand(This->pCommDlgBrowser, (IShellView*)This); 195 TRACE("--\n"); 196 } 197 return ret; 199 198 } 200 199 201 200 static HRESULT OnStateChange(IShellViewImpl * This, UINT uFlags) 202 201 { 203 HRESULT ret = S_FALSE;204 205 if (IsInCommDlg(This))206 {207 TRACE("ICommDlgBrowser::OnStateChange flags=%x\n", uFlags);208 ret = ICommDlgBrowser_OnStateChange(This->pCommDlgBrowser, (IShellView*)This, uFlags);209 TRACE("--\n");210 }211 return ret;212 } 213 /********************************************************** 214 * set the toolbar of the filedialog buttons202 HRESULT ret = S_FALSE; 203 204 if (IsInCommDlg(This)) 205 { 206 TRACE("ICommDlgBrowser::OnStateChange flags=%x\n", uFlags); 207 ret = ICommDlgBrowser_OnStateChange(This->pCommDlgBrowser, (IShellView*)This, uFlags); 208 TRACE("--\n"); 209 } 210 return ret; 211 } 212 /********************************************************** 213 * set the toolbar of the filedialog buttons 215 214 * 216 * - activates the buttons from the shellbrowser according to 215 * - activates the buttons from the shellbrowser according to 217 216 * the view state 218 217 */ 219 218 static void CheckToolbar(IShellViewImpl * This) 220 219 { 221 LRESULT result;222 223 TRACE("\n");224 225 if (IsInCommDlg(This))226 {227 IShellBrowser_SendControlMsg(This->pShellBrowser, FCW_TOOLBAR, TB_CHECKBUTTON,228 FCIDM_TB_SMALLICON, (This->FolderSettings.ViewMode==FVM_LIST)? TRUE : FALSE, &result);229 IShellBrowser_SendControlMsg(This->pShellBrowser, FCW_TOOLBAR, TB_CHECKBUTTON,230 FCIDM_TB_REPORTVIEW, (This->FolderSettings.ViewMode==FVM_DETAILS)? TRUE : FALSE, &result);231 IShellBrowser_SendControlMsg(This->pShellBrowser, FCW_TOOLBAR, TB_ENABLEBUTTON,232 FCIDM_TB_SMALLICON, TRUE, &result);233 IShellBrowser_SendControlMsg(This->pShellBrowser, FCW_TOOLBAR, TB_ENABLEBUTTON,234 FCIDM_TB_REPORTVIEW, TRUE, &result);235 }220 LRESULT result; 221 222 TRACE("\n"); 223 224 if (IsInCommDlg(This)) 225 { 226 IShellBrowser_SendControlMsg(This->pShellBrowser, FCW_TOOLBAR, TB_CHECKBUTTON, 227 FCIDM_TB_SMALLICON, (This->FolderSettings.ViewMode==FVM_LIST)? TRUE : FALSE, &result); 228 IShellBrowser_SendControlMsg(This->pShellBrowser, FCW_TOOLBAR, TB_CHECKBUTTON, 229 FCIDM_TB_REPORTVIEW, (This->FolderSettings.ViewMode==FVM_DETAILS)? TRUE : FALSE, &result); 230 IShellBrowser_SendControlMsg(This->pShellBrowser, FCW_TOOLBAR, TB_ENABLEBUTTON, 231 FCIDM_TB_SMALLICON, TRUE, &result); 232 IShellBrowser_SendControlMsg(This->pShellBrowser, FCW_TOOLBAR, TB_ENABLEBUTTON, 233 FCIDM_TB_REPORTVIEW, TRUE, &result); 234 } 236 235 } 237 236 … … 241 240 */ 242 241 /********************************************************** 243 * change the style of the listview control242 * change the style of the listview control 244 243 */ 245 244 static void SetStyle(IShellViewImpl * This, DWORD dwAdd, DWORD dwRemove) 246 245 { 247 DWORD tmpstyle;248 249 TRACE("(%p)\n", This);250 251 tmpstyle = GetWindowLongA(This->hWndList, GWL_STYLE);252 SetWindowLongA(This->hWndList, GWL_STYLE, dwAdd | (tmpstyle & ~dwRemove));246 DWORD tmpstyle; 247 248 TRACE("(%p)\n", This); 249 250 tmpstyle = GetWindowLongA(This->hWndList, GWL_STYLE); 251 SetWindowLongA(This->hWndList, GWL_STYLE, dwAdd | (tmpstyle & ~dwRemove)); 253 252 } 254 253 … … 259 258 */ 260 259 static BOOL ShellView_CreateList (IShellViewImpl * This) 261 { DWORD dwStyle;262 263 TRACE("%p\n",This);264 265 dwStyle = WS_TABSTOP | WS_VISIBLE | WS_CHILDWINDOW | WS_CLIPSIBLINGS | WS_CLIPCHILDREN |266 LVS_SHAREIMAGELISTS | LVS_EDITLABELS | LVS_ALIGNLEFT | LVS_AUTOARRANGE;267 268 switch (This->FolderSettings.ViewMode)269 {270 case FVM_ICON: dwStyle |= LVS_ICON;break;271 case FVM_DETAILS: dwStyle |= LVS_REPORT;break;272 case FVM_SMALLICON: dwStyle |= LVS_SMALLICON;break;273 case FVM_LIST: dwStyle |= LVS_LIST;break;274 default: dwStyle |= LVS_LIST;break;275 }276 277 if (This->FolderSettings.fFlags & FWF_AUTOARRANGE)dwStyle |= LVS_AUTOARRANGE;278 /*if (This->FolderSettings.fFlags && FWF_DESKTOP); used from explorer*/279 if (This->FolderSettings.fFlags & FWF_SINGLESEL)dwStyle |= LVS_SINGLESEL;280 281 This->hWndList=CreateWindowExA( WS_EX_CLIENTEDGE,282 WC_LISTVIEWA,283 NULL,284 dwStyle,285 0,0,0,0,286 This->hWnd,287 (HMENU)ID_LISTVIEW,288 shell32_hInstance,289 NULL);290 291 if(!This->hWndList)292 return FALSE;260 { DWORD dwStyle; 261 262 TRACE("%p\n",This); 263 264 dwStyle = WS_TABSTOP | WS_VISIBLE | WS_CHILDWINDOW | WS_CLIPSIBLINGS | WS_CLIPCHILDREN | 265 LVS_SHAREIMAGELISTS | LVS_EDITLABELS | LVS_ALIGNLEFT | LVS_AUTOARRANGE; 266 267 switch (This->FolderSettings.ViewMode) 268 { 269 case FVM_ICON: dwStyle |= LVS_ICON; break; 270 case FVM_DETAILS: dwStyle |= LVS_REPORT; break; 271 case FVM_SMALLICON: dwStyle |= LVS_SMALLICON; break; 272 case FVM_LIST: dwStyle |= LVS_LIST; break; 273 default: dwStyle |= LVS_LIST; break; 274 } 275 276 if (This->FolderSettings.fFlags & FWF_AUTOARRANGE) dwStyle |= LVS_AUTOARRANGE; 277 /*if (This->FolderSettings.fFlags && FWF_DESKTOP); used from explorer*/ 278 if (This->FolderSettings.fFlags & FWF_SINGLESEL) dwStyle |= LVS_SINGLESEL; 279 280 This->hWndList=CreateWindowExA( WS_EX_CLIENTEDGE, 281 WC_LISTVIEWA, 282 NULL, 283 dwStyle, 284 0,0,0,0, 285 This->hWnd, 286 (HMENU)ID_LISTVIEW, 287 shell32_hInstance, 288 NULL); 289 290 if(!This->hWndList) 291 return FALSE; 293 292 294 293 This->ListViewSortInfo.bIsAscending = TRUE; … … 297 296 298 297 /* UpdateShellSettings(); */ 299 return TRUE;298 return TRUE; 300 299 } 301 300 … … 307 306 static BOOL ShellView_InitList(IShellViewImpl * This) 308 307 { 309 LVCOLUMNAlvColumn;310 SHELLDETAILSsd;311 inti;312 charszTemp[50];313 314 TRACE("%p\n",This);315 316 ListView_DeleteAllItems(This->hWndList);317 318 lvColumn.mask = LVCF_FMT | LVCF_WIDTH | LVCF_TEXT;319 lvColumn.pszText = szTemp;320 321 if (This->pSF2Parent)322 {323 for (i=0; 1; i++)324 {325 if (!SUCCEEDED(IShellFolder2_GetDetailsOf(This->pSF2Parent, NULL, i, &sd)))326 break;327 lvColumn.fmt = sd.fmt;328 lvColumn.cx = sd.cxChar*8; /* chars->pixel */329 StrRetToStrNA( szTemp, 50, &sd.str, NULL);330 ListView_InsertColumnA(This->hWndList, i, &lvColumn);331 }332 }333 else334 {335 FIXME("no SF2\n");336 }337 338 ListView_SetImageList(This->hWndList, ShellSmallIconList, LVSIL_SMALL);339 ListView_SetImageList(This->hWndList, ShellBigIconList, LVSIL_NORMAL);340 341 return TRUE;342 } 343 /********************************************************** 344 * ShellView_CompareItems() 308 LVCOLUMNA lvColumn; 309 SHELLDETAILS sd; 310 int i; 311 char szTemp[50]; 312 313 TRACE("%p\n",This); 314 315 ListView_DeleteAllItems(This->hWndList); 316 317 lvColumn.mask = LVCF_FMT | LVCF_WIDTH | LVCF_TEXT; 318 lvColumn.pszText = szTemp; 319 320 if (This->pSF2Parent) 321 { 322 for (i=0; 1; i++) 323 { 324 if (!SUCCEEDED(IShellFolder2_GetDetailsOf(This->pSF2Parent, NULL, i, &sd))) 325 break; 326 lvColumn.fmt = sd.fmt; 327 lvColumn.cx = sd.cxChar*8; /* chars->pixel */ 328 StrRetToStrNA( szTemp, 50, &sd.str, NULL); 329 ListView_InsertColumnA(This->hWndList, i, &lvColumn); 330 } 331 } 332 else 333 { 334 FIXME("no SF2\n"); 335 } 336 337 ListView_SetImageList(This->hWndList, ShellSmallIconList, LVSIL_SMALL); 338 ListView_SetImageList(This->hWndList, ShellBigIconList, LVSIL_NORMAL); 339 340 return TRUE; 341 } 342 /********************************************************** 343 * ShellView_CompareItems() 345 344 * 346 345 * NOTES 347 346 * internal, CALLBACK for DSA_Sort 348 */ 347 */ 349 348 static INT CALLBACK ShellView_CompareItems(LPVOID lParam1, LPVOID lParam2, LPARAM lpData) 350 349 { 351 int ret;352 TRACE("pidl1=%p pidl2=%p lpsf=%p\n", lParam1, lParam2, (LPVOID) lpData);353 354 if(!lpData) return 0;355 356 ret = (SHORT) SCODE_CODE(IShellFolder_CompareIDs((LPSHELLFOLDER)lpData, 0, (LPITEMIDLIST)lParam1, (LPITEMIDLIST)lParam2)); 357 TRACE("ret=%i\n",ret);358 return ret;350 int ret; 351 TRACE("pidl1=%p pidl2=%p lpsf=%p\n", lParam1, lParam2, (LPVOID) lpData); 352 353 if(!lpData) return 0; 354 355 ret = (SHORT) SCODE_CODE(IShellFolder_CompareIDs((LPSHELLFOLDER)lpData, 0, (LPITEMIDLIST)lParam1, (LPITEMIDLIST)lParam2)); 356 TRACE("ret=%i\n",ret); 357 return ret; 359 358 } 360 359 … … 370 369 * 371 370 * RETURNS 372 * A negative value if the first item should precede the second, 373 * a positive value if the first item should follow the second, 371 * A negative value if the first item should precede the second, 372 * a positive value if the first item should follow the second, 374 373 * or zero if the two items are equivalent 375 374 * 376 375 * NOTES 377 * FIXME: function does what ShellView_CompareItems is supposed to do.378 * unify it and figure out how to use the undocumented first parameter379 * of IShellFolder_CompareIDs to do the job this function does and380 * move this code to IShellFolder.381 * make LISTVIEW_SORT_INFO obsolete382 * the way this function works is only usable if we had only383 * filesystemfolders (25/10/99 jsch)376 * FIXME: function does what ShellView_CompareItems is supposed to do. 377 * unify it and figure out how to use the undocumented first parameter 378 * of IShellFolder_CompareIDs to do the job this function does and 379 * move this code to IShellFolder. 380 * make LISTVIEW_SORT_INFO obsolete 381 * the way this function works is only usable if we had only 382 * filesystemfolders (25/10/99 jsch) 384 383 */ 385 384 static INT CALLBACK ShellView_ListViewCompareItems(LPVOID lParam1, LPVOID lParam2, LPARAM lpData) … … 404 403 } 405 404 else 406 { 405 { 407 406 /* Sort by Time: Folders or Files can be sorted */ 408 407 409 408 if(pSortInfo->nHeaderID == LISTVIEW_COLUMN_TIME) 410 409 { … … 443 442 } 444 443 /* If the Date, FileSize, FileType, Attrib was the same, sort by FileName */ 445 444 446 445 if(nDiff == 0) 447 446 { … … 462 461 /********************************************************** 463 462 * LV_FindItemByPidl() 464 */ 463 */ 465 464 static int LV_FindItemByPidl( 466 IShellViewImpl * This,467 LPCITEMIDLIST pidl)468 { 469 LVITEMA lvItem;470 ZeroMemory(&lvItem, sizeof(LVITEMA));471 lvItem.mask = LVIF_PARAM;472 for(lvItem.iItem = 0; ListView_GetItemA(This->hWndList, &lvItem); lvItem.iItem++)473 {474 LPITEMIDLIST currentpidl = (LPITEMIDLIST) lvItem.lParam;475 HRESULT hr = IShellFolder_CompareIDs(This->pSFParent, 0, pidl, currentpidl);476 if(SUCCEEDED(hr) && !HRESULT_CODE(hr))477 {478 return lvItem.iItem;479 }480 }481 return -1;465 IShellViewImpl * This, 466 LPCITEMIDLIST pidl) 467 { 468 LVITEMA lvItem; 469 ZeroMemory(&lvItem, sizeof(LVITEMA)); 470 lvItem.mask = LVIF_PARAM; 471 for(lvItem.iItem = 0; ListView_GetItemA(This->hWndList, &lvItem); lvItem.iItem++) 472 { 473 LPITEMIDLIST currentpidl = (LPITEMIDLIST) lvItem.lParam; 474 HRESULT hr = IShellFolder_CompareIDs(This->pSFParent, 0, pidl, currentpidl); 475 if(SUCCEEDED(hr) && !HRESULT_CODE(hr)) 476 { 477 return lvItem.iItem; 478 } 479 } 480 return -1; 482 481 } 483 482 … … 487 486 static BOOLEAN LV_AddItem(IShellViewImpl * This, LPCITEMIDLIST pidl) 488 487 { 489 LVITEMAlvItem;490 491 TRACE("(%p)(pidl=%p)\n", This, pidl);492 493 ZeroMemory(&lvItem, sizeof(lvItem));/* create the listview item*/494 lvItem.mask = LVIF_TEXT | LVIF_IMAGE | LVIF_PARAM;/*set the mask*/495 lvItem.iItem = ListView_GetItemCount(This->hWndList);/*add the item to the end of the list*/496 lvItem.lParam = (LPARAM) ILClone(ILFindLastID(pidl));/*set the item's data*/497 lvItem.pszText = LPSTR_TEXTCALLBACKA;/*get text on a callback basis*/498 lvItem.iImage = I_IMAGECALLBACK;/*get the image on a callback basis*/499 return (-1==ListView_InsertItemA(This->hWndList, &lvItem))? FALSE: TRUE;488 LVITEMA lvItem; 489 490 TRACE("(%p)(pidl=%p)\n", This, pidl); 491 492 ZeroMemory(&lvItem, sizeof(lvItem)); /* create the listview item*/ 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) ILClone(ILFindLastID(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 return (-1==ListView_InsertItemA(This->hWndList, &lvItem))? FALSE: TRUE; 500 499 } 501 500 … … 505 504 static BOOLEAN LV_DeleteItem(IShellViewImpl * This, LPCITEMIDLIST pidl) 506 505 { 507 int nIndex;508 509 TRACE("(%p)(pidl=%p)\n", This, pidl);510 511 nIndex = LV_FindItemByPidl(This, ILFindLastID(pidl));512 return (-1==ListView_DeleteItem(This->hWndList, nIndex))? FALSE: TRUE;506 int nIndex; 507 508 TRACE("(%p)(pidl=%p)\n", This, pidl); 509 510 nIndex = LV_FindItemByPidl(This, ILFindLastID(pidl)); 511 return (-1==ListView_DeleteItem(This->hWndList, nIndex))? FALSE: TRUE; 513 512 } 514 513 … … 518 517 static BOOLEAN LV_RenameItem(IShellViewImpl * This, LPCITEMIDLIST pidlOld, LPCITEMIDLIST pidlNew ) 519 518 { 520 int nItem;521 LVITEMA lvItem;522 523 TRACE("(%p)(pidlold=%p pidlnew=%p)\n", This, pidlOld, pidlNew);524 525 nItem = LV_FindItemByPidl(This, ILFindLastID(pidlOld));526 if ( -1 != nItem )527 {528 ZeroMemory(&lvItem, sizeof(lvItem));/* create the listview item*/529 lvItem.mask = LVIF_PARAM;/* only the pidl */530 lvItem.iItem = nItem;531 ListView_GetItemA(This->hWndList, &lvItem);532 533 SHFree((LPITEMIDLIST)lvItem.lParam);534 lvItem.mask = LVIF_PARAM;535 lvItem.iItem = nItem;536 lvItem.lParam = (LPARAM) ILClone(ILFindLastID(pidlNew));/* set the item's data */537 ListView_SetItemA(This->hWndList, &lvItem);538 ListView_Update(This->hWndList, nItem);539 return TRUE;/* fixme: better handling */540 }541 return FALSE;519 int nItem; 520 LVITEMA lvItem; 521 522 TRACE("(%p)(pidlold=%p pidlnew=%p)\n", This, pidlOld, pidlNew); 523 524 nItem = LV_FindItemByPidl(This, ILFindLastID(pidlOld)); 525 if ( -1 != nItem ) 526 { 527 ZeroMemory(&lvItem, sizeof(lvItem)); /* create the listview item*/ 528 lvItem.mask = LVIF_PARAM; /* only the pidl */ 529 lvItem.iItem = nItem; 530 ListView_GetItemA(This->hWndList, &lvItem); 531 532 SHFree((LPITEMIDLIST)lvItem.lParam); 533 lvItem.mask = LVIF_PARAM; 534 lvItem.iItem = nItem; 535 lvItem.lParam = (LPARAM) ILClone(ILFindLastID(pidlNew)); /* set the item's data */ 536 ListView_SetItemA(This->hWndList, &lvItem); 537 ListView_Update(This->hWndList, nItem); 538 return TRUE; /* fixme: better handling */ 539 } 540 return FALSE; 542 541 } 543 542 /********************************************************** … … 547 546 * - sorts the list 548 547 * - fills the list into the view 549 */ 548 */ 550 549 551 550 static HRESULT ShellView_FillList(IShellViewImpl * This) 552 551 { 553 LPENUMIDLISTpEnumIDList;554 LPITEMIDLISTpidl;555 DWORDdwFetched;556 UINTi;557 HRESULThRes;558 HDPAhdpa;559 560 TRACE("%p\n",This);561 562 /* get the itemlist from the shfolder*/ 563 hRes = IShellFolder_EnumObjects(This->pSFParent,This->hWnd, SHCONTF_NONFOLDERS | SHCONTF_FOLDERS, &pEnumIDList);564 if (hRes != S_OK)565 {566 if (hRes==S_FALSE)567 return(NOERROR);568 return(hRes);569 }570 571 /* create a pointer array */ 572 hdpa = pDPA_Create(16);573 if (!hdpa)574 {575 return(E_OUTOFMEMORY);576 }577 578 /* copy the items into the array*/579 while((S_OK == IEnumIDList_Next(pEnumIDList,1, &pidl, &dwFetched)) && dwFetched)580 {581 if (pDPA_InsertPtr(hdpa, 0x7fff, pidl) == -1)582 {583 SHFree(pidl);584 } 585 }586 587 /* sort the array */588 pDPA_Sort(hdpa, ShellView_CompareItems, (LPARAM)This->pSFParent);589 590 /*turn the listview's redrawing off*/591 SendMessageA(This->hWndList, WM_SETREDRAW, FALSE, 0); 592 593 for (i=0; i < DPA_GetPtrCount(hdpa); ++i)/* DPA_GetPtrCount is a macro*/594 {595 pidl = (LPITEMIDLIST)pDPA_GetPtr(hdpa, i);596 597 /* in a commdlg This works as a filemask*/598 if ( IncludeObject(This, pidl)==S_OK )599 LV_AddItem(This, pidl);600 SHFree(pidl);601 }602 603 /*turn the listview's redrawing back on and force it to draw*/604 SendMessageA(This->hWndList, WM_SETREDRAW, TRUE, 0);605 606 IEnumIDList_Release(pEnumIDList); /* destroy the list*/607 pDPA_Destroy(hdpa);608 609 return S_OK;552 LPENUMIDLIST pEnumIDList; 553 LPITEMIDLIST pidl; 554 DWORD dwFetched; 555 UINT i; 556 HRESULT hRes; 557 HDPA hdpa; 558 559 TRACE("%p\n",This); 560 561 /* get the itemlist from the shfolder*/ 562 hRes = IShellFolder_EnumObjects(This->pSFParent,This->hWnd, SHCONTF_NONFOLDERS | SHCONTF_FOLDERS, &pEnumIDList); 563 if (hRes != S_OK) 564 { 565 if (hRes==S_FALSE) 566 return(NOERROR); 567 return(hRes); 568 } 569 570 /* create a pointer array */ 571 hdpa = pDPA_Create(16); 572 if (!hdpa) 573 { 574 return(E_OUTOFMEMORY); 575 } 576 577 /* copy the items into the array*/ 578 while((S_OK == IEnumIDList_Next(pEnumIDList,1, &pidl, &dwFetched)) && dwFetched) 579 { 580 if (pDPA_InsertPtr(hdpa, 0x7fff, pidl) == -1) 581 { 582 SHFree(pidl); 583 } 584 } 585 586 /* sort the array */ 587 pDPA_Sort(hdpa, ShellView_CompareItems, (LPARAM)This->pSFParent); 588 589 /*turn the listview's redrawing off*/ 590 SendMessageA(This->hWndList, WM_SETREDRAW, FALSE, 0); 591 592 for (i=0; i < DPA_GetPtrCount(hdpa); ++i) /* DPA_GetPtrCount is a macro*/ 593 { 594 pidl = (LPITEMIDLIST)pDPA_GetPtr(hdpa, i); 595 596 /* in a commdlg This works as a filemask*/ 597 if ( IncludeObject(This, pidl)==S_OK ) 598 LV_AddItem(This, pidl); 599 SHFree(pidl); 600 } 601 602 /*turn the listview's redrawing back on and force it to draw*/ 603 SendMessageA(This->hWndList, WM_SETREDRAW, TRUE, 0); 604 605 IEnumIDList_Release(pEnumIDList); /* destroy the list*/ 606 pDPA_Destroy(hdpa); 607 608 return S_OK; 610 609 } 611 610 612 611 /********************************************************** 613 612 * ShellView_OnCreate() 614 */ 613 */ 615 614 static LRESULT ShellView_OnCreate(IShellViewImpl * This) 616 615 { 617 IDropTarget* pdt;618 NOTIFYREGISTER ntreg;619 IPersistFolder2 * ppf2 = NULL;620 621 TRACE("%p\n",This);622 623 if(ShellView_CreateList(This))624 {625 if(ShellView_InitList(This))626 {627 ShellView_FillList(This);628 }629 }630 631 if(GetShellOle())632 {633 if (SUCCEEDED(IShellFolder_CreateViewObject(This->pSFParent, This->hWnd, &IID_IDropTarget, (LPVOID*)&pdt)))634 {635 pRegisterDragDrop(This->hWnd, pdt);636 IDropTarget_Release(pdt);637 }638 }639 640 /* register for receiving notifications */641 IShellFolder_QueryInterface(This->pSFParent, &IID_IPersistFolder2, (LPVOID*)&ppf2);642 if (ppf2)643 {644 IPersistFolder2_GetCurFolder(ppf2, &ntreg.pidlPath);645 ntreg.bWatchSubtree = FALSE;646 This->hNotify = SHChangeNotifyRegister(This->hWnd, SHCNF_IDLIST, SHCNE_ALLEVENTS, SHV_CHANGE_NOTIFY, 1, &ntreg);647 SHFree(ntreg.pidlPath);648 IPersistFolder2_Release(ppf2);649 }650 651 This->hAccel = LoadAcceleratorsA(shell32_hInstance, "shv_accel");652 653 return S_OK;654 } 655 656 /********************************************************** 657 * #### Handling of the menus ####616 IDropTarget* pdt; 617 NOTIFYREGISTER ntreg; 618 IPersistFolder2 * ppf2 = NULL; 619 620 TRACE("%p\n",This); 621 622 if(ShellView_CreateList(This)) 623 { 624 if(ShellView_InitList(This)) 625 { 626 ShellView_FillList(This); 627 } 628 } 629 630 if(GetShellOle()) 631 { 632 if (SUCCEEDED(IShellFolder_CreateViewObject(This->pSFParent, This->hWnd, &IID_IDropTarget, (LPVOID*)&pdt))) 633 { 634 pRegisterDragDrop(This->hWnd, pdt); 635 IDropTarget_Release(pdt); 636 } 637 } 638 639 /* register for receiving notifications */ 640 IShellFolder_QueryInterface(This->pSFParent, &IID_IPersistFolder2, (LPVOID*)&ppf2); 641 if (ppf2) 642 { 643 IPersistFolder2_GetCurFolder(ppf2, &ntreg.pidlPath); 644 ntreg.bWatchSubtree = FALSE; 645 This->hNotify = SHChangeNotifyRegister(This->hWnd, SHCNF_IDLIST, SHCNE_ALLEVENTS, SHV_CHANGE_NOTIFY, 1, &ntreg); 646 SHFree(ntreg.pidlPath); 647 IPersistFolder2_Release(ppf2); 648 } 649 650 This->hAccel = LoadAcceleratorsA(shell32_hInstance, "shv_accel"); 651 652 return S_OK; 653 } 654 655 /********************************************************** 656 * #### Handling of the menus #### 658 657 */ 659 658 … … 662 661 */ 663 662 static HMENU ShellView_BuildFileMenu(IShellViewImpl * This) 664 { CHARszText[MAX_PATH];665 MENUITEMINFOAmii;666 intnTools,i;667 HMENUhSubMenu;668 669 TRACE("(%p)\n",This);670 671 hSubMenu = CreatePopupMenu();672 if(hSubMenu)673 { /*get the number of items in our global array*/674 for(nTools = 0; Tools[nTools].idCommand != -1; nTools++){}675 676 /*add the menu items*/677 for(i = 0; i < nTools; i++)678 { 679 LoadStringA(shell32_hInstance, Tools[i].idMenuString, szText, MAX_PATH);680 681 ZeroMemory(&mii, sizeof(mii));682 mii.cbSize = sizeof(mii);683 mii.fMask = MIIM_TYPE | MIIM_ID | MIIM_STATE;684 685 if(TBSTYLE_SEP != Tools[i].bStyle) /* no seperator*/686 {687 mii.fType = MFT_STRING;688 mii.fState = MFS_ENABLED;689 mii.dwTypeData = szText;690 mii.wID = Tools[i].idCommand;691 }692 else693 {694 mii.fType = MFT_SEPARATOR;695 }696 /* tack This item onto the end of the menu */697 InsertMenuItemA(hSubMenu, (UINT)-1, TRUE, &mii);698 }699 }700 TRACE("-- return (menu=0x%x)\n",hSubMenu);701 return hSubMenu;663 { CHAR szText[MAX_PATH]; 664 MENUITEMINFOA mii; 665 int nTools,i; 666 HMENU hSubMenu; 667 668 TRACE("(%p)\n",This); 669 670 hSubMenu = CreatePopupMenu(); 671 if(hSubMenu) 672 { /*get the number of items in our global array*/ 673 for(nTools = 0; Tools[nTools].idCommand != -1; nTools++){} 674 675 /*add the menu items*/ 676 for(i = 0; i < nTools; i++) 677 { 678 LoadStringA(shell32_hInstance, Tools[i].idMenuString, szText, MAX_PATH); 679 680 ZeroMemory(&mii, sizeof(mii)); 681 mii.cbSize = sizeof(mii); 682 mii.fMask = MIIM_TYPE | MIIM_ID | MIIM_STATE; 683 684 if(TBSTYLE_SEP != Tools[i].bStyle) /* no seperator*/ 685 { 686 mii.fType = MFT_STRING; 687 mii.fState = MFS_ENABLED; 688 mii.dwTypeData = szText; 689 mii.wID = Tools[i].idCommand; 690 } 691 else 692 { 693 mii.fType = MFT_SEPARATOR; 694 } 695 /* tack This item onto the end of the menu */ 696 InsertMenuItemA(hSubMenu, (UINT)-1, TRUE, &mii); 697 } 698 } 699 TRACE("-- return (menu=0x%x)\n",hSubMenu); 700 return hSubMenu; 702 701 } 703 702 /********************************************************** … … 705 704 */ 706 705 static void ShellView_MergeFileMenu(IShellViewImpl * This, HMENU hSubMenu) 707 { TRACE("(%p)->(submenu=0x%08x) stub\n",This,hSubMenu);708 709 if(hSubMenu)710 { /*insert This item at the beginning of the menu */711 _InsertMenuItem(hSubMenu, 0, TRUE, 0, MFT_SEPARATOR, NULL, MFS_ENABLED);712 _InsertMenuItem(hSubMenu, 0, TRUE, IDM_MYFILEITEM, MFT_STRING, "dummy45", MFS_ENABLED);713 714 }715 TRACE("--\n"); 706 { TRACE("(%p)->(submenu=0x%08x) stub\n",This,hSubMenu); 707 708 if(hSubMenu) 709 { /*insert This item at the beginning of the menu */ 710 _InsertMenuItem(hSubMenu, 0, TRUE, 0, MFT_SEPARATOR, NULL, MFS_ENABLED); 711 _InsertMenuItem(hSubMenu, 0, TRUE, IDM_MYFILEITEM, MFT_STRING, "dummy45", MFS_ENABLED); 712 713 } 714 TRACE("--\n"); 716 715 } 717 716 … … 721 720 722 721 static void ShellView_MergeViewMenu(IShellViewImpl * This, HMENU hSubMenu) 723 { MENUITEMINFOAmii;724 725 TRACE("(%p)->(submenu=0x%08x)\n",This,hSubMenu);726 727 if(hSubMenu)728 { /*add a separator at the correct position in the menu*/729 _InsertMenuItem(hSubMenu, FCIDM_MENU_VIEW_SEP_OPTIONS, FALSE, 0, MFT_SEPARATOR, NULL, MFS_ENABLED);730 731 ZeroMemory(&mii, sizeof(mii));732 mii.cbSize = sizeof(mii);733 mii.fMask = MIIM_SUBMENU | MIIM_TYPE | MIIM_DATA;;734 mii.fType = MFT_STRING;735 mii.dwTypeData = "View";736 mii.hSubMenu = LoadMenuA(shell32_hInstance, "MENU_001");737 InsertMenuItemA(hSubMenu, FCIDM_MENU_VIEW_SEP_OPTIONS, FALSE, &mii);738 }722 { MENUITEMINFOA mii; 723 724 TRACE("(%p)->(submenu=0x%08x)\n",This,hSubMenu); 725 726 if(hSubMenu) 727 { /*add a separator at the correct position in the menu*/ 728 _InsertMenuItem(hSubMenu, FCIDM_MENU_VIEW_SEP_OPTIONS, FALSE, 0, MFT_SEPARATOR, NULL, MFS_ENABLED); 729 730 ZeroMemory(&mii, sizeof(mii)); 731 mii.cbSize = sizeof(mii); 732 mii.fMask = MIIM_SUBMENU | MIIM_TYPE | MIIM_DATA;; 733 mii.fType = MFT_STRING; 734 mii.dwTypeData = "View"; 735 mii.hSubMenu = LoadMenuA(shell32_hInstance, "MENU_001"); 736 InsertMenuItemA(hSubMenu, FCIDM_MENU_VIEW_SEP_OPTIONS, FALSE, &mii); 737 } 739 738 } 740 739 … … 746 745 * RETURNS 747 746 * number of selected items 748 */ 747 */ 749 748 static UINT ShellView_GetSelections(IShellViewImpl * This) 750 749 { 751 LVITEMAlvItem;752 UINTi = 0;753 754 if (This->apidl)755 {756 SHFree(This->apidl);757 }758 759 This->cidl = ListView_GetSelectedCount(This->hWndList);760 This->apidl = (LPITEMIDLIST*)SHAlloc(This->cidl * sizeof(LPITEMIDLIST));761 762 TRACE("selected=%i\n", This->cidl);763 764 if(This->apidl)765 {766 TRACE("-- Items selected =%u\n", This->cidl);767 768 ZeroMemory(&lvItem, sizeof(lvItem));769 lvItem.mask = LVIF_STATE | LVIF_PARAM;770 lvItem.stateMask = LVIS_SELECTED;771 772 while(ListView_GetItemA(This->hWndList, &lvItem) && (i < This->cidl))773 {774 if(lvItem.state & LVIS_SELECTED)775 {776 This->apidl[i] = (LPITEMIDLIST)lvItem.lParam;777 i++;778 TRACE("-- selected Item found\n");779 }780 lvItem.iItem++;781 }782 }783 return This->cidl;784 785 } 786 /********************************************************** 787 * ShellView_DoContextMenu()750 LVITEMA lvItem; 751 UINT i = 0; 752 753 if (This->apidl) 754 { 755 SHFree(This->apidl); 756 } 757 758 This->cidl = ListView_GetSelectedCount(This->hWndList); 759 This->apidl = (LPITEMIDLIST*)SHAlloc(This->cidl * sizeof(LPITEMIDLIST)); 760 761 TRACE("selected=%i\n", This->cidl); 762 763 if(This->apidl) 764 { 765 TRACE("-- Items selected =%u\n", This->cidl); 766 767 ZeroMemory(&lvItem, sizeof(lvItem)); 768 lvItem.mask = LVIF_STATE | LVIF_PARAM; 769 lvItem.stateMask = LVIS_SELECTED; 770 771 while(ListView_GetItemA(This->hWndList, &lvItem) && (i < This->cidl)) 772 { 773 if(lvItem.state & LVIS_SELECTED) 774 { 775 This->apidl[i] = (LPITEMIDLIST)lvItem.lParam; 776 i++; 777 TRACE("-- selected Item found\n"); 778 } 779 lvItem.iItem++; 780 } 781 } 782 return This->cidl; 783 784 } 785 /********************************************************** 786 * ShellView_DoContextMenu() 788 787 */ 789 788 static void ShellView_DoContextMenu(IShellViewImpl * This, WORD x, WORD y, BOOL bDefault) 790 { UINTuCommand;791 DWORDwFlags;792 HMENUhMenu;793 BOOLfExplore = FALSE;794 HWNDhwndTree = 0;795 LPCONTEXTMENUpContextMenu = NULL;796 IContextMenu *pCM = NULL;797 CMINVOKECOMMANDINFOcmi;798 799 TRACE("(%p)->(0x%08x 0x%08x 0x%08x) stub\n",This, x, y, bDefault);800 801 /* look, what's selected and create a context menu object of it*/802 if( ShellView_GetSelections(This) )803 {804 IShellFolder_GetUIObjectOf( This->pSFParent, This->hWndParent, This->cidl, This->apidl, 805 (REFIID)&IID_IContextMenu, NULL, (LPVOID *)&pContextMenu);806 807 if(pContextMenu)808 {809 TRACE("-- pContextMenu\n");810 hMenu = CreatePopupMenu();811 812 if( hMenu )813 {814 /* See if we are in Explore or Open mode. If the browser's tree is present, we are in Explore mode.*/815 if(SUCCEEDED(IShellBrowser_GetControlWindow(This->pShellBrowser,FCW_TREE, &hwndTree)) && hwndTree)816 {817 TRACE("-- explore mode\n");818 fExplore = TRUE;819 }820 821 /* build the flags depending on what we can do with the selected item */822 wFlags = CMF_NORMAL | (This->cidl != 1 ? 0 : CMF_CANRENAME) | (fExplore ? CMF_EXPLORE : 0);823 824 /* let the ContextMenu merge its items in */825 if (SUCCEEDED(IContextMenu_QueryContextMenu( pContextMenu, hMenu, 0, FCIDM_SHVIEWFIRST, FCIDM_SHVIEWLAST, wFlags )))826 {827 if( bDefault )828 {829 TRACE("-- get menu default command\n");830 uCommand = GetMenuDefaultItem(hMenu, FALSE, GMDI_GOINTOPOPUPS);831 }832 else833 {834 TRACE("-- track popup\n");835 uCommand = TrackPopupMenu( hMenu,TPM_LEFTALIGN | TPM_RETURNCMD,x,y,0,This->hWnd,NULL);836 } 837 838 if(uCommand > 0)839 {840 TRACE("-- uCommand=%u\n", uCommand);841 if (IsInCommDlg(This) && ((uCommand==FCIDM_SHVIEW_EXPLORE) || (uCommand==FCIDM_SHVIEW_OPEN)))842 {843 TRACE("-- dlg: OnDefaultCommand\n");844 OnDefaultCommand(This);845 }846 else847 {848 TRACE("-- explore -- invoke command\n");849 ZeroMemory(&cmi, sizeof(cmi));850 cmi.cbSize = sizeof(cmi);851 cmi.hwnd = This->hWndParent; /* this window has to answer CWM_GETISHELLBROWSER */852 cmi.lpVerb = (LPCSTR)MAKEINTRESOURCEA(uCommand);853 IContextMenu_InvokeCommand(pContextMenu, &cmi);854 }855 }856 DestroyMenu(hMenu);857 }858 }859 if (pContextMenu)860 IContextMenu_Release(pContextMenu);861 }862 }863 else/* background context menu */864 { 865 hMenu = CreatePopupMenu();866 867 pCM = ISvBgCm_Constructor(This->pSFParent);868 IContextMenu_QueryContextMenu(pCM, hMenu, 0, FCIDM_SHVIEWFIRST, FCIDM_SHVIEWLAST, 0);869 870 uCommand = TrackPopupMenu( hMenu, TPM_LEFTALIGN | TPM_RETURNCMD,x,y,0,This->hWnd,NULL);871 DestroyMenu(hMenu);872 873 TRACE("-- (%p)->(uCommand=0x%08x )\n",This, uCommand);874 875 ZeroMemory(&cmi, sizeof(cmi));876 cmi.cbSize = sizeof(cmi);877 cmi.lpVerb = (LPCSTR)MAKEINTRESOURCEA(uCommand);878 cmi.hwnd = This->hWndParent;879 IContextMenu_InvokeCommand(pCM, &cmi);880 881 IContextMenu_Release(pCM);882 }883 } 884 885 /********************************************************** 886 * ##### message handling #####789 { UINT uCommand; 790 DWORD wFlags; 791 HMENU hMenu; 792 BOOL fExplore = FALSE; 793 HWND hwndTree = 0; 794 LPCONTEXTMENU pContextMenu = NULL; 795 IContextMenu * pCM = NULL; 796 CMINVOKECOMMANDINFO cmi; 797 798 TRACE("(%p)->(0x%08x 0x%08x 0x%08x) stub\n",This, x, y, bDefault); 799 800 /* look, what's selected and create a context menu object of it*/ 801 if( ShellView_GetSelections(This) ) 802 { 803 IShellFolder_GetUIObjectOf( This->pSFParent, This->hWndParent, This->cidl, This->apidl, 804 (REFIID)&IID_IContextMenu, NULL, (LPVOID *)&pContextMenu); 805 806 if(pContextMenu) 807 { 808 TRACE("-- pContextMenu\n"); 809 hMenu = CreatePopupMenu(); 810 811 if( hMenu ) 812 { 813 /* See if we are in Explore or Open mode. If the browser's tree is present, we are in Explore mode.*/ 814 if(SUCCEEDED(IShellBrowser_GetControlWindow(This->pShellBrowser,FCW_TREE, &hwndTree)) && hwndTree) 815 { 816 TRACE("-- explore mode\n"); 817 fExplore = TRUE; 818 } 819 820 /* build the flags depending on what we can do with the selected item */ 821 wFlags = CMF_NORMAL | (This->cidl != 1 ? 0 : CMF_CANRENAME) | (fExplore ? CMF_EXPLORE : 0); 822 823 /* let the ContextMenu merge its items in */ 824 if (SUCCEEDED(IContextMenu_QueryContextMenu( pContextMenu, hMenu, 0, FCIDM_SHVIEWFIRST, FCIDM_SHVIEWLAST, wFlags ))) 825 { 826 if( bDefault ) 827 { 828 TRACE("-- get menu default command\n"); 829 uCommand = GetMenuDefaultItem(hMenu, FALSE, GMDI_GOINTOPOPUPS); 830 } 831 else 832 { 833 TRACE("-- track popup\n"); 834 uCommand = TrackPopupMenu( hMenu,TPM_LEFTALIGN | TPM_RETURNCMD,x,y,0,This->hWnd,NULL); 835 } 836 837 if(uCommand > 0) 838 { 839 TRACE("-- uCommand=%u\n", uCommand); 840 if (IsInCommDlg(This) && ((uCommand==FCIDM_SHVIEW_EXPLORE) || (uCommand==FCIDM_SHVIEW_OPEN))) 841 { 842 TRACE("-- dlg: OnDefaultCommand\n"); 843 OnDefaultCommand(This); 844 } 845 else 846 { 847 TRACE("-- explore -- invoke command\n"); 848 ZeroMemory(&cmi, sizeof(cmi)); 849 cmi.cbSize = sizeof(cmi); 850 cmi.hwnd = This->hWndParent; /* this window has to answer CWM_GETISHELLBROWSER */ 851 cmi.lpVerb = (LPCSTR)MAKEINTRESOURCEA(uCommand); 852 IContextMenu_InvokeCommand(pContextMenu, &cmi); 853 } 854 } 855 DestroyMenu(hMenu); 856 } 857 } 858 if (pContextMenu) 859 IContextMenu_Release(pContextMenu); 860 } 861 } 862 else /* background context menu */ 863 { 864 hMenu = CreatePopupMenu(); 865 866 pCM = ISvBgCm_Constructor(This->pSFParent); 867 IContextMenu_QueryContextMenu(pCM, hMenu, 0, FCIDM_SHVIEWFIRST, FCIDM_SHVIEWLAST, 0); 868 869 uCommand = TrackPopupMenu( hMenu, TPM_LEFTALIGN | TPM_RETURNCMD,x,y,0,This->hWnd,NULL); 870 DestroyMenu(hMenu); 871 872 TRACE("-- (%p)->(uCommand=0x%08x )\n",This, uCommand); 873 874 ZeroMemory(&cmi, sizeof(cmi)); 875 cmi.cbSize = sizeof(cmi); 876 cmi.lpVerb = (LPCSTR)MAKEINTRESOURCEA(uCommand); 877 cmi.hwnd = This->hWndParent; 878 IContextMenu_InvokeCommand(pCM, &cmi); 879 880 IContextMenu_Release(pCM); 881 } 882 } 883 884 /********************************************************** 885 * ##### message handling ##### 887 886 */ 888 887 … … 892 891 static LRESULT ShellView_OnSize(IShellViewImpl * This, WORD wWidth, WORD wHeight) 893 892 { 894 TRACE("%p width=%u height=%u\n",This, wWidth,wHeight);895 896 /*resize the ListView to fit our window*/897 if(This->hWndList)898 {899 MoveWindow(This->hWndList, 0, 0, wWidth, wHeight, TRUE);900 }901 902 return S_OK;893 TRACE("%p width=%u height=%u\n",This, wWidth,wHeight); 894 895 /*resize the ListView to fit our window*/ 896 if(This->hWndList) 897 { 898 MoveWindow(This->hWndList, 0, 0, wWidth, wHeight, TRUE); 899 } 900 901 return S_OK; 903 902 } 904 903 /********************************************************** … … 907 906 * NOTES 908 907 * internal 909 */ 908 */ 910 909 static void ShellView_OnDeactivate(IShellViewImpl * This) 911 910 { 912 TRACE("%p\n",This);913 914 if(This->uState != SVUIA_DEACTIVATE)915 {916 if(This->hMenu)917 {918 IShellBrowser_SetMenuSB(This->pShellBrowser,0, 0, 0);919 IShellBrowser_RemoveMenusSB(This->pShellBrowser,This->hMenu);920 DestroyMenu(This->hMenu);921 This->hMenu = 0;922 }923 924 This->uState = SVUIA_DEACTIVATE;925 }911 TRACE("%p\n",This); 912 913 if(This->uState != SVUIA_DEACTIVATE) 914 { 915 if(This->hMenu) 916 { 917 IShellBrowser_SetMenuSB(This->pShellBrowser,0, 0, 0); 918 IShellBrowser_RemoveMenusSB(This->pShellBrowser,This->hMenu); 919 DestroyMenu(This->hMenu); 920 This->hMenu = 0; 921 } 922 923 This->uState = SVUIA_DEACTIVATE; 924 } 926 925 } 927 926 928 927 /********************************************************** 929 928 * ShellView_OnActivate() 930 */ 929 */ 931 930 static LRESULT ShellView_OnActivate(IShellViewImpl * This, UINT uState) 932 { OLEMENUGROUPWIDTHS omw = { {0, 0, 0, 0, 0, 0} };933 MENUITEMINFOA mii;934 CHAR szText[MAX_PATH];935 936 TRACE("%p uState=%x\n",This,uState); 937 938 /*don't do anything if the state isn't really changing */939 if(This->uState == uState)940 {941 return S_OK;942 }943 944 ShellView_OnDeactivate(This);945 946 /*only do This if we are active */947 if(uState != SVUIA_DEACTIVATE)948 {949 /*merge the menus */950 This->hMenu = CreateMenu();951 952 if(This->hMenu)953 {954 IShellBrowser_InsertMenusSB(This->pShellBrowser, This->hMenu, &omw);955 TRACE("-- after fnInsertMenusSB\n"); 956 957 /*build the top level menu get the menu item's text*/958 strcpy(szText,"dummy 31");959 960 ZeroMemory(&mii, sizeof(mii));961 mii.cbSize = sizeof(mii);962 mii.fMask = MIIM_SUBMENU | MIIM_TYPE | MIIM_STATE;963 mii.fType = MFT_STRING;964 mii.fState = MFS_ENABLED;965 mii.dwTypeData = szText;966 mii.hSubMenu = ShellView_BuildFileMenu(This);967 968 /*insert our menu into the menu bar*/969 if(mii.hSubMenu)970 {971 InsertMenuItemA(This->hMenu, FCIDM_MENU_HELP, FALSE, &mii);972 }973 974 /*get the view menu so we can merge with it*/975 ZeroMemory(&mii, sizeof(mii));976 mii.cbSize = sizeof(mii);977 mii.fMask = MIIM_SUBMENU;978 979 if(GetMenuItemInfoA(This->hMenu, FCIDM_MENU_VIEW, FALSE, &mii))980 {981 ShellView_MergeViewMenu(This, mii.hSubMenu);982 }983 984 /*add the items that should only be added if we have the focus*/985 if(SVUIA_ACTIVATE_FOCUS == uState)986 {987 /*get the file menu so we can merge with it */988 ZeroMemory(&mii, sizeof(mii));989 mii.cbSize = sizeof(mii);990 mii.fMask = MIIM_SUBMENU;991 992 if(GetMenuItemInfoA(This->hMenu, FCIDM_MENU_FILE, FALSE, &mii))993 {994 ShellView_MergeFileMenu(This, mii.hSubMenu);995 }996 }997 TRACE("-- before fnSetMenuSB\n"); 998 IShellBrowser_SetMenuSB(This->pShellBrowser, This->hMenu, 0, This->hWnd);999 }1000 }1001 This->uState = uState;1002 TRACE("--\n"); 1003 return S_OK;931 { OLEMENUGROUPWIDTHS omw = { {0, 0, 0, 0, 0, 0} }; 932 MENUITEMINFOA mii; 933 CHAR szText[MAX_PATH]; 934 935 TRACE("%p uState=%x\n",This,uState); 936 937 /*don't do anything if the state isn't really changing */ 938 if(This->uState == uState) 939 { 940 return S_OK; 941 } 942 943 ShellView_OnDeactivate(This); 944 945 /*only do This if we are active */ 946 if(uState != SVUIA_DEACTIVATE) 947 { 948 /*merge the menus */ 949 This->hMenu = CreateMenu(); 950 951 if(This->hMenu) 952 { 953 IShellBrowser_InsertMenusSB(This->pShellBrowser, This->hMenu, &omw); 954 TRACE("-- after fnInsertMenusSB\n"); 955 956 /*build the top level menu get the menu item's text*/ 957 strcpy(szText,"dummy 31"); 958 959 ZeroMemory(&mii, sizeof(mii)); 960 mii.cbSize = sizeof(mii); 961 mii.fMask = MIIM_SUBMENU | MIIM_TYPE | MIIM_STATE; 962 mii.fType = MFT_STRING; 963 mii.fState = MFS_ENABLED; 964 mii.dwTypeData = szText; 965 mii.hSubMenu = ShellView_BuildFileMenu(This); 966 967 /*insert our menu into the menu bar*/ 968 if(mii.hSubMenu) 969 { 970 InsertMenuItemA(This->hMenu, FCIDM_MENU_HELP, FALSE, &mii); 971 } 972 973 /*get the view menu so we can merge with it*/ 974 ZeroMemory(&mii, sizeof(mii)); 975 mii.cbSize = sizeof(mii); 976 mii.fMask = MIIM_SUBMENU; 977 978 if(GetMenuItemInfoA(This->hMenu, FCIDM_MENU_VIEW, FALSE, &mii)) 979 { 980 ShellView_MergeViewMenu(This, mii.hSubMenu); 981 } 982 983 /*add the items that should only be added if we have the focus*/ 984 if(SVUIA_ACTIVATE_FOCUS == uState) 985 { 986 /*get the file menu so we can merge with it */ 987 ZeroMemory(&mii, sizeof(mii)); 988 mii.cbSize = sizeof(mii); 989 mii.fMask = MIIM_SUBMENU; 990 991 if(GetMenuItemInfoA(This->hMenu, FCIDM_MENU_FILE, FALSE, &mii)) 992 { 993 ShellView_MergeFileMenu(This, mii.hSubMenu); 994 } 995 } 996 TRACE("-- before fnSetMenuSB\n"); 997 IShellBrowser_SetMenuSB(This->pShellBrowser, This->hMenu, 0, This->hWnd); 998 } 999 } 1000 This->uState = uState; 1001 TRACE("--\n"); 1002 return S_OK; 1004 1003 } 1005 1004 … … 1010 1009 static LRESULT ShellView_OnSetFocus(IShellViewImpl * This) 1011 1010 { 1012 TRACE("%p\n",This);1013 1014 /* Tell the browser one of our windows has received the focus. This1015 should always be done before merging menus (OnActivate merges the 1016 menus) if one of our windows has the focus.*/1017 1018 IShellBrowser_OnViewWindowActive(This->pShellBrowser,(IShellView*) This);1019 ShellView_OnActivate(This, SVUIA_ACTIVATE_FOCUS);1020 1021 /* Set the focus to the listview */1022 SetFocus(This->hWndList);1023 1024 /* Notify the ICommDlgBrowser interface */1025 OnStateChange(This,CDBOSC_SETFOCUS);1026 1027 return 0;1011 TRACE("%p\n",This); 1012 1013 /* Tell the browser one of our windows has received the focus. This 1014 should always be done before merging menus (OnActivate merges the 1015 menus) if one of our windows has the focus.*/ 1016 1017 IShellBrowser_OnViewWindowActive(This->pShellBrowser,(IShellView*) This); 1018 ShellView_OnActivate(This, SVUIA_ACTIVATE_FOCUS); 1019 1020 /* Set the focus to the listview */ 1021 SetFocus(This->hWndList); 1022 1023 /* Notify the ICommDlgBrowser interface */ 1024 OnStateChange(This,CDBOSC_SETFOCUS); 1025 1026 return 0; 1028 1027 } 1029 1028 1030 1029 /********************************************************** 1031 1030 * ShellView_OnKillFocus() 1032 */ 1031 */ 1033 1032 static LRESULT ShellView_OnKillFocus(IShellViewImpl * This) 1034 1033 { 1035 TRACE("(%p) stub\n",This);1036 1037 ShellView_OnActivate(This, SVUIA_ACTIVATE_NOFOCUS);1038 /* Notify the ICommDlgBrowser */1039 OnStateChange(This,CDBOSC_KILLFOCUS);1040 1041 return 0;1034 TRACE("(%p) stub\n",This); 1035 1036 ShellView_OnActivate(This, SVUIA_ACTIVATE_NOFOCUS); 1037 /* Notify the ICommDlgBrowser */ 1038 OnStateChange(This,CDBOSC_KILLFOCUS); 1039 1040 return 0; 1042 1041 } 1043 1042 … … 1046 1045 * 1047 1046 * NOTES 1048 * the CmdID's are the ones from the context menu1049 */ 1047 * the CmdID's are the ones from the context menu 1048 */ 1050 1049 static LRESULT ShellView_OnCommand(IShellViewImpl * This,DWORD dwCmdID, DWORD dwCmd, HWND hwndCmd) 1051 1050 { 1052 TRACE("(%p)->(0x%08lx 0x%08lx 0x%08x) stub\n",This, dwCmdID, dwCmd, hwndCmd);1053 1054 switch(dwCmdID)1055 {1056 case FCIDM_SHVIEW_SMALLICON:1057 This->FolderSettings.ViewMode = FVM_SMALLICON;1058 SetStyle (This, LVS_SMALLICON, LVS_TYPEMASK);1059 CheckToolbar(This);1060 break;1061 1062 case FCIDM_SHVIEW_BIGICON:1063 This->FolderSettings.ViewMode = FVM_ICON;1064 SetStyle (This, LVS_ICON, LVS_TYPEMASK);1065 CheckToolbar(This);1066 break;1067 1068 case FCIDM_SHVIEW_LISTVIEW:1069 This->FolderSettings.ViewMode = FVM_LIST;1070 SetStyle (This, LVS_LIST, LVS_TYPEMASK);1071 CheckToolbar(This);1072 break;1073 1074 case FCIDM_SHVIEW_REPORTVIEW:1075 This->FolderSettings.ViewMode = FVM_DETAILS;1076 SetStyle (This, LVS_REPORT, LVS_TYPEMASK);1077 CheckToolbar(This);1078 break;1079 1080 /* the menu-ID's for sorting are 0x30... see shrec.rc */1081 case 0x30:1082 case 0x31:1083 case 0x32:1084 case 0x33:1085 This->ListViewSortInfo.nHeaderID = (LPARAM) (dwCmdID - 0x30);1086 This->ListViewSortInfo.bIsAscending = TRUE;1087 This->ListViewSortInfo.nLastHeaderID = This->ListViewSortInfo.nHeaderID;1088 ListView_SortItems(This->hWndList, ShellView_ListViewCompareItems, (LPARAM) (&(This->ListViewSortInfo)));1089 break;1090 1091 default:1092 TRACE("-- COMMAND 0x%04lx unhandled\n", dwCmdID);1093 }1094 return 0;1051 TRACE("(%p)->(0x%08lx 0x%08lx 0x%08x) stub\n",This, dwCmdID, dwCmd, hwndCmd); 1052 1053 switch(dwCmdID) 1054 { 1055 case FCIDM_SHVIEW_SMALLICON: 1056 This->FolderSettings.ViewMode = FVM_SMALLICON; 1057 SetStyle (This, LVS_SMALLICON, LVS_TYPEMASK); 1058 CheckToolbar(This); 1059 break; 1060 1061 case FCIDM_SHVIEW_BIGICON: 1062 This->FolderSettings.ViewMode = FVM_ICON; 1063 SetStyle (This, LVS_ICON, LVS_TYPEMASK); 1064 CheckToolbar(This); 1065 break; 1066 1067 case FCIDM_SHVIEW_LISTVIEW: 1068 This->FolderSettings.ViewMode = FVM_LIST; 1069 SetStyle (This, LVS_LIST, LVS_TYPEMASK); 1070 CheckToolbar(This); 1071 break; 1072 1073 case FCIDM_SHVIEW_REPORTVIEW: 1074 This->FolderSettings.ViewMode = FVM_DETAILS; 1075 SetStyle (This, LVS_REPORT, LVS_TYPEMASK); 1076 CheckToolbar(This); 1077 break; 1078 1079 /* the menu-ID's for sorting are 0x30... see shrec.rc */ 1080 case 0x30: 1081 case 0x31: 1082 case 0x32: 1083 case 0x33: 1084 This->ListViewSortInfo.nHeaderID = (LPARAM) (dwCmdID - 0x30); 1085 This->ListViewSortInfo.bIsAscending = TRUE; 1086 This->ListViewSortInfo.nLastHeaderID = This->ListViewSortInfo.nHeaderID; 1087 ListView_SortItems(This->hWndList, ShellView_ListViewCompareItems, (LPARAM) (&(This->ListViewSortInfo))); 1088 break; 1089 1090 default: 1091 TRACE("-- COMMAND 0x%04lx unhandled\n", dwCmdID); 1092 } 1093 return 0; 1095 1094 } 1096 1095 … … 1098 1097 * ShellView_OnNotify() 1099 1098 */ 1100 1099 1101 1100 static LRESULT ShellView_OnNotify(IShellViewImpl * This, UINT CtlID, LPNMHDR lpnmh) 1102 { LPNMLISTVIEW lpnmlv = (LPNMLISTVIEW)lpnmh;1103 NMLVDISPINFOA *lpdi = (NMLVDISPINFOA *)lpnmh;1104 LPITEMIDLIST pidl;1105 1106 TRACE("%p CtlID=%u lpnmh->code=%x\n",This,CtlID,lpnmh->code);1107 1108 switch(lpnmh->code)1109 {1110 case NM_SETFOCUS:1111 TRACE("-- NM_SETFOCUS %p\n",This);1112 ShellView_OnSetFocus(This);1113 break;1114 1115 case NM_KILLFOCUS:1116 TRACE("-- NM_KILLFOCUS %p\n",This);1117 ShellView_OnDeactivate(This);1118 /* Notify the ICommDlgBrowser interface */1119 OnStateChange(This,CDBOSC_KILLFOCUS);1120 break;1121 1122 case HDN_ENDTRACKA:1123 TRACE("-- HDN_ENDTRACKA %p\n",This);1124 /*nColumn1 = ListView_GetColumnWidth(This->hWndList, 0);1125 nColumn2 = ListView_GetColumnWidth(This->hWndList, 1);*/1126 break;1127 1128 case LVN_DELETEITEM:1129 TRACE("-- LVN_DELETEITEM %p\n",This);1130 SHFree((LPITEMIDLIST)lpnmlv->lParam); /*delete the pidl because we made a copy of it*/1131 break;1132 1133 case LVN_ITEMACTIVATE:1134 TRACE("-- LVN_ITEMACTIVATE %p\n",This);1135 OnStateChange(This, CDBOSC_SELCHANGE); /* the browser will get the IDataObject now */1136 ShellView_DoContextMenu(This, 0, 0, TRUE);1137 break;1138 1139 case LVN_COLUMNCLICK:1140 This->ListViewSortInfo.nHeaderID = lpnmlv->iSubItem;1141 if(This->ListViewSortInfo.nLastHeaderID == This->ListViewSortInfo.nHeaderID)1142 {1143 This->ListViewSortInfo.bIsAscending = !This->ListViewSortInfo.bIsAscending;1144 }1145 else1146 {1147 This->ListViewSortInfo.bIsAscending = TRUE;1148 }1149 This->ListViewSortInfo.nLastHeaderID = This->ListViewSortInfo.nHeaderID;1150 1151 ListView_SortItems(lpnmlv->hdr.hwndFrom, ShellView_ListViewCompareItems, (LPARAM) (&(This->ListViewSortInfo)));1152 break;1153 1154 case LVN_GETDISPINFOA:1155 TRACE("-- LVN_GETDISPINFOA %p\n",This);1156 pidl = (LPITEMIDLIST)lpdi->item.lParam;1157 1158 if(lpdi->item.mask & LVIF_TEXT)/* text requested */1159 {1160 if (This->pSF2Parent)1161 {1162 SHELLDETAILS sd;1163 IShellFolder2_GetDetailsOf(This->pSF2Parent, pidl, lpdi->item.iSubItem, &sd);1164 StrRetToStrNA( lpdi->item.pszText, lpdi->item.cchTextMax, &sd.str, NULL);1165 TRACE("-- text=%s\n",lpdi->item.pszText); 1166 }1167 else1168 {1169 FIXME("no SF2\n");1170 }1171 }1172 if(lpdi->item.mask & LVIF_IMAGE)/* image requested */1173 {1174 lpdi->item.iImage = SHMapPIDLToSystemImageListIndex(This->pSFParent, pidl, 0);1175 }1176 break;1177 1178 case LVN_ITEMCHANGED:1179 TRACE("-- LVN_ITEMCHANGED %p\n",This);1180 OnStateChange(This, CDBOSC_SELCHANGE); /* the browser will get the IDataObject now */1181 break;1182 1183 case LVN_BEGINDRAG:1184 case LVN_BEGINRDRAG:1185 TRACE("-- LVN_BEGINDRAG\n");1186 1187 if (ShellView_GetSelections(This))1188 { 1189 IDataObject * pda;1190 DWORD dwAttributes = SFGAO_CANLINK;1191 DWORD dwEffect = DROPEFFECT_COPY | DROPEFFECT_MOVE;1192 1193 if(GetShellOle())1194 {1195 if (SUCCEEDED(IShellFolder_GetUIObjectOf(This->pSFParent, This->hWnd, This->cidl, This->apidl, &IID_IDataObject,0,(LPVOID *)&pda)))1196 {1197 IDropSource * pds = (IDropSource*)&(This->lpvtblDropSource);/* own DropSource interface */1198 1199 if (SUCCEEDED(IShellFolder_GetAttributesOf(This->pSFParent, This->cidl, This->apidl, &dwAttributes)))1200 {1201 if (dwAttributes & SFGAO_CANLINK)1202 {1203 dwEffect |= DROPEFFECT_LINK;1204 }1205 }1206 1207 if (pds)1208 {1209 DWORD dwEffect;1210 pDoDragDrop(pda, pds, dwEffect, &dwEffect);1211 }1212 IDataObject_Release(pda);1213 }1214 }1215 }1216 break;1217 1218 case LVN_BEGINLABELEDITA:1219 {1220 DWORD dwAttr = SFGAO_CANRENAME;1221 pidl = (LPITEMIDLIST)lpdi->item.lParam;1222 1223 TRACE("-- LVN_BEGINLABELEDITA %p\n",This);1224 1225 IShellFolder_GetAttributesOf(This->pSFParent, 1, &pidl, &dwAttr);1226 if (SFGAO_CANRENAME & dwAttr)1227 {1228 return FALSE;1229 }1230 return TRUE;1231 }1232 break;1233 1234 case LVN_ENDLABELEDITA:1235 {1236 TRACE("-- LVN_ENDLABELEDITA %p\n",This);1237 if (lpdi->item.pszText)1238 {1239 HRESULT hr;1240 WCHAR wszNewName[MAX_PATH];1241 LVITEMA lvItem;1242 1243 ZeroMemory(&lvItem, sizeof(LVITEMA));1244 lvItem.iItem = lpdi->item.iItem;1245 lvItem.mask = LVIF_PARAM;1246 ListView_GetItemA(This->hWndList, &lvItem);1247 1248 pidl = (LPITEMIDLIST)lpdi->item.lParam;1101 { LPNMLISTVIEW lpnmlv = (LPNMLISTVIEW)lpnmh; 1102 NMLVDISPINFOA *lpdi = (NMLVDISPINFOA *)lpnmh; 1103 LPITEMIDLIST pidl; 1104 1105 TRACE("%p CtlID=%u lpnmh->code=%x\n",This,CtlID,lpnmh->code); 1106 1107 switch(lpnmh->code) 1108 { 1109 case NM_SETFOCUS: 1110 TRACE("-- NM_SETFOCUS %p\n",This); 1111 ShellView_OnSetFocus(This); 1112 break; 1113 1114 case NM_KILLFOCUS: 1115 TRACE("-- NM_KILLFOCUS %p\n",This); 1116 ShellView_OnDeactivate(This); 1117 /* Notify the ICommDlgBrowser interface */ 1118 OnStateChange(This,CDBOSC_KILLFOCUS); 1119 break; 1120 1121 case HDN_ENDTRACKA: 1122 TRACE("-- HDN_ENDTRACKA %p\n",This); 1123 /*nColumn1 = ListView_GetColumnWidth(This->hWndList, 0); 1124 nColumn2 = ListView_GetColumnWidth(This->hWndList, 1);*/ 1125 break; 1126 1127 case LVN_DELETEITEM: 1128 TRACE("-- LVN_DELETEITEM %p\n",This); 1129 SHFree((LPITEMIDLIST)lpnmlv->lParam); /*delete the pidl because we made a copy of it*/ 1130 break; 1131 1132 case LVN_ITEMACTIVATE: 1133 TRACE("-- LVN_ITEMACTIVATE %p\n",This); 1134 OnStateChange(This, CDBOSC_SELCHANGE); /* the browser will get the IDataObject now */ 1135 ShellView_DoContextMenu(This, 0, 0, TRUE); 1136 break; 1137 1138 case LVN_COLUMNCLICK: 1139 This->ListViewSortInfo.nHeaderID = lpnmlv->iSubItem; 1140 if(This->ListViewSortInfo.nLastHeaderID == This->ListViewSortInfo.nHeaderID) 1141 { 1142 This->ListViewSortInfo.bIsAscending = !This->ListViewSortInfo.bIsAscending; 1143 } 1144 else 1145 { 1146 This->ListViewSortInfo.bIsAscending = TRUE; 1147 } 1148 This->ListViewSortInfo.nLastHeaderID = This->ListViewSortInfo.nHeaderID; 1149 1150 ListView_SortItems(lpnmlv->hdr.hwndFrom, ShellView_ListViewCompareItems, (LPARAM) (&(This->ListViewSortInfo))); 1151 break; 1152 1153 case LVN_GETDISPINFOA: 1154 TRACE("-- LVN_GETDISPINFOA %p\n",This); 1155 pidl = (LPITEMIDLIST)lpdi->item.lParam; 1156 1157 if(lpdi->item.mask & LVIF_TEXT) /* text requested */ 1158 { 1159 if (This->pSF2Parent) 1160 { 1161 SHELLDETAILS sd; 1162 IShellFolder2_GetDetailsOf(This->pSF2Parent, pidl, lpdi->item.iSubItem, &sd); 1163 StrRetToStrNA( lpdi->item.pszText, lpdi->item.cchTextMax, &sd.str, NULL); 1164 TRACE("-- text=%s\n",lpdi->item.pszText); 1165 } 1166 else 1167 { 1168 FIXME("no SF2\n"); 1169 } 1170 } 1171 if(lpdi->item.mask & LVIF_IMAGE) /* image requested */ 1172 { 1173 lpdi->item.iImage = SHMapPIDLToSystemImageListIndex(This->pSFParent, pidl, 0); 1174 } 1175 break; 1176 1177 case LVN_ITEMCHANGED: 1178 TRACE("-- LVN_ITEMCHANGED %p\n",This); 1179 OnStateChange(This, CDBOSC_SELCHANGE); /* the browser will get the IDataObject now */ 1180 break; 1181 1182 case LVN_BEGINDRAG: 1183 case LVN_BEGINRDRAG: 1184 TRACE("-- LVN_BEGINDRAG\n"); 1185 1186 if (ShellView_GetSelections(This)) 1187 { 1188 IDataObject * pda; 1189 DWORD dwAttributes = SFGAO_CANLINK; 1190 DWORD dwEffect = DROPEFFECT_COPY | DROPEFFECT_MOVE; 1191 1192 if(GetShellOle()) 1193 { 1194 if (SUCCEEDED(IShellFolder_GetUIObjectOf(This->pSFParent, This->hWnd, This->cidl, This->apidl, &IID_IDataObject,0,(LPVOID *)&pda))) 1195 { 1196 IDropSource * pds = (IDropSource*)&(This->lpvtblDropSource); /* own DropSource interface */ 1197 1198 if (SUCCEEDED(IShellFolder_GetAttributesOf(This->pSFParent, This->cidl, This->apidl, &dwAttributes))) 1199 { 1200 if (dwAttributes & SFGAO_CANLINK) 1201 { 1202 dwEffect |= DROPEFFECT_LINK; 1203 } 1204 } 1205 1206 if (pds) 1207 { 1208 DWORD dwEffect; 1209 pDoDragDrop(pda, pds, dwEffect, &dwEffect); 1210 } 1211 IDataObject_Release(pda); 1212 } 1213 } 1214 } 1215 break; 1216 1217 case LVN_BEGINLABELEDITA: 1218 { 1219 DWORD dwAttr = SFGAO_CANRENAME; 1220 pidl = (LPITEMIDLIST)lpdi->item.lParam; 1221 1222 TRACE("-- LVN_BEGINLABELEDITA %p\n",This); 1223 1224 IShellFolder_GetAttributesOf(This->pSFParent, 1, &pidl, &dwAttr); 1225 if (SFGAO_CANRENAME & dwAttr) 1226 { 1227 return FALSE; 1228 } 1229 return TRUE; 1230 } 1231 break; 1232 1233 case LVN_ENDLABELEDITA: 1234 { 1235 TRACE("-- LVN_ENDLABELEDITA %p\n",This); 1236 if (lpdi->item.pszText) 1237 { 1238 HRESULT hr; 1239 WCHAR wszNewName[MAX_PATH]; 1240 LVITEMA lvItem; 1241 1242 ZeroMemory(&lvItem, sizeof(LVITEMA)); 1243 lvItem.iItem = lpdi->item.iItem; 1244 lvItem.mask = LVIF_PARAM; 1245 ListView_GetItemA(This->hWndList, &lvItem); 1246 1247 pidl = (LPITEMIDLIST)lpdi->item.lParam; 1249 1248 if (!MultiByteToWideChar( CP_ACP, 0, lpdi->item.pszText, -1, wszNewName, MAX_PATH )) 1250 1249 wszNewName[MAX_PATH-1] = 0; 1251 hr = IShellFolder_SetNameOf(This->pSFParent, 0, pidl, wszNewName, SHGDN_INFOLDER, &pidl);1252 1253 if(SUCCEEDED(hr) && pidl)1254 {1255 lvItem.mask = LVIF_PARAM;1256 lvItem.lParam = (LPARAM)pidl;1257 ListView_SetItemA(This->hWndList, &lvItem);1258 return TRUE;1259 }1260 }1261 return FALSE;1262 }1263 break;1264 1265 case LVN_KEYDOWN:1266 {1267 /* MSG msg;1268 msg.hwnd = This->hWnd;1269 msg.message = WM_KEYDOWN;1270 msg.wParam = plvKeyDown->wVKey;1271 msg.lParam = 0;1272 msg.time = 0;1273 msg.pt = 0;*/1274 1275 LPNMLVKEYDOWN plvKeyDown = (LPNMLVKEYDOWN) lpnmh;1250 hr = IShellFolder_SetNameOf(This->pSFParent, 0, pidl, wszNewName, SHGDN_INFOLDER, &pidl); 1251 1252 if(SUCCEEDED(hr) && pidl) 1253 { 1254 lvItem.mask = LVIF_PARAM; 1255 lvItem.lParam = (LPARAM)pidl; 1256 ListView_SetItemA(This->hWndList, &lvItem); 1257 return TRUE; 1258 } 1259 } 1260 return FALSE; 1261 } 1262 break; 1263 1264 case LVN_KEYDOWN: 1265 { 1266 /* MSG msg; 1267 msg.hwnd = This->hWnd; 1268 msg.message = WM_KEYDOWN; 1269 msg.wParam = plvKeyDown->wVKey; 1270 msg.lParam = 0; 1271 msg.time = 0; 1272 msg.pt = 0;*/ 1273 1274 LPNMLVKEYDOWN plvKeyDown = (LPNMLVKEYDOWN) lpnmh; 1276 1275 1277 1276 /* initiate a rename of the selected file or directory */ … … 1286 1285 /* get selected item */ 1287 1286 i = ListView_GetNextItem(This->hWndList, -1, 1288 LVNI_SELECTED);1289 1287 LVNI_SELECTED); 1288 1290 1289 ListView_EnsureVisible(This->hWndList, i, 0); 1291 1290 ListView_EditLabelA(This->hWndList, i); … … 1293 1292 } 1294 1293 #if 0 1295 TranslateAccelerator(This->hWnd, This->hAccel, &msg)1294 TranslateAccelerator(This->hWnd, This->hAccel, &msg) 1296 1295 #endif 1297 else if(plvKeyDown->wVKey == VK_DELETE)1296 else if(plvKeyDown->wVKey == VK_DELETE) 1298 1297 { 1299 int i, item_index;1300 LVITEMA item;1301 LPITEMIDLIST* pItems;1302 ISFHelper *psfhlp;1303 1304 IShellFolder_QueryInterface(This->pSFParent, &IID_ISFHelper,1305 (LPVOID*)&psfhlp);1306 1307 if(!(i = ListView_GetSelectedCount(This->hWndList)))1308 break;1309 1310 /* allocate memory for the pidl array */1311 pItems = HeapAlloc(GetProcessHeap(), 0, 1312 sizeof(LPITEMIDLIST) * i);1313 1314 /* retrieve all selected items */1315 i = 0;1316 item_index = -1;1317 while(ListView_GetSelectedCount(This->hWndList) > i)1318 {1319 /* get selected item */1320 item_index = ListView_GetNextItem(This->hWndList, 1321 item_index, LVNI_SELECTED);1322 item.iItem = item_index;1323 ListView_GetItemA(This->hWndList, &item);1324 1325 /* get item pidl */1326 pItems[i] = (LPITEMIDLIST)item.lParam;1327 1328 i++;1329 }1330 1331 /* perform the item deletion */1332 ISFHelper_DeleteItems(psfhlp, i, pItems);1333 1334 /* free pidl array memory */1335 HeapFree(GetProcessHeap(), 0, pItems);1298 int i, item_index; 1299 LVITEMA item; 1300 LPITEMIDLIST* pItems; 1301 ISFHelper *psfhlp; 1302 1303 IShellFolder_QueryInterface(This->pSFParent, &IID_ISFHelper, 1304 (LPVOID*)&psfhlp); 1305 1306 if(!(i = ListView_GetSelectedCount(This->hWndList))) 1307 break; 1308 1309 /* allocate memory for the pidl array */ 1310 pItems = HeapAlloc(GetProcessHeap(), 0, 1311 sizeof(LPITEMIDLIST) * i); 1312 1313 /* retrieve all selected items */ 1314 i = 0; 1315 item_index = -1; 1316 while(ListView_GetSelectedCount(This->hWndList) > i) 1317 { 1318 /* get selected item */ 1319 item_index = ListView_GetNextItem(This->hWndList, 1320 item_index, LVNI_SELECTED); 1321 item.iItem = item_index; 1322 ListView_GetItemA(This->hWndList, &item); 1323 1324 /* get item pidl */ 1325 pItems[i] = (LPITEMIDLIST)item.lParam; 1326 1327 i++; 1328 } 1329 1330 /* perform the item deletion */ 1331 ISFHelper_DeleteItems(psfhlp, i, pItems); 1332 1333 /* free pidl array memory */ 1334 HeapFree(GetProcessHeap(), 0, pItems); 1336 1335 } 1337 1336 else 1338 FIXME("LVN_KEYDOWN key=0x%08x\n",plvKeyDown->wVKey);1339 }1340 break;1341 1342 default:1343 TRACE("-- %p WM_COMMAND %x unhandled\n", This, lpnmh->code);1344 break;;1345 }1346 return 0;1337 FIXME("LVN_KEYDOWN key=0x%08x\n",plvKeyDown->wVKey); 1338 } 1339 break; 1340 1341 default: 1342 TRACE("-- %p WM_COMMAND %x unhandled\n", This, lpnmh->code); 1343 break;; 1344 } 1345 return 0; 1347 1346 } 1348 1347 … … 1354 1353 { 1355 1354 1356 TRACE("(%p)(%p,%p,0x%08lx)\n", This, Pidls[0], Pidls[1], wEventId);1357 switch(wEventId)1358 { 1359 case SHCNE_MKDIR:1360 case SHCNE_CREATE:1361 LV_AddItem(This, Pidls[0]);1362 break;1363 case SHCNE_RMDIR:1364 case SHCNE_DELETE:1365 LV_DeleteItem(This, Pidls[0]);1366 break;1367 case SHCNE_RENAMEFOLDER:1368 case SHCNE_RENAMEITEM:1369 LV_RenameItem(This, Pidls[0], Pidls[1]);1370 break;1371 case SHCNE_UPDATEITEM:1372 break;1373 }1374 return TRUE;1355 TRACE("(%p)(%p,%p,0x%08lx)\n", This, Pidls[0], Pidls[1], wEventId); 1356 switch(wEventId) 1357 { 1358 case SHCNE_MKDIR: 1359 case SHCNE_CREATE: 1360 LV_AddItem(This, Pidls[0]); 1361 break; 1362 case SHCNE_RMDIR: 1363 case SHCNE_DELETE: 1364 LV_DeleteItem(This, Pidls[0]); 1365 break; 1366 case SHCNE_RENAMEFOLDER: 1367 case SHCNE_RENAMEITEM: 1368 LV_RenameItem(This, Pidls[0], Pidls[1]); 1369 break; 1370 case SHCNE_UPDATEITEM: 1371 break; 1372 } 1373 return TRUE; 1375 1374 } 1376 1375 /********************************************************** … … 1380 1379 static LRESULT CALLBACK ShellView_WndProc(HWND hWnd, UINT uMessage, WPARAM wParam, LPARAM lParam) 1381 1380 { 1382 IShellViewImpl * pThis = (IShellViewImpl*)GetWindowLongA(hWnd, GWL_USERDATA);1383 LPCREATESTRUCTA lpcs;1384 1385 TRACE("(hwnd=%x msg=%x wparm=%x lparm=%lx)\n",hWnd, uMessage, wParam, lParam);1386 1387 switch (uMessage)1388 {1389 case WM_NCCREATE:1390 lpcs = (LPCREATESTRUCTA)lParam;1391 pThis = (IShellViewImpl*)(lpcs->lpCreateParams);1392 SetWindowLongA(hWnd, GWL_USERDATA, (LONG)pThis);1393 pThis->hWnd = hWnd; /*set the window handle*/1394 break;1395 1396 case WM_SIZE:return ShellView_OnSize(pThis,LOWORD(lParam), HIWORD(lParam));1397 case WM_SETFOCUS:return ShellView_OnSetFocus(pThis);1398 case WM_KILLFOCUS:return ShellView_OnKillFocus(pThis);1399 case WM_CREATE:return ShellView_OnCreate(pThis);1400 case WM_ACTIVATE:return ShellView_OnActivate(pThis, SVUIA_ACTIVATE_FOCUS);1401 case WM_NOTIFY:return ShellView_OnNotify(pThis,(UINT)wParam, (LPNMHDR)lParam);1402 case WM_COMMAND: return ShellView_OnCommand(pThis, 1403 GET_WM_COMMAND_ID(wParam, lParam), 1404 GET_WM_COMMAND_CMD(wParam, lParam), 1405 GET_WM_COMMAND_HWND(wParam, lParam));1406 case SHV_CHANGE_NOTIFY: return ShellView_OnChange(pThis, (LPITEMIDLIST*)wParam, (LONG)lParam);1407 1408 case WM_CONTEXTMENU: ShellView_DoContextMenu(pThis, LOWORD(lParam), HIWORD(lParam), FALSE);1409 return 0;1410 1411 case WM_SHOWWINDOW:UpdateWindow(pThis->hWndList);1412 break;1413 1414 case WM_GETDLGCODE: return SendMessageA(pThis->hWndList,uMessage,0,0);1415 1416 case WM_DESTROY:if(GetShellOle())1417 {1418 pRevokeDragDrop(pThis->hWnd);1419 }1420 SHChangeNotifyDeregister(pThis->hNotify);1421 break;1422 }1423 1424 return DefWindowProcA (hWnd, uMessage, wParam, lParam);1381 IShellViewImpl * pThis = (IShellViewImpl*)GetWindowLongA(hWnd, GWL_USERDATA); 1382 LPCREATESTRUCTA lpcs; 1383 1384 TRACE("(hwnd=%x msg=%x wparm=%x lparm=%lx)\n",hWnd, uMessage, wParam, lParam); 1385 1386 switch (uMessage) 1387 { 1388 case WM_NCCREATE: 1389 lpcs = (LPCREATESTRUCTA)lParam; 1390 pThis = (IShellViewImpl*)(lpcs->lpCreateParams); 1391 SetWindowLongA(hWnd, GWL_USERDATA, (LONG)pThis); 1392 pThis->hWnd = hWnd; /*set the window handle*/ 1393 break; 1394 1395 case WM_SIZE: return ShellView_OnSize(pThis,LOWORD(lParam), HIWORD(lParam)); 1396 case WM_SETFOCUS: return ShellView_OnSetFocus(pThis); 1397 case WM_KILLFOCUS: return ShellView_OnKillFocus(pThis); 1398 case WM_CREATE: return ShellView_OnCreate(pThis); 1399 case WM_ACTIVATE: return ShellView_OnActivate(pThis, SVUIA_ACTIVATE_FOCUS); 1400 case WM_NOTIFY: return ShellView_OnNotify(pThis,(UINT)wParam, (LPNMHDR)lParam); 1401 case WM_COMMAND: return ShellView_OnCommand(pThis, 1402 GET_WM_COMMAND_ID(wParam, lParam), 1403 GET_WM_COMMAND_CMD(wParam, lParam), 1404 GET_WM_COMMAND_HWND(wParam, lParam)); 1405 case SHV_CHANGE_NOTIFY: return ShellView_OnChange(pThis, (LPITEMIDLIST*)wParam, (LONG)lParam); 1406 1407 case WM_CONTEXTMENU: ShellView_DoContextMenu(pThis, LOWORD(lParam), HIWORD(lParam), FALSE); 1408 return 0; 1409 1410 case WM_SHOWWINDOW: UpdateWindow(pThis->hWndList); 1411 break; 1412 1413 case WM_GETDLGCODE: return SendMessageA(pThis->hWndList,uMessage,0,0); 1414 1415 case WM_DESTROY: if(GetShellOle()) 1416 { 1417 pRevokeDragDrop(pThis->hWnd); 1418 } 1419 SHChangeNotifyDeregister(pThis->hNotify); 1420 break; 1421 } 1422 1423 return DefWindowProcA (hWnd, uMessage, wParam, lParam); 1425 1424 } 1426 1425 /********************************************************** … … 1435 1434 static HRESULT WINAPI IShellView_fnQueryInterface(IShellView * iface,REFIID riid, LPVOID *ppvObj) 1436 1435 { 1437 ICOM_THIS(IShellViewImpl, iface);1438 1439 TRACE("(%p)->(\n\tIID:\t%s,%p)\n",This,debugstr_guid(riid),ppvObj);1440 1441 *ppvObj = NULL;1442 1443 if(IsEqualIID(riid, &IID_IUnknown))1444 {1445 *ppvObj = This; 1446 }1447 else if(IsEqualIID(riid, &IID_IShellView))1448 {1449 *ppvObj = (IShellView*)This;1450 }1451 else if(IsEqualIID(riid, &IID_IOleCommandTarget))1452 {1453 *ppvObj = (IOleCommandTarget*)&(This->lpvtblOleCommandTarget);1454 }1455 else if(IsEqualIID(riid, &IID_IDropTarget))1456 {1457 *ppvObj = (IDropTarget*)&(This->lpvtblDropTarget);1458 }1459 else if(IsEqualIID(riid, &IID_IDropSource))1460 {1461 *ppvObj = (IDropSource*)&(This->lpvtblDropSource);1462 }1463 else if(IsEqualIID(riid, &IID_IViewObject))1464 {1465 *ppvObj = (IViewObject*)&(This->lpvtblViewObject);1466 }1467 1468 if(*ppvObj)1469 {1470 IUnknown_AddRef( (IUnknown*)*ppvObj );1471 TRACE("-- Interface: (%p)->(%p)\n",ppvObj,*ppvObj);1472 return S_OK;1473 }1474 TRACE("-- Interface: E_NOINTERFACE\n");1475 return E_NOINTERFACE;1436 ICOM_THIS(IShellViewImpl, iface); 1437 1438 TRACE("(%p)->(\n\tIID:\t%s,%p)\n",This,debugstr_guid(riid),ppvObj); 1439 1440 *ppvObj = NULL; 1441 1442 if(IsEqualIID(riid, &IID_IUnknown)) 1443 { 1444 *ppvObj = This; 1445 } 1446 else if(IsEqualIID(riid, &IID_IShellView)) 1447 { 1448 *ppvObj = (IShellView*)This; 1449 } 1450 else if(IsEqualIID(riid, &IID_IOleCommandTarget)) 1451 { 1452 *ppvObj = (IOleCommandTarget*)&(This->lpvtblOleCommandTarget); 1453 } 1454 else if(IsEqualIID(riid, &IID_IDropTarget)) 1455 { 1456 *ppvObj = (IDropTarget*)&(This->lpvtblDropTarget); 1457 } 1458 else if(IsEqualIID(riid, &IID_IDropSource)) 1459 { 1460 *ppvObj = (IDropSource*)&(This->lpvtblDropSource); 1461 } 1462 else if(IsEqualIID(riid, &IID_IViewObject)) 1463 { 1464 *ppvObj = (IViewObject*)&(This->lpvtblViewObject); 1465 } 1466 1467 if(*ppvObj) 1468 { 1469 IUnknown_AddRef( (IUnknown*)*ppvObj ); 1470 TRACE("-- Interface: (%p)->(%p)\n",ppvObj,*ppvObj); 1471 return S_OK; 1472 } 1473 TRACE("-- Interface: E_NOINTERFACE\n"); 1474 return E_NOINTERFACE; 1476 1475 } 1477 1476 … … 1481 1480 static ULONG WINAPI IShellView_fnAddRef(IShellView * iface) 1482 1481 { 1483 ICOM_THIS(IShellViewImpl, iface);1484 1485 TRACE("(%p)->(count=%lu)\n",This,This->ref);1486 1487 shell32_ObjCount++;1488 return ++(This->ref);1482 ICOM_THIS(IShellViewImpl, iface); 1483 1484 TRACE("(%p)->(count=%lu)\n",This,This->ref); 1485 1486 shell32_ObjCount++; 1487 return ++(This->ref); 1489 1488 } 1490 1489 /********************************************************** … … 1493 1492 static ULONG WINAPI IShellView_fnRelease(IShellView * iface) 1494 1493 { 1495 ICOM_THIS(IShellViewImpl, iface);1496 1497 TRACE("(%p)->()\n",This);1498 1499 shell32_ObjCount--;1500 1501 if (!--(This->ref)) 1502 {1503 TRACE(" destroying IShellView(%p)\n",This);1504 1505 if(This->pSFParent)1506 IShellFolder_Release(This->pSFParent);1507 1508 if(This->pSF2Parent)1509 IShellFolder2_Release(This->pSF2Parent);1510 1511 if (This->apidl)1512 SHFree(This->apidl);1513 1514 if (This->pCommDlgBrowser)1515 ICommDlgBrowser_Release(This->pCommDlgBrowser);1516 1517 HeapFree(GetProcessHeap(),0,This);1518 return 0;1519 }1520 return This->ref;1494 ICOM_THIS(IShellViewImpl, iface); 1495 1496 TRACE("(%p)->()\n",This); 1497 1498 shell32_ObjCount--; 1499 1500 if (!--(This->ref)) 1501 { 1502 TRACE(" destroying IShellView(%p)\n",This); 1503 1504 if(This->pSFParent) 1505 IShellFolder_Release(This->pSFParent); 1506 1507 if(This->pSF2Parent) 1508 IShellFolder2_Release(This->pSF2Parent); 1509 1510 if (This->apidl) 1511 SHFree(This->apidl); 1512 1513 if (This->pCommDlgBrowser) 1514 ICommDlgBrowser_Release(This->pCommDlgBrowser); 1515 1516 HeapFree(GetProcessHeap(),0,This); 1517 return 0; 1518 } 1519 return This->ref; 1521 1520 } 1522 1521 … … 1526 1525 static HRESULT WINAPI IShellView_fnGetWindow(IShellView * iface,HWND * phWnd) 1527 1526 { 1528 ICOM_THIS(IShellViewImpl, iface);1529 1530 TRACE("(%p)\n",This);1531 1532 *phWnd = This->hWnd;1533 1534 return S_OK;1527 ICOM_THIS(IShellViewImpl, iface); 1528 1529 TRACE("(%p)\n",This); 1530 1531 *phWnd = This->hWnd; 1532 1533 return S_OK; 1535 1534 } 1536 1535 1537 1536 static HRESULT WINAPI IShellView_fnContextSensitiveHelp(IShellView * iface,BOOL fEnterMode) 1538 1537 { 1539 ICOM_THIS(IShellViewImpl, iface);1540 1541 FIXME("(%p) stub\n",This);1542 1543 return E_NOTIMPL;1538 ICOM_THIS(IShellViewImpl, iface); 1539 1540 FIXME("(%p) stub\n",This); 1541 1542 return E_NOTIMPL; 1544 1543 } 1545 1544 … … 1553 1552 { 1554 1553 #if 0 1555 ICOM_THIS(IShellViewImpl, iface);1556 1557 FIXME("(%p)->(%p: hwnd=%x msg=%x lp=%lx wp=%x) stub\n",This,lpmsg, lpmsg->hwnd, lpmsg->message, lpmsg->lParam, lpmsg->wParam);1554 ICOM_THIS(IShellViewImpl, iface); 1555 1556 FIXME("(%p)->(%p: hwnd=%x msg=%x lp=%lx wp=%x) stub\n",This,lpmsg, lpmsg->hwnd, lpmsg->message, lpmsg->lParam, lpmsg->wParam); 1558 1557 #endif 1559 1560 if ((lpmsg->message>=WM_KEYFIRST) && (lpmsg->message>=WM_KEYLAST))1561 {1562 TRACE("-- key=0x04%x",lpmsg->wParam) ;1563 }1564 return S_FALSE; /* not handled */1558 1559 if ((lpmsg->message>=WM_KEYFIRST) && (lpmsg->message>=WM_KEYLAST)) 1560 { 1561 TRACE("-- key=0x04%x",lpmsg->wParam) ; 1562 } 1563 return S_FALSE; /* not handled */ 1565 1564 } 1566 1565 1567 1566 static HRESULT WINAPI IShellView_fnEnableModeless(IShellView * iface,BOOL fEnable) 1568 1567 { 1569 ICOM_THIS(IShellViewImpl, iface);1570 1571 FIXME("(%p) stub\n",This);1572 1573 return E_NOTIMPL;1568 ICOM_THIS(IShellViewImpl, iface); 1569 1570 FIXME("(%p) stub\n",This); 1571 1572 return E_NOTIMPL; 1574 1573 } 1575 1574 1576 1575 static HRESULT WINAPI IShellView_fnUIActivate(IShellView * iface,UINT uState) 1577 1576 { 1578 ICOM_THIS(IShellViewImpl, iface);1577 ICOM_THIS(IShellViewImpl, iface); 1579 1578 1580 1579 /* 1581 CHARszName[MAX_PATH];1580 CHAR szName[MAX_PATH]; 1582 1581 */ 1583 LRESULTlResult;1584 intnPartArray[1] = {-1};1585 1586 TRACE("(%p)->(state=%x) stub\n",This, uState);1587 1588 /*don't do anything if the state isn't really changing*/1589 if(This->uState == uState)1590 {1591 return S_OK;1592 }1593 1594 /*OnActivate handles the menu merging and internal state*/1595 ShellView_OnActivate(This, uState);1596 1597 /*only do This if we are active*/1598 if(uState != SVUIA_DEACTIVATE)1599 {1582 LRESULT lResult; 1583 int nPartArray[1] = {-1}; 1584 1585 TRACE("(%p)->(state=%x) stub\n",This, uState); 1586 1587 /*don't do anything if the state isn't really changing*/ 1588 if(This->uState == uState) 1589 { 1590 return S_OK; 1591 } 1592 1593 /*OnActivate handles the menu merging and internal state*/ 1594 ShellView_OnActivate(This, uState); 1595 1596 /*only do This if we are active*/ 1597 if(uState != SVUIA_DEACTIVATE) 1598 { 1600 1599 1601 1600 /* 1602 GetFolderPath is not a method of IShellFolder1603 IShellFolder_GetFolderPath( This->pSFParent, szName, sizeof(szName) );1601 GetFolderPath is not a method of IShellFolder 1602 IShellFolder_GetFolderPath( This->pSFParent, szName, sizeof(szName) ); 1604 1603 */ 1605 /* set the number of parts */1606 IShellBrowser_SendControlMsg(This->pShellBrowser, FCW_STATUS, SB_SETPARTS, 1,1607 (LPARAM)nPartArray, &lResult);1608 1609 /* set the text for the parts */1604 /* set the number of parts */ 1605 IShellBrowser_SendControlMsg(This->pShellBrowser, FCW_STATUS, SB_SETPARTS, 1, 1606 (LPARAM)nPartArray, &lResult); 1607 1608 /* set the text for the parts */ 1610 1609 /* 1611 IShellBrowser_SendControlMsg(This->pShellBrowser, FCW_STATUS, SB_SETTEXTA,1612 0, (LPARAM)szName, &lResult);1613 */ 1614 }1615 1616 return S_OK;1610 IShellBrowser_SendControlMsg(This->pShellBrowser, FCW_STATUS, SB_SETTEXTA, 1611 0, (LPARAM)szName, &lResult); 1612 */ 1613 } 1614 1615 return S_OK; 1617 1616 } 1618 1617 1619 1618 static HRESULT WINAPI IShellView_fnRefresh(IShellView * iface) 1620 1619 { 1621 ICOM_THIS(IShellViewImpl, iface);1622 1623 TRACE("(%p)\n",This);1624 1625 ListView_DeleteAllItems(This->hWndList);1626 ShellView_FillList(This);1627 1628 return S_OK;1620 ICOM_THIS(IShellViewImpl, iface); 1621 1622 TRACE("(%p)\n",This); 1623 1624 ListView_DeleteAllItems(This->hWndList); 1625 ShellView_FillList(This); 1626 1627 return S_OK; 1629 1628 } 1630 1629 1631 1630 static HRESULT WINAPI IShellView_fnCreateViewWindow( 1632 IShellView * iface,1633 IShellView *lpPrevView,1634 LPCFOLDERSETTINGS lpfs,1635 IShellBrowser * psb,1636 RECT * prcView,1637 HWND *phWnd)1638 { 1639 ICOM_THIS(IShellViewImpl, iface);1640 1641 WNDCLASSA wc;1642 *phWnd = 0;1643 1644 1645 TRACE("(%p)->(shlview=%p set=%p shlbrs=%p rec=%p hwnd=%p) incomplete\n",This, lpPrevView,lpfs, psb, prcView, phWnd);1646 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);1647 1648 /*set up the member variables*/1649 This->pShellBrowser = psb;1650 This->FolderSettings = *lpfs;1651 1652 /*get our parent window*/1653 IShellBrowser_AddRef(This->pShellBrowser);1654 IShellBrowser_GetWindow(This->pShellBrowser, &(This->hWndParent));1655 1656 /* try to get the ICommDlgBrowserInterface, adds a reference !!! */1657 This->pCommDlgBrowser=NULL;1658 if ( SUCCEEDED (IShellBrowser_QueryInterface( This->pShellBrowser, 1659 (REFIID)&IID_ICommDlgBrowser, (LPVOID*) &This->pCommDlgBrowser)))1660 {1661 TRACE("-- CommDlgBrowser\n");1662 }1663 1664 /*if our window class has not been registered, then do so*/1665 if(!GetClassInfoA(shell32_hInstance, SV_CLASS_NAME, &wc))1666 {1667 ZeroMemory(&wc, sizeof(wc));1668 wc.style= CS_HREDRAW | CS_VREDRAW;1669 wc.lpfnWndProc= (WNDPROC) ShellView_WndProc;1670 wc.cbClsExtra= 0;1671 wc.cbWndExtra= 0;1672 wc.hInstance= shell32_hInstance;1673 wc.hIcon= 0;1674 wc.hCursor= LoadCursorA (0, IDC_ARROWA);1675 wc.hbrBackground= (HBRUSH) (COLOR_WINDOW + 1);1676 wc.lpszMenuName= NULL;1677 wc.lpszClassName= SV_CLASS_NAME;1678 1679 if(!RegisterClassA(&wc))1680 return E_FAIL;1681 }1682 1683 *phWnd = CreateWindowExA(0,1684 SV_CLASS_NAME,1685 NULL,1686 WS_CHILD | WS_VISIBLE | WS_TABSTOP,1687 prcView->left,1688 prcView->top,1689 prcView->right - prcView->left,1690 prcView->bottom - prcView->top,1691 This->hWndParent,1692 0,1693 shell32_hInstance,1694 (LPVOID)This);1695 1696 CheckToolbar(This);1697 1698 if(!*phWnd) return E_FAIL;1699 1700 return S_OK;1631 IShellView * iface, 1632 IShellView *lpPrevView, 1633 LPCFOLDERSETTINGS lpfs, 1634 IShellBrowser * psb, 1635 RECT * prcView, 1636 HWND *phWnd) 1637 { 1638 ICOM_THIS(IShellViewImpl, iface); 1639 1640 WNDCLASSA wc; 1641 *phWnd = 0; 1642 1643 1644 TRACE("(%p)->(shlview=%p set=%p shlbrs=%p rec=%p hwnd=%p) incomplete\n",This, lpPrevView,lpfs, psb, prcView, phWnd); 1645 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); 1646 1647 /*set up the member variables*/ 1648 This->pShellBrowser = psb; 1649 This->FolderSettings = *lpfs; 1650 1651 /*get our parent window*/ 1652 IShellBrowser_AddRef(This->pShellBrowser); 1653 IShellBrowser_GetWindow(This->pShellBrowser, &(This->hWndParent)); 1654 1655 /* try to get the ICommDlgBrowserInterface, adds a reference !!! */ 1656 This->pCommDlgBrowser=NULL; 1657 if ( SUCCEEDED (IShellBrowser_QueryInterface( This->pShellBrowser, 1658 (REFIID)&IID_ICommDlgBrowser, (LPVOID*) &This->pCommDlgBrowser))) 1659 { 1660 TRACE("-- CommDlgBrowser\n"); 1661 } 1662 1663 /*if our window class has not been registered, then do so*/ 1664 if(!GetClassInfoA(shell32_hInstance, SV_CLASS_NAME, &wc)) 1665 { 1666 ZeroMemory(&wc, sizeof(wc)); 1667 wc.style = CS_HREDRAW | CS_VREDRAW; 1668 wc.lpfnWndProc = (WNDPROC) ShellView_WndProc; 1669 wc.cbClsExtra = 0; 1670 wc.cbWndExtra = 0; 1671 wc.hInstance = shell32_hInstance; 1672 wc.hIcon = 0; 1673 wc.hCursor = LoadCursorA (0, IDC_ARROWA); 1674 wc.hbrBackground = (HBRUSH) (COLOR_WINDOW + 1); 1675 wc.lpszMenuName = NULL; 1676 wc.lpszClassName = SV_CLASS_NAME; 1677 1678 if(!RegisterClassA(&wc)) 1679 return E_FAIL; 1680 } 1681 1682 *phWnd = CreateWindowExA(0, 1683 SV_CLASS_NAME, 1684 NULL, 1685 WS_CHILD | WS_VISIBLE | WS_TABSTOP, 1686 prcView->left, 1687 prcView->top, 1688 prcView->right - prcView->left, 1689 prcView->bottom - prcView->top, 1690 This->hWndParent, 1691 0, 1692 shell32_hInstance, 1693 (LPVOID)This); 1694 1695 CheckToolbar(This); 1696 1697 if(!*phWnd) return E_FAIL; 1698 1699 return S_OK; 1701 1700 } 1702 1701 1703 1702 static HRESULT WINAPI IShellView_fnDestroyViewWindow(IShellView * iface) 1704 1703 { 1705 ICOM_THIS(IShellViewImpl, iface);1706 1707 TRACE("(%p)\n",This);1708 1709 /*Make absolutely sure all our UI is cleaned up.*/1710 IShellView_UIActivate((IShellView*)This, SVUIA_DEACTIVATE);1711 1712 if(This->hMenu)1713 {1714 DestroyMenu(This->hMenu);1715 }1716 1717 DestroyWindow(This->hWnd);1718 IShellBrowser_Release(This->pShellBrowser);1719 1720 return S_OK;1704 ICOM_THIS(IShellViewImpl, iface); 1705 1706 TRACE("(%p)\n",This); 1707 1708 /*Make absolutely sure all our UI is cleaned up.*/ 1709 IShellView_UIActivate((IShellView*)This, SVUIA_DEACTIVATE); 1710 1711 if(This->hMenu) 1712 { 1713 DestroyMenu(This->hMenu); 1714 } 1715 1716 DestroyWindow(This->hWnd); 1717 IShellBrowser_Release(This->pShellBrowser); 1718 1719 return S_OK; 1721 1720 } 1722 1721 1723 1722 static HRESULT WINAPI IShellView_fnGetCurrentInfo(IShellView * iface, LPFOLDERSETTINGS lpfs) 1724 1723 { 1725 ICOM_THIS(IShellViewImpl, iface);1726 1727 TRACE("(%p)->(%p) vmode=%x flags=%x\n",This, lpfs, 1728 This->FolderSettings.ViewMode, This->FolderSettings.fFlags);1729 1730 if (!lpfs) return E_INVALIDARG;1731 1732 *lpfs = This->FolderSettings;1733 return NOERROR;1724 ICOM_THIS(IShellViewImpl, iface); 1725 1726 TRACE("(%p)->(%p) vmode=%x flags=%x\n",This, lpfs, 1727 This->FolderSettings.ViewMode, This->FolderSettings.fFlags); 1728 1729 if (!lpfs) return E_INVALIDARG; 1730 1731 *lpfs = This->FolderSettings; 1732 return NOERROR; 1734 1733 } 1735 1734 1736 1735 static HRESULT WINAPI IShellView_fnAddPropertySheetPages(IShellView * iface, DWORD dwReserved,LPFNADDPROPSHEETPAGE lpfn, LPARAM lparam) 1737 1736 { 1738 ICOM_THIS(IShellViewImpl, iface);1739 1740 FIXME("(%p) stub\n",This);1741 1742 return E_NOTIMPL;1737 ICOM_THIS(IShellViewImpl, iface); 1738 1739 FIXME("(%p) stub\n",This); 1740 1741 return E_NOTIMPL; 1743 1742 } 1744 1743 1745 1744 static HRESULT WINAPI IShellView_fnSaveViewState(IShellView * iface) 1746 1745 { 1747 ICOM_THIS(IShellViewImpl, iface);1748 1749 FIXME("(%p) stub\n",This);1750 1751 return S_OK;1746 ICOM_THIS(IShellViewImpl, iface); 1747 1748 FIXME("(%p) stub\n",This); 1749 1750 return S_OK; 1752 1751 } 1753 1752 1754 1753 static HRESULT WINAPI IShellView_fnSelectItem( 1755 IShellView * iface,1756 LPCITEMIDLIST pidl,1757 UINT uFlags)1758 { 1759 ICOM_THIS(IShellViewImpl, iface);1760 int i;1761 1762 TRACE("(%p)->(pidl=%p, 0x%08x) stub\n",This, pidl, uFlags);1763 1764 i = LV_FindItemByPidl(This, pidl);1765 1766 if (i != -1)1767 {1768 LVITEMA lvItem;1769 1770 if(uFlags & SVSI_ENSUREVISIBLE)1771 ListView_EnsureVisible(This->hWndList, i, 0);1754 IShellView * iface, 1755 LPCITEMIDLIST pidl, 1756 UINT uFlags) 1757 { 1758 ICOM_THIS(IShellViewImpl, iface); 1759 int i; 1760 1761 TRACE("(%p)->(pidl=%p, 0x%08x) stub\n",This, pidl, uFlags); 1762 1763 i = LV_FindItemByPidl(This, pidl); 1764 1765 if (i != -1) 1766 { 1767 LVITEMA lvItem; 1768 1769 if(uFlags & SVSI_ENSUREVISIBLE) 1770 ListView_EnsureVisible(This->hWndList, i, 0); 1772 1771 1773 1772 ZeroMemory(&lvItem, sizeof(LVITEMA)); 1774 lvItem.mask = LVIF_STATE;1775 lvItem.iItem = 0;1773 lvItem.mask = LVIF_STATE; 1774 lvItem.iItem = 0; 1776 1775 1777 1776 while(ListView_GetItemA(This->hWndList, &lvItem)) 1778 {1779 if (lvItem.iItem == i)1780 {1781 if (uFlags & SVSI_SELECT)1782 lvItem.state |= LVIS_SELECTED;1783 else1784 lvItem.state &= ~LVIS_SELECTED;1785 1786 if(uFlags & SVSI_FOCUSED)1787 lvItem.state &= ~LVIS_FOCUSED;1788 }1789 else1790 {1791 if (uFlags & SVSI_DESELECTOTHERS)1792 lvItem.state &= ~LVIS_SELECTED;1793 }1794 ListView_SetItemA(This->hWndList, &lvItem);1795 lvItem.iItem++;1796 }1797 1798 1799 if(uFlags & SVSI_EDIT)1800 ListView_EditLabelA(This->hWndList, i);1801 1802 }1803 return S_OK;1777 { 1778 if (lvItem.iItem == i) 1779 { 1780 if (uFlags & SVSI_SELECT) 1781 lvItem.state |= LVIS_SELECTED; 1782 else 1783 lvItem.state &= ~LVIS_SELECTED; 1784 1785 if(uFlags & SVSI_FOCUSED) 1786 lvItem.state &= ~LVIS_FOCUSED; 1787 } 1788 else 1789 { 1790 if (uFlags & SVSI_DESELECTOTHERS) 1791 lvItem.state &= ~LVIS_SELECTED; 1792 } 1793 ListView_SetItemA(This->hWndList, &lvItem); 1794 lvItem.iItem++; 1795 } 1796 1797 1798 if(uFlags & SVSI_EDIT) 1799 ListView_EditLabelA(This->hWndList, i); 1800 1801 } 1802 return S_OK; 1804 1803 } 1805 1804 1806 1805 static HRESULT WINAPI IShellView_fnGetItemObject(IShellView * iface, UINT uItem, REFIID riid, LPVOID *ppvOut) 1807 1806 { 1808 ICOM_THIS(IShellViewImpl, iface);1809 1810 TRACE("(%p)->(uItem=0x%08x,\n\tIID=%s, ppv=%p)\n",This, uItem, debugstr_guid(riid), ppvOut);1811 1812 *ppvOut = NULL;1813 1814 switch(uItem)1815 {1816 case SVGIO_BACKGROUND:1817 *ppvOut = ISvBgCm_Constructor(This->pSFParent);1818 break;1819 1820 case SVGIO_SELECTION:1821 ShellView_GetSelections(This);1822 IShellFolder_GetUIObjectOf(This->pSFParent, This->hWnd, This->cidl, This->apidl, riid, 0, ppvOut);1823 break;1824 }1825 TRACE("-- (%p)->(interface=%p)\n",This, *ppvOut);1826 1827 if(!*ppvOut) return E_OUTOFMEMORY;1828 1829 return S_OK;1807 ICOM_THIS(IShellViewImpl, iface); 1808 1809 TRACE("(%p)->(uItem=0x%08x,\n\tIID=%s, ppv=%p)\n",This, uItem, debugstr_guid(riid), ppvOut); 1810 1811 *ppvOut = NULL; 1812 1813 switch(uItem) 1814 { 1815 case SVGIO_BACKGROUND: 1816 *ppvOut = ISvBgCm_Constructor(This->pSFParent); 1817 break; 1818 1819 case SVGIO_SELECTION: 1820 ShellView_GetSelections(This); 1821 IShellFolder_GetUIObjectOf(This->pSFParent, This->hWnd, This->cidl, This->apidl, riid, 0, ppvOut); 1822 break; 1823 } 1824 TRACE("-- (%p)->(interface=%p)\n",This, *ppvOut); 1825 1826 if(!*ppvOut) return E_OUTOFMEMORY; 1827 1828 return S_OK; 1830 1829 } 1831 1830 1832 1831 static HRESULT WINAPI IShellView_fnEditItem( 1833 IShellView * iface,1834 LPITEMIDLIST pidl)1835 { 1836 ICOM_THIS(IShellViewImpl, iface);1837 int i;1838 1839 TRACE("(%p)->(pidl=%p)\n",This, pidl);1840 1841 i = LV_FindItemByPidl(This, pidl);1842 if (i != -1)1843 {1844 SetFocus(This->hWndList);1845 ListView_EditLabelA(This->hWndList, i);1846 }1847 return S_OK;1848 } 1849 1850 static struct ICOM_VTABLE(IShellView) svvt = 1851 { 1852 ICOM_MSVTABLE_COMPAT_DummyRTTIVALUE1853 IShellView_fnQueryInterface,1854 IShellView_fnAddRef,1855 IShellView_fnRelease,1856 IShellView_fnGetWindow,1857 IShellView_fnContextSensitiveHelp,1858 IShellView_fnTranslateAccelerator,1859 IShellView_fnEnableModeless,1860 IShellView_fnUIActivate,1861 IShellView_fnRefresh,1862 IShellView_fnCreateViewWindow,1863 IShellView_fnDestroyViewWindow,1864 IShellView_fnGetCurrentInfo,1865 IShellView_fnAddPropertySheetPages,1866 IShellView_fnSaveViewState,1867 IShellView_fnSelectItem,1868 IShellView_fnGetItemObject,1869 IShellView_fnEditItem1832 IShellView * iface, 1833 LPITEMIDLIST pidl) 1834 { 1835 ICOM_THIS(IShellViewImpl, iface); 1836 int i; 1837 1838 TRACE("(%p)->(pidl=%p)\n",This, pidl); 1839 1840 i = LV_FindItemByPidl(This, pidl); 1841 if (i != -1) 1842 { 1843 SetFocus(This->hWndList); 1844 ListView_EditLabelA(This->hWndList, i); 1845 } 1846 return S_OK; 1847 } 1848 1849 static struct ICOM_VTABLE(IShellView) svvt = 1850 { 1851 ICOM_MSVTABLE_COMPAT_DummyRTTIVALUE 1852 IShellView_fnQueryInterface, 1853 IShellView_fnAddRef, 1854 IShellView_fnRelease, 1855 IShellView_fnGetWindow, 1856 IShellView_fnContextSensitiveHelp, 1857 IShellView_fnTranslateAccelerator, 1858 IShellView_fnEnableModeless, 1859 IShellView_fnUIActivate, 1860 IShellView_fnRefresh, 1861 IShellView_fnCreateViewWindow, 1862 IShellView_fnDestroyViewWindow, 1863 IShellView_fnGetCurrentInfo, 1864 IShellView_fnAddPropertySheetPages, 1865 IShellView_fnSaveViewState, 1866 IShellView_fnSelectItem, 1867 IShellView_fnGetItemObject, 1868 IShellView_fnEditItem 1870 1869 }; 1871 1870 … … 1875 1874 */ 1876 1875 static HRESULT WINAPI ISVOleCmdTarget_QueryInterface( 1877 IOleCommandTarget *iface,1878 REFIIDiid,1879 LPVOID*ppvObj)1880 { 1881 _ICOM_THIS_From_IOleCommandTarget(IShellViewImpl, iface);1882 1883 return IShellFolder_QueryInterface((IShellFolder*)This, iid, ppvObj);1876 IOleCommandTarget * iface, 1877 REFIID iid, 1878 LPVOID* ppvObj) 1879 { 1880 _ICOM_THIS_From_IOleCommandTarget(IShellViewImpl, iface); 1881 1882 return IShellFolder_QueryInterface((IShellFolder*)This, iid, ppvObj); 1884 1883 } 1885 1884 … … 1888 1887 */ 1889 1888 static ULONG WINAPI ISVOleCmdTarget_AddRef( 1890 IOleCommandTarget *iface)1891 { 1892 _ICOM_THIS_From_IOleCommandTarget(IShellFolder, iface);1893 1894 return IShellFolder_AddRef((IShellFolder*)This);1889 IOleCommandTarget * iface) 1890 { 1891 _ICOM_THIS_From_IOleCommandTarget(IShellFolder, iface); 1892 1893 return IShellFolder_AddRef((IShellFolder*)This); 1895 1894 } 1896 1895 … … 1899 1898 */ 1900 1899 static ULONG WINAPI ISVOleCmdTarget_Release( 1901 IOleCommandTarget *iface)1902 { 1903 _ICOM_THIS_From_IOleCommandTarget(IShellViewImpl, iface);1904 1905 return IShellFolder_Release((IShellFolder*)This);1900 IOleCommandTarget * iface) 1901 { 1902 _ICOM_THIS_From_IOleCommandTarget(IShellViewImpl, iface); 1903 1904 return IShellFolder_Release((IShellFolder*)This); 1906 1905 } 1907 1906 … … 1910 1909 */ 1911 1910 static HRESULT WINAPI ISVOleCmdTarget_QueryStatus( 1912 IOleCommandTarget *iface,1913 const GUID* pguidCmdGroup,1914 ULONG cCmds, 1915 OLECMD * prgCmds,1916 OLECMDTEXT* pCmdText)1917 { 1918 _ICOM_THIS_From_IOleCommandTarget(IShellViewImpl, iface);1919 1920 FIXME("(%p)->(%p(%s) 0x%08lx %p %p\n",1911 IOleCommandTarget *iface, 1912 const GUID* pguidCmdGroup, 1913 ULONG cCmds, 1914 OLECMD * prgCmds, 1915 OLECMDTEXT* pCmdText) 1916 { 1917 _ICOM_THIS_From_IOleCommandTarget(IShellViewImpl, iface); 1918 1919 FIXME("(%p)->(%p(%s) 0x%08lx %p %p\n", 1921 1920 This, pguidCmdGroup, debugstr_guid(pguidCmdGroup), cCmds, prgCmds, pCmdText); 1922 return E_NOTIMPL;1921 return E_NOTIMPL; 1923 1922 } 1924 1923 … … 1929 1928 */ 1930 1929 static HRESULT WINAPI ISVOleCmdTarget_Exec( 1931 IOleCommandTarget *iface,1932 const GUID* pguidCmdGroup,1933 DWORD nCmdID,1934 DWORD nCmdexecopt,1935 VARIANT* pvaIn,1936 VARIANT* pvaOut)1937 { 1938 _ICOM_THIS_From_IOleCommandTarget(IShellViewImpl, iface);1939 1940 FIXME("(%p)->(\n\tTarget GUID:%s Command:0x%08lx Opt:0x%08lx %p %p)\n",1930 IOleCommandTarget *iface, 1931 const GUID* pguidCmdGroup, 1932 DWORD nCmdID, 1933 DWORD nCmdexecopt, 1934 VARIANT* pvaIn, 1935 VARIANT* pvaOut) 1936 { 1937 _ICOM_THIS_From_IOleCommandTarget(IShellViewImpl, iface); 1938 1939 FIXME("(%p)->(\n\tTarget GUID:%s Command:0x%08lx Opt:0x%08lx %p %p)\n", 1941 1940 This, debugstr_guid(pguidCmdGroup), nCmdID, nCmdexecopt, pvaIn, pvaOut); 1942 return E_NOTIMPL;1943 } 1944 1945 static ICOM_VTABLE(IOleCommandTarget) ctvt = 1946 { 1947 ICOM_MSVTABLE_COMPAT_DummyRTTIVALUE1948 ISVOleCmdTarget_QueryInterface,1949 ISVOleCmdTarget_AddRef,1950 ISVOleCmdTarget_Release,1951 ISVOleCmdTarget_QueryStatus,1952 ISVOleCmdTarget_Exec1941 return E_NOTIMPL; 1942 } 1943 1944 static ICOM_VTABLE(IOleCommandTarget) ctvt = 1945 { 1946 ICOM_MSVTABLE_COMPAT_DummyRTTIVALUE 1947 ISVOleCmdTarget_QueryInterface, 1948 ISVOleCmdTarget_AddRef, 1949 ISVOleCmdTarget_Release, 1950 ISVOleCmdTarget_QueryStatus, 1951 ISVOleCmdTarget_Exec 1953 1952 }; 1954 1953 … … 1958 1957 1959 1958 static HRESULT WINAPI ISVDropTarget_QueryInterface( 1960 IDropTarget *iface,1961 REFIID riid,1962 LPVOID *ppvObj)1963 { 1964 _ICOM_THIS_From_IDropTarget(IShellViewImpl, iface);1965 1966 TRACE("(%p)->(\n\tIID:\t%s,%p)\n",This,debugstr_guid(riid),ppvObj);1967 1968 return IShellFolder_QueryInterface((IShellFolder*)This, riid, ppvObj);1959 IDropTarget *iface, 1960 REFIID riid, 1961 LPVOID *ppvObj) 1962 { 1963 _ICOM_THIS_From_IDropTarget(IShellViewImpl, iface); 1964 1965 TRACE("(%p)->(\n\tIID:\t%s,%p)\n",This,debugstr_guid(riid),ppvObj); 1966 1967 return IShellFolder_QueryInterface((IShellFolder*)This, riid, ppvObj); 1969 1968 } 1970 1969 1971 1970 static ULONG WINAPI ISVDropTarget_AddRef( IDropTarget *iface) 1972 1971 { 1973 _ICOM_THIS_From_IDropTarget(IShellViewImpl, iface);1974 1975 TRACE("(%p)->(count=%lu)\n",This,This->ref);1976 1977 return IShellFolder_AddRef((IShellFolder*)This);1972 _ICOM_THIS_From_IDropTarget(IShellViewImpl, iface); 1973 1974 TRACE("(%p)->(count=%lu)\n",This,This->ref); 1975 1976 return IShellFolder_AddRef((IShellFolder*)This); 1978 1977 } 1979 1978 1980 1979 static ULONG WINAPI ISVDropTarget_Release( IDropTarget *iface) 1981 1980 { 1982 _ICOM_THIS_From_IDropTarget(IShellViewImpl, iface);1983 1984 TRACE("(%p)->(count=%lu)\n",This,This->ref);1985 1986 return IShellFolder_Release((IShellFolder*)This);1981 _ICOM_THIS_From_IDropTarget(IShellViewImpl, iface); 1982 1983 TRACE("(%p)->(count=%lu)\n",This,This->ref); 1984 1985 return IShellFolder_Release((IShellFolder*)This); 1987 1986 } 1988 1987 1989 1988 static HRESULT WINAPI ISVDropTarget_DragEnter( 1990 IDropTarget*iface,1991 IDataObject*pDataObject,1992 DWORDgrfKeyState,1993 POINTLpt,1994 DWORD*pdwEffect)1995 { 1996 1997 _ICOM_THIS_From_IDropTarget(IShellViewImpl, iface);1998 1999 FIXME("Stub: This=%p, DataObject=%p\n",This,pDataObject);2000 2001 return E_NOTIMPL;1989 IDropTarget *iface, 1990 IDataObject *pDataObject, 1991 DWORD grfKeyState, 1992 POINTL pt, 1993 DWORD *pdwEffect) 1994 { 1995 1996 _ICOM_THIS_From_IDropTarget(IShellViewImpl, iface); 1997 1998 FIXME("Stub: This=%p, DataObject=%p\n",This,pDataObject); 1999 2000 return E_NOTIMPL; 2002 2001 } 2003 2002 2004 2003 static HRESULT WINAPI ISVDropTarget_DragOver( 2005 IDropTarget*iface,2006 DWORDgrfKeyState,2007 POINTLpt,2008 DWORD*pdwEffect)2009 { 2010 _ICOM_THIS_From_IDropTarget(IShellViewImpl, iface);2011 2012 FIXME("Stub: This=%p\n",This);2013 2014 return E_NOTIMPL;2004 IDropTarget *iface, 2005 DWORD grfKeyState, 2006 POINTL pt, 2007 DWORD *pdwEffect) 2008 { 2009 _ICOM_THIS_From_IDropTarget(IShellViewImpl, iface); 2010 2011 FIXME("Stub: This=%p\n",This); 2012 2013 return E_NOTIMPL; 2015 2014 } 2016 2015 2017 2016 static HRESULT WINAPI ISVDropTarget_DragLeave( 2018 IDropTarget*iface)2019 { 2020 _ICOM_THIS_From_IDropTarget(IShellViewImpl, iface);2021 2022 FIXME("Stub: This=%p\n",This);2023 2024 return E_NOTIMPL;2017 IDropTarget *iface) 2018 { 2019 _ICOM_THIS_From_IDropTarget(IShellViewImpl, iface); 2020 2021 FIXME("Stub: This=%p\n",This); 2022 2023 return E_NOTIMPL; 2025 2024 } 2026 2025 2027 2026 static HRESULT WINAPI ISVDropTarget_Drop( 2028 IDropTarget*iface,2029 IDataObject*pDataObject,2030 DWORDgrfKeyState,2031 POINTLpt,2032 DWORD*pdwEffect)2033 { 2034 _ICOM_THIS_From_IDropTarget(IShellViewImpl, iface);2035 2036 FIXME("Stub: This=%p\n",This);2037 2038 return E_NOTIMPL;2039 } 2040 2041 static struct ICOM_VTABLE(IDropTarget) dtvt = 2042 { 2043 ICOM_MSVTABLE_COMPAT_DummyRTTIVALUE2044 ISVDropTarget_QueryInterface,2045 ISVDropTarget_AddRef,2046 ISVDropTarget_Release,2047 ISVDropTarget_DragEnter,2048 ISVDropTarget_DragOver,2049 ISVDropTarget_DragLeave,2050 ISVDropTarget_Drop2027 IDropTarget *iface, 2028 IDataObject* pDataObject, 2029 DWORD grfKeyState, 2030 POINTL pt, 2031 DWORD *pdwEffect) 2032 { 2033 _ICOM_THIS_From_IDropTarget(IShellViewImpl, iface); 2034 2035 FIXME("Stub: This=%p\n",This); 2036 2037 return E_NOTIMPL; 2038 } 2039 2040 static struct ICOM_VTABLE(IDropTarget) dtvt = 2041 { 2042 ICOM_MSVTABLE_COMPAT_DummyRTTIVALUE 2043 ISVDropTarget_QueryInterface, 2044 ISVDropTarget_AddRef, 2045 ISVDropTarget_Release, 2046 ISVDropTarget_DragEnter, 2047 ISVDropTarget_DragOver, 2048 ISVDropTarget_DragLeave, 2049 ISVDropTarget_Drop 2051 2050 }; 2052 2051 … … 2056 2055 2057 2056 static HRESULT WINAPI ISVDropSource_QueryInterface( 2058 IDropSource *iface,2059 REFIID riid,2060 LPVOID *ppvObj)2061 { 2062 _ICOM_THIS_From_IDropSource(IShellViewImpl, iface);2063 2064 TRACE("(%p)->(\n\tIID:\t%s,%p)\n",This,debugstr_guid(riid),ppvObj);2065 2066 return IShellFolder_QueryInterface((IShellFolder*)This, riid, ppvObj);2057 IDropSource *iface, 2058 REFIID riid, 2059 LPVOID *ppvObj) 2060 { 2061 _ICOM_THIS_From_IDropSource(IShellViewImpl, iface); 2062 2063 TRACE("(%p)->(\n\tIID:\t%s,%p)\n",This,debugstr_guid(riid),ppvObj); 2064 2065 return IShellFolder_QueryInterface((IShellFolder*)This, riid, ppvObj); 2067 2066 } 2068 2067 2069 2068 static ULONG WINAPI ISVDropSource_AddRef( IDropSource *iface) 2070 2069 { 2071 _ICOM_THIS_From_IDropSource(IShellViewImpl, iface);2072 2073 TRACE("(%p)->(count=%lu)\n",This,This->ref);2074 2075 return IShellFolder_AddRef((IShellFolder*)This);2070 _ICOM_THIS_From_IDropSource(IShellViewImpl, iface); 2071 2072 TRACE("(%p)->(count=%lu)\n",This,This->ref); 2073 2074 return IShellFolder_AddRef((IShellFolder*)This); 2076 2075 } 2077 2076 2078 2077 static ULONG WINAPI ISVDropSource_Release( IDropSource *iface) 2079 2078 { 2080 _ICOM_THIS_From_IDropSource(IShellViewImpl, iface);2081 2082 TRACE("(%p)->(count=%lu)\n",This,This->ref);2083 2084 return IShellFolder_Release((IShellFolder*)This);2079 _ICOM_THIS_From_IDropSource(IShellViewImpl, iface); 2080 2081 TRACE("(%p)->(count=%lu)\n",This,This->ref); 2082 2083 return IShellFolder_Release((IShellFolder*)This); 2085 2084 } 2086 2085 static HRESULT WINAPI ISVDropSource_QueryContinueDrag( 2087 IDropSource *iface,2088 BOOL fEscapePressed,2089 DWORD grfKeyState)2090 { 2091 _ICOM_THIS_From_IDropSource(IShellViewImpl, iface);2092 TRACE("(%p)\n",This);2093 2094 if (fEscapePressed)2095 return DRAGDROP_S_CANCEL;2096 else if (!(grfKeyState & MK_LBUTTON) && !(grfKeyState & MK_RBUTTON))2097 return DRAGDROP_S_DROP;2098 else2099 return NOERROR;2086 IDropSource *iface, 2087 BOOL fEscapePressed, 2088 DWORD grfKeyState) 2089 { 2090 _ICOM_THIS_From_IDropSource(IShellViewImpl, iface); 2091 TRACE("(%p)\n",This); 2092 2093 if (fEscapePressed) 2094 return DRAGDROP_S_CANCEL; 2095 else if (!(grfKeyState & MK_LBUTTON) && !(grfKeyState & MK_RBUTTON)) 2096 return DRAGDROP_S_DROP; 2097 else 2098 return NOERROR; 2100 2099 } 2101 2100 2102 2101 static HRESULT WINAPI ISVDropSource_GiveFeedback( 2103 IDropSource *iface,2104 DWORD dwEffect)2105 { 2106 _ICOM_THIS_From_IDropSource(IShellViewImpl, iface);2107 TRACE("(%p)\n",This);2108 2109 return DRAGDROP_S_USEDEFAULTCURSORS;2102 IDropSource *iface, 2103 DWORD dwEffect) 2104 { 2105 _ICOM_THIS_From_IDropSource(IShellViewImpl, iface); 2106 TRACE("(%p)\n",This); 2107 2108 return DRAGDROP_S_USEDEFAULTCURSORS; 2110 2109 } 2111 2110 2112 2111 static struct ICOM_VTABLE(IDropSource) dsvt = 2113 2112 { 2114 ICOM_MSVTABLE_COMPAT_DummyRTTIVALUE2115 ISVDropSource_QueryInterface,2116 ISVDropSource_AddRef,2117 ISVDropSource_Release,2118 ISVDropSource_QueryContinueDrag,2119 ISVDropSource_GiveFeedback2113 ICOM_MSVTABLE_COMPAT_DummyRTTIVALUE 2114 ISVDropSource_QueryInterface, 2115 ISVDropSource_AddRef, 2116 ISVDropSource_Release, 2117 ISVDropSource_QueryContinueDrag, 2118 ISVDropSource_GiveFeedback 2120 2119 }; 2121 2120 /********************************************************** … … 2124 2123 2125 2124 static HRESULT WINAPI ISVViewObject_QueryInterface( 2126 IViewObject *iface,2127 REFIID riid,2128 LPVOID *ppvObj)2129 { 2130 _ICOM_THIS_From_IViewObject(IShellViewImpl, iface);2131 2132 TRACE("(%p)->(\n\tIID:\t%s,%p)\n",This,debugstr_guid(riid),ppvObj);2133 2134 return IShellFolder_QueryInterface((IShellFolder*)This, riid, ppvObj);2125 IViewObject *iface, 2126 REFIID riid, 2127 LPVOID *ppvObj) 2128 { 2129 _ICOM_THIS_From_IViewObject(IShellViewImpl, iface); 2130 2131 TRACE("(%p)->(\n\tIID:\t%s,%p)\n",This,debugstr_guid(riid),ppvObj); 2132 2133 return IShellFolder_QueryInterface((IShellFolder*)This, riid, ppvObj); 2135 2134 } 2136 2135 2137 2136 static ULONG WINAPI ISVViewObject_AddRef( IViewObject *iface) 2138 2137 { 2139 _ICOM_THIS_From_IViewObject(IShellViewImpl, iface);2140 2141 TRACE("(%p)->(count=%lu)\n",This,This->ref);2142 2143 return IShellFolder_AddRef((IShellFolder*)This);2138 _ICOM_THIS_From_IViewObject(IShellViewImpl, iface); 2139 2140 TRACE("(%p)->(count=%lu)\n",This,This->ref); 2141 2142 return IShellFolder_AddRef((IShellFolder*)This); 2144 2143 } 2145 2144 2146 2145 static ULONG WINAPI ISVViewObject_Release( IViewObject *iface) 2147 2146 { 2148 _ICOM_THIS_From_IViewObject(IShellViewImpl, iface);2149 2150 TRACE("(%p)->(count=%lu)\n",This,This->ref);2151 2152 return IShellFolder_Release((IShellFolder*)This);2147 _ICOM_THIS_From_IViewObject(IShellViewImpl, iface); 2148 2149 TRACE("(%p)->(count=%lu)\n",This,This->ref); 2150 2151 return IShellFolder_Release((IShellFolder*)This); 2153 2152 } 2154 2153 2155 2154 static HRESULT WINAPI ISVViewObject_Draw( 2156 IViewObject*iface,2157 DWORD dwDrawAspect,2158 LONG lindex,2159 void* pvAspect,2160 DVTARGETDEVICE* ptd,2161 HDC hdcTargetDev,2162 HDC hdcDraw,2163 LPCRECTL lprcBounds,2164 LPCRECTL lprcWBounds, 2165 IVO_ContCallback pfnContinue,2166 DWORD dwContinue)2167 { 2168 2169 _ICOM_THIS_From_IViewObject(IShellViewImpl, iface);2170 2171 FIXME("Stub: This=%p\n",This);2172 2173 return E_NOTIMPL;2155 IViewObject *iface, 2156 DWORD dwDrawAspect, 2157 LONG lindex, 2158 void* pvAspect, 2159 DVTARGETDEVICE* ptd, 2160 HDC hdcTargetDev, 2161 HDC hdcDraw, 2162 LPCRECTL lprcBounds, 2163 LPCRECTL lprcWBounds, 2164 IVO_ContCallback pfnContinue, 2165 DWORD dwContinue) 2166 { 2167 2168 _ICOM_THIS_From_IViewObject(IShellViewImpl, iface); 2169 2170 FIXME("Stub: This=%p\n",This); 2171 2172 return E_NOTIMPL; 2174 2173 } 2175 2174 static HRESULT WINAPI ISVViewObject_GetColorSet( 2176 IViewObject*iface,2177 DWORD dwDrawAspect,2178 LONG lindex,2179 void *pvAspect,2180 DVTARGETDEVICE* ptd,2181 HDC hicTargetDevice,2182 LOGPALETTE** ppColorSet)2183 { 2184 2185 _ICOM_THIS_From_IViewObject(IShellViewImpl, iface);2186 2187 FIXME("Stub: This=%p\n",This);2188 2189 return E_NOTIMPL;2175 IViewObject *iface, 2176 DWORD dwDrawAspect, 2177 LONG lindex, 2178 void *pvAspect, 2179 DVTARGETDEVICE* ptd, 2180 HDC hicTargetDevice, 2181 LOGPALETTE** ppColorSet) 2182 { 2183 2184 _ICOM_THIS_From_IViewObject(IShellViewImpl, iface); 2185 2186 FIXME("Stub: This=%p\n",This); 2187 2188 return E_NOTIMPL; 2190 2189 } 2191 2190 static HRESULT WINAPI ISVViewObject_Freeze( 2192 IViewObject*iface,2193 DWORD dwDrawAspect,2194 LONG lindex,2195 void* pvAspect,2196 DWORD* pdwFreeze)2197 { 2198 2199 _ICOM_THIS_From_IViewObject(IShellViewImpl, iface);2200 2201 FIXME("Stub: This=%p\n",This);2202 2203 return E_NOTIMPL;2191 IViewObject *iface, 2192 DWORD dwDrawAspect, 2193 LONG lindex, 2194 void* pvAspect, 2195 DWORD* pdwFreeze) 2196 { 2197 2198 _ICOM_THIS_From_IViewObject(IShellViewImpl, iface); 2199 2200 FIXME("Stub: This=%p\n",This); 2201 2202 return E_NOTIMPL; 2204 2203 } 2205 2204 static HRESULT WINAPI ISVViewObject_Unfreeze( 2206 IViewObject*iface,2207 DWORD dwFreeze)2208 { 2209 2210 _ICOM_THIS_From_IViewObject(IShellViewImpl, iface);2211 2212 FIXME("Stub: This=%p\n",This);2213 2214 return E_NOTIMPL;2205 IViewObject *iface, 2206 DWORD dwFreeze) 2207 { 2208 2209 _ICOM_THIS_From_IViewObject(IShellViewImpl, iface); 2210 2211 FIXME("Stub: This=%p\n",This); 2212 2213 return E_NOTIMPL; 2215 2214 } 2216 2215 static HRESULT WINAPI ISVViewObject_SetAdvise( 2217 IViewObject*iface,2218 DWORD aspects,2219 DWORD advf,2220 IAdviseSink* pAdvSink)2221 { 2222 2223 _ICOM_THIS_From_IViewObject(IShellViewImpl, iface);2224 2225 FIXME("Stub: This=%p\n",This);2226 2227 return E_NOTIMPL;2216 IViewObject *iface, 2217 DWORD aspects, 2218 DWORD advf, 2219 IAdviseSink* pAdvSink) 2220 { 2221 2222 _ICOM_THIS_From_IViewObject(IShellViewImpl, iface); 2223 2224 FIXME("Stub: This=%p\n",This); 2225 2226 return E_NOTIMPL; 2228 2227 } 2229 2228 static HRESULT WINAPI ISVViewObject_GetAdvise( 2230 IViewObject*iface,2231 DWORD* pAspects,2232 DWORD* pAdvf,2233 IAdviseSink** ppAdvSink)2234 { 2235 2236 _ICOM_THIS_From_IViewObject(IShellViewImpl, iface);2237 2238 FIXME("Stub: This=%p\n",This);2239 2240 return E_NOTIMPL;2241 } 2242 2243 2244 static struct ICOM_VTABLE(IViewObject) vovt = 2245 { 2246 ICOM_MSVTABLE_COMPAT_DummyRTTIVALUE2247 ISVViewObject_QueryInterface,2248 ISVViewObject_AddRef,2249 ISVViewObject_Release,2250 ISVViewObject_Draw,2251 ISVViewObject_GetColorSet,2252 ISVViewObject_Freeze,2253 ISVViewObject_Unfreeze,2254 ISVViewObject_SetAdvise,2255 ISVViewObject_GetAdvise2229 IViewObject *iface, 2230 DWORD* pAspects, 2231 DWORD* pAdvf, 2232 IAdviseSink** ppAdvSink) 2233 { 2234 2235 _ICOM_THIS_From_IViewObject(IShellViewImpl, iface); 2236 2237 FIXME("Stub: This=%p\n",This); 2238 2239 return E_NOTIMPL; 2240 } 2241 2242 2243 static struct ICOM_VTABLE(IViewObject) vovt = 2244 { 2245 ICOM_MSVTABLE_COMPAT_DummyRTTIVALUE 2246 ISVViewObject_QueryInterface, 2247 ISVViewObject_AddRef, 2248 ISVViewObject_Release, 2249 ISVViewObject_Draw, 2250 ISVViewObject_GetColorSet, 2251 ISVViewObject_Freeze, 2252 ISVViewObject_Unfreeze, 2253 ISVViewObject_SetAdvise, 2254 ISVViewObject_GetAdvise 2256 2255 }; 2257 2256
Note:
See TracChangeset
for help on using the changeset viewer.
