mirror of
https://git.do.srb2.org/STJr/UltimateZoneBuilder.git
synced 2024-11-25 21:31:14 +00:00
f2db0e1d30
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.
234 lines
5.9 KiB
C#
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;
|
|
}
|
|
}
|
|
}
|
|
|