static BOOL CALLBACK DlgProcSetStatusMessage(HWND hwndDlg, UINT msg, WPARAM wParam, LPARAM lParam) { switch ( msg ) { case WM_INITDIALOG: { TranslateDialogDefault(hwndDlg); SendMessage(GetDlgItem(hwndDlg, IDC_STATUSMESSAGE), EM_LIMITTEXT, MS_MYDETAILS_GETMYSTATUSMESSAGE_BUFFER_SIZE - 1, 0); WNDPROC old_proc = (WNDPROC) SetWindowLong(GetDlgItem(hwndDlg, IDC_STATUSMESSAGE), GWL_WNDPROC, (LONG) StatusMsgEditSubclassProc); SetWindowLong(GetDlgItem(hwndDlg, IDC_STATUSMESSAGE), GWL_USERDATA, (long) old_proc); return TRUE; } case WMU_SETDATA: { SetStatusMessageData *data = (SetStatusMessageData *) malloc(sizeof(SetStatusMessageData)); data->status = (int)wParam; data->proto_num = (int)lParam; SetWindowLong(hwndDlg, GWL_USERDATA, (LONG) data); if (data->proto_num >= 0) { Protocol proto = GetProtocolByIndex(data->proto_num); HICON hIcon = (HICON) proto.Call(PS_LOADICON, PLI_PROTOCOL); if (hIcon != NULL) { SendMessage(hwndDlg, WM_SETICON, ICON_BIG, (LPARAM)hIcon); DestroyIcon(hIcon); } char title[256]; mir_snprintf(title, sizeof(title), Translate("Set My Status Message for %s"), proto.GetDescription()); SendMessage(hwndDlg, WM_SETTEXT, 0, (LPARAM)title); SetDlgItemText(hwndDlg, IDC_STATUSMESSAGE, proto.GetStatusMsg()); } else if (data->status != 0) { SendMessage(hwndDlg, WM_SETICON, ICON_BIG, (LPARAM)LoadSkinnedIcon(Status2SkinIcon(data->status))); char title[256]; mir_snprintf(title, sizeof(title), Translate("Set My Status Message for %s"), CallService(MS_CLIST_GETSTATUSMODEDESCRIPTION, data->status, 0)); SendMessage(hwndDlg, WM_SETTEXT, 0, (LPARAM)title); SetDlgItemText(hwndDlg, IDC_STATUSMESSAGE, protocols->GetDefaultStatusMsg(data->status)); } else { SendMessage(hwndDlg, WM_SETICON, ICON_BIG, (LPARAM)LoadSkinnedIcon(SKINICON_OTHER_MIRANDA)); SetDlgItemText(hwndDlg, IDC_STATUSMESSAGE, protocols->GetDefaultStatusMsg()); } return TRUE; } case WM_COMMAND: switch(wParam) { case IDOK: { char tmp[MS_MYDETAILS_GETMYSTATUSMESSAGE_BUFFER_SIZE]; GetDlgItemText(hwndDlg, IDC_STATUSMESSAGE, tmp, sizeof(tmp)); SetStatusMessageData *data = (SetStatusMessageData *) GetWindowLong(hwndDlg, GWL_USERDATA); if (data->proto_num >= 0) GetProtocolByIndex(data->proto_num).SetStatusMsg(tmp); else if (data->status == 0) protocols->SetStatusMsgs(tmp); else protocols->SetStatusMsgs(data->status, tmp); // To force a refresh UpdateFrameData(); DestroyWindow(hwndDlg); break; } case IDCANCEL: { DestroyWindow(hwndDlg); break; } } break; case WM_CLOSE: DestroyWindow(hwndDlg); break; case WM_DESTROY: SetWindowLong(GetDlgItem(hwndDlg, IDC_STATUSMESSAGE), GWL_WNDPROC, GetWindowLong(GetDlgItem(hwndDlg, IDC_STATUSMESSAGE), GWL_USERDATA)); free((SetStatusMessageData *) GetWindowLong(hwndDlg, GWL_USERDATA)); InterlockedExchange(&status_msg_dialog_open, 0); break; } return FALSE; }
static BOOL CALLBACK DlgProcSetNickname(HWND hwndDlg, UINT msg, WPARAM wParam, LPARAM lParam) { switch ( msg ) { case WM_INITDIALOG: { TranslateDialogDefault(hwndDlg); SendMessage(GetDlgItem(hwndDlg, IDC_NICKNAME), EM_LIMITTEXT, MS_MYDETAILS_GETMYNICKNAME_BUFFER_SIZE - 1, 0); return TRUE; } case WMU_SETDATA: { int proto_num = (int)wParam; SetWindowLong(hwndDlg, GWL_USERDATA, proto_num); if (proto_num == -1) { SendMessage(hwndDlg, WM_SETICON, ICON_BIG, (LPARAM)LoadSkinnedIcon(SKINICON_OTHER_MIRANDA)); // All protos have the same nick? std::vector<Protocol> protos; GetProtocols(&protos); int protosSize = protos.size(); if (protosSize > 0) { std::string nick = protos[0].GetNick(); bool foundDefNick = true; for(int i = 1; i < protosSize; i++) { if (stricmp(protos[i].GetNick(), nick.c_str()) != 0) { foundDefNick = false; break; } } if (foundDefNick) { if (stricmp(protocols->default_nick, nick.c_str()) != 0) lstrcpy(protocols->default_nick, nick.c_str()); } } SetDlgItemText(hwndDlg, IDC_NICKNAME, protocols->default_nick); SendDlgItemMessage(hwndDlg, IDC_NICKNAME, EM_LIMITTEXT, MS_MYDETAILS_GETMYNICKNAME_BUFFER_SIZE, 0); } else { Protocol proto = GetProtocolByIndex(proto_num); char tmp[128]; mir_snprintf(tmp, sizeof(tmp), Translate("Set My Nickname for %s"), proto.GetDescription()); SendMessage(hwndDlg, WM_SETTEXT, 0, (LPARAM)tmp); HICON hIcon = (HICON) proto.Call(PS_LOADICON, PLI_PROTOCOL); if (hIcon != NULL) { SendMessage(hwndDlg, WM_SETICON, ICON_BIG, (LPARAM)hIcon); DestroyIcon(hIcon); } SetDlgItemText(hwndDlg, IDC_NICKNAME, proto.GetNick()); SendDlgItemMessage(hwndDlg, IDC_NICKNAME, EM_LIMITTEXT, min(MS_MYDETAILS_GETMYNICKNAME_BUFFER_SIZE, proto.GetNickMaxLength()), 0); } return TRUE; } case WM_COMMAND: switch(wParam) { case IDOK: { char tmp[MS_MYDETAILS_GETMYNICKNAME_BUFFER_SIZE]; GetDlgItemText(hwndDlg, IDC_NICKNAME, tmp, sizeof(tmp)); int proto_num = (int) GetWindowLong(hwndDlg, GWL_USERDATA); if (proto_num == -1) { protocols->SetNicks(tmp); } else { GetProtocolByIndex(proto_num).SetNick(tmp); } DestroyWindow(hwndDlg); break; } case IDCANCEL: { DestroyWindow(hwndDlg); break; } } break; case WM_CLOSE: DestroyWindow(hwndDlg); break; case WM_DESTROY: InterlockedExchange(&nickname_dialog_open, 0); break; } return FALSE; }