示例#1
0
        void BindRoot()
        {
            var terminalsFolder = this.AddFolder("Terminals");

            terminalsFolder.Commands.Add("New Terminal", () => configuration.Terminals.Add(new Terminal()));
            //   terminalsFolder.RegisterEditorBuilder(typeof(Control), () => new NullControl() { Dock = DockStyle.Fill });
            terminalsFolder.RegisterEditorBuilder(typeof(Control), () => new GdiLoopControl()
            {
                Dock = DockStyle.Fill
            });

            configuration.Terminals.ItemAdded += (s, a) =>
            {
                var terminalNode = terminalsFolder.Add(a.Item);
                terminalNode.AddProperty(x => x.Name, "Terminal name");
                terminalNode.Commands.Add("Delete", () =>
                {
                    if (shell.AskApproval("Delete Terminal", string.Format("Are you sure you want to delete terminal {0}?", a.Item.Name)))
                    {
                        configuration.Terminals.Remove(a.Item);
                    }
                });
                terminalNode.Select();

                var areasFolder = terminalNode.AddFolder("Areas");
                areasFolder.Commands.Add("New area", () => a.Item.Areas.Add(new Area()));

                a.Item.Areas.ItemAdded += (aias, aiaa) =>
                {
                    var areaNode = areasFolder.Add(aiaa.Item);
                    areaNode.AddProperty(x => x.Name, "Area name");
                    areaNode.Select();
                };
                a.Item.Areas.ItemRemoved += (aias, aiaa) =>
                {
                    var areaNode = areasFolder.Nodes().FirstOrDefault(x => x.Tag == a.Item);
                    this.Remove(areaNode.Id);
                };
            };

            configuration.Terminals.ItemRemoved += (s, a) =>
            {
                var terminalNode = terminalsFolder.Nodes().FirstOrDefault(x => x.Tag == a.Item);
                this.Remove(terminalNode.Id);
            };
        }