From d0d5b992d793f37da90b1ea3b8b3b85284ffa666 Mon Sep 17 00:00:00 2001 From: Lars Brubaker Date: Thu, 22 Apr 2021 12:31:42 -0700 Subject: [PATCH] description working with icon improving github container --- .../Attributes/MarkdownStringAttribute.cs | 38 --------------- .../Primitives/DescriptionObject3D.cs | 46 +++++++++--------- .../DesignTools/PublicPropertyEditor.cs | 12 ----- .../Providers/GitHub/GitHubContainer.cs | 23 +++++---- .../Providers/GitHub/GitHubLibraryItem.cs | 2 +- .../PartPreviewWindow/MainViewWidget.cs | 43 ++++++++-------- .../11449967961953374403-256x256.png | Bin 0 -> 7882 bytes StaticData/Stls/description_tool.amf | Bin 8022 -> 7462 bytes 8 files changed, 61 insertions(+), 103 deletions(-) delete mode 100644 MatterControlLib/DesignTools/Attributes/MarkdownStringAttribute.cs create mode 100644 StaticData/Images/Thumbnails/11449967961953374403-256x256.png diff --git a/MatterControlLib/DesignTools/Attributes/MarkdownStringAttribute.cs b/MatterControlLib/DesignTools/Attributes/MarkdownStringAttribute.cs deleted file mode 100644 index 38c429733..000000000 --- a/MatterControlLib/DesignTools/Attributes/MarkdownStringAttribute.cs +++ /dev/null @@ -1,38 +0,0 @@ -/* -Copyright (c) 2018, Lars Brubaker, John Lewin -All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - -1. Redistributions of source code must retain the above copyright notice, this - list of conditions and the following disclaimer. -2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions and the following disclaimer in the documentation - and/or other materials provided with the distribution. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND -ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR -ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -The views and conclusions contained in the software and documentation are those -of the authors and should not be interpreted as representing official policies, -either expressed or implied, of the FreeBSD Project. -*/ - -using System; - -namespace MatterHackers.MatterControl.DesignTools -{ - [AttributeUsage(AttributeTargets.Property)] - public class MarkdownStringAttribute : Attribute - { - } -} \ No newline at end of file diff --git a/MatterControlLib/DesignTools/Primitives/DescriptionObject3D.cs b/MatterControlLib/DesignTools/Primitives/DescriptionObject3D.cs index 7837ce634..b09620551 100644 --- a/MatterControlLib/DesignTools/Primitives/DescriptionObject3D.cs +++ b/MatterControlLib/DesignTools/Primitives/DescriptionObject3D.cs @@ -49,7 +49,6 @@ using MatterHackers.VectorMath; namespace MatterHackers.MatterControl.DesignTools { [HideChildrenFromTreeView] - [MarkDownDescription("Drag the sphere to the location you would like to position the description.")] [HideMeterialAndColor] public class DescriptionObject3D : Object3D, IObject3DControlsProvider, IAlwaysEditorDraw, IEditorButtonProvider { @@ -59,11 +58,6 @@ namespace MatterHackers.MatterControl.DesignTools public DescriptionObject3D() { Name = "Description".Localize(); - - using (Stream measureAmfStream = StaticData.Instance.OpenStream(Path.Combine("Stls", "description_tool.amf"))) - { - Children.Add(AmfDocument.Load(measureAmfStream, CancellationToken.None)); - } } public static async Task Create() @@ -79,7 +73,7 @@ namespace MatterHackers.MatterControl.DesignTools [HideFromEditor] public bool PositionHasBeenSet { get; set; } = false; - [MarkdownString] + [MultiLineEdit] public string Description { get; set; } = "Type a description in the properties panel"; public enum Placements @@ -116,10 +110,7 @@ namespace MatterHackers.MatterControl.DesignTools { tracedPositionControl = new TracedPositionObject3DControl(object3DControlsLayer, this, - () => - { - return PositionHasBeenSet ? Position : Position.Transform(Matrix); - }, + () => Position, (position) => { if (!PositionHasBeenSet) @@ -127,8 +118,11 @@ namespace MatterHackers.MatterControl.DesignTools PositionHasBeenSet = true; } - Position = position; - UiThread.RunOnIdle(() => Invalidate(InvalidateType.DisplayValues)); + if (Position != position) + { + Position = position; + UiThread.RunOnIdle(() => Invalidate(InvalidateType.DisplayValues)); + } }); } @@ -196,10 +190,26 @@ namespace MatterHackers.MatterControl.DesignTools public void DrawEditor(Object3DControlsLayer controlLayer, List transparentMeshes, DrawEventArgs e) { - var start = PositionHasBeenSet ? Position : Position.Transform(Matrix); + if (this.VisibleMeshes().Count() == 0) + { + // add the amf content + using (Stream measureAmfStream = StaticData.Instance.OpenStream(Path.Combine("Stls", "description_tool.amf"))) + { + Children.Add(AmfDocument.Load(measureAmfStream, CancellationToken.None)); + } + } var world = controlLayer.World; + if (!PositionHasBeenSet) + { + var aabb = this.GetAxisAlignedBoundingBox(); + Position = new Vector3(aabb.MinXYZ.X, aabb.MaxXYZ.Y, aabb.MaxXYZ.Z); + } + + + var start = Position; + var screenStart = world.GetScreenPosition(start); CreateWidgetIfRequired(controlLayer); @@ -237,13 +247,6 @@ namespace MatterHackers.MatterControl.DesignTools var transform = Matrix4X4.CreateScale(distBetweenPixelsWorldSpace) * world.RotationMatrix.Inverted * Matrix4X4.CreateTranslation(start); var theme = ApplicationController.Instance.MenuTheme; graphics2DOpenGL.RenderTransformedPath(transform, new Ellipse(0, 0, 5, 5), theme.PrimaryAccentColor, false); - - var hitPlane = tracedPositionControl?.HitPlane; - if (hitPlane != null) - { - world.RenderPlane(hitPlane.Plane, Color.Red, true, 30, 3); - //world.RenderPlane(initialHitPosition, hitPlane.Plane.Normal, Color.Red, true, 30, 3); - } } private void CreateWidgetIfRequired(Object3DControlsLayer controlLayer) @@ -309,7 +312,6 @@ namespace MatterHackers.MatterControl.DesignTools if (delta.LengthSquared > 0) { tracedPositionControl.MoveToScreenPosition(screenStart + delta); - // widgetDownPosition = ePosition; } } } diff --git a/MatterControlLib/DesignTools/PublicPropertyEditor.cs b/MatterControlLib/DesignTools/PublicPropertyEditor.cs index 774c86940..117c5c49c 100644 --- a/MatterControlLib/DesignTools/PublicPropertyEditor.cs +++ b/MatterControlLib/DesignTools/PublicPropertyEditor.cs @@ -690,18 +690,6 @@ namespace MatterHackers.MatterControl.DesignTools RegisterValueChanged(field, (valueString) => valueString); rowContainer = CreateSettingsColumn(property, field, fullWidth: true); } - else if (property.PropertyInfo.GetCustomAttributes(true).OfType().FirstOrDefault() != null) - { - // create a a multi-line string editor - var field = new MarkdownEditField(theme, "Description".Localize()); - field.Initialize(0); - field.SetValue(stringValue, false); - field.ClearUndoHistory(); - field.Content.HAnchor = HAnchor.Stretch; - // field.Content.MinimumSize = new Vector2(0, 200 * GuiWidget.DeviceScale); - RegisterValueChanged(field, (valueString) => valueString); - rowContainer = CreateSettingsColumn(property, field, fullWidth: true); - } else { // create a string editor diff --git a/MatterControlLib/Library/Providers/GitHub/GitHubContainer.cs b/MatterControlLib/Library/Providers/GitHub/GitHubContainer.cs index 64833ce0d..5e0cdbdc8 100644 --- a/MatterControlLib/Library/Providers/GitHub/GitHubContainer.cs +++ b/MatterControlLib/Library/Providers/GitHub/GitHubContainer.cs @@ -178,18 +178,21 @@ namespace MatterHackers.MatterControl.Library { lock (locker) { - FileInfo[] dirContents = JsonConvert.DeserializeObject(content); - - // read in data - foreach (FileInfo file in dirContents) + if (!string.IsNullOrEmpty(content) && !content.Contains("\"Not Found\"")) { - if (file.type == "file") - { - imageUrlCache.Add((file.name, file.download_url)); - } - } + FileInfo[] dirContents = JsonConvert.DeserializeObject(content); - imageUrlCaches[key] = imageUrlCache; + // read in data + foreach (FileInfo file in dirContents) + { + if (file.type == "file") + { + imageUrlCache.Add((file.name, file.download_url)); + } + } + + imageUrlCaches[key] = imageUrlCache; + } } }, false, diff --git a/MatterControlLib/Library/Providers/GitHub/GitHubLibraryItem.cs b/MatterControlLib/Library/Providers/GitHub/GitHubLibraryItem.cs index 2a882ab6f..104aa5a05 100644 --- a/MatterControlLib/Library/Providers/GitHub/GitHubLibraryItem.cs +++ b/MatterControlLib/Library/Providers/GitHub/GitHubLibraryItem.cs @@ -89,7 +89,7 @@ namespace MatterHackers.MatterControl.Library public string FileKey => Url.GetLongHashCode().ToString(); - public string FileExtension => Path.GetExtension(Name).Substring(1); + public string FileExtension => Path.GetExtension(FileName).Substring(1); public static string GetLibraryPath(string fileKey, string fileExtension) { diff --git a/MatterControlLib/PartPreviewWindow/MainViewWidget.cs b/MatterControlLib/PartPreviewWindow/MainViewWidget.cs index a67bb9acc..44ae81e34 100644 --- a/MatterControlLib/PartPreviewWindow/MainViewWidget.cs +++ b/MatterControlLib/PartPreviewWindow/MainViewWidget.cs @@ -749,28 +749,31 @@ namespace MatterHackers.MatterControl.PartPreviewWindow var menuTheme = ApplicationController.Instance.MenuTheme; var popupMenu = new PopupMenu(menuTheme); - var renameMenuItem = popupMenu.CreateMenuItem("Rename".Localize()); - renameMenuItem.Click += (s, e) => + if (printer != null) { - if (workspace != null) + var renameMenuItem = popupMenu.CreateMenuItem("Rename".Localize()); + renameMenuItem.Click += (s, e) => { - workspace.LibraryView.ActiveContainer.Rename(workspace.LibraryView.ActiveContainer.Items.FirstOrDefault()); - } - else if (printer != null) - { - DialogWindow.Show( - new InputBoxPage( - "Rename Item".Localize(), - "Name".Localize(), - printer.Settings.GetValue(SettingsKey.printer_name), - "Enter New Name Here".Localize(), - "Rename".Localize(), - (newName) => - { - printer.Settings.SetValue(SettingsKey.printer_name, newName); - })); - } - }; + if (workspace != null) + { + workspace.LibraryView.ActiveContainer.Rename(workspace.LibraryView.ActiveContainer.Items.FirstOrDefault()); + } + else if (printer != null) + { + DialogWindow.Show( + new InputBoxPage( + "Rename Item".Localize(), + "Name".Localize(), + printer.Settings.GetValue(SettingsKey.printer_name), + "Enter New Name Here".Localize(), + "Rename".Localize(), + (newName) => + { + printer.Settings.SetValue(SettingsKey.printer_name, newName); + })); + } + }; + } var moveButtons = new FlowLayoutWidget(); diff --git a/StaticData/Images/Thumbnails/11449967961953374403-256x256.png b/StaticData/Images/Thumbnails/11449967961953374403-256x256.png new file mode 100644 index 0000000000000000000000000000000000000000..77d9665ca01be754e5b93a5309711ba33cc80846 GIT binary patch literal 7882 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 QMg~R(Ck6(Fe{vum06y}1_W%F@