BOOL LoadPanelInfoW1900(BOOL abActive) { if (!InfoW1900) return FALSE; CeFullPanelInfo* pcefpi = NULL; PanelInfo pi = {sizeof(pi)}; HANDLE hPanel = abActive ? PANEL_ACTIVE : PANEL_PASSIVE; INT_PTR nRc = InfoW1900->PanelControl(hPanel, FCTL_GETPANELINFO, 0, &pi); if (!nRc) { TODO("Показать информацию об ошибке"); return FALSE; } // Даже если невидима - обновить информацию! //// Проверим, что панель видима. Иначе - сразу выходим. //if (!pi.Visible) { // TODO("Показать информацию об ошибке"); // return NULL; //} if (pi.Flags & PFLAGS_PANELLEFT) pcefpi = &pviLeft; else pcefpi = &pviRight; pcefpi->cbSize = sizeof(*pcefpi); //pcefpi->hPanel = hPanel; // Если элементов на панели стало больше, чем выделено в (pviLeft/pviRight) if (pcefpi->ItemsNumber < (INT_PTR)pi.ItemsNumber) { if (!pcefpi->ReallocItems(pi.ItemsNumber)) return FALSE; } // Копируем что нужно pcefpi->bLeftPanel = (pi.Flags & PFLAGS_PANELLEFT) == PFLAGS_PANELLEFT; pcefpi->bPlugin = (pi.Flags & PFLAGS_PLUGIN) == PFLAGS_PLUGIN; pcefpi->PanelRect = pi.PanelRect; pcefpi->ItemsNumber = pi.ItemsNumber; pcefpi->CurrentItem = pi.CurrentItem; pcefpi->TopPanelItem = pi.TopPanelItem; pcefpi->Visible = (pi.PanelType == PTYPE_FILEPANEL) && ((pi.Flags & PFLAGS_VISIBLE) == PFLAGS_VISIBLE); pcefpi->ShortNames = (pi.Flags & PFLAGS_ALTERNATIVENAMES) == PFLAGS_ALTERNATIVENAMES; pcefpi->Focus = (pi.Flags & PFLAGS_FOCUS) == PFLAGS_FOCUS; pcefpi->Flags = pi.Flags; // CEPANELINFOFLAGS pcefpi->PanelMode = pi.ViewMode; pcefpi->IsFilePanel = (pi.PanelType == PTYPE_FILEPANEL); // Настройки интерфейса LoadFarSettingsW1900(&pcefpi->FarInterfaceSettings, &pcefpi->FarPanelSettings); // Цвета фара INT_PTR nColorSize = InfoW1900->AdvControl(&guid_ConEmuTh, ACTL_GETARRAYCOLOR, 0, NULL); #ifdef _DEBUG INT_PTR nDefColorSize = COL_LASTPALETTECOLOR; _ASSERTE(nColorSize==nDefColorSize); #endif FarColor* pColors = (FarColor*)calloc(nColorSize, sizeof(*pColors)); if (pColors) nColorSize = InfoW1900->AdvControl(&guid_ConEmuTh, ACTL_GETARRAYCOLOR, (int)nColorSize, pColors); WARNING("Поддержка более 4бит цветов"); if (pColors && nColorSize > 0) { pcefpi->nFarColors[col_PanelText] = FarColor_3_2(pColors[COL_PANELTEXT]); pcefpi->nFarColors[col_PanelSelectedCursor] = FarColor_3_2(pColors[COL_PANELSELECTEDCURSOR]); pcefpi->nFarColors[col_PanelSelectedText] = FarColor_3_2(pColors[COL_PANELSELECTEDTEXT]); pcefpi->nFarColors[col_PanelCursor] = FarColor_3_2(pColors[COL_PANELCURSOR]); pcefpi->nFarColors[col_PanelColumnTitle] = FarColor_3_2(pColors[COL_PANELCOLUMNTITLE]); pcefpi->nFarColors[col_PanelBox] = FarColor_3_2(pColors[COL_PANELBOX]); pcefpi->nFarColors[col_HMenuText] = FarColor_3_2(pColors[COL_HMENUTEXT]); pcefpi->nFarColors[col_WarnDialogBox] = FarColor_3_2(pColors[COL_WARNDIALOGBOX]); pcefpi->nFarColors[col_DialogBox] = FarColor_3_2(pColors[COL_DIALOGBOX]); pcefpi->nFarColors[col_CommandLineUserScreen] = FarColor_3_2(pColors[COL_COMMANDLINEUSERSCREEN]); pcefpi->nFarColors[col_PanelScreensNumber] = FarColor_3_2(pColors[COL_PANELSCREENSNUMBER]); pcefpi->nFarColors[col_KeyBarNum] = FarColor_3_2(pColors[COL_KEYBARNUM]); } else { _ASSERTE(pColors!=NULL && nColorSize>0); memset(pcefpi->nFarColors, 7, countof(pcefpi->nFarColors)*sizeof(*pcefpi->nFarColors)); } SafeFree(pColors); //int nColorSize = InfoW1900->AdvControl(&guid_ConEmuTh, ACTL_GETARRAYCOLOR, 0, NULL); //if ((pcefpi->nFarColors == NULL) || (nColorSize > pcefpi->nMaxFarColors)) //{ // if (pcefpi->nFarColors) free(pcefpi->nFarColors); // pcefpi->nFarColors = (BYTE*)calloc(nColorSize,1); // pcefpi->nMaxFarColors = nColorSize; //} ////nColorSize = InfoW1900->AdvControl(&guid_ConEmuTh, ACTL_GETARRAYCOLOR, 0, pcefpi->nFarColors); //FarColor* pColors = (FarColor*)calloc(nColorSize, sizeof(*pColors)); // //if (pColors) // nColorSize = InfoW1900->AdvControl(&guid_ConEmuTh, ACTL_GETARRAYCOLOR, nColorSize, pColors); // //WARNING("Поддержка более 4бит цветов"); //if (pColors && nColorSize > 0) //{ // for (int i = 0; i < nColorSize; i++) // pcefpi->nFarColors[i] = FarColor_3_2(pColors[i]); //} //else //{ // memset(pcefpi->nFarColors, 7, pcefpi->nMaxFarColors*sizeof(*pcefpi->nFarColors)); //} //SafeFree(pColors); // Текущая папка панели size_t nSize = InfoW1900->PanelControl(hPanel, FCTL_GETPANELDIRECTORY, 0, 0); if (nSize) { if ((pcefpi->pFarPanelDirectory == NULL) || (nSize > pcefpi->nMaxPanelGetDir)) { pcefpi->nMaxPanelGetDir = nSize + 1024; // + выделим немножко заранее pcefpi->pFarPanelDirectory = calloc(pcefpi->nMaxPanelGetDir,1); } ((FarPanelDirectory*)pcefpi->pFarPanelDirectory)->StructSize = sizeof(FarPanelDirectory); nSize = InfoW1900->PanelControl(hPanel, FCTL_GETPANELDIRECTORY, nSize, pcefpi->pFarPanelDirectory); if ((pcefpi->pszPanelDir == NULL) || (nSize > pcefpi->nMaxPanelDir)) { pcefpi->nMaxPanelDir = nSize + MAX_PATH; // + выделим немножко заранее SafeFree(pcefpi->pszPanelDir); pcefpi->pszPanelDir = (wchar_t*)calloc(pcefpi->nMaxPanelDir,2); } lstrcpyn(pcefpi->pszPanelDir, ((FarPanelDirectory*)pcefpi->pFarPanelDirectory)->Name, pcefpi->nMaxPanelDir); if (!nSize) { SafeFree(pcefpi->pszPanelDir); pcefpi->nMaxPanelDir = 0; } } else { SafeFree(pcefpi->pszPanelDir); } // Готовим буфер для информации об элементах pcefpi->ReallocItems(pcefpi->ItemsNumber); //if ((pcefpi->ppItems == NULL) || (pcefpi->nMaxItemsNumber < pcefpi->ItemsNumber)) //{ // if (pcefpi->ppItems) free(pcefpi->ppItems); // pcefpi->nMaxItemsNumber = pcefpi->ItemsNumber+32; // + немножно про запас // pcefpi->ppItems = (CePluginPanelItem**)calloc(pcefpi->nMaxItemsNumber, sizeof(LPVOID)); //} // и буфер для загрузки элемента из FAR nSize = sizeof(PluginPanelItem)+6*MAX_PATH; if ((pcefpi->pFarTmpBuf == NULL) || (pcefpi->nFarTmpBuf < nSize)) { if (pcefpi->pFarTmpBuf) free(pcefpi->pFarTmpBuf); pcefpi->nFarTmpBuf = nSize; pcefpi->pFarTmpBuf = malloc(pcefpi->nFarTmpBuf); } return TRUE; }
void CPluginW2800::LoadFarColors(BYTE (&nFarColors)[col_LastIndex]) { INT_PTR nColorSize = InfoW2800->AdvControl(&guid_ConEmu, ACTL_GETARRAYCOLOR, 0, NULL); FarColor* pColors = (FarColor*)calloc(nColorSize, sizeof(*pColors)); if (pColors) nColorSize = InfoW2800->AdvControl(&guid_ConEmu, ACTL_GETARRAYCOLOR, (int)nColorSize, pColors); WARNING("Поддержка более 4бит цветов"); if (pColors && nColorSize > 0) { #ifdef _DEBUG INT_PTR nDefColorSize = COL_LASTPALETTECOLOR; _ASSERTE(nColorSize==nDefColorSize); #endif nFarColors[col_PanelText] = FarColor_3_2(pColors[COL_PANELTEXT]); nFarColors[col_PanelSelectedCursor] = FarColor_3_2(pColors[COL_PANELSELECTEDCURSOR]); nFarColors[col_PanelSelectedText] = FarColor_3_2(pColors[COL_PANELSELECTEDTEXT]); nFarColors[col_PanelCursor] = FarColor_3_2(pColors[COL_PANELCURSOR]); nFarColors[col_PanelColumnTitle] = FarColor_3_2(pColors[COL_PANELCOLUMNTITLE]); nFarColors[col_PanelBox] = FarColor_3_2(pColors[COL_PANELBOX]); nFarColors[col_HMenuText] = FarColor_3_2(pColors[COL_HMENUTEXT]); nFarColors[col_WarnDialogBox] = FarColor_3_2(pColors[COL_WARNDIALOGBOX]); nFarColors[col_DialogBox] = FarColor_3_2(pColors[COL_DIALOGBOX]); nFarColors[col_CommandLineUserScreen] = FarColor_3_2(pColors[COL_COMMANDLINEUSERSCREEN]); nFarColors[col_PanelScreensNumber] = FarColor_3_2(pColors[COL_PANELSCREENSNUMBER]); nFarColors[col_KeyBarNum] = FarColor_3_2(pColors[COL_KEYBARNUM]); nFarColors[col_EditorText] = FarColor_3_2(pColors[COL_EDITORTEXT]); nFarColors[col_ViewerText] = FarColor_3_2(pColors[COL_VIEWERTEXT]); } else { _ASSERTE(pColors && nColorSize > 0); memset(nFarColors, 7, countof(nFarColors)*sizeof(*nFarColors)); } SafeFree(pColors); }