From c8352737131e90d27de39622357fd7a7bbb9f3a2 Mon Sep 17 00:00:00 2001 From: Kirill Volinsky Date: Thu, 25 Dec 2014 19:07:08 +0000 Subject: files structure changed git-svn-id: http://svn.miranda-ng.org/main/trunk@11635 1316c22d-e87f-b044-9b9b-93d7a3e3ba9c --- src/core/stduihist/commonheaders.cpp | 2 - src/core/stduihist/commonheaders.h | 79 ----- src/core/stduihist/history.cpp | 423 ------------------------ src/core/stduihist/main.cpp | 71 ---- src/core/stduihist/res/resource.rc | 107 ++++++ src/core/stduihist/res/version.rc | 38 +++ src/core/stduihist/resource.rc | 107 ------ src/core/stduihist/src/commonheaders.cpp | 2 + src/core/stduihist/src/commonheaders.h | 79 +++++ src/core/stduihist/src/history.cpp | 423 ++++++++++++++++++++++++ src/core/stduihist/src/main.cpp | 71 ++++ src/core/stduihist/src/version.h | 12 + src/core/stduihist/stduihist_10.vcxproj | 18 +- src/core/stduihist/stduihist_10.vcxproj.filters | 15 +- src/core/stduihist/stduihist_12.vcxproj | 18 +- src/core/stduihist/stduihist_12.vcxproj.filters | 15 +- src/core/stduihist/version.h | 14 - src/core/stduihist/version.rc | 42 --- 18 files changed, 766 insertions(+), 770 deletions(-) delete mode 100644 src/core/stduihist/commonheaders.cpp delete mode 100644 src/core/stduihist/commonheaders.h delete mode 100644 src/core/stduihist/history.cpp delete mode 100644 src/core/stduihist/main.cpp create mode 100644 src/core/stduihist/res/resource.rc create mode 100644 src/core/stduihist/res/version.rc delete mode 100644 src/core/stduihist/resource.rc create mode 100644 src/core/stduihist/src/commonheaders.cpp create mode 100644 src/core/stduihist/src/commonheaders.h create mode 100644 src/core/stduihist/src/history.cpp create mode 100644 src/core/stduihist/src/main.cpp create mode 100644 src/core/stduihist/src/version.h delete mode 100644 src/core/stduihist/version.h delete mode 100644 src/core/stduihist/version.rc (limited to 'src') diff --git a/src/core/stduihist/commonheaders.cpp b/src/core/stduihist/commonheaders.cpp deleted file mode 100644 index 95b2201163..0000000000 --- a/src/core/stduihist/commonheaders.cpp +++ /dev/null @@ -1,2 +0,0 @@ -#include "commonheaders.h" - diff --git a/src/core/stduihist/commonheaders.h b/src/core/stduihist/commonheaders.h deleted file mode 100644 index f5744ec23b..0000000000 --- a/src/core/stduihist/commonheaders.h +++ /dev/null @@ -1,79 +0,0 @@ -/* - -Miranda NG: the free IM client for Microsoft* Windows* - -Copyright (c) 2012-14 Miranda NG project (http://miranda-ng.org), -Copyright (c) 2000-12 Miranda IM project, -all portions of this codebase are copyrighted to the people -listed in contributors.txt. - -This program is free software; you can redistribute it and/or -modify it under the terms of the GNU General Public License -as published by the Free Software Foundation; either version 2 -of the License, or (at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU General Public License for more details. - -You should have received a copy of the GNU General Public License -along with this program; if not, write to the Free Software -Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. -*/ - -#define WINVER 0x0700 -#define _WIN32_WINNT 0x0700 -#define _WIN32_IE 0x0601 - -#include -#include -#include -#include -#include - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#include - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#include "version.h" - -#include "../../resource.h" -#include "../stdplug.h" - -extern HINSTANCE hInst; - -#pragma comment(lib, "version.lib") diff --git a/src/core/stduihist/history.cpp b/src/core/stduihist/history.cpp deleted file mode 100644 index 62f58b453b..0000000000 --- a/src/core/stduihist/history.cpp +++ /dev/null @@ -1,423 +0,0 @@ -/* - -Miranda NG: the free IM client for Microsoft* Windows* - -Copyright (c) 2012-14 Miranda NG project (http://miranda-ng.org), -Copyright (c) 2000-12 Miranda IM project, -all portions of this codebase are copyrighted to the people -listed in contributors.txt. - -This program is free software; you can redistribute it and/or -modify it under the terms of the GNU General Public License -as published by the Free Software Foundation; either version 2 -of the License, or (at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU General Public License for more details. - -You should have received a copy of the GNU General Public License -along with this program; if not, write to the Free Software -Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. -*/ - -#include "commonheaders.h" - -#define SUMMARY 0 -#define DETAIL 1 -#define DM_FINDNEXT (WM_USER+10) -#define DM_HREBUILD (WM_USER+11) - -static INT_PTR CALLBACK DlgProcHistory(HWND hwndDlg, UINT msg, WPARAM wParam, LPARAM lParam); -static INT_PTR CALLBACK DlgProcHistoryFind(HWND hwndDlg, UINT msg, WPARAM wParam, LPARAM lParam); -static HANDLE hWindowList = 0; -static HGENMENU hContactMenu = 0; - -///////////////////////////////////////////////////////////////////////////////////////// -// Fills the events list - -static void GetMessageDescription(DBEVENTINFO *dbei, TCHAR* buf, int cbBuf) -{ - TCHAR* msg = DbGetEventTextT(dbei, CP_ACP); - _tcsncpy(buf, msg ? msg : TranslateT("Invalid message"), cbBuf); - buf[ cbBuf-1 ] = 0; - mir_free(msg); -} - -static void GetUrlDescription(DBEVENTINFO *dbei, TCHAR* buf, int cbBuf) -{ - int len = dbei->cbBlob; - if (len >= cbBuf) - len = cbBuf-1; - - MultiByteToWideChar(CP_ACP, 0, (LPCSTR)dbei->pBlob, len, buf, cbBuf); - buf[ len ] = 0; - - if (len < cbBuf-3) - _tcscat(buf, _T("\r\n")); -} - -static void GetFileDescription(DBEVENTINFO *dbei, TCHAR* buf, int cbBuf) -{ - int len = dbei->cbBlob - sizeof(DWORD); - if (len >= cbBuf) - len = cbBuf-1; - - MultiByteToWideChar(CP_ACP, 0, (LPCSTR)dbei->pBlob + sizeof(DWORD), len, buf, cbBuf); - buf[ len ] = 0; - - if (len < cbBuf-3) - _tcscat(buf, _T("\r\n")); -} - -static void GetObjectDescription(DBEVENTINFO *dbei, TCHAR* str, int cbStr) -{ - switch(dbei->eventType) { - case EVENTTYPE_MESSAGE: - GetMessageDescription(dbei, str, cbStr); - break; - - case EVENTTYPE_URL: - GetUrlDescription(dbei, str, cbStr); - break; - - case EVENTTYPE_FILE: - GetFileDescription(dbei, str, cbStr); - break; - - default: - DBEVENTTYPEDESCR *et = (DBEVENTTYPEDESCR*)CallService(MS_DB_EVENT_GETTYPE, (WPARAM)dbei->szModule, (LPARAM)dbei->eventType); - if (et && (et->flags & DETF_HISTORY)) - GetMessageDescription(dbei, str, cbStr); - else - *str = 0; -} } - -static void GetObjectSummary(DBEVENTINFO *dbei, TCHAR* str, int cbStr) -{ - TCHAR* pszSrc, *pszTmp = NULL; - - switch(dbei->eventType) { - case EVENTTYPE_MESSAGE: - if (dbei->flags & DBEF_SENT) pszSrc = TranslateT("Outgoing message"); - else pszSrc = TranslateT("Incoming message"); - break; - - case EVENTTYPE_URL: - if (dbei->flags & DBEF_SENT) pszSrc = TranslateT("Outgoing URL"); - else pszSrc = TranslateT("Incoming URL"); - break; - - case EVENTTYPE_FILE: - if (dbei->flags & DBEF_SENT) pszSrc = TranslateT("Outgoing file"); - else pszSrc = TranslateT("Incoming file"); - break; - - default: - DBEVENTTYPEDESCR* et = (DBEVENTTYPEDESCR*)CallService(MS_DB_EVENT_GETTYPE, (WPARAM)dbei->szModule, (LPARAM)dbei->eventType); - if (et && (et->flags & DETF_HISTORY)) { - pszTmp = mir_a2t(et->descr); - pszSrc = TranslateTS(pszTmp); - break; - } - *str = 0; - return; - } - - _tcsncpy(str, (const TCHAR*)pszSrc, cbStr); - str[cbStr-1] = 0; - mir_free(pszTmp); -} - -typedef struct { - MCONTACT hContact; - HWND hwnd; -} THistoryThread; - -static void FillHistoryThread(void* param) -{ - Thread_SetName("HistoryWindow::FillHistoryThread"); - - THistoryThread *hInfo = (THistoryThread*)param; - HWND hwndList = GetDlgItem(hInfo->hwnd, IDC_LIST); - - SendDlgItemMessage(hInfo->hwnd, IDC_LIST, LB_RESETCONTENT, 0, 0); - int i = db_event_count(hInfo->hContact); - SendDlgItemMessage(hInfo->hwnd, IDC_LIST, LB_INITSTORAGE, i, i*40); - - DBEVENTINFO dbei = { sizeof(dbei) }; - int oldBlobSize = 0; - HANDLE hDbEvent = db_event_last(hInfo->hContact); - - while (hDbEvent != NULL) { - if ( !IsWindow(hInfo->hwnd)) - break; - int newBlobSize = db_event_getBlobSize(hDbEvent); - if (newBlobSize > oldBlobSize) { - dbei.pBlob = (PBYTE)mir_realloc(dbei.pBlob, newBlobSize); - oldBlobSize = newBlobSize; - } - dbei.cbBlob = oldBlobSize; - db_event_get(hDbEvent, &dbei); - - TCHAR str[200], eventText[256], strdatetime[64]; - GetObjectSummary(&dbei, str, SIZEOF(str)); - if (str[0]) { - tmi.printTimeStamp(NULL, dbei.timestamp, _T("d t"), strdatetime, SIZEOF(strdatetime), 0); - mir_sntprintf(eventText, SIZEOF(eventText), _T("%s: %s"), strdatetime, str); - i = SendMessage(hwndList, LB_ADDSTRING, 0, (LPARAM)eventText); - SendMessage(hwndList, LB_SETITEMDATA, i, (LPARAM)hDbEvent); - } - hDbEvent = db_event_prev(hInfo->hContact, hDbEvent); - } - mir_free(dbei.pBlob); - - SendDlgItemMessage(hInfo->hwnd, IDC_LIST, LB_SETCURSEL, 0, 0); - SendMessage(hInfo->hwnd, WM_COMMAND, MAKEWPARAM(IDC_LIST, LBN_SELCHANGE), 0); - EnableWindow(GetDlgItem(hInfo->hwnd, IDC_LIST), TRUE); - mir_free(hInfo); -} - -static int HistoryDlgResizer(HWND, LPARAM, UTILRESIZECONTROL *urc) -{ - switch(urc->wId) { - case IDC_LIST: - return RD_ANCHORX_WIDTH|RD_ANCHORY_HEIGHT; - case IDC_EDIT: - return RD_ANCHORX_WIDTH|RD_ANCHORY_BOTTOM; - case IDC_FIND: - case IDC_DELETEHISTORY: - return RD_ANCHORX_LEFT|RD_ANCHORY_BOTTOM; - case IDOK: - return RD_ANCHORX_RIGHT|RD_ANCHORY_BOTTOM; - } - return RD_ANCHORX_LEFT|RD_ANCHORY_TOP; -} - -static INT_PTR CALLBACK DlgProcHistory(HWND hwndDlg, UINT msg, WPARAM wParam, LPARAM lParam) -{ - MCONTACT hContact = (MCONTACT)GetWindowLongPtr(hwndDlg, GWLP_USERDATA); - switch (msg) { - case WM_INITDIALOG: - TranslateDialogDefault(hwndDlg); - SetWindowLongPtr(hwndDlg, GWLP_USERDATA, (LONG_PTR)lParam); - hContact = lParam; - WindowList_Add(hWindowList, hwndDlg, hContact); - Utils_RestoreWindowPosition(hwndDlg, hContact, "History", ""); - { - TCHAR* contactName, str[200]; - contactName = pcli->pfnGetContactDisplayName(hContact, 0); - mir_sntprintf(str, SIZEOF(str), TranslateT("History for %s"), contactName); - SetWindowText(hwndDlg, str); - } - Window_SetIcon_IcoLib(hwndDlg, SKINICON_OTHER_HISTORY); - SendMessage(hwndDlg, DM_HREBUILD, 0, 0); - return TRUE; - - case DM_HREBUILD: - { - THistoryThread* hInfo = (THistoryThread*)mir_alloc(sizeof(THistoryThread)); - EnableWindow(GetDlgItem(hwndDlg, IDC_LIST), FALSE); - hInfo->hContact = hContact; - hInfo->hwnd = hwndDlg; - forkthread(FillHistoryThread, 0, hInfo); - } - return TRUE; - - case WM_DESTROY: - Window_FreeIcon_IcoLib(hwndDlg); - Utils_SaveWindowPosition(hwndDlg, hContact, "History", ""); - WindowList_Remove(hWindowList, hwndDlg); - return TRUE; - - case WM_GETMINMAXINFO: - ((MINMAXINFO*)lParam)->ptMinTrackSize.x = 300; - ((MINMAXINFO*)lParam)->ptMinTrackSize.y = 230; - - case WM_SIZE: - { - UTILRESIZEDIALOG urd = {0}; - urd.cbSize = sizeof(urd); - urd.hwndDlg = hwndDlg; - urd.hInstance = hInst; - urd.lpTemplate = MAKEINTRESOURCEA(IDD_HISTORY); - urd.lParam = 0; - urd.pfnResizer = HistoryDlgResizer; - CallService(MS_UTILS_RESIZEDIALOG, 0, (LPARAM)&urd); - return TRUE; - } - case WM_COMMAND: - switch (LOWORD(wParam)) { - case IDOK: - case IDCANCEL: - DestroyWindow(hwndDlg); - return TRUE; - - case IDC_FIND: - ShowWindow(CreateDialogParam(hInst, MAKEINTRESOURCE(IDD_HISTORY_FIND), hwndDlg, DlgProcHistoryFind, (LPARAM)hwndDlg), SW_SHOW); - return TRUE; - - case IDC_DELETEHISTORY: - { - HANDLE hDbevent; - int index = SendDlgItemMessage(hwndDlg, IDC_LIST, LB_GETCURSEL, 0, 0); - if (index == LB_ERR) - break; - - if (MessageBox(hwndDlg, TranslateT("Are you sure you want to delete this history item?"), TranslateT("Delete history"), MB_YESNO|MB_ICONQUESTION) == IDYES) { - hDbevent = (HANDLE)SendDlgItemMessage(hwndDlg, IDC_LIST, LB_GETITEMDATA, index, 0); - db_event_delete(hContact, hDbevent); - SendMessage(hwndDlg, DM_HREBUILD, 0, 0); - } - return TRUE; - } - case IDC_LIST: - if (HIWORD(wParam) == LBN_SELCHANGE) { - int sel = SendDlgItemMessage(hwndDlg, IDC_LIST, LB_GETCURSEL, 0, 0); - if (sel == LB_ERR) { EnableWindow(GetDlgItem(hwndDlg, IDC_DELETEHISTORY), FALSE); break; } - EnableWindow(GetDlgItem(hwndDlg, IDC_DELETEHISTORY), TRUE); - TCHAR *contactName = pcli->pfnGetContactDisplayName(hContact, 0); - HANDLE hDbEvent = (HANDLE)SendDlgItemMessage(hwndDlg, IDC_LIST, LB_GETITEMDATA, sel, 0); - - DBEVENTINFO dbei = { sizeof(dbei) }; - dbei.cbBlob = db_event_getBlobSize(hDbEvent); - if ((int)dbei.cbBlob != -1) { - dbei.pBlob = (PBYTE)mir_alloc(dbei.cbBlob); - if (db_event_get(hDbEvent, &dbei) == 0) { - TCHAR str[8192]; - GetObjectDescription(&dbei, str, SIZEOF(str)); - if (str[0]) - SetDlgItemText(hwndDlg, IDC_EDIT, str); - } - mir_free(dbei.pBlob); - } - } - return TRUE; - } - break; - case DM_FINDNEXT: - { - int index = SendDlgItemMessage(hwndDlg, IDC_LIST, LB_GETCURSEL, 0, 0); - if (index == LB_ERR) - break; - - DBEVENTINFO dbei = { sizeof(dbei) }; - int oldBlobSize = 0; - HANDLE hDbEventStart = (HANDLE)SendDlgItemMessage(hwndDlg, IDC_LIST, LB_GETITEMDATA, index, 0); - - for (;;) { - HANDLE hDbEvent = (HANDLE)SendDlgItemMessage(hwndDlg, IDC_LIST, LB_GETITEMDATA, ++index, 0); - if (hDbEvent == (HANDLE)LB_ERR) { - index = -1; - continue; - } - if (hDbEvent == hDbEventStart) - break; - - int newBlobSize = db_event_getBlobSize(hDbEvent); - if (newBlobSize>oldBlobSize) { - dbei.pBlob = (PBYTE)mir_realloc(dbei.pBlob, newBlobSize); - oldBlobSize = newBlobSize; - } - dbei.cbBlob = oldBlobSize; - db_event_get(hDbEvent, &dbei); - - TCHAR str[1024]; - GetObjectDescription(&dbei, str, SIZEOF(str)); - if (str[0]) { - CharUpperBuff(str, (int)mir_tstrlen(str)); - if (_tcsstr(str, (const TCHAR*)lParam) != NULL) { - SendDlgItemMessage(hwndDlg, IDC_LIST, LB_SETCURSEL, index, 0); - SendMessage(hwndDlg, WM_COMMAND, MAKEWPARAM(IDC_LIST, LBN_SELCHANGE), 0); - break; - } } } - - mir_free(dbei.pBlob); - break; - } - } - return FALSE; -} - -static INT_PTR CALLBACK DlgProcHistoryFind(HWND hwndDlg, UINT msg, WPARAM wParam, LPARAM lParam) -{ - switch (msg) { - case WM_INITDIALOG: - TranslateDialogDefault(hwndDlg); - SetWindowLongPtr(hwndDlg, GWLP_USERDATA, (LONG_PTR)lParam); - return TRUE; - - case WM_COMMAND: - switch (LOWORD(wParam)) { - case IDOK://find Next - { - TCHAR str[128]; - HWND hwndParent = (HWND)GetWindowLongPtr(hwndDlg, GWLP_USERDATA); - GetDlgItemText(hwndDlg, IDC_FINDWHAT, str, SIZEOF(str)); - CharUpperBuff(str, (int)mir_tstrlen(str)); - SendMessage(hwndParent, DM_FINDNEXT, 0, (LPARAM)str); - return TRUE; - } - case IDCANCEL: - DestroyWindow(hwndDlg); - return TRUE; - } - break; - } - return FALSE; -} - -///////////////////////////////////////////////////////////////////////////////////////// - -static INT_PTR UserHistoryCommand(WPARAM wParam, LPARAM) -{ - HWND hwnd = WindowList_Find(hWindowList, wParam); - if (hwnd) { - SetForegroundWindow(hwnd); - SetFocus(hwnd); - return 0; - } - CreateDialogParam(hInst, MAKEINTRESOURCE(IDD_HISTORY), NULL, DlgProcHistory, wParam); - return 0; -} - -static int HistoryContactDelete(WPARAM wParam, LPARAM) -{ - HWND hwnd = WindowList_Find(hWindowList, wParam); - if (hwnd != NULL) - DestroyWindow(hwnd); - return 0; -} - -static int PrebuildContactMenu(WPARAM hContact, LPARAM lParam) -{ - Menu_ShowItem(hContactMenu, db_event_last(hContact) != NULL); - return 0; -} - -static int PreShutdownHistoryModule(WPARAM, LPARAM) -{ - if (hWindowList) { - WindowList_Broadcast(hWindowList, WM_DESTROY, 0, 0); - WindowList_Destroy(hWindowList); - } - return 0; -} - -int LoadHistoryModule(void) -{ - CLISTMENUITEM mi = { sizeof(mi) }; - mi.position = 1000090000; - mi.icolibItem = GetSkinIconHandle(SKINICON_OTHER_HISTORY); - mi.pszName = LPGEN("View &history"); - mi.pszService = MS_HISTORY_SHOWCONTACTHISTORY; - hContactMenu = Menu_AddContactMenuItem(&mi); - - CreateServiceFunction(MS_HISTORY_SHOWCONTACTHISTORY, UserHistoryCommand); - hWindowList = WindowList_Create(); - HookEvent(ME_DB_CONTACT_DELETED, HistoryContactDelete); - HookEvent(ME_SYSTEM_PRESHUTDOWN, PreShutdownHistoryModule); - HookEvent(ME_CLIST_PREBUILDCONTACTMENU, PrebuildContactMenu); - return 0; -} diff --git a/src/core/stduihist/main.cpp b/src/core/stduihist/main.cpp deleted file mode 100644 index a44b9fee5f..0000000000 --- a/src/core/stduihist/main.cpp +++ /dev/null @@ -1,71 +0,0 @@ -/* - -Standard ugly history viewer for Miranda NG - -Copyright (C) 2012-14 George Hazan - -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., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ - -#include "commonheaders.h" - -int LoadHistoryModule(void); - -CLIST_INTERFACE* pcli; -TIME_API tmi; -HINSTANCE hInst; -int hLangpack; - -PLUGININFOEX pluginInfo = { - sizeof(PLUGININFOEX), - __PLUGIN_NAME, - MIRANDA_VERSION_DWORD, - __DESCRIPTION, - __AUTHOR, - __AUTHOREMAIL, - __COPYRIGHT, - __AUTHORWEB, - UNICODE_AWARE, - /* 5eedf3c5-3071-4234-a627-efd062a4d694 */ - { 0x5eedf3c5, 0x3071, 0x4234, {0xa6, 0x27, 0xef, 0xd0, 0x62, 0xa4, 0xd6, 0x94}} -}; - -BOOL WINAPI DllMain(HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpvReserved) -{ - hInst = hinstDLL; - return TRUE; -} - -extern "C" __declspec(dllexport) PLUGININFOEX* MirandaPluginInfoEx(DWORD mirandaVersion) -{ - return &pluginInfo; -} - -extern "C" __declspec(dllexport) const MUUID MirandaInterfaces[] = { MIID_UIHISTORY, MIID_LAST }; - -extern "C" int __declspec(dllexport) Load(void) -{ - mir_getLP(&pluginInfo); - mir_getTMI(&tmi); - mir_getCLI(); - - LoadHistoryModule(); - return 0; -} - -extern "C" int __declspec(dllexport) Unload(void) -{ - return 0; -} diff --git a/src/core/stduihist/res/resource.rc b/src/core/stduihist/res/resource.rc new file mode 100644 index 0000000000..1c0884e4a2 --- /dev/null +++ b/src/core/stduihist/res/resource.rc @@ -0,0 +1,107 @@ +// Microsoft Visual C++ generated resource script. +// +#include "..\..\resource.h" + +#define APSTUDIO_READONLY_SYMBOLS +///////////////////////////////////////////////////////////////////////////// +// +// Generated from the TEXTINCLUDE 2 resource. +// +#include +#include + +///////////////////////////////////////////////////////////////////////////// +#undef APSTUDIO_READONLY_SYMBOLS + +///////////////////////////////////////////////////////////////////////////// +// English (United States) resources + +#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU) +LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US +#pragma code_page(1252) + +///////////////////////////////////////////////////////////////////////////// +// +// Dialog +// + +IDD_HISTORY_FIND DIALOGEX 0, 0, 230, 46 +STYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | WS_POPUP | WS_CAPTION | WS_SYSMENU +EXSTYLE WS_EX_CONTROLPARENT +CAPTION "Find" +FONT 8, "MS Shell Dlg", 0, 0, 0x1 +BEGIN + EDITTEXT IDC_FINDWHAT,48,11,115,12,ES_AUTOHSCROLL + DEFPUSHBUTTON "&Find next",IDOK,173,7,50,14 + PUSHBUTTON "Cancel",IDCANCEL,173,24,50,14 + LTEXT "Find what:",IDC_STATIC,7,13,39,9 +END + +IDD_HISTORY DIALOGEX 0, 0, 296, 166 +STYLE DS_SETFONT | DS_FIXEDSYS | DS_CENTER | WS_MINIMIZEBOX | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU | WS_THICKFRAME +EXSTYLE WS_EX_CONTROLPARENT +CAPTION "Message history" +FONT 8, "MS Shell Dlg", 0, 0, 0x1 +BEGIN + DEFPUSHBUTTON "Close",IDOK,239,144,50,14 + EDITTEXT IDC_EDIT,7,83,282,52,ES_MULTILINE | ES_AUTOVSCROLL | ES_READONLY | WS_VSCROLL + LISTBOX IDC_LIST,7,7,282,72,LBS_NOINTEGRALHEIGHT | WS_VSCROLL | WS_TABSTOP + PUSHBUTTON "&Find...",IDC_FIND,7,144,50,14 + PUSHBUTTON "Delete",IDC_DELETEHISTORY,66,144,50,14 +END + +#endif // APSTUDIO_INVOKED + +///////////////////////////////////////////////////////////////////////////// +// +// DESIGNINFO +// + +#ifdef APSTUDIO_INVOKED +GUIDELINES DESIGNINFO +BEGIN + IDD_HISTORY_FIND, DIALOG + BEGIN + LEFTMARGIN, 7 + RIGHTMARGIN, 223 + TOPMARGIN, 7 + BOTTOMMARGIN, 39 + HORZGUIDE, 17 + END + + IDD_HISTORY, DIALOG + BEGIN + LEFTMARGIN, 7 + RIGHTMARGIN, 289 + TOPMARGIN, 7 + BOTTOMMARGIN, 158 + END +END +#endif // APSTUDIO_INVOKED + + +#ifdef APSTUDIO_INVOKED +///////////////////////////////////////////////////////////////////////////// +// +// TEXTINCLUDE +// + +1 TEXTINCLUDE +BEGIN + "..\..\resource.h\0" +END + +2 TEXTINCLUDE +BEGIN + "#include \r\n" + "#include \r\n" + "\0" +END + +3 TEXTINCLUDE +BEGIN + "\r\n" + "\0" +END + +#endif // APSTUDIO_INVOKED diff --git a/src/core/stduihist/res/version.rc b/src/core/stduihist/res/version.rc new file mode 100644 index 0000000000..5bfbab4754 --- /dev/null +++ b/src/core/stduihist/res/version.rc @@ -0,0 +1,38 @@ +// Microsoft Visual C++ generated resource script. +// +#ifdef APSTUDIO_INVOKED +#error this file is not editable by Microsoft Visual C++ +#endif //APSTUDIO_INVOKED + +#include "afxres.h" +#include "..\src\version.h" + +VS_VERSION_INFO VERSIONINFO + FILEVERSION __FILEVERSION_STRING + PRODUCTVERSION __FILEVERSION_STRING + FILEFLAGSMASK 0x17L +#ifdef _DEBUG + FILEFLAGS 0x1L +#else + FILEFLAGS 0x0L +#endif + FILEOS 0x4L + FILETYPE 0x0L + FILESUBTYPE 0x0L +BEGIN + BLOCK "StringFileInfo" + BEGIN + BLOCK "000004b0" + BEGIN + VALUE "FileDescription", __DESCRIPTION + VALUE "InternalName", __PLUGIN_NAME + VALUE "LegalCopyright", __COPYRIGHT + VALUE "OriginalFilename", __FILENAME + VALUE "ProductName", __PLUGIN_NAME + END + END + BLOCK "VarFileInfo" + BEGIN + VALUE "Translation", 0x0, 1200 + END +END diff --git a/src/core/stduihist/resource.rc b/src/core/stduihist/resource.rc deleted file mode 100644 index 1c0884e4a2..0000000000 --- a/src/core/stduihist/resource.rc +++ /dev/null @@ -1,107 +0,0 @@ -// Microsoft Visual C++ generated resource script. -// -#include "..\..\resource.h" - -#define APSTUDIO_READONLY_SYMBOLS -///////////////////////////////////////////////////////////////////////////// -// -// Generated from the TEXTINCLUDE 2 resource. -// -#include -#include - -///////////////////////////////////////////////////////////////////////////// -#undef APSTUDIO_READONLY_SYMBOLS - -///////////////////////////////////////////////////////////////////////////// -// English (United States) resources - -#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU) -LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US -#pragma code_page(1252) - -///////////////////////////////////////////////////////////////////////////// -// -// Dialog -// - -IDD_HISTORY_FIND DIALOGEX 0, 0, 230, 46 -STYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | WS_POPUP | WS_CAPTION | WS_SYSMENU -EXSTYLE WS_EX_CONTROLPARENT -CAPTION "Find" -FONT 8, "MS Shell Dlg", 0, 0, 0x1 -BEGIN - EDITTEXT IDC_FINDWHAT,48,11,115,12,ES_AUTOHSCROLL - DEFPUSHBUTTON "&Find next",IDOK,173,7,50,14 - PUSHBUTTON "Cancel",IDCANCEL,173,24,50,14 - LTEXT "Find what:",IDC_STATIC,7,13,39,9 -END - -IDD_HISTORY DIALOGEX 0, 0, 296, 166 -STYLE DS_SETFONT | DS_FIXEDSYS | DS_CENTER | WS_MINIMIZEBOX | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU | WS_THICKFRAME -EXSTYLE WS_EX_CONTROLPARENT -CAPTION "Message history" -FONT 8, "MS Shell Dlg", 0, 0, 0x1 -BEGIN - DEFPUSHBUTTON "Close",IDOK,239,144,50,14 - EDITTEXT IDC_EDIT,7,83,282,52,ES_MULTILINE | ES_AUTOVSCROLL | ES_READONLY | WS_VSCROLL - LISTBOX IDC_LIST,7,7,282,72,LBS_NOINTEGRALHEIGHT | WS_VSCROLL | WS_TABSTOP - PUSHBUTTON "&Find...",IDC_FIND,7,144,50,14 - PUSHBUTTON "Delete",IDC_DELETEHISTORY,66,144,50,14 -END - -#endif // APSTUDIO_INVOKED - -///////////////////////////////////////////////////////////////////////////// -// -// DESIGNINFO -// - -#ifdef APSTUDIO_INVOKED -GUIDELINES DESIGNINFO -BEGIN - IDD_HISTORY_FIND, DIALOG - BEGIN - LEFTMARGIN, 7 - RIGHTMARGIN, 223 - TOPMARGIN, 7 - BOTTOMMARGIN, 39 - HORZGUIDE, 17 - END - - IDD_HISTORY, DIALOG - BEGIN - LEFTMARGIN, 7 - RIGHTMARGIN, 289 - TOPMARGIN, 7 - BOTTOMMARGIN, 158 - END -END -#endif // APSTUDIO_INVOKED - - -#ifdef APSTUDIO_INVOKED -///////////////////////////////////////////////////////////////////////////// -// -// TEXTINCLUDE -// - -1 TEXTINCLUDE -BEGIN - "..\..\resource.h\0" -END - -2 TEXTINCLUDE -BEGIN - "#include \r\n" - "#include \r\n" - "\0" -END - -3 TEXTINCLUDE -BEGIN - "\r\n" - "\0" -END - -#endif // APSTUDIO_INVOKED diff --git a/src/core/stduihist/src/commonheaders.cpp b/src/core/stduihist/src/commonheaders.cpp new file mode 100644 index 0000000000..95b2201163 --- /dev/null +++ b/src/core/stduihist/src/commonheaders.cpp @@ -0,0 +1,2 @@ +#include "commonheaders.h" + diff --git a/src/core/stduihist/src/commonheaders.h b/src/core/stduihist/src/commonheaders.h new file mode 100644 index 0000000000..f5744ec23b --- /dev/null +++ b/src/core/stduihist/src/commonheaders.h @@ -0,0 +1,79 @@ +/* + +Miranda NG: the free IM client for Microsoft* Windows* + +Copyright (c) 2012-14 Miranda NG project (http://miranda-ng.org), +Copyright (c) 2000-12 Miranda IM project, +all portions of this codebase are copyrighted to the people +listed in contributors.txt. + +This program is free software; you can redistribute it and/or +modify it under the terms of the GNU General Public License +as published by the Free Software Foundation; either version 2 +of the License, or (at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program; if not, write to the Free Software +Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +*/ + +#define WINVER 0x0700 +#define _WIN32_WINNT 0x0700 +#define _WIN32_IE 0x0601 + +#include +#include +#include +#include +#include + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "version.h" + +#include "../../resource.h" +#include "../stdplug.h" + +extern HINSTANCE hInst; + +#pragma comment(lib, "version.lib") diff --git a/src/core/stduihist/src/history.cpp b/src/core/stduihist/src/history.cpp new file mode 100644 index 0000000000..62f58b453b --- /dev/null +++ b/src/core/stduihist/src/history.cpp @@ -0,0 +1,423 @@ +/* + +Miranda NG: the free IM client for Microsoft* Windows* + +Copyright (c) 2012-14 Miranda NG project (http://miranda-ng.org), +Copyright (c) 2000-12 Miranda IM project, +all portions of this codebase are copyrighted to the people +listed in contributors.txt. + +This program is free software; you can redistribute it and/or +modify it under the terms of the GNU General Public License +as published by the Free Software Foundation; either version 2 +of the License, or (at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program; if not, write to the Free Software +Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +*/ + +#include "commonheaders.h" + +#define SUMMARY 0 +#define DETAIL 1 +#define DM_FINDNEXT (WM_USER+10) +#define DM_HREBUILD (WM_USER+11) + +static INT_PTR CALLBACK DlgProcHistory(HWND hwndDlg, UINT msg, WPARAM wParam, LPARAM lParam); +static INT_PTR CALLBACK DlgProcHistoryFind(HWND hwndDlg, UINT msg, WPARAM wParam, LPARAM lParam); +static HANDLE hWindowList = 0; +static HGENMENU hContactMenu = 0; + +///////////////////////////////////////////////////////////////////////////////////////// +// Fills the events list + +static void GetMessageDescription(DBEVENTINFO *dbei, TCHAR* buf, int cbBuf) +{ + TCHAR* msg = DbGetEventTextT(dbei, CP_ACP); + _tcsncpy(buf, msg ? msg : TranslateT("Invalid message"), cbBuf); + buf[ cbBuf-1 ] = 0; + mir_free(msg); +} + +static void GetUrlDescription(DBEVENTINFO *dbei, TCHAR* buf, int cbBuf) +{ + int len = dbei->cbBlob; + if (len >= cbBuf) + len = cbBuf-1; + + MultiByteToWideChar(CP_ACP, 0, (LPCSTR)dbei->pBlob, len, buf, cbBuf); + buf[ len ] = 0; + + if (len < cbBuf-3) + _tcscat(buf, _T("\r\n")); +} + +static void GetFileDescription(DBEVENTINFO *dbei, TCHAR* buf, int cbBuf) +{ + int len = dbei->cbBlob - sizeof(DWORD); + if (len >= cbBuf) + len = cbBuf-1; + + MultiByteToWideChar(CP_ACP, 0, (LPCSTR)dbei->pBlob + sizeof(DWORD), len, buf, cbBuf); + buf[ len ] = 0; + + if (len < cbBuf-3) + _tcscat(buf, _T("\r\n")); +} + +static void GetObjectDescription(DBEVENTINFO *dbei, TCHAR* str, int cbStr) +{ + switch(dbei->eventType) { + case EVENTTYPE_MESSAGE: + GetMessageDescription(dbei, str, cbStr); + break; + + case EVENTTYPE_URL: + GetUrlDescription(dbei, str, cbStr); + break; + + case EVENTTYPE_FILE: + GetFileDescription(dbei, str, cbStr); + break; + + default: + DBEVENTTYPEDESCR *et = (DBEVENTTYPEDESCR*)CallService(MS_DB_EVENT_GETTYPE, (WPARAM)dbei->szModule, (LPARAM)dbei->eventType); + if (et && (et->flags & DETF_HISTORY)) + GetMessageDescription(dbei, str, cbStr); + else + *str = 0; +} } + +static void GetObjectSummary(DBEVENTINFO *dbei, TCHAR* str, int cbStr) +{ + TCHAR* pszSrc, *pszTmp = NULL; + + switch(dbei->eventType) { + case EVENTTYPE_MESSAGE: + if (dbei->flags & DBEF_SENT) pszSrc = TranslateT("Outgoing message"); + else pszSrc = TranslateT("Incoming message"); + break; + + case EVENTTYPE_URL: + if (dbei->flags & DBEF_SENT) pszSrc = TranslateT("Outgoing URL"); + else pszSrc = TranslateT("Incoming URL"); + break; + + case EVENTTYPE_FILE: + if (dbei->flags & DBEF_SENT) pszSrc = TranslateT("Outgoing file"); + else pszSrc = TranslateT("Incoming file"); + break; + + default: + DBEVENTTYPEDESCR* et = (DBEVENTTYPEDESCR*)CallService(MS_DB_EVENT_GETTYPE, (WPARAM)dbei->szModule, (LPARAM)dbei->eventType); + if (et && (et->flags & DETF_HISTORY)) { + pszTmp = mir_a2t(et->descr); + pszSrc = TranslateTS(pszTmp); + break; + } + *str = 0; + return; + } + + _tcsncpy(str, (const TCHAR*)pszSrc, cbStr); + str[cbStr-1] = 0; + mir_free(pszTmp); +} + +typedef struct { + MCONTACT hContact; + HWND hwnd; +} THistoryThread; + +static void FillHistoryThread(void* param) +{ + Thread_SetName("HistoryWindow::FillHistoryThread"); + + THistoryThread *hInfo = (THistoryThread*)param; + HWND hwndList = GetDlgItem(hInfo->hwnd, IDC_LIST); + + SendDlgItemMessage(hInfo->hwnd, IDC_LIST, LB_RESETCONTENT, 0, 0); + int i = db_event_count(hInfo->hContact); + SendDlgItemMessage(hInfo->hwnd, IDC_LIST, LB_INITSTORAGE, i, i*40); + + DBEVENTINFO dbei = { sizeof(dbei) }; + int oldBlobSize = 0; + HANDLE hDbEvent = db_event_last(hInfo->hContact); + + while (hDbEvent != NULL) { + if ( !IsWindow(hInfo->hwnd)) + break; + int newBlobSize = db_event_getBlobSize(hDbEvent); + if (newBlobSize > oldBlobSize) { + dbei.pBlob = (PBYTE)mir_realloc(dbei.pBlob, newBlobSize); + oldBlobSize = newBlobSize; + } + dbei.cbBlob = oldBlobSize; + db_event_get(hDbEvent, &dbei); + + TCHAR str[200], eventText[256], strdatetime[64]; + GetObjectSummary(&dbei, str, SIZEOF(str)); + if (str[0]) { + tmi.printTimeStamp(NULL, dbei.timestamp, _T("d t"), strdatetime, SIZEOF(strdatetime), 0); + mir_sntprintf(eventText, SIZEOF(eventText), _T("%s: %s"), strdatetime, str); + i = SendMessage(hwndList, LB_ADDSTRING, 0, (LPARAM)eventText); + SendMessage(hwndList, LB_SETITEMDATA, i, (LPARAM)hDbEvent); + } + hDbEvent = db_event_prev(hInfo->hContact, hDbEvent); + } + mir_free(dbei.pBlob); + + SendDlgItemMessage(hInfo->hwnd, IDC_LIST, LB_SETCURSEL, 0, 0); + SendMessage(hInfo->hwnd, WM_COMMAND, MAKEWPARAM(IDC_LIST, LBN_SELCHANGE), 0); + EnableWindow(GetDlgItem(hInfo->hwnd, IDC_LIST), TRUE); + mir_free(hInfo); +} + +static int HistoryDlgResizer(HWND, LPARAM, UTILRESIZECONTROL *urc) +{ + switch(urc->wId) { + case IDC_LIST: + return RD_ANCHORX_WIDTH|RD_ANCHORY_HEIGHT; + case IDC_EDIT: + return RD_ANCHORX_WIDTH|RD_ANCHORY_BOTTOM; + case IDC_FIND: + case IDC_DELETEHISTORY: + return RD_ANCHORX_LEFT|RD_ANCHORY_BOTTOM; + case IDOK: + return RD_ANCHORX_RIGHT|RD_ANCHORY_BOTTOM; + } + return RD_ANCHORX_LEFT|RD_ANCHORY_TOP; +} + +static INT_PTR CALLBACK DlgProcHistory(HWND hwndDlg, UINT msg, WPARAM wParam, LPARAM lParam) +{ + MCONTACT hContact = (MCONTACT)GetWindowLongPtr(hwndDlg, GWLP_USERDATA); + switch (msg) { + case WM_INITDIALOG: + TranslateDialogDefault(hwndDlg); + SetWindowLongPtr(hwndDlg, GWLP_USERDATA, (LONG_PTR)lParam); + hContact = lParam; + WindowList_Add(hWindowList, hwndDlg, hContact); + Utils_RestoreWindowPosition(hwndDlg, hContact, "History", ""); + { + TCHAR* contactName, str[200]; + contactName = pcli->pfnGetContactDisplayName(hContact, 0); + mir_sntprintf(str, SIZEOF(str), TranslateT("History for %s"), contactName); + SetWindowText(hwndDlg, str); + } + Window_SetIcon_IcoLib(hwndDlg, SKINICON_OTHER_HISTORY); + SendMessage(hwndDlg, DM_HREBUILD, 0, 0); + return TRUE; + + case DM_HREBUILD: + { + THistoryThread* hInfo = (THistoryThread*)mir_alloc(sizeof(THistoryThread)); + EnableWindow(GetDlgItem(hwndDlg, IDC_LIST), FALSE); + hInfo->hContact = hContact; + hInfo->hwnd = hwndDlg; + forkthread(FillHistoryThread, 0, hInfo); + } + return TRUE; + + case WM_DESTROY: + Window_FreeIcon_IcoLib(hwndDlg); + Utils_SaveWindowPosition(hwndDlg, hContact, "History", ""); + WindowList_Remove(hWindowList, hwndDlg); + return TRUE; + + case WM_GETMINMAXINFO: + ((MINMAXINFO*)lParam)->ptMinTrackSize.x = 300; + ((MINMAXINFO*)lParam)->ptMinTrackSize.y = 230; + + case WM_SIZE: + { + UTILRESIZEDIALOG urd = {0}; + urd.cbSize = sizeof(urd); + urd.hwndDlg = hwndDlg; + urd.hInstance = hInst; + urd.lpTemplate = MAKEINTRESOURCEA(IDD_HISTORY); + urd.lParam = 0; + urd.pfnResizer = HistoryDlgResizer; + CallService(MS_UTILS_RESIZEDIALOG, 0, (LPARAM)&urd); + return TRUE; + } + case WM_COMMAND: + switch (LOWORD(wParam)) { + case IDOK: + case IDCANCEL: + DestroyWindow(hwndDlg); + return TRUE; + + case IDC_FIND: + ShowWindow(CreateDialogParam(hInst, MAKEINTRESOURCE(IDD_HISTORY_FIND), hwndDlg, DlgProcHistoryFind, (LPARAM)hwndDlg), SW_SHOW); + return TRUE; + + case IDC_DELETEHISTORY: + { + HANDLE hDbevent; + int index = SendDlgItemMessage(hwndDlg, IDC_LIST, LB_GETCURSEL, 0, 0); + if (index == LB_ERR) + break; + + if (MessageBox(hwndDlg, TranslateT("Are you sure you want to delete this history item?"), TranslateT("Delete history"), MB_YESNO|MB_ICONQUESTION) == IDYES) { + hDbevent = (HANDLE)SendDlgItemMessage(hwndDlg, IDC_LIST, LB_GETITEMDATA, index, 0); + db_event_delete(hContact, hDbevent); + SendMessage(hwndDlg, DM_HREBUILD, 0, 0); + } + return TRUE; + } + case IDC_LIST: + if (HIWORD(wParam) == LBN_SELCHANGE) { + int sel = SendDlgItemMessage(hwndDlg, IDC_LIST, LB_GETCURSEL, 0, 0); + if (sel == LB_ERR) { EnableWindow(GetDlgItem(hwndDlg, IDC_DELETEHISTORY), FALSE); break; } + EnableWindow(GetDlgItem(hwndDlg, IDC_DELETEHISTORY), TRUE); + TCHAR *contactName = pcli->pfnGetContactDisplayName(hContact, 0); + HANDLE hDbEvent = (HANDLE)SendDlgItemMessage(hwndDlg, IDC_LIST, LB_GETITEMDATA, sel, 0); + + DBEVENTINFO dbei = { sizeof(dbei) }; + dbei.cbBlob = db_event_getBlobSize(hDbEvent); + if ((int)dbei.cbBlob != -1) { + dbei.pBlob = (PBYTE)mir_alloc(dbei.cbBlob); + if (db_event_get(hDbEvent, &dbei) == 0) { + TCHAR str[8192]; + GetObjectDescription(&dbei, str, SIZEOF(str)); + if (str[0]) + SetDlgItemText(hwndDlg, IDC_EDIT, str); + } + mir_free(dbei.pBlob); + } + } + return TRUE; + } + break; + case DM_FINDNEXT: + { + int index = SendDlgItemMessage(hwndDlg, IDC_LIST, LB_GETCURSEL, 0, 0); + if (index == LB_ERR) + break; + + DBEVENTINFO dbei = { sizeof(dbei) }; + int oldBlobSize = 0; + HANDLE hDbEventStart = (HANDLE)SendDlgItemMessage(hwndDlg, IDC_LIST, LB_GETITEMDATA, index, 0); + + for (;;) { + HANDLE hDbEvent = (HANDLE)SendDlgItemMessage(hwndDlg, IDC_LIST, LB_GETITEMDATA, ++index, 0); + if (hDbEvent == (HANDLE)LB_ERR) { + index = -1; + continue; + } + if (hDbEvent == hDbEventStart) + break; + + int newBlobSize = db_event_getBlobSize(hDbEvent); + if (newBlobSize>oldBlobSize) { + dbei.pBlob = (PBYTE)mir_realloc(dbei.pBlob, newBlobSize); + oldBlobSize = newBlobSize; + } + dbei.cbBlob = oldBlobSize; + db_event_get(hDbEvent, &dbei); + + TCHAR str[1024]; + GetObjectDescription(&dbei, str, SIZEOF(str)); + if (str[0]) { + CharUpperBuff(str, (int)mir_tstrlen(str)); + if (_tcsstr(str, (const TCHAR*)lParam) != NULL) { + SendDlgItemMessage(hwndDlg, IDC_LIST, LB_SETCURSEL, index, 0); + SendMessage(hwndDlg, WM_COMMAND, MAKEWPARAM(IDC_LIST, LBN_SELCHANGE), 0); + break; + } } } + + mir_free(dbei.pBlob); + break; + } + } + return FALSE; +} + +static INT_PTR CALLBACK DlgProcHistoryFind(HWND hwndDlg, UINT msg, WPARAM wParam, LPARAM lParam) +{ + switch (msg) { + case WM_INITDIALOG: + TranslateDialogDefault(hwndDlg); + SetWindowLongPtr(hwndDlg, GWLP_USERDATA, (LONG_PTR)lParam); + return TRUE; + + case WM_COMMAND: + switch (LOWORD(wParam)) { + case IDOK://find Next + { + TCHAR str[128]; + HWND hwndParent = (HWND)GetWindowLongPtr(hwndDlg, GWLP_USERDATA); + GetDlgItemText(hwndDlg, IDC_FINDWHAT, str, SIZEOF(str)); + CharUpperBuff(str, (int)mir_tstrlen(str)); + SendMessage(hwndParent, DM_FINDNEXT, 0, (LPARAM)str); + return TRUE; + } + case IDCANCEL: + DestroyWindow(hwndDlg); + return TRUE; + } + break; + } + return FALSE; +} + +///////////////////////////////////////////////////////////////////////////////////////// + +static INT_PTR UserHistoryCommand(WPARAM wParam, LPARAM) +{ + HWND hwnd = WindowList_Find(hWindowList, wParam); + if (hwnd) { + SetForegroundWindow(hwnd); + SetFocus(hwnd); + return 0; + } + CreateDialogParam(hInst, MAKEINTRESOURCE(IDD_HISTORY), NULL, DlgProcHistory, wParam); + return 0; +} + +static int HistoryContactDelete(WPARAM wParam, LPARAM) +{ + HWND hwnd = WindowList_Find(hWindowList, wParam); + if (hwnd != NULL) + DestroyWindow(hwnd); + return 0; +} + +static int PrebuildContactMenu(WPARAM hContact, LPARAM lParam) +{ + Menu_ShowItem(hContactMenu, db_event_last(hContact) != NULL); + return 0; +} + +static int PreShutdownHistoryModule(WPARAM, LPARAM) +{ + if (hWindowList) { + WindowList_Broadcast(hWindowList, WM_DESTROY, 0, 0); + WindowList_Destroy(hWindowList); + } + return 0; +} + +int LoadHistoryModule(void) +{ + CLISTMENUITEM mi = { sizeof(mi) }; + mi.position = 1000090000; + mi.icolibItem = GetSkinIconHandle(SKINICON_OTHER_HISTORY); + mi.pszName = LPGEN("View &history"); + mi.pszService = MS_HISTORY_SHOWCONTACTHISTORY; + hContactMenu = Menu_AddContactMenuItem(&mi); + + CreateServiceFunction(MS_HISTORY_SHOWCONTACTHISTORY, UserHistoryCommand); + hWindowList = WindowList_Create(); + HookEvent(ME_DB_CONTACT_DELETED, HistoryContactDelete); + HookEvent(ME_SYSTEM_PRESHUTDOWN, PreShutdownHistoryModule); + HookEvent(ME_CLIST_PREBUILDCONTACTMENU, PrebuildContactMenu); + return 0; +} diff --git a/src/core/stduihist/src/main.cpp b/src/core/stduihist/src/main.cpp new file mode 100644 index 0000000000..a44b9fee5f --- /dev/null +++ b/src/core/stduihist/src/main.cpp @@ -0,0 +1,71 @@ +/* + +Standard ugly history viewer for Miranda NG + +Copyright (C) 2012-14 George Hazan + +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., +51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. +*/ + +#include "commonheaders.h" + +int LoadHistoryModule(void); + +CLIST_INTERFACE* pcli; +TIME_API tmi; +HINSTANCE hInst; +int hLangpack; + +PLUGININFOEX pluginInfo = { + sizeof(PLUGININFOEX), + __PLUGIN_NAME, + MIRANDA_VERSION_DWORD, + __DESCRIPTION, + __AUTHOR, + __AUTHOREMAIL, + __COPYRIGHT, + __AUTHORWEB, + UNICODE_AWARE, + /* 5eedf3c5-3071-4234-a627-efd062a4d694 */ + { 0x5eedf3c5, 0x3071, 0x4234, {0xa6, 0x27, 0xef, 0xd0, 0x62, 0xa4, 0xd6, 0x94}} +}; + +BOOL WINAPI DllMain(HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpvReserved) +{ + hInst = hinstDLL; + return TRUE; +} + +extern "C" __declspec(dllexport) PLUGININFOEX* MirandaPluginInfoEx(DWORD mirandaVersion) +{ + return &pluginInfo; +} + +extern "C" __declspec(dllexport) const MUUID MirandaInterfaces[] = { MIID_UIHISTORY, MIID_LAST }; + +extern "C" int __declspec(dllexport) Load(void) +{ + mir_getLP(&pluginInfo); + mir_getTMI(&tmi); + mir_getCLI(); + + LoadHistoryModule(); + return 0; +} + +extern "C" int __declspec(dllexport) Unload(void) +{ + return 0; +} diff --git a/src/core/stduihist/src/version.h b/src/core/stduihist/src/version.h new file mode 100644 index 0000000000..d15d8de7d6 --- /dev/null +++ b/src/core/stduihist/src/version.h @@ -0,0 +1,12 @@ +#include + +#define __FILEVERSION_STRING MIRANDA_VERSION_FILEVERSION +#define __VERSION_STRING MIRANDA_VERSION_STRING + +#define __PLUGIN_NAME "Standard History UI" +#define __FILENAME "stduihist.dll" +#define __DESCRIPTION "Core module for built-in history viewer." +#define __AUTHOR "Miranda NG Development Team" +#define __AUTHOREMAIL "" +#define __AUTHORWEB "http://miranda-ng.org/p/StdUIHist/" +#define __COPYRIGHT "© 2012 Miranda NG Development Team" diff --git a/src/core/stduihist/stduihist_10.vcxproj b/src/core/stduihist/stduihist_10.vcxproj index b79bd4ee4d..0ff5edc20d 100644 --- a/src/core/stduihist/stduihist_10.vcxproj +++ b/src/core/stduihist/stduihist_10.vcxproj @@ -199,22 +199,20 @@ - - Create - Create - Create - Create + + Create - - + + - + + - - + + diff --git a/src/core/stduihist/stduihist_10.vcxproj.filters b/src/core/stduihist/stduihist_10.vcxproj.filters index 4b215c60e3..c2a89081c1 100644 --- a/src/core/stduihist/stduihist_10.vcxproj.filters +++ b/src/core/stduihist/stduihist_10.vcxproj.filters @@ -15,29 +15,32 @@ - + Source Files - + Source Files - + Source Files - + Header Files Header Files + + Header Files + - + Resource Files - + Resource Files diff --git a/src/core/stduihist/stduihist_12.vcxproj b/src/core/stduihist/stduihist_12.vcxproj index d2119995d4..cb0e16ee03 100644 --- a/src/core/stduihist/stduihist_12.vcxproj +++ b/src/core/stduihist/stduihist_12.vcxproj @@ -202,22 +202,20 @@ - - Create - Create - Create - Create + + Create - - + + - + + - - + + diff --git a/src/core/stduihist/stduihist_12.vcxproj.filters b/src/core/stduihist/stduihist_12.vcxproj.filters index 4b215c60e3..c2a89081c1 100644 --- a/src/core/stduihist/stduihist_12.vcxproj.filters +++ b/src/core/stduihist/stduihist_12.vcxproj.filters @@ -15,29 +15,32 @@ - + Source Files - + Source Files - + Source Files - + Header Files Header Files + + Header Files + - + Resource Files - + Resource Files diff --git a/src/core/stduihist/version.h b/src/core/stduihist/version.h deleted file mode 100644 index 6f8c320c5f..0000000000 --- a/src/core/stduihist/version.h +++ /dev/null @@ -1,14 +0,0 @@ - -#include - -#define __FILEVERSION_STRING MIRANDA_VERSION_FILEVERSION -#define __VERSION_STRING MIRANDA_VERSION_STRING - -#define __PLUGIN_NAME "Standard History UI" -#define __INTERNAL_NAME "stduihist" -#define __FILENAME "stduihist.dll" -#define __DESCRIPTION "Core module for built-in history viewer." -#define __AUTHOR "Miranda NG Development Team" -#define __AUTHOREMAIL "" -#define __AUTHORWEB "http://miranda-ng.org/p/StdUIHist/" -#define __COPYRIGHT "© 2012 Miranda NG Development Team" diff --git a/src/core/stduihist/version.rc b/src/core/stduihist/version.rc deleted file mode 100644 index d1da5e8d6a..0000000000 --- a/src/core/stduihist/version.rc +++ /dev/null @@ -1,42 +0,0 @@ -// Microsoft Visual C++ generated resource script. -// -#ifdef APSTUDIO_INVOKED -#error this file is not editable by Microsoft Visual C++ -#endif //APSTUDIO_INVOKED - -#include "afxres.h" -#include "version.h" - -#ifdef _WIN32 -LANGUAGE LANG_NEUTRAL, SUBLANG_NEUTRAL -#endif //_WIN32 - -VS_VERSION_INFO VERSIONINFO - FILEVERSION __FILEVERSION_STRING - PRODUCTVERSION __FILEVERSION_STRING - FILEFLAGSMASK 0x17L -#ifdef _DEBUG - FILEFLAGS 0x1L -#else - FILEFLAGS 0x0L -#endif - FILEOS 0x4L - FILETYPE 0x0L - FILESUBTYPE 0x0L -BEGIN - BLOCK "StringFileInfo" - BEGIN - BLOCK "000004b0" - BEGIN - VALUE "FileDescription", __DESCRIPTION - VALUE "InternalName", __PLUGIN_NAME - VALUE "LegalCopyright", __COPYRIGHT - VALUE "OriginalFilename", __FILENAME - VALUE "ProductName", __PLUGIN_NAME - END - END - BLOCK "VarFileInfo" - BEGIN - VALUE "Translation", 0x0, 1200 - END -END -- cgit v1.2.3