UltimateZoneBuilder/Source/Core/Windows/TextureSetForm.cs
MaxED f2db0e1d30 Changed, Textures Browser: frames/names of used textures are now drawn using a different color.
Changed, Textures Browser: the browser now toggles between showing used textures on the top of the list and showing textures in alphabetical order instead of toggling between showing all textures and used textures.
2016-12-23 12:39:09 +00:00

234 lines
5.9 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.Windows.Forms;
using CodeImp.DoomBuilder.Controls;
using CodeImp.DoomBuilder.Data;
using CodeImp.DoomBuilder.Config;
#endregion
namespace CodeImp.DoomBuilder.Windows
{
internal partial class TextureSetForm : DelayedForm
{
// Variables
private DefinedTextureSet textureset;
// Constructor
public TextureSetForm()
{
InitializeComponent();
matcheslist.ApplySettings();
// Show/hide components
matchesbutton.Visible = (General.Map != null);
nomatchesbutton.Visible = (General.Map != null);
matcheslist.Visible = (General.Map != null);
noresultlabel.Visible = (General.Map == null);
}
// This initializes the set
public void Setup(DefinedTextureSet set)
{
// Keep reference
textureset = set;
// Set name
name.Text = set.Name;
// Fill filters list
foreach(string s in set.Filters)
filters.Items.Add(s);
}
// OK clicked
private void apply_Click(object sender, EventArgs e)
{
// Apply name
textureset.Name = name.Text;
// Apply filters
textureset.Filters.Clear();
foreach(ListViewItem i in filters.Items) textureset.Filters.Add(i.Text);
// Done
matcheslist.CleanUp();
this.DialogResult = DialogResult.OK;
this.Close();
}
// Cancel clicked
private void cancel_Click(object sender, EventArgs e)
{
// Be gone.
matcheslist.CleanUp();
this.DialogResult = DialogResult.Cancel;
this.Close();
}
// Add texture
private void addfilter_Click(object sender, EventArgs e)
{
ListViewItem i = new ListViewItem("");
filters.Items.Add(i);
i.BeginEdit();
}
// Remove selected items
private void removefilter_Click(object sender, EventArgs e)
{
int index = filters.SelectedIndices[0]; //mxd
foreach(ListViewItem i in filters.SelectedItems) i.Remove();
//mxd
if(filters.Items.Count > 0)
{
if(index >= filters.Items.Count) index = filters.Items.Count - 1;
filters.Items[index].Selected = true;
}
filters.Focus(); //mxd
// Run the timer
filterstimer.Start();
}
// Items selected/deselected
private void filters_SelectedIndexChanged(object sender, EventArgs e)
{
removefilter.Enabled = (filters.SelectedItems.Count > 0);
}
// Double clicking an item
private void filters_DoubleClick(object sender, EventArgs e)
{
// Edit item
if(filters.SelectedItems.Count == 1)
filters.SelectedItems[0].BeginEdit();
}
// This removes empty items and makes others uppercase
private void filterstimer_Tick(object sender, EventArgs e)
{
// Stop timer
filterstimer.Stop();
// Update labels
for(int i = filters.Items.Count - 1; i >= 0; i--)
{
// Empty label?
if((filters.Items[i].Text == null) ||
(filters.Items[i].Text.Trim().Length == 0))
{
// Remove it
filters.Items.RemoveAt(i);
}
else
{
// Make uppercase
filters.Items[i].Text = filters.Items[i].Text.ToUpperInvariant();
}
}
// Show example results if when we can
if(General.Map != null)
{
Cursor.Current = Cursors.AppStarting;
// Make a set for comparing
List<string> filterslist = new List<string>(filters.Items.Count);
foreach(ListViewItem i in filters.Items) filterslist.Add(i.Text);
MatchingTextureSet set = new MatchingTextureSet(filterslist);
// Determine tooltip text
string tooltiptext = null;
if(nomatchesbutton.Checked) tooltiptext = "Double-click to include this texture";
// Start adding
matcheslist.PreventSelection = matchesbutton.Checked;
matcheslist.BeginAdding(true);
// Go for all textures
foreach(ImageData img in General.Map.Data.Textures)
{
bool ismatch = set.IsMatch(img);
if((ismatch && matchesbutton.Checked) || (!ismatch && nomatchesbutton.Checked))
matcheslist.AddItem(img, tooltiptext);
}
// If not already mixed, add flats as well
if(!General.Map.Config.MixTexturesFlats)
{
// Go for all flats
foreach(ImageData img in General.Map.Data.Flats)
{
bool ismatch = set.IsMatch(img);
if((ismatch && matchesbutton.Checked) || (!ismatch && nomatchesbutton.Checked))
matcheslist.AddItem(img, tooltiptext);
}
}
// Done adding
matcheslist.EndAdding();
Cursor.Current = Cursors.Default;
}
}
// Done editing a filter
private void filters_AfterLabelEdit(object sender, LabelEditEventArgs e)
{
// Run the timer
filterstimer.Start();
}
// When first shown
private void TextureSetForm_Shown(object sender, EventArgs e)
{
// Run the timer
filterstimer.Start();
}
// Show (not) matches clicked
private void matchesbutton_Click(object sender, EventArgs e)
{
// Run the timer
filterstimer.Start();
}
// Texture doubleclicked
private void matcheslist_SelectedItemDoubleClicked(ImageBrowserItem item)
{
// Add texture name to the list
if(item != null) filters.Items.Add(item.TextureName);
// Run the timer
filterstimer.Start();
}
// Help
private void TextureSetForm_HelpRequested(object sender, HelpEventArgs hlpevent)
{
General.ShowHelp("w_textureset.html");
hlpevent.Handled = true;
}
}
}