示例#1
0
        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);
            }
        }
示例#2
0
        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);
            }
        }