// Убьет из стека отсутствующих и поместит tab на верх стека bool CTabBarClass::AddStack(CTab& tab) { if (tab.Tab() == mp_DummyTab) return false; bool bStackChanged = false; _ASSERTE(isMainThread()); bool lbExist = false; if (!m_TabStack.empty()) { int iter = 0; while (iter < m_TabStack.size()) { if (m_TabStack[iter] == tab.Tab()) { if ((iter > 0) && !IsInSwitch()) { CTabID* pTab = m_TabStack[iter]; m_TabStack.erase(iter); m_TabStack.insert(0, pTab); bStackChanged = true; } lbExist = true; break; } ++iter; } } // поместить наверх стека if (!lbExist) { CTabID* pTab = tab.AddRef("TabBar.cpp:m_TabStack",0); m_TabStack.insert(0, pTab); bStackChanged = true; } return bStackChanged; }
bool CTabStack::GetTabByIndex(int anIndex, /*OUT*/ CTab& rTab) { MSectionLockSimple SC; SC.Lock(mpc_Section); int iReal = GetVisualToRealIndex(anIndex); if (iReal >= 0 && iReal < mn_Used) { rTab.Init(mpp_Stack[iReal]); } else { rTab.Init(NULL); } SC.Unlock(); return (rTab.Tab() != NULL); }