internal NewEntityDialog(ConceptualEntityModel model) { Debug.Assert(model != null, "model should not be null"); _model = model; InitializeComponent(); // Set the default font to VS shell font. var vsFont = VSHelpers.GetVSFont(Services.ServiceProvider); if (vsFont != null) { Font = vsFont; } keyPropertyCheckBox.Checked = true; propertyTypeComboBox.Items.AddRange(ModelHelper.AllPrimitiveTypesSorted(_model.Artifact.SchemaVersion)); propertyTypeComboBox.SelectedItem = ModelConstants.Int32PropertyType; baseTypeComboBox.Items.Add(Resources.NoneDisplayValueUsedForUX); baseTypeComboBox.Items.AddRange(model.EntityTypes().ToArray()); if (baseTypeComboBox.Items.Count > 0) { baseTypeComboBox.SelectedIndex = 0; } entityNameTextBox.Text = ModelHelper.GetUniqueNameWithNumber( typeof(EntityType), model, Model.Resources.Model_DefaultEntityTypeName); propertyNameTextBox.Text = Model.Resources.Model_IdPropertyName; cancelButton.BackColor = SystemColors.Control; cancelButton.ForeColor = SystemColors.ControlText; okButton.BackColor = SystemColors.Control; okButton.ForeColor = SystemColors.ControlText; }
private void PopulateTypeList(ITypeDescriptorContext context) { _typeList = new HashSet <string>(); if (context != null) { var propertyDescriptor = context.Instance as EFPropertyDescriptor; if (propertyDescriptor != null && propertyDescriptor.TypedEFElement != null) { var artifact = propertyDescriptor.TypedEFElement.Artifact; Debug.Assert(artifact != null, "Unable to find artifact."); if (artifact != null) { foreach (var primType in ModelHelper.AllPrimitiveTypesSorted(artifact.SchemaVersion)) { _typeList.Add(primType); } } var conceptualModel = (ConceptualEntityModel)propertyDescriptor.TypedEFElement.GetParentOfType(typeof(ConceptualEntityModel)); Debug.Assert(conceptualModel != null, "Unable to find conceptual model."); if (conceptualModel != null) { foreach (var enumType in conceptualModel.EnumTypes()) { _typeList.Add(enumType.NormalizedNameExternal); } } } } }
protected override void OnBeforeShowContextMenu() { // Creating commands for adding scalar and complex properties to complex types (one for each complex type from the model). // Since the scalar types can change dependent on the schemaVersion and since complex types can be added or deleted // we need to compute these commands each time a context menu is requested // only need to do this if selected is ExplorerComplexType var selectedElement = CurrentExplorerInfo._explorerFrame.GetSelectedExplorerEFElement(); if (selectedElement is ExplorerComplexType) { var service = EditingContext.GetEFArtifactService(); Debug.Assert(service != null && service.Artifact != null, "service and service.Artifact must both be non-null"); if (service != null && service.Artifact != null) { // Creating commands for adding scalar properties to complex types (one for each primitive type) var i = 0; foreach (var type in ModelHelper.AllPrimitiveTypesSorted(service.Artifact.SchemaVersion)) { var cmdId = new CommandID( PackageConstants.guidEscherCmdSet, PackageConstants.cmdIdExplorerAddScalarPropertyBase + i); var cmd = MenuCommandService.FindCommand(cmdId); if (cmd == null) { cmd = new DynamicStatusMenuCommand(OnStatusAddComplexTypeProperty, OnMenuAddComplexTypeProperty, cmdId); cmd.Properties[PackageConstants.guidEscherCmdSet] = type; MenuCommandService.AddCommand(cmd); } else { cmd.Properties[PackageConstants.guidEscherCmdSet] = type; } i++; } // set up commands for complex types var conceptualModel = service.Artifact.ConceptualModel(); Debug.Assert(conceptualModel != null, "service.Artifact.ConceptualModel() should not be null"); if (conceptualModel != null) { var complexTypes = new List <ComplexType>(conceptualModel.ComplexTypes()); complexTypes.Sort(EFElement.EFElementDisplayNameComparison); i = 0; foreach (var complexType in complexTypes) { // don't add an item for a ComplexType that is same as currently selected one if (selectedElement.ModelItem == complexType) { continue; } // if we find an old command with the same cmdId remove it and replace // with the new one to force VS to refresh the text var cmdId = new CommandID( PackageConstants.guidEscherCmdSet, PackageConstants.cmdIdExplorerAddComplexPropertyBase + i); var cmd = MenuCommandService.FindCommand(cmdId); if (cmd != null) { MenuCommandService.RemoveCommand(cmd); } cmd = new DynamicStatusMenuCommand(OnStatusAddComplexTypeProperty, OnMenuAddComplexTypeProperty, cmdId); cmd.Properties[PackageConstants.guidEscherCmdSet] = complexType; MenuCommandService.AddCommand(cmd); i++; if (i >= AddComplexPropertyCommandMaxCount) { // break after adding 10 ComplexTypes break; } } // if some of the complex types were removed, we need to remove unnecessary commands var cmd2 = MenuCommandService.FindCommand( new CommandID(PackageConstants.guidEscherCmdSet, PackageConstants.cmdIdExplorerAddComplexPropertyBase + i)); while (i < AddComplexPropertyCommandMaxCount && cmd2 != null) { MenuCommandService.RemoveCommand(cmd2); i++; cmd2 = MenuCommandService.FindCommand( new CommandID( PackageConstants.guidEscherCmdSet, PackageConstants.cmdIdExplorerAddComplexPropertyBase + i)); } } } } }