Exemplo n.º 1
0
///////////////////////////////////////////////////
// call this function to remove a page wnd from
// container.
CWnd *CBSWndContainer::DelPage(CWnd *pWnd)
{
    // check list
    POSITION pos=m_PageList.Find(pWnd);
    if(pos==NULL)
    {
        TRACE("This Window is not a member of container, the operation will terminate.\n");
        return NULL;
    }
    if(pWnd==m_pActivePage)
        if(m_pActivePage==GetPrevPage(pWnd))//m_PageList.IsEmpty()?NULL:m_PageList.GetHead();
            m_pActivePage=NULL;
        else m_pActivePage=GetPrevPage(pWnd);

    m_PageList.RemoveAt(pos);

    if (pWnd)
    {
        pWnd->ShowWindow(SW_HIDE);
    }

//	Invalidate();

    return pWnd;
}
Exemplo n.º 2
0
CWnd* CMonitorWnd::DelPage(CWnd *pWnd)
{
	POSITION pos = m_PageList.Find(pWnd);
	if(pos == NULL)
	{
		TRACE("This Window is not a member of container, the operation will terminate.\n");
		return NULL;
	}

	if(pWnd == m_pActivePage)
	{
		if(m_pActivePage == GetPrevPage(pWnd))
		{
			m_pActivePage = NULL;
		}
		else
		{
			m_pActivePage = GetPrevPage(pWnd);
		}
	}
	
	m_PageList.RemoveAt(pos);

	if (pWnd)
	{
		pWnd->ShowWindow(SW_HIDE);
	}

	return pWnd;
}
Exemplo n.º 3
0
XWndPageForSlide* XWndPageSlideWithXML::GetLeftPage( int idx )
{
	if( idx == m_pCurr->GetidxPage() )
		return m_pLeft;
	int PervIdx = GetPrevPage(idx);
	for( int i = 0; i < m_listLeft.size(); i++ )
	{	
		if( PervIdx == m_listLeft.GetFromIndex(i)->GetidxPage() )
			return m_listLeft.GetFromIndex(i);
	}
	return NULL;
}
Exemplo n.º 4
0
int XWndPageSlideWithXML::Process( float dt )
{
	if( m_AutoScrollDir == XE::xDIR_RIGHT )
	{
		// ------->>>>
		// 오른쪽 화면이 나타나고 현재화면이 왼쪽으로 사라진다.
		float lerp = m_itpScroll.GetInterpolationValueWithSet( xSEC_SLIDE );
		XE::VEC2 vPos = m_pCurr->GetPosLocal();
		float wScreen = XE::GetGameWidth();
		vPos.x = m_vStartScroll.x + ( (-wScreen) - m_vStartScroll.x ) * lerp;
		m_pCurr->SetPosLocal( vPos );
		if( m_pRight )
		{
			XE::VEC2 vPosRight = m_pRight->GetPosLocal();
			vPosRight.x = vPos.x + wScreen;
			m_pRight->SetPosLocal( vPosRight );
		}
		if( m_itpScroll.IsFinish() )
		{
			m_itpScroll.Off();
			m_AutoScrollDir = XE::xDIR_NONE;
			// 현재 화면이 왼쪽으로 완전히 사라졌다.
			if( m_pLeft )
			{
				m_listLeft.push_back( m_pLeft );
				//XWnd::DestroyWnd( m_pLeft );		// 원래있던 왼쪽페이지를 삭제
			}
			m_pLeft = m_pCurr;
			m_pCurr = m_pRight;
			m_pRight = NULL;
			// 오른쪽 페이지 생성
			int idxRightPage = GetNextPage( m_pCurr->GetidxPage() );
			if( m_numPages > idxRightPage && idxRightPage >= 0 )
			{
				if( m_listRight.size() > 0 )
				{
					m_pRight = m_listRight.GetFirst();
					m_listRight.pop_front();
				}
				//m_pRight = CreatePage( idxRightPage );
				//if( m_pRight && !Find( m_pRight ) )
				//	Add( m_pRight );
				XE::VEC2 v = m_pCurr->GetPosLocal();
				v.x += wScreen;
				m_pRight->SetPosLocal( v );	// 화면 오른쪽에 놓는다.
			}
			CallEventHandler( XWM_FINISH_SLIDE, m_pCurr->GetidxPage() );
		}
	} else
	if( m_AutoScrollDir == XE::xDIR_LEFT )
	{
		// <<<<-----
		// 왼쪽 화면이 나타나고 현재화면이 오른쪽으로 사라진다.
		float lerp = m_itpScroll.GetInterpolationValueWithSet( xSEC_SLIDE );
		XE::VEC2 vPos = m_pCurr->GetPosLocal();
		float wScreen = XE::GetGameWidth();
		vPos.x = m_vStartScroll.x + ( wScreen - m_vStartScroll.x ) * lerp;
		m_pCurr->SetPosLocal( vPos );
		if( m_pLeft )
		{
			XE::VEC2 vPosLeft = m_pLeft->GetPosLocal();
			vPosLeft.x = vPos.x - wScreen;
			m_pLeft->SetPosLocal( vPosLeft );
		}
		if( m_itpScroll.IsFinish() )
		{
			m_itpScroll.Off();
			m_AutoScrollDir = XE::xDIR_NONE;
			// 현재 화면이 오른쪽으로 완전히 사라졌다.
			if( m_pRight )
			{
				m_listRight.push_front( m_pRight );
				//XWnd::DestroyWnd( m_pRight );		// 원래있던 오른쪽페이지를 삭제
			}
			m_pRight = m_pCurr;
			m_pCurr = m_pLeft;
			m_pLeft = NULL;
			// 왼쪽 페이지 생성
			int idxLeftPage = GetPrevPage( m_pCurr->GetidxPage() );
			if( m_numPages > idxLeftPage && idxLeftPage >= 0 )
			{
				if( m_listLeft.size() > 0 )
				{
					m_pLeft = m_listLeft.GetLast();
					m_listLeft.pop_back();
				}
				//m_pLeft = CreatePage( idxLeftPage );
				//if( m_pLeft && !Find( m_pLeft ) )
				//	Add( m_pLeft );
				XE::VEC2 v = m_pCurr->GetPosLocal();
				v.x -= wScreen;
				m_pLeft->SetPosLocal( v );		// 화면 왼쪽에 놓는다.
			}
			CallEventHandler( XWM_FINISH_SLIDE, m_pCurr->GetidxPage() );
		}
	} else
	if( m_AutoScrollDir == XE::xDIR_CENTER )
	{
		// 제자리로 돌아가기
		float lerp = m_itpScroll.GetInterpolationValueWithSet( xSEC_SLIDE );
		float wScreen = XE::GetGameWidth();
		XE::VEC2 vPos = m_pCurr->GetPosLocal();
		vPos.x = m_vStartScroll.x + ( 0 - m_vStartScroll.x ) * lerp;
		m_pCurr->SetPosLocal( vPos );
		if( m_pRight )
		{
			XE::VEC2 vPosRight = m_pRight->GetPosLocal();
			vPosRight.x = vPos.x + wScreen;
			m_pRight->SetPosLocal( vPosRight );
		}
		if( m_pLeft )
		{
			XE::VEC2 vPosLeft = m_pLeft->GetPosLocal();
			vPosLeft.x = vPos.x - wScreen;
			m_pLeft->SetPosLocal( vPosLeft );
		}
		if( m_itpScroll.IsFinish() )
		{
			m_itpScroll.Off();
			m_AutoScrollDir = XE::xDIR_NONE;
		}
	} 
//	else
	return XWnd::Process( dt );
//	return 1;
}
Exemplo n.º 5
0
// 현재 페이지를 지정한다.
void XWndPageSlideWithXML::SetCurrPage( int idxPage )
{
/*	if( m_listPageKey.size() > 0 )
	{
		_SetCurrPageForXML( idxPage );
		return;
	} */
	XBREAK( idxPage < 0 || idxPage >= m_numPages );
	if( m_pCurr )
	{
		if( m_pCurr->GetidxPage() == idxPage )		// 이미 같은페이지면 다시 만들필요 없다.
			return;
		XWnd::DestroyWnd( m_pCurr );
	}
	// 현재 페이지 생성
	m_pCurr = CreatePage( idxPage );
	Add(m_pCurr);
	// 왼쪽페이지 생성
	if( m_pLeft )
		XWnd::DestroyWnd( m_pLeft );
	int idxPrevPage = GetPrevPage( idxPage );
	if( idxPrevPage >= 0 )
	{
		m_pLeft = CreatePage( idxPrevPage );
		XE::VEC2 vPos( -XE::GetGameWidth(), 0 );
		m_pLeft->SetPosLocal( vPos );
		Add(m_pLeft);
	}
	// 오른족 페이지생성
	if( m_pRight )
		XWnd::DestroyWnd( m_pRight );
	int idxNextPage = GetNextPage( idxPage );
	if( idxNextPage >= 0 )
	{
		m_pRight = CreatePage( idxNextPage );
		XE::VEC2 vPos( XE::GetGameWidth(), 0 );
		m_pRight->SetPosLocal( vPos );
		Add(m_pRight);
	}
	//그리지 않는 페이지 생성
	m_listLeft.Destroy();
	m_listRight.Destroy();
	for( int i = idxPage+2; i < m_numPages; i++ )
	{
		XWndPageForSlide *pRight = CreatePage( i );
		if( m_pRight )
		{
			XE::VEC2 vPosRight = m_pRight->GetPosLocal();
			pRight->SetPosLocal(vPosRight);
		}
		m_listRight.push_back( pRight );
		Add(pRight);
	}
	for( int i = idxPage-2; i >= 0; i-- )
	{
		XWndPageForSlide *pLeft = CreatePage( i );
		if( m_pLeft )
		{
			XE::VEC2 vPosLeft = m_pLeft->GetPosLocal();
			pLeft->SetPosLocal(vPosLeft);
		}
		m_listLeft.push_back( pLeft );
		Add(pLeft);
	}
}