1906 lines
58 KiB
C++
1906 lines
58 KiB
C++
|
|
#include "stdafx.h"
|
|
#include <toolkit/XStringUtil.h>
|
|
#include <toolkit/nsl.h>
|
|
#include <toolkit/nsluni.h>
|
|
#include "KUIControlButton.h"
|
|
#include "KUIListControl.h"
|
|
#include "KUIControlStatic.h"
|
|
#include "KUIControlScroll.h"
|
|
#include "SGameManager.h"
|
|
#include "SGameMessage.h"
|
|
//#include "SGameMessageUI.h"
|
|
#include "SMessengerMgr.h"
|
|
#include "SPlayerInfoMgr.h"
|
|
#include "SStringDB.h"
|
|
#include "SJobDB.h"
|
|
#include "SUIMemberPopupWnd.h"
|
|
#include "SUIGuildMemberTab.h"
|
|
|
|
namespace
|
|
{
|
|
const int g_MemoDecoSize = sizeof( "<size:8><#4d4d4d><hcenter><left>" );
|
|
|
|
///< 0:LogOff | 1:LogIn | 2:친구목록에서 차단당한 상태(내가 차단한게 아니고 MemberInfo 정보 당사자가 나를 차단한 경우)
|
|
char g_StrConnectIcon[][40] = { "common_mark_titanium_offline", "common_mark_titanium_block", "common_mark_titanium_online" };
|
|
|
|
|
|
|
|
////
|
|
//// 정렬조건. 0 온라인, 1 직업, 2 레벨, 3 아이디
|
|
//bool compConn( SPlayerSlot * p1, SPlayerSlot * p2 ){
|
|
// return p1->GetLogin() > p2->GetLogin();
|
|
//}
|
|
|
|
//bool compJop( SPlayerSlot * p1, SPlayerSlot * p2 ){
|
|
// return p1->GetJobID() > p2->GetJobID();
|
|
//}
|
|
|
|
//bool compLevel( SPlayerSlot * p1, SPlayerSlot * p2 ){
|
|
// return p1->GetLevel() > p2->GetLevel();
|
|
//}
|
|
|
|
//bool compName( SPlayerSlot * p1, SPlayerSlot * p2 ){
|
|
// return std::string( p1->GetName() ) > std::string( p2->GetName() );
|
|
//}
|
|
|
|
//// 정렬용 함수포인터 배열.
|
|
//typedef bool (* fpComp)( SPlayerSlot *, SPlayerSlot * );
|
|
//fpComp g_arrComp[ MAX_BTN_SORT_STATE ] = { compConn, compJop, compLevel, compName };
|
|
|
|
|
|
char g_arrStrSortIcon[][MAX_BTN_SORT_STATE_SIZE][60] = {
|
|
{ "common_button_titanium_line_nomal_online", "common_button_titanium_line_up_online", "common_button_titanium_line_down_online" },
|
|
{ "common_button_titanium_line_nomal_job", "common_button_titanium_line_up_job", "common_button_titanium_line_down_job" },
|
|
|
|
/*{ "common_button_titanium_line_nomal", "common_button_titanium_line_up", "common_button_titanium_line_down" },
|
|
{ "common_button_titanium_line_nomal", "common_button_titanium_line_up", "common_button_titanium_line_down" }, */
|
|
|
|
{ "common_button_titanium_line_nomal", "common_button_titanium_line_nomal", "common_button_titanium_line_nomal" },
|
|
{ "common_button_titanium_line_nomal", "common_button_titanium_line_nomal", "common_button_titanium_line_nomal" },
|
|
{ "common_button_titanium_line_nomal", "common_button_titanium_line_nomal", "common_button_titanium_line_nomal" },
|
|
};
|
|
|
|
|
|
//
|
|
// 정렬조건. 0 온라인, 1 직업, 2 레벨, 3 아이디
|
|
// down 내림차순, up 오름차순
|
|
//
|
|
bool compConn_down( SPlayerSlot * p1, SPlayerSlot * p2 ){
|
|
return p1->GetLogin() > p2->GetLogin();
|
|
}
|
|
bool compConn_up( SPlayerSlot * p1, SPlayerSlot * p2 ){
|
|
return p1->GetLogin() < p2->GetLogin();
|
|
}
|
|
|
|
bool compJop_down( SPlayerSlot * p1, SPlayerSlot * p2 ){
|
|
return p1->GetJobID() > p2->GetJobID();
|
|
}
|
|
bool compJop_up( SPlayerSlot * p1, SPlayerSlot * p2 ){
|
|
return p1->GetJobID() < p2->GetJobID();
|
|
}
|
|
|
|
bool compLevel_down( SPlayerSlot * p1, SPlayerSlot * p2 ){
|
|
return p1->GetLevel() > p2->GetLevel();
|
|
}
|
|
bool compLevel_up( SPlayerSlot * p1, SPlayerSlot * p2 ){
|
|
return p1->GetLevel() < p2->GetLevel();
|
|
}
|
|
|
|
bool compName_down( SPlayerSlot * p1, SPlayerSlot * p2 ){
|
|
return std::string( p1->GetName() ) > std::string( p2->GetName() );
|
|
}
|
|
bool compName_up( SPlayerSlot * p1, SPlayerSlot * p2 ){
|
|
return std::string( p1->GetName() ) < std::string( p2->GetName() );
|
|
}
|
|
|
|
bool compPoint_down( SPlayerSlot * p1, SPlayerSlot * p2 ){
|
|
return p1->GetPoint() > p2->GetPoint();
|
|
}
|
|
bool compPoint_up( SPlayerSlot * p1, SPlayerSlot * p2 ){
|
|
return p1->GetPoint() < p2->GetPoint();
|
|
}
|
|
|
|
// 정렬용 함수포인터 배열.
|
|
typedef bool (* fpComp_down)( SPlayerSlot *, SPlayerSlot * );
|
|
fpComp_down g_arrComp_down[ MAX_BTN_SORT_STATE_SIZE ] = { compConn_down, compJop_down, compLevel_down, compName_down, compPoint_down };
|
|
|
|
typedef bool (* fpComp_up)( SPlayerSlot *, SPlayerSlot * );
|
|
fpComp_up g_arrComp_up[ MAX_BTN_SORT_STATE_SIZE ] = { compConn_up, compJop_up, compLevel_up, compName_up, compPoint_up };
|
|
|
|
|
|
}
|
|
|
|
|
|
// bintitle 2010.04.09
|
|
// 해당 컨트롤의 영역만큼 문자열을 자르고, 마지막 문자는 '..' 으로 변환하여 반환한다.
|
|
void CuttingText( KUIControl * pControl, std::string& rText )
|
|
{
|
|
std::vector<std::string> lineList;
|
|
//#ifdef _COUNTRY_ME_
|
|
// pControl->SplitLine(lineList, rText, KFontManager::KDEFAULT_FONT_NAME, fontSize );
|
|
//#else
|
|
// pControl->SplitLine(lineList, rText, strFont, fontSize, std::string("font_02") == strFont ? true : false, fontSize > 0 ? true : false );
|
|
//#endif
|
|
|
|
pControl->SplitLine(lineList, rText );
|
|
|
|
if( lineList.size() > 1 )
|
|
{
|
|
std::wstring wstr = nsl::uni::conv(lineList[0].c_str());
|
|
#ifdef _COUNTRY_ME_
|
|
wstr.erase( wstr.begin() );
|
|
wstr.erase( wstr.begin() );
|
|
std::wstring comma = nsl::uni::conv("..");
|
|
wstr = comma + wstr;
|
|
#else
|
|
wstr.erase(wstr.end()-1);
|
|
wstr.erase(wstr.end()-1);
|
|
wstr += L"..";
|
|
#endif
|
|
std::string str = nsl::uni::conv(wstr.c_str());
|
|
rText = str;
|
|
}
|
|
|
|
lineList.clear();
|
|
}
|
|
|
|
|
|
|
|
SUIGuildMemberTab::SUIGuildMemberTab( SGameManager * pGameManager ) :
|
|
SUIWnd( pGameManager ),
|
|
m_pScrollBar( NULL ),
|
|
m_pListGuild( NULL ),
|
|
m_pSelectedControl( NULL ),
|
|
m_pMemberPopupWnd( NULL ),
|
|
m_pTabSelectControl( NULL ),
|
|
m_pSelectedControl_Red( NULL ),
|
|
m_pSelectedControl_Orange( NULL ),
|
|
m_nPrevScrollPos( 0 ), m_nScrollPos( 0 ),
|
|
m_bExtendAll( 0 ),
|
|
m_nSortCondition( 0 ),
|
|
m_bManageMode( false ),
|
|
m_bMasterMode( false ),
|
|
m_bFirstOpen( false ),
|
|
m_bFirstDataMapping( true ),
|
|
m_beforeGuildMember( -1 ),
|
|
m_nRefresh( GUILD_UPDATE::GUILD_UPDATE_NONE ),
|
|
m_bUIRefresh( true )
|
|
// m_bOpenMemberPopup( false )
|
|
{
|
|
|
|
}
|
|
|
|
|
|
SUIGuildMemberTab::~SUIGuildMemberTab()
|
|
{
|
|
Release();
|
|
}
|
|
|
|
void SUIGuildMemberTab::Release()
|
|
{
|
|
m_pScrollBar = NULL;
|
|
SAFE_DELETE( m_pListGuild );
|
|
}
|
|
|
|
void SUIGuildMemberTab::PumpUpMsgDBClick( DWORD lparam )
|
|
{
|
|
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_ITEM_Base == msg.type || ITEMTYPE::TYPE_ITEM_Column == msg.type )
|
|
{
|
|
// 귓말하기.
|
|
const char * pName = GetSelectedMemberName( msg.itemIndex );
|
|
|
|
if( pName )
|
|
m_pGameManager->PostMsgAtDynamic( new SIMSG_UI_WHISPER( SIMSG_TOGGLE_UIWINDOW::UIWINDOW_CHATTING, pName ) );
|
|
}
|
|
}
|
|
}
|
|
void SUIGuildMemberTab::PumpUpMsgLBtnClick_V( DWORD lparam )
|
|
{
|
|
PumpUpMsgLBtnClick(lparam);
|
|
}
|
|
|
|
void SUIGuildMemberTab::PumpUpMsgLBtnClick( DWORD lparam )
|
|
{
|
|
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 )
|
|
{
|
|
if( !::_stricmp( pControl->GetID(), "header_button_unfold" ) )
|
|
{
|
|
// 확장버튼 토글.
|
|
m_bExtendAll ^= true;
|
|
m_pListGuild->SetResizeAll( m_bExtendAll );
|
|
|
|
// 버튼이미지 변경.
|
|
dynamicCast< KUIControlSimpleButton * >( pControl )->SetAniName(
|
|
m_bExtendAll ? "common_button_titanium_list_fold" : "common_button_titanium_list_unfold" );
|
|
|
|
// 축소시 스크롤위치 초기화.
|
|
if( !m_bExtendAll )
|
|
m_nScrollPos = 0;
|
|
|
|
//// 확장된 만큼 스크롤바 조절.
|
|
//RefreshScrollbarExtend();
|
|
|
|
// 길드원정보 재설정.
|
|
RefreshListMember( m_nScrollPos );
|
|
|
|
// 확장된 만큼 스크롤바 조절.
|
|
RefreshScrollbarExtend();
|
|
|
|
// 선택된 아이템 활성화 비쥬얼 처리.
|
|
RevitalizeSelectItem();
|
|
|
|
}
|
|
|
|
else if( !::_stricmp( pControl->GetID(), "header_static_connection_state" ) )
|
|
{
|
|
m_nSortCondition = 0;
|
|
SortMemberList( ); // 리스트 정렬.
|
|
}
|
|
else if( !::_stricmp( pControl->GetID(), "header_icon_member_job_icon" ) )
|
|
{
|
|
m_nSortCondition = 1;
|
|
SortMemberList( ); // 리스트 정렬.
|
|
}
|
|
else if( !::_stricmp( pControl->GetID(), "header_static_member_level" ) )
|
|
{
|
|
m_nSortCondition = 2;
|
|
SortMemberList( ); // 리스트 정렬.
|
|
}
|
|
else if( !::_stricmp( pControl->GetID(), "header_static_member_name" ) )
|
|
{
|
|
m_nSortCondition = 3;
|
|
SortMemberList( ); // 리스트 정렬.
|
|
}
|
|
else if( !::_stricmp( pControl->GetID(), "item_static_member_point" ) )
|
|
{
|
|
m_nSortCondition = 4;
|
|
SortMemberList( ); // 리스트 정렬.
|
|
}
|
|
|
|
|
|
//// 스크롤.
|
|
//else if( !::_stricmp( pControl->GetID(), "button_list_default_01" ) )
|
|
//{
|
|
// m_nScrollPos = 0;
|
|
// RefreshListMember( m_nScrollPos ); // 길드원정보 재설정.
|
|
// m_pScrollBar->_CalScrollBarRect
|
|
//}
|
|
}
|
|
//
|
|
// 아이템
|
|
//
|
|
else if( ITEMTYPE::TYPE_ITEM_Base == msg.type || ITEMTYPE::TYPE_ITEM_Column == msg.type )
|
|
{
|
|
//--------------------------------------
|
|
// 선택된 아이템 활성화.
|
|
|
|
m_pListGuild->SetSelectItem( m_nScrollPos, msg.itemIndex ); // 아이템 상태배열에 선택활성화 여부 설정.
|
|
RevitalizeSelectItem(); // 선택된 아이템 활성화 비쥬얼 처리.
|
|
//---------------------------------------
|
|
|
|
//--------------------
|
|
// MODE
|
|
if( m_bManageMode ) // 길드원 관리 모드
|
|
{
|
|
KUIControl * pControlClass;
|
|
m_pListGuild->GetItem( msg.itemIndex )->GetControl( pControlClass, "text_guild_class_01" );
|
|
MemberManageMode( GetSelectedMemberName( msg.itemIndex ), pControlClass->GetCaption() );
|
|
|
|
}
|
|
|
|
else if( m_bMasterMode ) // 길드마스터 모드
|
|
{
|
|
// GuildMasterMode( GetSelectedMemberName( msg.itemIndex ) );
|
|
KUIControl * pControlClass;
|
|
m_pListGuild->GetItem( msg.itemIndex )->GetControl( pControlClass, "text_guild_class_01" );
|
|
GuildMasterMode( GetSelectedMemberName( msg.itemIndex ), pControlClass->GetCaption() );
|
|
}
|
|
|
|
/// 2011.05.24 안쓰여서 삭제 함 - prodongi
|
|
/*
|
|
// 우클릭 유도버튼.
|
|
if( !::_stricmp( pControl->GetID(), "button_point_02" ) )
|
|
{
|
|
// 멤버관련 팝업.
|
|
ShowMemberPopup( pControl->GetRect().left + 3, pControl->GetRect().top + 3, GetSelectedMemberName( msg.itemIndex ) );
|
|
|
|
////--------------------------------------
|
|
//// 선택된 아이템 활성화.
|
|
//
|
|
//m_pListGuild->SetSelectItem( m_nScrollPos, msg.itemIndex ); // 아이템 상태배열에 선택활성화 여부 설정.
|
|
//RevitalizeSelectItem(); // 선택된 아이템 활성화 비쥬얼 처리.
|
|
////---------------------------------------
|
|
|
|
}
|
|
*/
|
|
else if( !::_stricmp( pControl->GetID(), "item_button_unfold" ) )
|
|
{
|
|
// 펼침, 닫힘.
|
|
m_pListGuild->SetResizeWidth( msg.type, msg.itemIndex, msg.columnIndex, 2.0f, m_nScrollPos );
|
|
|
|
// 헤더의 전체확장버튼.
|
|
KUIControl * pControlBtnExtendAll;
|
|
if( m_pListGuild->GetControl( pControlBtnExtendAll, ITEMTYPE::TYPE_HEADER_Column, 0, "header_button_unfold" ) )
|
|
{
|
|
// 전체 아이템의 확장 비확장여부.
|
|
int nAllItemExtendState = m_pListGuild->GetIsAllExtend();
|
|
|
|
/*if( nAllItemExtendState == ITEMEXTENDSTATE::ITEMEXTEND_EXTEND ) // 개별 확장 상태 다름.
|
|
{
|
|
|
|
}
|
|
else */
|
|
if( nAllItemExtendState == ITEMEXTENDSTATE::ITEMEXTEND_EXTEND ) // 전체확장.
|
|
{
|
|
// 확장버튼 확장상태.
|
|
m_bExtendAll = true;
|
|
m_pListGuild->SetResizeAll( m_bExtendAll );
|
|
|
|
// 버튼이미지 변경.
|
|
dynamicCast< KUIControlSimpleButton * >( pControlBtnExtendAll )->SetAniName(
|
|
m_bExtendAll ? "common_button_titanium_list_fold" : "common_button_titanium_list_unfold" );
|
|
}
|
|
else if( nAllItemExtendState == ITEMEXTENDSTATE::ITEMEXTEND_ORIGINAL ) // 전체원본.
|
|
{
|
|
// 확장버튼 확장상태.
|
|
m_bExtendAll = false;
|
|
m_pListGuild->SetResizeAll( m_bExtendAll );
|
|
|
|
// 버튼이미지 변경.
|
|
dynamicCast< KUIControlSimpleButton * >( pControlBtnExtendAll )->SetAniName(
|
|
m_bExtendAll ? "common_button_titanium_list_fold" : "common_button_titanium_list_unfold" );
|
|
|
|
// 축소시 스크롤위치 초기화.
|
|
m_nScrollPos = 0;
|
|
}
|
|
}
|
|
|
|
////--------------------------------------
|
|
//// 선택된 아이템 활성화.
|
|
//
|
|
//m_pListGuild->SetSelectItem( m_nScrollPos, msg.itemIndex ); // 아이템 상태배열에 선택활성화 여부 설정.
|
|
//RevitalizeSelectItem(); // 선택된 아이템 활성화 비쥬얼 처리.
|
|
////---------------------------------------
|
|
|
|
// 길드원정보 재설정.
|
|
RefreshListMember( m_nScrollPos );
|
|
|
|
// 확장된 만큼 스크롤바 조절.
|
|
RefreshScrollbarExtend();
|
|
|
|
m_pScrollBar->ScrollRefresh();
|
|
}
|
|
|
|
|
|
////--------------------------------------
|
|
//// 선택된 아이템 활성화.
|
|
//
|
|
//m_pListGuild->SetSelectItem( m_nScrollPos, msg.itemIndex ); // 아이템 상태배열에 선택활성화 여부 설정.
|
|
//RevitalizeSelectItem(); // 선택된 아이템 활성화 비쥬얼 처리.
|
|
////---------------------------------------
|
|
}
|
|
|
|
}// if
|
|
}
|
|
void SUIGuildMemberTab::PumpUpMsgRBtnClick( DWORD lparam )
|
|
{
|
|
MSG_LISTCONTROL msg = *( (MSG_LISTCONTROL *)( &lparam ) );
|
|
|
|
// 아이템.
|
|
if( ITEMTYPE::TYPE_ITEM_Base == msg.type || ITEMTYPE::TYPE_ITEM_Column == msg.type )
|
|
{
|
|
//--------------------
|
|
// MODE
|
|
if( m_bManageMode ) // 길드원 관리 모드
|
|
{
|
|
KUIControl * pControlClass;
|
|
m_pListGuild->GetItem( msg.itemIndex )->GetControl( pControlClass, "text_guild_class_01" );
|
|
MemberManageMode( GetSelectedMemberName( msg.itemIndex ), pControlClass->GetCaption() );
|
|
|
|
}
|
|
|
|
else if( m_bMasterMode ) // 길드마스터 모드
|
|
{
|
|
// GuildMasterMode( GetSelectedMemberName( msg.itemIndex ) );
|
|
KUIControl * pControlClass;
|
|
m_pListGuild->GetItem( msg.itemIndex )->GetControl( pControlClass, "text_guild_class_01" );
|
|
GuildMasterMode( GetSelectedMemberName( msg.itemIndex ), pControlClass->GetCaption() );
|
|
}
|
|
}
|
|
|
|
|
|
//
|
|
// ListControl 을 선택.
|
|
KUIControl * pControl;
|
|
if( m_pListGuild && m_pListGuild->GetControl( pControl, ( ITEMTYPE )msg.type, msg.itemIndex, "item_static_member_name" ) )
|
|
{
|
|
// 멤버관련 팝업.
|
|
ShowMemberPopup( this->m_ptMouseDown.x, this->m_ptMouseDown.y, GetSelectedMemberName( msg.itemIndex ) );
|
|
|
|
//--------------------------------------
|
|
// 선택된 아이템 활성화.
|
|
|
|
m_pListGuild->SetSelectItem( m_nScrollPos, msg.itemIndex ); // 아이템 상태배열에 선택활성화 여부 설정.
|
|
RevitalizeSelectItem(); // 선택된 아이템 활성화 비쥬얼 처리.
|
|
//---------------------------------------
|
|
|
|
}// if
|
|
}
|
|
|
|
bool SUIGuildMemberTab::InitControls( KPoint kPos )
|
|
{
|
|
m_bFirstOpen = false;
|
|
m_nScrollPos = 0; // scroll bar의 변경 정보.
|
|
m_bExtendAll = false; // 전체 아이템 확장여부.
|
|
|
|
// 활성, 비활성 시 텍스트 색상.
|
|
KUIControlButton * pBtn = dynamicCast< KUIControlButton * >( GetChild( "header_static_member_level" ) );
|
|
pBtn->SetEnableColor( "<#ffffff>" );
|
|
pBtn->SetDisableColor( "<#a0a0a0>" );
|
|
|
|
pBtn = dynamicCast< KUIControlButton * >( GetChild( "header_static_member_name" ) );
|
|
pBtn->SetEnableColor( "<#ffffff>" );
|
|
pBtn->SetDisableColor( "<#a0a0a0>" );
|
|
|
|
pBtn = dynamicCast< KUIControlButton * >( GetChild( "header_static_member_point" ) );
|
|
pBtn->SetEnableColor( "<#ffffff>" );
|
|
pBtn->SetDisableColor( "<#a0a0a0>" );
|
|
|
|
//-----------------------
|
|
// ListControl 생성.
|
|
if( !m_pListGuild ) // bintitle. 2010.11.30.
|
|
{
|
|
m_pListGuild = new KUIListControl( this, "listcontrol01", "header_base", "item_base", MAX_LIST_COUNT, true, 0, 2 );
|
|
|
|
//// Header column
|
|
m_pListGuild->AddStringHeaderColumn( "header_static_connection_state" );
|
|
m_pListGuild->AddStringHeaderColumn( "header_icon_member_job_icon" );
|
|
m_pListGuild->AddStringHeaderColumn( "header_static_member_level" );
|
|
m_pListGuild->AddStringHeaderColumn( "header_static_member_name" );
|
|
m_pListGuild->AddStringHeaderColumn( "header_static_member_point" );
|
|
m_pListGuild->AddStringHeaderColumn( "header_button_unfold" );
|
|
|
|
// Item column
|
|
m_pListGuild->AddStringItemColumn( "item_static_connection_state" );
|
|
m_pListGuild->AddStringItemColumn( "item_icon_member_job_icon" );
|
|
m_pListGuild->AddStringItemColumn( "item_static_member_level" );
|
|
|
|
/// 2011.05.24 안쓰여서 삭제 함 - prodongi
|
|
//m_pListGuild->AddStringItemColumn( "button_point_02" ); // 우클릭 유도버튼
|
|
|
|
m_pListGuild->AddStringItemColumn( "item_static_member_name" );
|
|
m_pListGuild->AddStringItemColumn( "item_static_member_point" );
|
|
m_pListGuild->AddStringItemColumn( "item_button_unfold" );
|
|
|
|
m_pListGuild->AddStringItemColumn( "mark_guild_class_01" );
|
|
m_pListGuild->AddStringItemColumn( "text_guild_class_01" );
|
|
m_pListGuild->AddStringItemColumn( "mark_guild_memo_01" );
|
|
m_pListGuild->AddStringItemColumn( "guild_memo_text_01" );
|
|
|
|
// Create
|
|
m_pListGuild->Create();
|
|
}
|
|
|
|
//------------------------
|
|
|
|
|
|
// 스크롤바.
|
|
// 2010.09.20 - prodongi
|
|
m_pScrollBar = dynamicCast< KUIControlVScrollEx* >(GetChild( "scrollbar_guild_list" ));
|
|
//m_pScrollBar = static_cast< KUIControlVScroll* >(GetChild( "scrollbar_guild_list" ));
|
|
|
|
// 관리모드시 셀렉트 표시용 컨트롤.
|
|
m_pTabSelectControl = GetChild( "select_list_red" );
|
|
|
|
// Sort Button.
|
|
m_arrSortBtn[ 0 ] = GetChild( "header_static_connection_state" );
|
|
m_arrSortBtn[ 1 ] = GetChild( "header_icon_member_job_icon" );
|
|
m_arrSortBtn[ 2 ] = GetChild( "header_static_member_level" );
|
|
m_arrSortBtn[ 3 ] = GetChild( "header_static_member_name" );
|
|
m_arrSortBtn[ 4 ] = GetChild( "header_static_member_point" );
|
|
|
|
// 각버튼의 정렬상태. ( false 비정렬, true 정렬 )
|
|
memset( m_arrSortState, 0, sizeof(int) * MAX_BTN_SORT_STATE_SIZE );
|
|
|
|
|
|
//// nui에서 설정된 윈도우 위치좌표.
|
|
//KRect rt = this->GetRect();
|
|
//kPos.x = rt.left; kPos.y = rt.top;
|
|
|
|
// 자신의 Wnd 영역.
|
|
m_WndRect = this->GetRect();
|
|
|
|
|
|
//// Item_Base 보다 위에 뜨게 해야한다. 툴상의 LayOut 이 제대로 적용되지 않는 문제때문...
|
|
//KUIWnd * pItemBase = GetChild( "item_base" );
|
|
//std::list<KUIWnd*>::iterator it = std::find( m_listChild.begin(), m_listChild.end(), pItemBase );
|
|
//if( it != m_listChild.end() )
|
|
//{
|
|
// m_listChild.erase( it );
|
|
// m_listChild.push_front( pItemBase );
|
|
//}
|
|
|
|
//// 가장위로 뜨게함.
|
|
//this->SetChildAsTop( "select_red_01" );
|
|
//this->SetChildAsTop( "select_orange_01" );
|
|
|
|
// 선택된 아이템의 활성화 비쥬얼용 컨트롤.
|
|
m_pSelectedControl_Red = GetChild( "select_red_01" );
|
|
m_pSelectedControl_Orange = GetChild( "select_orange_01" );
|
|
m_pSelectedControl = m_pSelectedControl_Orange;
|
|
m_pSelectedControl->SetShow( false );
|
|
|
|
|
|
m_pSelectPosControl = GetChild( "select_list_cyan" ); // 셀렉트 위치좌표용 컨트롤.
|
|
|
|
return SUIWnd::InitControls( kPos );
|
|
}
|
|
|
|
|
|
void SUIGuildMemberTab::ProcMsgAtStatic( SGameMessage* pMsg )
|
|
{
|
|
switch(pMsg->nType)
|
|
{
|
|
|
|
case IMSG_UI_GUILD_MANAGE_MODE : // 길드원 관리모드 설정.
|
|
{
|
|
SIMSG_UI_GUILD_WNDMSG * pData = dynamicCast< SIMSG_UI_GUILD_WNDMSG * >( pMsg );
|
|
m_bManageMode = pData->bMode;
|
|
|
|
// 관리모드시 셀렉트 표시.
|
|
ShowSelectManageMode();
|
|
|
|
pData->bUse = true;
|
|
}
|
|
break;
|
|
|
|
case IMSG_UI_GUILD_MASTER_MODE : // 길드마스터 모드 설정.
|
|
{
|
|
SIMSG_UI_GUILD_WNDMSG * pData = dynamicCast< SIMSG_UI_GUILD_WNDMSG * >( pMsg );
|
|
m_bMasterMode = pData->bMode;
|
|
|
|
// 마스터모드시 셀렉트 표시.
|
|
ShowSelectMasterMode();
|
|
|
|
pData->bUse = true;
|
|
}
|
|
break;
|
|
|
|
case IMSG_UI_GUILD_DONATE_MODE :
|
|
{
|
|
pMsg->bUse = true;
|
|
|
|
SIMSG_UI_GUILD_WNDMSG * pData = dynamicCast< SIMSG_UI_GUILD_WNDMSG * >( pMsg );
|
|
m_bMasterMode = pData->bMode;
|
|
}
|
|
break;
|
|
|
|
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( pData->m_strString == "guild_update" )
|
|
{
|
|
// 2010.12.07. bintitle. 길드있음.
|
|
if( m_GuildMgr.IsExist() )
|
|
{
|
|
if( this->IsShow() )
|
|
{
|
|
// 길드원 업데이트.
|
|
|
|
if( !(pData->m_dwData & GUILD_UPDATE::GUILD_UPDATE_GRAIDSIEGETIP) &&
|
|
!(pData->m_dwData & GUILD_UPDATE::GUILD_UPDATE_URL) &&
|
|
!(pData->m_dwData & GUILD_UPDATE::GUILD_UPDATE_NOTICE) &&
|
|
!(pData->m_dwData & GUILD_UPDATE::GUILD_UPDATE_AINFO) &&
|
|
!(pData->m_dwData & GUILD_UPDATE::GUILD_UPDATE_CHANGE_GUILD_NAME ) &&
|
|
!(pData->m_dwData & GUILD_UPDATE::GUILD_UPDATE_PROMOTE ) &&
|
|
!(pData->m_dwData & GUILD_UPDATE::GUILD_UPDATE_CHANGE_PERMISSION_SET ) &&
|
|
!(pData->m_dwData & GUILD_UPDATE::GUILD_UPDATE_ERROR_PERMISSION ) &&
|
|
!(pData->m_dwData & GUILD_UPDATE::GUILD_UPDATE_ERROR_NOT_EXIST )
|
|
)
|
|
{
|
|
UpdateGuildMember( pData->m_dwData );
|
|
|
|
// 등급명칭 변경시에 권한처리 안함.
|
|
if( !(pData->m_dwData & GUILD_UPDATE::GUILD_UPDATE_CHANGE_PERMISSION_NAME) )
|
|
{
|
|
// 권한처리.
|
|
AuthorityProcess() ;
|
|
}
|
|
|
|
m_bUIRefresh = false; // UI갱신X.
|
|
m_nRefresh = GUILD_UPDATE::GUILD_UPDATE_NONE; // 갱신조건 클리어.
|
|
}
|
|
}
|
|
else
|
|
{
|
|
m_bUIRefresh = true; // 갱신.
|
|
m_nRefresh |= pData->m_dwData; // UI open 시에 비교하기위해 갱신조건 누적.
|
|
}
|
|
}
|
|
|
|
// 2010.12.07. 길드없음.
|
|
else
|
|
{
|
|
m_bFirstOpen = false;
|
|
}
|
|
}
|
|
|
|
|
|
}
|
|
break;
|
|
}
|
|
}
|
|
|
|
|
|
void SUIGuildMemberTab::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 ) );
|
|
|
|
else if( !::_stricmp( lpszControlID, "button_list_default_01" ) )
|
|
{
|
|
// 모든 버튼정렬상태 해제.
|
|
ClearBtnSortStateAll();
|
|
}
|
|
|
|
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 );
|
|
|
|
// 확장된 만큼 스크롤바 조절.
|
|
RefreshScrollbarExtend();
|
|
|
|
// 선택된 아이템 활성화 비쥬얼 처리.
|
|
RevitalizeSelectItem();
|
|
}
|
|
break;
|
|
|
|
|
|
//case KUI_MESSAGE::KSCROLL_REFRESH :
|
|
//
|
|
// // 길드원정보 재설정.
|
|
// RefreshListMember( m_nScrollPos );
|
|
|
|
// // 확장된 만큼 스크롤바 조절.
|
|
// RefreshScrollbarExtend();
|
|
|
|
// // 선택된 아이템 활성화 비쥬얼 처리.
|
|
// RevitalizeSelectItem();
|
|
|
|
// break;
|
|
|
|
|
|
//-------------------------------------------------------------------------
|
|
// ListControl Message
|
|
//
|
|
case KUI_MESSAGE::KLIST_ITEM_MOUSEMOVE :
|
|
{
|
|
MSG_LISTCONTROL msg = *( (MSG_LISTCONTROL *)( &lparam ) );
|
|
|
|
if( ITEMTYPE::TYPE_ITEM_Base == msg.type || ITEMTYPE::TYPE_ITEM_Column == msg.type )
|
|
{
|
|
KUIControl * pControl;
|
|
if( m_pListGuild->GetControl( pControl, ( ITEMTYPE )msg.type, msg.itemIndex, msg.columnIndex ) )
|
|
{
|
|
// 길드원 메모 오버랩.
|
|
if( !::_stricmp( pControl->GetID(), "guild_memo_text_01" ) &&
|
|
::_stricmp( pControl->GetCaption(), CStringUtil::StringFormat( "<font:font_02><size:%d><#4d4d4d><hcenter><left>", pControl->GetFontSize()).c_str() ) ) // g_MemoDecoSize < sizeof( pControl->GetCaption() ) )
|
|
{
|
|
// 메모뷰 오픈.
|
|
static DWORD dwTime = 0;
|
|
if(GetSafeTickCount() - dwTime > 300)
|
|
{
|
|
KUIControl * pBaseControl = m_pListGuild->GetItem( msg.itemIndex )->GetBaseControl();
|
|
if( pBaseControl )
|
|
{
|
|
ShowMemoView( pBaseControl, this->m_GuildMgr.FindMember( GetSelectedMemberName( msg.itemIndex ) )->GetGuildMemo() );
|
|
}
|
|
dwTime = GetSafeTickCount();
|
|
}
|
|
|
|
}
|
|
}
|
|
}
|
|
|
|
}
|
|
break;
|
|
|
|
case KUI_MESSAGE::KLIST_ITEM_LBUTTON_DOWN :
|
|
|
|
// ** MSG_LISTCONTROL msg = *( (MSG_LISTCONTROL *)( &pumpMsg ) );
|
|
{
|
|
PumpUpMsgLBtnClick_V(lparam);
|
|
}
|
|
|
|
break;
|
|
|
|
case KUI_MESSAGE::KLIST_ITEM_LBUTTON_DBCLICK :
|
|
{
|
|
PumpUpMsgDBClick(lparam);
|
|
}
|
|
break;
|
|
|
|
case KUI_MESSAGE::KLIST_ITEM_RBUTTON_UP :
|
|
|
|
break;
|
|
|
|
case KUI_MESSAGE::KLIST_ITEM_RBUTTON_DOWN :
|
|
{
|
|
PumpUpMsgRBtnClick(lparam);
|
|
}
|
|
break;
|
|
|
|
}
|
|
|
|
|
|
SUIWnd::PumpUpMessage( lpszControlID, nMessage, lparam, wparam );
|
|
}
|
|
}
|
|
|
|
|
|
// 스크롤바 설정.
|
|
void SUIGuildMemberTab::RefreshScrollbar()
|
|
{
|
|
if( m_pScrollBar && m_pListGuild )
|
|
{
|
|
m_pScrollBar->SetScrollRange( m_pListGuild->GetListConutMAX(), m_GuildMgr.GetMemberCount() );
|
|
}
|
|
}
|
|
|
|
|
|
// 스크롤바 설정.
|
|
// 확장된 아이템을 검사하여 ScrollRange의 Total에 추가한다.
|
|
void SUIGuildMemberTab::RefreshScrollbarExtend()
|
|
{
|
|
//if( m_pScrollBar && m_pListGuild )
|
|
//{
|
|
// // TotalCount
|
|
// int nExtend = 0;
|
|
// int size = m_GuildMgr.GetMemberCount();
|
|
// for( int i=0; i<size; i++ )
|
|
// {
|
|
// if( m_pListGuild->GetIsExtend( i ) )
|
|
// ++nExtend;
|
|
// }
|
|
// int nRest = nExtend % 2;
|
|
// nExtend = nExtend > 0 ? nExtend / 2 + nRest : nExtend;
|
|
// //nExtend = nRest > 0 ? nExtend : nExtend + 1;
|
|
// //nExtend = nExtend + 1;
|
|
// m_pScrollBar->SetScrollRange( m_pListGuild->GetListConutMAX(), size + nExtend + 1 );
|
|
//}
|
|
|
|
|
|
if( m_pScrollBar && m_pListGuild )
|
|
{
|
|
// TotalCount
|
|
int nExtend = 0;
|
|
int size = m_GuildMgr.GetMemberCount();
|
|
for( int i=0; i<size; i++ )
|
|
{
|
|
if( m_pListGuild->GetIsExtend( i ) )
|
|
++nExtend;
|
|
}
|
|
if( nExtend )
|
|
{
|
|
int nRest = nExtend % 2;
|
|
nExtend = nExtend / 2 + nRest + 2;
|
|
}
|
|
m_pScrollBar->SetScrollRange( m_pListGuild->GetListConutMAX(), size + nExtend );
|
|
}
|
|
|
|
|
|
//if( m_pScrollBar && m_pListGuild )
|
|
//{
|
|
// // TotalCount
|
|
// int nExtend = 0;
|
|
// int size = m_GuildMgr.GetMemberCount();
|
|
// for( int i=0; i<size; i++ )
|
|
// {
|
|
// if( m_pListGuild->GetIsExtend( i ) )
|
|
// ++nExtend;
|
|
// }
|
|
// nExtend = nExtend > 0 ? nExtend / 2 : nExtend;
|
|
// //nExtend = nRest > 0 ? nExtend : nExtend + 1;
|
|
// //nExtend = nExtend + 1;
|
|
// m_pScrollBar->SetScrollRange( m_pListGuild->GetListConutMAX(), size + nExtend + 2 );
|
|
//}
|
|
}
|
|
|
|
DWORD SUIGuildMemberTab::OnMouseMessage(DWORD dwMessage, int x, int y)
|
|
{
|
|
switch( dwMessage )
|
|
{
|
|
case KMOUSE_MOVE :
|
|
case KLBUTTON_DBLCLK :
|
|
|
|
// ListControl 의 Mouse Event 처리.
|
|
if( m_GuildMgr.GetMemberCount() > 0 && m_pListGuild )
|
|
m_pListGuild->OnMouseMessage( dwMessage, x, y );
|
|
|
|
//// // 팝업창이 떠 있는 경우.
|
|
//// if( m_pMemberPopupWnd->GetIsOpen() )
|
|
//// {
|
|
//// // 마우스가 팝업창영역을 벗어나면 닫기.
|
|
//// m_pMemberPopupWnd->PopupVisiblity( x, y );
|
|
//// }
|
|
//
|
|
break;
|
|
|
|
|
|
case KLBUTTON_DOWN :
|
|
case KRBUTTON_DOWN :
|
|
|
|
m_ptMouseDown.x = x;
|
|
m_ptMouseDown.y = y;
|
|
|
|
// ListControl 의 Mouse Event 처리.
|
|
if( m_GuildMgr.GetMemberCount() > 0 && m_pListGuild )
|
|
m_pListGuild->OnMouseMessage( dwMessage, x, y );
|
|
break;
|
|
|
|
|
|
//// 팝업창 띄우기.
|
|
//case KRBUTTON_DOWN :
|
|
|
|
// //
|
|
// // 멤버관련 팝업.
|
|
// ShowMemberPopup( x, y );
|
|
|
|
// break;
|
|
|
|
|
|
//// TEST 맴버추가
|
|
//case KRBUTTON_DBLCLK :
|
|
// {
|
|
// static int kkk = 0;
|
|
// m_GuildMgr.AddMember( CStringUtil::StringFormat( "데바임%3d", ++kkk ).c_str() );
|
|
|
|
// // 리스트 업데이트.
|
|
// UpdateGuildMember();
|
|
// }
|
|
// break;
|
|
}
|
|
|
|
return SUIWnd::OnMouseMessage(dwMessage, x, y);
|
|
}
|
|
|
|
|
|
// ListControl 에 길드원정보를 맵핑한다.
|
|
void SUIGuildMemberTab::RefreshListMember( int nScroll )
|
|
{
|
|
if( m_pListGuild )
|
|
{
|
|
// 전체확장버튼이 ON 상태의 경우, 새로 추가된 아이템도 확장하기위한 처리.
|
|
// if( m_bExtendAll )
|
|
// m_pListGuild->SetResizeAll( m_bExtendAll );
|
|
|
|
int nMembersSize = m_arrMember.size(); // 길드원 정보 배열.
|
|
int maxSize = m_pListGuild->GetListConutMAX(); // 리스트 최대개수.
|
|
int memberIndex = 0;
|
|
KUIControl * pButtonExtension; // 확장버튼.
|
|
|
|
for( int i=0; i<maxSize; ++i )
|
|
{
|
|
// ListControl 의 Item.
|
|
KUIListItem * pItem = m_pListGuild->GetItem( i );
|
|
|
|
if( pItem )
|
|
{
|
|
memberIndex = i + nScroll;
|
|
// index가 길드맴버수 이하인동안 Refresh.
|
|
if( memberIndex < nMembersSize )
|
|
{
|
|
// 각 컨트롤에 정보 맵핑.
|
|
DataMapping( pItem, m_arrMember[ memberIndex ] );
|
|
|
|
//-------------------------------
|
|
// ** 해당 아이템을 확장 or 축소(원본크기) 한다.
|
|
m_pListGuild->SetResize( i, memberIndex, 2 );
|
|
|
|
// 확장여부에따른 버튼 애니 변경.
|
|
if( pItem->GetControl( pButtonExtension, "item_button_unfold") )
|
|
ListItemExtend( pButtonExtension, pItem->GetIsExtension() ); // 리스트아이템 확대,축소
|
|
}
|
|
}
|
|
|
|
}// for
|
|
|
|
//-------------------------------
|
|
// ** 리스트정보 최종 업데이트.
|
|
m_pListGuild->RefreshList( m_nScrollPos );
|
|
}
|
|
}
|
|
|
|
// 멤버리스트 초기화.
|
|
void SUIGuildMemberTab::InitMemberList( unsigned int nUpdateState )
|
|
{
|
|
// if( !( nUpdateState & GUILD_UPDATE::GUILD_UPDATE_CHANGE_PERMISSION_NAME ) )
|
|
// {
|
|
// 정렬용 벡터에 복사.
|
|
m_arrMember = m_GuildMgr.GetMemberList();
|
|
|
|
|
|
// 선택된 아이템의 활성화 비쥬얼용 컨트롤.
|
|
if( m_pSelectedControl )
|
|
m_pSelectedControl->SetShow( false );
|
|
|
|
// 리스트의 각 아이템의 상태정보.
|
|
if( m_pListGuild )
|
|
{
|
|
int size = m_GuildMgr.GetMemberCount();
|
|
m_pListGuild->RefreshItemState( size );
|
|
m_pListGuild->ResetSelectedIndex(); // 선택된 아이템 무효.
|
|
}
|
|
|
|
// 정렬.
|
|
UpdateNSortMemberList();
|
|
// }
|
|
|
|
// 길드원정보 갱신.
|
|
RefreshListMember( m_nScrollPos );
|
|
|
|
|
|
// if( !(nUpdateState & GUILD_UPDATE::GUILD_UPDATE_CHANGE_PERMISSION_NAME) )
|
|
// {
|
|
// Scroll bar
|
|
RefreshScrollbarExtend();
|
|
// }
|
|
}
|
|
|
|
// 길드원 업데이트.
|
|
void SUIGuildMemberTab::UpdateGuildMember( unsigned int nUpdateState )
|
|
{
|
|
// 멤버리스트 초기화.
|
|
InitMemberList( nUpdateState );
|
|
}
|
|
|
|
//강제 프로세스
|
|
void SUIGuildMemberTab::ForcedProcess(DWORD dwTime)
|
|
{
|
|
//if( !m_bFirstOpen || m_GuildMgr.GetMemberCount() < 1 ) // bintitle. 2010.11.26
|
|
if( !m_bFirstOpen )
|
|
{
|
|
// 리스트 관련.
|
|
m_nScrollPos = 0; // scroll bar의 변경 정보.
|
|
m_bExtendAll = false; // 전체 아이템 확장여부.
|
|
|
|
m_bFirstOpen = true;
|
|
|
|
// 확장버튼 토글.
|
|
m_pListGuild->SetResizeAll( false );
|
|
|
|
InitMemberList( GUILD_UPDATE::GUILD_UPDATE_NONE ); // 멤버리스트 초기화.
|
|
|
|
// 권한처리.
|
|
AuthorityProcess() ;
|
|
}
|
|
|
|
// bintitle. 2010.12.07.
|
|
else
|
|
{
|
|
if( this->IsShow() )
|
|
{
|
|
UpdateGuildMember( m_nRefresh ); // 멤버리스트 초기화.
|
|
|
|
// 권한처리.
|
|
AuthorityProcess() ;
|
|
|
|
m_bUIRefresh = false; // UI갱신X.
|
|
m_nRefresh = GUILD_UPDATE::GUILD_UPDATE_NONE; // 갱신조건 클리어.
|
|
m_beforeGuildMember = m_GuildMgr.GetGuildMemberCount(); // 이전 길드원 수 저장.
|
|
}
|
|
else
|
|
{
|
|
m_bUIRefresh = false; // 갱신여부 클리어.
|
|
m_nRefresh = GUILD_UPDATE::GUILD_UPDATE_NONE; // 갱신조건 클리어.
|
|
}
|
|
|
|
}
|
|
}
|
|
|
|
|
|
// 선택한 아이템의 활성화 비쥬얼 처리.
|
|
bool SUIGuildMemberTab::SelectedControl( KUIControl * pSelectionControl )
|
|
{
|
|
if( m_pSelectedControl && pSelectionControl )
|
|
{
|
|
// if( pSelectionControl->IsShow() )
|
|
// {
|
|
//// pSelectionControl->SetShow( false ); // 이전 셀렉트 숨김.
|
|
//
|
|
// // 매니저 모드?
|
|
//// m_pSelectedControl = m_bManageMode ? m_pSelectedControl_Red : m_pSelectedControl_Orange;
|
|
//
|
|
// KRect rtSelCtrl = pSelectionControl->GetRect();
|
|
//// rtSelCtrl.left -= 2;
|
|
//// rtSelCtrl.top -= 2;
|
|
//// rtSelCtrl.bottom += 1;
|
|
// /*rtSelCtrl.left -= 3;
|
|
// rtSelCtrl.top -= 3;
|
|
// rtSelCtrl.right += 2;
|
|
// rtSelCtrl.bottom += 2;*/
|
|
//
|
|
//
|
|
// // 크기 변환.
|
|
// m_pSelectedControl->Resize( rtSelCtrl );
|
|
//
|
|
// // 위치 이동.
|
|
// m_pSelectedControl->MovePos( rtSelCtrl.left+1, rtSelCtrl.top+1 );
|
|
//
|
|
// // 보임.
|
|
// m_pSelectedControl->SetShow( true );
|
|
//
|
|
// //m_pSelectedControl->SetAlphaClose(0);
|
|
//
|
|
// return true;
|
|
// }
|
|
// }
|
|
|
|
|
|
//KRect rtSelCtrl = pSelectionControl->GetRect();
|
|
|
|
//// 크기 변환.
|
|
//m_pSelectedControl->Resize( rtSelCtrl );
|
|
|
|
//// 위치 이동.
|
|
//m_pSelectedControl->MovePos( rtSelCtrl.left+1, rtSelCtrl.top+1 );
|
|
//
|
|
//// 보임.
|
|
//m_pSelectedControl->SetShow( true );
|
|
|
|
//return true;
|
|
|
|
m_pSelectedControl->SetShow( false ); // 이전 셀렉트 숨김.
|
|
|
|
// 매니저 모드? 또는 마스터모드
|
|
//m_pSelectedControl = m_bManageMode ? m_pSelectedControl_Red : m_pSelectedControl_Orange;
|
|
m_pSelectedControl = m_pSelectedControl_Orange;
|
|
if( m_bManageMode || m_bMasterMode )
|
|
m_pSelectedControl = m_pSelectedControl_Red;
|
|
|
|
|
|
if( m_pSelectedControl )
|
|
{
|
|
// Item_Base 보다 위에 뜨게 해야한다. 툴상의 LayOut 이 제대로 적용되지 않는 문제때문...
|
|
std::list<KUIWnd*>::iterator it_itembase = std::find( m_listChild.begin(), m_listChild.end(), static_cast< KUIWnd * >( pSelectionControl ) ); // ItemBase 위치.
|
|
std::list<KUIWnd*>::iterator it_select = std::find( m_listChild.begin(), m_listChild.end(), static_cast< KUIWnd * >( m_pSelectedControl ) ); // SelectControl.
|
|
if( it_itembase != m_listChild.end() && it_select != m_listChild.end() )
|
|
{
|
|
m_listChild.erase( it_select );
|
|
m_listChild.insert( ( ++it_itembase ), m_pSelectedControl ); // insert는 iterator의 앞쪽에 추가되므로 + 1 한다.
|
|
}
|
|
|
|
//// 가장위로 뜨게함.
|
|
//this->SetChildAsTop( "select_red_01" );
|
|
//this->SetChildAsTop( "select_orange_01" );
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
KRect rtSelCtrl = pSelectionControl->GetRect();
|
|
|
|
// 크기 변환.
|
|
m_pSelectedControl->Resize( rtSelCtrl );
|
|
|
|
// 위치 이동.
|
|
m_pSelectedControl->MovePos( rtSelCtrl.left, rtSelCtrl.top );
|
|
|
|
// 보임.
|
|
m_pSelectedControl->SetShow( true );
|
|
|
|
return true;
|
|
}
|
|
|
|
}
|
|
|
|
return false;
|
|
}
|
|
|
|
|
|
// 선택된 아이템 활성화 비쥬얼 처리.
|
|
void SUIGuildMemberTab::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 SUIGuildMemberTab::DataMapping( KUIListItem * pItem, SPlayerSlot * pPlayer )
|
|
{
|
|
if( pItem && pPlayer )
|
|
{
|
|
KUIControl * pControl;
|
|
int bIsLogin = pPlayer->GetLogin();
|
|
|
|
KUIControlStatic * pControlStatic;
|
|
|
|
// 접속 컨트롤.
|
|
if( pItem->GetControl( pControl, "item_static_connection_state" ) )
|
|
{
|
|
pControlStatic = dynamicCast< KUIControlStatic * >( pControl );
|
|
if( m_bFirstDataMapping || ::_stricmp( pControlStatic->GetAniName(), g_StrConnectIcon[ bIsLogin ] ) )
|
|
pControlStatic->SetAniName( g_StrConnectIcon[ bIsLogin ] );
|
|
//( bIsLogin ? "common_mark_titanium_online" : "common_mark_titanium_offline") );
|
|
}
|
|
|
|
// 직업 컨트롤.
|
|
if( pItem->GetControl( pControl, "item_icon_member_job_icon" ) )
|
|
{
|
|
string jobName = GetJobDB().GetJobIconName( pPlayer->GetJobID() );
|
|
|
|
pControlStatic = dynamicCast< KUIControlStatic * >( pControl );
|
|
//if( m_bFirstDataMapping || ::_stricmp( pControlIconStatic->GetAniName(), ( bIsLogin ? jobName.c_str() : jobName.append("_off").c_str() ) ) )
|
|
pControlStatic->SetAniName( ( bIsLogin ? jobName.c_str() : jobName.append("_off").c_str() ) );
|
|
}
|
|
|
|
// Level 컨트롤
|
|
if( pItem->GetControl( pControl, "item_static_member_level" ) )
|
|
{
|
|
int myLevel = m_PlayerInfoMgr.GetPlayerInfo().GetLevel();
|
|
int memberLevel = pPlayer->GetLevel();
|
|
std::string strCaption = abs( myLevel - memberLevel ) <= 15 ? "<#8dc63f>" : "";
|
|
strCaption.append( bIsLogin ? "" : "<#4d4d4d>" );
|
|
|
|
std::string str = CStringUtil::StringFormat( "<font:font_02><size:%d><hcenter><vcenter>%s%d", pControl->GetFontSize(), strCaption.c_str(), memberLevel );
|
|
if( m_bFirstDataMapping || str != pControl->GetCaption() )
|
|
pControl->SetCaption( str.c_str() );
|
|
}
|
|
|
|
// 아이디 컨트롤
|
|
if( pItem->GetControl( pControl, "item_static_member_name" ) )
|
|
{
|
|
//string strCutName = bIsLogin ? "<font:font_02><size:9><hcenter><vcenter>" : "<font:font_02><size:9><#4d4d4d><hcenter><vcenter>";
|
|
string strCutName = CStringUtil::StringFormat( "<font:font_02><size:%d>%s<hcenter><vcenter>", pControl->GetFontSize(), bIsLogin ? "" : "<#4d4d4d>" );
|
|
strCutName.append( pPlayer->GetName() ) ;
|
|
//CuttingText( pControl, strCutName );
|
|
|
|
pControl->SetCaption( strCutName.c_str() );
|
|
pControl->CutCaptionNTooltip();
|
|
}
|
|
|
|
// Point 컨트롤
|
|
if( pItem->GetControl( pControl, "item_static_member_point" ) )
|
|
{
|
|
int point = pPlayer->GetPoint();
|
|
|
|
std::string str = CStringUtil::StringFormat( "<font:font_02><size:%d><hcenter><vcenter>%s%s", pControl->GetFontSize(), bIsLogin ? "" : "<#4d4d4d>", expToString( point ).c_str() );
|
|
pControl->SetCaption( str.c_str() );
|
|
}
|
|
|
|
// 등급.
|
|
if( pItem->GetControl( pControl, "mark_guild_class_01" ) )
|
|
{
|
|
// common_mark_titanium_guild_class_01
|
|
int nClass = pPlayer->GetAuthority();
|
|
if( nClass != _PERMISSION::PERMISSION_LEADER )
|
|
nClass = _PERMISSION::PERMISSION_LEADER - nClass;
|
|
|
|
pControlStatic = dynamicCast< KUIControlStatic * >( pControl );
|
|
pControlStatic->SetAniName( CStringUtil::StringFormat( "common_mark_titanium_guild_class_0%d", nClass ).c_str() );
|
|
}
|
|
|
|
// 등급명.
|
|
if( pItem->GetControl( pControl, "text_guild_class_01" ) )
|
|
{
|
|
// 길드마스터
|
|
if( pPlayer->GetAuthority() == 7 )
|
|
pControl->SetCaption( CStringUtil::StringFormat("<font:font_02><size:%d><#955c5c><hcenter><left>%s", pControl->GetFontSize(), S(3508) ).c_str() );
|
|
else
|
|
{
|
|
// -1 하는 이유 : 등급은 1부터시작, 클래스명배열은 0부터 시작. 따라서 -1로 맞춰줌.
|
|
const char * pStr = this->m_GuildMgr.GetAuthorityClassName( ( pPlayer->GetAuthority() - 1 ) );
|
|
if( pStr )
|
|
pControl->SetCaption( CStringUtil::StringFormat( "<font:font_02><size:%d><#955c5c><hcenter><left>%s", pControl->GetFontSize(), pStr ).c_str() );
|
|
//pControl->SetCaption( pStr );
|
|
}
|
|
|
|
pControl->CutCaptionNTooltip();
|
|
}
|
|
|
|
// 메모텍스트
|
|
if( pItem->GetControl( pControl, "guild_memo_text_01" ) )
|
|
{
|
|
string strCutMemo( pPlayer->GetGuildMemo() );
|
|
//CuttingText( pControl, strCutMemo );
|
|
|
|
pControl->SetCaption( CStringUtil::StringFormat( "<font:font_02><size:%d><#4d4d4d><hcenter><left>%s", pControl->GetFontSize(), strCutMemo.c_str() ).c_str() );
|
|
pControl->CutCaptionNTooltip();
|
|
}
|
|
}
|
|
|
|
// 최초 데이타 셋팅.
|
|
if( m_bFirstDataMapping )
|
|
m_bFirstDataMapping = false;
|
|
}
|
|
|
|
|
|
// 리스트아이템 확대,축소
|
|
void SUIGuildMemberTab::ListItemExtend( KUIControl * pButton, bool bExtension )
|
|
{
|
|
//static_cast< KUIControlSimpleButton * >( pButton )->SetAniName(
|
|
// bExtension ? "common_button_titanium_fold" : "common_button_titanium_unfold" );
|
|
KUIControlSimpleButton * pControl = dynamicCast< KUIControlSimpleButton * >( pButton );
|
|
if( ::_stricmp( pControl->GetAniName(), ( bExtension ? "common_button_titanium_fold" : "common_button_titanium_unfold" ) ) )
|
|
{
|
|
pControl->SetAniName( ( bExtension ? "common_button_titanium_fold" : "common_button_titanium_unfold" ) );
|
|
}
|
|
}
|
|
|
|
|
|
// 멤버관련 팝업.
|
|
void SUIGuildMemberTab::ShowMemberPopup( int x, int y, const char * strName )
|
|
{
|
|
// 팝업RECT.
|
|
//KRect rtPopup = m_pMemberPopupWnd->GetRect();
|
|
|
|
// 이전에 열려있을 경우를 대비해서 닫는다.
|
|
m_pGameManager->PostMsgAtDynamic( new SIMSG_SHOW_UIWINDOW( SIMSG_TOGGLE_UIWINDOW::UIWINDOW_GUILD_SUBMENU_RIGHTCLICK, false ) );
|
|
|
|
x -= 10; y -= 10;
|
|
if( strName )
|
|
{
|
|
m_pGameManager->PostMsgAtDynamic( new SIMSG_SHOW_UIWINDOW( SIMSG_TOGGLE_UIWINDOW::UIWINDOW_GUILD_SUBMENU_RIGHTCLICK, false ) ); // 이전팝업 Wnd 닫기.
|
|
m_pGameManager->PostMsgAtDynamic( new SIMSG_UI_MOVE( SIMSG_TOGGLE_UIWINDOW::UIWINDOW_GUILD_SUBMENU_RIGHTCLICK, x, y ) ); // 위치이동.
|
|
m_pGameManager->PostMsgAtDynamic( new SIMSG_SHOW_UIWINDOW( SIMSG_TOGGLE_UIWINDOW::UIWINDOW_GUILD_SUBMENU_RIGHTCLICK, true ) ); // 팝업 Wnd 열기.
|
|
m_pGameManager->PostMsgAtDynamic( new SIMSG_UI_SEND_DATA( SIMSG_TOGGLE_UIWINDOW::UIWINDOW_GUILD_SUBMENU_RIGHTCLICK, strName ) ); // Data 전달.
|
|
}
|
|
}
|
|
|
|
|
|
// 선택된 인덱스의 길드원 명 반환.
|
|
const char * SUIGuildMemberTab::GetSelectedMemberName( int nRow )
|
|
{
|
|
if( m_nScrollPos + nRow < m_GuildMgr.GetMemberCount() )
|
|
{
|
|
//return m_GuildMgr.GetMemberList()[ m_nScrollPos + nRow ]->GetName();
|
|
return m_arrMember[ m_nScrollPos + nRow ]->GetName();
|
|
}
|
|
|
|
return NULL;
|
|
}
|
|
|
|
|
|
// 메모뷰 오픈.
|
|
void SUIGuildMemberTab::ShowMemoView( KUIControl * pBaseControl, const std::string & strMemo )
|
|
{
|
|
//if( m_pMemoControl && m_pMemoViewWnd )
|
|
if( pBaseControl )
|
|
{
|
|
// 위치이동 및 크기 지정.
|
|
KRect rt = pBaseControl->GetRect();
|
|
rt.top += ( rt.GetHeight() / 2 );
|
|
m_pGameManager->PostMsgAtDynamic( new SIMSG_UI_SETUP_REGION( SIMSG_TOGGLE_UIWINDOW::UIWINDOW_MEMOWND, "guild_ui_list_box_01", rt.left, rt.top ) );
|
|
|
|
|
|
// 메모 데이터 전송.
|
|
m_pGameManager->PostMsgAtDynamic( new SIMSG_UI_SEND_DATA( SIMSG_TOGGLE_UIWINDOW::UIWINDOW_MEMOWND, "guild_memo", strMemo.c_str(), 1 ) );
|
|
|
|
// 팝업 Wnd 열기.
|
|
m_pGameManager->PostMsgAtDynamic( new SIMSG_SHOW_UIWINDOW( SIMSG_TOGGLE_UIWINDOW::UIWINDOW_MEMOWND, true ) );
|
|
}
|
|
}
|
|
|
|
|
|
|
|
// 길드원 관리 모드, 관리대상 길드원명 전송.
|
|
void SUIGuildMemberTab::MemberManageMode( const char * pStrName, const char * pStrClassName )
|
|
{
|
|
if( pStrName )
|
|
{
|
|
std::string strName( pStrName );
|
|
|
|
// 길드원 이름으로 길드원의 등급명 얻기.
|
|
std::string strClassName("");
|
|
SPlayerSlot * pPlayer = m_GuildMgr.GetPlayerByName( pStrName );
|
|
if( pPlayer )
|
|
{
|
|
int nClass = pPlayer->GetAuthority();
|
|
if( nClass == 7 ) // 길드장.
|
|
strClassName = S(3508);
|
|
else
|
|
strClassName = m_GuildMgr.GetAuthorityClassName( nClass - 1 );
|
|
}
|
|
|
|
// 길드원관리패널( 길드원등급 팝업 )
|
|
m_pGameManager->PostMsgAtDynamic( new SIMSG_UI_GUILD_WNDMSG( SIMSG_TOGGLE_UIWINDOW::UIWINDOW_GUILD_SUB_MANAGE_CLASS,
|
|
SIMSG_TOGGLE_UIWINDOW::UIWINDOW_GUILD_SUB_MANAGE_CLASS,
|
|
IMSG_UI_GUILD_MEMBERCLASS_SETUP, strName, strClassName )
|
|
);
|
|
|
|
// 길드원관리패널( 길드원제명 팝업 )
|
|
m_pGameManager->PostMsgAtDynamic( new SIMSG_UI_GUILD_WNDMSG( SIMSG_TOGGLE_UIWINDOW::UIWINDOW_GUILD_SUB_MANAGE_EXPULSION,
|
|
SIMSG_TOGGLE_UIWINDOW::UIWINDOW_GUILD_SUB_MANAGE_EXPULSION,
|
|
IMSG_UI_GUILD_EXPULSION_SETUP, strName, strClassName )
|
|
);
|
|
}
|
|
}
|
|
|
|
|
|
// 길드마스터 모드, 길드장인계 대상 길드원명 전송.
|
|
void SUIGuildMemberTab::GuildMasterMode( const char * pStrName, const char * pStrClassName )
|
|
{
|
|
if( pStrName )
|
|
{
|
|
//// 길드원관리패널( 길드원등급 팝업 )
|
|
//m_pGameManager->PostMsgAtDynamic( new SIMSG_UI_SEND_DATA( SIMSG_TOGGLE_UIWINDOW::UIWINDOW_GUILD_SUB_MASTER_PROMOTE, pStrName, "PROMOTE" ) );
|
|
|
|
// 길드원 이름으로 길드원의 등급명 얻기.
|
|
std::string strClassName("");
|
|
SPlayerSlot * pPlayer = m_GuildMgr.GetPlayerByName( pStrName );
|
|
if( pPlayer )
|
|
{
|
|
int nClass = pPlayer->GetAuthority();
|
|
if( nClass == 7 ) // 길드장.
|
|
strClassName = S(3508);
|
|
else
|
|
strClassName = m_GuildMgr.GetAuthorityClassName( nClass - 1 );
|
|
}
|
|
|
|
// 길드원관리패널( 길드원제명 팝업 )
|
|
std::string strName( pStrName );
|
|
m_pGameManager->PostMsgAtDynamic( new SIMSG_UI_GUILD_WNDMSG( SIMSG_TOGGLE_UIWINDOW::UIWINDOW_GUILD_SUB_MASTER_PROMOTE,
|
|
SIMSG_TOGGLE_UIWINDOW::UIWINDOW_GUILD_SUB_MASTER_PROMOTE,
|
|
IMSG_UI_GUILD_PROMOTE_TO_MEMBER, strName, strClassName )
|
|
);
|
|
}
|
|
}
|
|
|
|
|
|
// 관리모드시 셀렉트 표시.
|
|
void SUIGuildMemberTab::ShowSelectManageMode()
|
|
{
|
|
// 위치 이동.
|
|
m_pTabSelectControl->MovePos( m_pSelectPosControl->GetRect().left, m_pSelectPosControl->GetRect().top );
|
|
m_pTabSelectControl->SetShow( m_bManageMode );
|
|
}
|
|
|
|
|
|
// 마스터모드시 셀렉트 표시.
|
|
void SUIGuildMemberTab::ShowSelectMasterMode()
|
|
{
|
|
// 위치 이동.
|
|
m_pTabSelectControl->MovePos( m_pSelectPosControl->GetRect().left, m_pSelectPosControl->GetRect().top );
|
|
m_pTabSelectControl->SetShow( m_bMasterMode );
|
|
}
|
|
|
|
//// 리스트 정렬.
|
|
//void SUIGuildMemberTab::SortMemberList( KUIControl * pControl )
|
|
//{
|
|
// this->ToggleBtnSortState( m_nSortCondition ); // 상태전환.
|
|
//
|
|
// int nState = this->GetToggleBtnSortState( m_nSortCondition );
|
|
// switch( nState )
|
|
// {
|
|
// case 0 : // 비정렬.
|
|
// m_arrMember = m_GuildMgr.GetMemberList();
|
|
// break;
|
|
//
|
|
// case 1 : // 내림차순.
|
|
// sort( m_arrMember.begin(), m_arrMember.end(), g_arrComp_down[ m_nSortCondition ] );
|
|
// break;
|
|
//
|
|
// case 2 : // 오름차순.
|
|
// sort( m_arrMember.begin(), m_arrMember.end(), g_arrComp_up[ m_nSortCondition ] );
|
|
// break;
|
|
// }
|
|
//
|
|
// //m_pGameManager->PostMsgAtDynamic( new SIMSG_REQ_OPEN_MSGBOX( SIMSG_REQ_OPEN_MSGBOX::_MSGBOXID::MSGBOX_GUILD_YES, g_arrStrSortIcon[ m_nSortCondition ][ nState ] ) );
|
|
//
|
|
// // 버튼 애니 변경.
|
|
// pControl->SetAniName( g_arrStrSortIcon[ m_nSortCondition ][ nState ] );
|
|
//
|
|
// //pControl->SetAniName( "common_button_titanium_line_up" );
|
|
//
|
|
// // 리스트 Refresh.
|
|
// RefreshListMember( m_nScrollPos );
|
|
//}
|
|
|
|
|
|
// 버튼정렬상태 토글.
|
|
void SUIGuildMemberTab::ToggleBtnSortState( int index )
|
|
{
|
|
int num = m_arrSortState[ index ] + 1;
|
|
if( num >= MAX_BTN_SORT_STATE )
|
|
num = 0;
|
|
|
|
for( int i=0; i<MAX_BTN_SORT_STATE_SIZE; ++i )
|
|
{
|
|
if( i == index )
|
|
m_arrSortState[ index ] = num;
|
|
else
|
|
m_arrSortState[ i ] = 0;
|
|
}
|
|
|
|
//int num = m_arrSortState[ index ] + 1;
|
|
//if( num >= MAX_BTN_SORT_STATE )
|
|
// num = 0;
|
|
//m_arrSortState[ index ] = num;
|
|
}
|
|
|
|
// 리스트 정렬.
|
|
void SUIGuildMemberTab::SortMemberList()
|
|
{
|
|
this->ToggleBtnSortState( m_nSortCondition ); // 상태전환.
|
|
|
|
int nState = this->GetToggleBtnSortState( m_nSortCondition );
|
|
switch( nState )
|
|
{
|
|
case 0 : // 비정렬.
|
|
m_arrMember = m_GuildMgr.GetMemberList();
|
|
break;
|
|
|
|
case 1 : // 내림차순.
|
|
sort( m_arrMember.begin(), m_arrMember.end(), g_arrComp_down[ m_nSortCondition ] );
|
|
break;
|
|
|
|
case 2 :
|
|
sort( m_arrMember.begin(), m_arrMember.end(), g_arrComp_up[ m_nSortCondition ] );
|
|
break;
|
|
|
|
case 3 :
|
|
sort( m_arrMember.begin(), m_arrMember.end(), g_arrComp_down[ m_nSortCondition ] );
|
|
break;
|
|
|
|
case 4 :
|
|
sort( m_arrMember.begin(), m_arrMember.end(), g_arrComp_up[ m_nSortCondition ] );
|
|
break;
|
|
}
|
|
|
|
//// 버튼 애니 변경.
|
|
//for( int i=0; i<MAX_BTN_SORT_STATE_SIZE; ++i )
|
|
//{
|
|
// if( i == m_nSortCondition )
|
|
// m_arrSortBtn[ m_nSortCondition ]->SetAniName( g_arrStrSortIcon[ m_nSortCondition ][ nState ] );
|
|
// else
|
|
// m_arrSortBtn[ i ]->SetAniName( g_arrStrSortIcon[ i ][ 0 ] );
|
|
//}
|
|
|
|
|
|
// 버튼 애니 변경.
|
|
// 늘어나는 버튼이 SetAniName() 으로 이미지변경이 안되는 이유로 불가피한 처리.
|
|
for( int i=0; i<MAX_BTN_SORT_STATE_SIZE; ++i )
|
|
{
|
|
if( i == m_nSortCondition )
|
|
{
|
|
// 일반버튼.
|
|
if( i < 2 )
|
|
{
|
|
m_arrSortBtn[ m_nSortCondition ]->SetAniName( g_arrStrSortIcon[ m_nSortCondition ][ nState ] );
|
|
}
|
|
}
|
|
else
|
|
{
|
|
// 일반버튼.
|
|
if( i < 2 )
|
|
{
|
|
m_arrSortBtn[ i ]->SetAniName( g_arrStrSortIcon[ i ][ 0 ] );
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
////
|
|
//// 버튼 애니 변경.
|
|
|
|
//if( m_nSortCondition < 2 ) // 일반버튼.
|
|
//{
|
|
// for( int i=0; i<2; ++i )
|
|
// {
|
|
// if( i == m_nSortCondition )
|
|
// m_arrSortBtn[ m_nSortCondition ]->SetAniName( g_arrStrSortIcon[ m_nSortCondition ][ nState ] );
|
|
// else
|
|
// m_arrSortBtn[ i ]->SetAniName( g_arrStrSortIcon[ i ][ 0 ] );
|
|
// }
|
|
//}
|
|
//else // 늘어난 버튼. SetAniName() 으로 이미지변경이 불가하여 트릭적용.
|
|
//{
|
|
//
|
|
//}
|
|
|
|
|
|
// 리스트 Refresh.
|
|
RefreshListMember( m_nScrollPos );
|
|
}
|
|
|
|
// 리스트 정렬. 맴버 Update.
|
|
void SUIGuildMemberTab::UpdateNSortMemberList()
|
|
{
|
|
for( int i=0; i<MAX_BTN_SORT_STATE_SIZE - 2; i++ )
|
|
{
|
|
int nSortState = m_arrSortState[ i ]; // 정렬 상태.
|
|
switch( nSortState )
|
|
{
|
|
case 0 : // 비정렬.
|
|
// m_arrMember = m_GuildMgr.GetMemberList();
|
|
ClearBtnSortStateAll();
|
|
break;
|
|
|
|
case 1 : // 내림차순.
|
|
sort( m_arrMember.begin(), m_arrMember.end(), g_arrComp_down[ i ] );
|
|
m_arrSortBtn[ i ]->SetAniName( g_arrStrSortIcon[ i ][ nSortState ] ); // 버튼 애니 변경.
|
|
break;
|
|
|
|
case 2 : // 오름차순.
|
|
sort( m_arrMember.begin(), m_arrMember.end(), g_arrComp_up[ i ] );
|
|
m_arrSortBtn[ i ]->SetAniName( g_arrStrSortIcon[ i ][ nSortState ] ); // 버튼 애니 변경.
|
|
break;
|
|
}
|
|
}
|
|
|
|
// 리스트 Refresh.
|
|
//RefreshListMember( m_nScrollPos );
|
|
}
|
|
|
|
// 모든 버튼정렬상태 해제.
|
|
void SUIGuildMemberTab::ClearBtnSortStateAll()
|
|
{
|
|
for( int i=0; i<2; ++i )
|
|
{
|
|
m_arrSortState[ i ] = 0;
|
|
m_arrSortBtn[ i ]->SetAniName( g_arrStrSortIcon[ i ][ 0 ] );
|
|
}
|
|
|
|
/*for( int i=0; i<MAX_BTN_SORT_STATE_SIZE; ++i )
|
|
{
|
|
m_arrSortState[ i ] = 0;
|
|
m_arrSortBtn[ i ]->SetAniName( g_arrStrSortIcon[ i ][ 0 ] );
|
|
}*/
|
|
|
|
m_arrMember = m_GuildMgr.GetMemberList();
|
|
|
|
// 리스트 Refresh.
|
|
RefreshListMember( m_nScrollPos );
|
|
}
|
|
|
|
|
|
|
|
inline void SUIGuildMemberTab::DisableBtnCtrl( const char * pStr )
|
|
{
|
|
KUIControl * pControl = dynamicCast< KUIControl * >( GetChild( pStr ) );
|
|
if( !( pControl->IsDisable() ) )
|
|
pControl->Disable();
|
|
}
|
|
|
|
inline void SUIGuildMemberTab::EnableBtnCtrl( const char * pStr )
|
|
{
|
|
KUIControl * pControl = dynamicCast< KUIControl * >( GetChild( pStr ) );
|
|
if( pControl->IsDisable() )
|
|
pControl->Enable();
|
|
}
|
|
|
|
|
|
// 권한처리.
|
|
void SUIGuildMemberTab::AuthorityProcess()
|
|
{
|
|
//----------------------------
|
|
// 길드가 없다.
|
|
//if( m_GuildMgr.GetMemberCount() < 1 )
|
|
//{
|
|
// DisableBtnCtrl( "header_static_connection_state" ); // 접속.
|
|
// DisableBtnCtrl( "header_icon_member_job_icon" ); // 직업.
|
|
// DisableBtnCtrl( "header_static_member_level" ); // 레벨.
|
|
// DisableBtnCtrl( "header_static_member_name" ); // 아이디
|
|
// DisableBtnCtrl( "header_button_unfold" ); // 확장.
|
|
// DisableBtnCtrl( "button_list_default_01" ); // 정렬취소.
|
|
// m_pScrollBar->SetShow( false );
|
|
//}
|
|
////----------------------------
|
|
//// 길드 존재
|
|
//else if( m_beforeGuildMember != m_GuildMgr.GetMemberCount() )
|
|
//{
|
|
// m_beforeGuildMember = m_GuildMgr.GetMemberCount(); // 이전 길드원수.
|
|
// EnableBtnCtrl( "header_static_connection_state" ); // 접속.
|
|
// EnableBtnCtrl( "header_icon_member_job_icon" ); // 직업.
|
|
// EnableBtnCtrl( "header_static_member_level" ); // 레벨.
|
|
// EnableBtnCtrl( "header_static_member_name" ); // 아이디
|
|
// EnableBtnCtrl( "header_button_unfold" ); // 확장.
|
|
// EnableBtnCtrl( "button_list_default_01" ); // 정렬취소.
|
|
// m_pScrollBar->SetShow( true );
|
|
//}
|
|
|
|
//----------------------------
|
|
// 길드 존재
|
|
if( m_GuildMgr.IsExist() )
|
|
{
|
|
m_beforeGuildMember = m_GuildMgr.GetMemberCount(); // 이전 길드원수.
|
|
EnableBtnCtrl( "header_static_connection_state" ); // 접속.
|
|
EnableBtnCtrl( "header_icon_member_job_icon" ); // 직업.
|
|
EnableBtnCtrl( "header_static_member_level" ); // 레벨.
|
|
EnableBtnCtrl( "header_static_member_name" ); // 아이디
|
|
EnableBtnCtrl( "header_static_member_point" );
|
|
EnableBtnCtrl( "header_button_unfold" ); // 확장.
|
|
EnableBtnCtrl( "button_list_default_01" ); // 정렬취소.
|
|
m_pScrollBar->SetShow( true );
|
|
}
|
|
|
|
// 길드없다.
|
|
else
|
|
{
|
|
DisableBtnCtrl( "header_static_connection_state" ); // 접속.
|
|
DisableBtnCtrl( "header_icon_member_job_icon" ); // 직업.
|
|
DisableBtnCtrl( "header_static_member_level" ); // 레벨.
|
|
DisableBtnCtrl( "header_static_member_name" ); // 아이디
|
|
DisableBtnCtrl( "header_static_member_point" );
|
|
DisableBtnCtrl( "header_button_unfold" ); // 확장.
|
|
DisableBtnCtrl( "button_list_default_01" ); // 정렬취소.
|
|
m_pScrollBar->SetShow( false );
|
|
}
|
|
}
|
|
|
|
|
|
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
// SUIGuildMemberList 2011. 10. 27 - marine
|
|
// SUIGuildMemberTab 의 자식..
|
|
// 공대파티, 공대 파티원의 초대를 편하게 하기 위해 길드원의 리스트 부분만 상속받은 클래스
|
|
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
|
|
SUIGuildMemberList::SUIGuildMemberList( SGameManager * pGameManager )
|
|
:SUIGuildMemberTab( pGameManager )
|
|
{
|
|
|
|
}
|
|
|
|
SUIGuildMemberList::~SUIGuildMemberList()
|
|
{
|
|
|
|
}
|
|
|
|
bool SUIGuildMemberList::InitControls( KPoint kPos )
|
|
{
|
|
KUIControl* rmark = dynamicCast<KUIControl*>(GetChild("mark_right_click_01"));
|
|
if(rmark)
|
|
rmark->SetShow(false);
|
|
return SUIGuildMemberTab::InitControls( kPos );
|
|
}
|
|
|
|
void SUIGuildMemberList::PumpUpMsgDBClick( DWORD lparam )
|
|
{
|
|
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_ITEM_Base == msg.type || ITEMTYPE::TYPE_ITEM_Column == msg.type )
|
|
{
|
|
// 귓말하기.
|
|
const char * pName = GetSelectedMemberName( msg.itemIndex );
|
|
|
|
if( pName )
|
|
{
|
|
// 2011. 10. 26 - marine 공대 초대창이 열려 있고, 레이드가 구성되있는 경우 선택된 길드원 이름을 공대 초대창으로 넘긴다.
|
|
if( (m_RaidMgr.GetPartyCount() > 0) && m_pGameManager->IsShow( SIMSG_TOGGLE_UIWINDOW::UIWINDOW_DUNGEON_UNIT_INVITATION) )
|
|
{
|
|
m_pGameManager->PostMsgAtDynamic( new SIMSG_UI_SEND_DATA(SIMSG_TOGGLE_UIWINDOW::UIWINDOW_DUNGEON_UNIT_INVITATION, pName ) ); // 이름 넘기고
|
|
m_pGameManager->PostMsgAtDynamic( new SIMSG_SHOW_UIWINDOW( SIMSG_TOGGLE_UIWINDOW::UIWINDOW_GUILD_MEMBER_LIST, false ) ); // 창 닫자..
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
void SUIGuildMemberList::PumpUpMsgLBtnClick_V( DWORD lparam)
|
|
{
|
|
PumpUpMsgLBtnClick(lparam);
|
|
|
|
MSG_LISTCONTROL msg = *( (MSG_LISTCONTROL *)( &lparam ) );
|
|
|
|
KUIControl * pControl;
|
|
if( m_pListGuild && m_pListGuild->GetControl( pControl, ( ITEMTYPE )msg.type, msg.itemIndex, msg.columnIndex ) )
|
|
{
|
|
// 아이템
|
|
if( ITEMTYPE::TYPE_ITEM_Base == msg.type || ITEMTYPE::TYPE_ITEM_Column == msg.type )
|
|
{
|
|
const char * pName = GetSelectedMemberName( msg.itemIndex );
|
|
|
|
if( pName )
|
|
m_pGameManager->PostMsgAtDynamic( new SIMSG_UI_SEND_DATA(SIMSG_TOGGLE_UIWINDOW::UIWINDOW_DUNGEON_UNIT_INVITATION, pName ) ); // 이름 넘긴다
|
|
}
|
|
}
|
|
|
|
}
|
|
void SUIGuildMemberList::PumpUpMsgRBtnClick( DWORD lparam )
|
|
{
|
|
// 우클릭 사용 안함..
|
|
return;
|
|
}
|
|
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
// SUIGuildMemberListView 2011. 10. 27 - marine
|
|
// SUIGuildMemberList의 프레임 클래스..
|
|
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
SUIGuildMemberListView::SUIGuildMemberListView( SGameManager * pGameManager )
|
|
:SUIWnd( pGameManager )
|
|
,m_pMemberWnd(NULL)
|
|
{
|
|
|
|
}
|
|
|
|
SUIGuildMemberListView::~SUIGuildMemberListView()
|
|
{
|
|
|
|
}
|
|
|
|
SUIWnd* SUIGuildMemberListView::CreateWnd( const char* szFile, KUIWndManager* pWndManager, KPoint kPos, int nWindowID )
|
|
{
|
|
// 커스텀 윈도우 move 영역 설정
|
|
SetCustomMovingRect( KRect( 17, 7, 227, 15 ) );
|
|
|
|
SUIWnd::CreateWnd( szFile, pWndManager, kPos, nWindowID );
|
|
|
|
// 길드원.
|
|
SUIWnd * pTapMember = new SUIGuildMemberList( m_pGameManager );
|
|
pTapMember->SetUseCutCaption(); // 컨트롤의 Caption 텍스트 자르기.
|
|
pTapMember->CreateWnd( "window_guild_main_member_list.nui", pWndManager, KPoint( kPos.x, kPos.y ) );
|
|
pTapMember->SetParent( this );
|
|
pTapMember->SetShow(true);
|
|
AddChild(pTapMember);
|
|
|
|
// 위치설정
|
|
KRect rtTab = GetChild( "listcontrol01" )->GetRect(); // 탭 컨트롤 위치지정을 위한 컨트롤.
|
|
pTapMember->MovePos( rtTab.left, rtTab.top );
|
|
|
|
m_pMemberWnd = pTapMember;
|
|
|
|
return this;
|
|
}
|
|
|
|
void SUIGuildMemberListView::OnNotifyUIWindowOpen(bool bOpen, bool bLimitWnd)
|
|
{
|
|
if (bOpen)
|
|
{
|
|
updateGuildMemberList();
|
|
}
|
|
}
|
|
|
|
void SUIGuildMemberListView::PumpUpMessage( LPCSTR lpszControlID, DWORD nMessage, DWORD lparam, DWORD wparam )
|
|
{
|
|
if( this->IsShow() )
|
|
{
|
|
switch( nMessage )
|
|
{
|
|
case KUI_MESSAGE::KBUTTON_CLICK :
|
|
{
|
|
if( !::_stricmp( lpszControlID, "button_close" ) )
|
|
m_pGameManager->PostMsgAtDynamic( new SIMSG_SHOW_UIWINDOW( SIMSG_TOGGLE_UIWINDOW::UIWINDOW_GUILD_MEMBER_LIST, false ) );
|
|
else if( !::_stricmp( lpszControlID, "button_erase" ) )
|
|
{
|
|
if( m_pGameManager->IsShow(SIMSG_TOGGLE_UIWINDOW::UIWINDOW_DUNGEON_UNIT_INVITATION) ) // 공대 파티장 초대
|
|
m_pGameManager->PostMsgAtDynamic( new SIMSG_UI_SEND_DATA(SIMSG_TOGGLE_UIWINDOW::UIWINDOW_DUNGEON_UNIT_INVITATION, "" ) ); // 이름 지우기..
|
|
//else if () // 공대 파티원 초대..
|
|
//{
|
|
// // 공대 파티원 초대창으로... 애나가 처리
|
|
//}
|
|
}
|
|
else if( !::_stricmp( lpszControlID, "button_ok" ) )
|
|
{
|
|
m_pGameManager->PostMsgAtDynamic( new SIMSG_SHOW_UIWINDOW( SIMSG_TOGGLE_UIWINDOW::UIWINDOW_GUILD_MEMBER_LIST, false ) );
|
|
}
|
|
|
|
}break;
|
|
|
|
case KUI_MESSAGE::KGENWND_MOVE:
|
|
{
|
|
LimitMoveWnd();
|
|
}break;
|
|
}
|
|
SUIWnd::PumpUpMessage( lpszControlID, nMessage, lparam, wparam );
|
|
}
|
|
}
|
|
|
|
void SUIGuildMemberListView::ProcMsgAtStatic( SGameMessage* pMsg )
|
|
{
|
|
switch(pMsg->nType)
|
|
{
|
|
case IMSG_UI_SEND_DATA:
|
|
{
|
|
SIMSG_UI_SEND_DATA *pData = (SIMSG_UI_SEND_DATA *)pMsg;
|
|
if(pData)
|
|
{
|
|
if( pData->m_strString == "guild_update" )
|
|
{
|
|
/// 2012.02.13 - prodongi
|
|
if (IsShow())
|
|
{
|
|
updateGuildMemberList();
|
|
}
|
|
}
|
|
else if(pData->m_strString == "name")
|
|
m_strSelectedName = pData->m_strText;
|
|
}
|
|
}break;
|
|
}
|
|
}
|
|
|
|
/// 2012.02.13 - prodongi
|
|
void SUIGuildMemberListView::updateGuildMemberList()
|
|
{
|
|
if(!m_pMemberWnd)
|
|
return ;
|
|
|
|
SUIGuildMemberList* memberList = dynamicCast<SUIGuildMemberList*>(m_pMemberWnd);
|
|
if (!memberList)
|
|
return ;
|
|
if (!memberList->isUIRefresh())
|
|
return ;
|
|
|
|
memberList->ForcedProcess(0);
|
|
|
|
} |