diff options
Diffstat (limited to 'src/mir_app')
-rw-r--r-- | src/mir_app/res/resource.rc | 23 | ||||
-rw-r--r-- | src/mir_app/src/help.cpp | 210 | ||||
-rw-r--r-- | src/mir_app/src/modules.cpp | 2 | ||||
-rw-r--r-- | src/mir_app/src/newplugins.cpp | 12 |
4 files changed, 241 insertions, 6 deletions
diff --git a/src/mir_app/res/resource.rc b/src/mir_app/res/resource.rc index 992351183a..f6c1a544ea 100644 --- a/src/mir_app/res/resource.rc +++ b/src/mir_app/res/resource.rc @@ -757,6 +757,21 @@ BEGIN CONTROL "&Add",IDC_ADD,"MButtonClass",WS_TABSTOP,197,29,16,14,WS_EX_NOACTIVATE | 0x10000000L
END
+IDD_ABOUT DIALOGEX 0, 0, 212, 131
+STYLE DS_SETFONT | DS_MODALFRAME | DS_3DLOOK | DS_FIXEDSYS | DS_CENTER | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU
+EXSTYLE WS_EX_CONTROLPARENT
+CAPTION "About Miranda NG"
+FONT 8, "MS Shell Dlg", 0, 0, 0x1
+BEGIN
+ CONTROL "",IDC_HEADERBAR,"MHeaderbarCtrl",WS_TABSTOP,0,0,212,25
+ LTEXT "",IDC_WHITERECT,0,25,213,81
+ DEFPUSHBUTTON "OK",IDOK,137,112,70,14
+ CONTROL "",IDC_STATIC,"Static",SS_ETCHEDHORZ,0,106,213,1
+ LTEXT "",IDC_DEVS,5,32,202,42
+ PUSHBUTTON "Credits >",IDC_CONTRIBLINK,5,112,70,14
+ EDITTEXT IDC_CREDITSFILE,4,32,202,67,ES_CENTER | ES_MULTILINE | ES_AUTOVSCROLL | ES_AUTOHSCROLL | ES_READONLY | NOT WS_BORDER | WS_VSCROLL
+END
+
/////////////////////////////////////////////////////////////////////////////
//
// DESIGNINFO
@@ -1043,6 +1058,14 @@ BEGIN TOPMARGIN, 3
BOTTOMMARGIN, 65
END
+
+ IDD_ABOUT, DIALOG
+ BEGIN
+ LEFTMARGIN, 5
+ RIGHTMARGIN, 207
+ TOPMARGIN, 7
+ BOTTOMMARGIN, 126
+ END
END
#endif // APSTUDIO_INVOKED
diff --git a/src/mir_app/src/help.cpp b/src/mir_app/src/help.cpp new file mode 100644 index 0000000000..7d479e940c --- /dev/null +++ b/src/mir_app/src/help.cpp @@ -0,0 +1,210 @@ +/* + +Miranda NG: the free IM client for Microsoft* Windows* + +Copyright (c) 2012-17 Miranda NG project (https://miranda-ng.org), +Copyright (c) 2000-12 Miranda IM project, +all portions of this codebase are copyrighted to the people +listed in contributors.txt. + +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; either version 2 +of the License, or (at your option) any later version. + +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, write to the Free Software +Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +*/ + +#include "stdafx.h" + +HWND hAboutDlg = nullptr; + +#define STR_VERSION_FORMAT L"Miranda NG\nv%S" + +static INT_PTR CALLBACK DlgProcAbout(HWND hwndDlg, UINT msg, WPARAM wParam, LPARAM lParam) +{ + static int iState = 0; + switch (msg) { + case WM_INITDIALOG: + TranslateDialogDefault(hwndDlg); + { wchar_t filename[MAX_PATH], *productCopyright; + DWORD unused; + DWORD verInfoSize; + UINT blockSize; + PVOID pVerInfo; + + GetModuleFileName(nullptr, filename, _countof(filename)); + verInfoSize = GetFileVersionInfoSize(filename, &unused); + pVerInfo = mir_alloc(verInfoSize); + GetFileVersionInfo(filename, 0, verInfoSize, pVerInfo); + VerQueryValue(pVerInfo, L"\\StringFileInfo\\000004b0\\LegalCopyright", (LPVOID*)&productCopyright, &blockSize); + SetDlgItemText(hwndDlg, IDC_DEVS, productCopyright); + mir_free(pVerInfo); + } + { + char productVersion[56]; + Miranda_GetVersionText(productVersion, _countof(productVersion)); + + wchar_t str[64]; + mir_snwprintf(str, STR_VERSION_FORMAT, productVersion); + SetDlgItemText(hwndDlg, IDC_HEADERBAR, str); + } + ShowWindow(GetDlgItem(hwndDlg, IDC_CREDITSFILE), SW_HIDE); + { + HRSRC hResInfo = FindResource(g_hInst, MAKEINTRESOURCE(IDR_CREDITS), L"TEXT"); + DWORD ResSize = SizeofResource(g_hInst, hResInfo); + HGLOBAL hRes = LoadResource(g_hInst, hResInfo); + char* pszMsg = (char*)LockResource(hRes); + if (pszMsg) { + char* pszMsgt = (char*)alloca(ResSize + 1); + memcpy(pszMsgt, pszMsg, ResSize); pszMsgt[ResSize] = 0; + + wchar_t *ptszMsg; + if (ResSize >= 3 && pszMsgt[0] == '\xef' && pszMsgt[1] == '\xbb' && pszMsgt[2] == '\xbf') + ptszMsg = Utf8DecodeW(pszMsgt + 3); + else + ptszMsg = mir_a2u_cp(pszMsgt, 1252); + + SetDlgItemText(hwndDlg, IDC_CREDITSFILE, ptszMsg); + UnlockResource(pszMsg); + mir_free(ptszMsg); + } + FreeResource(hRes); + } + Window_SetSkinIcon_IcoLib(hwndDlg, SKINICON_OTHER_MIRANDA); + return TRUE; + + case WM_COMMAND: + switch (LOWORD(wParam)) { + case IDOK: + case IDCANCEL: + DestroyWindow(hwndDlg); + return TRUE; + case IDC_CONTRIBLINK: + if (iState) { + iState = 0; + SetDlgItemText(hwndDlg, IDC_CONTRIBLINK, TranslateT("Credits >")); + ShowWindow(GetDlgItem(hwndDlg, IDC_DEVS), SW_SHOW); + ShowWindow(GetDlgItem(hwndDlg, IDC_CREDITSFILE), SW_HIDE); + } + else { + iState = 1; + SetDlgItemText(hwndDlg, IDC_CONTRIBLINK, TranslateT("< Copyright")); + ShowWindow(GetDlgItem(hwndDlg, IDC_DEVS), SW_HIDE); + ShowWindow(GetDlgItem(hwndDlg, IDC_CREDITSFILE), SW_SHOW); + } + break; + } + break; + + case WM_CTLCOLOREDIT: + case WM_CTLCOLORSTATIC: + switch (GetWindowLongPtr((HWND)lParam, GWL_ID)) { + case IDC_WHITERECT: + case IDC_CREDITSFILE: + case IDC_DEVS: + SetTextColor((HDC)wParam, GetSysColor(COLOR_WINDOWTEXT)); + break; + default: + return FALSE; + } + SetBkColor((HDC)wParam, GetSysColor(COLOR_WINDOW)); + return (INT_PTR)GetSysColorBrush(COLOR_WINDOW); + + case WM_DESTROY: + Window_FreeIcon_IcoLib(hwndDlg); + { + HFONT hFont = (HFONT)SendDlgItemMessage(hwndDlg, IDC_VERSION, WM_GETFONT, 0, 0); + SendDlgItemMessage(hwndDlg, IDC_VERSION, WM_SETFONT, SendDlgItemMessage(hwndDlg, IDOK, WM_GETFONT, 0, 0), 0); + DeleteObject(hFont); + } + break; + } + return FALSE; +} + +static INT_PTR AboutCommand(WPARAM wParam, LPARAM) +{ + if (IsWindow(hAboutDlg)) { + SetForegroundWindow(hAboutDlg); + SetFocus(hAboutDlg); + return 0; + } + hAboutDlg = CreateDialog(g_hInst, MAKEINTRESOURCE(IDD_ABOUT), (HWND)wParam, DlgProcAbout); + return 0; +} + +static INT_PTR IndexCommand(WPARAM, LPARAM) +{ + Utils_OpenUrl("https://wiki.miranda-ng.org"); + return 0; +} + +static INT_PTR WebsiteCommand(WPARAM, LPARAM) +{ + Utils_OpenUrl("https://miranda-ng.org"); + return 0; +} + +static INT_PTR BugCommand(WPARAM, LPARAM) +{ + Utils_OpenUrl("https://github.com/miranda-ng/miranda-ng/issues/new"); + return 0; +} + +int ShutdownHelpModule(WPARAM, LPARAM) +{ + if (IsWindow(hAboutDlg)) DestroyWindow(hAboutDlg); + hAboutDlg = nullptr; + return 0; +} + +int LoadHelpModule(void) +{ + HookEvent(ME_SYSTEM_PRESHUTDOWN, ShutdownHelpModule); + + CreateServiceFunction("Help/AboutCommand", AboutCommand); + CreateServiceFunction("Help/IndexCommand", IndexCommand); + CreateServiceFunction("Help/WebsiteCommand", WebsiteCommand); + CreateServiceFunction("Help/BugCommand", BugCommand); + + CMenuItem mi; + mi.root = Menu_CreateRoot(MO_MAIN, LPGENW("&Help"), 2000090000); + Menu_ConfigureItem(mi.root, MCI_OPT_UID, "8824ECA5-6942-46D7-9D07-1BA600E0D02E"); + + SET_UID(mi, 0xf3ebf1fa, 0x587c, 0x494d, 0xbd, 0x33, 0x7f, 0x88, 0xb3, 0x61, 0x1e, 0xd3); + mi.hIcolibItem = Skin_GetIconHandle(SKINICON_OTHER_MIRANDA); + mi.position = 2000090000; + mi.name.a = LPGEN("&About..."); + mi.pszService = "Help/AboutCommand"; + Menu_AddMainMenuItem(&mi); + + SET_UID(mi, 0x495df66f, 0x844e, 0x479a, 0xaf, 0x21, 0x3e, 0x42, 0xc5, 0x14, 0x7c, 0x7e); + mi.hIcolibItem = Skin_GetIconHandle(SKINICON_OTHER_HELP); + mi.position = -500050000; + mi.name.a = LPGEN("&Support"); + mi.pszService = "Help/IndexCommand"; + Menu_AddMainMenuItem(&mi); + + SET_UID(mi, 0x15e18b58, 0xec73, 0x45c2, 0xb9, 0xf4, 0x2a, 0xfe, 0xc2, 0xb7, 0xd3, 0x25); + mi.hIcolibItem = Skin_GetIconHandle(SKINICON_OTHER_MIRANDAWEB); + mi.position = 2000050000; + mi.name.a = LPGEN("&Miranda NG homepage"); + mi.pszService = "Help/WebsiteCommand"; + Menu_AddMainMenuItem(&mi); + + SET_UID(mi, 0xe7d0fe8b, 0xfdeb, 0x45b3, 0xba, 0x83, 0x3, 0x1e, 0x15, 0xda, 0x7e, 0x52); + mi.hIcolibItem = Skin_GetIconHandle(SKINICON_EVENT_URL); + mi.position = 2000040000; + mi.name.a = LPGEN("&Report bug"); + mi.pszService = "Help/BugCommand"; + Menu_AddMainMenuItem(&mi); + return 0; +} diff --git a/src/mir_app/src/modules.cpp b/src/mir_app/src/modules.cpp index 6795b63318..e17b3afa0f 100644 --- a/src/mir_app/src/modules.cpp +++ b/src/mir_app/src/modules.cpp @@ -40,6 +40,7 @@ int LoadAccountsModule(void); // core: account manager int LoadIgnoreModule(void); // protocol filter: ignore
int LoadDbintfModule(void);
int LoadSrmmModule(void);
+int LoadHelpModule(void);
int LoadContactsModule(void);
int LoadDatabaseModule(void);
@@ -141,6 +142,7 @@ int LoadDefaultModules(void) if (LoadFontserviceModule()) return 1;
if (LoadSrmmModule()) return 1;
if (LoadChatModule()) return 1;
+ if (LoadHelpModule()) return 1;
if (LoadSendRecvAuthModule()) return 1;
if (LoadDescButtonModule()) return 1;
if (LoadOptionsModule()) return 1;
diff --git a/src/mir_app/src/newplugins.cpp b/src/mir_app/src/newplugins.cpp index 595a0a0be3..82c4d9066b 100644 --- a/src/mir_app/src/newplugins.cpp +++ b/src/mir_app/src/newplugins.cpp @@ -122,6 +122,7 @@ static const MUUID pluginBannedList[] = { 0xb908773a, 0x86f7, 0x4a91, { 0x86, 0x74, 0x6a, 0x20, 0xba, 0x0e, 0x67, 0xd1 } }, // dropbox
{ 0x748f8934, 0x781a, 0x528d, { 0x52, 0x08, 0x00, 0x12, 0x65, 0x40, 0x4a, 0xb3 } }, // tlen
{ 0x8d0a046d, 0x8ea9, 0x4c55, { 0xb5, 0x68, 0x38, 0xda, 0x52, 0x05, 0x64, 0xfd } }, // stdauth
+ { 0x1e64fd80, 0x299e, 0x48a0, { 0x94, 0x41, 0xde, 0x28, 0x68, 0x56, 0x3b, 0x6f } }, // stdhelp
};
static bool isPluginBanned(const MUUID& u1)
@@ -143,12 +144,11 @@ static MuuidReplacement pluginDefault[] = { MIID_UIUSERINFO, L"stduserinfo", nullptr }, // 2
{ MIID_SREMAIL, L"stdemail", nullptr }, // 3
{ MIID_SRFILE, L"stdfile", nullptr }, // 4
- { MIID_UIHELP, L"stdhelp", nullptr }, // 5
- { MIID_UIHISTORY, L"stduihist", nullptr }, // 6
- { MIID_IDLE, L"stdidle", nullptr }, // 7
- { MIID_AUTOAWAY, L"stdautoaway", nullptr }, // 8
- { MIID_USERONLINE, L"stduseronline", nullptr }, // 9
- { MIID_SRAWAY, L"stdaway", nullptr }, // 10
+ { MIID_UIHISTORY, L"stduihist", nullptr }, // 5
+ { MIID_IDLE, L"stdidle", nullptr }, // 6
+ { MIID_AUTOAWAY, L"stdautoaway", nullptr }, // 7
+ { MIID_USERONLINE, L"stduseronline", nullptr }, // 8
+ { MIID_SRAWAY, L"stdaway", nullptr }, // 9
};
int getDefaultPluginIdx(const MUUID &muuid)
|