//------------------------------------------------------------------------------ // uiTrade_dialogproc.cpp // (C) 2005 ckbang //------------------------------------------------------------------------------ #include "SunClientPrecompiledHeader.h" #include "uiTrade.h" #include "ItemUnitRenderer.h" #include "Mouse.h" #include "MouseHandler.h" #include "uiTradeMan/uiTradeMan.h" #include "interfacemanager.h" #include "globalfunc.h" #include "uiToolTipMan/uiToolTipMan.h" #include "uiVendorMan/uiVendorMan_def.h" //------------------------------------------------------------------------------ WzID uiTrade::m_wzId[DIALOG_MAX] = { StrToWzID("B001"), // DLGPOS_SLOT00 = 0, StrToWzID("B002"), // DLGPOS_SLOT01, StrToWzID("B003"), // DLGPOS_SLOT02, StrToWzID("B004"), // DLGPOS_SLOT03, StrToWzID("B005"), // DLGPOS_SLOT04, StrToWzID("B006"), // DLGPOS_SLOT05, StrToWzID("B007"), // DLGPOS_SLOT06, StrToWzID("B008"), // DLGPOS_SLOT07, StrToWzID("B009"), // DLGPOS_SLOT08, StrToWzID("B010"), // DLGPOS_SLOT09, StrToWzID("B011"), // DLGPOS_SLOT10, StrToWzID("B012"), // DLGPOS_SLOT11, StrToWzID("B013"), // DLGPOS_SLOT12, StrToWzID("B014"), // DLGPOS_SLOT13, StrToWzID("B015"), // DLGPOS_SLOT14, StrToWzID("B016"), // DLGPOS_SLOT15, StrToWzID("B017"), // DLGPOS_SLOT16, StrToWzID("B018"), // DLGPOS_SLOT17, StrToWzID("B019"), // DLGPOS_SLOT18, StrToWzID("B020"), // DLGPOS_SLOT19, StrToWzID("B900"), // DLGPOS_BTN_1_MONEY, StrToWzID("B901"), // DLGPOS_BTN_2_MONEY, StrToWzID("B100"), // DLGPOS_BTN_COMPLETE, // °Å·¡ ¼ö¶ô StrToWzID("B101"), // DLGPOS_BTN_ACCEPT, // °Å·¡ Á¦½Ã StrToWzID("B555"), // DLGPOS_BTN_CANCEL, // °Å·¡ Ãë¼Ò StrToWzID("T001"), // DLGPOS_TXT_1_ITEM_NAME, StrToWzID("T003"), // DLGPOS_TXT_2_ITEM_NAME, StrToWzID("T002"), // DLGPOS_TXT_1_STATUS, StrToWzID("T004"), // DLGPOS_TXT_2_STATUS, StrToWzID("T008"), // DLGPOS_TXT_1_MONEY, StrToWzID("T009"), // DLGPOS_TXT_2_MONEY, #ifdef _NA_000000_20130114_RENEWER_UI #else StrToWzID("T005"), // DLGPOS_TXT_COMPLETE, // °Å·¡ ¼ö¶ô StrToWzID("T006"), // DLGPOS_TXT_ACCEPT, // °Å·¡ Á¦½Ã StrToWzID("T007"), // DLGPOS_TXT_CANCEL, // °Å·¡ Ãë¼Ò #endif//#ifdef _NA_000000_20130114_RENEWER_UI StrToWzID("B999"), // DLGPOS_BTN_EXIT, }; //------------------------------------------------------------------------------ /** called to show request */ void uiTrade::OnShowWindow( BOOL val ) { //this->m_bShow = val; if (val) { uiBase* pDlg = GET_DIALOG( IM_VENDOR_MANAGER::VENDOR_SELL ); if ( pDlg->IsVisible() ) { pDlg->ShowWindow(FALSE); } SolarDialog * system_dialog = g_InterfaceManager.GetDialog(InterfaceManager::DIALOG_SYSTEM); if ((system_dialog != NULL) && (system_dialog->IsVisible() == TRUE)) { system_dialog->ShowWindow(FALSE); } keyMsg msg; ZeroMemory(&msg,sizeof(msg)); msg.dwType = eDoType_dialog_trade; msg.wParam = InterfaceManager::DIALOG_TRADE; msg.DoSomething = GlobalFunc::DoTrade; g_KeyQueueManager.PushBack(msg); ClearCheckItem(); //MoveWindowWZ( -1.0f, 120.0f ); this->GetUIMan()->ShowDialog(InterfaceManager::DIALOG_EQUIP, TRUE); this->InitItemRender(); this->Unlock(); } else { FlushUnitDraw(); g_KeyQueueManager.DeleteMsg(eDoType_dialog_trade); m_MouseOverObject.eMouseOverType = eMOUSE_OVER_MAX; MouseHandler::Instance()->RollbackItemAtHand(); MouseHandler::Instance()->RemoveItemAtHand(); #ifdef _K2P_SOFTWARE_NUMBER_KEYBOARD_000913 GetManager()->ShowNumTradeUIDialog( FALSE ); #else g_InterfaceManager.ShowWindow(InterfaceManager::DIALOG_INPUT_NUM, FALSE); #endif } } //------------------------------------------------------------------------------ /** */ void uiTrade::MessageProc( SI_MESSAGE * pMessage ) { if (this->IsLock()) return; switch( pMessage->eResultMsg ) { case RT_MSG_LBUTTONCLICK: { POSTYPE pos = getCtrlIDToPos( pMessage->dwCtrlID ); if( pos < (DLGPOS_SLOT09+1)) { //°Å·¡Áß À̶ó¸é Á¤»óÀÛµ¿, °Å·¡Á¦½Ã Çß´Ù¸é ÇÇÅ· ±ÝÁö if(TRADE_STATUS_IDLE == this->GetManager()->GetTradeInfo1().m_status) { CControlWZ * pControl = getControl(pos); if (pControl) { RECT rcSlot = pControl->GetSizeRect(); MouseHandler::Instance()->ItemTransaction(SI_TRADE, pos, &rcSlot); } } } switch( getCtrlIDToPos( pMessage->dwCtrlID ) ) { // °Å·¡ ¼ö¶ô case DLGPOS_BTN_ACCEPT: { this->GetManager()->TEST_Accept(); } break; // °Å·¡ Á¦½Ã case DLGPOS_BTN_PROPOSAL: { this->GetManager()->TEST_Proposal(); } break; // µ· ÀÔ·Ââ ¹öư case DLGPOS_BTN_1_MONEY: { #ifdef _K2P_SOFTWARE_NUMBER_KEYBOARD_000913 GetManager()->ShowNumTradeUIDialog( TRUE ); #else this->GetManager()->PopupTradeMoney(); #endif } break; // °Å·¡ Ãë¼Ò case DLGPOS_BTN_CANCEL: case DLGPOS_BTN_EXIT: { this->GetManager()->SendTradeCancel(); } break; } } break; default: { SolarDialog::MessageProc( pMessage ); } break; } } //---------------------------------------------------------------------------- /** */ void uiTrade::MouseOver_MsgProc( SI_MESSAGE * pMessage ) { switch( pMessage->eResultMsg ) { case RT_MSG_MOUSEOVER: { POSTYPE pos = getCtrlIDToPos( pMessage->dwCtrlID ); if (pos >= DLGPOS_SLOT00 && pos < (DLGPOS_SLOT19+1)) { if (!IsEmpty( pos )) { SCSlot & rSlot = GetSlot( pos ); m_MouseOverObject.eMouseOverType = eMOUSE_OVER_SLOT; m_MouseOverObject.pSlot = &rSlot; SetCheckItem(pos, false); } else { m_MouseOverObject.eMouseOverType = eMOUSE_OVER_MAX; } } else { m_MouseOverObject.eMouseOverType = eMOUSE_OVER_MAX; } } break; } } //------------------------------------------------------------------------------ /** */ void uiTrade::OnUpdateSolarDialog() { if (m_pItemUnitRenderer) m_pItemUnitRenderer->Update(); this->updateStatus(); this->GetManager()->CheckEndTradingCauseRanged(); } //------------------------------------------------------------------------------ /** */ void uiTrade::updateStatus() { TCHAR szText[INTERFACE_STRING_LENGTH], szMessage[INTERFACE_STRING_LENGTH]; uicTradeInfo tradeInfo1 = this->GetManager()->GetTradeInfo1(); uicTradeInfo tradeInfo2 = this->GetManager()->GetTradeInfo2(); // // ´©°¡ Á¦½ÃÇߴ°¡? // if (tradeInfo1.m_isSet) { // %s ÀÌ(°¡) Á¦½ÃÇÑ ¾ÆÀÌÅÛ g_InterfaceManager.GetInterfaceString( eST_NAMECODE_TRADE_STATE_REQUEST, szText, INTERFACE_STRING_LENGTH ); Sprintf( szMessage, szText, tradeInfo1.m_strName.c_str() ); } else { // ?? ÀÌ(°¡) Á¦½ÃÇÑ ¾ÆÀÌÅÛ g_InterfaceManager.GetInterfaceString( eST_NAMECODE_TRADE_STATE_REQUEST, szText, INTERFACE_STRING_LENGTH ); Sprintf( szMessage, szText, _T("??") ); } this->m_pTxtItemNames[0]->SetTextColor(RGBA(255, 133, 50, 255)); GlobalFunc::SetCaption( this->m_pTxtItemNames[0], szMessage ); if (tradeInfo2.m_isSet) { // %s ÀÌ(°¡) Á¦½ÃÇÑ ¾ÆÀÌÅÛ g_InterfaceManager.GetInterfaceString( eST_NAMECODE_TRADE_STATE_REQUEST, szText, INTERFACE_STRING_LENGTH ); Sprintf( szMessage, szText, tradeInfo2.m_strName.c_str() ); } else { // ?? ÀÌ(°¡) Á¦½ÃÇÑ ¾ÆÀÌÅÛ g_InterfaceManager.GetInterfaceString( eST_NAMECODE_TRADE_STATE_REQUEST, szText, INTERFACE_STRING_LENGTH ); Sprintf( szMessage, szText, _T("??") ); } this->m_pTxtItemNames[1]->SetTextColor(RGBA(255, 133, 50, 255)); GlobalFunc::SetCaption( this->m_pTxtItemNames[1], szMessage ); // // °Å·¡ °ü·Ã ¹öưµéÀÇ ¹®ÀÚ Ãâ·Â // // °Å·¡ ¿Ï·á g_InterfaceManager.GetInterfaceString( eST_TRADE_STATE_DONE_TEXT, szMessage, INTERFACE_STRING_LENGTH ); if (tradeInfo1.m_status == TRADE_STATUS_PROPOSAL && tradeInfo2.m_status >= TRADE_STATUS_PROPOSAL) { #ifdef _NA_000000_20130114_RENEWER_UI this->m_pBtnComplete->SetTextColor(RGBA(227,179,27,255)); #else this->m_pTxtComplete->SetTextColor(RGBA(227,179,27,255)); #endif//#ifdef _NA_000000_20130114_RENEWER_UI } else { #ifdef _NA_000000_20130114_RENEWER_UI this->m_pBtnComplete->SetTextColor(RGBA(100,100,100,255)); #else this->m_pTxtComplete->SetTextColor(RGBA(100,100,100,255)); #endif//#ifdef _NA_000000_20130114_RENEWER_UI } #ifdef _NA_000000_20130114_RENEWER_UI GlobalFunc::SetCaption( this->m_pBtnComplete, szMessage ); #else GlobalFunc::SetCaption( this->m_pTxtComplete, szMessage ); #endif//#ifdef _NA_000000_20130114_RENEWER_UI if (tradeInfo1.m_status == TRADE_STATUS_IDLE) { g_InterfaceManager.GetInterfaceString( eST_TRADE_STATE_REQUEST_TEXT, szMessage, INTERFACE_STRING_LENGTH ); //°Å·¡Á¦½Ã #ifdef _NA_000000_20130114_RENEWER_UI this->m_pBtnAccept->SetTextColor(RGBA(227,179,27,255)); #else #endif//#ifdef _NA_000000_20130114_RENEWER_UI } else if (tradeInfo1.m_status == TRADE_STATUS_PROPOSAL) { g_InterfaceManager.GetInterfaceString( 886, szMessage, INTERFACE_STRING_LENGTH ); // ¹°Ç°¼öÁ¤ #ifdef _NA_000000_20130114_RENEWER_UI this->m_pBtnAccept->SetTextColor(RGBA(227,179,27,255)); #else this->m_pTxtAccept->SetTextColor(RGBA(227,179,27,255)); #endif//#ifdef _NA_000000_20130114_RENEWER_UI } else { g_InterfaceManager.GetInterfaceString( eST_TRADE_STATE_REQUEST_TEXT, szMessage, INTERFACE_STRING_LENGTH ); #ifdef _NA_000000_20130114_RENEWER_UI this->m_pBtnAccept->SetTextColor(RGBA(100,100,100,255)); #else this->m_pTxtAccept->SetTextColor(RGBA(100,100,100,255)); #endif//#ifdef _NA_000000_20130114_RENEWER_UI } #ifdef _NA_000000_20130114_RENEWER_UI GlobalFunc::SetCaption( this->m_pBtnAccept, szMessage ); #else GlobalFunc::SetCaption( this->m_pTxtAccept, szMessage ); #endif//#ifdef _NA_000000_20130114_RENEWER_UI // Ãë¼Ò g_InterfaceManager.GetInterfaceString( eST_CANCEL, szMessage, INTERFACE_STRING_LENGTH ); #ifdef _NA_000000_20130114_RENEWER_UI this->m_pBtnCancel->SetTextColor( RGBA(227,179,27,255) ); GlobalFunc::SetCaption( this->m_pBtnCancel, szMessage ); #else this->m_pTxtCancel->SetTextColor( RGBA(227,179,27,255) ); GlobalFunc::SetCaption( this->m_pTxtCancel, szMessage ); #endif//#ifdef _NA_000000_20130114_RENEWER_UI // // °Å·¡ »óÅ Ãâ·Â // if (tradeInfo1.m_status < (TRADE_STATUS_ACCEPT+1)) { g_InterfaceManager.GetInterfaceString( (eST_TRADE_STATE + tradeInfo1.m_status), szText, INTERFACE_STRING_LENGTH ); Sprintf( szMessage, _T("%s"), szText ); } else { Sprintf( szMessage, _T("??") ); } this->m_pTxtStatus[0]->SetTextColor(RGBA(200, 100, 25, 150)); GlobalFunc::SetCaption( this->m_pTxtStatus[0], szMessage ); if (tradeInfo2.m_status < (TRADE_STATUS_ACCEPT+1)) { g_InterfaceManager.GetInterfaceString( (eST_TRADE_STATE + tradeInfo2.m_status), szText, INTERFACE_STRING_LENGTH ); Sprintf( szMessage, _T("%s"), szText ); } else { Sprintf( szMessage, _T("??") ); } this->m_pTxtStatus[1]->SetTextColor(RGBA(200, 100, 25, 150)); GlobalFunc::SetCaption( this->m_pTxtStatus[1], szMessage ); // // °Å·¡ÁßÀÎ ±Ý¾× Ç¥½Ã // TCHAR szMoney[INTERFACE_STRING_LENGTH] = {0,}; TCHAR szMoneyFinal[INTERFACE_STRING_LENGTH] = {0,}; NUMBERFMT nFmt = { 0, 0, 3, _T("."), _T(","), 1 }; Sprintf(szMoney, _T("%I64u"), tradeInfo1.m_DealMoney); ::GetNumberFormat( LOCALE_SYSTEM_DEFAULT, NULL, szMoney, &nFmt, szMoneyFinal, sizeof(szMoneyFinal)); DWORD money_color; money_color = GlobalFunc::GetMoneyColor(tradeInfo1.m_DealMoney); this->m_pTxtMoneys[0]->SetTextColor(money_color); GlobalFunc::SetCaption( this->m_pTxtMoneys[0], szMoneyFinal ); Sprintf(szMoney, _T("%I64u"), tradeInfo2.m_DealMoney); ::GetNumberFormat( LOCALE_SYSTEM_DEFAULT, NULL, szMoney, &nFmt, szMoneyFinal, sizeof(szMoneyFinal)); money_color = GlobalFunc::GetMoneyColor(tradeInfo2.m_DealMoney); this->m_pTxtMoneys[1]->SetTextColor(money_color); GlobalFunc::SetCaption( this->m_pTxtMoneys[1], szMoneyFinal ); } //------------------------------------------------------------------------------ /** */ void uiTrade::RenderCheckItem() { if (m_pItemUnitRenderer == NULL) { return; } for (POSTYPE idx = 0; idx < GetSlotSize2(); ++idx) { if (IsEmpty(idx + GetSlotSize1())) { continue; } if (GetCheckItem(idx) == false) { continue; } if (m_pSlotBtnControls2[idx]) { g_InterfaceManager.RenderCheckItem(m_pSlotBtnControls2[idx]->GetSizeRect()); } } } //------------------------------------------------------------------------------ /** */ void uiTrade::OnRenderSolarDialog() { if (m_pItemUnitRenderer) { m_pItemUnitRenderer->Render(); RenderCheckItem(); } this->renderToolTip(); } //------------------------------------------------------------------------------ /** */ void uiTrade::renderToolTip() { if ( this->m_MouseOverObject.pSlot && eMOUSE_OVER_SLOT == m_MouseOverObject.eMouseOverType ) { if (m_MouseOverObject.pSlot->GetCode() != 0) { uiToolTipMan* pUIMan = (uiToolTipMan*)g_InterfaceManager.GetUserInterfaceManager(UIMAN_TOOLTIP); if(pUIMan) { pUIMan->RegisterTooltipItem(this->m_MouseOverObject.pSlot, TRUE); pUIMan->SetTooltipDialogID(GetDialogKey()); } if( GetAsyncKeyState( VK_CONTROL ) & 0x8000 ) { uiToolTipMan* pUIMan2 = (uiToolTipMan*)g_InterfaceManager.GetUserInterfaceManager( UIMAN_TOOLTIP2 ); if( pUIMan2 ) { pUIMan2->RegisterHeroItemInfoTooltipFromSlot( m_MouseOverObject.pSlot ); } } } } int iMouseX = Mouse::Instance()->GetMouseX(); int iMouseY = Mouse::Instance()->GetMouseY(); // ½ºÅµÃ³¸® // ÀÎÅÍÆäÀ̽º¿¡¼­ Dialog ¹ÙÅÁ¿¡¼­´Â Mouse Over°¡ ¿ÀÁö ¾Ê´Â´Ù. BOOL bMouseOver = FALSE; for (POSTYPE a = DLGPOS_SLOT00; a < (DLGPOS_SLOT19+1); a++) { CControlWZ * pControl = getControl(a); RECT rc = pControl->GetSizeRect(); if (rc.left <= iMouseX && rc.right >= iMouseX) { if (rc.top <= iMouseY && rc.bottom >= iMouseY) { bMouseOver = TRUE; } } } if ( !bMouseOver ) { m_MouseOverObject.eMouseOverType = eMOUSE_OVER_MAX; } } //------------------------------------------------------------------------------ // EOF //------------------------------------------------------------------------------