internal static List <RenderPipelineConverter> GetConvertersInContainer(RenderPipelineConverterContainer container) { List <RenderPipelineConverter> listOfConverters = new List <RenderPipelineConverter>(); var converterList = TypeCache.GetTypesDerivedFrom <RenderPipelineConverter>(); for (int i = 0; i < converterList.Count; ++i) { // Iterate over the converters that are used by the current container RenderPipelineConverter conv = (RenderPipelineConverter)Activator.CreateInstance(converterList[i]); if (conv.container == container.GetType()) { listOfConverters.Add(conv); } } return(listOfConverters); }
public void CreateGUI() { m_SerializedObject = new SerializedObject(this); converterEditorAsset.CloneTree(rootVisualElement); // This is temp now to get the information filled in RenderPipelineConverterContainer converterContainer = (RenderPipelineConverterContainer)Activator.CreateInstance(m_ConverterContainers[0]); rootVisualElement.Q <Label>("conversionName").text = converterContainer.name; rootVisualElement.Q <TextElement>("conversionInfo").text = converterContainer.info; rootVisualElement.Q <Image>("converterContainerHelpIcon").image = CoreEditorStyles.iconHelp; // Getting the scrollview where the converters should be added m_ScrollView = rootVisualElement.Q <ScrollView>("convertersScrollView"); for (int i = 0; i < m_CoreConvertersList.Count; ++i) { // Making an item using the converterListAsset as a template. // Then adding the information needed for each converter VisualElement item = new VisualElement(); converterListAsset.CloneTree(item); var conv = m_CoreConvertersList[i]; item.SetEnabled(conv.IsEnabled); item.Q <Label>("converterName").text = conv.name; item.Q <Label>("converterInfo").text = conv.info; item.Q <VisualElement>("converterTopVisualElement").tooltip = conv.info; // setup the images item.Q <Image>("pendingImage").image = CoreEditorStyles.iconPending; item.Q <Image>("pendingImage").tooltip = "Pending"; var pendingLabel = item.Q <Label>("pendingLabel"); item.Q <Image>("warningImage").image = CoreEditorStyles.iconWarn; item.Q <Image>("warningImage").tooltip = "Warnings"; var warningLabel = item.Q <Label>("warningLabel"); item.Q <Image>("errorImage").image = CoreEditorStyles.iconFail; item.Q <Image>("errorImage").tooltip = "Failed"; var errorLabel = item.Q <Label>("errorLabel"); item.Q <Image>("successImage").image = CoreEditorStyles.iconSuccess; item.Q <Image>("successImage").tooltip = "Success"; var successLabel = item.Q <Label>("successLabel"); var converterEnabledToggle = item.Q <Toggle>("converterEnabled"); converterEnabledToggle.bindingPath = $"{nameof(m_ConverterStates)}.Array.data[{i}].{nameof(ConverterState.isActive)}"; pendingLabel.bindingPath = $"{nameof(m_ConverterStates)}.Array.data[{i}].{nameof(ConverterState.pending)}"; warningLabel.bindingPath = $"{nameof(m_ConverterStates)}.Array.data[{i}].{nameof(ConverterState.warnings)}"; errorLabel.bindingPath = $"{nameof(m_ConverterStates)}.Array.data[{i}].{nameof(ConverterState.errors)}"; successLabel.bindingPath = $"{nameof(m_ConverterStates)}.Array.data[{i}].{nameof(ConverterState.success)}"; VisualElement child = item; ListView listView = child.Q <ListView>("converterItems"); listView.showBoundCollectionSize = false; listView.bindingPath = $"{nameof(m_ConverterStates)}.Array.data[{i}].{nameof(ConverterState.items)}"; int id = i; listView.makeItem = () => { var convertItem = converterItem.CloneTree(); // Adding the contextual menu for each item convertItem.AddManipulator(new ContextualMenuManipulator(evt => AddToContextMenu(evt, id))); return(convertItem); }; listView.bindItem = (element, index) => { m_SerializedObject.Update(); var property = m_SerializedObject.FindProperty($"{listView.bindingPath}.Array.data[{index}]"); // ListView doesn't bind the child elements for us properly, so we do that for it // In the UXML our root is a BindableElement, as we can't bind otherwise. var bindable = (BindableElement)element; bindable.BindProperty(property); // Adding index here to userData so it can be retrieved later element.userData = index; Status status = (Status)property.FindPropertyRelative("status").enumValueIndex; string info = property.FindPropertyRelative("message").stringValue; // Update the amount of things to convert child.Q <Label>("converterStats").text = $"{m_ItemsToConvert[id].Count} items"; ConverterItemDescriptor convItemDesc = m_ItemsToConvert[id][index]; element.Q <Label>("converterItemName").text = convItemDesc.name; element.Q <Label>("converterItemPath").text = convItemDesc.info; element.Q <Image>("converterItemHelpIcon").image = CoreEditorStyles.iconHelp; element.Q <Image>("converterItemHelpIcon").tooltip = convItemDesc.helpLink; // Changing the icon here depending on the status. Texture2D icon = null; switch (status) { case Status.Pending: icon = CoreEditorStyles.iconPending; break; case Status.Error: icon = CoreEditorStyles.iconFail; break; case Status.Warning: icon = CoreEditorStyles.iconWarn; break; case Status.Success: icon = CoreEditorStyles.iconSuccess; break; } element.Q <Image>("converterItemStatusIcon").image = icon; element.Q <Image>("converterItemStatusIcon").tooltip = info; }; listView.onSelectionChange += obj => { m_CoreConvertersList[id].OnClicked(listView.selectedIndex); }; listView.unbindItem = (element, index) => { var bindable = (BindableElement)element; bindable.Unbind(); }; m_ScrollView.Add(item); } rootVisualElement.Bind(m_SerializedObject); var button = rootVisualElement.Q <Button>("convertButton"); button.RegisterCallback <ClickEvent>(Convert); var initButton = rootVisualElement.Q <Button>("initializeButton"); initButton.RegisterCallback <ClickEvent>(Init); }
public void CreateGUI() { m_SerializedObject = new SerializedObject(this); converterEditorAsset.CloneTree(rootVisualElement); // This is temp now to get the information filled in RenderPipelineConverterContainer converterContainer = (RenderPipelineConverterContainer)Activator.CreateInstance(m_ConverterContainers[0]); rootVisualElement.Q <Label>("conversionName").text = converterContainer.name; rootVisualElement.Q <TextElement>("conversionInfo").text = converterContainer.info; // Getting the scrollview where the converters should be added m_ScrollView = rootVisualElement.Q <ScrollView>("convertersScrollView"); for (int i = 0; i < m_CoreConvertersList.Count; ++i) { // Making an item using the converterListAsset as a template. // Then adding the information needed for each converter VisualElement item = new VisualElement(); converterListAsset.CloneTree(item); var conv = m_CoreConvertersList[i]; item.SetEnabled(conv.IsEnabled); item.Q <Label>("converterName").text = conv.name; item.Q <Label>("converterInfo").text = conv.info; item.Q <VisualElement>("converterTopVisualElement").tooltip = conv.info; // setup the images item.Q <Image>("pendingImage").image = CoreEditorStyles.iconPending; item.Q <Image>("pendingImage").tooltip = "Pending"; var pendingLabel = item.Q <Label>("pendingLabel"); item.Q <Image>("warningImage").image = CoreEditorStyles.iconWarn; item.Q <Image>("warningImage").tooltip = "Warnings"; var warningLabel = item.Q <Label>("warningLabel"); item.Q <Image>("errorImage").image = CoreEditorStyles.iconFail; item.Q <Image>("errorImage").tooltip = "Failed"; var errorLabel = item.Q <Label>("errorLabel"); item.Q <Image>("successImage").image = CoreEditorStyles.iconSuccess; item.Q <Image>("successImage").tooltip = "Success"; var successLabel = item.Q <Label>("successLabel"); var converterEnabledToggle = item.Q <Toggle>("converterEnabled"); converterEnabledToggle.bindingPath = $"{nameof(m_ConverterStates)}.Array.data[{i}].{nameof(ConverterState.isActive)}"; pendingLabel.bindingPath = $"{nameof(m_ConverterStates)}.Array.data[{i}].{nameof(ConverterState.pending)}"; warningLabel.bindingPath = $"{nameof(m_ConverterStates)}.Array.data[{i}].{nameof(ConverterState.warnings)}"; errorLabel.bindingPath = $"{nameof(m_ConverterStates)}.Array.data[{i}].{nameof(ConverterState.errors)}"; successLabel.bindingPath = $"{nameof(m_ConverterStates)}.Array.data[{i}].{nameof(ConverterState.success)}"; m_ScrollView.Add(item); } rootVisualElement.Bind(m_SerializedObject); var button = rootVisualElement.Q <Button>("convertButton"); button.RegisterCallback <ClickEvent>(Convert); var initButton = rootVisualElement.Q <Button>("initializeButton"); initButton.RegisterCallback <ClickEvent>(Init); }