/// <summary> /// Render RadioGroup control. /// Return true if failed. /// </summary> /// <param name="r.Canvas">Parent r.Canvas</param> /// <param name="uiCmd">UICommand</param> /// <returns>Success = false, Failure = true</returns> public static void RenderRadioButton(RenderInfo r, UICommand uiCmd, UICommand[] radioButtons) { Debug.Assert(uiCmd.Info.GetType() == typeof(UIInfo_RadioButton)); UIInfo_RadioButton info = uiCmd.Info as UIInfo_RadioButton; double fontSize = CalcFontPointScale(); RadioButton radio = new RadioButton() { GroupName = r.Plugin.FullPath, Content = uiCmd.Text, FontSize = fontSize, IsChecked = info.Selected, VerticalContentAlignment = VerticalAlignment.Center, }; if (info.SectionName != null) { radio.Click += (object sender, RoutedEventArgs e) => { if (r.Plugin.Sections.ContainsKey(info.SectionName)) // Only if section exists { SectionAddress addr = new SectionAddress(r.Plugin, r.Plugin.Sections[info.SectionName]); UIRenderer.RunOneSection(addr, $"{r.Plugin.Title} - RadioButton [{uiCmd.Key}]", info.HideProgress); } else { Application.Current.Dispatcher.Invoke((Action)(() => { MainWindow w = Application.Current.MainWindow as MainWindow; w.Logger.System_Write(new LogInfo(LogState.Error, $"Section [{info.SectionName}] does not exists")); })); } }; } radio.Checked += (object sender, RoutedEventArgs e) => { RadioButton btn = sender as RadioButton; info.Selected = true; // Uncheck the other RadioButtons List <UICommand> updateList = radioButtons.Where(x => !x.Key.Equals(uiCmd.Key, StringComparison.Ordinal)).ToList(); foreach (UICommand uncheck in updateList) { Debug.Assert(uncheck.Info.GetType() == typeof(UIInfo_RadioButton)); UIInfo_RadioButton unInfo = uncheck.Info as UIInfo_RadioButton; unInfo.Selected = false; } updateList.Add(uiCmd); UICommand.Update(updateList); }; SetToolTip(radio, info.ToolTip); DrawToCanvas(r, radio, uiCmd.Rect); }
/// <summary> /// Render CheckBox control. /// Return true if failed. /// </summary> /// <param name="r.Canvas">Parent r.Canvas</param> /// <param name="uiCmd">UICommand</param> /// <returns>Success = false, Failure = true</returns> public static void RenderCheckBox(RenderInfo r, UICommand uiCmd) { Debug.Assert(uiCmd.Info.GetType() == typeof(UIInfo_CheckBox)); UIInfo_CheckBox info = uiCmd.Info as UIInfo_CheckBox; CheckBox checkBox = new CheckBox() { Content = uiCmd.Text, IsChecked = info.Value, FontSize = CalcFontPointScale(), VerticalContentAlignment = VerticalAlignment.Center, }; if (info.SectionName != null) { checkBox.Click += (object sender, RoutedEventArgs e) => { if (r.Plugin.Sections.ContainsKey(info.SectionName)) // Only if section exists { SectionAddress addr = new SectionAddress(r.Plugin, r.Plugin.Sections[info.SectionName]); UIRenderer.RunOneSection(addr, $"{r.Plugin.Title} - CheckBox [{uiCmd.Key}]", info.HideProgress); } else { r.Logger.System_Write(new LogInfo(LogState.Error, $"Section [{info.SectionName}] does not exists")); } }; } checkBox.Checked += (object sender, RoutedEventArgs e) => { CheckBox box = sender as CheckBox; info.Value = true; uiCmd.Update(); }; checkBox.Unchecked += (object sender, RoutedEventArgs e) => { CheckBox box = sender as CheckBox; info.Value = false; uiCmd.Update(); }; SetToolTip(checkBox, info.ToolTip); DrawToCanvas(r, checkBox, uiCmd.Rect); }
/// <summary> /// Render ComboBox control. /// Return true if failed. /// </summary> /// <param name="r.Canvas">Parent r.Canvas</param> /// <param name="uiCmd">UICommand</param> /// <returns>Success = false, Failure = true</returns> public static void RenderComboBox(RenderInfo r, UICommand uiCmd) { Debug.Assert(uiCmd.Info.GetType() == typeof(UIInfo_ComboBox)); UIInfo_ComboBox info = uiCmd.Info as UIInfo_ComboBox; ComboBox comboBox = new ComboBox() { FontSize = CalcFontPointScale(), ItemsSource = info.Items, SelectedIndex = info.Index, VerticalContentAlignment = VerticalAlignment.Center, }; comboBox.LostFocus += (object sender, RoutedEventArgs e) => { ComboBox box = sender as ComboBox; if (info.Index != box.SelectedIndex) { info.Index = box.SelectedIndex; uiCmd.Text = info.Items[box.SelectedIndex]; uiCmd.Update(); } }; if (info.SectionName != null) { comboBox.SelectionChanged += (object sender, SelectionChangedEventArgs e) => { if (r.Plugin.Sections.ContainsKey(info.SectionName)) // Only if section exists { SectionAddress addr = new SectionAddress(r.Plugin, r.Plugin.Sections[info.SectionName]); UIRenderer.RunOneSection(addr, $"{r.Plugin.Title} - CheckBox [{uiCmd.Key}]", info.HideProgress); } else { r.Logger.System_Write(new LogInfo(LogState.Error, $"Section [{info.SectionName}] does not exists")); } }; } SetToolTip(comboBox, info.ToolTip); DrawToCanvas(r, comboBox, uiCmd.Rect); }
/// <summary> /// Render RadioGroup control. /// Return true if failed. /// </summary> /// <param name="r.Canvas">Parent r.Canvas</param> /// <param name="uiCmd">UICommand</param> /// <returns>Success = false, Failure = true</returns> public static void RenderRadioGroup(RenderInfo r, UICommand uiCmd) { Debug.Assert(uiCmd.Info.GetType() == typeof(UIInfo_RadioGroup)); UIInfo_RadioGroup info = uiCmd.Info as UIInfo_RadioGroup; double fontSize = CalcFontPointScale(); GroupBox box = new GroupBox() { Header = uiCmd.Text, FontSize = fontSize, BorderBrush = Brushes.LightGray, }; SetToolTip(box, info.ToolTip); Grid grid = new Grid(); box.Content = grid; for (int i = 0; i < info.Items.Count; i++) { RadioButton radio = new RadioButton() { GroupName = r.Plugin.FullPath + uiCmd.Key, Content = info.Items[i], Tag = i, FontSize = fontSize, VerticalContentAlignment = VerticalAlignment.Center, }; radio.IsChecked = (i == info.Selected); radio.Checked += (object sender, RoutedEventArgs e) => { RadioButton btn = sender as RadioButton; info.Selected = (int)btn.Tag; uiCmd.Update(); }; if (info.SectionName != null) { radio.Click += (object sender, RoutedEventArgs e) => { if (r.Plugin.Sections.ContainsKey(info.SectionName)) // Only if section exists { SectionAddress addr = new SectionAddress(r.Plugin, r.Plugin.Sections[info.SectionName]); UIRenderer.RunOneSection(addr, $"{r.Plugin.Title} - RadioGroup [{uiCmd.Key}]", info.HideProgress); } else { Application.Current.Dispatcher.Invoke(() => { MainWindow w = Application.Current.MainWindow as MainWindow; w.Logger.System_Write(new LogInfo(LogState.Error, $"Section [{info.SectionName}] does not exists")); }); } }; } SetToolTip(radio, info.ToolTip); Grid.SetRow(radio, i); grid.RowDefinitions.Add(new RowDefinition()); grid.Children.Add(radio); } Rect rect = new Rect(uiCmd.Rect.Left, uiCmd.Rect.Top, uiCmd.Rect.Width, uiCmd.Rect.Height); DrawToCanvas(r, box, rect); }
/// <summary> /// Render Button control. /// Return true if failed. /// </summary> /// <param name="r.Canvas">Parent r.Canvas</param> /// <param name="uiCmd">UICommand</param> /// <returns>Success = false, Failure = true</returns> public static void RenderButton(RenderInfo r, UICommand uiCmd, Logger logger) { Debug.Assert(uiCmd.Info.GetType() == typeof(UIInfo_Button)); UIInfo_Button info = uiCmd.Info as UIInfo_Button; Button button = new Button() { HorizontalAlignment = HorizontalAlignment.Center, VerticalAlignment = VerticalAlignment.Center, }; button.Click += (object sender, RoutedEventArgs e) => { if (r.Plugin.Sections.ContainsKey(info.SectionName)) // Only if section exists { SectionAddress addr = new SectionAddress(r.Plugin, r.Plugin.Sections[info.SectionName]); UIRenderer.RunOneSection(addr, $"{r.Plugin.Title} - Button [{uiCmd.Key}]", info.ShowProgress); } else { Application.Current.Dispatcher.Invoke((Action)(() => { MainWindow w = Application.Current.MainWindow as MainWindow; w.Logger.System_Write(new LogInfo(LogState.Error, $"Section [{info.SectionName}] does not exists")); })); } }; if (info.Picture != null && uiCmd.Addr.Plugin.Sections.ContainsKey($"EncodedFile-InterfaceEncoded-{info.Picture}")) { // Has Picture if (ImageHelper.GetImageType(info.Picture, out ImageHelper.ImageType type)) { return; } Image image = new Image() { StretchDirection = StretchDirection.DownOnly, Stretch = Stretch.Uniform, UseLayoutRounding = true, }; RenderOptions.SetBitmapScalingMode(image, BitmapScalingMode.HighQuality); using (MemoryStream ms = EncodedFile.ExtractInterfaceEncoded(uiCmd.Addr.Plugin, info.Picture)) { if (type == ImageHelper.ImageType.Svg) { ImageHelper.GetSvgSize(ms, out double width, out double height); image.Source = ImageHelper.SvgToBitmapImage(ms, width, height); } else { image.Source = ImageHelper.ImageToBitmapImage(ms); } } if (uiCmd.Text.Equals(string.Empty, StringComparison.Ordinal)) { // No text, just image button.Content = image; } else { // Button has text StackPanel panel = new StackPanel() { HorizontalAlignment = HorizontalAlignment.Center, VerticalAlignment = VerticalAlignment.Center, Orientation = Orientation.Horizontal, }; TextBlock text = new TextBlock() { Text = uiCmd.Text, FontSize = CalcFontPointScale(), Height = double.NaN, VerticalAlignment = VerticalAlignment.Center, Margin = new Thickness(CalcFontPointScale() / 2, 0, 0, 0), }; panel.Children.Add(image); panel.Children.Add(text); button.Content = panel; } } else { // No picture button.Content = uiCmd.Text; button.FontSize = CalcFontPointScale(); } SetToolTip(button, info.ToolTip); DrawToCanvas(r, button, uiCmd.Rect); }