Commit 2af11497 authored by Sylvain Renault's avatar Sylvain Renault
Browse files

Merge branch 'develop' into 'main'

Add GraphView module & the World Storage inspector window into the main branch

See merge request !4
parents 258ea2e6 32661efc
Loading
Loading
Loading
Loading
+18 −23
Original line number Original line Diff line number Diff line
# This .gitignore file should be placed at the root of your Unity project directory
# Modified from:
#
#     https://github.com/github/gitignore/blob/master/Unity.gitignore
# Get latest from https://github.com/github/gitignore/blob/master/Unity.gitignore

#
/[Ll]ibrary/
/[Ll]ibrary/
/[Tt]emp/
/[Uu]serSettings/
/[Oo]bj/
[Tt]emp/
[Oo]bj/
/[Bb]uild/
/[Bb]uild/
/[Bb]uilds/
/[Bb]uilds/
/[Ll]ogs/
/[Ll]ogs/
/[Mm]emoryCaptures/
/[Mm]emoryCaptures/


# Fraunhofer HHI / IMC / Unity settings
#/[Aa]ssets/Fraunhofer
/[Aa]pp
/[Bb]in
/[Ee]xe

# Never ignore Asset meta data
!/[Aa]ssets/**/*.meta

# Uncomment this line if you wish to ignore the asset store tools plugin
# Uncomment this line if you wish to ignore the asset store tools plugin
# /[Aa]ssets/AssetStoreTools*
# [Aa]ssets/AssetStoreTools*

# TextMesh Pro files
#[Aa]ssets/TextMesh*Pro/

# Autogenerated Jetbrains Rider plugin
[Aa]ssets/Plugins/Editor/JetBrains*


# Visual Studio cache directory
# Visual Studio cache directory
.vs/
.vs/
@@ -66,3 +51,13 @@ sysinfo.txt


# Crashlytics generated file
# Crashlytics generated file
crashlytics-build.properties
crashlytics-build.properties

# Windows
Thumbs.db
Thumbs.db.meta

# MacOS
*.DS_Store

# VS Code
*.vscode
 No newline at end of file
+83 −0
Original line number Original line Diff line number Diff line
//
// ARF - Augmented Reality Framework (ETSI ISG ARF)
//
// Copyright 2022 ETSI
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
//     http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
//
// Last change: July 2022
//

using Assets.ETSI.ARF.ARF_World_Storage_API.Editor.Windows;
using Org.OpenAPITools.Model;
using UnityEditor;
using UnityEditor.Experimental.GraphView;
using UnityEngine;
using UnityEngine.UIElements;

namespace Assets.ETSI.ARF.ARF_World_Storage_API.Editor.Graph
{
    public class ARFEdgeLink : Edge
    {
        public WorldLink worldLink;
        public string GUID;

        public Image savedIcon;

        public ARFEdgeLink()
        {
            var doubleClickManipulator = new Clickable(Clicked);
            doubleClickManipulator.activators.Clear();
            doubleClickManipulator.activators.Add(new ManipulatorActivationFilter { button = MouseButton.LeftMouse, clickCount = 2 });
            this.AddManipulator(doubleClickManipulator);
        }
        public void Clicked()
        {
            Debug.Log(worldLink.ToJson());
            GraphEditorWindow.ShowWindow(this);
        }
        public void MarkUnsaved()
        {
            if (savedIcon == null)
            {
                //the icon to add if the node does not correspond to an element in the server
                Texture2D warningImage = (Texture2D)AssetDatabase.LoadAssetAtPath("Assets/ETSI.ARF/ARF World Storage API/Images/cloud.png", typeof(Texture2D));
                savedIcon = new Image
                {
                    image = warningImage
                };
                savedIcon.style.width = 18;
                savedIcon.style.height = 18;
                savedIcon.style.minWidth = 18;
                savedIcon.style.minHeight = 18;
                savedIcon.style.flexGrow = 1;
                savedIcon.style.alignSelf = Align.Center;

            }
            if (!edgeControl.Contains(savedIcon))
            {
                edgeControl.Add(savedIcon);
            }
            tooltip = "This element is not synchronized with the World Storage";
        }

        public void MarkSaved()
        {
            if (edgeControl.Contains(savedIcon))
            {
                edgeControl.Remove(savedIcon);
                tooltip = "";
            }
        }
    }
}
 No newline at end of file
+1 −1
Original line number Original line Diff line number Diff line
fileFormatVersion: 2
fileFormatVersion: 2
guid: 8dd64e8d8a545ab45b424402550b55a6
guid: 81a94cf483be20040aa4fe8d9f93d5c5
MonoImporter:
MonoImporter:
  externalObjects: {}
  externalObjects: {}
  serializedVersion: 2
  serializedVersion: 2
+650 −108

File changed.

Preview size limit exceeded, changes collapsed.

+143 −40
Original line number Original line Diff line number Diff line
@@ -15,27 +15,130 @@
// See the License for the specific language governing permissions and
// See the License for the specific language governing permissions and
// limitations under the License.
// limitations under the License.
//
//
// Last change: June 2022
// Last change: July 2022
//
//


using System.Collections;
#define USING_OPENAPI_GENERATOR // alt. is Swagger
using System.Collections.Generic;

using UnityEngine;
using UnityEditor;

#if USING_OPENAPI_GENERATOR
using Org.OpenAPITools.Model;
#else
using IO.Swagger.Api;
using IO.Swagger.Model;
#endif
using UnityEngine.UIElements;
using UnityEngine.UIElements;
using UnityEditor.Experimental.GraphView;
using UnityEditor.Experimental.GraphView;
using Assets.ETSI.ARF.ARF_World_Storage_API.Editor.Graph;
using System;
using UnityEngine;


namespace ETSI.ARF.WorldStorage.UI
namespace ETSI.ARF.WorldStorage.UI
{
{
    public class ARFNode : Node
    public abstract class ARFNode : Node
    {
    {
        public string GUID;
        public string GUID;
        public string text;
        public bool entryPoint = false;
        public bool entryPoint = false;
        public ARFPort portOut;
        public ARFPort portIn;
        public GUID id;

        public Image savedIcon;


        public ARFNode()
        public ARFNode()
        {
        {
        }
        public override Port InstantiatePort(Orientation orientation, Direction direction, Port.Capacity capacity, Type type)
        {
            switch (direction)
            {
                case Direction.Input:
                    portIn = ARFPort.CreateARF<ARFEdgeLink>(orientation, direction, capacity, type);
                    return portIn;
                case Direction.Output:
                    portOut = ARFPort.CreateARF<ARFEdgeLink>(orientation, direction, capacity, type);
                    return portOut;
                default:
                    return null;
            }
        }


        public void DisconnectAllPorts(ARFGraphView graphView)
        {
            DisconnectInputPorts(graphView);
            DisconnectOutputPorts(graphView);
        }

        private void DisconnectInputPorts(ARFGraphView graphView)
        {
            DisconnectPorts(inputContainer, graphView);
        }

        private void DisconnectOutputPorts(ARFGraphView graphView)
        {
            DisconnectPorts(outputContainer, graphView);
        }

        private void DisconnectPorts(VisualElement container, ARFGraphView graphView)
        {
            foreach (Port port in container.Children())
            {
                if (!port.connected)
                {
                    continue;
                }


                graphView.DeleteElements(port.connections);
            }
            }
        }
        }

        public Port GeneratePort(ARFNode node, Direction portDirection, Port.Capacity capacity = Port.Capacity.Multi)
        {
            return node.InstantiatePort(Orientation.Horizontal, portDirection, capacity, typeof(int)); // dummy
        }

        //override the BuildContextualMenu method to prevent the "disconnect" option from appearing in the contextual menu
        public override void BuildContextualMenu(ContextualMenuPopulateEvent evt)
        {
        }

        public abstract ObjectType GetElemType();
        public void MarkUnsaved()
        {
            if(savedIcon == null)
            {
                //the icon to add if the node does not correspond to an element in the server
                Texture2D warningImage = (Texture2D)AssetDatabase.LoadAssetAtPath("Assets/ETSI.ARF/ARF World Storage API/Images/cloud.png", typeof(Texture2D));
                savedIcon = new Image
                {
                    image = warningImage,
                    scaleMode = ScaleMode.ScaleToFit
                };
                savedIcon.style.width = 25;
                savedIcon.style.height = 25;
                savedIcon.style.minWidth = 25;
                savedIcon.style.minHeight = 25;
                savedIcon.style.left = 8;
                savedIcon.style.paddingRight = 8;
                savedIcon.style.alignSelf = Align.Center;

            }
            if (!titleContainer.Contains(savedIcon))
            {
                titleContainer.Insert(0,savedIcon);
            }
            tooltip = "This element is not synchronized with the World Storage";
        }

        public void MarkSaved()
        {
            if (titleContainer.Contains(savedIcon))
            {
                titleContainer.Remove(savedIcon);
                tooltip = "";
            }
        }

    }
}
}
 No newline at end of file
Loading