|
|
1.1.1.2 ! root 1: /* Copyright (C) 2004 TrueCrypt Foundation 1.1 root 2: This product uses components written by Paul Le Roux <[email protected]> */ 3: 4: #include "TCdefs.h" 5: #include "combo.h" 6: 7: #include <time.h> 8: 9: #define SIZEOF_MRU_LIST 8 10: 11: void 12: AddComboItem (HWND hComboBox, char *lpszFileName) 13: { 14: LPARAM nIndex; 15: 16: nIndex = SendMessage (hComboBox, CB_FINDSTRINGEXACT, (WPARAM) - 1, 17: (LPARAM) & lpszFileName[0]); 18: 19: if (nIndex == CB_ERR && *lpszFileName) 20: { 21: long lTime = time (NULL); 22: nIndex = SendMessage (hComboBox, CB_ADDSTRING, 0, (LPARAM) & lpszFileName[0]); 23: if (nIndex != CB_ERR) 24: SendMessage (hComboBox, CB_SETITEMDATA, nIndex, (LPARAM) lTime); 25: } 26: 27: if (nIndex != CB_ERR && *lpszFileName) 28: nIndex = SendMessage (hComboBox, CB_SETCURSEL, nIndex, 0); 29: 30: if (*lpszFileName == 0) 31: { 32: SendMessage (hComboBox, CB_SETCURSEL, (WPARAM) - 1, 0); 33: } 34: } 35: 36: 37: LPARAM 38: MoveEditToCombo (HWND hComboBox) 39: { 40: char szTmp[256] = 41: {0}; 42: 43: GetWindowText (hComboBox, szTmp, sizeof (szTmp)); 44: 45: if (strlen (szTmp) > 0) 46: { 47: LPARAM nIndex = SendMessage (hComboBox, CB_FINDSTRINGEXACT, (WPARAM) - 1, 48: (LPARAM) & szTmp[0]); 49: if (nIndex == CB_ERR) 50: { 51: long lTime = time (NULL); 52: nIndex = SendMessage (hComboBox, CB_ADDSTRING, 0, (LPARAM) & szTmp[0]); 53: if (nIndex != CB_ERR) 54: SendMessage (hComboBox, CB_SETITEMDATA, nIndex, (DWORD) lTime); 55: } 56: else 57: { 58: long lTime = time (NULL); 59: SendMessage (hComboBox, CB_SETITEMDATA, nIndex, (DWORD) lTime); 60: } 61: 62: return nIndex; 63: } 64: 65: return SendMessage (hComboBox, CB_GETCURSEL, 0, 0); 66: } 67: 68: int 69: GetOrderComboIdx (HWND hComboBox, int *nIdxList, int nElems) 70: { 71: int x = (int) SendMessage (hComboBox, CB_GETCOUNT, 0, 0); 72: if (x != CB_ERR) 73: { 74: int i, nHighIdx = CB_ERR; 75: long lHighTime = -1; 76: 77: for (i = 0; i < x; i++) 78: { 79: long lTime = SendMessage (hComboBox, CB_GETITEMDATA, (WPARAM) i, 0); 80: if (lTime > lHighTime) 81: { 82: int n; 83: for (n = 0; n < nElems; n++) 84: if (nIdxList[n] == i) 85: break; 86: if (n == nElems) 87: { 88: lHighTime = lTime; 89: nHighIdx = i; 90: } 91: } 92: } 93: 94: return nHighIdx; 95: } 96: 97: return CB_ERR; 98: } 99: 100: LPARAM 101: UpdateComboOrder (HWND hComboBox) 102: { 103: LPARAM nIndex; 104: 105: nIndex = SendMessage (hComboBox, CB_GETCURSEL, 0, 0); 106: 107: if (nIndex != CB_ERR) 108: { 109: long lTime = time (NULL); 110: nIndex = SendMessage (hComboBox, CB_SETITEMDATA, (WPARAM) nIndex, 111: (LPARAM) lTime); 112: } 113: 114: return nIndex; 115: } 116: 117: void 118: LoadCombo (HWND hComboBox, char *lpszKey) 119: { 120: int i; 121: 122: for (i = 0; i < SIZEOF_MRU_LIST; i++) 123: { 124: char szTmp[256], szKey[32], szTmp2[32]; 125: 126: *szTmp = 0; 127: 128: sprintf (szTmp2, "%s%s", lpszKey, "%d"); 129: sprintf (szKey, szTmp2, i); 130: ReadRegistryString (szKey, "", szTmp, sizeof (szTmp)); 131: 132: AddComboItem (hComboBox, szTmp); 133: } 134: 135: SendMessage (hComboBox, CB_SETCURSEL, 0, 0); 136: 137: } 138: 139: void 140: DumpCombo (HWND hComboBox, char *lpszKey, int bClear) 141: { 142: int i, nComboIdx[SIZEOF_MRU_LIST]; 143: 144: /* combo list part:- get mru items */ 145: for (i = 0; i < SIZEOF_MRU_LIST; i++) 146: nComboIdx[i] = bClear ? CB_ERR : GetOrderComboIdx (hComboBox, &nComboIdx[0], i); 147: 148: /* combo list part:- write out mru items */ 149: for (i = 0; i < SIZEOF_MRU_LIST; i++) 150: { 151: char szTmp[256], szKey[32], szTmp2[32]; 152: 153: *szTmp = 0; 154: 155: if (nComboIdx[i] != CB_ERR) 156: SendMessage (hComboBox, CB_GETLBTEXT, nComboIdx[i], (LPARAM) & szTmp[0]); 157: 158: sprintf (szTmp2, "%s%s", lpszKey, "%d"); 159: sprintf (szKey, szTmp2, i); 160: 161: WriteRegistryString (szKey, szTmp); 162: } 163: } 164: 165: void 166: ClearCombo (HWND hComboBox) 167: { 168: int i; 169: for (i = 0; i < SIZEOF_MRU_LIST; i++) 170: { 171: SendMessage (hComboBox, CB_DELETESTRING, 0, 0); 172: } 173: } 174: 175: int 176: IsComboEmpty (HWND hComboBox) 177: { 178: return SendMessage (hComboBox, CB_GETCOUNT, 0, 0) < 1; 179: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.