コード例 #1
0
        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);
            }
        }
コード例 #2
0
        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);
            }
        }
コード例 #3
0
        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);
        }
コード例 #4
0
ファイル: LayerNodeAction.cs プロジェクト: nistck/Jx
 protected override void DoUndo()
 {
     if (LayerNode != null)
     {
         Map.EditorLayer layer = LayerNode.Tag as Map.EditorLayer;
         LayerNode.Remove();
         layer.Remove();
     }
 }
コード例 #5
0
        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;
            }
        }
コード例 #6
0
        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();
            }
        }
コード例 #7
0
        /// <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);
        }
コード例 #8
0
        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;
        }
コード例 #9
0
 public LayerBean(Map.EditorLayer layer)
 {
     this.Layer = layer;
 }