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

Wine Cross Reference
wine/programs/progman/group.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  * Program Manager
  3  *
  4  * Copyright 1996 Ulrich Schmid
  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 #define WIN32_LEAN_AND_MEAN
 22 
 23 #include <stdio.h>
 24 #include <string.h>
 25 #include "windows.h"
 26 #include "progman.h"
 27 
 28 /***********************************************************************
 29  *
 30  *           GROUP_GroupWndProc
 31  */
 32 
 33 static LRESULT CALLBACK GROUP_GroupWndProc(HWND hWnd, UINT msg,
 34                                    WPARAM wParam, LPARAM lParam)
 35 {
 36 #if 0
 37   printf("G %4.4x %4.4x\n", msg, wParam);
 38 #endif
 39   switch (msg)
 40     {
 41     case WM_SYSCOMMAND:
 42       if (wParam == SC_CLOSE) wParam = SC_MINIMIZE;
 43       break;
 44 
 45     case WM_CHILDACTIVATE:
 46     case WM_NCLBUTTONDOWN:
 47       Globals.hActiveGroup = (HLOCAL) GetWindowLongPtr(hWnd, 0);
 48       EnableMenuItem(Globals.hFileMenu, PM_MOVE , MF_GRAYED);
 49       EnableMenuItem(Globals.hFileMenu, PM_COPY , MF_GRAYED);
 50       break;
 51     }
 52   return(DefMDIChildProc(hWnd, msg, wParam, lParam));
 53 }
 54 
 55 /***********************************************************************
 56  *
 57  *           GROUP_RegisterGroupWinClass
 58  */
 59 
 60 ATOM GROUP_RegisterGroupWinClass(void)
 61 {
 62   WNDCLASS class;
 63 
 64   class.style         = CS_HREDRAW | CS_VREDRAW;
 65   class.lpfnWndProc   = GROUP_GroupWndProc;
 66   class.cbClsExtra    = 0;
 67   class.cbWndExtra    = sizeof(LONG_PTR);
 68   class.hInstance     = Globals.hInstance;
 69   class.hIcon         = LoadIcon (0, IDI_WINLOGO);
 70   class.hCursor       = LoadCursor (0, IDC_ARROW);
 71   class.hbrBackground = GetStockObject (WHITE_BRUSH);
 72   class.lpszMenuName  = 0;
 73   class.lpszClassName = STRING_GROUP_WIN_CLASS_NAME;
 74 
 75   return RegisterClass(&class);
 76 }
 77 
 78 /***********************************************************************
 79  *
 80  *           GROUP_NewGroup
 81  */
 82 
 83 VOID GROUP_NewGroup(void)
 84 {
 85   CHAR szName[MAX_PATHNAME_LEN] = "";
 86   CHAR szFile[MAX_PATHNAME_LEN] = "";
 87   OFSTRUCT dummy;
 88 
 89   if (!DIALOG_GroupAttributes(szName, szFile, MAX_PATHNAME_LEN)) return;
 90 
 91   if (OpenFile(szFile, &dummy, OF_EXIST) == HFILE_ERROR)
 92     {
 93       /* File doesn't exist */
 94       HLOCAL hGroup =
 95         GROUP_AddGroup(szName, szFile, SW_SHOWNORMAL,
 96                        DEF_GROUP_WIN_XPOS, DEF_GROUP_WIN_YPOS,
 97                        DEF_GROUP_WIN_WIDTH, DEF_GROUP_WIN_HEIGHT, 0, 0,
 98                        FALSE, FALSE, FALSE);
 99       if (!hGroup) return;
100       GRPFILE_WriteGroupFile(hGroup);
101     }
102   else /* File exist */
103     GRPFILE_ReadGroupFile(szFile);
104 
105   /* FIXME Update progman.ini */
106 }
107 
108 /***********************************************************************
109  *
110  *           GROUP_AddGroup
111  */
112 
113 HLOCAL GROUP_AddGroup(LPCSTR lpszName, LPCSTR lpszGrpFile, INT nCmdShow,
114                       INT x, INT y, INT width, INT height,
115                       INT iconx, INT icony,
116                       BOOL bFileNameModified, BOOL bOverwriteFileOk,
117                       /* FIXME shouldn't be necessary */
118                       BOOL bSuppressShowWindow)
119 {
120   PROGGROUP *group, *prior;
121   MDICREATESTRUCT cs;
122   INT    seqnum;
123   HLOCAL hPrior, *p;
124   HLOCAL hGroup   = LocalAlloc(LMEM_FIXED, sizeof(PROGGROUP));
125   HLOCAL hName    = LocalAlloc(LMEM_FIXED, 1 + lstrlen(lpszName));
126   HLOCAL hGrpFile = LocalAlloc(LMEM_FIXED, 1 + lstrlen(lpszGrpFile));
127   if (!hGroup || !hName || !hGrpFile)
128     {
129       MAIN_MessageBoxIDS(IDS_OUT_OF_MEMORY, IDS_ERROR, MB_OK);
130       if (hGroup)   LocalFree(hGroup);
131       if (hName)    LocalFree(hName);
132       if (hGrpFile) LocalFree(hGrpFile);
133       return(0);
134     }
135   memcpy(LocalLock(hName), lpszName, 1 + lstrlen(lpszName));
136   memcpy(LocalLock(hGrpFile), lpszGrpFile, 1 + lstrlen(lpszGrpFile));
137 
138   Globals.hActiveGroup   = hGroup;
139 
140   seqnum = 1;
141   hPrior = 0;
142   p = &Globals.hGroups;
143   while (*p)
144     {
145       hPrior = *p;
146       prior  = LocalLock(hPrior);
147       p      = &prior->hNext;
148       if (prior->seqnum >= seqnum)
149         seqnum = prior->seqnum + 1;
150     }
151   *p = hGroup;
152 
153   group = LocalLock(hGroup);
154   group->hPrior    = hPrior;
155   group->hNext     = 0;
156   group->hName     = hName;
157   group->hGrpFile  = hGrpFile;
158   group->bFileNameModified = bFileNameModified;
159   group->bOverwriteFileOk  = bOverwriteFileOk;
160   group->seqnum    = seqnum;
161   group->nCmdShow  = nCmdShow;
162   group->x         = x;
163   group->y         = y;
164   group->width     = width;
165   group->height    = height;
166   group->iconx     = iconx;
167   group->icony     = icony;
168   group->hPrograms = 0;
169   group->hActiveProgram = 0;
170 
171   cs.szClass = STRING_GROUP_WIN_CLASS_NAME;
172   cs.szTitle = lpszName;
173   cs.hOwner  = 0;
174   cs.x       = x;
175   cs.y       = y;
176   cs.cx      = width;
177   cs.cy      = height;
178   cs.style   = 0;
179   cs.lParam  = 0;
180 
181   group->hWnd = (HWND)SendMessage(Globals.hMDIWnd, WM_MDICREATE, 0, (LPARAM)&cs);
182 
183   SetWindowLongPtr(group->hWnd, 0, (LONG_PTR) hGroup);
184 
185 #if 1
186   if (!bSuppressShowWindow) /* FIXME shouldn't be necessary */
187 #endif
188     {
189       ShowWindow (group->hWnd, nCmdShow);
190       UpdateWindow (group->hWnd);
191     }
192 
193   return(hGroup);
194 }
195 
196 /***********************************************************************
197  *
198  *           GROUP_ModifyGroup
199  */
200 
201 VOID GROUP_ModifyGroup(HLOCAL hGroup)
202 {
203   PROGGROUP *group = LocalLock(hGroup);
204   CHAR szName[MAX_PATHNAME_LEN];
205   CHAR szFile[MAX_PATHNAME_LEN];
206   lstrcpyn(szName, LocalLock(group->hName), MAX_PATHNAME_LEN);
207   lstrcpyn(szFile, LocalLock(group->hGrpFile), MAX_PATHNAME_LEN);
208 
209   if (!DIALOG_GroupAttributes(szName, szFile, MAX_PATHNAME_LEN)) return;
210 
211   if (strcmp(szFile, LocalLock(group->hGrpFile)))
212     group->bOverwriteFileOk = FALSE;
213 
214   MAIN_ReplaceString(&group->hName,    szName);
215   MAIN_ReplaceString(&group->hGrpFile, szFile);
216 
217   GRPFILE_WriteGroupFile(hGroup);
218 
219   /* FIXME Delete old GrpFile if GrpFile changed */
220 
221   /* FIXME Update progman.ini */
222 
223   SetWindowText(group->hWnd, szName);
224 }
225 
226 /***********************************************************************
227  *
228  *           GROUP_ShowGroupWindow
229  */
230 
231 /* FIXME shouldn't be necessary */
232 VOID GROUP_ShowGroupWindow(HLOCAL hGroup)
233 {
234   PROGGROUP *group = LocalLock(hGroup);
235   ShowWindow (group->hWnd, group->nCmdShow);
236   UpdateWindow (group->hWnd);
237 }
238 
239 /***********************************************************************
240  *
241  *           GROUP_DeleteGroup
242  */
243 
244 VOID GROUP_DeleteGroup(HLOCAL hGroup)
245 {
246   PROGGROUP *group = LocalLock(hGroup);
247 
248   Globals.hActiveGroup = 0;
249 
250   if (group->hPrior)
251     ((PROGGROUP*)LocalLock(group->hPrior))->hNext = group->hNext;
252   else Globals.hGroups = group->hNext;
253 
254   if (group->hNext)
255     ((PROGGROUP*)LocalLock(group->hNext))->hPrior = group->hPrior;
256 
257   while (group->hPrograms)
258     PROGRAM_DeleteProgram(group->hPrograms, FALSE);
259 
260   /* FIXME Update progman.ini */
261 
262   SendMessage(Globals.hMDIWnd, WM_MDIDESTROY, (WPARAM)group->hWnd, 0);
263 
264   LocalFree(group->hName);
265   LocalFree(group->hGrpFile);
266   LocalFree(hGroup);
267 }
268 
269 /***********************************************************************
270  *
271  *           GROUP_FirstGroup
272  */
273 
274 HLOCAL GROUP_FirstGroup(void)
275 {
276   return(Globals.hGroups);
277 }
278 
279 /***********************************************************************
280  *
281  *           GROUP_NextGroup
282  */
283 
284 HLOCAL GROUP_NextGroup(HLOCAL hGroup)
285 {
286   PROGGROUP *group;
287   if (!hGroup) return(0);
288   group = LocalLock(hGroup);
289   return(group->hNext);
290 }
291 
292 /***********************************************************************
293  *
294  *           GROUP_ActiveGroup
295  */
296 
297 HLOCAL GROUP_ActiveGroup(void)
298 {
299   return(Globals.hActiveGroup);
300 }
301 
302 /***********************************************************************
303  *
304  *           GROUP_GroupWnd
305  */
306 
307 HWND GROUP_GroupWnd(HLOCAL hGroup)
308 {
309   PROGGROUP *group;
310   if (!hGroup) return(0);
311   group = LocalLock(hGroup);
312   return(group->hWnd);
313 }
314 
315 /***********************************************************************
316  *
317  *           GROUP_GroupName
318  */
319 
320 LPCSTR GROUP_GroupName(HLOCAL hGroup)
321 {
322   PROGGROUP *group;
323   if (!hGroup) return(0);
324   group = LocalLock(hGroup);
325   return(LocalLock(group->hName));
326 }
327 
328 /* Local Variables:    */
329 /* c-file-style: "GNU" */
330 /* End:                */
331 

~ [ 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.