mirror of
https://git.huckle.dev/Huckles-Minecraft-Archive/jpexs-decompiler.git
synced 2026-09-25 00:50:51 +00:00
faster tree cell renderer construction
This commit is contained in:
@@ -128,9 +128,12 @@ import java.awt.event.MouseEvent;
|
|||||||
import java.lang.reflect.InvocationTargetException;
|
import java.lang.reflect.InvocationTargetException;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.Arrays;
|
import java.util.Arrays;
|
||||||
|
import java.util.HashMap;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
import java.util.Map;
|
||||||
import java.util.logging.Level;
|
import java.util.logging.Level;
|
||||||
import java.util.logging.Logger;
|
import java.util.logging.Logger;
|
||||||
|
import javax.swing.Icon;
|
||||||
import javax.swing.JComponent;
|
import javax.swing.JComponent;
|
||||||
import javax.swing.JMenu;
|
import javax.swing.JMenu;
|
||||||
import javax.swing.JMenuItem;
|
import javax.swing.JMenuItem;
|
||||||
@@ -163,6 +166,28 @@ public class TagTree extends JTree implements ActionListener {
|
|||||||
|
|
||||||
public class TagTreeCellRenderer extends DefaultTreeCellRenderer {
|
public class TagTreeCellRenderer extends DefaultTreeCellRenderer {
|
||||||
|
|
||||||
|
private Font plainFont;
|
||||||
|
|
||||||
|
private Font boldFont;
|
||||||
|
|
||||||
|
private Map<TreeNodeType, Icon> icons;
|
||||||
|
|
||||||
|
public TagTreeCellRenderer() {
|
||||||
|
setUI(new BasicLabelUI());
|
||||||
|
setOpaque(false);
|
||||||
|
//setBackground(Color.green);
|
||||||
|
setBackgroundNonSelectionColor(Color.white);
|
||||||
|
//setBackgroundSelectionColor(Color.ORANGE);
|
||||||
|
|
||||||
|
icons = new HashMap<>();
|
||||||
|
for (TreeNodeType treeNodeType : TreeNodeType.values()) {
|
||||||
|
if (treeNodeType != TreeNodeType.UNKNOWN && treeNodeType != TreeNodeType.SHOW_FRAME) {
|
||||||
|
String tagTypeStr = treeNodeType.toString().toLowerCase().replace("_", "");
|
||||||
|
icons.put(treeNodeType, View.getIcon(tagTypeStr + "16"));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Component getTreeCellRendererComponent(
|
public Component getTreeCellRendererComponent(
|
||||||
JTree tree,
|
JTree tree,
|
||||||
@@ -179,44 +204,34 @@ public class TagTree extends JTree implements ActionListener {
|
|||||||
hasFocus);
|
hasFocus);
|
||||||
TreeItem val = (TreeItem) value;
|
TreeItem val = (TreeItem) value;
|
||||||
TreeNodeType type = getTreeNodeType(val);
|
TreeNodeType type = getTreeNodeType(val);
|
||||||
if (type != null) {
|
|
||||||
if (type == TreeNodeType.FOLDER && expanded) {
|
if (type == TreeNodeType.FOLDER && expanded) {
|
||||||
type = TreeNodeType.FOLDER_OPEN;
|
type = TreeNodeType.FOLDER_OPEN;
|
||||||
}
|
|
||||||
String itemName = type.toString();
|
|
||||||
if (type == TreeNodeType.FOLDER || type == TreeNodeType.FOLDER_OPEN) {
|
|
||||||
if (val instanceof FolderItem) {
|
|
||||||
FolderItem si = (FolderItem) val;
|
|
||||||
if (!TagTreeRoot.FOLDER_ROOT.equals(si.getName())) {
|
|
||||||
itemName = "folder" + si.getName();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
String tagTypeStr = itemName.toLowerCase().replace("_", "");
|
|
||||||
setIcon(View.getIcon(tagTypeStr + "16"));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
Font font = getFont();
|
if ((type == TreeNodeType.FOLDER || type == TreeNodeType.FOLDER_OPEN) && val instanceof FolderItem) {
|
||||||
boolean isModified = false;
|
FolderItem si = (FolderItem) val;
|
||||||
if (val instanceof Tag) {
|
if (!TagTreeRoot.FOLDER_ROOT.equals(si.getName())) {
|
||||||
Tag tag = (Tag) val;
|
String itemName = "folder" + si.getName();
|
||||||
if (tag.isModified()) {
|
setIcon(View.getIcon(itemName.toLowerCase() + "16"));
|
||||||
isModified = true;
|
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
if (isModified) {
|
|
||||||
font = font.deriveFont(Font.BOLD);
|
|
||||||
} else {
|
} else {
|
||||||
font = font.deriveFont(Font.PLAIN);
|
setIcon(icons.get(type));
|
||||||
}
|
}
|
||||||
setFont(font);
|
|
||||||
|
|
||||||
setUI(new BasicLabelUI());
|
boolean isModified = val instanceof Tag && ((Tag) val).isModified();
|
||||||
setOpaque(false);
|
if (isModified) {
|
||||||
//setBackground(Color.green);
|
if (boldFont == null) {
|
||||||
setBackgroundNonSelectionColor(Color.white);
|
Font font = getFont();
|
||||||
//setBackgroundSelectionColor(Color.ORANGE);
|
boldFont = font.deriveFont(Font.BOLD);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
if (plainFont == null) {
|
||||||
|
Font font = getFont();
|
||||||
|
plainFont = font.deriveFont(Font.PLAIN);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
setFont(isModified ? boldFont : plainFont);
|
||||||
|
|
||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user