windows-nt/Source/XPSP1/NT/admin/netui/llsmgr/utils.h
2020-09-26 16:20:57 +08:00

235 lines
8.7 KiB
C

/*++
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_