summaryrefslogtreecommitdiff
path: root/protocols/IRCG
diff options
context:
space:
mode:
authorGeorge Hazan <ghazan@miranda.im>2022-06-09 21:26:35 +0300
committerGeorge Hazan <ghazan@miranda.im>2022-06-09 21:30:54 +0300
commit856ff580fd9d776c331a6b525fa7d73a24d92f64 (patch)
tree42c4912b0b9c406c15783af3fc6e8c4857b09de1 /protocols/IRCG
parent68c2dea66f3e368cc1437f7890c8e62907890fcd (diff)
UserInfo -> UI classes
Diffstat (limited to 'protocols/IRCG')
-rw-r--r--protocols/IRCG/src/userinfo.cpp277
1 files changed, 134 insertions, 143 deletions
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;
}