70 lines
2.1 KiB
C++
70 lines
2.1 KiB
C++
|
/*
|
||
|
* 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 */
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
}
|