UltimateZoneBuilder/Source/Core/Windows/ConfigForm.cs

884 lines
27 KiB
C#
Raw Normal View History

#region ================== Copyright (c) 2007 Pascal vd Heiden
/*
* Copyright (c) 2007 Pascal vd Heiden, www.codeimp.com
* This program is released under GNU General Public License
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
*/
#endregion
#region ================== Namespaces
using System;
using System.Collections.Generic;
using System.Drawing;
using System.IO;
using System.Windows.Forms;
using CodeImp.DoomBuilder.Config;
using CodeImp.DoomBuilder.Controls;
using CodeImp.DoomBuilder.Data;
using CodeImp.DoomBuilder.Editing;
using CodeImp.DoomBuilder.GZBuilder.Data;
#endregion
namespace CodeImp.DoomBuilder.Windows
{
internal partial class ConfigForm : DelayedForm
{
// Variables
private GameConfiguration gameconfig;
private ConfigurationInfo configinfo;
private List<DefinedTextureSet> copiedsets;
private bool preventchanges;
private bool reloadresources;
//mxd. "Copy/Paste" stuff
private ConfigurationInfo configinfocopy;
// Properties
public bool ReloadResources { get { return reloadresources; } }
// Constructor
public ConfigForm()
{
ListViewItem lvi;
// Initialize
InitializeComponent();
// Make list column header full width
columnname.Width = listconfigs.ClientRectangle.Width - SystemInformation.VerticalScrollBarWidth - 2;
// Fill list of configurations
foreach(ConfigurationInfo ci in General.Configs)
{
// Add a copy
lvi = listconfigs.Items.Add(ci.Name);
lvi.Tag = ci.Clone();
lvi.Checked = ci.Enabled; //mxd
lvi.ForeColor = (ci.Enabled ? SystemColors.WindowText : SystemColors.InactiveCaptionText); //mxd
// This is the current configuration?
if((General.Map != null) && (General.Map.ConfigSettings.Filename == ci.Filename))
lvi.Selected = true;
}
// No skill
skill.Value = 0;
// Nodebuilders are allowed to be empty
nodebuildersave.Items.Add(new NodebuilderInfo());
nodebuildertest.Items.Add(new NodebuilderInfo());
// Fill comboboxes with nodebuilders
nodebuildersave.Items.AddRange(General.Nodebuilders.ToArray());
nodebuildertest.Items.AddRange(General.Nodebuilders.ToArray());
// Fill list of editing modes
foreach(EditModeInfo emi in General.Editing.ModesInfo)
{
// Is this mode selectable by the user?
if(emi.IsOptional)
{
lvi = listmodes.Items.Add(emi.Attributes.DisplayName);
lvi.Tag = emi;
lvi.SubItems.Add(emi.Plugin.Plug.Name);
lvi.UseItemStyleForSubItems = true; //mxd
}
}
//mxd
listconfigs.ItemChecked += listconfigs_ItemChecked;
listconfigs.SelectedIndexChanged += listconfigs_SelectedIndexChanged;
//mxd. Trigger change to update the right panel...
listconfigs_MouseUp(this, new MouseEventArgs(MouseButtons.None, 0, 0, 0, 0));
}
// This shows a specific page
public void ShowTab(int index)
{
tabs.SelectedIndex = index;
}
// Configuration item selected
private void listconfigs_SelectedIndexChanged(object sender, EventArgs e)
{
NodebuilderInfo ni;
// Item selected?
if(listconfigs.SelectedItems.Count > 0)
{
// Enable panels
tabs.Enabled = true;
preventchanges = true;
//mxd. Store current engine name
if(configinfo != null && !String.IsNullOrEmpty(cbEngineSelector.Text))
configinfo.TestProgramName = cbEngineSelector.Text;
// Get config info of selected item
configinfo = listconfigs.SelectedItems[0].Tag as ConfigurationInfo;
//mxd. Load the game configuration
gameconfig = new GameConfiguration(configinfo.Configuration);
// Set defaults
configinfo.ApplyDefaults(gameconfig);
// Fill resources list
configdata.EditResourceLocationList(configinfo.Resources);
// Go for all nodebuilder save items
nodebuildersave.SelectedIndex = -1;
for(int i = 0; i < nodebuildersave.Items.Count; i++)
{
// Get item
ni = nodebuildersave.Items[i] as NodebuilderInfo;
// Item matches configuration setting?
if(string.Compare(ni.Name, configinfo.NodebuilderSave, false) == 0)
{
// Select this item
nodebuildersave.SelectedIndex = i;
break;
}
}
// Go for all nodebuilder test items
nodebuildertest.SelectedIndex = -1;
for(int i = 0; i < nodebuildertest.Items.Count; i++)
{
// Get item
ni = nodebuildertest.Items[i] as NodebuilderInfo;
// Item matches configuration setting?
if(string.Compare(ni.Name, configinfo.NodebuilderTest, false) == 0)
{
// Select this item
nodebuildertest.SelectedIndex = i;
break;
}
}
// Fill skills list
skill.ClearInfo();
skill.AddInfo(gameconfig.Skills.ToArray());
2013-03-18 13:52:27 +00:00
//mxd. Fill engines list
cbEngineSelector.Items.Clear();
foreach(EngineInfo info in configinfo.TestEngines)
cbEngineSelector.Items.Add(info.TestProgramName);
2013-03-18 13:52:27 +00:00
cbEngineSelector.SelectedIndex = configinfo.CurrentEngineIndex;
btnRemoveEngine.Enabled = configinfo.TestEngines.Count > 1;
// Fill texture sets list
listtextures.Items.Clear();
foreach(DefinedTextureSet ts in configinfo.TextureSets)
{
ListViewItem item = listtextures.Items.Add(ts.Name);
item.Tag = ts;
item.ImageIndex = 0;
}
listtextures.Sort();
// Go for all the editing modes in the list
foreach(ListViewItem lvi in listmodes.Items)
{
EditModeInfo emi = (lvi.Tag as EditModeInfo);
//mxd. Disable item if the mode does not support current map format
if (emi.Attributes.SupportedMapFormats != null &&
Array.IndexOf(emi.Attributes.SupportedMapFormats, gameconfig.FormatInterface) == -1)
{
lvi.Text = emi.Attributes.DisplayName + " (map format not supported)";
lvi.ForeColor = SystemColors.GrayText;
lvi.BackColor = SystemColors.InactiveBorder;
lvi.Checked = false;
}
else
{
lvi.Text = emi.Attributes.DisplayName;
lvi.ForeColor = SystemColors.WindowText;
lvi.BackColor = SystemColors.Window;
lvi.Checked = (configinfo.EditModes.ContainsKey(emi.Type.FullName) && configinfo.EditModes[emi.Type.FullName]);
}
}
// Update listmodes columns width (mxd)
listmodes.AutoResizeColumns(ColumnHeaderAutoResizeStyle.ColumnContent);
// Fill start modes
RefillStartModes();
2013-03-18 13:52:27 +00:00
//mxd. Initialise custom linedef colors panel
colorsControl.Setup(gameconfig, configinfo);
// Done
preventchanges = false;
}
}
// Key released
private void listconfigs_KeyUp(object sender, KeyEventArgs e)
{
// Nothing selected?
if(listconfigs.SelectedItems.Count == 0)
{
// Disable panels
gameconfig = null;
configinfo = null;
configdata.FixedResourceLocationList(new DataLocationList());
configdata.EditResourceLocationList(new DataLocationList());
nodebuildersave.SelectedIndex = -1;
nodebuildertest.SelectedIndex = -1;
testapplication.Text = "";
testparameters.Text = "";
shortpaths.Checked = false;
skill.Value = 0;
skill.ClearInfo();
customparameters.Checked = false;
tabs.Enabled = false;
listtextures.Items.Clear();
}
}
// Mouse released
private void listconfigs_MouseUp(object sender, MouseEventArgs e)
{
listconfigs_KeyUp(sender, new KeyEventArgs(Keys.None));
}
//mxd
private void listconfigs_ItemChecked(object sender, ItemCheckedEventArgs e)
{
e.Item.ForeColor = (e.Item.Checked ? SystemColors.WindowText : SystemColors.InactiveCaptionText);
}
// Resource locations changed
private void resourcelocations_OnContentChanged()
{
// Leave when no configuration selected
if(configinfo == null) return;
// Apply to selected configuration
configinfo.Resources.Clear();
configinfo.Resources.AddRange(configdata.GetResources());
if(!preventchanges) reloadresources = true;
}
// Nodebuilder selection changed
private void nodebuildersave_SelectedIndexChanged(object sender, EventArgs e)
{
// Leave during setup or when no configuration selected
if(preventchanges || configinfo == null || nodebuildersave.SelectedItem == null) return;
// Apply to selected configuration
configinfo.NodebuilderSave = (nodebuildersave.SelectedItem as NodebuilderInfo).Name;
configinfo.Changed = true; //mxd
}
// Nodebuilder selection changed
private void nodebuildertest_SelectedIndexChanged(object sender, EventArgs e)
{
// Leave during setup or when no configuration selected
if(preventchanges || configinfo == null || nodebuildertest.SelectedItem == null) return;
// Apply to selected configuration
configinfo.NodebuilderTest = (nodebuildertest.SelectedItem as NodebuilderInfo).Name;
configinfo.Changed = true; //mxd
}
// Test application changed
private void testapplication_TextChanged(object sender, EventArgs e)
{
// Leave during setup or when no configuration is selected
if(preventchanges || configinfo == null) return;
// Apply to selected configuration
configinfo.TestProgram = testapplication.Text;
//mxd. User entered engine name before picking the engine?
if(cbEngineSelector.SelectedIndex == -1)
{
ApplyTestEngineNameChange();
}
else
{
// Update engine name
configinfo.TestProgramName = Path.GetFileNameWithoutExtension(configinfo.TestProgram);
cbEngineSelector.Items[cbEngineSelector.SelectedIndex] = configinfo.TestProgramName;
}
configinfo.Changed = true; //mxd
}
// Test parameters changed
private void testparameters_TextChanged(object sender, EventArgs e)
{
// Leave when no configuration selected
if(preventchanges || configinfo == null) return;
// Apply to selected configuration
configinfo = listconfigs.SelectedItems[0].Tag as ConfigurationInfo;
configinfo.TestParameters = testparameters.Text;
configinfo.Changed = true; //mxd
// Show example result
CreateParametersExample();
}
// This creates a new parameters example
private void CreateParametersExample()
{
// Map loaded?
if(General.Map != null)
{
// Make converted parameters
testresult.Text = General.Map.Launcher.ConvertParameters(testparameters.Text, skill.Value, shortpaths.Checked);
}
}
//mxd
private void ApplyTestEngineNameChange()
{
int index = (int)cbEngineSelector.Tag;
if(index != -1 && cbEngineSelector.Text != cbEngineSelector.Items[index].ToString())
{
cbEngineSelector.Items[index] = cbEngineSelector.Text;
configinfo.TestProgramName = cbEngineSelector.Text;
configinfo.Changed = true; //mxd
}
}
// OK clicked
private void apply_Click(object sender, EventArgs e)
{
ConfigurationInfo ci;
//mxd. Check resources
for (int i = 0; i < listconfigs.Items.Count; i++)
{
// Get configuration item
ci = listconfigs.Items[i].Tag as ConfigurationInfo;
Visual mode: "Fit Textures" action can now fit textures across multiple selected surfaces. A number of times to repeat a texture can now be specified. Visual mode: removed "Fit Texture's Width" and "Fit Texture's Height" actions. Visual mode: "Auto-align texture offsets" actions were incorrectly aligning double-sided middle walls in some cases. Visual mode: "Auto-align texture offsets" actions now align non-wrapped double-sided middle walls to vertical offset closest to their initial vertical offset. Visual mode: middle parts of double-sided walls were ignored when Shift-selecting walls. Nodebuilders/Game configurations: GL nodes definitions were missing from game configurations. Nodebuilders/Game configurations: "~MAP" wildcard can now be a part of a lump name. Nodebuilders: GL nodes were not properly handled by the editor. Main Window: the window is now moved into the view when stored position is ouside of screen bounds. Classic and Visual modes: changing thing pitch was ignored in some cases. Visual mode: raising and lowering a thing with "+SPAWNCEILING" flag now works the same way as when raising/lowering a regular thing. Visual mode: using "Raise/Lower Floor/Ceiling to adjacent sector" actions on a thing with "+SPAWNCEILING" flag now works the same way as when using them on a regular thing. Rendering: even more fixes to MODELDEF and UDMF properties-related model rendering logic. Internal, ResourceListEditor: rewritten resource validation check in a more OOP-ish way. Configurations: fixed an infinite loop crash when a file was trying to include() itself. UDMF thing flags: added Skill 6-8 to the flags list (because there are thing filters for these). ZDoom_ACS.cfg: added definitions for SetTeleFog and SwapTeleFog. ZDoom_DECORATE.cfg: added definitions for A_SetTeleFog and A_SwapTeleFog. Updated ZDoom ACC. Updated documentation.
2014-12-22 21:36:49 +00:00
if(!ci.Resources.IsValid())
{
Visual mode: "Fit Textures" action can now fit textures across multiple selected surfaces. A number of times to repeat a texture can now be specified. Visual mode: removed "Fit Texture's Width" and "Fit Texture's Height" actions. Visual mode: "Auto-align texture offsets" actions were incorrectly aligning double-sided middle walls in some cases. Visual mode: "Auto-align texture offsets" actions now align non-wrapped double-sided middle walls to vertical offset closest to their initial vertical offset. Visual mode: middle parts of double-sided walls were ignored when Shift-selecting walls. Nodebuilders/Game configurations: GL nodes definitions were missing from game configurations. Nodebuilders/Game configurations: "~MAP" wildcard can now be a part of a lump name. Nodebuilders: GL nodes were not properly handled by the editor. Main Window: the window is now moved into the view when stored position is ouside of screen bounds. Classic and Visual modes: changing thing pitch was ignored in some cases. Visual mode: raising and lowering a thing with "+SPAWNCEILING" flag now works the same way as when raising/lowering a regular thing. Visual mode: using "Raise/Lower Floor/Ceiling to adjacent sector" actions on a thing with "+SPAWNCEILING" flag now works the same way as when using them on a regular thing. Rendering: even more fixes to MODELDEF and UDMF properties-related model rendering logic. Internal, ResourceListEditor: rewritten resource validation check in a more OOP-ish way. Configurations: fixed an infinite loop crash when a file was trying to include() itself. UDMF thing flags: added Skill 6-8 to the flags list (because there are thing filters for these). ZDoom_ACS.cfg: added definitions for SetTeleFog and SwapTeleFog. ZDoom_DECORATE.cfg: added definitions for A_SetTeleFog and A_SwapTeleFog. Updated ZDoom ACC. Updated documentation.
2014-12-22 21:36:49 +00:00
MessageBox.Show(this, "At least one resource doesn't exist in '" + ci.Name + "' game configuration!", Application.ProductName, MessageBoxButtons.OK, MessageBoxIcon.Warning);
tabs.SelectedTab = tabresources;
listconfigs.Focus();
listconfigs.Items[i].Selected = true;
return;
}
}
//mxd. Apply changes of current test engine name, if there are any
//TODO: move engine selector stuff into separate component!
if(configinfo != null) ApplyTestEngineNameChange();
//mxd. Apply configuration items. They should be in the same order, riiiight?
for(int i = 0; i < listconfigs.Items.Count; i++)
{
// Get configuration item
ci = listconfigs.Items[i].Tag as ConfigurationInfo;
ci.Enabled = listconfigs.Items[i].Checked;
// Apply settings
General.Configs[i].Enabled = ci.Enabled;
if(ci.Changed) General.Configs[i].Apply(ci);
}
2013-03-18 13:52:27 +00:00
//mxd. Update linedef color presets, mark the map as changed.
2013-03-18 13:52:27 +00:00
if(General.Map != null && General.Map.Map != null)
{
2013-03-18 13:52:27 +00:00
General.Map.Map.UpdateCustomLinedefColors();
General.Map.IsChanged = true;
}
// Close
this.DialogResult = DialogResult.OK;
this.Close();
}
// Cancel clicked
private void cancel_Click(object sender, EventArgs e)
{
// Close
this.DialogResult = DialogResult.Cancel;
this.Close();
}
// Browse test program
private void browsetestprogram_Click(object sender, EventArgs e)
{
// Set initial directory
if(testapplication.Text.Length > 0)
{
try { testprogramdialog.InitialDirectory = Path.GetDirectoryName(testapplication.Text); }
catch(Exception) { }
}
// Browse for test program
if(testprogramdialog.ShowDialog() == DialogResult.OK)
{
// Apply
testapplication.Text = testprogramdialog.FileName;
}
}
// Customize parameters (un)checked
private void customparameters_CheckedChanged(object sender, EventArgs e)
{
// Leave when no configuration selected
if(configinfo == null) return;
// Apply to selected configuration
configinfo.CustomParameters = customparameters.Checked;
configinfo.Changed = true; //mxd
// Update interface
labelparameters.Visible = customparameters.Checked;
testparameters.Visible = customparameters.Checked;
shortpaths.Visible = customparameters.Checked;
// Check if a map is loaded
if(General.Map != null)
{
// Show parameters example result
labelresult.Visible = customparameters.Checked;
testresult.Visible = customparameters.Checked;
noresultlabel.Visible = false;
}
else
{
// Cannot show parameters example result
labelresult.Visible = false;
testresult.Visible = false;
noresultlabel.Visible = customparameters.Checked;
}
}
// Use short paths changed
private void shortpaths_CheckedChanged(object sender, EventArgs e)
{
// Leave when no configuration selected
if(configinfo == null) return;
// Apply to selected configuration
configinfo.TestShortPaths = shortpaths.Checked;
configinfo.Changed = true; //mxd
CreateParametersExample();
}
// Skill changes
private void skill_ValueChanges(object sender, EventArgs e)
{
// Leave when no configuration selected
if(configinfo == null) return;
// Apply to selected configuration
configinfo.TestSkill = skill.Value;
configinfo.Changed = true; //mxd
CreateParametersExample();
}
// Make new texture set
private void addtextureset_Click(object sender, EventArgs e)
{
DefinedTextureSet s = new DefinedTextureSet("New Texture Set");
TextureSetForm form = new TextureSetForm();
form.Setup(s);
if(form.ShowDialog(this) == DialogResult.OK)
{
// Add to texture sets
configinfo.TextureSets.Add(s);
configinfo.Changed = true; //mxd
ListViewItem item = listtextures.Items.Add(s.Name);
item.Tag = s;
item.ImageIndex = 0;
listtextures.Sort();
reloadresources = true;
}
}
// Edit texture set
private void edittextureset_Click(object sender, EventArgs e)
{
// Texture Set selected?
if(listtextures.SelectedItems.Count > 0)
{
DefinedTextureSet s = (listtextures.SelectedItems[0].Tag as DefinedTextureSet);
TextureSetForm form = new TextureSetForm();
form.Setup(s);
form.ShowDialog(this);
listtextures.SelectedItems[0].Text = s.Name;
listtextures.Sort();
reloadresources = true;
}
}
// Remove texture set
private void removetextureset_Click(object sender, EventArgs e)
{
// Texture Set selected?
while(listtextures.SelectedItems.Count > 0)
{
// Remove from config info and list
DefinedTextureSet s = (listtextures.SelectedItems[0].Tag as DefinedTextureSet);
configinfo.TextureSets.Remove(s);
configinfo.Changed = true; //mxd
listtextures.SelectedItems[0].Remove();
reloadresources = true;
}
}
// Texture Set selected/deselected
private void listtextures_SelectedIndexChanged(object sender, EventArgs e)
{
edittextureset.Enabled = (listtextures.SelectedItems.Count > 0);
removetextureset.Enabled = (listtextures.SelectedItems.Count > 0);
copytexturesets.Enabled = (listtextures.SelectedItems.Count > 0);
}
// Doubleclicking a texture set
private void listtextures_DoubleClick(object sender, EventArgs e)
{
edittextureset_Click(sender, e);
}
// Copy selected texture sets
private void copytexturesets_Click(object sender, EventArgs e)
{
// Make copies
copiedsets = new List<DefinedTextureSet>();
foreach(ListViewItem item in listtextures.SelectedItems)
{
DefinedTextureSet s = (item.Tag as DefinedTextureSet);
copiedsets.Add(s.Copy());
}
// Enable button
pastetexturesets.Enabled = true;
}
// Paste copied texture sets
private void pastetexturesets_Click(object sender, EventArgs e)
{
if(copiedsets != null)
{
// Add copies
foreach(DefinedTextureSet ts in copiedsets)
{
DefinedTextureSet s = ts.Copy();
ListViewItem item = listtextures.Items.Add(s.Name);
item.Tag = s;
item.ImageIndex = 0;
configinfo.TextureSets.Add(s);
}
listtextures.Sort();
reloadresources = true;
configinfo.Changed = true; //mxd
}
}
// This will add the default sets from game configuration
private void restoretexturesets_Click(object sender, EventArgs e)
{
// Ask nicely first
if(MessageBox.Show(this, "This will add the default Texture Sets from the Game Configuration. Do you want to continue?",
"Add Default Sets", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.Yes)
{
// Add copies
foreach(DefinedTextureSet ts in gameconfig.TextureSets)
{
DefinedTextureSet s = ts.Copy();
ListViewItem item = listtextures.Items.Add(s.Name);
item.Tag = s;
item.ImageIndex = 0;
configinfo.TextureSets.Add(s);
}
listtextures.Sort();
reloadresources = true;
configinfo.Changed = true; //mxd
}
}
// This is called when an editing mode item is checked or unchecked
private void listmodes_ItemChecked(object sender, ItemCheckedEventArgs e)
{
if(preventchanges) return; //mxd
// Leave when no configuration selected
if(configinfo == null) return;
// mxd. Not the best way to detect a disabled item, but we will go with that...
if(e.Item.ForeColor == SystemColors.GrayText) e.Item.Checked = false;
// Apply changes
EditModeInfo emi = (e.Item.Tag as EditModeInfo);
bool currentstate = (configinfo.EditModes.ContainsKey(emi.Type.FullName) && configinfo.EditModes[emi.Type.FullName]);
if(e.Item.Checked && !currentstate)
{
// Add
configinfo.EditModes[emi.Type.FullName] = true;
configinfo.Changed = true; //mxd
}
else if(!e.Item.Checked && currentstate)
{
// Remove
configinfo.EditModes[emi.Type.FullName] = false;
configinfo.Changed = true; //mxd
}
preventchanges = true;
RefillStartModes();
preventchanges = false;
}
// Help requested
private void ConfigForm_HelpRequested(object sender, HelpEventArgs hlpevent)
{
General.ShowHelp("w_gameconfigurations.html");
hlpevent.Handled = true;
}
// This refills the start mode cobobox
private void RefillStartModes()
{
// Refill the startmode combobox
startmode.Items.Clear();
foreach(ListViewItem item in listmodes.Items)
{
if(item.Checked)
{
EditModeInfo emi = (item.Tag as EditModeInfo);
if(emi.Attributes.SafeStartMode)
{
int newindex = startmode.Items.Add(emi);
if(emi.Type.Name == configinfo.StartMode) startmode.SelectedIndex = newindex;
}
}
}
// Select the first in the combobox if none are selected
if((startmode.SelectedItem == null) && (startmode.Items.Count > 0))
{
startmode.SelectedIndex = 0;
EditModeInfo emi = (startmode.SelectedItem as EditModeInfo);
configinfo.StartMode = emi.Type.Name;
configinfo.Changed = true; //mxd
}
}
// Start mode combobox changed
private void startmode_SelectedIndexChanged(object sender, EventArgs e)
{
if(preventchanges || (configinfo == null)) return;
// Apply start mode
if(startmode.SelectedItem != null)
{
EditModeInfo emi = (startmode.SelectedItem as EditModeInfo);
configinfo.StartMode = emi.Type.Name;
configinfo.Changed = true; //mxd
}
}
//mxd
private void btnNewEngine_Click(object sender, EventArgs e)
{
preventchanges = true;
EngineInfo newInfo = new EngineInfo();
newInfo.TestSkill = (int)Math.Ceiling(gameconfig.Skills.Count / 2f); //set Medium skill level
configinfo.TestEngines.Add(newInfo);
configinfo.Changed = true; //mxd
//store current engine name
if(!String.IsNullOrEmpty(cbEngineSelector.Text))
configinfo.TestProgramName = cbEngineSelector.Text;
//refresh engines list
cbEngineSelector.Items.Clear();
foreach(EngineInfo info in configinfo.TestEngines)
cbEngineSelector.Items.Add(info.TestProgramName);
cbEngineSelector.SelectedIndex = configinfo.TestEngines.Count - 1;
btnRemoveEngine.Enabled = true;
preventchanges = false;
}
//mxd
private void btnRemoveEngine_Click(object sender, EventArgs e)
{
preventchanges = true;
//remove params
int index = cbEngineSelector.SelectedIndex;
cbEngineSelector.SelectedIndex = -1;
configinfo.TestEngines.RemoveAt(index);
configinfo.Changed = true; //mxd
//refresh engines list
cbEngineSelector.Items.Clear();
foreach(EngineInfo info in configinfo.TestEngines)
cbEngineSelector.Items.Add(info.TestProgramName);
if (index >= configinfo.TestEngines.Count)
index = configinfo.TestEngines.Count - 1;
cbEngineSelector.SelectedIndex = index;
if (configinfo.TestEngines.Count < 2)
btnRemoveEngine.Enabled = false;
preventchanges = false;
}
//mxd
private void cbEngineSelector_SelectedIndexChanged(object sender, EventArgs e)
{
if(cbEngineSelector.SelectedIndex == -1) return;
//set new values
configinfo.CurrentEngineIndex = cbEngineSelector.SelectedIndex;
configinfo.Changed = true; //mxd
cbEngineSelector.Tag = cbEngineSelector.SelectedIndex; //store for later use
// Set test application and parameters
if (!configinfo.CustomParameters)
{
configinfo.TestParameters = gameconfig.TestParameters;
configinfo.TestShortPaths = gameconfig.TestShortPaths;
}
configinfo.TestProgramName = cbEngineSelector.Text;
testapplication.Text = configinfo.TestProgram;
testparameters.Text = configinfo.TestParameters;
shortpaths.Checked = configinfo.TestShortPaths;
int skilllevel = configinfo.TestSkill;
skill.Value = skilllevel - 1; //mxd. WHY???
skill.Value = skilllevel;
customparameters.Checked = configinfo.CustomParameters;
}
//mxd
private void cbEngineSelector_DropDown(object sender, EventArgs e)
{
ApplyTestEngineNameChange();
}
2013-03-18 13:52:27 +00:00
//mxd
private void colorsControl_PresetsChanged(object sender, EventArgs e)
{
2013-03-18 13:52:27 +00:00
if(configinfo == null) return;
configinfo.LinedefColorPresets = colorsControl.GetPresets();
configinfo.Changed = true; //mxd
2013-03-18 13:52:27 +00:00
}
//mxd
private void ConfigForm_Shown(object sender, EventArgs e)
{
if (listconfigs.SelectedItems.Count > 0) listconfigs.SelectedItems[0].EnsureVisible();
}
#region ============= Copy/Paste context menu (mxd)
private void copypastemenu_Opening(object sender, System.ComponentModel.CancelEventArgs e)
{
if (listconfigs.SelectedIndices.Count < 1)
{
e.Cancel = true;
return;
}
ConfigurationInfo current = listconfigs.SelectedItems[0].Tag as ConfigurationInfo;
bool havecopiedconfig = configinfocopy != null;
bool formatinterfacesmatch = havecopiedconfig && current.FormatInterface == configinfocopy.FormatInterface;
pasteall.Enabled = formatinterfacesmatch;
pasteengines.Enabled = havecopiedconfig;
pasteresources.Enabled = havecopiedconfig;
pastecolorpresets.Enabled = formatinterfacesmatch;
}
private void copyall_Click(object sender, EventArgs e)
{
if(listconfigs.SelectedIndices.Count < 1) return;
ConfigurationInfo current = listconfigs.SelectedItems[0].Tag as ConfigurationInfo;
configinfocopy = current.Clone();
//display info
General.Interface.DisplayStatus(StatusType.Info, "Copied '" + configinfocopy.Name + "' game configuration");
}
private void pasteall_Click(object sender, EventArgs e)
{
if(listconfigs.SelectedIndices.Count < 1) return;
//get current configinfo
ConfigurationInfo current = listconfigs.SelectedItems[0].Tag as ConfigurationInfo;
current.PasteFrom(configinfocopy);
//update display
listconfigs_SelectedIndexChanged(listconfigs, EventArgs.Empty);
General.Interface.DisplayStatus(StatusType.Info, "Pasted game configuration from '" + configinfocopy.Name + "'");
}
private void pasteresources_Click(object sender, EventArgs e)
{
if(listconfigs.SelectedIndices.Count < 1) return;
//get current configinfo
ConfigurationInfo current = listconfigs.SelectedItems[0].Tag as ConfigurationInfo;
current.PasteResourcesFrom(configinfocopy);
//update display
listconfigs_SelectedIndexChanged(listconfigs, EventArgs.Empty);
General.Interface.DisplayStatus(StatusType.Info, "Pasted resources from '" + configinfocopy.Name + "'");
}
private void pasteengines_Click(object sender, EventArgs e)
{
if(listconfigs.SelectedIndices.Count < 1) return;
//get current configinfo
ConfigurationInfo current = listconfigs.SelectedItems[0].Tag as ConfigurationInfo;
current.PasteTestEnginesFrom(configinfocopy);
//update display
listconfigs_SelectedIndexChanged(listconfigs, EventArgs.Empty);
General.Interface.DisplayStatus(StatusType.Info, "Pasted engines list from '" + configinfocopy.Name + "'");
}
private void pastecolorpresets_Click(object sender, EventArgs e)
{
if(listconfigs.SelectedIndices.Count < 1) return;
//get current configinfo
ConfigurationInfo current = listconfigs.SelectedItems[0].Tag as ConfigurationInfo;
current.PasteColorPresetsFrom(configinfocopy);
//update display
listconfigs_SelectedIndexChanged(listconfigs, EventArgs.Empty);
General.Interface.DisplayStatus(StatusType.Info, "Pasted color presets from '" + configinfocopy.Name + "'");
}
#endregion
}
}