From ba3ed35699953fc95a370bda2db5b24611231b3c Mon Sep 17 00:00:00 2001 From: DB p Date: Sat, 10 Dec 2022 08:04:56 +0900 Subject: [PATCH] - Adjust JsonRPC Panel Design --- Flow.Launcher.Core/Plugin/JsonRPCPlugin.cs | 104 ++++++++++++++++----- 1 file changed, 80 insertions(+), 24 deletions(-) diff --git a/Flow.Launcher.Core/Plugin/JsonRPCPlugin.cs b/Flow.Launcher.Core/Plugin/JsonRPCPlugin.cs index a39ef6790..3b809db2a 100644 --- a/Flow.Launcher.Core/Plugin/JsonRPCPlugin.cs +++ b/Flow.Launcher.Core/Plugin/JsonRPCPlugin.cs @@ -340,10 +340,13 @@ namespace Flow.Launcher.Core.Plugin this.context = context; await InitSettingAsync(); } - private static readonly Thickness settingControlMargin = new(0, 6, 0, 6); - private static readonly Thickness settingPanelMargin = new(70, 18, 18, 18); - private static readonly Thickness settingTextBlockMargin = new(0, 6, 0, 6); - private static readonly Thickness settingLabelMargin = new(0, 0, 18, 0); + private static readonly Thickness settingControlMargin = new(0, 9, 18, 9); + private static readonly Thickness settingCheckboxMargin = new(0, 9, 9, 9); + private static readonly Thickness settingPanelMargin = new(0, 0, 0, 0); + private static readonly Thickness settingTextBlockMargin = new(70, 17, 18, 0); + private static readonly Thickness settingLabelMargin = new(70, 0, 18, 0); + private static readonly Thickness settingDescMargin = new(70, 0, 18, 0); + private static readonly Thickness settingSepMargin = new(0, 0, 0, 2); private JsonRpcConfigurationModel _settingsTemplate; public Control CreateSettingPanel() @@ -355,20 +358,25 @@ namespace Flow.Launcher.Core.Plugin { Margin = settingPanelMargin }; - ColumnDefinition gridCol1 = new ColumnDefinition() { Width = GridLength.Auto }; + ColumnDefinition gridCol1 = new ColumnDefinition(); ColumnDefinition gridCol2 = new ColumnDefinition(); - gridCol2.Width = new GridLength(75, GridUnitType.Star); + + gridCol1.Width = new GridLength(70, GridUnitType.Star); + gridCol2.Width = new GridLength(30, GridUnitType.Star); mainPanel.ColumnDefinitions.Add(gridCol1); mainPanel.ColumnDefinitions.Add(gridCol2); - settingWindow.Content = mainPanel; int rowCount = 0; foreach (var (type, attribute) in _settingsTemplate.Body) { - //var panel = new StackPanel - //{ - //Orientation = Orientation.Horizontal, Margin = settingControlMargin - //}; + Separator sep = new Separator(); + sep.VerticalAlignment = VerticalAlignment.Top; + sep.Margin = settingSepMargin; + sep.SetResourceReference(Separator.BackgroundProperty, "Color03B"); /* for theme change */ + var panel = new StackPanel + { + Orientation = Orientation.Vertical, VerticalAlignment = VerticalAlignment.Center + }; RowDefinition gridRow = new RowDefinition(); mainPanel.RowDefinitions.Add(gridRow); var name = new TextBlock() @@ -378,8 +386,27 @@ namespace Flow.Launcher.Core.Plugin Margin = settingLabelMargin, TextWrapping = TextWrapping.WrapWithOverflow }; - Grid.SetColumn(name, 0); - Grid.SetRow(name, rowCount); + var desc = new TextBlock() + { + Text = attribute.Description, FontSize = 12, + VerticalAlignment = VerticalAlignment.Center,Margin = settingDescMargin, + TextWrapping = TextWrapping.WrapWithOverflow + }; + desc.SetResourceReference(TextBlock.ForegroundProperty, "Color04B"); + + if (attribute.Description == null) /* if no description, hide */ + desc.Visibility = Visibility.Collapsed; + + + if (type != "textBlock") /* if textBlock, hide desc */ + { + panel.Children.Add(name); + panel.Children.Add(desc); + } + + + Grid.SetColumn(panel, 0); + Grid.SetRow(panel, rowCount); FrameworkElement contentControl; @@ -391,7 +418,7 @@ namespace Flow.Launcher.Core.Plugin { Text = attribute.Description.Replace("\\r\\n", "\r\n"), Margin = settingTextBlockMargin, - VerticalAlignment = VerticalAlignment.Center, + VerticalAlignment = VerticalAlignment.Stretch, HorizontalAlignment = HorizontalAlignment.Left, TextAlignment = TextAlignment.Left, TextWrapping = TextWrapping.WrapWithOverflow @@ -399,16 +426,20 @@ namespace Flow.Launcher.Core.Plugin Grid.SetColumn(contentControl, 0); Grid.SetColumnSpan(contentControl, 2); Grid.SetRow(contentControl, rowCount); + if (rowCount != 0) + mainPanel.Children.Add(sep); + Grid.SetRow(sep, rowCount); + Grid.SetColumn(sep, 0); + Grid.SetColumnSpan(sep, 2); break; } case "input": { var textBox = new TextBox() { - Width = 300, Text = Settings[attribute.Name] as string ?? string.Empty, Margin = settingControlMargin, - HorizontalAlignment = HorizontalAlignment.Left, + HorizontalAlignment = HorizontalAlignment.Stretch, ToolTip = attribute.Description }; textBox.TextChanged += (_, _) => @@ -418,18 +449,23 @@ namespace Flow.Launcher.Core.Plugin contentControl = textBox; Grid.SetColumn(contentControl, 1); Grid.SetRow(contentControl, rowCount); + if (rowCount != 0) + mainPanel.Children.Add(sep); + Grid.SetRow(sep, rowCount); + Grid.SetColumn(sep, 0); + Grid.SetColumnSpan(sep, 2); break; } case "textarea": { var textBox = new TextBox() { - Width = 300, Height = 120, Margin = settingControlMargin, + VerticalAlignment = VerticalAlignment.Center, TextWrapping = TextWrapping.WrapWithOverflow, AcceptsReturn = true, - HorizontalAlignment = HorizontalAlignment.Left, + HorizontalAlignment = HorizontalAlignment.Stretch, Text = Settings[attribute.Name] as string ?? string.Empty, ToolTip = attribute.Description }; @@ -440,17 +476,21 @@ namespace Flow.Launcher.Core.Plugin contentControl = textBox; Grid.SetColumn(contentControl, 1); Grid.SetRow(contentControl, rowCount); + if (rowCount != 0) + mainPanel.Children.Add(sep); + Grid.SetRow(sep, rowCount); + Grid.SetColumn(sep, 0); + Grid.SetColumnSpan(sep, 2); break; } case "passwordBox": { var passwordBox = new PasswordBox() { - Width = 300, Margin = settingControlMargin, Password = Settings[attribute.Name] as string ?? string.Empty, PasswordChar = attribute.passwordChar == default ? '*' : attribute.passwordChar, - HorizontalAlignment = HorizontalAlignment.Left, + HorizontalAlignment = HorizontalAlignment.Stretch, ToolTip = attribute.Description }; passwordBox.PasswordChanged += (sender, _) => @@ -460,6 +500,11 @@ namespace Flow.Launcher.Core.Plugin contentControl = passwordBox; Grid.SetColumn(contentControl, 1); Grid.SetRow(contentControl, rowCount); + if (rowCount != 0) + mainPanel.Children.Add(sep); + Grid.SetRow(sep, rowCount); + Grid.SetColumn(sep, 0); + Grid.SetColumnSpan(sep, 2); break; } case "dropdown": @@ -469,7 +514,7 @@ namespace Flow.Launcher.Core.Plugin ItemsSource = attribute.Options, SelectedItem = Settings[attribute.Name], Margin = settingControlMargin, - HorizontalAlignment = HorizontalAlignment.Left, + HorizontalAlignment = HorizontalAlignment.Right, ToolTip = attribute.Description }; comboBox.SelectionChanged += (sender, _) => @@ -479,14 +524,19 @@ namespace Flow.Launcher.Core.Plugin contentControl = comboBox; Grid.SetColumn(contentControl, 1); Grid.SetRow(contentControl, rowCount); + if (rowCount != 0) + mainPanel.Children.Add(sep); + Grid.SetRow(sep, rowCount); + Grid.SetColumn(sep, 0); + Grid.SetColumnSpan(sep, 2); break; } case "checkbox": var checkBox = new CheckBox { IsChecked = Settings[attribute.Name] is bool isChecked ? isChecked : bool.Parse(attribute.DefaultValue), - Margin = settingControlMargin, - HorizontalAlignment = HorizontalAlignment.Left, + Margin = settingCheckboxMargin, + HorizontalAlignment = HorizontalAlignment.Right, ToolTip = attribute.Description }; checkBox.Click += (sender, _) => @@ -496,15 +546,21 @@ namespace Flow.Launcher.Core.Plugin contentControl = checkBox; Grid.SetColumn(contentControl, 1); Grid.SetRow(contentControl, rowCount); + if (rowCount != 0) + mainPanel.Children.Add(sep); + Grid.SetRow(sep, rowCount); + Grid.SetColumn(sep, 0); + Grid.SetColumnSpan(sep, 2); break; default: continue; } if (type != "textBlock") _settingControls[attribute.Name] = contentControl; - mainPanel.Children.Add(name); + mainPanel.Children.Add(panel); mainPanel.Children.Add(contentControl); rowCount++; + } return settingWindow; }