[rosctrls.h] CListView: Add Arrange method

[SHELL32] CDefView: Start implementing Auto arrange.
So far its effect is only shown when the browser window resizes.
This commit is contained in:
Giannis Adamopoulos 2018-10-22 23:51:37 +03:00
parent 410cfbfe15
commit c69ef281c0
2 changed files with 29 additions and 22 deletions

View file

@ -125,7 +125,6 @@ class CDefView :
HRESULT OnStateChange(UINT uFlags); HRESULT OnStateChange(UINT uFlags);
void UpdateStatusbar(); void UpdateStatusbar();
void CheckToolbar(); void CheckToolbar();
void SetStyle(DWORD dwAdd, DWORD dwRemove);
BOOL CreateList(); BOOL CreateList();
void UpdateListColors(); void UpdateListColors();
BOOL InitList(); BOOL InitList();
@ -500,18 +499,6 @@ void CDefView::UpdateStatusbar()
* *
* ##### helperfunctions for initializing the view ##### * ##### helperfunctions for initializing the view #####
*/ */
/**********************************************************
* change the style of the listview control
*/
void CDefView::SetStyle(DWORD dwAdd, DWORD dwRemove)
{
DWORD tmpstyle;
TRACE("(%p)\n", this);
tmpstyle = ::GetWindowLongPtrW(m_ListView, GWL_STYLE);
::SetWindowLongPtrW(m_ListView, GWL_STYLE, dwAdd | (tmpstyle & ~dwRemove));
}
/********************************************************** /**********************************************************
* ShellView_CreateList() * ShellView_CreateList()
@ -1193,10 +1180,18 @@ HRESULT CDefView::FillArrangeAsMenu(HMENU hmenuArrange)
MF_BYCOMMAND); MF_BYCOMMAND);
if (m_FolderSettings.ViewMode == FVM_DETAILS || m_FolderSettings.ViewMode == FVM_LIST) if (m_FolderSettings.ViewMode == FVM_DETAILS || m_FolderSettings.ViewMode == FVM_LIST)
{
EnableMenuItem(hmenuArrange, FCIDM_SHVIEW_AUTOARRANGE, MF_BYCOMMAND | MF_GRAYED); EnableMenuItem(hmenuArrange, FCIDM_SHVIEW_AUTOARRANGE, MF_BYCOMMAND | MF_GRAYED);
}
else else
{
EnableMenuItem(hmenuArrange, FCIDM_SHVIEW_AUTOARRANGE, MF_BYCOMMAND); EnableMenuItem(hmenuArrange, FCIDM_SHVIEW_AUTOARRANGE, MF_BYCOMMAND);
if (GetAutoArrange() == S_OK)
CheckMenuItem(hmenuArrange, FCIDM_SHVIEW_AUTOARRANGE, MF_CHECKED);
}
return S_OK; return S_OK;
} }
@ -1560,25 +1555,25 @@ LRESULT CDefView::OnCommand(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL &bHand
{ {
case FCIDM_SHVIEW_SMALLICON: case FCIDM_SHVIEW_SMALLICON:
m_FolderSettings.ViewMode = FVM_SMALLICON; m_FolderSettings.ViewMode = FVM_SMALLICON;
SetStyle (LVS_SMALLICON, LVS_TYPEMASK); m_ListView.ModifyStyle(LVS_TYPEMASK, LVS_SMALLICON);
CheckToolbar(); CheckToolbar();
break; break;
case FCIDM_SHVIEW_BIGICON: case FCIDM_SHVIEW_BIGICON:
m_FolderSettings.ViewMode = FVM_ICON; m_FolderSettings.ViewMode = FVM_ICON;
SetStyle (LVS_ICON, LVS_TYPEMASK); m_ListView.ModifyStyle(LVS_TYPEMASK, LVS_ICON);
CheckToolbar(); CheckToolbar();
break; break;
case FCIDM_SHVIEW_LISTVIEW: case FCIDM_SHVIEW_LISTVIEW:
m_FolderSettings.ViewMode = FVM_LIST; m_FolderSettings.ViewMode = FVM_LIST;
SetStyle (LVS_LIST, LVS_TYPEMASK); m_ListView.ModifyStyle(LVS_TYPEMASK, LVS_LIST);
CheckToolbar(); CheckToolbar();
break; break;
case FCIDM_SHVIEW_REPORTVIEW: case FCIDM_SHVIEW_REPORTVIEW:
m_FolderSettings.ViewMode = FVM_DETAILS; m_FolderSettings.ViewMode = FVM_DETAILS;
SetStyle (LVS_REPORT, LVS_TYPEMASK); m_ListView.ModifyStyle(LVS_TYPEMASK, LVS_REPORT);
CheckToolbar(); CheckToolbar();
break; break;
@ -1593,9 +1588,14 @@ LRESULT CDefView::OnCommand(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL &bHand
break; break;
case FCIDM_SHVIEW_SNAPTOGRID: case FCIDM_SHVIEW_SNAPTOGRID:
case FCIDM_SHVIEW_AUTOARRANGE:
//FIXME //FIXME
break; break;
case FCIDM_SHVIEW_AUTOARRANGE:
if (GetAutoArrange() == S_OK)
m_ListView.ModifyStyle(LVS_AUTOARRANGE, 0);
else
AutoArrange();
break;
case FCIDM_SHVIEW_SELECTALL: case FCIDM_SHVIEW_SELECTALL:
m_ListView.SetItemState(-1, LVIS_SELECTED, LVIS_SELECTED); m_ListView.SetItemState(-1, LVIS_SELECTED, LVIS_SELECTED);
break; break;
@ -2380,7 +2380,7 @@ HRESULT STDMETHODCALLTYPE CDefView::SetCurrentViewMode(UINT ViewMode)
} }
} }
SetStyle(dwStyle, LVS_TYPEMASK); m_ListView.ModifyStyle(LVS_TYPEMASK, dwStyle);
/* This will not necessarily be the actual mode set above. /* This will not necessarily be the actual mode set above.
This mimics the behavior of Windows XP. */ This mimics the behavior of Windows XP. */
@ -2481,7 +2481,7 @@ HRESULT STDMETHODCALLTYPE CDefView::GetDefaultSpacing(POINT *ppt)
HRESULT STDMETHODCALLTYPE CDefView::GetAutoArrange() HRESULT STDMETHODCALLTYPE CDefView::GetAutoArrange()
{ {
return E_NOTIMPL; return ((m_ListView.GetStyle() & LVS_AUTOARRANGE) ? S_OK : S_FALSE);
} }
HRESULT STDMETHODCALLTYPE CDefView::SelectItem(int iItem, DWORD dwFlags) HRESULT STDMETHODCALLTYPE CDefView::SelectItem(int iItem, DWORD dwFlags)
@ -2666,8 +2666,9 @@ HRESULT STDMETHODCALLTYPE CDefView::ArrangeGrid()
HRESULT STDMETHODCALLTYPE CDefView::AutoArrange() HRESULT STDMETHODCALLTYPE CDefView::AutoArrange()
{ {
FIXME("(%p) stub\n", this); m_ListView.ModifyStyle(0, LVS_AUTOARRANGE);
return E_NOTIMPL; m_ListView.Arrange(LVA_DEFAULT);
return S_OK;
} }
HRESULT STDMETHODCALLTYPE CDefView::AddObject(PITEMID_CHILD pidl, UINT *item) HRESULT STDMETHODCALLTYPE CDefView::AddObject(PITEMID_CHILD pidl, UINT *item)

View file

@ -224,6 +224,12 @@ public:
{ {
return (BOOL)SendMessage(LVM_SETITEMPOSITION, nItem, MAKELPARAM(pPoint->x, pPoint->y)); return (BOOL)SendMessage(LVM_SETITEMPOSITION, nItem, MAKELPARAM(pPoint->x, pPoint->y));
} }
BOOL Arrange(UINT nCode)
{
return (BOOL)SendMessage(LVM_ARRANGE, nCode, 0);
}
}; };
template<typename TItemData = DWORD_PTR> template<typename TItemData = DWORD_PTR>