|
|
//+-------------------------------------------------------------------------
//
// Microsoft Windows
//
// Copyright (C) Microsoft Corporation, 1998 - 1999
//
// File: uiutil.h
//
//--------------------------------------------------------------------------
#ifndef __UIUTIL_H
#define __UIUTIL_H
#include "resource.h"
extern "C" { #include "maskctrl.h"
}
#include <shfusion.h>
///////////////////////////////////////////////////////////////////////////////
// FORWARD DECLARATIONS
class CComponentDataObject; class CMTContainerNode; class CNotificationSinkEvent;
/////////////////////////////////////////////////////////////////////////////
typedef enum { RECORD_FOUND, RECORD_NOT_FOUND, RECORD_NOT_FOUND_AT_THE_NODE, DOMAIN_NOT_ENUMERATED, NON_EXISTENT_SUBDOMAIN } RECORD_SEARCH;
#define ARRAYLENGTH(x) (sizeof(x)/sizeof((x)[0]))
////////////////////////////////////////////////////////////////////////////
// CDNSNameTokenizer
class CDNSNameTokenizer : public CStringList { public: CDNSNameTokenizer(PCWSTR pszDNSName); ~CDNSNameTokenizer();
BOOL Tokenize(const wchar_t* wcToken); void RemoveMatchingFromTail(CDNSNameTokenizer& refTokenizer); void GetRemaining(CString& strrefRemaining, const wchar_t* wcToken);
private: CDNSNameTokenizer(const CDNSNameTokenizer&) {} CDNSNameTokenizer& operator=(const CDNSNameTokenizer&) {}
CString m_szDNSName; };
////////////////////////////////////////////////////////////////////////////
// Global functions
BOOL LoadStringsToComboBox(HINSTANCE hInstance, CComboBox* pCombo, UINT nStringID, UINT nMaxLen, UINT nMaxAddCount);
void ParseNewLineSeparatedString(LPWSTR lpsz, LPWSTR* lpszArr, UINT* pnArrEntries);
void LoadStringArrayFromResource(LPWSTR* lpszArr, UINT* nStringIDs, int nArrEntries, int* pnSuccessEntries);
void EnumerateMTNodeHelper(CMTContainerNode* pNode, CComponentDataObject* pComponentData);
void EnableDialogControls(HWND hWnd, BOOL bEnable);
BOOL LoadFontInfoFromResource(IN UINT nFontNameID, IN UINT nFontSizeID, OUT LPWSTR lpFontName, IN int nFontNameMaxchar, OUT int& nFontSize, IN LPCWSTR lpszDefaultFont, IN int nDefaultFontSize);
void SetBigBoldFont(HWND hWndDialog, int nControlID);
int GetCheckedRadioButtonHelper(HWND hDlg, int nCount, int* nRadioArr, int nRadioDefault);
UINT _ForceToRange(UINT nVal, UINT nMin, UINT nMax);
BOOL WINAPI DNSTzSpecificLocalTimeToSystemTime( LPTIME_ZONE_INFORMATION lpTimeZoneInformation, LPSYSTEMTIME lpLocalTime, LPSYSTEMTIME lpUniversalTime );
LONGLONG GetSystemTime64( SYSTEMTIME* pSysTime );
////////////////////////////////////////////////////////////////////////////
// CMultiselectErrorDialog
class CMultiselectErrorDialog : public CDialog { public: CMultiselectErrorDialog() : m_pErrorArray(NULL), CDialog(IDD_MULTISELECT_ERROR_DIALOG) {} ~CMultiselectErrorDialog() {}
HRESULT Initialize(CNodeList* pNodeList, DNS_STATUS* pErrorArray, UINT nErrorCount, PCWSTR pszTitle, PCWSTR pszCaption, PCWSTR pszHeader); private: CMultiselectErrorDialog(const CMultiselectErrorDialog&) {} CMultiselectErrorDialog& operator=(const CMultiselectErrorDialog&) {}
public: virtual BOOL OnInitDialog();
DECLARE_MESSAGE_MAP()
private: CNodeList* m_pNodeList; DNS_STATUS* m_pErrorArray; UINT m_nErrorCount; CString m_szTitle; CString m_szCaption; CString m_szColumnHeader; };
////////////////////////////////////////////////////////////////////////////
// CDNSMaskCtrl
class CDNSMaskCtrl : public CWnd { public: CDNSMaskCtrl() { } virtual ~CDNSMaskCtrl() {} public:
BOOL IsBlank(); void SetFocusField(DWORD dwField); void SetFieldRange(DWORD dwField, DWORD dwMin, DWORD dwMax); void SetArray(DWORD* pArray, UINT nFields); void GetArray(DWORD* pArray, UINT nFields); void Clear(int nField = -1); void SetAlertFunction( int (*lpfnAlert)(HWND, DWORD, DWORD, DWORD) ); void EnableField(int nField, BOOL bEnable);
static int AlertFunc(HWND hwndParent, DWORD dwCurrent, DWORD dwLow, DWORD dwHigh);
};
////////////////////////////////////////////////////////////////////////////
// CDNSIPv4Control
class CDNSIPv4Control : public CDNSMaskCtrl { public: CDNSIPv4Control() { } ~CDNSIPv4Control() { } void SetIPv4Val(DWORD x); void GetIPv4Val(DWORD* pX); BOOL IsEmpty(); };
////////////////////////////////////////////////////////////////////////////
// CDNSIPv6Control
class CDNSIPv6Control : public CDNSMaskCtrl { public: // assume the format is a WORD[8] array
void SetIPv6Val(IPV6_ADDRESS* pIpv6Address); void GetIPv6Val(IPV6_ADDRESS* pIpv6Address); };
////////////////////////////////////////////////////////////////////////////
// CDNSTTLControl
class CDNSTTLControl : public CDNSMaskCtrl { public: void SetTTL(DWORD x); void GetTTL(DWORD* pX); };
///////////////////////////////////////////////////////////////////////
// CDNSUnsignedIntEdit
// NOTE: the resource must be an editbox with Numeric Style
class CDNSUnsignedIntEdit : public CEdit { public: CDNSUnsignedIntEdit() {}
BOOL SetVal(UINT nVal); UINT GetVal(); void SetRange(UINT nMin, UINT nMax) { m_nMin = nMin; m_nMax = nMax;} UINT GetMax() { return m_nMax;} UINT GetMin() { return m_nMin;}
protected: afx_msg void OnKillFocus();
private: UINT m_nMin; UINT m_nMax;
DECLARE_MESSAGE_MAP() };
///////////////////////////////////////////////////////////////////////
// CDNSUpDownUnsignedIntEdit
class CDNSUpDownUnsignedIntEditGroup; // fwd decl
class CDNSUpDownUnsignedIntEdit : public CDNSUnsignedIntEdit { public: CDNSUpDownUnsignedIntEdit() { m_pEditGroup = NULL; } void Set(CDNSUpDownUnsignedIntEditGroup* pEditGroup) { m_pEditGroup = pEditGroup;}
protected: afx_msg void OnKillFocus(); afx_msg void OnChange();
private: CDNSUpDownUnsignedIntEditGroup* m_pEditGroup;
DECLARE_MESSAGE_MAP() };
//////////////////////////////////////////////////////////////////////////
// CDNSUpDownButton
class CDNSUpDownButton : public CButton { public: CDNSUpDownButton() { m_pEditGroup = NULL; m_bUp = TRUE; } void Set(CDNSUpDownUnsignedIntEditGroup* pEditGroup, BOOL bUp) { m_pEditGroup = pEditGroup; m_bUp = bUp; } protected: afx_msg void OnClicked();
private: CDNSUpDownUnsignedIntEditGroup* m_pEditGroup; BOOL m_bUp;
DECLARE_MESSAGE_MAP() };
//////////////////////////////////////////////////////////////////////////
// CDNSUpDownUnsignedIntEditGroup
class CDNSUpDownUnsignedIntEditGroup { public: CDNSUpDownUnsignedIntEditGroup() {} BOOL Initialize(CWnd* pParentWnd, UINT nIDEdit, UINT nIDBtnUp, UINT nIDBtnDown); void SetRange(UINT nMin, UINT nMax) { m_edit.SetRange(nMin, nMax); }
void SetVal(UINT nVal); UINT GetVal();
protected: virtual void OnEditChange() {}
private: CDNSUpDownUnsignedIntEdit m_edit; CDNSUpDownButton m_downBtn; CDNSUpDownButton m_upBtn;
void SetButtonsState();
void OnClicked(BOOL bUp);
friend class CDNSUpDownButton; friend class CDNSUpDownUnsignedIntEdit;
};
/////////////////////////////////////////////////////////////////////////
// CDNSTimeIntervalEdit
class CDNSTimeIntervalEditGroup; // fwd decl
class CDNSTimeIntervalEdit : public CDNSUnsignedIntEdit { public: CDNSTimeIntervalEdit() { m_pEditGroup = NULL; } void Set(CDNSTimeIntervalEditGroup* pEditGroup) { m_pEditGroup = pEditGroup; }
protected: afx_msg void OnChange(); afx_msg void OnKillFocus(); private: CDNSTimeIntervalEditGroup* m_pEditGroup;
DECLARE_MESSAGE_MAP() };
/////////////////////////////////////////////////////////////////////////
// CDNSTimeUnitComboBox
class CDNSTimeUnitComboBox : public CComboBox { public: typedef enum { sec=0, min, hrs, days} unitType; CDNSTimeUnitComboBox() { m_pEditGroup = NULL;} void Set(CDNSTimeIntervalEditGroup* pEditGroup) { m_pEditGroup = pEditGroup; }
BOOL LoadStrings(UINT nIDUnitsString, UINT nMaxAddCount); void SetUnit(unitType u); unitType GetUnit();
protected: afx_msg void OnSelChange();
private: CDNSTimeIntervalEditGroup* m_pEditGroup;
DECLARE_MESSAGE_MAP() };
//////////////////////////////////////////////////////////////////////////
// CDNSTimeIntervalEditGroup
class CDNSTimeIntervalEditGroup { public: CDNSTimeIntervalEditGroup(UINT nMinVal = 0 , UINT nMaxVal = (UINT)-1);
BOOL Initialize(CWnd* pParentWnd, UINT nIDEdit, UINT nIDCombo, UINT nIDComboUnitsString);
void SetVal(UINT nVal); UINT GetVal();
void EnableUI(BOOL bEnable);
protected: virtual void OnEditChange() {}
struct RANGE_INFO { RANGE_INFO() { memset(this, 0x0, sizeof(RANGE_INFO));} UINT m_nMinVal; UINT m_nMaxVal; };
CDNSTimeIntervalEdit m_edit; CDNSTimeUnitComboBox m_timeUnitCombo; RANGE_INFO m_rangeInfoArr[4]; // for sec, min, hrs, days
UINT m_nRangeCount;
UINT m_nMaxVal; UINT m_nMinVal;
private:
virtual void InitRangeInfo();
void OnComboSelChange(); void OnEditKillFocus();
friend class CDNSTimeIntervalEdit; friend class CDNSTimeUnitComboBox; };
//////////////////////////////////////////////////////////////////////////
// CDNSManageControlTextHelper
class CDNSManageControlTextHelper { public: CDNSManageControlTextHelper(int nStates); ~CDNSManageControlTextHelper();
BOOL Init(CWnd* pParentWnd, UINT nID, UINT* pnStrArray); BOOL Init(CWnd* pParentWnd, UINT nID); void SetStateX(int nIndex);
private: CWnd* m_pParentWnd; UINT m_nID; WCHAR* m_lpszText;
int m_nStates; LPWSTR* m_lpszArr; };
//////////////////////////////////////////////////////////////////////////
// CDNSToggleTextControlHelper
class CDNSToggleTextControlHelper : public CDNSManageControlTextHelper { public: CDNSToggleTextControlHelper(); void SetToggleState(BOOL bFirst) { SetStateX(bFirst ? 0 : 1);} };
///////////////////////////////////////////////////////////////////////////
// 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); } };
/////////////////////////////////////////////////////////////////////////////
// CDlgWorkerThread
class CLongOperationDialog; // fwd decl
class CDlgWorkerThread : public CWorkerThread { public: CDlgWorkerThread();
BOOL Start(CLongOperationDialog* pDlg); virtual int Run(); // MFC override
DWORD GetError() { return m_dwErr;}
protected: virtual void OnDoAction() = 0;
DWORD m_dwErr;
private: BOOL PostMessageToDlg();
friend CLongOperationDialog; };
/////////////////////////////////////////////////////////////////////////////
// CLongOperationDialog dialog
class CLongOperationDialog : public CDialog { // Construction
public: static UINT s_nNotificationMessage; CLongOperationDialog(CDlgWorkerThread* pThreadObj, CWnd* pParentWnd, UINT nAviID = -1); virtual ~CLongOperationDialog();
virtual INT_PTR DoModal() { if (m_bExecuteNoUI) { GetThreadObj()->OnDoAction(); m_bAbandoned = FALSE; return IDOK; } return CDialog::DoModal(); }
BOOL LoadTitleString(UINT nID);
CDlgWorkerThread* GetThreadObj() { ASSERT(m_pThreadObj != NULL); return m_pThreadObj; }
UINT m_nAviID; CString m_szTitle; BOOL m_bAbandoned; BOOL m_bExecuteNoUI;
afx_msg LONG OnNotificationMessage( WPARAM wParam, LPARAM lParam); // Implementation
protected: // Generated message map functions
virtual BOOL OnInitDialog(); virtual void OnCancel(); DECLARE_MESSAGE_MAP()
private: CDlgWorkerThread* m_pThreadObj; };
//////////////////////////////////////////////////////////
// CNodeEnumerationThread
class CNodeEnumerationThread : public CDlgWorkerThread { public: CNodeEnumerationThread(CComponentDataObject* pComponentDataObject, CMTContainerNode* pNode); ~CNodeEnumerationThread();
protected: virtual void OnDoAction(); void OnAbandon(); private: CComponentDataObject* m_pComponentDataObject; CNotificationSinkEvent* m_pSink; CMTContainerNode* m_pNode; };
//////////////////////////////////////////////////////////
// CArrayCheckListBox
class CArrayCheckListBox : public CCheckListBox { public: CArrayCheckListBox(UINT nArrSize, DWORD* dwMaskArr = NULL) { m_nArrSize = nArrSize; m_dwMaskArr = dwMaskArr; } BOOL Initialize(UINT nCtrlID, UINT nStringID, CWnd* pParentWnd);
void SetValue(DWORD dw); DWORD GetValue(); void SetArrValue(DWORD* dwArr, UINT nArrSize); void GetArrValue(DWORD* dwArr, UINT nArrSize); private: DWORD* m_dwMaskArr; UINT m_nArrSize; };
////////////////////////////////////////////////////////////////////////////
// CDNS_AGING_TimeIntervalEditGroup
class CDNSZone_AgingDialog; // Foward declaration
class CDNSServer_AdvancedPropertyPage; // Fwd declaration
class CDNS_AGING_TimeIntervalEditGroup : public CDNSTimeIntervalEditGroup { public: CDNS_AGING_TimeIntervalEditGroup(UINT nMinVal = 0 , UINT nMaxVal = (UINT)0x7fffffff) : CDNSTimeIntervalEditGroup(nMinVal, nMaxVal) { m_pPage = NULL; } virtual void OnEditChange(); virtual void SetVal(UINT nVal); virtual UINT GetVal(); virtual void InitRangeInfo();
protected: CDNSZone_AgingDialog* m_pPage; friend class CDNSZone_AgingDialog; };
class CDNS_SERVER_AGING_TimeIntervalEditGroup : public CDNS_AGING_TimeIntervalEditGroup { public: CDNS_SERVER_AGING_TimeIntervalEditGroup(UINT nMinVal = 0 , UINT nMaxVal = (UINT)0x7fffffff) : CDNS_AGING_TimeIntervalEditGroup(nMinVal, nMaxVal) { m_pPage2 = NULL; }
virtual void OnEditChange();
protected: CDNSServer_AdvancedPropertyPage* m_pPage2; friend class CDNSServer_AdvancedPropertyPage; };
////////////////////////////////////////////////////////////////////////////
// CDNSZone_AgingDialog
class CDNSZone_AgingDialog : public CHelpDialog { public: CDNSZone_AgingDialog(CPropertyPageHolderBase* pHolder, UINT nID, CComponentDataObject* pComponentData);
// IN/OUT
DWORD m_dwRefreshInterval; DWORD m_dwNoRefreshInterval; DWORD m_dwScavengingStart; DWORD m_fScavengingEnabled; BOOL m_bAdvancedView; BOOL m_bScavengeDirty; BOOL m_bNoRefreshDirty; BOOL m_bRefreshDirty; BOOL m_bApplyAll; BOOL m_bADApplyAll; BOOL m_bStandardApplyAll;
DWORD m_dwDefaultRefreshInterval; DWORD m_dwDefaultNoRefreshInterval; BOOL m_bDefaultScavengingState;
virtual void SetDirty(); BOOL IsDirty() { return m_bDirty; }
CComponentDataObject* GetComponentData() { return m_pComponentData; }
protected: virtual BOOL OnInitDialog(); virtual void OnOK(); virtual void OnCancel();
afx_msg void OnCheckScavenge(); afx_msg void OnEditNoRefresh(); afx_msg void OnEditRefresh();
void GetTimeStampString(CString& cstrDate); void SetUIData();
DECLARE_MESSAGE_MAP()
CPropertyPageHolderBase* m_pHolder; CDNS_AGING_TimeIntervalEditGroup m_refreshIntervalEditGroup; CDNS_AGING_TimeIntervalEditGroup m_norefreshIntervalEditGroup;
CComponentDataObject* m_pComponentData;
BOOL m_bDirty; };
////////////////////////////////////////////////////////////////////////////////////
// CDNSServer_AgingConfirm
class CDNSServer_AgingConfirm : public CHelpDialog { public: CDNSServer_AgingConfirm(CDNSZone_AgingDialog* pAgingDialog) : CHelpDialog(IDD_SERVER_AGING_CONFIRMATION, pAgingDialog->GetComponentData()) { ASSERT(pAgingDialog != NULL); m_pAgingDialog = pAgingDialog; }
protected: virtual BOOL OnInitDialog(); virtual void OnOK();
void SetAgingUpdateValues();
private: CDNSZone_AgingDialog* m_pAgingDialog; };
/////////////////////////////////////////////////////////////////////////////////////
typedef struct _COMBOBOX_TABLE_ENTRY { UINT nComboStringID; DWORD dwComboData; } COMBOBOX_TABLE_ENTRY, *PCOMBOBOX_TABLE_ENTRY;
BOOL LoadComboBoxFromTable(CComboBox* pComboBox, PCOMBOBOX_TABLE_ENTRY pTable); BOOL SetComboSelByData(CComboBox* pComboBox, DWORD dwData);
////////////////////////////////////////////////////////////////////////////////////
// Theme support
class CThemeContextActivator { public: CThemeContextActivator() : m_ulActivationCookie(0) { SHActivateContext (&m_ulActivationCookie); }
~CThemeContextActivator() { SHDeactivateContext (m_ulActivationCookie); }
private: ULONG_PTR m_ulActivationCookie; };
#endif // __UIUTIL_H
|