X-Git-Url: http://git.nikiroo.be/?a=blobdiff_plain;f=src%2Fbe%2Fnikiroo%2Ffanfix_swing%2Fgui%2Fbrowser%2FBasicTab.java;h=c7f1e424421e6a09aede3527b29c8f8d54eba388;hb=62c7e07ef88c8f809b46f4e4525aa0d3f8a9cb14;hp=e9e8edc018f8f4e7880affb2c6c10bc10eaa32a7;hpb=2a03ecc0ae449a05763db2d47935a4c256cd092f;p=nikiroo-utils.git diff --git a/src/be/nikiroo/fanfix_swing/gui/browser/BasicTab.java b/src/be/nikiroo/fanfix_swing/gui/browser/BasicTab.java index e9e8edc..c7f1e42 100644 --- a/src/be/nikiroo/fanfix_swing/gui/browser/BasicTab.java +++ b/src/be/nikiroo/fanfix_swing/gui/browser/BasicTab.java @@ -5,6 +5,9 @@ import java.awt.Component; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.util.ArrayList; +import java.util.Collection; +import java.util.Collections; +import java.util.Comparator; import java.util.List; import java.util.Map; @@ -53,7 +56,8 @@ public abstract class BasicTab extends ListenerPanel { tree = new JTree(root); tree.setUI(new BasicTreeUI()); - TreeCellSpanner spanner = new TreeCellSpanner(tree, generateCellRenderer()); + TreeCellSpanner spanner = new TreeCellSpanner(tree, + generateCellRenderer()); tree.setCellRenderer(spanner); tree.setRootVisible(false); tree.setShowsRootHandles(false); @@ -98,10 +102,26 @@ public abstract class BasicTab extends ListenerPanel { } public void reloadData() { - final TreeSnapshot snapshot = new TreeSnapshot(tree); + final TreeSnapshot snapshot = new TreeSnapshot(tree) { + @Override + protected boolean isSamePath(TreePath oldPath, TreePath newPath) { + String oldString = oldPath.toString(); + if (oldString.endsWith("/]")) + oldString = oldString.substring(0, oldString.length() - 2) + + "]"; + + String newString = newPath.toString(); + if (newString.endsWith("/]")) + newString = newString.substring(0, newString.length() - 2) + + "]"; + + return oldString.equals(newString); + } + }; SwingWorker>, Integer> worker = new SwingWorker>, Integer>() { @Override - protected Map> doInBackground() throws Exception { + protected Map> doInBackground() + throws Exception { fillData(data); return null; } @@ -114,8 +134,6 @@ public abstract class BasicTab extends ListenerPanel { // TODO: error } - // TODO: update is flickering... - root.removeAllChildren(); totalCount = loadData(root, data, searchBar.getText()); ((DefaultTreeModel) tree.getModel()).reload(); @@ -154,7 +172,8 @@ public abstract class BasicTab extends ListenerPanel { String count = ""; if (totalCount > 0) { int selected = selectedElements.size(); - count = " (" + (selected > 0 ? selected + "/" : "") + totalCount + ")"; + count = " (" + (selected > 0 ? selected + "/" : "") + totalCount + + ")"; } return title + count; @@ -169,7 +188,8 @@ public abstract class BasicTab extends ListenerPanel { } protected boolean checkFilter(String filter, String value) { - return (filter == null || filter.isEmpty() || value.toLowerCase().contains(filter.toLowerCase())); + return (filter == null || filter.isEmpty() + || value.toLowerCase().contains(filter.toLowerCase())); } protected boolean checkFilter(String filter, List list) { @@ -182,18 +202,31 @@ public abstract class BasicTab extends ListenerPanel { protected abstract T createEmptyData(); + // beware: you should update it OR clean/re-add it, but previous data may + // still be there protected abstract void fillData(T data); protected abstract String keyToElement(String key); protected abstract String keyToDisplay(String key); - protected abstract int loadData(DefaultMutableTreeNode root, T data, String filter); + protected abstract int loadData(DefaultMutableTreeNode root, T data, + String filter); + + protected void sort(List values) { + Collections.sort(values, new Comparator() { + @Override + public int compare(String o1, String o2) { + return ("" + o1).compareToIgnoreCase("" + o2); + } + }); + } private TreeCellRenderer generateCellRenderer() { DefaultTreeCellRenderer renderer = new DefaultTreeCellRenderer() { @Override - public Component getTreeCellRendererComponent(JTree tree, Object value, boolean selected, boolean expanded, + public Component getTreeCellRendererComponent(JTree tree, + Object value, boolean selected, boolean expanded, boolean leaf, int row, boolean hasFocus) { if (value instanceof DefaultMutableTreeNode) { if (((DefaultMutableTreeNode) value).getLevel() > 1) { @@ -205,10 +238,10 @@ public abstract class BasicTab extends ListenerPanel { } String display = value == null ? "" : value.toString(); - if (!display.isEmpty()) - display = keyToDisplay(display); + display = keyToDisplay(display); - return super.getTreeCellRendererComponent(tree, display, selected, expanded, leaf, row, hasFocus); + return super.getTreeCellRendererComponent(tree, display, + selected, expanded, leaf, row, hasFocus); } };