[PROGMAN] Properly import from Wine Staging 1.9.4. This fixes PCH usage, marks ReactO...
[reactos.git] / reactos / base / shell / progman / progman.h
1 /*
2 * Program Manager
3 *
4 * Copyright 1996 Ulrich Schmid
5 * Copyright 2002 Sylvain Petreolle
6 *
7 * This library is free software; you can redistribute it and/or
8 * modify it under the terms of the GNU Lesser General Public
9 * License as published by the Free Software Foundation; either
10 * version 2.1 of the License, or (at your option) any later version.
11 *
12 * This library is distributed in the hope that it will be useful,
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
15 * Lesser General Public License for more details.
16 *
17 * You should have received a copy of the GNU Lesser General Public
18 * License along with this library; if not, write to the Free Software
19 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
20 */
21
22 #ifndef PROGMAN_H
23 #define PROGMAN_H
24
25 #include <stdio.h>
26
27 #define WIN32_NO_STATUS
28 #include <windef.h>
29 #include <winbase.h>
30 #include <wingdi.h>
31 #include <winuser.h>
32
33 #define MAX_STRING_LEN 255
34 #define MAX_PATHNAME_LEN 1024
35 #define MAX_LANGUAGE_NUMBER (PM_LAST_LANGUAGE - PM_FIRST_LANGUAGE)
36
37 #include "resource.h"
38
39 /* Fallback icon */
40 #define DEFAULTICON OIC_WINLOGO
41
42 /* Icon index in MS Windows' progman.exe */
43 #define PROGMAN_ICON_INDEX 0
44 #define GROUP_ICON_INDEX 6
45 #define DEFAULT_ICON_INDEX 7
46
47 #define DEF_GROUP_WIN_XPOS 100
48 #define DEF_GROUP_WIN_YPOS 100
49 #define DEF_GROUP_WIN_WIDTH 300
50 #define DEF_GROUP_WIN_HEIGHT 200
51
52 typedef struct
53 {
54 HLOCAL hGroup;
55 HLOCAL hPrior;
56 HLOCAL hNext;
57 HWND hWnd;
58 /**/ /* Numbers are byte indexes in *.grp */
59
60 /**/ /* Program entry */
61 INT x, y; /* 0 - 3 */
62 INT nIconIndex; /* 4 - 5 */
63 HICON hIcon;
64 /* icon flags ??? */ /* 6 - 7 */
65 /* iconANDsize */ /* 8 - 9 */
66 /* iconXORsize */ /* 10 - 11 */
67 /* pointer to IconInfo */ /* 12 - 13 */
68 /* pointer to iconXORbits */ /* 14 - 15 */ /* sometimes iconANDbits ?! */
69 /* pointer to iconANDbits */ /* 16 - 17 */ /* sometimes iconXORbits ?! */
70 HLOCAL hName; /* 18 - 19 */
71 HLOCAL hCmdLine; /* 20 - 21 */
72 HLOCAL hIconFile; /* 22 - 23 */
73 HLOCAL hWorkDir; /* Extension 0x8101 */
74 INT nHotKey; /* Extension 0x8102 */
75 /* Modifier: bit 8... */
76 INT nCmdShow; /* Extension 0x8103 */
77
78 /**/ /* IconInfo */
79 /* HotSpot x ??? */ /* 0 - 1 */
80 /* HotSpot y ??? */ /* 2 - 3 */
81 /* Width */ /* 4 - 5 */
82 /* Height */ /* 6 - 7 */
83 /* WidthBytes ??? */ /* 8 - 9 */
84 /* Planes */ /* 10 - 10 */
85 /* BitsPerPixel */ /* 11 - 11 */
86 } PROGRAM;
87
88 typedef struct
89 {
90 HLOCAL hPrior;
91 HLOCAL hNext;
92 HWND hWnd;
93 HLOCAL hGrpFile;
94 HLOCAL hActiveProgram;
95 BOOL bFileNameModified;
96 BOOL bOverwriteFileOk;
97 INT seqnum;
98
99 /**/ /* Absolute */
100 /* magic `PMCC' */ /* 0 - 3 */
101 /* checksum */ /* 4 - 5 */
102 /* Extension ptr */ /* 6 - 7 */
103 INT nCmdShow; /* 8 - 9 */
104 INT x, y; /* 10 - 13 */
105 INT width, height; /* 14 - 17 */
106 INT iconx, icony; /* 18 - 21 */
107 HLOCAL hName; /* 22 - 23 */
108 /* unknown */ /* 24 - 31 */
109 /* number of programs */ /* 32 - 33 */
110 HLOCAL hPrograms; /* 34 ... */
111
112 /**/ /* Extensions */
113 /* Extension type */ /* 0 - 1 */
114 /* Program number */ /* 2 - 3 */
115 /* Size of entry */ /* 4 - 5 */
116 /* Data */ /* 6 ... */
117
118 /* magic `PMCC' */ /* Extension 0x8000 */
119 /* End of Extensions */ /* Extension 0xffff */
120 } PROGGROUP;
121
122 typedef struct
123 {
124 HANDLE hInstance;
125 HANDLE hAccel;
126 HWND hMainWnd;
127 HWND hMDIWnd;
128 HICON hMainIcon;
129 HICON hGroupIcon;
130 HICON hDefaultIcon;
131 HMENU hMainMenu;
132 HMENU hFileMenu;
133 HMENU hOptionMenu;
134 HMENU hWindowsMenu;
135 HMENU hLanguageMenu;
136 LPCSTR lpszIniFile;
137 #ifndef __REACTOS__
138 LPCSTR lpszIcoFile;
139 #endif
140 BOOL bAutoArrange;
141 BOOL bSaveSettings;
142 BOOL bMinOnRun;
143 HLOCAL hGroups;
144 HLOCAL hActiveGroup;
145 } GLOBALS;
146
147 extern GLOBALS Globals;
148
149 INT MAIN_MessageBoxIDS(UINT ids_text, UINT ids_title, WORD type);
150 INT MAIN_MessageBoxIDS_s(UINT ids_text_s, LPCSTR str, UINT ids_title, WORD type);
151 VOID MAIN_ReplaceString(HLOCAL *handle, LPSTR replacestring);
152
153 HLOCAL GRPFILE_ReadGroupFile(const char* path);
154 BOOL GRPFILE_WriteGroupFile(HLOCAL hGroup);
155
156 ATOM GROUP_RegisterGroupWinClass(void);
157 HLOCAL GROUP_AddGroup(LPCSTR lpszName, LPCSTR lpszGrpFile, INT nCmdShow,
158 INT x, INT y, INT width, INT height,
159 INT iconx, INT icony,
160 BOOL bFileNameModified, BOOL bOverwriteFileOk,
161 /* FIXME shouldn't be necessary */
162 BOOL bSuppressShowWindow);
163 VOID GROUP_NewGroup(void);
164 VOID GROUP_ModifyGroup(HLOCAL hGroup);
165 VOID GROUP_DeleteGroup(HLOCAL hGroup);
166 /* FIXME shouldn't be necessary */
167 VOID GROUP_ShowGroupWindow(HLOCAL hGroup);
168 HLOCAL GROUP_FirstGroup(void);
169 HLOCAL GROUP_NextGroup(HLOCAL hGroup);
170 HLOCAL GROUP_ActiveGroup(void);
171 HWND GROUP_GroupWnd(HLOCAL hGroup);
172 LPCSTR GROUP_GroupName(HLOCAL hGroup);
173
174 ATOM PROGRAM_RegisterProgramWinClass(void);
175 HLOCAL PROGRAM_AddProgram(HLOCAL hGroup, HICON hIcon, LPCSTR lpszName,
176 INT x, INT y, LPCSTR lpszCmdLine,
177 LPCSTR lpszIconFile, INT nIconIndex,
178 LPCSTR lpszWorkDir, INT nHotKey, INT nCmdShow);
179 VOID PROGRAM_NewProgram(HLOCAL hGroup);
180 VOID PROGRAM_ModifyProgram(HLOCAL hProgram);
181 VOID PROGRAM_CopyMoveProgram(HLOCAL hProgram, BOOL bMove);
182 VOID PROGRAM_DeleteProgram(HLOCAL hProgram, BOOL BUpdateGrpFile);
183 HLOCAL PROGRAM_FirstProgram(HLOCAL hGroup);
184 HLOCAL PROGRAM_NextProgram(HLOCAL hProgram);
185 HLOCAL PROGRAM_ActiveProgram(HLOCAL hGroup);
186 LPCSTR PROGRAM_ProgramName(HLOCAL hProgram);
187 VOID PROGRAM_ExecuteProgram(HLOCAL hLocal);
188
189 INT DIALOG_New(INT nDefault);
190 HLOCAL DIALOG_CopyMove(LPCSTR lpszProgramName, LPCSTR lpszGroupName, BOOL bMove);
191 BOOL DIALOG_Delete(UINT ids_format_s, LPCSTR lpszName);
192 BOOL DIALOG_GroupAttributes(LPSTR lpszTitle, LPSTR lpszPath, INT nSize);
193 BOOL DIALOG_ProgramAttributes(LPSTR lpszTitle, LPSTR lpszCmdLine,
194 LPSTR lpszWorkDir, LPSTR lpszIconFile,
195 HICON *lphIcon, INT *nIconIndex,
196 INT *lpnHotKey, INT *lpnCmdShow, INT nSize);
197 VOID DIALOG_Execute(void);
198
199 VOID STRING_LoadMenus(VOID);
200
201 /* Class names */
202 extern WCHAR STRING_MAIN_WIN_CLASS_NAME[];
203 extern WCHAR STRING_MDI_WIN_CLASS_NAME[];
204 extern WCHAR STRING_GROUP_WIN_CLASS_NAME[];
205 extern WCHAR STRING_PROGRAM_WIN_CLASS_NAME[];
206
207 #endif /* PROGMAN_H */
208
209 /* Local Variables: */
210 /* c-file-style: "GNU" */
211 /* End: */