/** * This function tries to read a Language from a certain module (e.g. USERINFO) and if failed it * tries once again with the baseprotocol of the contact (e.g. ICQ). If nothing was found anyway * and this is an metacontact it can have a look into subcontacts to retrieve the information. * This depends on the settings the user did. * * @warning ci MUST NOT be NULL! * * @param ci - pointer to a CONTACTINFO structure holding information about the contact * @param pszSetting - the desired setting to read * * @retval 0 - if setting was found and read correctly * @retval 1 - if any error occured or setting was not found **/ static FORCEINLINE INT_PTR GCILangEx(CONTACTINFO *ci, LPCSTR pszSetting) { if (0 == GCIVarEx(ci, pszSetting)) { if(ci->type!= CNFT_ASCIIZ) { //lang was safed in database as code LPIDSTRLIST pList; UINT nList, i, res = 0; switch (ci->type) { case CNFT_BYTE: res = ci->bVal; break; case CNFT_WORD: res = ci->wVal; break; case CNFT_DWORD: res = ci->dVal; break; default: return 1; } GetLanguageList(&nList, &pList); for(i = 0; i<nList; i++) { if(pList[i].nID == res) { //use untranslate string (pszText member) ci->pszVal = (ci->dwFlag & CNF_UNICODE) ? (LPTSTR) mir_a2u(pList[i].pszText) : (LPTSTR) mir_strdup(pList[i].pszText); ci->type = (ci->pszVal != NULL) ? CNFT_ASCIIZ : 0; return 0; } } /*end for*/ ci->type = 0; ci->pszVal = NULL; } } else { ci->type = 0; } return ci->type == 0; }
void KPstateSelectLanguage::MouseClick(KPstateContext *pContext, MouseButton button, MouseButtonEvent event, int x, int y) { auto signal = KPstate::EvaluateMouseClick(pContext, button, event, x, y); switch (signal) { case Signal::Back: pContext->ChangeState(pContext->GetPreviousState()); return; default: break; } const auto idsToStrings = GetLanguageList(pContext); for (auto &item : idsToStrings) { auto id = static_cast<std::size_t>(item.first); auto signalSelectLanguage = static_cast<Signal>(id); if (signal == signalSelectLanguage) { SetLanguage(pContext, signal); pContext->ChangeState(StateId::MainMenu); return; } } }
void SvcConstantsLoadModule(void) { UINT nListSize; LPIDSTRLIST pList; // precache translation GetMaritalList(&nListSize, &pList); GetLanguageList(&nListSize, &pList); GetCountryList(&nListSize, &pList); GetOccupationList(&nListSize, &pList); GetInterestsList(&nListSize, &pList); GetPastList(&nListSize, &pList); GetAffiliationsList(&nListSize, &pList); GetNamePrefixList(&nListSize, &pList); }
void KPstateSelectLanguage::UpdateDisplay(KPstateContext *pContext) const { auto &menu = pContext->GetMenu(); KPstate::UpdateDisplay(pContext); menu.plates[KPPlate::MenuBackground].SetPosition(2, 2.5, 14, 8.5); menu.plates[KPPlate::Logo].SetPosition(5, 9, 11, 11); menu.plates[KPPlate::Logo].SetFullyVisible(); menu.labels[Lbl::SelectLanguage].SetPosition(8, 8, 1, AlignItem::Centered); menu.labels[Lbl::SelectLanguage].SetFullyVisible(); auto Pos_y = 7.0f; const auto idsToStrings = GetLanguageList(pContext); for (auto &item : idsToStrings) { auto id = static_cast<std::size_t>(item.first); auto signal = static_cast<Signal>(id); menu.labels[item.first].SetPosition(8, Pos_y, 0.71f, AlignItem::Centered); menu.labels[item.first].SetSignal(signal); Pos_y -= 0.5; } // If the config not yet contains a language (first start) // the user is forced to set the language. // Otherwise the language selection can be quit: if (pContext->GetConfig().Language) { menu.labels[Lbl::Back].SetPosition(8, 1, 1, AlignItem::Centered); menu.labels[Lbl::Back].SetSignal(Signal::Back); } StartAnimation(pContext); }
/** * Dialog procedure for the contact information propertysheetpage * * @param hDlg - handle to the dialog window * @param uMsg - the message to handle * @param wParam - parameter * @param lParam - parameter * * @return different values **/ INT_PTR CALLBACK PSPProcGeneral(HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lParam) { switch (uMsg) { case WM_INITDIALOG: { CCtrlList *pCtrlList = CCtrlList::CreateObj(hDlg); if (pCtrlList) { LPIDSTRLIST pList; UINT nList; HFONT hBoldFont; PSGetBoldFont(hDlg, hBoldFont); SendDlgItemMessage(hDlg, IDC_PAGETITLE, WM_SETFONT, (WPARAM)hBoldFont, 0); TranslateDialogDefault(hDlg); pCtrlList->insert(CEditCtrl::CreateObj(hDlg, EDIT_TITLE, SET_CONTACT_TITLE, DBVT_TCHAR)); pCtrlList->insert(CEditCtrl::CreateObj(hDlg, EDIT_FIRSTNAME, SET_CONTACT_FIRSTNAME, DBVT_TCHAR)); pCtrlList->insert(CEditCtrl::CreateObj(hDlg, EDIT_SECONDNAME, SET_CONTACT_SECONDNAME, DBVT_TCHAR)); pCtrlList->insert(CEditCtrl::CreateObj(hDlg, EDIT_LASTNAME, SET_CONTACT_LASTNAME, DBVT_TCHAR)); pCtrlList->insert(CEditCtrl::CreateObj(hDlg, EDIT_NICK, SET_CONTACT_NICK, DBVT_TCHAR)); pCtrlList->insert(CEditCtrl::CreateObj(hDlg, EDIT_DISPLAYNAME, "CList", SET_CONTACT_MYHANDLE, DBVT_TCHAR)); pCtrlList->insert(CEditCtrl::CreateObj(hDlg, EDIT_PARTNER, SET_CONTACT_PARTNER, DBVT_TCHAR)); GetNamePrefixList(&nList, &pList); pCtrlList->insert(CCombo::CreateObj(hDlg, EDIT_PREFIX, SET_CONTACT_PREFIX, DBVT_BYTE, pList, nList)); // marital groupbox GetMaritalList(&nList, &pList); pCtrlList->insert(CCombo::CreateObj(hDlg, EDIT_MARITAL, SET_CONTACT_MARITAL, DBVT_BYTE, pList, nList)); GetLanguageList(&nList, &pList); pCtrlList->insert(CCombo::CreateObj(hDlg, EDIT_LANG1, SET_CONTACT_LANG1, DBVT_TCHAR, pList, nList)); pCtrlList->insert(CCombo::CreateObj(hDlg, EDIT_LANG2, SET_CONTACT_LANG2, DBVT_TCHAR, pList, nList)); pCtrlList->insert(CCombo::CreateObj(hDlg, EDIT_LANG3, SET_CONTACT_LANG3, DBVT_TCHAR, pList, nList)); } } break; case WM_NOTIFY: { switch (((LPNMHDR)lParam)->idFrom) { case 0: { MCONTACT hContact = (MCONTACT)((LPPSHNOTIFY)lParam)->lParam; char* pszProto; switch (((LPNMHDR)lParam)->code) { case PSN_INFOCHANGED: { BYTE bEnable; DBVARIANT dbv; CCtrlFlags Flags; if (PSGetBaseProto(hDlg, pszProto) && *pszProto) { Flags.W = DB::Setting::GetTStringCtrl(hContact, USERINFO, USERINFO, pszProto, SET_CONTACT_GENDER, &dbv); if (Flags.B.hasCustom || Flags.B.hasProto || Flags.B.hasMeta) { if (dbv.type == DBVT_BYTE) { CheckDlgButton(hDlg, RADIO_FEMALE, (dbv.bVal == 'F')); CheckDlgButton(hDlg, RADIO_MALE, (dbv.bVal == 'M')); bEnable = !hContact || Flags.B.hasCustom || !db_get_b(NULL, MODNAME, SET_PROPSHEET_PCBIREADONLY, 0); EnableWindow(GetDlgItem(hDlg, RADIO_FEMALE), bEnable); EnableWindow(GetDlgItem(hDlg, RADIO_MALE), bEnable); } else db_free(&dbv); } } } break; case PSN_APPLY: { if (!PSGetBaseProto(hDlg, pszProto) || *pszProto == 0) break; // gender { BYTE gender = SendDlgItemMessage(hDlg, RADIO_FEMALE, BM_GETCHECK, NULL, NULL) ? 'F' : SendDlgItemMessage(hDlg, RADIO_MALE, BM_GETCHECK, NULL, NULL) ? 'M' : 0; if (gender) db_set_b(hContact, hContact ? USERINFO : pszProto, SET_CONTACT_GENDER, gender); else db_unset(hContact, hContact ? USERINFO : pszProto, SET_CONTACT_GENDER); } } break; case PSN_ICONCHANGED: { const ICONCTRL idIcon[] = { { ICO_COMMON_FEMALE, STM_SETIMAGE, ICO_FEMALE }, { ICO_COMMON_MALE, STM_SETIMAGE, ICO_MALE }, { ICO_COMMON_MARITAL, STM_SETIMAGE, ICO_MARITAL }, }; IcoLib_SetCtrlIcons(hDlg, idIcon, SIZEOF(idIcon)); } } } } } break; case WM_COMMAND: { MCONTACT hContact; LPCSTR pszProto; switch (LOWORD(wParam)) { case RADIO_FEMALE: { if (!PspIsLocked(hDlg) && HIWORD(wParam) == BN_CLICKED) { DBVARIANT dbv; PSGetContact(hDlg, hContact); PSGetBaseProto(hDlg, pszProto); if (!DB::Setting::GetAsIsCtrl(hContact, USERINFO, USERINFO, pszProto, SET_CONTACT_GENDER, &dbv) || dbv.type != DBVT_BYTE || (dbv.bVal != 'F' && SendMessage((HWND)lParam, BM_GETCHECK, NULL, NULL))) SendMessage(GetParent(hDlg), PSM_CHANGED, NULL, NULL); } } break; case RADIO_MALE: { if (!PspIsLocked(hDlg) && HIWORD(wParam) == BN_CLICKED) { DBVARIANT dbv; PSGetContact(hDlg, hContact); PSGetBaseProto(hDlg, pszProto); if (!DB::Setting::GetAsIsCtrl(hContact, USERINFO, USERINFO, pszProto, SET_CONTACT_GENDER, &dbv) || dbv.type != DBVT_BYTE || (dbv.bVal != 'M' && SendMessage((HWND)lParam, BM_GETCHECK, NULL, NULL))) SendMessage(GetParent(hDlg), PSM_CHANGED, NULL, NULL); } } } } } return PSPBaseProc(hDlg, uMsg, wParam, lParam); }