internal TableControl(TableControlBody tcb, ViewDefinition viewDefinition) : this() { this.OutOfBand = viewDefinition.outOfBand; this.GroupBy = PSControlGroupBy.Get(viewDefinition.groupBy); this.AutoSize = tcb.autosize.HasValue && tcb.autosize.Value; this.HideTableHeaders = tcb.header.hideHeader; TableControlRow row = new TableControlRow(tcb.defaultDefinition); Rows.Add(row); foreach (TableRowDefinition rd in tcb.optionalDefinitionList) { row = new TableControlRow(rd); Rows.Add(row); } foreach (TableColumnHeaderDefinition hd in tcb.header.columnHeaderDefinitionList) { TableControlColumnHeader header = new TableControlColumnHeader(hd); Headers.Add(header); } }
internal TableControl(TableControlBody tcb) { this._headers = new List <TableControlColumnHeader>(); this._rows = new List <TableControlRow>(); TableControlRow item = new TableControlRow(tcb.defaultDefinition); this._rows.Add(item); foreach (TableRowDefinition definition in tcb.optionalDefinitionList) { item = new TableControlRow(definition); this._rows.Add(item); } foreach (TableColumnHeaderDefinition definition2 in tcb.header.columnHeaderDefinitionList) { TableControlColumnHeader header = new TableControlColumnHeader(definition2); this._headers.Add(header); } }
// Database defined types. internal void AddColumnsAndItem(PSObject liveObject, TableView tableView, TableControlBody tableBody) { _headerInfo = tableView.GenerateHeaderInfo(liveObject, tableBody, _parentCmdlet); AddColumnsAndItemEnd(liveObject); }
internal HeaderInfo GenerateHeaderInfo(PSObject input, TableControlBody tableBody, OutGridViewCommand parentCmdlet) { HeaderInfo headerInfo = new HeaderInfo(); // This verification is needed because the database returns "LastWriteTime" value for file system objects // as strings and it is used to detect this situation and use the actual field value. bool fileSystemObject = typeof(FileSystemInfo).IsInstanceOfType(input.BaseObject); if (tableBody != null) // If the tableBody is null, the TableControlBody info was not put into the database. { // Generate HeaderInfo from the type information database. List <TableRowItemDefinition> activeRowItemDefinitionList = GetActiveTableRowDefinition(tableBody, input); int col = 0; foreach (TableRowItemDefinition rowItem in activeRowItemDefinitionList) { ColumnInfo columnInfo = null; string displayName = null; TableColumnHeaderDefinition colHeader = null; // Retrieve a matching TableColumnHeaderDefinition if (col < tableBody.header.columnHeaderDefinitionList.Count) { colHeader = tableBody.header.columnHeaderDefinitionList[col]; } if (colHeader != null && colHeader.label != null) { displayName = _typeInfoDatabase.displayResourceManagerCache.GetTextTokenString(colHeader.label); } FormatToken token = null; if (rowItem.formatTokenList.Count > 0) { token = rowItem.formatTokenList[0]; } if (token != null) { FieldPropertyToken fpt = token as FieldPropertyToken; if (fpt != null) { if (displayName == null) { // Database does not provide a label(DisplayName) for the current property, use the expression value instead. displayName = fpt.expression.expressionValue; } if (fpt.expression.isScriptBlock) { PSPropertyExpression ex = _expressionFactory.CreateFromExpressionToken(fpt.expression); // Using the displayName as a propertyName for a stale PSObject. const string LastWriteTimePropertyName = "LastWriteTime"; // For FileSystem objects "LastWriteTime" property value should be used although the database indicates that a script should be executed to get the value. if (fileSystemObject && displayName.Equals(LastWriteTimePropertyName, StringComparison.OrdinalIgnoreCase)) { columnInfo = new OriginalColumnInfo(displayName, displayName, LastWriteTimePropertyName, parentCmdlet); } else { columnInfo = new ExpressionColumnInfo(displayName, displayName, ex); } } else { columnInfo = new OriginalColumnInfo(fpt.expression.expressionValue, displayName, fpt.expression.expressionValue, parentCmdlet); } } else { TextToken tt = token as TextToken; if (tt != null) { displayName = _typeInfoDatabase.displayResourceManagerCache.GetTextTokenString(tt); columnInfo = new OriginalColumnInfo(tt.text, displayName, tt.text, parentCmdlet); } } } if (columnInfo != null) { headerInfo.AddColumn(columnInfo); } col++; } } return(headerInfo); }
private List <TableRowItemDefinition> GetActiveTableRowDefinition(TableControlBody tableBody, PSObject so) { if (tableBody.optionalDefinitionList.Count == 0) { // we do not have any override, use default return(tableBody.defaultDefinition.rowItemDefinitionList); } // see if we have an override that matches TableRowDefinition matchingRowDefinition = null; var typeNames = so.InternalTypeNames; TypeMatch match = new TypeMatch(_expressionFactory, _typeInfoDatabase, typeNames); foreach (TableRowDefinition x in tableBody.optionalDefinitionList) { if (match.PerfectMatch(new TypeMatchItem(x, x.appliesTo))) { matchingRowDefinition = x; break; } } if (matchingRowDefinition == null) { matchingRowDefinition = match.BestMatch as TableRowDefinition; } if (matchingRowDefinition == null) { Collection <string> typesWithoutPrefix = Deserializer.MaskDeserializationPrefix(typeNames); if (typesWithoutPrefix != null) { match = new TypeMatch(_expressionFactory, _typeInfoDatabase, typesWithoutPrefix); foreach (TableRowDefinition x in tableBody.optionalDefinitionList) { if (match.PerfectMatch(new TypeMatchItem(x, x.appliesTo))) { matchingRowDefinition = x; break; } } if (matchingRowDefinition == null) { matchingRowDefinition = match.BestMatch as TableRowDefinition; } } } if (matchingRowDefinition == null) { // no matching override, use default return(tableBody.defaultDefinition.rowItemDefinitionList); } // we have an override, we need to compute the merge of the active cells List <TableRowItemDefinition> activeRowItemDefinitionList = new List <TableRowItemDefinition>(); int col = 0; foreach (TableRowItemDefinition rowItem in matchingRowDefinition.rowItemDefinitionList) { // Check if the row is an override or not if (rowItem.formatTokenList.Count == 0) { // It's a place holder, use the default activeRowItemDefinitionList.Add(tableBody.defaultDefinition.rowItemDefinitionList[col]); } else { // Use the override activeRowItemDefinitionList.Add(rowItem); } col++; } return(activeRowItemDefinitionList); }
internal HeaderInfo GenerateHeaderInfo(PSObject input, TableControlBody tableBody, OutGridViewCommand parentCmdlet) { HeaderInfo info = new HeaderInfo(); bool flag = typeof(FileSystemInfo).IsInstanceOfType(input.BaseObject); if (tableBody != null) { List <TableRowItemDefinition> activeTableRowDefinition = this.GetActiveTableRowDefinition(tableBody, input); int num = 0; foreach (TableRowItemDefinition definition in activeTableRowDefinition) { Microsoft.PowerShell.Commands.ColumnInfo col = null; string staleObjectPropertyName = null; TableColumnHeaderDefinition definition2 = null; if (tableBody.header.columnHeaderDefinitionList.Count >= (num - 1)) { definition2 = tableBody.header.columnHeaderDefinitionList[num]; } if ((definition2 != null) && (definition2.label != null)) { staleObjectPropertyName = this.typeInfoDatabase.displayResourceManagerCache.GetTextTokenString(definition2.label); } FormatToken token = null; if (definition.formatTokenList.Count > 0) { token = definition.formatTokenList[0]; } if (token != null) { FieldPropertyToken token2 = token as FieldPropertyToken; if (token2 != null) { if (staleObjectPropertyName == null) { staleObjectPropertyName = token2.expression.expressionValue; } if (token2.expression.isScriptBlock) { MshExpression expression = this.expressionFactory.CreateFromExpressionToken(token2.expression); if (flag && staleObjectPropertyName.Equals("LastWriteTime", StringComparison.OrdinalIgnoreCase)) { col = new OriginalColumnInfo(staleObjectPropertyName, staleObjectPropertyName, "LastWriteTime", parentCmdlet); } else { col = new ExpressionColumnInfo(staleObjectPropertyName, staleObjectPropertyName, expression); } } else { col = new OriginalColumnInfo(token2.expression.expressionValue, staleObjectPropertyName, token2.expression.expressionValue, parentCmdlet); } } else { TextToken tt = token as TextToken; if (tt != null) { staleObjectPropertyName = this.typeInfoDatabase.displayResourceManagerCache.GetTextTokenString(tt); col = new OriginalColumnInfo(tt.text, staleObjectPropertyName, tt.text, parentCmdlet); } } } if (col != null) { info.AddColumn(col); } num++; } } return(info); }
private List <TableRowItemDefinition> GetActiveTableRowDefinition(TableControlBody tableBody, PSObject so) { if (tableBody.optionalDefinitionList.Count == 0) { return(tableBody.defaultDefinition.rowItemDefinitionList); } TableRowDefinition bestMatch = null; ConsolidatedString internalTypeNames = so.InternalTypeNames; TypeMatch match = new TypeMatch(this.expressionFactory, this.typeInfoDatabase, internalTypeNames); foreach (TableRowDefinition definition2 in tableBody.optionalDefinitionList) { if (match.PerfectMatch(new TypeMatchItem(definition2, definition2.appliesTo))) { bestMatch = definition2; break; } } if (bestMatch == null) { bestMatch = match.BestMatch as TableRowDefinition; } if (bestMatch == null) { Collection <string> typeNames = Deserializer.MaskDeserializationPrefix(internalTypeNames); if (typeNames != null) { match = new TypeMatch(this.expressionFactory, this.typeInfoDatabase, typeNames); foreach (TableRowDefinition definition3 in tableBody.optionalDefinitionList) { if (match.PerfectMatch(new TypeMatchItem(definition3, definition3.appliesTo))) { bestMatch = definition3; break; } } if (bestMatch == null) { bestMatch = match.BestMatch as TableRowDefinition; } } } if (bestMatch == null) { return(tableBody.defaultDefinition.rowItemDefinitionList); } List <TableRowItemDefinition> list = new List <TableRowItemDefinition>(); int num = 0; foreach (TableRowItemDefinition definition4 in bestMatch.rowItemDefinitionList) { if (definition4.formatTokenList.Count == 0) { list.Add(tableBody.defaultDefinition.rowItemDefinitionList[num]); } else { list.Add(definition4); } num++; } return(list); }