//+--------------------------------------------------------------------------- // // Microsoft Windows // Copyright (C) Microsoft Corporation, 1997. // // File: A D V C F G P . H // // Contents: Private header for Advanced Configuration dialog // // Notes: // // Author: danielwe 20 Nov 1997 // //---------------------------------------------------------------------------- #pragma once #include "nsbase.h" #include "ncatlps.h" #include "netcfgx.h" #include "resource.h" // // image state entries // enum SELS_MASKS { SELS_CHECKED = 0x1, SELS_UNCHECKED = 0x2, SELS_FIXEDBINDING_DISABLED = 0x3, SELS_FIXEDBINDING_ENABLED = 0x4, }; enum MAB_DIRECTION { MAB_UP = 1, MAB_DOWN = 2, }; class CSortableBindPath; typedef list SBP_LIST; enum ASSOCIATE_FLAGS { ASSCF_ON_ENABLE = 0x1, ASSCF_ON_DISABLE = 0x2, ASSCF_ANCESTORS = 0x8, }; struct BIND_PATH_INFO { INetCfgBindingPath * pncbp; DWORD dwLength; }; typedef list BPIP_LIST; typedef list NCC_LIST; typedef list NCBP_LIST; struct TREE_ITEM_DATA { INetCfgComponent * pncc; BPIP_LIST listbpipOnEnable; BPIP_LIST listbpipOnDisable; BOOL fOrdered; }; struct HTREEITEMP { HTREEITEM hti; }; typedef list HTI_LIST; // // CBindingsDlg // class CBindingsDlg: public CPropSheetPage { BEGIN_MSG_MAP(CBindingsDlg) MESSAGE_HANDLER(WM_INITDIALOG, OnInitDialog) MESSAGE_HANDLER(WM_CONTEXTMENU, OnContextMenu) MESSAGE_HANDLER(WM_HELP, OnHelp) NOTIFY_CODE_HANDLER(PSN_APPLY, OnOk) COMMAND_ID_HANDLER(PSB_Adapter_Up, OnAdapterUp) COMMAND_ID_HANDLER(PSB_Adapter_Down, OnAdapterDown) COMMAND_ID_HANDLER(PSB_Binding_Up, OnBindingUp) COMMAND_ID_HANDLER(PSB_Binding_Down, OnBindingDown) NOTIFY_CODE_HANDLER(TVN_DELETEITEM, OnTreeDeleteItem) NOTIFY_CODE_HANDLER(TVN_KEYDOWN, OnTreeKeyDown) NOTIFY_CODE_HANDLER(TVN_ITEMEXPANDING, OnTreeItemExpanding) NOTIFY_CODE_HANDLER(TVN_SELCHANGED, OnTreeItemChanged) NOTIFY_CODE_HANDLER(LVN_DELETEITEM, OnListDeleteItem) NOTIFY_CODE_HANDLER(LVN_ITEMCHANGED, OnListItemChanged) NOTIFY_CODE_HANDLER(NM_DBLCLK, OnDoubleClick) NOTIFY_CODE_HANDLER(NM_CLICK, OnClick) END_MSG_MAP() enum {IDD = IDD_Advanced_Config}; CBindingsDlg(INetCfg *pnc) { AddRefObj(m_pnc = pnc); m_hiconUpArrow = NULL; m_hiconDownArrow = NULL; m_iItemSel = -1; m_hilItemIcons = NULL; m_hilCheckIcons = NULL; m_fWanBindingsFirst = FALSE; } ~CBindingsDlg(); BOOL FShowPage() { return TRUE; } private: INetCfg * m_pnc; HWND m_hwndLV; HWND m_hwndTV; HICON m_hiconUpArrow; HICON m_hiconDownArrow; HIMAGELIST m_hilItemIcons; HIMAGELIST m_hilCheckIcons; INT m_iItemSel; BOOL m_fWanBindingsFirst; INT m_nIndexLan; // // Message handlers // LRESULT OnInitDialog(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled); LRESULT OnContextMenu(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled); LRESULT OnHelp(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled); LRESULT OnOk(int idCtrl, LPNMHDR pnmh, BOOL& bHandled); LRESULT OnAdapterUp(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled); LRESULT OnAdapterDown(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled); LRESULT OnBindingUp(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled); LRESULT OnBindingDown(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled); VOID OnAdapterUpDown(BOOL fUp); LRESULT OnListItemChanged(int idCtrl, LPNMHDR pnmh, BOOL& bHandled); LRESULT OnTreeItemChanged(int idCtrl, LPNMHDR pnmh, BOOL& bHandled); LRESULT OnTreeDeleteItem(int idCtrl, LPNMHDR pnmh, BOOL& fHandled); LRESULT OnListDeleteItem(int idCtrl, LPNMHDR pnmh, BOOL& fHandled); LRESULT OnTreeItemExpanding(int idCtrl, LPNMHDR pnmh, BOOL& fHandled); LRESULT OnTreeKeyDown(int idCtrl, LPNMHDR pnmh, BOOL& fHandled); LRESULT OnClick(int idCtrl, LPNMHDR pnmh, BOOL& fHandled); LRESULT OnDoubleClick(int idCtrl, LPNMHDR pnmh, BOOL& fHandled); // // Adapter list functions // VOID OnAdapterChange(INT iItem); HRESULT HrBuildAdapterList(VOID); HRESULT HrGetAdapters(INetCfgComponent *pncc, NCC_LIST *plistNcc); VOID SetAdapterButtons(); VOID AddListViewItem(INetCfgComponent *pncc, INT ipos, INT nIndex, PCWSTR pszConnName); BOOL FIsWanBinding(INT iItem); VOID GetWanOrdering(VOID); VOID SetWanOrdering(VOID); // // Bindings tree functions // VOID SetCheckboxStates(VOID); VOID ToggleCheckbox(HTREEITEM hti); VOID OnBindingUpDown(BOOL fUp); HRESULT HrOrderSubItems(VOID); HRESULT HrOrderDisableLists(VOID); HRESULT HrOrderDisableList(TREE_ITEM_DATA *ptid); HTREEITEM HtiMoveTreeItemAfter(HTREEITEM htiParent, HTREEITEM htiDest, HTREEITEM htiSrc); VOID BuildBindingsList(INetCfgComponent *pncc); HRESULT HrHandleSubpath(SBP_LIST &listsbp, INetCfgBindingPath *pncbpSub); HRESULT HrHandleSubItem(INetCfgBindingPath *pncbpThis, INetCfgBindingPath *pncbpMatch, TREE_ITEM_DATA *ptid, HTREEITEM htiMatchItem); HRESULT HrHandleValidSubItem(INetCfgBindingPath *pncbpThis, INetCfgBindingPath *pncbpMatch, INetCfgComponent *pnccThisOwner, HTREEITEM htiMatchItem, TREE_ITEM_DATA *ptid); HRESULT HrHandleTopLevel(INetCfgBindingPath *pncbpSub); HRESULT HrComponentIsHidden(INetCfgBindingPath *pncbp, DWORD iComp); HTREEITEM HtiAddTreeViewItem(INetCfgComponent * pnccOwner, HTREEITEM htiParent); VOID AssociateBinding(INetCfgBindingPath *pncbpThis, HTREEITEM hti, DWORD dwFlags); HTREEITEM HtiIsSubItem(INetCfgComponent *pncc, HTREEITEM hti); VOID MoveAdapterBindings(INetCfgComponent *pnccSrc, INetCfgComponent *pnccDst, MAB_DIRECTION mabDir); LRESULT OnClickOrDoubleClick(int idCtrl, LPNMHDR pnmh, BOOL fDoubleClick); }; DWORD GetDepthSpecialCase ( INetCfgBindingPath* pPath); class CSortableBindPath { public: CSortableBindPath() { AssertSzH(FALSE,"Don't use this constructor!"); } CSortableBindPath(INetCfgBindingPath *pncbp) { m_pncbp = pncbp; } bool operator<(const CSortableBindPath &refsbp) const; VOID GetDepth(DWORD *pdwDepth) const { *pdwDepth = GetDepthSpecialCase (m_pncbp); } INetCfgBindingPath *GetPath() const { return m_pncbp; } private: INetCfgBindingPath * m_pncbp; }; class CIterTreeView { public: CIterTreeView(HWND hwndTV) { m_hwndTV = hwndTV; Reset(); } HTREEITEM HtiNext(); VOID Reset() { HTREEITEM hti; EraseAndDeleteAll(); hti = TreeView_GetRoot(m_hwndTV); if (hti) { HTREEITEMP htip = {hti}; m_stackHti.push_front(htip); } } HTREEITEM Front() { HTREEITEMP htip; if (m_stackHti.empty()) { return NULL; } htip = m_stackHti.front(); return htip.hti; } VOID PopAndDelete() { m_stackHti.pop_front(); } VOID PushAndAlloc(HTREEITEM hti) { AssertSzH(hti, "Pushing NULL? Shame on you!"); HTREEITEMP htip = {hti}; m_stackHti.push_front(htip); } VOID EraseAndDeleteAll() { while (!m_stackHti.empty()) { PopAndDelete(); } } private: HWND m_hwndTV; HTI_LIST m_stackHti; }; BOOL FIsHidden(INetCfgComponent *pncc); BOOL FDontExposeLower(INetCfgComponent *pncc); VOID AddToListIfNotAlreadyAdded(BPIP_LIST &bpipList, BIND_PATH_INFO *pbpi); VOID FreeBindPathInfoList(BPIP_LIST &listbpip); HRESULT HrCountDontExposeLower(INetCfgBindingPath *pncbp, DWORD *pcItems); BOOL FEqualComponents(INetCfgComponent *pnccA, INetCfgComponent *pnccB); VOID ChangeTreeItemParam(HWND hwndTV, HTREEITEM hitem, LPARAM lparam); BIND_PATH_INFO *BpiFindBindPathInList(INetCfgBindingPath *pncbp, BPIP_LIST &listBpip); VOID ChangeListItemParam(HWND hwndLV, INT iItem, LPARAM lParam); #ifdef ENABLETRACE VOID DbgDumpBindPath(INetCfgBindingPath *pncbp); VOID DbgDumpTreeViewItem(HWND hwndTV, HTREEITEM hti); #else #define DbgDumpBindPath(x) #define DbgDumpTreeViewItem(x,y) #endif