summaryrefslogtreecommitdiff
path: root/plugins/IEHistory
diff options
context:
space:
mode:
Diffstat (limited to 'plugins/IEHistory')
-rw-r--r--plugins/IEHistory/src/IEHistory.cpp14
-rw-r--r--plugins/IEHistory/src/dlgHandlers.cpp1365
-rw-r--r--plugins/IEHistory/src/events.cpp2
-rw-r--r--plugins/IEHistory/src/services.cpp11
-rw-r--r--plugins/IEHistory/src/utils.cpp200
5 files changed, 793 insertions, 799 deletions
diff --git a/plugins/IEHistory/src/IEHistory.cpp b/plugins/IEHistory/src/IEHistory.cpp
index babf561f3d..01da6e43e0 100644
--- a/plugins/IEHistory/src/IEHistory.cpp
+++ b/plugins/IEHistory/src/IEHistory.cpp
@@ -28,22 +28,22 @@ HINSTANCE hInstance;
HANDLE hOpenWindowsList = NULL;
HMODULE hUxTheme = 0;
-BOOL (WINAPI *MyEnableThemeDialogTexture)(HANDLE, DWORD) = NULL;
+BOOL(WINAPI *MyEnableThemeDialogTexture)(HANDLE, DWORD) = NULL;
PLUGININFOEX pluginInfo = {
sizeof(PLUGININFOEX),
__PLUGIN_DISPLAY_NAME,
__VERSION_DWORD,
__DESC,
- __AUTHOR,__AUTHOREMAIL,
+ __AUTHOR, __AUTHOREMAIL,
__COPYRIGHT,
__AUTHORWEB,
UNICODE_AWARE,
// {2f093b88-f389-44f1-9e2a-37c29194203a}
- {0x2f093b88, 0xf389, 0x44f1, {0x9e, 0x2a, 0x37, 0xc2, 0x91, 0x94, 0x20, 0x3a}}
+ { 0x2f093b88, 0xf389, 0x44f1, { 0x9e, 0x2a, 0x37, 0xc2, 0x91, 0x94, 0x20, 0x3a } }
};
-extern "C" __declspec(dllexport) PLUGININFOEX *MirandaPluginInfoEx(DWORD mirandaVersion)
+extern "C" __declspec(dllexport) PLUGININFOEX *MirandaPluginInfoEx(DWORD mirandaVersion)
{
return &pluginInfo;
}
@@ -70,10 +70,10 @@ extern "C" int __declspec(dllexport) Load(void)
/// all initialization here
hIcon = LoadIcon(hInstance, MAKEINTRESOURCE(IDI_HISTORYICON));
- hOpenWindowsList = (HANDLE) CallService(MS_UTILS_ALLOCWINDOWLIST, 0, 0);
+ hOpenWindowsList = (HANDLE)CallService(MS_UTILS_ALLOCWINDOWLIST, 0, 0);
InitServices();
-
+
/// menu items
CLISTMENUITEM menuItem = { sizeof(CLISTMENUITEM) };
menuItem.ptszName = LPGENT("View &history");
@@ -82,7 +82,7 @@ extern "C" int __declspec(dllexport) Load(void)
menuItem.hIcon = hIcon;
menuItem.pszService = MS_HISTORY_SHOWCONTACTHISTORY;
Menu_AddContactMenuItem(&menuItem);
-/// @todo (White-Tiger#1#08/19/14): fully implement System History someday^^
+ /// @todo (White-Tiger#1#08/19/14): fully implement System History someday^^
menuItem.ptszName = LPGENT("&System History");
Menu_AddMainMenuItem(&menuItem);
diff --git a/plugins/IEHistory/src/dlgHandlers.cpp b/plugins/IEHistory/src/dlgHandlers.cpp
index 187dcd7bbe..9eabc49d2b 100644
--- a/plugins/IEHistory/src/dlgHandlers.cpp
+++ b/plugins/IEHistory/src/dlgHandlers.cpp
@@ -1,688 +1,681 @@
-/*
-IEView history viewer plugin for Miranda IM
-
-Copyright © 2005-2006 Cristian Libotean
-
-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 "stdafx.h"
-#include "dlgHandlers.h"
-
-//#define GAP_SIZE 2
-#define GAP_SIZE 0
-#define MIN_HISTORY_WIDTH 350
-#define MIN_HISTORY_HEIGHT 100
-
-struct WorkerThreadData{
- HWND hWnd;
- HistoryWindowData *data;
- IEVIEWEVENT ieEvent;
-};
-
-void LoadName(HWND hWnd);
-int CalcIEViewPos(IEVIEWWINDOW *ieWnd, HWND hMainWindow);
-int LoadIEView(HWND hWnd);
-int MoveIEView(HWND hWnd);
-int DestroyIEView(HWND hWnd);
-int LoadEvents(HWND hWnd);
-int LoadPage(HWND hWnd, MEVENT hFirstEvent, long index, long shiftCount, long readCount, int direction);
-int LoadNext(HWND hWnd);
-int LoadPrev(HWND hWnd);
-int ScrollToBottom(HWND hWnd);
-
-void RefreshButtonStates(HWND hWnd);
-
-MEVENT GetNeededEvent(MEVENT hLastFirstEvent, int num, int direction);
-
-int CalcIEViewPos(IEVIEWWINDOW *ieWnd, HWND hMainWindow)
-{
- RECT rect;
- GetWindowRect(GetDlgItem(hMainWindow, IDC_IEVIEW_PLACEHOLDER), &rect);
- rect.right -= rect.left; rect.bottom -= rect.top;
- ScreenToClient(hMainWindow, (POINT*)&rect);
-
- /// @todo : find out why -1/+1 is required... or why IEView uses a border...
- ieWnd->x = -1 + rect.left + GAP_SIZE;
- ieWnd->y = -1 + rect.top + GAP_SIZE;
- ieWnd->cx = 2 + rect.right - (2 * GAP_SIZE);
- ieWnd->cy = 2 + rect.bottom - (2 * GAP_SIZE);
- return 0;
-}
-
-void LoadName(HWND hWnd)
-{
- HistoryWindowData *data = (HistoryWindowData *)GetWindowLongPtr(hWnd, DWLP_USER);
- if (!data->contact) {
- SetWindowText(hWnd, TranslateT("System History"));
- return;
- }
- TCHAR *szOther = GetContactName(data->contact);
- TCHAR buffer[1024];
- sntprintf(buffer, 1024, _T("'%s' - IEHistory"), szOther);
- SetWindowText(hWnd, buffer);
- mir_free(szOther);
-}
-
-int LoadIEView(HWND hWnd)
-{
- IEVIEWWINDOW ieWnd = { sizeof(ieWnd) };
- ieWnd.iType = IEW_CREATE;
- ieWnd.dwMode = IEWM_HISTORY;
- ieWnd.dwFlags = 0;
- ieWnd.parent = hWnd;
- CalcIEViewPos(&ieWnd, hWnd);
-
- CallService(MS_IEVIEW_WINDOW, 0, (LPARAM)&ieWnd);
- HistoryWindowData *data = (HistoryWindowData *)GetWindowLongPtr(hWnd, DWLP_USER);
- data->hIEView = ieWnd.hwnd;
- return 0;
-}
-
-int MoveIeView(HWND hWnd)
-{
- HistoryWindowData *data = (HistoryWindowData *)GetWindowLongPtr(hWnd, DWLP_USER);
- if (data) {
- IEVIEWWINDOW ieWnd = { 0 };
- ieWnd.cbSize = sizeof(ieWnd);
- ieWnd.parent = hWnd;
- ieWnd.hwnd = data->hIEView;
- ieWnd.iType = IEW_SETPOS;
- CalcIEViewPos(&ieWnd, hWnd);
- CallService(MS_IEVIEW_WINDOW, 0, (LPARAM)&ieWnd);
- }
- return 0;
-}
-
-int DestroyIEView(HWND hWnd)
-{
- HistoryWindowData *data = (HistoryWindowData *)GetWindowLongPtr(hWnd, DWLP_USER);
- IEVIEWWINDOW ieWnd = { 0 };
- ieWnd.cbSize = sizeof(ieWnd);
- ieWnd.parent = hWnd;
- ieWnd.hwnd = data->hIEView;
- ieWnd.iType = IEW_DESTROY;
- CallService(MS_IEVIEW_WINDOW, 0, (LPARAM)&ieWnd);
- return 0;
-}
-
-void FillIEViewInfo(IEVIEWEVENTDATA *fillData, DBEVENTINFO dbInfo, PBYTE blob)
-{
- switch (dbInfo.eventType) {
- case EVENTTYPE_MESSAGE:
- fillData->iType = IEED_EVENT_MESSAGE;
- break;
- case EVENTTYPE_STATUS:
- fillData->iType = IEED_EVENT_STATUSCHANGE;
- break;
- case EVENTTYPE_FILE:
- fillData->iType = IEED_EVENT_FILE;
- break;
- case EVENTTYPE_URL:
- fillData->iType = IEED_EVENT_URL;
- break;
- }
- fillData->pszNick = "<nick here>";
- fillData->bIsMe = (dbInfo.flags & DBEF_SENT);
- fillData->dwFlags = (dbInfo.flags & DBEF_SENT) ? IEEDF_SENT : 0;
- fillData->time = dbInfo.timestamp;
- size_t len = strlen((char *)blob) + 1;
- PBYTE pos;
-
- fillData->pszText = (char *)blob;
- // fillData.pszText2 = (char *) blob;
- if (len < dbInfo.cbBlob) {
- pos = blob + len;
- fillData->pszTextW = (wchar_t *)pos;
- // fillData->pszText2W = (wchar_t *) pos;
- fillData->dwFlags |= IEEDF_UNICODE_TEXT;
- }
-}
-
-DWORD WINAPI WorkerThread(LPVOID lpvData)
-{
- Log("%s", "Inside worker thread ...");
- WorkerThreadData *data = (WorkerThreadData *)lpvData;
- EnableWindow(GetDlgItem(data->hWnd, IDC_CLOSE), FALSE);
- const int LOAD_COUNT = 10;
- int count = 0;
- int target = data->ieEvent.count;
- int cLoad = LOAD_COUNT;
- int i;
- IEVIEWEVENTDATA ieData[LOAD_COUNT] = { 0 };
- PBYTE messages[LOAD_COUNT] = { 0 };
- MEVENT dbEvent = data->ieEvent.hDbEventFirst;
- for (i = 0; i < LOAD_COUNT; i++) {
- ieData[i].cbSize = sizeof(IEVIEWEVENTDATA); //set the cbsize here, no need to do it every time
- ieData[i].next = &ieData[i + 1]; //it's a vector, so v[i]'s next element is v[i + 1]
- }
- ieData[LOAD_COUNT - 1].next = NULL;
- IEVIEWEVENT ieEvent = data->ieEvent;
- ieEvent.iType = IEE_LOG_MEM_EVENTS;
- ieEvent.eventData = ieData;
- DBEVENTINFO dbInfo = { 0 };
- dbInfo.cbSize = sizeof(DBEVENTINFO);
- PBYTE buffer = NULL;
- int newSize, oldSize = 0;
- while (count < target) {
- cLoad = (count + LOAD_COUNT > target) ? target - count : LOAD_COUNT;
- ieEvent.count = -1;
-
- for (i = 0; i < cLoad; i++) {
- newSize = db_event_getBlobSize(dbEvent);
- if (newSize > oldSize) {
- buffer = (PBYTE)realloc(buffer, newSize);
- dbInfo.pBlob = buffer;
- oldSize = newSize;
- }
- messages[i] = (PBYTE)realloc(messages[i], newSize);
- dbInfo.cbBlob = newSize;
- if (!db_event_get(dbEvent, &dbInfo)) {
- memcpy(messages[i], dbInfo.pBlob, newSize);
- FillIEViewInfo(&ieData[i], dbInfo, messages[i]);
- }
- //FillIEViewEventData(&ieData[i], dbEvent);
- dbEvent = db_event_next(0, dbEvent);
- }
- ieData[cLoad - 1].next = NULL; //cLoad < LOAD_COUNT will only happen once, at the end
- CallService(MS_IEVIEW_EVENT, 0, (LPARAM)&ieEvent);
- count += cLoad;
- }
- for (i = 0; i < LOAD_COUNT; i++)
- free(messages[i]);
-
- free(buffer);
- EnableWindow(GetDlgItem(data->hWnd, IDC_CLOSE), TRUE);
- free(data);
- //RefreshButtonStates(data->hWnd);
- Log("%s", "WorkerThread finished ... returning");
- return 0;
-}
-
-int DoLoadEvents(HWND hWnd, HistoryWindowData *data, IEVIEWEVENT ieEvent)
-{
- ieEvent.iType = IEE_CLEAR_LOG;
- CallService(MS_IEVIEW_EVENT, 0, (LPARAM)&ieEvent);
- if (data->loadMethod == LOAD_IN_BACKGROUND) {
- WorkerThreadData *threadData = (WorkerThreadData *)malloc(sizeof(WorkerThreadData));
- threadData->data = data;
- threadData->hWnd = hWnd;
- threadData->ieEvent = ieEvent;
- WorkerThread(threadData);
- /*
- DWORD threadID;
- HANDLE thread = CreateThread(NULL, 0, WorkerThread, threadData, 0, &threadID);
- if (!thread)
- {
- MessageBox(hWnd, TranslateT("An error occured while trying to create the worker thread (%m)"), TranslateT("Error"), MB_OK | MB_ICONERROR);
- } */
- }
- else {
- ieEvent.iType = IEE_LOG_DB_EVENTS;
- CallService(MS_IEVIEW_EVENT, 0, (LPARAM)&ieEvent);
- ScrollToBottom(hWnd);
-
- TCHAR buffer[256];
- itot(data->index + 1, buffer, 10);
- SendDlgItemMessage(hWnd, IDC_STATUSBAR, SB_SETTEXT, 0 | SBT_POPOUT, (LPARAM)buffer);
- itot(data->index + ieEvent.count, buffer, 10);
- SendDlgItemMessage(hWnd, IDC_STATUSBAR, SB_SETTEXT, 1 | SBT_POPOUT, (LPARAM)buffer);
- itot(data->count, buffer, 10);
- SendDlgItemMessage(hWnd, IDC_STATUSBAR, SB_SETTEXT, 3 | SBT_POPOUT, (LPARAM)buffer);
- RefreshButtonStates(hWnd);
- }
- return 0;
-}
-
-int LoadEvents(HWND hWnd)
-{
- HistoryWindowData *data = (HistoryWindowData *)GetWindowLongPtr(hWnd, DWLP_USER);
- int count = db_event_count(data->contact);
- int bLastFirst = db_get_b(NULL, ModuleName, "ShowLastPageFirst", 0);
- int bRTL = db_get_b(NULL, ModuleName, "EnableRTL", 0);
- bRTL = db_get_b(data->contact, "Tab_SRMsg", "RTL", bRTL);
- data->bEnableRTL = bRTL;
- data->count = count;
- if (data->itemsPerPage > count)
- data->itemsPerPage = count;
-
- IEVIEWEVENT ieEvent = { sizeof(ieEvent) };
- ieEvent.hwnd = data->hIEView;
- ieEvent.hContact = data->contact;
- ieEvent.count = (data->itemsPerPage <= 0) ? count : data->itemsPerPage;
-
- MEVENT hFirstEvent = db_event_first(data->contact);
- int num = 0;
- if ((data->itemsPerPage > 0) && (bLastFirst)) {
- num = data->count - data->itemsPerPage;
- hFirstEvent = GetNeededEvent(hFirstEvent, num, DIRECTION_FORWARD);
- }
- data->index = num;
- data->hLastFirstEvent = hFirstEvent;
- ieEvent.hDbEventFirst = hFirstEvent;
- if (data->bEnableRTL)
- ieEvent.dwFlags |= IEEF_RTL;
-
- DoLoadEvents(hWnd, data, ieEvent);
- return 0;
-}
-
-int LoadPage(HWND hWnd, MEVENT hFirstEvent, long index, long shiftCount, long readCount, int direction)
-{
- HistoryWindowData *data = (HistoryWindowData *)GetWindowLongPtr(hWnd, DWLP_USER);
- int count = shiftCount;
- int newIndex = index;
- IEVIEWEVENT ieEvent = { sizeof(ieEvent) };
- ieEvent.hwnd = data->hIEView;
- ieEvent.hContact = data->contact;
-
- if (direction == DIRECTION_BACK) {
- newIndex -= shiftCount;
- if (newIndex < 0) {
- newIndex = 0;
- count = index;
- }
- }
- else {
- newIndex += shiftCount;
- if (newIndex + readCount > data->count) {
- count = data->count - newIndex;
- newIndex = data->count - readCount;
- }
- }
- data->index = newIndex;
- MEVENT hEvent = GetNeededEvent(hFirstEvent, count, direction);
- data->hLastFirstEvent = hEvent;
- ieEvent.hDbEventFirst = hEvent;
- ieEvent.count = readCount;
- if (data->bEnableRTL)
- ieEvent.dwFlags |= IEEF_RTL;
-
- DoLoadEvents(hWnd, data, ieEvent);
- return 0;
-}
-
-int LoadPrev(HWND hWnd)
-{
- HistoryWindowData *data = (HistoryWindowData *)GetWindowLongPtr(hWnd, DWLP_USER);
- LoadPage(hWnd, data->hLastFirstEvent, data->index, data->itemsPerPage, data->itemsPerPage, DIRECTION_BACK);
- int finish = data->index <= 0;
- return finish;
-}
-
-int LoadNext(HWND hWnd)
-{
- HistoryWindowData *data = (HistoryWindowData *)GetWindowLongPtr(hWnd, DWLP_USER);
- LoadPage(hWnd, data->hLastFirstEvent, data->index, data->itemsPerPage, data->itemsPerPage, DIRECTION_FORWARD);
- int finish = data->index + data->itemsPerPage >= data->count;
- return finish;
-}
-
-int ScrollToBottom(HWND hWnd)
-{
- HistoryWindowData *data = (HistoryWindowData *)GetWindowLongPtr(hWnd, DWLP_USER);
- IEVIEWWINDOW ieWnd = { 0 };
- ieWnd.cbSize = sizeof(ieWnd);
- ieWnd.iType = IEW_SCROLLBOTTOM;
- ieWnd.hwnd = data->hIEView;
- ieWnd.parent = hWnd;
- CallService(MS_IEVIEW_WINDOW, 0, (LPARAM)&ieWnd);
- return 0;
-}
-
-void AddAnchorWindowToDeferList(HDWP &hdWnds, HWND window, RECT *rParent, WINDOWPOS *wndPos, int anchors)
-{
+/*
+IEView history viewer plugin for Miranda IM
+
+Copyright © 2005-2006 Cristian Libotean
+
+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 "stdafx.h"
+#include "dlgHandlers.h"
+
+//#define GAP_SIZE 2
+#define GAP_SIZE 0
+#define MIN_HISTORY_WIDTH 350
+#define MIN_HISTORY_HEIGHT 100
+
+struct WorkerThreadData{
+ HWND hWnd;
+ HistoryWindowData *data;
+ IEVIEWEVENT ieEvent;
+};
+
+void LoadName(HWND hWnd);
+int CalcIEViewPos(IEVIEWWINDOW *ieWnd, HWND hMainWindow);
+int LoadIEView(HWND hWnd);
+int MoveIEView(HWND hWnd);
+int DestroyIEView(HWND hWnd);
+int LoadEvents(HWND hWnd);
+int LoadPage(HWND hWnd, MEVENT hFirstEvent, long index, long shiftCount, long readCount, int direction);
+int LoadNext(HWND hWnd);
+int LoadPrev(HWND hWnd);
+int ScrollToBottom(HWND hWnd);
+
+void RefreshButtonStates(HWND hWnd);
+
+MEVENT GetNeededEvent(MEVENT hLastFirstEvent, int num, int direction);
+
+int CalcIEViewPos(IEVIEWWINDOW *ieWnd, HWND hMainWindow)
+{
+ RECT rect;
+ GetWindowRect(GetDlgItem(hMainWindow, IDC_IEVIEW_PLACEHOLDER), &rect);
+ rect.right -= rect.left; rect.bottom -= rect.top;
+ ScreenToClient(hMainWindow, (POINT*)&rect);
+
+ /// @todo : find out why -1/+1 is required... or why IEView uses a border...
+ ieWnd->x = -1 + rect.left + GAP_SIZE;
+ ieWnd->y = -1 + rect.top + GAP_SIZE;
+ ieWnd->cx = 2 + rect.right - (2 * GAP_SIZE);
+ ieWnd->cy = 2 + rect.bottom - (2 * GAP_SIZE);
+ return 0;
+}
+
+void LoadName(HWND hWnd)
+{
+ HistoryWindowData *data = (HistoryWindowData *)GetWindowLongPtr(hWnd, DWLP_USER);
+ if (!data->contact) {
+ SetWindowText(hWnd, TranslateT("System History"));
+ return;
+ }
+ TCHAR *szOther = GetContactName(data->contact);
+ TCHAR buffer[1024];
+ sntprintf(buffer, 1024, _T("'%s' - IEHistory"), szOther);
+ SetWindowText(hWnd, buffer);
+ mir_free(szOther);
+}
+
+int LoadIEView(HWND hWnd)
+{
+ IEVIEWWINDOW ieWnd = { sizeof(ieWnd) };
+ ieWnd.iType = IEW_CREATE;
+ ieWnd.dwMode = IEWM_HISTORY;
+ ieWnd.dwFlags = 0;
+ ieWnd.parent = hWnd;
+ CalcIEViewPos(&ieWnd, hWnd);
+
+ CallService(MS_IEVIEW_WINDOW, 0, (LPARAM)&ieWnd);
+ HistoryWindowData *data = (HistoryWindowData *)GetWindowLongPtr(hWnd, DWLP_USER);
+ data->hIEView = ieWnd.hwnd;
+ return 0;
+}
+
+int MoveIeView(HWND hWnd)
+{
+ HistoryWindowData *data = (HistoryWindowData *)GetWindowLongPtr(hWnd, DWLP_USER);
+ if (data) {
+ IEVIEWWINDOW ieWnd = { 0 };
+ ieWnd.cbSize = sizeof(ieWnd);
+ ieWnd.parent = hWnd;
+ ieWnd.hwnd = data->hIEView;
+ ieWnd.iType = IEW_SETPOS;
+ CalcIEViewPos(&ieWnd, hWnd);
+ CallService(MS_IEVIEW_WINDOW, 0, (LPARAM)&ieWnd);
+ }
+ return 0;
+}
+
+int DestroyIEView(HWND hWnd)
+{
+ HistoryWindowData *data = (HistoryWindowData *)GetWindowLongPtr(hWnd, DWLP_USER);
+ IEVIEWWINDOW ieWnd = { 0 };
+ ieWnd.cbSize = sizeof(ieWnd);
+ ieWnd.parent = hWnd;
+ ieWnd.hwnd = data->hIEView;
+ ieWnd.iType = IEW_DESTROY;
+ CallService(MS_IEVIEW_WINDOW, 0, (LPARAM)&ieWnd);
+ return 0;
+}
+
+void FillIEViewInfo(IEVIEWEVENTDATA *fillData, DBEVENTINFO dbInfo, PBYTE blob)
+{
+ switch (dbInfo.eventType) {
+ case EVENTTYPE_MESSAGE:
+ fillData->iType = IEED_EVENT_MESSAGE;
+ break;
+ case EVENTTYPE_STATUS:
+ fillData->iType = IEED_EVENT_STATUSCHANGE;
+ break;
+ case EVENTTYPE_FILE:
+ fillData->iType = IEED_EVENT_FILE;
+ break;
+ case EVENTTYPE_URL:
+ fillData->iType = IEED_EVENT_URL;
+ break;
+ }
+ fillData->pszNick = "<nick here>";
+ fillData->bIsMe = (dbInfo.flags & DBEF_SENT);
+ fillData->dwFlags = (dbInfo.flags & DBEF_SENT) ? IEEDF_SENT : 0;
+ fillData->time = dbInfo.timestamp;
+ size_t len = strlen((char *)blob) + 1;
+ PBYTE pos;
+
+ fillData->pszText = (char *)blob;
+ // fillData.pszText2 = (char *) blob;
+ if (len < dbInfo.cbBlob) {
+ pos = blob + len;
+ fillData->pszTextW = (wchar_t *)pos;
+ // fillData->pszText2W = (wchar_t *) pos;
+ fillData->dwFlags |= IEEDF_UNICODE_TEXT;
+ }
+}
+
+DWORD WINAPI WorkerThread(LPVOID lpvData)
+{
+ Log("%s", "Inside worker thread ...");
+ WorkerThreadData *data = (WorkerThreadData *)lpvData;
+ EnableWindow(GetDlgItem(data->hWnd, IDC_CLOSE), FALSE);
+ const int LOAD_COUNT = 10;
+ int count = 0;
+ int target = data->ieEvent.count;
+ int cLoad = LOAD_COUNT;
+ int i;
+ IEVIEWEVENTDATA ieData[LOAD_COUNT] = { 0 };
+ PBYTE messages[LOAD_COUNT] = { 0 };
+ MEVENT dbEvent = data->ieEvent.hDbEventFirst;
+ for (i = 0; i < LOAD_COUNT; i++) {
+ ieData[i].cbSize = sizeof(IEVIEWEVENTDATA); //set the cbsize here, no need to do it every time
+ ieData[i].next = &ieData[i + 1]; //it's a vector, so v[i]'s next element is v[i + 1]
+ }
+ ieData[LOAD_COUNT - 1].next = NULL;
+ IEVIEWEVENT ieEvent = data->ieEvent;
+ ieEvent.iType = IEE_LOG_MEM_EVENTS;
+ ieEvent.eventData = ieData;
+ DBEVENTINFO dbInfo = { 0 };
+ dbInfo.cbSize = sizeof(DBEVENTINFO);
+ PBYTE buffer = NULL;
+ int newSize, oldSize = 0;
+ while (count < target) {
+ cLoad = (count + LOAD_COUNT > target) ? target - count : LOAD_COUNT;
+ ieEvent.count = -1;
+
+ for (i = 0; i < cLoad; i++) {
+ newSize = db_event_getBlobSize(dbEvent);
+ if (newSize > oldSize) {
+ buffer = (PBYTE)realloc(buffer, newSize);
+ dbInfo.pBlob = buffer;
+ oldSize = newSize;
+ }
+ messages[i] = (PBYTE)realloc(messages[i], newSize);
+ dbInfo.cbBlob = newSize;
+ if (!db_event_get(dbEvent, &dbInfo)) {
+ memcpy(messages[i], dbInfo.pBlob, newSize);
+ FillIEViewInfo(&ieData[i], dbInfo, messages[i]);
+ }
+ //FillIEViewEventData(&ieData[i], dbEvent);
+ dbEvent = db_event_next(0, dbEvent);
+ }
+ ieData[cLoad - 1].next = NULL; //cLoad < LOAD_COUNT will only happen once, at the end
+ CallService(MS_IEVIEW_EVENT, 0, (LPARAM)&ieEvent);
+ count += cLoad;
+ }
+ for (i = 0; i < LOAD_COUNT; i++)
+ free(messages[i]);
+
+ free(buffer);
+ EnableWindow(GetDlgItem(data->hWnd, IDC_CLOSE), TRUE);
+ free(data);
+ //RefreshButtonStates(data->hWnd);
+ Log("%s", "WorkerThread finished ... returning");
+ return 0;
+}
+
+int DoLoadEvents(HWND hWnd, HistoryWindowData *data, IEVIEWEVENT ieEvent)
+{
+ ieEvent.iType = IEE_CLEAR_LOG;
+ CallService(MS_IEVIEW_EVENT, 0, (LPARAM)&ieEvent);
+ if (data->loadMethod == LOAD_IN_BACKGROUND) {
+ WorkerThreadData *threadData = (WorkerThreadData *)malloc(sizeof(WorkerThreadData));
+ threadData->data = data;
+ threadData->hWnd = hWnd;
+ threadData->ieEvent = ieEvent;
+ WorkerThread(threadData);
+ }
+ else {
+ ieEvent.iType = IEE_LOG_DB_EVENTS;
+ CallService(MS_IEVIEW_EVENT, 0, (LPARAM)&ieEvent);
+ ScrollToBottom(hWnd);
+
+ TCHAR buffer[256];
+ itot(data->index + 1, buffer, 10);
+ SendDlgItemMessage(hWnd, IDC_STATUSBAR, SB_SETTEXT, 0 | SBT_POPOUT, (LPARAM)buffer);
+ itot(data->index + ieEvent.count, buffer, 10);
+ SendDlgItemMessage(hWnd, IDC_STATUSBAR, SB_SETTEXT, 1 | SBT_POPOUT, (LPARAM)buffer);
+ itot(data->count, buffer, 10);
+ SendDlgItemMessage(hWnd, IDC_STATUSBAR, SB_SETTEXT, 3 | SBT_POPOUT, (LPARAM)buffer);
+ RefreshButtonStates(hWnd);
+ }
+ return 0;
+}
+
+int LoadEvents(HWND hWnd)
+{
+ HistoryWindowData *data = (HistoryWindowData *)GetWindowLongPtr(hWnd, DWLP_USER);
+ int count = db_event_count(data->contact);
+ int bLastFirst = db_get_b(NULL, ModuleName, "ShowLastPageFirst", 0);
+ int bRTL = db_get_b(NULL, ModuleName, "EnableRTL", 0);
+ bRTL = db_get_b(data->contact, "Tab_SRMsg", "RTL", bRTL);
+ data->bEnableRTL = bRTL;
+ data->count = count;
+ if (data->itemsPerPage > count)
+ data->itemsPerPage = count;
+
+ IEVIEWEVENT ieEvent = { sizeof(ieEvent) };
+ ieEvent.hwnd = data->hIEView;
+ ieEvent.hContact = data->contact;
+ ieEvent.count = (data->itemsPerPage <= 0) ? count : data->itemsPerPage;
+
+ MEVENT hFirstEvent = db_event_first(data->contact);
+ int num = 0;
+ if ((data->itemsPerPage > 0) && (bLastFirst)) {
+ num = data->count - data->itemsPerPage;
+ hFirstEvent = GetNeededEvent(hFirstEvent, num, DIRECTION_FORWARD);
+ }
+ data->index = num;
+ data->hLastFirstEvent = hFirstEvent;
+ ieEvent.hDbEventFirst = hFirstEvent;
+ if (data->bEnableRTL)
+ ieEvent.dwFlags |= IEEF_RTL;
+
+ DoLoadEvents(hWnd, data, ieEvent);
+ return 0;
+}
+
+int LoadPage(HWND hWnd, MEVENT hFirstEvent, long index, long shiftCount, long readCount, int direction)
+{
+ HistoryWindowData *data = (HistoryWindowData *)GetWindowLongPtr(hWnd, DWLP_USER);
+ int count = shiftCount;
+ int newIndex = index;
+ IEVIEWEVENT ieEvent = { sizeof(ieEvent) };
+ ieEvent.hwnd = data->hIEView;
+ ieEvent.hContact = data->contact;
+
+ if (direction == DIRECTION_BACK) {
+ newIndex -= shiftCount;
+ if (newIndex < 0) {
+ newIndex = 0;
+ count = index;
+ }
+ }
+ else {
+ newIndex += shiftCount;
+ if (newIndex + readCount > data->count) {
+ count = data->count - newIndex;
+ newIndex = data->count - readCount;
+ }
+ }
+ data->index = newIndex;
+ MEVENT hEvent = GetNeededEvent(hFirstEvent, count, direction);
+ data->hLastFirstEvent = hEvent;
+ ieEvent.hDbEventFirst = hEvent;
+ ieEvent.count = readCount;
+ if (data->bEnableRTL)
+ ieEvent.dwFlags |= IEEF_RTL;
+
+ DoLoadEvents(hWnd, data, ieEvent);
+ return 0;
+}
+
+int LoadPrev(HWND hWnd)
+{
+ HistoryWindowData *data = (HistoryWindowData *)GetWindowLongPtr(hWnd, DWLP_USER);
+ LoadPage(hWnd, data->hLastFirstEvent, data->index, data->itemsPerPage, data->itemsPerPage, DIRECTION_BACK);
+ int finish = data->index <= 0;
+ return finish;
+}
+
+int LoadNext(HWND hWnd)
+{
+ HistoryWindowData *data = (HistoryWindowData *)GetWindowLongPtr(hWnd, DWLP_USER);
+ LoadPage(hWnd, data->hLastFirstEvent, data->index, data->itemsPerPage, data->itemsPerPage, DIRECTION_FORWARD);
+ int finish = data->index + data->itemsPerPage >= data->count;
+ return finish;
+}
+
+int ScrollToBottom(HWND hWnd)
+{
+ HistoryWindowData *data = (HistoryWindowData *)GetWindowLongPtr(hWnd, DWLP_USER);
+ IEVIEWWINDOW ieWnd = { 0 };
+ ieWnd.cbSize = sizeof(ieWnd);
+ ieWnd.iType = IEW_SCROLLBOTTOM;
+ ieWnd.hwnd = data->hIEView;
+ ieWnd.parent = hWnd;
+ CallService(MS_IEVIEW_WINDOW, 0, (LPARAM)&ieWnd);
+ return 0;
+}
+
+void AddAnchorWindowToDeferList(HDWP &hdWnds, HWND window, RECT *rParent, WINDOWPOS *wndPos, int anchors)
+{
if (NULL == window) /* Wine fix. */
return;
- RECT rChild = AnchorCalcPos(window, rParent, wndPos, anchors);
- hdWnds = DeferWindowPos(hdWnds, window, HWND_NOTOPMOST, rChild.left, rChild.top, rChild.right - rChild.left, rChild.bottom - rChild.top, SWP_NOZORDER);
-}
-
-void RefreshButtonStates(HWND hWnd)
-{
- HistoryWindowData *data = (HistoryWindowData *)GetWindowLongPtr(hWnd, DWLP_USER);
- int bPrev = data->index > 0;
- int bNext = data->index + data->itemsPerPage < data->count;
- EnableWindow(GetDlgItem(hWnd, IDC_PREV), bPrev);
- EnableWindow(GetDlgItem(hWnd, IDC_NEXT), bNext);
-}
-
-
-
-INT_PTR CALLBACK HistoryDlgProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam)
-{
- HistoryWindowData *data = (HistoryWindowData *)GetWindowLongPtr(hWnd, DWLP_USER);
-
- switch (msg) {
- case WM_INITDIALOG:
- Log("Inside WM_INITDIALOG ...");
- TranslateDialogDefault(hWnd);
- SendMessage(hWnd, WM_SETICON, ICON_BIG, (LPARAM)hIcon);
- {
- int bRTL = db_get_b(NULL, ModuleName, "EnableRTL", 0);
- if (bRTL)
- SetWindowLongPtr(hWnd, GWL_EXSTYLE, WS_EX_RTLREADING);
-
- HWND hStatusBar = CreateWindow(STATUSCLASSNAME, //class
- _T("-"), //title
- WS_CHILD | WS_VISIBLE | SBARS_TOOLTIPS | SBARS_SIZEGRIP, //style
- 0, 0, //x, y
- 0, 0, //width, height
- hWnd, //parent
- (HMENU)IDC_STATUSBAR, //menu
- hInstance, //instance
- NULL); //lpParam
- int x;
- int widths[] = { x = 50, x += 50, x += 150, -1 };
- int count = sizeof(widths) / sizeof(widths[0]);
- SendMessage(hStatusBar, SB_SETPARTS, count, (LPARAM)widths);
- //SendMessage(hStatusBar, SB_SETTIPTEXT, 1, (LPARAM) TranslateT("First event shown in page"));
- //SendMessage(hStatusBar, SB_SETTIPTEXT, 2, (LPARAM) TranslateT("Last event shown in page"));
- SendMessage(hStatusBar, SB_SETTEXT, 2 | SBT_POPOUT, (LPARAM)TranslateT("Out of a total of"));
- }
- return TRUE;
-
- case WM_SHOWWINDOW:
- Log("Inside WM_SHOWWINDOW ...");
- LoadName(hWnd);
- LoadIEView(hWnd);
- LoadEvents(hWnd);
- {
- bool bAll = (data->itemsPerPage <= 0) || (data->itemsPerPage >= data->count);
- int bLastFirst = db_get_b(NULL, ModuleName, "ShowLastPageFirst", 0);
- if (!bLastFirst) {
- EnableWindow(GetDlgItem(hWnd, IDC_PREV), FALSE);
- EnableWindow(GetDlgItem(hWnd, IDC_NEXT), !bAll);
- }
- else {
- EnableWindow(GetDlgItem(hWnd, IDC_PREV), !bAll);
- EnableWindow(GetDlgItem(hWnd, IDC_NEXT), FALSE);
- }
- EnableWindow(GetDlgItem(hWnd, IDC_SEARCH), !bAll);
- }
- break;
-
- case WM_DESTROY:
- DestroyIEView(hWnd);
- free(data);
- WindowList_Remove(hOpenWindowsList, hWnd);
- break;
-
- case WM_CLOSE:
- if (IsWindowEnabled(GetDlgItem(hWnd, IDC_CLOSE)))
- DestroyWindow(hWnd);
- else
- MessageBox(hWnd, TranslateT("You can't close the window now, wait for all events to load."), TranslateT("Error"), MB_OK | MB_ICONERROR);
- break;
-
- case WM_WINDOWPOSCHANGING:
- {
- HDWP hdWnds = BeginDeferWindowPos(6);
- RECT rParent;
- HWND hStatusBar = GetDlgItem(hWnd, IDC_STATUSBAR);
- WINDOWPOS *wndPos = (WINDOWPOS *)lParam;
- GetWindowRect(hWnd, &rParent);
-
- // if (NULL != hStatusBar) /* Wine fix. */
- // hdWnds = DeferWindowPos(hdWnds, hStatusBar, HWND_NOTOPMOST, wndPos->x, wndPos->y + wndPos->cy - statusHeight, statusWidth, statusHeight, SWP_NOZORDER);
- SendMessage(hStatusBar, WM_SIZE, 0, 0);
- if (wndPos->cx < MIN_HISTORY_WIDTH)
- wndPos->cx = MIN_HISTORY_WIDTH;
- if (wndPos->cy < MIN_HISTORY_HEIGHT)
- wndPos->cy = MIN_HISTORY_HEIGHT;
-
- //MoveWindow(hStatusBar, wndPos->x, wndPos->y + wndPos->cy - statusHeight - 2, statusWidth - 2, statusHeight, TRUE);
- AddAnchorWindowToDeferList(hdWnds, GetDlgItem(hWnd, IDC_STATUSBAR), &rParent, wndPos, ANCHOR_BOTTOM);
- AddAnchorWindowToDeferList(hdWnds, GetDlgItem(hWnd, IDC_CLOSE), &rParent, wndPos, ANCHOR_RIGHT | ANCHOR_BOTTOM);
- AddAnchorWindowToDeferList(hdWnds, GetDlgItem(hWnd, IDC_IEVIEW_PLACEHOLDER), &rParent, wndPos, ANCHOR_ALL);
- AddAnchorWindowToDeferList(hdWnds, GetDlgItem(hWnd, IDC_PREV), &rParent, wndPos, ANCHOR_LEFT | ANCHOR_BOTTOM);
- AddAnchorWindowToDeferList(hdWnds, GetDlgItem(hWnd, IDC_NEXT), &rParent, wndPos, ANCHOR_LEFT | ANCHOR_BOTTOM);
- //AddAnchorWindowToDeferList(hdWnds, GetDlgItem(hWnd, IDC_PAGE_NUMBER), &rParent, wndPos, ANCHOR_LEFT | ANCHOR_BOTTOM);
- AddAnchorWindowToDeferList(hdWnds, GetDlgItem(hWnd, IDC_SEARCH), &rParent, wndPos, ANCHOR_RIGHT | ANCHOR_BOTTOM);
-
- EndDeferWindowPos(hdWnds);
- MoveIeView(hWnd);
- }
- break;
-
- case WM_COMMAND:
- switch (LOWORD(wParam)) {
- case IDC_CLOSE:
- SendMessage(hWnd, WM_CLOSE, 0, 0);
- break;
-
- case IDC_PREV:
- {
- int finished = LoadPrev(hWnd);
- //EnableWindow(GetDlgItem(hWnd, IDC_PREV), !finished);
- //EnableWindow(GetDlgItem(hWnd, IDC_NEXT), TRUE);
- break;
- }
- case IDC_NEXT:
- {
- int finished = LoadNext(hWnd);
- //EnableWindow(GetDlgItem(hWnd, IDC_NEXT), !finished);
- //EnableWindow(GetDlgItem(hWnd, IDC_PREV), TRUE);
- break;
- }
- case IDC_SEARCH:
- HWND hSearch = CreateDialog(hInstance, MAKEINTRESOURCE(IDD_SEARCH), hWnd, SearchDlgProc);
- if (hSearch == NULL) {
- char buffer[1024];
- sprintf(buffer, "Error #%d", GetLastError());
- MessageBoxA(0, buffer, "Error", MB_OK);
- }
- SearchWindowData *searchData = (SearchWindowData *)malloc(sizeof(SearchWindowData));
- searchData->contact = data->contact;
- searchData->hHistoryWindow = hWnd;
- searchData->hLastFoundEvent = NULL;
- searchData->index = 0;
- SetWindowLongPtr(hSearch, DWLP_USER, (LONG_PTR)searchData);
- ShowWindow(hSearch, SW_SHOW);
- break;
- }
- break;
- }
- return 0;
-}
-
-INT_PTR CALLBACK OptionsDlgProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam)
-{
- switch (msg) {
- case WM_INITDIALOG:
- TranslateDialogDefault(hWnd);
- {
- int count = db_get_dw(NULL, ModuleName, "EventsToLoad", 0);
- EnableWindow(GetDlgItem(hWnd, IDC_EVENTS_COUNT), count > 0);
- EnableWindow(GetDlgItem(hWnd, IDC_SHOW_LAST_FIRST), count > 0);
-
- CheckDlgButton(hWnd, IDC_LOAD_ALL, count <= 0 ? BST_CHECKED : BST_UNCHECKED);
- CheckDlgButton(hWnd, IDC_LOAD_NUMBER, count > 0 ? BST_CHECKED : BST_UNCHECKED);
- CheckDlgButton(hWnd, IDC_ENABLE_RTL, db_get_b(NULL, ModuleName, "EnableRTL", 0) ? BST_CHECKED : BST_UNCHECKED);
- CheckDlgButton(hWnd, IDC_SHOW_LAST_FIRST, db_get_b(NULL, ModuleName, "ShowLastPageFirst", 0) ? BST_CHECKED : BST_UNCHECKED);
- CheckDlgButton(hWnd, IDC_LOAD_BACKGROUND, db_get_b(NULL, ModuleName, "UseWorkerThread", 0) ? BST_CHECKED : BST_UNCHECKED);
-
- TCHAR buffer[40];
- _itot_s(count, buffer, 10);
- SetDlgItemText(hWnd, IDC_EVENTS_COUNT, buffer);
- }
- break;
-
- case WM_COMMAND:
- switch (LOWORD(wParam)) {
- case IDC_LOAD_ALL:
- EnableWindow(GetDlgItem(hWnd, IDC_EVENTS_COUNT), FALSE);
- EnableWindow(GetDlgItem(hWnd, IDC_SHOW_LAST_FIRST), FALSE);
- SendMessage(GetParent(hWnd), PSM_CHANGED, 0, 0);
- break;
-
- case IDC_LOAD_NUMBER:
- EnableWindow(GetDlgItem(hWnd, IDC_EVENTS_COUNT), TRUE);
- EnableWindow(GetDlgItem(hWnd, IDC_SHOW_LAST_FIRST), TRUE);
- SendMessage(GetParent(hWnd), PSM_CHANGED, 0, 0);
- break;
-
- case IDC_ENABLE_RTL:
- case IDC_SHOW_LAST_FIRST:
- case IDC_EVENTS_COUNT:
- case IDC_LOAD_BACKGROUND:
- SendMessage(GetParent(hWnd), PSM_CHANGED, 0, 0);
- break;
- }
- break;
-
- case WM_NOTIFY:
- switch (((LPNMHDR)lParam)->idFrom) {
- case 0:
- switch (((LPNMHDR)lParam)->code) {
- case PSN_APPLY:
- long count;
- if (IsDlgButtonChecked(hWnd, IDC_LOAD_ALL))
- count = 0;
- else {
- TCHAR buffer[1024];
- GetDlgItemText(hWnd, IDC_EVENTS_COUNT, buffer, SIZEOF(buffer));
- count = _tstol(buffer);
- count = (count < 0) ? 0 : count;
- }
- db_set_b(NULL, ModuleName, "ShowLastPageFirst", IsDlgButtonChecked(hWnd, IDC_SHOW_LAST_FIRST));
- db_set_b(NULL, ModuleName, "EnableRTL", IsDlgButtonChecked(hWnd, IDC_ENABLE_RTL));
- db_set_b(NULL, ModuleName, "UseWorkerThread", IsDlgButtonChecked(hWnd, IDC_LOAD_BACKGROUND));
- db_set_dw(NULL, ModuleName, "EventsToLoad", count);
- }
- }
- break;
- }
- return 0;
-}
-
-INT_PTR CALLBACK SearchDlgProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam)
-{
- SearchWindowData *data = (SearchWindowData *)GetWindowLongPtr(hWnd, DWLP_USER);
-
- switch (msg) {
- case WM_INITDIALOG:
- if (MyEnableThemeDialogTexture)
- MyEnableThemeDialogTexture((HWND)hWnd, ETDT_ENABLETAB);
-
- TranslateDialogDefault(hWnd);
- {
- TCITEM tabItem = { 0 };
- tabItem.pszText = TranslateT("Text search");
- tabItem.mask = TCIF_TEXT;
- SendDlgItemMessage(hWnd, IDC_TABS, TCM_INSERTITEM, 0, (LPARAM)&tabItem);
- tabItem.pszText = TranslateT("Time search");
- SendDlgItemMessage(hWnd, IDC_TABS, TCM_INSERTITEM, 1, (LPARAM)&tabItem);
- }
-
- CheckDlgButton(hWnd, IDC_DIRECTION_DOWN, BST_CHECKED);
- return TRUE;
-
- case WM_SHOWWINDOW:
- SetFocus(GetDlgItem(hWnd, IDC_SEARCH_TEXT));
- break;
-
- case WM_DESTROY:
- free(data);
- break;
-
- case WM_CLOSE:
- DestroyWindow(hWnd);
- break;
-
- case WM_NOTIFY:
- switch (((LPNMHDR)lParam)->idFrom) {
- case IDC_SEARCH_DATE:
- case IDC_SEARCH_TIME:
- data->hLastFoundEvent = NULL; //start from top if changes occur
- break;
-
- case IDC_TABS:
- switch (((LPNMHDR)lParam)->code) {
- case TCN_SELCHANGE:
- int tab = SendDlgItemMessage(hWnd, IDC_TABS, TCM_GETCURSEL, 0, 0);
- ShowWindow(GetDlgItem(hWnd, IDC_SEARCH_DATE), (tab == 1) ? SW_SHOW : SW_HIDE);
- ShowWindow(GetDlgItem(hWnd, IDC_SEARCH_TIME), (tab == 1) ? SW_SHOW : SW_HIDE);
- ShowWindow(GetDlgItem(hWnd, IDC_SEARCH_TEXT), (tab == 0) ? SW_SHOW : SW_HIDE);
- SetDlgItemText(hWnd, IDC_SEARCH_TEXT_STATIC, ((tab == 0) ? TranslateT("Text:") : TranslateT("Time:")));
- break;
- }
- break;
- }
- break;
-
- case WM_COMMAND:
- switch (LOWORD(wParam)) {
- case IDC_SEARCH_TEXT:
- switch (HIWORD(wParam)) {
- case EN_CHANGE:
- data->hLastFoundEvent = NULL; //start from top if changes occur
- break;
- }
- break;
-
- case IDCANCEL:
- SendMessage(hWnd, WM_CLOSE, 0, 0);
- break;
-
- case IDC_FIND_NEXT:
- const HistoryWindowData *histData = (HistoryWindowData *)GetWindowLongPtr(data->hHistoryWindow, DWLP_USER);
- int direction = IsDlgButtonChecked(hWnd, IDC_DIRECTION_UP) ? DIRECTION_BACK : DIRECTION_FORWARD;
- int tab = SendDlgItemMessage(hWnd, IDC_TABS, TCM_GETCURSEL, 0, 0);
- int type = (tab == 0) ? SEARCH_TEXT : SEARCH_TIME;
- SearchResult searchResult;
- if (data->hLastFoundEvent == NULL)
- data->index = (direction == DIRECTION_FORWARD) ? 0 : histData->count;
- else
- data->hLastFoundEvent = GetNeededEvent(data->hLastFoundEvent, 1, direction);
-
- if (type == SEARCH_TEXT) { //text search
- TCHAR text[2048]; //TODO buffer overrun
- GetDlgItemText(hWnd, IDC_SEARCH_TEXT, text, SIZEOF(text));
- searchResult = SearchHistory(data->contact, data->hLastFoundEvent, text, direction, type);
- }
- else { //time search
- TimeSearchData tsData = { 0 };
- SYSTEMTIME date = { 0 }, time = { 0 };
- int res = SendDlgItemMessage(hWnd, IDC_SEARCH_DATE, DTM_GETSYSTEMTIME, 0, (LPARAM)&date);
- tsData.flags = (res == GDT_VALID) ? TSDF_DATE_SET : 0;
- res = SendDlgItemMessage(hWnd, IDC_SEARCH_TIME, DTM_GETSYSTEMTIME, 0, (LPARAM)&time);
- if (res == GDT_VALID) {
- tsData.flags |= TSDF_TIME_SET;
- date.wHour = time.wHour;
- date.wMinute = time.wMinute;
- date.wSecond = time.wSecond;
- date.wMilliseconds = time.wMilliseconds;
- }
- tsData.time = date;
- searchResult = SearchHistory(data->contact, data->hLastFoundEvent, &tsData, direction, type);
- }
-
- if (searchResult.hEvent) {
- //char buffer[1024];
- //sprintf(buffer, "Found it: index = %ld hEvent = %p", searchResult.index, searchResult.hEvent);
- //MessageBox(0, buffer, "Yupppi", 0);
- data->index += (direction == DIRECTION_BACK) ? -searchResult.index : searchResult.index;
- LoadPage(data->hHistoryWindow, searchResult.hEvent, data->index, histData->itemsPerPage / 2, histData->itemsPerPage, DIRECTION_BACK);
- }
- else MessageBox(0, TranslateT("Search finished. No more entries..."), TranslateT("Information"), MB_OK | MB_ICONINFORMATION);
-
- data->hLastFoundEvent = searchResult.hEvent;
- break;
- }
- break;
- }
- return 0;
-}
+ RECT rChild = AnchorCalcPos(window, rParent, wndPos, anchors);
+ hdWnds = DeferWindowPos(hdWnds, window, HWND_NOTOPMOST, rChild.left, rChild.top, rChild.right - rChild.left, rChild.bottom - rChild.top, SWP_NOZORDER);
+}
+
+void RefreshButtonStates(HWND hWnd)
+{
+ HistoryWindowData *data = (HistoryWindowData *)GetWindowLongPtr(hWnd, DWLP_USER);
+ int bPrev = data->index > 0;
+ int bNext = data->index + data->itemsPerPage < data->count;
+ EnableWindow(GetDlgItem(hWnd, IDC_PREV), bPrev);
+ EnableWindow(GetDlgItem(hWnd, IDC_NEXT), bNext);
+}
+
+
+
+INT_PTR CALLBACK HistoryDlgProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam)
+{
+ HistoryWindowData *data = (HistoryWindowData *)GetWindowLongPtr(hWnd, DWLP_USER);
+
+ switch (msg) {
+ case WM_INITDIALOG:
+ Log("Inside WM_INITDIALOG ...");
+ TranslateDialogDefault(hWnd);
+ SendMessage(hWnd, WM_SETICON, ICON_BIG, (LPARAM)hIcon);
+ {
+ int bRTL = db_get_b(NULL, ModuleName, "EnableRTL", 0);
+ if (bRTL)
+ SetWindowLongPtr(hWnd, GWL_EXSTYLE, WS_EX_RTLREADING);
+
+ HWND hStatusBar = CreateWindow(STATUSCLASSNAME, //class
+ _T("-"), //title
+ WS_CHILD | WS_VISIBLE | SBARS_TOOLTIPS | SBARS_SIZEGRIP, //style
+ 0, 0, //x, y
+ 0, 0, //width, height
+ hWnd, //parent
+ (HMENU)IDC_STATUSBAR, //menu
+ hInstance, //instance
+ NULL); //lpParam
+ int x;
+ int widths[] = { x = 50, x += 50, x += 150, -1 };
+ int count = sizeof(widths) / sizeof(widths[0]);
+ SendMessage(hStatusBar, SB_SETPARTS, count, (LPARAM)widths);
+ //SendMessage(hStatusBar, SB_SETTIPTEXT, 1, (LPARAM) TranslateT("First event shown in page"));
+ //SendMessage(hStatusBar, SB_SETTIPTEXT, 2, (LPARAM) TranslateT("Last event shown in page"));
+ SendMessage(hStatusBar, SB_SETTEXT, 2 | SBT_POPOUT, (LPARAM)TranslateT("Out of a total of"));
+ }
+ return TRUE;
+
+ case WM_SHOWWINDOW:
+ Log("Inside WM_SHOWWINDOW ...");
+ LoadName(hWnd);
+ LoadIEView(hWnd);
+ LoadEvents(hWnd);
+ {
+ bool bAll = (data->itemsPerPage <= 0) || (data->itemsPerPage >= data->count);
+ int bLastFirst = db_get_b(NULL, ModuleName, "ShowLastPageFirst", 0);
+ if (!bLastFirst) {
+ EnableWindow(GetDlgItem(hWnd, IDC_PREV), FALSE);
+ EnableWindow(GetDlgItem(hWnd, IDC_NEXT), !bAll);
+ }
+ else {
+ EnableWindow(GetDlgItem(hWnd, IDC_PREV), !bAll);
+ EnableWindow(GetDlgItem(hWnd, IDC_NEXT), FALSE);
+ }
+ EnableWindow(GetDlgItem(hWnd, IDC_SEARCH), !bAll);
+ }
+ break;
+
+ case WM_DESTROY:
+ DestroyIEView(hWnd);
+ free(data);
+ WindowList_Remove(hOpenWindowsList, hWnd);
+ break;
+
+ case WM_CLOSE:
+ if (IsWindowEnabled(GetDlgItem(hWnd, IDC_CLOSE)))
+ DestroyWindow(hWnd);
+ else
+ MessageBox(hWnd, TranslateT("You can't close the window now, wait for all events to load."), TranslateT("Error"), MB_OK | MB_ICONERROR);
+ break;
+
+ case WM_WINDOWPOSCHANGING:
+ {
+ HDWP hdWnds = BeginDeferWindowPos(6);
+ RECT rParent;
+ HWND hStatusBar = GetDlgItem(hWnd, IDC_STATUSBAR);
+ WINDOWPOS *wndPos = (WINDOWPOS *)lParam;
+ GetWindowRect(hWnd, &rParent);
+
+ // if (NULL != hStatusBar) /* Wine fix. */
+ // hdWnds = DeferWindowPos(hdWnds, hStatusBar, HWND_NOTOPMOST, wndPos->x, wndPos->y + wndPos->cy - statusHeight, statusWidth, statusHeight, SWP_NOZORDER);
+ SendMessage(hStatusBar, WM_SIZE, 0, 0);
+ if (wndPos->cx < MIN_HISTORY_WIDTH)
+ wndPos->cx = MIN_HISTORY_WIDTH;
+ if (wndPos->cy < MIN_HISTORY_HEIGHT)
+ wndPos->cy = MIN_HISTORY_HEIGHT;
+
+ //MoveWindow(hStatusBar, wndPos->x, wndPos->y + wndPos->cy - statusHeight - 2, statusWidth - 2, statusHeight, TRUE);
+ AddAnchorWindowToDeferList(hdWnds, GetDlgItem(hWnd, IDC_STATUSBAR), &rParent, wndPos, ANCHOR_BOTTOM);
+ AddAnchorWindowToDeferList(hdWnds, GetDlgItem(hWnd, IDC_CLOSE), &rParent, wndPos, ANCHOR_RIGHT | ANCHOR_BOTTOM);
+ AddAnchorWindowToDeferList(hdWnds, GetDlgItem(hWnd, IDC_IEVIEW_PLACEHOLDER), &rParent, wndPos, ANCHOR_ALL);
+ AddAnchorWindowToDeferList(hdWnds, GetDlgItem(hWnd, IDC_PREV), &rParent, wndPos, ANCHOR_LEFT | ANCHOR_BOTTOM);
+ AddAnchorWindowToDeferList(hdWnds, GetDlgItem(hWnd, IDC_NEXT), &rParent, wndPos, ANCHOR_LEFT | ANCHOR_BOTTOM);
+ //AddAnchorWindowToDeferList(hdWnds, GetDlgItem(hWnd, IDC_PAGE_NUMBER), &rParent, wndPos, ANCHOR_LEFT | ANCHOR_BOTTOM);
+ AddAnchorWindowToDeferList(hdWnds, GetDlgItem(hWnd, IDC_SEARCH), &rParent, wndPos, ANCHOR_RIGHT | ANCHOR_BOTTOM);
+
+ EndDeferWindowPos(hdWnds);
+ MoveIeView(hWnd);
+ }
+ break;
+
+ case WM_COMMAND:
+ switch (LOWORD(wParam)) {
+ case IDC_CLOSE:
+ SendMessage(hWnd, WM_CLOSE, 0, 0);
+ break;
+
+ case IDC_PREV:
+ {
+ int finished = LoadPrev(hWnd);
+ //EnableWindow(GetDlgItem(hWnd, IDC_PREV), !finished);
+ //EnableWindow(GetDlgItem(hWnd, IDC_NEXT), TRUE);
+ break;
+ }
+ case IDC_NEXT:
+ {
+ int finished = LoadNext(hWnd);
+ //EnableWindow(GetDlgItem(hWnd, IDC_NEXT), !finished);
+ //EnableWindow(GetDlgItem(hWnd, IDC_PREV), TRUE);
+ break;
+ }
+ case IDC_SEARCH:
+ HWND hSearch = CreateDialog(hInstance, MAKEINTRESOURCE(IDD_SEARCH), hWnd, SearchDlgProc);
+ if (hSearch == NULL) {
+ char buffer[1024];
+ sprintf(buffer, "Error #%d", GetLastError());
+ MessageBoxA(0, buffer, "Error", MB_OK);
+ }
+ SearchWindowData *searchData = (SearchWindowData *)malloc(sizeof(SearchWindowData));
+ searchData->contact = data->contact;
+ searchData->hHistoryWindow = hWnd;
+ searchData->hLastFoundEvent = NULL;
+ searchData->index = 0;
+ SetWindowLongPtr(hSearch, DWLP_USER, (LONG_PTR)searchData);
+ ShowWindow(hSearch, SW_SHOW);
+ break;
+ }
+ break;
+ }
+ return 0;
+}
+
+INT_PTR CALLBACK OptionsDlgProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam)
+{
+ switch (msg) {
+ case WM_INITDIALOG:
+ TranslateDialogDefault(hWnd);
+ {
+ int count = db_get_dw(NULL, ModuleName, "EventsToLoad", 0);
+ EnableWindow(GetDlgItem(hWnd, IDC_EVENTS_COUNT), count > 0);
+ EnableWindow(GetDlgItem(hWnd, IDC_SHOW_LAST_FIRST), count > 0);
+
+ CheckDlgButton(hWnd, IDC_LOAD_ALL, count <= 0 ? BST_CHECKED : BST_UNCHECKED);
+ CheckDlgButton(hWnd, IDC_LOAD_NUMBER, count > 0 ? BST_CHECKED : BST_UNCHECKED);
+ CheckDlgButton(hWnd, IDC_ENABLE_RTL, db_get_b(NULL, ModuleName, "EnableRTL", 0) ? BST_CHECKED : BST_UNCHECKED);
+ CheckDlgButton(hWnd, IDC_SHOW_LAST_FIRST, db_get_b(NULL, ModuleName, "ShowLastPageFirst", 0) ? BST_CHECKED : BST_UNCHECKED);
+ CheckDlgButton(hWnd, IDC_LOAD_BACKGROUND, db_get_b(NULL, ModuleName, "UseWorkerThread", 0) ? BST_CHECKED : BST_UNCHECKED);
+
+ TCHAR buffer[40];
+ _itot_s(count, buffer, 10);
+ SetDlgItemText(hWnd, IDC_EVENTS_COUNT, buffer);
+ }
+ break;
+
+ case WM_COMMAND:
+ switch (LOWORD(wParam)) {
+ case IDC_LOAD_ALL:
+ EnableWindow(GetDlgItem(hWnd, IDC_EVENTS_COUNT), FALSE);
+ EnableWindow(GetDlgItem(hWnd, IDC_SHOW_LAST_FIRST), FALSE);
+ SendMessage(GetParent(hWnd), PSM_CHANGED, 0, 0);
+ break;
+
+ case IDC_LOAD_NUMBER:
+ EnableWindow(GetDlgItem(hWnd, IDC_EVENTS_COUNT), TRUE);
+ EnableWindow(GetDlgItem(hWnd, IDC_SHOW_LAST_FIRST), TRUE);
+ SendMessage(GetParent(hWnd), PSM_CHANGED, 0, 0);
+ break;
+
+ case IDC_ENABLE_RTL:
+ case IDC_SHOW_LAST_FIRST:
+ case IDC_EVENTS_COUNT:
+ case IDC_LOAD_BACKGROUND:
+ SendMessage(GetParent(hWnd), PSM_CHANGED, 0, 0);
+ break;
+ }
+ break;
+
+ case WM_NOTIFY:
+ switch (((LPNMHDR)lParam)->idFrom) {
+ case 0:
+ switch (((LPNMHDR)lParam)->code) {
+ case PSN_APPLY:
+ long count;
+ if (IsDlgButtonChecked(hWnd, IDC_LOAD_ALL))
+ count = 0;
+ else {
+ TCHAR buffer[1024];
+ GetDlgItemText(hWnd, IDC_EVENTS_COUNT, buffer, SIZEOF(buffer));
+ count = _tstol(buffer);
+ count = (count < 0) ? 0 : count;
+ }
+ db_set_b(NULL, ModuleName, "ShowLastPageFirst", IsDlgButtonChecked(hWnd, IDC_SHOW_LAST_FIRST));
+ db_set_b(NULL, ModuleName, "EnableRTL", IsDlgButtonChecked(hWnd, IDC_ENABLE_RTL));
+ db_set_b(NULL, ModuleName, "UseWorkerThread", IsDlgButtonChecked(hWnd, IDC_LOAD_BACKGROUND));
+ db_set_dw(NULL, ModuleName, "EventsToLoad", count);
+ }
+ }
+ break;
+ }
+ return 0;
+}
+
+INT_PTR CALLBACK SearchDlgProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam)
+{
+ SearchWindowData *data = (SearchWindowData *)GetWindowLongPtr(hWnd, DWLP_USER);
+
+ switch (msg) {
+ case WM_INITDIALOG:
+ if (MyEnableThemeDialogTexture)
+ MyEnableThemeDialogTexture((HWND)hWnd, ETDT_ENABLETAB);
+
+ TranslateDialogDefault(hWnd);
+ {
+ TCITEM tabItem = { 0 };
+ tabItem.pszText = TranslateT("Text search");
+ tabItem.mask = TCIF_TEXT;
+ SendDlgItemMessage(hWnd, IDC_TABS, TCM_INSERTITEM, 0, (LPARAM)&tabItem);
+ tabItem.pszText = TranslateT("Time search");
+ SendDlgItemMessage(hWnd, IDC_TABS, TCM_INSERTITEM, 1, (LPARAM)&tabItem);
+ }
+
+ CheckDlgButton(hWnd, IDC_DIRECTION_DOWN, BST_CHECKED);
+ return TRUE;
+
+ case WM_SHOWWINDOW:
+ SetFocus(GetDlgItem(hWnd, IDC_SEARCH_TEXT));
+ break;
+
+ case WM_DESTROY:
+ free(data);
+ break;
+
+ case WM_CLOSE:
+ DestroyWindow(hWnd);
+ break;
+
+ case WM_NOTIFY:
+ switch (((LPNMHDR)lParam)->idFrom) {
+ case IDC_SEARCH_DATE:
+ case IDC_SEARCH_TIME:
+ data->hLastFoundEvent = NULL; //start from top if changes occur
+ break;
+
+ case IDC_TABS:
+ switch (((LPNMHDR)lParam)->code) {
+ case TCN_SELCHANGE:
+ int tab = SendDlgItemMessage(hWnd, IDC_TABS, TCM_GETCURSEL, 0, 0);
+ ShowWindow(GetDlgItem(hWnd, IDC_SEARCH_DATE), (tab == 1) ? SW_SHOW : SW_HIDE);
+ ShowWindow(GetDlgItem(hWnd, IDC_SEARCH_TIME), (tab == 1) ? SW_SHOW : SW_HIDE);
+ ShowWindow(GetDlgItem(hWnd, IDC_SEARCH_TEXT), (tab == 0) ? SW_SHOW : SW_HIDE);
+ SetDlgItemText(hWnd, IDC_SEARCH_TEXT_STATIC, ((tab == 0) ? TranslateT("Text:") : TranslateT("Time:")));
+ break;
+ }
+ break;
+ }
+ break;
+
+ case WM_COMMAND:
+ switch (LOWORD(wParam)) {
+ case IDC_SEARCH_TEXT:
+ switch (HIWORD(wParam)) {
+ case EN_CHANGE:
+ data->hLastFoundEvent = NULL; //start from top if changes occur
+ break;
+ }
+ break;
+
+ case IDCANCEL:
+ SendMessage(hWnd, WM_CLOSE, 0, 0);
+ break;
+
+ case IDC_FIND_NEXT:
+ const HistoryWindowData *histData = (HistoryWindowData *)GetWindowLongPtr(data->hHistoryWindow, DWLP_USER);
+ int direction = IsDlgButtonChecked(hWnd, IDC_DIRECTION_UP) ? DIRECTION_BACK : DIRECTION_FORWARD;
+ int tab = SendDlgItemMessage(hWnd, IDC_TABS, TCM_GETCURSEL, 0, 0);
+ int type = (tab == 0) ? SEARCH_TEXT : SEARCH_TIME;
+ SearchResult searchResult;
+ if (data->hLastFoundEvent == NULL)
+ data->index = (direction == DIRECTION_FORWARD) ? 0 : histData->count;
+ else
+ data->hLastFoundEvent = GetNeededEvent(data->hLastFoundEvent, 1, direction);
+
+ if (type == SEARCH_TEXT) { //text search
+ TCHAR text[2048]; //TODO buffer overrun
+ GetDlgItemText(hWnd, IDC_SEARCH_TEXT, text, SIZEOF(text));
+ searchResult = SearchHistory(data->contact, data->hLastFoundEvent, text, direction, type);
+ }
+ else { //time search
+ TimeSearchData tsData = { 0 };
+ SYSTEMTIME date = { 0 }, time = { 0 };
+ int res = SendDlgItemMessage(hWnd, IDC_SEARCH_DATE, DTM_GETSYSTEMTIME, 0, (LPARAM)&date);
+ tsData.flags = (res == GDT_VALID) ? TSDF_DATE_SET : 0;
+ res = SendDlgItemMessage(hWnd, IDC_SEARCH_TIME, DTM_GETSYSTEMTIME, 0, (LPARAM)&time);
+ if (res == GDT_VALID) {
+ tsData.flags |= TSDF_TIME_SET;
+ date.wHour = time.wHour;
+ date.wMinute = time.wMinute;
+ date.wSecond = time.wSecond;
+ date.wMilliseconds = time.wMilliseconds;
+ }
+ tsData.time = date;
+ searchResult = SearchHistory(data->contact, data->hLastFoundEvent, &tsData, direction, type);
+ }
+
+ if (searchResult.hEvent) {
+ //char buffer[1024];
+ //sprintf(buffer, "Found it: index = %ld hEvent = %p", searchResult.index, searchResult.hEvent);
+ //MessageBox(0, buffer, "Yupppi", 0);
+ data->index += (direction == DIRECTION_BACK) ? -searchResult.index : searchResult.index;
+ LoadPage(data->hHistoryWindow, searchResult.hEvent, data->index, histData->itemsPerPage / 2, histData->itemsPerPage, DIRECTION_BACK);
+ }
+ else MessageBox(0, TranslateT("Search finished. No more entries..."), TranslateT("Information"), MB_OK | MB_ICONINFORMATION);
+
+ data->hLastFoundEvent = searchResult.hEvent;
+ break;
+ }
+ break;
+ }
+ return 0;
+}
diff --git a/plugins/IEHistory/src/events.cpp b/plugins/IEHistory/src/events.cpp
index d6e21fe421..16745475a8 100644
--- a/plugins/IEHistory/src/events.cpp
+++ b/plugins/IEHistory/src/events.cpp
@@ -44,6 +44,6 @@ int OnOptionsInitialize(WPARAM wParam, LPARAM lParam)
odp.pszTemplate = MAKEINTRESOURCEA(IDD_OPT_HISTORY);
odp.hInstance = hInstance;
odp.flags = ODPF_BOLDGROUPS | ODPF_TCHAR;
- Options_AddPage(wParam,&odp);
+ Options_AddPage(wParam, &odp);
return 0;
}
diff --git a/plugins/IEHistory/src/services.cpp b/plugins/IEHistory/src/services.cpp
index 7a86e17d08..9ad611dd62 100644
--- a/plugins/IEHistory/src/services.cpp
+++ b/plugins/IEHistory/src/services.cpp
@@ -45,8 +45,8 @@ INT_PTR ShowContactHistoryService(WPARAM wParam, LPARAM lParam)
int count = db_get_dw(NULL, ModuleName, "EventsToLoad", 0);
int loadInBackground = db_get_b(NULL, ModuleName, "UseWorkerThread", 0);
HistoryWindowData *data;
- data = (HistoryWindowData *) malloc(sizeof(HistoryWindowData));
- data->contact = (MCONTACT) wParam;
+ data = (HistoryWindowData *)malloc(sizeof(HistoryWindowData));
+ data->contact = (MCONTACT)wParam;
data->hIEView = NULL;
data->itemsPerPage = count;
data->index = 0;
@@ -54,9 +54,10 @@ INT_PTR ShowContactHistoryService(WPARAM wParam, LPARAM lParam)
data->loadMethod = (loadInBackground) ? LOAD_IN_BACKGROUND : 0;
historyDlg = CreateDialog(hInstance, MAKEINTRESOURCE(IDD_HISTORY), parent, HistoryDlgProc);
SetWindowLongPtr(historyDlg, DWLP_USER, (LONG_PTR)data);
-
- WindowList_Add(hOpenWindowsList, historyDlg, (MCONTACT) wParam);
- }else
+
+ WindowList_Add(hOpenWindowsList, historyDlg, (MCONTACT)wParam);
+ }
+ else
SetForegroundWindow(historyDlg);
ShowWindow(historyDlg, SW_SHOWNORMAL);
return 0;
diff --git a/plugins/IEHistory/src/utils.cpp b/plugins/IEHistory/src/utils.cpp
index e460e3d78d..ac628ec957 100644
--- a/plugins/IEHistory/src/utils.cpp
+++ b/plugins/IEHistory/src/utils.cpp
@@ -34,23 +34,23 @@ int Log(char *format, ...)
int tBytes;
FILE *fout = fopen("IEHistory.log", "at");
if (!fout)
- {
-// MessageBox(0, "can't open file", NULL, MB_OK);
- }
+ {
+ // MessageBox(0, "can't open file", NULL, MB_OK);
+ }
va_start(vararg, format);
-
+
tBytes = _vsnprintf(str, sizeof(str), format, vararg);
if (tBytes > 0)
- {
- str[tBytes] = 0;
- }
+ {
+ str[tBytes] = 0;
+ }
va_end(vararg);
if (str[strlen(str) - 1] != '\n')
- {
- strcat(str, "\n");
- }
+ {
+ strcat(str, "\n");
+ }
fputs(str, fout);
fclose(fout);
return 0;
@@ -67,11 +67,11 @@ int Info(char *title, char *format, ...)
va_start(vararg, format);
tBytes = snprintf(str, sizeof(str), format, vararg);
if (tBytes > 0)
- {
- str[tBytes] = 0;
- }
+ {
+ str[tBytes] = 0;
+ }
va_end(vararg);
- return MessageBoxA(0, str, title, MB_OK | MB_ICONINFORMATION);
+ return MessageBoxA(0, str, title, MB_OK | MB_ICONINFORMATION);
}
/*
@@ -80,16 +80,16 @@ returns the name of a contact
TCHAR *GetContactName(MCONTACT contact)
{
- CONTACTINFO ctInfo={sizeof(ctInfo)};
-// if(db_mc_isMeta(contact))
-// contact=db_mc_getMostOnline(contact);
+ CONTACTINFO ctInfo = { sizeof(ctInfo) };
+ // if(db_mc_isMeta(contact))
+ // contact=db_mc_getMostOnline(contact);
ctInfo.szProto = GetContactProto(contact);
ctInfo.dwFlag = CNF_DISPLAY;
#ifdef _UNICODE
ctInfo.dwFlag += CNF_UNICODE;
#endif
ctInfo.hContact = contact;
- if(CallService(MS_CONTACT_GETCONTACTINFO,0,(LPARAM)&ctInfo)){
+ if (CallService(MS_CONTACT_GETCONTACTINFO, 0, (LPARAM)&ctInfo)){
return NULL;
}
TCHAR* buffer = _tcsdup(ctInfo.pszVal);
@@ -120,11 +120,11 @@ void AnchorMoveWindow(HWND window, const WINDOWPOS *parentPos, int anchors)
{
RECT rParent;
RECT rChild;
-
+
if (parentPos->flags & SWP_NOSIZE)
- {
- return;
- }
+ {
+ return;
+ }
GetWindowRect(parentPos->hwnd, &rParent);
rChild = AnchorCalcPos(window, &rParent, parentPos, anchors);
MoveWindow(window, rChild.left, rChild.top, rChild.right - rChild.left, rChild.bottom - rChild.top, FALSE);
@@ -141,52 +141,52 @@ RECT AnchorCalcPos(HWND window, const RECT *rParent, const WINDOWPOS *parentPos,
int cx = rParent->right - rParent->left;
int cy = rParent->bottom - rParent->top;
if ((cx == parentPos->cx) && (cy == parentPos->cy))
- {
- return rChild;
- }
+ {
+ return rChild;
+ }
if (parentPos->flags & SWP_NOSIZE)
- {
- return rChild;
- }
+ {
+ return rChild;
+ }
rTmp.left = parentPos->x - rParent->left;
rTmp.right = (parentPos->x + parentPos->cx) - rParent->right;
rTmp.bottom = (parentPos->y + parentPos->cy) - rParent->bottom;
rTmp.top = parentPos->y - rParent->top;
-
+
cx = (rTmp.left) ? -rTmp.left : rTmp.right;
- cy = (rTmp.top) ? -rTmp.top : rTmp.bottom;
-
+ cy = (rTmp.top) ? -rTmp.top : rTmp.bottom;
+
rChild.right += cx;
rChild.bottom += cy;
//expanded the window accordingly, now we need to enforce the anchors
if ((anchors & ANCHOR_LEFT) && (!(anchors & ANCHOR_RIGHT)))
- {
- rChild.right -= cx;
- }
+ {
+ rChild.right -= cx;
+ }
if ((anchors & ANCHOR_TOP) && (!(anchors & ANCHOR_BOTTOM)))
- {
- rChild.bottom -= cy;
- }
+ {
+ rChild.bottom -= cy;
+ }
if ((anchors & ANCHOR_RIGHT) && (!(anchors & ANCHOR_LEFT)))
- {
- rChild.left += cx;
- }
+ {
+ rChild.left += cx;
+ }
if ((anchors & ANCHOR_BOTTOM) && (!(anchors & ANCHOR_TOP)))
- {
- rChild.top += cy;
- }
+ {
+ rChild.top += cy;
+ }
return rChild;
}
void UnixTimeToFileTime(time_t t, LPFILETIME pft)
{
- // Note that LONGLONG is a 64-bit value
- LONGLONG ll;
+ // Note that LONGLONG is a 64-bit value
+ LONGLONG ll;
- ll = Int32x32To64(t, 10000000) + 116444736000000000;
- pft->dwLowDateTime = (DWORD)ll;
- pft->dwHighDateTime = ll >> 32;
+ ll = Int32x32To64(t, 10000000) + 116444736000000000;
+ pft->dwLowDateTime = (DWORD)ll;
+ pft->dwHighDateTime = ll >> 32;
}
void UnixTimeToSystemTime(time_t t, LPSYSTEMTIME pst)
@@ -201,23 +201,23 @@ void UnixTimeToSystemTime(time_t t, LPSYSTEMTIME pst)
MEVENT GetNeededEvent(MEVENT hEvent, int num, int direction)
{
int i;
- typedef MEVENT (__stdcall *db_event_step_t)(MCONTACT hContact, MEVENT hDbEvent);
+ typedef MEVENT(__stdcall *db_event_step_t)(MCONTACT hContact, MEVENT hDbEvent);
db_event_step_t db_event_step;
- if(direction == DIRECTION_BACK)
+ if (direction == DIRECTION_BACK)
db_event_step = db_event_prev;
else
db_event_step = db_event_next;
-
+
for (i = 0; i < num; ++i)
hEvent = db_event_step(0, hEvent);
return hEvent;
}
-SearchResult SearchHistory(MCONTACT contact, MEVENT hFirstEvent, void *searchData, int direction, int type)
+SearchResult SearchHistory(MCONTACT contact, MEVENT hFirstEvent, void *searchData, int direction, int type)
{
if (hFirstEvent == NULL){
- typedef MEVENT (__stdcall *db_event_start_t)(MCONTACT contact);
+ typedef MEVENT(__stdcall *db_event_start_t)(MCONTACT contact);
db_event_start_t db_event_start = (direction == DIRECTION_BACK) ? db_event_last : db_event_first;
hFirstEvent = db_event_start(contact);
}
@@ -228,63 +228,63 @@ SearchResult SearchHistory(MCONTACT contact, MEVENT hFirstEvent, void *searchDa
bool found = false;
int oldSize, newSize;
oldSize = newSize = 0;
-
- DBEVENTINFO dbEvent = {0};
+
+ DBEVENTINFO dbEvent = { 0 };
dbEvent.cbSize = sizeof(dbEvent);
-
+
while ((!found) && (hEvent)){
newSize = db_event_getBlobSize(hEvent);
if (newSize > oldSize)
- {
- buffer = (TCHAR *) realloc(buffer, newSize);
- oldSize = newSize;
- }
- dbEvent.pBlob = (PBYTE) buffer;
+ {
+ buffer = (TCHAR *)realloc(buffer, newSize);
+ oldSize = newSize;
+ }
+ dbEvent.pBlob = (PBYTE)buffer;
dbEvent.cbBlob = newSize;
- if (db_event_get(hEvent,&dbEvent) == 0){ //successful
+ if (db_event_get(hEvent, &dbEvent) == 0){ //successful
switch (type)
- {
- case SEARCH_TEXT:
- {
+ {
+ case SEARCH_TEXT:
+ {
#ifdef _UNICODE
- wchar_t TEMP[2048];
- size_t size = strlen((char *) dbEvent.pBlob) + 1;
- if (size < dbEvent.cbBlob)
- {
- search = (wchar_t *) &dbEvent.pBlob[size];
- }
- else{
- MultiByteToWideChar(CP_ACP, 0, (char *) buffer, (int)size, TEMP, 2048);
- search = TEMP;
- }
+ wchar_t TEMP[2048];
+ size_t size = strlen((char *)dbEvent.pBlob) + 1;
+ if (size < dbEvent.cbBlob)
+ {
+ search = (wchar_t *)&dbEvent.pBlob[size];
+ }
+ else{
+ MultiByteToWideChar(CP_ACP, 0, (char *)buffer, (int)size, TEMP, 2048);
+ search = TEMP;
+ }
#else
- search = (char *) buffer;
+ search = (char *) buffer;
#endif
- TCHAR *data = (TCHAR *) searchData;
- TCHAR *tmp = _tcsstr(search, data);
- if (tmp)
- {
- found = true;
- }
- break;
- }
- case SEARCH_TIME:
- {
- SYSTEMTIME time;
- TimeSearchData *data = (TimeSearchData *) searchData;
- UnixTimeToSystemTime((time_t) dbEvent.timestamp, &time);
- found = ((data->flags & TSDF_DATE_SET) || (data->flags & TSDF_TIME_SET)) ? true : false;
- if (data->flags & TSDF_DATE_SET)
- {
- found = ((time.wYear == data->time.wYear) && (time.wMonth == data->time.wMonth) && (time.wDay == data->time.wDay));
- }
- if (data->flags & TSDF_TIME_SET)
- {
- found = found & ((time.wHour == data->time.wHour) && (time.wMinute == data->time.wMinute));
- }
- break;
- }
+ TCHAR *data = (TCHAR *)searchData;
+ TCHAR *tmp = _tcsstr(search, data);
+ if (tmp)
+ {
+ found = true;
+ }
+ break;
+ }
+ case SEARCH_TIME:
+ {
+ SYSTEMTIME time;
+ TimeSearchData *data = (TimeSearchData *)searchData;
+ UnixTimeToSystemTime((time_t)dbEvent.timestamp, &time);
+ found = ((data->flags & TSDF_DATE_SET) || (data->flags & TSDF_TIME_SET)) ? true : false;
+ if (data->flags & TSDF_DATE_SET)
+ {
+ found = ((time.wYear == data->time.wYear) && (time.wMonth == data->time.wMonth) && (time.wDay == data->time.wDay));
}
+ if (data->flags & TSDF_TIME_SET)
+ {
+ found = found & ((time.wHour == data->time.wHour) && (time.wMinute == data->time.wMinute));
+ }
+ break;
+ }
+ }
}
if (!found){
hEvent = GetNeededEvent(hEvent, 1, direction);