diff options
author | George Hazan <george.hazan@gmail.com> | 2025-05-08 17:37:01 +0300 |
---|---|---|
committer | George Hazan <george.hazan@gmail.com> | 2025-05-08 17:37:01 +0300 |
commit | e9b966f99c7b7ca88760c56b394ad261e144c23c (patch) | |
tree | b4d4a1d4f2e0f9c341d5694f6b72f4a67847fd72 | |
parent | 3164e6e4e1781fba14ac8eec14545c18c6f690ba (diff) |
code cleaning
-rw-r--r-- | include/m_clc.h | 24 | ||||
-rw-r--r-- | plugins/Clist_nicer/src/clcpaint.cpp | 2 | ||||
-rw-r--r-- | src/mir_app/src/clcutils.cpp | 53 | ||||
-rw-r--r-- | src/mir_app/src/clistgroups.cpp | 2 |
4 files changed, 40 insertions, 41 deletions
diff --git a/include/m_clc.h b/include/m_clc.h index eb8f0325f5..9239e2289c 100644 --- a/include/m_clc.h +++ b/include/m_clc.h @@ -28,18 +28,18 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. #define CLISTCONTROL_CLASS "CListControl"
#define CLISTCONTROL_CLASSW L"CListControl"
-//styles
-#define CLS_MANUALUPDATE 0x0001 //todo
-#define CLS_SHOWHIDDEN 0x0002
-#define CLS_HIDEOFFLINE 0x0004 //hides all offline users
-#define CLS_CHECKBOXES 0x0008
-#define CLS_MULTICOLUMN 0x0010 //not true multi-column, just for ignore/vis options
-#define CLS_HIDEEMPTYGROUPS 0x0020 //note: this flag will be spontaneously removed if the 'new subgroup' menu item is clicked, for obvious reasons
-#define CLS_USEGROUPS 0x0040
-#define CLS_NOHIDEOFFLINE 0x0080 //overrides CLS_HIDEOFFLINE and the per-group hideoffline setting
-#define CLS_GREYALTERNATE 0x0100 //make every other line slightly grey
-#define CLS_GROUPCHECKBOXES 0x0200 //put checkboxes on groups too (managed by CLC)
-#define CLS_CONTACTLIST 0x0400 //this control will be the main contact list (v. 0.3.4.3+ 2004/11/02)
+// styles
+#define CLS_MANUALUPDATE 0x0001 // todo
+#define CLS_SHOWHIDDEN 0x0002
+#define CLS_HIDEOFFLINE 0x0004 // hides all offline users
+#define CLS_CHECKBOXES 0x0008
+#define CLS_MULTICOLUMN 0x0010 // not true multi-column, just for ignore/vis options
+#define CLS_HIDEEMPTYGROUPS 0x0020 // note: this flag will be spontaneously removed if the 'new subgroup' menu item is clicked, for obvious reasons
+#define CLS_USEGROUPS 0x0040
+#define CLS_NOHIDEOFFLINE 0x0080 // overrides CLS_HIDEOFFLINE and the per-group hideoffline setting
+#define CLS_GREYALTERNATE 0x0100 // make every other line slightly grey
+#define CLS_GROUPCHECKBOXES 0x0200 // put checkboxes on groups too (managed by CLC)
+#define CLS_CONTACTLIST 0x0400 // this control will be the main contact list (v. 0.3.4.3+ 2004/11/02)
#define CLS_EX_DISABLEDRAGDROP 0x00000001
#define CLS_EX_EDITLABELS 0x00000002
diff --git a/plugins/Clist_nicer/src/clcpaint.cpp b/plugins/Clist_nicer/src/clcpaint.cpp index 866312dda1..e0d9f9e403 100644 --- a/plugins/Clist_nicer/src/clcpaint.cpp +++ b/plugins/Clist_nicer/src/clcpaint.cpp @@ -787,7 +787,7 @@ bgskipped: pi_avatar = !dat->bisEmbedded && type == CLCIT_CONTACT && (contact->cFlags & ECF_AVATAR) && contact->ace != nullptr && !(contact->ace->dwFlags & AVS_HIDEONCLIST);
- //checkboxes
+ // checkboxes
if (checkboxWidth) {
HANDLE hTheme = nullptr;
if (IS_THEMED)
diff --git a/src/mir_app/src/clcutils.cpp b/src/mir_app/src/clcutils.cpp index a34841db82..4626c91e14 100644 --- a/src/mir_app/src/clcutils.cpp +++ b/src/mir_app/src/clcutils.cpp @@ -779,40 +779,39 @@ void fnLoadClcOptions(HWND hwnd, ClcData *dat, BOOL bFirst) SendMessage(hwnd, WM_SIZE, 0, 0);
}
-#define GSIF_HASMEMBERS 0x80000000
-#define GSIF_ALLCHECKED 0x40000000
-#define GSIF_INDEXMASK 0x3FFFFFFF
+///////////////////////////////////////////////////////////////////////////////
+// contact checkboxes processing
-MIR_APP_DLL(void) Clist_RecalculateGroupCheckboxes(ClcData *dat)
+static int GroupHasCheck(ClcGroup *group)
{
- ClcGroup *group = &dat->list;
- group->scanIndex = GSIF_ALLCHECKED;
- for (;;) {
- if ((group->scanIndex & GSIF_INDEXMASK) == group->cl.getCount()) {
- int check = (group->scanIndex & (GSIF_HASMEMBERS | GSIF_ALLCHECKED)) == (GSIF_HASMEMBERS | GSIF_ALLCHECKED);
- if (group->parent == nullptr)
- break;
- group->parent->scanIndex |= group->scanIndex & GSIF_HASMEMBERS;
- group = group->parent;
- if (check)
- group->cl[(group->scanIndex & GSIF_INDEXMASK)]->flags |= CONTACTF_CHECKED;
+ bool bAllChecked = true, bHasMembers = false;
+
+ for (auto &cc: group->cl) {
+ if (cc->type == CLCIT_GROUP) {
+ int res = GroupHasCheck(cc->group);
+ if (res == 3)
+ cc->flags |= CONTACTF_CHECKED;
else {
- group->cl[(group->scanIndex & GSIF_INDEXMASK)]->flags &= ~CONTACTF_CHECKED;
- group->scanIndex &= ~GSIF_ALLCHECKED;
+ cc->flags &= ~CONTACTF_CHECKED;
+ bAllChecked = false;
}
+
+ if (res & 1)
+ bHasMembers = true;
}
- else if (group->cl[(group->scanIndex & GSIF_INDEXMASK)]->type == CLCIT_GROUP) {
- group = group->cl[(group->scanIndex & GSIF_INDEXMASK)]->group;
- group->scanIndex = GSIF_ALLCHECKED;
- continue;
- }
- else if (group->cl[(group->scanIndex & GSIF_INDEXMASK)]->type == CLCIT_CONTACT) {
- group->scanIndex |= GSIF_HASMEMBERS;
- if (!(group->cl[(group->scanIndex & GSIF_INDEXMASK)]->flags & CONTACTF_CHECKED))
- group->scanIndex &= ~GSIF_ALLCHECKED;
+ else if (cc->type == CLCIT_CONTACT) {
+ bHasMembers = true;
+ if (!(cc->flags & CONTACTF_CHECKED))
+ bAllChecked = false;
}
- group->scanIndex++;
}
+
+ return (bAllChecked ? 2 : 0) + (bHasMembers ? 1 : 0);
+}
+
+MIR_APP_DLL(void) Clist_RecalculateGroupCheckboxes(ClcData *dat)
+{
+ GroupHasCheck(&dat->list);
}
void fnSetContactCheckboxes(ClcContact *cc, int checked)
diff --git a/src/mir_app/src/clistgroups.cpp b/src/mir_app/src/clistgroups.cpp index d3d1650c63..acb0eb0632 100644 --- a/src/mir_app/src/clistgroups.cpp +++ b/src/mir_app/src/clistgroups.cpp @@ -110,7 +110,7 @@ MIR_APP_DLL(MGROUP) Clist_GroupExists(LPCTSTR ptszGroupName) void Clist_RebuildGroups(HWND hwnd, ClcData *dat)
{
for (auto &it: arByIds)
- if (!it->bHidden)
+ if (hwnd != g_clistApi.hwndContactTree || !it->bHidden)
g_clistApi.pfnAddGroup(hwnd, dat, it->groupName, it->flags, it->groupId+1, 0);
}
|