void CConEmuCtrl::ChooseTabFromMenu(BOOL abFirstTabOnly, POINT pt, DWORD Align /*= TPM_CENTERALIGN|TPM_VCENTERALIGN*/) { HMENU hPopup = gpConEmu->mp_Menu->CreateVConListPopupMenu(NULL, abFirstTabOnly); if (!Align) Align = TPM_LEFTALIGN|TPM_TOPALIGN; int nTab = gpConEmu->mp_Menu->trackPopupMenu(tmp_TabsList, hPopup, Align|TPM_RETURNCMD, pt.x, pt.y, ghWnd); if (nTab >= IDM_VCON_FIRST && nTab <= IDM_VCON_LAST) { int nNewV = ((int)HIWORD(nTab))-1; int nNewR = ((int)LOWORD(nTab))-1; CVConGuard VCon; if (CVConGroup::GetVCon(nNewV, &VCon)) { CRealConsole* pRCon = VCon->RCon(); if (pRCon) { CTab tab(__FILE__,__LINE__); if (pRCon->GetTab(nNewR, tab)) pRCon->ActivateFarWindow(tab->Info.nFarWindowID); } if (!VCon->isActive(false)) gpConEmu->Activate(VCon.VCon()); } } DestroyMenu(hPopup); }
size_t CConEmuCtrl::GetOpenedPanels(wchar_t*& pszDirs, int& iCount, int& iCurrent) { CmdArg szActiveDir, szPassive; CVConGuard VCon; MArray<wchar_t*> Dirs; size_t cchAllLen = 1; iCount = iCurrent = 0; for (int V = 0; CVConGroup::GetVCon(V, &VCon, true); V++) { VCon->RCon()->GetPanelDirs(szActiveDir, szPassive); if (VCon->isActive(false)) iCurrent = iCount; LPCWSTR psz[] = {szActiveDir.ms_Arg, szPassive.ms_Arg}; for (int i = 0; i <= 1; i++) { if (psz[i] && psz[i][0]) { int iLen = lstrlen(psz[i]); cchAllLen += (iLen+1); Dirs.push_back(lstrdup(psz[i])); iCount++; } } } _ASSERTE(pszDirs == NULL); pszDirs = (wchar_t*)malloc(cchAllLen*sizeof(*pszDirs)); if (!pszDirs) return 0; wchar_t* psz = pszDirs; for (int i = 0; i < Dirs.size(); i++) { wchar_t* p = Dirs[i]; _wcscpy_c(psz, cchAllLen, p); psz += lstrlen(psz)+1; free(p); } return cchAllLen; }
int CTabBarClass::ActiveTabByName(int anType, LPCWSTR asName, CVConGuard* rpVCon) { int nTab = -1; if (rpVCon) rpVCon->Release(); TODO("TabBarClass::ActiveTabByName - найти таб по имени"); INT_PTR V, I; int tabIdx = 0; CVConGuard VCon; for (V = 0; (nTab == -1) && CVConGroup::GetVCon(V, &VCon, true); V++) { #ifdef _DEBUG bool lbActive = VCon->isActive(false); #endif //111120 - Эту опцию игнорируем. Если редактор открыт в другой консоли - активируем ее потом //if (gpSet->bHideInactiveConsoleTabs) //{ // if (!lbActive) continue; //} CRealConsole *pRCon = VCon->RCon(); for (I = 0; TRUE; I++) { CTab tab(__FILE__,__LINE__); if (!pRCon->GetTab(I, tab)) break; if (tab->Type() == (anType & fwt_TypeMask)) { // Тут GetName() использовать нельзя, т.к. оно может возвращать "переименованное пользователем" // А здесь ищется конкретный редактор-вьювер фара (то есть нужно правильное полное имя-путь к файлу) LPCWSTR pszNamePtr = tab->Name.Ptr(); // If asName (searched file) has been specified with path, we need to compare with tab full path LPCWSTR pszCompareTab = wcspbrk(asName, L"\\/") ? pszNamePtr : PointToName(pszNamePtr); if (pszNamePtr && ((lstrcmpi(pszCompareTab, asName) == 0))) { nTab = tabIdx; break; } } tabIdx++; } } if (nTab >= 0) { if (!CanActivateTab(nTab)) { nTab = -2; } else { if (!mp_Rebar->FarSendChangeTab(nTab, &VCon)) nTab = -2; } } if (rpVCon) rpVCon->Attach(VCon.VCon()); return nTab; }