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(); }
internal static void RefreshGrid(DataUiGrid grid) { if (RefreshesToSkip > 0) { RefreshesToSkip--; } else { grid.Refresh(); } foreach (var category in grid.Categories) { List<InstanceMember> membersToRefresh = new List<InstanceMember>(); foreach (DataGridItem instanceMember in category.Members) { // Not sure why we check if the instanceMember has non-0 count for options. // It could have had 0 before, but after a refresh, it may now have options. bool shouldRefresh = //instanceMember.CustomOptions.Count != 0 && instanceMember.TypeConverter != null; if (shouldRefresh) { instanceMember.RefreshOptions(); membersToRefresh.Add(instanceMember); } } bool shouldSort = membersToRefresh.Count != 0; foreach (var item in membersToRefresh) { var index = category.Members.IndexOf(item); category.Members.Remove(item); category.Members.Insert(index, item); } } }
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(); }
internal static void RefreshGrid(DataUiGrid grid) { if (RefreshesToSkip > 0) { RefreshesToSkip--; } else { grid.Refresh(); } foreach (var category in grid.Categories) { List<InstanceMember> membersToRefresh = new List<InstanceMember>(); foreach (DataGridItem instanceMember in category.Members) { bool shouldRefresh = instanceMember.CustomOptions.Count != 0 && instanceMember.TypeConverter != null; if (shouldRefresh) { instanceMember.RefreshOptions(); membersToRefresh.Add(instanceMember); } } bool shouldSort = membersToRefresh.Count != 0; foreach (var item in membersToRefresh) { var index = category.Members.IndexOf(item); category.Members.Remove(item); category.Members.Insert(index, item); } } }
private void RefreshDataGrid(ElementSave element, StateSave state, InstanceSave instance, bool force = false) { bool hasChangedObjectShowing = element != mLastElement || instance != mLastInstance || state != mLastState || force; if (hasChangedObjectShowing) { List <MemberCategory> categories = GetCategories(element, state, instance); Application.DoEvents(); SimultaneousCalls++; lock (lockObject) { if (SimultaneousCalls > 1) { SimultaneousCalls--; return; } records.Add("in"); mVariablesDataGrid.Instance = SelectedState.Self.SelectedStateSave; mVariablesDataGrid.Visibility = System.Windows.Visibility.Hidden; mVariablesDataGrid.Categories.Clear(); // There's a bug here where drag+dropping a new instance will create // duplicate UI members. I am going to deal with it now because it is foreach (var category in categories) { // We used to do this: // Application.DoEvents(); // That made things go faster, // but it made the "lock" not work, which could make duplicate UI show up. mVariablesDataGrid.Categories.Add(category); if (SimultaneousCalls > 1) { SimultaneousCalls--; // EARLY OUT!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! return; } } } SimultaneousCalls--; Application.DoEvents(); mVariablesDataGrid.Visibility = System.Windows.Visibility.Visible; } else { // let's see if any variables have been added/removed var categories = GetCategories(element, state, instance); foreach (var newCategory in categories) { // let's see if any variables have changed var oldCategory = mVariablesDataGrid.Categories.FirstOrDefault(item => item.Name == newCategory.Name); if (oldCategory != null && DoCategoriesDiffer(oldCategory.Members, newCategory.Members)) { int index = mVariablesDataGrid.Categories.IndexOf(oldCategory); mVariablesDataGrid.Categories.RemoveAt(index); mVariablesDataGrid.Categories.Insert(index, newCategory); } } } mVariablesDataGrid.Refresh(); }
/// <summary> /// Refreshes the property grid for the argument element, state, and instance. This will only refresh the grid /// if the element, state, or instance values have changed since the last time this function was called, or if /// force is true. /// </summary> /// <param name="element">The element to display. The properties on this element may not be displayed if the instance is not null.</param> /// <param name="state">The state to display.</param> /// <param name="instance">The instance to display. May be null.</param> /// <param name="force">Whether to refresh even if the element, state, and instance have not changed.</param> private void RefreshDataGrid(ElementSave element, StateSave state, StateSaveCategory category, InstanceSave instance, BehaviorSave behaviorSave, bool force = false) { bool hasChangedObjectShowing = element != mLastElement || instance != mLastInstance || state != mLastState || category != mLastCategory || force; var hasCustomState = SelectedState.Self.CustomCurrentStateSave != null; if (hasCustomState) { hasChangedObjectShowing = false; } mVariablesDataGrid.IsInnerGridEnabled = !hasCustomState; var categories = GetMemberCategories(element, state, category, instance); if (hasChangedObjectShowing) { // UI is fast, I dont' think we need this.... //Application.DoEvents(); SimultaneousCalls++; lock (lockObject) { if (SimultaneousCalls > 1) { SimultaneousCalls--; return; } records.Add("in"); mVariablesDataGrid.Instance = SelectedState.Self.SelectedStateSave; mVariablesDataGrid.Categories.Clear(); // There's a bug here where drag+dropping a new instance will create // duplicate UI members. I am going to deal with it now because it is foreach (var memberCategory in categories) { // We used to do this: // Application.DoEvents(); // That made things go faster, // but it made the "lock" not work, which could make duplicate UI show up. mVariablesDataGrid.Categories.Add(memberCategory); if (SimultaneousCalls > 1) { SimultaneousCalls--; // EARLY OUT!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! return; } } } SimultaneousCalls--; } else { foreach (var newCategory in categories) { // let's see if any variables have changed var oldCategory = mVariablesDataGrid.Categories.FirstOrDefault(item => item.Name == newCategory.Name); if (oldCategory != null && DoCategoriesDiffer(oldCategory.Members, newCategory.Members)) { int index = mVariablesDataGrid.Categories.IndexOf(oldCategory); mVariablesDataGrid.Categories.RemoveAt(index); mVariablesDataGrid.Categories.Insert(index, newCategory); } } } RefreshErrors(element); RefreshStateLabel(element, category, state); RefreshBehaviorUi(behaviorSave); mVariablesDataGrid.Refresh(); }
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(); }