diff options
author | George Hazan <ghazan@miranda.im> | 2022-09-21 22:12:40 +0300 |
---|---|---|
committer | George Hazan <ghazan@miranda.im> | 2022-09-21 22:12:40 +0300 |
commit | ffdd43398c6beebd3eaeb8a3b8d0722f90c470ba (patch) | |
tree | 56bdf5ac8b1b58074faad92a9403d13aac6cbff3 | |
parent | 6ef18969b0a9107c4afb99de8fc07982ff3ca645 (diff) |
fixes #3202 (StdUserInfo: перекошены элементы на странице "Аватар")
-rw-r--r-- | plugins/AVS/src/main.cpp | 3 | ||||
-rw-r--r-- | plugins/AVS/src/stdafx.h | 4 | ||||
-rw-r--r-- | plugins/AVS/src/userInfo.cpp | 202 | ||||
-rw-r--r-- | plugins/AVS/src/version.h | 2 |
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>
|