Piotr Caban : oleview: Improved interface handling in idl viewer.

Alexandre Julliard julliard at wine.codeweavers.com
Mon Aug 14 05:16:18 CDT 2006


Module: wine
Branch: master
Commit: 3d4233249340935bd6d28213d4835546d0f1d28f
URL:    http://source.winehq.org/git/?p=wine.git;a=commit;h=3d4233249340935bd6d28213d4835546d0f1d28f

Author: Piotr Caban <piotr.caban at gmail.com>
Date:   Sat Aug 12 19:44:02 2006 +0200

oleview: Improved interface handling in idl viewer.

---

 programs/oleview/typelib.c |   32 ++++++++++++++++++++++++++------
 1 files changed, 26 insertions(+), 6 deletions(-)

diff --git a/programs/oleview/typelib.c b/programs/oleview/typelib.c
index db28545..f9b8d28 100644
--- a/programs/oleview/typelib.c
+++ b/programs/oleview/typelib.c
@@ -302,16 +302,20 @@ int EnumImplTypes(ITypeInfo *pTypeInfo, 
 }
 
 void CreateInterfaceInfo(ITypeInfo *pTypeInfo, int cImplTypes, WCHAR *wszName,
-        WCHAR *wszHelpString, TYPEATTR *pTypeAttr, TYPELIB_DATA *pTLData)
+        WCHAR *wszHelpString, unsigned long ulHelpContext, TYPEATTR *pTypeAttr,
+        TYPELIB_DATA *pTLData)
 {
     ITypeInfo *pRefTypeInfo;
     HREFTYPE hRefType;
     BSTR bstrName;
     WCHAR wszGuid[MAX_LOAD_STRING];
+    WCHAR wszHelpContext[MAX_LOAD_STRING];
     BOOL bFirst;
 
+    const WCHAR wszFormat[] = { '0','x','%','.','8','l','x','\0' };
     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 wszHelpcontext[] = { 'h','e','l','p','c','o','n','t','e','x','t','\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' };
@@ -357,6 +361,16 @@ void CreateInterfaceInfo(ITypeInfo *pTyp
         AddToTLDataStrW(pTLData, wszInvertedComa);
         AddToTLDataStrW(pTLData, wszCloseBrackets2);
     }
+    if(ulHelpContext)
+    {
+        AddToTLDataStrW(pTLData, wszComa);
+        AddToTLDataStrW(pTLData, wszNewLine);
+        AddToTLDataStrW(pTLData, wszHelpcontext);
+        AddToTLDataStrW(pTLData, wszOpenBrackets2);
+        wsprintfW(wszHelpContext, wszFormat, ulHelpContext);
+        AddToTLDataStrW(pTLData, wszHelpContext);
+        AddToTLDataStrW(pTLData, wszCloseBrackets2);
+    }
     if(pTypeAttr->wTypeFlags)
     {
         bFirst = TRUE;
@@ -367,7 +381,7 @@ #define ENUM_FLAGS(x) if(pTypeAttr->wTyp
             if(!bFirst)\
             {\
                 AddToTLDataStrW(pTLData, wszComa);\
-                AddToTLDataStrW(pTLData, wszSpace);\
+                AddToTLDataStrW(pTLData, wszNewLine);\
             }\
             bFirst = FALSE;\
             AddToTLDataStrW(pTLData, wsz##x);\
@@ -426,6 +440,7 @@ int PopulateTree(void)
     HREFTYPE hRefType;
     TYPEATTR *pTypeAttr;
     INT count, i;
+    unsigned long ulHelpContext;
     BSTR bstrName;
     BSTR bstrData;
     WCHAR wszText[MAX_LOAD_STRING];
@@ -527,7 +542,7 @@ int PopulateTree(void)
         ITypeLib_GetTypeInfo(pTypeLib, i, &pTypeInfo);
 
         ITypeInfo_GetDocumentation(pTypeInfo, MEMBERID_NIL, &bstrName, &bstrData,
-                NULL, NULL);
+                &ulHelpContext, NULL);
         ITypeInfo_GetTypeAttr(pTypeInfo, &pTypeAttr);
 
         memset(wszText, 0, sizeof(wszText));
@@ -567,7 +582,8 @@ int PopulateTree(void)
                 break;
             case TKIND_INTERFACE:
                 CreateInterfaceInfo(pTypeInfo, pTypeAttr->cImplTypes, bstrName,
-                        bstrData, pTypeAttr, (TYPELIB_DATA*)(U(tvis).item.lParam));
+                        bstrData, ulHelpContext, pTypeAttr,
+                        (TYPELIB_DATA*)(U(tvis).item.lParam));
 
                 AddToStrW(wszText, wszTKIND_INTERFACE);
                 AddToStrW(wszText, bstrName);
@@ -590,12 +606,16 @@ int PopulateTree(void)
                     memset(wszText, 0, sizeof(wszText));
                     U(tvis).item.lParam = InitializeTLData();
 
+                    SysFreeString(bstrName);
+                    SysFreeString(bstrData);
+
                     ITypeInfo_GetRefTypeInfo(pTypeInfo, hRefType, &pRefTypeInfo);
                     ITypeInfo_GetDocumentation(pRefTypeInfo, MEMBERID_NIL, &bstrName,
-                                &bstrData, NULL, NULL);
+                                &bstrData, &ulHelpContext, NULL);
 
                     CreateInterfaceInfo(pTypeInfo, pTypeAttr->cImplTypes, bstrName,
-                            bstrData, pTypeAttr, (TYPELIB_DATA*)(U(tvis).item.lParam));
+                            bstrData, ulHelpContext, pTypeAttr,
+                            (TYPELIB_DATA*)(U(tvis).item.lParam));
 
                     AddToStrW(wszText, wszTKIND_INTERFACE);
                     AddToStrW(wszText, bstrName);




More information about the wine-cvs mailing list