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(); } }
public DocTreeNode(Core.IEntry entry, TreeNode node) { _entry = entry; _node = node; _node.Tag = this; _docNodes = new DocTreeNodeCollection(_entry.Entries, _node.Nodes); }
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); } }
static void EnableDisable(Core.IEntry entry, Ctrl.IContext con, Ctrl.CommandOption opt) { if (opt.QueryRunnable) { opt.IsChecked = entry.Enabled; return; } entry.Enabled = !entry.Enabled; }
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); } } } }
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); } }
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)); }
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); } } }
static void PutBoundingBox(Core.IEntry entry) { entry.Entity.As <Geom.IBoundary3d>(boundary => entry.Entries.Put(boundary.BoundingBox)); }
DocTreeNode Find(Core.IEntry entry) { return((entry != null) ? this.Find(entry.Path) : null); }