summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTobias Weimer <wishmaster51@googlemail.com>2012-09-28 09:15:13 +0000
committerTobias Weimer <wishmaster51@googlemail.com>2012-09-28 09:15:13 +0000
commit66b6ef801ed593951cddfa6fff1d3fb1b8e61c63 (patch)
treed19a8e7779fc259ee74550e7ec595c8aa414c8f9
parent932bdc1abe0fa63a9d68dea43f5c9a049af56cc0 (diff)
Added QuickContacts
git-svn-id: http://svn.miranda-ng.org/main/trunk@1700 1316c22d-e87f-b044-9b9b-93d7a3e3ba9c
-rw-r--r--plugins/ExternalAPI/m_quickcontacts.h39
-rw-r--r--plugins/QuickContacts/commons.h107
-rw-r--r--plugins/QuickContacts/docs/langpack_quickcontacts.txt40
-rw-r--r--plugins/QuickContacts/docs/quickcontacts.pngbin0 -> 8766 bytes
-rw-r--r--plugins/QuickContacts/docs/quickcontacts_changelog.txt75
-rw-r--r--plugins/QuickContacts/docs/quickcontacts_readme.txt22
-rw-r--r--plugins/QuickContacts/docs/quickcontacts_version.txt1
-rw-r--r--plugins/QuickContacts/options.cpp164
-rw-r--r--plugins/QuickContacts/options.h65
-rw-r--r--plugins/QuickContacts/quickcontacts.cpp1302
-rw-r--r--plugins/QuickContacts/quickcontacts.vcxproj519
-rw-r--r--plugins/QuickContacts/quickcontacts.vcxproj.filters67
-rw-r--r--plugins/QuickContacts/resource.rc179
13 files changed, 2580 insertions, 0 deletions
diff --git a/plugins/ExternalAPI/m_quickcontacts.h b/plugins/ExternalAPI/m_quickcontacts.h
new file mode 100644
index 0000000000..5f8acb3d5e
--- /dev/null
+++ b/plugins/ExternalAPI/m_quickcontacts.h
@@ -0,0 +1,39 @@
+/*
+Copyright (C) 2005 Ricardo Pescuma Domenecci
+
+This is free software; you can redistribute it and/or
+modify it under the terms of the GNU Library General Public
+License as published by the Free Software Foundation; either
+version 2 of the License, or (at your option) any later version.
+
+This 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
+Library General Public License for more details.
+
+You should have received a copy of the GNU Library General Public
+License along with this file; see the file license.txt. If
+not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+Boston, MA 02111-1307, USA.
+*/
+
+
+#ifndef __M_QUICKCONTACTS_H__
+# define __M_QUICKCONTACTS_H__
+
+
+#define MIID_QUICKCONTACTS { 0x5e638aa7, 0x4989, 0x4dbf, { 0x94, 0xa, 0x1e, 0xcb, 0x6c, 0x52, 0xcc, 0x52 } }
+
+
+/*
+Show the dialog to select the contact
+
+wParam: ignored
+lParam: ignored
+*/
+#define MS_QC_SHOW_DIALOG "QuickContacts/ShowDialog"
+
+
+
+
+#endif // __M_QUICKCONTACTS_H__
diff --git a/plugins/QuickContacts/commons.h b/plugins/QuickContacts/commons.h
new file mode 100644
index 0000000000..c53689f1cd
--- /dev/null
+++ b/plugins/QuickContacts/commons.h
@@ -0,0 +1,107 @@
+/*
+Copyright (C) 2006 Ricardo Pescuma Domenecci
+Based on work (C) Heiko Schillinger
+
+This is free software; you can redistribute it and/or
+modify it under the terms of the GNU Library General Public
+License as published by the Free Software Foundation; either
+version 2 of the License, or (at your option) any later version.
+
+This 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
+Library General Public License for more details.
+
+You should have received a copy of the GNU Library General Public
+License along with this file; see the file license.txt. If
+not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+Boston, MA 02111-1307, USA.
+*/
+
+
+#ifndef __COMMONS_H__
+# define __COMMONS_H__
+
+
+#define WINVER 0x0500
+#include <windows.h>
+#include <commctrl.h>
+#include <stdio.h>
+#include <tchar.h>
+
+
+// Miranda headers
+#define MIRANDA_VER 0x0A00
+#include <newpluginapi.h>
+#include <m_system.h>
+#include <m_system_cpp.h>
+#include <m_protocols.h>
+#include <m_protosvc.h>
+#include <m_clist.h>
+#include <m_ignore.h>
+#include <m_contacts.h>
+#include <m_message.h>
+#include <m_userinfo.h>
+#include <m_skin.h>
+#include <m_langpack.h>
+#include <m_database.h>
+#include <m_options.h>
+#include <m_utils.h>
+#include <m_button.h>
+#include <m_file.h>
+#include <m_url.h>
+#include <m_history.h>
+#include <m_metacontacts.h>
+#include <m_MagneticWindows.h>
+#include <m_popup.h>
+#include <m_voice.h>
+#include <m_voiceservice.h>
+#include <m_icolib.h>
+#include <m_hotkeys.h>
+
+#include "../utils/mir_memory.h"
+#include "../utils/mir_options.h"
+#include "../utils/utf8_helpers.h"
+
+#include "resource.h"
+#include "m_quickcontacts.h"
+#include "options.h"
+
+
+#define MODULE_NAME "QuickContacts"
+
+
+// Global Variables
+extern HINSTANCE hInst;
+extern char *metacontacts_proto;
+
+
+#define MAX_REGS(_A_) ( sizeof(_A_) / sizeof(_A_[0]) )
+
+
+
+
+
+// Copied from "../modernb/clc.h" ///////////////////////////////////////////////////////////////////
+
+//add a new hotkey so it has a default and can be changed in the options dialog
+//wParam=0
+//lParam=(LPARAM)(SKINHOTKEYDESC*)ssd;
+//returns 0 on success, nonzero otherwise
+
+typedef struct {
+ int cbSize;
+ const char *pszName; //name to refer to sound when playing and in db
+ const char *pszDescription; //description for options dialog
+ const char *pszSection; //section name used to group sounds (NULL is acceptable)
+ const char *pszService; //Service to call when HotKey Pressed
+
+ int DefHotKey; //default hot key for action
+} SKINHOTKEYDESCEX;
+
+#define MS_SKIN_ADDHOTKEY "Skin/HotKeys/AddNew"
+#define MS_SKIN_PLAYHOTKEY "Skin/HotKeys/Run"
+
+
+
+#endif // __COMMONS_H__
diff --git a/plugins/QuickContacts/docs/langpack_quickcontacts.txt b/plugins/QuickContacts/docs/langpack_quickcontacts.txt
new file mode 100644
index 0000000000..bb3ce09a9e
--- /dev/null
+++ b/plugins/QuickContacts/docs/langpack_quickcontacts.txt
@@ -0,0 +1,40 @@
+; Quick Contacts
+; Author: micron-x, Pescuma
+; http://pescuma.org/miranda/quickcontacts
+
+[Quick Contacts]
+
+; Hotkey description
+[Open dialog]
+[Open Quick Contacts dialog]
+
+; Menu item
+[Quick Contacts...]
+
+; Main dialog
+[Enter Username:]
+[Show all contacts]
+
+; Tooltips
+[Send message]
+[Make a voice call]
+[Send file]
+[Send URL]
+[Open userinfo]
+[Open history]
+[Open contact menu]
+
+; Options
+[Last Sent]
+[Enable last-sent-to]
+[recognize all messages sent]
+[recognize messages sent with hotkey only]
+
+[Contacts]
+[Show offline contacts on these protocols:]
+[But hide them if protocol is offline]
+[Append group name to contact name]
+[But show it as a column ...]
+[... on left side of name]
+[Hide subcontacts]
+[But keep subcontacts of protocols in above list if meta is hidden]
diff --git a/plugins/QuickContacts/docs/quickcontacts.png b/plugins/QuickContacts/docs/quickcontacts.png
new file mode 100644
index 0000000000..0dba1b7277
--- /dev/null
+++ b/plugins/QuickContacts/docs/quickcontacts.png
Binary files differ
diff --git a/plugins/QuickContacts/docs/quickcontacts_changelog.txt b/plugins/QuickContacts/docs/quickcontacts_changelog.txt
new file mode 100644
index 0000000000..bc094700e2
--- /dev/null
+++ b/plugins/QuickContacts/docs/quickcontacts_changelog.txt
@@ -0,0 +1,75 @@
+Quick Contacts
+
+Changelog:
+
+. 1.0.0.0
+ * Fix for group names (closes issue #83)
+ + Handle metacontacts off (closes issue #61)
+ + Show account name
+ * Removed spaces from frame names in options
+
+. 0.0.3.1
+ + Number of contacts is not limited anymore
+
+. 0.0.3.0
+ + Added support for hotkeys module in 0.8 (some texts changed in langpack)
+
+. 0.0.2.9
+ + Added contact icon
+ * Fix when comparing unicode strings
+
+. 0.0.2.8
+ + Added VoiceService support
+
+. 0.0.2.7
+ + Added support for Miranda 0.8
+
+. 0.0.2.6
+ * Fix for crash on exit
+
+. 0.0.2.5
+ + Added contact menu buttom
+
+. 0.0.2.4
+ * Only to fix upload of wrong file to FL
+
+. 0.0.2.3
+ + Added support for Hotkeys+
+ * Now it will register to all hotkey services if found
+
+. 0.0.2.2
+ * Fix for icons
+ * Fix for backspace
+ * -pv- fix
+
+. 0.0.2.1
+ * Try to fix error reported
+ + Support of Hotkey service (if it exists, will be used instead of HotKeys2)
+ + Support for Magnetic windows
+
+. 0.0.2.0
+ - First version in FL
+ * Fix for more than one contact wth same name
+ * Fix to always open the dialog inside a monitor
+
+. 0.0.1.4
+ + Option to show group as a column
+ + Act as double click when pressing enter in the combo
+ + Disable buttons that protocol do not allow
+ * Bug fixes
+
+. 0.0.1.3
+ + Changes in options
+ + Added unicode release
+
+. 0.0.1.2
+ + Option to append group name to contact name
+
+. 0.0.1.1
+ + Checkbox in main dialog works
+ + Option to hide contacts from offline protocols
+ * Fix in getting metacontact status
+
+. 0.0.1.0
+ First verion based on Hotkey plugin
+3.2.1.0 \ No newline at end of file
diff --git a/plugins/QuickContacts/docs/quickcontacts_readme.txt b/plugins/QuickContacts/docs/quickcontacts_readme.txt
new file mode 100644
index 0000000000..b7d8b5b8aa
--- /dev/null
+++ b/plugins/QuickContacts/docs/quickcontacts_readme.txt
@@ -0,0 +1,22 @@
+Quick Contacts plugin
+---------------------
+
+On pressing an user defined hotkey an dialog pops up where you can enter a contacts name or select it from a combobox and send it messages/files/urls an look at his details.
+
+This is a mod of the Hotkey plugin by micron-x
+
+To be able to set the hotkey you need clist_modern (or some other that implements Hotkeys2), Hotkeys+ or HotkeyService.
+
+Available hotkeys:
+- Ctrl-V: Make a voice call
+- Ctrl-F: Send file
+- Ctrl-U: Send URL
+- Ctrl-I: Show userinfo
+- Ctrl-H: Open history
+- Ctrl-M: Open contact menu
+- User defined: Open hotkey dialog
+In Miranda 0.8 all this keys can be configured in options.
+
+To report bugs/make suggestions, go to the forum thread: http://forums.miranda-im.org/showthread.php?t=8797
+
+To report bugs, please create a attache dump using the pdb file (you need to copy to pdb to the same place the dll is) \ No newline at end of file
diff --git a/plugins/QuickContacts/docs/quickcontacts_version.txt b/plugins/QuickContacts/docs/quickcontacts_version.txt
new file mode 100644
index 0000000000..15e048226b
--- /dev/null
+++ b/plugins/QuickContacts/docs/quickcontacts_version.txt
@@ -0,0 +1 @@
+Quick Contacts 1.0.0.0 \ No newline at end of file
diff --git a/plugins/QuickContacts/options.cpp b/plugins/QuickContacts/options.cpp
new file mode 100644
index 0000000000..6154a03ba5
--- /dev/null
+++ b/plugins/QuickContacts/options.cpp
@@ -0,0 +1,164 @@
+/*
+Copyright (C) 2006 Ricardo Pescuma Domenecci
+Based on work (C) Heiko Schillinger
+
+This is free software; you can redistribute it and/or
+modify it under the terms of the GNU Library General Public
+License as published by the Free Software Foundation; either
+version 2 of the License, or (at your option) any later version.
+
+This 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
+Library General Public License for more details.
+
+You should have received a copy of the GNU Library General Public
+License along with this file; see the file license.txt. If
+not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+Boston, MA 02111-1307, USA.
+*/
+
+
+#include "options.h"
+
+
+
+// Prototypes /////////////////////////////////////////////////////////////////////////////////////
+
+HANDLE hOptHook = NULL;
+
+
+Options opts;
+
+static INT_PTR CALLBACK OptionsDlgProc(HWND hwndDlg, UINT msg, WPARAM wParam, LPARAM lParam);
+
+
+
+// Functions //////////////////////////////////////////////////////////////////////////////////////
+
+
+// Initializations needed by options
+void LoadOptions()
+{
+ opts.last_sent_enable = DBGetContactSettingByte(NULL, MODULE_NAME, "EnableLastSentTo", TRUE);
+ opts.last_sent_msg_type = DBGetContactSettingWord(NULL, MODULE_NAME, "MsgTypeRec", TYPE_GLOBAL);
+ opts.hide_from_offline_proto = DBGetContactSettingByte(NULL, MODULE_NAME, "HideOfflineFromOfflineProto", TRUE);
+ opts.group_append = DBGetContactSettingByte(NULL, MODULE_NAME, "AppendGroupName", FALSE);
+ opts.group_column = DBGetContactSettingByte(NULL, MODULE_NAME, "GroupColumn", FALSE);
+ opts.group_column_left = DBGetContactSettingByte(NULL, MODULE_NAME, "GroupColumnLeft", FALSE);
+ opts.hide_subcontacts = DBGetContactSettingByte(NULL, MODULE_NAME, "HideSubcontacts", TRUE);
+ opts.keep_subcontacts_from_offline = DBGetContactSettingByte(NULL, MODULE_NAME, "KeepSubcontactsFromOffline", TRUE);
+}
+
+int InitOptionsCallback(WPARAM wParam,LPARAM lParam)
+{
+ OPTIONSDIALOGPAGE odp;
+
+ ZeroMemory(&odp,sizeof(odp));
+ odp.cbSize=sizeof(odp);
+ odp.position=0;
+ odp.hInstance=hInst;
+ odp.ptszGroup = LPGENT("Plugins");
+ odp.ptszTitle = LPGENT("Quick Contacts");
+ odp.pfnDlgProc = OptionsDlgProc;
+ odp.pszTemplate = MAKEINTRESOURCEA(IDD_OPT);
+ odp.flags = ODPF_BOLDGROUPS | ODPF_EXPERTONLY | ODPF_TCHAR;
+ Options_AddPage(wParam,&odp);
+
+ return 0;
+}
+
+
+void InitOptions()
+{
+ LoadOptions();
+
+ hOptHook = HookEvent(ME_OPT_INITIALISE, InitOptionsCallback);
+}
+
+// Deinitializations needed by options
+void DeInitOptions()
+{
+ UnhookEvent(hOptHook);
+}
+
+// Options page
+
+static OptPageControl controls[] = {
+ { NULL, CONTROL_CHECKBOX, IDC_LASTSENTTO, "EnableLastSentTo", (BYTE) TRUE },
+ { NULL, CONTROL_RADIO, IDC_GLOBAL, "MsgTypeRec", (WORD) TYPE_GLOBAL, TYPE_GLOBAL },
+ { NULL, CONTROL_RADIO, IDC_LOCAL, "MsgTypeRec", (WORD) TYPE_GLOBAL, TYPE_LOCAL },
+ { NULL, CONTROL_PROTOCOL_LIST, IDC_PROTOCOLS, "ShowOffline%s", (BYTE) FALSE },
+ { NULL, CONTROL_CHECKBOX, IDC_HIDE_OFFLINE, "HideOfflineFromOfflineProto", (BYTE) TRUE },
+ { NULL, CONTROL_CHECKBOX, IDC_APPEND_GROUP, "AppendGroupName", (BYTE) FALSE },
+ { NULL, CONTROL_CHECKBOX, IDC_GROUP_COLUMN, "GroupColumn", (BYTE) FALSE },
+ { NULL, CONTROL_CHECKBOX, IDC_GROUP_LEFT, "GroupColumnLeft", (BYTE) FALSE },
+ { NULL, CONTROL_CHECKBOX, IDC_SUBCONTACTS, "HideSubcontacts", (BYTE) TRUE },
+ { NULL, CONTROL_CHECKBOX, IDC_KEEP_OFFLINE, "KeepSubcontactsFromOffline", (BYTE) TRUE }
+};
+
+static INT_PTR CALLBACK OptionsDlgProc(HWND hwndDlg, UINT msg, WPARAM wParam, LPARAM lParam)
+{
+ int ret = SaveOptsDlgProc(controls, MAX_REGS(controls), MODULE_NAME, hwndDlg, msg, wParam, lParam);
+
+ switch (msg)
+ {
+ case WM_INITDIALOG:
+ {
+ BOOL enabled = IsDlgButtonChecked(hwndDlg, IDC_LASTSENTTO);
+ EnableWindow(GetDlgItem(hwndDlg, IDC_GLOBAL), enabled);
+ EnableWindow(GetDlgItem(hwndDlg, IDC_LOCAL), enabled);
+
+ enabled = IsDlgButtonChecked(hwndDlg, IDC_SUBCONTACTS);
+ EnableWindow(GetDlgItem(hwndDlg, IDC_KEEP_OFFLINE), enabled);
+
+ if (metacontacts_proto == NULL)
+ {
+ ShowWindow(GetDlgItem(hwndDlg, IDC_SUBCONTACTS), SW_HIDE);
+ ShowWindow(GetDlgItem(hwndDlg, IDC_KEEP_OFFLINE), SW_HIDE);
+ }
+
+ return TRUE;
+ }
+ case WM_COMMAND:
+ {
+ if(LOWORD(wParam) == IDC_LASTSENTTO)
+ {
+ BOOL enabled = IsDlgButtonChecked(hwndDlg, IDC_LASTSENTTO);
+ EnableWindow(GetDlgItem(hwndDlg, IDC_GLOBAL), enabled);
+ EnableWindow(GetDlgItem(hwndDlg, IDC_LOCAL), enabled);
+ }
+
+ if(LOWORD(wParam) == IDC_SUBCONTACTS)
+ {
+ BOOL enabled = IsDlgButtonChecked(hwndDlg, IDC_SUBCONTACTS);
+ EnableWindow(GetDlgItem(hwndDlg, IDC_KEEP_OFFLINE), enabled);
+ }
+
+ break;
+ }
+ case WM_NOTIFY:
+ {
+ switch (((LPNMHDR)lParam)->idFrom)
+ {
+ case 0:
+ {
+ switch (((LPNMHDR)lParam)->code)
+ {
+ case PSN_APPLY:
+ {
+ LoadOptions();
+
+ return TRUE;
+ }
+ }
+ break;
+ }
+ }
+ break;
+ }
+ }
+
+ return ret;
+}
+
diff --git a/plugins/QuickContacts/options.h b/plugins/QuickContacts/options.h
new file mode 100644
index 0000000000..1036261bbb
--- /dev/null
+++ b/plugins/QuickContacts/options.h
@@ -0,0 +1,65 @@
+/*
+Copyright (C) 2006 Ricardo Pescuma Domenecci
+Based on work (C) Heiko Schillinger
+
+This is free software; you can redistribute it and/or
+modify it under the terms of the GNU Library General Public
+License as published by the Free Software Foundation; either
+version 2 of the License, or (at your option) any later version.
+
+This 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
+Library General Public License for more details.
+
+You should have received a copy of the GNU Library General Public
+License along with this file; see the file license.txt. If
+not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+Boston, MA 02111-1307, USA.
+*/
+
+
+#ifndef __OPTIONS_H__
+# define __OPTIONS_H__
+
+
+#include "commons.h"
+
+#include <windows.h>
+
+
+#define TYPE_GLOBAL 0
+#define TYPE_LOCAL 1
+
+typedef struct
+{
+ BOOL last_sent_enable;
+ int last_sent_msg_type;
+ BOOL hide_from_offline_proto;
+ BOOL hide_subcontacts;
+ BOOL keep_subcontacts_from_offline;
+ BOOL group_append;
+ BOOL group_column;
+ BOOL group_column_left;
+
+ int num_protos;
+} Options;
+
+extern Options opts;
+
+
+// Initializations needed by options
+void InitOptions();
+
+// Deinitializations needed by options
+void DeInitOptions();
+
+
+// Loads the options from DB
+// It don't need to be called, except in some rare cases
+void LoadOptions();
+
+
+
+
+#endif // __OPTIONS_H__
diff --git a/plugins/QuickContacts/quickcontacts.cpp b/plugins/QuickContacts/quickcontacts.cpp
new file mode 100644
index 0000000000..31fb3b835d
--- /dev/null
+++ b/plugins/QuickContacts/quickcontacts.cpp
@@ -0,0 +1,1302 @@
+/*
+Copyright (C) 2006 Ricardo Pescuma Domenecci
+Based on work (C) Heiko Schillinger
+
+This is free software; you can redistribute it and/or
+modify it under the terms of the GNU Library General Public
+License as published by the Free Software Foundation; either
+version 2 of the License, or (at your option) any later version.
+
+This 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
+Library General Public License for more details.
+
+You should have received a copy of the GNU Library General Public
+License along with this file; see the file license.txt. If
+not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+Boston, MA 02111-1307, USA.
+*/
+
+
+#include "commons.h"
+
+
+// Prototypes ///////////////////////////////////////////////////////////////////////////
+
+
+PLUGININFOEX pluginInfo={
+ sizeof(PLUGININFOEX),
+ "Quick Contacts",
+ PLUGIN_MAKE_VERSION(1,0,0,0),
+ "Open contact-specific windows by hotkey",
+ "Ricardo Pescuma Domenecci, Heiko Schillinger",
+ "pescuma@miranda-im.org",
+ "© 2007-2009 Ricardo Pescuma Domenecci",
+ "http://pescuma.org/miranda/quickcontacts",
+ UNICODE_AWARE,
+ { 0xf93ba59c, 0x4f48, 0x4f2e, { 0x8a, 0x91, 0x77, 0xa2, 0x80, 0x15, 0x27, 0xa3 } } // {F93BA59C-4F48-4F2E-8A91-77A2801527A3}
+};
+
+
+HINSTANCE hInst;
+HIMAGELIST hIml;
+int hLangpack = 0;
+
+HANDLE hModulesLoaded = NULL;
+HANDLE hEventAdded = NULL;
+HANDLE hHotkeyPressed = NULL;
+HANDLE hQSShowDialog = NULL;
+
+long main_dialog_open = 0;
+HWND hwndMain = NULL;
+
+int ModulesLoaded(WPARAM wParam, LPARAM lParam);
+int EventAdded(WPARAM wparam, LPARAM lparam);
+int HotkeyPressed(WPARAM wParam, LPARAM lParam);
+INT_PTR ShowDialog(WPARAM wParam,LPARAM lParam);
+void FreeContacts();
+
+int hksModule = 0;
+int hksAction = 0;
+
+BOOL hasNewHotkeyModule = FALSE;
+
+char *metacontacts_proto = NULL;
+
+#define IDC_ICO 12344
+
+
+// Functions ////////////////////////////////////////////////////////////////////////////
+
+
+extern "C" BOOL WINAPI DllMain(HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpvReserved)
+{
+ hInst = hinstDLL;
+ return TRUE;
+}
+
+
+extern "C" __declspec(dllexport) PLUGININFOEX* MirandaPluginInfoEx(DWORD mirandaVersion)
+{
+ return &pluginInfo;
+}
+
+
+static const MUUID interfaces[] = { MIID_QUICKCONTACTS, MIID_LAST };
+extern "C" __declspec(dllexport) const MUUID* MirandaPluginInterfaces(void)
+{
+ return interfaces;
+}
+
+
+extern "C" __declspec(dllexport) int Load()
+{
+ mir_getLP(&pluginInfo);
+
+ hQSShowDialog = CreateServiceFunction(MS_QC_SHOW_DIALOG, ShowDialog);
+
+ // hooks
+ hModulesLoaded = HookEvent(ME_SYSTEM_MODULESLOADED, ModulesLoaded);
+ hEventAdded = HookEvent(ME_DB_EVENT_ADDED, EventAdded);
+
+ return 0;
+}
+
+extern "C" __declspec(dllexport) int Unload(void)
+{
+ FreeContacts();
+
+ DeInitOptions();
+
+ DestroyServiceFunction(hQSShowDialog);
+
+ UnhookEvent(hModulesLoaded);
+ UnhookEvent(hEventAdded);
+
+ return 0;
+}
+
+
+// Called when all the modules are loaded
+int ModulesLoaded(WPARAM wParam, LPARAM lParam)
+{
+ InitOptions();
+
+ // add our modules to the KnownModules list
+ CallService("DBEditorpp/RegisterSingleModule", (WPARAM) MODULE_NAME, 0);
+
+ // Get number of protocols
+ int pcount = 0;
+ PROTOACCOUNT** pdesc;
+
+ ProtoEnumAccounts(&pcount,&pdesc);
+
+ opts.num_protos = 0;
+ for (int loop=0;loop<pcount;loop++)
+ {
+ if (pdesc[loop]->type==PROTOTYPE_PROTOCOL)
+ opts.num_protos++;
+ }
+
+ // Add hotkey to multiple services
+
+ hasNewHotkeyModule = TRUE;
+
+ HOTKEYDESC hkd = {0};
+ hkd.cbSize = sizeof(hkd);
+ hkd.dwFlags = HKD_TCHAR;
+ hkd.pszName = "Quick Contacts/Open dialog";
+ hkd.ptszDescription = LPGENT("Open dialog");
+ hkd.ptszSection = LPGENT("Quick Contacts");
+ hkd.pszService = MS_QC_SHOW_DIALOG;
+ hkd.DefHotKey = HOTKEYCODE(HOTKEYF_CONTROL|HOTKEYF_ALT, 'Q');
+ Hotkey_Register(&hkd);
+
+ hkd.pszService = NULL;
+
+ hkd.lParam = HOTKEY_VOICE;
+ hkd.DefHotKey = HOTKEYCODE(HOTKEYF_CONTROL, 'V');
+ hkd.pszName = "Quick Contacts/Voice";
+ hkd.ptszDescription = LPGENT("Make a voice call");
+ Hotkey_Register(&hkd);
+
+ hkd.lParam = HOTKEY_FILE;
+ hkd.DefHotKey = HOTKEYCODE(HOTKEYF_CONTROL, 'F');
+ hkd.pszName = "Quick Contacts/File";
+ hkd.ptszDescription = LPGENT("Send file");
+ Hotkey_Register(&hkd);
+
+ hkd.lParam = HOTKEY_URL;
+ hkd.DefHotKey = HOTKEYCODE(HOTKEYF_CONTROL, 'U');
+ hkd.pszName = "Quick Contacts/URL";
+ hkd.ptszDescription = LPGENT("Send URL");
+ Hotkey_Register(&hkd);
+
+ hkd.lParam = HOTKEY_INFO;
+ hkd.DefHotKey = HOTKEYCODE(HOTKEYF_CONTROL, 'I');
+ hkd.pszName = "Quick Contacts/Info";
+ hkd.ptszDescription = LPGENT("Open userinfo");
+ Hotkey_Register(&hkd);
+
+ hkd.lParam = HOTKEY_HISTORY;
+ hkd.DefHotKey = HOTKEYCODE(HOTKEYF_CONTROL, 'H');
+ hkd.pszName = "Quick Contacts/History";
+ hkd.ptszDescription = LPGENT("Open history");
+ Hotkey_Register(&hkd);
+
+ hkd.lParam = HOTKEY_MENU;
+ hkd.DefHotKey = HOTKEYCODE(HOTKEYF_CONTROL, 'M');
+ hkd.pszName = "Quick Contacts/Menu";
+ hkd.ptszDescription = LPGENT("Open contact menu");
+ Hotkey_Register(&hkd);
+
+ hkd.lParam = HOTKEY_ALL_CONTACTS;
+ hkd.DefHotKey = HOTKEYCODE(HOTKEYF_CONTROL, 'A');
+ hkd.pszName = "Quick Contacts/All Contacts";
+ hkd.ptszDescription = LPGENT("Show all contacts");
+ Hotkey_Register(&hkd);
+
+ if (ServiceExists(MS_SKIN_ADDHOTKEY))
+ {
+ SKINHOTKEYDESCEX hk = {0};
+ hk.cbSize = sizeof(hk);
+ hk.pszSection = Translate("Quick Contacts");
+ hk.pszName = Translate("Open dialog");
+ hk.pszDescription = Translate("Open dialog");
+ hk.pszService = MS_QC_SHOW_DIALOG;
+ hk.DefHotKey = 0;
+ CallService(MS_SKIN_ADDHOTKEY, 0, (LPARAM)&hk);
+ }
+
+ // Get the icons for the listbox
+ hIml = (HIMAGELIST)CallService(MS_CLIST_GETICONSIMAGELIST,0,0);
+
+ // Add menu item
+ CLISTMENUITEM mi;
+ ZeroMemory(&mi,sizeof(mi));
+ mi.cbSize = sizeof(mi);
+ mi.position = 500100001;
+ mi.flags = CMIF_TCHAR;
+ mi.ptszName = LPGENT("Quick Contacts...");
+ mi.pszService = MS_QC_SHOW_DIALOG;
+ Menu_AddMainMenuItem(&mi);
+
+ if (ServiceExists(MS_MC_GETPROTOCOLNAME) && ServiceExists(MS_MC_GETMETACONTACT))
+ metacontacts_proto = (char *) CallService(MS_MC_GETPROTOCOLNAME, 0, 0);
+
+ return 0;
+}
+
+
+// called when a message/file/url was sent
+// handle of contact is set as window-userdata
+int EventAdded(WPARAM wparam, LPARAM lparam)
+{
+ DBEVENTINFO dbei;
+
+ ZeroMemory(&dbei,sizeof(dbei));
+ dbei.cbSize=sizeof(dbei);
+ dbei.cbBlob=0;
+
+ CallService(MS_DB_EVENT_GET,lparam,(LPARAM)&dbei);
+
+ if( !(dbei.flags & DBEF_SENT)
+ || dbei.flags & DBEF_READ
+ || !DBGetContactSettingByte(NULL, MODULE_NAME, "EnableLastSentTo", 0)
+ || DBGetContactSettingWord(NULL, MODULE_NAME, "MsgTypeRec", TYPE_GLOBAL) != TYPE_GLOBAL)
+ return 0;
+
+ DBWriteContactSettingDword(NULL, MODULE_NAME, "LastSentTo", (DWORD)(HANDLE)wparam);
+ return 0;
+}
+
+
+/////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+/////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+/////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+
+
+#define IDC_ENTER 2000 // Pseudo control to handle enter in the main window
+
+
+// array where the contacts are put into
+struct c_struct {
+ TCHAR szname[120];
+ TCHAR szgroup[50];
+ HANDLE hcontact;
+ TCHAR proto[20];
+
+ c_struct()
+ {
+ szname[0] = 0;
+ szgroup[0] = 0;
+ hcontact = 0;
+ proto[0] = 0;
+ }
+};
+
+LIST<c_struct> contacts(200);
+long max_proto_width;
+
+
+// Get the name the contact has in list
+// This was not made to be called by more than one thread!
+TCHAR tmp_list_name[120];
+
+TCHAR *GetListName(c_struct *cs)
+{
+ if (opts.group_append && cs->szgroup[0] != _T('\0'))
+ {
+ mir_sntprintf(tmp_list_name, MAX_REGS(tmp_list_name), _T("%s (%s)"), cs->szname, cs->szgroup);
+ return tmp_list_name;
+ }
+ else
+ {
+ return cs->szname;
+ }
+}
+
+
+int lstreq(TCHAR *a, TCHAR *b, size_t len = -1)
+{
+#ifdef UNICODE
+ a = CharLower(_tcsdup(a));
+ b = CharLower(_tcsdup(b));
+ int ret;
+ if (len > 0)
+ ret = _tcsncmp(a, b, len);
+ else
+ ret = _tcscmp(a, b);
+ free(a);
+ free(b);
+ return ret;
+#else
+ if (len > 0)
+ return _tcsnicmp(a, b, len);
+ else
+ return _tcsicmp(a, b);
+#endif
+}
+
+
+// simple sorting function to have
+// the contact array in alphabetical order
+void SortArray(void)
+{
+ int loop,doop;
+ c_struct *cs_temp;
+
+ SortedList *sl = (SortedList *) &contacts;
+ for(loop=0;loop<contacts.getCount();loop++)
+ {
+ for(doop=loop+1;doop<contacts.getCount();doop++)
+ {
+ int cmp = lstreq(contacts[loop]->szname,contacts[doop]->szname);
+ if (cmp > 0)
+ {
+ cs_temp=contacts[loop];
+ sl->items[loop]=contacts[doop];
+ sl->items[doop]=cs_temp;
+ }
+ else if (cmp == 0)
+ {
+ if(lstreq(contacts[loop]->proto, contacts[doop]->proto) > 0)
+ {
+ cs_temp=contacts[loop];
+ sl->items[loop]=contacts[doop];
+ sl->items[doop]=cs_temp;
+ }
+ }
+
+ }
+ }
+}
+
+
+int GetStatus(HANDLE hContact, char *proto = NULL)
+{
+ if (proto == NULL)
+ proto = (char *) CallService(MS_PROTO_GETCONTACTBASEPROTO, (WPARAM) hContact, 0);
+
+ if (proto == NULL)
+ return ID_STATUS_OFFLINE;
+
+ return DBGetContactSettingWord(hContact, proto, "Status", ID_STATUS_OFFLINE);
+}
+
+
+void FreeContacts()
+{
+ for (int i = contacts.getCount() - 1; i >= 0; i--)
+ {
+ delete contacts[i];
+ contacts.remove(i);
+ }
+}
+
+
+void LoadContacts(HWND hwndDlg, BOOL show_all)
+{
+ BOOL hasAccounts = ServiceExists(MS_PROTO_GETACCOUNT);
+ BOOL metacontactsEnabled = (metacontacts_proto != NULL
+ && DBGetContactSettingByte(0, metacontacts_proto, "Enabled", 1));
+
+ // Read last-sent-to contact from db and set handle as window-userdata
+ HANDLE hlastsent = (HANDLE)DBGetContactSettingDword(NULL, MODULE_NAME, "LastSentTo", -1);
+ SetWindowLongPtr(hwndMain, GWLP_USERDATA, (LONG)hlastsent);
+
+ // enumerate all contacts and write them to the array
+ // item data of listbox-strings is the array position
+ FreeContacts();
+ for(HANDLE hContact = (HANDLE)CallService(MS_DB_CONTACT_FINDFIRST,0,0);
+ hContact != NULL;
+ hContact = (HANDLE)CallService(MS_DB_CONTACT_FINDNEXT,(WPARAM)hContact,0))
+ {
+ char *pszProto = (char *) CallService(MS_PROTO_GETCONTACTBASEPROTO, (WPARAM)hContact, 0);
+ if(pszProto != NULL)
+ {
+ // Get meta
+ HANDLE hMeta = NULL;
+ if (metacontactsEnabled)
+ {
+ if ((!show_all && opts.hide_subcontacts) || opts.group_append)
+ hMeta = (HANDLE) CallService(MS_MC_GETMETACONTACT, (WPARAM)hContact, 0);
+ }
+ else
+ {
+ if (metacontacts_proto != NULL && strcmp(metacontacts_proto, pszProto) == 0)
+ continue;
+ }
+
+
+ if (!show_all)
+ {
+ // Check if is offline and have to show
+ if (GetStatus(hContact, pszProto) <= ID_STATUS_OFFLINE)
+ {
+ // See if has to show
+ char setting[128];
+ mir_snprintf(setting, sizeof(setting), "ShowOffline%s", pszProto);
+
+ if (!DBGetContactSettingByte(NULL, MODULE_NAME, setting, FALSE))
+ continue;
+
+ // Check if proto offline
+ else if (opts.hide_from_offline_proto
+ && CallProtoService(pszProto, PS_GETSTATUS, 0, 0) <= ID_STATUS_OFFLINE)
+ continue;
+
+ }
+
+ // Check if is subcontact
+ if (opts.hide_subcontacts && hMeta != NULL)
+ {
+ if (!opts.keep_subcontacts_from_offline)
+ continue;
+
+ if (GetStatus(hMeta, metacontacts_proto) > ID_STATUS_OFFLINE)
+ {
+ continue;
+ }
+ else
+ {
+ char setting[128];
+ mir_snprintf(setting, sizeof(setting), "ShowOffline%s", metacontacts_proto);
+ if (DBGetContactSettingByte(NULL, MODULE_NAME, setting, FALSE))
+ continue;
+ }
+ }
+ }
+
+ // Add to list
+
+ // Get group
+ c_struct *contact = new c_struct();
+
+ if (opts.group_append)
+ {
+ DBVARIANT dbv;
+ if (DBGetContactSettingTString(hMeta == NULL ? hContact : hMeta, "CList", "Group", &dbv) == 0)
+ {
+ if (dbv.ptszVal != NULL)
+ lstrcpyn(contact->szgroup, dbv.ptszVal, MAX_REGS(contact->szgroup));
+
+ DBFreeVariant(&dbv);
+ }
+ }
+
+ // Make contact name
+ TCHAR *tmp = (TCHAR *) CallService(MS_CLIST_GETCONTACTDISPLAYNAME, (WPARAM) hContact, GCDNF_TCHAR);
+ lstrcpyn(contact->szname, tmp, MAX_REGS(contact->szname));
+
+ PROTOACCOUNT *acc = (hasAccounts ? ProtoGetAccount(pszProto) : NULL);
+ if (acc != NULL)
+ {
+ lstrcpyn(contact->proto, acc->tszAccountName, MAX_REGS(contact->proto));
+ }
+ else
+ {
+ char szName[128];
+ CallProtoService(pszProto, PS_GETNAME, sizeof(szName), (LPARAM) szName);
+ lstrcpyn(contact->proto, CharToTchar(szName), MAX_REGS(contact->proto));
+ }
+
+ contact->hcontact = hContact;
+
+ contacts.insert(contact);
+ }
+ }
+
+ SortArray();
+
+ SendDlgItemMessage(hwndDlg, IDC_USERNAME, CB_RESETCONTENT, 0, 0);
+ for(int loop = 0; loop < contacts.getCount(); loop++)
+ {
+ SendDlgItemMessage(hwndDlg, IDC_USERNAME, CB_SETITEMDATA,
+ (WPARAM)SendDlgItemMessage(hwndDlg, IDC_USERNAME,
+ CB_ADDSTRING, 0, (LPARAM) GetListName(contacts[loop])),
+ (LPARAM)loop);
+ }
+}
+
+
+// Enable buttons for the selected contact
+void EnableButtons(HWND hwndDlg, HANDLE hContact)
+{
+ if (hContact == NULL)
+ {
+ EnableWindow(GetDlgItem(hwndDlg, IDC_MESSAGE), FALSE);
+ EnableWindow(GetDlgItem(hwndDlg, IDC_VOICE), FALSE);
+ EnableWindow(GetDlgItem(hwndDlg, IDC_FILE), FALSE);
+ EnableWindow(GetDlgItem(hwndDlg, IDC_URL), FALSE);
+ EnableWindow(GetDlgItem(hwndDlg, IDC_USERINFO), FALSE);
+ EnableWindow(GetDlgItem(hwndDlg, IDC_HISTORY), FALSE);
+ EnableWindow(GetDlgItem(hwndDlg, IDC_MENU), FALSE);
+
+ SendMessage(GetDlgItem(hwndDlg, IDC_ICO), STM_SETICON, 0, 0);
+ }
+ else
+ {
+ // Is a meta?
+ if (ServiceExists(MS_MC_GETMOSTONLINECONTACT))
+ {
+ HANDLE hSub = (HANDLE) CallService(MS_MC_GETMOSTONLINECONTACT, (WPARAM) hContact, 0);
+ if (hSub != NULL)
+ hContact = hSub;
+ }
+
+ // Get caps
+ int caps = 0;
+
+ char *pszProto = (char *) CallService(MS_PROTO_GETCONTACTBASEPROTO, (WPARAM)hContact, 0);
+ if (pszProto != NULL)
+ caps = CallProtoService(pszProto, PS_GETCAPS, PFLAGNUM_1, 0);
+
+ BOOL voice = (ServiceExists(MS_VOICESERVICE_CAN_CALL)
+ && CallService(MS_VOICESERVICE_CAN_CALL, (WPARAM)hContact, 0) > 0);
+
+ EnableWindow(GetDlgItem(hwndDlg, IDC_MESSAGE), caps & PF1_IMSEND ? TRUE : FALSE);
+ EnableWindow(GetDlgItem(hwndDlg, IDC_VOICE), voice);
+ EnableWindow(GetDlgItem(hwndDlg, IDC_FILE), caps & PF1_FILESEND ? TRUE : FALSE);
+ EnableWindow(GetDlgItem(hwndDlg, IDC_URL), caps & PF1_URLSEND ? TRUE : FALSE);
+ EnableWindow(GetDlgItem(hwndDlg, IDC_USERINFO), TRUE);
+ EnableWindow(GetDlgItem(hwndDlg, IDC_HISTORY), TRUE);
+ EnableWindow(GetDlgItem(hwndDlg, IDC_MENU), TRUE);
+
+ HICON ico = ImageList_GetIcon(hIml, CallService(MS_CLIST_GETCONTACTICON, (WPARAM) hContact, 0), ILD_IMAGE);
+ SendMessage(GetDlgItem(hwndDlg, IDC_ICO), STM_SETICON, (WPARAM) ico, 0);
+ }
+}
+
+
+// check if the char(s) entered appears in a contacts name
+int CheckText(HWND hdlg, TCHAR *sztext, BOOL only_enable = FALSE)
+{
+ EnableButtons(hwndMain, NULL);
+
+ if(sztext == NULL || sztext[0] == _T('\0'))
+ return 0;
+
+ int len = lstrlen(sztext);
+
+ if (only_enable)
+ {
+ for(int loop=0;loop<contacts.getCount();loop++)
+ {
+ if(lstreq(sztext, contacts[loop]->szname)==0 || lstreq(sztext, GetListName(contacts[loop]))==0)
+ {
+ EnableButtons(hwndMain, contacts[loop]->hcontact);
+ return 0;
+ }
+ }
+ }
+ else
+ {
+ for(int loop=0;loop<contacts.getCount();loop++)
+ {
+ if (lstreq(sztext, GetListName(contacts[loop]), len) == 0)
+ {
+ SendMessage(hdlg, WM_SETTEXT, 0, (LPARAM) GetListName(contacts[loop]));
+ SendMessage(hdlg, EM_SETSEL, (WPARAM) len, (LPARAM) -1);
+ EnableButtons(hwndMain, contacts[loop]->hcontact);
+ return 0;
+ }
+ }
+ }
+
+ EnableButtons(hwndMain, NULL);
+ return 0;
+}
+
+HANDLE GetSelectedContact(HWND hwndDlg)
+{
+ // First try selection
+ int sel = SendDlgItemMessage(hwndDlg, IDC_USERNAME, CB_GETCURSEL, 0, 0);
+
+ if (sel != CB_ERR)
+ {
+ int pos = SendDlgItemMessage(hwndDlg, IDC_USERNAME, CB_GETITEMDATA, sel, 0);
+ if (pos != CB_ERR)
+ return contacts[pos]->hcontact;
+ }
+
+ // Now try the name
+ TCHAR cname[120] = _T("");
+
+ GetDlgItemText(hwndDlg, IDC_USERNAME, cname, MAX_REGS(cname));
+
+ for(int loop = 0; loop < contacts.getCount(); loop++)
+ {
+ if(!lstrcmpi(cname, GetListName(contacts[loop])))
+ return contacts[loop]->hcontact;
+ }
+
+ return NULL;
+}
+
+// get array position from handle
+int GetItemPos(HANDLE hcontact)
+{
+ int loop;
+
+ for(loop=0;loop<contacts.getCount();loop++)
+ {
+ if(hcontact==contacts[loop]->hcontact)
+ return loop;
+ }
+ return -1;
+}
+
+
+WNDPROC wpEditMainProc;
+
+// callback function for edit-box of the listbox
+// without this the autofill function isn't possible
+// this was done like ie does it..as far as spy++ could tell ;)
+LRESULT CALLBACK EditProc(HWND hdlg,UINT msg,WPARAM wparam,LPARAM lparam)
+{
+ switch(msg)
+ {
+ case WM_CHAR:
+ {
+ if (wparam<32 && wparam != VK_BACK)
+ break;
+
+ TCHAR sztext[120] = _T("");
+ DWORD start;
+ DWORD end;
+
+ int ret = SendMessage(hdlg,EM_GETSEL,(WPARAM)&start,(LPARAM)&end);
+
+ SendMessage(hdlg,WM_GETTEXT,(WPARAM)MAX_REGS(sztext),(LPARAM)sztext);
+
+ BOOL at_end = (lstrlen(sztext) == (int)end);
+
+ if (ret != -1)
+ {
+ if (wparam == VK_BACK)
+ {
+ if (start > 0)
+ SendMessage(hdlg,EM_SETSEL,(WPARAM)start-1,(LPARAM)end);
+
+ sztext[0]=0;
+ }
+ else
+ {
+ sztext[0]=wparam;
+ sztext[1]=0;
+ }
+
+ SendMessage(hdlg,EM_REPLACESEL,(WPARAM)0,(LPARAM)sztext);
+ SendMessage(hdlg,WM_GETTEXT,(WPARAM)MAX_REGS(sztext),(LPARAM)sztext);
+ }
+
+ CheckText(hdlg, sztext, !at_end);
+
+ return 1;
+ }
+ case WM_KEYUP:
+ {
+ TCHAR sztext[120] = _T("");
+
+ if (wparam == VK_RETURN)
+ {
+ switch(SendMessage(GetParent(hdlg),CB_GETDROPPEDSTATE,0,0))
+ {
+ case FALSE:
+ SendMessage(GetParent(GetParent(hdlg)),WM_COMMAND,MAKEWPARAM(IDC_ENTER,STN_CLICKED),0);
+ break;
+
+ case TRUE:
+ SendMessage(GetParent(hdlg),CB_SHOWDROPDOWN,(WPARAM)FALSE,0);
+ break;
+ }
+ }
+ else if (wparam == VK_DELETE)
+ {
+ SendMessage(hdlg,WM_GETTEXT,(WPARAM)MAX_REGS(sztext),(LPARAM)sztext);
+ CheckText(hdlg, sztext, TRUE);
+ }
+
+ return 0;
+ }
+ case WM_GETDLGCODE:
+ return DLGC_WANTCHARS|DLGC_WANTARROWS;
+
+ }
+
+ return CallWindowProc(wpEditMainProc,hdlg,msg,wparam,lparam);
+}
+
+
+HACCEL hAcct;
+HHOOK hHook;
+
+// This function filters the message queue and translates
+// the keyboard accelerators
+LRESULT CALLBACK HookProc(int code, WPARAM wparam, LPARAM lparam)
+{
+ MSG *msg;
+ HWND htemp;
+
+ if (code!=MSGF_DIALOGBOX)
+ return 0;
+
+ msg = (MSG*)lparam;
+
+
+ if (hasNewHotkeyModule)
+ {
+ int action = CallService(MS_HOTKEY_CHECK, (WPARAM) msg, (LPARAM) "Quick Contacts");
+ if (action != 0)
+ {
+ SendMessage(hwndMain, WM_COMMAND, action, 0);
+ return 1;
+ }
+ }
+ else
+ {
+ htemp = msg->hwnd;
+ msg->hwnd = hwndMain;
+
+ if (TranslateAccelerator(msg->hwnd, hAcct, msg))
+ return 1;
+
+ msg->hwnd=htemp;
+ }
+
+ if (msg->message == WM_KEYDOWN && msg->wParam == VK_ESCAPE)
+ {
+ switch(SendMessage(GetDlgItem(hwndMain, IDC_USERNAME), CB_GETDROPPEDSTATE, 0, 0))
+ {
+ case FALSE:
+ SendMessage(hwndMain, WM_CLOSE, 0, 0);
+ break;
+
+ case TRUE:
+ SendMessage(GetDlgItem(hwndMain, IDC_USERNAME), CB_SHOWDROPDOWN, (WPARAM)FALSE, 0);
+ break;
+ }
+ }
+
+ return 0;
+}
+
+BOOL ScreenToClient(HWND hWnd, LPRECT lpRect)
+{
+ BOOL ret;
+
+ POINT pt;
+
+ pt.x = lpRect->left;
+ pt.y = lpRect->top;
+
+ ret = ScreenToClient(hWnd, &pt);
+
+ if (!ret) return ret;
+
+ lpRect->left = pt.x;
+ lpRect->top = pt.y;
+
+
+ pt.x = lpRect->right;
+ pt.y = lpRect->bottom;
+
+ ret = ScreenToClient(hWnd, &pt);
+
+ lpRect->right = pt.x;
+ lpRect->bottom = pt.y;
+
+ return ret;
+}
+
+
+BOOL MoveWindow(HWND hWnd, const RECT &rect, BOOL bRepaint)
+{
+ return MoveWindow(hWnd, rect.left, rect.top, rect.right - rect.left, rect.bottom - rect.top, bRepaint);
+}
+
+
+static void FillButton(HWND hwndDlg, int dlgItem, char *name, char *key, HICON icon)
+{
+ char tmp[256];
+ char *full;
+ if (key == NULL)
+ full = Translate(name);
+ else
+ mir_snprintf(full = tmp, MAX_REGS(tmp), "%s (%s)", Translate(name), key);
+
+ SendMessage(GetDlgItem(hwndDlg, dlgItem), BUTTONSETASFLATBTN, 0, 0);
+ SendMessageA(GetDlgItem(hwndDlg, dlgItem), BUTTONADDTOOLTIP, (LPARAM) full, 0);
+ SendDlgItemMessage(hwndDlg, dlgItem, BM_SETIMAGE, IMAGE_ICON, (LPARAM) icon);
+}
+
+
+static void FillCheckbox(HWND hwndDlg, int dlgItem, char *name, char *key)
+{
+ char tmp[256];
+ char *full;
+ if (key == NULL)
+ full = Translate(name);
+ else
+ mir_snprintf(full = tmp, MAX_REGS(tmp), "%s (%s)", Translate(name), key);
+
+ SendMessageA(GetDlgItem(hwndDlg, dlgItem), WM_SETTEXT, 0, (LPARAM) full);
+}
+
+
+static INT_PTR CALLBACK MainDlgProc(HWND hwndDlg, UINT msg, WPARAM wParam, LPARAM lParam)
+{
+ switch (msg)
+ {
+ case WM_INITDIALOG:
+ {
+ TranslateDialogDefault(hwndDlg);
+
+ RECT rc;
+ GetWindowRect(GetDlgItem(hwndDlg, IDC_USERNAME), &rc);
+ ScreenToClient(hwndDlg, &rc);
+
+ HWND icon = CreateWindow(_T("STATIC"), _T(""), WS_CHILD | WS_VISIBLE | SS_ICON | SS_CENTERIMAGE,
+ rc.left - 20, rc.top + (rc.bottom - rc.top - 16) / 2, 16, 16, hwndDlg, (HMENU) IDC_ICO,
+ hInst, NULL);
+
+ if (!hasNewHotkeyModule)
+ hAcct = LoadAccelerators(hInst, MAKEINTRESOURCE(ACCEL_TABLE));
+
+ hHook = SetWindowsHookEx(WH_MSGFILTER, HookProc, hInst, GetCurrentThreadId());
+
+ // Combo
+ SendMessage(GetDlgItem(hwndDlg, IDC_USERNAME), EM_LIMITTEXT, (WPARAM)119,0);
+ wpEditMainProc = (WNDPROC) SetWindowLongPtr(GetWindow(GetDlgItem(hwndDlg, IDC_USERNAME),GW_CHILD), GWLP_WNDPROC, (LONG)EditProc);
+
+ // Buttons
+ FillCheckbox(hwndDlg, IDC_SHOW_ALL_CONTACTS, "Show all contacts", hasNewHotkeyModule ? NULL : "Ctrl+A");
+ FillButton(hwndDlg, IDC_MESSAGE, "Send message", NULL, LoadSkinnedIcon(SKINICON_EVENT_MESSAGE));
+
+ if (ServiceExists(MS_VOICESERVICE_CAN_CALL))
+ {
+ FillButton(hwndDlg, IDC_VOICE, "Make a voice call", hasNewHotkeyModule ? NULL : "Ctrl+V", (HICON) CallService(MS_SKIN2_GETICON, 0, (LPARAM) "vca_call"));
+ }
+ else
+ {
+ GetWindowRect(GetDlgItem(hwndDlg, IDC_VOICE), &rc);
+ ScreenToClient(hwndDlg, &rc);
+ MoveWindow(GetDlgItem(hwndDlg, IDC_MESSAGE), rc, FALSE);
+ ShowWindow(GetDlgItem(hwndDlg, IDC_VOICE), SW_HIDE);
+ }
+
+ FillButton(hwndDlg, IDC_FILE, "Send file", hasNewHotkeyModule ? NULL : "Ctrl+F", LoadSkinnedIcon(SKINICON_EVENT_FILE));
+ FillButton(hwndDlg, IDC_URL, "Send URL", hasNewHotkeyModule ? NULL : "Ctrl+U", LoadSkinnedIcon(SKINICON_EVENT_URL));
+ FillButton(hwndDlg, IDC_USERINFO, "Open userinfo", hasNewHotkeyModule ? NULL : "Ctrl+I", (HICON) LoadImage(GetModuleHandle(NULL),MAKEINTRESOURCE(160),IMAGE_ICON,16,16,LR_DEFAULTCOLOR));
+ FillButton(hwndDlg, IDC_HISTORY, "Open history", hasNewHotkeyModule ? NULL : "Ctrl+H", (HICON) LoadImage(GetModuleHandle(NULL),MAKEINTRESOURCE(174),IMAGE_ICON,16,16,LR_DEFAULTCOLOR));
+ FillButton(hwndDlg, IDC_MENU, "Open contact menu", hasNewHotkeyModule ? NULL : "Ctrl+M", (HICON) LoadImage(GetModuleHandle(NULL),MAKEINTRESOURCE(264),IMAGE_ICON,16,16,LR_DEFAULTCOLOR));
+
+ SendDlgItemMessage(hwndDlg, IDC_USERNAME, CB_SETEXTENDEDUI, (WPARAM)TRUE, 0);
+
+ MagneticWindows_AddWindow(hwndDlg);
+
+ Utils_RestoreWindowPositionNoSize(hwndDlg, NULL, MODULE_NAME, "window");
+
+ LoadContacts(hwndDlg, FALSE);
+
+ EnableButtons(hwndDlg, NULL);
+ if (DBGetContactSettingByte(NULL, MODULE_NAME, "EnableLastSentTo", 0))
+ {
+ int pos = GetItemPos((HANDLE) DBGetContactSettingDword(NULL, MODULE_NAME, "LastSentTo", -1));
+
+ if (pos != -1)
+ {
+ SendDlgItemMessage(hwndDlg, IDC_USERNAME, CB_SETCURSEL, (WPARAM) pos, 0);
+ EnableButtons(hwndDlg, contacts[pos]->hcontact);
+ }
+ }
+
+ SetFocus(GetDlgItem(hwndDlg, IDC_USERNAME));
+
+ return TRUE;
+ }
+
+ case WM_COMMAND:
+ {
+ switch(LOWORD(wParam))
+ {
+ case IDC_USERNAME:
+ {
+ if (HIWORD(wParam) == CBN_SELCHANGE)
+ {
+ int pos = SendDlgItemMessage(hwndDlg, IDC_USERNAME, CB_GETCURSEL, 0, 0);
+ EnableButtons(hwndDlg, pos < contacts.getCount() ? contacts[pos]->hcontact : NULL);
+ }
+ break;
+ }
+ case IDC_ENTER:
+ {
+ HANDLE hContact = GetSelectedContact(hwndDlg);
+ if (hContact == NULL)
+ break;
+
+ CallService(MS_CLIST_CONTACTDOUBLECLICKED, (WPARAM) hContact, 0);
+
+ DBWriteContactSettingDword(NULL, MODULE_NAME, "LastSentTo", (DWORD) hContact);
+ SendMessage(hwndDlg, WM_CLOSE, 0, 0);
+ break;
+ }
+ case IDC_MESSAGE:
+ {
+ HANDLE hContact = GetSelectedContact(hwndDlg);
+ if (hContact == NULL)
+ {
+ SetDlgItemText(hwndDlg, IDC_USERNAME, _T(""));
+ SetFocus(GetDlgItem(hwndDlg, IDC_USERNAME));
+ break;
+ }
+
+ // Is button enabled?
+ if (!IsWindowEnabled(GetDlgItem(hwndDlg, IDC_MESSAGE)))
+ break;
+
+ CallService(MS_MSG_SENDMESSAGET, (WPARAM) hContact, 0);
+
+ DBWriteContactSettingDword(NULL, MODULE_NAME, "LastSentTo", (DWORD) hContact);
+ SendMessage(hwndDlg, WM_CLOSE, 0, 0);
+ break;
+ }
+ case HOTKEY_VOICE:
+ case IDC_VOICE:
+ {
+ HANDLE hContact = GetSelectedContact(hwndDlg);
+ if (hContact == NULL)
+ {
+ SetDlgItemText(hwndDlg, IDC_USERNAME, _T(""));
+ SetFocus(GetDlgItem(hwndDlg, IDC_USERNAME));
+ break;
+ }
+
+ // Is button enabled?
+ if (!IsWindowEnabled(GetDlgItem(hwndDlg, IDC_VOICE)))
+ break;
+
+ if (!ServiceExists(MS_VOICESERVICE_CALL))
+ break;
+
+ CallService(MS_VOICESERVICE_CALL, (WPARAM) hContact, 0);
+
+ DBWriteContactSettingDword(NULL, MODULE_NAME, "LastSentTo", (DWORD) hContact);
+ SendMessage(hwndDlg, WM_CLOSE, 0, 0);
+ break;
+ }
+ case HOTKEY_FILE:
+ case IDC_FILE:
+ {
+ HANDLE hContact = GetSelectedContact(hwndDlg);
+ if (hContact == NULL)
+ {
+ SetDlgItemText(hwndDlg, IDC_USERNAME, _T(""));
+ SetFocus(GetDlgItem(hwndDlg, IDC_USERNAME));
+ break;
+ }
+
+ // Is button enabled?
+ if (!IsWindowEnabled(GetDlgItem(hwndDlg, IDC_FILE)))
+ break;
+
+ CallService(MS_FILE_SENDFILE, (WPARAM) hContact, 0);
+
+ DBWriteContactSettingDword(NULL, MODULE_NAME, "LastSentTo", (DWORD) hContact);
+ SendMessage(hwndDlg, WM_CLOSE, 0, 0);
+ break;
+ }
+ case HOTKEY_URL:
+ case IDC_URL:
+ {
+ HANDLE hContact = GetSelectedContact(hwndDlg);
+ if (hContact == NULL)
+ {
+ SetDlgItemText(hwndDlg, IDC_USERNAME, _T(""));
+ SetFocus(GetDlgItem(hwndDlg, IDC_USERNAME));
+ break;
+ }
+
+ // Is button enabled?
+ if (!IsWindowEnabled(GetDlgItem(hwndDlg, IDC_URL)))
+ break;
+
+ CallService(MS_URL_SENDURL, (WPARAM) hContact, 0);
+
+ DBWriteContactSettingDword(NULL, MODULE_NAME, "LastSentTo", (DWORD) hContact);
+ SendMessage(hwndDlg, WM_CLOSE, 0, 0);
+ break;
+ }
+ case HOTKEY_INFO:
+ case IDC_USERINFO:
+ {
+ HANDLE hContact = GetSelectedContact(hwndDlg);
+ if (hContact == NULL)
+ {
+ SetDlgItemText(hwndDlg, IDC_USERNAME, _T(""));
+ SetFocus(GetDlgItem(hwndDlg, IDC_USERNAME));
+ break;
+ }
+
+ // Is button enabled?
+ if (!IsWindowEnabled(GetDlgItem(hwndDlg, IDC_USERINFO)))
+ break;
+
+ CallService(MS_USERINFO_SHOWDIALOG, (WPARAM) hContact, 0);
+
+ DBWriteContactSettingDword(NULL, MODULE_NAME, "LastSentTo", (DWORD) hContact);
+ SendMessage(hwndDlg, WM_CLOSE, 0, 0);
+ break;
+ }
+ case HOTKEY_HISTORY:
+ case IDC_HISTORY:
+ {
+ HANDLE hContact = GetSelectedContact(hwndDlg);
+ if (hContact == NULL)
+ {
+ SetDlgItemText(hwndDlg, IDC_USERNAME, _T(""));
+ SetFocus(GetDlgItem(hwndDlg, IDC_USERNAME));
+ break;
+ }
+
+ // Is button enabled?
+ if (!IsWindowEnabled(GetDlgItem(hwndDlg, IDC_HISTORY)))
+ break;
+
+ CallService(MS_HISTORY_SHOWCONTACTHISTORY, (WPARAM) hContact, 0);
+
+ DBWriteContactSettingDword(NULL, MODULE_NAME, "LastSentTo", (DWORD) hContact);
+ SendMessage(hwndDlg, WM_CLOSE, 0, 0);
+ break;
+ }
+ case HOTKEY_MENU:
+ case IDC_MENU:
+ {
+ HANDLE hContact = GetSelectedContact(hwndDlg);
+ if (hContact == NULL)
+ {
+ SetDlgItemText(hwndDlg, IDC_USERNAME, _T(""));
+ SetFocus(GetDlgItem(hwndDlg, IDC_USERNAME));
+ break;
+ }
+
+ // Is button enabled?
+ if (!IsWindowEnabled(GetDlgItem(hwndDlg, IDC_MENU)))
+ break;
+
+ RECT rc;
+ GetWindowRect(GetDlgItem(hwndDlg, IDC_MENU), &rc);
+ HMENU hMenu = (HMENU) CallService(MS_CLIST_MENUBUILDCONTACT, (WPARAM) hContact, 0);
+ int ret = TrackPopupMenu(hMenu, TPM_TOPALIGN|TPM_RIGHTBUTTON|TPM_RETURNCMD, rc.left, rc.bottom, 0, hwndDlg, NULL);
+ DestroyMenu(hMenu);
+
+ if(ret)
+ {
+ SendMessage(hwndDlg, WM_CLOSE, 0, 0);
+ CallService(MS_CLIST_MENUPROCESSCOMMAND, MAKEWPARAM(LOWORD(ret),MPCF_CONTACTMENU),(LPARAM) hContact);
+ }
+
+ DBWriteContactSettingDword(NULL, MODULE_NAME, "LastSentTo", (DWORD) hContact);
+ break;
+ }
+ case HOTKEY_ALL_CONTACTS:
+ case IDC_SHOW_ALL_CONTACTS:
+ {
+ // Get old text
+ HWND hEdit = GetWindow(GetWindow(hwndDlg,GW_CHILD),GW_CHILD);
+ TCHAR sztext[120] = _T("");
+
+ if (SendMessage(hEdit, EM_GETSEL, (WPARAM)NULL, (LPARAM)NULL) != -1)
+ SendMessage(hEdit, EM_REPLACESEL, (WPARAM)0, (LPARAM)_T(""));
+
+ SendMessage(hEdit, WM_GETTEXT, (WPARAM)MAX_REGS(sztext), (LPARAM)sztext);
+
+ // Fill combo
+ BOOL all = IsDlgButtonChecked(hwndDlg, IDC_SHOW_ALL_CONTACTS);
+
+ if (LOWORD(wParam) == HOTKEY_ALL_CONTACTS)
+ {
+ // Toggle checkbox
+ all = !all;
+ CheckDlgButton(hwndDlg, IDC_SHOW_ALL_CONTACTS, all ? BST_CHECKED : BST_UNCHECKED);
+ }
+
+ LoadContacts(hwndDlg, all);
+
+ // Return selection
+ CheckText(hEdit, sztext);
+
+ break;
+ }
+ }
+
+ break;
+ }
+
+ case WM_CLOSE:
+ {
+ Utils_SaveWindowPosition(hwndDlg, NULL, MODULE_NAME, "window");
+ MagneticWindows_RemoveWindow(hwndDlg);
+ DestroyWindow(hwndDlg);
+ break;
+ }
+
+ case WM_DESTROY:
+ {
+ UnhookWindowsHookEx(hHook);
+ hwndMain = NULL;
+ FreeContacts();
+ InterlockedExchange(&main_dialog_open, 0);
+ break;
+ }
+
+ case WM_NCLBUTTONDBLCLK:
+ {
+ MagneticWindows_SnapWindowToList(hwndDlg, MS_MW_STL_List_Left | MS_MW_STL_List_Top
+ | MS_MW_STL_Wnd_Right | MS_MW_STL_Wnd_Top);
+ break;
+ }
+
+ case WM_DRAWITEM:
+ {
+ // add icons and protocol to listbox
+ LPDRAWITEMSTRUCT lpdis = (LPDRAWITEMSTRUCT)lParam;
+
+ // Handle contact menu
+ if(lpdis->CtlID != IDC_USERNAME)
+ {
+ if (lpdis->CtlType == ODT_MENU)
+ return CallService(MS_CLIST_MENUDRAWITEM,wParam,lParam);
+ else
+ break;
+ }
+
+ // Handle combo
+ if(lpdis->itemID == -1)
+ break;
+
+ TEXTMETRIC tm;
+ int icon_width=0, icon_height=0;
+ RECT rc;
+
+ GetTextMetrics(lpdis->hDC, &tm);
+ ImageList_GetIconSize(hIml, &icon_width, &icon_height);
+
+ COLORREF clrfore = SetTextColor(lpdis->hDC,GetSysColor(lpdis->itemState & ODS_SELECTED?COLOR_HIGHLIGHTTEXT:COLOR_WINDOWTEXT));
+ COLORREF clrback = SetBkColor(lpdis->hDC,GetSysColor(lpdis->itemState & ODS_SELECTED?COLOR_HIGHLIGHT:COLOR_WINDOW));
+
+ FillRect(lpdis->hDC, &lpdis->rcItem, GetSysColorBrush(lpdis->itemState & ODS_SELECTED ? COLOR_HIGHLIGHT : COLOR_WINDOW));
+
+ // Draw icon
+ rc.left = lpdis->rcItem.left + 5;
+ rc.top = (lpdis->rcItem.bottom + lpdis->rcItem.top - icon_height) / 2;
+ ImageList_Draw(hIml, CallService(MS_CLIST_GETCONTACTICON, (WPARAM)contacts[lpdis->itemData]->hcontact, 0),
+ lpdis->hDC, rc.left, rc.top, ILD_NORMAL);
+
+ // Make rect for text
+ rc.left += icon_width + 5;
+ rc.right = lpdis->rcItem.right - 1;
+ rc.top = (lpdis->rcItem.bottom + lpdis->rcItem.top - tm.tmHeight) / 2;
+ rc.bottom = rc.top + tm.tmHeight;
+
+ // Draw Protocol
+ if (opts.num_protos > 1)
+ {
+ if (max_proto_width == 0)
+ {
+ // Has to be done, else the DC isnt the right one
+ // Dont ask me why
+ for(int loop = 0; loop < contacts.getCount(); loop++)
+ {
+ RECT rcc = { 0, 0, 0x7FFF, 0x7FFF };
+
+ DrawText(lpdis->hDC, contacts[loop]->proto, lstrlen(contacts[loop]->proto),
+ &rcc, DT_END_ELLIPSIS | DT_NOPREFIX | DT_SINGLELINE | DT_CALCRECT);
+ max_proto_width = max(max_proto_width, rcc.right - rcc.left);
+ }
+
+ // Fix max_proto_width
+ if (opts.group_append && opts.group_column)
+ max_proto_width = min(max_proto_width, (rc.right - rc.left) / 5);
+ else if (opts.group_append)
+ max_proto_width = min(max_proto_width, (rc.right - rc.left) / 4);
+ else
+ max_proto_width = min(max_proto_width, (rc.right - rc.left) / 3);
+ }
+
+ RECT rc_tmp = rc;
+
+ rc_tmp.left = rc_tmp.right - max_proto_width;
+
+ DrawText(lpdis->hDC, contacts[lpdis->itemData]->proto, lstrlen(contacts[lpdis->itemData]->proto),
+ &rc_tmp, DT_END_ELLIPSIS | DT_NOPREFIX | DT_SINGLELINE);
+
+ rc.right = rc_tmp.left - 5;
+ }
+
+ // Draw group
+ if (opts.group_append && opts.group_column)
+ {
+ RECT rc_tmp = rc;
+
+ if (opts.group_column_left)
+ {
+ rc_tmp.right = rc_tmp.left + (rc.right - rc.left) / 3;
+ rc.left = rc_tmp.right + 5;
+ }
+ else
+ {
+ rc_tmp.left = rc_tmp.right - (rc.right - rc.left) / 3;
+ rc.right = rc_tmp.left - 5;
+ }
+
+ DrawText(lpdis->hDC, contacts[lpdis->itemData]->szgroup, lstrlen(contacts[lpdis->itemData]->szgroup),
+ &rc_tmp, DT_END_ELLIPSIS | DT_NOPREFIX | DT_SINGLELINE);
+ }
+
+ // Draw text
+ TCHAR *name;
+ if (opts.group_append && !opts.group_column)
+ name = GetListName(contacts[lpdis->itemData]);
+ else
+ name = contacts[lpdis->itemData]->szname;
+
+ DrawText(lpdis->hDC, name, lstrlen(name), &rc, DT_END_ELLIPSIS | DT_NOPREFIX | DT_SINGLELINE);
+
+ // Restore old colors
+ SetTextColor(lpdis->hDC, clrfore);
+ SetBkColor(lpdis->hDC, clrback);
+
+ return TRUE;
+ }
+
+ case WM_MEASUREITEM:
+ {
+ LPMEASUREITEMSTRUCT lpmis = (LPMEASUREITEMSTRUCT)lParam;
+
+ // Handle contact menu
+ if(lpmis->CtlID != IDC_USERNAME)
+ {
+ if (lpmis->CtlType == ODT_MENU)
+ return CallService(MS_CLIST_MENUMEASUREITEM,wParam,lParam);
+ else
+ break;
+ }
+
+ // Handle combo
+
+ TEXTMETRIC tm;
+ int icon_width = 0, icon_height=0;
+
+ GetTextMetrics(GetDC(hwndDlg), &tm);
+ ImageList_GetIconSize(hIml, &icon_width, &icon_height);
+
+ lpmis->itemHeight = max(icon_height, tm.tmHeight);
+
+ return TRUE;
+ }
+ }
+
+ return FALSE;
+}
+
+
+// Show the main dialog
+INT_PTR ShowDialog(WPARAM wParam, LPARAM lParam)
+{
+ if (!main_dialog_open)
+ {
+ InterlockedExchange(&main_dialog_open, 1);
+
+ hwndMain = CreateDialog(hInst, MAKEINTRESOURCE(IDD_MAIN), NULL, MainDlgProc);
+ }
+
+ // Show it
+ SetForegroundWindow(hwndMain);
+ SetFocus(hwndMain);
+ ShowWindow(hwndMain, SW_SHOW);
+
+ return 0;
+}
diff --git a/plugins/QuickContacts/quickcontacts.vcxproj b/plugins/QuickContacts/quickcontacts.vcxproj
new file mode 100644
index 0000000000..1d70a75667
--- /dev/null
+++ b/plugins/QuickContacts/quickcontacts.vcxproj
@@ -0,0 +1,519 @@
+<?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|Win32">
+ <Configuration>Release</Configuration>
+ <Platform>Win32</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Release|x64">
+ <Configuration>Release</Configuration>
+ <Platform>x64</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Unicode Debug|Win32">
+ <Configuration>Unicode Debug</Configuration>
+ <Platform>Win32</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Unicode Debug|x64">
+ <Configuration>Unicode Debug</Configuration>
+ <Platform>x64</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Unicode Release|Win32">
+ <Configuration>Unicode Release</Configuration>
+ <Platform>Win32</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Unicode Release|x64">
+ <Configuration>Unicode Release</Configuration>
+ <Platform>x64</Platform>
+ </ProjectConfiguration>
+ </ItemGroup>
+ <PropertyGroup Label="Globals">
+ <ProjectGuid>{7FC00D59-03D3-4A6C-AEFE-67349C9C9E10}</ProjectGuid>
+ <RootNamespace>quickcontacts</RootNamespace>
+ </PropertyGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
+ <ConfigurationType>DynamicLibrary</ConfigurationType>
+ <UseOfMfc>false</UseOfMfc>
+ <CharacterSet>Unicode</CharacterSet>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
+ <ConfigurationType>DynamicLibrary</ConfigurationType>
+ <UseOfMfc>false</UseOfMfc>
+ <CharacterSet>Unicode</CharacterSet>
+ </PropertyGroup>
+ <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)'=='Unicode Debug|Win32'" Label="Configuration">
+ <ConfigurationType>DynamicLibrary</ConfigurationType>
+ <UseOfMfc>false</UseOfMfc>
+ <CharacterSet>Unicode</CharacterSet>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Unicode Debug|x64'" Label="Configuration">
+ <ConfigurationType>DynamicLibrary</ConfigurationType>
+ <UseOfMfc>false</UseOfMfc>
+ <CharacterSet>Unicode</CharacterSet>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Unicode Release|Win32'" Label="Configuration">
+ <ConfigurationType>DynamicLibrary</ConfigurationType>
+ <UseOfMfc>false</UseOfMfc>
+ <CharacterSet>Unicode</CharacterSet>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Unicode Release|x64'" Label="Configuration">
+ <ConfigurationType>DynamicLibrary</ConfigurationType>
+ <UseOfMfc>false</UseOfMfc>
+ <CharacterSet>Unicode</CharacterSet>
+ </PropertyGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
+ <ImportGroup Label="ExtensionSettings">
+ </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.UpgradeFromVC60.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.UpgradeFromVC60.props" />
+ </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.UpgradeFromVC60.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.UpgradeFromVC60.props" />
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Unicode 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.UpgradeFromVC60.props" />
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Unicode 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.UpgradeFromVC60.props" />
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Unicode 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.UpgradeFromVC60.props" />
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Unicode 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.UpgradeFromVC60.props" />
+ </ImportGroup>
+ <PropertyGroup Label="UserMacros" />
+ <PropertyGroup>
+ <_ProjectFileVersion>10.0.40219.1</_ProjectFileVersion>
+ <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Unicode Release|Win32'">false</LinkIncremental>
+ <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Unicode Release|x64'">false</LinkIncremental>
+ <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Unicode Debug|Win32'">true</LinkIncremental>
+ <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Unicode Debug|x64'">true</LinkIncremental>
+ <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</LinkIncremental>
+ <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|x64'">false</LinkIncremental>
+ <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</LinkIncremental>
+ <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</LinkIncremental>
+ <TargetName Condition="'$(Configuration)|$(Platform)'=='Unicode Release|Win32'">quickcontacts</TargetName>
+ <TargetName Condition="'$(Configuration)|$(Platform)'=='Unicode Release|x64'">quickcontacts</TargetName>
+ <TargetName Condition="'$(Configuration)|$(Platform)'=='Unicode Debug|Win32'">quickcontacts</TargetName>
+ <TargetName Condition="'$(Configuration)|$(Platform)'=='Unicode Debug|x64'">quickcontacts</TargetName>
+ <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(SolutionDir)$(Configuration)64\Plugins\</OutDir>
+ <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(SolutionDir)$(Configuration)64\Plugins\</OutDir>
+ <OutDir Condition="'$(Configuration)|$(Platform)'=='Unicode Debug|x64'">$(SolutionDir)$(Configuration)64\Plugins\</OutDir>
+ <OutDir Condition="'$(Configuration)|$(Platform)'=='Unicode Release|x64'">$(SolutionDir)$(Configuration)64\Plugins\</OutDir>
+ <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(SolutionDir)$(Configuration)64\Obj\$(ProjectName)\</IntDir>
+ <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(SolutionDir)$(Configuration)64\Obj\$(ProjectName)\</IntDir>
+ <IntDir Condition="'$(Configuration)|$(Platform)'=='Unicode Debug|x64'">$(SolutionDir)$(Configuration)64\Obj\$(ProjectName)\</IntDir>
+ <IntDir Condition="'$(Configuration)|$(Platform)'=='Unicode Release|x64'">$(SolutionDir)$(Configuration)64\Obj\$(ProjectName)\</IntDir>
+ <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(SolutionDir)$(Configuration)\Plugins\</OutDir>
+ <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(SolutionDir)$(Configuration)\Plugins\</OutDir>
+ <OutDir Condition="'$(Configuration)|$(Platform)'=='Unicode Debug|Win32'">$(SolutionDir)$(Configuration)\Plugins\</OutDir>
+ <OutDir Condition="'$(Configuration)|$(Platform)'=='Unicode Release|Win32'">$(SolutionDir)$(Configuration)\Plugins\</OutDir>
+ <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(SolutionDir)$(Configuration)\Obj\$(ProjectName)\</IntDir>
+ <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(SolutionDir)$(Configuration)\Obj\$(ProjectName)\</IntDir>
+ <IntDir Condition="'$(Configuration)|$(Platform)'=='Unicode Debug|Win32'">$(SolutionDir)$(Configuration)\Obj\$(ProjectName)\</IntDir>
+ <IntDir Condition="'$(Configuration)|$(Platform)'=='Unicode Release|Win32'">$(SolutionDir)$(Configuration)\Obj\$(ProjectName)\</IntDir>
+ <TargetName Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">quickcontacts</TargetName>
+ <TargetName Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">quickcontacts</TargetName>
+ <TargetName Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">quickcontacts</TargetName>
+ <TargetName Condition="'$(Configuration)|$(Platform)'=='Release|x64'">quickcontacts</TargetName>
+ </PropertyGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Unicode Release|Win32'">
+ <Midl>
+ <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <MkTypLibCompatible>true</MkTypLibCompatible>
+ <SuppressStartupBanner>true</SuppressStartupBanner>
+ <TargetEnvironment>Win32</TargetEnvironment>
+ <TypeLibraryName>.\Unicode_Release/quickcontacts.tlb</TypeLibraryName>
+ <HeaderFileName>
+ </HeaderFileName>
+ </Midl>
+ <ClCompile>
+ <Optimization>MaxSpeed</Optimization>
+ <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
+ <AdditionalIncludeDirectories>..\..\include;..\ExternalAPI;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions>WIN32;NDEBUG;_WINDOWS;UNICODE;_USRDLL;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <StringPooling>true</StringPooling>
+ <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
+ <FunctionLevelLinking>true</FunctionLevelLinking>
+ <AssemblerOutput>All</AssemblerOutput>
+ <WarningLevel>Level3</WarningLevel>
+ <SuppressStartupBanner>true</SuppressStartupBanner>
+ <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+ </ClCompile>
+ <ResourceCompile>
+ <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <Culture>0x0417</Culture>
+ </ResourceCompile>
+ <Link>
+ <AdditionalOptions>/ALIGN:4096 /filealign:0x200 /ignore:4108 %(AdditionalOptions)</AdditionalOptions>
+ <AdditionalDependencies>comctl32.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies)</AdditionalDependencies>
+ <SuppressStartupBanner>true</SuppressStartupBanner>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ <GenerateMapFile>true</GenerateMapFile>
+ <BaseAddress>0x32100000</BaseAddress>
+ <TargetMachine>MachineX86</TargetMachine>
+ <AdditionalLibraryDirectories>$(SolutionDir)\lib</AdditionalLibraryDirectories>
+ </Link>
+ <Bscmake />
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Unicode Release|x64'">
+ <Midl>
+ <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <MkTypLibCompatible>true</MkTypLibCompatible>
+ <SuppressStartupBanner>true</SuppressStartupBanner>
+ <TypeLibraryName>.\Unicode_Release/quickcontacts.tlb</TypeLibraryName>
+ <HeaderFileName>
+ </HeaderFileName>
+ </Midl>
+ <ClCompile>
+ <Optimization>MaxSpeed</Optimization>
+ <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
+ <AdditionalIncludeDirectories>..\..\include;..\ExternalAPI;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions>WIN64;NDEBUG;_WINDOWS;UNICODE;_USRDLL;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <StringPooling>true</StringPooling>
+ <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
+ <FunctionLevelLinking>true</FunctionLevelLinking>
+ <AssemblerOutput>All</AssemblerOutput>
+ <WarningLevel>Level3</WarningLevel>
+ <SuppressStartupBanner>true</SuppressStartupBanner>
+ <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+ </ClCompile>
+ <ResourceCompile>
+ <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <Culture>0x0417</Culture>
+ </ResourceCompile>
+ <Link>
+ <AdditionalOptions>/ALIGN:4096 /filealign:0x200 /ignore:4108 %(AdditionalOptions)</AdditionalOptions>
+ <AdditionalDependencies>comctl32.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies)</AdditionalDependencies>
+ <SuppressStartupBanner>true</SuppressStartupBanner>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ <GenerateMapFile>true</GenerateMapFile>
+ <BaseAddress>0x32100000</BaseAddress>
+ <AdditionalLibraryDirectories>$(SolutionDir)\lib</AdditionalLibraryDirectories>
+ </Link>
+ <Bscmake />
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Unicode Debug|Win32'">
+ <Midl>
+ <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <MkTypLibCompatible>true</MkTypLibCompatible>
+ <SuppressStartupBanner>true</SuppressStartupBanner>
+ <TargetEnvironment>Win32</TargetEnvironment>
+ <TypeLibraryName>.\Unicode_Debug/quickcontacts.tlb</TypeLibraryName>
+ <HeaderFileName>
+ </HeaderFileName>
+ </Midl>
+ <ClCompile>
+ <Optimization>Disabled</Optimization>
+ <AdditionalIncludeDirectories>..\..\include;..\ExternalAPI;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions>UNICODE;_CRT_SECURE_NO_DEPRECATE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
+ <BrowseInformation>true</BrowseInformation>
+ <WarningLevel>Level3</WarningLevel>
+ <SuppressStartupBanner>true</SuppressStartupBanner>
+ <DebugInformationFormat>EditAndContinue</DebugInformationFormat>
+ </ClCompile>
+ <ResourceCompile>
+ <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <Culture>0x0417</Culture>
+ </ResourceCompile>
+ <Link>
+ <AdditionalOptions>/ALIGN:4096 /filealign:0x200 /ignore:4108 %(AdditionalOptions)</AdditionalOptions>
+ <AdditionalDependencies>comctl32.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies)</AdditionalDependencies>
+ <SuppressStartupBanner>true</SuppressStartupBanner>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ <BaseAddress>0x32100000</BaseAddress>
+ <TargetMachine>MachineX86</TargetMachine>
+ <AdditionalLibraryDirectories>$(SolutionDir)\lib</AdditionalLibraryDirectories>
+ </Link>
+ <Bscmake />
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Unicode Debug|x64'">
+ <Midl>
+ <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <MkTypLibCompatible>true</MkTypLibCompatible>
+ <SuppressStartupBanner>true</SuppressStartupBanner>
+ <TypeLibraryName>.\Unicode_Debug/quickcontacts.tlb</TypeLibraryName>
+ <HeaderFileName>
+ </HeaderFileName>
+ </Midl>
+ <ClCompile>
+ <Optimization>Disabled</Optimization>
+ <AdditionalIncludeDirectories>..\..\include;..\ExternalAPI;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions>UNICODE;_CRT_SECURE_NO_DEPRECATE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
+ <BrowseInformation>true</BrowseInformation>
+ <WarningLevel>Level3</WarningLevel>
+ <SuppressStartupBanner>true</SuppressStartupBanner>
+ <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+ </ClCompile>
+ <ResourceCompile>
+ <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <Culture>0x0417</Culture>
+ </ResourceCompile>
+ <Link>
+ <AdditionalOptions>/ALIGN:4096 /filealign:0x200 /ignore:4108 %(AdditionalOptions)</AdditionalOptions>
+ <AdditionalDependencies>comctl32.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies)</AdditionalDependencies>
+ <SuppressStartupBanner>true</SuppressStartupBanner>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ <BaseAddress>0x32100000</BaseAddress>
+ <AdditionalLibraryDirectories>$(SolutionDir)\lib</AdditionalLibraryDirectories>
+ </Link>
+ <Bscmake />
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+ <Midl>
+ <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <MkTypLibCompatible>true</MkTypLibCompatible>
+ <SuppressStartupBanner>true</SuppressStartupBanner>
+ <TargetEnvironment>Win32</TargetEnvironment>
+ <TypeLibraryName>.\Release/quickcontacts.tlb</TypeLibraryName>
+ <HeaderFileName>
+ </HeaderFileName>
+ </Midl>
+ <ClCompile>
+ <Optimization>MaxSpeed</Optimization>
+ <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
+ <AdditionalIncludeDirectories>..\..\include;..\ExternalAPI;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions>WIN32;NDEBUG;_WINDOWS;_USRDLL;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <StringPooling>true</StringPooling>
+ <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
+ <FunctionLevelLinking>true</FunctionLevelLinking>
+ <AssemblerOutput>All</AssemblerOutput>
+ <WarningLevel>Level3</WarningLevel>
+ <SuppressStartupBanner>true</SuppressStartupBanner>
+ <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+ </ClCompile>
+ <ResourceCompile>
+ <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <Culture>0x0417</Culture>
+ </ResourceCompile>
+ <Link>
+ <AdditionalOptions>/ALIGN:4096 /filealign:0x200 /ignore:4108 %(AdditionalOptions)</AdditionalOptions>
+ <AdditionalDependencies>comctl32.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies)</AdditionalDependencies>
+ <SuppressStartupBanner>true</SuppressStartupBanner>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ <GenerateMapFile>true</GenerateMapFile>
+ <BaseAddress>0x32100000</BaseAddress>
+ <TargetMachine>MachineX86</TargetMachine>
+ <AdditionalLibraryDirectories>$(SolutionDir)\lib</AdditionalLibraryDirectories>
+ </Link>
+ <Bscmake />
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
+ <Midl>
+ <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <MkTypLibCompatible>true</MkTypLibCompatible>
+ <SuppressStartupBanner>true</SuppressStartupBanner>
+ <TypeLibraryName>.\Release/quickcontacts.tlb</TypeLibraryName>
+ <HeaderFileName>
+ </HeaderFileName>
+ </Midl>
+ <ClCompile>
+ <Optimization>MaxSpeed</Optimization>
+ <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
+ <AdditionalIncludeDirectories>..\..\include;..\ExternalAPI;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions>WIN64;NDEBUG;_WINDOWS;_USRDLL;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <StringPooling>true</StringPooling>
+ <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
+ <FunctionLevelLinking>true</FunctionLevelLinking>
+ <AssemblerOutput>All</AssemblerOutput>
+ <WarningLevel>Level3</WarningLevel>
+ <SuppressStartupBanner>true</SuppressStartupBanner>
+ <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+ </ClCompile>
+ <ResourceCompile>
+ <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <Culture>0x0417</Culture>
+ </ResourceCompile>
+ <Link>
+ <AdditionalOptions>/ALIGN:4096 /filealign:0x200 /ignore:4108 %(AdditionalOptions)</AdditionalOptions>
+ <AdditionalDependencies>comctl32.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies)</AdditionalDependencies>
+ <SuppressStartupBanner>true</SuppressStartupBanner>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ <GenerateMapFile>true</GenerateMapFile>
+ <BaseAddress>0x32100000</BaseAddress>
+ <AdditionalLibraryDirectories>$(SolutionDir)\lib</AdditionalLibraryDirectories>
+ </Link>
+ <Bscmake />
+ <Bscmake />
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+ <Midl>
+ <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <MkTypLibCompatible>true</MkTypLibCompatible>
+ <SuppressStartupBanner>true</SuppressStartupBanner>
+ <TargetEnvironment>Win32</TargetEnvironment>
+ <TypeLibraryName>.\Debug/quickcontacts.tlb</TypeLibraryName>
+ <HeaderFileName>
+ </HeaderFileName>
+ </Midl>
+ <ClCompile>
+ <Optimization>Disabled</Optimization>
+ <AdditionalIncludeDirectories>..\..\include;..\ExternalAPI;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
+ <BrowseInformation>true</BrowseInformation>
+ <WarningLevel>Level3</WarningLevel>
+ <SuppressStartupBanner>true</SuppressStartupBanner>
+ <DebugInformationFormat>EditAndContinue</DebugInformationFormat>
+ </ClCompile>
+ <ResourceCompile>
+ <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <Culture>0x0417</Culture>
+ </ResourceCompile>
+ <Link>
+ <AdditionalOptions>/ALIGN:4096 /filealign:0x200 /ignore:4108 %(AdditionalOptions)</AdditionalOptions>
+ <AdditionalDependencies>comctl32.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies)</AdditionalDependencies>
+ <SuppressStartupBanner>true</SuppressStartupBanner>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ <BaseAddress>0x32100000</BaseAddress>
+ <TargetMachine>MachineX86</TargetMachine>
+ <AdditionalLibraryDirectories>$(SolutionDir)\lib</AdditionalLibraryDirectories>
+ </Link>
+ <Bscmake />
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
+ <Midl>
+ <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <MkTypLibCompatible>true</MkTypLibCompatible>
+ <SuppressStartupBanner>true</SuppressStartupBanner>
+ <TypeLibraryName>.\Debug/quickcontacts.tlb</TypeLibraryName>
+ <HeaderFileName>
+ </HeaderFileName>
+ </Midl>
+ <ClCompile>
+ <Optimization>Disabled</Optimization>
+ <AdditionalIncludeDirectories>..\..\include;..\ExternalAPI;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
+ <BrowseInformation>true</BrowseInformation>
+ <WarningLevel>Level3</WarningLevel>
+ <SuppressStartupBanner>true</SuppressStartupBanner>
+ <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+ </ClCompile>
+ <ResourceCompile>
+ <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <Culture>0x0417</Culture>
+ </ResourceCompile>
+ <Link>
+ <AdditionalOptions>/ALIGN:4096 /filealign:0x200 /ignore:4108 %(AdditionalOptions)</AdditionalOptions>
+ <AdditionalDependencies>comctl32.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies)</AdditionalDependencies>
+ <SuppressStartupBanner>true</SuppressStartupBanner>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ <BaseAddress>0x32100000</BaseAddress>
+ <AdditionalLibraryDirectories>$(SolutionDir)\lib</AdditionalLibraryDirectories>
+ </Link>
+ <Bscmake />
+ <Bscmake />
+ </ItemDefinitionGroup>
+ <ItemGroup>
+ <ClInclude Include="commons.h" />
+ <ClInclude Include="..\utils\mir_memory.h" />
+ <ClInclude Include="..\utils\mir_options.h" />
+ <ClInclude Include="options.h" />
+ <ClInclude Include="resource.h" />
+ </ItemGroup>
+ <ItemGroup>
+ <ResourceCompile Include="resource.rc">
+ <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Unicode Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Unicode Debug|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Unicode Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Unicode Release|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ </ResourceCompile>
+ </ItemGroup>
+ <ItemGroup>
+ <ClCompile Include="..\utils\mir_options.cpp">
+ <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Unicode Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Unicode Debug|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Unicode Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Unicode Debug|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Unicode Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Unicode Release|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Unicode Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Unicode Release|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ </ClCompile>
+ <ClCompile Include="options.cpp">
+ <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Unicode Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Unicode Debug|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Unicode Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Unicode Debug|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Unicode Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Unicode Release|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Unicode Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Unicode Release|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ </ClCompile>
+ <ClCompile Include="quickcontacts.cpp">
+ <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Unicode Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Unicode Debug|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Unicode Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Unicode Debug|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Unicode Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Unicode Release|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Unicode Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Unicode Release|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ </ClCompile>
+ </ItemGroup>
+ <ItemGroup>
+ <None Include="Docs\langpack_quickcontacts.txt" />
+ <None Include="Docs\quickcontacts_changelog.txt" />
+ <None Include="Docs\quickcontacts_readme.txt" />
+ <None Include="Docs\quickcontacts_version.txt" />
+ </ItemGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
+ <ImportGroup Label="ExtensionTargets">
+ </ImportGroup>
+</Project> \ No newline at end of file
diff --git a/plugins/QuickContacts/quickcontacts.vcxproj.filters b/plugins/QuickContacts/quickcontacts.vcxproj.filters
new file mode 100644
index 0000000000..a1e9e4fbbb
--- /dev/null
+++ b/plugins/QuickContacts/quickcontacts.vcxproj.filters
@@ -0,0 +1,67 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+ <ItemGroup>
+ <Filter Include="Header Files">
+ <UniqueIdentifier>{f1cce33b-6037-4a27-95bb-4372f32afee0}</UniqueIdentifier>
+ <Extensions>h;hpp;hxx;hm;inl</Extensions>
+ </Filter>
+ <Filter Include="Resource Files">
+ <UniqueIdentifier>{5b2cf3aa-50dc-41d3-81f6-ca6a49ef7ce2}</UniqueIdentifier>
+ <Extensions>ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe</Extensions>
+ </Filter>
+ <Filter Include="Source Files">
+ <UniqueIdentifier>{f0bde4e2-7779-412c-a801-78220d6915cc}</UniqueIdentifier>
+ <Extensions>cpp;c;cxx;rc;def;r;odl;idl;hpj;bat</Extensions>
+ </Filter>
+ <Filter Include="Docs">
+ <UniqueIdentifier>{c5afa7ec-eb0e-45af-8ac8-157f4e55f107}</UniqueIdentifier>
+ </Filter>
+ </ItemGroup>
+ <ItemGroup>
+ <ClInclude Include="commons.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="..\utils\mir_memory.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="..\utils\mir_options.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="options.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="resource.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ </ItemGroup>
+ <ItemGroup>
+ <ResourceCompile Include="resource.rc">
+ <Filter>Resource Files</Filter>
+ </ResourceCompile>
+ </ItemGroup>
+ <ItemGroup>
+ <ClCompile Include="..\utils\mir_options.cpp">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="options.cpp">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="quickcontacts.cpp">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ </ItemGroup>
+ <ItemGroup>
+ <None Include="Docs\langpack_quickcontacts.txt">
+ <Filter>Docs</Filter>
+ </None>
+ <None Include="Docs\quickcontacts_changelog.txt">
+ <Filter>Docs</Filter>
+ </None>
+ <None Include="Docs\quickcontacts_readme.txt">
+ <Filter>Docs</Filter>
+ </None>
+ <None Include="Docs\quickcontacts_version.txt">
+ <Filter>Docs</Filter>
+ </None>
+ </ItemGroup>
+</Project> \ No newline at end of file
diff --git a/plugins/QuickContacts/resource.rc b/plugins/QuickContacts/resource.rc
new file mode 100644
index 0000000000..efdb2e6269
--- /dev/null
+++ b/plugins/QuickContacts/resource.rc
@@ -0,0 +1,179 @@
+//Microsoft Developer Studio generated resource script.
+//
+#include "resource.h"
+
+#define APSTUDIO_READONLY_SYMBOLS
+/////////////////////////////////////////////////////////////////////////////
+//
+// Generated from the TEXTINCLUDE 2 resource.
+//
+#include "resource.h"
+#include "winresrc.h"
+
+/////////////////////////////////////////////////////////////////////////////
+#undef APSTUDIO_READONLY_SYMBOLS
+
+/////////////////////////////////////////////////////////////////////////////
+// English (U.S.) resources
+
+#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU)
+#ifdef _WIN32
+LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US
+#pragma code_page(1252)
+#endif //_WIN32
+
+/////////////////////////////////////////////////////////////////////////////
+//
+// Dialog
+//
+
+IDD_OPT DIALOGEX 0, 0, 257, 237
+STYLE DS_FIXEDSYS | WS_CHILD | WS_VISIBLE
+EXSTYLE WS_EX_CONTROLPARENT
+FONT 8, "MS Shell Dlg"
+BEGIN
+ GROUPBOX "Last Sent",IDC_STATIC,0,0,257,58
+ CONTROL "Enable last-sent-to",IDC_LASTSENTTO,"Button",
+ BS_AUTOCHECKBOX | WS_GROUP | WS_TABSTOP,18,14,221,10
+ CONTROL "recognize all messages sent",IDC_GLOBAL,"Button",
+ BS_AUTORADIOBUTTON | WS_DISABLED,30,27,209,10
+ CONTROL "recognize messages sent with hotkey only",IDC_LOCAL,
+ "Button",BS_AUTORADIOBUTTON | WS_DISABLED,30,39,209,10
+ GROUPBOX "Contacts",IDC_STATIC,0,59,257,177
+ LTEXT "Show offline contacts on these protocols:",IDC_STATIC,
+ 16,72,236,9
+ CONTROL "List1",IDC_PROTOCOLS,"SysListView32",LVS_REPORT |
+ LVS_SINGLESEL | LVS_SORTASCENDING | LVS_NOCOLUMNHEADER |
+ LVS_NOSORTHEADER | WS_BORDER | WS_TABSTOP,28,83,140,71
+ CONTROL "But hide them if protocol is offline",IDC_HIDE_OFFLINE,
+ "Button",BS_AUTOCHECKBOX | WS_TABSTOP,27,159,214,8
+ CONTROL "Append group name to contact name",IDC_APPEND_GROUP,
+ "Button",BS_AUTOCHECKBOX | WS_TABSTOP,16,171,225,8
+ CONTROL "But show it as a column ...",IDC_GROUP_COLUMN,"Button",
+ BS_AUTOCHECKBOX | WS_TABSTOP,27,183,214,8
+ CONTROL "... on left side of name",IDC_GROUP_LEFT,"Button",
+ BS_AUTOCHECKBOX | WS_TABSTOP,27,195,214,8
+ CONTROL "Hide subcontacts",IDC_SUBCONTACTS,"Button",
+ BS_AUTOCHECKBOX | WS_TABSTOP,16,207,225,8
+ CONTROL "But keep subcontacts of protocols in above list if meta is hidden",
+ IDC_KEEP_OFFLINE,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,
+ 28,219,217,9
+END
+
+IDD_MAIN DIALOGEX 13, 55, 193, 54
+STYLE DS_FIXEDSYS | WS_CAPTION | WS_SYSMENU
+EXSTYLE WS_EX_TOOLWINDOW
+CAPTION "Enter username:"
+FONT 8, "MS Shell Dlg", 0, 0, 0x1
+BEGIN
+ COMBOBOX IDC_USERNAME,20,6,164,130,CBS_DROPDOWN |
+ CBS_OWNERDRAWFIXED | CBS_HASSTRINGS |
+ CBS_NOINTEGRALHEIGHT | WS_VSCROLL | WS_TABSTOP
+ CONTROL "Show all contacts (Ctrl+A)",IDC_SHOW_ALL_CONTACTS,
+ "Button",BS_AUTOCHECKBOX | BS_NOTIFY | WS_TABSTOP,8,23,
+ 176,11
+ CONTROL "",IDC_MESSAGE,"MButtonClass",0x0,41,36,17,15,
+ 0x18000000L
+ CONTROL "",IDC_VOICE,"MButtonClass",0x0,62,36,17,15,0x18000000L
+ CONTROL "",IDC_FILE,"MButtonClass",0x0,83,36,17,15,0x18000000L
+ CONTROL "",IDC_URL,"MButtonClass",0x0,104,36,17,15,0x18000000L
+ CONTROL "",IDC_USERINFO,"MButtonClass",0x0,125,36,17,15,
+ 0x18000000L
+ CONTROL "",IDC_HISTORY,"MButtonClass",0x0,146,36,17,15,
+ 0x18000000L
+ CONTROL "",IDC_MENU,"MButtonClass",0x0,167,36,17,15,0x18000000L
+END
+
+
+/////////////////////////////////////////////////////////////////////////////
+//
+// DESIGNINFO
+//
+
+#ifdef APSTUDIO_INVOKED
+GUIDELINES DESIGNINFO DISCARDABLE
+BEGIN
+ IDD_OPT, DIALOG
+ BEGIN
+ TOPMARGIN, 3
+ END
+
+ IDD_MAIN, DIALOG
+ BEGIN
+ RIGHTMARGIN, 184
+ BOTTOMMARGIN, 51
+ END
+END
+#endif // APSTUDIO_INVOKED
+
+
+/////////////////////////////////////////////////////////////////////////////
+//
+// Accelerator
+//
+
+ACCEL_TABLE ACCELERATORS DISCARDABLE
+BEGIN
+ "A", HOTKEY_ALL_CONTACTS, VIRTKEY, CONTROL, NOINVERT
+ "F", HOTKEY_FILE, VIRTKEY, CONTROL, NOINVERT
+ "H", HOTKEY_HISTORY, VIRTKEY, CONTROL, NOINVERT
+ "I", HOTKEY_INFO, VIRTKEY, CONTROL, NOINVERT
+ "M", HOTKEY_MENU, VIRTKEY, CONTROL, NOINVERT
+ "U", HOTKEY_URL, VIRTKEY, CONTROL, NOINVERT
+ "V", HOTKEY_VOICE, VIRTKEY, CONTROL, NOINVERT
+END
+
+#endif // English (U.S.) resources
+/////////////////////////////////////////////////////////////////////////////
+
+
+/////////////////////////////////////////////////////////////////////////////
+// English (Canada) resources
+
+#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENC)
+#ifdef _WIN32
+LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_CAN
+#pragma code_page(1252)
+#endif //_WIN32
+
+#ifdef APSTUDIO_INVOKED
+/////////////////////////////////////////////////////////////////////////////
+//
+// TEXTINCLUDE
+//
+
+1 TEXTINCLUDE DISCARDABLE
+BEGIN
+ "resource.h\0"
+END
+
+2 TEXTINCLUDE DISCARDABLE
+BEGIN
+ "#include ""resource.h""\r\n"
+ "#include ""winresrc.h""\r\n"
+ "\0"
+END
+
+3 TEXTINCLUDE DISCARDABLE
+BEGIN
+ "\r\n"
+ "\0"
+END
+
+#endif // APSTUDIO_INVOKED
+
+#endif // English (Canada) resources
+/////////////////////////////////////////////////////////////////////////////
+
+
+
+#ifndef APSTUDIO_INVOKED
+/////////////////////////////////////////////////////////////////////////////
+//
+// Generated from the TEXTINCLUDE 3 resource.
+//
+
+
+/////////////////////////////////////////////////////////////////////////////
+#endif // not APSTUDIO_INVOKED
+