fixed an issue to make library reimport working, see #645

This commit is contained in:
hneemann 2021-02-11 19:45:59 +01:00
parent 3362c09b62
commit fafdfe5600
3 changed files with 26 additions and 7 deletions

View File

@ -399,7 +399,7 @@ public final class Main extends JFrame implements ClosingWindowListener.ConfirmS
componentOnPane = split;
} else {
if (treeModel != null) {
library.removeListener(treeModel);
treeModel.close();
treeModel = null;
}
getContentPane().add(circuitScrollPanel);

View File

@ -22,6 +22,7 @@ import java.util.Iterator;
*/
public class LibraryTreeModel implements TreeModel, LibraryListener {
private final LibraryNode root;
private final ElementLibrary library;
private final Filter filter;
private final ArrayList<TreeModelListener> listeners = new ArrayList<>();
private final HashMap<LibraryNode, Container> map;
@ -43,11 +44,19 @@ public class LibraryTreeModel implements TreeModel, LibraryListener {
*/
public LibraryTreeModel(ElementLibrary library, Filter filter) {
root = library.getRoot();
this.library = library;
this.filter = filter;
map = new HashMap<>();
library.addListener(this);
}
/**
* Called to detach the model from the library
*/
public void close() {
library.removeListener(this);
}
@Override
public Object getRoot() {
return root;
@ -89,12 +98,18 @@ public class LibraryTreeModel implements TreeModel, LibraryListener {
@Override
public void libraryChanged(LibraryNode node) {
if (map.remove(node) == null)
if (node.isLeaf()) {
map.remove(node);
TreeModelEvent treeModelEvent = new TreeModelEvent(this, new TreePath(node.getPath()));
for (TreeModelListener l : listeners)
l.treeNodesChanged(treeModelEvent);
} else {
map.clear();
final TreeModelEvent treeModelEvent = new TreeModelEvent(this, new TreePath(node.getPath()));
TreeModelEvent treeModelEvent = new TreeModelEvent(this, new TreePath(root.getPath()));
for (TreeModelListener l : listeners)
l.treeStructureChanged(treeModelEvent);
}
}
/**
* @return the parent of the first leave
@ -143,8 +158,11 @@ public class LibraryTreeModel implements TreeModel, LibraryListener {
if (filter.accept(ln))
list.add(ln);
} else {
if (getContainer(ln).size() > 0)
Container c = new Container(ln, filter);
if (c.size() > 0) {
list.add(ln);
map.put(ln, c);
}
}
}
}

View File

@ -80,8 +80,9 @@ public class SelectTree extends JTree {
if (!oldModel.isFiltered() && newModel.isFiltered())
storedExpanded = getExpandedDescendants(new TreePath(getModel().getRoot()));
boolean restore = oldModel.isFiltered() && !newModel.isFiltered();
oldModel.close();
boolean restore = oldModel.isFiltered() && !newModel.isFiltered();
super.setModel(newModel);
if (restore && storedExpanded != null) {
while (storedExpanded.hasMoreElements())