Example #1
0
// Убьет из стека отсутствующих и поместит 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;
}
Example #2
0
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);
}