BOOL SoftwarePicker_AddDirectory(HWND hwndPicker, LPCSTR pszDirectory) { software_picker_info *pPickerInfo; directory_search_info *pSearchInfo; directory_search_info **ppLast; size_t nSearchInfoSize; char szBuffer[MAX_PATH]; pszDirectory = NormalizePath(pszDirectory, szBuffer, sizeof(szBuffer) / sizeof(szBuffer[0])); Picker_ResetIdle(hwndPicker); pPickerInfo = GetSoftwarePickerInfo(hwndPicker); nSearchInfoSize = sizeof(directory_search_info) + strlen(pszDirectory); pSearchInfo = (directory_search_info *)malloc(nSearchInfoSize); if (!pSearchInfo) return FALSE; memset(pSearchInfo, 0, nSearchInfoSize); pSearchInfo->find_handle = INVALID_HANDLE_VALUE; strcpy(pSearchInfo->directory_name, pszDirectory); // insert into linked list if (pPickerInfo->last_search_info) ppLast = &pPickerInfo->last_search_info->next; else ppLast = &pPickerInfo->first_search_info; *ppLast = pSearchInfo; pPickerInfo->last_search_info = pSearchInfo; return TRUE; }
BOOL SoftwarePicker_AddFile(HWND hwndPicker, LPCSTR pszFilename) { char szBuffer[MAX_PATH]; Picker_ResetIdle(hwndPicker); pszFilename = NormalizePath(pszFilename, szBuffer, sizeof(szBuffer) / sizeof(szBuffer[0])); return SoftwarePicker_InternalAddFile(hwndPicker, pszFilename, TRUE); }
BOOL SoftwareList_AddFile(HWND hwndPicker,LPCSTR pszName, LPCSTR pszListname, LPCSTR pszDescription, LPCSTR pszPublisher, LPCSTR pszYear, LPCSTR pszUsage, LPCSTR pszDevice) { Picker_ResetIdle(hwndPicker); software_list_info *pPickerInfo; file_info **ppNewIndex; file_info *pInfo; int nIndex, nSize; // first check to see if it is already here //if (SoftwareList_LookupIndex(hwndPicker, pszName) >= 0) // return TRUE; pPickerInfo = GetSoftwareListInfo(hwndPicker); // create the FileInfo structure nSize = sizeof(file_info); pInfo = (file_info *) malloc(nSize); if (!pInfo) goto error; memset(pInfo, 0, nSize); // copy the filename strcpy(pInfo->file_name, pszName); strcpy(pInfo->list_name, pszListname); strcpy(pInfo->description, pszDescription); strcpy(pInfo->publisher, pszPublisher); strcpy(pInfo->year, pszYear); if (pszUsage) strcpy(pInfo->usage, pszUsage); strcpy(pInfo->device, pszDevice); sprintf(pInfo->full_name,"%s:%s", pszListname,pszName); ppNewIndex = (file_info**)malloc((pPickerInfo->file_index_length + 1) * sizeof(*pPickerInfo->file_index)); memcpy(ppNewIndex,pPickerInfo->file_index,pPickerInfo->file_index_length * sizeof(*pPickerInfo->file_index)); if (pPickerInfo->file_index) free(pPickerInfo->file_index); if (!ppNewIndex) goto error; nIndex = pPickerInfo->file_index_length++; pPickerInfo->file_index = ppNewIndex; pPickerInfo->file_index[nIndex] = pInfo; // Actually insert the item into the picker Picker_InsertItemSorted(hwndPicker, nIndex); software_numberofitems++; return TRUE; error: if (pInfo) free(pInfo); return FALSE; }
BOOL SetupPicker(HWND hwndPicker, const struct PickerOptions *pOptions) { struct PickerInfo *pPickerInfo; int i = 0; LONG_PTR l = 0; HRESULT res = 0; assert(hwndPicker); // Allocate the list view struct pPickerInfo = (struct PickerInfo *) malloc(sizeof(struct PickerInfo)); if (!pPickerInfo) return FALSE; // And fill it out memset(pPickerInfo, 0, sizeof(*pPickerInfo)); pPickerInfo->pCallbacks = pOptions->pCallbacks; pPickerInfo->nColumnCount = pOptions->nColumnCount; pPickerInfo->ppszColumnNames = pOptions->ppszColumnNames; pPickerInfo->nLastItem = -1; if (pPickerInfo->nColumnCount) { // Allocate space for the column order and columns shown array pPickerInfo->pnColumnsOrder = (int*)malloc(pPickerInfo->nColumnCount * sizeof(*pPickerInfo->pnColumnsOrder)); pPickerInfo->pnColumnsShown = (int*)malloc(pPickerInfo->nColumnCount * sizeof(*pPickerInfo->pnColumnsShown)); if (!pPickerInfo->pnColumnsOrder || !pPickerInfo->pnColumnsShown) goto error; // set up initial values for (i = 0; i < pPickerInfo->nColumnCount; i++) { pPickerInfo->pnColumnsOrder[i] = i; pPickerInfo->pnColumnsShown[i] = TRUE; } if (GetUseOldControl()) { if (pPickerInfo->pCallbacks->pfnSetColumnOrder) pPickerInfo->pCallbacks->pfnSetColumnOrder(pPickerInfo->pnColumnsOrder); if (pPickerInfo->pCallbacks->pfnSetColumnShown) pPickerInfo->pCallbacks->pfnSetColumnShown(pPickerInfo->pnColumnsShown); } else { if (pPickerInfo->pCallbacks->pfnGetColumnOrder) pPickerInfo->pCallbacks->pfnGetColumnOrder(pPickerInfo->pnColumnsOrder); if (pPickerInfo->pCallbacks->pfnGetColumnShown) pPickerInfo->pCallbacks->pfnGetColumnShown(pPickerInfo->pnColumnsShown); } } // Hook in our wndproc and userdata pointer l = GetWindowLongPtr(hwndPicker, GWLP_WNDPROC); pPickerInfo->pfnParentWndProc = (WNDPROC) l; SetWindowLongPtr(hwndPicker, GWLP_USERDATA, (LONG_PTR) pPickerInfo); SetWindowLongPtr(hwndPicker, GWLP_WNDPROC, (LONG_PTR) ListViewWndProc); res = ListView_SetExtendedListViewStyle(hwndPicker, LVS_EX_FULLROWSELECT | LVS_EX_HEADERDRAGDROP | LVS_EX_UNDERLINEHOT | LVS_EX_UNDERLINECOLD | LVS_EX_LABELTIP); Picker_InternalResetColumnDisplay(hwndPicker, TRUE); Picker_ResetIdle(hwndPicker); res++; return TRUE; error: if (pPickerInfo) Picker_Free(pPickerInfo); return FALSE; }