[SHELL32] Modify context menu to include Align To Grid, and remove Line Up Icons

Implement support for using Align To Grid, which itself simply sets the LVS_EX_SNAPTOGRID extended style of the list view control
This commit is contained in:
Charles Ambrye
2020-04-19 19:49:38 -07:00
committed by Giannis Adamopoulos
parent 733a32dade
commit c82ba3485e
38 changed files with 97 additions and 71 deletions

View File

@@ -116,6 +116,7 @@ class CDefView :
HRESULT _MergeToolbar();
BOOL _Sort();
HRESULT _DoFolderViewCB(UINT uMsg, WPARAM wParam, LPARAM lParam);
HRESULT _GetSnapToGrid();
public:
CDefView();
@@ -571,6 +572,9 @@ BOOL CDefView::CreateList()
if (m_FolderSettings.fFlags & FWF_AUTOARRANGE)
dwStyle |= LVS_AUTOARRANGE;
if (m_FolderSettings.fFlags & FWF_SNAPTOGRID)
dwExStyle |= LVS_EX_SNAPTOGRID;
if (m_FolderSettings.fFlags & FWF_DESKTOP)
m_FolderSettings.fFlags |= FWF_NOCLIENTEDGE | FWF_NOSCROLL;
@@ -1311,13 +1315,20 @@ HRESULT CDefView::FillArrangeAsMenu(HMENU hmenuArrange)
if (m_FolderSettings.ViewMode == FVM_DETAILS || m_FolderSettings.ViewMode == FVM_LIST)
{
EnableMenuItem(hmenuArrange, FCIDM_SHVIEW_AUTOARRANGE, MF_BYCOMMAND | MF_GRAYED);
EnableMenuItem(hmenuArrange, FCIDM_SHVIEW_ALIGNTOGRID, MF_BYCOMMAND | MF_GRAYED);
}
else
{
EnableMenuItem(hmenuArrange, FCIDM_SHVIEW_AUTOARRANGE, MF_BYCOMMAND);
EnableMenuItem(hmenuArrange, FCIDM_SHVIEW_AUTOARRANGE, MF_BYCOMMAND);
EnableMenuItem(hmenuArrange, FCIDM_SHVIEW_ALIGNTOGRID, MF_BYCOMMAND);
if (GetAutoArrange() == S_OK)
CheckMenuItem(hmenuArrange, FCIDM_SHVIEW_AUTOARRANGE, MF_CHECKED);
if (_GetSnapToGrid() == S_OK)
CheckMenuItem(hmenuArrange, FCIDM_SHVIEW_ALIGNTOGRID, MF_CHECKED);
else
CheckMenuItem(hmenuArrange, FCIDM_SHVIEW_ALIGNTOGRID, MF_UNCHECKED);
}
@@ -1770,6 +1781,12 @@ LRESULT CDefView::OnCommand(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL &bHand
case FCIDM_SHVIEW_SNAPTOGRID:
m_ListView.Arrange(LVA_SNAPTOGRID);
break;
case FCIDM_SHVIEW_ALIGNTOGRID:
if (_GetSnapToGrid() == S_OK)
m_ListView.SetExtendedListViewStyle(0, LVS_EX_SNAPTOGRID);
else
ArrangeGrid();
break;
case FCIDM_SHVIEW_AUTOARRANGE:
if (GetAutoArrange() == S_OK)
m_ListView.ModifyStyle(LVS_AUTOARRANGE, 0);
@@ -2729,6 +2746,12 @@ HRESULT STDMETHODCALLTYPE CDefView::GetAutoArrange()
return ((m_ListView.GetStyle() & LVS_AUTOARRANGE) ? S_OK : S_FALSE);
}
HRESULT CDefView::_GetSnapToGrid()
{
DWORD dwExStyle = (DWORD)m_ListView.SendMessage(LVM_GETEXTENDEDLISTVIEWSTYLE, 0, 0);
return ((dwExStyle & LVS_EX_SNAPTOGRID) ? S_OK : S_FALSE);
}
HRESULT STDMETHODCALLTYPE CDefView::SelectItem(int iItem, DWORD dwFlags)
{
LVITEMW lvItem;
@@ -2905,8 +2928,8 @@ HRESULT STDMETHODCALLTYPE CDefView::GetArrangeParam(LPARAM *sort)
HRESULT STDMETHODCALLTYPE CDefView::ArrangeGrid()
{
FIXME("(%p) stub\n", this);
return E_NOTIMPL;
m_ListView.SetExtendedListViewStyle(LVS_EX_SNAPTOGRID, LVS_EX_SNAPTOGRID);
return S_OK;
}
HRESULT STDMETHODCALLTYPE CDefView::AutoArrange()