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; componentOnPane = split;
} else { } else {
if (treeModel != null) { if (treeModel != null) {
library.removeListener(treeModel); treeModel.close();
treeModel = null; treeModel = null;
} }
getContentPane().add(circuitScrollPanel); getContentPane().add(circuitScrollPanel);

View File

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

View File

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