fork for IVI
[profile/ivi/vim.git] / src / GvimExt / gvimext.h
1 /* vi:set ts=8 sts=4 sw=4:
2  *
3  * VIM - Vi IMproved    gvimext by Tianmiao Hu
4  *
5  * Do ":help uganda"  in Vim to read copying and usage conditions.
6  * Do ":help credits" in Vim to see a list of people who contributed.
7  */
8
9 /*
10  * If you have any questions or any suggestions concerning gvimext, please
11  * contact Tianmiao Hu: tianmiao@acm.org.
12  */
13
14 #if !defined(AFX_STDAFX_H__3389658B_AD83_11D3_9C1E_0090278BBD99__INCLUDED_)
15 #define AFX_STDAFX_H__3389658B_AD83_11D3_9C1E_0090278BBD99__INCLUDED_
16
17 #if defined(_MSC_VER) && _MSC_VER > 1000
18 #pragma once
19 #endif
20
21 // Insert your headers here
22 // #define WIN32_LEAN_AND_MEAN          // Exclude rarely-used stuff from Windows headers
23
24 //--------------------------------------------------------------
25 // common user interface routines
26 //
27 //
28 //--------------------------------------------------------------
29
30 #ifndef STRICT
31 # define STRICT
32 #endif
33
34 #define INC_OLE2        // WIN32, get ole2 from windows.h
35
36 /* Visual Studio 2005 has 'deprecated' many of the standard CRT functions */
37 #if defined(_MSC_VER) && _MSC_VER >= 1400
38 # define _CRT_SECURE_NO_DEPRECATE
39 # define _CRT_NONSTDC_NO_DEPRECATE
40 #endif
41
42 #include <windows.h>
43 #include <windowsx.h>
44 #include <shlobj.h>
45
46 /* Accommodate old versions of VC that don't have a modern Platform SDK */
47 #if (defined(_MSC_VER) && _MSC_VER < 1300) || !defined(MAXULONG_PTR)
48 # undef  UINT_PTR
49 # define UINT_PTR UINT
50 #endif
51
52 #define ResultFromShort(i)  ResultFromScode(MAKE_SCODE(SEVERITY_SUCCESS, 0, (USHORT)(i)))
53
54 // Initialize GUIDs (should be done only and at-least once per DLL/EXE)
55 //
56 #pragma data_seg(".text")
57 #define INITGUID
58 #include <initguid.h>
59 #include <shlguid.h>
60
61 //
62 // The class ID of this Shell extension class.
63 //
64 // class id:  {51EEE242-AD87-11d3-9C1E-0090278BBD99}
65 //
66 //
67 // NOTE!!!  If you use this shell extension as a starting point,
68 //          you MUST change the GUID below.  Simply run UUIDGEN.EXE
69 //          to generate a new GUID.
70 //
71
72 // {51EEE242-AD87-11d3-9C1E-0090278BBD99}
73 // static const GUID <<name>> =
74 // { 0x51eee242, 0xad87, 0x11d3, { 0x9c, 0x1e, 0x0, 0x90, 0x27, 0x8b, 0xbd, 0x99 } };
75 //
76 //
77
78 // {51EEE242-AD87-11d3-9C1E-0090278BBD99}
79 // IMPLEMENT_OLECREATE(<<class>>, <<external_name>>,
80 // 0x51eee242, 0xad87, 0x11d3, 0x9c, 0x1e, 0x0, 0x90, 0x27, 0x8b, 0xbd, 0x99);
81 //
82
83 // {51EEE242-AD87-11d3-9C1E-0090278BBD99}  -- this is the registry format
84 DEFINE_GUID(CLSID_ShellExtension, 0x51eee242, 0xad87, 0x11d3, 0x9c, 0x1e, 0x0, 0x90, 0x27, 0x8b, 0xbd, 0x99);
85
86 // this class factory object creates context menu handlers for windows 32 shell
87 class CShellExtClassFactory : public IClassFactory
88 {
89 protected:
90         ULONG   m_cRef;
91
92 public:
93         CShellExtClassFactory();
94         ~CShellExtClassFactory();
95
96         //IUnknown members
97         STDMETHODIMP                    QueryInterface(REFIID, LPVOID FAR *);
98         STDMETHODIMP_(ULONG)    AddRef();
99         STDMETHODIMP_(ULONG)    Release();
100
101         //IClassFactory members
102         STDMETHODIMP            CreateInstance(LPUNKNOWN, REFIID, LPVOID FAR *);
103         STDMETHODIMP            LockServer(BOOL);
104
105 };
106 typedef CShellExtClassFactory *LPCSHELLEXTCLASSFACTORY;
107 #define MAX_HWND 100
108
109 // this is the actual OLE Shell context menu handler
110 class CShellExt : public IContextMenu,
111                          IShellExtInit
112 {
113 protected:
114     ULONG        m_cRef;
115     LPDATAOBJECT m_pDataObj;
116     UINT         m_edit_existing_off;
117
118     // For some reason, this callback must be static
119     static BOOL CALLBACK EnumWindowsProc(HWND hWnd, LPARAM lParam);
120
121     STDMETHODIMP PushToWindow(HWND hParent,
122             LPCSTR pszWorkingDir,
123             LPCSTR pszCmd,
124             LPCSTR pszParam,
125             int iShowCmd,
126             int idHWnd);
127
128     STDMETHODIMP InvokeGvim(HWND hParent,
129             LPCSTR pszWorkingDir,
130             LPCSTR pszCmd,
131             LPCSTR pszParam,
132             int iShowCmd);
133
134     STDMETHODIMP InvokeSingleGvim(HWND hParent,
135             LPCSTR pszWorkingDir,
136             LPCSTR pszCmd,
137             LPCSTR pszParam,
138             int iShowCmd,
139             int useDiff);
140
141 public:
142     int          m_cntOfHWnd;
143     HWND         m_hWnd[MAX_HWND];
144     CShellExt();
145     ~CShellExt();
146
147     //IUnknown members
148     STDMETHODIMP QueryInterface(REFIID, LPVOID FAR *);
149     STDMETHODIMP_(ULONG) AddRef();
150     STDMETHODIMP_(ULONG) Release();
151
152     //IShell members
153     STDMETHODIMP QueryContextMenu(HMENU hMenu,
154             UINT indexMenu,
155             UINT idCmdFirst,
156             UINT idCmdLast,
157             UINT uFlags);
158
159     STDMETHODIMP InvokeCommand(LPCMINVOKECOMMANDINFO lpcmi);
160
161     STDMETHODIMP GetCommandString(UINT_PTR idCmd,
162             UINT uFlags,
163             UINT FAR *reserved,
164             LPSTR pszName,
165             UINT cchMax);
166
167     //IShellExtInit methods
168     STDMETHODIMP Initialize(LPCITEMIDLIST pIDFolder,
169             LPDATAOBJECT pDataObj,
170             HKEY hKeyID);
171 };
172
173 typedef CShellExt *LPCSHELLEXT;
174 #pragma data_seg()
175
176 #endif