/// <summary> /// アセット追加ボタンを描画します /// </summary> private void DrawAddAssetButton() { var singleLineHeight = EditorGUIUtility.singleLineHeight; var rect = new Rect { x = 0, y = 0, width = position.width / 3, height = singleLineHeight - 1 }; var current = Event.current; var controlId = GUIUtility.GetControlID(FocusType.Passive); if (GUILayout.Button("Add Asset", EditorStyles.toolbarButton, GUILayout.Width(rect.width))) { var filePath = EditorUtility.OpenFilePanel("UniBookmark", "", ""); var assetPath = FileUtil.GetProjectRelativePath(filePath); AddBookmark(assetPath); ReloadTreeView(); } switch (current.type) { case EventType.DragUpdated: case EventType.DragPerform: if (!rect.Contains(current.mousePosition)) { break; } DragAndDrop.visualMode = DragAndDropVisualMode.Copy; DragAndDrop.activeControlID = controlId; if (current.type == EventType.DragPerform) { DragAndDrop.AcceptDrag(); foreach (var draggedObject in DragAndDrop.objectReferences) { var path = AssetDatabase.GetAssetPath(draggedObject); AddBookmark(path); } BookmarkSaveData.Save(); ReloadTreeView(); DragAndDrop.activeControlID = 0; } current.Use(); break; } }
/// <summary> /// 各行の GUI を描画します /// </summary> protected override void RowGUI(RowGUIArgs args) { if (!(args.item is BookmarkData item) || !item.IsValid) { return; } var asset = item.Asset; var path = AssetDatabase.GetAssetPath(asset); var columns = args.GetNumVisibleColumns(); for (var i = 0; i < columns; i++) { var rect = args.GetCellRect(i); var columnIndex = ( ColumnType )args.GetColumn(i); switch (columnIndex) { case ColumnType.NAME: EditorGUIUtility.SetIconSize(new Vector2(16, 16)); var label = EditorGUIUtility.ObjectContent(asset, null); EditorGUI.LabelField(rect, label); break; case ColumnType.PING: if (GUI.Button(rect, "ping", EditorStyles.miniButton)) { EditorGUIUtility.PingObject(asset); } break; case ColumnType.OPEN: var isFolder = AssetDatabase.IsValidFolder(path); using (new EditorGUI.DisabledScope(isFolder)) { if (GUI.Button(rect, "open", EditorStyles.miniButton)) { AssetDatabase.OpenAsset(asset); } } break; case ColumnType.REMOVE: if (GUI.Button(rect, "x", EditorStyles.miniButton)) { BookmarkSaveData.List.Remove(item); BookmarkSaveData.Save(); OnReload?.Invoke(); } break; } } }
//================================================================================ // 関数 //================================================================================ /// <summary> /// 有効になった時に呼び出されます /// </summary> private void OnEnable() { BookmarkSaveData.Load(); var state = new TreeViewState(); m_header = new BookmarkHeader(null); m_treeView = new BookmarkTreeView(state, m_header) { searchString = SessionState.GetString(SEARCH_STRING_STATE_KEY, string.Empty) }; m_treeView.OnReload += ReloadTreeView; m_searchField = new SearchField(); m_searchField.downOrUpArrowKeyPressed += m_treeView.SetFocusAndEnsureSelectedItem; }