Beispiel #1
0
        private void treeView_DragDrop(object sender, DragEventArgs e)
        {
            if (e.Data.GetDataPresent(typeof(TreeNode)))
            {
                Point    pt     = treeView.PointToClient(new Point(e.X, e.Y));
                TreeNode target = treeView.GetNodeAt(pt);
                TreeNode source = (TreeNode)e.Data.GetData(typeof(TreeNode));
                if (target == null || target == source)
                {
                    return;
                }
                if (!(source.Tag is TreeNodeBuilder))
                {
                    return;
                }
                if (!(target.Tag is TreeNodeBuilder))
                {
                    return;
                }
                if (IsChildNode(source, target))
                {
                    return;
                }

                TreeNodeBuilder targetBuilder = (TreeNodeBuilder)target.Tag;
                TreeNodeBuilder sourceBuilder = (TreeNodeBuilder)source.Tag;

                Core.Breath.Increment();
                Core.IEntryCollection dst = targetBuilder.SubEntries;
                Core.IEntry           src = (Core.IEntry)sourceBuilder.Tag;
                CopyEntry(src, dst);
                src.Owner.Remove(src.ID);
                SI.Commit();
            }
        }
Beispiel #2
0
 public DocTreeNode(Core.IEntry entry, TreeNode node)
 {
     _entry    = entry;
     _node     = node;
     _node.Tag = this;
     _docNodes = new DocTreeNodeCollection(_entry.Entries, _node.Nodes);
 }
Beispiel #3
0
 static void CopyEntry(Core.IEntry src, Core.IEntryCollection dst)
 {
     dst = dst.Put(src.Entity).Entries;
     foreach (Core.IEntry e in src.Entries)
     {
         CopyEntry(e, dst);
     }
 }
Beispiel #4
0
 static void EnableDisable(Core.IEntry entry, Ctrl.IContext con, Ctrl.CommandOption opt)
 {
     if (opt.QueryRunnable)
     {
         opt.IsChecked = entry.Enabled; return;
     }
     entry.Enabled = !entry.Enabled;
 }
Beispiel #5
0
        void Core.IBuild.Build()
        {
            if (Ctrl.Current.Entries.Count > 1)
            {
                // 複数選択の場合
                treeView.BeginUpdate();
                _selectedNodes.Clear();
                Core.IEntry[] entries = new Core.IEntry[Ctrl.Current.Entries.Count];
                Ctrl.Current.Entries.CopyTo(entries, 0);
                foreach (Core.IEntry entry in entries)
                {
                    TreeNode node = TreeNodeBuilder.Find(this.Root, entry.Path);
                    if (node != null)
                    {
                        _selectedNodes.Add(node);
                    }
                }
                treeView.EndUpdate();
            }
            else
            {
                // 単数選択または選択無しの場合
                TreeNode    selected1 = null;
                Core.IEntry selEntry  = Core.Document.Current.SelectedEntry;
                if (selEntry != null)
                {
                    selected1 = TreeNodeBuilder.Find(this.Root, selEntry.Path);
                }

                TreeNode selected2 = _selectedNodes.Value;
                while (selected2 != null)
                {
                    if (selected2.Tag is TreeNodeBuilder)
                    {
                        break;
                    }
                    selected2 = selected2.Parent;
                }

                if (selected1 != selected2)
                {
                    if (selected1 != null)
                    {
                        _selectedNodes.Value = selected1;
                        selected1.EnsureVisible();
                    }
                    else
                    {
                        _selectedNodes.Value = null;
                        SelectNode(null, false);
                    }
                }
            }
        }
Beispiel #6
0
 static void CheckInvariants(Core.IEntry entry)
 {
     Testing.ITestReport report = new Testing.ConsoleReport();
     Testing.TestRegistry.RunChecks(entry, report);
     Testing.TestRegistry.RunChecks(entry.Entries, report);
     Testing.TestRegistry.RunChecks(entry.Entity, report);
     foreach (object element in entry.Elements)
     {
         Testing.TestRegistry.RunChecks(element, report);
     }
 }
Beispiel #7
0
        void SelectNode(TreeNode target, bool append)
        {
            // Ctrl.Current.Self の設定
            Ctrl.Current.Self = (target == null) ? null : target.Tag;
            if (Ctrl.Current.Self is TreeNodeBuilder)
            {
                Ctrl.Current.Self = ((TreeNodeBuilder)Ctrl.Current.Self).Tag;
            }

            // プロパティグリッドの設定
            this.propertyGrid.SelectedObject = Ctrl.Current.Self;

            // 選択された TreeNodeBuilder の探索
            TreeNodeBuilder selected = null;

            for (TreeNode node = target; node != null; node = node.Parent)
            {
                selected = node.Tag as TreeNodeBuilder;
                if (selected != null)
                {
                    break;
                }
            }

            // SelectedEntries の設定
            Core.Document doc = Core.Document.Current;
            if (append)
            {
                Core.IEntry entry = (selected == null) ? null : selected.Tag as Core.IEntry;
                if (entry == null)
                {
                    doc.SelectedEntry = null;
                }
                else
                {
                    doc.SelectedEntries.Add(entry);
                }
                Ctrl.Current.Driver.Abort(); // 現在のオペレーションをアボート
            }
            else
            {
                Core.IEntry before = doc.SelectedEntry;
                doc.SelectedEntry =
                    (selected == null) ? null : selected.Tag as Core.IEntry;
                if (before != doc.SelectedEntry)
                {
                    // 選択エントリが変わったときは、現在のオペレーションをアボート
                    Ctrl.Current.Driver.Abort();
                }
            }

            _docviews.Invalidate();
        }
        public static TreeNodeBuilder New(
            Core.Document document,
            Core.IEntry entry,
            TreeNodeCollection nodes
            )
        {
            string   name = MakeNodeName(entry.ID);
            string   text = entry.ToString();
            string   icon = "entry.png";
            TreeNode node = nodes.Add(name, text, icon, icon);

            node.Tag = new TreeNodeBuilder(document, entry, node);
            return((TreeNodeBuilder)node.Tag);
        }
 internal IEnumerable <PropertyControl> GetControls(Core.IEntry entry)
 {
     if (entry == null)
     {
         yield break;
     }
     if (entry.Entity != null)
     {
         var control = this.GetControl(entry.Entity);
         yield return(control != null ? control : new PropertyGridControl {
             TargetObject = entry.Entity
         });
     }
     foreach (var pair in entry.Elements)
     {
         yield return(this.GetControl(pair.Value));
     }
     yield return(this.GetControl(entry));
 }
Beispiel #10
0
 static void Activate(Core.IEntry self, Ctrl.IContext con)
 {
     con.Document.ActiveEntries = self.Entries;
 }
 TreeNodeBuilder(Core.Document document, Core.IEntry entry, TreeNode node)
 {
     _document = document;
     _path     = entry.Path;
     _node     = node;
 }
        public void Build()
        {
            Core.IBreath src = this.Tag;
            _node.Text = src.ToString();
            Core.IEntry entry = src as Core.IEntry;

            // entry
            if (entry != null)
            {
                ISceneDecorator deco  = DecoratorFactory.GetEntryDecorator(entry);
                string          image = (entry.Enabled && entry.IsVisible()) ? "entry.png" : "entry_gray.png";
                _node.ImageKey         = image;
                _node.SelectedImageKey = image;
            }

            // scene
            if (entry != null)
            {
                TreeNode node = this.Find("scene");
                if (node == null)
                {
                    node = _node.Nodes.Insert(
                        0, "scene", "描画情報", "scene.png", "scene.png"
                        );
                }
                ISceneDecorator elm = entry.GetElement <ISceneDecorator>();
                node.Tag = elm;
                node.Nodes.Clear();
                string icon = "decoration.png";
                foreach (IDecoration d in elm.Decorations)
                {
                    string   name = d.GetType().Name;
                    TreeNode dec  = node.Nodes.Add(name, name, icon, icon);
                    dec.Tag = d;
                }
            }

            // entity
            if (entry != null)
            {
                TreeNode node = this.Find("entity");
                if (entry.Entity != null)
                {
                    string name = entry.Entity.GetType().Name;
                    if (node == null)
                    {
                        node = _node.Nodes.Insert(
                            1, "entity", name, "entity.png", "entity.png");
                    }
                    else if (node.Text != name)
                    {
                        node.Text = name;
                    }
                    node.Tag = entry.Entity;
                }
                else if (node != null)
                {
                    _node.Nodes.Remove(node);
                }
            }

            // 不要な TreeNode を削除
            {
                List <TreeNode> removing = new List <TreeNode>();
                foreach (TreeNode node in _node.Nodes)
                {
                    if (node.Name == "scene")
                    {
                        continue;
                    }
                    if (node.Name == "entity")
                    {
                        continue;
                    }
                    TreeNodeBuilder tnb = (TreeNodeBuilder)node.Tag;
                    Core.IEntry     e   = tnb.Tag as Core.IEntry;
                    if (e == null || !this.SubEntries.Contains(e.ID))
                    {
                        removing.Add(node);
                    }
                }
                foreach (TreeNode node in removing)
                {
                    _node.Nodes.Remove(node);
                }
            }
        }
Beispiel #13
0
 static void PutBoundingBox(Core.IEntry entry)
 {
     entry.Entity.As <Geom.IBoundary3d>(boundary => entry.Entries.Put(boundary.BoundingBox));
 }
Beispiel #14
0
 DocTreeNode Find(Core.IEntry entry)
 {
     return((entry != null) ? this.Find(entry.Path) : null);
 }