WindowsXP/admin/wmi/wbem/sdk/vs7/vside/servexpl/beta1/selectwmiclasstreedialog.cs
2025-04-27 07:49:33 -04:00

1346 lines
35 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;
using System.Resources;
/// <summary>
/// Filters define which classes will be displayed by the class selector UI
/// </summary>
public enum SchemaFilters
{
ShowAll = 0,
NoAbstract = 0x1,
NoSystem = 0x10,
NoEvent = 0x100,
NoData = 0x1000,
NoAssoc = 0x10000
}
public enum ClassFilters
{
ConcreteData = 0,
ExtrinsicEvents = 0x1,
All = 0x10
}
public class SelectWMIClassTreeDialog : Form
{
private void InitializeComponent ()
{
}
private enum ClassListControls
{
ClassTreeView = 0,
SelectedClassList = 1
}
private ClassFilters currentFilters = ClassFilters.ConcreteData;
/*
SchemaFilters.NoAbstract |
SchemaFilters.NoSystem |
SchemaFilters.NoEvent |
SchemaFilters.NoAssoc ;*/
private String machineName = String.Empty;
private ResourceManager rm = null;
private ISWbemLocator wbemLocator = null;
private ISWbemServices wbemServices = null;
private Button cancelBtn = new Button();
private Button okBtn = new Button();
//private ComboBox nsPicker = new ComboBox();
private TreeView classList = new TreeView();
private ListBox selectedClassList = new ListBox();
private Button btnAdd = new Button();
private Button btnRemove = new Button();
private CheckBox chkShowAbstract = new CheckBox();
private CheckBox chkShowSystem = new CheckBox();
private CheckBox chkShowEvent = new CheckBox();
private CheckBox chkShowData = new CheckBox();
private Label labelSearch = new Label();
private TextBox descr = new TextBox ();
private Label labelSelected = new Label();
private TextBox editSearch = new TextBox();
private Button btnGo = new Button();
private TreeNode nodeLastFindNS = null;
private String strLastFindClass = "";
private ArrayList listSearchHits = new ArrayList();
private Color defaultForeColor = Color.Black;
private Color defaultBackColor = Color.White;
private ImageList imgList = new ImageList();
private /*CaseInsensitiveHashtable*/ StringTable selectedClasses = null;
/*
//THIS IS THE STRIP:
private enum schema_icons {
SCHEMA_CLASS = 0,
SCHEMA_CLASS_ABSTRACT1,
SCHEMA_CLASS_ABSTRACT2,
SCHEMA_CLASS_1,
SCHEMA_4,
SCHEMA_5,
SCHEMA_6,
SCHEMA_7,
SCHEMA_ASSOC,
SCHEMA_ASSOC_ABSTRACT1,
SCHEMA_ASSOC_ABSTRACT2,
SCHEMA_ASSOC_1,
SCHEMA_ASSOC_2,
SCHEMA_ASSOC_3,
SCHEMA_14,
SCHEMA_15,
SCHEMA_NS_CLOSED,
SCHEMA_NS_OPEN
};
*/
private enum schema_icons
{
SCHEMA_NS_CLOSED =0,
SCHEMA_NS_OPEN,
SCHEMA_CLASS,
SCHEMA_ASSOC,
SCHEMA_CLASS_ABSTRACT1,
SCHEMA_CLASS_ABSTRACT2,
SCHEMA_ASSOC_ABSTRACT1,
SCHEMA_ASSOC_ABSTRACT2
};
public ClassFilters CurrentFilters
{
get {
return currentFilters;
}
}
public StringTable SelectedClasses
{
get {
return selectedClasses;
}
set {
if (selectedClasses != value)
{
String [] arSel = value.ToArray();
selectedClassList.Items.Clear();
for (int i = 0; i < arSel.Length; i++)
{
selectedClassList.Items.Add (arSel[i]);
}
}
}
}
public String CurrentServer
{
get {
return machineName;
}
}
public SelectWMIClassTreeDialog(String server,
ClassFilters filters,
StringTable selClasses
/*TODO: credentials */
)
{
try
{
try
{
rm = new ResourceManager( "Microsoft.VSDesigner.WMI.Res", // Name of the resource.
".", // Use current directory.
null);
}
catch (Exception)
{
//do nothing, will use static RM
}
currentFilters = filters;
machineName = server;
selectedClasses = selClasses;
this.Text = WMISys.GetString("WMISE_ClassSelectorLbl");
this.AcceptButton = okBtn;
this.AutoScaleBaseSize = (Size) new Point(5, 13);
this.BorderStyle = FormBorderStyle.FixedSingle;
this.CancelButton = cancelBtn;
int dlgWidth = 527;
int dlgHeight = 480;
this.ClientSize = (Size) new Point(dlgWidth, dlgHeight);
//this.add_KeyUp(new KeyEventHandler(this.OnKeyUp));
this.ShowInTaskbar = false;
labelSearch.Location = new Point(16, 16);
labelSearch.Size = (Size) new Point(200, 13);
labelSearch.TabStop = false;
labelSearch.Text = WMISys.GetString("WMISE_ClassSelectorLblSearch");
editSearch.Location = new Point(16, 33);
editSearch.Size = (Size) new Point(200, 20);
editSearch.TabStop = true;
editSearch.TextChanged += new EventHandler(this.SearchPattern_changed);
editSearch.AcceptsReturn = true; //???
editSearch.TabIndex = 0;
btnGo.Location = new Point(226, 33);
btnGo.TabStop = true;
btnGo.Text = WMISys.GetString("WMISE_ClassSelectorBtnSearch");
btnGo.Click += new EventHandler(this.Search_click);
classList.Location = new Point(16, 63);
classList.Size = (Size) new Point(200, 270);
classList.ShowPlusMinus = true;
classList.ShowLines = true;
classList.BeforeExpand += (new TreeViewCancelEventHandler(this.BeforeNodeExpand));
classList.DoubleClick += (new EventHandler(this.Add_click));
classList.BeforeCollapse += (new TreeViewCancelEventHandler(this.BeforeNodeCollapse));
classList.AfterSelect += (new TreeViewEventHandler (this.AfterNodeSelect));
classList.KeyUp += (new KeyEventHandler(this.OnTreeKeyUp));
classList.HideSelection = false;
classList.FullRowSelect = true;
//Image symbols = Image.FromFile("symbols.bmp");
//imgList.Images.AddStrip(symbols);
imgList.TransparentColor = defaultBackColor; //didn't help!!!!!!!
if (rm != null)
{
imgList.Images.Add ((Image)rm.GetObject("Microsoft.VSDesigner.WMI.closed_fol.bmp"), defaultBackColor);
imgList.Images.Add ((Image)rm.GetObject("Microsoft.VSDesigner.WMI.open_fol.bmp"), defaultBackColor);
imgList.Images.Add ((Image)rm.GetObject("Microsoft.VSDesigner.WMI.class.bmp"), defaultBackColor);
imgList.Images.Add ((Image)rm.GetObject("Microsoft.VSDesigner.WMI.classassoc.bmp"), defaultBackColor);
imgList.Images.Add ((Image)rm.GetObject("Microsoft.VSDesigner.WMI.abstr1.bmp"), defaultBackColor);
imgList.Images.Add ((Image)rm.GetObject("Microsoft.VSDesigner.WMI.abstr2.bmp"), defaultBackColor);
imgList.Images.Add ((Image)rm.GetObject("Microsoft.VSDesigner.WMI.abstr_assoc1.bmp"), defaultBackColor); //SCHEMA_ASSOC_ABSTRACT1
imgList.Images.Add ((Image)rm.GetObject("Microsoft.VSDesigner.WMI.abstr_assoc2.bmp"), defaultBackColor); //SCHEMA_ASSOC_ABSTRACT2
}
else
{
imgList.Images.Add ((Image)new Bitmap(GetType(), "closed_fol.bmp"), defaultBackColor);
imgList.Images.Add ((Image)new Bitmap(GetType(), "open_fol.bmp"), defaultBackColor);
imgList.Images.Add ((Image)new Bitmap(GetType(), "class.bmp"), defaultBackColor);
imgList.Images.Add ((Image)new Bitmap(GetType(), "classassoc.bmp"), defaultBackColor);
imgList.Images.Add ((Image)new Bitmap(GetType(), "abstr1.bmp"), defaultBackColor);
imgList.Images.Add ((Image)new Bitmap(GetType(), "abstr2.bmp"), defaultBackColor);
imgList.Images.Add ((Image)new Bitmap(GetType(), "abstr_assoc1.bmp"), defaultBackColor); //SCHEMA_ASSOC_ABSTRACT1
imgList.Images.Add ((Image)new Bitmap(GetType(), "abstr_assoc2.bmp"), defaultBackColor); //SCHEMA_ASSOC_ABSTRACT2
}
//classList.ImageList = imgList;
/*
TODO:
ADD
MORE IMAGES
TO THE STRIP AND USE THE STRIP
closed & open folder, assoc folders, obj groups etc.? */
/*
TODO: USE TRANSPARENT COLOR
RIGHT NOW, BITMAPS HAVE WHITE INSTEAD OF TRANSPARENT
*/
btnAdd.Location = new Point(226, 150);
btnAdd.TabStop = true;
btnAdd.Text = WMISys.GetString("WMISE_ClassSelectorBtnAdd");
btnAdd.Click += new EventHandler(this.Add_click);
btnAdd.Enabled = false;
btnRemove.Location = new Point(226, 200);
btnRemove.TabStop = true;
btnRemove.Text = WMISys.GetString("WMISE_ClassSelectorBtnRemove");
btnRemove.Click += new EventHandler(this.Remove_click);
btnRemove.Enabled = false;
labelSelected.Location = new Point(311, 43);
labelSelected.Size = (Size) new Point(200, 20);
labelSelected.TabStop = false;
labelSelected.Text = WMISys.GetString("WMISE_ClassSelectorSelClassesLbl");
selectedClassList.Location = new Point(311, 63);
selectedClassList.Size = (Size) new Point(200, 270);
selectedClassList.SelectionMode = SelectionMode.MultiExtended;
selectedClassList.Sorted = true;
//initialize selected class list
String[] arSel = selectedClasses.ToArray();
for (int i = 0; i < arSel.Length; i++)
{
selectedClassList.Items.Add (arSel[i]);
}
selectedClassList.Click += new EventHandler (this.AfterClassSelect);
selectedClassList.KeyUp += new KeyEventHandler (this.OnClassListKeyUp);
selectedClassList.DoubleClick += (new EventHandler(this.Remove_click));
/*
chkShowData.Checked = ((currentFilters & SchemaFilters.NoData) == 0);
chkShowData.Location = new Point(500, 370);
chkShowData.Text = "Data";
chkShowData.Click += new EventHandler(this.Filter_click);
chkShowData.Visible = false;
chkShowSystem.Checked = ((currentFilters & SchemaFilters.NoSystem) == 0);
chkShowSystem.Location = new Point(550, 370);
chkShowSystem.Text = "System";
chkShowSystem.Click += new EventHandler(this.Filter_click);
chkShowSystem.Visible = false;
chkShowEvent.Checked = ((currentFilters & SchemaFilters.NoEvent) == 0);
chkShowEvent.Location = new Point(500, 400);
chkShowEvent.Text = "Event";
chkShowEvent.Click += new EventHandler(this.Filter_click);
chkShowEvent.Visible = false;
chkShowAbstract.Checked = ((currentFilters & SchemaFilters.NoAbstract) == 0);
chkShowAbstract.Location = new Point( 550, 400);
chkShowAbstract.Text = "Abstract";
chkShowAbstract.Click += new EventHandler(this.Filter_click);
chkShowAbstract.Visible = false;
*/
descr.Text = "";
descr.Location = new Point (16, 342);
descr.Size = (Size) new Point (500, 75);
descr.Multiline = true;
descr.ReadOnly = true;
descr.ScrollBars = ScrollBars.Vertical;
okBtn.Text = WMISys.GetString("WMISE_OK");
okBtn.TabIndex = 1;
okBtn.Location = new Point(350, 427);
okBtn.DialogResult = DialogResult.OK;
okBtn.Click += new EventHandler(this.OK_click);
cancelBtn.Text = WMISys.GetString("WMISE_Cancel");
cancelBtn.TabIndex = 2;
cancelBtn.Location = new Point(436, 427);
cancelBtn.DialogResult = DialogResult.Cancel;
this.Controls.All = new Control[] {cancelBtn,
okBtn,
classList,
selectedClassList,
//chkShowAbstract,
//chkShowSystem,
//chkShowEvent,
//chkShowData,
labelSearch,
labelSelected,
editSearch,
btnGo,
btnAdd,
btnRemove,
descr
};
wbemLocator = WmiHelper.WbemLocator;//(ISWbemLocator)(new SWbemLocator());
EnumNamespaces("root", 0);
}
catch (Exception exc)
{
MessageBox.Show(WMISys.GetString("WMISE_Exception", exc.Message, exc.StackTrace));
}
}
private bool EnumNamespaces(String parent, int num)
//recursively adds namespaces to the drop-down box
{
try
{
try
{
wbemServices = wbemLocator.ConnectServer(machineName,
parent,
"", "", "", "", 0, null);
}
catch (Exception e)
{
//could not connect to the namespace
//The most common cause is "Access denied"
if (parent.ToLower() == "root")
{
//could not connect to Root, put error description text in the treeview
TreeNode errNode = new TreeNode(e.Message);
classList.Nodes.Add(num, errNode);
}
return false;
}
//show the node
TreeNode dummy = new TreeNode("");
TreeNode[] children = new TreeNode[] {dummy};
TreeNode nsNode = new TreeNode(parent,
//(int)schema_icons.SCHEMA_NS_CLOSED,
//(int)schema_icons.SCHEMA_NS_CLOSED,
children);
nsNode.Collapse();
classList.Nodes.Add(num, nsNode);
ISWbemObjectSet objSet = wbemServices.InstancesOf("__NAMESPACE", 0, null);
IEnumerator eInstances = ((IEnumerable)objSet).GetEnumerator();
while(eInstances.MoveNext())
{
num++;
ISWbemObject obj = (ISWbemObject)eInstances.Current;
ISWbemPropertySet props = (ISWbemPropertySet)obj.Properties_;
string NameOut = "";
string curName = props.Item("Name", 0).get_Value().ToString();
//skip localized namespace
//NOTE: this assumes that localized namespaces are always leaf
if (curName.ToUpper().IndexOf("MS_", 0) == 0)
{
continue;
}
//skip root\security namespace (we don't want to expose it)
if (curName.ToUpper() == "SECURITY" && parent.ToUpper() == "ROOT")
{
continue;
}
//skip root\directory\ldap namespace (BUGBUG: change this in Beta2 when we can do asynchronous class enumerations)
if (curName.ToUpper() == "LDAP" && parent.ToUpper() == "ROOT\\DIRECTORY")
{
continue;
}
if (parent != "")
{
NameOut = parent + "\\" + curName;
}
else
{
NameOut = curName;
}
EnumNamespaces(NameOut, num);
}
return true;
}
catch (Exception e)
{
MessageBox.Show(WMISys.GetString("WMISE_Exception", e.Message, e.StackTrace));
return false;
}
}
protected virtual void BeforeNodeExpand(Object sender, TreeViewCancelEventArgs args)
{
TreeNode curNode = args.node;
//check that this is a namespace
if (curNode.Parent != null)
{
return;
}
//if list is empty (one empty child node is an indicator), get new classes
curNode.ImageIndex = (int)schema_icons.SCHEMA_NS_OPEN;
curNode.SelectedImageIndex = (int)schema_icons.SCHEMA_NS_OPEN;
if ((curNode.Nodes.Count == 1 && curNode.Nodes[0].Text == "")) //list is empty
{
ShowClasses( args.node);
}
}
protected virtual void BeforeNodeCollapse(Object sender, TreeViewCancelEventArgs args)
{
TreeNode curNode = args.node;
//check that this is a namespace
if (curNode.Parent != null)
{
return;
}
curNode.ImageIndex = (int)schema_icons.SCHEMA_NS_CLOSED;
curNode.SelectedImageIndex = (int)schema_icons.SCHEMA_NS_CLOSED;
}
protected virtual void AfterNodeSelect(Object sender, TreeViewEventArgs args)
{
try
{
if (classList.SelectedNode != null)
{
btnAdd.Enabled = true;
}
TreeNode curNode = args.node;
//check if this is a namespace
if (curNode.Parent == null)
{
descr.Text = GetNSDescription(curNode.Text);
}
else
{
//Update description field
UpdateClassDescription(ClassListControls.ClassTreeView);
}
}
catch (Exception e)
{
MessageBox.Show(WMISys.GetString("WMISE_Exception", e.Message, e.StackTrace));
}
}
protected virtual void AfterClassSelect(Object sender, EventArgs args)
{
if (selectedClassList.SelectedIndices.Count > 0)
{
btnRemove.Enabled = true;
}
UpdateClassDescription(ClassListControls.SelectedClassList);
}
private bool ShowClasses(TreeNode curNode)
{
//show hourglass
Cursor curSave = classList.Cursor;
classList.Cursor = Cursors.WaitCursor;
try
{
//check that this is a namespace:
if (curNode.Parent != null)
{
return false;
}
curNode.Nodes.Clear();
ISWbemServices services = (ISWbemServices)wbemLocator.ConnectServer(machineName,
curNode.Text,
"", "", "", "", 0, null);
ISWbemObjectSet objSet = services.SubclassesOf("", 0, null);
IEnumerator eClasses = ((IEnumerable)objSet).GetEnumerator();
SortedList classNameList = new SortedList(100);
while (eClasses.MoveNext())
{
ISWbemObject obj = (ISWbemObject)eClasses.Current;
string childName = FilterPass(obj);
if (childName != string.Empty)
{
classNameList.Add(childName, childName);
}
}
for (int i = 0; i < classNameList.Count; i++)
{
TreeNode child = new TreeNode(classNameList.GetByIndex(i).ToString());
curNode.Nodes.Add(child);
}
classList.Cursor = curSave;
return true;
}
catch (Exception e)
{
MessageBox.Show(WMISys.GetString("WMISE_Exception", e.Message, e.StackTrace));
classList.Cursor = curSave;
return false;
}
}
private string FilterPass (ISWbemObject obj)
{
try
{
String strLabel = ((ISWbemObjectPath)(obj.Path_)).RelPath;
//TreeNode child = new TreeNode(strLabel);
//child.ImageIndex = (int)schema_icons.SCHEMA_CLASS;
//child.SelectedImageIndex = (int)schema_icons.SCHEMA_CLASS;
if (WmiHelper.IsAbstract(obj))
{
if (currentFilters == ClassFilters.ConcreteData)
{
return string.Empty;
}
if (!WmiHelper.IsEvent(obj) && (currentFilters == ClassFilters.ExtrinsicEvents))
{
return string.Empty;
}
//child.ImageIndex = (int)schema_icons.SCHEMA_CLASS_ABSTRACT2;
//child.SelectedImageIndex = (int)schema_icons.SCHEMA_CLASS_ABSTRACT2;
}
if (WmiHelper.IsAssociation(obj))
{
if (currentFilters != ClassFilters.All)
{
return string.Empty;
}
else
{
if (!WmiHelper.IsAbstract (obj))
{
//child.ImageIndex = (int)schema_icons.SCHEMA_ASSOC;
//child.SelectedImageIndex = (int)schema_icons.SCHEMA_ASSOC;
}
//else
//{//covered before, in the "abstract" case}
}
}
if (WmiHelper.IsSystem(obj))
{
if (currentFilters != ClassFilters.All)
{
return string.Empty;
}
else
{
//child.ImageIndex = (int)schema_icons.SCHEMA_CLASS_ABSTRACT2;
//child.SelectedImageIndex = (int)schema_icons.SCHEMA_CLASS_ABSTRACT2;
}
}
if (WmiHelper.IsEvent(obj))
{
if (currentFilters == ClassFilters.ConcreteData)
{
return string.Empty;
}
else
{
//child.ImageIndex = (int)schema_icons.SCHEMA_CLASS_ABSTRACT2;
//child.SelectedImageIndex = (int)schema_icons.SCHEMA_CLASS_ABSTRACT2;
}
}
else
{
if (currentFilters == ClassFilters.ExtrinsicEvents)
{
return string.Empty;
}
}
return strLabel;
}
catch (Exception e)
{
MessageBox.Show(WMISys.GetString("WMISE_Exception", e.Message, e.StackTrace));
return string.Empty;
}
}
private bool UpdateView ()
{
try
{
classList.Nodes.Clear();
EnumNamespaces("root", 0);
return true;
}
catch (Exception e)
{
MessageBox.Show(WMISys.GetString("WMISE_Exception", e.Message, e.StackTrace));
return false;
}
}
private void Search_click (Object source, EventArgs args)
{
try
{
TreeNode find = DoSearch();
if (find != null)
{
classList.SelectedNode = find;
//classList.SelectedImageIndex = find.Index;
nodeLastFindNS = find.Parent;
strLastFindClass = find.Text;
find.BackColor = Color.DarkGray;
find.ForeColor = Color.White;
//add found node to a list, so that the color-coding is removed before
//the next search
//MessageBox.Show("Length of found nodes list is " + listSearchHits.Count);
//MessageBox.Show("Found node is " + find.Text);
listSearchHits.Add(find.Handle);
}
}
catch (Exception e)
{
MessageBox.Show(WMISys.GetString("WMISE_Exception", e.Message, e.StackTrace));
}
}
private void SearchPattern_changed (Object source, EventArgs args)
{
try
{
nodeLastFindNS = null;
strLastFindClass = "";
//this is a temp workaround for URT bug 48695: uncomment this later
/*
if (editSearch.Text != "")
{
this.AcceptButton = btnGo;
this.UpdateDefaultButton();
}
else
{
this.AcceptButton = okBtn;
this.UpdateDefaultButton();
}
*/
}
catch (Exception e)
{
MessageBox.Show(WMISys.GetString("WMISE_Exception", e.Message, e.StackTrace));
}
}
private TreeNode DoSearch()
{
try
{
if (editSearch.Text == "")
{
return null;
}
bool bFound = false;
TreeNode retNode = null;
if (nodeLastFindNS == null && strLastFindClass == "")
//Find first case
{
//clean up highlighted nodes from previous search
IEnumerator enumHits = listSearchHits.GetEnumerator();
while (enumHits.MoveNext())
{
Int32 curHandle = (Int32)enumHits.Current;
TreeNode oldHit = TreeNode.FromHandle(classList, curHandle);
oldHit.BackColor = defaultBackColor;
oldHit.ForeColor = defaultForeColor;
}
//clean up the highlighted indices list
listSearchHits.Clear();
//enumerate nodes
for (int i = 0; i < classList.Nodes.Count; i++)
{
TreeNode curNode = classList.Nodes.All[i];
if (curNode.Parent == null ) //this is a namespace
{
if (curNode.Nodes.Count == 1 && curNode.Nodes[0].Text == "")
// a namespace hasn't been expanded before
{
bool bRes = ShowClasses(curNode);
}
String strPattern = editSearch.Text.ToLower();
for (int j = 0; j < curNode.Nodes.Count; j ++)
{
String strClassName = curNode.Nodes.All[j].Text.ToLower();
if (strClassName.IndexOf(strPattern) >= 0)
{
bFound = true;
retNode = curNode.Nodes.All[j];
curNode.Expand(); //if a match was found, expand the namespace
break;
}
}
if (bFound)
{
break;
}
}
}
}
else //Find next funtionality
{
//enumerate top-level nodes (namespaces)
for (int i = 0; i < classList.Nodes.Count; i++)
{
TreeNode curNode = classList.Nodes.All[i];
if (curNode.Parent == null && curNode.Index >= nodeLastFindNS.Index) //this is a namespace
{
if (curNode.Nodes.Count == 1 && curNode.Nodes[0].Text == "")
// the namespace hasn't been expanded
{
bool bRes = ShowClasses(curNode);
}
String strPattern = editSearch.Text.ToLower();
bool bSkipping = (nodeLastFindNS.Text.ToLower() == curNode.Text.ToLower());
for (int j = 0; j < curNode.Nodes.Count; j ++)
{
String strClassName = curNode.Nodes.All[j].Text.ToLower();
if (bSkipping)
{
if (strClassName == strLastFindClass.ToLower())
{
bSkipping = false;
continue;
}
}
else //inspect class
{
if (strClassName.IndexOf(strPattern) >= 0)
{
bFound = true;
retNode = curNode.Nodes.All[j];
curNode.Expand(); //if a match was found, expand the namespace
break;
}
}
}
if (bFound)
{
break;
}
}
}
}
/* wmi raid 2849: beta2. Don't have a localized string.
if (!bFound)
{
MessageBox.Show (WMISys.GetString("WMISE_Search_Failed", editSearch.Text));
}*/
return retNode;
}
catch (Exception e)
{
MessageBox.Show(WMISys.GetString("WMISE_Exception", e.Message, e.StackTrace));
return null;
}
}
private void OnClassDoubleClick (Object source, EventArgs args)
{
try
{
if (classList.SelectedNode.Parent == null)
{
//this is a namespace
return;
}
String path = classList.SelectedNode.Parent.Text + ":" + classList.SelectedNode.Text;
//SingleViewContainerDlg dlg = new SingleViewContainerDlg(path);
//DialogResult ret = dlg.ShowDialog(this);
}
catch (Exception e)
{
MessageBox.Show(WMISys.GetString("WMISE_Exception", e.Message, e.StackTrace));
}
}
private void Add_click (Object source, EventArgs args)
{
try
{
if (classList.SelectedNode.Parent == null)
{
//this is a namespace
DialogResult res =
MessageBox.Show(WMISys.GetString("WMISE_ClassSelectorAskViewAll"),
"",
MessageBox.YesNo);
if (res == DialogResult.No)
{
return;
}
else
{
AddWholeNS(classList.SelectedNode);
}
}
else
{
DoAddNode (classList.SelectedNode);
}
classList.SelectedNode = null;
btnAdd.Enabled = false;
}
catch (Exception e)
{
MessageBox.Show(WMISys.GetString("WMISE_Exception", e.Message, e.StackTrace));
}
}
private void Remove_click (Object source, EventArgs args)
{
try
{
while (selectedClassList.SelectedItems.All.Length > 0)
{
selectedClassList.Items.Remove(selectedClassList.SelectedItems.All[0]);
}
if (selectedClassList.SelectedItems.Count <= 0)
{
btnRemove.Enabled = false;
}
}
catch (Exception e)
{
MessageBox.Show(WMISys.GetString("WMISE_Exception", e.Message, e.StackTrace));
}
}
private void OK_click (Object source, EventArgs args)
{
try
{
selectedClasses.Clear();
for (int i = 0; i < selectedClassList.Items.All.Length; i++)
{
selectedClasses.Add (selectedClassList.Items.All[i].ToString());
}
}
catch (Exception e)
{
MessageBox.Show(WMISys.GetString("WMISE_Exception", e.Message, e.StackTrace));
}
}
private void AddWholeNS(TreeNode selNode)
{
try
{
if (selNode.Parent != null)
{
//this is not a namespace
return;
}
if (selNode.Nodes.Count == 1 && selNode.Nodes[0].Text == "")
// the namespace hasn't been expanded before
{
bool bRes = ShowClasses(selNode);
}
for (int j = 0; j < selNode.Nodes.Count; j ++)
{
DoAddNode(selNode.Nodes.All[j]);
}
}
catch (Exception e)
{
MessageBox.Show(WMISys.GetString("WMISE_Exception", e.Message, e.StackTrace));
}
}
private void DoAddNode (TreeNode node)
{
try
{
String path =
node.Parent.Text + ":" + node.Text;
//see if the item is already there
for (int i = 0; i < selectedClassList.Items.All.Length; i++)
{
if (selectedClassList.Items.All[i].ToString().ToUpper() == path.ToUpper())
{
MessageBox.Show(WMISys.GetString("WMISE_ClassSelectorClassAlreadySelected", path));
//selectedClassList.SelectedItem = selectedClassList.Items.All[i];
return;
}
}
//if not, add it:
selectedClassList.Items.Add(path);
}
catch (Exception e)
{
MessageBox.Show(WMISys.GetString("WMISE_Exception", e.Message, e.StackTrace));
}
}
private string GetNSDescription (string nsName)
{
if (nsName.ToLower() == "root")
{
return WMISys.GetString("WMISE_NSDescription_Root");
}
if (nsName.ToLower() == "root\\default")
{
return WMISys.GetString("WMISE_NSDescription_Root_Default");
}
if (nsName.ToLower() == "root\\cimv2")
{
return WMISys.GetString("WMISE_NSDescription_Root_Cimv2");
}
if (nsName.ToLower() == "root\\cimv2\\applications")
{
return WMISys.GetString("WMISE_NSDescription_Root_Cimv2_Applications");
}
if (nsName.ToLower() == "root\\cimv2\\applications\\microsoftie")
{
return WMISys.GetString("WMISE_NSDescription_Root_Cimv2_Applications_MicrosoftIE");
}
if (nsName.ToLower() == "root\\directory")
{
return WMISys.GetString("WMISE_NSDescription_Root_Directory");
}
if (nsName.ToLower() == "root\\directory\\ldap")
{
return WMISys.GetString("WMISE_NSDescription_Root_Directory_Ldap");
}
if (nsName.ToLower() == "root\\wmi")
{
return WMISys.GetString("WMISE_NSDescription_Root_Wmi");
}
if (nsName.ToLower() == "root\\microsoftsqlserver")
{
return WMISys.GetString("WMISE_NSDescription_Root_Microsoft_SQLServer");
}
return string.Empty;
}
private void OnClassListKeyUp (Object sender, KeyEventArgs args)
{
if ((args.KeyData == Keys.Up && args.Modifiers == Keys.None) ||
(args.KeyData == Keys.Down && args.Modifiers == Keys.None))
{
if (selectedClassList.SelectedIndices.Count > 0)
{
btnRemove.Enabled = true;
}
UpdateClassDescription(ClassListControls.SelectedClassList);
}
}
private void OnTreeKeyUp (Object sender, KeyEventArgs args)
{
if ((args.KeyData == Keys.Up && args.Modifiers == Keys.None) ||
(args.KeyData == Keys.Down && args.Modifiers == Keys.None))
{
if (classList.SelectedNode != null)
{
btnAdd.Enabled = true;
}
if (classList.SelectedNode.Parent == null)
{
descr.Text = GetNSDescription(classList.SelectedNode.Text);
}
else
{
this.UpdateClassDescription(ClassListControls.ClassTreeView);
}
}
}
private bool UpdateClassDescription (ClassListControls curControl)
{
string ns = string.Empty;
string className = string.Empty;
if (curControl == ClassListControls.ClassTreeView)
{
if (classList.SelectedNode != null)
{
ns = classList.SelectedNode.Parent.Text;
className = classList.SelectedNode.Text;
}
}
else //this is a selected class list
{
//see if this is a multiple selection (or nothing is selected) and clear description in this case
if (selectedClassList.SelectedIndices.Count != 1)
{
descr.Text = string.Empty;
return true;
}
string relPath = selectedClassList.SelectedItem.ToString();
ns = relPath.Substring(0, relPath.IndexOf(":"));
className = relPath.Substring(relPath.IndexOf(":") + 1);
// MessageBox.Show(path);
}
ISWbemObject obj = WmiHelper.GetClassObject(machineName,
ns,
className);
string theDescr = WmiHelper.GetClassDescription(obj);
if (theDescr != string.Empty)
{
//Add special handling for newlines: change all "\n" to System.Environment.NewLine:
int i = -1;
string theRest = theDescr;
string theStart = string.Empty;
while ((i = theRest.IndexOf("\n")) >= 0)
{
theStart = theStart + theRest.Substring(0, i) + System.Environment.NewLine;
theRest = theRest.Substring(i + 1);
}
theDescr = theStart + theRest;
descr.Text = theDescr;
return true;
}
else
{
descr.Text = WMISys.GetString("WMISE_NoDescr");
return false;
}
}
public void CleanUpPreviousSelections ()
{
try
{
IEnumerator enumHits = listSearchHits.GetEnumerator();
while (enumHits.MoveNext())
{
Int32 curHandle = (Int32)enumHits.Current;
TreeNode oldHit = TreeNode.FromHandle(classList, curHandle);
oldHit.BackColor = defaultBackColor;
oldHit.ForeColor = defaultForeColor;
}
//clean up the highlighted indices list
listSearchHits.Clear();
//classList.SelectedNode = null;
selectedClassList.SelectedIndices.Clear();
descr.Text = string.Empty;
}
catch (Exception e)
{
MessageBox.Show(WMISys.GetString("WMISE_Exception", e.Message, e.StackTrace));
}
}
/*
private void Filter_click(Object source, EventArgs args)
{
try
{
SchemaFilters newFilters = SchemaFilters.ShowAll;
if (!chkShowAbstract.Checked)
{
newFilters |= SchemaFilters.NoAbstract;
}
if (!chkShowSystem.Checked)
{
newFilters |= SchemaFilters.NoSystem;
}
if (!chkShowEvent.Checked)
{
newFilters |= SchemaFilters.NoEvent;
}
if (!chkShowData.Checked)
{
newFilters |= SchemaFilters.NoData;
}
currentFilters = newFilters;
//TODO: Re-filter open classes;
UpdateView();
}
catch (Exception e)
{
MessageBox.Show(WMISys.GetString("WMISE_Exception", e.Message, e.StackTrace));
return;
}
}*/
/*
private void something ()
{
try
{
}
catch (Exception e)
{
MessageBox.Show(WMISys.GetString("WMISE_Exception", e.Message, e.StackTrace));
}
}
*/
/*
//Handle F3 for searching here
protected override void OnKeyUp (KeyEventArgs args)
{
try
{
//MessageBox.Show("key up: " + args.ToString());
if (args.KeyData == Keys.F3)
{
Search_click (this, null);
}
else
{
base.OnKeyUp(args);
}
}
catch (Exception e)
{
MessageBox.Show(WMISys.GetString("WMISE_Exception", e.Message, e.StackTrace));
}
}
*/
}
}