根据弹出窗体的不同层级进行管理和关闭,可以知道当前scene都弹出哪些窗体,便于统一化管理
"use strict";
var modalDlg = require("./../../ui/common/ModalDialogLayer.js");
var WindowManager = cc.Class.extend({
windowList: null,
baseZorder: 1000000,
baseTag: 1000000,
ctor: function() {
this.windowList = {};
this.windowList.menus = [];
this.windowList.layers = [];
},
createMenu: function(parent, zorder, menuItems) {
var menu = new cc.Menu(menuItems);
parent.addChild(menu, zorder);
this.windowList.menus.push({parent: parent, menu: menu});
return menu;
},
destroyCurrentMenu: function() {
var object = this.windowList.menus.pop();
if (object != undefined) {
object.parent.removeChild(object.menu);
}
},
createLayer: function (parent, isInteadCur, dlgName) {
if (isInteadCur === true) {
this.removeTopLayer();
}
var orderNum = this.windowList.layers.length;
// TODO: 传入继承与modallayer的窗体,灵活使用
// var addLayer = new modalDlg();
// parent.addChild(addLayer, this.baseZorder+orderNum*100, this.baseTag+orderNum*100);
// addLayer.setPosition(0, 0);
// dlgName.setPosition(0, 0);
// addLayer.addChild(dlgName, 10000);
dlgName.setPosition(0, 0);
if (parent == undefined) {
parent = cc.director.getRunningScene();
}
parent.addChild(dlgName, this.baseZorder+orderNum*100, this.baseTag+orderNum*100);
this.windowList.layers.push({index: orderNum, father: parent, dlg: dlgName, tag: this.baseTag+orderNum*100, zorder: this.baseZorder+orderNum*100})
},
removeLayerByDlg: function (dlg) {
var found = false;
for (i=0;i<this.windowList.layers.length;i++) {
var lastLayer = this.windowList.layers[i];
if (lastLayer != undefined && lastLayer.dlg === dlg) {
lastLayer.father.removeChildByTag(lastLayer.tag, true);
// this.windowList.layers[i] = null;
this.windowList.layers.splice(i, 1);
found = true;
}
}
if (found == false) {
cc.log("warning: window manager cant find dialog when remove " + dlg);
}
},
removeAllLayers: function () {
for (i=0;i<this.windowList.layers.length;i++) {
var lastLayer = this.windowList.layers[i];
if (lastLayer != undefined) {
lastLayer.father.removeChildByTag(lastLayer.tag, true);
}
}
this.windowList.layers = [];
},
removeTopLayer: function () {
var orderNum = this.windowList.layers.length;
if (orderNum > 0) {
var lastLayer = this.windowList.layers.pop();
if (lastLayer != undefined) {
lastLayer.father.removeChildByTag(lastLayer.tag, true);
}
}
},
insteadBaseLayer: function (parent, dlgName) {
this.removeAllLayers();
this.createLayer(parent, false, dlgName);
},
getCurrentLayers: function () {
return this.windowList.layers;
},
});
module.exports = WindowManager;