mirror of
https://git.do.srb2.org/STJr/UltimateZoneBuilder.git
synced 2024-11-26 22:01:45 +00:00
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.
This commit is contained in:
parent
447851e457
commit
f2db0e1d30
8 changed files with 192 additions and 261 deletions
|
@ -295,7 +295,7 @@ namespace CodeImp.DoomBuilder.Config
|
|||
if(Read(cfgfilepathname, defaultfilepathname))
|
||||
{
|
||||
// Read the cache variables
|
||||
blackbrowsers = cfg.ReadSetting("blackbrowsers", false);
|
||||
blackbrowsers = cfg.ReadSetting("blackbrowsers", true);
|
||||
visualfov = cfg.ReadSetting("visualfov", 80);
|
||||
visualmousesensx = cfg.ReadSetting("visualmousesensx", 40f);
|
||||
visualmousesensy = cfg.ReadSetting("visualmousesensy", 40f);
|
||||
|
|
|
@ -138,6 +138,7 @@ namespace CodeImp.DoomBuilder.Controls
|
|||
{
|
||||
// ensure that the hot state is removed
|
||||
this.hot = false;
|
||||
this.Cursor = Cursors.Default; //mxd
|
||||
this.Invalidate();
|
||||
}
|
||||
|
||||
|
|
146
Source/Core/Controls/ImageBrowserControl.Designer.cs
generated
146
Source/Core/Controls/ImageBrowserControl.Designer.cs
generated
|
@ -33,19 +33,19 @@ namespace CodeImp.DoomBuilder.Controls
|
|||
this.labelMixMode = new System.Windows.Forms.Label();
|
||||
this.label = new System.Windows.Forms.Label();
|
||||
this.splitter = new System.Windows.Forms.SplitContainer();
|
||||
this.list = new CodeImp.DoomBuilder.Controls.ImageSelectorPanel();
|
||||
this.objectclear = new System.Windows.Forms.Button();
|
||||
this.sizecombo = new System.Windows.Forms.ComboBox();
|
||||
this.label1 = new System.Windows.Forms.Label();
|
||||
this.usedtexturesonly = new System.Windows.Forms.CheckBox();
|
||||
this.usedtexturesfirst = new System.Windows.Forms.CheckBox();
|
||||
this.longtexturenames = new System.Windows.Forms.CheckBox();
|
||||
this.filterheightlabel = new System.Windows.Forms.Label();
|
||||
this.filterHeight = new CodeImp.DoomBuilder.Controls.ButtonsNumericTextbox();
|
||||
this.filterwidthlabel = new System.Windows.Forms.Label();
|
||||
this.filterWidth = new CodeImp.DoomBuilder.Controls.ButtonsNumericTextbox();
|
||||
this.texturetypecombo = new System.Windows.Forms.ComboBox();
|
||||
this.objectname = new System.Windows.Forms.TextBox();
|
||||
this.refreshtimer = new System.Windows.Forms.Timer(this.components);
|
||||
this.list = new CodeImp.DoomBuilder.Controls.ImageSelectorPanel();
|
||||
this.filterHeight = new CodeImp.DoomBuilder.Controls.ButtonsNumericTextbox();
|
||||
this.filterWidth = new CodeImp.DoomBuilder.Controls.ButtonsNumericTextbox();
|
||||
this.splitter.Panel1.SuspendLayout();
|
||||
this.splitter.Panel2.SuspendLayout();
|
||||
this.splitter.SuspendLayout();
|
||||
|
@ -87,7 +87,7 @@ namespace CodeImp.DoomBuilder.Controls
|
|||
this.splitter.Panel2.Controls.Add(this.objectclear);
|
||||
this.splitter.Panel2.Controls.Add(this.sizecombo);
|
||||
this.splitter.Panel2.Controls.Add(this.label1);
|
||||
this.splitter.Panel2.Controls.Add(this.usedtexturesonly);
|
||||
this.splitter.Panel2.Controls.Add(this.usedtexturesfirst);
|
||||
this.splitter.Panel2.Controls.Add(this.longtexturenames);
|
||||
this.splitter.Panel2.Controls.Add(this.filterheightlabel);
|
||||
this.splitter.Panel2.Controls.Add(this.filterHeight);
|
||||
|
@ -102,6 +102,23 @@ namespace CodeImp.DoomBuilder.Controls
|
|||
this.splitter.TabIndex = 0;
|
||||
this.splitter.TabStop = false;
|
||||
//
|
||||
// list
|
||||
//
|
||||
this.list.AutoScroll = true;
|
||||
this.list.BackColor = System.Drawing.Color.White;
|
||||
this.list.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle;
|
||||
this.list.Dock = System.Windows.Forms.DockStyle.Fill;
|
||||
this.list.HideSelection = false;
|
||||
this.list.ImageSize = 128;
|
||||
this.list.Location = new System.Drawing.Point(0, 0);
|
||||
this.list.MultiSelect = false;
|
||||
this.list.Name = "list";
|
||||
this.list.Size = new System.Drawing.Size(840, 284);
|
||||
this.list.TabIndex = 1;
|
||||
this.list.Title = "Default group";
|
||||
this.list.ItemDoubleClicked += new CodeImp.DoomBuilder.Controls.ImageSelectorPanel.ItemSelectedEventHandler(this.list_ItemDoubleClicked);
|
||||
this.list.KeyPress += new System.Windows.Forms.KeyPressEventHandler(this.list_KeyPress);
|
||||
//
|
||||
// objectclear
|
||||
//
|
||||
this.objectclear.Image = global::CodeImp.DoomBuilder.Properties.Resources.Close;
|
||||
|
@ -141,17 +158,17 @@ namespace CodeImp.DoomBuilder.Controls
|
|||
this.label1.TabIndex = 1;
|
||||
this.label1.Text = "Size:";
|
||||
//
|
||||
// usedtexturesonly
|
||||
// usedtexturesfirst
|
||||
//
|
||||
this.usedtexturesonly.AutoSize = true;
|
||||
this.usedtexturesonly.Location = new System.Drawing.Point(365, 8);
|
||||
this.usedtexturesonly.Name = "usedtexturesonly";
|
||||
this.usedtexturesonly.Size = new System.Drawing.Size(113, 17);
|
||||
this.usedtexturesonly.TabIndex = 0;
|
||||
this.usedtexturesonly.TabStop = false;
|
||||
this.usedtexturesonly.Text = "Used textures only";
|
||||
this.usedtexturesonly.UseVisualStyleBackColor = true;
|
||||
this.usedtexturesonly.CheckedChanged += new System.EventHandler(this.usedtexturesonly_CheckedChanged);
|
||||
this.usedtexturesfirst.AutoSize = true;
|
||||
this.usedtexturesfirst.Location = new System.Drawing.Point(365, 8);
|
||||
this.usedtexturesfirst.Name = "usedtexturesfirst";
|
||||
this.usedtexturesfirst.Size = new System.Drawing.Size(139, 17);
|
||||
this.usedtexturesfirst.TabIndex = 0;
|
||||
this.usedtexturesfirst.TabStop = false;
|
||||
this.usedtexturesfirst.Text = "Used textures at the top";
|
||||
this.usedtexturesfirst.UseVisualStyleBackColor = true;
|
||||
this.usedtexturesfirst.CheckedChanged += new System.EventHandler(this.usedtexturesfirst_CheckedChanged);
|
||||
//
|
||||
// longtexturenames
|
||||
//
|
||||
|
@ -174,6 +191,26 @@ namespace CodeImp.DoomBuilder.Controls
|
|||
this.filterheightlabel.TabIndex = 0;
|
||||
this.filterheightlabel.Text = "Height:";
|
||||
//
|
||||
// filterHeight
|
||||
//
|
||||
this.filterHeight.AllowDecimal = false;
|
||||
this.filterHeight.AllowExpressions = false;
|
||||
this.filterHeight.AllowNegative = false;
|
||||
this.filterHeight.AllowRelative = false;
|
||||
this.filterHeight.ButtonStep = 1;
|
||||
this.filterHeight.ButtonStepBig = 10F;
|
||||
this.filterHeight.ButtonStepFloat = 1F;
|
||||
this.filterHeight.ButtonStepSmall = 0.1F;
|
||||
this.filterHeight.ButtonStepsUseModifierKeys = false;
|
||||
this.filterHeight.ButtonStepsWrapAround = false;
|
||||
this.filterHeight.Location = new System.Drawing.Point(301, 30);
|
||||
this.filterHeight.Name = "filterHeight";
|
||||
this.filterHeight.Size = new System.Drawing.Size(54, 24);
|
||||
this.filterHeight.StepValues = null;
|
||||
this.filterHeight.TabIndex = 0;
|
||||
this.filterHeight.TabStop = false;
|
||||
this.filterHeight.WhenTextChanged += new System.EventHandler(this.filterSize_WhenTextChanged);
|
||||
//
|
||||
// filterwidthlabel
|
||||
//
|
||||
this.filterwidthlabel.AutoSize = true;
|
||||
|
@ -183,6 +220,26 @@ namespace CodeImp.DoomBuilder.Controls
|
|||
this.filterwidthlabel.TabIndex = 0;
|
||||
this.filterwidthlabel.Text = "Width:";
|
||||
//
|
||||
// filterWidth
|
||||
//
|
||||
this.filterWidth.AllowDecimal = false;
|
||||
this.filterWidth.AllowExpressions = false;
|
||||
this.filterWidth.AllowNegative = false;
|
||||
this.filterWidth.AllowRelative = false;
|
||||
this.filterWidth.ButtonStep = 1;
|
||||
this.filterWidth.ButtonStepBig = 10F;
|
||||
this.filterWidth.ButtonStepFloat = 1F;
|
||||
this.filterWidth.ButtonStepSmall = 0.1F;
|
||||
this.filterWidth.ButtonStepsUseModifierKeys = false;
|
||||
this.filterWidth.ButtonStepsWrapAround = false;
|
||||
this.filterWidth.Location = new System.Drawing.Point(199, 30);
|
||||
this.filterWidth.Name = "filterWidth";
|
||||
this.filterWidth.Size = new System.Drawing.Size(54, 24);
|
||||
this.filterWidth.StepValues = null;
|
||||
this.filterWidth.TabIndex = 0;
|
||||
this.filterWidth.TabStop = false;
|
||||
this.filterWidth.WhenTextChanged += new System.EventHandler(this.filterSize_WhenTextChanged);
|
||||
//
|
||||
// texturetypecombo
|
||||
//
|
||||
this.texturetypecombo.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
|
||||
|
@ -218,63 +275,6 @@ namespace CodeImp.DoomBuilder.Controls
|
|||
this.refreshtimer.Interval = 500;
|
||||
this.refreshtimer.Tick += new System.EventHandler(this.refreshtimer_Tick);
|
||||
//
|
||||
// list
|
||||
//
|
||||
this.list.AutoScroll = true;
|
||||
this.list.BackColor = System.Drawing.Color.White;
|
||||
this.list.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle;
|
||||
this.list.Dock = System.Windows.Forms.DockStyle.Fill;
|
||||
this.list.HideSelection = false;
|
||||
this.list.ImageSize = 128;
|
||||
this.list.Location = new System.Drawing.Point(0, 0);
|
||||
this.list.MultiSelect = false;
|
||||
this.list.Name = "list";
|
||||
this.list.Size = new System.Drawing.Size(840, 284);
|
||||
this.list.TabIndex = 1;
|
||||
this.list.Title = "Default group";
|
||||
this.list.ItemDoubleClicked += new CodeImp.DoomBuilder.Controls.ImageSelectorPanel.ItemSelectedEventHandler(this.list_ItemDoubleClicked);
|
||||
this.list.KeyPress += new System.Windows.Forms.KeyPressEventHandler(this.list_KeyPress);
|
||||
//
|
||||
// filterHeight
|
||||
//
|
||||
this.filterHeight.AllowDecimal = false;
|
||||
this.filterHeight.AllowExpressions = false;
|
||||
this.filterHeight.AllowNegative = false;
|
||||
this.filterHeight.AllowRelative = false;
|
||||
this.filterHeight.ButtonStep = 1;
|
||||
this.filterHeight.ButtonStepBig = 10F;
|
||||
this.filterHeight.ButtonStepFloat = 1F;
|
||||
this.filterHeight.ButtonStepSmall = 0.1F;
|
||||
this.filterHeight.ButtonStepsUseModifierKeys = false;
|
||||
this.filterHeight.ButtonStepsWrapAround = false;
|
||||
this.filterHeight.Location = new System.Drawing.Point(301, 30);
|
||||
this.filterHeight.Name = "filterHeight";
|
||||
this.filterHeight.Size = new System.Drawing.Size(54, 24);
|
||||
this.filterHeight.StepValues = null;
|
||||
this.filterHeight.TabIndex = 0;
|
||||
this.filterHeight.TabStop = false;
|
||||
this.filterHeight.WhenTextChanged += new System.EventHandler(this.filterSize_WhenTextChanged);
|
||||
//
|
||||
// filterWidth
|
||||
//
|
||||
this.filterWidth.AllowDecimal = false;
|
||||
this.filterWidth.AllowExpressions = false;
|
||||
this.filterWidth.AllowNegative = false;
|
||||
this.filterWidth.AllowRelative = false;
|
||||
this.filterWidth.ButtonStep = 1;
|
||||
this.filterWidth.ButtonStepBig = 10F;
|
||||
this.filterWidth.ButtonStepFloat = 1F;
|
||||
this.filterWidth.ButtonStepSmall = 0.1F;
|
||||
this.filterWidth.ButtonStepsUseModifierKeys = false;
|
||||
this.filterWidth.ButtonStepsWrapAround = false;
|
||||
this.filterWidth.Location = new System.Drawing.Point(199, 30);
|
||||
this.filterWidth.Name = "filterWidth";
|
||||
this.filterWidth.Size = new System.Drawing.Size(54, 24);
|
||||
this.filterWidth.StepValues = null;
|
||||
this.filterWidth.TabIndex = 0;
|
||||
this.filterWidth.TabStop = false;
|
||||
this.filterWidth.WhenTextChanged += new System.EventHandler(this.filterSize_WhenTextChanged);
|
||||
//
|
||||
// ImageBrowserControl
|
||||
//
|
||||
this.AutoScaleDimensions = new System.Drawing.SizeF(96F, 96F);
|
||||
|
@ -304,7 +304,7 @@ namespace CodeImp.DoomBuilder.Controls
|
|||
private CodeImp.DoomBuilder.Controls.ButtonsNumericTextbox filterHeight;
|
||||
private System.Windows.Forms.Label filterwidthlabel;
|
||||
private System.Windows.Forms.CheckBox longtexturenames;
|
||||
private System.Windows.Forms.CheckBox usedtexturesonly;
|
||||
private System.Windows.Forms.CheckBox usedtexturesfirst;
|
||||
private System.Windows.Forms.ComboBox sizecombo;
|
||||
private System.Windows.Forms.Label label1;
|
||||
private System.Windows.Forms.Button objectclear;
|
||||
|
|
|
@ -57,9 +57,9 @@ namespace CodeImp.DoomBuilder.Controls
|
|||
private bool blockupdate; //mxd
|
||||
|
||||
//mxd. All items
|
||||
private Dictionary<string, List<ImageBrowserItem>> items; // <group, <items>>
|
||||
private List<string> groups;
|
||||
private string selectedgroup;
|
||||
private List<ImageBrowserItem> items;
|
||||
private string usedfirstgroup;
|
||||
private string availgroup;
|
||||
|
||||
// Filtered items
|
||||
private List<ImageBrowserItem> visibleitems;
|
||||
|
@ -75,7 +75,14 @@ namespace CodeImp.DoomBuilder.Controls
|
|||
public bool HideInputBox { get { return splitter.Panel2Collapsed; } set { splitter.Panel2Collapsed = value; } }
|
||||
public List<ImageBrowserItem> SelectedItems { get { return list.SelectedItems; } } //mxd
|
||||
public ImageBrowserItem SelectedItem { get { return (list.SelectedItems.Count > 0 ? list.SelectedItems[0] : null); } }
|
||||
public string SelectedGroup { get { return selectedgroup; } } //mxd
|
||||
public string ElementName //mxd
|
||||
{
|
||||
set
|
||||
{
|
||||
usedfirstgroup = "Available " + value + " (used first):";
|
||||
availgroup = "Available " + value + ":";
|
||||
}
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
|
@ -86,8 +93,7 @@ namespace CodeImp.DoomBuilder.Controls
|
|||
{
|
||||
// Initialize
|
||||
InitializeComponent();
|
||||
items = new Dictionary<string, List<ImageBrowserItem>>();
|
||||
groups = new List<string>();
|
||||
items = new List<ImageBrowserItem>();
|
||||
|
||||
//mxd
|
||||
StepsList sizes = new StepsList { 4, 8, 16, 32, 48, 64, 96, 128, 196, 256, 512, 1024 };
|
||||
|
@ -109,18 +115,10 @@ namespace CodeImp.DoomBuilder.Controls
|
|||
{
|
||||
blockupdate = true;
|
||||
|
||||
//TODO: group handling doesn't couple well with usedtexturesonly checkbox...
|
||||
this.browseflats = browseflats;
|
||||
uselongtexturenames = General.Map.Options.UseLongTextureNames;
|
||||
selectedgroup = General.Settings.ReadSetting(settingpath + ".selectedgroup", string.Empty);
|
||||
|
||||
if(string.IsNullOrEmpty(selectedgroup) || (groups.Count > 0 && !groups.Contains(selectedgroup)))
|
||||
{
|
||||
selectedgroup = groups[0];
|
||||
}
|
||||
|
||||
texturetype = General.Settings.ReadSetting(settingpath + ".texturetype", 0);
|
||||
usedtexturesonly.Checked = (groups.IndexOf(selectedgroup) == 1);
|
||||
usedtexturesfirst.Checked = General.Settings.ReadSetting(settingpath + ".showusedtexturesfirst", false);
|
||||
|
||||
int imagesize = General.Settings.ReadSetting(settingpath + ".imagesize", 128);
|
||||
sizecombo.Text = (imagesize == 0 ? sizecombo.Items[0].ToString() : imagesize.ToString());
|
||||
|
@ -173,7 +171,7 @@ namespace CodeImp.DoomBuilder.Controls
|
|||
//mxd. Save settings
|
||||
public virtual void OnClose(string settingpath)
|
||||
{
|
||||
General.Settings.WriteSetting(settingpath + ".selectedgroup", selectedgroup);
|
||||
General.Settings.WriteSetting(settingpath + ".showusedtexturesfirst", usedtexturesfirst.Checked);
|
||||
General.Settings.WriteSetting(settingpath + ".imagesize", list.ImageSize);
|
||||
if(General.Map.Config.UseLongTextureNames) General.Map.Options.UseLongTextureNames = uselongtexturenames;
|
||||
|
||||
|
@ -240,10 +238,10 @@ namespace CodeImp.DoomBuilder.Controls
|
|||
{
|
||||
e.SuppressKeyPress = true;
|
||||
}
|
||||
// Toggle groups
|
||||
// Toggle used items sorting
|
||||
else if(e.KeyData == Keys.Tab)
|
||||
{
|
||||
ShowNextGroup();
|
||||
usedtexturesfirst.Checked = !usedtexturesfirst.Checked;
|
||||
e.SuppressKeyPress = true;
|
||||
}
|
||||
}
|
||||
|
@ -264,7 +262,7 @@ namespace CodeImp.DoomBuilder.Controls
|
|||
//mxd
|
||||
protected override bool ProcessTabKey(bool forward)
|
||||
{
|
||||
usedtexturesonly.Checked = !usedtexturesonly.Checked;
|
||||
usedtexturesfirst.Checked = !usedtexturesfirst.Checked;
|
||||
return false;
|
||||
}
|
||||
|
||||
|
@ -348,17 +346,25 @@ namespace CodeImp.DoomBuilder.Controls
|
|||
//mxd
|
||||
private void longtexturenames_CheckedChanged(object sender, EventArgs e)
|
||||
{
|
||||
if(blockupdate) return;
|
||||
uselongtexturenames = longtexturenames.Checked;
|
||||
objectname.CharacterCasing = (uselongtexturenames ? CharacterCasing.Normal : CharacterCasing.Upper);
|
||||
RefillList(false);
|
||||
if(!blockupdate)
|
||||
{
|
||||
uselongtexturenames = longtexturenames.Checked;
|
||||
objectname.CharacterCasing = (uselongtexturenames ? CharacterCasing.Normal : CharacterCasing.Upper);
|
||||
|
||||
foreach(var item in items) item.ShowFullName = uselongtexturenames;
|
||||
list.Refresh();
|
||||
list.Focus();
|
||||
}
|
||||
}
|
||||
|
||||
//mxd
|
||||
private void usedtexturesonly_CheckedChanged(object sender, EventArgs e)
|
||||
private void usedtexturesfirst_CheckedChanged(object sender, EventArgs e)
|
||||
{
|
||||
if(blockupdate) return;
|
||||
ShowNextGroup();
|
||||
if(!blockupdate)
|
||||
{
|
||||
RefillList(false);
|
||||
list.Focus();
|
||||
}
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
@ -366,46 +372,24 @@ namespace CodeImp.DoomBuilder.Controls
|
|||
#region ================== Methods
|
||||
|
||||
// This selects an item by longname (mxd - changed from name to longname)
|
||||
public void SelectItem(long longname, string preferredgroup)
|
||||
public void SelectItem(long longname)
|
||||
{
|
||||
// Not when selecting is prevented
|
||||
if(preventselection) return;
|
||||
|
||||
// Assemble group order
|
||||
List<string> searchorder;
|
||||
if(string.IsNullOrEmpty(preferredgroup) || !groups.Contains(preferredgroup))
|
||||
{
|
||||
searchorder = new List<string>(groups);
|
||||
}
|
||||
else
|
||||
{
|
||||
searchorder = new List<string> { preferredgroup };
|
||||
List<string> othergroups = new List<string>(groups);
|
||||
othergroups.Remove(preferredgroup);
|
||||
searchorder.AddRange(othergroups);
|
||||
}
|
||||
|
||||
// Search for item
|
||||
ImageBrowserItem target = null; //mxd
|
||||
string targetgroup = string.Empty;
|
||||
foreach(string group in searchorder)
|
||||
foreach(ImageBrowserItem item in items)
|
||||
{
|
||||
foreach(ImageBrowserItem item in items[group])
|
||||
if(item.Icon.LongName == longname) //mxd
|
||||
{
|
||||
if(item.Icon.LongName == longname) //mxd
|
||||
{
|
||||
target = item;
|
||||
targetgroup = group;
|
||||
break;
|
||||
}
|
||||
target = item;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if(target != null)
|
||||
{
|
||||
// Group switching required?
|
||||
SelectGroup(targetgroup);
|
||||
|
||||
// Select the item
|
||||
list.SetSelectedItem(target);
|
||||
}
|
||||
|
@ -421,37 +405,6 @@ namespace CodeImp.DoomBuilder.Controls
|
|||
if(list.Items.Count > 0) list.SetSelectedItem(list.Items[0]);
|
||||
}
|
||||
|
||||
// This adds a group
|
||||
public void AddGroup(string name)
|
||||
{
|
||||
if(groups.Contains(name)) return;
|
||||
groups.Add(name);
|
||||
items.Add(name, new List<ImageBrowserItem>());
|
||||
}
|
||||
|
||||
// This selects a group
|
||||
public void SelectGroup(string groupname)
|
||||
{
|
||||
if(string.IsNullOrEmpty(groupname) || groupname == selectedgroup || !groups.Contains(groupname)) return;
|
||||
selectedgroup = groupname;
|
||||
list.SetItems(items[groupname]);
|
||||
|
||||
blockupdate = true;
|
||||
usedtexturesonly.Checked = (groups.IndexOf(selectedgroup) == 1);
|
||||
blockupdate = false;
|
||||
|
||||
RefillList(false);
|
||||
}
|
||||
|
||||
// This toggles between groups
|
||||
private void ShowNextGroup()
|
||||
{
|
||||
if(groups.Count < 2) return;
|
||||
int nextgroupindex = groups.IndexOf(selectedgroup) + 1;
|
||||
if(nextgroupindex >= items.Count) nextgroupindex = 0;
|
||||
SelectGroup(groups[nextgroupindex]);
|
||||
}
|
||||
|
||||
// This begins adding items
|
||||
public void BeginAdding(bool keepselectedindex)
|
||||
{
|
||||
|
@ -462,10 +415,6 @@ namespace CodeImp.DoomBuilder.Controls
|
|||
|
||||
// Clean list
|
||||
items.Clear();
|
||||
|
||||
// Re-add groups...
|
||||
foreach(string s in groups)
|
||||
items.Add(s, new List<ImageBrowserItem>());
|
||||
|
||||
// Stop updating
|
||||
refreshtimer.Enabled = false;
|
||||
|
@ -482,19 +431,12 @@ namespace CodeImp.DoomBuilder.Controls
|
|||
}
|
||||
|
||||
//mxd. This adds a category item
|
||||
public void AddFolder(ImageBrowserItemType itemtype, string group, string categoryname)
|
||||
public void AddFolder(ImageBrowserItemType itemtype, string categoryname)
|
||||
{
|
||||
if(string.IsNullOrEmpty(group)) group = ImageSelectorPanel.DEFAULT_GROUP;
|
||||
if(!items.ContainsKey(group))
|
||||
{
|
||||
items.Add(group, new List<ImageBrowserItem>());
|
||||
groups.Add(group);
|
||||
}
|
||||
|
||||
switch(itemtype)
|
||||
{
|
||||
case ImageBrowserItemType.FOLDER: case ImageBrowserItemType.FOLDER_UP:
|
||||
items[group].Add(new ImageBrowserCategoryItem(itemtype, categoryname));
|
||||
items.Add(new ImageBrowserCategoryItem(itemtype, categoryname));
|
||||
break;
|
||||
|
||||
default: throw new Exception("Unsupported ImageBrowserItemType");
|
||||
|
@ -502,35 +444,21 @@ namespace CodeImp.DoomBuilder.Controls
|
|||
}
|
||||
|
||||
// This adds an item
|
||||
public void AddItem(ImageData image, string group, string tooltip)
|
||||
public void AddItem(ImageData image, string tooltip)
|
||||
{
|
||||
if(string.IsNullOrEmpty(group)) group = ImageSelectorPanel.DEFAULT_GROUP;
|
||||
if(!items.ContainsKey(group))
|
||||
{
|
||||
items.Add(group, new List<ImageBrowserItem>());
|
||||
groups.Add(group);
|
||||
}
|
||||
items[group].Add(new ImageBrowserItem(image, tooltip, uselongtexturenames));
|
||||
items.Add(new ImageBrowserItem(image, tooltip, uselongtexturenames));
|
||||
}
|
||||
|
||||
public void AddItem(ImageData image, string group)
|
||||
public void AddItem(ImageData image)
|
||||
{
|
||||
AddItem(image, group, string.Empty);
|
||||
items.Add(new ImageBrowserItem(image, string.Empty, uselongtexturenames));
|
||||
}
|
||||
|
||||
// This fills the list based on the objectname filter
|
||||
private void RefillList(bool selectfirst)
|
||||
{
|
||||
if(groups.Count == 0) return;
|
||||
visibleitems = new List<ImageBrowserItem>();
|
||||
|
||||
//mxd. Check group name...
|
||||
if(string.IsNullOrEmpty(selectedgroup))
|
||||
{
|
||||
if(groups.Count == 0) throw new Exception("No groups defined...");
|
||||
selectedgroup = groups[0];
|
||||
}
|
||||
|
||||
//mxd. Store info about currently selected item
|
||||
string selectedname = string.Empty;
|
||||
if(!selectfirst && keepselected == -1 && list.SelectedItems.Count > 0)
|
||||
|
@ -540,7 +468,10 @@ namespace CodeImp.DoomBuilder.Controls
|
|||
|
||||
// Clear list first
|
||||
list.Clear();
|
||||
list.Title = selectedgroup;
|
||||
list.Title = (usedtexturesfirst.Checked ? usedfirstgroup : availgroup);
|
||||
|
||||
//mxd. Anything to do?
|
||||
if(items.Count == 0) return;
|
||||
|
||||
//mxd. Filtering by texture size?
|
||||
int w = filterWidth.GetResult(-1);
|
||||
|
@ -548,19 +479,19 @@ namespace CodeImp.DoomBuilder.Controls
|
|||
|
||||
// Go for all items
|
||||
ImageBrowserItem previtem = null; //mxd
|
||||
for(int i = items[selectedgroup].Count - 1; i > -1; i--)
|
||||
for(int i = items.Count - 1; i > -1; i--)
|
||||
{
|
||||
// Add item if valid
|
||||
items[selectedgroup][i].ShowFullName = uselongtexturenames; //mxd
|
||||
if(ValidateItem(items[selectedgroup][i], previtem) && ValidateItemSize(items[selectedgroup][i], w, h))
|
||||
items[i].ShowFullName = uselongtexturenames; //mxd
|
||||
if(ValidateItem(items[i], previtem) && ValidateItemSize(items[i], w, h))
|
||||
{
|
||||
visibleitems.Add(items[selectedgroup][i]);
|
||||
previtem = items[selectedgroup][i];
|
||||
visibleitems.Add(items[i]);
|
||||
previtem = items[i];
|
||||
}
|
||||
}
|
||||
|
||||
// Fill list
|
||||
visibleitems.Sort();
|
||||
visibleitems.Sort(SortItems);
|
||||
list.SetItems(visibleitems);
|
||||
|
||||
// Make selection?
|
||||
|
@ -648,6 +579,21 @@ namespace CodeImp.DoomBuilder.Controls
|
|||
if(h > 0 && i.Icon.Height != h) return false;
|
||||
return true;
|
||||
}
|
||||
|
||||
//mxd
|
||||
private int SortItems(ImageBrowserItem item1, ImageBrowserItem item2)
|
||||
{
|
||||
if(usedtexturesfirst.Checked
|
||||
&& item1.ItemType == ImageBrowserItemType.IMAGE
|
||||
&& item2.ItemType == ImageBrowserItemType.IMAGE
|
||||
&& item1.Icon.UsedInMap != item2.Icon.UsedInMap)
|
||||
{
|
||||
// Push used items to the top
|
||||
return (item1.Icon.UsedInMap ? -1 : 1);
|
||||
}
|
||||
|
||||
return item1.CompareTo(item2);
|
||||
}
|
||||
|
||||
//mxd. This sends the focus to the textures list
|
||||
public void FocusList()
|
||||
|
|
|
@ -36,7 +36,7 @@ namespace CodeImp.DoomBuilder.Controls
|
|||
|
||||
public ImageData Icon { get { return icon; } }
|
||||
public ImageBrowserItemType ItemType { get { return itemtype; } }
|
||||
public virtual bool IsPreviewLoaded { get { return imageloaded; } }
|
||||
public virtual bool IsPreviewLoaded { get { return icon.IsPreviewLoaded; } }
|
||||
public bool ShowFullName { set { showfullname = value; } }
|
||||
public virtual string TextureName { get { return (showfullname ? icon.Name : icon.ShortName); } }
|
||||
public string ToolTip { get { return tooltip; } }
|
||||
|
@ -71,7 +71,7 @@ namespace CodeImp.DoomBuilder.Controls
|
|||
return false;
|
||||
}
|
||||
|
||||
internal void Draw(Graphics g, Image bmp, int x, int y, int w, int h, bool selected)
|
||||
internal void Draw(Graphics g, Image bmp, int x, int y, int w, int h, bool selected, bool used)
|
||||
{
|
||||
if(bmp == null) return;
|
||||
|
||||
|
@ -89,37 +89,41 @@ namespace CodeImp.DoomBuilder.Controls
|
|||
ih = h;
|
||||
}
|
||||
|
||||
int ix = (iw < w ? x + (w - iw) / 2 : x + 1);
|
||||
int iy = (ih < h ? y + (h - ih) / 2 : y + 1);
|
||||
int ix = (iw < w ? x + (w - iw) / 2 : x);
|
||||
int iy = (ih < h ? y + (h - ih) / 2 : y);
|
||||
|
||||
// Pick colors and brushes
|
||||
Brush bgbrush, fgbrush, selectedbgbrush, selectionbrush;
|
||||
Brush bgbrush, fgbrush, selectedbgbrush, selectionbrush, selectiontextbrush;
|
||||
Color bgcolor;
|
||||
Pen selection;
|
||||
Pen selection, frame;
|
||||
if(General.Settings.BlackBrowsers)
|
||||
{
|
||||
bgcolor = Color.Black;
|
||||
bgbrush = Brushes.Black;
|
||||
fgbrush = Brushes.White;
|
||||
fgbrush = (used ? Brushes.Orange : Brushes.White);
|
||||
selectedbgbrush = Brushes.Gray;
|
||||
frame = (used ? Pens.Orange : Pens.Gray);
|
||||
selection = Pens.Red;
|
||||
selectionbrush = Brushes.Red;
|
||||
selectiontextbrush = Brushes.White;
|
||||
}
|
||||
else
|
||||
{
|
||||
bgcolor = SystemColors.Window;
|
||||
bgbrush = SystemBrushes.Window;
|
||||
fgbrush = SystemBrushes.ControlText;
|
||||
selectedbgbrush = SystemBrushes.ActiveCaption;
|
||||
fgbrush = (used ? SystemBrushes.HotTrack : SystemBrushes.ControlText);
|
||||
selectedbgbrush = SystemBrushes.Highlight;
|
||||
frame = (used ? SystemPens.HotTrack : SystemPens.ActiveBorder);
|
||||
selection = SystemPens.HotTrack;
|
||||
selectionbrush = SystemBrushes.HotTrack;
|
||||
selectiontextbrush = SystemBrushes.Window;
|
||||
}
|
||||
|
||||
// Item bg
|
||||
g.FillRectangle(bgbrush, x - 3, y - 3, w + 6, h + 10 + SystemFonts.MessageBoxFont.Height);
|
||||
g.FillRectangle(bgbrush, x - 2, y - 2, w + 3, h + 8 + SystemFonts.MessageBoxFont.Height);
|
||||
|
||||
// Selected image bg
|
||||
if(selected) g.FillRectangle(selectedbgbrush, x - 1, y - 1, w + 2, h + 2);
|
||||
if(selected) g.FillRectangle(selectedbgbrush, x - 2, y - 2, w + 4, h + 2 + SystemFonts.MessageBoxFont.Height);
|
||||
|
||||
// Image
|
||||
g.DrawImage(bmp, ix, iy, iw, ih);
|
||||
|
@ -129,14 +133,17 @@ namespace CodeImp.DoomBuilder.Controls
|
|||
{
|
||||
g.DrawRectangle(selection, x - 1, y - 1, w + 1, h + 1);
|
||||
g.DrawRectangle(selection, x - 2, y - 2, w + 3, h + 3);
|
||||
|
||||
// Image name bg
|
||||
g.FillRectangle(selectionbrush, x - 2, y + h + 2, w + 4, SystemFonts.MessageBoxFont.Height);
|
||||
}
|
||||
else
|
||||
{
|
||||
g.DrawRectangle(Pens.Gray, x - 2, y - 2, w + 3, h + 3);
|
||||
g.DrawRectangle(frame, x - 1, y - 1, w + 1, h + 1);
|
||||
}
|
||||
|
||||
// Image name
|
||||
g.DrawString(TextureName, SystemFonts.MessageBoxFont, (selected ? selectionbrush : fgbrush), x - 2, y + h + 3);
|
||||
g.DrawString(TextureName, SystemFonts.MessageBoxFont, (selected ? selectiontextbrush : fgbrush), x - 2, y + h + 1);
|
||||
|
||||
// Image size
|
||||
if(General.Settings.ShowTextureSizes && icon.IsPreviewLoaded && itemtype == ImageBrowserItemType.IMAGE)
|
||||
|
@ -144,16 +151,23 @@ namespace CodeImp.DoomBuilder.Controls
|
|||
string imagesize = Math.Abs(icon.ScaledWidth) + "x" + Math.Abs(icon.ScaledHeight);
|
||||
SizeF textsize = g.MeasureString(imagesize, SystemFonts.MessageBoxFont);
|
||||
textsize.Width += 2;
|
||||
textsize.Height -= 2;
|
||||
textsize.Height -= 3;
|
||||
|
||||
// Draw bg
|
||||
using(Brush bg = new SolidBrush(Color.FromArgb(192, bgcolor)))
|
||||
if(selected)
|
||||
{
|
||||
g.FillRectangle(bg, x, y, textsize.Width, textsize.Height);
|
||||
g.FillRectangle(selectionbrush, x, y, textsize.Width, textsize.Height);
|
||||
}
|
||||
else
|
||||
{
|
||||
using(Brush bg = new SolidBrush(Color.FromArgb(192, bgcolor)))
|
||||
{
|
||||
g.FillRectangle(bg, x, y, textsize.Width, textsize.Height);
|
||||
}
|
||||
}
|
||||
|
||||
// Draw text
|
||||
g.DrawString(imagesize, SystemFonts.MessageBoxFont, (selected ? selectionbrush : fgbrush), x, y - 1);
|
||||
g.DrawString(imagesize, SystemFonts.MessageBoxFont, (selected ? selectiontextbrush : fgbrush), x, y - 1);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -2,7 +2,6 @@
|
|||
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.ComponentModel;
|
||||
using System.Drawing;
|
||||
using System.Drawing.Drawing2D;
|
||||
using System.Drawing.Imaging;
|
||||
|
@ -18,8 +17,6 @@ namespace CodeImp.DoomBuilder.Controls
|
|||
{
|
||||
#region ================== Constants
|
||||
|
||||
internal const string DEFAULT_GROUP = "[DEFAULT_GROUP]";
|
||||
|
||||
#endregion
|
||||
|
||||
#region ================== Variables
|
||||
|
@ -136,7 +133,7 @@ namespace CodeImp.DoomBuilder.Controls
|
|||
selection = new List<ImageBrowserItem>();
|
||||
imagesize = 128;
|
||||
rectangles = new List<Rectangle>();
|
||||
title = "Default group";
|
||||
title = "All images:";
|
||||
|
||||
Controls.Add(scrollbar);
|
||||
}
|
||||
|
@ -151,16 +148,13 @@ namespace CodeImp.DoomBuilder.Controls
|
|||
|
||||
#region ================== Add/Remove/Get Textures
|
||||
|
||||
//mxd
|
||||
//mxd. Clears the list without redrawing it
|
||||
public void Clear()
|
||||
{
|
||||
selection.Clear();
|
||||
items.Clear();
|
||||
lastselecteditem = null;
|
||||
rectangles.Clear();
|
||||
|
||||
OnSelectionChanged(selection);
|
||||
Refresh();
|
||||
}
|
||||
|
||||
//mxd
|
||||
|
@ -470,12 +464,6 @@ namespace CodeImp.DoomBuilder.Controls
|
|||
return false;
|
||||
}
|
||||
|
||||
/*protected override void OnMouseEnter(EventArgs e)
|
||||
{
|
||||
Focus();
|
||||
base.OnMouseEnter(e);
|
||||
}*/
|
||||
|
||||
#endregion
|
||||
|
||||
#region ================== Updating Rectangles & Dimensions
|
||||
|
@ -492,7 +480,7 @@ namespace CodeImp.DoomBuilder.Controls
|
|||
private void UpdateRectangles()
|
||||
{
|
||||
int w = ClientRectangle.Width - scrollbar.Width;
|
||||
const int pad = 3;
|
||||
const int pad = 2;
|
||||
int font = 4 + SystemFonts.MessageBoxFont.Height;
|
||||
int cx = 0;
|
||||
int cy = titleheight;
|
||||
|
@ -566,12 +554,12 @@ namespace CodeImp.DoomBuilder.Controls
|
|||
if(rec.Top > y + height) break;
|
||||
|
||||
Image bmp = GetPreview(items[i], imagesize);
|
||||
items[i].Draw(g, bmp, rec.X, rec.Y - y, rec.Width, rec.Height, selection.Contains(items[i]));
|
||||
items[i].Draw(g, bmp, rec.X, rec.Y - y, rec.Width, rec.Height, selection.Contains(items[i]), items[i].Icon.UsedInMap);
|
||||
}
|
||||
}
|
||||
|
||||
// Draw title on top of items
|
||||
if(title != DEFAULT_GROUP)
|
||||
if(!string.IsNullOrEmpty(title))
|
||||
{
|
||||
// Draw group name bg
|
||||
bool blackbrowsers = (General.Settings != null && General.Settings.BlackBrowsers);
|
||||
|
@ -628,7 +616,7 @@ namespace CodeImp.DoomBuilder.Controls
|
|||
{
|
||||
g.PageUnit = GraphicsUnit.Pixel;
|
||||
g.InterpolationMode = InterpolationMode.NearestNeighbor;
|
||||
g.PixelOffsetMode = PixelOffsetMode.None;
|
||||
g.PixelOffsetMode = PixelOffsetMode.Half;
|
||||
|
||||
g.DrawImage(img, new Rectangle(0, 0, previewwidth, previewheight));
|
||||
}
|
||||
|
|
|
@ -40,8 +40,6 @@ namespace CodeImp.DoomBuilder.Windows
|
|||
|
||||
// Variables
|
||||
private string selectedname;
|
||||
private readonly string usedgroup;
|
||||
private readonly string availgroup;
|
||||
private TreeNode selectedset; //mxd
|
||||
private long selecttextureonfill; //mxd. Was string, which wasn't reliable whem dealing with long texture names
|
||||
private readonly bool browseflats; //mxd
|
||||
|
@ -65,15 +63,10 @@ namespace CodeImp.DoomBuilder.Windows
|
|||
// Initialize
|
||||
InitializeComponent();
|
||||
|
||||
//mxd. Set title
|
||||
//mxd. Set titles
|
||||
string imagetype = (browseflats ? "flats" : "textures");
|
||||
this.Text = "Browse " + imagetype;
|
||||
|
||||
// Make groups
|
||||
usedgroup = "Used " + imagetype + ":";
|
||||
availgroup = "Available " + imagetype + ":";
|
||||
browser.AddGroup(availgroup);
|
||||
browser.AddGroup(usedgroup);
|
||||
browser.ElementName = imagetype;
|
||||
|
||||
// Setup texture browser
|
||||
browser.ApplySettings("windows." + configname, browseflats);
|
||||
|
@ -506,40 +499,30 @@ namespace CodeImp.DoomBuilder.Windows
|
|||
if(selectedset.Parent != null)
|
||||
{
|
||||
TreeNodeData data = (TreeNodeData)selectedset.Parent.Tag;
|
||||
browser.AddFolder(ImageBrowserItemType.FOLDER_UP, availgroup, data.FolderName);
|
||||
browser.AddFolder(ImageBrowserItemType.FOLDER_UP, data.FolderName);
|
||||
}
|
||||
else
|
||||
{
|
||||
browser.AddFolder(ImageBrowserItemType.FOLDER_UP, availgroup, "All Texture Sets");
|
||||
browser.AddFolder(ImageBrowserItemType.FOLDER_UP, "All Texture Sets");
|
||||
}
|
||||
|
||||
//mxd. Add folders
|
||||
foreach(TreeNode child in selectedset.Nodes)
|
||||
{
|
||||
TreeNodeData data = (TreeNodeData)child.Tag;
|
||||
browser.AddFolder(ImageBrowserItemType.FOLDER, availgroup, data.FolderName);
|
||||
browser.AddFolder(ImageBrowserItemType.FOLDER, data.FolderName);
|
||||
}
|
||||
|
||||
// Add textures
|
||||
if(browseflats)
|
||||
{
|
||||
// Add all available flats
|
||||
foreach(ImageData img in set.Flats)
|
||||
browser.AddItem(img, availgroup);
|
||||
|
||||
// Add all used flats
|
||||
foreach(ImageData img in set.Flats)
|
||||
if(img.UsedInMap) browser.AddItem(img, usedgroup);
|
||||
foreach(ImageData img in set.Flats) browser.AddItem(img);
|
||||
}
|
||||
else
|
||||
{
|
||||
// Add all available textures and mark the images for temporary loading
|
||||
foreach(ImageData img in set.Textures)
|
||||
browser.AddItem(img, availgroup);
|
||||
|
||||
// Add all used textures and mark the images for permanent loading
|
||||
foreach(ImageData img in set.Textures)
|
||||
if(img.UsedInMap) browser.AddItem(img, usedgroup);
|
||||
// Add all available textures
|
||||
foreach(ImageData img in set.Textures) browser.AddItem(img);
|
||||
}
|
||||
|
||||
// Done adding
|
||||
|
@ -554,8 +537,7 @@ namespace CodeImp.DoomBuilder.Windows
|
|||
foreach(TreeNode node in tvTextureSets.Nodes)
|
||||
{
|
||||
TreeNodeData data = (TreeNodeData)node.Tag;
|
||||
browser.AddFolder(ImageBrowserItemType.FOLDER, availgroup, data.FolderName);
|
||||
browser.AddFolder(ImageBrowserItemType.FOLDER, usedgroup, data.FolderName);
|
||||
browser.AddFolder(ImageBrowserItemType.FOLDER, data.FolderName);
|
||||
}
|
||||
|
||||
// Done adding
|
||||
|
@ -577,7 +559,7 @@ namespace CodeImp.DoomBuilder.Windows
|
|||
// Select texture
|
||||
if(selecttextureonfill != 0)
|
||||
{
|
||||
browser.SelectItem(selecttextureonfill, browser.SelectedGroup);
|
||||
browser.SelectItem(selecttextureonfill);
|
||||
selecttextureonfill = 0;
|
||||
}
|
||||
|
||||
|
|
|
@ -171,7 +171,7 @@ namespace CodeImp.DoomBuilder.Windows
|
|||
{
|
||||
bool ismatch = set.IsMatch(img);
|
||||
if((ismatch && matchesbutton.Checked) || (!ismatch && nomatchesbutton.Checked))
|
||||
matcheslist.AddItem(img, null, tooltiptext);
|
||||
matcheslist.AddItem(img, tooltiptext);
|
||||
}
|
||||
|
||||
// If not already mixed, add flats as well
|
||||
|
@ -182,7 +182,7 @@ namespace CodeImp.DoomBuilder.Windows
|
|||
{
|
||||
bool ismatch = set.IsMatch(img);
|
||||
if((ismatch && matchesbutton.Checked) || (!ismatch && nomatchesbutton.Checked))
|
||||
matcheslist.AddItem(img, null, tooltiptext);
|
||||
matcheslist.AddItem(img, tooltiptext);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in a new issue