private void RefreshEventsForElement(ElementSave selectedElement) { EventsViewModel viewModel = new EventsViewModel(); viewModel.InstanceSave = null; viewModel.ElementSave = selectedElement; mEventsDataGrid.Instance = viewModel; mEventsDataGrid.MembersToIgnore.Add("InstanceSave"); mEventsDataGrid.MembersToIgnore.Add("ElementSave"); mEventsDataGrid.Categories[0].Name = "Events on this"; MemberCategory exposed = new MemberCategory(); exposed.Name = "Exposed"; var exposedEvents = SelectedState.Self.SelectedElement.Events.Where(item => !string.IsNullOrEmpty(item.ExposedAsName)); foreach (var eventSave in exposedEvents) { EventInstanceMember instanceMember = new EventInstanceMember( SelectedState.Self.SelectedElement, SelectedState.Self.SelectedInstance, eventSave); var local = eventSave; instanceMember.ContextMenuEvents.Add( "Rename", delegate { TextInputWindow tiw = new TextInputWindow(); tiw.Message = "Enter new name"; tiw.Result = local.ExposedAsName; if (tiw.ShowDialog() == System.Windows.Forms.DialogResult.OK) { bool isValid = true; // todo: //string whyNotValid = null; //isValid = NameVerifier.Self.IsEventNameValid(tiw.Result, out whyNotValid); if (isValid) { string oldName = local.ExposedAsName; local.ExposedAsName = tiw.Result; RenameManager.Self.HandleRename(selectedElement, local, oldName); GumCommands.Self.FileCommands.TryAutoSaveCurrentElement(); GumCommands.Self.GuiCommands.RefreshPropertyGrid(); } } }); exposed.Members.Add(instanceMember); } mEventsDataGrid.Categories.Add(exposed); }
private void UpdateGridCategories() { var category = new MemberCategory("Test Category"); var instanceName = GlueState.Self.CurrentNamedObjectSave?.InstanceName; var foundInstance = Instances.FirstOrDefault(item => item.Name == instanceName); if (foundInstance != null) { List<PropertyReference> objectProperties = new List<PropertyReference>(); //GetObjectProperties(host, "CurrentScreen", availableEntities[0]); foreach (var property in objectProperties) { var member = new ConnectedInstanceMember(); member.InstanceReference = foundInstance; member.PropertyReference = property; // todo: get the type member.Type = typeof(object); member.Connection = null; category.Members.Add(member); } grid.Categories.Add(category); } //var instanceMember = new InstanceMember("Some value", this); //instanceMember.CustomSetEvent += (owner, value) => //{ // System.Console.WriteLine($"Setting the value of {owner} to {value}"); //}; //instanceMember.CustomGetEvent += (owner) => //{ // System.Console.WriteLine($"Returning the value for {owner}"); // return 10; //}; //instanceMember.CustomGetTypeEvent += (owner) => //{ // System.Console.WriteLine($"Returning the type for {owner}"); // return typeof(int); //}; //category.Members.Add(instanceMember); //Grid.Categories.Add(category); }
public static void UpdateShownVariables(DataUiGrid grid, NamedObjectSave instance, IElement container) { grid.Categories.Clear(); List<MemberCategory> categories = new List<MemberCategory>(); var defaultCategory = new MemberCategory("Variables"); defaultCategory.FontSize = 14; categories.Add(defaultCategory); AssetTypeInfo ati = instance.GetAssetTypeInfo(); // not sure if this is needed: if (instance.TypedMembers.Count == 0) { instance.UpdateCustomProperties(); } CreateCategoriesAndVariables(instance, container, categories, ati); if (ati != null) { SortCategoriesAndMembers(ref categories, ati); } if (defaultCategory.Members.Count == 0) { categories.Remove(defaultCategory); } else if (categories.Count != 1) { defaultCategory.Name = "Other Variables"; } if (categories.Count != 0) { // "Name" should be the very first property: var nameCategory = CreateNameInstanceMember(instance); categories.Insert(0, nameCategory); } SetAlternatingColors(grid, categories); foreach(var category in categories) { grid.Categories.Add(category); } grid.Refresh(); }
public static void UpdateShownVariables(DataUiGrid grid, IElement element) { grid.Categories.Clear(); List<MemberCategory> categories = new List<MemberCategory>(); var defaultCategory = new MemberCategory("Variables"); defaultCategory.FontSize = 14; categories.Add(defaultCategory); CreateInstanceMembersForVariables(element, defaultCategory); foreach (var category in categories) { const byte brightness = 227; category.SetAlternatingColors(new SolidColorBrush(Color.FromRgb(brightness, brightness, brightness)), Brushes.Transparent); grid.Categories.Add(category); } grid.Refresh(); }
private MemberCategory GetOrInstantiateAndAddMemberCategory(string categoryName) { MemberCategory memberCategory = Categories.FirstOrDefault(item => item.Name == categoryName); if (memberCategory == null) { memberCategory = new MemberCategory(categoryName); Categories.Add(memberCategory); } return memberCategory; }
public bool TryGetInstanceMember(string name, out InstanceMember member, out MemberCategory category) { member = null; category = null; foreach (var possibleCategory in this.Categories) { if (member != null) { break; } foreach (var possibleMember in possibleCategory.Members) { if (possibleMember.Name == name) { member = possibleMember; category = possibleCategory; break; } } } return member != null; }
private void ApplyDisplayPropertyToInstanceMember(InstanceMemberDisplayProperties displayProperties, InstanceMember member, MemberCategory category) { if (displayProperties.IsHiddenDelegate != null && mMembersWithOptionalVisibility.ContainsKey(member) == false) { mMembersWithOptionalVisibility.Add(member, displayProperties.IsHiddenDelegate); } //if (displayProperties.GetEffectiveIsHidden(member.Instance)) // let's instead just use the hidden property - we will apply functions after if (displayProperties.IsHidden) { category.Members.Remove(member); } else { // Put an if-statement for debugging if (member.PreferredDisplayer != displayProperties.PreferredDisplayer) { member.PreferredDisplayer = displayProperties.PreferredDisplayer; } member.DisplayName = displayProperties.DisplayName; if (!string.IsNullOrEmpty(displayProperties.Category) && category.Name != displayProperties.Category) { category.Members.Remove(member); MemberCategory newCategory = GetOrInstantiateAndAddMemberCategory(displayProperties.Category); member.Category = newCategory; newCategory.Members.Add(member); } } }
private static void CreateInstanceMembersForVariables(IElement element, MemberCategory category) { foreach (CustomVariable variable in element.CustomVariables) { Type type = variable.GetRuntimeType(); if (type == null) { type = typeof(string); } string name = variable.Name; //object value = variable.DefaultValue; // todo - do something with converter var instanceMember = new DataGridItem(); instanceMember.CustomGetTypeEvent += (throwaway) => type; string displayName = StringFunctions.InsertSpacesInCamelCaseString(name); instanceMember.DisplayName = displayName; instanceMember.UnmodifiedVariableName = name; TypeConverter converter = variable.GetTypeConverter(element); instanceMember.TypeConverter = converter; instanceMember.CustomSetEvent += (intance, value) => { instanceMember.IsDefault = false; RefreshLogic.IgnoreNextRefresh(); element.GetCustomVariableRecursively(name).DefaultValue = value; GlueCommands.Self.GluxCommands.SaveGlux(); GlueCommands.Self.RefreshCommands.RefreshPropertyGrid(); GlueCommands.Self.GenerateCodeCommands.GenerateCurrentElementCode(); }; instanceMember.CustomGetEvent += (instance) => { return element.GetCustomVariableRecursively(name).DefaultValue; }; instanceMember.IsDefaultSet += (owner, args) => { element.GetCustomVariableRecursively(name).DefaultValue = null; GlueCommands.Self.GluxCommands.SaveGlux(); GlueCommands.Self.RefreshCommands.RefreshPropertyGrid(); GlueCommands.Self.GenerateCodeCommands.GenerateCurrentElementCode(); }; instanceMember.SetValueError = (newValue) => { if (newValue is string && string.IsNullOrEmpty(newValue as string)) { element.GetCustomVariableRecursively(name).DefaultValue = null; GlueCommands.Self.GluxCommands.SaveGlux(); GlueCommands.Self.RefreshCommands.RefreshPropertyGrid(); GlueCommands.Self.GenerateCodeCommands.GenerateCurrentElementCode(); } }; category.Members.Add(instanceMember); } }
private List<MemberCategory> GetCategories(ElementSave element, StateSave state, InstanceSave instance) { List<MemberCategory> categories = new List<MemberCategory>(); mLastElement = element; mLastState = state; mLastInstance = instance; var stateSave = SelectedState.Self.SelectedStateSave; if (stateSave != null) { categories.Clear(); var properties = mPropertyGridDisplayer.GetProperties(null); foreach (InstanceSavePropertyDescriptor propertyDescriptor in properties) { StateReferencingInstanceMember srim; if (instance != null) { srim = new StateReferencingInstanceMember(propertyDescriptor, stateSave, instance.Name + "." + propertyDescriptor.Name, instance, element); } else { srim = new StateReferencingInstanceMember(propertyDescriptor, stateSave, propertyDescriptor.Name, instance, element); } srim.SetToDefault += ResetVariableToDefault; string category = propertyDescriptor.Category.Trim(); var categoryToAddTo = categories.FirstOrDefault(item => item.Name == category); if (categoryToAddTo == null) { categoryToAddTo = new MemberCategory(category); categories.Add(categoryToAddTo); } categoryToAddTo.Members.Add(srim); } foreach (var category in categories) { var enumerable = category.Members.OrderBy(item => ((StateReferencingInstanceMember)item).SortValue).ToList(); category.Members.Clear(); foreach (var value in enumerable) { category.Members.Add(value); } } MemberCategory categoryToMove = categories.FirstOrDefault(item => item.Name == "Position"); if (categoryToMove != null) { categories.Remove(categoryToMove); categories.Insert(1, categoryToMove); } categoryToMove = categories.FirstOrDefault(item => item.Name == "Dimensions"); if (categoryToMove != null) { categories.Remove(categoryToMove); categories.Insert(2, categoryToMove); } UpdateColorCategory(categories); } return categories; }
private static MemberCategory GetOrCreateCategoryToAddTo(List<MemberCategory> categories, AssetTypeInfo ati, TypedMemberBase typedMember) { // By defaut make the last category get used (this is "Variables") var categoryToAddTo = categories.Last(); // If there is an AssetTypeInfo... if (ati != null) { // ... see if there is avariable definition for this variable... var foundVariableDefinition = ati.VariableDefinitions.FirstOrDefault(item => item.Name == typedMember.MemberName); if (foundVariableDefinition != null) { //... if so, see the category that it's a part of... string categoryName = foundVariableDefinition.Category; if (!string.IsNullOrEmpty(categoryName)) { //... if a category is defined, see if we have a MemberCategory that we've created for it... categoryToAddTo = categories.FirstOrDefault(item => item.Name == categoryName); if (categoryToAddTo == null) { //... if not, make one, and insert it before the last: categoryToAddTo = new MemberCategory(categoryName); categoryToAddTo.FontSize = 14; categories.Insert(categories.Count - 1, categoryToAddTo); } } } } return categoryToAddTo; }
private static MemberCategory CreateNameInstanceMember(NamedObjectSave instance) { var instanceMember = new DataGridItem(); instanceMember.DisplayName = "Name"; instanceMember.UnmodifiedVariableName = "Name"; // This won't actually be the old value after one change, but it's as good as we can get string oldValue = instance.InstanceName; instanceMember.CustomSetEvent += (throwaway, value) => { instanceMember.IsDefault = false; RefreshLogic.IgnoreNextRefresh(); instance.InstanceName = value as string; EditorObjects.IoC.Container.Get<SetVariableLogic>().ReactToPropertyChanged( "InstanceName", oldValue, "InstanceName", null); //GlueCommands.Self.GluxCommands.SetVariableOn( // instance, // "Name", // typeof(string), // value); GlueCommands.Self.GluxCommands.SaveGlux(); GlueCommands.Self.RefreshCommands.RefreshPropertyGrid(); GlueCommands.Self.GenerateCodeCommands.GenerateCurrentElementCode(); }; instanceMember.CustomGetEvent += (throwaway) => { return instance.InstanceName; }; instanceMember.CustomGetTypeEvent += (throwaway) => typeof(string); MemberCategory category = new MemberCategory(); category.Name = ""; category.HideHeader = true; category.Members.Add(instanceMember); return category; }
private static void AddSourceNameVariable(NamedObjectSave instance, List<MemberCategory> categories) { var categoryToAddTo = new MemberCategory("File"); categoryToAddTo.FontSize = 14; if (categories.Count > 0) { categories.Insert(0, categoryToAddTo); } else { categories.Add(categoryToAddTo); } var instanceMember = CreateInstanceMemberForSourceName(instance); categoryToAddTo.Members.Add(instanceMember); }
public static void UpdateShownVariables(DataUiGrid grid, NamedObjectSave instance, IElement container) { grid.Categories.Clear(); List<MemberCategory> categories = new List<MemberCategory>(); var defaultCategory = new MemberCategory("Variables"); defaultCategory.FontSize = 14; categories.Add(defaultCategory); AssetTypeInfo ati = instance.GetAssetTypeInfo(); // not sure if this is needed: if (instance.TypedMembers.Count == 0) { instance.UpdateCustomProperties(); } for (int i = 0; i < instance.TypedMembers.Count; i++) { TypedMemberBase typedMember = instance.TypedMembers[i]; InstanceMember instanceMember = CreateInstanceMember(instance, container, typedMember, ati); var categoryToAddTo = GetOrCreateCategoryToAddTo(categories, ati, typedMember); if (instanceMember != null) { categoryToAddTo.Members.Add(instanceMember); } } if (ati != null) { SortCategoriesAndMembers(ref categories, ati); } if (defaultCategory.Members.Count == 0) { categories.Remove(defaultCategory); } else if(categories.Count != 1) { defaultCategory.Name = "Other Variables"; } if (categories.Count != 0) { // "Name" shoul be the very first property: var nameCategory = CreateNameInstanceMember(instance); //categories.Add(nameCategory); categories.Insert(0, nameCategory); //categories.First().Members.Insert(0, nameInstanceMember); } // skip the first category in putting the alternating colors: for (int i = 0; i < categories.Count; i++) { var category = categories[i]; if (i != 0) { const byte brightness = 227; category.SetAlternatingColors(new SolidColorBrush(Color.FromRgb(brightness, brightness, brightness)), Brushes.Transparent); } grid.Categories.Add(category); } grid.Refresh(); }
private void RefreshEventsUi() { var selectedInstance = SelectedState.Self.SelectedInstance; var selectedElement = SelectedState.Self.SelectedElement; if (selectedElement == null) { mEventsDataGrid.Visibility = System.Windows.Visibility.Hidden; } else { //List<MemberCategory> categories = GetEventCategories(); mEventsDataGrid.Categories.Clear(); var eventsOnThisCategory = new MemberCategory(); eventsOnThisCategory.Name = "Events on this"; mEventsDataGrid.Categories.Add(eventsOnThisCategory); if (SelectedState.Self.SelectedInstance != null) { RefreshEventsForInstance(selectedInstance, selectedElement); } else if(selectedElement != null) { RefreshEventsForElement(selectedElement); } mEventsDataGrid.Visibility = System.Windows.Visibility.Visible; mEventsDataGrid.Refresh(); } }