diff --git a/Source/Editor/CustomEditors/Dedicated/ScriptsEditor.cs b/Source/Editor/CustomEditors/Dedicated/ScriptsEditor.cs
index 08b44f46a..9d9024a7c 100644
--- a/Source/Editor/CustomEditors/Dedicated/ScriptsEditor.cs
+++ b/Source/Editor/CustomEditors/Dedicated/ScriptsEditor.cs
@@ -625,11 +625,7 @@ namespace FlaxEditor.CustomEditors.Dedicated
group.Panel.Open(false);
// Customize
- var typeAttributes = scriptType.GetAttributes(false);
- group.Panel.TooltipText = scriptType.TypeName;
- var tooltip = (TooltipAttribute)typeAttributes.FirstOrDefault(x => x is TooltipAttribute);
- if (tooltip != null)
- group.Panel.TooltipText += '\n' + tooltip.Text;
+ group.Panel.TooltipText = Editor.Instance.CodeDocs.GetTooltip(scriptType);
if (script.HasPrefabLink)
group.Panel.HeaderTextColor = FlaxEngine.GUI.Style.Current.ProgressNormal;
diff --git a/Source/Editor/Editor.cs b/Source/Editor/Editor.cs
index 21bebfd65..20c6a5464 100644
--- a/Source/Editor/Editor.cs
+++ b/Source/Editor/Editor.cs
@@ -142,10 +142,15 @@ namespace FlaxEditor
public readonly ContentFindingModule ContentFinding;
///
- /// The content editing
+ /// The scripts editing
///
public readonly CodeEditingModule CodeEditing;
+ ///
+ /// The scripts documentation
+ ///
+ public readonly CodeDocsModule CodeDocs;
+
///
/// The editor state machine.
///
@@ -237,6 +242,7 @@ namespace FlaxEditor
RegisterModule(ContentDatabase = new ContentDatabaseModule(this));
RegisterModule(ContentImporting = new ContentImportingModule(this));
RegisterModule(CodeEditing = new CodeEditingModule(this));
+ RegisterModule(CodeDocs = new CodeDocsModule(this));
RegisterModule(ProgressReporting = new ProgressReportingModule(this));
RegisterModule(ContentFinding = new ContentFindingModule(this));
diff --git a/Source/Editor/GUI/EnumComboBox.cs b/Source/Editor/GUI/EnumComboBox.cs
index ed1c80cd6..96fd474de 100644
--- a/Source/Editor/GUI/EnumComboBox.cs
+++ b/Source/Editor/GUI/EnumComboBox.cs
@@ -6,6 +6,7 @@ using System.Linq;
using System.Reflection;
using FlaxEditor.CustomEditors;
using FlaxEditor.CustomEditors.Elements;
+using FlaxEditor.Scripting;
using FlaxEngine;
namespace FlaxEditor.GUI
@@ -245,7 +246,7 @@ namespace FlaxEditor.GUI
if (field.Name.Equals("value__", StringComparison.Ordinal))
continue;
- var attributes = (Attribute[])field.GetCustomAttributes();
+ var attributes = field.GetCustomAttributes(false);
if (attributes.Any(x => x is HideInEditorAttribute))
continue;
@@ -269,12 +270,7 @@ namespace FlaxEditor.GUI
}
}
- string tooltip = null;
- var tooltipAttr = (TooltipAttribute)attributes.FirstOrDefault(x => x is TooltipAttribute);
- if (tooltipAttr != null)
- {
- tooltip = tooltipAttr.Text;
- }
+ string tooltip = Editor.Instance.CodeDocs.GetTooltip(new ScriptMemberInfo(field), attributes);
entries.Add(new Entry(name, Convert.ToInt64(field.GetRawConstantValue()), tooltip));
}
diff --git a/Source/Editor/GUI/Popups/TypeSearchPopup.cs b/Source/Editor/GUI/Popups/TypeSearchPopup.cs
index 71a97ed05..b79c1a503 100644
--- a/Source/Editor/GUI/Popups/TypeSearchPopup.cs
+++ b/Source/Editor/GUI/Popups/TypeSearchPopup.cs
@@ -46,14 +46,8 @@ namespace FlaxEditor.GUI
_type = type;
Name = type.Name;
- TooltipText = type.TypeName;
+ TooltipText = Editor.Instance.CodeDocs.GetTooltip(type, attributes);
Tag = type;
- var tooltipAttribute = (TooltipAttribute)attributes.FirstOrDefault(x => x is TooltipAttribute);
- if (tooltipAttribute != null)
- {
- TooltipText += '\n';
- TooltipText += tooltipAttribute.Text;
- }
var categoryAttribute = (CategoryAttribute)attributes.FirstOrDefault(x => x is CategoryAttribute);
if (categoryAttribute != null)
{
diff --git a/Source/Editor/Modules/SourceCodeEditing/CodeDocsModule.cs b/Source/Editor/Modules/SourceCodeEditing/CodeDocsModule.cs
new file mode 100644
index 000000000..d8a5cc0a2
--- /dev/null
+++ b/Source/Editor/Modules/SourceCodeEditing/CodeDocsModule.cs
@@ -0,0 +1,54 @@
+// Copyright (c) 2012-2021 Wojciech Figat. All rights reserved.
+
+using System.Linq;
+using FlaxEditor.Scripting;
+using FlaxEngine;
+
+namespace FlaxEditor.Modules.SourceCodeEditing
+{
+ ///
+ /// Source code documentation module.
+ ///
+ ///
+ public sealed class CodeDocsModule : EditorModule
+ {
+ internal CodeDocsModule(Editor editor)
+ : base(editor)
+ {
+ }
+
+ ///
+ /// Gets the tooltip text for the type.
+ ///
+ /// The type.
+ /// The type attributes. Optional, if null type attributes will be used.
+ /// The documentation tooltip.
+ public string GetTooltip(ScriptType type, object[] attributes = null)
+ {
+ if (attributes == null)
+ attributes = type.GetAttributes(false);
+ var text = type.TypeName;
+ var tooltip = (TooltipAttribute)attributes.FirstOrDefault(x => x is TooltipAttribute);
+ if (tooltip != null)
+ text += '\n' + tooltip.Text;
+ return text;
+ }
+
+ ///
+ /// Gets the tooltip text for the type.
+ ///
+ /// The type.
+ /// The type attributes. Optional, if null type attributes will be used.
+ /// The documentation tooltip.
+ public string GetTooltip(ScriptMemberInfo type, object[] attributes = null)
+ {
+ if (attributes == null)
+ attributes = type.GetAttributes(true);
+ string text = null;
+ var tooltip = (TooltipAttribute)attributes.FirstOrDefault(x => x is TooltipAttribute);
+ if (tooltip != null)
+ text = tooltip.Text;
+ return text;
+ }
+ }
+}
diff --git a/Source/Editor/Surface/AnimGraphSurface.cs b/Source/Editor/Surface/AnimGraphSurface.cs
index c2339e515..b9b008ee6 100644
--- a/Source/Editor/Surface/AnimGraphSurface.cs
+++ b/Source/Editor/Surface/AnimGraphSurface.cs
@@ -164,11 +164,7 @@ namespace FlaxEditor.Surface
node.DefaultValues[0] = Activator.CreateInstance(scriptType.Type);
node.Flags &= ~NodeFlags.NoSpawnViaGUI;
node.Title = scriptTypeName;
- node.Description = scriptTypeTypeName;
- var attributes = scriptType.GetAttributes(false);
- var tooltipAttribute = (TooltipAttribute)attributes.FirstOrDefault(x => x is TooltipAttribute);
- if (tooltipAttribute != null)
- node.Description += "\n" + tooltipAttribute.Text;
+ node.Description = Editor.Instance.CodeDocs.GetTooltip(scriptType);
// Create group archetype
var groupKey = new KeyValuePair(scriptTypeName, 2);
@@ -211,17 +207,14 @@ namespace FlaxEditor.Surface
_cache.Add(groupKey, group);
}
- var attributes = scriptType.GetAttributes(false);
- var tooltipAttribute = (TooltipAttribute)attributes.FirstOrDefault(x => x is TooltipAttribute);
+ var tooltip = Editor.Instance.CodeDocs.GetTooltip(scriptType);
// Create Pack node archetype
var node = (NodeArchetype)Archetypes.Packing.Nodes[6].Clone();
node.DefaultValues[0] = scriptTypeTypeName;
node.Flags &= ~NodeFlags.NoSpawnViaGUI;
node.Title = "Pack " + scriptTypeName;
- node.Description = scriptTypeTypeName;
- if (tooltipAttribute != null)
- node.Description += "\n" + tooltipAttribute.Text;
+ node.Description = tooltip;
((IList)group.Archetypes).Add(node);
// Create Unpack node archetype
@@ -229,9 +222,7 @@ namespace FlaxEditor.Surface
node.DefaultValues[0] = scriptTypeTypeName;
node.Flags &= ~NodeFlags.NoSpawnViaGUI;
node.Title = "Unpack " + scriptTypeName;
- node.Description = scriptTypeTypeName;
- if (tooltipAttribute != null)
- node.Description += "\n" + tooltipAttribute.Text;
+ node.Description = tooltip;
((IList)group.Archetypes).Add(node);
}
}
diff --git a/Source/Editor/Surface/Archetypes/Function.cs b/Source/Editor/Surface/Archetypes/Function.cs
index 1fd061dcc..3b393b1f4 100644
--- a/Source/Editor/Surface/Archetypes/Function.cs
+++ b/Source/Editor/Surface/Archetypes/Function.cs
@@ -537,10 +537,7 @@ namespace FlaxEditor.Surface.Archetypes
if (methodInfo)
{
// Update tooltip
- var attributes = methodInfo.GetAttributes(true);
- var tooltipAttribute = (TooltipAttribute)attributes.FirstOrDefault(x => x is TooltipAttribute);
- if (tooltipAttribute != null)
- TooltipText = tooltipAttribute.Text;
+ TooltipText = Editor.Instance.CodeDocs.GetTooltip(methodInfo);
// Generate signature from the method info
MakeBox(0, string.Empty, typeof(void), true);
diff --git a/Source/Editor/Surface/SurfaceUtils.cs b/Source/Editor/Surface/SurfaceUtils.cs
index ead59f918..55e226bff 100644
--- a/Source/Editor/Surface/SurfaceUtils.cs
+++ b/Source/Editor/Surface/SurfaceUtils.cs
@@ -437,12 +437,7 @@ namespace FlaxEditor.Surface
sb.Append("static ");
else if (type.IsAbstract)
sb.Append("abstract ");
- sb.Append(type.TypeName);
-
- var attributes = type.GetAttributes(false);
- var tooltipAttribute = (TooltipAttribute)attributes.FirstOrDefault(x => x is TooltipAttribute);
- if (tooltipAttribute != null)
- sb.Append("\n").Append(tooltipAttribute.Text);
+ sb.Append(Editor.Instance.CodeDocs.GetTooltip(type));
return sb.ToString();
}
@@ -502,10 +497,9 @@ namespace FlaxEditor.Surface
}
// Tooltip
- var attributes = member.GetAttributes();
- var tooltipAttribute = (TooltipAttribute)attributes.FirstOrDefault(x => x is TooltipAttribute);
- if (tooltipAttribute != null)
- sb.Append("\n").Append(tooltipAttribute.Text);
+ var tooltip = Editor.Instance.CodeDocs.GetTooltip(member);
+ if (!string.IsNullOrEmpty(tooltip))
+ sb.Append("\n").Append(tooltip);
return sb.ToString();
}
diff --git a/Source/Editor/Surface/VisualScriptSurface.cs b/Source/Editor/Surface/VisualScriptSurface.cs
index b919c7c37..1c4d6c9a7 100644
--- a/Source/Editor/Surface/VisualScriptSurface.cs
+++ b/Source/Editor/Surface/VisualScriptSurface.cs
@@ -132,11 +132,7 @@ namespace FlaxEditor.Surface
node.DefaultValues[0] = Activator.CreateInstance(scriptType.Type);
node.Flags &= ~NodeFlags.NoSpawnViaGUI;
node.Title = scriptTypeName;
- node.Description = scriptTypeTypeName;
- var attributes = scriptType.GetAttributes(false);
- var tooltipAttribute = (TooltipAttribute)attributes.FirstOrDefault(x => x is TooltipAttribute);
- if (tooltipAttribute != null)
- node.Description += "\n" + tooltipAttribute.Text;
+ node.Description = Editor.Instance.CodeDocs.GetTooltip(scriptType);
// Create group archetype
var groupKey = new KeyValuePair(scriptTypeName, 2);
@@ -179,17 +175,14 @@ namespace FlaxEditor.Surface
_cache.Add(groupKey, group);
}
- var attributes = scriptType.GetAttributes(false);
- var tooltipAttribute = (TooltipAttribute)attributes.FirstOrDefault(x => x is TooltipAttribute);
+ var tooltip = Editor.Instance.CodeDocs.GetTooltip(scriptType);
// Create Pack node archetype
var node = (NodeArchetype)Archetypes.Packing.Nodes[6].Clone();
node.DefaultValues[0] = scriptTypeTypeName;
node.Flags &= ~NodeFlags.NoSpawnViaGUI;
node.Title = "Pack " + scriptTypeName;
- node.Description = scriptTypeTypeName;
- if (tooltipAttribute != null)
- node.Description += "\n" + tooltipAttribute.Text;
+ node.Description = tooltip;
((IList)group.Archetypes).Add(node);
// Create Unpack node archetype
@@ -197,9 +190,7 @@ namespace FlaxEditor.Surface
node.DefaultValues[0] = scriptTypeTypeName;
node.Flags &= ~NodeFlags.NoSpawnViaGUI;
node.Title = "Unpack " + scriptTypeName;
- node.Description = scriptTypeTypeName;
- if (tooltipAttribute != null)
- node.Description += "\n" + tooltipAttribute.Text;
+ node.Description = tooltip;
((IList)group.Archetypes).Add(node);
}
@@ -580,10 +571,7 @@ namespace FlaxEditor.Surface
var node = (NodeArchetype)Archetypes.Function.Nodes[2].Clone();
node.Flags &= ~NodeFlags.NoSpawnViaGUI;
- var attributes = member.GetAttributes(true);
- var tooltipAttribute = (TooltipAttribute)attributes.FirstOrDefault(x => x is TooltipAttribute);
- if (tooltipAttribute != null)
- node.Description = tooltipAttribute.Text;
+ node.Description = Editor.Instance.CodeDocs.GetTooltip(member);
node.DefaultValues[0] = name;
node.DefaultValues[1] = parameters.Length;
node.Title = "Override " + name;
diff --git a/Source/Editor/Windows/Assets/VisualScriptWindow.cs b/Source/Editor/Windows/Assets/VisualScriptWindow.cs
index 76e0b8797..4abb1e7b5 100644
--- a/Source/Editor/Windows/Assets/VisualScriptWindow.cs
+++ b/Source/Editor/Windows/Assets/VisualScriptWindow.cs
@@ -447,10 +447,7 @@ namespace FlaxEditor.Windows.Assets
continue;
var cmButton = cm.AddButton($"{name} (in {member.DeclaringType.Name})");
- var attributes = member.GetAttributes(true);
- var tooltipAttribute = (TooltipAttribute)attributes.FirstOrDefault(x => x is TooltipAttribute);
- if (tooltipAttribute != null)
- cmButton.TooltipText = tooltipAttribute.Text;
+ cmButton.TooltipText = Editor.Instance.CodeDocs.GetTooltip(member);
cmButton.Clicked += () =>
{
var surface = ((VisualScriptWindow)Values[0]).Surface;