harden asset browser against invalid user input and allow R8

closes #3980
This commit is contained in:
Matthias Mailänder
2013-11-17 17:19:47 +01:00
parent f6bd53c15e
commit 6171ea7cf3
3 changed files with 18 additions and 8 deletions

View File

@@ -10,6 +10,7 @@
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Globalization;
using System.IO; using System.IO;
using System.Linq; using System.Linq;
using OpenRA.FileFormats; using OpenRA.FileFormats;
@@ -52,7 +53,6 @@ namespace OpenRA.Mods.RA.Widgets.Logic
spriteImage = panel.Get<ShpImageWidget>("SPRITE"); spriteImage = panel.Get<ShpImageWidget>("SPRITE");
filenameInput = panel.Get<TextFieldWidget>("FILENAME_INPUT"); filenameInput = panel.Get<TextFieldWidget>("FILENAME_INPUT");
filenameInput.Text = spriteImage.Image + ".shp";
filenameInput.OnEnterKey = () => LoadAsset(filenameInput.Text); filenameInput.OnEnterKey = () => LoadAsset(filenameInput.Text);
frameSlider = panel.Get<SliderWidget>("FRAME_SLIDER"); frameSlider = panel.Get<SliderWidget>("FRAME_SLIDER");
@@ -184,20 +184,28 @@ namespace OpenRA.Mods.RA.Widgets.Logic
void AddAsset(ScrollPanelWidget list, string filepath, ScrollItemWidget template) void AddAsset(ScrollPanelWidget list, string filepath, ScrollItemWidget template)
{ {
var sprite = Path.GetFileNameWithoutExtension(filepath); var r8 = filepath.EndsWith(".r8", true, CultureInfo.InvariantCulture);
var filename = Path.GetFileName(filepath);
var sprite = r8 ? filename : Path.GetFileNameWithoutExtension(filepath);
var item = ScrollItemWidget.Setup(template, var item = ScrollItemWidget.Setup(template,
() => spriteImage.Image == sprite, () => spriteImage.Image == sprite,
() => LoadAsset(sprite)); () => {filenameInput.Text = filename; LoadAsset(filename); });
item.Get<LabelWidget>("TITLE").GetText = () => filepath; item.Get<LabelWidget>("TITLE").GetText = () => filepath;
list.AddChild(item); list.AddChild(item);
} }
bool LoadAsset(string sprite) bool LoadAsset(string filename)
{ {
if (sprite == null) if (string.IsNullOrEmpty(filename))
return false; return false;
if (!FileSystem.Exists(filename))
return false;
var r8 = filename.EndsWith(".r8", true, CultureInfo.InvariantCulture);
var sprite = r8 ? filename : Path.GetFileNameWithoutExtension(filename);
spriteImage.Frame = 0; spriteImage.Frame = 0;
spriteImage.Image = sprite; spriteImage.Image = sprite;
frameSlider.MaximumValue = (float)spriteImage.FrameCount; frameSlider.MaximumValue = (float)spriteImage.FrameCount;
@@ -220,7 +228,7 @@ namespace OpenRA.Mods.RA.Widgets.Logic
///var sources = new[] { (IFolder)null }.Concat(FileSystem.MountedFolders); ///var sources = new[] { (IFolder)null }.Concat(FileSystem.MountedFolders);
var sources = FileSystem.MountedFolders; var sources = FileSystem.MountedFolders;
dropdown.ShowDropDown("LABEL_DROPDOWN_TEMPLATE", 250, sources, setupItem); dropdown.ShowDropDown("LABEL_DROPDOWN_TEMPLATE", 280, sources, setupItem);
return true; return true;
} }
@@ -239,7 +247,7 @@ namespace OpenRA.Mods.RA.Widgets.Logic
var files = assetSource.AllFileNames(); var files = assetSource.AllFileNames();
foreach (var file in files) foreach (var file in files)
{ {
if (file.EndsWith(".shp")) if (file.EndsWith(".shp", true, CultureInfo.InvariantCulture) || file.EndsWith(".r8", true, CultureInfo.InvariantCulture))
{ {
AddAsset(assetList, file, template); AddAsset(assetList, file, template);
availableShps.Add(file); availableShps.Add(file);

View File

@@ -42,6 +42,7 @@ Background@ASSETBROWSER_BG:
Y:280 Y:280
Width:140 Width:140
Height:25 Height:25
Text:mouse.r8
Button@LOAD_BUTTON: Button@LOAD_BUTTON:
X:40 X:40
Y:310 Y:310
@@ -69,7 +70,7 @@ Background@ASSETBROWSER_BG:
Y:4 Y:4
Width:246 Width:246
Height:246 Height:246
Image:DATA.R8 Image:mouse.r8
Palette:colorpicker Palette:colorpicker
Label@ACTIONS_TITLE: Label@ACTIONS_TITLE:
X:PARENT_RIGHT - 150 X:PARENT_RIGHT - 150

View File

@@ -42,6 +42,7 @@ Background@ASSETBROWSER_BG:
Y:280 Y:280
Width:140 Width:140
Height:25 Height:25
Text: mouse.shp
Button@LOAD_BUTTON: Button@LOAD_BUTTON:
X:40 X:40
Y:310 Y:310