summaryrefslogtreecommitdiff
path: root/plugins/YAPP/popups2.cpp
diff options
context:
space:
mode:
authorKirill Volinsky <mataes2007@gmail.com>2012-05-18 22:02:50 +0000
committerKirill Volinsky <mataes2007@gmail.com>2012-05-18 22:02:50 +0000
commitf920ef497f3299ae24fe783ce03bdd93b419f764 (patch)
treebdaa9197c08d29ab141a6adfdd6cc0a68ddd3996 /plugins/YAPP/popups2.cpp
parent6c3b0571f0678da0512069869afaa284c054377e (diff)
plugins folders renaming
git-svn-id: http://svn.miranda-ng.org/main/trunk@60 1316c22d-e87f-b044-9b9b-93d7a3e3ba9c
Diffstat (limited to 'plugins/YAPP/popups2.cpp')
-rw-r--r--plugins/YAPP/popups2.cpp384
1 files changed, 384 insertions, 0 deletions
diff --git a/plugins/YAPP/popups2.cpp b/plugins/YAPP/popups2.cpp
new file mode 100644
index 0000000000..3029ed709f
--- /dev/null
+++ b/plugins/YAPP/popups2.cpp
@@ -0,0 +1,384 @@
+// popups2.cpp : Defines the entry point for the DLL application.
+//
+
+#include "common.h"
+#include "popups2.h"
+#include "version.h"
+#include "message_pump.h"
+#include "options.h"
+#include "popwin.h"
+#include "notify.h"
+
+#include "popup_history.h" //to be able to update the renderer
+
+HMODULE hInst = 0;
+
+MNOTIFYLINK *notifyLink = 0;
+
+// used to work around a bug in neweventnotify and others with the address passed in the GetPluginData function
+bool ignore_gpd_passed_addy = false;
+
+FontID font_id_firstline = {0}, font_id_secondline = {0}, font_id_time = {0};
+ColourID colour_id_bg = {0}, colour_id_border = {0}, colour_id_sidebar = {0}, colour_id_titleunderline = {0};
+FontIDW font_id_firstlinew = {0}, font_id_secondlinew = {0}, font_id_timew = {0};
+ColourIDW colour_id_bgw = {0}, colour_id_borderw = {0}, colour_id_sidebarw = {0}, colour_id_titleunderlinew = {0};
+
+COLORREF colBg = GetSysColor(COLOR_3DSHADOW);
+HFONT hFontFirstLine = 0, hFontSecondLine = 0, hFontTime = 0;
+COLORREF colFirstLine = RGB(255, 0, 0), colSecondLine = 0, colTime = RGB(0, 0, 255), colBorder = RGB(0, 0, 0),
+ colSidebar = RGB(128, 128, 128), colTitleUnderline = GetSysColor(COLOR_3DSHADOW);
+int hLangpack;
+
+PLUGININFOEX pluginInfo={
+ sizeof(PLUGININFOEX),
+ __PLUGIN_NAME,
+ PLUGIN_MAKE_VERSION(__MAJOR_VERSION, __MINOR_VERSION, __RELEASE_NUM, __BUILD_NUM),
+ __DESC,
+ __AUTHOR,
+ __AUTHOREMAIL,
+ __COPYRIGHT,
+ __AUTHORWEB,
+ UNICODE_AWARE, //not transient
+ 0, //doesn't replace anything built-in
+
+#ifndef _UNICODE
+ { 0xefd15f16, 0x7ae4, 0x40d7, { 0xa8, 0xe3, 0xa4, 0x11, 0xed, 0x74, 0x7b, 0xd5 } } // {EFD15F16-7AE4-40d7-A8E3-A411ED747BD5}
+#else
+ { 0x563780ef, 0xac7e, 0x40ba, { 0xa8, 0xa, 0xd, 0xcd, 0x4f, 0xd2, 0xf, 0x9 } } // {563780EF-AC7E-40ba-A80A-0DCD4FD20F09}
+#endif
+};
+
+PLUGINLINK *pluginLink;
+
+MM_INTERFACE mmi;
+LIST_INTERFACE li;
+
+extern "C" BOOL APIENTRY DllMain( HMODULE hModule, DWORD ul_reason_for_call, LPVOID lpReserved)
+{
+ hInst = hModule;
+ DisableThreadLibraryCalls(hInst);
+ return TRUE;
+}
+
+extern "C" POPUPS2_API PLUGININFOEX* MirandaPluginInfoEx(DWORD mirandaVersion)
+{
+ pluginInfo.cbSize = sizeof(PLUGININFOEX);
+ if (!IsWinVerNT() && !GetModuleHandle(_T("unicows.dll")))
+ {
+ MessageBox(NULL, _T("The yapp plugin cannot be loaded. It requires unicows.dll."),
+ _T("Miranda IM"), MB_OK | MB_ICONWARNING | MB_SETFOREGROUND | MB_TOPMOST);
+ return NULL;
+ }
+ return &pluginInfo;
+}
+
+static const MUUID interfaces[] = {MIID_POPUPS, MIID_LAST};
+extern "C" __declspec(dllexport) const MUUID* MirandaPluginInterfaces(void)
+{
+ return interfaces;
+}
+
+
+int ReloadFont(WPARAM wParam, LPARAM lParam)
+{
+#ifdef _UNICODE
+ if(ServiceExists(MS_FONT_GETW)) {
+ LOGFONTW log_font;
+ if(hFontFirstLine) DeleteObject(hFontFirstLine);
+ colFirstLine = CallService(MS_FONT_GETW, (WPARAM)&font_id_firstlinew, (LPARAM)&log_font);
+ hFontFirstLine = CreateFontIndirectW(&log_font);
+ if(hFontSecondLine) DeleteObject(hFontSecondLine);
+ colSecondLine = CallService(MS_FONT_GETW, (WPARAM)&font_id_secondlinew, (LPARAM)&log_font);
+ hFontSecondLine = CreateFontIndirectW(&log_font);
+ if(hFontTime) DeleteObject(hFontTime);
+ colTime = CallService(MS_FONT_GETW, (WPARAM)&font_id_timew, (LPARAM)&log_font);
+ hFontTime = CreateFontIndirectW(&log_font);
+
+ colBg = CallService(MS_COLOUR_GETW, (WPARAM)&colour_id_bgw, 0);
+ colBorder = CallService(MS_COLOUR_GETW, (WPARAM)&colour_id_borderw, 0);
+ colSidebar = CallService(MS_COLOUR_GETW, (WPARAM)&colour_id_sidebarw, 0);
+ colTitleUnderline = CallService(MS_COLOUR_GETW, (WPARAM)&colour_id_titleunderlinew, 0);
+ } else
+#endif
+ {
+ LOGFONTA log_font;
+ if(hFontFirstLine) DeleteObject(hFontFirstLine);
+ colFirstLine = CallService(MS_FONT_GET, (WPARAM)&font_id_firstline, (LPARAM)&log_font);
+ hFontFirstLine = CreateFontIndirectA(&log_font);
+ if(hFontSecondLine) DeleteObject(hFontSecondLine);
+ colSecondLine = CallService(MS_FONT_GET, (WPARAM)&font_id_secondline, (LPARAM)&log_font);
+ hFontSecondLine = CreateFontIndirectA(&log_font);
+ if(hFontTime) DeleteObject(hFontTime);
+ colTime = CallService(MS_FONT_GET, (WPARAM)&font_id_time, (LPARAM)&log_font);
+ hFontTime = CreateFontIndirectA(&log_font);
+
+ colBg = CallService(MS_COLOUR_GET, (WPARAM)&colour_id_bg, 0);
+ colBorder = CallService(MS_COLOUR_GET, (WPARAM)&colour_id_border, 0);
+ colSidebar = CallService(MS_COLOUR_GET, (WPARAM)&colour_id_sidebar, 0);
+ colTitleUnderline = CallService(MS_COLOUR_GET, (WPARAM)&colour_id_titleunderline, 0);
+ }
+
+ return 0;
+}
+
+HANDLE hEventReloadFont = 0;
+
+int ModulesLoaded(WPARAM wParam, LPARAM lParam) {
+ MNotifyGetLink();
+
+ if (ServiceExists(MS_HPP_EG_WINDOW))
+ {
+ lstPopupHistory.SetRenderer(RENDER_HISTORYPP);
+ }
+
+ if(ServiceExists(MS_UPDATE_REGISTER)) {
+ // register with updater
+ Update update = {0};
+ char szVersion[16];
+
+ update.cbSize = sizeof(Update);
+
+ update.szComponentName = pluginInfo.shortName;
+ update.pbVersion = (BYTE *)CreateVersionString(pluginInfo.version, szVersion);
+ update.cpbVersion = (int)strlen((char *)update.pbVersion);
+ update.szBetaChangelogURL = "https://server.scottellis.com.au/wsvn/mim_plugs/yapp/?op=log&rev=0&sc=0&isdir=1";
+
+ update.szUpdateURL = UPDATER_AUTOREGISTER;
+
+ // these are the three lines that matter - the archive, the page containing the version string, and the text (or data)
+ // before the version that we use to locate it on the page
+ // (note that if the update URL and the version URL point to standard file listing entries, the backend xml
+ // data will be used to check for updates rather than the actual web page - this is not true for beta urls)
+#ifdef _WIN64
+ update.szBetaUpdateURL = "http://www.scottellis.com.au/miranda_plugins/yapp_x64.zip";
+#endif
+ update.szBetaVersionURL = "http://www.scottellis.com.au/miranda_plugins/ver_yapp.html";
+ update.pbBetaVersionPrefix = (BYTE *)"YAPP version ";
+
+ update.cpbBetaVersionPrefix = (int)strlen((char *)update.pbBetaVersionPrefix);
+
+ CallService(MS_UPDATE_REGISTER, 0, (WPARAM)&update);
+ }
+
+#ifdef _UNICODE
+ if(ServiceExists(MS_FONT_REGISTERW))
+ {
+ font_id_firstlinew.cbSize = sizeof(FontIDW);
+ font_id_firstlinew.flags = FIDF_ALLOWEFFECTS;
+ _tcscpy(font_id_firstlinew.group, _T("Popups"));
+ _tcscpy(font_id_firstlinew.name, _T("First line"));
+ strcpy(font_id_firstlinew.dbSettingsGroup, MODULE);
+ strcpy(font_id_firstlinew.prefix, "FontFirst");
+ font_id_firstlinew.order = 0;
+
+ font_id_secondlinew.cbSize = sizeof(FontIDW);
+ font_id_secondlinew.flags = FIDF_ALLOWEFFECTS;
+ _tcscpy(font_id_secondlinew.group, _T("Popups"));
+ _tcscpy(font_id_secondlinew.name, _T("Second line"));
+ strcpy(font_id_secondlinew.dbSettingsGroup, MODULE);
+ strcpy(font_id_secondlinew.prefix, "FontSecond");
+ font_id_secondlinew.order = 1;
+
+ font_id_timew.cbSize = sizeof(FontIDW);
+ font_id_timew.flags = FIDF_ALLOWEFFECTS;
+ _tcscpy(font_id_timew.group, _T("Popups"));
+ _tcscpy(font_id_timew.name, _T("Time"));
+ strcpy(font_id_timew.dbSettingsGroup, MODULE);
+ strcpy(font_id_timew.prefix, "FontTime");
+ font_id_timew.order = 2;
+
+ CallService(MS_FONT_REGISTERW, (WPARAM)&font_id_firstlinew, 0);
+ CallService(MS_FONT_REGISTERW, (WPARAM)&font_id_secondlinew, 0);
+ CallService(MS_FONT_REGISTERW, (WPARAM)&font_id_timew, 0);
+
+ colour_id_bgw.cbSize = sizeof(ColourIDW);
+ _tcscpy(colour_id_bgw.group, _T("Popups"));
+ _tcscpy(colour_id_bgw.name, _T("Background"));
+ strcpy(colour_id_bgw.dbSettingsGroup, MODULE);
+ strcpy(colour_id_bgw.setting, "ColourBg");
+ colour_id_bgw.defcolour = GetSysColor(COLOR_3DSHADOW);
+ colour_id_bgw.order = 0;
+
+ colour_id_borderw.cbSize = sizeof(ColourIDW);
+ _tcscpy(colour_id_borderw.group, _T("Popups"));
+ _tcscpy(colour_id_borderw.name, _T("Border"));
+ strcpy(colour_id_borderw.dbSettingsGroup, MODULE);
+ strcpy(colour_id_borderw.setting, "ColourBorder");
+ colour_id_borderw.defcolour = RGB(0, 0, 0);
+ colour_id_borderw.order = 1;
+
+ colour_id_sidebarw.cbSize = sizeof(ColourIDW);
+ _tcscpy(colour_id_sidebarw.group, _T("Popups"));
+ _tcscpy(colour_id_sidebarw.name, _T("Sidebar"));
+ strcpy(colour_id_sidebarw.dbSettingsGroup, MODULE);
+ strcpy(colour_id_sidebarw.setting, "ColourSidebar");
+ colour_id_sidebarw.defcolour = RGB(128, 128, 128);
+ colour_id_sidebarw.order = 2;
+
+ colour_id_titleunderlinew.cbSize = sizeof(ColourIDW);
+ _tcscpy(colour_id_titleunderlinew.group, _T("Popups"));
+ _tcscpy(colour_id_titleunderlinew.name, _T("Title underline"));
+ strcpy(colour_id_titleunderlinew.dbSettingsGroup, MODULE);
+ strcpy(colour_id_titleunderlinew.setting, "ColourTitleUnderline");
+ colour_id_titleunderlinew.defcolour = GetSysColor(COLOR_3DSHADOW);
+ colour_id_titleunderlinew.order = 3;
+
+ CallService(MS_COLOUR_REGISTERW, (WPARAM)&colour_id_bgw, 0);
+ CallService(MS_COLOUR_REGISTERW, (WPARAM)&colour_id_borderw, 0);
+ CallService(MS_COLOUR_REGISTERW, (WPARAM)&colour_id_sidebarw, 0);
+ CallService(MS_COLOUR_REGISTERW, (WPARAM)&colour_id_titleunderlinew, 0);
+
+ ReloadFont(0, 0);
+
+ hEventReloadFont = HookEvent(ME_FONT_RELOAD, ReloadFont);
+ }
+ else
+#endif
+ if(ServiceExists(MS_FONT_REGISTER))
+ {
+ font_id_firstline.cbSize = sizeof(FontID);
+ font_id_firstline.flags = FIDF_ALLOWEFFECTS;
+ strcpy(font_id_firstline.group, "Popups");
+ strcpy(font_id_firstline.name, "First line");
+ strcpy(font_id_firstline.dbSettingsGroup, MODULE);
+ strcpy(font_id_firstline.prefix, "FontFirst");
+ font_id_firstline.order = 0;
+
+ font_id_secondline.cbSize = sizeof(FontID);
+ font_id_secondline.flags = FIDF_ALLOWEFFECTS;
+ strcpy(font_id_secondline.group, "Popups");
+ strcpy(font_id_secondline.name, "Second line");
+ strcpy(font_id_secondline.dbSettingsGroup, MODULE);
+ strcpy(font_id_secondline.prefix, "FontSecond");
+ font_id_secondline.order = 1;
+
+ font_id_time.cbSize = sizeof(FontID);
+ font_id_time.flags = FIDF_ALLOWEFFECTS;
+ strcpy(font_id_time.group, "Popups");
+ strcpy(font_id_time.name, "Time");
+ strcpy(font_id_time.dbSettingsGroup, MODULE);
+ strcpy(font_id_time.prefix, "FontTime");
+ font_id_time.order = 2;
+
+ CallService(MS_FONT_REGISTER, (WPARAM)&font_id_firstline, 0);
+ CallService(MS_FONT_REGISTER, (WPARAM)&font_id_secondline, 0);
+ CallService(MS_FONT_REGISTER, (WPARAM)&font_id_time, 0);
+
+ colour_id_bg.cbSize = sizeof(ColourID);
+ strcpy(colour_id_bg.group, "Popups");
+ strcpy(colour_id_bg.name, "Background");
+ strcpy(colour_id_bg.dbSettingsGroup, MODULE);
+ strcpy(colour_id_bg.setting, "ColourBg");
+ colour_id_bg.defcolour = GetSysColor(COLOR_3DSHADOW);
+ colour_id_bg.order = 0;
+
+ colour_id_border.cbSize = sizeof(ColourID);
+ strcpy(colour_id_border.group, "Popups");
+ strcpy(colour_id_border.name, "Border");
+ strcpy(colour_id_border.dbSettingsGroup, MODULE);
+ strcpy(colour_id_border.setting, "ColourBorder");
+ colour_id_border.defcolour = RGB(0, 0, 0);
+ colour_id_border.order = 1;
+
+ colour_id_sidebar.cbSize = sizeof(ColourID);
+ strcpy(colour_id_sidebar.group, "Popups");
+ strcpy(colour_id_sidebar.name, "Sidebar");
+ strcpy(colour_id_sidebar.dbSettingsGroup, MODULE);
+ strcpy(colour_id_sidebar.setting, "ColourSidebar");
+ colour_id_sidebar.defcolour = RGB(128, 128, 128);
+ colour_id_sidebar.order = 2;
+
+ colour_id_titleunderline.cbSize = sizeof(ColourID);
+ strcpy(colour_id_titleunderline.group, "Popups");
+ strcpy(colour_id_titleunderline.name, "Title underline");
+ strcpy(colour_id_titleunderline.dbSettingsGroup, MODULE);
+ strcpy(colour_id_titleunderline.setting, "ColourTitleUnderline");
+ colour_id_titleunderline.defcolour = GetSysColor(COLOR_3DSHADOW);
+ colour_id_titleunderline.order = 3;
+
+ CallService(MS_COLOUR_REGISTER, (WPARAM)&colour_id_bg, 0);
+ CallService(MS_COLOUR_REGISTER, (WPARAM)&colour_id_border, 0);
+ CallService(MS_COLOUR_REGISTER, (WPARAM)&colour_id_sidebar, 0);
+ CallService(MS_COLOUR_REGISTER, (WPARAM)&colour_id_titleunderline, 0);
+
+ ReloadFont(0, 0);
+
+ hEventReloadFont = HookEvent(ME_FONT_RELOAD, ReloadFont);
+ } else {
+ LOGFONT lf = {0};
+ lf.lfCharSet = DEFAULT_CHARSET;
+ lf.lfHeight = -14;
+ lf.lfWeight = FW_BOLD;
+ hFontFirstLine = CreateFontIndirect(&lf);
+
+ lf.lfHeight = -12;
+ lf.lfWeight = 0;
+ hFontSecondLine = CreateFontIndirect(&lf);
+
+ lf.lfHeight = -8;
+ lf.lfWeight = 0;
+ hFontTime = CreateFontIndirect(&lf);
+ }
+
+ LoadModuleDependentOptions();
+
+ if(GetModuleHandle(_T("neweventnotify")))
+ {
+ ignore_gpd_passed_addy = true;
+ }
+
+ return 0;
+}
+
+int PreShutdown(WPARAM wParam, LPARAM lParam) {
+ DeinitMessagePump();
+ DeinitNotify();
+ return 0;
+}
+
+HANDLE hEventPreShutdown, hEventModulesLoaded;
+
+extern "C" int POPUPS2_API Load(PLUGINLINK *link) {
+ pluginLink = link;
+
+ mir_getLI(&li);
+ mir_getMMI(&mmi);
+ mir_getLP(&pluginInfo);
+
+ InitMessagePump();
+ InitOptions();
+ InitNotify();
+
+ hEventPreShutdown = HookEvent(ME_SYSTEM_PRESHUTDOWN, PreShutdown);
+ hEventModulesLoaded = HookEvent(ME_SYSTEM_MODULESLOADED, ModulesLoaded);
+
+ /*
+ // test popup classes
+ PopupClass test = {0};
+ test.cbSize = sizeof(test);
+ test.flags = PCF_TCHAR;
+ test.hIcon = LoadIcon(0, IDI_WARNING);
+ test.colorBack = RGB(0, 0, 0);
+ test.colorText = RGB(255, 255, 255);
+ test.iSeconds = 10;
+ test.ptszDescription = TranslateT("Test popup class");
+ test.pszName = "popup/testclass";
+ CallService(MS_POPUP_REGISTERCLASS, 0, (WPARAM)&test);
+ */
+
+ return 0;
+}
+
+extern "C" int POPUPS2_API Unload() {
+ if(hEventReloadFont) UnhookEvent(hEventReloadFont);
+ UnhookEvent(hEventPreShutdown);
+ UnhookEvent(hEventModulesLoaded);
+ DeinitNotify();
+ if(ServiceExists(MS_FONT_REGISTERW)) {
+ DeleteObject(hFontFirstLine);
+ DeleteObject(hFontSecondLine);
+ DeleteObject(hFontTime);
+ } // otherwise, no need to delete the handle
+
+ return 0;
+}