4 * Copyright 1996 Ulrich Schmid
11 static BOOL DIALOG_Browse(HWND, LPCSTR, LPSTR, INT);
12 static LRESULT DIALOG_NEW_DlgProc(HWND, UINT, WPARAM, LPARAM);
13 static LRESULT DIALOG_COPY_MOVE_DlgProc(HWND, UINT, WPARAM, LPARAM);
14 static LRESULT DIALOG_GROUP_DlgProc(HWND, UINT, WPARAM, LPARAM);
15 static LRESULT DIALOG_PROGRAM_DlgProc(HWND, UINT, WPARAM, LPARAM);
16 static LRESULT DIALOG_SYMBOL_DlgProc(HWND, UINT, WPARAM, LPARAM);
17 static LRESULT DIALOG_EXECUTE_DlgProc(HWND, UINT, WPARAM, LPARAM);
19 /***********************************************************************
29 INT DIALOG_New(INT nDefault)
31 WNDPROC lpfnDlg = MakeProcInstance(DIALOG_NEW_DlgProc, Globals.hInstance);
34 New.nDefault = nDefault;
36 ret = DialogBox(Globals.hInstance, STRING_NEW_Xx,
37 Globals.hMainWnd, lpfnDlg);
38 FreeProcInstance(lpfnDlg);
42 /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
47 static LRESULT DIALOG_NEW_DlgProc(HWND hDlg, UINT msg, WPARAM wParam, LPARAM lParam)
52 CheckRadioButton(hDlg, PM_NEW_GROUP, PM_NEW_PROGRAM, New.nDefault);
60 CheckRadioButton(hDlg, PM_NEW_GROUP, PM_NEW_PROGRAM, wParam);
64 EndDialog(hDlg, IsDlgButtonChecked(hDlg, PM_NEW_GROUP) ?
65 PM_NEW_GROUP : PM_NEW_PROGRAM);
69 EndDialog(hDlg, IDCANCEL);
76 /***********************************************************************
83 LPCSTR lpszProgramName, lpszFromGroupName;
87 HLOCAL DIALOG_CopyMove(LPCSTR lpszProgramName, LPCSTR lpszFromGroupName,
90 WNDPROC lpfnDlg = MakeProcInstance(DIALOG_COPY_MOVE_DlgProc, Globals.hInstance);
93 CopyMove.lpszProgramName = lpszProgramName;
94 CopyMove.lpszFromGroupName = lpszFromGroupName;
95 CopyMove.hToGroup = 0;
97 ret = DialogBox(Globals.hInstance,
98 bMove ? STRING_MOVE_Xx : STRING_COPY_Xx,
99 Globals.hMainWnd, lpfnDlg);
100 FreeProcInstance(lpfnDlg);
102 return((ret == IDOK) ? CopyMove.hToGroup : 0);
105 /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
107 * DIALOG_COPY_MOVE_DlgProc
110 static LRESULT DIALOG_COPY_MOVE_DlgProc(HWND hDlg, UINT msg, WPARAM wParam, LPARAM lParam)
117 /* List all group names */
118 for (hGroup = GROUP_FirstGroup(); hGroup; hGroup = GROUP_NextGroup(hGroup))
119 SendDlgItemMessage(hDlg, PM_TO_GROUP, CB_ADDSTRING, 0,
120 (LPARAM) GROUP_GroupName(hGroup));
122 SetDlgItemText(hDlg, PM_PROGRAM, (LPSTR)CopyMove.lpszProgramName);
123 SetDlgItemText(hDlg, PM_FROM_GROUP, (LPSTR)CopyMove.lpszFromGroupName);
131 /* Get selected group */
132 INT nCurSel = SendDlgItemMessage(hDlg, PM_TO_GROUP, CB_GETCURSEL, 0, 0);
133 INT nLen = SendDlgItemMessage(hDlg, PM_TO_GROUP, CB_GETLBTEXTLEN, nCurSel, 0);
134 HLOCAL hBuffer = LocalAlloc(LMEM_FIXED, nLen + 1);
135 LPSTR buffer = LocalLock(hBuffer);
137 SendDlgItemMessage(hDlg, PM_TO_GROUP, CB_GETLBTEXT, nCurSel, (LPARAM)buffer);
138 for (hGroup = GROUP_FirstGroup(); hGroup; hGroup = GROUP_NextGroup(hGroup))
139 if (!lstrcmp(buffer, GROUP_GroupName(hGroup))) break;
142 CopyMove.hToGroup = hGroup;
143 EndDialog(hDlg, IDOK);
148 EndDialog(hDlg, IDCANCEL);
155 /***********************************************************************
160 BOOL DIALOG_Delete(LPCSTR lpszFormat_s, LPCSTR lpszName)
163 if (sizeof(msg) <= lstrlen(lpszFormat_s) + lstrlen(lpszName)) return FALSE;
164 wsprintf(msg, (LPSTR)lpszFormat_s, lpszName);
165 return (IDYES == MessageBox(Globals.hMainWnd, msg, STRING_DELETE,
166 MB_YESNO | MB_DEFBUTTON2));
170 /***********************************************************************
172 * DIALOG_GroupAttributes
177 LPSTR lpszTitle, lpszGrpFile;
181 BOOL DIALOG_GroupAttributes(LPSTR lpszTitle, LPSTR lpszGrpFile, INT nSize)
183 WNDPROC lpfnDlg = MakeProcInstance(DIALOG_GROUP_DlgProc, Globals.hInstance);
186 GroupAttributes.nSize = nSize;
187 GroupAttributes.lpszTitle = lpszTitle;
188 GroupAttributes.lpszGrpFile = lpszGrpFile;
190 ret = DialogBox(Globals.hInstance, STRING_GROUP_Xx,
191 Globals.hMainWnd, lpfnDlg);
192 FreeProcInstance(lpfnDlg);
196 /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
198 * DIALOG_GROUP_DlgProc
201 static LRESULT DIALOG_GROUP_DlgProc(HWND hDlg, UINT msg, WPARAM wParam, LPARAM lParam)
206 SetDlgItemText(hDlg, PM_DESCRIPTION, GroupAttributes.lpszTitle);
207 SetDlgItemText(hDlg, PM_FILE, GroupAttributes.lpszGrpFile);
214 GetDlgItemText(hDlg, PM_DESCRIPTION, GroupAttributes.lpszTitle,
215 GroupAttributes.nSize);
216 GetDlgItemText(hDlg, PM_FILE, GroupAttributes.lpszGrpFile,
217 GroupAttributes.nSize);
218 EndDialog(hDlg, IDOK);
222 EndDialog(hDlg, IDCANCEL);
229 /***********************************************************************
231 * DIALOG_ProgramAttributes
236 LPSTR lpszTitle, lpszCmdLine, lpszWorkDir, lpszIconFile, lpszTmpIconFile;
241 HICON *lphIcon, hTmpIcon;
242 INT *lpnIconIndex, nTmpIconIndex;
245 BOOL DIALOG_ProgramAttributes(LPSTR lpszTitle, LPSTR lpszCmdLine,
246 LPSTR lpszWorkDir, LPSTR lpszIconFile,
247 HICON *lphIcon, INT *lpnIconIndex,
248 INT *lpnHotKey, INT *lpnCmdShow, INT nSize)
250 CHAR szTmpIconFile[MAX_PATHNAME_LEN];
251 WNDPROC lpfnDlg = MakeProcInstance(DIALOG_PROGRAM_DlgProc, Globals.hInstance);
254 ProgramAttributes.nSize = nSize;
255 ProgramAttributes.lpszTitle = lpszTitle;
256 ProgramAttributes.lpszCmdLine = lpszCmdLine;
257 ProgramAttributes.lpszWorkDir = lpszWorkDir;
258 ProgramAttributes.lpszIconFile = lpszIconFile;
259 ProgramAttributes.lpnCmdShow = lpnCmdShow;
260 ProgramAttributes.lpnHotKey = lpnHotKey;
261 ProgramAttributes.lphIcon = lphIcon;
262 ProgramAttributes.lpnIconIndex = lpnIconIndex;
265 ProgramAttributes.hTmpIcon = 0;
267 ProgramAttributes.hTmpIcon = *lphIcon;
269 ProgramAttributes.nTmpIconIndex = *lpnIconIndex;
270 ProgramAttributes.lpszTmpIconFile = szTmpIconFile;
271 lstrcpyn(ProgramAttributes.lpszTmpIconFile, lpszIconFile, MAX_PATHNAME_LEN);
273 ret = DialogBox(Globals.hInstance, STRING_PROGRAM_Xx,
274 Globals.hMainWnd, lpfnDlg);
275 FreeProcInstance(lpfnDlg);
280 /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
282 * DIALOG_PROGRAM_DlgProc
285 static LRESULT DIALOG_PROGRAM_DlgProc(HWND hDlg, UINT msg, WPARAM wParam, LPARAM lParam)
290 SetDlgItemText(hDlg, PM_DESCRIPTION, ProgramAttributes.lpszTitle);
291 SetDlgItemText(hDlg, PM_COMMAND_LINE, ProgramAttributes.lpszCmdLine);
292 SetDlgItemText(hDlg, PM_DIRECTORY, ProgramAttributes.lpszWorkDir);
293 if (!*ProgramAttributes.lpnHotKey)
294 SetDlgItemText(hDlg, PM_HOT_KEY, (LPSTR)STRING_NO_HOT_KEY);
296 CheckDlgButton(hDlg, PM_SYMBOL,
297 (*ProgramAttributes.lpnCmdShow == SW_SHOWMINIMIZED));
298 SendDlgItemMessage(hDlg, PM_ICON, STM_SETICON,
299 (WPARAM) ProgramAttributes.hTmpIcon, 0);
306 CheckDlgButton(hDlg, PM_SYMBOL, !IsDlgButtonChecked(hDlg, PM_SYMBOL));
311 CHAR filename[MAX_PATHNAME_LEN];
312 if (DIALOG_Browse(hDlg, STRING_BROWSE_EXE_FILTER,
313 filename, sizeof(filename)))
314 SetDlgItemText(hDlg, PM_COMMAND_LINE, filename);
318 case PM_OTHER_SYMBOL:
320 DIALOG_Symbol(&ProgramAttributes.hTmpIcon,
321 ProgramAttributes.lpszTmpIconFile,
322 &ProgramAttributes.nTmpIconIndex,
325 SendDlgItemMessage(hDlg, PM_ICON, STM_SETICON,
326 (WPARAM) ProgramAttributes.hTmpIcon, 0);
331 GetDlgItemText(hDlg, PM_DESCRIPTION,
332 ProgramAttributes.lpszTitle,
333 ProgramAttributes.nSize);
334 GetDlgItemText(hDlg, PM_COMMAND_LINE,
335 ProgramAttributes.lpszCmdLine,
336 ProgramAttributes.nSize);
337 GetDlgItemText(hDlg, PM_DIRECTORY,
338 ProgramAttributes.lpszWorkDir,
339 ProgramAttributes.nSize);
341 if (ProgramAttributes.hTmpIcon)
344 if (*ProgramAttributes.lphIcon)
345 DestroyIcon(*ProgramAttributes.lphIcon);
347 *ProgramAttributes.lphIcon = ProgramAttributes.hTmpIcon;
348 *ProgramAttributes.lpnIconIndex = ProgramAttributes.nTmpIconIndex;
349 lstrcpyn(ProgramAttributes.lpszIconFile,
350 ProgramAttributes.lpszTmpIconFile,
351 ProgramAttributes.nSize);
354 *ProgramAttributes.lpnCmdShow =
355 IsDlgButtonChecked(hDlg, PM_SYMBOL) ?
356 SW_SHOWMINIMIZED : SW_SHOWNORMAL;
357 EndDialog(hDlg, IDOK);
361 EndDialog(hDlg, IDCANCEL);
369 /***********************************************************************
382 VOID DIALOG_Symbol(HICON *lphIcon, LPSTR lpszIconFile,
383 INT *lpnIconIndex, INT nSize)
385 WNDPROC lpfnDlg = MakeProcInstance(DIALOG_SYMBOL_DlgProc, Globals.hInstance);
387 Symbol.nSize = nSize;
388 Symbol.lpszIconFile = lpszIconFile;
389 Symbol.lphIcon = lphIcon;
390 Symbol.lpnIconIndex = lpnIconIndex;
392 DialogBox(Globals.hInstance, STRING_SYMBOL_Xx,
393 Globals.hMainWnd, lpfnDlg);
394 FreeProcInstance(lpfnDlg);
397 /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
399 * DIALOG_SYMBOL_DlgProc
402 static LRESULT DIALOG_SYMBOL_DlgProc(HWND hDlg, UINT msg, WPARAM wParam, LPARAM lParam)
407 SetDlgItemText(hDlg, PM_ICON_FILE, Symbol.lpszIconFile);
408 SendDlgItemMessage(hDlg, PM_SYMBOL_LIST, CB_SETITEMHEIGHT, 0, (LPARAM) 32);
409 SendDlgItemMessage(hDlg, PM_SYMBOL_LIST, CB_ADDSTRING, 0, (LPARAM)*Symbol.lphIcon);
410 SendDlgItemMessage(hDlg, PM_SYMBOL_LIST, CB_ADDSTRING, 0, (LPARAM)Globals.hDefaultIcon);
411 SendDlgItemMessage(hDlg, PM_SYMBOL_LIST, CB_SETCURSEL, 0, 0);
416 PMEASUREITEMSTRUCT measure = (PMEASUREITEMSTRUCT) lParam;
417 measure->itemWidth = 32;
418 measure->itemHeight = 32;
424 PDRAWITEMSTRUCT dis = (PDRAWITEMSTRUCT) lParam;
425 DrawIcon(dis->hDC, dis->rcItem.left, dis->rcItem.top, (HICON)dis->itemData);
434 CHAR filename[MAX_PATHNAME_LEN];
435 if (DIALOG_Browse(hDlg, STRING_BROWSE_ICO_FILTER,
436 filename, sizeof(filename)))
437 SetDlgItemText(hDlg, PM_ICON_FILE, filename);
442 MAIN_NotImplementedError();
447 INT nCurSel = SendDlgItemMessage(hDlg, PM_SYMBOL_LIST, CB_GETCURSEL, 0, 0);
449 GetDlgItemText(hDlg, PM_ICON_FILE, Symbol.lpszIconFile, Symbol.nSize);
451 *Symbol.lphIcon = (HICON)SendDlgItemMessage(hDlg, PM_SYMBOL_LIST,
453 (WPARAM) nCurSel, 0);
455 *Symbol.lphIcon = CopyIcon(*Symbol.lphIcon);
458 EndDialog(hDlg, IDOK);
463 EndDialog(hDlg, IDCANCEL);
470 /***********************************************************************
475 VOID DIALOG_Execute()
477 WNDPROC lpfnDlg = MakeProcInstance(DIALOG_EXECUTE_DlgProc, Globals.hInstance);
478 DialogBox(Globals.hInstance, STRING_EXECUTE_Xx,
479 Globals.hMainWnd, lpfnDlg);
480 FreeProcInstance(lpfnDlg);
483 /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
485 * DIALOG_EXECUTE_DlgProc
488 static LRESULT DIALOG_EXECUTE_DlgProc(HWND hDlg, UINT msg,
489 WPARAM wParam, LPARAM lParam)
497 CheckDlgButton(hDlg, PM_SYMBOL, !IsDlgButtonChecked(hDlg, PM_SYMBOL));
502 CHAR filename[MAX_PATHNAME_LEN];
503 if (DIALOG_Browse(hDlg, STRING_BROWSE_EXE_FILTER,
504 filename, sizeof(filename)))
505 SetDlgItemText(hDlg, PM_COMMAND, filename);
510 MAIN_NotImplementedError();
515 CHAR cmdline[MAX_PATHNAME_LEN];
516 GetDlgItemText(hDlg, PM_COMMAND, cmdline, sizeof(cmdline));
518 WinExec(cmdline, IsDlgButtonChecked(hDlg, PM_SYMBOL) ?
519 SW_SHOWMINIMIZED : SW_SHOWNORMAL);
520 if (Globals.bMinOnRun) CloseWindow(Globals.hMainWnd);
522 EndDialog(hDlg, IDOK);
527 EndDialog(hDlg, IDCANCEL);
534 /***********************************************************************
539 /* FIXME is this correct ? */
540 static BOOL DIALOG_Browse(HWND hDlg, LPCSTR lpcstrFilter,
541 LPSTR lpstrFile, INT nMaxFile)
543 OPENFILENAME openfilename;
544 openfilename.lStructSize = 0;
545 openfilename.hwndOwner = hDlg;
546 openfilename.hInstance = Globals.hInstance;
547 openfilename.lpstrFilter = (LPSTR)lpcstrFilter;
548 openfilename.lpstrCustomFilter = 0;
549 openfilename.nMaxCustFilter = 0;
550 openfilename.nFilterIndex = 0;
551 openfilename.lpstrFile = lpstrFile;
552 openfilename.nMaxFile = sizeof(lpstrFile);
553 openfilename.lpstrFileTitle = 0;
554 openfilename.nMaxFileTitle = 0;
555 openfilename.lpstrInitialDir = 0;
556 openfilename.lpstrTitle = 0;
557 openfilename.Flags = 0;
558 openfilename.nFileOffset = 0;
559 openfilename.nFileExtension = 0;
560 openfilename.lpstrDefExt = 0;
561 openfilename.lCustData = 0;
562 openfilename.lpfnHook = 0;
563 openfilename.lpTemplateName = 0;
564 return GetOpenFileName(&openfilename);
567 /* Local Variables: */
568 /* c-file-style: "GNU" */