2025-04-27 07:49:33 -04:00

241 lines
4.4 KiB
C#

namespace Microsoft.VSDesigner.WMI
{
using System;
using System.ComponentModel;
using System.Core;
using System.WinForms;
using Microsoft.Win32.Interop;
using System.Drawing;
using WbemScripting;
using System.Collections;
/// <summary>
/// These filters define which properties will be displayed
/// </summary>
public enum PropertyFilters
{
ShowAll = 0,
NoSystem = 0x1,
NoInherited = 0x10
}
/// <summary>
/// These filters define whether changing/adding/deleting properties is allowed
/// </summary>
public enum GridMode
{
ViewMode = 0,
EditMode = 0x1,
DesignMode = 0x10
}
public class WMIObjectGrid : DataGrid
{
private void InitializeComponent ()
{
}
private ISWbemObject wmiObj = null;
private PropertyFilters propFilters = PropertyFilters.ShowAll;
private GridMode gridMode = GridMode.ViewMode;
bool showOperators = false;
bool showOrigin = false;
bool showKeys = false;
public WMIObjectGrid()
{
try
{
}
catch (Exception exc)
{
MessageBox.Show(WMISys.GetString("WMISE_Exception", exc.Message, exc.StackTrace));
}
}
public WMIObjectGrid(ISWbemObject wmiObjIn,
PropertyFilters propFiltersIn,
GridMode gridModeIn,
bool showOperatorsIn,
bool showOriginIn,
bool showKeysIn)
{
try
{
if (wmiObjIn == null)
{
throw (new ArgumentNullException("wmiObjIn"));
}
wmiObj = wmiObjIn;
propFilters = propFiltersIn;
gridMode = gridModeIn;
showOperators = showOperatorsIn;
showOrigin = showOriginIn;
showKeys = showKeysIn;
Initialize();
}
catch (Exception exc)
{
MessageBox.Show(WMISys.GetString("WMISE_Exception", exc.Message, exc.StackTrace));
}
}
public ISWbemObject WMIObject
{
set
{
if (value == null)
{
throw (new ArgumentNullException("value"));
}
wmiObj = value;
ReInit();
}
get
{
return wmiObj;
}
}
public PropertyFilters CurrentPropertyFilters
{
set
{
propFilters = value;
ReInit();
}
get
{
return propFilters;
}
}
public GridMode CurrentGridMode
{
set
{
gridMode = value;
ReInit();
}
get
{
return gridMode;
}
}
public void AcceptChanges ()
{
if (DataSource != null)
{
DataGridCell curCell = this.CurrentCell;
((WMIObjectPropertyTable)DataSource).SetPropertyValue(curCell.RowNumber, this[curCell].ToString());
((WMIObjectPropertyTable)DataSource).AcceptChanges();
}
}
public bool CommitChanges (int flags)
{
try
{
if (DataSource == null ||
wmiObj == null)
{
return true;
}
((WMIObjectPropertyTable)DataSource).AcceptChanges();
wmiObj.Put_((int)flags, null);
return true;
}
catch (Exception exc)
{
MessageBox.Show(WMISys.GetString("WMISE_Exception", exc.Message, exc.StackTrace));
return false;
}
}
private void Initialize ()
{
try
{
if (wmiObj == null)
{
throw (new Exception(WMISys.GetString("WMISE_ObjGrid_InitFailed")));
}
if (DataSource != null)
{
DataSource = null;
}
DataSource = new WMIObjectPropertyTable(wmiObj,
propFilters,
gridMode,
showOperators,
showOrigin,
showKeys);
this.LostFocus += new EventHandler(this.OnLeftGrid);
this.Leave += new EventHandler(this.OnLeftGrid);
//this.add_CurrentCellChange(new EventHandler(this.OnCurrentCellChange));
/*
//make all columns same width
DataGridColumn[] cols = this.GridColumns.All;
for (int i = 0; i < cols.Length; i ++)
{
cols[i].Width = this.Width / cols.Length;
}
*/
}
catch (Exception exc)
{
MessageBox.Show(WMISys.GetString("WMISE_Exception", exc.Message, exc.StackTrace));
}
}
private void ReInit ()
{
try
{
//TODO: cleanup
DataSource = null;
Initialize();
}
catch (Exception exc)
{
MessageBox.Show(WMISys.GetString("WMISE_Exception", exc.Message, exc.StackTrace));
}
}
protected void OnLeftGrid(object sender, EventArgs e)
{
//AcceptChanges();
}
}
}