private void LoadSettings()
        {
            if (!File.Exists(SaveFileName))
            {
                return;
            }
            var xdoc = XDocument.Load(SaveFileName);
            var toggleKey = xdoc.Root.Attribute("toggleKey");
            if (toggleKey != null && !String.IsNullOrEmpty(toggleKey.Value))
            {
                foreach (string keyName in Enum.GetNames(typeof(KeyCode)))
                {
                    if (toggleKey.Value.Equals(keyName))
                    {
                        this.toggleKey = (KeyCode)Enum.Parse(typeof(KeyCode), toggleKey.Value);
                    }
                }
            }
            var presetNodes = xdoc.Descendants("preset");
            if (presetNodes.Count() == 0)
            {
                return;
            }
            presets = new Dictionary<string, CCPreset>();
            foreach (var presetNode in presetNodes)
            {
                CCPreset preset = new CCPreset();
                preset.name = presetNode.Attribute("name").Value;
                var clearMask = presetNode.Attribute("clearMask");
                if (clearMask != null && !String.IsNullOrEmpty(clearMask.Value))
                {
                    preset.clearMask = (bool)clearMask;
                }

                preset.slots = new Dictionary<string, CCSlot>();
                var slotNodes = presetNode.Element("slots").Elements("slot");
                foreach (var slotNode in slotNodes)
                {
                    var slot = new CCSlot();
                    slot.name = slotNode.Attribute("slotname").Value;
                    slot.materials = new Dictionary<string, CCMaterial>();
                    var materialNodes = slotNode.Elements("material");
                    foreach (var materialNode in materialNodes)
                    {
                        var material = new CCMaterial();
                        material.name = materialNode.Element("name").Value;
                        material.shader = materialNode.Element("shader").Value;
                        var colorNode = materialNode.Element("color");
                        var r = (float)colorNode.Attribute("R");
                        var g = (float)colorNode.Attribute("G");
                        var b = (float)colorNode.Attribute("B");
                        var a = (float)colorNode.Attribute("A");
                        material.color = new Color(r, g, b, a);
                        colorNode = materialNode.Element("shadowColor");
                        if (colorNode != null)
                        {
                            r = (float)colorNode.Attribute("R");
                            g = (float)colorNode.Attribute("G");
                            b = (float)colorNode.Attribute("B");
                            a = (float)colorNode.Attribute("A");
                        }
                        material.shadowColor = new Color(r, g, b, a);
                        colorNode = materialNode.Element("rimColor");
                        if (colorNode != null)
                        {
                            r = (float)colorNode.Attribute("R");
                            g = (float)colorNode.Attribute("G");
                            b = (float)colorNode.Attribute("B");
                            a = (float)colorNode.Attribute("A");
                        }
                        material.rimColor = new Color(r, g, b, a);
                        colorNode = materialNode.Element("outlineColor");
                        if (colorNode != null)
                        {
                            r = (float)colorNode.Attribute("R");
                            g = (float)colorNode.Attribute("G");
                            b = (float)colorNode.Attribute("B");
                            a = (float)colorNode.Attribute("A");
                        }
                        material.outlineColor = new Color(r, g, b, a);

                        var f = materialNode.Element("shininess");
                        if (f != null)
                        {
                            material.shininess = (float)f;
                        }
                        f = materialNode.Element("outlineWidth");
                        if (f != null)
                        {
                            material.outlineWidth = (float)f;
                        }
                        f = materialNode.Element("rimPower");
                        if (f != null)
                        {
                            material.rimPower = (float)f;
                        }
                        f = materialNode.Element("rimShift");
                        if (f != null)
                        {
                            material.rimShift = (float)f;
                        }
                        slot.materials.Add(material.name, material);
                    }
                    preset.slots.Add(slot.name, slot);
                }

                preset.mpns = new Dictionary<string, string>();
                var mpnNodes = presetNode.Element("mpns").Elements("mpn");
                foreach (var mpnNode in mpnNodes)
                {
                    preset.mpns.Add(mpnNode.Attribute("name").Value, mpnNode.Value);
                }

                preset.delNodes = new Dictionary<string, bool>();
                var nodes = presetNode.Element("nodes").Elements("node");
                foreach (var node in nodes)
                {
                    string key = Nodenames[node.Attribute("name").Value];
                    preset.delNodes.Add(key, (bool)node.Attribute("visible"));
                }

                presets.Add(preset.name, preset);
            }
        }
        private void DoSelectPreset(int winId)
        {
            float margin = FixPx(marginPx);
            float fontSize = FixPx(fontPx);
            float itemHeight = FixPx(itemHeightPx);

            Rect scrollRect = new Rect(margin, (itemHeight + margin) * 2, winRect.width - margin * 2, winRect.height - (itemHeight + margin) * 4);
            Rect conRect = new Rect(0, 0, scrollRect.width - 20, 0);
            Rect outRect = new Rect(0, 0, winRect.width - margin * 2, itemHeight);
            GUIStyle lStyle = "label";
            GUIStyle bStyle = "button";
            GUIStyle tStyle = "toggle";

            Color color = new Color(1f, 1f, 1f, 0.98f);
            lStyle.fontSize = FixPx(fontPx);
            lStyle.normal.textColor = color;
            bStyle.fontSize = FixPx(fontPx);
            bStyle.normal.textColor = color;
            tStyle.fontSize = FixPx(fontPx);
            tStyle.normal.textColor = color;
            GUI.Label(outRect, "プリセット適用", lStyle);
            outRect.y += itemHeight + margin;

            conRect.height += (itemHeight + margin) * presets.Count + margin * 2;
            outRect.y = 0;
            outRect.x = margin * 2;

            scrollViewVector = GUI.BeginScrollView(scrollRect, scrollViewVector, conRect);
            foreach (var preset in presets)
            {
                if (GUI.Button(outRect, preset.Key, bStyle))
                {
                    targetPreset = preset.Value;
                    ApplyMpns();
                    menuType = MenuType.Main;
                }
                outRect.y += itemHeight + margin;
            }

            GUI.EndScrollView();
            outRect.y = winRect.height - (itemHeight + margin) + margin;
            if (GUI.Button(outRect, "閉じる", bStyle))
            {
                menuType = MenuType.Main;
            }
            GUI.DragWindow();
        }