diff --git a/scripts/system/edit.js b/scripts/system/edit.js index c751adfc78..e9c7a49378 100644 --- a/scripts/system/edit.js +++ b/scripts/system/edit.js @@ -475,15 +475,16 @@ var toolBar = (function () { var DELETE_ENTITY_TIMER_TIMEOUT = 100; function checkDeletedEntityAndUpdate(entityID) { - // Allow for multiple entity deletes before updating the entity list. + // Allow for multiple entity deletes before updating the entities selected. entitiesToDelete.push(entityID); if (deletedEntityTimer !== null) { Script.clearTimeout(deletedEntityTimer); } deletedEntityTimer = Script.setTimeout(function () { - selectionManager.removeEntities(entitiesToDelete); - entityListTool.clearEntityList(); - entityListTool.sendUpdate(); + if (entitiesToDelete.length > 0) { + selectionManager.removeEntities(entitiesToDelete); + } + entityListTool.removeEntities(entitiesToDelete, selectionManager.selections); entitiesToDelete = []; deletedEntityTimer = null; }, DELETE_ENTITY_TIMER_TIMEOUT); diff --git a/scripts/system/html/js/entityList.js b/scripts/system/html/js/entityList.js index 88b3ccbf7c..a8c0e22ae6 100644 --- a/scripts/system/html/js/entityList.js +++ b/scripts/system/html/js/entityList.js @@ -184,17 +184,27 @@ function loaded() { currentElement.onclick = onRowClicked; currentElement.ondblclick = onRowDoubleClicked; }); - - if (refreshEntityListTimer) { - clearTimeout(refreshEntityListTimer); - } - refreshEntityListTimer = setTimeout(refreshEntityListObject, 50); } else { var item = entities[id].item; item.values({ name: name, url: filename, locked: locked, visible: visible }); } } + function removeEntities(deletedIDs) { + for (i = 0, length = deletedIDs.length; i < length; i++) { + delete entities[deletedIDs[i]]; + entityList.remove("id", deletedIDs[i]); + } + } + + function scheduleRefreshEntityList() { + var REFRESH_DELAY = 50; + if (refreshEntityListTimer) { + clearTimeout(refreshEntityListTimer); + } + refreshEntityListTimer = setTimeout(refreshEntityListObject, REFRESH_DELAY); + } + function clearEntities() { entities = {}; entityList.clear(); @@ -346,7 +356,7 @@ function loaded() { if (notFound) { refreshEntities(); } - } else if (data.type == "update") { + } else if (data.type === "update" && data.selectedIDs !== undefined) { var newEntities = data.entities; if (newEntities && newEntities.length == 0) { elNoEntitiesMessage.style.display = "block"; @@ -365,13 +375,15 @@ function loaded() { newEntities[i].hasScript ? SCRIPT_GLYPH : null); } updateSelectedEntities(data.selectedIDs); + scheduleRefreshEntityList(); resize(); } - } else if (data.type === "deleted") { - for (i = 0, length = data.ids.length; i < length; i++) { - delete entities[data.ids[i]]; - entityList.remove("id", data.ids[i]); - } + } else if (data.type === "removeEntities" && data.deletedIDs !== undefined && data.selectedIDs !== undefined) { + removeEntities(data.deletedIDs); + updateSelectedEntities(data.selectedIDs); + scheduleRefreshEntityList(); + } else if (data.type === "deleted" && data.ids) { + removeEntities(data.ids); refreshFooter(); } }); diff --git a/scripts/system/html/js/entityProperties.js b/scripts/system/html/js/entityProperties.js index 4271aa9b09..a6a781b35f 100644 --- a/scripts/system/html/js/entityProperties.js +++ b/scripts/system/html/js/entityProperties.js @@ -893,9 +893,9 @@ function loaded() { } else { elServerScriptStatus.innerText = "Not running"; } - } else if (data.type === "update") { + } else if (data.type === "update" && data.selections) { - if (!data.selections || data.selections.length === 0) { + if (data.selections.length === 0) { if (lastEntityID !== null) { if (editor !== null) { saveJSONUserData(true); @@ -911,7 +911,7 @@ function loaded() { elID.value = ""; elPropertiesList.className = ''; disableProperties(); - } else if (data.selections && data.selections.length > 1) { + } else if (data.selections.length > 1) { deleteJSONEditor(); deleteJSONMaterialEditor(); var selections = data.selections; diff --git a/scripts/system/libraries/entityList.js b/scripts/system/libraries/entityList.js index 611bd4d84c..3fda7588df 100644 --- a/scripts/system/libraries/entityList.js +++ b/scripts/system/libraries/entityList.js @@ -57,6 +57,15 @@ EntityListTool = function(opts) { webView.emitScriptEvent(JSON.stringify(data)); }; + that.removeEntities = function (deletedIDs, selectedIDs) { + var data = { + type: 'removeEntities', + deletedIDs: deletedIDs, + selectedIDs: selectedIDs + }; + webView.emitScriptEvent(JSON.stringify(data)); + }; + function valueIfDefined(value) { return value !== undefined ? value : ""; }