Skip to content

Commit f0ce9f6

Browse files
committed
add tab layout
1 parent b54270d commit f0ce9f6

12 files changed

Lines changed: 170 additions & 68 deletions

File tree

ext/ExtListView.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
let ExtListView = {};
33

44
ExtListView.name = "UIListView";
5-
ExtListView.icon = "app://res/control/Button.png";
5+
ExtListView.icon = "app://res/control/listview.png";
66
ExtListView.tag = 9;
77

88
ExtListView.GenEmptyNode = function() {

ext/ExtPageView.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
let ExtPageView = {};
33

44
ExtPageView.name = "UIPageView";
5-
ExtPageView.icon = "app://res/control/Button.png";
5+
ExtPageView.icon = "app://res/control/pageview.png";
66
ExtPageView.tag = 9;
77

88
ExtPageView.GenEmptyNode = function() {

ext/ExtScrollView.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
let ExtScrollView = {};
33

44
ExtScrollView.name = "UIScrollView";
5-
ExtScrollView.icon = "app://res/control/Button.png";
5+
ExtScrollView.icon = "app://res/control/scrollview.png";
66
ExtScrollView.tag = 9;
77

88
ExtScrollView.GenEmptyNode = function() {

js/cocosUtil.js

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -495,3 +495,9 @@ function InsertAfterUUID(node, parent, uuid) {
495495
parent.addChild(afterNode[i]);
496496
}
497497
}
498+
499+
function ClearCurrentGameStatus() {
500+
cc.game._prepareCalled = false;
501+
cc.game._rendererInitialized = false;
502+
cc.game._renderContext = null;
503+
}

layout.js

Lines changed: 48 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -61,24 +61,60 @@ $(document).ready(function() {
6161
isPersistent: true,
6262
faicon: 'cubes',
6363
onCreate: function(myPanel) {
64+
65+
var $tabArea = $('<div style="position:absolute;top:0px;left:0px;right:0px;bottom:0px;">');
66+
myPanel.layout().addItem($tabArea);
67+
var tabFrame = new wcTabFrame($tabArea, myPanel);
6468

65-
var $node = $('<ve-renderpanel id="render" style="position:absolute;top:0px;left:0px;right:0px;bottom:0px;"></ve-renderpanel>');
66-
myPanel._main = $node[0];
67-
myPanel.layout().addItem($node).stretch('', '100%');
68-
myPanel.on(wcDocker.EVENT.RESIZED, function(data) {
69+
// var $node = $('<ve-renderpanel id="render" style="position:absolute;top:0px;left:0px;right:0px;bottom:0px;"></ve-renderpanel>');
70+
// tabFrame.addTab('Unknow', -1, wcDocker.LAYOUT.SIMPLE).addItem($node);
71+
// myPanel._main = $node[0];
6972

70-
73+
// tabFrame.closeable(0, true); // 0 based index 3 is actually Custom Tab 4
74+
// tabFrame.faicon(0, 'gears')
75+
myPanel.on(wcDocker.EVENT.RESIZED, function(data) {
7176
Ipc.sendToAll("panelResized")
7277
});
73-
74-
myPanel.on(wcDocker.EVENT.GAIN_FOCUS, function(data) {
75-
myPanel._main.focus();
76-
console.log("RenderPanel GAIN_FOCUS");
77-
});
7878

79-
myPanel.on(wcDocker.EVENT.LOST_FOCUS, function(data) {
80-
console.log("RenderPanel lose focus");
79+
myPanel.messages = {};
80+
myPanel.messages["ui:open_file"] = function(event, message){
81+
var $node = $('<ve-renderpanel id="render" style="position:absolute;top:0px;left:0px;right:0px;bottom:0px;"></ve-renderpanel>');
82+
let newLayout = tabFrame.addTab(message.path, 0, wcDocker.LAYOUT.SIMPLE);
83+
newLayout.addItem($node);
84+
tabFrame.tab(0, true);
85+
newLayout._main = $node[0];
86+
myPanel._main = $node[0];
87+
Ipc.sendToAll("ui:open_scene_file", message);
88+
89+
};
90+
91+
let tabChanged = function(index) {
92+
let layout = tabFrame.layout(index);
93+
if(!layout) {
94+
return;
95+
}
96+
myPanel._main = layout._main;
97+
Ipc.sendToAll("ui:cur_tab_select", {index: index});
98+
};
99+
100+
myPanel.messages["ui:closeCurRender"] = function(event, message){
101+
tabFrame.removeTab(tabFrame._curTab);
102+
tabChanged(tabFrame._curTab);
103+
};
104+
105+
106+
myPanel.on(wcDocker.EVENT.CUSTOM_TAB_CHANGED, function(data) {
107+
tabChanged(data.index);
81108
});
109+
110+
// myPanel.on(wcDocker.EVENT.GAIN_FOCUS, function(data) {
111+
// myPanel._main.focus();
112+
// console.log("RenderPanel GAIN_FOCUS");
113+
// });
114+
115+
// myPanel.on(wcDocker.EVENT.LOST_FOCUS, function(data) {
116+
// console.log("RenderPanel lose focus");
117+
// });
82118

83119
},
84120
});

packages/renderpanel/panel/renderpanel.js

Lines changed: 51 additions & 48 deletions
Original file line numberDiff line numberDiff line change
@@ -674,15 +674,11 @@
674674
this['ondrop'] = this.dragDrop.bind(this);
675675
this['ondragleave'] = this.dragLeave.bind(this);
676676

677-
global.setTimeout(() => {
678-
if(window.localStorage["projectFolder"]) {
679-
let path = window.localStorage["projectFolder"];
680-
window["projectFolder"] = path;
681-
Ipc.sendToAll("ui:project_floder_change", {folder: path});
682-
}
683-
684-
685-
},1000);
677+
this._openPath = null;
678+
let node = new cc.Scene();
679+
node.width = 800;
680+
node.height = 400;
681+
this.sceneChange(node);
686682
},
687683

688684
sceneChange: function(newScene) {
@@ -972,24 +968,41 @@
972968
Ipc.sendToAll("ui:select_items_change", {select_items : select_items});
973969
},
974970

971+
_ensureExitCurRender: function() {
972+
let runScene = this.$.scene.getRunScene();
973+
let self = this;
974+
let isModify = false;
975+
var closeCurRender = function() {
976+
Ipc.sendToAllPanel("ui:closeCurRender", {});
977+
};
978+
979+
if(runScene._undo && !runScene._undo.isSaved()) {
980+
isModify = true;
981+
let dialog = Electron.remote.dialog;
982+
dialog.showMessageBox({
983+
type:"question",
984+
buttons:["取消", "确定", "不保存"],
985+
title:"是否保存",
986+
message:"您已进行修改,尚未保存,是否保存?",
987+
}, function (buttonIndex) {
988+
if(buttonIndex == 0) {
989+
return;
990+
}
991+
if(buttonIndex == 1) {
992+
self._doSaveFunc();
993+
}
994+
closeCurRender();
995+
})
996+
}
997+
998+
if(!isModify) {
999+
closeCurRender();
1000+
}
1001+
},
1002+
9751003
messages: {
9761004
"ui:project_floder_change"(event, message) {
977-
let last_open_ui = window.localStorage["last_open_ui"];
978-
if(!startWith(last_open_ui, message.folder)) {
979-
last_open_ui = null;
980-
window.localStorage["last_open_ui"] = null;
981-
}
982-
AddLinkToScripte(message.folder + "/js/init.html", function() {
983-
if(last_open_ui) {
984-
Ipc.sendToAll("ui:open_file", {path: last_open_ui});
985-
}
986-
});
9871005

988-
this._openPath = null;
989-
let node = new cc.Scene();
990-
node.width = 800;
991-
node.height = 400;
992-
this.sceneChange(node);
9931006
},
9941007
"ui:change_item_position" (event, message) {
9951008
this.changeItemPosition(message.sourceUUID, message.compareUUID, message.mode);
@@ -1013,10 +1026,9 @@
10131026
"ui:has_item_change"(event, message) {
10141027
this.updateForgeCanvas();
10151028
},
1016-
"ui:open_file"(event, message) {
1029+
"ui:open_scene_file"(event, message) {
10171030
let path = message.path;
10181031
if(endWith(path, ".ui")) {
1019-
let dialog = Electron.remote.dialog;
10201032
let runScene = this.$.scene.getRunScene();
10211033
let self = this;
10221034
var openScene = function() {
@@ -1027,31 +1039,20 @@
10271039
self.sceneChange(scene);
10281040
}
10291041
};
1030-
let isModify = false;
1031-
if(runScene._undo && !runScene._undo.isSaved()) {
1032-
isModify = true;
1033-
dialog.showMessageBox({
1034-
type:"question",
1035-
buttons:["取消", "确定", "不保存"],
1036-
title:"是否保存",
1037-
message:"您已进行修改,尚未保存,是否保存?",
1038-
}, function (buttonIndex) {
1039-
if(buttonIndex == 0) {
1040-
return;
1041-
}
1042-
if(buttonIndex == 1) {
1043-
self._doSaveFunc();
1044-
}
1045-
openScene();
1046-
})
1047-
}
1048-
1049-
if(!isModify) {
1050-
openScene();
1051-
}
10521042

1043+
openScene();
10531044

10541045
}
1046+
1047+
this.resize();
1048+
},
1049+
1050+
"ui:cur_tab_select"(event, message) {
1051+
if(!this._isReady) {
1052+
return
1053+
}
1054+
this.$.scene.reinitRender();
1055+
this.sceneChange(this.$.scene.getRunScene());
10551056
},
10561057
'ui:scene_prop_change'(event, message) {
10571058
let runScene = this.$.scene.getRunScene();
@@ -1109,6 +1110,8 @@
11091110
this._doPasteFunc();
11101111
} else if(event.keyCode == KeyCodes('a') && event.ctrlKey) {
11111112
this._doSelectAll();
1113+
} else if(event.keyCode == KeyCodes('w') && event.ctrlKey) {
1114+
this._ensureExitCurRender();
11121115
} else if(event.keyCode == KeyCodes('esc')) {
11131116
this.$.scene.getFabricCanvas().clear();
11141117
this._firstSelectItem = null;

packages/renderpanel/panel/renderscene.js

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,11 @@
3939
ready: function() {
4040
this.fabricCanvas = new fabric.Canvas(this.$.forgeCanvas);
4141
this.runScene = null;
42+
this.reinitRender();
43+
},
44+
45+
reinitRender: function() {
46+
ClearCurrentGameStatus();
4247
cc.game.run({
4348
"debugMode" : 0,
4449
"showFPS" : false,
@@ -47,7 +52,6 @@
4752
"renderMode" : 1,
4853
}, function() {
4954
}.bind(this));
50-
5155
},
5256

5357
attached: function() {

packages/resorder/panel/resorder.js

Lines changed: 22 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,13 @@
3939
}
4040
});
4141

42+
global.setTimeout(() => {
43+
if(window.localStorage["projectFolder"]) {
44+
let path = window.localStorage["projectFolder"];
45+
window["projectFolder"] = path;
46+
Ipc.sendToAll("ui:project_floder_change", {folder: path});
47+
}
48+
},1000);
4249
},
4350

4451
_refreshAll: function() {
@@ -174,7 +181,7 @@
174181
if(endWith(e.currentTarget.path, "lang.txt")) {
175182
OpenLangInfo(e.currentTarget.path);
176183
} else {
177-
Ipc.sendToAll("ui:open_file", {path: e.currentTarget.path});
184+
Ipc.sendToAllPanel("ui:open_file", {path: e.currentTarget.path});
178185
}
179186
}
180187
e.stopPropagation();
@@ -363,9 +370,20 @@
363370

364371
messages: {
365372
'ui:project_floder_change'(event, message) {
366-
ensureLangExist();
367-
368-
this.showFolderTree(message.folder);
373+
ensureLangExist();
374+
375+
let last_open_ui = window.localStorage["last_open_ui"];
376+
if(!startWith(last_open_ui, message.folder)) {
377+
last_open_ui = null;
378+
window.localStorage["last_open_ui"] = null;
379+
}
380+
AddLinkToScripte(message.folder + "/js/init.html", function() {
381+
if(last_open_ui) {
382+
Ipc.sendToAllPanel("ui:open_file", {path: last_open_ui});
383+
}
384+
});
385+
386+
this.showFolderTree(message.folder);
369387
},
370388
'ui:create_folder'(event, message) {
371389

render/ipc.js

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,17 @@ Ipc.sendToAll = function (message, ...args) {
1616
_render2all.apply(null, args);
1717
};
1818

19+
Ipc.sendToAllPanel = function (message, ...args) {
20+
if ( typeof message !== 'string' ) {
21+
Console.error('Call to `sendToAllPanel` failed. The message must be a string.');
22+
return;
23+
}
24+
25+
args = [null, message, ...args];
26+
_render2allpanel.apply(null, args);
27+
};
28+
29+
1930
Ipc.sendToMain = function (message, ...args) {
2031
args = ["ipc-render2main", message, ...args];
2132
ipcRenderer.send.apply( ipcRenderer, args );
@@ -28,6 +39,8 @@ Ipc.sendToMainDirect = function (message, ...args) {
2839

2940
ipcRenderer.on('ipc-renderer2all', _render2all);
3041

42+
ipcRenderer.on('ipc-renderer2allpanel', _render2allpanel);
43+
3144
function _render2all(event, message, ...args) {
3245
let oneArgs = [...args];
3346
let docker = global.myDocker;
@@ -51,4 +64,26 @@ function _render2all(event, message, ...args) {
5164
}
5265
}
5366

67+
}
68+
69+
function _render2allpanel(event, message, ...args) {
70+
let oneArgs = [...args];
71+
let docker = global.myDocker;
72+
if(!docker) {
73+
return;
74+
}
75+
let frameList = docker._frameList;
76+
for (var i = 0; i < frameList.length; ++i) {
77+
let panels = frameList[i]._panelList;
78+
for (var a = 0; a < panels.length; ++a) {
79+
var panel = panels[a];
80+
let msg = panel.messages || {};
81+
let fn = msg[message];
82+
if ( typeof fn === 'function' ) {
83+
fn.call(panel, message, ...args);
84+
continue;
85+
}
86+
}
87+
}
88+
5489
}

res/control/listview.png

1.29 KB
Loading

0 commit comments

Comments
 (0)