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_COMMAND: switch (LOWORD(wParam)) { case IDC_LANGEMAIL: { char buf[512]; mir_strcpy(buf, "mailto:"); if (GetDlgItemTextA(hwndDlg, LOWORD(wParam), &buf[7], _countof(buf) - 7)) Utils_OpenUrl(buf); } break; case IDC_MORELANG: Utils_OpenUrl("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); EnableWindow(GetDlgItem(hwndDlg, IDC_RELOAD), (pack->flags & LPF_ENABLED) && !(pack->flags & LPF_DEFAULT)); } break; case IDC_RELOAD: { EnableWindow(GetDlgItem(hwndDlg, IDC_RELOAD), FALSE); int idx = ComboBox_GetCurSel(hwndList); LANGPACK_INFO *pack = (LANGPACK_INFO*)ComboBox_GetItemData(hwndList, idx); ReloadLangpack(pack->tszFullPath); DisplayPackInfo(hwndDlg, pack); EnableWindow(GetDlgItem(hwndDlg, IDC_RELOAD), TRUE); } break; } 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, i); if (i == idx) { db_set_ts(NULL, "Langpack", "Current", pack->tszFileName); mir_tstrcpy(tszPath, pack->tszFullPath); pack->flags |= LPF_ENABLED; } else pack->flags &= ~LPF_ENABLED; } if (tszPath[0]) { ReloadLangpack(tszPath); if (LPPSHNOTIFY(lParam)->lParam == IDC_APPLY) { HWND hwndParent = GetParent(hwndDlg); PostMessage(hwndParent, WM_CLOSE, 1, 0); mir_forkthread(ReloadOptions, hwndParent); } } } break; case WM_DESTROY: int count = ListBox_GetCount(hwndList); for (int i = 0; i < count; i++) delete (LANGPACK_INFO*)ListBox_GetItemData(hwndList, i); ComboBox_ResetContent(hwndList); return TRUE; } return FALSE; }
static INT_PTR srvReloadLangpack(WPARAM wParam, LPARAM lParam) { ReloadLangpack((TCHAR*)lParam); return 0; }