Skip to content

Commit 923bc7d

Browse files
committed
first commit
0 parents  commit 923bc7d

17 files changed

+542
-0
lines changed

Editor.meta

Lines changed: 8 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.
Lines changed: 71 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,71 @@
1+
using System.Linq;
2+
using UnityEditor;
3+
using UnityEngine;
4+
5+
namespace KoganeEditorLib.Internal
6+
{
7+
[InitializeOnLoad]
8+
internal static class ProjectWindowMenuCustomizer
9+
{
10+
private static ProjectWindowMenuSettings m_settings;
11+
12+
static ProjectWindowMenuCustomizer()
13+
{
14+
EditorApplication.projectWindowItemOnGUI += OnGUI;
15+
}
16+
17+
private static ProjectWindowMenuSettings GetSettings()
18+
{
19+
if ( m_settings == null )
20+
{
21+
m_settings = AssetDatabase
22+
.FindAssets( "t:ProjectWindowMenuSettings" )
23+
.Select( AssetDatabase.GUIDToAssetPath )
24+
.Select( AssetDatabase.LoadAssetAtPath<ProjectWindowMenuSettings> )
25+
.FirstOrDefault()
26+
;
27+
}
28+
29+
return m_settings;
30+
}
31+
32+
private static void OnGUI( string guid, Rect selectionRect )
33+
{
34+
if ( Event.current.type != EventType.ContextClick ) return;
35+
36+
var settings = GetSettings();
37+
38+
if ( settings == null ) return;
39+
40+
Event.current.Use();
41+
42+
var list = settings.List;
43+
var genericMenu = new GenericMenu();
44+
45+
for ( var i = 0; i < list.Count; i++ )
46+
{
47+
var data = list[ i ];
48+
var name = data.Name;
49+
50+
if ( data.IsSeparator )
51+
{
52+
genericMenu.AddSeparator( name );
53+
}
54+
else
55+
{
56+
var menuItemPath = data.MenuItemPath;
57+
var content = new GUIContent( name );
58+
59+
genericMenu.AddItem
60+
(
61+
content: content,
62+
@on: false,
63+
func: () => EditorApplication.ExecuteMenuItem( menuItemPath )
64+
);
65+
}
66+
}
67+
68+
genericMenu.ShowAsContext();
69+
}
70+
}
71+
}

Editor/ProjectWindowMenuCustomizer.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.
Lines changed: 204 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,204 @@
1+
using System;
2+
using System.Collections.Generic;
3+
using UnityEngine;
4+
5+
namespace KoganeEditorLib.Internal
6+
{
7+
[CreateAssetMenu( fileName = "ProjectWindowMenuSettings", order = 9001 )]
8+
internal sealed class ProjectWindowMenuSettings : ScriptableObject
9+
{
10+
[SerializeField] private Data[] m_list = null;
11+
12+
public IList<Data> List => m_list;
13+
14+
public void Reset()
15+
{
16+
m_list = new Data[0];
17+
}
18+
19+
public void ResetToDefault()
20+
{
21+
m_list = new[]
22+
{
23+
new Data( "Create/Folder", "Assets/Create/Folder" ),
24+
25+
new Data( "Create/" ),
26+
27+
new Data( "Create/C# Script", "Assets/Create/C# Script" ),
28+
29+
new Data( "Create/Shader/Standard Surface Shader", "Assets/Create/Shader/Standard Surface Shader" ),
30+
new Data( "Create/Shader/Unlit Shader", "Assets/Create/Shader/Unlit Shader" ),
31+
new Data( "Create/Shader/Image Effect Shader", "Assets/Create/Shader/Image Effect Shader" ),
32+
new Data( "Create/Shader/Compute Shader", "Assets/Create/Shader/Compute Shader" ),
33+
new Data( "Create/Shader/Ray Tracing Shader", "Assets/Create/Shader/Ray Tracing Shader" ),
34+
35+
new Data( "Create/Shader/" ),
36+
37+
new Data( "Create/Shader/Shader Variant Collection", "Assets/Create/Shader/Shader Variant Collection" ),
38+
39+
new Data( "Create/Testing/Tests Assembly Folder", "Assets/Create/Testing/Tests Assembly Folder" ),
40+
new Data( "Create/Testing/C# Test Script", "Assets/Create/Testing/C# Test Script" ),
41+
42+
new Data
43+
(
44+
"Create/Playables/Playable Behaviour C# Script",
45+
"Assets/Create/Playables/Playable Behaviour C# Script"
46+
),
47+
new Data
48+
(
49+
"Create/Playables/Playable Asset C# Script",
50+
"Assets/Create/Playables/Playable Asset C# Script"
51+
),
52+
53+
new Data( "Create/Assembly Definition", "Assets/Create/Assembly Definition" ),
54+
new Data( "Create/Assembly Definition Reference", "Assets/Create/Assembly Definition Reference" ),
55+
56+
new Data( "Create/TextMeshPro/Font Asset", "Assets/Create/TextMeshPro/Font Asset" ),
57+
new Data( "Create/TextMeshPro/Sprite Asset", "Assets/Create/TextMeshPro/Sprite Asset" ),
58+
new Data( "Create/TextMeshPro/Color Gradient", "Assets/Create/TextMeshPro/Color Gradient" ),
59+
new Data( "Create/TextMeshPro/Style Sheet", "Assets/Create/TextMeshPro/Style Sheet" ),
60+
61+
new Data( "Create/" ),
62+
63+
new Data( "Create/Scene", "Assets/Create/Scene" ),
64+
new Data( "Create/Prefab Variant", "Assets/Create/Prefab Variant" ),
65+
66+
new Data( "Create/" ),
67+
68+
new Data( "Create/Audio Mixer", "Assets/Create/Audio Mixer" ),
69+
70+
new Data( "Create/" ),
71+
72+
new Data( "Create/Material", "Assets/Create/Material" ),
73+
new Data( "Create/Lens Flare", "Assets/Create/Lens Flare" ),
74+
new Data( "Create/Render Texture", "Assets/Create/Render Texture" ),
75+
new Data( "Create/Lightmap Parameters", "Assets/Create/Lightmap Parameters" ),
76+
new Data( "Create/Custom Render Texture", "Assets/Create/Custom Render Texture" ),
77+
78+
new Data( "Create/" ),
79+
80+
new Data( "Create/Sprite Atlas", "Assets/Create/Sprite Atlas" ),
81+
82+
new Data( "Create/Sprites/Square", "Assets/Create/Sprites/Square" ),
83+
new Data( "Create/Sprites/Triangle", "Assets/Create/Sprites/Triangle" ),
84+
new Data( "Create/Sprites/Diamond", "Assets/Create/Sprites/Diamond" ),
85+
new Data( "Create/Sprites/Hexagon", "Assets/Create/Sprites/Hexagon" ),
86+
new Data( "Create/Sprites/Circle", "Assets/Create/Sprites/Circle" ),
87+
new Data( "Create/Sprites/Polygon", "Assets/Create/Sprites/Polygon" ),
88+
89+
new Data( "Create/Tile", "Assets/Create/Tile" ),
90+
91+
new Data( "Create/" ),
92+
93+
new Data( "Create/Animator Controller", "Assets/Create/Animator Controller" ),
94+
new Data( "Create/Animation", "Assets/Create/Animation" ),
95+
new Data( "Create/Animator Override Controller", "Assets/Create/Animator Override Controller" ),
96+
new Data( "Create/Avatar Mask", "Assets/Create/Avatar Mask" ),
97+
98+
new Data( "Create/" ),
99+
100+
new Data( "Create/Timeline", "Assets/Create/Timeline" ),
101+
new Data( "Create/Signal", "Assets/Create/Signal" ),
102+
103+
new Data( "Create/" ),
104+
105+
new Data( "Create/Physic Material", "Assets/Create/Physic Material" ),
106+
new Data( "Create/Physics Material 2D", "Assets/Create/Physics Material 2D" ),
107+
108+
new Data( "Create/" ),
109+
110+
new Data( "Create/GUI Skin", "Assets/Create/GUI Skin" ),
111+
new Data( "Create/Custom Font", "Assets/Create/Custom Font" ),
112+
113+
new Data( "Create/UIElements/USS File", "Assets/Create/UIElements/USS File" ),
114+
new Data( "Create/UIElements/UXML Template", "Assets/Create/UIElements/UXML Template" ),
115+
116+
new Data( "Create/UIElements/" ),
117+
118+
new Data( "Create/UIElements/Editor Window", "Assets/Create/UIElements/Editor Window" ),
119+
120+
new Data( "Create/" ),
121+
122+
new Data( "Create/Legacy/Cubemap", "Assets/Create/Legacy/Cubemap" ),
123+
124+
new Data( "Create/" ),
125+
126+
new Data( "Create/Brush", "Assets/Create/Brush" ),
127+
new Data( "Create/Terrain Layer", "Assets/Create/Terrain Layer" ),
128+
129+
new Data( "Show in Explorer", "Assets/Show in Explorer" ),
130+
new Data( "Open", "Assets/Open" ),
131+
new Data( "Delete", "Assets/Delete" ),
132+
new Data( "Rename", "Assets/Rename" ),
133+
new Data( "Copy Path", "Assets/Copy Path" ),
134+
135+
new Data(),
136+
137+
new Data( "Open Scene Additive", "Assets/Open Scene Additive" ),
138+
139+
new Data(),
140+
141+
new Data( "View in Package Manager", "Assets/View in Package Manager" ),
142+
143+
new Data(),
144+
145+
new Data( "Import New Asset...", "Assets/Import New Asset..." ),
146+
new Data( "Import Package/Custom Package...", "Assets/Import Package/Custom Package..." ),
147+
new Data( "Export Package", "Assets/Export Package..." ),
148+
new Data( "Find References In Scene", "Assets/Find References In Scene" ),
149+
new Data( "Select Dependencies", "Assets/Select Dependencies" ),
150+
151+
new Data(),
152+
153+
new Data( "Refresh", "Assets/Refresh" ),
154+
new Data( "Reimport", "Assets/Reimport" ),
155+
156+
new Data(),
157+
158+
new Data( "Reimport All", "Assets/Reimport All" ),
159+
160+
new Data(),
161+
162+
new Data( "Extract From Prefab", "Assets/Extract From Prefab" ),
163+
164+
new Data(),
165+
166+
new Data( "Run API Updater...", "Assets/Run API Updater..." ),
167+
168+
new Data(),
169+
170+
new Data( "Update UIElements Schema", "Assets/Update UIElements Schema" ),
171+
172+
new Data(),
173+
174+
new Data( "Open C# Project", "Assets/Open C# Project" ),
175+
};
176+
}
177+
178+
[Serializable]
179+
internal sealed class Data
180+
{
181+
[SerializeField] private string m_name = string.Empty;
182+
[SerializeField] private string m_menuItemPath = string.Empty;
183+
184+
public string Name => m_name;
185+
public string MenuItemPath => m_menuItemPath;
186+
public bool IsSeparator => string.IsNullOrWhiteSpace( m_menuItemPath );
187+
188+
public Data()
189+
{
190+
}
191+
192+
public Data( string name )
193+
{
194+
m_name = name;
195+
}
196+
197+
public Data( string name, string menuItemPath )
198+
{
199+
m_name = name;
200+
m_menuItemPath = menuItemPath;
201+
}
202+
}
203+
}
204+
}

Editor/ProjectWindowMenuSettings.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.
Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
using UnityEditor;
2+
using UnityEngine;
3+
4+
namespace KoganeEditorLib.Internal
5+
{
6+
[CustomPropertyDrawer( typeof( ProjectWindowMenuSettings.Data ) )]
7+
internal sealed class ProjectWindowMenuSettingsDataDrawer : PropertyDrawer
8+
{
9+
public override void OnGUI
10+
(
11+
Rect position,
12+
SerializedProperty property,
13+
GUIContent label
14+
)
15+
{
16+
using ( new EditorGUI.PropertyScope( position, label, property ) )
17+
{
18+
position.height = EditorGUIUtility.singleLineHeight;
19+
20+
var nameRect = new Rect( position )
21+
{
22+
width = position.width,
23+
};
24+
25+
var menuItemPathRect = new Rect( position )
26+
{
27+
y = nameRect.yMax + 2,
28+
};
29+
30+
var nameProperty = property.FindPropertyRelative( "m_name" );
31+
var menuItemProperty = property.FindPropertyRelative( "m_menuItemPath" );
32+
33+
EditorGUI.PropertyField( nameRect, nameProperty );
34+
EditorGUI.PropertyField( menuItemPathRect, menuItemProperty );
35+
}
36+
}
37+
}
38+
}

Editor/ProjectWindowMenuSettingsDataDrawer.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.

0 commit comments

Comments
 (0)