12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061 |
- using System;
-
- using UnityEditor;
- using UnityEditor.VersionControl;
-
- using Unity.PlasticSCM.Editor.AssetUtils;
-
- namespace Unity.PlasticSCM.Editor.AssetMenu
- {
- internal class ProjectViewAssetSelection : AssetOperations.IAssetSelection
- {
- internal ProjectViewAssetSelection(Action assetSelectionChangedAction)
- {
- mAssetSelectionChangedAction = assetSelectionChangedAction;
-
- Selection.selectionChanged += SelectionChanged;
- }
-
- internal void Dispose()
- {
- Selection.selectionChanged -= SelectionChanged;
- }
-
- void SelectionChanged()
- {
- // Selection.selectionChanged gets triggered on both
- // project view and scene view. We only want to trigger
- // the action if user selects on project view (has assets)
- if (HasSelectedAssets())
- mAssetSelectionChangedAction();
- }
-
- AssetList AssetOperations.IAssetSelection.GetSelectedAssets()
- {
- if (Selection.assetGUIDs.Length == 0)
- return new AssetList();
-
- AssetList result = new AssetList();
-
- foreach (string guid in Selection.assetGUIDs)
- {
- string assetPath = AssetsPath.GetFullPath.ForGuid(guid);
-
- if (string.IsNullOrEmpty(assetPath))
- continue;
-
- result.Add(new Asset(assetPath));
- }
-
- return result;
- }
-
- bool HasSelectedAssets()
- {
- // Objects in project view have GUIDs, objects in scene view don't
- return Selection.assetGUIDs.Length > 0;
- }
-
- Action mAssetSelectionChangedAction;
- }
- }
|