oleview: Properly support enumerations.
This commit is contained in:
parent
a5d7c2fb19
commit
633e038b14
|
@ -32,6 +32,7 @@ static const WCHAR wszFailed[] = { '<','f','a','i','l','e','d','>','\0' };
|
||||||
static const WCHAR wszSpace[] = { ' ','\0' };
|
static const WCHAR wszSpace[] = { ' ','\0' };
|
||||||
static const WCHAR wszAsterix[] = { '*','\0' };
|
static const WCHAR wszAsterix[] = { '*','\0' };
|
||||||
static const WCHAR wszComa[] = { ',','\0' };
|
static const WCHAR wszComa[] = { ',','\0' };
|
||||||
|
static const WCHAR wszEquals[] = { '=','\0' };
|
||||||
static const WCHAR wszSemicolon[] = { ';','\0' };
|
static const WCHAR wszSemicolon[] = { ';','\0' };
|
||||||
static const WCHAR wszNewLine[] = { '\n','\0' };
|
static const WCHAR wszNewLine[] = { '\n','\0' };
|
||||||
static const WCHAR wszOpenBrackets1[] = { '[','\0' };
|
static const WCHAR wszOpenBrackets1[] = { '[','\0' };
|
||||||
|
@ -428,6 +429,60 @@ int EnumVars(ITypeInfo *pTypeInfo, int cVars, HTREEITEM hParent)
|
||||||
return 0;
|
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 EnumFuncs(ITypeInfo *pTypeInfo, int cFuncs, HTREEITEM hParent)
|
||||||
{
|
{
|
||||||
int i, j, tabSize;
|
int i, j, tabSize;
|
||||||
|
@ -1032,6 +1087,12 @@ int PopulateTree(void)
|
||||||
AddToStrW(tld->wszInsertAfter, bstrName);
|
AddToStrW(tld->wszInsertAfter, bstrName);
|
||||||
AddToStrW(tld->wszInsertAfter, wszSemicolon);
|
AddToStrW(tld->wszInsertAfter, wszSemicolon);
|
||||||
AddToStrW(tld->wszInsertAfter, wszNewLine);
|
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;
|
break;
|
||||||
case TKIND_RECORD:
|
case TKIND_RECORD:
|
||||||
AddToTLDataStrW(tld, wszTKIND_RECORD);
|
AddToTLDataStrW(tld, wszTKIND_RECORD);
|
||||||
|
|
Loading…
Reference in New Issue