#ifndef __ATTRIBUTE_EDITOR_UI_H #define __ATTRIBUTE_EDITOR_UI_H #include "resource.h" #include "attrres.h" #include "attr.h" #include "IAttrEdt.h" //////////////////////////////////////////////////////////////////// // CValueEditDialog - base class for creating syntax specific editors class CValueEditDialog : public CDialog { public: virtual ~CValueEditDialog() {} protected: // // Force subclassing of this class // CValueEditDialog(UINT nDlgID) : CDialog(nDlgID) {} private: CValueEditDialog() {} CValueEditDialog(const CValueEditDialog& copyref) {} CValueEditDialog& operator=(const CValueEditDialog& copyref) {} public: virtual HRESULT Initialize(LPDS_ATTRIBUTE_EDITORINFO pAttributeEditorInfo); virtual HRESULT GetNewValue(PADSVALUE* ppADsValue, DWORD* pdwNumValues); DECLARE_MESSAGE_MAP(); protected: void GetClass(CString& szClassRef) { szClassRef = m_szClass; } void GetAttribute(CString& szAttributeRef) { szAttributeRef = m_szAttribute; } BOOL IsMultivalued() { return m_bMultivalued; } LPBINDINGFUNC GetBindingFunction() { return m_pfnBindingFunction; } LPARAM GetLParam() { return m_lParam; } PADSVALUE m_pOldADsValue; DWORD m_dwOldNumValues; CString m_szClass; CString m_szAttribute; BOOL m_bMultivalued; BOOL m_bReadOnly; ADSTYPE m_adsType; LPBINDINGFUNC m_pfnBindingFunction; LPARAM m_lParam; }; //////////////////////////////////////////////////////////////////// // LPEDITORDIALOGFUNC - editor creation function definition typedef CValueEditDialog* (*LPEDITORDIALOGFUNC)(PCWSTR pszClass, PCWSTR pszAttribute, ADSTYPE adsType, BOOL bMultivalued); //////////////////////////////////////////////////////////////////// // ATTR_EDITOR_MAP - struct used to map a specific attribute and // syntax to an editor typedef struct _attr_editor_map { PCWSTR pszClass; PCWSTR pszAttribute; ADSTYPE adsType; BOOL bMultivalued; LPEDITORDIALOGFUNC pfnCreateFunc; } ATTR_EDITOR_MAP, *PATTR_EDITOR_MAP; //////////////////////////////////////////////////////////////////// // CSingleStringEditor - string editor implementation for single valued // ADSTYPE_CASE_IGNORE_STRING, // ADSTYPE_CASE_EXACT_STRING, // ADSTYPE_PRINTABLE_STRING // class CSingleStringEditor : public CValueEditDialog { public: CSingleStringEditor() : CValueEditDialog(IDD_STRING_EDITOR_DIALOG) {} virtual BOOL OnInitDialog(); virtual void OnOK(); afx_msg void OnClear(); DECLARE_MESSAGE_MAP(); public: virtual HRESULT Initialize(LPDS_ATTRIBUTE_EDITORINFO pAttributeEditorInfo); virtual HRESULT GetNewValue(PADSVALUE* ppADsValue, DWORD* pdwNumValues); private: CString m_szOldValue; CString m_szNewValue; }; CValueEditDialog* CreateSingleStringEditor(PCWSTR pszClass, PCWSTR pszAttribute, ADSTYPE adsType, BOOL bMultivalued); //////////////////////////////////////////////////////////////////// // CMultiStringEditor - string editor implementation for multivalued // ADSTYPE_CASE_IGNORE_STRING, // ADSTYPE_CASE_EXACT_STRING, // ADSTYPE_PRINTABLE_STRING // class CMultiStringEditor : public CValueEditDialog { public: CMultiStringEditor() : CValueEditDialog(IDD_STRING_EDITOR_MULTI_DIALOG) {} virtual BOOL OnInitDialog(); virtual void OnOK(); afx_msg void OnAddButton(); afx_msg void OnRemoveButton(); afx_msg void OnListSelChange(); afx_msg void OnEditChange(); DECLARE_MESSAGE_MAP(); public: virtual HRESULT Initialize(LPDS_ATTRIBUTE_EDITORINFO pAttributeEditorInfo); virtual HRESULT GetNewValue(PADSVALUE* ppADsValue, DWORD* pdwNumValues); protected: void UpdateListboxHorizontalExtent(); void ManageButtonStates(); private: CStringList m_szOldValueList; CStringList m_szNewValueList; }; CValueEditDialog* CreateMultiStringEditor(PCWSTR pszClass, PCWSTR pszAttribute, ADSTYPE adsType, BOOL bMultivalued); //////////////////////////////////////////////////////////////////// // CSingleIntEditor - string editor implementation for single valued // ADSTYPE_INTEGER // class CSingleIntEditor : public CValueEditDialog { public: CSingleIntEditor() : CValueEditDialog(IDD_INT_EDITOR_DIALOG) { m_bValueSet = FALSE; } virtual BOOL OnInitDialog(); virtual void OnOK(); afx_msg void OnClear(); DECLARE_MESSAGE_MAP(); public: virtual HRESULT Initialize(LPDS_ATTRIBUTE_EDITORINFO pAttributeEditorInfo); virtual HRESULT GetNewValue(PADSVALUE* ppADsValue, DWORD* pdwNumValues); private: DWORD m_dwOldValue; DWORD m_dwNewValue; BOOL m_bValueSet; }; CValueEditDialog* CreateSingleIntEditor(PCWSTR pszClass, PCWSTR pszAttribute, ADSTYPE adsType, BOOL bMultivalued); //////////////////////////////////////////////////////////////////// // CMultiIntEditor - string editor implementation for multivalued // ADSTYPE_INTEGER, // class CMultiIntEditor : public CValueEditDialog { public: CMultiIntEditor() : CValueEditDialog(IDD_STRING_EDITOR_MULTI_DIALOG) {} virtual BOOL OnInitDialog(); virtual void OnOK(); afx_msg void OnAddButton(); afx_msg void OnRemoveButton(); afx_msg void OnListSelChange(); afx_msg void OnEditChange(); DECLARE_MESSAGE_MAP(); public: virtual HRESULT Initialize(LPDS_ATTRIBUTE_EDITORINFO pAttributeEditorInfo); virtual HRESULT GetNewValue(PADSVALUE* ppADsValue, DWORD* pdwNumValues); protected: void UpdateListboxHorizontalExtent(); void ManageButtonStates(); private: CList m_oldValueList; CList m_newValueList; }; CValueEditDialog* CreateMultiIntEditor(PCWSTR pszClass, PCWSTR pszAttribute, ADSTYPE adsType, BOOL bMultivalued); //////////////////////////////////////////////////////////////////// // CSingleLargeIntEditor - string editor implementation for single valued // ADSTYPE_LARGE_INTEGER // class CSingleLargeIntEditor : public CValueEditDialog { public: CSingleLargeIntEditor() : CValueEditDialog(IDD_LARGEINT_EDITOR_DIALOG) { m_bValueSet = FALSE; } virtual BOOL OnInitDialog(); virtual void OnOK(); afx_msg void OnClear(); DECLARE_MESSAGE_MAP(); public: virtual HRESULT Initialize(LPDS_ATTRIBUTE_EDITORINFO pAttributeEditorInfo); virtual HRESULT GetNewValue(PADSVALUE* ppADsValue, DWORD* pdwNumValues); private: LARGE_INTEGER m_liOldValue; LARGE_INTEGER m_liNewValue; BOOL m_bValueSet; }; CValueEditDialog* CreateSingleLargeIntEditor(PCWSTR pszClass, PCWSTR pszAttribute, ADSTYPE adsType, BOOL bMultivalued); //////////////////////////////////////////////////////////////////// // CSingleBooleanEditor - editor implementation for single valued // ADSTYPE_BOOLEAN // class CSingleBooleanEditor : public CValueEditDialog { public: CSingleBooleanEditor() : CValueEditDialog(IDD_BOOLEAN_EDITOR_DIALOG) {} virtual BOOL OnInitDialog(); virtual void OnOK(); DECLARE_MESSAGE_MAP(); public: virtual HRESULT Initialize(LPDS_ATTRIBUTE_EDITORINFO pAttributeEditorInfo); virtual HRESULT GetNewValue(PADSVALUE* ppADsValue, DWORD* pdwNumValues); private: BOOL m_bOldValue; BOOL m_bNewValue; BOOL m_bValueSet; }; CValueEditDialog* CreateSingleBooleanEditor(PCWSTR pszClass, PCWSTR pszAttribute, ADSTYPE adsType, BOOL bMultivalued); //////////////////////////////////////////////////////////////////// // CMultiBooleanEditor - boolean editor implementation for multivalued // ADSTYPE_BOOLEAN // class CMultiBooleanEditor : public CValueEditDialog { public: CMultiBooleanEditor() : CValueEditDialog(IDD_BOOLEAN_EDITOR_MULTI_DIALOG) {} virtual BOOL OnInitDialog(); virtual void OnOK(); afx_msg void OnAddButton(); afx_msg void OnRemoveButton(); afx_msg void OnListSelChange(); afx_msg void OnRadioChange(); DECLARE_MESSAGE_MAP(); public: virtual HRESULT Initialize(LPDS_ATTRIBUTE_EDITORINFO pAttributeEditorInfo); virtual HRESULT GetNewValue(PADSVALUE* ppADsValue, DWORD* pdwNumValues); protected: void UpdateListboxHorizontalExtent(); void ManageButtonStates(); private: CList m_bOldValueList; CList m_bNewValueList; }; CValueEditDialog* CreateMultiBooleanEditor(PCWSTR pszClass, PCWSTR pszAttribute, ADSTYPE adsType, BOOL bMultivalued); //////////////////////////////////////////////////////////////////// // CSingleTimeEditor - editor implementation for single valued // ADSTYPE_UTC_TIME // class CSingleTimeEditor : public CValueEditDialog { public: CSingleTimeEditor() : CValueEditDialog(IDD_TIME_EDITOR_DIALOG) { memset(&m_stOldValue, 0, sizeof(SYSTEMTIME)); memset(&m_stNewValue, 0, sizeof(SYSTEMTIME)); m_bValueSet = FALSE; } virtual BOOL OnInitDialog(); virtual void OnOK(); DECLARE_MESSAGE_MAP(); public: virtual HRESULT Initialize(LPDS_ATTRIBUTE_EDITORINFO pAttributeEditorInfo); virtual HRESULT GetNewValue(PADSVALUE* ppADsValue, DWORD* pdwNumValues); private: SYSTEMTIME m_stOldValue; SYSTEMTIME m_stNewValue; BOOL m_bValueSet; }; CValueEditDialog* CreateSingleTimeEditor(PCWSTR pszClass, PCWSTR pszAttribute, ADSTYPE adsType, BOOL bMultivalued); //////////////////////////////////////////////////////////////////// // CMultiTimeEditor - time editor implementation for multivalued // ADSTYPE_UTC_TIME // class CMultiTimeEditor : public CValueEditDialog { public: CMultiTimeEditor() : CValueEditDialog(IDD_TIME_EDITOR_MULTI_DIALOG) {} virtual BOOL OnInitDialog(); virtual void OnOK(); afx_msg void OnAddButton(); afx_msg void OnRemoveButton(); afx_msg void OnListSelChange(); DECLARE_MESSAGE_MAP(); public: virtual HRESULT Initialize(LPDS_ATTRIBUTE_EDITORINFO pAttributeEditorInfo); virtual HRESULT GetNewValue(PADSVALUE* ppADsValue, DWORD* pdwNumValues); protected: void UpdateListboxHorizontalExtent(); void ManageButtonStates(); private: CList m_stOldValueList; CList m_stNewValueList; }; CValueEditDialog* CreateMultiTimeEditor(PCWSTR pszClass, PCWSTR pszAttribute, ADSTYPE adsType, BOOL bMultivalued); //////////////////////////////////////////////////////////////////// // COctetStringEditor - editor implementation for single valued // ADSTYPE_OCTET_STRING // #define MAX_OCTET_STRING_VALUE_LENGTH 200 class COctetStringEditor : public CValueEditDialog { public: COctetStringEditor() : CValueEditDialog(IDD_OCTET_STRING_EDITOR_DIALOG) { m_dwOldLength = 0; m_pOldValue = NULL; m_dwNewLength = 0; m_pNewValue = NULL; m_bValueSet = FALSE; } ~COctetStringEditor() { if (m_pOldValue) { delete[] m_pOldValue; m_pOldValue = 0; } if (m_pNewValue) { delete[] m_pNewValue; m_pNewValue = 0; } } virtual BOOL OnInitDialog(); virtual void OnOK(); afx_msg void OnProcessEdit(); afx_msg void OnEditButton(); afx_msg void OnClearButton(); DECLARE_MESSAGE_MAP(); public: virtual HRESULT Initialize(LPDS_ATTRIBUTE_EDITORINFO pAttributeEditorInfo); virtual HRESULT GetNewValue(PADSVALUE* ppADsValue, DWORD* pdwNumValues); private: DWORD m_dwOldLength; BYTE* m_pOldValue; DWORD m_dwNewLength; BYTE* m_pNewValue; BOOL m_bValueSet; CByteArrayDisplay m_display; }; CValueEditDialog* CreateSingleOctetStringEditor(PCWSTR pszClass, PCWSTR pszAttribute, ADSTYPE adsType, BOOL bMultivalued); //////////////////////////////////////////////////////////////////// // CMultiOctetStringEditor - octet string editor for multivalued // ADSTYPE_OCTET_STRING, // class CMultiOctetStringEditor : public CValueEditDialog { public: CMultiOctetStringEditor() : CValueEditDialog(IDD_OCTET_STRING_EDITOR_MULTI_DIALOG) {} virtual BOOL OnInitDialog(); virtual void OnOK(); afx_msg void OnAddButton(); afx_msg void OnRemoveButton(); afx_msg void OnEditButton(); afx_msg void OnListSelChange(); DECLARE_MESSAGE_MAP(); public: virtual HRESULT Initialize(LPDS_ATTRIBUTE_EDITORINFO pAttributeEditorInfo); virtual HRESULT GetNewValue(PADSVALUE* ppADsValue, DWORD* pdwNumValues); protected: void UpdateListboxHorizontalExtent(); void ManageButtonStates(); private: CList m_OldValueList; CList m_NewValueList; }; CValueEditDialog* CreateMultiOctetStringEditor(PCWSTR pszClass, PCWSTR pszAttribute, ADSTYPE adsType, BOOL bMultivalued); //////////////////////////////////////////////////////////////////// // CDNWithStringEditor - DN with String editor for editing // ADSTYPE_DN_WITH_STRING // class CDNWithStringEditor : public CValueEditDialog { public: CDNWithStringEditor() : CValueEditDialog(IDD_DN_WITH_STRING_EDITOR_DIALOG) {} virtual BOOL OnInitDialog(); virtual void OnOK(); afx_msg void OnClear(); DECLARE_MESSAGE_MAP(); public: virtual HRESULT Initialize(LPDS_ATTRIBUTE_EDITORINFO pAttributeEditorInfo); virtual HRESULT GetNewValue(PADSVALUE* ppADsValue, DWORD* pdwNumValues); private: CString m_OldDNValue; CString m_OldStringValue; CString m_NewDNValue; CString m_NewStringValue; }; CValueEditDialog* CreateDNWithStringEditor(PCWSTR pszClass, PCWSTR pszAttribute, ADSTYPE adsType, BOOL bMultivalued); //////////////////////////////////////////////////////////////////// // CAttributeEditorPropertyPage - attribute editor property pages class CAttributeEditorPropertyPage : public CPropertyPage { public: CAttributeEditorPropertyPage(IADs* pIADs, IADsClass* pIADsClass, LPDS_ATTREDITOR_BINDINGINFO pBindingInfo, CADSIEditPropertyPageHolder* pHolder); ~CAttributeEditorPropertyPage(); virtual BOOL OnInitDialog(); virtual BOOL OnApply(); virtual void OnDestroy(); virtual int OnCreate(LPCREATESTRUCT lpCreateStruct); afx_msg void OnMandatoryCheck(); afx_msg void OnOptionalCheck(); afx_msg void OnValueSetCheck(); afx_msg void OnEditAttribute(); afx_msg void OnSortList(NMHDR* pNotifyStruct, LRESULT* result); afx_msg void OnNotifyEditAttribute(NMHDR* pNotifyStruct, LRESULT* result); afx_msg void OnListItemChanged(NMHDR* pNotifyStruct, LRESULT* result); CADSIAttribute* GetAttributeFromList(int iSelectedItem); HRESULT GetAttributeInfo(CADSIAttribute& pAttr, LPDS_ATTRIBUTE_EDITORINFO* ppAttributeEditorInfo, BOOL* pbOwnValueMemory); void EditAttribute(CADSIAttribute* pSelectedAttr); void ShowListCtrl(); HRESULT GetSchemaNamingContext(); HRESULT RetrieveAttributes(); bool IsRangeOfValues(PCWSTR pszAttrName, CString& szAttrBase, DWORD& rangeStart, DWORD& rangeEnd); void FillListControl(); void SetEditButton(); HRESULT CreateAttributeList(CStringList& sList, BOOL bMandatory); ADSTYPE RetrieveADsTypeFromSyntax(LPCWSTR lpszAttribute, BOOL* pbMultivalued, CString& szSyntax); CValueEditDialog* RetrieveEditor(LPDS_ATTRIBUTE_EDITORINFO pAttributeEditorInfo); UINT GetSortColumn() { return m_nSortColumn; } DECLARE_MESSAGE_MAP() private: CComPtr m_spIADs; CComPtr m_spIADsClass; BOOL m_bMandatory; BOOL m_bOptional; BOOL m_bSet; UINT m_nSortColumn; CAttrList2 m_AttrList; CStringList m_RootDSEValueList; CString m_szClass; CString m_szPrefix; CString m_szSchemaNamingContext; LPARAM m_BindLPARAM; LPBINDINGFUNC m_pfnBind; DWORD m_dwBindFlags; CADSIEditPropertyPageHolder* m_pHolder; }; #endif //__ATTRIBUTE_EDITOR_UI_H