Exemplo n.º 1
0
        public void SelectTab(OptionsTab tabID)
        {
            switch (tabID)
            {
            case OptionsTab.AutoUpdate:
                tabControl1.SelectedTab = autoUpdatePage;
                break;

            case OptionsTab.Misc:
                tabControl1.SelectedTab = miscPage;
                break;

            case OptionsTab.StartPage:
                tabControl1.SelectedTab = startPagePage;
                break;

            case OptionsTab.Text:
                tabControl1.SelectedTab = textPage;
                break;

            case OptionsTab.Threads:
                tabControl1.SelectedTab = threadsPage;
                break;

            case OptionsTab.Time:
                tabControl1.SelectedTab = timePage;
                break;

            case OptionsTab.VersionChecking:
                tabControl1.SelectedTab = versionPage;
                break;
            }
        }
Exemplo n.º 2
0
        private void ListBoxItem_Selected(object sender, RoutedEventArgs e)
        {
            // I call it a tab, but it's not really a tab appearance wise. It functions the same way though.
            string     tabName     = (string)(e.Source as FrameworkElement).Tag;
            OptionsTab selectedTab = (OptionsTab)Enum.Parse(typeof(OptionsTab), tabName);

            ActiveTab = selectedTab;
        }
Exemplo n.º 3
0
 void AddDynamicTab(IConfigToggle toggle)
 {
     if (toggle.IsOn)
     {
         var dynamicTab = new OptionsTab("dynamic", "Dynamic");
         dynamicTab.Options.Add(new ConfigHeader("header", "Dynamically Added Tab!"));
         Package.Tabs.Add(dynamicTab);
     }
     else
     {
         Package.Tabs.Remove("dynamic");
     }
 }
Exemplo n.º 4
0
        public void OpenDialog(OptionsTab defaultTab)
        {
            if(defaultTab == OptionsTab.General)
            {
                tabControl.SelectTab("tabPage_General");
            }
            if(defaultTab == OptionsTab.Rulers)
            {
                tabControl.SelectTab("tabPage_Rulers");
            }
            if(defaultTab == OptionsTab.Grid)
            {
                tabControl.SelectTab("tabPage_Grid");
            }

            GetOptionsToGUI();
            this.ShowDialog();
        }
Exemplo n.º 5
0
        public void OpenDialog(OptionsTab defaultTab)
        {
            if (defaultTab == OptionsTab.General)
            {
                tabControl.SelectTab("tabPage_General");
            }
            if (defaultTab == OptionsTab.Rulers)
            {
                tabControl.SelectTab("tabPage_Rulers");
            }
            if (defaultTab == OptionsTab.Grid)
            {
                tabControl.SelectTab("tabPage_Grid");
            }

            GetOptionsToGUI();
            this.ShowDialog();
        }
Exemplo n.º 6
0
 /// <summary>
 /// The goto tab.
 /// </summary>
 /// <param name="tab">
 /// The tab.
 /// </param>
 public void GotoTab(OptionsTab tab)
 {
     this.SelectedTab = tab;
 }
Exemplo n.º 7
0
 /// <summary>
 /// The goto tab.
 /// </summary>
 /// <param name="tab">
 /// The tab.
 /// </param>
 public void GotoTab(OptionsTab tab)
 {
     this.SelectedTab = tab;
 }
Exemplo n.º 8
0
        private void DrawContent(int windowID)
        {
            if (GUI.Button(new Rect(windowRect.width - 24, 0, 19, 19), "X"))
            {
                display = false;
            }
            //Player color
            GUI.DragWindow(moveRect);
            GUI.Box(new Rect(2, 20, windowRect.width - 4, 20), string.Empty, sectionHeaderStyle);
            selectedTab = (OptionsTab)GUILayout.Toolbar((int)selectedTab, GetOptionsTabStrings(), toolbarBtnStyle);

            int windowY = 17;

            windowY += 20 + 2;
            int groupY = 0;

            if (selectedTab == OptionsTab.PLAYER)
            {
                GUI.BeginGroup(new Rect(10, windowY, windowRect.width - 20, 106));
                groupY = 0;

                GUI.Label(new Rect(0, groupY, descWidth, 20), "Name:", descriptorStyle);
                plrNameStyle.normal.textColor = dmpSettings.playerColor;
                if (networkWorker != null && networkWorker.state == DarkMultiPlayerCommon.ClientState.RUNNING)
                {
                    GUI.Label(new Rect(descWidth + sepWidth, groupY,
                                       windowRect.width - (descWidth + sepWidth) - 20, 20),
                              dmpSettings.playerName, plrNameStyle);
                }
                else
                {
                    string newName = GUI.TextField(new Rect(
                                                       descWidth + sepWidth,
                                                       0,
                                                       windowRect.width - (descWidth + sepWidth) - 20,
                                                       20), dmpSettings.playerName, plrNameStyle);

                    if (!newName.Equals(dmpSettings.playerName))
                    {
                        dmpSettings.playerName = newName;
                        dmpSettings.SaveSettings();
                    }
                }
                groupY += 20 + 4;


                Color playerColor = dmpSettings.playerColor;

                GUI.Label(new Rect(0, groupY, descWidth, 20), "Red:", descriptorStyle);
                playerColor.r = GUI.HorizontalSlider(new Rect(
                                                         descWidth + sepWidth,
                                                         groupY + 5,
                                                         windowRect.width - (descWidth + sepWidth) - 20,
                                                         12
                                                         ), dmpSettings.playerColor.r, 0, 1);
                groupY += 20;

                GUI.Label(new Rect(0, groupY, descWidth, 20), "Green:", descriptorStyle);
                playerColor.g = GUI.HorizontalSlider(new Rect(
                                                         descWidth + sepWidth,
                                                         groupY + 5,
                                                         windowRect.width - (descWidth + sepWidth) - 20,
                                                         12
                                                         ), dmpSettings.playerColor.g, 0, 1);
                groupY += 20;

                GUI.Label(new Rect(0, groupY, descWidth, 20), "Blue:", descriptorStyle);
                playerColor.b = GUI.HorizontalSlider(new Rect(
                                                         descWidth + sepWidth,
                                                         groupY + 5,
                                                         windowRect.width - (descWidth + sepWidth) - 20,
                                                         12
                                                         ), dmpSettings.playerColor.b, 0, 1);
                groupY += 22;

                if (GUI.Button(new Rect(0, groupY, windowRect.width - 20, 20), "Random Color", buttonStyle))
                {
                    playerColor = PlayerColorWorker.GenerateRandomColor();
                }

                if (!playerColor.Equals(dmpSettings.playerColor))
                {
                    dmpSettings.playerColor = playerColor;
                    dmpSettings.SaveSettings();

                    if (networkWorker != null && playerColorWorker != null && networkWorker.state == DarkMultiPlayerCommon.ClientState.RUNNING)
                    {
                        playerColorWorker.SendPlayerColorToServer();
                    }
                }

                GUI.EndGroup();
                // windowY += 106 + 5;
            }
            if (selectedTab == OptionsTab.CACHE)
            {
                GUI.BeginGroup(new Rect(10, windowY, windowRect.width - 20, 84));
                groupY = 0;

                GUI.Label(new Rect(0, groupY, descWidth, 20), "Current:", descriptorStyle);
                GUI.Label(
                    new Rect(descWidth + sepWidth, groupY, windowRect.width - (descWidth + sepWidth) - 102, 20),
                    Mathf.Round(universeSyncCache.currentCacheSize / 1024).ToString() + " KB");

                groupY += 20;

                GUI.Label(new Rect(0, groupY, descWidth, 20), "Maximum:", descriptorStyle);
                string newSizeStr = GUI.TextField(new Rect(descWidth + sepWidth, groupY, windowRect.width - (descWidth + sepWidth) - 152, 20), (dmpSettings.cacheSize / 1024).ToString(), textFieldStyle);
                GUI.Label(new Rect(descWidth + sepWidth + 80, groupY, 100, 20), "kilobytes (KB)");
                int newSize;
                if (string.IsNullOrEmpty(newSizeStr))
                {
                    newSize = 1;
                }
                else
                {
                    if (int.TryParse(newSizeStr, out newSize))
                    {
                        if (newSize < 1)
                        {
                            newSize = 1;
                        }
                        else if (newSize > 1000000)
                        {
                            newSize = 1000000;
                        }
                    }
                    else
                    {
                        newSize = 100000;
                    }
                }

                if (newSize != dmpSettings.cacheSize)
                {
                    dmpSettings.cacheSize = newSize * 1024;
                    dmpSettings.SaveSettings();
                }
                groupY += 22;

                GUI.Label(new Rect(0, groupY, descWidth, 20), "Manage:", descriptorStyle);
                if (GUI.Button(new Rect(descWidth + sepWidth, groupY, windowRect.width - (descWidth + sepWidth) - 20, 20), "Expire"))
                {
                    universeSyncCache.ExpireCache();
                }

                groupY += 22;

                if (GUI.Button(new Rect(descWidth + sepWidth, groupY, windowRect.width - (descWidth + sepWidth) - 20, 20), "Delete"))
                {
                    universeSyncCache.DeleteCache();
                }
                GUI.EndGroup();
            }
            //Key bindings
            if (selectedTab == OptionsTab.CONTROLS)
            {
                GUI.BeginGroup(new Rect(10, windowY, windowRect.width - 20, 92));
                groupY = 0;

                GUI.Label(new Rect(0, groupY, windowRect.width - 20, 48),
                          "Click a button below to select the action you want to change. Then press a key to set the binding. To cancel, click the button again or press Escape.",
                          noteStyle);
                groupY += 48;

                GUI.Label(new Rect(0, groupY, descWidth, 20), "Chat:", descriptorStyle);
                string chatKey = dmpSettings.chatKey.ToString();
                if (settingChat)
                {
                    chatKey = settingKeyMessage;
                    if (Event.current.isKey)
                    {
                        if (Event.current.keyCode != KeyCode.Escape)
                        {
                            dmpSettings.chatKey = Event.current.keyCode;
                            dmpSettings.SaveSettings();
                        }
                        settingChat = false;
                    }
                }

                if (GUI.Button(new Rect(descWidth + sepWidth, groupY, windowRect.width - (descWidth + sepWidth) - 20, 20), chatKey, buttonStyle))
                {
                    settingScreenshot = false;
                    settingChat       = !settingChat;
                }
                groupY += 22;

                GUI.Label(new Rect(0, groupY, descWidth, 20), "Screenshot:", descriptorStyle);
                string screenshotKey = dmpSettings.screenshotKey.ToString();
                if (settingScreenshot)
                {
                    screenshotKey = settingKeyMessage;
                    if (Event.current.isKey)
                    {
                        if (Event.current.keyCode != KeyCode.Escape)
                        {
                            dmpSettings.screenshotKey = Event.current.keyCode;
                            dmpSettings.SaveSettings();
                        }
                        settingScreenshot = false;
                    }
                }

                if (GUI.Button(new Rect(descWidth + sepWidth, groupY, windowRect.width - (descWidth + sepWidth) - 20, 20), screenshotKey, buttonStyle))
                {
                    settingChat       = false;
                    settingScreenshot = !settingScreenshot;
                }
                GUI.EndGroup();
            }
            if (selectedTab == OptionsTab.ADVANCED)
            {
                GUI.Box(new Rect(2, windowY, windowRect.width - 4, 20), "Mod Control", sectionHeaderStyle);
                windowY += 22;

                GUI.BeginGroup(new Rect(10, windowY, windowRect.width - 20, 42));
                groupY = 0;

                GUI.Label(new Rect(0, groupY, descWidth, 20), "Generate:", descriptorStyle);
                if (GUI.Button(new Rect(descWidth + sepWidth, groupY, windowRect.width - (descWidth + sepWidth) - 20, 20), "Whitelist", buttonStyle))
                {
                    modWorker.GenerateModControlFile(true);
                }

                groupY += 22;

                if (GUI.Button(new Rect(descWidth + sepWidth, groupY, windowRect.width - (descWidth + sepWidth) - 20, 20), "Blacklist", buttonStyle))
                {
                    modWorker.GenerateModControlFile(false);
                }

                GUI.EndGroup();
                windowY += 47;

                GUI.Box(new Rect(2, windowY, windowRect.width - 4, 20), "Other", sectionHeaderStyle);
                windowY += 22;

                GUI.BeginGroup(new Rect(10, windowY, windowRect.width - 20, 148));
                groupY = 0;

                bool toggleCompression = GUI.Toggle(new Rect(0, groupY, windowRect.width - 20, 20), dmpSettings.compressionEnabled, "Compress Network Traffic");
                if (toggleCompression != dmpSettings.compressionEnabled)
                {
                    dmpSettings.compressionEnabled = toggleCompression;
                    dmpSettings.SaveSettings();
                }
                groupY += 22;

                bool toggleRevert = GUI.Toggle(new Rect(0, groupY, windowRect.width - 20, 20), dmpSettings.revertEnabled, "Enable Revert");
                if (toggleRevert != dmpSettings.revertEnabled)
                {
                    dmpSettings.revertEnabled = toggleRevert;
                    dmpSettings.SaveSettings();
                }
                groupY += 22;

                universeConverterWindow.display = GUI.Toggle(new Rect(0, groupY, windowRect.width - 20, 20), universeConverterWindow.display, "Generate DMP universe from saved game...", buttonStyle);
                groupY += 22;

                if (GUI.Button(new Rect(0, groupY, windowRect.width - 20, 20), "Reset Disclaimer", buttonStyle))
                {
                    dmpSettings.disclaimerAccepted = 0;
                    dmpSettings.SaveSettings();
                }
                groupY += 22;

                if (GUI.Button(new Rect(0, groupY, windowRect.width - 20, 20), toolbarMode, buttonStyle))
                {
                    int newSetting = (int)dmpSettings.toolbarType + 1;
                    //Overflow to 0
                    if (!Enum.IsDefined(typeof(DMPToolbarType), newSetting))
                    {
                        newSetting = 0;
                    }
                    dmpSettings.toolbarType = (DMPToolbarType)newSetting;
                    dmpSettings.SaveSettings();
                    UpdateToolbarString();
                    toolbarSupport.DetectSettingsChange();
                }
                groupY += 22;

#if DEBUG
                if (GUI.Button(new Rect(0, groupY, windowRect.width - 20, 20), "Check missing parts", buttonStyle))
                {
                    modWorker.CheckCommonStockParts();
                }
#endif

                GUI.EndGroup();
            }
        }
Exemplo n.º 9
0
 private FrameworkElement getFrameworkElementFromTab(OptionsTab tab)
 {
     return((FrameworkElement)OptionsTabsListBox.FindName(tab.ToString() + "Options"));
 }
Exemplo n.º 10
0
        private void GenerateOptions(TabbedOptionsPackage options, ModConfig config)
        {
            var firstTab = new OptionsTab("main", "Main");

            options.Tabs.Add(firstTab);

            var enableDrop = new ConfigToggle("enableDrop", "Enable Dropdown", config.enableDropdown);

            firstTab.Options.Add(enableDrop);

            var choices = new List <ISelectionChoice> {
                new SelectionChoice("none", "None"),
                new SelectionChoice("5", "Checkbox 5", "Hover text for Checkbox 5"),
                new SelectionChoice("6", "Checkbox 6", "Hover text for Checkbox 6"),
                new SelectionChoice("7", "Checkbox 7", "Hover text for Checkbox 7")
            };

            var dropdown = new ConfigSelection("drop", "Disable Another Option", choices, config.dropdownChoice, config.enableDropdown);

            dropdown.SelectionDidChange += Dropdown_SelectionDidChange;;
            firstTab.Options.Add(dropdown);

            enableDrop.StateDidChange += (toggle) => {
                dropdown.Enabled = toggle.IsOn;
            };

            var checkbox2 = new ConfigToggle("toggle2", "Add checkbox 9", config.checkbox2);

            firstTab.Options.Add(checkbox2);
            checkbox2.StateDidChange += AddDynamicOption;

            firstTab.Options.Add(new ConfigToggle("toggle3", "Checkbox 3", false));

            var slider = new ConfigRange("range", "Slider", 10, 25, 1, config.rangeValue, true);

            var stepper = new ConfigStepper("stepper", "Plus/Minus Controls", (decimal)5.0, (decimal)105.0, (decimal)1.5, config.stepperValue, RangeDisplayType.PERCENT);

            firstTab.Options.Add(slider);
            firstTab.Options.Add(stepper);

            firstTab.Options.Add(new ConfigToggle("stepperCheck", "Show Stepper Value", false));

            firstTab.Options.Add(new ConfigToggle("toggle5", "Checkbox 5"));
            firstTab.Options.Add(new ConfigToggle("toggle6", "Checkbox 6"));
            firstTab.Options.Add(new ConfigToggle("toggle7", "Checkbox 7"));
            firstTab.Options.Add(new ConfigToggle("toggle8", "Checkbox 8"));

            var saveButton = new ConfigAction("okButton", "OK Button", ButtonType.OK);

            firstTab.Options.Add(saveButton);

            saveButton.ActionWasTriggered += SaveButton_ActionWasTriggered;

            GraphicsEvents.OnPostRenderEvent += (sender, e) => {
                if (firstTab.GetOption <IConfigToggle>("toggle3").IsOn)
                {
                    Game1.spriteBatch.DrawString(Game1.dialogueFont, "Cool!", new Vector2(Game1.getMouseX(), Game1.getMouseY()), Color.Black);
                }

                if (firstTab.GetOption <IConfigToggle>("stepperCheck").IsOn)
                {
                    Game1.spriteBatch.DrawString(Game1.dialogueFont, stepper.Value.ToString(), new Vector2(Game1.getMouseX(), Game1.getMouseY() + 12 * Game1.pixelZoom), Color.Black);
                }
            };

            var secondTab = new OptionsTab("second", "Second");

            secondTab.Options.Add(new ConfigHeader("secondTabHeader", "Second Tab!"));
            options.Tabs.Add(secondTab);
        }
Exemplo n.º 11
0
        public void ExecuteTabChangedCommand(object parameter)
        {
            string tabName = parameter.ToString();

            CurrentTab         = parameter.ToString();
            ChartsButtonHeight = 25;
            WindowHeight       = _defaultWindowsHeight;
            if (ChartsHeight > 0)
            {
                ExecuteShowChartsCommand(this);
            }
            switch (tabName)
            {
            case "Calendar":
            {
                MainPanel             = new CalendarTab();
                MainPanel.DataContext = CalendarTabViewModel.Instance;
                ChartsButtonHeight    = 0;
                if ((MainPanel.DataContext as CalendarTabViewModel).TaskHeight > 0)
                {
                    (MainPanel.DataContext as CalendarTabViewModel).TaskHeight     = 0;
                    (MainPanel.DataContext as CalendarTabViewModel).ShowTasksLabel = Resources.showTasksLabel;
                }

                break;
            }

            case "Credit":
            {
                MainPanel             = new CostsTab();
                MainPanel.DataContext = CostsTabViewModel.Instance;
                break;
            }

            case "Water":
            {
                MainPanel             = new WaterTab();
                MainPanel.DataContext = WaterTabViewModel.Instance;
                break;
            }

            case "Dream":
            {
                MainPanel             = new DreamTab();
                MainPanel.DataContext = DreamTabViewModel.Instance;
                break;
            }

            case "Options":
            {
                MainPanel             = new OptionsTab();
                MainPanel.DataContext = new OptionsTabViewModel();
                ChartsButtonHeight    = 0;
                break;
            }
            }
            if (WindowWidth < _defaultWindowWidth)
            {
                ChangeWindowSize.Execute(this);
            }
        }
Exemplo n.º 12
0
        private void DrawContent(int windowID)
        {
            if (!loadEventHandled)
            {
                loadEventHandled = true;
                tempColor = Settings.fetch.playerColor;
                newCacheSize = Settings.fetch.cacheSize.ToString();
            }

            if (GUI.Button(new Rect(windowRect.width - 24, 0, 19, 19), "X"))
            {
                display = false;
            }
            //Player color
            GUI.DragWindow(moveRect);
            GUI.Box(new Rect(2, 20, windowRect.width - 4, 20), string.Empty, sectionHeaderStyle);
            selectedTab = (OptionsTab)GUILayout.Toolbar((int)selectedTab, GetOptionsTabStrings(), toolbarBtnStyle);

            int windowY = 17;
            windowY += 20 + 2;
            int groupY = 0;

            if (selectedTab == OptionsTab.PLAYER)
            {
                GUI.BeginGroup(new Rect(10, windowY, windowRect.width - 20, 106));
                groupY = 0;

                GUI.Label(new Rect(0, groupY, descWidth, 20), "Name:", descriptorStyle);
                plrNameStyle.normal.textColor = Settings.fetch.playerColor;
                if (NetworkWorker.fetch.state == DarkMultiPlayerCommon.ClientState.RUNNING)
                    GUI.Label(new Rect(descWidth + sepWidth, groupY,
                        windowRect.width - (descWidth + sepWidth) - 20, 20),
                        Settings.fetch.playerName, plrNameStyle);
                else
                {
                    string newName = GUI.TextField(new Rect(
                        descWidth + sepWidth,
                        0,
                        windowRect.width - (descWidth + sepWidth) - 20,
                        20), Settings.fetch.playerName, plrNameStyle);

                    if (!newName.Equals(Settings.fetch.playerName))
                    {
                        Settings.fetch.playerName = newName;
                        Settings.fetch.SaveSettings();
                    }
                }
                groupY += 20 + 4;

                Color playerColor = Settings.fetch.playerColor;

                GUI.Label(new Rect(0, groupY, descWidth, 20), "Red:", descriptorStyle);
                playerColor.r = GUI.HorizontalSlider(new Rect(
                    descWidth + sepWidth,
                    groupY + 5,
                    windowRect.width - (descWidth + sepWidth) - 20,
                    12
                    ), Settings.fetch.playerColor.r, 0, 1);
                groupY += 20;

                GUI.Label(new Rect(0, groupY, descWidth, 20), "Green:", descriptorStyle);
                playerColor.g = GUI.HorizontalSlider(new Rect(
                    descWidth + sepWidth,
                    groupY + 5,
                    windowRect.width - (descWidth + sepWidth) - 20,
                    12
                    ), Settings.fetch.playerColor.g, 0, 1);
                groupY += 20;

                GUI.Label(new Rect(0, groupY, descWidth, 20), "Blue:", descriptorStyle);
                playerColor.b = GUI.HorizontalSlider(new Rect(
                    descWidth + sepWidth,
                    groupY + 5,
                    windowRect.width - (descWidth + sepWidth) - 20,
                    12
                    ), Settings.fetch.playerColor.b, 0, 1);
                groupY += 22;

                if (GUI.Button(new Rect(0, groupY, windowRect.width - 20, 20), "Random Color", buttonStyle))
                    playerColor = PlayerColorWorker.GenerateRandomColor();

                if (!playerColor.Equals(Settings.fetch.playerColor))
                {
                    Settings.fetch.playerColor = playerColor;
                    Settings.fetch.SaveSettings();

                    if (NetworkWorker.fetch.state == DarkMultiPlayerCommon.ClientState.RUNNING)
                        PlayerColorWorker.fetch.SendPlayerColorToServer();
                }

                GUI.EndGroup();
               // windowY += 106 + 5;
            }
            if (selectedTab == OptionsTab.CACHE)
            {
                GUI.BeginGroup(new Rect(10, windowY, windowRect.width - 20, 84));
                groupY = 0;

                GUI.Label(new Rect(0, groupY, descWidth, 20), "Current:", descriptorStyle);
                GUI.Label(
                    new Rect(descWidth + sepWidth, groupY, windowRect.width - (descWidth + sepWidth) - 102, 20),
                    Mathf.Round(UniverseSyncCache.fetch.currentCacheSize / 1024).ToString() + " KB");

                groupY += 20;

                GUI.Label(new Rect(0, groupY, descWidth, 20), "Maximum:", descriptorStyle);
                string newSizeStr = GUI.TextField(new Rect(descWidth + sepWidth, groupY, windowRect.width - (descWidth + sepWidth) - 152, 20), (Settings.fetch.cacheSize / 1024).ToString(), textFieldStyle);
                GUI.Label(new Rect(descWidth + sepWidth + 80, groupY, 100, 20), "kilobytes (KB)");
                int newSize;
                if (string.IsNullOrEmpty(newSizeStr)) newSize = 1;
                else
                {
                    if (int.TryParse(newSizeStr, out newSize))
                    {
                        if (newSize < 1) newSize = 1;
                        else if (newSize > 1000000) newSize = 1000000;
                    }
                    else newSize = 100000;
                }

                if (newSize != Settings.fetch.cacheSize)
                {
                    Settings.fetch.cacheSize = newSize * 1024;
                    Settings.fetch.SaveSettings();
                }
                groupY += 22;

                GUI.Label(new Rect(0, groupY, descWidth, 20), "Manage:", descriptorStyle);
                if (GUI.Button(new Rect(descWidth + sepWidth, groupY, windowRect.width - (descWidth + sepWidth) - 20, 20), "Expire"))
                    UniverseSyncCache.fetch.ExpireCache();

                groupY += 22;

                if (GUI.Button(new Rect(descWidth + sepWidth, groupY, windowRect.width - (descWidth + sepWidth) - 20, 20), "Delete"))
                    UniverseSyncCache.fetch.DeleteCache();
                GUI.EndGroup();
            }
            //Key bindings
            if (selectedTab == OptionsTab.CONTROLS)
            {
                GUI.BeginGroup(new Rect(10, windowY, windowRect.width - 20, 92));
                groupY = 0;

                GUI.Label(new Rect(0, groupY, windowRect.width - 20, 48),
                    "Click a button below to select the action you want to change. Then press a key to set the binding. To cancel, click the button again or press Escape.",
                    noteStyle);
                groupY += 48;

                GUI.Label(new Rect(0, groupY, descWidth, 20), "Chat:", descriptorStyle);
                string chatKey = Settings.fetch.chatKey.ToString();
                if (settingChat)
                {
                    chatKey = settingKeyMessage;
                    if (Event.current.isKey)
                    {
                        if (Event.current.keyCode != KeyCode.Escape)
                        {
                            Settings.fetch.chatKey = Event.current.keyCode;
                            Settings.fetch.SaveSettings();
                        }
                        settingChat = false;
                    }
                }

                if (GUI.Button(new Rect(descWidth + sepWidth, groupY, windowRect.width - (descWidth + sepWidth) - 20, 20), chatKey, buttonStyle))
                {
                    settingScreenshot = false;
                    settingChat = !settingChat;
                }
                groupY += 22;

                GUI.Label(new Rect(0, groupY, descWidth, 20), "Screenshot:", descriptorStyle);
                string screenshotKey = Settings.fetch.screenshotKey.ToString();
                if (settingScreenshot)
                {
                    screenshotKey = settingKeyMessage;
                    if (Event.current.isKey)
                    {
                        if (Event.current.keyCode != KeyCode.Escape)
                        {
                            Settings.fetch.screenshotKey = Event.current.keyCode;
                            Settings.fetch.SaveSettings();
                        }
                        settingScreenshot = false;
                    }
                }

                if (GUI.Button(new Rect(descWidth + sepWidth, groupY, windowRect.width - (descWidth + sepWidth) - 20, 20), screenshotKey, buttonStyle))
                {
                    settingChat = false;
                    settingScreenshot = !settingScreenshot;
                }
                GUI.EndGroup();
            }
            if (selectedTab == OptionsTab.ADVANCED)
            {
                GUI.Box(new Rect(2, windowY, windowRect.width - 4, 20), "Mod Control", sectionHeaderStyle);
                windowY += 22;

                GUI.BeginGroup(new Rect(10, windowY, windowRect.width - 20, 42));
                groupY = 0;

                GUI.Label(new Rect(0, groupY, descWidth, 20), "Generate:", descriptorStyle);
                if (GUI.Button(new Rect(descWidth + sepWidth, groupY, windowRect.width - (descWidth + sepWidth) - 20, 20), "Whitelist", buttonStyle))
                    ModWorker.fetch.GenerateModControlFile(true);

                groupY += 22;

                if (GUI.Button(new Rect(descWidth + sepWidth, groupY, windowRect.width - (descWidth + sepWidth) - 20, 20), "Blacklist", buttonStyle))
                    ModWorker.fetch.GenerateModControlFile(false);

                GUI.EndGroup();
                windowY += 47;

                GUI.Box(new Rect(2, windowY, windowRect.width - 4, 20), "Other", sectionHeaderStyle);
                windowY += 22;

                GUI.BeginGroup(new Rect(10, windowY, windowRect.width - 20, 148));
                groupY = 0;

                bool toggleCompression = GUI.Toggle(new Rect(0, groupY, windowRect.width - 20, 20), Settings.fetch.compressionEnabled, "Compress Network Traffic");
                if (toggleCompression != Settings.fetch.compressionEnabled)
                {
                    Settings.fetch.compressionEnabled = toggleCompression;
                    Settings.fetch.SaveSettings();
                }
                groupY += 22;

                bool toggleRevert = GUI.Toggle(new Rect(0, groupY, windowRect.width - 20, 20), Settings.fetch.revertEnabled, "Enable Revert");
                if (toggleRevert != Settings.fetch.revertEnabled)
                {
                    Settings.fetch.revertEnabled = toggleRevert;
                    Settings.fetch.SaveSettings();
                }
                groupY += 22;

                UniverseConverterWindow.fetch.display = GUI.Toggle(new Rect(0, groupY, windowRect.width - 20, 20), UniverseConverterWindow.fetch.display, "Generate DMP universe from saved game...", buttonStyle);
                groupY += 22;

                if (GUI.Button(new Rect(0, groupY, windowRect.width - 20, 20), "Reset Disclaimer", buttonStyle))
                {
                    Settings.fetch.disclaimerAccepted = 0;
                    Settings.fetch.SaveSettings();
                }
                groupY += 22;

                if (GUI.Button(new Rect(0, groupY, windowRect.width - 20, 20), toolbarMode, buttonStyle))
                {
                    int newSetting = (int)Settings.fetch.toolbarType + 1;
                    //Overflow to 0
                    if (!Enum.IsDefined(typeof(DMPToolbarType), newSetting))
                    {
                        newSetting = 0;
                    }
                    Settings.fetch.toolbarType = (DMPToolbarType)newSetting;
                    Settings.fetch.SaveSettings();
                    UpdateToolbarString();
                    ToolbarSupport.fetch.DetectSettingsChange();
                }
                groupY += 22;

            #if DEBUG
                if (GUI.Button(new Rect(0, groupY, windowRect.width - 20, 20), "Check missing parts", buttonStyle))
                {
                    ModWorker.fetch.CheckCommonStockParts();
                }
            #endif

                GUI.EndGroup();
            }
        }