Merge pull request #3459 from larsbrubaker/design_tools

Design tools
This commit is contained in:
Lars Brubaker 2018-06-22 19:09:26 -07:00 committed by GitHub
commit ed7dc9ce99
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
15 changed files with 140 additions and 126 deletions

View file

@ -33,7 +33,7 @@ using System.IO;
using System.Linq;
#if !__ANDROID__
using Markdig.Wpf;
using Markdig.Agg;
#endif
using MatterHackers.Agg;

View file

@ -449,6 +449,7 @@
<Compile Include="Utilities\LimitCallFrequency.cs" />
<Compile Include="Utilities\MarkdigAgg\MarkdownExtensions.cs" />
<Compile Include="Utilities\MarkdigAgg\MarkdownPage.cs" />
<Compile Include="Utilities\MarkdigAgg\MarkdownWidget.cs" />
<Compile Include="Utilities\SelectedListItems.cs" />
<Compile Include="EeProm\EePromMarlinSettings.cs" />
<Compile Include="History\PrintHistoryListItem.cs" />

View file

@ -151,8 +151,8 @@ namespace MatterHackers.MatterControl.PartPreviewWindow
};
applyButton.Click += (s, e) =>
{
scene.SelectedItem = null;
this.item.Apply(view3DWidget.Scene.UndoBuffer);
scene.SelectedItem = null;
};
scene.SelectionChanged += (s, e) => applyButton.Enabled = scene.SelectedItem?.CanApply == true;
toolbar.AddChild(applyButton);
@ -165,8 +165,8 @@ namespace MatterHackers.MatterControl.PartPreviewWindow
};
removeButton.Click += (s, e) =>
{
scene.SelectedItem = null;
this.item.Remove(view3DWidget.Scene.UndoBuffer);
scene.SelectedItem = null;
};
scene.SelectionChanged += (s, e) => removeButton.Enabled = scene.SelectedItem?.CanRemove == true;
toolbar.AddChild(removeButton);

View file

@ -30,6 +30,7 @@ either expressed or implied, of the FreeBSD Project.
using System;
using System.Collections.Generic;
using System.Linq;
using Markdig.Agg;
using MatterHackers.Agg;
using MatterHackers.Agg.Image;
using MatterHackers.Agg.UI;
@ -265,22 +266,7 @@ namespace MatterHackers.MatterControl
Padding = theme.DefaultContainerPadding
};
var imageSequenceWidget = new ImageSequenceWidget(300, 200)
{
HAnchor = HAnchor.Stretch,
VAnchor = VAnchor.Stretch,
ImageSequence = sequence,
BackgroundColor = theme.MinimalShade
};
rightPanel.AddChild(imageSequenceWidget);
var title = new WrappedTextWidget("title", pointSize: 24, textColor: theme.Colors.PrimaryTextColor)
{
Margin = new BorderDouble(10, 4, 10, 10)
};
rightPanel.AddChild(title);
var description = new WrappedTextWidget("details", pointSize: theme.DefaultFontSize, textColor: theme.Colors.PrimaryTextColor)
var description = new MarkdownWidget(new Uri("https://raw.githubusercontent.com/lunet-io/markdig/master/"))
{
Margin = new BorderDouble(10, 4, 10, 10),
};
@ -295,11 +281,7 @@ namespace MatterHackers.MatterControl
{
if (treeView.SelectedNode.Tag is GuideAsset guide)
{
title.Text = guide.Title;
description.Text = guide.Description;
imageSequenceWidget.ImageSequence = ApplicationController.Instance.GetProcessingSequence(Color.Black);
ApplicationController.Instance.DownloadToImageSequenceAsync(imageSequenceWidget.ImageSequence, guide.AnimationUri);
description.Markdown = guide.Description;
}
};

@ -1 +1 @@
Subproject commit ea94ea134352c58ab662b0f9162f107ef297abd5
Subproject commit b22228763c87cb90dab2055a1f0a42b9f1597fc5

View file

@ -7,7 +7,7 @@ using Markdig.Syntax;
namespace Markdig.Renderers.Agg
{
/// <summary>
/// A base class for WPF rendering <see cref="Block"/> and <see cref="Markdig.Syntax.Inlines.Inline"/> Markdown objects.
/// A base class for Agg rendering <see cref="Block"/> and <see cref="Markdig.Syntax.Inlines.Inline"/> Markdown objects.
/// </summary>
/// <typeparam name="TObject">The type of the object.</typeparam>
/// <seealso cref="Markdig.Renderers.IMarkdownObjectRenderer" />

View file

@ -11,9 +11,9 @@ namespace Markdig.Renderers.Agg.Inlines
public class AutoLinkInlineX : AutoFit{ }
/// <summary>
/// A WPF renderer for a <see cref="AutolinkInline"/>.
/// A Agg renderer for a <see cref="AutolinkInline"/>.
/// </summary>
/// <seealso cref="Markdig.Renderers.Agg.WpfObjectRenderer{Markdig.Syntax.Inlines.AutolinkInline}" />
/// <seealso cref="Markdig.Renderers.Agg.AggObjectRenderer{Markdig.Syntax.Inlines.AutolinkInline}" />
public class AggAutolinkInlineRenderer : AggObjectRenderer<AutolinkInline>
{
/// <inheritdoc/>

View file

@ -10,9 +10,9 @@ namespace Markdig.Renderers.Agg.Inlines
public class DelimiterInlineX : AutoFit{ }
/// <summary>
/// A WPF renderer for a <see cref="DelimiterInline"/>.
/// A Agg renderer for a <see cref="DelimiterInline"/>.
/// </summary>
/// <seealso cref="Markdig.Renderers.Agg.WpfObjectRenderer{Markdig.Syntax.Inlines.DelimiterInline}" />
/// <seealso cref="Markdig.Renderers.Agg.AggObjectRenderer{Markdig.Syntax.Inlines.DelimiterInline}" />
public class AggDelimiterInlineRenderer : AggObjectRenderer<DelimiterInline>
{
/// <inheritdoc/>

View file

@ -28,7 +28,7 @@ namespace Markdig.Renderers.Agg.Inlines
}
/// <summary>
/// A WPF renderer for an <see cref="EmphasisInline"/>.
/// A Agg renderer for an <see cref="EmphasisInline"/>.
/// </summary>
/// <seealso cref="EmphasisInline" />
public class AggEmphasisInlineRenderer : AggObjectRenderer<EmphasisInline>

View file

@ -11,9 +11,9 @@ namespace Markdig.Renderers.Agg.Inlines
public class LineBreakSoftX : AutoFit{ }
/// <summary>
/// A WPF renderer for a <see cref="LineBreakInline"/>.
/// A Agg renderer for a <see cref="LineBreakInline"/>.
/// </summary>
/// <seealso cref="Markdig.Renderers.Agg.WpfObjectRenderer{Markdig.Syntax.Inlines.LineBreakInline}" />
/// <seealso cref="Markdig.Renderers.Agg.AggObjectRenderer{Markdig.Syntax.Inlines.LineBreakInline}" />
public class AggLineBreakInlineRenderer : AggObjectRenderer<LineBreakInline>
{
/// <inheritdoc/>

View file

@ -128,9 +128,9 @@ namespace Markdig.Renderers.Agg.Inlines
}
/// <summary>
/// A WPF renderer for a <see cref="LinkInline"/>.
/// A Agg renderer for a <see cref="LinkInline"/>.
/// </summary>
/// <seealso cref="Markdig.Renderers.Agg.WpfObjectRenderer{Markdig.Syntax.Inlines.LinkInline}" />
/// <seealso cref="Markdig.Renderers.Agg.AggObjectRenderer{Markdig.Syntax.Inlines.LinkInline}" />
public class AggLinkInlineRenderer : AggObjectRenderer<LinkInline>
{
/// <inheritdoc/>

View file

@ -11,9 +11,9 @@ namespace Markdig.Renderers.Agg.Inlines
public class LiteralInlineX : AutoFit{ }
/// <summary>
/// A WPF renderer for a <see cref="LiteralInline"/>.
/// A Agg renderer for a <see cref="LiteralInline"/>.
/// </summary>
/// <seealso cref="Markdig.Renderers.Agg.WpfObjectRenderer{Markdig.Syntax.Inlines.LiteralInline}" />
/// <seealso cref="Markdig.Renderers.Agg.AggObjectRenderer{Markdig.Syntax.Inlines.LiteralInline}" />
public class AggLiteralInlineRenderer : AggObjectRenderer<LiteralInline>
{
/// <inheritdoc/>

View file

@ -5,7 +5,7 @@
using System;
// ReSharper disable once CheckNamespace
namespace Markdig.Wpf
namespace Markdig.Agg
{
/// <summary>
/// Provides extension methods for <see cref="MarkdownPipeline"/> to enable several Markdown extensions.
@ -13,7 +13,7 @@ namespace Markdig.Wpf
public static class MarkdownExtensions
{
/// <summary>
/// Uses all extensions supported by <c>Markdig.Wpf</c>.
/// Uses all extensions supported by <c>Markdig.Agg</c>.
/// </summary>
/// <param name="pipeline">The pipeline.</param>
/// <returns>The modified pipeline</returns>

View file

@ -9,99 +9,15 @@ using Markdig.Renderers;
using MatterHackers.Agg.UI;
using MatterHackers.MatterControl;
namespace Markdig.Wpf
namespace Markdig.Agg
{
public class MarkdownPage : DialogPage
{
private static readonly MarkdownPipeline DefaultPipeline = new MarkdownPipelineBuilder().UseSupportedExtensions().Build();
public MarkdownPipeline MarkdownPipeline { get; set; } = new MarkdownPipelineBuilder().UseSupportedExtensions().Build();
private string _markDownText = null;
private MarkdownPipeline _pipeLine = null;
private Uri uri;
private FlowLayoutWidget contentPanel;
public MarkdownPage()
{
this.WindowTitle = this.HeaderText = "Markdown Tests";
uri = new Uri("https://raw.githubusercontent.com/lunet-io/markdig/master/readme.md");
var webClient = new WebClient();
var scrollableWidget = new ScrollableWidget(true)
{
HAnchor = HAnchor.Stretch,
VAnchor = VAnchor.Stretch
};
scrollableWidget.ScrollArea.HAnchor = HAnchor.Stretch;
scrollableWidget.ScrollArea.VAnchor = VAnchor.Fit;
contentRow.AddChild(scrollableWidget);
contentPanel = new FlowLayoutWidget(FlowDirection.TopToBottom)
{
HAnchor = HAnchor.Stretch,
VAnchor = VAnchor.Fit
};
scrollableWidget.AddChild(contentPanel);
this.Markdown = webClient.DownloadString(uri);
}
/// <summary>
/// Gets or sets the markdown to display.
/// </summary>
public string Markdown
{
get => _markDownText;
set
{
if (_markDownText != value)
{
_markDownText = value;
this.RefreshDocument();
}
}
}
/// <summary>
/// Gets or sets the markdown pipeline to use.
/// </summary>
public MarkdownPipeline Pipeline
{
get => _pipeLine ?? DefaultPipeline;
set
{
if (_pipeLine != value)
{
_pipeLine = value;
}
}
}
private void RefreshDocument()
{
if (!string.IsNullOrEmpty(this.Markdown))
{
var pipeline = Pipeline ?? DefaultPipeline;
contentPanel.CloseAllChildren();
pipeline = pipeline ?? new MarkdownPipelineBuilder().Build();
var renderer = new AggRenderer(contentPanel)
{
BaseUri = uri
};
pipeline.Setup(renderer);
var document = Markdig.Markdown.Parse(this.Markdown, pipeline);
renderer.Render(document);
}
contentRow.AddChild(new MarkdownWidget(new Uri("https://raw.githubusercontent.com/lunet-io/markdig/master/"),
new Uri("https://raw.githubusercontent.com/lunet-io/markdig/master/readme.md")));
}
}
}

View file

@ -0,0 +1,115 @@
// Copyright (c) 2016-2017 Nicolas Musset. All rights reserved.
// This file is licensed under the MIT license.
// See the LICENSE.md file in the project root for more information.
using System;
using System.IO;
using System.Net;
using Markdig.Renderers;
using MatterHackers.Agg.UI;
using MatterHackers.MatterControl;
using MatterHackers.VectorMath;
namespace Markdig.Agg
{
public class MarkdownWidget : ScrollableWidget
{
private static readonly MarkdownPipeline DefaultPipeline = new MarkdownPipelineBuilder().UseSupportedExtensions().Build();
private string _markDownText = null;
private MarkdownPipeline _pipeLine = null;
private Uri baseUri;
private FlowLayoutWidget contentPanel;
public MarkdownWidget(Uri baseUri, bool scrollContent = true)
: base(scrollContent)
{
this.baseUri = baseUri;
this.HAnchor = HAnchor.Stretch;
this.ScrollArea.HAnchor = HAnchor.Stretch;
if (scrollContent)
{
this.VAnchor = VAnchor.Stretch;
this.ScrollArea.VAnchor = VAnchor.Fit;
}
else
{
this.VAnchor = VAnchor.Fit;
this.ScrollArea.VAnchor = VAnchor.Fit;
}
contentPanel = new FlowLayoutWidget(FlowDirection.TopToBottom)
{
HAnchor = HAnchor.Stretch,
VAnchor = VAnchor.Fit
};
this.AddChild(contentPanel);
}
public MarkdownWidget(Uri baseUri, Uri contentUri, bool scrollContent = true)
: this(baseUri, scrollContent)
{
var webClient = new WebClient();
this.Markdown = webClient.DownloadString(contentUri);
}
/// <summary>
/// Gets or sets the markdown to display.
/// </summary>
public string Markdown
{
get => _markDownText;
set
{
if (_markDownText != value)
{
_markDownText = value;
this.RefreshDocument();
this.Width = 10;
this.ScrollPositionFromTop = Vector2.Zero;
}
}
}
/// <summary>
/// Gets or sets the markdown pipeline to use.
/// </summary>
public MarkdownPipeline Pipeline
{
get => _pipeLine ?? DefaultPipeline;
set
{
if (_pipeLine != value)
{
_pipeLine = value;
}
}
}
private void RefreshDocument()
{
if (!string.IsNullOrEmpty(this.Markdown))
{
var pipeline = Pipeline;
contentPanel.CloseAllChildren();
// why do we check the pipeline here?
pipeline = pipeline ?? new MarkdownPipelineBuilder().Build();
var renderer = new AggRenderer(contentPanel)
{
BaseUri = baseUri
};
pipeline.Setup(renderer);
var document = Markdig.Markdown.Parse(this.Markdown, pipeline);
renderer.Render(document);
}
}
}
}