public static ISettingsInstance generateSingletonObject(SettingsProperties props) { ISettingsVisualizationSingletonSelection visuals = props.visualization as ISettingsVisualizationSingletonSelection; if (visuals != null) { List <SettingsInstance> lst; if (settingsInstances.TryGetValue(props.id, out lst)) { //at some point it was possible to have multiple copies in the list this just corrects that state. while (lst.Count > 1) { lst.RemoveAt(0); } if (lst.Any()) { return(lst.Last()); } else { try { SettingsInstance instance = new SettingsInstance(props.id, visuals.getBaseObject()); lst.Add(instance); return(instance); } catch { Log.Warning("Failed to load singleton object \"" + visuals.getBaseObject() + "\" into setting \"" + props.id + "\""); } } } } return(null); }
protected void attachFieldIfPossible(string fieldId) { //if a field that contains another ISettingsInstane object or a container that contains more of those is changed we have to attach those objects to this one ISettingsField field; if (fields.TryGetValue(fieldId, out field)) { object value = field.get(); if (value != null) { SettingsProperties settings = SettingsStorage.getSettingsProperties(getId()); ISettingsFieldProperties fieldSettings = settings.fields.Find(f => f.id.Equals(fieldId)); if (fieldSettings.isSettings) { ((ISettingsInstance)value).attach(this); } else if (fieldSettings.isList && ((ISettingsFieldPropertiesList)fieldSettings).isListSettings) { foreach (ISettingsInstance exposable in (IList)value) { exposable.attach(this); } } } } }
public static List <ISettingsInstance> generateListForSelection(SettingsProperties props) { if (props.visualization.displaySelection) { List <SettingsInstance> lst; if (settingsInstances.TryGetValue(props.id, out lst)) { ISettingsVisualizationSelection visualProps = ((ISettingsVisualizationSelection)props.visualization); List <object> allBaseObjects = visualProps.getBaseObjectsForSelection(); foreach (object baseObject in allBaseObjects.Where(o => lst.Find(si => si.getKey().Equals(visualProps.getKeyFromBaseObject(o))) == null)) { string key; try { key = visualProps.getKeyFromBaseObject(baseObject); } catch { Log.Warning("Failed to load key from database object \"" + baseObject + "\"."); continue; } if (!lst.Any(si => si.getKey().Equals(key))) { try { lst.Add(new SettingsInstance(props.id, baseObject)); } catch { Log.Warning("Failed to load database object for key \"" + key + "\" into setting \"" + props.id + "\"."); } } } //lst.AddRange(allBaseObjects.Where(o=>lst.Find(si=>si.getKey().Equals(visualProps.getKeyFromBaseObject(o)))==null).Select(o=>new SettingsInstance(props.id,o))); lst = lst.OrderByDescending(si => si.getActive()).ThenBy(si => si.getLabel()).ToList(); return(lst.Cast <ISettingsInstance>().ToList()); } } return(null); }
protected void updateDynamicLabel() { SettingsProperties properties = SettingsStorage.getSettingsProperties(getId()); if (properties.dynamicLabel != null) { label = properties.dynamicLabel(this); } }
public static SettingsProperties getOrInitSettingsProperties(string id) { SettingsProperties settings; if (!settingsProperties.TryGetValue(id, out settings)) { settings = new SettingsProperties(id, settingsProperties.Count); settingsProperties[id] = settings; } return(settings); }
public virtual void reset() { SettingsProperties properties = SettingsStorage.getSettingsProperties(getId()); ISettingsInstance originalSettings; if (properties.overriddenSettings.TryGetValue(getKey(), out originalSettings)) { adopt(originalSettings); } else { adopt(new SettingsInstance(id, ((ISettingsVisualizationSelection)properties.visualization).getBaseObjectFromKey(getKey()))); } active = false; dirty = false; }
public SettingsInstance(string id, object obj, string baseObjectKey, string label) { this.id = id; this.baseObjectKey = baseObjectKey; this.label = label; this.active = false; this.dirty = false; SettingsProperties properties = SettingsStorage.getSettingsProperties(getId()); foreach (SettingsFieldProperties p in properties.fields) { fields[p.id].set(p.getFromBaseObject(obj)); attachFieldIfPossible(p.id); } updateDynamicLabel(); }
public SettingsInstance(string id, object obj) : this(id, obj, null, null) { SettingsProperties properties = SettingsStorage.getSettingsProperties(getId()); ISettingsVisualizationSelection selection = properties.visualization as ISettingsVisualizationSelection; if (selection != null) { this.baseObjectKey = selection.getKeyFromBaseObject(obj); this.label = selection.getLabelFromBaseObject(obj); } else { this.baseObjectKey = "singleton"; this.label = "singleton"; } }
public virtual void adopt(ISettingsInstance source) { if (this == source) { return; } id = source.getId(); baseObjectKey = source.getKey(); label = source.getLabel(); fields.Clear(); SettingsProperties settings = SettingsStorage.getSettingsProperties(getId()); MethodInfo miGetNonGeneric = this.GetType().GetMethod("get", BindingFlags.Instance | BindingFlags.Public); MethodInfo miSetNonGeneric = this.GetType().GetMethod("set", BindingFlags.Instance | BindingFlags.Public); foreach (SettingsFieldProperties props in settings.fields) { miSetNonGeneric.MakeGenericMethod(props.type).Invoke(this, new Object[] { props.id, miGetNonGeneric.MakeGenericMethod(props.type).Invoke(source, new Object[] { props.id }) }); } active = source.getActive(); dirty = source.getDirty(); }
public void ExposeData() { if (Scribe.mode == LoadSaveMode.LoadingVars || Scribe.mode == LoadSaveMode.Saving) { Scribe_Values.Look <string>(ref id, "id", null); SettingsProperties properties = SettingsStorage.getSettingsProperties(getId()); if (Scribe.mode == LoadSaveMode.Saving) { OnBeforeSerialize(); foreach (SettingsFieldProperties p in properties.fields) { ISettingsField field; if (fields.TryGetValue(p.id, out field)) { field.OnBeforeSerialize(p); } } } OnSerialize(); foreach (SettingsFieldProperties p in properties.fields) { ISettingsField field; if (fields.TryGetValue(p.id, out field)) { field.ExposeData(p); } } if (Scribe.mode != LoadSaveMode.Saving) { OnAfterDeserialize(); foreach (SettingsFieldProperties p in properties.fields) { ISettingsField field; if (fields.TryGetValue(p.id, out field)) { field.OnAfterDeserialize(p); } } } } }