コード例 #1
0
ファイル: groups.c プロジェクト: hoangduit/reactos
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;
}
コード例 #2
0
ファイル: groupdlg.c プロジェクト: Tatsujinichi/Meridian59
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;
   }
}