public static LayerDisplayItem Create(int layerId, string layerTitle) { LayerDisplayItem result = LayerDisplayItem.Empty; result.LayerId = layerId; result.LayerTitle = layerTitle; return(result); }
/// <override></override> public override object EditValue(ITypeDescriptorContext context, IServiceProvider provider, object value) { if (context != null && context.Instance != null && provider != null) { IWindowsFormsEditorService edSvc = (IWindowsFormsEditorService)provider.GetService(typeof(IWindowsFormsEditorService)); if (edSvc != null && context.Instance is Shape) { Shape shape = (Shape)context.Instance; using (CheckedListBox listBox = new CheckedListBox()) { bool isHomeLayerProperty = (context.PropertyDescriptor.Name == "HomeLayer"); listBox.BorderStyle = BorderStyle.None; listBox.IntegralHeight = false; listBox.CheckOnClick = true; listBox.SelectionMode = SelectionMode.One; if (isHomeLayerProperty) { listBox.SelectedIndexChanged += (sender, e) => { int idx = listBox.SelectedIndex; for (int i = listBox.Items.Count - 1; i >= 0; --i) { if (i != idx && listBox.GetItemChecked(i)) { listBox.SetItemChecked(i, false); } } }; } // Add existing layers and check shape's layers listBox.Items.Clear(); foreach (Layer l in shape.Diagram.Layers) { int idx = listBox.Items.Count; // Add layer item if (Layer.IsCombinable(l.LayerId) || isHomeLayerProperty) { listBox.Items.Insert(idx, LayerDisplayItem.Create(l.LayerId, l.Name)); // Set check state if (isHomeLayerProperty) { listBox.SetItemChecked(idx, shape.HomeLayer == l.LayerId); } else { listBox.SetItemChecked(idx, (shape.SupplementalLayers & Layer.ConvertToLayerIds(l.LayerId)) != 0); } } } edSvc.DropDownControl(listBox); // Get selected layer ids List <int> shapeLayerIds = new List <int>(); foreach (LayerDisplayItem layerItem in listBox.CheckedItems) { shapeLayerIds.Add(layerItem.LayerId); } // Set property value if (isHomeLayerProperty) { System.Diagnostics.Debug.Assert(shapeLayerIds.Count <= 1); value = (shapeLayerIds.Count > 0) ? shapeLayerIds[0] : Layer.NoLayerId; } else { value = Layer.ConvertToLayerIds(shapeLayerIds); } } } } return(value); }