287 lines
6.1 KiB
C++
287 lines
6.1 KiB
C++
//+-------------------------------------------------------------------------
|
|
//
|
|
// 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<CADSIAttr*,CADSIAttr*> 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
|