void onContextMenu_MoveToTop(object userData) { FavorityItem item = (FavorityItem)userData; items.Remove(item); items.Insert(0, item); }
void onContextMenu_MoveToBottom(object userData) { FavorityItem item = (FavorityItem)userData; items.Remove(item); items.Add(item); }
void removeItem(FavorityItem item) { items.Remove(item); highlightedItem = null; save(); }
void onContextMenu_MoveDown(object userData) { FavorityItem item = (FavorityItem)userData; int index = items.IndexOf(item); if (index < items.Count - 1) { items.RemoveAt(index); items.Insert(index + 1, item); } }
void onContextMenu_MoveUp(object userData) { FavorityItem item = (FavorityItem)userData; int index = items.IndexOf(item); if (index > 0) { items.RemoveAt(index); items.Insert(index - 1, item); } }
void onNameChanged(string newName) { //Debug.Log("onNameChanged"); if (editedItem != null) { editedItem.customName = newName; editedItem = null; save(); Repaint(); } }
void open(FavorityItem item) { if (item.isAsset) { //AssetDatabase.OpenAsset(item.unityObject); // maybe less direct, but will also open folders in explorer... nice! string path = AssetDatabase.GetAssetPath(item.unityObject); EditorUtility.OpenWithDefaultApp(path); } else { Selection.activeObject = item.unityObject; SceneView.FrameLastActiveSceneView(); } }
void showContextMenu(FavorityItem item) { GenericMenu menu = new GenericMenu(); menu.AddItem(new GUIContent("Rename shortcut"), false, onContextMenu_Rename, item); menu.AddItem(new GUIContent("Delete shortcut"), false, onContextMenu_Delete, item); menu.AddSeparator(""); menu.AddItem(new GUIContent("Move up"), false, onContextMenu_MoveUp, item); menu.AddItem(new GUIContent("Move down"), false, onContextMenu_MoveDown, item); menu.AddItem(new GUIContent("Move to top"), false, onContextMenu_MoveToTop, item); menu.AddItem(new GUIContent("Move to bottom"), false, onContextMenu_MoveToBottom, item); menu.AddSeparator(""); menu.AddItem(new GUIContent("Select"), false, onContextMenu_Select, item); menu.AddItem(new GUIContent("Open"), false, onContextMenu_Open, item); menu.ShowAsContext(); }
void select(FavorityItem item) { Selection.activeObject = item.unityObject; EditorGUIUtility.PingObject(item.unityObject); //Object[] windows = Resources.FindObjectsOfTypeAll(typeof(EditorWindow)); //foreach (EditorWindow window in windows) //{ // Debug.Log(window.title + " - " + window.GetType().Name); //} /*if (AssetDatabaseExt.IsDirectory(item.unityObject)) * { * Debug.Log("dir"); * AssetDatabase.OpenAsset(item.unityObject); * } * else * { * Selection.activeObject = item.unityObject; * }*/ }
void startRename(FavorityItem item) { editedItem = item; TextInputDialog.show(item.name, onNameChanged); }
void onContextMenu_Delete(object userData) { FavorityItem item = (FavorityItem)userData; removeItem(item); }
void onContextMenu_Rename(object userData) { FavorityItem item = (FavorityItem)userData; startRename(item); }
void onContextMenu_Open(object userData) { FavorityItem item = (FavorityItem)userData; open(item); }
void onContextMenu_Select(object userData) { FavorityItem item = (FavorityItem)userData; select(item); }
Rect drawItem(int _itemIndex, bool _isDragged, Rect _dragRect) { var item = items[_itemIndex]; GUIStyle style; if (item.unityObject) { itemContent.text = item.name; itemContent.image = item.icon; style = (item == highlightedItem) ? Styles.itemHighlight : Styles.itemNormal; } else { itemContent.text = "'{0}' (missing)".format(item.unityObjectName); itemContent.image = null; style = Styles.itemMissing; } // reserve the rect even if dragged var rect = GUILayoutUtility.GetRect(itemContent, style); // lazy but this gets the whole width for some reason, yay! if (_isDragged) { var size = Styles.itemDragged.CalcSize(itemContent); _dragRect = new Rect(_dragRect.x, _dragRect.y, size.x, size.y); GUI.Box(_dragRect, itemContent, Styles.itemDragged); return(rect); } GUI.Label(rect, itemContent, style); switch (@event.type) { // highlight & select on click / open on double-click case EventType.MouseDown: { Rect labelRect = GUILayoutUtility.GetLastRect(); if (labelRect.Contains(Event.current.mousePosition)) { highlightedItem = item; switch (Event.current.clickCount) { case 1: select(item); Event.current.Use(); break; case 2: open(item); Event.current.Use(); break; } } } break; // context menu case EventType.ContextClick: { Rect labelRect = GUILayoutUtility.GetLastRect(); if (labelRect.Contains(Event.current.mousePosition)) { showContextMenu(item); Event.current.Use(); } } break; } return(rect); }