[SHELL32] CDefView: Start implementing Auto arrange.
So far its effect is only shown when the browser window resizes.
HRESULT OnStateChange(UINT uFlags);
void UpdateStatusbar();
void CheckToolbar();
HRESULT OnStateChange(UINT uFlags);
void UpdateStatusbar();
void CheckToolbar();
- void SetStyle(DWORD dwAdd, DWORD dwRemove);
BOOL CreateList();
void UpdateListColors();
BOOL InitList();
BOOL CreateList();
void UpdateListColors();
BOOL InitList();
*
* ##### 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()
MF_BYCOMMAND);
if (m_FolderSettings.ViewMode == FVM_DETAILS || m_FolderSettings.ViewMode == FVM_LIST)
MF_BYCOMMAND);
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);
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);
+ }
+
+
{
case FCIDM_SHVIEW_SMALLICON:
m_FolderSettings.ViewMode = FVM_SMALLICON;
{
case FCIDM_SHVIEW_SMALLICON:
m_FolderSettings.ViewMode = FVM_SMALLICON;
- SetStyle (LVS_SMALLICON, LVS_TYPEMASK);
+ m_ListView.ModifyStyle(LVS_TYPEMASK, LVS_SMALLICON);
CheckToolbar();
break;
case FCIDM_SHVIEW_BIGICON:
m_FolderSettings.ViewMode = FVM_ICON;
CheckToolbar();
break;
case FCIDM_SHVIEW_BIGICON:
m_FolderSettings.ViewMode = FVM_ICON;
- SetStyle (LVS_ICON, LVS_TYPEMASK);
+ m_ListView.ModifyStyle(LVS_TYPEMASK, LVS_ICON);
CheckToolbar();
break;
case FCIDM_SHVIEW_LISTVIEW:
m_FolderSettings.ViewMode = FVM_LIST;
CheckToolbar();
break;
case FCIDM_SHVIEW_LISTVIEW:
m_FolderSettings.ViewMode = FVM_LIST;
- SetStyle (LVS_LIST, LVS_TYPEMASK);
+ m_ListView.ModifyStyle(LVS_TYPEMASK, LVS_LIST);
CheckToolbar();
break;
case FCIDM_SHVIEW_REPORTVIEW:
m_FolderSettings.ViewMode = FVM_DETAILS;
CheckToolbar();
break;
case FCIDM_SHVIEW_REPORTVIEW:
m_FolderSettings.ViewMode = FVM_DETAILS;
- SetStyle (LVS_REPORT, LVS_TYPEMASK);
+ m_ListView.ModifyStyle(LVS_TYPEMASK, LVS_REPORT);
break;
case FCIDM_SHVIEW_SNAPTOGRID:
break;
case FCIDM_SHVIEW_SNAPTOGRID:
- case FCIDM_SHVIEW_AUTOARRANGE:
+ case FCIDM_SHVIEW_AUTOARRANGE:
+ if (GetAutoArrange() == S_OK)
+ m_ListView.ModifyStyle(LVS_AUTOARRANGE, 0);
+ else
+ AutoArrange();
+ break;
case FCIDM_SHVIEW_SELECTALL:
m_ListView.SetItemState(-1, LVIS_SELECTED, LVIS_SELECTED);
break;
case FCIDM_SHVIEW_SELECTALL:
m_ListView.SetItemState(-1, LVIS_SELECTED, LVIS_SELECTED);
break;
- SetStyle(dwStyle, LVS_TYPEMASK);
+ m_ListView.ModifyStyle(LVS_TYPEMASK, dwStyle);
/* This will not necessarily be the actual mode set above.
This mimics the behavior of Windows XP. */
/* This will not necessarily be the actual mode set above.
This mimics the behavior of Windows XP. */
HRESULT STDMETHODCALLTYPE CDefView::GetAutoArrange()
{
HRESULT STDMETHODCALLTYPE CDefView::GetAutoArrange()
{
+ 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)
HRESULT STDMETHODCALLTYPE CDefView::AutoArrange()
{
HRESULT STDMETHODCALLTYPE CDefView::AutoArrange()
{
- FIXME("(%p) stub\n", this);
- return E_NOTIMPL;
+ m_ListView.ModifyStyle(0, LVS_AUTOARRANGE);
+ 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)
{
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>