diff options
Diffstat (limited to 'plugins')
33 files changed, 2859 insertions, 0 deletions
diff --git a/plugins/IEHistory/IEHistory.sln b/plugins/IEHistory/IEHistory.sln new file mode 100644 index 0000000000..a9ac33420a --- /dev/null +++ b/plugins/IEHistory/IEHistory.sln @@ -0,0 +1,26 @@ + +Microsoft Visual Studio Solution File, Format Version 9.00 +# Visual Studio 2005 +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "IEHistory", "IEHistory\IEHistory.vcproj", "{7F5EA8BC-8F2B-478E-8F05-0ED4B691B776}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug UNICODE|Win32 = Debug UNICODE|Win32 + Debug|Win32 = Debug|Win32 + Release UNICODE|Win32 = Release UNICODE|Win32 + Release|Win32 = Release|Win32 + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {7F5EA8BC-8F2B-478E-8F05-0ED4B691B776}.Debug UNICODE|Win32.ActiveCfg = Debug UNICODE|Win32 + {7F5EA8BC-8F2B-478E-8F05-0ED4B691B776}.Debug UNICODE|Win32.Build.0 = Debug UNICODE|Win32 + {7F5EA8BC-8F2B-478E-8F05-0ED4B691B776}.Debug|Win32.ActiveCfg = Debug|Win32 + {7F5EA8BC-8F2B-478E-8F05-0ED4B691B776}.Debug|Win32.Build.0 = Debug|Win32 + {7F5EA8BC-8F2B-478E-8F05-0ED4B691B776}.Release UNICODE|Win32.ActiveCfg = Release UNICODE|Win32 + {7F5EA8BC-8F2B-478E-8F05-0ED4B691B776}.Release UNICODE|Win32.Build.0 = Release UNICODE|Win32 + {7F5EA8BC-8F2B-478E-8F05-0ED4B691B776}.Release|Win32.ActiveCfg = Release|Win32 + {7F5EA8BC-8F2B-478E-8F05-0ED4B691B776}.Release|Win32.Build.0 = Release|Win32 + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/plugins/IEHistory/IEHistory.suo b/plugins/IEHistory/IEHistory.suo Binary files differnew file mode 100644 index 0000000000..507be3ffb8 --- /dev/null +++ b/plugins/IEHistory/IEHistory.suo diff --git a/plugins/IEHistory/IEHistory/IEHistory.aps b/plugins/IEHistory/IEHistory/IEHistory.aps Binary files differnew file mode 100644 index 0000000000..549106e9ea --- /dev/null +++ b/plugins/IEHistory/IEHistory/IEHistory.aps diff --git a/plugins/IEHistory/IEHistory/IEHistory.cpp b/plugins/IEHistory/IEHistory/IEHistory.cpp new file mode 100644 index 0000000000..33e892992f --- /dev/null +++ b/plugins/IEHistory/IEHistory/IEHistory.cpp @@ -0,0 +1,131 @@ +/* +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 "commonheaders.h" +#include "services.h" + +char ModuleName[] = "IEHistory"; +HICON hIcon; +HINSTANCE hInstance; +HANDLE hOpenWindowsList = NULL; + +PLUGINLINK *pluginLink; + +HMODULE hUxTheme = 0; +BOOL (WINAPI *MyEnableThemeDialogTexture)(HANDLE, DWORD) = NULL; + +#ifdef _UNICODE +#define IEHISTORY_PLUGININFO_SUFFIX " (Unicode)" +#else +#define IEHISTORY_PLUGININFO_SUFFIX "" +#endif + +PLUGININFOEX pluginInfo = { + sizeof(PLUGININFOEX), + __PLUGIN_DISPLAY_NAME, + VERSION, + __DESC, + __AUTHOR, + __AUTHOREMAIL, + __COPYRIGHT, + __AUTHORWEB, + UNICODE_AWARE, + DEFMOD_UIHISTORY, +#ifdef _UNICODE + {0x2f093b88, 0xf389, 0x44f1, {0x9e, 0x2a, 0x37, 0xc2, 0x91, 0x94, 0x20, 0x3a}} //{2f093b88-f389-44f1-9e2a-37c29194203a} +#else + {0x2f997250, 0xbc2f, 0x46f0, {0xa3, 0x3e, 0x65, 0xf0, 0x62, 0x83, 0xbe, 0x5d}} //{2f997250-bc2f-46f0-a33e-65f06283be5d} +#endif +}; + +OLD_MIRANDAPLUGININFO_SUPPORT; + +extern "C" __declspec(dllexport) PLUGININFOEX *MirandaPluginInfoEx(DWORD mirandaVersion) +{ + Log("%s", "Entering function " __FUNCTION__); + Log("%s", "Leaving function " __FUNCTION__); + return &pluginInfo; +} + +static const MUUID interfaces[] = {MIID_UIHISTORY, MIID_LAST}; + +extern "C" __declspec(dllexport) const MUUID *MirandaPluginInterfaces() +{ + return interfaces; +} + +#include <commctrl.h> + +extern "C" int __declspec(dllexport) Load(PLUGINLINK *link) +{ + INITCOMMONCONTROLSEX icex; + + icex.dwSize = sizeof(icex); + icex.dwICC = ICC_DATE_CLASSES; + + InitCommonControlsEx(&icex); + + if((hUxTheme = LoadLibraryA("uxtheme.dll")) != 0) + { + MyEnableThemeDialogTexture = (BOOL (WINAPI *)(HANDLE, DWORD))GetProcAddress(hUxTheme, "EnableThemeDialogTexture"); + } + + Log("%s", "Entering function " __FUNCTION__); + pluginLink = link; + //all initialization here + hIcon = LoadIcon(hInstance, MAKEINTRESOURCE(IDI_HISTORYICON)); + InitializeMirandaMemFunctions(); + + Log("%s", "Creating service functions ..."); + InitServices(); + + Log("%s", "Hooking events ..."); + HookEvents(); + Log("%s", "Leaving function " __FUNCTION__); + return 0; +} + +extern "C" int __declspec(dllexport) Unload() +{ + Log("%s", "Entering function " __FUNCTION__); + Log("%s", "Unhooking events ..."); + + Log("%s", "Destroying service functions ..."); + DestroyServices(); + + Log("%s", "Closing all open windows ..."); + WindowList_Broadcast(hOpenWindowsList, WM_CLOSE, 0, 0); + + Log("%s", "Leaving function " __FUNCTION__); + return 0; +} + +BOOL WINAPI DllMain(HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpvReserved) +{ + hInstance = hinstDLL; + if (fdwReason == DLL_PROCESS_ATTACH) + { + DisableThreadLibraryCalls(hinstDLL); + LogInit(); + } + return TRUE; +} diff --git a/plugins/IEHistory/IEHistory/IEHistory.rc b/plugins/IEHistory/IEHistory/IEHistory.rc new file mode 100644 index 0000000000..91354d63a3 --- /dev/null +++ b/plugins/IEHistory/IEHistory/IEHistory.rc @@ -0,0 +1,162 @@ +// Microsoft Visual C++ generated resource script. +// +#include "resource.h" + +#define APSTUDIO_READONLY_SYMBOLS +///////////////////////////////////////////////////////////////////////////// +// +// Generated from the TEXTINCLUDE 2 resource. +// +#include "afxres.h" + +///////////////////////////////////////////////////////////////////////////// +#undef APSTUDIO_READONLY_SYMBOLS + +///////////////////////////////////////////////////////////////////////////// +// English (U.S.) resources + +#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU) +#ifdef _WIN32 +LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US +#pragma code_page(1252) +#endif //_WIN32 + +#ifdef APSTUDIO_INVOKED +///////////////////////////////////////////////////////////////////////////// +// +// TEXTINCLUDE +// + +1 TEXTINCLUDE +BEGIN + "resource.h\0" +END + +2 TEXTINCLUDE +BEGIN + "#include ""afxres.h""\r\n" + "\0" +END + +3 TEXTINCLUDE +BEGIN + "\r\n" + "\0" +END + +#endif // APSTUDIO_INVOKED + + +///////////////////////////////////////////////////////////////////////////// +// +// Dialog +// + +IDD_HISTORY DIALOGEX 0, 0, 416, 313 +STYLE DS_SETFONT | DS_FIXEDSYS | DS_CENTER | WS_POPUP | WS_CAPTION | WS_SYSMENU | WS_THICKFRAME +EXSTYLE WS_EX_APPWINDOW +CAPTION "Dialog" +FONT 8, "MS Shell Dlg", 400, 0, 0x1 +BEGIN + PUSHBUTTON "Close",IDC_CLOSE,362,283,50,14 + CONTROL "",IDC_IEVIEW_PLACEHOLDER,"Static",SS_BLACKFRAME,4,4,408,275,WS_EX_TRANSPARENT + PUSHBUTTON "&Prev",IDC_PREV,4,283,50,14 + PUSHBUTTON "&Next",IDC_NEXT,58,283,50,14 + PUSHBUTTON "&Search",IDC_SEARCH,310,283,50,14 +END + +IDD_OPT_HISTORY DIALOGEX 0, 0, 252, 119 +STYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | DS_CONTROL | WS_POPUP | WS_CAPTION | WS_SYSMENU +CAPTION "Dialog" +FONT 8, "MS Shell Dlg", 400, 0, 0x1 +BEGIN + GROUPBOX "Number of events to load",IDC_EVENTSNO_GROUPBOX,7,7,238,68 + CONTROL "Load all events",IDC_LOAD_ALL,"Button",BS_AUTORADIOBUTTON | WS_TABSTOP,15,22,224,10 + CONTROL "Load only ",IDC_LOAD_NUMBER,"Button",BS_AUTORADIOBUTTON | WS_TABSTOP,15,35,79,10 + EDITTEXT IDC_EVENTS_COUNT,96,33,40,14,ES_AUTOHSCROLL | ES_NUMBER + LTEXT "events per page.",IDC_LOAD_NUMBER_STATIC,143,36,96,8 + CONTROL "Show last page first",IDC_SHOW_LAST_FIRST,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,23,49,214,10 + GROUPBOX "Other options",IDC_MISC_GROUPBOX,7,79,238,33 + CONTROL "Load items in background",IDC_LOAD_BACKGROUND,"Button",BS_AUTOCHECKBOX | WS_DISABLED | WS_TABSTOP,15,63,223,10 + CONTROL "RTL is default text direction.",IDC_ENABLE_RTL,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,15,94,221,10 +END + +IDD_SEARCH DIALOGEX 0, 0, 210, 82 +STYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | DS_CENTER | WS_POPUP | WS_CAPTION | WS_SYSMENU +CAPTION "Search" +FONT 8, "MS Shell Dlg", 400, 0, 0x1 +BEGIN + EDITTEXT IDC_SEARCH_TEXT,39,30,155,15,ES_AUTOHSCROLL + DEFPUSHBUTTON "&Find next",IDC_FIND_NEXT,99,64,50,14 + PUSHBUTTON "Cancel",IDCANCEL,153,64,50,14 + CONTROL "",IDC_TABS,"SysTabControl32",0x0,7,7,196,48 + CONTROL "Text :",IDC_SEARCH_TEXT_STATIC,"Static",SS_LEFTNOWORDWRAP | WS_GROUP,14,33,24,8,WS_EX_TRANSPARENT + GROUPBOX "Direction",IDC_DIRECTION_GROUPBOX,7,57,88,21 + CONTROL "Up",IDC_DIRECTION_UP,"Button",BS_AUTORADIOBUTTON | WS_TABSTOP,9,65,34,10 + CONTROL "Down",IDC_DIRECTION_DOWN,"Button",BS_AUTORADIOBUTTON | WS_TABSTOP,47,65,45,10 + CONTROL "",IDC_SEARCH_DATE,"SysDateTimePick32",DTS_RIGHTALIGN | DTS_SHOWNONE | NOT WS_VISIBLE | WS_TABSTOP,111,30,83,15 + CONTROL "",IDC_SEARCH_TIME,"SysDateTimePick32",DTS_RIGHTALIGN | DTS_UPDOWN | DTS_SHOWNONE | NOT WS_VISIBLE | WS_TABSTOP | 0x8,39,30,69,15 +END + + +///////////////////////////////////////////////////////////////////////////// +// +// DESIGNINFO +// + +#ifdef APSTUDIO_INVOKED +GUIDELINES DESIGNINFO +BEGIN + IDD_HISTORY, DIALOG + BEGIN + LEFTMARGIN, 4 + RIGHTMARGIN, 412 + TOPMARGIN, 4 + BOTTOMMARGIN, 309 + HORZGUIDE, 283 + END + + IDD_OPT_HISTORY, DIALOG + BEGIN + LEFTMARGIN, 7 + RIGHTMARGIN, 245 + VERTGUIDE, 15 + TOPMARGIN, 7 + BOTTOMMARGIN, 112 + END + + IDD_SEARCH, DIALOG + BEGIN + LEFTMARGIN, 7 + RIGHTMARGIN, 203 + TOPMARGIN, 7 + BOTTOMMARGIN, 78 + HORZGUIDE, 75 + END +END +#endif // APSTUDIO_INVOKED + + +///////////////////////////////////////////////////////////////////////////// +// +// Icon +// + +// Icon with lowest ID value placed first to ensure application icon +// remains consistent on all systems. +IDI_HISTORYICON ICON "history.ico" +#endif // English (U.S.) resources +///////////////////////////////////////////////////////////////////////////// + + + +#ifndef APSTUDIO_INVOKED +///////////////////////////////////////////////////////////////////////////// +// +// Generated from the TEXTINCLUDE 3 resource. +// + + +///////////////////////////////////////////////////////////////////////////// +#endif // not APSTUDIO_INVOKED + diff --git a/plugins/IEHistory/IEHistory/IEHistory.vcproj b/plugins/IEHistory/IEHistory/IEHistory.vcproj new file mode 100644 index 0000000000..cb488a940f --- /dev/null +++ b/plugins/IEHistory/IEHistory/IEHistory.vcproj @@ -0,0 +1,465 @@ +<?xml version="1.0" encoding="Windows-1252"?> +<VisualStudioProject + ProjectType="Visual C++" + Version="8.00" + Name="IEHistory" + ProjectGUID="{7F5EA8BC-8F2B-478E-8F05-0ED4B691B776}" + RootNamespace="IEHistory" + Keyword="Win32Proj" + > + <Platforms> + <Platform + Name="Win32" + /> + </Platforms> + <ToolFiles> + </ToolFiles> + <Configurations> + <Configuration + Name="Debug|Win32" + OutputDirectory="..\..\..\..\cvs\test miranda\Plugins" + IntermediateDirectory="$(ConfigurationName)" + ConfigurationType="2" + CharacterSet="0" + > + <Tool + Name="VCPreBuildEventTool" + /> + <Tool + Name="VCCustomBuildTool" + /> + <Tool + Name="VCXMLDataGeneratorTool" + /> + <Tool + Name="VCWebServiceProxyGeneratorTool" + /> + <Tool + Name="VCMIDLTool" + /> + <Tool + Name="VCCLCompilerTool" + Optimization="0" + PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;WIN32;_DEBUG;_WINDOWS;_USRDLL;IEHISTORY_EXPORTS;_USE_32BIT_TIME_T" + MinimalRebuild="true" + BasicRuntimeChecks="3" + RuntimeLibrary="3" + UsePrecompiledHeader="0" + BrowseInformation="1" + WarningLevel="3" + Detect64BitPortabilityProblems="false" + DebugInformationFormat="4" + /> + <Tool + Name="VCManagedResourceCompilerTool" + /> + <Tool + Name="VCResourceCompilerTool" + /> + <Tool + Name="VCPreLinkEventTool" + /> + <Tool + Name="VCLinkerTool" + AdditionalDependencies="comctl32.lib" + LinkIncremental="2" + GenerateDebugInformation="true" + SubSystem="2" + BaseAddress="0x2F020000" + TargetMachine="1" + /> + <Tool + Name="VCALinkTool" + /> + <Tool + Name="VCManifestTool" + /> + <Tool + Name="VCXDCMakeTool" + /> + <Tool + Name="VCBscMakeTool" + /> + <Tool + Name="VCFxCopTool" + /> + <Tool + Name="VCAppVerifierTool" + /> + <Tool + Name="VCWebDeploymentTool" + /> + <Tool + Name="VCPostBuildEventTool" + /> + </Configuration> + <Configuration + Name="Release|Win32" + OutputDirectory="Release" + IntermediateDirectory="$(ConfigurationName)" + ConfigurationType="2" + CharacterSet="0" + WholeProgramOptimization="1" + > + <Tool + Name="VCPreBuildEventTool" + /> + <Tool + Name="VCCustomBuildTool" + /> + <Tool + Name="VCXMLDataGeneratorTool" + /> + <Tool + Name="VCWebServiceProxyGeneratorTool" + /> + <Tool + Name="VCMIDLTool" + /> + <Tool + Name="VCCLCompilerTool" + PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;WIN32;NDEBUG;_WINDOWS;_USRDLL;IEHISTORY_EXPORTS;_USE_32BIT_TIME_T" + RuntimeLibrary="0" + UsePrecompiledHeader="0" + WarningLevel="3" + Detect64BitPortabilityProblems="false" + DebugInformationFormat="3" + /> + <Tool + Name="VCManagedResourceCompilerTool" + /> + <Tool + Name="VCResourceCompilerTool" + /> + <Tool + Name="VCPreLinkEventTool" + /> + <Tool + Name="VCLinkerTool" + AdditionalDependencies="comctl32.lib" + LinkIncremental="1" + GenerateDebugInformation="true" + SubSystem="2" + OptimizeReferences="2" + EnableCOMDATFolding="2" + BaseAddress="0x2F040000" + TargetMachine="1" + /> + <Tool + Name="VCALinkTool" + /> + <Tool + Name="VCManifestTool" + /> + <Tool + Name="VCXDCMakeTool" + /> + <Tool + Name="VCBscMakeTool" + /> + <Tool + Name="VCFxCopTool" + /> + <Tool + Name="VCAppVerifierTool" + /> + <Tool + Name="VCWebDeploymentTool" + /> + <Tool + Name="VCPostBuildEventTool" + /> + </Configuration> + <Configuration + Name="Release UNICODE|Win32" + OutputDirectory="Release UNICODE" + IntermediateDirectory="$(ConfigurationName)" + ConfigurationType="2" + CharacterSet="1" + WholeProgramOptimization="1" + > + <Tool + Name="VCPreBuildEventTool" + /> + <Tool + Name="VCCustomBuildTool" + /> + <Tool + Name="VCXMLDataGeneratorTool" + /> + <Tool + Name="VCWebServiceProxyGeneratorTool" + /> + <Tool + Name="VCMIDLTool" + /> + <Tool + Name="VCCLCompilerTool" + PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;WIN32;NDEBUG;_WINDOWS;_USRDLL;IEHISTORY_EXPORTS;_USE_32BIT_TIME_T" + RuntimeLibrary="0" + UsePrecompiledHeader="0" + WarningLevel="3" + Detect64BitPortabilityProblems="false" + DebugInformationFormat="3" + /> + <Tool + Name="VCManagedResourceCompilerTool" + /> + <Tool + Name="VCResourceCompilerTool" + /> + <Tool + Name="VCPreLinkEventTool" + /> + <Tool + Name="VCLinkerTool" + AdditionalDependencies="comctl32.lib" + OutputFile="$(OutDir)\IEHistoryW.dll" + LinkIncremental="1" + GenerateDebugInformation="true" + SubSystem="2" + OptimizeReferences="2" + EnableCOMDATFolding="2" + BaseAddress="0x2F040000" + TargetMachine="1" + /> + <Tool + Name="VCALinkTool" + /> + <Tool + Name="VCManifestTool" + /> + <Tool + Name="VCXDCMakeTool" + /> + <Tool + Name="VCBscMakeTool" + /> + <Tool + Name="VCFxCopTool" + /> + <Tool + Name="VCAppVerifierTool" + /> + <Tool + Name="VCWebDeploymentTool" + /> + <Tool + Name="VCPostBuildEventTool" + /> + </Configuration> + <Configuration + Name="Debug UNICODE|Win32" + OutputDirectory="..\..\..\..\cvs\test miranda unicode\Plugins" + IntermediateDirectory="$(ConfigurationName)" + ConfigurationType="2" + CharacterSet="1" + > + <Tool + Name="VCPreBuildEventTool" + /> + <Tool + Name="VCCustomBuildTool" + /> + <Tool + Name="VCXMLDataGeneratorTool" + /> + <Tool + Name="VCWebServiceProxyGeneratorTool" + /> + <Tool + Name="VCMIDLTool" + /> + <Tool + Name="VCCLCompilerTool" + Optimization="0" + PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;WIN32;_DEBUG;_WINDOWS;_USRDLL;IEHISTORY_EXPORTS;_USE_32BIT_TIME_T" + MinimalRebuild="true" + BasicRuntimeChecks="3" + RuntimeLibrary="3" + UsePrecompiledHeader="0" + WarningLevel="3" + Detect64BitPortabilityProblems="false" + DebugInformationFormat="4" + /> + <Tool + Name="VCManagedResourceCompilerTool" + /> + <Tool + Name="VCResourceCompilerTool" + /> + <Tool + Name="VCPreLinkEventTool" + /> + <Tool + Name="VCLinkerTool" + AdditionalDependencies="comctl32.lib" + LinkIncremental="2" + GenerateDebugInformation="true" + SubSystem="2" + BaseAddress="0x2F020000" + TargetMachine="1" + /> + <Tool + Name="VCALinkTool" + /> + <Tool + Name="VCManifestTool" + /> + <Tool + Name="VCXDCMakeTool" + /> + <Tool + Name="VCBscMakeTool" + /> + <Tool + Name="VCFxCopTool" + /> + <Tool + Name="VCAppVerifierTool" + /> + <Tool + Name="VCWebDeploymentTool" + /> + <Tool + Name="VCPostBuildEventTool" + /> + </Configuration> + </Configurations> + <References> + </References> + <Files> + <Filter + Name="Source Files" + Filter="cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx" + UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}" + > + <File + RelativePath=".\dlgHandlers.cpp" + > + </File> + <File + RelativePath=".\events.cpp" + > + </File> + <File + RelativePath=".\IEHistory.cpp" + > + </File> + <File + RelativePath=".\mirandaMem.cpp" + > + </File> + <File + RelativePath=".\services.cpp" + > + </File> + <File + RelativePath=".\stdafx.cpp" + > + <FileConfiguration + Name="Debug|Win32" + > + <Tool + Name="VCCLCompilerTool" + UsePrecompiledHeader="1" + /> + </FileConfiguration> + <FileConfiguration + Name="Release|Win32" + > + <Tool + Name="VCCLCompilerTool" + UsePrecompiledHeader="1" + /> + </FileConfiguration> + <FileConfiguration + Name="Release UNICODE|Win32" + > + <Tool + Name="VCCLCompilerTool" + UsePrecompiledHeader="1" + /> + </FileConfiguration> + <FileConfiguration + Name="Debug UNICODE|Win32" + > + <Tool + Name="VCCLCompilerTool" + UsePrecompiledHeader="1" + /> + </FileConfiguration> + </File> + <File + RelativePath=".\utils.cpp" + > + </File> + </Filter> + <Filter + Name="Header Files" + Filter="h;hpp;hxx;hm;inl;inc;xsd" + UniqueIdentifier="{93995380-89BD-4b04-88EB-625FBE52EBFB}" + > + <File + RelativePath=".\commonheaders.h" + > + </File> + <File + RelativePath=".\dlgHandlers.h" + > + </File> + <File + RelativePath=".\events.h" + > + </File> + <File + RelativePath=".\mirandaMem.h" + > + </File> + <File + RelativePath=".\resource.h" + > + </File> + <File + RelativePath=".\services.h" + > + </File> + <File + RelativePath=".\stdafx.h" + > + </File> + <File + RelativePath=".\utils.h" + > + </File> + <File + RelativePath=".\version.h" + > + </File> + </Filter> + <Filter + Name="Resource Files" + Filter="rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav" + UniqueIdentifier="{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}" + > + <File + RelativePath=".\history.ico" + > + </File> + <File + RelativePath=".\IEHistory.rc" + > + </File> + <File + RelativePath=".\version.rc" + > + </File> + </Filter> + <File + RelativePath="..\docs\IEHistory_readme.txt" + > + </File> + </Files> + <Globals> + </Globals> +</VisualStudioProject> diff --git a/plugins/IEHistory/IEHistory/commonheaders.h b/plugins/IEHistory/IEHistory/commonheaders.h new file mode 100644 index 0000000000..e687a27f02 --- /dev/null +++ b/plugins/IEHistory/IEHistory/commonheaders.h @@ -0,0 +1,84 @@ +/* +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. +*/ + +#ifndef M_COMMON_HEADERS_H +#define M_COMMON_HEADERS_H + + +#define EVENTTYPE_STATUS 25368 //tabsrmm status events + +#include "stdafx.h" +#include <malloc.h> +#include <stdio.h> +#include <stdlib.h> +#include <uxtheme.h> + +#include "resource.h" +#include "version.h" + +#include "utils.h" +#include "mirandaMem.h" +#include "events.h" +#include "dlgHandlers.h" + +#include "../../../include/newpluginapi.h" +#include "../../../include/m_database.h" +#include "../../../include/m_utils.h" +#include "../../../include/m_system.h" +#include "../../../include/m_skin.h" +#include "../../../include/m_options.h" +#include "../../../include/m_clist.h" +#include "../../../include/m_langpack.h" +#include "../../../include/m_history.h" +#include "../../../include/m_contacts.h" +//#include "../../../include/m_utils.h" +#include "../../../include/m_popup.h" +#include "../../../include/m_ieview.h" +#include "../../../include/m_updater.h" + + +extern HICON hIcon; //history icon +extern char ModuleName[]; +extern HINSTANCE hInstance; //dll instance +extern HANDLE hOpenWindowsList; + +extern PLUGININFOEX pluginInfo; + +extern BOOL (WINAPI *MyEnableThemeDialogTexture)(HANDLE, DWORD); + +#define OLD_MIRANDAPLUGININFO_SUPPORT PLUGININFO oldPluginInfo = { \ + sizeof(PLUGININFO), \ + pluginInfo.shortName, \ + pluginInfo.version, \ + pluginInfo.description, \ + pluginInfo.author, \ + pluginInfo.authorEmail, \ + pluginInfo.copyright, \ + pluginInfo.homepage, \ + pluginInfo.flags, \ + pluginInfo.replacesDefaultModule \ +}; \ +\ +extern "C" __declspec(dllexport) PLUGININFO *MirandaPluginInfo(DWORD mirandaVersion) \ +{ \ + return &oldPluginInfo; \ +} + +#endif
\ No newline at end of file diff --git a/plugins/IEHistory/IEHistory/dlgHandlers.cpp b/plugins/IEHistory/IEHistory/dlgHandlers.cpp new file mode 100644 index 0000000000..a9d4734abe --- /dev/null +++ b/plugins/IEHistory/IEHistory/dlgHandlers.cpp @@ -0,0 +1,798 @@ +/* +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 "dlgHandlers.h" +#include "math.h" +#include <commctrl.h> + +#define GAP_SIZE 2 +#define MIN_HISTORY_WIDTH 350 +#define MIN_HISTORY_HEIGHT 100 + +struct WorkerThreadData{ + HWND hWnd; + HistoryWindowData *data; + IEVIEWEVENT ieEvent; +}; + +int 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, HANDLE 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); + +HANDLE GetNeededEvent(HANDLE hLastFirstEvent, int index, int direction); + +int CalcIEViewPos(IEVIEWWINDOW *ieWnd, HWND hMainWindow) +{ + RECT rect; + GetWindowRect(GetDlgItem(hMainWindow, IDC_IEVIEW_PLACEHOLDER), &rect); + ScreenToClient(hMainWindow, &rect); + + ieWnd->x = rect.left + GAP_SIZE; + ieWnd->y = rect.top + GAP_SIZE; + ieWnd->cx = rect.right - rect.left - (2 * GAP_SIZE); + ieWnd->cy = rect.bottom - rect.top - (2 * GAP_SIZE); + return 0; +} + +int LoadName(HWND hWnd) +{ + HistoryWindowData *data = (HistoryWindowData *) GetWindowLong(hWnd, DWL_USER); + HANDLE hEvent = (HANDLE) CallService(MS_DB_EVENT_FINDFIRST, (WPARAM) data->hContact, 0); + DBEVENTINFO event = {0}; + event.cbSize = sizeof(event); + CallService(MS_DB_EVENT_GET, (WPARAM) hEvent, (LPARAM) &event); //to get the protocol + TCHAR *szOther = GetContactName(data->hContact, event.szModule); + TCHAR buffer[1024]; + _sntprintf(buffer, 1024, _T("%s: IEHistory"), szOther); + SetWindowText(hWnd, buffer); + free(szOther); + return 0; +} + +int LoadIEView(HWND hWnd) +{ + IEVIEWWINDOW ieWnd = {0}; + ieWnd.cbSize = 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 *) GetWindowLong(hWnd, DWL_USER); + data->hIEView = ieWnd.hwnd; + SetWindowPos(GetDlgItem(hWnd, IDC_IEVIEW_PLACEHOLDER), HWND_BOTTOM, 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE | SWP_NOACTIVATE); + //ShowWindow(GetDlgItem(hWnd, IDC_IEVIEW_PLACEHOLDER), SW_HIDE); + return 0; +} + +int MoveIeView(HWND hWnd) +{ + HistoryWindowData *data = (HistoryWindowData *) GetWindowLong(hWnd, DWL_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 *) GetWindowLong(hWnd, DWL_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; + unsigned int 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; + IEVIEWEVENT ieEvent = {0}; + IEVIEWEVENTDATA ieData[LOAD_COUNT] = {0}; + PBYTE messages[LOAD_COUNT] = {0}; + HANDLE 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; + 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 = CallService(MS_DB_EVENT_GETBLOBSIZE, (WPARAM) dbEvent, 0); + if (newSize > oldSize) + { + buffer = (PBYTE) realloc(buffer, newSize); + dbInfo.pBlob = buffer; + oldSize = newSize; + } + messages[i] = (PBYTE) realloc(messages[i], newSize); + dbInfo.cbBlob = newSize; + if (!CallService(MS_DB_EVENT_GET, (WPARAM) dbEvent, (LPARAM) &dbInfo)) + { + memmove(messages[i], dbInfo.pBlob, newSize); + FillIEViewInfo(&ieData[i], dbInfo, messages[i]); + } + //FillIEViewEventData(&ieData[i], dbEvent); + dbEvent = (HANDLE) CallService(MS_DB_EVENT_FINDNEXT, (WPARAM) dbEvent, 0); + } + 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 *) GetWindowLong(hWnd, DWL_USER); + int count = CallService(MS_DB_EVENT_GETCOUNT, (WPARAM) data->hContact, 0); + int bLastFirst = DBGetContactSettingByte(NULL, ModuleName, "ShowLastPageFirst", 0); + int bRTL = DBGetContactSettingByte(NULL, ModuleName, "EnableRTL", 0); + bRTL = DBGetContactSettingByte(data->hContact, "Tab_SRMsg", "RTL", bRTL); + data->bEnableRTL = bRTL; + data->count = count; + if (data->itemsPerPage > count) + { + data->itemsPerPage = count; + } + IEVIEWEVENT ieEvent = {0}; + ieEvent.cbSize = sizeof(ieEvent); + ieEvent.hwnd = data->hIEView; + ieEvent.hContact = data->hContact; + ieEvent.count = (data->itemsPerPage <= 0) ? count : data->itemsPerPage; + + HANDLE hFirstEvent = (HANDLE) CallService(MS_DB_EVENT_FINDFIRST, (WPARAM) data->hContact, 0); + int index = 0; + if ((data->itemsPerPage > 0) && (bLastFirst)) + { + index = data->count - data->itemsPerPage; + hFirstEvent = GetNeededEvent(hFirstEvent, index, DIRECTION_FORWARD); + } + data->index = index; + data->hLastFirstEvent = hFirstEvent; + ieEvent.hDbEventFirst = hFirstEvent; + if (data->bEnableRTL) + { + ieEvent.dwFlags |= IEEF_RTL; + } + DoLoadEvents(hWnd, data, ieEvent); + return 0; +} + +int LoadPage(HWND hWnd, HANDLE hFirstEvent, long index, long shiftCount, long readCount, int direction) +{ + HistoryWindowData *data = (HistoryWindowData *) GetWindowLong(hWnd, DWL_USER); + int count = shiftCount; + int newIndex = index; + IEVIEWEVENT ieEvent = {0}; + ieEvent.cbSize = sizeof(ieEvent); + ieEvent.hwnd = data->hIEView; + ieEvent.hContact = data->hContact; + + 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; + HANDLE 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 *) GetWindowLong(hWnd, DWL_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 *) GetWindowLong(hWnd, DWL_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 *) GetWindowLong(hWnd, DWL_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) +{ + 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 *) GetWindowLong(hWnd, DWL_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); +} + + + +BOOL CALLBACK HistoryDlgProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam) +{ + switch (msg) + { + case WM_INITDIALOG: + { + Log("Inside WM_INITDIALOG ..."); + TranslateDialogDefault(hWnd); + SendMessage(hWnd, WM_SETICON, ICON_BIG, (LPARAM) hIcon); + //SetWindowPos(hWnd, HWND_NOTOPMOST, 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE); + int bRTL = DBGetContactSettingByte(NULL, ModuleName, "EnableRTL", 0); + if (bRTL) + { + SetWindowLong(hWnd, GWL_EXSTYLE, WS_EX_RTLREADING); + } + //InitCommonControls(); + 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; + break; + } + case WM_SHOWWINDOW: + { + Log("Inside WM_SHOWWINDOW ..."); + LoadName(hWnd); + LoadIEView(hWnd); + LoadEvents(hWnd); + + HistoryWindowData *data = (HistoryWindowData *) GetWindowLong(hWnd, DWL_USER); + bool bAll = (data->itemsPerPage <= 0) || (data->itemsPerPage >= data->count); + int bLastFirst = DBGetContactSettingByte(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); + } + //ShowWindow(GetDlgItem(hWnd, IDC_PAGE_NUMBER), !bAll); + EnableWindow(GetDlgItem(hWnd, IDC_SEARCH), !bAll); + + break; + } + case WM_DESTROY: + { + HistoryWindowData *data = (HistoryWindowData *) GetWindowLong(hWnd, DWL_USER); + 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); + + //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); + } + HistoryWindowData *data = (HistoryWindowData *) GetWindowLong(hWnd, DWL_USER); + SearchWindowData *searchData = (SearchWindowData *) malloc(sizeof(SearchWindowData)); + searchData->hContact = data->hContact; + searchData->hHistoryWindow = hWnd; + searchData->hLastFoundEvent = NULL; + searchData->index = 0; + SetWindowLong(hSearch, DWL_USER, (LONG) searchData); + ShowWindow(hSearch, SW_SHOW); + //sprintf(buffer, "Error #%d", GetLastError()); + //MessageBoxA(0, buffer, "Error", MB_OK); + break; + } + } + break; + } + default: + { + break; + } + } + return 0; +} + +#include "prsht.h" //PSN_APPLY + +BOOL CALLBACK OptionsDlgProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam) +{ + switch (msg) + { + case WM_INITDIALOG: + { + TranslateDialogDefault(hWnd); + int count = DBGetContactSettingDword(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); + CheckDlgButton(hWnd, IDC_LOAD_NUMBER, count > 0); + CheckDlgButton(hWnd, IDC_ENABLE_RTL, (BOOL) DBGetContactSettingByte(NULL, ModuleName, "EnableRTL", 0)); + CheckDlgButton(hWnd, IDC_SHOW_LAST_FIRST, (BOOL) DBGetContactSettingByte(NULL, ModuleName, "ShowLastPageFirst", 0)); + CheckDlgButton(hWnd, IDC_LOAD_BACKGROUND, (BOOL) DBGetContactSettingByte(NULL, ModuleName, "UseWorkerThread", 0)); + TCHAR buffer[1024]; + _itot(count, buffer, 10); + SetWindowText(GetDlgItem(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]; + GetWindowText(GetDlgItem(hWnd, IDC_EVENTS_COUNT), buffer, sizeof(buffer)); + count = _tstol(buffer); + count = (count < 0) ? 0 : count; + } + DBWriteContactSettingByte(NULL, ModuleName, "ShowLastPageFirst", IsDlgButtonChecked(hWnd, IDC_SHOW_LAST_FIRST)); + DBWriteContactSettingByte(NULL, ModuleName, "EnableRTL", IsDlgButtonChecked(hWnd, IDC_ENABLE_RTL)); + DBWriteContactSettingByte(NULL, ModuleName, "UseWorkerThread", IsDlgButtonChecked(hWnd, IDC_LOAD_BACKGROUND)); + DBWriteContactSettingDword(NULL, ModuleName, "EventsToLoad", count); + + break; + } + } + break; + } + } + break; + } + default: + { + break; + } + } + return 0; +} + + +#include "commctrl.h" //tab control + +BOOL CALLBACK SearchDlgProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam) +{ + 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; + //MessageBoxA(0, "Before TCM_INSERTITEM 1", "Error", MB_OK); + SendMessage(GetDlgItem(hWnd, IDC_TABS), TCM_INSERTITEM, 0, (LPARAM) &tabItem); + tabItem.pszText = TranslateT("Time search"); + //MessageBoxA(0, "Before TCM_INSERTITEM 2", "Error", MB_OK); + SendMessage(GetDlgItem(hWnd, IDC_TABS), TCM_INSERTITEM, 1, (LPARAM) &tabItem); + //SendMessage(GetDlgItem(hWnd, IDC_SEARCH_TIME), DTM_SETFORMAT, 0, (LPARAM) "HH:mm"); + //MessageBoxA(0, "Before CheckDlgButton", "Error", MB_OK); + CheckDlgButton(hWnd, IDC_DIRECTION_DOWN, TRUE); + return TRUE; + break; + } + case WM_SHOWWINDOW: + { + SetFocus(GetDlgItem(hWnd, IDC_SEARCH_TEXT)); + break; + } + case WM_DESTROY: + { + SearchWindowData *data = (SearchWindowData *) GetWindowLong(hWnd, DWL_USER); + free(data); + //DestroyWindow(hWnd); + break; + } + case WM_CLOSE: + { + DestroyWindow(hWnd); + break; + } + case WM_NOTIFY: + { + switch (((LPNMHDR) lParam)->idFrom) + { + case IDC_SEARCH_DATE: + case IDC_SEARCH_TIME: + { + SearchWindowData *data = (SearchWindowData *) GetWindowLong(hWnd, DWL_USER); + data->hLastFoundEvent = NULL; //start from top if changes occur + break; + } + case IDC_TABS: + { + switch (((LPNMHDR) lParam)->code) + { + case TCN_SELCHANGE: + { + int tab = SendMessage(GetDlgItem(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); + SendMessage(GetDlgItem(hWnd, IDC_SEARCH_TEXT_STATIC), WM_SETTEXT, 0, (LPARAM) ((tab == 0) ? _T("Text :") : _T("Time :"))); + break; + } + } + break; + } + } + break; + } + case WM_COMMAND: + { + switch (LOWORD(wParam)) + { + case IDC_SEARCH_TEXT: + { + switch (HIWORD(wParam)) + { + case EN_CHANGE: + { + SearchWindowData *data = (SearchWindowData *) GetWindowLong(hWnd, DWL_USER); + data->hLastFoundEvent = NULL; //start from top if changes occur + break; + } + } + break; + } + case IDCANCEL: + { + SendMessage(hWnd, WM_CLOSE, 0, 0); + break; + } + case IDC_FIND_NEXT: + { + SearchWindowData *data = (SearchWindowData *) GetWindowLong(hWnd, DWL_USER); + const HistoryWindowData *histData = (HistoryWindowData *) GetWindowLong(data->hHistoryWindow, DWL_USER); + int direction = IsDlgButtonChecked(hWnd, IDC_DIRECTION_UP) ? DIRECTION_BACK : DIRECTION_FORWARD; + int tab = SendMessage(GetDlgItem(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 + SendMessage(GetDlgItem(hWnd, IDC_SEARCH_TEXT), WM_GETTEXT, 2048, (LPARAM) text); + searchResult = SearchHistory(data->hContact, data->hLastFoundEvent, text, direction, type); + } + else{//time search + TimeSearchData tsData = {0}; + SYSTEMTIME date = {0}, time = {0}; + int res = SendMessage(GetDlgItem(hWnd, IDC_SEARCH_DATE), DTM_GETSYSTEMTIME, 0, (LPARAM) &date); + tsData.flags = (res == GDT_VALID) ? TSDF_DATE_SET : 0; + res = SendMessage(GetDlgItem(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->hContact, 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; +}
\ No newline at end of file diff --git a/plugins/IEHistory/IEHistory/dlgHandlers.h b/plugins/IEHistory/IEHistory/dlgHandlers.h new file mode 100644 index 0000000000..343b208c6e --- /dev/null +++ b/plugins/IEHistory/IEHistory/dlgHandlers.h @@ -0,0 +1,50 @@ +/* +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. +*/ + +#ifndef M_HISTORY_DLG_HANDLERS_H +#define M_HISTORY_DLG_HANDLERS_H + +#include "commonheaders.h" + +#define LOAD_IN_BACKGROUND 0x00000001 + +struct HistoryWindowData{ + HANDLE hContact; + long count; + long index; + short loadMethod; + int itemsPerPage; + int bEnableRTL; + HWND hIEView; + HANDLE hLastFirstEvent; +}; + +struct SearchWindowData{ + long index; + HANDLE hContact; + HWND hHistoryWindow; + HANDLE hLastFoundEvent; +}; + +BOOL CALLBACK HistoryDlgProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam); +BOOL CALLBACK OptionsDlgProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam); +BOOL CALLBACK SearchDlgProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam); + +#endif //M_HISTORY_DLG_HANDLERS_H
\ No newline at end of file diff --git a/plugins/IEHistory/IEHistory/events.cpp b/plugins/IEHistory/IEHistory/events.cpp new file mode 100644 index 0000000000..90b36b1b63 --- /dev/null +++ b/plugins/IEHistory/IEHistory/events.cpp @@ -0,0 +1,88 @@ +/* +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 "events.h" + +HANDLE hModulesLoaded; +HANDLE hOptionsInitialize; + +int HookEvents() +{ + hModulesLoaded = HookEvent(ME_SYSTEM_MODULESLOADED, OnModulesLoaded); + hOptionsInitialize = HookEvent(ME_OPT_INITIALISE, OnOptionsInitialize); + return 0; +} + +int UnhookEvents() +{ + UnhookEvent(hModulesLoaded); + UnhookEvent(hOptionsInitialize); + return 0; +} + +int OnModulesLoaded(WPARAM wParam, LPARAM lParam) +{ + Log("%s", "Entering function " __FUNCTION__); + CLISTMENUITEM menuItem = {0}; + menuItem.cbSize = sizeof(CLISTMENUITEM); + menuItem.flags = 0; + menuItem.pszContactOwner = NULL; //all contacts + menuItem.hIcon = hIcon; + + menuItem.position = 1000090000; + + menuItem.pszName = Translate("View contact's history"); + menuItem.pszService = MS_HISTORY_SHOWCONTACTHISTORY; + + Log("%s", "Adding first menu (view contact's history)"); + CallService(MS_CLIST_ADDCONTACTMENUITEM, 0, (WPARAM) &menuItem); + + menuItem.ptszName = TranslateT("View system history"); + //CallService(MS_CLIST_ADDMAINMENUITEM, 0, (WPARAM) &menuItem); + //PLUGININFO pInfo = pluginInfo; + //pInfo.shortName = "IEView History Viewer"; + Log("%s", "Adding plugin to updater list"); + CallService(MS_UPDATE_REGISTERFL, (WPARAM) 2553, (LPARAM) &pluginInfo); + Log("%s", "Creating the open windows list"); + hOpenWindowsList = (HANDLE) CallService(MS_UTILS_ALLOCWINDOWLIST, 0, 0); + + Log("%s", "Leaving function " __FUNCTION__); + return 0; +} + +int OnOptionsInitialize(WPARAM wParam, LPARAM lParam) +{ + Log("%s", "Entering function " __FUNCTION__); + OPTIONSDIALOGPAGE odp = { 0 }; + + odp.cbSize = sizeof(odp); + odp.position = 100000000; + odp.hInstance = hInstance; + odp.pszTemplate = MAKEINTRESOURCEA(IDD_OPT_HISTORY); + odp.pszTitle = Translate("IEHistory"); + odp.pszGroup = Translate("Message Sessions"); + odp.groupPosition = 910000000; + odp.flags=ODPF_BOLDGROUPS; + odp.pfnDlgProc = OptionsDlgProc; + CallService(MS_OPT_ADDPAGE, wParam, (LPARAM)&odp); + + return 0; + Log("%s", "Leaving function " __FUNCTION__); +}
\ No newline at end of file diff --git a/plugins/IEHistory/IEHistory/events.h b/plugins/IEHistory/IEHistory/events.h new file mode 100644 index 0000000000..b19b14fced --- /dev/null +++ b/plugins/IEHistory/IEHistory/events.h @@ -0,0 +1,35 @@ +/* +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. +*/ + +#ifndef M_HISTORY_HOOKED_EVENTS_H +#define M_HISTORY_HOOKED_EVENTS_H + +#include "commonheaders.h" + +extern HANDLE hModulesLoaded; +extern HANDLE hOptionsInitialize; + +int HookEvents(); +int UnhookEvents(); + +int OnModulesLoaded(WPARAM wParam, LPARAM lParam); +int OnOptionsInitialize(WPARAM wParam, LPARAM lParam); + +#endif //M_HISTORY_HOOKED_EVENTS_H
\ No newline at end of file diff --git a/plugins/IEHistory/IEHistory/history (old).ico b/plugins/IEHistory/IEHistory/history (old).ico Binary files differnew file mode 100644 index 0000000000..eb627fa6b0 --- /dev/null +++ b/plugins/IEHistory/IEHistory/history (old).ico diff --git a/plugins/IEHistory/IEHistory/history.ico b/plugins/IEHistory/IEHistory/history.ico Binary files differnew file mode 100644 index 0000000000..b85c00bd5e --- /dev/null +++ b/plugins/IEHistory/IEHistory/history.ico diff --git a/plugins/IEHistory/IEHistory/mirandaMem.cpp b/plugins/IEHistory/IEHistory/mirandaMem.cpp new file mode 100644 index 0000000000..8ef20cb2e1 --- /dev/null +++ b/plugins/IEHistory/IEHistory/mirandaMem.cpp @@ -0,0 +1,42 @@ +/* +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 "mirandaMem.h" + +void *(*MirandaMalloc)(size_t size) = NULL; +void *(*MirandaRealloc)(void *data, size_t newSize) = NULL; +void (*MirandaFree) (void *data) = NULL; + +void InitializeMirandaMemFunctions() +{ + MM_INTERFACE mmi = {0}; + mmi.cbSize = sizeof(MM_INTERFACE); + CallService(MS_SYSTEM_GET_MMI, 0, (LPARAM) &mmi); + MirandaMalloc = mmi.mmi_malloc; + MirandaRealloc = mmi.mmi_realloc; + MirandaFree = mmi.mmi_free; +} + +void DestroyMirandaMemFunctions() +{ + MirandaMalloc = NULL; + MirandaRealloc = NULL; + MirandaFree = NULL; +}
\ No newline at end of file diff --git a/plugins/IEHistory/IEHistory/mirandaMem.h b/plugins/IEHistory/IEHistory/mirandaMem.h new file mode 100644 index 0000000000..7428278000 --- /dev/null +++ b/plugins/IEHistory/IEHistory/mirandaMem.h @@ -0,0 +1,33 @@ +/* +IEView history viewer plugin for Miranda IM + +Copyright © 2005 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. +*/ + +#ifndef M_FOLDERS_MIRANDA_MEM_H +#define M_FOLDERS_MIRANDA_MEM_H + +#include "commonheaders.h" + +extern void *(*MirandaMalloc)(size_t size); +extern void *(*MirandaRealloc)(void *data, size_t newSize); +extern void (*MirandaFree) (void *data); + +void InitializeMirandaMemFunctions(); +void DestroyMirandaMemFunctions(); + +#endif
\ No newline at end of file diff --git a/plugins/IEHistory/IEHistory/resource.h b/plugins/IEHistory/IEHistory/resource.h new file mode 100644 index 0000000000..b240d149db --- /dev/null +++ b/plugins/IEHistory/IEHistory/resource.h @@ -0,0 +1,45 @@ +//{{NO_DEPENDENCIES}} +// Microsoft Visual C++ generated include file. +// Used by IEHistory.rc +// +#define IDD_HISTORY 101 +#define IDI_HISTORYICON 102 +#define IDD_OPT_HISTORY 103 +#define IDD_SEARCH 104 +#define IDC_CLOSE 1001 +#define IDC_IEVIEW_PLACEHOLDER 1010 +#define IDC_EVENTSNO_GROUPBOX 1011 +#define IDC_LOAD_ALL 1012 +#define IDC_LOAD_NUMBER 1013 +#define IDC_EVENTS_COUNT 1014 +#define IDC_LOAD_NUMBER_STATIC 1015 +#define IDC_PREV 1016 +#define IDC_NEXT 1017 +#define IDC_PAGE_NUMBER 1018 +#define IDC_STATUSBAR 1019 +#define IDC_SHOW_LAST_FIRST 1021 +#define IDC_MISC_GROUPBOX 1022 +#define IDC_ENABLE_RTL 1023 +#define IDC_FIND_NEXT 1024 +#define IDC_TABS 1025 +#define IDC_SEARCH 1026 +#define IDC_SEARCH_TEXT_STATIC 1027 +#define IDC_SEARCH_TEXT 1028 +#define IDC_DIRECTION_GROUPBOX 1032 +#define IDC_DIRECTION_UP 1033 +#define IDC_DIRECTION_DOWN 1034 +#define IDC_SEARCH_DATE 1035 +#define IDC_SEARCH_TIME 1038 +#define IDC_WORKER_THREAD 1039 +#define IDC_LOAD_BACKGROUND 1039 + +// Next default values for new objects +// +#ifdef APSTUDIO_INVOKED +#ifndef APSTUDIO_READONLY_SYMBOLS +#define _APS_NEXT_RESOURCE_VALUE 105 +#define _APS_NEXT_COMMAND_VALUE 40001 +#define _APS_NEXT_CONTROL_VALUE 1040 +#define _APS_NEXT_SYMED_VALUE 101 +#endif +#endif diff --git a/plugins/IEHistory/IEHistory/services.cpp b/plugins/IEHistory/IEHistory/services.cpp new file mode 100644 index 0000000000..5683eecda8 --- /dev/null +++ b/plugins/IEHistory/IEHistory/services.cpp @@ -0,0 +1,62 @@ +/* +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 "services.h" + +HANDLE hShowHistory; + +int InitServices() +{ + hShowHistory = CreateServiceFunction(MS_HISTORY_SHOWCONTACTHISTORY, ShowContactHistoryService); + return 0; +} + +int DestroyServices() +{ + DestroyServiceFunction(hShowHistory); + return 0; +} + +int ShowContactHistoryService(WPARAM wParam, LPARAM lParam) +{ + Log("%s", "Entering function " __FUNCTION__); + HWND historyDlg; + HWND parent = NULL; + historyDlg = WindowList_Find(hOpenWindowsList, (HANDLE) wParam); + if (historyDlg == NULL) + { + int count = DBGetContactSettingDword(NULL, ModuleName, "EventsToLoad", 0); + int loadInBackground = DBGetContactSettingByte(NULL, ModuleName, "UseWorkerThread", 0); + HistoryWindowData *data; + data = (HistoryWindowData *) malloc(sizeof(HistoryWindowData)); + data->hContact = (HANDLE) wParam; + data->hIEView = NULL; + data->itemsPerPage = count; + data->index = 0; + data->count = 0; + data->loadMethod = (loadInBackground) ? LOAD_IN_BACKGROUND : 0; + historyDlg = CreateDialog(hInstance, MAKEINTRESOURCE(IDD_HISTORY), parent, HistoryDlgProc); + SetWindowLong(historyDlg, DWL_USER, (LONG) data); + + WindowList_Add(hOpenWindowsList, historyDlg, (HANDLE) wParam); + } + ShowWindow(historyDlg, SW_SHOW); + return 0; +}
\ No newline at end of file diff --git a/plugins/IEHistory/IEHistory/services.h b/plugins/IEHistory/IEHistory/services.h new file mode 100644 index 0000000000..40e680a04e --- /dev/null +++ b/plugins/IEHistory/IEHistory/services.h @@ -0,0 +1,32 @@ +/* +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. +*/ + +#ifndef M_IEHISTORY_PROVIDED_SERVICES_H +#define M_IEHISTORY_PROVIDED_SERVICES_H + +#include "commonheaders.h" +#include "dlgHandlers.h" + +int InitServices(); +int DestroyServices(); + +int ShowContactHistoryService(WPARAM wParam, LPARAM lParam); + +#endif //M_IEHISTORY_PROVIDED_SERVICES_H
\ No newline at end of file diff --git a/plugins/IEHistory/IEHistory/stdafx.cpp b/plugins/IEHistory/IEHistory/stdafx.cpp new file mode 100644 index 0000000000..2731c2b8c3 --- /dev/null +++ b/plugins/IEHistory/IEHistory/stdafx.cpp @@ -0,0 +1,25 @@ +/* +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" + +// TODO: reference any additional headers you need in STDAFX.H +// and not in this file diff --git a/plugins/IEHistory/IEHistory/stdafx.h b/plugins/IEHistory/IEHistory/stdafx.h new file mode 100644 index 0000000000..fe90144550 --- /dev/null +++ b/plugins/IEHistory/IEHistory/stdafx.h @@ -0,0 +1,47 @@ +/* +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. +*/ + +#pragma once + +// Modify the following defines if you have to target a platform prior to the ones specified below. +// Refer to MSDN for the latest info on corresponding values for different platforms. +#ifndef WINVER // Allow use of features specific to Windows XP or later. +#define WINVER 0x0501 // Change this to the appropriate value to target other versions of Windows. +#endif + +#ifndef _WIN32_WINNT // Allow use of features specific to Windows XP or later. +#define _WIN32_WINNT 0x0501 // Change this to the appropriate value to target other versions of Windows. +#endif + +#ifndef _WIN32_WINDOWS // Allow use of features specific to Windows 98 or later. +#define _WIN32_WINDOWS 0x0410 // Change this to the appropriate value to target Windows Me or later. +#endif + +#ifndef _WIN32_IE // Allow use of features specific to IE 6.0 or later. +#define _WIN32_IE 0x0600 // Change this to the appropriate value to target other versions of IE. +#endif + +#define WIN32_LEAN_AND_MEAN // Exclude rarely-used stuff from Windows headers +// Windows Header Files: +#include <windows.h> + + + +// TODO: reference additional headers your program requires here diff --git a/plugins/IEHistory/IEHistory/utils.cpp b/plugins/IEHistory/IEHistory/utils.cpp new file mode 100644 index 0000000000..91577e698f --- /dev/null +++ b/plugins/IEHistory/IEHistory/utils.cpp @@ -0,0 +1,330 @@ +/* +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 "commonheaders.h" + +int LogInit() +{ +#ifdef _DEBUG + FILE *fout = fopen("IEHistory.log", "wt"); + fclose(fout); +#endif + return 0; +} + +int Log(char *format, ...) +{ +#ifdef _DEBUG + char str[4096]; + va_list vararg; + int tBytes; + FILE *fout = fopen("IEHistory.log", "at"); + if (!fout) + { +// 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; + } + + va_end(vararg); + if (str[strlen(str) - 1] != '\n') + { + strcat(str, "\n"); + } + fputs(str, fout); + fclose(fout); +#endif + return 0; + +} + + + +int Info(char *title, char *format, ...) +{ + char str[4096]; + va_list vararg; + int tBytes; + va_start(vararg, format); + tBytes = _snprintf(str, sizeof(str), format, vararg); + if (tBytes > 0) + { + str[tBytes] = 0; + } + va_end(vararg); + return MessageBoxA(0, str, title, MB_OK | MB_ICONINFORMATION); +} + +/* +returns the name of a contact +*/ + +#pragma warning (disable: 4312) +TCHAR *GetContactName(HANDLE hContact, char *szProto) +{ + CONTACTINFO ctInfo; + int ret; + + ZeroMemory((void *) &ctInfo, sizeof(ctInfo)); + ctInfo.cbSize = sizeof(ctInfo); + ctInfo.szProto = szProto; + ctInfo.dwFlag = CNF_DISPLAY; +#ifdef _UNICODE + ctInfo.dwFlag += CNF_UNICODE; +#endif + ctInfo.hContact = hContact; + //_debug_message("retrieving contact name for %d", hContact); + ret = CallService(MS_CONTACT_GETCONTACTINFO, 0, (LPARAM) &ctInfo); + //_debug_message(" contact name %s", ctInfo.pszVal); + TCHAR *buffer; + if (!ret) + { + buffer = _tcsdup(ctInfo.pszVal); + } + else{ + return NULL; + } + MirandaFree(ctInfo.pszVal); + if (!ret) + { + return buffer; + } + else{ + return NULL; + } + return buffer; +} +#pragma warning (default: 4312) + +/* +Moves a control with regard to certain anchors (like delphi, c#, ...) +Somebody please improve on this code ... +*/ + +void ScreenToClient(HWND hWnd, LPRECT rect) +{ + POINT pt; + int cx = rect->right - rect->left; + int cy = rect->bottom - rect->top; + pt.x = rect->left; + pt.y = rect->top; + ScreenToClient(hWnd, &pt); + rect->left = pt.x; + rect->top = pt.y; + rect->right = pt.x + cx; + rect->bottom = pt.y + cy; +} + +void AnchorMoveWindow(HWND window, const WINDOWPOS *parentPos, int anchors) +{ + RECT rParent; + RECT rChild; + + if (parentPos->flags & SWP_NOSIZE) + { + 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); +} + +RECT AnchorCalcPos(HWND window, const RECT *rParent, const WINDOWPOS *parentPos, int anchors) +{ + RECT rChild; + RECT rTmp; + + GetWindowRect(window, &rChild); + ScreenToClient(parentPos->hwnd, &rChild); + + int cx = rParent->right - rParent->left; + int cy = rParent->bottom - rParent->top; + if ((cx == parentPos->cx) && (cy == parentPos->cy)) + { + return rChild; + } + if (parentPos->flags & SWP_NOSIZE) + { + 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; + + 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; + } + if ((anchors & ANCHOR_TOP) && (!(anchors & ANCHOR_BOTTOM))) + { + rChild.bottom -= cy; + } + if ((anchors & ANCHOR_RIGHT) && (!(anchors & ANCHOR_LEFT))) + { + rChild.left += cx; + } + if ((anchors & ANCHOR_BOTTOM) && (!(anchors & ANCHOR_TOP))) + { + rChild.top += cy; + } + return rChild; +} + +#pragma warning (disable: 4244) +void UnixTimeToFileTime(time_t t, LPFILETIME pft) +{ + // Note that LONGLONG is a 64-bit value + LONGLONG ll; + + ll = Int32x32To64(t, 10000000) + 116444736000000000; + pft->dwLowDateTime = (DWORD)ll; + pft->dwHighDateTime = ll >> 32; +} +#pragma warning (default: 4244) + +void UnixTimeToSystemTime(time_t t, LPSYSTEMTIME pst) +{ + FILETIME ft; + SYSTEMTIME st; + UnixTimeToFileTime(t, &ft); + FileTimeToSystemTime(&ft, &st); + SystemTimeToTzSpecificLocalTime(NULL, &st, pst); +} + +HANDLE GetNeededEvent(HANDLE hLastFirstEvent, int index, int direction) +{ + int i; + HANDLE hEvent = hLastFirstEvent; + const char *service; + if (direction == DIRECTION_BACK) + { + service = MS_DB_EVENT_FINDPREV; + } + else{ + service = MS_DB_EVENT_FINDNEXT; + } + + for (i = 0; i < index; i++) + { + hEvent = (HANDLE) CallService(service, (WPARAM) hEvent, 0); + } + return hEvent; +} + +SearchResult SearchHistory(HANDLE hContact, HANDLE hFirstEvent, void *searchData, int direction, int type) +{ + if (hFirstEvent == NULL) + { + const char *service = (direction == DIRECTION_BACK) ? MS_DB_EVENT_FINDLAST : MS_DB_EVENT_FINDFIRST; + hFirstEvent = (HANDLE) CallService(service, (WPARAM) hContact, 0); + } + int index = 0; + HANDLE hEvent = hFirstEvent; + void *buffer = NULL; + TCHAR *search; + wchar_t TEMP[2048]; + bool found = false; + int oldSize, newSize; + oldSize = newSize = 0; + + DBEVENTINFO dbEvent = {0}; + dbEvent.cbSize = sizeof(dbEvent); + + while ((!found) && (hEvent)) + { + newSize = CallService(MS_DB_EVENT_GETBLOBSIZE, (WPARAM) hEvent, 0); + if (newSize > oldSize) + { + buffer = (TCHAR *) realloc(buffer, newSize); + oldSize = newSize; + } + dbEvent.pBlob = (PBYTE) buffer; + dbEvent.cbBlob = newSize; + if (CallService(MS_DB_EVENT_GET, (WPARAM) hEvent, (LPARAM) &dbEvent) == 0) //successful + { + switch (type) + { + case SEARCH_TEXT: + { +#ifdef _UNICODE + unsigned int size = strlen((char *) dbEvent.pBlob) + 1; + if (size < dbEvent.cbBlob) + { + search = (wchar_t *) &dbEvent.pBlob[size]; + } + else{ + MultiByteToWideChar(CP_ACP, 0, (char *) buffer, size, TEMP, 2048); + search = TEMP; + } +#else + 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; + } + } + } + if (!found) + { + hEvent = GetNeededEvent(hEvent, 1, direction); + index++; + } + } + free(buffer); + SearchResult sr; + sr.index = index; + sr.hEvent = hEvent; + return sr; +}
\ No newline at end of file diff --git a/plugins/IEHistory/IEHistory/utils.h b/plugins/IEHistory/IEHistory/utils.h new file mode 100644 index 0000000000..c423b4ede7 --- /dev/null +++ b/plugins/IEHistory/IEHistory/utils.h @@ -0,0 +1,97 @@ +/* +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. +*/ + +#ifndef M_IEHISTORY_UTILS_H +#define M_IEHISTORY_UTILS_H + +#include "stdafx.h" +#include "time.h" + +#define ANCHOR_LEFT 0x000001 +#define ANCHOR_RIGHT 0x000002 +#define ANCHOR_TOP 0x000004 +#define ANCHOR_BOTTOM 0x000008 +#define ANCHOR_ALL ANCHOR_LEFT | ANCHOR_RIGHT | ANCHOR_TOP | ANCHOR_BOTTOM + +#define DIRECTION_BACK 0x000001 +#define DIRECTION_FORWARD 0x000002 + +#define SEARCH_TEXT 0x000001 +#define SEARCH_TIME 0x000002 + +/* +#define SIDE_LEFT 0x000001 +#define SIDE_TOP 0x000002 +#define SIDE_RIGHT 0x000004 +#define SIDE_BOTTOM 0x000008 +#define SIDE_TOPLEFT SIDE_TOP | SIDE_LEFT +#define SIDE_TOPRIGHT SIDE_TOP | SIDE_RIGHT +#define SIDE_BOTTOMLEFT SIDE_BOTTOM | SIDE_LEFT +#define SIDE_BOTTOMRIGHT SIDE_BOTTOM | SIDE_RIGHT +*/ + +#define TSDF_TIME_SET 0x00000001 +#define TSDF_DATE_SET 0x00000002 + +struct TimeSearchData{ + int flags; + SYSTEMTIME time; +}; + +struct SearchResult{ + long index; + HANDLE hEvent; +}; + +//#ifdef _DEBUG +int LogInit(); +int Log(char *format, ...); +//#endif + +void ScreenToClient(HWND hWnd, LPRECT rect); + +int Info(char *title, char *format, ...); +TCHAR *GetContactName(HANDLE hContact, char *szProto); +void AnchorMoveWindow(HWND window, const WINDOWPOS *parentPos, int anchors); +RECT AnchorCalcPos(HWND window, const RECT *rParent, const WINDOWPOS *parentPos, int anchors); + +void UnixTimeToFileTime(time_t t, LPFILETIME pft); +void UnixTimeToSystemTime(time_t t, LPSYSTEMTIME pst); + +HANDLE GetNeededEvent(HANDLE hLastFirstEvent, int index, int direction); +SearchResult SearchHistory(HANDLE hContact, HANDLE hFirstEvent, void *searchData, int direction, int type); + +extern void *(*MirandaMalloc)(size_t size); +extern void *(*MirandaRealloc)(void *data, size_t newSize); +extern void (*MirandaFree) (void *data); + +/* +static __inline int mir_snprintf(char *buffer, size_t count, const char* fmt, ...) { + va_list va; + int len; + + va_start(va, fmt); + len = _vsnprintf(buffer, count-1, fmt, va); + va_end(va); + buffer[count-1] = 0; + return len; +} +*/ +#endif
\ No newline at end of file diff --git a/plugins/IEHistory/IEHistory/version.aps b/plugins/IEHistory/IEHistory/version.aps Binary files differnew file mode 100644 index 0000000000..00ae066309 --- /dev/null +++ b/plugins/IEHistory/IEHistory/version.aps diff --git a/plugins/IEHistory/IEHistory/version.h b/plugins/IEHistory/IEHistory/version.h new file mode 100644 index 0000000000..204fd10561 --- /dev/null +++ b/plugins/IEHistory/IEHistory/version.h @@ -0,0 +1,53 @@ +/* +Bonsai plugin for Miranda IM + +Copyright © 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. +*/ + +#ifndef M_IEHISTORY_VERSION_H +#define M_IEHISTORY_VERSION_H + +#define __MAJOR_VERSION 0 +#define __MINOR_VERSION 0 +#define __RELEASE_NUM 1 +#define __BUILD_NUM 4 + +#define VERSION PLUGIN_MAKE_VERSION(__MAJOR_VERSION, __MINOR_VERSION, __RELEASE_NUM, __BUILD_NUM) + +#define __PLUGINVERSION_STRING __MAJOR_VERSION,__MINOR_VERSION,__RELEASE_NUM,__BUILD_NUM +#define __PLUGINVERSION_STRING_DOTS __MAJOR_VERSION.__MINOR_VERSION.__RELEASE_NUM.__BUILD_NUM +#define __STRINGIFY_(x) #x +#define __STRINGIFY(x) __STRINGIFY_(x) +#define __VERSION_STRING __STRINGIFY(__PLUGINVERSION_STRING_DOTS) + +#ifdef _UNICODE +#define __DESC "IEView history viewer for unicode cores." +#else +#define __DESC "IEView history viewer for non unicode cores." +#endif +#define __AUTHOR "Cristian Libotean" +#define __AUTHOREMAIL "eblis102@yahoo.com" +#define __COPYRIGHT "© 2006 Cristian Libotean" +#define __AUTHORWEB "http://www.miranda-im.org/" + +#ifdef _UNICODE +#define __PLUGIN_DISPLAY_NAME "IEView History Viewer (Unicode)" +#else +#define __PLUGIN_DISPLAY_NAME "IEView History Viewer" +#endif + +#endif //M_IEHISTORY_VERSION_H diff --git a/plugins/IEHistory/IEHistory/version.rc b/plugins/IEHistory/IEHistory/version.rc new file mode 100644 index 0000000000..0bd4ea67f4 --- /dev/null +++ b/plugins/IEHistory/IEHistory/version.rc @@ -0,0 +1,100 @@ +// Microsoft Visual C++ generated resource script. +// +#include "resource.h" +#include "version.h" + +#define APSTUDIO_READONLY_SYMBOLS +///////////////////////////////////////////////////////////////////////////// +// +// Generated from the TEXTINCLUDE 2 resource. +// +#include "afxres.h" + +///////////////////////////////////////////////////////////////////////////// +#undef APSTUDIO_READONLY_SYMBOLS + +///////////////////////////////////////////////////////////////////////////// +// English (U.S.) resources + +#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU) +#ifdef _WIN32 +LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US +#pragma code_page(1252) +#endif //_WIN32 + +#ifdef APSTUDIO_INVOKED +///////////////////////////////////////////////////////////////////////////// +// +// TEXTINCLUDE +// + +1 TEXTINCLUDE +BEGIN + "resource1.h\0" +END + +2 TEXTINCLUDE +BEGIN + "#include ""afxres.h""\r\n" + "\0" +END + +3 TEXTINCLUDE +BEGIN + "\r\n" + "\0" +END + +#endif // APSTUDIO_INVOKED + + +///////////////////////////////////////////////////////////////////////////// +// +// Version +// + +VS_VERSION_INFO VERSIONINFO + FILEVERSION __PLUGINVERSION_STRING + PRODUCTVERSION __PLUGINVERSION_STRING + FILEFLAGSMASK 0x17L +#ifdef _DEBUG + FILEFLAGS 0x1L +#else + FILEFLAGS 0x0L +#endif + FILEOS 0x4L + FILETYPE 0x2L + FILESUBTYPE 0x0L +BEGIN + BLOCK "StringFileInfo" + BEGIN + BLOCK "040904b0" + BEGIN + VALUE "Author", __AUTHOR + VALUE "FileDescription", __DESC + VALUE "FileVersion", __VERSION_STRING + VALUE "InternalName", __PLUGIN_DISPLAY_NAME + VALUE "LegalCopyright", __COPYRIGHT + END + END + BLOCK "VarFileInfo" + BEGIN + VALUE "Translation", 0x409, 1200 + END +END + +#endif // English (U.S.) resources +///////////////////////////////////////////////////////////////////////////// + + + +#ifndef APSTUDIO_INVOKED +///////////////////////////////////////////////////////////////////////////// +// +// Generated from the TEXTINCLUDE 3 resource. +// + + +///////////////////////////////////////////////////////////////////////////// +#endif // not APSTUDIO_INVOKED + diff --git a/plugins/IEHistory/docs/IEHistory_readme.txt b/plugins/IEHistory/docs/IEHistory_readme.txt new file mode 100644 index 0000000000..92be3277f4 --- /dev/null +++ b/plugins/IEHistory/docs/IEHistory_readme.txt @@ -0,0 +1,121 @@ +IEView History Viewer v.0.0.1.4 + by Cristian "Eblis" Libotean + copyright © 2005-2007 Cristian Libotean + +This plugin requires IEView to work, it might even crash if IEView is not available. +Make sure you have it enabled before reporting crashes !!! + +You can search the logs by pressing Ctrl + F while the log window is selected. +You can copy text by selecting it and then right click, Copy. + +Changes: + ++ : new feature +* : changed +! : bufgix +- : feature removed or disabled because of pending bugs + +v. 0.0.1.4 - 2007/04/16 + * Rebased dll (0x2F040000 ... previous address was 0x2F020000). + +v. 0.0.1.3 - 2007/03/09 + * Changed icon (icon provided by Faith Healer) + +v. 0.0.1.2 - 2007/03/09 + * Use the correct interface ID for history plugins (MIID_UIHISTORY). + +v. 0.0.1.1 - 2007/03/08 + + Added Unicode flag. + +v. 0.0.1.0 - 2007/03/06 + + Added UUID ( {2f093b88-f389-44f1-9e2a-37c29194203a} Unicode, {2f997250-bc2f-46f0-a33e-65f06283be5d} Ansi ) + + Added HISTORY interface. + +v. 0.0.0.13 - 2007/01/12 + ! Don't use data after being free()'d + +v. 0.0.0.12 - 2006/12/07 + * Changed controls tab order. + + Added version info. + +v. 0.0.0.11 - 2006/09/14 + ! Fixed search in unicode version. + * Always use ANSI strings for menu items. + * Use themes for tabbed dialogs if they are available. + +v. 0.0.0.10 - 2006/06/13 + * Fix for Windows 2000 and date time controls. + +v. 0.0.0.9 - 2006/05/17 + * Destroy services the correct way. + +v. 0.0.0.8 - 2006/03/23 + + Added 'Load in background' - in alpha stanges, doesn't work correctly with all event types (might show garbled text) (disabled). + +v. 0.0.0.7 - 2006/02/1 + + Rebased the dll (0x2F020000) + * Modified plugin to work with new ieview. + * Removed unneeded text from statusbar. + +v. 0.0.0.6 - 2006/01/11 + + Added min width and height for the history window. + * The contact list window is no longer the parent of the history window :) + (using the list in m_utils.h - thanks nullbie) + + Added status bar. + +v. 0.0.0.5 - 2006/01/09 + + ! Changed options root to "Message Sessions" from "Message sessions". + * Miranda's clist window is now the parent of the history window. + ! Allow updater to update the unicode version too. + * Use the custom handle of the contact in the window title (if available). + +v. 0.0.0.4 - 2006/01/06 + + Added search function. You can search for a given text + or for a given date and/or time. If an event is found + the current page will be centered on it but it won't be selected as + this can't be done. If you want to find it in the current page + you can press Ctrl + F like before (this way the text *will* become + selected). Some notes on searching: + - search is disabled if all events are loaded. + - you can either search for text or a date/time, not both. + - you can't start a search from a given entry, they always begin + with the first (or last) entry, depending on the direction of the search. + - if you make a modification to the string or date/time the search + will restart, it won't continue. + - seconds aren't taken into account when searching for a given time. + * Check to see if contact is RTL or LTR (only tabsrmm supported) + (the setting in options acts as the default text direction which is + overriden by the per-contact one). + * Counting of events loaded in page now begins at 1 (not 0 as before) + * Minor changes to prevent memory leaks. + +v. 0.0.0.3 - 2006/01/03 + ! Fixed some issues with the pages. + + Added option to show the last page of the history first. + + Added RTL support. + +v. 0.0.0.2 - 2006/01/03 + + You can now choose to either load all events or only a certain number + per page. + + Added border around ieview control. + + Allow resize of main window. + + Added icon to main window. + +v. 0.0.0.1 - 2005/12/30 + First build, released on miranda's forums. + + +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. diff --git a/plugins/IEHistory/files_release.txt b/plugins/IEHistory/files_release.txt new file mode 100644 index 0000000000..65a28fcca2 --- /dev/null +++ b/plugins/IEHistory/files_release.txt @@ -0,0 +1,2 @@ +IEHistory\Release\IEHistory.dll +IEHistory\Release UNICODE\IEHistoryW.dll diff --git a/plugins/IEHistory/files_source.txt b/plugins/IEHistory/files_source.txt new file mode 100644 index 0000000000..f861ea5a25 --- /dev/null +++ b/plugins/IEHistory/files_source.txt @@ -0,0 +1,4 @@ +IEHistory\res\*.* +IEHistory\*.* +docs\*.* +*.*
\ No newline at end of file diff --git a/plugins/IEHistory/history.ico b/plugins/IEHistory/history.ico Binary files differnew file mode 100644 index 0000000000..eb627fa6b0 --- /dev/null +++ b/plugins/IEHistory/history.ico diff --git a/plugins/IEHistory/pack source.bat b/plugins/IEHistory/pack source.bat new file mode 100644 index 0000000000..2efcf2508e --- /dev/null +++ b/plugins/IEHistory/pack source.bat @@ -0,0 +1,8 @@ +for /F "tokens=5-9* delims=. " %%i in (docs\IEHistory_readme.txt) do (call :Pack %%i %%j %%k %%l; exit) + +:Pack +d:\usr\PowerArchiver\pacl\pacomp.exe -p -a -c2 "IEHistory src %1.%2.%3.%4.zip" @files_source.txt -x*.zip -x*.ncb -x*.user +exit + +error: +echo "Error packing IEHistory" diff --git a/plugins/IEHistory/pack symbols.bat b/plugins/IEHistory/pack symbols.bat new file mode 100644 index 0000000000..d6f50920b8 --- /dev/null +++ b/plugins/IEHistory/pack symbols.bat @@ -0,0 +1,8 @@ +@echo off +if NOT EXIST "symbols\%1 - %3" ( + mkdir "symbols\%1 - %3" +) +xcopy "%2\Release\*.pdb" "symbols\%1 - %3\*" /EXCLUDE:symbols_exclude.txt /Y + +d:\usr\PowerArchiver\pacl\pacomp.exe -p -a -r -c2 "symbols - %1.zip" "symbols\*.*" +rmdir "symbols\" /Q /S
\ No newline at end of file diff --git a/plugins/IEHistory/pack.bat b/plugins/IEHistory/pack.bat new file mode 100644 index 0000000000..f14ab0ea53 --- /dev/null +++ b/plugins/IEHistory/pack.bat @@ -0,0 +1,10 @@ +for /F "tokens=5-9* delims=. " %%i in (docs\IEHistory_readme.txt) do (call :Pack %%i %%j %%k %%l; exit) + +:Pack +D:\usr\PowerArchiver\pacl\pacomp.exe -a -c2 "IEHistory %1.%2.%3.%4.zip" @files_release.txt +D:\usr\PowerArchiver\pacl\pacomp.exe -p -a -c2 "IEHistory %1.%2.%3.%4.zip" docs\*.* *.caca +call "pack symbols.bat" IEHistory IEHistory %1.%2.%3.%4 +exit + +error: +echo "Error packing IEHistory"
\ No newline at end of file diff --git a/plugins/IEHistory/symbols_exclude.txt b/plugins/IEHistory/symbols_exclude.txt new file mode 100644 index 0000000000..361cf2448b --- /dev/null +++ b/plugins/IEHistory/symbols_exclude.txt @@ -0,0 +1 @@ +vc80.pdb
\ No newline at end of file |