From 58002bcdddc61a9290bcfd0459c38ea044f88de7 Mon Sep 17 00:00:00 2001 From: George Hazan Date: Sun, 23 Mar 2014 14:26:29 +0000 Subject: ability to select & store the langpack chosen git-svn-id: http://svn.miranda-ng.org/main/trunk@8702 1316c22d-e87f-b044-9b9b-93d7a3e3ba9c --- src/modules/langpack/lpopts.cpp | 189 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 189 insertions(+) create mode 100644 src/modules/langpack/lpopts.cpp (limited to 'src/modules/langpack/lpopts.cpp') diff --git a/src/modules/langpack/lpopts.cpp b/src/modules/langpack/lpopts.cpp new file mode 100644 index 0000000000..f52254afff --- /dev/null +++ b/src/modules/langpack/lpopts.cpp @@ -0,0 +1,189 @@ +/* + +Miranda NG: the free IM client for Microsoft* Windows* + +Copyright (c) 2012-14 Miranda NG project (http://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 "..\..\core\commonheaders.h" +#include "langpack.h" + +static void DisplayPackInfo(HWND hwndDlg, const LANGPACK_INFO *pack) +{ + /* locale string */ + if (!(pack->flags & LPF_NOLOCALE)) { + TCHAR szLocaleName[256], szLanguageName[128], szContryName[128]; + + if (!GetLocaleInfo(pack->Locale, WINVER >= _WIN32_WINNT_WIN7 ? LOCALE_SENGLISHLANGUAGENAME : LOCALE_SENGLANGUAGE, szLanguageName, SIZEOF(szLanguageName))) + szLanguageName[0] = _T('\0'); + if (!GetLocaleInfo(pack->Locale, WINVER >= _WIN32_WINNT_WIN7 ? LOCALE_SENGLISHCOUNTRYNAME : LOCALE_SENGCOUNTRY, szContryName, SIZEOF(szContryName))) + szContryName[0] = _T('\0'); + + /* add some note if its incompatible */ + if (szLanguageName[0] && szContryName[0]) { + mir_sntprintf(szLocaleName, SIZEOF(szLocaleName), _T("%s (%s)"), TranslateTS(szLanguageName), TranslateTS(szContryName)); + if (!IsValidLocale(pack->Locale, LCID_INSTALLED)) { + TCHAR *pszIncompat; + pszIncompat = TranslateT("(incompatible)"); + szLocaleName[SIZEOF(szLocaleName) - lstrlen(pszIncompat) - 1] = 0; + lstrcat(lstrcat(szLocaleName, _T(" ")), pszIncompat); + } + SetDlgItemText(hwndDlg, IDC_LANGLOCALE, szLocaleName); + } + else SetDlgItemText(hwndDlg, IDC_LANGLOCALE, TranslateT("Unknown")); + } + else SetDlgItemText(hwndDlg, IDC_LANGLOCALE, TranslateT("Unknown")); + + /* file date */ + SYSTEMTIME stFileDate; + TCHAR szDate[128]; szDate[0] = 0; + if (FileTimeToSystemTime(&pack->ftFileDate, &stFileDate)) + GetDateFormat((LCID)CallService(MS_LANGPACK_GETLOCALE, 0, 0), DATE_SHORTDATE, &stFileDate, NULL, szDate, SIZEOF(szDate)); + SetDlgItemText(hwndDlg, IDC_LANGDATE, szDate); + + /* plugins included */ + SetDlgItemTextA(hwndDlg, IDC_PLUGINSINCLUDED, pack->szPluginsIncluded); + if (pack->szPluginsIncluded[0]) { + if (!IsWindowVisible(GetDlgItem(hwndDlg, IDC_PLUGINSINCLUDEDLABEL))) { + ShowWindow(GetDlgItem(hwndDlg,IDC_PLUGINSINCLUDEDLABEL), SW_SHOW); + ShowWindow(GetDlgItem(hwndDlg, IDC_PLUGINSINCLUDED), SW_SHOW); + } + } + else { + ShowWindow(GetDlgItem(hwndDlg, IDC_PLUGINSINCLUDEDLABEL), SW_HIDE); + ShowWindow(GetDlgItem(hwndDlg, IDC_PLUGINSINCLUDED), SW_HIDE); + } + + /* general */ + SetDlgItemTextA(hwndDlg, IDC_LANGMODUSING, pack->szLastModifiedUsing); + SetDlgItemTextA(hwndDlg, IDC_LANGAUTHORS, pack->szAuthors); + SetDlgItemTextA(hwndDlg, IDC_LANGEMAIL, pack->szAuthorEmail); + SetDlgItemText(hwndDlg, IDC_LANGINFOFRAME, TranslateTS(pack->tszLanguage)); +} + +static BOOL InsertPackItemEnumProc(LANGPACK_INFO *pack, WPARAM wParam, LPARAM lParam) +{ + LANGPACK_INFO *pack2 = (LANGPACK_INFO*)mir_alloc(sizeof(LANGPACK_INFO)); + if (pack2 == NULL) return FALSE; + CopyMemory(pack2, pack, sizeof(LANGPACK_INFO)); + + /* insert */ + TCHAR tszName[512]; + mir_sntprintf(tszName, sizeof(tszName), _T("%s [%s]"), + TranslateTS(pack->tszLanguage), + pack->flags & LPF_DEFAULT ? TranslateT("built-in") : pack->tszFileName); + UINT message = pack->flags & LPF_DEFAULT ? CB_INSERTSTRING : CB_ADDSTRING; + int idx = SendMessage((HWND)wParam, message, 0, (LPARAM)tszName); + SendMessage((HWND)wParam, CB_SETITEMDATA, idx, (LPARAM)pack2); + if (pack->flags & LPF_ENABLED) { + SendMessage((HWND)wParam, CB_SETCURSEL, idx, 0); + DisplayPackInfo(GetParent((HWND)wParam), pack); + } + + return TRUE; +} + +INT_PTR CALLBACK DlgLangpackOpt(HWND hwndDlg, UINT msg, WPARAM wParam, LPARAM lParam) +{ + HWND hwndList = GetDlgItem(hwndDlg, IDC_LANGUAGES); + + switch (msg) { + case WM_INITDIALOG: + TranslateDialogDefault(hwndDlg); + ComboBox_ResetContent(hwndList); + EnumLangpacks(InsertPackItemEnumProc, (WPARAM)hwndList, (LPARAM)0); + return TRUE; + + case WM_DESTROY: + { + int count = ListBox_GetCount(hwndList); + for (int i = 0; i < count; i++) + mir_free((LANGPACK_INFO*)ListBox_GetItemData(hwndList, i)); + ComboBox_ResetContent(hwndList); + } + return TRUE; + + case WM_COMMAND: + switch (LOWORD(wParam)) { + case IDC_LANGEMAIL: + { + char buf[512]; + lstrcpyA(buf, "mailto:"); + if (GetWindowTextA(GetDlgItem(hwndDlg, LOWORD(wParam)), &buf[7], sizeof(buf)-7)) + CallService(MS_UTILS_OPENURL, FALSE, (LPARAM)buf); + } + break; + + case IDC_MORELANG: + CallService(MS_UTILS_OPENURL, TRUE, (LPARAM)"http://wiki.miranda-ng.org/index.php?title=Langpacks/en#Download"); + break; + + case IDC_LANGUAGES: + if (HIWORD(wParam) == CBN_SELCHANGE) { + int idx = ComboBox_GetCurSel(hwndList); + LANGPACK_INFO *pack = (LANGPACK_INFO*)ComboBox_GetItemData(hwndList, idx); + DisplayPackInfo(hwndDlg, pack); + if (!(pack->flags & LPF_ENABLED)) + SendMessage(GetParent(hwndDlg), PSM_CHANGED, 0, 0); + } + } + break; + + case WM_NOTIFY: + if (LPNMHDR(lParam)->code == PSN_APPLY) { + TCHAR tszPath[MAX_PATH]; tszPath[0] = 0; + int idx = ComboBox_GetCurSel(hwndList); + int count = ComboBox_GetCount(hwndList); + for (int i = 0; i < count; i++) { + LANGPACK_INFO *pack = (LANGPACK_INFO*)ComboBox_GetItemData(hwndList, idx); + if (i == idx) { + db_set_ws(NULL, "Langpack", "Current", pack->tszFileName); + lstrcpy(tszPath, pack->tszFullPath); + pack->flags |= LPF_ENABLED; + } + else pack->flags &= ~LPF_ENABLED; + } + + if (tszPath[0]) { + CallService(MS_LANGPACK_RELOAD, 0, (LPARAM)tszPath); + CloseWindow(GetParent(hwndDlg)); + DestroyWindow(GetParent(hwndDlg)); + } + } + break; + } + return FALSE; +} + +///////////////////////////////////////////////////////////////////////////////////////// + +int LangpackOptionsInit(WPARAM wParam, LPARAM) +{ + OPTIONSDIALOGPAGE odp = { sizeof(odp) }; + odp.hInstance = hInst; + odp.pfnDlgProc = DlgLangpackOpt; + odp.pszTemplate = MAKEINTRESOURCEA(IDD_OPT_LANGUAGES); + odp.position = -1300000000; + odp.pszTitle = LPGEN("Languages"); + odp.pszGroup = LPGEN("Customize"); + odp.flags = ODPF_BOLDGROUPS; + Options_AddPage(wParam, &odp); + return 0; +} -- cgit v1.2.3