Files
Sun1602/Client/GameClient/Interface/uiPasswordDlg/uiPasswordDlg_main.cpp
T
2022-10-26 12:25:11 +08:00

540 lines
14 KiB
C++

#include "SunClientPrecompiledHeader.h"
#include "uiPasswordDlg.h"
#include "uiPasswordMan/uiPassWordMan.h"
#include "uiSystemMan/uiSystemMan.h"
#include "Hero.h"
#include "GlobalFunc.h"
#include "interfacemanager.h"
#include "GameFramework.h"
#include "Mouse.h"
#include "uiToolTipMan/uiToolTipMan.h"
#include "uiinventoryman/uiInventoryMan.h"
#include "uibankman/uiBankMan.h"
//------------------------------------------------------------------------------
WzID uiPasswordDlg::m_wzId[eDIALOG_PASSWORD_DLG_MAX] =
{
StrToWzID("B001"), // eDIALOG_PASSWORD_DLG_BTN_EXIT = 0, // X 버튼
StrToWzID("T001"), // eDIALOG_PASSWORD_DLG_TXT_MESSAGE, // 패스워드 메시지
StrToWzID("ST00"), // eDIALOG_PASSWORD_DLG_TXT, // 패스워드 텍스트
StrToWzID("B010"), // eDIALOG_PASSWORD_DLG_BTN_1, // 1번 버튼
StrToWzID("B011"), // eDIALOG_PASSWORD_DLG_BTN_2, // 2번 버튼
StrToWzID("B012"), // eDIALOG_PASSWORD_DLG_BTN_3, // 3번 버튼
StrToWzID("B006"), // eDIALOG_PASSWORD_DLG_BTN_4, // 4번 버튼
StrToWzID("B007"), // eDIALOG_PASSWORD_DLG_BTN_5, // 5번 버튼
StrToWzID("B008"), // eDIALOG_PASSWORD_DLG_BTN_6, // 6번 버튼
StrToWzID("B002"), // eDIALOG_PASSWORD_DLG_BTN_7, // 7번 버튼
StrToWzID("B003"), // eDIALOG_PASSWORD_DLG_BTN_8, // 8번 버튼
StrToWzID("B004"), // eDIALOG_PASSWORD_DLG_BTN_9, // 9번 버튼
StrToWzID("B014"), // eDIALOG_PASSWORD_DLG_BTN_0, // 0번 버튼
#ifdef _GS_ADD_PWD_X_BTN_1143
StrToWzID("BT01"), // eDIALOG_PASSWORD_DLG_BTN_X, // X자 버튼(대문자)
#endif//_GS_ADD_PWD_X_BTN_1143(대문자)
#ifdef _GS_ADD_PWD_X_BTN_1245
StrToWzID("BT02"), // eDIALOG_PASSWORD_DLG_BTN_X2, // X자 버튼(소문자)
#endif//_GS_ADD_PWD_X_BTN_1245(소문자)
StrToWzID("BT00"), // eDIALOG_PASSWORD_DLG_BTN_CHGPASSWORD, // 패스워드 변경 버튼
StrToWzID("B005"), // eDIALOG_PASSWORD_DLG_BTN_BACKSPACE, // 백스페이스 버튼
StrToWzID("B009"), // eDIALOG_PASSWORD_DLG_BTN_CLEAR, // 클리어 버튼
StrToWzID("B015"), // eDIALOG_PASSWORD_DLG_BTN_OK, // 확인 버튼
StrToWzID("B013"), // eDIALOG_PASSWORD_DLG_BTN_CANCLE, // 취소 버튼
};
//------------------------------------------------------------------------------
/**
*/
uiPasswordDlg::uiPasswordDlg(InterfaceManager *pUIMan) :
uiBase(pUIMan), m_bControlsInitialized(false)
{
this->m_pPasswordMan =
static_cast<uiPasswordMan *>(this->GetUIMan()->GetUserInterfaceManager(UIMAN_PASSWORD));
assert (m_pPasswordMan);
if (!this->m_pPasswordMan)
{
#ifdef _DEBUG
uiSystemMan * pSystemMan = (uiSystemMan *)g_InterfaceManager.GetUserInterfaceManager(UIMAN_SYSTEM);
if(pSystemMan)
pSystemMan->Sys_VerifyLock(_T("m_pPasswordMan이 없습니다."));
#endif
this->ShowInterface(FALSE);
return;
}
m_iTooltipStringCode = 0;
m_UseTooltipCtrls.clear();
m_UseTooltipCtrls[eDIALOG_PASSWORD_DLG_BTN_CHGPASSWORD] = 11193;
m_UseTooltipCtrls[eDIALOG_PASSWORD_DLG_BTN_BACKSPACE] = 11191;
m_UseTooltipCtrls[eDIALOG_PASSWORD_DLG_BTN_CLEAR] = 11192;
ZeroMemory(m_strPassword, sizeof(m_strPassword));
m_bShow = false;
}
//------------------------------------------------------------------------------
/**
*/
uiPasswordDlg::~uiPasswordDlg()
{
this->Release();
}
//------------------------------------------------------------------------------
/**
*/
int uiPasswordDlg::getTooltipString(POSTYPE pos)
{
map<int,int>::iterator iter;
iter = m_UseTooltipCtrls.find(pos);
if (iter == m_UseTooltipCtrls.end())
return 0;
return iter->second;
}
//------------------------------------------------------------------------------
/**
*/
void uiPasswordDlg::Init(CDrawBase* pDrawBase)
{
uiBase::Init(pDrawBase);
m_iCalledState = ePassWordCalledState_None;
this->InitControls();
m_randomizer.Create(ePASSWORD_NUM_DLG_NUM_MAX);
}
//------------------------------------------------------------------------------
/**
*/
void uiPasswordDlg::Release()
{
}
//------------------------------------------------------------------------------
/**
*/
void uiPasswordDlg::InitControls()
{
m_pTxtCtrlMessage = static_cast<CCtrlStaticWZ *>(getControl(eDIALOG_PASSWORD_DLG_TXT_MESSAGE));
assert(m_pTxtCtrlMessage);
m_pTxtCtrlPassword = static_cast<CCtrlStaticWZ *>(getControl(eDIALOG_PASSWORD_DLG_TXT));
assert(m_pTxtCtrlPassword);
for(int i = 0; i < ePASSWORD_NUM_DLG_NUM_MAX; ++i)
{
m_pBtnPasswordNum[i] = static_cast<CCtrlButtonWZ *>(getControl(eDIALOG_PASSWORD_DLG_BTN_1 + i));
assert(m_pBtnPasswordNum[i]);
}
m_pBtnPasswordChg = static_cast<CCtrlButtonWZ *>(getControl(eDIALOG_PASSWORD_DLG_BTN_CHGPASSWORD));
assert(m_pBtnPasswordChg);
this->m_bControlsInitialized = true;
}
void uiPasswordDlg::OnShowWindow( BOOL val )
{
if (val)
{
this->MoveDefaultWindowPos();
if (!this->m_bControlsInitialized)
{
this->ShowInterface(FALSE);
return;
}
keyMsg msg;
ZeroMemory(&msg,sizeof(msg));
msg.dwType = eDoType_dialog_Password;
msg.wParam = InterfaceManager::DIALOG_PASSWORD_DLG;
msg.DoSomething = GlobalFunc::DoShowWindow;
g_KeyQueueManager.PushBack(msg);
_clearAllItem();
m_bShow = true;
}
else
{
g_KeyQueueManager.DeleteMsg(eDoType_dialog_Password);
}
}
//------------------------------------------------------------------------------
/**
*/
void uiPasswordDlg::updateToolTip()
{
int iMouseX = Mouse::Instance()->GetMouseX();
int iMouseY = Mouse::Instance()->GetMouseY();
// 스킵처리
// 인터페이스에서 Dialog 바탕에서는 Mouse Over가 오지 않는다.
BOOL bMouseOver = FALSE;
for (POSTYPE a = 0; a < eDIALOG_PASSWORD_DLG_MAX; a++)
{
CControlWZ * pControl = getControl(a);
if(pControl)
{
RECT rc = pControl->GetSizeRect();
if (rc.left <= iMouseX && rc.right >= iMouseX)
{
if (rc.top <= iMouseY && rc.bottom >= iMouseY)
{
bMouseOver = TRUE;
break;
}
}
}
}
if ( !bMouseOver )
{
m_iTooltipStringCode = 0;
m_MouseOverObject.eMouseOverType = eMOUSE_OVER_MAX;
return;
}
if(m_iTooltipStringCode > 0)
{
uiToolTipMan* pUIMan = (uiToolTipMan*)g_InterfaceManager.GetUserInterfaceManager(UIMAN_TOOLTIP);
if(pUIMan)
{
pUIMan->RegisterTooltipForWareNInventoryLock(m_iTooltipStringCode);
pUIMan->SetTooltipDialogID(GetDialogKey());
}
}
}
//------------------------------------------------------------------------------
/**
*/
void uiPasswordDlg::OnUpdateSolarDialog()
{
updateToolTip();
if(!m_bShow)
this->ShowInterface(FALSE);
}
//------------------------------------------------------------------------------
/**
*/
void uiPasswordDlg::MessageProc( SI_MESSAGE * pMessage )
{
if (!_isEnable())
return;
TCHAR szMessage[INTERFACE_STRING_LENGTH] = {0, };
TCHAR szTemp[INTERFACE_STRING_LENGTH] = {0, };
switch( pMessage->eResultMsg )
{
case RT_MSG_LBUTTONCLICK:
{
int iCtrlMenu = getCtrlIDToPos( pMessage->dwCtrlID );
switch( iCtrlMenu )
{
case eDIALOG_PASSWORD_DLG_BTN_EXIT:
case eDIALOG_PASSWORD_DLG_BTN_CANCLE:
{
m_bShow = false;
if (m_fnPassword)
m_fnPassword(false);
}
break;
case eDIALOG_PASSWORD_DLG_BTN_1:
case eDIALOG_PASSWORD_DLG_BTN_2:
case eDIALOG_PASSWORD_DLG_BTN_3:
case eDIALOG_PASSWORD_DLG_BTN_4:
case eDIALOG_PASSWORD_DLG_BTN_5:
case eDIALOG_PASSWORD_DLG_BTN_6:
case eDIALOG_PASSWORD_DLG_BTN_7:
case eDIALOG_PASSWORD_DLG_BTN_8:
case eDIALOG_PASSWORD_DLG_BTN_9:
case eDIALOG_PASSWORD_DLG_BTN_0:
#ifdef _GS_ADD_PWD_X_BTN_1143
case eDIALOG_PASSWORD_DLG_BTN_X:
#endif//_GS_ADD_PWD_X_BTN_1143(대문자)
#ifdef _GS_ADD_PWD_X_BTN_1245
case eDIALOG_PASSWORD_DLG_BTN_X2:
#endif//_GS_ADD_PWD_X_BTN_1245(소문자)
{
TCHAR szPassword[3] = {0,};
int iCurIndex = iCtrlMenu - eDIALOG_PASSWORD_DLG_BTN_1;
m_pBtnPasswordNum[iCurIndex]->GetTextWZ(szPassword , 3);
int strCount = _tcslen(m_strPassword);
if(strCount < m_iPasswordMaxCount)
{
_tcscat(m_strPassword, szPassword);
GlobalFunc::SetCaptionByPasswordType(m_pTxtCtrlPassword, m_strPassword);
}
else
{
uiSystemMan * pSystemMan =
static_cast<uiSystemMan *>(g_InterfaceManager.GetUserInterfaceManager(UIMAN_SYSTEM));
if(pSystemMan)
{
switch(m_iCalledState)
{
case ePassWordCalledState_Inven:
{
uiInventoryMan* pInvenMan = GET_DIALOG_MANAGER( uiInventoryMan, UIMAN_INVENTORY );
assert (pInvenMan);
if(pInvenMan->GetPasswordState() == eInventoryDlgState_Setting_SSN
|| pInvenMan->GetPasswordState() == eInventoryDlgState_Check_Clear )
{
// 5586 입력범위를 초과하였습니다. 다시 입력해주시기 바랍니다.
g_InterfaceManager.GetInterfaceString( 5586, szMessage, INTERFACE_STRING_LENGTH );
pSystemMan->Sys_Verify(szMessage);
return;
}
}
break;
case ePassWordCalledState_WareHouse:
{
uiBankMan* pBankMan =
static_cast<uiBankMan *>(g_InterfaceManager.GetUserInterfaceManager(UIMAN_BANK));
assert (pBankMan);
if(pBankMan->GetPasswordState() == eBankDlgState_Setting_SSN
|| pBankMan->GetPasswordState() == eBankDlgState_Check_Clear )
{
// 5586 입력범위를 초과하였습니다. 다시 입력해주시기 바랍니다.
g_InterfaceManager.GetInterfaceString( 5586, szMessage, INTERFACE_STRING_LENGTH );
pSystemMan->Sys_Verify(szMessage);
return;
}
}
break;
default:
break;
}
// 비밀번호는 최소 4자에서 최대 8자까지 가능합니다.
// 비밀번호는 최소 %d자에서 최대 %d자까지 가능합니다.
g_InterfaceManager.GetInterfaceString( 5566, szMessage, INTERFACE_STRING_LENGTH );
Sprintf(szTemp, szMessage, m_iPasswordMinCount, m_iPasswordMaxCount);
pSystemMan->Sys_Verify(szTemp);
}
}
_SetPasswordKey();
}
break;
case eDIALOG_PASSWORD_DLG_BTN_CHGPASSWORD:
{
// 5552 정말 보호 기능을 [사용 안 함]상태로 변경하시겠습니까?
g_InterfaceManager.GetInterfaceString( 5552, szMessage, INTERFACE_STRING_LENGTH );
uiSystemMan * pSystemMan = (uiSystemMan *)g_InterfaceManager.GetUserInterfaceManager(UIMAN_SYSTEM);
if(pSystemMan)
{
switch(m_iCalledState)
{
case ePassWordCalledState_Inven:
pSystemMan->Sys_Confirm(szMessage ,GlobalFunc::_fn_uiInvenPassword_Clear);
break;
case ePassWordCalledState_WareHouse:
pSystemMan->Sys_Confirm(szMessage , GlobalFunc::_fn_uiBankPassword_Clear);
break;
default:
break;
}
}
}
break;
case eDIALOG_PASSWORD_DLG_BTN_BACKSPACE:
{
int strCount = _tcslen(m_strPassword);
if(strCount > 0)
{
m_strPassword[strCount-1] = '\0';
GlobalFunc::SetCaptionByPasswordType(m_pTxtCtrlPassword, m_strPassword);
}
}
break;
case eDIALOG_PASSWORD_DLG_BTN_CLEAR:
{
ZeroMemory(m_strPassword, sizeof(m_strPassword));
GlobalFunc::SetCaption(m_pTxtCtrlPassword, m_strPassword);
}
break;
case eDIALOG_PASSWORD_DLG_BTN_OK:
{
int strCount = _tcslen(m_strPassword);
if(strCount >= m_iPasswordMinCount && strCount <= m_iPasswordMaxCount)
{
m_bShow = false;
if (m_fnPassword)
m_fnPassword(true);
}
else
{
uiSystemMan * pSystemMan =
static_cast<uiSystemMan *>(g_InterfaceManager.GetUserInterfaceManager(UIMAN_SYSTEM));
if(pSystemMan)
{
// 비밀번호는 최소 %d자에서 최대 %d자까지 가능합니다.
g_InterfaceManager.GetInterfaceString( 5566, szMessage, INTERFACE_STRING_LENGTH );
Sprintf(szTemp, szMessage, m_iPasswordMinCount, m_iPasswordMaxCount);
pSystemMan->Sys_Verify(szTemp, NULL);
}
}
}
break;
}
}
break;
case RT_MSG_MOUSEOVER:
{
POSTYPE pos = getCtrlIDToPos( pMessage->dwCtrlID );
m_iTooltipStringCode = getTooltipString(pos);
}
break;
default:
{
SolarDialog::MessageProc( pMessage );
}
break;
}
}
//------------------------------------------------------------------------------
/**
*/
BOOL uiPasswordDlg::_isEnable()
{
if(GENERALPARAM->IsNet())
{
if (this->IsLock())
return FALSE;
if(!GetManager())
return FALSE;
return TRUE;
}
else
{
return TRUE;
}
}
//------------------------------------------------------------------------------
/**
*/
void uiPasswordDlg::_clearAllItem()
{
GlobalFunc::SetCaption(m_pTxtCtrlMessage, _T(""));
GlobalFunc::SetCaption(m_pTxtCtrlPassword, _T(""));
ZeroMemory(m_strPassword, sizeof(m_strPassword));
m_iPasswordMinCount = 0;
m_iPasswordMaxCount = 0;
}
//------------------------------------------------------------------------------
/**
*/
void uiPasswordDlg::SetPassword( TCHAR* szMessage, int iMinCount, int iMaxCount, BOOL bShowPassChgBtn, int iCalled )
{
_SetPsaawordMinMaxCount( iMinCount, iMaxCount );
_SetPasswordMessage( szMessage );
_SetPasswordKey();
_SetChgPassBtn( bShowPassChgBtn );
m_iCalledState = iCalled;
}
//------------------------------------------------------------------------------
/**
*/
void uiPasswordDlg::_SetPasswordMessage( TCHAR* szMessage )
{
if(m_pTxtCtrlMessage)
{
GlobalFunc::SetCaption(m_pTxtCtrlMessage, szMessage);
}
}
//------------------------------------------------------------------------------
/**
*/
void uiPasswordDlg::_SetChgPassBtn( BOOL bShowPassChgBtn )
{
if(m_pBtnPasswordChg)
{
if(bShowPassChgBtn)
m_pBtnPasswordChg->ShowWindowWZ(WZ_SHOW);
else
m_pBtnPasswordChg->ShowWindowWZ(WZ_HIDE);
}
}
//------------------------------------------------------------------------------
/**
*/
void uiPasswordDlg::_SetPasswordKey( )
{
m_randomizer.RandomShuffule();
for( int i = 0; i < ePASSWORD_NUM_DLG_NUM_MAX; ++i)
{
m_pBtnPasswordNum[i]->SetTextID(m_randomizer.m_vecRandom[i] + 1105);
#ifdef _GS_ADD_PWD_X_BTN_1143
if(ePASSWORD_NUM_DLG_NUM_X==m_randomizer.m_vecRandom[i])
{
m_pBtnPasswordNum[i]->SetTextID(1135);//1135:X(대문자)
}
#endif//_GS_ADD_PWD_X_BTN_1143(대문자)
#ifdef _GS_ADD_PWD_X_BTN_1245
if(ePASSWORD_NUM_DLG_NUM_X2==m_randomizer.m_vecRandom[i])
{
m_pBtnPasswordNum[i]->SetTextID(1624);//1624:x(소문자)
}
#endif//_GS_ADD_PWD_X_BTN_1245(소문자)
}
}
//------------------------------------------------------------------------------