public void Sort() { Imports.Sort(); Methods.Sort(); Vars.Sort(); Properties.Sort(); }
public void UpdateView(ASClass aClass) { bool updateToken = false; try { DebugConsole.Trace("UI: update "+aClass.ClassName); if (aClass.IsVoid()) return; // compute class data "checksum" to know if it changed string fileName = aClass.FileName; string prevDataCheck = (string)checkEntries[fileName]; StringBuilder sb = new StringBuilder().Append(aClass.Extends.ClassName); foreach(ASMember import in aClass.Imports) sb.Append(import.Name); foreach(ASMember method in aClass.Methods) sb.Append(method.Flags.ToString()).Append(method.ToString()); foreach(ASMember prop in aClass.Properties) sb.Append(prop.Flags.ToString()).Append(prop.ToString()); foreach(ASMember var in aClass.Vars) sb.Append(var.Flags.ToString()).Append(var.ToString()); string classDataCheck = sb.ToString(); // for tree exploration TreeNodeCollection nodes = classTree.Nodes; TreeNode node = null; TreeNode insertBefore = null; // re-sort imports by package aClass.Sort(); ASMemberList import2 = new ASMemberList(); ASMember newImport; foreach(ASMember import in aClass.Imports) { newImport = new ASMember(); newImport.Name = import.Type; import2.Add(newImport); } import2.Sort(); // search item insertion/update position string cname = aClass.ClassName; bool entryExists = false; foreach(TreeNode sub in nodes) { if (sub.Text == cname) { node = sub; entryExists = true; break; } else if (sub.Text.CompareTo(cname) > 0) { insertBefore = sub; break; } } // New class if (node == null) { updateToken = true; classTree.BeginStatefulUpdate(); // create class node node = new TreeNode(cname); node.Tag = aClass.FileName; if (insertBefore != null) nodes.Insert(insertBefore.Index, node); else nodes.Add(node); // class details nodes if (showExtend) node.Nodes.Add(new TreeNode("Extends",1,1)); if (showImports) node.Nodes.Add(new TreeNode("Imports",1,1)); // class members nodes if (memberGroups == 1) { node.Nodes.Add(new TreeNode("Members",1,1)); } else { if (memberGroups > 1) { node.Nodes.Add(new TreeNode("Methods",1,1)); node.Nodes.Add(new TreeNode("Properties",1,1)); } if (memberGroups > 2) node.Nodes.Add(new TreeNode("Variables",1,1)); } } // Check class infos else { if (classDataCheck == prevDataCheck) return; updateToken = true; classTree.BeginStatefulUpdate(); } // // UPDATE CLASS INFO // checkEntries[fileName] = classDataCheck; int index = 0; TreeNode sub2; // entends if (showExtend) { nodes = node.Nodes[index++].Nodes; nodes.Clear(); if (!aClass.Extends.IsVoid()) { if ((aClass.Extends.Flags & FlagType.Intrinsic) > 0) sub2 = new TreeNode(aClass.Extends.ClassName, 7,7); else sub2 = new TreeNode(aClass.Extends.ClassName, 0,0); sub2.Tag = aClass.Extends.FileName; nodes.Add(sub2); } } // imports if (showImports) { nodes = node.Nodes[index++].Nodes; nodes.Clear(); foreach(ASMember import in import2) { if ((import.Flags & FlagType.Intrinsic) > 0) nodes.Add(new TreeNode(import.Name, 7,7)); else nodes.Add(new TreeNode(import.Name, 0,0)); } } // methods int img; if (memberGroups > 0) { nodes = node.Nodes[index++].Nodes; nodes.Clear(); foreach(ASMember method in aClass.Methods) { img = ((method.Flags & FlagType.Private) > 0) ? 12 : 3; sub2 = new TreeNode(method.ToString(), img,img); sub2.Tag = method.Name; nodes.Add(sub2); } // properties if (memberGroups > 1) { nodes = node.Nodes[index++].Nodes; nodes.Clear(); } foreach(ASMember prop in aClass.Properties) { img = ((prop.Flags & FlagType.Private) > 0) ? 13 : 4; sub2 = new TreeNode(prop.ToString(), img,img); sub2.Tag = prop.Name; nodes.Add(sub2); } // variables if (memberGroups > 2) { nodes = node.Nodes[index++].Nodes; nodes.Clear(); } foreach(ASMember var in aClass.Vars) { img = ((var.Flags & FlagType.Private) > 0) ? 14 : 5; sub2 = new TreeNode(var.ToString(),img,img); sub2.Tag = var.Name; nodes.Add(sub2); } } // expand index = 0; if (showExtend) index++; if (showImports) index++; for (int i=0; i<memberGroups; i++) node.Nodes[index++].Expand(); node.Expand(); if (!entryExists) node.EnsureVisible(); } finally { if (updateToken) classTree.EndStatefulUpdate(); } }
/// <summary> /// Search all base packages (com, net, org,...) in classpath /// </summary> /// <returns>Base packages list as members</returns> static public ASMemberList GetBasePackages() { ASMemberList packages = new ASMemberList(); ASMember package; string[] dirEntries; string[] fileEntries; string cname; string upPath; string mmCP = MMClassPath.ToUpper(); string mtascCP = mtascRootFolder.ToUpper(); bool notMacromedia; bool notMTASC; foreach(string path in classPath) try { upPath = path.ToUpper(); notMacromedia = (mmCP.Length == 0) || !upPath.StartsWith(mmCP); notMTASC = (mtascCP.Length == 0) || !upPath.StartsWith(mtascCP); // base classes if (notMacromedia && notMTASC) { try { fileEntries = System.IO.Directory.GetFiles(path, "*.as"); } catch { // fail silently fileEntries = null; } if (fileEntries != null) foreach(string entry in fileEntries) { cname = GetLastStringToken(entry, dirSeparator); int p = cname.LastIndexOf('.'); cname = cname.Substring(0,p); if (!cname.StartsWith("_") && (cname.IndexOf('.') < 0) && (cname.IndexOf(' ') < 0) && (packages.Search(cname, 0) == null)) { //DebugConsole.Trace("Base class "+cname); package = new ASMember(); package.Flags = 0; package.Type = package.Name = cname; packages.Add(package); } } } // base packages if (notMacromedia) { try { dirEntries = System.IO.Directory.GetDirectories(path); } catch { // fail silently dirEntries = null; } if (dirEntries != null) foreach(string entry in dirEntries) { cname = GetLastStringToken(entry, dirSeparator); if (!cname.StartsWith("_") && (cname.IndexOf(' ') < 0) && (cname.IndexOf('.') < 0) && (packages.Search(cname, 0) == null)) { //DebugConsole.Trace("Base package "+cname); package = new ASMember(); package.Flags = FlagType.Package; package.Type = package.Name = cname; packages.Add(package); } } } else if (packages.Search("mx", 0) == null) { package = new ASMember(); package.Flags = FlagType.Package; package.Type = package.Name = "mx"; packages.Add(package); } } catch(Exception ex) { ErrorHandler.ShowError(ex.Message+"\n"+path, ex); } packages.Sort(); return packages; }
public void UpdateView(ASClass aClass) { bool updateToken = false; try { DebugConsole.Trace("UI: update " + aClass.ClassName); if (aClass.IsVoid()) { return; } // compute class data "checksum" to know if it changed string fileName = aClass.FileName; string prevDataCheck = (string)checkEntries[fileName]; StringBuilder sb = new StringBuilder().Append(aClass.Extends.ClassName); foreach (ASMember import in aClass.Imports) { sb.Append(import.Name); } foreach (ASMember method in aClass.Methods) { sb.Append(method.Flags.ToString()).Append(method.ToString()); } foreach (ASMember prop in aClass.Properties) { sb.Append(prop.Flags.ToString()).Append(prop.ToString()); } foreach (ASMember var in aClass.Vars) { sb.Append(var.Flags.ToString()).Append(var.ToString()); } string classDataCheck = sb.ToString(); // for tree exploration TreeNodeCollection nodes = classTree.Nodes; TreeNode node = null; TreeNode insertBefore = null; // re-sort imports by package aClass.Sort(); ASMemberList import2 = new ASMemberList(); ASMember newImport; foreach (ASMember import in aClass.Imports) { newImport = new ASMember(); newImport.Name = import.Type; import2.Add(newImport); } import2.Sort(); // search item insertion/update position string cname = aClass.ClassName; bool entryExists = false; foreach (TreeNode sub in nodes) { if (sub.Text == cname) { node = sub; entryExists = true; break; } else if (sub.Text.CompareTo(cname) > 0) { insertBefore = sub; break; } } // New class if (node == null) { updateToken = true; classTree.BeginStatefulUpdate(); // create class node node = new TreeNode(cname); node.Tag = aClass.FileName; if (insertBefore != null) { nodes.Insert(insertBefore.Index, node); } else { nodes.Add(node); } // class details nodes if (showExtend) { node.Nodes.Add(new TreeNode("Extends", 1, 1)); } if (showImports) { node.Nodes.Add(new TreeNode("Imports", 1, 1)); } // class members nodes if (memberGroups == 1) { node.Nodes.Add(new TreeNode("Members", 1, 1)); } else { if (memberGroups > 1) { node.Nodes.Add(new TreeNode("Methods", 1, 1)); node.Nodes.Add(new TreeNode("Properties", 1, 1)); } if (memberGroups > 2) { node.Nodes.Add(new TreeNode("Variables", 1, 1)); } } } // Check class infos else { if (classDataCheck == prevDataCheck) { return; } updateToken = true; classTree.BeginStatefulUpdate(); } // // UPDATE CLASS INFO // checkEntries[fileName] = classDataCheck; int index = 0; TreeNode sub2; // entends if (showExtend) { nodes = node.Nodes[index++].Nodes; nodes.Clear(); if (!aClass.Extends.IsVoid()) { if ((aClass.Extends.Flags & FlagType.Intrinsic) > 0) { sub2 = new TreeNode(aClass.Extends.ClassName, 7, 7); } else { sub2 = new TreeNode(aClass.Extends.ClassName, 0, 0); } sub2.Tag = aClass.Extends.FileName; nodes.Add(sub2); } } // imports if (showImports) { nodes = node.Nodes[index++].Nodes; nodes.Clear(); foreach (ASMember import in import2) { if ((import.Flags & FlagType.Intrinsic) > 0) { nodes.Add(new TreeNode(import.Name, 7, 7)); } else { nodes.Add(new TreeNode(import.Name, 0, 0)); } } } // methods int img; if (memberGroups > 0) { nodes = node.Nodes[index++].Nodes; nodes.Clear(); foreach (ASMember method in aClass.Methods) { img = ((method.Flags & FlagType.Private) > 0) ? 12 : 3; sub2 = new TreeNode(method.ToString(), img, img); sub2.Tag = method.Name; nodes.Add(sub2); } // properties if (memberGroups > 1) { nodes = node.Nodes[index++].Nodes; nodes.Clear(); } foreach (ASMember prop in aClass.Properties) { img = ((prop.Flags & FlagType.Private) > 0) ? 13 : 4; sub2 = new TreeNode(prop.ToString(), img, img); sub2.Tag = prop.Name; nodes.Add(sub2); } // variables if (memberGroups > 2) { nodes = node.Nodes[index++].Nodes; nodes.Clear(); } foreach (ASMember var in aClass.Vars) { img = ((var.Flags & FlagType.Private) > 0) ? 14 : 5; sub2 = new TreeNode(var.ToString(), img, img); sub2.Tag = var.Name; nodes.Add(sub2); } } // expand index = 0; if (showExtend) { index++; } if (showImports) { index++; } for (int i = 0; i < memberGroups; i++) { node.Nodes[index++].Expand(); } node.Expand(); if (!entryExists) { node.EnsureVisible(); } } finally { if (updateToken) { classTree.EndStatefulUpdate(); } } }
/// <summary> /// Find folder and classes in classpath /// </summary> /// <param name="folder">Path to eval</param> /// <returns>Package folders and classes</returns> static public ASMemberList FindPackage(string folder, bool completeContent) { if ((folder == null) || (folder.Length == 0)) return null; ASMemberList package = new ASMemberList(); ASMember pathMember; string[] dirEntries; string cname; foreach(string path in classPath) try { if (System.IO.Directory.Exists(path+folder)) { // continue parsing? if (!completeContent) return package; // add sub packages try { dirEntries = System.IO.Directory.GetDirectories(path+folder); } catch { // fail silently dirEntries = null; } if (dirEntries != null) foreach(string entry in dirEntries) { cname = GetLastStringToken(entry, dirSeparator); if ((cname.Length > 0) && !cname.StartsWith("_") && (cname.IndexOf(' ') < 0) && (cname.IndexOf('.') < 0) && (package.Search(cname, 0) == null)) { pathMember = new ASMember(); pathMember.Flags = FlagType.Package; pathMember.Type = folder.Replace(dirSeparatorChar, '.')+"."+cname; pathMember.Name = cname; package.Add(pathMember); } } // add sub classes try { dirEntries = System.IO.Directory.GetFiles(path+folder); } catch { // fail silently dirEntries = null; } if (dirEntries != null) foreach(string entry in dirEntries) if (entry.EndsWith(".as")) { cname = GetLastStringToken(entry, dirSeparator); cname = cname.Substring(0, cname.LastIndexOf(".")); pathMember = package.Search(cname, 0); if ((pathMember == null) && (cname.Length > 0) && (cname.IndexOf(' ') < 0) && (cname.IndexOf('.') < 0)) { pathMember = new ASMember(); pathMember.Flags = 0; pathMember.Type = folder.Replace(dirSeparatorChar,'.')+"."+cname; pathMember.Name = cname; package.Add(pathMember); } } } } catch(Exception ex) { ErrorHandler.ShowError(ex.Message+"\n"+path+folder, ex); } // result if (package.Count > 0) { package.Sort(); return package; } else return null; }