/// <summary> /// Builds the properties for the labels's <see cref="ILabelModel"/> type. /// </summary> protected virtual void BuildModelProperties(IPropertyBuildContext <ILabel> context) { ValueGetterDelegate <Type> labelModelGetter = new ValueGetterDelegate <Type>( delegate { var type = context.CurrentInstance.LayoutParameter.Model.GetType(); while (!type.IsPublic) { type = type.BaseType; } return(type); }); ValueSetterDelegate <Type> labelModelSetter = new ValueSetterDelegate <Type>( delegate(Type value) { IGraph graph = context.Lookup(typeof(IGraph)) as IGraph; if (graph != null) { ILabelModel model = Activator.CreateInstance(value) as ILabelModel; if (model != null) { ILabelModelParameterFinder finder = model.Lookup(typeof(ILabelModelParameterFinder)) as ILabelModelParameterFinder; ILabelModelParameter parameter; ILabel subject = context.CurrentInstance; if (finder != null) { parameter = finder.FindBestParameter(subject, model, subject.GetLayout()); } else { parameter = model.CreateDefaultParameter(); } graph.SetLabelLayoutParameter(subject, parameter); } } }); ILabel currentLabel; currentLabel = context.CurrentInstance; if (currentLabel == null) { return; } if (currentLabel.Owner is IEdge) { context.AddEntry(EdgeLabelModelProperty, labelModelGetter, labelModelSetter, null); } if (currentLabel.Owner is INode) { context.AddEntry(NodeLabelModelProperty, labelModelGetter, labelModelSetter, null); } if (currentLabel.Owner is IPort) { context.AddEntry(PortLabelModelProperty, labelModelGetter, labelModelSetter, null); } }
/// <summary> /// Creates a new instance using the given parameter finder. /// </summary> public RotatedNodeLabelModelParameterFinder(ILabelModelParameterFinder wrappedFinder) { this.wrappedFinder = wrappedFinder; }