// Заполняем список таблицами символов UINT FillCodePagesList(HANDLE dialogHandle, UINT controlId, UINT codePage, bool allowAuto, bool allowAll) { CallbackCallSource = CodePagesFill; // Устанавливаем переменные для доступа из каллбака dialog = dialogHandle; control = controlId; currentCodePage = codePage; favoriteCodePages = normalCodePages = 0; selectedCodePages = !allowAuto && allowAll; // Добавляем стндартные элементы в список AddCodePages((allowAuto ? ::Auto : 0) | (allowAll ? ::SearchAll : 0) | ::AllStandard); if (CallbackCallSource == CodePagesFill) { // Если надо выбираем элемент FarListInfo info; SendDlgMessage(dialogHandle, DM_LISTINFO, control, (LONG_PTR)&info); for (int i=0; i<info.ItemsNumber; i++) { if (GetListItemCodePage(i)==codePage) { FarListGetItem Item={i, {}}; SendDlgMessage(dialog, DM_LISTGETITEM, control, reinterpret_cast<LONG_PTR>(&Item)); SendDlgMessage(dialog, DM_SETTEXTPTR, control, reinterpret_cast<LONG_PTR>(Item.Item.Text)); FarListPos Pos={i,-1}; SendDlgMessage(dialog, DM_LISTSETCURPOS, control, reinterpret_cast<LONG_PTR>(&Pos)); break; } } } // Возвращаем число любимых таблиц символов return favoriteCodePages; }
// Заполняем список таблицами символов UINT FillCodePagesList(HANDLE dialogHandle, UINT controlId, uintptr_t codePage, bool allowAuto, bool allowAll, bool allowDefault, bool allowM2) { CallbackCallSource = CodePagesFill; // Устанавливаем переменные для доступа из каллбака dialog = dialogHandle; control = controlId; currentCodePage = codePage; favoriteCodePages = normalCodePages = 0; selectedCodePages = !allowAuto && allowAll; // Добавляем стндартные элементы в список AddCodePages((allowM2 ? ::AllowM2 : 0) | (allowDefault ? ::DefaultCP : 0) | (allowAuto ? ::Auto : 0) | (allowAll ? ::SearchAll : 0) | ::AllStandard); if (CallbackCallSource == CodePagesFill) { // Если надо выбираем элемент FarListInfo info={sizeof(FarListInfo)}; SendDlgMessage(dialogHandle, DM_LISTINFO, control, &info); for (int i=0; i<static_cast<int>(info.ItemsNumber); i++) { if (GetListItemCodePage(i)==codePage) { FarListGetItem Item={sizeof(FarListGetItem),i}; SendDlgMessage(dialog, DM_LISTGETITEM, control, &Item); SendDlgMessage(dialog, DM_SETTEXTPTR, control, const_cast<wchar_t*>(Item.Item.Text)); FarListPos Pos={sizeof(FarListPos),i,-1}; SendDlgMessage(dialog, DM_LISTSETCURPOS, control, &Pos); break; } } } // Возвращаем число любимых таблиц символов return favoriteCodePages; }
// Заполняем меню выбора таблиц символов void FillCodePagesVMenu(bool bShowUnicode, bool bShowUTF, bool bShowUTF7) { UINT codePage = currentCodePage; if (CodePages->GetSelectPos()!=-1 && CodePages->GetSelectPos()<CodePages->GetItemCount()-normalCodePages) currentCodePage = GetMenuItemCodePage(); // Очищаем меню favoriteCodePages = normalCodePages = 0; CodePages->DeleteItems(); UnicodeString title = MSG(MGetCodePageTitle); if (Opt.CPMenuMode) title += L" *"; CodePages->SetTitle(title); // Добавляем таблицы символов // BUBUG: Когда добавится поддержка UTF7 параметр bShowUTF7 нужно убрать отовсюду AddCodePages(::DOS | ::ANSI | ::KOI8 | (bShowUTF ? ::UTF8 : 0) | (bShowUTF7 ? ::UTF7 : 0) | (bShowUnicode ? AllUtfBiggerThan8 : 0)); // Восстанавливаем оригинальню таблицу символов currentCodePage = codePage; // Позиционируем меню CodePages->SetPosition(-1, -1, 0, 0); // Показываем меню CodePages->Show(); }
// Заполняем меню выбора таблиц символов void FillCodePagesVMenu(bool bShowUnicode, bool bShowUTF, bool bShowUTF7, bool bShowAutoDetect=false, bool bShowM2=false) { uintptr_t codePage = currentCodePage; if (CodePages->GetSelectPos()!=-1 && CodePages->GetSelectPos()<CodePages->GetItemCount()-normalCodePages) currentCodePage = GetMenuItemCodePage(); // Очищаем меню favoriteCodePages = normalCodePages = 0; CodePages->DeleteItems(); UnicodeString title = MSG(MGetCodePageTitle); if (Opt.CPMenuMode) title += L" *"; CodePages->SetTitle(title); // Добавляем таблицы символов AddCodePages(::OEM | ::ANSI | (bShowUTF ? ::UTF8 : 0) | (bShowUTF7 ? ::UTF7 : 0) | (bShowUnicode ? (::UTF16BE | ::UTF16LE) : 0) | (bShowAutoDetect ? ::Auto : 0) | (bShowM2 ? ::AllowM2 : 0) ); // Восстанавливаем оригинальню таблицу символов currentCodePage = codePage; // Позиционируем меню CodePages->SetPosition(-1, -1, 0, 0); // Показываем меню CodePages->Show(); }