~ [ source navigation ] ~ [ diff markup ] ~ [ identifier search ] ~ [ freetext search ] ~ [ file search ] ~

Wine Cross Reference
wine/programs/oleview/interface.c

Version: ~ [ wine-1.1.33 ] ~ [ wine-1.1.32 ] ~ [ wine-1.1.31 ] ~ [ wine-1.1.30 ] ~ [ wine-1.1.29 ] ~ [ wine-1.1.28 ] ~ [ wine-1.1.27 ] ~ [ wine-1.1.26 ] ~ [ wine-1.1.25 ] ~ [ wine-1.1.24 ] ~ [ wine-1.1.23 ] ~ [ wine-1.1.22 ] ~ [ wine-1.1.21 ] ~ [ wine-1.1.20 ] ~ [ wine-1.1.19 ] ~ [ wine-1.1.18 ] ~ [ wine-1.1.17 ] ~ [ wine-1.1.16 ] ~ [ wine-1.1.15 ] ~ [ wine-1.1.14 ] ~ [ wine-1.1.13 ] ~ [ wine-1.1.12 ] ~ [ wine-1.1.11 ] ~ [ wine-1.1.10 ] ~ [ wine-1.1.9 ] ~ [ wine-1.1.8 ] ~ [ wine-1.1.7 ] ~ [ wine-1.0.1 ] ~ [ wine-1.1.6 ] ~ [ wine-1.1.5 ] ~ [ wine-1.1.4 ] ~ [ wine-1.1.3 ] ~ [ wine-1.1.2 ] ~ [ wine-1.1.1 ] ~ [ wine-1.1.0 ] ~ [ wine-1.0 ] ~

  1 /*
  2  * OleView (interface.c)
  3  *
  4  * Copyright 2006 Piotr Caban
  5  *
  6  * This library is free software; you can redistribute it and/or
  7  * modify it under the terms of the GNU Lesser General Public
  8  * License as published by the Free Software Foundation; either
  9  * version 2.1 of the License, or (at your option) any later version.
 10  *
 11  * This library is distributed in the hope that it will be useful,
 12  * but WITHOUT ANY WARRANTY; without even the implied warranty of
 13  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
 14  * Lesser General Public License for more details.
 15  *
 16  * You should have received a copy of the GNU Lesser General Public
 17  * License along with this library; if not, write to the Free Software
 18  * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
 19  */
 20 
 21 #include "main.h"
 22 
 23 typedef struct
 24 {
 25     WCHAR *wszLabel;
 26     WCHAR *wszIdentifier;
 27 }DIALOG_INFO;
 28 
 29 BOOL IsInterface(HTREEITEM item)
 30 {
 31     TVITEM tvi;
 32 
 33     memset(&tvi, 0, sizeof(TVITEM));
 34     tvi.hItem = item;
 35 
 36     SendMessage(globals.hTree, TVM_GETITEM, 0, (LPARAM)&tvi);
 37     if(!tvi.lParam) return FALSE;
 38 
 39     if(((ITEM_INFO*)tvi.lParam)->cFlag & INTERFACE) return TRUE;
 40     return FALSE;
 41 }
 42 
 43 static IUnknown *GetInterface(void)
 44 {
 45     HTREEITEM hSelect;
 46     TVITEM tvi;
 47     CLSID clsid;
 48     IUnknown *unk;
 49 
 50     hSelect = TreeView_GetSelection(globals.hTree);
 51 
 52     memset(&tvi, 0, sizeof(TVITEM));
 53     tvi.hItem = hSelect;
 54     SendMessage(globals.hTree, TVM_GETITEM, 0, (LPARAM)&tvi);
 55     CLSIDFromString(((ITEM_INFO *)tvi.lParam)->clsid, &clsid);
 56 
 57     memset(&tvi, 0, sizeof(TVITEM));
 58     tvi.hItem = TreeView_GetParent(globals.hTree, hSelect);
 59     SendMessage(globals.hTree, TVM_GETITEM, 0, (LPARAM)&tvi);
 60 
 61     IUnknown_QueryInterface(((ITEM_INFO *)tvi.lParam)->pU, &clsid, (void *)&unk);
 62 
 63     return unk;
 64 }
 65 
 66 static INT_PTR CALLBACK InterfaceViewerProc(HWND hDlgWnd, UINT uMsg,
 67         WPARAM wParam, LPARAM lParam)
 68 {
 69     DIALOG_INFO *di;
 70     HWND hObject;
 71     IUnknown *unk;
 72     HRESULT hRes;
 73     ULARGE_INTEGER size;
 74     WCHAR wszSize[MAX_LOAD_STRING];
 75     WCHAR wszBuf[MAX_LOAD_STRING];
 76     WCHAR wszFormat[] = { '%','d',' ','%','s','\0' };
 77 
 78     switch(uMsg)
 79     {
 80         case WM_INITDIALOG:
 81             di = (DIALOG_INFO *)lParam;
 82             hObject = GetDlgItem(hDlgWnd, IDC_LABEL);
 83             SetWindowText(hObject, di->wszLabel);
 84             hObject = GetDlgItem(hDlgWnd, IDC_IDENTIFIER);
 85             SetWindowText(hObject, di->wszIdentifier);
 86             return TRUE;
 87         case WM_COMMAND:
 88             switch(LOWORD(wParam)) {
 89             case IDCANCEL:
 90                 EndDialog(hDlgWnd, IDCANCEL);
 91                 return TRUE;
 92             case IDC_ISDIRTY_BUTTON:
 93                 unk = GetInterface();
 94                 hRes = IPersistStream_IsDirty((IPersistStream *)unk);
 95                 IUnknown_Release(unk);
 96                 if(hRes == S_OK)
 97                     LoadString(globals.hMainInst, IDS_FALSE, wszBuf,
 98                             sizeof(wszBuf)/sizeof(wszBuf[0]));
 99                 else LoadString(globals.hMainInst, IDS_TRUE, wszBuf,
100                         sizeof(wszBuf)/sizeof(wszBuf[0]));
101                 hObject = GetDlgItem(hDlgWnd, IDC_ISDIRTY);
102                 SetWindowText(hObject, wszBuf);
103                 return TRUE;
104             case IDC_GETSIZEMAX_BUTTON:
105                 unk = GetInterface();
106                 IPersistStream_GetSizeMax((IPersistStream *)unk, &size);
107                 IUnknown_Release(unk);
108                 LoadString(globals.hMainInst, IDS_BYTES, wszBuf,
109                         sizeof(wszBuf)/sizeof(wszBuf[0]));
110                 wsprintfW(wszSize, wszFormat, U(size).LowPart, wszBuf);
111                 hObject = GetDlgItem(hDlgWnd, IDC_GETSIZEMAX);
112                 SetWindowText(hObject, wszSize);
113                 return TRUE;
114             }
115     }
116     return FALSE;
117 }
118 
119 static void IPersistStreamInterfaceViewer(WCHAR *clsid, WCHAR *wszName)
120 {
121     DIALOG_INFO di;
122     WCHAR wszClassMoniker[] = { 'C','l','a','s','s','M','o','n','i','k','e','r','\0' };
123 
124     if(wszName[0] == '{')
125         di.wszLabel = wszClassMoniker;
126     else di.wszLabel = wszName;
127     di.wszIdentifier = clsid;
128 
129     DialogBoxParam(0, MAKEINTRESOURCE(DLG_IPERSISTSTREAM_IV),
130             globals.hMainWnd, InterfaceViewerProc, (LPARAM)&di);
131 }
132 
133 static void IPersistInterfaceViewer(WCHAR *clsid, WCHAR *wszName)
134 {
135     DIALOG_INFO di;
136     WCHAR wszClassMoniker[] = { 'C','l','a','s','s','M','o','n','i','k','e','r','\0' };
137 
138     if(wszName[0] == '{')
139         di.wszLabel = wszClassMoniker;
140     else di.wszLabel = wszName;
141     di.wszIdentifier = clsid;
142 
143     DialogBoxParam(0, MAKEINTRESOURCE(DLG_IPERSIST_IV),
144             globals.hMainWnd, InterfaceViewerProc, (LPARAM)&di);
145 }
146 
147 static void DefaultInterfaceViewer(WCHAR *clsid, WCHAR *wszName)
148 {
149     DIALOG_INFO di;
150 
151     di.wszLabel = wszName;
152     di.wszIdentifier = clsid;
153 
154     DialogBoxParam(0, MAKEINTRESOURCE(DLG_DEFAULT_IV),
155             globals.hMainWnd, InterfaceViewerProc, (LPARAM)&di);
156 }
157 
158 void InterfaceViewer(HTREEITEM item)
159 {
160     TVITEM tvi;
161     WCHAR *clsid;
162     WCHAR wszName[MAX_LOAD_STRING];
163     WCHAR wszParent[MAX_LOAD_STRING];
164     WCHAR wszIPersistStream[] = { '{','','','','','','1','','9','-',
165         '','','','','-','','','','','-','C','','','','-',
166         '','','','','','','','','','','4','6','}','\0' };
167     WCHAR wszIPersist[] = { '{','','','','','','1','','C','-',
168         '','','','','-','','','','','-','C','','','','-',
169         '','','','','','','','','','','4','6','}','\0' };
170 
171     memset(&tvi, 0, sizeof(TVITEM));
172     tvi.mask = TVIF_TEXT;
173     tvi.hItem = item;
174     tvi.cchTextMax = MAX_LOAD_STRING;
175     tvi.pszText = wszName;
176 
177     SendMessage(globals.hTree, TVM_GETITEM, 0, (LPARAM)&tvi);
178     clsid = ((ITEM_INFO*)tvi.lParam)->clsid;
179 
180     memset(&tvi, 0, sizeof(TVITEM));
181     tvi.mask = TVIF_TEXT;
182     tvi.hItem = TreeView_GetParent(globals.hTree, item);
183     tvi.cchTextMax = MAX_LOAD_STRING;
184     tvi.pszText = wszParent;
185 
186     SendMessage(globals.hTree, TVM_GETITEM, 0, (LPARAM)&tvi);
187 
188     if(!memcmp(clsid, wszIPersistStream, sizeof(wszIPersistStream)))
189         IPersistStreamInterfaceViewer(clsid, wszParent);
190 
191     else if(!memcmp(clsid, wszIPersist, sizeof(wszIPersist)))
192         IPersistInterfaceViewer(clsid, wszParent);
193 
194     else DefaultInterfaceViewer(clsid, wszName);
195 }
196 

~ [ source navigation ] ~ [ diff markup ] ~ [ identifier search ] ~ [ freetext search ] ~ [ file search ] ~

This page was automatically generated by the LXR engine.
Visit the LXR main site for more information.