public GroupingTypesBranch(ElementGrouping grouping) { myContextGrouping = grouping; Store store = grouping.Store; ReadOnlyCollection <DomainClassInfo> groupTypes = store.DomainDataDirectory.GetDomainClass(ElementGroupingType.DomainClassId).AllDescendants; int groupTypeCount = groupTypes.Count; if (groupTypeCount != 0) { int concreteGroupTypeCount = 0; for (int i = 0; i < groupTypeCount; ++i) { if (!groupTypes[i].ImplementationClass.IsAbstract) { ++concreteGroupTypeCount; } } if (concreteGroupTypeCount != 0) { LinkedElementCollection <ElementGroupingType> currentTypeInstances = grouping.GroupingTypeCollection; int currentTypeInstanceCount = currentTypeInstances.Count; GroupingTypeData[] typeData = new GroupingTypeData[concreteGroupTypeCount]; int nextTypeData = 0; for (int i = 0; i < groupTypeCount; ++i) { DomainClassInfo groupType = groupTypes[i]; if (!groupType.ImplementationClass.IsAbstract) { ElementGroupingType matchingTypeInstance = null; for (int j = 0; j < currentTypeInstanceCount; ++j) { ElementGroupingType testInstance = currentTypeInstances[j]; if (testInstance.GetDomainClass() == groupType) { matchingTypeInstance = testInstance; } } typeData[nextTypeData] = new GroupingTypeData(matchingTypeInstance, groupType); ++nextTypeData; } } if (concreteGroupTypeCount > 1) { Array.Sort <GroupingTypeData>( typeData, delegate(GroupingTypeData left, GroupingTypeData right) { return(string.Compare(left.DisplayName, right.DisplayName, StringComparison.CurrentCultureIgnoreCase)); }); } myGroupTypeData = typeData; myGlyphProvider = SurveyGroupingTypeGlyph.GetStoreInstance(store); } } }
StateRefreshChanges IBranch.ToggleState(int row, int column) { GroupingTypeData typeData = myGroupTypeData[row]; if (0 != (typeData.SelectionState & GroupingTypeSelectionState.CurrentlySelected)) { typeData.SelectionState &= ~GroupingTypeSelectionState.CurrentlySelected; } else { typeData.SelectionState |= GroupingTypeSelectionState.CurrentlySelected; } myGroupTypeData[row] = typeData; return(StateRefreshChanges.Current); }
/// <summary> /// Apply changes based on the selection state /// </summary> public void ApplyChanges() { GroupingTypeData[] types = myGroupTypeData; if (types != null) { int typeCount = types.Length; bool hasChanges = false; for (int i = 0; i < typeCount; ++i) { GroupingTypeSelectionState selectionState = types[i].SelectionState; if ((0 == (selectionState & GroupingTypeSelectionState.InitiallySelected)) != (0 == (selectionState & GroupingTypeSelectionState.CurrentlySelected))) { hasChanges = true; break; } } if (hasChanges) { ElementGrouping grouping = myContextGrouping; Store store = grouping.Store; using (Transaction t = store.TransactionManager.BeginTransaction(ResourceStrings.ElementGroupingTypesPropertyDescriptorTransactionName)) { for (int i = 0; i < typeCount; ++i) { GroupingTypeData type = types[i]; GroupingTypeSelectionState selectionState = type.SelectionState; bool typeAdded; if ((typeAdded = (0 == (selectionState & GroupingTypeSelectionState.InitiallySelected))) != (0 == (selectionState & GroupingTypeSelectionState.CurrentlySelected))) { if (typeAdded) { ((ElementGroupingType)store.ElementFactory.CreateElement(type.GroupingTypeClassInfo)).Grouping = grouping; } else { type.GroupingTypeInstance.Delete(); } } } t.Commit(); } } } }
VirtualTreeDisplayData IBranch.GetDisplayData(int row, int column, VirtualTreeDisplayDataMasks requiredData) { SurveyGroupingTypeGlyph glyphProvider = myGlyphProvider; GroupingTypeData typeData = myGroupTypeData[row]; VirtualTreeDisplayData retVal = VirtualTreeDisplayData.Empty; if (0 != (typeData.SelectionState & GroupingTypeSelectionState.CurrentlySelected)) { retVal.Bold = true; retVal.StateImageIndex = (short)StandardCheckBoxImage.CheckedFlat; } else { retVal.StateImageIndex = (short)StandardCheckBoxImage.UncheckedFlat; } retVal.ImageList = glyphProvider.GroupingTypeImages; retVal.SelectedImage = retVal.Image = (short)glyphProvider.GetGroupingTypeIndex(typeData.GroupingTypeClassInfo); return(retVal); }