/* * PROJECT: ReactOS Font Shell Extension * LICENSE: GPL-2.0-or-later (https://spdx.org/licenses/GPL-2.0-or-later) * PURPOSE: CEnumFonts implementation * COPYRIGHT: Copyright 2019 Mark Jansen */ #include "precomp.h" WINE_DEFAULT_DEBUG_CHANNEL(fontext); class CEnumFonts : public CComObjectRootEx, public IEnumIDList { private: DWORD m_dwFlags; ULONG m_Index; public: CEnumFonts() :m_dwFlags(0) ,m_Index(0) { } STDMETHODIMP Initialize(CFontExt* folder, DWORD flags) { m_dwFlags = flags; m_Index = 0; return S_OK; } // *** IEnumIDList methods *** STDMETHODIMP Next(ULONG celt, LPITEMIDLIST *rgelt, ULONG *pceltFetched) { if (!pceltFetched || !rgelt) return E_POINTER; ULONG Fetched = 0; while (celt) { celt--; if (m_Index < g_FontCache->Size()) { CStringW Name = g_FontCache->Name(m_Index); rgelt[Fetched] = _ILCreate(Name, m_Index); m_Index++; Fetched++; } } *pceltFetched = Fetched; return Fetched ? S_OK : S_FALSE; } STDMETHODIMP Skip(ULONG celt) { m_Index += celt; return S_OK; } STDMETHODIMP Reset() { m_Index = 0; return S_OK; } STDMETHODIMP Clone(IEnumIDList **ppenum) { return E_NOTIMPL; } public: DECLARE_NOT_AGGREGATABLE(CEnumFonts) DECLARE_PROTECT_FINAL_CONSTRUCT() BEGIN_COM_MAP(CEnumFonts) COM_INTERFACE_ENTRY_IID(IID_IEnumIDList, IEnumIDList) END_COM_MAP() }; HRESULT _CEnumFonts_CreateInstance(CFontExt* zip, DWORD flags, REFIID riid, LPVOID * ppvOut) { return ShellObjectCreatorInit(zip, flags, riid, ppvOut); }