123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323 |
- /*
- * Program Manager
- *
- * Copyright 1996 Ulrich Schmid
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2.1 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
- */
- #define WIN32_LEAN_AND_MEAN
- #include <stdio.h>
- #include <string.h>
- #include "windows.h"
- #include "progman.h"
- /***********************************************************************
- *
- * GROUP_GroupWndProc
- */
- static LRESULT CALLBACK GROUP_GroupWndProc(HWND hWnd, UINT msg,
- WPARAM wParam, LPARAM lParam)
- {
- switch (msg)
- {
- case WM_SYSCOMMAND:
- if (wParam == SC_CLOSE) wParam = SC_MINIMIZE;
- break;
- case WM_CHILDACTIVATE:
- case WM_NCLBUTTONDOWN:
- Globals.hActiveGroup = (HLOCAL)GetWindowLongPtrW(hWnd, 0);
- EnableMenuItem(Globals.hFileMenu, PM_MOVE , MF_GRAYED);
- EnableMenuItem(Globals.hFileMenu, PM_COPY , MF_GRAYED);
- break;
- }
- return DefMDIChildProcW(hWnd, msg, wParam, lParam);
- }
- /***********************************************************************
- *
- * GROUP_RegisterGroupWinClass
- */
- ATOM GROUP_RegisterGroupWinClass(void)
- {
- WNDCLASSW class;
- class.style = CS_HREDRAW | CS_VREDRAW;
- class.lpfnWndProc = GROUP_GroupWndProc;
- class.cbClsExtra = 0;
- class.cbWndExtra = sizeof(LONG_PTR);
- class.hInstance = Globals.hInstance;
- class.hIcon = LoadIconW (0, (LPWSTR)IDI_WINLOGO);
- class.hCursor = LoadCursorW (0, (LPWSTR)IDC_ARROW);
- class.hbrBackground = GetStockObject (WHITE_BRUSH);
- class.lpszMenuName = 0;
- class.lpszClassName = STRING_GROUP_WIN_CLASS_NAME;
- return RegisterClassW(&class);
- }
- /***********************************************************************
- *
- * GROUP_NewGroup
- */
- VOID GROUP_NewGroup(void)
- {
- CHAR szName[MAX_PATHNAME_LEN] = "";
- CHAR szFile[MAX_PATHNAME_LEN] = "";
- OFSTRUCT dummy;
- if (!DIALOG_GroupAttributes(szName, szFile, MAX_PATHNAME_LEN)) return;
- if (OpenFile(szFile, &dummy, OF_EXIST) == HFILE_ERROR)
- {
- /* File doesn't exist */
- HLOCAL hGroup =
- GROUP_AddGroup(szName, szFile, SW_SHOWNORMAL,
- DEF_GROUP_WIN_XPOS, DEF_GROUP_WIN_YPOS,
- DEF_GROUP_WIN_WIDTH, DEF_GROUP_WIN_HEIGHT, 0, 0,
- FALSE, FALSE, FALSE);
- if (!hGroup) return;
- GRPFILE_WriteGroupFile(hGroup);
- }
- else /* File exist */
- GRPFILE_ReadGroupFile(szFile);
- /* FIXME Update progman.ini */
- }
- /***********************************************************************
- *
- * GROUP_AddGroup
- */
- HLOCAL GROUP_AddGroup(LPCSTR lpszName, LPCSTR lpszGrpFile, INT nCmdShow,
- INT x, INT y, INT width, INT height,
- INT iconx, INT icony,
- BOOL bFileNameModified, BOOL bOverwriteFileOk,
- /* FIXME shouldn't be necessary */
- BOOL bSuppressShowWindow)
- {
- PROGGROUP *group, *prior;
- MDICREATESTRUCTW cs;
- INT seqnum;
- HLOCAL hPrior, *p;
- HLOCAL hGroup = LocalAlloc(LMEM_FIXED, sizeof(PROGGROUP));
- HLOCAL hName = LocalAlloc(LMEM_FIXED, 1 + strlen(lpszName));
- HLOCAL hGrpFile = LocalAlloc(LMEM_FIXED, 1 + strlen(lpszGrpFile));
- if (!hGroup || !hName || !hGrpFile)
- {
- MAIN_MessageBoxIDS(IDS_OUT_OF_MEMORY, IDS_ERROR, MB_OK);
- if (hGroup) LocalFree(hGroup);
- if (hName) LocalFree(hName);
- if (hGrpFile) LocalFree(hGrpFile);
- return(0);
- }
- memcpy(LocalLock(hName), lpszName, 1 + strlen(lpszName));
- memcpy(LocalLock(hGrpFile), lpszGrpFile, 1 + strlen(lpszGrpFile));
- Globals.hActiveGroup = hGroup;
- seqnum = 1;
- hPrior = 0;
- p = &Globals.hGroups;
- while (*p)
- {
- hPrior = *p;
- prior = LocalLock(hPrior);
- p = &prior->hNext;
- if (prior->seqnum >= seqnum)
- seqnum = prior->seqnum + 1;
- }
- *p = hGroup;
- group = LocalLock(hGroup);
- group->hPrior = hPrior;
- group->hNext = 0;
- group->hName = hName;
- group->hGrpFile = hGrpFile;
- group->bFileNameModified = bFileNameModified;
- group->bOverwriteFileOk = bOverwriteFileOk;
- group->seqnum = seqnum;
- group->nCmdShow = nCmdShow;
- group->x = x;
- group->y = y;
- group->width = width;
- group->height = height;
- group->iconx = iconx;
- group->icony = icony;
- group->hPrograms = 0;
- group->hActiveProgram = 0;
- cs.szClass = STRING_GROUP_WIN_CLASS_NAME;
- cs.szTitle = NULL;
- cs.hOwner = 0;
- cs.x = x;
- cs.y = y;
- cs.cx = width;
- cs.cy = height;
- cs.style = 0;
- cs.lParam = 0;
- group->hWnd = (HWND)SendMessageA(Globals.hMDIWnd, WM_MDICREATE, 0, (LPARAM)&cs);
- SetWindowTextA( group->hWnd, lpszName );
- SetWindowLongPtrW(group->hWnd, 0, (LONG_PTR) hGroup);
- #if 1
- if (!bSuppressShowWindow) /* FIXME shouldn't be necessary */
- #endif
- {
- ShowWindow (group->hWnd, nCmdShow);
- UpdateWindow (group->hWnd);
- }
- return(hGroup);
- }
- /***********************************************************************
- *
- * GROUP_ModifyGroup
- */
- VOID GROUP_ModifyGroup(HLOCAL hGroup)
- {
- PROGGROUP *group = LocalLock(hGroup);
- CHAR szName[MAX_PATHNAME_LEN];
- CHAR szFile[MAX_PATHNAME_LEN];
- lstrcpynA(szName, LocalLock(group->hName), MAX_PATHNAME_LEN);
- lstrcpynA(szFile, LocalLock(group->hGrpFile), MAX_PATHNAME_LEN);
- if (!DIALOG_GroupAttributes(szName, szFile, MAX_PATHNAME_LEN)) return;
- if (strcmp(szFile, LocalLock(group->hGrpFile)))
- group->bOverwriteFileOk = FALSE;
- MAIN_ReplaceString(&group->hName, szName);
- MAIN_ReplaceString(&group->hGrpFile, szFile);
- GRPFILE_WriteGroupFile(hGroup);
- /* FIXME Delete old GrpFile if GrpFile changed */
- /* FIXME Update progman.ini */
- SetWindowTextA(group->hWnd, szName);
- }
- /***********************************************************************
- *
- * GROUP_ShowGroupWindow
- */
- /* FIXME shouldn't be necessary */
- VOID GROUP_ShowGroupWindow(HLOCAL hGroup)
- {
- PROGGROUP *group = LocalLock(hGroup);
- ShowWindow (group->hWnd, group->nCmdShow);
- UpdateWindow (group->hWnd);
- }
- /***********************************************************************
- *
- * GROUP_DeleteGroup
- */
- VOID GROUP_DeleteGroup(HLOCAL hGroup)
- {
- PROGGROUP *group = LocalLock(hGroup);
- Globals.hActiveGroup = 0;
- if (group->hPrior)
- ((PROGGROUP*)LocalLock(group->hPrior))->hNext = group->hNext;
- else Globals.hGroups = group->hNext;
- if (group->hNext)
- ((PROGGROUP*)LocalLock(group->hNext))->hPrior = group->hPrior;
- while (group->hPrograms)
- PROGRAM_DeleteProgram(group->hPrograms, FALSE);
- /* FIXME Update progman.ini */
- SendMessageW(Globals.hMDIWnd, WM_MDIDESTROY, (WPARAM)group->hWnd, 0);
- LocalFree(group->hName);
- LocalFree(group->hGrpFile);
- LocalFree(hGroup);
- }
- /***********************************************************************
- *
- * GROUP_FirstGroup
- */
- HLOCAL GROUP_FirstGroup(void)
- {
- return(Globals.hGroups);
- }
- /***********************************************************************
- *
- * GROUP_NextGroup
- */
- HLOCAL GROUP_NextGroup(HLOCAL hGroup)
- {
- PROGGROUP *group;
- if (!hGroup) return(0);
- group = LocalLock(hGroup);
- return(group->hNext);
- }
- /***********************************************************************
- *
- * GROUP_ActiveGroup
- */
- HLOCAL GROUP_ActiveGroup(void)
- {
- return(Globals.hActiveGroup);
- }
- /***********************************************************************
- *
- * GROUP_GroupWnd
- */
- HWND GROUP_GroupWnd(HLOCAL hGroup)
- {
- PROGGROUP *group;
- if (!hGroup) return(0);
- group = LocalLock(hGroup);
- return(group->hWnd);
- }
- /***********************************************************************
- *
- * GROUP_GroupName
- */
- LPCSTR GROUP_GroupName(HLOCAL hGroup)
- {
- PROGGROUP *group;
- if (!hGroup) return(0);
- group = LocalLock(hGroup);
- return(LocalLock(group->hName));
- }
|