From eacb714986428eddf6ceee65c0c39a191e02f016 Mon Sep 17 00:00:00 2001 From: wdcossey Date: Tue, 20 Dec 2016 23:17:09 +0200 Subject: [PATCH 1/7] Added Strikethrough Tag. Added Quote Tag (ability to specify quote background). Added Escape ability (i.e. [*bleh] would be ignored). --- .../Content/ControlsModernBBCodeBlock.xaml | 2 +- .../Content/ControlsModernBBCodeBlock.xaml.cs | 56 +++++++++---------- .../Windows/Controls/BBCode/BBCodeLexer.cs | 14 +++++ .../Windows/Controls/BBCode/BBCodeParser.cs | 32 ++++++++++- .../Shared/Windows/Controls/BBCodeBlock.cs | 22 +++++++- 5 files changed, 94 insertions(+), 32 deletions(-) diff --git a/1.0/FirstFloor.ModernUI/FirstFloor.ModernUI.App/Content/ControlsModernBBCodeBlock.xaml b/1.0/FirstFloor.ModernUI/FirstFloor.ModernUI.App/Content/ControlsModernBBCodeBlock.xaml index 13e0d2a9..bce7f1d2 100644 --- a/1.0/FirstFloor.ModernUI/FirstFloor.ModernUI.App/Content/ControlsModernBBCodeBlock.xaml +++ b/1.0/FirstFloor.ModernUI/FirstFloor.ModernUI.App/Content/ControlsModernBBCodeBlock.xaml @@ -10,7 +10,7 @@ - + diff --git a/1.0/FirstFloor.ModernUI/FirstFloor.ModernUI.App/Content/ControlsModernBBCodeBlock.xaml.cs b/1.0/FirstFloor.ModernUI/FirstFloor.ModernUI.App/Content/ControlsModernBBCodeBlock.xaml.cs index e25f6e5b..c6399d5b 100644 --- a/1.0/FirstFloor.ModernUI/FirstFloor.ModernUI.App/Content/ControlsModernBBCodeBlock.xaml.cs +++ b/1.0/FirstFloor.ModernUI/FirstFloor.ModernUI.App/Content/ControlsModernBBCodeBlock.xaml.cs @@ -1,28 +1,28 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; -using System.Windows; -using System.Windows.Controls; -using System.Windows.Data; -using System.Windows.Documents; -using System.Windows.Input; -using System.Windows.Media; -using System.Windows.Media.Imaging; -using System.Windows.Navigation; -using System.Windows.Shapes; - -namespace FirstFloor.ModernUI.App.Content -{ - /// - /// Interaction logic for ControlsModernBBCodeBlock.xaml - /// - public partial class ControlsModernBBCodeBlock : UserControl - { - public ControlsModernBBCodeBlock() - { - InitializeComponent(); - } - } -} +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows; +using System.Windows.Controls; +using System.Windows.Data; +using System.Windows.Documents; +using System.Windows.Input; +using System.Windows.Media; +using System.Windows.Media.Imaging; +using System.Windows.Navigation; +using System.Windows.Shapes; + +namespace FirstFloor.ModernUI.App.Content +{ + /// + /// Interaction logic for ControlsModernBBCodeBlock.xaml + /// + public partial class ControlsModernBBCodeBlock : UserControl + { + public ControlsModernBBCodeBlock() + { + InitializeComponent(); + } + } +} diff --git a/1.0/FirstFloor.ModernUI/Shared/Windows/Controls/BBCode/BBCodeLexer.cs b/1.0/FirstFloor.ModernUI/Shared/Windows/Controls/BBCode/BBCodeLexer.cs index c228db68..aee4d784 100644 --- a/1.0/FirstFloor.ModernUI/Shared/Windows/Controls/BBCode/BBCodeLexer.cs +++ b/1.0/FirstFloor.ModernUI/Shared/Windows/Controls/BBCode/BBCodeLexer.cs @@ -99,6 +99,17 @@ private Token Text() return new Token(GetMark(), TokenText); } + private Token EscapedTag() + { + Mark(); + Consume(); + while (LA(1) != '[' && LA(1) != char.MaxValue && !IsInRange(NewlineChars)) { + Consume(); + } + var result = GetMark(); + return new Token(result.Substring(0, 1) + result.Substring(2), TokenText); + } + private Token Attribute() { Match('='); @@ -153,6 +164,9 @@ public override Token NextToken() if (State == StateNormal) { if (LA(1) == '[') { + if (LA(2) == '*') { + return EscapedTag(); + } if (LA(2) == '/') { return CloseTag(); } diff --git a/1.0/FirstFloor.ModernUI/Shared/Windows/Controls/BBCode/BBCodeParser.cs b/1.0/FirstFloor.ModernUI/Shared/Windows/Controls/BBCode/BBCodeParser.cs index 008bd085..b63449d8 100644 --- a/1.0/FirstFloor.ModernUI/Shared/Windows/Controls/BBCode/BBCodeParser.cs +++ b/1.0/FirstFloor.ModernUI/Shared/Windows/Controls/BBCode/BBCodeParser.cs @@ -24,6 +24,8 @@ internal class BBCodeParser private const string TagSize = "size"; private const string TagUnderline = "u"; private const string TagUrl = "url"; + private const string TagStrikethrough = "s"; + private const string TagQuote = "quote"; class ParseContext { @@ -36,6 +38,7 @@ public ParseContext(Span parent) public FontWeight? FontWeight { get; set; } public FontStyle? FontStyle { get; set; } public Brush Foreground { get; set; } + public Brush Background { get; set; } public TextDecorationCollection TextDecorations { get; set; } public string NavigateUri { get; set; } @@ -58,6 +61,10 @@ public Run CreateRun(string text) if (this.Foreground != null) { run.Foreground = this.Foreground; } + if (this.Background != null) + { + run.Background = this.Background; + } run.TextDecorations = this.TextDecorations; return run; @@ -65,19 +72,22 @@ public Run CreateRun(string text) } private FrameworkElement source; + private Brush quoteBrush; /// /// Initializes a new instance of the class. /// /// The value. /// The framework source element this parser operates in. - public BBCodeParser(string value, FrameworkElement source) + /// The Brush used for quoting + public BBCodeParser(string value, FrameworkElement source, Brush quoteBrush = null) : base(new BBCodeLexer(value)) { if (source == null) { throw new ArgumentNullException("source"); } this.source = source; + this.quoteBrush = quoteBrush; } /// @@ -131,6 +141,10 @@ private void ParseTag(string tag, bool start, ParseContext context) else if (tag == TagUnderline) { context.TextDecorations = start ? TextDecorations.Underline : null; } + else if (tag == TagStrikethrough) + { + context.TextDecorations = start ? TextDecorations.Strikethrough : null; + } else if (tag == TagUrl) { if (start) { Token token = LA(1); @@ -143,12 +157,23 @@ private void ParseTag(string tag, bool start, ParseContext context) context.NavigateUri = null; } } + else if (tag == TagQuote) + { + if (start) + { + context.Background = quoteBrush; + } + else + { + context.Background = null; + } + } } private void Parse(Span span) { var context = new ParseContext(span); - + while (true) { Token token = LA(1); Consume(); @@ -183,6 +208,9 @@ private void Parse(Span span) link.TargetName = parameter; } parent = link; + if (context.Foreground != null) { + link.Foreground = context.Foreground; + } span.Inlines.Add(parent); } var run = context.CreateRun(token.Value); diff --git a/1.0/FirstFloor.ModernUI/Shared/Windows/Controls/BBCodeBlock.cs b/1.0/FirstFloor.ModernUI/Shared/Windows/Controls/BBCodeBlock.cs index fb16f446..96447249 100644 --- a/1.0/FirstFloor.ModernUI/Shared/Windows/Controls/BBCodeBlock.cs +++ b/1.0/FirstFloor.ModernUI/Shared/Windows/Controls/BBCodeBlock.cs @@ -32,6 +32,10 @@ public class BBCodeBlock /// Identifies the LinkNavigator dependency property. /// public static DependencyProperty LinkNavigatorProperty = DependencyProperty.Register("LinkNavigator", typeof(ILinkNavigator), typeof(BBCodeBlock), new PropertyMetadata(new DefaultLinkNavigator(), OnLinkNavigatorChanged)); + /// + /// Identifies the BBCodeQuote dependency property. + /// + public static DependencyProperty BBCodeQuoteBackgroundProperty = DependencyProperty.Register("BBCodeQuoteBackground", typeof(Brush), typeof(BBCodeBlock), new PropertyMetadata(new PropertyChangedCallback(OnBBCodeQuoteBackgroundChanged))); private bool dirty = false; @@ -52,6 +56,11 @@ private static void OnBBCodeChanged(DependencyObject o, DependencyPropertyChange ((BBCodeBlock)o).UpdateDirty(); } + private static void OnBBCodeQuoteBackgroundChanged(DependencyObject o, DependencyPropertyChangedEventArgs e) + { + ((BBCodeBlock)o).UpdateDirty(); + } + private static void OnLinkNavigatorChanged(DependencyObject o, DependencyPropertyChangedEventArgs e) { if (e.NewValue == null) { @@ -86,7 +95,7 @@ private void Update() if (!string.IsNullOrWhiteSpace(bbcode)) { Inline inline; try { - var parser = new BBCodeParser(bbcode, this) { + var parser = new BBCodeParser(bbcode, this, BBCodeQuoteBackground) { Commands = this.LinkNavigator.Commands }; inline = parser.Parse(); @@ -131,5 +140,16 @@ public ILinkNavigator LinkNavigator get { return (ILinkNavigator)GetValue(LinkNavigatorProperty); } set { SetValue(LinkNavigatorProperty, value); } } + + /// + /// Gets or sets the BB quote background. + /// + /// The BB code. + public Brush BBCodeQuoteBackground + { + get { return (Brush)GetValue(BBCodeQuoteBackgroundProperty); } + set { SetValue(BBCodeQuoteBackgroundProperty, value); } + } + } } From b97e6127cbf5ae0f06843907914e7dcacd8ab9e6 Mon Sep 17 00:00:00 2001 From: wdcossey Date: Wed, 21 Dec 2016 00:30:15 +0200 Subject: [PATCH 2/7] Changed escape char from * to \ (i.e [\ignore me]). Added Ordered list (i.e [ol] [/ol]). Added Unordered list (i.e [list] [/list]). --- .../Content/ControlsModernBBCodeBlock.xaml | 2 +- .../Windows/Controls/BBCode/BBCodeLexer.cs | 2 +- .../Windows/Controls/BBCode/BBCodeParser.cs | 55 ++++++++++++++++--- 3 files changed, 49 insertions(+), 10 deletions(-) diff --git a/1.0/FirstFloor.ModernUI/FirstFloor.ModernUI.App/Content/ControlsModernBBCodeBlock.xaml b/1.0/FirstFloor.ModernUI/FirstFloor.ModernUI.App/Content/ControlsModernBBCodeBlock.xaml index bce7f1d2..e0cc4536 100644 --- a/1.0/FirstFloor.ModernUI/FirstFloor.ModernUI.App/Content/ControlsModernBBCodeBlock.xaml +++ b/1.0/FirstFloor.ModernUI/FirstFloor.ModernUI.App/Content/ControlsModernBBCodeBlock.xaml @@ -10,7 +10,7 @@ - + diff --git a/1.0/FirstFloor.ModernUI/Shared/Windows/Controls/BBCode/BBCodeLexer.cs b/1.0/FirstFloor.ModernUI/Shared/Windows/Controls/BBCode/BBCodeLexer.cs index aee4d784..560f5846 100644 --- a/1.0/FirstFloor.ModernUI/Shared/Windows/Controls/BBCode/BBCodeLexer.cs +++ b/1.0/FirstFloor.ModernUI/Shared/Windows/Controls/BBCode/BBCodeLexer.cs @@ -164,7 +164,7 @@ public override Token NextToken() if (State == StateNormal) { if (LA(1) == '[') { - if (LA(2) == '*') { + if (LA(2) == '\\') { return EscapedTag(); } if (LA(2) == '/') { diff --git a/1.0/FirstFloor.ModernUI/Shared/Windows/Controls/BBCode/BBCodeParser.cs b/1.0/FirstFloor.ModernUI/Shared/Windows/Controls/BBCode/BBCodeParser.cs index b63449d8..5ddfae49 100644 --- a/1.0/FirstFloor.ModernUI/Shared/Windows/Controls/BBCode/BBCodeParser.cs +++ b/1.0/FirstFloor.ModernUI/Shared/Windows/Controls/BBCode/BBCodeParser.cs @@ -26,6 +26,9 @@ internal class BBCodeParser private const string TagUrl = "url"; private const string TagStrikethrough = "s"; private const string TagQuote = "quote"; + private const string TagList = "list"; + private const string TagOrderedList = "ol"; + private const string TagListItem = "*"; class ParseContext { @@ -41,6 +44,11 @@ public ParseContext(Span parent) public Brush Background { get; set; } public TextDecorationCollection TextDecorations { get; set; } public string NavigateUri { get; set; } + public bool IsList { get; set; } + public bool IsOrderedList { get; set; } + public int ListCounter { get; set; } + public bool IsListItem { get; set; } + public bool IsFirstListItem { get; set; } /// /// Creates a run reflecting the current context settings. @@ -157,17 +165,26 @@ private void ParseTag(string tag, bool start, ParseContext context) context.NavigateUri = null; } } - else if (tag == TagQuote) - { - if (start) - { + else if (tag == TagQuote) { + if (start) { context.Background = quoteBrush; } - else - { + else { context.Background = null; } } + else if (tag == TagList) { + context.IsList = start; + context.IsFirstListItem = true; + } + else if (tag == TagOrderedList) { + context.IsOrderedList = start; + context.ListCounter = 0; + context.IsFirstListItem = true; + } + else if (tag == TagListItem) { + context.IsListItem = context.IsList || context.IsOrderedList; + } } private void Parse(Span span) @@ -213,8 +230,30 @@ private void Parse(Span span) } span.Inlines.Add(parent); } - var run = context.CreateRun(token.Value); - parent.Inlines.Add(run); + + if ((context.IsList || context.IsOrderedList) && context.IsListItem) { + if (context.IsFirstListItem) { + context.IsFirstListItem = false; + parent.Inlines.Add(new LineBreak()); + } + + if (context.IsOrderedList) { + parent.Inlines.Add(context.CreateRun(string.Format("\u0020\u0020{1}.\u0020\u0020{0}", token.Value, ++context.ListCounter))); + } + else { + parent.Inlines.Add(context.CreateRun(string.Format("\u0020\u0020\u2022\u0020\u0020{0}", token.Value))); + } + + + if (context.IsListItem) { + parent.Inlines.Add(new LineBreak()); + } + } + else { + var run = context.CreateRun(token.Value); + parent.Inlines.Add(run); + } + } else if (token.TokenType == BBCodeLexer.TokenLineBreak) { span.Inlines.Add(new LineBreak()); From ddf5a51e57b88d22e40a99957428972bf96c00d1 Mon Sep 17 00:00:00 2001 From: wdcossey Date: Wed, 21 Dec 2016 10:15:42 +0200 Subject: [PATCH 3/7] Added BBCodeTitle to ModernWindow --- .../FirstFloor.ModernUI.App/MainWindow.xaml | 4 +- .../Themes/ModernWindow.xaml | 37 +++++++++++++++++-- .../Shared/Windows/Controls/ModernWindow.cs | 15 ++++++++ 3 files changed, 52 insertions(+), 4 deletions(-) diff --git a/1.0/FirstFloor.ModernUI/FirstFloor.ModernUI.App/MainWindow.xaml b/1.0/FirstFloor.ModernUI/FirstFloor.ModernUI.App/MainWindow.xaml index 48fd7f22..82ae683b 100644 --- a/1.0/FirstFloor.ModernUI/FirstFloor.ModernUI.App/MainWindow.xaml +++ b/1.0/FirstFloor.ModernUI/FirstFloor.ModernUI.App/MainWindow.xaml @@ -3,7 +3,9 @@ xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:mui="http://firstfloorsoftware.com/ModernUI" xmlns:app="clr-namespace:FirstFloor.ModernUI.App" - Title="Modern UI for WPF Demo" IsTitleVisible="True" + Title="Modern UI for WPF Demo" + BBCodeTitle="[b]Modern UI[/b] for [b]WPF[/b] [i]Demo[/i]" + IsTitleVisible="True" LogoData="F1 M 24.9015,43.0378L 25.0963,43.4298C 26.1685,49.5853 31.5377,54.2651 38,54.2651C 44.4623,54.2651 49.8315,49.5854 50.9037,43.4299L 51.0985,43.0379C 51.0985,40.7643 52.6921,39.2955 54.9656,39.2955C 56.9428,39.2955 58.1863,41.1792 58.5833,43.0379C 57.6384,52.7654 47.9756,61.75 38,61.75C 28.0244,61.75 18.3616,52.7654 17.4167,43.0378C 17.8137,41.1792 19.0572,39.2954 21.0344,39.2954C 23.3079,39.2954 24.9015,40.7643 24.9015,43.0378 Z M 26.7727,20.5833C 29.8731,20.5833 32.3864,23.0966 32.3864,26.197C 32.3864,29.2973 29.8731,31.8106 26.7727,31.8106C 23.6724,31.8106 21.1591,29.2973 21.1591,26.197C 21.1591,23.0966 23.6724,20.5833 26.7727,20.5833 Z M 49.2273,20.5833C 52.3276,20.5833 54.8409,23.0966 54.8409,26.197C 54.8409,29.2973 52.3276,31.8106 49.2273,31.8106C 46.127,31.8106 43.6136,29.2973 43.6136,26.197C 43.6136,23.0966 46.127,20.5833 49.2273,20.5833 Z" ContentSource="/Pages/Introduction.xaml" Width="800" Height="700"> diff --git a/1.0/FirstFloor.ModernUI/FirstFloor.ModernUI/Themes/ModernWindow.xaml b/1.0/FirstFloor.ModernUI/FirstFloor.ModernUI/Themes/ModernWindow.xaml index 9db7dbf2..87b42466 100644 --- a/1.0/FirstFloor.ModernUI/FirstFloor.ModernUI/Themes/ModernWindow.xaml +++ b/1.0/FirstFloor.ModernUI/FirstFloor.ModernUI/Themes/ModernWindow.xaml @@ -59,9 +59,40 @@ - + + + + + + + + + + + diff --git a/1.0/FirstFloor.ModernUI/Shared/Windows/Controls/ModernWindow.cs b/1.0/FirstFloor.ModernUI/Shared/Windows/Controls/ModernWindow.cs index cac6cddb..d0011a16 100644 --- a/1.0/FirstFloor.ModernUI/Shared/Windows/Controls/ModernWindow.cs +++ b/1.0/FirstFloor.ModernUI/Shared/Windows/Controls/ModernWindow.cs @@ -53,6 +53,11 @@ public class ModernWindow /// public static DependencyProperty LinkNavigatorProperty = DependencyProperty.Register("LinkNavigator", typeof(ILinkNavigator), typeof(ModernWindow), new PropertyMetadata(new DefaultLinkNavigator())); + /// + /// Identifies the BBCodeTitle dependency property. + /// + public static DependencyProperty BBCodeTitleProperty = DependencyProperty.Register("BBCodeTitle", typeof(string), typeof(ModernWindow), new PropertyMetadata(null)); + private Storyboard backgroundAnimation; /// @@ -275,5 +280,15 @@ public ILinkNavigator LinkNavigator get { return (ILinkNavigator)GetValue(LinkNavigatorProperty); } set { SetValue(LinkNavigatorProperty, value); } } + + /// + /// Gets or sets the BBCode Title. + /// + /// The link navigator. + public string BBCodeTitle + { + get { return (string)GetValue(BBCodeTitleProperty); } + set { SetValue(BBCodeTitleProperty, value); } + } } } From 59aebd3b9a6215a7ce3f4ebf38f0481ea3e62c09 Mon Sep 17 00:00:00 2001 From: wdcossey Date: Wed, 21 Dec 2016 11:42:07 +0200 Subject: [PATCH 4/7] Simplified BBCodeTitle implementation. --- .../Themes/ModernWindow.xaml | 25 +++---------------- 1 file changed, 4 insertions(+), 21 deletions(-) diff --git a/1.0/FirstFloor.ModernUI/FirstFloor.ModernUI/Themes/ModernWindow.xaml b/1.0/FirstFloor.ModernUI/FirstFloor.ModernUI/Themes/ModernWindow.xaml index 87b42466..4ffa350f 100644 --- a/1.0/FirstFloor.ModernUI/FirstFloor.ModernUI/Themes/ModernWindow.xaml +++ b/1.0/FirstFloor.ModernUI/FirstFloor.ModernUI/Themes/ModernWindow.xaml @@ -59,15 +59,17 @@ - + - - - From 21cb23ebc73caad45fa78057327c7360ecb922a9 Mon Sep 17 00:00:00 2001 From: wdcossey Date: Wed, 21 Dec 2016 22:57:56 +0200 Subject: [PATCH 5/7] Improved List tags for BBCode, you can now add formatted code to the list item. (BBCode Lexer is a strange one!) [ol][li]Item[/li][/ol] --- .../Content/ControlsModernBBCodeBlock.xaml | 2 +- .../Windows/Controls/BBCode/BBCodeParser.cs | 46 +++++++++++-------- 2 files changed, 29 insertions(+), 19 deletions(-) diff --git a/1.0/FirstFloor.ModernUI/FirstFloor.ModernUI.App/Content/ControlsModernBBCodeBlock.xaml b/1.0/FirstFloor.ModernUI/FirstFloor.ModernUI.App/Content/ControlsModernBBCodeBlock.xaml index e0cc4536..a5eb7d23 100644 --- a/1.0/FirstFloor.ModernUI/FirstFloor.ModernUI.App/Content/ControlsModernBBCodeBlock.xaml +++ b/1.0/FirstFloor.ModernUI/FirstFloor.ModernUI.App/Content/ControlsModernBBCodeBlock.xaml @@ -10,7 +10,7 @@ - + diff --git a/1.0/FirstFloor.ModernUI/Shared/Windows/Controls/BBCode/BBCodeParser.cs b/1.0/FirstFloor.ModernUI/Shared/Windows/Controls/BBCode/BBCodeParser.cs index 5ddfae49..b8084acb 100644 --- a/1.0/FirstFloor.ModernUI/Shared/Windows/Controls/BBCode/BBCodeParser.cs +++ b/1.0/FirstFloor.ModernUI/Shared/Windows/Controls/BBCode/BBCodeParser.cs @@ -28,7 +28,7 @@ internal class BBCodeParser private const string TagQuote = "quote"; private const string TagList = "list"; private const string TagOrderedList = "ol"; - private const string TagListItem = "*"; + private const string TagListItem = "li"; class ParseContext { @@ -183,7 +183,7 @@ private void ParseTag(string tag, bool start, ParseContext context) context.IsFirstListItem = true; } else if (tag == TagListItem) { - context.IsListItem = context.IsList || context.IsOrderedList; + context.IsListItem = start; } } @@ -196,9 +196,28 @@ private void Parse(Span span) Consume(); if (token.TokenType == BBCodeLexer.TokenStartTag) { + var parent = span; + if (token.Value == TagListItem) + { + if (context.IsFirstListItem) + { + context.IsFirstListItem = false; + parent.Inlines.Add(new LineBreak()); + } + + parent.Inlines.Add( + new Run(string.Format("\u0020\u0020{0}\u0020\u0020", + context.IsOrderedList ? string.Format("{0}.", ++context.ListCounter) : "\u2022"))); + } + ParseTag(token.Value, true, context); } else if (token.TokenType == BBCodeLexer.TokenEndTag) { + var parent = span; + if (context.IsListItem && token.Value == TagListItem) + { + parent.Inlines.Add(new LineBreak()); + } ParseTag(token.Value, false, context); } else if (token.TokenType == BBCodeLexer.TokenText) { @@ -231,24 +250,15 @@ private void Parse(Span span) span.Inlines.Add(parent); } - if ((context.IsList || context.IsOrderedList) && context.IsListItem) { - if (context.IsFirstListItem) { - context.IsFirstListItem = false; - parent.Inlines.Add(new LineBreak()); - } - - if (context.IsOrderedList) { - parent.Inlines.Add(context.CreateRun(string.Format("\u0020\u0020{1}.\u0020\u0020{0}", token.Value, ++context.ListCounter))); - } - else { - parent.Inlines.Add(context.CreateRun(string.Format("\u0020\u0020\u2022\u0020\u0020{0}", token.Value))); - } + if (/*(context.IsList || context.IsOrderedList) &&*/ context.IsListItem) { + + parent.Inlines.Add(context.CreateRun(token.Value)); - - if (context.IsListItem) { - parent.Inlines.Add(new LineBreak()); - } } + //else if (context.EndListItem) + //{ + // parent.Inlines.Add(new LineBreak()); + //} else { var run = context.CreateRun(token.Value); parent.Inlines.Add(run); From 7a9dec9b2058a02e3d9dfc198038a37d002872b8 Mon Sep 17 00:00:00 2001 From: wdcossey Date: Wed, 21 Dec 2016 22:59:51 +0200 Subject: [PATCH 6/7] Clenaed up commented code. --- .../Shared/Windows/Controls/BBCode/BBCodeParser.cs | 10 ++-------- 1 file changed, 2 insertions(+), 8 deletions(-) diff --git a/1.0/FirstFloor.ModernUI/Shared/Windows/Controls/BBCode/BBCodeParser.cs b/1.0/FirstFloor.ModernUI/Shared/Windows/Controls/BBCode/BBCodeParser.cs index b8084acb..c2bdc033 100644 --- a/1.0/FirstFloor.ModernUI/Shared/Windows/Controls/BBCode/BBCodeParser.cs +++ b/1.0/FirstFloor.ModernUI/Shared/Windows/Controls/BBCode/BBCodeParser.cs @@ -250,15 +250,9 @@ private void Parse(Span span) span.Inlines.Add(parent); } - if (/*(context.IsList || context.IsOrderedList) &&*/ context.IsListItem) { - - parent.Inlines.Add(context.CreateRun(token.Value)); - + if (context.IsListItem) { + parent.Inlines.Add(context.CreateRun(token.Value)); } - //else if (context.EndListItem) - //{ - // parent.Inlines.Add(new LineBreak()); - //} else { var run = context.CreateRun(token.Value); parent.Inlines.Add(run); From 28910679f8d22a34829beec4502f86b5d0366b0d Mon Sep 17 00:00:00 2001 From: wdcossey Date: Wed, 21 Dec 2016 23:43:40 +0200 Subject: [PATCH 7/7] Added LogoCommand/Parameter Properties. --- .../FirstFloor.ModernUI.App/MainWindow.xaml | 2 ++ .../Themes/ModernWindow.xaml | 28 +++++++++++++++++-- .../Shared/Windows/Controls/ModernWindow.cs | 26 +++++++++++++++++ 3 files changed, 53 insertions(+), 3 deletions(-) diff --git a/1.0/FirstFloor.ModernUI/FirstFloor.ModernUI.App/MainWindow.xaml b/1.0/FirstFloor.ModernUI/FirstFloor.ModernUI.App/MainWindow.xaml index 82ae683b..26d8c68e 100644 --- a/1.0/FirstFloor.ModernUI/FirstFloor.ModernUI.App/MainWindow.xaml +++ b/1.0/FirstFloor.ModernUI/FirstFloor.ModernUI.App/MainWindow.xaml @@ -7,6 +7,8 @@ BBCodeTitle="[b]Modern UI[/b] for [b]WPF[/b] [i]Demo[/i]" IsTitleVisible="True" LogoData="F1 M 24.9015,43.0378L 25.0963,43.4298C 26.1685,49.5853 31.5377,54.2651 38,54.2651C 44.4623,54.2651 49.8315,49.5854 50.9037,43.4299L 51.0985,43.0379C 51.0985,40.7643 52.6921,39.2955 54.9656,39.2955C 56.9428,39.2955 58.1863,41.1792 58.5833,43.0379C 57.6384,52.7654 47.9756,61.75 38,61.75C 28.0244,61.75 18.3616,52.7654 17.4167,43.0378C 17.8137,41.1792 19.0572,39.2954 21.0344,39.2954C 23.3079,39.2954 24.9015,40.7643 24.9015,43.0378 Z M 26.7727,20.5833C 29.8731,20.5833 32.3864,23.0966 32.3864,26.197C 32.3864,29.2973 29.8731,31.8106 26.7727,31.8106C 23.6724,31.8106 21.1591,29.2973 21.1591,26.197C 21.1591,23.0966 23.6724,20.5833 26.7727,20.5833 Z M 49.2273,20.5833C 52.3276,20.5833 54.8409,23.0966 54.8409,26.197C 54.8409,29.2973 52.3276,31.8106 49.2273,31.8106C 46.127,31.8106 43.6136,29.2973 43.6136,26.197C 43.6136,23.0966 46.127,20.5833 49.2273,20.5833 Z" + LogoCommand="mui:LinkCommands.NavigateLink" + LogoCommandParameter="https://github.com/firstfloorsoftware/mui" ContentSource="/Pages/Introduction.xaml" Width="800" Height="700"> diff --git a/1.0/FirstFloor.ModernUI/FirstFloor.ModernUI/Themes/ModernWindow.xaml b/1.0/FirstFloor.ModernUI/FirstFloor.ModernUI/Themes/ModernWindow.xaml index 4ffa350f..6dd2b722 100644 --- a/1.0/FirstFloor.ModernUI/FirstFloor.ModernUI/Themes/ModernWindow.xaml +++ b/1.0/FirstFloor.ModernUI/FirstFloor.ModernUI/Themes/ModernWindow.xaml @@ -105,11 +105,33 @@ - - - + + + + + diff --git a/1.0/FirstFloor.ModernUI/Shared/Windows/Controls/ModernWindow.cs b/1.0/FirstFloor.ModernUI/Shared/Windows/Controls/ModernWindow.cs index d0011a16..e3f8403e 100644 --- a/1.0/FirstFloor.ModernUI/Shared/Windows/Controls/ModernWindow.cs +++ b/1.0/FirstFloor.ModernUI/Shared/Windows/Controls/ModernWindow.cs @@ -41,6 +41,14 @@ public class ModernWindow /// public static readonly DependencyProperty LogoDataProperty = DependencyProperty.Register("LogoData", typeof(Geometry), typeof(ModernWindow)); /// + /// Identifies the LogoCommand dependency property. + /// + public static readonly DependencyProperty LogoCommandProperty = DependencyProperty.Register("LogoCommand", typeof(ICommand), typeof(ModernWindow)); + /// + /// Identifies the LogoCommandParameter dependency property. + /// + public static readonly DependencyProperty LogoCommandParameterProperty = DependencyProperty.Register("LogoCommandParameter", typeof(object), typeof(ModernWindow)); + /// /// Defines the ContentSource dependency property. /// public static readonly DependencyProperty ContentSourceProperty = DependencyProperty.Register("ContentSource", typeof(Uri), typeof(ModernWindow)); @@ -253,6 +261,24 @@ public Geometry LogoData set { SetValue(LogoDataProperty, value); } } + /// + /// Gets or sets the command for the logo. + /// + public ICommand LogoCommand + { + get { return (ICommand)GetValue(LogoCommandProperty); } + set { SetValue(LogoCommandProperty, value); } + } + + /// + /// Gets or sets the command parameter for the logo. + /// + public object LogoCommandParameter + { + get { return (object)GetValue(LogoCommandParameterProperty); } + set { SetValue(LogoCommandParameterProperty, value); } + } + /// /// Gets or sets the source uri of the current content. ///