Exemple #1
0
        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);
        }
Exemple #2
0
        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);
                        }
                    }
                }
            }
        }
Exemple #3
0
        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);
        }
Exemple #4
0
        protected void updateDynamicLabel()
        {
            SettingsProperties properties = SettingsStorage.getSettingsProperties(getId());

            if (properties.dynamicLabel != null)
            {
                label = properties.dynamicLabel(this);
            }
        }
Exemple #5
0
        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);
        }
Exemple #6
0
        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;
        }
Exemple #7
0
        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();
        }
Exemple #8
0
        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";
            }
        }
Exemple #9
0
        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();
        }
Exemple #10
0
 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);
                 }
             }
         }
     }
 }