www.pudn.com > truecrypt.zip > COMBO.C


/* Copyright (C) 2004 TrueCrypt Team, truecrypt.org 
   This product uses components written by Paul Le Roux  */ 
 
#include "TCdefs.h" 
#include "combo.h" 
 
#include  
 
#define SIZEOF_MRU_LIST 8 
 
void 
AddComboItem (HWND hComboBox, char *lpszFileName) 
{ 
	LPARAM nIndex; 
 
	nIndex = SendMessage (hComboBox, CB_FINDSTRINGEXACT, (WPARAM) - 1, 
			      (LPARAM) & lpszFileName[0]); 
 
	if (nIndex == CB_ERR && *lpszFileName) 
	{ 
		long lTime = time (NULL); 
		nIndex = SendMessage (hComboBox, CB_ADDSTRING, 0, (LPARAM) & lpszFileName[0]); 
		if (nIndex != CB_ERR) 
			SendMessage (hComboBox, CB_SETITEMDATA, nIndex, (LPARAM) lTime); 
	} 
 
	if (nIndex != CB_ERR && *lpszFileName) 
		nIndex = SendMessage (hComboBox, CB_SETCURSEL, nIndex, 0); 
 
	if (*lpszFileName == 0) 
	{ 
		SendMessage (hComboBox, CB_SETCURSEL, (WPARAM) - 1, 0); 
	} 
} 
 
 
LPARAM 
MoveEditToCombo (HWND hComboBox) 
{ 
	char szTmp[256] = 
	{0}; 
 
	GetWindowText (hComboBox, szTmp, sizeof (szTmp)); 
 
	if (strlen (szTmp) > 0) 
	{ 
		LPARAM nIndex = SendMessage (hComboBox, CB_FINDSTRINGEXACT, (WPARAM) - 1, 
					     (LPARAM) & szTmp[0]); 
		if (nIndex == CB_ERR) 
		{ 
			long lTime = time (NULL); 
			nIndex = SendMessage (hComboBox, CB_ADDSTRING, 0, (LPARAM) & szTmp[0]); 
			if (nIndex != CB_ERR) 
				SendMessage (hComboBox, CB_SETITEMDATA, nIndex, (DWORD) lTime); 
		} 
		else 
		{ 
			long lTime = time (NULL); 
			SendMessage (hComboBox, CB_SETITEMDATA, nIndex, (DWORD) lTime); 
		} 
 
		return nIndex; 
	} 
 
	return SendMessage (hComboBox, CB_GETCURSEL, 0, 0); 
} 
 
int 
GetOrderComboIdx (HWND hComboBox, int *nIdxList, int nElems) 
{ 
	int x = (int) SendMessage (hComboBox, CB_GETCOUNT, 0, 0); 
	if (x != CB_ERR) 
	{ 
		int i, nHighIdx = CB_ERR; 
		long lHighTime = -1; 
 
		for (i = 0; i < x; i++) 
		{ 
			long lTime = SendMessage (hComboBox, CB_GETITEMDATA, (WPARAM) i, 0); 
			if (lTime > lHighTime) 
			{ 
				int n; 
				for (n = 0; n < nElems; n++) 
					if (nIdxList[n] == i) 
						break; 
				if (n == nElems) 
				{ 
					lHighTime = lTime; 
					nHighIdx = i; 
				} 
			} 
		} 
 
		return nHighIdx; 
	} 
 
	return CB_ERR; 
} 
 
LPARAM 
UpdateComboOrder (HWND hComboBox) 
{ 
	LPARAM nIndex; 
 
	nIndex = SendMessage (hComboBox, CB_GETCURSEL, 0, 0); 
 
	if (nIndex != CB_ERR) 
	{ 
		long lTime = time (NULL); 
		nIndex = SendMessage (hComboBox, CB_SETITEMDATA, (WPARAM) nIndex, 
				      (LPARAM) lTime); 
	} 
 
	return nIndex; 
} 
 
void 
LoadCombo (HWND hComboBox, char *lpszKey) 
{ 
	int i; 
 
	for (i = 0; i < SIZEOF_MRU_LIST; i++) 
	{ 
		char szTmp[256], szKey[32], szTmp2[32]; 
 
		*szTmp = 0; 
 
		sprintf (szTmp2, "%s%s", lpszKey, "%d"); 
		sprintf (szKey, szTmp2, i); 
		ReadRegistryString (szKey, "", szTmp, sizeof (szTmp)); 
 
		AddComboItem (hComboBox, szTmp); 
	} 
 
	SendMessage (hComboBox, CB_SETCURSEL, 0, 0); 
 
} 
 
void 
DumpCombo (HWND hComboBox, char *lpszKey, int bClear) 
{ 
	int i, nComboIdx[SIZEOF_MRU_LIST]; 
 
	/* combo list part:- get mru items */ 
	for (i = 0; i < SIZEOF_MRU_LIST; i++) 
		nComboIdx[i] = bClear ? CB_ERR : GetOrderComboIdx (hComboBox, &nComboIdx[0], i); 
 
	/* combo list part:- write out mru items */ 
	for (i = 0; i < SIZEOF_MRU_LIST; i++) 
	{ 
		char szTmp[256], szKey[32], szTmp2[32]; 
 
		*szTmp = 0; 
 
		if (nComboIdx[i] != CB_ERR) 
			SendMessage (hComboBox, CB_GETLBTEXT, nComboIdx[i], (LPARAM) & szTmp[0]); 
 
		sprintf (szTmp2, "%s%s", lpszKey, "%d"); 
		sprintf (szKey, szTmp2, i); 
 
		WriteRegistryString (szKey, szTmp); 
	} 
} 
 
void 
ClearCombo (HWND hComboBox) 
{ 
	int i; 
	for (i = 0; i < SIZEOF_MRU_LIST; i++) 
	{ 
		SendMessage (hComboBox, CB_DELETESTRING, 0, 0); 
	} 
} 
 
int 
IsComboEmpty (HWND hComboBox) 
{ 
	return SendMessage (hComboBox, CB_GETCOUNT, 0, 0) < 1; 
}