- Timestamp:
- 2018-12-16T22:49:11+13:00 (5 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
main/trunk/gli/src/org/greenstone/gatherer/gui/TestingPreparation.java
r32695 r32700 34 34 root.setName(className); 35 35 36 setNamesRecursively("", root );37 if (DEBUGGING_TEST_MODE) printComponentNames(root, "");36 setNamesRecursively("", root, "", true); 37 //if (DEBUGGING_TEST_MODE) printComponentNames(root, ""); 38 38 } 39 39 40 p ublic static void setNamesRecursively(String prefix, Component root) {41 if(!TEST_MODE) return; 42 40 private static void setNamesRecursively(String prefix, Component root, String tabSpace, boolean isTrueRoot) { 41 if(!TEST_MODE) return; 42 43 43 // root starts off as GLI's JFrame, so we know that all its GUI children are specifically JComponents 44 44 … … 50 50 if(root.getName() == null || root.getName().equals("")) { // if name not already set 51 51 if(!prefix.equals("")){ 52 // TODO: fix this53 root.setName(prefix + "." + className); 52 // TODO: set this to something more meaningful? 53 root.setName(prefix + "." + className); 54 54 } 55 55 else { … … 57 57 } 58 58 } // else swing Component name already set 59 59 60 // now we can print out this element's name for debugging 61 if (DEBUGGING_TEST_MODE) System.err.println(tabSpace + root.getName()); 60 62 } else { // root is in GLI GUI package, use its classname for name 61 63 62 64 if(root.getName() == null || root.getName().equals("")) { 63 65 root.setName(className); 66 } else if(!isTrueRoot) { 67 // then the name of this GLI GUI element (i.e. of GLI GUI package) was already set 68 // we've recursively dealt with this GLI element and its children already 69 // Prevents cyclic widget references being processed in a cyclic loop ending 70 // in a StackOverflowError 71 return; 64 72 } 73 // now we can print out this element's name for debugging 74 if (DEBUGGING_TEST_MODE) System.err.println(tabSpace + root.getName()); 75 65 76 prefix = className; 66 77 67 78 // check member vars 68 Field[] memberVars = root.getClass().getDeclaredFields(); // private to public member vars, but not inherited ones 79 Field[] memberVars = root.getClass().getDeclaredFields(); // private to public member vars, but not inherited ones 80 69 81 for(int i = 0; i < memberVars.length; i++) { 70 82 memberVars[i].setAccessible(true); // make private/protected etc fields accessible … … 73 85 Class jCompClass = Container.class; 74 86 Class memberVarClass = memberVars[i].getType(); 75 76 // memberVarClass is a JComponen (subclass)87 88 // memberVarClass is a JComponent (JComponent or subclass) 77 89 if(jCompClass.isAssignableFrom(memberVarClass)) { 78 90 … … 90 102 if(!memberVarClass.getPackage().getName().contains("org.greenstone.gatherer.gui")) { 91 103 String memberprefix = prefix + "." + memberVars[i].getName(); // append member var name 104 92 105 // now can call setName() on the actual member variable 93 106 memberComponent.setName(memberprefix); 94 setNamesRecursively(memberprefix, memberComponent );107 setNamesRecursively(memberprefix, memberComponent, tabSpace+" ", false); 95 108 } 96 109 97 110 //else the member variable is a GLI GUI class, use its className as prefix for child components 98 111 // Skip this step to avoid circular references to our own member vars 99 /*else { // member variable is a GLI GUI class, use its className as prefix for child components 100 String memberprefix = memberVarClass.getSimpleName(); 101 memberComponent.setName(memberprefix); 102 setNamesRecursively(memberprefix, memberComponent); 103 }*/ 104 112 113 else { // member variable is a GLI GUI class. 114 // will be using its className as prefix for child components 115 116 //String memberprefix = memberVarClass.getSimpleName(); 117 //memberComponent.setName(memberprefix); 118 setNamesRecursively("", memberComponent, tabSpace+" ", false); 119 } 120 105 121 106 122 } … … 117 133 // No worries about AWT tree lock: setNamesRecursively is called by openGUI 118 134 // which is specifically called by GathererProg on the Event Dispatch Thread (EDT) 135 136 119 137 Component[] children = ((Container)root).getComponents(); 138 120 139 for(int i = 0; i < children.length; i++) { 121 140 // if we haven't already set a name for any child JComponents with the above, 122 141 // then the following will do so now 123 setNamesRecursively(className, children[i] );124 } 125 142 setNamesRecursively(className, children[i], tabSpace+" ", false); 143 } 144 126 145 } 127 146 128 147 129 // For debugging swing Component names assigned with Container's setName() 148 // For debugging swing Component names assigned with Container's setName() 149 // Wasted a lot of my time debugging why menu bar items' names weren't set by setNamesRecursively(). 150 // Turns out they were being set, but that sadly 151 // this method doesn't seem to print all components, e.g. JMenuItems of JMenus of a JMenuBar 152 // Perhaps because those are available only through getSubElements() rather than 153 // through getComponents()? 154 // So have now shifted the printing of elements that we manually set into setNamesRecursively() above. 155 // I'd have preferred this printing method since it prints out the component names in 156 // hierarchical order rather than the sometimes arbitrary order that GUI member vars are 157 // declared in GLI's own GUI classes. 130 158 public static void printComponentNames(Component root, String tabbing) { 131 159 if(!TEST_MODE) return;
Note:
See TracChangeset
for help on using the changeset viewer.