created Resource Location edit control

This commit is contained in:
codeimp 2007-09-27 12:34:38 +00:00
parent 962c630683
commit 8a7d13e9e8
20 changed files with 1308 additions and 408 deletions

View file

@ -16,8 +16,8 @@ mainwindow
{
positionx = 150;
windowstate = 2;
sizeheight = 481;
sizewidth = 777;
positiony = 21;
sizeheight = 572;
sizewidth = 739;
}

BIN
Resources/Icons/File.ico Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 KiB

BIN
Resources/Icons/Folder.ico Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 KiB

View file

@ -58,6 +58,7 @@
<Compile Include="Geometry\Line2D.cs" />
<Compile Include="Geometry\Vector2D.cs" />
<Compile Include="Geometry\Vector3D.cs" />
<Compile Include="Images\ResourceLocationList.cs" />
<Compile Include="Images\ResourceManager.cs" />
<Compile Include="Interface\AboutForm.cs">
<SubType>Form</SubType>
@ -86,6 +87,15 @@
<Compile Include="Interface\OpenMapOptionsForm.Designer.cs">
<DependentUpon>OpenMapOptionsForm.cs</DependentUpon>
</Compile>
<Compile Include="Interface\ResourceListView.cs">
<SubType>Component</SubType>
</Compile>
<Compile Include="Interface\ResourceListEditor.cs">
<SubType>UserControl</SubType>
</Compile>
<Compile Include="Interface\ResourceListEditor.Designer.cs">
<DependentUpon>ResourceListEditor.cs</DependentUpon>
</Compile>
<Compile Include="Interface\ResourceOptionsForm.cs">
<SubType>Form</SubType>
</Compile>
@ -133,8 +143,10 @@
<ItemGroup>
<Reference Include="SlimDX, Version=1.0.2813.30005, Culture=neutral, PublicKeyToken=b1b0c32fd1ffe4f9, processorArchitecture=x86" />
<Reference Include="System" />
<Reference Include="System.Data" />
<Reference Include="System.Drawing" />
<Reference Include="System.Windows.Forms" />
<Reference Include="System.Xml" />
</ItemGroup>
<ItemGroup>
<EmbeddedResource Include="Interface\AboutForm.resx">
@ -180,6 +192,10 @@
<SubType>Designer</SubType>
<DependentUpon>DelayedForm.cs</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="Interface\ResourceListEditor.resx">
<SubType>Designer</SubType>
<DependentUpon>ResourceListEditor.cs</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="Resources\Actions.cfg" />
<None Include="Resources\Splash2.png" />
</ItemGroup>

View file

@ -0,0 +1,88 @@
using System;
using System.Collections;
using System.Collections.Generic;
using System.Globalization;
using System.Text;
using CodeImp.DoomBuilder.IO;
using System.Collections.Specialized;
namespace CodeImp.DoomBuilder.Images
{
internal class ResourceLocationList : List<ResourceLocation>
{
#region ================== Constructors
// This creates a new list
public ResourceLocationList()
{
}
// This creates a list from a configuration structure
public ResourceLocationList(Configuration cfg, string path)
{
IDictionary resinfo, rlinfo;
ResourceLocation res;
// Go for all items in the map info
resinfo = cfg.ReadSetting(path, new ListDictionary());
foreach(DictionaryEntry rl in resinfo)
{
// Item is a structure?
if(rl.Value is IDictionary)
{
// Create resource location
rlinfo = (IDictionary)rl.Value;
res = new ResourceLocation();
// Copy information from Configuration to ResourceLocation
if(resinfo.Contains("type") && (resinfo["type"] is int)) res.type = (int)resinfo["type"];
if(resinfo.Contains("location") && (resinfo["location"] is string)) res.location = (string)resinfo["location"];
if(resinfo.Contains("textures") && (resinfo["textures"] is bool)) res.textures = (bool)resinfo["textures"];
if(resinfo.Contains("flats") && (resinfo["flats"] is bool)) res.flats = (bool)resinfo["flats"];
// Add resource
Add(res);
}
}
}
#endregion
#region ================== Methods
// This merges two lists together
public static ResourceLocationList Combined(ResourceLocationList a, ResourceLocationList b)
{
ResourceLocationList result = new ResourceLocationList();
result.AddRange(a);
result.AddRange(b);
return result;
}
// This writes the list to configuration
public void WriteToConfig(Configuration cfg, string path)
{
IDictionary resinfo, rlinfo;
// Fill structure
resinfo = new ListDictionary();
for(int i = 0; i < this.Count; i++)
{
// Create structure for resource
rlinfo = new ListDictionary();
rlinfo.Add("type", this[i].type);
rlinfo.Add("location", this[i].location);
rlinfo.Add("textures", this[i].textures);
rlinfo.Add("flats", this[i].flats);
// Add structure
resinfo.Add("resource" + i.ToString(CultureInfo.InvariantCulture), rlinfo);
}
// Write to config
cfg.WriteSetting(path, resinfo);
}
#endregion
}
}

View file

@ -29,18 +29,102 @@ namespace CodeImp.DoomBuilder.Interface
private void InitializeComponent()
{
System.Windows.Forms.Label label1;
System.Windows.Forms.GroupBox groupBox1;
System.Windows.Forms.Label label4;
System.Windows.Forms.Label label3;
System.Windows.Forms.Label label2;
this.configbuildonsave = new System.Windows.Forms.CheckBox();
this.confignodebuilder = new System.Windows.Forms.ComboBox();
this.tabs = new System.Windows.Forms.TabControl();
this.tabinterface = new System.Windows.Forms.TabPage();
this.tabediting = new System.Windows.Forms.TabPage();
this.tabconfigs = new System.Windows.Forms.TabPage();
this.listconfigs = new System.Windows.Forms.ListBox();
this.cancel = new System.Windows.Forms.Button();
this.apply = new System.Windows.Forms.Button();
this.listconfigs = new System.Windows.Forms.ListBox();
label1 = new System.Windows.Forms.Label();
groupBox1 = new System.Windows.Forms.GroupBox();
label4 = new System.Windows.Forms.Label();
label3 = new System.Windows.Forms.Label();
label2 = new System.Windows.Forms.Label();
groupBox1.SuspendLayout();
this.tabs.SuspendLayout();
this.tabconfigs.SuspendLayout();
this.SuspendLayout();
//
// label1
//
label1.Location = new System.Drawing.Point(16, 25);
label1.Name = "label1";
label1.Size = new System.Drawing.Size(303, 46);
label1.TabIndex = 1;
label1.Text = "Select the nodebuilder options to use with this configuration.\r\nThe nodebuilder i" +
"s a compiler that builds geometry structures in your map when saved and when usi" +
"ng 3D mode.";
//
// groupBox1
//
groupBox1.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
| System.Windows.Forms.AnchorStyles.Left)
| System.Windows.Forms.AnchorStyles.Right)));
groupBox1.Controls.Add(label4);
groupBox1.Controls.Add(label3);
groupBox1.Controls.Add(this.configbuildonsave);
groupBox1.Controls.Add(label2);
groupBox1.Controls.Add(this.confignodebuilder);
groupBox1.Controls.Add(label1);
groupBox1.Location = new System.Drawing.Point(205, 11);
groupBox1.Name = "groupBox1";
groupBox1.Size = new System.Drawing.Size(343, 270);
groupBox1.TabIndex = 2;
groupBox1.TabStop = false;
groupBox1.Text = " Configuration Settings ";
//
// label4
//
label4.AutoSize = true;
label4.Location = new System.Drawing.Point(29, 201);
label4.Name = "label4";
label4.Size = new System.Drawing.Size(79, 14);
label4.TabIndex = 6;
label4.Text = "IWAD wad file:";
//
// label3
//
label3.Location = new System.Drawing.Point(16, 144);
label3.Name = "label3";
label3.Size = new System.Drawing.Size(303, 46);
label3.TabIndex = 5;
label3.Text = "Specify the IWAD wad file to use for this configuration.\r\nThe IWAD should contain" +
" all default resources. such as textures and sprites, for the original game.";
//
// configbuildonsave
//
this.configbuildonsave.AutoSize = true;
this.configbuildonsave.Location = new System.Drawing.Point(102, 111);
this.configbuildonsave.Name = "configbuildonsave";
this.configbuildonsave.Size = new System.Drawing.Size(201, 18);
this.configbuildonsave.TabIndex = 4;
this.configbuildonsave.Text = "Build nodes every time when saving";
this.configbuildonsave.UseVisualStyleBackColor = true;
//
// label2
//
label2.AutoSize = true;
label2.Location = new System.Drawing.Point(29, 81);
label2.Name = "label2";
label2.Size = new System.Drawing.Size(67, 14);
label2.TabIndex = 3;
label2.Text = "Nodebuilder:";
//
// confignodebuilder
//
this.confignodebuilder.FormattingEnabled = true;
this.confignodebuilder.Location = new System.Drawing.Point(102, 78);
this.confignodebuilder.Name = "confignodebuilder";
this.confignodebuilder.Size = new System.Drawing.Size(217, 22);
this.confignodebuilder.TabIndex = 2;
//
// tabs
//
this.tabs.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
@ -54,7 +138,7 @@ namespace CodeImp.DoomBuilder.Interface
this.tabs.Location = new System.Drawing.Point(12, 12);
this.tabs.Name = "tabs";
this.tabs.SelectedIndex = 0;
this.tabs.Size = new System.Drawing.Size(519, 306);
this.tabs.Size = new System.Drawing.Size(566, 320);
this.tabs.SizeMode = System.Windows.Forms.TabSizeMode.Fixed;
this.tabs.TabIndex = 0;
//
@ -64,7 +148,7 @@ namespace CodeImp.DoomBuilder.Interface
this.tabinterface.Location = new System.Drawing.Point(4, 23);
this.tabinterface.Name = "tabinterface";
this.tabinterface.Padding = new System.Windows.Forms.Padding(3);
this.tabinterface.Size = new System.Drawing.Size(511, 279);
this.tabinterface.Size = new System.Drawing.Size(558, 293);
this.tabinterface.TabIndex = 0;
this.tabinterface.Text = "Interface";
this.tabinterface.UseVisualStyleBackColor = true;
@ -75,28 +159,39 @@ namespace CodeImp.DoomBuilder.Interface
this.tabediting.Location = new System.Drawing.Point(4, 23);
this.tabediting.Name = "tabediting";
this.tabediting.Padding = new System.Windows.Forms.Padding(3);
this.tabediting.Size = new System.Drawing.Size(511, 279);
this.tabediting.Size = new System.Drawing.Size(558, 293);
this.tabediting.TabIndex = 1;
this.tabediting.Text = "Editing";
this.tabediting.UseVisualStyleBackColor = true;
//
// tabconfigs
//
this.tabconfigs.Controls.Add(label1);
this.tabconfigs.Controls.Add(groupBox1);
this.tabconfigs.Controls.Add(this.listconfigs);
this.tabconfigs.Font = new System.Drawing.Font("Arial", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
this.tabconfigs.Location = new System.Drawing.Point(4, 23);
this.tabconfigs.Name = "tabconfigs";
this.tabconfigs.Size = new System.Drawing.Size(511, 279);
this.tabconfigs.Size = new System.Drawing.Size(558, 293);
this.tabconfigs.TabIndex = 2;
this.tabconfigs.Text = "Configurations";
this.tabconfigs.UseVisualStyleBackColor = true;
//
// listconfigs
//
this.listconfigs.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
| System.Windows.Forms.AnchorStyles.Left)));
this.listconfigs.FormattingEnabled = true;
this.listconfigs.ItemHeight = 14;
this.listconfigs.Location = new System.Drawing.Point(11, 11);
this.listconfigs.Name = "listconfigs";
this.listconfigs.Size = new System.Drawing.Size(181, 270);
this.listconfigs.TabIndex = 0;
//
// cancel
//
this.cancel.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));
this.cancel.DialogResult = System.Windows.Forms.DialogResult.Cancel;
this.cancel.Location = new System.Drawing.Point(419, 332);
this.cancel.Location = new System.Drawing.Point(466, 346);
this.cancel.Name = "cancel";
this.cancel.Size = new System.Drawing.Size(112, 25);
this.cancel.TabIndex = 17;
@ -106,39 +201,20 @@ namespace CodeImp.DoomBuilder.Interface
// apply
//
this.apply.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));
this.apply.Location = new System.Drawing.Point(301, 332);
this.apply.Location = new System.Drawing.Point(348, 346);
this.apply.Name = "apply";
this.apply.Size = new System.Drawing.Size(112, 25);
this.apply.TabIndex = 16;
this.apply.Text = "OK";
this.apply.UseVisualStyleBackColor = true;
//
// listconfigs
//
this.listconfigs.FormattingEnabled = true;
this.listconfigs.ItemHeight = 14;
this.listconfigs.Location = new System.Drawing.Point(11, 11);
this.listconfigs.Name = "listconfigs";
this.listconfigs.Size = new System.Drawing.Size(181, 256);
this.listconfigs.TabIndex = 0;
//
// label1
//
label1.Location = new System.Drawing.Point(209, 11);
label1.Name = "label1";
label1.Size = new System.Drawing.Size(288, 46);
label1.TabIndex = 1;
label1.Text = "Select the nodebuilder to use with this configuration. The nodebuilder is a compi" +
"ler that builds geometry structures in your map when saved and when using 3D mod" +
"e.";
//
// ConfigForm
//
this.AcceptButton = this.apply;
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 14F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.CancelButton = this.cancel;
this.ClientSize = new System.Drawing.Size(543, 368);
this.ClientSize = new System.Drawing.Size(590, 382);
this.Controls.Add(this.cancel);
this.Controls.Add(this.apply);
this.Controls.Add(this.tabs);
@ -150,6 +226,8 @@ namespace CodeImp.DoomBuilder.Interface
this.ShowIcon = false;
this.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent;
this.Text = "Configuration";
groupBox1.ResumeLayout(false);
groupBox1.PerformLayout();
this.tabs.ResumeLayout(false);
this.tabconfigs.ResumeLayout(false);
this.ResumeLayout(false);
@ -165,5 +243,7 @@ namespace CodeImp.DoomBuilder.Interface
private System.Windows.Forms.Button cancel;
private System.Windows.Forms.Button apply;
private System.Windows.Forms.ListBox listconfigs;
private System.Windows.Forms.ComboBox confignodebuilder;
private System.Windows.Forms.CheckBox configbuildonsave;
}
}

View file

@ -120,4 +120,16 @@
<metadata name="label1.GenerateMember" type="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>False</value>
</metadata>
<metadata name="groupBox1.GenerateMember" type="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>False</value>
</metadata>
<metadata name="label4.GenerateMember" type="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>False</value>
</metadata>
<metadata name="label3.GenerateMember" type="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>False</value>
</metadata>
<metadata name="label2.GenerateMember" type="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>False</value>
</metadata>
</root>

View file

@ -32,22 +32,20 @@ namespace CodeImp.DoomBuilder.Interface
System.Windows.Forms.Label label2;
System.Windows.Forms.Label label1;
System.Windows.Forms.GroupBox panelsettings;
System.Windows.Forms.GroupBox panelres;
System.Windows.Forms.Label label4;
this.levelname = new System.Windows.Forms.TextBox();
this.config = new System.Windows.Forms.ComboBox();
this.deleteresource = new System.Windows.Forms.Button();
this.editresource = new System.Windows.Forms.Button();
this.addresource = new System.Windows.Forms.Button();
this.resources = new System.Windows.Forms.ListBox();
this.apply = new System.Windows.Forms.Button();
this.cancel = new System.Windows.Forms.Button();
this.panelres = new System.Windows.Forms.GroupBox();
this.resourcelocations = new CodeImp.DoomBuilder.Interface.ResourceListEditor();
label3 = new System.Windows.Forms.Label();
label2 = new System.Windows.Forms.Label();
label1 = new System.Windows.Forms.Label();
panelsettings = new System.Windows.Forms.GroupBox();
panelres = new System.Windows.Forms.GroupBox();
label4 = new System.Windows.Forms.Label();
panelsettings.SuspendLayout();
panelres.SuspendLayout();
this.panelres.SuspendLayout();
this.SuspendLayout();
//
// label3
@ -88,7 +86,7 @@ namespace CodeImp.DoomBuilder.Interface
panelsettings.Controls.Add(label1);
panelsettings.Location = new System.Drawing.Point(12, 12);
panelsettings.Name = "panelsettings";
panelsettings.Size = new System.Drawing.Size(365, 118);
panelsettings.Size = new System.Drawing.Size(367, 118);
panelsettings.TabIndex = 10;
panelsettings.TabStop = false;
panelsettings.Text = " Settings ";
@ -109,67 +107,10 @@ namespace CodeImp.DoomBuilder.Interface
this.config.Size = new System.Drawing.Size(213, 22);
this.config.TabIndex = 6;
//
// panelres
//
panelres.Controls.Add(this.deleteresource);
panelres.Controls.Add(this.editresource);
panelres.Controls.Add(this.addresource);
panelres.Controls.Add(this.resources);
panelres.Location = new System.Drawing.Point(12, 145);
panelres.Name = "panelres";
panelres.Size = new System.Drawing.Size(365, 165);
panelres.TabIndex = 11;
panelres.TabStop = false;
panelres.Text = " Custom Resources ";
//
// deleteresource
//
this.deleteresource.Enabled = false;
this.deleteresource.Location = new System.Drawing.Point(268, 125);
this.deleteresource.Name = "deleteresource";
this.deleteresource.Size = new System.Drawing.Size(74, 25);
this.deleteresource.TabIndex = 13;
this.deleteresource.Text = "Remove";
this.deleteresource.UseVisualStyleBackColor = true;
this.deleteresource.Click += new System.EventHandler(this.deleteresource_Click);
//
// editresource
//
this.editresource.Enabled = false;
this.editresource.Location = new System.Drawing.Point(139, 125);
this.editresource.Name = "editresource";
this.editresource.Size = new System.Drawing.Size(123, 25);
this.editresource.TabIndex = 12;
this.editresource.Text = "Resource Options...";
this.editresource.UseVisualStyleBackColor = true;
this.editresource.Click += new System.EventHandler(this.editresource_Click);
//
// addresource
//
this.addresource.Location = new System.Drawing.Point(21, 125);
this.addresource.Name = "addresource";
this.addresource.Size = new System.Drawing.Size(112, 25);
this.addresource.TabIndex = 11;
this.addresource.Text = "Add Resource...";
this.addresource.UseVisualStyleBackColor = true;
this.addresource.Click += new System.EventHandler(this.addresource_Click);
//
// resources
//
this.resources.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
| System.Windows.Forms.AnchorStyles.Right)));
this.resources.FormattingEnabled = true;
this.resources.ItemHeight = 14;
this.resources.Location = new System.Drawing.Point(21, 31);
this.resources.Name = "resources";
this.resources.Size = new System.Drawing.Size(321, 88);
this.resources.TabIndex = 10;
this.resources.DoubleClick += new System.EventHandler(this.resources_DoubleClick);
this.resources.SelectedIndexChanged += new System.EventHandler(this.resources_SelectedIndexChanged);
//
// apply
//
this.apply.Location = new System.Drawing.Point(147, 330);
this.apply.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));
this.apply.Location = new System.Drawing.Point(149, 355);
this.apply.Name = "apply";
this.apply.Size = new System.Drawing.Size(112, 25);
this.apply.TabIndex = 12;
@ -179,8 +120,9 @@ namespace CodeImp.DoomBuilder.Interface
//
// cancel
//
this.cancel.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));
this.cancel.DialogResult = System.Windows.Forms.DialogResult.Cancel;
this.cancel.Location = new System.Drawing.Point(265, 330);
this.cancel.Location = new System.Drawing.Point(267, 355);
this.cancel.Name = "cancel";
this.cancel.Size = new System.Drawing.Size(112, 25);
this.cancel.TabIndex = 13;
@ -188,16 +130,45 @@ namespace CodeImp.DoomBuilder.Interface
this.cancel.UseVisualStyleBackColor = true;
this.cancel.Click += new System.EventHandler(this.cancel_Click);
//
// panelres
//
this.panelres.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
| System.Windows.Forms.AnchorStyles.Right)));
this.panelres.Controls.Add(this.resourcelocations);
this.panelres.Controls.Add(label4);
this.panelres.Location = new System.Drawing.Point(12, 141);
this.panelres.Name = "panelres";
this.panelres.Size = new System.Drawing.Size(367, 198);
this.panelres.TabIndex = 14;
this.panelres.TabStop = false;
this.panelres.Text = " Custom Resources ";
//
// resourcelocations
//
this.resourcelocations.Location = new System.Drawing.Point(15, 28);
this.resourcelocations.Name = "resourcelocations";
this.resourcelocations.Size = new System.Drawing.Size(336, 130);
this.resourcelocations.TabIndex = 18;
//
// label4
//
label4.Location = new System.Drawing.Point(15, 161);
label4.Name = "label4";
label4.Size = new System.Drawing.Size(336, 34);
label4.TabIndex = 17;
label4.Text = "Drag items to change order (lower items override higher items). Grayed items are " +
"loaded according to the game configuration.";
//
// MapOptionsForm
//
this.AcceptButton = this.apply;
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 14F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.CancelButton = this.cancel;
this.ClientSize = new System.Drawing.Size(389, 367);
this.ClientSize = new System.Drawing.Size(391, 392);
this.Controls.Add(this.panelres);
this.Controls.Add(this.cancel);
this.Controls.Add(this.apply);
this.Controls.Add(panelres);
this.Controls.Add(panelsettings);
this.Font = new System.Drawing.Font("Arial", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog;
@ -211,7 +182,7 @@ namespace CodeImp.DoomBuilder.Interface
this.Text = "Map Options";
panelsettings.ResumeLayout(false);
panelsettings.PerformLayout();
panelres.ResumeLayout(false);
this.panelres.ResumeLayout(false);
this.ResumeLayout(false);
}
@ -220,12 +191,10 @@ namespace CodeImp.DoomBuilder.Interface
private System.Windows.Forms.TextBox levelname;
private System.Windows.Forms.ComboBox config;
private System.Windows.Forms.Button deleteresource;
private System.Windows.Forms.Button editresource;
private System.Windows.Forms.Button addresource;
private System.Windows.Forms.ListBox resources;
private System.Windows.Forms.Button apply;
private System.Windows.Forms.Button cancel;
private System.Windows.Forms.GroupBox panelres;
private ResourceListEditor resourcelocations;
}

View file

@ -64,8 +64,7 @@ namespace CodeImp.DoomBuilder.Interface
levelname.Text = options.CurrentName;
// Fill the resources list
foreach(ResourceLocation res in options.Resources)
resources.Items.Add(res);
resourcelocations.EditResourceLocationList(options.Resources);
}
// OK clicked
@ -93,7 +92,7 @@ namespace CodeImp.DoomBuilder.Interface
options.ClearResources();
options.ConfigFile = General.Configs[config.SelectedIndex].filename;
options.CurrentName = levelname.Text.Trim().ToUpper();
foreach(ResourceLocation res in resources.Items) options.AddResource(res);
options.CopyResources(resourcelocations.GetResources());
// Hide window
this.DialogResult = DialogResult.OK;
@ -107,73 +106,5 @@ namespace CodeImp.DoomBuilder.Interface
this.DialogResult = DialogResult.Cancel;
this.Hide();
}
// Add Resource clicked
private void addresource_Click(object sender, EventArgs e)
{
ResourceOptionsForm resoptions;
Point startposition;
// Open resource options dialog
resoptions = new ResourceOptionsForm(new ResourceLocation(), "Add Resource");
resoptions.StartPosition = FormStartPosition.Manual;
startposition = this.Location;
startposition.Offset(50, 160);
resoptions.Location = startposition;
if(resoptions.ShowDialog(this) == DialogResult.OK)
{
// Add resource
resources.Items.Add(resoptions.ResourceLocation);
}
}
// Resource Options clicked
private void editresource_Click(object sender, EventArgs e)
{
ResourceOptionsForm resoptions;
Point startposition;
// Anything selected?
if(resources.SelectedIndex > -1)
{
// Open resource options dialog
resoptions = new ResourceOptionsForm((ResourceLocation)resources.SelectedItem, "Resource Options");
resoptions.StartPosition = FormStartPosition.Manual;
startposition = this.Location;
startposition.Offset(50, 160);
resoptions.Location = startposition;
if(resoptions.ShowDialog(this) == DialogResult.OK)
{
// Replace resource
resources.Items[resources.SelectedIndex] = resoptions.ResourceLocation;
}
}
}
// Remove resource clicked
private void deleteresource_Click(object sender, EventArgs e)
{
// Anything selected?
if(resources.SelectedIndex > -1)
{
// Remove it
resources.Items.RemoveAt(resources.SelectedIndex);
}
}
// Resource selection changes
private void resources_SelectedIndexChanged(object sender, EventArgs e)
{
// Enable/disable buttons
editresource.Enabled = (resources.SelectedIndex > -1);
deleteresource.Enabled = (resources.SelectedIndex > -1);
}
// Resource doubleclicked
private void resources_DoubleClick(object sender, EventArgs e)
{
// Click Edit Resource
if(resources.SelectedIndex > -1) editresource.PerformClick();
}
}
}

View file

@ -117,61 +117,19 @@
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<metadata name="label3.Locked" type="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="label3.GenerateMember" type="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>False</value>
</metadata>
<metadata name="label2.Locked" type="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="label2.GenerateMember" type="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>False</value>
</metadata>
<metadata name="label1.Locked" type="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="label1.GenerateMember" type="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>False</value>
</metadata>
<metadata name="panelsettings.GenerateMember" type="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>False</value>
</metadata>
<metadata name="panelsettings.Locked" type="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="levelname.Locked" type="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="config.Locked" type="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="panelres.GenerateMember" type="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<metadata name="label4.GenerateMember" type="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>False</value>
</metadata>
<metadata name="panelres.Locked" type="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="deleteresource.Locked" type="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="editresource.Locked" type="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="addresource.Locked" type="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="resources.Locked" type="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="apply.Locked" type="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="cancel.Locked" type="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="$this.Locked" type="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
</root>

View file

@ -29,18 +29,19 @@ namespace CodeImp.DoomBuilder.Interface
private void InitializeComponent()
{
System.Windows.Forms.ColumnHeader columnHeader1;
System.Windows.Forms.Label label1;
System.Windows.Forms.Label label2;
System.Windows.Forms.Label label3;
this.panelres = new System.Windows.Forms.GroupBox();
this.deleteresource = new System.Windows.Forms.Button();
this.editresource = new System.Windows.Forms.Button();
this.addresource = new System.Windows.Forms.Button();
this.resources = new System.Windows.Forms.ListBox();
this.label1 = new System.Windows.Forms.Label();
this.label2 = new System.Windows.Forms.Label();
this.resourcelocations = new CodeImp.DoomBuilder.Interface.ResourceListEditor();
this.apply = new System.Windows.Forms.Button();
this.cancel = new System.Windows.Forms.Button();
this.config = new System.Windows.Forms.ComboBox();
this.mapslist = new System.Windows.Forms.ListView();
columnHeader1 = new System.Windows.Forms.ColumnHeader();
label1 = new System.Windows.Forms.Label();
label2 = new System.Windows.Forms.Label();
label3 = new System.Windows.Forms.Label();
this.panelres.SuspendLayout();
this.SuspendLayout();
//
@ -48,87 +49,57 @@ namespace CodeImp.DoomBuilder.Interface
//
columnHeader1.Text = "Map name";
//
// label1
//
label1.AutoSize = true;
label1.Location = new System.Drawing.Point(30, 24);
label1.Name = "label1";
label1.Size = new System.Drawing.Size(105, 14);
label1.TabIndex = 14;
label1.Text = "Game Configuration:";
//
// label2
//
label2.Location = new System.Drawing.Point(12, 57);
label2.Name = "label2";
label2.Size = new System.Drawing.Size(365, 30);
label2.TabIndex = 16;
label2.Text = "With the above selected configuration, the maps shown below were found in the cho" +
"sen WAD file. Please select the map to load for editing.";
//
// label3
//
label3.Location = new System.Drawing.Point(14, 161);
label3.Name = "label3";
label3.Size = new System.Drawing.Size(336, 34);
label3.TabIndex = 17;
label3.Text = "Drag items to change order (lower items override higher items). Grayed items are " +
"loaded according to the game configuration.";
//
// panelres
//
this.panelres.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)));
this.panelres.Controls.Add(this.deleteresource);
this.panelres.Controls.Add(this.editresource);
this.panelres.Controls.Add(this.addresource);
this.panelres.Controls.Add(this.resources);
this.panelres.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)
| System.Windows.Forms.AnchorStyles.Right)));
this.panelres.Controls.Add(this.resourcelocations);
this.panelres.Controls.Add(label3);
this.panelres.Location = new System.Drawing.Point(12, 214);
this.panelres.Name = "panelres";
this.panelres.Size = new System.Drawing.Size(365, 165);
this.panelres.Size = new System.Drawing.Size(365, 198);
this.panelres.TabIndex = 11;
this.panelres.TabStop = false;
this.panelres.Text = " Custom Resources ";
//
// deleteresource
// resourcelocations
//
this.deleteresource.Enabled = false;
this.deleteresource.Location = new System.Drawing.Point(268, 125);
this.deleteresource.Name = "deleteresource";
this.deleteresource.Size = new System.Drawing.Size(74, 25);
this.deleteresource.TabIndex = 13;
this.deleteresource.Text = "Remove";
this.deleteresource.UseVisualStyleBackColor = true;
this.deleteresource.Click += new System.EventHandler(this.deleteresource_Click);
//
// editresource
//
this.editresource.Enabled = false;
this.editresource.Location = new System.Drawing.Point(139, 125);
this.editresource.Name = "editresource";
this.editresource.Size = new System.Drawing.Size(123, 25);
this.editresource.TabIndex = 12;
this.editresource.Text = "Resource Options...";
this.editresource.UseVisualStyleBackColor = true;
this.editresource.Click += new System.EventHandler(this.editresource_Click);
//
// addresource
//
this.addresource.Location = new System.Drawing.Point(21, 125);
this.addresource.Name = "addresource";
this.addresource.Size = new System.Drawing.Size(112, 25);
this.addresource.TabIndex = 11;
this.addresource.Text = "Add Resource...";
this.addresource.UseVisualStyleBackColor = true;
this.addresource.Click += new System.EventHandler(this.addresource_Click);
//
// resources
//
this.resources.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
| System.Windows.Forms.AnchorStyles.Right)));
this.resources.FormattingEnabled = true;
this.resources.ItemHeight = 14;
this.resources.Location = new System.Drawing.Point(21, 31);
this.resources.Name = "resources";
this.resources.Size = new System.Drawing.Size(321, 88);
this.resources.TabIndex = 10;
this.resources.DoubleClick += new System.EventHandler(this.resources_DoubleClick);
this.resources.SelectedIndexChanged += new System.EventHandler(this.resources_SelectedIndexChanged);
//
// label1
//
this.label1.AutoSize = true;
this.label1.Location = new System.Drawing.Point(30, 24);
this.label1.Name = "label1";
this.label1.Size = new System.Drawing.Size(105, 14);
this.label1.TabIndex = 14;
this.label1.Text = "Game Configuration:";
//
// label2
//
this.label2.Location = new System.Drawing.Point(12, 57);
this.label2.Name = "label2";
this.label2.Size = new System.Drawing.Size(365, 30);
this.label2.TabIndex = 16;
this.label2.Text = "With the above selected configuration, the maps shown below were found in the cho" +
"sen WAD file. Please select the map to load for editing.";
this.resourcelocations.Location = new System.Drawing.Point(14, 26);
this.resourcelocations.Name = "resourcelocations";
this.resourcelocations.Size = new System.Drawing.Size(336, 127);
this.resourcelocations.TabIndex = 18;
//
// apply
//
this.apply.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));
this.apply.Location = new System.Drawing.Point(147, 399);
this.apply.Location = new System.Drawing.Point(147, 428);
this.apply.Name = "apply";
this.apply.Size = new System.Drawing.Size(112, 25);
this.apply.TabIndex = 12;
@ -140,7 +111,7 @@ namespace CodeImp.DoomBuilder.Interface
//
this.cancel.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));
this.cancel.DialogResult = System.Windows.Forms.DialogResult.Cancel;
this.cancel.Location = new System.Drawing.Point(265, 399);
this.cancel.Location = new System.Drawing.Point(265, 428);
this.cancel.Name = "cancel";
this.cancel.Size = new System.Drawing.Size(112, 25);
this.cancel.TabIndex = 13;
@ -160,6 +131,8 @@ namespace CodeImp.DoomBuilder.Interface
//
// mapslist
//
this.mapslist.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
| System.Windows.Forms.AnchorStyles.Right)));
this.mapslist.Columns.AddRange(new System.Windows.Forms.ColumnHeader[] {
columnHeader1});
this.mapslist.FullRowSelect = true;
@ -183,11 +156,11 @@ namespace CodeImp.DoomBuilder.Interface
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 14F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.CancelButton = this.cancel;
this.ClientSize = new System.Drawing.Size(389, 436);
this.ClientSize = new System.Drawing.Size(389, 465);
this.Controls.Add(this.mapslist);
this.Controls.Add(this.label2);
this.Controls.Add(label2);
this.Controls.Add(this.config);
this.Controls.Add(this.label1);
this.Controls.Add(label1);
this.Controls.Add(this.cancel);
this.Controls.Add(this.apply);
this.Controls.Add(this.panelres);
@ -210,17 +183,12 @@ namespace CodeImp.DoomBuilder.Interface
#endregion
private System.Windows.Forms.Button deleteresource;
private System.Windows.Forms.Button editresource;
private System.Windows.Forms.Button addresource;
private System.Windows.Forms.ListBox resources;
private System.Windows.Forms.Button apply;
private System.Windows.Forms.Button cancel;
private System.Windows.Forms.ComboBox config;
private System.Windows.Forms.GroupBox panelres;
private System.Windows.Forms.Label label1;
private System.Windows.Forms.Label label2;
private System.Windows.Forms.ListView mapslist;
private ResourceListEditor resourcelocations;
}

View file

@ -275,7 +275,7 @@ namespace CodeImp.DoomBuilder.Interface
options.ClearResources();
options.ConfigFile = General.Configs[config.SelectedIndex].filename;
options.CurrentName = mapslist.SelectedItems[0].Text;
foreach(ResourceLocation res in resources.Items) options.AddResource(res);
options.CopyResources(resourcelocations.GetResources());
// Hide window
wadfile.Dispose();
@ -292,67 +292,6 @@ namespace CodeImp.DoomBuilder.Interface
this.Hide();
}
// Add Resource clicked
private void addresource_Click(object sender, EventArgs e)
{
ResourceOptionsForm resoptions;
Point startposition;
// Open resource options dialog
resoptions = new ResourceOptionsForm(new ResourceLocation(), "Add Resource");
resoptions.StartPosition = FormStartPosition.Manual;
startposition = this.Location;
startposition.Offset(50, 230);
resoptions.Location = startposition;
if(resoptions.ShowDialog(this) == DialogResult.OK)
{
// Add resource
resources.Items.Add(resoptions.ResourceLocation);
}
}
// Resource Options clicked
private void editresource_Click(object sender, EventArgs e)
{
ResourceOptionsForm resoptions;
Point startposition;
// Anything selected?
if(resources.SelectedIndex > -1)
{
// Open resource options dialog
resoptions = new ResourceOptionsForm((ResourceLocation)resources.SelectedItem, "Resource Options");
resoptions.StartPosition = FormStartPosition.Manual;
startposition = this.Location;
startposition.Offset(50, 230);
resoptions.Location = startposition;
if(resoptions.ShowDialog(this) == DialogResult.OK)
{
// Replace resource
resources.Items[resources.SelectedIndex] = resoptions.ResourceLocation;
}
}
}
// Remove resource clicked
private void deleteresource_Click(object sender, EventArgs e)
{
// Anything selected?
if(resources.SelectedIndex > -1)
{
// Remove it
resources.Items.RemoveAt(resources.SelectedIndex);
}
}
// Resource selection changes
private void resources_SelectedIndexChanged(object sender, EventArgs e)
{
// Enable/disable buttons
editresource.Enabled = (resources.SelectedIndex > -1);
deleteresource.Enabled = (resources.SelectedIndex > -1);
}
// Window is shown
private void OpenMapOptionsForm_Shown(object sender, EventArgs e)
{
@ -370,11 +309,5 @@ namespace CodeImp.DoomBuilder.Interface
if(mapslist.SelectedItems.Count > 0) apply.PerformClick();
}
// Resource doubeclicked
private void resources_DoubleClick(object sender, EventArgs e)
{
// Click Edit Resource
if(resources.SelectedIndex > -1) editresource.PerformClick();
}
}
}

View file

@ -120,40 +120,13 @@
<metadata name="columnHeader1.GenerateMember" type="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>False</value>
</metadata>
<metadata name="panelres.Locked" type="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
<metadata name="label1.GenerateMember" type="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>False</value>
</metadata>
<metadata name="deleteresource.Locked" type="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
<metadata name="label2.GenerateMember" type="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>False</value>
</metadata>
<metadata name="editresource.Locked" type="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="addresource.Locked" type="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="resources.Locked" type="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="label1.Locked" type="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="label2.Locked" type="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="apply.Locked" type="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="cancel.Locked" type="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="config.Locked" type="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="mapslist.Locked" type="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="$this.Locked" type="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
<metadata name="label3.GenerateMember" type="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>False</value>
</metadata>
</root>

View file

@ -0,0 +1,223 @@
namespace CodeImp.DoomBuilder.Interface
{
internal partial class ResourceListEditor
{
/// <summary>
/// Required designer variable.
/// </summary>
private System.ComponentModel.IContainer components = null;
/// <summary>
/// Clean up any resources being used.
/// </summary>
/// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
protected override void Dispose(bool disposing)
{
if(disposing && (components != null))
{
components.Dispose();
}
base.Dispose(disposing);
}
#region Component Designer generated code
/// <summary>
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
/// </summary>
private void InitializeComponent()
{
this.components = new System.ComponentModel.Container();
System.Windows.Forms.SplitContainer buttonsbar2;
System.Windows.Forms.SplitContainer buttonsbar1;
System.Windows.Forms.ListViewItem listViewItem1 = new System.Windows.Forms.ListViewItem(new string[] {
"C:\\Windows\\Doom\\Doom2.wad"}, 3, System.Drawing.SystemColors.GrayText, System.Drawing.SystemColors.Window, null);
System.Windows.Forms.ListViewItem listViewItem2 = new System.Windows.Forms.ListViewItem(new string[] {
"C:\\My\\Little\\Textures\\"}, 2, System.Drawing.SystemColors.GrayText, System.Drawing.SystemColors.Window, null);
System.Windows.Forms.ListViewItem listViewItem3 = new System.Windows.Forms.ListViewItem("C:\\My\\Little\\Pony.wad", 1);
System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(ResourceListEditor));
this.editresource = new System.Windows.Forms.Button();
this.deleteresource = new System.Windows.Forms.Button();
this.addresource = new System.Windows.Forms.Button();
this.splitContainer1 = new System.Windows.Forms.SplitContainer();
this.resourceitems = new CodeImp.DoomBuilder.Interface.ResourceListView();
this.column = new System.Windows.Forms.ColumnHeader();
this.images = new System.Windows.Forms.ImageList(this.components);
buttonsbar2 = new System.Windows.Forms.SplitContainer();
buttonsbar1 = new System.Windows.Forms.SplitContainer();
buttonsbar2.Panel1.SuspendLayout();
buttonsbar2.Panel2.SuspendLayout();
buttonsbar2.SuspendLayout();
buttonsbar1.Panel1.SuspendLayout();
buttonsbar1.Panel2.SuspendLayout();
buttonsbar1.SuspendLayout();
this.splitContainer1.Panel1.SuspendLayout();
this.splitContainer1.Panel2.SuspendLayout();
this.splitContainer1.SuspendLayout();
this.SuspendLayout();
//
// buttonsbar2
//
buttonsbar2.Dock = System.Windows.Forms.DockStyle.Fill;
buttonsbar2.IsSplitterFixed = true;
buttonsbar2.Location = new System.Drawing.Point(0, 0);
buttonsbar2.Name = "buttonsbar2";
//
// buttonsbar2.Panel1
//
buttonsbar2.Panel1.Controls.Add(this.editresource);
//
// buttonsbar2.Panel2
//
buttonsbar2.Panel2.Controls.Add(this.deleteresource);
buttonsbar2.Size = new System.Drawing.Size(228, 24);
buttonsbar2.SplitterDistance = 136;
buttonsbar2.TabIndex = 0;
//
// editresource
//
this.editresource.Dock = System.Windows.Forms.DockStyle.Fill;
this.editresource.Enabled = false;
this.editresource.Location = new System.Drawing.Point(0, 0);
this.editresource.Name = "editresource";
this.editresource.Size = new System.Drawing.Size(136, 24);
this.editresource.TabIndex = 18;
this.editresource.Text = "Resource options...";
this.editresource.UseVisualStyleBackColor = true;
this.editresource.Click += new System.EventHandler(this.editresource_Click);
//
// deleteresource
//
this.deleteresource.Dock = System.Windows.Forms.DockStyle.Fill;
this.deleteresource.Enabled = false;
this.deleteresource.Location = new System.Drawing.Point(0, 0);
this.deleteresource.Name = "deleteresource";
this.deleteresource.Size = new System.Drawing.Size(88, 24);
this.deleteresource.TabIndex = 19;
this.deleteresource.Text = "Remove";
this.deleteresource.UseVisualStyleBackColor = true;
this.deleteresource.Click += new System.EventHandler(this.deleteresource_Click);
//
// buttonsbar1
//
buttonsbar1.Dock = System.Windows.Forms.DockStyle.Fill;
buttonsbar1.IsSplitterFixed = true;
buttonsbar1.Location = new System.Drawing.Point(0, 0);
buttonsbar1.Name = "buttonsbar1";
//
// buttonsbar1.Panel1
//
buttonsbar1.Panel1.Controls.Add(this.addresource);
//
// buttonsbar1.Panel2
//
buttonsbar1.Panel2.Controls.Add(buttonsbar2);
buttonsbar1.Size = new System.Drawing.Size(350, 24);
buttonsbar1.SplitterDistance = 118;
buttonsbar1.TabIndex = 21;
//
// addresource
//
this.addresource.Dock = System.Windows.Forms.DockStyle.Fill;
this.addresource.Location = new System.Drawing.Point(0, 0);
this.addresource.Name = "addresource";
this.addresource.Size = new System.Drawing.Size(118, 24);
this.addresource.TabIndex = 17;
this.addresource.Text = "Add resource...";
this.addresource.UseVisualStyleBackColor = true;
this.addresource.Click += new System.EventHandler(this.addresource_Click);
//
// splitContainer1
//
this.splitContainer1.Dock = System.Windows.Forms.DockStyle.Fill;
this.splitContainer1.FixedPanel = System.Windows.Forms.FixedPanel.Panel2;
this.splitContainer1.IsSplitterFixed = true;
this.splitContainer1.Location = new System.Drawing.Point(0, 0);
this.splitContainer1.Name = "splitContainer1";
this.splitContainer1.Orientation = System.Windows.Forms.Orientation.Horizontal;
//
// splitContainer1.Panel1
//
this.splitContainer1.Panel1.Controls.Add(this.resourceitems);
//
// splitContainer1.Panel2
//
this.splitContainer1.Panel2.Controls.Add(buttonsbar1);
this.splitContainer1.Panel2MinSize = 24;
this.splitContainer1.Size = new System.Drawing.Size(350, 166);
this.splitContainer1.SplitterDistance = 138;
this.splitContainer1.TabIndex = 22;
//
// resourceitems
//
this.resourceitems.AllowDrop = true;
this.resourceitems.Columns.AddRange(new System.Windows.Forms.ColumnHeader[] {
this.column});
this.resourceitems.Dock = System.Windows.Forms.DockStyle.Fill;
this.resourceitems.FullRowSelect = true;
this.resourceitems.HeaderStyle = System.Windows.Forms.ColumnHeaderStyle.None;
this.resourceitems.HideSelection = false;
this.resourceitems.Items.AddRange(new System.Windows.Forms.ListViewItem[] {
listViewItem1,
listViewItem2,
listViewItem3});
this.resourceitems.Location = new System.Drawing.Point(0, 0);
this.resourceitems.MultiSelect = false;
this.resourceitems.Name = "resourceitems";
this.resourceitems.ShowGroups = false;
this.resourceitems.ShowItemToolTips = true;
this.resourceitems.Size = new System.Drawing.Size(350, 138);
this.resourceitems.SmallImageList = this.images;
this.resourceitems.TabIndex = 20;
this.resourceitems.UseCompatibleStateImageBehavior = false;
this.resourceitems.View = System.Windows.Forms.View.Details;
this.resourceitems.DoubleClick += new System.EventHandler(this.resourceitems_DoubleClick);
this.resourceitems.SizeChanged += new System.EventHandler(this.resources_SizeChanged);
this.resourceitems.ItemSelectionChanged += new System.Windows.Forms.ListViewItemSelectionChangedEventHandler(this.resourceitems_ItemSelectionChanged);
//
// column
//
this.column.Text = "Resource location";
this.column.Width = 200;
//
// images
//
this.images.ImageStream = ((System.Windows.Forms.ImageListStreamer)(resources.GetObject("images.ImageStream")));
this.images.TransparentColor = System.Drawing.Color.Transparent;
this.images.Images.SetKeyName(0, "Folder.ico");
this.images.Images.SetKeyName(1, "File.ico");
this.images.Images.SetKeyName(2, "FolderLocked.ico");
this.images.Images.SetKeyName(3, "FileLocked.ico");
//
// ResourceListEditor
//
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.Controls.Add(this.splitContainer1);
this.Name = "ResourceListEditor";
this.Size = new System.Drawing.Size(350, 166);
buttonsbar2.Panel1.ResumeLayout(false);
buttonsbar2.Panel2.ResumeLayout(false);
buttonsbar2.ResumeLayout(false);
buttonsbar1.Panel1.ResumeLayout(false);
buttonsbar1.Panel2.ResumeLayout(false);
buttonsbar1.ResumeLayout(false);
this.splitContainer1.Panel1.ResumeLayout(false);
this.splitContainer1.Panel2.ResumeLayout(false);
this.splitContainer1.ResumeLayout(false);
this.ResumeLayout(false);
}
#endregion
private System.Windows.Forms.Button deleteresource;
private System.Windows.Forms.Button editresource;
private System.Windows.Forms.Button addresource;
private CodeImp.DoomBuilder.Interface.ResourceListView resourceitems;
private System.Windows.Forms.ColumnHeader column;
private System.Windows.Forms.SplitContainer splitContainer1;
private System.Windows.Forms.ImageList images;
}
}

View file

@ -0,0 +1,266 @@
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Drawing;
using System.Data;
using System.Text;
using System.Windows.Forms;
using CodeImp.DoomBuilder.Images;
namespace CodeImp.DoomBuilder.Interface
{
internal partial class ResourceListEditor : UserControl
{
#region ================== Variables
#endregion
#region ================== Constructor / Disposer
// Constructor
public ResourceListEditor()
{
// Initialize
InitializeComponent();
ResizeColumnHeader();
// Start with a clear list
resourceitems.Items.Clear();
}
#endregion
#region ================== Methods
// This will show a fixed list
public void FixedResourceLocationList(ResourceLocationList list)
{
// Start editing list
resourceitems.BeginUpdate();
// Go for all items
for(int i = resourceitems.Items.Count; i >= 0; i--)
{
// Remove item if fixed
if(resourceitems.Items[i].ForeColor != SystemColors.WindowText)
resourceitems.Items.RemoveAt(i);
}
// Go for all items
for(int i = list.Count; i >= 0; i--)
{
// Add item as fixed
resourceitems.Items.Insert(0, new ListViewItem(list[i].location));
resourceitems.Items[0].Tag = list[i];
// Set icon
if(list[i].type == ResourceLocation.RESOURCE_DIRECTORY)
resourceitems.Items[0].ImageIndex = 2;
else if(list[i].type == ResourceLocation.RESOURCE_WAD)
resourceitems.Items[0].ImageIndex = 3;
// Set disabled
resourceitems.Items[0].ForeColor = SystemColors.GrayText;
}
// Done
resourceitems.EndUpdate();
}
// This will edit the given list
public void EditResourceLocationList(ResourceLocationList list)
{
// Start editing list
resourceitems.BeginUpdate();
// Go for all items
for(int i = resourceitems.Items.Count; i >= 0; i--)
{
// Remove item unless fixed
if(resourceitems.Items[i].ForeColor == SystemColors.WindowText)
resourceitems.Items.RemoveAt(i);
}
// Go for all items
for(int i = 0; i < list.Count; i++)
{
// Add item
AddItem(list[i]);
}
// Done
resourceitems.EndUpdate();
}
// This adds a normal item
public void AddItem(ResourceLocation rl)
{
int index;
// Start editing list
resourceitems.BeginUpdate();
// Add item
index = resourceitems.Items.Count;
resourceitems.Items.Add(new ListViewItem(rl.location));
resourceitems.Items[index].Tag = rl;
// Set icon
if(rl.type == ResourceLocation.RESOURCE_DIRECTORY)
resourceitems.Items[index].ImageIndex = 0;
else if(rl.type == ResourceLocation.RESOURCE_WAD)
resourceitems.Items[index].ImageIndex = 1;
// Set normal color
resourceitems.Items[index].ForeColor = SystemColors.WindowText;
// Done
resourceitems.EndUpdate();
}
// This fixes the column header in the list
private void ResizeColumnHeader()
{
// Resize column header to full extend
column.Width = resourceitems.ClientSize.Width - 2;
}
// When the resources list resizes
private void resources_SizeChanged(object sender, EventArgs e)
{
// Resize column header also
ResizeColumnHeader();
}
// Add a resource
private void addresource_Click(object sender, EventArgs e)
{
ResourceOptionsForm resoptions;
Rectangle startposition;
// Open resource options dialog
resoptions = new ResourceOptionsForm(new ResourceLocation(), "Add Resource");
resoptions.StartPosition = FormStartPosition.Manual;
startposition = new Rectangle(40, 20, 1, 1);
startposition = this.RectangleToScreen(startposition);
resoptions.Location = startposition.Location;
if(resoptions.ShowDialog(this) == DialogResult.OK)
{
// Add resource
AddItem(resoptions.ResourceLocation);
}
}
// Edit resource
private void editresource_Click(object sender, EventArgs e)
{
ResourceOptionsForm resoptions;
Rectangle startposition;
ListViewItem selecteditem;
ResourceLocation rl;
// Anything selected?
if(resourceitems.SelectedItems.Count > 0)
{
// Get selected item
selecteditem = resourceitems.SelectedItems[0];
// Open resource options dialog
resoptions = new ResourceOptionsForm((ResourceLocation)selecteditem.Tag, "Resource Options");
resoptions.StartPosition = FormStartPosition.Manual;
startposition = new Rectangle(40, 20, 1, 1);
startposition = this.RectangleToScreen(startposition);
resoptions.Location = startposition.Location;
if(resoptions.ShowDialog(this) == DialogResult.OK)
{
// Start editing list
resourceitems.BeginUpdate();
// Update item
rl = resoptions.ResourceLocation;
selecteditem.Text = rl.location;
selecteditem.Tag = rl;
// Set icon
if(rl.type == ResourceLocation.RESOURCE_DIRECTORY)
selecteditem.ImageIndex = 0;
else if(rl.type == ResourceLocation.RESOURCE_WAD)
selecteditem.ImageIndex = 1;
// Done
resourceitems.EndUpdate();
}
}
}
// Remove resource
private void deleteresource_Click(object sender, EventArgs e)
{
// Anything selected?
if(resourceitems.SelectedItems.Count > 0)
{
// Remove it
resourceitems.Items.Remove(resourceitems.SelectedItems[0]);
}
}
// Item selected
private void resourceitems_ItemSelectionChanged(object sender, ListViewItemSelectionChangedEventArgs e)
{
// Anything selected
if(resourceitems.SelectedItems.Count > 0)
{
// Go for all selected items
for(int i = resourceitems.SelectedItems.Count - 1; i >= 0; i--)
{
// Item grayed? Then deselect.
if(resourceitems.SelectedItems[i].ForeColor != SystemColors.WindowText)
resourceitems.SelectedItems[i].Selected = false;
}
}
// Anything selected
if(resourceitems.SelectedItems.Count > 0)
{
// Enable buttons
editresource.Enabled = true;
deleteresource.Enabled = true;
}
else
{
// Disable buttons
editresource.Enabled = false;
deleteresource.Enabled = false;
}
}
// When an item is double clicked
private void resourceitems_DoubleClick(object sender, EventArgs e)
{
// Click the edit resource button
if(editresource.Enabled) editresource_Click(sender, e);
}
// Returns a list of the resources
public ResourceLocationList GetResources()
{
ResourceLocationList list = new ResourceLocationList();
// Go for all items
for(int i = 0; i < resourceitems.Items.Count; i++)
{
// Item not grayed?
if(resourceitems.Items[i].ForeColor == SystemColors.WindowText)
{
// Add item to list
list.Add((ResourceLocation)resourceitems.Items[i].Tag);
}
}
// Return result
return list;
}
#endregion
}
}

View file

@ -0,0 +1,225 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<metadata name="buttonsbar2.Locked" type="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="buttonsbar2.GenerateMember" type="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>False</value>
</metadata>
<metadata name="editresource.Locked" type="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="deleteresource.Locked" type="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="buttonsbar1.Locked" type="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="buttonsbar1.GenerateMember" type="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>False</value>
</metadata>
<metadata name="addresource.Locked" type="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="splitContainer1.Locked" type="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="images.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>17, 17</value>
</metadata>
<data name="images.ImageStream" mimetype="application/x-microsoft.net.object.binary.base64">
<value>
AAEAAAD/////AQAAAAAAAAAMAgAAAFdTeXN0ZW0uV2luZG93cy5Gb3JtcywgVmVyc2lvbj0yLjAuMC4w
LCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODkFAQAAACZTeXN0
ZW0uV2luZG93cy5Gb3Jtcy5JbWFnZUxpc3RTdHJlYW1lcgEAAAAERGF0YQcCAgAAAAkDAAAADwMAAADi
DwAAAk1TRnQBSQFMAgEBBAEAAQkBAAEEAQABEAEAARABAAT/ASEBAAj/AUIBTQE2BwABNgMAASgDAAFA
AwABIAMAAQEBAAEgBgABIP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8AxgABBAKWAf8BBAKW
Af8BBAJUAf8BBAJUAf8BBAJUAf8BBAJUAf8oAAEEApYB/wEEApYB/wEEAlQB/wEEAlQB/wEEAlQB/wEE
AlQB/1gAAxkB/wMZAf8DGQH/AxkB/wMZAf8DGQH/AxkB/wMZAf8wAAEEArkB/wEEApYB/wEEApYB/wEE
AoEB/wEEAoEB/wEEAlQB/xgAAxIB/wMSAf8DEgH/AxIB/wEEArkB/wEEApYB/wEEApYB/wEEAoEB/wEE
AoEB/wEEAlQB/wQAAXsBiAGQAf8BawGBAZAB/wFrAoEB/wFbAXsBgQH/AVsBawF7Af8BSwFjAWsB/wFL
AVMBWwH/ATsBQwFLAf8BKwI7Af8CKwE7Af8BGwEjASsB/wMbAf8CGwErAf8cAAMZAf8DCwH/A7AB/wOx
Af8DsAH/A60B/wOrAf8DoAH/AxkB/wwAAXQBiAGQAf8BZAGBAZAB/wFkAXwBgQH/AVQBdAGBAf8BVAFk
AXQB/wFEAVwBZAH/AUQBTAFUAf8BNAE8AUQB/wEkAjQB/wEEArkB/wOgAf8DfgH/A34B/wEEAoEB/wEE
AlQB/xQAAxIB/wMEAf8DsAH/A7EB/wOwAf8BBAK5Af8DoAH/A34B/wN+Af8BBAKBAf8BBAJUAf8EAAF7
AYgBkAH/AZABqAGwAf8BkAGoAbAB/wELAZAB0AH/AQsBkAHQAf8BCwGQAdAB/wELAZABwAH/ARsBiAHA
Af8BGwGBAbAB/wEbAYEBsAH/ASsBgQGgAf8BKwF7AZAB/wErAVMBawH/A5IB/xQAAxkB/wOqAf8DCwH/
A9cB/wPZAf8D3AH/A98B/wPhAf8DzwH/AxkB/wwAAXQBiAGQAf8BkAGoAbAB/wGQAagBsAH/AQQBkAHQ
Af8BBAGQAdAB/wEEAZAB0AH/AQQBkAHAAf8BFAGIAcAB/wEUAYEBsAH/AQQCuQH/AQQD/wEEA/8BBAP/
AQQCgQH/AQQCVAH/EAADEgH/A6oB/wMEAf8D1wH/A9kB/wPcAf8BBAK5Af8BBAP/AQQD/wEEA/8BBAKB
Af8BBAJUAf8EAAGBAYgBkAH/AWsB2AL/AZABqAGwAf8BgQHgAv8BawHQAv8BWwHIAv8BWwHIAv8BSwHA
AfAB/wE7AbAB8AH/ATsBqAHwAf8BKwGgAeAB/wEbAZAB0AH/ASsBcwGBAf8BZAFsAXIB/xAAAxkB/wOq
Af8DwQH/AwsB/wPVAf8D2QH/A90B/wPhAf8D5QH/A9IB/wMZAf8MAAGBAYgBkAH/AWQB2AL/AZABqAGw
Af8BgQHgAv8BZAHQAv8BVAHIAv8BVAHIAv8BRAHAAfAB/wE0AbAB8AH/AQQCuQH/AQQClgH/AQQClgH/
AQQCgQH/AQQCgQH/AQQCdwH/DAADEgH/A6oB/wPBAf8DBAH/A9UB/wPZAf8D3QH/AQQCuQH/AQQClgH/
AQQClgH/AQQCgQH/AQQCgQH/AQQCdwH/BAABgQGQAaAB/wFrAdgC/wGQAagBsAH/AZABwAHQAf8BewHY
Av8BawHQAv8BawHQAv8BWwHIAv8BWwHAAv8BSwG4AfAB/wE7AbAB8AH/ATsBqAHwAf8BGwGIAdAB/wEr
AVMBawH/A5IB/wwAAxkB/wMLAf8DCwH/A6oB/wPOAf8D0wH/A9gB/wPcAf8D4AH/A9EB/wMZAf8MAAGB
AZABoAH/AWQB2AL/AZABqAGwAf8BkAHAAdAB/wF0AdgC/wFkAdAC/wFkAdAC/wFUAcgC/wFUAcAC/wEE
ArkB/wEEAlQB/wOxAf8DHgH/AQQCgQH/AQQCVAH/DAADEgH/AwQB/wMEAf8DqgH/A84B/wPTAf8D2AH/
AQQCuQH/AQQCVAH/A7EB/wMeAf8BBAKBAf8BBAJUAf8EAAGBAZABoAH/AYEB2AHwAf8BawHYAv8BkAGo
AbAB/wGBAeAC/wF7AdAC/wFrAdgC/wFrAdAC/wFrAdAC/wFbAcgC/wFLAcAB8AH/AUsBuAHwAf8BOwGw
AfAB/wErAXMBgQH/A3kB/wwAAxkB/wPVAf8DwQH/A8QB/wPJAf8DzwH/A9MB/wPXAf8D2wH/A80B/wMZ
Af8MAAGBAZABoAH/AYEB2AHwAf8BZAHYAv8BkAGoAbAB/wGBAeAC/wF0AdAC/wFkAdgC/wFkAdAC/wFk
AdAC/wEEArkB/wEEAlQB/wMEAf8DHgH/AQQClgH/AQQCVAH/DAADEgH/A9UB/wPBAf8DxAH/A8kB/wPP
Af8D0wH/AQQCuQH/AQQCVAH/AwQB/wMeAf8BBAKWAf8BBAJUAf8EAAGBAZgBoAH/AZAB4AHwAf8BawHY
Av8BkAGoAbAB/wGQAbgBwAH/AXsB2AL/AWsB2AL/AWsB2AL/AWsB2AL/AWsB0AL/AVsB0AL/AVsByAL/
AUsBuAHwAf8BOwGgAeAB/wFUAXIBgQH/A5IB/wgAAxkB/wPTAf8DvAH/A8AB/wPFAf8DyQH/A80B/wPR
Af8D1QH/A8wB/wMZAf8MAAGBAZgBoAH/AZAB4AHwAf8BZAHYAv8BkAGoAbAB/wGQAbgBwAH/AXQB2AL/
AWQB2AL/AWQB2AL/AWQB2AL/AWQB0AL/AQQCuQH/AQQCuQH/AQQClgH/AQQCVAH/AU0BawF7Af8DkgH/
CAADEgH/A9MB/wO8Af8DwAH/A8UB/wPJAf8DzQH/A9EB/wEEArkB/wEEArkB/wEEApYB/wEEAlQB/wgA
AYEBmAGgAf8BkAHgAfAB/wGgAegC/wFrAdgC/wGQAagBsAH/AYEB4AL/AYEB4AL/AYEB4AL/AYEB4AL/
AYEB4AL/AYEB4AL/AYEB4AL/AXsB2AL/AXsB2AL/AVsBqAHQAf8DeQH/CAADGQH/A9EB/wO3Af8DuwH/
A8AB/wPEAf8DyAH/A8wB/wPRAf8DyQH/AxkB/wwAAYEBmAGgAf8BkAHgAfAB/wGgAegC/wFkAdgC/wGQ
AagBsAH/AYEB4AL/AYEB4AL/AYEB4AL/AYEB4AL/AYEB4AL/AYEB4AL/AYEB4AL/AXQB2AL/AXQB2AL/
AVQBqAHQAf8DcgH/CAADEgH/A9EB/wO3Af8DuwH/A8AB/wPEAf8DyAH/A8wB/wPRAf8DyQH/AxIB/wwA
AZACoAH/AaAB6AHwAf8BoAHoAv8BoAHoAv8BkAGoAbAB/wGQAagBsAH/AZABqAGwAf8BkAGoAbAB/wGB
AaABsAH/AYEBoAGwAf8BgQGYAaAB/wGBAZgBoAH/AYEBkAGgAf8BgQGQAaAB/wGBAYgBkAH/AXsBiAGQ
Af8IAAMZAf8D0QH/A7MB/wO1Af8DuQH/A78B/wPDAf8DxwH/A8sB/wPGAf8DGQH/DAABkAKgAf8BoAHo
AfAB/wGgAegC/wGgAegC/wGQAagBsAH/AZABqAGwAf8BkAGoAbAB/wGQAagBsAH/AYEBoAGwAf8BgQGg
AbAB/wGBAZgBoAH/AYEBmAGgAf8BgQGQAaAB/wGBAZABoAH/AYEBiAGQAf8BdAGIAZAB/wgAAxIB/wPR
Af8DswH/A7UB/wO5Af8DvwH/A8MB/wPHAf8DywH/A8YB/wMSAf8MAAGQAaABsAH/AaAB6AHwAf8BoAHw
Av8BoAHoAv8BoAHoAv8BgQHYAv8BawHYAv8BawHYAv8BawHYAv8BawHYAv8BawHYAv8BawHYAv8BewGI
AZAB/xQAAxkB/wPRAf8DrQH/A7EB/wO0Af8DuQH/A7wB/wPBAf8DxQH/A8QB/wMZAf8MAAGQAaABsAH/
AaAB6AHwAf8BoAHwAv8BoAHoAv8BoAHoAv8BgQHYAv8BZAHYAv8BZAHYAv8BZAHYAv8BZAHYAv8BZAHY
Av8BZAHYAv8BdAGIAZAB/xQAAxIB/wPRAf8DrQH/A7EB/wO0Af8DuQH/A7wB/wPBAf8DxQH/A8QB/wMS
Af8MAAGQAaABsAH/AaAC8AH/AbAC8AH/AaAB8AL/AaAB6AL/AaAB6AL/AXsB2AL/AZACoAH/AYEBmAGg
Af8BgQGYAaAB/wGBAZABoAH/AYECkAH/AXsBiAGQAf8UAAMZAf8DygH/A6gB/wOsAf8DsAH/A7QB/wO4
Af8DvAH/A8AB/wPBAf8DGQH/DAABkAGgAbAB/wGgAvAB/wGwAvAB/wGgAfAC/wGgAegC/wGgAegC/wF0
AdgC/wGQAqAB/wGBAZgBoAH/AYEBmAGgAf8BgQGQAaAB/wGBApAB/wF0AYgBkAH/FAADEgH/A8oB/wOo
Af8DrAH/A7AB/wO0Af8DuAH/A7wB/wPAAf8DwQH/AxIB/wwAAZABqAGwAf8BoAHQAeAB/wGwAvAB/wGw
AvAB/wGgAfAC/wGgAegC/wGQAaABsAH/A5IB/ygAAxkB/wPLAf8DqQH/A6wB/wOwAf8DtAH/A7cB/wO7
Af8DvQH/A8AB/wMZAf8MAAGQAagBsAH/AaAB0AHgAf8BsALwAf8BsALwAf8BoAHwAv8BoAHoAv8BkAGg
AbAB/wOSAf8oAAMSAf8DywH/A6kB/wOsAf8DsAH/A7QB/wO3Af8DuwH/A70B/wPAAf8DEgH/EAABkAGo
AbAB/wGQAagBsAH/AZABqAGwAf8BkAGoAbAB/wGQAagBsAH/A5IB/ywAAxkB/wPyAf8D1QH/A9IB/wPR
Af8DzgH/A8sB/wPKAf8DxwH/A8YB/wMZAf8QAAGQAagBsAH/AZABqAGwAf8BkAGoAbAB/wGQAagBsAH/
AZABqAGwAf8DkgH/LAADEgH/A/IB/wPVAf8D0gH/A9EB/wPOAf8DywH/A8oB/wPHAf8DxgH/AxIB/1QA
AxkB/wMZAf8DGQH/AxkB/wMZAf8DGQH/AxkB/wMZAf8DGQH/AxkB/wMZAf9UAAMSAf8DEgH/AxIB/wMS
Af8DEgH/AxIB/wMSAf8DEgH/AxIB/wMSAf8DEgH//wANAAFCAU0BPgcAAT4DAAEoAwABQAMAASADAAEB
AQABAQYAAQEWAAP/gQAF/wGBAf8BgQL/AfgBBwH/AYEB+AEBAQABBwHwAQcBAAEBAfABAQEAAQMB4AEH
AQABAQHgAQEBAAEDAcABBwEAAQEBwAEBAQABAQHAAQcBAAEBAcABAQEAAQEBwAEHAQABAQHAAQECAAHA
AQcCAAHAAQMCAAHAAQcCAAHAAQcCAAHAAQcCAAHAAQcBAAEHAcABBwEAAQcBwAEHAQABBwHAAQcBAAEH
AcABBwEAAf8BwAEHAQAB/wHAAQcBgQH/AcABBwGBAf8BwAEHAv8BwAEHAv8BwAEHCP8L
</value>
</data>
<metadata name="$this.Locked" type="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
</root>

View file

@ -0,0 +1,250 @@
#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.Globalization;
using System.Windows.Forms;
using CodeImp.DoomBuilder.Controls;
using CodeImp.DoomBuilder.Geometry;
using CodeImp.DoomBuilder.Rendering;
using CodeImp.DoomBuilder.Editing;
#endregion
namespace CodeImp.DoomBuilder.Interface
{
internal class ResourceListView : ListView
{
private const string DRAG_TYPE = "ReorderItems";
private List<ListViewItem> dragitems;
// Disable sorting
public new SortOrder Sorting { get { return SortOrder.None; } set { base.Sorting = SortOrder.None; } }
// Constructor
public ResourceListView(): base()
{
// List for dragged items
dragitems = new List<ListViewItem>();
}
// When items are dropped
protected override void OnDragDrop(DragEventArgs e)
{
int dropindex, i;
ListViewItem insertatitem;
Point cp;
// Pass on to base
base.OnDragDrop(e);
// Leave when no items being dragged
if(dragitems.Count == 0) return;
// Determine where to insert
cp = base.PointToClient(new Point(e.X, e.Y));
insertatitem = base.GetItemAt(cp.X, cp.Y);
// Leave when nowhere to insert or same as selected item
if((insertatitem == null) || (dragitems.Contains(insertatitem))) return;
// Leave when item is grayed
if(insertatitem.ForeColor != SystemColors.WindowText) return;
// Determine index where to insert
dropindex = insertatitem.Index;
if(dropindex > dragitems[0].Index) dropindex++;
// Deselect items
DeselectAll();
// Insert items
for(i = dragitems.Count - 1; i >= 0; i--)
{
// Insert a copy of the item here
base.Items.Insert(dropindex, (ListViewItem)dragitems[i].Clone());
base.Items[dropindex].Selected = true;
}
// Remove old items
foreach(ListViewItem lvi in dragitems)
{
// Remove item from list
base.Items.Remove(lvi);
}
// Clear the list
dragitems.Clear();
}
// When items are dragged over
protected override void OnDragOver(DragEventArgs e)
{
int dropindex, i;
ListViewItem insertatitem;
Point cp;
// Check if our data format is present
if(!e.Data.GetDataPresent(DataFormats.Text))
{
e.Effect = DragDropEffects.None;
return;
}
// Check if the data matches our data
String text = (String)e.Data.GetData(DRAG_TYPE.GetType());
if(text.CompareTo(DRAG_TYPE + this.Name) == 0)
{
// Determine where to insert
cp = base.PointToClient(new Point(e.X, e.Y));
insertatitem = base.GetItemAt(cp.X, cp.Y);
if(insertatitem == null)
{
// Cannot insert here
e.Effect = DragDropEffects.None;
return;
}
// Item is one of the items being dragged?
if(dragitems.Contains(insertatitem))
{
// Show move possibility, but dont do anything
e.Effect = DragDropEffects.Move;
insertatitem.EnsureVisible();
return;
}
// Check if item is grayed
if(insertatitem.ForeColor != SystemColors.WindowText)
{
// Cannot insert here
e.Effect = DragDropEffects.None;
insertatitem.EnsureVisible();
return;
}
// Pass on to base
base.OnDragOver(e);
// Can insert here
e.Effect = DragDropEffects.Move;
insertatitem.EnsureVisible();
// Determine index where to insert
dropindex = insertatitem.Index;
if(dropindex > dragitems[0].Index) dropindex++;
// Deselect items
DeselectAll();
// Insert items
for(i = dragitems.Count - 1; i >= 0; i--)
{
// Insert a copy of the item here
base.Items.Insert(dropindex, (ListViewItem)dragitems[i].Clone());
base.Items[dropindex].Selected = true;
}
// Remove old items
foreach(ListViewItem lvi in dragitems)
{
// Remove item from list
base.Items.Remove(lvi);
}
// Copy selected items to the list
dragitems.Clear();
foreach(ListViewItem lvi in base.SelectedItems) dragitems.Add(lvi);
}
else
{
// Cannot insert here
e.Effect = DragDropEffects.None;
}
}
// When items are first dragged over
protected override void OnDragEnter(DragEventArgs e)
{
// Pass on to base
base.OnDragEnter(e);
// Check if our data format is present
if(!e.Data.GetDataPresent(DataFormats.Text))
{
// No effect
e.Effect = DragDropEffects.None;
return;
}
// Check if the data matches our data
String text = (String)e.Data.GetData(DRAG_TYPE.GetType());
if(text.CompareTo(DRAG_TYPE + base.Name) == 0)
{
// We're moving these items
e.Effect = DragDropEffects.Move;
}
else
{
// No effect
e.Effect = DragDropEffects.None;
}
}
// When items are first dragged
protected override void OnItemDrag(ItemDragEventArgs e)
{
// Pass on to base
base.OnItemDrag(e);
// Anything selected?
if(base.SelectedItems.Count > 0)
{
// Go for all selected items
for(int i = base.SelectedItems.Count - 1; i >= 0; i--)
{
// Item grayed? Then abort!
if(base.SelectedItems[i].ForeColor != SystemColors.WindowText)
return;
}
// Copy selected items to the list
dragitems.Clear();
foreach(ListViewItem lvi in base.SelectedItems) dragitems.Add(lvi);
// Start drag operation
base.DoDragDrop(DRAG_TYPE + base.Name, DragDropEffects.Move);
}
}
// This deselects all items
private void DeselectAll()
{
// Go for all selected items
for(int i = base.SelectedItems.Count - 1; i >= 0; i--)
{
// Item grayed? Then abort!
base.SelectedItems[i].Selected = false;
}
}
}
}

View file

@ -45,14 +45,14 @@ namespace CodeImp.DoomBuilder.Map
private string previousname;
// Additional resources
private List<ResourceLocation> resources;
private ResourceLocationList resources;
#endregion
#region ================== Properties
public string ConfigFile { get { return configfile; } set { configfile = value; } }
public ICollection<ResourceLocation> Resources { get { return resources; } }
public ResourceLocationList Resources { get { return resources; } }
public string PreviousName { get { return previousname; } }
public string CurrentName
{
@ -80,7 +80,7 @@ namespace CodeImp.DoomBuilder.Map
this.previousname = "";
this.currentname = "";
this.configfile = "";
this.resources = new List<ResourceLocation>();
this.resources = new ResourceLocationList();
}
// Constructor to load from Doom Builder Map Settings Configuration
@ -93,7 +93,7 @@ namespace CodeImp.DoomBuilder.Map
this.previousname = "";
this.currentname = mapname;
this.configfile = cfg.ReadSetting("config", "");
this.resources = new List<ResourceLocation>();
this.resources = new ResourceLocationList();
// Go for all items in the map info
mapinfo = cfg.ReadSetting(mapname, new Hashtable());
@ -165,6 +165,14 @@ namespace CodeImp.DoomBuilder.Map
resources.RemoveAt(index);
}
// This copies resources from a list
public void CopyResources(ResourceLocationList fromlist)
{
// Clear this list
resources.Clear();
resources.AddRange(fromlist);
}
// This displays the current map name
public override string ToString()
{