Piotr Caban : oleview: Added interface handling to idl display.
Alexandre Julliard
julliard at wine.codeweavers.com
Mon Jul 24 06:54:56 CDT 2006
Module: wine
Branch: refs/heads/master
Commit: 9e740600c3fcd337b035e88597ecdd5c270c8a23
URL: http://source.winehq.org/git/?p=wine.git;a=commit;h=9e740600c3fcd337b035e88597ecdd5c270c8a23
Author: Piotr Caban <piotr.caban at gmail.com>
Date: Fri Jul 21 21:11:27 2006 +0200
oleview: Added interface handling to idl display.
---
programs/oleview/typelib.c | 138 +++++++++++++++++++++++++++++++++++++++++++-
1 files changed, 136 insertions(+), 2 deletions(-)
diff --git a/programs/oleview/typelib.c b/programs/oleview/typelib.c
index c516a6a..7f32cfe 100644
--- a/programs/oleview/typelib.c
+++ b/programs/oleview/typelib.c
@@ -39,8 +39,11 @@ static const WCHAR wszOpenBrackets2[] =
static const WCHAR wszCloseBrackets2[] = { ')','\0' };
static const WCHAR wszOpenBrackets3[] = { '{','\0' };
static const WCHAR wszCloseBrackets3[] = { '}','\0' };
+static const WCHAR wszInvertedComa[] = { '"','\0' };
+static const WCHAR wszColon[] = { ':','\0' };
static const WCHAR wszUUID[] = { 'u','u','i','d','\0' };
+static const WCHAR wszOdl[] = { 'o','d','l','\0' };
static const WCHAR wszVT_BOOL[]
= { 'V','A','R','I','A','N','T','_','B','O','O','L','\0' };
@@ -91,6 +94,7 @@ LPARAM InitializeTLData(void)
memset(pTLData, 0, sizeof(TYPELIB_DATA));
pTLData->idl = HeapAlloc(GetProcessHeap(), 0, sizeof(WCHAR));
+ pTLData->idl[0] = '\0';
return (LPARAM)pTLData;
}
@@ -103,6 +107,8 @@ void AddChildrenData(HTREEITEM hParent,
memset(&tvi, 0, sizeof(&tvi));
hCur = TreeView_GetChild(typelib.hTree, hParent);
+ if(!hCur) return;
+
do
{
tvi.hItem = hCur;
@@ -294,6 +300,122 @@ int EnumImplTypes(ITypeInfo *pTypeInfo,
return 0;
}
+void CreateInterfaceInfo(ITypeInfo *pTypeInfo, int cImplTypes, WCHAR *wszName,
+ WCHAR *wszHelpString, TYPEATTR *pTypeAttr, TYPELIB_DATA *pTLData)
+{
+ ITypeInfo *pRefTypeInfo;
+ HREFTYPE hRefType;
+ BSTR bstrName;
+ WCHAR wszGuid[MAX_LOAD_STRING];
+ BOOL bFirst;
+
+ const WCHAR wszInterface[] = { 'I','n','t','e','r','f','a','c','e',' ','\0' };
+ const WCHAR wszHelpstring[] = { 'h','e','l','p','s','t','r','i','n','g','\0' };
+ const WCHAR wszTYPEFLAG_FAPPOBJECT[] = { 'a','p','p','o','b','j','e','c','t','\0' };
+ const WCHAR wszTYPEFLAG_FCANCREATE[] = { 'c','a','n','c','r','e','a','t','e','\0' };
+ const WCHAR wszTYPEFLAG_FLICENSED[] = { 'l','i','c','e','n','s','e','d','\0' };
+ const WCHAR wszTYPEFLAG_FPREDECLID[] = { 'p','r','e','d','e','c','l','i','d','\0' };
+ const WCHAR wszTYPEFLAG_FHIDDEN[] = { 'h','i','d','d','e','n','\0' };
+ const WCHAR wszTYPEFLAG_FCONTROL[] = { 'c','o','n','t','r','o','l','\0' };
+ const WCHAR wszTYPEFLAG_FDUAL[] = { 'd','u','a','l','\0' };
+ const WCHAR wszTYPEFLAG_FNONEXTENSIBLE[]
+ = { 'n','o','n','e','x','t','e','n','s','i','b','l','e','\0' };
+ const WCHAR wszTYPEFLAG_FOLEAUTOMATION[]
+ = { 'o','l','e','a','u','t','o','m','a','t','i','o','n','\0' };
+ const WCHAR wszTYPEFLAG_FRESTRICTED[]
+ = { 'r','e','s','t','r','i','c','t','e','d','\0' };
+ const WCHAR wszTYPEFLAG_FAGGREGATABLE[]
+ = { 'a','g','g','r','e','g','a','t','a','b','l','e','\0' };
+ const WCHAR wszTYPEFLAG_FREPLACEABLE[]
+ = { 'r','e','p','l','a','c','a','b','l','e','\0' };
+ const WCHAR wszTYPEFLAG_FDISPATCHABLE[]
+ = { 'd','i','s','p','a','t','c','h','a','b','l','e','\0' };
+ const WCHAR wszTYPEFLAG_FREVERSEBIND[]
+ = { 'r','e','v','e','r','s','e','b','i','n','d','\0' };
+ const WCHAR wszTYPEFLAG_FPROXY[] = { 'p','r','o','x','y','\0' };
+
+ AddToTLDataStrW(pTLData, wszOpenBrackets1);
+ AddToTLDataStrW(pTLData, wszNewLine);
+ AddToTLDataStrW(pTLData, wszOdl);
+ AddToTLDataStrW(pTLData, wszComa);
+ AddToTLDataStrW(pTLData, wszNewLine);
+ AddToTLDataStrW(pTLData, wszUUID);
+ AddToTLDataStrW(pTLData, wszOpenBrackets2);
+ StringFromGUID2(&(pTypeAttr->guid), wszGuid, MAX_LOAD_STRING);
+ wszGuid[lstrlenW(wszGuid)-1] = '\0';
+ AddToTLDataStrW(pTLData, &wszGuid[1]);
+ AddToTLDataStrW(pTLData, wszCloseBrackets2);
+ if(wszHelpString)
+ {
+ AddToTLDataStrW(pTLData, wszComa);
+ AddToTLDataStrW(pTLData, wszNewLine);
+ AddToTLDataStrW(pTLData, wszHelpstring);
+ AddToTLDataStrW(pTLData, wszOpenBrackets2);
+ AddToTLDataStrW(pTLData, wszInvertedComa);
+ AddToTLDataStrW(pTLData, wszHelpString);
+ AddToTLDataStrW(pTLData, wszInvertedComa);
+ AddToTLDataStrW(pTLData, wszCloseBrackets2);
+ }
+ if(pTypeAttr->wTypeFlags)
+ {
+ bFirst = TRUE;
+ AddToTLDataStrW(pTLData, wszComa);
+ AddToTLDataStrW(pTLData, wszNewLine);
+#define ENUM_FLAGS(x) if(pTypeAttr->wTypeFlags & x)\
+ {\
+ if(!bFirst)\
+ {\
+ AddToTLDataStrW(pTLData, wszComa);\
+ AddToTLDataStrW(pTLData, wszSpace);\
+ }\
+ bFirst = FALSE;\
+ AddToTLDataStrW(pTLData, wsz##x);\
+ }
+ ENUM_FLAGS(TYPEFLAG_FAPPOBJECT);
+ ENUM_FLAGS(TYPEFLAG_FCANCREATE);
+ ENUM_FLAGS(TYPEFLAG_FLICENSED);
+ ENUM_FLAGS(TYPEFLAG_FPREDECLID);
+ ENUM_FLAGS(TYPEFLAG_FHIDDEN);
+ ENUM_FLAGS(TYPEFLAG_FCONTROL);
+ ENUM_FLAGS(TYPEFLAG_FDUAL);
+ ENUM_FLAGS(TYPEFLAG_FNONEXTENSIBLE);
+ ENUM_FLAGS(TYPEFLAG_FOLEAUTOMATION);
+ ENUM_FLAGS(TYPEFLAG_FRESTRICTED);
+ ENUM_FLAGS(TYPEFLAG_FAGGREGATABLE);
+ ENUM_FLAGS(TYPEFLAG_FREPLACEABLE);
+ ENUM_FLAGS(TYPEFLAG_FDISPATCHABLE);
+ ENUM_FLAGS(TYPEFLAG_FREVERSEBIND);
+ ENUM_FLAGS(TYPEFLAG_FPROXY);
+ }
+ AddToTLDataStrW(pTLData, wszNewLine);
+ AddToTLDataStrW(pTLData, wszCloseBrackets1);
+ AddToTLDataStrW(pTLData, wszNewLine);
+ AddToTLDataStrW(pTLData, wszInterface);
+ AddToTLDataStrW(pTLData, wszName);
+ AddToTLDataStrW(pTLData, wszSpace);
+ if(cImplTypes)
+ {
+ AddToTLDataStrW(pTLData, wszColon);
+ AddToTLDataStrW(pTLData, wszSpace);
+
+ ITypeInfo_GetRefTypeOfImplType(pTypeInfo, 0, &hRefType);
+ ITypeInfo_GetRefTypeInfo(pTypeInfo, hRefType, &pRefTypeInfo);
+ ITypeInfo_GetDocumentation(pRefTypeInfo, MEMBERID_NIL, &bstrName,
+ NULL, NULL, NULL);
+ AddToTLDataStrW(pTLData, bstrName);
+ AddToTLDataStrW(pTLData, wszSpace);
+
+ SysFreeString(bstrName);
+ ITypeInfo_Release(pRefTypeInfo);
+ }
+ AddToTLDataStrW(pTLData, wszOpenBrackets3);
+ AddToTLDataStrW(pTLData, wszNewLine);
+
+ AddToStrW(pTLData->wszInsertAfter, wszCloseBrackets3);
+ AddToStrW(pTLData->wszInsertAfter, wszSemicolon);
+ AddToStrW(pTLData->wszInsertAfter, wszNewLine);
+}
+
int PopulateTree(void)
{
TVINSERTSTRUCT tvis;
@@ -389,6 +511,7 @@ int PopulateTree(void)
AddToTLDataStrW((TYPELIB_DATA*)(U(tvis).item.lParam), wszNewLine);
AddToTLDataStrW((TYPELIB_DATA*)(U(tvis).item.lParam), wszOpenBrackets3);
AddToTLDataStrW((TYPELIB_DATA*)(U(tvis).item.lParam), wszNewLine);
+
AddToStrW(((TYPELIB_DATA*)(U(tvis).item.lParam))->wszInsertAfter, wszCloseBrackets3);
AddToStrW(((TYPELIB_DATA*)(U(tvis).item.lParam))->wszInsertAfter, wszSemicolon);
@@ -402,7 +525,8 @@ int PopulateTree(void)
{
ITypeLib_GetTypeInfo(pTypeLib, i, &pTypeInfo);
- ITypeInfo_GetDocumentation(pTypeInfo, MEMBERID_NIL, &bstrName, NULL, NULL, NULL);
+ ITypeInfo_GetDocumentation(pTypeInfo, MEMBERID_NIL, &bstrName, &bstrData,
+ NULL, NULL);
ITypeInfo_GetTypeAttr(pTypeInfo, &pTypeAttr);
memset(wszText, 0, sizeof(wszText));
@@ -421,6 +545,7 @@ int PopulateTree(void)
AddToTLDataStrW((TYPELIB_DATA*)(U(tvis).item.lParam), wszSpace);
AddToTLDataStrW((TYPELIB_DATA*)(U(tvis).item.lParam), wszOpenBrackets3);
AddToTLDataStrW((TYPELIB_DATA*)(U(tvis).item.lParam), wszNewLine);
+
AddToStrW(((TYPELIB_DATA*)(U(tvis).item.lParam))->wszInsertAfter,
wszCloseBrackets3);
AddToStrW(((TYPELIB_DATA*)(U(tvis).item.lParam))->wszInsertAfter,
@@ -431,6 +556,7 @@ int PopulateTree(void)
wszSemicolon);
AddToStrW(((TYPELIB_DATA*)(U(tvis).item.lParam))->wszInsertAfter,
wszNewLine);
+
AddToStrW(wszText, wszTKIND_RECORD);
AddToStrW(wszText, bstrName);
break;
@@ -439,6 +565,9 @@ int PopulateTree(void)
AddToStrW(wszText, bstrName);
break;
case TKIND_INTERFACE:
+ CreateInterfaceInfo(pTypeInfo, pTypeAttr->cImplTypes, bstrName,
+ bstrData, pTypeAttr, (TYPELIB_DATA*)(U(tvis).item.lParam));
+
AddToStrW(wszText, wszTKIND_INTERFACE);
AddToStrW(wszText, bstrName);
break;
@@ -462,7 +591,11 @@ int PopulateTree(void)
ITypeInfo_GetRefTypeInfo(pTypeInfo, hRefType, &pRefTypeInfo);
ITypeInfo_GetDocumentation(pRefTypeInfo, MEMBERID_NIL, &bstrName,
- NULL, NULL, NULL);
+ &bstrData, NULL, NULL);
+
+ CreateInterfaceInfo(pTypeInfo, pTypeAttr->cImplTypes, bstrName,
+ bstrData, pTypeAttr, (TYPELIB_DATA*)(U(tvis).item.lParam));
+
AddToStrW(wszText, wszTKIND_INTERFACE);
AddToStrW(wszText, bstrName);
ITypeInfo_Release(pRefTypeInfo);
@@ -491,6 +624,7 @@ int PopulateTree(void)
ITypeInfo_ReleaseTypeAttr(pTypeInfo, pTypeAttr);
ITypeInfo_Release(pTypeInfo);
SysFreeString(bstrName);
+ SysFreeString(bstrData);
}
SendMessage(typelib.hTree, TVM_EXPAND, TVE_EXPAND, (LPARAM)tvis.hParent);
More information about the wine-cvs
mailing list