private void UseSelectedInstance() { if (KSPInstancesListView.SelectedItems.Count == 0) { return; } var selected = KSPInstancesListView.SelectedItems[0]; var instName = selected?.Tag as string; if (instName == null) { return; } try { _manager.SetCurrentInstance(instName); DialogResult = DialogResult.OK; Close(); } catch (NotKSPDirKraken k) { GUI.user.RaiseError(Properties.Resources.ManageKspInstancesNotValid, k.path); } }
private void UseSelectedInstance() { if (KSPInstancesListView.SelectedItems.Count == 0) { return; } var selected = KSPInstancesListView.SelectedItems[0]; var instName = selected?.Tag as string; if (instName == null) { return; } try { if (SetAsDefaultCheckbox.Checked) { _manager.SetAutoStart(instName); } _manager.SetCurrentInstance(instName); DialogResult = DialogResult.OK; Close(); } catch (NotKSPDirKraken k) { GUI.user.displayError("Directory {0} is not valid KSP directory.", new object[] { k.path }); } }
private void UseSelectedInstance() { var instance = (string)KSPInstancesListView.SelectedItems[0].Tag; if (SetAsDefaultCheckbox.Checked) { manager.SetAutoStart(instance); } manager.SetCurrentInstance(instance); DialogResult = DialogResult.OK; Close(); }
private void SelectButton_Click(object sender, EventArgs e) { var instance = (string)KSPInstancesListView.SelectedItems[0].Tag; if (SetAsDefaultCheckbox.Checked) { manager.SetAutoStart(instance); } manager.SetCurrentInstance(instance); Hide(); // main.Show(); }
private void UseSelectedInstance() { if (KSPInstancesListView.SelectedItems.Count == 0) { return; } var selected = KSPInstancesListView.SelectedItems[0]; var instName = selected?.Tag as string; if (instName == null) { return; } if (SetAsDefaultCheckbox.Checked) { _manager.SetAutoStart(instName); } _manager.SetCurrentInstance(instName); DialogResult = DialogResult.OK; Close(); }
/// <summary> /// User is done. Start cloning or faking, depending on the clicked radio button. /// Close the window if everything went right. /// </summary> private async void buttonOK_Click(object sender, EventArgs e) { // Do some basic checks. if (textBoxNewName.TextLength == 0) { user.RaiseError(Properties.Resources.CloneFakeKspDialogEnterName); return; } if (textBoxNewPath.TextLength == 0) { user.RaiseError(Properties.Resources.CloneFakeKspDialogEnterPath); return; } string newName = textBoxNewName.Text; string newPath = textBoxNewPath.Text; // Show progress bar and deactivate controls. progressBar.Style = ProgressBarStyle.Marquee; progressBar.Show(); foreach (Control ctrl in this.Controls) { ctrl.Enabled = false; } // Clone the specified instance. // Done in a new task to not block the GUI thread. if (radioButtonClone.Checked) { user.RaiseMessage(Properties.Resources.CloneFakeKspDialogCloningInstance); try { await Task.Run(() => { KSP instanceToClone = new KSP(textBoxClonePath.Text, "irrelevant", user); if (instanceToClone.Valid) { manager.CloneInstance(instanceToClone, newName, newPath); } else { throw new NotKSPDirKraken(instanceToClone.GameDir()); } }); } catch (NotKSPDirKraken kraken) { user.RaiseError(string.Format(Properties.Resources.CloneFakeKspDialogInstanceNotValid, kraken.path)); reactivateDialog(); return; } catch (PathErrorKraken kraken) { user.RaiseError(string.Format(Properties.Resources.CloneFakeKspDialogDestinationNotEmpty, kraken.path)); reactivateDialog(); return; } catch (IOException ex) { user.RaiseError(string.Format(Properties.Resources.CloneFakeKspDialogCloneFailed, ex.Message)); reactivateDialog(); return; } catch (Exception ex) { user.RaiseError(string.Format(Properties.Resources.CloneFakeKspDialogCloneFailed, ex.Message)); reactivateDialog(); return; } if (checkBoxSetAsDefault.Checked) { manager.SetAutoStart(newName); } if (checkBoxSwitchInstance.Checked) { manager.SetCurrentInstance(newName); } user.RaiseMessage(Properties.Resources.CloneFakeKspDialogSuccessfulClone); DialogResult = DialogResult.OK; this.Close(); } // Create a new dummy instance. // Also in a separate task. else if (radioButtonFake.Checked) { Versioning.KspVersion kspVersion = Versioning.KspVersion.Parse(comboBoxKspVersion.Text); string dlcVersion = textBoxDlcVersion.Text; user.RaiseMessage(Properties.Resources.CloneFakeKspDialogCreatingInstance); try { await Task.Run(() => { manager.FakeInstance(newName, newPath, kspVersion, dlcVersion); }); } catch (BadInstallLocationKraken) { user.RaiseError(Properties.Resources.CloneFakeKspDialogDestinationNotEmpty); reactivateDialog(); return; } catch (ArgumentException) { user.RaiseError(Properties.Resources.CloneFakeKspDialogNameAlreadyUsed); reactivateDialog(); return; } catch (Exception ex) { user.RaiseError(string.Format(Properties.Resources.CloneFakeKspDialogFakeFailed, ex.Message)); reactivateDialog(); return; } if (checkBoxSetAsDefault.Checked) { manager.SetAutoStart(newName); } if (checkBoxSwitchInstance.Checked) { manager.SetCurrentInstance(newName); } user.RaiseMessage(Properties.Resources.CloneFakeKspDialogSuccessfulCreate); DialogResult = DialogResult.OK; this.Close(); } }
/// <summary> /// User is done. Start cloning or faking, depending on the clicked radio button. /// Close the window if everything went right. /// </summary> private async void buttonOK_Click(object sender, EventArgs e) { string newName = textBoxNewName.Text; string newPath = textBoxNewPath.Text; // Do some basic checks. if (String.IsNullOrWhiteSpace(newName)) { user.RaiseError(Properties.Resources.CloneFakeKspDialogEnterName); return; } if (String.IsNullOrWhiteSpace(newPath)) { user.RaiseError(Properties.Resources.CloneFakeKspDialogEnterPath); return; } // Show progress bar and deactivate controls. progressBar.Style = ProgressBarStyle.Marquee; progressBar.Show(); foreach (Control ctrl in this.Controls) { ctrl.Enabled = false; } // Clone the specified instance. // Done in a new task to not block the GUI thread. if (radioButtonClone.Checked) { user.RaiseMessage(Properties.Resources.CloneFakeKspDialogCloningInstance); try { await Task.Run(() => { KSP instanceToClone = new KSP(textBoxClonePath.Text, "irrelevant", user); if (instanceToClone.Valid) { manager.CloneInstance(instanceToClone, newName, newPath); } else { throw new NotKSPDirKraken(instanceToClone.GameDir()); } }); } catch (InstanceNameTakenKraken) { user.RaiseError(Properties.Resources.CloneFakeKspDialogNameAlreadyUsed); reactivateDialog(); return; } catch (NotKSPDirKraken kraken) { user.RaiseError(string.Format(Properties.Resources.CloneFakeKspDialogInstanceNotValid, kraken.path)); reactivateDialog(); return; } catch (PathErrorKraken kraken) { user.RaiseError(string.Format(Properties.Resources.CloneFakeKspDialogDestinationNotEmpty, kraken.path)); reactivateDialog(); return; } catch (IOException ex) { user.RaiseError(string.Format(Properties.Resources.CloneFakeKspDialogCloneFailed, ex.Message)); reactivateDialog(); return; } catch (Exception ex) { user.RaiseError(string.Format(Properties.Resources.CloneFakeKspDialogCloneFailed, ex.Message)); reactivateDialog(); return; } if (checkBoxSetAsDefault.Checked) { manager.SetAutoStart(newName); } if (checkBoxSwitchInstance.Checked) { manager.SetCurrentInstance(newName); } user.RaiseMessage(Properties.Resources.CloneFakeKspDialogSuccessfulClone); DialogResult = DialogResult.OK; this.Close(); } // Create a new dummy instance. // Also in a separate task. else if (radioButtonFake.Checked) { KspVersion kspVersion = KspVersion.Parse(comboBoxKspVersion.Text); Dictionary <DLC.IDlcDetector, KspVersion> dlcs = new Dictionary <DLC.IDlcDetector, KspVersion>(); if (!String.IsNullOrWhiteSpace(textBoxMHDlcVersion.Text) && textBoxMHDlcVersion.Text.ToLower() != "none") { if (KspVersion.TryParse(textBoxMHDlcVersion.Text, out KspVersion ver)) { dlcs.Add(new DLC.MakingHistoryDlcDetector(), ver); } else { user.RaiseError(Properties.Resources.CloneFakeKspDialogDlcVersionMalformatted, "Making History"); reactivateDialog(); return; } } if (!String.IsNullOrWhiteSpace(textBoxBGDlcVersion.Text) && textBoxBGDlcVersion.Text.ToLower() != "none") { if (KspVersion.TryParse(textBoxBGDlcVersion.Text, out KspVersion ver)) { dlcs.Add(new DLC.BreakingGroundDlcDetector(), ver); } else { user.RaiseError(Properties.Resources.CloneFakeKspDialogDlcVersionMalformatted, "Breaking Ground"); reactivateDialog(); return; } } user.RaiseMessage(Properties.Resources.CloneFakeKspDialogCreatingInstance); try { await Task.Run(() => { manager.FakeInstance(newName, newPath, kspVersion, dlcs); }); } catch (InstanceNameTakenKraken) { user.RaiseError(Properties.Resources.CloneFakeKspDialogNameAlreadyUsed); reactivateDialog(); return; } catch (BadInstallLocationKraken) { user.RaiseError(Properties.Resources.CloneFakeKspDialogDestinationNotEmpty, newPath); reactivateDialog(); return; } catch (Exception ex) { user.RaiseError(string.Format(Properties.Resources.CloneFakeKspDialogFakeFailed, ex.Message)); reactivateDialog(); return; } if (checkBoxSetAsDefault.Checked) { manager.SetAutoStart(newName); } if (checkBoxSwitchInstance.Checked) { manager.SetCurrentInstance(newName); } user.RaiseMessage(Properties.Resources.CloneFakeKspDialogSuccessfulCreate); DialogResult = DialogResult.OK; this.Close(); } }
public Main(string[] cmdlineArgs, GUIUser User, GuiOptions guiOptions) { log.Info("Starting the GUI"); m_CommandLineArgs = cmdlineArgs; m_User = User; User.displayMessage = AddStatusMessage; User.displayError = ErrorDialog; controlFactory = new ControlFactory(); Instance = this; mainModList = new MainModList(source => UpdateFilters(this), TooManyModsProvide, User); InitializeComponent(); // We need to initialize error dialog first to display errors m_ErrorDialog = controlFactory.CreateControl <ErrorDialog>(); Manager = new KSPManager(User); if (guiOptions?.FactorioInstallName != null) { // Set a KSP directory by its alias. try { manager.SetCurrentInstance(guiOptions.FactorioInstallName); } catch (InvalidKSPInstanceKraken) { User.RaiseError("Invalid Factorio installation specified \"{0}\", use '--factorio-dir' to specify by path, or 'list-installs' to see known Factorio installations", guiOptions.FactorioInstallName); } } else if (guiOptions?.FactorioDirectory != null) { // Set a KSP directory by its path manager.SetCurrentInstanceByPath(guiOptions.FactorioDirectory); } // We want to check our current instance is null first, as it may // have already been set by a command-line option. if (CurrentInstance == null && manager.GetPreferredInstance() == null) { Hide(); var result = new ChooseKSPInstance().ShowDialog(); if (result == DialogResult.Cancel || result == DialogResult.Abort) { Application.Exit(); return; } } m_Configuration = Configuration.LoadOrCreateConfiguration ( CurrentInstance.findFactorioBinaryPath(), Path.Combine(CurrentInstance.CkanDir(), "GUIConfig.xml"), Repo.default_ckan_repo.ToString() ); FilterToolButton.MouseHover += (sender, args) => FilterToolButton.ShowDropDown(); launchKSPToolStripMenuItem.MouseHover += (sender, args) => launchKSPToolStripMenuItem.ShowDropDown(); ApplyToolButton.MouseHover += (sender, args) => ApplyToolButton.ShowDropDown(); ModList.CurrentCellDirtyStateChanged += ModList_CurrentCellDirtyStateChanged; ModList.CellValueChanged += ModList_CellValueChanged; m_TabController = new TabController(MainTabControl); m_TabController.ShowTab("ManageModsTabPage"); RecreateDialogs(); if (guiOptions?.ShowConsole != true) { Util.HideConsoleWindow(); } // Disable the modinfo controls until a mod has been choosen. ModInfoTabControl.Enabled = false; // WinForms on Mac OS X has a nasty bug where the UI thread hogs the CPU, // making our download speeds really slow unless you move the mouse while // downloading. Yielding periodically addresses that. // https://bugzilla.novell.com/show_bug.cgi?id=663433 if (Platform.IsMac) { var yield_timer = new Timer { Interval = 2 }; yield_timer.Tick += (sender, e) => { Thread.Yield(); }; yield_timer.Start(); } Application.Run(this); }
/// <summary> /// User is done. Start cloning or faking, depending on the clicked radio button. /// Close the window if everything went right. /// </summary> private async void buttonOK_Click(object sender, EventArgs e) { // Do some basic checks. if (textBoxNewName.TextLength == 0) { user.RaiseError("Please enter a name for the new instance."); return; } if (textBoxNewPath.TextLength == 0) { user.RaiseError("Please enter a path for the new instance."); return; } string newName = textBoxNewName.Text; string newPath = textBoxNewPath.Text; // Show progress bar and deactivate controls. progressBar.Style = ProgressBarStyle.Marquee; progressBar.Show(); foreach (Control ctrl in this.Controls) { ctrl.Enabled = false; } // Clone the specified instance. // Done in a new task to not block the GUI thread. if (radioButtonClone.Checked) { user.RaiseMessage("Cloning instance..."); try { await Task.Run(() => { KSP instanceToClone = new KSP(textBoxClonePath.Text, "irrelevant", user); if (instanceToClone.Valid) { manager.CloneInstance(instanceToClone, newName, newPath); } else { throw new NotKSPDirKraken(instanceToClone.GameDir()); } }); } catch (NotKSPDirKraken kraken) { user.RaiseError("The instance you wanted to clone is not valid: " + kraken.path); reactivateDialog(); return; } catch (PathErrorKraken kraken) { user.RaiseError("The destination folder is not empty: " + kraken.path); reactivateDialog(); return; } catch (IOException ex) { user.RaiseError($"Clone failed: {ex.Message}"); reactivateDialog(); return; } catch (Exception ex) { user.RaiseError($"Clone failed: {ex.Message}"); reactivateDialog(); return; } if (checkBoxSetAsDefault.Checked) { manager.SetAutoStart(newName); } if (checkBoxSwitchInstance.Checked) { manager.SetCurrentInstance(newName); } user.RaiseMessage("Successfully cloned instance."); DialogResult = DialogResult.OK; this.Close(); } // Create a new dummy instance. // Also in a separate task. else if (radioButtonFake.Checked) { Versioning.KspVersion kspVersion = Versioning.KspVersion.Parse(comboBoxKspVersion.Text); string dlcVersion = textBoxDlcVersion.Text; user.RaiseMessage("Creating new instance..."); try { await Task.Run(() => { manager.FakeInstance(newName, newPath, kspVersion, dlcVersion); }); } catch (BadInstallLocationKraken) { user.RaiseError("The destination folder is not empty or invalid."); reactivateDialog(); return; } catch (ArgumentException) { user.RaiseError("This name is already used."); reactivateDialog(); return; } catch (Exception ex) { user.RaiseError($"Fake instance creation failed: {ex.Message}"); reactivateDialog(); return; } if (checkBoxSetAsDefault.Checked) { manager.SetAutoStart(newName); } if (checkBoxSwitchInstance.Checked) { manager.SetCurrentInstance(newName); } user.RaiseMessage("Successfully created instance."); DialogResult = DialogResult.OK; this.Close(); } }