Ejemplo n.º 1
0
        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);
        }