예제 #1
0
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);
	}
}
예제 #2
0
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);
}