2 using System.Collections.Generic;
3 using System.Collections.ObjectModel;
7 using System.Threading.Tasks;
9 using SiliconStudio.Paradox;
10 using SiliconStudio.Paradox.Games.Collections;
11 using SiliconStudio.Paradox.Graphics;
12 using SiliconStudio.Paradox.Games.ViewModel;
13 using SiliconStudio.Paradox.Graphics.Data;
14 using SiliconStudio.Paradox.Games.Serialization.Packages;
15 using SiliconStudio.Paradox.Games.IO;
29 public SortedSet<string>
Files =
new SortedSet<string>();
31 public void Setup(
string baseUrl)
33 VirtualFileSystem.ListFiles(baseUrl,
"*.*", VirtualSearchOption.AllDirectories)
36 foreach (var url
in task.Result)
47 var watcher = VirtualFileSystem.CreateWatcher(baseUrl,
"*.*");
48 watcher.Changed += watcher_Changed;
49 watcher.Enable =
true;
70 var urlAsLowerCase = url.ToLowerInvariant();
71 return (urlAsLowerCase.EndsWith(
".png")
72 || urlAsLowerCase.EndsWith(
".jpg")
74 || urlAsLowerCase.EndsWith(
".pdxsl"));
80 private EngineContext engineContext;
82 private string searchFilter = string.Empty;
83 private string searchRoot = string.Empty;
88 this.engineContext = engineContext;
91 public void GenerateChildren(ViewModelContext context, IViewModelNode viewModelNode, ref
bool handled)
93 if ((viewModelNode.NodeValue as
string) ==
"Root")
95 viewModelNode.Children.Add(
new ViewModelNode(
"SearchResults",
new EnumerableViewModelContent<ViewModelReference>(() =>
96 searchResults != null && searchResults.IsCompleted ? searchResults.Result.Select(searchResult =>
new ViewModelReference(KeyValuePair.Create(UrlType.SearchResult, searchResult),
true))
97 :
new ViewModelReference[] { })));
98 viewModelNode.Children.Add(
new ViewModelNode(
"SearchFilter",
99 new LambdaViewModelContent<string>(
103 searchFilter = newFilter;
106 viewModelNode.Children.Add(
new ViewModelNode(
"Packages",
107 new EnumerableViewModelContent<ViewModelReference>(() => engineContext.PackageManager.Packages.Select(package =>
new ViewModelReference(package,
true)))));
110 fileTracker.Setup(
"/global_data");
111 fileTracker.Setup(
"/global_data2");
112 viewModelNode.Children.Add(
new ViewModelNode(
"FileTracker",
new RootViewModelContent(fileTracker)).GenerateChildren(context));
116 viewModelNode.Content.SerializeFlags = ViewModelContentSerializeFlags.None;
117 viewModelNode.Children.Add(
new ViewModelNode(
"RootFolder", KeyValuePair.Create(UrlType.FileTracker,
"/")).
GenerateChildren(context));
120 if (viewModelNode.NodeValue is Package)
122 viewModelNode.Children.Add(
new ViewModelNode(
"Name",
new PropertyInfoViewModelContent(
new ParentNodeValueViewModelContent(), typeof(Package).GetProperty(
"Name"))));
126 if (viewModelNode.NodeValue is Tuple<UrlType, string>)
128 var nodeValue = (Tuple<UrlType, string>)viewModelNode.NodeValue;
129 var url = nodeValue.Item2;
131 if (nodeValue.Item1 == UrlType.SearchResult)
134 if (url.EndsWith(
".png") || url.EndsWith(
".jpg"))
137 var thumbnail =
new ViewModelNode(
"Thumbnail",
138 new AsyncViewModelContent<Image>(
new NullViewModelContent(), operand => engineContext.AssetManager.Load<
Image>(url)));
139 viewModelNode.Children.Add(thumbnail);
151 viewModelNode.Content =
new RootViewModelContent(url);
152 viewModelNode.Content.SerializeFlags = ViewModelContentSerializeFlags.Serialize;
154 else if (nodeValue.Item1 == UrlType.FileTracker)
156 viewModelNode.Content =
new RootViewModelContent(url);
157 viewModelNode.Content.SerializeFlags = ViewModelContentSerializeFlags.Serialize;
159 viewModelNode.Children.Add(
new ViewModelNode(
"SetAsSearchFilter",
new RootViewModelContent((ExecuteCommand)((viewModel2, parameter) =>
165 if (url.EndsWith(
"/"))
167 viewModelNode.Children.Add(
new ViewModelNode(
"Folders",
new EnumerableViewModelContent<ViewModelReference>(() =>
169 .Where(file => file.StartsWith(url))
172 var separatorIndex = file.IndexOf(
'/', url.Length + 1);
173 return file.Substring(url.Length, separatorIndex != -1 ? separatorIndex - url.Length + 1 : file.Length - url.Length);
175 .Where(x => x.Key.EndsWith(
"/") || x.Key.EndsWith(
".dat") || x.Key.EndsWith(
".pdxsl"))
176 .Select(x =>
new ViewModelReference(KeyValuePair.Create(UrlType.FileTracker, url + x.Key),
this))
187 var packageUrl = package.Source.Url;
188 return package.ObjectHeaders
189 .Select(packageObject => packageUrl +
"/" + packageObject.Name);
194 if (searchRoot.EndsWith(
"/"))
196 searchResults = VirtualFileSystem
197 .ListFiles(searchRoot, searchFilter +
"*.*", VirtualSearchOption.AllDirectories)
198 .ContinueWith(task =>
201 .Concat(engineContext.PackageManager.Packages
202 .Where(x => x.Source.Url.StartsWith(searchRoot))
210 var
package = engineContext.PackageManager.Packages.FirstOrDefault(x => x.Source.Url == searchRoot);
IEnumerable< string > EnumeratePackageObjects(Package package, string filter)
Provides method to instantiate an image 1D/2D/3D supporting TextureArray and mipmaps on the CPU or to...
SortedSet< string > Files
void GenerateChildren(ViewModelContext context, IViewModelNode viewModelNode, ref bool handled)
AssetBrowser(EngineContext engineContext)
VirtualWatcherChangeTypes
static bool IsExtensionSupported(string url)
void Setup(string baseUrl)
AssetBrowserEnumerator(EngineContext engineContext)