Microsoft.PowerShell.Commands.Utility/Microsoft.PowerShell.Commands/OutWindowProxy.cs
Decompiler Source FileMicrosoft.PowerShell.Commands.Utility.OutWindowProxyDecompiled Source
Interpretation
- Decompiled source file. Use method/event registrations and call-site extraction to connect back to DialogMethod, QBMEvent, and API layers.
Relations
- CallMethod: AddColumns at line 55
- CallMethod: AddItem at line 91
- CallMethod: AddItem at line 101
- CallMethod: AddItem at line 121
- CallMethod: AddItem at line 132
- CallMethod: StartWindow at line 140
- CallMethod: CloseWindow at line 169
- CallMethod: GetWindowClosedStatus at line 176
- CallMethod: GetLastException at line 181
- CallMethod: SelectedItems at line 186
Typed Edges
- No typed edges extracted for this source.
References
- No direct source references extracted.
Referenced By
- No direct source references extracted.
Complete Source
1using System;2using System.Collections.Generic;3using System.IO;4using System.Management.Automation;5using System.Management.Automation.Internal;6using System.Reflection;7using System.Threading;8using Microsoft.PowerShell.Commands.Internal.Format;910namespace Microsoft.PowerShell.Commands;1112internal class OutWindowProxy : IDisposable13{14 private const string OutGridViewWindowClassName = "Microsoft.Management.UI.Internal.OutGridViewWindow";1516 private const string OriginalTypePropertyName = "OriginalType";1718 internal const string OriginalObjectPropertyName = "OutGridViewOriginalObject";1920 private const string ToStringValuePropertyName = "ToStringValue";2122 private const string IndexPropertyName = "IndexValue";2324 private int _index;2526 private HeaderInfo _headerInfo;2728 private bool _isWindowStarted;2930 private readonly string _title;3132 private readonly OutputModeOption _outputMode;3334 private AutoResetEvent _closedEvent;3536 private readonly OutGridViewCommand _parentCmdlet;3738 private readonly GraphicalHostReflectionWrapper _graphicalHostReflectionWrapper;3940 internal OutWindowProxy(string title, OutputModeOption outPutMode, OutGridViewCommand parentCmdlet)41 {42 _title = title;43 _outputMode = outPutMode;44 _parentCmdlet = parentCmdlet;45 _graphicalHostReflectionWrapper = GraphicalHostReflectionWrapper.GetGraphicalHostReflectionWrapper(parentCmdlet, "Microsoft.Management.UI.Internal.OutGridViewWindow");46 }4748 internal void AddColumns(string[] propertyNames, string[] displayNames, Type[] types)49 {50 ArgumentNullException.ThrowIfNull(propertyNames, "propertyNames");51 ArgumentNullException.ThrowIfNull(displayNames, "displayNames");52 ArgumentNullException.ThrowIfNull(types, "types");53 try54 {55 _graphicalHostReflectionWrapper.CallMethod("AddColumns", propertyNames, displayNames, types);56 }57 catch (TargetInvocationException ex)58 {59 if (ex.InnerException is FileNotFoundException ex2 && ex2.FileName.Contains("System.Core"))60 {61 _parentCmdlet.ThrowTerminatingError(new ErrorRecord(new InvalidOperationException(StringUtil.Format(FormatAndOut_out_gridview.RestartPowerShell, _parentCmdlet.CommandInfo.Name), ex.InnerException), "ErrorLoadingAssembly", ErrorCategory.ObjectNotFound, null));62 return;63 }64 throw;65 }66 }6768 internal void AddColumnsAndItem(PSObject liveObject, TableView tableView)69 {70 _headerInfo = tableView.GenerateHeaderInfo(liveObject, _parentCmdlet);71 AddColumnsAndItemEnd(liveObject);72 }7374 internal void AddColumnsAndItem(PSObject liveObject, TableView tableView, TableControlBody tableBody)75 {76 _headerInfo = tableView.GenerateHeaderInfo(liveObject, tableBody, _parentCmdlet);77 AddColumnsAndItemEnd(liveObject);78 }7980 internal void AddColumnsAndItem(PSObject liveObject)81 {82 _headerInfo = new HeaderInfo();83 _headerInfo.AddColumn(new ScalarTypeColumnInfo(liveObject.BaseObject.GetType()));84 AddColumnsAndItemEnd(liveObject);85 }8687 private void AddColumnsAndItemEnd(PSObject liveObject)88 {89 PSObject pSObject = _headerInfo.AddColumnsToWindow(this, liveObject);90 AddExtraProperties(pSObject, liveObject);91 _graphicalHostReflectionWrapper.CallMethod("AddItem", pSObject);92 }9394 internal void AddHeteroViewColumnsAndItem(PSObject liveObject)95 {96 _headerInfo = new HeaderInfo();97 _headerInfo.AddColumn(new IndexColumnInfo("IndexValue", StringUtil.Format(FormatAndOut_out_gridview.IndexColumnName), _index));98 _headerInfo.AddColumn(new ToStringColumnInfo("ToStringValue", StringUtil.Format(FormatAndOut_out_gridview.ValueColumnName), _parentCmdlet));99 _headerInfo.AddColumn(new TypeNameColumnInfo("OriginalType", StringUtil.Format(FormatAndOut_out_gridview.TypeColumnName)));100 PSObject pSObject = _headerInfo.AddColumnsToWindow(this, liveObject);101 _graphicalHostReflectionWrapper.CallMethod("AddItem", pSObject);102 }103104 private void AddExtraProperties(PSObject staleObject, PSObject liveObject)105 {106 staleObject.Properties.Add(new PSNoteProperty("IndexValue", _index++));107 staleObject.Properties.Add(new PSNoteProperty("OriginalType", liveObject.BaseObject.GetType().FullName));108 staleObject.Properties.Add(new PSNoteProperty("OutGridViewOriginalObject", liveObject));109 staleObject.Properties.Add(new PSNoteProperty("ToStringValue", _parentCmdlet.ConvertToString(liveObject)));110 }111112 internal void AddItem(PSObject livePSObject)113 {114 ArgumentNullException.ThrowIfNull(livePSObject, "livePSObject");115 if (_headerInfo == null)116 {117 throw new InvalidOperationException();118 }119 PSObject pSObject = _headerInfo.CreateStalePSObject(livePSObject);120 AddExtraProperties(pSObject, livePSObject);121 _graphicalHostReflectionWrapper.CallMethod("AddItem", pSObject);122 }123124 internal void AddHeteroViewItem(PSObject livePSObject)125 {126 ArgumentNullException.ThrowIfNull(livePSObject, "livePSObject");127 if (_headerInfo == null)128 {129 throw new InvalidOperationException();130 }131 PSObject pSObject = _headerInfo.CreateStalePSObject(livePSObject);132 _graphicalHostReflectionWrapper.CallMethod("AddItem", pSObject);133 }134135 internal void ShowWindow()136 {137 if (!_isWindowStarted)138 {139 _closedEvent = new AutoResetEvent(initialState: false);140 _graphicalHostReflectionWrapper.CallMethod("StartWindow", _title, _outputMode.ToString(), _closedEvent);141 _isWindowStarted = true;142 }143 }144145 internal void BlockUntilClosed()146 {147 _closedEvent?.WaitOne();148 }149150 private void Dispose(bool isDisposing)151 {152 if (isDisposing && _closedEvent != null)153 {154 _closedEvent.Dispose();155 _closedEvent = null;156 }157 }158159 public void Dispose()160 {161 Dispose(isDisposing: true);162 GC.SuppressFinalize(this);163 }164165 internal void CloseWindow()166 {167 if (_isWindowStarted)168 {169 _graphicalHostReflectionWrapper.CallMethod("CloseWindow");170 _isWindowStarted = false;171 }172 }173174 internal bool IsWindowClosed()175 {176 return (bool)_graphicalHostReflectionWrapper.CallMethod("GetWindowClosedStatus");177 }178179 internal Exception GetLastException()180 {181 return (Exception)_graphicalHostReflectionWrapper.CallMethod("GetLastException");182 }183184 internal List<PSObject> GetSelectedItems()185 {186 return (List<PSObject>)_graphicalHostReflectionWrapper.CallMethod("SelectedItems");187 }188}189