@yuebai008/cli
Version:
Command line interface for rapid qg-minigame development
1 lines • 4.54 kB
JavaScript
import*as Common from"../../core/common/common.js";import*as i18n from"../../core/i18n/i18n.js";import*as UI from"../../ui/legacy/legacy.js";import{LayerSelection}from"./LayerViewHost.js";const UIStrings={layersTreePane:"Layers Tree Pane",showPaintProfiler:"Show Paint Profiler",updateChildDimension:" ({PH1} × {PH2})"},str_=i18n.i18n.registerUIStrings("panels/layer_viewer/LayerTreeOutline.ts",UIStrings),i18nString=i18n.i18n.getLocalizedString.bind(void 0,str_);export class LayerTreeOutline extends(Common.ObjectWrapper.eventMixin(UI.TreeOutline.TreeOutline)){layerViewHost;treeOutline;lastHoveredNode;element;layerTree;layerSnapshotMap;constructor(e){super(),this.layerViewHost=e,this.layerViewHost.registerView(this),this.treeOutline=new UI.TreeOutline.TreeOutlineInShadow,this.treeOutline.element.classList.add("layer-tree","overflow-auto"),this.treeOutline.element.addEventListener("mousemove",this.onMouseMove.bind(this),!1),this.treeOutline.element.addEventListener("mouseout",this.onMouseMove.bind(this),!1),this.treeOutline.element.addEventListener("contextmenu",this.onContextMenu.bind(this),!0),UI.ARIAUtils.setLabel(this.treeOutline.contentElement,i18nString(UIStrings.layersTreePane)),this.lastHoveredNode=null,this.element=this.treeOutline.element,this.layerViewHost.showInternalLayersSetting().addChangeListener(this.update,this)}focus(){this.treeOutline.focus()}selectObject(e){this.hoverObject(null);const t=e&&e.layer(),r=t&&layerToTreeElement.get(t);r?r.revealAndSelect(!0):this.treeOutline.selectedTreeElement&&this.treeOutline.selectedTreeElement.deselect()}hoverObject(e){const t=e&&e.layer(),r=t&&layerToTreeElement.get(t);r!==this.lastHoveredNode&&(this.lastHoveredNode&&this.lastHoveredNode.setHovered(!1),r&&r.setHovered(!0),this.lastHoveredNode=r)}setLayerTree(e){this.layerTree=e,this.update()}update(){const e=this.layerViewHost.showInternalLayersSetting().get(),t=new Map;let r=null;this.layerTree&&(e||(r=this.layerTree.contentRoot()),r||(r=this.layerTree.root())),r&&this.layerTree&&this.layerTree.forEachLayer(function(n){if(!n.drawsContent()&&!e)return;t.get(n)&&console.assert(!1,"Duplicate layer: "+n.id()),t.set(n,!0);let s=layerToTreeElement.get(n)||null,i=n.parent();for(;i&&i!==r&&!i.drawsContent()&&!e;)i=i.parent();const l=n===r?this.treeOutline.rootElement():i&&layerToTreeElement.get(i);if(l)if(s){if(s.parent!==l){const e=this.treeOutline.selectedTreeElement;s.parent&&s.parent.removeChild(s),l.appendChild(s),e&&e!==this.treeOutline.selectedTreeElement&&e.select()}s.update()}else s=new LayerTreeElement(this,n),l.appendChild(s),n.drawsContent()||s.expand();else console.assert(!1,"Parent is not in the tree")}.bind(this),r);for(let e=this.treeOutline.rootElement().firstChild();e instanceof LayerTreeElement&&!e.root;)if(t.get(e.layer))e=e.traverseNextTreeElement(!1);else{const t=e.nextSibling||e.parent;e.parent&&e.parent.removeChild(e),e===this.lastHoveredNode&&(this.lastHoveredNode=null),e=t}if(!this.treeOutline.selectedTreeElement&&this.layerTree){const e=this.layerTree.contentRoot()||this.layerTree.root();if(e){const t=layerToTreeElement.get(e);t&&t.revealAndSelect(!0)}}}onMouseMove(e){const t=this.treeOutline.treeElementFromEvent(e);t!==this.lastHoveredNode&&this.layerViewHost.hoverObject(this.selectionForNode(t))}selectedNodeChanged(e){this.layerViewHost.selectObject(this.selectionForNode(e))}onContextMenu(e){const t=this.selectionForNode(this.treeOutline.treeElementFromEvent(e)),r=new UI.ContextMenu.ContextMenu(e),n=t&&t.layer();n&&(this.layerSnapshotMap=this.layerViewHost.getLayerSnapshotMap(),this.layerSnapshotMap.has(n)&&r.defaultSection().appendItem(i18nString(UIStrings.showPaintProfiler),(()=>this.dispatchEventToListeners("PaintProfilerRequested",t)),!1)),this.layerViewHost.showContextMenu(r,t)}selectionForNode(e){return e&&e.layer?new LayerSelection(e.layer):null}}export class LayerTreeElement extends UI.TreeOutline.TreeElement{treeOutlineInternal;layer;constructor(e,t){super(),this.treeOutlineInternal=e,this.layer=t,layerToTreeElement.set(t,this),this.update()}update(){const e=this.layer.nodeForSelfOrAncestor(),t=document.createDocumentFragment();UI.UIUtils.createTextChild(t,e?e.simpleSelector():"#"+this.layer.id());t.createChild("span","dimmed").textContent=i18nString(UIStrings.updateChildDimension,{PH1:this.layer.width(),PH2:this.layer.height()}),this.title=t}onselect(){return this.treeOutlineInternal.selectedNodeChanged(this),!1}setHovered(e){this.listItemElement.classList.toggle("hovered",e)}}export const layerToTreeElement=new WeakMap;