// ----------------------------------------------------------------------- void DisplayObjectErrorsAndWarnings(List <ErrorWarning> errors, List <ErrorWarning> warnings) { // -- Determine wich objects have errors or warnings -- var objectIds = P.append(P.map(e => e.ObjectId, errors), P.map(w => w.ObjectId, warnings)); objectIds = P.removeDuplicates(objectIds); // -- Display the errors/warnings on the objects in the graph -- foreach (var id in objectIds) { // -- Determine if node is visible -- var node = IStorage[id]; if (!DisplayRoot.IsParentOf(node)) { continue; } var pos = node.GlobalPosition; if (!VisibleGraphRect.Contains(pos)) { continue; } // -- Determine errors/warnings for this particular node -- var nodeErrors = P.filter(e => e.ObjectId == id, errors); var nodeWarnings = P.filter(w => w.ObjectId == id, warnings); // -- Display the appropriate error/warning icon -- var r = Math3D.BuildRectCenteredAt(pos, 32f, 32f); r = myGraphics.TranslateAndScale(r); DisplayErrorsAndWarningAt(r, nodeErrors, nodeWarnings); } }
public void OnActivate(Type classType, iCS_IStorage storage, GUIContent title = null, iCS_EditorObject target = null) { // Configuration parameters. myClassType = classType; myStorage = storage; myTitle = title ?? new GUIContent(kDefaultTitle); myTarget = target; // Common variables. myCheckBoxSize = GUI.skin.toggle.CalcSize(new GUIContent("")); // Extract fields & properties from class descriptor. var libraryDatabase = LibraryController.LibraryDatabase; var libraryType = libraryDatabase.GetLibraryType(classType); var libraryFields = libraryType.GetMembers <LibraryField>(); var libraryProperties = libraryType.GetMembers <LibraryProperty>(); var libraryFieldsAndProperties = P.append <LibraryObject>(libraryFields, libraryProperties); List <VariablePair> variables = new List <VariablePair>(); foreach (var libraryObject in libraryFieldsAndProperties) { bool isActive = (myTarget != null && myStorage != null) ? myStorage.PropertiesWizardFindFunction(myTarget, libraryObject) != null : false; string name = GetVariableName(libraryObject); var variablePair = GetVariablePair(name, variables); if (libraryObject is LibraryFieldSetter || libraryObject is LibraryPropertySetter) { if (variablePair != null) { variablePair.InputControlPair.Component = libraryObject; variablePair.InputControlPair.IsActive = isActive; } else { variables.Add(new VariablePair(libraryObject, isActive, null, false)); } } else { if (variablePair != null) { variablePair.OutputControlPair.Component = libraryObject; variablePair.OutputControlPair.IsActive = isActive; } else { variables.Add(new VariablePair(null, false, libraryObject, isActive)); } } } myVariables = variables.ToArray(); Array.Sort(myVariables, (x, y) => GetVariableName(x).CompareTo(GetVariableName(y))); // Build view myTableView = new DSTableView(new RectOffset(0, 0, 0, 0), true, myTitle, DSView.AnchorEnum.Center, true, true); myTableView.DataSource = this; DSTableColumn inColumn = new DSTableColumn(kInColumnId, new RectOffset(kSpacer, kSpacer, 0, 0), new GUIContent("In"), DSView.AnchorEnum.Center); myTableView.AddColumn(inColumn); DSTableColumn outColumn = new DSTableColumn(kOutColumnId, new RectOffset(kSpacer, kSpacer, 0, 0), new GUIContent("Out"), DSView.AnchorEnum.Center); myTableView.AddColumn(outColumn); DSTableColumn variableNameColumn = new DSTableColumn(kNameColumnId, new RectOffset(kSpacer, kSpacer, 0, 0), new GUIContent("Name"), DSView.AnchorEnum.CenterLeft); myTableView.AddColumn(variableNameColumn); DSTableColumn variableTypeColumn = new DSTableColumn(kTypeColumnId, new RectOffset(kSpacer, kSpacer, 0, 0), new GUIContent("Type"), DSView.AnchorEnum.CenterLeft); myTableView.AddColumn(variableTypeColumn); }