#include "uipriv_windows.hpp"
#include "table.hpp"
static HRESULT handleLVIF_TEXT(uiTable *t, NMLVDISPINFOW *nm, uiprivTableColumnParams *p)
{
int strcol;
uiTableValue *value;
WCHAR *wstr;
int progress;
if ((nm->item.mask & LVIF_TEXT) == 0)
return S_OK;
strcol = -1;
if (p->textModelColumn != -1)
strcol = p->textModelColumn;
else if (p->buttonModelColumn != -1)
strcol = p->buttonModelColumn;
if (strcol != -1) {
value = uiprivTableModelCellValue(t->model, nm->item.iItem, strcol);
wstr = toUTF16(uiTableValueString(value));
uiFreeTableValue(value);
wcsncpy(nm->item.pszText, wstr, nm->item.cchTextMax);
nm->item.pszText[nm->item.cchTextMax - 1] = L'\0';
uiprivFree(wstr);
return S_OK;
}
if (p->progressBarModelColumn != -1) {
progress = uiprivTableProgress(t, nm->item.iItem, nm->item.iSubItem, p->progressBarModelColumn, NULL);
if (progress == -1) {
wcsncpy(nm->item.pszText, L"Indeterminate", nm->item.cchTextMax);
return S_OK;
}
_snwprintf(nm->item.pszText, nm->item.cchTextMax, L"%d%%", progress);
return S_OK;
}
return S_OK;
}
static HRESULT handleLVIF_IMAGE(uiTable *t, NMLVDISPINFOW *nm, uiprivTableColumnParams *p)
{
if (nm->item.iSubItem == 0 && p->imageModelColumn == -1 && p->checkboxModelColumn == -1) {
nm->item.mask |= LVIF_INDENT;
nm->item.iIndent = -1;
}
if ((nm->item.mask & LVIF_IMAGE) == 0)
return S_OK;
nm->item.iImage = -1;
if (p->imageModelColumn != -1 || p->checkboxModelColumn != -1)
nm->item.iImage = 0;
return S_OK;
}
HRESULT uiprivTableHandleLVN_GETDISPINFO(uiTable *t, NMLVDISPINFOW *nm, LRESULT *lResult)
{
uiprivTableColumnParams *p;
HRESULT hr;
p = (*(t->columns))[nm->item.iSubItem];
hr = handleLVIF_TEXT(t, nm, p);
if (hr != S_OK)
return hr;
hr = handleLVIF_IMAGE(t, nm, p);
if (hr != S_OK)
return hr;
*lResult = 0;
return S_OK;
}