MailView.lua 8.09 KB
local MailView = dialog.uinode("ui/MailLayer.csb",import(".BaseView"))

MailView.isEdit = false;

function MailView:ctor()
    self.isMoved = false;

    MailView.super.ctor(self);
    self:init();
end

function MailView:show()
    local scene = cc.Director:getInstance():getRunningScene()
    local inst = MailView:create();
    scene:addChild(inst, dialog.ZORDER_APP);

    local panel = inst:getChildByName("panel");
    panel:setScale(0.5);
    local scaleTo = cc.ScaleTo:create(0.2,1);
    panel:runAction(scaleTo);

    inst:setContentSize(cc.size(display.width,display.height));
    ccui.Helper:doLayout(inst);

    inst:getChildByName("panel"):getChildByName("tab"):getChildByName("bg_2"):setVisible(false);
    inst:getChildByName("panel"):getChildByName("tab"):getChildByName("txt"):setString("系统邮件");

    inst.btn_close = inst:getChildByName("panel"):getChildByName("btn_close");
    inst.btn_close.fn = handler(inst,inst.onClose);
    inst.btn_close:addTouchEventListener(function(ref,type) self:onButtonClick(ref,type,inst.btn_close.fn)end);

    inst.isEdit = false;
    inst.scrollView = inst:getChildByName("panel"):getChildByName("ScrollView");

    inst:updateItems();

    inst.layer = cc.Layer:create();
    inst:addChild(inst.layer,1);
    registerScriptTouchEvent(inst.layer,handler(inst,inst.onTouchBegin),handler(inst,inst.onTouchMove),handler(inst,inst.onTouchEnd));

    UmengHelper.onEvent("mail");

    return inst;
end

function MailView:onTouchBegin(event)
    self.begin_touch_pos = self.layer:getParent():convertToWorldSpace(event:getLocation());
    self.isMoved = false;
    return true;
end

function MailView:onTouchMove(event)
    local move_touch_pos = self.layer:getParent():convertToWorldSpace(event:getLocation());
    local _distance = Point.distance(self.begin_touch_pos,move_touch_pos);
    if _distance > 5 then
        self.isMoved = true;
    end
end

function MailView:onTouchEnd(event)
    local p = self.layer:convertToWorldSpace(event:getLocation());

--    local emitter1 = cc.ParticleSystemQuad:create("res/effect/bubble.plist");
--    emitter1:setAutoRemoveOnFinish(true)    --设置播放完毕之后自动释放内存  
--    emitter1:setPosition(p);
--    self:addChild(emitter1);
end

function MailView:deleteMail()
    if self.isEdit then
        local idxList = {};
        local _list = UserModel.getMailList();
        for i,v in ipairs(_list) do
            if v.state ~= 0 then
                idxList[#idxList + 1] = v.idx;
            end
        end
        UserModel.deleteMails(idxList);
    else

    end
    self.isEdit = not self.isEdit;
    self:updateItems();
end

function MailView:updateItems()
    self.scrollView:removeAllChildren();

    self.nodes[1] = {self.btn_close};
    local fightIndex = 1;
    local _list = UserModel.getMailList();
    if #_list == 0 then
        self:getChildByName("panel"):getChildByName("mail_no"):setVisible(true);
        return;
    else
        self:getChildByName("panel"):getChildByName("mail_no"):setVisible(false);
    end

    local _y = #_list*120;
    for i=0,#_list-1 do
        local info = _list[i+1];
        if info then
            local item = cc.CSLoader:createNode("ui/MailItem.csb");
            if #_list < 4 then
                item:setPosition(cc.p(0,450 - (i+1)*120));
            else
                item:setPosition(cc.p(0,_y - (i+1)*120));
            end
            self.scrollView:addChild(item);
            local btn = item:getChildByName("panel"):getChildByName("btn");
            btn:setSwallowTouches(false);
            btn.info = info;
            btn:addTouchEventListener(function(ref,type) self:onButtonClick(ref,type, handler(self,self.onBtnClick))end);

            local mailInfo = MailInfo.getMailInfo(info.mail_id);
            if mailInfo.id == 1 or mailInfo.id == 2 or mailInfo.id == 3 or mailInfo.id == 4 then
                local st = os.date("*t",info.time);
                item:getChildByName("panel"):getChildByName("txt_title"):setString(mailInfo.title..st.month.."."..st.day.."-"..fightIndex);
                btn.fightIndex = fightIndex;
                fightIndex = fightIndex + 1;
            else
                item:getChildByName("panel"):getChildByName("txt_title"):setString(mailInfo.title);
            end
            item:getChildByName("panel"):getChildByName("txt_sender"):setString("发件人:"..mailInfo.writer);
            
            if info.state == 0 then --未读
                
            else --已读
                btn:loadTextureNormal("res/bg/bg_mail_item_gray.png");
                btn:loadTexturePressed("res/bg/bg_mail_item_gray.png");
--                item:getChildByName("panel"):getChildByName("txt_title"):disableEffect();
--                item:getChildByName("panel"):getChildByName("txt_title"):setColor(cc.c3b(102,102,102));
--                item:getChildByName("panel"):getChildByName("txt_sender"):disableEffect();
--                item:getChildByName("panel"):getChildByName("txt_sender"):setColor(cc.c3b(102,102,102));
            end
            local cnt = #self.nodes;
            if not self.nodes[cnt+1] then
                self.nodes[cnt+1] = {};
            end
            local panel = item:getChildByName("panel");
            panel.type = EnumNodeType.MAIL;
            panel.info = info;
            panel.fn = function ()
                self:onBtnClick(btn);
            end;
            self.nodes[cnt+1][1] = panel;
        end
    end
    self.scrollView:setInnerContainerSize(cc.size(820,#_list*120+10));

    if #self.nodes > 0 then
        self.nodeIndex = 2;
        self.selectedIndex = 1;
        self:updateSelectedState(false);
    else
        self.nodeIndex = 1;
        self.nodes = {};
    end
end

function MailView:onBtnClick(ref,event)
    print("btn click is moved:",self.isMoved);
    if self.isMoved then
        return;
    end

    ref:loadTextureNormal("res/bg/bg_mail_item_gray.png");
    ref:loadTexturePressed("res/bg/bg_mail_item_gray.png");

    local fightIndex = ref.fightIndex;
    local info = ref.info;
    local mailInfo = MailInfo.getMailInfo(info.mail_id);

    local receiver;
    if mailInfo.id > 100000 then
        receiver = require("app.views.view.MailReadView"):show(info);
    end
    local scene = cc.Director:getInstance():getRunningScene();
    scene.keypadManager:addKeypadReceiver(receiver);

    if info.state == 0 then
        UserModel.readMail(info.idx);
        if mailInfo.item and mailInfo.item ~= "" then
            UserModel.getMailAttachment(info.idx);
        end
        self:updateItems();
    end
end

function MailView:init()
    
end

--关闭
function MailView:onClose()
    self:close();
end

--返回键处理函数
function MailView:onKeypadBack()
    self:close();
end

--确认键处理函数
function MailView:onKeypadOk()
    local node = self.nodes[self.nodeIndex][self.selectedIndex];
    if node and node.fn then
        node.fn();
    end
end

--上键处理函数
function MailView:onKeypadUp()
    MailView.super.onKeypadUp(self,false);

    if self.nodeIndex > 1 and self.nodes[self.nodeIndex] then
        local node = self.nodes[self.nodeIndex][self.selectedIndex];
        self:setScrollPosition(node:getParent());
    end
end

--下键处理函数
function MailView:onKeypadDown()
    MailView.super.onKeypadDown(self,false);

    if self.nodeIndex > 1 and self.nodes[self.nodeIndex] then
        local node = self.nodes[self.nodeIndex][self.selectedIndex];
        self:setScrollPosition(node:getParent());
    end
end

function MailView:setScrollPosition(node)
    local scrollSize = self.scrollView:getContentSize();

    local _list = UserModel.getMailList();
--    if #_list > 3 then
--        for i=1,#_list-3 do
--            table.remove(_list,#_list)
--        end
--    end
    local len = #_list*90+10;
    local currentY = len - (node:getPositionY()+90+5);
    if currentY > len-scrollSize.height then
        currentY = len-scrollSize.height;
    elseif currentY < 0 then
        currentY = 0;
    end
    local per = 0;
    if len-scrollSize.height > 0 then
        per = currentY*100/(len-scrollSize.height);
    end
    print(len-scrollSize.height,per)
    self.scrollView:scrollToPercentVertical(per,0.5,true);
end

return MailView