ProcessAfterSelect(TreeNode treeNode) { if (treeNode != null) { // remember this node for later m_memoryNode = treeNode; // don't sort initially, just insert according to the hierarchy m_colSorter.Order = SortOrder.None; m_txtDesc.Text = string.Empty; if (treeNode.Tag == null) { m_pickedTestFunc = null; m_curFuncBucket.Clear(); } else // see if it is Category based or Hierarchy based { string categoryStr = treeNode.Tag as string; if (categoryStr == null) // if tag is a class type { GetTests((System.Type)treeNode.Tag, m_checkBxBaseTestsInclude.Checked); } else { GetTests(categoryStr); } } DisplayCurrent(); } }
BuildTree() { TreeNode categoryItem, objHierItem; // extablish the two basic roots of the tree categoryItem = AddTreeItem("Categories", null, null, ImageIconList.Test); objHierItem = AddTreeItem("Object Hierarchy", null, null, ImageIconList.Test); // For the Object Hierarchy section of the tree, we need to add in the root // type to anchor us (for us, the root only makes sense as APIObject) System.Type rootType = typeof(Autodesk.AutoCAD.Runtime.RXObject); TreeNode rootNode = new TreeNode(rootType.Name); rootNode.ImageIndex = (int)ImageIconList.Class; rootNode.SelectedImageIndex = (int)ImageIconList.Class; rootNode.Tag = rootType.Name; rootNode.Tag = rootType; objHierItem.Nodes.Add(rootNode); // Add to our cached items of what we've visited m_classTypes.Add(rootType); m_treeNodes.Add(rootNode); m_placedClasses.Add(rootType); m_treeItems.Add(rootNode); // walk through all the TestFunc buckets and place each function // in the appropriate spot in the tree (sorted by class hierarchy). // NOTE: they've already been sorted into unique buckets so we // don't have to look for duplicates. MgdDbgTestFuncInfo tmpTestFuncInfo = null; ArrayList tmpBucket = null; int len = m_funcBuckets.Count; for (int i = 0; i < len; i++) { tmpBucket = (ArrayList)m_funcBuckets[i]; tmpTestFuncInfo = (MgdDbgTestFuncInfo)tmpBucket[0]; if (tmpTestFuncInfo.IsCategoryBased) { // just add the new Category to the tree AddTreeItem(tmpTestFuncInfo.Category, tmpTestFuncInfo.Category, categoryItem, ImageIconList.Category); } else { // add an entry for this classType and any intermediate type in the hierarchy AddNodeForClassType(tmpTestFuncInfo.ClassType); } } }
ItemSelected(object sender, System.EventArgs e) { Debug.Assert((m_lvData.SelectedItems.Count > 1) == false); if (m_lvData.SelectedItems.Count != 0) { m_pickedTestFunc = (MgdDbgTestFuncInfo)m_lvData.SelectedItems[0].Tag; m_txtDesc.Text = m_pickedTestFunc.Description; // remember the key of the last selected test m_itemKey = m_lvData.SelectedItems[0].Name; } else { m_pickedTestFunc = null; } }
DisplayCurrent() { m_lvData.BeginUpdate(); m_lvData.Items.Clear(); int len = m_curFuncBucket.Count; for (int i = 0; i < len; i++) { MgdDbgTestFuncInfo tmpTestFuncInfo = (MgdDbgTestFuncInfo)m_curFuncBucket[i]; ListViewItem lvItem = new ListViewItem(tmpTestFuncInfo.Label); lvItem.Name = tmpTestFuncInfo.Label; if (tmpTestFuncInfo.IsCategoryBased) { lvItem.SubItems.Add(tmpTestFuncInfo.Category); } else { lvItem.SubItems.Add(tmpTestFuncInfo.ClassType.Name); } lvItem.SubItems.Add(tmpTestFuncInfo.GetTestType().ToString()); lvItem.SubItems.Add(tmpTestFuncInfo.Description); lvItem.Tag = tmpTestFuncInfo; m_lvData.Items.Add(lvItem); } m_lvData.EndUpdate(); // if we can remember the last selected test then select it if (m_itemKey.Length != 0) { if (m_lvData.Items[m_itemKey] != null) { m_lvData.FocusedItem = m_lvData.Items[m_itemKey]; m_lvData.Items[m_itemKey].Selected = true; } } // remove all from current bucket for next selection m_curFuncBucket.Clear(); }
AddFuncToBucket(MgdDbgTestFuncInfo newTestFuncInfo) { MgdDbgTestFuncInfo tempFuncInfo = null; ArrayList tmpBucket = null; // walk the list of buckets. If we see one already there that we belong // to, just add ourselves. If not, then add a new bucket with the passed // in testFuncInfo as the first member. int len = m_funcBuckets.Count; for (int i = 0; i < len; i++) { tmpBucket = (ArrayList)m_funcBuckets[i]; tempFuncInfo = (MgdDbgTestFuncInfo)tmpBucket[0]; // get the first element to compare against if (newTestFuncInfo.IsCategoryBased) { if ((tempFuncInfo.IsCategoryBased) && (tempFuncInfo.Category.CompareTo(newTestFuncInfo.Category) == 0)) { tmpBucket.Add(newTestFuncInfo); return; } } else { if (!(tempFuncInfo.IsCategoryBased) && (tempFuncInfo.ClassType == newTestFuncInfo.ClassType)) { tmpBucket.Add(newTestFuncInfo); return; } } } // we didn't find an existing bucket, so make a new one and add this as the first item ArrayList newBucket = new ArrayList(); newBucket.Add(newTestFuncInfo); m_funcBuckets.Add(newBucket); }