mirror of
https://git.do.srb2.org/STJr/UltimateZoneBuilder.git
synced 2024-11-30 15:41:30 +00:00
cd6ee145a2
- added new placeholders %L1 and %L2 which result in the first and second map number (usefull for -warp) - clicking outside the selection in EditSelectionMode accepts the changes and returns to previous mode
354 lines
9.7 KiB
C#
354 lines
9.7 KiB
C#
|
|
#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.ComponentModel;
|
|
using System.Drawing;
|
|
using System.Text;
|
|
using System.Windows.Forms;
|
|
using Microsoft.Win32;
|
|
using System.Diagnostics;
|
|
using CodeImp.DoomBuilder.Actions;
|
|
using CodeImp.DoomBuilder.Data;
|
|
using CodeImp.DoomBuilder.Config;
|
|
using System.IO;
|
|
using CodeImp.DoomBuilder.Controls;
|
|
|
|
#endregion
|
|
|
|
namespace CodeImp.DoomBuilder.Windows
|
|
{
|
|
internal partial class ConfigForm : DelayedForm
|
|
{
|
|
// Variables
|
|
private GameConfiguration gameconfig;
|
|
|
|
// 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();
|
|
|
|
// This is the current configuration?
|
|
if((General.Map != null) && (General.Map.ConfigSettings.Filename == ci.Filename))
|
|
lvi.Selected = true;
|
|
}
|
|
|
|
// No skill
|
|
skill.Value = 0;
|
|
|
|
// TODO: Nodebuilders are allowed to be empty
|
|
|
|
// Fill comboboxes with nodebuilders
|
|
nodebuildersave.Items.AddRange(General.Nodebuilders.ToArray());
|
|
nodebuildertest.Items.AddRange(General.Nodebuilders.ToArray());
|
|
}
|
|
|
|
// This shows a specific page
|
|
public void ShowTab(int index)
|
|
{
|
|
tabs.SelectedIndex = index;
|
|
}
|
|
|
|
// Configuration item selected
|
|
private void listconfigs_SelectedIndexChanged(object sender, EventArgs e)
|
|
{
|
|
ConfigurationInfo ci;
|
|
NodebuilderInfo ni;
|
|
|
|
// Item selected?
|
|
if(listconfigs.SelectedItems.Count > 0)
|
|
{
|
|
// Enable panels
|
|
tabs.Enabled = true;
|
|
|
|
// Get config info of selected item
|
|
ci = listconfigs.SelectedItems[0].Tag as ConfigurationInfo;
|
|
|
|
// Load the game configuration
|
|
gameconfig = new GameConfiguration(General.LoadGameConfiguration(ci.Filename));
|
|
|
|
// Fill resources list
|
|
configdata.EditResourceLocationList(ci.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, ci.NodebuilderSave, false) == 0)
|
|
{
|
|
// Select this item
|
|
nodebuildersave.SelectedIndex = i;
|
|
break;
|
|
}
|
|
}
|
|
|
|
// Go for all nodebuilder save 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, ci.NodebuilderTest, false) == 0)
|
|
{
|
|
// Select this item
|
|
nodebuildertest.SelectedIndex = i;
|
|
break;
|
|
}
|
|
}
|
|
|
|
// Fill skills list
|
|
skill.ClearInfo();
|
|
skill.AddInfo(gameconfig.Skills.ToArray());
|
|
|
|
// Set test application and parameters
|
|
if(!ci.CustomParameters) ci.TestParameters = gameconfig.TestParameters;
|
|
testapplication.Text = ci.TestProgram;
|
|
testparameters.Text = ci.TestParameters;
|
|
int skilllevel = ci.TestSkill;
|
|
skill.Value = skilllevel - 1;
|
|
skill.Value = skilllevel;
|
|
customparameters.Checked = ci.CustomParameters;
|
|
}
|
|
}
|
|
|
|
// Key released
|
|
private void listconfigs_KeyUp(object sender, KeyEventArgs e)
|
|
{
|
|
// Nothing selected?
|
|
if(listconfigs.SelectedItems.Count == 0)
|
|
{
|
|
// Disable panels
|
|
configdata.FixedResourceLocationList(new DataLocationList());
|
|
configdata.EditResourceLocationList(new DataLocationList());
|
|
nodebuildersave.SelectedIndex = -1;
|
|
nodebuildertest.SelectedIndex = -1;
|
|
testapplication.Text = "";
|
|
testparameters.Text = "";
|
|
skill.Value = 0;
|
|
skill.ClearInfo();
|
|
customparameters.Checked = false;
|
|
tabs.Enabled = false;
|
|
gameconfig = null;
|
|
}
|
|
}
|
|
|
|
// Mouse released
|
|
private void listconfigs_MouseUp(object sender, MouseEventArgs e)
|
|
{
|
|
listconfigs_KeyUp(sender, new KeyEventArgs(Keys.None));
|
|
}
|
|
|
|
// Resource locations changed
|
|
private void resourcelocations_OnContentChanged()
|
|
{
|
|
ConfigurationInfo ci;
|
|
|
|
// Leave when no configuration selected
|
|
if(listconfigs.SelectedItems.Count == 0) return;
|
|
|
|
// Apply to selected configuration
|
|
ci = listconfigs.SelectedItems[0].Tag as ConfigurationInfo;
|
|
ci.Resources.Clear();
|
|
ci.Resources.AddRange(configdata.GetResources());
|
|
}
|
|
|
|
// Nodebuilder selection changed
|
|
private void nodebuildersave_SelectedIndexChanged(object sender, EventArgs e)
|
|
{
|
|
ConfigurationInfo ci;
|
|
|
|
// Leave when no configuration selected
|
|
if(listconfigs.SelectedItems.Count == 0) return;
|
|
|
|
// Apply to selected configuration
|
|
ci = listconfigs.SelectedItems[0].Tag as ConfigurationInfo;
|
|
if(nodebuildersave.SelectedItem != null)
|
|
ci.NodebuilderSave = (nodebuildersave.SelectedItem as NodebuilderInfo).Name;
|
|
}
|
|
|
|
// Nodebuilder selection changed
|
|
private void nodebuildertest_SelectedIndexChanged(object sender, EventArgs e)
|
|
{
|
|
ConfigurationInfo ci;
|
|
|
|
// Leave when no configuration selected
|
|
if(listconfigs.SelectedItems.Count == 0) return;
|
|
|
|
// Apply to selected configuration
|
|
ci = listconfigs.SelectedItems[0].Tag as ConfigurationInfo;
|
|
if(nodebuildertest.SelectedItem != null)
|
|
ci.NodebuilderTest = (nodebuildertest.SelectedItem as NodebuilderInfo).Name;
|
|
}
|
|
|
|
// Test application changed
|
|
private void testapplication_TextChanged(object sender, EventArgs e)
|
|
{
|
|
ConfigurationInfo ci;
|
|
|
|
// Leave when no configuration selected
|
|
if(listconfigs.SelectedItems.Count == 0) return;
|
|
|
|
// Apply to selected configuration
|
|
ci = listconfigs.SelectedItems[0].Tag as ConfigurationInfo;
|
|
ci.TestProgram = testapplication.Text;
|
|
}
|
|
|
|
// Test parameters changed
|
|
private void testparameters_TextChanged(object sender, EventArgs e)
|
|
{
|
|
ConfigurationInfo ci;
|
|
|
|
// Leave when no configuration selected
|
|
if(listconfigs.SelectedItems.Count == 0) return;
|
|
|
|
// Apply to selected configuration
|
|
ci = listconfigs.SelectedItems[0].Tag as ConfigurationInfo;
|
|
ci.TestParameters = testparameters.Text;
|
|
|
|
// 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);
|
|
}
|
|
}
|
|
|
|
// OK clicked
|
|
private void apply_Click(object sender, EventArgs e)
|
|
{
|
|
ConfigurationInfo ci;
|
|
|
|
// Apply configuration items
|
|
foreach(ListViewItem lvi in listconfigs.Items)
|
|
{
|
|
// Get configuration item
|
|
ci = lvi.Tag as ConfigurationInfo;
|
|
|
|
// Find same configuration info in originals
|
|
foreach(ConfigurationInfo oci in General.Configs)
|
|
{
|
|
// Apply settings when they match
|
|
if(string.Compare(ci.Filename, oci.Filename) == 0) oci.Apply(ci);
|
|
}
|
|
}
|
|
|
|
// 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)
|
|
{
|
|
ConfigurationInfo ci;
|
|
|
|
// Leave when no configuration selected
|
|
if(listconfigs.SelectedItems.Count == 0) return;
|
|
|
|
// Apply to selected configuration
|
|
ci = listconfigs.SelectedItems[0].Tag as ConfigurationInfo;
|
|
ci.CustomParameters = customparameters.Checked;
|
|
|
|
// Update interface
|
|
labelparameters.Visible = customparameters.Checked;
|
|
testparameters.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;
|
|
}
|
|
}
|
|
|
|
// Skill changes
|
|
private void skill_ValueChanges(object sender, EventArgs e)
|
|
{
|
|
ConfigurationInfo ci;
|
|
|
|
// Leave when no configuration selected
|
|
if(listconfigs.SelectedItems.Count == 0) return;
|
|
|
|
// Apply to selected configuration
|
|
ci = listconfigs.SelectedItems[0].Tag as ConfigurationInfo;
|
|
ci.TestSkill = skill.Value;
|
|
}
|
|
}
|
|
}
|