/*
Miranda SmileyAdd Plugin
Copyright (C) 2005 - 2011 Boris Krasnovskiy All Rights Reserved
Copyright (C) 2003 - 2004 Rein-Peter de Boer
This program is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public License
as published by the Free Software Foundation version 2
of the License.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see .
*/
#include "stdafx.h"
// globals
HANDLE g_hevOptionsChanged;
HGENMENU hContactMenuItem;
CMPlugin g_plugin;
static IconItem iconList[] =
{
{ LPGEN("Button smiley"), "SmileyAdd_ButtonSmiley", IDI_SMILINGICON }
};
void InitServices();
/////////////////////////////////////////////////////////////////////////////////////////
static const PLUGININFOEX pluginInfoEx =
{
sizeof(PLUGININFOEX),
__PLUGIN_NAME,
PLUGIN_MAKE_VERSION(__MAJOR_VERSION, __MINOR_VERSION, __RELEASE_NUM, __BUILD_NUM),
__DESCRIPTION,
__AUTHOR,
__COPYRIGHT,
__AUTHORWEB,
UNICODE_AWARE,
// {BD542BB4-5AE4-4D0E-A435-BA8DBE39607F}
{0xbd542bb4, 0x5ae4, 0x4d0e, {0xa4, 0x35, 0xba, 0x8d, 0xbe, 0x39, 0x60, 0x7f}}
};
CMPlugin::CMPlugin() :
PLUGIN(MODULENAME, pluginInfoEx)
{}
/////////////////////////////////////////////////////////////////////////////////////////
// Events
int AccountListChanged(WPARAM wParam, LPARAM lParam)
{
PROTOACCOUNT *acc = (PROTOACCOUNT *)lParam;
switch (wParam) {
case PRAC_ADDED:
if (acc != nullptr) {
const CMStringW &defaultFile = g_SmileyCategories.GetSmileyCategory(L"Standard")->GetFilename();
g_SmileyCategories.AddAccountAsCategory(acc, defaultFile);
}
break;
case PRAC_CHANGED:
if (acc != nullptr && acc->szModuleName != nullptr) {
CMStringW name(acc->szModuleName);
SmileyCategoryType *smc = g_SmileyCategories.GetSmileyCategory(name);
if (smc != nullptr) {
if (acc->tszAccountName)
name = acc->tszAccountName;
smc->SetDisplayName(name);
}
}
break;
case PRAC_REMOVED:
g_SmileyCategories.DeleteAccountAsCategory(acc);
break;
case PRAC_CHECKED:
if (acc != nullptr) {
if (acc->bIsEnabled) {
const CMStringW &defaultFile = g_SmileyCategories.GetSmileyCategory(L"Standard")->GetFilename();
g_SmileyCategories.AddAccountAsCategory(acc, defaultFile);
}
else g_SmileyCategories.DeleteAccountAsCategory(acc);
}
break;
}
return 0;
}
static int DbSettingChanged(WPARAM hContact, LPARAM lParam)
{
if (hContact == 0)
return 0;
DBCONTACTWRITESETTING *cws = (DBCONTACTWRITESETTING *)lParam;
if (cws->value.type == DBVT_DELETED)
return 0;
if (strcmp(cws->szSetting, "Transport") == 0) {
SmileyCategoryType *smc = g_SmileyCategories.GetSmileyCategory(L"Standard");
if (smc != nullptr)
g_SmileyCategories.AddContactTransportAsCategory(hContact, smc->GetFilename());
}
return 0;
}
static int ReloadColors(WPARAM, LPARAM)
{
opt.SelWndBkgClr = db_get_dw(0, "SmileyAdd", "SelWndBkgClr", GetSysColor(COLOR_WINDOW));
return 0;
}
static int ModulesLoaded(WPARAM, LPARAM)
{
CMenuItem mi(&g_plugin);
SET_UID(mi, 0x5ba238de, 0xe16b, 0x4928, 0xa0, 0x70, 0xff, 0x43, 0xf6, 0x1f, 0x16, 0xd4);
mi.position = 2000070050;
mi.hIcolibItem = iconList[0].hIcolib;
mi.name.a = LPGEN("Assign smiley category");
hContactMenuItem = Menu_AddContactMenuItem(&mi);
DownloadInit();
// install hooks if enabled
InstallDialogBoxHook();
g_SmileyCategories.AddAllProtocolsAsCategory();
g_SmileyCategories.ClearAndLoadAll();
ColourID cid = {};
strcpy_s(cid.dbSettingsGroup, MODULENAME);
strcpy_s(cid.group, MODULENAME);
strcpy_s(cid.name, LPGEN("Background color"));
strcpy_s(cid.setting, "SelWndBkgClr");
cid.defcolour = GetSysColor(COLOR_WINDOW);
g_plugin.addColor(&cid);
return 0;
}
static int MirandaShutdown(WPARAM, LPARAM)
{
CloseSmileys();
DestroyProxyWindow();
return 0;
}
int CMPlugin::Load()
{
g_plugin.registerIcon(MODULENAME, iconList);
g_SmileyCategories.SetSmileyPackStore(&g_SmileyPacks);
opt.Load();
// create smiley events
g_hevOptionsChanged = CreateHookableEvent(ME_SMILEYADD_OPTIONSCHANGED);
HookEvent(ME_SYSTEM_MODULESLOADED, ModulesLoaded);
HookEvent(ME_SYSTEM_SHUTDOWN, MirandaShutdown);
HookEvent(ME_OPT_INITIALISE, SmileysOptionsInitialize);
HookEvent(ME_PROTO_ACCLISTCHANGED, AccountListChanged);
HookEvent(ME_DB_CONTACT_SETTINGCHANGED, DbSettingChanged);
HookEvent(ME_COLOUR_RELOAD, ReloadColors);
HookEvent(ME_MSG_BUTTONPRESSED, SmileyButtonPressed);
HookTemporaryEvent(ME_MSG_TOOLBARLOADED, SmileyButtonCreate);
// create the smiley services
InitServices();
return 0;
}
/////////////////////////////////////////////////////////////////////////////////////////
int CMPlugin::Unload()
{
RemoveDialogBoxHook();
DestroyHookableEvent(g_hevOptionsChanged);
RichEditData_Destroy();
g_SmileyCategories.ClearAll();
g_SmileyPackCStore.ClearAndFreeAll();
DestroyImageCache();
DestroyGdiPlus();
DownloadClose();
return 0;
}