// add new style private void BtAddNewStyle_OnClick(object sender, RoutedEventArgs e) { var selected = TvStyles.SelectedItem; if (selected == null) { return; } if (selected is EntityStyles entityStyles) { var newStyle = new SmartEntityStyle(entityStyles.EntityType, true) { Name = ModPlusAPI.Language.GetItem("h13"), StyleType = StyleType.User }; entityStyles.Styles.Add(newStyle); StyleManager.AddStyle(newStyle); } else if (selected is SmartEntityStyle style) { var newStyle = new SmartEntityStyle(style.EntityType, true) { Name = ModPlusAPI.Language.GetItem("h13"), StyleType = StyleType.User }; _styles.Single(es => es.Styles.Contains(style)).Styles.Add(newStyle); StyleManager.AddStyle(newStyle); } }
private void BtCreateStyleFromEntity_OnClick(object sender, RoutedEventArgs e) { /* Созданный стиль нужно еще найти в TreeView и выбрать его, раскрыв дерево * для этого можно искать по гуиду, а сам поиск взять в плагине mpDwgBase */ try { Hide(); var promptEntityOptions = new PromptEntityOptions($"\n{ModPlusAPI.Language.GetItem("msg3")}"); promptEntityOptions.SetRejectMessage("\nWrong entity"); promptEntityOptions.AllowNone = false; promptEntityOptions.AddAllowedClass(typeof(BlockReference), true); promptEntityOptions.AllowObjectOnLockedLayer = true; var selectionResult = AcadUtils.Document.Editor.GetEntity(promptEntityOptions); if (selectionResult.Status == PromptStatus.OK) { var newStyleGuid = string.Empty; using (var tr = new OpenCloseTransaction()) { var obj = tr.GetObject(selectionResult.ObjectId, OpenMode.ForRead); if (obj is BlockReference blockReference) { var entity = EntityReaderService.Instance.GetFromEntity(blockReference); var newStyle = new SmartEntityStyle(entity.GetType()) { Name = ModPlusAPI.Language.GetItem("h13"), StyleType = StyleType.User, Guid = Guid.NewGuid().ToString() }; newStyle.GetPropertiesFromEntity(entity, blockReference); newStyleGuid = newStyle.Guid; foreach (var entityStyles in _styles) { if (entityStyles.EntityType == entity.GetType()) { entityStyles.Styles.Add(newStyle); StyleManager.AddStyle(newStyle); break; } } } } if (!string.IsNullOrEmpty(newStyleGuid)) { SearchInTreeViewByGuid(newStyleGuid); } } } catch (Exception exception) { ExceptionBox.Show(exception); } finally { Show(); } }
private void ShowStyleProperties(SmartEntityStyle 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("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("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("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; }