#include "SunClientPrecompiledHeader.h" #include "ChatDialog.h" #include "InterfaceManager.h" #include "ChatMenu.h" #include "ChatPersonalOption.h" #include "GlobalFunc.h" #include "GameConst_Color.h" #include "uiChatMan/uiChatMan_def.h" #include "BattleLobby.h" #include "QuickContainer.h" #include "hero.h" #include "uichatman/uiChatMan.h" //---------------------------------------------------------------------------- /** */ ChatDialog::ChatDialog(InterfaceManager* pUIMan): uiBase(pUIMan), m_bAlwaysOnTop(0), m_pCurEditCtrl(NULL), m_pChatEditCtrl(NULL), m_pChatListCtrl(NULL) { for(int i=0; iDeleteItemAll(); m_pChatVScrollCtrl = (CCtrlVScrollWZ *)getControl( CHAT_VSCR ); m_pChatVScrollCtrl->SetScrollRangeWZ(0,m_ChatMsgList.size()); m_pChatVScrollCtrl->SetScrollPosWZ(0); } //---------------------------------------------------------------------------- /** */ VOID ChatDialog::Init( CDrawBase * pDrawBase ) { uiBase::Init(pDrawBase); memset(&m_VScrollInfo, 0, sizeof(m_VScrollInfo)); setChatType( CHAT_TYPE_GENERAL ); m_eChatPosition = eNORMAL; this->MoveDefaultPosition(); for( int i = 0; i< LIST_CONTROL_MAX ; i ++) { m_pListControlType[i] = (CCtrlListWZ * ) getControl(i); m_pListControlType[i]->SetColorSelBar(RGBA(0,0,0,0)); m_pListControlType[i]->SetColorSelBarOnText(RGBA(0,0,0,0)); m_pListControlType[i]->SetSellHeight(16); m_pListControlType[i]->SetStartLineGapTop(7); m_pListControlType[i]->SetTextKind(ETK_SHADOW); m_pListControlType[i]->SetStartLineGapTop(5); m_pListControlType[i]->SetStartLineGapLeft(3); m_pListControlType[i]->SetUseRButtonSelect(true); if( i != LIST_CONTROL_1X) { m_pListControlType[i]->ShowWindowWZ(WZ_HIDE); } } m_pChatListCtrl = m_pListControlType[LIST_CONTROL_1X]; // EditBox ¼³Á¤ m_pChatEditCtrl = (CCtrlDxIMEEditBox *)getControl( CHAT_EDIT ); if (m_pChatEditCtrl) { m_pCurEditCtrl = m_pChatEditCtrl; } m_pCurEditCtrl->SetLimitText(c_iLIMITED_EDIT_TEXT); for(int i = 0 ; i < eCHECK_MAX ; ++i ) { m_pCheckFilter[i] = (CCtrlButtonCheckWZ * ) getControl(i + CHAT_CHECK_ALL); } m_pCheckFilter[eCHECK_ALL]->SetCheckState(TRUE); m_pCheckFilter[eCHECK_PARTY]->SetCheckState(FALSE); m_pCheckFilter[eCHECK_GUILD]->SetCheckState(FALSE); m_pCheckFilter[eCHECK_PROPERTY]->SetCheckState(FALSE); #ifdef _K2P_ADD_WISPER_WINDOW m_pCheckFilter[eCHECK_WISPER]->SetCheckState(FALSE); #endif m_pCtrlCurChatType = (CCtrlImageStaticWZ *)getControl(CHAT_TEXT_IMAGE_SELECT_MENU); m_pButton[eCHAT_BTN_MENU] = static_cast(getControl(CHAT_MENU_BUTTON)); m_pButton[eCHAT_BTN_UP] = static_cast(getControl(CHAT_LIST_SIZE_UP)); m_pButton[eCHAT_BTN_DOWN] = static_cast(getControl(CHAT_LIST_SIZE_DOWN)); m_pMicButton = static_cast(getControl(CHAT_VOICE_CHAT_BUTTON)); //m_pButton[eCHAT_BTN_UP] = static_cast(getControl(CHAT_LIST_SIZE_UP)); m_pButton[eCHAT_BTN_DOWN]->ShowWindowWZ(WZ_HIDE); //TODO: À½¼ºÃ¤ÆÃ¿ë ÄÁÆ®·ÑÀÌ UI¿¡¼­ Á¦°ÅµÇ¸é ÀÌ Äڵ嵵 Á¦°ÅÇØ¾ß ÇÔ if(m_pMicButton) m_pMicButton->ShowWindowWZ(WZ_HIDE); // ¹öư ¾ø¾Ö¹ö¸®ÀÚ m_pChatEditCtrl->SetFontID(StrToWzID("mn12")); m_pChatEditCtrl->SetColorText( c_Chat_DefaultColor ); m_pChatEditCtrl->SetColorCaret( RGBA( 255, 255, 255, 255) ); m_pChatEditCtrl->SetColorSelText( RGBA( 0, 0, 255, 255) ); InitChatList(); m_dwTextColor[CHAT_TEXT_COLOR][ CHAT_TYPE_GENERAL ] = c_Chat_DefaultColor; m_dwTextColor[CHAT_TEXT_COLOR][ CHAT_TYPE_WHISPER ] = c_Chat_WhisperColor; m_dwTextColor[CHAT_TEXT_COLOR][ CHAT_TYPE_GUILD ] = c_Chat_GuildColor; m_dwTextColor[CHAT_TEXT_COLOR][ CHAT_TYPE_TRADE ] = c_Chat_TradeColor; m_dwTextColor[CHAT_TEXT_COLOR][ CHAT_TYPE_SYSTEM ] = c_Chat_SystemColor; m_dwTextColor[CHAT_TEXT_COLOR][ CHAT_TYPE_GM ] = c_Chat_GMColor; m_dwTextColor[CHAT_TEXT_COLOR][ CHAT_TYPE_GM_WHISPER ] = c_Chat_GMWhisperColor; m_dwTextColor[CHAT_TEXT_COLOR][ CHAT_TYPE_GM_NOTICE ] = c_Chat_GMColor; // GM °øÁö äÆÃ¸Þ½ÃÁö Ä÷¯ m_dwTextColor[CHAT_TEXT_COLOR][ CHAT_TYPE_HELP ] = c_Chat_HelpColor; m_dwTextColor[CHAT_TEXT_COLOR][ CHAT_TYPE_SHOUT ] = c_Chat_ShoutColor; m_dwTextColor[CHAT_TEXT_COLOR][ CHAT_TYPE_PARTY ] = c_Chat_PartyColor; m_dwTextColor[CHAT_TEXT_COLOR][ CHAT_TYPE_CHANNEL ] = c_Chat_ChannelColor; m_dwTextColor[CHAT_TEXT_COLOR][CHAT_TYPE_WORLD_SHOUT] = c_WorldShoutColor; m_dwTextColor[CHAT_BG_COLOR][CHAT_TYPE_WORLD_SHOUT] = WzColor_RGBA(255,255,255,0); m_dwTextColor[CHAT_TEXT_COLOR][CHAT_TYPE_SUPER_LOBBY_MASTER_SHOUT] = c_SuperLobbyMasterColor; m_dwTextColor[CHAT_BG_COLOR][CHAT_TYPE_SUPER_LOBBY_MASTER_SHOUT] = WzColor_RGBA(255,255,255,0); m_dwTextColor[CHAT_BG_COLOR][ CHAT_TYPE_PARTY ] = WzColor_RGBA(255,255,255,0); m_dwTextColor[CHAT_BG_COLOR][ CHAT_TYPE_GENERAL ] = WzColor_RGBA(255,255,255,0); m_dwTextColor[CHAT_BG_COLOR][ CHAT_TYPE_WHISPER ] = WzColor_RGBA(255,255,255,0); m_dwTextColor[CHAT_BG_COLOR][ CHAT_TYPE_GUILD ] = WzColor_RGBA(255,255,255,0); m_dwTextColor[CHAT_BG_COLOR][ CHAT_TYPE_TRADE ] = WzColor_RGBA(255,255,255,0); m_dwTextColor[CHAT_BG_COLOR][ CHAT_TYPE_SYSTEM ] = WzColor_RGBA(255,255,255,0); m_dwTextColor[CHAT_BG_COLOR][ CHAT_TYPE_GM ] = WzColor_RGBA(255,255,255,0); m_dwTextColor[CHAT_BG_COLOR][ CHAT_TYPE_GM_WHISPER ] = WzColor_RGBA(255,255,255,0); m_dwTextColor[CHAT_BG_COLOR][ CHAT_TYPE_HELP ] = WzColor_RGBA(255,255,255,0); m_dwTextColor[CHAT_BG_COLOR][ CHAT_TYPE_SHOUT ] = WzColor_RGBA(255,255,255,0); m_dwTextColor[CHAT_BG_COLOR][ CHAT_TYPE_CHANNEL ] = WzColor_RGBA(255,255,255,0); m_dwTextColor[CHAT_BG_COLOR][ CHAT_TYPE_GM_NOTICE ] = WzColor_RGBA(255,255,255,0); // GM °øÁö äÆÃ¸Þ½ÃÁö Ä÷¯ // _100416_LTJ_MODIFY_CHAT_FILTERING m_dwTextColor[CHAT_TEXT_COLOR][CHAT_TYPE_SLANG_FILTERING] = WzColor_RGBA(197, 47, 47, 255); m_dwTextColor[CHAT_BG_COLOR][CHAT_TYPE_SLANG_FILTERING] = WzColor_RGBA(255,255,255,0); m_dwTextColor[CHAT_TEXT_COLOR][CHAT_TYPE_SLANG_FILTERING_NOTICE] = c_Chat_SystemColor; m_dwTextColor[CHAT_BG_COLOR][CHAT_TYPE_SLANG_FILTERING_NOTICE] = WzColor_RGBA(255,255,255,0); // size set m_preShow=FALSE; // chat menu dialog ¸¦ ¹Þ¾Æ³õ´Â´Ù. m_pChatMenuDlg = GET_CAST_DIALOG(ChatMenuDialog, IM_CHAT_MANAGER::CHAT_MENU_DIALOG); m_pChatMenuDlg->SetChatDialog(this); m_iCurFilterMode = eLFM_NORMAL; m_pSystemChatDlg = GET_CAST_DIALOG(SystemChatDialog, IM_CHAT_MANAGER::SYSTEM_CHAT_DIALOG); m_pPropertyDlg = GET_CAST_DIALOG(ChatPropertyDialog, IM_CHAT_MANAGER::CHAT_PROPERTY_DIALOG); m_pCtrlCurChatType->SetTextID(eST_NORMAL_CHAT); m_eFilter[0] = GAMEOPTION->GetChatFilterNormal(); m_eFilter[1] = GAMEOPTION->GetChatFilterParty(); m_eFilter[2] = GAMEOPTION->GetChatFilterGuild(); m_eFilter[3] = GAMEOPTION->GetChatFilterChannel(); m_eFilter[4] = GAMEOPTION->GetChatFilterSystem(); #ifdef _K2P_ADD_WISPER_WINDOW m_eFilter[5] = GAMEOPTION->GetChatFilterWshiper(); #endif m_pPropertyDlg->SetPropertyDlgFilter(eLFM_NORMAL , m_eFilter[eLFM_NORMAL]); m_eCurChatControlType = LIST_CONTROL_1X; m_iMaxChatMsgLine = SHOW_DEFAULT_CHAT_MSG_LINE; m_icurrntStrInHistory = -1; g_slangFilter.SetReplaceString(PROGRAMPARAM->GetReplaceWordForSlangWord(), static_cast(PROGRAMPARAM->GetReplaceType())); is_channel_join_waitting_ = false; sprintf(channel_waitting_name_, ""); } //---------------------------------------------------------------------------- /** */ VOID ChatDialog::Release() { ExhaustChatMsgALL(); std::deque::iterator itr = m_WhisperSenderList.begin(); while( itr != m_WhisperSenderList.end() ) { SenderName * pSender = *itr; SAFE_DELETE(pSender); itr++; } m_WhisperSenderList.clear(); // äÆÃ È÷½ºÅ丮 ÇØÁ¦ TCHAR* pTemp = NULL; int iSize = m_vecChatHistory.size() - 1; for(int i = iSize; i >=0; i--) { pTemp = m_vecChatHistory[i]; SAFE_DELETE_ARRAY(pTemp); } m_vecChatHistory.clear(); // äÆÃ È÷½ºÅ丮 GAMEOPTION->SetChatFilterNormal(m_eFilter[0]); GAMEOPTION->SetChatFilterParty(m_eFilter[1]); GAMEOPTION->SetChatFilterGuild(m_eFilter[2]); GAMEOPTION->SetChatFilterChannel(m_eFilter[3]); GAMEOPTION->SetChatFilterSystem( m_eFilter[4]); #ifdef _K2P_ADD_WISPER_WINDOW GAMEOPTION->SetChatFilterWshiper(m_eFilter[5]); #endif GAMEOPTION->Save(); } //---------------------------------------------------------------------------- /** */ VOID ChatDialog::OnUpdateSolarDialog() { AutoFill(); updateTooltip(); updateScrollPosition(); updateWhisperSelectInput(); ShowChatMsgInHistory(); updateWheelScroll(); // äÆÃ ÁßÀÎ Áö Check m_bInputChatingMessage = BOOL( _tcslen( this->GetCurChatMessage() ) ); } //---------------------------------------------------------------------------- /** */ VOID ChatDialog::OnShowWindow( BOOL val ) { if (val) { m_bLockScroll = FALSE; m_pCheckFilter[eCHECK_LOCK_SCROLL]->SetCheckState(FALSE); m_iWhisperDequeIndex = m_WhisperSenderList.size(); m_pChatEditCtrl = (CCtrlDxIMEEditBox *) getControl(CHAT_EDIT); this->InitChatInfo(); this->SetFocusChatEdit(); m_bFirstEnter = TRUE; clearEdit(); CCtrlVScrollWZ * pScroll = (CCtrlVScrollWZ *)getControl( CHAT_VSCR ); if( pScroll) { int iMax = ( m_pChatListCtrl->GetListRowCnt() - (m_iMaxChatMsgLine) ) < 0 ? 0 : m_pChatListCtrl->GetListRowCnt() - (m_iMaxChatMsgLine); pScroll->SetScrollRangeWZ(0,iMax); } updateDialogSize(); m_icurrntStrInHistory = -1; keyMsg msg; ZeroMemory(&msg,sizeof(msg)); msg.dwType = eDoType_dialog_chat; msg.wParam = InterfaceManager::DIALOG_CHAT; msg.DoSomething = GlobalFunc::DoShowWindow; g_KeyQueueManager.PushBack(msg); BattleLobby * pBattleLobby = (BattleLobby *)g_InterfaceManager.GetDialog(InterfaceManager::DIALOG_BATTLE_LOBBY); //gs_bug_fix:¹èƲÁ¸ÀÌ ·ÎºñâÀÌ ¿­¸°»óÅ¿¡¼­´Â Űť¸Þ´ÏÀú¿¡ »ðÀÔÇÏÁö¸»ÀÚ // esc¸¦ ´­·¯µÎ äÆÃâÀÌ ´ÝÈ÷Áö¾Ê°Ô ÇϱâÀ§ÇØ if(pBattleLobby && pBattleLobby->IsVisibleWindow()) { g_KeyQueueManager.DeleteMsg(eDoType_dialog_chat); } if (g_pHero != NULL) { uiChatMan* char_man = GET_DIALOG_MANAGER(uiChatMan, UIMAN_CHAT); QuickContainer* quick_container = g_pHero->GetQuickContainer(); if (char_man != NULL && quick_container != NULL) { if (quick_container->double_size() == true) { char_man->MoveChatDialog(2); } else { char_man->MoveChatDialog(1); } } } } else { #if defined(_NA_006774_20130617_ARRANGE_UNNECESSARY_RESOURCES) MoveDefaultPosition(); #endif // _NA_006774_20130617_ARRANGE_UNNECESSARY_RESOURCES CCtrlVScrollWZ * pScroll = (CCtrlVScrollWZ *)getControl( CHAT_VSCR ); this->m_pChatMenuDlg->ShowWindow(FALSE); this->SetAlwaysOnTop(FALSE); g_Input.ResetKeyBuffer(); g_Input.Reset(); CloseOptionDialogs(); m_bFirstEnter = FALSE; g_KeyQueueManager.DeleteMsg(eDoType_dialog_chat); } } //---------------------------------------------------------------------------- /** */ void ChatDialog::CloseOptionDialogs() { uiBase* pDlg = GET_DIALOG(IM_CHAT_MANAGER::CHAT_PERSONAL_OPTION); if(pDlg && pDlg->IsVisibleWindow()) { pDlg->ShowWindow(FALSE); } pDlg = GET_DIALOG(IM_CHAT_MANAGER::CHAT_PROPERTY_DIALOG); if (pDlg && pDlg->IsVisibleWindow()) { pDlg->ShowWindow(FALSE); } if (pDlg && pDlg->IsVisibleWindow()) { pDlg = GET_DIALOG(IM_CHAT_MANAGER::CHAT_MENU_DIALOG); } }