/* * lvchk - common dialog proc handler for check-listview pages */ #include "tweakui.h" #pragma BEGIN_CONST_DATA #pragma END_CONST_DATA /***************************************************************************** * * Checklist_OnInitDialog * * Walk the items that can live on the checklist. * * If the item can't report its state, then don't put it on the list. * *****************************************************************************/ void PASCAL Checklist_OnInitDialog(HWND hwnd, PCCHECKLISTITEM rgcli, int ccli, UINT ids, LPVOID pvRef) { TCHAR tsz[MAX_PATH]; int dids; for (dids = 0; dids < ccli; dids++) { BOOL f = rgcli[dids].GetCheckValue(rgcli[dids].lParam, pvRef); if (f >= 0) { LoadString(hinstCur, ids+dids, tsz, cA(tsz)); LV_AddItem(hwnd, dids, tsz, -1, f); } } } /***************************************************************************** * * Checklist_OnApply * * Walk the items in the checklist and dork them if they have changed. * * The fForce flag forces us to call the callback even if nothing changed. * *****************************************************************************/ void PASCAL Checklist_OnApply(HWND hdlg, PCCHECKLISTITEM rgcli, LPVOID pvRef, BOOL fForce) { HWND hwnd = GetDlgItem(hdlg, IDC_ICONLV); int cItems = ListView_GetItemCount(hwnd); LV_ITEM lvi; for (lvi.iItem = 0; lvi.iItem < cItems; lvi.iItem++) { BOOL fNew, fOld; lvi.stateMask = LVIS_STATEIMAGEMASK; Misc_LV_GetItemInfo(hwnd, &lvi, lvi.iItem, LVIF_PARAM | LVIF_STATE); fNew = LV_IsChecked(&lvi); fOld = rgcli[lvi.lParam].GetCheckValue(rgcli[lvi.lParam].lParam, pvRef); if (fOld >= 0 && (fForce || fNew != fOld)) { if (!rgcli[lvi.lParam].SetCheckValue(fNew, rgcli[lvi.lParam].lParam, pvRef)) { lvi.state = INDEXTOSTATEIMAGEMASK(fOld + 1); ListView_SetItem(hwnd, &lvi); /* Restore the state */ } } } }