//+---------------------------------------------------------------------------- // // Windows NT Directory Service Property Pages // // Microsoft Windows // Copyright (C) Microsoft Corporation, 1992 - 1999 // // File: objlist.h // // Contents: DS object list object header // // Classes: // // History: 20-Nov-97 EricB created // //----------------------------------------------------------------------------- #ifndef _OBJLIST_H_ #define _OBJLIST_H_ //#include //+---------------------------------------------------------------------------- // // Class: CMemberListItem // // Purpose: membership list data item. // //----------------------------------------------------------------------------- class CMemberListItem : public CDLink { public: CMemberListItem(void) : m_pwzDN(NULL), m_ptzName(NULL), m_pSid(NULL), m_fSidSet(FALSE), m_fCanBePrimarySet(FALSE), m_fCanBePrimary(FALSE), m_fIsPrimary(FALSE), m_fIsAlreadyMember(FALSE), m_fIsExternal(FALSE), m_ulScopeType(0) {}; ~CMemberListItem(void) {DO_DEL(m_pwzDN); DO_DEL(m_ptzName); DO_DEL(m_pSid);}; // CDLink method overrides: CMemberListItem * Next(void) {return (CMemberListItem *)CDLink::Next();}; CMemberListItem * Copy(void); BOOL IsSidSet(void) {return m_fSidSet;}; BOOL IsCanBePrimarySet(void) {return m_fCanBePrimarySet;}; BOOL CanBePrimary(void) {return m_fCanBePrimary;}; void SetCanBePrimary(BOOL fCanBePrimary) { m_fCanBePrimary = fCanBePrimary; m_fCanBePrimarySet = TRUE; }; BOOL SetSid(PSID pSid); PSID GetSid(void) {return m_pSid;}; BOOL IsPrimary(void) {return m_fIsPrimary;}; PWSTR m_pwzDN; PTSTR m_ptzName; PSID m_pSid; ULONG m_ulScopeType; BOOL m_fSidSet; BOOL m_fCanBePrimarySet; BOOL m_fCanBePrimary; BOOL m_fIsPrimary; BOOL m_fIsAlreadyMember; BOOL m_fIsExternal; // member is from an external domain and is // identified using the SID. }; //+---------------------------------------------------------------------------- // // Class: CMemberLinkList // // Purpose: Linked list of membership class objects. // //----------------------------------------------------------------------------- class CMemberLinkList { public: CMemberLinkList(void) : m_pListHead(NULL) {}; ~CMemberLinkList(void); CMemberListItem * FindItemRemove(PWSTR pwzDN); CMemberListItem * FindItemRemove(PSID pSid); CMemberListItem * RemoveFirstItem(void); BOOL AddItem(CMemberListItem * pItem, BOOL fMember = TRUE); int GetItemCount(void); private: CMemberListItem * m_pListHead; }; const int IDX_NAME_COL = 0; const int IDX_FOLDER_COL = 1; const int IDX_ERROR_COL = 1; const int OBJ_LIST_NAME_COL_WIDTH = 100; const int OBJ_LIST_PAGE_COL_WIDTH = 72; //+---------------------------------------------------------------------------- // // Class: CDsObjList // // Purpose: Base class for DS object lists that employ a two column // list view to show object Name and Folder. // //----------------------------------------------------------------------------- class CDsObjList { public: CDsObjList(HWND hPage, int idList); ~CDsObjList(void); HRESULT Init(BOOL fShowIcons = FALSE); HRESULT InsertIntoList(PTSTR ptzDisplayName, PVOID pData, int iIcon = -1); HRESULT GetItem(int index, PTSTR * pptzName, PVOID * ppData); BOOL GetCurListItem(int * pIndex, PTSTR * pptzName, PVOID * ppData); BOOL GetCurListItems(int ** ppIndex, PTSTR ** ppptzName, PVOID ** pppData, int* pNumSelected); virtual BOOL RemoveListItem(int Index); int GetCount(void) {return ListView_GetItemCount(m_hList);}; UINT GetSelectedCount(void) { return ListView_GetSelectedCount(m_hList);} virtual void ClearList(void) = 0; protected: HWND m_hPage; HWND m_hList; int m_idList; int m_nCurItem; BOOL m_fShowIcons; BOOL m_fLimitExceeded; }; void GetNameParts(const CStr& cstrCanonicalNameEx, CStr& cstrFolder, CStr & cstrName); //+---------------------------------------------------------------------------- // // Class: CDsMembershipList // // Purpose: Membership list class for the list-view control. // //----------------------------------------------------------------------------- class CDsMembershipList : public CDsObjList { public: CDsMembershipList(HWND hPage, int idList) : CDsObjList(hPage, idList) {}; ~CDsMembershipList(void) {}; HRESULT InsertIntoList(PTSTR ptzDisplayName, PVOID pData, int iIcon = -1) {return CDsObjList::InsertIntoList(ptzDisplayName, pData, iIcon);}; HRESULT InsertIntoList(PWSTR pwzPath, int iIcon = -1) {return CDsMembershipList::InsertIntoList(pwzPath, iIcon, FALSE, FALSE, FALSE, FALSE, 0);}; HRESULT InsertIntoNewList(PWSTR pwzPath, BOOL fPrimary = FALSE) {return CDsMembershipList::InsertIntoList(pwzPath, -1, TRUE, fPrimary, FALSE, TRUE, 0);}; HRESULT InsertIntoList(PWSTR pwzPath, int iIcon, BOOL fAlreadyMember, BOOL fPrimary, BOOL fIgnoreDups, BOOL fDontChkDups, ULONG flScopeType); HRESULT InsertIntoList(PSID pSid, PWSTR pwzPath); HRESULT InsertIntoList(CMemberListItem * pItem); HRESULT InsertExternalIntoList(PWSTR pwzPath, ULONG ulScopeType) {return CDsMembershipList::InsertIntoList(pwzPath, -1, FALSE, FALSE, FALSE, FALSE, ulScopeType);}; HRESULT MergeIntoList(PWSTR pwzPath) {return CDsMembershipList::InsertIntoList(pwzPath, -1, TRUE, FALSE, TRUE, FALSE, 0);}; HRESULT GetItem(int index, CMemberListItem ** ppData) {return CDsObjList::GetItem(index, NULL, (PVOID *)ppData);}; BOOL GetCurListItem(int * pIndex, PTSTR * pptzName, CMemberListItem ** ppData) {return CDsObjList::GetCurListItem(pIndex, pptzName, (PVOID *)ppData);}; BOOL GetCurListItems(int ** ppIndex, PTSTR ** ppptzName, CMemberListItem *** pppData, int* pNumSelected) {return CDsObjList::GetCurListItems(ppIndex, ppptzName, (PVOID **)pppData, pNumSelected);}; int GetIndex(LPCWSTR pwzDN, ULONG ulStart, ULONG ulEnd); BOOL RemoveListItem(int Index); void ClearList(void); HRESULT SetMemberIcons(CDsPropPageBase * pPage); }; struct CLASS_CACHE_ENTRY { WCHAR wzClass[MAX_PATH]; int iIcon; int iDisabledIcon; }; #define ICON_CACHE_NUM_CLASSES 6 //+-------------------------------------------------------------------------- // // Class: CClassIconCache // // Purpose: Build an image list for well known DS classes and map the // image indices to the class names. // // Notes: CAUTION: the imagelist is destroyed in the dtor, therefore // it should only be used with listview controls that have // the LVS_SHAREIMAGELISTS style set. // //--------------------------------------------------------------------------- class CClassIconCache { public: CClassIconCache(void); ~CClassIconCache(void); int GetClassIconIndex(PCWSTR pwzClass, BOOL fDisabled = FALSE); int AddClassIcon(PCWSTR pwzClass, BOOL fDisabled = FALSE); HIMAGELIST GetImageList(void); void ClearAll(); private: HRESULT Initialize(void); BOOL m_fInitialized; CLASS_CACHE_ENTRY* m_prgcce; UINT m_nImageCount; HIMAGELIST m_hImageList; }; extern CClassIconCache g_ClassIconCache; #endif // _OBJLIST_H_