Add more functionality and thumbnail to content items in finder for scripts

This commit is contained in:
Wojtek Figat
2024-07-18 14:19:27 +02:00
parent 5e0d90af2e
commit f132198ead
2 changed files with 38 additions and 25 deletions

View File

@@ -139,8 +139,8 @@ namespace FlaxEditor.Windows.Search
{
var item = items[i];
SearchItem searchItem;
if (item.Item is AssetItem assetItem)
searchItem = new AssetSearchItem(item.Name, item.Type, assetItem, this, itemsWidth, itemHeight);
if (item.Item is ContentItem contentItem)
searchItem = new ContentSearchItem(item.Name, item.Type, contentItem, this, itemsWidth, itemHeight);
else
searchItem = new SearchItem(item.Name, item.Type, item.Item, this, itemsWidth, itemHeight);
searchItem.Y = i * itemHeight;

View File

@@ -113,17 +113,17 @@ namespace FlaxEditor.Windows.Search
}
/// <summary>
/// The <see cref="SearchItem"/> for assets. Supports using asset thumbnail.
/// The <see cref="SearchItem"/> for assets. Supports using content item thumbnail.
/// </summary>
/// <seealso cref="FlaxEditor.Windows.Search.SearchItem" />
/// <seealso cref="FlaxEditor.Content.IContentItemOwner" />
internal class AssetSearchItem : SearchItem, IContentItemOwner
internal class ContentSearchItem : SearchItem, IContentItemOwner
{
private AssetItem _asset;
private FlaxEditor.GUI.ContextMenu.ContextMenu _cm;
private ContentItem _asset;
private ContextMenu _cm;
/// <inheritdoc />
public AssetSearchItem(string name, string type, AssetItem item, ContentFinder finder, float width, float height)
public ContentSearchItem(string name, string type, ContentItem item, ContentFinder finder, float width, float height)
: base(name, type, item, finder, width, height)
{
_asset = item;
@@ -136,31 +136,41 @@ namespace FlaxEditor.Windows.Search
/// <inheritdoc />
public override bool OnShowTooltip(out string text, out Float2 location, out Rectangle area)
{
if (string.IsNullOrEmpty(TooltipText) && Item is AssetItem assetItem)
if (string.IsNullOrEmpty(TooltipText) && Item is ContentItem contentItem)
{
assetItem.UpdateTooltipText();
TooltipText = assetItem.TooltipText;
contentItem.UpdateTooltipText();
TooltipText = contentItem.TooltipText;
}
return base.OnShowTooltip(out text, out location, out area);
}
/// <inheritdoc />
public override bool OnMouseDown(Float2 location, MouseButton button)
{
if (base.OnMouseDown(location, button))
return true;
if (button == MouseButton.Right && Item is ContentItem)
return true;
return false;
}
/// <inheritdoc />
public override bool OnMouseUp(Float2 location, MouseButton button)
{
if (base.OnMouseUp(location, button))
return true;
if (button == MouseButton.Right && Item is AssetItem assetItem)
if (button == MouseButton.Right && Item is ContentItem contentItem)
{
// Show context menu
var proxy = Editor.Instance.ContentDatabase.GetProxy(assetItem);
var proxy = Editor.Instance.ContentDatabase.GetProxy(contentItem);
ContextMenuButton b;
var cm = new FlaxEditor.GUI.ContextMenu.ContextMenu { Tag = assetItem };
var cm = new ContextMenu { Tag = contentItem };
b = cm.AddButton("Open", () => Editor.Instance.ContentFinding.Open(Item));
cm.AddSeparator();
cm.AddButton(Utilities.Constants.ShowInExplorer, () => FileSystem.ShowFileExplorer(System.IO.Path.GetDirectoryName(assetItem.Path)));
cm.AddButton("Show in Content window", () => Editor.Instance.Windows.ContentWin.Select(assetItem, true));
b.Enabled = proxy != null && proxy.CanReimport(assetItem);
if (assetItem is BinaryAssetItem binaryAsset)
cm.AddButton(Utilities.Constants.ShowInExplorer, () => FileSystem.ShowFileExplorer(System.IO.Path.GetDirectoryName(contentItem.Path)));
cm.AddButton("Show in Content window", () => Editor.Instance.Windows.ContentWin.Select(contentItem, true));
b.Enabled = proxy != null && proxy.CanReimport(contentItem);
if (contentItem is BinaryAssetItem binaryAsset)
{
if (!binaryAsset.GetImportPath(out string importPath))
{
@@ -172,14 +182,17 @@ namespace FlaxEditor.Windows.Search
}
}
cm.AddSeparator();
cm.AddButton("Copy asset ID", () => Clipboard.Text = FlaxEngine.Json.JsonSerializer.GetStringID(assetItem.ID));
cm.AddButton("Select actors using this asset", () => Editor.Instance.SceneEditing.SelectActorsUsingAsset(assetItem.ID));
cm.AddButton("Show asset references graph", () => Editor.Instance.Windows.Open(new AssetReferencesGraphWindow(Editor.Instance, assetItem)));
cm.AddSeparator();
proxy?.OnContentWindowContextMenu(cm, assetItem);
assetItem.OnContextMenu(cm);
cm.AddButton("Copy name to Clipboard", () => Clipboard.Text = assetItem.NamePath);
cm.AddButton("Copy path to Clipboard", () => Clipboard.Text = assetItem.Path);
if (contentItem is AssetItem assetItem)
{
cm.AddButton("Copy asset ID", () => Clipboard.Text = FlaxEngine.Json.JsonSerializer.GetStringID(assetItem.ID));
cm.AddButton("Select actors using this asset", () => Editor.Instance.SceneEditing.SelectActorsUsingAsset(assetItem.ID));
cm.AddButton("Show asset references graph", () => Editor.Instance.Windows.Open(new AssetReferencesGraphWindow(Editor.Instance, assetItem)));
cm.AddButton("Copy name to Clipboard", () => Clipboard.Text = assetItem.NamePath);
cm.AddButton("Copy path to Clipboard", () => Clipboard.Text = assetItem.Path);
cm.AddSeparator();
}
proxy?.OnContentWindowContextMenu(cm, contentItem);
contentItem.OnContextMenu(cm);
cm.Show(this, location);
_cm = cm;
return true;