static VisualElement CreateSourceStatePropertyGUI(SerializedProperty property, List <GimmickTarget> targetChoices, Func <GimmickTarget, string> formatTarget) { Assert.AreEqual(property.type, nameof(SourceState)); var container = new VisualElement { style = { flexDirection = new StyleEnum <FlexDirection>(FlexDirection.Row), flexGrow = new StyleFloat(9) } }; var targetProperty = property.FindPropertyRelative("target"); var currentTarget = (GimmickTarget)targetProperty.intValue; var selectingTarget = targetChoices.Contains(currentTarget) ? currentTarget : targetChoices[0]; var targetField = EnumField.Create(targetProperty, targetChoices, selectingTarget, formatTarget); container.Add(targetField); var keyProperty = property.FindPropertyRelative("key"); Assert.AreEqual(keyProperty.propertyType, SerializedPropertyType.String); var keyField = new TextField { bindingPath = keyProperty.propertyPath, style = { flexGrow = new StyleFloat(9) } }; keyField.Bind(keyProperty.serializedObject); container.Add(keyField); return(container); }
public void SetNode(ANode node, SerializedProperty serializedNode) { UnselectNode(); if (node == null || serializedNode == null) { return; } m_selectedNode = node; m_selectedNodeProperty = serializedNode; m_nodeNameLabel.text = AddSpacesToSentence(node.GetType().Name); m_nodeIdLabel.text = node.Id; m_nodeCommentField.bindingPath = serializedNode.FindPropertyRelative("m_comment").propertyPath; m_nodeCommentField.Bind(serializedNode.serializedObject); m_commentPlaceholder.style.display = (string.IsNullOrEmpty(serializedNode.FindPropertyRelative("m_comment").stringValue)) ? DisplayStyle.Flex : DisplayStyle.None; if (node.UseIMGUIPropertyDrawer) { m_imguiContainer.style.display = DisplayStyle.Flex; } else { if (m_propertyField != null) { m_inspectorArea.Remove(m_propertyField); } m_propertyField = new PropertyField(m_selectedNodeProperty); m_propertyField.Bind(m_selectedNodeProperty.serializedObject); m_propertyField.style.display = DisplayStyle.Flex; // This requires Unity 2020.2 to work correctly https://forum.unity.com/threads/uielements-developer-guide.648043/#post-6073137 m_propertyField.RegisterCallback <SerializedPropertyChangeEvent>(x => { m_nodeGraphView.GetNodeViewById(node.Id)?.HandleOnSerializedPropertyChanged(); }); m_inspectorArea.Add(m_propertyField); } }
//Commenting this out. //I have no plans to continue to support this for now /*[MenuItem("Gameframe/Packages/Publisher")] * public static void Open() * { * PackageNpmPublisher wnd = GetWindow<PackageNpmPublisher>(); * wnd.titleContent = new GUIContent("Package Publisher"); * }*/ public void OnEnable() { // Each editor window contains a root VisualElement object VisualElement root = rootVisualElement; // A stylesheet can be added to a VisualElement. // The style will be applied to the VisualElement and all of its children. var styleSheetPath = ResourcePath + StyleSheetFilename; var styleSheet = AssetDatabase.LoadAssetAtPath <StyleSheet>(styleSheetPath); if (styleSheet != null) { root.styleSheets.Add(styleSheet); } else { Debug.LogError($"Failed to Load Style Sheet. Check uss file exists or syntax error."); } // Import UXML //var visualTree = AssetDatabase.LoadAssetAtPath<VisualTreeAsset>("Packages/com.gameframe.packages/Editor/PackagePublisherWindow/PackagePublisher.uxml"); //VisualElement labelFromUXML = visualTree.CloneTree(); //root.Add(labelFromUXML); SerializedObject so = new SerializedObject(this); var fieldContainer = new VisualElement() { name = "FieldContainer" }; fieldContainer.AddToClassList("BorderedContainer"); root.Add(fieldContainer); var serverField = new TextField { label = "Server", bindingPath = nameof(address) }; serverField.Bind(so); fieldContainer.Add(serverField); var emailField = new TextField { label = "email", bindingPath = nameof(email) }; emailField.Bind(so); fieldContainer.Add(emailField); var usernameField = new TextField { label = "Username", bindingPath = nameof(username), }; usernameField.Bind(so); fieldContainer.Add(usernameField); var passwordField = new TextField() { label = "Password", bindingPath = nameof(password), isPasswordField = true }; passwordField.Bind(so); fieldContainer.Add(passwordField); packageScrollList = new ScrollView(); packageScrollList.AddToClassList("BorderedContainer"); root.Add(packageScrollList); var buttonContainer = new VisualElement() { name = "ButtonContainer", style = { flexDirection = FlexDirection.Row, justifyContent = Justify.Center, } }; root.Add(buttonContainer); loginStatusLabel = new Label("Waiting...") { style = { unityTextAlign = TextAnchor.MiddleRight } }; fieldContainer.Add(loginStatusLabel); var loginButton = new Button(Login) { name = "ButtonLogin", text = "Login", style = { marginTop = 5, marginLeft = 5, marginRight = 5, paddingTop = 4 } }; fieldContainer.Add(loginButton); var publishButton = new Button(Publish) { name = "ButtonPublish", text = "Publish", style = { marginLeft = 5, marginRight = 5 } }; buttonContainer.Add(publishButton); var refreshButton = new Button(Refresh) { name = "ButtonRefresh", text = "Refresh", style = { marginLeft = 5, marginRight = 5 } }; buttonContainer.Add(refreshButton); /*var installButton = new Button(InstallCli) * { * name = "ButtonInstall", * style = * { * marginLeft = 5, * marginRight = 5 * } * }; * installButton.Add(new Label("Install")); * buttonContainer.Add(installButton);*/ selectedPackageList = new List <PackageManifest>(); PopulateScrollViewWithPackages(packageScrollList); CheckLogin(); CheckInstall(); }