You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 

164 lines
6.3 KiB

using System.Linq;
using UnityEngine;
using UnityEngine.Experimental.UIElements;
namespace UnityEditor.PackageManager.UI
{
#if !UNITY_2018_3_OR_NEWER
internal class PackageManangerToolbarFactory : UxmlFactory<PackageManagerToolbar>
{
protected override PackageManagerToolbar DoCreate(IUxmlAttributes bag, CreationContext cc)
{
return new PackageManagerToolbar();
}
}
#endif
internal class PackageManagerToolbar : VisualElement
{
#if UNITY_2018_3_OR_NEWER
internal new class UxmlFactory : UxmlFactory<PackageManagerToolbar> { }
#endif
private readonly VisualElement root;
[SerializeField]
private PackageFilter selectedFilter = PackageFilter.All;
public PackageManagerToolbar()
{
root = Resources.GetTemplate("PackageManagerToolbar.uxml");
Add(root);
root.StretchToParentSize();
SetFilter(PackageCollection.Instance.Filter);
RegisterCallback<AttachToPanelEvent>(OnEnterPanel);
RegisterCallback<DetachFromPanelEvent>(OnLeavePanel);
}
public void GrabFocus()
{
SearchToolbar.GrabFocus();
}
public new void SetEnabled(bool enable)
{
base.SetEnabled(enable);
FilterButton.SetEnabled(enable);
AdvancedButton.SetEnabled(enable);
SearchToolbar.SetEnabled(enable);
}
private static string GetFilterDisplayName(PackageFilter filter)
{
switch (filter)
{
case PackageFilter.All:
return "All packages";
case PackageFilter.Local:
return "In Project";
case PackageFilter.Modules:
return "Built-in packages";
case PackageFilter.None:
return "None";
default:
return filter.ToString();
}
}
private void SetFilter(object obj)
{
var previouSelectedFilter = selectedFilter;
selectedFilter = (PackageFilter) obj;
FilterButton.text = string.Format("{0} ▾", GetFilterDisplayName(selectedFilter));
if (selectedFilter != previouSelectedFilter)
PackageCollection.Instance.SetFilter(selectedFilter);
}
private void OnFilterButtonMouseDown(MouseDownEvent evt)
{
if (evt.propagationPhase != PropagationPhase.AtTarget)
return;
var menu = new GenericMenu();
menu.AddItem(new GUIContent(GetFilterDisplayName(PackageFilter.All)),
selectedFilter == PackageFilter.All,
SetFilter, PackageFilter.All);
menu.AddItem(new GUIContent(GetFilterDisplayName(PackageFilter.Local)),
selectedFilter == PackageFilter.Local,
SetFilter, PackageFilter.Local);
menu.AddSeparator("");
menu.AddItem(new GUIContent(GetFilterDisplayName(PackageFilter.Modules)),
selectedFilter == PackageFilter.Modules,
SetFilter, PackageFilter.Modules);
var menuPosition = new Vector2(FilterButton.layout.xMin, FilterButton.layout.center.y);
menuPosition = this.LocalToWorld(menuPosition);
var menuRect = new Rect(menuPosition, Vector2.zero);
menu.DropDown(menuRect);
}
private void OnAdvancedButtonMouseDown(MouseDownEvent evt)
{
if (evt.propagationPhase != PropagationPhase.AtTarget)
return;
var menu = new GenericMenu();
menu.AddItem(new GUIContent("Show preview packages"), PackageManagerPrefs.ShowPreviewPackages, TogglePreviewPackages);
//menu.AddItem(new GUIContent("Reset to defaults"), false, ResetToDefaultsClick);
var menuPosition = new Vector2(AdvancedButton.layout.xMax + 30, AdvancedButton.layout.center.y);
menuPosition = this.LocalToWorld(menuPosition);
var menuRect = new Rect(menuPosition, Vector2.zero);
menu.DropDown(menuRect);
}
private static void TogglePreviewPackages()
{
var showPreviewPackages = PackageManagerPrefs.ShowPreviewPackages;
if (!showPreviewPackages && PackageManagerPrefs.ShowPreviewPackagesWarning)
{
const string message = "Preview packages are not verified with Unity, may be unstable, and are unsupported in production. Are you sure you want to show preview packages?";
if (!EditorUtility.DisplayDialog("Unity Package Manager", message, "Yes", "No"))
return;
PackageManagerPrefs.ShowPreviewPackagesWarning = false;
}
PackageManagerPrefs.ShowPreviewPackages = !showPreviewPackages;
PackageCollection.Instance.UpdatePackageCollection(true);
}
private void ResetToDefaultsClick()
{
if (!EditorUtility.DisplayDialog("Unity Package Manager", "Operation will reset all your packages to Editor defaults. Do you want to continue?", "Yes", "No"))
return;
// Registered on callback
AssemblyReloadEvents.beforeAssemblyReload += PackageManagerWindow.ShowPackageManagerWindow;
Client.ResetToEditorDefaults();
var windows = UnityEngine.Resources.FindObjectsOfTypeAll<PackageManagerWindow>();
if (windows.Length > 0)
{
windows[0].Close();
}
}
private void OnEnterPanel(AttachToPanelEvent evt)
{
FilterButton.RegisterCallback<MouseDownEvent>(OnFilterButtonMouseDown);
AdvancedButton.RegisterCallback<MouseDownEvent>(OnAdvancedButtonMouseDown);
}
private void OnLeavePanel(DetachFromPanelEvent evt)
{
FilterButton.UnregisterCallback<MouseDownEvent>(OnFilterButtonMouseDown);
AdvancedButton.UnregisterCallback<MouseDownEvent>(OnAdvancedButtonMouseDown);
}
private Label FilterButton { get { return root.Q<Label>("toolbarFilterButton"); } }
private Label AdvancedButton { get { return root.Q<Label>("toolbarAdvancedButton"); } }
internal PackageSearchToolbar SearchToolbar { get { return root.Q<PackageSearchToolbar>("toolbarSearch"); } }
}
}