From cb4a46e7fbe62d788e66ed6121c717a2d22a4d7c Mon Sep 17 00:00:00 2001 From: watcherhd Date: Thu, 21 Apr 2011 14:14:52 +0000 Subject: svn.miranda.im is moving to a new home! git-svn-id: http://miranda-plugins.googlecode.com/svn/trunk@7 e753b5eb-9565-29b2-b5c5-2cc6f99dfbcb --- stopspam/src/opt_proto.cpp | 137 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 137 insertions(+) create mode 100644 stopspam/src/opt_proto.cpp (limited to 'stopspam/src/opt_proto.cpp') diff --git a/stopspam/src/opt_proto.cpp b/stopspam/src/opt_proto.cpp new file mode 100644 index 0000000..201fba6 --- /dev/null +++ b/stopspam/src/opt_proto.cpp @@ -0,0 +1,137 @@ +#include "../headers.h" + +struct ProtocolData +{ + char *RealName; + int show,enabled; +}; + +int IsProtoIM(const PROTOACCOUNT* pa) +{ + return (CallProtoService(pa->szModuleName, PS_GETCAPS, PFLAGNUM_1, 0) & PF1_IM); +} + +int FillTree(HWND hwnd) +{ + ProtocolData *PD; + int i,n; + PROTOACCOUNT** pa; + + TVINSERTSTRUCT tvis; + tvis.hParent = NULL; + tvis.hInsertAfter = TVI_LAST; + tvis.item.mask = TVIF_PARAM|TVIF_TEXT|TVIF_IMAGE|TVIF_SELECTEDIMAGE; + + TreeView_DeleteAllItems(hwnd); + + if(CallService(MS_PROTO_ENUMACCOUNTS, (LPARAM)&n, (WPARAM)&pa)) + return FALSE; + + for ( i = 0; i < n; i++ ) { + if(IsAccountEnabled( pa[i] )){ + PD = ( ProtocolData* )mir_alloc( sizeof( ProtocolData )); + PD->RealName = pa[i]->szModuleName; + PD->enabled = IsProtoIM( pa[i]); + PD->show = PD->enabled ? (plSets->ProtoDisabled(PD->RealName)?1:0) : 100; + + tvis.item.lParam = ( LPARAM )PD; + tvis.item.pszText = pa[i]->tszAccountName; + tvis.item.iImage = tvis.item.iSelectedImage = PD->show; + TreeView_InsertItem( hwnd, &tvis ); + } + } + + return 0; +} + +INT_PTR CALLBACK ProtoDlgProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam) +{ + HWND hwndProto = GetDlgItem(hwnd, IDC_PROTO); + + switch (msg) + { + + case WM_INITDIALOG: + TranslateDialogDefault(hwnd); + + SetWindowLong(hwndProto, GWL_STYLE, GetWindowLong(hwndProto, GWL_STYLE) | TVS_NOHSCROLL); + { + HIMAGELIST himlCheckBoxes = ImageList_Create( GetSystemMetrics( SM_CXSMICON ), GetSystemMetrics( SM_CYSMICON ), ILC_COLOR32|ILC_MASK, 2, 2 ); + HICON Icon; + Icon=(HICON)LoadSkinnedIcon(SKINICON_OTHER_NOTICK); + ImageList_AddIcon(himlCheckBoxes, Icon); + CallService(MS_SKIN2_RELEASEICON, (WPARAM)Icon, 0); + Icon=(HICON)LoadSkinnedIcon(SKINICON_OTHER_TICK); + ImageList_AddIcon(himlCheckBoxes, Icon); + CallService(MS_SKIN2_RELEASEICON, (WPARAM)Icon, 0); + + TreeView_SetImageList(hwndProto, himlCheckBoxes, TVSIL_NORMAL); + } + + FillTree(hwndProto); + return TRUE; + + case WM_NOTIFY: + switch(((LPNMHDR)lParam)->idFrom) { + case 0: + if (((LPNMHDR)lParam)->code == PSN_APPLY ) { + + std::ostringstream out; + + TVITEM tvi; + tvi.hItem = TreeView_GetRoot(hwndProto); + tvi.cchTextMax = 32; + tvi.mask = TVIF_PARAM | TVIF_HANDLE; + + while ( tvi.hItem != NULL ) { + TreeView_GetItem(hwndProto, &tvi); + + if (tvi.lParam!=0) { + ProtocolData* ppd = ( ProtocolData* )tvi.lParam; + if(ppd->enabled && ppd->show) + out << ppd->RealName << " "; + } + + tvi.hItem = TreeView_GetNextSibling(hwndProto, tvi.hItem ); + } + + plSets->DisabledProtoList=out.str(); + } + break; + + case IDC_PROTO: + switch (((LPNMHDR)lParam)->code) { + case TVN_DELETEITEMA: + { + NMTREEVIEWA * pnmtv = (NMTREEVIEWA *) lParam; + if (pnmtv && pnmtv->itemOld.lParam) + mir_free((ProtocolData*)pnmtv->itemOld.lParam); + } + break; + + case NM_CLICK: + { + TVHITTESTINFO hti; + hti.pt.x=(short)LOWORD(GetMessagePos()); + hti.pt.y=(short)HIWORD(GetMessagePos()); + ScreenToClient(((LPNMHDR)lParam)->hwndFrom,&hti.pt); + if ( TreeView_HitTest(((LPNMHDR)lParam)->hwndFrom, &hti )) { + if ( hti.flags & TVHT_ONITEMICON ) { + TVITEMA tvi; + tvi.mask = TVIF_HANDLE|TVIF_IMAGE|TVIF_SELECTEDIMAGE; + tvi.hItem = hti.hItem; + TreeView_GetItem(((LPNMHDR)lParam)->hwndFrom,&tvi); + + ProtocolData *pData = ( ProtocolData* )tvi.lParam; + if ( pData->enabled ) { + tvi.iImage = tvi.iSelectedImage = !tvi.iImage; + pData->show = tvi.iImage; + TreeView_SetItem(((LPNMHDR)lParam)->hwndFrom,&tvi); + SendMessage(GetParent(hwnd), PSM_CHANGED, (WPARAM)hwnd, 0); + } } } } } + break; + } + break; + } + return FALSE; +} -- cgit v1.2.3