浏览代码

Refactor toolbar (no more presenters, acts a little more like buttons)

/main
Peter Bay Bastian 7 年前
当前提交
6c9cb29a
共有 15 个文件被更改,包括 135 次插入360 次删除
  1. 4
      MaterialGraphProject/Assets/UnityShaderEditor/Editor/Drawing/AbstractMaterialGraphEditWindow.cs
  2. 12
      MaterialGraphProject/Assets/UnityShaderEditor/Editor/Drawing/Presenters/GraphEditorPresenter.cs
  3. 63
      MaterialGraphProject/Assets/UnityShaderEditor/Editor/Drawing/Views/GraphEditorView.cs
  4. 33
      MaterialGraphProject/Assets/UnityShaderEditor/Editor/Resources/Styles/MaterialGraph.uss
  5. 39
      MaterialGraphProject/Assets/UnityShaderEditor/Editor/Drawing/Views/ToolbarView.cs
  6. 14
      MaterialGraphProject/Assets/UnityShaderEditor/Editor/Drawing/Presenters/TitleBarButtonPresenter.cs
  7. 12
      MaterialGraphProject/Assets/UnityShaderEditor/Editor/Drawing/Presenters/TitleBarButtonPresenter.cs.meta
  8. 83
      MaterialGraphProject/Assets/UnityShaderEditor/Editor/Drawing/Presenters/TitleBarPresenter.cs
  9. 12
      MaterialGraphProject/Assets/UnityShaderEditor/Editor/Drawing/Presenters/TitleBarPresenter.cs.meta
  10. 12
      MaterialGraphProject/Assets/UnityShaderEditor/Editor/Drawing/Views/TitleBarButtonView.cs.meta
  11. 81
      MaterialGraphProject/Assets/UnityShaderEditor/Editor/Drawing/Views/TitleBarButtonView.cs
  12. 68
      MaterialGraphProject/Assets/UnityShaderEditor/Editor/Drawing/Views/TitleBarView.cs
  13. 8
      MaterialGraphProject/Assets/UnityShaderEditor/Editor/Resources/Styles/TitleBar.uss.meta
  14. 54
      MaterialGraphProject/Assets/UnityShaderEditor/Editor/Resources/Styles/TitleBar.uss
  15. 0
      /MaterialGraphProject/Assets/UnityShaderEditor/Editor/Drawing/Views/ToolbarView.cs.meta

4
MaterialGraphProject/Assets/UnityShaderEditor/Editor/Drawing/AbstractMaterialGraphEditWindow.cs


void OnEnable()
{
graphEditorView = new GraphEditorView();
graphEditorView.onUpdateAssetClick += UpdateAsset;
graphEditorView.onConvertToSubgraphClick += ToSubGraph;
graphEditorView.onShowInProjectClick += PingAsset;
graphEditorView.onTimeClick += ToggleRequiresTime;
rootVisualContainer.Add(graphEditorView);
}

12
MaterialGraphProject/Assets/UnityShaderEditor/Editor/Drawing/Presenters/GraphEditorPresenter.cs


public class GraphEditorPresenter : ScriptableObject, IDisposable
{
[SerializeField]
TitleBarPresenter m_TitleBarPresenter;
[SerializeField]
MaterialGraphPresenter m_GraphPresenter;
[SerializeField]

public TitleBarPresenter titleBarPresenter
{
get { return m_TitleBarPresenter; }
set { m_TitleBarPresenter = value; }
}
public MaterialGraphPresenter graphPresenter
{
get { return m_GraphPresenter; }

public void Initialize(AbstractMaterialGraph graph, HelperMaterialGraphEditWindow container, string assetName)
{
m_PreviewSystem = new PreviewSystem(graph);
m_TitleBarPresenter = CreateInstance<TitleBarPresenter>();
m_TitleBarPresenter.Initialize(container);
m_GraphInspectorPresenter = CreateInstance<GraphInspectorPresenter>();
m_GraphInspectorPresenter.Initialize(assetName, m_PreviewSystem, container);

63
MaterialGraphProject/Assets/UnityShaderEditor/Editor/Drawing/Views/GraphEditorView.cs


using UnityEditor.Experimental.UIElements.GraphView;
using UnityEditor.MaterialGraph.Drawing;
using UnityEditor.MaterialGraph.Drawing.Inspector;
using UnityEngine;
using UnityEngine.Experimental.UIElements;
using Object = UnityEngine.Object;

get { return m_GraphView; }
}
TitleBarView m_TitleBarView;
ToolbarView m_ToolbarView;
public Action onUpdateAssetClick { get; set; }
public Action onConvertToSubgraphClick { get; set; }
public Action onShowInProjectClick { get; set; }
public Action onTimeClick { get; set; }
m_TitleBarView = new TitleBarView { name = "TitleBar" };
Add(m_TitleBarView);
m_ToolbarView = new ToolbarView { name = "TitleBar" };
{
m_ToolbarView.Add(new ToolbarSpaceView());
m_ToolbarView.Add(new ToolbarSeparatorView());
var updateAssetButton = new ToolbarButtonView { text = "Update asset" };
updateAssetButton.AddManipulator(new Clickable(() =>
{
if (onUpdateAssetClick != null) onUpdateAssetClick();
}));
m_ToolbarView.Add(updateAssetButton);
m_ToolbarView.Add(new ToolbarSeparatorView());
m_ToolbarView.Add(new ToolbarSpaceView());
m_ToolbarView.Add(new ToolbarSeparatorView());
var convertToSubgraphButton = new ToolbarButtonView { text = "Convert to subgraph" };
convertToSubgraphButton.AddManipulator(new Clickable(() =>
{
if (onConvertToSubgraphClick != null) onConvertToSubgraphClick();
}));
m_ToolbarView.Add(convertToSubgraphButton);
m_ToolbarView.Add(new ToolbarSeparatorView());
m_ToolbarView.Add(new ToolbarSpaceView());
m_ToolbarView.Add(new ToolbarSeparatorView());
var showInProjectButton = new ToolbarButtonView { text = "Show in project" };
showInProjectButton.AddManipulator(new Clickable(() =>
{
if (onShowInProjectClick != null) onShowInProjectClick();
}));
m_ToolbarView.Add(showInProjectButton);
m_ToolbarView.Add(new ToolbarSeparatorView());
m_ToolbarView.Add(new ToolbarSpaceView());
m_ToolbarView.Add(new ToolbarSeparatorView());
var timeButton = new ToolbarButtonView { text = "Time" };
timeButton.AddManipulator(new Clickable(() =>
{
if (onTimeClick != null) onTimeClick();
}));
m_ToolbarView.Add(timeButton);
m_ToolbarView.Add(new ToolbarSeparatorView());
}
Add(m_ToolbarView);
var content = new VisualElement();
content.name = "content";

public override void OnDataChanged()
{
m_GraphView.presenter = m_Presenter.graphPresenter;
m_TitleBarView.dataProvider = m_Presenter.titleBarPresenter;
m_GraphInspectorView.presenter = m_Presenter.graphInspectorPresenter;
}

public void Dispose()
{
onUpdateAssetClick = null;
onConvertToSubgraphClick = null;
onShowInProjectClick = null;
onTimeClick = null;
if (m_GraphInspectorView != null) m_GraphInspectorView.Dispose();
}
}

33
MaterialGraphProject/Assets/UnityShaderEditor/Editor/Resources/Styles/MaterialGraph.uss


flex-direction: column;
padding-bottom: 2;
}
ToolbarView {
flex-direction: row;
border-color: rgb(32, 32, 32);
border-bottom-width: 1;
}
ToolbarSeparatorView {
background-color: rgb(32, 32, 32);
width: 1;
}
ToolbarSpaceView {
width: 5;
}
ToolbarButtonView {
font-size: 10;
text-color: rgb(180, 180, 180);
padding-top: 3;
padding-bottom: 3;
padding-left: 4;
padding-right: 4;
}
ToolbarButtonView:hover {
background-color: rgba(255, 255, 255, 0.25);
}
ToolbarButtonView:active {
background-color: rgba(0, 0, 0, 0.25);
}

39
MaterialGraphProject/Assets/UnityShaderEditor/Editor/Drawing/Views/ToolbarView.cs


using System.Collections.Generic;
using UnityEngine;
using UnityEditor.Experimental.UIElements.GraphView;
using UnityEngine.Experimental.UIElements;
namespace UnityEditor.MaterialGraph.Drawing
{
public class ToolbarView : VisualElement
{
public ToolbarView()
{
AddStyleSheetPath("Styles/MaterialGraph");
}
}
public class ToolbarButtonView : VisualElement
{
public ToolbarButtonView()
{
AddStyleSheetPath("Styles/MaterialGraph");
}
}
public class ToolbarSeparatorView : VisualElement
{
public ToolbarSeparatorView()
{
AddStyleSheetPath("Styles/MaterialGraph");
}
}
public class ToolbarSpaceView : VisualElement
{
public ToolbarSpaceView()
{
AddStyleSheetPath("Styles/MaterialGraph");
}
}
}

14
MaterialGraphProject/Assets/UnityShaderEditor/Editor/Drawing/Presenters/TitleBarButtonPresenter.cs


using UnityEngine;
namespace UnityEditor.MaterialGraph.Drawing
{
// TODO JOCE: Needed at all?
public class TitleBarButtonPresenter : ScriptableObject
{
public delegate void ClickCallback();
public string text;
public ClickCallback onClick { get; set; }
protected TitleBarButtonPresenter() {}
}
}

12
MaterialGraphProject/Assets/UnityShaderEditor/Editor/Drawing/Presenters/TitleBarButtonPresenter.cs.meta


fileFormatVersion: 2
guid: d6d4afb1c6ac74a1bb0d4bd98b973f76
timeCreated: 1479800767
licenseType: Pro
MonoImporter:
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:

83
MaterialGraphProject/Assets/UnityShaderEditor/Editor/Drawing/Presenters/TitleBarPresenter.cs


using UnityEngine;
using UnityEngine.Graphing;
using System.Collections.Generic;
using UnityEngine.MaterialGraph;
using System.IO;
using System.Linq;
using UnityEditor.MaterialGraph.Drawing;
namespace UnityEditor.MaterialGraph.Drawing
{
// TODO JOCE: Not sure the title bar requires a presenter at all.
public class TitleBarPresenter : ScriptableObject
{
List<TitleBarButtonPresenter> m_leftItems;
List<TitleBarButtonPresenter> m_rightItems;
IMaterialGraphEditWindow m_Owner;
public IEnumerable<TitleBarButtonPresenter> leftItems
{
get { return m_leftItems; }
}
public IEnumerable<TitleBarButtonPresenter> rightItems
{
get { return m_rightItems; }
}
protected TitleBarPresenter()
{}
public void Initialize(IMaterialGraphEditWindow graphWindow)
{
m_Owner = graphWindow;
m_leftItems = new List<TitleBarButtonPresenter>();
m_rightItems = new List<TitleBarButtonPresenter>();
var currentGraphItem = CreateInstance<TitleBarButtonPresenter>();
currentGraphItem.text = "Put name here";
m_leftItems.Add(currentGraphItem);
var updateAsset = CreateInstance<TitleBarButtonPresenter>();
updateAsset.text = "Update Asset";
updateAsset.onClick += UpdateAsset;
m_leftItems.Add(updateAsset);
var toSubGraph = CreateInstance<TitleBarButtonPresenter>();
toSubGraph.text = "Selection -> Subgraph";
toSubGraph.onClick += ToSubGraph;
m_leftItems.Add(toSubGraph);
var showInProjectItem = CreateInstance<TitleBarButtonPresenter>();
showInProjectItem.text = "Show in project";
showInProjectItem.onClick += OnShowInProjectClick;
m_leftItems.Add(showInProjectItem);
var optionsItem = CreateInstance<TitleBarButtonPresenter>();
optionsItem.text = "Time";
optionsItem.onClick += ToggleTime;
m_rightItems.Add(optionsItem);
}
void OnShowInProjectClick()
{
if (m_Owner != null)
m_Owner.PingAsset();
}
void UpdateAsset()
{
m_Owner.UpdateAsset();
}
void ToSubGraph()
{
m_Owner.ToSubGraph();
}
void ToggleTime()
{
m_Owner.ToggleRequiresTime();
}
}
}

12
MaterialGraphProject/Assets/UnityShaderEditor/Editor/Drawing/Presenters/TitleBarPresenter.cs.meta


fileFormatVersion: 2
guid: b93a304d64ffa46d39b22539fc917b41
timeCreated: 1478775744
licenseType: Pro
MonoImporter:
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:

12
MaterialGraphProject/Assets/UnityShaderEditor/Editor/Drawing/Views/TitleBarButtonView.cs.meta


fileFormatVersion: 2
guid: 8ed8055e98d8f4ff5a17ea3415c08411
timeCreated: 1479800767
licenseType: Pro
MonoImporter:
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:

81
MaterialGraphProject/Assets/UnityShaderEditor/Editor/Drawing/Views/TitleBarButtonView.cs


using UnityEditor.Experimental.UIElements.GraphView;
using UnityEngine;
using UnityEngine.Experimental.UIElements;
namespace UnityEditor.MaterialGraph.Drawing
{
public class TitleBarButtonView : DataWatchContainer
{
TitleBarButtonPresenter m_dataProvider;
Clicker m_clicker;
VisualElement m_label;
public TitleBarButtonPresenter dataProvider
{
get { return m_dataProvider; }
set
{
if (m_dataProvider == value)
return;
RemoveWatch();
m_dataProvider = value;
OnDataChanged();
AddWatch();
}
}
public TitleBarButtonView(TitleBarButtonPresenter dataProvider)
{
AddToClassList("titleBarItem");
m_clicker = new Clicker();
m_clicker.onClick += OnClick;
m_clicker.onStateChange += OnClickStateChanged;
this.AddManipulator(m_clicker);
var ve = new VisualElement();
ve.AddToClassList("titleBarItemBorder");
Add(ve);
m_label = new VisualElement();
m_label.AddToClassList("titleBarItemLabel");
Add(m_label);
var ve2 = new VisualElement();
ve2.AddToClassList("titleBarItemBorder");
this.dataProvider = dataProvider;
}
public override void OnDataChanged()
{
if (m_dataProvider == null)
return;
m_label.text = m_dataProvider.text;
this.Dirty(ChangeType.Repaint);
}
void OnClick()
{
if (m_dataProvider != null && m_dataProvider.onClick != null)
m_dataProvider.onClick();
}
void OnClickStateChanged(ClickerState newState)
{
if (newState == ClickerState.Active)
AddToClassList("active");
else if (newState == ClickerState.Inactive)
RemoveFromClassList("active");
this.Dirty(ChangeType.Repaint);
}
protected override Object[] toWatch
{
get { return new Object[] {dataProvider}; }
}
}
}

68
MaterialGraphProject/Assets/UnityShaderEditor/Editor/Drawing/Views/TitleBarView.cs


using System.Collections.Generic;
using UnityEngine;
using UnityEditor.Experimental.UIElements.GraphView;
using UnityEngine.Experimental.UIElements;
namespace UnityEditor.MaterialGraph.Drawing
{
public class TitleBarView : DataWatchContainer
{
TitleBarPresenter m_DataProvider;
VisualContainer m_LeftContainer;
VisualContainer m_RightContainer;
public TitleBarPresenter dataProvider
{
get { return m_DataProvider; }
set
{
if (m_DataProvider == value)
return;
RemoveWatch();
m_DataProvider = value;
OnDataChanged();
AddWatch();
}
}
public TitleBarView()
{
name = "TitleBar";
m_LeftContainer = new VisualContainer()
{
name = "left"
};
Add(m_LeftContainer);
m_RightContainer = new VisualContainer()
{
name = "right"
};
Add(m_RightContainer);
AddStyleSheetPath("Styles/TitleBar");
}
public override void OnDataChanged()
{
if (m_DataProvider == null)
return;
UpdateContainer(m_LeftContainer, m_DataProvider.leftItems);
UpdateContainer(m_RightContainer, m_DataProvider.rightItems);
}
static void UpdateContainer(VisualContainer container, IEnumerable<TitleBarButtonPresenter> itemDatas)
{
container.ClearChildren();
foreach (var itemPresenter in itemDatas)
container.AddChild(new TitleBarButtonView(itemPresenter));
}
protected override Object[] toWatch
{
get { return new Object[] {dataProvider}; }
}
}
}

8
MaterialGraphProject/Assets/UnityShaderEditor/Editor/Resources/Styles/TitleBar.uss.meta


fileFormatVersion: 2
guid: 2bdb46d80eb734cc2bc61fa6a2302e52
timeCreated: 1479148211
licenseType: Pro
StyleSheetImporter:
userData:
assetBundleName:
assetBundleVariant:

54
MaterialGraphProject/Assets/UnityShaderEditor/Editor/Resources/Styles/TitleBar.uss


TitleBarView {
flex-direction: row;
justify-content: space-between;
align-items: stretch;
background-color: rgba(33, 33, 33, 0.5);
padding-bottom: 1;
/*margin-top: -1;*/
}
TitleBarView #left,
TitleBarView #right {
flex: 1;
height: 16;
background-color: #3d3d3d;
align-items: stretch;
flex-direction: row;
}
TitleBarView #left {
justify-content: flex-start;
}
TitleBarView #right {
justify-content: flex-end;
}
.titleBarItem {
flex-direction: row;
}
.titleBarItem.active {
background-color: rgba(33, 33, 33, 0.5);
}
#left .titleBarItem {
margin-left: 5;
}
#right .titleBarItem {
margin-right: 5;
}
.titleBarItemBorder {
background-color: rgba(33, 33, 33, 0.5);
width: 1;
}
.titleBarItemLabel {
text-color: rgba(255, 255, 255, 0.6);
font-size: 9;
text-alignment: middle-left;
padding-left: 5;
padding-right: 5;
}

/MaterialGraphProject/Assets/UnityShaderEditor/Editor/Drawing/Views/TitleBarView.cs.meta → /MaterialGraphProject/Assets/UnityShaderEditor/Editor/Drawing/Views/ToolbarView.cs.meta

正在加载...
取消
保存