private void LoadEntities() { List <Entity> entities = new List <Entity>(); if (Map.Instance == null) { return; } entities.AddRange(Map.Instance.Children); while (entities.Count > 0) { Entity entity = entities[0]; entities.RemoveAt(0); Map.EditorLayer editorLayer = null; if (entity is MapObject) { MapObject mapObject = entity as MapObject; editorLayer = mapObject.EditorLayer; } TreeNode layerNode = TreeViewUtil.FindNodeByTag(rootLayerNode, editorLayer); layerNode = layerNode ?? rootNode; CreateEntityNode(entity, layerNode, false); } }
private void BuildLayerNode(Map.EditorLayer layer = null, TreeNode parent = null) { if (Map.Instance == null) { return; } layer = layer ?? Map.Instance.RootEditorLayer; if (layer == null) { return; } parent = parent ?? rootNode; TreeNode node = CreateLayerNode(layer, parent); if (layer == Map.Instance.RootEditorLayer) { rootLayerNode = node; } if (node == null) { return; } foreach (Map.EditorLayer layerChild in layer.Children) { BuildLayerNode(layerChild, node); } }
public TreeNode CreateLayerNode(Map.EditorLayer layer, TreeNode parent = null, bool selected = true) { if (layer == null) { return(null); } string layerName = string.IsNullOrEmpty(layer.Name) ? "New Layer_" : layer.Name; TreeNode layerNode = new TreeNode(layerName, 0, 0); layerNode.Tag = layer; if (parent != null) { parent.Nodes.Add(layerNode); } else { treeViewEntities.Nodes.Add(layerNode); } if (selected) { treeViewEntities.SelectedNode = layerNode; } return(layerNode); }
protected override void DoUndo() { if (LayerNode != null) { Map.EditorLayer layer = LayerNode.Tag as Map.EditorLayer; LayerNode.Remove(); layer.Remove(); } }
private void tsmiDeleteLayer_Click(object sender, EventArgs e) { TreeNode node = CurrentLayerNode; if (node == null) { tsmiDeleteLayer.Enabled = false; return; } List <TreeNode> valueNodes = new List <TreeNode>(); TreeViewUtil.EnumerateNodes(node, (_node) => { if (_node.Tag is Entity) { valueNodes.Add(_node); } return(true); }); if (valueNodes.Count > 0) { string infoMessage = string.Format("该Layer下有{0}个节点, 删除该Layer会将这些节点放在根节点下。是否继续?", valueNodes.Count); if (MessageBox.Show(infoMessage, "询问", MessageBoxButtons.YesNo, MessageBoxIcon.Information) == DialogResult.No) { return; } } Map.EditorLayer layer = node.Tag as Map.EditorLayer; if (Map.Instance != null && layer == Map.Instance.RootEditorLayer) { tsmiDeleteLayer.Enabled = false; return; } if (layer.Remove()) { node.Tag = null; if (node.Parent != null) { treeViewEntities.SelectedNode = node.Parent; } node.Remove(); UpdateData(); MapWorld.Instance.Modified = true; } }
private void treeViewEntities_AfterLabelEdit(object sender, NodeLabelEditEventArgs e) { treeViewEntities.LabelEdit = false; if (e.Label == null) { return; } Map.EditorLayer layer = e.Node.Tag as Map.EditorLayer; if (layer == null) { e.CancelEdit = true; e.Node.EndEdit(false); return; } if (e.Label.Length > 0) { if (e.Label.IndexOf("\\") > -1) { string infoMessage = string.Format("不允许包含字符【\\】"); e.CancelEdit = true; MessageBox.Show(infoMessage, "警告", MessageBoxButtons.OK, MessageBoxIcon.Warning); e.Node.EndEdit(true); } else { if (layer.Parent != null && layer.Parent.HasChild(e.Label, layer)) { e.CancelEdit = true; string infoMessage = string.Format("Layer 【{0}】 已存在", e.Label); MessageBox.Show(infoMessage, "警告", MessageBoxButtons.OK, MessageBoxIcon.Warning); e.Node.EndEdit(true); } else { e.Node.EndEdit(false); MapWorld.Instance.Modified = true; } } } else { e.CancelEdit = true; e.Node.BeginEdit(); } }
/// <summary> /// 获得当前选中节点所在的Map.Layer, 如果当前选中节点本身是一个Map.Layer,则返回当前选中节点 /// </summary> /// <returns></returns> public TreeNode GetCurrentNodeLayer() { if (treeViewEntities.SelectedNode == null) { return(null); } TreeNode node = treeViewEntities.SelectedNode; while (node != null) { Map.EditorLayer layer = node.Tag as Map.EditorLayer; if (layer != null) { return(node); } node = node.Parent; } return(rootLayerNode); }
private void tsmiCreateLayer_Click(object sender, EventArgs e) { TreeNode layerNode = GetCurrentNodeLayer(); if (layerNode == null) { Log.Info("找不到当前选中节点所在的Layer"); return; } Map.EditorLayer nodeLayer = layerNode.Tag as Map.EditorLayer; List <string> names = nodeLayer.Children.Select(_layer => _layer.Name).ToList(); int index = 0; string nameNew = "New Layer"; do { nameNew = string.Format("New Layer_{0}", index++); if (!names.Contains(nameNew)) { break; } } while (true); Map.EditorLayer layerNew = nodeLayer.Create(nameNew); TreeNode nodeNew = CreateLayerNode(layerNew, layerNode); if (nodeNew != null) { treeViewEntities.SelectedNode = nodeNew; nodeNew.EnsureVisible(); treeViewEntities.LabelEdit = true; nodeNew.BeginEdit(); /* * LayerNodeAction layerNodeAction = new LayerNodeAction(nodeNew); * UndoSystem.Instance.CommitAction(layerNodeAction); * //*/ } MapWorld.Instance.Modified = true; }
public LayerBean(Map.EditorLayer layer) { this.Layer = layer; }