Skip to content

Commit

Permalink
Merge pull request #16 from RoyTheunissen/feature/mac-improvements
Browse files Browse the repository at this point in the history
Feature/mac improvements
  • Loading branch information
RoyTheunissen authored Aug 1, 2022
2 parents 682b595 + ea35304 commit 5f3a389
Show file tree
Hide file tree
Showing 5 changed files with 118 additions and 55 deletions.
12 changes: 12 additions & 0 deletions Editor/CustomEditors/PaletteEntryDrawer.cs
Original file line number Diff line number Diff line change
Expand Up @@ -179,6 +179,9 @@ protected virtual void OnContextMenu(GenericMenu menu, EntryType entry, Serializ
menu.AddItem(new GUIContent(OpenText), false, entry.Open);
if (entry.CanRename)
menu.AddItem(new GUIContent("Rename"), false, StartRename, entry);

// Calling it "Delete" instead of "Remove" here to make it more distinct from "Rename" to avoid mistakes.
menu.AddItem(new GUIContent("Delete"), false, DeleteSelectedEntries, entry);
}

private void StartRename(object userData)
Expand All @@ -191,6 +194,15 @@ private void StartRename(object userData)
window.StartEntryRename(entry);
}

private void DeleteSelectedEntries(object userData)
{
AssetPaletteWindow window = EditorWindow.GetWindow<AssetPaletteWindow>();
if (window == null)
return;

window.RemoveSelectedEntries();
}

protected void ShowAssetInExplorer(Object asset)
{
string pathRelativeToProject = AssetDatabase.GetAssetPath(asset);
Expand Down
58 changes: 34 additions & 24 deletions Editor/Windows/AssetPaletteWindow.cs
Original file line number Diff line number Diff line change
Expand Up @@ -138,7 +138,7 @@ private void UpdateMouseOverStates()
isMouseInEntriesPanel = !isMouseInHeader && !isMouseInFooter && !isMouseInFolderPanel;

// Store this once so that specific entries can consider if they should be handling an asset drop, or
// if the entry panel as a whole should be handling.
// if the entry panel as a whole should be handling it.
isDraggingAssetIntoEntryPanel = (Event.current.type == EventType.DragUpdated ||
Event.current.type == EventType.DragPerform) && isMouseInEntriesPanel &&
DragAndDrop.objectReferences.Length > 0 &&
Expand Down Expand Up @@ -183,33 +183,43 @@ private void PerformKeyboardShortcuts()
return;
}

if (Event.current.keyCode == KeyCode.Delete && !IsRenaming)
if ((Event.current.keyCode == KeyCode.Delete ||
Event.current.command && Event.current.keyCode == KeyCode.Backspace) && !IsRenaming)
{
if (isMouseInEntriesPanel)
{
// Pressing Delete will remove all selected entries from the palette.
foreach (PaletteEntry entry in entriesSelected)
{
RemoveEntry(entry);
}

ClearEntrySelection();
Repaint();
}
else if (isMouseInFolderPanel && HasCollection && CurrentCollection.Folders.Count > 1 &&
!IsDraggingFolder)
{
CurrentCollectionSerializedObject.Update();
SerializedProperty foldersProperty = CurrentCollectionSerializedObject.FindProperty("folders");
foldersProperty.DeleteArrayElementAtIndex(SelectedFolderIndex);
CurrentCollectionSerializedObject.ApplyModifiedProperties();
RemoveSelectedEntries();
else if (isMouseInFolderPanel && !IsDraggingFolder)
RemoveSelectedFolder();
}
}

// Select the last folder.
SelectedFolderIndex = CurrentCollection.Folders.Count - 1;
private void RemoveSelectedFolder()
{
if (!HasCollection || CurrentCollection.Folders.Count <= 1)
return;

CurrentCollectionSerializedObject.Update();
SerializedProperty foldersProperty = CurrentCollectionSerializedObject.FindProperty("folders");
foldersProperty.DeleteArrayElementAtIndex(SelectedFolderIndex);
CurrentCollectionSerializedObject.ApplyModifiedProperties();

Repaint();
}
}
// Select the last folder.
SelectedFolderIndex = CurrentCollection.Folders.Count - 1;

Repaint();
}

private void RenameSelectedFolder()
{
StartFolderRename(SelectedFolder);
}

public void RemoveSelectedEntries()
{
RemoveEntries(entriesSelected, true);

ClearEntrySelection();
Repaint();
}

private void StopAllRenames(bool isCancel)
Expand Down
47 changes: 31 additions & 16 deletions Editor/Windows/AssetPaletteWindowEntryPanel.cs
Original file line number Diff line number Diff line change
Expand Up @@ -204,15 +204,15 @@ private int IndexOfEntry(PaletteEntry entry)
return -1;
}

private void RemoveEntry(PaletteEntry entry, bool apply = true)
private void RemoveEntry(PaletteEntry entry, bool apply)
{
int index = IndexOfEntry(entry);

if (index != -1)
RemoveEntryAt(index, apply);
}
private void RemoveEntries(List<PaletteEntry> entries, bool apply = true)

private void RemoveEntries(List<PaletteEntry> entries, bool apply)
{
if (apply)
CurrentCollectionSerializedObject.Update();
Expand Down Expand Up @@ -538,21 +538,36 @@ private void HandleEntrySelection(int index, Rect rect, PaletteEntry entry, ref
!isResizingFolderPanel && isMouseInEntriesPanel && !IsZoomLevelFocused &&
entriesSelected.Contains(entryBelowCursorOnMouseDown))
{
DragAndDrop.PrepareStartDrag();
List<Object> selectedAssets = new List<Object>();
foreach (PaletteEntry selectedEntry in entriesSelected)
{
if (selectedEntry is PaletteAsset paletteAsset)
selectedAssets.Add(paletteAsset.Asset);
}
StartEntriesDrag();
}
else if (Event.current.type == EventType.DragExited)
{
CancelEntriesDrag();
}
}

DragAndDrop.objectReferences = selectedAssets.ToArray();
// Mark the drag as being an asset palette entry drag, so we know not to accept it again ourselves.
// Also pass along the name of the directory so we can handle stuff like dragging assets out into
// another folder (but ignore the folder it was originally dragged from).
DragAndDrop.SetGenericData(EntryDragGenericDataType, SelectedFolder.Name);
DragAndDrop.StartDrag("Drag from Asset Palette");
private void StartEntriesDrag()
{
DragAndDrop.PrepareStartDrag();
List<Object> selectedAssets = new List<Object>();
foreach (PaletteEntry selectedEntry in entriesSelected)
{
if (selectedEntry is PaletteAsset paletteAsset)
selectedAssets.Add(paletteAsset.Asset);
}

DragAndDrop.objectReferences = selectedAssets.ToArray();
// Mark the drag as being an asset palette entry drag, so we know not to accept it again ourselves.
// Also pass along the name of the directory so we can handle stuff like dragging assets out into
// another folder (but ignore the folder it was originally dragged from).
DragAndDrop.SetGenericData(EntryDragGenericDataType, SelectedFolder.Name);
string dragName = selectedAssets.Count == 1 ? selectedAssets[0].ToString() : "<multiple>";
DragAndDrop.StartDrag(dragName);
}

private static void CancelEntriesDrag()
{
DragAndDrop.SetGenericData(EntryDragGenericDataType, null);
}

private void DrawEntryPanelMessage(bool hasCollection)
Expand Down
54 changes: 40 additions & 14 deletions Editor/Windows/AssetPaletteWindowFolderPanel.cs
Original file line number Diff line number Diff line change
Expand Up @@ -245,20 +245,25 @@ private void DrawFolderPanel()

EditorGUILayout.EndScrollView();

if (IsDraggingFolder && Event.current.type == EventType.DragUpdated ||
Event.current.type == EventType.DragPerform)
if (IsDraggingFolder)
{
if (!isMouseInFolderPanel)
DragAndDrop.visualMode = DragAndDropVisualMode.Rejected;
else
if (Event.current.type == EventType.DragUpdated || Event.current.type == EventType.DragPerform)
{
DragAndDrop.visualMode = currentFolderDragIndex < folderToDragIndex || currentFolderDragIndex > folderToDragIndex + 1
? DragAndDropVisualMode.Move
: DragAndDropVisualMode.Rejected;
}
if (!isMouseInFolderPanel)
DragAndDrop.visualMode = DragAndDropVisualMode.Rejected;
else
{
DragAndDrop.visualMode = currentFolderDragIndex < folderToDragIndex ||
currentFolderDragIndex > folderToDragIndex + 1
? DragAndDropVisualMode.Move
: DragAndDropVisualMode.Rejected;
}

if (Event.current.type == EventType.DragPerform)
StopFolderDrag();
if (Event.current.type == EventType.DragPerform)
StopFolderDrag();
}
else if (Event.current.type == EventType.DragExited)
CancelFolderDrag();
}

DrawResizableFolderPanelDivider();
Expand Down Expand Up @@ -309,7 +314,7 @@ private void DrawFolders(SerializedProperty foldersProperty, bool didClickAnywhe
{
// First remove all of the selected entries from the current folder.
List<PaletteEntry> entriesToMove = new List<PaletteEntry>(entriesSelected);
RemoveEntries(entriesToMove);
RemoveEntries(entriesToMove, true);

// Make the recipient folder the current folder.
SelectedFolder = folder;
Expand Down Expand Up @@ -353,6 +358,9 @@ private void DrawFolders(SerializedProperty foldersProperty, bool didClickAnywhe
PaletteDrawing.DrawFolder(folderRect, folderProperty, folder);
}

if (Event.current.type == EventType.MouseDown && Event.current.button == 1 && isMouseOver)
DoFolderContextMenu(folder);

// Dragging and dropping folders.
if (Event.current.type == EventType.MouseDrag && Event.current.button == 0 && isMouseOver &&
!isResizingFolderPanel && !isDraggingAssets && folderBelowCursorOnMouseDown == folder)
Expand Down Expand Up @@ -413,7 +421,18 @@ private void DrawFolders(SerializedProperty foldersProperty, bool didClickAnywhe
}
}
}


private void DoFolderContextMenu(PaletteFolder folder)
{
GenericMenu menu = new GenericMenu();
menu.AddItem(new GUIContent("Rename"), false, RenameSelectedFolder);

if (CurrentCollection.Folders.Count > 1)
menu.AddItem(new GUIContent("Delete"), false, RemoveSelectedFolder);

menu.ShowAsContext();
}

private void DrawResizableFolderPanelDivider()
{
EditorGUI.DrawRect(DividerRect, DividerColor);
Expand Down Expand Up @@ -447,9 +466,14 @@ private void StartFolderDrag(PaletteFolder folder)
{
DragAndDrop.PrepareStartDrag();
DragAndDrop.SetGenericData(FolderDragGenericDataType, folder);
DragAndDrop.StartDrag("Drag Palette Folder");
DragAndDrop.StartDrag($"{folder.Name} (Asset Palette Folder)");
folderToDragIndex = CurrentCollection.Folders.IndexOf(folder);
}

private void CancelFolderDrag()
{
DragAndDrop.SetGenericData(FolderDragGenericDataType, null);
}

private void StopFolderDrag()
{
Expand Down Expand Up @@ -479,6 +503,8 @@ private void StopFolderDrag()

SelectedFolderIndex = currentFolderDragIndex;

CancelFolderDrag();

Repaint();
}

Expand Down
2 changes: 1 addition & 1 deletion package.json
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
{
"name": "com.roytheunissen.assetpalette",
"displayName": "Asset Palette",
"version": "0.1.4",
"version": "0.1.5",
"unity": "2021.3",
"description": "Allows you to quickly organize assets for certain workflows, such as organizing prefabs for level design.",
"keywords": [
Expand Down

0 comments on commit 5f3a389

Please sign in to comment.