⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 gmtree.c

📁 PGP8.0源码 请认真阅读您的文件包然后写出其具体功能
💻 C
📖 第 1 页 / 共 2 页
字号:
/*____________________________________________________________________________
	Copyright (C) 2002 PGP Corporation
	All rights reserved.
	
	GMTree.h - create and fill group manager control	

	$Id: GMTree.c,v 1.17 2002/11/03 16:37:36 pbj Exp $
____________________________________________________________________________*/
#include "pgpPFLConfig.h"

// project header files
#include "PGPgmx.h"
#include "PGPkeysx.h"

// constant definitions
#define BITMAP_WIDTH 16
#define BITMAP_HEIGHT 16

// external globals
extern HINSTANCE	g_hinst;
extern HIMAGELIST	g_hilKeys;

//	___________________________________________________
//
//  Return handle of group manager window

HWND  
PGPgmGetManagerWindow (HGROUPMAN hGM) 
{
	if (!hGM) 
		return NULL;
	return (((PGROUPMAN)hGM)->hwndTree);
}


//	___________________________________________________
//
//  Insert column information into control

BOOL 
GMAddColumns (PGROUPMAN pGM) 
{
	TL_COLUMN tlc;
	CHAR sz[64];
	INT iField; 
	INT iCol, ids;

	TreeList_DeleteAllColumns (pGM->hwndTree);

	tlc.mask = TLCF_FMT | TLCF_WIDTH | TLCF_TEXT | 
			TLCF_SUBITEM | TLCF_DATATYPE | TLCF_DATAMAX |
			TLCF_MOUSENOTIFY;
	tlc.pszText = sz;

	tlc.iSubItem = 0;
	tlc.fmt = TLCFMT_LEFT;
	tlc.iDataType = TLC_DATASTRING;
	tlc.cx = pGM->wFieldWidth[0];
	tlc.bMouseNotify = FALSE;
	LoadString (g_hinst, IDS_GROUPNAMEFIELD, sz, sizeof(sz));
	TreeList_InsertColumn (pGM->hwndTree, 0, &tlc);

	for (iCol=1; iCol<NUMBERFIELDS; iCol++) 
	{
		iField = pGM->wColumnField[iCol];
		if (iField) 
		{
			switch (iField) {
				case GMI_VALIDITY :
					ids = IDS_VALIDITYFIELD;
					if (pGM->uOptions & GMF_NOVICEMODE) 
						tlc.fmt = TLCFMT_IMAGE;
					else 
						tlc.fmt = TLCFMT_LINBAR;
					tlc.cchTextMax = 
							GMConvertFromPGPValidity (kPGPValidity_Complete);
					tlc.iDataType = TLC_DATALONG;
					tlc.bMouseNotify = FALSE;
					break;

				case GMI_DESCRIPTION :
					ids = IDS_DESCRIPTIONFIELD;
					tlc.fmt = TLCFMT_LEFT;
					tlc.iDataType = TLC_DATASTRING;
					tlc.bMouseNotify = FALSE;
					break;
			}
			LoadString (g_hinst, ids, sz, sizeof(sz));
			tlc.cx = pGM->wFieldWidth[iField];
			TreeList_InsertColumn (pGM->hwndTree, iCol, &tlc);
		}
	}

	return TRUE;
}

//	___________________________________________________
//
//  Create TreeList Window

HGROUPMAN 
PGPgmCreateGroupManager (
		PGPContextRef		Context, 
		PGPtlsContextRef	tlsContext,
		HWND				hwndParent, 
		INT					iID, 
		INT					x, 
		INT					y,
		INT					nWidth, 
		INT					nHeight) 
{
	PGROUPMAN			pGM;
	PGPclWindowsGenus	genus;
	DWORD				dwStyle;

	// Ensure that the common control DLL is loaded.
	InitCommonControls ();

	// Ensure that the custom control DLL is loaded.
	InitTreeListControl ();

	pGM = gmAlloc (sizeof (_GROUPMAN));
	if (!pGM) 
		return NULL;
	memset (pGM, 0x00, sizeof (_GROUPMAN));

	pGM->hwndParent = hwndParent;
	pGM->hwndTree = NULL;
	pGM->groupsetMain = NULL;
	pGM->iID = iID;
	pGM->pDropTarget = NULL;			//pointer to DropTarget object

	pGM->context = Context;			//PGP context
	pGM->tlsContext = tlsContext;
	pGM->uOptions = 0;

	pGM->bMultipleSelected = FALSE;
	pGM->bLocatingKeys = FALSE;
	pGM->uSelectedFlags = 0;
	pGM->iFocusedItemType = 0;
	pGM->iFocusedObjectType = 0;
	pGM->hFocusedItem = NULL;
	pGM->pFocusedObject = NULL;

	pGM->iValidityThreshold = GM_VALIDITY_MARGINAL;

	GMGetColumnPreferences (pGM);

	dwStyle = WS_VISIBLE | WS_CHILD | WS_BORDER | WS_TABSTOP | WS_GROUP |
			TLS_HASBUTTONS | TLS_HASLINES | TLS_AUTOSCROLL | 
			TLS_PROMISCUOUS | TLS_INTERNALDRAG | 
			TLS_DRAGABLEHEADERS | TLS_DRAGSELECTION;

	PGPclGetWindowsVersion (NULL, &genus, NULL);
	if (genus >= kPGPclWindowsGenusXp)
		dwStyle |= TLS_USEDEFAULTGUIFONT;

	// Create the tree view window.
	pGM->hwndTree = CreateWindowEx (WS_EX_CLIENTEDGE, WC_TREELIST, "",
			dwStyle, x, y, nWidth, nHeight,
			hwndParent, (HMENU)iID, g_hinst, NULL);

	if (pGM->hwndTree == NULL) return NULL;

	// Associate the image list with the tree view control.
	TreeList_SetImageList (pGM->hwndTree, g_hilKeys);

	GMSetFocus (pGM, NULL, FALSE, FALSE);
	pGM->pDropTarget = PKCreateDropTarget (pGM->hwndParent, 
			PK_IDROP_GROUPLIST, (VOID*)pGM); 
	CoLockObjectExternal ((IUnknown*)pGM->pDropTarget, TRUE, TRUE);
	RegisterDragDrop (pGM->hwndTree, pGM->pDropTarget);
	PKEnableDropTarget (pGM->pDropTarget, FALSE);

 	return (HGROUPMAN)pGM;
}


//	___________________________________________________
//
//  Set (or add) a tree item to the tree

static HTLITEM 
sSetOneGroupItem (
		PGROUPMAN	pGM, 
		BOOL		bReInsert, 
		HTLITEM		hItem, 
		HTLITEM		hParent, 
		LPSTR		szText, 
		HTLITEM		hInsAfter, 
		INT			iImage, 
		UINT		uState, 
		LPARAM		lParam) 
{
	TL_TREEITEM tlI;
	TL_INSERTSTRUCT tlIns;

	tlI.hItem = hItem;
	tlI.mask = TLIF_TEXT | TLIF_IMAGE | TLIF_STATE | TLIF_PARAM;
	tlI.stateMask = TLIS_BOLD | TLIS_ITALICS;
	tlI.stateMask |= uState;
	tlI.state = uState;
	tlI.pszText = szText;
	tlI.cchTextMax = lstrlen (szText);
	tlI.iImage = iImage;
	tlI.iSelectedImage = iImage;
	tlI.lParam = lParam;

	// Insert the data into the tree.
	if (bReInsert || !hItem) 
	{
		tlIns.item = tlI;
		tlIns.hInsertAfter = hInsAfter;
		tlIns.hParent = hParent;
		return (TreeList_InsertItem (pGM->hwndTree, &tlIns));
	}
	else 
	{
		TreeList_SetItem (pGM->hwndTree, &tlI);
		return hItem;
	}
}


//	___________________________________________________
//
//  Set list data for a key

static HTLITEM 
sSetGroupData (
		PGROUPMAN	pGM, 
		HTLITEM		hItem, 
		PGPGroupID	groupid, 
		LPSTR		pszDesc) 
{ 
	TL_LISTITEM tlL;
	INT iField, iCol;

	INT iValue, iNumNotFound;

	tlL.hItem = hItem;
	tlL.stateMask = TLIS_VISIBLE;

	for (iCol=1; iCol<NUMBERFIELDS; iCol++) 
	{
		iField = pGM->wColumnField[iCol];
		if (iField) 
		{
			switch (iField) {
			case GMI_VALIDITY :
				tlL.pszText = NULL;

				PGPGetGroupLowestValidity (pGM->groupsetMain, groupid, 
						pGM->keydbMain, &iValue, &iNumNotFound);

				if (iNumNotFound > 0) iValue = 0;
				else iValue = GMConvertFromPGPValidity (iValue);

				tlL.state = TLIS_VISIBLE;
				tlL.mask = TLIF_DATAVALUE | TLIF_STATE;
				if (pGM->uOptions & GMF_NOVICEMODE) 
				{
					if (iValue > GM_VALIDITY_COMPLETE)
						tlL.lDataValue = IDX_AXIOMATIC;
					else if (iValue >= pGM->iValidityThreshold) 
						tlL.lDataValue = IDX_VALID;
					else tlL.lDataValue = IDX_INVALID;
				}
				else tlL.lDataValue = iValue;
				break;

			case GMI_DESCRIPTION :
				tlL.state = TLIS_VISIBLE;
				tlL.mask = TLIF_TEXT | TLIF_STATE;
				tlL.pszText = pszDesc;
				break;

			}
			tlL.iSubItem = iCol;
			hItem = (HTLITEM) TreeList_SetListItem (
					pGM->hwndTree, &tlL, FALSE);
		}
	}

	return (hItem);
}


//	___________________________________________________
//
//  Set list data for a key

static HTLITEM 
sSetKeyData (
		PGROUPMAN		pGM, 
		HTLITEM			hItem, 
		PGPKeyDBObjRef	key, 
		LPSTR			pszDesc) 
{ 
	TL_LISTITEM	tlL;
	INT			iField, iCol;
	PGPBoolean	bAxiomatic;

	INT iValue;

	tlL.hItem = hItem;
	tlL.stateMask = TLIS_VISIBLE;

	for (iCol=1; iCol<NUMBERFIELDS; iCol++) 
	{
		iField = pGM->wColumnField[iCol];
		if (iField) 
		{
			switch (iField) {
			case GMI_VALIDITY :
				PGPGetPrimaryUserIDValidity (key, &iValue);
				iValue = GMConvertFromPGPValidity (iValue);

				PGPGetKeyDBObjBooleanProperty (key, 
						kPGPKeyProperty_IsAxiomatic, &bAxiomatic);
				if (bAxiomatic) 
				{
					iValue = 
						GMConvertFromPGPValidity (kPGPValidity_Complete)+1;
				}

				tlL.state = TLIS_VISIBLE;
				tlL.mask = TLIF_DATAVALUE | TLIF_STATE;

				if (pGM->uOptions & GMF_NOVICEMODE) 
				{
					if (iValue > GM_VALIDITY_COMPLETE)
						tlL.lDataValue = IDX_AXIOMATIC;
					else if (iValue >= pGM->iValidityThreshold) 
						tlL.lDataValue = IDX_VALID;
					else 
						tlL.lDataValue = IDX_INVALID;
				}
				else 
					tlL.lDataValue = iValue;
				break;

			case GMI_DESCRIPTION :
				tlL.state = TLIS_VISIBLE;
				tlL.mask = TLIF_TEXT | TLIF_STATE;
				tlL.pszText = pszDesc;
				break;

			}
			tlL.iSubItem = iCol;
			hItem = (HTLITEM) TreeList_SetListItem (
					pGM->hwndTree, &tlL, FALSE);
		}
	}

	return (hItem);
}


//	___________________________________________________
//
//  Reload a single group

static HTLITEM 
sReloadGroup (
		PGROUPMAN	pGM, 
		PGPGroupID	groupid, 
		INT			iIndex,
		BOOL		bReInsert, 

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -