Changeset 1145 for trunk/src/shell32
- Timestamp:
- Oct 5, 1999, 9:33:37 PM (26 years ago)
- Location:
- trunk/src/shell32/new
- Files:
-
- 5 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/shell32/new/brsfolder.cpp
r1122 r1145 1 /* $Id: brsfolder.cpp,v 1.5 1999-10-05 19:33:36 phaller Exp $ */ 2 3 /* 4 * Win32 SHELL32 for OS/2 5 * 6 * Copyright 1997 Marcus Meissner 7 * Copyright 1999 Patrick Haller (haller@zebra.fh-weingarten.de) 8 * Project Odin Software License can be found in LICENSE.TXT 9 * 10 */ 11 12 13 /***************************************************************************** 14 * Includes * 15 *****************************************************************************/ 16 1 17 #include <stdlib.h> 2 18 #include <string.h> 3 19 #include <odin.h> 20 #include <odinwrap.h> 21 #include <os2sel.h> 4 22 5 23 #define ICOM_CINTERFACE 1 … … 31 49 32 50 33 DEFAULT_DEBUG_CHANNEL(shell) 34 35 #define IDD_TREEVIEW 99 36 37 static HWND hwndTreeView; 51 /***************************************************************************** 52 * Local Variables * 53 *****************************************************************************/ 54 55 ODINDEBUGCHANNEL(shell32-brsfolder) 56 57 #define IDD_TREEVIEW 99 58 59 static HWND hwndTreeView; 38 60 static LPBROWSEINFOA lpBrowseInfo; 39 static LPITEMIDLIST 61 static LPITEMIDLIST pidlRet; 40 62 41 63 static void FillTreeView(LPSHELLFOLDER lpsf, LPITEMIDLIST lpifq, HTREEITEM hParent); 42 64 65 66 /***************************************************************************** 67 * Implementation * 68 *****************************************************************************/ 69 43 70 static void InitializeTreeView(HWND hwndParent) 44 71 { 45 HIMAGELIST hImageList; 46 IShellFolder * lpsf; 47 HRESULT hr; 48 49 hwndTreeView = GetDlgItem (hwndParent, IDD_TREEVIEW); 50 Shell_GetImageList(NULL, &hImageList); 51 52 TRACE("dlg=%x tree=%x\n", hwndParent, hwndTreeView ); 53 54 if (hImageList && hwndTreeView) 55 { TreeView_SetImageList(hwndTreeView, hImageList, 0); 56 } 57 58 hr = SHGetDesktopFolder(&lpsf); 59 60 if (SUCCEEDED(hr) && hwndTreeView) 61 { TreeView_DeleteAllItems(hwndTreeView); 62 FillTreeView(lpsf, NULL, TVI_ROOT); 63 } 64 65 if (SUCCEEDED(hr)) 66 { IShellFolder_Release(lpsf); 67 } 72 HIMAGELIST hImageList; 73 IShellFolder * lpsf; 74 HRESULT hr; 75 76 dprintf(("SHELL32:brsfolder:InitializeTreeView(%08xh)\n", 77 hwndParent)); 78 79 hwndTreeView = GetDlgItem (hwndParent, IDD_TREEVIEW); 80 Shell_GetImageList(NULL, &hImageList); 81 82 if (hImageList && hwndTreeView) 83 { TreeView_SetImageList(hwndTreeView, hImageList, 0); 84 } 85 86 hr = SHGetDesktopFolder(&lpsf); 87 88 if (SUCCEEDED(hr) && hwndTreeView) 89 { TreeView_DeleteAllItems(hwndTreeView); 90 FillTreeView(lpsf, NULL, TVI_ROOT); 91 } 92 93 if (SUCCEEDED(hr)) 94 { IShellFolder_Release(lpsf); 95 } 68 96 } 69 97 70 98 static int GetIcon(LPITEMIDLIST lpi, UINT uFlags) 71 { SHFILEINFOA sfi; 72 SHGetFileInfoA((LPCSTR)lpi,0,&sfi, sizeof(SHFILEINFOA), uFlags); 73 return sfi.iIcon; 99 { 100 SHFILEINFOA sfi; 101 102 dprintf(("SHELL32:brsfolder:GetIcon(%08xh,%08xh)\n", 103 lpi, 104 uFlags)); 105 106 SHGetFileInfoA((LPCSTR)lpi,0,&sfi, sizeof(SHFILEINFOA), uFlags); 107 return sfi.iIcon; 74 108 } 75 109 76 110 static void GetNormalAndSelectedIcons(LPITEMIDLIST lpifq,LPTVITEMA lpTV_ITEM) 77 { TRACE("%p %p\n",lpifq, lpTV_ITEM); 78 79 lpTV_ITEM->iImage = GetIcon(lpifq, SHGFI_PIDL | SHGFI_SYSICONINDEX | SHGFI_SMALLICON); 80 lpTV_ITEM->iSelectedImage = GetIcon(lpifq, SHGFI_PIDL | SHGFI_SYSICONINDEX | SHGFI_SMALLICON | SHGFI_OPENICON); 81 82 return; 111 { 112 dprintf(("SHELL32:brsfolder:GetNormalAndSelectedIcons(%08xh,%08xh)\n", 113 lpifq, 114 lpTV_ITEM)); 115 116 lpTV_ITEM->iImage = GetIcon(lpifq, SHGFI_PIDL | SHGFI_SYSICONINDEX | SHGFI_SMALLICON); 117 lpTV_ITEM->iSelectedImage = GetIcon(lpifq, SHGFI_PIDL | SHGFI_SYSICONINDEX | SHGFI_SMALLICON | SHGFI_OPENICON); 118 119 return; 83 120 } 84 121 … … 92 129 static BOOL GetName(LPSHELLFOLDER lpsf, LPITEMIDLIST lpi, DWORD dwFlags, LPSTR lpFriendlyName) 93 130 { 94 BOOL bSuccess=TRUE; 95 STRRET str; 96 97 TRACE("%p %p %lx %p\n", lpsf, lpi, dwFlags, lpFriendlyName); 98 if (SUCCEEDED(IShellFolder_GetDisplayNameOf(lpsf, lpi, dwFlags, &str))) 99 { 100 if(FAILED(StrRetToStrNA (lpFriendlyName, MAX_PATH, &str, lpi))) 101 { 102 bSuccess = FALSE; 103 } 104 } 105 else 106 bSuccess = FALSE; 107 108 TRACE("-- %s\n",lpFriendlyName); 109 return bSuccess; 131 BOOL bSuccess=TRUE; 132 STRRET str; 133 134 dprintf(("SHELL32:brsfolder:GetName(%08xh,%08xh,%08xh,%08xh)\n", 135 lpsf, 136 lpi, 137 dwFlags, 138 lpFriendlyName)); 139 140 if (SUCCEEDED(IShellFolder_GetDisplayNameOf(lpsf, lpi, dwFlags, &str))) 141 { 142 if(FAILED(StrRetToStrNA (lpFriendlyName, MAX_PATH, &str, lpi))) 143 { 144 bSuccess = FALSE; 145 } 146 } 147 else 148 bSuccess = FALSE; 149 150 TRACE("-- %s\n",lpFriendlyName); 151 return bSuccess; 110 152 } 111 153 112 154 static void FillTreeView(IShellFolder * lpsf, LPITEMIDLIST pidl, HTREEITEM hParent) 113 155 { 114 TVITEMA tvi; 115 TVINSERTSTRUCTA tvins; 116 HTREEITEM hPrev = 0; 117 LPENUMIDLIST lpe=0; 118 LPITEMIDLIST pidlTemp=0; 119 LPTV_ITEMDATA lptvid=0; 120 ULONG ulFetched; 121 HRESULT hr; 122 char szBuff[256]; 123 HWND hwnd=GetParent(hwndTreeView); 124 125 TRACE("%p %p %x\n",lpsf, pidl, (INT)hParent); 126 SetCapture(GetParent(hwndTreeView)); 127 SetCursor(LoadCursorA(0, IDC_WAITA)); 128 129 hr=IShellFolder_EnumObjects(lpsf,hwnd, SHCONTF_FOLDERS | SHCONTF_NONFOLDERS,&lpe); 130 131 if (SUCCEEDED(hr)) 132 { while (NOERROR == IEnumIDList_Next(lpe,1,&pidlTemp,&ulFetched)) 133 { ULONG ulAttrs = SFGAO_HASSUBFOLDER | SFGAO_FOLDER; 134 IShellFolder_GetAttributesOf(lpsf, 1, &pidlTemp, &ulAttrs); 135 if (ulAttrs & (SFGAO_HASSUBFOLDER | SFGAO_FOLDER)) 136 { if (ulAttrs & SFGAO_FOLDER) 137 { tvi.mask = TVIF_TEXT | TVIF_IMAGE | TVIF_SELECTEDIMAGE | TVIF_PARAM; 138 139 if (ulAttrs & SFGAO_HASSUBFOLDER) 140 { tvi.cChildren=1; 141 tvi.mask |= TVIF_CHILDREN; 142 } 143 144 if (! ( lptvid = (LPTV_ITEMDATA)SHAlloc(sizeof(TV_ITEMDATA)) ) ) 145 goto Done; 146 147 if (!GetName(lpsf, pidlTemp, SHGDN_NORMAL, szBuff)) 148 goto Done; 149 150 tvi.pszText = szBuff; 151 tvi.cchTextMax = MAX_PATH; 152 tvi.lParam = (LPARAM)lptvid; 153 154 IShellFolder_AddRef(lpsf); 155 lptvid->lpsfParent = lpsf; 156 lptvid->lpi = ILClone(pidlTemp); 157 lptvid->lpifq = ILCombine(pidl, pidlTemp); 158 GetNormalAndSelectedIcons(lptvid->lpifq, &tvi); 159 160 tvins.DUMMYUNIONNAME.item = tvi; 161 tvins.hInsertAfter = hPrev; 162 tvins.hParent = hParent; 163 164 hPrev = (HTREEITEM)TreeView_InsertItemA (hwndTreeView, &tvins); 165 166 } 167 } 168 SHFree(pidlTemp); /* Finally, free the pidl that the shell gave us... */ 169 pidlTemp=0; 170 } 171 } 156 TVITEMA tvi; 157 TVINSERTSTRUCTA tvins; 158 HTREEITEM hPrev = 0; 159 LPENUMIDLIST lpe=0; 160 LPITEMIDLIST pidlTemp=0; 161 LPTV_ITEMDATA lptvid=0; 162 ULONG ulFetched; 163 HRESULT hr; 164 char szBuff[256]; 165 HWND hwnd=GetParent(hwndTreeView); 166 167 dprintf(("SHELL32:brsfolder:FillTreeView(%08xh,%08xh,%08xh)\n", 168 lpsf, 169 pidl, 170 hParent)); 171 172 SetCapture(GetParent(hwndTreeView)); 173 SetCursor(LoadCursorA(0, IDC_WAITA)); 174 175 hr=IShellFolder_EnumObjects(lpsf,hwnd, SHCONTF_FOLDERS | SHCONTF_NONFOLDERS,&lpe); 176 177 if (SUCCEEDED(hr)) 178 { while (NOERROR == IEnumIDList_Next(lpe,1,&pidlTemp,&ulFetched)) 179 { ULONG ulAttrs = SFGAO_HASSUBFOLDER | SFGAO_FOLDER; 180 IShellFolder_GetAttributesOf(lpsf, 1, &pidlTemp, &ulAttrs); 181 if (ulAttrs & (SFGAO_HASSUBFOLDER | SFGAO_FOLDER)) 182 { if (ulAttrs & SFGAO_FOLDER) 183 { tvi.mask = TVIF_TEXT | TVIF_IMAGE | TVIF_SELECTEDIMAGE | TVIF_PARAM; 184 185 if (ulAttrs & SFGAO_HASSUBFOLDER) 186 { tvi.cChildren=1; 187 tvi.mask |= TVIF_CHILDREN; 188 } 189 190 if (! ( lptvid = (LPTV_ITEMDATA)SHAlloc(sizeof(TV_ITEMDATA)) ) ) 191 goto Done; 192 193 if (!GetName(lpsf, pidlTemp, SHGDN_NORMAL, szBuff)) 194 goto Done; 195 196 tvi.pszText = szBuff; 197 tvi.cchTextMax = MAX_PATH; 198 tvi.lParam = (LPARAM)lptvid; 199 200 IShellFolder_AddRef(lpsf); 201 lptvid->lpsfParent = lpsf; 202 lptvid->lpi = ILClone(pidlTemp); 203 lptvid->lpifq = ILCombine(pidl, pidlTemp); 204 GetNormalAndSelectedIcons(lptvid->lpifq, &tvi); 205 206 tvins.DUMMYUNIONNAME.item = tvi; 207 tvins.hInsertAfter = hPrev; 208 tvins.hParent = hParent; 209 210 hPrev = (HTREEITEM)TreeView_InsertItemA (hwndTreeView, &tvins); 211 212 } 213 } 214 SHFree(pidlTemp); /* Finally, free the pidl that the shell gave us... */ 215 pidlTemp=0; 216 } 217 } 172 218 173 219 Done: 174 175 176 177 178 179 180 220 ReleaseCapture(); 221 SetCursor(LoadCursorA(0, IDC_ARROWA)); 222 223 if (lpe) 224 lpe->lpvtbl->fnRelease(lpe); 225 if (pidlTemp ) 226 SHFree(pidlTemp); 181 227 } 182 228 183 229 static LRESULT MsgNotify(HWND hWnd, UINT CtlID, LPNMHDR lpnmh) 184 { 185 NMTREEVIEWA *pnmtv = (NMTREEVIEWA *)lpnmh; 186 LPTV_ITEMDATA lptvid; /* Long pointer to TreeView item data */ 187 IShellFolder * lpsf2=0; 188 189 190 TRACE("%x %x %p msg=%x\n", hWnd, CtlID, lpnmh, pnmtv->hdr.code); 191 192 switch (pnmtv->hdr.idFrom) 193 { case IDD_TREEVIEW: 194 switch (pnmtv->hdr.code) 195 { case TVN_DELETEITEM: 196 { FIXME("TVN_DELETEITEM\n"); 197 lptvid=(LPTV_ITEMDATA)pnmtv->itemOld.lParam; 198 IShellFolder_Release(lptvid->lpsfParent); 199 SHFree(lptvid->lpi); 200 SHFree(lptvid->lpifq); 201 SHFree(lptvid); 202 } 203 break; 204 205 case TVN_ITEMEXPANDING: 206 { FIXME("TVN_ITEMEXPANDING\n"); 207 if ((pnmtv->itemNew.state & TVIS_EXPANDEDONCE)) 208 break; 209 210 lptvid=(LPTV_ITEMDATA)pnmtv->itemNew.lParam; 211 if (SUCCEEDED(IShellFolder_BindToObject(lptvid->lpsfParent, lptvid->lpi,0,(REFIID)&IID_IShellFolder,(LPVOID *)&lpsf2))) 212 { FillTreeView( lpsf2, lptvid->lpifq, pnmtv->itemNew.hItem ); 213 } 214 TreeView_SortChildren(hwndTreeView, pnmtv->itemNew.hItem, FALSE); 215 } 216 break; 217 case TVN_SELCHANGED: 218 lptvid=(LPTV_ITEMDATA)pnmtv->itemNew.lParam; 219 pidlRet = lptvid->lpifq; 220 break; 221 222 default: 223 FIXME("unhandled\n"); 224 break; 225 } 226 break; 227 228 default: 229 break; 230 } 231 232 return 0; 230 { 231 NMTREEVIEWA *pnmtv = (NMTREEVIEWA *)lpnmh; 232 LPTV_ITEMDATA lptvid; /* Long pointer to TreeView item data */ 233 IShellFolder * lpsf2=0; 234 235 236 dprintf(("SHELL32:brsfolder:MsgNotify(%08xh,%08xh,%08xh)\n", 237 hWnd, 238 CtlID, 239 lpnmh)); 240 241 switch (pnmtv->hdr.idFrom) 242 { case IDD_TREEVIEW: 243 switch (pnmtv->hdr.code) 244 { case TVN_DELETEITEM: 245 { FIXME("TVN_DELETEITEM\n"); 246 lptvid=(LPTV_ITEMDATA)pnmtv->itemOld.lParam; 247 IShellFolder_Release(lptvid->lpsfParent); 248 SHFree(lptvid->lpi); 249 SHFree(lptvid->lpifq); 250 SHFree(lptvid); 251 } 252 break; 253 254 case TVN_ITEMEXPANDING: 255 { FIXME("TVN_ITEMEXPANDING\n"); 256 if ((pnmtv->itemNew.state & TVIS_EXPANDEDONCE)) 257 break; 258 259 lptvid=(LPTV_ITEMDATA)pnmtv->itemNew.lParam; 260 if (SUCCEEDED(IShellFolder_BindToObject(lptvid->lpsfParent, lptvid->lpi,0,(REFIID)&IID_IShellFolder,(LPVOID *)&lpsf2))) 261 { FillTreeView( lpsf2, lptvid->lpifq, pnmtv->itemNew.hItem ); 262 } 263 TreeView_SortChildren(hwndTreeView, pnmtv->itemNew.hItem, FALSE); 264 } 265 break; 266 case TVN_SELCHANGED: 267 lptvid=(LPTV_ITEMDATA)pnmtv->itemNew.lParam; 268 pidlRet = lptvid->lpifq; 269 break; 270 271 default: 272 FIXME("unhandled\n"); 273 break; 274 } 275 break; 276 277 default: 278 break; 279 } 280 281 return 0; 233 282 } 234 283 … … 237 286 * BrsFolderDlgProc32 (not an exported API function) 238 287 */ 239 static BOOL WINAPI BrsFolderDlgProc( HWND hWnd, UINT msg, WPARAM wParam, 240 LPARAM lParam ) 241 { TRACE("hwnd=%i msg=%i 0x%08x 0x%08lx\n", hWnd, msg, wParam, lParam ); 242 243 switch(msg) 244 { case WM_INITDIALOG: 245 pidlRet = NULL; 246 lpBrowseInfo = (LPBROWSEINFOA) lParam; 247 if (lpBrowseInfo->lpfn) 248 FIXME("Callbacks not implemented\n"); 249 if (lpBrowseInfo->ulFlags) 250 FIXME("flag %x not implemented\n", lpBrowseInfo->ulFlags); 251 if (lpBrowseInfo->lpszTitle) 252 FIXME("title %s not displayed\n", lpBrowseInfo->lpszTitle); 253 if ( lpBrowseInfo->pidlRoot ) 254 FIXME("root is desktop\n"); 255 256 InitializeTreeView ( hWnd); 257 return 1; 258 259 case WM_NOTIFY: 260 MsgNotify( hWnd, (UINT)wParam, (LPNMHDR)lParam); 261 break; 262 263 case WM_COMMAND: 264 switch (wParam) 265 { case IDOK: 266 pdump ( pidlRet ); 267 SHGetPathFromIDListA(pidlRet, lpBrowseInfo->pszDisplayName); 268 EndDialog(hWnd, (DWORD) ILClone(pidlRet)); 269 return TRUE; 270 271 case IDCANCEL: 272 EndDialog(hWnd, 0); 273 return TRUE; 274 } 275 break; 276 } 277 return 0; 288 ODINFUNCTION4(BOOL, BrsFolderDlgProc, HWND, hWnd, 289 UINT, msg, 290 WPARAM, wParam, 291 LPARAM, lParam) 292 { 293 switch(msg) 294 { case WM_INITDIALOG: 295 pidlRet = NULL; 296 lpBrowseInfo = (LPBROWSEINFOA) lParam; 297 if (lpBrowseInfo->lpfn) 298 FIXME("Callbacks not implemented\n"); 299 if (lpBrowseInfo->ulFlags) 300 FIXME("flag %x not implemented\n", lpBrowseInfo->ulFlags); 301 if (lpBrowseInfo->lpszTitle) 302 FIXME("title %s not displayed\n", lpBrowseInfo->lpszTitle); 303 if ( lpBrowseInfo->pidlRoot ) 304 FIXME("root is desktop\n"); 305 306 InitializeTreeView ( hWnd); 307 return 1; 308 309 case WM_NOTIFY: 310 MsgNotify( hWnd, (UINT)wParam, (LPNMHDR)lParam); 311 break; 312 313 case WM_COMMAND: 314 switch (wParam) 315 { case IDOK: 316 pdump ( pidlRet ); 317 SHGetPathFromIDListA(pidlRet, lpBrowseInfo->pszDisplayName); 318 EndDialog(hWnd, (DWORD) ILClone(pidlRet)); 319 return TRUE; 320 321 case IDCANCEL: 322 EndDialog(hWnd, 0); 323 return TRUE; 324 } 325 break; 326 } 327 return 0; 278 328 } 279 329 … … 282 332 * 283 333 */ 284 LPITEMIDLIST WINAPI SHBrowseForFolderA (LPBROWSEINFOAlpbi)285 { 286 287 288 289 290 291 } 334 ODINFUNCTION1(LPITEMIDLIST, SHBrowseForFolderA, LPBROWSEINFOA, lpbi) 335 { 336 TRACE("(%lx,%s) empty stub!\n", (DWORD)lpbi, lpbi->lpszTitle); 337 338 return (LPITEMIDLIST) DialogBoxParamA( shell32_hInstance, 339 "SHBRSFORFOLDER_MSGBOX", 0, 340 BrsFolderDlgProc, (INT)lpbi ); 341 } -
trunk/src/shell32/new/classes.cpp
r791 r1145 1 /* $Id: classes.cpp,v 1.2 1999-10-05 19:33:36 phaller Exp $ */ 2 1 3 /* 2 * file type mapping 3 * (HKEY_CLASSES_ROOT - Stuff) 4 * Win32 SHELL32 for OS/2 4 5 * 6 * Copyright 1997 Marcus Meissner 7 * Copyright 1999 Patrick Haller (haller@zebra.fh-weingarten.de) 8 * Project Odin Software License can be found in LICENSE.TXT 5 9 * 6 10 */ 11 12 /* 13 * file type mapping 14 * (HKEY_CLASSES_ROOT - Stuff) 15 */ 16 17 18 /***************************************************************************** 19 * Includes * 20 *****************************************************************************/ 21 7 22 #include <stdlib.h> 8 23 #include <string.h> 9 24 #include <odin.h> 25 #include <odinwrap.h> 26 #include <os2sel.h> 10 27 11 28 #define ICOM_CINTERFACE 1 … … 23 40 #include <misc.h> 24 41 25 DEFAULT_DEBUG_CHANNEL(shell) 42 43 /***************************************************************************** 44 * Local Variables * 45 *****************************************************************************/ 46 47 ODINDEBUGCHANNEL(shell32-classes) 26 48 27 49 #define MAX_EXTENSION_LENGTH 20 28 50 51 52 /***************************************************************************** 53 * Implementation * 54 *****************************************************************************/ 55 29 56 BOOL HCR_MapTypeToValue ( LPCSTR szExtension, LPSTR szFileType, LONG len, BOOL bPrependDot) 30 { HKEY hkey; 31 char szTemp[MAX_EXTENSION_LENGTH + 2]; 32 33 TRACE("%s %p\n",szExtension, szFileType ); 34 35 if (bPrependDot) 36 strcpy(szTemp, "."); 37 38 lstrcpynA(szTemp+((bPrependDot)?1:0), szExtension, MAX_EXTENSION_LENGTH); 39 40 if (RegOpenKeyExA(HKEY_CLASSES_ROOT,szTemp,0,0x02000000,&hkey)) 41 { return FALSE; 42 } 43 44 if (RegQueryValueA(hkey,NULL,szFileType,&len)) 45 { RegCloseKey(hkey); 46 return FALSE; 47 } 48 49 RegCloseKey(hkey); 50 51 TRACE("-- %s\n", szFileType ); 52 53 return TRUE; 57 { 58 HKEY hkey; 59 char szTemp[MAX_EXTENSION_LENGTH + 2]; 60 61 dprintf(("SHELL32:classes:HCR_MapTypeToValue(%s,%08xh,%08xh,%08xh)\n", 62 szExtension, 63 szFileType, 64 len, 65 bPrependDot)); 66 67 if (bPrependDot) 68 strcpy(szTemp, "."); 69 70 lstrcpynA(szTemp+((bPrependDot)?1:0), szExtension, MAX_EXTENSION_LENGTH); 71 72 if (RegOpenKeyExA(HKEY_CLASSES_ROOT,szTemp,0,0x02000000,&hkey)) 73 { return FALSE; 74 } 75 76 if (RegQueryValueA(hkey,NULL,szFileType,&len)) 77 { RegCloseKey(hkey); 78 return FALSE; 79 } 80 81 RegCloseKey(hkey); 82 83 TRACE("-- %s\n", szFileType ); 84 85 return TRUE; 54 86 } 55 87 56 88 57 89 BOOL HCR_GetExecuteCommand ( LPCSTR szClass, LPCSTR szVerb, LPSTR szDest, LONG len ) 58 { HKEY hkey; 59 char sTemp[256]; 60 61 TRACE("%s %s\n",szClass, szVerb ); 62 63 sprintf(sTemp, "%s\\shell\\%s\\command",szClass, szVerb); 64 65 if (RegOpenKeyExA(HKEY_CLASSES_ROOT,sTemp,0,0x02000000,&hkey)) 66 { return FALSE; 67 } 68 69 if (RegQueryValueA(hkey,NULL,szDest,&len)) 70 { RegCloseKey(hkey); 71 return FALSE; 72 } 73 RegCloseKey(hkey); 74 75 TRACE("-- %s\n", szDest ); 76 77 return TRUE; 90 { 91 HKEY hkey; 92 char sTemp[256]; 93 94 dprintf(("SHELL32:classes:HCR_GetExecuteCommand(%s,%s,%08xh,%08xh)\n", 95 szClass, 96 szVerb, 97 szDest, 98 len)); 99 100 sprintf(sTemp, "%s\\shell\\%s\\command",szClass, szVerb); 101 102 if (RegOpenKeyExA(HKEY_CLASSES_ROOT,sTemp,0,0x02000000,&hkey)) 103 { return FALSE; 104 } 105 106 if (RegQueryValueA(hkey,NULL,szDest,&len)) 107 { RegCloseKey(hkey); 108 return FALSE; 109 } 110 RegCloseKey(hkey); 111 112 TRACE("-- %s\n", szDest ); 113 114 return TRUE; 78 115 79 116 } 80 117 /*************************************************************************************** 81 * HCR_GetDefaultIcon[internal]118 * HCR_GetDefaultIcon [internal] 82 119 * 83 120 * Gets the icon for a filetype 84 121 */ 85 122 BOOL HCR_GetDefaultIcon (LPCSTR szClass, LPSTR szDest, LONG len, LPDWORD dwNr) 86 { HKEY hkey; 87 char sTemp[256]; 88 char sNum[5]; 89 90 TRACE("%s\n",szClass ); 91 92 sprintf(sTemp, "%s\\DefaultIcon",szClass); 93 94 if (RegOpenKeyExA(HKEY_CLASSES_ROOT,sTemp,0,0x02000000,&hkey)) 95 { return FALSE; 96 } 97 98 if (RegQueryValueA(hkey,NULL,szDest,&len)) 99 { RegCloseKey(hkey); 100 return FALSE; 101 } 102 103 RegCloseKey(hkey); 104 105 if (ParseFieldA (szDest, 2, sNum, 5)) 106 { *dwNr=atoi(sNum); 107 } 108 109 ParseFieldA (szDest, 1, szDest, len); 110 111 TRACE("-- %s %li\n", szDest, *dwNr ); 112 113 return TRUE; 123 { 124 HKEY hkey; 125 char sTemp[256]; 126 char sNum[5]; 127 128 dprintf(("SHELL32:classes:HCR_GetDefaultIcon(%s,%08xh,%08xh,%08xh)\n", 129 szClass, 130 szDest, 131 len, 132 dwNr)); 133 134 sprintf(sTemp, "%s\\DefaultIcon",szClass); 135 136 if (RegOpenKeyExA(HKEY_CLASSES_ROOT,sTemp,0,0x02000000,&hkey)) 137 { return FALSE; 138 } 139 140 if (RegQueryValueA(hkey,NULL,szDest,&len)) 141 { RegCloseKey(hkey); 142 return FALSE; 143 } 144 145 RegCloseKey(hkey); 146 147 if (ParseFieldA (szDest, 2, sNum, 5)) 148 { *dwNr=atoi(sNum); 149 } 150 151 ParseFieldA (szDest, 1, szDest, len); 152 153 TRACE("-- %s %li\n", szDest, *dwNr ); 154 155 return TRUE; 114 156 } 115 157 116 158 /*************************************************************************************** 117 * HCR_GetClassName[internal]159 * HCR_GetClassName [internal] 118 160 * 119 161 * Gets the name of a registred class 120 162 */ 121 163 BOOL HCR_GetClassName (REFIID riid, LPSTR szDest, DWORD len) 122 { HKEY hkey; 123 char xriid[50]; 124 BOOL ret = FALSE; 125 DWORD buflen = len; 126 127 strcpy(xriid,"CLSID\\"); 128 WINE_StringFromCLSID(riid,&xriid[strlen(xriid)]); 129 130 TRACE("%s\n",xriid ); 131 132 if (!RegOpenKeyExA(HKEY_CLASSES_ROOT,xriid,0,KEY_READ,&hkey)) 133 { 134 if (!RegQueryValueExA(hkey,"",0,NULL,(LPBYTE)szDest,&len)) 135 { 136 ret = TRUE; 137 } 138 RegCloseKey(hkey); 139 } 140 141 if (!ret || !szDest[0]) 142 { 143 if(IsEqualIID(riid, &CLSID_ShellDesktop)) 144 { 145 LoadStringA(shell32_hInstance, IDS_DESKTOP, szDest, buflen); 146 ret = TRUE; 147 } 148 else if (IsEqualIID(riid, &IID_MyComputer)) 149 { 150 LoadStringA(shell32_hInstance, IDS_MYCOMPUTER, szDest, buflen); 151 ret = TRUE; 152 } 153 } 154 155 TRACE("-- %s\n", szDest); 156 157 return ret; 164 { 165 HKEY hkey; 166 char xriid[50]; 167 BOOL ret = FALSE; 168 DWORD buflen = len; 169 170 dprintf(("SHELL32:classes:HCR_GetClassName(%08xh,%08xh,%08xh)\n", 171 riid, 172 szDest, 173 len)); 174 175 strcpy(xriid,"CLSID\\"); 176 WINE_StringFromCLSID(riid,&xriid[strlen(xriid)]); 177 178 TRACE("%s\n",xriid ); 179 180 if (!RegOpenKeyExA(HKEY_CLASSES_ROOT,xriid,0,KEY_READ,&hkey)) 181 { 182 if (!RegQueryValueExA(hkey,"",0,NULL,(LPBYTE)szDest,&len)) 183 { 184 ret = TRUE; 185 } 186 RegCloseKey(hkey); 187 } 188 189 if (!ret || !szDest[0]) 190 { 191 if(IsEqualIID(riid, &CLSID_ShellDesktop)) 192 { 193 LoadStringA(shell32_hInstance, IDS_DESKTOP, szDest, buflen); 194 ret = TRUE; 195 } 196 else if (IsEqualIID(riid, &IID_MyComputer)) 197 { 198 LoadStringA(shell32_hInstance, IDS_MYCOMPUTER, szDest, buflen); 199 ret = TRUE; 200 } 201 } 202 203 TRACE("-- %s\n", szDest); 204 205 return ret; 158 206 } 159 207 160 208 /*************************************************************************************** 161 * HCR_GetFolderAttributes[internal]209 * HCR_GetFolderAttributes [internal] 162 210 * 163 211 * gets the folder attributes of a class 164 212 */ 165 213 BOOL HCR_GetFolderAttributes (REFIID riid, LPDWORD szDest) 166 { HKEY hkey; 167 char xriid[60]; 168 DWORD attributes; 169 DWORD len = 4; 170 171 strcpy(xriid,"CLSID\\"); 172 WINE_StringFromCLSID(riid,&xriid[strlen(xriid)]); 173 TRACE("%s\n",xriid ); 174 175 strcat (xriid, "\\ShellFolder"); 176 177 if (RegOpenKeyExA(HKEY_CLASSES_ROOT,xriid,0,KEY_READ,&hkey)) 178 { 179 return FALSE; 180 } 181 182 if (RegQueryValueExA(hkey,"Attributes",0,NULL,(LPBYTE)&attributes,&len)) 183 { 184 RegCloseKey(hkey); 185 return FALSE; 186 } 187 188 RegCloseKey(hkey); 189 190 TRACE("-- 0x%08lx\n", attributes); 191 192 *szDest = attributes; 193 194 return TRUE; 195 } 196 214 { 215 HKEY hkey; 216 char xriid[60]; 217 DWORD attributes; 218 DWORD len = 4; 219 220 dprintf(("SHELL32:classes:HCR_GetFolderAttributes(%08xh,%08xh)\n", 221 riid, 222 szDest)); 223 224 strcpy(xriid,"CLSID\\"); 225 WINE_StringFromCLSID(riid,&xriid[strlen(xriid)]); 226 TRACE("%s\n",xriid ); 227 228 strcat (xriid, "\\ShellFolder"); 229 230 if (RegOpenKeyExA(HKEY_CLASSES_ROOT,xriid,0,KEY_READ,&hkey)) 231 { 232 return FALSE; 233 } 234 235 if (RegQueryValueExA(hkey,"Attributes",0,NULL,(LPBYTE)&attributes,&len)) 236 { 237 RegCloseKey(hkey); 238 return FALSE; 239 } 240 241 RegCloseKey(hkey); 242 243 TRACE("-- 0x%08lx\n", attributes); 244 245 *szDest = attributes; 246 247 return TRUE; 248 } 249 -
trunk/src/shell32/new/contmenu.cpp
r791 r1145 1 /* $Id: contmenu.cpp,v 1.2 1999-10-05 19:33:36 phaller Exp $ */ 2 1 3 /* 2 * IContextMenu4 * Win32 SHELL32 for OS/2 3 5 * 4 * Copyright 1998 Juergen Schmied <juergen.schmied@metronet.de> 6 * Copyright 1999 Patrick Haller (haller@zebra.fh-weingarten.de) 7 * Project Odin Software License can be found in LICENSE.TXT 8 * 5 9 */ 10 11 /* 12 * IContextMenu 13 * 14 * Copyright 1998 Juergen Schmied <juergen.schmied@metronet.de> 15 */ 16 17 18 /***************************************************************************** 19 * Includes * 20 *****************************************************************************/ 21 6 22 #include <string.h> 7 23 #include <odin.h> 24 #include <odinwrap.h> 25 #include <os2sel.h> 8 26 9 27 #define ICOM_CINTERFACE 1 … … 26 44 #include <misc.h> 27 45 28 DEFAULT_DEBUG_CHANNEL(shell) 46 47 /***************************************************************************** 48 * Local Variables * 49 *****************************************************************************/ 50 51 ODINDEBUGCHANNEL(shell-contmenu) 52 29 53 30 54 /************************************************************************** … … 42 66 43 67 static struct ICOM_VTABLE(IContextMenu) cmvt = 44 { 45 46 47 48 49 50 51 52 53 (void *) 0xdeadbabe/* just paranoia */68 { 69 ICOM_MSVTABLE_COMPAT_DummyRTTIVALUE 70 IContextMenu_fnQueryInterface, 71 IContextMenu_fnAddRef, 72 IContextMenu_fnRelease, 73 IContextMenu_fnQueryContextMenu, 74 IContextMenu_fnInvokeCommand, 75 IContextMenu_fnGetCommandString, 76 IContextMenu_fnHandleMenuMsg, 77 (void *) 0xdeadbabe /* just paranoia */ 54 78 }; 55 79 … … 58 82 */ 59 83 typedef struct 60 { 61 DWORDref;62 IShellFolder*pSFParent;63 LPITEMIDLIST pidl;/* root pidl */64 LPITEMIDLIST *aPidls;/* array of child pidls */65 BOOLbAllValues;84 { ICOM_VTABLE(IContextMenu)* lpvtbl; 85 DWORD ref; 86 IShellFolder* pSFParent; 87 LPITEMIDLIST pidl; /* root pidl */ 88 LPITEMIDLIST *aPidls; /* array of child pidls */ 89 BOOL bAllValues; 66 90 } IContextMenuImpl; 67 91 … … 74 98 static BOOL IContextMenu_AllocPidlTable(IContextMenuImpl *This, DWORD dwEntries) 75 99 { 76 TRACE("(%p)->(entrys=%lu)\n",This, dwEntries); 77 78 /*add one for NULL terminator */ 79 dwEntries++; 80 81 This->aPidls = (LPITEMIDLIST*)SHAlloc(dwEntries * sizeof(LPITEMIDLIST)); 82 83 if(This->aPidls) 84 { ZeroMemory(This->aPidls, dwEntries * sizeof(LPITEMIDLIST)); /*set all of the entries to NULL*/ 85 } 86 return (This->aPidls != NULL); 100 dprintf(("SHELL32:contmenu:IContextMenu_AllocPidlTable(%08xh,%08xh)\n", 101 This, 102 dwEntries)); 103 104 /*add one for NULL terminator */ 105 dwEntries++; 106 107 This->aPidls = (LPITEMIDLIST*)SHAlloc(dwEntries * sizeof(LPITEMIDLIST)); 108 109 if(This->aPidls) 110 { ZeroMemory(This->aPidls, dwEntries * sizeof(LPITEMIDLIST)); /*set all of the entries to NULL*/ 111 } 112 return (This->aPidls != NULL); 87 113 } 88 114 … … 92 118 static void IContextMenu_FreePidlTable(IContextMenuImpl *This) 93 119 { 94 int i; 95 96 TRACE("(%p)->()\n",This); 97 98 if(This->aPidls) 99 { for(i = 0; This->aPidls[i]; i++) 100 { SHFree(This->aPidls[i]); 101 } 102 103 SHFree(This->aPidls); 104 This->aPidls = NULL; 105 } 120 int i; 121 122 dprintf(("SHELL32:contmenu:IContextMenu_FreePidlTable(%08xh)\n", 123 This)); 124 125 if(This->aPidls) 126 { for(i = 0; This->aPidls[i]; i++) 127 { SHFree(This->aPidls[i]); 128 } 129 130 SHFree(This->aPidls); 131 This->aPidls = NULL; 132 } 106 133 } 107 134 … … 111 138 static BOOL IContextMenu_FillPidlTable(IContextMenuImpl *This, LPCITEMIDLIST *aPidls, UINT uItemCount) 112 139 { 113 UINT i; 114 115 TRACE("(%p)->(apidl=%p count=%u)\n",This, aPidls, uItemCount); 116 117 if(This->aPidls) 118 { for(i = 0; i < uItemCount; i++) 119 { This->aPidls[i] = ILClone(aPidls[i]); 120 } 121 return TRUE; 122 } 123 return FALSE; 140 UINT i; 141 142 dprintf(("SHELL32:contmenu:IContectMenu_FillPidlTable(%08xh,%08xh,%08xh)\n", 143 This, 144 aPidls, 145 uItemCount)); 146 147 if(This->aPidls) 148 { for(i = 0; i < uItemCount; i++) 149 { This->aPidls[i] = ILClone(aPidls[i]); 150 } 151 return TRUE; 152 } 153 return FALSE; 124 154 } 125 155 … … 128 158 */ 129 159 static BOOL IContextMenu_CanRenameItems(IContextMenuImpl *This) 130 { UINT i; 131 DWORD dwAttributes; 132 133 TRACE("(%p)->()\n",This); 134 135 if(This->aPidls) 136 { 137 for(i = 0; This->aPidls[i]; i++){} /*get the number of items assigned to This object*/ 138 { if(i > 1) /*you can't rename more than one item at a time*/ 139 { return FALSE; 140 } 141 } 142 dwAttributes = SFGAO_CANRENAME; 143 IShellFolder_GetAttributesOf(This->pSFParent, i, (LPCITEMIDLIST*)This->aPidls, &dwAttributes); 144 145 return dwAttributes & SFGAO_CANRENAME; 146 } 147 return FALSE; 160 { UINT i; 161 DWORD dwAttributes; 162 163 dprintf(("SHELL32:contmenu:IContectMenu_CanRenameItems(%08xh)\n", 164 This)); 165 166 if(This->aPidls) 167 { 168 for(i = 0; This->aPidls[i]; i++){} /*get the number of items assigned to This object*/ 169 { if(i > 1) /*you can't rename more than one item at a time*/ 170 { return FALSE; 171 } 172 } 173 dwAttributes = SFGAO_CANRENAME; 174 IShellFolder_GetAttributesOf(This->pSFParent, i, (LPCITEMIDLIST*)This->aPidls, &dwAttributes); 175 176 return dwAttributes & SFGAO_CANRENAME; 177 } 178 return FALSE; 148 179 } 149 180 … … 152 183 */ 153 184 IContextMenu *IContextMenu_Constructor(LPSHELLFOLDER pSFParent, LPCITEMIDLIST pidl, LPCITEMIDLIST *aPidls, UINT uItemCount) 154 { IContextMenuImpl* cm; 155 UINT u; 156 157 cm = (IContextMenuImpl*)HeapAlloc(GetProcessHeap(),0,sizeof(IContextMenuImpl)); 158 cm->lpvtbl=&cmvt; 159 cm->ref = 1; 160 cm->pidl = ILClone(pidl); 161 162 cm->pSFParent = pSFParent; 163 164 if(pSFParent) 165 IShellFolder_AddRef(pSFParent); 166 167 cm->aPidls = NULL; 168 169 IContextMenu_AllocPidlTable(cm, uItemCount); 170 171 if(cm->aPidls) 172 { IContextMenu_FillPidlTable(cm, aPidls, uItemCount); 173 } 174 175 cm->bAllValues = 1; 176 for(u = 0; u < uItemCount; u++) 177 { cm->bAllValues &= (_ILIsValue(aPidls[u]) ? 1 : 0); 178 } 179 TRACE("(%p)->()\n",cm); 180 shell32_ObjCount++; 181 return (IContextMenu*)cm; 185 { 186 IContextMenuImpl* cm; 187 UINT u; 188 189 dprintf(("SHELL32:contmenu:IContectMenu_Constructor(%08xh,%08xh,%08xh)\n", 190 pSFParent, 191 aPidls, 192 uItemCount)); 193 194 cm = (IContextMenuImpl*)HeapAlloc(GetProcessHeap(),0,sizeof(IContextMenuImpl)); 195 cm->lpvtbl=&cmvt; 196 cm->ref = 1; 197 cm->pidl = ILClone(pidl); 198 199 cm->pSFParent = pSFParent; 200 201 if(pSFParent) 202 IShellFolder_AddRef(pSFParent); 203 204 cm->aPidls = NULL; 205 206 IContextMenu_AllocPidlTable(cm, uItemCount); 207 208 if(cm->aPidls) 209 { IContextMenu_FillPidlTable(cm, aPidls, uItemCount); 210 } 211 212 cm->bAllValues = 1; 213 for(u = 0; u < uItemCount; u++) 214 { cm->bAllValues &= (_ILIsValue(aPidls[u]) ? 1 : 0); 215 } 216 TRACE("(%p)->()\n",cm); 217 shell32_ObjCount++; 218 return (IContextMenu*)cm; 182 219 } 183 220 … … 187 224 static HRESULT WINAPI IContextMenu_fnQueryInterface(IContextMenu *iface, REFIID riid, LPVOID *ppvObj) 188 225 { 189 ICOM_THIS(IContextMenuImpl, iface); 190 191 char xriid[50]; 192 WINE_StringFromCLSID((LPCLSID)riid,xriid); 193 194 TRACE("(%p)->(\n\tIID:\t%s,%p)\n",This,xriid,ppvObj); 195 196 *ppvObj = NULL; 197 198 if(IsEqualIID(riid, &IID_IUnknown)) /*IUnknown*/ 199 { *ppvObj = This; 200 } 201 else if(IsEqualIID(riid, &IID_IContextMenu)) /*IContextMenu*/ 202 { *ppvObj = This; 203 } 204 else if(IsEqualIID(riid, &IID_IShellExtInit)) /*IShellExtInit*/ 205 { FIXME("-- LPSHELLEXTINIT pointer requested\n"); 206 } 207 208 if(*ppvObj) 209 { 210 IContextMenu_AddRef((IContextMenu*)*ppvObj); 211 TRACE("-- Interface: (%p)->(%p)\n",ppvObj,*ppvObj); 212 return S_OK; 213 } 214 TRACE("-- Interface: E_NOINTERFACE\n"); 215 return E_NOINTERFACE; 226 ICOM_THIS(IContextMenuImpl, iface); 227 228 char xriid[50]; 229 WINE_StringFromCLSID((LPCLSID)riid,xriid); 230 231 dprintf(("SHELL32:contmenu:IContectMenu_fnQueryInterface(%08xh,%08xh,%08xh,%08xh)\n", 232 This, 233 iface, 234 riid, 235 ppvObj)); 236 237 *ppvObj = NULL; 238 239 if(IsEqualIID(riid, &IID_IUnknown)) /*IUnknown*/ 240 { *ppvObj = This; 241 } 242 else if(IsEqualIID(riid, &IID_IContextMenu)) /*IContextMenu*/ 243 { *ppvObj = This; 244 } 245 else if(IsEqualIID(riid, &IID_IShellExtInit)) /*IShellExtInit*/ 246 { FIXME("-- LPSHELLEXTINIT pointer requested\n"); 247 } 248 249 if(*ppvObj) 250 { 251 IContextMenu_AddRef((IContextMenu*)*ppvObj); 252 TRACE("-- Interface: (%p)->(%p)\n",ppvObj,*ppvObj); 253 return S_OK; 254 } 255 TRACE("-- Interface: E_NOINTERFACE\n"); 256 return E_NOINTERFACE; 216 257 } 217 258 … … 221 262 static ULONG WINAPI IContextMenu_fnAddRef(IContextMenu *iface) 222 263 { 223 ICOM_THIS(IContextMenuImpl, iface); 224 225 TRACE("(%p)->(count=%lu)\n",This, This->ref); 226 227 shell32_ObjCount++; 228 return ++(This->ref); 264 ICOM_THIS(IContextMenuImpl, iface); 265 266 dprintf(("SHELL32:contmenu:IContectMenu_fnAddRef(%08xh,%08xh,%08xh)\n", 267 This, 268 iface, 269 This->ref)); 270 271 shell32_ObjCount++; 272 return ++(This->ref); 229 273 } 230 274 … … 234 278 static ULONG WINAPI IContextMenu_fnRelease(IContextMenu *iface) 235 279 { 236 ICOM_THIS(IContextMenuImpl, iface); 237 238 TRACE("(%p)->()\n",This); 239 240 shell32_ObjCount--; 241 242 if (!--(This->ref)) 243 { TRACE(" destroying IContextMenu(%p)\n",This); 244 245 if(This->pSFParent) 246 IShellFolder_Release(This->pSFParent); 247 248 if(This->pidl) 249 SHFree(This->pidl); 250 251 /*make sure the pidl is freed*/ 252 if(This->aPidls) 253 { IContextMenu_FreePidlTable(This); 254 } 255 256 HeapFree(GetProcessHeap(),0,This); 257 return 0; 258 } 259 return This->ref; 280 ICOM_THIS(IContextMenuImpl, iface); 281 282 dprintf(("SHELL32:contmenu:IContectMenu_fnRelease(%08xh,%08xh)\n", 283 This, 284 iface)); 285 286 shell32_ObjCount--; 287 288 if (!--(This->ref)) 289 { TRACE(" destroying IContextMenu(%p)\n",This); 290 291 if(This->pSFParent) 292 IShellFolder_Release(This->pSFParent); 293 294 if(This->pidl) 295 SHFree(This->pidl); 296 297 /*make sure the pidl is freed*/ 298 if(This->aPidls) 299 { IContextMenu_FreePidlTable(This); 300 } 301 302 HeapFree(GetProcessHeap(),0,This); 303 return 0; 304 } 305 return This->ref; 260 306 } 261 307 … … 264 310 */ 265 311 void WINAPI _InsertMenuItem ( 266 HMENU hmenu, 267 UINT indexMenu, 268 BOOL fByPosition, 269 UINT wID, 270 UINT fType, 271 LPSTR dwTypeData, 272 UINT fState) 273 { 274 MENUITEMINFOA mii; 275 276 ZeroMemory(&mii, sizeof(mii)); 277 mii.cbSize = sizeof(mii); 278 if (fType == MFT_SEPARATOR) 279 { mii.fMask = MIIM_ID | MIIM_TYPE; 280 } 281 else 282 { mii.fMask = MIIM_ID | MIIM_TYPE | MIIM_STATE; 283 mii.dwTypeData = dwTypeData; 284 mii.fState = fState; 285 } 286 mii.wID = wID; 287 mii.fType = fType; 288 InsertMenuItemA( hmenu, indexMenu, fByPosition, &mii); 312 HMENU hmenu, 313 UINT indexMenu, 314 BOOL fByPosition, 315 UINT wID, 316 UINT fType, 317 LPSTR dwTypeData, 318 UINT fState) 319 { 320 MENUITEMINFOA mii; 321 322 dprintf(("SHELL32:contmenu:_InsertMenuItem(%08xh,%08xh,%08xh,%08xh,%08xh,%08xh,%08xh,%08xh)\n", 323 hmenu, 324 indexMenu, 325 fByPosition, 326 wID, 327 fType, 328 dwTypeData, 329 fState)); 330 331 ZeroMemory(&mii, sizeof(mii)); 332 mii.cbSize = sizeof(mii); 333 if (fType == MFT_SEPARATOR) 334 { mii.fMask = MIIM_ID | MIIM_TYPE; 335 } 336 else 337 { mii.fMask = MIIM_ID | MIIM_TYPE | MIIM_STATE; 338 mii.dwTypeData = dwTypeData; 339 mii.fState = fState; 340 } 341 mii.wID = wID; 342 mii.fType = fType; 343 InsertMenuItemA( hmenu, indexMenu, fByPosition, &mii); 289 344 } 290 345 /************************************************************************** … … 293 348 294 349 static HRESULT WINAPI IContextMenu_fnQueryContextMenu( 295 IContextMenu *iface, 296 HMENU hmenu, 297 UINT indexMenu, 298 UINT idCmdFirst, 299 UINT idCmdLast, 300 UINT uFlags) 301 { 302 ICOM_THIS(IContextMenuImpl, iface); 303 304 BOOL fExplore ; 305 306 TRACE("(%p)->(hmenu=%x indexmenu=%x cmdfirst=%x cmdlast=%x flags=%x )\n",This, hmenu, indexMenu, idCmdFirst, idCmdLast, uFlags); 307 308 if(!(CMF_DEFAULTONLY & uFlags)) 309 { if(!This->bAllValues) 310 { /* folder menu */ 311 fExplore = uFlags & CMF_EXPLORE; 312 if(fExplore) 313 { _InsertMenuItem(hmenu, indexMenu++, TRUE, idCmdFirst+IDM_EXPLORE, MFT_STRING, "&Explore", MFS_ENABLED|MFS_DEFAULT); 314 _InsertMenuItem(hmenu, indexMenu++, TRUE, idCmdFirst+IDM_OPEN, MFT_STRING, "&Open", MFS_ENABLED); 315 } 316 else 317 { _InsertMenuItem(hmenu, indexMenu++, TRUE, idCmdFirst+IDM_OPEN, MFT_STRING, "&Open", MFS_ENABLED|MFS_DEFAULT); 318 _InsertMenuItem(hmenu, indexMenu++, TRUE, idCmdFirst+IDM_EXPLORE, MFT_STRING, "&Explore", MFS_ENABLED); 319 } 320 321 if(uFlags & CMF_CANRENAME) 322 { _InsertMenuItem(hmenu, indexMenu++, TRUE, 0, MFT_SEPARATOR, NULL, 0); 323 _InsertMenuItem(hmenu, indexMenu++, TRUE, idCmdFirst+IDM_RENAME, MFT_STRING, "&Rename", (IContextMenu_CanRenameItems(This) ? MFS_ENABLED : MFS_DISABLED)); 324 } 325 } 326 else /* file menu */ 327 { _InsertMenuItem(hmenu, indexMenu++, TRUE, idCmdFirst+IDM_OPEN, MFT_STRING, "&Open", MFS_ENABLED|MFS_DEFAULT); 328 if(uFlags & CMF_CANRENAME) 329 { _InsertMenuItem(hmenu, indexMenu++, TRUE, 0, MFT_SEPARATOR, NULL, 0); 330 _InsertMenuItem(hmenu, indexMenu++, TRUE, idCmdFirst+IDM_RENAME, MFT_STRING, "&Rename", (IContextMenu_CanRenameItems(This) ? MFS_ENABLED : MFS_DISABLED)); 331 } 332 } 333 return MAKE_HRESULT(SEVERITY_SUCCESS, 0, (IDM_LAST + 1)); 334 } 335 return MAKE_HRESULT(SEVERITY_SUCCESS, 0, 0); 350 IContextMenu *iface, 351 HMENU hmenu, 352 UINT indexMenu, 353 UINT idCmdFirst, 354 UINT idCmdLast, 355 UINT uFlags) 356 { 357 ICOM_THIS(IContextMenuImpl, iface); 358 359 BOOL fExplore ; 360 361 dprintf(("SHELL32:contmenu:IContextMenu_fnQueryContextMenu(%08xh,%08xh,%08xh,%08xh,%08xh)\n", 362 hmenu, 363 indexMenu, 364 idCmdFirst, 365 idCmdLast, 366 uFlags)); 367 368 if(!(CMF_DEFAULTONLY & uFlags)) 369 { if(!This->bAllValues) 370 { /* folder menu */ 371 fExplore = uFlags & CMF_EXPLORE; 372 if(fExplore) 373 { _InsertMenuItem(hmenu, indexMenu++, TRUE, idCmdFirst+IDM_EXPLORE, MFT_STRING, "&Explore", MFS_ENABLED|MFS_DEFAULT); 374 _InsertMenuItem(hmenu, indexMenu++, TRUE, idCmdFirst+IDM_OPEN, MFT_STRING, "&Open", MFS_ENABLED); 375 } 376 else 377 { _InsertMenuItem(hmenu, indexMenu++, TRUE, idCmdFirst+IDM_OPEN, MFT_STRING, "&Open", MFS_ENABLED|MFS_DEFAULT); 378 _InsertMenuItem(hmenu, indexMenu++, TRUE, idCmdFirst+IDM_EXPLORE, MFT_STRING, "&Explore", MFS_ENABLED); 379 } 380 381 if(uFlags & CMF_CANRENAME) 382 { _InsertMenuItem(hmenu, indexMenu++, TRUE, 0, MFT_SEPARATOR, NULL, 0); 383 _InsertMenuItem(hmenu, indexMenu++, TRUE, idCmdFirst+IDM_RENAME, MFT_STRING, "&Rename", (IContextMenu_CanRenameItems(This) ? MFS_ENABLED : MFS_DISABLED)); 384 } 385 } 386 else /* file menu */ 387 { _InsertMenuItem(hmenu, indexMenu++, TRUE, idCmdFirst+IDM_OPEN, MFT_STRING, "&Open", MFS_ENABLED|MFS_DEFAULT); 388 if(uFlags & CMF_CANRENAME) 389 { _InsertMenuItem(hmenu, indexMenu++, TRUE, 0, MFT_SEPARATOR, NULL, 0); 390 _InsertMenuItem(hmenu, indexMenu++, TRUE, idCmdFirst+IDM_RENAME, MFT_STRING, "&Rename", (IContextMenu_CanRenameItems(This) ? MFS_ENABLED : MFS_DISABLED)); 391 } 392 } 393 return MAKE_HRESULT(SEVERITY_SUCCESS, 0, (IDM_LAST + 1)); 394 } 395 return MAKE_HRESULT(SEVERITY_SUCCESS, 0, 0); 336 396 } 337 397 … … 340 400 */ 341 401 static HRESULT WINAPI IContextMenu_fnInvokeCommand( 342 IContextMenu *iface, 343 LPCMINVOKECOMMANDINFO lpcmi) 344 { 345 ICOM_THIS(IContextMenuImpl, iface); 346 347 LPITEMIDLIST pidlFQ; 348 SHELLEXECUTEINFOA sei; 349 int i; 350 351 TRACE("(%p)->(invcom=%p verb=%p wnd=%x)\n",This,lpcmi,lpcmi->lpVerb, lpcmi->hwnd); 352 353 if(LOWORD(lpcmi->lpVerb) > IDM_LAST) 354 return E_INVALIDARG; 355 356 switch(LOWORD(lpcmi->lpVerb)) 357 { case IDM_EXPLORE: 358 case IDM_OPEN: 359 /* Find the first item in the list that is not a value. These commands 360 should never be invoked if there isn't at least one folder item in the list.*/ 361 362 for(i = 0; This->aPidls[i]; i++) 363 { if(!_ILIsValue(This->aPidls[i])) 364 break; 365 } 366 367 pidlFQ = ILCombine(This->pidl, This->aPidls[i]); 368 369 ZeroMemory(&sei, sizeof(sei)); 370 sei.cbSize = sizeof(sei); 371 sei.fMask = SEE_MASK_IDLIST | SEE_MASK_CLASSNAME; 372 sei.lpIDList = pidlFQ; 373 sei.lpClass = "folder"; 374 sei.hwnd = lpcmi->hwnd; 375 sei.nShow = SW_SHOWNORMAL; 376 377 if(LOWORD(lpcmi->lpVerb) == IDM_EXPLORE) 378 { sei.lpVerb = "explore"; 379 } 380 else 381 { sei.lpVerb = "open"; 382 } 383 ShellExecuteExA(&sei); 384 SHFree(pidlFQ); 385 break; 386 387 case IDM_RENAME: 388 MessageBeep(MB_OK); 389 /*handle rename for the view here*/ 390 break; 391 } 392 return NOERROR; 402 IContextMenu *iface, 403 LPCMINVOKECOMMANDINFO lpcmi) 404 { 405 ICOM_THIS(IContextMenuImpl, iface); 406 407 LPITEMIDLIST pidlFQ; 408 SHELLEXECUTEINFOA sei; 409 int i; 410 411 dprintf(("SHELL32:contmenu:IContextMenu_fnInvokeCommand(%08xh,%08xh,%08xh,%08xh)\n", 412 This, 413 lpcmi, 414 lpcmi->lpVerb, 415 lpcmi->hwnd)); 416 417 if(LOWORD(lpcmi->lpVerb) > IDM_LAST) 418 return E_INVALIDARG; 419 420 switch(LOWORD(lpcmi->lpVerb)) 421 { case IDM_EXPLORE: 422 case IDM_OPEN: 423 /* Find the first item in the list that is not a value. These commands 424 should never be invoked if there isn't at least one folder item in the list.*/ 425 426 for(i = 0; This->aPidls[i]; i++) 427 { if(!_ILIsValue(This->aPidls[i])) 428 break; 429 } 430 431 pidlFQ = ILCombine(This->pidl, This->aPidls[i]); 432 433 ZeroMemory(&sei, sizeof(sei)); 434 sei.cbSize = sizeof(sei); 435 sei.fMask = SEE_MASK_IDLIST | SEE_MASK_CLASSNAME; 436 sei.lpIDList = pidlFQ; 437 sei.lpClass = "folder"; 438 sei.hwnd = lpcmi->hwnd; 439 sei.nShow = SW_SHOWNORMAL; 440 441 if(LOWORD(lpcmi->lpVerb) == IDM_EXPLORE) 442 { sei.lpVerb = "explore"; 443 } 444 else 445 { sei.lpVerb = "open"; 446 } 447 ShellExecuteExA(&sei); 448 SHFree(pidlFQ); 449 break; 450 451 case IDM_RENAME: 452 MessageBeep(MB_OK); 453 /*handle rename for the view here*/ 454 break; 455 } 456 return NOERROR; 393 457 } 394 458 … … 397 461 */ 398 462 static HRESULT WINAPI IContextMenu_fnGetCommandString( 399 IContextMenu *iface, 400 UINT idCommand, 401 UINT uFlags, 402 LPUINT lpReserved, 403 LPSTR lpszName, 404 UINT uMaxNameLen) 405 { 406 ICOM_THIS(IContextMenuImpl, iface); 407 408 HRESULT hr = E_INVALIDARG; 409 410 TRACE("(%p)->(idcom=%x flags=%x %p name=%p len=%x)\n",This, idCommand, uFlags, lpReserved, lpszName, uMaxNameLen); 411 412 switch(uFlags) 413 { case GCS_HELPTEXT: 414 hr = E_NOTIMPL; 415 break; 416 417 case GCS_VERBA: 418 switch(idCommand) 419 { case IDM_RENAME: 420 strcpy((LPSTR)lpszName, "rename"); 421 hr = NOERROR; 422 break; 423 } 424 break; 425 426 /* NT 4.0 with IE 3.0x or no IE will always call This with GCS_VERBW. In This 427 case, you need to do the lstrcpyW to the pointer passed.*/ 428 case GCS_VERBW: 429 switch(idCommand) 430 { case IDM_RENAME: 431 lstrcpyAtoW((LPWSTR)lpszName, "rename"); 432 hr = NOERROR; 433 break; 434 } 435 break; 436 437 case GCS_VALIDATE: 438 hr = NOERROR; 439 break; 440 } 441 TRACE("-- (%p)->(name=%s)\n",This, lpszName); 442 return hr; 463 IContextMenu *iface, 464 UINT idCommand, 465 UINT uFlags, 466 LPUINT lpReserved, 467 LPSTR lpszName, 468 UINT uMaxNameLen) 469 { 470 ICOM_THIS(IContextMenuImpl, iface); 471 472 HRESULT hr = E_INVALIDARG; 473 474 dprintf(("SHELL32:contmenu:IContextMenu_fnGetCommandString(%08xh,%08xh,%08xh,%08xh,%08xh,%08xh)\n", 475 This, 476 idCommand, 477 uFlags, 478 lpReserved, 479 lpszName, 480 uMaxNameLen)); 481 482 switch(uFlags) 483 { case GCS_HELPTEXT: 484 hr = E_NOTIMPL; 485 break; 486 487 case GCS_VERBA: 488 switch(idCommand) 489 { case IDM_RENAME: 490 strcpy((LPSTR)lpszName, "rename"); 491 hr = NOERROR; 492 break; 493 } 494 break; 495 496 /* NT 4.0 with IE 3.0x or no IE will always call This with GCS_VERBW. In This 497 case, you need to do the lstrcpyW to the pointer passed.*/ 498 case GCS_VERBW: 499 switch(idCommand) 500 { case IDM_RENAME: 501 lstrcpyAtoW((LPWSTR)lpszName, "rename"); 502 hr = NOERROR; 503 break; 504 } 505 break; 506 507 case GCS_VALIDATE: 508 hr = NOERROR; 509 break; 510 } 511 TRACE("-- (%p)->(name=%s)\n",This, lpszName); 512 return hr; 443 513 } 444 514 … … 450 520 */ 451 521 static HRESULT WINAPI IContextMenu_fnHandleMenuMsg( 452 IContextMenu *iface, 453 UINT uMsg, 454 WPARAM wParam, 455 LPARAM lParam) 456 { 457 ICOM_THIS(IContextMenuImpl, iface); 458 459 TRACE("(%p)->(msg=%x wp=%x lp=%lx)\n",This, uMsg, wParam, lParam); 460 461 return E_NOTIMPL; 462 } 463 522 IContextMenu *iface, 523 UINT uMsg, 524 WPARAM wParam, 525 LPARAM lParam) 526 { 527 ICOM_THIS(IContextMenuImpl, iface); 528 529 dprintf(("SHELL32:contmenu:IContextMenu_fnHandleMenuMsg(%08xh,%08xh,%08xh,%08xh) not implemented.\n", 530 This, 531 uMsg, 532 wParam, 533 lParam)); 534 535 return E_NOTIMPL; 536 } 537 -
trunk/src/shell32/new/dataobject.cpp
r791 r1145 1 /* $Id: dataobject.cpp,v 1.2 1999-10-05 19:33:37 phaller Exp $ */ 2 3 /* 4 * Win32 SHELL32 for OS/2 5 * 6 * Copyright 1999 Patrick Haller (haller@zebra.fh-weingarten.de) 7 * Project Odin Software License can be found in LICENSE.TXT 8 * 9 */ 10 1 11 /* 2 12 * IEnumFORMATETC, IDataObject … … 6 16 * Copyright 1998, 1999 <juergen.schmied@metronet.de> 7 17 */ 18 19 20 /***************************************************************************** 21 * Includes * 22 *****************************************************************************/ 23 24 #include <stdlib.h> 8 25 #include <string.h> 9 26 #include <odin.h> 27 #include <odinwrap.h> 28 #include <os2sel.h> 10 29 11 30 #define ICOM_CINTERFACE 1 … … 25 44 #include <misc.h> 26 45 27 DEFAULT_DEBUG_CHANNEL(shell) 46 47 ODINDEBUGCHANNEL(shell32-dataobject) 48 28 49 29 50 /*********************************************************************** … … 66 87 IEnumFORMATETCImpl* ef; 67 88 DWORD size=cfmt * sizeof(FORMATETC); 68 89 90 dprintf(("SHELL32:dataobject:IEnumFORMATETC_Constructor(%08xh,%08xh)\n", 91 cfmt, 92 afmt)); 93 69 94 ef=(IEnumFORMATETCImpl*)HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(IEnumFORMATETCImpl)); 70 95 … … 88 113 return (LPENUMFORMATETC)ef; 89 114 } 115 116 90 117 static HRESULT WINAPI IEnumFORMATETC_fnQueryInterface(LPENUMFORMATETC iface, REFIID riid, LPVOID* ppvObj) 91 118 { … … 93 120 char xriid[50]; 94 121 WINE_StringFromCLSID((LPCLSID)riid,xriid); 95 TRACE("(%p)->(\n\tIID:\t%s,%p)\n",This,xriid,ppvObj); 122 123 dprintf(("SHELL32:dataobject:IEnumFORMATETC_fnQueryInterface(%08xh,%08xh,%08xh)\n", 124 This, 125 riid, 126 xriid)); 96 127 97 128 *ppvObj = NULL; … … 113 144 114 145 } 146 147 115 148 static ULONG WINAPI IEnumFORMATETC_fnAddRef(LPENUMFORMATETC iface) 116 149 { 117 150 ICOM_THIS(IEnumFORMATETCImpl,iface); 118 TRACE("(%p)->(count=%lu)\n",This, This->ref); 151 152 dprintf(("SHELL32:dataobject:IEnumFORMATETC_fnAddRef(%08xh,%08xh)\n", 153 This, 154 This->ref)); 155 119 156 shell32_ObjCount++; 120 157 return ++(This->ref); 121 158 } 159 160 122 161 static ULONG WINAPI IEnumFORMATETC_fnRelease(LPENUMFORMATETC iface) 123 162 { 124 163 ICOM_THIS(IEnumFORMATETCImpl,iface); 125 TRACE("(%p)->()\n",This); 164 165 dprintf(("SHELL32:dataobject:IEnumFORMATETC_fnRelease(%08xh)\n", 166 This)); 126 167 127 168 shell32_ObjCount--; … … 137 178 return This->ref; 138 179 } 180 181 139 182 static HRESULT WINAPI IEnumFORMATETC_fnNext(LPENUMFORMATETC iface, ULONG celt, FORMATETC *rgelt, ULONG *pceltFethed) 140 183 { … … 143 186 HRESULT hres = S_FALSE; 144 187 145 TRACE("(%p)->()\n", This); 188 dprintf(("SHELL32:dataobject:IEnumFORMATETC_fnNext(%08xh,%08xh,%08xh,%08xh)\n", 189 This, 190 celt, 191 rgelt, 192 pceltFethed)); 146 193 147 194 if (This->posFmt < This->countFmt) … … 168 215 return hres; 169 216 } 217 218 170 219 static HRESULT WINAPI IEnumFORMATETC_fnSkip(LPENUMFORMATETC iface, ULONG celt) 171 220 { 172 221 ICOM_THIS(IEnumFORMATETCImpl,iface); 173 FIXME("(%p)->(num=%lu)\n", This, celt); 222 223 dprintf(("SHELL32:dataobject:IEnumFORMATETC_fnSkip(%08xh,%08xh) to be fixed\n", 224 This, 225 celt)); 174 226 175 227 This->posFmt += celt; … … 184 236 { 185 237 ICOM_THIS(IEnumFORMATETCImpl,iface); 186 FIXME("(%p)->()\n", This); 238 239 dprintf(("SHELL32:dataobject:IEnumFORMATETC_fnReset(%08xh) to be fixed\n", 240 This)); 187 241 188 242 This->posFmt = 0; 189 243 return S_OK; 190 244 } 245 246 191 247 static HRESULT WINAPI IEnumFORMATETC_fnClone(LPENUMFORMATETC iface, LPENUMFORMATETC* ppenum) 192 248 { 193 249 ICOM_THIS(IEnumFORMATETCImpl,iface); 194 FIXME("(%p)->(ppenum=%p)\n", This, ppenum); 250 251 dprintf(("SHELL32:dataobject:IEnumFORMATETC_fnClone(%08xh) not implemented\n", 252 This, 253 ppenum)); 254 195 255 return E_NOTIMPL; 196 256 } … … 264 324 lpidll = (LPIDLLIST)HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(IDLList)); 265 325 326 dprintf(("SHELL32:dataobject:IDLList_Constructor(%08xh, %08xh) not implemented\n", 327 lpidll, 328 uStep)); 329 266 330 if (lpidll) 267 331 { … … 270 334 } 271 335 272 TRACE("(%p)\n",lpidll);273 336 return lpidll; 274 337 } 338 339 275 340 void IDLList_Destructor(LPIDLLIST THIS) 276 { TRACE("(%p)\n",THIS); 341 { 342 dprintf(("SHELL32:dataobject:IDLList_Destructor(%08xh) not implemented\n", 343 THIS)); 344 277 345 IDLList_CleanList(THIS); 278 346 } -
trunk/src/shell32/new/shresdef.h
r791 r1145 1 /* $Id: shresdef.h,v 1.2 1999-10-05 19:33:37 phaller Exp $ */ 2 3 /* 4 * Win32 SHELL32 for OS/2 5 * 6 * Copyright 1997 Marcus Meissner 7 * Copyright 1999 Patrick Haller (haller@zebra.fh-weingarten.de) 8 * Project Odin Software License can be found in LICENSE.TXT 9 * 10 */ 11 12 13 /***************************************************************************** 14 * Includes * 15 *****************************************************************************/ 16 1 17 #ifndef __WINE_SHELL_RES_H 2 18 #define __WINE_SHELL_RES_H 3 19 4 20 /* 5 6 */21 * columntitles for the shellview 22 */ 7 23 #define IDS_SHV_COLUMN1 7 8 24 #define IDS_SHV_COLUMN2 8 … … 22 38 #define IDS_VIEW_DETAILS 27 23 39 24 #endif 40 41 #endif /* __WINE_SHELL_RES_H */ 42
Note:
See TracChangeset
for help on using the changeset viewer.