summaryrefslogtreecommitdiff
path: root/plugins/StatusChange/src
diff options
context:
space:
mode:
authorKirill Volinsky <mataes2007@gmail.com>2013-03-13 11:06:51 +0000
committerKirill Volinsky <mataes2007@gmail.com>2013-03-13 11:06:51 +0000
commit4f768c2c74564c76410c704a7cd63cf6c5ecda9a (patch)
tree48f7aa39424585de3617dd19f0668eaeba8ab51e /plugins/StatusChange/src
parentac2739c8507026028b1c3558e10668be79f15db4 (diff)
StatusChange plugin adopted
git-svn-id: http://svn.miranda-ng.org/main/trunk@3997 1316c22d-e87f-b044-9b9b-93d7a3e3ba9c
Diffstat (limited to 'plugins/StatusChange/src')
-rw-r--r--plugins/StatusChange/src/Common.h41
-rw-r--r--plugins/StatusChange/src/Version.h14
-rw-r--r--plugins/StatusChange/src/main.cpp356
-rw-r--r--plugins/StatusChange/src/resource.h34
-rw-r--r--plugins/StatusChange/src/stdafx.cpp18
5 files changed, 463 insertions, 0 deletions
diff --git a/plugins/StatusChange/src/Common.h b/plugins/StatusChange/src/Common.h
new file mode 100644
index 0000000000..f7568d19c1
--- /dev/null
+++ b/plugins/StatusChange/src/Common.h
@@ -0,0 +1,41 @@
+#define _CRT_SECURE_NO_WARNINGS
+#define WIN32_LEAN_AND_MEAN
+
+#include <windows.h>
+#include <commctrl.h>
+
+#include <newpluginapi.h>
+#include <m_database.h>
+#include <m_clist.h>
+#include <m_options.h>
+#include <m_skin.h>
+#include <m_langpack.h>
+#include <m_protosvc.h>
+
+#include "resource.h"
+#include "version.h"
+
+#define PLUGINNAME "StatusChange"
+
+typedef struct
+{
+ BOOL MessageRead;
+ BOOL MessageSend;
+ BOOL UrlRead;
+ BOOL UrlSend;
+ BOOL FileRead;
+ BOOL FileSend;
+
+ int ChangeTo; // ID_STATUS_XXX
+
+ BOOL IfOffline;
+ BOOL IfOnline;
+ BOOL IfAway;
+ BOOL IfNA;
+ BOOL IfOccupied;
+ BOOL IfDND;
+ BOOL IfFreeforchat;
+ BOOL IfInvisible;
+ BOOL IfOnthephone;
+ BOOL IfOuttolunch;
+} TOPTIONS;
diff --git a/plugins/StatusChange/src/Version.h b/plugins/StatusChange/src/Version.h
new file mode 100644
index 0000000000..798276bcd4
--- /dev/null
+++ b/plugins/StatusChange/src/Version.h
@@ -0,0 +1,14 @@
+#define __MAJOR_VERSION 1
+#define __MINOR_VERSION 3
+#define __RELEASE_NUM 0
+#define __BUILD_NUM 0
+
+#define __FILEVERSION_STRING __MAJOR_VERSION,__MINOR_VERSION,__RELEASE_NUM,__BUILD_NUM
+
+#define __PLUGIN_NAME "Status change"
+#define __FILENAME "StatusChange.dll"
+#define __DESCRIPTION "Change status when you send/receive and event."
+#define __AUTHOR "Angelo Luiz Tartari"
+#define __AUTHOREMAIL "corsario-br@users.sourceforge.net"
+#define __AUTHORWEB "http://miranda-ng.org/"
+#define __COPYRIGHT "© 2002 Angelo Luiz Tartari"
diff --git a/plugins/StatusChange/src/main.cpp b/plugins/StatusChange/src/main.cpp
new file mode 100644
index 0000000000..18e7802951
--- /dev/null
+++ b/plugins/StatusChange/src/main.cpp
@@ -0,0 +1,356 @@
+#include "Common.h"
+
+HINSTANCE hInst;
+TOPTIONS Options;
+HICON hIconMsg;
+HICON hIconUrl;
+HICON hIconFile;
+int hLangpack;
+
+PLUGININFOEX pluginInfo={
+ sizeof(PLUGININFOEX),
+ __PLUGIN_NAME,
+ PLUGIN_MAKE_VERSION(__MAJOR_VERSION, __MINOR_VERSION, __RELEASE_NUM, __BUILD_NUM),
+ __DESCRIPTION,
+ __AUTHOR,
+ __AUTHOREMAIL,
+ __COPYRIGHT,
+ __AUTHORWEB,
+ UNICODE_AWARE,
+ // {1ACB2ED1-C1ED-43EE-89BD-086686F6EBB5}
+ {0x1acb2ed1, 0xc1ed, 0x43ee, {0x89, 0xbd, 0x8, 0x66, 0x86, 0xf6, 0xeb, 0xb5}}
+};
+
+void LoadOptions()
+{
+ ZeroMemory(&Options, sizeof(Options));
+ Options.MessageRead = (BOOL)db_get_b(NULL, PLUGINNAME, "MessageRead", FALSE);
+ Options.MessageSend = (BOOL)db_get_b(NULL, PLUGINNAME, "MessageSend", TRUE);
+ Options.UrlRead = (BOOL)db_get_b(NULL, PLUGINNAME, "UrlRead", FALSE);
+ Options.UrlSend = (BOOL)db_get_b(NULL, PLUGINNAME, "UrlSend", TRUE);
+ Options.FileRead = (BOOL)db_get_b(NULL, PLUGINNAME, "FileRead", FALSE);
+ Options.FileSend = (BOOL)db_get_b(NULL, PLUGINNAME, "FileSend", TRUE);
+ Options.ChangeTo = (INT)db_get_dw(NULL, PLUGINNAME, "ChangeTo", ID_STATUS_ONLINE);
+ Options.IfOffline = (BOOL)db_get_b(NULL, PLUGINNAME, "IfOffline", FALSE);
+ Options.IfOnline = (BOOL)db_get_b(NULL, PLUGINNAME, "IfOnline", FALSE);
+ Options.IfAway = (BOOL)db_get_b(NULL, PLUGINNAME, "IfAway", TRUE);
+ Options.IfNA = (BOOL)db_get_b(NULL, PLUGINNAME, "IfNA", TRUE);
+ Options.IfOccupied = (BOOL)db_get_b(NULL, PLUGINNAME, "IfOccupied", FALSE);
+ Options.IfDND = (BOOL)db_get_b(NULL, PLUGINNAME, "IfDND", FALSE);
+ Options.IfFreeforchat = (BOOL)db_get_b(NULL, PLUGINNAME, "IfFreeforchat", FALSE);
+ Options.IfInvisible = (BOOL)db_get_b(NULL, PLUGINNAME, "IfInvisible", FALSE);
+ Options.IfOnthephone = (BOOL)db_get_b(NULL, PLUGINNAME, "IfOnthephone", FALSE);
+ Options.IfOuttolunch = (BOOL)db_get_b(NULL, PLUGINNAME, "IfOuttolunch", FALSE);
+}
+
+static int StatusChangeGetMessage(WPARAM wParam, LPARAM lParam)
+{
+ HANDLE hDbEvent = (HANDLE)lParam;
+ DBEVENTINFO dbe;
+ int status;
+ BOOL read, send, change_status;
+
+ dbe.cbSize = sizeof(dbe);
+ dbe.cbBlob = 0;
+ CallService(MS_DB_EVENT_GET, (WPARAM)hDbEvent, (LPARAM)&dbe);
+
+ status = (int)CallProtoService(dbe.szModule, PS_GETSTATUS, 0, 0);
+ if(!status)
+ status = CallService(MS_CLIST_GETSTATUSMODE, 0, 0);
+
+ if(status == Options.ChangeTo)
+ return 0;
+
+ switch (status) {
+ case ID_STATUS_OFFLINE : change_status = Options.IfOffline; break;
+ case ID_STATUS_ONLINE : change_status = Options.IfOnline; break;
+ case ID_STATUS_AWAY : change_status = Options.IfAway; break;
+ case ID_STATUS_NA : change_status = Options.IfNA; break;
+ case ID_STATUS_OCCUPIED : change_status = Options.IfOccupied; break;
+ case ID_STATUS_DND : change_status = Options.IfDND; break;
+ case ID_STATUS_FREECHAT : change_status = Options.IfFreeforchat; break;
+ case ID_STATUS_INVISIBLE : change_status = Options.IfInvisible; break;
+ case ID_STATUS_ONTHEPHONE : change_status = Options.IfOnthephone; break;
+ case ID_STATUS_OUTTOLUNCH : change_status = Options.IfOuttolunch; break;
+ default : change_status = FALSE; break;
+ }
+
+ if (!change_status)
+ return 0;
+
+ switch (dbe.eventType) {
+ case EVENTTYPE_MESSAGE :
+ read = Options.MessageRead;
+ send = Options.MessageSend;
+ break;
+ case EVENTTYPE_URL :
+ read = Options.UrlRead;
+ send = Options.UrlSend;
+ break;
+ case EVENTTYPE_FILE :
+ read = Options.FileRead;
+ send = Options.FileSend;
+ break;
+ break;
+ }
+
+ // If is a message sent...
+ if (((DWORD)(dbe.flags & ((DWORD)DBEF_SENT))) == ((DWORD)(DBEF_SENT))) {
+ if (send) {
+ // change status
+ CallProtoService(dbe.szModule, PS_SETSTATUS, (LPARAM)(Options.ChangeTo), 0);
+ }
+ }
+
+ // If is a message received...
+ else {
+ if (read) {
+ // change status
+ CallProtoService(dbe.szModule, PS_SETSTATUS, (LPARAM)(Options.ChangeTo), 0);
+ }
+ }
+
+ return 0;
+}
+
+static BOOL CALLBACK DlgProcStatusChangeOpts(HWND hwndDlg, UINT msg, WPARAM wParam, LPARAM lParam)
+{
+ switch (msg) {
+ case WM_INITDIALOG:
+ TranslateDialogDefault(hwndDlg);
+
+ hIconMsg = (HICON)CopyImage(LoadSkinnedIcon(SKINICON_EVENT_MESSAGE), IMAGE_ICON, 16, 16, LR_COPYFROMRESOURCE);
+ SendDlgItemMessage(hwndDlg, IDC_MSGICON, STM_SETICON, (WPARAM)hIconMsg, 0);
+ hIconUrl = (HICON)CopyImage(LoadSkinnedIcon(SKINICON_EVENT_URL), IMAGE_ICON, 16, 16, LR_COPYFROMRESOURCE);
+ SendDlgItemMessage(hwndDlg, IDC_URLICON, STM_SETICON, (WPARAM)hIconUrl, 0);
+ hIconFile = (HICON)CopyImage(LoadSkinnedIcon(SKINICON_EVENT_FILE), IMAGE_ICON, 16, 16, LR_COPYFROMRESOURCE);
+ SendDlgItemMessage(hwndDlg, IDC_FILEICON, STM_SETICON, (WPARAM)hIconFile, 0);
+
+ CheckDlgButton(hwndDlg, IDC_CHK_MESSAGEREAD, Options.MessageRead?BST_CHECKED:BST_UNCHECKED);
+ CheckDlgButton(hwndDlg, IDC_CHK_MESSAGESEND, Options.MessageSend?BST_CHECKED:BST_UNCHECKED);
+ CheckDlgButton(hwndDlg, IDC_CHK_URLREAD, Options.UrlRead?BST_CHECKED:BST_UNCHECKED);
+ CheckDlgButton(hwndDlg, IDC_CHK_URLSEND, Options.UrlSend?BST_CHECKED:BST_UNCHECKED);
+ CheckDlgButton(hwndDlg, IDC_CHK_FILEREAD, Options.FileRead?BST_CHECKED:BST_UNCHECKED);
+ CheckDlgButton(hwndDlg, IDC_CHK_FILESEND, Options.FileSend?BST_CHECKED:BST_UNCHECKED);
+
+ switch(Options.ChangeTo) {
+ case ID_STATUS_OFFLINE : CheckDlgButton(hwndDlg, IDC_RAD_OFFLINE, BST_CHECKED); break;
+ case ID_STATUS_ONLINE : CheckDlgButton(hwndDlg, IDC_RAD_ONLINE, BST_CHECKED); break;
+ case ID_STATUS_AWAY : CheckDlgButton(hwndDlg, IDC_RAD_AWAY, BST_CHECKED); break;
+ case ID_STATUS_DND : CheckDlgButton(hwndDlg, IDC_RAD_DND, BST_CHECKED); break;
+ case ID_STATUS_NA : CheckDlgButton(hwndDlg, IDC_RAD_NA, BST_CHECKED); break;
+ case ID_STATUS_OCCUPIED : CheckDlgButton(hwndDlg, IDC_RAD_OCCUPIED, BST_CHECKED); break;
+ case ID_STATUS_FREECHAT : CheckDlgButton(hwndDlg, IDC_RAD_FREECHAT, BST_CHECKED); break;
+ case ID_STATUS_INVISIBLE : CheckDlgButton(hwndDlg, IDC_RAD_INVISIBLE, BST_CHECKED); break;
+ case ID_STATUS_ONTHEPHONE : CheckDlgButton(hwndDlg, IDC_RAD_ONTHEPHONE, BST_CHECKED); break;
+ case ID_STATUS_OUTTOLUNCH : CheckDlgButton(hwndDlg, IDC_RAD_OUTTOLUNCH, BST_CHECKED); break;
+ break;
+ }
+
+ CheckDlgButton(hwndDlg, IDC_CHK_OFFLINE, Options.IfOffline?BST_CHECKED:BST_UNCHECKED);
+ CheckDlgButton(hwndDlg, IDC_CHK_ONLINE, Options.IfOnline?BST_CHECKED:BST_UNCHECKED);
+ CheckDlgButton(hwndDlg, IDC_CHK_AWAY, Options.IfAway?BST_CHECKED:BST_UNCHECKED);
+ CheckDlgButton(hwndDlg, IDC_CHK_DND, Options.IfDND?BST_CHECKED:BST_UNCHECKED);
+ CheckDlgButton(hwndDlg, IDC_CHK_NA, Options.IfNA?BST_CHECKED:BST_UNCHECKED);
+ CheckDlgButton(hwndDlg, IDC_CHK_OCCUPIED, Options.IfOccupied?BST_CHECKED:BST_UNCHECKED);
+ CheckDlgButton(hwndDlg, IDC_CHK_FREECHAT, Options.IfFreeforchat?BST_CHECKED:BST_UNCHECKED);
+ CheckDlgButton(hwndDlg, IDC_CHK_INVISIBLE, Options.IfInvisible?BST_CHECKED:BST_UNCHECKED);
+ CheckDlgButton(hwndDlg, IDC_CHK_ONTHEPHONE, Options.IfOnthephone?BST_CHECKED:BST_UNCHECKED);
+ CheckDlgButton(hwndDlg, IDC_CHK_OUTTOLUNCH, Options.IfOuttolunch?BST_CHECKED:BST_UNCHECKED);
+ return TRUE;
+
+ case WM_COMMAND:
+ switch(LOWORD(wParam)) {
+ case IDC_CHK_MESSAGEREAD:
+ Options.MessageRead = !Options.MessageRead;
+ PostMessage(GetParent(hwndDlg), PSM_CHANGED, 0, 0);
+ break;
+ case IDC_CHK_MESSAGESEND:
+ Options.MessageSend = !Options.MessageSend;
+ PostMessage(GetParent(hwndDlg), PSM_CHANGED, 0, 0);
+ break;
+ case IDC_CHK_URLREAD:
+ Options.UrlRead = !Options.UrlRead;
+ PostMessage(GetParent(hwndDlg), PSM_CHANGED, 0, 0);
+ break;
+ case IDC_CHK_URLSEND:
+ Options.UrlSend = !Options.UrlSend;
+ PostMessage(GetParent(hwndDlg), PSM_CHANGED, 0, 0);
+ break;
+ case IDC_CHK_FILEREAD:
+ Options.FileRead = !Options.FileRead;
+ PostMessage(GetParent(hwndDlg), PSM_CHANGED, 0, 0);
+ break;
+ case IDC_CHK_FILESEND:
+ Options.FileSend = !Options.FileSend;
+ PostMessage(GetParent(hwndDlg), PSM_CHANGED, 0, 0);
+ break;
+
+ case IDC_RAD_OFFLINE:
+ Options.ChangeTo = ID_STATUS_OFFLINE;
+ PostMessage(GetParent(hwndDlg), PSM_CHANGED, 0, 0);
+ break;
+ case IDC_RAD_ONLINE:
+ Options.ChangeTo = ID_STATUS_ONLINE;
+ PostMessage(GetParent(hwndDlg), PSM_CHANGED, 0, 0);
+ break;
+ case IDC_RAD_AWAY:
+ Options.ChangeTo = ID_STATUS_AWAY;
+ PostMessage(GetParent(hwndDlg), PSM_CHANGED, 0, 0);
+ break;
+ case IDC_RAD_DND:
+ Options.ChangeTo = ID_STATUS_DND;
+ PostMessage(GetParent(hwndDlg), PSM_CHANGED, 0, 0);
+ break;
+ case IDC_RAD_NA:
+ Options.ChangeTo = ID_STATUS_NA;
+ PostMessage(GetParent(hwndDlg), PSM_CHANGED, 0, 0);
+ break;
+ case IDC_RAD_OCCUPIED:
+ Options.ChangeTo = ID_STATUS_OCCUPIED;
+ PostMessage(GetParent(hwndDlg), PSM_CHANGED, 0, 0);
+ break;
+ case IDC_RAD_FREECHAT:
+ Options.ChangeTo = ID_STATUS_FREECHAT;
+ PostMessage(GetParent(hwndDlg), PSM_CHANGED, 0, 0);
+ break;
+ case IDC_RAD_INVISIBLE:
+ Options.ChangeTo = ID_STATUS_INVISIBLE;
+ PostMessage(GetParent(hwndDlg), PSM_CHANGED, 0, 0);
+ break;
+ case IDC_RAD_ONTHEPHONE:
+ Options.ChangeTo = ID_STATUS_ONTHEPHONE;
+ PostMessage(GetParent(hwndDlg), PSM_CHANGED, 0, 0);
+ break;
+ case IDC_RAD_OUTTOLUNCH:
+ Options.ChangeTo = ID_STATUS_OUTTOLUNCH;
+ PostMessage(GetParent(hwndDlg), PSM_CHANGED, 0, 0);
+ break;
+
+ case IDC_CHK_OFFLINE:
+ Options.IfOffline = !Options.IfOffline;
+ PostMessage(GetParent(hwndDlg), PSM_CHANGED, 0, 0);
+ break;
+ case IDC_CHK_ONLINE:
+ Options.IfOnline = !Options.IfOnline;
+ PostMessage(GetParent(hwndDlg), PSM_CHANGED, 0, 0);
+ break;
+ case IDC_CHK_AWAY:
+ Options.IfAway = !Options.IfAway;
+ PostMessage(GetParent(hwndDlg), PSM_CHANGED, 0, 0);
+ break;
+ case IDC_CHK_DND:
+ Options.IfDND = !Options.IfDND;
+ PostMessage(GetParent(hwndDlg), PSM_CHANGED, 0, 0);
+ break;
+ case IDC_CHK_NA:
+ Options.IfNA = !Options.IfNA;
+ PostMessage(GetParent(hwndDlg), PSM_CHANGED, 0, 0);
+ break;
+ case IDC_CHK_OCCUPIED:
+ Options.IfOccupied = !Options.IfOccupied;
+ PostMessage(GetParent(hwndDlg), PSM_CHANGED, 0, 0);
+ break;
+ case IDC_CHK_FREECHAT:
+ Options.IfFreeforchat = !Options.IfFreeforchat;
+ PostMessage(GetParent(hwndDlg), PSM_CHANGED, 0, 0);
+ break;
+ case IDC_CHK_INVISIBLE:
+ Options.IfInvisible = !Options.IfInvisible;
+ PostMessage(GetParent(hwndDlg), PSM_CHANGED, 0, 0);
+ break;
+ case IDC_CHK_ONTHEPHONE:
+ Options.IfOnthephone = !Options.IfOnthephone;
+ PostMessage(GetParent(hwndDlg), PSM_CHANGED, 0, 0);
+ break;
+ case IDC_CHK_OUTTOLUNCH:
+ Options.IfOuttolunch = !Options.IfOuttolunch;
+ PostMessage(GetParent(hwndDlg), PSM_CHANGED, 0, 0);
+ break;
+ }
+ break;
+
+ case WM_NOTIFY:
+ switch(((LPNMHDR)lParam)->idFrom) {
+ case 0:
+ switch (((LPNMHDR)lParam)->code) {
+ case PSN_RESET:
+ LoadOptions();
+ return TRUE;
+ case PSN_APPLY:
+ db_set_b(NULL, PLUGINNAME, "MessageRead", (BYTE)Options.MessageRead);
+ db_set_b(NULL, PLUGINNAME, "MessageSend", (BYTE)Options.MessageSend);
+ db_set_b(NULL, PLUGINNAME, "UrlRead", (BYTE)Options.UrlRead);
+ db_set_b(NULL, PLUGINNAME, "UrlSend", (BYTE)Options.UrlSend);
+ db_set_b(NULL, PLUGINNAME, "FileRead", (BYTE)Options.FileRead);
+ db_set_b(NULL, PLUGINNAME, "FileSend", (BYTE)Options.FileSend);
+ db_set_dw(NULL, PLUGINNAME, "ChangeTo", (DWORD)Options.ChangeTo);
+ db_set_b(NULL, PLUGINNAME, "IfOffline", (BYTE)Options.IfOffline);
+ db_set_b(NULL, PLUGINNAME, "IfOnline", (BYTE)Options.IfOnline);
+ db_set_b(NULL, PLUGINNAME, "IfAway", (BYTE)Options.IfAway);
+ db_set_b(NULL, PLUGINNAME, "IfNA", (BYTE)Options.IfNA);
+ db_set_b(NULL, PLUGINNAME, "IfDND", (BYTE)Options.IfDND);
+ db_set_b(NULL, PLUGINNAME, "IfOccupied", (BYTE)Options.IfOccupied);
+ db_set_b(NULL, PLUGINNAME, "IfFreeforchat", (BYTE)Options.IfFreeforchat);
+ db_set_b(NULL, PLUGINNAME, "IfInvisible", (BYTE)Options.IfInvisible);
+ db_set_b(NULL, PLUGINNAME, "IfOnthephone", (BYTE)Options.IfOnthephone);
+ db_set_b(NULL, PLUGINNAME, "IfOuttolunch", (BYTE)Options.IfOuttolunch);
+ return TRUE;
+ break;
+ }
+ break;
+ break;
+ }
+ break;
+
+ case WM_DESTROY:
+ DestroyIcon(hIconMsg);
+ DestroyIcon(hIconUrl);
+ DestroyIcon(hIconFile);
+ break;
+ }
+
+ return FALSE;
+}
+
+int StatusChangeOptInit(WPARAM wParam, LPARAM lParam)
+{
+ OPTIONSDIALOGPAGE odp = {0};
+ odp.cbSize = sizeof(odp);
+ odp.hInstance = hInst;
+ odp.pszTemplate = MAKEINTRESOURCEA(IDD_OPTIONS);
+ odp.ptszTitle = LPGENT("Status Change");
+ odp.ptszGroup = LPGENT("Status");
+ odp.flags = ODPF_BOLDGROUPS | ODPF_TCHAR;
+ odp.pfnDlgProc = DlgProcStatusChangeOpts;
+ Options_AddPage(wParam, &odp);
+ return 0;
+}
+
+BOOL WINAPI DllMain(HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpvReserved)
+{
+ hInst = hinstDLL;
+ return TRUE;
+}
+
+extern "C" __declspec(dllexport) PLUGININFOEX* MirandaPluginInfoEx(DWORD mirandaVersion)
+{
+ return &pluginInfo;
+}
+
+extern "C" __declspec(dllexport) int Load(void)
+{
+ mir_getLP(&pluginInfo);
+
+ HookEvent(ME_OPT_INITIALISE, StatusChangeOptInit);
+ HookEvent(ME_DB_EVENT_ADDED, StatusChangeGetMessage);
+
+ LoadOptions();
+
+ return 0;
+}
+
+extern "C" __declspec(dllexport) int Unload(void)
+{
+ return 0;
+}
diff --git a/plugins/StatusChange/src/resource.h b/plugins/StatusChange/src/resource.h
new file mode 100644
index 0000000000..6d5cd3b318
--- /dev/null
+++ b/plugins/StatusChange/src/resource.h
@@ -0,0 +1,34 @@
+#define IDD_OPTIONS 10
+
+#define IDC_CHK_OFFLINE 1001
+#define IDC_CHK_ONLINE 1002
+#define IDC_CHK_AWAY 1003
+#define IDC_CHK_DND 1004
+#define IDC_CHK_NA 1005
+#define IDC_CHK_OCCUPIED 1006
+#define IDC_CHK_FREECHAT 1007
+#define IDC_CHK_INVISIBLE 1008
+#define IDC_CHK_ONTHEPHONE 1009
+#define IDC_CHK_OUTTOLUNCH 1010
+
+#define IDC_RAD_OFFLINE 2001
+#define IDC_RAD_ONLINE 2002
+#define IDC_RAD_AWAY 2003
+#define IDC_RAD_DND 2004
+#define IDC_RAD_NA 2005
+#define IDC_RAD_OCCUPIED 2006
+#define IDC_RAD_FREECHAT 2007
+#define IDC_RAD_INVISIBLE 2008
+#define IDC_RAD_ONTHEPHONE 2009
+#define IDC_RAD_OUTTOLUNCH 2010
+
+#define IDC_CHK_MESSAGEREAD 3001
+#define IDC_CHK_MESSAGESEND 3002
+#define IDC_CHK_URLREAD 3003
+#define IDC_CHK_URLSEND 3004
+#define IDC_CHK_FILEREAD 3005
+#define IDC_CHK_FILESEND 3006
+
+#define IDC_MSGICON 4001
+#define IDC_URLICON 4002
+#define IDC_FILEICON 4003
diff --git a/plugins/StatusChange/src/stdafx.cpp b/plugins/StatusChange/src/stdafx.cpp
new file mode 100644
index 0000000000..1976d867da
--- /dev/null
+++ b/plugins/StatusChange/src/stdafx.cpp
@@ -0,0 +1,18 @@
+/*
+Copyright (C) 2012-13 Miranda NG Project (http://miranda-ng.org)
+
+This program is free software; you can redistribute it and/or
+modify it under the terms of the GNU General Public License
+as published by the Free Software Foundation version 2
+of the License.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program. If not, see <http://www.gnu.org/licenses/>.
+*/
+
+#include "common.h" \ No newline at end of file