예제 #1
0
void CControlTestDialog::OnBnClickedButtonTestImageButton()
{
	// TODO: 在此添加控件通知处理程序代码
	this->ResetTest();

	CUIButton *pBtn = new CUIButton();

	m_pTestWnd = pBtn;
	
	CRect rcClient;
	this->GetClientRect( rcClient );
	const CRect rcSt( 20,80, rcClient.Width()-20, 120 );

	pBtn->Create( _T( "" ), WS_CHILD | WS_VISIBLE, rcSt, this, 1000 );

	tstring strAppDir = ParsePath( GetModulePath().c_str() ).m_strDirectory;

	tstring  strLogoPath= strAppDir + _T( "res\\chs\\btn_login_normal.jpg" );
	tstring strDisPath = strAppDir + _T( "res\\chs\\btn_login_direct.jpg" );
	pBtn->SetImage( strLogoPath.c_str(), strLogoPath.c_str(), strDisPath.c_str() );

	pBtn->SetTransparentMask( TRUE, RGB( 255,0,255) );

	pBtn->ShowWindow( SW_SHOW );

}
 void SetValue(bool value) {
     (**sizer).Set(option_key, value);
     button->SetText(value?label_true:label_false);
     button->SetBrowseText(value?tip_true:tip_false);
     parent->DoLayout();
     parent->ChangedSignal();
 }
예제 #3
0
파일: UIStatsWnd.cpp 프로젝트: 2asoft/xray
void CUIStatsListItem::XmlInit(const char *path, CUIXml &uiXml)
{
	CUIXmlInit	xml_init;
//	CUIStatic	*pStatic;
	CUIButton	*pButton;

	string256 buf;
	strconcat(sizeof(buf),buf, path, ":static");

	int tabsCount = uiXml.GetNodesNum(path, 0, "static");

	XML_NODE* tab_node = uiXml.NavigateToNode(path,0);
	uiXml.SetLocalRoot(tab_node);

	for (int i = 0; i < tabsCount; ++i)
	{
		pButton = new CUIButton();
		pButton->SetAutoDelete(true);
		xml_init.InitStatic(uiXml, "static", i, pButton);
		pButton->SetTextAlignment(CGameFont::alLeft);
		AttachChild(pButton);
		FieldsVector.push_back(pButton);
	}

	FieldsVector[0]->SetEllipsis(1, 0);
}
예제 #4
0
CUIButton* CScriptXmlInit::InitButton(LPCSTR path, CUIWindow* parent){
	CUIButton* pWnd = xr_new<CUIButton>();
	CUIXmlInit::InitButton(m_xml, path, 0, pWnd);
	pWnd->SetAutoDelete(true);
	_attach_child(pWnd, parent);
//.	if(parent) parent->AttachChild(pWnd);
	return pWnd;
}
예제 #5
0
void CStartScene::OnLoad()
{
	CUIButton* pbtn1 = (CUIButton*)get("btn1");
	pbtn1->AddClickListen(this,(OnBtnClick)&CStartScene::OnBtn1Click);
	CUIButton* pbtn2 = (CUIButton*)get("btn2");
	pbtn2->AddClickListen(this,(OnBtnClick)&CStartScene::OnBtn2Click);
	CUIButton* pbtn3 = (CUIButton*)get("btn3");
	pbtn3->AddClickListen(this,(OnBtnClick)&CStartScene::OnBtn3Click);
	CUIButton* pbtn4 = (CUIButton*)get("btn4");
	pbtn4->AddClickListen(this,(OnBtnClick)&CStartScene::OnBtn4Click);
	CUIButton* pbtn5 = (CUIButton*)get("btn5");
	pbtn5->AddClickListen(this,(OnBtnClick)&CStartScene::OnBtn5Click);
	CUIButton* pbtnlist = (CUIButton*)get("list");
	pbtnlist->AddClickListen(this,(OnBtnClick)&CStartScene::OnBtnListClick);
	CUIButton* pbtntetris = (CUIButton*)get("tetris");
	pbtntetris->AddClickListen(this,(OnBtnClick)&CStartScene::OnTetrisClick);
	mtimerid = sUIFrame.GetTimerMgr()->CreateTimer(this,100);
}
예제 #6
0
void CUIComboBox::AddButton(CUIButton& button, uint32_t pos){
	uint32_t exray = 14;
	if(this->getMCbar()){
		exray += this->getMCbar()->getHight();
	}
	while (true){
		if (this->_buttons.find(pos) == this->_buttons.end()){
			this->_buttons[pos] = &button;
			
			button.SetX(5);
			button.SetY(exray+(pos*_spreadY));
			button.setWight(this->_wight);
			button.setHight(_spreadY);
			this->add(button);
			cerr<<"addbutton"<<endl;
			break;
		}else{
			pos+=1;
		}
	}
}
예제 #7
0
void CUITrade::initialize()
{
	CUIButton* pClose = (CUIButton*)findUI("btn_close");

	if (pClose)
	{
		CmdTradeClose* pCmd = new CmdTradeClose;
		pCmd->setData(this);
		pClose->SetCommandUp(pCmd);
	}

	CUIButton* pCancel = (CUIButton*)findUI("btn_cancel");

	if (pCancel)
	{
		CmdTradeClose* pCmd = new CmdTradeClose;
		pCmd->setData(this);
		pCancel->SetCommandUp(pCmd);
	}

	m_pBtnOk = (CUIButton*)findUI("btn_ok");
	
	if (m_pBtnOk)
	{
		CmdTradeSend* pCmd = new CmdTradeSend;
		pCmd->setData(this);
		m_pBtnOk->SetCommandUp(pCmd);
	}

	m_pDragArea		= findUI("base_drag_area");
	m_pTextTitle	= (CUIText*)findUI("text_title");
	
	m_pList[eLIST_AMEND_ITEM] = (CUIList*)findUI("list_amend");
	m_pList[eLIST_AMEND_CONDITION] = (CUIList*)findUI("list_amend_condition");

	m_pBaseAmendInfo = findUI("base_amend_info");
}
예제 #8
0
void CImageTestScene::OnLoad()
{
	CUIButton* pbtn = (CUIButton*)get("back");
	pbtn->AddClickListen(this,(OnBtnClick)&CImageTestScene::OnBtnbackClick);
	pbtn = (CUIButton*)get("ScaleX");
	pbtn->AddClickListen(this,(OnBtnClick)&CImageTestScene::OnBtnScaleXClick);
	pbtn = (CUIButton*)get("ScaleY");
	pbtn->AddClickListen(this,(OnBtnClick)&CImageTestScene::OnBtnScaleYClick);
	pbtn = (CUIButton*)get("SkewX");
	pbtn->AddClickListen(this,(OnBtnClick)&CImageTestScene::OnBtnSkewXClick);
	pbtn = (CUIButton*)get("SkewY");
	pbtn->AddClickListen(this,(OnBtnClick)&CImageTestScene::OnBtnSkewYClick);
	pbtn = (CUIButton*)get("Rotate");
	pbtn->AddClickListen(this,(OnBtnClick)&CImageTestScene::OnBtnRotateClick);
}
void CMainMenuState::Input(void)
{

	if (CInputManager::GetInstance()->IsKeyPressed(eControls::MouseLeft))
	{
		//CUIElement* mouseElement = m_pGUI->GetElementAt(CInputManager::GetInstance( )->GetMousePosition( ));
		std::vector<CUIElement*> elements;
		m_pGUI->GetElementsAt(CInputManager::GetInstance()->GetMousePosition(), elements);
		for (unsigned int i = 0; i < elements.size(); i++)
		{
			if (dynamic_cast<CUIButton*>(elements[i]))
			{
				CUIButton* button = (CUIButton*)elements[i];
				if (button->GetText() == "Start")
				{
					QueueStateChange(STATE_CH_MAINMENU);
				}
				else if (button->GetText() == "How to Play")
				{
					QueueStateChange(STATE_CH_CONTROLS);
				}
				else if (button->GetText() == "Credits")
				{
					QueueStateChange(STATE_CH_CREDITS);
				}
				else if (button->GetText() == "Options")
				{
					QueueStateChange(STATE_CH_OPTIONS);
				}
				else if (button->GetText() == "Achievements")
				{
					QueueStateChange(STATE_CH_ACHIEVEMENTS);
				}
				else if (button->GetText() == "Leaderboards")
				{
					QueueStateChange(STATE_CH_HIGHSCORE);
				}
				else if (button->GetText() == "Quit")
				{
					QueueStateChange(STATE_CH_EXIT);
				}
			}
		}
	}
	else if (CInputManager::GetInstance()->IsKeyPressed(eControls::Enter))
	{
		if (true == m_bSelectMode)
		{
			QueueStateChange(STATE_CH_PLAY);
			m_bEndlessMode = false;
			CPathSearch::GetInstance()->HandleLoading(!m_bEndlessMode);
		}
		else
		{
			QueueStateChange(STATE_CH_MAINMENU);
		}
	}

	if (true == m_bSelectMode)
	{
		if (true == m_pBack->GetPressed())
		{
			QueueStateChange(STATE_CH_MAINMENU);
		}
		if (true == m_pCampaign->GetPressed())
		{
			QueueStateChange(STATE_CH_PLAY);
			m_bEndlessMode = false;
			CPathSearch::GetInstance()->HandleLoading(!m_bEndlessMode);
		}
		if (true == m_pEndless->GetPressed())
		{
			QueueStateChange(STATE_CH_PLAY);
			m_bEndlessMode = true;
			CPathSearch::GetInstance()->HandleLoading(!m_bEndlessMode);
		}
	}
}
예제 #10
0
// ----------------------------------------------------------------------------
// Name : OpenSelectResource()
// Desc : iType = 1 채굴, iType = 2 채집, iType = 3 차지
// ----------------------------------------------------------------------------
void CUISelectResource::OpenSelectResource( int npcIndex, int iType )
{	
	if(iType == -1)
		return;
	if( IsVisible() )
	{
		ResetSelectResource();
		OpenSelectResource(npcIndex, iType);
		return;
	}

	CEntityProperty *pEP = CEntity::GetPlayerEntity(0)->PropertyForTypeAndID(CEntityProperty::EPT_BOOL, 221);
	if(pEP)
	{
		ENTITYPROPERTY( &*CEntity::GetPlayerEntity(0), pEP->ep_slOffset, BOOL) = FALSE;
	}
	pEP = CEntity::GetPlayerEntity(0)->PropertyForTypeAndID(CEntityProperty::EPT_INDEX, 222);
	if(pEP)
	{
		ENTITYPROPERTY( &*CEntity::GetPlayerEntity(0), pEP->ep_slOffset, INDEX) = -1;
	}
	ResetSelectResource();

	m_iResourceType = iType;
	m_iClientNPCIndex = npcIndex;

	if(iType == 4 ) //수집이면 패스
	{
		StartProduct();
		ResetSelectResource();
	}
	else 
	{
		FLOAT	fTexWidth = m_ptdBaseTexture->GetPixWidth();
		FLOAT	fTexHeight = m_ptdBaseTexture->GetPixHeight();

		CUIButton TempUIButton;
		TempUIButton.SetUV( UBS_IDLE, 0, 117, 131, 138, fTexWidth, fTexHeight );
		TempUIButton.SetUV( UBS_CLICK, 0, 140, 131, 161, fTexWidth, fTexHeight );
		TempUIButton.CopyUV( UBS_IDLE, UBS_ON );
		TempUIButton.CopyUV( UBS_IDLE, UBS_DISABLE );

		const int iStartX = 20;
		const int iStartY = 30;	
		int iCurPosX = iStartX;
		int iCurPosY = iStartY;

		CTString strName;
		for(INDEX i=0; i<2; ++i)
		{
			strName = i?_S( 1972, "선택 생산" ):_S( 1973, "무작위 생산" );
			TempUIButton.Create(this, strName, iCurPosX, iCurPosY, BUTTON_WIDTH, BUTTON_HEIGHT );
			m_vectorResourceList.push_back(TempUIButton);
			iCurPosY += BUTTON_HEIGHT + BUTTON_SPAN;
		}
		int nHeight = m_vectorResourceList.size() * (BUTTON_HEIGHT + BUTTON_SPAN) + TITLEBAR_HEIGHT + 10;
		SetSize( m_nWidth, nHeight );
		CUIManager::getSingleton()->RearrangeOrder( UI_SELECTRESOURCE, TRUE );
	}

	// 시작 되면 키보드 이동 막기 [3/26/2013 Ranma]
	m_bKeyMove = false;
	return;
}
예제 #11
0
// ----------------------------------------------------------------------------
// Name : MouseMessage()
// Desc :
// ----------------------------------------------------------------------------
WMSG_RESULT	CUISelectResource::MouseMessage( MSG *pMsg )
{
	WMSG_RESULT	wmsgResult;
	
	// Title bar
	static BOOL	bTitleBarClick = FALSE;
	
	// Item clicked
	static BOOL	bLButtonDownInItem = FALSE;
	
	// Mouse point
	static int	nOldX, nOldY;
	int	nX = LOWORD( pMsg->lParam );
	int	nY = HIWORD( pMsg->lParam );
	
	// Mouse message
	switch( pMsg->message )
	{
	case WM_MOUSEMOVE:
		{
			if( IsInside( nX, nY ) )
				CUIManager::getSingleton()->SetMouseCursorInsideUIs();
			
			int	ndX = nX - nOldX;
			int	ndY = nY - nOldY;
			
			// Move shop
			if( bTitleBarClick && ( pMsg->wParam & MK_LBUTTON ) )
			{
				nOldX = nX;	nOldY = nY;
				
				Move( ndX, ndY );
				
				return WMSG_SUCCESS;
			}
			
			// Close Button
			if( m_btnClose.MouseMessage( pMsg ) != WMSG_FAIL )
				return WMSG_SUCCESS;

			for(int i = 0; i < m_vectorResourceList.size(); ++i)
			{
				if( (wmsgResult = m_vectorResourceList[i].MouseMessage( pMsg ) )!= WMSG_FAIL )
				{
					return WMSG_SUCCESS;
				}
			}
		}
		break;
	case WM_LBUTTONDOWN:
		{
			if( IsInside( nX, nY ) )
			{
				CUIManager* pUIManager = CUIManager::getSingleton();
				nOldX = nX;		nOldY = nY;
				
				// Close button
				if( m_btnClose.MouseMessage( pMsg ) != WMSG_FAIL )
				{
					// Nothing
				}
				// Title bar
				else if( IsInsideRect( nX, nY, m_rcTitle ) )
				{
					bTitleBarClick = TRUE;
				}
				else
				{
					std::vector<CUIButton>::iterator end = m_vectorResourceList.end();
					std::vector<CUIButton>::iterator it = m_vectorResourceList.begin();
					
					for(; it != end; ++it)
					{
						if( (*it).MouseMessage( pMsg ) != WMSG_FAIL )//button 누름
						{
							int dist = std::distance(m_vectorResourceList.begin(), it);

							if( m_bSelectType )
							{
								if( dist == PRODUCT_TYPE_RANDOM )
								{
									StartProduct();
									ResetSelectResource();
								}
								else if( dist == PRODUCT_TYPE_SELECT )
								{
									m_bSelectType = FALSE;
									CTString strName;
					
									CUIButton TempUIButton;
									TempUIButton.SetUV( UBS_IDLE, 0, 117, 131, 138, m_ptdBaseTexture->GetPixWidth(), m_ptdBaseTexture->GetPixHeight() );
									TempUIButton.SetUV( UBS_CLICK, 0, 140, 131, 161, m_ptdBaseTexture->GetPixWidth(), m_ptdBaseTexture->GetPixHeight() );
									TempUIButton.CopyUV( UBS_IDLE, UBS_ON );
									TempUIButton.CopyUV( UBS_IDLE, UBS_DISABLE );

									m_vectorResourceList.clear();

									int iCurPosY = 30;
									for(INDEX i=0; i<3; ++i)
									{
	
										strName = _pNetwork->GetItemData( g_iProductItemDBIndex[m_iResourceType-1][i] )->GetName();
										TempUIButton.Create(this, strName, 20, iCurPosY, BUTTON_WIDTH, BUTTON_HEIGHT );
										m_vectorResourceList.push_back(TempUIButton);
										iCurPosY += BUTTON_HEIGHT + BUTTON_SPAN;
									}
									int nHeight = m_vectorResourceList.size() * (BUTTON_HEIGHT + BUTTON_SPAN) + TITLEBAR_HEIGHT + 10;
									SetSize( m_nWidth, nHeight );
									pUIManager->RearrangeOrder( UI_SELECTRESOURCE, TRUE );
								}
							}
							else
							{
								StartProduct( dist );
								ResetSelectResource();	

							}
							return WMSG_SUCCESS;
						}
					}
				}
				
				pUIManager->RearrangeOrder( UI_SELECTRESOURCE, TRUE );
				return WMSG_SUCCESS;
			}
			else
			{
				ResetSelectResource();
				m_bKeyMove = true;
			}
		}
		break;
	case WM_LBUTTONUP:
		{
			bTitleBarClick = FALSE;
			
			// Close button
			if( (wmsgResult = m_btnClose.MouseMessage( pMsg ) ) != WMSG_FAIL )
			{
				if(wmsgResult == WMSG_COMMAND)
				{
					ResetSelectResource();
					m_bKeyMove = true;
				}
				return WMSG_SUCCESS;
			}
			else
			{	
				for(int i = 0; i < m_vectorResourceList.size(); ++i)
				{
					if( (wmsgResult = m_vectorResourceList[i].MouseMessage( pMsg ) )!= WMSG_FAIL )
					{
						if(wmsgResult  == WMSG_COMMAND)
						{
						}
						return WMSG_SUCCESS;
					}
				}
			}
		}
		break;
	}
	return WMSG_FAIL;
}
//////////////////////////////////////////////////////////////////////////
// high level scripting interface
//////////////////////////////////////////////////////////////////////////
HRESULT CUIWindow::ScCallMethod(CScScript* Script, CScStack *Stack, CScStack *ThisStack, char *Name)
{
    //////////////////////////////////////////////////////////////////////////
    // GetWidget / GetControl
    //////////////////////////////////////////////////////////////////////////
    if(strcmp(Name, "GetWidget")==0 || strcmp(Name, "GetControl")==0)
    {
        Stack->CorrectParams(1);
        CScValue* val = Stack->Pop();
        if(val->GetType()==VAL_INT)
        {
            int widget= val->GetInt();
            if(widget<0 || widget>=m_Widgets.GetSize()) Stack->PushNULL();
            else Stack->PushNative(m_Widgets[widget], true);
        }
        else
        {
            for(int i=0; i<m_Widgets.GetSize(); i++)
            {
                if(CBPlatform::stricmp(m_Widgets[i]->m_Name, val->GetString())==0)
                {
                    Stack->PushNative(m_Widgets[i], true);
                    return S_OK;
                }
            }
            Stack->PushNULL();
        }

        return S_OK;
    }

    //////////////////////////////////////////////////////////////////////////
    // SetInactiveFont
    //////////////////////////////////////////////////////////////////////////
    else if(strcmp(Name, "SetInactiveFont")==0)
    {
        Stack->CorrectParams(1);

        if(m_FontInactive) Game->m_FontStorage->RemoveFont(m_FontInactive);
        m_FontInactive = Game->m_FontStorage->AddFont(Stack->Pop()->GetString());
        Stack->PushBool(m_FontInactive!=NULL);

        return S_OK;
    }

    //////////////////////////////////////////////////////////////////////////
    // SetInactiveImage
    //////////////////////////////////////////////////////////////////////////
    else if(strcmp(Name, "SetInactiveImage")==0)
    {
        Stack->CorrectParams(1);

        SAFE_DELETE(m_ImageInactive);
        m_ImageInactive = new CBSprite(Game);
        char* Filename = Stack->Pop()->GetString();
        if(!m_ImageInactive || FAILED(m_ImageInactive->LoadFile(Filename)))
        {
            SAFE_DELETE(m_ImageInactive);
            Stack->PushBool(false);
        }
        else Stack->PushBool(true);

        return S_OK;
    }

    //////////////////////////////////////////////////////////////////////////
    // GetInactiveImage
    //////////////////////////////////////////////////////////////////////////
    else if(strcmp(Name, "GetInactiveImage")==0)
    {
        Stack->CorrectParams(0);
        if(!m_ImageInactive || !m_ImageInactive->m_Filename) Stack->PushNULL();
        else Stack->PushString(m_ImageInactive->m_Filename);

        return S_OK;
    }

    //////////////////////////////////////////////////////////////////////////
    // GetInactiveImageObject
    //////////////////////////////////////////////////////////////////////////
    else if(strcmp(Name, "GetInactiveImageObject")==0)
    {
        Stack->CorrectParams(0);
        if(!m_ImageInactive) Stack->PushNULL();
        else Stack->PushNative(m_ImageInactive, true);

        return S_OK;
    }


    //////////////////////////////////////////////////////////////////////////
    // Close
    //////////////////////////////////////////////////////////////////////////
    else if(strcmp(Name, "Close")==0)
    {
        Stack->CorrectParams(0);
        Stack->PushBool(SUCCEEDED(Close()));
        return S_OK;
    }

    //////////////////////////////////////////////////////////////////////////
    // GoExclusive
    //////////////////////////////////////////////////////////////////////////
    else if(strcmp(Name, "GoExclusive")==0)
    {
        Stack->CorrectParams(0);
        GoExclusive();
        Script->WaitFor(this);
        Stack->PushNULL();
        return S_OK;
    }

    //////////////////////////////////////////////////////////////////////////
    // GoSystemExclusive
    //////////////////////////////////////////////////////////////////////////
    else if(strcmp(Name, "GoSystemExclusive")==0)
    {
        Stack->CorrectParams(1);
        char* Event = Stack->Pop()->GetString();
        GoSystemExclusive();

        if (Event != NULL)
        {
            ApplyEvent(Event);
        }
        Script->WaitFor(this);
        Stack->PushNULL();
        return S_OK;
    }

    //////////////////////////////////////////////////////////////////////////
    // Center
    //////////////////////////////////////////////////////////////////////////
    else if(strcmp(Name, "Center")==0)
    {
        Stack->CorrectParams(0);
        m_PosX = (Game->m_Renderer->m_Width - m_Width) / 2;
        m_PosY = (Game->m_Renderer->m_Height - m_Height) / 2;
        Stack->PushNULL();
        return S_OK;
    }

    //////////////////////////////////////////////////////////////////////////
    // LoadFromFile
    //////////////////////////////////////////////////////////////////////////
    else if(strcmp(Name, "LoadFromFile")==0)
    {
        Stack->CorrectParams(1);

        CScValue* Val = Stack->Pop();
        Cleanup();
        if(!Val->IsNULL())
        {
            Stack->PushBool(SUCCEEDED(LoadFile(Val->GetString())));
        }
        else Stack->PushBool(true);

        return S_OK;
    }

    //////////////////////////////////////////////////////////////////////////
    // CreateButton
    //////////////////////////////////////////////////////////////////////////
    else if(strcmp(Name, "CreateButton")==0)
    {
        Stack->CorrectParams(1);
        CScValue* Val = Stack->Pop();

        CUIButton* Btn = new CUIButton(Game);
        if(!Val->IsNULL()) Btn->SetName(Val->GetString());
        Stack->PushNative(Btn, true);

        Btn->m_Parent = this;
        m_Widgets.Add(Btn);

        return S_OK;
    }

    //////////////////////////////////////////////////////////////////////////
    // CreateStatic
    //////////////////////////////////////////////////////////////////////////
    else if(strcmp(Name, "CreateStatic")==0)
    {
        Stack->CorrectParams(1);
        CScValue* Val = Stack->Pop();

        CUIText* Sta = new CUIText(Game);
        if(!Val->IsNULL()) Sta->SetName(Val->GetString());
        Stack->PushNative(Sta, true);

        Sta->m_Parent = this;
        m_Widgets.Add(Sta);

        return S_OK;
    }

    //////////////////////////////////////////////////////////////////////////
    // CreateEditor
    //////////////////////////////////////////////////////////////////////////
    else if(strcmp(Name, "CreateEditor")==0)
    {
        Stack->CorrectParams(1);
        CScValue* Val = Stack->Pop();

        CUIEdit* Edi = new CUIEdit(Game);
        if(!Val->IsNULL()) Edi->SetName(Val->GetString());
        Stack->PushNative(Edi, true);

        Edi->m_Parent = this;
        m_Widgets.Add(Edi);

        return S_OK;
    }

    //////////////////////////////////////////////////////////////////////////
    // CreateWindow
    //////////////////////////////////////////////////////////////////////////
    else if(strcmp(Name, "CreateWindow")==0)
    {
        Stack->CorrectParams(1);
        CScValue* Val = Stack->Pop();

        CUIWindow* Win = new CUIWindow(Game);
        if(!Val->IsNULL()) Win->SetName(Val->GetString());
        Stack->PushNative(Win, true);

        Win->m_Parent = this;
        m_Widgets.Add(Win);

        return S_OK;
    }

    //////////////////////////////////////////////////////////////////////////
    // DeleteControl / DeleteButton / DeleteStatic / DeleteEditor / DeleteWindow
    //////////////////////////////////////////////////////////////////////////
    else if(strcmp(Name, "DeleteControl")==0 || strcmp(Name, "DeleteButton")==0 || strcmp(Name, "DeleteStatic")==0 || strcmp(Name, "DeleteEditor")==0 || strcmp(Name, "DeleteWindow")==0)
    {
        Stack->CorrectParams(1);
        CScValue* val = Stack->Pop();
        CUIObject* obj = (CUIObject*)val->GetNative();

        for(int i=0; i<m_Widgets.GetSize(); i++)
        {
            if(m_Widgets[i]==obj)
            {
                delete m_Widgets[i];
                m_Widgets.RemoveAt(i);
                if(val->GetType()==VAL_VARIABLE_REF) val->SetNULL();
            }
        }
        Stack->PushNULL();
        return S_OK;
    }
    else if SUCCEEDED(Game->WindowScriptMethodHook(this, Script, Stack, Name)) return S_OK;

    else return CUIObject::ScCallMethod(Script, Stack, ThisStack, Name);
TOKEN_DEF_END
//////////////////////////////////////////////////////////////////////////
HRESULT CUIWindow::LoadBuffer(BYTE* Buffer, bool Complete)
{
    TOKEN_TABLE_START(commands)
    TOKEN_TABLE (WINDOW)
    TOKEN_TABLE (ALPHA_COLOR)
    TOKEN_TABLE (ALPHA)
    TOKEN_TABLE (TEMPLATE)
    TOKEN_TABLE (DISABLED)
    TOKEN_TABLE (VISIBLE)
    TOKEN_TABLE (BACK_INACTIVE)
    TOKEN_TABLE (BACK)
    TOKEN_TABLE (IMAGE_INACTIVE)
    TOKEN_TABLE (IMAGE)
    TOKEN_TABLE (FONT_INACTIVE)
    TOKEN_TABLE (FONT)
    TOKEN_TABLE (TITLE_ALIGN)
    TOKEN_TABLE (TITLE_RECT)
    TOKEN_TABLE (TITLE)
    TOKEN_TABLE (DRAG_RECT)
    TOKEN_TABLE (X)
    TOKEN_TABLE (Y)
    TOKEN_TABLE (WIDTH)
    TOKEN_TABLE (HEIGHT)
    TOKEN_TABLE (FADE_ALPHA)
    TOKEN_TABLE (FADE_COLOR)
    TOKEN_TABLE (CURSOR)
    TOKEN_TABLE (NAME)
    TOKEN_TABLE (BUTTON)
    TOKEN_TABLE (STATIC)
    TOKEN_TABLE (TRANSPARENT)
    TOKEN_TABLE (SCRIPT)
    TOKEN_TABLE (CAPTION)
    TOKEN_TABLE (PARENT_NOTIFY)
    TOKEN_TABLE (MENU)
    TOKEN_TABLE (IN_GAME)
    TOKEN_TABLE (CLIP_CONTENTS)
    TOKEN_TABLE (PAUSE_MUSIC)
    TOKEN_TABLE (EDITOR_PROPERTY)
    TOKEN_TABLE (EDIT)
    TOKEN_TABLE_END

    BYTE* params;
    int cmd=2;
    CBParser parser(Game);

    int FadeR=0, FadeG=0, FadeB=0, FadeA=0;
    int ar=0, ag=0, ab=0, alpha=0;

    if(Complete)
    {
        if(parser.GetCommand ((char**)&Buffer, commands, (char**)&params)!=TOKEN_WINDOW)
        {
            Game->LOG(0, "'WINDOW' keyword expected.");
            return E_FAIL;
        }
        Buffer = params;
    }

    while (cmd >= PARSERR_TOKENNOTFOUND && (cmd = parser.GetCommand ((char**)&Buffer, commands, (char**)&params)) >= PARSERR_TOKENNOTFOUND)
    {
        switch (cmd)
        {
        case TOKEN_TEMPLATE:
            if(FAILED(LoadFile((char*)params))) cmd = PARSERR_GENERIC;
            break;

        case TOKEN_NAME:
            SetName((char*)params);
            break;

        case TOKEN_CAPTION:
            SetCaption((char*)params);
            break;

        case TOKEN_BACK:
            SAFE_DELETE(m_Back);
            m_Back = new CUITiledImage(Game);
            if(!m_Back || FAILED(m_Back->LoadFile((char*)params)))
            {
                SAFE_DELETE(m_Back);
                cmd = PARSERR_GENERIC;
            }
            break;

        case TOKEN_BACK_INACTIVE:
            SAFE_DELETE(m_BackInactive);
            m_BackInactive = new CUITiledImage(Game);
            if(!m_BackInactive || FAILED(m_BackInactive->LoadFile((char*)params)))
            {
                SAFE_DELETE(m_BackInactive);
                cmd = PARSERR_GENERIC;
            }
            break;

        case TOKEN_IMAGE:
            SAFE_DELETE(m_Image);
            m_Image = new CBSprite(Game);
            if(!m_Image || FAILED(m_Image->LoadFile((char*)params)))
            {
                SAFE_DELETE(m_Image);
                cmd = PARSERR_GENERIC;
            }
            break;

        case TOKEN_IMAGE_INACTIVE:
            SAFE_DELETE(m_ImageInactive);
            m_ImageInactive = new CBSprite(Game);
            if(!m_ImageInactive || FAILED(m_ImageInactive->LoadFile((char*)params)))
            {
                SAFE_DELETE(m_ImageInactive);
                cmd = PARSERR_GENERIC;
            }
            break;

        case TOKEN_FONT:
            if(m_Font) Game->m_FontStorage->RemoveFont(m_Font);
            m_Font = Game->m_FontStorage->AddFont((char*)params);
            if(!m_Font) cmd = PARSERR_GENERIC;
            break;

        case TOKEN_FONT_INACTIVE:
            if(m_FontInactive) Game->m_FontStorage->RemoveFont(m_FontInactive);
            m_FontInactive = Game->m_FontStorage->AddFont((char*)params);
            if(!m_FontInactive) cmd = PARSERR_GENERIC;
            break;

        case TOKEN_TITLE:
            SetText((char*)params);
            Game->m_StringTable->Expand(&m_Text);
            break;

        case TOKEN_TITLE_ALIGN:
            if(CBPlatform::stricmp((char*)params, "left")==0) m_TitleAlign = TAL_LEFT;
            else if(CBPlatform::stricmp((char*)params, "right")==0) m_TitleAlign = TAL_RIGHT;
            else m_TitleAlign = TAL_CENTER;
            break;

        case TOKEN_TITLE_RECT:
            parser.ScanStr((char*)params, "%d,%d,%d,%d", &m_TitleRect.left, &m_TitleRect.top, &m_TitleRect.right, &m_TitleRect.bottom);
            break;

        case TOKEN_DRAG_RECT:
            parser.ScanStr((char*)params, "%d,%d,%d,%d", &m_DragRect.left, &m_DragRect.top, &m_DragRect.right, &m_DragRect.bottom);
            break;

        case TOKEN_X:
            parser.ScanStr((char*)params, "%d", &m_PosX);
            break;

        case TOKEN_Y:
            parser.ScanStr((char*)params, "%d", &m_PosY);
            break;

        case TOKEN_WIDTH:
            parser.ScanStr((char*)params, "%d", &m_Width);
            break;

        case TOKEN_HEIGHT:
            parser.ScanStr((char*)params, "%d", &m_Height);
            break;

        case TOKEN_CURSOR:
            SAFE_DELETE(m_Cursor);
            m_Cursor = new CBSprite(Game);
            if(!m_Cursor || FAILED(m_Cursor->LoadFile((char*)params)))
            {
                SAFE_DELETE(m_Cursor);
                cmd = PARSERR_GENERIC;
            }
            break;

        case TOKEN_BUTTON:
        {
            CUIButton* btn = new CUIButton(Game);
            if(!btn || FAILED(btn->LoadBuffer(params, false)))
            {
                SAFE_DELETE(btn);
                cmd = PARSERR_GENERIC;
            }
            else
            {
                btn->m_Parent = this;
                m_Widgets.Add(btn);
            }
        }
        break;

        case TOKEN_STATIC:
        {
            CUIText* text = new CUIText(Game);
            if(!text || FAILED(text->LoadBuffer(params, false)))
            {
                SAFE_DELETE(text);
                cmd = PARSERR_GENERIC;
            }
            else
            {
                text->m_Parent = this;
                m_Widgets.Add(text);
            }
        }
        break;

        case TOKEN_EDIT:
        {
            CUIEdit* edit = new CUIEdit(Game);
            if(!edit || FAILED(edit->LoadBuffer(params, false)))
            {
                SAFE_DELETE(edit);
                cmd = PARSERR_GENERIC;
            }
            else
            {
                edit->m_Parent = this;
                m_Widgets.Add(edit);
            }
        }
        break;

        case TOKEN_WINDOW:
        {
            CUIWindow* win = new CUIWindow(Game);
            if(!win || FAILED(win->LoadBuffer(params, false)))
            {
                SAFE_DELETE(win);
                cmd = PARSERR_GENERIC;
            }
            else
            {
                win->m_Parent = this;
                m_Widgets.Add(win);
            }
        }
        break;


        case TOKEN_TRANSPARENT:
            parser.ScanStr((char*)params, "%b", &m_Transparent);
            break;

        case TOKEN_SCRIPT:
            AddScript((char*)params);
            break;

        case TOKEN_PARENT_NOTIFY:
            parser.ScanStr((char*)params, "%b", &m_ParentNotify);
            break;

        case TOKEN_PAUSE_MUSIC:
            parser.ScanStr((char*)params, "%b", &m_PauseMusic);
            break;

        case TOKEN_DISABLED:
            parser.ScanStr((char*)params, "%b", &m_Disable);
            break;

        case TOKEN_VISIBLE:
            parser.ScanStr((char*)params, "%b", &m_Visible);
            break;

        case TOKEN_MENU:
            parser.ScanStr((char*)params, "%b", &m_IsMenu);
            break;

        case TOKEN_IN_GAME:
            parser.ScanStr((char*)params, "%b", &m_InGame);
            break;

        case TOKEN_CLIP_CONTENTS:
            parser.ScanStr((char*)params, "%b", &m_ClipContents);
            break;

        case TOKEN_FADE_COLOR:
            parser.ScanStr((char*)params, "%d,%d,%d", &FadeR, &FadeG, &FadeB);
            m_FadeBackground = true;
            break;

        case TOKEN_FADE_ALPHA:
            parser.ScanStr((char*)params, "%d", &FadeA);
            m_FadeBackground = true;
            break;

        case TOKEN_EDITOR_PROPERTY:
            ParseEditorProperty(params, false);
            break;

        case TOKEN_ALPHA_COLOR:
            parser.ScanStr((char*)params, "%d,%d,%d", &ar, &ag, &ab);
            break;

        case TOKEN_ALPHA:
            parser.ScanStr((char*)params, "%d", &alpha);
            break;


        default:
            if(FAILED(Game->WindowLoadHook(this, (char**)&Buffer, (char**)params)))
            {
                cmd = PARSERR_GENERIC;
            }
        }
    }
    if (cmd == PARSERR_TOKENNOTFOUND)
    {
        Game->LOG(0, "Syntax error in WINDOW definition");
        return E_FAIL;
    }
    if (cmd == PARSERR_GENERIC)
    {
        Game->LOG(0, "Error loading WINDOW definition");
        return E_FAIL;
    }

    CorrectSize();

    if(alpha != 0 && ar==0 && ag == 0 && ab == 0)
    {
        ar = ag = ab = 255;
    }
    m_AlphaColor = DRGBA(ar, ag, ab, alpha);

    if(m_FadeBackground) m_FadeColor = DRGBA(FadeR, FadeG, FadeB, FadeA);

    m_FocusedWidget = NULL;

    return S_OK;
}
예제 #14
0
void CDrawTextTextScene::OnLoad()
{
	CUIButton* back = (CUIButton*)get("back");
	back->AddClickListen(this,(OnBtnClick)&CDrawTextTextScene::OnBtnbackClick);
}