From 856ff580fd9d776c331a6b525fa7d73a24d92f64 Mon Sep 17 00:00:00 2001 From: George Hazan Date: Thu, 9 Jun 2022 21:26:35 +0300 Subject: UserInfo -> UI classes --- protocols/IRCG/src/userinfo.cpp | 277 +++++++++++++++++++--------------------- 1 file changed, 134 insertions(+), 143 deletions(-) (limited to 'protocols/IRCG') diff --git a/protocols/IRCG/src/userinfo.cpp b/protocols/IRCG/src/userinfo.cpp index fa9620e4ee..c0e18fa0eb 100644 --- a/protocols/IRCG/src/userinfo.cpp +++ b/protocols/IRCG/src/userinfo.cpp @@ -24,167 +24,166 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. ///////////////////////////////////////////////////////////////////////////////////////// // 'User details' dialog -struct UserDetailsDlgProcParam -{ - UserDetailsDlgProcParam(CIrcProto* _pro, MCONTACT _info) : - ppro(_pro), - hContact(_info) - {} - - CIrcProto *ppro; - MCONTACT hContact; -}; - const wchar_t *STR_BASIC = LPGENW("Faster! Searches the network for an exact match of the nickname only. The hostmask is optional and provides further security if used. Wildcards (? and *) are allowed."); const wchar_t *STR_ADVANCED = LPGENW("Slower! Searches the network for nicknames matching a wildcard string. The hostmask is mandatory and a minimum of 4 characters is necessary in the \"Nick\" field. Wildcards (? and *) are allowed."); const wchar_t *STR_ERROR = LPGENW("Settings could not be saved!\n\nThe \"Nick\" field must contain at least four characters including wildcards,\n and it must also match the default nickname for this contact."); const wchar_t *STR_ERROR2 = LPGENW("Settings could not be saved!\n\nA full hostmask must be set for this online detection mode to work."); -INT_PTR CALLBACK UserDetailsDlgProc(HWND m_hwnd, UINT msg, WPARAM wParam, LPARAM lParam) +class IrcUserInfoDlg : public CUserInfoPageDlg { - UserDetailsDlgProcParam *p = (UserDetailsDlgProcParam*)GetWindowLongPtr(m_hwnd, GWLP_USERDATA); - switch (msg) { - case WM_INITDIALOG: - p = new UserDetailsDlgProcParam(nullptr, lParam); - SetWindowLongPtr(m_hwnd, GWLP_USERDATA, (LPARAM)p); - break; - - case WM_NOTIFY: - if (((LPNMHDR)lParam)->idFrom == 0 && ((LPNMHDR)lParam)->code == PSN_PARAMCHANGED) { - p->ppro = (CIrcProto*)((PSHNOTIFY*)lParam)->lParam; - - DBVARIANT dbv; - uint8_t bAdvanced = p->ppro->getByte(p->hContact, "AdvancedMode", 0); + CIrcProto *ppro; + CCtrlButton btn1, btn2; + CCtrlCheck radio1, radio2; + +public: + IrcUserInfoDlg(CIrcProto *_ppro) : + CUserInfoPageDlg(g_plugin, IDD_USERINFO), + ppro(_ppro), + btn1(this, IDC_BUTTON), + btn2(this, IDC_BUTTON2), + radio1(this, IDC_RADIO1), + radio2(this, IDC_RADIO2) + { + btn1.OnClick = Callback(this, &IrcUserInfoDlg::onClick_Button1); + btn2.OnClick = Callback(this, &IrcUserInfoDlg::onClick_Button2); + + radio1.OnChange = Callback(this, &IrcUserInfoDlg::onChange_Radio1); + radio2.OnChange = Callback(this, &IrcUserInfoDlg::onChange_Radio2); + } - TranslateDialogDefault(m_hwnd); + bool OnRefresh() override + { + DBVARIANT dbv; + uint8_t bAdvanced = ppro->getByte(m_hContact, "AdvancedMode", 0); - CheckDlgButton(m_hwnd, IDC_RADIO1, bAdvanced ? BST_UNCHECKED : BST_CHECKED); - CheckDlgButton(m_hwnd, IDC_RADIO2, bAdvanced ? BST_CHECKED : BST_UNCHECKED); - EnableWindow(GetDlgItem(m_hwnd, IDC_WILDCARD), bAdvanced); + TranslateDialogDefault(m_hwnd); - if (!bAdvanced) { - SetDlgItemText(m_hwnd, IDC_DEFAULT, TranslateW(STR_BASIC)); - if (!p->ppro->getWString(p->hContact, "Default", &dbv)) { - SetDlgItemText(m_hwnd, IDC_WILDCARD, dbv.pwszVal); - db_free(&dbv); - } - } - else { - SetDlgItemText(m_hwnd, IDC_DEFAULT, TranslateW(STR_ADVANCED)); - if (!p->ppro->getWString(p->hContact, "UWildcard", &dbv)) { - SetDlgItemText(m_hwnd, IDC_WILDCARD, dbv.pwszVal); - db_free(&dbv); - } - } + radio1.SetState(!bAdvanced); + radio2.SetState(bAdvanced); + EnableWindow(GetDlgItem(m_hwnd, IDC_WILDCARD), bAdvanced); - if (!p->ppro->getWString(p->hContact, "UUser", &dbv)) { - SetDlgItemText(m_hwnd, IDC_USER, dbv.pwszVal); + if (!bAdvanced) { + SetDlgItemText(m_hwnd, IDC_DEFAULT, TranslateW(STR_BASIC)); + if (!ppro->getWString(m_hContact, "Default", &dbv)) { + SetDlgItemText(m_hwnd, IDC_WILDCARD, dbv.pwszVal); db_free(&dbv); } - - if (!p->ppro->getWString(p->hContact, "UHost", &dbv)) { - SetDlgItemText(m_hwnd, IDC_HOST, dbv.pwszVal); + } + else { + SetDlgItemText(m_hwnd, IDC_DEFAULT, TranslateW(STR_ADVANCED)); + if (!ppro->getWString(m_hContact, "UWildcard", &dbv)) { + SetDlgItemText(m_hwnd, IDC_WILDCARD, dbv.pwszVal); db_free(&dbv); } - ProtoBroadcastAck(p->ppro->m_szModuleName, p->hContact, ACKTYPE_GETINFO, ACKRESULT_SUCCESS, (HANDLE)1); } - break; - case WM_COMMAND: - if ((LOWORD(wParam) == IDC_WILDCARD || LOWORD(wParam) == IDC_USER || LOWORD(wParam) == IDC_HOST) && - (HIWORD(wParam) != EN_CHANGE || (HWND)lParam != GetFocus())) - return true; + if (!ppro->getWString(m_hContact, "UUser", &dbv)) { + SetDlgItemText(m_hwnd, IDC_USER, dbv.pwszVal); + db_free(&dbv); + } - EnableWindow(GetDlgItem(m_hwnd, IDC_BUTTON), true); - EnableWindow(GetDlgItem(m_hwnd, IDC_BUTTON2), true); + if (!ppro->getWString(m_hContact, "UHost", &dbv)) { + SetDlgItemText(m_hwnd, IDC_HOST, dbv.pwszVal); + db_free(&dbv); + } + ProtoBroadcastAck(ppro->m_szModuleName, m_hContact, ACKTYPE_GETINFO, ACKRESULT_SUCCESS, (HANDLE)1); + return false; + } - if (HIWORD(wParam) == BN_CLICKED && LOWORD(wParam) == IDC_BUTTON) { - wchar_t temp[500]; - GetDlgItemText(m_hwnd, IDC_WILDCARD, temp, _countof(temp)); + void OnChange() override + { + btn1.Enable(); + btn2.Enable(); + } - uint8_t bAdvanced = IsDlgButtonChecked(m_hwnd, IDC_RADIO1) ? 0 : 1; - if (bAdvanced) { - if (GetWindowTextLength(GetDlgItem(m_hwnd, IDC_WILDCARD)) == 0 || - GetWindowTextLength(GetDlgItem(m_hwnd, IDC_USER)) == 0 || - GetWindowTextLength(GetDlgItem(m_hwnd, IDC_HOST)) == 0) { - MessageBox(nullptr, TranslateW(STR_ERROR2), TranslateT("IRC error"), MB_OK | MB_ICONERROR); - return FALSE; - } + void onClick_Button1(CCtrlButton *) + { + wchar_t temp[500]; + GetDlgItemText(m_hwnd, IDC_WILDCARD, temp, _countof(temp)); + + bool bAdvanced = !radio1.GetState(); + if (bAdvanced) { + if (GetWindowTextLength(GetDlgItem(m_hwnd, IDC_WILDCARD)) == 0 || + GetWindowTextLength(GetDlgItem(m_hwnd, IDC_USER)) == 0 || + GetWindowTextLength(GetDlgItem(m_hwnd, IDC_HOST)) == 0) { + MessageBox(nullptr, TranslateW(STR_ERROR2), TranslateT("IRC error"), MB_OK | MB_ICONERROR); + return; + } - DBVARIANT dbv; - if (!p->ppro->getWString(p->hContact, "Default", &dbv)) { - CMStringW S = STR_ERROR; - S += L" ("; - S += dbv.pwszVal; - S += L")"; - if ((mir_wstrlen(temp) < 4 && mir_wstrlen(temp)) || !WCCmp(CharLower(temp), CharLower(dbv.pwszVal))) { - MessageBox(nullptr, TranslateW(S.c_str()), TranslateT("IRC error"), MB_OK | MB_ICONERROR); - db_free(&dbv); - return FALSE; - } + DBVARIANT dbv; + if (!ppro->getWString(m_hContact, "Default", &dbv)) { + CMStringW S = STR_ERROR; + S += L" ("; + S += dbv.pwszVal; + S += L")"; + if ((mir_wstrlen(temp) < 4 && mir_wstrlen(temp)) || !WCCmp(CharLower(temp), CharLower(dbv.pwszVal))) { + MessageBox(nullptr, TranslateW(S.c_str()), TranslateT("IRC error"), MB_OK | MB_ICONERROR); db_free(&dbv); + return; } - - GetDlgItemText(m_hwnd, IDC_WILDCARD, temp, _countof(temp)); - if (mir_wstrlen(GetWord(temp, 0).c_str())) - p->ppro->setWString(p->hContact, "UWildcard", GetWord(temp, 0).c_str()); - else - db_unset(p->hContact, p->ppro->m_szModuleName, "UWildcard"); + db_free(&dbv); } - p->ppro->setByte(p->hContact, "AdvancedMode", bAdvanced); - - GetDlgItemText(m_hwnd, IDC_USER, temp, _countof(temp)); + GetDlgItemText(m_hwnd, IDC_WILDCARD, temp, _countof(temp)); if (mir_wstrlen(GetWord(temp, 0).c_str())) - p->ppro->setWString(p->hContact, "UUser", GetWord(temp, 0).c_str()); + ppro->setWString(m_hContact, "UWildcard", GetWord(temp, 0).c_str()); else - db_unset(p->hContact, p->ppro->m_szModuleName, "UUser"); + db_unset(m_hContact, ppro->m_szModuleName, "UWildcard"); + } - GetDlgItemText(m_hwnd, IDC_HOST, temp, _countof(temp)); - if (mir_wstrlen(GetWord(temp, 0).c_str())) - p->ppro->setWString(p->hContact, "UHost", GetWord(temp, 0).c_str()); - else - db_unset(p->hContact, p->ppro->m_szModuleName, "UHost"); + ppro->setByte(m_hContact, "AdvancedMode", bAdvanced); - EnableWindow(GetDlgItem(m_hwnd, IDC_BUTTON), FALSE); - } + GetDlgItemText(m_hwnd, IDC_USER, temp, _countof(temp)); + if (mir_wstrlen(GetWord(temp, 0).c_str())) + ppro->setWString(m_hContact, "UUser", GetWord(temp, 0).c_str()); + else + db_unset(m_hContact, ppro->m_szModuleName, "UUser"); - if (HIWORD(wParam) == BN_CLICKED && LOWORD(wParam) == IDC_BUTTON2) { - if (IsDlgButtonChecked(m_hwnd, IDC_RADIO2)) - SetDlgItemTextA(m_hwnd, IDC_WILDCARD, ""); - SetDlgItemTextA(m_hwnd, IDC_HOST, ""); - SetDlgItemTextA(m_hwnd, IDC_USER, ""); - db_unset(p->hContact, p->ppro->m_szModuleName, "UWildcard"); - db_unset(p->hContact, p->ppro->m_szModuleName, "UUser"); - db_unset(p->hContact, p->ppro->m_szModuleName, "UHost"); - EnableWindow(GetDlgItem(m_hwnd, IDC_BUTTON), FALSE); - EnableWindow(GetDlgItem(m_hwnd, IDC_BUTTON2), FALSE); - } + GetDlgItemText(m_hwnd, IDC_HOST, temp, _countof(temp)); + if (mir_wstrlen(GetWord(temp, 0).c_str())) + ppro->setWString(m_hContact, "UHost", GetWord(temp, 0).c_str()); + else + db_unset(m_hContact, ppro->m_szModuleName, "UHost"); - if (HIWORD(wParam) == BN_CLICKED && LOWORD(wParam) == IDC_RADIO1) { - SetDlgItemText(m_hwnd, IDC_DEFAULT, TranslateW(STR_BASIC)); + btn1.Disable(); + } - DBVARIANT dbv; - if (!p->ppro->getWString(p->hContact, "Default", &dbv)) { - SetDlgItemText(m_hwnd, IDC_WILDCARD, dbv.pwszVal); - db_free(&dbv); - } - EnableWindow(GetDlgItem(m_hwnd, IDC_WILDCARD), FALSE); + void onClick_Button2(CCtrlButton *) + { + if (radio2.GetState()) + SetDlgItemTextA(m_hwnd, IDC_WILDCARD, ""); + SetDlgItemTextA(m_hwnd, IDC_HOST, ""); + SetDlgItemTextA(m_hwnd, IDC_USER, ""); + db_unset(m_hContact, ppro->m_szModuleName, "UWildcard"); + db_unset(m_hContact, ppro->m_szModuleName, "UUser"); + db_unset(m_hContact, ppro->m_szModuleName, "UHost"); + btn1.Disable(); + btn2.Disable(); + } + + void onChange_Radio1(CCtrlButton *) + { + SetDlgItemText(m_hwnd, IDC_DEFAULT, TranslateW(STR_BASIC)); + + DBVARIANT dbv; + if (!ppro->getWString(m_hContact, "Default", &dbv)) { + SetDlgItemText(m_hwnd, IDC_WILDCARD, dbv.pwszVal); + db_free(&dbv); } + EnableWindow(GetDlgItem(m_hwnd, IDC_WILDCARD), FALSE); + } - if (HIWORD(wParam) == BN_CLICKED && LOWORD(wParam) == IDC_RADIO2) { - DBVARIANT dbv; - SetDlgItemText(m_hwnd, IDC_DEFAULT, TranslateW(STR_ADVANCED)); - if (!p->ppro->getWString(p->hContact, "UWildcard", &dbv)) { - SetDlgItemText(m_hwnd, IDC_WILDCARD, dbv.pwszVal); - db_free(&dbv); - } - EnableWindow(GetDlgItem(m_hwnd, IDC_WILDCARD), true); + void onChange_Radio2(CCtrlButton *) + { + DBVARIANT dbv; + SetDlgItemText(m_hwnd, IDC_DEFAULT, TranslateW(STR_ADVANCED)); + if (!ppro->getWString(m_hContact, "UWildcard", &dbv)) { + SetDlgItemText(m_hwnd, IDC_WILDCARD, dbv.pwszVal); + db_free(&dbv); } - break; + EnableWindow(GetDlgItem(m_hwnd, IDC_WILDCARD), true); } - return FALSE; -} +}; int __cdecl CIrcProto::OnInitUserInfo(WPARAM wParam, LPARAM hContact) { @@ -198,23 +197,15 @@ int __cdecl CIrcProto::OnInitUserInfo(WPARAM wParam, LPARAM hContact) if (getByte(hContact, "DCC", 0) != 0) return 0; - DBVARIANT dbv; - if (!getWString(hContact, "Default", &dbv)) { - if (IsChannel(dbv.pwszVal)) { - db_free(&dbv); - return 0; - } - db_free(&dbv); - } + ptrW wszChannel(getWStringA(hContact, "Default")); + if (!wszChannel || !IsChannel(wszChannel)) + return 0; - OPTIONSDIALOGPAGE odp = {}; - odp.flags = ODPF_DONTTRANSLATE; - odp.szTitle.a = m_szModuleName; - odp.dwInitParam = (LPARAM)this; - odp.position = -1900000000; - odp.pfnDlgProc = UserDetailsDlgProc; - odp.pszTemplate = MAKEINTRESOURCEA(IDD_USERINFO); - odp.szTitle.a = m_szModuleName; - g_plugin.addUserInfo(wParam, &odp); + USERINFOPAGE uip = {}; + uip.position = -1900000000; + uip.flags = ODPF_DONTTRANSLATE | ODPF_UNICODE; + uip.pDialog = new IrcUserInfoDlg(this); + uip.szTitle.w = m_tszUserName; + g_plugin.addUserInfo(wParam, &uip); return 0; } -- cgit v1.2.3