mirror of
https://git.do.srb2.org/STJr/UltimateZoneBuilder.git
synced 2025-01-18 22:41:46 +00:00
Texture and Flats browsers now have the current texture selected by default
This commit is contained in:
parent
67f4237bc0
commit
6ba030d64d
3 changed files with 195 additions and 50 deletions
|
@ -220,25 +220,46 @@ namespace CodeImp.DoomBuilder.Controls
|
||||||
#region ================== Methods
|
#region ================== Methods
|
||||||
|
|
||||||
// This selects an item by name
|
// This selects an item by name
|
||||||
public void SelectItem(string name)
|
public void SelectItem(string name, ListViewGroup preferredgroup)
|
||||||
{
|
{
|
||||||
ListViewItem lvi;
|
ListViewItem lvi = null;
|
||||||
|
|
||||||
// Not when selecting is prevented
|
// Not when selecting is prevented
|
||||||
if(preventselection) return;
|
if(preventselection) return;
|
||||||
|
|
||||||
// Find item with this text
|
// Search in preferred group first
|
||||||
lvi = list.FindItemWithText(name);
|
if(preferredgroup != null)
|
||||||
|
{
|
||||||
|
foreach(ListViewItem item in list.Items)
|
||||||
|
{
|
||||||
|
if((item.Group == preferredgroup) && (string.Compare(item.Text, name, true) == 0))
|
||||||
|
{
|
||||||
|
lvi = item;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// If nothing found yet, search all items
|
||||||
|
if(lvi == null)
|
||||||
|
{
|
||||||
|
foreach(ListViewItem item in list.Items)
|
||||||
|
{
|
||||||
|
if(string.Compare(item.Text, name, true) == 0)
|
||||||
|
{
|
||||||
|
lvi = item;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Select the item
|
||||||
if(lvi != null)
|
if(lvi != null)
|
||||||
{
|
{
|
||||||
// Does the text really match?
|
// Select this item
|
||||||
if(lvi.Text == name)
|
list.SelectedItems.Clear();
|
||||||
{
|
lvi.Selected = true;
|
||||||
// Select this item
|
lvi.EnsureVisible();
|
||||||
list.SelectedItems.Clear();
|
|
||||||
lvi.Selected = true;
|
|
||||||
lvi.EnsureVisible();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
UpdateTextureSizeLabel();
|
UpdateTextureSizeLabel();
|
||||||
|
|
|
@ -22,6 +22,7 @@ using System.ComponentModel;
|
||||||
using System.Drawing;
|
using System.Drawing;
|
||||||
using System.Text;
|
using System.Text;
|
||||||
using System.Windows.Forms;
|
using System.Windows.Forms;
|
||||||
|
using CodeImp.DoomBuilder.IO;
|
||||||
using Microsoft.Win32;
|
using Microsoft.Win32;
|
||||||
using System.Diagnostics;
|
using System.Diagnostics;
|
||||||
using CodeImp.DoomBuilder.Actions;
|
using CodeImp.DoomBuilder.Actions;
|
||||||
|
@ -42,6 +43,7 @@ namespace CodeImp.DoomBuilder.Windows
|
||||||
private Size lastsize;
|
private Size lastsize;
|
||||||
private ListViewGroup usedgroup;
|
private ListViewGroup usedgroup;
|
||||||
private ListViewGroup availgroup;
|
private ListViewGroup availgroup;
|
||||||
|
private ListViewItem selectedset;
|
||||||
|
|
||||||
// Properties
|
// Properties
|
||||||
public string SelectedName { get { return selectedname; } }
|
public string SelectedName { get { return selectedname; } }
|
||||||
|
@ -77,11 +79,10 @@ namespace CodeImp.DoomBuilder.Windows
|
||||||
|
|
||||||
// Select the last one that was selected
|
// Select the last one that was selected
|
||||||
string selectname = General.Settings.ReadSetting("browserwindow.textureset", "");
|
string selectname = General.Settings.ReadSetting("browserwindow.textureset", "");
|
||||||
foreach(ListViewItem i in texturesets.Items) if(i.Text == selectname) i.Selected = true;
|
foreach(ListViewItem i in texturesets.Items) if(i.Text == selectname) selectedset = i;
|
||||||
|
|
||||||
// None selected? Then select the first
|
// None selected? Then select the first
|
||||||
if(texturesets.SelectedItems.Count == 0)
|
if(selectedset == null) selectedset = texturesets.Items[0];
|
||||||
texturesets.Items[0].Selected = true;
|
|
||||||
|
|
||||||
// Make groups
|
// Make groups
|
||||||
usedgroup = browser.AddGroup("Used Textures");
|
usedgroup = browser.AddGroup("Used Textures");
|
||||||
|
@ -104,6 +105,51 @@ namespace CodeImp.DoomBuilder.Windows
|
||||||
this.ResumeLayout(true);
|
this.ResumeLayout(true);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// This fills the lists and selects the given texture
|
||||||
|
public void Setup(string selectflat)
|
||||||
|
{
|
||||||
|
if(!string.IsNullOrEmpty(selectflat))
|
||||||
|
{
|
||||||
|
// We prefer selecting the texture using the Texture Set that was previously selected
|
||||||
|
if(texturesets.SelectedItems.Count > 0)
|
||||||
|
{
|
||||||
|
if(SelectFlatInSet(texturesets.SelectedItems[0], selectflat)) return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Otherwise, go from top to bottom to find the texture
|
||||||
|
foreach(ListViewItem i in texturesets.Items)
|
||||||
|
{
|
||||||
|
if(SelectFlatInSet(i, selectflat)) return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Select texture set and fill list
|
||||||
|
selectedset.Selected = true;
|
||||||
|
selectedset.EnsureVisible();
|
||||||
|
FillImagesList(selectflat);
|
||||||
|
}
|
||||||
|
|
||||||
|
// This selects a Texture Set and the texture if it can be found
|
||||||
|
private bool SelectFlatInSet(ListViewItem setitem, string selectflat)
|
||||||
|
{
|
||||||
|
long longname = Lump.MakeLongName(selectflat);
|
||||||
|
IFilledTextureSet set = (setitem.Tag as IFilledTextureSet);
|
||||||
|
foreach(ImageData img in set.Textures)
|
||||||
|
{
|
||||||
|
if(img.LongName == longname)
|
||||||
|
{
|
||||||
|
// Texture found in this set! Select it now.
|
||||||
|
selectedset = setitem;
|
||||||
|
selectedset.Selected = true;
|
||||||
|
selectedset.EnsureVisible();
|
||||||
|
FillImagesList(selectflat);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
// Selection changed
|
// Selection changed
|
||||||
private void browser_SelectedItemChanged()
|
private void browser_SelectedItemChanged()
|
||||||
{
|
{
|
||||||
|
@ -203,6 +249,7 @@ namespace CodeImp.DoomBuilder.Windows
|
||||||
public static string Browse(IWin32Window parent, string select)
|
public static string Browse(IWin32Window parent, string select)
|
||||||
{
|
{
|
||||||
FlatBrowserForm browser = new FlatBrowserForm();
|
FlatBrowserForm browser = new FlatBrowserForm();
|
||||||
|
browser.Setup(select);
|
||||||
if(browser.ShowDialog(parent) == DialogResult.OK)
|
if(browser.ShowDialog(parent) == DialogResult.OK)
|
||||||
{
|
{
|
||||||
// Return result
|
// Return result
|
||||||
|
@ -221,22 +268,12 @@ namespace CodeImp.DoomBuilder.Windows
|
||||||
// Anything slected?
|
// Anything slected?
|
||||||
if(texturesets.SelectedItems.Count > 0)
|
if(texturesets.SelectedItems.Count > 0)
|
||||||
{
|
{
|
||||||
// Get the selected texture set
|
// Not the same?
|
||||||
IFilledTextureSet set = (texturesets.SelectedItems[0].Tag as IFilledTextureSet);
|
if(texturesets.SelectedItems[0] != selectedset)
|
||||||
|
{
|
||||||
// Start adding
|
selectedset = texturesets.SelectedItems[0];
|
||||||
browser.BeginAdding(false);
|
FillImagesList(null);
|
||||||
|
}
|
||||||
// Add all used flats
|
|
||||||
foreach(ImageData img in set.Flats)
|
|
||||||
if(img.UsedInMap) browser.Add(img.Name, img, img, usedgroup);
|
|
||||||
|
|
||||||
// Add all available flats
|
|
||||||
foreach(ImageData img in set.Flats)
|
|
||||||
browser.Add(img.Name, img, img, availgroup);
|
|
||||||
|
|
||||||
// Done adding
|
|
||||||
browser.EndAdding();
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -245,5 +282,30 @@ namespace CodeImp.DoomBuilder.Windows
|
||||||
{
|
{
|
||||||
if(apply.Enabled) apply_Click(this, EventArgs.Empty);
|
if(apply.Enabled) apply_Click(this, EventArgs.Empty);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// This fills the list of textures, depending on the selected texture set
|
||||||
|
private void FillImagesList(string selectflat)
|
||||||
|
{
|
||||||
|
// Get the selected texture set
|
||||||
|
IFilledTextureSet set = (selectedset.Tag as IFilledTextureSet);
|
||||||
|
|
||||||
|
// Start adding
|
||||||
|
browser.BeginAdding(false);
|
||||||
|
|
||||||
|
// Add all used flats
|
||||||
|
foreach(ImageData img in set.Flats)
|
||||||
|
if(img.UsedInMap) browser.Add(img.Name, img, img, usedgroup);
|
||||||
|
|
||||||
|
// Add all available flats
|
||||||
|
foreach(ImageData img in set.Flats)
|
||||||
|
browser.Add(img.Name, img, img, availgroup);
|
||||||
|
|
||||||
|
// Done adding
|
||||||
|
browser.EndAdding();
|
||||||
|
|
||||||
|
// Select texture
|
||||||
|
if(!string.IsNullOrEmpty(selectflat))
|
||||||
|
browser.SelectItem(selectflat, usedgroup);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
|
@ -22,6 +22,7 @@ using System.ComponentModel;
|
||||||
using System.Drawing;
|
using System.Drawing;
|
||||||
using System.Text;
|
using System.Text;
|
||||||
using System.Windows.Forms;
|
using System.Windows.Forms;
|
||||||
|
using CodeImp.DoomBuilder.IO;
|
||||||
using Microsoft.Win32;
|
using Microsoft.Win32;
|
||||||
using System.Diagnostics;
|
using System.Diagnostics;
|
||||||
using CodeImp.DoomBuilder.Actions;
|
using CodeImp.DoomBuilder.Actions;
|
||||||
|
@ -42,6 +43,7 @@ namespace CodeImp.DoomBuilder.Windows
|
||||||
private Size lastsize;
|
private Size lastsize;
|
||||||
private ListViewGroup usedgroup;
|
private ListViewGroup usedgroup;
|
||||||
private ListViewGroup availgroup;
|
private ListViewGroup availgroup;
|
||||||
|
private ListViewItem selectedset;
|
||||||
|
|
||||||
// Properties
|
// Properties
|
||||||
public string SelectedName { get { return selectedname; } }
|
public string SelectedName { get { return selectedname; } }
|
||||||
|
@ -77,11 +79,10 @@ namespace CodeImp.DoomBuilder.Windows
|
||||||
|
|
||||||
// Select the last one that was selected
|
// Select the last one that was selected
|
||||||
string selectname = General.Settings.ReadSetting("browserwindow.textureset", "");
|
string selectname = General.Settings.ReadSetting("browserwindow.textureset", "");
|
||||||
foreach(ListViewItem i in texturesets.Items) if(i.Text == selectname) i.Selected = true;
|
foreach(ListViewItem i in texturesets.Items) if(i.Text == selectname) selectedset = i;
|
||||||
|
|
||||||
// None selected? Then select the first
|
// None selected? Then select the first
|
||||||
if(texturesets.SelectedItems.Count == 0)
|
if(selectedset == null) selectedset = texturesets.Items[0];
|
||||||
texturesets.Items[0].Selected = true;
|
|
||||||
|
|
||||||
// Make groups
|
// Make groups
|
||||||
usedgroup = browser.AddGroup("Used Textures");
|
usedgroup = browser.AddGroup("Used Textures");
|
||||||
|
@ -104,6 +105,51 @@ namespace CodeImp.DoomBuilder.Windows
|
||||||
this.ResumeLayout(true);
|
this.ResumeLayout(true);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// This fills the lists and selects the given texture
|
||||||
|
public void Setup(string selecttexture)
|
||||||
|
{
|
||||||
|
if(!string.IsNullOrEmpty(selecttexture))
|
||||||
|
{
|
||||||
|
// We prefer selecting the texture using the Texture Set that was previously selected
|
||||||
|
if(texturesets.SelectedItems.Count > 0)
|
||||||
|
{
|
||||||
|
if(SelectTextureInSet(texturesets.SelectedItems[0], selecttexture)) return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Otherwise, go from top to bottom to find the texture
|
||||||
|
foreach(ListViewItem i in texturesets.Items)
|
||||||
|
{
|
||||||
|
if(SelectTextureInSet(i, selecttexture)) return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Select texture set and fill list
|
||||||
|
selectedset.Selected = true;
|
||||||
|
selectedset.EnsureVisible();
|
||||||
|
FillImagesList(selecttexture);
|
||||||
|
}
|
||||||
|
|
||||||
|
// This selects a Texture Set and the texture if it can be found
|
||||||
|
private bool SelectTextureInSet(ListViewItem setitem, string selecttexture)
|
||||||
|
{
|
||||||
|
long longname = Lump.MakeLongName(selecttexture);
|
||||||
|
IFilledTextureSet set = (setitem.Tag as IFilledTextureSet);
|
||||||
|
foreach(ImageData img in set.Textures)
|
||||||
|
{
|
||||||
|
if(img.LongName == longname)
|
||||||
|
{
|
||||||
|
// Texture found in this set! Select it now.
|
||||||
|
selectedset = setitem;
|
||||||
|
selectedset.Selected = true;
|
||||||
|
selectedset.EnsureVisible();
|
||||||
|
FillImagesList(selecttexture);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
// Selection changed
|
// Selection changed
|
||||||
private void browser_SelectedItemChanged()
|
private void browser_SelectedItemChanged()
|
||||||
{
|
{
|
||||||
|
@ -203,6 +249,7 @@ namespace CodeImp.DoomBuilder.Windows
|
||||||
public static string Browse(IWin32Window parent, string select)
|
public static string Browse(IWin32Window parent, string select)
|
||||||
{
|
{
|
||||||
TextureBrowserForm browser = new TextureBrowserForm();
|
TextureBrowserForm browser = new TextureBrowserForm();
|
||||||
|
browser.Setup(select);
|
||||||
if(browser.ShowDialog(parent) == DialogResult.OK)
|
if(browser.ShowDialog(parent) == DialogResult.OK)
|
||||||
{
|
{
|
||||||
// Return result
|
// Return result
|
||||||
|
@ -221,22 +268,12 @@ namespace CodeImp.DoomBuilder.Windows
|
||||||
// Anything slected?
|
// Anything slected?
|
||||||
if(texturesets.SelectedItems.Count > 0)
|
if(texturesets.SelectedItems.Count > 0)
|
||||||
{
|
{
|
||||||
// Get the selected texture set
|
// Not the same?
|
||||||
IFilledTextureSet set = (texturesets.SelectedItems[0].Tag as IFilledTextureSet);
|
if(texturesets.SelectedItems[0] != selectedset)
|
||||||
|
{
|
||||||
// Start adding
|
selectedset = texturesets.SelectedItems[0];
|
||||||
browser.BeginAdding(false);
|
FillImagesList(null);
|
||||||
|
}
|
||||||
// Add all available textures and mark the images for temporary loading
|
|
||||||
foreach(ImageData img in set.Textures)
|
|
||||||
browser.Add(img.Name, img, img, availgroup);
|
|
||||||
|
|
||||||
// Add all used textures and mark the images for permanent loading
|
|
||||||
foreach(ImageData img in set.Textures)
|
|
||||||
if(img.UsedInMap) browser.Add(img.Name, img, img, usedgroup);
|
|
||||||
|
|
||||||
// Done adding
|
|
||||||
browser.EndAdding();
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -245,5 +282,30 @@ namespace CodeImp.DoomBuilder.Windows
|
||||||
{
|
{
|
||||||
if(apply.Enabled) apply_Click(this, EventArgs.Empty);
|
if(apply.Enabled) apply_Click(this, EventArgs.Empty);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// This fills the list of textures, depending on the selected texture set
|
||||||
|
private void FillImagesList(string selecttexture)
|
||||||
|
{
|
||||||
|
// Get the selected texture set
|
||||||
|
IFilledTextureSet set = (selectedset.Tag as IFilledTextureSet);
|
||||||
|
|
||||||
|
// Start adding
|
||||||
|
browser.BeginAdding(false);
|
||||||
|
|
||||||
|
// Add all available textures and mark the images for temporary loading
|
||||||
|
foreach(ImageData img in set.Textures)
|
||||||
|
browser.Add(img.Name, img, img, availgroup);
|
||||||
|
|
||||||
|
// Add all used textures and mark the images for permanent loading
|
||||||
|
foreach(ImageData img in set.Textures)
|
||||||
|
if(img.UsedInMap) browser.Add(img.Name, img, img, usedgroup);
|
||||||
|
|
||||||
|
// Done adding
|
||||||
|
browser.EndAdding();
|
||||||
|
|
||||||
|
// Select texture
|
||||||
|
if(!string.IsNullOrEmpty(selecttexture))
|
||||||
|
browser.SelectItem(selecttexture, usedgroup);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
Loading…
Reference in a new issue