2025-06-04 05:02:57 +08:00

572 lines
17 KiB
Plaintext

PictureDetailPanel = class("PictureDetailPanel", ContainerView)
PictureDetailPanel.ViewType = UIViewType.NormalLayer
autoImport("PictureWallCell")
autoImport("PicutureWallSyncPanel")
local tempVector3 = LuaVector3.zero
local tempRot = LuaQuaternion.identity
PictureDetailPanel.GetWallPicThumbnail = "PictureDetailPanel_GetWallPicThumbnail"
PictureDetailPanel.CheckIsCurrent = "PictureDetailPanel_CheckIsCurrent"
PictureDetailPanel.NewKeyTag = "PictureDetailPanel_NewKeyTag_%s_%s"
PictureDetailPanel.CheckCurrentShowPhoto = "PictureDetailPanel_CheckCurrentShowPhoto"
function PictureDetailPanel:Init()
self:AddViewEvts()
self:initView()
self:initData()
self:requestFrameData()
end
function PictureDetailPanel:requestFrameData()
ServicePhotoCmdProxy.Instance:CallQueryUserPhotoListPhotoCmd()
ServicePhotoCmdProxy.Instance:CallQueryFramePhotoListPhotoCmd(self.frameId)
end
function PictureDetailPanel:AddViewEvts()
self:AddListenEvt(PictureWallDataEvent.PhotoCompleteCallback,self.photoCompleteCallback);
self:AddListenEvt(PictureWallDataEvent.PhotoProgressCallback,self.photoProgressCallback);
self:AddListenEvt(PictureWallDataEvent.MapEnd,self.MapEnd);
self:AddListenEvt(ServiceEvent.PhotoCmdQueryFramePhotoListPhotoCmd,self.QueryFramePhotoListPhotoCmd);
self:AddListenEvt(ServiceEvent.PhotoCmdFrameActionPhotoCmd,self.PhotoCmdFrameActionPhotoCmd);
self:AddListenEvt(PictureWallDataEvent.ShowRedTip,self.ShowRedTip);
self:AddListenEvt(ServiceEvent.PhotoCmdUpdateFrameShowPhotoCmd,self.UpdateCurPhoto);
self:AddListenEvt(PictureWallManager.WallPicThumbnailDownloadProgressCallback,self.WallhumbnailPhDlPgCallback);
self:AddListenEvt(PictureWallManager.WallPicThumbnailDownloadCompleteCallback,self.WallThumbnailPhDlCpCallback);
self:AddListenEvt(PictureWallManager.WallPicThumbnailDownloadErrorCallback,self.WallThumbnailPhDlErCallback);
end
function PictureDetailPanel:WallhumbnailPhDlPgCallback( note )
local data = note.body
local cell = self:GetItemCellById(data.photoData)
if(cell)then
cell:setDownloadProgress(data.progress)
end
end
function PictureDetailPanel:WallThumbnailPhDlCpCallback( note )
local data = note.body
local cell = self:GetItemCellById(data.photoData)
if(cell)then
self:GetWallPicThumbnail(cell)
end
end
function PictureDetailPanel:WallThumbnailPhDlErCallback( note )
local data = note.body
local cell = self:GetItemCellById(data.photoData)
if(cell)then
cell:setDownloadFailure()
end
end
function PictureDetailPanel:ShowRedTip( note )
local size = note.body
if(size>0)then
self:Show(self.redTip)
self:ShowMsgAnim(note.body)
else
self:Hide(self.redTip)
end
end
function PictureDetailPanel:GetUploadSusPicture( )
return 0
end
function PictureDetailPanel:ShowMsgAnim(count)
-- body
-- local count = self:GetUploadSusPicture()
-- self.SusMsg.text = string.format(ZhString.PersonalPictureCell_UploadSusmsg,count)
-- self:Show(self.SusMsg.gameObject)
-- -- play:Play(true)
end
function PictureDetailPanel:PhotoCmdFrameActionPhotoCmd( note )
self:requestFrameData()
-- local serverData = Game.PictureWallManager:getServerDataByFrameId(self.frameId)
-- if(serverData)then
-- if(self.serverData and Game.PictureWallManager:checkSamePicture(self.serverData.photoData,serverData.photoData))then
-- return
-- end
-- self.serverData = serverData
-- local photoData = self.serverData.photoData
-- self.anglez = photoData.anglez
-- self:getPhoto()
-- else
if(not self.currentData)then
local texture = self.photo.mainTexture
self.photo.mainTexture = nil
Object.DestroyImmediate(texture)
end
end
function PictureDetailPanel:UpdateCurPhoto( )
-- local serverData = Game.PictureWallManager:getServerDataByFrameId(self.frameId)
-- if(serverData)then
-- if(self.serverData and Game.PictureWallManager:checkSamePicture(self.serverData.photoData,serverData.photoData))then
-- return
-- end
-- self.serverData = serverData
-- local photoData = self.serverData.photoData
-- self.anglez = photoData.anglez
-- self:getPhoto()
-- else
-- local texture = self.photo.mainTexture
-- self.photo.mainTexture = nil
-- Object.DestroyImmediate(texture)
-- end
end
local originSize = 0
function PictureDetailPanel:QueryFramePhotoListPhotoCmd( note )
local data = note.body
local list = {}
if(data and data.frameid == self.frameId)then
local photos = data.photos
for i=1,#photos do
local single = photos[i]
local photoData = PhotoData.new(single)
-- Game.PictureWallManager:log("QueryFramePhotoListPhotoCmd:",single.charid,single.source,single.sourceid,single.time)
list[#list+1] = photoData
end
end
local curSize = #list
self:SetData(list)
local cells = self:GetItemCells()
if(#list>0 and self.firstActivie)then
self.firstActivie = false
self.switchCtPlay:Play(true)
end
if((0 == originSize or originSize > curSize ) and curSize>0)then
self:CellClickEvent(cells[1])
end
if(curSize == 0)then
self:Hide(self.RemoveCt)
end
originSize = curSize
end
function PictureDetailPanel:changePhotoSize()
local frameData = Table_ScenePhotoFrame[self.frameId]
local dir = 0
if(frameData)then
dir = frameData.Dir
end
if(dir == 1)then
self.photo.width = 400
self.photo.height = 600
end
end
function PictureDetailPanel:photoCompleteCallback( note )
-- body
local data = note.body
Game.PictureWallManager:log("PictureDetailPanel:photoCompleteCallback1",data.photoData.charid,self.currentData.charid,data.byte)
if(self.currentData and Game.PictureWallManager:checkSamePicture(data.photoData,self.currentData))then
self:completeCallback(data.byte)
end
end
function PictureDetailPanel:photoProgressCallback( note )
-- body
local data = note.body
Game.PictureWallManager:log("PictureDetailPanel:photoProgressCallback",data.photoData.charid,self.currentData.charid)
if(self.currentData and Game.PictureWallManager:checkSamePicture(data.photoData,self.currentData))then
self:progressCallback(data.progress)
end
end
function PictureDetailPanel:showAnim()
-- body
tempVector3:Set(0,0,0)
self.gameObject.transform.localScale = tempVector3
local sceneryData = self.viewdata.viewdata.serverData
local trans = self.viewdata.viewdata.trans
local gm = NGUIUtil:GetCameraByLayername("Default");
local x,y = LuaGameObject.WorldToViewportPointByTransform(gm,trans.transform,Space.World)
x = 1280*(x - 0.5)
y = 720*(y - 0.5)
-- helplog(LuaGameObject.WorldToScreenPointByTransform(gm,trans.transform,Space.Self))
-- tempVector3:Set(LuaGameObject.ScreenToWorldPointByVector3(cm,tempVector3))
-- tempVector3:Set(LuaGameObject.InverseTransformPointByVector3(self.gameObject.transform.parent,tempVector3))
tempVector3:Set(x,y,0)
local tweenPosition = self.gameObject:GetComponent(TweenPosition)
local play = self.gameObject:GetComponent(UIPlayTween)
tweenPosition.from = tempVector3
self.gameObject.transform.localPosition = tempVector3
EventDelegate.Set(play.onFinished,function ( )
self:showOtherUI()
end)
play:Play(true)
end
function PictureDetailPanel:showOtherUI( )
self:Show(self.leftSliderCt)
self:Show(self.UpdateCt)
self:Hide(self.scrollView)
self:Show(self.scrollView)
end
function PictureDetailPanel:MapEnd( note )
self:CloseSelf()
end
function PictureDetailPanel:OnEnter( )
-- body
self:showAnim()
end
function PictureDetailPanel:initData( )
-- body
self:initDefaultTextureSize()
self.serverData = self.viewdata.viewdata.serverData
self.frameId = self.viewdata.viewdata.frameId
if(self.serverData and self.serverData.photoData)then
local photoData = self.serverData.photoData
self.anglez = photoData.anglez
self.isThumbnail = false
else
self:changePhotoSize()
end
-- LeanTween.cancel(self.gameObject)
-- LeanTween.delayedCall(self.gameObject,0.1,function ( )
-- self:getPhoto()
-- end)
self.currentData = nil
self.firstActivie = true
end
function PictureDetailPanel:ScrollViewRevert(callback)
self.revertCallBack = callback;
self.scrollView:Revert();
end
function PictureDetailPanel:initView( )
-- body
self.scrollView = self:FindComponent("ItemScrollView", ROUIScrollView);
self.scrollView.OnStop = function ()
self:ScrollViewRevert();
end
self.photo = self:FindGO("photo"):GetComponent(UITexture)
self.progress = self:FindGO("loadProgress"):GetComponent(UILabel)
self:Hide(self.progress.gameObject)
self.leftSlider = self:FindComponent("leftSlider",TweenPosition)
self.leftSliderCt = self:FindGO("leftSliderCt")
self.UpdateCt = self:FindGO("UpdateCt")
self.frameSizeLabel = self:FindComponent("frameSizeLabel",UILabel)
self.redTip = self:FindGO("redTip")
self.PhotoCt = self:FindGO("PhotoCt")
self.RemoveCt = self:FindGO("RemoveCt")
self:Hide(self.RemoveCt)
self:Hide(self.redTip)
self:Hide(self.leftSliderCt)
self:Hide(self.UpdateCt)
self.SusMsg = self:FindComponent("SusMsg",UILabel)
self.tipMsg = self:FindComponent("tipMsg",UILabel)
self:Hide(self.SusMsg.gameObject)
self.tipMsg.text = ZhString.DetailPictureShowOther_TipMsg
self.switchCtPlay = self:FindComponent("switchCt",UIPlayTween)
local itemContainer = self:FindGO("bag_itemContainer");
local wrapConfig = {
wrapObj = itemContainer,
pfbNum = 6,
cellName = "PictureWallCell",
control = PictureWallCell,
dir = 1,
}
self.wraplist = WrapCellHelper.new(wrapConfig);
self.wraplist:AddEventListener(MouseEvent.MouseClick, self.CellClickEvent, self);
self.wraplist:AddEventListener(PictureDetailPanel.GetWallPicThumbnail, self.GetWallPicThumbnail, self);
-- self.wraplist:AddEventListener(PictureDetailPanel.CheckIsCurrent, self.CheckIsCurrent, self);
self:AddClickEvent(self.UpdateCt,function ( )
-- body
local uploads = PhotoDataProxy.Instance:getUploadedPhoto()
local uploadsSize = PhotoDataProxy.Instance:getUploadedPhotoSize()
-- if(PhotoDataProxy.Instance:checkPhotoSyncPermission() and uploadsSize > #uploads)then
if(PhotoDataProxy.Instance:checkPhotoSyncPermission())then
self:sendNotification(UIEvent.JumpPanel, {view = PanelConfig.PicutureWallSyncPanel,viewdata = {frameId = self.frameId,from = PicutureWallSyncPanel.PictureSyncFrom.GuildWall}})
self:Hide(self.SusMsg.gameObject)
self:Hide(self.redTip)
PhotoDataProxy.Instance:clearToSeeDatas()
else
MsgManager.ShowMsgByIDTable(997)
end
end)
self:AddButtonEvent("RemoveCt",function ( )
-- body
if(self.currentData)then
MsgManager.ConfirmMsgByID(25404,function ( ... )
-- body
local list = {{source = self.currentData.source,sourceid = self.currentData.sourceid}}
ServicePhotoCmdProxy.Instance:CallFrameActionPhotoCmd(self.frameId,PhotoCmd_pb.EFRAMEACTION_REMOVE,list)
self.currentData = nil
end)
end
end)
self:SetData({})
end
function PictureDetailPanel:CellClickEvent(cellCtl)
if(cellCtl and cellCtl.data)then
helplog("CellClickEvent:",cellCtl.data.charid,Game.Myself.data.id)
if(Game.PictureWallManager:checkSamePicture(cellCtl.data,self.currentData))then
return
end
cellCtl:IsCurrent(true)
local oldIndex = self:GetIndexByCellData(self.currentData)
if(oldIndex)then
local cells = self:GetItemCells()
local ctl = cells[oldIndex]
ctl:IsCurrent(false)
end
self.currentData = cellCtl.data
self.anglez = self.currentData.anglez
self:getPhoto(self.currentData)
if(self.currentData.isMyself)then
self:IsShowRemoveBtn(true)
else
self:IsShowRemoveBtn(false)
end
else
self:Hide(self.RemoveCt)
self.currentData = nil
end
end
function PictureDetailPanel:GetWallPicThumbnail(cellCtl)
if(cellCtl and cellCtl.data)then
Game.PictureWallManager:GetPicThumbnailByCell(cellCtl)
-- if(self.serverData and Game.PictureWallManager:checkSamePicture(cellCtl.data,self.serverData.photoData))then
-- cellCtl:IsCurrent(true)
-- local panel = self.scrollView.panel
-- if(panel)then
-- local bound = NGUIMath.CalculateRelativeWidgetBounds(panel.cachedTransform,cellCtl.gameObject.transform)
-- -- printRed(bound)
-- local offset = panel:CalculateConstrainOffset(bound.min,bound.max)
-- -- printRed(offset)
-- offset = Vector3(0,offset.y,0)
-- self.scrollView:MoveRelative(offset)
-- end
-- else
-- cellCtl:IsCurrent(false)
-- end
end
end
function PictureDetailPanel:GetIndexByCellData(data)
if(not data)then
return
end
local cells = self:GetItemCells()
for i=1,#cells do
local single = cells[i]
if(single.data)then
if(Game.PictureWallManager:checkSamePicture(single.data,data))then
return i
end
end
end
end
function PictureDetailPanel:SetData(datas, noResetPos)
self.frameSizeLabel.text = string.format(ZhString.PersonalPictureCell_CurFrameShowState,#datas,PhotoDataProxy.Instance:getTotalCountPerFrame())
self.wraplist:UpdateInfo(datas);
if(datas and #datas>1)then
self:Show(self.tipMsg.gameObject)
else
self:Hide(self.tipMsg.gameObject)
end
local cells = self:GetItemCells()
if(cells and #cells>0)then
for i=1,#cells do
local single = cells[i]
if(Game.PictureWallManager:checkSamePicture(single.data,self.currentData))then
single:IsCurrent(true)
else
single:IsCurrent(false)
end
end
end
if(not noResetPos)then
self.wraplist:ResetPosition()
end
self.scrollView:ResetPosition()
end
function PictureDetailPanel:initDefaultTextureSize( )
-- body
self.originWith = self.photo.width
self.originHeight = self.photo.height
end
function PictureDetailPanel:setTexture( texture )
-- body
local anglez = 0
if(self.anglez >=45 and self.anglez <= 135)then
anglez = 90
elseif(self.anglez >= 225 and self.anglez <= 315)then
anglez = 270
elseif(self.anglez >=135 and self.anglez <=225)then
anglez = 180
end
tempVector3:Set(0, 0, anglez)
tempRot.eulerAngles = tempVector3
self.PhotoCt.transform.localRotation = tempRot
local orginRatio = self.originWith / self.originHeight
local textureRatio = 0
if(anglez == 90 or anglez == 270)then
textureRatio = texture.height / texture.width
else
textureRatio = texture.width / texture.height
end
local wRatio = math.min(orginRatio,textureRatio) == orginRatio
local height = self.originHeight
local width = self.originWith
if(wRatio)then
height = self.originWith/textureRatio
else
width = self.originHeight*textureRatio
end
if(anglez == 90 or anglez == 270)then
self.photo.width = height
self.photo.height = width
else
self.photo.width = width
self.photo.height = height
end
Object.DestroyImmediate(self.photo.mainTexture)
self.photo.mainTexture = texture
end
function PictureDetailPanel:getPhoto( photoData )
-- body
if(photoData)then
local serverData = Game.PictureWallManager:getServerData(photoData)
local bytes = Game.PictureWallManager:GetBytes(photoData)
if(bytes)then
self:completeCallbackBytes(bytes)
else
local tBytes
local thumbnail = true
if(photoData.source == ProtoCommon_pb.ESOURCE_PHOTO_SCENERY)then
if(photoData.isBelongAccPic)then
tBytes = UnionWallPhotoNew.Ins():TryGetThumbnailFromLocal_ScenicSpot_Account(photoData.charid,photoData.sourceid,photoData.time)
else
tBytes = UnionWallPhotoNew.Ins():TryGetThumbnailFromLocal_ScenicSpot(photoData.charid,photoData.sourceid,photoData.time)
end
elseif(photoData.source == ProtoCommon_pb.ESOURCE_PHOTO_SELF)then
tBytes = UnionWallPhotoNew.Ins():TryGetThumbnailFromLocal_Personal(photoData.charid,photoData.sourceid,photoData.time)
end
if(tBytes)then
self:completeCallback(tBytes,thumbnail)
elseif(serverData and serverData.texture)then
self:completeCallbackThumbnailTexture(serverData.texture)
end
Game.PictureWallManager:tryGetOriginImage(photoData)
end
end
end
function PictureDetailPanel:completeCallbackBytes(bytes )
-- body
local texture = Texture2D(0,0,TextureFormat.RGB24,false)
local bRet = ImageConversion.LoadImage(texture, bytes)
if( bRet)then
self:setTexture(texture)
else
Object.DestroyImmediate(texture)
end
end
function PictureDetailPanel:completeCallbackThumbnailTexture(texture )
-- body
local texture = Texture2D(0,0,TextureFormat.RGB24,false)
texture:LoadRawTextureData(texture:GetRawTextureData())
texture:Apply()
self:setTexture(texture)
end
function PictureDetailPanel:progressCallback( progress )
-- body
self:Show(self.progress.gameObject)
progress = progress >=1 and 1 or progress
local value = progress*100
value = math.floor(value)
self.progress.text = value.."%"
end
function PictureDetailPanel:completeCallback(bytes,thumbnail )
-- body
if(not thumbnail)then
self:Hide(self.progress.gameObject)
end
self.isThumbnail = thumbnail
if(bytes)then
helplog("xxxx333")
local texture = Texture2D(0,0,TextureFormat.RGB24,false)
local bRet = ImageConversion.LoadImage(texture, bytes)
if( bRet)then
helplog("xxxx2222",tostring(thumbnail))
self:setTexture(texture)
if(not thumbnail)then
Game.PictureWallManager:addOriginBytesBySceneryId(self.currentData,bytes)
end
else
helplog("xxxx1111")
Object.DestroyImmediate(texture)
end
end
end
function PictureDetailPanel:OnExit( )
-- body
originSize = 0
LeanTween.cancel(self.gameObject)
Object.DestroyImmediate(self.photo.mainTexture)
PhotoDataProxy.Instance:clearToSeeDatas()
end
function PictureDetailPanel:GetItemCellById(photoData)
local cells = self:GetItemCells()
if(cells and #cells>0)then
for i=1,#cells do
local single = cells[i]
if(single.data)then
if(Game.PictureWallManager:checkSamePicture(single.data,photoData))then
return single
end
end
end
end
end
function PictureDetailPanel:GetItemCells()
return self.wraplist:GetCellCtls();
end
function PictureDetailPanel:IsShowRemoveBtn(isShow)
if(PhotoDataProxy.Instance:checkPhotoSyncPermission())then
if(isShow)then
self:Show(self.RemoveCt)
else
self:Hide(self.RemoveCt)
end
else
self:Hide(self.RemoveCt)
end
end