Ejemplo n.º 1
0
        public void AddWindowManager <DataType>(DataType data, string name) where DataType : class
        {
            WindowPreferenceManager manager = new WindowPreferenceManager()
            {
                Properties = new BasicObjectFlattener().Flatten(data, typeof(DataType)),
                ItemName   = name
            };

            if (childs.Contains(manager)) // WPM implements IQuatable
            {
                WindowPreferenceManager currentManager = null;
                foreach (var child in childs)
                {
                    if (child.ItemName.Equals(manager.ItemName))
                    {
                        currentManager = child;
                    }
                }
                if (currentManager != null && !currentManager.IsEquivalentTo(manager))
                {
                    childs.Remove(currentManager);
                    childs.Add(manager);
                }
            }
            else
            {
                childs.Add(manager);
            }
        }
Ejemplo n.º 2
0
        private StringBuilder Flatten(WindowPreferenceManager manager)
        {
            StringBuilder json = new StringBuilder("{\"" + manager.ItemName + "\":{");
            KeyValuePair <string, string> last = manager.Properties.Last();

            foreach (KeyValuePair <string, string> pair in manager.Properties)
            {
                json.Append(Jsonify(pair));
                if (!last.Key.Equals(pair.Key))
                {
                    json.Append(",");
                }
            }
            return(json.Append("}"));
        }
Ejemplo n.º 3
0
        private static List <WindowPreferenceManager> ParseWindowPreferenceManager(string s)
        {
            List <WindowPreferenceManager> managers = new List <WindowPreferenceManager>(s.Length / 100);

            int it       = 1;
            int charRead = 0;

            while (it < s.Length)
            {
                if (s[it] == '"') // property
                {
                    string name = string.Empty;
                    int    i    = it + 1;
                    while (i < s.Length && s[i] != '"')
                    {
                        name += s[i];
                        i++;
                    }
                    charRead += i;

                    WindowPreferenceManager manager = new WindowPreferenceManager()
                    {
                        ItemName = name
                    };
                    managers.Add(manager);

                    manager.Properties = Parse(s.Substring(charRead + 2), out int charParsed);
                    charRead          += charParsed;
                }
                // end
                it      += charRead == 0 ? 1 : charRead; // to avoid overflow
                charRead = 0;
            }

            managers.TrimExcess();
            return(managers);
        }