diff --git a/Content/UniversalEditor.Content.PlatformIndependent/Editors/FileSystem/Commands.uexml b/Content/UniversalEditor.Content.PlatformIndependent/Editors/FileSystem/Commands.uexml index 72ed3914..799f1240 100644 --- a/Content/UniversalEditor.Content.PlatformIndependent/Editors/FileSystem/Commands.uexml +++ b/Content/UniversalEditor.Content.PlatformIndependent/Editors/FileSystem/Commands.uexml @@ -49,7 +49,7 @@ - + @@ -149,6 +149,22 @@ + + + + + + + + + + + + + + + + diff --git a/Content/UniversalEditor.Content.PlatformIndependent/Editors/Multimedia3D/Model/Icons/cube.png b/Content/UniversalEditor.Content.PlatformIndependent/Editors/Multimedia3D/Model/Icons/cube.png new file mode 100644 index 00000000..6f430f81 Binary files /dev/null and b/Content/UniversalEditor.Content.PlatformIndependent/Editors/Multimedia3D/Model/Icons/cube.png differ diff --git a/Content/UniversalEditor.Content.PlatformIndependent/Editors/Multimedia3D/Model/Icons/cube.svg b/Content/UniversalEditor.Content.PlatformIndependent/Editors/Multimedia3D/Model/Icons/cube.svg new file mode 100644 index 00000000..b03a6dd1 --- /dev/null +++ b/Content/UniversalEditor.Content.PlatformIndependent/Editors/Multimedia3D/Model/Icons/cube.svg @@ -0,0 +1,105 @@ + + + + + + + + + + + + + + + + + + + diff --git a/Content/UniversalEditor.Content.PlatformIndependent/Editors/Multimedia3D/Model/Icons/sphere.png b/Content/UniversalEditor.Content.PlatformIndependent/Editors/Multimedia3D/Model/Icons/sphere.png new file mode 100644 index 00000000..c35485d6 Binary files /dev/null and b/Content/UniversalEditor.Content.PlatformIndependent/Editors/Multimedia3D/Model/Icons/sphere.png differ diff --git a/Content/UniversalEditor.Content.PlatformIndependent/Editors/Multimedia3D/Model/Icons/sphere.svg b/Content/UniversalEditor.Content.PlatformIndependent/Editors/Multimedia3D/Model/Icons/sphere.svg new file mode 100644 index 00000000..3419275a --- /dev/null +++ b/Content/UniversalEditor.Content.PlatformIndependent/Editors/Multimedia3D/Model/Icons/sphere.svg @@ -0,0 +1,78 @@ + + + + + + + + + + + + + + + + diff --git a/Content/UniversalEditor.Content.PlatformIndependent/Extensions/Multimedia3D/Languages/English.uexml b/Content/UniversalEditor.Content.PlatformIndependent/Extensions/Multimedia3D/Languages/English.uexml new file mode 100644 index 00000000..53ab99db --- /dev/null +++ b/Content/UniversalEditor.Content.PlatformIndependent/Extensions/Multimedia3D/Languages/English.uexml @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + diff --git a/Content/UniversalEditor.Content.PlatformIndependent/UniversalEditor.Content.PlatformIndependent.csproj b/Content/UniversalEditor.Content.PlatformIndependent/UniversalEditor.Content.PlatformIndependent.csproj index 8957004f..69474d60 100644 --- a/Content/UniversalEditor.Content.PlatformIndependent/UniversalEditor.Content.PlatformIndependent.csproj +++ b/Content/UniversalEditor.Content.PlatformIndependent/UniversalEditor.Content.PlatformIndependent.csproj @@ -326,6 +326,9 @@ + + + @@ -363,6 +366,8 @@ + + @@ -373,6 +378,8 @@ + + diff --git a/Libraries/UniversalEditor.UserInterface/Common/Reflection.cs b/Libraries/UniversalEditor.UserInterface/Common/Reflection.cs index ec94f3f7..59eb0354 100644 --- a/Libraries/UniversalEditor.UserInterface/Common/Reflection.cs +++ b/Libraries/UniversalEditor.UserInterface/Common/Reflection.cs @@ -296,6 +296,20 @@ namespace UniversalEditor.UserInterface.Common er.Variables.Add(varr); } } + + + MarkupTagElement tagCommandBars = (tagEditor.Elements["CommandBars"] as MarkupTagElement); + if (tagCommandBars != null) + { + foreach (MarkupElement elCommandBar in tagCommandBars.Elements) + { + CommandBar cb = CommandBarLoader.LoadCommandBarXML(elCommandBar as MarkupTagElement); + if (cb != null) + { + er.CommandBars.Add(cb); + } + } + } } } } diff --git a/Libraries/UniversalEditor.UserInterface/EditorContext.cs b/Libraries/UniversalEditor.UserInterface/EditorContext.cs index 266231c8..086b7a2c 100644 --- a/Libraries/UniversalEditor.UserInterface/EditorContext.cs +++ b/Libraries/UniversalEditor.UserInterface/EditorContext.cs @@ -45,6 +45,10 @@ namespace UniversalEditor.UserInterface { Commands.Add(reference.Commands[i]); } + for (int i = 0; i < reference.CommandBars.Count; i++) + { + CommandBars.Add(reference.CommandBars[i]); + } for (int i = 0; i < reference.MenuBar.Items.Count; i++) { MenuItems.Add(reference.MenuBar.Items[i]); diff --git a/Libraries/UniversalEditor.UserInterface/EditorReference.cs b/Libraries/UniversalEditor.UserInterface/EditorReference.cs index 29a31aed..fe9b2f1b 100644 --- a/Libraries/UniversalEditor.UserInterface/EditorReference.cs +++ b/Libraries/UniversalEditor.UserInterface/EditorReference.cs @@ -30,6 +30,7 @@ namespace UniversalEditor.UserInterface public MarkupTagElement Configuration { get; set; } = null; public CommandBar MenuBar { get; } = new CommandBar(); + public CommandBar.CommandBarCollection CommandBars { get; } = new CommandBar.CommandBarCollection(); public Command.CommandCollection Commands { get; } = new Command.CommandCollection(); public PanelReference.PanelReferenceCollection Panels { get; } = new PanelReference.PanelReferenceCollection(); public EditorView.EditorViewCollection Views { get; } = new EditorView.EditorViewCollection(); diff --git a/Plugins.UserInterface/UniversalEditor.Plugins.Multimedia.UserInterface/Plugins/Transport/TransportPlugin.cs b/Plugins.UserInterface/UniversalEditor.Plugins.Multimedia.UserInterface/Plugins/Transport/TransportPlugin.cs index 05cd0e2a..00174853 100644 --- a/Plugins.UserInterface/UniversalEditor.Plugins.Multimedia.UserInterface/Plugins/Transport/TransportPlugin.cs +++ b/Plugins.UserInterface/UniversalEditor.Plugins.Multimedia.UserInterface/Plugins/Transport/TransportPlugin.cs @@ -73,11 +73,11 @@ namespace UniversalEditor.Plugins.Multimedia.UserInterface.Plugins.Transport { base.InitializeInternal(); - Context.Commands.Add(new Command("Transport_Rewind", "_Rewind")); - Context.Commands.Add(new Command("Transport_Back", "_Back")); - Context.Commands.Add(new Command("Transport_Play", "_Play")); - Context.Commands.Add(new Command("Transport_Forward", "_Forward")); - Context.Commands.Add(new Command("Transport_End", "_End")); + Context.Commands.Add(new Command("Transport_Rewind", "_Rewind") { StockType = StockType.MediaPrevious }); + Context.Commands.Add(new Command("Transport_Back", "_Back") { StockType = StockType.MediaRewind }); + Context.Commands.Add(new Command("Transport_Play", "_Play") { StockType = StockType.MediaPlay }); + Context.Commands.Add(new Command("Transport_Forward", "_Forward") { StockType = StockType.MediaForward }); + Context.Commands.Add(new Command("Transport_End", "_End") { StockType = StockType.MediaNext }); Context.Commands.Add(new Command("Transport_Transport", "P_layback", new CommandItem[] { new CommandReferenceCommandItem("Transport_Rewind"), diff --git a/Plugins.UserInterface/UniversalEditor.Plugins.Multimedia3D.UserInterface/Editors/Model/ModelEditor.cs b/Plugins.UserInterface/UniversalEditor.Plugins.Multimedia3D.UserInterface/Editors/Model/ModelEditor.cs index 9500ccaf..fa78e17e 100644 --- a/Plugins.UserInterface/UniversalEditor.Plugins.Multimedia3D.UserInterface/Editors/Model/ModelEditor.cs +++ b/Plugins.UserInterface/UniversalEditor.Plugins.Multimedia3D.UserInterface/Editors/Model/ModelEditor.cs @@ -27,6 +27,7 @@ using MBS.Framework.Rendering; using MBS.Framework.UserInterface; using MBS.Framework.UserInterface.Controls; using MBS.Framework.UserInterface.Dialogs; +using MBS.Framework.UserInterface.Input.Mouse; using MBS.Framework.UserInterface.Layouts; using UniversalEditor.ObjectModels.Multimedia3D.Model; @@ -46,18 +47,29 @@ namespace UniversalEditor.Plugins.Multimedia3D.UserInterface.Editors.Model { _er = base.MakeReference(); _er.SupportedObjectModels.Add(typeof(ModelObjectModel)); + + _er.Commands.Add(new Command("ModelEditor_Insert_Cube", "Cube") { ImageFileName = "Editors/Multimedia3D/Model/Icons/cube.png" }); + _er.Commands.Add(new Command("ModelEditor_Insert_Sphere", "Sphere") { ImageFileName = "Editors/Multimedia3D/Model/Icons/sphere.png" }); + _er.Commands.Add(new Command("ModelEditor_Insert_Plane", "Plane") { ImageFileName = "Editors/Multimedia3D/Model/Icons/plane.png" }); + + _er.CommandBars.Add(new CommandBar("ModelEditor_Insert", "Insert", new CommandItem[] + { + new CommandReferenceCommandItem("ModelEditor_Insert_Cube"), + new CommandReferenceCommandItem("ModelEditor_Insert_Sphere"), + new CommandReferenceCommandItem("ModelEditor_Insert_Plane"), + new SeparatorCommandItem() + })); } return _er; } public override void UpdateSelections() { - throw new NotImplementedException(); } protected override Selection CreateSelectionInternal(object content) { - throw new NotImplementedException(); + return null; } private OpenGLCanvas gla = null; @@ -67,6 +79,7 @@ namespace UniversalEditor.Plugins.Multimedia3D.UserInterface.Editors.Model this.Layout = new BoxLayout(Orientation.Vertical); gla = new OpenGLCanvas(); + gla.FocusOnClick = true; gla.Realize += gla_Realize; gla.Render += gla_Render; this.Controls.Add(gla, new BoxLayout.Constraints(true, true)); @@ -116,7 +129,7 @@ namespace UniversalEditor.Plugins.Multimedia3D.UserInterface.Editors.Model new VERTEX(-0.5f, -0.366f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 1.0f, 0.0f, 0.0f) }; - VertexArray[] vaos = null; + VertexArray vao = null; /// /// Computes the modelview projection @@ -176,6 +189,16 @@ namespace UniversalEditor.Plugins.Multimedia3D.UserInterface.Editors.Model void gla_Render(object sender, OpenGLCanvasRenderEventArgs e) { + if (fatalError) + return; + + if (e.Canvas == null) + { + MessageDialog.ShowDialog(String.Format("{0} . {1} {2} .\n\n", this._("Multimedia3D.Errors.CanvasInaccessible"), this._("Multimedia3D.Errors.RenderingUnavailable"), this._("Multimedia3D.Errors.CheckRequiredLibraries")), this._("Framework.Errors.GenericErrorTitle"), MessageDialogButtons.OK, MessageDialogIcon.Error); + fatalError = true; + return; + } + e.Canvas.Clear(Colors.Gray); if (p == null && !fatalError) @@ -185,7 +208,7 @@ namespace UniversalEditor.Plugins.Multimedia3D.UserInterface.Editors.Model string vtxFileName = ((UIApplication)Application.Instance).ExpandRelativePath("~/Editors/Multimedia3D/Model/Shaders/Default/default_vtx.glsl"); if (!System.IO.File.Exists(vtxFileName)) { - MessageDialog.ShowDialog(String.Format("Vertex shader not found . The rendering will be unavailable. Check to ensure the file exists and is readable .\n\n{0}", vtxFileName), "Error", MessageDialogButtons.OK, MessageDialogIcon.Error); + MessageDialog.ShowDialog(String.Format("{0} . {1} {2} .\n\n", this._("Multimedia3D.Errors.VertexShaderNotFound"), this._("Multimedia3D.Errors.RenderingUnavailable"), this._("Multimedia3D.Errors.CheckRequiredFile")), this._("Framework.Errors.GenericErrorTitle"), MessageDialogButtons.OK, MessageDialogIcon.Error); fatalError = true; p = null; return; @@ -197,7 +220,7 @@ namespace UniversalEditor.Plugins.Multimedia3D.UserInterface.Editors.Model string frgFileName = ((UIApplication)Application.Instance).ExpandRelativePath("~/Editors/Multimedia3D/Model/Shaders/Default/default_frg.glsl"); if (!System.IO.File.Exists(vtxFileName)) { - MessageDialog.ShowDialog(String.Format("Fragment shader not found . The rendering will be unavailable. Check to ensure the file exists and is readable .\n\n{0}", frgFileName), "Error", MessageDialogButtons.OK, MessageDialogIcon.Error); + MessageDialog.ShowDialog(String.Format("{0} . {1} {2} .\n\n", this._("Multimedia3D.Errors.FragmentShaderNotFound"), this._("Multimedia3D.Errors.RenderingUnavailable"), this._("Multimedia3D.Errors.CheckRequiredFile")), this._("Framework.Errors.GenericErrorTitle"), MessageDialogButtons.OK, MessageDialogIcon.Error); fatalError = true; p = null; return; @@ -220,11 +243,11 @@ namespace UniversalEditor.Plugins.Multimedia3D.UserInterface.Editors.Model } /* use the buffers in the VAO */ - if (vaos != null) + if (vao != null) { try { - vaos[0].Bind(); + vao.Bind(); /* draw the three vertices as a triangle */ e.Canvas.DrawArrays(RenderMode.Triangles, 0, vertex_data.Length); @@ -289,18 +312,18 @@ namespace UniversalEditor.Plugins.Multimedia3D.UserInterface.Editors.Model vertex_data = list.ToArray(); } - if (vaos != null) + if (vao != null) { - gla.Engine.DeleteVertexArray(vaos); + gla.Engine.DeleteVertexArray(vao); } // we need to create a VAO to store the other buffers - vaos = gla.Engine.CreateVertexArray(1); + vao = gla.Engine.CreateVertexArray(); // this is the VBO that holds the vertex data using (RenderBuffer buffer = gla.Engine.CreateBuffer()) { - vaos[0].Bind(); + vao.Bind(); buffer.Bind(BufferTarget.ArrayBuffer); buffer.SetData(vertex_data, BufferDataUsage.StaticDraw); @@ -320,7 +343,7 @@ namespace UniversalEditor.Plugins.Multimedia3D.UserInterface.Editors.Model // reset the state; we will re-enable the VAO when needed buffer.Unbind(); - vaos[0].Unbind(); // must be called BEFORE the buffer gets disposed + vao.Unbind(); // must be called BEFORE the buffer gets disposed } changed = false; }