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

365 lines
9.3 KiB
C++

#include "SunClientPrecompiledHeader.h"
#ifdef _NA_008283_20150511_NOTIFICATIONS_SYSTEM
#include "uiNotificationsSystemListDialog.h"
#ifdef _NA_008800_20160510_COMBAT_RECORD_SYSTEM
#include "uiNotificationsSystemMan/uiNotificationsSystemMan.h"
#include "uiNotificationsSystemDialog/uiNotificationsSystemDialog.h"
#endif // _NA_008800_20160510_COMBAT_RECORD_SYSTEM
#include "uiNotificationsSystemMan/uiNotificationsSystemMan.h"
#include "InterfaceManager.h"
#include "GlobalFunc.h"
#include "Application.h"
#include "GameConst_Color.h"
WzID uiNotificationsSystemListDialog::wz_id_[DIALOG_MAX] =
{
StrToWzID("L000"),
StrToWzID("V000"),
};
uiNotificationsSystemListDialog::uiNotificationsSystemListDialog(InterfaceManager* ui_manager) :
uiBase(ui_manager),
is_show_(FALSE),
notifications_list_(NULL),
notifications_vscroll_(NULL),
current_scroll_value_(0),
max_scroll_value_(0),
notifications_system_manager_(NULL)
{
}
uiNotificationsSystemListDialog::~uiNotificationsSystemListDialog(void)
{
ClearList();
}
void uiNotificationsSystemListDialog::Init( CDrawBase* draw_base )
{
uiBase::Init(draw_base);
RegisterControlPosition(StrToWzID("L000"), DLGPOS_NOTIFICATIONS_LIST);
RegisterControlPosition(StrToWzID("V000"), DLGPOS_NOTIFICATIONS_VSCROLL);
notifications_list_ = static_cast<CCtrlListWZ*>(getControl(DLGPOS_NOTIFICATIONS_LIST));
notifications_list_->SetSellHeight(21);
notifications_list_->SetSellHeight(16);
notifications_list_->SetStartLineGapTop(5);
notifications_list_->SetStartLineGapLeft(8);
notifications_vscroll_ = static_cast<CCtrlVScrollWZ*>(getControl(DLGPOS_NOTIFICATIONS_VSCROLL));
notifications_vscroll_->SetChangeSizeThumb(33);
notifications_system_manager_ = static_cast<uiNotificationsSystemMan*>(GetMan());
VScrollDialog::ResizeingVScrollControl(0, 0);
}
void uiNotificationsSystemListDialog::Release()
{
if ( notifications_list_ )
{
notifications_list_->DeleteItemAll();
}
notifications_deque_.clear();
}
void uiNotificationsSystemListDialog::OnShowWindow( BOOL is_show )
{
#ifdef _NA_008800_20160510_COMBAT_RECORD_SYSTEM
uiNotificationsSystemDialog* ui_notifications_system_dialog =
GET_CAST_DIALOG(uiNotificationsSystemDialog, IM_NOTIFICATIONS_SYSTEM_MANAGER::NOTIFICATIONS_SYSTEM_DIALOG);
#endif // _NA_008800_20160510_COMBAT_RECORD_SYSTEM
if ( is_show )
{
MoveDefaultPosition();
#ifdef _NA_008800_20160510_COMBAT_RECORD_SYSTEM
if ( ui_notifications_system_dialog )
{
ui_notifications_system_dialog->SetEyeCheckState(true);
}
#endif // _NA_008800_20160510_COMBAT_RECORD_SYSTEM
}
else
{
#ifdef _NA_008800_20160510_COMBAT_RECORD_SYSTEM
if ( ui_notifications_system_dialog )
{
ui_notifications_system_dialog->SetEyeCheckState(false);
}
#endif // _NA_008800_20160510_COMBAT_RECORD_SYSTEM
}
}
void uiNotificationsSystemListDialog::OnUpdateSolarDialog()
{
VScrollDialog::Update();
UpdateScrollPosition();
}
void uiNotificationsSystemListDialog::OnRenderSolarDialog()
{
}
void uiNotificationsSystemListDialog::MessageProc( SI_MESSAGE* message )
{
switch ( message->eResultMsg )
{
case RT_MSG_SB_LINETOP:
{
switch (getCtrlIDToPos(message->dwCtrlID))
{
case DLGPOS_NOTIFICATIONS_VSCROLL:
{
if (current_scroll_value_ > 0)
{
current_scroll_value_ -= 1;
notifications_vscroll_->SetScrollPosWZ(current_scroll_value_);
notifications_list_->SetBeginDrawIndex(current_scroll_value_);
}
}
break;
}
}
break;
case RT_MSG_SB_LINEBOTTOM:
{
switch(getCtrlIDToPos(message->dwCtrlID))
{
case DLGPOS_NOTIFICATIONS_VSCROLL:
{
if (current_scroll_value_ < max_scroll_value_)
{
current_scroll_value_ += 1;
notifications_vscroll_->SetScrollPosWZ(current_scroll_value_);
notifications_list_->SetBeginDrawIndex(current_scroll_value_);
}
}
break;
}
}
break;
case RT_MSG_LBUTTONCLICK:
{
// no operation
}
break;
default:
{
SolarDialog::MessageProc( message );
VScrollDialog::MessageProc(message);
}
}
}
void uiNotificationsSystemListDialog::MoveDefaultPosition()
{
POINT pt = g_pApplication->Get2DModeMapping();
RECT rcClient;
GetDialogWZ()->GetClientRect(&rcClient);
POINT MyInitialPoint;
MyInitialPoint.x = pt.x - (rcClient.right- rcClient.left);//-386;
MyInitialPoint.y = pt.y - (rcClient.bottom - rcClient.top + 125) - 4;
this->MoveWindowWZ((float)MyInitialPoint.x, (float)MyInitialPoint.y);
}
void uiNotificationsSystemListDialog::MoveDefaultWindowPos()
{
SolarDialog::MoveDefaultWindowPos();
MoveDefaultPosition();
}
POSTYPE uiNotificationsSystemListDialog::getCtrlIDToPos( WzID wzId )
{
for( POSTYPE i = 0 ; i < DIALOG_MAX ; ++i )
{
if( wz_id_[i] == wzId )
{
return i;
}
}
return DIALOG_MAX;
}
void uiNotificationsSystemListDialog::UpdateScrollPosition()
{
int total = notifications_list_->GetListRowCnt();//입력된 총 라인수를 구한다.
if( total > MAX_SHOW_NOTIFICATIONS_LINE )
{
current_scroll_value_ = notifications_vscroll_->GetScrollPosWZ();
}
else
{
current_scroll_value_ = 0;
}
notifications_list_->SetBeginDrawIndex( current_scroll_value_ );
}
void uiNotificationsSystemListDialog::PushBackNotificationsMsg( std::string notifications_message,
const NotificationType& notification_type,
const NotificationInfo& info )
{
if (notifications_list_ == NULL)
{
return;
}
if (notifications_vscroll_ == NULL)
{
return;
}
int size = notifications_list_->GetListRowCnt();
if ( size < MAX_NOTIFICATION_COUNT * 2 )
{
notifications_deque_.push_back(notifications_message);
AddString(const_cast<TCHAR*>(notifications_message.c_str()), notification_type, info);
}
else
{
std::deque<std::string>::iterator iter = notifications_deque_.begin();
std::string begin_message = *iter;
notifications_deque_.pop_front();
notifications_deque_.push_back(notifications_message);
AddString(const_cast<TCHAR*>(notifications_message.c_str()), notification_type, info);
}
}
void uiNotificationsSystemListDialog::AddString( TCHAR* message, const NotificationType& notification_type, const NotificationInfo& info )
{
int size = notifications_list_->GetListRowCnt();
std::vector<util::_tstring> str_vector;
RECT rect_size = notifications_list_->GetSize();
int Interval = 20;
GlobalFunc::ProcessWordWrapByFontSize(&str_vector, const_cast<TCHAR*>(message), StrToWzID("mn12"), _tcslen(message), rect_size.right - Interval);
if ( size >= MAX_NOTIFICATION_COUNT * 2 )
{
// 라인 수만큼 지움
for (int count = str_vector.size(); count > 0; --count)
{
notifications_list_->DeleteItem(0);
--current_scroll_value_;
}
if (current_scroll_value_ < 0)
current_scroll_value_ = 0;
}
for ( unsigned int i = 0; i < str_vector.size(); ++i )
{
int index = notifications_list_->InsertItemBack();
WzColor text_color = WzColor_RGBA(255, 255, 0, 255);
if ( notifications_system_manager_ )
{
text_color = notifications_system_manager_->GetNotificationsTextColor(info, notification_type);
}
GlobalFunc::SetItem(notifications_list_, index, 0, const_cast<TCHAR*>(str_vector[i].c_str()), StrToWzID("mn12"),
DT_LEFT | DT_VCENTER,
RGBA(0, 0, 0, 0),
GlobalFunc::WzColorToRGBA(text_color),
GlobalFunc::WzColorToRGBA(text_color));
}
UpdateScrollBar();
}
void uiNotificationsSystemListDialog::UpdateScrollBar()
{
notifications_list_->SetUnuseSelBar(FALSE);
max_scroll_value_ = notifications_list_->GetListRowCnt() - MAX_SHOW_NOTIFICATIONS_LINE;
if(max_scroll_value_ <= 0)
{
max_scroll_value_ = 0;
current_scroll_value_ = 0;
notifications_list_->SetBeginDrawIndex(current_scroll_value_);
}
notifications_vscroll_->SetScrollRangeWZ(0,max_scroll_value_);
if ( max_scroll_value_ - current_scroll_value_ <= 7 || current_scroll_value_ > max_scroll_value_)
{
current_scroll_value_ = max_scroll_value_;
}
notifications_vscroll_->SetScrollPosWZ(current_scroll_value_);
notifications_list_->SetBeginDrawIndex(current_scroll_value_);
}
void uiNotificationsSystemListDialog::ClearList()
{
if ( notifications_list_ )
{
notifications_list_->DeleteItemAll();
}
notifications_deque_.clear();
}
bool uiNotificationsSystemListDialog::OnVScrollUp( SI_MESSAGE* message )
{
if (current_scroll_value_ > 0)
{
current_scroll_value_ -= 1;
notifications_vscroll_->SetScrollPosWZ(current_scroll_value_);
notifications_list_->SetBeginDrawIndex(current_scroll_value_);
return true;
}
return false;
}
bool uiNotificationsSystemListDialog::OnVScrollDown( SI_MESSAGE* message )
{
if (current_scroll_value_ < max_scroll_value_)
{
current_scroll_value_ += 1;
notifications_vscroll_->SetScrollPosWZ(current_scroll_value_);
notifications_list_->SetBeginDrawIndex(current_scroll_value_);
return true;
}
return false;
}
bool uiNotificationsSystemListDialog::OnVScrollThumb( SI_MESSAGE* message )
{
if (VScrollDialog::OnVScrollThumb(message) == true)
{
notifications_list_->SetBeginDrawIndex(notifications_vscroll_->GetScrollPosWZ());
return true;
}
return false;
}
CCtrlVScrollWZ* uiNotificationsSystemListDialog::vscroll_control()
{
return GetVScrollControlWZ(GetControlID_byPosition(DLGPOS_NOTIFICATIONS_VSCROLL));
}
bool uiNotificationsSystemListDialog::GetScrollArea( RECT& area )
{
if (IsOverControl(GetControlWZ_byPosition(DLGPOS_NOTIFICATIONS_LIST)) == true)
{
area = GetControlWZ_byPosition(DLGPOS_NOTIFICATIONS_LIST)->GetSizeRect();
return true;
}
return false;
}
#endif // _NA_008283_20150511_NOTIFICATIONS_SYSTEM