From fdbc72ba5bf64eb06ad1fb62b702589913c73782 Mon Sep 17 00:00:00 2001 From: George Hazan Date: Wed, 9 Jan 2013 12:57:49 +0000 Subject: minor code cleaning for NoHistory git-svn-id: http://svn.miranda-ng.org/main/trunk@3028 1316c22d-e87f-b044-9b9b-93d7a3e3ba9c --- plugins/NoHistory/src/common.h | 1 + plugins/NoHistory/src/dllmain.cpp | 202 ++++++++++-------------- plugins/NoHistory/src/options.cpp | 319 +++++++++++++++++++------------------- plugins/NoHistory/src/options.h | 1 - 4 files changed, 245 insertions(+), 278 deletions(-) (limited to 'plugins/NoHistory/src') diff --git a/plugins/NoHistory/src/common.h b/plugins/NoHistory/src/common.h index 060be9624a..123dd68f46 100644 --- a/plugins/NoHistory/src/common.h +++ b/plugins/NoHistory/src/common.h @@ -22,6 +22,7 @@ #include #include #include +#include #include diff --git a/plugins/NoHistory/src/dllmain.cpp b/plugins/NoHistory/src/dllmain.cpp index 1b2f7048b0..013767b46f 100644 --- a/plugins/NoHistory/src/dllmain.cpp +++ b/plugins/NoHistory/src/dllmain.cpp @@ -18,8 +18,7 @@ static void SrmmMenu_UpdateIcon(HANDLE hContact); static int SrmmMenu_ProcessEvent(WPARAM wParam, LPARAM lParam); static int SrmmMenu_ProcessIconClick(WPARAM wParam, LPARAM lParam); - -HANDLE hEventDbEventAdded, hEventMenuPrebuild, hMenuToggle, hMenuClear, hServiceToggle, hServiceClear, hEventWindow, hEventIconPressed; +HANDLE hMenuToggle, hMenuClear, hServiceToggle, hServiceClear; CRITICAL_SECTION list_cs; @@ -37,7 +36,8 @@ struct EventListNode { EventListNode *event_list = 0; // plugin stuff -PLUGININFOEX pluginInfo={ +PLUGININFOEX pluginInfo = +{ sizeof(PLUGININFOEX), MODULE, PLUGIN_MAKE_VERSION(VER_MAJOR, VER_MINOR, VER_RELEASE, VER_BUILD), @@ -50,23 +50,19 @@ PLUGININFOEX pluginInfo={ { 0xb25e8c7b, 0x292b, 0x495a, { 0x9f, 0xb8, 0xa4, 0xc3, 0xd4, 0xee, 0xb0, 0x4b } } // {B25E8C7B-292B-495a-9FB8-A4C3D4EEB04B} }; -extern "C" BOOL APIENTRY DllMain(HINSTANCE hinstDLL,DWORD fdwReason,LPVOID lpvReserved) { - hInst=hinstDLL; +extern "C" BOOL APIENTRY DllMain(HINSTANCE hinstDLL,DWORD fdwReason,LPVOID lpvReserved) +{ + hInst = hinstDLL; return TRUE; } -extern "C" __declspec (dllexport) PLUGININFOEX* MirandaPluginInfoEx(DWORD mirandaVersion) { +extern "C" __declspec (dllexport) PLUGININFOEX* MirandaPluginInfoEx(DWORD mirandaVersion) +{ return &pluginInfo; } -static const MUUID interfaces[] = {MIID_NOHISTORY, MIID_LAST}; -extern "C" __declspec(dllexport) const MUUID* MirandaPluginInterfaces(void) { - return interfaces; -} - - - -void RemoveReadEvents(HANDLE hContact = 0) { +void RemoveReadEvents(HANDLE hContact = 0) +{ DBEVENTINFO info = {0}; info.cbSize = sizeof(info); bool remove; @@ -75,30 +71,32 @@ void RemoveReadEvents(HANDLE hContact = 0) { EventListNode *node = event_list, *prev = 0; while(node) { remove = false; - if(hContact == 0 || hContact == node->hContact) { + if (hContact == 0 || hContact == node->hContact) { info.cbBlob = 0; - if(!CallService(MS_DB_EVENT_GET, (WPARAM)node->hDBEvent, (LPARAM)&info)) { - if((info.flags & DBEF_READ) || (info.flags & DBEF_SENT)) // note: already checked event type when added to list + if (!CallService(MS_DB_EVENT_GET, (WPARAM)node->hDBEvent, (LPARAM)&info)) { + if ((info.flags & DBEF_READ) || (info.flags & DBEF_SENT)) // note: already checked event type when added to list remove = true; - } else { + } + else { // could not get event info - maybe someone else deleted it - so remove list node remove = true; } } - if(remove) { - if(DBGetContactSettingByte(node->hContact, MODULE, DBSETTING_REMOVE, 0)) // is history disabled for this contact? + if (remove) { + if (db_get_b(node->hContact, MODULE, DBSETTING_REMOVE, 0)) // is history disabled for this contact? CallService(MS_DB_EVENT_DELETE, (WPARAM)node->hContact, (LPARAM)node->hDBEvent); // remove list node anyway - if(event_list == node) event_list = node->next; - if(prev) prev->next = node->next; + if (event_list == node) event_list = node->next; + if (prev) prev->next = node->next; free(node); - if(prev) node = prev->next; + if (prev) node = prev->next; else node = event_list; - } else { + } + else { prev = node; node = node->next; } @@ -107,32 +105,33 @@ void RemoveReadEvents(HANDLE hContact = 0) { LeaveCriticalSection(&list_cs); } -void RemoveAllEvents(HANDLE hContact) { - HANDLE hDBEvent = (HANDLE)CallService(MS_DB_EVENT_FINDFIRST, (WPARAM)hContact, 0), hDBEventNext; +void RemoveAllEvents(HANDLE hContact) +{ + HANDLE hDBEvent = (HANDLE)CallService(MS_DB_EVENT_FINDFIRST, (WPARAM)hContact, 0); while(hDBEvent) { - hDBEventNext = (HANDLE)CallService(MS_DB_EVENT_FINDNEXT, (WPARAM)hDBEvent, 0); + HANDLE hDBEventNext = (HANDLE)CallService(MS_DB_EVENT_FINDNEXT, (WPARAM)hDBEvent, 0); CallService(MS_DB_EVENT_DELETE, (WPARAM)hContact, (LPARAM)hDBEvent); hDBEvent = hDBEventNext; } - } -void CALLBACK TimerProc(HWND hWnd, UINT uMsg, UINT idEvent, DWORD dwTime) { +void CALLBACK TimerProc(HWND hWnd, UINT uMsg, UINT_PTR idEvent, DWORD dwTime) +{ RemoveReadEvents(); } - -int OnDatabaseEventAdd(WPARAM wParam, LPARAM lParam) { +int OnDatabaseEventAdd(WPARAM wParam, LPARAM lParam) +{ HANDLE hContact = (HANDLE)wParam, hDBEvent = (HANDLE)lParam; // history not disabled for this contact - if(DBGetContactSettingByte(hContact, MODULE, DBSETTING_REMOVE, 0) == 0) + if (db_get_b(hContact, MODULE, DBSETTING_REMOVE, 0) == 0) return 0; DBEVENTINFO info = {0}; info.cbSize = sizeof(info); - if(!CallService(MS_DB_EVENT_GET, (WPARAM)hDBEvent, (LPARAM)&info)) { - if(info.eventType == EVENTTYPE_MESSAGE) { + if ( !CallService(MS_DB_EVENT_GET, (WPARAM)hDBEvent, (LPARAM)&info)) { + if (info.eventType == EVENTTYPE_MESSAGE) { EventListNode *node = (EventListNode *)malloc(sizeof(EventListNode)); node->hContact = hContact; node->hDBEvent = hDBEvent; @@ -147,9 +146,9 @@ int OnDatabaseEventAdd(WPARAM wParam, LPARAM lParam) { return 0; } - -INT_PTR ServiceClear(WPARAM wParam, LPARAM lParam) { - if(MessageBox(0, TranslateT("This operation will PERMANENTLY REMOVE all history for this contact.\nAre you sure you want to do this?"), TranslateT("Clear History"), MB_YESNO | MB_ICONWARNING) == IDYES) { +INT_PTR ServiceClear(WPARAM wParam, LPARAM lParam) +{ + if (MessageBox(0, TranslateT("This operation will PERMANENTLY REMOVE all history for this contact.\nAre you sure you want to do this?"), TranslateT("Clear History"), MB_YESNO | MB_ICONWARNING) == IDYES) { HANDLE hContact = (HANDLE)wParam; RemoveAllEvents(hContact); } @@ -157,16 +156,17 @@ INT_PTR ServiceClear(WPARAM wParam, LPARAM lParam) { return 0; } -int PrebuildContactMenu(WPARAM wParam, LPARAM lParam) { +int PrebuildContactMenu(WPARAM wParam, LPARAM lParam) +{ HANDLE hContact = (HANDLE)wParam; - bool remove = (DBGetContactSettingByte(hContact, MODULE, DBSETTING_REMOVE, 0) != 0); + bool remove = db_get_b(hContact, MODULE, DBSETTING_REMOVE, 0) != 0; char *proto = GetContactProto(hContact); - bool chat_room = (proto && DBGetContactSettingByte(hContact, proto, "ChatRoom", 0) != 0); + bool chat_room = (proto && db_get_b(hContact, proto, "ChatRoom", 0) != 0); CLISTMENUITEM mi = { sizeof(mi) }; mi.flags = CMIM_FLAGS|CMIF_TCHAR; - if(chat_room) mi.flags |= CMIF_HIDDEN; + if (chat_room) mi.flags |= CMIF_HIDDEN; else { mi.flags |= (CMIM_NAME | CMIM_ICON); mi.ptszName = (remove ? LPGENT("Enable History") : LPGENT("Disable History")); @@ -175,96 +175,79 @@ int PrebuildContactMenu(WPARAM wParam, LPARAM lParam) { CallService(MS_CLIST_MODIFYMENUITEM, (WPARAM)hMenuToggle, (LPARAM)&mi); mi.flags = CMIM_FLAGS; - if(chat_room) mi.flags |= CMIF_HIDDEN; + if (chat_room) mi.flags |= CMIF_HIDDEN; else { int event_count = (int)CallService(MS_DB_EVENT_GETCOUNT, (WPARAM)hContact, 0); - if(event_count <= 0) mi.flags |= CMIF_HIDDEN; + if (event_count <= 0) mi.flags |= CMIF_HIDDEN; } CallService(MS_CLIST_MODIFYMENUITEM, (WPARAM)hMenuClear, (LPARAM)&mi); return 0; } -INT_PTR ServiceToggle(WPARAM wParam, LPARAM lParam) { +INT_PTR ServiceToggle(WPARAM wParam, LPARAM lParam) +{ HANDLE hContact = (HANDLE)wParam; - int remove = (DBGetContactSettingByte(hContact, MODULE, DBSETTING_REMOVE, 0) != 0); + int remove = db_get_b(hContact, MODULE, DBSETTING_REMOVE, 0) != 0; remove = !remove; - DBWriteContactSettingByte(hContact, MODULE, DBSETTING_REMOVE, (remove ? 1 : 0)); + db_set_b(hContact, MODULE, DBSETTING_REMOVE, remove != 0); StatusIconData sid = {0}; sid.cbSize = sizeof(sid); sid.szModule = MODULE; - - for (int i = 0; i < 2; ++i) - { + for (int i = 0; i < 2; ++i) { sid.dwId = i; sid.flags = (i == remove) ? 0 : MBF_HIDDEN; CallService(MS_MSG_MODIFYICON, (WPARAM)hContact, (LPARAM)&sid); } -/* - sid.dwId = 0; - sid.flags = (remove ? MBF_DISABLED : 0); - CallService(MS_MSG_MODIFYICON, (WPARAM)hContact, (LPARAM)&sid); -*/ return 0; } -int WindowEvent(WPARAM wParam, LPARAM lParam) { +int WindowEvent(WPARAM wParam, LPARAM lParam) +{ MessageWindowEventData *mwd = (MessageWindowEventData *)lParam; HANDLE hContact = mwd->hContact; - int remove = (DBGetContactSettingByte(hContact, MODULE, DBSETTING_REMOVE, 0) != 0); - if(mwd->uType == MSG_WINDOW_EVT_CLOSE) { + if (mwd->uType == MSG_WINDOW_EVT_CLOSE) { RemoveReadEvents(hContact); return 0; } - if(mwd->uType != MSG_WINDOW_EVT_OPEN) return 0; + if (mwd->uType != MSG_WINDOW_EVT_OPEN || !ServiceExists(MS_MSG_MODIFYICON)) + return 0; - if(!ServiceExists(MS_MSG_MODIFYICON)) return 0; - char *proto = GetContactProto(hContact); - bool chat_room = (proto && DBGetContactSettingByte(hContact, proto, "ChatRoom", 0) != 0); - - + bool chat_room = (proto && db_get_b(hContact, proto, "ChatRoom", 0) != 0); + int remove = db_get_b(hContact, MODULE, DBSETTING_REMOVE, 0) != 0; StatusIconData sid = {0}; sid.cbSize = sizeof(sid); sid.szModule = MODULE; -/* - sid.dwId = 0; - sid.flags = (chat_room ? MBF_HIDDEN : (remove ? MBF_DISABLED : 1)); - CallService(MS_MSG_MODIFYICON, (WPARAM)hContact, (LPARAM)&sid); -*/ - - for (int i = 0; i < 2; ++i) - { + for (int i=0; i < 2; ++i) { sid.dwId = i; sid.flags = (chat_room ? MBF_HIDDEN : (i == remove) ? 0 : MBF_HIDDEN); CallService(MS_MSG_MODIFYICON, (WPARAM)hContact, (LPARAM)&sid); } - - return 0; } - - -int IconPressed(WPARAM wParam, LPARAM lParam) { + +int IconPressed(WPARAM wParam, LPARAM lParam) +{ HANDLE hContact = (HANDLE)wParam; StatusIconClickData *sicd = (StatusIconClickData *)lParam; - if(sicd->cbSize < (int)sizeof(StatusIconClickData)) + if (sicd->cbSize < (int)sizeof(StatusIconClickData)) return 0; - if(sicd->flags & MBCF_RIGHTBUTTON) return 0; // ignore right-clicks - if(strcmp(sicd->szModule, MODULE) != 0) return 0; // not our event + if (sicd->flags & MBCF_RIGHTBUTTON) return 0; // ignore right-clicks + if (strcmp(sicd->szModule, MODULE) != 0) return 0; // not our event char *proto = GetContactProto(hContact); - bool chat_room = (proto && DBGetContactSettingByte(hContact, proto, "ChatRoom", 0) != 0); - - if(!chat_room) ServiceToggle((WPARAM)hContact, 0); + bool chat_room = (proto && db_get_b(hContact, proto, "ChatRoom", 0) != 0); + if (!chat_room) + ServiceToggle((WPARAM)hContact, 0); return 0; } @@ -273,14 +256,11 @@ int IconPressed(WPARAM wParam, LPARAM lParam) { // add icon to srmm status icons void SrmmMenu_Load() { - if(ServiceExists(MS_MSG_ADDICON)) { - StatusIconData sid = {0}; - sid.cbSize = sizeof(sid); + if ( ServiceExists(MS_MSG_ADDICON)) { + StatusIconData sid = { sizeof(sid) }; sid.szModule = MODULE; sid.flags = 0; sid.dwId = 0; -// sid.hIcon = hIconKeep; -// sid.hIconDisabled = hIconRemove; sid.szTooltip = Translate("History Enabled"); sid.hIcon = sid.hIconDisabled = hIconKeep; @@ -294,16 +274,13 @@ void SrmmMenu_Load() // hook the window events so that we can can change the status of the icon - hEventWindow = HookEvent(ME_MSG_WINDOWEVENT, WindowEvent); - hEventIconPressed = HookEvent(ME_MSG_ICONPRESSED, IconPressed); + HookEvent(ME_MSG_WINDOWEVENT, WindowEvent); + HookEvent(ME_MSG_ICONPRESSED, IconPressed); } - - } -int ModulesLoaded(WPARAM wParam, LPARAM lParam) { - InitIcons(); - +int ModulesLoaded(WPARAM wParam, LPARAM lParam) +{ // create contact menu item CLISTMENUITEM mi = { sizeof(mi) }; mi.flags = CMIF_TCHAR; @@ -319,48 +296,39 @@ int ModulesLoaded(WPARAM wParam, LPARAM lParam) { mi.pszService = MS_NOHISTORY_CLEAR; mi.hIcon = hIconClear; hMenuClear = Menu_AddMainMenuItem(&mi); - + + // kill read events once in a minute + // SetTimer(NULL, 0, 60000, TimerProc); + // add icon to srmm status icons SrmmMenu_Load(); - return 0; } +extern "C" __declspec (dllexport) int Load() +{ + mir_getLP(&pluginInfo); -HANDLE hModulesLoaded; -extern "C" __declspec (dllexport) int Load() { InitializeCriticalSection(&list_cs); - mir_getLP(&pluginInfo); // Ensure that the common control DLL is loaded (for listview) - INITCOMMONCONTROLSEX icex; - icex.dwSize = sizeof(INITCOMMONCONTROLSEX); - icex.dwICC = ICC_LISTVIEW_CLASSES; + INITCOMMONCONTROLSEX icex = { sizeof(icex), ICC_LISTVIEW_CLASSES }; InitCommonControlsEx(&icex); + InitIcons(); InitOptions(); - hEventMenuPrebuild = HookEvent(ME_CLIST_PREBUILDCONTACTMENU, PrebuildContactMenu); - // hooked so we can track events added to the database - hEventDbEventAdded = HookEvent(ME_DB_EVENT_ADDED, OnDatabaseEventAdd); - // hook modules loaded - hModulesLoaded = HookEvent(ME_SYSTEM_MODULESLOADED, ModulesLoaded); + HookEvent(ME_CLIST_PREBUILDCONTACTMENU, PrebuildContactMenu); + HookEvent(ME_DB_EVENT_ADDED, OnDatabaseEventAdd); + HookEvent(ME_SYSTEM_MODULESLOADED, ModulesLoaded); hServiceToggle = CreateServiceFunction(MS_NOHISTORY_TOGGLE, ServiceToggle); hServiceClear = CreateServiceFunction(MS_NOHISTORY_CLEAR, ServiceClear); - return 0; } -extern "C" __declspec (dllexport) int Unload(void) { - UnhookEvent(hEventWindow); - UnhookEvent(hEventIconPressed); - - UnhookEvent(hModulesLoaded); - DeinitOptions(); - - UnhookEvent(hEventDbEventAdded); - UnhookEvent(hEventMenuPrebuild); +extern "C" __declspec (dllexport) int Unload(void) +{ DestroyServiceFunction(hServiceToggle); DestroyServiceFunction(hServiceClear); diff --git a/plugins/NoHistory/src/options.cpp b/plugins/NoHistory/src/options.cpp index 567e135409..6f5f043f17 100644 --- a/plugins/NoHistory/src/options.cpp +++ b/plugins/NoHistory/src/options.cpp @@ -10,28 +10,39 @@ static void SetListGroupIcons(HWND hwndList,HANDLE hFirstItem,HANDLE hParentItem int iImage; HANDLE hItem; - int typeOfFirst=SendMessage(hwndList,CLM_GETITEMTYPE,(WPARAM)hFirstItem,0); + int typeOfFirst = SendMessage(hwndList,CLM_GETITEMTYPE,(WPARAM)hFirstItem,0); + //check groups - if(typeOfFirst==CLCIT_GROUP) hItem=hFirstItem; - else hItem=(HANDLE)SendMessage(hwndList,CLM_GETNEXTITEM,CLGN_NEXTGROUP,(LPARAM)hFirstItem); + if (typeOfFirst == CLCIT_GROUP) + hItem = hFirstItem; + else + hItem = (HANDLE)SendMessage(hwndList,CLM_GETNEXTITEM,CLGN_NEXTGROUP,(LPARAM)hFirstItem); while(hItem) { - HANDLE hChildItem=(HANDLE)SendMessage(hwndList,CLM_GETNEXTITEM,CLGN_CHILD,(LPARAM)hItem); - if(hChildItem) SetListGroupIcons(hwndList,hChildItem,hItem,&childCount); - if(iconOn && SendMessage(hwndList,CLM_GETEXTRAIMAGE,(WPARAM)hItem,0)==0) iconOn=0; - hItem=(HANDLE)SendMessage(hwndList,CLM_GETNEXTITEM,CLGN_NEXTGROUP,(LPARAM)hItem); + HANDLE hChildItem = (HANDLE)SendMessage(hwndList,CLM_GETNEXTITEM,CLGN_CHILD,(LPARAM)hItem); + if (hChildItem) + SetListGroupIcons(hwndList,hChildItem,hItem,&childCount); + if (iconOn && SendMessage(hwndList,CLM_GETEXTRAIMAGE,(WPARAM)hItem,0) == 0) + iconOn = 0; + hItem = (HANDLE)SendMessage(hwndList,CLM_GETNEXTITEM,CLGN_NEXTGROUP,(LPARAM)hItem); } + //check contacts - if(typeOfFirst==CLCIT_CONTACT) hItem=hFirstItem; - else hItem=(HANDLE)SendMessage(hwndList,CLM_GETNEXTITEM,CLGN_NEXTCONTACT,(LPARAM)hFirstItem); + if (typeOfFirst == CLCIT_CONTACT) + hItem = hFirstItem; + else + hItem = (HANDLE)SendMessage(hwndList,CLM_GETNEXTITEM,CLGN_NEXTCONTACT,(LPARAM)hFirstItem); while(hItem) { - iImage=SendMessage(hwndList,CLM_GETEXTRAIMAGE,(WPARAM)hItem,0); - if(iconOn && iImage==0) iconOn=0; - if(iImage!=0xFF) childCount++; - hItem=(HANDLE)SendMessage(hwndList,CLM_GETNEXTITEM,CLGN_NEXTCONTACT,(LPARAM)hItem); + iImage = SendMessage(hwndList,CLM_GETEXTRAIMAGE,(WPARAM)hItem,0); + if (iconOn && iImage==0) + iconOn = 0; + if (iImage != EMPTY_EXTRA_ICON) + childCount++; + hItem = (HANDLE)SendMessage(hwndList,CLM_GETNEXTITEM,CLGN_NEXTCONTACT,(LPARAM)hItem); } //set icons - SendMessage(hwndList,CLM_SETEXTRAIMAGE,(WPARAM)hParentItem,MAKELPARAM(0,childCount?(iconOn?1:0):0xFF)); - if(groupChildCount) *groupChildCount+=childCount; + SendMessage(hwndList,CLM_SETEXTRAIMAGE,(WPARAM)hParentItem,MAKELPARAM(0, childCount ? (iconOn ? 1 : 0) : EMPTY_EXTRA_ICON)); + if (groupChildCount) + *groupChildCount += childCount; } static void SetAllChildIcons(HWND hwndList,HANDLE hFirstItem,int iColumn,int iImage) @@ -40,24 +51,28 @@ static void SetAllChildIcons(HWND hwndList,HANDLE hFirstItem,int iColumn,int iIm int typeOfFirst=SendMessage(hwndList,CLM_GETITEMTYPE,(WPARAM)hFirstItem,0); //check groups - if(typeOfFirst==CLCIT_GROUP) hItem=hFirstItem; + if (typeOfFirst==CLCIT_GROUP) hItem=hFirstItem; else hItem=(HANDLE)SendMessage(hwndList,CLM_GETNEXTITEM,CLGN_NEXTGROUP,(LPARAM)hFirstItem); while(hItem) { - HANDLE hChildItem=(HANDLE)SendMessage(hwndList,CLM_GETNEXTITEM,CLGN_CHILD,(LPARAM)hItem); - if(hChildItem) SetAllChildIcons(hwndList,hChildItem,iColumn,iImage); - hItem=(HANDLE)SendMessage(hwndList,CLM_GETNEXTITEM,CLGN_NEXTGROUP,(LPARAM)hItem); + HANDLE hChildItem = (HANDLE)SendMessage(hwndList,CLM_GETNEXTITEM,CLGN_CHILD,(LPARAM)hItem); + if (hChildItem) + SetAllChildIcons(hwndList,hChildItem,iColumn,iImage); + hItem = (HANDLE)SendMessage(hwndList,CLM_GETNEXTITEM,CLGN_NEXTGROUP,(LPARAM)hItem); } //check contacts - if(typeOfFirst==CLCIT_CONTACT) hItem=hFirstItem; - else hItem=(HANDLE)SendMessage(hwndList,CLM_GETNEXTITEM,CLGN_NEXTCONTACT,(LPARAM)hFirstItem); + if (typeOfFirst == CLCIT_CONTACT) + hItem = hFirstItem; + else + hItem = (HANDLE)SendMessage(hwndList,CLM_GETNEXTITEM,CLGN_NEXTCONTACT,(LPARAM)hFirstItem); + while(hItem) { - int iOldIcon=SendMessage(hwndList,CLM_GETEXTRAIMAGE,(WPARAM)hItem,iColumn); - if(iOldIcon!=0xFF && iOldIcon!=iImage) SendMessage(hwndList,CLM_SETEXTRAIMAGE,(WPARAM)hItem,MAKELPARAM(iColumn,iImage)); - hItem=(HANDLE)SendMessage(hwndList,CLM_GETNEXTITEM,CLGN_NEXTCONTACT,(LPARAM)hItem); + int iOldIcon = SendMessage(hwndList,CLM_GETEXTRAIMAGE,(WPARAM)hItem,iColumn); + if (iOldIcon != EMPTY_EXTRA_ICON && iOldIcon != iImage) + SendMessage(hwndList,CLM_SETEXTRAIMAGE,(WPARAM)hItem,MAKELPARAM(iColumn,iImage)); + hItem = (HANDLE)SendMessage(hwndList,CLM_GETNEXTITEM,CLGN_NEXTCONTACT,(LPARAM)hItem); } } - static void ResetListOptions(HWND hwndList) { SendMessage(hwndList,CLM_SETBKBITMAP,0,(LPARAM)(HBITMAP)NULL); @@ -65,7 +80,7 @@ static void ResetListOptions(HWND hwndList) SendMessage(hwndList,CLM_SETGREYOUTFLAGS,0,0); SendMessage(hwndList,CLM_SETLEFTMARGIN,2,0); SendMessage(hwndList,CLM_SETINDENT,10,0); - for(int i=0;i<=FONTID_MAX;i++) + for(int i=0; i <= FONTID_MAX; i++) SendMessage(hwndList,CLM_SETTEXTCOLOR,i,GetSysColor(COLOR_WINDOWTEXT)); SetWindowLong(hwndList,GWL_STYLE,GetWindowLong(hwndList,GWL_STYLE)|CLS_SHOWHIDDEN); } @@ -75,179 +90,163 @@ static void SetAllContactIcons(HWND hwndList) HANDLE hContact = db_find_first(); do { char *proto = GetContactProto(hContact); - bool chat_room = (proto && DBGetContactSettingByte(hContact, proto, "ChatRoom", 0) != 0); + bool chat_room = (proto && db_get_b(hContact, proto, "ChatRoom", 0) != 0); - if(!chat_room) { + if (!chat_room) { HANDLE hItem=(HANDLE)SendMessage(hwndList,CLM_FINDCONTACT,(WPARAM)hContact,0); - if(hItem) { - bool disabled = (DBGetContactSettingByte(hContact, MODULE, DBSETTING_REMOVE, 0) == 1); + if (hItem) { + bool disabled = (db_get_b(hContact, MODULE, DBSETTING_REMOVE, 0) == 1); SendMessage(hwndList,CLM_SETEXTRAIMAGE,(WPARAM)hItem,MAKELPARAM(0,disabled?1:0)); } } - } while(hContact = db_find_next(hContact)); + } + while(hContact = db_find_next(hContact)); } - - - -static INT_PTR CALLBACK DlgProcOpts(HWND hwndDlg, UINT msg, WPARAM wParam, LPARAM lParam) { + +static INT_PTR CALLBACK DlgProcOpts(HWND hwndDlg, UINT msg, WPARAM wParam, LPARAM lParam) +{ static HANDLE hItemAll; + static HWND hwndList; switch ( msg ) { case WM_INITDIALOG: TranslateDialogDefault( hwndDlg ); - { HIMAGELIST hIml; - hIml=ImageList_Create(GetSystemMetrics(SM_CXSMICON),GetSystemMetrics(SM_CYSMICON),(IsWinVerXPPlus()?ILC_COLOR32:ILC_COLOR16)|ILC_MASK,2,2); - ImageList_AddIcon(hIml,hIconKeep); - ImageList_AddIcon(hIml,hIconRemove); - SendDlgItemMessage(hwndDlg,IDC_LIST,CLM_SETEXTRAIMAGELIST,0,(LPARAM)hIml); - SendDlgItemMessage(hwndDlg,IDC_PIC_KEEP,STM_SETICON,(WPARAM)hIconKeep,0); - SendDlgItemMessage(hwndDlg,IDC_PIC_REMOVE,STM_SETICON,(WPARAM)hIconRemove,0); + hwndList = GetDlgItem(hwndDlg, IDC_LIST); + { + HIMAGELIST hIml = ImageList_Create( GetSystemMetrics(SM_CXSMICON), GetSystemMetrics(SM_CYSMICON), (IsWinVerXPPlus()?ILC_COLOR32:ILC_COLOR16)|ILC_MASK, 2, 2); + ImageList_AddIcon(hIml, hIconKeep); + ImageList_AddIcon(hIml, hIconRemove); + SendMessage(hwndList, CLM_SETEXTRAIMAGELIST, 0, (LPARAM)hIml); + SendDlgItemMessage(hwndDlg, IDC_PIC_KEEP, STM_SETICON,(WPARAM)hIconKeep, 0); + SendDlgItemMessage(hwndDlg, IDC_PIC_REMOVE, STM_SETICON,(WPARAM)hIconRemove, 0); } - - ResetListOptions(GetDlgItem(hwndDlg,IDC_LIST)); - SendDlgItemMessage(hwndDlg,IDC_LIST,CLM_SETEXTRACOLUMNS,1,0); - - { CLCINFOITEM cii={0}; - cii.cbSize=sizeof(cii); - cii.flags=CLCIIF_GROUPFONT; - cii.pszText=TranslateT("** All contacts **"); - hItemAll=(HANDLE)SendDlgItemMessage(hwndDlg,IDC_LIST,CLM_ADDINFOITEM,0,(LPARAM)&cii); + ResetListOptions(hwndList); + SendMessage(hwndList, CLM_SETEXTRACOLUMNS, 1, 0); + { + CLCINFOITEM cii = { sizeof(cii) }; + cii.flags = CLCIIF_GROUPFONT; + cii.pszText = TranslateT("** All contacts **"); + hItemAll = (HANDLE)SendMessage(hwndList,CLM_ADDINFOITEM, 0, (LPARAM)&cii); } - SetAllContactIcons(GetDlgItem(hwndDlg,IDC_LIST)); - SetListGroupIcons(GetDlgItem(hwndDlg,IDC_LIST),(HANDLE)SendDlgItemMessage(hwndDlg,IDC_LIST,CLM_GETNEXTITEM,CLGN_ROOT,0),hItemAll,NULL); + SetAllContactIcons(hwndList); + SetListGroupIcons(hwndList,(HANDLE)SendMessage(hwndList,CLM_GETNEXTITEM,CLGN_ROOT,0),hItemAll,NULL); SendDlgItemMessage(hwndDlg, IDC_SPN_TIMEOUT, UDM_SETRANGE, 0, (LPARAM)MAKELONG(60 * 60, 1)); + return FALSE; - return FALSE; case WM_SETFOCUS: - SetFocus(GetDlgItem(hwndDlg,IDC_LIST)); + SetFocus(hwndList); break; + case WM_COMMAND: if ( HIWORD( wParam ) == EN_CHANGE && ( HWND )lParam == GetFocus()) SendMessage(GetParent(hwndDlg), PSM_CHANGED, 0, 0); break; + case WM_NOTIFY: switch(((LPNMHDR)lParam)->idFrom) { - case IDC_LIST: - switch (((LPNMHDR)lParam)->code) - { - case CLN_NEWCONTACT: - case CLN_LISTREBUILT: - SetAllContactIcons(GetDlgItem(hwndDlg,IDC_LIST)); - //fall through - case CLN_CONTACTMOVED: - SetListGroupIcons(GetDlgItem(hwndDlg,IDC_LIST),(HANDLE)SendDlgItemMessage(hwndDlg,IDC_LIST,CLM_GETNEXTITEM,CLGN_ROOT,0),hItemAll,NULL); - break; - case CLN_OPTIONSCHANGED: - ResetListOptions(GetDlgItem(hwndDlg,IDC_LIST)); - break; - case NM_CLICK: - { - NMCLISTCONTROL *nm=(NMCLISTCONTROL*)lParam; - DWORD hitFlags; - - // Make sure we have an extra column - if (nm->iColumn == -1) - break; - - // Find clicked item - HANDLE hItem = (HANDLE)SendDlgItemMessage(hwndDlg, IDC_LIST, CLM_HITTEST, (WPARAM)&hitFlags, MAKELPARAM(nm->pt.x,nm->pt.y)); - // Nothing was clicked - if (hItem == NULL) break; - // It was not a visbility icon - if (!(hitFlags & CLCHT_ONITEMEXTRA)) break; - - // Get image in clicked column (0=none, 1=visible, 2=invisible) - int iImage = SendDlgItemMessage(hwndDlg, IDC_LIST, CLM_GETEXTRAIMAGE, (WPARAM)hItem, MAKELPARAM(nm->iColumn, 0)); - if (iImage == 0) - iImage=nm->iColumn + 1; - else - if (iImage == 1) - iImage = 0; - - // Get item type (contact, group, etc...) - int itemType = SendDlgItemMessage(hwndDlg, IDC_LIST, CLM_GETITEMTYPE, (WPARAM)hItem, 0); - - // Update list, making sure that the options are mutually exclusive - if (itemType == CLCIT_CONTACT) { // A contact - SendDlgItemMessage(hwndDlg, IDC_LIST, CLM_SETEXTRAIMAGE, (WPARAM)hItem, MAKELPARAM(nm->iColumn, iImage)); - } - else if (itemType == CLCIT_INFO) { // All Contacts - SetAllChildIcons(GetDlgItem(hwndDlg, IDC_LIST), hItem, nm->iColumn, iImage); - } - else if (itemType == CLCIT_GROUP) { // A group - hItem = (HANDLE)SendDlgItemMessage(hwndDlg, IDC_LIST, CLM_GETNEXTITEM, CLGN_CHILD, (LPARAM)hItem); - if (hItem) { - SetAllChildIcons(GetDlgItem(hwndDlg, IDC_LIST), hItem, nm->iColumn, iImage); - } - } - // Update the all/none icons - SetListGroupIcons(GetDlgItem(hwndDlg, IDC_LIST), (HANDLE)SendDlgItemMessage(hwndDlg, IDC_LIST, CLM_GETNEXTITEM, CLGN_ROOT, 0), hItemAll, NULL); + case IDC_LIST: + switch (((LPNMHDR)lParam)->code) { + case CLN_NEWCONTACT: + case CLN_LISTREBUILT: + SetAllContactIcons(hwndList); + //fall through + case CLN_CONTACTMOVED: + SetListGroupIcons(hwndList,(HANDLE)SendMessage(hwndList,CLM_GETNEXTITEM,CLGN_ROOT,0),hItemAll,NULL); + break; - // Activate Apply button - SendMessage(GetParent(hwndDlg), PSM_CHANGED, 0, 0); - break; - } - } + case CLN_OPTIONSCHANGED: + ResetListOptions(hwndList); break; - case 0: - switch (((LPNMHDR)lParam)->code) - { - case PSN_APPLY: - { - HANDLE hContact = db_find_first(); - do { - char *proto = GetContactProto(hContact); - bool chat_room = (proto && DBGetContactSettingByte(hContact, proto, "ChatRoom", 0) != 0); - - if(!chat_room) { - HANDLE hItem=(HANDLE)SendDlgItemMessage(hwndDlg,IDC_LIST,CLM_FINDCONTACT,(WPARAM)hContact,0); - if(hItem) { - int iImage=SendDlgItemMessage(hwndDlg,IDC_LIST,CLM_GETEXTRAIMAGE,(WPARAM)hItem,MAKELPARAM(0,0)); - DBWriteContactSettingByte(hContact, MODULE, DBSETTING_REMOVE, iImage==1?1:0); - } - } - } while(hContact = db_find_next(hContact)); - - return TRUE; + + case NM_CLICK: + // Make sure we have an extra column + NMCLISTCONTROL *nm=(NMCLISTCONTROL*)lParam; + if (nm->iColumn == -1) + break; + + // Find clicked item + DWORD hitFlags; + HANDLE hItem = (HANDLE)SendMessage(hwndList, CLM_HITTEST, (WPARAM)&hitFlags, MAKELPARAM(nm->pt.x,nm->pt.y)); + if (hItem == NULL || !(hitFlags & CLCHT_ONITEMEXTRA)) + break; + + // Get image in clicked column (0=none, 1=visible, 2=invisible) + int iImage = SendMessage(hwndList, CLM_GETEXTRAIMAGE, (WPARAM)hItem, MAKELPARAM(nm->iColumn, 0)); + if (iImage == 0) + iImage = nm->iColumn + 1; + else if (iImage == 1) + iImage = 0; + + // Update list, making sure that the options are mutually exclusive + switch ( SendMessage(hwndList, CLM_GETITEMTYPE, (WPARAM)hItem, 0)) { + case CLCIT_CONTACT: + SendMessage(hwndList, CLM_SETEXTRAIMAGE, (WPARAM)hItem, MAKELPARAM(nm->iColumn, iImage)); + break; + case CLCIT_INFO: // All Contacts + SetAllChildIcons(hwndList, hItem, nm->iColumn, iImage); + break; + case CLCIT_GROUP: + hItem = (HANDLE)SendMessage(hwndList, CLM_GETNEXTITEM, CLGN_CHILD, (LPARAM)hItem); + if (hItem) + SetAllChildIcons(hwndList, hItem, nm->iColumn, iImage); + } + // Update the all/none icons + SetListGroupIcons(hwndList, (HANDLE)SendMessage(hwndList, CLM_GETNEXTITEM, CLGN_ROOT, 0), hItemAll, NULL); + + // Activate Apply button + SendMessage(GetParent(hwndDlg), PSM_CHANGED, 0, 0); + } + break; + + case 0: + switch (((LPNMHDR)lParam)->code) { + case PSN_APPLY: + HANDLE hContact = db_find_first(); + do { + char *proto = GetContactProto(hContact); + bool chat_room = (proto && db_get_b(hContact, proto, "ChatRoom", 0) != 0); + + if (!chat_room) { + HANDLE hItem = (HANDLE)SendMessage(hwndList,CLM_FINDCONTACT,(WPARAM)hContact,0); + if (hItem) { + int iImage = SendMessage(hwndList,CLM_GETEXTRAIMAGE,(WPARAM)hItem,MAKELPARAM(0,0)); + db_set_b(hContact, MODULE, DBSETTING_REMOVE, iImage==1?1:0); + } } } - break; + while(hContact = db_find_next(hContact)); + + return TRUE; + } } break; + case WM_DESTROY: - { HIMAGELIST hIml=(HIMAGELIST)SendDlgItemMessage(hwndDlg,IDC_LIST,CLM_GETEXTRAIMAGELIST,0,0); - ImageList_Destroy(hIml); - } + ImageList_Destroy((HIMAGELIST)SendMessage(hwndList,CLM_GETEXTRAIMAGELIST,0,0)); break; } return 0; } -int OptInit(WPARAM wParam, LPARAM lParam) { - OPTIONSDIALOGPAGE odp = { 0 }; - odp.cbSize = sizeof(odp); - odp.flags = ODPF_BOLDGROUPS|ODPF_TCHAR; - odp.position = -790000000; - odp.hInstance = hInst; - - odp.pszTemplate = MAKEINTRESOURCEA(IDD_OPT); - odp.ptszTitle = LPGENT("No History"); - odp.ptszGroup = LPGENT("History"); - odp.ptszTab = LPGENT("Logging"); - odp.pfnDlgProc = DlgProcOpts; - Options_AddPage(wParam,&odp); - +int OptInit(WPARAM wParam, LPARAM lParam) +{ + OPTIONSDIALOGPAGE odp = { sizeof(odp) }; + odp.flags = ODPF_BOLDGROUPS|ODPF_TCHAR; + odp.position = -790000000; + odp.hInstance = hInst; + odp.pszTemplate = MAKEINTRESOURCEA(IDD_OPT); + odp.ptszTitle = LPGENT("No History"); + odp.ptszGroup = LPGENT("History"); + odp.ptszTab = LPGENT("Logging"); + odp.pfnDlgProc = DlgProcOpts; + Options_AddPage(wParam, &odp); return 0; } -HANDLE hEventOptInit; -void InitOptions() { - hEventOptInit = HookEvent(ME_OPT_INITIALISE, OptInit); -} - -void DeinitOptions() { - UnhookEvent(hEventOptInit); +void InitOptions() +{ + HookEvent(ME_OPT_INITIALISE, OptInit); } diff --git a/plugins/NoHistory/src/options.h b/plugins/NoHistory/src/options.h index f9825ce47c..c2eba8f246 100644 --- a/plugins/NoHistory/src/options.h +++ b/plugins/NoHistory/src/options.h @@ -4,6 +4,5 @@ extern DWORD event_timeout; void InitOptions(); -void DeinitOptions(); #endif -- cgit v1.2.3