/* Copyright 1996 Microsoft */ #ifndef _ACLMULTI_H_ #define _ACLMULTI_H_ // // CACLMulti is an AutoComplete List that simply contains // other AutoComplete Lists. Objects are added via IObjMgr // methods, and each IEnumString method is // just passed on to each sub list in turn. // class CACLMulti : public IEnumACString , public IObjMgr , public IACList { public: ////////////////////////////////////////////////////// // Public Interfaces ////////////////////////////////////////////////////// // *** IUnknown *** virtual STDMETHODIMP_(ULONG) AddRef(void); virtual STDMETHODIMP_(ULONG) Release(void); virtual STDMETHODIMP QueryInterface(REFIID riid, LPVOID *ppvObj); // *** IEnumString *** virtual STDMETHODIMP Next(ULONG celt, LPOLESTR *rgelt, ULONG *pceltFetched); virtual STDMETHODIMP Skip(ULONG celt); virtual STDMETHODIMP Reset(void); virtual STDMETHODIMP Clone(IEnumString **ppenum); // *** IEnumACString ** virtual STDMETHODIMP NextItem(LPOLESTR pszUrl, ULONG cchMax, ULONG* pulSortIndex); virtual STDMETHODIMP SetEnumOptions(DWORD dwOptions) { return E_NOTIMPL; }; virtual STDMETHODIMP GetEnumOptions(DWORD *pdwOptions) { return E_NOTIMPL; }; // *** IObjMgr *** virtual STDMETHODIMP Append(IUnknown *punk); virtual STDMETHODIMP Remove(IUnknown *punk); // *** IACList *** virtual STDMETHODIMP Expand(LPCOLESTR pszExpand); protected: // Constructor / Destructor (protected so we can't create on stack) CACLMulti(void); ~CACLMulti(void); // Instance creator friend HRESULT CACLMulti_CreateInstance(IUnknown *punkOuter, IUnknown **ppunk, LPCOBJECTINFO poi); friend HRESULT CACLMulti_Create(IEnumString **ppenum, CACLMulti * paclMultiToCopy); // Private variables DWORD _cRef; // COM reference count int _iSubList; // Current sublist for Next() operations HDSA _hdsa; // HDSA of sublists // Private methods static int _FreeListItem(LPVOID p, LPVOID d); }; #endif // _ACLMULTI_H_