diff --git a/Source/Editor/Content/Items/AssetItem.cs b/Source/Editor/Content/Items/AssetItem.cs
index f534e93eb..9f5de8bf8 100644
--- a/Source/Editor/Content/Items/AssetItem.cs
+++ b/Source/Editor/Content/Items/AssetItem.cs
@@ -39,7 +39,7 @@ namespace FlaxEditor.Content
}
///
- protected override void UpdateTooltipText()
+ public override void UpdateTooltipText()
{
var sb = new StringBuilder();
OnBuildTooltipText(sb);
diff --git a/Source/Editor/Content/Items/ContentFolder.cs b/Source/Editor/Content/Items/ContentFolder.cs
index 8c7e52b2c..0b2d4b0cd 100644
--- a/Source/Editor/Content/Items/ContentFolder.cs
+++ b/Source/Editor/Content/Items/ContentFolder.cs
@@ -135,7 +135,7 @@ namespace FlaxEditor.Content
}
///
- protected override void UpdateTooltipText()
+ public override void UpdateTooltipText()
{
TooltipText = Path;
}
diff --git a/Source/Editor/Content/Items/ContentItem.cs b/Source/Editor/Content/Items/ContentItem.cs
index 8f97a9330..4f0c7c039 100644
--- a/Source/Editor/Content/Items/ContentItem.cs
+++ b/Source/Editor/Content/Items/ContentItem.cs
@@ -366,7 +366,7 @@ namespace FlaxEditor.Content
///
/// Updates the tooltip text text.
///
- protected virtual void UpdateTooltipText()
+ public virtual void UpdateTooltipText()
{
TooltipText = "Path: " + Path;
}
diff --git a/Source/Editor/Surface/ContextMenu/SearchItem.cs b/Source/Editor/Surface/ContextMenu/SearchItem.cs
index c7810dca2..896f2d122 100644
--- a/Source/Editor/Surface/ContextMenu/SearchItem.cs
+++ b/Source/Editor/Surface/ContextMenu/SearchItem.cs
@@ -1,6 +1,8 @@
// Copyright (c) 2012-2021 Wojciech Figat. All rights reserved.
using FlaxEditor.Content;
+using FlaxEditor.GUI.ContextMenu;
+using FlaxEditor.Windows;
using FlaxEngine;
using FlaxEngine.GUI;
@@ -116,6 +118,7 @@ namespace FlaxEditor.Surface.ContextMenu
///
public override void OnDestroy()
{
+ Item = null;
_finder = null;
_icon = null;
@@ -131,6 +134,7 @@ namespace FlaxEditor.Surface.ContextMenu
public class AssetSearchItem : SearchItem, IContentItemOwner
{
private AssetItem _asset;
+ private FlaxEditor.GUI.ContextMenu.ContextMenu _cm;
///
public AssetSearchItem(string name, string type, AssetItem item, ContentFinder finder, float width, float height)
@@ -140,9 +144,70 @@ namespace FlaxEditor.Surface.ContextMenu
_asset.AddReference(this);
}
+ ///
+ protected override bool ShowTooltip => true;
+
+ ///
+ public override bool OnShowTooltip(out string text, out Vector2 location, out Rectangle area)
+ {
+ if (string.IsNullOrEmpty(TooltipText) && Item is AssetItem assetItem)
+ {
+ assetItem.UpdateTooltipText();
+ TooltipText = assetItem.TooltipText;
+ }
+ return base.OnShowTooltip(out text, out location, out area);
+ }
+
+ ///
+ public override bool OnMouseUp(Vector2 location, MouseButton button)
+ {
+ if (base.OnMouseUp(location, button))
+ return true;
+ if (button == MouseButton.Right && Item is AssetItem assetItem)
+ {
+ // Show context menu
+ var proxy = Editor.Instance.ContentDatabase.GetProxy(assetItem);
+ ContextMenuButton b;
+ var cm = new FlaxEditor.GUI.ContextMenu.ContextMenu { Tag = assetItem };
+ b = cm.AddButton("Open", () => Editor.Instance.ContentFinding.Open(Item));
+ cm.AddSeparator();
+ cm.AddButton("Show in explorer", () => 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)
+ {
+ if (!binaryAsset.GetImportPath(out string importPath))
+ {
+ string importLocation = System.IO.Path.GetDirectoryName(importPath);
+ if (!string.IsNullOrEmpty(importLocation) && System.IO.Directory.Exists(importLocation))
+ {
+ cm.AddButton("Show import location", () => FileSystem.ShowFileExplorer(importLocation));
+ }
+ }
+ }
+ 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);
+ cm.Show(this, location);
+ _cm = cm;
+ return true;
+ }
+ return false;
+ }
+
///
public override void Draw()
{
+ // Draw context menu hint
+ if (_cm != null && _cm.Visible)
+ Render2D.FillRectangle(new Rectangle(Vector2.Zero, Size), Color.Gray);
+
base.Draw();
// Draw icon
@@ -153,6 +218,7 @@ namespace FlaxEditor.Surface.ContextMenu
///
public override void OnDestroy()
{
+ _cm = null;
if (_asset != null)
{
_asset.RemoveReference(this);