From 196d47840cbd286487f21675900cb1c39c0c674d Mon Sep 17 00:00:00 2001 From: Michael Becker Date: Sun, 31 Oct 2021 14:56:45 -0400 Subject: [PATCH] implement Editor-specific CommandBars for certain Editors --- .../Editors/FileSystem/Commands.uexml | 18 ++- .../Editors/Multimedia3D/Model/Icons/cube.png | Bin 0 -> 744 bytes .../Editors/Multimedia3D/Model/Icons/cube.svg | 105 ++++++++++++++++++ .../Multimedia3D/Model/Icons/sphere.png | Bin 0 -> 1128 bytes .../Multimedia3D/Model/Icons/sphere.svg | 78 +++++++++++++ .../Multimedia3D/Languages/English.uexml | 15 +++ ...lEditor.Content.PlatformIndependent.csproj | 7 ++ .../Common/Reflection.cs | 14 +++ .../EditorContext.cs | 4 + .../EditorReference.cs | 1 + .../Plugins/Transport/TransportPlugin.cs | 10 +- .../Editors/Model/ModelEditor.cs | 47 ++++++-- 12 files changed, 281 insertions(+), 18 deletions(-) create mode 100644 Content/UniversalEditor.Content.PlatformIndependent/Editors/Multimedia3D/Model/Icons/cube.png create mode 100644 Content/UniversalEditor.Content.PlatformIndependent/Editors/Multimedia3D/Model/Icons/cube.svg create mode 100644 Content/UniversalEditor.Content.PlatformIndependent/Editors/Multimedia3D/Model/Icons/sphere.png create mode 100644 Content/UniversalEditor.Content.PlatformIndependent/Editors/Multimedia3D/Model/Icons/sphere.svg create mode 100644 Content/UniversalEditor.Content.PlatformIndependent/Extensions/Multimedia3D/Languages/English.uexml 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 0000000000000000000000000000000000000000..6f430f81d9e380f6308de3c2b08c8f4d32cdd491 GIT binary patch literal 744 zcmVP)ljh7yFso2J*9yBIxYMQh+ z554qMZl=(4>v!nMgNc|JUm}7lATPVi_RvVNz_K94wDEVGnP>jLc{0fiz%7HiDOz3K z{xC9fkJPm6D@6%k^i?1lO@8!xg(q`!v#4CISbKY?JLzs`~YvEDJG&5L7CS0#|g}6-NT9n%IzK{2ZZQ z%k2c}anhBx0*aD+Bg^74LHu6oRNxA`u26P`s+w5w`>%(01H;g0e0*@iGy`z}VCv_H zRz-@EcRMycG>bs`}-r&xhakBOIVf2PBEzAj$rO zHx;lflkQu3GXWGMPMNGWpt=Ah6)^2*7bH&@^Q@ z7AO`A!1FGco({DQwxduefoU3LjLY9e5k=by7=~Ugl`bF@ngELG=!#r}BneBBm>rH| z)@No0;;q&-5x7)&o{#MBrylUUFepiqM-T)@w+kTz7&E7$$b33K*ViJEK%s4olZ_V_ z<3lWKJ*FsnieYrQBGhioBTs0000 + + + + + + + + + + + + + + + + + + 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 0000000000000000000000000000000000000000..c35485d6dda74bdf6148da8393fa4d4019c1debc GIT binary patch literal 1128 zcmV-u1eg1XP)`55Vi|9!)OJGk5Iq1cMd+{WqVDOZK z{sRMhQv^LMaXpC_brB2*bMqQVXEi>u31pmp)WgG0HPyZI*r4DgKPaZVs;0i5`qr;% zYJiLQpM#vI^ZNSwr6`JC4a4wS5CqTozP~7hNI2)eGsX@nrQaE2cGuR{e%#*P*8dqm zx7$r9rEiB}_B}sBC zj^oQw6d{gdL{S6_;rl*>5a67HQVIajT0=^Ss;a&yisFrazyJ5N@!1^l>zwni!Z5sK z1>NF;SQy{;!8x~%bd51Dce~wNgTY`T#8iOg<>hAq+zx^uw02JtkD{mnV%=bjfe->h z$YnyvbG=^gv%S4N)zI)34#Do6d_3xBuRoeju8Ywy&U8IH@3F6o}LS^ zy1Lo{a07s~u+DDx(}m)k!}oo}af~>Q8+l+0rPO1LeJ~fGEXz#*!4zj62tr8Xx&7XX z&5ezXXeIz55(J06=Z8wb+W-nL1~G1I%?{ERLcmewYbB2-!8pyxFeL^SmMM z3b@JGZg+P|p67>y!Qkha0F1G3q?88$mfd<|3`V0-J##DICZxLr?K5J${x<=bhF%-s zuj=sWY!+r>Cd)gb<%H##RX-U7YV0{TG0@ zvMl=qt;BQVp$AOUv + + + + + + + + + + + + + + + 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; }