#include "stdafx.h" #include #include "KUIListControl.h" #include "KUIControlStatic.h" #include "KUIControlScroll.h" #include "SGameManager.h" #include "SGameMessage.h" //#include "SGameMessageUI.h" #include "SMessengerMgr.h" #include "SStringDB.h" #include "SJobDB.h" #include "SUIGuildApplicantTab.h" SUIGuildApplicantTab::SUIGuildApplicantTab( SGameManager * pGameManager ) : SUIWnd( pGameManager ), m_pListGuild( NULL ), m_pScrollBar( NULL ), m_pSelectedControl( NULL ), m_nScrollPos( 0 ) { } SUIGuildApplicantTab::~SUIGuildApplicantTab() { Release(); } void SUIGuildApplicantTab::Release() { SAFE_DELETE( m_pListGuild ); } bool SUIGuildApplicantTab::InitControls( KPoint kPos ) { // 선택된 아이템의 활성화 비쥬얼용 컨트롤. m_pSelectedControl = GetChild( "select_orange" ); m_pSelectedControl->SetShow( false ); // // ListControl 생성. // SAFE_DELETE( m_pListGuild ); m_pListGuild = new KUIListControl( this, "listcontrol01", "header_base", "item_base", 10 ); //// Header column m_pListGuild->AddStringHeaderColumn( "header_button_connection_state" ); m_pListGuild->AddStringHeaderColumn( "header_button_job" ); m_pListGuild->AddStringHeaderColumn( "header_button_level" ); m_pListGuild->AddStringHeaderColumn( "header_button_id" ); m_pListGuild->AddStringHeaderColumn( "header_button_agree" ); m_pListGuild->AddStringHeaderColumn( "header_button_refusal" ); // Item column m_pListGuild->AddStringItemColumn( "item_icon_connection_state" ); m_pListGuild->AddStringItemColumn( "header_icon_job" ); m_pListGuild->AddStringItemColumn( "item_static_level" ); m_pListGuild->AddStringItemColumn( "item_static_id" ); m_pListGuild->AddStringItemColumn( "item_button_agree" ); m_pListGuild->AddStringItemColumn( "item_button_refusal" ); // Create m_pListGuild->Create(); //// nui에서 설정된 윈도우 위치좌표. //KRect rt = this->GetRect(); //kPos.x = rt.left; kPos.y = rt.top; GetChild( "mark_sort_up_02" )->SetShow( false ); GetChild( "mark_sort_up_03" )->SetShow( false ); GetChild( "mark_sort_up_01" )->SetShow( false ); GetChild( "mark_sort_up_04" )->SetShow( false ); // 스크롤바. // 2010.09.20 - prodongi m_pScrollBar = dynamicCast< KUIControlVScrollEx* >(GetChild( "scrollbar_guild_list" )); //m_pScrollBar = static_cast< KUIControlVScroll* >(GetChild( "scrollbar_guild_list" )); return SUIWnd::InitControls( kPos ); } void SUIGuildApplicantTab::OnNotifyUIWindowOpen( bool bOpen, bool bLimitWnd) { } void SUIGuildApplicantTab::ProcMsgAtStatic( SGameMessage* pMsg ) { switch(pMsg->nType) { case MSG_CHANGE_NAME : { //RefreshMember( m_nScrollPos ); //RefreshStatic(); } break; case IMSG_UI_SEND_DATA: { SIMSG_UI_SEND_DATA *pData = (SIMSG_UI_SEND_DATA *)pMsg; //if( this->IsShow() ) //{ // if( pData->m_strString == "guild_update" ) // { // // 길드원 업데이트. // UpdateGuildMember(); // } //} UpdateGuildMember(); // AziaMafia UpdateGuildMember(); } break; } } void SUIGuildApplicantTab::PumpUpMessage( LPCSTR lpszControlID, DWORD nMessage, DWORD lparam, DWORD wparam ) { if( this->IsShow() ) { switch( nMessage ) { case KUI_MESSAGE::KBUTTON_CLICK : // close. if( !::_stricmp( lpszControlID, "button_close" ) ) m_pGameManager->PostMsgAtDynamic( new SIMSG_SHOW_UIWINDOW( SIMSG_TOGGLE_UIWINDOW::UIWINDOW_GUILD_MAINWND, false ) ); break; // Scroll case KUI_MESSAGE::KSCROLL_SELECT : { m_nScrollPos = max( (int)lparam, 0 ); // 스크롤이 계속 내려가는걸 방지. int nMembersSize = m_GuildMgr.GetMemberCount(); if( ( nMembersSize + m_pListGuild->GetExtendItemCount() ) < m_pListGuild->GetListConut() ) // + m_pListGuild->GetExtendItemCount() ) ) m_nScrollPos = 0; // 길드원정보 재설정. RefreshListMember( m_nScrollPos ); // 스크롤바 조절. RefreshScrollbar(); // 선택된 아이템 활성화 비쥬얼 처리. //RevitalizeSelectItem(); } break; case KUI_MESSAGE::KLIST_ITEM_LBUTTON_UP : break; case KUI_MESSAGE::KLIST_ITEM_LBUTTON_DOWN : // ** MSG_LISTCONTROL msg = *( (MSG_LISTCONTROL *)( &pumpMsg ) ); { MSG_LISTCONTROL msg = *( (MSG_LISTCONTROL *)( &lparam ) ); // // ListControl 을 선택. KUIControl * pControl; if( m_pListGuild && m_pListGuild->GetControl( pControl, ( ITEMTYPE )msg.type, msg.itemIndex, msg.columnIndex ) ) { // // 헤더 // if( ITEMTYPE::TYPE_HEADER_Base == msg.type || ITEMTYPE::TYPE_HEADER_Column == msg.type ) { } // // 아이템 // else if( ITEMTYPE::TYPE_ITEM_Base == msg.type || ITEMTYPE::TYPE_ITEM_Column == msg.type ) { //-------------------------------------- // 선택된 아이템 활성화. // 아이템 상태배열에 선택활성화 여부 설정. m_pListGuild->SetSelectItem( m_nScrollPos, msg.itemIndex ); // 선택된 아이템 활성화 비쥬얼 처리. //RevitalizeSelectItem(); //--------------------------------------- } }// if } break; case KUI_MESSAGE::KLIST_ITEM_LBUTTON_DBCLICK : break; case KUI_MESSAGE::KLIST_ITEM_RBUTTON_UP : break; case KUI_MESSAGE::KLIST_ITEM_RBUTTON_DOWN : break; } SUIWnd::PumpUpMessage( lpszControlID, nMessage, lparam, wparam ); } } // 스크롤바 설정. void SUIGuildApplicantTab::RefreshScrollbar() { if( m_pScrollBar && m_pListGuild ) { m_pScrollBar->SetScrollRange( m_pListGuild->GetListConutMAX(), m_GuildMgr.GetMemberCount() ); } } DWORD SUIGuildApplicantTab::OnMouseMessage(DWORD dwMessage, int x, int y) { if( dwMessage == KLBUTTON_DOWN ) { // ListControl 의 Mouse Event 처리. if( m_pListGuild ) m_pListGuild->OnMouseMessage( dwMessage, x, y ); } return SUIWnd::OnMouseMessage(dwMessage, x, y); } void SUIGuildApplicantTab::RefreshListMember( int nScroll ) { if( m_pListGuild == NULL ) return; // 길드원 정보 배열. vector< SPlayerSlot * > arrGuildMembers = m_GuildMgr.GetMemberList(); int nMembersSize = 0; // arrGuildMembers.size(); 길드신청자 리스트로 바뀌어야한다. 현재 미구현. 2010.04.21 int crrSize = m_pListGuild->GetListConut(); // 리스트 현재 개수. int maxSize = m_pListGuild->GetListConutMAX(); // 리스트 최대개수. SPlayerSlot * pPlayer; int memberIndex = 0; bool bIsLogin = false; for( int i=0; iGetItem( i ); if( pItem ) { // index가 길드맴버수 이하인동안 Refresh. if( i + nScroll < nMembersSize ) { // 길드원. memberIndex = i + nScroll; pPlayer = arrGuildMembers[ memberIndex ]; bIsLogin = pPlayer->IsLogin(); // 각 컨트롤에 정보 맵핑. DataMapping( pItem, pPlayer ); ////------------------------------- //// ** 해당 아이템을 확장 or 축소(원본크기) 한다. m_pListGuild->SetResize( i, memberIndex, 1 ); } } }// for ////------------------------------- //// ** 리스트정보 최종 업데이트. m_pListGuild->RefreshList( m_nScrollPos ); } // 멤버리스트 초기화. void SUIGuildApplicantTab::InitMemberList() { // 선택된 아이템의 활성화 비쥬얼용 컨트롤. if( m_pSelectedControl ) m_pSelectedControl->SetShow( false ); // 리스트의 각 아이템의 상태정보. if( m_pListGuild ) { int size = m_GuildMgr.GetMemberCount(); m_pListGuild->RefreshItemState( size ); } // Scroll bar RefreshScrollbar(); // 길드원정보 갱신. RefreshListMember( m_nScrollPos ); } // 길드원 업데이트. void SUIGuildApplicantTab::UpdateGuildMember() { // 멤버리스트 초기화. InitMemberList(); } //강제 프로세스 void SUIGuildApplicantTab::ForcedProcess(DWORD dwTime) { m_nScrollPos = 0; // scroll bar의 변경 정보. //// 테스트용. //static bool bFirst = true; //if( bFirst ) //{ // for( int i=0; i<30; ++i ) // this->m_GuildMgr.AddMember( CStringUtil::StringFormat( "캬캬캬캬캬캬캬캬?캬캬캬캬캬%03d", i ).c_str() ); // bFirst = false; //} // 맴버리스트 초기화. InitMemberList(); } // 선택한 아이템의 활성화 비쥬얼 처리. bool SUIGuildApplicantTab::SelectedControl( KUIControl * pSelectionControl ) { if( m_pSelectedControl && pSelectionControl ) { if( pSelectionControl->IsShow() ) { KRect rtSelCtrl = pSelectionControl->GetRect(); // 위치 이동. m_pSelectedControl->MovePos( rtSelCtrl.left, rtSelCtrl.top ); // 보임. m_pSelectedControl->SetShow( true ); return true; } } return false; } // 선택된 아이템 활성화 비쥬얼 처리. void SUIGuildApplicantTab::RevitalizeSelectItem() { bool bShow = false; // 선택된 아이템 인덱스. int selectIndex = m_pListGuild->GetSelectedIndex(); // 보이는 마지막 아이템의 인덱스. int endIndex = m_pListGuild->GetIndexOfVisibleEndItem() + m_nScrollPos; if( selectIndex > -1 && endIndex >= selectIndex ) { selectIndex -= m_nScrollPos; if( selectIndex > -1 ) { KUIListItem * pItem = m_pListGuild->GetItem( selectIndex ); if( pItem ) { // 해당 컨트롤 위치에 활성화 컨트롤 출력. bShow = SelectedControl( pItem->GetBaseControl() ); } } } // 숨김. if( !bShow ) m_pSelectedControl->SetShow( false ); } // ListControl 의 해당 아이템열의 각 컨트롤에 Player의 정보 맵핑 void SUIGuildApplicantTab::DataMapping( KUIListItem * pItem, SPlayerSlot * pPlayer ) { if( pItem && pPlayer ) { KUIControl * pControl; bool bIsLogin = pPlayer->IsLogin(); // 접속 컨트롤. if( pItem->GetControl( pControl, "item_static_connection_state" ) ) { KUIControlStatic* ctrl = dynamicCast< KUIControlStatic * >( pControl ); if (ctrl) ctrl->SetAniName( ( bIsLogin ? "common_mark_titanium_online" : "common_mark_titanium_offline") ); } // 직업 컨트롤. if( pItem->GetControl( pControl, "item_icon_member_job_icon" ) ) { string jobName = GetJobDB().GetJobIconName( pPlayer->GetJobID() ); KUIControlStatic* ctrl = dynamicCast< KUIControlStatic * >( pControl ); if (ctrl) ctrl->SetAniName( ( bIsLogin ? jobName.c_str() : jobName.append("_off").c_str() ) ); } // Level 컨트롤 if( pItem->GetControl( pControl, "item_static_member_level" ) ) { pControl->SetCaption( CStringUtil::StringFormat( ( bIsLogin ? "%s%d" : "%s<#4d4d4d>%d" ), S(6425), pControl->GetFontSize(), pPlayer->GetLevel() ).c_str() ); } // 아이디 컨트롤 if( pItem->GetControl( pControl, "item_static_member_name" ) ) { pControl->SetCaption( CStringUtil::StringFormat( ( bIsLogin ? "%s%s" : "%s<#4d4d4d>%s" ), S(6425), pControl->GetFontSize(), pPlayer->GetName() ).c_str() ); } if( pItem->GetControl( pControl, "item_static_member_point" ) ) { pControl->SetCaption( CStringUtil::StringFormat( ( bIsLogin ? "%s<#675359>%s" : "%s<#4d4d4d>%s" ), S(6425), pControl->GetFontSize(), expToString( pPlayer->GetPoint() ).c_str() ).c_str() ); } // 메모텍스트 if( pItem->GetControl( pControl, "guild_memo_text_01" ) ) { pControl->SetCaption( CStringUtil::StringFormat( "%s", "메모" ).c_str() ); } } }