/// <summary> /// Конвертировать стиль в XElement /// </summary> private static XElement ConvertToXElement(this IntellectualEntityStyle style) { var styleXel = new XElement("UserStyle"); styleXel.SetAttributeValue(nameof(style.Name), style.Name); styleXel.SetAttributeValue(nameof(style.Description), style.Description); styleXel.SetAttributeValue(nameof(style.Guid), style.Guid); foreach (var entityProperty in style.Properties) { if (entityProperty.Name == "Scale") { var propXel = new XElement("Property"); propXel.SetAttributeValue("Name", entityProperty.Name); propXel.SetAttributeValue("Value", ((AnnotationScale)entityProperty.Value).Name); styleXel.Add(propXel); } else { var propXel = new XElement("Property"); propXel.SetAttributeValue("Name", entityProperty.Name); propXel.SetAttributeValue("Value", entityProperty.Value); styleXel.Add(propXel); } } if (LayerUtils.HasLayer(style.GetLayerNameProperty())) { styleXel.Add(LayerUtils.SetLayerXml(LayerUtils.GetLayerTableRecordByLayerName(style.GetLayerNameProperty()))); } else if (style.LayerXmlData != null) { styleXel.Add(style.LayerXmlData); } // add text style if (TextStyleUtils.HasTextStyle(style.GetTextStyleProperty())) { styleXel.Add(TextStyleUtils.SetTextStyleTableRecordXElement(TextStyleUtils.GetTextStyleTableRecordByName(style.GetTextStyleProperty()))); } else if (style.TextStyleXmlData != null) { styleXel.Add(style.TextStyleXmlData); } return(styleXel); }
private void ShowStyleProperties(IntellectualEntityStyle style) { var topGrid = new Grid(); topGrid.RowDefinitions.Add(new RowDefinition { Height = GridLength.Auto }); topGrid.RowDefinitions.Add(new RowDefinition { Height = GridLength.Auto }); topGrid.RowDefinitions.Add(new RowDefinition { Height = GridLength.Auto }); topGrid.RowDefinitions.Add(new RowDefinition { Height = GridLength.Auto }); topGrid.RowDefinitions.Add(new RowDefinition()); #region Set main data var headerName = new TextBlock { Margin = (Thickness)FindResource("ModPlusDefaultMargin"), Text = ModPlusAPI.Language.GetItem(Invariables.LangItem, "h54") }; Grid.SetRow(headerName, 0); topGrid.Children.Add(headerName); var tbName = new TextBox { IsEnabled = style.StyleType == StyleType.User }; Grid.SetRow(tbName, 1); var binding = new Binding { Mode = BindingMode.TwoWay, UpdateSourceTrigger = UpdateSourceTrigger.PropertyChanged, Source = style, Path = new PropertyPath("Name") }; BindingOperations.SetBinding(tbName, TextBox.TextProperty, binding); topGrid.Children.Add(tbName); var headerDescription = new TextBlock { Margin = (Thickness)FindResource("ModPlusDefaultMargin"), Text = ModPlusAPI.Language.GetItem(Invariables.LangItem, "h55") }; Grid.SetRow(headerDescription, 2); topGrid.Children.Add(headerDescription); var tbDescription = new TextBox { IsEnabled = style.StyleType == StyleType.User }; Grid.SetRow(tbDescription, 3); binding = new Binding { Mode = BindingMode.TwoWay, UpdateSourceTrigger = UpdateSourceTrigger.PropertyChanged, Source = style, Path = new PropertyPath("Description") }; BindingOperations.SetBinding(tbDescription, TextBox.TextProperty, binding); topGrid.Children.Add(tbDescription); #endregion var propertiesGrid = new Grid(); propertiesGrid.ColumnDefinitions.Add(new ColumnDefinition()); propertiesGrid.ColumnDefinitions.Add(new ColumnDefinition { Width = GridLength.Auto }); propertiesGrid.ColumnDefinitions.Add(new ColumnDefinition()); Grid.SetRow(propertiesGrid, 4); var groupsByCategory = style.Properties.GroupBy(p => p.Category).ToList(); groupsByCategory.Sort((g1, g2) => g1.Key.CompareTo(g2.Key)); var rowIndex = 0; foreach (var categoryGroup in groupsByCategory) { propertiesGrid.RowDefinitions.Add(new RowDefinition { Height = GridLength.Auto }); var categoryHeader = new TextBox { Text = LocalizationUtils.GetCategoryLocalizationName(categoryGroup.Key) }; Grid.SetRow(categoryHeader, rowIndex); Grid.SetColumn(categoryHeader, 0); Grid.SetColumnSpan(categoryHeader, 3); categoryHeader.Style = Resources["HeaderTextBoxForStyleEditor"] as Style; propertiesGrid.Children.Add(categoryHeader); rowIndex++; var gridSplitterStartIndex = rowIndex; foreach (var property in categoryGroup.OrderBy(p => p.OrderIndex)) { propertiesGrid.RowDefinitions.Add(new RowDefinition { Height = GridLength.Auto }); // property name var propertyDescription = GetPropertyDescription(property); var propertyHeader = new TextBox { Text = GetPropertyDisplayName(property), Style = Resources["PropertyHeaderInStyleEditor"] as Style }; SetDescription(propertyHeader, propertyDescription); Grid.SetColumn(propertyHeader, 0); Grid.SetRow(propertyHeader, rowIndex); propertiesGrid.Children.Add(propertyHeader); if (property.Name == "LayerName") { try { var cb = new ComboBox { IsEnabled = style.StyleType == StyleType.User }; Grid.SetColumn(cb, 2); Grid.SetRow(cb, rowIndex); var layers = AcadUtils.Layers; layers.Insert(0, ModPlusAPI.Language.GetItem(Invariables.LangItem, "defl")); // "По умолчанию" if (!layers.Contains(style.GetLayerNameProperty())) { layers.Insert(1, style.GetLayerNameProperty()); } cb.ItemsSource = layers; cb.Style = Resources["PropertyValueComboBoxForStyleEditor"] as Style; SetDescription(cb, propertyDescription); BindingOperations.SetBinding(cb, Selector.SelectedItemProperty, CreateTwoWayBindingForProperty(property)); propertiesGrid.Children.Add(cb); } catch (Exception exception) { ExceptionBox.Show(exception); } } else if (property.Name == "Scale") { try { var cb = new ComboBox { IsEnabled = style.StyleType == StyleType.User }; Grid.SetColumn(cb, 2); Grid.SetRow(cb, rowIndex); cb.ItemsSource = AcadUtils.Scales; cb.Style = Resources["PropertyValueComboBoxForStyleEditor"] as Style; SetDescription(cb, propertyDescription); BindingOperations.SetBinding(cb, ComboBox.TextProperty, CreateTwoWayBindingForProperty(property, new AnnotationScaleValueConverter())); propertiesGrid.Children.Add(cb); } catch (Exception exception) { ExceptionBox.Show(exception); } } else if (property.Name == "LineType") { try { var tb = new TextBox { IsEnabled = style.StyleType == StyleType.User }; Grid.SetColumn(tb, 2); Grid.SetRow(tb, rowIndex); tb.Cursor = Cursors.Hand; tb.Style = Resources["PropertyValueTextBoxForStyleEditor"] as Style; tb.PreviewMouseDown += LineType_OnPreviewMouseDown; SetDescription(tb, propertyDescription); BindingOperations.SetBinding(tb, TextBox.TextProperty, CreateTwoWayBindingForProperty(property)); propertiesGrid.Children.Add(tb); } catch (Exception exception) { ExceptionBox.Show(exception); } } else if (property.Name.Contains("TextStyle")) { try { var cb = new ComboBox { IsEnabled = style.StyleType == StyleType.User }; Grid.SetColumn(cb, 2); Grid.SetRow(cb, rowIndex); cb.ItemsSource = AcadUtils.TextStyles; cb.Style = Resources["PropertyValueComboBoxForStyleEditor"] as Style; SetDescription(cb, propertyDescription); BindingOperations.SetBinding(cb, Selector.SelectedItemProperty, CreateTwoWayBindingForProperty(property)); propertiesGrid.Children.Add(cb); } catch (Exception exception) { ExceptionBox.Show(exception); } } else if (property.Value is Enum) { try { var cb = new ComboBox { IsEnabled = style.StyleType == StyleType.User }; Grid.SetColumn(cb, 2); Grid.SetRow(cb, rowIndex); cb.Style = Resources["PropertyValueComboBoxForStyleEditor"] as Style; var type = property.Value.GetType(); SetDescription(cb, propertyDescription); cb.ItemsSource = LocalizationUtils.GetEnumPropertyLocalizationFields(type); BindingOperations.SetBinding(cb, ComboBox.TextProperty, CreateTwoWayBindingForProperty(property, new EnumPropertyValueConverter())); propertiesGrid.Children.Add(cb); } catch (Exception exception) { ExceptionBox.Show(exception); } } else if (property.Value is int) { try { var tb = new NumericBox { IsEnabled = style.StyleType == StyleType.User }; Grid.SetColumn(tb, 2); Grid.SetRow(tb, rowIndex); tb.Minimum = Convert.ToInt32(property.Minimum); tb.Maximum = Convert.ToInt32(property.Maximum); tb.Style = Resources["PropertyValueIntTextBoxForStyleEditor"] as Style; SetDescription(tb, propertyDescription); BindingOperations.SetBinding(tb, NumericBox.ValueProperty, CreateTwoWayBindingForPropertyForNumericValue(property, true)); propertiesGrid.Children.Add(tb); } catch (Exception exception) { ExceptionBox.Show(exception); } } else if (property.Value is double) { try { var tb = new NumericBox { IsEnabled = style.StyleType == StyleType.User }; Grid.SetColumn(tb, 2); Grid.SetRow(tb, rowIndex); tb.Minimum = Convert.ToDouble(property.Minimum); tb.Maximum = Convert.ToDouble(property.Maximum); tb.Style = Resources["PropertyValueDoubleTextBoxForStyleEditor"] as Style; SetDescription(tb, propertyDescription); BindingOperations.SetBinding(tb, NumericBox.ValueProperty, CreateTwoWayBindingForPropertyForNumericValue(property, false)); propertiesGrid.Children.Add(tb); } catch (Exception exception) { ExceptionBox.Show(exception); } } else if (property.Value is bool) { try { var chb = new CheckBox { IsEnabled = style.StyleType == StyleType.User }; SetDescription(chb, propertyDescription); BindingOperations.SetBinding(chb, ToggleButton.IsCheckedProperty, CreateTwoWayBindingForProperty(property)); var outerBorder = new Border(); outerBorder.Style = Resources["PropertyBorderForCheckBoxForStyleEditor"] as Style; Grid.SetColumn(outerBorder, 2); Grid.SetRow(outerBorder, rowIndex); outerBorder.Child = chb; propertiesGrid.Children.Add(outerBorder); } catch (Exception exception) { ExceptionBox.Show(exception); } } else if (property.Value is string) { try { var tb = new TextBox { IsEnabled = style.StyleType == StyleType.User }; Grid.SetColumn(tb, 2); Grid.SetRow(tb, rowIndex); tb.Style = Resources["PropertyValueTextBoxForStyleEditor"] as Style; SetDescription(tb, propertyDescription); BindingOperations.SetBinding(tb, TextBox.TextProperty, CreateTwoWayBindingForProperty(property)); propertiesGrid.Children.Add(tb); } catch (Exception exception) { ExceptionBox.Show(exception); } } rowIndex++; } propertiesGrid.Children.Add(CreateGridSplitter(gridSplitterStartIndex, rowIndex - gridSplitterStartIndex)); } topGrid.Children.Add(propertiesGrid); BorderProperties.Child = topGrid; }