59#undef FCIDM_SHVIEWLAST
77#define SHV_CHANGE_NOTIFY (WM_USER + 0x1111)
78#define SHV_UPDATESTATUSBAR (WM_USER + 0x1112)
82#define CONTEXT_MENU_BASE_ID 1
87 static const UINT SIG = (
'R' << 0) | (
'O' << 8) | (
'S' << 16) | ((
'c') << 24);
95 static const UINT SIG = (
'R' << 0) | (
'O' << 8) | (
'S' << 16) | ((
'c' ^
'v' ^
's') << 24);
106 UINT cmf = CMF_NORMAL;
108 cmf |= CMF_EXTENDEDVERBS;
109 if (sfgao & SFGAO_CANRENAME)
110 cmf |= CMF_CANRENAME;
163 mii.
fType = MF & ~mii.fState;
221 public CWindowImpl<CDefView, CWindow, CControlWinTraits>,
225 public IShellFolderView,
567#define GET_WM_COMMAND_ID(wp, lp) LOWORD(wp)
568#define GET_WM_COMMAND_HWND(wp, lp) (HWND)(lp)
569#define GET_WM_COMMAND_CMD(wp, lp) HIWORD(wp)
611 TRACE(
" destroying IShellView(%p)\n",
this);
647 TRACE(
"ICommDlgBrowser::IncludeObject pidl=%p\n", pidl);
664 TRACE(
"ICommDlgBrowser::OnDefaultCommand\n");
678 TRACE(
"ICommDlgBrowser::OnStateChange flags=%x\n",
uFlags);
737 UINT64 uTotalFileSize = 0;
741 bool bIsOnlyFoldersSelected =
true;
757 bIsOnlyFoldersSelected =
false;
763 if ((cSelectedItems && !bIsOnlyFoldersSelected) || uTotalFileSize)
786 if (cSelectedItems > 0)
789 att = SFGAO_CANCOPY | SFGAO_CANMOVE;
811 DWORD dwStyle, dwExStyle, ListExStyle;
888 ListExStyle |= LVS_EX_HEADERINALLVIEWS;
892 dwExStyle &= ~WS_EX_CLIENTEDGE;
894 RECT rcListView = {0,0,0,0};
912 DWORD cbDropShadow =
sizeof(bDropShadow);
922 L"ListviewShadow",
NULL, &bDropShadow, &cbDropShadow);
998 if ((
UINT)
r == FoldCol)
1012 if (ListCol <
count)
1020 TRACE(
"m_ListToFolderColMap cache miss while mapping %d\n", ListCol);
1042 FIXME(
"Try SFVM_GETDETAILSOF\n");
1053 ERR(
"Unable to determine folder column from list column %d\n", (
int) ListCol);
1079 lvc.cx = ForceWidth ? ForceWidth : (
sd.cxChar * chavewidth);
1080 lvc.iSubItem = FoldCol;
1081 if ((
int)ListCol == -1)
1085 ListCol = 0x7fffffff;
1102 for (
i = 0, foldCol = 0;; ++foldCol)
1104 if (newColCount >= 0xffff)
1109 if (
i >= ColListCount)
1112 foldCol =
LOWORD(pColList[
i++]);
1132 bool insert = newColCount >= oldColCount;
1143 for (
i = newColCount;
i < oldColCount; ++
i)
1256 ERR(
"Sort column out of range\n");
1310 for (
int i = 0;
i < cItems;
i++)
1321 for (
i = 0;
i < cItems;
i++)
1338 TRACE(
"(%p)(pidl=%p)\n",
this, pidl);
1360 TRACE(
"(%p)(pidl=%p)\n",
this, pidl);
1378 TRACE(
"(%p)(pidlold=%p pidlnew=%p)\n",
this, pidlOld, pidlNew);
1387 lvItem.
iItem = nItem;
1395 lvItem.
iItem = nItem;
1417 TRACE(
"(%p)(pidl=%p)\n",
this, pidl);
1428 lvItem.
iItem = nItem;
1444 lvItem.
iItem = iItem;
1454 for (
INT iItem = -1;;)
1490 TRACE(
"%p\n",
this);
1499 dFlags |= SHCONTF_INCLUDEHIDDEN;
1504 dFlags |= SHCONTF_INCLUDESUPERHIDDEN;
1523 while((
S_OK == pEnumIDList->Next(1, &pidl, &dwFetched)) && dwFetched)
1708 TRACE(
"%p\n",
this);
1713 ERR(
"Error Registering DragDrop\n");
1742 if (
FAILED(
hr) || (!pidlTarget && !fEvents))
1752 ntreg.
pidl = pidlTarget;
1865 bool forceMerge =
false;
1934 const UINT maxItems = 15;
1935 const UINT idMore = 0x1337;
1936 UINT idFirst = idMore + 1, idLast = idFirst;
1937 UINT lastValidListCol = 0;
1946 pt.x =
r.left + ((
r.right -
r.left) / 2);
1947 pt.y =
r.top + ((
r.bottom -
r.top) / 2);
1954 for (
UINT foldCol = 0;; ++foldCol)
1983 lastValidListCol = listCol;
1986 if (idLast - idFirst == maxItems)
2008 if (idCmd == idMore)
2010 FIXME(
"Open More dialog\n");
2014 UINT foldCol = idCmd - idFirst;
2066 TRACE(
"-- selected Item found\n");
2074 CMINVOKECOMMANDINFOEX cmi;
2077 cmi.cbSize =
sizeof(cmi);
2079 cmi.lpVerb = lpVerb;
2083 cmi.fMask |= CMIC_MASK_SHIFT_DOWN;
2086 cmi.fMask |= CMIC_MASK_CONTROL_DOWN;
2090 cmi.fMask |= CMIC_MASK_PTINVOKE;
2100 cmi.fMask |= CMIC_MASK_UNICODE;
2101 cmi.lpDirectory = szDirA;
2102 cmi.lpDirectoryW = szDirW;
2105 HRESULT hr = pCM->InvokeCommand((LPCMINVOKECOMMANDINFO)&cmi);
2126 if (hResult ==
S_OK)
2145 if (uCommand == (
UINT)-1)
2147 ERR(
"GetMenuDefaultItem returned -1\n");
2162 TRACE(
"(%p)\n",
this);
2166 ERR(
"HACK: Aborting context menu in nested call\n");
2192 SelectItem(hittest.iItem, SVSI_SELECT | SVSI_DESELECTOTHERS | SVSI_ENSUREVISIBLE);
2253 pcdb2->Notify(
static_cast<IShellView*
>(
this), CDB2N_CONTEXTMENU_START);
2269 pcdb2->Notify(
static_cast<IShellView*
>(
this), CDB2N_CONTEXTMENU_DONE);
2299 SFGAOF rfg = SFGAO_BROWSABLE | SFGAO_CANCOPY | SFGAO_CANLINK | SFGAO_CANMOVE | SFGAO_CANDELETE | SFGAO_CANRENAME | SFGAO_HASPROPSHEET | SFGAO_FILESYSTEM | SFGAO_FOLDER;
2325 WORD wWidth, wHeight;
2330 TRACE(
"%p width=%u height=%u\n",
this, wWidth, wHeight);
2350 TRACE(
"%p\n",
this);
2361 TRACE(
"%p uState=%x\n",
this, uState);
2398 SFGAOF rfg = SFGAO_CANCOPY | SFGAO_CANMOVE | SFGAO_FILESYSTEM;
2403 if (!bCopy && !(rfg & SFGAO_CANMOVE))
2405 if (bCopy && !(rfg & SFGAO_CANCOPY))
2424 TRACE(
"%p\n",
this);
2444 TRACE(
"(%p) stub\n",
this);
2465 TRACE(
"(%p)->(0x%08x 0x%08x %p) stub\n",
this, dwCmdID, dwCmd, hwndCmd);
2517 for (
int i=0;
i < nCount;
i++)
2564 cbValue =
sizeof(dwValue);
2585 TRACE(
"%p CtlID=%u lpnmh->code=%x\n",
this, CtlID, lpnmh->
code);
2587 switch (lpnmh->
code)
2590 TRACE(
"-- NM_SETFOCUS %p\n",
this);
2594 TRACE(
"-- NM_KILLFOCUS %p\n",
this);
2600 TRACE(
"-- NM_CUSTOMDRAW %p\n",
this);
2603 TRACE(
"-- NM_RELEASEDCAPTURE %p\n",
this);
2606 TRACE(
"-- NM_CLICK %p\n",
this);
2609 TRACE(
"-- NM_RCLICK %p\n",
this);
2612 TRACE(
"-- NM_DBLCLK %p\n",
this);
2616 TRACE(
"-- NM_RETURN %p\n",
this);
2620 TRACE(
"-- HDN_ENDTRACKW %p\n",
this);
2625 TRACE(
"-- LVN_DELETEITEM %p\n",
this);
2630 TRACE(
"-- LVN_DELETEALLITEMS %p\n",
this);
2633 TRACE(
"-- LVN_INSERTITEM (STUB)%p\n",
this);
2636 TRACE(
"-- LVN_ITEMACTIVATE %p\n",
this);
2653 TRACE(
"-- LVN_GETDISPINFO %p\n",
this);
2681 ULONG attributes = SFGAO_HIDDEN;
2684 if (attributes & SFGAO_HIDDEN)
2691 TRACE(
"-- LVN_ITEMCHANGED %p\n",
this);
2706 TRACE(
"-- LVN_BEGINDRAG\n");
2718 dwEffect |=
dwAttributes & (SFGAO_CANCOPY | SFGAO_CANLINK);
2722 piaso->SetAsyncMode(
TRUE);
2746 DWORD dwAttr = SFGAO_CANRENAME;
2749 TRACE(
"-- LVN_BEGINLABELEDITW %p\n",
this);
2752 if (SFGAO_CANRENAME & dwAttr)
2758 if (!(dwAttr & SFGAO_FOLDER) && (dwAttr & SFGAO_FILESYSTEM) &&
2788 TRACE(
"-- LVN_ENDLABELEDITW %p\n",
this);
2816 TRACE(
"-- %p WM_COMMAND %x unhandled\n",
this, lpnmh->
code);
2829 if (!pidl1 || !pidl2)
2852 ERR(
"hLock == NULL\n");
2856 TRACE(
"(%p)(%p,%p,%p)\n",
this, Pidls[0], Pidls[1],
lParam);
2866 lEvent &= ~SHCNE_INTERRUPT;
2908 if (child0 && child1)
2947 ERR(
"no context menu\n");
3037 TRACE(
"(%p)\n",
this);
3046 FIXME(
"(%p) stub\n",
this);
3070 FIXME(
"(%p)\n",
this);
3076 TRACE(
"(%p)->(state=%x)\n",
this, uState);
3099 TRACE(
"(%p)\n",
this);
3117 TRACE(
"(%p)\n",
this);
3165 TRACE(
"(%p)->(%p) vmode=%x flags=%x\n",
this, lpfs,
3229 bool fallback =
false;
3272 if (failed || !cols.
Count)
3348 hr = pStream->
Write(&cvs,
sizeof(cvs), &written);
3350 hr = pStream->
Write(&cols, cbColumns, &written);
3364#define UPDATEFOLDERVIEWFLAGS(bits, bit, set) ( (bits) = ((bits) & ~(bit)) | ((set) ? (bit) : 0) )
3376 TRACE(
"(%p)->(pidl=%p, 0x%08x) stub\n",
this, pidl,
uFlags);
3380 ERR(
"!m_ListView\n");
3396 if (
uFlags & SVSI_SELECT)
3399 lvItem.
state &= ~LVIS_SELECTED;
3401 if (
uFlags & SVSI_FOCUSED)
3404 lvItem.
state &= ~LVIS_FOCUSED;
3408 if (
uFlags & SVSI_DESELECTOTHERS)
3410 lvItem.
state &= ~LVIS_SELECTED;
3412 lvItem.
state &= ~LVIS_FOCUSED;
3419 if (
uFlags & SVSI_ENSUREVISIBLE)
3422 if((
uFlags & SVSI_EDIT) == SVSI_EDIT)
3473 TRACE(
"-- (%p)->(interface=%p)\n",
this, *ppvOut);
3489 TRACE(
"(%p)->(%p), stub\n",
this, pViewMode);
3501 TRACE(
"(%p)->(%u), stub\n",
this, ViewMode);
3527 FIXME(
"ViewMode %d not implemented\n", ViewMode);
3582 TRACE(
"(%p)->(%p)\n",
this, piItem);
3591 TRACE(
"(%p)->(%p)\n",
this, piItem);
3602 ERR(
"!m_ListView\n");
3607 if (lvIndex == -1 || ppt ==
NULL)
3616 TRACE(
"(%p)->(%p)\n",
this, ppt);
3620 ERR(
"!m_ListView\n");
3629 ppt->
x = spacing.
cx;
3630 ppt->
y = spacing.
cy;
3661 if (
dwFlags & SVSI_ENSUREVISIBLE)
3665 if (
dwFlags & SVSI_DESELECTOTHERS)
3677 if ((
dwFlags & SVSI_EDIT) == SVSI_EDIT)
3691 for (
UINT i = 0 ;
i < cidl;
i++)
3722 OLEMENUGROUPWIDTHS omw = { { 0, 0, 0, 0, 0, 0 } };
3728 TRACE(
"(%p)->(shlview=%p shlbrs=%p rec=%p hwnd=%p vmode=%x flags=%x)\n",
th