oleview: Properly support enumerations.

This commit is contained in:
Misha Koshelev 2007-02-25 17:09:19 -06:00 committed by Alexandre Julliard
parent a5d7c2fb19
commit 633e038b14
1 changed files with 61 additions and 0 deletions

View File

@ -32,6 +32,7 @@ static const WCHAR wszFailed[] = { '<','f','a','i','l','e','d','>','\0' };
static const WCHAR wszSpace[] = { ' ','\0' };
static const WCHAR wszAsterix[] = { '*','\0' };
static const WCHAR wszComa[] = { ',','\0' };
static const WCHAR wszEquals[] = { '=','\0' };
static const WCHAR wszSemicolon[] = { ';','\0' };
static const WCHAR wszNewLine[] = { '\n','\0' };
static const WCHAR wszOpenBrackets1[] = { '[','\0' };
@ -428,6 +429,60 @@ int EnumVars(ITypeInfo *pTypeInfo, int cVars, HTREEITEM hParent)
return 0;
}
int EnumEnums(ITypeInfo *pTypeInfo, int cVars, HTREEITEM hParent)
{
int i;
TVINSERTSTRUCT tvis;
VARDESC *pVarDesc;
BSTR bstrName;
WCHAR wszText[MAX_LOAD_STRING];
U(tvis).item.mask = TVIF_TEXT|TVIF_PARAM;
U(tvis).item.cchTextMax = MAX_LOAD_STRING;
U(tvis).item.pszText = wszText;
tvis.hInsertAfter = (HTREEITEM)TVI_LAST;
tvis.hParent = hParent;
for(i=0; i<cVars; i++)
{
TYPELIB_DATA *tld;
if(FAILED(ITypeInfo_GetVarDesc(pTypeInfo, i, &pVarDesc))) continue;
if(FAILED(ITypeInfo_GetDocumentation(pTypeInfo, pVarDesc->memid, &bstrName,
NULL, NULL, NULL))) continue;
tld = InitializeTLData();
U(tvis).item.lParam = (LPARAM) tld;
memset(wszText, 0, sizeof(wszText));
AddToStrW(wszText, bstrName);
if (pVarDesc->varkind == VAR_CONST)
{
VARIANT var;
VariantInit(&var);
if (VariantChangeType(&var, pVarDesc->lpvarValue, 0, VT_BSTR) == S_OK)
{
AddToStrW(wszText, wszSpace);
AddToStrW(wszText, wszEquals);
AddToStrW(wszText, wszSpace);
AddToStrW(wszText, V_BSTR(&var));
}
}
AddToTLDataStrW(tld, wszText);
if (i<cVars-1)
AddToTLDataStrW(tld, wszComa);
AddToTLDataStrW(tld, wszNewLine);
SendMessage(typelib.hTree, TVM_INSERTITEM, 0, (LPARAM)&tvis);
SysFreeString(bstrName);
ITypeInfo_ReleaseVarDesc(pTypeInfo, pVarDesc);
}
return 0;
}
int EnumFuncs(ITypeInfo *pTypeInfo, int cFuncs, HTREEITEM hParent)
{
int i, j, tabSize;
@ -1032,6 +1087,12 @@ int PopulateTree(void)
AddToStrW(tld->wszInsertAfter, bstrName);
AddToStrW(tld->wszInsertAfter, wszSemicolon);
AddToStrW(tld->wszInsertAfter, wszNewLine);
bInsert = FALSE;
hParent = TreeView_InsertItem(typelib.hTree, &tvis);
EnumEnums(pTypeInfo, pTypeAttr->cVars, hParent);
AddChildrenData(hParent, tld);
AddToTLDataStrW(tld, tld->wszInsertAfter);
break;
case TKIND_RECORD:
AddToTLDataStrW(tld, wszTKIND_RECORD);