Skip to content

Commit ce6d52d

Browse files
committed
feat: Add a button to allow clear messages
1 parent 79b4d4d commit ce6d52d

File tree

6 files changed

+91
-12
lines changed

6 files changed

+91
-12
lines changed

Editor/EditorMessageUtility.cs

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -95,13 +95,20 @@ public static Texture GetCustomDataIcon()
9595
return EditorGUIUtility.IconContent("animation.play").image;
9696
}
9797

98+
public static Texture GetClearIcon()
99+
{
100+
return EditorGUIUtility.IconContent("clear").image;
101+
}
102+
98103

99-
public static Image NewImage(Texture image = null, string tooltip = null, DisplayStyle display = DisplayStyle.Flex)
104+
public static Image NewImage(Texture image = null, string tooltip = null,
105+
DisplayStyle display = DisplayStyle.Flex, PickingMode pickingMode = PickingMode.Ignore)
100106
{
101107
Image imageElement = new Image
102108
{
103109
tooltip = tooltip,
104110
image = image,
111+
pickingMode = pickingMode,
105112
style =
106113
{
107114
display = display,

Editor/MessageBanner.cs

Lines changed: 10 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -31,14 +31,16 @@ public bool ShowMessageTypeCount
3131
}
3232
}
3333

34-
public object Source { get; private set; }
35-
public string SourceName { get; private set; }
34+
public object Source { get; set; }
35+
public string SourceName { get; set; }
36+
public bool AllowClearMessages { get; set; }
3637
public IList<Message> Messages { get; private set; }
3738
public int CurrentMessageIndex { get; private set; }
3839

3940

40-
public MessageBanner(object source, string sourceName, bool showMessageTypeCount = true)
41-
: this(null, source, sourceName, showMessageTypeCount) { }
41+
public MessageBanner(object source, string sourceName,
42+
bool showMessageTypeCount = true, bool allowClearMessages = false)
43+
: this(null, source, sourceName, showMessageTypeCount, allowClearMessages) { }
4244

4345
/// <summary>
4446
/// 消息横幅。
@@ -48,12 +50,13 @@ public MessageBanner(object source, string sourceName, bool showMessageTypeCount
4850
/// <param name="sourceName">调用源的名字。</param>
4951
/// <param name="showMessageTypeCount">是否显示各类型消息的计数。</param>
5052
public MessageBanner(IList<Message> messages, object source, string sourceName,
51-
bool showMessageTypeCount = true)
53+
bool showMessageTypeCount = true, bool allowClearMessages = false)
5254
{
5355
_showMessageTypeCount = showMessageTypeCount;
5456
Messages = messages;
5557
Source = source;
5658
SourceName = sourceName;
59+
AllowClearMessages = allowClearMessages;
5760

5861
style.flexDirection = FlexDirection.Row;
5962
style.paddingLeft = 4;
@@ -208,9 +211,9 @@ private void RefreshMessageTypeCountDisplay()
208211

209212
private void OnClick(ClickEvent evt)
210213
{
211-
if (evt.clickCount == 2)
214+
if (evt.clickCount == 2 && Messages != null && Messages.Count > 0)
212215
{
213-
MessageViewer.Open(Messages, Source, SourceName);
216+
MessageViewer.Open(Messages, Source, SourceName, AllowClearMessages);
214217
}
215218
}
216219

Editor/MessageViewer.cs

Lines changed: 29 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,8 @@ public class MessageViewer : EditorWindow
2121
/// <param name="source">调用源。当调用源变为null时,消息查看器窗口会自动关闭。若传入null,则消息查看器窗口不会自动关闭。</param>
2222
/// <param name="sourceName">调用源的名字。会出现在消息查看器窗口标题中。</param>
2323
/// <returns></returns>
24-
public static MessageViewer Open(IList<Message> messages, object source, string sourceName)
24+
public static MessageViewer Open(IList<Message> messages, object source, string sourceName,
25+
bool allowClearMessages = true)
2526
{
2627
if (source == null)
2728
{
@@ -32,6 +33,7 @@ public static MessageViewer Open(IList<Message> messages, object source, string
3233
_sourcelessInstance._sourceless = true;
3334
}
3435

36+
_sourcelessInstance._showClearButton = allowClearMessages;
3537
_sourcelessInstance.SetMessages(messages);
3638
_sourcelessInstance.Show();
3739
_sourcelessInstance.Focus();
@@ -47,15 +49,16 @@ public static MessageViewer Open(IList<Message> messages, object source, string
4749

4850
viewer.titleContent = new GUIContent($"Message Viewer({sourceName ?? source})");
4951
viewer.Source = source;
52+
viewer._showClearButton = allowClearMessages;
5053
viewer.SetMessages(messages);
5154
viewer.Show();
5255
viewer.Focus();
5356
return viewer;
5457
}
5558

56-
public static MessageViewer Open(object source, string sourceName)
59+
public static MessageViewer Open(object source, string sourceName, bool allowClearMessages = true)
5760
{
58-
return Open(null, source, sourceName);
61+
return Open(null, source, sourceName, allowClearMessages);
5962
}
6063

6164

@@ -69,6 +72,7 @@ public static MessageViewer Open(object source, string sourceName)
6972
private MessageTypeToggle _infoMessageToggle;
7073
private MessageTypeToggle _warningMessageToggle;
7174
private MessageTypeToggle _errorMessageToggle;
75+
private ToolbarButton _clearButton;
7276
private ListView _messageListView;
7377
private MessageDetailsElement _messageDetailsElement;
7478

@@ -110,6 +114,9 @@ public static MessageViewer Open(object source, string sourceName)
110114
[SerializeField]
111115
[HideInInspector]
112116
private bool _showErrorMessage = true;
117+
[SerializeField]
118+
[HideInInspector]
119+
private bool _showClearButton;
113120

114121
#endregion
115122

@@ -249,6 +256,19 @@ private void CreateGUI()
249256
_errorMessageToggle.RegisterValueChangedCallback(OnMessageTypeToggleChanged);
250257
typeToggleContainer.Add(_errorMessageToggle);
251258

259+
// Clear Button
260+
_clearButton = new ToolbarImageButton(EditorMessageUtility.GetClearIcon(), ClearMessages)
261+
{
262+
tooltip = "Clear All Messages",
263+
style =
264+
{
265+
width = 22,
266+
flexShrink = 0,
267+
display = _showClearButton ? DisplayStyle.Flex : DisplayStyle.None,
268+
}
269+
};
270+
toolbar.Add(_clearButton);
271+
252272
#endregion
253273

254274

@@ -487,6 +507,12 @@ private bool TestMessageSearchPattern(Message message)
487507
return message.message.Contains(_searchPattern, StringComparison.OrdinalIgnoreCase);
488508
}
489509

510+
private void ClearMessages()
511+
{
512+
Messages?.Clear();
513+
Refresh();
514+
}
515+
490516
private void TryClose()
491517
{
492518
if (_sourcelessInstance == this)

Editor/ToolbarImageButton.cs

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
using System;
2+
using UnityEditor.UIElements;
3+
using UnityEngine;
4+
using UnityEngine.UIElements;
5+
6+
namespace GBG.EditorMessages.Editor
7+
{
8+
internal class ToolbarImageButton : ToolbarButton
9+
{
10+
public Texture Image
11+
{
12+
get => _image.image;
13+
set => _image.image = value;
14+
}
15+
16+
private readonly Image _image;
17+
18+
19+
public ToolbarImageButton(Action clickEvent) : base(clickEvent)
20+
{
21+
float iconSize = EditorMessageUtility.GlobalIconSize;
22+
23+
_image = EditorMessageUtility.NewImage();
24+
Insert(0, _image);
25+
}
26+
27+
public ToolbarImageButton(Texture image, Action clickEvent) : this(clickEvent)
28+
{
29+
Image = image;
30+
}
31+
}
32+
}

Editor/ToolbarImageButton.cs.meta

Lines changed: 11 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "com.greenbamboogames.editormessages",
3-
"version": "1.0.2",
3+
"version": "1.0.3",
44
"displayName": "Editor Messages!",
55
"description": "Show custom messages in Unity Editor.",
66
"unity": "2022.3",

0 commit comments

Comments
 (0)