mirror of
https://github.com/reactos/reactos.git
synced 2025-02-22 16:36:33 +00:00
[BROWSEUI] CISFBand: Misc fixes
- Slightly improve the implementation of IShellFolderBand - Show both folders and files in the toolbar - Use the name of the folder shown as the name of the band
This commit is contained in:
parent
37e6151b40
commit
ee3b732043
2 changed files with 63 additions and 9 deletions
|
@ -37,7 +37,8 @@ CISFBand::CISFBand() :
|
||||||
m_BandID(0),
|
m_BandID(0),
|
||||||
m_pidl(NULL),
|
m_pidl(NULL),
|
||||||
m_textFlag(true),
|
m_textFlag(true),
|
||||||
m_iconFlag(true)
|
m_iconFlag(true),
|
||||||
|
m_QLaunch(false)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -84,7 +85,7 @@ HRESULT CISFBand::CreateSimpleToolbar(HWND hWndParent)
|
||||||
CComPtr<IEnumIDList> pEndl;
|
CComPtr<IEnumIDList> pEndl;
|
||||||
LPITEMIDLIST pidl;
|
LPITEMIDLIST pidl;
|
||||||
STRRET stret;
|
STRRET stret;
|
||||||
hr = m_pISF->EnumObjects(0, SHCONTF_FOLDERS, &pEndl);
|
hr = m_pISF->EnumObjects(0, SHCONTF_FOLDERS|SHCONTF_NONFOLDERS, &pEndl);
|
||||||
if (FAILED_UNEXPECTEDLY(hr))
|
if (FAILED_UNEXPECTEDLY(hr))
|
||||||
{
|
{
|
||||||
DestroyWindow();
|
DestroyWindow();
|
||||||
|
@ -258,7 +259,12 @@ HRESULT CISFBand::CreateSimpleToolbar(HWND hWndParent)
|
||||||
pdbi->ptActual = actualSize;
|
pdbi->ptActual = actualSize;
|
||||||
}
|
}
|
||||||
if (pdbi->dwMask & DBIM_TITLE)
|
if (pdbi->dwMask & DBIM_TITLE)
|
||||||
wcscpy(pdbi->wszTitle, L"Quick Launch");
|
{
|
||||||
|
if (!ILGetDisplayNameEx(NULL, m_pidl, pdbi->wszTitle, ILGDN_INFOLDER))
|
||||||
|
{
|
||||||
|
pdbi->dwMask &= ~DBIM_TITLE;
|
||||||
|
}
|
||||||
|
}
|
||||||
if (pdbi->dwMask & DBIM_MODEFLAGS)
|
if (pdbi->dwMask & DBIM_MODEFLAGS)
|
||||||
{
|
{
|
||||||
pdbi->dwModeFlags = DBIMF_NORMAL | DBIMF_VARIABLEHEIGHT | DBIMF_USECHEVRON | DBIMF_NOMARGINS | DBIMF_BKCOLOR | DBIMF_ADDTOFRONT;
|
pdbi->dwModeFlags = DBIMF_NORMAL | DBIMF_VARIABLEHEIGHT | DBIMF_USECHEVRON | DBIMF_NOMARGINS | DBIMF_BKCOLOR | DBIMF_ADDTOFRONT;
|
||||||
|
@ -437,20 +443,60 @@ HRESULT CISFBand::CreateSimpleToolbar(HWND hWndParent)
|
||||||
// *** IShellFolderBand ***
|
// *** IShellFolderBand ***
|
||||||
STDMETHODIMP CISFBand::GetBandInfoSFB(PBANDINFOSFB pbi)
|
STDMETHODIMP CISFBand::GetBandInfoSFB(PBANDINFOSFB pbi)
|
||||||
{
|
{
|
||||||
|
if (pbi->dwMask == ISFB_MASK_IDLIST)
|
||||||
|
{
|
||||||
|
pbi->pidl = ILClone(m_pidl);
|
||||||
|
if (!pbi->pidl)
|
||||||
|
return E_OUTOFMEMORY;
|
||||||
|
return S_OK;
|
||||||
|
}
|
||||||
|
|
||||||
return E_NOTIMPL;
|
return E_NOTIMPL;
|
||||||
}
|
}
|
||||||
|
|
||||||
STDMETHODIMP CISFBand::InitializeSFB(IShellFolder *psf, PCIDLIST_ABSOLUTE pidl)
|
STDMETHODIMP CISFBand::InitializeSFB(IShellFolder *psf, PCIDLIST_ABSOLUTE pidl)
|
||||||
{
|
{
|
||||||
if (_ILIsDesktop(pidl))
|
HRESULT hr;
|
||||||
|
|
||||||
|
if (!psf && !pidl)
|
||||||
|
return E_INVALIDARG;
|
||||||
|
|
||||||
|
if (psf && pidl)
|
||||||
|
return E_INVALIDARG;
|
||||||
|
|
||||||
|
if (pidl != NULL)
|
||||||
{
|
{
|
||||||
m_pISF = psf;
|
CComPtr<IShellFolder> psfDesktop;
|
||||||
|
hr = SHGetDesktopFolder(&psfDesktop);
|
||||||
|
if (FAILED_UNEXPECTEDLY(hr))
|
||||||
|
return hr;
|
||||||
|
|
||||||
|
if (_ILIsDesktop(pidl))
|
||||||
|
{
|
||||||
|
m_pISF = psfDesktop;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
hr = psfDesktop->BindToObject(pidl, NULL, IID_PPV_ARG(IShellFolder, &m_pISF));
|
||||||
|
if (FAILED_UNEXPECTEDLY(hr))
|
||||||
|
return hr;
|
||||||
|
}
|
||||||
|
|
||||||
m_pidl = ILClone(pidl);
|
m_pidl = ILClone(pidl);
|
||||||
}
|
}
|
||||||
else
|
|
||||||
|
if (psf != NULL)
|
||||||
{
|
{
|
||||||
psf->BindToObject(pidl, 0, IID_PPV_ARG(IShellFolder, &m_pISF));
|
CComPtr<IPersistFolder2> ppf2;
|
||||||
m_pidl = ILClone(pidl);
|
hr = psf->QueryInterface(IID_PPV_ARG(IPersistFolder2, &ppf2));
|
||||||
|
if (FAILED_UNEXPECTEDLY(hr))
|
||||||
|
return hr;
|
||||||
|
|
||||||
|
hr = ppf2->GetCurFolder(&m_pidl);
|
||||||
|
if (FAILED_UNEXPECTEDLY(hr))
|
||||||
|
return hr;
|
||||||
|
|
||||||
|
m_pISF = psf;
|
||||||
}
|
}
|
||||||
|
|
||||||
return S_OK;
|
return S_OK;
|
||||||
|
@ -458,6 +504,13 @@ HRESULT CISFBand::CreateSimpleToolbar(HWND hWndParent)
|
||||||
|
|
||||||
STDMETHODIMP CISFBand::SetBandInfoSFB( PBANDINFOSFB pbi)
|
STDMETHODIMP CISFBand::SetBandInfoSFB( PBANDINFOSFB pbi)
|
||||||
{
|
{
|
||||||
|
if ((pbi->dwMask & ISFB_MASK_STATE) &&
|
||||||
|
(pbi->dwState & ISFB_STATE_QLINKSMODE) &&
|
||||||
|
(pbi->dwStateMask & ISFB_STATE_QLINKSMODE))
|
||||||
|
{
|
||||||
|
m_QLaunch = true;
|
||||||
|
}
|
||||||
|
|
||||||
return E_NOTIMPL;
|
return E_NOTIMPL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -25,11 +25,12 @@ class CISFBand :
|
||||||
|
|
||||||
// Toolbar
|
// Toolbar
|
||||||
CComPtr<IShellFolder> m_pISF;
|
CComPtr<IShellFolder> m_pISF;
|
||||||
PCIDLIST_ABSOLUTE m_pidl;
|
PIDLIST_ABSOLUTE m_pidl;
|
||||||
|
|
||||||
// Menu
|
// Menu
|
||||||
BOOL m_textFlag;
|
BOOL m_textFlag;
|
||||||
BOOL m_iconFlag;
|
BOOL m_iconFlag;
|
||||||
|
BOOL m_QLaunch;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue