INT_PTR CALLBACK GroupsPageProc(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam) { PGROUP_DATA pGroupData; UNREFERENCED_PARAMETER(lParam); UNREFERENCED_PARAMETER(wParam); UNREFERENCED_PARAMETER(hwndDlg); pGroupData = (PGROUP_DATA)GetWindowLongPtr(hwndDlg, DWLP_USER); switch (uMsg) { case WM_INITDIALOG: pGroupData = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(GROUP_DATA)); SetWindowLongPtr(hwndDlg, DWLP_USER, (LONG_PTR)pGroupData); pGroupData->hPopupMenu = LoadMenu(hApplet, MAKEINTRESOURCE(IDM_POPUP_GROUP)); OnInitDialog(hwndDlg); SetMenuDefaultItem(GetSubMenu(pGroupData->hPopupMenu, 1), IDM_GROUP_PROPERTIES, FALSE); break; case WM_COMMAND: switch (LOWORD(wParam)) { case IDM_GROUP_NEW: case IDC_GROUPS_ADD: GroupNew(hwndDlg); break; case IDM_GROUP_RENAME: GroupRename(hwndDlg); break; case IDM_GROUP_DELETE: case IDC_GROUPS_REMOVE: GroupDelete(hwndDlg); break; case IDM_GROUP_PROPERTIES: case IDC_GROUPS_PROPERTIES: if (GroupProperties(hwndDlg) == IDOK) UpdateGroupProperties(hwndDlg); break; } break; case WM_NOTIFY: return OnNotify(hwndDlg, pGroupData, (NMHDR *)lParam); case WM_DESTROY: DestroyMenu(pGroupData->hPopupMenu); HeapFree(GetProcessHeap(), 0, pGroupData); break; } return FALSE; }
void GroupCommand(HWND hDlg, int ctrl_id, HWND hwndCtl, UINT codeNotify) { int index, i; char group_name[MAX_GROUPNAME + 1], player_name[MAX_CHARNAME + 1], quoted_name[MAX_CHARNAME + 3]; char say_string[MAXSAY + 1]; UserGroup g; HWND hList, hwndFocus, hCombo; Bool legal_index; switch(ctrl_id) { case IDC_GROUPS: if (codeNotify != CBN_SELCHANGE) break; legal_index = GetCurrentGroupName(hDlg, group_name); EnableWindow(GetDlgItem(hDlg, IDC_DELGROUP), legal_index); EnableWindow(GetDlgItem(hDlg, IDC_ADDMEMBER), legal_index); EnableWindow(GetDlgItem(hDlg, IDC_DELMEMBER), legal_index); EnableWindow(GetDlgItem(hDlg, IDC_ADDNAME), legal_index); EnableWindow(GetDlgItem(hDlg, IDC_ADDNAMETEXT), legal_index); if (!legal_index) break; if (GroupLoad(group_name, &g) != GROUP_MATCH) { debug(("GroupCommand unable to load selected group %s\n", group_name)); break; } hList = GetDlgItem(hDlg, IDC_GROUPMEMBERS); ListBox_ResetContent(hList); for (i=0; i < g.num_users; i++) ListBox_AddString(hList, g.names[i]); SetDlgItemText(hDlg, IDC_GROUPSTATUS, ""); break; case IDC_DELGROUP: hCombo = GetDlgItem(hDlg, IDC_GROUPS); index = ComboBox_GetCurSel(hCombo); if (index == CB_ERR) break; ComboBox_GetText(hCombo, group_name, MAX_GROUPNAME); if (GroupDelete(group_name)) { ComboBox_DeleteString(hCombo, index); if (ComboBox_GetCount(hCombo) == 0) { ComboBox_ResetContent(hCombo); ListBox_ResetContent(GetDlgItem(hDlg, IDC_GROUPMEMBERS)); } else ComboBox_SetCurSel(hCombo, min(index, ComboBox_GetCount(hCombo) - 1)); FORWARD_WM_COMMAND(hDlg, IDC_GROUPS, hCombo, CBN_SELCHANGE, GroupDialogProc); if (num_groups < MAX_NUMGROUPS) EnableWindow(GetDlgItem(hDlg, IDC_NEWGROUP), TRUE); SetDlgItemText(hDlg, IDC_GROUPSTATUS, ""); } break; case IDC_ADDMEMBER: if (!GetCurrentGroupName(hDlg, group_name)) break; hList = GetDlgItem(hDlg, IDC_LOGGEDON); index = ListBox_GetCurSel(hList); if (index == LB_ERR) break; ListBox_GetText(hList, index, player_name); // Check for group too full if (ListBox_GetCount(GetDlgItem(hDlg, IDC_GROUPMEMBERS)) >= MAX_GROUPSIZE) { SetDlgItemText(hDlg, IDC_GROUPSTATUS, GetString(hInst, IDS_GROUPFULLDLG)); break; } // Add quotes around player to take care of spaces QuotePlayerName(player_name, quoted_name); if (GroupAdd(group_name, quoted_name) == 0) { SetDlgItemText(hDlg, IDC_GROUPSTATUS, GetString(hInst, IDS_CANTADDNAMEDLG)); break; } hList = GetDlgItem(hDlg, IDC_GROUPMEMBERS); ListBox_AddString(hList, player_name); SetDlgItemText(hDlg, IDC_GROUPSTATUS, ""); break; case IDC_DELMEMBER: if (!GetCurrentGroupName(hDlg, group_name)) break; hList = GetDlgItem(hDlg, IDC_GROUPMEMBERS); index = ListBox_GetCurSel(hList); if (index == LB_ERR) break; ListBox_GetText(hList, index, player_name); QuotePlayerName(player_name, quoted_name); if (GroupDeleteNames(group_name, quoted_name) != 1) { debug(("Deleting name %s from group %s failed\n", player_name, group_name)); break; } ListBox_DeleteString(hList, index); ListBox_SetCurSel(hList, min(index, ListBox_GetCount(hList) - 1)); SetDlgItemText(hDlg, IDC_GROUPSTATUS, ""); break; case IDOK: // Sent when Enter pressed on edit box hwndFocus = GetFocus(); if (hwndFocus == GetDlgItem(hDlg, IDC_ADDNAME)) { if (Edit_GetText(hwndFocus, player_name, MAX_CHARNAME) <= 0) break; Edit_SetSel(hwndFocus, 0, -1); if (!GetCurrentGroupName(hDlg, group_name)) break; // Check for group too full if (ListBox_GetCount(GetDlgItem(hDlg, IDC_GROUPMEMBERS)) >= MAX_GROUPSIZE) { SetDlgItemText(hDlg, IDC_GROUPSTATUS, GetString(hInst, IDS_GROUPFULLDLG)); break; } QuotePlayerName(player_name, quoted_name); if (GroupAdd(group_name, quoted_name) == 0) { SetDlgItemText(hDlg, IDC_GROUPSTATUS, GetString(hInst, IDS_CANTADDNAMEDLG)); break; } hList = GetDlgItem(hDlg, IDC_GROUPMEMBERS); ListBox_AddString(hList, player_name); SetDlgItemText(hDlg, IDC_GROUPSTATUS, ""); } else if (hwndFocus == GetDlgItem(hDlg, IDC_NEWGROUP)) { if (Edit_GetText(hwndFocus, group_name, MAX_GROUPNAME) <= 0) break; Edit_SetSel(hwndFocus, 0, -1); if (!GroupNew(group_name)) { SetDlgItemText(hDlg, IDC_GROUPSTATUS, GetString(hInst, IDS_GROUPFAILEDDLG)); break; } hCombo = GetDlgItem(hDlg, IDC_GROUPS); index = ComboBox_AddString(hCombo, group_name); ComboBox_SetCurSel(hCombo, index); if (num_groups >= MAX_NUMGROUPS) EnableWindow(GetDlgItem(hDlg, IDC_NEWGROUP), FALSE); FORWARD_WM_COMMAND(hDlg, IDC_GROUPS, hCombo, CBN_SELCHANGE, GroupDialogProc); SetDlgItemText(hDlg, IDC_GROUPSTATUS, ""); } else if (hwndFocus == GetDlgItem(hDlg, IDC_GROUPTELL)) { if (Edit_GetText(hwndFocus, say_string, MAXSAY) <= 0) break; if (!GetCurrentGroupName(hDlg, group_name)) break; TellGroup(group_name, say_string); // Prevent auto-repeat from causing lots of messages to be sent Edit_SetText(hwndFocus, ""); } break; case IDC_GROUP_DONE: case IDCANCEL: EndDialog(hDlg, IDOK); break; } }