//+------------------------------------------------------------------------- // // Microsoft Windows // // Copyright (C) Microsoft Corporation, 1998 - 1999 // // File: attredit.h // //-------------------------------------------------------------------------- #ifndef _ATTREDIT_H #define _ATTREDIT_H #include "common.h" #include "attribute.h" #include "editor.h" // use the HIWORD for generic flags and leave the LOWORD for application specific data #define TN_FLAG_SHOW_MULTI (0x00010000) // shows combobox for multivalued attributes or edit box for single #define TN_FLAG_ENABLE_ADD (0x00020000) // shows add if set, shows set if not #define TN_FLAG_ENABLE_REMOVE (0x00040000) // shows remove if set, shows clear if not //////////////////////////////////////////////////////////////////////// class CAttrEditor; ///////////////////////////////////////////////////////////////////////// // CADSIAttrList typedef CList CAttrListBase; class CAttrList : public CAttrListBase { public: virtual ~CAttrList() { RemoveAllAttr(); } void RemoveAllAttr() { while (!IsEmpty()) delete RemoveTail(); } POSITION FindProperty(LPCWSTR lpszAttr); BOOL HasProperty(LPCWSTR lpszAttr); void GetNextDirty(POSITION& pos, CADSIAttr** ppAttr); BOOL HasDirty(); int GetDirtyCount() { int nCount = 0; POSITION pos = GetHeadPosition(); while (pos != NULL) { if (GetNext(pos)->IsDirty()) nCount++; } return nCount; } }; /////////////////////////////////////////////////////////////////////////// // CDNSManageButtonTextHelper class CDNSManageButtonTextHelper { public: CDNSManageButtonTextHelper(int nStates); ~CDNSManageButtonTextHelper(); BOOL Init(CWnd* pParentWnd, UINT nButtonID, UINT* nStrArray); void SetStateX(int nIndex); private: CWnd* m_pParentWnd; UINT m_nID; WCHAR* m_lpszText; int m_nStates; LPWSTR* m_lpszArr; }; /////////////////////////////////////////////////////////////////////////// // CDNSButtonToggleTextHelper class CDNSButtonToggleTextHelper : public CDNSManageButtonTextHelper { public: CDNSButtonToggleTextHelper(); void SetToggleState(BOOL bFirst) { SetStateX(bFirst ? 0 : 1); } }; ////////////////////////////////////////////////////////////////////////////////////////// // CADSIEditBox class CADSIEditBox : public CEdit { public: CADSIEditBox(CAttrEditor* pEditor) { ASSERT(pEditor != NULL); m_pEditor = pEditor; } afx_msg void OnChange(); protected: CAttrEditor* m_pEditor; DECLARE_MESSAGE_MAP() }; ////////////////////////////////////////////////////////////////////////////////////////// // CADSIValueBox class CADSIValueBox : public CEdit { public: CADSIValueBox(CAttrEditor* pEditor) { ASSERT(pEditor != NULL); m_pEditor = pEditor; } protected: CAttrEditor* m_pEditor; DECLARE_MESSAGE_MAP() }; ////////////////////////////////////////////////////////////////////////////////////////// // CADSIValueList class CADSIValueList: public CListBox { public: CADSIValueList(CAttrEditor* pEditor) { ASSERT(pEditor != NULL); m_pEditor = pEditor; } afx_msg void OnSelChange(); protected: CAttrEditor* m_pEditor; DECLARE_MESSAGE_MAP() }; ////////////////////////////////////////////////////////////////////////////////////////// // CADSIAddButton class CADSIAddButton: public CButton { public: CADSIAddButton(CAttrEditor* pEditor) { ASSERT(pEditor != NULL); m_pEditor = pEditor; } afx_msg void OnAdd(); protected: CAttrEditor* m_pEditor; DECLARE_MESSAGE_MAP() }; ////////////////////////////////////////////////////////////////////////////////////////// // CADSIRemoveButton class CADSIRemoveButton: public CButton { public: CADSIRemoveButton(CAttrEditor* pEditor) { ASSERT(pEditor != NULL); m_pEditor = pEditor; } afx_msg void OnRemove(); protected: CAttrEditor* m_pEditor; DECLARE_MESSAGE_MAP() }; ////////////////////////////////////////////////////////////////////////////////////////// // CAttrEditor class CAttrEditor { public: // Constructor // CAttrEditor(); // Destructor // ~CAttrEditor() { } BOOL Initialize(CPropertyPageBase* pParentWnd, CTreeNode* pTreeNode, LPCWSTR lpszServer, UINT nIDEdit, UINT nIDSyntax, UINT nIDValueBox, UINT nIDValueList, UINT nIDAddButton, UINT nIDRemoveButton, BOOL bComplete); BOOL Initialize(CPropertyPageBase* pParentWnd, CConnectionData* pConnectData, LPCWSTR lpszServer, UINT nIDEdit, UINT nIDSyntax, UINT nIDValueBox, UINT nIDValueList, UINT nIDAddButton, UINT nIDRemoveButton, BOOL bComplete, CAttrList* pAttrList); // Message Map functions // BOOL OnApply(); void OnEditChange(); void OnValueSelChange(); void OnAddValue(); void OnRemoveValue(); void SetAttribute(LPCWSTR lpszAttr, LPCWSTR lpszPath); // I return a CADSIAttr* because I check the cache to see if // that attribute has already been touched. If it has, the existing // attribute can be used to build the ui, if not a new one is created // and put into the cache. It is then returned to build the ui. // CADSIAttr* TouchAttr(LPCWSTR lpszAttr); CADSIAttr* TouchAttr(ADS_ATTR_INFO* pADsInfo, BOOL bMulti); protected: // Helper functions // void FillWithExisting(); void DisplayAttribute(); void DisplayFormatError(); void DisplayRootDSE(); BOOL IsMultiValued(ADS_ATTR_INFO* pAttrInfo); BOOL IsMultiValued(LPCWSTR lpszProp); BOOL IsRootDSEAttrMultiValued(LPCWSTR lpszAttr); void GetSyntax(LPCWSTR lpszProp, CString& sSyntax); void GetAttrFailed(); void SetPropertyUI(DWORD dwFlags, BOOL bAnd, BOOL bReset = FALSE); // Dialog Items // CADSIEditBox m_AttrEditBox; CADSIEditBox m_SyntaxBox; CADSIValueBox m_ValueBox; CADSIValueList m_ValueList; CADSIAddButton m_AddButton; CADSIRemoveButton m_RemoveButton; CPropertyPageBase* m_pParentWnd; CTreeNode* m_pTreeNode; // Data members // CString m_sAttr; CString m_sPath; CString m_sServer; CString m_sNotSet; CAttrList* m_ptouchedAttr; CADSIAttr* m_pAttr; CConnectionData* m_pConnectData; BOOL m_bExisting; DWORD m_dwMultiFlags; CDNSButtonToggleTextHelper m_AddButtonHelper; CDNSButtonToggleTextHelper m_RemoveButtonHelper; }; #endif _ATTREDIT_H