void ChangeInfoData::LoadSettingsFromDb(int keepChanged) { for (int i=0; i < settingCount; i++) { if (setting[i].displayType == LI_DIVIDER) continue; if (keepChanged && settingData[i].changed) continue; if (setting[i].dbType == DBVT_ASCIIZ || setting[i].dbType == DBVT_UTF8) SAFE_FREE((void**)(char**)&settingData[i].value); else if (!keepChanged) settingData[i].value = 0; settingData[i].changed = 0; if (setting[i].displayType & LIF_PASSWORD) continue; DBVARIANT dbv = {DBVT_DELETED}; if (!ppro->getSetting(NULL, setting[i].szDbSetting, &dbv)) { switch(dbv.type) { case DBVT_ASCIIZ: settingData[i].value = (LPARAM)ppro->getSettingStringUtf(NULL, setting[i].szDbSetting, NULL); break; case DBVT_UTF8: settingData[i].value = (LPARAM)null_strdup(dbv.pszVal); break; case DBVT_WORD: if (setting[i].displayType & LIF_SIGNED) settingData[i].value = dbv.sVal; else settingData[i].value = dbv.wVal; break; case DBVT_BYTE: if (setting[i].displayType & LIF_SIGNED) settingData[i].value = dbv.cVal; else settingData[i].value = dbv.bVal; break; #ifdef _DEBUG default: MessageBoxA(NULL, "That's not supposed to happen either", "Huh?", MB_OK); break; #endif } db_free(&dbv); } char buf[MAX_PATH]; TCHAR tbuf[MAX_PATH]; if (utf8_to_tchar_static(GetItemSettingText(i, buf, SIZEOF(buf)), tbuf, SIZEOF(tbuf))) ListView_SetItemText(hwndList, i, 1, tbuf); } }
void ChangeInfoData::PaintItemSetting(HDC hdc, RECT *rc, int i, UINT itemState) { char str[MAX_PATH]; char *text = GetItemSettingText(i, str, _countof(str)); const SettingItem &si = setting[i]; SettingItemData &sid = settingData[i]; if (sid.value == 0 && !(si.displayType & LIF_ZEROISVALID)) SetTextColor(hdc, GetSysColor(COLOR_GRAYTEXT)); if ((si.displayType & LIM_TYPE) == LI_LIST && (itemState & CDIS_SELECTED || iEditItem == i)) { RECT rcBtn = *rc; rcBtn.left = rcBtn.right - rc->bottom + rc->top; InflateRect(&rcBtn, -2, -2); rc->right = rcBtn.left; DrawFrameControl(hdc, &rcBtn, DFC_SCROLL, iEditItem == i ? DFCS_SCROLLDOWN | DFCS_PUSHED : DFCS_SCROLLDOWN); } DrawTextUtf(hdc, text, rc, DT_END_ELLIPSIS | DT_LEFT | DT_NOCLIP | DT_NOPREFIX | DT_SINGLELINE | DT_VCENTER, NULL); }