Commit 0a8d6c3b authored by Sylvain Renault's avatar Sylvain Renault
Browse files

New list view for elements with two "direct" buttons: delete element and edit element.

Some bugfixes.
parent 6ac06177
Loading
Loading
Loading
Loading
+45 −38
Original line number Diff line number Diff line
@@ -40,6 +40,8 @@ namespace ETSI.ARF.WorldStorage.UI
{
    public class TrackableWindow : EditorWindow
    {
        static public TrackableWindow winSingleton;

        [HideInInspector] public WorldStorageServer worldStorageServer;
        [HideInInspector] public WorldStorageUser worldStorageUser;

@@ -64,11 +66,16 @@ namespace ETSI.ARF.WorldStorage.UI
        private Color ori;
        private GUIStyle gsTest;

        public static void ShowWindow(WorldStorageServer ws, WorldStorageUser user)
        public static void ShowWindow(WorldStorageServer ws, WorldStorageUser user, string UUID = "")
        {
            winSingleton = EditorWindow.GetWindow(typeof(TrackableWindow), false, WorldStorageWindow.winName) as TrackableWindow;
            winSingleton.worldStorageServer = ws;
            winSingleton.worldStorageUser = user;
            if (!string.IsNullOrEmpty(UUID))
            {
            TrackableWindow win = EditorWindow.GetWindow(typeof(TrackableWindow), false, WorldStorageWindow.winName) as TrackableWindow;
            win.worldStorageServer = ws;
            win.worldStorageUser = user;
                winSingleton.UUID = UUID;
                winSingleton.GetTrackableParams();
            }
        }

        public TrackableWindow()
@@ -114,41 +121,11 @@ namespace ETSI.ARF.WorldStorage.UI
            EditorGUILayout.Space();

            GUI.backgroundColor = WorldStorageWindow.arfColors[1];
            if (GUILayout.Button("Get Parameters"))
            {
                if (!customName.Contains("[")) UUID = customName;
                else
                {
                    // extract the UUID
                    UUID = customName.Split('[', ']')[1];
                }
                Trackable obj = TrackableRequest.GetTrackable(worldStorageServer, UUID);
                customName = obj.Name;
                creatorUUID = obj.CreatorUUID.ToString();
                type = obj.TrackableType;
                unit = obj.Unit;
                if (obj.TrackableSize.Count == 3)
            if (GUILayout.Button("Read Parameters"))
            {
                    trackableSize = new Vector3((float)obj.TrackableSize[0], (float)obj.TrackableSize[1], (float)obj.TrackableSize[2]);
                }
                else trackableSize = Vector3.zero;
                if (obj.LocalCRS.Count == 16)
                {
                    Matrix4x4 localCRS = new Matrix4x4();
                    localCRS.m00 = obj.LocalCRS[0]; localCRS.m01 = obj.LocalCRS[1]; localCRS.m02 = obj.LocalCRS[2]; localCRS.m03 = obj.LocalCRS[3];
                    localCRS.m10 = obj.LocalCRS[4]; localCRS.m11 = obj.LocalCRS[5]; localCRS.m12 = obj.LocalCRS[6]; localCRS.m13 = obj.LocalCRS[7];
                    localCRS.m20 = obj.LocalCRS[8]; localCRS.m21 = obj.LocalCRS[9]; localCRS.m22 = obj.LocalCRS[10]; localCRS.m23 = obj.LocalCRS[11];
                    localCRS.m30 = obj.LocalCRS[12]; localCRS.m31 = obj.LocalCRS[13]; localCRS.m32 = obj.LocalCRS[14]; localCRS.m33 = obj.LocalCRS[15];
                    localCRS_pos = localCRS.GetPosition();
                    localCRS_rot = localCRS.rotation.eulerAngles;
                }
                else
                {
                    localCRS_pos = Vector3.zero;
                    localCRS_rot = Vector3.zero;
                }
                keyValueTags = obj.KeyvalueTags;
                this.Repaint(); // TODO
                UUID = WorldStorageWindow.GetUUIDFromString(customName);
                if (UUID == null) UUID = customName; // try this
                GetTrackableParams();
            }
            GUI.backgroundColor = ori;

@@ -248,6 +225,36 @@ namespace ETSI.ARF.WorldStorage.UI
            GUI.backgroundColor = ori;
        }

        private void GetTrackableParams()
        {
            Trackable obj = TrackableRequest.GetTrackable(worldStorageServer, UUID);
            customName = obj.Name;
            creatorUUID = obj.CreatorUUID.ToString();
            type = obj.TrackableType;
            unit = obj.Unit;
            if (obj.TrackableSize.Count == 3)
            {
                trackableSize = new Vector3((float)obj.TrackableSize[0], (float)obj.TrackableSize[1], (float)obj.TrackableSize[2]);
            }
            else trackableSize = Vector3.zero;
            if (obj.LocalCRS.Count == 16)
            {
                Matrix4x4 localCRS = new Matrix4x4();
                localCRS.m00 = obj.LocalCRS[0]; localCRS.m01 = obj.LocalCRS[1]; localCRS.m02 = obj.LocalCRS[2]; localCRS.m03 = obj.LocalCRS[3];
                localCRS.m10 = obj.LocalCRS[4]; localCRS.m11 = obj.LocalCRS[5]; localCRS.m12 = obj.LocalCRS[6]; localCRS.m13 = obj.LocalCRS[7];
                localCRS.m20 = obj.LocalCRS[8]; localCRS.m21 = obj.LocalCRS[9]; localCRS.m22 = obj.LocalCRS[10]; localCRS.m23 = obj.LocalCRS[11];
                localCRS.m30 = obj.LocalCRS[12]; localCRS.m31 = obj.LocalCRS[13]; localCRS.m32 = obj.LocalCRS[14]; localCRS.m33 = obj.LocalCRS[15];
                localCRS_pos = localCRS.GetPosition();
                localCRS_rot = localCRS.rotation.eulerAngles;
            }
            else
            {
                localCRS_pos = Vector3.zero;
                localCRS_rot = Vector3.zero;
            }
            keyValueTags = obj.KeyvalueTags;
            this.Repaint(); // TODO
        }

        public Trackable GenerateTrackable()
        {
+45 −37
Original line number Diff line number Diff line
@@ -39,6 +39,8 @@ namespace ETSI.ARF.WorldStorage.UI
{
    public class WorldAnchorWindow : EditorWindow
    {
        static public WorldAnchorWindow winSingleton;

        [HideInInspector] public WorldStorageServer worldStorageServer;
        [HideInInspector] public WorldStorageUser worldStorageUser;

@@ -61,11 +63,16 @@ namespace ETSI.ARF.WorldStorage.UI
        private Color ori;
        private GUIStyle gsTest;

        public static void ShowWindow(WorldStorageServer ws, WorldStorageUser user)
        public static void ShowWindow(WorldStorageServer ws, WorldStorageUser user, string UUID = "")
        {
            winSingleton = EditorWindow.GetWindow(typeof(WorldAnchorWindow), false, WorldStorageWindow.winName) as WorldAnchorWindow;
            winSingleton.worldStorageServer = ws;
            winSingleton.worldStorageUser = user;
            if (!string.IsNullOrEmpty(UUID))
            {
            WorldAnchorWindow win = EditorWindow.GetWindow(typeof(WorldAnchorWindow), false, WorldStorageWindow.winName) as WorldAnchorWindow;
            win.worldStorageServer = ws;
            win.worldStorageUser = user;
                winSingleton.UUID = UUID;
                winSingleton.GetWorldAnchorParams();
            }
        }

        public WorldAnchorWindow()
@@ -111,40 +118,11 @@ namespace ETSI.ARF.WorldStorage.UI
            EditorGUILayout.Space();

            GUI.backgroundColor = WorldStorageWindow.arfColors[1];
            if (GUILayout.Button("Get Parameters"))
            {
                if (!customName.Contains("[")) UUID = customName;
                else
                {
                    // extract the UUID
                    UUID = customName.Split('[', ']')[1];
                }
                WorldAnchor obj = WorldAnchorRequest.GetWorldAnchor(worldStorageServer, UUID);
                customName = obj.Name;
                creatorUUID = obj.CreatorUUID.ToString();
                unit = obj.Unit;
                if (obj.WorldAnchorSize.Count == 3)
            if (GUILayout.Button("Read Parameters"))
            {
                    worldAnchorSize = new Vector3((float)obj.WorldAnchorSize[0], (float)obj.WorldAnchorSize[1], (float)obj.WorldAnchorSize[2]);
                }
                else worldAnchorSize = Vector3.zero;
                if (obj.LocalCRS.Count == 16)
                {
                    Matrix4x4 localCRS = new Matrix4x4();
                    localCRS.m00 = obj.LocalCRS[0]; localCRS.m01 = obj.LocalCRS[1]; localCRS.m02 = obj.LocalCRS[2]; localCRS.m03 = obj.LocalCRS[3];
                    localCRS.m10 = obj.LocalCRS[4]; localCRS.m11 = obj.LocalCRS[5]; localCRS.m12 = obj.LocalCRS[6]; localCRS.m13 = obj.LocalCRS[7];
                    localCRS.m20 = obj.LocalCRS[8]; localCRS.m21 = obj.LocalCRS[9]; localCRS.m22 = obj.LocalCRS[10]; localCRS.m23 = obj.LocalCRS[11];
                    localCRS.m30 = obj.LocalCRS[12]; localCRS.m31 = obj.LocalCRS[13]; localCRS.m32 = obj.LocalCRS[14]; localCRS.m33 = obj.LocalCRS[15];
                    localCRS_pos = localCRS.GetPosition();
                    localCRS_rot = localCRS.rotation.eulerAngles;
                }
                else
                {
                    localCRS_pos = Vector3.zero;
                    localCRS_rot = Vector3.zero;
                }
                keyValueTags = obj.KeyvalueTags;
                this.Repaint(); // TODO
                UUID = WorldStorageWindow.GetUUIDFromString(customName);
                if (UUID == null) UUID = customName; // try this
                GetWorldAnchorParams();
            }
            GUI.backgroundColor = ori;

@@ -224,6 +202,36 @@ namespace ETSI.ARF.WorldStorage.UI
            GUI.backgroundColor = ori;
        }

        private void GetWorldAnchorParams()
        {
            WorldAnchor obj = WorldAnchorRequest.GetWorldAnchor(worldStorageServer, UUID);
            customName = obj.Name;
            creatorUUID = obj.CreatorUUID.ToString();
            unit = obj.Unit;
            if (obj.WorldAnchorSize.Count == 3)
            {
                worldAnchorSize = new Vector3((float)obj.WorldAnchorSize[0], (float)obj.WorldAnchorSize[1], (float)obj.WorldAnchorSize[2]);
            }
            else worldAnchorSize = Vector3.zero;
            if (obj.LocalCRS.Count == 16)
            {
                Matrix4x4 localCRS = new Matrix4x4();
                localCRS.m00 = obj.LocalCRS[0]; localCRS.m01 = obj.LocalCRS[1]; localCRS.m02 = obj.LocalCRS[2]; localCRS.m03 = obj.LocalCRS[3];
                localCRS.m10 = obj.LocalCRS[4]; localCRS.m11 = obj.LocalCRS[5]; localCRS.m12 = obj.LocalCRS[6]; localCRS.m13 = obj.LocalCRS[7];
                localCRS.m20 = obj.LocalCRS[8]; localCRS.m21 = obj.LocalCRS[9]; localCRS.m22 = obj.LocalCRS[10]; localCRS.m23 = obj.LocalCRS[11];
                localCRS.m30 = obj.LocalCRS[12]; localCRS.m31 = obj.LocalCRS[13]; localCRS.m32 = obj.LocalCRS[14]; localCRS.m33 = obj.LocalCRS[15];
                localCRS_pos = localCRS.GetPosition();
                localCRS_rot = localCRS.rotation.eulerAngles;
            }
            else
            {
                localCRS_pos = Vector3.zero;
                localCRS_rot = Vector3.zero;
            }
            keyValueTags = obj.KeyvalueTags;
            this.Repaint(); // TODO
        }

        public WorldAnchor GenerateWorldAnchor()
        {
#if USING_OPENAPI_GENERATOR
+44 −36
Original line number Diff line number Diff line
@@ -39,6 +39,8 @@ namespace ETSI.ARF.WorldStorage.UI
{
    public class WorldLinkWindow : EditorWindow
    {
        static public WorldLinkWindow winSingleton;

        [HideInInspector] public WorldStorageServer worldStorageServer;
        [HideInInspector] public WorldStorageUser worldStorageUser;

@@ -63,11 +65,16 @@ namespace ETSI.ARF.WorldStorage.UI
        private Color ori;
        private GUIStyle gsTest;

        public static void ShowWindow(WorldStorageServer ws, WorldStorageUser user)
        public static void ShowWindow(WorldStorageServer ws, WorldStorageUser user, string UUID = "")
        {
            winSingleton = EditorWindow.GetWindow(typeof(WorldLinkWindow), false, WorldStorageWindow.winName) as WorldLinkWindow;
            winSingleton.worldStorageServer = ws;
            winSingleton.worldStorageUser = user;
            if (!string.IsNullOrEmpty(UUID))
            {
            WorldLinkWindow win = EditorWindow.GetWindow(typeof(WorldLinkWindow), false, WorldStorageWindow.winName) as WorldLinkWindow;
            win.worldStorageServer = ws;
            win.worldStorageUser = user;
                winSingleton.UUID = UUID;
                winSingleton.GetWorldLinkParams();
            }
        }

        public WorldLinkWindow()
@@ -113,39 +120,11 @@ namespace ETSI.ARF.WorldStorage.UI
            EditorGUILayout.Space();

            GUI.backgroundColor = WorldStorageWindow.arfColors[1];
            if (GUILayout.Button("Get Parameters"))
            {
                if (!customName.Contains("[")) UUID = customName;
                else
                {
                    // extract the UUID
                    UUID = customName.Split('[', ']')[1];
                }
                WorldLink obj = WorldLinkRequest.GetWorldLink(worldStorageServer, UUID);
                //customName = obj.Name;
                creatorUUID = obj.CreatorUUID.ToString();
                fromUUID = obj.UUIDFrom.ToString();
                toUUID = obj.UUIDTo.ToString();
                fromType = obj.TypeFrom;
                toType = obj.TypeTo;
                unit = obj.Unit;
                if (obj.Transform.Count == 16)
            if (GUILayout.Button("Read Parameters"))
            {
                    Matrix4x4 localCRS = new Matrix4x4();
                    localCRS.m00 = obj.Transform[0]; localCRS.m01 = obj.Transform[1]; localCRS.m02 = obj.Transform[2]; localCRS.m03 = obj.Transform[3];
                    localCRS.m10 = obj.Transform[4]; localCRS.m11 = obj.Transform[5]; localCRS.m12 = obj.Transform[6]; localCRS.m13 = obj.Transform[7];
                    localCRS.m20 = obj.Transform[8]; localCRS.m21 = obj.Transform[9]; localCRS.m22 = obj.Transform[10]; localCRS.m23 = obj.Transform[11];
                    localCRS.m30 = obj.Transform[12]; localCRS.m31 = obj.Transform[13]; localCRS.m32 = obj.Transform[14]; localCRS.m33 = obj.Transform[15];
                    localCRS_pos = localCRS.GetPosition();
                    localCRS_rot = localCRS.rotation.eulerAngles;
                }
                else
                {
                    localCRS_pos = Vector3.zero;
                    localCRS_rot = Vector3.zero;
                }
                keyValueTags = obj.KeyvalueTags;
                this.Repaint(); // TODO
                UUID = WorldStorageWindow.GetUUIDFromString(customName);
                if (UUID == null) UUID = customName; // try this
                GetWorldLinkParams();
            }
            GUI.backgroundColor = ori;

@@ -225,6 +204,35 @@ namespace ETSI.ARF.WorldStorage.UI
            GUI.backgroundColor = ori;
        }

        private void GetWorldLinkParams()
        {
            WorldLink obj = WorldLinkRequest.GetWorldLink(worldStorageServer, UUID);
            //customName = obj.Name;
            creatorUUID = obj.CreatorUUID.ToString();
            fromUUID = obj.UUIDFrom.ToString();
            toUUID = obj.UUIDTo.ToString();
            fromType = obj.TypeFrom;
            toType = obj.TypeTo;
            unit = obj.Unit;
            if (obj.Transform.Count == 16)
            {
                Matrix4x4 localCRS = new Matrix4x4();
                localCRS.m00 = obj.Transform[0]; localCRS.m01 = obj.Transform[1]; localCRS.m02 = obj.Transform[2]; localCRS.m03 = obj.Transform[3];
                localCRS.m10 = obj.Transform[4]; localCRS.m11 = obj.Transform[5]; localCRS.m12 = obj.Transform[6]; localCRS.m13 = obj.Transform[7];
                localCRS.m20 = obj.Transform[8]; localCRS.m21 = obj.Transform[9]; localCRS.m22 = obj.Transform[10]; localCRS.m23 = obj.Transform[11];
                localCRS.m30 = obj.Transform[12]; localCRS.m31 = obj.Transform[13]; localCRS.m32 = obj.Transform[14]; localCRS.m33 = obj.Transform[15];
                localCRS_pos = localCRS.GetPosition();
                localCRS_rot = localCRS.rotation.eulerAngles;
            }
            else
            {
                localCRS_pos = Vector3.zero;
                localCRS_rot = Vector3.zero;
            }
            keyValueTags = obj.KeyvalueTags;
            this.Repaint(); // TODO
        }

        public WorldLink GenerateWorldLink()
        {
            Matrix4x4 localCRS = new Matrix4x4();
+104 −7
Original line number Diff line number Diff line
@@ -59,6 +59,12 @@ namespace ETSI.ARF.WorldStorage.UI
        private Color ori;
        private GUIStyle gsTest;

        private static GUILayoutOption miniButtonWidth = GUILayout.Width(32);
        private static GUILayoutOption buttonWidth = GUILayout.Width(64f);
        private bool showListT = true;
        private bool showListA = true;
        private bool showListL = true;

        static public string winName = "ARF Authoring Editor";
        static public Color[] arfColors = new Color[]
        {
@@ -124,6 +130,10 @@ namespace ETSI.ARF.WorldStorage.UI
            EditorGUILayout.EndScrollView();
        }

        public void OnInspectorUpdate()
        {
            this.Repaint();
        }

        void DrawElementStuffs()
        {
@@ -228,9 +238,34 @@ namespace ETSI.ARF.WorldStorage.UI
           
            // Show list
            stringsProperty = so.FindProperty("trackables");
            EditorGUILayout.PropertyField(stringsProperty, /*new GUIContent("Trackbales"),*/ true); // True means show children
            so.ApplyModifiedProperties(); // Remember to apply modified properties
            //EditorGUILayout.PropertyField(stringsProperty, /*new GUIContent("Trackbales"),*/ true); // True means show children
            //so.ApplyModifiedProperties(); // Remember to apply modified properties

            // New version with "Edit" button:
            showListT = EditorGUILayout.BeginFoldoutHeaderGroup(showListT, "List of Trackables");
            if (showListT)
                for (int i = 0; i < stringsProperty.arraySize; i++)
                {
                    EditorGUILayout.BeginHorizontal();
                    EditorGUILayout.PropertyField(stringsProperty.GetArrayElementAtIndex(i));
                    //EditorGUILayout.PropertyField(list.GetArrayElementAtIndex(i), GUIContent.none);

                    string UUID = WorldStorageWindow.GetUUIDFromString(stringsProperty.GetArrayElementAtIndex(i).stringValue);
                    if (UUID == null) UUID = trackables[i]; // try this
                    if (GUILayout.Button("-", EditorStyles.miniButtonLeft, miniButtonWidth))
                    {
                        TrackableRequest.DeleteTrackable(worldStorageServer, UUID);
                        WorldStorageWindowSingleton.GetTrackables();
                        WorldStorageWindowSingleton.Repaint();
                    }
                    if (GUILayout.Button("Edit...", EditorStyles.miniButtonLeft, buttonWidth))
                    {
                        Debug.Log("Open Trackable Window");
                        TrackableWindow.ShowWindow(worldStorageServer, worldStorageUser, UUID);
                    }
                    EditorGUILayout.EndHorizontal();
                }
            EditorGUILayout.EndFoldoutHeaderGroup();
            #endregion

            // ###########################################################
@@ -276,8 +311,34 @@ namespace ETSI.ARF.WorldStorage.UI

            // Show list
            stringsProperty = so.FindProperty("anchors");
            EditorGUILayout.PropertyField(stringsProperty, /*new GUIContent("Trackbales"),*/ true); // True means show children
            so.ApplyModifiedProperties(); // Remember to apply modified properties
            //EditorGUILayout.PropertyField(stringsProperty, /*new GUIContent("Trackbales"),*/ true); // True means show children
            //so.ApplyModifiedProperties(); // Remember to apply modified properties

            // New version with "Edit" button:
            showListA = EditorGUILayout.BeginFoldoutHeaderGroup(showListA, "List of World Anchors");
            if (showListA)
                for (int i = 0; i < stringsProperty.arraySize; i++)
                {
                    EditorGUILayout.BeginHorizontal();
                    EditorGUILayout.PropertyField(stringsProperty.GetArrayElementAtIndex(i));
                    //EditorGUILayout.PropertyField(list.GetArrayElementAtIndex(i), GUIContent.none);

                    string UUID = WorldStorageWindow.GetUUIDFromString(stringsProperty.GetArrayElementAtIndex(i).stringValue);
                    if (UUID == null) UUID = anchors[i]; // try this
                    if (GUILayout.Button("-", EditorStyles.miniButtonLeft, miniButtonWidth))
                    {
                        WorldAnchorRequest.DeleteWorldAnchor(worldStorageServer, UUID);
                        WorldStorageWindowSingleton.GetWorldAnchors();
                        WorldStorageWindowSingleton.Repaint();
                    }
                    if (GUILayout.Button("Edit...", EditorStyles.miniButtonLeft, buttonWidth))
                    {
                        Debug.Log("Open Anchor Window");
                        WorldAnchorWindow.ShowWindow(worldStorageServer, worldStorageUser, UUID);
                    }
                    EditorGUILayout.EndHorizontal();
                }
            EditorGUILayout.EndFoldoutHeaderGroup();
            #endregion

            // ###########################################################
@@ -323,8 +384,35 @@ namespace ETSI.ARF.WorldStorage.UI

            // Show list
            stringsProperty = so.FindProperty("links");
            EditorGUILayout.PropertyField(stringsProperty, /*new GUIContent("Trackbales"),*/ true); // True means show children
            so.ApplyModifiedProperties(); // Remember to apply modified properties
            //EditorGUILayout.PropertyField(stringsProperty, /*new GUIContent("Trackbales"),*/ true); // True means show children
            //so.ApplyModifiedProperties(); // Remember to apply modified properties

            // New version with "Edit" button:
            showListL = EditorGUILayout.BeginFoldoutHeaderGroup(showListL, "List of World Links");
            if (showListL)
                for (int i = 0; i < stringsProperty.arraySize; i++)
                {
                    EditorGUILayout.BeginHorizontal();
                    EditorGUILayout.PropertyField(stringsProperty.GetArrayElementAtIndex(i));
                    //EditorGUILayout.PropertyField(list.GetArrayElementAtIndex(i), GUIContent.none);

                    string UUID = WorldStorageWindow.GetUUIDFromString(stringsProperty.GetArrayElementAtIndex(i).stringValue);
                    if (UUID == null) UUID = links[i]; // try this
                    if (GUILayout.Button("-", EditorStyles.miniButtonLeft, miniButtonWidth))
                    {
                        WorldLinkRequest.DeleteWorldLink(worldStorageServer, UUID);
                        WorldStorageWindowSingleton.GetWorldLinks();
                        WorldStorageWindowSingleton.Repaint();
                    }
                    if (GUILayout.Button("Edit...", EditorStyles.miniButtonLeft, buttonWidth))
                    {
                        Debug.Log("Open Link Window");
                        
                        WorldLinkWindow.ShowWindow(worldStorageServer, worldStorageUser, UUID);
                    }
                    EditorGUILayout.EndHorizontal();
                }
            EditorGUILayout.EndFoldoutHeaderGroup();
            #endregion

            //
@@ -335,6 +423,15 @@ namespace ETSI.ARF.WorldStorage.UI
        // Get elements from current server
        // ###########################################################
        #region Helpers
        static public string GetUUIDFromString(string text)
        {
            if (!text.Contains("[")) return null;
            else
            {
                // extract the UUID
                return text.Split('[', ']')[1];
            }
        }
        public void GetCreators()
        {
            // Get all objects
+62 −62

File changed.

Preview size limit exceeded, changes collapsed.