diff options
Diffstat (limited to 'plugins/NoHistory')
-rw-r--r-- | plugins/NoHistory/src/common.h | 1 | ||||
-rw-r--r-- | plugins/NoHistory/src/dllmain.cpp | 202 | ||||
-rw-r--r-- | plugins/NoHistory/src/options.cpp | 319 | ||||
-rw-r--r-- | plugins/NoHistory/src/options.h | 1 |
4 files changed, 245 insertions, 278 deletions
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 <m_options.h>
#include <m_message.h>
#include <m_icolib.h>
+#include <m_extraicons.h>
#include <m_utils.h>
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
|