private static AccessibilityReplacementField[] InterpretReplacementFieldsValue(IList value) { if (value != null) { var retVal = value as AccessibilityReplacementField[]; if (retVal == null) { retVal = new AccessibilityReplacementField[value.Count]; value.CopyTo(retVal, 0); } return(retVal); } return(null); }
private string FormatReplacementFields( int row, int column, ref VirtualTreeItemInfo info, string formatString, AccessibilityReplacementField[] replacementFields, string[] imageDescriptions, string[] stateImageDescriptions) { var replacementCount = replacementFields.Length; var displayData = VirtualTreeDisplayData.Empty; var haveDisplayData = false; var fields = new string[replacementCount]; var branch = info.Branch; var locRow = info.Row; var locCol = info.Column; StringBuilder builder = null; AccessibilityReplacementField curField; var culture = CultureInfo.CurrentUICulture; for (var i = 0; i < replacementCount; ++i) { curField = replacementFields[i]; switch (curField) { case AccessibilityReplacementField.ColumnHeader: if (myHeaderBounds.HasHeaders) { fields[i] = myHeaderBounds.Headers[column].Text; } break; case AccessibilityReplacementField.GlobalRow0: fields[i] = row.ToString(culture); break; case AccessibilityReplacementField.GlobalRow1: fields[i] = (row + 1).ToString(culture); break; case AccessibilityReplacementField.GlobalRowText0: fields[i] = string.Format(culture, VirtualTreeStrings.GetString(VirtualTreeStrings.RowAccDesc), row); break; case AccessibilityReplacementField.GlobalRowText1: fields[i] = string.Format(culture, VirtualTreeStrings.GetString(VirtualTreeStrings.RowAccDesc), row + 1); break; case AccessibilityReplacementField.GlobalColumn0: fields[i] = column.ToString(culture); break; case AccessibilityReplacementField.GlobalColumn1: fields[i] = (column + 1).ToString(culture); break; case AccessibilityReplacementField.GlobalColumnText0: fields[i] = string.Format(culture, VirtualTreeStrings.GetString(VirtualTreeStrings.ColumnAccDesc), column); break; case AccessibilityReplacementField.GlobalColumnText1: fields[i] = string.Format(culture, VirtualTreeStrings.GetString(VirtualTreeStrings.RowAccDesc), column + 1); break; case AccessibilityReplacementField.GlobalRowAndColumnText0: fields[i] = string.Format(culture, VirtualTreeStrings.GetString(VirtualTreeStrings.RowColumnAccDesc), row, column); break; case AccessibilityReplacementField.GlobalRowAndColumnText1: fields[i] = string.Format( culture, VirtualTreeStrings.GetString(VirtualTreeStrings.RowColumnAccDesc), row + 1, column + 1); break; case AccessibilityReplacementField.LocalRow0: fields[i] = locRow.ToString(culture); break; case AccessibilityReplacementField.LocalRow1: fields[i] = (locRow + 1).ToString(culture); break; case AccessibilityReplacementField.LocalRowText0: fields[i] = string.Format(culture, VirtualTreeStrings.GetString(VirtualTreeStrings.RowAccDesc), locRow); break; case AccessibilityReplacementField.LocalRowText1: fields[i] = string.Format(culture, VirtualTreeStrings.GetString(VirtualTreeStrings.RowAccDesc), locRow + 1); break; case AccessibilityReplacementField.LocalRowOfTotal: fields[i] = string.Format( culture, VirtualTreeStrings.GetString(VirtualTreeStrings.RowOfTotalAccDesc), locRow + 1, branch.VisibleItemCount); break; case AccessibilityReplacementField.ChildRowCount: case AccessibilityReplacementField.ChildRowCountText: { var descendantCount = Tree.GetDescendantItemCount(row, column, false, false); if (curField == AccessibilityReplacementField.ChildRowCountText) { fields[i] = string.Format( culture, VirtualTreeStrings.GetString(VirtualTreeStrings.ChildRowNumberAccDesc), descendantCount); } else { fields[i] = descendantCount.ToString(culture); } break; } case AccessibilityReplacementField.ColumnCount: case AccessibilityReplacementField.ColumnCountText: { var columnCount = 1; if (myMctree != null) { var mcBranch = branch as IMultiColumnBranch; if (mcBranch != null) { // UNDONE: Column Permutation columnCount = Math.Min( myMctree.ColumnCount, (0 != (branch.Features & BranchFeatures.JaggedColumns)) ? mcBranch.ColumnCount : mcBranch.GetJaggedColumnCount(locRow)); } } if (curField == AccessibilityReplacementField.ColumnCountText) { fields[i] = string.Format( culture, VirtualTreeStrings.GetString(VirtualTreeStrings.ColumnNumberAccDesc), columnCount); } else { fields[i] = columnCount.ToString(culture); } break; } case AccessibilityReplacementField.DisplayText: fields[i] = branch.GetText(locRow, locCol); break; case AccessibilityReplacementField.ImageTipText: fields[i] = branch.GetTipText(locRow, locCol, ToolTipType.Icon); break; case AccessibilityReplacementField.PrimaryImageText: case AccessibilityReplacementField.PrimaryImageAndOverlaysText: case AccessibilityReplacementField.StateImageText: { if (!haveDisplayData) { displayData = branch.GetDisplayData( locRow, locCol, new VirtualTreeDisplayDataMasks( VirtualTreeDisplayMasks.Image | VirtualTreeDisplayMasks.ImageOverlays | VirtualTreeDisplayMasks.StateImage, 0)); } string[] descriptions; int imageIndex; int descriptionsLength; switch (curField) { case AccessibilityReplacementField.PrimaryImageAndOverlaysText: case AccessibilityReplacementField.PrimaryImageText: imageIndex = displayData.Image; if (imageIndex >= 0) { descriptions = (displayData.ImageList == null) ? myImageDescriptions : imageDescriptions; if (descriptions != null) { descriptionsLength = descriptions.Length; if (imageIndex < descriptionsLength) { fields[i] = descriptions[imageIndex]; } if (curField == AccessibilityReplacementField.PrimaryImageAndOverlaysText) { imageIndex = displayData.OverlayIndex; if (imageIndex != -1) { var separator = culture.TextInfo.ListSeparator; var overlayIndices = displayData.OverlayIndices; if (overlayIndices == null) { if (imageIndex < descriptionsLength) { fields[i] = string.Concat(fields[i], separator, descriptions[imageIndex]); } } else { if (builder == null) { builder = new StringBuilder(); } else { builder.Length = 0; } var startString = fields[i]; if (startString != null && startString.Length != 0) { builder.Append(fields[i]); } else { // Keep track of this value so we can rip the leading // separator later if the primary image had no text startString = null; } // Use the index as a list of bits into the indices array. // Do this typed if possible. It returns an IList to be CLS // compliant. Note that this differs from the drawing routines // for the images, which draw backwards, while this contatenates forwards. int[] indicesArray; IList<int> typedList; var overlayIndex = imageIndex; int indicesCount; int curIndex; int curBit; indicesCount = overlayIndices.Count; curBit = 1; if (null != (indicesArray = overlayIndices as int[])) { for (curIndex = 0; curIndex < indicesCount; ++curIndex) { if (0 != (curBit & overlayIndex)) { imageIndex = indicesArray[curIndex]; if (imageIndex < descriptionsLength) { builder.Append(separator); builder.Append(descriptions[imageIndex]); } } curBit <<= 1; } } else if (null != (typedList = overlayIndices as IList<int>)) { for (curIndex = 0; curIndex < indicesCount; ++curIndex) { if (0 != (curBit & overlayIndex)) { imageIndex = typedList[curIndex]; if (imageIndex < descriptionsLength) { builder.Append(separator); builder.Append(descriptions[imageIndex]); } } curBit <<= 1; } } else { for (curIndex = 0; curIndex < indicesCount; ++curIndex) { if (0 != (curBit & overlayIndex)) { imageIndex = (int)overlayIndices[curIndex]; if (imageIndex < descriptionsLength) { builder.Append(separator); builder.Append(descriptions[imageIndex]); } } curBit <<= 1; } } if (startString == null) { // Strip leading separator if we had nothing to start with var separatorLength = separator.Length; fields[i] = builder.ToString(separatorLength, builder.Length - separatorLength); } else { fields[i] = builder.ToString(); } } } } } } break; case AccessibilityReplacementField.StateImageText: if (displayData.StateImageIndex >= 0) { descriptions = (displayData.StateImageList == null) ? myStateImageDescriptions : stateImageDescriptions; if (descriptions != null && displayData.StateImageIndex < descriptions.Length) { fields[i] = descriptions[displayData.StateImageIndex]; } } break; } } break; } } return string.Format(culture, formatString, fields); }
/// <summary> /// Construct accessibility data with help, name, description, image text, and state image text settings /// </summary> /// <param name="helpFile">The help file for this item</param> /// <param name="helpContextId">The help context id for this item</param> /// <param name="nameFormat"> /// The string to use as the item's accessibility name. /// Specify null for default behavior. /// Used as a format string if nameReplacementFields is not null. /// </param> /// <param name="nameReplacementFields">Replacement fields for the name string</param> /// <param name="descriptionFormat"> /// The string to use as the item's accessibility description. /// Specify null for default behavior. /// Used as a format string if descriptionReplacementFields is not null. /// </param> /// <param name="descriptionReplacementFields">Replacement fields for the description string</param> /// <param name="imageDescriptions"> /// Description strings corresponding to the different elements in the image list. /// Should be specified if GetDisplayData for this item returns a custom image list and if the name or description /// replacement fields include PrimaryImageText or PrimaryImageAndOverlaysText /// </param> /// <param name="stateImageDescriptions"> /// Description strings corresponding to the different elements in the state image list. /// Should be specified if GetDisplayData for this item returns a custom state image list and if the name or description /// replacement fields include StateImageText. /// </param> public VirtualTreeAccessibilityData( string helpFile, int helpContextId, string nameFormat, AccessibilityReplacementField[] nameReplacementFields, string descriptionFormat, AccessibilityReplacementField[] descriptionReplacementFields, string[] imageDescriptions, string[] stateImageDescriptions) { myHelpFile = helpFile; myHelpContextId = helpContextId; myNameFormatString = nameFormat; myNameReplacementFields = nameReplacementFields; myDescriptionFormatString = descriptionFormat; myDescriptionReplacementFields = descriptionReplacementFields; myImageDescriptions = imageDescriptions; myStateImageDescriptions = stateImageDescriptions; myStateImageAccessibleStates = null; }
private static AccessibilityReplacementField[] InterpretReplacementFieldsValue(IList value) { if (value != null) { var retVal = value as AccessibilityReplacementField[]; if (retVal == null) { retVal = new AccessibilityReplacementField[value.Count]; value.CopyTo(retVal, 0); } return retVal; } return null; }
/// <summary> /// Construct accessibility data with name settings /// </summary> /// <param name="nameFormat"> /// The string to use as the item's accessibility name. /// Specify null for default behavior. /// Used as a format string if nameReplacementFields is not null. /// </param> /// <param name="nameReplacementFields">Replacement fields for the name string</param> public VirtualTreeAccessibilityData(string nameFormat, AccessibilityReplacementField[] nameReplacementFields) { myHelpFile = null; myHelpContextId = 0; myNameFormatString = nameFormat; myNameReplacementFields = nameReplacementFields; myDescriptionFormatString = null; myDescriptionReplacementFields = null; myImageDescriptions = null; myStateImageDescriptions = null; myStateImageAccessibleStates = null; }