private Collection<EditorSchemeAttributeDescriptor> getOrderedDescriptors( @NotNull ColorAndFontOptions options) { ArrayList<EditorSchemeAttributeDescriptor> list = ContainerUtil.newArrayList(); for (EditorSchemeAttributeDescriptor description : options.getCurrentDescriptions()) { if (!description.getGroup().equals(myCategoryName)) continue; list.add(description); } Collections.sort(list, ATTR_COMPARATOR); return list; }
public void fillOptions(@NotNull ColorAndFontOptions options) { DefaultMutableTreeNode root = new DefaultMutableTreeNode(); for (EditorSchemeAttributeDescriptor description : getOrderedDescriptors(options)) { if (!description.getGroup().equals(myCategoryName)) continue; List<String> path = extractPath(description); if (path != null && path.size() > 1) { MyTreeNode groupNode = ensureGroup(root, path, 0); groupNode.add(new MyTreeNode(description, path.get(path.size() - 1))); } else { root.add(new MyTreeNode(description)); } } myTreeModel.setRoot(root); }
@Nullable private static List<String> extractPath(@NotNull EditorSchemeAttributeDescriptor descriptor) { if (descriptor instanceof ColorAndFontDescription) { String name = descriptor.toString(); List<String> path = new ArrayList<String>(); int separatorStart = name.indexOf(NAME_SEPARATOR); int nextChunkStart = 0; while (separatorStart > 0) { path.add(name.substring(nextChunkStart, separatorStart)); nextChunkStart = separatorStart + NAME_SEPARATOR.length(); separatorStart = name.indexOf(NAME_SEPARATOR, nextChunkStart); } if (nextChunkStart < name.length()) { path.add(name.substring(nextChunkStart)); } return path; } return null; }
@Override public int compare(EditorSchemeAttributeDescriptor o1, EditorSchemeAttributeDescriptor o2) { return StringUtil.naturalCompare(o1.toString(), o2.toString()); }
public MyTreeNode(@NotNull EditorSchemeAttributeDescriptor descriptor) { super(descriptor); myName = descriptor.toString(); }