void SetupAssets() { ClearList(); IEnumerable <GameAsset> assets = GameAssetManager.GetAllAssets(assetType); IEnumerable <GameAsset> orderedAssets; switch (orderMode) { case EOrderByMode.ID_A: orderedAssets = assets.OrderBy(d => d.origin).ThenBy(d => d.GUIDOverID ? (object)d.guid : (object)d.id); break; case EOrderByMode.ID_D: orderedAssets = assets.OrderBy(d => d.origin).ThenByDescending(d => d.GUIDOverID ? (object)d.guid : (object)d.id); break; case EOrderByMode.Name_A: orderedAssets = assets.OrderBy(d => d.origin).ThenBy(d => { if (d is IHasNameOverride nameOverride) { return(nameOverride.NameOverride); } else { return(d.name); } }); break; case EOrderByMode.Name_D: orderedAssets = assets.OrderBy(d => d.origin).ThenByDescending(d => { if (d is IHasNameOverride nameOverride) { return(nameOverride.NameOverride); } else { return(d.name); } }); break; default: orderedAssets = assets; break; } if (typeof(ICreatable).IsAssignableFrom(assetType)) { addEntryButton.Visibility = Visibility.Visible; addEntryButton.Command = new BaseCommand(() => { GameAsset createdA = (GameAsset)Activator.CreateInstance(assetType); if (createdA is ICreatable createable) { createable.OnCreate(); } Reorder(); }); } else { addEntryButton.Visibility = Visibility.Collapsed; } foreach (var asset in orderedAssets) { Grid g = new Grid() { Margin = new Thickness(5), Tag = asset }; g.ColumnDefinitions.Add(new ColumnDefinition() { Width = GridLength.Auto }); g.ColumnDefinitions.Add(new ColumnDefinition() { Width = GridLength.Auto }); g.ColumnDefinitions.Add(new ColumnDefinition() { Width = GridLength.Auto }); g.ColumnDefinitions.Add(new ColumnDefinition() { Width = GridLength.Auto }); TextBlock tb = new TextBlock(); Label l = new Label() { Content = tb, VerticalAlignment = VerticalAlignment.Center }; TextBlock tbid = new TextBlock(); Label lid = new Label() { Content = tbid, VerticalAlignment = VerticalAlignment.Center, MaxWidth = 69 }; if (asset is IHasNameOverride gda) { markup.Markup(tb, gda.NameOverride); } else { markup.Markup(tb, asset.name); } if (asset.GUIDOverID) { tbid.Text = asset.guid.ToString("N"); tbid.ToolTip = tbid.Text; } else { tbid.Text = asset.id.ToString(); } g.Children.Add(l); g.Children.Add(lid); Grid editableGrid = new Grid() { HorizontalAlignment = HorizontalAlignment.Right, Margin = new Thickness(5) }; Grid deletableGrid = new Grid() { HorizontalAlignment = HorizontalAlignment.Right, Margin = new Thickness(5) }; g.Children.Add(editableGrid); g.Children.Add(deletableGrid); if (asset is IEditable editable) { Button editButton = new Button() { ToolTip = LocalizationManager.Current.Interface["AssetPicker_Editable_Edit_ToolTip"] }; editButton.Content = new PackIconMaterial() { Kind = PackIconMaterialKind.Pencil, Foreground = Application.Current.Resources["AccentColor"] as System.Windows.Media.Brush, Width = 16, Height = 16 }; editButton.Command = new BaseCommand(() => { editable.Edit(this); if (asset is IHasNameOverride gda1) { markup.Markup(tb, gda1.NameOverride); } else { markup.Markup(tb, asset.name); } if (asset.GUIDOverID) { tbid.Text = asset.guid.ToString("N"); tbid.ToolTip = tbid.Text; } else { tbid.Text = asset.id.ToString(); } }); editableGrid.Children.Add(editButton); } if (asset is IDeletable deletable) { Button deleteButton = new Button() { ToolTip = LocalizationManager.Current.Interface["AssetPicker_Deletable_Delete_ToolTip"] }; deleteButton.Content = new PackIconMaterial() { Kind = PackIconMaterialKind.TrashCan, Foreground = Application.Current.Resources["AccentColor"] as System.Windows.Media.Brush, Width = 16, Height = 16 }; deleteButton.Command = new BaseCommand(() => { deletable.OnDelete(); Reorder(); }); deletableGrid.Children.Add(deleteButton); } if (asset is IHasIcon hasIcon) { Image icon = new Image() { Source = ThumbnailManager.CreateThumbnail(hasIcon.ImagePath), Width = 32, Height = 32, Margin = new Thickness(1), VerticalAlignment = VerticalAlignment.Center }; g.ColumnDefinitions.Add(new ColumnDefinition() { Width = GridLength.Auto }); g.Children.Add(icon); Grid.SetColumn(icon, 0); Grid.SetColumn(lid, 1); Grid.SetColumn(l, 2); Grid.SetColumn(editableGrid, 3); Grid.SetColumn(deletableGrid, 4); } else if (asset is IHasThumbnail hasThumbnail) { Image icon = new Image() { Source = hasThumbnail.Thumbnail, Width = 32, Height = 32, Margin = new Thickness(1), VerticalAlignment = VerticalAlignment.Center }; g.ColumnDefinitions.Add(new ColumnDefinition() { Width = GridLength.Auto }); g.Children.Add(icon); Grid.SetColumn(icon, 0); Grid.SetColumn(lid, 1); Grid.SetColumn(l, 2); Grid.SetColumn(editableGrid, 3); Grid.SetColumn(deletableGrid, 4); } else if (asset is IHasAnimatedThumbnail hasAnimatedThumbnail) { var thumbs = hasAnimatedThumbnail.Thumbnails.ToList(); if (thumbs.Count > 0) { Image icon = new Image() { Source = thumbs.First(), Width = 32, Height = 32, Margin = new Thickness(1), VerticalAlignment = VerticalAlignment.Center }; DispatcherTimer dt = new DispatcherTimer() { Interval = new TimeSpan(0, 0, 3) }; int last = 0; dt.Tick += (sender, e) => { last++; if (last >= thumbs.Count) { last = 0; } icon.Source = thumbs[last]; }; dt.Start(); g.ColumnDefinitions.Add(new ColumnDefinition() { Width = GridLength.Auto }); g.Children.Add(icon); Grid.SetColumn(icon, 0); Grid.SetColumn(lid, 1); Grid.SetColumn(l, 2); Grid.SetColumn(editableGrid, 3); Grid.SetColumn(deletableGrid, 4); } else { Grid.SetColumn(lid, 0); Grid.SetColumn(l, 1); Grid.SetColumn(editableGrid, 2); Grid.SetColumn(deletableGrid, 3); } } else { tpbarGrid.ColumnDefinitions[0].Width = new GridLength(0); Grid.SetColumn(lid, 0); Grid.SetColumn(l, 1); Grid.SetColumn(editableGrid, 2); Grid.SetColumn(deletableGrid, 3); } if (asset is IHasToolTip hasToolTip) { g.ToolTip = hasToolTip.ToolTipContent; } else if (asset is IHasTextToolTip hasTextToolTip) { var sp = new StackPanel() { Orientation = Orientation.Vertical }; void addLabel(string text) { sp.Children.Add(new Label() { Content = new TextBlock() { Text = text, VerticalAlignment = VerticalAlignment.Center, HorizontalAlignment = HorizontalAlignment.Left, TextAlignment = TextAlignment.Left }, VerticalAlignment = VerticalAlignment.Center, HorizontalAlignment = HorizontalAlignment.Left, Margin = new Thickness(5) }); } foreach (var line in hasTextToolTip.GetToolTipLines()) { addLabel(line); } g.ToolTip = sp; } g.MouseDown += (sender, e) => { DialogResult = true; SelectedAsset = asset; Close(); }; stack.Children.Add(g); } }
void SetupAssets() { ClearList(); IEnumerable <GameAsset> assets = GameAssetManager.GetAllAssets(assetType); IEnumerable <GameAsset> orderedAssets; switch (orderMode) { case EOrderByMode.ID_A: orderedAssets = assets.OrderBy(d => d.origin).ThenBy(d => d.id); break; case EOrderByMode.ID_D: orderedAssets = assets.OrderBy(d => d.origin).ThenByDescending(d => d.id); break; case EOrderByMode.Name_A: orderedAssets = assets.OrderBy(d => d.origin).ThenBy(d => { if (d is IHasNameOverride nameOverride) { return(nameOverride.NameOverride); } else { return(d.name); } }); break; case EOrderByMode.Name_D: orderedAssets = assets.OrderBy(d => d.origin).ThenByDescending(d => { if (d is IHasNameOverride nameOverride) { return(nameOverride.NameOverride); } else { return(d.name); } }); break; default: orderedAssets = assets; break; } foreach (var asset in orderedAssets) { Grid g = new Grid() { Margin = new Thickness(5), Tag = asset }; g.ColumnDefinitions.Add(new ColumnDefinition() { Width = GridLength.Auto }); g.ColumnDefinitions.Add(new ColumnDefinition() { Width = GridLength.Auto }); TextBlock tb = new TextBlock(); Label l = new Label() { Content = tb }; TextBlock tbid = new TextBlock(); Label lid = new Label() { Content = tbid }; if (asset is IHasNameOverride gda) { markup.Markup(tb, gda.NameOverride); } else { markup.Markup(tb, asset.name); } tbid.Text = asset.id.ToString(); g.Children.Add(l); g.Children.Add(lid); if (asset is IHasIcon hasIcon) { Image icon = new Image() { Source = ThumbnailManager.CreateThumbnail(hasIcon.ImagePath), Width = 32, Height = 32, Margin = new Thickness(1) }; g.ColumnDefinitions.Add(new ColumnDefinition() { Width = GridLength.Auto }); g.Children.Add(icon); Grid.SetColumn(icon, 0); Grid.SetColumn(lid, 1); Grid.SetColumn(l, 2); } else if (asset is IHasThumbnail hasThumbnail) { Image icon = new Image() { Source = hasThumbnail.Thumbnail, Width = 32, Height = 32, Margin = new Thickness(1) }; g.ColumnDefinitions.Add(new ColumnDefinition() { Width = GridLength.Auto }); g.Children.Add(icon); Grid.SetColumn(icon, 0); Grid.SetColumn(lid, 1); Grid.SetColumn(l, 2); } else if (asset is IHasAnimatedThumbnail hasAnimatedThumbnail) { var thumbs = hasAnimatedThumbnail.Thumbnails.ToList(); if (thumbs.Count > 0) { Image icon = new Image() { Source = thumbs.First(), Width = 32, Height = 32, Margin = new Thickness(1) }; DispatcherTimer dt = new DispatcherTimer() { Interval = new TimeSpan(0, 0, 3) }; int last = 0; dt.Tick += (sender, e) => { last++; if (last >= thumbs.Count) { last = 0; } icon.Source = thumbs[last]; }; dt.Start(); g.ColumnDefinitions.Add(new ColumnDefinition() { Width = GridLength.Auto }); g.Children.Add(icon); Grid.SetColumn(icon, 0); Grid.SetColumn(lid, 1); Grid.SetColumn(l, 2); } else { Grid.SetColumn(lid, 0); Grid.SetColumn(l, 1); } } else { tpbarGrid.ColumnDefinitions[0].Width = new GridLength(0); Grid.SetColumn(lid, 0); Grid.SetColumn(l, 1); } if (asset is IHasToolTip hasToolTip) { g.ToolTip = hasToolTip.ToolTipContent; } else if (asset is IHasTextToolTip hasTextToolTip) { var sp = new StackPanel() { Orientation = Orientation.Vertical }; void addLabel(string text) { sp.Children.Add(new Label() { Content = new TextBlock() { Text = text, VerticalAlignment = VerticalAlignment.Center, HorizontalAlignment = HorizontalAlignment.Left, TextAlignment = TextAlignment.Left }, VerticalAlignment = VerticalAlignment.Center, HorizontalAlignment = HorizontalAlignment.Left, Margin = new Thickness(5) }); } foreach (var line in hasTextToolTip.GetToolTipLines()) { addLabel(line); } g.ToolTip = sp; } g.MouseDown += (sender, e) => { DialogResult = true; SelectedAsset = asset; Close(); }; stack.Children.Add(g); } }