public GraphElementSearcherDatabase AddNodesWithSearcherItemAttribute() { var types = TypeCache.GetTypesWithAttribute <SearcherItemAttribute>(); foreach (var type in types) { var attributes = type.GetCustomAttributes <SearcherItemAttribute>().ToList(); if (!attributes.Any()) { continue; } foreach (var attribute in attributes) { if (!attribute.StencilType.IsInstanceOfType(Stencil)) { continue; } var name = attribute.Path.Split('/').Last(); var path = attribute.Path.Remove(attribute.Path.LastIndexOf('/') + 1); switch (attribute.Context) { case SearcherContext.Graph: { var node = new GraphNodeModelSearcherItem( new NodeSearcherItemData(type), data => data.CreateNode(type, name), name ); Items.AddAtPath(node, path); break; } case SearcherContext.Stack: { var node = new StackNodeModelSearcherItem( new NodeSearcherItemData(type), data => data.CreateNode(type, name), name ); Items.AddAtPath(node, path); break; } default: Debug.LogWarning($"The node {type} is not a {SearcherContext.Stack} or " + $"{SearcherContext.Graph} node, so it cannot be add in the Searcher"); break; } break; } } return(this); }
public GraphElementSearcherDatabase AddStack() { var node = new GraphNodeModelSearcherItem( new SearcherItemData(SearcherItemTarget.Stack), data => data.CreateStack(string.Empty), k_Stack ); Items.AddAtPath(node); return(this); }
public GraphElementSearcherDatabase AddStickyNote() { var node = new GraphNodeModelSearcherItem( new SearcherItemData(SearcherItemTarget.StickyNote), data => { var rect = new Rect(data.Position, StickyNote.defaultSize); var vsGraphModel = (VSGraphModel)data.GraphModel; return(vsGraphModel.CreateStickyNote(rect, data.SpawnFlags)); }, k_Sticky ); Items.AddAtPath(node); return(this); }