292 lines
7.5 KiB
C++
292 lines
7.5 KiB
C++
//+-------------------------------------------------------------------------
|
|
//
|
|
// Microsoft Windows
|
|
//
|
|
// Copyright (C) Microsoft Corporation, 1998 - 1998
|
|
//
|
|
// File: browser.h
|
|
//
|
|
//--------------------------------------------------------------------------
|
|
|
|
#ifndef _BROWSER_H
|
|
#define _BROWSER_H
|
|
|
|
|
|
///////////////////////////////////////////////////////////////////////////////
|
|
// FORWARD DECLARATIONS
|
|
|
|
class CTreeNode;
|
|
class CDNSBrowseItem;
|
|
class CDNSFilterCombo;
|
|
class CDNSBrowserDlg;
|
|
class CDNSCurrContainerCombo;
|
|
class CDNSChildrenListView;
|
|
class CPropertyPageHolderBase;
|
|
|
|
|
|
////////////////////////////////////////////////////////////////////////
|
|
// CDNSComboBoxEx : simple C++/MFC wrapper for ComboBoxEx32 control
|
|
|
|
class CDNSComboBoxEx : public CWnd
|
|
{
|
|
public:
|
|
BOOL Create(DWORD dwStyle, const RECT& rect, CWnd* pParentWnd, UINT nID);
|
|
|
|
// simple inlines
|
|
CImageList* SetImageList(CImageList* pImageList);
|
|
int GetCount() const;
|
|
int GetCurSel() const;
|
|
int SetCurSel(int nSelect);
|
|
|
|
int InsertItem(const COMBOBOXEXITEM* pItem);
|
|
|
|
LPARAM GetItemData(int nIndex) const;
|
|
BOOL SetItemData(int nIndex, LPARAM lParam);
|
|
|
|
void ResetContent();
|
|
|
|
DWORD GetExtendedStyle() const;
|
|
DWORD SetExtendedStyle(DWORD dwExMask, DWORD dwExStyle);
|
|
|
|
};
|
|
|
|
|
|
//////////////////////////////////////////////////////////////////////////
|
|
// CDNSBrowseItem : proxy items for the nodes in the snapin
|
|
|
|
typedef CList< CDNSBrowseItem*, CDNSBrowseItem* > CDNSBrowseItemList;
|
|
|
|
class CDNSBrowseItem
|
|
{
|
|
public:
|
|
CDNSBrowseItem()
|
|
{
|
|
m_nIndex = -1;
|
|
m_pParent = NULL;
|
|
m_pTreeNode = NULL;
|
|
}
|
|
~CDNSBrowseItem()
|
|
{
|
|
RemoveChildren();
|
|
if (m_pTreeNode != NULL)
|
|
m_pTreeNode->DecrementSheetLockCount();
|
|
}
|
|
|
|
BOOL AddChild(CDNSBrowseItem* pChildBrowseItem);
|
|
BOOL RemoveChildren(CDNSBrowseItem* pNotThisItem = NULL);
|
|
|
|
// manipulation of CTreeNode pointer
|
|
void SetTreeNode(CTreeNode* pTreeNode)
|
|
{
|
|
ASSERT(pTreeNode != NULL);
|
|
pTreeNode->IncrementSheetLockCount();
|
|
m_pTreeNode = pTreeNode;
|
|
}
|
|
CTreeNode* GetTreeNode() { return m_pTreeNode;}
|
|
LPCTSTR GetSelectionString();
|
|
|
|
// proxies for the CTreeNode functions
|
|
int GetImageIndex(BOOL bOpenImage);
|
|
LPCWSTR GetString(int nCol);
|
|
BOOL IsContainer();
|
|
|
|
// Master tree manipulation routines
|
|
void AddTreeNodeChildren(CDNSFilterCombo* pFilter,
|
|
CComponentDataObject* pComponentDataObject);
|
|
|
|
private:
|
|
void AddToContainerCombo(CDNSCurrContainerCombo* pCtrl,
|
|
CDNSBrowseItem* pSelectedBrowseItem,
|
|
int nIndent,int* pNCurrIndex);
|
|
|
|
// DATA
|
|
public:
|
|
int m_nIndex; // index in the container combobox, for direct lookup
|
|
CDNSBrowseItem* m_pParent; // parent in the browse tree
|
|
|
|
private:
|
|
CTreeNode* m_pTreeNode; // pointer to the node in the snapin master tree
|
|
CDNSBrowseItemList m_childList; // list if children of the current node
|
|
|
|
friend class CDNSChildrenListView;
|
|
friend class CDNSCurrContainerCombo;
|
|
};
|
|
|
|
|
|
//////////////////////////////////////////////////////////////////////////
|
|
// CDNSFilterCombo : dropdown list with filtering options and logic
|
|
|
|
// NOTICE: the ordering will be the same as the strings in the filter combobox
|
|
typedef enum
|
|
{
|
|
// these options are for containers
|
|
SERVER = 0 ,
|
|
ZONE_FWD,
|
|
ZONE_REV,
|
|
|
|
// these options are for records (leaves)
|
|
RECORD_A,
|
|
RECORD_CNAME,
|
|
RECORD_A_AND_CNAME,
|
|
RECORD_RP,
|
|
RECORD_TEXT,
|
|
RECORD_MB,
|
|
RECORD_ALL,
|
|
|
|
LAST // dummy item, just to know how many there are
|
|
|
|
} DNSBrowseFilterOptionType;
|
|
|
|
|
|
|
|
class CDNSFilterCombo : public CComboBox
|
|
{
|
|
public:
|
|
CDNSFilterCombo() { m_option = LAST; }
|
|
BOOL Initialize(UINT nCtrlID, UINT nIDFilterString, CDNSBrowserDlg* pDlg);
|
|
|
|
void Set(DNSBrowseFilterOptionType option, LPCTSTR lpszExcludeServerName)
|
|
{
|
|
m_option = option;
|
|
m_szExcludeServerName = lpszExcludeServerName;
|
|
}
|
|
DNSBrowseFilterOptionType Get() { return m_option;}
|
|
void OnSelectionChange();
|
|
|
|
BOOL CanAddToUIString(UINT n);
|
|
BOOL IsValidTreeNode(CTreeNode* pTreeNode);
|
|
BOOL IsValidResult(CDNSBrowseItem* pBrowseItem);
|
|
void GetStringOf(CDNSBrowseItem* pBrowseItem, CString& szResult);
|
|
|
|
private:
|
|
DNSBrowseFilterOptionType m_option;
|
|
CString m_szExcludeServerName;
|
|
};
|
|
|
|
//////////////////////////////////////////////////////////////////////////
|
|
// CDNSCurrContainerCombo : deals with the selection of the current container
|
|
|
|
class CDNSCurrContainerCombo : public CDNSComboBoxEx
|
|
{
|
|
public:
|
|
BOOL Initialize(UINT nCtrlID, UINT nBitmapID, CDNSBrowserDlg* pDlg);
|
|
|
|
CDNSBrowseItem* GetSelection();
|
|
void InsertBrowseItem(CDNSBrowseItem* pBrowseItem, int nIndex, int nIndent);
|
|
|
|
void SetTree(CDNSBrowseItem* pRootBrowseItem,
|
|
CDNSBrowseItem* pSelectedBrowseItem);
|
|
|
|
private:
|
|
CImageList m_imageList;
|
|
};
|
|
|
|
|
|
//////////////////////////////////////////////////////////////////////////
|
|
// CDNSChildrenListView : displays the list of childern for the current container
|
|
|
|
class CDNSChildrenListView : public CListCtrl
|
|
{
|
|
public:
|
|
CDNSChildrenListView() { m_pDlg = NULL;}
|
|
BOOL Initialize(UINT nCtrlID, UINT nBitmapID, CDNSBrowserDlg* pDlg);
|
|
|
|
void SetChildren(CDNSBrowseItem* pBrowseItem);
|
|
CDNSBrowseItem* GetSelection();
|
|
|
|
private:
|
|
CImageList m_imageList;
|
|
CDNSBrowserDlg* m_pDlg;
|
|
};
|
|
|
|
///////////////////////////////////////////////////////////////////////////////
|
|
// CDNSBrowserDlg : the browser itself
|
|
class CBrowseExecContext; // fwd decl
|
|
|
|
class CDNSBrowserDlg : public CHelpDialog
|
|
{
|
|
// Construction
|
|
public:
|
|
CDNSBrowserDlg(CComponentDataObject* pComponentDataObject, CPropertyPageHolderBase* pHolder,
|
|
DNSBrowseFilterOptionType option, BOOL bEnableEdit = FALSE,
|
|
LPCTSTR lpszExcludeServerName = NULL);
|
|
~CDNSBrowserDlg();
|
|
|
|
virtual INT_PTR DoModal();
|
|
|
|
// API's
|
|
|
|
CTreeNode* GetSelection();
|
|
LPCTSTR GetSelectionString();
|
|
|
|
// Implementation
|
|
protected:
|
|
|
|
// message handlers and MFC overrides
|
|
virtual BOOL OnInitDialog();
|
|
afx_msg void OnButtonUp();
|
|
afx_msg BOOL OnTooltip(UINT, NMHDR* pHdr, LRESULT* plRes);
|
|
afx_msg void OnSelchangeComboSelNode();
|
|
afx_msg void OnDblclkListNodeItems(NMHDR* pNMHDR, LRESULT* pResult);
|
|
virtual void OnOK();
|
|
virtual void OnCancel();
|
|
afx_msg void OnItemchangedListNodeItems(NMHDR* pNMHDR, LRESULT* pResult);
|
|
afx_msg void OnSelchangeComboFilter();
|
|
afx_msg BOOL OnHelpInfo(HELPINFO* pHelpInfo);
|
|
|
|
DECLARE_MESSAGE_MAP()
|
|
|
|
private:
|
|
// internal helper functions
|
|
CEdit* GetSelectionEdit();
|
|
|
|
void InitializeControls();
|
|
void InitializeToolbar();
|
|
void EnableOkButton(BOOL bEnable);
|
|
void HandleOkOrDblClick();
|
|
void UpdateSelectionEdit(CDNSBrowseItem* pBrowseItem);
|
|
|
|
// browse tree manipulation
|
|
void InitBrowseTree();
|
|
void ReEnumerateChildren();
|
|
void ExpandBrowseTree(CDNSBrowseItem* pCurrBrowseItem,
|
|
CDNSBrowseItem* pChildBrowseItem);
|
|
void ContractBrowseTree(CDNSBrowseItem* pParentBrowseItem);
|
|
void MoveUpHelper(CDNSBrowseItem* pNewBrowseItem);
|
|
void MoveDownHelper();
|
|
void AddTreeNodeChildrenHelper(CDNSBrowseItem* pBrowseItem,
|
|
CDNSFilterCombo* pFilter, BOOL bExpand = TRUE);
|
|
|
|
// dialog controls
|
|
CDNSCurrContainerCombo m_currContainer;
|
|
CToolBarCtrl m_toolbar;
|
|
CDNSChildrenListView m_childrenList;
|
|
CDNSFilterCombo m_filter;
|
|
|
|
// dialog data
|
|
BOOL m_bEnableEdit; // enable editbox
|
|
CContainerNode* m_pMasterRootNode; // root of master browsable tree
|
|
CDNSBrowseItem* m_pBrowseRootItem; // root of proxy tree
|
|
CDNSBrowseItem* m_pCurrSelContainer; // current container selection
|
|
|
|
// final item selection
|
|
CDNSBrowseItem* m_pFinalSelection;
|
|
CString m_szSelectionString;
|
|
|
|
// component data object pointer
|
|
CComponentDataObject* m_pComponentDataObject;
|
|
|
|
// porperty page holder pointer, if needed
|
|
CPropertyPageHolderBase* m_pHolder;
|
|
|
|
friend class CDNSChildrenListView;
|
|
friend class CBrowseExecContext;
|
|
friend class CDNSFilterCombo;
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
#endif // _BROWSER_H
|