summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGeorge Hazan <ghazan@miranda.im>2022-09-21 22:12:40 +0300
committerGeorge Hazan <ghazan@miranda.im>2022-09-21 22:12:40 +0300
commitffdd43398c6beebd3eaeb8a3b8d0722f90c470ba (patch)
tree56bdf5ac8b1b58074faad92a9403d13aac6cbff3
parent6ef18969b0a9107c4afb99de8fc07982ff3ca645 (diff)
fixes #3202 (StdUserInfo: перекошены элементы на странице "Аватар")
-rw-r--r--plugins/AVS/src/main.cpp3
-rw-r--r--plugins/AVS/src/stdafx.h4
-rw-r--r--plugins/AVS/src/userInfo.cpp202
-rw-r--r--plugins/AVS/src/version.h2
4 files changed, 104 insertions, 107 deletions
diff --git a/plugins/AVS/src/main.cpp b/plugins/AVS/src/main.cpp
index 4dacf724bb..2ad7a85047 100644
--- a/plugins/AVS/src/main.cpp
+++ b/plugins/AVS/src/main.cpp
@@ -56,7 +56,8 @@ static PLUGININFOEX pluginInfoEx =
};
CMPlugin::CMPlugin() :
- PLUGIN<CMPlugin>("AVS_Settings", pluginInfoEx)
+ PLUGIN<CMPlugin>(MODULENAME, pluginInfoEx),
+ bPerProto(MODULENAME, "PerProtocolUserAvatars", 1)
{}
/////////////////////////////////////////////////////////////////////////////////////////
diff --git a/plugins/AVS/src/stdafx.h b/plugins/AVS/src/stdafx.h
index 7325135953..c43d83e32a 100644
--- a/plugins/AVS/src/stdafx.h
+++ b/plugins/AVS/src/stdafx.h
@@ -52,6 +52,8 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
#include "poll.h"
#include "acc.h"
+#define MODULENAME "AVS_Settings"
+
#ifndef SHVIEW_THUMBNAIL
#define SHVIEW_THUMBNAIL 0x702D
#endif
@@ -62,6 +64,8 @@ struct CMPlugin : public PLUGIN<CMPlugin>
{
CMPlugin();
+ CMOption<bool> bPerProto;
+
int Load() override;
int Unload() override;
};
diff --git a/plugins/AVS/src/userInfo.cpp b/plugins/AVS/src/userInfo.cpp
index 2a90f55e27..88be8bd99d 100644
--- a/plugins/AVS/src/userInfo.cpp
+++ b/plugins/AVS/src/userInfo.cpp
@@ -242,109 +242,68 @@ public:
/////////////////////////////////////////////////////////////////////////////////////////
// Protocol avatar dialog
-static char* GetSelectedProtocol(HWND hwndDlg)
+class AvatarProtoInfoDlg : public CUserInfoPageDlg
{
- HWND hwndList = GetDlgItem(hwndDlg, IDC_PROTOCOLS);
-
- // Get selection
- int iItem = ListView_GetSelectionMark(hwndList);
- if (iItem < 0)
- return nullptr;
-
- // Get protocol name
- LVITEM item = { 0 };
- item.mask = LVIF_PARAM;
- item.iItem = iItem;
- SendMessage(hwndList, LVM_GETITEMA, 0, (LPARAM)&item);
- return (char*)item.lParam;
-}
+ char* GetSelectedProtocol()
+ {
+ // Get selection
+ int iItem = protocols.GetSelectionMark();
+ if (iItem < 0)
+ return nullptr;
+
+ // Get protocol name
+ LVITEM item = {0};
+ item.mask = LVIF_PARAM;
+ item.iItem = iItem;
+ SendMessage(protocols.GetHwnd(), LVM_GETITEMA, 0, (LPARAM)&item);
+ return (char *)item.lParam;
+ }
-static void EnableDisableControls(HWND hwndDlg, char *proto)
-{
- if (IsDlgButtonChecked(hwndDlg, IDC_PER_PROTO)) {
- if (proto == nullptr) {
- EnableWindow(GetDlgItem(hwndDlg, IDC_CHANGE), FALSE);
- EnableWindow(GetDlgItem(hwndDlg, IDC_DELETE), FALSE);
- }
- else {
- if (!ProtoServiceExists(proto, PS_SETMYAVATAR)) {
- EnableWindow(GetDlgItem(hwndDlg, IDC_CHANGE), FALSE);
- EnableWindow(GetDlgItem(hwndDlg, IDC_DELETE), FALSE);
+ void OffsetWindow(int iCtrlId, int dx)
+ {
+ HWND hwnd = GetDlgItem(m_hwnd, iCtrlId);
+
+ RECT rc;
+ GetWindowRect(hwnd, &rc);
+ ScreenToClient(m_hwnd, &rc);
+ OffsetRect(&rc, dx, 0);
+ MoveWindow(hwnd, rc.left, rc.top, rc.right - rc.left, rc.bottom - rc.top, TRUE);
+ }
+
+ void EnableDisableControls(char *proto)
+ {
+ if (chkPerProto.IsChecked()) {
+ if (proto == nullptr) {
+ EnableWindow(GetDlgItem(m_hwnd, IDC_CHANGE), FALSE);
+ EnableWindow(GetDlgItem(m_hwnd, IDC_DELETE), FALSE);
}
else {
- EnableWindow(GetDlgItem(hwndDlg, IDC_CHANGE), TRUE);
-
- int width, height;
- SendDlgItemMessage(hwndDlg, IDC_PROTOPIC, AVATAR_GETUSEDSPACE, (WPARAM)&width, (LPARAM)&height);
- EnableWindow(GetDlgItem(hwndDlg, IDC_DELETE), (LPARAM)width != 0 || height != 0);
+ if (!ProtoServiceExists(proto, PS_SETMYAVATAR)) {
+ EnableWindow(GetDlgItem(m_hwnd, IDC_CHANGE), FALSE);
+ EnableWindow(GetDlgItem(m_hwnd, IDC_DELETE), FALSE);
+ }
+ else {
+ EnableWindow(GetDlgItem(m_hwnd, IDC_CHANGE), TRUE);
+
+ int width, height;
+ SendDlgItemMessage(m_hwnd, IDC_PROTOPIC, AVATAR_GETUSEDSPACE, (WPARAM)&width, (LPARAM)&height);
+ EnableWindow(GetDlgItem(m_hwnd, IDC_DELETE), (LPARAM)width != 0 || height != 0);
+ }
}
}
- }
- else {
- EnableWindow(GetDlgItem(hwndDlg, IDC_CHANGE), TRUE);
-
- if (g_plugin.getByte("GlobalUserAvatarNotConsistent", 1))
- EnableWindow(GetDlgItem(hwndDlg, IDC_DELETE), TRUE);
else {
- int width, height;
- SendDlgItemMessage(hwndDlg, IDC_PROTOPIC, AVATAR_GETUSEDSPACE, (WPARAM)&width, (LPARAM)&height);
- EnableWindow(GetDlgItem(hwndDlg, IDC_DELETE), (LPARAM)width != 0 || height != 0);
- }
- }
-}
+ EnableWindow(GetDlgItem(m_hwnd, IDC_CHANGE), TRUE);
-static void OffsetWindow(HWND parent, HWND hwnd, int dx, int dy)
-{
- RECT rc;
- GetWindowRect(hwnd, &rc);
- ScreenToClient(parent, &rc);
- OffsetRect(&rc, dx, dy);
- MoveWindow(hwnd, rc.left, rc.top, rc.right - rc.left, rc.bottom - rc.top, TRUE);
-}
-
-static void EnableDisableProtocols(HWND hwndDlg, BOOL init)
-{
- int diff = 147; // Pre-calc
- BOOL perProto = IsDlgButtonChecked(hwndDlg, IDC_PER_PROTO);
- HWND hwndList = GetDlgItem(hwndDlg, IDC_PROTOCOLS);
-
- if (perProto) {
- if (!init && !IsWindowVisible(hwndList)) {
- // Show list of protocols
- ShowWindow(hwndList, SW_SHOW);
-
- // Move controls
- OffsetWindow(hwndDlg, GetDlgItem(hwndDlg, IDC_PROTOPIC), diff, 0);
- OffsetWindow(hwndDlg, GetDlgItem(hwndDlg, IDC_CHANGE), diff, 0);
- OffsetWindow(hwndDlg, GetDlgItem(hwndDlg, IDC_DELETE), diff, 0);
- }
-
- char * proto = GetSelectedProtocol(hwndDlg);
- if (proto == nullptr) {
- ListView_SetItemState(hwndList, 0, LVIS_FOCUSED | LVIS_SELECTED, 0x0F);
- }
- else {
- SendDlgItemMessage(hwndDlg, IDC_PROTOPIC, AVATAR_SETPROTOCOL, 0, (LPARAM)proto);
- EnableDisableControls(hwndDlg, proto);
+ if (g_plugin.getByte("GlobalUserAvatarNotConsistent", 1))
+ EnableWindow(GetDlgItem(m_hwnd, IDC_DELETE), TRUE);
+ else {
+ int width, height;
+ SendDlgItemMessage(m_hwnd, IDC_PROTOPIC, AVATAR_GETUSEDSPACE, (WPARAM)&width, (LPARAM)&height);
+ EnableWindow(GetDlgItem(m_hwnd, IDC_DELETE), (LPARAM)width != 0 || height != 0);
+ }
}
}
- else {
- if (init || IsWindowVisible(hwndList)) {
- // Show list of protocols
- ShowWindow(hwndList, SW_HIDE);
-
- // Move controls
- OffsetWindow(hwndDlg, GetDlgItem(hwndDlg, IDC_PROTOPIC), -diff, 0);
- OffsetWindow(hwndDlg, GetDlgItem(hwndDlg, IDC_CHANGE), -diff, 0);
- OffsetWindow(hwndDlg, GetDlgItem(hwndDlg, IDC_DELETE), -diff, 0);
- }
- SendDlgItemMessage(hwndDlg, IDC_PROTOPIC, AVATAR_SETPROTOCOL, 0, NULL);
- }
-}
-
-class AvatarProtoInfoDlg : public CUserInfoPageDlg
-{
CCtrlCheck chkPerProto;
CCtrlButton btnChange, btnDelete;
CCtrlListView protocols;
@@ -360,6 +319,7 @@ public:
btnChange.OnClick = Callback(this, &AvatarProtoInfoDlg::onClick_Change);
btnDelete.OnClick = Callback(this, &AvatarProtoInfoDlg::onClick_Delete);
+ CreateLink(chkPerProto, g_plugin.bPerProto);
chkPerProto.OnChange = Callback(this, &AvatarProtoInfoDlg::onChange_PerProto);
}
@@ -403,10 +363,6 @@ public:
protocols.SetColumnWidth(0, LVSCW_AUTOSIZE);
protocols.Arrange(LVA_ALIGNLEFT | LVA_ALIGNTOP);
-
- // Check if should show per protocol avatars
- CheckDlgButton(m_hwnd, IDC_PER_PROTO, g_plugin.getByte("PerProtocolUserAvatars", 1) ? BST_CHECKED : BST_UNCHECKED);
- EnableDisableProtocols(m_hwnd, TRUE);
return true;
}
@@ -415,7 +371,7 @@ public:
LPNMLISTVIEW li = ev->nmlv;
if (li->uNewState & LVIS_SELECTED) {
SendDlgItemMessage(m_hwnd, IDC_PROTOPIC, AVATAR_SETPROTOCOL, 0, li->lParam);
- EnableDisableControls(m_hwnd, (char*)li->lParam);
+ EnableDisableControls((char*)li->lParam);
}
}
@@ -424,17 +380,17 @@ public:
if (msg == WM_NOTIFY) {
LPNMHDR hdr = (LPNMHDR)lParam;
if (hdr->idFrom == IDC_PROTOPIC && hdr->code == NM_AVATAR_CHANGED)
- EnableDisableControls(m_hwnd, GetSelectedProtocol(m_hwnd));
+ EnableDisableControls(GetSelectedProtocol());
}
return CDlgBase::DlgProc(msg, wParam, lParam);
}
void onClick_Change(CCtrlButton *)
{
- if (BST_UNCHECKED == IsDlgButtonChecked(m_hwnd, IDC_PER_PROTO))
+ if (!chkPerProto.IsChecked())
SetMyAvatar(NULL, NULL);
else {
- char *proto = GetSelectedProtocol(m_hwnd);
+ char *proto = GetSelectedProtocol();
if (proto != nullptr)
SetMyAvatar((WPARAM)proto, NULL);
}
@@ -442,12 +398,12 @@ public:
void onClick_Delete(CCtrlButton *)
{
- if (BST_UNCHECKED == IsDlgButtonChecked(m_hwnd, IDC_PER_PROTO)) {
+ if (!chkPerProto.IsChecked()) {
if (MessageBox(m_hwnd, TranslateT("Are you sure you want to remove your avatar?"), TranslateT("Global avatar"), MB_YESNO) == IDYES)
SetMyAvatar(NULL, (LPARAM)L"");
}
else {
- if (char *proto = GetSelectedProtocol(m_hwnd)) {
+ if (char *proto = GetSelectedProtocol()) {
char description[256];
CallProtoService(proto, PS_GETNAME, _countof(description), (LPARAM)description);
wchar_t *descr = mir_a2u(description);
@@ -458,10 +414,46 @@ public:
}
}
- void onChange_PerProto(CCtrlCheck*)
+ void onChange_PerProto(CCtrlCheck *pCheck)
{
- g_plugin.setByte("PerProtocolUserAvatars", IsDlgButtonChecked(m_hwnd, IDC_PER_PROTO) ? 1 : 0);
- EnableDisableProtocols(m_hwnd, FALSE);
+ int diff = 147; // Pre-calc
+
+ if (chkPerProto.IsChecked()) {
+ if (!IsWindowVisible(protocols.GetHwnd())) {
+ // Show list of protocols
+ protocols.Show();
+
+ // Move controls
+ OffsetWindow(IDC_PROTOPIC, diff);
+ OffsetWindow(IDC_CHANGE, diff);
+ OffsetWindow(IDC_DELETE, diff);
+ }
+
+ char *proto = GetSelectedProtocol();
+ if (proto == nullptr) {
+ protocols.SetItemState(0, LVIS_FOCUSED | LVIS_SELECTED, 0x0F);
+ }
+ else {
+ SendDlgItemMessage(m_hwnd, IDC_PROTOPIC, AVATAR_SETPROTOCOL, 0, (LPARAM)proto);
+ EnableDisableControls(proto);
+ }
+ }
+ else {
+ if (!m_bInitialized) {
+ PostMessage(m_hwnd, WM_COMMAND, IDC_PER_PROTO, 0);
+ }
+ else if (!pCheck || IsWindowVisible(protocols.GetHwnd())) {
+ // Hide list of protocols
+ protocols.Hide();
+
+ // Move controls
+ OffsetWindow(IDC_PROTOPIC, -diff);
+ OffsetWindow(IDC_CHANGE, -diff);
+ OffsetWindow(IDC_DELETE, -diff);
+ }
+
+ SendDlgItemMessage(m_hwnd, IDC_PROTOPIC, AVATAR_SETPROTOCOL, 0, NULL);
+ }
}
};
diff --git a/plugins/AVS/src/version.h b/plugins/AVS/src/version.h
index 311e8f193b..6b3a39b15b 100644
--- a/plugins/AVS/src/version.h
+++ b/plugins/AVS/src/version.h
@@ -1,7 +1,7 @@
#define __MAJOR_VERSION 0
#define __MINOR_VERSION 98
#define __RELEASE_NUM 1
-#define __BUILD_NUM 5
+#define __BUILD_NUM 6
#include <stdver.h>