Ejemplo n.º 1
0
            public static LayerDisplayItem Create(int layerId, string layerTitle)
            {
                LayerDisplayItem result = LayerDisplayItem.Empty;

                result.LayerId    = layerId;
                result.LayerTitle = layerTitle;
                return(result);
            }
Ejemplo n.º 2
0
        /// <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);
        }