/*++ Copyright (c) 1994-95 Microsoft Corporation Module Name: utils.h Abstract: Utilities. Author: Don Ryan (donryan) 04-Jan-1995 Environment: User Mode - Win32 Revision History: Jeff Parham (jeffparh) 16-Jan-1996 Added new element to LV_COLUMN_ENTRY to differentiate the string used for the column header from the string used in the menus (so that the menu option can contain hot keys). --*/ #ifndef _UTILS_H_ #define _UTILS_H_ #define LPSTR_TEXTCALLBACK_MAX 260 // // List view utilities // #define LVID_SEPARATOR 0 #define LVID_UNSORTED_LIST -1 typedef struct _LV_COLUMN_ENTRY { int iSubItem; // column index int nStringId; // header string id int nMenuStringId; // menu option string id int nRelativeWidth; // header width } LV_COLUMN_ENTRY, *PLV_COLUMN_ENTRY; #pragma warning(disable:4200) typedef struct _LV_COLUMN_INFO { BOOL bSortOrder; // sort order (ascending false) int nSortedItem; // column sorted (default none) int nColumns; LV_COLUMN_ENTRY lvColumnEntry[]; } LV_COLUMN_INFO, *PLV_COLUMN_INFO; #pragma warning(default:4200) void LvInitColumns(CListCtrl* pListCtrl, PLV_COLUMN_INFO plvColumnInfo); void LvResizeColumns(CListCtrl* pListCtrl, PLV_COLUMN_INFO plvColumnInfo); void LvChangeFormat(CListCtrl* pListCtrl, UINT nFormatId); LPVOID LvGetSelObj(CListCtrl* pListCtrl); LPVOID LvGetNextObj(CListCtrl* pListCtrl, LPINT piItem, int nType = LVNI_ALL|LVNI_SELECTED); void LvSelObjIfNecessary(CListCtrl* pListCtrl, BOOL bSetFocus = FALSE); BOOL LvInsertObArray(CListCtrl* pListCtrl, PLV_COLUMN_INFO plvColumnInfo, CObArray* pObArray); BOOL LvRefreshObArray(CListCtrl* pListCtrl, PLV_COLUMN_INFO plvColumnInfo, CObArray* pObArray); void LvReleaseObArray(CListCtrl* pListCtrl); void LvReleaseSelObjs(CListCtrl* pListCtrl); #ifdef _DEBUG void LvDumpObArray(CListCtrl* pListCtrl); #endif // // Tree view utilites // typedef struct _TV_EXPANDED_ITEM { HTREEITEM hItem; CCmdTarget* pObject; } TV_EXPANDED_ITEM, *PTV_EXPANDED_ITEM; typedef struct _TV_EXPANDED_INFO { int nExpandedItems; TV_EXPANDED_ITEM* pExpandedItems; } TV_EXPANDED_INFO, *PTV_EXPANDED_INFO; LPVOID TvGetSelObj(CTreeCtrl* pTreeCtrl); BOOL TvInsertObArray(CTreeCtrl* pTreeCtrl, HTREEITEM hParent, CObArray* pObArray, BOOL bIsContainer = TRUE); BOOL TvRefreshObArray(CTreeCtrl* pTreeCtrl, HTREEITEM hParent, CObArray* pObArray, TV_EXPANDED_INFO* pExpandedInfo, BOOL bIsContainer = TRUE); void TvReleaseObArray(CTreeCtrl* pTreeCtrl, HTREEITEM hParent); long TvSizeObArray(CTreeCtrl* pTreeCtrl, HTREEITEM hParent); HTREEITEM TvGetDomain(CTreeCtrl* pTreeCtrl, HTREEITEM hParent, CCmdTarget* pObject); HTREEITEM TvGetServer(CTreeCtrl* pTreeCtrl, HTREEITEM hParent, CCmdTarget* pObject); HTREEITEM TvGetService(CTreeCtrl* pTreeCtrl, HTREEITEM hParent, CCmdTarget* pObject); void TvSwitchItem(CTreeCtrl* pTreeCtrl, HTREEITEM hItem, TV_EXPANDED_ITEM* pExpandedItem); // // Tab control utilities // #define TCE_LISTVIEW 0x10000000 #define TCE_TREEVIEW 0x20000000 #define TCE_MASK_CONTROL 0xF0000000 #define IsListView(pte) ((pte)->dwFlags & TCE_LISTVIEW) #define IsTreeView(pte) ((pte)->dwFlags & TCE_TREEVIEW) #define IsItemSelectedInList(plv) (::LvGetSelObj((CListCtrl*)(plv)) != NULL) #define IsItemSelectedInTree(ptv) (::TvGetSelObj((CTreeCtrl*)(ptv)) != NULL) #define IsItemSelected(pte) ((IsListView(pte)) ? (IsItemSelectedInList((pte)->pWnd)) : (IsItemSelectedInTree((pte)->pWnd))) #define TCE_FORMAT_LARGE_ICONS 0x01000000 #define TCE_FORMAT_SMALL_ICONS 0x02000000 #define TCE_FORMAT_LIST 0x04000000 #define TCE_FORMAT_REPORT 0x08000000 #define TCE_MASK_FORMAT 0x0F000000 #define IsFormatLargeIcons(pte) ((pte)->dwFlags & TCE_FORMAT_LARGE_ICONS) #define IsFormatSmallIcons(pte) ((pte)->dwFlags & TCE_FORMAT_SMALL_ICONS) #define IsFormatList(pte) ((pte)->dwFlags & TCE_FORMAT_LIST) #define IsFormatReport(pte) ((pte)->dwFlags & TCE_FORMAT_REPORT) #define SetFormatLargeIcons(pte) {(pte)->dwFlags = ((pte)->dwFlags & ~TCE_MASK_FORMAT) | TCE_FORMAT_LARGE_ICONS;} #define SetFormatSmallIcons(pte) {(pte)->dwFlags = ((pte)->dwFlags & ~TCE_MASK_FORMAT) | TCE_FORMAT_SMALL_ICONS;} #define SetFormatList(pte) {(pte)->dwFlags = ((pte)->dwFlags & ~TCE_MASK_FORMAT) | TCE_FORMAT_LIST;} #define SetFormatReport(pte) {(pte)->dwFlags = ((pte)->dwFlags & ~TCE_MASK_FORMAT) | TCE_FORMAT_REPORT;} #define TCE_SUPPORTS_FORMAT 0x00010000 #define TCE_SUPPORTS_DELETE 0x00020000 #define TCE_SUPPORTS_EDIT 0x00040000 #define TCE_SUPPORTS_SORT 0x00080000 #define TCE_SUPPORTS_ALL 0x00FF0000 #define TCE_MASK_OPTIONS 0x00FF0000 #define IsFormatSupported(pte) ((pte)->dwFlags & TCE_SUPPORTS_FORMAT) #define IsDeleteSupported(pte) ((pte)->dwFlags & TCE_SUPPORTS_DELETE) #define IsEditSupported(pte) ((pte)->dwFlags & TCE_SUPPORTS_EDIT) #define IsSortSupported(pte) ((pte)->dwFlags & TCE_SUPPORTS_SORT) #define TCE_STATUS_TAB_UPDATED 0x00000001 #define TCE_STATUS_TAB_IN_FOCUS 0x00000002 #define TCE_MASK_STATUS 0x0000FFFF #define IsTabUpdated(pte) ((pte)->dwFlags & TCE_STATUS_TAB_UPDATED) #define IsTabInFocus(pte) ((pte)->dwFlags & TCE_STATUS_TAB_IN_FOCUS) #define SetTabUpdated(pte) {(pte)->dwFlags = ((pte)->dwFlags & ~TCE_MASK_STATUS) | TCE_STATUS_TAB_UPDATED;} #define SetTabInFocus(pte) {(pte)->dwFlags = ((pte)->dwFlags & ~TCE_MASK_STATUS) | TCE_STATUS_TAB_IN_FOCUS;} #define ClrTabUpdated(pte) {(pte)->dwFlags &= ~TCE_STATUS_TAB_UPDATED;} #define ClrTabInFocus(pte) {(pte)->dwFlags &= ~TCE_STATUS_TAB_IN_FOCUS;} #define UPDATE_INFO_LICENSES 0x00000001 #define UPDATE_INFO_PRODUCTS 0x00000002 #define UPDATE_INFO_GROUPS 0x00000004 #define UPDATE_INFO_USERS 0x00000008 #define UPDATE_INFO_SERVERS 0x00000010 #define UPDATE_INFO_SERVICES 0x00000020 #define UPDATE_INFO_ALL 0x000000FF #define UPDATE_INFO_NONE 0x00000000 #define UPDATE_INFO_ABORT 0x80000000 #define UPDATE_INFO_CLIENTS (UPDATE_INFO_USERS | UPDATE_INFO_GROUPS) #define IsUpdateAborted(flg) ((DWORD)(flg) & UPDATE_INFO_ABORT) #define IsLicenseInfoUpdated(flg) ((DWORD)(flg) & UPDATE_INFO_LICENSES) #define IsProductInfoUpdated(flg) ((DWORD)(flg) & UPDATE_INFO_PRODUCTS) #define IsGroupInfoUpdated(flg) ((DWORD)(flg) & UPDATE_INFO_GROUPS) #define IsUserInfoUpdated(flg) ((DWORD)(flg) & UPDATE_INFO_USERS) #define IsServerInfoUpdated(flg) ((DWORD)(flg) & UPDATE_INFO_SERVERS) #define IsServiceInfoUpdated(flg) ((DWORD)(flg) & UPDATE_INFO_SERVICES) #define UPDATE_MAIN_TABS (UPDATE_INFO_CLIENTS | UPDATE_INFO_PRODUCTS | UPDATE_INFO_LICENSES) #define UPDATE_BROWSER_TAB (UPDATE_INFO_SERVERS) #define UPDATE_DOMAIN_SELECTED (UPDATE_INFO_ALL) #define UPDATE_LICENSE_ADDED (UPDATE_INFO_CLIENTS | UPDATE_INFO_PRODUCTS | UPDATE_INFO_LICENSES) #define UPDATE_LICENSE_DELETED (UPDATE_INFO_CLIENTS | UPDATE_INFO_PRODUCTS | UPDATE_INFO_LICENSES) #define UPDATE_LICENSE_REVOKED (UPDATE_INFO_CLIENTS | UPDATE_INFO_PRODUCTS) #define UPDATE_LICENSE_UPGRADED (UPDATE_INFO_CLIENTS | UPDATE_INFO_PRODUCTS) #define UPDATE_LICENSE_MODE (UPDATE_INFO_SERVICES| UPDATE_INFO_PRODUCTS) #define UPDATE_GROUP_ADDED (UPDATE_INFO_CLIENTS | UPDATE_INFO_PRODUCTS) #define UPDATE_GROUP_DELETED (UPDATE_INFO_CLIENTS | UPDATE_INFO_PRODUCTS) #define UPDATE_GROUP_ALTERED (UPDATE_INFO_CLIENTS | UPDATE_INFO_PRODUCTS) typedef struct _TC_TAB_ENTRY { int iItem; int nStringId; DWORD dwFlags; CWnd* pWnd; PLV_COLUMN_INFO plvColumnInfo; // only valid for listview... } TC_TAB_ENTRY, *PTC_TAB_ENTRY; #pragma warning(disable:4200) typedef struct _TC_TAB_INFO { int nTabs; TC_TAB_ENTRY tcTabEntry[]; } TC_TAB_INFO, *PTC_TAB_INFO; #pragma warning(default:4200) void TcInitTabs(CTabCtrl* pTabCtrl, PTC_TAB_INFO ptcTabInfo); // // Other stuff... // void SetDefaultFont(CWnd* pWnd); void SafeEnableWindow(CWnd* pEnableWnd, CWnd* pNewFocusWnd, CWnd* pOldFocusWnd, BOOL bEnableWnd); double SecondsSince1980ToDate(unsigned long dwSeconds); #ifdef _DEBUG #define VALIDATE_OBJECT(pOb, ObClass) \ { ASSERT_VALID((pOb)); ASSERT((pOb)->IsKindOf(RUNTIME_CLASS(ObClass))); } #else #define VALIDATE_OBJECT(pOb, ObClass) #endif #endif // _UTILS_H_