PGRData/Script/matrix/xui/xuisocial/contactmodel/XUiGridContactItem.lua

236 lines
No EOL
7.2 KiB
Lua

local XUiGridContactItem = XClass(nil, "XUiGridContactItem")
function XUiGridContactItem:Ctor(ui)
self.GameObject = ui.gameObject
self.Transform = ui.transform
XTool.InitUiObject(self)
self:InitAutoScript()
end
function XUiGridContactItem:ResetStatus()
self.TogSelect.gameObject:SetActiveEx(false)
end
function XUiGridContactItem:Init(mainPanel, parent)
self.MainPanel = mainPanel
self.Parent = parent
XEventManager.AddEventListener(XEventId.EVENT_CHAT_RECEIVE_PRIVATECHAT, self.NewChatMsgHandler, self)
end
-- auto
-- Automatic generation of code, forbid to edit
function XUiGridContactItem:InitAutoScript()
self.SpecialSoundMap = {}
self:AutoAddListener()
end
function XUiGridContactItem:GetAutoKey(uiNode, eventName)
if not uiNode then
return
end
return eventName .. uiNode:GetHashCode()
end
function XUiGridContactItem:RegisterListener(uiNode, eventName, func)
local key = self:GetAutoKey(uiNode, eventName)
if not key then
return
end
local listener = self.AutoCreateListeners[key]
if listener ~= nil then
uiNode[eventName]:RemoveListener(listener)
end
if func ~= nil then
if type(func) ~= "function" then
XLog.Error("XUiGridContactItem:RegisterListener函数错误, 参数func需要是function类型, func的类型是" .. type(func))
end
listener = function(...)
XSoundManager.PlayBtnMusic(self.SpecialSoundMap[key], eventName)
func(self, ...)
end
uiNode[eventName]:AddListener(listener)
self.AutoCreateListeners[key] = listener
end
end
function XUiGridContactItem:AutoAddListener()
self.AutoCreateListeners = {}
XUiHelper.RegisterClickEvent(self, self.BtnView, self.OnBtnViewClick)
self:RegisterListener(self.TogSelect, "onValueChanged", self.OnTogSelectValueChanged)
self.PanelChat.CallBack = function() self:OnBtnChatClick() end
self.BtnRename.CallBack = function() self:OnBtnRenameClick() end
end
-- auto
function XUiGridContactItem:OnTogSelectValueChanged()
if self.IsDeleting then
self.Parent:SetSelectDeleteId(self.Id, self.TogSelect.isOn)
end
end
function XUiGridContactItem:OnBtnChatClick()
--进入私聊
--关闭新消息提示
self.TxtNewMessage.text = ''
self.MainPanel:OpenPrivateChatView(self.Id)
XDataCenter.ChatManager.SetPrivateChatReadByFriendId(self.Id)
end
function XUiGridContactItem:OnBtnRenameClick()
if self.Data then
XLuaUiManager.Open("UiSocialRename", self.Data.FriendId, self.Data.NickName, function()
self:RefreshFriendRemark()
end)
end
end
function XUiGridContactItem:OnBtnViewClick()
--个人信息
XDataCenter.PersonalInfoManager.ReqShowInfoPanel(self.Id, nil, function()
-- body
end)
end
function XUiGridContactItem:RefreshFriendRemark()
if self.Data then
local remark = XDataCenter.SocialManager.GetFriendRemark(self.Data.FriendId)
if remark ~= "" then
self.TxtName.text = remark
self.TxtRemark.text = string.format("(%s)", self.Data.NickName)
else
self.TxtName.text = self.Data.NickName
self.TxtRemark.text = ""
end
self:Show()
end
end
function XUiGridContactItem:ShowDeleteState(isDelete, selectDelete)
self.IsDeleting = isDelete
self.TogSelect.gameObject:SetActiveEx(isDelete)
self.TogSelect.isOn = selectDelete
self:ShowGift(not isDelete)
end
function XUiGridContactItem:SetSelectDelete(isSelect)
self.TogSelect.isOn = isSelect
end
function XUiGridContactItem:Refresh(data, isDelete, selectDelete)
if data == nil then
return
end
local medalConfig = XMedalConfigs.GetMeadalConfigById(data.CurrMedalId)
local medalIcon = nil
if medalConfig then
medalIcon = medalConfig.MedalIcon
end
if medalIcon ~= nil then
self.MedalRawImage:SetRawImage(medalIcon)
self.MedalRawImage.gameObject:SetActiveEx(true)
else
self.MedalRawImage.gameObject:SetActiveEx(false)
end
self:ResetStatus()
self.Data = data
self.Id = data.FriendId
self:RefreshFriendRemark()
XUiPlayerLevel.UpdateLevel(data.Level, self.TxtLevel)
self.TxtFetterLevel.text = XDataCenter.SocialManager.GetFriendExpLevel(data.FriendId)
if data.IsOnline then
self.TxtOnline.gameObject:SetActiveEx(true)
self.PanelRoleOffLine.gameObject:SetActiveEx(false)
self.PanelRoleOnLine.gameObject:SetActiveEx(true)
self.TxtRecentLoginTime.text = ""
else
self.TxtOnline.gameObject:SetActiveEx(false)
self.PanelRoleOffLine.gameObject:SetActiveEx(true)
self.PanelRoleOnLine.gameObject:SetActiveEx(false)
self.TxtRecentLoginTime.text = CS.XTextManager.GetText("FriendLatelyLogin") .. XUiHelper.CalcLatelyLoginTime(data.LastLoginTime)
end
XUiPLayerHead.InitPortrait(data.Icon, data.HeadFrameId, self.PanelRoleOnLine)
XUiPLayerHead.InitPortrait(data.Icon, data.HeadFrameId, self.PanelRoleOffLine)
self:ShowDeleteState(isDelete, selectDelete)
end
function XUiGridContactItem:ShowGift(show)
--是否有礼物标识
if show then
local haveGift = XDataCenter.ChatManager.CheckDoesHaveGiftByFriendId(self.Id)
self.GridCommon.gameObject:SetActiveEx(haveGift)
self.ImgNone.gameObject:SetActiveEx(not haveGift)
else
self.GridCommon.gameObject:SetActiveEx(false)
self.ImgNone.gameObject:SetActiveEx(false)
end
end
function XUiGridContactItem:Show()
self.GameObject:SetActiveEx(true)
local chatDataList = XDataCenter.ChatManager.GetPrivateDynamicList(self.Id)
if not chatDataList or #chatDataList <= 0 then
self.TxtNewMessage.text = ""
self:UpdateReadStatus()
return
end
local msg = chatDataList[1]
if msg then
self:NewChatMsgHandler(msg)
end
self:UpdateReadStatus()
end
function XUiGridContactItem:NewChatMsgHandler(chatData)
--接收到新消息
if (chatData:GetChatTargetId() ~= self.Id) then
return
end
if XTool.UObjIsNil(self.GameObject) then
return
end
self:UpdateReadStatus()
if chatData.MsgType == ChatMsgType.Emoji then
self.TxtNewMessage.text = CS.XTextManager.GetText("EmojiText")
elseif chatData.MsgType == ChatMsgType.Tips then
self.TxtNewMessage.text = XDataCenter.ChatManager.CreateGiftTips(chatData)
elseif chatData.MsgType == ChatMsgType.Gift then
self.TxtNewMessage.text = XDataCenter.ChatManager.CreateGiftTips(chatData)
elseif chatData.MsgType == ChatMsgType.RoomMsg then
self.TxtNewMessage.text = chatData:GetRoomMsgContent()
else
self.TxtNewMessage.text = chatData.Content
if not string.IsNilOrEmpty(chatData.CustomContent) then
self.TxtNewMessage.supportRichText = true
else
self.TxtNewMessage.supportRichText = false
end
end
self:ShowGift(true)
end
function XUiGridContactItem:UpdateReadStatus()
local code = XDataCenter.ChatManager.GetPrivateUnreadChatCountByFriendId(self.Id) > 0
self.ImgNewChatOff.gameObject:SetActiveEx(not code)
self.ImgNewChatOn.gameObject:SetActiveEx(code)
end
return XUiGridContactItem