From d35a79faf15a58a1ca98bc80536d6ed14c7965b7 Mon Sep 17 00:00:00 2001 From: Anders Ejlersen Date: Sun, 14 Feb 2021 21:28:18 +0100 Subject: [PATCH] 0.4.0: Added double-click open to Favorites and History --- Editor/Favorites/Enums/EManipulatingState.cs | 1 + .../Utilities/FavoritesGUIUtility.cs | 19 ++++++++++++++- .../Favorites/Window/EditorFavoritesWindow.cs | 6 +++++ Editor/History/Utilities/HistoryGUIUtility.cs | 23 +++++++++++++++++++ Editor/History/Window/EditorHistoryWindow.cs | 13 ++++++++--- package.json | 2 +- 6 files changed, 59 insertions(+), 5 deletions(-) diff --git a/Editor/Favorites/Enums/EManipulatingState.cs b/Editor/Favorites/Enums/EManipulatingState.cs index 41a475d..91e031b 100644 --- a/Editor/Favorites/Enums/EManipulatingState.cs +++ b/Editor/Favorites/Enums/EManipulatingState.cs @@ -5,6 +5,7 @@ None, BeginClick, PerformedClick, + PerformedDoubleClick, EndClick, BeginContextClick, PerformedContextClick, diff --git a/Editor/Favorites/Utilities/FavoritesGUIUtility.cs b/Editor/Favorites/Utilities/FavoritesGUIUtility.cs index 3f0208b..6baf58a 100644 --- a/Editor/Favorites/Utilities/FavoritesGUIUtility.cs +++ b/Editor/Favorites/Utilities/FavoritesGUIUtility.cs @@ -12,6 +12,10 @@ namespace Game.NavigationTool.Editor.Favorite public static EManipulatingState manipulatingState; public static Vector2 manipulatingMouseOffset; public static Rect manipulatingRect; + + private static Favorites.Entry LAST_CLICK_ENTRY; + private static double LAST_CLICK_TIME; + private static int CLICK_COUNT; public static Favorites.Entry hoverEntry; @@ -40,9 +44,22 @@ namespace Game.NavigationTool.Editor.Favorite if (manipulatingState == EManipulatingState.BeginClick) { if (intersects && Event.current.button == 0) - SetManipulating(rect, entry, EManipulatingState.PerformedClick); + { + double dt = EditorApplication.timeSinceStartup - LAST_CLICK_TIME; + + if (dt < 0.3 && CLICK_COUNT == 1 && LAST_CLICK_ENTRY == entry) + CLICK_COUNT++; + else + CLICK_COUNT = 1; + + LAST_CLICK_ENTRY = entry; + LAST_CLICK_TIME = EditorApplication.timeSinceStartup; + SetManipulating(rect, entry, CLICK_COUNT == 1 ? EManipulatingState.PerformedClick : EManipulatingState.PerformedDoubleClick); + } else + { SetManipulating(rect, entry, EManipulatingState.EndClick); + } } else if (manipulatingState == EManipulatingState.BeginContextClick) { diff --git a/Editor/Favorites/Window/EditorFavoritesWindow.cs b/Editor/Favorites/Window/EditorFavoritesWindow.cs index 6974d00..5541295 100644 --- a/Editor/Favorites/Window/EditorFavoritesWindow.cs +++ b/Editor/Favorites/Window/EditorFavoritesWindow.cs @@ -101,6 +101,12 @@ namespace Game.NavigationTool.Editor.Favorite favorites.Save(); } + FavoritesGUIUtility.ClearManipulating(); + break; + case EManipulatingState.PerformedDoubleClick: + if (entry.isAsset) + AssetDatabase.OpenAsset(favorites.GetObject(entry)); + FavoritesGUIUtility.ClearManipulating(); break; case EManipulatingState.BeginDrag: diff --git a/Editor/History/Utilities/HistoryGUIUtility.cs b/Editor/History/Utilities/HistoryGUIUtility.cs index 5cd11c8..0c2f49d 100644 --- a/Editor/History/Utilities/HistoryGUIUtility.cs +++ b/Editor/History/Utilities/HistoryGUIUtility.cs @@ -9,8 +9,13 @@ namespace Game.NavigationTool.Editor.History private static readonly int ENTRY_HASH = "DrawHistoryEntry".GetHashCode(); public static bool isClicked; + public static bool isDoubleClick; public static HistoryList.Entry currentEntry; + private static HistoryList.Entry LAST_CLICK_ENTRY; + private static double LAST_CLICK_TIME; + private static int CLICK_COUNT; + public static void DrawEntry(Rect rect, HistoryList.Entry entry, Styles styles, bool ignoreIndentLevel = false) { int id = GUIUtility.GetControlID(ENTRY_HASH, FocusType.Passive, rect); @@ -31,6 +36,24 @@ namespace Game.NavigationTool.Editor.History { isClicked = intersects; + if (isClicked) + { + double dt = EditorApplication.timeSinceStartup - LAST_CLICK_TIME; + + if (dt < 0.3 && CLICK_COUNT == 1 && LAST_CLICK_ENTRY == entry) + CLICK_COUNT++; + else + CLICK_COUNT = 1; + + LAST_CLICK_ENTRY = entry; + LAST_CLICK_TIME = EditorApplication.timeSinceStartup; + isDoubleClick = CLICK_COUNT == 2; + } + else + { + currentEntry = null; + } + if (!isClicked) currentEntry = null; diff --git a/Editor/History/Window/EditorHistoryWindow.cs b/Editor/History/Window/EditorHistoryWindow.cs index cfbee8e..ed70591 100644 --- a/Editor/History/Window/EditorHistoryWindow.cs +++ b/Editor/History/Window/EditorHistoryWindow.cs @@ -60,9 +60,16 @@ namespace Game.NavigationTool.Editor.History if (obj != null) { - HistoryListPostProcess.IgnoreNextSelectionChange(); - Selection.activeObject = obj; - EditorGUIUtility.PingObject(obj); + if (HistoryGUIUtility.isDoubleClick) + { + AssetDatabase.OpenAsset(obj); + } + else + { + HistoryListPostProcess.IgnoreNextSelectionChange(); + Selection.activeObject = obj; + EditorGUIUtility.PingObject(obj); + } } HistoryGUIUtility.Used(); diff --git a/package.json b/package.json index 2481682..3bdfadf 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "com.module.navigationtool", - "version": "0.3.0", + "version": "0.4.0", "displayName": "Module.NavigationTool", "description": "Support for navigation tools, like favorites and history", "unity": "2019.2",