From f673f034c2fef25e932a12fbd5e2772f90c75e6d Mon Sep 17 00:00:00 2001 From: George Hazan Date: Sun, 17 Jun 2012 12:44:02 +0000 Subject: Clist_mw & Clist_modern renamed git-svn-id: http://svn.miranda-ng.org/main/trunk@455 1316c22d-e87f-b044-9b9b-93d7a3e3ba9c --- plugins/Clist_modern/modern_clcmsgs.cpp | 280 ++++++++++++++++++++++++++++++++ 1 file changed, 280 insertions(+) create mode 100644 plugins/Clist_modern/modern_clcmsgs.cpp (limited to 'plugins/Clist_modern/modern_clcmsgs.cpp') diff --git a/plugins/Clist_modern/modern_clcmsgs.cpp b/plugins/Clist_modern/modern_clcmsgs.cpp new file mode 100644 index 0000000000..6a444d32ac --- /dev/null +++ b/plugins/Clist_modern/modern_clcmsgs.cpp @@ -0,0 +1,280 @@ +/* + +Miranda IM: the free IM client for Microsoft* Windows* + +Copyright 2000-2008 Miranda ICQ/IM project, +all portions of this codebase are copyrighted to the people +listed in contributors.txt. + +This program is free software; you can redistribute it and/or +modify it under the terms of the GNU General Public License +as published by the Free Software Foundation; either version 2 +of the License, or (at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program; if not, write to the Free Software +Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +*/ +#include "hdr/modern_commonheaders.h" +#include "m_clc.h" +#include "hdr/modern_clc.h" +#include "hdr/modern_commonprototypes.h" + + +//processing of all the CLM_ messages incoming + +LRESULT cli_ProcessExternalMessages(HWND hwnd,struct ClcData *dat,UINT msg,WPARAM wParam,LPARAM lParam) +{ + switch(msg) + { + + case CLM_DELETEITEM: + { + pcli->pfnDeleteItemFromTree(hwnd, (HANDLE) wParam); + clcSetDelayTimer( TIMERID_DELAYEDRESORTCLC, hwnd, 1 ); //pcli->pfnSortCLC(hwnd, dat, 1); + clcSetDelayTimer( TIMERID_RECALCSCROLLBAR, hwnd, 2 ); //pcli->pfnRecalcScrollBar(hwnd, dat); + } + return 0; + case CLM_AUTOREBUILD: + if (dat->force_in_dialog) + { + pcli->pfnSaveStateAndRebuildList(hwnd, dat); + } + else + { + clcSetDelayTimer( TIMERID_REBUILDAFTER, hwnd ); + CLM_AUTOREBUILD_WAS_POSTED=FALSE; + } + return 0; + + case CLM_SETEXTRACOLUMNSSPACE: + dat->extraColumnSpacing=(int)wParam; + CLUI__cliInvalidateRect(hwnd,NULL,FALSE); + return 0; + + case CLM_SETFONT: + if(HIWORD(lParam)<0 || HIWORD(lParam)>FONTID_MODERN_MAX) return 0; + + dat->fontModernInfo[HIWORD(lParam)].hFont=(HFONT)wParam; + dat->fontModernInfo[HIWORD(lParam)].changed=1; + + RowHeights_GetMaxRowHeight(dat, hwnd); + + if(LOWORD(lParam)) + CLUI__cliInvalidateRect(hwnd,NULL,FALSE); + return 0; + + + case CLM_SETHIDEEMPTYGROUPS: + { + BOOL old=((GetWindowLongPtr(hwnd,GWL_STYLE)&CLS_HIDEEMPTYGROUPS)!=0); + BOOL newval=old; + if(wParam) SetWindowLongPtr(hwnd,GWL_STYLE,GetWindowLongPtr(hwnd,GWL_STYLE)|CLS_HIDEEMPTYGROUPS); + else SetWindowLongPtr(hwnd,GWL_STYLE,GetWindowLongPtr(hwnd,GWL_STYLE)&~CLS_HIDEEMPTYGROUPS); + newval=((GetWindowLongPtr(hwnd,GWL_STYLE)&CLS_HIDEEMPTYGROUPS)!=0); + if (newval!=old) + SendMessage(hwnd,CLM_AUTOREBUILD,0,0); + } + return 0; + + case CLM_SETTEXTCOLOR: + if(wParam<0 || wParam>FONTID_MODERN_MAX) break; + + dat->fontModernInfo[wParam].colour=lParam; + dat->force_in_dialog=TRUE; + // Issue 40: option knows nothing about moderns colors + // others who know have to set colors from lowest to highest + switch ( wParam ) + { + case FONTID_CONTACTS: + dat->fontModernInfo[FONTID_SECONDLINE].colour=lParam; + dat->fontModernInfo[FONTID_THIRDLINE].colour=lParam; + dat->fontModernInfo[FONTID_AWAY].colour=lParam; + dat->fontModernInfo[FONTID_DND].colour=lParam; + dat->fontModernInfo[FONTID_NA].colour=lParam; + dat->fontModernInfo[FONTID_OCCUPIED].colour=lParam; + dat->fontModernInfo[FONTID_CHAT].colour=lParam; + dat->fontModernInfo[FONTID_INVISIBLE].colour=lParam; + dat->fontModernInfo[FONTID_PHONE].colour=lParam; + dat->fontModernInfo[FONTID_LUNCH].colour=lParam; + dat->fontModernInfo[FONTID_CONTACT_TIME].colour=lParam; + break; + case FONTID_OPENGROUPS: + dat->fontModernInfo[FONTID_CLOSEDGROUPS].colour=lParam; + break; + case FONTID_OPENGROUPCOUNTS: + dat->fontModernInfo[FONTID_CLOSEDGROUPCOUNTS].colour=lParam; + break; + } + return 0; + + case CLM_GETNEXTITEM: + { + struct ClcContact *contact; + struct ClcGroup *group; + int i; + + if (wParam != CLGN_ROOT) { + if (!pcli->pfnFindItem(hwnd, dat, (HANDLE) lParam, &contact, &group, NULL)) + return (LRESULT) (HANDLE) NULL; + i = li.List_IndexOf((SortedList*)&group->cl,contact); + if (i<0) return 0; + } + switch (wParam) + { + case CLGN_ROOT: + if (dat->list.cl.count) + return (LRESULT) pcli->pfnContactToHItem(dat->list.cl.items[0]); + else + return (LRESULT) (HANDLE) NULL; + case CLGN_CHILD: + if (contact->type != CLCIT_GROUP) + return (LRESULT) (HANDLE) NULL; + group = contact->group; + if (group->cl.count == 0) + return (LRESULT) (HANDLE) NULL; + return (LRESULT) pcli->pfnContactToHItem(group->cl.items[0]); + case CLGN_PARENT: + return group->groupId | HCONTACT_ISGROUP; + case CLGN_NEXT: + do { + if (++i >= group->cl.count) + return NULL; + } + while (group->cl.items[i]->type == CLCIT_DIVIDER); + return (LRESULT) pcli->pfnContactToHItem(group->cl.items[i]); + case CLGN_PREVIOUS: + do { + if (--i < 0) + return NULL; + } + while (group->cl.items[i]->type == CLCIT_DIVIDER); + return (LRESULT) pcli->pfnContactToHItem(group->cl.items[i]); + case CLGN_NEXTCONTACT: + for (i++; i < group->cl.count; i++) + if (group->cl.items[i]->type == CLCIT_CONTACT) + break; + if (i >= group->cl.count) + return (LRESULT) (HANDLE) NULL; + return (LRESULT) pcli->pfnContactToHItem(group->cl.items[i]); + case CLGN_PREVIOUSCONTACT: + if (i >= group->cl.count) + return (LRESULT) (HANDLE) NULL; + for (i--; i >= 0; i--) + if (group->cl.items[i]->type == CLCIT_CONTACT) + break; + if (i < 0) + return (LRESULT) (HANDLE) NULL; + return (LRESULT) pcli->pfnContactToHItem(group->cl.items[i]); + case CLGN_NEXTGROUP: + for (i++; i < group->cl.count; i++) + if (group->cl.items[i]->type == CLCIT_GROUP) + break; + if (i >= group->cl.count) + return (LRESULT) (HANDLE) NULL; + return (LRESULT) pcli->pfnContactToHItem(group->cl.items[i]); + case CLGN_PREVIOUSGROUP: + if (i >= group->cl.count) + return (LRESULT) (HANDLE) NULL; + for (i--; i >= 0; i--) + if (group->cl.items[i]->type == CLCIT_GROUP) + break; + if (i < 0) + return (LRESULT) (HANDLE) NULL; + return (LRESULT) pcli->pfnContactToHItem(group->cl.items[i]); + } + return (LRESULT) (HANDLE) NULL; + } + return 0; + case CLM_SELECTITEM: + { + struct ClcContact *contact; + struct ClcGroup *group, *tgroup; + int index=-1; + int mainindex=-1; + if (!pcli->pfnFindItem(hwnd, dat, (HANDLE) wParam, &contact, &group, NULL)) + break; + for (tgroup = group; tgroup; tgroup = tgroup->parent) + pcli->pfnSetGroupExpand(hwnd, dat, tgroup, 1); + + if (!contact->isSubcontact) + { + index=li.List_IndexOf((SortedList*)&group->cl,contact); + mainindex=index; + } + else + { + index=li.List_IndexOf((SortedList*)&group->cl,contact->subcontacts); + mainindex=index; + index+=contact->isSubcontact; + } + { + BYTE k=ModernGetSettingByte(NULL,"CLC","MetaExpanding",SETTING_METAEXPANDING_DEFAULT); + if (k) + { + int subcontactscount=0; + int i; + for ( i=0; icl.items[i]; + if (tempCont->type==CLCIT_CONTACT && tempCont->SubAllocated && tempCont->SubExpanded) + index+=tempCont->SubAllocated; + } + } + } + dat->selection = pcli->pfnGetRowsPriorTo(&dat->list, group, index); + pcli->pfnEnsureVisible(hwnd, dat, dat->selection, 0); + } + return 0; + + case CLM_SETEXTRAIMAGE: + { + struct ClcContact *contact; + if (LOWORD(lParam) >= dat->extraColumnsCount) + return 0; + if (!pcli->pfnFindItem(hwnd, dat, (HANDLE) wParam, &contact, NULL, NULL)) + return 0; + contact->iExtraImage[LOWORD(lParam)] = (BYTE) HIWORD(lParam); //set oldstyle icon + contact->iWideExtraImage[LOWORD(lParam)] = (WORD) 0xFFFF; //reset wide icon + pcli->pfnInvalidateRect(hwnd, NULL, FALSE); + return 0; + } + + case CLM_SETWIDEEXTRAIMAGE: + { + struct ClcContact *contact; + if (LOWORD(lParam) >= dat->extraColumnsCount) + return 0; + if (!pcli->pfnFindItem(hwnd, dat, (HANDLE) wParam, &contact, NULL, NULL)) + return 0; + contact->iExtraImage[LOWORD(lParam)] = (BYTE) 0xFF; //reset oldstyle icon + contact->iWideExtraImage[LOWORD(lParam)] = (WORD) HIWORD(lParam); //set wide icon + pcli->pfnInvalidateRect(hwnd, NULL, FALSE); + return 0; + } + + case CLM_SETEXTRAIMAGELIST: + { + dat->himlExtraColumns = (HIMAGELIST) lParam; + dat->himlWideExtraColumns = (HIMAGELIST) wParam; + pcli->pfnInvalidateRect(hwnd, NULL, FALSE); + return 0; + } + + case CLM_GETWIDEEXTRAIMAGE: + { + struct ClcContact *contact; + if (LOWORD(lParam) >= dat->extraColumnsCount) + return 0xFFFF; + if (!pcli->pfnFindItem(hwnd, dat, (HANDLE) wParam, &contact, NULL, NULL)) + return 0xFFFF; + return contact->iWideExtraImage[LOWORD(lParam)]; + } + } + return corecli.pfnProcessExternalMessages(hwnd, dat, msg, wParam, lParam); +} -- cgit v1.2.3