summaryrefslogtreecommitdiff
path: root/Nudge
diff options
context:
space:
mode:
Diffstat (limited to 'Nudge')
-rw-r--r--Nudge/ChangeLog.txt183
-rw-r--r--Nudge/headers.h75
-rw-r--r--Nudge/include/IcoLib.h26
-rw-r--r--Nudge/m_nudge.h10
-rw-r--r--Nudge/main.cpp1020
-rw-r--r--Nudge/main.h96
-rw-r--r--Nudge/miranda.icobin0 -> 3638 bytes
-rw-r--r--Nudge/nudge.cpp135
-rw-r--r--Nudge/nudge.dsp241
-rw-r--r--Nudge/nudge.dsw29
-rw-r--r--Nudge/nudge.h72
-rw-r--r--Nudge/nudge.vcproj353
-rw-r--r--Nudge/nudge_10.sln31
-rw-r--r--Nudge/nudge_10.vcxproj483
-rw-r--r--Nudge/nudge_8.sln19
-rw-r--r--Nudge/nudge_8.vcproj368
-rw-r--r--Nudge/options.cpp578
-rw-r--r--Nudge/options.h17
-rw-r--r--Nudge/resource.h88
-rw-r--r--Nudge/resource.rc370
-rw-r--r--Nudge/resources/Nudge.icobin0 -> 2038 bytes
-rw-r--r--Nudge/resources/NudgeIRC.icobin0 -> 2038 bytes
-rw-r--r--Nudge/resources/NudgeMSN.icobin0 -> 2038 bytes
-rw-r--r--Nudge/resources/NudgeMeta.icobin0 -> 2038 bytes
-rw-r--r--Nudge/resources/NudgeTlen.icobin0 -> 2038 bytes
-rw-r--r--Nudge/resources/NudgeYahoo.icobin0 -> 2038 bytes
-rw-r--r--Nudge/resources/nudge msn.icobin0 -> 1406 bytes
-rw-r--r--Nudge/shake.cpp195
-rw-r--r--Nudge/shake.h27
29 files changed, 4416 insertions, 0 deletions
diff --git a/Nudge/ChangeLog.txt b/Nudge/ChangeLog.txt
new file mode 100644
index 0000000..477a256
--- /dev/null
+++ b/Nudge/ChangeLog.txt
@@ -0,0 +1,183 @@
+0.0.1.22
+===========
++ 64bit version
++ unhook hooks on exit
++ destroy services on exit
++ open message window on popup click
++ open message window on preview
++ moved sounds in "Nudge" section
+
+0.0.1.21
+===========
++ Traslation fo icon description
+
+0.0.1.20
+===========
+! Bug in options layout
+! Fix for crash when no protocol available (based on changed by Ivan)
+
+0.0.1.19
+===========
+! Patch by Drugwash : option page redesign and ansi buit fix
+* Change N/A to NA (requested by freak)
++ Patch for tabsrmm button api support (thx DaniOK)
+
+0.0.1.18
+===========
+! Fix autoresend save setting
++ Add a autoresend delay (must be between 1 and 10 sec)
+
+0.0.1.17
+===========
++ Add unicode aware flag
++ Support for miranda 0.8
+! Fix for icolib support
++ Added icons from angelika
+
+0.0.1.16
+===========
++ Add a service to hide/show "send nudge" context menu (for metacontact)
+
+0.0.1.15
+===========
+* Patch by Tioduke (offline nudge)
+
+0.0.1.14
+===========
+* Fix visual option
+
+0.0.1.13
+===========
+! Unicode patch by Ghazan
+! Fix options dialog size
+! Fix nudge text in unicode
+! Use DBGetContactSettingTString to read data
+
+0.0.1.12
+===========
++ Unicode supports (will need unicows.dll, thanks to sje - eblis)
+! Fix retreiving chat window (patch sje)
+
+0.0.1.11
+===========
+! Check for null handle to avoid crash in IRC mod
+! gdi leaks in option page (thx tioduke)
++ Auto send nudge option when received one.
+* New trigger plugin support (first step)
+* Use the text set in option page in popup.
+* Use find first contact service for popup preview
+* Set auto resend nudge to false by default
+
+0.0.1.10
+===========
+* Use popup for warning instead of message box.
++ Check if popup plugin is present if not use messagebox.
+
+0.0.1.9
+===========
+* Change options dialog (use tabsrmm uxtheme)
+
+0.0.1.8
+===========
++ Show a popup on sending nudge
+
+0.0.1.7
+===========
+! Change text for status log on receive.
+* Use flags = 0 for status notify.
+! Wrong section name in options saving.
+* Use winres.h in resource.
+
+0.0.1.6
+===========
++ Per contact limitation (no more per protocol cause too restrictive)
++ Privacy options to limit the number of nudge to receive
++ Options to show nudge as status change. (thx Tioduke)
+
+0.0.1.5
+===========
+! Memory leaks fix. (Patch by Ghazan)
+
+0.0.1.4
+===========
+! Bug fix, url for file in updater info points to source :-(.
+
+0.0.1.3
+===========
+! Bug fix, check time for default proto too ;)
+
+0.0.1.2
+===========
++ Add the right url for updater, now that nudge is on FL.
+
+0.0.1.1
+===========
+:( skipped
+
+0.0.1.0
+===========
+* Some modifications of the option page.
+* Redesign option page.
+! Bug fix with slider in shake option.
+! Bug fix with updater and stable version.
+
+0.0.0.12
+===========
++ Now possible to change the text shown when sending or receiving nudge ( [color=red]BUZZ!!![/color] for yahoo ;) )
+* Change options page.
+! Now apply button is enable when changing status.
+
+0.0.0.11
+===========
++ Status support (global or by protocol)
++ Limitation only sent 1 nudge every 30 sec per protocol.
+
+0.0.0.10
+===========
++ Multiprotocol options
+
+0.0.0.9
+===========
+Patch by Tioduke
+{
+ * Use the right protoname for treating nudge as event
+ * Take care of the message dialog (open or not) in treating nudge as event
+ + Registration in dbeditor ++
+}
+* Be aware of metacontact when sendig/receiving nudge (history).
+
+0.0.0.8
+===========
++ Shake options are now saved in DB
+! some code rewrite in order to easily change the algo of shaking
+! Patch by Tioduke for icons (non support of icolib)
++ Option to treat nudge as a message.
+! Recieved -> received.
+
+0.0.0.7
+===========
+! Wrong service call
+
+0.0.0.6
+===========
+* Change the return value for trigger functions
+! Bug sound file name was not set (thx TioDuke)
++ Add default Sound
+
+0.0.0.5
+===========
+! Trigger plugin bug fix
+
+0.0.0.4
+============
++ Icolib support
+! Option redesign to fix visual bug
++ First step in option page to by protocol option
++ Settings are now saved in DB :-)
+
+
+0.0.0.3
+============
+* Some mod in option page.
++ Support for trigger plugin from pboon.
+* Forced beta version in updater. \ No newline at end of file
diff --git a/Nudge/headers.h b/Nudge/headers.h
new file mode 100644
index 0000000..9753adf
--- /dev/null
+++ b/Nudge/headers.h
@@ -0,0 +1,75 @@
+// stdafx.h : include file for standard system include files,
+// or project specific include files that are used frequently, but
+// are changed infrequently
+//
+
+#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>
+#include <commctrl.h>
+#include <stdlib.h>
+#include <stdio.h>
+#include <time.h>
+#include <stddef.h>
+#include <process.h>
+
+#define MIRANDA_VER 0x1000
+#include <newpluginapi.h> //CallService,UnHookEvent
+#include <m_utils.h> //window broadcasting
+#include <m_clist.h>
+#include <m_langpack.h>
+#include <m_system.h>
+#include <m_popup.h>
+#include <m_clui.h>
+#include <m_message.h>
+#include <m_contacts.h>
+#include <m_protocols.h>
+#include <m_protomod.h>
+#include <m_options.h>
+#include <m_skin.h>
+#include <m_database.h>
+#include <m_protosvc.h>
+#include <m_trigger.h>
+#include <m_metacontacts.h>
+#include <m_updater.h>
+#include <m_icolib.h>
+#include "resource.h"
+#include "m_nudge.h"
+
+
+/*
+*
+****************************/
+void InitOptions();
+void UninitOptions();
+
+/*
+*
+****************************/
+int Preview();
+
+/*
+*
+****************************/
+HANDLE Nudge_GethContact(HANDLE); \ No newline at end of file
diff --git a/Nudge/include/IcoLib.h b/Nudge/include/IcoLib.h
new file mode 100644
index 0000000..a911ba5
--- /dev/null
+++ b/Nudge/include/IcoLib.h
@@ -0,0 +1,26 @@
+typedef struct {
+ int cbSize;
+ char *pszSection; //section name used to group icons
+ char *pszDescription; //description for options dialog
+ char *pszName; //name to refer to icon when playing and in db
+ char *pszDefaultFile; //default icon file to use
+ int iDefaultIndex;
+} SKINICONDESC;
+
+//
+// Add a icon into options UI
+// NB! pszName should be unique, e.g.: clistmw_apply, tabsrmm_history
+//
+// wParam = (WPARAM)0
+// lParam = (LPARAM)(SKINICONDESC*)sid;
+//
+#define MS_SKIN2_ADDICON "Skin2/Icons/AddIcon"
+//
+// Retrieve HICON with name specified in lParam
+// Returned HICON SHOULDN'T be destroyed, it managed by IcoLib
+//
+#define MS_SKIN2_GETICON "Skin2/Icons/GetIcon"
+//
+// Icons change notification
+//
+#define ME_SKIN2_ICONSCHANGED "Skin2/IconsChanged"
diff --git a/Nudge/m_nudge.h b/Nudge/m_nudge.h
new file mode 100644
index 0000000..e80215e
--- /dev/null
+++ b/Nudge/m_nudge.h
@@ -0,0 +1,10 @@
+#define MS_SHAKE_CLIST "SHAKE/Service/ShakeClist"
+#define MS_SHAKE_CHAT "SHAKE/Service/ShakeChat"
+#define MS_NUDGE_SEND "NUDGE/Send"
+
+// Hide or Show the context menu "send nudge"
+// wParam = char *szProto
+// lParam = BOOL show
+#define MS_NUDGE_SHOWMENU "NudgeShowMenu"
+
+#define MUUID_NUDGE_SEND { 0x9c66a9a, 0x57dc, 0x454d, { 0xa9, 0x30, 0xf8, 0xc0, 0x4f, 0xe2, 0x98, 0x38 } }
diff --git a/Nudge/main.cpp b/Nudge/main.cpp
new file mode 100644
index 0000000..0e5fc3f
--- /dev/null
+++ b/Nudge/main.cpp
@@ -0,0 +1,1020 @@
+#include "headers.h"
+#include "main.h"
+#include "shake.h"
+#include "m_msg_buttonsbar.h"
+
+
+static INT_PTR CALLBACK DlgProcOptsTrigger(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam);
+LRESULT CALLBACK NudgePopUpProc(HWND hWnd,UINT msg,WPARAM wParam,LPARAM lParam);
+
+int nProtocol = 0;
+static HANDLE g_hEventModulesLoaded = NULL, g_hEventIconsChanged = NULL,hEventOptionsInitialize, g_hIcon = NULL, g_hEventDbWindowEvent = NULL, g_hEventToolbarLoaded = NULL, g_hEventButtonPressed = NULL;
+HINSTANCE hInst;
+PLUGINLINK *pluginLink;
+NudgeElementList *NudgeList;
+CNudgeElement DefaultNudge;
+CShake shake;
+CNudge GlobalNudge;
+
+MM_INTERFACE mmi;
+int hLangpack = 0;
+
+BOOL (WINAPI *MyEnableThemeDialogTexture)(HANDLE, DWORD) = 0;
+HMODULE hUxTheme = 0;
+
+// function pointers, use typedefs for casting to shut up the compiler when using GetProcAddress()
+
+typedef BOOL (WINAPI *PITA)();
+typedef HANDLE (WINAPI *POTD)(HWND, LPCWSTR);
+typedef UINT (WINAPI *PDTB)(HANDLE, HDC, int, int, RECT *, RECT *);
+typedef UINT (WINAPI *PCTD)(HANDLE);
+typedef UINT (WINAPI *PDTT)(HANDLE, HDC, int, int, LPCWSTR, int, DWORD, DWORD, RECT *);
+
+PITA pfnIsThemeActive = 0;
+POTD pfnOpenThemeData = 0;
+PDTB pfnDrawThemeBackground = 0;
+PCTD pfnCloseThemeData = 0;
+PDTT pfnDrawThemeText = 0;
+
+#define FIXED_TAB_SIZE 100 // default value for fixed width tabs
+
+/*
+ * visual styles support (XP+)
+ * returns 0 on failure
+ */
+
+int InitVSApi()
+{
+ if((hUxTheme = LoadLibraryA("uxtheme.dll")) == 0)
+ return 0;
+
+ pfnIsThemeActive = (PITA)GetProcAddress(hUxTheme, "IsThemeActive");
+ pfnOpenThemeData = (POTD)GetProcAddress(hUxTheme, "OpenThemeData");
+ pfnDrawThemeBackground = (PDTB)GetProcAddress(hUxTheme, "DrawThemeBackground");
+ pfnCloseThemeData = (PCTD)GetProcAddress(hUxTheme, "CloseThemeData");
+ pfnDrawThemeText = (PDTT)GetProcAddress(hUxTheme, "DrawThemeText");
+
+ MyEnableThemeDialogTexture = (BOOL (WINAPI *)(HANDLE, DWORD))GetProcAddress(hUxTheme, "EnableThemeDialogTexture");
+ if(pfnIsThemeActive != 0 && pfnOpenThemeData != 0 && pfnDrawThemeBackground != 0 && pfnCloseThemeData != 0 && pfnDrawThemeText != 0) {
+ return 1;
+ }
+ return 0;
+}
+
+/*
+ * unload uxtheme.dll
+ */
+
+int FreeVSApi()
+{
+ if(hUxTheme != 0)
+ FreeLibrary(hUxTheme);
+ return 0;
+}
+
+DWORD MirVer;
+
+
+//========================
+// MirandaPluginInfo
+//========================
+PLUGININFOEX pluginInfo={
+ sizeof(PLUGININFOEX),
+ "Nudge",
+ PLUGIN_MAKE_VERSION(0,0,1,19),
+ "Plugin to shake the clist and chat window",
+ "Tweety/GouZ",
+ "francois.mean@skynet.be / Sylvain.gougouzian@gmail.com ",
+ "copyright to the miranda community",
+ "http://addons.miranda-im.org/details.php?action=viewfile&id=2708", // www
+ UNICODE_AWARE,
+ 0, //doesn't replace anything built-in
+ { 0x9ceee701, 0x35cd, 0x4ff7, { 0x8c, 0xc4, 0xef, 0x7d, 0xd2, 0xac, 0x53, 0x5c } } // {9CEEE701-35CD-4ff7-8CC4-EF7DD2AC535C}
+};
+
+
+
+void RegisterToUpdate(void)
+{
+ //Use for the Updater plugin
+ if(ServiceExists(MS_UPDATE_REGISTER))
+ {
+ Update update = {0};
+ char szVersion[16];
+
+ update.szComponentName = pluginInfo.shortName;
+ update.pbVersion = (BYTE *)CreateVersionStringPluginEx(&pluginInfo, szVersion);
+ update.cpbVersion = strlen((char *)update.pbVersion);
+ update.szUpdateURL = UPDATER_AUTOREGISTER;
+ update.szVersionURL = "http://addons.miranda-im.org/details.php?action=viewfile&id=2708";
+ update.pbVersionPrefix = (BYTE *)"<span class=\"fileNameHeader\">Nudge ";
+ update.szBetaUpdateURL = "http://www.miranda-fr.net/tweety/Nudge/Nudge.zip";
+ update.szBetaVersionURL = "http://www.miranda-fr.net/tweety/Nudge/Nudge_beta.html";
+ update.pbBetaVersionPrefix = (BYTE *)"Nudge version ";
+
+ update.cpbVersionPrefix = strlen((char *)update.pbVersionPrefix);
+ update.cpbBetaVersionPrefix = strlen((char *)update.pbBetaVersionPrefix);
+
+ CallService(MS_UPDATE_REGISTER, 0, (WPARAM)&update);
+
+ }
+}
+
+INT_PTR NudgeShowMenu(WPARAM wParam,LPARAM lParam)
+{
+
+ NudgeElementList *n;
+ for(n = NudgeList;n != NULL; n = n->next)
+ {
+ if(!strcmp((char *) wParam,n->item.ProtocolName))
+ {
+ return n->item.ShowContactMenu(lParam != 0);
+ }
+ }
+ return 0;
+}
+
+INT_PTR NudgeSend(WPARAM wParam,LPARAM lParam)
+{
+
+ char *protoName = (char*) CallService(MS_PROTO_GETCONTACTBASEPROTO,wParam,0);
+ int diff = time(NULL) - DBGetContactSettingDword((HANDLE) wParam, "Nudge", "LastSent", time(NULL)-30);
+
+ if(diff < GlobalNudge.sendTimeSec)
+ {
+ TCHAR msg[500];
+ mir_sntprintf(msg,500, TranslateT("You are not allowed to send too much nudge (only 1 each %d sec, %d sec left)"),GlobalNudge.sendTimeSec, 30 - diff);
+ //MessageBox(NULL,msg,NULL,0);
+ if(GlobalNudge.useByProtocol)
+ {
+ NudgeElementList *n;
+ for(n = NudgeList;n != NULL; n = n->next)
+ {
+ if(!strcmp(protoName,n->item.ProtocolName))
+ {
+ Nudge_ShowPopup(n->item, (HANDLE) wParam, msg);
+ }
+ }
+ }
+ else
+ {
+ Nudge_ShowPopup(DefaultNudge, (HANDLE) wParam, msg);
+ }
+ return 0;
+ }
+
+ DBWriteContactSettingDword((HANDLE) wParam, "Nudge", "LastSent", time(NULL));
+
+ if(GlobalNudge.useByProtocol)
+ {
+ NudgeElementList *n;
+ for(n = NudgeList;n != NULL; n = n->next)
+ {
+ if(!strcmp(protoName,n->item.ProtocolName))
+ {
+ if(n->item.showPopup)
+ Nudge_ShowPopup(n->item, (HANDLE) wParam, n->item.senText);
+ if(n->item.showEvent)
+ Nudge_SentEvent(n->item, (HANDLE) wParam);
+ if(n->item.showStatus)
+ Nudge_SentStatus(n->item, (HANDLE) wParam);
+ }
+ }
+ }
+ else
+ {
+ if(DefaultNudge.showPopup)
+ Nudge_ShowPopup(DefaultNudge, (HANDLE) wParam, DefaultNudge.senText);
+ if(DefaultNudge.showEvent)
+ Nudge_SentEvent(DefaultNudge, (HANDLE) wParam);
+ if(DefaultNudge.showStatus)
+ Nudge_SentStatus(DefaultNudge, (HANDLE) wParam);
+ }
+
+ char servicefunction[ 100 ];
+ sprintf(servicefunction, "%s/SendNudge", protoName);
+
+ CallService(servicefunction, wParam, lParam);
+
+ return 0;
+}
+
+int NudgeRecieved(WPARAM wParam,LPARAM lParam)
+{
+
+ char *protoName = (char*) CallService(MS_PROTO_GETCONTACTBASEPROTO,wParam,0);
+
+ DWORD currentTimestamp = time(NULL);
+ DWORD nudgeSentTimestamp = lParam ? (DWORD)lParam : currentTimestamp;
+
+ int diff = currentTimestamp - DBGetContactSettingDword((HANDLE) wParam, "Nudge", "LastReceived", currentTimestamp-30);
+ int diff2 = nudgeSentTimestamp - DBGetContactSettingDword((HANDLE) wParam, "Nudge", "LastReceived2", nudgeSentTimestamp-30);
+
+ if(diff >= GlobalNudge.recvTimeSec)
+ DBWriteContactSettingDword((HANDLE) wParam, "Nudge", "LastReceived", currentTimestamp);
+ if(diff2 >= GlobalNudge.recvTimeSec)
+ DBWriteContactSettingDword((HANDLE) wParam, "Nudge", "LastReceived2", nudgeSentTimestamp);
+
+ if(GlobalNudge.useByProtocol)
+ {
+ NudgeElementList *n;
+ for(n = NudgeList;n != NULL; n = n->next)
+ {
+ if(!strcmp(protoName,n->item.ProtocolName))
+ {
+
+ if(n->item.enabled)
+ {
+ DWORD Status = CallProtoService(protoName,PS_GETSTATUS,0,0);
+
+ if( ((n->item.statusFlags & NUDGE_ACC_ST0) && (Status<=ID_STATUS_OFFLINE)) ||
+ ((n->item.statusFlags & NUDGE_ACC_ST1) && (Status==ID_STATUS_ONLINE)) ||
+ ((n->item.statusFlags & NUDGE_ACC_ST2) && (Status==ID_STATUS_AWAY)) ||
+ ((n->item.statusFlags & NUDGE_ACC_ST3) && (Status==ID_STATUS_DND)) ||
+ ((n->item.statusFlags & NUDGE_ACC_ST4) && (Status==ID_STATUS_NA)) ||
+ ((n->item.statusFlags & NUDGE_ACC_ST5) && (Status==ID_STATUS_OCCUPIED)) ||
+ ((n->item.statusFlags & NUDGE_ACC_ST6) && (Status==ID_STATUS_FREECHAT)) ||
+ ((n->item.statusFlags & NUDGE_ACC_ST7) && (Status==ID_STATUS_INVISIBLE)) ||
+ ((n->item.statusFlags & NUDGE_ACC_ST8) && (Status==ID_STATUS_ONTHEPHONE)) ||
+ ((n->item.statusFlags & NUDGE_ACC_ST9) && (Status==ID_STATUS_OUTTOLUNCH)))
+ {
+ if(diff >= GlobalNudge.recvTimeSec)
+ {
+ if(n->item.showPopup)
+ Nudge_ShowPopup(n->item, (HANDLE) wParam, n->item.recText);
+ if(n->item.shakeClist)
+ ShakeClist(wParam,lParam);
+ if(n->item.shakeChat)
+ ShakeChat(wParam,lParam);
+ if(n->item.autoResend)
+ mir_forkthread(AutoResendNudge,(void *)wParam);
+
+ SkinPlaySound( n->item.NudgeSoundname );
+ }
+ }
+ if(diff2 >= GlobalNudge.recvTimeSec)
+ {
+ if(n->item.showEvent)
+ Nudge_ShowEvent(n->item, (HANDLE) wParam, nudgeSentTimestamp);
+ if(n->item.showStatus)
+ Nudge_ShowStatus(n->item, (HANDLE) wParam, nudgeSentTimestamp);
+ }
+
+ }
+ }
+ }
+ }
+ else
+ {
+ if(DefaultNudge.enabled)
+ {
+ DWORD Status = CallService(MS_CLIST_GETSTATUSMODE,0,0);
+ if( ((DefaultNudge.statusFlags & NUDGE_ACC_ST0) && (Status<=ID_STATUS_OFFLINE)) ||
+ ((DefaultNudge.statusFlags & NUDGE_ACC_ST1) && (Status==ID_STATUS_ONLINE)) ||
+ ((DefaultNudge.statusFlags & NUDGE_ACC_ST2) && (Status==ID_STATUS_AWAY)) ||
+ ((DefaultNudge.statusFlags & NUDGE_ACC_ST3) && (Status==ID_STATUS_DND)) ||
+ ((DefaultNudge.statusFlags & NUDGE_ACC_ST4) && (Status==ID_STATUS_NA)) ||
+ ((DefaultNudge.statusFlags & NUDGE_ACC_ST5) && (Status==ID_STATUS_OCCUPIED)) ||
+ ((DefaultNudge.statusFlags & NUDGE_ACC_ST6) && (Status==ID_STATUS_FREECHAT)) ||
+ ((DefaultNudge.statusFlags & NUDGE_ACC_ST7) && (Status==ID_STATUS_INVISIBLE)) ||
+ ((DefaultNudge.statusFlags & NUDGE_ACC_ST8) && (Status==ID_STATUS_ONTHEPHONE)) ||
+ ((DefaultNudge.statusFlags & NUDGE_ACC_ST9) && (Status==ID_STATUS_OUTTOLUNCH)))
+ {
+ if(diff >= GlobalNudge.recvTimeSec)
+ {
+ if(DefaultNudge.showPopup)
+ Nudge_ShowPopup(DefaultNudge, (HANDLE) wParam, DefaultNudge.recText);
+ if(DefaultNudge.shakeClist)
+ ShakeClist(wParam,lParam);
+ if(DefaultNudge.shakeChat)
+ ShakeChat(wParam,lParam);
+ if(DefaultNudge.autoResend)
+ mir_forkthread(AutoResendNudge,(void *)wParam);
+
+ SkinPlaySound( DefaultNudge.NudgeSoundname );
+ }
+ }
+ if(diff2 >= GlobalNudge.recvTimeSec)
+ {
+ if(DefaultNudge.showEvent)
+ Nudge_ShowEvent(DefaultNudge, (HANDLE) wParam, nudgeSentTimestamp);
+ if(DefaultNudge.showStatus)
+ Nudge_ShowStatus(DefaultNudge, (HANDLE) wParam, nudgeSentTimestamp);
+ }
+ }
+ }
+ return 0;
+}
+
+extern "C" BOOL WINAPI DllMain(HINSTANCE hinstDLL,DWORD fdwReason,LPVOID lpvReserved)
+{
+ hInst=hinstDLL;
+ return TRUE;
+}
+
+extern "C" __declspec(dllexport) PLUGININFOEX* MirandaPluginInfoEx(DWORD mirandaVersion)
+{
+ MirVer = mirandaVersion;
+ return &pluginInfo;
+}
+
+static const MUUID interfaces[] = {MUUID_NUDGE_SEND, MIID_LAST};
+extern "C" __declspec(dllexport) const MUUID * MirandaPluginInterfaces(void)
+{
+ return interfaces;
+}
+
+int MainInit(WPARAM wParam,LPARAM lParam)
+{
+ return 0;
+}
+
+static INT_PTR CALLBACK DlgProcOptsTrigger(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam) {
+
+ switch (msg) {
+ case WM_INITDIALOG: {
+ // lParam = (LPARAM)(DWORD)actionID or 0 if this is a new trigger entry
+ DWORD actionID;
+ BOOL bshakeClist,bshakeChat;
+
+ actionID = (DWORD)lParam;
+ TranslateDialogDefault(hwnd);
+ // Initialize the dialog according to the action ID
+ bshakeClist = DBGetActionSettingByte(actionID, NULL, "Nudge", "ShakeClist",FALSE);
+ bshakeChat = DBGetActionSettingByte(actionID, NULL, "Nudge", "ShakeChat",FALSE);
+ CheckDlgButton(hwnd, IDC_TRIGGER_SHAKECLIST, bshakeClist ? BST_CHECKED : BST_UNCHECKED);
+ CheckDlgButton(hwnd, IDC_TRIGGER_SHAKECHAT, bshakeChat ? BST_CHECKED : BST_UNCHECKED);
+ break;
+ }
+
+ case TM_ADDACTION: {
+ // save your settings
+ // wParam = (WPARAM)(DWORD)actionID
+ DWORD actionID;
+ bool bshakeClist,bshakeChat;
+
+ actionID = (DWORD)wParam;
+ bshakeClist = (IsDlgButtonChecked(hwnd,IDC_TRIGGER_SHAKECLIST)==BST_CHECKED);
+ bshakeChat = (IsDlgButtonChecked(hwnd,IDC_TRIGGER_SHAKECHAT)==BST_CHECKED);
+ DBWriteActionSettingByte(actionID, NULL, "Nudge", "ShakeClist",bshakeClist);
+ DBWriteActionSettingByte(actionID, NULL, "Nudge", "ShakeChat",bshakeChat);
+ break;
+ }
+ }
+
+ return FALSE;
+}
+
+int TriggerActionRecv( DWORD actionID, REPORTINFO *ri)
+{
+ // check how to process this call
+ if (ri->flags&ACT_PERFORM) {
+ BOOL bshakeClist,bshakeChat;
+ HANDLE hContact = ((ri->td!=NULL)&&(ri->td->dFlags&DF_CONTACT))?ri->td->hContact:NULL;
+ bshakeClist = DBGetActionSettingByte(actionID, NULL, "Nudge", "ShakeClist",FALSE);
+ bshakeChat = DBGetActionSettingByte(actionID, NULL, "Nudge", "ShakeChat",FALSE);
+
+ if(bshakeClist)
+ ShakeClist(NULL,NULL);
+ if(bshakeChat && (hContact != NULL))
+ ShakeChat((WPARAM)hContact,NULL);
+
+ /* // Actually show the message box
+ DBVARIANT dbv;
+ TCHAR *tszMsg;
+
+ // Retrieve the correct settings for this action ID
+ if (!DBGetActionSettingTString(actionID, NULL, MODULENAME, SETTING_TEXT, &dbv)) {
+ // Parse by Variables, if available (notice extratext and subject are given).
+ tszMsg = variables_parsedup(dbv.ptszVal, ((ri->td!=NULL)&&(ri->td->dFlags&DF_TEXT))?ri->td->tszText:NULL, ((ri->td!=NULL)&&(ri->td->dFlags&DF_CONTACT))?ri->td->hContact:NULL);
+ if (tszMsg != NULL) {
+ // Show the message box
+ MessageBox(NULL, tszMsg, TranslateT("ExampleAction"), MB_OK);
+ free(tszMsg);
+ }
+ DBFreeVariant(&dbv);
+ }
+ */
+ }
+ if (ri->flags&ACT_CLEANUP) { // request to delete all associated settings
+ RemoveAllActionSettings(actionID, "Nudge");
+ }
+ return FALSE;
+}
+
+int TriggerActionSend( DWORD actionID, REPORTINFO *ri)
+{
+ if (ri->flags&ACT_PERFORM) {
+ HANDLE hContact = ((ri->td!=NULL)&&(ri->td->dFlags&DF_CONTACT))?ri->td->hContact:NULL;
+ if(hContact != NULL)
+ NudgeSend((WPARAM)hContact,NULL);
+ }
+
+ return FALSE;
+}
+
+void LoadProtocols(void)
+{
+ //Load the default nudge
+ sprintf(DefaultNudge.ProtocolName,"Default");
+ sprintf(DefaultNudge.NudgeSoundname,"Nudge : Default");
+ SkinAddNewSoundEx( DefaultNudge.NudgeSoundname, LPGEN("Nudge"),DefaultNudge.NudgeSoundname);
+ DefaultNudge.Load();
+
+ GlobalNudge.Load();
+
+ int numberOfProtocols,ret;
+ char str[MAXMODULELABELLENGTH + 10];
+ HANDLE NudgeEvent = NULL;
+ PROTOCOLDESCRIPTOR ** ppProtocolDescriptors;
+ ret = CallService(MS_PROTO_ENUMPROTOCOLS,(WPARAM) &numberOfProtocols,(LPARAM)&ppProtocolDescriptors);
+ if(ret == 0)
+ {
+ for(int i = 0; i < numberOfProtocols ; i++)
+ {
+ if(ppProtocolDescriptors[i]->type == PROTOTYPE_PROTOCOL)
+ {
+ sprintf(str,"%s/Nudge",ppProtocolDescriptors[i]->szName);
+ NudgeEvent = HookEvent(str, NudgeRecieved);
+ if(NudgeEvent != NULL)
+ Nudge_AddElement(ppProtocolDescriptors[i]->szName, NudgeEvent);
+
+ NudgeEvent = NULL;
+ }
+ }
+
+ }
+
+ shake.Load();
+
+ /*CNudgeElement *n;
+ for(n = NudgeList;n != NULL; n = n->next)
+ {
+ MessageBox(NULL,n->ProtocolName,n->NudgeSoundname,0);
+ }*/
+}
+
+void RegisterToTrigger(void)
+{
+ if( ServiceExists(MS_TRIGGER_REGISTERACTION))
+ {
+ ACTIONREGISTER ar;
+ ZeroMemory(&ar, sizeof(ar));
+ ar.cbSize = sizeof(ar);
+ ar.hInstance = hInst;
+ ar.flags = ARF_TCHAR|ARF_FUNCTION;
+ ar.actionFunction = TriggerActionRecv;
+ ar.pfnDlgProc = DlgProcOptsTrigger;
+ ar.pszTemplate = MAKEINTRESOURCEA(IDD_OPT_TRIGGER);
+ ar.pszName = Translate("Nudge : Shake contact list/chat window");
+
+ // register the action
+ CallService(MS_TRIGGER_REGISTERACTION, 0, (LPARAM)&ar);
+
+ ar.actionFunction = TriggerActionSend;
+ ar.pszName = Translate("Nudge : Send a nudge");
+ ar.pfnDlgProc = NULL;
+ ar.pszTemplate = NULL;
+
+ // register the action
+ CallService(MS_TRIGGER_REGISTERACTION, 0, (LPARAM)&ar);
+ }
+}
+
+void RegisterToDbeditorpp(void)
+{
+ // known modules list
+ if (ServiceExists("DBEditorpp/RegisterSingleModule"))
+ CallService("DBEditorpp/RegisterSingleModule", (WPARAM)"Nudge", 0);
+}
+
+void LoadIcons(void)
+{
+ //Load icons
+ if(ServiceExists(MS_SKIN2_ADDICON))
+ {
+ SKINICONDESC sid = {0};
+ TCHAR szFilename[MAX_PATH];
+ char iconName[MAXMODULELABELLENGTH + 10];
+ char iconDesc[MAXMODULELABELLENGTH + 10];
+ GetModuleFileName(hInst,szFilename,MAX_PATH);
+
+ sid.cbSize = SKINICONDESC_SIZE;
+ sid.flags = SIDF_PATH_TCHAR;
+ sid.pszSection = "Nudge";
+ sid.ptszDefaultFile = szFilename;
+
+ for(NudgeElementList *n = NudgeList;n != NULL; n = n->next)
+ {
+ sprintf(iconName,"Nudge_%s",n->item.ProtocolName);
+ sid.pszName = iconName;
+ sprintf(iconDesc,"%s %s",Translate("Nudge for"),n->item.ProtocolName);
+ sid.pszDescription = iconDesc;
+ sid.iDefaultIndex = -IDI_NUDGE;
+ sid.hDefaultIcon = LoadIcon(hInst,MAKEINTRESOURCE(IDI_NUDGE));
+ CallService(MS_SKIN2_ADDICON, 0, (LPARAM)&sid);
+
+ n->item.hIcon = (HICON) CallService(MS_SKIN2_GETICON, 0, (LPARAM) iconName);
+ }
+
+ sprintf(iconName,"Nudge_Default");
+ sid.pszName = iconName;
+ sprintf(iconDesc,Translate("Nudge as Default"));
+ sid.pszDescription = iconDesc;
+ sid.iDefaultIndex = -IDI_NUDGE;
+ sid.hDefaultIcon = LoadIcon(hInst,MAKEINTRESOURCE(IDI_NUDGE));
+ g_hIcon = (HANDLE)CallService(MS_SKIN2_ADDICON, 0, (LPARAM)&sid);
+
+ DefaultNudge.hIcon = (HICON) CallService(MS_SKIN2_GETICON, 0, (LPARAM) iconName);
+ }
+ else // Do not forget people not using IcoLib!!!!
+ {
+ for(NudgeElementList *n = NudgeList;n != NULL; n = n->next)
+ {
+ n->item.hIcon = (HICON)CallProtoService(n->item.ProtocolName, PS_LOADICON, PLI_PROTOCOL|PLIF_SMALL, 0);
+ if(n->item.hIcon == NULL || (int)n->item.hIcon == CALLSERVICE_NOTFOUND)
+ n->item.hIcon = (HICON)CallProtoService(n->item.ProtocolName, PS_LOADICON, PLI_PROTOCOL, 0);
+ if(n->item.hIcon == NULL || (int)n->item.hIcon == CALLSERVICE_NOTFOUND)
+ n->item.hIcon = LoadIcon(hInst, MAKEINTRESOURCE(IDI_NUDGE));
+ }
+ DefaultNudge.hIcon = LoadIcon(hInst, MAKEINTRESOURCE(IDI_NUDGE));
+ }
+}
+
+static int LoadChangedIcons(WPARAM wParam, LPARAM lParam)
+{
+ //Load icons
+ if(ServiceExists(MS_SKIN2_ADDICON))
+ {
+ NudgeElementList *n;
+ char iconName[MAXMODULELABELLENGTH + 10];
+
+ for(n = NudgeList;n != NULL; n = n->next)
+ {
+ sprintf(iconName,"Nudge_%s",n->item.ProtocolName);
+ n->item.hIcon = (HICON) CallService(MS_SKIN2_GETICON, 0, (LPARAM) iconName);
+ }
+ sprintf(iconName,"Nudge_Default");
+ DefaultNudge.hIcon = (HICON) CallService(MS_SKIN2_GETICON, 0, (LPARAM) iconName);
+ }
+ return 0;
+}
+
+// Nudge support
+static int TabsrmmButtonPressed(WPARAM wParam, LPARAM lParam)
+{
+ CustomButtonClickData *cbcd=(CustomButtonClickData *)lParam;
+
+ if(!strcmp(cbcd->pszModule,"Nudge"))
+ NudgeSend(wParam, 0);
+
+ return 0;
+}
+
+static int TabsrmmButtonInit(WPARAM wParam, LPARAM lParam)
+{
+ BBButton bbd = {0};
+
+ bbd.cbSize = sizeof(BBButton);
+ bbd.pszModuleName = "Nudge";
+ bbd.ptszTooltip = LPGENT("Nudge");
+ bbd.dwDefPos = 300;
+ bbd.bbbFlags = BBBF_ISIMBUTTON|BBBF_ISLSIDEBUTTON|BBBF_CANBEHIDDEN;
+ bbd.hIcon = g_hIcon;
+ bbd.dwButtonID = 6000;
+ bbd.iButtonWidth = 0;
+ CallService (MS_BB_ADDBUTTON, 0, (LPARAM)&bbd);
+
+ return 0;
+}
+
+void HideNudgeButton(HANDLE hContact)
+{
+ char str[MAXMODULELABELLENGTH + 12] = {0};
+ CONTACTINFO ci = { 0 };
+
+ ci.cbSize = sizeof(ci);
+ ci.hContact = hContact;
+
+ CallService(MS_CONTACT_GETCONTACTINFO, 0, (LPARAM) & ci);
+ mir_snprintf(str,MAXMODULELABELLENGTH + 12,"%s/SendNudge", ci.szProto);
+
+ if (!ServiceExists(str))
+ {
+ BBButton bbd={0};
+ bbd.cbSize=sizeof(BBButton);
+ bbd.bbbFlags=BBSF_HIDDEN|BBSF_DISABLED;
+ bbd.pszModuleName="Nudge";
+ bbd.dwButtonID = 6000;
+ CallService(MS_BB_SETBUTTONSTATE, (WPARAM)hContact, (LPARAM)&bbd);
+ }
+}
+
+static int ContactWindowOpen(WPARAM wparam,LPARAM lParam)
+{
+ MessageWindowEventData *MWeventdata = (MessageWindowEventData*)lParam;
+
+ if(MWeventdata->uType == MSG_WINDOW_EVT_OPENING&&MWeventdata->hContact)
+ {
+ HideNudgeButton(MWeventdata->hContact);
+ }
+ return 0;
+}
+
+int ModulesLoaded(WPARAM,LPARAM)
+{
+ RegisterToUpdate();
+ RegisterToTrigger();
+ RegisterToDbeditorpp();
+ LoadProtocols();
+ LoadIcons();
+ g_hEventToolbarLoaded = HookEvent(ME_MSG_TOOLBARLOADED, TabsrmmButtonInit);
+ if (g_hEventToolbarLoaded)
+ {
+ g_hEventButtonPressed = HookEvent(ME_MSG_BUTTONPRESSED, TabsrmmButtonPressed);
+ g_hEventDbWindowEvent = HookEvent(ME_MSG_WINDOWEVENT,ContactWindowOpen);
+ }
+ return 0;
+}
+
+HANDLE hShakeClist=NULL,hShakeChat=NULL,hNudgeSend=NULL,hNudgeShowMenu=NULL;
+extern "C" int __declspec(dllexport) Load(PLUGINLINK *link)
+{
+ pluginLink = link;
+ mir_getMMI(&mmi);
+ mir_getLP(&pluginInfo);
+ NudgeList = NULL;
+ g_hEventModulesLoaded = HookEvent(ME_SYSTEM_MODULESLOADED,ModulesLoaded);
+ if(ServiceExists(MS_SKIN2_ADDICON))
+ g_hEventIconsChanged = HookEvent(ME_SKIN2_ICONSCHANGED, LoadChangedIcons);
+
+ InitOptions();
+ InitVSApi();
+
+ //Create function for plugins
+ hShakeClist=CreateServiceFunction(MS_SHAKE_CLIST,ShakeClist);
+ hShakeChat=CreateServiceFunction(MS_SHAKE_CHAT,ShakeChat);
+ hNudgeSend=CreateServiceFunction(MS_NUDGE_SEND,NudgeSend);
+ hNudgeShowMenu=CreateServiceFunction(MS_NUDGE_SHOWMENU,NudgeShowMenu);
+ return 0;
+}
+
+extern "C" int __declspec(dllexport) Unload(void)
+{
+ if(g_hEventToolbarLoaded) UnhookEvent(g_hEventToolbarLoaded);
+ if(g_hEventDbWindowEvent) UnhookEvent(g_hEventButtonPressed);
+ if(g_hEventDbWindowEvent) UnhookEvent(g_hEventDbWindowEvent);
+
+ if(g_hEventModulesLoaded) UnhookEvent(g_hEventModulesLoaded);
+ if(g_hEventIconsChanged) UnhookEvent(g_hEventIconsChanged);
+
+ DestroyServiceFunction(hShakeClist);
+ DestroyServiceFunction(hShakeChat);
+ DestroyServiceFunction(hNudgeSend);
+ DestroyServiceFunction(hNudgeShowMenu);
+
+ UninitOptions();
+
+ FreeVSApi();
+ NudgeElementList* p = NudgeList;
+ while ( p != NULL )
+ {
+ if(p->item.hEvent) UnhookEvent(p->item.hEvent);
+ NudgeElementList* p1 = p->next;
+ //free( p );
+ delete p;
+ p = p1;
+ }
+ return 0;
+}
+
+LRESULT CALLBACK NudgePopUpProc(HWND hWnd,UINT msg,WPARAM wParam,LPARAM lParam)
+{
+ switch(msg)
+ {
+ case WM_COMMAND:
+ {
+ HANDLE hContact = PUGetContact(hWnd);
+ CallService(MS_MSG_SENDMESSAGET, (WPARAM)hContact, 0);
+ PUDeletePopUp(hWnd);
+ break;
+ }
+
+ case WM_CONTEXTMENU:
+ PUDeletePopUp(hWnd);
+ break;
+ case UM_FREEPLUGINDATA:
+ //Here we'd free our own data, if we had it.
+ return FALSE;
+ case UM_INITPOPUP:
+ break;
+ case UM_DESTROYPOPUP:
+ break;
+ case WM_NOTIFY:
+ default:
+ break;
+ }
+ return DefWindowProc(hWnd,msg,wParam,lParam);
+}
+
+int Preview()
+{
+ if( GlobalNudge.useByProtocol )
+ {
+ HANDLE hContact = (HANDLE) CallService(MS_DB_CONTACT_FINDFIRST,0,0);
+
+ for(NudgeElementList *n = NudgeList;n != NULL; n = n->next)
+ {
+ if(n->item.enabled)
+ {
+ SkinPlaySound( n->item.NudgeSoundname );
+ if(n->item.showPopup)
+ Nudge_ShowPopup(n->item, hContact, n->item.recText);
+ if(n->item.shakeClist)
+ ShakeClist(0,0);
+ if(n->item.shakeChat)
+ {
+ CallService(MS_MSG_SENDMESSAGET,(WPARAM)hContact,NULL);
+ ShakeChat((WPARAM)hContact,(LPARAM)time(NULL));
+ }
+ }
+ }
+ }
+ else
+ {
+ if(DefaultNudge.enabled)
+ {
+ HANDLE hContact = (HANDLE) CallService(MS_DB_CONTACT_FINDFIRST,0,0);
+
+ SkinPlaySound( DefaultNudge.NudgeSoundname );
+ if(DefaultNudge.showPopup)
+ Nudge_ShowPopup(DefaultNudge, hContact, DefaultNudge.recText);
+ if(DefaultNudge.shakeClist)
+ ShakeClist(0,0);
+ if(DefaultNudge.shakeChat)
+ {
+ CallService(MS_MSG_SENDMESSAGET,(WPARAM)hContact,NULL);
+ ShakeChat((WPARAM)hContact,(LPARAM)time(NULL));
+ }
+ }
+ }
+ return 0;
+}
+
+void Nudge_ShowPopup(CNudgeElement n, HANDLE hCont, TCHAR * Message)
+{
+ HANDLE hContact;
+
+ hContact = Nudge_GethContact(hCont);
+ TCHAR * lpzContactName = (TCHAR*)CallService(MS_CLIST_GETCONTACTDISPLAYNAME,(WPARAM)hContact,GCDNF_TCHAR);
+
+ if(ServiceExists(MS_POPUP_ADDPOPUPT))
+ {
+ POPUPDATAT NudgePopUp;
+
+ if(hContact == NULL) //no contact at all
+ NudgePopUp.lchContact = (HANDLE) &n;
+
+ NudgePopUp.lchContact = hContact;
+ NudgePopUp.lchIcon = n.hIcon;
+ NudgePopUp.colorBack = ! n.popupWindowColor ? n.popupBackColor : GetSysColor(COLOR_BTNFACE);
+ NudgePopUp.colorText = ! n.popupWindowColor ? n.popupTextColor : GetSysColor(COLOR_WINDOWTEXT);
+ NudgePopUp.iSeconds = n.popupTimeSec;
+ NudgePopUp.PluginWindowProc = (WNDPROC)NudgePopUpProc;
+ NudgePopUp.PluginData = (void *)1;
+
+ //lstrcpy(NudgePopUp.lpzText, Translate(Message));
+ lstrcpy(NudgePopUp.lptzText, Message);
+
+ lstrcpy(NudgePopUp.lptzContactName, lpzContactName);
+
+ CallService(MS_POPUP_ADDPOPUPT,(WPARAM)&NudgePopUp,0);
+ }
+ else
+ {
+ MessageBox(NULL,Message,lpzContactName,0);
+ }
+}
+
+BOOL CheckMsgWnd(HANDLE hContact)
+{
+ if (ServiceExists(MS_MSG_GETWINDOWDATA)) // use the new Window API
+ {
+ MessageWindowData mwd;
+ MessageWindowInputData mwid;
+
+ mwid.cbSize = sizeof(MessageWindowInputData);
+ mwid.hContact = Nudge_GethContact(hContact);
+ mwid.uFlags = MSG_WINDOW_UFLAG_MSG_BOTH;
+ mwd.cbSize = sizeof(MessageWindowData);
+ mwd.hContact = Nudge_GethContact(hContact);
+ if (!CallService(MS_MSG_GETWINDOWDATA, (WPARAM)&mwid, (LPARAM)&mwd) && mwd.hwndWindow)
+ return TRUE;
+ }
+
+ return FALSE;
+}
+
+void Nudge_SentEvent(CNudgeElement n, HANDLE hCont)
+{
+ DBEVENTINFO NudgeEvent = { 0 };;
+ HANDLE hContact;
+ HANDLE hMetaContact = NULL;
+
+ hContact = hCont;
+
+ NudgeEvent.cbSize = sizeof(NudgeEvent);
+ NudgeEvent.szModule = (char*)CallService(MS_PROTO_GETCONTACTBASEPROTO, (WPARAM)hContact, 0);
+ NudgeEvent.flags = DBEF_SENT;
+ NudgeEvent.timestamp = ( DWORD )time(NULL);
+ NudgeEvent.eventType = EVENTTYPE_MESSAGE;
+ #if defined( _UNICODE )
+ char buff[TEXT_LEN];
+ WideCharToMultiByte(code_page, 0, n.senText, -1, buff, TEXT_LEN, 0, 0);
+ buff[TEXT_LEN] = 0;
+ NudgeEvent.cbBlob = strlen(buff) + 1;
+ NudgeEvent.pBlob = ( PBYTE ) buff;
+ #else
+ NudgeEvent.cbBlob = _tcsclen(n.senText) + 1;
+ NudgeEvent.pBlob = ( PBYTE ) n.senText;
+ #endif
+
+ if(ServiceExists(MS_MC_GETMETACONTACT)) //try to retrieve the metacontact if some
+ hMetaContact = (HANDLE) CallService( MS_MC_GETMETACONTACT, (WPARAM)hContact, 0 );
+
+ if(hMetaContact != NULL) //metacontact
+ CallService(MS_DB_EVENT_ADD,(WPARAM)hMetaContact,(LPARAM)&NudgeEvent);
+
+ CallService(MS_DB_EVENT_ADD,(WPARAM)hContact,(LPARAM)&NudgeEvent);
+}
+
+void Nudge_SentStatus(CNudgeElement n, HANDLE hCont)
+{
+ DBEVENTINFO NudgeEvent = { 0 };;
+ HANDLE hContact;
+ HANDLE hMetaContact = NULL;
+
+ hContact = hCont;
+
+ NudgeEvent.cbSize = sizeof(NudgeEvent);
+ NudgeEvent.szModule = (char*)CallService(MS_PROTO_GETCONTACTBASEPROTO, (WPARAM)hContact, 0);
+ NudgeEvent.flags = 0;
+ NudgeEvent.timestamp = ( DWORD )time(NULL);
+ NudgeEvent.eventType = EVENTTYPE_STATUSCHANGE;
+ #if defined( _UNICODE )
+ char buff[TEXT_LEN];
+ WideCharToMultiByte(code_page, 0, n.senText, -1, buff, TEXT_LEN, 0, 0);
+ buff[TEXT_LEN] = 0;
+ NudgeEvent.cbBlob = strlen(buff) + 1;
+ NudgeEvent.pBlob = ( PBYTE ) buff;
+ #else
+ NudgeEvent.cbBlob = _tcsclen(n.senText) + 1;
+ NudgeEvent.pBlob = ( PBYTE ) n.senText;
+ #endif
+
+ if(ServiceExists(MS_MC_GETMETACONTACT)) //try to retrieve the metacontact if some
+ hMetaContact = (HANDLE) CallService( MS_MC_GETMETACONTACT, (WPARAM)hContact, 0 );
+
+ if(hMetaContact != NULL) //metacontact
+ CallService(MS_DB_EVENT_ADD,(WPARAM)hMetaContact,(LPARAM)&NudgeEvent);
+
+ CallService(MS_DB_EVENT_ADD,(WPARAM)hContact,(LPARAM)&NudgeEvent);
+}
+
+void Nudge_ShowStatus(CNudgeElement n, HANDLE hCont, DWORD timestamp)
+{
+ DBEVENTINFO NudgeEvent = { 0 };;
+ HANDLE hContact;
+ HANDLE hMetaContact = NULL;
+
+ hContact = hCont;
+
+ NudgeEvent.cbSize = sizeof(NudgeEvent);
+ NudgeEvent.szModule = (char*)CallService(MS_PROTO_GETCONTACTBASEPROTO, (WPARAM)hContact, 0);
+ NudgeEvent.flags = 0;
+ NudgeEvent.timestamp = timestamp;
+ NudgeEvent.eventType = EVENTTYPE_STATUSCHANGE;
+ #if defined( _UNICODE )
+ char buff[TEXT_LEN];
+ WideCharToMultiByte(code_page, 0, n.recText, -1, buff, TEXT_LEN, 0, 0);
+ buff[TEXT_LEN] = 0;
+ NudgeEvent.cbBlob = strlen(buff) + 1;
+ NudgeEvent.pBlob = ( PBYTE ) buff;
+ #else
+ NudgeEvent.cbBlob = _tcsclen(n.recText) + 1;
+ NudgeEvent.pBlob = ( PBYTE ) n.recText;
+ #endif
+
+ if(ServiceExists(MS_MC_GETMETACONTACT)) //try to retrieve the metacontact if some
+ hMetaContact = (HANDLE) CallService( MS_MC_GETMETACONTACT, (WPARAM)hContact, 0 );
+
+ if(hMetaContact != NULL) //metacontact
+ {
+ CallService(MS_DB_EVENT_ADD,(WPARAM)hMetaContact,(LPARAM)&NudgeEvent);
+ NudgeEvent.flags = DBEF_READ;
+ }
+
+ CallService(MS_DB_EVENT_ADD,(WPARAM)hContact,(LPARAM)&NudgeEvent);
+}
+
+void Nudge_ShowEvent(CNudgeElement n, HANDLE hCont, DWORD timestamp)
+{
+ DBEVENTINFO NudgeEvent = { 0 };
+ HANDLE hContact;
+ HANDLE hMetaContact = NULL;
+
+ hContact = hCont;
+
+ NudgeEvent.cbSize = sizeof(NudgeEvent);
+ NudgeEvent.szModule = (char*)CallService(MS_PROTO_GETCONTACTBASEPROTO, (WPARAM)hContact, 0);
+ NudgeEvent.flags = CheckMsgWnd(hContact) ? DBEF_READ : 0;
+ NudgeEvent.timestamp = timestamp;
+ NudgeEvent.eventType = EVENTTYPE_MESSAGE;
+ #if defined( _UNICODE )
+ char buff[TEXT_LEN];
+ WideCharToMultiByte(code_page, 0, n.recText, -1, buff, TEXT_LEN, 0, 0);
+ buff[TEXT_LEN] = 0;
+ NudgeEvent.cbBlob = strlen(buff) + 1;
+ NudgeEvent.pBlob = ( PBYTE ) buff;
+ #else
+ NudgeEvent.cbBlob = _tcsclen(n.recText) + 1;
+ NudgeEvent.pBlob = ( PBYTE ) n.recText;
+ #endif
+
+
+ if(ServiceExists(MS_MC_GETMETACONTACT)) //try to retrieve the metacontact if some
+ hMetaContact = (HANDLE) CallService( MS_MC_GETMETACONTACT, (WPARAM)hContact, 0 );
+
+ if(hMetaContact != NULL) //metacontact
+ {
+ CallService(MS_DB_EVENT_ADD,(WPARAM)hMetaContact,(LPARAM)&NudgeEvent);
+ NudgeEvent.flags = DBEF_READ;
+ }
+
+ CallService(MS_DB_EVENT_ADD,(WPARAM)hContact,(LPARAM)&NudgeEvent);
+}
+
+int Nudge_AddElement(char *protoName, HANDLE hevent)
+{
+ nProtocol ++;
+ //Add contact menu entry
+ CLISTMENUITEM mi;
+
+ memset( &mi, 0, sizeof( mi ));
+ mi.popupPosition = 500085000;
+ mi.pszContactOwner = protoName;
+ mi.pszPopupName = protoName;
+ mi.cbSize = sizeof( mi );
+ mi.flags = (CMIF_NOTOFFLINE & CMIF_HIDDEN) | CMIF_TCHAR;
+ mi.position = -500050004;
+ mi.hIcon = LoadIcon( hInst, MAKEINTRESOURCE( IDI_NUDGE ));
+ mi.ptszName = LPGENT( "Send &Nudge" );
+ mi.pszService = MS_NUDGE_SEND;
+
+
+ //Add a specific sound per protocol
+ char nudgesoundtemp[ 512 ];
+ NudgeElementList *newNudge;
+ //newNudge = (NudgeElementList*) malloc(sizeof(NudgeElementList));
+ newNudge = new NudgeElementList;
+ strcpy( nudgesoundtemp, protoName );
+ strcat( nudgesoundtemp, ": " );
+ strcat( nudgesoundtemp, Translate( "Nudge" ));
+ strncpy( newNudge->item.NudgeSoundname, nudgesoundtemp, sizeof(newNudge->item.NudgeSoundname) );
+
+ strcpy( newNudge->item.ProtocolName, protoName );
+
+ newNudge->item.hContactMenu = (HANDLE) CallService( MS_CLIST_ADDCONTACTMENUITEM, 0, ( LPARAM )&mi );
+
+ newNudge->item.Load();
+
+ newNudge->item.hEvent = hevent;
+
+ SkinAddNewSoundEx( newNudge->item.NudgeSoundname, LPGEN("Nudge") , newNudge->item.NudgeSoundname);
+
+ newNudge->next = NudgeList;
+ NudgeList = newNudge;
+
+ return 0;
+}
+
+HANDLE Nudge_GethContact(HANDLE hCont)
+{
+ HANDLE hContact;
+ hContact = hCont;
+
+ if(ServiceExists(MS_MC_GETMETACONTACT)) //try to retrieve the metacontact if some
+ hContact = (HANDLE) CallService( MS_MC_GETMETACONTACT, (WPARAM)hContact, 0 );
+
+ if(hContact == NULL) //no metacontact
+ hContact = hCont;
+
+ return hContact;
+}
+
+void AutoResendNudge(void *wParam)
+{
+
+ Sleep(GlobalNudge.resendDelaySec * 1000);
+ NudgeSend((WPARAM) wParam,NULL);
+}
diff --git a/Nudge/main.h b/Nudge/main.h
new file mode 100644
index 0000000..74cbc9a
--- /dev/null
+++ b/Nudge/main.h
@@ -0,0 +1,96 @@
+#include "nudge.h"
+
+/*
+*
+****************************/
+void RegisterToUpdate(void);
+
+/*
+*
+****************************/
+void RegisterToTrigger(void);
+
+/*
+*
+****************************/
+void LoadProtocols(void);
+
+/*
+*
+****************************/
+void LoadIcons(void);
+
+/*
+*
+****************************/
+static int LoadChangedIcons(WPARAM, LPARAM);
+
+/*
+*
+****************************/
+DWORD WINAPI ShakeClistWindow(LPVOID);
+
+/*
+*
+****************************/
+DWORD WINAPI ShakeChatWindow(LPVOID);
+
+/*
+*
+****************************/
+int ModulesLoaded(WPARAM,LPARAM);
+
+/*
+*
+****************************/
+void Nudge_ShowPopup(CNudgeElement, HANDLE, TCHAR *);
+
+/*
+*
+****************************/
+void Nudge_ShowEvent(CNudgeElement, HANDLE, DWORD timestamp);
+
+/*
+*
+****************************/
+void Nudge_SentEvent(CNudgeElement, HANDLE);
+
+/*
+*
+****************************/
+void Nudge_ShowStatus(CNudgeElement, HANDLE, DWORD timestamp);
+
+/*
+*
+****************************/
+void Nudge_SentStatus(CNudgeElement, HANDLE);
+
+/*
+*
+****************************/
+int Nudge_AddElement(char*, HANDLE);
+
+/*
+*
+****************************/
+int FreeVSApi();
+
+/*
+*
+****************************/
+int InitVSApi();
+
+/*
+*
+****************************/
+int TriggerActionRecv( DWORD actionID, REPORTINFO *ri);
+
+/*
+*
+****************************/
+int TriggerActionSend( DWORD actionID, REPORTINFO *ri);
+
+/*
+*
+****************************/
+void AutoResendNudge(void *wParam) ; \ No newline at end of file
diff --git a/Nudge/miranda.ico b/Nudge/miranda.ico
new file mode 100644
index 0000000..4fba0d4
--- /dev/null
+++ b/Nudge/miranda.ico
Binary files differ
diff --git a/Nudge/nudge.cpp b/Nudge/nudge.cpp
new file mode 100644
index 0000000..9455ec6
--- /dev/null
+++ b/Nudge/nudge.cpp
@@ -0,0 +1,135 @@
+#include "headers.h"
+#include "nudge.h"
+
+void CNudge::Save(void)
+{
+ char SectionName[512];
+ mir_snprintf(SectionName,512,"useByProtocol");
+ DBWriteContactSettingByte(NULL, "Nudge", SectionName, this->useByProtocol);
+ mir_snprintf(SectionName,512,"RecvTimeSec");
+ DBWriteContactSettingDword(NULL, "Nudge", SectionName, this->recvTimeSec);
+ mir_snprintf(SectionName,512,"SendTimeSec");
+ DBWriteContactSettingDword(NULL, "Nudge", SectionName, this->sendTimeSec);
+ mir_snprintf(SectionName,512,"ResendDelaySec");
+ DBWriteContactSettingDword(NULL, "Nudge", SectionName, this->resendDelaySec);
+}
+
+
+void CNudge::Load(void)
+{
+ char SectionName[512];
+ mir_snprintf(SectionName,512,"useByProtocol");
+ this->useByProtocol = DBGetContactSettingByte(NULL, "Nudge", SectionName, FALSE) != 0;
+ mir_snprintf(SectionName,512,"RecvTimeSec");
+ this->recvTimeSec = DBGetContactSettingDword(NULL, "Nudge", SectionName, 30);
+ mir_snprintf(SectionName,512,"SendTimeSec");
+ this->sendTimeSec = DBGetContactSettingDword(NULL, "Nudge", SectionName, 30);
+ mir_snprintf(SectionName,512,"ResendDelaySec");
+ this->resendDelaySec = DBGetContactSettingDword(NULL, "Nudge", SectionName, 3);
+}
+
+int CNudgeElement::ShowContactMenu(bool show)
+{
+
+ CLISTMENUITEM mi;
+ memset( &mi, 0, sizeof( mi ));
+ mi.cbSize = sizeof( mi );
+ mi.flags = show? CMIM_FLAGS : CMIM_FLAGS | CMIF_HIDDEN ;
+ CallService(MS_CLIST_MODIFYMENUITEM, (WPARAM)hContactMenu, (LPARAM)&mi);
+
+ return 0;
+}
+
+void CNudgeElement::Save(void)
+{
+ char SectionName[512];
+ mir_snprintf(SectionName,512,"%s-popupBackColor", ProtocolName);
+ DBWriteContactSettingDword(NULL, "Nudge", SectionName, this->popupBackColor);
+ mir_snprintf(SectionName,512,"%s-popupTextColor", ProtocolName);
+ DBWriteContactSettingDword(NULL, "Nudge", SectionName, this->popupTextColor);
+ mir_snprintf(SectionName,512,"%s-popupTimeSec", ProtocolName);
+ DBWriteContactSettingDword(NULL, "Nudge", SectionName, this->popupTimeSec);
+ mir_snprintf(SectionName,512,"%s-popupWindowColor", ProtocolName);
+ DBWriteContactSettingByte(NULL, "Nudge", SectionName, this->popupWindowColor);
+ mir_snprintf(SectionName,512,"%s-showEvent", ProtocolName);
+ DBWriteContactSettingByte(NULL, "Nudge", SectionName, this->showEvent);
+ mir_snprintf(SectionName,512,"%s-showStatus", ProtocolName);
+ DBWriteContactSettingByte(NULL, "Nudge", SectionName, this->showStatus);
+ mir_snprintf(SectionName,512,"%s-showPopup", ProtocolName);
+ DBWriteContactSettingByte(NULL, "Nudge", SectionName, this->showPopup);
+ mir_snprintf(SectionName,512,"%s-shakeClist", ProtocolName);
+ DBWriteContactSettingByte(NULL, "Nudge", SectionName, this->shakeClist);
+ mir_snprintf(SectionName,512,"%s-shakeChat", ProtocolName);
+ DBWriteContactSettingByte(NULL, "Nudge", SectionName, this->shakeChat);
+ mir_snprintf(SectionName,512,"%s-enabled", ProtocolName);
+ DBWriteContactSettingByte(NULL, "Nudge", SectionName, this->enabled);
+ mir_snprintf(SectionName,512,"%s-autoResend", ProtocolName);
+ DBWriteContactSettingByte(NULL, "Nudge", SectionName, this->autoResend);
+ mir_snprintf(SectionName,512,"%s-statusFlags", ProtocolName);
+ DBWriteContactSettingDword(NULL, "Nudge", SectionName, this->statusFlags);
+ mir_snprintf(SectionName,512,"%s-recText", ProtocolName);
+ if(DBWriteContactSettingTString(NULL, "Nudge", SectionName, this->recText)) {
+ #if defined( _UNICODE )
+ char buff[TEXT_LEN];
+ WideCharToMultiByte(code_page, 0, this->recText, -1, buff, TEXT_LEN, 0, 0);
+ buff[TEXT_LEN] = 0;
+ DBWriteContactSettingString(0, "Nudge", SectionName, buff);
+ #endif
+ }
+ mir_snprintf(SectionName,512,"%s-senText", ProtocolName);
+ if(DBWriteContactSettingTString(NULL, "Nudge", SectionName, this->senText)) {
+ #if defined( _UNICODE )
+ char buff[TEXT_LEN];
+ WideCharToMultiByte(code_page, 0, this->senText, -1, buff, TEXT_LEN, 0, 0);
+ buff[TEXT_LEN] = 0;
+ DBWriteContactSettingString(0, "Nudge", SectionName, buff);
+ #endif
+ }
+}
+
+
+void CNudgeElement::Load(void)
+{
+ DBVARIANT dbv;
+ char SectionName[512];
+ mir_snprintf(SectionName,512,"%s-popupBackColor", ProtocolName);
+ this->popupBackColor = DBGetContactSettingDword(NULL, "Nudge", SectionName, GetSysColor(COLOR_BTNFACE));
+ mir_snprintf(SectionName,512,"%s-popupTextColor", ProtocolName);
+ this->popupTextColor = DBGetContactSettingDword(NULL, "Nudge", SectionName, GetSysColor(COLOR_WINDOWTEXT));
+ mir_snprintf(SectionName,512,"%s-popupTimeSec", ProtocolName);
+ this->popupTimeSec = DBGetContactSettingDword(NULL, "Nudge", SectionName, 4);
+ mir_snprintf(SectionName,512,"%s-popupWindowColor", ProtocolName);
+ this->popupWindowColor = DBGetContactSettingByte(NULL, "Nudge", SectionName, TRUE) != 0;
+ mir_snprintf(SectionName,512,"%s-showEvent", ProtocolName);
+ this->showEvent = DBGetContactSettingByte(NULL, "Nudge", SectionName, TRUE) != 0;
+ mir_snprintf(SectionName,512,"%s-showStatus", ProtocolName);
+ this->showStatus = DBGetContactSettingByte(NULL, "Nudge", SectionName, TRUE) != 0;
+ mir_snprintf(SectionName,512,"%s-showPopup", ProtocolName);
+ this->showPopup = DBGetContactSettingByte(NULL, "Nudge", SectionName, TRUE) != 0;
+ mir_snprintf(SectionName,512,"%s-shakeClist", ProtocolName);
+ this->shakeClist = DBGetContactSettingByte(NULL, "Nudge", SectionName, TRUE) != 0;
+ mir_snprintf(SectionName,512,"%s-shakeChat", ProtocolName);
+ this->shakeChat = DBGetContactSettingByte(NULL, "Nudge", SectionName, TRUE) != 0;
+ mir_snprintf(SectionName,512,"%s-enabled", ProtocolName);
+ this->enabled = DBGetContactSettingByte(NULL, "Nudge", SectionName, TRUE) != 0;
+ mir_snprintf(SectionName,512,"%s-autoResend", ProtocolName);
+ this->autoResend = DBGetContactSettingByte(NULL, "Nudge", SectionName, FALSE) != 0;
+ mir_snprintf(SectionName,512,"%s-statusFlags", ProtocolName);
+ this->statusFlags = DBGetContactSettingDword(NULL, "Nudge", SectionName, 967);
+ mir_snprintf(SectionName,512,"%s-recText", ProtocolName);
+ if(!DBGetContactSettingTString(NULL,"Nudge",SectionName,&dbv))
+ {
+ _tcsncpy(this->recText,dbv.ptszVal,TEXT_LEN);
+ if(_tcsclen(this->recText) < 1)
+ _tcsncpy(this->recText,TranslateT("You received a nudge"),TEXT_LEN);
+ DBFreeVariant(&dbv);
+ }
+ mir_snprintf(SectionName,512,"%s-senText", ProtocolName);
+ if(!DBGetContactSettingTString(NULL,"Nudge",SectionName,&dbv))
+ {
+ _tcsncpy(this->senText,dbv.ptszVal,TEXT_LEN);
+ if(_tcsclen(this->senText) < 1)
+ _tcsncpy(this->senText,TranslateT("You sent a nudge"),TEXT_LEN);
+ DBFreeVariant(&dbv);
+ }
+} \ No newline at end of file
diff --git a/Nudge/nudge.dsp b/Nudge/nudge.dsp
new file mode 100644
index 0000000..ab46397
--- /dev/null
+++ b/Nudge/nudge.dsp
@@ -0,0 +1,241 @@
+# Microsoft Developer Studio Project File - Name="nudge" - Package Owner=<4>
+# Microsoft Developer Studio Generated Build File, Format Version 6.00
+# ** DO NOT EDIT **
+
+# TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102
+
+CFG=nudge - Win32 Debug Unicode
+!MESSAGE This is not a valid makefile. To build this project using NMAKE,
+!MESSAGE use the Export Makefile command and run
+!MESSAGE
+!MESSAGE NMAKE /f "nudge.mak".
+!MESSAGE
+!MESSAGE You can specify a configuration when running NMAKE
+!MESSAGE by defining the macro CFG on the command line. For example:
+!MESSAGE
+!MESSAGE NMAKE /f "nudge.mak" CFG="nudge - Win32 Debug Unicode"
+!MESSAGE
+!MESSAGE Possible choices for configuration are:
+!MESSAGE
+!MESSAGE "nudge - Win32 Release" (based on "Win32 (x86) Dynamic-Link Library")
+!MESSAGE "nudge - Win32 Debug" (based on "Win32 (x86) Dynamic-Link Library")
+!MESSAGE "nudge - Win32 Release Unicode" (based on "Win32 (x86) Dynamic-Link Library")
+!MESSAGE "nudge - Win32 Debug Unicode" (based on "Win32 (x86) Dynamic-Link Library")
+!MESSAGE
+
+# Begin Project
+# PROP AllowPerConfigDependencies 0
+# PROP Scc_ProjName ""
+# PROP Scc_LocalPath ""
+CPP=cl.exe
+MTL=midl.exe
+RSC=rc.exe
+
+!IF "$(CFG)" == "nudge - Win32 Release"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir "Release"
+# PROP BASE Intermediate_Dir "Release"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir "Release"
+# PROP Intermediate_Dir "Release"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /MT /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "nudge_EXPORTS" /YX /FD /c
+# ADD CPP /nologo /MT /W3 /GX /O2 /I "../../include" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "nudge_EXPORTS" /FR /YX /FD /c
+# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32
+# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32
+# ADD BASE RSC /l 0x402 /d "NDEBUG"
+# ADD RSC /l 0x409 /d "NDEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LINK32=link.exe
+# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /machine:I386
+# ADD LINK32 msvcrt.lib kernel32.lib user32.lib gdi32.lib shell32.lib comdlg32.lib comctl32.lib /nologo /dll /debug /machine:I386 /nodefaultlib /out:"../../bin/release ansi/plugins/nudge.dll"
+
+!ELSEIF "$(CFG)" == "nudge - Win32 Debug"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir "Debug"
+# PROP BASE Intermediate_Dir "Debug"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir "Debug"
+# PROP Intermediate_Dir "Debug"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /MTd /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "nudge_EXPORTS" /YX /FD /GZ /c
+# ADD CPP /nologo /MTd /W3 /Gm /GX /ZI /Od /I "../../include" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "nudge_EXPORTS" /FR /YX /FD /GZ /c
+# ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /win32
+# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32
+# ADD BASE RSC /l 0x402 /d "_DEBUG"
+# ADD RSC /l 0x409 /d "_DEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LINK32=link.exe
+# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /debug /machine:I386 /pdbtype:sept
+# ADD LINK32 kernel32.lib user32.lib gdi32.lib shell32.lib comdlg32.lib comctl32.lib /nologo /dll /debug /machine:I386 /pdbtype:sept
+
+!ELSEIF "$(CFG)" == "nudge - Win32 Release Unicode"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir "nudge___Win32_Release_Unicode"
+# PROP BASE Intermediate_Dir "nudge___Win32_Release_Unicode"
+# PROP BASE Ignore_Export_Lib 0
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir "Release_Unicode"
+# PROP Intermediate_Dir "Release_Unicode"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /MT /W3 /GX /O2 /I "../../../include" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "nudge_EXPORTS" /D "_UNICODE" /D "UNICODE" /FR /YX /FD /c
+# ADD CPP /nologo /MT /W3 /GX /O2 /I "../../include" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "nudge_EXPORTS" /D "_UNICODE" /D "UNICODE" /FR /YX /FD /c
+# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32
+# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32
+# ADD BASE RSC /l 0x409 /d "NDEBUG"
+# ADD RSC /l 0x409 /d "NDEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LINK32=link.exe
+# ADD BASE LINK32 ws2_32.lib kernel32.lib user32.lib shell32.lib msvcrt.lib comdlg32.lib gdi32.lib comctl32.lib /nologo /dll /debug /machine:I386 /nodefaultlib /out:"../../bin/release/plugins/nudge.dll"
+# ADD LINK32 msvcrt.lib kernel32.lib user32.lib gdi32.lib shell32.lib comdlg32.lib comctl32.lib /nologo /dll /debug /machine:I386 /nodefaultlib /out:"../../bin/release/plugins/nudge.dll"
+
+!ELSEIF "$(CFG)" == "nudge - Win32 Debug Unicode"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir "nudge___Win32_Debug_Unicode"
+# PROP BASE Intermediate_Dir "nudge___Win32_Debug_Unicode"
+# PROP BASE Ignore_Export_Lib 0
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir "Debug_Unicode"
+# PROP Intermediate_Dir "Debug_Unicode"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /MTd /W3 /Gm /GX /ZI /Od /I "../../../include" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "nudge_EXPORTS" /FR /YX /FD /GZ /c
+# ADD CPP /nologo /MTd /W3 /Gm /GX /ZI /Od /I "../../include" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "nudge_EXPORTS" /FR /YX /FD /GZ /c
+# ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /win32
+# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32
+# ADD BASE RSC /l 0x409 /d "_DEBUG"
+# ADD RSC /l 0x409 /d "_DEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LINK32=link.exe
+# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /debug /machine:I386 /pdbtype:sept
+# ADD LINK32 kernel32.lib user32.lib gdi32.lib shell32.lib comdlg32.lib comctl32.lib /nologo /dll /debug /machine:I386 /pdbtype:sept
+
+!ENDIF
+
+# Begin Target
+
+# Name "nudge - Win32 Release"
+# Name "nudge - Win32 Debug"
+# Name "nudge - Win32 Release Unicode"
+# Name "nudge - Win32 Debug Unicode"
+# Begin Group "Source Files"
+
+# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
+# Begin Source File
+
+SOURCE=.\main.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=.\nudge.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=.\options.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=.\shake.cpp
+# End Source File
+# End Group
+# Begin Group "Header Files"
+
+# PROP Default_Filter "h;hpp;hxx;hm;inl"
+# Begin Source File
+
+SOURCE=.\headers.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\m_nudge.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\main.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\nudge.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\options.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\shake.h
+# End Source File
+# End Group
+# Begin Group "Resource Files"
+
+# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe"
+# Begin Source File
+
+SOURCE=.\miranda.ico
+# End Source File
+# Begin Source File
+
+SOURCE=.\nudge.ico
+# End Source File
+# Begin Source File
+
+SOURCE=.\resources\Nudge.ico
+# End Source File
+# Begin Source File
+
+SOURCE=.\resources\NudgeIRC.ico
+# End Source File
+# Begin Source File
+
+SOURCE=.\resources\NudgeMeta.ico
+# End Source File
+# Begin Source File
+
+SOURCE=.\resources\NudgeMSN.ico
+# End Source File
+# Begin Source File
+
+SOURCE=.\resources\NudgeTlen.ico
+# End Source File
+# Begin Source File
+
+SOURCE=.\resources\NudgeYahoo.ico
+# End Source File
+# Begin Source File
+
+SOURCE=.\resource.rc
+# End Source File
+# End Group
+# Begin Source File
+
+SOURCE=.\ChangeLog.txt
+# End Source File
+# End Target
+# End Project
diff --git a/Nudge/nudge.dsw b/Nudge/nudge.dsw
new file mode 100644
index 0000000..48fb8f2
--- /dev/null
+++ b/Nudge/nudge.dsw
@@ -0,0 +1,29 @@
+Microsoft Developer Studio Workspace File, Format Version 6.00
+# WARNING: DO NOT EDIT OR DELETE THIS WORKSPACE FILE!
+
+###############################################################################
+
+Project: "nudge"="nudge.dsp" - Package Owner=<4>
+
+Package=<5>
+{{{
+}}}
+
+Package=<4>
+{{{
+}}}
+
+###############################################################################
+
+Global:
+
+Package=<5>
+{{{
+}}}
+
+Package=<3>
+{{{
+}}}
+
+###############################################################################
+
diff --git a/Nudge/nudge.h b/Nudge/nudge.h
new file mode 100644
index 0000000..c1e6c70
--- /dev/null
+++ b/Nudge/nudge.h
@@ -0,0 +1,72 @@
+#ifndef NUDGE_H
+#define NUDGE_H
+
+
+
+static int code_page = CP_ACP;
+
+// NUDGE account status flags
+#define NUDGE_ACC_ST0 0x00000001 //Check (countdown) when Offline
+#define NUDGE_ACC_ST1 0x00000002 //Check (countdown) when Online
+#define NUDGE_ACC_ST2 0x00000004 //Check (countdown) when Away
+#define NUDGE_ACC_ST3 0x00000008 //Check (countdown) when N/A
+#define NUDGE_ACC_ST4 0x00000010 //Check (countdown) when Occupied
+#define NUDGE_ACC_ST5 0x00000020 //Check (countdown) when DND
+#define NUDGE_ACC_ST6 0x00000040 //Check (countdown) when Free for chat
+#define NUDGE_ACC_ST7 0x00000080 //Check (countdown) when Invisible
+#define NUDGE_ACC_ST8 0x00000100 //Check (countdown) when On the phone
+#define NUDGE_ACC_ST9 0x00000200 //Check (countdown) when Out to lunch
+
+// For status log
+#define EVENTTYPE_STATUSCHANGE 25368
+
+#define TEXT_LEN 1024
+
+class CNudge
+{
+public:
+ bool useByProtocol;
+ int sendTimeSec;
+ int recvTimeSec;
+ int resendDelaySec;
+
+ void Load(void);
+ void Save(void);
+};
+
+class CNudgeElement
+{
+public:
+ char ProtocolName[64];
+ char NudgeSoundname[100];
+ TCHAR recText[TEXT_LEN];
+ TCHAR senText[TEXT_LEN];
+ bool showPopup;
+ bool showEvent;
+ bool showStatus;
+ bool popupWindowColor;
+ bool shakeClist;
+ bool shakeChat;
+ bool enabled;
+ bool autoResend;
+ DWORD statusFlags;
+ unsigned int popupBackColor;
+ unsigned int popupTextColor;
+ int popupTimeSec;
+ int iProtoNumber;
+ HICON hIcon;
+ HANDLE hEvent;
+ HANDLE hContactMenu;
+
+ void Load(void);
+ void Save(void);
+ int ShowContactMenu(bool show);
+};
+
+typedef struct NudgeElementList
+{
+ CNudgeElement item;
+ NudgeElementList *next;
+} NUDGEELEMENTLIST;
+
+#endif \ No newline at end of file
diff --git a/Nudge/nudge.vcproj b/Nudge/nudge.vcproj
new file mode 100644
index 0000000..3ddce10
--- /dev/null
+++ b/Nudge/nudge.vcproj
@@ -0,0 +1,353 @@
+<?xml version="1.0" encoding="windows-1251"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="9.00"
+ Name="nudge"
+ ProjectGUID="{8190CFAA-3B73-43D8-9101-8368E21F1864}"
+ RootNamespace="nudge"
+ TargetFrameworkVersion="131072"
+ >
+ <Platforms>
+ <Platform
+ Name="Win32"
+ />
+ </Platforms>
+ <ToolFiles>
+ </ToolFiles>
+ <Configurations>
+ <Configuration
+ Name="Debug|Win32"
+ OutputDirectory="../../bin7/Debug/Plugins"
+ IntermediateDirectory="../../bin7/Debug/Obj/$(ProjectName)"
+ ConfigurationType="2"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ UseOfMFC="0"
+ ATLMinimizesCRunTimeLibraryUsage="false"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ PreprocessorDefinitions="_DEBUG"
+ MkTypLibCompatible="true"
+ SuppressStartupBanner="true"
+ TargetEnvironment="1"
+ TypeLibraryName=".\Debug/nudge.tlb"
+ HeaderFileName=""
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories="../../../include"
+ PreprocessorDefinitions="WIN32;_DEBUG;_WINDOWS;_USRDLL;nudge_EXPORTS"
+ BasicRuntimeChecks="3"
+ RuntimeLibrary="3"
+ UsePrecompiledHeader="0"
+ BrowseInformation="1"
+ WarningLevel="3"
+ SuppressStartupBanner="true"
+ DebugInformationFormat="4"
+ CompileAs="0"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ PreprocessorDefinitions="_DEBUG"
+ Culture="2060"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ LinkIncremental="0"
+ SuppressStartupBanner="true"
+ GenerateDebugInformation="true"
+ ProgramDatabaseFile=".\Debug/nudge.pdb"
+ RandomizedBaseAddress="1"
+ DataExecutionPrevention="0"
+ ImportLibrary=".\Debug/nudge.lib"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release Unicode|Win32"
+ OutputDirectory="../../tweety_bin9/Release Unicode/Plugins"
+ IntermediateDirectory="../../tweety_bin9/Release Unicode/Obj/$(ProjectName)"
+ ConfigurationType="2"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ UseOfMFC="0"
+ ATLMinimizesCRunTimeLibraryUsage="false"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ PreprocessorDefinitions="NDEBUG"
+ MkTypLibCompatible="true"
+ SuppressStartupBanner="true"
+ TargetEnvironment="1"
+ TypeLibraryName=".\Release/nudge.tlb"
+ HeaderFileName=""
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="3"
+ InlineFunctionExpansion="1"
+ FavorSizeOrSpeed="2"
+ OmitFramePointers="true"
+ AdditionalIncludeDirectories="../../../include"
+ PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS;_USRDLL;nudge_EXPORTS"
+ StringPooling="true"
+ RuntimeLibrary="2"
+ EnableFunctionLevelLinking="true"
+ UsePrecompiledHeader="0"
+ BrowseInformation="1"
+ WarningLevel="3"
+ SuppressStartupBanner="true"
+ CompileAs="0"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ PreprocessorDefinitions="NDEBUG"
+ Culture="2060"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="comctl32.lib Delayimp.lib gdiplus.lib version.lib"
+ LinkIncremental="1"
+ SuppressStartupBanner="true"
+ IgnoreAllDefaultLibraries="false"
+ DelayLoadDLLs=""
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ OptimizeForWindows98="1"
+ RandomizedBaseAddress="1"
+ DataExecutionPrevention="0"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <Filter
+ Name="Source Files"
+ Filter="cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
+ >
+ <File
+ RelativePath="main.cpp"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions="WIN32;_DEBUG;_WINDOWS;_MBCS;_USRDLL;nudge_EXPORTS;$(NoInherit)"
+ BasicRuntimeChecks="3"
+ BrowseInformation="1"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release Unicode|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS;_MBCS;_USRDLL;nudge_EXPORTS;$(NoInherit)"
+ BrowseInformation="1"
+ />
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath=".\nudge.cpp"
+ >
+ </File>
+ <File
+ RelativePath="options.cpp"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions="WIN32;_DEBUG;_WINDOWS;_MBCS;_USRDLL;nudge_EXPORTS;$(NoInherit)"
+ BasicRuntimeChecks="3"
+ BrowseInformation="1"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release Unicode|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS;_MBCS;_USRDLL;nudge_EXPORTS;$(NoInherit)"
+ BrowseInformation="1"
+ />
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath="shake.cpp"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions="WIN32;_DEBUG;_WINDOWS;_MBCS;_USRDLL;nudge_EXPORTS;$(NoInherit)"
+ BasicRuntimeChecks="3"
+ BrowseInformation="1"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release Unicode|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS;_MBCS;_USRDLL;nudge_EXPORTS;$(NoInherit)"
+ BrowseInformation="1"
+ />
+ </FileConfiguration>
+ </File>
+ </Filter>
+ <Filter
+ Name="Header Files"
+ Filter="h;hpp;hxx;hm;inl"
+ >
+ <File
+ RelativePath="headers.h"
+ >
+ </File>
+ <File
+ RelativePath="m_nudge.h"
+ >
+ </File>
+ <File
+ RelativePath="main.h"
+ >
+ </File>
+ <File
+ RelativePath=".\nudge.h"
+ >
+ </File>
+ <File
+ RelativePath=".\options.h"
+ >
+ </File>
+ <File
+ RelativePath=".\resource.h"
+ >
+ </File>
+ <File
+ RelativePath="shake.h"
+ >
+ </File>
+ </Filter>
+ <Filter
+ Name="Resource Files"
+ Filter="ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe"
+ >
+ <File
+ RelativePath="miranda.ico"
+ >
+ </File>
+ <File
+ RelativePath=".\nudge.ico"
+ >
+ </File>
+ <File
+ RelativePath="resource.rc"
+ >
+ </File>
+ </Filter>
+ <File
+ RelativePath=".\ChangeLog.txt"
+ >
+ </File>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>
diff --git a/Nudge/nudge_10.sln b/Nudge/nudge_10.sln
new file mode 100644
index 0000000..3ed9647
--- /dev/null
+++ b/Nudge/nudge_10.sln
@@ -0,0 +1,31 @@
+Microsoft Visual Studio Solution File, Format Version 11.00
+# Visual C++ Express 2010
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "nudge", "nudge_10.vcxproj", "{8190CFAA-3B73-43D8-9101-8368E21F1864}"
+EndProject
+Global
+ GlobalSection(SolutionConfigurationPlatforms) = preSolution
+ Debug|Win32 = Debug|Win32
+ Debug|x64 = Debug|x64
+ Release Unicode|Win32 = Release Unicode|Win32
+ Release Unicode|x64 = Release Unicode|x64
+ Release|Win32 = Release|Win32
+ Release|x64 = Release|x64
+ EndGlobalSection
+ GlobalSection(ProjectConfigurationPlatforms) = postSolution
+ {8190CFAA-3B73-43D8-9101-8368E21F1864}.Debug|Win32.ActiveCfg = Debug|Win32
+ {8190CFAA-3B73-43D8-9101-8368E21F1864}.Debug|Win32.Build.0 = Debug|Win32
+ {8190CFAA-3B73-43D8-9101-8368E21F1864}.Debug|x64.ActiveCfg = Debug|x64
+ {8190CFAA-3B73-43D8-9101-8368E21F1864}.Debug|x64.Build.0 = Debug|x64
+ {8190CFAA-3B73-43D8-9101-8368E21F1864}.Release Unicode|Win32.ActiveCfg = Release Unicode|Win32
+ {8190CFAA-3B73-43D8-9101-8368E21F1864}.Release Unicode|Win32.Build.0 = Release Unicode|Win32
+ {8190CFAA-3B73-43D8-9101-8368E21F1864}.Release Unicode|x64.ActiveCfg = Release Unicode|x64
+ {8190CFAA-3B73-43D8-9101-8368E21F1864}.Release Unicode|x64.Build.0 = Release Unicode|x64
+ {8190CFAA-3B73-43D8-9101-8368E21F1864}.Release|Win32.ActiveCfg = Release|Win32
+ {8190CFAA-3B73-43D8-9101-8368E21F1864}.Release|Win32.Build.0 = Release|Win32
+ {8190CFAA-3B73-43D8-9101-8368E21F1864}.Release|x64.ActiveCfg = Release|x64
+ {8190CFAA-3B73-43D8-9101-8368E21F1864}.Release|x64.Build.0 = Release|x64
+ EndGlobalSection
+ GlobalSection(SolutionProperties) = preSolution
+ HideSolutionNode = FALSE
+ EndGlobalSection
+EndGlobal
diff --git a/Nudge/nudge_10.vcxproj b/Nudge/nudge_10.vcxproj
new file mode 100644
index 0000000..32e6e5f
--- /dev/null
+++ b/Nudge/nudge_10.vcxproj
@@ -0,0 +1,483 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+ <ItemGroup Label="ProjectConfigurations">
+ <ProjectConfiguration Include="Debug|Win32">
+ <Configuration>Debug</Configuration>
+ <Platform>Win32</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Debug|x64">
+ <Configuration>Debug</Configuration>
+ <Platform>x64</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Release Unicode|Win32">
+ <Configuration>Release Unicode</Configuration>
+ <Platform>Win32</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Release Unicode|x64">
+ <Configuration>Release Unicode</Configuration>
+ <Platform>x64</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Release|Win32">
+ <Configuration>Release</Configuration>
+ <Platform>Win32</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Release|x64">
+ <Configuration>Release</Configuration>
+ <Platform>x64</Platform>
+ </ProjectConfiguration>
+ </ItemGroup>
+ <PropertyGroup Label="Globals">
+ <ProjectName>nudge</ProjectName>
+ <ProjectGuid>{8190CFAA-3B73-43D8-9101-8368E21F1864}</ProjectGuid>
+ <RootNamespace>nudge</RootNamespace>
+ </PropertyGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
+ <ConfigurationType>DynamicLibrary</ConfigurationType>
+ <UseOfMfc>false</UseOfMfc>
+ <CharacterSet>Unicode</CharacterSet>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
+ <ConfigurationType>DynamicLibrary</ConfigurationType>
+ <UseOfMfc>false</UseOfMfc>
+ <CharacterSet>Unicode</CharacterSet>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release Unicode|Win32'" Label="Configuration">
+ <ConfigurationType>DynamicLibrary</ConfigurationType>
+ <UseOfMfc>false</UseOfMfc>
+ <CharacterSet>Unicode</CharacterSet>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release Unicode|x64'" Label="Configuration">
+ <ConfigurationType>DynamicLibrary</ConfigurationType>
+ <UseOfMfc>false</UseOfMfc>
+ <CharacterSet>Unicode</CharacterSet>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
+ <ConfigurationType>DynamicLibrary</ConfigurationType>
+ <UseOfMfc>false</UseOfMfc>
+ <CharacterSet>MultiByte</CharacterSet>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
+ <ConfigurationType>DynamicLibrary</ConfigurationType>
+ <UseOfMfc>false</UseOfMfc>
+ <CharacterSet>MultiByte</CharacterSet>
+ </PropertyGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
+ <ImportGroup Label="ExtensionSettings">
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release Unicode|Win32'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release Unicode|x64'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
+ </ImportGroup>
+ <PropertyGroup Label="UserMacros" />
+ <PropertyGroup>
+ <_ProjectFileVersion>10.0.30319.1</_ProjectFileVersion>
+ <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(SolutionDir)$(Configuration)/Plugins\</OutDir>
+ <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(SolutionDir)$(Configuration)64/Plugins\</OutDir>
+ <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(SolutionDir)$(Configuration)/Obj/$(ProjectName)\</IntDir>
+ <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(SolutionDir)$(Configuration)64/Obj/$(ProjectName)\</IntDir>
+ <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" />
+ <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" />
+ <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(SolutionDir)$(Configuration)/Plugins\</OutDir>
+ <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(SolutionDir)$(Configuration)64/Plugins\</OutDir>
+ <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(SolutionDir)$(Configuration)/Obj/$(ProjectName)\</IntDir>
+ <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(SolutionDir)$(Configuration)64/Obj/$(ProjectName)\</IntDir>
+ <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</LinkIncremental>
+ <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</LinkIncremental>
+ <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release Unicode|Win32'">true</LinkIncremental>
+ <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release Unicode|x64'">true</LinkIncremental>
+ <IntDir Condition="'$(Configuration)|$(Platform)'=='Release Unicode|Win32'">$(SolutionDir)$(Configuration)/Obj/$(ProjectName)\</IntDir>
+ <OutDir Condition="'$(Configuration)|$(Platform)'=='Release Unicode|Win32'">$(SolutionDir)$(Configuration)/Plugins\</OutDir>
+ </PropertyGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+ <Midl>
+ <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <MkTypLibCompatible>true</MkTypLibCompatible>
+ <SuppressStartupBanner>true</SuppressStartupBanner>
+ <TargetEnvironment>Win32</TargetEnvironment>
+ <TypeLibraryName>.\Debug/nudge.tlb</TypeLibraryName>
+ <HeaderFileName>
+ </HeaderFileName>
+ </Midl>
+ <ClCompile>
+ <Optimization>Disabled</Optimization>
+ <AdditionalIncludeDirectories>../../include;../ExternalAPI;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions>WIN32;_DEBUG;_WINDOWS;_USRDLL;nudge_EXPORTS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
+ <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
+ <PrecompiledHeader>
+ </PrecompiledHeader>
+ <BrowseInformation>true</BrowseInformation>
+ <WarningLevel>Level3</WarningLevel>
+ <SuppressStartupBanner>true</SuppressStartupBanner>
+ <DebugInformationFormat>EditAndContinue</DebugInformationFormat>
+ <CompileAs>Default</CompileAs>
+ </ClCompile>
+ <ResourceCompile>
+ <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <Culture>0x080c</Culture>
+ </ResourceCompile>
+ <Link>
+ <AdditionalDependencies>comctl32.lib;%(AdditionalDependencies)</AdditionalDependencies>
+ <SuppressStartupBanner>true</SuppressStartupBanner>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ <ProgramDatabaseFile>.\Debug/nudge.pdb</ProgramDatabaseFile>
+ <ImportLibrary>.\Debug/nudge.lib</ImportLibrary>
+ <TargetMachine>MachineX86</TargetMachine>
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
+ <Midl>
+ <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <MkTypLibCompatible>true</MkTypLibCompatible>
+ <SuppressStartupBanner>true</SuppressStartupBanner>
+ <TypeLibraryName>.\Debug/nudge.tlb</TypeLibraryName>
+ <HeaderFileName>
+ </HeaderFileName>
+ </Midl>
+ <ClCompile>
+ <Optimization>Disabled</Optimization>
+ <AdditionalIncludeDirectories>../../../include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions>WIN32;_DEBUG;_WINDOWS;_USRDLL;nudge_EXPORTS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
+ <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
+ <PrecompiledHeader>
+ </PrecompiledHeader>
+ <BrowseInformation>true</BrowseInformation>
+ <WarningLevel>Level3</WarningLevel>
+ <SuppressStartupBanner>true</SuppressStartupBanner>
+ <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+ <CompileAs>Default</CompileAs>
+ </ClCompile>
+ <ResourceCompile>
+ <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <Culture>0x080c</Culture>
+ </ResourceCompile>
+ <Link>
+ <AdditionalDependencies>comctl32.lib;%(AdditionalDependencies)</AdditionalDependencies>
+ <SuppressStartupBanner>true</SuppressStartupBanner>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ <ProgramDatabaseFile>.\Debug/nudge.pdb</ProgramDatabaseFile>
+ <ImportLibrary>.\Debug/nudge.lib</ImportLibrary>
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+ <Midl>
+ <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <MkTypLibCompatible>true</MkTypLibCompatible>
+ <SuppressStartupBanner>true</SuppressStartupBanner>
+ <TargetEnvironment>Win32</TargetEnvironment>
+ <TypeLibraryName>.\Release/nudge.tlb</TypeLibraryName>
+ <HeaderFileName>
+ </HeaderFileName>
+ </Midl>
+ <ClCompile>
+ <Optimization>Full</Optimization>
+ <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
+ <FavorSizeOrSpeed>Size</FavorSizeOrSpeed>
+ <OmitFramePointers>false</OmitFramePointers>
+ <AdditionalIncludeDirectories>../../include;../ExternalAPI;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions>WIN32;_DEBUG;_WINDOWS;_USRDLL;_UNICODE;UNICODE;MICROSOFT_LAYER_FOR_UNICODE=1;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <StringPooling>true</StringPooling>
+ <RuntimeLibrary>MultiThreaded</RuntimeLibrary>
+ <FunctionLevelLinking>true</FunctionLevelLinking>
+ <PrecompiledHeader>
+ </PrecompiledHeader>
+ <BrowseInformation>true</BrowseInformation>
+ <WarningLevel>Level3</WarningLevel>
+ <SuppressStartupBanner>true</SuppressStartupBanner>
+ <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+ <CompileAs>Default</CompileAs>
+ <DisableSpecificWarnings>4996;%(DisableSpecificWarnings)</DisableSpecificWarnings>
+ </ClCompile>
+ <ResourceCompile>
+ <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <Culture>0x080c</Culture>
+ </ResourceCompile>
+ <Link>
+ <AdditionalDependencies>unicows.lib;comctl32.lib;Delayimp.lib;gdiplus.lib;version.lib;%(AdditionalDependencies)</AdditionalDependencies>
+ <SuppressStartupBanner>true</SuppressStartupBanner>
+ <IgnoreAllDefaultLibraries>false</IgnoreAllDefaultLibraries>
+ <DelayLoadDLLs>%(DelayLoadDLLs)</DelayLoadDLLs>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ <AssemblyDebug>
+ </AssemblyDebug>
+ <OptimizeReferences>true</OptimizeReferences>
+ <EnableCOMDATFolding>true</EnableCOMDATFolding>
+ <TargetMachine>MachineX86</TargetMachine>
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
+ <Midl>
+ <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <MkTypLibCompatible>true</MkTypLibCompatible>
+ <SuppressStartupBanner>true</SuppressStartupBanner>
+ <TypeLibraryName>.\Release/nudge.tlb</TypeLibraryName>
+ <HeaderFileName>
+ </HeaderFileName>
+ </Midl>
+ <ClCompile>
+ <Optimization>Full</Optimization>
+ <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
+ <FavorSizeOrSpeed>Size</FavorSizeOrSpeed>
+ <OmitFramePointers>false</OmitFramePointers>
+ <AdditionalIncludeDirectories>../../../include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions>WIN32;_DEBUG;_WINDOWS;_USRDLL;_UNICODE;UNICODE;MICROSOFT_LAYER_FOR_UNICODE=1;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <StringPooling>true</StringPooling>
+ <RuntimeLibrary>MultiThreaded</RuntimeLibrary>
+ <FunctionLevelLinking>true</FunctionLevelLinking>
+ <PrecompiledHeader>
+ </PrecompiledHeader>
+ <BrowseInformation>true</BrowseInformation>
+ <WarningLevel>Level3</WarningLevel>
+ <SuppressStartupBanner>true</SuppressStartupBanner>
+ <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+ <CompileAs>Default</CompileAs>
+ <DisableSpecificWarnings>4996;%(DisableSpecificWarnings)</DisableSpecificWarnings>
+ </ClCompile>
+ <ResourceCompile>
+ <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <Culture>0x080c</Culture>
+ </ResourceCompile>
+ <Link>
+ <AdditionalDependencies>unicows.lib;comctl32.lib;Delayimp.lib;gdiplus.lib;version.lib;%(AdditionalDependencies)</AdditionalDependencies>
+ <OutputFile>$(SolutionDir)Release/Plugins/nudge.dll</OutputFile>
+ <SuppressStartupBanner>true</SuppressStartupBanner>
+ <IgnoreAllDefaultLibraries>false</IgnoreAllDefaultLibraries>
+ <DelayLoadDLLs>%(DelayLoadDLLs)</DelayLoadDLLs>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ <AssemblyDebug>
+ </AssemblyDebug>
+ <OptimizeReferences>true</OptimizeReferences>
+ <EnableCOMDATFolding>true</EnableCOMDATFolding>
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release Unicode|Win32'">
+ <Midl>
+ <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <MkTypLibCompatible>true</MkTypLibCompatible>
+ <SuppressStartupBanner>true</SuppressStartupBanner>
+ <TargetEnvironment>Win32</TargetEnvironment>
+ <TypeLibraryName>.\Release/nudge.tlb</TypeLibraryName>
+ <HeaderFileName>
+ </HeaderFileName>
+ </Midl>
+ <ClCompile>
+ <Optimization>Full</Optimization>
+ <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
+ <FavorSizeOrSpeed>Size</FavorSizeOrSpeed>
+ <OmitFramePointers>false</OmitFramePointers>
+ <AdditionalIncludeDirectories>../../include;../ExternalAPI;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions>WIN32;_DEBUG;_WINDOWS;_USRDLL;_UNICODE;UNICODE;MICROSOFT_LAYER_FOR_UNICODE=1;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <StringPooling>true</StringPooling>
+ <RuntimeLibrary>MultiThreaded</RuntimeLibrary>
+ <FunctionLevelLinking>true</FunctionLevelLinking>
+ <PrecompiledHeader>
+ </PrecompiledHeader>
+ <BrowseInformation>true</BrowseInformation>
+ <WarningLevel>Level3</WarningLevel>
+ <SuppressStartupBanner>true</SuppressStartupBanner>
+ <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+ <CompileAs>Default</CompileAs>
+ <DisableSpecificWarnings>4996;%(DisableSpecificWarnings)</DisableSpecificWarnings>
+ </ClCompile>
+ <ResourceCompile>
+ <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <Culture>0x080c</Culture>
+ </ResourceCompile>
+ <Link>
+ <AdditionalDependencies>unicows.lib;comctl32.lib;Delayimp.lib;gdiplus.lib;version.lib;%(AdditionalDependencies)</AdditionalDependencies>
+ <SuppressStartupBanner>true</SuppressStartupBanner>
+ <IgnoreAllDefaultLibraries>false</IgnoreAllDefaultLibraries>
+ <DelayLoadDLLs>%(DelayLoadDLLs)</DelayLoadDLLs>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ <AssemblyDebug>
+ </AssemblyDebug>
+ <OptimizeReferences>true</OptimizeReferences>
+ <EnableCOMDATFolding>true</EnableCOMDATFolding>
+ <TargetMachine>MachineX86</TargetMachine>
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release Unicode|x64'">
+ <Midl>
+ <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <MkTypLibCompatible>true</MkTypLibCompatible>
+ <SuppressStartupBanner>true</SuppressStartupBanner>
+ <TypeLibraryName>.\Release/nudge.tlb</TypeLibraryName>
+ <HeaderFileName>
+ </HeaderFileName>
+ </Midl>
+ <ClCompile>
+ <Optimization>Full</Optimization>
+ <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
+ <FavorSizeOrSpeed>Size</FavorSizeOrSpeed>
+ <OmitFramePointers>false</OmitFramePointers>
+ <AdditionalIncludeDirectories>../../../include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions>_WIN64;_DEBUG;_WINDOWS;_USRDLL;_UNICODE;UNICODE;MICROSOFT_LAYER_FOR_UNICODE=1;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <StringPooling>true</StringPooling>
+ <RuntimeLibrary>MultiThreaded</RuntimeLibrary>
+ <FunctionLevelLinking>true</FunctionLevelLinking>
+ <PrecompiledHeader>
+ </PrecompiledHeader>
+ <BrowseInformation>true</BrowseInformation>
+ <WarningLevel>Level3</WarningLevel>
+ <SuppressStartupBanner>true</SuppressStartupBanner>
+ <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+ <CompileAs>Default</CompileAs>
+ <DisableSpecificWarnings>4996;%(DisableSpecificWarnings)</DisableSpecificWarnings>
+ </ClCompile>
+ <ResourceCompile>
+ <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <Culture>0x080c</Culture>
+ </ResourceCompile>
+ <Link>
+ <AdditionalDependencies>comctl32.lib;Delayimp.lib;gdiplus.lib;version.lib;%(AdditionalDependencies)</AdditionalDependencies>
+ <SuppressStartupBanner>true</SuppressStartupBanner>
+ <IgnoreAllDefaultLibraries>false</IgnoreAllDefaultLibraries>
+ <DelayLoadDLLs>%(DelayLoadDLLs)</DelayLoadDLLs>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ <AssemblyDebug>
+ </AssemblyDebug>
+ <OptimizeReferences>true</OptimizeReferences>
+ <EnableCOMDATFolding>true</EnableCOMDATFolding>
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemGroup>
+ <ClCompile Include="main.cpp">
+ <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
+ <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">Disabled</Optimization>
+ <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">WIN32;_DEBUG;_WINDOWS;_MBCS;_USRDLL;nudge_EXPORTS</PreprocessorDefinitions>
+ <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">WIN32;_DEBUG;_WINDOWS;_MBCS;_USRDLL;nudge_EXPORTS</PreprocessorDefinitions>
+ <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">EnableFastChecks</BasicRuntimeChecks>
+ <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">EnableFastChecks</BasicRuntimeChecks>
+ <BrowseInformation Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</BrowseInformation>
+ <BrowseInformation Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</BrowseInformation>
+ <Optimization Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">MaxSpeed</Optimization>
+ <Optimization Condition="'$(Configuration)|$(Platform)'=='Release|x64'">MaxSpeed</Optimization>
+ <Optimization Condition="'$(Configuration)|$(Platform)'=='Release Unicode|Win32'">MaxSpeed</Optimization>
+ <Optimization Condition="'$(Configuration)|$(Platform)'=='Release Unicode|x64'">MaxSpeed</Optimization>
+ <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Unicode|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Unicode|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">WIN32;_DEBUG;_WINDOWS;_USRDLL;_UNICODE;UNICODE;MICROSOFT_LAYER_FOR_UNICODE=1;nudge_EXPORTS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|x64'">WIN32;_DEBUG;_WINDOWS;_USRDLL;_UNICODE;UNICODE;MICROSOFT_LAYER_FOR_UNICODE=1;nudge_EXPORTS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Unicode|Win32'">WIN32;_DEBUG;_WINDOWS;_USRDLL;_UNICODE;UNICODE;MICROSOFT_LAYER_FOR_UNICODE=1;nudge_EXPORTS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Unicode|x64'">WIN32;_DEBUG;_WINDOWS;_USRDLL;_UNICODE;UNICODE;MICROSOFT_LAYER_FOR_UNICODE=1;nudge_EXPORTS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <BrowseInformation Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</BrowseInformation>
+ <BrowseInformation Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</BrowseInformation>
+ <BrowseInformation Condition="'$(Configuration)|$(Platform)'=='Release Unicode|Win32'">true</BrowseInformation>
+ <BrowseInformation Condition="'$(Configuration)|$(Platform)'=='Release Unicode|x64'">true</BrowseInformation>
+ </ClCompile>
+ <ClCompile Include="nudge.cpp">
+ <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">WIN32;_DEBUG;_WINDOWS;_USRDLL;_UNICODE;UNICODE;MICROSOFT_LAYER_FOR_UNICODE=1;nudge_EXPORTS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|x64'">WIN32;_DEBUG;_WINDOWS;_USRDLL;_UNICODE;UNICODE;MICROSOFT_LAYER_FOR_UNICODE=1;nudge_EXPORTS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Unicode|Win32'">WIN32;_DEBUG;_WINDOWS;_USRDLL;_UNICODE;UNICODE;MICROSOFT_LAYER_FOR_UNICODE=1;nudge_EXPORTS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Unicode|x64'">WIN32;_DEBUG;_WINDOWS;_USRDLL;_UNICODE;UNICODE;MICROSOFT_LAYER_FOR_UNICODE=1;nudge_EXPORTS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ </ClCompile>
+ <ClCompile Include="options.cpp">
+ <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
+ <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">Disabled</Optimization>
+ <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">WIN32;_DEBUG;_WINDOWS;_MBCS;_USRDLL;nudge_EXPORTS</PreprocessorDefinitions>
+ <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">WIN32;_DEBUG;_WINDOWS;_MBCS;_USRDLL;nudge_EXPORTS</PreprocessorDefinitions>
+ <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">EnableFastChecks</BasicRuntimeChecks>
+ <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">EnableFastChecks</BasicRuntimeChecks>
+ <BrowseInformation Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</BrowseInformation>
+ <BrowseInformation Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</BrowseInformation>
+ <Optimization Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">MaxSpeed</Optimization>
+ <Optimization Condition="'$(Configuration)|$(Platform)'=='Release|x64'">MaxSpeed</Optimization>
+ <Optimization Condition="'$(Configuration)|$(Platform)'=='Release Unicode|Win32'">MaxSpeed</Optimization>
+ <Optimization Condition="'$(Configuration)|$(Platform)'=='Release Unicode|x64'">MaxSpeed</Optimization>
+ <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Unicode|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Unicode|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">WIN32;_DEBUG;_WINDOWS;_USRDLL;_UNICODE;UNICODE;MICROSOFT_LAYER_FOR_UNICODE=1;nudge_EXPORTS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|x64'">WIN32;_DEBUG;_WINDOWS;_USRDLL;_UNICODE;UNICODE;MICROSOFT_LAYER_FOR_UNICODE=1;nudge_EXPORTS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Unicode|Win32'">WIN32;_DEBUG;_WINDOWS;_USRDLL;_UNICODE;UNICODE;MICROSOFT_LAYER_FOR_UNICODE=1;nudge_EXPORTS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Unicode|x64'">WIN32;_DEBUG;_WINDOWS;_USRDLL;_UNICODE;UNICODE;MICROSOFT_LAYER_FOR_UNICODE=1;nudge_EXPORTS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <BrowseInformation Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</BrowseInformation>
+ <BrowseInformation Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</BrowseInformation>
+ <BrowseInformation Condition="'$(Configuration)|$(Platform)'=='Release Unicode|Win32'">true</BrowseInformation>
+ <BrowseInformation Condition="'$(Configuration)|$(Platform)'=='Release Unicode|x64'">true</BrowseInformation>
+ </ClCompile>
+ <ClCompile Include="shake.cpp">
+ <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
+ <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">Disabled</Optimization>
+ <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">WIN32;_DEBUG;_WINDOWS;_MBCS;_USRDLL;nudge_EXPORTS</PreprocessorDefinitions>
+ <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">WIN32;_DEBUG;_WINDOWS;_MBCS;_USRDLL;nudge_EXPORTS</PreprocessorDefinitions>
+ <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">EnableFastChecks</BasicRuntimeChecks>
+ <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">EnableFastChecks</BasicRuntimeChecks>
+ <BrowseInformation Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</BrowseInformation>
+ <BrowseInformation Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</BrowseInformation>
+ <Optimization Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">MaxSpeed</Optimization>
+ <Optimization Condition="'$(Configuration)|$(Platform)'=='Release|x64'">MaxSpeed</Optimization>
+ <Optimization Condition="'$(Configuration)|$(Platform)'=='Release Unicode|Win32'">MaxSpeed</Optimization>
+ <Optimization Condition="'$(Configuration)|$(Platform)'=='Release Unicode|x64'">MaxSpeed</Optimization>
+ <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Unicode|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Unicode|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">WIN32;_DEBUG;_WINDOWS;_USRDLL;_UNICODE;UNICODE;MICROSOFT_LAYER_FOR_UNICODE=1;nudge_EXPORTS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|x64'">WIN32;_DEBUG;_WINDOWS;_USRDLL;_UNICODE;UNICODE;MICROSOFT_LAYER_FOR_UNICODE=1;nudge_EXPORTS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Unicode|Win32'">WIN32;_DEBUG;_WINDOWS;_USRDLL;_UNICODE;UNICODE;MICROSOFT_LAYER_FOR_UNICODE=1;nudge_EXPORTS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Unicode|x64'">WIN32;_DEBUG;_WINDOWS;_USRDLL;_UNICODE;UNICODE;MICROSOFT_LAYER_FOR_UNICODE=1;nudge_EXPORTS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <BrowseInformation Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</BrowseInformation>
+ <BrowseInformation Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</BrowseInformation>
+ <BrowseInformation Condition="'$(Configuration)|$(Platform)'=='Release Unicode|Win32'">true</BrowseInformation>
+ <BrowseInformation Condition="'$(Configuration)|$(Platform)'=='Release Unicode|x64'">true</BrowseInformation>
+ </ClCompile>
+ </ItemGroup>
+ <ItemGroup>
+ <ClInclude Include="headers.h" />
+ <ClInclude Include="m_nudge.h" />
+ <ClInclude Include="main.h" />
+ <ClInclude Include="nudge.h" />
+ <ClInclude Include="options.h" />
+ <ClInclude Include="resource.h" />
+ <ClInclude Include="shake.h" />
+ </ItemGroup>
+ <ItemGroup>
+ <None Include="miranda.ico" />
+ <None Include="nudge.ico" />
+ <None Include="ChangeLog.txt" />
+ <None Include="resources\Nudge.ico" />
+ <None Include="resources\NudgeIRC.ico" />
+ <None Include="resources\NudgeMeta.ico" />
+ <None Include="resources\NudgeMSN.ico" />
+ <None Include="resources\NudgeTlen.ico" />
+ <None Include="resources\NudgeYahoo.ico" />
+ </ItemGroup>
+ <ItemGroup>
+ <ResourceCompile Include="resource.rc" />
+ </ItemGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
+ <ImportGroup Label="ExtensionTargets">
+ </ImportGroup>
+</Project> \ No newline at end of file
diff --git a/Nudge/nudge_8.sln b/Nudge/nudge_8.sln
new file mode 100644
index 0000000..d9d46ee
--- /dev/null
+++ b/Nudge/nudge_8.sln
@@ -0,0 +1,19 @@
+Microsoft Visual Studio Solution File, Format Version 9.00
+# Visual C++ Express 2005
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "nudge", "nudge_8.vcproj", "{8190CFAA-3B73-43D8-9101-8368E21F1864}"
+EndProject
+Global
+ GlobalSection(SolutionConfigurationPlatforms) = preSolution
+ Debug|Win32 = Debug|Win32
+ Release|Win32 = Release|Win32
+ EndGlobalSection
+ GlobalSection(ProjectConfigurationPlatforms) = postSolution
+ {8190CFAA-3B73-43D8-9101-8368E21F1864}.Debug|Win32.ActiveCfg = Debug|Win32
+ {8190CFAA-3B73-43D8-9101-8368E21F1864}.Debug|Win32.Build.0 = Debug|Win32
+ {8190CFAA-3B73-43D8-9101-8368E21F1864}.Release|Win32.ActiveCfg = Release|Win32
+ {8190CFAA-3B73-43D8-9101-8368E21F1864}.Release|Win32.Build.0 = Release|Win32
+ EndGlobalSection
+ GlobalSection(SolutionProperties) = preSolution
+ HideSolutionNode = FALSE
+ EndGlobalSection
+EndGlobal
diff --git a/Nudge/nudge_8.vcproj b/Nudge/nudge_8.vcproj
new file mode 100644
index 0000000..838a427
--- /dev/null
+++ b/Nudge/nudge_8.vcproj
@@ -0,0 +1,368 @@
+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="8,00"
+ Name="nudge"
+ ProjectGUID="{8190CFAA-3B73-43D8-9101-8368E21F1864}"
+ RootNamespace="nudge"
+ >
+ <Platforms>
+ <Platform
+ Name="Win32"
+ />
+ </Platforms>
+ <ToolFiles>
+ </ToolFiles>
+ <Configurations>
+ <Configuration
+ Name="Debug|Win32"
+ OutputDirectory="../../bin7/Debug/Plugins"
+ IntermediateDirectory="../../bin7/Debug/Obj/$(ProjectName)"
+ ConfigurationType="2"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ UseOfMFC="0"
+ ATLMinimizesCRunTimeLibraryUsage="false"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ PreprocessorDefinitions="_DEBUG"
+ MkTypLibCompatible="true"
+ SuppressStartupBanner="true"
+ TargetEnvironment="1"
+ TypeLibraryName=".\Debug/nudge.tlb"
+ HeaderFileName=""
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories="../../../include"
+ PreprocessorDefinitions="WIN32;_DEBUG;_WINDOWS;_USRDLL;nudge_EXPORTS"
+ BasicRuntimeChecks="3"
+ RuntimeLibrary="3"
+ UsePrecompiledHeader="0"
+ BrowseInformation="1"
+ WarningLevel="3"
+ SuppressStartupBanner="true"
+ DebugInformationFormat="4"
+ CompileAs="0"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ PreprocessorDefinitions="_DEBUG"
+ Culture="2060"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="comctl32.lib"
+ LinkIncremental="0"
+ SuppressStartupBanner="true"
+ GenerateDebugInformation="true"
+ ProgramDatabaseFile=".\Debug/nudge.pdb"
+ ImportLibrary=".\Debug/nudge.lib"
+ 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="$(SolutionDir)Release/Plugins"
+ IntermediateDirectory="$(SolutionDir)Release/Obj/$(ProjectName)"
+ ConfigurationType="2"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ UseOfMFC="0"
+ ATLMinimizesCRunTimeLibraryUsage="false"
+ CharacterSet="1"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ PreprocessorDefinitions="NDEBUG"
+ MkTypLibCompatible="true"
+ SuppressStartupBanner="true"
+ TargetEnvironment="1"
+ TypeLibraryName=".\Release/nudge.tlb"
+ HeaderFileName=""
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="3"
+ InlineFunctionExpansion="1"
+ FavorSizeOrSpeed="2"
+ OmitFramePointers="false"
+ AdditionalIncludeDirectories="../../../include"
+ PreprocessorDefinitions="WIN32;_DEBUG;_WINDOWS;_USRDLL;_UNICODE;UNICODE;MICROSOFT_LAYER_FOR_UNICODE=1"
+ StringPooling="true"
+ RuntimeLibrary="0"
+ EnableFunctionLevelLinking="true"
+ UsePrecompiledHeader="0"
+ BrowseInformation="1"
+ WarningLevel="3"
+ SuppressStartupBanner="true"
+ DebugInformationFormat="3"
+ CompileAs="0"
+ DisableSpecificWarnings="4996"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ PreprocessorDefinitions="NDEBUG"
+ Culture="2060"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="unicows.lib comctl32.lib Delayimp.lib gdiplus.lib version.lib"
+ OutputFile="$(SolutionDir)Release/Plugins/nudge.dll"
+ LinkIncremental="2"
+ SuppressStartupBanner="true"
+ IgnoreAllDefaultLibraries="false"
+ DelayLoadDLLs=""
+ GenerateDebugInformation="true"
+ AssemblyDebug="0"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ OptimizeForWindows98="1"
+ 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;cxx;rc;def;r;odl;idl;hpj;bat"
+ >
+ <File
+ RelativePath="main.cpp"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions="WIN32;_DEBUG;_WINDOWS;_MBCS;_USRDLL;nudge_EXPORTS;$(NoInherit)"
+ BasicRuntimeChecks="3"
+ BrowseInformation="1"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions="WIN32;_DEBUG;_WINDOWS;_USRDLL;_UNICODE;UNICODE;MICROSOFT_LAYER_FOR_UNICODE=1;nudge_EXPORTS"
+ BrowseInformation="1"
+ />
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath=".\nudge.cpp"
+ >
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ PreprocessorDefinitions="WIN32;_DEBUG;_WINDOWS;_USRDLL;_UNICODE;UNICODE;MICROSOFT_LAYER_FOR_UNICODE=1;nudge_EXPORTS"
+ />
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath="options.cpp"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions="WIN32;_DEBUG;_WINDOWS;_MBCS;_USRDLL;nudge_EXPORTS;$(NoInherit)"
+ BasicRuntimeChecks="3"
+ BrowseInformation="1"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions="WIN32;_DEBUG;_WINDOWS;_USRDLL;_UNICODE;UNICODE;MICROSOFT_LAYER_FOR_UNICODE=1;nudge_EXPORTS"
+ BrowseInformation="1"
+ />
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath="shake.cpp"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions="WIN32;_DEBUG;_WINDOWS;_MBCS;_USRDLL;nudge_EXPORTS;$(NoInherit)"
+ BasicRuntimeChecks="3"
+ BrowseInformation="1"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions="WIN32;_DEBUG;_WINDOWS;_USRDLL;_UNICODE;UNICODE;MICROSOFT_LAYER_FOR_UNICODE=1;nudge_EXPORTS"
+ BrowseInformation="1"
+ />
+ </FileConfiguration>
+ </File>
+ </Filter>
+ <Filter
+ Name="Header Files"
+ Filter="h;hpp;hxx;hm;inl"
+ >
+ <File
+ RelativePath="headers.h"
+ >
+ </File>
+ <File
+ RelativePath="m_nudge.h"
+ >
+ </File>
+ <File
+ RelativePath="main.h"
+ >
+ </File>
+ <File
+ RelativePath=".\nudge.h"
+ >
+ </File>
+ <File
+ RelativePath=".\options.h"
+ >
+ </File>
+ <File
+ RelativePath=".\resource.h"
+ >
+ </File>
+ <File
+ RelativePath="shake.h"
+ >
+ </File>
+ </Filter>
+ <Filter
+ Name="Resource Files"
+ Filter="ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe"
+ >
+ <File
+ RelativePath="miranda.ico"
+ >
+ </File>
+ <File
+ RelativePath=".\nudge.ico"
+ >
+ </File>
+ <File
+ RelativePath="resource.rc"
+ >
+ </File>
+ </Filter>
+ <File
+ RelativePath=".\ChangeLog.txt"
+ >
+ </File>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>
diff --git a/Nudge/options.cpp b/Nudge/options.cpp
new file mode 100644
index 0000000..4ffe6f2
--- /dev/null
+++ b/Nudge/options.cpp
@@ -0,0 +1,578 @@
+#include "headers.h"
+#include "uxtheme.h"
+#include "main.h"
+#include "shake.h"
+#include "options.h"
+
+CNudgeElement* ActualNudge = NULL;
+
+extern BOOL (WINAPI *MyEnableThemeDialogTexture)(HANDLE, DWORD);
+
+
+int NudgeOptInit(WPARAM wParam,LPARAM lParam)
+{
+ OPTIONSDIALOGPAGE odp = { 0 };
+ odp.cbSize = sizeof(odp);
+ odp.position = -790000000;
+ odp.hInstance = hInst;
+ odp.pszTemplate = MAKEINTRESOURCEA(IDD_OPTIONS);
+ odp.ptszTitle = LPGENT("Nudge");
+ odp.ptszGroup = LPGENT("Events");
+ odp.flags = ODPF_BOLDGROUPS|ODPF_TCHAR;
+// odp.nIDBottomSimpleControl = IDC_STMSNGROUP;
+ odp.pfnDlgProc = OptionsDlgProc;
+ CallService( MS_OPT_ADDPAGE, wParam,( LPARAM )&odp );
+ return 0;
+}
+
+
+HANDLE hOptionsInit;
+void InitOptions()
+{
+ hOptionsInit = HookEvent(ME_OPT_INITIALISE, NudgeOptInit);
+}
+
+void UninitOptions()
+{
+ UnhookEvent(hOptionsInit);
+}
+
+static INT_PTR CALLBACK OptionsDlgProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
+{
+ static int iInit = TRUE;
+
+ switch(msg)
+ {
+ case WM_INITDIALOG:
+ {
+ TCITEM tci;
+ RECT rcClient;
+ GetClientRect(hwnd, &rcClient);
+
+ iInit = TRUE;
+ tci.mask = TCIF_PARAM|TCIF_TEXT;
+ tci.lParam = (LPARAM)CreateDialog(hInst,MAKEINTRESOURCE(IDD_OPT_NUDGE), hwnd, DlgProcNudgeOpt);
+ tci.pszText = TranslateT("Nudge");
+ TabCtrl_InsertItem(GetDlgItem(hwnd, IDC_OPTIONSTAB), 0, &tci);
+ MoveWindow((HWND)tci.lParam,1,28,rcClient.right-3,rcClient.bottom-33,1);
+ if(MyEnableThemeDialogTexture)
+ MyEnableThemeDialogTexture((HWND)tci.lParam, ETDT_ENABLETAB);
+
+ tci.lParam = (LPARAM)CreateDialog(hInst,MAKEINTRESOURCE(IDD_OPT_SHAKE),hwnd,DlgProcShakeOpt);
+ tci.pszText = TranslateT("Window Shaking");
+ TabCtrl_InsertItem(GetDlgItem(hwnd, IDC_OPTIONSTAB), 1, &tci);
+ MoveWindow((HWND)tci.lParam,1,28,rcClient.right-3,rcClient.bottom-33,1);
+ ShowWindow((HWND)tci.lParam, SW_HIDE);
+ if(MyEnableThemeDialogTexture)
+ MyEnableThemeDialogTexture((HWND)tci.lParam, ETDT_ENABLETAB);
+ iInit = FALSE;
+ return FALSE;
+ }
+
+ case PSM_CHANGED: // used so tabs dont have to call SendMessage(GetParent(GetParent(hwnd)), PSM_CHANGED, 0, 0);
+ if(!iInit)
+ SendMessage(GetParent(hwnd), PSM_CHANGED, 0, 0);
+ break;
+ case WM_NOTIFY:
+ switch(((LPNMHDR)lParam)->idFrom) {
+ case 0:
+ switch (((LPNMHDR)lParam)->code)
+ {
+ case PSN_APPLY:
+ {
+ TCITEM tci;
+ int i,count;
+ tci.mask = TCIF_PARAM;
+ count = TabCtrl_GetItemCount(GetDlgItem(hwnd,IDC_OPTIONSTAB));
+ for (i=0;i<count;i++)
+ {
+ TabCtrl_GetItem(GetDlgItem(hwnd,IDC_OPTIONSTAB),i,&tci);
+ SendMessage((HWND)tci.lParam,WM_NOTIFY,0,lParam);
+ }
+
+ NudgeElementList *n;
+ for(n = NudgeList;n != NULL; n = n->next)
+ {
+ n->item.Save();
+ }
+ DefaultNudge.Save();
+ }
+ break;
+ }
+ break;
+ case IDC_OPTIONSTAB:
+ switch (((LPNMHDR)lParam)->code)
+ {
+ case TCN_SELCHANGING:
+ {
+ TCITEM tci;
+ tci.mask = TCIF_PARAM;
+ TabCtrl_GetItem(GetDlgItem(hwnd,IDC_OPTIONSTAB),TabCtrl_GetCurSel(GetDlgItem(hwnd,IDC_OPTIONSTAB)),&tci);
+ ShowWindow((HWND)tci.lParam,SW_HIDE);
+ }
+ break;
+ case TCN_SELCHANGE:
+ {
+ TCITEM tci;
+ tci.mask = TCIF_PARAM;
+ TabCtrl_GetItem(GetDlgItem(hwnd,IDC_OPTIONSTAB),TabCtrl_GetCurSel(GetDlgItem(hwnd,IDC_OPTIONSTAB)),&tci);
+ ShowWindow((HWND)tci.lParam,SW_SHOW);
+ }
+ break;
+ }
+ break;
+
+ }
+ break;
+ }
+ return FALSE;
+}
+
+INT_PTR CALLBACK DlgProcShakeOpt(HWND hwnd,UINT msg,WPARAM wParam,LPARAM lParam)
+{
+ switch(msg)
+ {
+ case WM_INITDIALOG:
+ char szBuf[20];
+ TranslateDialogDefault(hwnd);
+ _snprintf(szBuf, 10, "%d", shake.nMoveClist);
+ SetWindowTextA(GetDlgItem(hwnd, IDC_LNUMBER_CLIST), szBuf);
+ _snprintf(szBuf, 10, "%d", shake.nMoveChat);
+ SetWindowTextA(GetDlgItem(hwnd, IDC_LNUMBER_CHAT), szBuf);
+
+ _snprintf(szBuf, 10, "%d", shake.nScaleClist);
+ SetWindowTextA(GetDlgItem(hwnd, IDC_LSCALE_CLIST), szBuf);
+ _snprintf(szBuf, 10, "%d", shake.nScaleChat);
+ SetWindowTextA(GetDlgItem(hwnd, IDC_LSCALE_CHAT), szBuf);
+
+ SendDlgItemMessage(hwnd, IDC_SNUMBER_CLIST, TBM_SETRANGE, 0, (LPARAM)MAKELONG(1, 60));
+ SendDlgItemMessage(hwnd, IDC_SNUMBER_CHAT, TBM_SETRANGE, 0, (LPARAM)MAKELONG(1, 60));
+
+ SendDlgItemMessage(hwnd, IDC_SSCALE_CLIST, TBM_SETRANGE, 0, (LPARAM)MAKELONG(1, 40));
+ SendDlgItemMessage(hwnd, IDC_SSCALE_CHAT, TBM_SETRANGE, 0, (LPARAM)MAKELONG(1, 40));
+
+ SendDlgItemMessage(hwnd, IDC_SNUMBER_CLIST, TBM_SETPOS, TRUE, shake.nMoveClist);
+ SendDlgItemMessage(hwnd, IDC_SNUMBER_CHAT, TBM_SETPOS, TRUE, shake.nMoveChat);
+
+ SendDlgItemMessage(hwnd, IDC_SSCALE_CLIST, TBM_SETPOS, TRUE, shake.nScaleClist);
+ SendDlgItemMessage(hwnd, IDC_SSCALE_CHAT, TBM_SETPOS, TRUE, shake.nScaleChat);
+
+ break;
+ case WM_COMMAND:
+ {
+ WORD wNotifyCode = HIWORD(wParam);
+ switch(LOWORD(wParam))
+ {
+ case IDC_PREVIEW:
+ ShakeClist(0,0);
+ //SendMessage(GetParent(hwnd),PSM_CHANGED,0,0);
+ break;
+ }
+ break;
+ }
+ case WM_HSCROLL:
+ if((HWND)lParam == GetDlgItem(hwnd, IDC_SNUMBER_CLIST) || (HWND)lParam == GetDlgItem(hwnd, IDC_SNUMBER_CHAT)
+ || (HWND)lParam == GetDlgItem(hwnd, IDC_SSCALE_CLIST) || (HWND)lParam == GetDlgItem(hwnd, IDC_SSCALE_CHAT))
+ {
+ char szBuf[20];
+ DWORD dwPos = SendMessage((HWND) lParam, TBM_GETPOS, 0, 0);
+ _snprintf(szBuf, 10, "%d", dwPos);
+ if ((HWND)lParam == GetDlgItem(hwnd, IDC_SNUMBER_CLIST))
+ SetWindowTextA(GetDlgItem(hwnd, IDC_LNUMBER_CLIST), szBuf);
+ if ((HWND)lParam == GetDlgItem(hwnd, IDC_SNUMBER_CHAT))
+ SetWindowTextA(GetDlgItem(hwnd, IDC_LNUMBER_CHAT), szBuf);
+ if ((HWND)lParam == GetDlgItem(hwnd, IDC_SSCALE_CLIST))
+ SetWindowTextA(GetDlgItem(hwnd, IDC_LSCALE_CLIST), szBuf);
+ if ((HWND)lParam == GetDlgItem(hwnd, IDC_SSCALE_CHAT))
+ SetWindowTextA(GetDlgItem(hwnd, IDC_LSCALE_CHAT), szBuf);
+ SendMessage(GetParent(hwnd), PSM_CHANGED, 0, 0);
+ }
+ break;
+
+ case WM_SHOWWINDOW:
+ break;
+
+ case WM_NOTIFY:
+ switch(((LPNMHDR)lParam)->idFrom)
+ {
+ case 0:
+ switch(((LPNMHDR)lParam)->code)
+ {
+ case PSN_APPLY:
+ {
+ shake.nMoveClist = (int) SendMessage((HWND) GetDlgItem(hwnd, IDC_SNUMBER_CLIST), TBM_GETPOS, 0, 0);
+ shake.nMoveChat = (int) SendMessage((HWND) GetDlgItem(hwnd, IDC_SNUMBER_CHAT), TBM_GETPOS, 0, 0);
+ shake.nScaleClist = (int) SendMessage((HWND) GetDlgItem(hwnd, IDC_SSCALE_CLIST), TBM_GETPOS, 0, 0);
+ shake.nScaleChat = (int) SendMessage((HWND) GetDlgItem(hwnd, IDC_SSCALE_CHAT), TBM_GETPOS, 0, 0);
+ shake.Save();
+ }
+ }
+ }
+ break;
+ }
+
+ return FALSE;
+}
+
+void CreateImageList(HWND hWnd)
+{
+ // Create and populate image list
+ HIMAGELIST hImList = ImageList_Create(GetSystemMetrics(SM_CXSMICON), GetSystemMetrics(SM_CYSMICON), ILC_MASK | ILC_COLOR32, nProtocol, 0);
+
+ NudgeElementList *n;
+ for(n = NudgeList;n != NULL; n = n->next)
+ {
+ HICON hIcon = NULL;
+ hIcon=(HICON)CallProtoService(n->item.ProtocolName, PS_LOADICON,PLI_PROTOCOL | PLIF_SMALL, 0);
+ if (hIcon == NULL || (int)hIcon == CALLSERVICE_NOTFOUND)
+ {
+ hIcon=(HICON)CallProtoService(n->item.ProtocolName, PS_LOADICON, PLI_PROTOCOL, 0);
+ }
+
+ if (hIcon == NULL || (int)hIcon == CALLSERVICE_NOTFOUND)
+ hIcon = (HICON) LoadImage(hInst, MAKEINTRESOURCE(IDI_NUDGE), IMAGE_ICON, GetSystemMetrics(SM_CXSMICON), GetSystemMetrics(SM_CYSMICON), 0);
+
+ ImageList_AddIcon(hImList, hIcon);
+ DestroyIcon(hIcon);
+ }
+ //ADD default Icon for nudge
+ HICON hIcon = NULL;
+ hIcon = (HICON) LoadImage(hInst, MAKEINTRESOURCE(IDI_NUDGE), IMAGE_ICON, GetSystemMetrics(SM_CXSMICON), GetSystemMetrics(SM_CYSMICON), 0);
+ ImageList_AddIcon(hImList, hIcon);
+ DestroyIcon(hIcon);
+
+ HWND hLstView = GetDlgItem(hWnd, IDC_PROTOLIST);
+ TreeView_SetImageList(hLstView, hImList, TVSIL_NORMAL);
+}
+
+void PopulateProtocolList(HWND hWnd)
+{
+ bool useOne = IsDlgButtonChecked(hWnd, IDC_USEBYPROTOCOL) == BST_UNCHECKED;
+
+ HWND hLstView = GetDlgItem(hWnd, IDC_PROTOLIST);
+
+ TreeView_DeleteAllItems(hLstView);
+
+ TVINSERTSTRUCT tvi = {0};
+ tvi.hParent = TVI_ROOT;
+ tvi.hInsertAfter = TVI_LAST;
+ tvi.item.mask = TVIF_TEXT | TVIF_IMAGE | TVIF_STATE | TVIF_SELECTEDIMAGE;
+ tvi.item.stateMask = TVIS_STATEIMAGEMASK;
+
+ NudgeElementList *n;
+ int i = 0;
+ if (GlobalNudge.useByProtocol)
+ {
+ #ifdef _UNICODE
+ wchar_t buff[256];
+ #endif
+ for(n = NudgeList;n != NULL; n = n->next)
+ {
+ #ifdef _UNICODE
+ MultiByteToWideChar(CP_ACP, 0, n->item.ProtocolName, -1, buff, 256);
+ tvi.item.pszText = buff;
+ #else
+ tvi.item.pszText = n->item.ProtocolName;
+ #endif
+ tvi.item.iImage = i;
+ n->item.iProtoNumber = i;
+ tvi.item.iSelectedImage = i;
+ tvi.item.state = INDEXTOSTATEIMAGEMASK(n->item.enabled?2:1);
+ TreeView_InsertItem(hLstView, &tvi);
+ i++;
+ }
+ }
+ else
+ {
+ tvi.item.pszText = TranslateT("Nudge");
+ tvi.item.iImage = nProtocol;
+ DefaultNudge.iProtoNumber = nProtocol;
+ tvi.item.iSelectedImage = nProtocol;
+ tvi.item.state = INDEXTOSTATEIMAGEMASK(DefaultNudge.enabled?2:1);
+ TreeView_InsertItem(hLstView, &tvi);
+
+ }
+ TreeView_SelectItem(hLstView, TreeView_GetRoot(hLstView));
+ //TreeView_SetCheckState(hLstView, TreeView_GetRoot(hLstView), TRUE)
+}
+
+
+INT_PTR CALLBACK DlgProcNudgeOpt(HWND hwnd,UINT msg,WPARAM wParam,LPARAM lParam)
+{
+ switch(msg)
+ {
+ case WM_INITDIALOG:
+ TranslateDialogDefault(hwnd);
+ CreateImageList(hwnd);
+ PopulateProtocolList(hwnd);
+ UpdateControls(hwnd);
+ break;
+ case WM_DESTROY:
+ {
+ HIMAGELIST hImList = TreeView_GetImageList(GetDlgItem(hwnd, IDC_PROTOLIST), TVSIL_NORMAL);
+ if (hImList)
+ {
+ TreeView_SetImageList(GetDlgItem(hwnd, IDC_PROTOLIST), NULL, TVSIL_NORMAL); // Avoiding Access Violation in CommonControls DLL
+ ImageList_Destroy(hImList);
+ }
+ break;
+ }
+ case WM_COMMAND:
+ {
+ WORD wNotifyCode = HIWORD(wParam);
+ switch(LOWORD(wParam))
+ {
+ case IDC_PREVIEW:
+ Preview();
+ break;
+ case IDC_POPUPTIME:
+ SendMessage(GetParent(hwnd),PSM_CHANGED,0,0);
+ break;
+ case IDC_POPUPTEXTCOLOR:
+ case IDC_POPUPBACKCOLOR:
+ if (ActualNudge)// fix NULL pointer then no nudge support protocols
+ {
+ ActualNudge->popupBackColor = SendDlgItemMessage(hwnd,IDC_POPUPBACKCOLOR,CPM_GETCOLOUR,0,0);
+ ActualNudge->popupTextColor = SendDlgItemMessage(hwnd,IDC_POPUPTEXTCOLOR,CPM_GETCOLOUR,0,0);
+ }
+ SendMessage(GetParent(hwnd),PSM_CHANGED,0,0);
+ break;
+ case IDC_USEWINCOLORS:
+ if (ActualNudge)// fix NULL pointer then no nudge support protocols
+ {
+ ActualNudge->popupWindowColor = (IsDlgButtonChecked(hwnd,IDC_USEWINCOLORS)==BST_CHECKED);
+ EnableWindow(GetDlgItem(hwnd,IDC_POPUPBACKCOLOR), ActualNudge->showPopup && ! ActualNudge->popupWindowColor);
+ EnableWindow(GetDlgItem(hwnd,IDC_POPUPTEXTCOLOR), ActualNudge->showPopup && ! ActualNudge->popupWindowColor);
+ }
+ SendMessage(GetParent(hwnd),PSM_CHANGED,0,0);
+ break;
+ case IDC_CHECKPOP:
+ if (ActualNudge)// fix NULL pointer then no nudge support protocols
+ {
+ ActualNudge->showPopup = (IsDlgButtonChecked(hwnd,IDC_CHECKPOP)==BST_CHECKED);
+ EnableWindow(GetDlgItem(hwnd,IDC_USEWINCOLORS),ActualNudge->showPopup);
+ EnableWindow(GetDlgItem(hwnd,IDC_POPUPBACKCOLOR),ActualNudge->showPopup && ! ActualNudge->popupWindowColor);
+ EnableWindow(GetDlgItem(hwnd,IDC_POPUPTEXTCOLOR),ActualNudge->showPopup && ! ActualNudge->popupWindowColor);
+ EnableWindow(GetDlgItem(hwnd,IDC_POPUPTIME),ActualNudge->showPopup);
+ }
+ SendMessage(GetParent(hwnd),PSM_CHANGED,0,0);
+ break;
+ case IDC_USEBYPROTOCOL:
+ GlobalNudge.useByProtocol = (IsDlgButtonChecked(hwnd,IDC_USEBYPROTOCOL)==BST_CHECKED);
+ PopulateProtocolList(hwnd);
+ UpdateControls(hwnd);
+ SendMessage(GetParent(hwnd),PSM_CHANGED,0,0);
+ break;
+ case IDC_CHECKEVENT:
+ case IDC_CHECKCLIST:
+ case IDC_CHECKCHAT:
+ case IDC_CHECKSTATUS:
+ case IDC_AUTORESEND:
+ if (ActualNudge)// fix NULL pointer then no nudge support protocols
+ {
+ ActualNudge->shakeClist = (IsDlgButtonChecked(hwnd,IDC_CHECKCLIST)==BST_CHECKED);
+ ActualNudge->shakeChat = (IsDlgButtonChecked(hwnd,IDC_CHECKCHAT)==BST_CHECKED);
+ ActualNudge->showEvent = (IsDlgButtonChecked(hwnd,IDC_CHECKEVENT)==BST_CHECKED);
+ ActualNudge->showStatus = (IsDlgButtonChecked(hwnd,IDC_CHECKSTATUS)==BST_CHECKED);
+ ActualNudge->autoResend = (IsDlgButtonChecked(hwnd,IDC_AUTORESEND)==BST_CHECKED);
+ EnableWindow(GetDlgItem(hwnd,IDC_RESENDDELAY),ActualNudge->autoResend);
+ }
+ SendMessage(GetParent(hwnd),PSM_CHANGED,0,0);
+ break;
+ case IDC_CHECKST0:
+ case IDC_CHECKST1:
+ case IDC_CHECKST2:
+ case IDC_CHECKST3:
+ case IDC_CHECKST4:
+ case IDC_CHECKST5:
+ case IDC_CHECKST6:
+ case IDC_CHECKST7:
+ case IDC_CHECKST8:
+ case IDC_CHECKST9:
+ case IDC_SENDTEXT:
+ case IDC_RECVTEXT:
+ case IDC_SENDTIME:
+ case IDC_RECVTIME:
+ SendMessage(GetParent(hwnd),PSM_CHANGED,0,0);
+ break;
+ }
+ break;
+ }
+ case WM_SHOWWINDOW:
+ break;
+
+ case WM_NOTIFY:
+ switch(((LPNMHDR)lParam)->idFrom)
+ {
+ case 0:
+ switch(((LPNMHDR)lParam)->code)
+ {
+ case PSN_APPLY:
+ {
+ BOOL Translated;
+ GlobalNudge.sendTimeSec = GetDlgItemInt(hwnd,IDC_SENDTIME,&Translated,FALSE);
+ GlobalNudge.recvTimeSec = GetDlgItemInt(hwnd,IDC_RECVTIME,&Translated,FALSE);
+ GlobalNudge.resendDelaySec = GetDlgItemInt(hwnd,IDC_RESENDDELAY,&Translated,FALSE);
+ if(GlobalNudge.resendDelaySec > 10 ) GlobalNudge.resendDelaySec = 10;
+ if(GlobalNudge.resendDelaySec < 1 ) GlobalNudge.resendDelaySec = 1;
+ if (ActualNudge)// fix NULL pointer then no nudge support protocols
+ {
+ ActualNudge->popupTimeSec = GetDlgItemInt(hwnd,IDC_POPUPTIME,&Translated,FALSE);
+ ActualNudge->popupWindowColor = (IsDlgButtonChecked(hwnd,IDC_USEWINCOLORS)==BST_CHECKED);
+ ActualNudge->showPopup = (IsDlgButtonChecked(hwnd,IDC_CHECKPOP)==BST_CHECKED);
+ ActualNudge->statusFlags =
+ ((IsDlgButtonChecked(hwnd,IDC_CHECKST0)==BST_CHECKED) ? NUDGE_ACC_ST0 : 0) |
+ ((IsDlgButtonChecked(hwnd,IDC_CHECKST1)==BST_CHECKED) ? NUDGE_ACC_ST1 : 0) |
+ ((IsDlgButtonChecked(hwnd,IDC_CHECKST2)==BST_CHECKED) ? NUDGE_ACC_ST2 : 0) |
+ ((IsDlgButtonChecked(hwnd,IDC_CHECKST3)==BST_CHECKED) ? NUDGE_ACC_ST3 : 0) |
+ ((IsDlgButtonChecked(hwnd,IDC_CHECKST4)==BST_CHECKED) ? NUDGE_ACC_ST4 : 0) |
+ ((IsDlgButtonChecked(hwnd,IDC_CHECKST5)==BST_CHECKED) ? NUDGE_ACC_ST5 : 0) |
+ ((IsDlgButtonChecked(hwnd,IDC_CHECKST6)==BST_CHECKED) ? NUDGE_ACC_ST6 : 0) |
+ ((IsDlgButtonChecked(hwnd,IDC_CHECKST7)==BST_CHECKED) ? NUDGE_ACC_ST7 : 0) |
+ ((IsDlgButtonChecked(hwnd,IDC_CHECKST8)==BST_CHECKED) ? NUDGE_ACC_ST8 : 0) |
+ ((IsDlgButtonChecked(hwnd,IDC_CHECKST9)==BST_CHECKED) ? NUDGE_ACC_ST9 : 0) ;
+
+ GetDlgItemText(hwnd,IDC_SENDTEXT,ActualNudge->senText,TEXT_LEN);
+ GetDlgItemText(hwnd,IDC_RECVTEXT,ActualNudge->recText,TEXT_LEN);
+ ActualNudge->Save();
+ }
+ GlobalNudge.Save();
+ }
+ }
+ case IDC_PROTOLIST:
+ switch (((LPNMHDR)lParam)->code)
+ {
+ case NM_CLICK:
+ {
+ TVHITTESTINFO ht = {0};
+
+ DWORD dwpos = GetMessagePos();
+ POINTSTOPOINT(ht.pt, MAKEPOINTS(dwpos));
+ MapWindowPoints(HWND_DESKTOP, ((LPNMHDR)lParam)->hwndFrom, &ht.pt, 1);
+
+ TreeView_HitTest(((LPNMHDR)lParam)->hwndFrom, &ht);
+ /*if (TVHT_ONITEM & ht.flags)
+ CheckChange(hwnd,ht.hItem);*/
+ if (TVHT_ONITEMSTATEICON & ht.flags)
+ CheckChange(hwnd,ht.hItem);
+ SendMessage(GetParent(hwnd),PSM_CHANGED,0,0);
+ }
+
+ case TVN_KEYDOWN:
+ if (((LPNMTVKEYDOWN) lParam)->wVKey == VK_SPACE)
+ CheckChange(hwnd, TreeView_GetSelection(((LPNMHDR)lParam)->hwndFrom));
+ break;
+
+ case TVN_SELCHANGEDA:
+ case TVN_SELCHANGEDW:
+ {
+ LPNMTREEVIEW pnmtv = (LPNMTREEVIEW) lParam;
+ if (pnmtv->itemNew.state & TVIS_SELECTED)
+ UpdateControls(hwnd);
+ }
+ break;
+ }
+ break;
+ }
+ break;
+ }
+
+ return FALSE;
+}
+
+void CheckChange(HWND hwnd, HTREEITEM hItem)
+{
+ HWND hLstView = GetDlgItem(hwnd, IDC_PROTOLIST);
+ bool isChecked = !TreeView_GetCheckState(hLstView, hItem);
+
+ TreeView_SelectItem(hLstView, hItem);
+
+ int proto = nProtocol;
+ NudgeElementList *n;
+ if (GlobalNudge.useByProtocol)
+ {
+ proto = GetSelProto(hwnd, hItem);
+ ActualNudge = NULL;
+ for(n = NudgeList;n != NULL; n = n->next)
+ {
+ if(n->item.iProtoNumber == proto)
+ ActualNudge = &n->item;
+ }
+ }
+ else
+ ActualNudge = &DefaultNudge;
+
+ if (ActualNudge)// fix NULL pointer then no nudge support protocols
+ ActualNudge->enabled = isChecked;
+
+ UpdateControls(hwnd);
+}
+
+void UpdateControls(HWND hwnd)
+{
+ int proto = nProtocol;
+ NudgeElementList *n;
+ if (GlobalNudge.useByProtocol)
+ {
+ proto = GetSelProto(hwnd,NULL);
+ ActualNudge = NULL;
+ for(n = NudgeList;n != NULL; n = n->next)
+ {
+ if(n->item.iProtoNumber == proto)
+ ActualNudge = &n->item;
+ }
+ }
+ else
+ ActualNudge = &DefaultNudge;
+
+ SetDlgItemInt(hwnd, IDC_SENDTIME, GlobalNudge.sendTimeSec,FALSE);
+ SetDlgItemInt(hwnd, IDC_RECVTIME, GlobalNudge.recvTimeSec,FALSE);
+ SetDlgItemInt(hwnd, IDC_RESENDDELAY, GlobalNudge.resendDelaySec,FALSE);
+ CheckDlgButton(hwnd, IDC_USEBYPROTOCOL, (WPARAM) GlobalNudge.useByProtocol);
+ SendDlgItemMessage(hwnd, IDC_POPUPBACKCOLOR, CPM_SETDEFAULTCOLOUR, 0, GetSysColor(COLOR_BTNFACE));
+ SendDlgItemMessage(hwnd, IDC_POPUPTEXTCOLOR, CPM_SETDEFAULTCOLOUR, 0, GetSysColor(COLOR_WINDOWTEXT));
+
+ if (ActualNudge)// fix NULL pointer then no nudge support protocols
+ {
+ CheckDlgButton(hwnd, IDC_CHECKPOP, (WPARAM) ActualNudge->showPopup);
+ CheckDlgButton(hwnd, IDC_USEWINCOLORS, (WPARAM) ActualNudge->popupWindowColor);
+ CheckDlgButton(hwnd, IDC_CHECKCLIST, (WPARAM) ActualNudge->shakeClist);
+ CheckDlgButton(hwnd, IDC_CHECKCHAT, (WPARAM) ActualNudge->shakeChat);
+ CheckDlgButton(hwnd, IDC_CHECKEVENT, (WPARAM) ActualNudge->showEvent);
+ CheckDlgButton(hwnd, IDC_CHECKSTATUS, (WPARAM) ActualNudge->showStatus);
+ CheckDlgButton(hwnd, IDC_AUTORESEND, (WPARAM) ActualNudge->autoResend);
+ SetDlgItemInt(hwnd, IDC_POPUPTIME, ActualNudge->popupTimeSec,FALSE);
+ SendDlgItemMessage(hwnd, IDC_POPUPBACKCOLOR, CPM_SETCOLOUR,0, ActualNudge->popupBackColor);
+ SendDlgItemMessage(hwnd, IDC_POPUPTEXTCOLOR, CPM_SETCOLOUR,0, ActualNudge->popupTextColor);
+ EnableWindow(GetDlgItem(hwnd, IDC_USEWINCOLORS), ActualNudge->showPopup);
+ EnableWindow(GetDlgItem(hwnd, IDC_POPUPBACKCOLOR), ActualNudge->showPopup && ! ActualNudge->popupWindowColor);
+ EnableWindow(GetDlgItem(hwnd, IDC_POPUPTEXTCOLOR), ActualNudge->showPopup && ! ActualNudge->popupWindowColor);
+ EnableWindow(GetDlgItem(hwnd, IDC_POPUPTIME), ActualNudge->showPopup);
+ EnableWindow(GetDlgItem(hwnd,IDC_RESENDDELAY),ActualNudge->autoResend);
+ CheckDlgButton(hwnd,IDC_CHECKST0,ActualNudge->statusFlags & NUDGE_ACC_ST0 ? BST_CHECKED : BST_UNCHECKED);
+ CheckDlgButton(hwnd,IDC_CHECKST1,ActualNudge->statusFlags & NUDGE_ACC_ST1 ? BST_CHECKED : BST_UNCHECKED);
+ CheckDlgButton(hwnd,IDC_CHECKST2,ActualNudge->statusFlags & NUDGE_ACC_ST2 ? BST_CHECKED : BST_UNCHECKED);
+ CheckDlgButton(hwnd,IDC_CHECKST3,ActualNudge->statusFlags & NUDGE_ACC_ST3 ? BST_CHECKED : BST_UNCHECKED);
+ CheckDlgButton(hwnd,IDC_CHECKST4,ActualNudge->statusFlags & NUDGE_ACC_ST4 ? BST_CHECKED : BST_UNCHECKED);
+ CheckDlgButton(hwnd,IDC_CHECKST5,ActualNudge->statusFlags & NUDGE_ACC_ST5 ? BST_CHECKED : BST_UNCHECKED);
+ CheckDlgButton(hwnd,IDC_CHECKST6,ActualNudge->statusFlags & NUDGE_ACC_ST6 ? BST_CHECKED : BST_UNCHECKED);
+ CheckDlgButton(hwnd,IDC_CHECKST7,ActualNudge->statusFlags & NUDGE_ACC_ST7 ? BST_CHECKED : BST_UNCHECKED);
+ CheckDlgButton(hwnd,IDC_CHECKST8,ActualNudge->statusFlags & NUDGE_ACC_ST8 ? BST_CHECKED : BST_UNCHECKED);
+ CheckDlgButton(hwnd,IDC_CHECKST9,ActualNudge->statusFlags & NUDGE_ACC_ST9 ? BST_CHECKED : BST_UNCHECKED);
+ SetWindowText(GetDlgItem(hwnd, IDC_SENDTEXT), ActualNudge->senText);
+ SetWindowText(GetDlgItem(hwnd, IDC_RECVTEXT), ActualNudge->recText);
+ }
+}
+
+int GetSelProto(HWND hwnd, HTREEITEM hItem)
+{
+ HWND hLstView = GetDlgItem(hwnd, IDC_PROTOLIST);
+ TVITEM tvi = {0};
+
+ tvi.mask = TVIF_IMAGE;
+ tvi.hItem = hItem == NULL ? TreeView_GetSelection(hLstView) : hItem;
+
+ TreeView_GetItem(hLstView, &tvi);
+
+ return tvi.iImage;
+} \ No newline at end of file
diff --git a/Nudge/options.h b/Nudge/options.h
new file mode 100644
index 0000000..ae658a1
--- /dev/null
+++ b/Nudge/options.h
@@ -0,0 +1,17 @@
+extern HINSTANCE hInst;
+extern NudgeElementList* NudgeList;
+extern int nProtocol;
+extern bool useByProtocol;
+extern CNudgeElement DefaultNudge;
+extern CShake shake;
+extern CNudge GlobalNudge;
+
+static INT_PTR CALLBACK OptionsDlgProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam);
+static INT_PTR CALLBACK DlgProcNudgeOpt(HWND hwnd,UINT msg,WPARAM wParam,LPARAM lParam);
+static INT_PTR CALLBACK DlgProcShakeOpt(HWND hwnd,UINT msg,WPARAM wParam,LPARAM lParam);
+
+void CreateImageList(HWND hWnd);
+void PopulateProtocolList(HWND hWnd);
+void UpdateControls(HWND hwnd);
+int GetSelProto(HWND hwnd, HTREEITEM hItem);
+void CheckChange(HWND hwnd, HTREEITEM hItem);
diff --git a/Nudge/resource.h b/Nudge/resource.h
new file mode 100644
index 0000000..d7691a9
--- /dev/null
+++ b/Nudge/resource.h
@@ -0,0 +1,88 @@
+//{{NO_DEPENDENCIES}}
+// Microsoft Developer Studio generated include file.
+// Used by resource.rc
+//
+#define IDD_DIALOG1 101
+#define IDI_NUDGE 102
+#define IDI_NUGDE_YAHOO 107
+#define IDI_NUDGE_IRC 109
+#define IDI_NUDGE_MSN 110
+#define IDI_NUDGE_TLEN 111
+#define IDI_NUDGE_META 113
+#define IDD_SHAKEOPT 126
+#define IDD_OPT_NUDGE 126
+#define IDD_OPTIONS 127
+#define IDD_OPT_SHAKE 128
+#define IDD_OPT_TRIGGER 129
+#define IDC_BUTTON1 1000
+#define IDC_PREVIEW 1000
+#define IDC_EDIT1 1001
+#define IDC_SENDTEXT 1001
+#define IDC_BUTTON2 1002
+#define IDC_SENDTEXT2 1002
+#define IDC_RECVTEXT 1002
+#define IDC_BUTTON3 1003
+#define IDC_BUTTON4 1004
+#define IDC_BUTTON5 1005
+#define IDC_BUTTON6 1006
+#define IDC_BUTTON7 1007
+#define IDC_USEWINCOLORS 1007
+#define IDC_LABEL_FN 1008
+#define IDC_LABEL_IMAGESIZE 1009
+#define IDC_SLIDER_CLIST 1009
+#define IDC_SNUMBER_CLIST 1009
+#define IDC_SLIDER_CHAT 1010
+#define IDC_SNUMBER_CHAT 1010
+#define IDC_LABEL_ERRSTATE 1011
+#define IDC_OPTIONSTAB 1011
+#define IDC_SSCALE_CLIST 1011
+#define IDC_LABEL_TOTALBLOCKS 1012
+#define IDC_LNUMBER_CLIST 1012
+#define IDC_LABEL_WRITTENBLOCKS 1013
+#define IDC_LABEL_RESULT 1013
+#define IDC_LNUMBER_CHAT 1013
+#define IDC_LSCALE_CLIST 1014
+#define IDC_SSCALE_CHAT 1015
+#define IDC_LSCALE_CHAT 1016
+#define IDC_CHECKCLIST 1018
+#define IDC_CHECKST0 1019
+#define IDC_CHECKST1 1020
+#define IDC_CHECKST2 1021
+#define IDC_CHECKST3 1022
+#define IDC_CHECKST4 1023
+#define IDC_CHECKST5 1024
+#define IDC_CHECKST6 1025
+#define IDC_CHECKST7 1026
+#define IDC_POPUPTEXTCOLOR 1027
+#define IDC_CHECKST8 1028
+#define IDC_CHECKST9 1029
+#define IDC_BGCOLOUR 1030
+#define IDC_PROTOLIST 1031
+#define IDC_TEXTCOLOUR 1032
+#define IDC_USEBYPROTOCOL 1033
+#define IDC_CHECKCHAT2 1034
+#define IDC_CHECKCHAT 1034
+#define IDC_CHECKCOL 1035
+#define IDC_CHECKEVENT 1035
+#define IDC_POPUPBACKCOLOR 1036
+#define IDC_CHECKPOP 1037
+#define IDC_POPUPTIME 1038
+#define IDC_SENDTIME 1039
+#define IDC_RECVTIME 1040
+#define IDC_TRIGGER_SHAKECLIST 1040
+#define IDC_CHECKEVENT2 1041
+#define IDC_CHECKSTATUS 1041
+#define IDC_TRIGGER_SHAKECHAT 1041
+#define IDC_AUTORESEND 1042
+#define IDC_RESENDDELAY 1043
+
+// Next default values for new objects
+//
+#ifdef APSTUDIO_INVOKED
+#ifndef APSTUDIO_READONLY_SYMBOLS
+#define _APS_NEXT_RESOURCE_VALUE 114
+#define _APS_NEXT_COMMAND_VALUE 40001
+#define _APS_NEXT_CONTROL_VALUE 1041
+#define _APS_NEXT_SYMED_VALUE 101
+#endif
+#endif
diff --git a/Nudge/resource.rc b/Nudge/resource.rc
new file mode 100644
index 0000000..b100be9
--- /dev/null
+++ b/Nudge/resource.rc
@@ -0,0 +1,370 @@
+//Microsoft Developer Studio generated resource script.
+//
+#include "resource.h"
+
+#define APSTUDIO_READONLY_SYMBOLS
+/////////////////////////////////////////////////////////////////////////////
+//
+// Generated from the TEXTINCLUDE 2 resource.
+//
+#include "winres.h"
+
+/////////////////////////////////////////////////////////////////////////////
+#undef APSTUDIO_READONLY_SYMBOLS
+
+/////////////////////////////////////////////////////////////////////////////
+// Bulgarian resources
+
+#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_BGR)
+#ifdef _WIN32
+LANGUAGE LANG_BULGARIAN, SUBLANG_DEFAULT
+#pragma code_page(1251)
+#endif //_WIN32
+
+#ifdef APSTUDIO_INVOKED
+/////////////////////////////////////////////////////////////////////////////
+//
+// TEXTINCLUDE
+//
+
+1 TEXTINCLUDE MOVEABLE PURE
+BEGIN
+ "resource.h\0"
+END
+
+2 TEXTINCLUDE MOVEABLE PURE
+BEGIN
+ "#include ""winres.h""\r\n"
+ "\0"
+END
+
+3 TEXTINCLUDE MOVEABLE PURE
+BEGIN
+ "\r\n"
+ "\0"
+END
+
+#endif // APSTUDIO_INVOKED
+
+#endif // Bulgarian resources
+/////////////////////////////////////////////////////////////////////////////
+
+
+/////////////////////////////////////////////////////////////////////////////
+// Neutral resources
+
+#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_NEU)
+#ifdef _WIN32
+LANGUAGE LANG_NEUTRAL, SUBLANG_NEUTRAL
+#pragma code_page(1252)
+#endif //_WIN32
+
+/////////////////////////////////////////////////////////////////////////////
+//
+// Dialog
+//
+
+IDD_OPT_NUDGE DIALOGEX 0, 0, 313, 240
+STYLE DS_FIXEDSYS | DS_CONTROL | WS_CHILD | WS_VISIBLE
+EXSTYLE WS_EX_CONTROLPARENT
+FONT 8, "MS Shell Dlg"
+BEGIN
+ GROUPBOX "Allow nudges when you're:",IDC_STATIC,8,133,157,63
+ CONTROL "Offline",IDC_CHECKST0,"Button",BS_AUTOCHECKBOX |
+ BS_NOTIFY | WS_TABSTOP,13,143,65,9
+ CONTROL "Online",IDC_CHECKST1,"Button",BS_AUTOCHECKBOX |
+ BS_NOTIFY | WS_TABSTOP,13,153,65,9
+ CONTROL "Away",IDC_CHECKST2,"Button",BS_AUTOCHECKBOX | BS_NOTIFY |
+ WS_TABSTOP,13,163,65,9
+ CONTROL "NA",IDC_CHECKST3,"Button",BS_AUTOCHECKBOX | BS_NOTIFY |
+ WS_TABSTOP,13,173,65,9
+ CONTROL "Occupied",IDC_CHECKST4,"Button",BS_AUTOCHECKBOX |
+ BS_NOTIFY | WS_TABSTOP,13,183,65,9
+ CONTROL "DND",IDC_CHECKST5,"Button",BS_AUTOCHECKBOX | BS_NOTIFY |
+ WS_TABSTOP,85,143,70,9
+ CONTROL "Free for chat",IDC_CHECKST6,"Button",BS_AUTOCHECKBOX |
+ BS_NOTIFY | WS_TABSTOP,85,153,70,9
+ CONTROL "Invisible",IDC_CHECKST7,"Button",BS_AUTOCHECKBOX |
+ BS_NOTIFY | WS_TABSTOP,85,163,70,9
+ CONTROL "On the phone",IDC_CHECKST8,"Button",BS_AUTOCHECKBOX |
+ BS_NOTIFY | WS_TABSTOP,85,173,70,9
+ CONTROL "Out to lunch",IDC_CHECKST9,"Button",BS_AUTOCHECKBOX |
+ BS_NOTIFY | WS_TABSTOP,85,183,70,9
+ PUSHBUTTON "Preview",IDC_PREVIEW,265,207,39,12
+ GROUPBOX "Popup options",IDC_STATIC,169,133,140,88
+ CONTROL "Popup notification",IDC_CHECKPOP,"Button",
+ BS_AUTOCHECKBOX | WS_TABSTOP,174,143,121,9
+ EDITTEXT IDC_POPUPTIME,174,163,20,12,ES_AUTOHSCROLL
+ LTEXT "s",IDC_STATIC,196,165,12,8
+ LTEXT "Popup duration",IDC_STATIC,216,165,79,8
+ CONTROL "",IDC_POPUPBACKCOLOR,"ColourPicker",WS_TABSTOP,174,177,
+ 39,12
+ LTEXT "Background colour",IDC_STATIC,216,179,80,8,
+ SS_CENTERIMAGE
+ CONTROL "",IDC_POPUPTEXTCOLOR,"ColourPicker",WS_TABSTOP,174,192,
+ 39,12
+ LTEXT "Text colour",IDC_STATIC,216,193,80,8,SS_CENTERIMAGE
+ CONTROL "&Use Windows colours",IDC_USEWINCOLORS,"Button",
+ BS_AUTOCHECKBOX | BS_NOTIFY | BS_FLAT | WS_TABSTOP,174,
+ 153,121,9
+ CONTROL "",IDC_PROTOLIST,"SysTreeView32",TVS_DISABLEDRAGDROP |
+ TVS_SHOWSELALWAYS | TVS_CHECKBOXES | WS_BORDER |
+ WS_TABSTOP,8,12,105,84
+ GROUPBOX "Protocol options",IDC_STATIC,4,1,309,224
+ CONTROL "Specify options for each protocol",IDC_USEBYPROTOCOL,
+ "Button",BS_AUTOCHECKBOX | WS_TABSTOP,121,10,162,8
+ CONTROL "Enable clist shaking",IDC_CHECKCLIST,"Button",
+ BS_AUTOCHECKBOX | WS_TABSTOP,132,20,147,8
+ CONTROL "Enable message window shaking",IDC_CHECKCHAT,"Button",
+ BS_AUTOCHECKBOX | WS_TABSTOP,132,30,147,8
+ CONTROL "Treat nudge as a message",IDC_CHECKEVENT,"Button",
+ BS_AUTOCHECKBOX | WS_TABSTOP,132,60,147,8
+ EDITTEXT IDC_SENDTEXT,205,70,102,12,ES_AUTOHSCROLL
+ EDITTEXT IDC_RECVTEXT,205,85,102,12,ES_AUTOHSCROLL
+ RTEXT "Sending text",IDC_STATIC,131,73,70,8
+ RTEXT "Receiving text",IDC_STATIC,131,87,70,8
+ RTEXT "Allow sending* one nudge to the same contact every :",
+ IDC_STATIC,13,106,256,8
+ RTEXT "Allow receiving one nudge from the same contact every :",
+ IDC_STATIC,13,120,257,8
+ EDITTEXT IDC_SENDTIME,274,104,17,12,ES_AUTOHSCROLL | ES_READONLY |
+ WS_DISABLED
+ EDITTEXT IDC_RECVTIME,274,118,18,12,ES_AUTOHSCROLL
+ LTEXT "s",IDC_STATIC,293,106,8,8
+ LTEXT "s",IDC_STATIC,293,120,8,8
+ GROUPBOX "Privacy",IDC_STATIC,8,97,301,36
+ CONTROL "Show as status change",IDC_CHECKSTATUS,"Button",
+ BS_AUTOCHECKBOX | WS_TABSTOP,132,40,147,8
+ CONTROL "Auto resend nudge after",IDC_AUTORESEND,"Button",
+ BS_AUTOCHECKBOX | WS_TABSTOP,132,50,147,8
+ EDITTEXT IDC_RESENDDELAY,281,48,18,12,ES_AUTOHSCROLL | ES_NUMBER
+ LTEXT "s",IDC_STATIC,301,50,8,8
+ CTEXT "* Nudge sending delay is hardcoded and cannot be changed.",
+ IDC_STATIC,15,199,141,22,NOT WS_GROUP
+END
+
+IDD_OPTIONS DIALOGEX 0, 0, 319, 249
+STYLE DS_FIXEDSYS | DS_CENTER | WS_CHILD
+EXSTYLE WS_EX_CONTROLPARENT
+FONT 8, "MS Shell Dlg", 0, 0, 0x1
+BEGIN
+ CONTROL "Tab1",IDC_OPTIONSTAB,"SysTabControl32",WS_TABSTOP,0,3,
+ 319,246
+END
+
+IDD_OPT_SHAKE DIALOGEX 0, 0, 300, 240
+STYLE DS_FIXEDSYS | DS_CONTROL | WS_CHILD | WS_VISIBLE
+EXSTYLE WS_EX_CONTROLPARENT
+FONT 8, "MS Shell Dlg", 0, 0, 0x1
+BEGIN
+ GROUPBOX "Shaking Clist Options",IDC_STATIC,7,10,291,96
+ GROUPBOX "Shaking Message Window Options",IDC_STATIC,7,111,291,
+ 101
+ CONTROL "Slider1",IDC_SNUMBER_CLIST,"msctls_trackbar32",
+ TBS_AUTOTICKS | TBS_BOTH | WS_TABSTOP,81,25,179,21
+ RTEXT "Number of moves",IDC_STATIC,13,31,67,9
+ RTEXT "Number of moves",IDC_STATIC,13,140,67,9
+ CONTROL "Slider1",IDC_SNUMBER_CHAT,"msctls_trackbar32",
+ TBS_AUTOTICKS | TBS_BOTH | WS_TABSTOP,81,134,179,21
+ LTEXT "Static",IDC_LNUMBER_CLIST,260,32,25,8
+ LTEXT "Static",IDC_LNUMBER_CHAT,260,141,24,8
+ CONTROL "",IDC_SSCALE_CLIST,"msctls_trackbar32",TBS_AUTOTICKS |
+ TBS_BOTH | WS_TABSTOP,81,47,179,21
+ RTEXT "Width of move",IDC_STATIC,13,52,67,9
+ LTEXT "Static",IDC_LSCALE_CLIST,260,52,25,8
+ CONTROL "",IDC_SSCALE_CHAT,"msctls_trackbar32",TBS_AUTOTICKS |
+ TBS_BOTH | WS_TABSTOP,81,152,179,21
+ RTEXT "Width of move",IDC_STATIC,13,158,67,9
+ LTEXT "Static",IDC_LSCALE_CHAT,260,159,25,8
+END
+
+IDD_OPT_TRIGGER DIALOGEX 0, 0, 319, 249
+STYLE DS_FIXEDSYS | DS_CENTER | WS_CHILD
+EXSTYLE WS_EX_CONTROLPARENT
+FONT 8, "MS Shell Dlg", 0, 0, 0x1
+BEGIN
+ CONTROL "Shake the contact list",IDC_TRIGGER_SHAKECLIST,"Button",
+ BS_AUTOCHECKBOX | WS_TABSTOP,13,20,270,10
+ CONTROL "Shake the chat window",IDC_TRIGGER_SHAKECHAT,"Button",
+ BS_AUTOCHECKBOX | WS_TABSTOP,13,35,270,10
+END
+
+
+/////////////////////////////////////////////////////////////////////////////
+//
+// DESIGNINFO
+//
+
+#ifdef APSTUDIO_INVOKED
+GUIDELINES DESIGNINFO MOVEABLE PURE
+BEGIN
+ IDD_OPT_NUDGE, DIALOG
+ BEGIN
+ LEFTMARGIN, 4
+ VERTGUIDE, 8
+ VERTGUIDE, 85
+ VERTGUIDE, 165
+ VERTGUIDE, 174
+ TOPMARGIN, 1
+ BOTTOMMARGIN, 231
+ HORZGUIDE, 4
+ HORZGUIDE, 10
+ HORZGUIDE, 189
+ HORZGUIDE, 204
+ HORZGUIDE, 225
+ END
+
+ IDD_OPTIONS, DIALOG
+ BEGIN
+ LEFTMARGIN, 7
+ RIGHTMARGIN, 312
+ VERTGUIDE, 13
+ VERTGUIDE, 85
+ VERTGUIDE, 160
+ VERTGUIDE, 307
+ TOPMARGIN, 4
+ BOTTOMMARGIN, 243
+ HORZGUIDE, 5
+ HORZGUIDE, 20
+ HORZGUIDE, 147
+ HORZGUIDE, 157
+ HORZGUIDE, 173
+ HORZGUIDE, 184
+ HORZGUIDE, 207
+ HORZGUIDE, 217
+ HORZGUIDE, 228
+ HORZGUIDE, 239
+ HORZGUIDE, 243
+ END
+
+ IDD_OPT_SHAKE, DIALOG
+ BEGIN
+ LEFTMARGIN, 7
+ RIGHTMARGIN, 293
+ VERTGUIDE, 13
+ VERTGUIDE, 85
+ VERTGUIDE, 160
+ TOPMARGIN, 4
+ BOTTOMMARGIN, 216
+ HORZGUIDE, 5
+ HORZGUIDE, 20
+ HORZGUIDE, 147
+ HORZGUIDE, 157
+ HORZGUIDE, 169
+ HORZGUIDE, 184
+ HORZGUIDE, 207
+ HORZGUIDE, 217
+ END
+
+ IDD_OPT_TRIGGER, DIALOG
+ BEGIN
+ LEFTMARGIN, 7
+ RIGHTMARGIN, 312
+ VERTGUIDE, 13
+ VERTGUIDE, 85
+ VERTGUIDE, 160
+ VERTGUIDE, 307
+ TOPMARGIN, 4
+ BOTTOMMARGIN, 243
+ HORZGUIDE, 5
+ HORZGUIDE, 20
+ HORZGUIDE, 147
+ HORZGUIDE, 157
+ HORZGUIDE, 173
+ HORZGUIDE, 184
+ HORZGUIDE, 207
+ HORZGUIDE, 217
+ HORZGUIDE, 228
+ HORZGUIDE, 239
+ HORZGUIDE, 243
+ END
+END
+#endif // APSTUDIO_INVOKED
+
+#endif // Neutral resources
+/////////////////////////////////////////////////////////////////////////////
+
+
+/////////////////////////////////////////////////////////////////////////////
+// French (Belgium) resources
+
+#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_FRB)
+#ifdef _WIN32
+LANGUAGE LANG_FRENCH, SUBLANG_FRENCH_BELGIAN
+#pragma code_page(1252)
+#endif //_WIN32
+
+#ifndef _MAC
+/////////////////////////////////////////////////////////////////////////////
+//
+// Version
+//
+
+VS_VERSION_INFO VERSIONINFO
+ FILEVERSION 0,0,1,19
+ PRODUCTVERSION 0,0,1,19
+ FILEFLAGSMASK 0x3fL
+#ifdef _DEBUG
+ FILEFLAGS 0x1L
+#else
+ FILEFLAGS 0x0L
+#endif
+ FILEOS 0x40004L
+ FILETYPE 0x2L
+ FILESUBTYPE 0x0L
+BEGIN
+ BLOCK "StringFileInfo"
+ BEGIN
+ BLOCK "000004b0"
+ BEGIN
+ VALUE "Comments", "Plugin that render nudge events from different protocols\0"
+ VALUE "CompanyName", "Miranda community\0"
+ VALUE "FileDescription", "Nudge plugin for Miranda-IM\0"
+ VALUE "FileVersion", "0, 0, 1, 19\0"
+ VALUE "InternalName", "Nudge\0"
+ VALUE "LegalCopyright", "Copyright © 2006\0"
+ VALUE "LegalTrademarks", "\0"
+ VALUE "OriginalFilename", "nudge.dll\0"
+ VALUE "PrivateBuild", "\0"
+ VALUE "ProductName", "nudge\0"
+ VALUE "ProductVersion", "0, 0, 1, 19\0"
+ VALUE "SpecialBuild", "\0"
+ END
+ END
+ BLOCK "VarFileInfo"
+ BEGIN
+ VALUE "Translation", 0x0, 1200
+ END
+END
+
+#endif // !_MAC
+
+
+/////////////////////////////////////////////////////////////////////////////
+//
+// Icon
+//
+
+// Icon with lowest ID value placed first to ensure application icon
+// remains consistent on all systems.
+IDI_NUDGE ICON DISCARDABLE "resources\\Nudge.ico"
+IDI_NUGDE_YAHOO ICON DISCARDABLE "resources\\NudgeYahoo.ico"
+IDI_NUDGE_IRC ICON DISCARDABLE "resources\\NudgeIRC.ico"
+IDI_NUDGE_MSN ICON DISCARDABLE "resources\\NudgeMSN.ico"
+IDI_NUDGE_TLEN ICON DISCARDABLE "resources\\NudgeTlen.ico"
+IDI_NUDGE_META ICON DISCARDABLE "resources\\NudgeMeta.ico"
+#endif // French (Belgium) resources
+/////////////////////////////////////////////////////////////////////////////
+
+
+
+#ifndef APSTUDIO_INVOKED
+/////////////////////////////////////////////////////////////////////////////
+//
+// Generated from the TEXTINCLUDE 3 resource.
+//
+
+
+/////////////////////////////////////////////////////////////////////////////
+#endif // not APSTUDIO_INVOKED
+
diff --git a/Nudge/resources/Nudge.ico b/Nudge/resources/Nudge.ico
new file mode 100644
index 0000000..29d9911
--- /dev/null
+++ b/Nudge/resources/Nudge.ico
Binary files differ
diff --git a/Nudge/resources/NudgeIRC.ico b/Nudge/resources/NudgeIRC.ico
new file mode 100644
index 0000000..f950403
--- /dev/null
+++ b/Nudge/resources/NudgeIRC.ico
Binary files differ
diff --git a/Nudge/resources/NudgeMSN.ico b/Nudge/resources/NudgeMSN.ico
new file mode 100644
index 0000000..c52057b
--- /dev/null
+++ b/Nudge/resources/NudgeMSN.ico
Binary files differ
diff --git a/Nudge/resources/NudgeMeta.ico b/Nudge/resources/NudgeMeta.ico
new file mode 100644
index 0000000..fabd329
--- /dev/null
+++ b/Nudge/resources/NudgeMeta.ico
Binary files differ
diff --git a/Nudge/resources/NudgeTlen.ico b/Nudge/resources/NudgeTlen.ico
new file mode 100644
index 0000000..d4a2c06
--- /dev/null
+++ b/Nudge/resources/NudgeTlen.ico
Binary files differ
diff --git a/Nudge/resources/NudgeYahoo.ico b/Nudge/resources/NudgeYahoo.ico
new file mode 100644
index 0000000..7bed3ca
--- /dev/null
+++ b/Nudge/resources/NudgeYahoo.ico
Binary files differ
diff --git a/Nudge/resources/nudge msn.ico b/Nudge/resources/nudge msn.ico
new file mode 100644
index 0000000..77ad817
--- /dev/null
+++ b/Nudge/resources/nudge msn.ico
Binary files differ
diff --git a/Nudge/shake.cpp b/Nudge/shake.cpp
new file mode 100644
index 0000000..16fca0a
--- /dev/null
+++ b/Nudge/shake.cpp
@@ -0,0 +1,195 @@
+#include "headers.h"
+#include "shake.h"
+
+extern CShake shake;
+
+void CShake::Load(void)
+{
+
+ Shaking = false;
+ ShakingChat = false;
+ nScaleClist = DBGetContactSettingDword(NULL, "Nudge", "ScaleClist", 5);
+ nScaleChat = DBGetContactSettingDword(NULL, "Nudge", "ScaleChat", 2);
+ nMoveClist = DBGetContactSettingDword(NULL, "Nudge", "MoveClist", 15);
+ nMoveChat = DBGetContactSettingDword(NULL, "Nudge", "MoveChat", 15);
+}
+void CShake::Save(void)
+{
+ DBWriteContactSettingDword(NULL, "Nudge", "ScaleClist", this->nScaleClist);
+ DBWriteContactSettingDword(NULL, "Nudge", "ScaleChat", this->nScaleChat);
+ DBWriteContactSettingDword(NULL, "Nudge", "MoveClist", this->nMoveClist);
+ DBWriteContactSettingDword(NULL, "Nudge", "MoveChat", this->nMoveChat);
+}
+
+DWORD WINAPI ShakeChatWindow(LPVOID Param)
+{
+ HWND hWnd;
+ hWnd = (HWND) Param;
+ shake.ShakeChat(hWnd);
+ return 1;
+}
+
+DWORD WINAPI ShakeClistWindow(LPVOID Param)
+{
+ HWND hWnd;
+ hWnd = (HWND) Param;
+ shake.ShakeClist(hWnd);
+ return 0;
+}
+
+INT_PTR ShakeClist( WPARAM wParam, LPARAM lParam )
+{
+ DWORD tid;
+ HWND hWnd;
+ hWnd = (HWND) CallService( MS_CLUI_GETHWND, 0, 0 );
+
+ CreateThread(NULL,0,ShakeClistWindow,(LPVOID) hWnd,0,&tid);
+ return 0;
+}
+
+INT_PTR ShakeChat( WPARAM wParam, LPARAM lParam )
+{
+ if(((HANDLE) wParam) == NULL) return -1;
+
+ DWORD tid;
+ HWND hWnd;
+ //char srmmName[100];
+ MessageWindowData mwd;
+ MessageWindowInputData mwid;
+
+ mwd.cbSize = sizeof(MessageWindowData);
+ mwd.hContact = Nudge_GethContact((HANDLE) wParam);
+ mwd.uFlags = MSG_WINDOW_UFLAG_MSG_BOTH;
+
+ mwid.cbSize = sizeof(MessageWindowInputData);
+ mwid.hContact = mwd.hContact;
+ mwid.uFlags = MSG_WINDOW_UFLAG_MSG_BOTH;
+
+
+ CallService( MS_MSG_GETWINDOWDATA, (WPARAM)&mwid, (LPARAM)&mwd );
+ //CallService(MS_MSG_GETWINDOWCLASS,(WPARAM)srmmName,(LPARAM)100 );
+
+ HWND parent;
+ hWnd = mwd.hwndWindow;
+ while((parent = GetParent(hWnd)) != 0) hWnd = parent; // ensure we have the top level window (need parent window for scriver & tabsrmm)
+
+ CreateThread(NULL,0,ShakeChatWindow,(LPVOID) hWnd,0,&tid);
+ return 0;
+}
+
+/*
+
+int TriggerShakeClist( WPARAM wParam, LPARAM lParam )
+{
+ DWORD tid;
+ HWND hWnd;
+ int flags;
+ flags = (int)wParam;
+
+ if (!flags&ACT_PERFORM)
+ return 0;
+
+ hWnd = (HWND) CallService( MS_CLUI_GETHWND, 0, 0 );
+
+ CreateThread(NULL,0,ShakeClistWindow,(LPVOID) hWnd,0,&tid);
+ return 0;
+}
+
+int TriggerShakeChat( WPARAM wParam, LPARAM lParam )
+{
+ DWORD tid;
+ HWND hWnd;
+ char srmmName[100];
+ MessageWindowData mwd;
+ MessageWindowInputData mwid;
+ int flags;
+ flags = (int)wParam;
+
+ if (!flags&ACT_PERFORM)
+ return 0;
+
+ SPECIFICACTIONINFO *sai;
+ HANDLE hContact;
+
+
+ sai = (SPECIFICACTIONINFO *) lParam;
+
+ if ( (sai->td != NULL) && (sai->td->dFlags&DF_CONTACT) )
+ hContact = sai->td->hContact;
+ else
+ return 0;
+
+ mwd.cbSize = sizeof(MessageWindowData);
+ mwd.hContact = Nudge_GethContact((HANDLE) hContact);
+ mwd.uFlags = MSG_WINDOW_UFLAG_MSG_BOTH;
+
+ mwid.cbSize = sizeof(MessageWindowInputData);
+ mwid.hContact = Nudge_GethContact((HANDLE) hContact);
+ mwid.uFlags = MSG_WINDOW_UFLAG_MSG_BOTH;
+
+ CallService( MS_MSG_GETWINDOWDATA, (WPARAM)&mwid, (LPARAM)&mwd );
+ CallService(MS_MSG_GETWINDOWCLASS,(WPARAM)srmmName,(LPARAM)100 );
+
+ if ( !strnicmp( srmmName,"tabSRMM ", 7 ))
+ hWnd = GetParent(GetParent(mwd.hwndWindow));
+
+ if ( !strnicmp( srmmName,"SRMM ", 4))
+ hWnd = mwd.hwndWindow;
+
+ if ( !strnicmp( srmmName,"Scriver ", 7 ))
+ hWnd = GetParent(mwd.hwndWindow);
+
+ CreateThread(NULL,0,ShakeChatWindow,(LPVOID) hWnd,0,&tid);
+ return 0;
+}
+*/
+
+int CShake::ShakeChat(HWND hWnd)
+{
+ if(!ShakingChat)
+ {
+ Shaking = true;
+ int i;
+ RECT rect;
+ GetWindowRect(hWnd, &rect);
+ for(i = 0; i < nMoveChat; i++)
+ {
+ SetWindowPos(hWnd, 0, rect.left - nScaleChat, rect.top, 0, 0, SWP_NOSIZE);
+ Sleep(10);
+ SetWindowPos(hWnd, 0, rect.left, rect.top - nScaleChat, 0, 0, SWP_NOSIZE);
+ Sleep(10);
+ SetWindowPos(hWnd, 0, rect.left + nScaleChat, rect.top, 0, 0, SWP_NOSIZE);
+ Sleep(10);
+ SetWindowPos(hWnd, 0, rect.left, rect.top + nScaleChat, 0, 0, SWP_NOSIZE);
+ Sleep(10);
+ }
+ SetWindowPos(hWnd, 0, rect.left, rect.top, 0, 0, SWP_NOSIZE); //SWP_DRAWFRAME
+ ShakingChat = false;
+ }
+ return 0;
+}
+
+int CShake::ShakeClist(HWND hWnd)
+{
+ if(!Shaking)
+ {
+ Shaking = true;
+ int i;
+ RECT rect;
+ GetWindowRect(hWnd, &rect);
+ for(i = 0; i < nMoveClist; i++)
+ {
+ SetWindowPos(hWnd, 0, rect.left - nScaleClist, rect.top, 0, 0, SWP_NOSIZE);
+ Sleep(10);
+ SetWindowPos(hWnd, 0, rect.left, rect.top - nScaleClist, 0, 0, SWP_NOSIZE);
+ Sleep(10);
+ SetWindowPos(hWnd, 0, rect.left + nScaleClist, rect.top, 0, 0, SWP_NOSIZE);
+ Sleep(10);
+ SetWindowPos(hWnd, 0, rect.left, rect.top + nScaleClist, 0, 0, SWP_NOSIZE);
+ Sleep(10);
+ }
+ SetWindowPos(hWnd, 0, rect.left, rect.top, 0, 0, SWP_NOSIZE);
+ Shaking = false;
+ }
+ return 0;
+} \ No newline at end of file
diff --git a/Nudge/shake.h b/Nudge/shake.h
new file mode 100644
index 0000000..73e460c
--- /dev/null
+++ b/Nudge/shake.h
@@ -0,0 +1,27 @@
+#ifndef SHAKE_H
+#define SHAKE_H
+
+class CShake
+{
+public:
+ bool Shaking;
+ bool ShakingChat;
+ int nScaleClist;
+ int nScaleChat;
+ int nMoveClist;
+ int nMoveChat;
+
+ void Load(void);
+ void Save(void);
+ int ShakeClist(HWND hWnd);
+ int ShakeChat(HWND hWnd);
+};
+
+INT_PTR ShakeClist(WPARAM,LPARAM);
+INT_PTR ShakeChat(WPARAM,LPARAM);
+/*
+int TriggerShakeChat(WPARAM,LPARAM);
+int TriggerShakeClist(WPARAM,LPARAM);
+int TriggerAction(WPARAM,LPARAM);*/
+
+#endif \ No newline at end of file