From 593062caed4a856b47172ace150c7eefdac54de0 Mon Sep 17 00:00:00 2001 From: George Hazan Date: Sat, 18 Jan 2014 17:25:28 +0000 Subject: alternative user sorting support git-svn-id: http://svn.miranda-ng.org/main/trunk@7733 1316c22d-e87f-b044-9b9b-93d7a3e3ba9c --- plugins/TabSRMM/src/chat/chat.h | 2 ++ plugins/TabSRMM/src/chat/main.cpp | 1 + plugins/TabSRMM/src/chat/manager.cpp | 40 ++++++++++++++++++++++++++++++++++++ 3 files changed, 43 insertions(+) (limited to 'plugins/TabSRMM/src/chat') diff --git a/plugins/TabSRMM/src/chat/chat.h b/plugins/TabSRMM/src/chat/chat.h index 025a854983..84004e5fb3 100644 --- a/plugins/TabSRMM/src/chat/chat.h +++ b/plugins/TabSRMM/src/chat/chat.h @@ -156,6 +156,8 @@ SESSION_INFO* SM_FindSessionAutoComplete(const char* pszModule, SESSION_INFO* cu void SM_RemoveContainer(TContainerData *pContainer); BOOL SM_ReconfigureFilters(); +int UM_CompareItem(USERINFO *u1, const TCHAR* pszNick, WORD wStatus); + //clist.c //tools.c diff --git a/plugins/TabSRMM/src/chat/main.cpp b/plugins/TabSRMM/src/chat/main.cpp index 5989cbf31b..7e3137bafc 100644 --- a/plugins/TabSRMM/src/chat/main.cpp +++ b/plugins/TabSRMM/src/chat/main.cpp @@ -278,6 +278,7 @@ int Chat_Load() pci->DoPopup = DoPopup; pci->ShowPopup = ShowPopup; pci->Log_CreateRtfHeader = Log_CreateRtfHeader; + pci->UM_CompareItem = UM_CompareItem; pci->ReloadSettings(); g_hMenu = LoadMenu(g_hInst, MAKEINTRESOURCE(IDR_MENU)); diff --git a/plugins/TabSRMM/src/chat/manager.cpp b/plugins/TabSRMM/src/chat/manager.cpp index d58f487c7d..1a4f357acd 100644 --- a/plugins/TabSRMM/src/chat/manager.cpp +++ b/plugins/TabSRMM/src/chat/manager.cpp @@ -23,6 +23,46 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. #include "..\commonheaders.h" +static int sttCompareNicknames(const TCHAR *s1, const TCHAR *s2) +{ + // skip rubbish + while (*s1 && !_istalpha(*s1)) ++s1; + while (*s2 && !_istalpha(*s2)) ++s2; + + // are there ~0veRy^kEwL_n1kz? + if (!*s1 && !*s2) return 0; + if (!*s1 && *s2) return +1; + if (*s1 && !*s2) return -1; + + // compare tails + return lstrcmpi(s1, s2); +} + +int UM_CompareItem(USERINFO *u1, const TCHAR* pszNick, WORD wStatus) +{ + WORD dw1 = u1->Status; + WORD dw2 = wStatus; + + for (int i = 0; i < 8; i++) { + if ((dw1 & 1) && !(dw2 & 1)) + return -1; + if ((dw2 & 1) && !(dw1 & 1)) + return 1; + if ((dw1 & 1) && (dw2 & 1)) { + if (g_Settings.bAlternativeSorting) + return sttCompareNicknames(u1->pszNick, pszNick); + else + return lstrcmp(u1->pszNick, pszNick); + } + dw1 = dw1 >> 1; + dw2 = dw2 >> 1; + } + + if (g_Settings.bAlternativeSorting) + return sttCompareNicknames(u1->pszNick, pszNick); + return lstrcmp(u1->pszNick, pszNick); +} + //--------------------------------------------------- // Session Manager functions // -- cgit v1.2.3