Files
2022-10-26 12:25:11 +08:00

261 lines
5.0 KiB
C++

#include "SunClientPrecompiledHeader.h"
#include "uiinputnumtradeuidialog.h"
#include "uiTradeMan/uiTradeMan.h"
#include "hero.h"
#include "globalfunc.h"
#include "interfacemanager.h"
#define MAX_EDIT_LENGTH 20
#define MAX_NUMBER_STRING 12
WzID uiInPutNumTradeUIDialog::m_wzId[DIALOG_MAX] =
{
StrToWzID("B011"), // DLGPOS_NUM0
StrToWzID("B008"), // DLGPOS_NUM1
StrToWzID("BT01"), // DLGPOS_NUM2
StrToWzID("B010"), // DLGPOS_NUM3
StrToWzID("B006"), // DLGPOS_NUM4
StrToWzID("BT00"), // DLGPOS_NUM5
StrToWzID("B007"), // DLGPOS_NUM6
StrToWzID("B002"), // DLGPOS_NUM7
StrToWzID("B003"), // DLGPOS_NUM8
StrToWzID("B004"), // DLGPOS_NUM9
StrToWzID("B012"), // DLGPOS_NUM00
StrToWzID("B014"), // DLGPOS_NUM000
StrToWzID("ST00"), // DLGPOS_EDIT
StrToWzID("B005"), // DLGPOS_BACK
StrToWzID("B009"), // DLGPOS_CLEAR
StrToWzID("B015"), // DLGPOS_INPUT
StrToWzID("B001"), // DLGPOS_EXIT
};
char NumArray[MAX_NUMBER_STRING][5] =
{
"0",
"1",
"2",
"3",
"4",
"5",
"6",
"7",
"8",
"9",
"00",
"000"
};
uiInPutNumTradeUIDialog::uiInPutNumTradeUIDialog( InterfaceManager * pUIMan )
:uiBase( pUIMan )
,m_pEditText( NULL )
{
m_MoneyString.clear();
}
uiInPutNumTradeUIDialog::~uiInPutNumTradeUIDialog()
{
}
void uiInPutNumTradeUIDialog::Init( CDrawBase * pDrawBase )
{
uiBase::Init( pDrawBase );
InitControls();
}
void uiInPutNumTradeUIDialog::Release()
{
}
void uiInPutNumTradeUIDialog::OnShowWindow( BOOL val )
{
//this->m_bShow = val;
StringClear();
}
void uiInPutNumTradeUIDialog::NetworkProc( MSG_BASE * pMsg )
{
}
void uiInPutNumTradeUIDialog::MessageProc( SI_MESSAGE * pMessage )
{
if (this->IsLock())
return;
switch( pMessage->eResultMsg )
{
case RT_MSG_LBUTTONCLICK:
{
POSTYPE pos = getCtrlIDToPos( pMessage->dwCtrlID );
switch( getCtrlIDToPos( pMessage->dwCtrlID ) )
{
case DLGPOS_NUM0:
case DLGPOS_NUM00:
case DLGPOS_NUM000:
case DLGPOS_NUM1:
case DLGPOS_NUM2:
case DLGPOS_NUM3:
case DLGPOS_NUM4:
case DLGPOS_NUM5:
case DLGPOS_NUM6:
case DLGPOS_NUM7:
case DLGPOS_NUM8:
case DLGPOS_NUM9:
SetDigit( pos );
break;
case DLGPOS_BACK:
DeleteEndString();
break;
case DLGPOS_CLEAR:
StringClear();
break;
case DLGPOS_INPUT:
SendMoney();
break;
case DLGPOS_EXIT:
ShowWindow( FALSE );
break;
}
}
break;
}
}
void uiInPutNumTradeUIDialog::MouseOver_MsgProc( SI_MESSAGE * pMessage )
{
}
void uiInPutNumTradeUIDialog::InitControls()
{
m_pEditText = (CCtrlStaticWZ *)getControl( DLGPOS_EDIT );
if( m_pEditText != NULL )
m_pEditText->SetTextWZ( "0" );
}
void uiInPutNumTradeUIDialog::SetDigit( POSTYPE pos )
{
if( m_MoneyString.length() >= MAX_EDIT_LENGTH )
return;
if( pos >= MAX_NUMBER_STRING )
return;
std::string temp( NumArray[pos] );
BOOL IsZero = FALSE;
if( temp == "0" || temp == "00" || temp == "000" )
{
if( m_MoneyString.empty() )
IsZero = TRUE;
}
if( IsZero == FALSE )
m_MoneyString += temp;
UpdateEdit();
}
void uiInPutNumTradeUIDialog::CalculateThousandDigit( void )
{
DeleteComma();
size_t len = m_MoneyString.length();
if( len > 3 )
{
int count = 1;
for( int i = len - 1; i > 0; i-- )
{
if( count % 3 == 0 )
{
m_MoneyString.insert( i, "," );
}
count++;
}
}
}
void uiInPutNumTradeUIDialog::DeleteComma( void )
{
STRING_ITRTYPE itr = m_MoneyString.begin();
STRING_ITRTYPE end = m_MoneyString.end();
for( ; itr != end; ++itr )
{
if( *itr == ',' )
m_MoneyString.erase( itr );
}
}
void uiInPutNumTradeUIDialog::DeleteEndString()
{
if( m_MoneyString.empty() )
return;
size_t len = m_MoneyString.length();
m_MoneyString.erase( len - 1 );
UpdateEdit();
}
void uiInPutNumTradeUIDialog::StringClear( void )
{
m_MoneyString.clear();
UpdateEdit();
}
void uiInPutNumTradeUIDialog::SendMoney()
{
if( m_MoneyString.empty() )
{
// 금액을 입력해주세요!!
TCHAR szMessage[INTERFACE_STRING_LENGTH];
g_InterfaceManager.GetInterfaceString( eST_INPUT_MONEY, szMessage, INTERFACE_STRING_LENGTH );
GlobalFunc::OutputMsg_Notice(eOUTPUT_MSG_TOP_SHOW, szMessage);
return;
}
DeleteComma();
MONEY Money = _tcstoui64( m_MoneyString.c_str(), NULL, 10 );
if( g_pHero && (g_pHero->GetMoney() < Money) )
{
// 입력 하실 수 있는 금액은 현재 소지금에 제한 됩니다.
TCHAR szMessage[INTERFACE_STRING_LENGTH];
g_InterfaceManager.GetInterfaceString( 70385, szMessage, INTERFACE_STRING_LENGTH );
GlobalFunc::OutputMsg_Notice(eOUTPUT_MSG_TOP_SHOW, szMessage);
}
else
{
uiTradeMan * pMan = (uiTradeMan*)GetMan();
if( pMan )
pMan->TEST_PutMoney( Money );
StringClear();
ShowWindow( FALSE );
}
}
void uiInPutNumTradeUIDialog::UpdateEdit()
{
if( m_MoneyString.empty() )
UpdateEditText( "0" );
else
{
CalculateThousandDigit();
UpdateEditText( m_MoneyString.c_str() );
}
}
void uiInPutNumTradeUIDialog::UpdateEditText( const char * szText )
{
if( m_pEditText != NULL )
m_pEditText->SetTextWZ( const_cast<char*>( szText ) );
}