private void OnGUI()
        {
            GUI.skin = _mySkin;

            CelestialBody current = null;

            if (MapView.MapIsEnabled)
            {
                current = OverlayMgr.GetMapBody();
            }
            else
            {
                current = FlightGlobals.currentMainBody;
            }
            if (useEditor && current != null)
            {
                if (AdvancedGUI)
                {
                    _mainWindowRect.width = 520;
                }
                else
                {
                    _mainWindowRect.width = 260;
                }
                if (CloudLayer.GetBodyLayerCount(ConfigNodeList[SelectedConfig].url, current.name) != 0)
                {
                    _mainWindowRect.height = 745;
                    _mainWindowRect        = GUI.Window(0x8100, _mainWindowRect, DrawMainWindow, "Clouds");
                }
                else
                {
                    _mainWindowRect.height = 115;
                    _mainWindowRect        = GUI.Window(0x8100, _mainWindowRect, DrawMainWindow, "Clouds");
                }
            }
        }
        private void DrawMainWindow(int windowID)
        {
            oldBody     = currentBody;
            currentBody = null;
            if (MapView.MapIsEnabled)
            {
                currentBody = OverlayMgr.GetMapBody();
            }
            else
            {
                currentBody = FlightGlobals.currentMainBody;
            }
            if (currentBody != null)
            {
                GUIStyle gs = new GUIStyle(GUI.skin.label);
                gs.alignment = TextAnchor.MiddleCenter;

                AdvancedGUI = GUI.Toggle(
                    new Rect(10, 110, 125, 25), AdvancedGUI, "Advanced Settings");
                float itemFullWidth = AdvancedGUI ? (_mainWindowRect.width / 2) - 20 : _mainWindowRect.width - 20;

                GUI.Label(new Rect(35, 20, itemFullWidth - 50, 25), currentBody.name, gs);

                if (MapView.MapIsEnabled)
                {
                    if (GUI.Button(new Rect(10, 20, 25, 25), "<"))
                    {
                        MapView.MapCamera.SetTarget(OverlayMgr.GetPreviousBody(currentBody).name);
                    }
                    if (GUI.Button(new Rect(itemFullWidth - 15, 20, 25, 25), ">"))
                    {
                        MapView.MapCamera.SetTarget(OverlayMgr.GetNextBody(currentBody).name);
                    }
                }
                float halfWidth = (itemFullWidth / 2) - 5;

                if (GUI.Button(new Rect(10, 50, halfWidth, 25), "Reset to Save"))
                {
                    loadCloudLayers(false);
                    oldBody = null;
                }
                if (GUI.Button(new Rect(halfWidth + 20, 50, halfWidth, 25), "Reset to Default"))
                {
                    loadCloudLayers(true);
                    oldBody = null;
                }

                bool selectedConfigChanged = false;
                if (GUI.Button(new Rect(itemFullWidth - 15, 80, 25, 25), ">"))
                {
                    SelectedConfig++;
                    if (ConfigNodeList.Count <= SelectedConfig)
                    {
                        SelectedConfig = 0;
                    }
                    selectedConfigChanged = true;
                }

                string configUrl = ConfigNodeList[SelectedConfig].url;
                GUI.Button(new Rect(10, 80, itemFullWidth - 30, 25), ConfigNodeList[SelectedConfig].parent.url);


                int  layerCount = CloudLayer.GetBodyLayerCount(configUrl, currentBody.name);
                bool hasLayers  = layerCount != 0;

                halfWidth = hasLayers ? (itemFullWidth / 2) - 5 : itemFullWidth;
                if (GUI.Button(new Rect(10, 140, halfWidth, 25), "Add"))
                {
                    ConfigNode newNode = new ConfigNode("CLOUD_LAYER");
                    ConfigNodeList.First(n => n.url == configUrl).config.AddNode(newNode);
                    CloudLayer.Layers.Add(
                        new CloudLayer(configUrl, newNode, currentBody.name, new Color(1, 1, 1, 1), 1000f,
                                       new TextureSet(true), new TextureSet(), null, null, false));
                }
                if (hasLayers)
                {
                    GUI.Box(new Rect(10, 170, itemFullWidth, 115), "");
                    String[] layerList = CloudLayer.GetBodyLayerStringList(configUrl, currentBody.name);
                    ScrollPosLayerList = GUI.BeginScrollView(new Rect(15, 175, itemFullWidth - 10, 100), ScrollPosLayerList, new Rect(0, 0, itemFullWidth - 30, 25 * layerList.Length));
                    float layerWidth       = layerCount > 4 ? itemFullWidth - 30 : itemFullWidth - 10;
                    int   OldSelectedLayer = SelectedLayer;
                    SelectedLayer = SelectedLayer >= layerCount || SelectedLayer < 0 ? 0 : SelectedLayer;
                    SelectedLayer = GUI.SelectionGrid(new Rect(0, 0, layerWidth, 25 * layerList.Length), SelectedLayer, layerList, 1);
                    GUI.EndScrollView();

                    if (GUI.Button(new Rect(halfWidth + 20, 140, halfWidth, 25), "Remove"))
                    {
                        CloudLayer.RemoveLayer(configUrl, currentBody.name, SelectedLayer);
                        SelectedLayer = -1;
                        return;
                    }

                    if (SelectedLayer != OldSelectedLayer || currentBody != oldBody || selectedConfigChanged)
                    {
                        if (CloudLayer.ConfigBodyDatabase[configUrl].ContainsKey(currentBody.name) && CloudLayer.ConfigBodyDatabase[configUrl][currentBody.name].Count > SelectedLayer)
                        {
                            CloudGUI.MainTexture.Clone(CloudLayer.ConfigBodyDatabase[configUrl][currentBody.name][SelectedLayer].MainTexture);
                            CloudGUI.DetailTexture.Clone(CloudLayer.ConfigBodyDatabase[configUrl][currentBody.name][SelectedLayer].DetailTexture);
                            CloudGUI.Color.Clone(CloudLayer.ConfigBodyDatabase[configUrl][currentBody.name][SelectedLayer].Color);
                            CloudGUI.Altitude.Clone(CloudLayer.ConfigBodyDatabase[configUrl][currentBody.name][SelectedLayer].Altitude);
                            CloudGUI.ScaledShaderFloats.Clone(CloudLayer.ConfigBodyDatabase[configUrl][currentBody.name][SelectedLayer].ScaledShaderFloats);
                            CloudGUI.ShaderFloats.Clone(CloudLayer.ConfigBodyDatabase[configUrl][currentBody.name][SelectedLayer].ShaderFloats);
                            CloudGUI.UseVolume = CloudLayer.ConfigBodyDatabase[configUrl][currentBody.name][SelectedLayer].UseVolume;
                        }
                    }

                    if (CloudGUI.IsValid())
                    {
                        if (GUI.Button(new Rect(145, 110, 50, 25), "Apply"))
                        {
                            CloudLayer.ConfigBodyDatabase[configUrl][currentBody.name][SelectedLayer].ApplyGUIUpdate(CloudGUI);
                        }
                        if (GUI.Button(new Rect(200, 110, 50, 25), "Save"))
                        {
                            CloudLayer.ConfigBodyDatabase[configUrl][currentBody.name][SelectedLayer].ApplyGUIUpdate(CloudGUI);
                            saveCloudLayers();
                        }
                    }


                    gs.alignment = TextAnchor.MiddleRight;
                    if (AdvancedGUI)
                    {
                        GUI.Label(new Rect((_mainWindowRect.width / 2) + 10, 20, itemFullWidth, 25), "Settings:");
                        int advancedNextLine = HandleAdvancedGUI(CloudGUI.ShaderFloats, 50, _mainWindowRect.width / 2);
                        GUI.Label(new Rect((_mainWindowRect.width / 2) + 10, advancedNextLine, itemFullWidth, 25), "Scaled Settings:");
                        HandleAdvancedGUI(CloudGUI.ScaledShaderFloats, advancedNextLine + 30, _mainWindowRect.width / 2);
                    }

                    int nextLine = 290;

                    nextLine           = HandleAltitudeGUI(CloudGUI.Altitude, nextLine);
                    CloudGUI.UseVolume = GUI.Toggle(
                        new Rect(10, nextLine, 125, 25), CloudGUI.UseVolume, "Volumetric Clouds");
                    nextLine += 30;
                    nextLine  = HandleColorGUI(CloudGUI.Color, nextLine);


                    GUI.Label(
                        new Rect(10, nextLine, 80, 25), "MainTex: ", gs);
                    nextLine = HandleTextureGUI(CloudGUI.MainTexture, nextLine);

                    GUI.Label(
                        new Rect(10, nextLine, 80, 25), "DetailTex: ", gs);
                    CloudGUI.DetailTexture.InUse = GUI.Toggle(
                        new Rect(10, nextLine, 25, 25), CloudGUI.DetailTexture.InUse, "");
                    if (CloudGUI.DetailTexture.InUse)
                    {
                        nextLine = HandleTextureGUI(CloudGUI.DetailTexture, nextLine);
                    }
                    else
                    {
                        nextLine += 30;
                    }
                }
            }
            else
            {
                GUI.Label(new Rect(50, 50, 230, 25), "----");
            }
            GUI.DragWindow(new Rect(0, 0, 10000, 10000));
        }