当前位置: 首页>>代码示例>>C++>>正文


C++ Panel::GetTabPosition方法代码示例

本文整理汇总了C++中Panel::GetTabPosition方法的典型用法代码示例。如果您正苦于以下问题:C++ Panel::GetTabPosition方法的具体用法?C++ Panel::GetTabPosition怎么用?C++ Panel::GetTabPosition使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在Panel的用法示例。


在下文中一共展示了Panel::GetTabPosition方法的3个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。

示例1:

//-----------------------------------------------------------------------------
// Purpose: 
//-----------------------------------------------------------------------------
Panel *FocusNavGroup::GetDefaultPanel()
{
	for (int i = 0; i < _mainPanel->GetChildCount(); i++)
	{
		Panel *child = _mainPanel->GetChild(i);
		if ( !child )
			continue;

		if (child->GetTabPosition() == 1)
		{
			return child;
		}
	}

	return NULL;	// no specific panel set
}
开发者ID:chrizonix,项目名称:RCBot2,代码行数:19,代码来源:FocusNavGroup.cpp

示例2: RequestFocusPrev

//-----------------------------------------------------------------------------
// Purpose: Sets the focus to the previous panel in the tab order
// Input  : *panel - panel currently with focus
//-----------------------------------------------------------------------------
bool FocusNavGroup::RequestFocusPrev(VPANEL panel)
{
	if(panel==NULL)
		return false;

	_currentFocus = NULL;
	int newPosition = 9999999;
	if (panel)
	{
		newPosition = ipanel()->GetTabPosition(panel);
	}

	bool bFound = false;
	bool bRepeat = true;
	Panel *best = NULL;
	while (1)
	{
		newPosition--;
		if (newPosition > 0)
		{
			int bestPosition = 0;

			// look for the next tab position
			for (int i = 0; i < _mainPanel->GetChildCount(); i++)
			{
				Panel *child = _mainPanel->GetChild(i);
				if (child && child->IsVisible() && child->IsEnabled() && child->GetTabPosition())
				{
					int tabPosition = child->GetTabPosition();
					if (tabPosition == newPosition)
					{
						// we've found the right tab
						best = child;
						bestPosition = newPosition;

						// don't loop anymore since we've found the correct panel
						break;
					}
					else if (tabPosition < newPosition && tabPosition > bestPosition)
					{
						// record the match since this is the closest so far
						bestPosition = tabPosition;
						best = child;
					}
				}
			}

			if (!bRepeat)
				break;

			if (best)
				break;
		}
		else
		{
			// reset new position for next loop
			newPosition = 9999999;
		}

		// haven't found an item

		if (!_topLevelFocus)
		{
			// check to see if we should push the focus request up
			if (_mainPanel->GetVParent() && _mainPanel->GetVParent() != surface()->GetEmbeddedPanel())
			{
				// we're not a top level panel, so forward up the request instead of looping
				if (ipanel()->RequestFocusPrev(_mainPanel->GetVParent(), _mainPanel->GetVPanel()))
				{
					bFound = true;
					SetCurrentDefaultButton(NULL);
					break;
				}
			}
		}

		// not found an item, loop back
		newPosition = 9999999;
		bRepeat = false;
	}

	if (best)
	{
		_currentFocus = best->GetVPanel();
		best->RequestFocus(-1);
		bFound = true;

        if (!CanButtonBeDefault(best->GetVPanel()))
        {
            if (_defaultButton)
            {
                SetCurrentDefaultButton(_defaultButton);
            }
			else
			{
				SetCurrentDefaultButton(NULL);
//.........这里部分代码省略.........
开发者ID:chrizonix,项目名称:RCBot2,代码行数:101,代码来源:FocusNavGroup.cpp

示例3: RequestFocusNext

//-----------------------------------------------------------------------------
// Purpose: Sets the focus to the previous panel in the tab order
// Input  : *panel - panel currently with focus
//-----------------------------------------------------------------------------
bool FocusNavGroup::RequestFocusNext(VPANEL panel)
{
	// basic recursion guard, in case user has set up a bad focus hierarchy
	static int stack_depth = 0;
	stack_depth++;

	_currentFocus = NULL;
	int newPosition = 0;
	if (panel)
	{
		newPosition = ipanel()->GetTabPosition(panel);
	}

	bool bFound = false;
	bool bRepeat = true;
	Panel *best = NULL;
	while (1)
	{
		newPosition++;
		int bestPosition = 999999;

		// look for the next tab position
		for (int i = 0; i < _mainPanel->GetChildCount(); i++)
		{
			Panel *child = _mainPanel->GetChild(i);
			if ( !child )
				continue;

			if (child && child->IsVisible() && child->IsEnabled() && child->GetTabPosition())
			{
				int tabPosition = child->GetTabPosition();
				if (tabPosition == newPosition)
				{
					// we've found the right tab
					best = child;
					bestPosition = newPosition;

					// don't loop anymore since we've found the correct panel
					break;
				}
				else if (tabPosition > newPosition && tabPosition < bestPosition)
				{
					// record the match since this is the closest so far
					bestPosition = tabPosition;
					best = child;
				}
			}
		}

		if (!bRepeat)
			break;

		if (best)
			break;

		// haven't found an item

		// check to see if we should push the focus request up
		if (!_topLevelFocus)
		{
			if (_mainPanel->GetVParent() && _mainPanel->GetVParent() != surface()->GetEmbeddedPanel())
			{
				// we're not a top level panel, so forward up the request instead of looping
				if (stack_depth < 15)
				{
					if (ipanel()->RequestFocusNext(_mainPanel->GetVParent(), _mainPanel->GetVPanel()))
					{
						bFound = true;
						SetCurrentDefaultButton(NULL);
						break;
					}

					// if we find one then we break, otherwise we loop
				}
			}
		}
		
		// loop back
		newPosition = 0;
		bRepeat = false;
	}

	if (best)
	{
		_currentFocus = best->GetVPanel();
		best->RequestFocus(1);
		bFound = true;

        if (!CanButtonBeDefault(best->GetVPanel()))
        {
            if (_defaultButton)
			{
                SetCurrentDefaultButton(_defaultButton);
			}
			else
			{
//.........这里部分代码省略.........
开发者ID:chrizonix,项目名称:RCBot2,代码行数:101,代码来源:FocusNavGroup.cpp


注:本文中的Panel::GetTabPosition方法示例由纯净天空整理自Github/MSDocs等开源代码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。