123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132 |
- using UnityEditor.Experimental.GraphView;
- using UnityEngine.UIElements;
- using UnityEditor;
- using UnityEngine;
- using System;
- namespace GraphProcessor
- {
- public abstract class PinnedElementView : GraphElement
- {
- protected PinnedElement pinnedElement;
- protected VisualElement root;
- protected VisualElement content;
- protected VisualElement header;
- protected event Action onResized;
- VisualElement main;
- Label titleLabel;
- bool _scrollable;
- ScrollView scrollView;
- static readonly string pinnedElementStyle = "GraphProcessorStyles/PinnedElementView";
- static readonly string pinnedElementTree = "GraphProcessorElements/PinnedElement";
- public override string title
- {
- get { return titleLabel.text; }
- set { titleLabel.text = value; }
- }
- protected bool scrollable
- {
- get
- {
- return _scrollable;
- }
- set
- {
- if (_scrollable == value)
- return;
- _scrollable = value;
- style.position = Position.Absolute;
- if (_scrollable)
- {
- content.RemoveFromHierarchy();
- root.Add(scrollView);
- scrollView.Add(content);
- AddToClassList("scrollable");
- }
- else
- {
- scrollView.RemoveFromHierarchy();
- content.RemoveFromHierarchy();
- root.Add(content);
- RemoveFromClassList("scrollable");
- }
- }
- }
- public PinnedElementView()
- {
- var tpl = Resources.Load<VisualTreeAsset>(pinnedElementTree);
- styleSheets.Add(Resources.Load<StyleSheet>(pinnedElementStyle));
- main = tpl.CloneTree();
- main.AddToClassList("mainContainer");
- scrollView = new ScrollView(ScrollViewMode.VerticalAndHorizontal);
- root = main.Q("content");
- header = main.Q("header");
- titleLabel = main.Q<Label>(name: "titleLabel");
- content = main.Q<VisualElement>(name: "contentContainer");
- hierarchy.Add(main);
- capabilities |= Capabilities.Movable | Capabilities.Resizable;
- style.overflow = Overflow.Hidden;
- ClearClassList();
- AddToClassList("pinnedElement");
- this.AddManipulator(new Dragger { clampToParentEdges = true });
- scrollable = false;
- hierarchy.Add(new Resizer(() => onResized?.Invoke()));
- RegisterCallback<DragUpdatedEvent>(e =>
- {
- e.StopPropagation();
- });
- title = "PinnedElementView";
- }
- public void InitializeGraphView(PinnedElement pinnedElement, BaseGraphView graphView)
- {
- this.pinnedElement = pinnedElement;
- SetPosition(pinnedElement.position);
- onResized += () => {
- pinnedElement.position.size = layout.size;
- };
- RegisterCallback<MouseUpEvent>(e => {
- pinnedElement.position.position = layout.position;
- });
- Initialize(graphView);
- }
- public void ResetPosition()
- {
- pinnedElement.position = new Rect(Vector2.zero, PinnedElement.defaultSize);
- SetPosition(pinnedElement.position);
- }
- protected abstract void Initialize(BaseGraphView graphView);
- ~PinnedElementView()
- {
- Destroy();
- }
- protected virtual void Destroy() {}
- }
- }
|