private void delayedClassTreeSelect(Object sender, System.Timers.ElapsedEventArgs e) { TreeNode node = classTree.SelectedNode; if (node == null) { return; } try { // class node if (node.Parent == null) { if (node.Tag != null) { ASContext.MainForm.OpenSelectedFile((string)node.Tag); } } // group node else if (node.Nodes.Count > 0) { node.Toggle(); } // leaf node else if ((node.Parent != null) && (node.Parent.Tag == null)) { TreeNode classNode = node.Parent.Parent; ScintillaNet.ScintillaControl sci = ASContext.MainForm.CurSciControl; // for Back command: if (sci != null) { SetLastLookupPosition(ASContext.CurrentFile, sci.CurrentPos); } // int index = node.Parent.Index; // extends if (showExtend && index == 0) { if (node.Tag != null) { ASContext.MainForm.OpenSelectedFile((string)node.Tag); } } // import else if (showImports && ((showExtend && index == 1) || (!showExtend && index == 0))) { ASClass aClass = ASContext.FindClassFromFile((string)classNode.Tag); if (aClass.IsVoid()) { return; } ASContext.OpenFileFromClass(node.Text, aClass); } // members else if (node.Tag != null) { ASContext.MainForm.OpenSelectedFile((string)classNode.Tag); sci = ASContext.MainForm.CurSciControl; if (sci == null) { return; } // look for declaration string pname = Regex.Escape((string)node.Tag); Match m = null; switch (node.ImageIndex) { case 12: // method case 3: m = Regex.Match(sci.Text, "function[\\s]+(?<pname>" + pname + ")[\\s]*\\("); break; case 13: // property case 4: m = Regex.Match(sci.Text, "function[\\s]+(?<pname>(g|s)et[\\s]+" + pname + ")[\\s]*\\("); break; case 14: // variables case 5: m = Regex.Match(sci.Text, "var[\\s]+(?<pname>" + pname + ")[^\\w]"); break; } // show if (m != null && m.Success) { GotoPosAndFocus(sci, m.Groups["pname"].Index); sci.SetSel(sci.CurrentPos, sci.CurrentPos + m.Groups["pname"].Length); } } } } catch (Exception ex) { ErrorHandler.ShowError(ex.Message, ex); } }