//=============================================================================================================//
/** Regenerate all the customization widgets based on the latest settings. */
public void remakeAll() {
// Make the tree
final OurTree tree = new OurTree(12) {
private static final long serialVersionUID = 0;
private final AlloyModel old = vizState.getOriginalModel(), now = vizState.getCurrentModel();
private final boolean hidePrivate = vizState.hidePrivate(), hideMeta = vizState.hideMeta();
{
do_start();
setRootVisible(false);
setShowsRootHandles(false);
listeners.add(new Listener() {
public Object do_action(Object sender, Event event) { return null; }
public Object do_action(Object sender, Event event, Object arg) { zoom(arg); return null; }
});
}
@Override public String convertValueToText(Object value, boolean sel, boolean expand, boolean leaf, int i, boolean focus) {
if (value==GENERAL) return "<html><b>general graph settings</b></html>";
if (value==NODES) return "<html><b>types and sets</b></html>";
if (value==EDGES) return "<html><b>relations</b></html>";
if (value instanceof AlloyType) {
AlloyType x = (AlloyType)value;
if (vizState.getCurrentModel().hasType(x)) return "<html><b>sig</b> "+typename(x)+"</html>";
return "<html><b>sig</b> "+typename(x)+" <font color=\"#808080\">(projected)</font></html>";
}
if (value instanceof AlloySet) return "<html><b>set</b> "+ ((AlloySet)value).getName() + "</html>";
if (value instanceof AlloyRelation) return value.toString(); else return "";
}
@Override public List<?> do_ask(Object parent) {
ArrayList<Object> ans = new ArrayList<Object>();
if (parent==ROOT) { ans.add(GENERAL); ans.add(NODES); ans.add(EDGES); }
else if (parent==NODES) { ans.add(AlloyType.UNIV); }
else if (parent==EDGES) {
for (AlloyRelation rel: vizState.getCurrentModel().getRelations())
if (!(hidePrivate && rel.isPrivate) && !(hideMeta && rel.isMeta)) ans.add(rel);
} else if (parent instanceof AlloyType) {
AlloyType type = (AlloyType)parent;
for (AlloySet s:now.getSets())
if (!(hidePrivate && s.isPrivate) && !(hideMeta && s.isMeta) && s.getType().equals(type)) ans.add(s);
if (!type.isEnum) for(AlloyType t: old.getDirectSubTypes(type))
if (!(hidePrivate && t.isPrivate) && !(hideMeta && t.isMeta))
if (now.hasType(t) || vizState.canProject(t)) ans.add(t);
}
return ans;
}
@Override public boolean do_isDouble(Object object) { return object==NODES || object==EDGES; }
@Override public Object do_root() { return ROOT; }
};
// Pre-expand the entire tree.
TreePath last = null;
for(int i=0; i<tree.getRowCount(); i++) {
tree.expandRow(i);
if (lastElement!=null && last==null) {last=tree.getPathForRow(i); if (lastElement!=last.getLastPathComponent()) last=null;}
}
// Show the current element if found, else show the GENERAL OPTIONS
if (last!=null) { zoom(lastElement); } else { last = tree.getPathForRow(0); zoom(GENERAL); }
tree.scrollPathToVisible(last);
tree.setSelectionPath(last);
JScrollPane scroll = OurUtil.scrollpane(tree, Color.BLACK, Color.WHITE, new OurBorder(false, false, false, Util.onMac()));
scroll.setAlignmentX(0f);
scroll.getVerticalScrollBar().setUnitIncrement(50);
removeAll();
add(zoomPane);